From ed5640d8b587fbcfed7dd7967f3de04b37a76f26 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:06:44 +0200 Subject: Adding upstream version 4:7.4.7. Signed-off-by: Daniel Baumann --- sal/CompilerTest_sal_rtl_oustring.mk | 16 + sal/CppunitTest_Module_DLL.mk | 26 + sal/CppunitTest_sal_comtools.mk | 24 + sal/CppunitTest_sal_osl.mk | 44 + sal/CppunitTest_sal_osl_security.mk | 21 + sal/CppunitTest_sal_retry_if_failed.mk | 16 + sal/CppunitTest_sal_rtl.mk | 75 + sal/CppunitTest_sal_types.mk | 21 + sal/Executable_cppunittester.mk | 45 + sal/Executable_osl_process_child.mk | 42 + sal/Library_lo-bootstrap.mk | 31 + sal/Library_sal.mk | 259 + sal/Library_sal_textenc.mk | 33 + sal/Makefile | 24 + sal/Module_sal.mk | 40 + sal/README.md | 11 + sal/android/libreofficekit-jni.c | 209 + sal/android/lo-bootstrap.c | 921 + sal/android/uthash.h | 971 + sal/cppunittester/cppunittester.cxx | 632 + sal/inc/backtraceasstring.hxx | 24 + sal/inc/oslmemory.h | 30 + sal/inc/oslrandom.h | 25 + sal/inc/oslsocket.hxx | 24 + sal/inc/pch/precompiled_sal.cxx | 12 + sal/inc/pch/precompiled_sal.hxx | 113 + sal/inc/rtllifecycle.h | 41 + sal/inc/salusesyslog.hxx | 23 + sal/inc/signalshared.hxx | 39 + sal/inc/uri_internal.hxx | 40 + sal/osl/all/compat.cxx | 197 + sal/osl/all/debugbase.cxx | 145 + sal/osl/all/filepath.cxx | 113 + sal/osl/all/loadmodulerelative.cxx | 60 + sal/osl/all/log.cxx | 477 + sal/osl/all/mutexshared.cxx | 20 + sal/osl/all/signalshared.cxx | 141 + sal/osl/all/utility.cxx | 49 + sal/osl/unx/asm/interlck_sparc.s | 79 + sal/osl/unx/backtrace.c | 246 + sal/osl/unx/backtrace.h | 51 + sal/osl/unx/backtraceapi.cxx | 279 + sal/osl/unx/conditn.cxx | 270 + sal/osl/unx/createfilehandlefromfd.hxx | 24 + sal/osl/unx/file.cxx | 1606 ++ sal/osl/unx/file_error_transl.cxx | 181 + sal/osl/unx/file_error_transl.hxx | 37 + sal/osl/unx/file_impl.hxx | 55 + sal/osl/unx/file_misc.cxx | 1049 + sal/osl/unx/file_path_helper.cxx | 262 + sal/osl/unx/file_path_helper.hxx | 251 + sal/osl/unx/file_stat.cxx | 453 + sal/osl/unx/file_url.cxx | 972 + sal/osl/unx/file_url.hxx | 50 + sal/osl/unx/file_volume.cxx | 336 + sal/osl/unx/interlck.cxx | 95 + sal/osl/unx/memory.cxx | 35 + sal/osl/unx/module.cxx | 344 + sal/osl/unx/mutex.cxx | 163 + sal/osl/unx/nlsupport.cxx | 872 + sal/osl/unx/nlsupport.hxx | 40 + sal/osl/unx/osxlocale.cxx | 104 + sal/osl/unx/pipe.cxx | 523 + sal/osl/unx/process.cxx | 1194 + sal/osl/unx/process_impl.cxx | 473 + sal/osl/unx/profile.cxx | 1866 ++ sal/osl/unx/random.cxx | 46 + sal/osl/unx/readwrite_helper.cxx | 79 + sal/osl/unx/readwrite_helper.hxx | 26 + sal/osl/unx/salinit.cxx | 98 + sal/osl/unx/saltime.hxx | 29 + sal/osl/unx/secimpl.hxx | 35 + sal/osl/unx/security.cxx | 537 + sal/osl/unx/signal.cxx | 452 + sal/osl/unx/socket.cxx | 2046 ++ sal/osl/unx/sockimpl.hxx | 61 + sal/osl/unx/soffice.cxx | 25 + sal/osl/unx/soffice.hxx | 26 + sal/osl/unx/system.cxx | 167 + sal/osl/unx/system.hxx | 406 + sal/osl/unx/system.mm | 1 + sal/osl/unx/tempfile.cxx | 340 + sal/osl/unx/thread.cxx | 1102 + sal/osl/unx/time.cxx | 310 + sal/osl/unx/unixerrnostring.hxx | 27 + sal/osl/unx/uunxapi.cxx | 905 + sal/osl/unx/uunxapi.hxx | 83 + sal/osl/unx/uunxapi.mm | 1 + sal/osl/w32/backtrace.cxx | 92 + sal/osl/w32/conditn.cxx | 114 + sal/osl/w32/dllentry.cxx | 235 + sal/osl/w32/file-impl.hxx | 25 + sal/osl/w32/file.cxx | 1121 + sal/osl/w32/file_dirvol.cxx | 1691 ++ sal/osl/w32/file_error.cxx | 125 + sal/osl/w32/file_error.hxx | 29 + sal/osl/w32/file_url.cxx | 990 + sal/osl/w32/file_url.hxx | 63 + sal/osl/w32/filetime.hxx | 40 + sal/osl/w32/interlck.cxx | 34 + sal/osl/w32/memory.cxx | 24 + sal/osl/w32/module.cxx | 202 + sal/osl/w32/mutex.cxx | 88 + sal/osl/w32/nlsupport.cxx | 202 + sal/osl/w32/nlsupport.hxx | 21 + sal/osl/w32/path_helper.cxx | 89 + sal/osl/w32/path_helper.hxx | 125 + sal/osl/w32/pipe.cxx | 489 + sal/osl/w32/process.cxx | 525 + sal/osl/w32/procimpl.cxx | 596 + sal/osl/w32/procimpl.hxx | 33 + sal/osl/w32/profile.cxx | 2341 ++ sal/osl/w32/random.cxx | 63 + sal/osl/w32/salinit.cxx | 83 + sal/osl/w32/secimpl.hxx | 40 + sal/osl/w32/security.cxx | 662 + sal/osl/w32/signal.cxx | 133 + sal/osl/w32/socket.cxx | 1611 ++ sal/osl/w32/sockimpl.hxx | 42 + sal/osl/w32/system.h | 54 + sal/osl/w32/tempfile.cxx | 238 + sal/osl/w32/thread.cxx | 540 + sal/osl/w32/thread.hxx | 18 + sal/osl/w32/time.cxx | 200 + sal/osl/w32/time.hxx | 19 + sal/qa/ByteSequence/ByteSequence.cxx | 183 + sal/qa/OStringBuffer/rtl_OStringBuffer.cxx | 18393 +++++++++++++++ sal/qa/OStringBuffer/rtl_String_Const.h | 468 + sal/qa/OStringBuffer/rtl_String_Utils_Const.h | 45 + sal/qa/inc/stringhelper.hxx | 33 + sal/qa/inc/valueequal.hxx | 120 + sal/qa/libs2test.txt | 101 + sal/qa/osl/condition/osl_Condition.cxx | 327 + sal/qa/osl/condition/osl_Condition_Const.h | 47 + sal/qa/osl/file/osl_File.cxx | 4980 ++++ sal/qa/osl/file/osl_File_Const.h | 206 + sal/qa/osl/file/osl_old_test_file.cxx | 115 + sal/qa/osl/file/test_cpy_wrt_file.cxx | 76 + .../test-getsystempathfromfileurl.cxx | 243 + sal/qa/osl/module/osl_Module.cxx | 376 + sal/qa/osl/module/osl_Module_Const.h | 46 + sal/qa/osl/module/osl_Module_DLL.cxx | 32 + sal/qa/osl/mutex/osl_Mutex.cxx | 905 + sal/qa/osl/mutex/osl_Mutex_Const.h | 37 + sal/qa/osl/pipe/osl_Pipe.cxx | 894 + sal/qa/osl/process/batch.bat | 19 + sal/qa/osl/process/batch.sh | 2 + sal/qa/osl/process/osl_Thread.cxx | 2005 ++ sal/qa/osl/process/osl_Thread.xsce | 18 + sal/qa/osl/process/osl_process.cxx | 450 + sal/qa/osl/process/osl_process_child.cxx | 101 + sal/qa/osl/profile/osl_old_testprofile.cxx | 62 + sal/qa/osl/security/TODO.h | 8 + sal/qa/osl/security/osl_Security.cxx | 624 + sal/qa/osl/security/osl_Security_Const.h | 58 + sal/qa/osl/setthreadname/test-setthreadname.cxx | 79 + sal/qa/osl/socket.cxx | 58 + sal/qa/osl/thread/test_thread.cxx | 80 + sal/qa/rtl/alloc/rtl_alloc.cxx | 211 + sal/qa/rtl/bootstrap/expand.cxx | 58 + sal/qa/rtl/cipher/rtl_cipher.cxx | 600 + sal/qa/rtl/crc32/rtl_crc32.cxx | 154 + sal/qa/rtl/digest/rtl_digest.cxx | 515 + sal/qa/rtl/doublelock/rtl_doublelocking.cxx | 182 + sal/qa/rtl/locale/rtl_locale.cxx | 280 + sal/qa/rtl/math/test-rtl-math.cxx | 677 + sal/qa/rtl/ostring/rtl_OString2.cxx | 508 + sal/qa/rtl/ostring/rtl_str.cxx | 724 + sal/qa/rtl/ostring/rtl_str.xsce | 43 + sal/qa/rtl/ostring/rtl_string.cxx | 169 + sal/qa/rtl/ostring/rtl_string.xsce | 18 + sal/qa/rtl/oustring/joblist.txt | 27 + sal/qa/rtl/oustring/rtl_OUString2.cxx | 1068 + sal/qa/rtl/oustring/rtl_ustr.cxx | 1080 + sal/qa/rtl/oustring/rtl_ustr.xsce | 50 + .../test_oustringbuffer_appendchar.cxx | 43 + .../test_oustringbuffer_appenduninitialized.cxx | 66 + .../oustringbuffer/test_oustringbuffer_assign.cxx | 92 + .../test_oustringbuffer_tostring.cxx | 61 + .../oustringbuffer/test_oustringbuffer_utf32.cxx | 121 + sal/qa/rtl/process/child_process.cxx | 60 + sal/qa/rtl/process/child_process_id.cxx | 54 + sal/qa/rtl/process/rtl_Process.cxx | 258 + sal/qa/rtl/process/rtl_Process_Const.h | 40 + sal/qa/rtl/random/random.txt | 22 + sal/qa/rtl/random/rtl_random.cxx | 363 + sal/qa/rtl/ref/rtl_ref.cxx | 115 + sal/qa/rtl/strings/compile-oustring.cxx | 45 + sal/qa/rtl/strings/nonconstarray.cxx | 94 + sal/qa/rtl/strings/test_ostring.cxx | 123 + sal/qa/rtl/strings/test_ostring_concat.cxx | 206 + sal/qa/rtl/strings/test_ostring_stringliterals.cxx | 282 + sal/qa/rtl/strings/test_ostringbuffer.cxx | 56 + sal/qa/rtl/strings/test_oustring_compare.cxx | 97 + sal/qa/rtl/strings/test_oustring_concat.cxx | 213 + sal/qa/rtl/strings/test_oustring_convert.cxx | 177 + sal/qa/rtl/strings/test_oustring_endswith.cxx | 113 + sal/qa/rtl/strings/test_oustring_startswith.cxx | 38 + .../rtl/strings/test_oustring_stringliterals.cxx | 432 + .../rtl/strings/test_strings_defaultstringview.cxx | 118 + sal/qa/rtl/strings/test_strings_replace.cxx | 339 + sal/qa/rtl/strings/test_strings_toint.cxx | 72 + sal/qa/rtl/strings/test_strings_valuex.cxx | 115 + sal/qa/rtl/textenc/rtl_tencinfo.cxx | 1674 ++ sal/qa/rtl/textenc/rtl_textcvt.cxx | 3313 +++ sal/qa/rtl/uri/rtl_Uri.cxx | 79 + sal/qa/rtl/uri/rtl_testuri.cxx | 514 + sal/qa/rtl/uuid/rtl_Uuid.cxx | 159 + sal/qa/sal/test_types.cxx | 75 + sal/qa/systools/test_comtools.cxx | 247 + sal/qa/systools/test_retry_if_failed.cxx | 78 + sal/rtl/alloc_arena.cxx | 1112 + sal/rtl/alloc_arena.hxx | 118 + sal/rtl/alloc_cache.cxx | 225 + sal/rtl/alloc_cache.hxx | 40 + sal/rtl/alloc_fini.cxx | 97 + sal/rtl/alloc_global.cxx | 79 + sal/rtl/alloc_impl.hxx | 219 + sal/rtl/bootstrap.cxx | 992 + sal/rtl/byteseq.cxx | 246 + sal/rtl/cipher.cxx | 1433 ++ sal/rtl/cmdargs.cxx | 103 + sal/rtl/crc.cxx | 45 + sal/rtl/digest.cxx | 1897 ++ sal/rtl/hash.cxx | 241 + sal/rtl/hash.hxx | 33 + sal/rtl/locale.cxx | 136 + sal/rtl/math.cxx | 828 + sal/rtl/random.cxx | 310 + sal/rtl/rtl_process.cxx | 56 + sal/rtl/strbuf.cxx | 83 + sal/rtl/strimp.cxx | 90 + sal/rtl/strimp.hxx | 92 + sal/rtl/string.cxx | 667 + sal/rtl/strtmpl.hxx | 1904 ++ sal/rtl/unload.cxx | 34 + sal/rtl/uri.cxx | 759 + sal/rtl/ustrbuf.cxx | 115 + sal/rtl/ustring.cxx | 1324 ++ sal/rtl/uuid.cxx | 173 + sal/test/bootstrap | 82 + sal/test/bootstrap.bat | 79 + sal/test/bootstrap.pl | 251 + sal/test/bootstraptest.ini | 28 + sal/test/makefile.mk | 145 + sal/test/test_salmain.cxx | 31 + sal/test/test_salmainwithargs.cxx | 31 + sal/test/testbootstrap.cxx | 116 + sal/test/testbootstrap.ini | 4 + sal/textenc/context.cxx | 42 + sal/textenc/context.hxx | 35 + sal/textenc/convertadobe.tab | 320 + sal/textenc/convertbig5hkscs.cxx | 501 + sal/textenc/convertbig5hkscs.hxx | 68 + sal/textenc/convertbig5hkscs.tab | 57 + sal/textenc/converter.cxx | 157 + sal/textenc/converter.hxx | 53 + sal/textenc/converteuctw.cxx | 461 + sal/textenc/converteuctw.hxx | 65 + sal/textenc/converteuctw.tab | 54 + sal/textenc/convertgb18030.cxx | 475 + sal/textenc/convertgb18030.hxx | 79 + sal/textenc/convertgb18030.tab | 53 + sal/textenc/convertisciidevangari.cxx | 515 + sal/textenc/convertisciidevangari.hxx | 39 + sal/textenc/convertisciidevangari.tab | 35 + sal/textenc/convertiso2022cn.cxx | 873 + sal/textenc/convertiso2022cn.hxx | 73 + sal/textenc/convertiso2022cn.tab | 59 + sal/textenc/convertiso2022jp.cxx | 581 + sal/textenc/convertiso2022jp.hxx | 67 + sal/textenc/convertiso2022jp.tab | 50 + sal/textenc/convertiso2022kr.cxx | 541 + sal/textenc/convertiso2022kr.hxx | 67 + sal/textenc/convertiso2022kr.tab | 50 + sal/textenc/convertsimple.cxx | 665 + sal/textenc/convertsimple.hxx | 34 + sal/textenc/convertsinglebytetobmpunicode.cxx | 210 + sal/textenc/convertsinglebytetobmpunicode.hxx | 121 + sal/textenc/generate/big5hkscs2001.pl | 795 + sal/textenc/generate/big5hkscs2001.tab | 8813 +++++++ sal/textenc/generate/cns116431992.pl | 845 + sal/textenc/generate/cns116431992.tab | 22858 +++++++++++++++++++ sal/textenc/generate/gb180302000.pl | 296 + sal/textenc/generate/gb180302000.tab | 9027 ++++++++ sal/textenc/gettextencodingdata.hxx | 30 + sal/textenc/handleundefinedunicodetotextchar.cxx | 171 + sal/textenc/handleundefinedunicodetotextchar.hxx | 30 + sal/textenc/tables.cxx | 270 + sal/textenc/tcvtarb1.tab | 932 + sal/textenc/tcvtbyte.cxx | 161 + sal/textenc/tcvtbyte.hxx | 35 + sal/textenc/tcvteas1.tab | 432 + sal/textenc/tcvtest1.tab | 4580 ++++ sal/textenc/tcvtjp1.tab | 1547 ++ sal/textenc/tcvtjp2.tab | 3955 ++++ sal/textenc/tcvtjp3.tab | 2905 +++ sal/textenc/tcvtjp4.tab | 3576 +++ sal/textenc/tcvtjp5.tab | 3341 +++ sal/textenc/tcvtjp6.tab | 2656 +++ sal/textenc/tcvtkr1.tab | 3314 +++ sal/textenc/tcvtkr2.tab | 5406 +++++ sal/textenc/tcvtkr4.tab | 3494 +++ sal/textenc/tcvtkr5.tab | 5406 +++++ sal/textenc/tcvtkr6.tab | 1233 + sal/textenc/tcvtlat1.tab | 1552 ++ sal/textenc/tcvtmb.cxx | 682 + sal/textenc/tcvtscn1.tab | 3851 ++++ sal/textenc/tcvtscn2.tab | 4454 ++++ sal/textenc/tcvtscn3.tab | 1493 ++ sal/textenc/tcvtscn4.tab | 3061 +++ sal/textenc/tcvtscn5.tab | 3226 +++ sal/textenc/tcvtscn6.tab | 2951 +++ sal/textenc/tcvtsym1.tab | 42 + sal/textenc/tcvttcn1.tab | 2885 +++ sal/textenc/tcvttcn2.tab | 3706 +++ sal/textenc/tcvttcn6.tab | 1728 ++ sal/textenc/tcvtuni1.tab | 42 + sal/textenc/tcvtutf7.cxx | 602 + sal/textenc/tcvtutf8.cxx | 458 + sal/textenc/tcvtutf8.hxx | 41 + sal/textenc/tenchelp.hxx | 250 + sal/textenc/tencinfo.cxx | 982 + sal/textenc/textcvt.cxx | 299 + sal/textenc/textenc.cxx | 436 + sal/textenc/unichars.cxx | 87 + sal/textenc/unichars.hxx | 40 + sal/util/sal.map | 778 + 328 files changed, 224624 insertions(+) create mode 100644 sal/CompilerTest_sal_rtl_oustring.mk create mode 100644 sal/CppunitTest_Module_DLL.mk create mode 100644 sal/CppunitTest_sal_comtools.mk create mode 100644 sal/CppunitTest_sal_osl.mk create mode 100644 sal/CppunitTest_sal_osl_security.mk create mode 100644 sal/CppunitTest_sal_retry_if_failed.mk create mode 100644 sal/CppunitTest_sal_rtl.mk create mode 100644 sal/CppunitTest_sal_types.mk create mode 100644 sal/Executable_cppunittester.mk create mode 100644 sal/Executable_osl_process_child.mk create mode 100644 sal/Library_lo-bootstrap.mk create mode 100644 sal/Library_sal.mk create mode 100644 sal/Library_sal_textenc.mk create mode 100644 sal/Makefile create mode 100644 sal/Module_sal.mk create mode 100644 sal/README.md create mode 100644 sal/android/libreofficekit-jni.c create mode 100644 sal/android/lo-bootstrap.c create mode 100644 sal/android/uthash.h create mode 100644 sal/cppunittester/cppunittester.cxx create mode 100644 sal/inc/backtraceasstring.hxx create mode 100644 sal/inc/oslmemory.h create mode 100644 sal/inc/oslrandom.h create mode 100644 sal/inc/oslsocket.hxx create mode 100644 sal/inc/pch/precompiled_sal.cxx create mode 100644 sal/inc/pch/precompiled_sal.hxx create mode 100644 sal/inc/rtllifecycle.h create mode 100644 sal/inc/salusesyslog.hxx create mode 100644 sal/inc/signalshared.hxx create mode 100644 sal/inc/uri_internal.hxx create mode 100644 sal/osl/all/compat.cxx create mode 100644 sal/osl/all/debugbase.cxx create mode 100644 sal/osl/all/filepath.cxx create mode 100644 sal/osl/all/loadmodulerelative.cxx create mode 100644 sal/osl/all/log.cxx create mode 100644 sal/osl/all/mutexshared.cxx create mode 100644 sal/osl/all/signalshared.cxx create mode 100644 sal/osl/all/utility.cxx create mode 100644 sal/osl/unx/asm/interlck_sparc.s create mode 100644 sal/osl/unx/backtrace.c create mode 100644 sal/osl/unx/backtrace.h create mode 100644 sal/osl/unx/backtraceapi.cxx create mode 100644 sal/osl/unx/conditn.cxx create mode 100644 sal/osl/unx/createfilehandlefromfd.hxx create mode 100644 sal/osl/unx/file.cxx create mode 100644 sal/osl/unx/file_error_transl.cxx create mode 100644 sal/osl/unx/file_error_transl.hxx create mode 100644 sal/osl/unx/file_impl.hxx create mode 100644 sal/osl/unx/file_misc.cxx create mode 100644 sal/osl/unx/file_path_helper.cxx create mode 100644 sal/osl/unx/file_path_helper.hxx create mode 100644 sal/osl/unx/file_stat.cxx create mode 100644 sal/osl/unx/file_url.cxx create mode 100644 sal/osl/unx/file_url.hxx create mode 100644 sal/osl/unx/file_volume.cxx create mode 100644 sal/osl/unx/interlck.cxx create mode 100644 sal/osl/unx/memory.cxx create mode 100644 sal/osl/unx/module.cxx create mode 100644 sal/osl/unx/mutex.cxx create mode 100644 sal/osl/unx/nlsupport.cxx create mode 100644 sal/osl/unx/nlsupport.hxx create mode 100644 sal/osl/unx/osxlocale.cxx create mode 100644 sal/osl/unx/pipe.cxx create mode 100644 sal/osl/unx/process.cxx create mode 100644 sal/osl/unx/process_impl.cxx create mode 100644 sal/osl/unx/profile.cxx create mode 100644 sal/osl/unx/random.cxx create mode 100644 sal/osl/unx/readwrite_helper.cxx create mode 100644 sal/osl/unx/readwrite_helper.hxx create mode 100644 sal/osl/unx/salinit.cxx create mode 100644 sal/osl/unx/saltime.hxx create mode 100644 sal/osl/unx/secimpl.hxx create mode 100644 sal/osl/unx/security.cxx create mode 100644 sal/osl/unx/signal.cxx create mode 100644 sal/osl/unx/socket.cxx create mode 100644 sal/osl/unx/sockimpl.hxx create mode 100644 sal/osl/unx/soffice.cxx create mode 100644 sal/osl/unx/soffice.hxx create mode 100644 sal/osl/unx/system.cxx create mode 100644 sal/osl/unx/system.hxx create mode 100644 sal/osl/unx/system.mm create mode 100644 sal/osl/unx/tempfile.cxx create mode 100644 sal/osl/unx/thread.cxx create mode 100644 sal/osl/unx/time.cxx create mode 100644 sal/osl/unx/unixerrnostring.hxx create mode 100644 sal/osl/unx/uunxapi.cxx create mode 100644 sal/osl/unx/uunxapi.hxx create mode 100644 sal/osl/unx/uunxapi.mm create mode 100644 sal/osl/w32/backtrace.cxx create mode 100644 sal/osl/w32/conditn.cxx create mode 100644 sal/osl/w32/dllentry.cxx create mode 100644 sal/osl/w32/file-impl.hxx create mode 100644 sal/osl/w32/file.cxx create mode 100644 sal/osl/w32/file_dirvol.cxx create mode 100644 sal/osl/w32/file_error.cxx create mode 100644 sal/osl/w32/file_error.hxx create mode 100644 sal/osl/w32/file_url.cxx create mode 100644 sal/osl/w32/file_url.hxx create mode 100644 sal/osl/w32/filetime.hxx create mode 100644 sal/osl/w32/interlck.cxx create mode 100644 sal/osl/w32/memory.cxx create mode 100644 sal/osl/w32/module.cxx create mode 100644 sal/osl/w32/mutex.cxx create mode 100644 sal/osl/w32/nlsupport.cxx create mode 100644 sal/osl/w32/nlsupport.hxx create mode 100644 sal/osl/w32/path_helper.cxx create mode 100644 sal/osl/w32/path_helper.hxx create mode 100644 sal/osl/w32/pipe.cxx create mode 100644 sal/osl/w32/process.cxx create mode 100644 sal/osl/w32/procimpl.cxx create mode 100644 sal/osl/w32/procimpl.hxx create mode 100644 sal/osl/w32/profile.cxx create mode 100644 sal/osl/w32/random.cxx create mode 100644 sal/osl/w32/salinit.cxx create mode 100644 sal/osl/w32/secimpl.hxx create mode 100644 sal/osl/w32/security.cxx create mode 100644 sal/osl/w32/signal.cxx create mode 100644 sal/osl/w32/socket.cxx create mode 100644 sal/osl/w32/sockimpl.hxx create mode 100644 sal/osl/w32/system.h create mode 100644 sal/osl/w32/tempfile.cxx create mode 100644 sal/osl/w32/thread.cxx create mode 100644 sal/osl/w32/thread.hxx create mode 100644 sal/osl/w32/time.cxx create mode 100644 sal/osl/w32/time.hxx create mode 100644 sal/qa/ByteSequence/ByteSequence.cxx create mode 100644 sal/qa/OStringBuffer/rtl_OStringBuffer.cxx create mode 100644 sal/qa/OStringBuffer/rtl_String_Const.h create mode 100644 sal/qa/OStringBuffer/rtl_String_Utils_Const.h create mode 100644 sal/qa/inc/stringhelper.hxx create mode 100644 sal/qa/inc/valueequal.hxx create mode 100644 sal/qa/libs2test.txt create mode 100644 sal/qa/osl/condition/osl_Condition.cxx create mode 100644 sal/qa/osl/condition/osl_Condition_Const.h create mode 100644 sal/qa/osl/file/osl_File.cxx create mode 100644 sal/qa/osl/file/osl_File_Const.h create mode 100644 sal/qa/osl/file/osl_old_test_file.cxx create mode 100644 sal/qa/osl/file/test_cpy_wrt_file.cxx create mode 100644 sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx create mode 100644 sal/qa/osl/module/osl_Module.cxx create mode 100644 sal/qa/osl/module/osl_Module_Const.h create mode 100644 sal/qa/osl/module/osl_Module_DLL.cxx create mode 100644 sal/qa/osl/mutex/osl_Mutex.cxx create mode 100644 sal/qa/osl/mutex/osl_Mutex_Const.h create mode 100644 sal/qa/osl/pipe/osl_Pipe.cxx create mode 100755 sal/qa/osl/process/batch.bat create mode 100755 sal/qa/osl/process/batch.sh create mode 100644 sal/qa/osl/process/osl_Thread.cxx create mode 100644 sal/qa/osl/process/osl_Thread.xsce create mode 100644 sal/qa/osl/process/osl_process.cxx create mode 100644 sal/qa/osl/process/osl_process_child.cxx create mode 100644 sal/qa/osl/profile/osl_old_testprofile.cxx create mode 100644 sal/qa/osl/security/TODO.h create mode 100644 sal/qa/osl/security/osl_Security.cxx create mode 100644 sal/qa/osl/security/osl_Security_Const.h create mode 100644 sal/qa/osl/setthreadname/test-setthreadname.cxx create mode 100644 sal/qa/osl/socket.cxx create mode 100644 sal/qa/osl/thread/test_thread.cxx create mode 100644 sal/qa/rtl/alloc/rtl_alloc.cxx create mode 100644 sal/qa/rtl/bootstrap/expand.cxx create mode 100644 sal/qa/rtl/cipher/rtl_cipher.cxx create mode 100644 sal/qa/rtl/crc32/rtl_crc32.cxx create mode 100644 sal/qa/rtl/digest/rtl_digest.cxx create mode 100644 sal/qa/rtl/doublelock/rtl_doublelocking.cxx create mode 100644 sal/qa/rtl/locale/rtl_locale.cxx create mode 100644 sal/qa/rtl/math/test-rtl-math.cxx create mode 100644 sal/qa/rtl/ostring/rtl_OString2.cxx create mode 100644 sal/qa/rtl/ostring/rtl_str.cxx create mode 100644 sal/qa/rtl/ostring/rtl_str.xsce create mode 100644 sal/qa/rtl/ostring/rtl_string.cxx create mode 100644 sal/qa/rtl/ostring/rtl_string.xsce create mode 100644 sal/qa/rtl/oustring/joblist.txt create mode 100644 sal/qa/rtl/oustring/rtl_OUString2.cxx create mode 100644 sal/qa/rtl/oustring/rtl_ustr.cxx create mode 100644 sal/qa/rtl/oustring/rtl_ustr.xsce create mode 100644 sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx create mode 100644 sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx create mode 100644 sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx create mode 100644 sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx create mode 100644 sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx create mode 100644 sal/qa/rtl/process/child_process.cxx create mode 100644 sal/qa/rtl/process/child_process_id.cxx create mode 100644 sal/qa/rtl/process/rtl_Process.cxx create mode 100644 sal/qa/rtl/process/rtl_Process_Const.h create mode 100644 sal/qa/rtl/random/random.txt create mode 100644 sal/qa/rtl/random/rtl_random.cxx create mode 100644 sal/qa/rtl/ref/rtl_ref.cxx create mode 100644 sal/qa/rtl/strings/compile-oustring.cxx create mode 100644 sal/qa/rtl/strings/nonconstarray.cxx create mode 100644 sal/qa/rtl/strings/test_ostring.cxx create mode 100644 sal/qa/rtl/strings/test_ostring_concat.cxx create mode 100644 sal/qa/rtl/strings/test_ostring_stringliterals.cxx create mode 100644 sal/qa/rtl/strings/test_ostringbuffer.cxx create mode 100644 sal/qa/rtl/strings/test_oustring_compare.cxx create mode 100644 sal/qa/rtl/strings/test_oustring_concat.cxx create mode 100644 sal/qa/rtl/strings/test_oustring_convert.cxx create mode 100644 sal/qa/rtl/strings/test_oustring_endswith.cxx create mode 100644 sal/qa/rtl/strings/test_oustring_startswith.cxx create mode 100644 sal/qa/rtl/strings/test_oustring_stringliterals.cxx create mode 100644 sal/qa/rtl/strings/test_strings_defaultstringview.cxx create mode 100644 sal/qa/rtl/strings/test_strings_replace.cxx create mode 100644 sal/qa/rtl/strings/test_strings_toint.cxx create mode 100644 sal/qa/rtl/strings/test_strings_valuex.cxx create mode 100644 sal/qa/rtl/textenc/rtl_tencinfo.cxx create mode 100644 sal/qa/rtl/textenc/rtl_textcvt.cxx create mode 100644 sal/qa/rtl/uri/rtl_Uri.cxx create mode 100644 sal/qa/rtl/uri/rtl_testuri.cxx create mode 100644 sal/qa/rtl/uuid/rtl_Uuid.cxx create mode 100644 sal/qa/sal/test_types.cxx create mode 100644 sal/qa/systools/test_comtools.cxx create mode 100644 sal/qa/systools/test_retry_if_failed.cxx create mode 100644 sal/rtl/alloc_arena.cxx create mode 100644 sal/rtl/alloc_arena.hxx create mode 100644 sal/rtl/alloc_cache.cxx create mode 100644 sal/rtl/alloc_cache.hxx create mode 100644 sal/rtl/alloc_fini.cxx create mode 100644 sal/rtl/alloc_global.cxx create mode 100644 sal/rtl/alloc_impl.hxx create mode 100644 sal/rtl/bootstrap.cxx create mode 100644 sal/rtl/byteseq.cxx create mode 100644 sal/rtl/cipher.cxx create mode 100644 sal/rtl/cmdargs.cxx create mode 100644 sal/rtl/crc.cxx create mode 100644 sal/rtl/digest.cxx create mode 100644 sal/rtl/hash.cxx create mode 100644 sal/rtl/hash.hxx create mode 100644 sal/rtl/locale.cxx create mode 100644 sal/rtl/math.cxx create mode 100644 sal/rtl/random.cxx create mode 100644 sal/rtl/rtl_process.cxx create mode 100644 sal/rtl/strbuf.cxx create mode 100644 sal/rtl/strimp.cxx create mode 100644 sal/rtl/strimp.hxx create mode 100644 sal/rtl/string.cxx create mode 100644 sal/rtl/strtmpl.hxx create mode 100644 sal/rtl/unload.cxx create mode 100644 sal/rtl/uri.cxx create mode 100644 sal/rtl/ustrbuf.cxx create mode 100644 sal/rtl/ustring.cxx create mode 100644 sal/rtl/uuid.cxx create mode 100644 sal/test/bootstrap create mode 100755 sal/test/bootstrap.bat create mode 100644 sal/test/bootstrap.pl create mode 100644 sal/test/bootstraptest.ini create mode 100644 sal/test/makefile.mk create mode 100644 sal/test/test_salmain.cxx create mode 100644 sal/test/test_salmainwithargs.cxx create mode 100644 sal/test/testbootstrap.cxx create mode 100644 sal/test/testbootstrap.ini create mode 100644 sal/textenc/context.cxx create mode 100644 sal/textenc/context.hxx create mode 100644 sal/textenc/convertadobe.tab create mode 100644 sal/textenc/convertbig5hkscs.cxx create mode 100644 sal/textenc/convertbig5hkscs.hxx create mode 100644 sal/textenc/convertbig5hkscs.tab create mode 100644 sal/textenc/converter.cxx create mode 100644 sal/textenc/converter.hxx create mode 100644 sal/textenc/converteuctw.cxx create mode 100644 sal/textenc/converteuctw.hxx create mode 100644 sal/textenc/converteuctw.tab create mode 100644 sal/textenc/convertgb18030.cxx create mode 100644 sal/textenc/convertgb18030.hxx create mode 100644 sal/textenc/convertgb18030.tab create mode 100644 sal/textenc/convertisciidevangari.cxx create mode 100644 sal/textenc/convertisciidevangari.hxx create mode 100644 sal/textenc/convertisciidevangari.tab create mode 100644 sal/textenc/convertiso2022cn.cxx create mode 100644 sal/textenc/convertiso2022cn.hxx create mode 100644 sal/textenc/convertiso2022cn.tab create mode 100644 sal/textenc/convertiso2022jp.cxx create mode 100644 sal/textenc/convertiso2022jp.hxx create mode 100644 sal/textenc/convertiso2022jp.tab create mode 100644 sal/textenc/convertiso2022kr.cxx create mode 100644 sal/textenc/convertiso2022kr.hxx create mode 100644 sal/textenc/convertiso2022kr.tab create mode 100644 sal/textenc/convertsimple.cxx create mode 100644 sal/textenc/convertsimple.hxx create mode 100644 sal/textenc/convertsinglebytetobmpunicode.cxx create mode 100644 sal/textenc/convertsinglebytetobmpunicode.hxx create mode 100644 sal/textenc/generate/big5hkscs2001.pl create mode 100644 sal/textenc/generate/big5hkscs2001.tab create mode 100644 sal/textenc/generate/cns116431992.pl create mode 100644 sal/textenc/generate/cns116431992.tab create mode 100644 sal/textenc/generate/gb180302000.pl create mode 100644 sal/textenc/generate/gb180302000.tab create mode 100644 sal/textenc/gettextencodingdata.hxx create mode 100644 sal/textenc/handleundefinedunicodetotextchar.cxx create mode 100644 sal/textenc/handleundefinedunicodetotextchar.hxx create mode 100644 sal/textenc/tables.cxx create mode 100644 sal/textenc/tcvtarb1.tab create mode 100644 sal/textenc/tcvtbyte.cxx create mode 100644 sal/textenc/tcvtbyte.hxx create mode 100644 sal/textenc/tcvteas1.tab create mode 100644 sal/textenc/tcvtest1.tab create mode 100644 sal/textenc/tcvtjp1.tab create mode 100644 sal/textenc/tcvtjp2.tab create mode 100644 sal/textenc/tcvtjp3.tab create mode 100644 sal/textenc/tcvtjp4.tab create mode 100644 sal/textenc/tcvtjp5.tab create mode 100644 sal/textenc/tcvtjp6.tab create mode 100644 sal/textenc/tcvtkr1.tab create mode 100644 sal/textenc/tcvtkr2.tab create mode 100644 sal/textenc/tcvtkr4.tab create mode 100644 sal/textenc/tcvtkr5.tab create mode 100644 sal/textenc/tcvtkr6.tab create mode 100644 sal/textenc/tcvtlat1.tab create mode 100644 sal/textenc/tcvtmb.cxx create mode 100644 sal/textenc/tcvtscn1.tab create mode 100644 sal/textenc/tcvtscn2.tab create mode 100644 sal/textenc/tcvtscn3.tab create mode 100644 sal/textenc/tcvtscn4.tab create mode 100644 sal/textenc/tcvtscn5.tab create mode 100644 sal/textenc/tcvtscn6.tab create mode 100644 sal/textenc/tcvtsym1.tab create mode 100644 sal/textenc/tcvttcn1.tab create mode 100644 sal/textenc/tcvttcn2.tab create mode 100644 sal/textenc/tcvttcn6.tab create mode 100644 sal/textenc/tcvtuni1.tab create mode 100644 sal/textenc/tcvtutf7.cxx create mode 100644 sal/textenc/tcvtutf8.cxx create mode 100644 sal/textenc/tcvtutf8.hxx create mode 100644 sal/textenc/tenchelp.hxx create mode 100644 sal/textenc/tencinfo.cxx create mode 100644 sal/textenc/textcvt.cxx create mode 100644 sal/textenc/textenc.cxx create mode 100644 sal/textenc/unichars.cxx create mode 100644 sal/textenc/unichars.hxx create mode 100644 sal/util/sal.map (limited to 'sal') diff --git a/sal/CompilerTest_sal_rtl_oustring.mk b/sal/CompilerTest_sal_rtl_oustring.mk new file mode 100644 index 000000000..fb77d8904 --- /dev/null +++ b/sal/CompilerTest_sal_rtl_oustring.mk @@ -0,0 +1,16 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CompilerTest_CompilerTest,sal_rtl_oustring)) + +$(eval $(call gb_CompilerTest_add_exception_objects,sal_rtl_oustring, \ + sal/qa/rtl/strings/compile-oustring \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_Module_DLL.mk b/sal/CppunitTest_Module_DLL.mk new file mode 100644 index 000000000..a00429de3 --- /dev/null +++ b/sal/CppunitTest_Module_DLL.mk @@ -0,0 +1,26 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +# This is not really a test. Only a dynamic library which is loaded by +# sal_osl_module unit test library. + +$(eval $(call gb_CppunitTest_CppunitTest,Module_DLL)) + +$(eval $(call gb_CppunitTest_set_visibility_default,Module_DLL)) + +$(eval $(call gb_CppunitTest_add_exception_objects,Module_DLL,\ + sal/qa/osl/module/osl_Module_DLL \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,Module_DLL,\ + sal \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_sal_comtools.mk b/sal/CppunitTest_sal_comtools.mk new file mode 100644 index 000000000..1f9c24a0c --- /dev/null +++ b/sal/CppunitTest_sal_comtools.mk @@ -0,0 +1,24 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sal_comtools)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sal_comtools,\ + sal/qa/systools/test_comtools \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sal_comtools,\ + sal \ +)) + +$(eval $(call gb_CppunitTest_use_system_win32_libs,sal_comtools,\ + ole32 \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_sal_osl.mk b/sal/CppunitTest_sal_osl.mk new file mode 100644 index 000000000..5cfda8620 --- /dev/null +++ b/sal/CppunitTest_sal_osl.mk @@ -0,0 +1,44 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sal_osl)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sal_osl,\ + sal/qa/osl/condition/osl_Condition \ + sal/qa/osl/file/osl_File \ + sal/qa/osl/file/osl_old_test_file \ + sal/qa/osl/file/test_cpy_wrt_file \ + sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl \ + $(if $(DISABLE_DYNLOADING),,sal/qa/osl/module/osl_Module) \ + sal/qa/osl/mutex/osl_Mutex \ + sal/qa/osl/pipe/osl_Pipe \ + sal/qa/osl/process/osl_process \ + sal/qa/osl/process/osl_Thread \ + sal/qa/osl/profile/osl_old_testprofile \ + sal/qa/osl/setthreadname/test-setthreadname \ + sal/qa/osl/socket \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sal_osl,\ + sal \ + tl \ +)) + +# the test uses the library created by Module_DLL +$(call gb_CppunitTest_get_target,sal_osl) : $(call gb_CppunitTest_get_linktarget_target,Module_DLL) + +$(eval $(call gb_CppunitTest_use_executable,sal_osl,osl_process_child)) + +$(eval $(call gb_CppunitTest_use_externals,sal_osl,\ + boost_headers \ + valgrind \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_sal_osl_security.mk b/sal/CppunitTest_sal_osl_security.mk new file mode 100644 index 000000000..0a0905c00 --- /dev/null +++ b/sal/CppunitTest_sal_osl_security.mk @@ -0,0 +1,21 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sal_osl_security)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sal_osl_security,\ + sal/qa/osl/security/osl_Security \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sal_osl_security,\ + sal \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_sal_retry_if_failed.mk b/sal/CppunitTest_sal_retry_if_failed.mk new file mode 100644 index 000000000..6e131afb5 --- /dev/null +++ b/sal/CppunitTest_sal_retry_if_failed.mk @@ -0,0 +1,16 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sal_retry_if_failed)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sal_retry_if_failed,\ + sal/qa/systools/test_retry_if_failed \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_sal_rtl.mk b/sal/CppunitTest_sal_rtl.mk new file mode 100644 index 000000000..2568d8dde --- /dev/null +++ b/sal/CppunitTest_sal_rtl.mk @@ -0,0 +1,75 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sal_rtl)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sal_rtl,\ + sal/qa/ByteSequence/ByteSequence \ + sal/qa/OStringBuffer/rtl_OStringBuffer \ + sal/qa/rtl/alloc/rtl_alloc \ + sal/qa/rtl/bootstrap/expand \ + sal/qa/rtl/cipher/rtl_cipher \ + sal/qa/rtl/crc32/rtl_crc32 \ + sal/qa/rtl/digest/rtl_digest \ + sal/qa/rtl/doublelock/rtl_doublelocking \ + sal/qa/rtl/locale/rtl_locale \ + sal/qa/rtl/math/test-rtl-math \ + sal/qa/rtl/ostring/rtl_str \ + sal/qa/rtl/oustring/rtl_ustr \ + sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar \ + sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized \ + sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign \ + sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring \ + sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32 \ + sal/qa/rtl/oustring/rtl_OUString2 \ + sal/qa/rtl/process/rtl_Process \ + sal/qa/rtl/random/rtl_random \ + sal/qa/rtl/ref/rtl_ref \ + sal/qa/rtl/strings/nonconstarray \ + sal/qa/rtl/strings/test_strings_replace \ + sal/qa/rtl/strings/test_strings_defaultstringview \ + sal/qa/rtl/strings/test_ostring \ + sal/qa/rtl/strings/test_ostring_concat \ + sal/qa/rtl/strings/test_ostring_stringliterals \ + sal/qa/rtl/strings/test_ostringbuffer \ + sal/qa/rtl/strings/test_oustring_compare \ + sal/qa/rtl/strings/test_oustring_concat \ + sal/qa/rtl/strings/test_oustring_convert \ + sal/qa/rtl/strings/test_oustring_endswith \ + sal/qa/rtl/strings/test_oustring_startswith \ + sal/qa/rtl/strings/test_oustring_stringliterals \ + sal/qa/rtl/strings/test_strings_toint \ + sal/qa/rtl/strings/test_strings_valuex \ + sal/qa/rtl/textenc/rtl_tencinfo \ + sal/qa/rtl/textenc/rtl_textcvt \ + sal/qa/rtl/uri/rtl_Uri \ + sal/qa/rtl/uri/rtl_testuri \ + sal/qa/rtl/uuid/rtl_Uuid \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sal_rtl,\ + sal \ +)) + +$(eval $(call gb_CppunitTest_set_include,sal_rtl,\ + -I$(SRCDIR)/sal/qa/inc \ + $$(INCLUDE) \ +)) + +# The test uses O(U)String capabilities that dlopen this lib: +$(call gb_CppunitTest_get_target,sal_rtl) : \ + $(call gb_Library_get_target,sal_textenc) + +$(eval $(call gb_CppunitTest_use_external,sal_rtl,boost_headers)) + +ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE) +$(eval $(call gb_CppunitTest_add_defs,sal_rtl,-DLIBO_CIPHER_OPENSSL_BACKEND)) +endif + +# vim: set noet sw=4 ts=4: diff --git a/sal/CppunitTest_sal_types.mk b/sal/CppunitTest_sal_types.mk new file mode 100644 index 000000000..487d2f9a2 --- /dev/null +++ b/sal/CppunitTest_sal_types.mk @@ -0,0 +1,21 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_CppunitTest_CppunitTest,sal_types)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sal_types,\ + sal/qa/sal/test_types \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sal_types,\ + sal \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/Executable_cppunittester.mk b/sal/Executable_cppunittester.mk new file mode 100644 index 000000000..959b3cd8b --- /dev/null +++ b/sal/Executable_cppunittester.mk @@ -0,0 +1,45 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Executable_Executable,cppunittester)) + +$(eval $(call gb_Executable_set_include,cppunittester,\ + $$(INCLUDE) \ + -I$(SRCDIR)/sal/inc \ +)) + +$(eval $(call gb_Executable_use_libraries,cppunittester,\ + sal \ +)) + +$(eval $(call gb_Executable_use_externals,cppunittester,\ + boost_headers \ + cppunit \ +)) + +$(eval $(call gb_Executable_add_exception_objects,cppunittester,\ + sal/cppunittester/cppunittester \ +)) + +ifneq ($(strip $(debug)$(DEBUG)),) +$(eval $(call gb_Executable_use_system_win32_libs,cppunittester,\ + dbghelp \ +)) +endif + +ifeq ($(COM),MSC) + +$(eval $(call gb_Executable_add_ldflags,cppunittester,\ + /STACK:10000000 \ +)) + +endif + +# vim: set noet sw=4 ts=4: diff --git a/sal/Executable_osl_process_child.mk b/sal/Executable_osl_process_child.mk new file mode 100644 index 000000000..f64f94605 --- /dev/null +++ b/sal/Executable_osl_process_child.mk @@ -0,0 +1,42 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +# This executable is required only by sal_osl_process test. +# See qa/osl/process/osl_process.cxx:411 +$(eval $(call gb_Executable_Executable,osl_process_child)) + +$(eval $(call gb_Executable_use_libraries,osl_process_child,\ + sal \ +)) + +$(eval $(call gb_Executable_add_exception_objects,osl_process_child,\ + sal/qa/osl/process/osl_process_child \ +)) + +# Also this batch file is required by sal_osl_process. +# See qa/osl/process/osl_process.cxx:675 +ifeq ($(OS),WNT) +sal_BATCH_FILE := batch.bat +else +sal_BATCH_FILE := batch.sh +endif + +$(call gb_Executable_get_target,osl_process_child) : \ + $(WORKDIR)/LinkTarget/Executable/$(sal_BATCH_FILE) + +$(WORKDIR)/LinkTarget/Executable/$(sal_BATCH_FILE) : \ + $(SRCDIR)/sal/qa/osl/process/$(sal_BATCH_FILE) + mkdir -p $(dir $@) && \ + $(call gb_Deliver_deliver,$<,$@) + +$(call gb_Executable_get_clean_target,osl_process_child) : + rm -f $(WORKDIR)/LinkTarget/Executable/$(sal_BATCH_FILE) + +# vim: set noet sw=4 ts=4: diff --git a/sal/Library_lo-bootstrap.mk b/sal/Library_lo-bootstrap.mk new file mode 100644 index 000000000..3dc4bf9df --- /dev/null +++ b/sal/Library_lo-bootstrap.mk @@ -0,0 +1,31 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Library_Library,lo-bootstrap)) + +# We explicitly *don't* want gb_STDLIBS to be linked here +$(eval $(call gb_Library_disable_standard_system_libs,lo-bootstrap)) + +$(eval $(call gb_Library_add_libs,lo-bootstrap,\ + -llog \ + -landroid \ +)) + +$(eval $(call gb_Library_add_cobjects,lo-bootstrap,\ + sal/android/libreofficekit-jni \ + sal/android/lo-bootstrap \ +)) + +$(eval $(call gb_Library_set_include,lo-bootstrap,\ + $$(INCLUDE) \ + -I$(SRCDIR)/sal/inc \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk new file mode 100644 index 000000000..aae7c97f0 --- /dev/null +++ b/sal/Library_sal.mk @@ -0,0 +1,259 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Library_Library,sal)) + +$(eval $(call gb_Library_set_soversion_script,sal,$(SRCDIR)/sal/util/sal.map)) + +$(eval $(call gb_Library_set_precompiled_header,sal,sal/inc/pch/precompiled_sal)) + +$(eval $(call gb_Library_set_is_ure_library_or_dependency,sal)) + +$(eval $(call gb_Library_set_include,sal,\ + $$(INCLUDE) \ + -I$(SRCDIR)/sal/inc \ + $(BACKTRACE_CFLAGS) \ +)) + +$(eval $(call gb_Library_add_defs,sal,\ + $(if $(filter FUZZERS,$(BUILD_TYPE)), \ + -DFORCE_DEFAULT_SIGNAL \ + ) \ + $(if $(filter iOS,$(OS)), \ + -DNO_CHILD_PROCESSES \ + ) \ + -DSAL_DLLIMPLEMENTATION \ + -DRTL_OS="\"$(RTL_OS)\"" \ + -DRTL_ARCH="\"$(RTL_ARCH)\"" \ + -DSRCDIR="\"$(SRCDIR)\"" \ + $(call gb_CondLibSalTextenc,-DCOND_LIB_SAL_TEXTENC) \ +)) + +$(eval $(call gb_Library_use_libraries,sal,\ + $(if $(filter ANDROID,$(OS)), \ + lo-bootstrap \ + ) \ +)) + +$(eval $(call gb_Library_use_externals,sal,\ + dragonbox \ + dtoa \ + valgrind \ + zlib \ +)) + +$(eval $(call gb_Library_use_system_win32_libs,sal,\ + advapi32 \ + comdlg32 \ + dbghelp \ + mpr \ + ole32 \ + shell32 \ + user32 \ + userenv \ + wer \ + ws2_32 \ +)) + +$(eval $(call gb_Library_add_libs,sal,\ + $(if $(filter LINUX,$(OS)), \ + -ldl \ + -lrt \ + ) \ + $(if $(filter SOLARIS,$(OS)), \ + -lnsl \ + -lsocket \ + ) \ + $(if $(filter HAIKU,$(OS)), \ + -lnetwork \ + ) \ + $(BACKTRACE_LIBS) \ +)) + +ifeq ($(OS),MACOSX) +$(eval $(call gb_Library_use_system_darwin_frameworks,sal,\ + Carbon \ + CoreFoundation \ + Foundation \ + $(if $(ENABLE_MACOSX_SANDBOX),Security) \ +)) +endif + +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/osl/all/compat \ + sal/osl/all/debugbase \ + sal/osl/all/filepath \ + sal/osl/all/loadmodulerelative \ + sal/osl/all/log \ + sal/osl/all/mutexshared \ + sal/osl/all/signalshared \ + sal/osl/all/utility \ + sal/rtl/alloc_arena \ + sal/rtl/alloc_cache \ + sal/rtl/alloc_fini \ + sal/rtl/alloc_global \ + sal/rtl/bootstrap \ + sal/rtl/byteseq \ + sal/rtl/cipher \ + sal/rtl/cmdargs \ + sal/rtl/crc \ + sal/rtl/digest \ + sal/rtl/hash \ + sal/rtl/locale \ + sal/rtl/math \ + sal/rtl/random \ + sal/rtl/rtl_process \ + sal/rtl/strbuf \ + sal/rtl/strimp \ + sal/rtl/string \ + sal/rtl/unload \ + sal/rtl/uri \ + sal/rtl/ustrbuf \ + sal/rtl/ustring \ + sal/rtl/uuid \ + sal/textenc/converter \ + sal/textenc/convertsimple \ + sal/textenc/handleundefinedunicodetotextchar \ + sal/textenc/tcvtutf8 \ + sal/textenc/tencinfo \ + sal/textenc/textcvt \ + sal/textenc/textenc \ + sal/textenc/unichars \ +)) + +ifeq ($(OS),iOS) +$(eval $(call gb_Library_add_cxxflags,sal,\ + $(gb_OBJCXXFLAGS) \ +)) +endif + +ifeq (,$(call gb_CondLibSalTextenc,$(true))) +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/textenc/context \ + sal/textenc/convertbig5hkscs \ + sal/textenc/converteuctw \ + sal/textenc/convertgb18030 \ + sal/textenc/convertisciidevangari \ + sal/textenc/convertiso2022cn \ + sal/textenc/convertiso2022jp \ + sal/textenc/convertiso2022kr \ + sal/textenc/convertsinglebytetobmpunicode \ + sal/textenc/tables \ + sal/textenc/tcvtbyte \ + sal/textenc/tcvtmb \ + sal/textenc/tcvtutf7 \ +)) +endif + +ifneq ($(OS),WNT) +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/osl/unx/backtraceapi \ + sal/osl/unx/conditn \ + sal/osl/unx/file \ + sal/osl/unx/file_error_transl \ + sal/osl/unx/file_misc \ + sal/osl/unx/file_path_helper \ + sal/osl/unx/file_stat \ + sal/osl/unx/file_url \ + sal/osl/unx/file_volume \ + sal/osl/unx/memory \ + sal/osl/unx/module \ + sal/osl/unx/mutex \ + sal/osl/unx/nlsupport \ + sal/osl/unx/pipe \ + sal/osl/unx/process \ + sal/osl/unx/process_impl \ + sal/osl/unx/profile \ + sal/osl/unx/random \ + sal/osl/unx/readwrite_helper \ + sal/osl/unx/salinit \ + sal/osl/unx/security \ + sal/osl/unx/signal \ + sal/osl/unx/socket \ + sal/osl/unx/soffice \ + sal/osl/unx/tempfile \ + sal/osl/unx/thread \ + sal/osl/unx/time \ +)) + +# Note that the uunxapi.mm file just includes the uunxapi.cxx one. Ditto for system.mm +ifeq ($(OS),MACOSX) +$(eval $(call gb_Library_add_objcxxobjects,sal,\ + sal/osl/unx/uunxapi \ + sal/osl/unx/system \ +)) +else +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/osl/unx/uunxapi \ + sal/osl/unx/system \ +)) +endif + +ifneq ($(filter MACOSX iOS,$(OS)),) +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/osl/unx/osxlocale \ +)) +endif +ifneq ($(OS),WNT) +$(eval $(call gb_Library_add_cobjects,sal,\ + sal/osl/unx/backtrace \ +)) +endif +ifneq ($(filter SPARC64 SPARC,$(CPUNAME)),) +$(eval $(call gb_Library_add_asmobjects,sal,\ + sal/osl/unx/asm/interlck_sparc \ +)) +else +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/osl/unx/interlck \ +)) +endif + +else # $(OS) == WNT + +$(eval $(call gb_Library_add_exception_objects,sal,\ + sal/osl/w32/backtrace \ + sal/osl/w32/conditn \ + sal/osl/w32/dllentry \ + sal/osl/w32/file \ + sal/osl/w32/file_dirvol \ + sal/osl/w32/file_error \ + sal/osl/w32/file_url \ + sal/osl/w32/interlck \ + sal/osl/w32/memory \ + sal/osl/w32/module \ + sal/osl/w32/mutex \ + sal/osl/w32/nlsupport \ + sal/osl/w32/path_helper \ + sal/osl/w32/pipe \ + sal/osl/w32/process \ + sal/osl/w32/procimpl \ + sal/osl/w32/profile \ + sal/osl/w32/random \ + sal/osl/w32/salinit \ + sal/osl/w32/security \ + sal/osl/w32/signal \ + sal/osl/w32/socket \ + sal/osl/w32/tempfile \ + sal/osl/w32/thread \ + sal/osl/w32/time \ +)) + +endif # ifneq ($(OS),WNT) + +ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE) +$(eval $(call gb_Library_add_defs,sal,-DLIBO_CIPHER_OPENSSL_BACKEND)) +$(eval $(call gb_Library_use_externals,sal, \ + openssl \ + openssl_headers \ +)) +endif + +# vim: set noet sw=4 ts=4: diff --git a/sal/Library_sal_textenc.mk b/sal/Library_sal_textenc.mk new file mode 100644 index 000000000..0fba5d083 --- /dev/null +++ b/sal/Library_sal_textenc.mk @@ -0,0 +1,33 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Library_Library,sal_textenc)) + +$(eval $(call gb_Library_set_plugin_for,sal_textenc,sal)) + +$(eval $(call gb_Library_use_external,sal_textenc,boost_headers)) + +$(eval $(call gb_Library_add_exception_objects,sal_textenc,\ + sal/textenc/context \ + sal/textenc/convertbig5hkscs \ + sal/textenc/converteuctw \ + sal/textenc/convertgb18030 \ + sal/textenc/convertisciidevangari \ + sal/textenc/convertiso2022cn \ + sal/textenc/convertiso2022jp \ + sal/textenc/convertiso2022kr \ + sal/textenc/convertsinglebytetobmpunicode \ + sal/textenc/tables \ + sal/textenc/tcvtbyte \ + sal/textenc/tcvtmb \ + sal/textenc/tcvtutf7 \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sal/Makefile b/sal/Makefile new file mode 100644 index 000000000..d22b9aca9 --- /dev/null +++ b/sal/Makefile @@ -0,0 +1,24 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) + +include $(module_directory)/../solenv/gbuild/partial_build.mk + +# vim: set noet sw=4 ts=4: diff --git a/sal/Module_sal.mk b/sal/Module_sal.mk new file mode 100644 index 000000000..e0448a508 --- /dev/null +++ b/sal/Module_sal.mk @@ -0,0 +1,40 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Module_Module,sal)) + +$(eval $(call gb_Module_add_targets,sal,\ + $(if $(CROSS_COMPILING),,$(if $(filter TRUE,$(DISABLE_DYNLOADING)),,Executable_cppunittester)) \ + $(if $(filter $(OS),ANDROID), \ + Library_lo-bootstrap) \ + Library_sal \ + $(call gb_CondLibSalTextenc,Library_sal_textenc) \ +)) + +ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) + +$(eval $(call gb_Module_add_targets,sal,\ + Executable_osl_process_child \ +)) + +$(eval $(call gb_Module_add_check_targets,sal,\ + $(if $(filter TRUE,$(DISABLE_DYNLOADING)),,CppunitTest_Module_DLL) \ + $(if $(filter WNT,$(OS)),CppunitTest_sal_comtools) \ + $(if $(filter WNT,$(OS)),CppunitTest_sal_retry_if_failed) \ + CppunitTest_sal_osl_security \ + CppunitTest_sal_osl \ + CppunitTest_sal_rtl \ + CppunitTest_sal_types \ + $(if $(COM_IS_CLANG),$(if $(COMPILER_EXTERNAL_TOOL)$(COMPILER_PLUGIN_TOOL),, \ + CompilerTest_sal_rtl_oustring)) \ +)) + +endif + +# vim: set noet sw=4 ts=4: diff --git a/sal/README.md b/sal/README.md new file mode 100644 index 000000000..deaf7b4c0 --- /dev/null +++ b/sal/README.md @@ -0,0 +1,11 @@ +# System Abstraction Layer (SAL) + +System abstraction layer; rtl, osl and sal + +`rtl`: +Platform independent strings + +`osl`: +platform specific stuff, threads, dynamic loading, process, ipc, etc + +Exports only C API and some inline-methods (only C++ API). diff --git a/sal/android/libreofficekit-jni.c b/sal/android/libreofficekit-jni.c new file mode 100644 index 000000000..08827df54 --- /dev/null +++ b/sal/android/libreofficekit-jni.c @@ -0,0 +1,209 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include + +#include + +#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "LibreOfficeKit", __VA_ARGS__)) +#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "LibreOfficeKit", __VA_ARGS__)) + +/* These are valid / used in all apps. */ +extern const char* data_dir; +extern const char* cache_dir; +extern void* apk_file; +extern int apk_file_size; +AAssetManager* native_asset_manager; + +extern void Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, jobject clazz, jstring string); +extern void Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, jobject clazz, jboolean state); + +extern LibreOfficeKit* libreofficekit_hook(const char* install_path); + +static char *full_program_dir = NULL; + +/// Call the same method from Bootstrap. +__attribute__ ((visibility("default"))) +void +Java_org_libreoffice_kit_LibreOfficeKit_putenv + (JNIEnv* env, jobject clazz, jstring string) +{ + Java_org_libreoffice_android_Bootstrap_putenv(env, clazz, string); +} + +/// Call the same method from Bootstrap. +__attribute__ ((visibility("default"))) +void Java_org_libreoffice_kit_LibreOfficeKit_redirectStdio + (JNIEnv* env, jobject clazz, jboolean state) +{ + Java_org_libreoffice_android_Bootstrap_redirect_1stdio(env, clazz, state); +} + +/// Initialize the LibreOfficeKit. +__attribute__ ((visibility("default"))) +jboolean libreofficekit_initialize(JNIEnv* env, + jstring dataDir, jstring cacheDir, jstring apkFile, jobject assetManager) +{ + struct stat st; + int fd; + const char *dataDirPath; + const char *cacheDirPath; + const char *apkFilePath; + + size_t data_dir_len; + const char fontsConf[] = "/etc/fonts/fonts.conf"; + char *fontsConfPath; + + setenv("OOO_DISABLE_RECOVERY", "1", 1); + + native_asset_manager = AAssetManager_fromJava(env, assetManager); + + dataDirPath = (*env)->GetStringUTFChars(env, dataDir, NULL); + data_dir = strdup(dataDirPath); + (*env)->ReleaseStringUTFChars(env, dataDir, dataDirPath); + + cacheDirPath = (*env)->GetStringUTFChars(env, cacheDir, NULL); + cache_dir = strdup(cacheDirPath); + (*env)->ReleaseStringUTFChars(env, cacheDir, cacheDirPath); + + // TMPDIR is used by osl_getTempDirURL() + setenv("TMPDIR", cache_dir, 1); + + data_dir_len = strlen(data_dir); + fontsConfPath = malloc(data_dir_len + sizeof(fontsConf)); + strncpy(fontsConfPath, data_dir, data_dir_len); + strncpy(fontsConfPath + data_dir_len, fontsConf, sizeof(fontsConf)); + + fd = open(fontsConfPath, O_RDONLY); + if (fd != -1) { + close(fd); + LOGI("Setting FONTCONFIG_FILE to %s", fontsConfPath); + setenv("FONTCONFIG_FILE", fontsConfPath, 1); + // DEBUG: + //setenv("FC_DEBUG", "8191", 1); // log everything + //Java_org_libreoffice_android_Bootstrap_redirect_1stdio(NULL, NULL, JNI_TRUE); + } + free(fontsConfPath); + + apkFilePath = (*env)->GetStringUTFChars(env, apkFile, NULL); + + fd = open(apkFilePath, O_RDONLY); + if (fd == -1) { + LOGE("Could not open %s", apkFilePath); + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + return JNI_FALSE; + } + if (fstat(fd, &st) == -1) { + LOGE("Could not fstat %s", apkFilePath); + close(fd); + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + return JNI_FALSE; + } + apk_file = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); + close(fd); + + if (apk_file == MAP_FAILED) { + LOGE("Could not mmap %s", apkFilePath); + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + return JNI_FALSE; + } + apk_file_size = st.st_size; + + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + + if (!setup_cdir()) + { + LOGE("setup_cdir failed"); + return JNI_FALSE; + } + + if (!setup_assets_tree()) + { + LOGE("setup_assets_tree failed"); + return JNI_FALSE; + } + + LOGI("LibreOfficeKit: libreofficekit_initialize finished"); + + return JNI_TRUE; +} + +/// Initialize the LibreOfficeKit. +__attribute__ ((visibility("default"))) +jboolean Java_org_libreoffice_kit_LibreOfficeKit_initializeNative + (JNIEnv* env, jobject clazz, + jstring dataDir, jstring cacheDir, jstring apkFile, jobject assetManager) +{ + const char program_dir[] = "/program"; + size_t data_dir_len; + + (void) clazz; + + libreofficekit_initialize(env, dataDir, cacheDir, apkFile, assetManager); + + // LibreOfficeKit expects a path to the program/ directory + free(full_program_dir); + data_dir_len = strlen(data_dir); + full_program_dir = malloc(data_dir_len + sizeof(program_dir)); + + strncpy(full_program_dir, data_dir, data_dir_len); + strncpy(full_program_dir + data_dir_len, program_dir, sizeof(program_dir)); + + // Initialize LibreOfficeKit + if (!libreofficekit_hook(full_program_dir)) + { + LOGE("libreofficekit_hook returned null"); + return JNI_FALSE; + } + + LOGI("LibreOfficeKit successfully initialized"); + + return JNI_TRUE; +} + +__attribute__ ((visibility("default"))) +jobject Java_org_libreoffice_kit_LibreOfficeKit_getLibreOfficeKitHandle + (JNIEnv* env, jobject clazz) +{ + LibreOfficeKit* aOffice; + + (void) env; + (void) clazz; + + aOffice = libreofficekit_hook(full_program_dir); + + return (*env)->NewDirectByteBuffer(env, (void*) aOffice, sizeof(LibreOfficeKit)); +} + +__attribute__ ((visibility("default"))) +AAssetManager * +lo_get_native_assetmgr(void) +{ + return native_asset_manager; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c new file mode 100644 index 000000000..0af8cfbb4 --- /dev/null +++ b/sal/android/lo-bootstrap.c @@ -0,0 +1,921 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "uthash.h" + +#include + +#undef LOGI + +#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "lo-bootstrap", __VA_ARGS__)) +#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "lo-bootstrap", __VA_ARGS__)) + +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +// TODO: workaround for unified headers migration - only made available when +// __USE_BSD or __BIONIC__ are defined, so just add those here... +#define letoh16(x) (x) +#define letoh32(x) (x) + +struct engine { + int dummy; +}; + +/* These are valid / used in all apps. */ +const char *data_dir; +const char *cache_dir; +void *apk_file; +int apk_file_size; +JavaVM *the_java_vm; + +/* Zip data structures */ + +/* compression methods */ +#define STORE 0 + +struct local_file_header { + uint32_t signature; + uint16_t min_version; + uint16_t general_flag; + uint16_t compression; + uint16_t lastmod_time; + uint16_t lastmod_date; + uint32_t crc32; + uint32_t compressed_size; + uint32_t uncompressed_size; + uint16_t filename_size; + uint16_t extra_field_size; + char data[0]; +} __attribute__((__packed__)); + +struct cdir_entry { + uint32_t signature; + uint16_t creator_version; + uint16_t min_version; + uint16_t general_flag; + uint16_t compression; + uint16_t lastmod_time; + uint16_t lastmod_date; + uint32_t crc32; + uint32_t compressed_size; + uint32_t uncompressed_size; + uint16_t filename_size; + uint16_t extra_field_size; + uint16_t file_comment_size; + uint16_t disk_num; + uint16_t internal_attr; + uint32_t external_attr; + uint32_t offset; + char data[0]; +} __attribute__((__packed__)); + +#define CDIR_END_SIG 0x06054b50 + +struct cdir_end { + uint32_t signature; + uint16_t disk_num; + uint16_t cdir_disk; + uint16_t disk_entries; + uint16_t cdir_entries; + uint32_t cdir_size; + uint32_t cdir_offset; + uint16_t comment_size; + char comment[0]; +} __attribute__((__packed__)); + +/* End of Zip data structures */ + +static struct cdir_entry *cdir_start; +static uint16_t cdir_entries; + +/* Data structure to turn Zip's list in arbitrary order of + * hierarchical pathnames (not necessarily including entries for + * directories) into an actual hierarchical directory tree, so that we + * can iterate over directory entries properly in the dirent style + * functions. + */ + +typedef struct direntry *direntry; + +struct direntry { + UT_hash_handle hh; + enum { REGULAR, DIRECTORY } kind; + int ino; + union { + struct cdir_entry *file; + direntry subdir; + }; +}; + +struct lo_apk_dir { + direntry cur; +}; + +static direntry assets = NULL; + +static uint32_t +cdir_entry_size(struct cdir_entry *entry) +{ + return sizeof(*entry) + + letoh16(entry->filename_size) + + letoh16(entry->extra_field_size) + + letoh16(entry->file_comment_size); +} + +int +setup_cdir(void) +{ + struct cdir_end *dirend = (struct cdir_end *)((char *) apk_file + apk_file_size - sizeof(*dirend)); + uint32_t cdir_offset; + + while ((void *)dirend > apk_file && + letoh32(dirend->signature) != CDIR_END_SIG) + dirend = (struct cdir_end *)((char *)dirend - 1); + if (letoh32(dirend->signature) != CDIR_END_SIG) { + LOGE("setup_cdir: Could not find end of central directory record"); + return 0; + } + + cdir_offset = letoh32(dirend->cdir_offset); + + cdir_entries = letoh16(dirend->cdir_entries); + cdir_start = (struct cdir_entry *)((char *)apk_file + cdir_offset); + + return 1; +} + +static struct cdir_entry * +find_cdir_entry(struct cdir_entry *entry, int count, const char *name) +{ + size_t name_size = strlen(name); + while (count--) { + if (letoh16(entry->filename_size) == name_size && + !memcmp(entry->data, name, name_size)) + return entry; + entry = (struct cdir_entry *)((char *)entry + cdir_entry_size(entry)); + } + return NULL; +} + +static void +handle_one_asset(struct cdir_entry *entry) +{ + /* In the .apk there are no initial slashes */ + const char *p = entry->data + sizeof("assets/")-1; + const char *z = entry->data + entry->filename_size; + direntry *dir = &assets; + static int ino = 1; + + while (p < z) { + const char *q = p; + direntry old, new; + + while (q < z && *q != '/') + q++; + HASH_FIND(hh, *dir, p, (unsigned)(q - p), old); + if (*q == '/') { + if (old == NULL) { + new = malloc(sizeof(*new)); + new->ino = ino++; + new->kind = DIRECTORY; + new->subdir = NULL; + HASH_ADD_KEYPTR(hh, *dir, p, (unsigned)(q - p), new); + dir = &new->subdir; + } else { + dir = &old->subdir; + } + p = q + 1; + } else { + if (old == NULL) { + new = malloc(sizeof(*new)); + new->ino = ino++; + new->kind = REGULAR; + new->file = entry; + HASH_ADD_KEYPTR(hh, *dir, p, (unsigned)(q - p), new); + } else { + LOGE("duplicate entry in apk: %.*s", entry->filename_size, entry->data); + } + p = q; + } + (void) dir; + } +} + +int +setup_assets_tree(void) +{ + int count = cdir_entries; + struct cdir_entry *entry = cdir_start; + + while (count--) { + if (letoh16(entry->filename_size) >= sizeof("assets/")-1 && + memcmp(entry->data, "assets/", sizeof("assets/")-1) == 0) + handle_one_asset(entry); + entry = (struct cdir_entry *)((char *)entry + cdir_entry_size(entry)); + } + return 1; +} + +/* The lo-native-code shared library is always loaded from Java, so this is + * always called by JNI first. + */ +__attribute__ ((visibility("default"))) +jint +JNI_OnLoad(JavaVM* vm, void* reserved) +{ + (void) reserved; + + the_java_vm = vm; + + return JNI_VERSION_1_6; +} + +// public static native boolean setup(String dataDir, +// String cacheDir, +// String apkFile) + +__attribute__ ((visibility("default"))) +jboolean +Java_org_libreoffice_android_Bootstrap_setup__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2 + (JNIEnv* env, + jobject clazz, + jstring dataDir, + jstring cacheDir, + jstring apkFile) +{ + struct stat st; + int fd; + const char *dataDirPath; + const char *cacheDirPath; + const char *apkFilePath; + + (void) clazz; + + dataDirPath = (*env)->GetStringUTFChars(env, dataDir, NULL); + data_dir = strdup(dataDirPath); + (*env)->ReleaseStringUTFChars(env, dataDir, dataDirPath); + + cacheDirPath = (*env)->GetStringUTFChars(env, cacheDir, NULL); + cache_dir = strdup(cacheDirPath); + (*env)->ReleaseStringUTFChars(env, cacheDir, cacheDirPath); + + apkFilePath = (*env)->GetStringUTFChars(env, apkFile, NULL); + + fd = open(apkFilePath, O_RDONLY); + if (fd == -1) { + LOGE("Could not open %s", apkFilePath); + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + return JNI_FALSE; + } + if (fstat(fd, &st) == -1) { + LOGE("Could not fstat %s", apkFilePath); + close(fd); + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + return JNI_FALSE; + } + apk_file = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); + close(fd); + + if (apk_file == MAP_FAILED) { + LOGE("Could not mmap %s", apkFilePath); + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + return JNI_FALSE; + } + apk_file_size = st.st_size; + + (*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath); + + if (!setup_cdir()) + return JNI_FALSE; + + if (!setup_assets_tree()) + return JNI_FALSE; + + return JNI_TRUE; +} + +static jboolean +get_jni_string_array(JNIEnv *env, + const char *function_and_parameter_name, + jobject strv, + int *argc, + const char ***argv) +{ + jclass StringArray; + int i; + + StringArray = (*env)->FindClass(env, "[Ljava/lang/String;"); + if (StringArray == NULL) { + LOGE("Could not find String[] class"); + return JNI_FALSE; + } + + if (!(*env)->IsInstanceOf(env, strv, StringArray)) { + LOGE("%s is not a String[]?", function_and_parameter_name); + return JNI_FALSE; + } + + *argc = (*env)->GetArrayLength(env, strv); + *argv = malloc(sizeof(char *) * (*argc+1)); + + for (i = 0; i < *argc; i++) { + const char *s = (*env)->GetStringUTFChars(env, (*env)->GetObjectArrayElement(env, strv, i), NULL); + (*argv)[i] = strdup(s); + (*env)->ReleaseStringUTFChars(env, (*env)->GetObjectArrayElement(env, strv, i), s); + } + (*argv)[*argc] = NULL; + + return JNI_TRUE; +} + +// public static native int getpid(); + +__attribute__ ((visibility("default"))) +jint +Java_org_libreoffice_android_Bootstrap_getpid(JNIEnv* env, + jobject clazz) +{ + (void) env; + (void) clazz; + + return getpid(); +} + +// public static native void system(String cmdline); + +__attribute__ ((visibility("default"))) +void +Java_org_libreoffice_android_Bootstrap_system(JNIEnv* env, + jobject clazz, + jstring cmdline) +{ + const char *s; + + (void) clazz; + + s = (*env)->GetStringUTFChars(env, cmdline, NULL); + + LOGI("system(%s)", s); + + system(s); + + (*env)->ReleaseStringUTFChars(env, cmdline, s); +} + +// public static native void putenv(String string); + +__attribute__ ((visibility("default"))) +void +Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, + jobject clazz, + jstring string) +{ + const char *s; + char *s_copy; + + (void) clazz; + + s = (*env)->GetStringUTFChars(env, string, NULL); + s_copy = strdup(s); + + LOGI("putenv(%s)", s_copy); + + putenv(s_copy); + +#if 0 + { + static int beenhere=0; + if (!beenhere) { + LOGI("lo-bootstrap: Sleeping for 20 seconds, start ndk-gdb NOW if that is your intention"); + sleep(20); + beenhere = 1; + } + } +#endif + + (*env)->ReleaseStringUTFChars(env, string, s); +} + +__attribute__ ((visibility("default"))) +void * +lo_apkentry(const char *filename, + size_t *size) +{ + struct cdir_entry *entry; + struct local_file_header *file; + void *data; + + if (*filename == '/') + filename++; + + entry = find_cdir_entry(cdir_start, cdir_entries, filename); + + if (entry == NULL) { + LOGE("lo_apkentry: Could not find %s", filename); + return NULL; + } + file = (struct local_file_header *)((char *)apk_file + letoh32(entry->offset)); + + if (letoh16(file->compression) != STORE) { + LOGE("lo_apkentry: File %s is compressed", filename); + return NULL; + } + + data = ((char *)&file->data) + letoh16(file->filename_size) + letoh16(file->extra_field_size); + *size = file->uncompressed_size; + + /* LOGI("lo_apkentry(%s): %p, %d", filename, data, *size); */ + + return data; +} + +__attribute__ ((visibility("default"))) +lo_apk_dir * +lo_apk_opendir(const char *dirname) +{ + /* In the .apk there are no initial slashes, but the parameter passed to + * us does have it. + */ + const char *p = dirname + sizeof("/assets/")-1; + direntry dir = assets; + + if (!*p) { + lo_apk_dir *result = malloc(sizeof(*result)); + result->cur = assets; + return result; + } + + while (1) { + const char *q = p; + direntry entry; + + while (*q && *q != '/') + q++; + + HASH_FIND(hh, dir, p, (unsigned)(q - p), entry); + + if (entry == NULL && *q == '/') { + errno = ENOENT; + return NULL; + } else if (entry == NULL) { + /* Empty directories, or directories containing only "hidden" + * files (like the .gitignore in sc/qa/unit/qpro/indeterminate) + * are not present in the .apk. So we need to pretend that any + * directory that doesn't exist as a parent of an entry in the + * .apk *does* exist but is empty. + */ + lo_apk_dir *result = malloc(sizeof(*result)); + result->cur = NULL; + return result; + } + + if (entry->kind != DIRECTORY) { + errno = ENOTDIR; + return NULL; + } + + if (!q[0] || !q[1]) { + lo_apk_dir *result = malloc(sizeof(*result)); + result->cur = entry->subdir; + return result; + } + + dir = entry->subdir; + p = q + 1; + } +} + +__attribute__ ((visibility("default"))) +struct dirent * +lo_apk_readdir(lo_apk_dir *dirp) +{ + static struct dirent result; + + if (dirp->cur == NULL) { + /* LOGI("lo_apk_readdir(%p) = NULL", dirp); */ + return NULL; + } + + result.d_ino = dirp->cur->ino; + result.d_off = 0; + result.d_reclen = 0; + + if (dirp->cur->kind == DIRECTORY) + result.d_type = DT_DIR; + else + result.d_type = DT_REG; + + memcpy(result.d_name, dirp->cur->hh.key, dirp->cur->hh.keylen); + result.d_name[dirp->cur->hh.keylen] = '\0'; + + dirp->cur = dirp->cur->hh.next; + + /* LOGI("lo_apk_readdir(%p) = %s:%s", dirp, result.d_type == DT_DIR ? "DIR" : "REG", result.d_name); */ + + return &result; +} + +__attribute__ ((visibility("default"))) +int +lo_apk_closedir(lo_apk_dir *dirp) +{ + free(dirp); + + /* LOGI("lo_apk_closedir(%p)", dirp); */ + + return 0; +} + +static int +new_stat(const char *path, + struct stat *statp, + struct cdir_entry *entry, + int mode, + int fake_ino) +{ + struct tm tm; + + memset(statp, 0, sizeof(*statp)); + statp->st_mode = mode | S_IRUSR; + statp->st_nlink = 1; + + statp->st_uid = getuid(); + statp->st_gid = getgid(); + + if (entry != NULL) + statp->st_size = entry->uncompressed_size; + else + statp->st_size = 0; + statp->st_blksize = 512; + if (statp->st_size == 0) + statp->st_blocks = 0; + else + statp->st_blocks = (statp->st_size - 1) / statp->st_blksize + 1; + + statp->st_atime = time(NULL); + + memset(&tm, 0, sizeof(tm)); + tm.tm_sec = (letoh16(entry->lastmod_time) & 0x1F) * 2; + tm.tm_min = (letoh16(entry->lastmod_time) >> 5) & 0x3F; + tm.tm_hour = (letoh16(entry->lastmod_time) >> 11) & 0x1F; + tm.tm_mday = letoh16(entry->lastmod_date) & 0x1F; + tm.tm_mon = ((letoh16(entry->lastmod_date) >> 5) & 0x0F) - 1; + tm.tm_year = ((letoh16(entry->lastmod_date) >> 9) & 0x7F) + 80; + + statp->st_mtime = mktime(&tm); + statp->st_ctime = statp->st_mtime; + + statp->st_ino = fake_ino; + + (void) path; + /* LOGI("lo_apk_lstat(%s) = { mode=%o, size=%lld, ino=%lld mtime=%.24s }", + path, statp->st_mode, statp->st_size, statp->st_ino, + ctime((const time_t *) &statp->st_mtime)); */ + + return 0; +} + +__attribute__ ((visibility("default"))) +int +lo_apk_lstat(const char *path, + struct stat *statp) +{ + const char *pn = path; + int count = cdir_entries; + struct cdir_entry *entry = cdir_start; + size_t name_size; + + if (*pn == '/') { + pn++; + if (!pn[0]) + return new_stat(path, statp, NULL, S_IFDIR | S_IXUSR, 1); + } + + name_size = strlen(pn); + while (count--) + { + if (letoh16(entry->filename_size) >= name_size && + !memcmp(entry->data, pn, name_size) && + (letoh16(entry->filename_size) == name_size || entry->data[name_size] == '/')) + break; + entry = (struct cdir_entry *)((char *)entry + cdir_entry_size(entry)); + } + if (count >= 0) { + if (letoh16(entry->filename_size) == name_size) + return new_stat(path, statp, entry, S_IFREG, cdir_entries - count + 1); + else + return new_stat(path, statp, entry, S_IFDIR | S_IXUSR, cdir_entries - count + 1); + } + + errno = ENOENT; + return -1; +} + +/* Android's JNI works only to libraries loaded through Java's + * System.loadLibrary(), it seems. But now with just one big app-specific .so + * on Android, that would not be a problem, but for historical reasons, we + * have JNI wrappers here, and then call the VCL etc function from them. Oh + * well, one could say it's clean to have all the Android-specific JNI + * functions here in this file. + */ + +extern void osl_setCommandArgs(int, char **); + +__attribute__ ((visibility("default"))) +void +Java_org_libreoffice_android_Bootstrap_setCommandArgs(JNIEnv* env, + jobject clazz, + jobject argv) +{ + char **c_argv; + int c_argc; + Dl_info lo_bootstrap_info; + + (void) clazz; + + if (!get_jni_string_array(env, "setCommandArgs :argv", argv, &c_argc, (const char ***) &c_argv)) + return; + + if (dladdr(Java_org_libreoffice_android_Bootstrap_setCommandArgs, &lo_bootstrap_info) != 0) { + char *new_argv0 = malloc(strlen(lo_bootstrap_info.dli_fname) + strlen(c_argv[0])); + char *slash; + strcpy(new_argv0, lo_bootstrap_info.dli_fname); + slash = strrchr(new_argv0, '/'); + if (slash != NULL) + *slash = '\0'; + slash = strrchr(new_argv0, '/'); + if (slash != NULL) + strcpy(slash+1, c_argv[0]); + else + strcpy(new_argv0, c_argv[0]); + free(c_argv[0]); + c_argv[0] = new_argv0; + } + + osl_setCommandArgs(c_argc, c_argv); +} + +/* Code for reading lines from the pipe based on the (Apache-licensed) Android + * logwrapper.c + */ + +static int +read_from(int fd, const char *tag, char *buffer, int *sz, int *a, int *b, size_t sizeof_buffer) +{ + int nread; + + nread = read(fd, buffer+*b, sizeof_buffer - 1 - *b); + *sz = nread; + + if (nread == -1) { + LOGE("redirect_thread: Reading from %d failed: %s", fd, strerror(errno)); + close(fd); + return -1; + } + + if (nread == 0) { + LOGI("redirect_thread: EOF from fd %d", fd); + close(fd); + return 0; + } + + *sz += *b; + + for (*b = 0; *b < *sz; (*b)++) { + if (buffer[*b] == '\n') { + buffer[*b] = '\0'; + __android_log_print(ANDROID_LOG_INFO, tag, "%s", &buffer[*a]); + *a = *b + 1; + } + } + + if (*a == 0 && *b == (int) sizeof_buffer - 1) { + // buffer is full, flush + buffer[*b] = '\0'; + __android_log_print(ANDROID_LOG_INFO, tag, "%s", &buffer[*a]); + *b = 0; + } else if (*a != *b) { + // Keep left-overs + *b -= *a; + memmove(buffer, &buffer[*a], *b); + *a = 0; + } else { + *a = 0; + *b = 0; + } + + return nread; +} + +static int stdout_pipe[2], stderr_pipe[2]; + +static void * +redirect_thread(void *arg) +{ + char buffer[2][4096]; + int a[2] = { 0, 0 }; + int b[2] = { 0, 0 }; + int sz[2]; + + (void) arg; + + while (1) { + fd_set readfds; + int nfds = 0; + + FD_ZERO(&readfds); + if (stdout_pipe[0] != -1) { + FD_SET(stdout_pipe[0], &readfds); + nfds = MAX(nfds, stdout_pipe[0] + 1); + } + if (stderr_pipe[0] != -1) { + FD_SET(stderr_pipe[0], &readfds); + nfds = MAX(nfds, stderr_pipe[0] + 1); + } + if (nfds == 0) { + LOGI("redirect_thread: Nothing to read any more, thread exiting"); + return NULL; + } + + if (select(nfds, &readfds, NULL, NULL, NULL) == -1) { + LOGE("redirect_thread: select failed: %s, thread exiting", strerror(errno)); + close(stdout_pipe[0]); + stdout_pipe[0] = -1; + close(stderr_pipe[0]); + stderr_pipe[0] = -1; + return NULL; + } + + if (stdout_pipe[0] != -1 && + FD_ISSET(stdout_pipe[0], &readfds)) { + if (read_from(stdout_pipe[0], "stdout", buffer[0], &sz[0], &a[0], &b[0], sizeof(buffer[0])) <= 0) { + stdout_pipe[0] = -1; + } + } + + if (stderr_pipe[0] != -1 && + FD_ISSET(stderr_pipe[0], &readfds)) { + if (read_from(stderr_pipe[0], "stderr", buffer[1], &sz[1], &a[1], &b[1], sizeof(buffer[1])) <= 0) { + stderr_pipe[0] = -1; + } + } + } +} + +static int +redirect_to_null(void) +{ + int null = open("/dev/null", O_WRONLY); + if (null == -1) { + LOGE("redirect_stdio: Could not open /dev/null: %s", strerror(errno)); + /* If we can't redirect stdout or stderr to /dev/null, just close them + * then instead. Huh? + */ + close(1); + close(2); + return 0; + } + if (dup2(null, 1) == -1) { + LOGE("redirect_stdio: Could not dup2 %d to 1: %s", null, strerror(errno)); + close(null); + close(1); + close(2); + return 0; + } + if (dup2(null, 2) == -1) { + LOGE("redirect_stdio: Could not dup2 %d to 2: %s", null, strerror(errno)); + close(null); + close(1); + close(2); + return 0; + } + close(null); + return 1; +} + +__attribute__ ((visibility("default"))) +void +Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, + jobject clazz, + jboolean state) +{ + static jboolean current = JNI_FALSE; + pthread_t thread; + pthread_attr_t attr; + + (void) env; + (void) clazz; + + if (state == current) + return; + + if (state == JNI_FALSE) { + if (!redirect_to_null()) + return; + } else { + if (pipe(stdout_pipe) == -1) { + LOGE("redirect_stdio: Could not create pipes: %s", strerror(errno)); + return; + } + if (pipe(stderr_pipe) == -1) { + LOGE("redirect_stdio: Could not create pipes: %s", strerror(errno)); + close(stdout_pipe[0]); + close(stdout_pipe[1]); + return; + } + LOGI("redirect_stdio: stdout pipe: [%d,%d], stderr pipe: [%d,%d]", + stdout_pipe[0], stdout_pipe[1], stderr_pipe[0], stderr_pipe[1]); + + if (dup2(stdout_pipe[1], 1) == -1) { + LOGE("redirect_stdio: Could not dup2 %d to 1: %s", stdout_pipe[1], strerror(errno)); + close(stdout_pipe[0]); + close(stdout_pipe[1]); + close(stderr_pipe[0]); + close(stderr_pipe[1]); + return; + } + + if (dup2(stderr_pipe[1], 2) == -1) { + LOGE("redirect_stdio: Could not dup2 %d to 2: %s", stdout_pipe[1], strerror(errno)); + /* stdout has already been redirected to its pipe, so redirect + * it back to /dev/null + */ + redirect_to_null(); + close(stdout_pipe[0]); + close(stdout_pipe[1]); + close(stderr_pipe[0]); + close(stderr_pipe[1]); + return; + } + close(stdout_pipe[1]); + close(stderr_pipe[1]); + + if (pthread_attr_init(&attr) != 0 || + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0 || + pthread_create(&thread, &attr, redirect_thread, NULL) != 0) { + LOGE("redirect_stdio: Could not create thread: %s", strerror(errno)); + redirect_to_null(); + close(stdout_pipe[0]); + close(stderr_pipe[0]); + return; + } + } + current = state; + return; +} + +__attribute__ ((visibility("default"))) +jlong +Java_org_libreoffice_android_Bootstrap_address_1of_1direct_1byte_1buffer(JNIEnv *env, + jobject bbuffer) +{ + return (jlong) (intptr_t) (*env)->GetDirectBufferAddress(env, bbuffer); +} + +__attribute__ ((visibility("default"))) +void +libreofficekit_set_javavm(JavaVM *vm) +{ + the_java_vm = vm; +} + +__attribute__ ((visibility("default"))) +JavaVM * +lo_get_javavm(void) +{ + return the_java_vm; +} + +__attribute__ ((visibility("default"))) +const char * +lo_get_app_data_dir(void) +{ + return data_dir; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/android/uthash.h b/sal/android/uthash.h new file mode 100644 index 000000000..5884108b8 --- /dev/null +++ b/sal/android/uthash.h @@ -0,0 +1,971 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* +Copyright (c) 2003-2010, Troy D. Hanson http://uthash.sourceforge.net +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef INCLUDED_SAL_ANDROID_UTHASH_H +#define INCLUDED_SAL_ANDROID_UTHASH_H + +#include /* memcmp,strlen */ +#include /* ptrdiff_t */ + +/* These macros use decltype or the earlier __typeof GNU extension. + As decltype is only available in newer compilers (VS2010 or gcc 4.3+ + when compiling c++ source) this code uses whatever method is needed + or, for VS2008 where neither is available, uses casting workarounds. */ +#ifdef _MSC_VER /* MS compiler */ +#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ +#define DECLTYPE(x) (decltype(x)) +#else /* VS2008 or older (or VS2010 in C mode) */ +#define NO_DECLTYPE +#define DECLTYPE(x) +#endif +#else /* GNU, Sun and other compilers */ +#define DECLTYPE(x) (__typeof(x)) +#endif + +#ifdef NO_DECLTYPE +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + char **_da_dst = (char**)(&(dst)); \ + *_da_dst = (char*)(src); \ +} while(0) +#else +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + (dst) = DECLTYPE(dst)(src); \ +} while(0) +#endif + +/* a number of the hash function use uint32_t which isn't defined on win32 */ +#ifdef _MSC_VER +typedef unsigned int uint32_t; +#else +#include /* uint32_t */ +#endif + + +#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ +#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ +#define uthash_free(ptr,sz) free(ptr) /* free fcn */ + +#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ +#define uthash_expand_fyi(tbl) /* can be defined to log expands */ + +/* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */ +#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */ + +/* calculate the element whose hash handle address is the */ +#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) + +#define HASH_FIND(hh,head,keyptr,keylen,out) \ +do { \ + out=NULL; \ + if (head) { \ + unsigned _hf_bkt,_hf_hashv; \ + HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \ + if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \ + HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \ + keyptr,keylen,out); \ + } \ + } \ +} while (0) + +#ifdef HASH_BLOOM +#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM) +#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0) +#define HASH_BLOOM_MAKE(tbl) \ +do { \ + (tbl)->bloom_nbits = HASH_BLOOM; \ + (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ + if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ + memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ + (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ +} while (0); + +#define HASH_BLOOM_FREE(tbl) \ +do { \ + uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ +} while (0); + +#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8))) +#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8))) + +#define HASH_BLOOM_ADD(tbl,hashv) \ + HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) + +#define HASH_BLOOM_TEST(tbl,hashv) \ + HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) + +#else +#define HASH_BLOOM_MAKE(tbl) +#define HASH_BLOOM_FREE(tbl) +#define HASH_BLOOM_ADD(tbl,hashv) +#define HASH_BLOOM_TEST(tbl,hashv) (1) +#endif + +#define HASH_MAKE_TABLE(hh,head) \ +do { \ + (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ + sizeof(UT_hash_table)); \ + if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ + memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ + (head)->hh.tbl->tail = &((head)->hh); \ + (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ + (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ + (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ + (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ + memset((head)->hh.tbl->buckets, 0, \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_MAKE((head)->hh.tbl); \ + (head)->hh.tbl->signature = HASH_SIGNATURE; \ +} while(0) + +#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ + HASH_ADD_KEYPTR(hh,head,&add->fieldname,keylen_in,add) + +#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ +do { \ + unsigned _ha_bkt; \ + (add)->hh.next = NULL; \ + (add)->hh.key = (char*)keyptr; \ + (add)->hh.keylen = keylen_in; \ + if (!(head)) { \ + head = (add); \ + (head)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh,head); \ + } else { \ + (head)->hh.tbl->tail->next = (add); \ + (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ + (head)->hh.tbl->tail = &((add)->hh); \ + } \ + (head)->hh.tbl->num_items++; \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \ + (add)->hh.hashv, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \ + HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \ + HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \ + HASH_FSCK(hh,head); \ +} while(0) + +#define HASH_TO_BKT( hashv, num_bkts, bkt ) \ +do { \ + bkt = ((hashv) & ((num_bkts) - 1)); \ +} while(0) + +/* delete "delptr" from the hash table. + * "the usual" patch-up process for the app-order doubly-linked-list. + * The use of _hd_hh_del below deserves special explanation. + * These used to be expressed using (delptr) but that led to a bug + * if someone used the same symbol for the head and deletee, like + * HASH_DELETE(hh,users,users); + * We want that to work, but by changing the head (users) below + * we were forfeiting our ability to further refer to the deletee (users) + * in the patch-up process. Solution: use scratch space to + * copy the deletee pointer, then the latter references are via that + * scratch pointer rather than through the repointed (users) symbol. + */ +#define HASH_DELETE(hh,head,delptr) \ +do { \ + unsigned _hd_bkt; \ + struct UT_hash_handle *_hd_hh_del; \ + if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + head = NULL; \ + } else { \ + _hd_hh_del = &((delptr)->hh); \ + if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ + (head)->hh.tbl->tail = \ + (UT_hash_handle*)((char*)((delptr)->hh.prev) + \ + (head)->hh.tbl->hho); \ + } \ + if ((delptr)->hh.prev) { \ + ((UT_hash_handle*)((char*)((delptr)->hh.prev) + \ + (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ + } else { \ + DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ + } \ + if (_hd_hh_del->next) { \ + ((UT_hash_handle*)((char*)_hd_hh_del->next + \ + (head)->hh.tbl->hho))->prev = \ + _hd_hh_del->prev; \ + } \ + HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ + (head)->hh.tbl->num_items--; \ + } \ + HASH_FSCK(hh,head); \ +} while (0) + +/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ +#define HASH_FIND_STR(head,findstr,out) \ + HASH_FIND(hh,head,findstr,strlen(findstr),out) +#define HASH_ADD_STR(head,strfield,add) \ + HASH_ADD(hh,head,strfield,strlen(add->strfield),add) +#define HASH_FIND_INT(head,findint,out) \ + HASH_FIND(hh,head,findint,sizeof(int),out) +#define HASH_ADD_INT(head,intfield,add) \ + HASH_ADD(hh,head,intfield,sizeof(int),add) +#define HASH_FIND_PTR(head,findptr,out) \ + HASH_FIND(hh,head,findptr,sizeof(void *),out) +#define HASH_ADD_PTR(head,ptrfield,add) \ + HASH_ADD(hh,head,ptrfield,sizeof(void *),add) +#define HASH_DEL(head,delptr) \ + HASH_DELETE(hh,head,delptr) + +/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. + * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. + */ +#ifdef HASH_DEBUG +#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) +#define HASH_FSCK(hh,head) \ +do { \ + if (head) { \ + unsigned _bkt_i; \ + unsigned _count, _bkt_count; \ + char *_prev; \ + struct UT_hash_handle *_thh; \ + _count = 0; \ + for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ + _bkt_count = 0; \ + _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ + _prev = NULL; \ + while (_thh) { \ + if (_prev != (char*)(_thh->hh_prev)) { \ + HASH_OOPS("invalid hh_prev %p, actual %p\n", \ + _thh->hh_prev, _prev ); \ + } \ + _bkt_count++; \ + _prev = (char*)(_thh); \ + _thh = _thh->hh_next; \ + } \ + _count += _bkt_count; \ + if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ + HASH_OOPS("invalid bucket count %d, actual %u\n", \ + (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ + } \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("invalid hh item count %d, actual %u\n", \ + (head)->hh.tbl->num_items, _count ); \ + } \ + /* traverse hh in app order; check next/prev integrity, count */ \ + _count = 0; \ + _prev = NULL; \ + _thh = &(head)->hh; \ + while (_thh) { \ + _count++; \ + if (_prev !=(char*)(_thh->prev)) { \ + HASH_OOPS("invalid prev %p, actual %p\n", \ + _thh->prev, _prev ); \ + } \ + _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ + _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ + (head)->hh.tbl->hho) : NULL ); \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("invalid app item count %d, actual %u\n", \ + (head)->hh.tbl->num_items, _count ); \ + } \ + } \ +} while (0) +#else +#define HASH_FSCK(hh,head) +#endif + +/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to + * the descriptor to which this macro is defined for tuning the hash function. + * The app can #include to get the prototype for write(2). */ +#ifdef HASH_EMIT_KEYS +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ +do { \ + unsigned _klen = fieldlen; \ + write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ + write(HASH_EMIT_KEYS, keyptr, fieldlen); \ +} while (0) +#else +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) +#endif + +/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ +#ifdef HASH_FUNCTION +#define HASH_FCN HASH_FUNCTION +#else +#define HASH_FCN HASH_JEN +#endif + +/* The Bernstein hash function, used in Perl prior to v5.6 */ +#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _hb_keylen=keylen; \ + char *_hb_key=(char*)(key); \ + (hashv) = 0; \ + while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \ + bkt = (hashv) & (num_bkts-1); \ +} while (0) + +/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at + * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ +#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _sx_i; \ + char *_hs_key=(char*)(key); \ + hashv = 0; \ + for(_sx_i=0; _sx_i < keylen; _sx_i++) \ + hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ + bkt = hashv & (num_bkts-1); \ +} while (0) + +#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _fn_i; \ + char *_hf_key=(char*)(key); \ + hashv = 2166136261UL; \ + for(_fn_i=0; _fn_i < keylen; _fn_i++) \ + hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \ + bkt = hashv & (num_bkts-1); \ +} while(0); + +#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _ho_i; \ + char *_ho_key=(char*)(key); \ + hashv = 0; \ + for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ + hashv += _ho_key[_ho_i]; \ + hashv += (hashv << 10); \ + hashv ^= (hashv >> 6); \ + } \ + hashv += (hashv << 3); \ + hashv ^= (hashv >> 11); \ + hashv += (hashv << 15); \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#define HASH_JEN_MIX(a,b,c) \ +do { \ + a -= b; a -= c; a ^= ( c >> 13 ); \ + b -= c; b -= a; b ^= ( a << 8 ); \ + c -= a; c -= b; c ^= ( b >> 13 ); \ + a -= b; a -= c; a ^= ( c >> 12 ); \ + b -= c; b -= a; b ^= ( a << 16 ); \ + c -= a; c -= b; c ^= ( b >> 5 ); \ + a -= b; a -= c; a ^= ( c >> 3 ); \ + b -= c; b -= a; b ^= ( a << 10 ); \ + c -= a; c -= b; c ^= ( b >> 15 ); \ +} while (0) + +#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _hj_i,_hj_j,_hj_k; \ + char *_hj_key=(char*)(key); \ + hashv = 0xfeedbeef; \ + _hj_i = _hj_j = 0x9e3779b9; \ + _hj_k = keylen; \ + while (_hj_k >= 12) { \ + _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ + + ( (unsigned)_hj_key[2] << 16 ) \ + + ( (unsigned)_hj_key[3] << 24 ) ); \ + _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ + + ( (unsigned)_hj_key[6] << 16 ) \ + + ( (unsigned)_hj_key[7] << 24 ) ); \ + hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ + + ( (unsigned)_hj_key[10] << 16 ) \ + + ( (unsigned)_hj_key[11] << 24 ) ); \ + \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + \ + _hj_key += 12; \ + _hj_k -= 12; \ + } \ + hashv += keylen; \ + switch ( _hj_k ) { \ + case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \ + case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \ + case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \ + case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \ + case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \ + case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \ + case 5: _hj_j += _hj_key[4]; \ + case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \ + case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \ + case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \ + case 1: _hj_i += _hj_key[0]; \ + } \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +/* The Paul Hsieh hash function */ +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +#define get16bits(d) (*((const uint16_t *) (d))) +#endif + +#if !defined (get16bits) +#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif +#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \ +do { \ + char *_sfh_key=(char*)(key); \ + uint32_t _sfh_tmp, _sfh_len = keylen; \ + \ + int _sfh_rem = _sfh_len & 3; \ + _sfh_len >>= 2; \ + hashv = 0xcafebabe; \ + \ + /* Main loop */ \ + for (;_sfh_len > 0; _sfh_len--) { \ + hashv += get16bits (_sfh_key); \ + _sfh_tmp = (get16bits (_sfh_key+2) << 11) ^ hashv; \ + hashv = (hashv << 16) ^ _sfh_tmp; \ + _sfh_key += 2*sizeof (uint16_t); \ + hashv += hashv >> 11; \ + } \ + \ + /* Handle end cases */ \ + switch (_sfh_rem) { \ + case 3: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 16; \ + hashv ^= _sfh_key[sizeof (uint16_t)] << 18; \ + hashv += hashv >> 11; \ + break; \ + case 2: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 11; \ + hashv += hashv >> 17; \ + break; \ + case 1: hashv += *_sfh_key; \ + hashv ^= hashv << 10; \ + hashv += hashv >> 1; \ + } \ + \ + /* Force "avalanching" of final 127 bits */ \ + hashv ^= hashv << 3; \ + hashv += hashv >> 5; \ + hashv ^= hashv << 4; \ + hashv += hashv >> 17; \ + hashv ^= hashv << 25; \ + hashv += hashv >> 6; \ + bkt = hashv & (num_bkts-1); \ +} while(0); + +#ifdef HASH_USING_NO_STRICT_ALIASING +/* The MurmurHash exploits some CPU's (e.g. x86) tolerance for unaligned reads. + * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. + * So MurmurHash comes in two versions, the faster unaligned one and the slower + * aligned one. We only use the faster one on CPU's where we know it's safe. + * + * Note the preprocessor built-in defines can be emitted using: + * + * gcc -m64 -dM -E - < /dev/null (on gcc) + * cc -## a.c (where a.c is a simple test file) (Sun Studio) + */ +#if (defined(__i386__) || defined(__x86_64__)) +#define HASH_MUR HASH_MUR_UNALIGNED +#else +#define HASH_MUR HASH_MUR_ALIGNED +#endif + +/* Appleby's MurmurHash fast version for unaligned-tolerant archs like i386 */ +#define HASH_MUR_UNALIGNED(key,keylen,num_bkts,hashv,bkt) \ +do { \ + const unsigned int _mur_m = 0x5bd1e995; \ + const int _mur_r = 24; \ + hashv = 0xcafebabe ^ keylen; \ + char *_mur_key = (char *)(key); \ + uint32_t _mur_tmp, _mur_len = keylen; \ + \ + for (;_mur_len >= 4; _mur_len-=4) { \ + _mur_tmp = *(uint32_t *)_mur_key; \ + _mur_tmp *= _mur_m; \ + _mur_tmp ^= _mur_tmp >> _mur_r; \ + _mur_tmp *= _mur_m; \ + hashv *= _mur_m; \ + hashv ^= _mur_tmp; \ + _mur_key += 4; \ + } \ + \ + switch(_mur_len) \ + { \ + case 3: hashv ^= _mur_key[2] << 16; \ + case 2: hashv ^= _mur_key[1] << 8; \ + case 1: hashv ^= _mur_key[0]; \ + hashv *= _mur_m; \ + }; \ + \ + hashv ^= hashv >> 13; \ + hashv *= _mur_m; \ + hashv ^= hashv >> 15; \ + \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +/* Appleby's MurmurHash version for alignment-sensitive archs like Sparc */ +#define HASH_MUR_ALIGNED(key,keylen,num_bkts,hashv,bkt) \ +do { \ + const unsigned int _mur_m = 0x5bd1e995; \ + const int _mur_r = 24; \ + hashv = 0xcafebabe ^ (keylen); \ + char *_mur_key = (char *)(key); \ + uint32_t _mur_len = keylen; \ + int _mur_align = (int)_mur_key & 3; \ + \ + if (_mur_align && (_mur_len >= 4)) { \ + unsigned _mur_t = 0, _mur_d = 0; \ + switch(_mur_align) { \ + case 1: _mur_t |= _mur_key[2] << 16; \ + case 2: _mur_t |= _mur_key[1] << 8; \ + case 3: _mur_t |= _mur_key[0]; \ + } \ + _mur_t <<= (8 * _mur_align); \ + _mur_key += 4-_mur_align; \ + _mur_len -= 4-_mur_align; \ + int _mur_sl = 8 * (4-_mur_align); \ + int _mur_sr = 8 * _mur_align; \ + \ + for (;_mur_len >= 4; _mur_len-=4) { \ + _mur_d = *(unsigned *)_mur_key; \ + _mur_t = (_mur_t >> _mur_sr) | (_mur_d << _mur_sl); \ + unsigned _mur_k = _mur_t; \ + _mur_k *= _mur_m; \ + _mur_k ^= _mur_k >> _mur_r; \ + _mur_k *= _mur_m; \ + hashv *= _mur_m; \ + hashv ^= _mur_k; \ + _mur_t = _mur_d; \ + _mur_key += 4; \ + } \ + _mur_d = 0; \ + if(_mur_len >= _mur_align) { \ + switch(_mur_align) { \ + case 3: _mur_d |= _mur_key[2] << 16; \ + case 2: _mur_d |= _mur_key[1] << 8; \ + case 1: _mur_d |= _mur_key[0]; \ + } \ + unsigned _mur_k = (_mur_t >> _mur_sr) | (_mur_d << _mur_sl); \ + _mur_k *= _mur_m; \ + _mur_k ^= _mur_k >> _mur_r; \ + _mur_k *= _mur_m; \ + hashv *= _mur_m; \ + hashv ^= _mur_k; \ + _mur_k += _mur_align; \ + _mur_len -= _mur_align; \ + \ + switch(_mur_len) \ + { \ + case 3: hashv ^= _mur_key[2] << 16; \ + case 2: hashv ^= _mur_key[1] << 8; \ + case 1: hashv ^= _mur_key[0]; \ + hashv *= _mur_m; \ + } \ + } else { \ + switch(_mur_len) \ + { \ + case 3: _mur_d ^= _mur_key[2] << 16; \ + case 2: _mur_d ^= _mur_key[1] << 8; \ + case 1: _mur_d ^= _mur_key[0]; \ + case 0: hashv ^= (_mur_t >> _mur_sr) | (_mur_d << _mur_sl); \ + hashv *= _mur_m; \ + } \ + } \ + \ + hashv ^= hashv >> 13; \ + hashv *= _mur_m; \ + hashv ^= hashv >> 15; \ + } else { \ + for (;_mur_len >= 4; _mur_len-=4) { \ + unsigned _mur_k = *(unsigned*)_mur_key; \ + _mur_k *= _mur_m; \ + _mur_k ^= _mur_k >> _mur_r; \ + _mur_k *= _mur_m; \ + hashv *= _mur_m; \ + hashv ^= _mur_k; \ + _mur_key += 4; \ + } \ + switch(_mur_len) \ + { \ + case 3: hashv ^= _mur_key[2] << 16; \ + case 2: hashv ^= _mur_key[1] << 8; \ + case 1: hashv ^= _mur_key[0]; \ + hashv *= _mur_m; \ + } \ + \ + hashv ^= hashv >> 13; \ + hashv *= _mur_m; \ + hashv ^= hashv >> 15; \ + } \ + bkt = hashv & (num_bkts-1); \ +} while(0) +#endif /* HASH_USING_NO_STRICT_ALIASING */ + +/* key comparison function; return 0 if keys equal */ +#define HASH_KEYCMP(a,b,len) memcmp(a,b,len) + +/* iterate over items in a known bucket to find desired item */ +#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \ +do { \ + if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \ + else out=NULL; \ + while (out) { \ + if (out->hh.keylen == keylen_in) { \ + if ((HASH_KEYCMP(out->hh.key,keyptr,keylen_in)) == 0) break; \ + } \ + if (out->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,out->hh.hh_next)); \ + else out = NULL; \ + } \ +} while(0) + +/* add an item to a bucket */ +#define HASH_ADD_TO_BKT(head,addhh) \ +do { \ + head.count++; \ + (addhh)->hh_next = head.hh_head; \ + (addhh)->hh_prev = NULL; \ + if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \ + (head).hh_head=addhh; \ + if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \ + && (addhh)->tbl->noexpand != 1) { \ + HASH_EXPAND_BUCKETS((addhh)->tbl); \ + } \ +} while(0) + +/* remove an item from a given bucket */ +#define HASH_DEL_IN_BKT(hh,head,hh_del) \ + (head).count--; \ + if ((head).hh_head == hh_del) { \ + (head).hh_head = hh_del->hh_next; \ + } \ + if (hh_del->hh_prev) { \ + hh_del->hh_prev->hh_next = hh_del->hh_next; \ + } \ + if (hh_del->hh_next) { \ + hh_del->hh_next->hh_prev = hh_del->hh_prev; \ + } + +/* Bucket expansion has the effect of doubling the number of buckets + * and redistributing the items into the new buckets. Ideally the + * items will distribute more or less evenly into the new buckets + * (the extent to which this is true is a measure of the quality of + * the hash function as it applies to the key domain). + * + * With the items distributed into more buckets, the chain length + * (item count) in each bucket is reduced. Thus by expanding buckets + * the hash keeps a bound on the chain length. This bounded chain + * length is the essence of how a hash provides constant time lookup. + * + * The calculation of tbl->ideal_chain_maxlen below deserves some + * explanation. First, keep in mind that we're calculating the ideal + * maximum chain length based on the *new* (doubled) bucket count. + * In fractions this is just n/b (n=number of items,b=new num buckets). + * Since the ideal chain length is an integer, we want to calculate + * ceil(n/b). We don't depend on floating point arithmetic in this + * hash, so to calculate ceil(n/b) with integers we could write + * + * ceil(n/b) = (n/b) + ((n%b)?1:0) + * + * and in fact a previous version of this hash did just that. + * But now we have improved things a bit by recognizing that b is + * always a power of two. We keep its base 2 log handy (call it lb), + * so now we can write this with a bit shift and logical AND: + * + * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) + * + */ +#define HASH_EXPAND_BUCKETS(tbl) \ +do { \ + unsigned _he_bkt; \ + unsigned _he_bkt_i; \ + struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ + UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ + _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ + 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ + memset(_he_new_buckets, 0, \ + 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + tbl->ideal_chain_maxlen = \ + (tbl->num_items >> (tbl->log2_num_buckets+1)) + \ + ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \ + tbl->nonideal_items = 0; \ + for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ + { \ + _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ + while (_he_thh) { \ + _he_hh_nxt = _he_thh->hh_next; \ + HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \ + _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ + if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ + tbl->nonideal_items++; \ + _he_newbkt->expand_mult = _he_newbkt->count / \ + tbl->ideal_chain_maxlen; \ + } \ + _he_thh->hh_prev = NULL; \ + _he_thh->hh_next = _he_newbkt->hh_head; \ + if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \ + _he_thh; \ + _he_newbkt->hh_head = _he_thh; \ + _he_thh = _he_hh_nxt; \ + } \ + } \ + uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ + tbl->num_buckets *= 2; \ + tbl->log2_num_buckets++; \ + tbl->buckets = _he_new_buckets; \ + tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ + (tbl->ineff_expands+1) : 0; \ + if (tbl->ineff_expands > 1) { \ + tbl->noexpand=1; \ + uthash_noexpand_fyi(tbl); \ + } \ + uthash_expand_fyi(tbl); \ +} while(0) + +/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ +/* Note that HASH_SORT assumes the hash handle name to be hh. + * HASH_SRT was added to allow the hash handle name to be passed in. */ +#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) +#define HASH_SRT(hh,head,cmpfcn) \ +do { \ + unsigned _hs_i; \ + unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ + struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ + if (head) { \ + _hs_insize = 1; \ + _hs_looping = 1; \ + _hs_list = &((head)->hh); \ + while (_hs_looping) { \ + _hs_p = _hs_list; \ + _hs_list = NULL; \ + _hs_tail = NULL; \ + _hs_nmerges = 0; \ + while (_hs_p) { \ + _hs_nmerges++; \ + _hs_q = _hs_p; \ + _hs_psize = 0; \ + for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ + _hs_psize++; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + if (! (_hs_q) ) break; \ + } \ + _hs_qsize = _hs_insize; \ + while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \ + if (_hs_psize == 0) { \ + _hs_e = _hs_q; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_qsize--; \ + } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \ + _hs_e = _hs_p; \ + _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ + ((void*)((char*)(_hs_p->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_psize--; \ + } else if (( \ + cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ + ) <= 0) { \ + _hs_e = _hs_p; \ + _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ + ((void*)((char*)(_hs_p->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_psize--; \ + } else { \ + _hs_e = _hs_q; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_qsize--; \ + } \ + if ( _hs_tail ) { \ + _hs_tail->next = ((_hs_e) ? \ + ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ + } else { \ + _hs_list = _hs_e; \ + } \ + _hs_e->prev = ((_hs_tail) ? \ + ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ + _hs_tail = _hs_e; \ + } \ + _hs_p = _hs_q; \ + } \ + _hs_tail->next = NULL; \ + if ( _hs_nmerges <= 1 ) { \ + _hs_looping=0; \ + (head)->hh.tbl->tail = _hs_tail; \ + DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ + } \ + _hs_insize *= 2; \ + } \ + HASH_FSCK(hh,head); \ + } \ +} while (0) + +/* This function selects items from one hash into another hash. + * The end result is that the selected items have dual presence + * in both hashes. There is no copy of the items made; rather + * they are added into the new hash through a secondary hash + * hash handle that must be present in the structure. */ +#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ +do { \ + unsigned _src_bkt, _dst_bkt; \ + void *_last_elt=NULL, *_elt; \ + UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ + ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ + if (src) { \ + for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ + for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ + _src_hh; \ + _src_hh = _src_hh->hh_next) { \ + _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ + if (cond(_elt)) { \ + _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ + _dst_hh->key = _src_hh->key; \ + _dst_hh->keylen = _src_hh->keylen; \ + _dst_hh->hashv = _src_hh->hashv; \ + _dst_hh->prev = _last_elt; \ + _dst_hh->next = NULL; \ + if (_last_elt_hh) { _last_elt_hh->next = _elt; } \ + if (!dst) { \ + DECLTYPE_ASSIGN(dst,_elt); \ + HASH_MAKE_TABLE(hh_dst,dst); \ + } else { \ + _dst_hh->tbl = (dst)->hh_dst.tbl; \ + } \ + HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ + HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ + (dst)->hh_dst.tbl->num_items++; \ + _last_elt = _elt; \ + _last_elt_hh = _dst_hh; \ + } \ + } \ + } \ + } \ + HASH_FSCK(hh_dst,dst); \ +} while (0) + +#define HASH_CLEAR(hh,head) \ +do { \ + if (head) { \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head)=NULL; \ + } \ +} while(0) + +#ifdef NO_DECLTYPE +#define HASH_ITER(hh,head,el,tmp) \ +for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \ + el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) +#else +#define HASH_ITER(hh,head,el,tmp) \ +for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \ + el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL)) +#endif + +/* obtain a count of items in the hash */ +#define HASH_COUNT(head) HASH_CNT(hh,head) +#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0) + +typedef struct UT_hash_bucket { + struct UT_hash_handle *hh_head; + unsigned count; + + /* expand_mult is normally set to 0. In this situation, the max chain length + * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If + * the bucket's chain exceeds this length, bucket expansion is triggered). + * However, setting expand_mult to a non-zero value delays bucket expansion + * (that would be triggered by additions to this particular bucket) + * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. + * (The multiplier is simply expand_mult+1). The whole idea of this + * multiplier is to reduce bucket expansions, since they are expensive, in + * situations where we know that a particular bucket tends to be overused. + * It is better to let its chain length grow to a longer yet-still-bounded + * value, than to do an O(n) bucket expansion too often. + */ + unsigned expand_mult; + +} UT_hash_bucket; + +/* random signature used only to find hash tables in external analysis */ +#define HASH_SIGNATURE 0xa0111fe1 +#define HASH_BLOOM_SIGNATURE 0xb12220f2 + +typedef struct UT_hash_table { + UT_hash_bucket *buckets; + unsigned num_buckets, log2_num_buckets; + unsigned num_items; + struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ + ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ + + /* in an ideal situation (all buckets used equally), no bucket would have + * more than ceil(#items/#buckets) items. that's the ideal chain length. */ + unsigned ideal_chain_maxlen; + + /* nonideal_items is the number of items in the hash whose chain position + * exceeds the ideal chain maxlen. these items pay the penalty for an uneven + * hash distribution; reaching them in a chain traversal takes >ideal steps */ + unsigned nonideal_items; + + /* ineffective expands occur when a bucket doubling was performed, but + * afterward, more than half the items in the hash had nonideal chain + * positions. If this happens on two consecutive expansions we inhibit any + * further expansion, as it's not helping; this happens when the hash + * function isn't a good fit for the key domain. When expansion is inhibited + * the hash will still work, albeit no longer in constant time. */ + unsigned ineff_expands, noexpand; + + uint32_t signature; /* used only to find hash tables in external analysis */ +#ifdef HASH_BLOOM + uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ + uint8_t *bloom_bv; + char bloom_nbits; +#endif + +} UT_hash_table; + +typedef struct UT_hash_handle { + struct UT_hash_table *tbl; + void *prev; /* prev element in app order */ + void *next; /* next element in app order */ + struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ + struct UT_hash_handle *hh_next; /* next hh in bucket order */ + void *key; /* ptr to enclosing struct's key */ + unsigned keylen; /* enclosing struct's key len */ + unsigned hashv; /* result of hash-fcn(key) */ +} UT_hash_handle; + +#endif // INCLUDED_SAL_ANDROID_UTHASH_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx new file mode 100644 index 000000000..81ddec156 --- /dev/null +++ b/sal/cppunittester/cppunittester.cxx @@ -0,0 +1,632 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifdef _WIN32 +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include +#endif +#if defined(_WIN32) && defined(_DEBUG) +#include +#include +#include +#endif + +#ifdef UNX +#include +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace { + +void usageFailure() { + std::cerr + << ("Usage: cppunittester (--protector " + " )* ") + << std::endl; + std::exit(EXIT_FAILURE); +} + +OUString getArgument(sal_Int32 index) { + OUString arg; + osl_getCommandArg(index, &arg.pData); + return arg; +} + +std::string convertLazy(std::u16string_view s16) { + OString s8(OUStringToOString(s16, osl_getThreadTextEncoding())); + static_assert(sizeof (sal_Int32) <= sizeof (std::string::size_type), "must be at least the same size"); + // ensure following cast is legitimate + return std::string( + s8.getStr(), static_cast< std::string::size_type >(s8.getLength())); +} + +//Output how long each test took +class TimingListener + : public CppUnit::TestListener +{ +public: + TimingListener() + : m_nStartTime(0) + { + } + TimingListener(const TimingListener&) = delete; + TimingListener& operator=(const TimingListener&) = delete; + + void startTest( CppUnit::Test *test) override + { + std::cout << "[_RUN_____] " << test->getName() << std::endl; + m_nStartTime = osl_getGlobalTimer(); + } + + void endTest( CppUnit::Test *test ) override + { + sal_uInt32 nEndTime = osl_getGlobalTimer(); + std::cout << test->getName() << " finished in: " + << nEndTime-m_nStartTime << "ms" << std::endl; + } + +private: + sal_uInt32 m_nStartTime; +}; + +// Setup an env variable so that temp file (or other) can +// have a useful value to identify the source +class EyecatcherListener + : public CppUnit::TestListener +{ +public: + EyecatcherListener() = default; + EyecatcherListener(const EyecatcherListener&) = delete; + EyecatcherListener& operator=(const EyecatcherListener&) = delete; + void startTest( CppUnit::Test* test) override + { + rtl::OStringBuffer tn(test->getName()); + for(int i = 0; i < tn.getLength(); i++) + { + if(!rtl::isAsciiAlphanumeric(static_cast(tn[i]))) + { + tn[i] = '_'; + } + } + tn.append('_'); +#ifdef WIN32 + _putenv_s("LO_TESTNAME", tn.getStr()); +#else + setenv("LO_TESTNAME", tn.getStr(), true); +#endif + } + + void endTest( CppUnit::Test* /* test */ ) override + { + } +}; + +class LogFailuresAsTheyHappen : public CppUnit::TestListener +{ +public: + virtual void addFailure( const CppUnit::TestFailure &failure ) override + { + printFailureLocation( failure.sourceLine() ); + printFailedTestName( failure ); + printFailureMessage( failure ); + } + +private: + static void printFailureLocation( const CppUnit::SourceLine &sourceLine ) + { + if ( !sourceLine.isValid() ) + std::cerr << "unknown:0:"; + else + std::cerr << sourceLine.fileName() << ":" << sourceLine.lineNumber() << ":"; + } + + static void printFailedTestName( const CppUnit::TestFailure &failure ) + { + std::cerr << failure.failedTestName() << std::endl; + } + + static void printFailureMessage( const CppUnit::TestFailure &failure ) + { + std::cerr << failure.thrownException()->message().shortDescription() << std::endl; + std::cerr << failure.thrownException()->message().details() << std::endl; + } +}; + +struct test_name_compare +{ + explicit test_name_compare(std::string aName): + maName(std::move(aName)) + { + } + + bool operator()(const std::string& rCmp) + { + size_t nPos = maName.find(rCmp); + if (nPos == std::string::npos) + return false; + + size_t nEndPos = nPos + rCmp.size(); + return nEndPos == maName.size(); + } + + std::string maName; +}; + +bool addRecursiveTests(const std::vector& test_names, CppUnit::Test* pTest, CppUnit::TestRunner& rRunner) +{ + bool ret(false); + for (int i = 0; i < pTest->getChildTestCount(); ++i) + { + CppUnit::Test* pNewTest = pTest->getChildTestAt(i); + ret |= addRecursiveTests(test_names, pNewTest, rRunner); + if (std::any_of(test_names.begin(), test_names.end(), test_name_compare(pNewTest->getName()))) + { + rRunner.addTest(pNewTest); + ret = true; + } + } + return ret; +} + +//Allow the whole uniting testing framework to be run inside a "Protector" +//which knows about uno exceptions, so it can print the content of the +//exception before falling over and dying +class CPPUNIT_API ProtectedFixtureFunctor + : public CppUnit::Functor +{ +private: + const std::string &testlib; + const std::string &args; + std::vector &protectors; + CppUnit::TestResult &result; +public: + ProtectedFixtureFunctor(const std::string& testlib_, const std::string &args_, std::vector &protectors_, CppUnit::TestResult &result_) + : testlib(testlib_) + , args(args_) + , protectors(protectors_) + , result(result_) + { + } + ProtectedFixtureFunctor(const ProtectedFixtureFunctor&) = delete; + ProtectedFixtureFunctor& operator=(const ProtectedFixtureFunctor&) = delete; + bool run() const + { +#ifdef DISABLE_DYNLOADING + + // NOTE: Running cppunit unit tests on iOS was something I did + // only very early (several years ago) when starting porting + // this stuff to iOS. The complicated mechanisms to do build + // such unit test single executables have surely largely + // bit-rotted or been semi-intentionally broken since. This + // stuff here left for information only. --tml 2014. + + // For iOS cppunit plugins aren't really "plugins" (shared + // libraries), but just static archives. In the real main + // program of a cppunit app, which calls the lo_main() that + // the SAL_IMPLEMENT_MAIN() below expands to, we specifically + // call the initialize methods of the CppUnitTestPlugIns that + // we statically link to the app executable. +#else + // The PlugInManager instance is deliberately leaked, so that the dynamic libraries it loads + // are never unloaded (which could make e.g. pointers from other libraries' static data + // structures to const data in those libraries, like some static OUString cache pointing at + // a const OUStringLiteral, become dangling by the time those static data structures are + // destroyed during exit): + auto manager = new CppUnit::PlugInManager; + try { + manager->load(testlib, args); + } catch (const CppUnit::DynamicLibraryManagerException &e) { + std::cerr << "DynamicLibraryManagerException: \"" << e.what() << "\"\n"; + const char *pPath = getenv ("PATH"); + const size_t nPathLen = pPath ? strlen(pPath) : 0; +#ifdef _WIN32 + if (nPathLen > 256) + { + std::cerr << "Windows has significant build problems with long PATH variables "; + std::cerr << "please check your PATH variable and re-autogen.\n"; + } +#endif + std::cerr << "Path (length: " << nPathLen << ") is '" << pPath << "'\n"; + return false; + } +#endif + + for (size_t i = 0; i < protectors.size(); ++i) + result.pushProtector(protectors[i]); + + bool success; + { + CppUnit::TestResultCollector collector; + result.addListener(&collector); + + LogFailuresAsTheyHappen logger; + result.addListener(&logger); + + TimingListener timer; + result.addListener(&timer); + + EyecatcherListener eye; + result.addListener(&eye); + + // set this to track down files created before first test method + std::string lib = testlib.substr(testlib.rfind('/')+1); +#ifdef WIN32 + _putenv_s("LO_TESTNAME", lib.c_str()); +#else + setenv("LO_TESTNAME", lib.c_str(), true); +#endif + const char* pVal = getenv("CPPUNIT_TEST_NAME"); + + CppUnit::TestRunner runner; + if (pVal) + { + std::vector test_names; + boost::split(test_names, pVal, boost::is_any_of("\t ")); + CppUnit::Test* pTest = CppUnit::TestFactoryRegistry::getRegistry().makeTest(); + bool const added(addRecursiveTests(test_names, pTest, runner)); + if (!added) + { + std::cerr << "\nFatal error: CPPUNIT_TEST_NAME contains no valid tests\n"; + // coverity[leaked_storage] - `manager` leaked on purpose + return false; + } + } + else + { + runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); + } + runner.run(result); + + CppUnit::CompilerOutputter outputter(&collector, CppUnit::stdCErr()); + outputter.setNoWrap(); + outputter.write(); + success = collector.wasSuccessful(); + } + + for (size_t i = 0; i < protectors.size(); ++i) + result.popProtector(); + + return success; + } + virtual bool operator()() const override + { + return run(); + } +}; + +#ifdef UNX + +double get_time(timeval* time) +{ + double nTime = static_cast(time->tv_sec); + nTime += static_cast(time->tv_usec)/1000000.0; + return nTime; +} + +OString generateTestName(std::u16string_view rPath) +{ + size_t nPathSep = rPath.rfind('/'); + std::u16string_view aTestName = rPath.substr(nPathSep+1); + return OUStringToOString(aTestName, RTL_TEXTENCODING_UTF8); +} + +void reportResourceUsage(std::u16string_view rPath) +{ + OUString aFullPath = OUString::Concat(rPath) + ".resource.log"; + rusage resource_usage; + getrusage(RUSAGE_SELF, &resource_usage); + + OString aPath = OUStringToOString(aFullPath, RTL_TEXTENCODING_UTF8); + std::ofstream resource_file(aPath.getStr()); + resource_file << "Name = " << generateTestName(rPath) << std::endl; + double nUserSpace = get_time(&resource_usage.ru_utime); + double nKernelSpace = get_time(&resource_usage.ru_stime); + resource_file << "UserSpace = " << nUserSpace << std::endl; + resource_file << "KernelSpace = " << nKernelSpace << std::endl; +} +#else +void reportResourceUsage([[maybe_unused]] const OUString& /*rPath*/) +{ +} +#endif + +} + +static bool main2() +{ + bool ok = false; + OUString path; + +#ifdef _WIN32 + //Disable Dr-Watson in order to crash simply without popup dialogs under + //windows + DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX); + SetErrorMode(SEM_NOGPFAULTERRORBOX|dwMode); +#ifdef _DEBUG // These functions are present only in the debugging runtime + _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); + _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); + _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); +#endif +#endif + + std::vector protectors; + CppUnit::TestResult result; + std::string args; + std::string testlib; + sal_uInt32 index = 0; + while (index < osl_getCommandArgCount()) + { + OUString arg = getArgument(index); + if (arg.startsWith("-env:CPPUNITTESTTARGET=", &path)) + { + ++index; + continue; + } + if (arg.startsWith("-env:")) + { + ++index; + continue; // ignore it here - will be read later + } + if ( arg != "--protector" ) + { + if (testlib.empty()) + { + testlib = OUStringToOString(arg, osl_getThreadTextEncoding()).getStr(); + args += testlib; + } + else + { + args += ' '; + args += OUStringToOString(arg, osl_getThreadTextEncoding()).getStr(); + } + ++index; + continue; + } + if (osl_getCommandArgCount() - index < 3) { + usageFailure(); + } + OUString lib(getArgument(index + 1)); + OUString sym(getArgument(index + 2)); +#ifndef DISABLE_DYNLOADING + osl::Module mod(lib, SAL_LOADMODULE_GLOBAL); + oslGenericFunction fn = mod.getFunctionSymbol(sym); + mod.release(); +#else + oslGenericFunction fn = 0; + if (sym == "unoexceptionprotector") + fn = (oslGenericFunction) unoexceptionprotector; + else if (sym == "unobootstrapprotector") + fn = (oslGenericFunction) unobootstrapprotector; + else if (sym == "vclbootstrapprotector") + fn = (oslGenericFunction) vclbootstrapprotector; + else + { + std::cerr + << "Only unoexceptionprotector or unobootstrapprotector protectors allowed" + << std::endl; + std::exit(EXIT_FAILURE); + } +#endif + CppUnit::Protector *protector = fn == nullptr + ? nullptr + : (*reinterpret_cast< cppunittester::ProtectorFactory * >(fn))(); + if (protector == nullptr) { + std::cerr + << "Failure instantiating protector \"" << convertLazy(lib) + << "\", \"" << convertLazy(sym) << '"' << std::endl; + std::exit(EXIT_FAILURE); + } + protectors.push_back(protector); + index+=3; + } + + ProtectedFixtureFunctor tests(testlib, args, protectors, result); + ok = tests.run(); + + reportResourceUsage(path); + + return ok; +} + +#if defined(_WIN32) && defined(_DEBUG) + +//Prints stack trace based on exception context record +static void printStack( PCONTEXT ctx ) +{ + HANDLE process = GetCurrentProcess(); + HANDLE thread = GetCurrentThread(); + + STACKFRAME64 stack {}; + stack.AddrPC.Mode = AddrModeFlat; + stack.AddrStack.Mode = AddrModeFlat; + stack.AddrFrame.Mode = AddrModeFlat; +#ifdef _M_AMD64 + stack.AddrPC.Offset = ctx->Rip; + stack.AddrStack.Offset = ctx->Rsp; + stack.AddrFrame.Offset = ctx->Rsp; +#else + stack.AddrPC.Offset = ctx->Eip; + stack.AddrStack.Offset = ctx->Esp; + stack.AddrFrame.Offset = ctx->Ebp; +#endif + + DWORD symOptions = SymGetOptions(); + symOptions |= SYMOPT_LOAD_LINES; + symOptions |= SYMOPT_FAIL_CRITICAL_ERRORS; + symOptions = SymSetOptions(symOptions); + + SymInitialize( process, nullptr, TRUE ); //load symbols + + IMAGEHLP_LINE64 line{}; + line.SizeOfStruct = sizeof(line); + + char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)]; + PSYMBOL_INFO pSymbol = reinterpret_cast(buffer); + + for (;;) + { + //get next call from stack + bool result = StackWalk64 + ( +#ifdef _M_AMD64 + IMAGE_FILE_MACHINE_AMD64, +#else + IMAGE_FILE_MACHINE_I386, +#endif + process, + thread, + &stack, + ctx, + nullptr, + SymFunctionTableAccess64, + SymGetModuleBase64, + nullptr + ); + + if( !result ) + break; + + //get symbol name for address + pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO); + pSymbol->MaxNameLen = MAX_SYM_NAME + 1; + if (SymFromAddr(process, stack.AddrPC.Offset, nullptr, pSymbol)) + printf("\tat %s", pSymbol->Name); + else + printf("\tat unknown (Error in SymFromAddr=%#08lx)", GetLastError()); + + DWORD disp; + //try to get line + if (SymGetLineFromAddr64(process, stack.AddrPC.Offset, &disp, &line)) + { + printf(" in %s: line: %lu:\n", line.FileName, line.LineNumber); + } + else + { + //failed to get line + printf(", address 0x%0I64X", stack.AddrPC.Offset); + HMODULE hModule = nullptr; + GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + reinterpret_cast(stack.AddrPC.Offset), &hModule); + + char sModule[256]; + //at least print module name + if (hModule != nullptr) + GetModuleFileNameA(hModule, sModule, std::size(sModule)); + + printf (" in %s\n", sModule); + } + } +} + +// The exception filter function: +static LONG WINAPI ExpFilter(EXCEPTION_POINTERS* ex) +{ + // we only want this active on the Jenkins tinderboxes + printf("*** Exception 0x%lx occurred ***\n\n",ex->ExceptionRecord->ExceptionCode); + printStack(ex->ContextRecord); + return EXCEPTION_EXECUTE_HANDLER; +} + +static void AbortSignalHandler(int signal) +{ + if (signal == SIGABRT) { + std::unique_ptr bs = sal::backtrace_get(50); + SAL_WARN("sal.cppunittester", "CAUGHT SIGABRT:\n" << sal::backtrace_to_string(bs.get())); + } +} + +SAL_IMPLEMENT_MAIN() +{ + // catch the kind of signal that is thrown when an assert fails, and log a stacktrace + signal(SIGABRT, AbortSignalHandler); + + bool ok = false; + // This magic kind of Windows-specific exception handling has to be in its own function + // because it cannot be in a function that has objects with destructors. + __try + { + ok = main2(); + } + __except (ExpFilter(GetExceptionInformation())) + { + } + return ok ? EXIT_SUCCESS : EXIT_FAILURE; +} + +#else + +SAL_IMPLEMENT_MAIN() +{ + bool ok = false; + try + { + ok = main2(); + } + catch (const std::exception& e) + { + SAL_WARN("vcl.app", "Fatal exception: " << e.what()); + } + return ok ? EXIT_SUCCESS : EXIT_FAILURE; +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/backtraceasstring.hxx b/sal/inc/backtraceasstring.hxx new file mode 100644 index 000000000..e857ea476 --- /dev/null +++ b/sal/inc/backtraceasstring.hxx @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_INC_BACKTRACEASSTRING_HXX +#define INCLUDED_SAL_INC_BACKTRACEASSTRING_HXX + +#include + +#include +#include + +namespace osl::detail +{ +/// Build a debugging backtrace from current PC location. +OUString backtraceAsString(sal_uInt32 maxDepth); +} + +#endif // INCLUDED_SAL_INC_INTERNAL_MISC_H diff --git a/sal/inc/oslmemory.h b/sal/inc/oslmemory.h new file mode 100644 index 000000000..de99e9851 --- /dev/null +++ b/sal/inc/oslmemory.h @@ -0,0 +1,30 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_INC_INTERNAL_OSLMEMORY_H +#define INCLUDED_SAL_INC_INTERNAL_OSLMEMORY_H + +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +void* osl_aligned_alloc(sal_Size align, sal_Size size); + +void osl_aligned_free(void* p); + +#if defined __cplusplus +} +#endif + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/oslrandom.h b/sal/inc/oslrandom.h new file mode 100644 index 000000000..305eaf937 --- /dev/null +++ b/sal/inc/oslrandom.h @@ -0,0 +1,25 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_INC_INTERNAL_OSLRANDOM_H +#define INCLUDED_SAL_INC_INTERNAL_OSLRANDOM_H + +#if defined __cplusplus +extern "C" { +#endif + +int osl_get_system_random_data(char* buffer, size_t desired_len); + +#if defined __cplusplus +} +#endif + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/oslsocket.hxx b/sal/inc/oslsocket.hxx new file mode 100644 index 000000000..52260c263 --- /dev/null +++ b/sal/inc/oslsocket.hxx @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include +#include + +/** Retrieve this machines hostname as fully qualified domain name (FQDN). + Note that this might be slower than calling osl_getLocalHostname + since DNS needs to be queried to determine the FQDN. + @param strLocalHostname out-parameter. The string that receives the local host name. + @retval sal_True upon success + @retval sal_False +*/ +oslSocketResult osl_getLocalHostnameFQDN(rtl_uString** strLocalHostname); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ \ No newline at end of file diff --git a/sal/inc/pch/precompiled_sal.cxx b/sal/inc/pch/precompiled_sal.cxx new file mode 100644 index 000000000..5386a69d7 --- /dev/null +++ b/sal/inc/pch/precompiled_sal.cxx @@ -0,0 +1,12 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "precompiled_sal.hxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/pch/precompiled_sal.hxx b/sal/inc/pch/precompiled_sal.hxx new file mode 100644 index 000000000..006c691a3 --- /dev/null +++ b/sal/inc/pch/precompiled_sal.hxx @@ -0,0 +1,113 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +/* + This file has been autogenerated by update_pch.sh. It is possible to edit it + manually (such as when an include file has been moved/renamed/removed). All such + manual changes will be rewritten by the next run of update_pch.sh (which presumably + also fixes all possible problems, so it's usually better to use it). + + Generated on 2021-03-08 13:14:16 using: + ./bin/update_pch sal sal --cutoff=2 --exclude:system --exclude:module --include:local + + If after updating build fails, use the following command to locate conflicting headers: + ./bin/update_pch_bisect ./sal/inc/pch/precompiled_sal.hxx "make sal.build" --find-conflicts +*/ + +#if defined(_WIN32) +#define _CRT_RAND_S +#endif + +#include +#if PCH_LEVEL >= 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif // PCH_LEVEL >= 1 +#if PCH_LEVEL >= 2 +#endif // PCH_LEVEL >= 2 +#if PCH_LEVEL >= 3 +#include +#endif // PCH_LEVEL >= 3 +#if PCH_LEVEL >= 4 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif // PCH_LEVEL >= 4 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/rtllifecycle.h b/sal/inc/rtllifecycle.h new file mode 100644 index 000000000..44af09e58 --- /dev/null +++ b/sal/inc/rtllifecycle.h @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_INC_INTERNAL_RTLLIFECYCLE_H +#define INCLUDED_SAL_INC_INTERNAL_RTLLIFECYCLE_H + +#if defined __cplusplus +extern "C" { +#endif + +void rtl_arena_init(void); + +void rtl_arena_fini(void); + +void ensureArenaSingleton(void); + +void rtl_cache_init(void); + +void rtl_cache_fini(void); + +void ensureCacheSingleton(void); + +void rtl_locale_init(void); + +void rtl_locale_fini(void); + +void ensureLocaleSingleton(void); + +#if defined __cplusplus +} +#endif + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/inc/salusesyslog.hxx b/sal/inc/salusesyslog.hxx new file mode 100644 index 000000000..ae1c14a88 --- /dev/null +++ b/sal/inc/salusesyslog.hxx @@ -0,0 +1,23 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_INC_SALUSESYSLOG_HXX +#define INCLUDED_SAL_INC_SALUSESYSLOG_HXX + +#include + +#include + +#if HAVE_SYSLOG_H +extern bool sal_use_syslog; +#endif + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/inc/signalshared.hxx b/sal/inc/signalshared.hxx new file mode 100644 index 000000000..10bc0f57b --- /dev/null +++ b/sal/inc/signalshared.hxx @@ -0,0 +1,39 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef INCLUDED_SAL_INC_INTERNAL_SIGNALSHARED_HXX +#define INCLUDED_SAL_INC_INTERNAL_SIGNALSHARED_HXX + +#include +#include + +struct oslSignalHandlerImpl +{ + oslSignalHandlerFunction Handler; + void* pData; + oslSignalHandlerImpl* pNext; +}; + +oslSignalAction callSignalHandler(oslSignalInfo* pInfo); + +// platform-specific functions that need to be implemented +bool onInitSignal(); +bool onDeInitSignal(); + +#endif + diff --git a/sal/inc/uri_internal.hxx b/sal/inc/uri_internal.hxx new file mode 100644 index 000000000..0ec0650ca --- /dev/null +++ b/sal/inc/uri_internal.hxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_INC_URI_INTERNAL_HXX +#define INCLUDED_SAL_INC_URI_INTERNAL_HXX + +#include + +namespace rtl::uri::detail +{ +enum EscapeType +{ + EscapeNo, + EscapeChar, + EscapeOctet +}; + +sal_uInt32 readUcs4(sal_Unicode const** pBegin, sal_Unicode const* pEnd, bool bEncoded, + rtl_TextEncoding eCharset, EscapeType* pType); +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/all/compat.cxx b/sal/osl/all/compat.cxx new file mode 100644 index 000000000..8fafc628b --- /dev/null +++ b/sal/osl/all/compat.cxx @@ -0,0 +1,197 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include +#include +#include +#include +#include + +// Stubs for removed functionality, to be killed when we bump sal SONAME + +extern "C" { + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_acquireSemaphore(void *) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC void SAL_CALL osl_addToSocketSet(void *, oslSocket) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT int SAL_CALL osl_areCommandArgsSet() { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_assertFailedLine( + char const *, sal_Int32, char const *) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_breakDebug() { + std::abort(); +} + +SAL_DLLPUBLIC void SAL_CALL osl_clearSocketSet(void *) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void * SAL_CALL osl_createSemaphore(sal_uInt32) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC void * SAL_CALL osl_createSocketSet() { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_demultiplexSocketEvents( + void *, void *, void *, TimeValue const *) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_destroySemaphore(void *) { + std::abort(); +} + +SAL_DLLPUBLIC void SAL_CALL osl_destroySocketSet(void *) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_getEthernetAddress(sal_uInt8 *) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isInSocketSet(void *, oslSocket) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT oslSocket SAL_CALL osl_receiveResourcePipe(oslPipe) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_releaseSemaphore(void *) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL osl_reportError( + sal_uInt32, char const *) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC void SAL_CALL osl_removeFromSocketSet(void *, oslSocket) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_sendResourcePipe(oslPipe, oslSocket) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +namespace { +typedef void (* pfunc_osl_printDebugMessage)(char const *); +} +SAL_DLLPUBLIC_EXPORT pfunc_osl_printDebugMessage SAL_CALL +osl_setDebugMessageFunc(pfunc_osl_printDebugMessage) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +namespace { +typedef void (* pfunc_osl_printDetailedDebugMessage)( + char const *, sal_Int32, char const *); +} +SAL_DLLPUBLIC_EXPORT pfunc_osl_printDetailedDebugMessage SAL_CALL +osl_setDetailedDebugMessageFunc(pfunc_osl_printDetailedDebugMessage) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL osl_trace(char const *, ...) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL osl_tryToAcquireSemaphore(void *) { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL rtl_addUnloadingListener( + void (SAL_CALL *)(void *), void *) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT sal_Int32 SAL_CALL rtl_compareMemory( + void const *, void const *, sal_Size) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_copyMemory( + void *, void const *, sal_Size) +{ + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_fillMemory(void *, sal_Size, sal_uInt8) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void * SAL_CALL rtl_findInMemory( + void const *, sal_uInt8, sal_Size) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_moveMemory( + void *, void const *, sal_Size) +{ + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL rtl_registerModuleForUnloading(oslModule) +{ + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_removeUnloadingListener(sal_Int32) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_unloadUnusedModules(TimeValue *) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_unregisterModuleForUnloading(oslModule) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_zeroMemory(void *, sal_Size) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_logfile_trace( const char*, ... ) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT void SAL_CALL rtl_logfile_longTrace(char const *, ...) { + std::abort(); +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL rtl_logfile_hasLogFile() { + for (;;) { std::abort(); } // avoid "must return a value" warnings +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/debugbase.cxx b/sal/osl/all/debugbase.cxx new file mode 100644 index 000000000..59848a883 --- /dev/null +++ b/sal/osl/all/debugbase.cxx @@ -0,0 +1,145 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace { + +struct StaticDebugBaseAddressFilter + : rtl::StaticWithInit, StaticDebugBaseAddressFilter> { + std::vector operator()() const { + std::vector vec; + rtl_uString * pStr = nullptr; + OUString const name( + "OSL_DEBUGBASE_STORE_ADDRESSES" ); + if (osl_getEnvironment( name.pData, &pStr ) == osl_Process_E_None) { + OUString const str(pStr); + rtl_uString_release(pStr); + sal_Int32 nIndex = 0; + do { + vec.push_back( OUStringToOString( + o3tl::getToken(str, 0, ';', nIndex ), + RTL_TEXTENCODING_ASCII_US ) ); + } + while (nIndex >= 0); + } + return vec; + } +}; + +bool isSubStr( char const* pStr, OString const& subStr ) +{ + return rtl_str_indexOfStr( pStr, subStr.getStr() ) >= 0; +} + +} // anon namespace + +extern "C" { + +// These functions presumably should not be extern "C", but changing +// that would break binary compatibility. +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +#endif + +osl::Mutex & SAL_CALL osl_detail_ObjectRegistry_getMutex() + SAL_THROW_EXTERN_C() +{ + static osl::Mutex aMutex; + return aMutex; +} +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +bool SAL_CALL osl_detail_ObjectRegistry_storeAddresses( char const* pName ) + SAL_THROW_EXTERN_C() +{ + std::vector const& rVec = StaticDebugBaseAddressFilter::get(); + if (rVec.empty()) + return false; + // check for "all": + OString const& rFirst = rVec[0]; + if ( rFirst == "all" ) + return true; + auto const iEnd( rVec.cend() ); + return std::any_of( rVec.begin(), iEnd, + [pName] (OString const& it) { return isSubStr(pName, it); }); +} + +bool SAL_CALL osl_detail_ObjectRegistry_checkObjectCount( + osl::detail::ObjectRegistryData const& rData, std::size_t nExpected ) + SAL_THROW_EXTERN_C() +{ + std::size_t nSize; + if (rData.m_bStoreAddresses) + nSize = rData.m_addresses.size(); + else + nSize = static_cast(rData.m_nCount); + + bool const bRet = (nSize == nExpected); + SAL_WARN_IF( + !bRet, "sal.osl", + "unexpected number of " << rData.m_pName << ": " << nSize + << "; Expected: " << nExpected); + return bRet; +} + +void SAL_CALL osl_detail_ObjectRegistry_registerObject( + osl::detail::ObjectRegistryData & rData, void const* pObj ) + SAL_THROW_EXTERN_C() +{ + if (rData.m_bStoreAddresses) { + osl::MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() ); + std::pair const insertion( + rData.m_addresses.insert(pObj) ); + SAL_WARN_IF(!insertion.second, "sal.osl", "insertion failed!?"); + } + else { + osl_atomic_increment(&rData.m_nCount); + } +} + +void SAL_CALL osl_detail_ObjectRegistry_revokeObject( + osl::detail::ObjectRegistryData & rData, void const* pObj ) + SAL_THROW_EXTERN_C() +{ + if (rData.m_bStoreAddresses) { + osl::MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() ); + std::size_t const n = rData.m_addresses.erase(pObj); + SAL_WARN_IF(n != 1, "sal.osl", "erased more than 1 entry!?"); + } + else { + osl_atomic_decrement(&rData.m_nCount); + } +} + +} // extern "C" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/filepath.cxx b/sal/osl/all/filepath.cxx new file mode 100644 index 000000000..afba01739 --- /dev/null +++ b/sal/osl/all/filepath.cxx @@ -0,0 +1,113 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +static sal_uInt32 osl_defCalcTextWidth( rtl_uString *ustrText ) +{ + return ustrText ? ustrText->length : 0; +} + +oslFileError SAL_CALL osl_abbreviateSystemPath( rtl_uString *ustrSystemPath, rtl_uString **pustrCompacted, sal_uInt32 uMaxWidth, oslCalcTextWidthFunc pfnCalcWidth ) +{ + rtl_uString *ustrPath = nullptr; + rtl_uString *ustrFile = nullptr; + sal_uInt32 uPathWidth, uFileWidth; + + if ( !pfnCalcWidth ) + pfnCalcWidth = osl_defCalcTextWidth; + + { + sal_Int32 iLastSlash = rtl_ustr_lastIndexOfChar_WithLength( ustrSystemPath->buffer, ustrSystemPath->length, SAL_PATHDELIMITER ); + + if ( iLastSlash >= 0 ) + { + rtl_uString_newFromStr_WithLength( &ustrPath, ustrSystemPath->buffer, iLastSlash ); + rtl_uString_newFromStr_WithLength( &ustrFile, &ustrSystemPath->buffer[iLastSlash], ustrSystemPath->length - iLastSlash ); + } + else + { + rtl_uString_new( &ustrPath ); + rtl_uString_newFromString( &ustrFile, ustrSystemPath ); + } + } + + assert(ustrPath && ustrFile); + + uPathWidth = pfnCalcWidth( ustrPath ); + uFileWidth = pfnCalcWidth( ustrFile ); + + /* First abbreviate the directory component of the path */ + + while ( uPathWidth + uFileWidth > uMaxWidth ) + { + if ( ustrPath->length > 3 ) + { + ustrPath->length--; + ustrPath->buffer[ustrPath->length-3] = '.'; + ustrPath->buffer[ustrPath->length-2] = '.'; + ustrPath->buffer[ustrPath->length-1] = '.'; + ustrPath->buffer[ustrPath->length] = 0; + + uPathWidth = pfnCalcWidth( ustrPath ); + } + else + break; + } + + /* Now abbreviate file component */ + + while ( uPathWidth + uFileWidth > uMaxWidth ) + { + if ( ustrFile->length > 4 ) + { + ustrFile->length--; + ustrFile->buffer[ustrFile->length-3] = '.'; + ustrFile->buffer[ustrFile->length-2] = '.'; + ustrFile->buffer[ustrFile->length-1] = '.'; + ustrFile->buffer[ustrFile->length] = 0; + + uFileWidth = pfnCalcWidth( ustrFile ); + } + else + break; + } + + rtl_uString_newConcat( pustrCompacted, ustrPath, ustrFile ); + + /* Event now if path was compacted to ".../..." it can be too large */ + + uPathWidth += uFileWidth; + + while ( uPathWidth > uMaxWidth ) + { + (*pustrCompacted)->length--; + (*pustrCompacted)->buffer[(*pustrCompacted)->length] = 0; + uPathWidth = pfnCalcWidth( *pustrCompacted ); + } + + rtl_uString_release(ustrPath); + rtl_uString_release(ustrFile); + + return osl_File_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/loadmodulerelative.cxx b/sal/osl/all/loadmodulerelative.cxx new file mode 100644 index 000000000..242bb6210 --- /dev/null +++ b/sal/osl/all/loadmodulerelative.cxx @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +extern "C" { + +#ifndef DISABLE_DYNLOADING + +oslModule SAL_CALL osl_loadModuleRelative( + oslGenericFunction const baseModule, rtl_uString * const relativePath, + sal_Int32 const mode) +{ + OUString base; + if (!osl::Module::getUrlFromAddress(baseModule, base)) { + SAL_INFO("sal.osl","osl::Module::getUrlFromAddress failed"); + return nullptr; + } + OUString abs; + try { + abs = rtl::Uri::convertRelToAbs(base, relativePath); + } catch (const rtl::MalformedUriException & e) { + SAL_INFO("sal.osl", "rtl::MalformedUriException <" << e.getMessage() << ">"); + return nullptr; + } + return osl_loadModule(abs.pData, mode); +} + +#endif // !DISABLE_DYNLOADING + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/log.cxx b/sal/osl/all/log.cxx new file mode 100644 index 000000000..405d5599c --- /dev/null +++ b/sal/osl/all/log.cxx @@ -0,0 +1,477 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined ANDROID +#include +#elif defined _WIN32 +#include +#include +#define OSL_DETAIL_GETPID _getpid() +#else +#include +#define OSL_DETAIL_GETPID getpid() +#endif + +#if HAVE_SYSLOG_H +#include +// sal/osl/unx/salinit.cxx::sal_detail_initialize updates this: +bool sal_use_syslog; +#else +bool const sal_use_syslog = false; +#endif + +// Avoid the use of other sal code in this file as much as possible, so that +// this code can be called from other sal code without causing endless +// recursion. + +namespace { + +struct TimeContainer +{ + TimeValue aTime; + TimeContainer() + { + osl_getSystemTime(&aTime); + } +}; + +TimeContainer aStartTime; + +bool equalStrings( + char const * string1, std::size_t length1, char const * string2, + std::size_t length2) +{ + return length1 == length2 && std::memcmp(string1, string2, length1) == 0; +} + +#if !defined ANDROID +char const * toString(sal_detail_LogLevel level) { + switch (level) { + case SAL_DETAIL_LOG_LEVEL_INFO: + return "info"; + case SAL_DETAIL_LOG_LEVEL_WARN: + return "warn"; + case SAL_DETAIL_LOG_LEVEL_DEBUG: + return "debug"; + default: + assert(false); // this cannot happen + return "broken"; + } +} +#endif + +#ifdef _WIN32 + +char const* setEnvFromLoggingIniFile(const char* env, const char* key) +{ + char const* sResult = nullptr; + wchar_t buffer[MAX_PATH]; + GetModuleFileNameW(nullptr, buffer, MAX_PATH); + std::wstring sProgramDirectory(buffer); + std::wstring::size_type pos = sProgramDirectory.find_last_of(L"\\/"); + sProgramDirectory = sProgramDirectory.substr(0, pos+1); + sProgramDirectory += L"logging.ini"; + + std::ifstream logFileStream(sProgramDirectory); + if (!logFileStream.good()) + return sResult; + + std::size_t n; + std::string aKey; + std::string sWantedKey(key); + std::string sLine; + while (std::getline(logFileStream, sLine)) { + if (sLine.find('#') == 0) + continue; + if ( ( n = sLine.find('=') ) != std::string::npos) { + aKey = sLine.substr(0, n); + if (aKey != sWantedKey) + continue; + _putenv_s(env, sLine.substr(n+1, sLine.length()).c_str()); + sResult = std::getenv(env); + break; + } + } + return sResult; +} +#endif + +char const* pLogSelector = nullptr; + +char const* getLogLevelEnvVar() { + static char const* const pLevel = [] { + char const* pResult = nullptr; + + // First check the environment variable, then the setting in logging.ini + char const* env = std::getenv("SAL_LOG"); + +#ifdef _WIN32 + if (!env) + env = setEnvFromLoggingIniFile("SAL_LOG", "LogLevel"); +#endif + + if (env) + { + // Make a copy from the string in environment block + static std::string sLevel(env); + pResult = sLevel.c_str(); + } + return pResult; + }(); + + return pLevel; +} + +#if !defined ANDROID + +std::ofstream * getLogFile() { + static std::ofstream* const pFile = [] { + std::ofstream* pResult = nullptr; + + // First check the environment variable, then the setting in logging.ini + char const* logFile = std::getenv("SAL_LOG_FILE"); + +#ifdef _WIN32 + if (!logFile) + logFile = setEnvFromLoggingIniFile("SAL_LOG_FILE", "LogFilePath"); +#endif + + if (logFile) + { + // stays until process exits + static std::ofstream file(logFile, std::ios::app | std::ios::out); + pResult = &file; + } + + return pResult; + }(); + + return pFile; +} + + +std::pair getTimestampFlags(char const *selector) +{ + bool outputTimestamp = false; + bool outputRelativeTimer = false; + for (char const* p = selector; p && *p;) + { + if (*p++ == '+') + { + char const * p1 = p; + while (*p1 != '.' && *p1 != '+' && *p1 != '-' && *p1 != '\0') { + ++p1; + } + if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("TIMESTAMP"))) + outputTimestamp = true; + else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("RELATIVETIMER"))) + outputRelativeTimer = true; + char const * p2 = p1; + while (*p2 != '+' && *p2 != '-' && *p2 != '\0') { + ++p2; + } + p = p2; + } + } + return std::pair(outputTimestamp, outputRelativeTimer); +} + +void maybeOutputTimestamp(std::ostringstream &s) { + static const std::pair aEnvFlags = getTimestampFlags(getLogLevelEnvVar()); + const auto& [outputTimestamp, outputRelativeTimer] = (pLogSelector == nullptr ? aEnvFlags : getTimestampFlags(pLogSelector)); + + if (outputTimestamp) + { + char ts[100]; + TimeValue systemTime; + osl_getSystemTime(&systemTime); + TimeValue localTime; + osl_getLocalTimeFromSystemTime(&systemTime, &localTime); + oslDateTime dateTime; + osl_getDateTimeFromTimeValue(&localTime, &dateTime); + struct tm tm; + tm.tm_sec = dateTime.Seconds; + tm.tm_min = dateTime.Minutes; + tm.tm_hour = dateTime.Hours; + tm.tm_mday = dateTime.Day; + tm.tm_wday = dateTime.DayOfWeek; + tm.tm_mon = dateTime.Month - 1; + tm.tm_year = dateTime.Year - 1900; + tm.tm_yday = 0; + strftime(ts, sizeof(ts), "%Y-%m-%d:%H:%M:%S", &tm); + char milliSecs[11]; + snprintf(milliSecs, sizeof(milliSecs), "%03u", + static_cast(dateTime.NanoSeconds / 1000000)); + s << ts << '.' << milliSecs << ':'; + } + if (!outputRelativeTimer) + return; + + TimeValue now; + osl_getSystemTime(&now); + int seconds = now.Seconds - aStartTime.aTime.Seconds; + int milliSeconds; + if (now.Nanosec < aStartTime.aTime.Nanosec) + { + seconds--; + milliSeconds = 1000 - (aStartTime.aTime.Nanosec - now.Nanosec) / 1000000; + } + else + milliSeconds = (now.Nanosec - aStartTime.aTime.Nanosec) / 1000000; + char relativeTimestamp[100]; + snprintf(relativeTimestamp, sizeof(relativeTimestamp), "%d.%03d", seconds, milliSeconds); + s << relativeTimestamp << ':'; +} + +#endif + +} + +void sal_detail_log( + sal_detail_LogLevel level, char const * area, char const * where, + char const * message, sal_uInt32 backtraceDepth) +{ + std::ostringstream s; +#if !defined ANDROID + // On Android, the area will be used as the "tag," and log info already + // contains timestamp and PID. + if (!sal_use_syslog) { + maybeOutputTimestamp(s); + s << toString(level) << ':'; + } + if (level != SAL_DETAIL_LOG_LEVEL_DEBUG) { + s << area << ':'; + } + s << OSL_DETAIL_GETPID << ':'; +#endif + s << osl::Thread::getCurrentIdentifier() << ':'; + if (level == SAL_DETAIL_LOG_LEVEL_DEBUG) { + s << ' '; + } else { + const size_t nStrLen(std::strlen(SRCDIR "/")); + s << (where + + (std::strncmp(where, SRCDIR "/", nStrLen) == 0 + ? nStrLen : 0)); + } + s << message; + if (backtraceDepth != 0) { + s << " at:\n" << osl::detail::backtraceAsString(backtraceDepth); + } + +#if defined ANDROID + int android_log_level; + switch (level) { + case SAL_DETAIL_LOG_LEVEL_INFO: + android_log_level = ANDROID_LOG_INFO; + break; + case SAL_DETAIL_LOG_LEVEL_WARN: + android_log_level = ANDROID_LOG_WARN; + break; + case SAL_DETAIL_LOG_LEVEL_DEBUG: + android_log_level = ANDROID_LOG_DEBUG; + break; + default: + android_log_level = ANDROID_LOG_INFO; + break; + } + __android_log_print( + android_log_level, area == 0 ? "LibreOffice" : area, "%s", + s.str().c_str()); +#else + if (sal_use_syslog) { +#if HAVE_SYSLOG_H + int prio; + switch (level) { + case SAL_DETAIL_LOG_LEVEL_INFO: + prio = LOG_INFO; + break; + case SAL_DETAIL_LOG_LEVEL_WARN: + prio = LOG_WARNING; + break; + case SAL_DETAIL_LOG_LEVEL_DEBUG: + prio = LOG_DEBUG; + break; + default: + assert(false); // this cannot happen + prio = LOG_WARNING; + } + syslog(prio, "%s", s.str().c_str()); +#endif + } else { + // avoid calling getLogFile() more than once + static std::ofstream * logFile = getLogFile(); + if (logFile) { + *logFile << s.str() << std::endl; + } + else { + s << '\n'; +#ifdef _WIN32 + // write to Windows debugger console, too + OutputDebugStringA(s.str().c_str()); +#endif + std::fputs(s.str().c_str(), stderr); + std::fflush(stderr); + } + } +#endif +} + +void sal_detail_set_log_selector(char const *logSelector) +{ + pLogSelector = logSelector; +} + +void sal_detail_logFormat( + sal_detail_LogLevel level, char const * area, char const * where, + char const * format, ...) +{ + const sal_detail_LogAction eAction + = static_cast(sal_detail_log_report(level, area)); + if (eAction == SAL_DETAIL_LOG_ACTION_IGNORE) + return; + + std::va_list args; + va_start(args, format); + char buf[1024]; + int const len = sizeof buf - RTL_CONSTASCII_LENGTH("..."); + int n = vsnprintf(buf, len, format, args); + if (n < 0) { + std::strcpy(buf, "???"); + } else if (n >= len) { + std::strcpy(buf + len - 1, "..."); + } + sal_detail_log(level, area, where, buf, 0); + va_end(args); + + if (eAction == SAL_DETAIL_LOG_ACTION_FATAL) + std::abort(); +} + +unsigned char sal_detail_log_report(sal_detail_LogLevel level, char const * area) +{ + if (level == SAL_DETAIL_LOG_LEVEL_DEBUG) { + return SAL_DETAIL_LOG_ACTION_LOG; + } + assert(area != nullptr); + static char const* const envEnv = [] { + char const* pResult = getLogLevelEnvVar(); + if (!pResult) + pResult = "+WARN"; + return pResult; + }(); + char const* const env = (pLogSelector == nullptr ? envEnv : pLogSelector); + std::size_t areaLen = std::strlen(area); + enum Sense { POSITIVE = 0, NEGATIVE = 1 }; + std::size_t senseLen[2] = { 0, 1 }; + // initial senseLen[POSITIVE] < senseLen[NEGATIVE], so that if there are + // no matching switches at all, the result will be negative (and + // initializing with 1 is safe as the length of a valid switch, even + // without the "+"/"-" prefix, will always be > 1) + bool senseFatal[2] = { false, false }; + bool seenWarn = false; + bool bFlagFatal = false; + for (char const * p = env;;) { + Sense sense; + switch (*p++) { + case '\0': + { + if (level == SAL_DETAIL_LOG_LEVEL_WARN && !seenWarn) + return sal_detail_log_report(SAL_DETAIL_LOG_LEVEL_INFO, area); + + sal_detail_LogAction eAction = SAL_DETAIL_LOG_ACTION_IGNORE; + // if a specific item is positive and negative (==), default to positive + if (senseLen[POSITIVE] >= senseLen[NEGATIVE]) + { + if (senseFatal[POSITIVE]) eAction = SAL_DETAIL_LOG_ACTION_FATAL; + else eAction = SAL_DETAIL_LOG_ACTION_LOG; + } + return eAction; + } + case '+': + sense = POSITIVE; + break; + case '-': + sense = NEGATIVE; + break; + default: + return SAL_DETAIL_LOG_ACTION_LOG; // upon an illegal SAL_LOG value, enable everything + } + char const * p1 = p; + while (*p1 != '.' && *p1 != '+' && *p1 != '-' && *p1 != '\0') { + ++p1; + } + bool match; + if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("INFO"))) { + match = level == SAL_DETAIL_LOG_LEVEL_INFO; + } else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("WARN"))) + { + match = level == SAL_DETAIL_LOG_LEVEL_WARN; + seenWarn = true; + } else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("FATAL"))) + { + bFlagFatal = (sense == POSITIVE); + match = false; + } else if (equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("TIMESTAMP")) || + equalStrings(p, p1 - p, RTL_CONSTASCII_STRINGPARAM("RELATIVETIMER"))) + { + // handled later + match = false; + } else { + return SAL_DETAIL_LOG_ACTION_LOG; + // upon an illegal SAL_LOG value, everything is considered + // positive + } + char const * p2 = p1; + while (*p2 != '+' && *p2 != '-' && *p2 != '\0') { + ++p2; + } + if (match) { + if (*p1 == '.') { + ++p1; + std::size_t n = p2 - p1; + if ((n == areaLen && equalStrings(p1, n, area, areaLen)) + || (n < areaLen && area[n] == '.' + && equalStrings(p1, n, area, n))) + { + senseLen[sense] = p2 - p; + senseFatal[sense] = bFlagFatal; + } + } else { + senseLen[sense] = p1 - p; + senseFatal[sense] = bFlagFatal; + } + } + p = p2; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/mutexshared.cxx b/sal/osl/all/mutexshared.cxx new file mode 100644 index 000000000..3de7f9930 --- /dev/null +++ b/sal/osl/all/mutexshared.cxx @@ -0,0 +1,20 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +oslMutex* SAL_CALL osl_getGlobalMutex() +{ + static osl::Mutex g_Mutex; + return &g_Mutex.mutex; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/all/signalshared.cxx b/sal/osl/all/signalshared.cxx new file mode 100644 index 000000000..530413f26 --- /dev/null +++ b/sal/osl/all/signalshared.cxx @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include + +#include +#include + +namespace +{ +oslSignalHandlerImpl* SignalList; +bool bInitSignal = false; + +std::mutex& getSignalMutex() +{ + static std::mutex aMutex; + return aMutex; +} +} + +oslSignalAction callSignalHandler(oslSignalInfo* pInfo) +{ + oslSignalHandlerImpl* pHandler = SignalList; + oslSignalAction Action = osl_Signal_ActCallNextHdl; + + while (pHandler) + { + if ((Action = pHandler->Handler(pHandler->pData, pInfo)) != osl_Signal_ActCallNextHdl) + break; + + pHandler = pHandler->pNext; + } + + return Action; +} + +oslSignalHandler SAL_CALL osl_addSignalHandler(oslSignalHandlerFunction handler, void* pData) +{ + if (!handler) + return nullptr; + + oslSignalHandlerImpl* pHandler + = static_cast(calloc(1, sizeof(oslSignalHandlerImpl))); + + std::scoped_lock aGuard(getSignalMutex()); + + if (!bInitSignal) + bInitSignal = onInitSignal(); + + if (pHandler) + { + pHandler->Handler = handler; + pHandler->pData = pData; + + pHandler->pNext = SignalList; + SignalList = pHandler; + + return pHandler; + } + + return nullptr; +} + +sal_Bool SAL_CALL osl_removeSignalHandler(oslSignalHandler handler) +{ + std::scoped_lock aGuard(getSignalMutex()); + + if (!bInitSignal) + bInitSignal = onInitSignal(); + + oslSignalHandlerImpl* pHandler = SignalList; + oslSignalHandlerImpl* pPrevious = nullptr; + + while (pHandler) + { + if (pHandler == handler) + { + if (pPrevious) + pPrevious->pNext = pHandler->pNext; + else + SignalList = pHandler->pNext; + + if (SignalList == nullptr) + bInitSignal = onDeInitSignal(); + + free(pHandler); + + return true; + } + + pPrevious = pHandler; + pHandler = pHandler->pNext; + } + + return false; +} + +oslSignalAction SAL_CALL osl_raiseSignal(sal_Int32 userSignal, void* userData) +{ + std::scoped_lock aGuard(getSignalMutex()); + + if (!bInitSignal) + bInitSignal = onInitSignal(); + + oslSignalInfo info; + info.Signal = osl_Signal_User; + info.UserSignal = userSignal; + info.UserData = userData; + + oslSignalAction action = callSignalHandler(&info); + + return action; +} + +sal_Bool SAL_CALL osl_setErrorReporting(sal_Bool /*bEnable*/) +{ + // this is part of the stable API + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/all/utility.cxx b/sal/osl/all/utility.cxx new file mode 100644 index 000000000..e22bdd3de --- /dev/null +++ b/sal/osl/all/utility.cxx @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +/* + * mfe : maybe it would be wishful to include initialization + * of the global timer in dllmain or _init directly. + * But nonetheless this (should) work too. + */ +namespace osl +{ + +namespace { + +class OGlobalTimer +{ + +public: + + OGlobalTimer() { + osl_getGlobalTimer(); + } + +}; + +} + +static OGlobalTimer aGlobalTimer; + +} // namespace osl + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/asm/interlck_sparc.s b/sal/osl/unx/asm/interlck_sparc.s new file mode 100644 index 000000000..7b971a50a --- /dev/null +++ b/sal/osl/unx/asm/interlck_sparc.s @@ -0,0 +1,79 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + + +/* + * Implements osl_[increment|decrement]InterlockedCount: + * sparcv9/sparcv8plus architecture: use the "cas" instruction + * + * 32 bit mode with v8plus support or 64 bit mode: + * sparcv9 mode is implied. Assemble with -xarch=v8plus (32 bit) or + * -xarch=v9 (64 bit). + * + */ + +#if !defined(__sparcv8plus) && !defined(__sparcv9) && !defined(__sparc_v9__) + +#error LibreOffice requires SPARCv8plus or SPARCv9 CPU with "cas" instruction + +#endif + +.section ".text" + .global osl_incrementInterlockedCount + .align 8 + +! Implements osl_[increment|decrement]InterlockedCount with sparcv9(sparcv8plus) "cas" +! instruction. + +osl_incrementInterlockedCount: + +1: ld [%o0], %o1 + add %o1, 1, %o2 +! allow linux to build for v8 + .word 0xD5E21009 +! cas [%o0], %o1, %o2 + cmp %o1, %o2 + bne 1b + nop ! delay slot + retl + add %o2, 1, %o0 ! delay slot + + .type osl_incrementInterlockedCount,#function + .size osl_incrementInterlockedCount,.-osl_incrementInterlockedCount + + +.section ".text" + .global osl_decrementInterlockedCount + .align 8 + +osl_decrementInterlockedCount: + +1: ld [%o0], %o1 + sub %o1, 1, %o2 +! allow linux to build for v8 + .word 0xD5E21009 +! cas [%o0], %o1, %o2 + cmp %o1, %o2 + bne 1b + nop ! delay slot + retl + sub %o2, 1, %o0 ! delay slot + + .type osl_decrementInterlockedCount,#function + .size osl_decrementInterlockedCount,.-osl_decrementInterlockedCount + diff --git a/sal/osl/unx/backtrace.c b/sal/osl/unx/backtrace.c new file mode 100644 index 000000000..f7bd01c33 --- /dev/null +++ b/sal/osl/unx/backtrace.c @@ -0,0 +1,246 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "backtrace.h" + +#if ! HAVE_FEATURE_BACKTRACE /* no GNU backtrace implementation available */ + +#include + +#ifdef __sun /* Solaris */ + +#include +#include +#include +#include +#include + +#if defined(SPARC) + +#if defined IS_LP64 + +#define FRAME_PTR_OFFSET 1 +#define FRAME_OFFSET 0 +#define STACK_BIAS 0x7ff + +#else + +#define FRAME_PTR_OFFSET 1 +#define FRAME_OFFSET 0 +#define STACK_BIAS 0 + +#endif + +#elif defined( INTEL ) + +#define FRAME_PTR_OFFSET 3 +#define FRAME_OFFSET 0 +#define STACK_BIAS 0 + +#else + +#error Unknown Solaris target platform. + +#endif /* defined SPARC or INTEL */ + +int backtrace( void **buffer, int max_frames ) +{ + jmp_buf ctx; + long fpval; + struct frame *fp; + int i; + + /* flush register windows */ +#ifdef SPARC + asm("ta 3"); +#endif + + /* get stack- and framepointer */ + setjmp(ctx); + + fpval = ((long*)(ctx))[FRAME_PTR_OFFSET]; + fp = (struct frame*)((char*)(fpval) + STACK_BIAS); + + for (i = 0; (i < FRAME_OFFSET) && (fp != 0); i++) + fp = (struct frame*)((char*)(fp->fr_savfp) + STACK_BIAS); + + /* iterate through backtrace */ + for (i = 0; (fp != 0) && (fp->fr_savpc != 0) && (i < max_frames); i++) + { + /* saved (prev) frame */ + struct frame * prev = (struct frame*)((char*)(fp->fr_savfp) + STACK_BIAS); + + /* store frame */ + *(buffer++) = (void*)(fp->fr_savpc); + + /* prev frame (w/ stack growing top down) */ + fp = (prev > fp) ? prev : 0; + } + + /* return number of frames stored */ + return i; +} + +char ** backtrace_symbols(void * const * buffer, int size) +{ + (void)buffer; (void)size; + return NULL; /*TODO*/ +} + +void backtrace_symbols_fd( void **buffer, int size, int fd ) +{ + FILE *fp = fdopen( fd, "w" ); + + if ( fp ) + { + void **pFramePtr; + + for ( pFramePtr = buffer; size > 0 && pFramePtr && *pFramePtr; pFramePtr++, size-- ) + { + Dl_info dli; + ptrdiff_t offset; + + if ( 0 != dladdr( *pFramePtr, &dli ) ) + { + if ( dli.dli_fname && dli.dli_fbase ) + { + offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_fbase; + fprintf( fp, "%s+0x%" SAL_PRI_PTRDIFFT "x", dli.dli_fname, offset ); + } + if ( dli.dli_sname && dli.dli_saddr ) + { + offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_saddr; + fprintf( fp, "(%s+0x%" SAL_PRI_PTRDIFFT "x)", dli.dli_sname, offset ); + } + } + fprintf( fp, "[%p]\n", *pFramePtr ); + } + + fclose( fp ); + } +} + +#elif defined FREEBSD || defined NETBSD || defined OPENBSD || defined(DRAGONFLY) + +#include +#include +#include +#include +#include + +/* no frame.h on FreeBSD */ +struct frame { + struct frame *fr_savfp; + long fr_savpc; +}; + +#if defined(POWERPC) || defined(POWERPC64) + +#define FRAME_PTR_OFFSET 1 +#define FRAME_OFFSET 0 + +#else + +#define FRAME_PTR_OFFSET 3 +#define FRAME_OFFSET 0 + +#endif + +int backtrace( void **buffer, int max_frames ) +{ + struct frame *fp; + jmp_buf ctx; + int i; + /* get stack- and framepointer */ + setjmp(ctx); + fp = (struct frame*)(((size_t*)(ctx))[FRAME_PTR_OFFSET]); + for ( i=0; (ifr_savfp; + /* iterate through backtrace */ + for (i=0; fp && fp->fr_savpc && ifr_savpc; + /* next frame */ + fp=fp->fr_savfp; + } + return i; +} + +char ** backtrace_symbols(void * const * buffer, int size) +{ + (void)buffer; (void)size; + return NULL; /*TODO*/ +} + +void backtrace_symbols_fd( void **buffer, int size, int fd ) +{ + FILE *fp = fdopen( fd, "w" ); + + if ( fp ) + { + void **pFramePtr; + for ( pFramePtr = buffer; size > 0 && pFramePtr && *pFramePtr; pFramePtr++, size-- ) + { + Dl_info dli; + ptrdiff_t offset; + + if ( 0 != dladdr( *pFramePtr, &dli ) ) + { + if ( dli.dli_fname && dli.dli_fbase ) + { + offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_fbase; + fprintf( fp, "%s+0x%" SAL_PRI_PTRDIFFT "x", dli.dli_fname, offset ); + } + if ( dli.dli_sname && dli.dli_saddr ) + { + offset = (ptrdiff_t)*pFramePtr - (ptrdiff_t)dli.dli_saddr; + fprintf( fp, "(%s+0x%" SAL_PRI_PTRDIFFT "x)", dli.dli_sname, offset ); + } + } + fprintf( fp, "[%p]\n", *pFramePtr ); + } + fclose( fp ); + } +} + +#else /* not GNU/BSD/Solaris */ + +int backtrace( void **buffer, int max_frames ) +{ + (void)buffer; (void)max_frames; + return 0; +} + +char ** backtrace_symbols(void * const * buffer, int size) +{ + (void)buffer; (void)size; + return NULL; /*TODO*/ +} + +void backtrace_symbols_fd( void **buffer, int size, int fd ) +{ + (void)buffer; (void)size; (void)fd; +} + +#endif /* not GNU/BSD/Solaris */ + +#endif /* ! HAVE_FEATURE_BACKTRACE */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/backtrace.h b/sal/osl/unx/backtrace.h new file mode 100644 index 000000000..11a9da52e --- /dev/null +++ b/sal/osl/unx/backtrace.h @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_BACKTRACE_H +#define INCLUDED_SAL_OSL_UNX_BACKTRACE_H + +#include + +#if HAVE_FEATURE_BACKTRACE /* GNU backtrace implementation available */ + +#include + +#else + +#ifdef __cplusplus +extern "C" { +#endif + +/* backtrace function with same behaviour as defined in GNU libc */ + +int backtrace( void **buffer, int max_frames ); + +char ** backtrace_symbols(void * const * buffer, int size); + +void backtrace_symbols_fd( void **buffer, int size, int fd ); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/backtraceapi.cxx b/sal/osl/unx/backtraceapi.cxx new file mode 100644 index 000000000..a4cec46ca --- /dev/null +++ b/sal/osl/unx/backtraceapi.cxx @@ -0,0 +1,279 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "backtrace.h" +#include + +OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth) { + std::unique_ptr backtrace = sal::backtrace_get( maxDepth ); + return sal::backtrace_to_string( backtrace.get()); +} + +std::unique_ptr sal::backtrace_get(sal_uInt32 maxDepth) +{ + assert(maxDepth != 0); + auto const maxInt = static_cast( + std::numeric_limits::max()); + if (maxDepth > maxInt) { + maxDepth = static_cast(maxInt); + } + auto b1 = new void *[maxDepth]; + int n = backtrace(b1, static_cast(maxDepth)); + return std::unique_ptr(new BacktraceState{ b1, n }); +} + +#if OSL_DEBUG_LEVEL > 0 && (defined LINUX || defined MACOSX || defined FREEBSD || defined NETBSD || defined OPENBSD || defined(DRAGONFLY)) +// The backtrace_symbols() function is unreliable, it requires -rdynamic and even then it cannot resolve names +// of many functions, such as those with hidden ELF visibility. Libunwind doesn't resolve names for me either, +// boost::stacktrace doesn't work properly, the best result I've found is addr2line. Using addr2line is relatively +// slow, but I don't find that to be a big problem for printing of backtraces. Feel free to improve if needed +// (e.g. the calls could be grouped by the binary). +#include +#include +#include +#include +#include +#include +#include +#include "file_url.hxx" + +namespace +{ +struct FrameData +{ + const char* file = nullptr; + void* addr; + ptrdiff_t offset; + OString info; + bool handled = false; +}; + +typedef o3tl::lru_map FrameCache; +std::mutex frameCacheMutex; +FrameCache frameCache( 256 ); + +void process_file_addr2line( const char* file, std::vector& frameData ) +{ + if(access( file, R_OK ) != 0) + return; // cannot read info from the binary file anyway + OUString binary("addr2line"); + OUString dummy; +#if defined __clang__ + // llvm-addr2line is faster than addr2line + if(osl::detail::find_in_PATH("llvm-addr2line", dummy)) + binary = "llvm-addr2line"; +#endif + if(!osl::detail::find_in_PATH(binary, dummy)) + return; // Will not work, avoid warnings from osl process code. + OUString arg1("-Cfe"); + OUString arg2 = OUString::fromUtf8(file); + std::vector addrs; + std::vector args; + args.reserve(frameData.size() + 2); + args.push_back( arg1.pData ); + args.push_back( arg2.pData ); + for( FrameData& frame : frameData ) + { + if( frame.file != nullptr && strcmp( file, frame.file ) == 0 ) + { + addrs.push_back("0x" + OUString::number(frame.offset, 16)); + args.push_back(addrs.back().pData); + frame.handled = true; + } + } + + oslProcess aProcess; + oslFileHandle pOut = nullptr; + oslFileHandle pErr = nullptr; + oslSecurity pSecurity = osl_getCurrentSecurity(); + oslProcessError eErr = osl_executeProcess_WithRedirectedIO( + binary.pData, args.data(), args.size(), osl_Process_SEARCHPATH | osl_Process_HIDDEN, pSecurity, nullptr, + nullptr, 0, &aProcess, nullptr, &pOut, &pErr); + osl_freeSecurityHandle(pSecurity); + + if (eErr != osl_Process_E_None) + { + SAL_WARN("sal.osl", binary << " call to resolve " << file << " symbols failed"); + return; + } + + OStringBuffer outputBuffer; + if (pOut) + { + const sal_uInt64 BUF_SIZE = 1024; + char buffer[BUF_SIZE]; + while (true) + { + sal_uInt64 bytesRead = 0; + while(osl_readFile(pErr, buffer, BUF_SIZE, &bytesRead) == osl_File_E_None + && bytesRead != 0) + ; // discard possible stderr output + oslFileError err = osl_readFile(pOut, buffer, BUF_SIZE, &bytesRead); + if(bytesRead == 0 && err == osl_File_E_None) + break; + outputBuffer.append(buffer, bytesRead); + if (err != osl_File_E_None && err != osl_File_E_AGAIN) + break; + } + osl_closeFile(pOut); + } + if(pErr) + osl_closeFile(pErr); + eErr = osl_joinProcess(aProcess); + osl_freeProcessHandle(aProcess); + + OString output = outputBuffer.makeStringAndClear(); + std::vector lines; + sal_Int32 outputPos = 0; + while(outputPos < output.getLength()) + { + sal_Int32 end1 = output.indexOf('\n', outputPos); + if(end1 < 0) + break; + sal_Int32 end2 = output.indexOf('\n', end1 + 1); + if(end2 < 0) + end2 = output.getLength(); + lines.push_back(output.copy( outputPos, end1 - outputPos )); + lines.push_back(output.copy( end1 + 1, end2 - end1 - 1 )); + outputPos = end2 + 1; + } + if(lines.size() != addrs.size() * 2) + { + SAL_WARN("sal.osl", "failed to parse " << binary << " call output to resolve " << file << " symbols "); + return; // addr2line problem? + } + size_t linesPos = 0; + for( FrameData& frame : frameData ) + { + if( frame.file != nullptr && strcmp( file, frame.file ) == 0 ) + { + // There should be two lines, first function name and second source file information. + // If each of them starts with ??, it is invalid/unknown. + OString function = lines[linesPos]; + OString source = lines[linesPos+1]; + linesPos += 2; + if(function.isEmpty() || function.startsWith("??")) + { + // Cache that the address cannot be resolved. + std::lock_guard guard(frameCacheMutex); + frameCache.insert( { frame.addr, "" } ); + } + else + { + if( source.startsWith("??")) + frame.info = function + " in " + file; + else + frame.info = function + " at " + source; + std::lock_guard guard(frameCacheMutex); + frameCache.insert( { frame.addr, frame.info } ); + } + } + } +} + +} // namespace + +OUString sal::backtrace_to_string(BacktraceState* backtraceState) +{ + // Collect frames for each binary and process each binary in one addr2line + // call for better performance. + std::vector< FrameData > frameData; + frameData.resize(backtraceState->nDepth); + for (int i = 0; i != backtraceState->nDepth; ++i) + { + Dl_info dli; + void* addr = backtraceState->buffer[i]; + std::unique_lock guard(frameCacheMutex); + auto it = frameCache.find(addr); + bool found = it != frameCache.end(); + guard.unlock(); + if( found ) + { + frameData[ i ].info = it->second; + frameData[ i ].handled = true; + } + else if (dladdr(addr, &dli) != 0) + { + if (dli.dli_fname && dli.dli_fbase) + { + frameData[ i ].file = dli.dli_fname; + frameData[ i ].addr = addr; + frameData[ i ].offset = reinterpret_cast(addr) - reinterpret_cast(dli.dli_fbase); + } + } + } + for (int i = 0; i != backtraceState->nDepth; ++i) + { + if(frameData[ i ].file != nullptr && !frameData[ i ].handled) + process_file_addr2line( frameData[ i ].file, frameData ); + } + OUStringBuffer b3; + std::unique_ptr b2{ nullptr, free }; + bool fallbackInitDone = false; + for (int i = 0; i != backtraceState->nDepth; ++i) + { + if (i != 0) + b3.append("\n"); + b3.append( "#" + OUString::number( i ) + " " ); + if(!frameData[i].info.isEmpty()) + b3.append(o3tl::runtimeToOUString(frameData[i].info.getStr())); + else + { + if(!fallbackInitDone) + { + b2 = std::unique_ptr + {backtrace_symbols(backtraceState->buffer, backtraceState->nDepth), free}; + fallbackInitDone = true; + } + if(b2) + b3.append(o3tl::runtimeToOUString(b2.get()[i])); + else + b3.append("??"); + } + } + return b3.makeStringAndClear(); +} + +#else + +OUString sal::backtrace_to_string(BacktraceState* backtraceState) +{ + std::unique_ptr b2{backtrace_symbols(backtraceState->buffer, backtraceState->nDepth), free}; + if (!b2) { + return OUString(); + } + OUStringBuffer b3; + for (int i = 0; i != backtraceState->nDepth; ++i) { + if (i != 0) { + b3.append("\n"); + } + b3.append( "#" + OUString::number( i ) + " " ); + b3.append(o3tl::runtimeToOUString(b2.get()[i])); + } + return b3.makeStringAndClear(); +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/conditn.cxx b/sal/osl/unx/conditn.cxx new file mode 100644 index 000000000..602240922 --- /dev/null +++ b/sal/osl/unx/conditn.cxx @@ -0,0 +1,270 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "system.hxx" +#include "unixerrnostring.hxx" +#include +#include + +#include +#include + +namespace { + +struct oslConditionImpl +{ + pthread_cond_t m_Condition; + pthread_mutex_t m_Lock; + bool m_State; +}; + +} + +oslCondition SAL_CALL osl_createCondition() +{ + oslConditionImpl* pCond; + int nRet=0; + + pCond = static_cast(malloc(sizeof(oslConditionImpl))); + + if ( pCond == nullptr ) + { + return nullptr; + } + + pCond->m_State = false; + + /* init condition variable with default attr. (PTHREAD_PROCESS_PRIVAT) */ + nRet = pthread_cond_init(&pCond->m_Condition, PTHREAD_CONDATTR_DEFAULT); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "pthread_cond_init failed: " << UnixErrnoString(nRet) ); + + free(pCond); + return nullptr; + } + + nRet = pthread_mutex_init(&pCond->m_Lock, PTHREAD_MUTEXATTR_DEFAULT); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "pthread_mutex_init failed: " << UnixErrnoString(nRet) ); + + nRet = pthread_cond_destroy(&pCond->m_Condition); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "pthread_cond_destroy failed: " << UnixErrnoString(nRet) ); + + free(pCond); + pCond = nullptr; + } + + SAL_INFO( "sal.osl.condition", "osl_createCondition(): " << pCond ); + + return static_cast(pCond); +} + +void SAL_CALL osl_destroyCondition(oslCondition Condition) +{ + oslConditionImpl* pCond; + + pCond = static_cast(Condition); + + SAL_INFO( "sal.osl.condition", "osl_destroyCondition(" << pCond << ")" ); + + if ( pCond ) + { + int nRet = pthread_cond_destroy(&pCond->m_Condition); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "pthread_cond_destroy failed: " << UnixErrnoString(nRet) ); + nRet = pthread_mutex_destroy(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "pthread_mutex_destroy failed: " << UnixErrnoString(nRet) ); + + free(Condition); + } +} + +sal_Bool SAL_CALL osl_setCondition(oslCondition Condition) +{ + oslConditionImpl* pCond; + int nRet=0; + + assert(Condition); + pCond = static_cast(Condition); + + nRet = pthread_mutex_lock(&pCond->m_Lock); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_setCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) ); + return false; + } + + pCond->m_State = true; + nRet = pthread_cond_broadcast(&pCond->m_Condition); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_setCondition(" << pCond << "): pthread_cond_broadcast failed: " << UnixErrnoString(nRet) ); + // try to unlock the mutex + pthread_mutex_unlock(&pCond->m_Lock); + return false; + } + + nRet = pthread_mutex_unlock(&pCond->m_Lock); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_setCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + return false; + } + + SAL_INFO( "sal.osl.condition", "osl_setCondition(" << pCond << ")" ); + + return true; + +} + +sal_Bool SAL_CALL osl_resetCondition(oslCondition Condition) +{ + oslConditionImpl* pCond; + int nRet=0; + + assert(Condition); + + pCond = static_cast(Condition); + + nRet = pthread_mutex_lock(&pCond->m_Lock); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_resetCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) ); + return false; + } + + pCond->m_State = false; + + nRet = pthread_mutex_unlock(&pCond->m_Lock); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_resetCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + return false; + } + + SAL_INFO( "sal.osl.condition", "osl_resetCondition(" << pCond << ")" ); + + return true; +} + +oslConditionResult SAL_CALL osl_waitCondition(oslCondition Condition, const TimeValue* pTimeout) +{ + oslConditionImpl* pCond; + int nRet=0; + + assert(Condition); + pCond = static_cast(Condition); + + SAL_INFO( "sal.osl.condition", "osl_waitCondition(" << pCond << ")" ); + + nRet = pthread_mutex_lock(&pCond->m_Lock); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) ); + return osl_cond_result_error; + } + + if ( pTimeout ) + { + if ( ! pCond->m_State ) + { + struct timeval tp; + struct timespec to; + + gettimeofday(&tp, nullptr); + + SET_TIMESPEC( to, tp.tv_sec + pTimeout->Seconds, + tp.tv_usec * 1000 + pTimeout->Nanosec ); + + /* spurious wake up prevention */ + do + { + const int ret = pthread_cond_timedwait(&pCond->m_Condition, &pCond->m_Lock, &to); + if ( ret != 0 ) + { + if ( ret == ETIME || ret == ETIMEDOUT ) + { + nRet = pthread_mutex_unlock(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + + return osl_cond_result_timeout; + } + if ( ret != EINTR ) + { + nRet = pthread_mutex_unlock(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + return osl_cond_result_error; + } + } + } + while ( !pCond->m_State ); + } + } + else + { + while ( !pCond->m_State ) + { + nRet = pthread_cond_wait(&pCond->m_Condition, &pCond->m_Lock); + if ( nRet != 0 ) + { + SAL_WARN( "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_cond_wait failed: " << UnixErrnoString(nRet) ); + nRet = pthread_mutex_unlock(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + + return osl_cond_result_error; + } + } + } + + nRet = pthread_mutex_unlock(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_waitCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + + SAL_INFO( "sal.osl.condition", "osl_waitCondition(" << pCond << "): OK" ); + + return osl_cond_result_ok; +} + +sal_Bool SAL_CALL osl_checkCondition(oslCondition Condition) +{ + bool State; + oslConditionImpl* pCond; + int nRet=0; + + assert(Condition); + pCond = static_cast(Condition); + + nRet = pthread_mutex_lock(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_checkCondition(" << pCond << "): pthread_mutex_lock failed: " << UnixErrnoString(nRet) ); + + State = pCond->m_State; + + nRet = pthread_mutex_unlock(&pCond->m_Lock); + SAL_WARN_IF( nRet != 0, "sal.osl.condition", "osl_checkCondition(" << pCond << "): pthread_mutex_unlock failed: " << UnixErrnoString(nRet) ); + + SAL_INFO( "sal.osl.condition", "osl_checkCondition(" << pCond << "): " << (State ? "YES" : "NO") ); + + return State; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/createfilehandlefromfd.hxx b/sal/osl/unx/createfilehandlefromfd.hxx new file mode 100644 index 000000000..bb8a768ef --- /dev/null +++ b/sal/osl/unx/createfilehandlefromfd.hxx @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_UNX_CREATEFILEHANDLEFROMFD_HXX +#define INCLUDED_SAL_OSL_UNX_CREATEFILEHANDLEFROMFD_HXX + +#include + +#include + +namespace osl::detail +{ +oslFileHandle createFileHandleFromFD(int fd); // defined in file.cxx +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx new file mode 100644 index 000000000..ac93ffacd --- /dev/null +++ b/sal/osl/unx/file.cxx @@ -0,0 +1,1606 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "system.hxx" +#include "createfilehandlefromfd.hxx" +#include "file_error_transl.hxx" +#include "file_impl.hxx" +#include "file_url.hxx" +#include "uunxapi.hxx" +#include "unixerrnostring.hxx" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#if defined(MACOSX) + +#include +#include +#define HAVE_O_EXLOCK + +#include + +#endif /* MACOSX */ + +#ifdef ANDROID +#include +#include +#include +#endif + +namespace { + +enum class State +{ + Seekable = 1, /*< default */ + Readable = 2, /*< default */ + Writeable = 4, /*< open() sets, write() requires, else osl_File_E_BADF */ + Modified = 8 /*< write() sets, flush() resets */ +}; + +} + +template<> struct o3tl::typed_flags: o3tl::is_typed_flags {}; + +namespace { + +struct FileHandle_Impl +{ + pthread_mutex_t m_mutex; + OString m_strFilePath; /*< holds native file path */ + int m_fd; + + enum Kind + { + KIND_FD = 1, + KIND_MEM = 2 + }; + int m_kind; + /** State + */ + State m_state; + + sal_uInt64 m_size; /*< file size */ + off_t m_offset; /*< physical offset from begin of file */ + // m_fileptr is hit hard in some situations, where the overhead of a mutex starts to show up, so use an atomic + std::atomic m_fileptr; /*< logical offset from begin of file */ + + off_t m_bufptr; /*< buffer offset from begin of file */ + size_t m_buflen; /*< buffer filled [0, m_bufsiz - 1] */ + + size_t m_bufsiz; + sal_uInt8 * m_buffer; +#ifdef ANDROID + rtl_String* m_memstreambuf; /*< used for in-memory streams */ +#endif + + explicit FileHandle_Impl(int fd, Kind kind = KIND_FD, OString path = ""); + ~FileHandle_Impl(); + + static size_t getpagesize(); + + sal_uInt64 getPos() const; + void setPos(sal_uInt64 uPos); + + sal_uInt64 getSize() const; + oslFileError setSize(sal_uInt64 uSize); + + oslFileError readAt( + off_t nOffset, + void* pBuffer, + size_t nBytesRequested, + sal_uInt64* pBytesRead); + + oslFileError writeAt( + off_t nOffset, + void const* pBuffer, + size_t nBytesToWrite, + sal_uInt64* pBytesWritten); + + oslFileError readFileAt( + off_t nOffset, + void* pBuffer, + size_t nBytesRequested, + sal_uInt64* pBytesRead); + + oslFileError writeFileAt( + off_t nOffset, + void const* pBuffer, + size_t nBytesToWrite, + sal_uInt64* pBytesWritten); + + oslFileError readLineAt( + off_t nOffset, + sal_Sequence** ppSequence, + sal_uInt64* pBytesRead); + + static oslFileError writeSequence_Impl( + sal_Sequence** ppSequence, + size_t* pnOffset, + const void* pBuffer, + size_t nBytes); + + oslFileError syncFile(); + + class Guard + { + pthread_mutex_t *m_mutex; + + public: + explicit Guard(pthread_mutex_t *pMutex); + ~Guard(); + }; +}; + +} + +FileHandle_Impl::Guard::Guard(pthread_mutex_t * pMutex) + : m_mutex(pMutex) +{ + assert(m_mutex); + (void) pthread_mutex_lock(m_mutex); // ignoring EINVAL if a null mutex is passed ... +} + +FileHandle_Impl::Guard::~Guard() +{ + assert(m_mutex); + (void) pthread_mutex_unlock(m_mutex); +} + +FileHandle_Impl::FileHandle_Impl(int fd, enum Kind kind, OString path) + : m_strFilePath(std::move(path)), + m_fd (fd), + m_kind (kind), + m_state (State::Seekable | State::Readable), + m_size (0), + m_offset (0), + m_fileptr (0), + m_bufptr (-1), + m_buflen (0), + m_bufsiz (0), + m_buffer (nullptr) +{ + (void) pthread_mutex_init(&m_mutex, nullptr); + if (m_kind == KIND_FD) + { + size_t const pagesize = getpagesize(); + if (pagesize != size_t(-1)) + { + m_bufsiz = pagesize; + m_buffer = static_cast(malloc(m_bufsiz)); + if (m_buffer) + memset(m_buffer, 0, m_bufsiz); + } + } +} + +FileHandle_Impl::~FileHandle_Impl() +{ + if (m_kind == KIND_FD) + { + free(m_buffer); + m_buffer = nullptr; + } + + (void) pthread_mutex_destroy(&m_mutex); // ignoring EBUSY ... +} + +size_t FileHandle_Impl::getpagesize() +{ + return sal::static_int_cast< size_t >(::sysconf(_SC_PAGESIZE)); +} + +sal_uInt64 FileHandle_Impl::getPos() const +{ + return sal::static_int_cast< sal_uInt64 >(m_fileptr.load()); +} + +void FileHandle_Impl::setPos(sal_uInt64 uPos) +{ + m_fileptr = sal::static_int_cast< off_t >(uPos); +} + +sal_uInt64 FileHandle_Impl::getSize() const +{ + off_t const bufend = std::max(off_t(0), m_bufptr) + m_buflen; + return std::max(m_size, sal::static_int_cast< sal_uInt64 >(bufend)); +} + +oslFileError FileHandle_Impl::setSize(sal_uInt64 uSize) +{ + off_t const nSize = sal::static_int_cast< off_t >(uSize); + if (ftruncate_with_name(m_fd, nSize, m_strFilePath) == -1) + { + /* Failure. Save original result. Try fallback algorithm */ + oslFileError result = oslTranslateFileError(errno); + + /* Check against current size. Fail upon 'shrink' */ + if (uSize <= getSize()) + { + /* Failure upon 'shrink'. Return original result */ + return result; + } + + /* Save current position */ + off_t const nCurPos = lseek(m_fd, off_t(0), SEEK_CUR); + if (nCurPos == off_t(-1)) + { + int e = errno; + SAL_INFO("sal.file", "lseek(" << m_fd << ",0,SEEK_CUR): " << UnixErrnoString(e)); + return result; + } + else + SAL_INFO("sal.file", "lseek(" << m_fd << ",0,SEEK_CUR): OK"); + + /* Try 'expand' via 'lseek()' and 'write()' */ + if (lseek(m_fd, static_cast(nSize - 1), SEEK_SET) == -1) + { + int e = errno; + SAL_INFO("sal.file", "lseek(" << m_fd << "," << nSize - 1 << ",SEEK_SET): " << UnixErrnoString(e)); + return result; + } + else + SAL_INFO("sal.file", "lseek(" << m_fd << "," << nSize - 1 << ",SEEK_SET): OK"); + + if (write(m_fd, "", size_t(1)) == -1) + { + /* Failure. Restore saved position */ + int e = errno; + SAL_INFO("sal.file", "write(" << m_fd << ",\"\",1): " << UnixErrnoString(e)); + (void) lseek(m_fd, nCurPos, SEEK_SET); + return result; + } + else + SAL_INFO("sal.file", "write(" << m_fd << ",\"\",1): OK"); + + /* Success. Restore saved position */ + if (lseek(m_fd, nCurPos, SEEK_SET) == -1) + return result; + } + + m_size = sal::static_int_cast< sal_uInt64 >(nSize); + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::readAt( + off_t nOffset, + void * pBuffer, + size_t nBytesRequested, + sal_uInt64 * pBytesRead) +{ + SAL_WARN_IF(!(m_state & State::Seekable), "sal.osl", "FileHandle_Impl::readAt(): not seekable"); + if (!(m_state & State::Seekable)) + return osl_File_E_SPIPE; + + SAL_WARN_IF(!(m_state & State::Readable), "sal.osl", "FileHandle_Impl::readAt(): not readable"); + if (!(m_state & State::Readable)) + return osl_File_E_BADF; + + if (m_kind == KIND_MEM) + { + ssize_t nBytes; + + m_offset = nOffset; + + if (o3tl::make_unsigned(m_offset) >= m_size) + { + nBytes = 0; + } + else + { + nBytes = std::min(nBytesRequested, static_cast(m_size - m_offset)); + memmove(pBuffer, m_buffer + m_offset, nBytes); + m_offset += nBytes; + } + *pBytesRead = nBytes; + return osl_File_E_None; + } + + ssize_t nBytes = ::pread(m_fd, pBuffer, nBytesRequested, nOffset); + if ((nBytes == -1) && (errno == EOVERFLOW)) + { + /* Some 'pread()'s fail with EOVERFLOW when reading at (or past) + * end-of-file, different from 'lseek() + read()' behaviour. + * Returning '0 bytes read' and 'osl_File_E_None' instead. + */ + nBytes = 0; + } + + if (nBytes == -1) + return oslTranslateFileError(errno); + + *pBytesRead = nBytes; + + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::writeAt( + off_t nOffset, + void const * pBuffer, + size_t nBytesToWrite, + sal_uInt64 * pBytesWritten) +{ + SAL_WARN_IF(!(m_state & State::Seekable), "sal.osl", "FileHandle_Impl::writeAt(): not seekable"); + if (!(m_state & State::Seekable)) + return osl_File_E_SPIPE; + + SAL_WARN_IF(!(m_state & State::Writeable), "sal.osl", "FileHandle_Impl::writeAt(): not writeable"); + if (!(m_state & State::Writeable)) + return osl_File_E_BADF; + + ssize_t nBytes = ::pwrite(m_fd, pBuffer, nBytesToWrite, nOffset); + if (nBytes == -1) + return oslTranslateFileError(errno); + + m_size = std::max(m_size, sal::static_int_cast< sal_uInt64 >(nOffset + nBytes)); + + *pBytesWritten = nBytes; + + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::readFileAt( + off_t nOffset, + void* pBuffer, + size_t nBytesRequested, + sal_uInt64* pBytesRead) +{ + if (!(m_state & State::Seekable)) + { + // not seekable (pipe) + ssize_t nBytes = ::read(m_fd, pBuffer, nBytesRequested); + if (nBytes == -1) + return oslTranslateFileError(errno); + + *pBytesRead = nBytes; + + return osl_File_E_None; + } + + if (m_kind == KIND_MEM || !m_buffer) + { + // not buffered + return readAt(nOffset, pBuffer, nBytesRequested, pBytesRead); + } + + sal_uInt8 *buffer = static_cast(pBuffer); + for (*pBytesRead = 0; nBytesRequested > 0; ) + { + off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz; + size_t const bufpos = nOffset % m_bufsiz; + + if (bufptr != m_bufptr) + { + // flush current buffer + oslFileError result = syncFile(); + if (result != osl_File_E_None) + return result; + + m_bufptr = -1; + m_buflen = 0; + + if (nBytesRequested >= m_bufsiz) + { + // buffer too small, read through from file + sal_uInt64 uDone = 0; + result = readAt(nOffset, &(buffer[*pBytesRead]), nBytesRequested, &uDone); + if (result != osl_File_E_None) + return result; + + *pBytesRead += uDone; + + return osl_File_E_None; + } + + // update buffer (pointer) + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + + m_bufptr = bufptr; + m_buflen = uDone; + } + + if (bufpos >= m_buflen) + { + // end of file + return osl_File_E_None; + } + + size_t const bytes = std::min(m_buflen - bufpos, nBytesRequested); + SAL_INFO("sal.fileio", "FileHandle_Impl::readFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")"); + + memcpy(&(buffer[*pBytesRead]), &(m_buffer[bufpos]), bytes); + nBytesRequested -= bytes; + *pBytesRead += bytes; + nOffset += bytes; + } + + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::writeFileAt( + off_t nOffset, + void const * pBuffer, + size_t nBytesToWrite, + sal_uInt64 * pBytesWritten) +{ + if (!(m_state & State::Seekable)) + { + // not seekable (pipe) + ssize_t nBytes = ::write(m_fd, pBuffer, nBytesToWrite); + if (nBytes == -1) + return oslTranslateFileError(errno); + + *pBytesWritten = nBytes; + + return osl_File_E_None; + } + if (!m_buffer) + { + // not buffered + return writeAt(nOffset, pBuffer, nBytesToWrite, pBytesWritten); + } + + sal_uInt8 const * buffer = static_cast(pBuffer); + for (*pBytesWritten = 0; nBytesToWrite > 0;) + { + off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz; + size_t const bufpos = nOffset % m_bufsiz; + if (bufptr != m_bufptr) + { + // flush current buffer + oslFileError result = syncFile(); + if (result != osl_File_E_None) + return result; + m_bufptr = -1; + m_buflen = 0; + + if (nBytesToWrite >= m_bufsiz) + { + // buffer too small, write through to file + sal_uInt64 uDone = 0; + result = writeAt(nOffset, &(buffer[*pBytesWritten]), nBytesToWrite, &uDone); + if (result != osl_File_E_None) + return result; + + if (uDone != nBytesToWrite) + return osl_File_E_IO; + + *pBytesWritten += uDone; + + return osl_File_E_None; + } + + // update buffer (pointer) + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + + m_bufptr = bufptr; + m_buflen = uDone; + } + + size_t const bytes = std::min(m_bufsiz - bufpos, nBytesToWrite); + SAL_INFO("sal.fileio", "FileHandle_Impl::writeFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")"); + + memcpy(&(m_buffer[bufpos]), &(buffer[*pBytesWritten]), bytes); + nBytesToWrite -= bytes; + *pBytesWritten += bytes; + nOffset += bytes; + + m_buflen = std::max(m_buflen, bufpos + bytes); + m_state |= State::Modified; + } + + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::readLineAt( + off_t nOffset, + sal_Sequence ** ppSequence, + sal_uInt64 * pBytesRead) +{ + oslFileError result = osl_File_E_None; + + off_t bufptr = nOffset / m_bufsiz * m_bufsiz; + if (bufptr != m_bufptr) + { + /* flush current buffer */ + result = syncFile(); + if (result != osl_File_E_None) + return result; + + /* update buffer (pointer) */ + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + + m_bufptr = bufptr; + m_buflen = uDone; + } + + static int const LINE_STATE_BEGIN = 0; + static int const LINE_STATE_CR = 1; + static int const LINE_STATE_LF = 2; + + size_t bufpos = nOffset - m_bufptr, curpos = bufpos, dstpos = 0; + int state = (bufpos >= m_buflen) ? LINE_STATE_LF : LINE_STATE_BEGIN; + + while (state != LINE_STATE_LF) + { + if (curpos >= m_buflen) + { + /* buffer examined */ + if ((curpos - bufpos) > 0) + { + /* flush buffer to sequence */ + result = writeSequence_Impl( + ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos); + if (result != osl_File_E_None) + return result; + + *pBytesRead += curpos - bufpos; + nOffset += curpos - bufpos; + } + + bufptr = nOffset / m_bufsiz * m_bufsiz; + if (bufptr != m_bufptr) + { + /* update buffer (pointer) */ + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + + m_bufptr = bufptr; + m_buflen = uDone; + } + + bufpos = nOffset - m_bufptr; + curpos = bufpos; + if (bufpos >= m_buflen) + break; + } + + switch (state) + { + case LINE_STATE_CR: + state = LINE_STATE_LF; + switch (m_buffer[curpos]) + { + case 0x0A: /* CRLF */ + /* eat current char */ + curpos++; + break; + default: /* single CR */ + /* keep current char */ + break; + } + break; + default: + /* determine next state */ + switch (m_buffer[curpos]) + { + case 0x0A: /* single LF */ + state = LINE_STATE_LF; + break; + case 0x0D: /* CR */ + state = LINE_STATE_CR; + break; + default: /* advance to next char */ + curpos++; + break; + } + if (state != LINE_STATE_BEGIN) + { + /* skip the newline char */ + curpos++; + + /* flush buffer to sequence */ + result = writeSequence_Impl( + ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos - 1); + if (result != osl_File_E_None) + return result; + + *pBytesRead += curpos - bufpos; + nOffset += curpos - bufpos; + } + break; + } + } + + result = writeSequence_Impl(ppSequence, &dstpos, nullptr, 0); + if (result != osl_File_E_None) + return result; + + if (dstpos > 0) + return osl_File_E_None; + + if (bufpos >= m_buflen) + return osl_File_E_AGAIN; + + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::writeSequence_Impl( + sal_Sequence ** ppSequence, + size_t * pnOffset, + const void * pBuffer, + size_t nBytes) +{ + sal_Int32 nElements = *pnOffset + nBytes; + if (!*ppSequence) + { + /* construct sequence */ + rtl_byte_sequence_constructNoDefault(ppSequence, nElements); + } + else if (nElements != (*ppSequence)->nElements) + { + /* resize sequence */ + rtl_byte_sequence_realloc(ppSequence, nElements); + } + + if (*ppSequence && nBytes != 0) + { + /* fill sequence */ + memcpy(&((*ppSequence)->elements[*pnOffset]), pBuffer, nBytes); + *pnOffset += nBytes; + } + + return (*ppSequence) ? osl_File_E_None : osl_File_E_NOMEM; +} + +oslFileError FileHandle_Impl::syncFile() +{ + oslFileError result = osl_File_E_None; + if (m_state & State::Modified) + { + sal_uInt64 uDone = 0; + result = writeAt(m_bufptr, m_buffer, m_buflen, &uDone); + if (result != osl_File_E_None) + return result; + + if (uDone != m_buflen) + return osl_File_E_IO; + + m_state &= ~State::Modified; + } + + return result; +} + +oslFileHandle osl::detail::createFileHandleFromFD(int fd) +{ + if (fd == -1) + return nullptr; // EINVAL + + struct stat aFileStat; + if (fstat(fd, &aFileStat) == -1) + return nullptr; // EBADF + + FileHandle_Impl *pImpl = new FileHandle_Impl(fd); + + // assume writeable + pImpl->m_state |= State::Writeable; + if (!S_ISREG(aFileStat.st_mode)) + { + /* not a regular file, mark not seekable */ + pImpl->m_state &= ~State::Seekable; + } + else + { + /* regular file, init current size */ + pImpl->m_size = sal::static_int_cast< sal_uInt64 >(aFileStat.st_size); + } + + SAL_INFO("sal.file", "osl::detail::createFileHandleFromFD(" << pImpl->m_fd << ", writeable) => " << pImpl->m_strFilePath); + + return static_cast(pImpl); +} + +static int osl_file_adjustLockFlags(const OString& path, int flags) +{ +#ifdef MACOSX + /* + * The AFP implementation of MacOS X 10.4 treats O_EXLOCK in a way + * that makes it impossible for OOo to create a backup copy of the + * file it keeps opened. OTOH O_SHLOCK for AFP behaves as desired by + * the OOo file handling, so we need to check the path of the file + * for the filesystem name. + */ + struct statfs s; + if(statfs(path.getStr(), &s) >= 0) + { + if(strncmp("afpfs", s.f_fstypename, 5) == 0) + { + flags &= ~O_EXLOCK; + flags |= O_SHLOCK; + } + else + { + /* Needed flags to allow opening a webdav file */ + flags &= ~(O_EXLOCK | O_SHLOCK | O_NONBLOCK); + } + } +#else + (void) path; +#endif + + return flags; +} + +static bool osl_file_queryLocking(sal_uInt32 uFlags) +{ +#if !defined HAVE_O_EXLOCK + if (!(uFlags & osl_File_OpenFlag_NoLock) + && ((uFlags & osl_File_OpenFlag_Write) + || (uFlags & osl_File_OpenFlag_Create))) + { + static bool enabled = getenv("SAL_ENABLE_FILE_LOCKING") != nullptr; + // getenv is not thread safe, so minimize use of result + return enabled; + } +#else + (void) uFlags; +#endif + return false; +} + +#ifdef HAVE_O_EXLOCK +#define OPEN_WRITE_FLAGS ( O_RDWR | O_EXLOCK | O_NONBLOCK ) +#define OPEN_CREATE_FLAGS ( O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK ) +#else +#define OPEN_WRITE_FLAGS ( O_RDWR ) +#define OPEN_CREATE_FLAGS ( O_CREAT | O_RDWR ) +#endif + +#if defined ANDROID + +namespace { + +static oslFileError openMemoryAsFile(const OString &rData, + oslFileHandle *pHandle, + const OString& path) +{ + const char *address = rData.getStr(); + size_t size = rData.getLength(); + + FileHandle_Impl *pImpl = new FileHandle_Impl(-1, FileHandle_Impl::KIND_MEM, path); + pImpl->m_size = sal::static_int_cast< sal_uInt64 >(size); + + *pHandle = (oslFileHandle)(pImpl); + + pImpl->m_bufptr = 0; + pImpl->m_buflen = size; + pImpl->m_memstreambuf = rData.pData; + rtl_string_acquire(pImpl->m_memstreambuf); + + pImpl->m_bufsiz = size; + pImpl->m_buffer = reinterpret_cast(const_cast(address)); + + return osl_File_E_None; +} + +/* + * Reading files from /assets/ on Android via a transition into the VM + * shows on profiles and is rather slow; so we cache small files as + * used by UNO, UI-builder etc. + */ +class AndroidFileCache { +public: + struct Entry { + OString maFilePath; + OString maData; + }; + AndroidFileCache(size_t nElements) + : mnCur(0) + { + maEntries.resize(nElements); + assert (maEntries.size() == nElements); + } + Entry *find(const char *cpFilePath) + { + for (auto &it : maEntries) + { + if (!strcmp(it.maFilePath.getStr(), cpFilePath)) + return ⁢ + } + return nullptr; + } + // no clever LRU - but - good enough for now. + void insert(const char *cpFilePath, OString &rData) + { + assert (maEntries.size() > 0); + if (++mnCur >= maEntries.size()) + mnCur = 0; + maEntries[mnCur].maFilePath = OString(cpFilePath, strlen(cpFilePath)); + maEntries[mnCur].maData = rData; + } + static AndroidFileCache &getHitCache() + { + static AndroidFileCache *pCache = new AndroidFileCache(16); + return *pCache; + } + static AndroidFileCache &getMissCache() + { + static AndroidFileCache *pCache = new AndroidFileCache(32); + return *pCache; + } +private: + size_t mnCur; + std::vector maEntries; +}; + +} // namespace + +#endif + +oslFileError openFilePath(const OString& filePath, oslFileHandle* pHandle, + sal_uInt32 uFlags, mode_t mode) +{ + oslFileError eRet; + +#ifdef ANDROID + /* Opening a file from /assets read-only means + * we should mmap it from the .apk file + */ + if (o3tl::starts_with(filePath, "/assets/")) + { + OString aData; + bool bCache = true; + + const char *cpAssetsPath = filePath.getStr() + sizeof("/assets/") - 1; + // some requests are /assets//foo... + if (cpAssetsPath[0] == '/') + { + __android_log_print(ANDROID_LOG_DEBUG,"libo:sal/osl/unx/file", "double-slash in path: %s", filePath.getStr()); + cpAssetsPath++; + } + + AndroidFileCache::Entry *pHit = AndroidFileCache::getHitCache().find(cpAssetsPath); + if (pHit) + aData = pHit->maData; + + else + { + bCache = false; + AndroidFileCache::Entry *pMiss = AndroidFileCache::getMissCache().find(cpAssetsPath); + if (pMiss) + { + errno = ENOENT; + __android_log_print(ANDROID_LOG_ERROR,"libo:sal/osl/unx/file", "miss cache: failed to open %s", filePath.getStr()); + return osl_File_E_NOENT; + } + AAssetManager* mgr = lo_get_native_assetmgr(); + AAsset* asset = AAssetManager_open(mgr, cpAssetsPath, AASSET_MODE_BUFFER); + if (!asset) + { + AndroidFileCache::getMissCache().insert(cpAssetsPath, aData); + errno = ENOENT; + __android_log_print(ANDROID_LOG_ERROR,"libo:sal/osl/unx/file", "failed to open %s", filePath.getStr()); + return osl_File_E_NOENT; + } + else + { + rtl_String *pData = nullptr; + size_t size = AAsset_getLength(asset); + rtl_string_new_WithLength(&pData, size); + pData->length = size; + AAsset_read(asset, pData->buffer, size); + AAsset_close(asset); + + aData = OString(pData, SAL_NO_ACQUIRE); + + if (pData->length < 50 * 1024) + AndroidFileCache::getHitCache().insert(cpAssetsPath, aData); + } + } + + if (uFlags & osl_File_OpenFlag_Write) + { + // It seems to work better to silently "open" it read-only + // and let write attempts, if any, fail later. Otherwise + // loading a document from /assets fails with that idiotic + // "General Error" dialog... + } + SAL_INFO("sal.file", "osl_openFile(" << filePath << ") => '" << cpAssetsPath << "'" + << aData.getLength() << " bytes from file " << (bCache ? "cache" : "system")); + return openMemoryAsFile(aData, pHandle, filePath); + } +#endif + + /* set mode and flags */ + int defmode = (uFlags & osl_File_OpenFlag_Private) ? S_IRUSR : S_IRUSR | S_IRGRP | S_IROTH; + int flags = O_RDONLY; + + if (uFlags & osl_File_OpenFlag_Write) + { + defmode |= (uFlags & osl_File_OpenFlag_Private) ? S_IWUSR : S_IWUSR | S_IWGRP | S_IWOTH; + flags = OPEN_WRITE_FLAGS; + } + + if (uFlags & osl_File_OpenFlag_Create) + { + defmode |= (uFlags & osl_File_OpenFlag_Private) ? S_IWUSR : S_IWUSR | S_IWGRP | S_IWOTH; + flags = OPEN_CREATE_FLAGS; + } + + if (mode == mode_t(-1)) + mode = defmode; + + /* Check for flags passed in from SvFileStream::Open() */ + if (uFlags & osl_File_OpenFlag_Trunc) + flags |= O_TRUNC; + + if (!(uFlags & osl_File_OpenFlag_NoExcl)) + flags |= O_EXCL; + + if (uFlags & osl_File_OpenFlag_NoLock) + { +#ifdef HAVE_O_EXLOCK + flags &= ~(O_EXLOCK | O_SHLOCK | O_NONBLOCK); +#endif /* HAVE_O_EXLOCK */ + } + else + { + flags = osl_file_adjustLockFlags (filePath, flags); + } + + // O_EXCL can be set only when O_CREAT is set + if (flags & O_EXCL && !(flags & O_CREAT)) + flags &= ~O_EXCL; + + /* open the file */ + int fd = open_c( filePath, flags, mode ); + if (fd == -1) + { + return oslTranslateFileError(errno); + } + +#if !HAVE_FEATURE_MACOSX_SANDBOX + /* reset O_NONBLOCK flag */ + if (flags & O_NONBLOCK) + { + int f = fcntl(fd, F_GETFL, 0); + if (f == -1) + { + int e = errno; + SAL_INFO("sal.file", "fcntl(" << fd << ",F_GETFL,0): " << UnixErrnoString(e)); + eRet = oslTranslateFileError(e); + (void) close(fd); + SAL_INFO("sal.file", "close(" << fd << ")"); + return eRet; + } + else + SAL_INFO("sal.file", "fcntl(" << fd << ",F_GETFL,0): OK"); + + if (fcntl(fd, F_SETFL, (f & ~O_NONBLOCK)) == -1) + { + int e = errno; + SAL_INFO("sal.file", "fcntl(" << fd << ",F_SETFL,(f & ~O_NONBLOCK)): " << UnixErrnoString(e)); + eRet = oslTranslateFileError(e); + (void) close(fd); + SAL_INFO("sal.file", "close(" << fd << ")"); + return eRet; + } + else + SAL_INFO("sal.file", "fcntl(" << fd << ",F_SETFL,(f & ~O_NONBLOCK)): OK"); + } +#endif + + /* get file status (mode, size) */ + struct stat aFileStat; + if (fstat(fd, &aFileStat) == -1) + { + int e = errno; + SAL_INFO("sal.file", "fstat(" << fd << "): " << UnixErrnoString(e)); + eRet = oslTranslateFileError(e); + (void) close(fd); + SAL_INFO("sal.file", "close(" << fd << ")"); + return eRet; + } + else + SAL_INFO("sal.file", "fstat(" << fd << "): OK"); + + if (!S_ISREG(aFileStat.st_mode)) + { + /* we only open regular files here */ + SAL_INFO("sal.file", "osl_openFile(" << filePath << "): not a regular file"); + (void) close(fd); + SAL_INFO("sal.file", "close(" << fd << ")"); + return osl_File_E_INVAL; + } + + if (osl_file_queryLocking(uFlags)) + { +#ifdef MACOSX + if (flock(fd, LOCK_EX | LOCK_NB) == -1) + { + int e = errno; + SAL_INFO("sal.file", "flock(" << fd << ",LOCK_EX|LOCK_NB): " << UnixErrnoString(e)); + /* Mac OSX returns ENOTSUP for webdav drives. We should try read lock */ + + // Restore errno after possibly having been overwritten by the SAL_INFO above... + errno = e; + if ((errno != ENOTSUP) || ((flock(fd, LOCK_SH | LOCK_NB) == 1) && (errno != ENOTSUP))) + { + eRet = oslTranslateFileError(errno); + (void) close(fd); + SAL_INFO("sal.file", "close(" << fd << ")"); + return eRet; + } + } + else + SAL_INFO("sal.file", "flock(" << fd << ",LOCK_EX|LOCK_NB): OK"); +#else /* F_SETLK */ + struct flock aflock; + + aflock.l_type = F_WRLCK; + aflock.l_whence = SEEK_SET; + aflock.l_start = 0; + aflock.l_len = 0; + + if (fcntl(fd, F_SETLK, &aflock) == -1) + { + int e = errno; + SAL_INFO("sal.file", "fcntl(" << fd << ",F_SETLK): " << UnixErrnoString(e)); + eRet = oslTranslateFileError(e); + (void) close(fd); + SAL_INFO("sal.file", "close(" << fd << ")"); + return eRet; + } +#endif /* F_SETLK */ + } + + /* allocate memory for impl structure */ + FileHandle_Impl *pImpl = new FileHandle_Impl(fd, FileHandle_Impl::KIND_FD, filePath); + if (flags & O_RDWR) + pImpl->m_state |= State::Writeable; + + pImpl->m_size = sal::static_int_cast< sal_uInt64 >(aFileStat.st_size); + + *pHandle = static_cast(pImpl); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_openFile(rtl_uString* ustrFileURL, oslFileHandle* pHandle, sal_uInt32 uFlags) +{ + return openFile(ustrFileURL, pHandle, uFlags, mode_t(-1)); +} + +oslFileError openFile(rtl_uString* ustrFileURL, oslFileHandle* pHandle, sal_uInt32 uFlags, mode_t mode) +{ + oslFileError eRet; + + if ((!ustrFileURL) || (ustrFileURL->length == 0) || (!pHandle)) + return osl_File_E_INVAL; + + /* convert file URL to system path */ + char buffer[PATH_MAX]; + eRet = FileURLToPath(buffer, sizeof(buffer), ustrFileURL); + if (eRet != osl_File_E_None) + return eRet; + +#ifdef MACOSX + if (macxp_resolveAlias(buffer, sizeof(buffer)) != 0) + return oslTranslateFileError(errno); +#endif /* MACOSX */ + + return openFilePath(buffer, pHandle, uFlags, mode); +} + +oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if (!pImpl) + return osl_File_E_INVAL; + + if (pImpl->m_kind == FileHandle_Impl::KIND_MEM) + { +#ifdef ANDROID + rtl_string_release(pImpl->m_memstreambuf); + pImpl->m_memstreambuf = nullptr; + + pImpl->m_buffer = NULL; +#endif + delete pImpl; + return osl_File_E_None; + } + + if (pImpl->m_fd < 0) + return osl_File_E_INVAL; + + (void) pthread_mutex_lock(&(pImpl->m_mutex)); + + /* close(2) implicitly (and unconditionally) unlocks */ + oslFileError result = pImpl->syncFile(); + if (result != osl_File_E_None) + { + /* close, ignoring double failure */ + (void) close(pImpl->m_fd); + SAL_INFO("sal.file", "close(" << pImpl->m_fd << ")"); + } + else if (close(pImpl->m_fd) == -1) + { + int e = errno; + SAL_INFO("sal.file", "close(" << pImpl->m_fd << "): " << UnixErrnoString(e)); + /* translate error code */ + result = oslTranslateFileError(e); + } + else + SAL_INFO("sal.file", "close(" << pImpl->m_fd << "): OK"); + + (void) pthread_mutex_unlock(&(pImpl->m_mutex)); + delete pImpl; + return result; +} + +oslFileError SAL_CALL osl_syncFile(oslFileHandle Handle) +{ + FileHandle_Impl* pImpl = static_cast(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1))) + return osl_File_E_INVAL; + + if (pImpl->m_kind == FileHandle_Impl::KIND_MEM) + return osl_File_E_None; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + + oslFileError result = pImpl->syncFile(); + + if (result != osl_File_E_None) + return result; + + if (fsync(pImpl->m_fd) == -1) + { + int e = errno; + SAL_INFO("sal.file", "fsync(" << pImpl->m_fd << "): " << UnixErrnoString(e)); + return oslTranslateFileError(e); + } + else + SAL_INFO("sal.file", "fsync(" << pImpl->m_fd << "): OK"); + + return osl_File_E_None; +} + +const off_t MAX_OFF_T = std::numeric_limits< off_t >::max(); + +namespace { + +// coverity[result_independent_of_operands] - crossplatform requirement +template bool exceedsMaxOffT(T n) { return n > MAX_OFF_T; } + +// coverity[result_independent_of_operands] - crossplatform requirement +template bool exceedsMinOffT(T n) +{ return n < std::numeric_limits::min(); } + +} + +oslFileError SAL_CALL osl_mapFile( + oslFileHandle Handle, + void** ppAddr, + sal_uInt64 uLength, + sal_uInt64 uOffset, + sal_uInt32 uFlags +) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!ppAddr)) + return osl_File_E_INVAL; + + *ppAddr = nullptr; + + if (uLength > SAL_MAX_SIZE) + return osl_File_E_OVERFLOW; + + size_t const nLength = sal::static_int_cast< size_t >(uLength); + + if (exceedsMaxOffT(uOffset)) + return osl_File_E_OVERFLOW; + + if (pImpl->m_kind == FileHandle_Impl::KIND_MEM) + { + *ppAddr = pImpl->m_buffer + uOffset; + return osl_File_E_None; + } + + off_t const nOffset = sal::static_int_cast< off_t >(uOffset); + + void* p = mmap(nullptr, nLength, PROT_READ, MAP_SHARED, pImpl->m_fd, nOffset); + + if (p == MAP_FAILED) + return oslTranslateFileError(errno); + + *ppAddr = p; + + if (uFlags & osl_File_MapFlag_RandomAccess) + { + // Determine memory pagesize. + size_t const nPageSize = FileHandle_Impl::getpagesize(); + if (nPageSize != size_t(-1)) + { + /* + * Pagein, touching first byte of every memory page. + * Note: volatile disables optimizing the loop away. + */ + sal_uInt8 volatile *pData(static_cast(*ppAddr)); + size_t nSize(nLength); + + while (nSize > nPageSize) + { + pData[0]; + pData += nPageSize; + nSize -= nPageSize; + } + + if (nSize > 0) + pData[0]; + } + } + + if (uFlags & osl_File_MapFlag_WillNeed) + { + // On Linux, madvise(..., MADV_WILLNEED) appears to have the undesirable + // effect of not returning until the data has actually been paged in, so + // that its net effect would typically be to slow down the process + // (which could start processing at the beginning of the data while the + // OS simultaneously pages in the rest); on other platforms, it remains + // to be evaluated whether madvise or equivalent is available and + // actually useful: +#if defined MACOSX || (defined(__sun) && (!defined(__XOPEN_OR_POSIX) || defined(_XPG6) || defined(__EXTENSIONS__))) + int e = posix_madvise(p, nLength, POSIX_MADV_WILLNEED); + if (e != 0) + SAL_INFO("sal.file", "posix_madvise(..., POSIX_MADV_WILLNEED) failed with " << e); + +#elif defined __sun + if (madvise(static_cast< caddr_t >(p), nLength, MADV_WILLNEED) != 0) + SAL_INFO("sal.file", "madvise(..., MADV_WILLNEED) failed with " << UnixErrnoString(errno)); +#endif + } + + return osl_File_E_None; +} + +static oslFileError unmapFile(void* pAddr, sal_uInt64 uLength) +{ + if (!pAddr) + return osl_File_E_INVAL; + + if (uLength > SAL_MAX_SIZE) + return osl_File_E_OVERFLOW; + + size_t const nLength = sal::static_int_cast< size_t >(uLength); + + if (munmap(pAddr, nLength) == -1) + return oslTranslateFileError(errno); + + return osl_File_E_None; +} + +#ifndef ANDROID + +// Note that osl_unmapFile() just won't work on Android in general +// where for (uncompressed) files inside the .apk, in the /assets +// folder osl_mapFile just returns a pointer to the file inside the +// already mmapped .apk archive. + +oslFileError SAL_CALL osl_unmapFile(void* pAddr, sal_uInt64 uLength) +{ + return unmapFile(pAddr, uLength); +} + +#endif + +oslFileError SAL_CALL osl_unmapMappedFile(oslFileHandle Handle, void* pAddr, sal_uInt64 uLength) +{ + FileHandle_Impl *pImpl = static_cast(Handle); + + if (!pImpl) + return osl_File_E_INVAL; + + if (pImpl->m_kind == FileHandle_Impl::KIND_FD) + return unmapFile(pAddr, uLength); + + // For parts of already mmapped "parent" files, whose mapping we + // can't change, not much we can or should do... + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_readLine( + oslFileHandle Handle, + sal_Sequence ** ppSequence) +{ + FileHandle_Impl *pImpl = static_cast(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!ppSequence)) + return osl_File_E_INVAL; + + sal_uInt64 uBytesRead = 0; + + // read at current fileptr; fileptr += uBytesRead; + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->readLineAt(pImpl->m_fileptr, ppSequence, &uBytesRead); + + if (result == osl_File_E_None) + pImpl->m_fileptr += uBytesRead; + + return result; +} + +oslFileError SAL_CALL osl_readFile( + oslFileHandle Handle, + void * pBuffer, + sal_uInt64 uBytesRequested, + sal_uInt64 * pBytesRead) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pBuffer) || (!pBytesRead)) + return osl_File_E_INVAL; + + static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max(); + if (g_limit_ssize_t < uBytesRequested) + return osl_File_E_OVERFLOW; + + size_t const nBytesRequested = sal::static_int_cast< size_t >(uBytesRequested); + + // read at current fileptr; fileptr += *pBytesRead; + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->readFileAt(pImpl->m_fileptr, pBuffer, nBytesRequested, pBytesRead); + + if (result == osl_File_E_None) + pImpl->m_fileptr += *pBytesRead; + + return result; +} + +oslFileError SAL_CALL osl_writeFile( + oslFileHandle Handle, + const void * pBuffer, + sal_uInt64 uBytesToWrite, + sal_uInt64 * pBytesWritten) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || (pImpl->m_fd == -1) || (!pBuffer) || (!pBytesWritten)) + return osl_File_E_INVAL; + + if (!(pImpl->m_state & State::Writeable)) + return osl_File_E_BADF; + + static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max(); + if (g_limit_ssize_t < uBytesToWrite) + return osl_File_E_OVERFLOW; + + size_t const nBytesToWrite = sal::static_int_cast< size_t >(uBytesToWrite); + + // write at current fileptr; fileptr += *pBytesWritten; + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->writeFileAt(pImpl->m_fileptr, pBuffer, nBytesToWrite, pBytesWritten); + if (result == osl_File_E_None) + pImpl->m_fileptr += *pBytesWritten; + + return result; +} + +oslFileError SAL_CALL osl_readFileAt( + oslFileHandle Handle, + sal_uInt64 uOffset, + void* pBuffer, + sal_uInt64 uBytesRequested, + sal_uInt64* pBytesRead) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pBuffer) || (!pBytesRead)) + return osl_File_E_INVAL; + + if (!(pImpl->m_state & State::Seekable)) + return osl_File_E_SPIPE; + + if (exceedsMaxOffT(uOffset)) + return osl_File_E_OVERFLOW; + + off_t const nOffset = sal::static_int_cast< off_t >(uOffset); + + static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max(); + if (g_limit_ssize_t < uBytesRequested) + return osl_File_E_OVERFLOW; + + size_t const nBytesRequested = sal::static_int_cast< size_t >(uBytesRequested); + + // read at specified fileptr + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + + return pImpl->readFileAt(nOffset, pBuffer, nBytesRequested, pBytesRead); +} + +oslFileError SAL_CALL osl_writeFileAt( + oslFileHandle Handle, + sal_uInt64 uOffset, + const void* pBuffer, + sal_uInt64 uBytesToWrite, + sal_uInt64* pBytesWritten) +{ + FileHandle_Impl* pImpl = static_cast(Handle); + + if ((!pImpl) || (pImpl->m_fd == -1) || (!pBuffer) || (!pBytesWritten)) + return osl_File_E_INVAL; + + if (!(pImpl->m_state & State::Seekable)) + return osl_File_E_SPIPE; + + if (!(pImpl->m_state & State::Writeable)) + return osl_File_E_BADF; + + if (exceedsMaxOffT(uOffset)) + return osl_File_E_OVERFLOW; + + off_t const nOffset = sal::static_int_cast< off_t >(uOffset); + + static sal_uInt64 const g_limit_ssize_t = std::numeric_limits< ssize_t >::max(); + if (g_limit_ssize_t < uBytesToWrite) + return osl_File_E_OVERFLOW; + + size_t const nBytesToWrite = sal::static_int_cast< size_t >(uBytesToWrite); + + // write at specified fileptr + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + + return pImpl->writeFileAt(nOffset, pBuffer, nBytesToWrite, pBytesWritten); +} + +oslFileError SAL_CALL osl_isEndOfFile(oslFileHandle Handle, sal_Bool *pIsEOF) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pIsEOF)) + return osl_File_E_INVAL; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + *pIsEOF = (pImpl->getPos() == pImpl->getSize()); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_getFilePos(oslFileHandle Handle, sal_uInt64* pPos) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pPos)) + return osl_File_E_INVAL; + + // no need to lock because pos is atomic + *pPos = pImpl->getPos(); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_Int64 uOffset) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1))) + return osl_File_E_INVAL; + + if (exceedsMaxOffT(uOffset) || exceedsMinOffT(uOffset)) + return osl_File_E_OVERFLOW; + + off_t nPos = 0, nOffset = sal::static_int_cast< off_t >(uOffset); + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + switch (uHow) + { + case osl_Pos_Absolut: + if (nOffset < 0) + return osl_File_E_INVAL; + break; + + case osl_Pos_Current: + nPos = sal::static_int_cast< off_t >(pImpl->getPos()); + if ((nOffset < 0) && (nPos < -1*nOffset)) + return osl_File_E_INVAL; + + assert(nPos >= 0); + if (nOffset > MAX_OFF_T - nPos) + return osl_File_E_OVERFLOW; + break; + + case osl_Pos_End: + nPos = sal::static_int_cast< off_t >(pImpl->getSize()); + if ((nOffset < 0) && (nPos < -1*nOffset)) + return osl_File_E_INVAL; + + assert(nPos >= 0); + if (nOffset > MAX_OFF_T - nPos) + return osl_File_E_OVERFLOW; + break; + + default: + return osl_File_E_INVAL; + } + + pImpl->setPos(nPos + nOffset); + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_getFileSize(oslFileHandle Handle, sal_uInt64* pSize) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || ((pImpl->m_kind == FileHandle_Impl::KIND_FD) && (pImpl->m_fd == -1)) || (!pSize)) + return osl_File_E_INVAL; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + *pSize = pImpl->getSize(); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_setFileSize(oslFileHandle Handle, sal_uInt64 uSize) +{ + FileHandle_Impl* pImpl = static_cast< FileHandle_Impl* >(Handle); + + if ((!pImpl) || (pImpl->m_fd == -1)) + return osl_File_E_INVAL; + + if (!(pImpl->m_state & State::Writeable)) + return osl_File_E_BADF; + + if (exceedsMaxOffT(uSize)) + return osl_File_E_OVERFLOW; + + oslFileError result = pImpl->syncFile(); + if (result != osl_File_E_None) + return result; + + pImpl->m_bufptr = -1; + pImpl->m_buflen = 0; + + return pImpl->setSize(uSize); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_error_transl.cxx b/sal/osl/unx/file_error_transl.cxx new file mode 100644 index 000000000..ad6e00558 --- /dev/null +++ b/sal/osl/unx/file_error_transl.cxx @@ -0,0 +1,181 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "file_error_transl.hxx" + +oslFileError oslTranslateFileError(int Errno) +{ + switch (Errno) + { + case EPERM: + return osl_File_E_PERM; + + case ENOENT: + return osl_File_E_NOENT; + + case ESRCH: + return osl_File_E_SRCH; + + case EINTR: + return osl_File_E_INTR; + + case EIO: + return osl_File_E_IO; + + case ENXIO: + return osl_File_E_IO; + + case E2BIG: + return osl_File_E_2BIG; + + case ENOEXEC: + return osl_File_E_NOEXEC; + + case EBADF: + return osl_File_E_BADF; + + case ECHILD: + return osl_File_E_CHILD; + + case EAGAIN: + return osl_File_E_AGAIN; + + case ENOMEM: + return osl_File_E_NOMEM; + + case EACCES: + return osl_File_E_ACCES; + + case EFAULT: + return osl_File_E_FAULT; + + case EBUSY: + return osl_File_E_BUSY; + + case EEXIST: + return osl_File_E_EXIST; + + case EXDEV: + return osl_File_E_XDEV; + + case ENODEV: + return osl_File_E_NODEV; + + case ENOTDIR: + return osl_File_E_NOTDIR; + + case EISDIR: + return osl_File_E_ISDIR; + + case EINVAL: + return osl_File_E_INVAL; + + case ENFILE: + return osl_File_E_NFILE; + + case EMFILE: + return osl_File_E_MFILE; + + case ENOTTY: + return osl_File_E_NOTTY; + + case EFBIG: + return osl_File_E_FBIG; + + case ENOSPC: + return osl_File_E_NOSPC; + + case ESPIPE: + return osl_File_E_SPIPE; + + case EROFS: + return osl_File_E_ROFS; + + case EMLINK: + return osl_File_E_MLINK; + + case EPIPE: + return osl_File_E_PIPE; + + case EDOM: + return osl_File_E_DOM; + + case ERANGE: + return osl_File_E_RANGE; + + case EDEADLK: + return osl_File_E_DEADLK; + + case ENAMETOOLONG: + return osl_File_E_NAMETOOLONG; + + case ENOLCK: + return osl_File_E_NOLCK; + + case ENOSYS: + case ENOTSUP: +#if EOPNOTSUPP != ENOTSUP + case EOPNOTSUPP: +#endif + return osl_File_E_NOSYS; + +#if !defined(AIX) || !(defined(_ALL_SOURCE) && !defined(_LINUX_SOURCE_COMPAT)) + case ENOTEMPTY: + return osl_File_E_NOTEMPTY; +#endif + + case ELOOP: + return osl_File_E_LOOP; + +#if !(defined(MACOSX) || defined(NETBSD) || defined(FREEBSD) || defined(OPENBSD) \ + || defined(DRAGONFLY)) + case EILSEQ: + return osl_File_E_ILSEQ; + + case ENOLINK: + return osl_File_E_NOLINK; + + case EMULTIHOP: + return osl_File_E_MULTIHOP; +#endif /* MACOSX */ + +#if !defined(HAIKU) + case EUSERS: + return osl_File_E_USERS; +#endif + + case EOVERFLOW: + return osl_File_E_OVERFLOW; + + case ETIMEDOUT: + return osl_File_E_TIMEDOUT; + + default: + assert(Errno != 0); + /* FIXME translateFileError: is this alright? Or add a new one: osl_File_E_Unknown? */ + return osl_File_E_invalidError; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_error_transl.hxx b/sal/osl/unx/file_error_transl.hxx new file mode 100644 index 000000000..81d972032 --- /dev/null +++ b/sal/osl/unx/file_error_transl.hxx @@ -0,0 +1,37 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_FILE_ERROR_TRANSL_HXX +#define INCLUDED_SAL_OSL_UNX_FILE_ERROR_TRANSL_HXX + +#include +#include + +/** Translate errno's to osl file errors + + @param [in] nErrno the errno; must not be 0 + + @returns the osl error code appropriate to the errno + +*/ +oslFileError oslTranslateFileError(int Errno); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_impl.hxx b/sal/osl/unx/file_impl.hxx new file mode 100644 index 000000000..2b374cb68 --- /dev/null +++ b/sal/osl/unx/file_impl.hxx @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_FILE_IMPL_HXX +#define INCLUDED_SAL_OSL_UNX_FILE_IMPL_HXX + +#include +#include +#include +#include + +struct DirectoryItem_Impl +{ + OString m_strFilePath; /* holds native file name */ + sal_Int32 m_RefCount; + unsigned char m_DType; + + explicit DirectoryItem_Impl( + OString strFilePath, unsigned char DType = 0); + ~DirectoryItem_Impl(); + + void acquire(); /* @see osl_acquireDirectoryItem() */ + void release(); /* @see osl_releaseDirectoryItem() */ + + oslFileType getFileType() const; +}; + +oslFileError openFile( + rtl_uString * pustrFileURL, oslFileHandle * pHandle, sal_uInt32 uFlags, + mode_t mode); + +oslFileError openFilePath( + const OString& filePath, + oslFileHandle* pHandle, + sal_uInt32 uFlags, mode_t mode ); + +#endif // INCLUDED_SAL_OSL_UNX_FILE_IMPL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_misc.cxx b/sal/osl/unx/file_misc.cxx new file mode 100644 index 000000000..b2d6010fe --- /dev/null +++ b/sal/osl/unx/file_misc.cxx @@ -0,0 +1,1049 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "system.hxx" +#include "file_impl.hxx" +#include "file_error_transl.hxx" +#include "file_path_helper.hxx" +#include "file_url.hxx" +#include "uunxapi.hxx" +#include "readwrite_helper.hxx" +#include "unixerrnostring.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#ifdef ANDROID +#include +#endif + +/************************************************************************ + * TODO + * + * - Fix: check for corresponding struct sizes in exported functions + * - check size/use of oslDirectory + * - check size/use of oslDirectoryItem + ***********************************************************************/ + +namespace { + +struct DirectoryImpl +{ + OString strPath; /* holds native directory path */ + DIR* pDirStruct; +#ifdef ANDROID + enum Kind + { + KIND_DIRENT = 1, + KIND_ASSETS = 2 + }; + int eKind; + lo_apk_dir* pApkDirStruct; +#endif +}; + +} + +DirectoryItem_Impl::DirectoryItem_Impl( + OString strFilePath, unsigned char DType) + : m_strFilePath (std::move(strFilePath)), + m_RefCount (1), + m_DType (DType) +{ +} +DirectoryItem_Impl::~DirectoryItem_Impl() +{ +} + +void DirectoryItem_Impl::acquire() +{ + ++m_RefCount; +} +void DirectoryItem_Impl::release() +{ + if (--m_RefCount == 0) + delete this; +} + +oslFileType DirectoryItem_Impl::getFileType() const +{ + switch (m_DType) + { +#ifdef _DIRENT_HAVE_D_TYPE + case DT_LNK: + return osl_File_Type_Link; + case DT_DIR: + return osl_File_Type_Directory; + case DT_REG: + return osl_File_Type_Regular; + case DT_FIFO: + return osl_File_Type_Fifo; + case DT_SOCK: + return osl_File_Type_Socket; + case DT_CHR: + case DT_BLK: + return osl_File_Type_Special; +#endif /* _DIRENT_HAVE_D_TYPE */ + default: + break; + } + return osl_File_Type_Unknown; +} + +static oslFileError osl_psz_createDirectory( + char const * pszPath, sal_uInt32 flags); +static oslFileError osl_psz_removeDirectory(const char* pszPath); + +oslFileError SAL_CALL osl_openDirectory(rtl_uString* ustrDirectoryURL, oslDirectory* pDirectory) +{ + oslFileError eRet; + + OString path; + + if ((ustrDirectoryURL == nullptr) || (ustrDirectoryURL->length == 0) || (pDirectory == nullptr)) + return osl_File_E_INVAL; + + /* convert file URL to system path */ + eRet = osl::detail::convertUrlToPathname(OUString::unacquired(&ustrDirectoryURL), &path); + + if( eRet != osl_File_E_None ) + return eRet; + + osl_systemPathRemoveSeparator(path.pData); + +#ifdef MACOSX + { + auto const n = std::max(int(path.getLength() + 1), int(PATH_MAX)); + auto const tmp = std::make_unique(n); + std::strcpy(tmp.get(), path.getStr()); + if (macxp_resolveAlias(tmp.get(), n) != 0) { + return oslTranslateFileError(errno); + } + path = OString(tmp.get(), std::strlen(tmp.get())); + } +#endif /* MACOSX */ + +#ifdef ANDROID + if( strncmp( path.getStr(), "/assets/", sizeof( "/assets/" ) - 1) == 0 ) + { + lo_apk_dir *pdir = lo_apk_opendir( path.getStr() ); + + if( pdir ) + { + DirectoryImpl* pDirImpl = new(std::nothrow) DirectoryImpl; + + if( pDirImpl ) + { + pDirImpl->eKind = DirectoryImpl::KIND_ASSETS; + pDirImpl->pApkDirStruct = pdir; + pDirImpl->strPath = path; + + *pDirectory = (oslDirectory) pDirImpl; + return osl_File_E_None; + } + else + { + errno = ENOMEM; + lo_apk_closedir( pdir ); + } + } + } + else +#endif + { + /* open directory */ + DIR *pdir = opendir( path.getStr() ); + + if( pdir ) + { + SAL_INFO("sal.file", "opendir(" << path << ") => " << pdir); + + /* create and initialize impl structure */ + DirectoryImpl* pDirImpl = new(std::nothrow) DirectoryImpl; + + if( pDirImpl ) + { + pDirImpl->pDirStruct = pdir; + pDirImpl->strPath = path; +#ifdef ANDROID + pDirImpl->eKind = DirectoryImpl::KIND_DIRENT; +#endif + *pDirectory = static_cast(pDirImpl); + return osl_File_E_None; + } + errno = ENOMEM; + closedir( pdir ); + } + else + { + int e = errno; + SAL_INFO("sal.file", "opendir(" << path << "): " << UnixErrnoString(e)); + // Restore errno after possible modification by SAL_INFO above + errno = e; + } + } + + return oslTranslateFileError(errno); +} + +oslFileError SAL_CALL osl_closeDirectory(oslDirectory pDirectory) +{ + SAL_WARN_IF(!pDirectory, "sal.file", "pDirectory is nullptr"); + DirectoryImpl* pDirImpl = static_cast(pDirectory); + oslFileError err = osl_File_E_None; + + if (!pDirImpl) + return osl_File_E_INVAL; + +#ifdef ANDROID + if (pDirImpl->eKind == DirectoryImpl::KIND_ASSETS) + { + if (lo_apk_closedir(pDirImpl->pApkDirStruct)) + err = osl_File_E_IO; + } + else +#endif + { + if (closedir( pDirImpl->pDirStruct) != 0) + { + int e = errno; + SAL_INFO("sal.file", "closedir(" << pDirImpl->pDirStruct << "): " << UnixErrnoString(e)); + err = oslTranslateFileError(e); + } + else + SAL_INFO("sal.file", "closedir(" << pDirImpl->pDirStruct << "): OK"); + } + + delete pDirImpl; + + return err; +} + +/********************************************** + * osl_readdir_impl_ + * + * readdir wrapper, filters out "." and ".." + * on request + *********************************************/ + +static struct dirent* osl_readdir_impl_(DIR* pdir) +{ + struct dirent* pdirent; + + while ((pdirent = readdir(pdir)) != nullptr) + { + if ((strcmp(pdirent->d_name, ".") == 0) || (strcmp(pdirent->d_name, "..") == 0)) + continue; + break; + } + + return pdirent; +} + +oslFileError SAL_CALL osl_getNextDirectoryItem(oslDirectory pDirectory, + oslDirectoryItem* pItem, SAL_UNUSED_PARAMETER sal_uInt32 /*uHint*/) +{ + SAL_WARN_IF(!pDirectory, "sal.file", "pDirectory is nullptr"); + SAL_WARN_IF(!pItem, "sal.file", "pItem is nullptr"); + + DirectoryImpl* pDirImpl = static_cast(pDirectory); + OString strFileName; + struct dirent* pEntry; + + if ((pDirectory == nullptr) || (pItem == nullptr)) + return osl_File_E_INVAL; + +#ifdef ANDROID + if(pDirImpl->eKind == DirectoryImpl::KIND_ASSETS) + { + pEntry = lo_apk_readdir(pDirImpl->pApkDirStruct); + } + else +#endif + { + pEntry = osl_readdir_impl_(pDirImpl->pDirStruct); + } + + if (!pEntry) + return osl_File_E_NOENT; + + char const * filename = pEntry->d_name; + +#if defined(MACOSX) + // convert decomposed filename to precomposed UTF-8 + char composed_name[BUFSIZ]; + CFMutableStringRef strRef = CFStringCreateMutable(nullptr, 0 ); + CFStringAppendCString(strRef, filename, kCFStringEncodingUTF8); // UTF8 is default on Mac OSX + CFStringNormalize(strRef, kCFStringNormalizationFormC); + CFStringGetCString(strRef, composed_name, BUFSIZ, kCFStringEncodingUTF8); + CFRelease(strRef); + filename = composed_name; +#endif + + strFileName = OString(filename, strlen(filename)); + + auto const strFilePath = osl::systemPathMakeAbsolutePath(pDirImpl->strPath, strFileName); + + DirectoryItem_Impl* pImpl = static_cast< DirectoryItem_Impl* >(*pItem); + if (pImpl) + { + pImpl->release(); + pImpl = nullptr; + } +#ifdef _DIRENT_HAVE_D_TYPE + pImpl = new DirectoryItem_Impl(std::move(strFilePath), pEntry->d_type); +#else + pImpl = new DirectoryItem_Impl(std::move(strFilePath)); +#endif /* _DIRENT_HAVE_D_TYPE */ + *pItem = pImpl; + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_getDirectoryItem(rtl_uString* ustrFileURL, oslDirectoryItem* pItem) +{ + OString strSystemPath; + oslFileError osl_error = osl_File_E_INVAL; + + if ((!ustrFileURL) || (ustrFileURL->length == 0) || (!pItem)) + return osl_File_E_INVAL; + + osl_error = osl::detail::convertUrlToPathname(OUString::unacquired(&ustrFileURL), &strSystemPath); + if (osl_error != osl_File_E_None) + return osl_error; + + osl_systemPathRemoveSeparator(strSystemPath.pData); + + if (osl::access(strSystemPath, F_OK) == -1) + { + osl_error = oslTranslateFileError(errno); + } + else + { + *pItem = new DirectoryItem_Impl(std::move(strSystemPath)); + } + + return osl_error; +} + +oslFileError SAL_CALL osl_acquireDirectoryItem( oslDirectoryItem Item ) +{ + DirectoryItem_Impl * pImpl = static_cast< DirectoryItem_Impl* >(Item); + if (pImpl == nullptr) + return osl_File_E_INVAL; + + pImpl->acquire(); + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_releaseDirectoryItem( oslDirectoryItem Item ) +{ + DirectoryItem_Impl * pImpl = static_cast< DirectoryItem_Impl* >(Item); + if (pImpl == nullptr) + return osl_File_E_INVAL; + + pImpl->release(); + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_createDirectory( rtl_uString* ustrDirectoryURL ) +{ + return osl_createDirectoryWithFlags( + ustrDirectoryURL, osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); +} + +oslFileError osl_createDirectoryWithFlags( + rtl_uString * ustrDirectoryURL, sal_uInt32 flags) +{ + char path[PATH_MAX]; + oslFileError eRet; + + SAL_WARN_IF((!ustrDirectoryURL) || (ustrDirectoryURL->length == 0), + "sal.file", "Invalid directory URL"); + + /* convert directory url to system path */ + eRet = FileURLToPath( path, PATH_MAX, ustrDirectoryURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( path, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return osl_psz_createDirectory( path, flags ); +} + +oslFileError SAL_CALL osl_removeDirectory( rtl_uString* ustrDirectoryURL ) +{ + char path[PATH_MAX]; + oslFileError eRet; + + SAL_WARN_IF((!ustrDirectoryURL) || (ustrDirectoryURL->length == 0), + "sal.file", "Invalid directory URL"); + + /* convert directory url to system path */ + eRet = FileURLToPath( path, PATH_MAX, ustrDirectoryURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( path, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return osl_psz_removeDirectory( path ); +} + +oslFileError osl_psz_createDirectory(char const * pszPath, sal_uInt32 flags) +{ + int nRet=0; + int mode + = (((flags & osl_File_OpenFlag_Read) == 0 + ? 0 + : ((flags & osl_File_OpenFlag_Private) == 0 + ? S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH + : S_IRUSR | S_IXUSR)) + | ((flags & osl_File_OpenFlag_Write) == 0 + ? 0 + : ((flags & osl_File_OpenFlag_Private) == 0 + ? S_IWUSR | S_IWGRP | S_IWOTH + : S_IWUSR))); + + nRet = mkdir(pszPath,mode); + + if ( nRet < 0 ) + { + nRet=errno; + SAL_INFO("sal.file", "mkdir(" << pszPath << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(nRet)); + return oslTranslateFileError(nRet); + } + else + SAL_INFO("sal.file", "mkdir(" << pszPath << ",0" << std::oct << mode << std::dec << "): OK"); + + return osl_File_E_None; +} + +static oslFileError osl_psz_removeDirectory( const char* pszPath ) +{ + int nRet = rmdir(pszPath); + + if ( nRet < 0 ) + { + nRet=errno; + SAL_INFO("sal.file", "rmdir(" << pszPath << "): " << UnixErrnoString(nRet)); + return oslTranslateFileError(nRet); + } + else + SAL_INFO("sal.file", "rmdir(" << pszPath << "): OK"); + + return osl_File_E_None; +} + +static int path_make_parent(char* path) +{ + int i = rtl_str_lastIndexOfChar(path, '/'); + + if (i > 0) + { + *(path + i) = 0; + return i; + } + return 0; +} + +static int create_dir_with_callback( + char* directory_path, + oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, + void* pData) +{ + if (osl::mkdir(directory_path, S_IRWXU | S_IRWXG | S_IRWXO) == 0) + { + if (aDirectoryCreationCallbackFunc) + { + OUString url; + osl::detail::convertPathnameToUrl(directory_path, &url); + aDirectoryCreationCallbackFunc(pData, url.pData); + } + return 0; + } + return errno; +} + +static oslFileError create_dir_recursively_( + char* dir_path, + oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, + void* pData) +{ + OSL_PRECOND((rtl_str_getLength(dir_path) > 0) && ((dir_path + (rtl_str_getLength(dir_path) - 1)) != (dir_path + rtl_str_lastIndexOfChar(dir_path, '/'))), + "Path must not end with a slash"); + + int native_err = create_dir_with_callback( + dir_path, aDirectoryCreationCallbackFunc, pData); + + if (native_err == 0) + return osl_File_E_None; + + if (native_err != ENOENT) + return oslTranslateFileError(native_err); + + // we step back until '/a_dir' at maximum because + // we should get an error unequal ENOENT when + // we try to create 'a_dir' at '/' and would so + // return before + int pos = path_make_parent(dir_path); + + oslFileError osl_error = create_dir_recursively_( + dir_path, aDirectoryCreationCallbackFunc, pData); + + if (osl_error != osl_File_E_None && osl_error != osl_File_E_EXIST) + return osl_error; + + dir_path[pos] = '/'; + + return create_dir_recursively_(dir_path, aDirectoryCreationCallbackFunc, pData); +} + +oslFileError SAL_CALL osl_createDirectoryPath( + rtl_uString* aDirectoryUrl, + oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, + void* pData) +{ + if (aDirectoryUrl == nullptr) + return osl_File_E_INVAL; + + OString sys_path; + oslFileError osl_error = osl::detail::convertUrlToPathname( + OUString::unacquired(&aDirectoryUrl), &sys_path); + + if (osl_error != osl_File_E_None) + return osl_error; + + osl::systemPathRemoveSeparator(sys_path); + + // const_cast because sys_path is a local copy which we want to modify inplace instead of + // copy it into another buffer on the heap again + return create_dir_recursively_(sys_path.pData->buffer, aDirectoryCreationCallbackFunc, pData); +} + +static oslFileError osl_unlinkFile(const char* pszPath); +static oslFileError osl_psz_copyFile(const char* pszPath, const char* pszDestPath, bool preserveMetadata); +static oslFileError osl_psz_moveFile(const char* pszPath, const char* pszDestPath); + +static oslFileError oslDoCopy(const char* pszSourceFileName, const char* pszDestFileName, mode_t nMode, size_t nSourceSize, bool DestFileExists); +static void attemptChangeMetadata(const char* pszFileName, mode_t nMode, time_t nAcTime, time_t nModTime, uid_t nUID, gid_t nGID); +static int oslDoCopyLink(const char* pszSourceFileName, const char* pszDestFileName); +static int oslDoCopyFile(const char* pszSourceFileName, const char* pszDestFileName, size_t nSourceSize, mode_t mode); +static oslFileError oslDoMoveFile(const char* pszPath, const char* pszDestPath); + +oslFileError SAL_CALL osl_moveFile( rtl_uString* ustrFileURL, rtl_uString* ustrDestURL ) +{ + char srcPath[PATH_MAX]; + char destPath[PATH_MAX]; + oslFileError eRet; + + SAL_WARN_IF((!ustrFileURL) || (ustrFileURL->length == 0), "sal.file", "Invalid source file URL"); + SAL_WARN_IF((!ustrDestURL) || (ustrDestURL->length == 0), "sal.file", "Invalid destination file URL"); + + /* convert source url to system path */ + eRet = FileURLToPath( srcPath, PATH_MAX, ustrFileURL ); + if( eRet != osl_File_E_None ) + return eRet; + + /* convert destination url to system path */ + eRet = FileURLToPath( destPath, PATH_MAX, ustrDestURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( srcPath, PATH_MAX ) != 0 || macxp_resolveAlias( destPath, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return oslDoMoveFile( srcPath, destPath ); +} + +oslFileError SAL_CALL osl_replaceFile(rtl_uString* ustrFileURL, rtl_uString* ustrDestURL) +{ + int nGid = -1; + char destPath[PATH_MAX]; + oslFileError eRet = FileURLToPath(destPath, PATH_MAX, ustrDestURL); + if (eRet == osl_File_E_None) + { + struct stat aFileStat; + // coverity[fs_check_call] - unavoidable TOCTOU + int nRet = stat(destPath, &aFileStat); + if (nRet == -1) + { + nRet = errno; + SAL_INFO("sal.file", "stat(" << destPath << "): " << UnixErrnoString(nRet)); + } + else + { + nGid = aFileStat.st_gid; + } + } + + eRet = osl_moveFile(ustrFileURL, ustrDestURL); + + if (eRet == osl_File_E_None && nGid != -1) + { + int nRet = chown(destPath, -1, nGid); + if (nRet == -1) + { + nRet = errno; + SAL_INFO("sal.file", + "chown(" << destPath << "-1, " << nGid << "): " << UnixErrnoString(nRet)); + } + } + + return eRet; +} + +oslFileError SAL_CALL osl_copyFile( rtl_uString* ustrFileURL, rtl_uString* ustrDestURL ) +{ + char srcPath[PATH_MAX]; + char destPath[PATH_MAX]; + oslFileError eRet; + + SAL_WARN_IF((!ustrFileURL) || (ustrFileURL->length == 0), "sal.file", "Invalid source file URL"); + SAL_WARN_IF((!ustrDestURL) || (ustrDestURL->length == 0), "sal.file", "Invalid destination file URL"); + + /* convert source url to system path */ + eRet = FileURLToPath( srcPath, PATH_MAX, ustrFileURL ); + if( eRet != osl_File_E_None ) + return eRet; + + /* convert destination url to system path */ + eRet = FileURLToPath( destPath, PATH_MAX, ustrDestURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( srcPath, PATH_MAX ) != 0 || macxp_resolveAlias( destPath, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return osl_psz_copyFile( srcPath, destPath, false ); +} + +oslFileError SAL_CALL osl_removeFile(rtl_uString* ustrFileURL) +{ + char path[PATH_MAX]; + oslFileError eRet; + + SAL_WARN_IF(!ustrFileURL || ustrFileURL->length == 0, "sal.file", "Invalid file URL"); + + /* convert file url to system path */ + eRet = FileURLToPath(path, PATH_MAX, ustrFileURL); + if (eRet != osl_File_E_None) + return eRet; + +#ifdef MACOSX + if (macxp_resolveAlias(path, PATH_MAX) != 0) + return oslTranslateFileError(errno); +#endif/* MACOSX */ + + return osl_unlinkFile(path); +} + +static oslFileError oslDoMoveFile(const char* pszPath, const char* pszDestPath) +{ + oslFileError tErr = osl_psz_moveFile(pszPath,pszDestPath); + if (tErr == osl_File_E_None) + return tErr; + + if (tErr != osl_File_E_XDEV) + return tErr; + + tErr = osl_psz_copyFile(pszPath,pszDestPath, true); + + if (tErr != osl_File_E_None) + { + osl_unlinkFile(pszDestPath); + return tErr; + } + + tErr = osl_unlinkFile(pszPath); + + return tErr; +} + +static oslFileError osl_unlinkFile(const char* pszPath) +{ + int nRet=0; + struct stat aStat; + + nRet = lstat_c(pszPath,&aStat); + if (nRet < 0) + { + nRet=errno; + return oslTranslateFileError(nRet); + } + + if (S_ISDIR(aStat.st_mode)) + return osl_File_E_ISDIR; + + nRet = unlink(pszPath); + if (nRet < 0) + { + nRet=errno; + SAL_INFO("sal.file", "unlink(" << pszPath << "): " << UnixErrnoString(nRet)); + return oslTranslateFileError(nRet); + } + else + SAL_INFO("sal.file", "unlink(" << pszPath << "): OK"); + + return osl_File_E_None; +} + +static oslFileError osl_psz_moveFile(const char* pszPath, const char* pszDestPath) +{ + int nRet = rename(pszPath,pszDestPath); + + if (nRet < 0) + { + nRet=errno; + SAL_INFO("sal.file", "rename(" << pszPath << "," << pszDestPath << "): " << UnixErrnoString(nRet)); + return oslTranslateFileError(nRet); + } + else + SAL_INFO("sal.file", "rename(" << pszPath << "," << pszDestPath << "): OK"); + + return osl_File_E_None; +} + +static oslFileError osl_psz_copyFile( const char* pszPath, const char* pszDestPath, bool preserveMetadata ) +{ + time_t nAcTime=0; + time_t nModTime=0; + uid_t nUID=0; + gid_t nGID=0; + int nRet=0; + mode_t nMode=0; + struct stat aFileStat; + oslFileError tErr=osl_File_E_invalidError; + size_t nSourceSize=0; + bool DestFileExists=true; + + /* mfe: does the source file really exists? */ + nRet = lstat_c(pszPath,&aFileStat); + + if (nRet < 0) + { + nRet=errno; + return oslTranslateFileError(nRet); + } + + /* we do only copy files here */ + if (S_ISDIR(aFileStat.st_mode)) + return osl_File_E_ISDIR; + + nSourceSize = static_cast< size_t >(aFileStat.st_size); + nMode = aFileStat.st_mode; + nAcTime = aFileStat.st_atime; + nModTime = aFileStat.st_mtime; + nUID = aFileStat.st_uid; + nGID = aFileStat.st_gid; + + nRet = stat_c(pszDestPath,&aFileStat); + if (nRet < 0) + { + nRet=errno; + +#ifdef IOS + // Checking for nonexistent files at least in the iCloud cache directory (like + // "/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/helloodt0.odt" fails + // with EPERM, not ENOENT. + if (nRet == EPERM) + DestFileExists=false; +#endif + + if (nRet == ENOENT) + DestFileExists=false; + } + + /* mfe: the destination file must not be a directory! */ + if (nRet == 0 && S_ISDIR(aFileStat.st_mode)) + return osl_File_E_ISDIR; + + /* mfe: file does not exists or is no dir */ + + tErr = oslDoCopy(pszPath, pszDestPath, nMode, nSourceSize, DestFileExists); + + if (tErr != osl_File_E_None) + return tErr; + + if (preserveMetadata) + attemptChangeMetadata(pszDestPath, nMode, nAcTime, nModTime, nUID, nGID); + + return tErr; +} + +static oslFileError oslDoCopy(const char* pszSourceFileName, const char* pszDestFileName, mode_t nMode, size_t nSourceSize, bool DestFileExists) +{ + int nRet=0; + + OString tmpDestFile; + if ( DestFileExists ) + { + //TODO: better pick a temp file name instead of adding .osl-tmp: + // use the destination file to avoid EXDEV /* Cross-device link */ + tmpDestFile = pszDestFileName + OString::Concat(".osl-tmp"); + if (rename(pszDestFileName, tmpDestFile.getStr()) != 0) + { + int e = errno; + SAL_INFO("sal.file", "rename(" << pszDestFileName << ", " << tmpDestFile + << "): " << UnixErrnoString(e)); + if (e == ENOENT) + { + DestFileExists = false; + } + else + { + return osl_File_E_EXIST; // for want of a better error code + } + } + else + { + SAL_INFO("sal.file", "rename(" << pszDestFileName << ", " << tmpDestFile + << "): OK"); + } + } + + /* mfe: should be S_ISREG */ + if ( !S_ISLNK(nMode) ) + { + /* copy SourceFile to DestFile */ + nRet = oslDoCopyFile(pszSourceFileName,pszDestFileName,nSourceSize, nMode); + } + /* mfe: OK redundant at the moment */ + else if ( S_ISLNK(nMode) ) + { + nRet = oslDoCopyLink(pszSourceFileName,pszDestFileName); + } + else + { + /* mfe: what to do here? */ + nRet=ENOSYS; + } + + if ( nRet > 0 && DestFileExists ) + { + if (unlink(pszDestFileName) != 0) + { + int e = errno; + SAL_INFO("sal.file", "unlink(" << pszDestFileName << "): " << UnixErrnoString(e)); + } + else + SAL_INFO("sal.file", "unlink(" << pszDestFileName << "): OK"); + + if (rename(tmpDestFile.getStr(), pszDestFileName) != 0) + { + int e = errno; + SAL_INFO("sal.file", "rename(" << tmpDestFile << ", " << pszDestFileName + << "): " << UnixErrnoString(e)); + } + else + SAL_INFO("sal.file", "rename(" << tmpDestFile << ", " << pszDestFileName << "): OK"); + } + + if ( nRet > 0 ) + { + return oslTranslateFileError(nRet); + } + + if ( DestFileExists ) + { + unlink(tmpDestFile.getStr()); + } + + return osl_File_E_None; +} + +void attemptChangeMetadata( const char* pszFileName, mode_t nMode, time_t nAcTime, time_t nModTime, uid_t nUID, gid_t nGID) +{ + struct utimbuf aTimeBuffer; + +#if !defined AT_FDCWD + if (!S_ISLNK(nMode) && chmod(pszFileName, nMode) < 0) +#else + if ( fchmodat(AT_FDCWD, pszFileName, nMode, AT_SYMLINK_NOFOLLOW) < 0 ) +#endif + { + int e = errno; + SAL_INFO("sal.file", "chmod(" << pszFileName << ",0" << std::oct << nMode << std::dec <<"): " << UnixErrnoString(e)); + } + else + SAL_INFO("sal.file", "chmod(" << pszFileName << ",0" << std::oct << nMode << std::dec <<"): OK"); + + // No way to change utime of a symlink itself: + if (!S_ISLNK(nMode)) + { + aTimeBuffer.actime=nAcTime; + aTimeBuffer.modtime=nModTime; + if ( utime(pszFileName,&aTimeBuffer) < 0 ) + { + int e = errno; + SAL_INFO("sal.file", "utime(" << pszFileName << "): errno " << e); + } + } + + if ( nUID != getuid() ) + { + nUID=getuid(); + } + if ( lchown(pszFileName,nUID,nGID) < 0 ) + { + int e = errno; + SAL_INFO("sal.file", "lchown(" << pszFileName << "): errno " << e); + } + else + SAL_INFO("sal.file", "lchown(" << pszFileName << "): OK"); +} + +static int oslDoCopyLink(const char* pszSourceFileName, const char* pszDestFileName) +{ + int nRet=0; + + /* mfe: if dest file is symbolic link remove the link and place the file instead (hro says so) */ + /* mfe: if source is a link copy the link and not the file it points to (hro says so) */ + char pszLinkContent[PATH_MAX+1]; + + pszLinkContent[0] = '\0'; + + nRet = readlink(pszSourceFileName,pszLinkContent,PATH_MAX); + + if ( nRet < 0 ) + { + nRet=errno; + return nRet; + } + + pszLinkContent[ nRet ] = 0; + + nRet = symlink(pszLinkContent,pszDestFileName); + + if ( nRet < 0 ) + { + nRet=errno; + return nRet; + } + + return 0; +} + +static int oslDoCopyFile(const char* pszSourceFileName, const char* pszDestFileName, size_t nSourceSize, mode_t mode) +{ + oslFileHandle SourceFileFH=nullptr; + int DestFileFD=0; + int nRet=0; + + if (openFilePath(pszSourceFileName, + &SourceFileFH, + osl_File_OpenFlag_Read|osl_File_OpenFlag_NoLock|osl_File_OpenFlag_NoExcl, mode_t(-1)) != osl_File_E_None) + { + // Let's hope errno is still set relevantly after openFilePath... + nRet=errno; + return nRet; + } + + DestFileFD=open(pszDestFileName, O_WRONLY | O_CREAT, mode); + + if ( DestFileFD < 0 ) + { + nRet=errno; + SAL_INFO("sal.file", "open(" << pszDestFileName << ",O_WRONLY|O_CREAT,0" << std::oct << mode << std::dec << "): " << UnixErrnoString(nRet)); + osl_closeFile(SourceFileFH); + return nRet; + } + else + SAL_INFO("sal.file", "open(" << pszDestFileName << ",O_WRONLY|O_CREAT,0" << std::oct << mode << std::dec << "): OK"); + + size_t nRemains = nSourceSize; + + if ( nRemains ) + { + /* mmap has problems, try the direct streaming */ + char pBuffer[0x7FFF]; + + do + { + size_t nToRead = std::min( sizeof(pBuffer), nRemains ); + sal_uInt64 nRead; + bool succeeded; + if ( osl_readFile( SourceFileFH, pBuffer, nToRead, &nRead ) != osl_File_E_None || nRead > nToRead || nRead == 0 ) + break; + + succeeded = safeWrite( DestFileFD, pBuffer, nRead ); + if ( !succeeded ) + break; + + // We know nRead <= nToRead, so it must fit in a size_t + nRemains -= static_cast(nRead); + } + while( nRemains ); + } + + if ( nRemains ) + { + if ( errno ) + nRet = errno; + else + nRet = ENOSPC; + } + + osl_closeFile( SourceFileFH ); + if ( close( DestFileFD ) == -1 ) + { + int e = errno; + SAL_INFO("sal.file", "close(" << DestFileFD << "): " << UnixErrnoString(e)); + if ( nRet == 0 ) + nRet = e; + } + else + SAL_INFO("sal.file", "close(" << DestFileFD << "): OK"); + + return nRet; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_path_helper.cxx b/sal/osl/unx/file_path_helper.cxx new file mode 100644 index 000000000..a8ee5238f --- /dev/null +++ b/sal/osl/unx/file_path_helper.cxx @@ -0,0 +1,262 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "file_path_helper.hxx" +#include "uunxapi.hxx" + +#include +#include +#include + +const sal_Unicode FPH_CHAR_PATH_SEPARATOR = '/'; +const sal_Unicode FPH_CHAR_DOT = '.'; +const sal_Unicode FPH_CHAR_COLON = ':'; + +void osl_systemPathRemoveSeparator(rtl_String* pstrPath) +{ + OSL_PRECOND(nullptr != pstrPath, "osl_systemPathRemoveSeparator: Invalid parameter"); + if (pstrPath == nullptr) + return; + + // maybe there are more than one separator at end + // so we run in a loop + while ((pstrPath->length > 1) && (pstrPath->buffer[pstrPath->length - 1] == FPH_CHAR_PATH_SEPARATOR)) + { + pstrPath->length--; + pstrPath->buffer[pstrPath->length] = '\0'; + } + + SAL_WARN_IF( !((0 == pstrPath->length) || (1 == pstrPath->length) || + (pstrPath->length > 1 && pstrPath->buffer[pstrPath->length - 1] != FPH_CHAR_PATH_SEPARATOR)), + "sal.osl", + "osl_systemPathRemoveSeparator: Post condition failed"); +} + +namespace { + +template void systemPathEnsureSeparator(T* ppstrPath) +{ + assert(nullptr != ppstrPath); + sal_Int32 lp = ppstrPath->getLength(); + sal_Int32 i = ppstrPath->lastIndexOf(FPH_CHAR_PATH_SEPARATOR); + + if ((lp > 1 && i != (lp - 1)) || ((lp < 2) && i < 0)) + { + *ppstrPath += "/"; + } + + SAL_WARN_IF( !ppstrPath->endsWith("/"), + "sal.osl", + "systemPathEnsureSeparator: Post condition failed"); +} + +} + +bool osl_systemPathIsRelativePath(const rtl_uString* pustrPath) +{ + OSL_PRECOND(nullptr != pustrPath, "osl_systemPathIsRelativePath: Invalid parameter"); + return ((pustrPath == nullptr) || (pustrPath->length == 0) || (pustrPath->buffer[0] != FPH_CHAR_PATH_SEPARATOR)); +} + +namespace { + +template T systemPathMakeAbsolutePath_( + const T& BasePath, + const T& RelPath) +{ + T base(BasePath); + + if (!base.isEmpty()) + systemPathEnsureSeparator(&base); + + return base + RelPath; +} + +} + +OString osl::systemPathMakeAbsolutePath( + const OString& BasePath, + const OString& RelPath) +{ + return systemPathMakeAbsolutePath_(BasePath, RelPath); +} + +OUString osl::systemPathMakeAbsolutePath( + const OUString& BasePath, + const OUString& RelPath) +{ + return systemPathMakeAbsolutePath_(BasePath, RelPath); +} + +void osl_systemPathGetFileNameOrLastDirectoryPart( + const rtl_String* pstrPath, + rtl_String** ppstrFileNameOrLastDirPart) +{ + OSL_PRECOND(pstrPath && ppstrFileNameOrLastDirPart, + "osl_systemPathGetFileNameOrLastDirectoryPart: Invalid parameter"); + + OString path(const_cast(pstrPath)); + + osl_systemPathRemoveSeparator(path.pData); + + OString last_part; + + if (path.getLength() > 1 || (path.getLength() == 1 && path[0] != FPH_CHAR_PATH_SEPARATOR)) + { + sal_Int32 idx_ps = path.lastIndexOf(FPH_CHAR_PATH_SEPARATOR); + idx_ps++; // always right to increment by one even if idx_ps == -1! + last_part = path.copy(idx_ps); + } + rtl_string_assign(ppstrFileNameOrLastDirPart, last_part.pData); +} + +bool osl_systemPathIsHiddenFileOrDirectoryEntry( + const rtl_String* pstrPath) +{ + OSL_PRECOND(nullptr != pstrPath, "osl_systemPathIsHiddenFileOrDirectoryEntry: Invalid parameter"); + if ((pstrPath == nullptr) || (pstrPath->length == 0)) + return false; + + OString fdp; + osl_systemPathGetFileNameOrLastDirectoryPart(pstrPath, &fdp.pData); + + return ((fdp.pData->length > 0) && + (fdp.pData->buffer[0] == FPH_CHAR_DOT) && + !osl_systemPathIsLocalOrParentDirectoryEntry(fdp.pData)); +} + +bool osl_systemPathIsLocalOrParentDirectoryEntry( + const rtl_String* pstrPath) +{ + OSL_PRECOND(pstrPath, "osl_systemPathIsLocalOrParentDirectoryEntry: Invalid parameter"); + + OString dirent; + + osl_systemPathGetFileNameOrLastDirectoryPart(pstrPath, &dirent.pData); + + return (dirent == "." || + dirent == ".."); +} + +namespace { + +/** Simple iterator for a path list separated by the specified character +*/ +class path_list_iterator +{ +public: + + /* after construction get_current_item + returns the first path in list, no need + to call reset first + */ + path_list_iterator(OUString path_list, sal_Unicode list_separator = FPH_CHAR_COLON) : + m_path_list(std::move(path_list)), + m_end(m_path_list.getStr() + m_path_list.getLength() + 1), + m_separator(list_separator) + { + reset(); + } + + path_list_iterator(const path_list_iterator&) = delete; + path_list_iterator& operator=(const path_list_iterator&) = delete; + + void reset() + { + m_path_segment_begin = m_path_segment_end = m_path_list.getStr(); + advance(); + } + + void next() + { + OSL_PRECOND(!done(), "path_list_iterator: Already done!"); + + m_path_segment_begin = ++m_path_segment_end; + advance(); + } + + bool done() const + { + return (m_path_segment_end >= m_end); + } + + OUString get_current_item() const + { + return OUString( + m_path_segment_begin, + (m_path_segment_end - m_path_segment_begin)); + } + +private: + /* move m_path_end to the next separator or + to the end of the string + */ + void advance() + { + while (!done() && *m_path_segment_end && (*m_path_segment_end != m_separator)) + ++m_path_segment_end; + + OSL_ASSERT(m_path_segment_end <= m_end); + } + +private: + OUString m_path_list; + const sal_Unicode* m_end; + const sal_Unicode m_separator; + const sal_Unicode* m_path_segment_begin; + const sal_Unicode* m_path_segment_end; +}; + +} + +bool osl_searchPath( + const rtl_uString* pustrFilePath, + const rtl_uString* pustrSearchPathList, + rtl_uString** ppustrPathFound) +{ + OSL_PRECOND(pustrFilePath && pustrSearchPathList && ppustrPathFound, "osl_searchPath: Invalid parameter"); + + bool bfound = false; + OUString fp(const_cast(pustrFilePath)); + OUString pl(const_cast(pustrSearchPathList)); + path_list_iterator pli(pl); + + while (!pli.done()) + { + OUString p = pli.get_current_item(); + systemPathEnsureSeparator(&p); + p += fp; + + if (osl::access(osl::OUStringToOString(p), F_OK) > -1) + { + bfound = true; + rtl_uString_assign(ppustrPathFound, p.pData); + break; + } + pli.next(); + } + return bfound; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_path_helper.hxx b/sal/osl/unx/file_path_helper.hxx new file mode 100644 index 000000000..e210b27a3 --- /dev/null +++ b/sal/osl/unx/file_path_helper.hxx @@ -0,0 +1,251 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_FILE_PATH_HELPER_HXX +#define INCLUDED_SAL_OSL_UNX_FILE_PATH_HELPER_HXX + +#include +#include +#include + +/** + Removes the last separator from the given system path if any and if the path + is not the root path '/' + + @param ppstrPath[inout] a system path if the path is not the root path + and the last character is a path separator it + will be cut off ppstrPath must not be NULL and + must point to a valid rtl_String + + @returns nothing + +*/ +void osl_systemPathRemoveSeparator(rtl_String* pstrPath); + +/** + Returns true if the given path is a relative path and so starts not with '/' + + @param pustrPath [in] a system path - must not be NULL + + @retval sal_True the given path doesn't start with a separator + @retval sal_False the given path starts with a separator + +*/ +bool osl_systemPathIsRelativePath( + const rtl_uString* pustrPath); + +/** + Returns the file or the directory part of the given path + + @param pstrPath [in] a system path, must not be NULL + + @param ppstrFileOrDirPart [out] on return receives the last part of the + given directory or the file name if pstrPath is the + root path '/' an empty string will be returned if + pstrPath has a trailing '/' the last part before the + '/' will be returned else the part after the last '/' + will be returned + + @returns nothing + +*/ +void osl_systemPathGetFileNameOrLastDirectoryPart( + const rtl_String* pstrPath, + rtl_String** ppstrFileNameOrLastDirPart); + +/** + @param pustrPath [in] a system path, must not be NULL + + @retval sal_True the last part of the given system path starts with '.' + @retval sal_False the last part of the given system path is '.' or '..' + alone or doesn't start with a dot + +*/ +bool osl_systemPathIsHiddenFileOrDirectoryEntry( + const rtl_String* pustrPath); + +/************************************************ + osl_systemPathIsLocalOrParentDirectoryEntry + Returns sal_True if the last part of the given + system path is the local directory entry '.' + or the parent directory entry '..' + + @param pstrPath [in] a system path, + must not be NULL + + @returns sal_True if the last part of the + given system path is '.' or '..' + else sal_False + +************************************************/ + +bool osl_systemPathIsLocalOrParentDirectoryEntry( + const rtl_String* pstrPath); + +/************************************************ + osl_searchPath + Searches for a file name or path name in all + directories specified by a given path list. + Symbolic links in the resulting path will not be + resolved, it's up to the caller to do this. + + @param pustrFilePath [in] a file name or + directory name to search for, the name must + be provided as system path not as a file URL + + @param pustrSearchPathList [in] a ':' + separated list of paths in which to search for + the file or directory name + + @param ppustrPathFound [out] on success receives the + complete path of the file or directory found + as a system path + + @returns sal_True if the specified file or + directory was found else sal_False + ***********************************************/ + +bool osl_searchPath( + const rtl_uString* pustrFilePath, + const rtl_uString* pustrSearchPathList, + rtl_uString** ppustrPathFound); + +namespace osl +{ + + /******************************************* + systemPathRemoveSeparator + Removes the last separator from the + given system path if any and if the path + is not the root path '/' + + @param ppustrPath [inout] a system path + if the path is not the root path + and the last character is a + path separator it will be cut off + ppustrPath must not be NULL and + must point to a valid rtl_uString + + @returns nothing + + ******************************************/ + + inline void systemPathRemoveSeparator(/*inout*/ OString& Path) + { + osl_systemPathRemoveSeparator(Path.pData); + } + + /******************************************* + systemPathIsRelativePath + Returns true if the given path is a + relative path and so starts not with '/' + + @param pustrPath [in] a system path + pustrPath must not be NULL + + @returns sal_True if the given path + doesn't start with a separator + else sal_False will be returned + + ******************************************/ + + inline bool systemPathIsRelativePath(const OUString& Path) + { + return osl_systemPathIsRelativePath(Path.pData); + } + + /****************************************** + systemPathMakeAbsolutePath + Append a relative path to a base path + + @param BasePath [in] a system + path that will be considered as + base path + + @param RelPath [in] a system path + that will be considered as + relative path + + @return the + resulting path which is a + concatenation of the base and + the relative path + if base path is empty the + resulting absolute path is the + relative path + if relative path is empty the + resulting absolute path is the + base path + if base and relative path are + empty the resulting absolute + path is also empty + + *****************************************/ + + OString systemPathMakeAbsolutePath( + const OString& BasePath, + const OString& RelPath); + + OUString systemPathMakeAbsolutePath( + const OUString& BasePath, + const OUString& RelPath); + + /******************************************** + systemPathIsHiddenFileOrDirectoryEntry + Returns sal_True if the last part of + given system path is not '.' or '..' + alone and starts with a '.' + + @param pustrPath [in] a system path, + must not be NULL + + @returns sal_True if the last part of + the given system path starts + with '.' or sal_False the last + part is '.' or '..' alone or + doesn't start with a dot + + *********************************************/ + + inline bool systemPathIsHiddenFileOrDirectoryEntry( + const OString& Path) + { + return osl_systemPathIsHiddenFileOrDirectoryEntry(Path.pData); + } + + /************************************************ + searchPath + ***********************************************/ + + inline bool searchPath( + const OUString& ustrFilePath, + const OUString& ustrSearchPathList, + OUString& ustrPathFound) + { + return osl_searchPath( + ustrFilePath.pData, + ustrSearchPathList.pData, + &ustrPathFound.pData); + } + + } // namespace osl + + #endif /* #ifndef _OSL_PATH_HELPER_HXX_ */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_stat.cxx b/sal/osl/unx/file_stat.cxx new file mode 100644 index 000000000..3b702905c --- /dev/null +++ b/sal/osl/unx/file_stat.cxx @@ -0,0 +1,453 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "system.hxx" +#include +#include +#include +#include +#include + +#include +#include + +#include "file_impl.hxx" +#include "file_error_transl.hxx" +#include "file_path_helper.hxx" +#include "file_url.hxx" +#include "uunxapi.hxx" + +namespace +{ + void set_file_type(const struct stat& file_stat, oslFileStatus* pStat) + { + /* links to directories state also to be a directory */ + if (S_ISLNK(file_stat.st_mode)) + pStat->eType = osl_File_Type_Link; + else if (S_ISDIR(file_stat.st_mode)) + pStat->eType = osl_File_Type_Directory; + else if (S_ISREG(file_stat.st_mode)) + pStat->eType = osl_File_Type_Regular; + else if (S_ISFIFO(file_stat.st_mode)) + pStat->eType = osl_File_Type_Fifo; + else if (S_ISSOCK(file_stat.st_mode)) + pStat->eType = osl_File_Type_Socket; + else if (S_ISCHR(file_stat.st_mode) || S_ISBLK(file_stat.st_mode)) + pStat->eType = osl_File_Type_Special; + else + pStat->eType = osl_File_Type_Unknown; + + pStat->uValidFields |= osl_FileStatus_Mask_Type; + } + + void set_file_access_mask(const struct stat& file_stat, oslFileStatus* pStat) + { + // user permissions + if (S_IRUSR & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_OwnRead; + + if (S_IWUSR & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_OwnWrite; + + if (S_IXUSR & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_OwnExe; + + // group permissions + if (S_IRGRP & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_GrpRead; + + if (S_IWGRP & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_GrpWrite; + + if (S_IXGRP & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_GrpExe; + + // others permissions + if (S_IROTH & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_OthRead; + + if (S_IWOTH & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_OthWrite; + + if (S_IXOTH & file_stat.st_mode) + pStat->uAttributes |= osl_File_Attribute_OthExe; + + pStat->uValidFields |= osl_FileStatus_Mask_Attributes; + } + + /* This code used not to use access(...) because access follows links which + may cause performance problems see #97133. (That apparently references a + no-longer accessible Hamburg-internal bug-tracking system.) + However, contrary to what is stated above the use of access calls is + required on network file systems not using unix semantics (AFS, see + fdo#43095). + */ + void set_file_access_rights(const OString& file_path, oslFileStatus* pStat) + { + pStat->uValidFields |= osl_FileStatus_Mask_Attributes; + + if (osl::access(file_path, W_OK) < 0) + pStat->uAttributes |= osl_File_Attribute_ReadOnly; + + if (osl::access(file_path, X_OK) == 0) + pStat->uAttributes |= osl_File_Attribute_Executable; + } + + void set_file_hidden_status(const OString& file_path, oslFileStatus* pStat) + { + pStat->uAttributes = osl::systemPathIsHiddenFileOrDirectoryEntry(file_path) ? osl_File_Attribute_Hidden : 0; + pStat->uValidFields |= osl_FileStatus_Mask_Attributes; + } + + /* the set_file_access_rights must be called after set_file_hidden_status(...) and + set_file_access_mask(...) because of the hack in set_file_access_rights(...) */ + void set_file_attributes( + const OString& file_path, const struct stat& file_stat, const sal_uInt32 uFieldMask, oslFileStatus* pStat) + { + set_file_hidden_status(file_path, pStat); + set_file_access_mask(file_stat, pStat); + + // we set the file access rights only on demand + // because it's potentially expensive + if (uFieldMask & osl_FileStatus_Mask_Attributes) + set_file_access_rights(file_path, pStat); + } + + void set_file_access_time(const struct stat& file_stat, oslFileStatus* pStat) + { + pStat->aAccessTime.Seconds = file_stat.st_atime; + pStat->aAccessTime.Nanosec = 0; + pStat->uValidFields |= osl_FileStatus_Mask_AccessTime; + } + + void set_file_modify_time(const struct stat& file_stat, oslFileStatus* pStat) + { + pStat->aModifyTime.Seconds = file_stat.st_mtime; + pStat->aModifyTime.Nanosec = 0; + pStat->uValidFields |= osl_FileStatus_Mask_ModifyTime; + } + + void set_file_size(const struct stat& file_stat, oslFileStatus* pStat) + { + if (S_ISREG(file_stat.st_mode)) + { + pStat->uFileSize = file_stat.st_size; + pStat->uValidFields |= osl_FileStatus_Mask_FileSize; + } + } + + /* we only need to call stat or lstat if one of the + following flags is set */ + bool is_stat_call_necessary(sal_uInt32 field_mask, oslFileType file_type) + { + return ( + ((field_mask & osl_FileStatus_Mask_Type) && (file_type == osl_File_Type_Unknown)) || + (field_mask & osl_FileStatus_Mask_Attributes) || + (field_mask & osl_FileStatus_Mask_CreationTime) || + (field_mask & osl_FileStatus_Mask_AccessTime) || + (field_mask & osl_FileStatus_Mask_ModifyTime) || + (field_mask & osl_FileStatus_Mask_FileSize) || + (field_mask & osl_FileStatus_Mask_LinkTargetURL) || + (field_mask & osl_FileStatus_Mask_Validate)); + } + + oslFileError set_link_target_url(const OString& file_path, oslFileStatus* pStat) + { + OString link_target; + if (!osl::realpath(file_path, link_target)) + return oslTranslateFileError(errno); + + OUString url; + oslFileError osl_error = osl::detail::convertPathnameToUrl(link_target, &url); + if (osl_error != osl_File_E_None) + return osl_error; + rtl_uString_assign(&pStat->ustrLinkTargetURL, url.pData); + + pStat->uValidFields |= osl_FileStatus_Mask_LinkTargetURL; + return osl_File_E_None; + } + + oslFileError setup_osl_getFileStatus( + DirectoryItem_Impl * pImpl, oslFileStatus* pStat, OString& file_path) + { + if ((pImpl == nullptr) || (pStat == nullptr)) + return osl_File_E_INVAL; + + file_path = pImpl->m_strFilePath; + OSL_ASSERT(!file_path.isEmpty()); + if (file_path.isEmpty()) + return osl_File_E_INVAL; + + pStat->uValidFields = 0; + return osl_File_E_None; + } + +} + +oslFileError SAL_CALL osl_getFileStatus(oslDirectoryItem Item, oslFileStatus* pStat, sal_uInt32 uFieldMask) +{ + DirectoryItem_Impl * pImpl = static_cast< DirectoryItem_Impl* >(Item); + + OString file_path; + oslFileError osl_error = setup_osl_getFileStatus(pImpl, pStat, file_path); + if (osl_error != osl_File_E_None) + return osl_error; + + struct stat file_stat; + + bool bStatNeeded = is_stat_call_necessary(uFieldMask, pImpl->getFileType()); + if (bStatNeeded && (osl::lstat(file_path, file_stat) != 0)) + return oslTranslateFileError(errno); + + if (bStatNeeded) + { + // we set all these attributes because it's cheap + set_file_type(file_stat, pStat); + set_file_access_time(file_stat, pStat); + set_file_modify_time(file_stat, pStat); + set_file_size(file_stat, pStat); + set_file_attributes(file_path, file_stat, uFieldMask, pStat); + + // file exists semantic of osl_FileStatus_Mask_Validate + if ((uFieldMask & osl_FileStatus_Mask_LinkTargetURL) && S_ISLNK(file_stat.st_mode)) + { + osl_error = set_link_target_url(file_path, pStat); + if (osl_error != osl_File_E_None) + return osl_error; + } + } +#ifdef _DIRENT_HAVE_D_TYPE + else if (uFieldMask & osl_FileStatus_Mask_Type) + { + pStat->eType = pImpl->getFileType(); + pStat->uValidFields |= osl_FileStatus_Mask_Type; + } +#endif /* _DIRENT_HAVE_D_TYPE */ + + if (uFieldMask & osl_FileStatus_Mask_FileURL) + { + OUString url; + if ((osl_error = osl::detail::convertPathnameToUrl(file_path, &url)) != osl_File_E_None) + return osl_error; + rtl_uString_assign(&pStat->ustrFileURL, url.pData); + + pStat->uValidFields |= osl_FileStatus_Mask_FileURL; + } + + if (uFieldMask & osl_FileStatus_Mask_FileName) + { + OString name; + osl_systemPathGetFileNameOrLastDirectoryPart(file_path.pData, &name.pData); + bool ok = rtl_convertStringToUString( + &pStat->ustrFileName, name.getStr(), name.getLength(), osl_getThreadTextEncoding(), + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT)); + assert(ok); (void)ok; + pStat->uValidFields |= osl_FileStatus_Mask_FileName; + } + return osl_File_E_None; +} + +static oslFileError osl_psz_setFileAttributes( const char* pszFilePath, sal_uInt64 uAttributes ) +{ + oslFileError osl_error = osl_File_E_None; + mode_t nNewMode = 0; + + OSL_ENSURE(!(osl_File_Attribute_Hidden & uAttributes), "osl_File_Attribute_Hidden doesn't work under Unix"); + + if (uAttributes & osl_File_Attribute_OwnRead) + nNewMode |= S_IRUSR; + + if (uAttributes & osl_File_Attribute_OwnWrite) + nNewMode|=S_IWUSR; + + if (uAttributes & osl_File_Attribute_OwnExe) + nNewMode|=S_IXUSR; + + if (uAttributes & osl_File_Attribute_GrpRead) + nNewMode|=S_IRGRP; + + if (uAttributes & osl_File_Attribute_GrpWrite) + nNewMode|=S_IWGRP; + + if (uAttributes & osl_File_Attribute_GrpExe) + nNewMode|=S_IXGRP; + + if (uAttributes & osl_File_Attribute_OthRead) + nNewMode|=S_IROTH; + + if (uAttributes & osl_File_Attribute_OthWrite) + nNewMode|=S_IWOTH; + + if (uAttributes & osl_File_Attribute_OthExe) + nNewMode|=S_IXOTH; + + if (chmod(pszFilePath, nNewMode) < 0) + osl_error = oslTranslateFileError(errno); + + return osl_error; +} + +oslFileError SAL_CALL osl_setFileAttributes( rtl_uString* ustrFileURL, sal_uInt64 uAttributes ) +{ + char path[PATH_MAX]; + oslFileError eRet; + + OSL_ASSERT( ustrFileURL ); + + /* convert file url to system path */ + eRet = FileURLToPath( path, PATH_MAX, ustrFileURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( path, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return osl_psz_setFileAttributes( path, uAttributes ); +} + +static oslFileError osl_psz_setFileTime ( + const char* pszFilePath, + const TimeValue* pLastAccessTime, + const TimeValue* pLastWriteTime ) +{ + int nRet=0; + struct utimbuf aTimeBuffer; + struct stat aFileStat; +#ifdef DEBUG_OSL_FILE + struct tm* pTM=0; +#endif + + nRet = lstat_c(pszFilePath,&aFileStat); + + if ( nRet < 0 ) + { + nRet=errno; + return oslTranslateFileError(nRet); + } + +#ifdef DEBUG_OSL_FILE + fprintf(stderr,"File Times are (in localtime):\n"); + pTM=localtime(&aFileStat.st_ctime); + fprintf(stderr,"CreationTime is '%s'\n",asctime(pTM)); + pTM=localtime(&aFileStat.st_atime); + fprintf(stderr,"AccessTime is '%s'\n",asctime(pTM)); + pTM=localtime(&aFileStat.st_mtime); + fprintf(stderr,"Modification is '%s'\n",asctime(pTM)); + + fprintf(stderr,"File Times are (in UTC):\n"); + fprintf(stderr,"CreationTime is '%s'\n",ctime(&aFileStat.st_ctime)); + fprintf(stderr,"AccessTime is '%s'\n",ctime(&aTimeBuffer.actime)); + fprintf(stderr,"Modification is '%s'\n",ctime(&aTimeBuffer.modtime)); +#endif + + if ( pLastAccessTime != nullptr ) + { + aTimeBuffer.actime=pLastAccessTime->Seconds; + } + else + { + aTimeBuffer.actime=aFileStat.st_atime; + } + + if ( pLastWriteTime != nullptr ) + { + aTimeBuffer.modtime=pLastWriteTime->Seconds; + } + else + { + aTimeBuffer.modtime=aFileStat.st_mtime; + } + + /* mfe: Creation time not used here! */ + +#ifdef DEBUG_OSL_FILE + fprintf(stderr,"File Times are (in localtime):\n"); + pTM=localtime(&aFileStat.st_ctime); + fprintf(stderr,"CreationTime now '%s'\n",asctime(pTM)); + pTM=localtime(&aTimeBuffer.actime); + fprintf(stderr,"AccessTime now '%s'\n",asctime(pTM)); + pTM=localtime(&aTimeBuffer.modtime); + fprintf(stderr,"Modification now '%s'\n",asctime(pTM)); + + fprintf(stderr,"File Times are (in UTC):\n"); + fprintf(stderr,"CreationTime now '%s'\n",ctime(&aFileStat.st_ctime)); + fprintf(stderr,"AccessTime now '%s'\n",ctime(&aTimeBuffer.actime)); + fprintf(stderr,"Modification now '%s'\n",ctime(&aTimeBuffer.modtime)); +#endif + + nRet = utime_c(pszFilePath,&aTimeBuffer); + if ( nRet < 0 ) + { + nRet=errno; + return oslTranslateFileError(nRet); + } + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_setFileTime ( + rtl_uString* ustrFileURL, + SAL_UNUSED_PARAMETER const TimeValue* /* pCreationTime */, + const TimeValue* pLastAccessTime, + const TimeValue* pLastWriteTime ) +{ + char path[PATH_MAX]; + oslFileError eRet; + + OSL_ASSERT( ustrFileURL ); + + /* convert file url to system path */ + eRet = FileURLToPath( path, PATH_MAX, ustrFileURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( path, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return osl_psz_setFileTime( path, pLastAccessTime, pLastWriteTime ); +} + +sal_Bool +SAL_CALL osl_identicalDirectoryItem( oslDirectoryItem a, oslDirectoryItem b) +{ + DirectoryItem_Impl *pA = static_cast(a); + DirectoryItem_Impl *pB = static_cast(b); + if (a == b) + return true; + /* same name => same item, unless renaming / moving madness has occurred */ + if (pA->m_strFilePath == pB->m_strFilePath) + return true; + + struct stat a_stat, b_stat; + + if (osl::lstat(pA->m_strFilePath, a_stat) != 0 || + osl::lstat(pB->m_strFilePath, b_stat) != 0) + return false; + + return (a_stat.st_ino == b_stat.st_ino); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_url.cxx b/sal/osl/unx/file_url.cxx new file mode 100644 index 000000000..4b5a16885 --- /dev/null +++ b/sal/osl/unx/file_url.cxx @@ -0,0 +1,972 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "file_url.hxx" + +#include "system.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "file_error_transl.hxx" +#include "file_path_helper.hxx" + +#include "uunxapi.hxx" + +/** @file + + General note + + This file contains the part that handles File URLs. + + File URLs as scheme specific notion of URIs + (RFC2396) may be handled platform independent, but + will not in osl which is considered wrong. + Future version of osl should handle File URLs this + way. In rtl/uri there is already a URI parser etc. + so this code should be consolidated. + +*/ + +using namespace osl; + +namespace { + +// A slightly modified version of Pchar in rtl/source/uri.c, but without +// encoding slashes: +constexpr auto uriCharClass = rtl::createUriCharClass( + u8"!$&'()*+,-./0123456789:=@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~"); + +} + +oslFileError SAL_CALL osl_getCanonicalName( rtl_uString* ustrFileURL, rtl_uString** pustrValidURL ) +{ + OSL_FAIL("osl_getCanonicalName not implemented"); + + rtl_uString_newFromString(pustrValidURL, ustrFileURL); + return osl_File_E_None; +} + +namespace { + + class UnicodeToTextConverter_Impl + { + rtl_UnicodeToTextConverter m_converter; + + UnicodeToTextConverter_Impl() + : m_converter (rtl_createUnicodeToTextConverter (osl_getThreadTextEncoding())) + {} + + ~UnicodeToTextConverter_Impl() + { + rtl_destroyUnicodeToTextConverter (m_converter); + } + public: + static UnicodeToTextConverter_Impl & getInstance() + { + static UnicodeToTextConverter_Impl g_theConverter; + return g_theConverter; + } + + sal_Size convert( + sal_Unicode const * pSrcBuf, sal_Size nSrcChars, char * pDstBuf, sal_Size nDstBytes, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtChars) + { + OSL_ASSERT(m_converter != nullptr); + return rtl_convertUnicodeToText ( + m_converter, nullptr, pSrcBuf, nSrcChars, pDstBuf, nDstBytes, nFlags, pInfo, pSrcCvtChars); + } + }; + +bool convert(OUStringBuffer const & in, OStringBuffer * append) { + assert(append != nullptr); + for (sal_Size nConvert = in.getLength();;) { + auto const oldLen = append->getLength(); + auto n = std::min( + std::max(nConvert, sal_Size(PATH_MAX)), + sal_Size(std::numeric_limits::max() - oldLen)); + // approximation of required converted size + auto s = append->appendUninitialized(n); + sal_uInt32 info; + sal_Size converted; + //TODO: context, for reliable treatment of DESTBUFFERTOSMALL: + n = UnicodeToTextConverter_Impl::getInstance().convert( + in.getStr() + in.getLength() - nConvert, nConvert, s, n, + (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR + | RTL_UNICODETOTEXT_FLAGS_FLUSH), + &info, &converted); + if ((info & RTL_UNICODETOTEXT_INFO_ERROR) != 0) { + return false; + } + append->setLength(oldLen + n); + assert(converted <= nConvert); + nConvert -= converted; + assert((nConvert == 0) == ((info & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0)); + if ((info & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0) { + break; + } + } + return true; +} + +bool decodeFromUtf8(std::u16string_view text, OString * result) { + assert(result != nullptr); + auto p = text.data(); + auto const end = p + text.size(); + OUStringBuffer ubuf(static_cast(text.size())); + OStringBuffer bbuf(PATH_MAX); + while (p < end) { + rtl::uri::detail::EscapeType t; + sal_uInt32 c = rtl::uri::detail::readUcs4(&p, end, true, RTL_TEXTENCODING_UTF8, &t); + switch (t) { + case rtl::uri::detail::EscapeNo: + if (c == '%') { + return false; + } + [[fallthrough]]; + case rtl::uri::detail::EscapeChar: + if (rtl::isSurrogate(c)) { + return false; + } + ubuf.appendUtf32(c); + break; + case rtl::uri::detail::EscapeOctet: + if (!convert(ubuf, &bbuf)) { + return false; + } + ubuf.setLength(0); + assert(c <= 0xFF); + bbuf.append(char(c)); + break; + } + } + if (!convert(ubuf, &bbuf)) { + return false; + } + *result = bbuf.makeStringAndClear(); + return true; +} + +template oslFileError getSystemPathFromFileUrl( + OUString const & url, T * path, bool resolveHome) +{ + assert(path != nullptr); + // For compatibility with assumptions in other parts of the code base, + // assume that anything starting with a slash is a system path instead of a + // (relative) file URL (except if it starts with two slashes, in which case + // it is a relative URL with an authority component): + if (url.isEmpty() + || (url[0] == '/' && (url.getLength() == 1 || url[1] != '/'))) + { + return osl_File_E_INVAL; + } + // Check for non file scheme: + sal_Int32 i = 0; + if (rtl::isAsciiAlpha(url[0])) { + for (sal_Int32 j = 1; j != url.getLength(); ++j) { + auto c = url[j]; + if (c == ':') { + if (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( + url.pData->buffer, j, + RTL_CONSTASCII_STRINGPARAM("file")) + != 0) + { + return osl_File_E_INVAL; + } + i = j + 1; + break; + } + if (!rtl::isAsciiAlphanumeric(c) && c != '+' && c != '-' + && c != '.') + { + break; + } + } + } + // Handle query or fragment: + if (url.indexOf('?', i) != -1 || url.indexOf('#', i) != -1) + return osl_File_E_INVAL; + // Handle authority, supporting a host of "localhost", "127.0.0.1", or the exact value (e.g., + // not supporting an additional final dot, for simplicity) reported by osl_getLocalHostnameFQDN + // (and, in each case, ignoring case of ASCII letters): + if (url.getLength() - i >= 2 && url[i] == '/' && url[i + 1] == '/') + { + i += 2; + sal_Int32 j = url.indexOf('/', i); + if (j == -1) + j = url.getLength(); + if (j != i + && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( + url.pData->buffer + i, j - i, + RTL_CONSTASCII_STRINGPARAM("localhost")) + != 0) + && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( + url.pData->buffer + i, j - i, + RTL_CONSTASCII_STRINGPARAM("127.0.0.1")) + != 0)) + { + OUString hostname; + // The 'file' URI Scheme does imply that we want a FQDN in this case + // See https://tools.ietf.org/html/rfc8089#section-3 + if (osl_getLocalHostnameFQDN(&hostname.pData) != osl_Socket_Ok + || (rtl_ustr_compareIgnoreAsciiCase_WithLength( + url.pData->buffer + i, j - i, hostname.getStr(), hostname.getLength()) + != 0)) + { + return osl_File_E_INVAL; + } + } + i = j; + } + // Handle empty path: + if (i == url.getLength()) + { + *path = "/"; + return osl_File_E_None; + } + // Path must not contain %2F: + if (url.indexOf("%2F", i) != -1 || url.indexOf("%2f", i) != -1) + return osl_File_E_INVAL; + + if constexpr (std::is_same_v) { + if (!decodeFromUtf8(url.subView(i), path)) { + return osl_File_E_INVAL; + } + } else if constexpr (std::is_same_v) { + *path = rtl::Uri::decode( + url.copy(i), rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8); + } else { + static_assert(std::is_same_v || std::is_same_v); + } + // Path must not contain %2F: + if (path->indexOf('\0') != -1) + return osl_File_E_INVAL; + + // Handle ~ notation: + if (resolveHome && path->getLength() >= 2 && (*path)[1] == '~') + { + sal_Int32 j = path->indexOf('/', 2); + if (j == -1) + j = path->getLength(); + + if (j == 2) + { + OUString home; + if (!osl::Security().getHomeDir(home)) + { + SAL_WARN("sal.file", "osl::Security::getHomeDir failed"); + return osl_File_E_INVAL; + } + + i = url.indexOf('/', i + 1); + + if (i == -1) + i = url.getLength(); + else + ++i; + + //TODO: cheesy way of ensuring home's path ends in slash: + if (!home.isEmpty() && home[home.getLength() - 1] != '/') + home += "/"; + try + { + home = rtl::Uri::convertRelToAbs(home, url.copy(i)); + } + catch (rtl::MalformedUriException & e) + { + SAL_WARN("sal.file", "rtl::MalformedUriException " << e.getMessage()); + return osl_File_E_INVAL; + } + return getSystemPathFromFileUrl(home, path, false); + } + // FIXME: replace ~user with user's home directory + return osl_File_E_INVAL; + } + return osl_File_E_None; +} + +} + +oslFileError SAL_CALL osl_getSystemPathFromFileURL( rtl_uString *ustrFileURL, rtl_uString **pustrSystemPath ) +{ + OUString path; + oslFileError e; + try + { + e = getSystemPathFromFileUrl( + OUString::unacquired(&ustrFileURL), &path, true); + } + catch (std::length_error &) + { + e = osl_File_E_RANGE; + } + + if (e == osl_File_E_None) + rtl_uString_assign(pustrSystemPath, path.pData); + + return e; +} + +oslFileError SAL_CALL osl_getFileURLFromSystemPath( rtl_uString *ustrSystemPath, rtl_uString **pustrFileURL ) +{ + rtl_uString *pTmp = nullptr; + sal_Int32 nIndex; + + auto const & systemPath = OUString::unacquired(&ustrSystemPath); + + if( systemPath.isEmpty() ) + return osl_File_E_INVAL; + + if( systemPath.startsWith( "file:" ) ) + return osl_File_E_INVAL; + + /* check if system path starts with ~ or ~user and replace it with the appropriate home dir */ + if( systemPath.startsWith("~") ) + { + /* check if another user is specified */ + if( ( systemPath.getLength() == 1 ) || + ( systemPath[1] == '/' ) ) + { + /* osl_getHomeDir returns file URL */ + oslSecurity pSecurity = osl_getCurrentSecurity(); + osl_getHomeDir( pSecurity , &pTmp ); + osl_freeSecurityHandle( pSecurity ); + + if (!pTmp) + return osl_File_E_INVAL; + + /* remove "file://" prefix */ + rtl_uString_newFromStr_WithLength( &pTmp, pTmp->buffer + 7, pTmp->length - 7 ); + + /* replace '~' in original string */ + rtl_uString_newReplaceStrAt( &pTmp, systemPath.pData, 0, 1, pTmp ); + } + else + { + /* FIXME: replace ~user with users home directory */ + return osl_File_E_INVAL; + } + } + + /* check if initial string contains repeated '/' characters */ + nIndex = systemPath.indexOf( "//" ); + if( nIndex != -1 ) + { + sal_Int32 nSrcIndex; + sal_Int32 nDeleted = 0; + + /* if pTmp is not already allocated, copy systemPath for modification */ + if( pTmp == nullptr ) + rtl_uString_newFromString( &pTmp, systemPath.pData ); + + /* adapt index to pTmp */ + nIndex += pTmp->length - systemPath.getLength(); + + /* replace repeated '/' characters with a single '/' */ + for( nSrcIndex = nIndex + 1; nSrcIndex < pTmp->length; nSrcIndex++ ) + { + if( (pTmp->buffer[nSrcIndex] == '/') && (pTmp->buffer[nIndex] == '/') ) + nDeleted++; + else + pTmp->buffer[++nIndex] = pTmp->buffer[nSrcIndex]; + } + + /* adjust length member */ + pTmp->length -= nDeleted; + } + + if( pTmp == nullptr ) + rtl_uString_assign( &pTmp, systemPath.pData ); + + /* file URLs must be URI encoded */ + rtl_uriEncode( pTmp, uriCharClass.data(), rtl_UriEncodeIgnoreEscapes, RTL_TEXTENCODING_UTF8, pustrFileURL ); + + rtl_uString_release( pTmp ); + + /* absolute urls should start with 'file://' */ + if( (*pustrFileURL)->buffer[0] == '/' ) + { + rtl_uString *pProtocol = nullptr; + + rtl_uString_newFromAscii( &pProtocol, "file://" ); + rtl_uString_newConcat( pustrFileURL, pProtocol, *pustrFileURL ); + rtl_uString_release( pProtocol ); + } + + return osl_File_E_None; +} + +/* + * relative URLs are not accepted + */ +oslFileError getSystemPathFromFileURL_Ex( + rtl_uString *ustrFileURL, rtl_uString **pustrSystemPath) +{ + rtl_uString* temp = nullptr; + oslFileError osl_error = osl_getSystemPathFromFileURL(ustrFileURL, &temp); + + if (osl_error == osl_File_E_None) + { + if (temp->buffer[0] == '/') + { + *pustrSystemPath = temp; + } + else + { + rtl_uString_release(temp); + osl_error = osl_File_E_INVAL; + } + } + + return osl_error; +} + +namespace +{ + + /** Helper function, return a pointer to the final '\0' + of a string + */ + + sal_Unicode* ustrtoend(sal_Unicode* pStr) + { + return (pStr + rtl_ustr_getLength(pStr)); + } + + sal_Unicode* ustrchrcat(const sal_Unicode chr, sal_Unicode* d) + { + sal_Unicode* p = ustrtoend(d); + *p++ = chr; + *p = 0; + return d; + } + + bool _islastchr(sal_Unicode* pStr, sal_Unicode Chr) + { + sal_Unicode* p = ustrtoend(pStr); + if (p > pStr) + p--; + return (*p == Chr); + } + + /** + Remove the last part of a path, a path that has + only a '/' or no '/' at all will be returned + unmodified + */ + + sal_Unicode* _rmlastpathtoken(sal_Unicode* aPath) + { + /* we may always skip -2 because we + may at least stand on a '/' but + either there is no other character + before this '/' or it's another + character than the '/' + */ + sal_Unicode* p = ustrtoend(aPath) - 2; + + /* move back to the next path separator + or to the start of the string */ + while ((p > aPath) && (*p != '/')) + p--; + + if (p >= aPath) + { + if (*p == '/') + { + p++; + *p = '\0'; + } + else + { + *p = '\0'; + } + } + + return aPath; + } + + oslFileError _osl_resolvepath( + /*inout*/ sal_Unicode* path, + /*inout*/ bool* failed) + { + oslFileError ferr = osl_File_E_None; + + if (!*failed) + { + char unresolved_path[PATH_MAX]; + if (!UnicodeToText(unresolved_path, sizeof(unresolved_path), path, rtl_ustr_getLength(path))) + return oslTranslateFileError(ENAMETOOLONG); + + char resolved_path[PATH_MAX]; + if (realpath(unresolved_path, resolved_path)) + { + if (!TextToUnicode(resolved_path, strlen(resolved_path), path, PATH_MAX)) + return oslTranslateFileError(ENAMETOOLONG); + } + else + { + if (EACCES == errno || ENOTDIR == errno || ENOENT == errno) + *failed = true; + else + ferr = oslTranslateFileError(errno); + } + } + + return ferr; + } + + /** + Works even with non existing paths. The resulting path must not exceed + PATH_MAX else osl_File_E_NAMETOOLONG is the result + */ + + oslFileError osl_getAbsoluteFileURL_impl_(const OUString& unresolved_path, OUString& resolved_path) + { + /* the given unresolved path must not exceed PATH_MAX */ + if (unresolved_path.getLength() >= (PATH_MAX - 2)) + return oslTranslateFileError(ENAMETOOLONG); + + sal_Unicode path_resolved_so_far[PATH_MAX]; + const sal_Unicode* punresolved = unresolved_path.getStr(); + sal_Unicode* presolvedsf = path_resolved_so_far; + + /* reserve space for leading '/' and trailing '\0' + do not exceed this limit */ + sal_Unicode* sentinel = path_resolved_so_far + PATH_MAX - 2; + + /* if realpath fails with error ENOTDIR, EACCES or ENOENT + we will not call it again, because _osl_realpath should also + work with non existing directories etc. */ + bool realpath_failed = false; + oslFileError ferr; + + path_resolved_so_far[0] = '\0'; + + while (*punresolved != '\0') + { + /* ignore '/.' , skip one part back when '/..' */ + if ((*punresolved == '.') && (*presolvedsf == '/')) + { + if (*(punresolved + 1) == '\0') + { + punresolved++; + continue; + } + if (*(punresolved + 1) == '/') + { + punresolved += 2; + continue; + } + if ((*(punresolved + 1) == '.') && (*(punresolved + 2) == '\0' || (*(punresolved + 2) == '/'))) + { + _rmlastpathtoken(path_resolved_so_far); + + presolvedsf = ustrtoend(path_resolved_so_far) - 1; + + if (*(punresolved + 2) == '/') + punresolved += 3; + else + punresolved += 2; + + continue; + } + + /* a file or directory name may start with '.' */ + if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel) + return oslTranslateFileError(ENAMETOOLONG); + + ustrchrcat(*punresolved++, path_resolved_so_far); + + if (*punresolved == '\0' && !realpath_failed) + { + ferr = _osl_resolvepath( + path_resolved_so_far, + &realpath_failed); + + if (ferr != osl_File_E_None) + return ferr; + } + } + else if (*punresolved == '/') + { + if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel) + return oslTranslateFileError(ENAMETOOLONG); + + ustrchrcat(*punresolved++, path_resolved_so_far); + + if (!realpath_failed) + { + ferr = _osl_resolvepath( + path_resolved_so_far, + &realpath_failed); + + if (ferr != osl_File_E_None) + return ferr; + + if (!_islastchr(path_resolved_so_far, '/')) + { + if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel) + return oslTranslateFileError(ENAMETOOLONG); + + ustrchrcat('/', path_resolved_so_far); + } + } + } + else // any other character + { + if ((presolvedsf = ustrtoend(path_resolved_so_far)) > sentinel) + return oslTranslateFileError(ENAMETOOLONG); + + ustrchrcat(*punresolved++, path_resolved_so_far); + + if (*punresolved == '\0' && !realpath_failed) + { + ferr = _osl_resolvepath( + path_resolved_so_far, + &realpath_failed); + + if (ferr != osl_File_E_None) + return ferr; + } + } + } + + sal_Int32 len = rtl_ustr_getLength(path_resolved_so_far); + + OSL_ASSERT(len < PATH_MAX); + + resolved_path = OUString(path_resolved_so_far, len); + + return osl_File_E_None; + } + +} + +oslFileError osl_getAbsoluteFileURL( + rtl_uString* ustrBaseDirURL, + rtl_uString* ustrRelativeURL, + rtl_uString** pustrAbsoluteURL) +{ + /* Work around the below call to getSystemPathFromFileURL rejecting input + that starts with "/" (for whatever reason it behaves that way; but + changing that would start to break lots of tests at least) */ + OUString relUrl(ustrRelativeURL); + if (relUrl.startsWith("//")) + relUrl = "file:" + relUrl; + else if (relUrl.startsWith("/")) + relUrl = "file://" + relUrl; + + OUString unresolved_path; + + FileBase::RC frc = FileBase::getSystemPathFromFileURL(relUrl, unresolved_path); + if (frc != FileBase::E_None) + return oslFileError(frc); + + if (systemPathIsRelativePath(unresolved_path)) + { + OUString base_path; + oslFileError rc = getSystemPathFromFileURL_Ex(ustrBaseDirURL, &base_path.pData); + if (rc != osl_File_E_None) + return rc; + + unresolved_path = systemPathMakeAbsolutePath(base_path, unresolved_path); + } + + OUString resolved_path; + oslFileError rc = osl_getAbsoluteFileURL_impl_(unresolved_path, resolved_path); + if (rc == osl_File_E_None) + { + rc = osl_getFileURLFromSystemPath(resolved_path.pData, pustrAbsoluteURL); + OSL_ASSERT(osl_File_E_None == rc); + } + + return rc; +} + +namespace osl::detail { + + /** + No separate error code if unicode to text conversion or getenv fails because for the + caller there is no difference why a file could not be found in $PATH + */ + bool find_in_PATH(const OUString& file_path, OUString& result) + { + bool bfound = false; + OUString path("PATH"); + OUString env_path; + + if (osl_getEnvironment(path.pData, &env_path.pData) == osl_Process_E_None) + bfound = osl::searchPath(file_path, env_path, result); + + return bfound; + } +} + +namespace +{ + /** + No separate error code if unicode to text conversion or getcwd fails because for the + caller there is no difference why a file could not be found in CDW + */ + bool find_in_CWD(const OUString& file_path, OUString& result) + { + bool bfound = false; + OUString cwd_url; + + if (osl_getProcessWorkingDir(&cwd_url.pData) == osl_Process_E_None) + { + OUString cwd; + FileBase::getSystemPathFromFileURL(cwd_url, cwd); + bfound = osl::searchPath(file_path, cwd, result); + } + return bfound; + } + + bool find_in_searchPath(const OUString& file_path, rtl_uString* search_path, OUString& result) + { + return (search_path && osl::searchPath(file_path, OUString(search_path), result)); + } + +} + +oslFileError osl_searchFileURL(rtl_uString* ustrFilePath, rtl_uString* ustrSearchPath, rtl_uString** pustrURL) +{ + OSL_PRECOND(ustrFilePath && pustrURL, "osl_searchFileURL: invalid parameter"); + + FileBase::RC rc; + OUString file_path; + + // try to interpret search path as file url else assume it's a system path list + rc = FileBase::getSystemPathFromFileURL(ustrFilePath, file_path); + if (rc == FileBase::E_INVAL) + file_path = ustrFilePath; + else if (rc != FileBase::E_None) + return oslFileError(rc); + + bool bfound = false; + OUString result; + + if (find_in_searchPath(file_path, ustrSearchPath, result) || + osl::detail::find_in_PATH(file_path, result) || + find_in_CWD(file_path, result)) + { + OUString resolved; + + if (osl::realpath(result, resolved)) + { + oslFileError osl_error = osl_getFileURLFromSystemPath(resolved.pData, pustrURL); + SAL_WARN_IF(osl_File_E_None != osl_error, "sal.file", "osl_getFileURLFromSystemPath failed"); + bfound = true; + } + } + return bfound ? osl_File_E_None : osl_File_E_NOENT; +} + +oslFileError FileURLToPath(char * buffer, size_t bufLen, rtl_uString* ustrFileURL) +{ + OString strSystemPath; + oslFileError osl_error = osl::detail::convertUrlToPathname( + OUString::unacquired(&ustrFileURL), &strSystemPath); + + if(osl_error != osl_File_E_None) + return osl_error; + + osl_systemPathRemoveSeparator(strSystemPath.pData); + + if (o3tl::make_unsigned(strSystemPath.getLength()) >= bufLen) { + return osl_File_E_OVERFLOW; + } + std::strcpy(buffer, strSystemPath.getStr()); + + return osl_error; +} + +int UnicodeToText( char * buffer, size_t bufLen, const sal_Unicode * uniText, sal_Int32 uniTextLen ) +{ + sal_uInt32 nInfo = 0; + sal_Size nSrcChars = 0; + + sal_Size nDestBytes = UnicodeToTextConverter_Impl::getInstance().convert ( + uniText, uniTextLen, buffer, bufLen, + OUSTRING_TO_OSTRING_CVTFLAGS | RTL_UNICODETOTEXT_FLAGS_FLUSH, &nInfo, &nSrcChars); + + if( nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL ) + { + errno = EOVERFLOW; + return 0; + } + + /* ensure trailing '\0' */ + buffer[nDestBytes] = '\0'; + return nDestBytes; +} + +namespace +{ + class TextToUnicodeConverter_Impl + { + rtl_TextToUnicodeConverter m_converter; + + TextToUnicodeConverter_Impl() + : m_converter (rtl_createTextToUnicodeConverter (osl_getThreadTextEncoding())) + {} + + ~TextToUnicodeConverter_Impl() + { + rtl_destroyTextToUnicodeConverter (m_converter); + } + + public: + static TextToUnicodeConverter_Impl & getInstance() + { + static TextToUnicodeConverter_Impl g_theConverter; + return g_theConverter; + } + + sal_Size convert( + char const * pSrcBuf, sal_Size nSrcBytes, sal_Unicode * pDstBuf, sal_Size nDstChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes) + { + OSL_ASSERT(m_converter != nullptr); + return rtl_convertTextToUnicode ( + m_converter, nullptr, pSrcBuf, nSrcBytes, pDstBuf, nDstChars, nFlags, pInfo, pSrcCvtBytes); + } + }; +} + +int TextToUnicode( + const char* text, + size_t text_buffer_size, + sal_Unicode* unic_text, + sal_Int32 unic_text_buffer_size) +{ + sal_uInt32 nInfo = 0; + sal_Size nSrcChars = 0; + + sal_Size nDestBytes = TextToUnicodeConverter_Impl::getInstance().convert( + text, text_buffer_size, unic_text, unic_text_buffer_size, + OSTRING_TO_OUSTRING_CVTFLAGS | RTL_TEXTTOUNICODE_FLAGS_FLUSH, &nInfo, &nSrcChars); + + if (nInfo & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL) + { + errno = EOVERFLOW; + return 0; + } + + /* ensure trailing '\0' */ + unic_text[nDestBytes] = '\0'; + return nDestBytes; +} + +oslFileError osl::detail::convertUrlToPathname(OUString const & url, OString * pathname) { + assert(pathname != nullptr); + oslFileError e; + try { + e = getSystemPathFromFileUrl(url, pathname, true); + } catch (std::length_error &) { + e = osl_File_E_RANGE; + } + if (e == osl_File_E_None && !pathname->startsWith("/")) { + e = osl_File_E_INVAL; + } + return e; +} + +oslFileError osl::detail::convertPathnameToUrl(OString const & pathname, OUString * url) { + assert(url != nullptr); + OUStringBuffer buf(10+pathname.getLength()); + buf.append("file:"); + if (pathname.startsWith("/")) { + buf.append("//"); + // so if pathname should ever start with "//" that isn't mistaken for an authority + // component + } + for (sal_Size convert = pathname.getLength();;) { + auto n = std::max(convert, sal_Size(PATH_MAX)); // approximation of required converted size + OUStringBuffer ubuf(static_cast(n)); + auto s = ubuf.appendUninitialized(n); + sal_uInt32 info; + sal_Size converted; + //TODO: context, for reliable treatment of DESTBUFFERTOSMALL: + n = TextToUnicodeConverter_Impl::getInstance().convert( + pathname.getStr() + pathname.getLength() - convert, convert, s, n, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + ubuf.setLength(n); + buf.append( + rtl::Uri::encode( + ubuf.makeStringAndClear(), uriCharClass.data(), rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_UTF8)); + assert(converted <= convert); + convert -= converted; + if ((info & RTL_TEXTTOUNICODE_INFO_ERROR) != 0) { + assert(convert > 0); + //TODO: see writeEscapeOctet in sal/rtl/uri.cxx + buf.append("%"); + unsigned char c = pathname[pathname.getLength() - convert]; + assert(c >= 0x80); + static sal_Unicode const aHex[16] + = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }; /* '0'--'9', 'A'--'F' */ + buf.append(aHex[c >> 4]); + buf.append(aHex[c & 15]); + --convert; + continue; + } + assert((convert == 0) == ((info & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL) == 0)); + if ((info & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL) == 0) { + break; + } + } + *url = buf.makeStringAndClear(); + return osl_File_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_url.hxx b/sal/osl/unx/file_url.hxx new file mode 100644 index 000000000..3ffd9e06b --- /dev/null +++ b/sal/osl/unx/file_url.hxx @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_FILE_URL_HXX +#define INCLUDED_SAL_OSL_UNX_FILE_URL_HXX + +#include + +namespace rtl { + class OString; + class OUString; +} + +oslFileError getSystemPathFromFileURL_Ex(rtl_uString *ustrFileURL, rtl_uString **pustrSystemPath); + +oslFileError FileURLToPath(char * buffer, size_t bufLen, rtl_uString* ustrFileURL); + +int UnicodeToText(char * buffer, size_t bufLen, const sal_Unicode * uniText, sal_Int32 uniTextLen); + +int TextToUnicode(const char* text, size_t text_buffer_size, sal_Unicode* unic_text, sal_Int32 unic_text_buffer_size); + +namespace osl::detail { + +oslFileError convertUrlToPathname(rtl::OUString const & url, rtl::OString * pathname); + +oslFileError convertPathnameToUrl(rtl::OString const & pathname, rtl::OUString * url); + +bool find_in_PATH(const rtl::OUString& file_path, rtl::OUString& result); + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/file_volume.cxx b/sal/osl/unx/file_volume.cxx new file mode 100644 index 000000000..5e661bd65 --- /dev/null +++ b/sal/osl/unx/file_volume.cxx @@ -0,0 +1,336 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "file_error_transl.hxx" +#include "file_url.hxx" +#include "system.hxx" + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_STATFS_H +#undef HAVE_STATFS_H +#endif + +#if defined(LINUX) && defined(__FreeBSD_kernel__) +#undef LINUX +#define FREEBSD 1 +#endif + +#if defined(__sun) + +#include +#include +#define HAVE_STATFS_H + +#elif defined(LINUX) + +#include +#include +#define HAVE_STATFS_H + +#elif defined(NETBSD) || defined(FREEBSD) || defined(OPENBSD) || defined(DRAGONFLY) + +#include +#include +#include +#define HAVE_STATFS_H + +#elif defined(MACOSX) + +#include +#include +#define HAVE_STATFS_H + +#endif /* HAVE_STATFS_H */ + +/************************************************************************ + * ToDo + * + * - Fix: check for corresponding struct sizes in exported functions + * - check size/use of oslVolumeInfo + ***********************************************************************/ + +/****************************************************************************** + * + * C-String Function Declarations + * + *****************************************************************************/ + +static oslFileError osl_psz_getVolumeInformation(const char* , oslVolumeInfo* pInfo, sal_uInt32 uFieldMask); + +/****************************************************************************/ +/* osl_getVolumeInformation */ +/****************************************************************************/ + +oslFileError osl_getVolumeInformation( rtl_uString* ustrDirectoryURL, oslVolumeInfo* pInfo, sal_uInt32 uFieldMask ) +{ + char path[PATH_MAX]; + oslFileError eRet; + + OSL_ASSERT( ustrDirectoryURL ); + OSL_ASSERT( pInfo ); + + /* convert directory url to system path */ + eRet = FileURLToPath( path, PATH_MAX, ustrDirectoryURL ); + if( eRet != osl_File_E_None ) + return eRet; + +#ifdef MACOSX + if ( macxp_resolveAlias( path, PATH_MAX ) != 0 ) + return oslTranslateFileError( errno ); +#endif/* MACOSX */ + + return osl_psz_getVolumeInformation( path, pInfo, uFieldMask); +} + +/****************************************************************************** + * + * C-String Versions of Exported Module Functions + * + *****************************************************************************/ + +#ifdef HAVE_STATFS_H + +#if defined(FREEBSD) || defined(MACOSX) || defined(OPENBSD) || defined(DRAGONFLY) +# define OSL_detail_STATFS_STRUCT struct statfs +# define OSL_detail_STATFS(dir, sfs) statfs((dir), (sfs)) +# define OSL_detail_STATFS_BLKSIZ(a) (static_cast((a).f_bsize)) +# define OSL_detail_STATFS_TYPENAME(a) ((a).f_fstypename) +#if defined(OPENBSD) +# define OSL_detail_STATFS_ISREMOTE(a) (rtl_str_compare((a).f_fstypename, "nfs") == 0) +#else +# define OSL_detail_STATFS_ISREMOTE(a) (((a).f_type & MNT_LOCAL) == 0) +#endif + +/* always return true if queried for the properties of + the file system. If you think this is wrong under any + of the target platforms fix it!!!! */ +# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (true) +# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (true) +#endif /* FREEBSD || MACOSX || OPENBSD */ + +#if defined(NETBSD) + +# define OSL_detail_STATFS_STRUCT struct statvfs +# define OSL_detail_STATFS(dir, sfs) statvfs((dir), (sfs)) +# define OSL_detail_STATFS_ISREMOTE(a) (((a).f_flag & ST_LOCAL) == 0) + +# define OSL_detail_STATFS_BLKSIZ(a) ((sal_uInt64)((a).f_bsize)) +# define OSL_detail_STATFS_TYPENAME(a) ((a).f_fstypename) + +# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (strcmp((a).f_fstypename, "msdos") != 0 && strcmp((a).f_fstypename, "ntfs") != 0 && strcmp((a).f_fstypename, "smbfs") != 0) +# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (strcmp((a).f_fstypename, "msdos") != 0) +#endif /* NETBSD */ + +#if defined(LINUX) +# define OSL_detail_NFS_SUPER_MAGIC 0x6969 +# define OSL_detail_SMB_SUPER_MAGIC 0x517B +# define OSL_detail_MSDOS_SUPER_MAGIC 0x4d44 +# define OSL_detail_NTFS_SUPER_MAGIC 0x5346544e +# define OSL_detail_STATFS_STRUCT struct statfs +# define OSL_detail_STATFS(dir, sfs) statfs((dir), (sfs)) +# define OSL_detail_STATFS_BLKSIZ(a) (static_cast((a).f_bsize)) +# define OSL_detail_STATFS_IS_NFS(a) (OSL_detail_NFS_SUPER_MAGIC == (a).f_type) +# define OSL_detail_STATFS_IS_SMB(a) (OSL_detail_SMB_SUPER_MAGIC == (a).f_type) +# define OSL_detail_STATFS_ISREMOTE(a) (OSL_detail_STATFS_IS_NFS((a)) || OSL_detail_STATFS_IS_SMB((a))) +# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) ((OSL_detail_MSDOS_SUPER_MAGIC != (a).f_type) && (OSL_detail_NTFS_SUPER_MAGIC != (a).f_type)) +# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) ((OSL_detail_MSDOS_SUPER_MAGIC != (a).f_type)) +#endif /* LINUX */ + +#if defined(__sun) +# define OSL_detail_STATFS_STRUCT struct statvfs +# define OSL_detail_STATFS(dir, sfs) statvfs((dir), (sfs)) +# define OSL_detail_STATFS_BLKSIZ(a) ((sal_uInt64)((a).f_frsize)) +# define OSL_detail_STATFS_TYPENAME(a) ((a).f_basetype) +# define OSL_detail_STATFS_ISREMOTE(a) (rtl_str_compare((a).f_basetype, "nfs") == 0) + +/* always return true if queried for the properties of + the file system. If you think this is wrong under any + of the target platforms fix it!!!! */ +# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (true) +# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (true) +#endif /* __sun */ + +# define OSL_detail_STATFS_INIT(a) (memset(&(a), 0, sizeof(OSL_detail_STATFS_STRUCT))) + +#else /* no statfs available */ + +# define OSL_detail_STATFS_STRUCT struct dummy {int i;} +# define OSL_detail_STATFS_INIT(a) ((void)a) +# define OSL_detail_STATFS(dir, sfs) (1) +# define OSL_detail_STATFS_ISREMOTE(sfs) (false) +# define OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(a) (true) +# define OSL_detail_STATFS_IS_CASE_PRESERVING_FS(a) (true) +#endif /* HAVE_STATFS_H */ + +static oslFileError osl_psz_getVolumeInformation ( + const char* pszDirectory, oslVolumeInfo* pInfo, sal_uInt32 uFieldMask) +{ + if (!pInfo) + return osl_File_E_INVAL; + + pInfo->uValidFields = 0; + pInfo->uAttributes = 0; + pInfo->uTotalSpace = 0; + pInfo->uFreeSpace = 0; + pInfo->uUsedSpace = 0; + + if ((uFieldMask + & (osl_VolumeInfo_Mask_Attributes | osl_VolumeInfo_Mask_TotalSpace + | osl_VolumeInfo_Mask_UsedSpace | osl_VolumeInfo_Mask_FreeSpace + | osl_VolumeInfo_Mask_FileSystemName + | osl_VolumeInfo_Mask_FileSystemCaseHandling)) + != 0) + { + OSL_detail_STATFS_STRUCT sfs; + OSL_detail_STATFS_INIT(sfs); + // coverity[fs_check_call : FALSE] + if ((OSL_detail_STATFS(pszDirectory, &sfs)) < (0)) + { + oslFileError result = oslTranslateFileError(errno); + return result; + } + + /* FIXME: how to detect the kind of storage (fixed, cdrom, ...) */ + if (uFieldMask & osl_VolumeInfo_Mask_Attributes) + { + bool const remote = OSL_detail_STATFS_ISREMOTE(sfs); + // extracted from the 'if' to avoid Clang -Wunreachable-code + if (remote) + pInfo->uAttributes |= osl_Volume_Attribute_Remote; + + pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes; + } + + if (uFieldMask & osl_VolumeInfo_Mask_FileSystemCaseHandling) + { + if (OSL_detail_STATFS_IS_CASE_SENSITIVE_FS(sfs)) + pInfo->uAttributes |= osl_Volume_Attribute_Case_Sensitive; + + if (OSL_detail_STATFS_IS_CASE_PRESERVING_FS(sfs)) + pInfo->uAttributes |= osl_Volume_Attribute_Case_Is_Preserved; + + pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes; + } + +#if defined(OSL_detail_STATFS_BLKSIZ) + + if ((uFieldMask & osl_VolumeInfo_Mask_TotalSpace) || + (uFieldMask & osl_VolumeInfo_Mask_UsedSpace)) + { + pInfo->uTotalSpace = OSL_detail_STATFS_BLKSIZ(sfs); + pInfo->uTotalSpace *= static_cast(sfs.f_blocks); + pInfo->uValidFields |= osl_VolumeInfo_Mask_TotalSpace; + } + + if ((uFieldMask & osl_VolumeInfo_Mask_FreeSpace) || + (uFieldMask & osl_VolumeInfo_Mask_UsedSpace)) + { + pInfo->uFreeSpace = OSL_detail_STATFS_BLKSIZ(sfs); + + if (getuid() == 0) + pInfo->uFreeSpace *= static_cast(sfs.f_bfree); + else + pInfo->uFreeSpace *= static_cast(sfs.f_bavail); + + pInfo->uValidFields |= osl_VolumeInfo_Mask_FreeSpace; + } + + if ((pInfo->uValidFields & osl_VolumeInfo_Mask_TotalSpace) && + (pInfo->uValidFields & osl_VolumeInfo_Mask_FreeSpace )) + { + pInfo->uUsedSpace = pInfo->uTotalSpace - pInfo->uFreeSpace; + pInfo->uValidFields |= osl_VolumeInfo_Mask_UsedSpace; + } + +#endif /* OSL_detail_STATFS_BLKSIZ */ + +#if defined(OSL_detail_STATFS_TYPENAME) + + if (uFieldMask & osl_VolumeInfo_Mask_FileSystemName) + { + rtl_string2UString( + &(pInfo->ustrFileSystemName), + OSL_detail_STATFS_TYPENAME(sfs), + rtl_str_getLength(OSL_detail_STATFS_TYPENAME(sfs)), + osl_getThreadTextEncoding(), + OUSTRING_TO_OSTRING_CVTFLAGS); + OSL_ASSERT(pInfo->ustrFileSystemName != nullptr); + + pInfo->uValidFields |= osl_VolumeInfo_Mask_FileSystemName; + } + +#endif /* OSL_detail_STATFS_TYPENAME */ + } + + pInfo->uMaxNameLength = 0; + if (uFieldMask & osl_VolumeInfo_Mask_MaxNameLength) + { + long nLen = pathconf(pszDirectory, _PC_NAME_MAX); + if (nLen > 0) + { + pInfo->uMaxNameLength = static_cast(nLen); + pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxNameLength; + } + } + + pInfo->uMaxPathLength = 0; + if (uFieldMask & osl_VolumeInfo_Mask_MaxPathLength) + { + long nLen = pathconf (pszDirectory, _PC_PATH_MAX); + if (nLen > 0) + { + pInfo->uMaxPathLength = static_cast(nLen); + pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxPathLength; + } + } + + return osl_File_E_None; +} + +oslFileError osl_getVolumeDeviceMountPath( oslVolumeDeviceHandle, rtl_uString ** ) +{ + return osl_File_E_INVAL; +} + +oslFileError osl_acquireVolumeDeviceHandle( oslVolumeDeviceHandle ) +{ + return osl_File_E_INVAL; +} + +oslFileError osl_releaseVolumeDeviceHandle( oslVolumeDeviceHandle ) +{ + return osl_File_E_INVAL; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/interlck.cxx b/sal/osl/unx/interlck.cxx new file mode 100644 index 000000000..81404cb57 --- /dev/null +++ b/sal/osl/unx/interlck.cxx @@ -0,0 +1,95 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.hxx" + +#include +#include + +#if ( defined (__sun) || defined ( NETBSD ) ) && defined ( SPARC ) +#error please use asm/interlck_sparc.s +#elif defined (__sun) && defined ( X86 ) +#error please use asm/interlck_x86.s +#elif HAVE_GCC_BUILTIN_ATOMIC +oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount) +{ + return __sync_add_and_fetch(pCount, 1); +} +oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount) +{ + return __sync_sub_and_fetch(pCount, 1); +} +#elif defined ( __GNUC__ ) && ( defined ( X86 ) || defined ( X86_64 ) ) +/* That's possible on x86-64 too since oslInterlockedCount is a sal_Int32 */ + +oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount) +{ + register oslInterlockedCount nCount asm("%eax"); + nCount = 1; + __asm__ __volatile__ ( + "lock\n\t" + "xaddl %0, %1\n\t" + : "+r" (nCount), "+m" (*pCount) + : /* nothing */ + : "memory"); + return ++nCount; +} + +oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount) +{ + register oslInterlockedCount nCount asm("%eax"); + nCount = -1; + __asm__ __volatile__ ( + "lock\n\t" + "xaddl %0, %1\n\t" + : "+r" (nCount), "+m" (*pCount) + : /* nothing */ + : "memory"); + return --nCount; +} +#else +/* use only if nothing else works, expensive due to single mutex for all reference counts */ + +static pthread_mutex_t InterLock = PTHREAD_MUTEX_INITIALIZER; + +oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount) +{ + oslInterlockedCount Count; + + pthread_mutex_lock(&InterLock); + Count = ++(*pCount); + pthread_mutex_unlock(&InterLock); + + return Count; +} + +oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount) +{ + oslInterlockedCount Count; + + pthread_mutex_lock(&InterLock); + Count = --(*pCount); + pthread_mutex_unlock(&InterLock); + + return Count; +} + +#endif /* default */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/memory.cxx b/sal/osl/unx/memory.cxx new file mode 100644 index 000000000..be3e41fb5 --- /dev/null +++ b/sal/osl/unx/memory.cxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#ifdef __ANDROID__ +#include +#endif + +void* osl_aligned_alloc(sal_Size align, sal_Size size) +{ + if (size == 0) + { + return nullptr; + } + +#if defined __ANDROID__ + return memalign(align, size); +#else + void* ptr; + int err = posix_memalign(&ptr, align, size); + return err ? nullptr : ptr; +#endif +} + +void osl_aligned_free(void* p) { free(p); } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/module.cxx b/sal/osl/unx/module.cxx new file mode 100644 index 000000000..606c8fa47 --- /dev/null +++ b/sal/osl/unx/module.cxx @@ -0,0 +1,344 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "system.hxx" +#include "file_url.hxx" + +#ifdef AIX +#include +#endif + +static bool getModulePathFromAddress(void * address, rtl_String ** path) +{ + bool result = false; +#if defined(AIX) + int size = 4 * 1024; + char *buf, *filename=NULL; + struct ld_info *lp; + + if ((buf = (char*)malloc(size)) == NULL) + return false; + + //figure out how big a buffer we need + while (loadquery(L_GETINFO, buf, size) == -1 && errno == ENOMEM) + { + size += 4 * 1024; + free(buf); + if ((buf = (char*)malloc(size)) == NULL) + return false; + } + + lp = (struct ld_info*) buf; + while (lp) + { + unsigned long start = (unsigned long)lp->ldinfo_dataorg; + unsigned long end = start + lp->ldinfo_datasize; + if (start <= (unsigned long)address && end > (unsigned long)address) + { + filename = lp->ldinfo_filename; + break; + } + if (!lp->ldinfo_next) + break; + lp = (struct ld_info*) ((char *) lp + lp->ldinfo_next); + } + + if (filename) + { + rtl_string_newFromStr(path, filename); + result = sal_True; + } + else + { + result = sal_False; + } + + free(buf); +#else +#if HAVE_UNIX_DLAPI + Dl_info dl_info; + + result = dladdr(address, &dl_info) != 0; + + if (result) + { + rtl_string_newFromStr(path, dl_info.dli_fname); + } +#else + (void) address; + (void) path; +#endif +#endif + return result; +} + +#ifndef DISABLE_DYNLOADING + +/*****************************************************************************/ +/* osl_loadModule */ +/*****************************************************************************/ + +oslModule SAL_CALL osl_loadModule(rtl_uString *ustrModuleName, sal_Int32 nRtldMode) +{ + oslModule pModule=nullptr; + rtl_uString* ustrTmp = nullptr; + + SAL_WARN_IF(ustrModuleName == nullptr, "sal.osl", "string is not valid"); + + /* ensure ustrTmp hold valid string */ + if (osl_getSystemPathFromFileURL(ustrModuleName, &ustrTmp) != osl_File_E_None) + rtl_uString_assign(&ustrTmp, ustrModuleName); + + if (ustrTmp) + { + char buffer[PATH_MAX]; + + if (UnicodeToText(buffer, PATH_MAX, ustrTmp->buffer, ustrTmp->length)) + pModule = osl_loadModuleAscii(buffer, nRtldMode); + rtl_uString_release(ustrTmp); + } + + return pModule; +} + +/*****************************************************************************/ +/* osl_loadModuleAscii */ +/*****************************************************************************/ + +oslModule SAL_CALL osl_loadModuleAscii(const char *pModuleName, sal_Int32 nRtldMode) +{ +#if HAVE_UNIX_DLAPI + SAL_WARN_IF( + ((nRtldMode & SAL_LOADMODULE_LAZY) != 0 + && (nRtldMode & SAL_LOADMODULE_NOW) != 0), + "sal.osl", "only either LAZY or NOW"); + if (pModuleName) + { + int rtld_mode = + ((nRtldMode & SAL_LOADMODULE_NOW) ? RTLD_NOW : RTLD_LAZY) | + ((nRtldMode & SAL_LOADMODULE_GLOBAL) ? RTLD_GLOBAL : RTLD_LOCAL); + void* pLib = dlopen(pModuleName, rtld_mode); + + SAL_WARN_IF( + pLib == nullptr, "sal.osl", + "dlopen(" << pModuleName << ", " << rtld_mode << "): " + << dlerror()); + return pLib; + } +#else + (void) pModuleName; + (void) nRtldMode; +#endif + return nullptr; +} + +oslModule osl_loadModuleRelativeAscii( + oslGenericFunction baseModule, char const * relativePath, sal_Int32 mode) +{ + assert(relativePath && "illegal argument"); + if (relativePath[0] == '/') { + return osl_loadModuleAscii(relativePath, mode); + } + rtl_String * path = nullptr; + rtl_String * suffix = nullptr; + oslModule module; + if (!getModulePathFromAddress( + reinterpret_cast< void * >(baseModule), &path)) + { + return nullptr; + } + rtl_string_newFromStr_WithLength( + &path, path->buffer, + (rtl_str_lastIndexOfChar_WithLength(path->buffer, path->length, '/') + + 1)); + /* cut off everything after the last slash; should the original path + contain no slash, the resulting path is the empty string */ + rtl_string_newFromStr(&suffix, relativePath); + rtl_string_newConcat(&path, path, suffix); + rtl_string_release(suffix); + module = osl_loadModuleAscii(path->buffer, mode); + rtl_string_release(path); + return module; +} + +#endif // !DISABLE_DYNLOADING + +/*****************************************************************************/ +/* osl_getModuleHandle */ +/*****************************************************************************/ + +sal_Bool SAL_CALL +osl_getModuleHandle(rtl_uString *, oslModule *pResult) +{ +#if HAVE_UNIX_DLAPI + *pResult = static_cast(RTLD_DEFAULT); + return true; +#else + *pResult = nullptr; + return false; +#endif +} + +/*****************************************************************************/ +/* osl_unloadModule */ +/*****************************************************************************/ +void SAL_CALL osl_unloadModule(oslModule hModule) +{ +#if !defined(DISABLE_DYNLOADING) && HAVE_UNIX_DLAPI + if (hModule) + { + int nRet = dlclose(hModule); + SAL_INFO_IF( + nRet != 0, "sal.osl", "dlclose(" << hModule << "): " << dlerror()); + } +#else + (void) hModule; +#endif +} + +namespace { + +void * getSymbol(oslModule module, char const * symbol) +{ + assert(symbol != nullptr); +#if HAVE_UNIX_DLAPI + // We do want to use dlsym() also in the DISABLE_DYNLOADING case + // just to look up symbols in the static executable, I think: + void * p = dlsym(module, symbol); + SAL_INFO_IF( + p == nullptr, "sal.osl", + "dlsym(" << module << ", " << symbol << "): " << dlerror()); +#else + (void) module; + (void) symbol; + void *p = nullptr; +#endif + return p; +} + +} + +/*****************************************************************************/ +/* osl_getSymbol */ +/*****************************************************************************/ +void* SAL_CALL +osl_getSymbol(oslModule Module, rtl_uString* pSymbolName) +{ + // Arbitrarily using UTF-8: + OString s; + if (!OUString::unacquired(&pSymbolName).convertToString( + &s, RTL_TEXTENCODING_UTF8, + (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | + RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR))) + { + SAL_INFO( + "sal.osl", "cannot convert \"" << OUString::unacquired(&pSymbolName) + << "\" to UTF-8"); + return nullptr; + } + if (s.indexOf('\0') != -1) { + SAL_INFO("sal.osl", "\"" << s << "\" contains embedded NUL"); + return nullptr; + } + return getSymbol(Module, s.getStr()); +} + +/*****************************************************************************/ +/* osl_getAsciiFunctionSymbol */ +/*****************************************************************************/ +oslGenericFunction SAL_CALL +osl_getAsciiFunctionSymbol(oslModule Module, const char *pSymbol) +{ + return reinterpret_cast(getSymbol(Module, pSymbol)); + // requires conditionally-supported conversion from void * to function + // pointer +} + +/*****************************************************************************/ +/* osl_getFunctionSymbol */ +/*****************************************************************************/ +oslGenericFunction SAL_CALL +osl_getFunctionSymbol(oslModule module, rtl_uString *puFunctionSymbolName) +{ + return reinterpret_cast( + osl_getSymbol(module, puFunctionSymbolName)); + // requires conditionally-supported conversion from void * to function + // pointer +} + +/*****************************************************************************/ +/* osl_getModuleURLFromAddress */ +/*****************************************************************************/ +sal_Bool SAL_CALL osl_getModuleURLFromAddress(void * addr, rtl_uString ** ppLibraryUrl) +{ + bool result = false; + rtl_String * path = nullptr; + if (getModulePathFromAddress(addr, &path)) + { + rtl_string2UString(ppLibraryUrl, + path->buffer, + path->length, + osl_getThreadTextEncoding(), + OSTRING_TO_OUSTRING_CVTFLAGS); + + SAL_WARN_IF( + *ppLibraryUrl == nullptr, "sal.osl", "rtl_string2UString failed"); + auto const e = osl_getFileURLFromSystemPath(*ppLibraryUrl, ppLibraryUrl); + if (e == osl_File_E_None) + { + SAL_INFO("sal.osl", "osl_getModuleURLFromAddress(" << addr << ") => " << OUString(*ppLibraryUrl)); + + result = true; + } + else + { + SAL_WARN( + "sal.osl", + "osl_getModuleURLFromAddress(" << addr << "), osl_getFileURLFromSystemPath(" + << OUString::unacquired(ppLibraryUrl) << ") failed with " << e); + result = false; + } + rtl_string_release(path); + } + return result; +} + +/*****************************************************************************/ +/* osl_getModuleURLFromFunctionAddress */ +/*****************************************************************************/ +sal_Bool SAL_CALL osl_getModuleURLFromFunctionAddress(oslGenericFunction addr, rtl_uString ** ppLibraryUrl) +{ + return osl_getModuleURLFromAddress( + reinterpret_cast(addr), ppLibraryUrl); + // requires conditionally-supported conversion from function pointer to + // void * +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/mutex.cxx b/sal/osl/unx/mutex.cxx new file mode 100644 index 000000000..1ca4958fd --- /dev/null +++ b/sal/osl/unx/mutex.cxx @@ -0,0 +1,163 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#if defined LINUX +// to define __USE_UNIX98, via _XOPEN_SOURCE, enabling pthread_mutexattr_settype +#ifndef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif +#endif +#include "system.hxx" +#include "unixerrnostring.hxx" + +#include +#include + +#include +#include + + +typedef struct _oslMutexImpl +{ + pthread_mutex_t mutex; +} oslMutexImpl; + +oslMutex SAL_CALL osl_createMutex() +{ + oslMutexImpl* pMutex = static_cast(malloc(sizeof(oslMutexImpl))); + pthread_mutexattr_t aMutexAttr; + int nRet=0; + + SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex"); + + if ( pMutex == nullptr ) + { + return nullptr; + } + + pthread_mutexattr_init(&aMutexAttr); + + nRet = pthread_mutexattr_settype(&aMutexAttr, PTHREAD_MUTEX_RECURSIVE); + if( nRet == 0 ) + nRet = pthread_mutex_init(&(pMutex->mutex), &aMutexAttr); + if ( nRet != 0 ) + { + SAL_WARN("sal.osl.mutex", "pthread_muxex_init failed: " << UnixErrnoString(nRet)); + + free(pMutex); + pMutex = nullptr; + } + + pthread_mutexattr_destroy(&aMutexAttr); + + return pMutex; +} + +void SAL_CALL osl_destroyMutex(oslMutex pMutex) +{ + SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex"); + + if ( pMutex != nullptr ) + { + int nRet = pthread_mutex_destroy(&(pMutex->mutex)); + if ( nRet != 0 ) + { + SAL_WARN("sal.osl.mutex", "pthread_mutex_destroy failed: " << UnixErrnoString(nRet)); + } + + free(pMutex); + } +} + +#ifdef __COVERITY__ + extern void __coverity_recursive_lock_acquire__(void*); + extern void __coverity_recursive_lock_release__(void*); + extern void __coverity_assert_locked__(void*); +#endif + +sal_Bool SAL_CALL osl_acquireMutex(oslMutex pMutex) +{ + SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex"); + + if ( pMutex != nullptr ) + { + int nRet = pthread_mutex_lock(&(pMutex->mutex)); + if ( nRet != 0 ) + { + SAL_WARN("sal.osl.mutex", "pthread_mutex_lock failed: " << UnixErrnoString(nRet)); + return false; + } +#ifdef __COVERITY__ + __coverity_recursive_lock_acquire__(pMutex); +#endif + return true; + } + + /* not initialized */ + return false; +} + +sal_Bool SAL_CALL osl_tryToAcquireMutex(oslMutex pMutex) +{ + bool result = false; + + SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex"); + + if ( pMutex ) + { + int nRet = pthread_mutex_trylock(&(pMutex->mutex)); + if ( nRet == 0 ) + { +#ifdef __COVERITY__ + __coverity_recursive_lock_acquire__(pMutex); +#endif + result = true; + } + } + + return result; +} + +sal_Bool SAL_CALL osl_releaseMutex(oslMutex pMutex) +{ +#ifdef __COVERITY__ + __coverity_assert_locked__(pMutex); +#endif + SAL_WARN_IF(!pMutex, "sal.osl.mutex", "null pMutex"); + + if ( pMutex ) + { + int nRet = pthread_mutex_unlock(&(pMutex->mutex)); + if ( nRet != 0 ) + { + SAL_WARN("sal.osl.mutex", "pthread_mutex_unlock failed: " << UnixErrnoString(nRet)); + return false; + } + +#ifdef __COVERITY__ + __coverity_recursive_lock_release__(pMutex); +#endif + return true; + } + + /* not initialized */ + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/nlsupport.cxx b/sal/osl/unx/nlsupport.cxx new file mode 100644 index 000000000..2780a7fdd --- /dev/null +++ b/sal/osl/unx/nlsupport.cxx @@ -0,0 +1,872 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "nlsupport.hxx" + +// these share a lot, so use one define +#if defined(LINUX) || defined(EMSCRIPTEN) || defined(__sun) || \ + defined(FREEBSD) || defined(OPENBSD) || defined(DRAGONFLY) || defined(NETBSD) +#define LO_COMMON_NLS_ARCHS 1 +#else +#define LO_COMMON_NLS_ARCHS 0 +#endif + +#if LO_COMMON_NLS_ARCHS +#include +#include +#elif defined(MACOSX) || defined(IOS) +#include +#include +#include "system.hxx" +#endif + +#include + +namespace { + +struct Pair { + const char *key; + const rtl_TextEncoding value; +}; + +} + +/***************************************************************************** + compare function for binary search + *****************************************************************************/ + +static int +pair_compare (const char *key, const Pair *pair) +{ + int result = rtl_str_compareIgnoreAsciiCase( key, pair->key ); + return result; +} + +/***************************************************************************** + binary search on encoding tables + *****************************************************************************/ + +static const Pair* +pair_search (const char *key, const Pair *base, unsigned int member ) +{ + unsigned int lower = 0; + unsigned int upper = member; + + /* check for validity of input */ + if ( (key == nullptr) || (base == nullptr) || (member == 0) ) + return nullptr; + + /* binary search */ + while ( lower < upper ) + { + const unsigned int current = (lower + upper) / 2; + const int comparison = pair_compare( key, base + current ); + if (comparison < 0) + upper = current; + else if (comparison > 0) + lower = current + 1; + else + return base + current; + } + + return nullptr; +} + +/***************************************************************************** + convert rtl_Locale to locale string + *****************************************************************************/ + +static char * compose_locale( rtl_Locale * pLocale, char * buffer, size_t n ) +{ + /* check if a valid locale is specified */ + if( pLocale && pLocale->Language && + (pLocale->Language->length == 2 || pLocale->Language->length == 3) ) + { + size_t offset = 0; + + /* convert language code to ascii */ + { + rtl_String *pLanguage = nullptr; + + rtl_uString2String( &pLanguage, + pLocale->Language->buffer, pLocale->Language->length, + RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS ); + + if( sal::static_int_cast(pLanguage->length) < n ) + { + strcpy( buffer, pLanguage->buffer ); + offset = pLanguage->length; + } + + rtl_string_release( pLanguage ); + } + + /* convert country code to ascii */ + if( pLocale->Country && (pLocale->Country->length == 2) ) + { + rtl_String *pCountry = nullptr; + + rtl_uString2String( &pCountry, + pLocale->Country->buffer, pLocale->Country->length, + RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS ); + + if( offset + pCountry->length + 1 < n ) + { + strcpy( buffer + offset++, "_" ); + strcpy( buffer + offset, pCountry->buffer ); + offset += pCountry->length; + } + + rtl_string_release( pCountry ); + } + + /* convert variant to ascii - check if there is enough space for the variant string */ + if( pLocale->Variant && pLocale->Variant->length && + ( sal::static_int_cast(pLocale->Variant->length) < n - 6 ) ) + { + rtl_String *pVariant = nullptr; + + rtl_uString2String( &pVariant, + pLocale->Variant->buffer, pLocale->Variant->length, + RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS ); + + if( offset + pVariant->length + 1 < n ) + { + strcpy( buffer + offset, pVariant->buffer ); + } + + rtl_string_release( pVariant ); + } + + return buffer; + } + + return nullptr; +} + +/***************************************************************************** + convert locale string to rtl_Locale + *****************************************************************************/ + +static rtl_Locale * parse_locale( const char * locale ) +{ + assert(locale != nullptr); + + if (*locale == '\0' || std::strcmp(locale, "C") == 0 + || std::strcmp(locale, "POSIX") == 0) + { + return rtl_locale_register(u"C", u"", u""); + } + + size_t len = strlen( locale ); + + rtl_uString * pLanguage = nullptr; + rtl_uString * pCountry = nullptr; + rtl_uString * pVariant = nullptr; + + size_t offset = std::min(len, 2); + + rtl_Locale * ret; + + /* language is a two or three letter code */ + if( (len > 3 && locale[3] == '_') || (len == 3 && locale[2] != '_') ) + offset = 3; + + /* convert language code to unicode */ + rtl_string2UString( &pLanguage, locale, offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS ); + OSL_ASSERT(pLanguage != nullptr); + + /* convert country code to unicode */ + if( len >= offset+3 && locale[offset] == '_' ) + { + rtl_string2UString( &pCountry, locale + offset + 1, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS ); + OSL_ASSERT(pCountry != nullptr); + offset += 3; + } + + /* convert variant code to unicode - do not rely on "." as delimiter */ + if( len > offset ) { + rtl_string2UString( &pVariant, locale + offset, len - offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS ); + OSL_ASSERT(pVariant != nullptr); + } + + ret = rtl_locale_register( pLanguage->buffer, pCountry ? pCountry->buffer : u"", pVariant ? pVariant->buffer : u"" ); + + if (pVariant) rtl_uString_release(pVariant); + if (pCountry) rtl_uString_release(pCountry); + if (pLanguage) rtl_uString_release(pLanguage); + + return ret; +} + +#if LO_COMMON_NLS_ARCHS + +/* + * This implementation of osl_getTextEncodingFromLocale maps + * from nl_langinfo_l(CODESET) to rtl_textencoding defines. + * nl_langinfo() is supported only on Linux, Solaris, + * >= NetBSD 1.6 and >= FreeBSD 4.4 + * + * _nl_language_list[] is an array list of supported encodings. Because + * we are using a binary search, the list has to be in ascending order. + * We are comparing the encodings case insensitive, so the list has + * to be completely upper or lowercase. + */ + +#if defined(__sun) + +/* The values in the below list can be obtained with a script like + * #!/bin/sh + * for i in `locale -a`; do + * LC_ALL=$i locale -k code_set_name + * done + */ +static const Pair nl_language_list[] = { + { "5601", RTL_TEXTENCODING_EUC_KR }, /* ko_KR.EUC */ + { "646", RTL_TEXTENCODING_ISO_8859_1 }, /* fake: ASCII_US */ + { "ANSI-1251", RTL_TEXTENCODING_MS_1251 }, /* ru_RU.ANSI1251 */ + { "BIG5", RTL_TEXTENCODING_BIG5 }, /* zh_CN.BIG5 */ + { "BIG5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* zh_CN.BIG5HK */ + { "CNS11643", RTL_TEXTENCODING_EUC_TW }, /* zh_TW.EUC */ + { "EUCJP", RTL_TEXTENCODING_EUC_JP }, /* ja_JP.eucjp */ + { "GB18030", RTL_TEXTENCODING_GB_18030 }, /* zh_CN.GB18030 */ + { "GB2312", RTL_TEXTENCODING_GB_2312 }, /* zh_CN */ + { "GBK", RTL_TEXTENCODING_GBK }, /* zh_CN.GBK */ + { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, + { "ISO8859-10", RTL_TEXTENCODING_ISO_8859_10 }, + { "ISO8859-13", RTL_TEXTENCODING_ISO_8859_13 }, /* lt_LT lv_LV */ + { "ISO8859-14", RTL_TEXTENCODING_ISO_8859_14 }, + { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, + { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, + { "ISO8859-3", RTL_TEXTENCODING_ISO_8859_3 }, + { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, + { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, + { "ISO8859-6", RTL_TEXTENCODING_ISO_8859_6 }, + { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, + { "ISO8859-8", RTL_TEXTENCODING_ISO_8859_8 }, + { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, + { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, + { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, + { "PCK", RTL_TEXTENCODING_MS_932 }, + { "SUN_EU_GREEK", RTL_TEXTENCODING_ISO_8859_7 }, /* 8859-7 + Euro */ + { "TIS620.2533", RTL_TEXTENCODING_MS_874 }, /* th_TH.TIS620 */ + { "UTF-8", RTL_TEXTENCODING_UTF8 } +}; + +/* XXX MS-874 is an extension to tis620, so this is not + * really equivalent */ + +#elif defined(LINUX) || defined(EMSCRIPTEN) + +#if !defined(CODESET) +#define CODESET _NL_CTYPE_CODESET_NAME +#endif + +const Pair nl_language_list[] = { + { "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */ + { "ANSI_X3.4-1968", RTL_TEXTENCODING_ISO_8859_1 }, /* fake: ASCII_US */ + { "ASMO_449", RTL_TEXTENCODING_DONTKNOW }, /* ISO_9036 ARABIC7 */ + { "BALTIC", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-179 */ + { "BIG5", RTL_TEXTENCODING_BIG5 }, /* locale: zh_TW */ + { "BIG5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* locale: zh_CN.BIG5HK */ + { "BIG5HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* deprecated */ + { "BS_4730", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-4 ISO646-GB */ + { "BS_VIEWDATA", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-47 */ + { "CP1250", RTL_TEXTENCODING_MS_1250 }, /* MS-EE */ + { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */ + { "CP1252", RTL_TEXTENCODING_MS_1252 }, /* MS-ANSI */ + { "CP1253", RTL_TEXTENCODING_MS_1253 }, /* MS-GREEK */ + { "CP1254", RTL_TEXTENCODING_MS_1254 }, /* MS-TURK */ + { "CP1255", RTL_TEXTENCODING_MS_1255 }, /* MS-HEBR */ + { "CP1256", RTL_TEXTENCODING_MS_1256 }, /* MS-ARAB */ + { "CP1257", RTL_TEXTENCODING_MS_1257 }, /* WINBALTRIM */ + { "CSA_Z243.4-1985-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-121 */ + { "CSA_Z243.4-1985-2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-122 CSA7-2 */ + { "CSA_Z243.4-1985-GR", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-123 */ + { "CSN_369103", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-139 */ + { "CWI", RTL_TEXTENCODING_DONTKNOW }, /* CWI-2 CP-HU */ + { "DEC-MCS", RTL_TEXTENCODING_DONTKNOW }, /* DEC */ + { "DIN_66003", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-21 */ + { "DS_2089", RTL_TEXTENCODING_DONTKNOW }, /* DS2089 ISO646-DK */ + { "EBCDIC-AT-DE", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-AT-DE-A", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-CA-FR", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-DK-NO", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-DK-NO-A", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-ES", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-ES-A", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-ES-S", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-FI-SE", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-FI-SE-A", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-FR", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-IS-FRISS", RTL_TEXTENCODING_DONTKNOW }, /* FRISS */ + { "EBCDIC-IT", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-PT", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-UK", RTL_TEXTENCODING_DONTKNOW }, + { "EBCDIC-US", RTL_TEXTENCODING_DONTKNOW }, + { "ECMA-CYRILLIC", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-111 */ + { "ES", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-17 */ + { "ES2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-85 */ + { "EUC-JP", RTL_TEXTENCODING_EUC_JP }, /* locale: ja_JP.eucjp */ + { "EUC-KR", RTL_TEXTENCODING_EUC_KR }, /* locale: ko_KR.euckr */ + { "EUC-TW", RTL_TEXTENCODING_EUC_TW }, /* locale: zh_TW.euctw */ + { "GB18030", RTL_TEXTENCODING_GB_18030 }, /* locale: zh_CN.gb18030 */ + { "GB2312", RTL_TEXTENCODING_GB_2312 }, /* locale: zh_CN */ + { "GB_1988-80", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-57 */ + { "GBK", RTL_TEXTENCODING_GBK }, /* locale: zh_CN.GBK */ + { "GOST_19768-74", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-153 */ + { "GREEK-CCITT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-150 */ + { "GREEK7", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-88 */ + { "GREEK7-OLD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-18 */ + { "HP-ROMAN8", RTL_TEXTENCODING_DONTKNOW }, /* ROMAN8 R8 */ + { "IBM037", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-[US|CA|WT] */ + { "IBM038", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-INT CP038 */ + { "IBM1004", RTL_TEXTENCODING_DONTKNOW }, /* CP1004 OS2LATIN1 */ + { "IBM1026", RTL_TEXTENCODING_DONTKNOW }, /* CP1026 1026 */ + { "IBM1047", RTL_TEXTENCODING_DONTKNOW }, /* CP1047 1047 */ + { "IBM256", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-INT1 */ + { "IBM273", RTL_TEXTENCODING_DONTKNOW }, /* CP273 */ + { "IBM274", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-BE CP274 */ + { "IBM275", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-BR CP275 */ + { "IBM277", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-[DK|NO] */ + { "IBM278", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-[FISE]*/ + { "IBM280", RTL_TEXTENCODING_DONTKNOW }, /* CP280 EBCDIC-CP-IT*/ + { "IBM281", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-JP-E CP281 */ + { "IBM284", RTL_TEXTENCODING_DONTKNOW }, /* CP284 EBCDIC-CP-ES */ + { "IBM285", RTL_TEXTENCODING_DONTKNOW }, /* CP285 EBCDIC-CP-GB */ + { "IBM290", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-JP-KANA */ + { "IBM297", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-FR */ + { "IBM420", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-AR1 */ + { "IBM423", RTL_TEXTENCODING_DONTKNOW }, /* CP423 EBCDIC-CP-GR */ + { "IBM424", RTL_TEXTENCODING_DONTKNOW }, /* CP424 EBCDIC-CP-HE */ + { "IBM437", RTL_TEXTENCODING_IBM_437 }, /* CP437 437 */ + { "IBM500", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CP-[BE|CH] */ + { "IBM850", RTL_TEXTENCODING_IBM_850 }, /* CP850 850 */ + { "IBM851", RTL_TEXTENCODING_DONTKNOW }, /* CP851 851 */ + { "IBM852", RTL_TEXTENCODING_IBM_852 }, /* CP852 852 */ + { "IBM855", RTL_TEXTENCODING_IBM_855 }, /* CP855 855 */ + { "IBM857", RTL_TEXTENCODING_IBM_857 }, /* CP857 857 */ + { "IBM860", RTL_TEXTENCODING_IBM_860 }, /* CP860 860 */ + { "IBM861", RTL_TEXTENCODING_IBM_861 }, /* CP861 861 CP-IS */ + { "IBM862", RTL_TEXTENCODING_IBM_862 }, /* CP862 862 */ + { "IBM863", RTL_TEXTENCODING_IBM_863 }, /* CP863 863 */ + { "IBM864", RTL_TEXTENCODING_IBM_864 }, /* CP864 */ + { "IBM865", RTL_TEXTENCODING_IBM_865 }, /* CP865 865 */ + { "IBM866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */ + { "IBM868", RTL_TEXTENCODING_DONTKNOW }, /* CP868 CP-AR */ + { "IBM869", RTL_TEXTENCODING_IBM_869 }, /* CP869 869 CP-GR */ + { "IBM870", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-[ROECE|YU] */ + { "IBM871", RTL_TEXTENCODING_DONTKNOW }, /* CP871 EBCDIC-CP-IS */ + { "IBM875", RTL_TEXTENCODING_DONTKNOW }, /* CP875 EBCDIC-GREEK */ + { "IBM880", RTL_TEXTENCODING_DONTKNOW }, /* EBCDIC-CYRILLIC */ + { "IBM891", RTL_TEXTENCODING_DONTKNOW }, /* CP891 */ + { "IBM903", RTL_TEXTENCODING_DONTKNOW }, /* CP903 */ + { "IBM904", RTL_TEXTENCODING_DONTKNOW }, /* CP904 904 */ + { "IBM905", RTL_TEXTENCODING_DONTKNOW }, /* CP905 EBCDIC-CP-TR */ + { "IBM918", RTL_TEXTENCODING_DONTKNOW }, /* CP918 EBCDIC-AR2 */ + { "IEC_P27-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-143 */ + { "INIS", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-49 */ + { "INIS-8", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-50 */ + { "INIS-CYRILLIC", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-51 */ + { "INVARIANT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-170 */ + { "ISO-8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* ISO-IR-100 CP819 */ + { "ISO-8859-10", RTL_TEXTENCODING_ISO_8859_10 }, /* ISO-IR-157 LATIN6 */ + { "ISO-8859-13", RTL_TEXTENCODING_ISO_8859_13 }, /* ISO-IR-179 LATIN7 */ + { "ISO-8859-14", RTL_TEXTENCODING_ISO_8859_14 }, /* LATIN8 L8 */ + { "ISO-8859-15", RTL_TEXTENCODING_ISO_8859_15 }, + { "ISO-8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* LATIN2 L2 */ + { "ISO-8859-3", RTL_TEXTENCODING_ISO_8859_3 }, /* LATIN3 L3 */ + { "ISO-8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */ + { "ISO-8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* CYRILLIC */ + { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6 }, /* ECMA-114 ARABIC */ + { "ISO-8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* ECMA-118 GREEK8 */ + { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8 }, /* ISO_8859-8 HEBREW */ + { "ISO-8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* ISO_8859-9 LATIN5 */ + { "ISO-IR-90", RTL_TEXTENCODING_DONTKNOW }, /* ISO_6937-2:1983 */ + { "ISO_10367-BOX", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-155 */ + { "ISO_2033-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-98 E13B */ + { "ISO_5427", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-37 KOI-7 */ + { "ISO_5427-EXT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-54 */ + { "ISO_5428", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-55 */ + { "ISO_646.BASIC", RTL_TEXTENCODING_ASCII_US }, /* REF */ + { "ISO_646.IRV", RTL_TEXTENCODING_ASCII_US }, /* ISO-IR-2 IRV */ + { "ISO_646.IRV:1983", RTL_TEXTENCODING_ISO_8859_1 }, /* fake: ASCII_US, used for "C" locale*/ + { "ISO_6937", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-156 ISO6937*/ + { "ISO_6937-2-25", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-152 */ + { "ISO_6937-2-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-142 */ + { "ISO_8859-SUPP", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-154 */ + { "IT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-15 */ + { "JIS_C6220-1969-JP", RTL_TEXTENCODING_DONTKNOW }, /* KATAKANA X0201-7 */ + { "JIS_C6220-1969-RO", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-14 */ + { "JIS_C6229-1984-A", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-91 */ + { "JIS_C6229-1984-B", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-92 */ + { "JIS_C6229-1984-B-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-93 */ + { "JIS_C6229-1984-HAND", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-94 */ + { "JIS_C6229-1984-HAND-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-95 */ + { "JIS_C6229-1984-KANA", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-96 */ + { "JIS_X0201", RTL_TEXTENCODING_DONTKNOW }, /* X0201 */ + { "JUS_I.B1.002", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-141 */ + { "JUS_I.B1.003-MAC", RTL_TEXTENCODING_DONTKNOW }, /* MACEDONIAN */ + { "JUS_I.B1.003-SERB", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-146 SERBIAN */ + { "KOI-8", RTL_TEXTENCODING_DONTKNOW }, + { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, + { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, + { "KSC5636", RTL_TEXTENCODING_DONTKNOW }, /* ISO646-KR */ + { "LATIN-GREEK", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-19 */ + { "LATIN-GREEK-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-27 */ + { "MAC-IS", RTL_TEXTENCODING_APPLE_ROMAN }, + { "MAC-UK", RTL_TEXTENCODING_APPLE_ROMAN }, + { "MACINTOSH", RTL_TEXTENCODING_APPLE_ROMAN }, /* MAC */ + { "MSZ_7795.3", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-86 */ + { "NATS-DANO", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-9-1 */ + { "NATS-DANO-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-9-2 */ + { "NATS-SEFI", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-8-1 */ + { "NATS-SEFI-ADD", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-8-2 */ + { "NC_NC00-10", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-151 */ + { "NEXTSTEP", RTL_TEXTENCODING_DONTKNOW }, /* NEXT */ + { "NF_Z_62-010", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-69 */ + { "NF_Z_62-010_(1973)", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-25 */ + { "NS_4551-1", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-60 */ + { "NS_4551-2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-61 */ + { "PT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-16 */ + { "PT2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-84 */ + { "SAMI", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-158 */ + { "SEN_850200_B", RTL_TEXTENCODING_DONTKNOW }, /* ISO646-[FI|SE] */ + { "SEN_850200_C", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-11 */ + { "T.101-G2", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-128 */ + { "T.61-7BIT", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-102 */ + { "T.61-8BIT", RTL_TEXTENCODING_DONTKNOW }, /* T.61 ISO-IR-103 */ + { "TIS-620", RTL_TEXTENCODING_MS_874 }, /* locale: th_TH */ + { "UTF-8", RTL_TEXTENCODING_UTF8 }, /* ISO-10646/UTF-8 */ + { "VIDEOTEX-SUPPL", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-70 */ + { "WIN-SAMI-2", RTL_TEXTENCODING_DONTKNOW } /* WS2 */ +}; + +#elif defined(FREEBSD) || defined(DRAGONFLY) + +static const Pair nl_language_list[] = { + { "ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "BIG5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */ + { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */ + { "CP866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */ + { "EUCCN", RTL_TEXTENCODING_EUC_CN }, /* China - Simplified Chinese */ + { "EUCJP", RTL_TEXTENCODING_EUC_JP }, /* Japan */ + { "EUCKR", RTL_TEXTENCODING_EUC_KR }, /* Korea */ + { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* Western */ + { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, /* Western Updated (w/Euro sign) */ + { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* Central European */ + { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */ + { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* Cyrillic */ + { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* Greek */ + { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* Turkish */ + { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* KOI8-R */ + { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, /* KOI8-U */ + { "SJIS", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */ + { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */ +}; + +#elif defined(NETBSD) + +static const Pair nl_language_list[] = { + { "ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "BIG5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */ + { "Big5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */ + { "Big5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* locale: zh_CN.BIG5HK */ + { "Big5HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* deprecated */ + { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */ + { "CP866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */ + { "CTEXT", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "eucCN", RTL_TEXTENCODING_EUC_CN }, /* China - Simplified Chinese */ + { "eucJP", RTL_TEXTENCODING_EUC_JP }, /* Japan */ + { "eucKR", RTL_TEXTENCODING_EUC_KR }, /* Korea */ + { "eucTW", RTL_TEXTENCODING_EUC_TW }, /* China - Traditional Chinese */ + { "GB18030", RTL_TEXTENCODING_GB_18030 }, /* locale: zh_CN.gb18030 */ + { "GB2312", RTL_TEXTENCODING_GB_2312 }, /* locale: zh_CN */ + { "ISO-2022-JP", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "ISO-2022-JP-2", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* Western */ + { "ISO8859-13", RTL_TEXTENCODING_ISO_8859_13 }, /* ISO-IR-179 LATIN7 */ + { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, /* Western Updated (w/Euro sign) */ + { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* Central European */ + { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */ + { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* Cyrillic */ + { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* Greek */ + { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* Turkish */ + { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* KOI8-R */ + { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, /* KOI8-U */ + { "PT154", RTL_TEXTENCODING_PT154 }, /* */ + { "SJIS", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */ + { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */ +}; + +#elif defined(OPENBSD) + +static const Pair nl_language_list[] = { + { "ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "BIG5", RTL_TEXTENCODING_BIG5 }, /* China - Traditional Chinese */ + { "CP1251", RTL_TEXTENCODING_MS_1251 }, /* MS-CYRL */ + { "CP866", RTL_TEXTENCODING_IBM_866 }, /* CP866 866 */ + { "EUCCN", RTL_TEXTENCODING_EUC_CN }, /* China - Simplified Chinese */ + { "EUCJP", RTL_TEXTENCODING_EUC_JP }, /* Japan */ + { "EUCKR", RTL_TEXTENCODING_EUC_KR }, /* Korea */ + { "ISO8859-1", RTL_TEXTENCODING_ISO_8859_1 }, /* Western */ + { "ISO8859-15", RTL_TEXTENCODING_ISO_8859_15 }, /* Western Updated (w/Euro sign) */ + { "ISO8859-2", RTL_TEXTENCODING_ISO_8859_2 }, /* Central European */ + { "ISO8859-4", RTL_TEXTENCODING_ISO_8859_4 }, /* LATIN4 L4 */ + { "ISO8859-5", RTL_TEXTENCODING_ISO_8859_5 }, /* Cyrillic */ + { "ISO8859-7", RTL_TEXTENCODING_ISO_8859_7 }, /* Greek */ + { "ISO8859-9", RTL_TEXTENCODING_ISO_8859_9 }, /* Turkish */ + { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* KOI8-R */ + { "KOI8-U", RTL_TEXTENCODING_KOI8_U }, /* KOI8-U */ + { "SJIS", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */ + { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* US-ASCII */ + { "UTF-8", RTL_TEXTENCODING_UTF8 } /* ISO-10646/UTF-8 */ +}; + +#else +#error Unhandled individual LO_COMMON_NLS_ARCHS +#endif // individual common NLS archs + +/***************************************************************************** + return the text encoding corresponding to the given locale + *****************************************************************************/ + +rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) +{ + const Pair *language=nullptr; + + char locale_buf[64] = ""; + char codeset_buf[64]; + + char *codeset = nullptr; + + /* default to process locale if pLocale == NULL */ + if( pLocale == nullptr ) + osl_getProcessLocale( &pLocale ); + + /* convert rtl_Locale to locale string */ + compose_locale( pLocale, locale_buf, 64 ); + + locale_t ctype_locale = newlocale( + LC_CTYPE_MASK, locale_buf, static_cast(0)); + if (ctype_locale == static_cast(0)) + { + return RTL_TEXTENCODING_DONTKNOW; + } + + /* get the charset as indicated by the LC_CTYPE locale */ +#if defined(NETBSD) && !defined(CODESET) + codeset = NULL; +#else + codeset = nl_langinfo_l(CODESET, ctype_locale); + // per SUSv4, the return value of nl_langinfo_l can be invalidated by a + // subsequent call to nl_langinfo (not nl_langinfo_l) in any thread, but + // we cannot guard against that (at least, no code in LO itself should + // call nl_langinfo) +#endif + + if ( codeset != nullptr ) + { + /* get codeset into mt save memory */ + strncpy( codeset_buf, codeset, sizeof(codeset_buf) ); + codeset_buf[sizeof(codeset_buf) - 1] = 0; + codeset = codeset_buf; + } + + freelocale(ctype_locale); + + /* search the codeset in our language list */ + if ( codeset != nullptr ) + { + language = pair_search (codeset, nl_language_list, SAL_N_ELEMENTS( nl_language_list ) ); + } + + OSL_ASSERT( language && ( RTL_TEXTENCODING_DONTKNOW != language->value ) ); + + /* a matching item in our list provides a mapping from codeset to + * rtl-codeset */ + if ( language != nullptr ) + return language->value; + + return RTL_TEXTENCODING_DONTKNOW; +} + +/***************************************************************************** + return the current process locale + *****************************************************************************/ + +void imp_getProcessLocale( rtl_Locale ** ppLocale ) +{ + char const * locale = getenv("LC_ALL"); + if (locale == nullptr || *locale == '\0') { + locale = getenv("LC_CTYPE"); + if (locale == nullptr || *locale == '\0') { + locale = getenv("LANG"); + if (locale == nullptr || *locale == '\0') { + locale = "C"; + } + } + } + // coverity[overrun-buffer-val : FALSE] - coverity gets this very wrong + *ppLocale = parse_locale(locale); +} + +#else // !LO_COMMON_NLS_ARCHS + +/* + * This implementation of osl_getTextEncodingFromLocale maps + * from the ISO language codes. + */ + +const Pair full_locale_list[] = { + { "ja_JP.eucJP", RTL_TEXTENCODING_EUC_JP }, + { "ja_JP.EUC", RTL_TEXTENCODING_EUC_JP }, + { "ko_KR.EUC", RTL_TEXTENCODING_EUC_KR }, + { "zh_CN.EUC", RTL_TEXTENCODING_EUC_CN }, + { "zh_TW.EUC", RTL_TEXTENCODING_EUC_TW } +}; + +const Pair locale_extension_list[] = { + { "big5", RTL_TEXTENCODING_BIG5 }, + { "big5hk", RTL_TEXTENCODING_BIG5_HKSCS }, + { "gb18030", RTL_TEXTENCODING_GB_18030 }, + { "euc", RTL_TEXTENCODING_EUC_JP }, + { "iso8859-1", RTL_TEXTENCODING_ISO_8859_1 }, + { "iso8859-10", RTL_TEXTENCODING_ISO_8859_10 }, + { "iso8859-13", RTL_TEXTENCODING_ISO_8859_13 }, + { "iso8859-14", RTL_TEXTENCODING_ISO_8859_14 }, + { "iso8859-15", RTL_TEXTENCODING_ISO_8859_15 }, + { "iso8859-2", RTL_TEXTENCODING_ISO_8859_2 }, + { "iso8859-3", RTL_TEXTENCODING_ISO_8859_3 }, + { "iso8859-4", RTL_TEXTENCODING_ISO_8859_4 }, + { "iso8859-5", RTL_TEXTENCODING_ISO_8859_5 }, + { "iso8859-6", RTL_TEXTENCODING_ISO_8859_6 }, + { "iso8859-7", RTL_TEXTENCODING_ISO_8859_7 }, + { "iso8859-8", RTL_TEXTENCODING_ISO_8859_8 }, + { "iso8859-9", RTL_TEXTENCODING_ISO_8859_9 }, + { "koi8-r", RTL_TEXTENCODING_KOI8_R }, + { "koi8-u", RTL_TEXTENCODING_KOI8_U }, + { "pck", RTL_TEXTENCODING_MS_932 }, +#if (0) + { "sun_eu_greek", RTL_TEXTENCODING_DONTKNOW }, +#endif + { "utf-16", RTL_TEXTENCODING_UNICODE }, + { "utf-7", RTL_TEXTENCODING_UTF7 }, + { "utf-8", RTL_TEXTENCODING_UTF8 } +}; + +const Pair iso_language_list[] = { + { "af", RTL_TEXTENCODING_ISO_8859_1 }, + { "ar", RTL_TEXTENCODING_ISO_8859_6 }, + { "az", RTL_TEXTENCODING_ISO_8859_9 }, + { "be", RTL_TEXTENCODING_ISO_8859_5 }, + { "bg", RTL_TEXTENCODING_ISO_8859_5 }, + { "ca", RTL_TEXTENCODING_ISO_8859_1 }, + { "cs", RTL_TEXTENCODING_ISO_8859_2 }, + { "da", RTL_TEXTENCODING_ISO_8859_1 }, + { "de", RTL_TEXTENCODING_ISO_8859_1 }, + { "el", RTL_TEXTENCODING_ISO_8859_7 }, + { "en", RTL_TEXTENCODING_ISO_8859_1 }, + { "es", RTL_TEXTENCODING_ISO_8859_1 }, + { "et", RTL_TEXTENCODING_ISO_8859_4 }, + { "eu", RTL_TEXTENCODING_ISO_8859_1 }, + { "fa", RTL_TEXTENCODING_ISO_8859_6 }, + { "fi", RTL_TEXTENCODING_ISO_8859_1 }, + { "fo", RTL_TEXTENCODING_ISO_8859_1 }, + { "fr", RTL_TEXTENCODING_ISO_8859_1 }, + { "gr", RTL_TEXTENCODING_ISO_8859_7 }, + { "he", RTL_TEXTENCODING_ISO_8859_8 }, + { "hi", RTL_TEXTENCODING_DONTKNOW }, + { "hr", RTL_TEXTENCODING_ISO_8859_2 }, + { "hu", RTL_TEXTENCODING_ISO_8859_2 }, + { "hy", RTL_TEXTENCODING_DONTKNOW }, + { "id", RTL_TEXTENCODING_ISO_8859_1 }, + { "is", RTL_TEXTENCODING_ISO_8859_1 }, + { "it", RTL_TEXTENCODING_ISO_8859_1 }, + { "iw", RTL_TEXTENCODING_ISO_8859_8 }, + { "ja", RTL_TEXTENCODING_EUC_JP }, + { "ka", RTL_TEXTENCODING_DONTKNOW }, + { "kk", RTL_TEXTENCODING_ISO_8859_5 }, + { "ko", RTL_TEXTENCODING_EUC_KR }, + { "lt", RTL_TEXTENCODING_ISO_8859_4 }, + { "lv", RTL_TEXTENCODING_ISO_8859_4 }, + { "mk", RTL_TEXTENCODING_ISO_8859_5 }, + { "mr", RTL_TEXTENCODING_DONTKNOW }, + { "ms", RTL_TEXTENCODING_ISO_8859_1 }, + { "nl", RTL_TEXTENCODING_ISO_8859_1 }, + { "no", RTL_TEXTENCODING_ISO_8859_1 }, + { "pl", RTL_TEXTENCODING_ISO_8859_2 }, + { "pt", RTL_TEXTENCODING_ISO_8859_1 }, + { "ro", RTL_TEXTENCODING_ISO_8859_2 }, + { "ru", RTL_TEXTENCODING_ISO_8859_5 }, + { "sa", RTL_TEXTENCODING_DONTKNOW }, + { "sk", RTL_TEXTENCODING_ISO_8859_2 }, + { "sl", RTL_TEXTENCODING_ISO_8859_2 }, + { "sq", RTL_TEXTENCODING_ISO_8859_2 }, + { "sv", RTL_TEXTENCODING_ISO_8859_1 }, + { "sw", RTL_TEXTENCODING_ISO_8859_1 }, + { "ta", RTL_TEXTENCODING_DONTKNOW }, + { "th", RTL_TEXTENCODING_DONTKNOW }, + { "tr", RTL_TEXTENCODING_ISO_8859_9 }, + { "tt", RTL_TEXTENCODING_ISO_8859_5 }, + { "uk", RTL_TEXTENCODING_ISO_8859_5 }, + { "ur", RTL_TEXTENCODING_ISO_8859_6 }, + { "uz", RTL_TEXTENCODING_ISO_8859_9 }, + { "vi", RTL_TEXTENCODING_DONTKNOW }, + { "zh", RTL_TEXTENCODING_BIG5 } +}; + +/***************************************************************************** + return the text encoding corresponding to the given locale + *****************************************************************************/ + +rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) +{ + const Pair *language = nullptr; + char locale_buf[64] = ""; + + /* default to process locale if pLocale == NULL */ + if( nullptr == pLocale ) + osl_getProcessLocale( &pLocale ); + + /* convert rtl_Locale to locale string */ + if( compose_locale( pLocale, locale_buf, 64 ) ) + { + /* check special handling list (EUC) first */ + language = pair_search( locale_buf, full_locale_list, SAL_N_ELEMENTS( full_locale_list ) ); + + if( nullptr == language ) + { + /* + * check if there is a charset qualifier at the end of the given locale string + * e.g. de.ISO8859-15 or de.ISO8859-15@euro which strongly indicates what + * charset to use + */ + char* cp = strrchr( locale_buf, '.' ); + + if( nullptr != cp ) + { + language = pair_search( cp + 1, locale_extension_list, SAL_N_ELEMENTS( locale_extension_list ) ); + } + } + + /* use iso language code to determine the charset */ + if( nullptr == language ) + { + /* iso lang codes have 2 characters */ + locale_buf[2] = '\0'; + + language = pair_search( locale_buf, iso_language_list, SAL_N_ELEMENTS( iso_language_list ) ); + } + } + + /* a matching item in our list provides a mapping from codeset to + * rtl-codeset */ + if ( language != nullptr ) + return language->value; + + return RTL_TEXTENCODING_DONTKNOW; +} + +#if defined(MACOSX) || defined(IOS) + +/***************************************************************************** + return the current process locale + *****************************************************************************/ + +void imp_getProcessLocale( rtl_Locale ** ppLocale ) +{ + OUString loc16(macosx_getLocale()); + OString locale; + if (!loc16.convertToString( + &locale, RTL_TEXTENCODING_UTF8, + (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR))) + { + SAL_INFO("sal.osl", "Cannot convert \"" << loc16 << "\" to UTF-8"); + } + + /* handle the case where OS specific method of finding locale fails */ + if ( locale.isEmpty() ) + { + /* simulate behavior of setlocale */ + locale = getenv( "LC_ALL" ); + + if( locale.isEmpty() ) + locale = getenv( "LC_CTYPE" ); + + if( locale.isEmpty() ) + locale = getenv( "LANG" ); + + if( locale.isEmpty() ) + locale = "C"; + } + + /* return the locale */ + *ppLocale = parse_locale( locale.getStr() ); +} + +#else // !MACOSX && !IOS + +/***************************************************************************** + return the current process locale + *****************************************************************************/ + +void imp_getProcessLocale( rtl_Locale ** ppLocale ) +{ +#ifdef ANDROID + /* No locale environment variables on Android, so why even bother + * with getenv(). + */ + const char* locale = "en-US.UTF-8"; +#else + /* simulate behavior off setlocale */ + const char* locale = getenv("LC_ALL"); + + if( NULL == locale ) + locale = getenv( "LC_CTYPE" ); + + if( NULL == locale ) + locale = getenv( "LANG" ); + + if( NULL == locale ) + locale = "C"; + +#endif + *ppLocale = parse_locale( locale ); +} + +#endif // !MACOSX && !IOS +#endif // !LO_COMMON_NLS_ARCHS + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/nlsupport.hxx b/sal/osl/unx/nlsupport.hxx new file mode 100644 index 000000000..ba5acf23c --- /dev/null +++ b/sal/osl/unx/nlsupport.hxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_NLSUPPORT_HXX +#define INCLUDED_SAL_OSL_UNX_NLSUPPORT_HXX + +#include + +#include + +namespace rtl +{ +class OUString; +} + +void imp_getProcessLocale(rtl_Locale**); + +#if defined IOS || defined MACOSX +OUString macosx_getLocale(); +#endif + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/osxlocale.cxx b/sal/osl/unx/osxlocale.cxx new file mode 100644 index 000000000..f82ea1436 --- /dev/null +++ b/sal/osl/unx/osxlocale.cxx @@ -0,0 +1,104 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#ifndef IOS +#include +#endif +#include +#include + +#include + +#include "nlsupport.hxx" + +namespace +{ + template + class CFGuard + { + public: + explicit CFGuard(T& rT) : rT_(rT) {} + ~CFGuard() { if (rT_) CFRelease(rT_); } + private: + T& rT_; + }; + + typedef CFGuard CFArrayGuard; + typedef CFGuard CFStringGuard; + typedef CFGuard CFPropertyListGuard; + + /** Get the current process locale from system + */ + CFStringRef getProcessLocale() + { + CFPropertyListRef pref = CFPreferencesCopyAppValue(CFSTR("AppleLanguages"), kCFPreferencesCurrentApplication); + CFPropertyListGuard proplGuard(pref); + + if (pref == nullptr) // return fallback value 'en_US' + return CFStringCreateWithCString(kCFAllocatorDefault, "en_US", kCFStringEncodingASCII); + + CFStringRef sref = (CFGetTypeID(pref) == CFArrayGetTypeID()) ? static_cast(CFArrayGetValueAtIndex(static_cast(pref), 0)) : static_cast(pref); + + return CFLocaleCreateCanonicalLocaleIdentifierFromString(kCFAllocatorDefault, sref); + } + + void append(OUStringBuffer & buffer, CFStringRef string) { + CFIndex n = CFStringGetLength(string); + CFStringGetCharacters( + string, CFRangeMake(0, n), + reinterpret_cast(buffer.appendUninitialized(n))); + } +} + +/** Grab current locale from system. +*/ +OUString macosx_getLocale() +{ + CFStringRef sref = getProcessLocale(); + CFStringGuard sGuard(sref); + + assert(sref != nullptr && "osxlocale.cxx: getProcessLocale must return a non-NULL value"); + + // split the string into substrings; the first two (if there are two) substrings + // are language and country + CFArrayRef subs = CFStringCreateArrayBySeparatingStrings(nullptr, sref, CFSTR("-")); + CFArrayGuard arrGuard(subs); + + OUStringBuffer buf; + append(buf, static_cast(CFArrayGetValueAtIndex(subs, 0))); + + // country also available? Assumption: if the array contains more than one + // value the second value is always the country! + if (CFArrayGetCount(subs) > 1) + { + buf.append("_"); + append(buf, static_cast(CFArrayGetValueAtIndex(subs, 1))); + } + // Append 'UTF-8' to the locale because the macOS file + // system interface is UTF-8 based and sal tries to determine + // the file system locale from the locale information + buf.append(".UTF-8"); + return buf.makeStringAndClear(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/pipe.cxx b/sal/osl/unx/pipe.cxx new file mode 100644 index 000000000..45d31e008 --- /dev/null +++ b/sal/osl/unx/pipe.cxx @@ -0,0 +1,523 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sockimpl.hxx" +#include "secimpl.hxx" +#include "unixerrnostring.hxx" + +#include +#include + +constexpr OStringLiteral PIPEDEFAULTPATH = "/tmp"; +constexpr OStringLiteral PIPEALTERNATEPATH = "/var/tmp"; + +static oslPipe osl_psz_createPipe(const char *pszPipeName, oslPipeOptions Options, oslSecurity Security); + +struct +{ + int errcode; + oslPipeError error; +} const PipeError[]= { + { 0, osl_Pipe_E_None }, /* no error */ + { EPROTOTYPE, osl_Pipe_E_NoProtocol }, /* Protocol wrong type for socket */ + { ENOPROTOOPT, osl_Pipe_E_NoProtocol }, /* Protocol not available */ + { EPROTONOSUPPORT, osl_Pipe_E_NoProtocol }, /* Protocol not supported */ +#ifdef ESOCKTNOSUPPORT + { ESOCKTNOSUPPORT, osl_Pipe_E_NoProtocol }, /* Socket type not supported */ +#endif + { EPFNOSUPPORT, osl_Pipe_E_NoProtocol }, /* Protocol family not supported */ + { EAFNOSUPPORT, osl_Pipe_E_NoProtocol }, /* Address family not supported by */ + /* protocol family */ + { ENETRESET, osl_Pipe_E_NetworkReset }, /* Network dropped connection because */ + /* of reset */ + { ECONNABORTED, osl_Pipe_E_ConnectionAbort }, /* Software caused connection abort */ + { ECONNRESET, osl_Pipe_E_ConnectionReset }, /* Connection reset by peer */ + { ENOBUFS, osl_Pipe_E_NoBufferSpace }, /* No buffer space available */ + { ETIMEDOUT, osl_Pipe_E_TimedOut }, /* Connection timed out */ + { ECONNREFUSED, osl_Pipe_E_ConnectionRefused }, /* Connection refused */ + { -1, osl_Pipe_E_invalidError } +}; + +static oslPipeError osl_PipeErrorFromNative(int nativeType) +{ + int i = 0; + + while ((PipeError[i].error != osl_Pipe_E_invalidError) && + (PipeError[i].errcode != nativeType)) + { + i++; + } + + return PipeError[i].error; +} + +static oslPipe createPipeImpl() +{ + oslPipe pPipeImpl; + + pPipeImpl = static_cast< oslPipe >(calloc(1, sizeof(struct oslPipeImpl))); + if (!pPipeImpl) + return nullptr; + + pPipeImpl->m_nRefCount = 1; + pPipeImpl->m_bClosed = false; +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pPipeImpl->m_bIsInShutdown = false; + pPipeImpl->m_bIsAccepting = false; +#endif + + return pPipeImpl; +} + +static void destroyPipeImpl(oslPipe pImpl) +{ + if (pImpl) + free(pImpl); +} + +oslPipe SAL_CALL osl_createPipe(rtl_uString *ustrPipeName, oslPipeOptions Options, oslSecurity Security) +{ + oslPipe pPipe = nullptr; + rtl_String* strPipeName = nullptr; + + if (ustrPipeName) + { + rtl_uString2String(&strPipeName, + rtl_uString_getStr(ustrPipeName), + rtl_uString_getLength(ustrPipeName), + osl_getThreadTextEncoding(), + OUSTRING_TO_OSTRING_CVTFLAGS); + char* pszPipeName = rtl_string_getStr(strPipeName); + pPipe = osl_psz_createPipe(pszPipeName, Options, Security); + + if (strPipeName) + rtl_string_release(strPipeName); + } + + return pPipe; + +} + +static OString +getBootstrapSocketPath() +{ + OUString pValue; + + if (rtl::Bootstrap::get("OSL_SOCKET_PATH", pValue)) + { + return OUStringToOString(pValue, RTL_TEXTENCODING_UTF8); + } + return ""; +} + +static oslPipe osl_psz_createPipe(const char *pszPipeName, oslPipeOptions Options, + oslSecurity Security) +{ + int Flags; + size_t len; + struct sockaddr_un addr; + + OString name; + oslPipe pPipe; + + if (access(PIPEDEFAULTPATH.getStr(), W_OK) == 0) + name = PIPEDEFAULTPATH; + else if (access(PIPEALTERNATEPATH.getStr(), W_OK) == 0) + name = PIPEALTERNATEPATH; + else { + name = getBootstrapSocketPath (); + } + + name += "/"; + + if (Security) + { + char Ident[256]; + + Ident[0] = '\0'; + + OSL_VERIFY(osl_psz_getUserIdent(Security, Ident, sizeof(Ident))); + + name += OString::Concat("OSL_PIPE_") + Ident + "_" + pszPipeName; + } + else + { + name += OString::Concat("OSL_PIPE_") + pszPipeName; + } + + if (o3tl::make_unsigned(name.getLength()) >= sizeof addr.sun_path) + { + SAL_WARN("sal.osl.pipe", "osl_createPipe: pipe name too long"); + return nullptr; + } + + /* alloc memory */ + pPipe = createPipeImpl(); + + if (!pPipe) + return nullptr; + + /* create socket */ + pPipe->m_Socket = socket(AF_UNIX, SOCK_STREAM, 0); + if (pPipe->m_Socket < 0) + { + SAL_WARN("sal.osl.pipe", "socket() failed: " << UnixErrnoString(errno)); + destroyPipeImpl(pPipe); + return nullptr; + } + + /* set close-on-exec flag */ + if ((Flags = fcntl(pPipe->m_Socket, F_GETFD, 0)) != -1) + { + Flags |= FD_CLOEXEC; + if (fcntl(pPipe->m_Socket, F_SETFD, Flags) == -1) + { + SAL_WARN("sal.osl.pipe", "fcntl() failed: " << UnixErrnoString(errno)); + } + } + + memset(&addr, 0, sizeof(addr)); + + SAL_INFO("sal.osl.pipe", "new pipe on fd " << pPipe->m_Socket << " '" << name << "'"); + + addr.sun_family = AF_UNIX; + // coverity[fixed_size_dest : FALSE] - safe, see check above + strcpy(addr.sun_path, name.getStr()); +#if defined(FREEBSD) + len = SUN_LEN(&addr); +#else + len = sizeof(addr); +#endif + + if (Options & osl_Pipe_CREATE) + { + struct stat status; + + /* check if there exists an orphan filesystem entry */ + if ((stat(name.getStr(), &status) == 0) && + (S_ISSOCK(status.st_mode) || S_ISFIFO(status.st_mode))) + { + if (connect(pPipe->m_Socket, reinterpret_cast< sockaddr* >(&addr), len) >= 0) + { + close (pPipe->m_Socket); + destroyPipeImpl(pPipe); + return nullptr; + } + + unlink(name.getStr()); + } + + /* ok, fs clean */ + if (bind(pPipe->m_Socket, reinterpret_cast< sockaddr* >(&addr), len) < 0) + { + SAL_WARN("sal.osl.pipe", "bind() failed: " << UnixErrnoString(errno)); + close(pPipe->m_Socket); + destroyPipeImpl(pPipe); + return nullptr; + } + + /* Only give access to all if no security handle was specified, otherwise security + depends on umask */ + + if (!Security) + (void)chmod(name.getStr(),S_IRWXU | S_IRWXG |S_IRWXO); + + strcpy(pPipe->m_Name, name.getStr()); // safe, see check above + + if (listen(pPipe->m_Socket, 5) < 0) + { + SAL_WARN("sal.osl.pipe", "listen() failed: " << UnixErrnoString(errno)); + // cid#1255391 warns about unlink(name) after stat(name, &status) + // above, but the intervening call to bind makes those two clearly + // unrelated, as it would fail if name existed at that point in + // time: + // coverity[toctou] - this is bogus + unlink(name.getStr()); /* remove filesystem entry */ + close(pPipe->m_Socket); + destroyPipeImpl(pPipe); + return nullptr; + } + + return pPipe; + } + + /* osl_pipe_OPEN */ + if (access(name.getStr(), F_OK) != -1) + { + if (connect(pPipe->m_Socket, reinterpret_cast< sockaddr* >(&addr), len) >= 0) + return pPipe; + + SAL_WARN("sal.osl.pipe", "connect() failed: " << UnixErrnoString(errno)); + } + + close (pPipe->m_Socket); + destroyPipeImpl(pPipe); + return nullptr; +} + +void SAL_CALL osl_acquirePipe(oslPipe pPipe) +{ + osl_atomic_increment(&(pPipe->m_nRefCount)); +} + +void SAL_CALL osl_releasePipe(oslPipe pPipe) +{ + if (!pPipe) + return; + + if (osl_atomic_decrement(&(pPipe->m_nRefCount)) == 0) + { + if (!pPipe->m_bClosed) + osl_closePipe(pPipe); + + destroyPipeImpl(pPipe); + } +} + +void SAL_CALL osl_closePipe(oslPipe pPipe) +{ + int nRet; + int ConnFD; + + if (!pPipe) + return; + + if (pPipe->m_bClosed) + return; + + ConnFD = pPipe->m_Socket; + + /* Thread does not return from accept on linux, so + connect to the accepting pipe + */ +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + struct sockaddr_un addr; + + if (pPipe->m_bIsAccepting) + { + pPipe->m_bIsInShutdown = true; + pPipe->m_Socket = -1; + + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) + { + SAL_WARN("sal.osl.pipe", "socket() failed: " << UnixErrnoString(errno)); + return; + } + + memset(&addr, 0, sizeof(addr)); + + SAL_INFO("sal.osl.pipe", "osl_destroyPipe : Pipe Name '" << pPipe->m_Name << "'"); + + addr.sun_family = AF_UNIX; + strcpy(addr.sun_path, pPipe->m_Name); // safe, as both are same size + + nRet = connect(fd, reinterpret_cast< sockaddr* >(&addr), sizeof(addr)); + if (nRet < 0) + SAL_WARN("sal.osl.pipe", "connect() failed: " << UnixErrnoString(errno)); + + close(fd); + } +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + + nRet = shutdown(ConnFD, 2); + if (nRet < 0) + SAL_WARN("sal.osl.pipe", "shutdown() failed: " << UnixErrnoString(errno)); + + nRet = close(ConnFD); + if (nRet < 0) + SAL_WARN("sal.osl.pipe", "close() failed: " << UnixErrnoString(errno)); + + /* remove filesystem entry */ + if (pPipe->m_Name[0] != '\0') + unlink(pPipe->m_Name); + + pPipe->m_bClosed = true; +} + +oslPipe SAL_CALL osl_acceptPipe(oslPipe pPipe) +{ + int s; + oslPipe pAcceptedPipe; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "invalid pipe"); + if (!pPipe) + return nullptr; + + assert(pPipe->m_Name[0] != '\0'); // you cannot have an empty pipe name + +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pPipe->m_bIsAccepting = true; +#endif + + s = accept(pPipe->m_Socket, nullptr, nullptr); + +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pPipe->m_bIsAccepting = false; +#endif + + if (s < 0) + { + SAL_WARN("sal.osl.pipe", "accept() failed: " << UnixErrnoString(errno)); + return nullptr; + } + +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + if (pPipe->m_bIsInShutdown) + { + close(s); + return nullptr; + } +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + + /* alloc memory */ + pAcceptedPipe = createPipeImpl(); + + assert(pAcceptedPipe); // should never be the case that an oslPipe cannot be initialized + if (!pAcceptedPipe) + { + close(s); + return nullptr; + } + + /* set close-on-exec flag */ + int flags; + if ((flags = fcntl(s, F_GETFD, 0)) >= 0) + { + flags |= FD_CLOEXEC; + if (fcntl(s, F_SETFD, flags) < 0) + SAL_WARN("sal.osl.pipe", "fcntl() failed: " << UnixErrnoString(errno)); + } + + pAcceptedPipe->m_Socket = s; + + return pAcceptedPipe; +} + +sal_Int32 SAL_CALL osl_receivePipe(oslPipe pPipe, + void* pBuffer, + sal_Int32 BytesToRead) +{ + int nRet = 0; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_receivePipe: invalid pipe"); + if (!pPipe) + { + SAL_WARN("sal.osl.pipe", "osl_receivePipe: Invalid socket"); + errno=EINVAL; + return -1; + } + + nRet = recv(pPipe->m_Socket, pBuffer, BytesToRead, 0); + + if (nRet < 0) + SAL_WARN("sal.osl.pipe", "recv() failed: " << UnixErrnoString(errno)); + + return nRet; +} + +sal_Int32 SAL_CALL osl_sendPipe(oslPipe pPipe, + const void* pBuffer, + sal_Int32 BytesToSend) +{ + int nRet=0; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_sendPipe: invalid pipe"); + if (!pPipe) + { + SAL_WARN("sal.osl.pipe", "osl_sendPipe: Invalid socket"); + errno=EINVAL; + return -1; + } + + nRet = send(pPipe->m_Socket, pBuffer, BytesToSend, 0); + + if (nRet <= 0) + SAL_WARN("sal.osl.pipe", "send() failed: " << UnixErrnoString(errno)); + + return nRet; +} + +oslPipeError SAL_CALL osl_getLastPipeError(SAL_UNUSED_PARAMETER oslPipe) +{ + return osl_PipeErrorFromNative(errno); +} + +sal_Int32 SAL_CALL osl_writePipe(oslPipe pPipe, const void *pBuffer, sal_Int32 n) +{ + /* loop until all desired bytes were send or an error occurred */ + sal_Int32 BytesSend = 0; + sal_Int32 BytesToSend = n; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_writePipe: invalid pipe"); // osl_sendPipe detects invalid pipe + while (BytesToSend > 0) + { + sal_Int32 RetVal; + + RetVal= osl_sendPipe(pPipe, pBuffer, BytesToSend); + + /* error occurred? */ + if (RetVal <= 0) + break; + + BytesToSend -= RetVal; + BytesSend += RetVal; + pBuffer= static_cast< char const* >(pBuffer) + RetVal; + } + + return BytesSend; +} + +sal_Int32 SAL_CALL osl_readPipe( oslPipe pPipe, void *pBuffer , sal_Int32 n ) +{ + /* loop until all desired bytes were read or an error occurred */ + sal_Int32 BytesRead = 0; + sal_Int32 BytesToRead = n; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_readPipe: invalid pipe"); // osl_receivePipe detects invalid pipe + while (BytesToRead > 0) + { + sal_Int32 RetVal; + RetVal= osl_receivePipe(pPipe, pBuffer, BytesToRead); + + /* error occurred? */ + if (RetVal <= 0) + break; + + BytesToRead -= RetVal; + BytesRead += RetVal; + pBuffer= static_cast< char* >(pBuffer) + RetVal; + } + + return BytesRead; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/process.cxx b/sal/osl/unx/process.cxx new file mode 100644 index 000000000..f75534fdc --- /dev/null +++ b/sal/osl/unx/process.cxx @@ -0,0 +1,1194 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include + +/* + * ToDo: + * - cleanup of process status things + * - cleanup of process spawning + * - cleanup of resource transfer + */ + +#if defined(__sun) + // The procfs may only be used without LFS in 32bits. +# ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +# endif +#endif + +#if defined(FREEBSD) || defined(NETBSD) || defined(DRAGONFLY) +#include +#endif + +#include "system.hxx" +#include "unixerrnostring.hxx" +#if defined(__sun) +# include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "createfilehandlefromfd.hxx" +#include "file_url.hxx" +#include "readwrite_helper.hxx" +#include "sockimpl.hxx" +#include "secimpl.hxx" + +#define MAX_ARGS 255 +#define MAX_ENVS 255 + +namespace +{ + +struct oslProcessImpl { + pid_t m_pid; + oslCondition m_terminated; + int m_status; + oslProcessImpl* m_pnext; +}; + +struct ProcessData +{ + const char* m_pszArgs[MAX_ARGS + 1]; + const char* m_pszDir; + char* m_pszEnv[MAX_ENVS + 1]; + uid_t m_uid; + gid_t m_gid; + char* m_name; + oslCondition m_started; + oslProcessImpl* m_pProcImpl; + oslFileHandle *m_pInputWrite; + oslFileHandle *m_pOutputRead; + oslFileHandle *m_pErrorRead; +}; + +oslProcessImpl* ChildList; +oslMutex ChildListMutex; + +} //Anonymous namespace + +static oslProcessError osl_psz_executeProcess(char *pszImageName, + char *pszArguments[], + oslProcessOption Options, + oslSecurity Security, + char *pszDirectory, + char *pszEnvironments[], + oslProcess *pProcess, + oslFileHandle *pInputWrite, + oslFileHandle *pOutputRead, + oslFileHandle *pErrorRead ); + +extern "C" { + +static void ChildStatusProc(void *pData) +{ + osl_setThreadName("osl_executeProcess"); + + pid_t pid = -1; + int status = 0; + int channel[2] = { -1, -1 }; + ProcessData data; + ProcessData *pdata; + int stdOutput[2] = { -1, -1 }, stdInput[2] = { -1, -1 }, stdError[2] = { -1, -1 }; + + pdata = static_cast(pData); + + /* make a copy of our data, because forking will only copy + our local stack of the thread, so the process data will not be accessible + in our child process */ + memcpy(&data, pData, sizeof(data)); + +#ifdef NO_CHILD_PROCESSES +#define fork() (errno = EINVAL, -1) +#endif + if (socketpair(AF_UNIX, SOCK_STREAM, 0, channel) == -1) + { + status = errno; + SAL_WARN("sal.osl", "executeProcess socketpair() errno " << status); + } + + (void) fcntl(channel[0], F_SETFD, FD_CLOEXEC); + (void) fcntl(channel[1], F_SETFD, FD_CLOEXEC); + + /* Create redirected IO pipes */ + if ( status == 0 && data.m_pInputWrite && pipe( stdInput ) == -1 ) + { + status = errno; + assert(status != 0); + SAL_WARN("sal.osl", "executeProcess pipe(stdInput) errno " << status); + } + + if ( status == 0 && data.m_pOutputRead && pipe( stdOutput ) == -1 ) + { + status = errno; + assert(status != 0); + SAL_WARN("sal.osl", "executeProcess pipe(stdOutput) errno " << status); + } + + if ( status == 0 && data.m_pErrorRead && pipe( stdError ) == -1 ) + { + status = errno; + assert(status != 0); + SAL_WARN("sal.osl", "executeProcess pipe(stdError) errno " << status); + } + + if ( (status == 0) && ((pid = fork()) == 0) ) + { + /* Child */ + int chstatus = 0; + int errno_copy; + + if (channel[0] != -1) close(channel[0]); + + if ((data.m_uid != uid_t(-1)) && ((data.m_uid != getuid()) || (data.m_gid != getgid()))) + { + OSL_ASSERT(geteuid() == 0); /* must be root */ + + if (! INIT_GROUPS(data.m_name, data.m_gid) || (setuid(data.m_uid) != 0)) + { + // ignore; can't do much about it here after fork + } + + unsetenv("HOME"); + } + + if (data.m_pszDir) + chstatus = chdir(data.m_pszDir); + + if (chstatus == 0 && ((data.m_uid == uid_t(-1)) || ((data.m_uid == getuid()) && (data.m_gid == getgid())))) + { + int i; + for (i = 0; data.m_pszEnv[i] != nullptr; i++) + { + if (strchr(data.m_pszEnv[i], '=') == nullptr) + { + unsetenv(data.m_pszEnv[i]); /*TODO: check error return*/ + } + else + { + putenv(data.m_pszEnv[i]); /*TODO: check error return*/ + } + } + + /* Connect std IO to pipe ends */ + + /* Write end of stdInput not used in child process */ + if (stdInput[1] != -1) close( stdInput[1] ); + + /* Read end of stdOutput not used in child process */ + if (stdOutput[0] != -1) close( stdOutput[0] ); + + /* Read end of stdError not used in child process */ + if (stdError[0] != -1) close( stdError[0] ); + + /* Redirect pipe ends to std IO */ + + if ( stdInput[0] != STDIN_FILENO ) + { + dup2( stdInput[0], STDIN_FILENO ); + if (stdInput[0] != -1) close( stdInput[0] ); + } + + if ( stdOutput[1] != STDOUT_FILENO ) + { + dup2( stdOutput[1], STDOUT_FILENO ); + if (stdOutput[1] != -1) close( stdOutput[1] ); + } + + if ( stdError[1] != STDERR_FILENO ) + { + dup2( stdError[1], STDERR_FILENO ); + if (stdError[1] != -1) close( stdError[1] ); + } + + // No need to check the return value of execv. If we return from + // it, an error has occurred. + execv(data.m_pszArgs[0], const_cast(data.m_pszArgs)); + } + + /* if we reach here, something went wrong */ + errno_copy = errno; + if ( !safeWrite(channel[1], &errno_copy, sizeof(errno_copy)) ) + { + // ignore; can't do much about it here after fork + } + + if ( channel[1] != -1 ) + close(channel[1]); + + _exit(255); + } + else + { /* Parent */ + int i = -1; + if (channel[1] != -1) close(channel[1]); + + /* Close unused pipe ends */ + if (stdInput[0] != -1) close( stdInput[0] ); + if (stdOutput[1] != -1) close( stdOutput[1] ); + if (stdError[1] != -1) close( stdError[1] ); + + if (pid > 0) + { + while ((i = read(channel[0], &status, sizeof(status))) < 0) + { + if (errno != EINTR) + break; + } + } + + if (channel[0] != -1) close(channel[0]); + + if ((pid > 0) && (i == 0)) + { + pid_t child_pid; + osl_acquireMutex(ChildListMutex); + + pdata->m_pProcImpl->m_pid = pid; + pdata->m_pProcImpl->m_pnext = ChildList; + ChildList = pdata->m_pProcImpl; + + /* Store used pipe ends in data structure */ + + if ( pdata->m_pInputWrite ) + *(pdata->m_pInputWrite) = osl::detail::createFileHandleFromFD( stdInput[1] ); + + if ( pdata->m_pOutputRead ) + *(pdata->m_pOutputRead) = osl::detail::createFileHandleFromFD( stdOutput[0] ); + + if ( pdata->m_pErrorRead ) + *(pdata->m_pErrorRead) = osl::detail::createFileHandleFromFD( stdError[0] ); + + osl_releaseMutex(ChildListMutex); + + osl_setCondition(pdata->m_started); + + do + { + child_pid = waitpid(pid, &status, 0); + } while ( 0 > child_pid && EINTR == errno ); + + if ( child_pid < 0) + { + SAL_WARN("sal.osl", "Failed to wait for child process: " << UnixErrnoString(errno)); + + /* + We got another error than EINTR. Anyway we have to wake up the + waiting thread under any circumstances */ + + child_pid = pid; + } + + if ( child_pid > 0 ) + { + oslProcessImpl* pChild; + + osl_acquireMutex(ChildListMutex); + + pChild = ChildList; + + /* check if it is one of our child processes */ + while (pChild != nullptr) + { + if (pChild->m_pid == child_pid) + { + if (WIFEXITED(status)) + pChild->m_status = WEXITSTATUS(status); + else if (WIFSIGNALED(status)) + pChild->m_status = 128 + WTERMSIG(status); + else + pChild->m_status = -1; + + osl_setCondition(pChild->m_terminated); + } + + pChild = pChild->m_pnext; + } + + osl_releaseMutex(ChildListMutex); + } + } + else + { + SAL_WARN("sal.osl", "ChildStatusProc : starting '" << data.m_pszArgs[0] << "' failed"); + SAL_WARN("sal.osl", "Failed to launch child process, child reports " << UnixErrnoString(status)); + + /* Close pipe ends */ + if ( pdata->m_pInputWrite ) + *pdata->m_pInputWrite = nullptr; + + if ( pdata->m_pOutputRead ) + *pdata->m_pOutputRead = nullptr; + + if ( pdata->m_pErrorRead ) + *pdata->m_pErrorRead = nullptr; + + if (stdInput[1] != -1) close( stdInput[1] ); + if (stdOutput[0] != -1) close( stdOutput[0] ); + if (stdError[0] != -1) close( stdError[0] ); + + /* if pid > 0 then a process was created, even if it later failed + e.g. bash searching for a command to execute, and we still + need to clean it up to avoid "defunct" processes */ + if (pid > 0) + { + pid_t child_pid; + do + { + child_pid = waitpid(pid, &status, 0); + } while ( 0 > child_pid && EINTR == errno ); + } + + /* notify (and unblock) parent thread */ + osl_setCondition(pdata->m_started); + } + } +} + +} + +oslProcessError SAL_CALL osl_executeProcess_WithRedirectedIO( + rtl_uString *ustrImageName, + rtl_uString *ustrArguments[], + sal_uInt32 nArguments, + oslProcessOption Options, + oslSecurity Security, + rtl_uString *ustrWorkDir, + rtl_uString *ustrEnvironment[], + sal_uInt32 nEnvironmentVars, + oslProcess *pProcess, + oslFileHandle *pInputWrite, + oslFileHandle *pOutputRead, + oslFileHandle *pErrorRead + ) +{ + OUString image; + if (ustrImageName == nullptr) + { + if (nArguments == 0) + { + return osl_Process_E_InvalidError; + } + image = OUString::unacquired(ustrArguments); + } + else + { + osl::FileBase::RC e = osl::FileBase::getSystemPathFromFileURL( + OUString::unacquired(&ustrImageName), image); + if (e != osl::FileBase::E_None) + { + SAL_INFO( + "sal.osl", + "getSystemPathFromFileURL(" + << OUString::unacquired(&ustrImageName) + << ") failed with " << e); + return osl_Process_E_Unknown; + } + } + + if ((Options & osl_Process_SEARCHPATH) != 0) + { + OUString path; + if (osl::detail::find_in_PATH(image, path)) + { + image = path; + } + } + + oslProcessError Error; + char* pszWorkDir=nullptr; + char** pArguments=nullptr; + char** pEnvironment=nullptr; + unsigned int idx; + + char szImagePath[PATH_MAX] = ""; + if (!image.isEmpty() + && (UnicodeToText( + szImagePath, SAL_N_ELEMENTS(szImagePath), image.getStr(), + image.getLength()) + == 0)) + { + int e = errno; + SAL_INFO("sal.osl", "UnicodeToText(" << image << ") failed with " << e); + return osl_Process_E_Unknown; + } + + char szWorkDir[PATH_MAX] = ""; + if ( ustrWorkDir != nullptr && ustrWorkDir->length ) + { + oslFileError e = FileURLToPath( szWorkDir, PATH_MAX, ustrWorkDir ); + if (e != osl_File_E_None) + { + SAL_INFO( + "sal.osl", + "FileURLToPath(" << OUString::unacquired(&ustrWorkDir) + << ") failed with " << e); + return osl_Process_E_Unknown; + } + pszWorkDir = szWorkDir; + } + + if ( pArguments == nullptr && nArguments > 0 ) + { + pArguments = static_cast(malloc( ( nArguments + 2 ) * sizeof(char*) )); + } + + for ( idx = 0 ; idx < nArguments ; ++idx ) + { + rtl_String* strArg =nullptr; + + rtl_uString2String( &strArg, + rtl_uString_getStr(ustrArguments[idx]), + rtl_uString_getLength(ustrArguments[idx]), + osl_getThreadTextEncoding(), + OUSTRING_TO_OSTRING_CVTFLAGS ); + + pArguments[idx]=strdup(rtl_string_getStr(strArg)); + rtl_string_release(strArg); + pArguments[idx+1]=nullptr; + } + + for ( idx = 0 ; idx < nEnvironmentVars ; ++idx ) + { + rtl_String* strEnv=nullptr; + + if ( pEnvironment == nullptr ) + { + pEnvironment = static_cast(malloc( ( nEnvironmentVars + 2 ) * sizeof(char*) )); + } + + rtl_uString2String( &strEnv, + rtl_uString_getStr(ustrEnvironment[idx]), + rtl_uString_getLength(ustrEnvironment[idx]), + osl_getThreadTextEncoding(), + OUSTRING_TO_OSTRING_CVTFLAGS ); + + pEnvironment[idx]=strdup(rtl_string_getStr(strEnv)); + rtl_string_release(strEnv); + pEnvironment[idx+1]=nullptr; + } + + Error = osl_psz_executeProcess(szImagePath, + pArguments, + Options, + Security, + pszWorkDir, + pEnvironment, + pProcess, + pInputWrite, + pOutputRead, + pErrorRead + ); + + if ( pArguments != nullptr ) + { + for ( idx = 0 ; idx < nArguments ; ++idx ) + { + if ( pArguments[idx] != nullptr ) + { + free(pArguments[idx]); + } + } + free(pArguments); + } + + if ( pEnvironment != nullptr ) + { + for ( idx = 0 ; idx < nEnvironmentVars ; ++idx ) + { + if ( pEnvironment[idx] != nullptr ) + { + free(pEnvironment[idx]); + } + } + free(pEnvironment); + } + + return Error; +} + +oslProcessError SAL_CALL osl_executeProcess( + rtl_uString *ustrImageName, + rtl_uString *ustrArguments[], + sal_uInt32 nArguments, + oslProcessOption Options, + oslSecurity Security, + rtl_uString *ustrWorkDir, + rtl_uString *ustrEnvironment[], + sal_uInt32 nEnvironmentVars, + oslProcess *pProcess + ) +{ + return osl_executeProcess_WithRedirectedIO( + ustrImageName, + ustrArguments, + nArguments, + Options, + Security, + ustrWorkDir, + ustrEnvironment, + nEnvironmentVars, + pProcess, + nullptr, + nullptr, + nullptr + ); +} + +oslProcessError osl_psz_executeProcess(char *pszImageName, + char *pszArguments[], + oslProcessOption Options, + oslSecurity Security, + char *pszDirectory, + char *pszEnvironments[], + oslProcess *pProcess, + oslFileHandle *pInputWrite, + oslFileHandle *pOutputRead, + oslFileHandle *pErrorRead + ) +{ + int i; + ProcessData Data; + oslThread hThread; + + memset(&Data,0,sizeof(ProcessData)); + Data.m_pInputWrite = pInputWrite; + Data.m_pOutputRead = pOutputRead; + Data.m_pErrorRead = pErrorRead; + + OSL_ASSERT(pszImageName != nullptr); + + if ( pszImageName == nullptr ) + { + return osl_Process_E_NotFound; + } + + Data.m_pszArgs[0] = strdup(pszImageName); + Data.m_pszArgs[1] = nullptr; + + if ( pszArguments != nullptr ) + { + for (i = 0; ((i + 2) < MAX_ARGS) && (pszArguments[i] != nullptr); i++) + Data.m_pszArgs[i+1] = strdup(pszArguments[i]); + Data.m_pszArgs[i+2] = nullptr; + } + + Data.m_pszDir = (pszDirectory != nullptr) ? strdup(pszDirectory) : nullptr; + + if (pszEnvironments != nullptr) + { + for (i = 0; ((i + 1) < MAX_ENVS) && (pszEnvironments[i] != nullptr); i++) + Data.m_pszEnv[i] = strdup(pszEnvironments[i]); + Data.m_pszEnv[i+1] = nullptr; + } + else + Data.m_pszEnv[0] = nullptr; + + if (Security != nullptr) + { + Data.m_uid = static_cast(Security)->m_pPasswd.pw_uid; + Data.m_gid = static_cast(Security)->m_pPasswd.pw_gid; + Data.m_name = static_cast(Security)->m_pPasswd.pw_name; + } + else + Data.m_uid = uid_t(-1); + + Data.m_pProcImpl = static_cast(malloc(sizeof(oslProcessImpl))); + Data.m_pProcImpl->m_pid = 0; + Data.m_pProcImpl->m_terminated = osl_createCondition(); + Data.m_pProcImpl->m_pnext = nullptr; + + if (ChildListMutex == nullptr) + ChildListMutex = osl_createMutex(); + + Data.m_started = osl_createCondition(); + + hThread = osl_createThread(ChildStatusProc, &Data); + + if (hThread != nullptr) + { + osl_waitCondition(Data.m_started, nullptr); + } + osl_destroyCondition(Data.m_started); + + for (i = 0; Data.m_pszArgs[i] != nullptr; i++) + free(const_cast(Data.m_pszArgs[i])); + + for (i = 0; Data.m_pszEnv[i] != nullptr; i++) + free(Data.m_pszEnv[i]); + + if ( Data.m_pszDir != nullptr ) + { + free(const_cast(Data.m_pszDir)); + } + + osl_destroyThread(hThread); + + if (Data.m_pProcImpl->m_pid != 0) + { + assert(hThread != nullptr); + + *pProcess = Data.m_pProcImpl; + + if (Options & osl_Process_WAIT) + osl_joinProcess(*pProcess); + + return osl_Process_E_None; + } + + osl_destroyCondition(Data.m_pProcImpl->m_terminated); + free(Data.m_pProcImpl); + + return osl_Process_E_Unknown; +} + +oslProcessError SAL_CALL osl_terminateProcess(oslProcess Process) +{ + if (Process == nullptr) + return osl_Process_E_Unknown; + + if (kill(static_cast(Process)->m_pid, SIGKILL) != 0) + { + switch (errno) + { + case EPERM: + return osl_Process_E_NoPermission; + + case ESRCH: + return osl_Process_E_NotFound; + + default: + return osl_Process_E_Unknown; + } + } + + return osl_Process_E_None; +} + +oslProcess SAL_CALL osl_getProcess(oslProcessIdentifier Ident) +{ + oslProcessImpl *pProcImpl; + + if (kill(Ident, 0) != -1) + { + oslProcessImpl* pChild; + + if (ChildListMutex == nullptr) + ChildListMutex = osl_createMutex(); + + osl_acquireMutex(ChildListMutex); + + pChild = ChildList; + + /* check if it is one of our child processes */ + while (pChild != nullptr) + { + if (Ident == static_cast(pChild->m_pid)) + break; + + pChild = pChild->m_pnext; + } + + pProcImpl = static_cast(malloc(sizeof(oslProcessImpl))); + pProcImpl->m_pid = Ident; + pProcImpl->m_terminated = osl_createCondition(); + + if (pChild != nullptr) + { + /* process is a child so insert into list */ + pProcImpl->m_pnext = pChild->m_pnext; + pChild->m_pnext = pProcImpl; + + pProcImpl->m_status = pChild->m_status; + + if (osl_checkCondition(pChild->m_terminated)) + osl_setCondition(pProcImpl->m_terminated); + } + else + pProcImpl->m_pnext = nullptr; + + osl_releaseMutex(ChildListMutex); + } + else + pProcImpl = nullptr; + + return pProcImpl; +} + +void SAL_CALL osl_freeProcessHandle(oslProcess Process) +{ + if (Process == nullptr) + return; + + oslProcessImpl *pChild, *pPrev = nullptr; + + OSL_ASSERT(ChildListMutex != nullptr); + + if ( ChildListMutex == nullptr ) + { + return; + } + + osl_acquireMutex(ChildListMutex); + + pChild = ChildList; + + /* remove process from child list */ + while (pChild != nullptr) + { + if (pChild == static_cast(Process)) + { + if (pPrev != nullptr) + pPrev->m_pnext = pChild->m_pnext; + else + ChildList = pChild->m_pnext; + + break; + } + + pPrev = pChild; + pChild = pChild->m_pnext; + } + + osl_releaseMutex(ChildListMutex); + + osl_destroyCondition(static_cast(Process)->m_terminated); + + free(Process); +} + +#if defined(LINUX) +namespace { + +struct osl_procStat +{ + /* from 'stat' */ + pid_t pid; /* pid */ + char command[16]; /* 'argv[0]' */ /* mfe: it all right char comm[16] in kernel! */ + char state; /* state (running, stopped, ...) */ + pid_t ppid; /* parent pid */ + pid_t pgrp; /* parent group */ + int session; /* session ID */ + int tty; /* no of tty */ + pid_t tpgid; /* group of process owning the tty */ + unsigned long flags; /* flags dunno */ + unsigned long minflt; /* minor page faults */ + unsigned long cminflt; /* minor page faults with children */ + unsigned long majflt; /* major page faults */ + unsigned long cmajflt; /* major page faults with children */ + unsigned long utime; /* no of jiffies in user mode */ + unsigned long stime; /* no of jiffies in kernel mode */ + unsigned long cutime; /* no of jiffies in user mode with children */ + unsigned long cstime; /* no of jiffies in kernel mode with children */ + unsigned long priority; /* nice value + 15 (kernel scheduling prio)*/ + long nice; /* nice value */ + long timeout; /* no of jiffies of next process timeout */ + long itrealvalue; /* no jiffies before next SIGALRM */ + unsigned long starttime; /* process started this no of jiffies after boot */ + unsigned long vsize; /* virtual memory size (in bytes) */ + long rss; /* resident set size (in pages) */ + unsigned long rss_rlim; /* rss limit (in bytes) */ + unsigned long startcode; /* address above program text can run */ + unsigned long endcode; /* address below program text can run */ + unsigned long startstack; /* address of start of stack */ + unsigned long kstkesp; /* current value of 'esp' (stack pointer) */ + unsigned long kstkeip; /* current value of 'eip' (instruction pointer) */ + /* mfe: Linux > 2.1.7x have more signals (88) */ + char signal[24]; /* pending signals */ + char blocked[24]; /* blocked signals */ + char sigignore[24]; /* ignored signals */ + char sigcatch[24]; /* caught signals */ + unsigned long wchan; /* 'channel' the process is waiting in */ + unsigned long nswap; /* ? */ + unsigned long cnswap; /* ? */ + + /* from 'status' */ + int ruid; /* real uid */ + int euid; /* effective uid */ + int suid; /* saved uid */ + int fuid; /* file access uid */ + int rgid; /* real gid */ + int egid; /* effective gid */ + int sgid; /* saved gid */ + int fgid; /* file access gid */ + unsigned long vm_size; /* like vsize but on kb */ + unsigned long vm_lock; /* locked pages in kb */ + unsigned long vm_rss; /* like rss but in kb */ + unsigned long vm_data; /* data size */ + unsigned long vm_stack; /* stack size */ + unsigned long vm_exe; /* executable size */ + unsigned long vm_lib; /* library size */ +}; + +} + +static bool osl_getProcStat(pid_t pid, struct osl_procStat* procstat) +{ + int fd = 0; + bool bRet = false; + char name[PATH_MAX + 1]; + snprintf(name, sizeof(name), "/proc/%u/stat", pid); + + if ((fd = open(name,O_RDONLY)) >=0 ) + { + char* tmp=nullptr; + char prstatbuf[512]; + memset(prstatbuf,0,512); + bRet = safeRead(fd, prstatbuf, 511); + + close(fd); + + if (!bRet) + return false; + + tmp = strrchr(prstatbuf, ')'); + if(tmp) + { + *tmp = '\0'; + + memset(procstat->command, 0, sizeof(procstat->command)); + + sscanf(prstatbuf, "%d (%15c", &procstat->pid, procstat->command); + sscanf(tmp + 2, + "%c" + "%i %i %i %i %i" + "%lu %lu %lu %lu %lu" + "%lu %lu %lu %lu" + "%lu %li %li %li" + "%lu %lu %li %lu" + "%lu %lu %lu %lu %lu" + "%23s %23s %23s %23s" + "%lu %lu %lu", + &procstat->state, + &procstat->ppid, &procstat->pgrp, &procstat->session, &procstat->tty, &procstat->tpgid, + &procstat->flags, &procstat->minflt, &procstat->cminflt, &procstat->majflt, &procstat->cmajflt, + &procstat->utime, &procstat->stime, &procstat->cutime, &procstat->cstime, + &procstat->priority, &procstat->nice, &procstat->timeout, &procstat->itrealvalue, + &procstat->starttime, &procstat->vsize, &procstat->rss, &procstat->rss_rlim, + &procstat->startcode, &procstat->endcode, &procstat->startstack, &procstat->kstkesp, &procstat->kstkeip, + procstat->signal, procstat->blocked, procstat->sigignore, procstat->sigcatch, + &procstat->wchan, &procstat->nswap, &procstat->cnswap + ); + } + else + { + bRet = false; + } + } + return bRet; +} + +static bool osl_getProcStatus(pid_t pid, struct osl_procStat* procstat) +{ + int fd = 0; + char name[PATH_MAX + 1]; + bool bRet = false; + + snprintf(name, sizeof(name), "/proc/%u/status", pid); + + if ((fd = open(name,O_RDONLY)) >=0 ) + { + char* tmp=nullptr; + char prstatusbuf[512]; + memset(prstatusbuf,0,512); + bRet = safeRead(fd, prstatusbuf, 511); + + close(fd); + + if (!bRet) + return false; + + tmp = strstr(prstatusbuf,"Uid:"); + if(tmp) + { + sscanf(tmp,"Uid:\t%d\t%d\t%d\t%d", + &procstat->ruid, &procstat->euid, &procstat->suid, &procstat->fuid + ); + } + + tmp = strstr(prstatusbuf,"Gid:"); + if(tmp) + { + sscanf(tmp,"Gid:\t%d\t%d\t%d\t%d", + &procstat->rgid, &procstat->egid, &procstat->sgid, &procstat->fgid + ); + } + + tmp = strstr(prstatusbuf,"VmSize:"); + if(tmp) + { + sscanf(tmp, + "VmSize: %lu kB\n" + "VmLck: %lu kB\n" + "VmRSS: %lu kB\n" + "VmData: %lu kB\n" + "VmStk: %lu kB\n" + "VmExe: %lu kB\n" + "VmLib: %lu kB\n", + &procstat->vm_size, &procstat->vm_lock, &procstat->vm_rss, &procstat->vm_data, + &procstat->vm_stack, &procstat->vm_exe, &procstat->vm_lib + ); + } + + tmp = strstr(prstatusbuf,"SigPnd:"); + if(tmp) + { + sscanf(tmp, "SigPnd: %23s SigBlk: %23s SigIgn: %23s %*s %23s", + procstat->signal, procstat->blocked, procstat->sigignore, procstat->sigcatch + ); + } + } + return bRet; +} + +#endif + +oslProcessError SAL_CALL osl_getProcessInfo(oslProcess Process, oslProcessData Fields, oslProcessInfo* pInfo) +{ + pid_t pid; + + if (Process == nullptr) + pid = getpid(); + else + pid = static_cast(Process)->m_pid; + + if (! pInfo || (pInfo->Size != sizeof(oslProcessInfo))) + return osl_Process_E_Unknown; + + pInfo->Fields = 0; + + if (Fields & osl_Process_IDENTIFIER) + { + pInfo->Ident = pid; + pInfo->Fields |= osl_Process_IDENTIFIER; + } + + if (Fields & osl_Process_EXITCODE) + { + if ((Process != nullptr) && + osl_checkCondition(static_cast(Process)->m_terminated)) + { + pInfo->Code = static_cast(Process)->m_status; + pInfo->Fields |= osl_Process_EXITCODE; + } + } + + if (Fields & (osl_Process_HEAPUSAGE | osl_Process_CPUTIMES)) + { + +#if defined(__sun) + + int fd; + char name[PATH_MAX + 1]; + + snprintf(name, sizeof(name), "/proc/%ld", (long)pid); + + if ((fd = open(name, O_RDONLY)) >= 0) + { + prstatus_t prstatus; + + if (ioctl(fd, PIOCSTATUS, &prstatus) >= 0) + { + if (Fields & osl_Process_CPUTIMES) + { + pInfo->UserTime.Seconds = prstatus.pr_utime.tv_sec; + pInfo->UserTime.Nanosec = prstatus.pr_utime.tv_nsec; + pInfo->SystemTime.Seconds = prstatus.pr_stime.tv_sec; + pInfo->SystemTime.Nanosec = prstatus.pr_stime.tv_nsec; + + pInfo->Fields |= osl_Process_CPUTIMES; + } + + if (Fields & osl_Process_HEAPUSAGE) + { + pInfo->HeapUsage = prstatus.pr_brksize; + + pInfo->Fields |= osl_Process_HEAPUSAGE; + } + + close(fd); + + return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown; + } + else + close(fd); + } + +#elif defined(LINUX) + + if ( (Fields & osl_Process_CPUTIMES) || (Fields & osl_Process_HEAPUSAGE) ) + { + struct osl_procStat procstat; + memset(&procstat,0,sizeof(procstat)); + + if ( (Fields & osl_Process_CPUTIMES) && osl_getProcStat(pid, &procstat) ) + { + /* + * mfe: + * We calculate only time of the process proper. + * Threads are processes, we do not consider their time here! + * (For this, cutime and cstime should be used, it seems not + * to work in 2.0.36) + */ + + long clktck; + unsigned long hz; + unsigned long userseconds; + unsigned long systemseconds; + + clktck = sysconf(_SC_CLK_TCK); + if (clktck <= 0) { + return osl_Process_E_Unknown; + } + hz = static_cast(clktck); + + userseconds = procstat.utime/hz; + systemseconds = procstat.stime/hz; + + pInfo->UserTime.Seconds = userseconds; + pInfo->UserTime.Nanosec = procstat.utime - (userseconds * hz); + pInfo->SystemTime.Seconds = systemseconds; + pInfo->SystemTime.Nanosec = procstat.stime - (systemseconds * hz); + + pInfo->Fields |= osl_Process_CPUTIMES; + } + + if ( (Fields & osl_Process_HEAPUSAGE) && osl_getProcStatus(pid, &procstat) ) + { + /* + * mfe: + * vm_data (found in status) shows the size of the data segment + * it a rough approximation of the core heap size + */ + pInfo->HeapUsage = procstat.vm_data*1024; + + pInfo->Fields |= osl_Process_HEAPUSAGE; + } + } + + return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown; +#endif + + } + + return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown; +} + +/** Helper function for osl_joinProcessWithTimeout + */ + +static bool is_timeout(const struct timeval* tend) +{ + struct timeval tcurrent; + gettimeofday(&tcurrent, nullptr); + return (tcurrent.tv_sec >= tend->tv_sec); +} + +/* kill(pid, 0) is useful for checking if a + process is still alive, but remember that + kill even returns 0 if the process is already + a zombie. */ + +static bool is_process_dead(pid_t pid) +{ + return ((kill(pid, 0) == -1) && (ESRCH == errno)); +} + +oslProcessError SAL_CALL osl_joinProcessWithTimeout(oslProcess Process, const TimeValue* pTimeout) +{ + oslProcessImpl* pChild = ChildList; + oslProcessError osl_error = osl_Process_E_None; + + OSL_PRECOND(Process, "osl_joinProcess: Invalid parameter"); + OSL_ASSERT(ChildListMutex); + + if (Process == nullptr || ChildListMutex == nullptr) + return osl_Process_E_Unknown; + + osl_acquireMutex(ChildListMutex); + + /* check if process is a child of ours */ + while (pChild != nullptr) + { + if (pChild == static_cast(Process)) + break; + + pChild = pChild->m_pnext; + } + + osl_releaseMutex(ChildListMutex); + + if (pChild != nullptr) + { + oslConditionResult cond_res = osl_waitCondition(pChild->m_terminated, pTimeout); + + if (cond_res == osl_cond_result_timeout) + osl_error = osl_Process_E_TimedOut; + else if (cond_res != osl_cond_result_ok) + osl_error = osl_Process_E_Unknown; + } + else /* alien process; StatusThread will not be able + to set the condition terminated */ + { + pid_t pid = static_cast(Process)->m_pid; + + if (pTimeout) + { + bool timeout = false; + struct timeval tend; + + gettimeofday(&tend, nullptr); + + tend.tv_sec += pTimeout->Seconds; + + while (!is_process_dead(pid) && !(timeout = is_timeout(&tend))) + sleep(1); + + if (timeout) + osl_error = osl_Process_E_TimedOut; + } + else /* infinite */ + { + while (!is_process_dead(pid)) + sleep(1); + } + } + return osl_error; +} + +oslProcessError SAL_CALL osl_joinProcess(oslProcess Process) +{ + return osl_joinProcessWithTimeout(Process, nullptr); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx new file mode 100644 index 000000000..5d7f7644f --- /dev/null +++ b/sal/osl/unx/process_impl.cxx @@ -0,0 +1,473 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "file_path_helper.hxx" + +#include "uunxapi.hxx" +#include "nlsupport.hxx" + +#ifdef ANDROID +#include +#endif + +#if defined(MACOSX) || defined(IOS) +#include + +namespace { + +oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL) +{ + oslProcessError result = osl_Process_E_NotFound; + + char buffer[PATH_MAX]; + uint32_t buflen = sizeof(buffer); + + if (_NSGetExecutablePath (buffer, &buflen) == 0) + { + /* Determine absolute path. */ + char abspath[PATH_MAX]; + if (realpath (buffer, abspath) != nullptr) + { + /* Convert from utf8 to unicode. */ + rtl_uString * pAbsPath = nullptr; + rtl_string2UString ( + &pAbsPath, + abspath, rtl_str_getLength (abspath), + RTL_TEXTENCODING_UTF8, + OSTRING_TO_OUSTRING_CVTFLAGS); + + if (pAbsPath) + { + /* Convert from path to url. */ + if (osl_getFileURLFromSystemPath (pAbsPath, ppFileURL) == osl_File_E_None) + { + /* Success. */ + result = osl_Process_E_None; + } + rtl_uString_release (pAbsPath); + } + } + } + + return result; +} + +} + +#else +#include + +namespace { + +oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL) +{ + oslProcessError result = osl_Process_E_NotFound; + +#ifdef ANDROID + /* Now with just a single DSO, this one from lo-bootstrap.c is as good as + * any */ + void * addr = dlsym (RTLD_DEFAULT, "JNI_OnLoad"); +#else +#if defined __linux + // The below code looking for "main" with dlsym() will typically + // fail, as there is little reason for "main" to be exported, in + // the dlsym() sense, from an executable. But Linux has + // /proc/self/exe, try using that. + char buf[PATH_MAX]; + int rc = readlink("/proc/self/exe", buf, sizeof(buf)); + if (rc > 0 && rc < PATH_MAX) + { + buf[rc] = '\0'; + OUString path = OUString::fromUtf8(buf); + OUString fileURL; + if (osl::File::getFileURLFromSystemPath(path, fileURL) == osl::File::E_None) + { + rtl_uString_acquire(fileURL.pData); + *ppFileURL = fileURL.pData; + return osl_Process_E_None; + } + } +#endif + /* Determine address of "main()" function. */ + void * addr = dlsym (RTLD_DEFAULT, "main"); +#endif + if (addr != nullptr) + { + /* Determine module URL. */ + if (osl_getModuleURLFromAddress (addr, ppFileURL)) + { + /* Success. */ + result = osl_Process_E_None; + } + } + + return result; +} + +} + +#endif + +namespace { + +struct CommandArgs_Impl +{ + pthread_mutex_t m_mutex; + sal_uInt32 m_nCount; + rtl_uString ** m_ppArgs; +}; + +} + +static struct CommandArgs_Impl g_command_args = +{ + PTHREAD_MUTEX_INITIALIZER, + 0, + nullptr +}; + +oslProcessError SAL_CALL osl_getExecutableFile (rtl_uString ** ppustrFile) +{ + pthread_mutex_lock (&(g_command_args.m_mutex)); + if (g_command_args.m_nCount == 0) + { + pthread_mutex_unlock (&(g_command_args.m_mutex)); + return bootstrap_getExecutableFile(ppustrFile); + } + + /* CommandArgs set. Obtain argv[0]. */ + rtl_uString_assign (ppustrFile, g_command_args.m_ppArgs[0]); + pthread_mutex_unlock (&(g_command_args.m_mutex)); + return osl_Process_E_None; +} + +sal_uInt32 SAL_CALL osl_getCommandArgCount() +{ + sal_uInt32 result = 0; + + pthread_mutex_lock (&(g_command_args.m_mutex)); + SAL_INFO_IF( + g_command_args.m_nCount == 0, "sal.osl", + "osl_getCommandArgCount w/o prior call to osl_setCommandArgs"); + if (g_command_args.m_nCount > 0) + result = g_command_args.m_nCount - 1; + pthread_mutex_unlock (&(g_command_args.m_mutex)); + + return result; +} + +oslProcessError SAL_CALL osl_getCommandArg (sal_uInt32 nArg, rtl_uString ** strCommandArg) +{ + oslProcessError result = osl_Process_E_NotFound; + + pthread_mutex_lock (&(g_command_args.m_mutex)); + assert(g_command_args.m_nCount > 0); + if (g_command_args.m_nCount > (nArg + 1)) + { + rtl_uString_assign (strCommandArg, g_command_args.m_ppArgs[nArg + 1]); + result = osl_Process_E_None; + } + pthread_mutex_unlock (&(g_command_args.m_mutex)); + + return result; +} + +void SAL_CALL osl_setCommandArgs (int argc, char ** argv) +{ + assert(argc > 0); + pthread_mutex_lock (&(g_command_args.m_mutex)); + SAL_WARN_IF(g_command_args.m_nCount != 0, "sal.osl", "args already set"); + if (g_command_args.m_nCount == 0) + { + rtl_uString** ppArgs = static_cast(rtl_allocateZeroMemory (argc * sizeof(rtl_uString*))); + if (ppArgs != nullptr) + { + rtl_TextEncoding encoding = osl_getThreadTextEncoding(); + for (int i = 0; i < argc; i++) + { + rtl_string2UString ( + &(ppArgs[i]), + argv[i], rtl_str_getLength (argv[i]), encoding, + OSTRING_TO_OUSTRING_CVTFLAGS); + } + if (ppArgs[0] != nullptr) + { +#if HAVE_FEATURE_MACOSX_SANDBOX + // If we are called with a relative path in argv[0] in a sandboxed process + // osl::realpath() fails. So just use bootstrap_getExecutableFile() instead. + // Somewhat silly to use argv[0] and tediously figure out the absolute path from it + // anyway. + bootstrap_getExecutableFile(&ppArgs[0]); + OUString pArg0(ppArgs[0]); + osl_getFileURLFromSystemPath (pArg0.pData, &(ppArgs[0])); +#else +#if !defined(ANDROID) && !defined(IOS) // No use searching PATH on Android or iOS + /* see @ osl_getExecutableFile(). */ + if (rtl_ustr_indexOfChar (rtl_uString_getStr(ppArgs[0]), '/') == -1) + { + const OUString PATH ("PATH"); + + rtl_uString * pSearchPath = nullptr; + osl_getEnvironment (PATH.pData, &pSearchPath); + if (pSearchPath) + { + rtl_uString * pSearchResult = nullptr; + osl_searchPath (ppArgs[0], pSearchPath, &pSearchResult); + if (pSearchResult) + { + rtl_uString_assign (&(ppArgs[0]), pSearchResult); + rtl_uString_release (pSearchResult); + } + rtl_uString_release (pSearchPath); + } + } +#endif + OUString pArg0; + if (osl::realpath (OUString::unacquired(&ppArgs[0]), pArg0)) + { + osl_getFileURLFromSystemPath (pArg0.pData, &(ppArgs[0])); + } +#endif // !HAVE_FEATURE_MACOSX_SANDBOX + } + g_command_args.m_nCount = argc; + g_command_args.m_ppArgs = ppArgs; + } + } + pthread_mutex_unlock (&(g_command_args.m_mutex)); +} + +oslProcessError SAL_CALL osl_getEnvironment(rtl_uString* pustrEnvVar, rtl_uString** ppustrValue) +{ + oslProcessError result = osl_Process_E_NotFound; + rtl_TextEncoding encoding = osl_getThreadTextEncoding(); + rtl_String* pstr_env_var = nullptr; + + OSL_PRECOND(pustrEnvVar, "osl_getEnvironment(): Invalid parameter"); + OSL_PRECOND(ppustrValue, "osl_getEnvironment(): Invalid parameter"); + + rtl_uString2String( + &pstr_env_var, + rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding, + OUSTRING_TO_OSTRING_CVTFLAGS); + if (pstr_env_var != nullptr) + { + const char* p_env_var = getenv (rtl_string_getStr (pstr_env_var)); + if (p_env_var != nullptr) + { + rtl_string2UString( + ppustrValue, + p_env_var, strlen(p_env_var), encoding, + OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(*ppustrValue != nullptr); + + result = osl_Process_E_None; + } + rtl_string_release(pstr_env_var); + } + + return result; +} + +oslProcessError SAL_CALL osl_setEnvironment(rtl_uString* pustrEnvVar, rtl_uString* pustrValue) +{ + oslProcessError result = osl_Process_E_Unknown; + rtl_TextEncoding encoding = osl_getThreadTextEncoding(); + rtl_String* pstr_env_var = nullptr; + rtl_String* pstr_val = nullptr; + + OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter"); + OSL_PRECOND(pustrValue, "osl_setEnvironment(): Invalid parameter"); + + rtl_uString2String( + &pstr_env_var, + rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding, + OUSTRING_TO_OSTRING_CVTFLAGS); + + rtl_uString2String( + &pstr_val, + rtl_uString_getStr(pustrValue), rtl_uString_getLength(pustrValue), encoding, + OUSTRING_TO_OSTRING_CVTFLAGS); + + if (pstr_env_var != nullptr && pstr_val != nullptr) + { +#if defined (__sun) + rtl_String * pBuffer = NULL; + + sal_Int32 nCapacity = rtl_stringbuffer_newFromStringBuffer( &pBuffer, + rtl_string_getLength(pstr_env_var) + rtl_string_getLength(pstr_val) + 1, + pstr_env_var ); + rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, "=", 1); + rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, + rtl_string_getStr(pstr_val), rtl_string_getLength(pstr_val) ); + + rtl_string_acquire(pBuffer); // argument to putenv must leak on success + + if (putenv(rtl_string_getStr(pBuffer)) == 0) + result = osl_Process_E_None; + else + rtl_string_release(pBuffer); +#else + if (setenv(rtl_string_getStr(pstr_env_var), rtl_string_getStr(pstr_val), 1) == 0) + result = osl_Process_E_None; +#endif + } + + if (pstr_val) + rtl_string_release(pstr_val); + + if (pstr_env_var != nullptr) + rtl_string_release(pstr_env_var); + + return result; +} + +oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString* pustrEnvVar) +{ + oslProcessError result = osl_Process_E_Unknown; + rtl_TextEncoding encoding = osl_getThreadTextEncoding(); + rtl_String* pstr_env_var = nullptr; + + OSL_PRECOND(pustrEnvVar, "osl_setEnvironment(): Invalid parameter"); + + rtl_uString2String( + &pstr_env_var, + rtl_uString_getStr(pustrEnvVar), rtl_uString_getLength(pustrEnvVar), encoding, + OUSTRING_TO_OSTRING_CVTFLAGS); + + if (pstr_env_var) + { +#if defined (__sun) + rtl_String * pBuffer = NULL; + + sal_Int32 nCapacity = rtl_stringbuffer_newFromStringBuffer( &pBuffer, + rtl_string_getLength(pstr_env_var) + 1, pstr_env_var ); + rtl_stringbuffer_insert( &pBuffer, &nCapacity, pBuffer->length, "=", 1); + + rtl_string_acquire(pBuffer); // argument to putenv must leak on success + + if (putenv(rtl_string_getStr(pBuffer)) == 0) + result = osl_Process_E_None; + else + rtl_string_release(pBuffer); +#elif (defined(MACOSX) || defined(NETBSD) || defined(FREEBSD)) + // MacOSX baseline is 10.4, which has an old-school void return + // for unsetenv. + // See: http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/10.4/man3/unsetenv.3.html?useVersion=10.4 + unsetenv(rtl_string_getStr(pstr_env_var)); + result = osl_Process_E_None; +#else + if (unsetenv(rtl_string_getStr(pstr_env_var)) == 0) + result = osl_Process_E_None; +#endif + rtl_string_release(pstr_env_var); + } + + return result; +} + +oslProcessError SAL_CALL osl_getProcessWorkingDir(rtl_uString **ppustrWorkingDir) +{ + oslProcessError result = osl_Process_E_Unknown; + char buffer[PATH_MAX]; + + OSL_PRECOND(ppustrWorkingDir, "osl_getProcessWorkingDir(): Invalid parameter"); + + if (getcwd (buffer, sizeof(buffer)) != nullptr) + { + rtl_uString* ustrTmp = nullptr; + + rtl_string2UString( + &ustrTmp, + buffer, strlen(buffer), osl_getThreadTextEncoding(), + OSTRING_TO_OUSTRING_CVTFLAGS); + if (ustrTmp != nullptr) + { + if (osl_getFileURLFromSystemPath (ustrTmp, ppustrWorkingDir) == osl_File_E_None) + result = osl_Process_E_None; + rtl_uString_release (ustrTmp); + } + } + + return result; +} + +namespace { + +struct ProcessLocale_Impl +{ + pthread_mutex_t m_mutex; + rtl_Locale * m_pLocale; +}; + +} + +static struct ProcessLocale_Impl g_process_locale = +{ + PTHREAD_MUTEX_INITIALIZER, + nullptr +}; + +oslProcessError SAL_CALL osl_getProcessLocale( rtl_Locale ** ppLocale ) +{ + oslProcessError result = osl_Process_E_Unknown; + OSL_PRECOND(ppLocale, "osl_getProcessLocale(): Invalid parameter."); + if (ppLocale) + { + pthread_mutex_lock(&(g_process_locale.m_mutex)); + + if (g_process_locale.m_pLocale == nullptr) + imp_getProcessLocale (&(g_process_locale.m_pLocale)); + *ppLocale = g_process_locale.m_pLocale; + result = osl_Process_E_None; + + pthread_mutex_unlock (&(g_process_locale.m_mutex)); + } + return result; +} + +oslProcessError SAL_CALL osl_setProcessLocale( rtl_Locale * pLocale ) +{ + OSL_PRECOND(pLocale, "osl_setProcessLocale(): Invalid parameter."); + + pthread_mutex_lock(&(g_process_locale.m_mutex)); + g_process_locale.m_pLocale = pLocale; + pthread_mutex_unlock (&(g_process_locale.m_mutex)); + + return osl_Process_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/profile.cxx b/sal/osl/unx/profile.cxx new file mode 100644 index 000000000..354fe626f --- /dev/null +++ b/sal/osl/unx/profile.cxx @@ -0,0 +1,1866 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.hxx" +#include "readwrite_helper.hxx" +#include "file_url.hxx" +#include "unixerrnostring.hxx" + +#include +#include +#include +#include +#include +#include + +#define LINES_INI 32 +#define LINES_ADD 10 +#define SECTIONS_INI 5 +#define SECTIONS_ADD 3 +#define ENTRIES_INI 5 +#define ENTRIES_ADD 3 + +#define STR_INI_BOOLYES "yes" +#define STR_INI_BOOLON "on" +#define STR_INI_BOOLONE "1" +#define STR_INI_BOOLNO "no" +#define STR_INI_BOOLOFF "off" +#define STR_INI_BOOLZERO "0" + +#define FLG_USER 0x00FF +#define FLG_AUTOOPEN 0x0100 +#define FLG_MODIFIED 0x0200 + +#define DEFAULT_PMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) + +typedef time_t osl_TStamp; + +namespace { + +enum osl_TLockMode +{ + un_lock, read_lock, write_lock +}; + +struct osl_TFile +{ + int m_Handle; + char* m_pReadPtr; + char m_ReadBuf[512]; + char* m_pWriteBuf; + sal_uInt32 m_nWriteBufLen; + sal_uInt32 m_nWriteBufFree; +}; + +struct osl_TProfileEntry +{ + sal_uInt32 m_Line; + sal_uInt32 m_Offset; + sal_uInt32 m_Len; +}; + +struct osl_TProfileSection +{ + sal_uInt32 m_Line; + sal_uInt32 m_Offset; + sal_uInt32 m_Len; + sal_uInt32 m_NoEntries; + sal_uInt32 m_MaxEntries; + osl_TProfileEntry* m_Entries; +}; + +/* Profile-data structure hidden behind oslProfile: */ +struct osl_TProfileImpl +{ + sal_uInt32 m_Flags; + osl_TFile* m_pFile; + osl_TStamp m_Stamp; + char m_FileName[PATH_MAX + 1]; + sal_uInt32 m_NoLines; + sal_uInt32 m_MaxLines; + sal_uInt32 m_NoSections; + sal_uInt32 m_MaxSections; + char** m_Lines; + osl_TProfileSection* m_Sections; + pthread_mutex_t m_AccessLock; + bool m_bIsValid; +}; + +} + +static osl_TFile* openFileImpl(const char* pszFilename, oslProfileOption ProfileFlags); +static osl_TStamp closeFileImpl(osl_TFile* pFile, oslProfileOption Flags); +static bool OslProfile_lockFile(const osl_TFile* pFile, osl_TLockMode eMode); +static bool OslProfile_rewindFile(osl_TFile* pFile, bool bTruncate); +static osl_TStamp OslProfile_getFileStamp(osl_TFile* pFile); + +static char* OslProfile_getLine(osl_TFile* pFile); +static bool OslProfile_putLine(osl_TFile* pFile, const char *pszLine); +static char* stripBlanks(char* String, sal_uInt32* pLen); +static char* addLine(osl_TProfileImpl* pProfile, const char* Line); +static char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo); +static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo); +static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection, + sal_uInt32 NoEntry, sal_uInt32 Line, + char* Entry, sal_uInt32 Len); +static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection, + int Line, char* Entry, sal_uInt32 Len); +static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry); +static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len); +static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection); +static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const char* Section, + const char* Entry, sal_uInt32 *pNoEntry); +static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile); +static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup); +static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable); +static bool releaseProfile(osl_TProfileImpl* pProfile); + +static bool writeProfileImpl (osl_TFile* pFile); +static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl*); +static bool osl_ProfileSwapProfileNames(osl_TProfileImpl*); +static void osl_ProfileGenerateExtension(const char* pszFileName, const char* pszExtension, char* pszTmpName, int BufferMaxLen); +static oslProfile osl_psz_openProfile(const char *pszProfileName, oslProfileOption Flags); + +oslProfile SAL_CALL osl_openProfile(rtl_uString *ustrProfileName, oslProfileOption Options) +{ + char profilePath[PATH_MAX] = ""; + return + (ustrProfileName == nullptr + || ustrProfileName->buffer[0] == 0 + || (FileURLToPath(profilePath, PATH_MAX, ustrProfileName) + == osl_File_E_None)) + ? osl_psz_openProfile(profilePath, Options) + : nullptr; +} + +static oslProfile osl_psz_openProfile(const char *pszProfileName, oslProfileOption Flags) +{ + osl_TFile* pFile; + osl_TProfileImpl* pProfile; + bool bRet = false; + + if ( ( pFile = openFileImpl(pszProfileName, Flags ) ) == nullptr ) + { + return nullptr; + } + + pProfile = static_cast(calloc(1, sizeof(osl_TProfileImpl))); + + if ( pProfile == nullptr ) + { + closeFileImpl(pFile, Flags); + return nullptr; + } + + pProfile->m_Flags = Flags & FLG_USER; + + if ( Flags & ( osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) ) + { + pProfile->m_pFile = pFile; + } + + pthread_mutex_init(&(pProfile->m_AccessLock),PTHREAD_MUTEXATTR_DEFAULT); + pProfile->m_bIsValid = true; + + pProfile->m_Stamp = OslProfile_getFileStamp(pFile); + bRet=loadProfile(pFile, pProfile); + bRet &= realpath(pszProfileName, pProfile->m_FileName) != nullptr; + SAL_WARN_IF(!bRet, "sal.osl", "realpath(pszProfileName, pProfile->m_FileName) != NULL ==> false"); + + if (pProfile->m_pFile == nullptr) + closeFileImpl(pFile,pProfile->m_Flags); + + // coverity[leaked_storage] - pFile is not leaked + return pProfile; +} + +sal_Bool SAL_CALL osl_closeProfile(oslProfile Profile) +{ + osl_TProfileImpl* pProfile = static_cast(Profile); + osl_TProfileImpl* pTmpProfile; + + if ( Profile == nullptr ) + { + return false; + } + + pthread_mutex_lock(&(pProfile->m_AccessLock)); + + if ( !pProfile->m_bIsValid ) + { + SAL_WARN("sal.osl", "!pProfile->m_bIsValid"); + pthread_mutex_unlock(&(pProfile->m_AccessLock)); + + return false; + } + + pProfile->m_bIsValid = false; + + if ( ! ( pProfile->m_Flags & osl_Profile_READLOCK ) && ( pProfile->m_Flags & FLG_MODIFIED ) ) + { + pTmpProfile = acquireProfile(Profile, true); + + if ( pTmpProfile != nullptr ) + { + bool bRet = storeProfile(pTmpProfile, true); + SAL_WARN_IF(!bRet, "sal.osl", "storeProfile(pTmpProfile, true) ==> false"); + } + } + else + { + pTmpProfile = acquireProfile(Profile, false); + } + + if ( pTmpProfile == nullptr ) + { + pthread_mutex_unlock(&(pProfile->m_AccessLock)); + + SAL_INFO("sal.osl", "Out osl_closeProfile [pProfile==0]"); + return false; + } + + pProfile = pTmpProfile; + + if (pProfile->m_pFile != nullptr) + closeFileImpl(pProfile->m_pFile,pProfile->m_Flags); + + pProfile->m_pFile = nullptr; + pProfile->m_FileName[0] = '\0'; + + /* release whole profile data types memory */ + if ( pProfile->m_NoLines > 0) + { + unsigned int idx=0; + if ( pProfile->m_Lines != nullptr ) + { + for ( idx = 0 ; idx < pProfile->m_NoLines ; ++idx) + { + if ( pProfile->m_Lines[idx] != nullptr ) + { + free(pProfile->m_Lines[idx]); + pProfile->m_Lines[idx]=nullptr; + } + } + free(pProfile->m_Lines); + pProfile->m_Lines=nullptr; + } + if ( pProfile->m_Sections != nullptr ) + { + /*osl_TProfileSection* pSections=pProfile->m_Sections;*/ + for ( idx = 0 ; idx < pProfile->m_NoSections ; ++idx ) + { + if ( pProfile->m_Sections[idx].m_Entries != nullptr ) + { + free(pProfile->m_Sections[idx].m_Entries); + pProfile->m_Sections[idx].m_Entries=nullptr; + } + } + free(pProfile->m_Sections); + pProfile->m_Sections=nullptr; + } + } + + pthread_mutex_unlock(&(pProfile->m_AccessLock)); + + pthread_mutex_destroy(&(pProfile->m_AccessLock)); + + free(pProfile); + + return true; +} + +sal_Bool SAL_CALL osl_flushProfile(oslProfile Profile) +{ + osl_TProfileImpl* pProfile = static_cast(Profile); + osl_TFile* pFile; + bool bRet = false; + + if ( pProfile == nullptr ) + { + return false; + } + + pthread_mutex_lock(&(pProfile->m_AccessLock)); + + if ( !pProfile->m_bIsValid ) + { + SAL_WARN_IF(!pProfile->m_bIsValid, "sal.osl", "!pProfile->m_bIsValid"); + pthread_mutex_unlock(&(pProfile->m_AccessLock)); + return false; + } + + pFile = pProfile->m_pFile; + if ( pFile == nullptr || pFile->m_Handle < 0 ) + { + pthread_mutex_unlock(&(pProfile->m_AccessLock)); + + return false; + } + + if ( pProfile->m_Flags & FLG_MODIFIED ) + { + bRet = storeProfile(pProfile, false); + SAL_WARN_IF(!bRet, "sal.osl", "storeProfile(pProfile, false) ==> false"); + } + + pthread_mutex_unlock(&(pProfile->m_AccessLock)); + return bRet; +} + +static bool writeProfileImpl(osl_TFile* pFile) +{ + if ( pFile == nullptr || pFile->m_Handle < 0 || pFile->m_pWriteBuf == nullptr ) + { + return false; + } + + SAL_WARN_IF( + (strlen(pFile->m_pWriteBuf) + != pFile->m_nWriteBufLen - pFile->m_nWriteBufFree), + "sal.osl", + strlen(pFile->m_pWriteBuf) << " != " + << (pFile->m_nWriteBufLen - pFile->m_nWriteBufFree)); + + if ( !safeWrite(pFile->m_Handle, pFile->m_pWriteBuf, pFile->m_nWriteBufLen - pFile->m_nWriteBufFree) ) + { + SAL_INFO("sal.osl", "write failed: " << UnixErrnoString(errno)); + return false; + } + + free(pFile->m_pWriteBuf); + pFile->m_pWriteBuf=nullptr; + pFile->m_nWriteBufLen=0; + pFile->m_nWriteBufFree=0; + + return true; +} + +sal_Bool SAL_CALL osl_readProfileString(oslProfile Profile, + const char* pszSection, + const char* pszEntry, + char* pszString, + sal_uInt32 MaxLen, + const char* pszDefault) +{ + sal_uInt32 NoEntry; + char* pStr=nullptr; + osl_TProfileImpl* pProfile=nullptr; + osl_TProfileImpl* pTmpProfile=nullptr; + bool bRet = false; + + pTmpProfile = static_cast(Profile); + + if ( pTmpProfile == nullptr ) + { + return false; + } + + pthread_mutex_lock(&(pTmpProfile->m_AccessLock)); + + if ( !pTmpProfile->m_bIsValid ) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return false; + } + + pProfile = acquireProfile(Profile, false); + + if ( pProfile == nullptr ) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return false; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry); + if ((pSec != nullptr) && + (NoEntry < pSec->m_NoEntries) && + ((pStr = strchr(pProfile->m_Lines[pSec->m_Entries[NoEntry].m_Line], + '=')) != nullptr)) + { + pStr++; + } + else + { + pStr=const_cast(pszDefault); + } + + if ( pStr != nullptr ) + { + pStr = stripBlanks(pStr, nullptr); + MaxLen = (MaxLen - 1 < strlen(pStr)) ? (MaxLen - 1) : strlen(pStr); + pStr = stripBlanks(pStr, &MaxLen); + strncpy(pszString, pStr, MaxLen); + pszString[MaxLen] = '\0'; + } + } + else + { /* not implemented */ } + + bRet=releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + if ( pStr == nullptr ) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return false; + } + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return true; +} + +sal_Bool SAL_CALL osl_readProfileBool(oslProfile Profile, + const char* pszSection, + const char* pszEntry, + sal_Bool Default) +{ + char Line[32]; + Line[0] = '\0'; + + if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), "")) + { + if ((strcasecmp(Line, STR_INI_BOOLYES) == 0) || + (strcasecmp(Line, STR_INI_BOOLON) == 0) || + (strcasecmp(Line, STR_INI_BOOLONE) == 0)) + Default = true; + else + if ((strcasecmp(Line, STR_INI_BOOLNO) == 0) || + (strcasecmp(Line, STR_INI_BOOLOFF) == 0) || + (strcasecmp(Line, STR_INI_BOOLZERO) == 0)) + Default = false; + } + + return Default; +} + +sal_uInt32 SAL_CALL osl_readProfileIdent(oslProfile Profile, + const char* pszSection, + const char* pszEntry, + sal_uInt32 FirstId, + const char* Strings[], + sal_uInt32 Default) +{ + sal_uInt32 i; + char Line[256]; + Line[0] = '\0'; + + if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), "")) + { + i = 0; + while (Strings[i] != nullptr) + { + if (strcasecmp(Line, Strings[i]) == 0) + { + Default = i + FirstId; + break; + } + i++; + } + } + + return Default; +} + +sal_Bool SAL_CALL osl_writeProfileString(oslProfile Profile, + const char* pszSection, + const char* pszEntry, + const char* pszString) +{ + bool bRet = false; + sal_uInt32 NoEntry; + char* pStr; + char* Line = nullptr; + osl_TProfileImpl* pProfile = nullptr; + osl_TProfileImpl* pTmpProfile = static_cast(Profile); + + if ( pTmpProfile == nullptr ) + { + return false; + } + + pthread_mutex_lock(&(pTmpProfile->m_AccessLock)); + + if ( !pTmpProfile->m_bIsValid ) + { + SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid"); + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return false; + } + + pProfile=acquireProfile(Profile, true); + + if (pProfile == nullptr) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return false; + } + + Line = static_cast(malloc(strlen(pszEntry)+strlen(pszString)+48)); + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec; + if ((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) == nullptr) + { + Line[0] = '\0'; + addLine(pProfile, Line); + + Line[0] = '['; + strcpy(&Line[1], pszSection); + Line[1 + strlen(pszSection)] = ']'; + Line[2 + strlen(pszSection)] = '\0'; + + pStr = addLine(pProfile, Line); + if ((pStr == nullptr) || + (! addSection(pProfile, pProfile->m_NoLines - 1, &pStr[1], strlen(pszSection)))) + { + bRet=releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + free(Line); + return false; + } + + pSec = &pProfile->m_Sections[pProfile->m_NoSections - 1]; + NoEntry = pSec->m_NoEntries; + } + + Line[0] = '\0'; + strcpy(&Line[0], pszEntry); + Line[0 + strlen(pszEntry)] = '='; + strcpy(&Line[1 + strlen(pszEntry)], pszString); + + if (NoEntry >= pSec->m_NoEntries) + { + sal_uInt32 i; + if (pSec->m_NoEntries > 0) + i = pSec->m_Entries[pSec->m_NoEntries - 1].m_Line + 1; + else + i = pSec->m_Line + 1; + + pStr = insertLine(pProfile, Line, i); + if ((pStr == nullptr) || + (! addEntry(pProfile, pSec, i, pStr, strlen(pszEntry)))) + { + bRet=releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + free(Line); + + return false; + } + + pProfile->m_Flags |= FLG_MODIFIED; + } + else + { + sal_uInt32 i = pSec->m_Entries[NoEntry].m_Line; + free(pProfile->m_Lines[i]); + pProfile->m_Lines[i] = strdup(Line); + setEntry(pProfile, pSec, NoEntry, i, pProfile->m_Lines[i], strlen(pszEntry)); + + pProfile->m_Flags |= FLG_MODIFIED; + } + } + else { + /* not implemented */ + } + + bRet = releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + if ( Line!= nullptr ) + { + free(Line); + } + + return bRet; +} + +sal_Bool SAL_CALL osl_writeProfileBool(oslProfile Profile, + const char* pszSection, + const char* pszEntry, + sal_Bool Value) +{ + bool bRet = false; + + if (Value) + bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLONE); + else + bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLZERO); + + return bRet; +} + +sal_Bool SAL_CALL osl_writeProfileIdent(oslProfile Profile, + const char* pszSection, + const char* pszEntry, + sal_uInt32 FirstId, + const char* Strings[], + sal_uInt32 Value) +{ + int i, n = 0; + bool bRet = false; + + while (Strings[n] != nullptr) + ++n; + + if ((i = Value - FirstId) >= n) + bRet = false; + else + bRet = osl_writeProfileString(Profile, pszSection, pszEntry, Strings[i]); + + return bRet; +} + +sal_Bool SAL_CALL osl_removeProfileEntry(oslProfile Profile, + const char *pszSection, + const char *pszEntry) +{ + sal_uInt32 NoEntry; + osl_TProfileImpl* pProfile = nullptr; + osl_TProfileImpl* pTmpProfile = nullptr; + bool bRet = false; + + pTmpProfile = static_cast(Profile); + + if ( pTmpProfile == nullptr ) + { + return false; + } + + pthread_mutex_lock(&(pTmpProfile->m_AccessLock)); + + if ( !pTmpProfile->m_bIsValid ) + { + SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid"); + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + return false; + } + + pProfile = acquireProfile(Profile, true); + + if (pProfile == nullptr) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return false; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry); + if ((pSec != nullptr) && + (NoEntry < pSec->m_NoEntries)) + { + removeLine(pProfile, pSec->m_Entries[NoEntry].m_Line); + removeEntry(pSec, NoEntry); + if (pSec->m_NoEntries == 0) + { + removeLine(pProfile, pSec->m_Line); + + /* remove any empty separation line */ + if ((pSec->m_Line > 0) && (pProfile->m_Lines[pSec->m_Line - 1][0] == '\0')) + removeLine(pProfile, pSec->m_Line - 1); + + removeSection(pProfile, pSec); + } + + pProfile->m_Flags |= FLG_MODIFIED; + } + } + else + { /* not implemented */ } + + bRet = releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return bRet; +} + +sal_uInt32 SAL_CALL osl_getProfileSectionEntries(oslProfile Profile, + const char *pszSection, + char* pszBuffer, + sal_uInt32 MaxLen) +{ + sal_uInt32 i, n = 0; + sal_uInt32 NoEntry; + osl_TProfileImpl* pProfile = nullptr; + osl_TProfileImpl* pTmpProfile = nullptr; + bool bRet = false; + + pTmpProfile = static_cast(Profile); + + if ( pTmpProfile == nullptr ) + { + return 0; + + } + + pthread_mutex_lock(&(pTmpProfile->m_AccessLock)); + + if ( !pTmpProfile->m_bIsValid ) + { + SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return 0; + } + + pProfile = acquireProfile(Profile, false); + + if (pProfile == nullptr) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return 0; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec; + if ((pSec = findEntry(pProfile, pszSection, "", &NoEntry)) != nullptr) + { + if (MaxLen != 0) + { + for (i = 0; i < pSec->m_NoEntries; i++) + { + if ((n + pSec->m_Entries[i].m_Len + 1) < MaxLen) + { + strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Entries[i].m_Line] + [pSec->m_Entries[i].m_Offset], pSec->m_Entries[i].m_Len); + n += pSec->m_Entries[i].m_Len; + pszBuffer[n++] = '\0'; + } + else + break; + + } + + pszBuffer[n++] = '\0'; + } + else + { + for (i = 0; i < pSec->m_NoEntries; i++) + n += pSec->m_Entries[i].m_Len + 1; + + n += 1; + } + } + else + n = 0; + } + else { + /* not implemented */ + } + + bRet=releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return n; +} + +sal_uInt32 SAL_CALL osl_getProfileSections(oslProfile Profile, + char* pszBuffer, + sal_uInt32 MaxLen) +{ + sal_uInt32 i, n = 0; + osl_TProfileImpl* pProfile = nullptr; + osl_TProfileImpl* pTmpProfile = nullptr; + bool bRet = false; + + pTmpProfile = static_cast(Profile); + + if ( pTmpProfile == nullptr ) + { + return 0; + } + + pthread_mutex_lock(&(pTmpProfile->m_AccessLock)); + + if ( !pTmpProfile->m_bIsValid ) + { + SAL_WARN_IF(!pTmpProfile->m_bIsValid, "sal.osl", "!pTmpProfile->m_bIsValid"); + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return 0; + } + + pProfile = acquireProfile(Profile, false); + + if (pProfile == nullptr) + { + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return 0; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + if (MaxLen != 0) + { + for (i = 0; i < pProfile->m_NoSections; i++) + { + osl_TProfileSection* pSec = &pProfile->m_Sections[i]; + + if ((n + pSec->m_Len + 1) < MaxLen) + { + strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], + pSec->m_Len); + n += pSec->m_Len; + pszBuffer[n++] = '\0'; + } + else + break; + } + + pszBuffer[n++] = '\0'; + } + else + { + for (i = 0; i < pProfile->m_NoSections; i++) + n += pProfile->m_Sections[i].m_Len + 1; + + n += 1; + } + } + else + { /* not implemented */ } + + bRet=releaseProfile(pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "releaseProfile(pProfile) ==> false"); + + pthread_mutex_unlock(&(pTmpProfile->m_AccessLock)); + + return n; +} + +static osl_TStamp OslProfile_getFileStamp(osl_TFile* pFile) +{ + struct stat status; + + if ( (pFile->m_Handle < 0) || (fstat(pFile->m_Handle, &status) < 0) ) + { + return 0; + } + + return status.st_mtime; +} + +static bool OslProfile_lockFile(const osl_TFile* pFile, osl_TLockMode eMode) +{ + struct flock lock; + static bool const bLockingDisabled = getenv( "STAR_PROFILE_LOCKING_DISABLED" ) != nullptr; + + if (pFile->m_Handle < 0) + { + return false; + } + + if ( bLockingDisabled ) + { + return true; + } + + lock.l_start = 0; + lock.l_whence = SEEK_SET; + lock.l_len = 0; + + switch (eMode) + { + case un_lock: + lock.l_type = F_UNLCK; + break; + + case read_lock: + lock.l_type = F_RDLCK; + break; + + case write_lock: + lock.l_type = F_WRLCK; + break; + } + +#ifndef MACOSX + if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 ) +#else + /* Mac OSX will return ENOTSUP for webdav drives so we should ignore it */ + if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 && errno != ENOTSUP ) +#endif + { + SAL_INFO("sal.osl", "fcntl failed: " << UnixErrnoString(errno)); + return false; + } + + return true; +} + +static osl_TFile* openFileImpl(const char* pszFilename, oslProfileOption ProfileFlags ) +{ + int Flags; + osl_TFile* pFile = static_cast(calloc(1, sizeof(osl_TFile))); + bool bWriteable = false; + + if ( ProfileFlags & ( osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) ) + { + bWriteable = true; + } + + if (! bWriteable) + { + pFile->m_Handle = open(pszFilename, O_RDONLY); + + if (pFile->m_Handle == -1) + { + int e = errno; + SAL_INFO("sal.file", "open(" << pszFilename << ",O_RDONLY): " << UnixErrnoString(e)); + } + else + SAL_INFO("sal.file", "open(" << pszFilename << ",O_RDONLY) => " << pFile->m_Handle); + + /* mfe: argghh!!! do not check if the file could be opened */ + /* default mode expects it that way!!! */ + } + else + { + if (((pFile->m_Handle = open(pszFilename, O_RDWR | O_CREAT | O_EXCL, DEFAULT_PMODE)) < 0) && + ((pFile->m_Handle = open(pszFilename, O_RDWR)) < 0)) + { + int e = errno; + SAL_INFO("sal.file", "open(" << pszFilename << ",...): " << UnixErrnoString(e)); + free(pFile); + return nullptr; + } + else + SAL_INFO("sal.file", "open(" << pszFilename << ",...) => " << pFile->m_Handle); + } + + /* set close-on-exec flag */ + if ((Flags = fcntl(pFile->m_Handle, F_GETFD, 0)) != -1) + { + Flags |= FD_CLOEXEC; + int e = fcntl(pFile->m_Handle, F_SETFD, Flags); + SAL_INFO_IF( + e != 0, "sal.osl", + "fcntl to set FD_CLOEXEC failed for " << pszFilename); + } + + pFile->m_pWriteBuf=nullptr; + pFile->m_nWriteBufFree=0; + pFile->m_nWriteBufLen=0; + + if ( ProfileFlags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) ) + { + OslProfile_lockFile(pFile, bWriteable ? write_lock : read_lock); + } + + return pFile; +} + +static osl_TStamp closeFileImpl(osl_TFile* pFile, oslProfileOption Flags) +{ + osl_TStamp stamp = 0; + + if ( pFile == nullptr ) + { + return stamp; + } + + if ( pFile->m_Handle >= 0 ) + { + stamp = OslProfile_getFileStamp(pFile); + + if ( Flags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) ) + { + OslProfile_lockFile(pFile, un_lock); + } + + close(pFile->m_Handle); + SAL_INFO("sal.file", "close(" << pFile->m_Handle << ")"); + pFile->m_Handle = -1; + } + + if ( pFile->m_pWriteBuf ) + { + free(pFile->m_pWriteBuf); + } + + free(pFile); + + return stamp; +} + +static bool OslProfile_rewindFile(osl_TFile* pFile, bool bTruncate) +{ + bool bRet = true; + + if (pFile->m_Handle >= 0) + { + pFile->m_pReadPtr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf); + + bRet = (lseek(pFile->m_Handle, SEEK_SET, 0) == 0); + + if (bTruncate) + { + bRet &= (ftruncate(pFile->m_Handle, 0) == 0); + } + + } + + return bRet; +} + +static char* OslProfile_getLine(osl_TFile* pFile) +{ + int Max, Free, nLineBytes = 0; + char* pChr; + char* pLine = nullptr; + char* pNewLine; + + if ( pFile == nullptr ) + { + return nullptr; + } + + if (pFile->m_Handle < 0) + return nullptr; + + do + { + int Bytes = sizeof(pFile->m_ReadBuf) - (pFile->m_pReadPtr - pFile->m_ReadBuf); + + if (Bytes <= 1) + { + /* refill buffer */ + memcpy(pFile->m_ReadBuf, pFile->m_pReadPtr, Bytes); + pFile->m_pReadPtr = pFile->m_ReadBuf; + + Free = sizeof(pFile->m_ReadBuf) - Bytes; + + if ((Max = read(pFile->m_Handle, &pFile->m_ReadBuf[Bytes], Free)) < 0) + { + SAL_INFO("sal.osl", "read failed: " << UnixErrnoString(errno)); + + if( pLine ) + free( pLine ); + pLine = nullptr; + break; + } + + if (Max < Free) + { + if ((Max == 0) && ! pLine) + break; + + pFile->m_ReadBuf[Bytes + Max] = '\0'; + } + } + + for (pChr = pFile->m_pReadPtr; + (*pChr != '\n') && (*pChr != '\r') && (*pChr != '\0') && + (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1)); + pChr++); + + Max = pChr - pFile->m_pReadPtr; + pNewLine = static_cast(malloc( nLineBytes + Max + 1 )); + if( pLine ) + { + memcpy( pNewLine, pLine, nLineBytes ); + free( pLine ); + } + memcpy(pNewLine+nLineBytes, pFile->m_pReadPtr, Max); + nLineBytes += Max; + pNewLine[ nLineBytes ] = 0; + pLine = pNewLine; + + if (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1)) + { + if (*pChr != '\0') + { + if ((pChr[0] == '\r') && (pChr[1] == '\n')) + pChr += 2; + else + pChr += 1; + } + + if ((pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf))) && + (*pChr == '\0')) + pChr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf); + + /* setting Max to -1 indicates terminating read loop */ + Max = -1; + } + + pFile->m_pReadPtr = pChr; + } + while (Max > 0) ; + + return pLine; +} + +static bool OslProfile_putLine(osl_TFile* pFile, const char *pszLine) +{ + unsigned int Len = strlen(pszLine); + + if ( pFile == nullptr || pFile->m_Handle < 0 ) + { + return false; + } + + if ( pFile->m_pWriteBuf == nullptr ) + { + pFile->m_pWriteBuf = static_cast(malloc(Len+3)); + pFile->m_nWriteBufLen = Len+3; + pFile->m_nWriteBufFree = Len+3; + } + else + { + if ( pFile->m_nWriteBufFree <= Len + 3 ) + { + char* pTmp; + + pTmp=static_cast(realloc(pFile->m_pWriteBuf,( ( pFile->m_nWriteBufLen + Len ) * 2) )); + if ( pTmp == nullptr ) + { + return false; + } + pFile->m_pWriteBuf = pTmp; + pFile->m_nWriteBufFree = pFile->m_nWriteBufFree + pFile->m_nWriteBufLen + ( 2 * Len ); + pFile->m_nWriteBufLen = ( pFile->m_nWriteBufLen + Len ) * 2; + memset( (pFile->m_pWriteBuf) + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ), 0, pFile->m_nWriteBufFree); + } + } + + memcpy(pFile->m_pWriteBuf + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ),pszLine,Len+1); + pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len]='\n'; + pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 1]='\0'; + + pFile->m_nWriteBufFree-=Len+1; + + return true; +} + +static char* stripBlanks(char* String, sal_uInt32* pLen) +{ + if ( ( pLen != nullptr ) && ( *pLen != 0 ) ) + { + while ((String[*pLen - 1] == ' ') || (String[*pLen - 1] == '\t')) + (*pLen)--; + + while ( (*String == ' ') || (*String == '\t') ) + { + String++; + (*pLen)--; + } + } + else + while ( (*String == ' ') || (*String == '\t') ) + String++; + + return String; +} + +static char* addLine(osl_TProfileImpl* pProfile, const char* Line) +{ + if (pProfile->m_NoLines >= pProfile->m_MaxLines) + { + if (pProfile->m_Lines == nullptr) + { + pProfile->m_MaxLines = LINES_INI; + pProfile->m_Lines = static_cast(calloc(pProfile->m_MaxLines, sizeof(char *))); + } + else + { + unsigned int idx=0; + unsigned int oldmax=pProfile->m_MaxLines; + + pProfile->m_MaxLines += LINES_ADD; + pProfile->m_Lines = static_cast(realloc(pProfile->m_Lines, + pProfile->m_MaxLines * sizeof(char *))); + for ( idx = oldmax ; idx < pProfile->m_MaxLines ; ++idx ) + { + pProfile->m_Lines[idx]=nullptr; + } + } + } + if (pProfile->m_Lines == nullptr) + { + pProfile->m_NoLines = 0; + pProfile->m_MaxLines = 0; + return nullptr; + } + + if ( pProfile->m_Lines[pProfile->m_NoLines] != nullptr ) + { + free(pProfile->m_Lines[pProfile->m_NoLines]); + } + pProfile->m_Lines[pProfile->m_NoLines++] = strdup(Line); + + return pProfile->m_Lines[pProfile->m_NoLines - 1]; +} + +static char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo) +{ + if (pProfile->m_NoLines >= pProfile->m_MaxLines) + { + if (pProfile->m_Lines == nullptr) + { + pProfile->m_MaxLines = LINES_INI; + pProfile->m_Lines = static_cast(calloc(pProfile->m_MaxLines, sizeof(char *))); + } + else + { + pProfile->m_MaxLines += LINES_ADD; + pProfile->m_Lines = static_cast(realloc(pProfile->m_Lines, + pProfile->m_MaxLines * sizeof(char *))); + + memset(&pProfile->m_Lines[pProfile->m_NoLines], + 0, + (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(char*)); + } + + if (pProfile->m_Lines == nullptr) + { + pProfile->m_NoLines = 0; + pProfile->m_MaxLines = 0; + return nullptr; + } + } + + LineNo = std::min(LineNo, pProfile->m_NoLines); + + if (LineNo < pProfile->m_NoLines) + { + sal_uInt32 i, n; + + memmove(&pProfile->m_Lines[LineNo + 1], &pProfile->m_Lines[LineNo], + (pProfile->m_NoLines - LineNo) * sizeof(char *)); + + /* adjust line references */ + for (i = 0; i < pProfile->m_NoSections; i++) + { + osl_TProfileSection* pSec = &pProfile->m_Sections[i]; + + if (pSec->m_Line >= LineNo) + pSec->m_Line++; + + for (n = 0; n < pSec->m_NoEntries; n++) + if (pSec->m_Entries[n].m_Line >= LineNo) + pSec->m_Entries[n].m_Line++; + } + } + + pProfile->m_NoLines++; + + pProfile->m_Lines[LineNo] = strdup(Line); + + return pProfile->m_Lines[LineNo]; +} + +static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo) +{ + if (LineNo >= pProfile->m_NoLines) + return; + + free(pProfile->m_Lines[LineNo]); + pProfile->m_Lines[LineNo]=nullptr; + if (pProfile->m_NoLines - LineNo > 1) + { + sal_uInt32 i, n; + + memmove(&pProfile->m_Lines[LineNo], &pProfile->m_Lines[LineNo + 1], + (pProfile->m_NoLines - LineNo - 1) * sizeof(char *)); + + memset(&pProfile->m_Lines[pProfile->m_NoLines - 1], + 0, + (pProfile->m_MaxLines - pProfile->m_NoLines) * sizeof(char*)); + + /* adjust line references */ + for (i = 0; i < pProfile->m_NoSections; i++) + { + osl_TProfileSection* pSec = &pProfile->m_Sections[i]; + + if (pSec->m_Line > LineNo) + pSec->m_Line--; + + for (n = 0; n < pSec->m_NoEntries; n++) + if (pSec->m_Entries[n].m_Line > LineNo) + pSec->m_Entries[n].m_Line--; + } + } + else + { + pProfile->m_Lines[LineNo] = nullptr; + } + + pProfile->m_NoLines--; +} + +static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection, + sal_uInt32 NoEntry, sal_uInt32 Line, + char* Entry, sal_uInt32 Len) +{ + Entry = stripBlanks(Entry, &Len); + pSection->m_Entries[NoEntry].m_Line = Line; + pSection->m_Entries[NoEntry].m_Offset = Entry - pProfile->m_Lines[Line]; + pSection->m_Entries[NoEntry].m_Len = Len; +} + +static bool addEntry(osl_TProfileImpl* pProfile, + osl_TProfileSection *pSection, + int Line, char* Entry, + sal_uInt32 Len) +{ + if (pSection != nullptr) + { + if (pSection->m_NoEntries >= pSection->m_MaxEntries) + { + if (pSection->m_Entries == nullptr) + { + pSection->m_MaxEntries = ENTRIES_INI; + pSection->m_Entries = static_cast(malloc( + pSection->m_MaxEntries * sizeof(osl_TProfileEntry))); + } + else + { + pSection->m_MaxEntries += ENTRIES_ADD; + pSection->m_Entries = static_cast(realloc(pSection->m_Entries, + pSection->m_MaxEntries * sizeof(osl_TProfileEntry))); + } + + if (pSection->m_Entries == nullptr) + { + pSection->m_NoEntries = 0; + pSection->m_MaxEntries = 0; + return false; + } + } + + pSection->m_NoEntries++; + + Entry = stripBlanks(Entry, &Len); + setEntry(pProfile, pSection, pSection->m_NoEntries - 1, Line, + Entry, Len); + + return true; + } + + return false; +} + +static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry) +{ + if (NoEntry >= pSection->m_NoEntries) + return; + + if (pSection->m_NoEntries - NoEntry > 1) + { + memmove(&pSection->m_Entries[NoEntry], + &pSection->m_Entries[NoEntry + 1], + (pSection->m_NoEntries - NoEntry - 1) * sizeof(osl_TProfileEntry)); + pSection->m_Entries[pSection->m_NoEntries - 1].m_Line=0; + pSection->m_Entries[pSection->m_NoEntries - 1].m_Offset=0; + pSection->m_Entries[pSection->m_NoEntries - 1].m_Len=0; + } + + pSection->m_NoEntries--; + +} + +static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len) +{ + if (pProfile->m_NoSections >= pProfile->m_MaxSections) + { + if (pProfile->m_Sections == nullptr) + { + pProfile->m_MaxSections = SECTIONS_INI; + pProfile->m_Sections = static_cast(calloc(pProfile->m_MaxSections, sizeof(osl_TProfileSection))); + } + else + { + unsigned int idx=0; + unsigned int oldmax=pProfile->m_MaxSections; + + pProfile->m_MaxSections += SECTIONS_ADD; + pProfile->m_Sections = static_cast(realloc(pProfile->m_Sections, + pProfile->m_MaxSections * sizeof(osl_TProfileSection))); + for ( idx = oldmax ; idx < pProfile->m_MaxSections ; ++idx ) + { + pProfile->m_Sections[idx].m_Entries=nullptr; + } + } + + if (pProfile->m_Sections == nullptr) + { + pProfile->m_NoSections = 0; + pProfile->m_MaxSections = 0; + return false; + } + } + + pProfile->m_NoSections++; + + if ( pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries != nullptr ) + { + free(pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries); + } + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_NoEntries = 0; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_MaxEntries = 0; + + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Line = Line; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Offset = Section - pProfile->m_Lines[Line]; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Len = Len; + + return true; +} + +static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection) +{ + sal_uInt32 Section; + + if ((Section = pSection - pProfile->m_Sections) >= pProfile->m_NoSections) + return; + + free (pSection->m_Entries); + pSection->m_Entries=nullptr; + if (pProfile->m_NoSections - Section > 1) + { + memmove(&pProfile->m_Sections[Section], &pProfile->m_Sections[Section + 1], + (pProfile->m_NoSections - Section - 1) * sizeof(osl_TProfileSection)); + + memset(&pProfile->m_Sections[pProfile->m_NoSections - 1], + 0, + (pProfile->m_MaxSections - pProfile->m_NoSections) * sizeof(osl_TProfileSection)); + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr; + } + else + { + pSection->m_Entries = nullptr; + } + + pProfile->m_NoSections--; +} + +static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, + const char* Section, + const char* Entry, + sal_uInt32 *pNoEntry) +{ + static sal_uInt32 Sect = 0; + sal_uInt32 i, n; + sal_uInt32 Len; + osl_TProfileSection* pSec=nullptr; + + Len = strlen(Section); + + n = Sect; + + for (i = 0; i < pProfile->m_NoSections; i++) + { + n %= pProfile->m_NoSections; + pSec = &pProfile->m_Sections[n]; + if ((Len == pSec->m_Len) && + (strncasecmp(Section, &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], pSec->m_Len) + == 0)) + break; + n++; + } + + Sect = n; + + if (i < pProfile->m_NoSections) + { + Len = strlen(Entry); + + *pNoEntry = pSec->m_NoEntries; + + for (i = 0; i < pSec->m_NoEntries; i++) + { + const char* pStr = &pProfile->m_Lines[pSec->m_Entries[i].m_Line] + [pSec->m_Entries[i].m_Offset]; + if ((Len == pSec->m_Entries[i].m_Len) && + (strncasecmp(Entry, pStr, pSec->m_Entries[i].m_Len) + == 0)) + { + *pNoEntry = i; + break; + } + } + } + else + pSec = nullptr; + + return pSec; +} + +static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile) +{ + sal_uInt32 i; + char* pStr; + char* pChar; + + char* pLine; + + if ( !pFile ) + { + return false; + } + + if ( !pProfile ) + { + return false; + } + + pProfile->m_NoLines = 0; + pProfile->m_NoSections = 0; + + OSL_VERIFY(OslProfile_rewindFile(pFile, false)); + + while ( ( pLine=OslProfile_getLine(pFile) ) != nullptr ) + { + char* bWasAdded = addLine( pProfile, pLine ); + free( pLine ); + SAL_WARN_IF(!bWasAdded, "sal.osl", "addLine( pProfile, pLine ) ==> false"); + if ( ! bWasAdded ) + return false; + } + + for (i = 0; i < pProfile->m_NoLines; i++) + { + pStr = stripBlanks(pProfile->m_Lines[i], nullptr); + + if ((*pStr == '\0') || (*pStr == ';')) + continue; + + if ((*pStr != '[') || ((pChar = strrchr(pStr, ']')) == nullptr) || + ((pChar - pStr) <= 2)) + { + /* insert entry */ + + if (pProfile->m_NoSections < 1) + continue; + + if ((pChar = strchr(pStr, '=')) == nullptr) + pChar = pStr + strlen(pStr); + + if (! addEntry(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1], + i, pStr, pChar - pStr)) + { + SAL_WARN("sal.osl", "Adding entry => false"); + continue; + } + + } + else + { + /* new section */ + + if (! addSection(pProfile, i, pStr + 1, pChar - pStr - 1)) + { + SAL_WARN("sal.osl", "Adding section => false"); + continue; + } + + } + } + + return true; +} + +static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup) +{ + if (pProfile->m_Lines != nullptr) + { + if (pProfile->m_Flags & FLG_MODIFIED) + { + sal_uInt32 i; + + osl_TFile* pTmpFile = osl_openTmpProfileImpl(pProfile); + + if ( pTmpFile == nullptr ) + { + return false; + } + + OSL_VERIFY(OslProfile_rewindFile(pTmpFile, true)); + + for ( i = 0 ; i < pProfile->m_NoLines ; i++ ) + { + OSL_VERIFY(OslProfile_putLine(pTmpFile, pProfile->m_Lines[i])); + } + + if ( ! writeProfileImpl(pTmpFile) ) + { + if ( pTmpFile->m_pWriteBuf != nullptr ) + { + free(pTmpFile->m_pWriteBuf); + } + + pTmpFile->m_pWriteBuf=nullptr; + pTmpFile->m_nWriteBufLen=0; + pTmpFile->m_nWriteBufFree=0; + + closeFileImpl(pTmpFile,pProfile->m_Flags); + + return false; + } + + pProfile->m_Flags &= ~FLG_MODIFIED; + + closeFileImpl(pProfile->m_pFile,pProfile->m_Flags); + closeFileImpl(pTmpFile,pProfile->m_Flags); + + osl_ProfileSwapProfileNames(pProfile); + + pProfile->m_pFile = openFileImpl(pProfile->m_FileName,pProfile->m_Flags); + + } + + if (bCleanup) + { + while (pProfile->m_NoLines > 0) + removeLine(pProfile, pProfile->m_NoLines - 1); + + free(pProfile->m_Lines); + pProfile->m_Lines = nullptr; + pProfile->m_NoLines = 0; + pProfile->m_MaxLines = 0; + + while (pProfile->m_NoSections > 0) + removeSection(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1]); + + free(pProfile->m_Sections); + pProfile->m_Sections = nullptr; + pProfile->m_NoSections = 0; + pProfile->m_MaxSections = 0; + } + } + + return true; +} + +static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl* pProfile) +{ + osl_TFile* pFile=nullptr; + char const * const pszExtension = "tmp"; + char pszTmpName[PATH_MAX]; + oslProfileOption PFlags=0; + + pszTmpName[0] = '\0'; + + /* generate tmp profilename */ + osl_ProfileGenerateExtension(pProfile->m_FileName, pszExtension, pszTmpName, PATH_MAX); + + if ( pszTmpName[0] == 0 ) + { + return nullptr; + } + + if ( ! ( pProfile->m_Flags & osl_Profile_READLOCK ) ) + { + PFlags |= osl_Profile_WRITELOCK; + } + + /* open this file */ + pFile = openFileImpl(pszTmpName,pProfile->m_Flags | PFlags); + + /* return new pFile */ + return pFile; +} + +static bool osl_ProfileSwapProfileNames(osl_TProfileImpl* pProfile) +{ + char pszBakFile[PATH_MAX]; + char pszTmpFile[PATH_MAX]; + + pszBakFile[0] = '\0'; + pszTmpFile[0] = '\0'; + + osl_ProfileGenerateExtension(pProfile->m_FileName, "bak", pszBakFile, PATH_MAX); + osl_ProfileGenerateExtension(pProfile->m_FileName, "tmp", pszTmpFile, PATH_MAX); + + /* unlink bak */ + unlink( pszBakFile ); + + // Rename ini -> bak, then tmp -> ini: + bool result = rename( pProfile->m_FileName, pszBakFile ) == 0; + if (!result) + { + int e = errno; + SAL_INFO("sal.file", "rename(" << pProfile->m_FileName << "," << pszBakFile << "): " << UnixErrnoString(e)); + } + else + { + SAL_INFO("sal.file", "rename(" << pProfile->m_FileName << "," << pszBakFile << "): OK"); + result = rename( pszTmpFile, pProfile->m_FileName ) == 0; + if (!result) + { + int e = errno; + SAL_INFO("sal.file", "rename(" << pszTmpFile << "," << pProfile->m_FileName << "): " << UnixErrnoString(e)); + } + else + { + SAL_INFO("sal.file", "rename(" << pszTmpFile << "," << pProfile->m_FileName << "): OK"); + } + } + return result; +} + +static void osl_ProfileGenerateExtension(const char* pszFileName, const char* pszExtension, char* pszTmpName, int BufferMaxLen) +{ + char* cursor = pszTmpName; + int len; + + /* concatenate filename + "." + extension, limited to the size of the + * output buffer; in case of overrun, data is truncated at the end... + * and the result is always 0-terminated. + */ + len = strlen(pszFileName); + if(len < BufferMaxLen) + { + memcpy(cursor, pszFileName, len); + cursor += len; + BufferMaxLen -= len; + } + else + { + memcpy(cursor, pszFileName, BufferMaxLen - 1); + cursor += BufferMaxLen - 1; + BufferMaxLen = 1; + } + if(BufferMaxLen > 1) + { + *cursor++ = '.'; + BufferMaxLen -= 1; + } + len = strlen(pszExtension); + if(len < BufferMaxLen) + { + memcpy(cursor, pszExtension, len); + cursor += len; + } + else + { + memcpy(cursor, pszExtension, BufferMaxLen - 1); + cursor += BufferMaxLen - 1; + } + *cursor = 0; +} + +static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable) +{ + osl_TProfileImpl* pProfile = static_cast(Profile); + oslProfileOption PFlags=0; + + if ( bWriteable ) + { + PFlags = osl_Profile_DEFAULT | osl_Profile_WRITELOCK; + } + else + { + PFlags = osl_Profile_DEFAULT; + } + + if (pProfile == nullptr) + { + if ( ( pProfile = static_cast(osl_openProfile(nullptr, PFlags )) ) != nullptr ) + { + pProfile->m_Flags |= FLG_AUTOOPEN; + } + } + else + { + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + if (! (pProfile->m_Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ))) + { + osl_TStamp Stamp; + + if (! (pProfile->m_pFile = openFileImpl(pProfile->m_FileName, pProfile->m_Flags | PFlags ))) + return nullptr; + + Stamp = OslProfile_getFileStamp(pProfile->m_pFile); + + if (memcmp(&Stamp, &(pProfile->m_Stamp), sizeof(osl_TStamp))) + { + pProfile->m_Stamp = Stamp; + bool bRet = loadProfile(pProfile->m_pFile, pProfile); + SAL_WARN_IF(!bRet, "sal.osl", "loadProfile(pProfile->m_pFile, pProfile) ==> false"); + } + } + else + { + /* A readlock file could not be written */ + if ((pProfile->m_Flags & osl_Profile_READLOCK) && bWriteable) + { + return nullptr; + } + } + } + } + + return pProfile; +} + +static bool releaseProfile(osl_TProfileImpl* pProfile) +{ + if ( pProfile == nullptr ) + { + return false; + } + + if (pProfile->m_Flags & FLG_AUTOOPEN) + { + return osl_closeProfile(static_cast(pProfile)); + } + + if (! (pProfile->m_Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ))) + { + if (pProfile->m_Flags & FLG_MODIFIED) + { + bool bRet = storeProfile(pProfile, false); + SAL_WARN_IF(!bRet, "sal.osl", "storeProfile(pProfile, false) ==> false"); + } + + closeFileImpl(pProfile->m_pFile,pProfile->m_Flags); + pProfile->m_pFile = nullptr; + } + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/random.cxx b/sal/osl/unx/random.cxx new file mode 100644 index 000000000..260aa61ba --- /dev/null +++ b/sal/osl/unx/random.cxx @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "system.hxx" +#include + +#include + +int osl_get_system_random_data(char* buffer, size_t desired_len) +{ + int fd; + + assert(buffer); + fd = open("/dev/urandom", O_RDONLY); + if (fd != -1) + { + while (desired_len) + { + ssize_t nb_read; + if ((nb_read = read(fd, buffer, desired_len)) == -1) + { + if (errno != EINTR) + { + close(fd); + return false; + } + } + else + { + buffer += nb_read; + desired_len -= nb_read; + } + } + close(fd); + return true; + } + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/readwrite_helper.cxx b/sal/osl/unx/readwrite_helper.cxx new file mode 100644 index 000000000..49c44c2c0 --- /dev/null +++ b/sal/osl/unx/readwrite_helper.cxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include + +#include "readwrite_helper.hxx" + +#include "system.hxx" + +namespace { + +std::size_t cap_ssize_t(std::size_t value) { + return std::min(value, std::size_t(std::numeric_limits::max())); +} + +} + +bool safeWrite(int fd, void* data, std::size_t dataSize) +{ + auto nToWrite = dataSize; + unsigned char* dataToWrite = static_cast(data); + + while ( nToWrite ) { + auto nWritten = write(fd, dataToWrite, cap_ssize_t(nToWrite)); + if ( nWritten < 0 ) { + if ( errno == EINTR ) + continue; + + return false; + + } + + assert(nWritten > 0); + nToWrite -= nWritten; + dataToWrite += nWritten; + } + + return true; +} + +bool safeRead( int fd, void* buffer, std::size_t count ) +{ + auto nToRead = count; + unsigned char* bufferForReading = static_cast(buffer); + + while ( nToRead ) { + auto nRead = read(fd, bufferForReading, cap_ssize_t(nToRead)); + if ( nRead < 0 ) { + // We were interrupted before reading, retry. + if (errno == EINTR) + continue; + + return false; + } + + // If we reach the EOF, we consider this a partial transfer and thus + // an error. + if ( nRead == 0 ) + return false; + + nToRead -= nRead; + bufferForReading += nRead; + } + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/readwrite_helper.hxx b/sal/osl/unx/readwrite_helper.hxx new file mode 100644 index 000000000..133ccd016 --- /dev/null +++ b/sal/osl/unx/readwrite_helper.hxx @@ -0,0 +1,26 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_UNX_READWRITE_HELPER_HXX +#define INCLUDED_SAL_OSL_UNX_READWRITE_HELPER_HXX + +#include + +#include + +bool safeWrite(int fd, void* data, std::size_t dataSize); + +// This function *will* read |count| bytes from |fd|, busy looping +// if needed. Don't use it when you don't know if you can request enough +// data. It will return sal_False for any partial transfer or error. +bool safeRead(int fd, void* buffer, std::size_t count); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/salinit.cxx b/sal/osl/unx/salinit.cxx new file mode 100644 index 000000000..c55cb2667 --- /dev/null +++ b/sal/osl/unx/salinit.cxx @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#if defined MACOSX +#include +#include +#include +#include +#endif + +#include +#include +#include +#include + +#include "saltime.hxx" +#include "soffice.hxx" +#include + +#if HAVE_SYSLOG_H +#include +#include +#include +#endif + +extern "C" { + +void sal_detail_initialize(int argc, char ** argv) { + if (argc == sal::detail::InitializeSoffice) + { + sal::detail::setSoffice(); + return; + } +#if defined MACOSX && !HAVE_FEATURE_MACOSX_SANDBOX + // On macOS when not sandboxed, soffice can restart itself via exec (see + // restartOnMac in desktop/source/app/app.cxx), which leaves all file + // descriptors open, which in turn can have unwanted effects (see + // "Unable to update + // LibreOffice without resetting user profile"). But closing fds in + // restartOnMac before calling exec does not work, as additional threads + // might still be running then, which can still use those fds and cause + // crashes. Therefore, the simplest solution is to close fds at process + // start (as early as possible, so that no other threads have been created + // yet that might already have opened some fds); this is done for all kinds + // of processes here, not just soffice, but hopefully none of our processes + // rely on being spawned with certain fds already open. Unfortunately, Mac + // macOS appears to have no better interface to close all fds (like + // closefrom): + long openMax = sysconf(_SC_OPEN_MAX); + // When LibreOffice restarts itself on macOS 11 beta on arm64, for + // some reason sysconf(_SC_OPEN_MAX) returns 0x7FFFFFFFFFFFFFFF, + // so use a sanity limit here. + if (openMax == -1 || openMax == std::numeric_limits::max()) { + openMax = 100000; + } + assert(openMax >= 0 && openMax <= std::numeric_limits< int >::max()); + for (int fd = 3; fd < int(openMax); ++fd) { + struct stat s; + if (fstat(fd, &s) != -1 && S_ISREG(s.st_mode)) + close(fd); + } +#endif + sal_initGlobalTimer(); +#if HAVE_SYSLOG_H + const char *use_syslog = getenv("SAL_LOG_SYSLOG"); + sal_use_syslog = use_syslog != nullptr && !strcmp(use_syslog, "1"); + if (sal_use_syslog) + openlog("libreoffice", 0, LOG_USER); +#endif + + osl_setCommandArgs(argc, argv); +} + +void sal_detail_deinitialize() {} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/saltime.hxx b/sal/osl/unx/saltime.hxx new file mode 100644 index 000000000..03e8047e0 --- /dev/null +++ b/sal/osl/unx/saltime.hxx @@ -0,0 +1,29 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_SALTIME_HXX +#define INCLUDED_SAL_OSL_UNX_SALTIME_HXX + +#include + +void sal_initGlobalTimer(); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/secimpl.hxx b/sal/osl/unx/secimpl.hxx new file mode 100644 index 000000000..1577d6609 --- /dev/null +++ b/sal/osl/unx/secimpl.hxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_SECIMPL_HXX +#define INCLUDED_SAL_OSL_UNX_SECIMPL_HXX + +#include + +struct oslSecurityImpl +{ + struct passwd m_pPasswd; + char m_buffer[1]; /* should be a C99 flexible array member */ +}; + +bool osl_psz_getUserIdent(oslSecurity Security, char* pszIdent, sal_uInt32 nMax); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/security.cxx b/sal/osl/unx/security.cxx new file mode 100644 index 000000000..f541c9000 --- /dev/null +++ b/sal/osl/unx/security.cxx @@ -0,0 +1,537 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include + +#ifdef IOS +#include +#import +#include +#endif + +#include "system.hxx" + +#include +#include +#include +#include + +#include +#include + +#if defined LINUX || defined __sun +#include +#endif + +#if defined HAIKU +#include +#include +#endif + +#include "secimpl.hxx" + +#ifdef ANDROID +#define getpwuid_r(uid, pwd, buf, buflen, result) (*(result) = getpwuid(uid), (*(result) ? (memcpy (buf, *(result), sizeof (struct passwd)), 0) : errno)) +#endif + +static bool osl_psz_getHomeDir(oslSecurity Security, OString* pszDirectory); +static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory); + +static bool sysconf_SC_GETPW_R_SIZE_MAX(std::size_t * value) { +#if defined _SC_GETPW_R_SIZE_MAX + long m; + errno = 0; + m = sysconf(_SC_GETPW_R_SIZE_MAX); + if (m == -1) { + /* _SC_GETPW_R_SIZE_MAX has no limit; some platforms like certain + FreeBSD versions support sysconf(_SC_GETPW_R_SIZE_MAX) in a broken + way and always set EINVAL, so be resilient here: */ + return false; + } + SAL_WARN_IF( m < 0 || o3tl::make_unsigned(m) >= std::numeric_limits::max(), "sal.osl", + "m < 0 || (unsigned long) m >= std::numeric_limits::max()"); + *value = static_cast(m); + return true; +#else + /* some platforms like macOS 1.3 do not define _SC_GETPW_R_SIZE_MAX: */ + return false; +#endif +} + +static oslSecurityImpl * growSecurityImpl( + oslSecurityImpl * impl, std::size_t * bufSize) +{ + std::size_t n = 0; + oslSecurityImpl * p = nullptr; + if (impl == nullptr) { + if (!sysconf_SC_GETPW_R_SIZE_MAX(&n)) { + /* choose something sensible (the callers of growSecurityImpl will + detect it if the allocated buffer is too small: */ + n = 1024; + } + } else if (*bufSize <= std::numeric_limits::max() / 2) { + n = 2 * *bufSize; + } + if (n != 0) { + if (n <= std::numeric_limits::max() + - offsetof(oslSecurityImpl, m_buffer)) + { + *bufSize = n; + n += offsetof(oslSecurityImpl, m_buffer); + } else { + *bufSize = std::numeric_limits::max() + - offsetof(oslSecurityImpl, m_buffer); + n = std::numeric_limits::max(); + } + p = static_cast(realloc(impl, n)); + memset (p, 0, n); + } + if (p == nullptr) { + free(impl); + } + return p; +} + +static void deleteSecurityImpl(oslSecurityImpl * impl) { + free(impl); +} + +oslSecurity SAL_CALL osl_getCurrentSecurity() +{ + std::size_t n = 0; + oslSecurityImpl * p = nullptr; + for (;;) { + struct passwd * found; + p = growSecurityImpl(p, &n); + if (p == nullptr) { + return nullptr; + } +#if (defined(IOS) && defined(X86_64)) || defined(EMSCRIPTEN) + // getpwuid_r() does not work in the iOS simulator + (void) found; + char * buffer = p->m_buffer; + assert(n >= 100); + strcpy(buffer, "mobile"); + p->m_pPasswd.pw_name = buffer; + buffer += strlen(buffer) + 1; + strcpy(buffer, "*"); + p->m_pPasswd.pw_passwd = buffer; + buffer += strlen(buffer) + 1; + p->m_pPasswd.pw_uid = geteuid(); + p->m_pPasswd.pw_gid = getegid(); +#if !defined(EMSCRIPTEN) + p->m_pPasswd.pw_change = 0; + strcpy(buffer, ""); + p->m_pPasswd.pw_class = buffer; + buffer += strlen(buffer) + 1; + p->m_pPasswd.pw_expire = 0; +#endif + strcpy(buffer, "Mobile User"); + p->m_pPasswd.pw_gecos = buffer; + buffer += strlen(buffer) + 1; + strcpy(buffer, "/var/mobile"); // ??? + p->m_pPasswd.pw_dir = buffer; + buffer += strlen(buffer) + 1; + strcpy(buffer, ""); + p->m_pPasswd.pw_shell = buffer; + buffer += strlen(buffer) + 1; + return p; +#else + switch (getpwuid_r(getuid(), &p->m_pPasswd, p->m_buffer, n, &found)) { + case ERANGE: + break; + case 0: + if (found != nullptr) { + return p; + } + [[fallthrough]]; + default: + deleteSecurityImpl(p); + return nullptr; + } +#endif + } +} + +oslSecurityError SAL_CALL osl_loginUser( + SAL_UNUSED_PARAMETER rtl_uString *, + SAL_UNUSED_PARAMETER rtl_uString *, + SAL_UNUSED_PARAMETER oslSecurity * + ) +{ + return osl_Security_E_None; +} + +oslSecurityError SAL_CALL osl_loginUserOnFileServer( + SAL_UNUSED_PARAMETER rtl_uString *, + SAL_UNUSED_PARAMETER rtl_uString *, + SAL_UNUSED_PARAMETER rtl_uString *, + SAL_UNUSED_PARAMETER oslSecurity * + ) +{ + return osl_Security_E_UserUnknown; +} + +sal_Bool SAL_CALL osl_getUserIdent(oslSecurity Security, rtl_uString **ustrIdent) +{ + bool bRet = false; + char pszIdent[1024]; + + pszIdent[0] = '\0'; + + bRet = osl_psz_getUserIdent(Security,pszIdent,sizeof(pszIdent)); + + rtl_string2UString( ustrIdent, pszIdent, rtl_str_getLength( pszIdent ), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); + SAL_WARN_IF(*ustrIdent == nullptr, "sal.osl", "*ustrIdent == NULL"); + + return bRet; +} + +bool osl_psz_getUserIdent(oslSecurity Security, char *pszIdent, sal_uInt32 nMax) +{ + char buffer[32]; + sal_Int32 nChr; + + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl == nullptr) + return false; + + nChr = snprintf(buffer, sizeof(buffer), "%u", pSecImpl->m_pPasswd.pw_uid); + if ( nChr < 0 || sal::static_int_cast(nChr) >= sizeof(buffer) + || sal::static_int_cast(nChr) >= nMax ) + return false; /* leave *pszIdent unmodified in case of failure */ + + memcpy(pszIdent, buffer, nChr+1); + return true; +} + +sal_Bool SAL_CALL osl_getUserName(oslSecurity Security, rtl_uString **ustrName) +{ + bool bRet = false; + char * pszName; + sal_Int32 len; + + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl != nullptr && pSecImpl->m_pPasswd.pw_name != nullptr) { + pszName = pSecImpl->m_pPasswd.pw_name; + auto const n = std::strlen(pszName); + if (n <= o3tl::make_unsigned(std::numeric_limits::max())) { + len = n; + bRet = true; + } + } + + if (!bRet) { + pszName = nullptr; + len = 0; + } + + rtl_string2UString( ustrName, pszName, len, osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); + SAL_WARN_IF(*ustrName == nullptr, "sal.osl", "ustrName == NULL"); + + return bRet; +} + +sal_Bool SAL_CALL osl_getShortUserName(oslSecurity Security, rtl_uString **ustrName) +{ + return osl_getUserName(Security, ustrName); // No domain name on unix +} + +sal_Bool SAL_CALL osl_getHomeDir(oslSecurity Security, rtl_uString **pustrDirectory) +{ + bool bRet = false; + OString pszDirectory; + + bRet = osl_psz_getHomeDir(Security,&pszDirectory); + + if ( bRet ) + { + rtl_string2UString( pustrDirectory, pszDirectory.getStr(), pszDirectory.getLength(), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); + SAL_WARN_IF(*pustrDirectory == nullptr, "sal.osl", "*pustrDirectory == NULL"); + osl_getFileURLFromSystemPath( *pustrDirectory, pustrDirectory ); + } + + return bRet; +} + +static bool osl_psz_getHomeDir(oslSecurity Security, OString* pszDirectory) +{ + assert(pszDirectory != nullptr); + + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl == nullptr) + return false; + +#ifdef HAIKU + dev_t volume = dev_for_path("/boot"); + char homeDir[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH]; + status_t result = find_directory(B_USER_DIRECTORY, volume, false, homeDir, + sizeof(homeDir)); + if (result == B_OK) { + static_assert( + B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH <= std::numeric_limits::max()); + *pszDirectory = OString(homeDir, std::strlen(homeDir)); + return true; + } + return false; +#endif + +#ifdef ANDROID +{ + OUString pValue; + + if (rtl::Bootstrap::get("HOME", pValue)) + { + auto const pStrValue = OUStringToOString(pValue, RTL_TEXTENCODING_UTF8); + if (!pStrValue.isEmpty()) + { + *pszDirectory = pStrValue; + return true; + } + } +} +#endif + +#ifdef IOS + { + // Let's pretend the app-specific "Documents" directory is the home directory for now + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *userDirectory = [paths objectAtIndex:0]; + auto const len = [userDirectory length]; + if (len <= std::numeric_limits::max()) + { + *pszDirectory = OString([userDirectory UTF8String], len); + return sal_True; + } + } +#endif + + /* if current user, check also environment for HOME */ + if (getuid() == pSecImpl->m_pPasswd.pw_uid) + { + char *pStr = nullptr; +#ifdef __sun + char buffer[8192]; + + struct passwd pwd; + struct passwd *ppwd; + +#ifdef _POSIX_PTHREAD_SEMANTICS + if ( 0 != getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer), &ppwd ) ) + ppwd = NULL; +#else + ppwd = getpwuid_r(getuid(), &pwd, buffer, sizeof(buffer) ); +#endif + + if ( ppwd ) + pStr = ppwd->pw_dir; +#else + pStr = getenv("HOME"); +#endif + + if (pStr != nullptr && pStr[0] != '\0' && access(pStr, 0) == 0) + { + auto const len = std::strlen(pStr); + if (len > o3tl::make_unsigned(std::numeric_limits::max())) { + return false; + } + *pszDirectory = OString(pStr, len); + return true; + } + } + if (pSecImpl->m_pPasswd.pw_dir != nullptr) + { + auto const len = std::strlen(pSecImpl->m_pPasswd.pw_dir); + if (len > o3tl::make_unsigned(std::numeric_limits::max())) { + return false; + } + *pszDirectory = OString(pSecImpl->m_pPasswd.pw_dir, len); + } + else + return false; + + return true; +} + +sal_Bool SAL_CALL osl_getConfigDir(oslSecurity Security, rtl_uString **pustrDirectory) +{ + bool bRet = false; + OString pszDirectory; + + bRet = osl_psz_getConfigDir(Security,&pszDirectory); + + if ( bRet ) + { + rtl_string2UString( pustrDirectory, pszDirectory.getStr(), pszDirectory.getLength(), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); + SAL_WARN_IF(*pustrDirectory == nullptr, "sal.osl", "*pustrDirectory == NULL"); + osl_getFileURLFromSystemPath( *pustrDirectory, pustrDirectory ); + } + + return bRet; +} + +#if defined HAIKU + +static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory) +{ + assert(pszDirectory != nullptr); + (void) Security; + dev_t volume = dev_for_path("/boot"); + char configDir[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH]; + status_t result = find_directory(B_USER_SETTINGS_DIRECTORY, volume, false, + configDir, sizeof(configDir)); + if (result == B_OK) { + auto const len = strlen(configDir); + if (len <= sal_uInt32(std::numeric_limits::max())) { + *pszDirectory = OString(configDir, len); + return true; + } + } + return false; +} + +#elif !defined(MACOSX) && !defined(IOS) + +static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory) +{ + assert(pszDirectory != nullptr); + + char *pStr = getenv("XDG_CONFIG_HOME"); + + if (pStr == nullptr || pStr[0] == '\0' || access(pStr, 0) != 0) + { + // a default equal to $HOME/.config should be used. + OString home; + if (!osl_psz_getHomeDir(Security, &home)) + return false; + auto const config = OString(home + "/.config"); + + // try to create dir if not present + bool dirOK = true; + if (mkdir(config.getStr(), S_IRWXU) != 0) + { + int e = errno; + if (e != EEXIST) + { + SAL_WARN( + "sal.osl", + "mkdir(" << config << "): errno=" << e); + dirOK = false; + } + } + if (dirOK) + { + // check file type and permissions + struct stat st; + if (stat(config.getStr(), &st) != 0) + { + SAL_INFO("sal.osl","Could not stat $HOME/.config"); + dirOK = false; + } + else + { + if (!S_ISDIR(st.st_mode)) + { + SAL_INFO("sal.osl", "$HOME/.config is not a directory"); + dirOK = false; + } + if (!(st.st_mode & S_IRUSR && st.st_mode & S_IWUSR && st.st_mode & S_IXUSR)) + { + SAL_INFO("sal.osl", "$HOME/.config has bad permissions"); + dirOK = false; + } + } + } + + // if !dirOK, resort to HOME + if (dirOK) + home = config; + *pszDirectory = home; + } + else + { + auto const len = std::strlen(pStr); + if (len > o3tl::make_unsigned(std::numeric_limits::max())) { + return false; + } + *pszDirectory = OString(pStr, len); + } + + return true; +} + +#else + +/* + * FIXME: rewrite to use more flexible + * NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) + * as soon as we can bump the baseline to Tiger (for NSApplicationSupportDirectory) and have + * support for Objective-C in the build environment + */ + +static bool osl_psz_getConfigDir(oslSecurity Security, OString* pszDirectory) +{ + assert(pszDirectory != nullptr); + + OString home; + if( osl_psz_getHomeDir(Security, &home) ) + { + *pszDirectory = home + "/Library/Application Support"; /* Used on iOS, too */ + return true; + } + + return false; +} + +#endif + +sal_Bool SAL_CALL osl_isAdministrator(oslSecurity Security) +{ + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl == nullptr) + return false; + + if (pSecImpl->m_pPasswd.pw_uid != 0) + return false; + + return true; +} + +void SAL_CALL osl_freeSecurityHandle(oslSecurity Security) +{ + deleteSecurityImpl(static_cast(Security)); +} + +sal_Bool SAL_CALL osl_loadUserProfile(SAL_UNUSED_PARAMETER oslSecurity) +{ + return false; +} + +void SAL_CALL osl_unloadUserProfile(SAL_UNUSED_PARAMETER oslSecurity) {} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/signal.cxx b/sal/osl/unx/signal.cxx new file mode 100644 index 000000000..91cf59ff1 --- /dev/null +++ b/sal/osl/unx/signal.cxx @@ -0,0 +1,452 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include + +#include "soffice.hxx" +/* system headers */ +#include "system.hxx" + +#include "backtrace.h" + +#define MAX_STACK_FRAMES 256 + +#include +#include +#include +#include +#include +#include + +#include "file_path_helper.hxx" +#define ACT_IGNORE 1 +#define ACT_EXIT 2 +#define ACT_SYSTEM 3 +#define ACT_HIDE 4 +#define ACT_ABORT 5 + +#if defined HAVE_VALGRIND_HEADERS +#include +#endif + +namespace +{ +extern "C" using Handler1 = void (*)(int); +extern "C" using Handler2 = void (*)(int, siginfo_t *, void *); +struct SignalAction +{ + int Signal; + int Action; + Handler1 Handler; + bool siginfo; // Handler's type is Handler2 +} Signals[] = +{ + { SIGHUP, ACT_HIDE, SIG_DFL, false }, /* hangup */ + { SIGINT, ACT_EXIT, SIG_DFL, false }, /* interrupt (rubout) */ + { SIGQUIT, ACT_EXIT, SIG_DFL, false }, /* quit (ASCII FS) */ + { SIGILL, ACT_SYSTEM, SIG_DFL, false }, /* illegal instruction (not reset when caught) */ +/* changed from ACT_ABOUT to ACT_SYSTEM to try and get collector to run*/ + { SIGTRAP, ACT_ABORT, SIG_DFL, false }, /* trace trap (not reset when caught) */ +#if ( SIGIOT != SIGABRT ) + { SIGIOT, ACT_ABORT, SIG_DFL, false }, /* IOT instruction */ +#endif +#if defined(FORCE_DEFAULT_SIGNAL) + { SIGABRT, ACT_SYSTEM, SIG_DFL, false }, /* used by abort, replace SIGIOT in the future */ +#else + { SIGABRT, ACT_ABORT, SIG_DFL, false }, /* used by abort, replace SIGIOT in the future */ +#endif +#ifdef SIGEMT + { SIGEMT, ACT_SYSTEM, SIG_DFL, false }, /* EMT instruction */ +/* changed from ACT_ABORT to ACT_SYSTEM to remove handler*/ +/* SIGEMT may also be used by the profiler - so it is probably not a good +plan to have the new handler use this signal*/ +#endif + { SIGFPE, ACT_ABORT, SIG_DFL, false }, /* floating point exception */ + { SIGKILL, ACT_SYSTEM, SIG_DFL, false }, /* kill (cannot be caught or ignored) */ + { SIGBUS, ACT_ABORT, SIG_DFL, false }, /* bus error */ +#if defined(FORCE_DEFAULT_SIGNAL) + { SIGSEGV, ACT_SYSTEM, SIG_DFL, false }, /* segmentation violation */ +#else + { SIGSEGV, ACT_ABORT, SIG_DFL, false }, /* segmentation violation */ +#endif +#ifdef SIGSYS + { SIGSYS, ACT_ABORT, SIG_DFL, false }, /* bad argument to system call */ +#endif + { SIGPIPE, ACT_HIDE, SIG_DFL, false }, /* write on a pipe with no one to read it */ +#if defined(FORCE_DEFAULT_SIGNAL) + { SIGALRM, ACT_SYSTEM, SIG_DFL, false }, /* alarm clock */ +#else + { SIGALRM, ACT_EXIT, SIG_DFL, false }, /* alarm clock */ +#endif + { SIGTERM, ACT_EXIT, SIG_DFL, false }, /* software termination signal from kill */ + { SIGUSR1, ACT_SYSTEM, SIG_DFL, false }, /* user defined signal 1 */ + { SIGUSR2, ACT_SYSTEM, SIG_DFL, false }, /* user defined signal 2 */ + { SIGCHLD, ACT_SYSTEM, SIG_DFL, false }, /* child status change */ +#ifdef SIGPWR + { SIGPWR, ACT_IGNORE, SIG_DFL, false }, /* power-fail restart */ +#endif + { SIGWINCH, ACT_IGNORE, SIG_DFL, false }, /* window size change */ + { SIGURG, ACT_EXIT, SIG_DFL, false }, /* urgent socket condition */ +#ifdef SIGPOLL + { SIGPOLL, ACT_EXIT, SIG_DFL, false }, /* pollable event occurred */ +#endif + { SIGSTOP, ACT_SYSTEM, SIG_DFL, false }, /* stop (cannot be caught or ignored) */ + { SIGTSTP, ACT_SYSTEM, SIG_DFL, false }, /* user stop requested from tty */ + { SIGCONT, ACT_SYSTEM, SIG_DFL, false }, /* stopped process has been continued */ + { SIGTTIN, ACT_SYSTEM, SIG_DFL, false }, /* background tty read attempted */ + { SIGTTOU, ACT_SYSTEM, SIG_DFL, false }, /* background tty write attempted */ + { SIGVTALRM, ACT_EXIT, SIG_DFL, false }, /* virtual timer expired */ + { SIGPROF, ACT_SYSTEM, SIG_DFL, false }, /* profiling timer expired */ +/*Change from ACT_EXIT to ACT_SYSTEM for SIGPROF is so that profiling signals do +not get taken by the new handler - the new handler does not pass on context +information which causes 'collect' to crash. This is a way of avoiding +what looks like a bug in the new handler*/ + { SIGXCPU, ACT_ABORT, SIG_DFL, false }, /* exceeded cpu limit */ + { SIGXFSZ, ACT_ABORT, SIG_DFL, false } /* exceeded file size limit */ +}; +const int NoSignals = SAL_N_ELEMENTS(Signals); + +bool bSetSEGVHandler = false; +bool bSetWINCHHandler = false; +bool bSetILLHandler = false; + +void signalHandlerFunction(int, siginfo_t *, void *); + +#if HAVE_FEATURE_BREAKPAD +bool is_unset_signal(int signal) +{ +#ifdef DBG_UTIL + return (!bSetSEGVHandler && signal == SIGSEGV) || + (!bSetWINCHHandler && signal == SIGWINCH) || + (!bSetILLHandler && signal == SIGILL); +#else + (void) signal; + return false; +#endif +} +#endif + +} + +bool onInitSignal() +{ + if (sal::detail::isSoffice()) + { + // WORKAROUND FOR SEGV HANDLER CONFLICT + // + // the java jit needs SIGSEGV for proper work + // and we need SIGSEGV for the office crashguard + // + // TEMPORARY SOLUTION: + // the office sets the signal handler during startup + // java can than overwrite it, if needed + bSetSEGVHandler = true; + + // WORKAROUND FOR WINCH HANDLER (SEE ABOVE) + bSetWINCHHandler = true; + + // WORKAROUND FOR ILLEGAL INSTRUCTION HANDLER (SEE ABOVE) + bSetILLHandler = true; + } + +#ifdef DBG_UTIL + bSetSEGVHandler = bSetWINCHHandler = bSetILLHandler = false; +#endif + + struct sigaction act; + act.sa_sigaction = signalHandlerFunction; + act.sa_flags = SA_RESTART | SA_SIGINFO; + + sigfillset(&(act.sa_mask)); + + /* Initialize the rest of the signals */ + for (SignalAction & rSignal : Signals) + { +#if defined HAVE_VALGRIND_HEADERS + if (rSignal.Signal == SIGUSR2 && RUNNING_ON_VALGRIND) + rSignal.Action = ACT_IGNORE; +#endif + + /* hack: stomcatd is attaching JavaVM which does not work with an sigaction(SEGV) */ + if ((bSetSEGVHandler || rSignal.Signal != SIGSEGV) + && (bSetWINCHHandler || rSignal.Signal != SIGWINCH) + && (bSetILLHandler || rSignal.Signal != SIGILL)) + { + if (rSignal.Action != ACT_SYSTEM) + { + if (rSignal.Action == ACT_HIDE) + { + struct sigaction ign; + + ign.sa_handler = SIG_IGN; + ign.sa_flags = 0; + sigemptyset(&ign.sa_mask); + + struct sigaction oact; + if (sigaction(rSignal.Signal, &ign, &oact) == 0) { + rSignal.siginfo = (oact.sa_flags & SA_SIGINFO) != 0; + if (rSignal.siginfo) { + rSignal.Handler = reinterpret_cast( + oact.sa_sigaction); + } else { + rSignal.Handler = oact.sa_handler; + } + } else { + rSignal.Handler = SIG_DFL; + rSignal.siginfo = false; + } + } + else + { + struct sigaction oact; + if (sigaction(rSignal.Signal, &act, &oact) == 0) { + rSignal.siginfo = (oact.sa_flags & SA_SIGINFO) != 0; + if (rSignal.siginfo) { + rSignal.Handler = reinterpret_cast( + oact.sa_sigaction); + } else { + rSignal.Handler = oact.sa_handler; + } + } else { + rSignal.Handler = SIG_DFL; + rSignal.siginfo = false; + } + } + } + } + } + + /* Clear signal mask inherited from parent process (on macOS, upon a + crash soffice re-execs itself from within the signal handler, so the + second soffice would have the guilty signal blocked and would freeze upon + encountering a similar crash again): */ + sigset_t unset; + if (sigemptyset(&unset) < 0 || + pthread_sigmask(SIG_SETMASK, &unset, nullptr) < 0) + { + SAL_WARN("sal.osl", "sigemptyset or pthread_sigmask failed"); + } + + return true; +} + +bool onDeInitSignal() +{ + struct sigaction act; + + sigemptyset(&(act.sa_mask)); + + /* Initialize the rest of the signals */ + for (int i = NoSignals - 1; i >= 0; i--) + if (Signals[i].Action != ACT_SYSTEM + && ((bSetSEGVHandler || Signals[i].Signal != SIGSEGV) + && (bSetWINCHHandler || Signals[i].Signal != SIGWINCH) + && (bSetILLHandler || Signals[i].Signal != SIGILL))) + { + if (Signals[i].siginfo) { + act.sa_sigaction = reinterpret_cast( + Signals[i].Handler); + act.sa_flags = SA_SIGINFO; + } else { + act.sa_handler = Signals[i].Handler; + act.sa_flags = 0; + } + + sigaction(Signals[i].Signal, &act, nullptr); + } + + return false; +} + +namespace +{ +void printStack(int sig) +{ + void *buffer[MAX_STACK_FRAMES]; + int size = backtrace( buffer, SAL_N_ELEMENTS(buffer) ); + + fprintf( stderr, "\n\nFatal exception: Signal %d\n", sig ); + +#if ! HAVE_FEATURE_BACKTRACE && defined( MACOSX ) && !defined( INTEL ) + fprintf( stderr, "Please turn on Enable Crash Reporting and\nAutomatic Display of Crashlogs in the Console application\n" ); +#endif + + if ( size > 0 ) + { + fputs( "Stack:\n", stderr ); + backtrace_symbols_fd( buffer, size, fileno(stderr) ); + } +} + +void callSystemHandler(int signal, siginfo_t * info, void * context) +{ + int i; + + for (i = 0; i < NoSignals; i++) + { + if (Signals[i].Signal == signal) + break; + } + + if (i >= NoSignals) + return; + + if ((Signals[i].Handler == SIG_DFL) || + (Signals[i].Handler == SIG_IGN) || + (Signals[i].Handler == SIG_ERR)) + { + switch (Signals[i].Action) + { + case ACT_EXIT: /* terminate */ + /* prevent dumping core on exit() */ + _exit(255); + break; + + case ACT_ABORT: /* terminate with core dump */ + struct sigaction act; + act.sa_handler = SIG_DFL; + act.sa_flags = 0; + sigemptyset(&(act.sa_mask)); + sigaction(SIGABRT, &act, nullptr); + printStack( signal ); + abort(); + break; + + case ACT_IGNORE: /* ignore */ + break; + + default: /* should never happen */ + OSL_ASSERT(false); + } + } + else if (Signals[i].siginfo) { + (*reinterpret_cast(Signals[i].Handler))( + signal, info, context); + } else { + (*Signals[i].Handler)(signal); + } +} + +#if defined HAVE_VALGRIND_HEADERS +void DUMPCURRENTALLOCS() +{ + VALGRIND_PRINTF( "=== start memcheck dump of active allocations ===\n" ); + +#if __GNUC__ && !defined(__clang__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#endif + + VALGRIND_DO_LEAK_CHECK; + +#if __GNUC__ && !defined(__clang__) +# pragma GCC diagnostic pop +#endif + + VALGRIND_PRINTF( "=== end memcheck dump of active allocations ===\n" ); +} +#endif + +void signalHandlerFunction(int signal, siginfo_t * info, void * context) +{ + oslSignalInfo Info; + + Info.UserSignal = signal; + Info.UserData = nullptr; + + switch (signal) + { + case SIGBUS: + case SIGILL: + case SIGSEGV: + case SIGIOT: +#if ( SIGIOT != SIGABRT ) + case SIGABRT: +#endif + Info.Signal = osl_Signal_AccessViolation; + break; + + case -1: + Info.Signal = osl_Signal_IntegerDivideByZero; + break; + + case SIGFPE: + Info.Signal = osl_Signal_FloatDivideByZero; + break; + + case SIGINT: + case SIGTERM: + case SIGQUIT: + Info.Signal = osl_Signal_Terminate; + break; + +#if defined HAVE_VALGRIND_HEADERS + case SIGUSR2: + if (RUNNING_ON_VALGRIND) + DUMPCURRENTALLOCS(); + Info.Signal = osl_Signal_System; + break; +#endif + + default: + Info.Signal = osl_Signal_System; + break; + } + +#if HAVE_FEATURE_BREAKPAD + if ((Info.Signal == osl_Signal_AccessViolation || + Info.Signal == osl_Signal_IntegerDivideByZero || + Info.Signal == osl_Signal_FloatDivideByZero) && !is_unset_signal(signal)) + { + callSystemHandler(signal, info, context); + } +#endif + + switch (callSignalHandler(&Info)) + { + case osl_Signal_ActCallNextHdl: + callSystemHandler(signal, info, context); + break; + + case osl_Signal_ActAbortApp: + struct sigaction act; + act.sa_handler = SIG_DFL; + act.sa_flags = 0; + sigemptyset(&(act.sa_mask)); + sigaction(SIGABRT, &act, nullptr); + printStack( signal ); + abort(); + break; + + case osl_Signal_ActKillApp: + /* prevent dumping core on exit() */ + _exit(255); + break; + default: + break; + } +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/socket.cxx b/sal/osl/unx/socket.cxx new file mode 100644 index 000000000..535c1727c --- /dev/null +++ b/sal/osl/unx/socket.cxx @@ -0,0 +1,2046 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "system.hxx" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "sockimpl.hxx" +#include "unixerrnostring.hxx" +#include + +#include + +/* defines for shutdown */ +#define SD_RECEIVE 0 +#define SD_SEND 1 +#define SD_BOTH 2 + +/* + oslSocketAddr is a pointer to a Berkeley struct sockaddr. + I refrained from using sockaddr_in because of possible further + extensions of this socket-interface (IP-NG?). + The intention was to hide all Berkeley data-structures from + direct access past the osl-interface. + + The current implementation is internet (IP) centered. All + the constructor-functions (osl_create...) take parameters + that will probably make sense only in the IP-environment + (e.g. because of using the dotted-address-format). + + If the interface will be extended to host other protocol- + families, I expect no externally visible changes in the + existing functions. You'll probably need only new + constructor-functions who take the different address + formats into consideration (maybe a long dotted address + or whatever). +*/ + +/* _Note_ that I rely on the fact that oslSocketAddr and struct sockaddr */ +/* are the same! I don't like it very much but see no other easy way to */ +/* conceal the struct sockaddr from the eyes of the user. */ + +#define OSL_INVALID_SOCKET -1 +#define OSL_SOCKET_ERROR -1 + +/* Buffer size for getnameinfo */ +#define MAX_HOSTBUFFER_SIZE 2048 + +const unsigned long FamilyMap[]= { + AF_INET, /* osl_Socket_FamilyInet */ + AF_IPX, /* osl_Socket_FamilyIpx */ + 0 /* osl_Socket_FamilyInvalid */ +}; + +static oslAddrFamily osl_AddrFamilyFromNative(sal_uInt32 nativeType) +{ + oslAddrFamily i= oslAddrFamily(0); + + while(i != osl_Socket_FamilyInvalid) + { + if(FamilyMap[i] == nativeType) + return i; + i = static_cast( i + 1 ); + } + + return i; +} + +#define FAMILY_FROM_NATIVE(y) osl_AddrFamilyFromNative(y) +#define FAMILY_TO_NATIVE(x) static_cast(FamilyMap[x]) + +const sal_uInt32 ProtocolMap[]= { + 0, /* osl_Socket_ProtocolIp */ + NSPROTO_IPX, /* osl_Socket_ProtocolIpx */ + NSPROTO_SPX, /* osl_Socket_ProtocolSpx */ + NSPROTO_SPXII, /* osl_Socket_ProtocolSpxII */ + 0 /* osl_Socket_ProtocolInvalid */ +}; + +#define PROTOCOL_TO_NATIVE(x) ProtocolMap[x] + +const sal_uInt32 TypeMap[]= { + SOCK_STREAM, /* osl_Socket_TypeStream */ + SOCK_DGRAM, /* osl_Socket_TypeDgram */ + SOCK_RAW, /* osl_Socket_TypeRaw */ + SOCK_RDM, /* osl_Socket_TypeRdm */ + SOCK_SEQPACKET, /* osl_Socket_TypeSeqPacket */ + 0 /* osl_Socket_TypeInvalid */ +}; + +static oslSocketType osl_SocketTypeFromNative(sal_uInt32 nativeType) +{ + oslSocketType i= oslSocketType(0); + + while(i != osl_Socket_TypeInvalid) + { + if(TypeMap[i] == nativeType) + return i; + i = static_cast(i + 1); + } + + return i; +} + +#define TYPE_TO_NATIVE(x) TypeMap[x] +#define TYPE_FROM_NATIVE(y) osl_SocketTypeFromNative(y) + +const sal_uInt32 OptionMap[]= { + SO_DEBUG, /* osl_Socket_OptionDebug */ + SO_ACCEPTCONN, /* osl_Socket_OptionAcceptConn */ + SO_REUSEADDR, /* osl_Socket_OptionReuseAddr */ + SO_KEEPALIVE, /* osl_Socket_OptionKeepAlive */ + SO_DONTROUTE, /* osl_Socket_OptionDontRoute */ + SO_BROADCAST, /* osl_Socket_OptionBroadcast */ + SO_USELOOPBACK, /* osl_Socket_OptionUseLoopback */ + SO_LINGER, /* osl_Socket_OptionLinger */ + SO_OOBINLINE, /* osl_Socket_OptionOOBinLine */ + SO_SNDBUF, /* osl_Socket_OptionSndBuf */ + SO_RCVBUF, /* osl_Socket_OptionRcvBuf */ + SO_SNDLOWAT, /* osl_Socket_OptionSndLowat */ + SO_RCVLOWAT, /* osl_Socket_OptionRcvLowat */ + SO_SNDTIMEO, /* osl_Socket_OptionSndTimeo */ + SO_RCVTIMEO, /* osl_Socket_OptionRcvTimeo */ + SO_ERROR, /* osl_Socket_OptionError */ + SO_TYPE, /* osl_Socket_OptionType */ + TCP_NODELAY, /* osl_Socket_OptionTcpNoDelay */ + 0 /* osl_Socket_OptionInvalid */ +}; + +#define OPTION_TO_NATIVE(x) OptionMap[x] + +const sal_uInt32 OptionLevelMap[]= { + SOL_SOCKET, /* osl_Socket_LevelSocket */ + IPPROTO_TCP, /* osl_Socket_LevelTcp */ + 0 /* osl_Socket_LevelInvalid */ +}; + +#define OPTION_LEVEL_TO_NATIVE(x) OptionLevelMap[x] + +const sal_uInt32 SocketMsgFlagMap[]= { + 0, /* osl_Socket_MsgNormal */ + MSG_OOB, /* osl_Socket_MsgOOB */ + MSG_PEEK, /* osl_Socket_MsgPeek */ + MSG_DONTROUTE, /* osl_Socket_MsgDontRoute */ + MSG_MAXIOVLEN, /* osl_Socket_MsgMaxIOVLen */ + 0 /* osl_Socket_MsgInvalid */ +}; + +#define MSG_FLAG_TO_NATIVE(x) SocketMsgFlagMap[x] + +const sal_uInt32 SocketDirection[]= { + SD_RECEIVE, /* osl_Socket_DirRead */ + SD_SEND, /* osl_Socket_DirWrite */ + SD_BOTH, /* osl_Socket_DirReadWrite */ + 0 /* osl_Socket_DirInvalid */ +}; + +#define DIRECTION_TO_NATIVE(x) SocketDirection[x] + +const struct +{ + int errcode; + oslSocketError error; +} SocketError[]= { + { 0, osl_Socket_E_None }, /* no error */ + { ENOTSOCK, osl_Socket_E_NotSocket }, /* Socket operation on non-socket */ + { EDESTADDRREQ, osl_Socket_E_DestAddrReq }, /* Destination address required */ + { EMSGSIZE, osl_Socket_E_MsgSize }, /* Message too long */ + { EPROTOTYPE, osl_Socket_E_Prototype }, /* Protocol wrong type for socket */ + { ENOPROTOOPT, osl_Socket_E_NoProtocol }, /* Protocol not available */ + { EPROTONOSUPPORT, osl_Socket_E_ProtocolNoSupport }, /* Protocol not supported */ +#ifdef ESOCKTNOSUPPORT + { ESOCKTNOSUPPORT, osl_Socket_E_TypeNoSupport }, /* Socket type not supported */ +#endif + { EOPNOTSUPP, osl_Socket_E_OpNotSupport }, /* Operation not supported on socket */ + { EPFNOSUPPORT, osl_Socket_E_PfNoSupport }, /* Protocol family not supported */ + { EAFNOSUPPORT, osl_Socket_E_AfNoSupport }, /* Address family not supported by + protocol family */ + { EADDRINUSE, osl_Socket_E_AddrInUse }, /* Address already in use */ + { EADDRNOTAVAIL, osl_Socket_E_AddrNotAvail }, /* Can't assign requested address */ + { ENETDOWN, osl_Socket_E_NetDown }, /* Network is down */ + { ENETUNREACH, osl_Socket_E_NetUnreachable }, /* Network is unreachable */ + { ENETRESET, osl_Socket_E_NetReset }, /* Network dropped connection because + of reset */ + { ECONNABORTED, osl_Socket_E_ConnAborted }, /* Software caused connection abort */ + { ECONNRESET, osl_Socket_E_ConnReset }, /* Connection reset by peer */ + { ENOBUFS, osl_Socket_E_NoBufferSpace }, /* No buffer space available */ + { EISCONN, osl_Socket_E_IsConnected }, /* Socket is already connected */ + { ENOTCONN, osl_Socket_E_NotConnected }, /* Socket is not connected */ + { ESHUTDOWN, osl_Socket_E_Shutdown }, /* Can't send after socket shutdown */ +#ifdef ETOOMANYREFS + { ETOOMANYREFS, osl_Socket_E_TooManyRefs }, /* Too many references: can't splice */ +#endif + { ETIMEDOUT, osl_Socket_E_TimedOut }, /* Connection timed out */ + { ECONNREFUSED, osl_Socket_E_ConnRefused }, /* Connection refused */ + { EHOSTDOWN, osl_Socket_E_HostDown }, /* Host is down */ + { EHOSTUNREACH, osl_Socket_E_HostUnreachable }, /* No route to host */ + { EWOULDBLOCK, osl_Socket_E_WouldBlock }, /* call would block on non-blocking socket */ + { EALREADY, osl_Socket_E_Already }, /* operation already in progress */ + { EINPROGRESS, osl_Socket_E_InProgress }, /* operation now in progress */ + { EAGAIN, osl_Socket_E_WouldBlock }, /* same as EWOULDBLOCK */ + { -1, osl_Socket_E_InvalidError } +}; + +static oslSocketError osl_SocketErrorFromNative(int nativeType) +{ + int i = 0; + + while ((SocketError[i].error != osl_Socket_E_InvalidError) && + (SocketError[i].errcode != nativeType)) i++; + + return SocketError[i].error; +} + +#define ERROR_FROM_NATIVE(y) osl_SocketErrorFromNative(y) + +static oslSocketAddr osl_psz_createInetSocketAddr ( + const char* pszDottedAddr, sal_Int32 Port); + +static oslHostAddr osl_psz_createHostAddr ( + const char *pszHostname, const oslSocketAddr Addr); + +static oslHostAddr osl_psz_createHostAddrByName ( + const char *pszHostname); + +static const char* osl_psz_getHostnameOfHostAddr ( + const oslHostAddr Addr); + +static oslSocketAddr osl_psz_resolveHostname ( + const char* pszHostname); + +static sal_Int32 osl_psz_getServicePort ( + const char* pszServicename, const char* pszProtocol); + +static void osl_psz_getLastSocketErrorDescription ( + oslSocket Socket, char* pBuffer, sal_uInt32 BufferSize); + +namespace { + +int convertToMs(TimeValue const * value) { + return value->Seconds * 1000 + value->Nanosec / 1000000; //TODO: overflow +} + +} + +static oslSocket createSocketImpl() +{ + oslSocket pSocket; + + pSocket = static_cast(calloc(1, sizeof(struct oslSocketImpl))); + + pSocket->m_Socket = OSL_INVALID_SOCKET; + pSocket->m_nLastError = 0; + pSocket->m_nRefCount = 1; + +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pSocket->m_bIsAccepting = false; +#endif + + return pSocket; +} + +static void destroySocketImpl(oslSocket Socket) +{ + if ( Socket != nullptr) + free(Socket); +} + +static oslSocketAddr createSocketAddr() +{ + oslSocketAddr pAddr = static_cast(rtl_allocateZeroMemory( sizeof( struct oslSocketAddrImpl ))); + return pAddr; +} + +static oslSocketAddr createSocketAddrWithFamily( + oslAddrFamily family, sal_Int32 port, sal_uInt32 nAddr ) +{ + oslSocketAddr pAddr; + + SAL_WARN_IF( family != osl_Socket_FamilyInet, "sal.osl", "creating socket for non-IP address family" ); + + pAddr = createSocketAddr(); + switch( family ) + { + case osl_Socket_FamilyInet: + { + struct sockaddr_in* pInetAddr= reinterpret_cast(&pAddr->m_sockaddr); + + pInetAddr->sin_family = FAMILY_TO_NATIVE(osl_Socket_FamilyInet); + pInetAddr->sin_addr.s_addr = nAddr; + pInetAddr->sin_port = static_cast(port&0xffff); + break; + } + default: + pAddr->m_sockaddr.sa_family = FAMILY_TO_NATIVE(family); + } + return pAddr; +} + +static oslSocketAddr createSocketAddrFromSystem( struct sockaddr *pSystemSockAddr ) +{ + oslSocketAddr pAddr = createSocketAddr(); + memcpy( &(pAddr->m_sockaddr), pSystemSockAddr, sizeof( struct sockaddr ) ); + return pAddr; +} + +static void destroySocketAddr( oslSocketAddr addr ) +{ + free( addr ); +} + +oslSocketAddr SAL_CALL osl_createEmptySocketAddr(oslAddrFamily Family) +{ + oslSocketAddr pAddr = nullptr; + + /* is it an internet-Addr? */ + if (Family == osl_Socket_FamilyInet) + { + pAddr = createSocketAddrWithFamily(Family, 0 , htonl(INADDR_ANY) ); + } + else + { + pAddr = createSocketAddrWithFamily( Family , 0 , 0 ); + } + + return pAddr; +} + +oslSocketAddr SAL_CALL osl_copySocketAddr(oslSocketAddr Addr) +{ + oslSocketAddr pCopy = nullptr; + if (Addr) + { + pCopy = createSocketAddr(); + + if (pCopy) + memcpy(&(pCopy->m_sockaddr),&(Addr->m_sockaddr), sizeof(struct sockaddr)); + } + return pCopy; +} + +sal_Bool SAL_CALL osl_isEqualSocketAddr ( + oslSocketAddr Addr1, + oslSocketAddr Addr2) +{ + struct sockaddr* pAddr1 = nullptr; + struct sockaddr* pAddr2 = nullptr; + + assert(Addr1 && Addr2); + pAddr1 = &(Addr1->m_sockaddr); + pAddr2 = &(Addr2->m_sockaddr); + + if (pAddr1 == pAddr2) + { + return true; + } + + if (pAddr1->sa_family == pAddr2->sa_family) + { + switch (pAddr1->sa_family) + { + case AF_INET: + { + struct sockaddr_in* pInetAddr1= reinterpret_cast(pAddr1); + struct sockaddr_in* pInetAddr2= reinterpret_cast(pAddr2); + + if ((pInetAddr1->sin_family == pInetAddr2->sin_family) && + (pInetAddr1->sin_addr.s_addr == pInetAddr2->sin_addr.s_addr) && + (pInetAddr1->sin_port == pInetAddr2->sin_port)) + return true; + [[fallthrough]]; + } + + default: + { + return (memcmp(pAddr1, pAddr2, sizeof(struct sockaddr)) == 0); + } + } + } + + return false; +} + +oslSocketAddr SAL_CALL osl_createInetBroadcastAddr ( + rtl_uString *strDottedAddr, + sal_Int32 Port) +{ + sal_uInt32 nAddr = OSL_INADDR_NONE; + oslSocketAddr pAddr; + + if (strDottedAddr && strDottedAddr->length) + { + /* Dotted host address for limited broadcast */ + rtl_String *pDottedAddr = nullptr; + + rtl_uString2String ( + &pDottedAddr, strDottedAddr->buffer, strDottedAddr->length, + RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS); + + in_addr buf; + if (inet_pton (AF_INET, pDottedAddr->buffer, &buf) == 1) { + nAddr = buf.s_addr; + } + rtl_string_release (pDottedAddr); + } + + if (nAddr != OSL_INADDR_NONE) + { + /* Limited broadcast */ + nAddr = ntohl(nAddr); + if (IN_CLASSA(nAddr)) + { + nAddr &= IN_CLASSA_NET; + nAddr |= IN_CLASSA_HOST; + } + else if (IN_CLASSB(nAddr)) + { + nAddr &= IN_CLASSB_NET; + nAddr |= IN_CLASSB_HOST; + } + else if (IN_CLASSC(nAddr)) + { + nAddr &= IN_CLASSC_NET; + nAddr |= IN_CLASSC_HOST; + } + else + { + /* No broadcast in class D */ + return nullptr; + } + nAddr = htonl(nAddr); + } + + pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons(Port), nAddr ); + return pAddr; +} + +oslSocketAddr SAL_CALL osl_createInetSocketAddr ( + rtl_uString *ustrDottedAddr, + sal_Int32 Port) +{ + rtl_String* strDottedAddr=nullptr; + oslSocketAddr Addr; + char* pszDottedAddr=nullptr; + + if ( ustrDottedAddr != nullptr ) + { + rtl_uString2String( &strDottedAddr, + rtl_uString_getStr(ustrDottedAddr), + rtl_uString_getLength(ustrDottedAddr), + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS); + pszDottedAddr = rtl_string_getStr(strDottedAddr); + } + + Addr = pszDottedAddr ? osl_psz_createInetSocketAddr(pszDottedAddr, Port) : nullptr; + + if ( strDottedAddr != nullptr ) + { + rtl_string_release(strDottedAddr); + } + + return Addr; +} + +oslSocketAddr osl_psz_createInetSocketAddr ( + const char* pszDottedAddr, + sal_Int32 Port) +{ + oslSocketAddr pAddr = nullptr; + in_addr buf; + if(inet_pton(AF_INET, pszDottedAddr, &buf) == 1) + { + /* valid dotted addr */ + pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons(Port) , buf.s_addr ); + } + return pAddr; +} + +oslSocketResult SAL_CALL osl_setAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence *pByteSeq ) +{ + oslSocketResult res = osl_Socket_Error; + + SAL_WARN_IF( !pAddr, "sal.osl", "setting address of undefined socket address" ); + SAL_WARN_IF( !pByteSeq, "sal.osl", "setting undefined address for socket address" ); + + if( pAddr && pByteSeq ) + { + struct sockaddr_in * pSystemInetAddr; + + assert( pAddr->m_sockaddr.sa_family == FAMILY_TO_NATIVE( osl_Socket_FamilyInet ) ); + assert( pByteSeq->nElements == 4 ); + + pSystemInetAddr = reinterpret_cast(&pAddr->m_sockaddr); + memcpy( &(pSystemInetAddr->sin_addr) , pByteSeq->elements , 4 ); + res = osl_Socket_Ok; + } + return res; +} + +oslSocketResult SAL_CALL osl_getAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence **ppByteSeq ) +{ + oslSocketResult res = osl_Socket_Error; + + SAL_WARN_IF( !pAddr, "sal.osl", "getting address of undefined socket address" ); + SAL_WARN_IF( !ppByteSeq, "sal.osl", "getting address to undefined address pointer" ); + + if( pAddr && ppByteSeq ) + { + struct sockaddr_in * pSystemInetAddr = reinterpret_cast(&pAddr->m_sockaddr); + rtl_byte_sequence_constructFromArray( ppByteSeq, reinterpret_cast(&pSystemInetAddr->sin_addr), 4); + res = osl_Socket_Ok; + } + return res; +} + +/** try to figure out a full-qualified hostname, by adding the current domain + as given by the domainname program to the given hostname. + This function MUST NOT call gethostbyname since pHostName already points + to data returned by gethostname and would be garbled: use gethostname_r + instead! + */ + +namespace { + +struct oslAddrInfo +{ + addrinfo* pAddrInfoList = nullptr; + int nError; + + oslAddrInfo(const char* name, bool isInet = false) + { + addrinfo aHints; + memset(&aHints, 0, sizeof(addrinfo)); + if (isInet) + aHints.ai_family = AF_INET; + aHints.ai_flags = AI_CANONNAME; + + nError = getaddrinfo(name, nullptr, &aHints, &pAddrInfoList); + } + + ~oslAddrInfo() + { + if (nError == 0) + freeaddrinfo(pAddrInfoList); + } + + const char* getHostName() const + { + assert(pAddrInfoList); + return pAddrInfoList->ai_canonname; + } +}; + +} +static bool isFullQualifiedDomainName (const char *pHostName) +{ + /* a FQDN (aka 'hostname.domain.top_level_domain' ) + * is a name which contains a dot '.' in it ( would + * match as well for 'hostname.' but is good enough + * for now )*/ + return strchr( pHostName, int('.') ) != nullptr; +} + +static char* getFullQualifiedDomainName (const char *pHostName) +{ + char *pFullQualifiedName = nullptr; + + if (isFullQualifiedDomainName(pHostName)) + { + pFullQualifiedName = strdup(pHostName); + } + else + { + oslAddrInfo aAddrInfo(pHostName); + if (aAddrInfo.nError == 0) + pFullQualifiedName = strdup(aAddrInfo.getHostName()); + } + + return pFullQualifiedName; +} + +struct oslHostAddrImpl +{ + char *pHostName; + oslSocketAddr pSockAddr; +}; + +static oslHostAddr addrinfoToHostAddr (const addrinfo* ai) +{ + if (!ai || !ai->ai_canonname || !ai->ai_addr) + return nullptr; + + char* cn = getFullQualifiedDomainName(ai->ai_canonname); + SAL_WARN_IF( !cn, "sal.osl", "couldn't get full qualified domain name" ); + if (cn == nullptr) + return nullptr; + + oslSocketAddr pSockAddr = createSocketAddr(); + SAL_WARN_IF( !pSockAddr, "sal.osl", "insufficient memory" ); + if (pSockAddr == nullptr) + { + free(cn); + return nullptr; + } + + if (ai->ai_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + { + memcpy ( + &(pSockAddr->m_sockaddr), + ai->ai_addr, + ai->ai_addrlen); + } + else + { + /* unknown address family */ + /* future extensions for new families might be implemented here */ + + SAL_WARN( "sal.osl", "unknown address family" ); + + destroySocketAddr( pSockAddr ); + free (cn); + return nullptr; + } + + oslHostAddr pAddr = static_cast(malloc(sizeof(struct oslHostAddrImpl))); + SAL_WARN_IF( !pAddr, "sal.osl", "allocation error" ); + if (pAddr == nullptr) + { + destroySocketAddr( pSockAddr ); + free (cn); + return nullptr; + } + + pAddr->pHostName= cn; + pAddr->pSockAddr= pSockAddr; + + return pAddr; +} + +oslHostAddr SAL_CALL osl_createHostAddr ( + rtl_uString *ustrHostname, + const oslSocketAddr Addr) +{ + oslHostAddr HostAddr; + rtl_String* strHostname=nullptr; + char* pszHostName=nullptr; + + if ( ustrHostname != nullptr ) + { + rtl_uString2String( &strHostname, + rtl_uString_getStr(ustrHostname), + rtl_uString_getLength(ustrHostname), + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS ); + pszHostName = rtl_string_getStr(strHostname); + } + + HostAddr = osl_psz_createHostAddr(pszHostName,Addr); + + if ( strHostname != nullptr ) + { + rtl_string_release(strHostname); + } + + return HostAddr; +} + +oslHostAddr osl_psz_createHostAddr ( + const char *pszHostname, + const oslSocketAddr pAddr) +{ + oslHostAddr pHostAddr; + char *cn; + + SAL_WARN_IF( !pszHostname, "sal.osl", "undefined hostname" ); + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + if ((pszHostname == nullptr) || (pAddr == nullptr)) + return nullptr; + + cn = strdup(pszHostname); + SAL_WARN_IF( !cn, "sal.osl", "insufficient memory" ); + if (cn == nullptr) + return nullptr; + + pHostAddr= static_cast(malloc(sizeof(struct oslHostAddrImpl))); + SAL_WARN_IF( !pHostAddr, "sal.osl", "allocation error" ); + if (pHostAddr == nullptr) + { + free (cn); + return nullptr; + } + + pHostAddr->pHostName= cn; + pHostAddr->pSockAddr= osl_copySocketAddr( pAddr ); + + return pHostAddr; +} + +oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *ustrHostname) +{ + oslHostAddr HostAddr; + rtl_String* strHostname=nullptr; + char* pszHostName=nullptr; + + if ( ustrHostname != nullptr ) + { + rtl_uString2String( &strHostname, + rtl_uString_getStr(ustrHostname), + rtl_uString_getLength(ustrHostname), + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS ); + pszHostName=rtl_string_getStr(strHostname); + } + + HostAddr = osl_psz_createHostAddrByName(pszHostName); + + if ( strHostname != nullptr ) + { + rtl_string_release(strHostname); + } + + return HostAddr; +} + +oslHostAddr osl_psz_createHostAddrByName (const char *pszHostname) +{ + oslAddrInfo aAddrInfo(pszHostname, /* isInet */ true); + + return addrinfoToHostAddr (aAddrInfo.pAddrInfoList); +} + +oslHostAddr SAL_CALL osl_createHostAddrByAddr (const oslSocketAddr pAddr) +{ + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + + if (pAddr == nullptr) + return nullptr; + + if (pAddr->m_sockaddr.sa_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + { + const struct sockaddr_in *sin = reinterpret_cast(&pAddr->m_sockaddr); + if (sin->sin_addr.s_addr == htonl(INADDR_ANY)) + return nullptr; + + char host[MAX_HOSTBUFFER_SIZE]; + int res = getnameinfo(&pAddr->m_sockaddr, sizeof(struct sockaddr_in), + host, sizeof(host), nullptr, 0, NI_NAMEREQD); + if (res != 0) + return nullptr; + + char *cn = getFullQualifiedDomainName(host); + SAL_WARN_IF( !cn, "sal.osl", "couldn't get full qualified domain name" ); + if (cn == nullptr) + return nullptr; + + oslSocketAddr pSockAddr = createSocketAddr(); + SAL_WARN_IF( !pSockAddr, "sal.osl", "insufficient memory" ); + if (pSockAddr == nullptr) + { + free(cn); + return nullptr; + } + + memcpy(&pSockAddr->m_sockaddr, &pAddr->m_sockaddr, sizeof(pAddr->m_sockaddr)); + + oslHostAddr pHostAddr = static_cast(malloc(sizeof(struct oslHostAddrImpl))); + SAL_WARN_IF( !pAddr, "sal.osl", "allocation error" ); + if (pHostAddr == nullptr) + { + destroySocketAddr(pSockAddr); + free(cn); + return nullptr; + } + + pHostAddr->pHostName = cn; + pHostAddr->pSockAddr = pSockAddr; + + return pHostAddr; + } + + return nullptr; +} + +oslHostAddr SAL_CALL osl_copyHostAddr (const oslHostAddr pAddr) +{ + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + + if (pAddr) + return osl_psz_createHostAddr (pAddr->pHostName, pAddr->pSockAddr); + return nullptr; +} + +void SAL_CALL osl_getHostnameOfHostAddr ( + const oslHostAddr Addr, + rtl_uString **ustrHostname) +{ + const char* pHostname = osl_psz_getHostnameOfHostAddr(Addr); + + rtl_uString_newFromAscii (ustrHostname, pHostname); +} + +const char* osl_psz_getHostnameOfHostAddr (const oslHostAddr pAddr) +{ + if (pAddr) + return pAddr->pHostName; + return nullptr; +} + +oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr (const oslHostAddr pAddr) +{ + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + + if (pAddr) + return pAddr->pSockAddr; + return nullptr; +} + +void SAL_CALL osl_destroyHostAddr (oslHostAddr pAddr) +{ + if (pAddr) + { + if (pAddr->pHostName) + free (pAddr->pHostName); + if (pAddr->pSockAddr) + osl_destroySocketAddr (pAddr->pSockAddr); + free (pAddr); + } +} + +namespace +{ +oslSocketResult lcl_getLocalHostname(rtl_uString **ustrLocalHostname, bool bUseFQDN) +{ + static auto const init = [bUseFQDN]() -> std::pair { + char LocalHostname[256] = ""; + +#ifdef SYSV + struct utsname uts; + + if (uname(&uts) < 0) + return {osl_Socket_Error, OUString()}; + + if ((strlen(uts.nodename) + 1) > nBufLen) + return {osl_Socket_Error, OUString()}; + + strncpy(LocalHostname, uts.nodename, sizeof( LocalHostname )); +#else /* BSD compatible */ + if (gethostname(LocalHostname, sizeof(LocalHostname)-1) != 0) + return {osl_Socket_Error, OUString()}; +#endif /* SYSV */ + LocalHostname[sizeof(LocalHostname)-1] = 0; + + /* check if we have an FQDN */ + if (bUseFQDN && strchr(LocalHostname, '.') == nullptr) + { + oslHostAddr Addr; + + /* no, determine it via dns */ + Addr = osl_psz_createHostAddrByName(LocalHostname); + + const char *pStr; + if ((pStr = osl_psz_getHostnameOfHostAddr(Addr)) != nullptr) + { + strncpy(LocalHostname, pStr, sizeof( LocalHostname )); + LocalHostname[sizeof(LocalHostname)-1] = 0; + } + osl_destroyHostAddr(Addr); + } + + if (LocalHostname[0] != '\0') + { + return {osl_Socket_Ok, OUString::createFromAscii(LocalHostname)}; + } + + return {osl_Socket_Error, OUString()}; + }(); + + rtl_uString_assign(ustrLocalHostname,init.second.pData); + + return init.first; +} +} + +oslSocketResult SAL_CALL osl_getLocalHostname(rtl_uString **ustrLocalHostname) +{ + return lcl_getLocalHostname(ustrLocalHostname, false); +} + +oslSocketResult osl_getLocalHostnameFQDN(rtl_uString **ustrLocalHostname) +{ + return lcl_getLocalHostname(ustrLocalHostname, true); +} + +oslSocketAddr SAL_CALL osl_resolveHostname(rtl_uString *ustrHostname) +{ + oslSocketAddr Addr; + rtl_String* strHostname=nullptr; + char* pszHostName=nullptr; + + if ( ustrHostname != nullptr ) + { + rtl_uString2String( &strHostname, + rtl_uString_getStr(ustrHostname), + rtl_uString_getLength(ustrHostname), + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS ); + pszHostName = rtl_string_getStr(strHostname); + } + + Addr = osl_psz_resolveHostname(pszHostName); + + if ( strHostname != nullptr ) + { + rtl_string_release(strHostname); + } + + return Addr; +} + +oslSocketAddr osl_psz_resolveHostname(const char* pszHostname) +{ + struct oslHostAddrImpl *pAddr = osl_psz_createHostAddrByName(pszHostname); + + if (pAddr) + { + oslSocketAddr SockAddr = osl_copySocketAddr(pAddr->pSockAddr); + + osl_destroyHostAddr(pAddr); + + return SockAddr; + } + + return nullptr; +} + +sal_Int32 SAL_CALL osl_getServicePort(rtl_uString *ustrServicename, rtl_uString *ustrProtocol) +{ + sal_Int32 nPort; + rtl_String* strServicename=nullptr; + rtl_String* strProtocol=nullptr; + char* pszServiceName=nullptr; + char* pszProtocol=nullptr; + + if ( ustrServicename != nullptr ) + { + rtl_uString2String( &strServicename, + rtl_uString_getStr(ustrServicename), + rtl_uString_getLength(ustrServicename), + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS ); + pszServiceName = rtl_string_getStr(strServicename); + } + + if ( ustrProtocol != nullptr ) + { + rtl_uString2String( &strProtocol, + rtl_uString_getStr(ustrProtocol), + rtl_uString_getLength(ustrProtocol), + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS ); + pszProtocol = rtl_string_getStr(strProtocol); + } + + nPort = osl_psz_getServicePort(pszServiceName,pszProtocol); + + if ( strServicename != nullptr ) + { + rtl_string_release(strServicename); + } + + if ( strProtocol != nullptr ) + { + rtl_string_release(strProtocol); + } + + return nPort; +} + +sal_Int32 osl_psz_getServicePort(const char* pszServicename, + const char* pszProtocol) +{ + struct servent* ps; + + ps= getservbyname(pszServicename, pszProtocol); + + if (ps != nullptr) + return ntohs(ps->s_port); + + return OSL_INVALID_PORT; +} + +void SAL_CALL osl_destroySocketAddr(oslSocketAddr pAddr) +{ + destroySocketAddr( pAddr ); +} + +oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr(oslSocketAddr pAddr) +{ + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + + if (pAddr) + return FAMILY_FROM_NATIVE(pAddr->m_sockaddr.sa_family); + return osl_Socket_FamilyInvalid; +} + +sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr(oslSocketAddr pAddr) +{ + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + + if( pAddr ) + { + struct sockaddr_in* pSystemInetAddr= reinterpret_cast(&pAddr->m_sockaddr); + + if ( pSystemInetAddr->sin_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + return ntohs(pSystemInetAddr->sin_port); + } + return OSL_INVALID_PORT; +} + +sal_Bool SAL_CALL osl_setInetPortOfSocketAddr(oslSocketAddr pAddr, sal_Int32 Port) +{ + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + + if( pAddr ) + { + struct sockaddr_in* pSystemInetAddr= reinterpret_cast(&pAddr->m_sockaddr); + if ( pSystemInetAddr->sin_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + { + pSystemInetAddr->sin_port= htons(static_cast(Port)); + return true; + } + } + + /* this is not a inet-addr => can't set port */ + return false; +} + +oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr(oslSocketAddr Addr, rtl_uString **ustrHostname) +{ + oslHostAddr pHostAddr= osl_createHostAddrByAddr(Addr); + + if (!pHostAddr) + { + return osl_Socket_Error; + } + + rtl_uString_newFromAscii(ustrHostname,pHostAddr->pHostName); + + osl_destroyHostAddr(pHostAddr); + + return osl_Socket_Ok; +} + +oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr(oslSocketAddr Addr, rtl_uString **ustrDottedInetAddr) +{ + if( !Addr ) + { + return osl_Socket_Error; + } + + struct sockaddr_in* pSystemInetAddr = reinterpret_cast(&Addr->m_sockaddr); + + if (pSystemInetAddr->sin_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + { + return osl_Socket_Error; + } + + char buf[INET_ADDRSTRLEN]; + auto const text = inet_ntop(AF_INET, &pSystemInetAddr->sin_addr, buf, INET_ADDRSTRLEN); + assert(text != nullptr); + rtl_uString_newFromAscii(ustrDottedInetAddr,text); + + return osl_Socket_Ok; + +} + +oslSocket SAL_CALL osl_createSocket( + oslAddrFamily Family, + oslSocketType Type, + oslProtocol Protocol) +{ + oslSocket pSocket; + + /* alloc memory */ + pSocket= createSocketImpl(); + + /* create socket */ + pSocket->m_Socket= socket(FAMILY_TO_NATIVE(Family), + TYPE_TO_NATIVE(Type), + PROTOCOL_TO_NATIVE(Protocol)); + + /* creation failed => free memory */ + if(pSocket->m_Socket == OSL_INVALID_SOCKET) + { + int nErrno = errno; + SAL_WARN( "sal.osl", "socket creation failed: " << UnixErrnoString(nErrno) ); + + destroySocketImpl(pSocket); + pSocket= nullptr; + } + else + { + sal_Int32 nFlags=0; + /* set close-on-exec flag */ + if ((nFlags = fcntl(pSocket->m_Socket, F_GETFD, 0)) != -1) + { + nFlags |= FD_CLOEXEC; + if (fcntl(pSocket->m_Socket, F_SETFD, nFlags) == -1) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "failed changing socket flags: " << UnixErrnoString(nErrno) ); + } + } + else + { + pSocket->m_nLastError=errno; + } + } + + return pSocket; +} + +void SAL_CALL osl_acquireSocket(oslSocket pSocket) +{ + osl_atomic_increment(&(pSocket->m_nRefCount)); +} + +void SAL_CALL osl_releaseSocket(oslSocket pSocket) +{ + if (pSocket && osl_atomic_decrement(&(pSocket->m_nRefCount)) == 0) + { +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + if (pSocket->m_bIsAccepting) + { + SAL_WARN( "sal.osl", "attempt to destroy socket while accepting" ); + return; + } +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + osl_closeSocket(pSocket); + destroySocketImpl(pSocket); + } +} + +void SAL_CALL osl_closeSocket(oslSocket pSocket) +{ + /* socket already invalid */ + if (!pSocket) + return; + + pSocket->m_nLastError=0; + sal_Int32 nFD = pSocket->m_Socket; + + if (nFD == OSL_INVALID_SOCKET) + return; + + pSocket->m_Socket = OSL_INVALID_SOCKET; + + sal_Int32 nRet=0; +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pSocket->m_bIsInShutdown = true; + + if (pSocket->m_bIsAccepting) + { + union { + struct sockaddr aSockAddr; + struct sockaddr_in aSockAddrIn; + } s; + socklen_t nSockLen = sizeof(s.aSockAddr); + + nRet = getsockname(nFD, &s.aSockAddr, &nSockLen); + if (nRet < 0) + { + int nErrno = errno; + SAL_WARN( "sal.osl", "getsockname call failed: " << UnixErrnoString(nErrno) ); + } + + if (s.aSockAddr.sa_family == AF_INET) + { + if (s.aSockAddrIn.sin_addr.s_addr == htonl(INADDR_ANY)) + { + s.aSockAddrIn.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + } + + int nConnFD = socket(AF_INET, SOCK_STREAM, 0); + if (nConnFD < 0) + { + int nErrno = errno; + SAL_WARN( "sal.osl", "socket call failed: " << UnixErrnoString(nErrno) ); + } + else + { + nRet = connect(nConnFD, &s.aSockAddr, sizeof(s.aSockAddr)); + if (nRet < 0) + { + int nErrno = errno; + SAL_WARN( "sal.osl", "connect call failed: " << UnixErrnoString(nErrno) ); + } + close(nConnFD); + } + } + pSocket->m_bIsAccepting = false; + } +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + + nRet=close(nFD); + if (nRet != 0) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "closeSocket close failed: " << UnixErrnoString(nErrno) ); + } + + pSocket->m_Socket = OSL_INVALID_SOCKET; +} + +/* Note from function creator: I rely on the fact that oslSocketAddr and struct sockaddr + are the same! I don't like it very much but see no other easy way to conceal + the struct sockaddr from the eyes of the user. */ +oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket pSocket) +{ + socklen_t AddrLen; + struct sockaddr Addr; + oslSocketAddr pAddr; + + if (pSocket == nullptr) /* ENOTSOCK */ + return nullptr; + + AddrLen= sizeof(struct sockaddr); + + if (getsockname(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR) + return nullptr; + + pAddr = createSocketAddrFromSystem( &Addr ); + return pAddr; +} + +oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket pSocket) +{ + socklen_t AddrLen; + struct sockaddr Addr; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return nullptr; + } + + pSocket->m_nLastError=0; + AddrLen= sizeof(struct sockaddr); + + if(getpeername(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR) + { + pSocket->m_nLastError=errno; + return nullptr; + } + return createSocketAddrFromSystem( &Addr ); +} + +sal_Bool SAL_CALL osl_bindAddrToSocket(oslSocket pSocket, + oslSocketAddr pAddr) +{ + int nRet; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + SAL_WARN_IF( !pAddr, "sal.osl", "undefined address" ); + if ( pSocket == nullptr || pAddr == nullptr ) + { + return false; + } + + pSocket->m_nLastError=0; + + nRet = bind(pSocket->m_Socket, &(pAddr->m_sockaddr), sizeof(struct sockaddr)); + + if ( nRet == OSL_SOCKET_ERROR) + { + pSocket->m_nLastError=errno; + return false; + } + + return true; +} + +sal_Bool SAL_CALL osl_listenOnSocket(oslSocket pSocket, + sal_Int32 MaxPendingConnections) +{ + int nRet; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return false; + } + + pSocket->m_nLastError=0; + + nRet = listen(pSocket->m_Socket, + MaxPendingConnections == -1 ? + SOMAXCONN : + MaxPendingConnections); + if ( nRet == OSL_SOCKET_ERROR) + { + pSocket->m_nLastError=errno; + return false; + } + + return true; +} + +oslSocketResult SAL_CALL osl_connectSocketTo(oslSocket pSocket, + oslSocketAddr pAddr, + const TimeValue* pTimeout) +{ + int ReadyHandles; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + + if ( pSocket == nullptr ) + { + return osl_Socket_Error; + } + + pSocket->m_nLastError=0; + + if (osl_isNonBlockingMode(pSocket)) + { + if (connect(pSocket->m_Socket, + &(pAddr->m_sockaddr), + sizeof(struct sockaddr)) != OSL_SOCKET_ERROR) + return osl_Socket_Ok; + + if (errno == EWOULDBLOCK || errno == EINPROGRESS) + { + pSocket->m_nLastError=EINPROGRESS; + return osl_Socket_InProgress; + } + + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "connection failed: " << UnixErrnoString(nErrno) ); + return osl_Socket_Error; + } + + /* set socket temporarily to non-blocking */ + if( !osl_enableNonBlockingMode(pSocket, true) ) + SAL_WARN( "sal.osl", "failed to enable non-blocking mode" ); + + /* initiate connect */ + if(connect(pSocket->m_Socket, + &(pAddr->m_sockaddr), + sizeof(struct sockaddr)) != OSL_SOCKET_ERROR) + { + /* immediate connection */ + osl_enableNonBlockingMode(pSocket, false); + + return osl_Socket_Ok; + } + + /* really an error or just delayed? */ + if (errno != EINPROGRESS) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "connection failed: " << UnixErrnoString(nErrno) ); + + osl_enableNonBlockingMode(pSocket, false); + return osl_Socket_Error; + } + + /* prepare poll set for socket */ + pollfd Set = {pSocket->m_Socket, POLLPRI | POLLOUT, 0}; + + /* poll */ + ReadyHandles= poll(&Set, 1, + pTimeout ? convertToMs(pTimeout) : -1); + + if (ReadyHandles > 0) /* connected */ + { + if ( (Set.revents & POLLOUT) != 0 ) + { + int nErrorCode = 0; + socklen_t nErrorSize = sizeof( nErrorCode ); + + int nSockOpt; + + nSockOpt = getsockopt ( pSocket->m_Socket, SOL_SOCKET, SO_ERROR, + &nErrorCode, &nErrorSize ); + if ( (nSockOpt == 0) && (nErrorCode == 0)) + { + osl_enableNonBlockingMode(pSocket, false); + return osl_Socket_Ok; + } + else + { + pSocket->m_nLastError = (nSockOpt == 0) ? nErrorCode : errno; + return osl_Socket_Error; + } + } + else + { + return osl_Socket_Error; + } + } + else if (ReadyHandles < 0) /* error */ + { + if (errno == EBADF) /* most probably interrupted by close() */ + { + /* do not access pSockImpl because it is about to be or */ + /* already destroyed */ + return osl_Socket_Interrupted; + } + pSocket->m_nLastError=errno; + return osl_Socket_Error; + } + else /* timeout */ + { + pSocket->m_nLastError=errno; + return osl_Socket_TimedOut; + } +} + +oslSocket SAL_CALL osl_acceptConnectionOnSocket(oslSocket pSocket, + oslSocketAddr* ppAddr) +{ + struct sockaddr Addr; + int Connection, Flags; + oslSocket pConnectionSockImpl; + + socklen_t AddrLen = sizeof(struct sockaddr); + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return nullptr; + } + + pSocket->m_nLastError=0; +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pSocket->m_bIsAccepting = true; +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + + if( ppAddr && *ppAddr ) + { + osl_destroySocketAddr( *ppAddr ); + *ppAddr = nullptr; + } + + /* prevent Linux EINTR behaviour */ + do + { + Connection = accept(pSocket->m_Socket, &Addr, &AddrLen); + } while (Connection == -1 && errno == EINTR); + + /* accept failed? */ + if( Connection == OSL_SOCKET_ERROR ) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "accept connection failed: " << UnixErrnoString(nErrno) ); + +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pSocket->m_bIsAccepting = false; +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + return nullptr; + } + + assert(AddrLen == sizeof(struct sockaddr)); + +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + if ( pSocket->m_bIsInShutdown ) + { + close(Connection); + SAL_WARN( "sal.osl", "close while accept" ); + return nullptr; + } +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + + if(ppAddr) + { + *ppAddr= createSocketAddrFromSystem(&Addr); + } + + /* alloc memory */ + pConnectionSockImpl= createSocketImpl(); + + /* set close-on-exec flag */ + if ((Flags = fcntl(Connection, F_GETFD, 0)) != -1) + { + Flags |= FD_CLOEXEC; + if (fcntl(Connection, F_SETFD, Flags) == -1) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "fcntl failed: " << UnixErrnoString(nErrno) ); + } + + } + + pConnectionSockImpl->m_Socket = Connection; + pConnectionSockImpl->m_nLastError = 0; +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + pConnectionSockImpl->m_bIsAccepting = false; + + pSocket->m_bIsAccepting = false; +#endif /* CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT */ + return pConnectionSockImpl; +} + +sal_Int32 SAL_CALL osl_receiveSocket(oslSocket pSocket, + void* pBuffer, + sal_uInt32 BytesToRead, + oslSocketMsgFlag Flag) +{ + int nRead; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return -1; + } + + pSocket->m_nLastError=0; + + do + { + nRead = recv(pSocket->m_Socket, + pBuffer, + BytesToRead, + MSG_FLAG_TO_NATIVE(Flag)); + } while ( nRead < 0 && errno == EINTR ); + + if ( nRead < 0 ) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: " << UnixErrnoString(nErrno) ); + } + else if ( nRead == 0 ) + { + SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: EOL" ); + } + + return nRead; +} + +sal_Int32 SAL_CALL osl_receiveFromSocket(oslSocket pSocket, + oslSocketAddr pSenderAddr, + void* pBuffer, + sal_uInt32 BufferSize, + oslSocketMsgFlag Flag) +{ + int nRead; + struct sockaddr *pSystemSockAddr = nullptr; + socklen_t AddrLen = 0; + if( pSenderAddr ) + { + AddrLen = sizeof( struct sockaddr ); + pSystemSockAddr = &(pSenderAddr->m_sockaddr); + } + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return -1; + } + + pSocket->m_nLastError=0; + + nRead = recvfrom(pSocket->m_Socket, + pBuffer, + BufferSize, + MSG_FLAG_TO_NATIVE(Flag), + pSystemSockAddr, + &AddrLen); + + if ( nRead < 0 ) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: " << UnixErrnoString(nErrno) ); + } + else if ( nRead == 0 ) + { + SAL_WARN( "sal.osl", "receive socket [" << nRead << "] failed: EOL" ); + } + + return nRead; +} + +sal_Int32 SAL_CALL osl_sendSocket(oslSocket pSocket, + const void* pBuffer, + sal_uInt32 BytesToSend, + oslSocketMsgFlag Flag) +{ + int nWritten; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return -1; + } + + pSocket->m_nLastError=0; + + do + { + nWritten = send(pSocket->m_Socket, + pBuffer, + BytesToSend, + MSG_FLAG_TO_NATIVE(Flag)); + } while ( nWritten < 0 && errno == EINTR ); + + if ( nWritten < 0 ) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: " << UnixErrnoString(nErrno) ); + } + else if ( nWritten == 0 ) + { + SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: EOL" ); + } + + return nWritten; +} + +sal_Int32 SAL_CALL osl_sendToSocket(oslSocket pSocket, + oslSocketAddr ReceiverAddr, + const void* pBuffer, + sal_uInt32 BytesToSend, + oslSocketMsgFlag Flag) +{ + int nWritten; + + struct sockaddr *pSystemSockAddr = nullptr; + int AddrLen = 0; + if( ReceiverAddr ) + { + pSystemSockAddr = &(ReceiverAddr->m_sockaddr); + AddrLen = sizeof( struct sockaddr ); + } + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return -1; + } + + pSocket->m_nLastError=0; + + /* ReceiverAddr might be 0 when used on a connected socket. */ + /* Then sendto should behave like send. */ + + nWritten = sendto(pSocket->m_Socket, + pBuffer, + BytesToSend, + MSG_FLAG_TO_NATIVE(Flag), + pSystemSockAddr, + AddrLen); + + if ( nWritten < 0 ) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: " << UnixErrnoString(nErrno) ); + } + else if ( nWritten == 0 ) + { + SAL_WARN( "sal.osl", "send socket [" << nWritten << "] failed: EOL" ); + } + + return nWritten; +} + +sal_Int32 SAL_CALL osl_readSocket ( + oslSocket pSocket, void *pBuffer, sal_Int32 n ) +{ + sal_uInt8 * Ptr = static_cast(pBuffer); + sal_uInt32 BytesRead= 0; + sal_uInt32 BytesToRead= n; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + + /* loop until all desired bytes were read or an error occurred */ + while (BytesToRead > 0) + { + sal_Int32 RetVal; + RetVal= osl_receiveSocket(pSocket, + Ptr, + BytesToRead, + osl_Socket_MsgNormal); + + /* error occurred? */ + if(RetVal <= 0) + { + break; + } + + BytesToRead -= RetVal; + BytesRead += RetVal; + Ptr += RetVal; + } + + return BytesRead; +} + +sal_Int32 SAL_CALL osl_writeSocket( + oslSocket pSocket, const void *pBuffer, sal_Int32 n ) +{ + /* loop until all desired bytes were send or an error occurred */ + sal_uInt32 BytesSend= 0; + sal_uInt32 BytesToSend= n; + sal_uInt8 const *Ptr = static_cast(pBuffer); + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + + while (BytesToSend > 0) + { + sal_Int32 RetVal; + + RetVal= osl_sendSocket( pSocket,Ptr,BytesToSend,osl_Socket_MsgNormal); + + /* error occurred? */ + if(RetVal <= 0) + { + break; + } + + BytesToSend -= RetVal; + BytesSend += RetVal; + Ptr += RetVal; + + } + return BytesSend; +} + +static bool socket_poll ( + oslSocket pSocket, + const TimeValue* pTimeout, + short nEvent) +{ + struct pollfd fds; + int timeout; + int result; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if (pSocket == nullptr) + return false; /* EINVAL */ + + pSocket->m_nLastError = 0; + + fds.fd = pSocket->m_Socket; + fds.events = nEvent; + fds.revents = 0; + + timeout = -1; + if (pTimeout) + { + timeout = convertToMs(pTimeout); + } + + result = poll (&fds, 1, timeout); + if (result < 0) + { + pSocket->m_nLastError = errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "poll failed: " << UnixErrnoString(nErrno) ); + return false; + } + if (result == 0) + { + /* Timeout */ + return false; + } + + return ((fds.revents & nEvent) == nEvent); +} + +sal_Bool SAL_CALL osl_isReceiveReady ( + oslSocket pSocket, const TimeValue* pTimeout) +{ + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if (pSocket == nullptr) + { + /* ENOTSOCK */ + return false; + } + + return socket_poll (pSocket, pTimeout, POLLIN); +} + +sal_Bool SAL_CALL osl_isSendReady ( + oslSocket pSocket, const TimeValue* pTimeout) +{ + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if (pSocket == nullptr) + { + /* ENOTSOCK */ + return false; + } + + return socket_poll (pSocket, pTimeout, POLLOUT); +} + +sal_Bool SAL_CALL osl_isExceptionPending ( + oslSocket pSocket, const TimeValue* pTimeout) +{ + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if (pSocket == nullptr) + { + /* ENOTSOCK */ + return false; + } + + return socket_poll (pSocket, pTimeout, POLLPRI); +} + +sal_Bool SAL_CALL osl_shutdownSocket(oslSocket pSocket, + oslSocketDirection Direction) +{ + int nRet; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return false; + } + + pSocket->m_nLastError=0; + + nRet=shutdown(pSocket->m_Socket, DIRECTION_TO_NATIVE(Direction)); + if (nRet != 0 ) + { + pSocket->m_nLastError=errno; + int nErrno = errno; + SAL_WARN( "sal.osl", "shutdown failed: " << UnixErrnoString(nErrno) ); + } + return (nRet==0); +} + +sal_Int32 SAL_CALL osl_getSocketOption(oslSocket pSocket, + oslSocketOptionLevel Level, + oslSocketOption Option, + void* pBuffer, + sal_uInt32 BufferLen) +{ + socklen_t nOptLen = static_cast(BufferLen); + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return -1; + } + + pSocket->m_nLastError=0; + + if(getsockopt(pSocket->m_Socket, + OPTION_LEVEL_TO_NATIVE(Level), + OPTION_TO_NATIVE(Option), + pBuffer, + &nOptLen) == -1) + { + pSocket->m_nLastError=errno; + return -1; + } + + return nOptLen; +} + +sal_Bool SAL_CALL osl_setSocketOption(oslSocket pSocket, + oslSocketOptionLevel Level, + oslSocketOption Option, + void* pBuffer, + sal_uInt32 BufferLen) +{ + int nRet; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return false; + } + + pSocket->m_nLastError=0; + + nRet = setsockopt(pSocket->m_Socket, + OPTION_LEVEL_TO_NATIVE(Level), + OPTION_TO_NATIVE(Option), + pBuffer, + BufferLen); + + if ( nRet < 0 ) + { + pSocket->m_nLastError=errno; + return false; + } + + return true; +} + +sal_Bool SAL_CALL osl_enableNonBlockingMode(oslSocket pSocket, + sal_Bool On) +{ + int flags; + int nRet; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return false; + } + + pSocket->m_nLastError=0; + + flags = fcntl(pSocket->m_Socket, F_GETFL, 0); + + if (On) + flags |= O_NONBLOCK; + else + flags &= ~(O_NONBLOCK); + + nRet = fcntl(pSocket->m_Socket, F_SETFL, flags); + + if ( nRet < 0 ) + { + pSocket->m_nLastError=errno; + return false; + } + + return true; +} + +sal_Bool SAL_CALL osl_isNonBlockingMode(oslSocket pSocket) +{ + int flags; + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return false; + } + + pSocket->m_nLastError=0; + + flags = fcntl(pSocket->m_Socket, F_GETFL, 0); + + if (flags == -1 || !(flags & O_NONBLOCK)) + return false; + + return true; +} + +oslSocketType SAL_CALL osl_getSocketType(oslSocket pSocket) +{ + int Type=0; + socklen_t TypeSize= sizeof(Type); + + SAL_WARN_IF( !pSocket, "sal.osl", "undefined socket" ); + if ( pSocket == nullptr ) + { + return osl_Socket_TypeInvalid; + } + + pSocket->m_nLastError=0; + + if(getsockopt(pSocket->m_Socket, + OPTION_LEVEL_TO_NATIVE(osl_Socket_LevelSocket), + OPTION_TO_NATIVE(osl_Socket_OptionType), + &Type, + &TypeSize) == -1) + { + /* error */ + pSocket->m_nLastError=errno; + return osl_Socket_TypeInvalid; + } + + return TYPE_FROM_NATIVE(Type); + +} + +void SAL_CALL osl_getLastSocketErrorDescription(oslSocket Socket, rtl_uString **ustrError) +{ + char pszError[1024]; + + pszError[0] = '\0'; + + osl_psz_getLastSocketErrorDescription(Socket,pszError,sizeof(pszError)); + + rtl_uString_newFromAscii(ustrError,pszError); +} + +void osl_psz_getLastSocketErrorDescription(oslSocket pSocket, char* pBuffer, sal_uInt32 BufferSize) +{ + /* make sure pBuffer will be a zero-terminated string even when strncpy has to cut */ + pBuffer[BufferSize-1]= '\0'; + + if ( pSocket == nullptr ) + { + strncpy(pBuffer, strerror(EINVAL), BufferSize-1); + return; + } + + strncpy(pBuffer, strerror(pSocket->m_nLastError), BufferSize-1); +} + +oslSocketError SAL_CALL osl_getLastSocketError(oslSocket pSocket) +{ + if ( pSocket == nullptr ) + { + return ERROR_FROM_NATIVE(EINVAL); + } + + return ERROR_FROM_NATIVE(pSocket->m_nLastError); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/sockimpl.hxx b/sal/osl/unx/sockimpl.hxx new file mode 100644 index 000000000..1a9bc1f9e --- /dev/null +++ b/sal/osl/unx/sockimpl.hxx @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_SOCKIMPL_HXX +#define INCLUDED_SAL_OSL_UNX_SOCKIMPL_HXX + +#include +#include +#include + +#include "system.hxx" + +#if defined(LINUX) || defined(FREEBSD) || defined(NETBSD) +#define CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT 1 +#endif + +struct oslSocketImpl { + int m_Socket; + int m_nLastError; + oslInterlockedCount m_nRefCount; +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + bool m_bIsAccepting; + bool m_bIsInShutdown; +#endif +}; + +struct oslSocketAddrImpl +{ + struct sockaddr m_sockaddr; +}; + +struct oslPipeImpl { + int m_Socket; + char m_Name[sizeof sockaddr_un::sun_path]; + oslInterlockedCount m_nRefCount; + bool m_bClosed; +#if defined(CLOSESOCKET_DOESNT_WAKE_UP_ACCEPT) + bool m_bIsAccepting; + bool m_bIsInShutdown; +#endif +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/soffice.cxx b/sal/osl/unx/soffice.cxx new file mode 100644 index 000000000..bcead388b --- /dev/null +++ b/sal/osl/unx/soffice.cxx @@ -0,0 +1,25 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include "soffice.hxx" + +namespace +{ +std::atomic flag(false); +} + +void sal::detail::setSoffice() { flag = true; } + +bool sal::detail::isSoffice() { return flag; } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/unx/soffice.hxx b/sal/osl/unx/soffice.hxx new file mode 100644 index 000000000..da1b684af --- /dev/null +++ b/sal/osl/unx/soffice.hxx @@ -0,0 +1,26 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_UNX_SOFFICE_HXX +#define INCLUDED_SAL_OSL_UNX_SOFFICE_HXX + +#include + +// Used to communicate special sal::detail::InitializeSoffice sal_detail_initialize call: + +namespace sal::detail +{ +void setSoffice(); + +bool isSoffice(); +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/unx/system.cxx b/sal/osl/unx/system.cxx new file mode 100644 index 000000000..875f41016 --- /dev/null +++ b/sal/osl/unx/system.cxx @@ -0,0 +1,167 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include + +#include "system.hxx" + +#ifdef NO_PTHREAD_RTL + +#if defined(MACOSX) + +#include +#include +#include + +/* + * Add support for resolving Mac native alias files (not the same as unix alias files) + * (what are "unix alias files"?) + * returns 0 on success. + */ +int macxp_resolveAlias(char *path, int buflen) +{ +#if HAVE_FEATURE_MACOSX_SANDBOX + /* Avoid unnecessary messages in the system.log: + * + * soffice(57342) deny file-read-data /Users/tml/Documents/b.odt/..namedfork/rsrc + * etc. + * + * Just don't bother with resolving aliases. I doubt its usefulness anyway. + */ + (void) path; + (void) buflen; + return 0; +#else + CFStringRef cfpath; + CFURLRef cfurl; + CFErrorRef cferror; + CFDataRef cfbookmark; + + // Don't even try anything for files inside the app bundle. Just a + // waste of time. + + static const char * const appBundle = [[[NSBundle mainBundle] bundlePath] UTF8String]; + + const size_t appBundleLen = strlen(appBundle); + if (strncmp(path, appBundle, appBundleLen) == 0 && path[appBundleLen] == '/') + return 0; + + char *unprocessedPath = path; + + if ( *unprocessedPath == '/' ) + unprocessedPath++; + + int nRet = 0; + while ( !nRet && unprocessedPath && *unprocessedPath ) + { + unprocessedPath = strchr( unprocessedPath, '/' ); + if ( unprocessedPath ) + *unprocessedPath = '\0'; + + cfpath = CFStringCreateWithCString( nullptr, path, kCFStringEncodingUTF8 ); + cfurl = CFURLCreateWithFileSystemPath( nullptr, cfpath, kCFURLPOSIXPathStyle, false ); + CFRelease( cfpath ); + cferror = nullptr; + cfbookmark = CFURLCreateBookmarkDataFromFile( nullptr, cfurl, &cferror ); + CFRelease( cfurl ); + + if ( cfbookmark == nullptr ) + { + if(cferror) + { + CFRelease( cferror ); + } + } + else + { + Boolean isStale; + cfurl = CFURLCreateByResolvingBookmarkData( nullptr, cfbookmark, kCFBookmarkResolutionWithoutUIMask, + nullptr, nullptr, &isStale, &cferror ); + CFRelease( cfbookmark ); + if ( cfurl == nullptr ) + { + CFRelease( cferror ); + } + else + { + cfpath = CFURLCopyFileSystemPath( cfurl, kCFURLPOSIXPathStyle ); + CFRelease( cfurl ); + if ( cfpath != nullptr ) + { + char tmpPath[ PATH_MAX ]; + if ( CFStringGetCString( cfpath, tmpPath, PATH_MAX, kCFStringEncodingUTF8 ) ) + { + int nLen = strlen( tmpPath ) + ( unprocessedPath ? strlen( unprocessedPath + 1 ) + 1 : 0 ); + if ( nLen < buflen && nLen < PATH_MAX ) + { + if ( unprocessedPath ) + { + int nTmpPathLen = strlen( tmpPath ); + strcat( tmpPath, "/" ); + strcat( tmpPath, unprocessedPath + 1 ); + strcpy( path, tmpPath); + unprocessedPath = path + nTmpPathLen; + } + else if ( !unprocessedPath ) + { + strcpy( path, tmpPath ); + } + } + else + { + errno = ENAMETOOLONG; + nRet = -1; + } + } + CFRelease( cfpath ); + } + } + } + + if ( unprocessedPath ) + *unprocessedPath++ = '/'; + } + + return nRet; +#endif +} + +#endif /* defined MACOSX */ + +#endif /* NO_PTHREAD_RTL */ + +//might be useful on other platforms, but doesn't compiler under MACOSX anyway +#if defined(__GNUC__) && defined(LINUX) +//force the __data_start symbol to exist in any executables that link against +//libuno_sal so that dlopening of the libgcj provided libjvm.so on some +//platforms where it needs that symbol will succeed. e.g. Debian mips/lenny +//with gcc 4.3. With this in place the smoketest succeeds with libgcj provided +//java. Quite possibly also required/helpful for s390x/s390 and maybe some +//others. Without it the dlopen of libjvm.so will fail with __data_start +//not found +extern int __data_start[] __attribute__((weak)); +extern int data_start[] __attribute__((weak)); +extern int _end[] __attribute__((weak)); +static void *dummy[] __attribute__((used)) = {__data_start, data_start, _end}; +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/system.hxx b/sal/osl/unx/system.hxx new file mode 100644 index 000000000..8b1f1dccc --- /dev/null +++ b/sal/osl/unx/system.hxx @@ -0,0 +1,406 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_SYSTEM_HXX +#define INCLUDED_SAL_OSL_UNX_SYSTEM_HXX + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include + +#include + +/* Make sockets of type AF_UNIX use underlying FS rights */ +#if defined(__sun) && !defined(_XOPEN_SOURCE) +# define _XOPEN_SOURCE 500 +# include +# undef _XOPEN_SOURCE +#else +# include +#endif + +#include +#include + +#ifdef SYSV +# include +#endif + +#ifdef LINUX +# ifndef __USE_GNU +# define __USE_GNU +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# define IOCHANNEL_TRANSFER_BSD_RENO +# define pthread_testcancel() +# define NO_PTHREAD_PRIORITY +# define PTHREAD_SIGACTION pthread_sigaction + +# ifndef ETIME +# define ETIME ETIMEDOUT +# endif + +#endif + +#ifdef HAIKU +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# define IOCHANNEL_TRANSFER_BSD_RENO +# define pthread_testcancel() +# define NO_PTHREAD_PRIORITY +# define NO_PTHREAD_RTL +# define PTHREAD_SIGACTION pthread_sigaction + +# ifndef ETIME +# define ETIME ETIMEDOUT +# endif +# define SIGIOT SIGABRT +# define SOCK_RDM 0 +// hack: Haiku defines SOL_SOCKET as -1, but this makes GCC complain about +// narrowing conversion +# undef SOL_SOCKET +# define SOL_SOCKET (sal_uInt32) -1 + +#endif + +#if defined(ANDROID) +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# define IOCHANNEL_TRANSFER_BSD_RENO +# define pthread_testcancel() +# define NO_PTHREAD_PRIORITY +#endif + +#ifdef NETBSD +# define NO_PTHREAD_RTL +#endif + +#ifdef FREEBSD +# ifndef ETIME +# define ETIME ETIMEDOUT +# endif +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# include +# define NO_PTHREAD_RTL +#endif + +#ifdef OPENBSD +# define ETIME ETIMEDOUT +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# include +# define PTR_SIZE_T(s) ((size_t *)&(s)) +# define IORESOURCE_TRANSFER_BSD +# define IOCHANNEL_TRANSFER_BSD_RENO +# define pthread_testcancel() +# define NO_PTHREAD_PRIORITY +# define NO_PTHREAD_RTL +# define PTHREAD_SIGACTION pthread_sigaction +#endif + +#if defined(DRAGONFLY) || defined(NETBSD) +# define ETIME ETIMEDOUT +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# define IOCHANNEL_TRANSFER_BSD_RENO +#endif + +#ifdef AIX +# define AF_IPX -1 +# include +# include +# include +# include +# include +# include +# include +# define SLEEP_TIMESPEC(timespec) nsleep(×pec, 0) +# define LIBPATH "LIBPATH" +#endif + +#ifdef __sun +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_SYSV +# define IOCHANNEL_TRANSFER_BSD +# define LIBPATH "LD_LIBRARY_PATH" +#endif + +#ifdef MACOSX +#define TimeValue CFTimeValue // Do not conflict with TimeValue in sal/inc/osl/time.h +#include +#undef TimeValue +# ifndef ETIME +# define ETIME ETIMEDOUT +# endif +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IOCHANNEL_TRANSFER_BSD_RENO +# define NO_PTHREAD_RTL +/* for NSGetArgc/Argv/Environ */ +# include +int macxp_resolveAlias(char *path, int buflen); +#endif + +#ifdef IOS +# ifndef ETIME +# define ETIME ETIMEDOUT +# endif +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IOCHANNEL_TRANSFER_BSD_RENO +# define NO_PTHREAD_RTL +#endif + +#ifdef EMSCRIPTEN +# ifndef ETIME +# define ETIME ETIMEDOUT +# endif +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define IORESOURCE_TRANSFER_BSD +# define IOCHANNEL_TRANSFER_BSD_RENO +# define pthread_testcancel() +# define NO_PTHREAD_PRIORITY +# define INIT_GROUPS(name, gid) false +#endif + +#if !defined(_WIN32) && \ + !defined(LINUX) && !defined(NETBSD) && !defined(FREEBSD) && \ + !defined(AIX) && \ + !defined(__sun) && !defined(MACOSX) && \ + !defined(OPENBSD) && !defined(DRAGONFLY) && \ + !defined(IOS) && !defined(ANDROID) && \ + !defined(HAIKU) && !defined(EMSCRIPTEN) +# error "Target platform not specified!" +#endif + +#ifndef PTR_FD_SET +# define PTR_FD_SET(s) (&(s)) +#endif + +#ifndef NORMALIZE_TIMESPEC +# define NORMALIZE_TIMESPEC(timespec) \ + timespec . tv_sec += timespec . tv_nsec / 1000000000; \ + timespec . tv_nsec %= 1000000000; +#endif + +#ifndef SET_TIMESPEC +# define SET_TIMESPEC(timespec, sec, nsec) \ + timespec . tv_sec = (sec); \ + timespec . tv_nsec = (nsec); \ + NORMALIZE_TIMESPEC(timespec); +#endif + +#ifndef SLEEP_TIMESPEC +# define SLEEP_TIMESPEC(timespec) nanosleep(×pec, nullptr) +#endif + +#ifndef INIT_GROUPS +# define INIT_GROUPS(name, gid) ((setgid((gid)) == 0) && (initgroups((name), (gid)) == 0)) +#endif + +#ifndef PTHREAD_NONE +# define PTHREAD_NONE _pthread_none_ +# ifndef PTHREAD_NONE_INIT +# define PTHREAD_NONE_INIT ((pthread_t)-1) +# endif +#endif + +#ifndef PTHREAD_ATTR_DEFAULT +# define PTHREAD_ATTR_DEFAULT nullptr +#endif +#ifndef PTHREAD_MUTEXATTR_DEFAULT +# define PTHREAD_MUTEXATTR_DEFAULT nullptr +#endif +#ifndef PTHREAD_CONDATTR_DEFAULT +# define PTHREAD_CONDATTR_DEFAULT nullptr +#endif + +#ifndef PTHREAD_SIGACTION +# define PTHREAD_SIGACTION sigaction +#endif + +#ifndef STAT_PARENT +# define STAT_PARENT lstat +#endif + +/* socket options which might not be defined on all unx flavors */ +#ifndef SO_ACCEPTCONN +# define SO_ACCEPTCONN 0 +#endif +#ifndef SO_SNDLOWAT +# define SO_SNDLOWAT 0 +#endif +#ifndef SO_RCVLOWAT +# define SO_RCVLOWAT 0 +#endif +#ifndef SO_SNDTIMEO +# define SO_SNDTIMEO 0 +#endif +#ifndef SO_RCVTIMEO +# define SO_RCVTIMEO 0 +#endif +#ifndef SO_USELOOPBACK +# define SO_USELOOPBACK 0 +#endif +#ifndef MSG_MAXIOVLEN +# define MSG_MAXIOVLEN 0 +#endif + +/* BEGIN HACK */ +/* dummy define and declarations for IPX should be replaced by */ +/* original ipx headers when these are available for this platform */ + +#ifndef SA_FAMILY_DECL +# define SA_FAMILY_DECL short sa_family +#endif + +#define NSPROTO_IPX 1000 +#define NSPROTO_SPX 1256 +#define NSPROTO_SPXII 1257 + +/* END HACK */ + +#ifdef NO_PTHREAD_RTL +#if !defined FREEBSD +#if !defined NETBSD +struct passwd *getpwent_r(struct passwd *pwd, char *buffer, int buflen); +#endif +extern struct spwd *getspnam_r(const char *name, struct spwd *result, + char *buffer, int buflen); + +#if !defined MACOSX +struct tm *localtime_r(const time_t *timep, struct tm *buffer); +struct tm *gmtime_r(const time_t *timep, struct tm *buffer); +#endif +#endif /* !defined(FREEBSD) */ +#endif + +#endif // INCLUDED_SAL_OSL_UNX_SYSTEM_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/system.mm b/sal/osl/unx/system.mm new file mode 100644 index 000000000..7495a3e73 --- /dev/null +++ b/sal/osl/unx/system.mm @@ -0,0 +1 @@ +#include "system.cxx" diff --git a/sal/osl/unx/tempfile.cxx b/sal/osl/unx/tempfile.cxx new file mode 100644 index 000000000..29a4d453f --- /dev/null +++ b/sal/osl/unx/tempfile.cxx @@ -0,0 +1,340 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include "system.hxx" +#include +#include +#include +#include +#include + +#include "file_url.hxx" +#include "file_impl.hxx" + +#include + +oslFileError SAL_CALL osl_getTempDirURL( rtl_uString** pustrTempDir ) +{ + oslFileError error; + /* described in environ(7) */ + const char *pValue = getenv( "TMPDIR" ); + rtl_uString *ustrTempPath = nullptr; + + if ( !pValue ) + pValue = getenv( "TEMP" ); + + if ( !pValue ) + pValue = getenv( "TMP" ); + + if ( !pValue ) + pValue = "/tmp"; + + auto nLen = strlen(pValue); + while (nLen > 1 && pValue[nLen - 1] == '/') // Allow path consisting of single "/" + --nLen; + rtl_string2UString( &ustrTempPath, pValue, nLen, osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); + assert(ustrTempPath); + error = osl_getFileURLFromSystemPath( ustrTempPath, pustrTempDir ); + rtl_uString_release( ustrTempPath ); + + return error; +} + +/****************************************************************** + * Generates a random unique file name. We're using the scheme + * from the standard c-lib function mkstemp to generate a more + * or less random unique file name + * + * @param rand_name + * receives the random name + ******************************************************************/ + +const char LETTERS[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; +const int COUNT_OF_LETTERS = SAL_N_ELEMENTS(LETTERS) - 1; + +#define RAND_NAME_LENGTH 6 + +static void osl_gen_random_name_impl_(rtl_uString** rand_name) +{ + static uint64_t value; + + char buffer[RAND_NAME_LENGTH]; + struct timeval tv; + uint64_t v; + int i; + + gettimeofday(&tv, nullptr); + + value += (static_cast(tv.tv_usec) << 16) ^ tv.tv_sec ^ getpid(); + + v = value; + + for (i = 0; i < RAND_NAME_LENGTH; i++) + { + buffer[i] = LETTERS[v % COUNT_OF_LETTERS]; + v /= COUNT_OF_LETTERS; + } + + rtl_string2UString( + rand_name, + buffer, + RAND_NAME_LENGTH, + RTL_TEXTENCODING_ASCII_US, + OSTRING_TO_OUSTRING_CVTFLAGS); + + assert(*rand_name); +} + +/***************************************************************** + * Helper function + * Either use the directory provided or the result of + * osl_getTempDirUrl and return it as system path and file url + ****************************************************************/ + +static oslFileError osl_setup_base_directory_impl_( + rtl_uString* pustrDirectoryURL, + rtl_uString** ppustr_base_dir) +{ + rtl_uString* dir_url = nullptr; + rtl_uString* dir = nullptr; + oslFileError error = osl_File_E_None; + + if (pustrDirectoryURL) + rtl_uString_assign(&dir_url, pustrDirectoryURL); + else + error = osl_getTempDirURL(&dir_url); + + if (error == osl_File_E_None) + { + error = getSystemPathFromFileURL_Ex(dir_url, &dir); + rtl_uString_release(dir_url); + } + + if (error == osl_File_E_None) + { + rtl_uString_assign(ppustr_base_dir, dir); + rtl_uString_release(dir); + } + + return error; +} + +/***************************************************************** + * osl_setup_createTempFile_impl + * validate input parameter, setup variables + ****************************************************************/ + + static oslFileError osl_setup_createTempFile_impl_( + rtl_uString* pustrDirectoryURL, + oslFileHandle* pHandle, + rtl_uString** ppustrTempFileURL, + rtl_uString** ppustr_base_dir, + bool* b_delete_on_close) + { + oslFileError osl_error; + + OSL_PRECOND(((nullptr != pHandle) || (nullptr != ppustrTempFileURL)), "Invalid parameter!"); + + if ((pHandle == nullptr) && (ppustrTempFileURL == nullptr)) + { + osl_error = osl_File_E_INVAL; + } + else + { + osl_error = osl_setup_base_directory_impl_( + pustrDirectoryURL, ppustr_base_dir); + + *b_delete_on_close = (ppustrTempFileURL == nullptr); + } + + return osl_error; + } + +/***************************************************************** + * Create a unique file in the specified directory and return + * its name + ****************************************************************/ + +static oslFileError osl_create_temp_file_impl_( + const rtl_uString* pustr_base_directory, + oslFileHandle* file_handle, + rtl_uString** ppustr_temp_file_name) +{ + rtl_uString* rand_name = nullptr; + sal_uInt32 len_base_dir = 0; + rtl_uString* tmp_file_path = nullptr; + rtl_uString* tmp_file_url = nullptr; + sal_Int32 capacity = 0; + oslFileError osl_error = osl_File_E_None; + sal_Int32 offset_file_name; + const sal_Unicode* puchr; + + OSL_PRECOND(pustr_base_directory, "Invalid Parameter"); + OSL_PRECOND(file_handle, "Invalid Parameter"); + OSL_PRECOND(ppustr_temp_file_name, "Invalid Parameter"); + + len_base_dir = rtl_uString_getLength(pustr_base_directory); + + rtl_uString_new_WithLength( + &tmp_file_path, + (len_base_dir + 1 + RAND_NAME_LENGTH)); + capacity = len_base_dir + 1 + RAND_NAME_LENGTH; + + rtl_uStringbuffer_insert( + &tmp_file_path, + &capacity, + 0, + rtl_uString_getStr(const_cast(pustr_base_directory)), + len_base_dir); + + offset_file_name = len_base_dir; + + puchr = rtl_uString_getStr(tmp_file_path); + + /* ensure that the last character is a '/' */ + + if (puchr[len_base_dir - 1] != '/') + { + rtl_uStringbuffer_insert_ascii( + &tmp_file_path, + &capacity, + len_base_dir, + "/", + 1); + + offset_file_name++; + } + + while(true) /* try until success */ + { + osl_gen_random_name_impl_(&rand_name); + + rtl_uStringbuffer_insert( + &tmp_file_path, + &capacity, + offset_file_name, + rtl_uString_getStr(rand_name), + rtl_uString_getLength(rand_name)); + + osl_error = osl_getFileURLFromSystemPath( + tmp_file_path, &tmp_file_url); + + if (osl_error == osl_File_E_None) + { + osl_error = openFile( + tmp_file_url, + file_handle, + osl_File_OpenFlag_Read | + osl_File_OpenFlag_Write | + osl_File_OpenFlag_Create, + S_IRUSR | S_IWUSR); + } + + /* in case of error osl_File_E_EXIST we simply try again else we give up */ + + if (osl_error != osl_File_E_EXIST) + { + rtl_uString_release(rand_name); + + if (tmp_file_url) + rtl_uString_release(tmp_file_url); + + break; + } + } /* while(1) */ + + if (osl_error == osl_File_E_None) + rtl_uString_assign(ppustr_temp_file_name, tmp_file_path); + + rtl_uString_release(tmp_file_path); + + return osl_error; +} + +oslFileError SAL_CALL osl_createTempFile( + rtl_uString* pustrDirectoryURL, + oslFileHandle* pHandle, + rtl_uString** ppustrTempFileURL) +{ + rtl_uString* base_directory = nullptr; + oslFileHandle temp_file_handle = nullptr; + bool b_delete_on_close; + oslFileError osl_error; + + osl_error = osl_setup_createTempFile_impl_( + pustrDirectoryURL, + pHandle, + ppustrTempFileURL, + &base_directory, + &b_delete_on_close); + + if (osl_error != osl_File_E_None) + return osl_error; + + rtl_uString* temp_file_name = nullptr; + osl_error = osl_create_temp_file_impl_( + base_directory, &temp_file_handle, &temp_file_name); + + rtl_uString* temp_file_url = nullptr; + if (osl_error == osl_File_E_None) + { + osl_error = osl_getFileURLFromSystemPath(temp_file_name, &temp_file_url); + rtl_uString_release(temp_file_name); + } + + if (osl_error == osl_File_E_None) + { + if (b_delete_on_close) + { + osl_error = osl_removeFile(temp_file_url); + + if (osl_error == osl_File_E_None) + { + *pHandle = temp_file_handle; + temp_file_handle = nullptr; + } + } + else + { + if (pHandle) + { + *pHandle = temp_file_handle; + temp_file_handle = nullptr; + } + + rtl_uString_assign(ppustrTempFileURL, temp_file_url); + } + + rtl_uString_release(temp_file_url); + } + + if (temp_file_handle) + osl_closeFile(temp_file_handle); + + rtl_uString_release(base_directory); + + return osl_error; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/thread.cxx b/sal/osl/unx/thread.cxx new file mode 100644 index 000000000..b122c5f31 --- /dev/null +++ b/sal/osl/unx/thread.cxx @@ -0,0 +1,1102 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include +#include + +#include "system.hxx" +#include "unixerrnostring.hxx" +#include +#if defined(OPENBSD) +#include +#endif +#ifdef __FreeBSD__ +#if __FreeBSD_version <= 1201517 +#include +#define pthread_setname_np pthread_set_name_np +#endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef ANDROID +#include +#include +#include +#endif + +#if defined LINUX && ! defined __FreeBSD_kernel__ +#include +#endif + +/**************************************************************************** + * @@@ TODO @@@ + * + * (1) 'osl_thread_priority_init_Impl()' + * - insane assumption that initializing caller is main thread + * - use _POSIX_THREAD_PRIORITY_SCHEDULING, not NO_PTHREAD_PRIORITY (?) + * - POSIX doesn't require defined prio's for SCHED_OTHER (!) + * - use SCHED_RR instead of SCHED_OTHER for defined behaviour (?) + * (2) 'oslThreadIdentifier' and '{insert|remove|lookup}ThreadId()' + * - cannot reliably be applied to 'alien' threads; + * - memory leak for 'alien' thread 'HashEntry's; + * - use 'reinterpret_cast(pthread_t)' as identifier + * instead (?) + * - if yes, change 'oslThreadIdentifier' to 'intptr_t' or similar + * (3) 'oslSigAlarmHandler()' (#71232#) + * - [Under Solaris we get SIGALRM in e.g. pthread_join which terminates + * the process. So we initialize our signal handling module and do + * register a SIGALRM Handler which catches and ignores it] + * - should this still happen, 'signal.c' needs to be fixed instead. + * + ****************************************************************************/ + +#define THREADIMPL_FLAGS_TERMINATE 0x00001 +#define THREADIMPL_FLAGS_STARTUP 0x00002 +#define THREADIMPL_FLAGS_SUSPENDED 0x00004 +#define THREADIMPL_FLAGS_ACTIVE 0x00008 +#define THREADIMPL_FLAGS_ATTACHED 0x00010 +#define THREADIMPL_FLAGS_DESTROYED 0x00020 + +namespace { + +typedef struct osl_thread_impl_st +{ + pthread_t m_hThread; + oslThreadIdentifier m_Ident; /* @@@ see TODO @@@ */ + short m_Flags; + oslWorkerFunction m_WorkerFunction; + void* m_pData; + pthread_mutex_t m_Lock; + pthread_cond_t m_Cond; +} Thread_Impl; + +#if !defined NO_PTHREAD_PRIORITY +struct osl_thread_priority_st +{ + int m_Highest; + int m_Above_Normal; + int m_Normal; + int m_Below_Normal; + int m_Lowest; +}; +#endif + +} + +#if !defined NO_PTHREAD_PRIORITY +#define OSL_THREAD_PRIORITY_INITIALIZER { 127, 96, 64, 32, 0 } +#endif + +static void osl_thread_priority_init_Impl(); + +namespace { + +struct osl_thread_textencoding_st +{ + pthread_key_t m_key; /* key to store thread local text encoding */ + rtl_TextEncoding m_default; /* the default text encoding */ +}; + +} + +#define OSL_THREAD_TEXTENCODING_INITIALIZER { 0, RTL_TEXTENCODING_DONTKNOW } +static void osl_thread_textencoding_init_Impl(); + +namespace { + +struct osl_thread_global_st +{ + pthread_once_t m_once; +#if !defined NO_PTHREAD_PRIORITY + struct osl_thread_priority_st m_priority; +#endif + struct osl_thread_textencoding_st m_textencoding; +}; + +} + +static struct osl_thread_global_st g_thread = +{ + PTHREAD_ONCE_INIT, +#if !defined NO_PTHREAD_PRIORITY + OSL_THREAD_PRIORITY_INITIALIZER, +#endif + OSL_THREAD_TEXTENCODING_INITIALIZER +}; + +static void osl_thread_init_Impl(); + +static Thread_Impl* osl_thread_construct_Impl(); +static void osl_thread_destruct_Impl (Thread_Impl ** ppImpl); + +static void* osl_thread_start_Impl (void * pData); +static void osl_thread_cleanup_Impl (Thread_Impl * pImpl); + +static oslThread osl_thread_create_Impl ( + oslWorkerFunction pWorker, void * pThreadData, short nFlags); + +/* @@@ see TODO @@@ */ +static oslThreadIdentifier insertThreadId (pthread_t hThread); +static oslThreadIdentifier lookupThreadId (pthread_t hThread); +static void removeThreadId (pthread_t hThread); + +static void osl_thread_init_Impl() +{ + osl_thread_priority_init_Impl(); + osl_thread_textencoding_init_Impl(); +} + +Thread_Impl* osl_thread_construct_Impl() +{ + Thread_Impl* pImpl = new Thread_Impl; + memset (pImpl, 0, sizeof(Thread_Impl)); + + pthread_mutex_init (&(pImpl->m_Lock), PTHREAD_MUTEXATTR_DEFAULT); + pthread_cond_init (&(pImpl->m_Cond), PTHREAD_CONDATTR_DEFAULT); + return pImpl; +} + +static void osl_thread_destruct_Impl (Thread_Impl ** ppImpl) +{ + assert(ppImpl); + if (*ppImpl) + { + pthread_cond_destroy (&((*ppImpl)->m_Cond)); + pthread_mutex_destroy (&((*ppImpl)->m_Lock)); + + delete *ppImpl; + (*ppImpl) = nullptr; + } +} + +static void osl_thread_cleanup_Impl (Thread_Impl * pImpl) +{ + pthread_t thread; + bool attached; + bool destroyed; + + pthread_mutex_lock (&(pImpl->m_Lock)); + + thread = pImpl->m_hThread; + attached = (pImpl->m_Flags & THREADIMPL_FLAGS_ATTACHED) != 0; + destroyed = (pImpl->m_Flags & THREADIMPL_FLAGS_DESTROYED) != 0; + pImpl->m_Flags &= ~(THREADIMPL_FLAGS_ACTIVE | THREADIMPL_FLAGS_ATTACHED); + + pthread_mutex_unlock (&(pImpl->m_Lock)); + + /* release oslThreadIdentifier @@@ see TODO @@@ */ + removeThreadId (thread); + + if (attached) + { + pthread_detach (thread); + } + + if (destroyed) + { + osl_thread_destruct_Impl (&pImpl); + } +} + +static void* osl_thread_start_Impl (void* pData) +{ + bool terminate; + Thread_Impl* pImpl= static_cast(pData); + + assert(pImpl); + + pthread_mutex_lock (&(pImpl->m_Lock)); + + /* request oslThreadIdentifier @@@ see TODO @@@ */ + pImpl->m_Ident = insertThreadId (pImpl->m_hThread); + + /* signal change from STARTUP to ACTIVE state */ + pImpl->m_Flags &= ~THREADIMPL_FLAGS_STARTUP; + pImpl->m_Flags |= THREADIMPL_FLAGS_ACTIVE; + pthread_cond_signal (&(pImpl->m_Cond)); + + /* Check if thread is started in SUSPENDED state */ + while (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED) + { + /* wait until SUSPENDED flag is cleared */ + pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock)); + } + + /* check for SUSPENDED to TERMINATE state change */ + terminate = ((pImpl->m_Flags & THREADIMPL_FLAGS_TERMINATE) > 0); + + pthread_mutex_unlock (&(pImpl->m_Lock)); + + if (!terminate) + { +#ifdef ANDROID + JNIEnv* env = 0; + int res = (*lo_get_javavm()).AttachCurrentThread(&env, NULL); + __android_log_print(ANDROID_LOG_INFO, "LibreOffice", "New sal thread started and attached res=%d", res); +#endif + /* call worker function */ + pImpl->m_WorkerFunction(pImpl->m_pData); + +#ifdef ANDROID + res = (*lo_get_javavm()).DetachCurrentThread(); + __android_log_print(ANDROID_LOG_INFO, "LibreOffice", "Detached finished sal thread res=%d", res); +#endif + } + + osl_thread_cleanup_Impl (pImpl); + return nullptr; +} + +static oslThread osl_thread_create_Impl ( + oslWorkerFunction pWorker, + void* pThreadData, + short nFlags) +{ + Thread_Impl* pImpl; +#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS) + pthread_attr_t attr; + size_t stacksize; +#endif + int nRet=0; + + pImpl = osl_thread_construct_Impl(); + if (!pImpl) + return nullptr; /* ENOMEM */ + + pImpl->m_WorkerFunction = pWorker; + pImpl->m_pData = pThreadData; + pImpl->m_Flags = nFlags | THREADIMPL_FLAGS_STARTUP; + + pthread_mutex_lock (&(pImpl->m_Lock)); + +#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS) + if (pthread_attr_init(&attr) != 0) + return nullptr; + +#if defined OPENBSD + stacksize = 262144; +#elif !ENABLE_RUNTIME_OPTIMIZATIONS + stacksize = 12 * 1024 * 1024; // 8MB is not enough for ASAN on x86-64 +#else + stacksize = 1 * 1024 * 1024; // macOS default for non-main threads (512kB) is not enough... +#endif + if (pthread_attr_setstacksize(&attr, stacksize) != 0) { + pthread_attr_destroy(&attr); + return nullptr; + } +#endif + + if ((nRet = pthread_create ( + &(pImpl->m_hThread), +#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS) + &attr, +#else + PTHREAD_ATTR_DEFAULT, +#endif + osl_thread_start_Impl, + static_cast(pImpl))) != 0) + { + SAL_WARN( + "sal.osl", + "pthread_create failed: " << UnixErrnoString(nRet)); + + pthread_mutex_unlock (&(pImpl->m_Lock)); + osl_thread_destruct_Impl (&pImpl); + + return nullptr; + } + +#if defined OPENBSD || defined MACOSX || (defined LINUX && !ENABLE_RUNTIME_OPTIMIZATIONS) + pthread_attr_destroy(&attr); +#endif + + /* wait for change from STARTUP to ACTIVE state */ + while (pImpl->m_Flags & THREADIMPL_FLAGS_STARTUP) + { + /* wait until STARTUP flag is cleared */ + pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock)); + } + + pthread_mutex_unlock (&(pImpl->m_Lock)); + + return static_cast(pImpl); +} + +oslThread osl_createThread ( + oslWorkerFunction pWorker, + void * pThreadData) +{ + return osl_thread_create_Impl ( + pWorker, + pThreadData, + THREADIMPL_FLAGS_ATTACHED); +} + +oslThread osl_createSuspendedThread ( + oslWorkerFunction pWorker, + void * pThreadData) +{ + return osl_thread_create_Impl ( + pWorker, + pThreadData, + THREADIMPL_FLAGS_ATTACHED | + THREADIMPL_FLAGS_SUSPENDED ); +} + +void SAL_CALL osl_destroyThread(oslThread Thread) +{ + if (Thread != nullptr) { + Thread_Impl * impl = static_cast(Thread); + bool active; + pthread_mutex_lock(&impl->m_Lock); + active = (impl->m_Flags & THREADIMPL_FLAGS_ACTIVE) != 0; + impl->m_Flags |= THREADIMPL_FLAGS_DESTROYED; + pthread_mutex_unlock(&impl->m_Lock); + if (!active) { + osl_thread_destruct_Impl(&impl); + } + } +} + +void SAL_CALL osl_resumeThread(oslThread Thread) +{ + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + { + SAL_WARN("sal.osl", "invalid osl_resumeThread(nullptr) call"); + return; /* EINVAL */ + } + + pthread_mutex_lock (&(pImpl->m_Lock)); + + if (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED) + { + /* clear SUSPENDED flag */ + pImpl->m_Flags &= ~THREADIMPL_FLAGS_SUSPENDED; + pthread_cond_signal (&(pImpl->m_Cond)); + } + + pthread_mutex_unlock (&(pImpl->m_Lock)); +} + +void SAL_CALL osl_suspendThread(oslThread Thread) +{ + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + { + SAL_WARN("sal.osl", "invalid osl_suspendThread(nullptr) call"); + return; /* EINVAL */ + } + + pthread_mutex_lock (&(pImpl->m_Lock)); + + pImpl->m_Flags |= THREADIMPL_FLAGS_SUSPENDED; + + if (pthread_equal (pthread_self(), pImpl->m_hThread)) + { + /* self suspend */ + while (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED) + { + /* wait until SUSPENDED flag is cleared */ + pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock)); + } + } + + pthread_mutex_unlock (&(pImpl->m_Lock)); +} + +sal_Bool SAL_CALL osl_isThreadRunning(const oslThread Thread) +{ + bool active; + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + return false; + + pthread_mutex_lock (&(pImpl->m_Lock)); + active = ((pImpl->m_Flags & THREADIMPL_FLAGS_ACTIVE) > 0); + pthread_mutex_unlock (&(pImpl->m_Lock)); + + return active; +} + +void SAL_CALL osl_joinWithThread(oslThread Thread) +{ + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + return; + + pthread_mutex_lock (&(pImpl->m_Lock)); + + pthread_t const thread = pImpl->m_hThread; + bool const attached = ((pImpl->m_Flags & THREADIMPL_FLAGS_ATTACHED) > 0); + + /* check this only if *this* thread is still attached - if it's not, + then it could have terminated and another newly created thread could + have recycled the same id as m_hThread! */ + if (attached && pthread_equal(pthread_self(), pImpl->m_hThread)) + { + assert(false); /* Win32 implementation would deadlock here! */ + /* self join */ + pthread_mutex_unlock (&(pImpl->m_Lock)); + return; /* EDEADLK */ + } + + pImpl->m_Flags &= ~THREADIMPL_FLAGS_ATTACHED; + + pthread_mutex_unlock (&(pImpl->m_Lock)); + + if (attached) + { + pthread_join (thread, nullptr); + } +} + +void SAL_CALL osl_terminateThread(oslThread Thread) +{ + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + { + SAL_WARN("sal.osl", "invalid osl_terminateThread(nullptr) call"); + return; /* EINVAL */ + } + + pthread_mutex_lock (&(pImpl->m_Lock)); + + if (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED) + { + /* clear SUSPENDED flag */ + pImpl->m_Flags &= ~THREADIMPL_FLAGS_SUSPENDED; + pthread_cond_signal (&(pImpl->m_Cond)); + } + + pImpl->m_Flags |= THREADIMPL_FLAGS_TERMINATE; + + pthread_mutex_unlock (&(pImpl->m_Lock)); +} + +sal_Bool SAL_CALL osl_scheduleThread(oslThread Thread) +{ + bool terminate; + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + { + SAL_WARN("sal.osl", "invalid osl_scheduleThread(nullptr) call"); + return false; /* EINVAL */ + } + + if (!(pthread_equal (pthread_self(), pImpl->m_hThread))) + { + SAL_WARN("sal.osl", "invalid osl_scheduleThread(non-self) call"); + return false; /* EINVAL */ + } + + pthread_mutex_lock (&(pImpl->m_Lock)); + + while (pImpl->m_Flags & THREADIMPL_FLAGS_SUSPENDED) + { + /* wait until SUSPENDED flag is cleared */ + pthread_cond_wait (&(pImpl->m_Cond), &(pImpl->m_Lock)); + } + + terminate = ((pImpl->m_Flags & THREADIMPL_FLAGS_TERMINATE) > 0); + + pthread_mutex_unlock(&(pImpl->m_Lock)); + + return !terminate; +} + +void SAL_CALL osl_waitThread(const TimeValue* pDelay) +{ + if (pDelay) + { + struct timespec delay; + + SET_TIMESPEC(delay, pDelay->Seconds, pDelay->Nanosec); + + SLEEP_TIMESPEC(delay); + } +} + +/** Yields thread + + @attention Note that POSIX scheduling @em really requires threads to call this + function, since a thread only reschedules to other thread, when + it blocks (sleep, blocking I/O) OR calls sched_yield(). +*/ +void SAL_CALL osl_yieldThread() +{ + sched_yield(); +} + +void SAL_CALL osl_setThreadName(char const * name) +{ + assert( name ); +#if defined LINUX && ! defined __FreeBSD_kernel__ + const int LINUX_THREAD_NAME_MAXLEN = 15; + if ( strlen( name ) > LINUX_THREAD_NAME_MAXLEN ) + SAL_INFO( "sal.osl", "osl_setThreadName truncated thread name to " + << LINUX_THREAD_NAME_MAXLEN << " chars from name '" + << name << "'" ); + char shortname[ LINUX_THREAD_NAME_MAXLEN + 1 ]; + shortname[ LINUX_THREAD_NAME_MAXLEN ] = '\0'; + strncpy( shortname, name, LINUX_THREAD_NAME_MAXLEN ); + int err = pthread_setname_np( pthread_self(), shortname ); + if ( 0 != err ) + SAL_WARN("sal.osl", "pthread_setname_np failed with errno " << err); +#elif defined __FreeBSD__ + pthread_setname_np( pthread_self(), name ); +#elif defined MACOSX || defined IOS + pthread_setname_np( name ); +#else + (void) name; +#endif +} + +/* osl_getThreadIdentifier @@@ see TODO @@@ */ + +namespace { + +struct HashEntry +{ + pthread_t Handle; + oslThreadIdentifier Ident; + HashEntry * Next; +}; + +} + +static HashEntry* HashTable[31]; +const int HashSize = SAL_N_ELEMENTS(HashTable); + +static std::mutex HashLock; + +#if ! ((defined LINUX && !defined __FreeBSD_kernel__) || defined MACOSX || defined IOS) +static oslThreadIdentifier LastIdent = 0; +#endif + +namespace { + +std::size_t HASHID(pthread_t x) +{ return std::hash()(x) % HashSize; } + +} + +static oslThreadIdentifier lookupThreadId (pthread_t hThread) +{ + HashEntry *pEntry; + + std::unique_lock aGuard(HashLock); + + pEntry = HashTable[HASHID(hThread)]; + while (pEntry != nullptr) + { + if (pthread_equal(pEntry->Handle, hThread)) + { + return pEntry->Ident; + } + pEntry = pEntry->Next; + } + + return 0; +} + +static oslThreadIdentifier insertThreadId (pthread_t hThread) +{ + HashEntry *pEntry, *pInsert = nullptr; + + std::unique_lock aGuard(HashLock); + + pEntry = HashTable[HASHID(hThread)]; + + while (pEntry != nullptr) + { + if (pthread_equal(pEntry->Handle, hThread)) + break; + + pInsert = pEntry; + pEntry = pEntry->Next; + } + + if (pEntry == nullptr) + { + pEntry = static_cast(calloc(sizeof(HashEntry), 1)); + + pEntry->Handle = hThread; + +#if defined LINUX && ! defined __FreeBSD_kernel__ +#if defined __GLIBC__ && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 30)) + // gettid returns a pid_t, which POSIX defines to be a signed integer type; assume that all + // valid pid_t values on Linux are positive (zero is filtered out in the generic code + // below): + pid_t const tid = gettid(); + assert(tid >= 0); +#else + long const tid = syscall(SYS_gettid); + if (tid < 0 || o3tl::make_unsigned(tid) > std::numeric_limits::max()) { + std::abort(); + } +#endif + pEntry->Ident = tid; +#elif defined MACOSX || defined IOS + // currently the value of pthread_threadid_np is the same then + // syscall(SYS_thread_selfid), which returns an int as the TID. + // may change, as the syscall interface was deprecated. + uint64_t mac_tid; + pthread_threadid_np(nullptr, &mac_tid); + if (mac_tid > SAL_MAX_UINT32) + std::abort(); + pEntry->Ident = mac_tid; +#else + ++LastIdent; + if (0 == LastIdent) + LastIdent = 1; + pEntry->Ident = LastIdent; +#endif + if (0 == pEntry->Ident) + std::abort(); + + if (pInsert) + pInsert->Next = pEntry; + else + HashTable[HASHID(hThread)] = pEntry; + } + + return pEntry->Ident; +} + +static void removeThreadId (pthread_t hThread) +{ + HashEntry *pEntry, *pRemove = nullptr; + + std::unique_lock aGuard(HashLock); + + pEntry = HashTable[HASHID(hThread)]; + while (pEntry != nullptr) + { + if (pthread_equal(pEntry->Handle, hThread)) + break; + + pRemove = pEntry; + pEntry = pEntry->Next; + } + + if (pEntry != nullptr) + { + if (pRemove) + pRemove->Next = pEntry->Next; + else + HashTable[HASHID(hThread)] = pEntry->Next; + + free(pEntry); + } +} + +oslThreadIdentifier SAL_CALL osl_getThreadIdentifier(oslThread Thread) +{ + Thread_Impl* pImpl= static_cast(Thread); + oslThreadIdentifier Ident; + + if (pImpl) + Ident = pImpl->m_Ident; + else + { + /* current thread */ + pthread_t current = pthread_self(); + + Ident = lookupThreadId (current); + if (Ident == 0) + /* @@@ see TODO: alien pthread_self() @@@ */ + Ident = insertThreadId (current); + } + + return Ident; +} + +/***************************************************************************** + @@@ see TODO @@@ + osl_thread_priority_init_Impl + + set the base-priority of the main-thread to + oslThreadPriorityNormal (64) since 0 (lowest) is + the system default. This behaviour collides with + our enum-priority definition (highest..normal..lowest). + A normaluser will expect the main-thread of an app. + to have the "normal" priority. + +*****************************************************************************/ +static void osl_thread_priority_init_Impl() +{ +#ifndef NO_PTHREAD_PRIORITY + struct sched_param param; + int policy=0; + int nRet=0; + +/* @@@ see TODO: calling thread may not be main thread @@@ */ + + if ((nRet = pthread_getschedparam(pthread_self(), &policy, ¶m)) != 0) + { + SAL_WARN( + "sal.osl", + "pthread_getschedparam failed: " << UnixErrnoString(nRet)); + return; + } + +#if defined (__sun) + if ( policy >= _SCHED_NEXT) + { + /* mfe: pthread_getschedparam on Solaris has a possible Bug */ + /* one gets 959917873 as the policy */ + /* so set the policy to a default one */ + policy=SCHED_OTHER; + } +#endif /* __sun */ + + if ((nRet = sched_get_priority_min(policy) ) != -1) + { + SAL_INFO( + "sal.osl", "Min Prioriy for policy " << policy << " == " << nRet); + g_thread.m_priority.m_Lowest=nRet; + } + else + { + int e = errno; + SAL_WARN( + "sal.osl", + "sched_get_priority_min failed: " << UnixErrnoString(e)); + } + + if ((nRet = sched_get_priority_max(policy) ) != -1) + { + SAL_INFO( + "sal.osl", "Max Prioriy for policy " << policy << " == " << nRet); + g_thread.m_priority.m_Highest=nRet; + } + else + { + int e = errno; + SAL_WARN( + "sal.osl", + "sched_get_priority_max failed: " << UnixErrnoString(e)); + } + + g_thread.m_priority.m_Normal = + (g_thread.m_priority.m_Lowest + g_thread.m_priority.m_Highest) / 2; + g_thread.m_priority.m_Below_Normal = + (g_thread.m_priority.m_Lowest + g_thread.m_priority.m_Normal) / 2; + g_thread.m_priority.m_Above_Normal = + (g_thread.m_priority.m_Normal + g_thread.m_priority.m_Highest) / 2; + +/* @@@ set prio of calling (not main) thread (?) @@@ */ + + param.sched_priority= g_thread.m_priority.m_Normal; + + if ((nRet = pthread_setschedparam(pthread_self(), policy, ¶m)) != 0) + { + SAL_WARN( + "sal.osl", + "pthread_setschedparam failed: " << UnixErrnoString(nRet)); + SAL_INFO( + "sal.osl", + "Thread ID " << pthread_self() << ", Policy " << policy + << ", Priority " << param.sched_priority); + } + +#endif /* NO_PTHREAD_PRIORITY */ +} + +/** + Impl-Notes: contrary to solaris-docu, which claims + valid priority-levels from 0 .. INT_MAX, only the + range 0..127 is accepted. (0 lowest, 127 highest) +*/ +void SAL_CALL osl_setThreadPriority ( + oslThread Thread, + oslThreadPriority Priority) +{ +#ifndef NO_PTHREAD_PRIORITY + + struct sched_param Param; + int policy; + int nRet; + +#endif /* NO_PTHREAD_PRIORITY */ + + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + { + SAL_WARN("sal.osl", "invalid osl_setThreadPriority(nullptr, ...) call"); + return; /* EINVAL */ + } + +#ifdef NO_PTHREAD_PRIORITY + (void) Priority; /* unused */ +#else /* NO_PTHREAD_PRIORITY */ + + if (pthread_getschedparam(pImpl->m_hThread, &policy, &Param) != 0) + return; /* ESRCH */ + +#if defined (__sun) + if ( policy >= _SCHED_NEXT) + { + /* mfe: pthread_getschedparam on Solaris has a possible Bug */ + /* one gets 959917873 as the policy */ + /* so set the policy to a default one */ + policy=SCHED_OTHER; + } +#endif /* __sun */ + + pthread_once (&(g_thread.m_once), osl_thread_init_Impl); + + switch(Priority) + { + case osl_Thread_PriorityHighest: + Param.sched_priority= g_thread.m_priority.m_Highest; + break; + + case osl_Thread_PriorityAboveNormal: + Param.sched_priority= g_thread.m_priority.m_Above_Normal; + break; + + case osl_Thread_PriorityNormal: + Param.sched_priority= g_thread.m_priority.m_Normal; + break; + + case osl_Thread_PriorityBelowNormal: + Param.sched_priority= g_thread.m_priority.m_Below_Normal; + break; + + case osl_Thread_PriorityLowest: + Param.sched_priority= g_thread.m_priority.m_Lowest; + break; + + case osl_Thread_PriorityUnknown: + SAL_WARN( + "sal.osl", + "invalid osl_setThreadPriority(..., osl_Thread_PriorityUnknown)" + " call"); + return; + + default: + SAL_WARN( + "sal.osl", + "invalid osl_setThreadPriority(..., " << Priority << ") call"); + return; + } + + if ((nRet = pthread_setschedparam(pImpl->m_hThread, policy, &Param)) != 0) + { + SAL_WARN( + "sal.osl", + "pthread_setschedparam failed: " << UnixErrnoString(nRet)); + } + +#endif /* NO_PTHREAD_PRIORITY */ +} + +oslThreadPriority SAL_CALL osl_getThreadPriority(const oslThread Thread) +{ +#ifndef NO_PTHREAD_PRIORITY + + struct sched_param Param; + int Policy; + +#endif /* NO_PTHREAD_PRIORITY */ + + oslThreadPriority Priority = osl_Thread_PriorityNormal; + Thread_Impl* pImpl= static_cast(Thread); + + if (!pImpl) + { + SAL_WARN("sal.osl", "invalid osl_getThreadPriority(nullptr) call"); + return osl_Thread_PriorityUnknown; /* EINVAL */ + } + +#ifndef NO_PTHREAD_PRIORITY + + if (pthread_getschedparam(pImpl->m_hThread, &Policy, &Param) != 0) + return osl_Thread_PriorityUnknown; /* ESRCH */ + + pthread_once (&(g_thread.m_once), osl_thread_init_Impl); + + /* map pthread priority to enum */ + if (Param.sched_priority==g_thread.m_priority.m_Highest) + { + /* 127 - highest */ + Priority= osl_Thread_PriorityHighest; + } + else if (Param.sched_priority > g_thread.m_priority.m_Normal) + { + /* 65..126 - above normal */ + Priority= osl_Thread_PriorityAboveNormal; + } + else if (Param.sched_priority == g_thread.m_priority.m_Normal) + { + /* normal */ + Priority= osl_Thread_PriorityNormal; + } + else if (Param.sched_priority > g_thread.m_priority.m_Lowest) + { + /* 63..1 -below normal */ + Priority= osl_Thread_PriorityBelowNormal; + } + else if (Param.sched_priority == g_thread.m_priority.m_Lowest) + { + /* 0 - lowest */ + Priority= osl_Thread_PriorityLowest; + } + else + { + /* unknown */ + Priority= osl_Thread_PriorityUnknown; + } + +#endif /* NO_PTHREAD_PRIORITY */ + + return Priority; +} + +namespace { + +struct wrapper_pthread_key +{ + pthread_key_t m_key; + oslThreadKeyCallbackFunction pfnCallback; +}; + +} + +oslThreadKey SAL_CALL osl_createThreadKey( oslThreadKeyCallbackFunction pCallback ) +{ + wrapper_pthread_key *pKey = static_cast(malloc(sizeof(wrapper_pthread_key))); + + if (pKey) + { + pKey->pfnCallback = pCallback; + + if (pthread_key_create(&(pKey->m_key), pKey->pfnCallback) != 0) + { + free(pKey); + pKey = nullptr; + } + } + + return static_cast(pKey); +} + +void SAL_CALL osl_destroyThreadKey(oslThreadKey Key) +{ + wrapper_pthread_key *pKey = static_cast(Key); + if (pKey) + { + pthread_key_delete(pKey->m_key); + free(pKey); + } +} + +void* SAL_CALL osl_getThreadKeyData(oslThreadKey Key) +{ + wrapper_pthread_key *pKey = static_cast(Key); + return pKey ? pthread_getspecific(pKey->m_key) : nullptr; +} + +sal_Bool SAL_CALL osl_setThreadKeyData(oslThreadKey Key, void *pData) +{ + bool bRet; + void *pOldData = nullptr; + wrapper_pthread_key *pKey = static_cast(Key); + if (!pKey) + return false; + + if (pKey->pfnCallback) + pOldData = pthread_getspecific(pKey->m_key); + + bRet = (pthread_setspecific(pKey->m_key, pData) == 0); + + if (bRet && pKey->pfnCallback && pOldData) + pKey->pfnCallback(pOldData); + + return bRet; +} + +static void osl_thread_textencoding_init_Impl() +{ + rtl_TextEncoding defaultEncoding; + + /* create thread specific data key */ + pthread_key_create (&(g_thread.m_textencoding.m_key), nullptr); + + /* determine default text encoding */ + defaultEncoding = osl_getTextEncodingFromLocale(nullptr); + // Tools string functions call abort() on an unknown encoding so ASCII is a + // meaningful fallback: + if ( RTL_TEXTENCODING_DONTKNOW == defaultEncoding ) + { + SAL_WARN("sal.osl", "RTL_TEXTENCODING_DONTKNOW -> _ASCII_US"); + defaultEncoding = RTL_TEXTENCODING_ASCII_US; + } + + g_thread.m_textencoding.m_default = defaultEncoding; +} + +rtl_TextEncoding SAL_CALL osl_getThreadTextEncoding() +{ + rtl_TextEncoding threadEncoding; + + pthread_once (&(g_thread.m_once), osl_thread_init_Impl); + + /* check for thread specific encoding, use default if not set */ + threadEncoding = static_cast( + reinterpret_cast(pthread_getspecific(g_thread.m_textencoding.m_key))); + if (threadEncoding == 0) + threadEncoding = g_thread.m_textencoding.m_default; + + return threadEncoding; +} + +rtl_TextEncoding osl_setThreadTextEncoding(rtl_TextEncoding Encoding) +{ + rtl_TextEncoding oldThreadEncoding = osl_getThreadTextEncoding(); + + /* save encoding in thread local storage */ + pthread_setspecific ( + g_thread.m_textencoding.m_key, + reinterpret_cast(static_cast(Encoding))); + + return oldThreadEncoding; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/time.cxx b/sal/osl/unx/time.cxx new file mode 100644 index 000000000..a77015614 --- /dev/null +++ b/sal/osl/unx/time.cxx @@ -0,0 +1,310 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "saltime.hxx" +#include "system.hxx" + +#include +#include +#include + +#ifdef __MACH__ +#include +#include +#endif + +/* FIXME: detection should be done in configure script */ +#if defined(MACOSX) || defined(IOS) || defined(FREEBSD) || defined(NETBSD) || \ + defined(LINUX) || defined(OPENBSD) || defined(DRAGONFLY) +#define STRUCT_TM_HAS_GMTOFF 1 + +#elif defined(__sun) +#define HAS_ALTZONE 1 +#endif + +#ifdef __MACH__ +typedef mach_timespec_t osl_time_t; +#else +#if defined(_POSIX_TIMERS) +#define USE_CLOCK_GETTIME +typedef struct timespec osl_time_t; +#else +typedef struct timeval osl_time_t; +#endif +#endif +static osl_time_t startTime; + +sal_Bool SAL_CALL osl_getSystemTime(TimeValue* tv) +{ +#ifdef __MACH__ + clock_serv_t cclock; + mach_timespec_t mts; + + host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); + clock_get_time(cclock, &mts); + mach_port_deallocate(mach_task_self(), cclock); + + tv->Seconds = mts.tv_sec; + tv->Nanosec = mts.tv_nsec; +#else + int res; + osl_time_t tp; +#if defined(USE_CLOCK_GETTIME) + res = clock_gettime(CLOCK_REALTIME, &tp); +#else + res = gettimeofday(&tp, NULL); +#endif + + if (res != 0) + { + return false; + } + + tv->Seconds = tp.tv_sec; + #if defined(USE_CLOCK_GETTIME) + tv->Nanosec = tp.tv_nsec; + #else + tv->Nanosec = tp.tv_usec * 1000; + #endif +#endif + return true; +} + +sal_Bool SAL_CALL osl_getDateTimeFromTimeValue( const TimeValue* pTimeVal, oslDateTime* pDateTime ) +{ + struct tm *pSystemTime; + struct tm tmBuf; + time_t atime; + + atime = static_cast(pTimeVal->Seconds); + + /* Convert time from type time_t to struct tm */ + pSystemTime = gmtime_r( &atime, &tmBuf ); + + /* Convert struct tm to struct oslDateTime */ + if ( pSystemTime != nullptr ) + { + pDateTime->NanoSeconds = pTimeVal->Nanosec; + pDateTime->Seconds = pSystemTime->tm_sec; + pDateTime->Minutes = pSystemTime->tm_min; + pDateTime->Hours = pSystemTime->tm_hour; + pDateTime->Day = pSystemTime->tm_mday; + pDateTime->DayOfWeek = pSystemTime->tm_wday; + pDateTime->Month = pSystemTime->tm_mon + 1; + pDateTime->Year = pSystemTime->tm_year + 1900; + + return true; + } + + return false; +} + +sal_Bool SAL_CALL osl_getTimeValueFromDateTime( const oslDateTime* pDateTime, TimeValue* pTimeVal ) +{ + struct tm aTime; + time_t nSeconds; + + /* Convert struct oslDateTime to struct tm */ + aTime.tm_sec = pDateTime->Seconds; + aTime.tm_min = pDateTime->Minutes; + aTime.tm_hour = pDateTime->Hours; + aTime.tm_mday = pDateTime->Day; + + if ( pDateTime->Month > 0 ) + aTime.tm_mon = pDateTime->Month - 1; + else + return false; + + aTime.tm_year = pDateTime->Year - 1900; + + aTime.tm_isdst = -1; + aTime.tm_wday = 0; + aTime.tm_yday = 0; + +#if defined(STRUCT_TM_HAS_GMTOFF) + aTime.tm_gmtoff = 0; +#endif + + /* Convert time to calendar value */ + nSeconds = mktime( &aTime ); + + /* + * mktime expects the struct tm to be in local timezone, so we have to adjust + * the returned value to be timezone neutral. + */ + + if ( nSeconds != time_t(-1) ) + { + time_t bias; + + /* timezone corrections */ + tzset(); + +#if defined(STRUCT_TM_HAS_GMTOFF) + /* members of struct tm are corrected by mktime */ + bias = 0 - aTime.tm_gmtoff; + +#elif defined(HAS_ALTZONE) + /* check if daylight saving time is in effect */ + bias = aTime.tm_isdst > 0 ? altzone : timezone; +#else + /* expect daylight saving time to be one hour */ + bias = aTime.tm_isdst > 0 ? timezone - 3600 : timezone; +#endif + + pTimeVal->Seconds = nSeconds; + pTimeVal->Nanosec = pDateTime->NanoSeconds; + + if ( nSeconds > bias ) + pTimeVal->Seconds -= bias; + + return true; + } + + return false; +} + +sal_Bool SAL_CALL osl_getLocalTimeFromSystemTime( const TimeValue* pSystemTimeVal, TimeValue* pLocalTimeVal ) +{ + struct tm *pLocalTime; + struct tm tmBuf; + time_t bias; + time_t atime; + + atime = static_cast(pSystemTimeVal->Seconds); + pLocalTime = localtime_r( &atime, &tmBuf ); + +#if defined(STRUCT_TM_HAS_GMTOFF) + /* members of struct tm are corrected by mktime */ + bias = -pLocalTime->tm_gmtoff; + +#elif defined(HAS_ALTZONE) + /* check if daylight saving time is in effect */ + bias = pLocalTime->tm_isdst > 0 ? altzone : timezone; +#else + /* expect daylight saving time to be one hour */ + bias = pLocalTime->tm_isdst > 0 ? timezone - 3600 : timezone; +#endif + + if ( static_cast(pSystemTimeVal->Seconds) > bias ) + { + pLocalTimeVal->Seconds = pSystemTimeVal->Seconds - bias; + pLocalTimeVal->Nanosec = pSystemTimeVal->Nanosec; + + return true; + } + + return false; +} + +sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( const TimeValue* pLocalTimeVal, TimeValue* pSystemTimeVal ) +{ + struct tm *pLocalTime; + struct tm tmBuf; + time_t bias; + time_t atime; + + atime = static_cast(pLocalTimeVal->Seconds); + + /* Convert atime, which is a local time, to its GMT equivalent. Then, get + * the timezone offset for the local time for the GMT equivalent time. Note + * that we cannot directly use local time to determine the timezone offset + * because GMT is the only reliable time that we can determine timezone + * offset from. + */ + + atime = mktime( gmtime_r( &atime, &tmBuf ) ); + pLocalTime = localtime_r( &atime, &tmBuf ); + +#if defined(STRUCT_TM_HAS_GMTOFF) + /* members of struct tm are corrected by mktime */ + bias = 0 - pLocalTime->tm_gmtoff; + +#elif defined(HAS_ALTZONE) + /* check if daylight saving time is in effect */ + bias = pLocalTime->tm_isdst > 0 ? altzone : timezone; +#else + /* expect daylight saving time to be one hour */ + bias = pLocalTime->tm_isdst > 0 ? timezone - 3600 : timezone; +#endif + + if ( static_cast(pLocalTimeVal->Seconds) + bias > 0 ) + { + pSystemTimeVal->Seconds = pLocalTimeVal->Seconds + bias; + pSystemTimeVal->Nanosec = pLocalTimeVal->Nanosec; + + return true; + } + + return false; +} + +void sal_initGlobalTimer() +{ +#ifdef __MACH__ + clock_serv_t cclock; + + host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); + clock_get_time(cclock, &startTime); + mach_port_deallocate(mach_task_self(), cclock); +#else /* ! (MACOSX || IOS) */ +#if defined(USE_CLOCK_GETTIME) + clock_gettime(CLOCK_REALTIME, &startTime); +#else /* Ndef USE_CLOCK_GETTIME */ + gettimeofday( &startTime, NULL ); +#endif /* NDef USE_CLOCK_GETTIME */ +#endif /* ! (MACOSX || IOS) */ +} + +sal_uInt32 SAL_CALL osl_getGlobalTimer() +{ + sal_uInt32 nSeconds; + +#ifdef __MACH__ + clock_serv_t cclock; + mach_timespec_t currentTime; + + host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); + clock_get_time(cclock, ¤tTime); + mach_port_deallocate(mach_task_self(), cclock); + + nSeconds = ( currentTime.tv_sec - startTime.tv_sec ); + nSeconds = ( nSeconds * 1000 ) + static_cast(( currentTime.tv_nsec - startTime.tv_nsec) / 1000000 ); +#else + osl_time_t currentTime; + +#if defined(USE_CLOCK_GETTIME) + clock_gettime(CLOCK_REALTIME, ¤tTime); +#else + gettimeofday( ¤tTime, NULL ); +#endif + + nSeconds = static_cast( currentTime.tv_sec - startTime.tv_sec ); +#if defined(USE_CLOCK_GETTIME) + nSeconds = ( nSeconds * 1000 ) + static_cast(( currentTime.tv_nsec - startTime.tv_nsec) / 1000000 ); +#else + nSeconds = ( nSeconds * 1000 ) + (long) (( currentTime.tv_usec - startTime.tv_usec) / 1000 ); +#endif +#endif + return nSeconds; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/unixerrnostring.hxx b/sal/osl/unx/unixerrnostring.hxx new file mode 100644 index 000000000..9e13b04e6 --- /dev/null +++ b/sal/osl/unx/unixerrnostring.hxx @@ -0,0 +1,27 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_UNX_UNIXERRNOSTRING_HXX +#define INCLUDED_SAL_OSL_UNX_UNIXERRNOSTRING_HXX + +#include + +// Return the symbolic name of an errno value, like "ENOENT". + +// Rationale why to use this and not strerror(): This is intended to be used in SAL_INFO() and +// SAL_WARN(). Such messages are intended to be read by developers, not end-users. Developers are +// (or should be) familiar with symbolic errno names in code anyway. strerror() is localized and the +// localised error strings might be less familiar to a developer that happens to run a localised +// environment. + +std::string UnixErrnoString(int nErrno); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/uunxapi.cxx b/sal/osl/unx/uunxapi.cxx new file mode 100644 index 000000000..5311bc719 --- /dev/null +++ b/sal/osl/unx/uunxapi.cxx @@ -0,0 +1,905 @@ +/* -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include + +#include "uunxapi.hxx" +#include "system.hxx" +#include "unixerrnostring.hxx" +#include +#include +#include +#include + +#ifdef ANDROID +#include +#endif + +OString osl::OUStringToOString(std::u16string_view s) +{ + return rtl::OUStringToOString(s, osl_getThreadTextEncoding()); +} + +#if HAVE_FEATURE_MACOSX_SANDBOX + +#include +#include +#include + +static NSUserDefaults *userDefaults = NULL; +static bool isSandboxed = false; + +static void do_once() +{ + SecCodeRef code; + OSStatus rc = SecCodeCopySelf(kSecCSDefaultFlags, &code); + + SecStaticCodeRef staticCode; + if (rc == errSecSuccess) + rc = SecCodeCopyStaticCode(code, kSecCSDefaultFlags, &staticCode); + + CFDictionaryRef signingInformation; + if (rc == errSecSuccess) + rc = SecCodeCopySigningInformation(staticCode, kSecCSRequirementInformation, &signingInformation); + + CFDictionaryRef entitlements = NULL; + if (rc == errSecSuccess) + entitlements = (CFDictionaryRef) CFDictionaryGetValue(signingInformation, kSecCodeInfoEntitlementsDict); + + if (entitlements != NULL) + if (CFDictionaryGetValue(entitlements, CFSTR("com.apple.security.app-sandbox")) != NULL) + isSandboxed = true; + + if (isSandboxed) + userDefaults = [NSUserDefaults standardUserDefaults]; +} + +typedef struct { + NSURL *scopeURL; + NSAutoreleasePool *pool; +} accessFilePathState; + +static accessFilePathState * +prepare_to_access_file_path( const char *cpFilePath ) +{ + static pthread_once_t once = PTHREAD_ONCE_INIT; + pthread_once(&once, &do_once); + NSURL *fileURL = nil; + NSData *data = nil; + BOOL stale; + accessFilePathState *state; + + if (!isSandboxed) + return NULL; + + // If malloc() fails we are screwed anyway + state = (accessFilePathState*) malloc(sizeof(accessFilePathState)); + + state->pool = [[NSAutoreleasePool alloc] init]; + state->scopeURL = nil; + + if (userDefaults != nil) + fileURL = [NSURL fileURLWithPath:[NSString stringWithUTF8String:cpFilePath]]; + + if (fileURL != nil) + data = [userDefaults dataForKey:[@"bookmarkFor:" stringByAppendingString:[fileURL absoluteString]]]; + + if (data != nil) + state->scopeURL = [NSURL URLByResolvingBookmarkData:data + options:NSURLBookmarkResolutionWithSecurityScope + relativeToURL:nil + bookmarkDataIsStale:&stale + error:nil]; + if (state->scopeURL != nil) + [state->scopeURL startAccessingSecurityScopedResource]; + + return state; +} + +static void +done_accessing_file_path( const char * /*cpFilePath*/, accessFilePathState *state ) +{ + if (!isSandboxed) + return; + + int saved_errno = errno; + + if (state->scopeURL != nil) + [state->scopeURL stopAccessingSecurityScopedResource]; + [state->pool release]; + free(state); + + errno = saved_errno; +} + +#else + +typedef void accessFilePathState; + +#define prepare_to_access_file_path( cpFilePath ) nullptr + +#define done_accessing_file_path( cpFilePath, state ) ((void) cpFilePath, (void) state) + +#endif + +#ifdef MACOSX +/* + * Helper function for resolving Mac native alias files (not the same as unix alias files) + * and to return the resolved alias as OString + */ +static OString macxp_resolveAliasAndConvert(OString const & p) +{ + char path[PATH_MAX]; + if (p.getLength() < PATH_MAX) + { + strcpy(path, p.getStr()); + macxp_resolveAlias(path, PATH_MAX); + return OString(path); + } + return p; +} +#endif /* MACOSX */ + +int osl::access(const OString& pstrPath, int mode) +{ + OString fn = pstrPath; +#ifdef ANDROID + if (fn == "/assets" || fn.startsWith("/assets/")) + { + struct stat stat; + if (lo_apk_lstat(fn.getStr(), &stat) == -1) + return -1; + if (mode & W_OK) + { + errno = EACCES; + return -1; + } + return 0; + } +#endif + +#ifdef MACOSX + fn = macxp_resolveAliasAndConvert(fn); +#endif + + accessFilePathState *state = prepare_to_access_file_path(fn.getStr()); + + int result = ::access(fn.getStr(), mode); + int saved_errno = errno; + if (result == -1) + SAL_INFO("sal.file", "access(" << fn << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "access(" << fn << ",0" << std::oct << mode << std::dec << "): OK"); + + done_accessing_file_path(fn.getStr(), state); + + errno = saved_errno; + + return result; +} + +namespace { + +OString toOString(OString const & s) { return s; } + +OString toOString(std::u16string_view s) { return osl::OUStringToOString(s); } + +template T fromOString(OString const &) = delete; + +template<> OString fromOString(OString const & s) { return s; } + +template<> OUString fromOString(OString const & s) +{ return OStringToOUString(s, osl_getThreadTextEncoding()); } + +template bool realpath_(const T& pstrFileName, T& ppstrResolvedName) +{ + OString fn = toOString(pstrFileName); +#if defined ANDROID || defined(EMSCRIPTEN) +#if defined ANDROID + if (fn == "/assets" || fn.startsWith("/assets/")) +#else + if (fn == "/instdir" || fn.startsWith("/instdir/")) +#endif + { + if (osl::access(fn, F_OK) == -1) + return false; + + ppstrResolvedName = pstrFileName; + + return true; + } +#endif // ANDROID || EMSCRIPTEN + +#ifdef MACOSX + fn = macxp_resolveAliasAndConvert(fn); +#endif + + accessFilePathState *state = prepare_to_access_file_path(fn.getStr()); + + char rp[PATH_MAX]; + bool bRet = realpath(fn.getStr(), rp); + int saved_errno = errno; + if (!bRet) + SAL_INFO("sal.file", "realpath(" << fn << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "realpath(" << fn << "): OK"); + + done_accessing_file_path(fn.getStr(), state); + + if (bRet) + { + ppstrResolvedName = fromOString(OString(rp)); + } + + errno = saved_errno; + + return bRet; +} + +} + +bool osl::realpath(const OUString& pustrFileName, OUString& ppustrResolvedName) +{ + return realpath_(pustrFileName, ppustrResolvedName); +} + +bool osl::realpath(const OString& pstrFileName, OString& ppstrResolvedName) +{ + return realpath_(pstrFileName, ppstrResolvedName); +} + +int stat_c(const char* cpPath, struct stat* buf) +{ +#ifdef ANDROID + if (strncmp(cpPath, "/assets", sizeof("/assets")-1) == 0 && + (cpPath[sizeof("/assets")-1] == '\0' || + cpPath[sizeof("/assets")-1] == '/')) + return lo_apk_lstat(cpPath, buf); +#endif + + accessFilePathState *state = prepare_to_access_file_path(cpPath); + + int result = stat(cpPath, buf); + int saved_errno = errno; + if (result == -1) + SAL_INFO("sal.file", "stat(" << cpPath << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "stat(" << cpPath << "): OK"); + + done_accessing_file_path(cpPath, state); + + errno = saved_errno; + + return result; +} + +int lstat_c(const char* cpPath, struct stat* buf) +{ +#ifdef ANDROID + if (strncmp(cpPath, "/assets", sizeof("/assets")-1) == 0 && + (cpPath[sizeof("/assets")-1] == '\0' || + cpPath[sizeof("/assets")-1] == '/')) + return lo_apk_lstat(cpPath, buf); +#endif + + accessFilePathState *state = prepare_to_access_file_path(cpPath); + + int result = lstat(cpPath, buf); + int saved_errno = errno; + if (result == -1) + SAL_INFO("sal.file", "lstat(" << cpPath << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "lstat(" << cpPath << "): OK"); + + done_accessing_file_path(cpPath, state); + + errno = saved_errno; + + return result; +} + +namespace { + +template int lstat_(const T& pstrPath, struct stat& buf) +{ + OString fn = toOString(pstrPath); + +#ifdef MACOSX + fn = macxp_resolveAliasAndConvert(fn); +#endif + + return lstat_c(fn.getStr(), &buf); +} + +} + +int osl::lstat(const OUString& pustrPath, struct stat& buf) +{ + return lstat_(pustrPath, buf); +} + +int osl::lstat(const OString& pstrPath, struct stat& buf) +{ + return lstat_(pstrPath, buf); +} + +int osl::mkdir(const OString& path, mode_t mode) +{ + accessFilePathState *state = prepare_to_access_file_path(path.getStr()); + + int result = ::mkdir(path.getStr(), mode); + int saved_errno = errno; + if (result == -1) + SAL_INFO("sal.file", "mkdir(" << path << ",0" << std::oct << mode << std::dec << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "mkdir(" << path << ",0" << std::oct << mode << std::dec << "): OK"); + + done_accessing_file_path(path.getStr(), state); + + errno = saved_errno; + + return result; +} + +int open_c(const OString& path, int oflag, int mode) +{ + accessFilePathState *state = prepare_to_access_file_path(path.getStr()); + + int result = open(path.getStr(), oflag, mode); + int saved_errno = errno; + if (result == -1) + SAL_INFO("sal.file", "open(" << path << ",0" << std::oct << oflag << ",0" << mode << std::dec << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "open(" << path << ",0" << std::oct << oflag << ",0" << mode << std::dec << ") => " << result); + +#if HAVE_FEATURE_MACOSX_SANDBOX + if (isSandboxed && result != -1 && (oflag & O_CREAT) && (oflag & O_EXCL)) + { + // A new file was created. Check if it is outside the sandbox. + // (In that case it must be one the user selected as export or + // save destination in a file dialog, otherwise we wouldn't + // have been able to create it.) Create and store a security + // scoped bookmark for it so that we can access the file in + // the future, too. (For the "Recent Files" functionality.) + const char *sandbox = [NSHomeDirectory() UTF8String]; + if (!(strncmp(sandbox, path.getStr(), strlen(sandbox)) == 0 && + path[strlen(sandbox)] == '/')) + { + auto cpPath = path.getStr(); + NSURL *url = [NSURL fileURLWithPath:[NSString stringWithUTF8String:cpPath]]; + NSData *data = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope + includingResourceValuesForKeys:nil + relativeToURL:nil + error:nil]; + if (data != NULL) + { + [userDefaults setObject:data + forKey:[@"bookmarkFor:" stringByAppendingString:[url absoluteString]]]; + } + } + } +#endif + + done_accessing_file_path(path.getStr(), state); + + errno = saved_errno; + + return result; +} + +int utime_c(const char *cpPath, struct utimbuf *times) +{ + accessFilePathState *state = prepare_to_access_file_path(cpPath); + + int result = utime(cpPath, times); + + done_accessing_file_path(cpPath, state); + + return result; +} + +int ftruncate_with_name(int fd, sal_uInt64 uSize, const OString& path) +{ + /* When sandboxed on macOS, ftruncate(), even if it takes an + * already open file descriptor which was returned from an open() + * call already checked by the sandbox, still requires a security + * scope bookmark for the file to be active in case the file is + * one that the sandbox doesn't otherwise allow access to. Luckily + * LibreOffice usually calls ftruncate() through the helpful C++ + * abstraction layer that keeps the pathname around. + */ + + OString fn(path); + +#ifdef MACOSX + fn = macxp_resolveAliasAndConvert(fn); +#endif + + accessFilePathState *state = prepare_to_access_file_path(fn.getStr()); + + int result = ftruncate(fd, uSize); + int saved_errno = errno; + if (result < 0) + SAL_INFO("sal.file", "ftruncate(" << fd << "," << uSize << "): " << UnixErrnoString(saved_errno)); + else + SAL_INFO("sal.file", "ftruncate(" << fd << "," << uSize << "): OK"); + + done_accessing_file_path(fn.getStr(), state); + + errno = saved_errno; + + return result; +} + + +std::string UnixErrnoString(int nErrno) +{ + // Errnos from and on Linux and + // on macOS. + switch (nErrno) + { + case EPERM: + return "EPERM"; + case ENOENT: + return "ENOENT"; + case ESRCH: + return "ESRCH"; + case EINTR: + return "EINTR"; + case EIO: + return "EIO"; + case ENXIO: + return "ENXIO"; + case E2BIG: + return "E2BIG"; + case ENOEXEC: + return "ENOEXEC"; + case EBADF: + return "EBADF"; + case ECHILD: + return "ECHILD"; + case EAGAIN: + return "EAGAIN"; + case ENOMEM: + return "ENOMEM"; + case EACCES: + return "EACCES"; + case EFAULT: + return "EFAULT"; +#ifdef ENOTBLK + case ENOTBLK: + return "ENOTBLK"; +#endif + case EBUSY: + return "EBUSY"; + case EEXIST: + return "EEXIST"; + case EXDEV: + return "EXDEV"; + case ENODEV: + return "ENODEV"; + case ENOTDIR: + return "ENOTDIR"; + case EISDIR: + return "EISDIR"; + case EINVAL: + return "EINVAL"; + case ENFILE: + return "ENFILE"; + case EMFILE: + return "EMFILE"; + case ENOTTY: + return "ENOTTY"; + case ETXTBSY: + return "ETXTBSY"; + case EFBIG: + return "EFBIG"; + case ENOSPC: + return "ENOSPC"; + case ESPIPE: + return "ESPIPE"; + case EROFS: + return "EROFS"; + case EMLINK: + return "EMLINK"; + case EPIPE: + return "EPIPE"; + case EDOM: + return "EDOM"; + case ERANGE: + return "ERANGE"; + case EDEADLK: + return "EDEADLK"; + case ENAMETOOLONG: + return "ENAMETOOLONG"; + case ENOLCK: + return "ENOLCK"; + case ENOSYS: + return "ENOSYS"; + case ENOTEMPTY: + return "ENOTEMPTY"; + case ELOOP: + return "ELOOP"; + case ENOMSG: + return "ENOMSG"; + case EIDRM: + return "EIDRM"; +#ifdef ECHRNG + case ECHRNG: + return "ECHRNG"; +#endif +#ifdef EL2NSYNC + case EL2NSYNC: + return "EL2NSYNC"; +#endif +#ifdef EL3HLT + case EL3HLT: + return "EL3HLT"; +#endif +#ifdef EL3RST + case EL3RST: + return "EL3RST"; +#endif +#ifdef ELNRNG + case ELNRNG: + return "ELNRNG"; +#endif +#ifdef EUNATCH + case EUNATCH: + return "EUNATCH"; +#endif +#ifdef ENOCSI + case ENOCSI: + return "ENOCSI"; +#endif +#ifdef EL2HLT + case EL2HLT: + return "EL2HLT"; +#endif +#ifdef EBADE + case EBADE: + return "EBADE"; +#endif +#ifdef EBADR + case EBADR: + return "EBADR"; +#endif +#ifdef EXFULL + case EXFULL: + return "EXFULL"; +#endif +#ifdef ENOANO + case ENOANO: + return "ENOANO"; +#endif +#ifdef EBADRQC + case EBADRQC: + return "EBADRQC"; +#endif +#ifdef EBADSLT + case EBADSLT: + return "EBADSLT"; +#endif +#ifdef EBFONT + case EBFONT: + return "EBFONT"; +#endif + case ENOSTR: + return "ENOSTR"; + case ENODATA: + return "ENODATA"; + case ETIME: + return "ETIME"; + case ENOSR: + return "ENOSR"; +#ifdef ENONET + case ENONET: + return "ENONET"; +#endif +#ifdef ENOPKG + case ENOPKG: + return "ENOPKG"; +#endif +#ifdef EREMOTE + case EREMOTE: + return "EREMOTE"; +#endif + case ENOLINK: + return "ENOLINK"; +#ifdef EADV + case EADV: + return "EADV"; +#endif +#ifdef ESRMNT + case ESRMNT: + return "ESRMNT"; +#endif +#ifdef ECOMM + case ECOMM: + return "ECOMM"; +#endif + case EPROTO: + return "EPROTO"; + case EMULTIHOP: + return "EMULTIHOP"; +#ifdef EDOTDOT + case EDOTDOT: + return "EDOTDOT"; +#endif + case EBADMSG: + return "EBADMSG"; + case EOVERFLOW: + return "EOVERFLOW"; +#ifdef ENOTUNIQ + case ENOTUNIQ: + return "ENOTUNIQ"; +#endif +#ifdef EBADFD + case EBADFD: + return "EBADFD"; +#endif +#ifdef EREMCHG + case EREMCHG: + return "EREMCHG"; +#endif +#ifdef ELIBACC + case ELIBACC: + return "ELIBACC"; +#endif +#ifdef ELIBBAD + case ELIBBAD: + return "ELIBBAD"; +#endif +#ifdef ELIBSCN + case ELIBSCN: + return "ELIBSCN"; +#endif +#ifdef ELIBMAX + case ELIBMAX: + return "ELIBMAX"; +#endif +#ifdef ELIBEXEC + case ELIBEXEC: + return "ELIBEXEC"; +#endif + case EILSEQ: + return "EILSEQ"; +#ifdef ERESTART + case ERESTART: + return "ERESTART"; +#endif +#ifdef ESTRPIPE + case ESTRPIPE: + return "ESTRPIPE"; +#endif +#ifdef EUSERS + case EUSERS: + return "EUSERS"; +#endif + case ENOTSOCK: + return "ENOTSOCK"; + case EDESTADDRREQ: + return "EDESTADDRREQ"; + case EMSGSIZE: + return "EMSGSIZE"; + case EPROTOTYPE: + return "EPROTOTYPE"; + case ENOPROTOOPT: + return "ENOPROTOOPT"; + case EPROTONOSUPPORT: + return "EPROTONOSUPPORT"; +#ifdef ESOCKTNOSUPPORT + case ESOCKTNOSUPPORT: + return "ESOCKTNOSUPPORT"; +#endif +#ifdef EOPNOTSUPP + case EOPNOTSUPP: + return "EOPNOTSUPP"; +#endif + case EPFNOSUPPORT: + return "EPFNOSUPPORT"; + case EAFNOSUPPORT: + return "EAFNOSUPPORT"; + case EADDRINUSE: + return "EADDRINUSE"; + case EADDRNOTAVAIL: + return "EADDRNOTAVAIL"; + case ENETDOWN: + return "ENETDOWN"; + case ENETUNREACH: + return "ENETUNREACH"; + case ENETRESET: + return "ENETRESET"; + case ECONNABORTED: + return "ECONNABORTED"; + case ECONNRESET: + return "ECONNRESET"; + case ENOBUFS: + return "ENOBUFS"; + case EISCONN: + return "EISCONN"; + case ENOTCONN: + return "ENOTCONN"; +#ifdef ESHUTDOWN + case ESHUTDOWN: + return "ESHUTDOWN"; +#endif +#ifdef ETOOMANYREFS + case ETOOMANYREFS: + return "ETOOMANYREFS"; +#endif + case ETIMEDOUT: + return "ETIMEDOUT"; + case ECONNREFUSED: + return "ECONNREFUSED"; +#ifdef EHOSTDOWN + case EHOSTDOWN: + return "EHOSTDOWN"; +#endif + case EHOSTUNREACH: + return "EHOSTUNREACH"; + case EALREADY: + return "EALREADY"; + case EINPROGRESS: + return "EINPROGRESS"; + case ESTALE: + return "ESTALE"; +#ifdef EUCLEAN + case EUCLEAN: + return "EUCLEAN"; +#endif +#ifdef ENOTNAM + case ENOTNAM: + return "ENOTNAM"; +#endif +#ifdef ENAVAIL + case ENAVAIL: + return "ENAVAIL"; +#endif +#ifdef EISNAM + case EISNAM: + return "EISNAM"; +#endif +#ifdef EREMOTEIO + case EREMOTEIO: + return "EREMOTEIO"; +#endif + case EDQUOT: + return "EDQUOT"; +#ifdef ENOMEDIUM + case ENOMEDIUM: + return "ENOMEDIUM"; +#endif +#ifdef EMEDIUMTYPE + case EMEDIUMTYPE: + return "EMEDIUMTYPE"; +#endif + case ECANCELED: + return "ECANCELED"; +#ifdef ENOKEY + case ENOKEY: + return "ENOKEY"; +#endif +#ifdef EKEYEXPIRED + case EKEYEXPIRED: + return "EKEYEXPIRED"; +#endif +#ifdef EKEYREVOKED + case EKEYREVOKED: + return "EKEYREVOKED"; +#endif +#ifdef EKEYREJECTED + case EKEYREJECTED: + return "EKEYREJECTED"; +#endif +#ifdef EOWNERDEAD + case EOWNERDEAD: + return "EOWNERDEAD"; +#endif +#ifdef ENOTRECOVERABLE + case ENOTRECOVERABLE: + return "ENOTRECOVERABLE"; +#endif +#ifdef ERFKILL + case ERFKILL: + return "ERFKILL"; +#endif +#ifdef EHWPOISON + case EHWPOISON: + return "EHWPOISON"; +#endif +#ifdef EPROCLIM + case EPROCLIM: + return "EPROCLIM"; +#endif +#ifdef EBADRPC + case EBADRPC: + return "EBADRPC"; +#endif +#ifdef ERPCMISMATCH + case ERPCMISMATCH: + return "ERPCMISMATCH"; +#endif +#ifdef EPROGUNAVAIL + case EPROGUNAVAIL: + return "EPROGUNAVAIL"; +#endif +#ifdef EPROGMISMATCH + case EPROGMISMATCH: + return "EPROGMISMATCH"; +#endif +#ifdef EPROCUNAVAIL + case EPROCUNAVAIL: + return "EPROCUNAVAIL"; +#endif +#ifdef EFTYPE + case EFTYPE: + return "EFTYPE"; +#endif +#ifdef EAUTH + case EAUTH: + return "EAUTH"; +#endif +#ifdef ENEEDAUTH + case ENEEDAUTH: + return "ENEEDAUTH"; +#endif +#ifdef EPWROFF + case EPWROFF: + return "EPWROFF"; +#endif +#ifdef EDEVERR + case EDEVERR: + return "EDEVERR"; +#endif +#ifdef EBADEXEC + case EBADEXEC: + return "EBADEXEC"; +#endif +#ifdef EBADARCH + case EBADARCH: + return "EBADARCH"; +#endif +#ifdef ESHLIBVERS + case ESHLIBVERS: + return "ESHLIBVERS"; +#endif +#ifdef EBADMACHO + case EBADMACHO: + return "EBADMACHO"; +#endif +#ifdef ENOATTR + case ENOATTR: + return "ENOATTR"; +#endif +#ifdef EQFULL + case EQFULL: + return "EQFULL"; +#endif + default: + char* str = strerror(nErrno); + return std::to_string(nErrno) + " (" + std::string(str) + ")"; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/uunxapi.hxx b/sal/osl/unx/uunxapi.hxx new file mode 100644 index 000000000..9f792765c --- /dev/null +++ b/sal/osl/unx/uunxapi.hxx @@ -0,0 +1,83 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_UNX_UUNXAPI_HXX +#define INCLUDED_SAL_OSL_UNX_UUNXAPI_HXX + +#include + +#include + +#include +#include +#include +#include +#include + +#include + +int stat_c(const char *cpPath, struct stat* buf); + +int lstat_c(const char *cpPath, struct stat* buf); + +int mkdir_c(OString const & path, mode_t mode); + +int open_c(const OString& path, int oflag, int mode); + +int utime_c(const char *cpPath, struct utimbuf *times); + +int ftruncate_with_name(int fd, sal_uInt64 uSize, const OString& path); + +namespace osl +{ + OString OUStringToOString(std::u16string_view s); + + int access(const OString& strPath, int mode); + + /*********************************** + osl::realpath + + @descr + The return value differs from the + realpath function + + @returns sal_True on success else + sal_False + + @see realpath + **********************************/ + + bool realpath( + const OUString& ustrFileName, + OUString& ustrResolvedName); + + bool realpath( + const OString& strFileName, + OString& strResolvedName); + + int lstat(const OUString& ustrPath, struct stat& buf); + + int lstat(const OString& strPath, struct stat& buf); + + int mkdir(const OString& aPath, mode_t aMode); +} // end namespace osl + +#endif // INCLUDED_SAL_OSL_UNX_UUNXAPI_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/unx/uunxapi.mm b/sal/osl/unx/uunxapi.mm new file mode 100644 index 000000000..5a7e17f34 --- /dev/null +++ b/sal/osl/unx/uunxapi.mm @@ -0,0 +1 @@ +#include "uunxapi.cxx" diff --git a/sal/osl/w32/backtrace.cxx b/sal/osl/w32/backtrace.cxx new file mode 100644 index 000000000..d9231de44 --- /dev/null +++ b/sal/osl/w32/backtrace.cxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include +#define OPTIONAL +#include + +#include +#include + +#include + +namespace { + +template T clampToULONG(T n) { + auto const maxUlong = std::numeric_limits::max(); + return n > maxUlong ? static_cast(maxUlong) : n; +} + +} + +OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth) +{ + std::unique_ptr backtrace = sal::backtrace_get( maxDepth ); + return sal::backtrace_to_string( backtrace.get()); +} + +std::unique_ptr sal::backtrace_get(sal_uInt32 maxDepth) +{ + assert(maxDepth != 0); + maxDepth = clampToULONG(maxDepth); + + auto pStack = new void *[maxDepth]; + // https://msdn.microsoft.com/en-us/library/windows/desktop/bb204633.aspx + // "CaptureStackBackTrace function" claims that you "can capture up to + // MAXUSHORT frames", and on Windows Server 2003 and Windows XP it even + // "must be less than 63", but assume that a too large input value is + // clamped internally, instead of resulting in an error: + int nFrames = CaptureStackBackTrace( 0, static_cast(maxDepth), pStack, nullptr ); + + return std::unique_ptr(new BacktraceState{ pStack, nFrames }); +} + +OUString sal::backtrace_to_string(BacktraceState* backtraceState) +{ + HANDLE hProcess = GetCurrentProcess(); + // https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-syminitialize + // says to not initialize more than once. + [[maybe_unused]] static bool bInitialized = SymInitialize(hProcess, nullptr, false); + SymRefreshModuleList(hProcess); + SYMBOL_INFO * pSymbol; + pSymbol = static_cast(calloc( sizeof( SYMBOL_INFO ) + 1024 * sizeof( char ), 1 )); + assert(pSymbol); + pSymbol->MaxNameLen = 1024 - 1; + pSymbol->SizeOfStruct = sizeof( SYMBOL_INFO ); + + auto nFrames = backtraceState->nDepth; + OUStringBuffer aBuf; + for( int i = 0; i < nFrames; i++ ) + { + SymFromAddr( hProcess, reinterpret_cast(backtraceState->buffer[ i ]), nullptr, pSymbol ); + aBuf.append( static_cast(nFrames - i - 1) ); + aBuf.append( ": " ); + aBuf.appendAscii( pSymbol->Name ); + aBuf.append( " - 0x" ); + aBuf.append( static_cast(pSymbol->Address), 16 ); + aBuf.append( "\n" ); + } + + free( pSymbol ); + + return aBuf.makeStringAndClear(); +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/conditn.cxx b/sal/osl/w32/conditn.cxx new file mode 100644 index 000000000..6bc6d9d3e --- /dev/null +++ b/sal/osl/w32/conditn.cxx @@ -0,0 +1,114 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" + +#include +#include +#include + +/* + under WIN32, we use the void* oslCondition + as a WIN32 HANDLE (which is also a 32-bit value) +*/ + +oslCondition SAL_CALL osl_createCondition(void) +{ + oslCondition Condition; + + Condition= reinterpret_cast(CreateEventW(nullptr, /* no security */ + true, /* manual reset */ + false, /* initial state not signaled */ + nullptr)); /* automatic name */ + + return Condition; + +} + +void SAL_CALL osl_destroyCondition(oslCondition Condition) +{ + if(Condition) + OSL_VERIFY(CloseHandle(Condition)); +} + +sal_Bool SAL_CALL osl_setCondition(oslCondition Condition) +{ + OSL_ASSERT(Condition); + + return SetEvent(reinterpret_cast(Condition)) != FALSE; +} + +sal_Bool SAL_CALL osl_resetCondition(oslCondition Condition) +{ + OSL_ASSERT(Condition); + + return ResetEvent(reinterpret_cast(Condition)) != FALSE; +} + +oslConditionResult SAL_CALL osl_waitCondition(oslCondition Condition, + const TimeValue* pTimeout) +{ + DWORD timeout; + + OSL_ASSERT(Condition); + + if (pTimeout) + timeout = pTimeout->Seconds * 1000 + pTimeout->Nanosec / 1000000L; + else + timeout = INFINITE; + + /* It's necessary to process SendMessage calls to the current thread to give other threads + access to COM objects instantiated in this thread */ + + while ( true ) + { + /* Only wake up if a SendMessage call to the threads message loop is detected */ + switch( MsgWaitForMultipleObjects( 1, reinterpret_cast(&Condition), FALSE, timeout, QS_SENDMESSAGE ) ) + { + case WAIT_OBJECT_0 + 1: + { + MSG msg; + + /* We Must not dispatch the message. PM_NOREMOVE leaves the message queue untouched + but dispatches SendMessage calls automatically */ + + PeekMessageW( &msg, nullptr, 0, 0, PM_NOREMOVE ); + } + break; + + case WAIT_OBJECT_0: + return osl_cond_result_ok; + + case WAIT_TIMEOUT: + return osl_cond_result_timeout; + + default: + return osl_cond_result_error; + } + } +} + +sal_Bool SAL_CALL osl_checkCondition(oslCondition Condition) +{ + OSL_ASSERT(Condition); + + return WaitForSingleObject(reinterpret_cast(Condition), 0) == WAIT_OBJECT_0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/dllentry.cxx b/sal/osl/w32/dllentry.cxx new file mode 100644 index 000000000..81139a058 --- /dev/null +++ b/sal/osl/w32/dllentry.cxx @@ -0,0 +1,235 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#ifdef _DEBUG +#include +#endif +#include +#include +#include + +#include +#include + +#include "file_url.hxx" +#include + +#include "thread.hxx" + +/* +This is needed because DllMain is called after static constructors. A DLL's +startup and shutdown sequence looks like this: + +_pRawDllMain() +_CRT_INIT() +DllMain() +... +DllMain() +_CRT_INIT() +_pRawDllMain() + +*/ + +extern "C" { + +static BOOL WINAPI RawDllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ); +BOOL (WINAPI *_pRawDllMain)(HINSTANCE, DWORD, LPVOID) = RawDllMain; + +} + +static BOOL WINAPI RawDllMain( HINSTANCE, DWORD fdwReason, LPVOID ) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + { +#ifdef _DEBUG + WCHAR buf[64]; + DWORD const res = GetEnvironmentVariableW(L"SAL_NO_ASSERT_DIALOGS", buf, SAL_N_ELEMENTS(buf)); + if (res && res < SAL_N_ELEMENTS(buf)) + { + // disable the dialog on abort() + _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); + _CrtSetReportMode(_CRT_ERROR, (_CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE)); + // not sure which assertions this affects + _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); + _CrtSetReportMode(_CRT_ASSERT, (_CRTDBG_MODE_DEBUG|_CRTDBG_MODE_FILE)); + // disable the dialog on assert(false) + _set_error_mode(_OUT_TO_STDERR); + } +#endif + +#if OSL_DEBUG_LEVEL < 2 + /* Suppress file error messages from system like "Floppy A: not inserted" */ + SetErrorMode( SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS ); +#endif + + //We disable floating point exceptions. This is the usual state at program startup + //but on Windows 98 and ME this is not always the case. + _control87(_MCW_EM, _MCW_EM); + break; + } + + case DLL_PROCESS_DETACH: + WSACleanup( ); + + /* + + On a product build memory management finalization might + cause a crash without assertion (assertions off) if heap is + corrupted. But a crash report won't help here because at + this point all other threads have been terminated and only + ntdll is on the stack. No chance to find the reason for the + corrupted heap if so. + + So annoying the user with a crash report is completely useless. + + */ + +#ifndef DBG_UTIL + __try +#endif + { + /* cleanup locale hashtable */ + rtl_locale_fini(); + + /* finalize memory management */ + rtl_cache_fini(); + rtl_arena_fini(); + } +#ifndef DBG_UTIL + __except( EXCEPTION_EXECUTE_HANDLER ) + { + } +#endif + break; + } + + return TRUE; +} + +static DWORD GetParentProcessId() +{ + DWORD dwParentProcessId = 0; + HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); + + if ( IsValidHandle( hSnapshot ) ) + { + PROCESSENTRY32 pe; + bool fSuccess; + + ZeroMemory( &pe, sizeof(pe) ); + pe.dwSize = sizeof(pe); + fSuccess = Process32First( hSnapshot, &pe ); + + while( fSuccess ) + { + if ( GetCurrentProcessId() == pe.th32ProcessID ) + { + dwParentProcessId = pe.th32ParentProcessID; + break; + } + + fSuccess = Process32Next( hSnapshot, &pe ); + } + + CloseHandle( hSnapshot ); + } + + return dwParentProcessId; +} + +static DWORD WINAPI ParentMonitorThreadProc( LPVOID lpParam ) +{ + DWORD_PTR dwParentProcessId = reinterpret_cast(lpParam); + + HANDLE hParentProcess = OpenProcess( SYNCHRONIZE, FALSE, dwParentProcessId ); + + osl_setThreadName("headless ParentMonitorThread"); + + if ( IsValidHandle( hParentProcess ) ) + { + if ( WAIT_OBJECT_0 == WaitForSingleObject( hParentProcess, INFINITE ) ) + { + TerminateProcess( GetCurrentProcess(), 0 ); + } + CloseHandle( hParentProcess ); + } + return 0; +} + +extern "C" +BOOL WINAPI DllMain( HINSTANCE, DWORD fdwReason, LPVOID ) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + { + WCHAR szBuffer[64]; + + // This code will attach the process to its parent process + // if the parent process had set the environment variable. + // The corresponding code (setting the environment variable) + // is desktop/win32/source/officeloader.cxx + + DWORD dwResult = GetEnvironmentVariableW( L"ATTACHED_PARENT_PROCESSID", szBuffer, SAL_N_ELEMENTS(szBuffer) ); + + if ( dwResult && dwResult < SAL_N_ELEMENTS(szBuffer) ) + { + DWORD dwThreadId = 0; + + DWORD_PTR dwParentProcessId = static_cast(_wtol( szBuffer )); + + if ( dwParentProcessId && GetParentProcessId() == dwParentProcessId ) + { + // No error check, it works or it does not + // Thread should only be started for headless mode, see desktop/win32/source/officeloader.cxx + HANDLE hThread + = CreateThread(nullptr, 0, ParentMonitorThreadProc, + reinterpret_cast(dwParentProcessId), 0, &dwThreadId); + // Note: calling CreateThread in DllMain is discouraged + // but this is only done in the headless mode and in + // that case no other threads should be running at startup + // when sal3.dll is loaded; also there is no + // synchronization with the spawned thread, so there + // does not appear to be a real risk of deadlock here + if (hThread) + CloseHandle(hThread); + } + } + + return TRUE; + } + + case DLL_THREAD_ATTACH: + break; + + case DLL_THREAD_DETACH: + osl_callThreadKeyCallbackOnThreadDetach( ); + break; + } + + return TRUE; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/file-impl.hxx b/sal/osl/w32/file-impl.hxx new file mode 100644 index 000000000..3f1d2136d --- /dev/null +++ b/sal/osl/w32/file-impl.hxx @@ -0,0 +1,25 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_W32_FILE_IMPL_HXX +#define INCLUDED_SAL_OSL_W32_FILE_IMPL_HXX + +#include + +#include +#include + +#define WIN32_LEAN_AND_MEAN +#include + +extern "C" oslFileHandle osl_createFileHandleFromOSHandle(HANDLE hFile, sal_uInt32 uFlags); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/w32/file.cxx b/sal/osl/w32/file.cxx new file mode 100644 index 000000000..be921aede --- /dev/null +++ b/sal/osl/w32/file.cxx @@ -0,0 +1,1121 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include "file-impl.hxx" +#include "file_url.hxx" +#include "file_error.hxx" + +#include +#include +#include +#include + +#ifdef max /* conflict w/ std::numeric_limits::max() */ +#undef max +#endif +#ifdef min +#undef min +#endif + +namespace { + +/** State + */ +enum class StateBits +{ + Seekable = 1, /*< open() sets, iff regular file */ + Readable = 2, /*< open() sets, read() requires */ + Writeable = 4, /*< open() sets, write() requires */ + Modified = 8 /* write() sets, flush() resets */ +}; + +} + +template<> struct o3tl::typed_flags: o3tl::is_typed_flags {}; + +namespace { + +/** File handle implementation. +*/ +struct FileHandle_Impl +{ + CRITICAL_SECTION m_mutex; + HANDLE m_hFile; + + StateBits m_state; + + sal_uInt64 m_size; /*< file size */ + LONGLONG m_offset; /*< physical offset from begin of file */ + // m_filepos is hit hard in some situations, where the overhead of a mutex starts to show up, so use an atomic + std::atomic m_filepos; /*< logical offset from begin of file */ + + LONGLONG m_bufptr; /*< buffer offset from begin of file */ + SIZE_T m_buflen; /*< buffer filled [0, m_bufsiz - 1] */ + + SIZE_T m_bufsiz; + sal_uInt8 * m_buffer; + + explicit FileHandle_Impl (HANDLE hFile); + ~FileHandle_Impl(); + + static SIZE_T getpagesize(); + + sal_uInt64 getPos() const; + oslFileError setPos (sal_uInt64 uPos); + + sal_uInt64 getSize() const; + oslFileError setSize (sal_uInt64 uPos); + + oslFileError readAt( + LONGLONG nOffset, + void * pBuffer, + DWORD nBytesRequested, + sal_uInt64 * pBytesRead); + + oslFileError writeAt( + LONGLONG nOffset, + void const * pBuffer, + DWORD nBytesToWrite, + sal_uInt64 * pBytesWritten); + + oslFileError readFileAt( + LONGLONG nOffset, + void * pBuffer, + sal_uInt64 uBytesRequested, + sal_uInt64 * pBytesRead); + + oslFileError writeFileAt( + LONGLONG nOffset, + void const * pBuffer, + sal_uInt64 uBytesToWrite, + sal_uInt64 * pBytesWritten); + + oslFileError readLineAt( + LONGLONG nOffset, + sal_Sequence ** ppSequence, + sal_uInt64 * pBytesRead); + + static oslFileError writeSequence_Impl ( + sal_Sequence ** ppSequence, + SIZE_T * pnOffset, + const void * pBuffer, + SIZE_T nBytes); + + oslFileError syncFile(); + + /** Guard. + */ + class Guard + { + LPCRITICAL_SECTION m_mutex; + + public: + explicit Guard(LPCRITICAL_SECTION pMutex); + ~Guard(); + }; +}; + +} + +FileHandle_Impl::Guard::Guard(LPCRITICAL_SECTION pMutex) + : m_mutex (pMutex) +{ + assert(pMutex); + ::EnterCriticalSection (m_mutex); +} + +FileHandle_Impl::Guard::~Guard() +{ + ::LeaveCriticalSection (m_mutex); +} + +FileHandle_Impl::FileHandle_Impl(HANDLE hFile) + : m_hFile (hFile), + m_state (StateBits::Readable | StateBits::Writeable), + m_size (0), + m_offset (0), + m_filepos (0), + m_bufptr (-1), + m_buflen (0), + m_bufsiz (getpagesize()), + m_buffer (nullptr) +{ + ::InitializeCriticalSection (&m_mutex); + m_buffer = static_cast(calloc(m_bufsiz, 1)); +} + +FileHandle_Impl::~FileHandle_Impl() +{ + free(m_buffer); + m_buffer = nullptr; + ::DeleteCriticalSection (&m_mutex); +} + +SIZE_T FileHandle_Impl::getpagesize() +{ + SYSTEM_INFO info; + ::GetSystemInfo(&info); + return sal::static_int_cast< SIZE_T >(info.dwPageSize); +} + +sal_uInt64 FileHandle_Impl::getPos() const +{ + return sal::static_int_cast< sal_uInt64 >(m_filepos.load()); +} + +oslFileError FileHandle_Impl::setPos(sal_uInt64 uPos) +{ + m_filepos = sal::static_int_cast< LONGLONG >(uPos); + return osl_File_E_None; +} + +sal_uInt64 FileHandle_Impl::getSize() const +{ + LONGLONG bufend = std::max(LONGLONG(0), m_bufptr) + m_buflen; + return std::max(m_size, sal::static_int_cast< sal_uInt64 >(bufend)); +} + +oslFileError FileHandle_Impl::setSize(sal_uInt64 uSize) +{ + LARGE_INTEGER nDstPos; nDstPos.QuadPart = sal::static_int_cast< LONGLONG >(uSize); + if (!::SetFilePointerEx(m_hFile, nDstPos, nullptr, FILE_BEGIN)) + return oslTranslateFileError(GetLastError()); + + if (!::SetEndOfFile(m_hFile)) + return oslTranslateFileError(GetLastError()); + m_size = uSize; + + nDstPos.QuadPart = m_offset; + if (!::SetFilePointerEx(m_hFile, nDstPos, nullptr, FILE_BEGIN)) + return oslTranslateFileError(GetLastError()); + + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::readAt( + LONGLONG nOffset, + void * pBuffer, + DWORD nBytesRequested, + sal_uInt64 * pBytesRead) +{ + SAL_WARN_IF(!(m_state & StateBits::Seekable), "sal.osl", "FileHandle_Impl::readAt(): not seekable"); + if (!(m_state & StateBits::Seekable)) + return osl_File_E_SPIPE; + + SAL_WARN_IF(!(m_state & StateBits::Readable), "sal.osl", "FileHandle_Impl::readAt(): not readable"); + if (!(m_state & StateBits::Readable)) + return osl_File_E_BADF; + + if (nOffset != m_offset) + { + LARGE_INTEGER liOffset; liOffset.QuadPart = nOffset; + if (!::SetFilePointerEx(m_hFile, liOffset, nullptr, FILE_BEGIN)) + return oslTranslateFileError(GetLastError()); + m_offset = nOffset; + } + + DWORD dwDone = 0; + if (!::ReadFile(m_hFile, pBuffer, nBytesRequested, &dwDone, nullptr)) + return oslTranslateFileError(GetLastError()); + m_offset += dwDone; + + *pBytesRead = dwDone; + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::writeAt( + LONGLONG nOffset, + void const * pBuffer, + DWORD nBytesToWrite, + sal_uInt64 * pBytesWritten) +{ + SAL_WARN_IF(!(m_state & StateBits::Seekable), "sal.osl", "FileHandle_Impl::writeAt(): not seekable"); + if (!(m_state & StateBits::Seekable)) + return osl_File_E_SPIPE; + + SAL_WARN_IF(!(m_state & StateBits::Writeable), "sal.osl", "FileHandle_Impl::writeAt(): not writeable"); + if (!(m_state & StateBits::Writeable)) + return osl_File_E_BADF; + + if (nOffset != m_offset) + { + LARGE_INTEGER liOffset; liOffset.QuadPart = nOffset; + if (!::SetFilePointerEx (m_hFile, liOffset, nullptr, FILE_BEGIN)) + return oslTranslateFileError(GetLastError()); + m_offset = nOffset; + } + + DWORD dwDone = 0; + if (!::WriteFile(m_hFile, pBuffer, nBytesToWrite, &dwDone, nullptr)) + return oslTranslateFileError(GetLastError()); + m_offset += dwDone; + + m_size = std::max(m_size, sal::static_int_cast< sal_uInt64 >(m_offset)); + + *pBytesWritten = dwDone; + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::readFileAt( + LONGLONG nOffset, + void * pBuffer, + sal_uInt64 uBytesRequested, + sal_uInt64 * pBytesRead) +{ + static sal_uInt64 const g_limit_dword = std::numeric_limits< DWORD >::max(); + if (g_limit_dword < uBytesRequested) + return osl_File_E_OVERFLOW; + DWORD nBytesRequested = sal::static_int_cast< DWORD >(uBytesRequested); + + if (!(m_state & StateBits::Seekable)) + { + // not seekable (pipe) + DWORD dwDone = 0; + if (!::ReadFile(m_hFile, pBuffer, nBytesRequested, &dwDone, nullptr)) + return oslTranslateFileError(GetLastError()); + *pBytesRead = dwDone; + return osl_File_E_None; + } + else if (!m_buffer) + { + // not buffered + return readAt (nOffset, pBuffer, nBytesRequested, pBytesRead); + } + else + { + sal_uInt8 * buffer = static_cast< sal_uInt8* >(pBuffer); + for (*pBytesRead = 0; nBytesRequested > 0;) + { + LONGLONG const bufptr = (nOffset / m_bufsiz) * m_bufsiz; + SIZE_T const bufpos = nOffset % m_bufsiz; + + if (bufptr != m_bufptr) + { + // flush current buffer + oslFileError result = syncFile(); + if (result != osl_File_E_None) + return result; + m_bufptr = -1; + m_buflen = 0; + + if (nBytesRequested >= m_bufsiz) + { + // buffer too small, read through from file + sal_uInt64 uDone = 0; + result = readAt (nOffset, &(buffer[*pBytesRead]), nBytesRequested, &uDone); + if (result != osl_File_E_None) + return result; + + nBytesRequested -= sal::static_int_cast< DWORD >(uDone); + *pBytesRead += uDone; + return osl_File_E_None; + } + + // update buffer (pointer) + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + m_bufptr = bufptr; + m_buflen = sal::static_int_cast< SIZE_T >(uDone); + } + if (bufpos >= m_buflen) + { + // end of file + return osl_File_E_None; + } + + SIZE_T const bytes = std::min(m_buflen - bufpos, static_cast(nBytesRequested)); + memcpy(&(buffer[*pBytesRead]), &(m_buffer[bufpos]), bytes); + nBytesRequested -= bytes; + *pBytesRead += bytes; + nOffset += bytes; + } + return osl_File_E_None; + } +} + +oslFileError FileHandle_Impl::writeFileAt( + LONGLONG nOffset, + void const * pBuffer, + sal_uInt64 uBytesToWrite, + sal_uInt64 * pBytesWritten) +{ + static sal_uInt64 const g_limit_dword = std::numeric_limits< DWORD >::max(); + if (g_limit_dword < uBytesToWrite) + return osl_File_E_OVERFLOW; + DWORD nBytesToWrite = sal::static_int_cast< DWORD >(uBytesToWrite); + + if (!(m_state & StateBits::Seekable)) + { + // not seekable (pipe) + DWORD dwDone = 0; + if (!::WriteFile(m_hFile, pBuffer, nBytesToWrite, &dwDone, nullptr)) + return oslTranslateFileError(GetLastError()); + *pBytesWritten = dwDone; + return osl_File_E_None; + } + else if (!m_buffer) + { + // not buffered + return writeAt(nOffset, pBuffer, nBytesToWrite, pBytesWritten); + } + else + { + sal_uInt8 const * buffer = static_cast< sal_uInt8 const* >(pBuffer); + for (*pBytesWritten = 0; nBytesToWrite > 0;) + { + LONGLONG const bufptr = (nOffset / m_bufsiz) * m_bufsiz; + SIZE_T const bufpos = nOffset % m_bufsiz; + if (bufptr != m_bufptr) + { + // flush current buffer + oslFileError result = syncFile(); + if (result != osl_File_E_None) + return result; + m_bufptr = -1; + m_buflen = 0; + + if (nBytesToWrite >= m_bufsiz) + { + // buffer too small, write through to file + sal_uInt64 uDone = 0; + result = writeAt(nOffset, &(buffer[*pBytesWritten]), nBytesToWrite, &uDone); + if (result != osl_File_E_None) + return result; + if (uDone != nBytesToWrite) + return osl_File_E_IO; + + nBytesToWrite -= sal::static_int_cast< DWORD >(uDone); + *pBytesWritten += uDone; + return osl_File_E_None; + } + + // update buffer (pointer) + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + m_bufptr = bufptr; + m_buflen = sal::static_int_cast< SIZE_T >(uDone); + } + + SIZE_T const bytes = std::min(m_bufsiz - bufpos, static_cast(nBytesToWrite)); + memcpy(&(m_buffer[bufpos]), &(buffer[*pBytesWritten]), bytes); + nBytesToWrite -= bytes; + *pBytesWritten += bytes; + nOffset += bytes; + + m_buflen = std::max(m_buflen, bufpos + bytes); + m_state |= StateBits::Modified; + } + return osl_File_E_None; + } +} + +oslFileError FileHandle_Impl::readLineAt( + LONGLONG nOffset, + sal_Sequence ** ppSequence, + sal_uInt64 * pBytesRead) +{ + oslFileError result = osl_File_E_None; + + LONGLONG bufptr = (nOffset / m_bufsiz) * m_bufsiz; + if (bufptr != m_bufptr) + { + /* flush current buffer */ + result = syncFile(); + if (result != osl_File_E_None) + return result; + + /* update buffer (pointer) */ + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + + m_bufptr = bufptr; + m_buflen = sal::static_int_cast< SIZE_T >(uDone); + } + + static int const LINE_STATE_BEGIN = 0; + static int const LINE_STATE_CR = 1; + static int const LINE_STATE_LF = 2; + + SIZE_T bufpos = sal::static_int_cast< SIZE_T >(nOffset - m_bufptr), curpos = bufpos, dstpos = 0; + int state = (bufpos >= m_buflen) ? LINE_STATE_LF : LINE_STATE_BEGIN; + + for (; state != LINE_STATE_LF;) + { + if (curpos >= m_buflen) + { + /* buffer examined */ + if (curpos > bufpos) // actually, curpos can't become less than bufpos, so != could do + { + /* flush buffer to sequence */ + result = writeSequence_Impl( + ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos); + if (result != osl_File_E_None) + return result; + *pBytesRead += curpos - bufpos; + nOffset += curpos - bufpos; + } + + bufptr = nOffset / m_bufsiz * m_bufsiz; + if (bufptr != m_bufptr) + { + /* update buffer (pointer) */ + sal_uInt64 uDone = 0; + result = readAt(bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + m_bufptr = bufptr; + m_buflen = sal::static_int_cast< SIZE_T >(uDone); + } + + bufpos = sal::static_int_cast< SIZE_T >(nOffset - m_bufptr); + curpos = bufpos; + if (bufpos >= m_buflen) + break; + } + switch (state) + { + case LINE_STATE_CR: + state = LINE_STATE_LF; + switch (m_buffer[curpos]) + { + case 0x0A: /* CRLF */ + /* eat current char */ + curpos++; + break; + default: /* single CR */ + /* keep current char */ + break; + } + break; + default: + /* determine next state */ + switch (m_buffer[curpos]) + { + case 0x0A: /* single LF */ + state = LINE_STATE_LF; + break; + case 0x0D: /* CR */ + state = LINE_STATE_CR; + break; + default: /* advance to next char */ + curpos++; + break; + } + if (state != LINE_STATE_BEGIN) + { + /* store (and eat) the newline char */ + m_buffer[curpos] = 0x0A; + curpos++; + + /* flush buffer to sequence */ + result = writeSequence_Impl( + ppSequence, &dstpos, &(m_buffer[bufpos]), curpos - bufpos - 1); + if (result != osl_File_E_None) + return result; + *pBytesRead += curpos - bufpos; + nOffset += curpos - bufpos; + } + break; + } + } + + result = writeSequence_Impl(ppSequence, &dstpos, nullptr, 0); + if (result != osl_File_E_None) + return result; + if (dstpos > 0) + return osl_File_E_None; + if (bufpos >= m_buflen) + return osl_File_E_AGAIN; + return osl_File_E_None; +} + +oslFileError FileHandle_Impl::writeSequence_Impl( + sal_Sequence ** ppSequence, + SIZE_T * pnOffset, + const void * pBuffer, + SIZE_T nBytes) +{ + sal_Int32 nElements = *pnOffset + nBytes; + if (!*ppSequence) + { + /* construct sequence */ + rtl_byte_sequence_constructNoDefault(ppSequence, nElements); + } + else if (nElements != (*ppSequence)->nElements) + { + /* resize sequence */ + rtl_byte_sequence_realloc(ppSequence, nElements); + } + if (*ppSequence) + { + /* fill sequence */ + memcpy(&((*ppSequence)->elements[*pnOffset]), pBuffer, nBytes); + *pnOffset += nBytes; + } + return (*ppSequence) ? osl_File_E_None : osl_File_E_NOMEM; +} + +oslFileError FileHandle_Impl::syncFile() +{ + oslFileError result = osl_File_E_None; + if (m_state & StateBits::Modified) + { + sal_uInt64 uDone = 0; + result = writeAt(m_bufptr, m_buffer, m_buflen, &uDone); + if (result != osl_File_E_None) + return result; + if (uDone != m_buflen) + return osl_File_E_IO; + m_state &= ~StateBits::Modified; + } + return result; +} + +extern "C" oslFileHandle osl_createFileHandleFromOSHandle( + HANDLE hFile, + sal_uInt32 uFlags) +{ + if (!IsValidHandle(hFile)) + return nullptr; // EINVAL + + FileHandle_Impl * pImpl = new FileHandle_Impl(hFile); + + /* check for regular file */ + if (GetFileType(hFile) == FILE_TYPE_DISK) + { + /* mark seekable */ + pImpl->m_state |= StateBits::Seekable; + + /* init current size */ + LARGE_INTEGER uSize = { { 0, 0 } }; + (void) ::GetFileSizeEx(hFile, &uSize); + pImpl->m_size = (sal::static_int_cast(uSize.HighPart) << 32) + uSize.LowPart; + } + + if (!(uFlags & osl_File_OpenFlag_Read)) + pImpl->m_state &= ~StateBits::Readable; + if (!(uFlags & osl_File_OpenFlag_Write)) + pImpl->m_state &= ~StateBits::Writeable; + + SAL_WARN_IF( + !((uFlags & osl_File_OpenFlag_Read) || (uFlags & osl_File_OpenFlag_Write)), + "sal.osl", + "osl_createFileHandleFromOSHandle(): missing read/write access flags"); + return static_cast(pImpl); +} + +oslFileError SAL_CALL osl_openFile( + rtl_uString * strPath, + oslFileHandle * pHandle, + sal_uInt32 uFlags) +{ + OUString strSysPath; + oslFileError result = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + if (result != osl_File_E_None) + return result; + + // tdf126742 use FILE_SHARE_WRITE to get closer to non-Windows platform behaviour, + // for details and discussion see task please + DWORD dwAccess = GENERIC_READ, dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE, dwCreation = 0; + + if (uFlags & osl_File_OpenFlag_Write) + dwAccess |= GENERIC_WRITE; + + if (uFlags & osl_File_OpenFlag_NoLock) + dwShare |= FILE_SHARE_DELETE; + + if (uFlags & osl_File_OpenFlag_Create) + dwCreation |= CREATE_NEW; + else + dwCreation |= OPEN_EXISTING; + + HANDLE hFile = CreateFileW( + o3tl::toW(strSysPath.getStr()), + dwAccess, dwShare, nullptr, dwCreation, 0, nullptr); + + // @@@ ERROR HANDLING @@@ + if (!IsValidHandle(hFile)) + result = oslTranslateFileError(GetLastError()); + + *pHandle = osl_createFileHandleFromOSHandle(hFile, uFlags | osl_File_OpenFlag_Read); + + return result; +} + +oslFileError SAL_CALL osl_syncFile(oslFileHandle Handle) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile)) + return osl_File_E_INVAL; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + + oslFileError result = pImpl->syncFile(); + if (result != osl_File_E_None) + return result; + + if (!FlushFileBuffers(pImpl->m_hFile)) + return oslTranslateFileError(GetLastError()); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile)) + return osl_File_E_INVAL; + + ::EnterCriticalSection(&(pImpl->m_mutex)); + + oslFileError result = pImpl->syncFile(); + if (result != osl_File_E_None) + { + /* ignore double failure */ + (void)::CloseHandle(pImpl->m_hFile); + } + else if (!::CloseHandle(pImpl->m_hFile)) + { + /* translate error code */ + result = oslTranslateFileError(GetLastError()); + } + + ::LeaveCriticalSection(&(pImpl->m_mutex)); + delete pImpl; + return result; +} + +namespace { + +// coverity[result_independent_of_operands] - crossplatform requirement +template bool exceedsMaxSIZE_T(T n) +{ return n > std::numeric_limits< SIZE_T >::max(); } + +} + +oslFileError SAL_CALL osl_mapFile( + oslFileHandle Handle, + void** ppAddr, + sal_uInt64 uLength, + sal_uInt64 uOffset, + sal_uInt32 uFlags) +{ + struct FileMapping + { + HANDLE m_handle; + + explicit FileMapping(HANDLE hMap) + : m_handle(hMap) + {} + + ~FileMapping() + { + (void)::CloseHandle(m_handle); + } + }; + + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!ppAddr)) + return osl_File_E_INVAL; + *ppAddr = nullptr; + + if (exceedsMaxSIZE_T(uLength)) + return osl_File_E_OVERFLOW; + SIZE_T const nLength = sal::static_int_cast< SIZE_T >(uLength); + + FileMapping aMap(::CreateFileMappingW(pImpl->m_hFile, nullptr, SEC_COMMIT | PAGE_READONLY, 0, 0, nullptr)); + if (!IsValidHandle(aMap.m_handle)) + return oslTranslateFileError(GetLastError()); + + DWORD const dwOffsetHi = sal::static_int_cast(uOffset >> 32); + DWORD const dwOffsetLo = sal::static_int_cast(uOffset & 0xFFFFFFFF); + + *ppAddr = ::MapViewOfFile(aMap.m_handle, FILE_MAP_READ, dwOffsetHi, dwOffsetLo, nLength); + if (!*ppAddr) + return oslTranslateFileError(GetLastError()); + + if (uFlags & osl_File_MapFlag_RandomAccess) + { + // Determine memory pagesize. + SYSTEM_INFO info; + ::GetSystemInfo(&info); + DWORD const dwPageSize = info.dwPageSize; + + /* + * Pagein, touching first byte of each memory page. + * Note: volatile disables optimizing the loop away. + */ + BYTE volatile * pData(static_cast(*ppAddr)); + SIZE_T nSize(nLength); + + while (nSize > dwPageSize) + { + pData[0]; + pData += dwPageSize; + nSize -= dwPageSize; + } + if (nSize > 0) + { + pData[0]; + } + } + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_unmapFile(void* pAddr, sal_uInt64 /* uLength */) +{ + if (!pAddr) + return osl_File_E_INVAL; + + if (!::UnmapViewOfFile(pAddr)) + return oslTranslateFileError(GetLastError()); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_unmapMappedFile(oslFileHandle /* Handle */, void* pAddr, sal_uInt64 uLength) +{ + return osl_unmapFile(pAddr, uLength); +} + +oslFileError +SAL_CALL osl_readLine( + oslFileHandle Handle, + sal_Sequence ** ppSequence) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!ppSequence)) + return osl_File_E_INVAL; + sal_uInt64 uBytesRead = 0; + + // read at current filepos; filepos += uBytesRead; + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->readLineAt( + pImpl->m_filepos, ppSequence, &uBytesRead); + if (result == osl_File_E_None) + pImpl->m_filepos += uBytesRead; + return result; +} + +oslFileError SAL_CALL osl_readFile( + oslFileHandle Handle, + void * pBuffer, + sal_uInt64 uBytesRequested, + sal_uInt64 * pBytesRead) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesRead)) + return osl_File_E_INVAL; + + // read at current filepos; filepos += *pBytesRead; + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->readFileAt( + pImpl->m_filepos, pBuffer, uBytesRequested, pBytesRead); + if (result == osl_File_E_None) + pImpl->m_filepos += *pBytesRead; + return result; +} + +oslFileError SAL_CALL osl_writeFile( + oslFileHandle Handle, + const void * pBuffer, + sal_uInt64 uBytesToWrite, + sal_uInt64 * pBytesWritten) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesWritten)) + return osl_File_E_INVAL; + + // write at current filepos; filepos += *pBytesWritten; + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->writeFileAt( + pImpl->m_filepos, pBuffer, uBytesToWrite, pBytesWritten); + if (result == osl_File_E_None) + pImpl->m_filepos += *pBytesWritten; + return result; +} + +LONGLONG const g_limit_longlong = std::numeric_limits< LONGLONG >::max(); + +namespace { + +// coverity[result_independent_of_operands] - crossplatform requirement +template bool exceedsMaxLONGLONG(T n) +{ return n > g_limit_longlong; } + +template bool exceedsMinLONGLONG(T n) +{ return n < std::numeric_limits::min(); } + +} + +oslFileError SAL_CALL osl_readFileAt( + oslFileHandle Handle, + sal_uInt64 uOffset, + void* pBuffer, + sal_uInt64 uBytesRequested, + sal_uInt64* pBytesRead) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesRead)) + return osl_File_E_INVAL; + if (!(pImpl->m_state & StateBits::Seekable)) + return osl_File_E_SPIPE; + + if (exceedsMaxLONGLONG(uOffset)) + return osl_File_E_OVERFLOW; + LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset); + + // read at specified fileptr + FileHandle_Impl::Guard lock (&(pImpl->m_mutex)); + return pImpl->readFileAt(nOffset, pBuffer, uBytesRequested, pBytesRead); +} + +oslFileError SAL_CALL osl_writeFileAt( + oslFileHandle Handle, + sal_uInt64 uOffset, + const void* pBuffer, + sal_uInt64 uBytesToWrite, + sal_uInt64* pBytesWritten) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pBuffer) || (!pBytesWritten)) + return osl_File_E_INVAL; + if (!(pImpl->m_state & StateBits::Seekable)) + return osl_File_E_SPIPE; + + if (exceedsMaxLONGLONG(uOffset)) + return osl_File_E_OVERFLOW; + LONGLONG const nOffset = sal::static_int_cast< LONGLONG >(uOffset); + + // write at specified fileptr + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + return pImpl->writeFileAt(nOffset, pBuffer, uBytesToWrite, pBytesWritten); +} + +oslFileError SAL_CALL osl_isEndOfFile(oslFileHandle Handle, sal_Bool *pIsEOF) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pIsEOF)) + return osl_File_E_INVAL; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + *pIsEOF = (pImpl->getPos() == pImpl->getSize()); + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_getFilePos(oslFileHandle Handle, sal_uInt64 *pPos) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pPos)) + return osl_File_E_INVAL; + + // no need to lock because pos is atomic + *pPos = pImpl->getPos(); + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_setFilePos(oslFileHandle Handle, sal_uInt32 uHow, sal_Int64 uOffset) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile)) + return osl_File_E_INVAL; + + if (exceedsMaxLONGLONG(uOffset) || exceedsMinLONGLONG(uOffset)) + return osl_File_E_OVERFLOW; + LONGLONG nPos = 0, nOffset = sal::static_int_cast< LONGLONG >(uOffset); + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + switch (uHow) + { + case osl_Pos_Absolut: + if (nOffset < 0) + return osl_File_E_INVAL; + break; + + case osl_Pos_Current: + nPos = sal::static_int_cast< LONGLONG >(pImpl->getPos()); + if ((nOffset < 0) && (nPos < -1*nOffset)) + return osl_File_E_INVAL; + assert(nPos >= 0); + if (nOffset > g_limit_longlong - nPos) + return osl_File_E_OVERFLOW; + break; + + case osl_Pos_End: + nPos = sal::static_int_cast< LONGLONG >(pImpl->getSize()); + if ((nOffset < 0) && (nPos < -1*nOffset)) + return osl_File_E_INVAL; + assert(nPos >= 0); + if (nOffset > g_limit_longlong - nPos) + return osl_File_E_OVERFLOW; + break; + + default: + return osl_File_E_INVAL; + } + + return pImpl->setPos(nPos + nOffset); +} + +oslFileError SAL_CALL osl_getFileSize(oslFileHandle Handle, sal_uInt64 *pSize) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile) || (!pSize)) + return osl_File_E_INVAL; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + *pSize = pImpl->getSize(); + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_setFileSize(oslFileHandle Handle, sal_uInt64 uSize) +{ + FileHandle_Impl * pImpl = static_cast(Handle); + + if ((!pImpl) || !IsValidHandle(pImpl->m_hFile)) + return osl_File_E_INVAL; + if (!(pImpl->m_state & StateBits::Writeable)) + return osl_File_E_BADF; + + if (exceedsMaxLONGLONG(uSize)) + return osl_File_E_OVERFLOW; + + FileHandle_Impl::Guard lock(&(pImpl->m_mutex)); + oslFileError result = pImpl->syncFile(); + if (result != osl_File_E_None) + return result; + pImpl->m_bufptr = -1; + pImpl->m_buflen = 0; + + return pImpl->setSize(uSize); +} + +oslFileError SAL_CALL osl_removeFile(rtl_uString* strPath) +{ + OUString strSysPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + + if (error == osl_File_E_None) + { + if (DeleteFileW(o3tl::toW(strSysPath.getStr()))) + error = osl_File_E_None; + else + error = oslTranslateFileError(GetLastError()); + } + return error; +} + +oslFileError SAL_CALL osl_copyFile(rtl_uString* strPath, rtl_uString *strDestPath) +{ + OUString strSysPath, strSysDestPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + + if (error == osl_File_E_None) + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDestPath), &strSysDestPath.pData, false); + + if (error == osl_File_E_None) + { + LPCWSTR src = o3tl::toW(strSysPath.getStr()); + LPCWSTR dst = o3tl::toW(strSysDestPath.getStr()); + + if (CopyFileW(src, dst, FALSE)) + error = osl_File_E_None; + else + error = oslTranslateFileError(GetLastError()); + } + + return error; +} + +oslFileError SAL_CALL osl_moveFile(rtl_uString* strPath, rtl_uString *strDestPath) +{ + OUString strSysPath, strSysDestPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + + if (error == osl_File_E_None) + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDestPath), &strSysDestPath.pData, false); + + if (error == osl_File_E_None) + { + LPCWSTR src = o3tl::toW(strSysPath.getStr()); + LPCWSTR dst = o3tl::toW(strSysDestPath.getStr()); + + if (MoveFileExW(src, dst, MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH | MOVEFILE_REPLACE_EXISTING)) + error = osl_File_E_None; + else + error = oslTranslateFileError(GetLastError()); + } + + return error; +} + +oslFileError SAL_CALL osl_replaceFile(rtl_uString* strPath, rtl_uString* strDestPath) +{ + OUString strSysPath, strSysDestPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + + if (error == osl_File_E_None) + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDestPath), &strSysDestPath.pData, false); + + if (error == osl_File_E_None) + { + LPCWSTR src = o3tl::toW(strSysPath.getStr()); + LPCWSTR dst = o3tl::toW(strSysDestPath.getStr()); + + if (!ReplaceFileW(dst, src, nullptr, + REPLACEFILE_WRITE_THROUGH | REPLACEFILE_IGNORE_MERGE_ERRORS + | REPLACEFILE_IGNORE_ACL_ERRORS, + nullptr, nullptr)) + { + DWORD dwError = GetLastError(); + if (dwError == ERROR_FILE_NOT_FOUND // no strDestPath file? + || dwError == ERROR_UNABLE_TO_MOVE_REPLACEMENT // e.g., files on different volumes + || dwError == ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 + || dwError == ERROR_UNABLE_TO_REMOVE_REPLACED) + error = osl_moveFile(strPath, strDestPath); + else + error = oslTranslateFileError(dwError); + } + } + + return error; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/file_dirvol.cxx b/sal/osl/w32/file_dirvol.cxx new file mode 100644 index 000000000..f9d821605 --- /dev/null +++ b/sal/osl/w32/file_dirvol.cxx @@ -0,0 +1,1691 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "file_url.hxx" +#include "filetime.hxx" +#include "file_error.hxx" + +#include "path_helper.hxx" + +#include +#include +#include +#include +#include + +const wchar_t UNC_PREFIX[] = L"\\\\"; +const wchar_t BACKSLASH = '\\'; +const wchar_t SLASH = '/'; + +BOOL TimeValueToFileTime(const TimeValue *cpTimeVal, FILETIME *pFTime) +{ + SYSTEMTIME BaseSysTime; + FILETIME BaseFileTime; + FILETIME FTime; + bool fSuccess = false; + + BaseSysTime.wYear = 1970; + BaseSysTime.wMonth = 1; + BaseSysTime.wDayOfWeek = 0; + BaseSysTime.wDay = 1; + BaseSysTime.wHour = 0; + BaseSysTime.wMinute = 0; + BaseSysTime.wSecond = 0; + BaseSysTime.wMilliseconds = 0; + + if (cpTimeVal==nullptr) + return fSuccess; + + if ( SystemTimeToFileTime(&BaseSysTime, &BaseFileTime) ) + { + __int64 timeValue; + + __int64 localTime = cpTimeVal->Seconds*__int64(10000000)+cpTimeVal->Nanosec/100; + osl::detail::setFiletime(FTime, localTime); + fSuccess = 0 <= (timeValue= osl::detail::getFiletime(BaseFileTime) + osl::detail::getFiletime(FTime)); + if (fSuccess) + osl::detail::setFiletime(*pFTime, timeValue); + } + return fSuccess; +} + +BOOL FileTimeToTimeValue(const FILETIME *cpFTime, TimeValue *pTimeVal) +{ + SYSTEMTIME BaseSysTime; + FILETIME BaseFileTime; + bool fSuccess = false; /* Assume failure */ + + BaseSysTime.wYear = 1970; + BaseSysTime.wMonth = 1; + BaseSysTime.wDayOfWeek = 0; + BaseSysTime.wDay = 1; + BaseSysTime.wHour = 0; + BaseSysTime.wMinute = 0; + BaseSysTime.wSecond = 0; + BaseSysTime.wMilliseconds = 0; + + if ( SystemTimeToFileTime(&BaseSysTime, &BaseFileTime) ) + { + __int64 Value; + + fSuccess = 0 <= (Value = osl::detail::getFiletime(*cpFTime) - osl::detail::getFiletime(BaseFileTime)); + + if ( fSuccess ) + { + pTimeVal->Seconds = static_cast(Value / 10000000L); + pTimeVal->Nanosec = static_cast((Value % 10000000L) * 100); + } + } + return fSuccess; +} + +namespace +{ + + struct Component + { + Component() : + begin_(nullptr), end_(nullptr) + {} + + bool isPresent() const + { return (static_cast(end_ - begin_) > 0); } + + const sal_Unicode* begin_; + const sal_Unicode* end_; + }; + + struct UNCComponents + { + Component server_; + Component share_; + Component resource_; + }; + + bool is_UNC_path(const sal_Unicode* path) + { return (0 == wcsncmp(UNC_PREFIX, o3tl::toW(path), SAL_N_ELEMENTS(UNC_PREFIX) - 1)); } + + void parse_UNC_path(const sal_Unicode* path, UNCComponents* puncc) + { + OSL_PRECOND(is_UNC_path(path), "Precondition violated: No UNC path"); + OSL_PRECOND(rtl_ustr_indexOfChar(path, SLASH) == -1, "Path must not contain slashes"); + + const sal_Unicode* pend = path + rtl_ustr_getLength(path); + const sal_Unicode* ppos = path + 2; + + puncc->server_.begin_ = ppos; + while ((ppos < pend) && (*ppos != BACKSLASH)) + ppos++; + + puncc->server_.end_ = ppos; + + if (BACKSLASH == *ppos) + { + puncc->share_.begin_ = ++ppos; + while ((ppos < pend) && (*ppos != BACKSLASH)) + ppos++; + + puncc->share_.end_ = ppos; + + if (BACKSLASH == *ppos) + { + puncc->resource_.begin_ = ++ppos; + while (ppos < pend) + ppos++; + + puncc->resource_.end_ = ppos; + } + } + + SAL_WARN_IF(!puncc->server_.isPresent() || !puncc->share_.isPresent(), + "sal.osl", + "Postcondition violated: Invalid UNC path detected"); + } + + bool has_path_parent(const sal_Unicode* path) + { + // Has the given path a parent or are we already there, + // e.g. 'c:\' or '\\server\share\'? + + bool has_parent = false; + if (is_UNC_path(path)) + { + UNCComponents unc_comp; + parse_UNC_path(path, &unc_comp); + has_parent = unc_comp.resource_.isPresent(); + } + else + { + has_parent = !osl::systemPathIsLogicalDrivePattern(OUString(path)); + } + return has_parent; + } + + bool has_path_parent(const OUString& path) + { return has_path_parent(path.getStr()); } + +} + +oslFileError SAL_CALL osl_acquireVolumeDeviceHandle( oslVolumeDeviceHandle Handle ) +{ + if ( Handle ) + { + rtl_uString_acquire( static_cast(Handle) ); + return osl_File_E_None; + } + else + return osl_File_E_INVAL; +} + +oslFileError SAL_CALL osl_releaseVolumeDeviceHandle( oslVolumeDeviceHandle Handle ) +{ + if ( Handle ) + { + rtl_uString_release( static_cast(Handle) ); + return osl_File_E_None; + } + else + return osl_File_E_INVAL; +} + +oslFileError SAL_CALL osl_getVolumeDeviceMountPath( oslVolumeDeviceHandle Handle, rtl_uString **pstrPath ) +{ + if ( Handle && pstrPath ) + { + rtl_uString_assign( pstrPath, static_cast(Handle) ); + return osl_File_E_None; + } + else + return osl_File_E_INVAL; +} + +#define DIRECTORYITEM_DRIVE 0 +#define DIRECTORYITEM_FILE 1 +#define DIRECTORYITEM_SERVER 2 + +namespace { + +struct DirectoryItem_Impl +{ + UINT uType = 0; + union { + WIN32_FIND_DATAW FindData; + WCHAR cDriveString[MAX_PATH]; + }; + OUString m_sFullPath; + bool bFullPathNormalized = false; + int nRefCount = 0; +}; + +} + +#define DIRECTORYTYPE_LOCALROOT 0 +#define DIRECTORYTYPE_NETROOT 1 +#define DIRECTORYTYPE_FILESYSTEM 3 + +namespace { + +struct Directory_Impl +{ + UINT uType = 0; + union { + HANDLE hDirectory = nullptr; + HANDLE hEnumDrives; + }; + OUString m_sDirectoryPath; +}; + +typedef struct tagDRIVEENUM +{ + LPCWSTR lpIdent; + WCHAR cBuffer[/*('Z' - 'A' + 1) * sizeof("A:\\") + 1*/256]; + LPCWSTR lpCurrent; +} DRIVEENUM, *PDRIVEENUM, *LPDRIVEENUM; + +} + +static HANDLE WINAPI OpenLogicalDrivesEnum() +{ + LPDRIVEENUM pEnum = static_cast(HeapAlloc( GetProcessHeap(), 0, sizeof(DRIVEENUM) )); + if ( pEnum ) + { + DWORD dwNumCopied = GetLogicalDriveStringsW( SAL_N_ELEMENTS(pEnum->cBuffer) - 1, pEnum->cBuffer ); + + if ( dwNumCopied && dwNumCopied < SAL_N_ELEMENTS(pEnum->cBuffer) ) + { + pEnum->lpCurrent = pEnum->cBuffer; + pEnum->lpIdent = L"tagDRIVEENUM"; + } + else + { + HeapFree( GetProcessHeap(), 0, pEnum ); + pEnum = nullptr; + } + } + return pEnum ? static_cast(pEnum) : INVALID_HANDLE_VALUE; +} + +static bool WINAPI EnumLogicalDrives(HANDLE hEnum, LPWSTR lpBuffer) +{ + LPDRIVEENUM pEnum = static_cast(hEnum); + if ( !pEnum ) + { + SetLastError( ERROR_INVALID_HANDLE ); + return false; + } + + int nLen = wcslen( pEnum->lpCurrent ); + if ( !nLen ) + { + SetLastError( ERROR_NO_MORE_FILES ); + return false; + } + + CopyMemory( lpBuffer, pEnum->lpCurrent, (nLen + 1) * sizeof(WCHAR) ); + pEnum->lpCurrent += nLen + 1; + return true; +} + +static bool WINAPI CloseLogicalDrivesEnum(HANDLE hEnum) +{ + bool fSuccess = false; + LPDRIVEENUM pEnum = static_cast(hEnum); + + if ( pEnum ) + { + HeapFree( GetProcessHeap(), 0, pEnum ); + fSuccess = true; + } + else + SetLastError( ERROR_INVALID_HANDLE ); + + return fSuccess; +} + +namespace { + +typedef struct tagDIRECTORY +{ + HANDLE hFind; + WIN32_FIND_DATAW aFirstData; +} DIRECTORY, *PDIRECTORY, *LPDIRECTORY; + +} + +static HANDLE WINAPI OpenDirectory( rtl_uString* pPath) +{ + if ( !pPath ) + return nullptr; + + sal_uInt32 nLen = rtl_uString_getLength( pPath ); + if ( !nLen ) + return nullptr; + + const WCHAR* pSuffix = nullptr; + sal_uInt32 nSuffLen = 0; + if ( pPath->buffer[nLen - 1] != L'\\' ) + { + pSuffix = L"\\*.*"; + nSuffLen = 4; + } + else + { + pSuffix = L"*.*"; + nSuffLen = 3; + } + + WCHAR* szFileMask = static_cast< WCHAR* >( malloc( sizeof( WCHAR ) * ( nLen + nSuffLen + 1 ) ) ); + assert(szFileMask); // Don't handle OOM conditions + wcscpy( szFileMask, o3tl::toW(rtl_uString_getStr( pPath )) ); + wcscat( szFileMask, pSuffix ); + + LPDIRECTORY pDirectory = static_cast(HeapAlloc(GetProcessHeap(), 0, sizeof(DIRECTORY))); + assert(pDirectory); // Don't handle OOM conditions + pDirectory->hFind = FindFirstFileW(szFileMask, &pDirectory->aFirstData); + + if (!IsValidHandle(pDirectory->hFind)) + { + if ( GetLastError() != ERROR_NO_MORE_FILES ) + { + HeapFree(GetProcessHeap(), 0, pDirectory); + pDirectory = nullptr; + } + } + free(szFileMask); + + return static_cast(pDirectory); +} + +static bool WINAPI EnumDirectory(HANDLE hDirectory, LPWIN32_FIND_DATAW pFindData) +{ + LPDIRECTORY pDirectory = static_cast(hDirectory); + if ( !pDirectory ) + { + SetLastError( ERROR_INVALID_HANDLE ); + return false; + } + + bool fSuccess = false; + bool fValid; + do + { + if ( pDirectory->aFirstData.cFileName[0] ) + { + *pFindData = pDirectory->aFirstData; + fSuccess = true; + pDirectory->aFirstData.cFileName[0] = 0; + } + else if ( IsValidHandle( pDirectory->hFind ) ) + fSuccess = FindNextFileW( pDirectory->hFind, pFindData ); + else + { + fSuccess = false; + SetLastError( ERROR_NO_MORE_FILES ); + } + + fValid = fSuccess && wcscmp( L".", pFindData->cFileName ) != 0 && wcscmp( L"..", pFindData->cFileName ) != 0; + + } while( fSuccess && !fValid ); + + return fSuccess; +} + +static bool WINAPI CloseDirectory(HANDLE hDirectory) +{ + bool fSuccess = false; + LPDIRECTORY pDirectory = static_cast(hDirectory); + + if (pDirectory) + { + if (IsValidHandle(pDirectory->hFind)) + fSuccess = FindClose(pDirectory->hFind); + + fSuccess = HeapFree(GetProcessHeap(), 0, pDirectory) && fSuccess; + } + else + SetLastError(ERROR_INVALID_HANDLE); + + return fSuccess; +} + +static oslFileError osl_openLocalRoot( + rtl_uString *strDirectoryPath, oslDirectory *pDirectory) +{ + if ( !pDirectory ) + return osl_File_E_INVAL; + + *pDirectory = nullptr; + + OUString strSysPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDirectoryPath), &strSysPath.pData, false); + if ( osl_File_E_None != error ) + return error; + + Directory_Impl* pDirImpl = new (std::nothrow) Directory_Impl; + assert(pDirImpl); // Don't handle OOM conditions + pDirImpl->m_sDirectoryPath = strSysPath; + + /* Append backslash if necessary */ + + /* @@@ToDo + use function ensure backslash + */ + sal_uInt32 nLen = pDirImpl->m_sDirectoryPath.getLength(); + if ( nLen && pDirImpl->m_sDirectoryPath[nLen - 1] != L'\\' ) + { + pDirImpl->m_sDirectoryPath += "\\"; + } + + pDirImpl->uType = DIRECTORYTYPE_LOCALROOT; + pDirImpl->hEnumDrives = OpenLogicalDrivesEnum(); + + /* @@@ToDo + Use IsValidHandle(...) + */ + if ( pDirImpl->hEnumDrives != INVALID_HANDLE_VALUE ) + { + *pDirectory = static_cast(pDirImpl); + error = osl_File_E_None; + } + else + { + if ( pDirImpl ) + { + delete pDirImpl; + pDirImpl = nullptr; + } + + error = oslTranslateFileError( GetLastError() ); + } + return error; +} + +static oslFileError osl_openFileDirectory( + rtl_uString *strDirectoryPath, oslDirectory *pDirectory) +{ + oslFileError error = osl_File_E_None; + + if ( !pDirectory ) + return osl_File_E_INVAL; + *pDirectory = nullptr; + + Directory_Impl *pDirImpl = new (std::nothrow) Directory_Impl; + assert(pDirImpl); // Don't handle OOM conditions + pDirImpl->m_sDirectoryPath = strDirectoryPath; + + /* Append backslash if necessary */ + + /* @@@ToDo + use function ensure backslash + */ + sal_uInt32 nLen = pDirImpl->m_sDirectoryPath.getLength(); + if ( nLen && pDirImpl->m_sDirectoryPath[nLen - 1] != '\\' ) + pDirImpl->m_sDirectoryPath += "\\"; + + pDirImpl->uType = DIRECTORYTYPE_FILESYSTEM; + pDirImpl->hDirectory = OpenDirectory( pDirImpl->m_sDirectoryPath.pData ); + + if ( !pDirImpl->hDirectory ) + { + error = oslTranslateFileError( GetLastError() ); + + delete pDirImpl; + pDirImpl = nullptr; + } + + *pDirectory = static_cast(pDirImpl); + return error; +} + +static oslFileError osl_openNetworkServer( + rtl_uString *strSysDirPath, oslDirectory *pDirectory) +{ + NETRESOURCEW aNetResource; + HANDLE hEnum; + DWORD dwError; + + ZeroMemory( &aNetResource, sizeof(aNetResource) ); + + aNetResource.lpRemoteName = o3tl::toW(strSysDirPath->buffer); + + dwError = WNetOpenEnumW( + RESOURCE_GLOBALNET, + RESOURCETYPE_DISK, + RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER, + &aNetResource, + &hEnum ); + + if ( ERROR_SUCCESS == dwError ) + { + Directory_Impl *pDirImpl = new (std::nothrow) Directory_Impl; + assert(pDirImpl); // Don't handle OOM conditions + pDirImpl->uType = DIRECTORYTYPE_NETROOT; + pDirImpl->hDirectory = hEnum; + *pDirectory = static_cast(pDirImpl); + } + return oslTranslateFileError( dwError ); +} + +static DWORD create_dir_with_callback( + rtl_uString * dir_path, + oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, + void* pData) +{ + // Create the specified directory and call the + // user specified callback function. On success + // the function returns ERROR_SUCCESS else a Win32 error code. + + bool bCreated = CreateDirectoryW( o3tl::toW(rtl_uString_getStr( dir_path )), nullptr ); + + if ( bCreated ) + { + if (aDirectoryCreationCallbackFunc) + { + OUString url; + osl_getFileURLFromSystemPath(dir_path, &(url.pData)); + aDirectoryCreationCallbackFunc(pData, url.pData); + } + return ERROR_SUCCESS; + } + return GetLastError(); +} + +static int path_make_parent(sal_Unicode* path) +{ + /* Cut off the last part of the given path to + get the parent only, e.g. 'c:\dir\subdir' -> + 'c:\dir' or '\\share\sub\dir' -> '\\share\sub' + @return The position where the path has been cut + off (this is the position of the last backslash). + If there are no more parents 0 will be returned, + e.g. 'c:\' or '\\Share' have no more parents */ + + OSL_PRECOND(rtl_ustr_indexOfChar(path, SLASH) == -1, "Path must not contain slashes"); + OSL_PRECOND(has_path_parent(path), "Path must have a parent"); + + sal_Unicode* pos_last_backslash = path + rtl_ustr_lastIndexOfChar(path, BACKSLASH); + *pos_last_backslash = 0; + return (pos_last_backslash - path); +} + +static DWORD create_dir_recursively_( + rtl_uString * dir_path, + oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, + void* pData) +{ + OSL_PRECOND( + rtl_ustr_lastIndexOfChar_WithLength(dir_path->buffer, dir_path->length, BACKSLASH) != dir_path->length, + "Path must not end with a backslash"); + + DWORD w32_error = create_dir_with_callback( + dir_path, aDirectoryCreationCallbackFunc, pData); + if (w32_error == ERROR_SUCCESS) + return ERROR_SUCCESS; + + if ((w32_error != ERROR_PATH_NOT_FOUND) || !has_path_parent(dir_path->buffer)) + return w32_error; + + int pos = path_make_parent(dir_path->buffer); // dir_path->buffer[pos] = 0, restore below + + w32_error = create_dir_recursively_( + dir_path, aDirectoryCreationCallbackFunc, pData); + + dir_path->buffer[pos] = BACKSLASH; // restore + + if (ERROR_SUCCESS != w32_error && ERROR_ALREADY_EXISTS != w32_error) + return w32_error; + + return create_dir_recursively_(dir_path, aDirectoryCreationCallbackFunc, pData); +} + +oslFileError SAL_CALL osl_createDirectoryPath( + rtl_uString* aDirectoryUrl, + oslDirectoryCreationCallbackFunc aDirectoryCreationCallbackFunc, + void* pData) +{ + if (aDirectoryUrl == nullptr) + return osl_File_E_INVAL; + + OUString sys_path; + oslFileError osl_error = + osl_getSystemPathFromFileURL_(OUString::unacquired(&aDirectoryUrl), &sys_path.pData, false); + + if (osl_error != osl_File_E_None) + return osl_error; + + osl::systemPathRemoveSeparator(sys_path); + + // const_cast because sys_path is a local copy + // which we want to modify inplace instead of + // copy it into another buffer on the heap again + return oslTranslateFileError(create_dir_recursively_( + sys_path.pData, aDirectoryCreationCallbackFunc, pData)); +} + +oslFileError SAL_CALL osl_createDirectory(rtl_uString* strPath) +{ + return osl_createDirectoryWithFlags( + strPath, osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); +} + +oslFileError osl_createDirectoryWithFlags(rtl_uString * strPath, sal_uInt32) +{ + OUString strSysPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + + if ( osl_File_E_None != error ) + return error; + + bool bCreated = CreateDirectoryW(o3tl::toW(strSysPath.getStr()), nullptr); + if ( !bCreated ) + { + /*@@@ToDo + The following case is a hack because the ucb or the webtop had some + problems with the error code that CreateDirectory returns in + case the path is only a logical drive, should be removed! + */ + + if ((strSysPath.getLength() == 2 || (strSysPath.getLength() == 3 && strSysPath[2] == '\\')) + && rtl::isAsciiAlpha(strSysPath[0]) && strSysPath[1] == ':') + SetLastError( ERROR_ALREADY_EXISTS ); + + error = oslTranslateFileError( GetLastError() ); + } + + return error; +} + +oslFileError SAL_CALL osl_removeDirectory(rtl_uString* strPath) +{ + OUString strSysPath; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strPath), &strSysPath.pData, false); + + if ( osl_File_E_None == error ) + { + if (RemoveDirectoryW(o3tl::toW(strSysPath.getStr()))) + error = osl_File_E_None; + else + error = oslTranslateFileError( GetLastError() ); + } + return error; +} + +oslFileError SAL_CALL osl_openDirectory(rtl_uString *strDirectoryPath, oslDirectory *pDirectory) +{ + oslFileError error; + + if ( 0 == rtl_ustr_ascii_compareIgnoreAsciiCase( strDirectoryPath->buffer, "file:///" ) ) + error = osl_openLocalRoot( strDirectoryPath, pDirectory ); + else + { + OUString strSysDirectoryPath; + DWORD dwPathType; + + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strDirectoryPath), &strSysDirectoryPath.pData, false); + + if ( osl_File_E_None != error ) + return error; + + dwPathType = IsValidFilePath(strSysDirectoryPath, VALIDATEPATH_NORMAL, nullptr); + + if ( dwPathType & PATHTYPE_IS_SERVER ) + error = osl_openNetworkServer(strSysDirectoryPath.pData, pDirectory); + else + error = osl_openFileDirectory(strSysDirectoryPath.pData, pDirectory); + } + return error; +} + +static oslFileError osl_getNextNetResource( + oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 /*uHint*/ ) +{ + Directory_Impl *pDirImpl = static_cast(Directory); + DirectoryItem_Impl *pItemImpl = nullptr; + BYTE buffer[16384]; + LPNETRESOURCEW lpNetResource = reinterpret_cast(buffer); + DWORD dwError, dwCount, dwBufSize; + + if ( !pItem ) + return osl_File_E_INVAL; + *pItem = nullptr; + + if ( !pDirImpl ) + return osl_File_E_INVAL; + + dwCount = 1; + dwBufSize = sizeof(buffer); + dwError = WNetEnumResourceW( pDirImpl->hDirectory, &dwCount, lpNetResource, &dwBufSize ); + + switch ( dwError ) + { + case NO_ERROR: + case ERROR_MORE_DATA: + { + pItemImpl = new (std::nothrow) DirectoryItem_Impl; + if ( !pItemImpl ) + return osl_File_E_NOMEM; + + pItemImpl->uType = DIRECTORYITEM_DRIVE; + osl_acquireDirectoryItem( static_cast(pItemImpl) ); + + wcscpy( pItemImpl->cDriveString, lpNetResource->lpRemoteName ); + + *pItem = pItemImpl; + } + return osl_File_E_None; + case ERROR_NO_MORE_ITEMS: + return osl_File_E_NOENT; + default: + return oslTranslateFileError( dwError ); + } +} + +static oslFileError osl_getNextDrive( + oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 /*uHint*/ ) +{ + Directory_Impl *pDirImpl = static_cast(Directory); + DirectoryItem_Impl *pItemImpl = nullptr; + bool fSuccess; + + if ( !pItem ) + return osl_File_E_INVAL; + *pItem = nullptr; + + if ( !pDirImpl ) + return osl_File_E_INVAL; + + pItemImpl = new (std::nothrow) DirectoryItem_Impl; + if ( !pItemImpl ) + return osl_File_E_NOMEM; + + pItemImpl->uType = DIRECTORYITEM_DRIVE; + osl_acquireDirectoryItem( static_cast(pItemImpl) ); + fSuccess = EnumLogicalDrives( pDirImpl->hEnumDrives, pItemImpl->cDriveString ); + + if ( fSuccess ) + { + *pItem = pItemImpl; + return osl_File_E_None; + } + else + { + delete pItemImpl; + return oslTranslateFileError( GetLastError() ); + } +} + +static oslFileError osl_getNextFileItem( + oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 /*uHint*/) +{ + Directory_Impl *pDirImpl = static_cast(Directory); + DirectoryItem_Impl *pItemImpl = nullptr; + bool fFound; + + if ( !pItem ) + return osl_File_E_INVAL; + *pItem = nullptr; + + if ( !pDirImpl ) + return osl_File_E_INVAL; + + pItemImpl = new (std::nothrow) DirectoryItem_Impl; + if ( !pItemImpl ) + return osl_File_E_NOMEM; + + fFound = EnumDirectory( pDirImpl->hDirectory, &pItemImpl->FindData ); + if ( !fFound ) + { + delete pItemImpl; + return oslTranslateFileError( GetLastError() ); + } + + pItemImpl->uType = DIRECTORYITEM_FILE; + pItemImpl->nRefCount = 1; + + pItemImpl->m_sFullPath = pDirImpl->m_sDirectoryPath + o3tl::toU(pItemImpl->FindData.cFileName); + + pItemImpl->bFullPathNormalized = true; + *pItem = static_cast(pItemImpl); + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_getNextDirectoryItem( + oslDirectory Directory, oslDirectoryItem *pItem, sal_uInt32 uHint) +{ + Directory_Impl *pDirImpl = static_cast(Directory); + + /* Assume failure */ + + if ( !pItem ) + return osl_File_E_INVAL; + *pItem = nullptr; + + if ( !pDirImpl ) + return osl_File_E_INVAL; + + switch ( pDirImpl->uType ) + { + case DIRECTORYTYPE_LOCALROOT: + return osl_getNextDrive( Directory, pItem, uHint ); + case DIRECTORYTYPE_NETROOT: + return osl_getNextNetResource( Directory, pItem, uHint ); + case DIRECTORYTYPE_FILESYSTEM: + return osl_getNextFileItem( Directory, pItem, uHint ); + default: + return osl_File_E_INVAL; + } +} + +oslFileError SAL_CALL osl_closeDirectory(oslDirectory Directory) +{ + Directory_Impl *pDirImpl = static_cast(Directory); + oslFileError eError = osl_File_E_INVAL; + + if ( pDirImpl ) + { + switch ( pDirImpl->uType ) + { + case DIRECTORYTYPE_FILESYSTEM: + eError = CloseDirectory( pDirImpl->hDirectory ) ? osl_File_E_None : oslTranslateFileError( GetLastError() ); + break; + case DIRECTORYTYPE_LOCALROOT: + eError = CloseLogicalDrivesEnum( pDirImpl->hEnumDrives ) ? osl_File_E_None : oslTranslateFileError( GetLastError() ); + break; + case DIRECTORYTYPE_NETROOT: + { + DWORD err = WNetCloseEnum(pDirImpl->hDirectory); + eError = (err == NO_ERROR) ? osl_File_E_None : oslTranslateFileError(err); + } + break; + default: + OSL_FAIL( "Invalid directory type" ); + break; + } + + delete pDirImpl; + } + return eError; +} + +namespace { + +/* Different types of paths */ +enum PATHTYPE +{ + PATHTYPE_SYNTAXERROR = 0, + PATHTYPE_NETROOT, + PATHTYPE_NETSERVER, + PATHTYPE_VOLUME, + PATHTYPE_FILE +}; + +} + +oslFileError SAL_CALL osl_getDirectoryItem(rtl_uString *strFilePath, oslDirectoryItem *pItem) +{ + oslFileError error = osl_File_E_None; + OUString strSysFilePath; + PATHTYPE type = PATHTYPE_FILE; + DWORD dwPathType; + + /* Assume failure */ + + if ( !pItem ) + return osl_File_E_INVAL; + + *pItem = nullptr; + + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&strFilePath), &strSysFilePath.pData, false); + + if ( osl_File_E_None != error ) + return error; + + dwPathType = IsValidFilePath( strSysFilePath, VALIDATEPATH_NORMAL, nullptr ); + + if ( dwPathType & PATHTYPE_IS_VOLUME ) + type = PATHTYPE_VOLUME; + else if ( dwPathType & PATHTYPE_IS_SERVER ) + type = PATHTYPE_NETSERVER; + else + type = PATHTYPE_FILE; + + switch ( type ) + { + case PATHTYPE_NETSERVER: + { + DirectoryItem_Impl* pItemImpl = new (std::nothrow) DirectoryItem_Impl; + + if ( !pItemImpl ) + error = osl_File_E_NOMEM; + + if ( osl_File_E_None == error ) + { + pItemImpl->uType = DIRECTORYITEM_SERVER; + + osl_acquireDirectoryItem( static_cast(pItemImpl) ); + pItemImpl->m_sFullPath = strSysFilePath; + + // Assign a title anyway + { + int iSrc = 2; + int iDst = 0; + + while( iSrc < strSysFilePath.getLength() && strSysFilePath[iSrc] && strSysFilePath[iSrc] != '\\') + { + pItemImpl->FindData.cFileName[iDst++] = strSysFilePath[iSrc++]; + } + } + + *pItem = pItemImpl; + } + } + break; + case PATHTYPE_VOLUME: + { + DirectoryItem_Impl* pItemImpl = new (std::nothrow) DirectoryItem_Impl; + + if ( !pItemImpl ) + error = osl_File_E_NOMEM; + + if ( osl_File_E_None == error ) + { + pItemImpl->uType = DIRECTORYITEM_DRIVE; + + osl_acquireDirectoryItem( static_cast(pItemImpl) ); + + wcscpy( pItemImpl->cDriveString, o3tl::toW(strSysFilePath.getStr()) ); + pItemImpl->cDriveString[0] = rtl::toAsciiUpperCase( pItemImpl->cDriveString[0] ); + + if ( pItemImpl->cDriveString[wcslen(pItemImpl->cDriveString) - 1] != '\\' ) + wcscat( pItemImpl->cDriveString, L"\\" ); + + *pItem = pItemImpl; + } + } + break; + case PATHTYPE_SYNTAXERROR: + case PATHTYPE_NETROOT: + case PATHTYPE_FILE: + { + HANDLE hFind; + WIN32_FIND_DATAW aFindData; + + if (!strSysFilePath.isEmpty() && strSysFilePath[strSysFilePath.getLength() - 1] == '\\') + strSysFilePath = strSysFilePath.copy(0, strSysFilePath.getLength() - 1); + + hFind = FindFirstFileW( o3tl::toW(strSysFilePath.getStr()), &aFindData ); + + if ( hFind != INVALID_HANDLE_VALUE ) + { + DirectoryItem_Impl *pItemImpl = new (std::nothrow) DirectoryItem_Impl; + if (!pItemImpl) + error = osl_File_E_NOMEM; + + if (osl_File_E_None == error) + { + osl_acquireDirectoryItem(static_cast(pItemImpl)); + + CopyMemory(&pItemImpl->FindData, &aFindData, sizeof(WIN32_FIND_DATAW)); + pItemImpl->m_sFullPath = strSysFilePath; + + pItemImpl->uType = DIRECTORYITEM_FILE; + *pItem = pItemImpl; + } + + FindClose( hFind ); + } + else + error = oslTranslateFileError( GetLastError() ); + } + break; + } + + return error; +} + +oslFileError SAL_CALL osl_acquireDirectoryItem( oslDirectoryItem Item ) +{ + DirectoryItem_Impl *pItemImpl = static_cast(Item); + + if ( !pItemImpl ) + return osl_File_E_INVAL; + + pItemImpl->nRefCount++; + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_releaseDirectoryItem( oslDirectoryItem Item ) +{ + DirectoryItem_Impl *pItemImpl = static_cast(Item); + + if ( !pItemImpl ) + return osl_File_E_INVAL; + + if ( ! --pItemImpl->nRefCount ) + delete pItemImpl; + + return osl_File_E_None; +} + +sal_Bool +SAL_CALL osl_identicalDirectoryItem( oslDirectoryItem a, oslDirectoryItem b) +{ + DirectoryItem_Impl *pA = static_cast(a); + DirectoryItem_Impl *pB = static_cast(b); + if (a == b) + return true; + /* same name => same item, unless renaming / moving madness has occurred */ + if (pA->m_sFullPath == pB->m_sFullPath) + return true; + + // FIXME: as/when/if this is used in anger on Windows we could + // do better here. + + return false; +} + +static bool is_floppy_A_present() +{ return (GetLogicalDrives() & 1); } + +static bool is_floppy_B_present() +{ return (GetLogicalDrives() & 2); } + +static bool is_floppy_volume_mount_point(const OUString& path) +{ + // determines if a volume mount point shows to a floppy + // disk by comparing the unique volume names + static const LPCWSTR FLOPPY_A = L"A:\\"; + static const LPCWSTR FLOPPY_B = L"B:\\"; + + OUString p(path); + osl::systemPathEnsureSeparator(p); + + WCHAR vn[51]; + if (GetVolumeNameForVolumeMountPointW(o3tl::toW(p.getStr()), vn, SAL_N_ELEMENTS(vn))) + { + WCHAR vnfloppy[51]; + if (is_floppy_A_present() && + GetVolumeNameForVolumeMountPointW(FLOPPY_A, vnfloppy, SAL_N_ELEMENTS(vnfloppy)) && + (0 == wcscmp(vn, vnfloppy))) + return true; + + if (is_floppy_B_present() && + GetVolumeNameForVolumeMountPointW(FLOPPY_B, vnfloppy, SAL_N_ELEMENTS(vnfloppy)) && + (0 == wcscmp(vn, vnfloppy))) + return true; + } + return false; +} + +static bool is_floppy_drive(const OUString& path) +{ + static const LPCWSTR FLOPPY_DRV_LETTERS = L"AaBb"; + + // we must take into account that even a floppy + // drive may be mounted to a directory so checking + // for the drive letter alone is not sufficient + // we must compare the unique volume name with + // that of the available floppy disks + + const sal_Unicode* pszPath = path.getStr(); + return ((wcschr(FLOPPY_DRV_LETTERS, pszPath[0]) && (L':' == pszPath[1])) || is_floppy_volume_mount_point(path)); +} + +static bool is_volume_mount_point(const OUString& path) +{ + OUString p(path); + osl::systemPathRemoveSeparator(p); + + if (is_floppy_drive(p)) + return false; + + DWORD fattr = GetFileAttributesW(o3tl::toW(p.getStr())); + if ((INVALID_FILE_ATTRIBUTES == fattr) || + !(FILE_ATTRIBUTE_REPARSE_POINT & fattr)) + return false; + + bool is_volume_root = false; + WIN32_FIND_DATAW find_data; + HANDLE h_find = FindFirstFileW(o3tl::toW(p.getStr()), &find_data); + + if (IsValidHandle(h_find) && + (FILE_ATTRIBUTE_REPARSE_POINT & find_data.dwFileAttributes) && + (IO_REPARSE_TAG_MOUNT_POINT == find_data.dwReserved0)) + { + is_volume_root = true; + } + if (IsValidHandle(h_find)) + FindClose(h_find); + return is_volume_root; +} + +static UINT get_volume_mount_point_drive_type(const OUString& path) +{ + if (0 == path.getLength()) + return GetDriveTypeW(nullptr); + + OUString p(path); + osl::systemPathEnsureSeparator(p); + + WCHAR vn[51]; + if (GetVolumeNameForVolumeMountPointW(o3tl::toW(p.getStr()), vn, SAL_N_ELEMENTS(vn))) + return GetDriveTypeW(vn); + + return DRIVE_NO_ROOT_DIR; +} + +static bool is_drivetype_request(sal_uInt32 field_mask) +{ + return (field_mask & osl_VolumeInfo_Mask_Attributes); +} + +static oslFileError osl_get_drive_type( + const OUString& path, oslVolumeInfo* pInfo) +{ + // GetDriveType fails on empty volume mount points + // see Knowledge Base Q244089 + UINT drive_type; + if (is_volume_mount_point(path)) + drive_type = get_volume_mount_point_drive_type(path); + else + drive_type = GetDriveTypeW(o3tl::toW(path.getStr())); + + if (DRIVE_NO_ROOT_DIR == drive_type) + return oslTranslateFileError(ERROR_INVALID_DRIVE); + + pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes; + + switch (drive_type) + { + case DRIVE_CDROM: + pInfo->uAttributes |= osl_Volume_Attribute_CompactDisc | osl_Volume_Attribute_Removeable; + break; + case DRIVE_REMOVABLE: + pInfo->uAttributes |= osl_Volume_Attribute_Removeable; + if (is_floppy_drive(path)) + pInfo->uAttributes |= osl_Volume_Attribute_FloppyDisk; + break; + case DRIVE_FIXED: + pInfo->uAttributes |= osl_Volume_Attribute_FixedDisk; + break; + case DRIVE_RAMDISK: + pInfo->uAttributes |= osl_Volume_Attribute_RAMDisk; + break; + case DRIVE_REMOTE: + pInfo->uAttributes |= osl_Volume_Attribute_Remote; + break; + case DRIVE_UNKNOWN: + pInfo->uAttributes = 0; + break; + default: + pInfo->uValidFields &= ~osl_VolumeInfo_Mask_Attributes; + pInfo->uAttributes = 0; + break; + } + return osl_File_E_None; +} + +static bool is_volume_space_info_request(sal_uInt32 field_mask) +{ + return (field_mask & + (osl_VolumeInfo_Mask_TotalSpace | + osl_VolumeInfo_Mask_UsedSpace | + osl_VolumeInfo_Mask_FreeSpace)); +} + +static void get_volume_space_information( + const OUString& path, oslVolumeInfo *pInfo) +{ + bool ret = GetDiskFreeSpaceExW( + o3tl::toW(path.getStr()), + reinterpret_cast(&pInfo->uFreeSpace), + reinterpret_cast(&pInfo->uTotalSpace), + nullptr); + + if (ret) + { + pInfo->uUsedSpace = pInfo->uTotalSpace - pInfo->uFreeSpace; + pInfo->uValidFields |= osl_VolumeInfo_Mask_TotalSpace | + osl_VolumeInfo_Mask_UsedSpace | + osl_VolumeInfo_Mask_FreeSpace; + } +} + +static bool is_filesystem_attributes_request(sal_uInt32 field_mask) +{ + return (field_mask & + (osl_VolumeInfo_Mask_MaxNameLength | + osl_VolumeInfo_Mask_MaxPathLength | + osl_VolumeInfo_Mask_FileSystemName | + osl_VolumeInfo_Mask_FileSystemCaseHandling)); +} + +static oslFileError get_filesystem_attributes( + const OUString& path, sal_uInt32 field_mask, oslVolumeInfo* pInfo) +{ + pInfo->uAttributes = 0; + + // osl_get_drive_type must be called first because + // this function resets osl_VolumeInfo_Mask_Attributes + // on failure + if (is_drivetype_request(field_mask)) + { + oslFileError osl_error = osl_get_drive_type(path, pInfo); + if (osl_File_E_None != osl_error) + return osl_error; + } + if (is_filesystem_attributes_request(field_mask)) + { + /* the following two parameters can not be longer than MAX_PATH+1 */ + WCHAR vn[MAX_PATH+1]; + WCHAR fsn[MAX_PATH+1]; + + DWORD serial; + DWORD mcl; + DWORD flags; + + LPCWSTR pszPath = o3tl::toW(path.getStr()); + if (GetVolumeInformationW(pszPath, vn, MAX_PATH+1, &serial, &mcl, &flags, fsn, MAX_PATH+1)) + { + // Currently sal does not use this value, instead MAX_PATH is used + pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxNameLength; + pInfo->uMaxNameLength = mcl; + + // Should the uMaxPathLength be set to 32767, "\\?\" prefix allows it + pInfo->uValidFields |= osl_VolumeInfo_Mask_MaxPathLength; + pInfo->uMaxPathLength = MAX_PATH; + + pInfo->uValidFields |= osl_VolumeInfo_Mask_FileSystemName; + rtl_uString_newFromStr(&pInfo->ustrFileSystemName, o3tl::toU(fsn)); + + // volumes (even NTFS) will always be considered case + // insensitive because the Win32 API is not able to + // deal with case sensitive volumes see M$ Knowledge Base + // article 100625 that's why we never set the attribute + // osl_Volume_Attribute_Case_Sensitive + + if (flags & FS_CASE_IS_PRESERVED) + pInfo->uAttributes |= osl_Volume_Attribute_Case_Is_Preserved; + + pInfo->uValidFields |= osl_VolumeInfo_Mask_Attributes; + } + } + return osl_File_E_None; +} + +static bool path_get_parent(OUString& path) +{ + OSL_PRECOND(path.lastIndexOf(SLASH) == -1, "Path must not have slashes"); + + if (!has_path_parent(path)) + { + sal_Int32 i = path.lastIndexOf(BACKSLASH); + if (-1 < i) + { + path = OUString(path.getStr(), i); + return true; + } + } + return false; +} + +static void path_travel_to_volume_root(const OUString& system_path, OUString& volume_root) +{ + OUString sys_path(system_path); + + while(!is_volume_mount_point(sys_path) && path_get_parent(sys_path)) + /**/; + + volume_root = sys_path; + osl::systemPathEnsureSeparator(volume_root); +} + +oslFileError SAL_CALL osl_getVolumeInformation( + rtl_uString *ustrURL, oslVolumeInfo *pInfo, sal_uInt32 uFieldMask ) +{ + if (!pInfo) + return osl_File_E_INVAL; + + OUString system_path; + oslFileError error = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrURL), &system_path.pData, false); + + if (osl_File_E_None != error) + return error; + + OUString volume_root; + path_travel_to_volume_root(system_path, volume_root); + + pInfo->uValidFields = 0; + + if ((error = get_filesystem_attributes(volume_root, uFieldMask, pInfo)) != osl_File_E_None) + return error; + + if (is_volume_space_info_request(uFieldMask)) + get_volume_space_information(volume_root, pInfo); + + if (uFieldMask & osl_VolumeInfo_Mask_DeviceHandle) + { + error = osl_getFileURLFromSystemPath(volume_root.pData, reinterpret_cast(&pInfo->pDeviceHandle)); + if (error != osl_File_E_None) + return error; + pInfo->uValidFields |= osl_VolumeInfo_Mask_DeviceHandle; + } + + return osl_File_E_None; +} + +static oslFileError osl_getDriveInfo( + oslDirectoryItem Item, oslFileStatus *pStatus, sal_uInt32 uFieldMask) +{ + DirectoryItem_Impl *pItemImpl = static_cast(Item); + WCHAR cDrive[3] = L"A:"; + WCHAR cRoot[4] = L"A:\\"; + + if ( !pItemImpl ) + return osl_File_E_INVAL; + + pStatus->uValidFields = 0; + + cDrive[0] = pItemImpl->cDriveString[0]; + cRoot[0] = pItemImpl->cDriveString[0]; + + if ( uFieldMask & osl_FileStatus_Mask_FileName ) + { + if ( pItemImpl->cDriveString[0] == '\\' && pItemImpl->cDriveString[1] == '\\' ) + { + LPCWSTR lpFirstBkSlash = wcschr( &pItemImpl->cDriveString[2], '\\' ); + + if ( lpFirstBkSlash && lpFirstBkSlash[1] ) + { + LPCWSTR lpLastBkSlash = wcschr( &lpFirstBkSlash[1], '\\' ); + + if ( lpLastBkSlash ) + rtl_uString_newFromStr_WithLength( &pStatus->ustrFileName, o3tl::toU(&lpFirstBkSlash[1]), lpLastBkSlash - lpFirstBkSlash - 1 ); + else + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(&lpFirstBkSlash[1]) ); + pStatus->uValidFields |= osl_FileStatus_Mask_FileName; + } + } + else switch ( GetDriveTypeW( cRoot ) ) + { + case DRIVE_REMOTE: + { + WCHAR szBuffer[1024]; + DWORD const dwBufsizeConst = SAL_N_ELEMENTS(szBuffer); + DWORD dwBufsize = dwBufsizeConst; + + DWORD dwResult = WNetGetConnectionW( cDrive, szBuffer, &dwBufsize ); + if ( NO_ERROR == dwResult ) + { + WCHAR szFileName[dwBufsizeConst + 16]; + + swprintf( szFileName, L"%s [%s]", cDrive, szBuffer ); + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(szFileName) ); + } + else + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(cDrive) ); + } + pStatus->uValidFields |= osl_FileStatus_Mask_FileName; + break; + case DRIVE_FIXED: + { + WCHAR szVolumeNameBuffer[1024]; + DWORD const dwBufsizeConst = SAL_N_ELEMENTS(szVolumeNameBuffer); + + if ( GetVolumeInformationW( cRoot, szVolumeNameBuffer, dwBufsizeConst, nullptr, nullptr, nullptr, nullptr, 0 ) ) + { + WCHAR szFileName[dwBufsizeConst + 16]; + + swprintf( szFileName, L"%s [%s]", cDrive, szVolumeNameBuffer ); + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(szFileName) ); + } + else + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(cDrive) ); + } + pStatus->uValidFields |= osl_FileStatus_Mask_FileName; + break; + case DRIVE_CDROM: + case DRIVE_REMOVABLE: + pStatus->uValidFields |= osl_FileStatus_Mask_FileName; + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(cRoot) ); + break; + case DRIVE_UNKNOWN: + default: + break; + } + } + + pStatus->eType = osl_File_Type_Volume; + pStatus->uValidFields |= osl_FileStatus_Mask_Type; + + if ( uFieldMask & osl_FileStatus_Mask_FileURL ) + { + rtl_uString *ustrSystemPath = nullptr; + + rtl_uString_newFromStr( &ustrSystemPath, o3tl::toU(pItemImpl->cDriveString) ); + oslFileError error = osl_getFileURLFromSystemPath( ustrSystemPath, &pStatus->ustrFileURL ); + rtl_uString_release( ustrSystemPath ); + if (error != osl_File_E_None) + return error; + pStatus->uValidFields |= osl_FileStatus_Mask_FileURL; + } + return osl_File_E_None; +} + +static oslFileError osl_getServerInfo( + oslDirectoryItem Item, oslFileStatus *pStatus, sal_uInt32 uFieldMask ) +{ + DirectoryItem_Impl *pItemImpl = static_cast(Item); + if ( !pItemImpl ) + return osl_File_E_INVAL; + + pStatus->uValidFields = 0; + pStatus->eType = osl_File_Type_Directory; + pStatus->uValidFields |= osl_FileStatus_Mask_Type; + + if ( uFieldMask & osl_FileStatus_Mask_FileURL ) + { + oslFileError error = osl_getFileURLFromSystemPath( pItemImpl->m_sFullPath.pData, &pStatus->ustrFileURL ); + if (error != osl_File_E_None) + return error; + pStatus->uValidFields |= osl_FileStatus_Mask_FileURL; + } + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_getFileStatus( + oslDirectoryItem Item, + oslFileStatus *pStatus, + sal_uInt32 uFieldMask ) +{ + DirectoryItem_Impl *pItemImpl = static_cast(Item); + + if ( !pItemImpl ) + return osl_File_E_INVAL; + + switch ( pItemImpl->uType ) + { + case DIRECTORYITEM_DRIVE: + return osl_getDriveInfo( Item, pStatus, uFieldMask ); + case DIRECTORYITEM_SERVER: + return osl_getServerInfo( Item, pStatus, uFieldMask ); + default: + break; + } + + OUString sFullPath(pItemImpl->m_sFullPath); + + // Prefix long paths, windows API calls expect this prefix + // (only local paths starting with something like C: or D:) + if (sFullPath.getLength() >= MAX_PATH && isalpha(sFullPath[0]) && sFullPath[1] == ':') + sFullPath = "\\\\?\\" + sFullPath; + + if ( uFieldMask & osl_FileStatus_Mask_Validate ) + { + HANDLE hFind = FindFirstFileW( o3tl::toW(sFullPath.getStr() ), &pItemImpl->FindData ); + + if ( hFind != INVALID_HANDLE_VALUE ) + FindClose( hFind ); + else + return oslTranslateFileError( GetLastError() ); + + uFieldMask &= ~ osl_FileStatus_Mask_Validate; + } + + /* If no fields to retrieve left ignore pStatus */ + if ( !uFieldMask ) + return osl_File_E_None; + + /* Otherwise, this must be a valid pointer */ + if ( !pStatus ) + return osl_File_E_INVAL; + + if ( pStatus->uStructSize != sizeof(oslFileStatus) ) + return osl_File_E_INVAL; + + pStatus->uValidFields = 0; + + /* File time stamps */ + + if ( (uFieldMask & osl_FileStatus_Mask_ModifyTime) && + FileTimeToTimeValue( &pItemImpl->FindData.ftLastWriteTime, &pStatus->aModifyTime ) ) + pStatus->uValidFields |= osl_FileStatus_Mask_ModifyTime; + + if ( (uFieldMask & osl_FileStatus_Mask_AccessTime) && + FileTimeToTimeValue( &pItemImpl->FindData.ftLastAccessTime, &pStatus->aAccessTime ) ) + pStatus->uValidFields |= osl_FileStatus_Mask_AccessTime; + + if ( (uFieldMask & osl_FileStatus_Mask_CreationTime) && + FileTimeToTimeValue( &pItemImpl->FindData.ftCreationTime, &pStatus->aCreationTime ) ) + pStatus->uValidFields |= osl_FileStatus_Mask_CreationTime; + + /* Most of the fields are already set, regardless of required fields */ + + rtl_uString_newFromStr( &pStatus->ustrFileName, o3tl::toU(pItemImpl->FindData.cFileName) ); + pStatus->uValidFields |= osl_FileStatus_Mask_FileName; + + if ((FILE_ATTRIBUTE_REPARSE_POINT & pItemImpl->FindData.dwFileAttributes) && + (IO_REPARSE_TAG_MOUNT_POINT == pItemImpl->FindData.dwReserved0)) + pStatus->eType = osl_File_Type_Volume; + else if (pItemImpl->FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + pStatus->eType = osl_File_Type_Directory; + else + pStatus->eType = osl_File_Type_Regular; + + pStatus->uValidFields |= osl_FileStatus_Mask_Type; + + pStatus->uAttributes = pItemImpl->FindData.dwFileAttributes; + pStatus->uValidFields |= osl_FileStatus_Mask_Attributes; + + pStatus->uFileSize = static_cast(pItemImpl->FindData.nFileSizeLow) + (static_cast(pItemImpl->FindData.nFileSizeHigh) << 32); + pStatus->uValidFields |= osl_FileStatus_Mask_FileSize; + + if ( uFieldMask & osl_FileStatus_Mask_LinkTargetURL ) + { + oslFileError error = osl_getFileURLFromSystemPath( sFullPath.pData, &pStatus->ustrLinkTargetURL ); + if (error != osl_File_E_None) + return error; + + pStatus->uValidFields |= osl_FileStatus_Mask_LinkTargetURL; + } + + if ( uFieldMask & osl_FileStatus_Mask_FileURL ) + { + if ( !pItemImpl->bFullPathNormalized ) + { + ::osl::LongPathBuffer aBuffer(MAX_LONG_PATH); + sal_uInt32 nNewLen = GetLongPathNameW(o3tl::toW(sFullPath.getStr()), o3tl::toW(aBuffer), + aBuffer.getBufSizeInSymbols()); + + if ( nNewLen ) + { + /* Capitalizes drive name (single letter). Windows file paths are processed + case-sensitively. While parsing a path, function osl_DirectoryItem has case + PATHTYPE_VOLUME for drives, and capitalizes them. That can be overwritten by + function osl_getFileStatus, in it win32 api GetLongPathNameW does no + capitalization. Thus it needs to be postprocessed.*/ + sal_Int32 nIndex = rtl_ustr_indexOfChar(aBuffer, ':'); + if (nIndex > 0) { + aBuffer[nIndex - 1] = rtl::toAsciiUpperCase(aBuffer[nIndex - 1]); + } + + pItemImpl->m_sFullPath = OUString(&*aBuffer, nNewLen); + sFullPath = pItemImpl->m_sFullPath; + pItemImpl->bFullPathNormalized = true; + } + } + + oslFileError error = osl_getFileURLFromSystemPath( sFullPath.pData, &pStatus->ustrFileURL ); + if (error != osl_File_E_None) + return error; + pStatus->uValidFields |= osl_FileStatus_Mask_FileURL; + } + + return osl_File_E_None; +} + +oslFileError SAL_CALL osl_setFileAttributes( + rtl_uString *ustrFileURL, + sal_uInt64 uAttributes ) +{ + oslFileError error; + OUString ustrSysPath; + DWORD dwFileAttributes; + bool fSuccess; + + // Converts the normalized path into a systempath + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrFileURL), &ustrSysPath.pData, false); + + if ( osl_File_E_None != error ) + return error; + + dwFileAttributes = GetFileAttributesW(o3tl::toW(ustrSysPath.getStr())); + + if ( DWORD(-1) != dwFileAttributes ) + { + dwFileAttributes &= ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN); + + if ( uAttributes & osl_File_Attribute_ReadOnly ) + dwFileAttributes |= FILE_ATTRIBUTE_READONLY; + + if ( uAttributes & osl_File_Attribute_Hidden ) + dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN; + + fSuccess = SetFileAttributesW(o3tl::toW(ustrSysPath.getStr()), dwFileAttributes); + } + else + { + fSuccess = false; + } + + if ( !fSuccess ) + error = oslTranslateFileError( GetLastError() ); + + return error; +} + +oslFileError SAL_CALL osl_setFileTime( + rtl_uString *filePath, + const TimeValue *aCreationTime, + const TimeValue *aLastAccessTime, + const TimeValue *aLastWriteTime) +{ + oslFileError error; + OUString sysPath; + FILETIME *lpCreationTime=nullptr; + FILETIME *lpLastAccessTime=nullptr; + FILETIME *lpLastWriteTime=nullptr; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + HANDLE hFile; + bool fSuccess; + + error=osl_getSystemPathFromFileURL_(OUString::unacquired(&filePath), &sysPath.pData, false); + + if (error==osl_File_E_INVAL) + return error; + + hFile=CreateFileW(o3tl::toW(sysPath.getStr()), GENERIC_WRITE, 0, nullptr , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); + + if (hFile==INVALID_HANDLE_VALUE) + return osl_File_E_NOENT; + + if (TimeValueToFileTime(aCreationTime, &ftCreationTime)) + lpCreationTime=&ftCreationTime; + + if (TimeValueToFileTime(aLastAccessTime, &ftLastAccessTime)) + lpLastAccessTime=&ftLastAccessTime; + + if (TimeValueToFileTime(aLastWriteTime, &ftLastWriteTime)) + lpLastWriteTime=&ftLastWriteTime; + + fSuccess=SetFileTime(hFile, lpCreationTime, lpLastAccessTime, lpLastWriteTime); + + CloseHandle(hFile); + + if (!fSuccess) + return osl_File_E_INVAL; + else + return osl_File_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/file_error.cxx b/sal/osl/w32/file_error.cxx new file mode 100644 index 000000000..feefaca38 --- /dev/null +++ b/sal/osl/w32/file_error.cxx @@ -0,0 +1,125 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "file_error.hxx" +#include + +namespace { + +/* OS error to oslFileError values mapping table */ +struct osl_file_error_entry +{ + unsigned long oscode; /* OS return value */ + int errnocode; /* oslFileError code */ +}; + +} + +const struct osl_file_error_entry errtable[] = { + { ERROR_SUCCESS, osl_File_E_None }, /* 0 */ + { ERROR_INVALID_FUNCTION, osl_File_E_INVAL }, /* 1 */ + { ERROR_FILE_NOT_FOUND, osl_File_E_NOENT }, /* 2 */ + { ERROR_PATH_NOT_FOUND, osl_File_E_NOENT }, /* 3 */ + { ERROR_TOO_MANY_OPEN_FILES, osl_File_E_MFILE }, /* 4 */ + { ERROR_ACCESS_DENIED, osl_File_E_ACCES }, /* 5 */ + { ERROR_INVALID_HANDLE, osl_File_E_BADF }, /* 6 */ + { ERROR_ARENA_TRASHED, osl_File_E_NOMEM }, /* 7 */ + { ERROR_NOT_ENOUGH_MEMORY, osl_File_E_NOMEM }, /* 8 */ + { ERROR_INVALID_BLOCK, osl_File_E_NOMEM }, /* 9 */ + { ERROR_BAD_ENVIRONMENT, osl_File_E_2BIG }, /* 10 */ + { ERROR_BAD_FORMAT, osl_File_E_NOEXEC }, /* 11 */ + { ERROR_INVALID_ACCESS, osl_File_E_INVAL }, /* 12 */ + { ERROR_INVALID_DATA, osl_File_E_INVAL }, /* 13 */ + { ERROR_INVALID_DRIVE, osl_File_E_NOENT }, /* 15 */ + { ERROR_CURRENT_DIRECTORY, osl_File_E_ACCES }, /* 16 */ + { ERROR_NOT_SAME_DEVICE, osl_File_E_XDEV }, /* 17 */ + { ERROR_NO_MORE_FILES, osl_File_E_NOENT }, /* 18 */ + { ERROR_NOT_READY, osl_File_E_NOTREADY }, /* 21 */ + { ERROR_SHARING_VIOLATION, osl_File_E_ACCES }, /* 32 */ + { ERROR_LOCK_VIOLATION, osl_File_E_ACCES }, /* 33 */ + { ERROR_BAD_NETPATH, osl_File_E_NOENT }, /* 53 */ + { ERROR_NETWORK_ACCESS_DENIED, osl_File_E_ACCES }, /* 65 */ + { ERROR_BAD_NET_NAME, osl_File_E_NOENT }, /* 67 */ + { ERROR_FILE_EXISTS, osl_File_E_EXIST }, /* 80 */ + { ERROR_CANNOT_MAKE, osl_File_E_ACCES }, /* 82 */ + { ERROR_FAIL_I24, osl_File_E_ACCES }, /* 83 */ + { ERROR_INVALID_PARAMETER, osl_File_E_INVAL }, /* 87 */ + { ERROR_NO_PROC_SLOTS, osl_File_E_AGAIN }, /* 89 */ + { ERROR_DRIVE_LOCKED, osl_File_E_ACCES }, /* 108 */ + { ERROR_BROKEN_PIPE, osl_File_E_PIPE }, /* 109 */ + { ERROR_DISK_FULL, osl_File_E_NOSPC }, /* 112 */ + { ERROR_INVALID_TARGET_HANDLE, osl_File_E_BADF }, /* 114 */ + { ERROR_INVALID_NAME, osl_File_E_NOENT }, /* 123 */ + { ERROR_INVALID_HANDLE, osl_File_E_INVAL }, /* 124 */ + { ERROR_WAIT_NO_CHILDREN, osl_File_E_CHILD }, /* 128 */ + { ERROR_CHILD_NOT_COMPLETE, osl_File_E_CHILD }, /* 129 */ + { ERROR_DIRECT_ACCESS_HANDLE, osl_File_E_BADF }, /* 130 */ + { ERROR_NEGATIVE_SEEK, osl_File_E_INVAL }, /* 131 */ + { ERROR_SEEK_ON_DEVICE, osl_File_E_ACCES }, /* 132 */ + { ERROR_DIR_NOT_EMPTY, osl_File_E_NOTEMPTY }, /* 145 */ + { ERROR_NOT_LOCKED, osl_File_E_ACCES }, /* 158 */ + { ERROR_BAD_PATHNAME, osl_File_E_NOENT }, /* 161 */ + { ERROR_MAX_THRDS_REACHED, osl_File_E_AGAIN }, /* 164 */ + { ERROR_LOCK_FAILED, osl_File_E_ACCES }, /* 167 */ + { ERROR_ALREADY_EXISTS, osl_File_E_EXIST }, /* 183 */ + { ERROR_FILENAME_EXCED_RANGE, osl_File_E_NOENT }, /* 206 */ + { ERROR_NESTING_NOT_ALLOWED, osl_File_E_AGAIN }, /* 215 */ + { ERROR_FILE_CHECKED_OUT, osl_File_E_ACCES }, /* 220 */ + { ERROR_DIRECTORY, osl_File_E_NOTDIR }, /* 267 */ + { ERROR_NOT_ENOUGH_QUOTA, osl_File_E_NOMEM }, /* 1816 */ + { ERROR_CANT_ACCESS_FILE, osl_File_E_ACCES }, /* 1920 */ + { ERROR_UNEXP_NET_ERR, osl_File_E_NETWORK } /* 59 */ +}; + +/* The following two constants must be the minimum and maximum + values in the (contiguous) range of osl_File_E_xec Failure errors. +*/ +#define MIN_EXEC_ERROR ERROR_INVALID_STARTING_CODESEG +#define MAX_EXEC_ERROR ERROR_INFLOOP_IN_RELOC_CHAIN + +/* These are the low and high value in the range of errors that are + access violations +*/ +#define MIN_EACCES_RANGE ERROR_WRITE_PROTECT +#define MAX_EACCES_RANGE ERROR_SHARING_BUFFER_EXCEEDED + +oslFileError oslTranslateFileError (/*DWORD*/ unsigned long dwError) +{ + static const int n = SAL_N_ELEMENTS(errtable); + + int i; + for (i = 0; i < n; ++i ) + { + if (dwError == errtable[i].oscode) + return static_cast(errtable[i].errnocode); + } + + /* The error code wasn't in the table. We check for a range of + osl_File_E_ACCES errors or exec failure errors (ENOEXEC). + Otherwise osl_File_E_INVAL is returned. + */ + if ( (dwError >= MIN_EACCES_RANGE) && (dwError <= MAX_EACCES_RANGE) ) + return osl_File_E_ACCES; + else if ( (dwError >= MIN_EXEC_ERROR) && (dwError <= MAX_EXEC_ERROR) ) + return osl_File_E_NOEXEC; + else + return osl_File_E_INVAL; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/file_error.hxx b/sal/osl/w32/file_error.hxx new file mode 100644 index 000000000..4da87c132 --- /dev/null +++ b/sal/osl/w32/file_error.hxx @@ -0,0 +1,29 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_W32_FILE_ERROR_HXX +#define INCLUDED_SAL_OSL_W32_FILE_ERROR_HXX + +#include + +oslFileError oslTranslateFileError(/*DWORD*/ unsigned long dwError); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/file_url.cxx b/sal/osl/w32/file_url.cxx new file mode 100644 index 000000000..8c525042d --- /dev/null +++ b/sal/osl/w32/file_url.cxx @@ -0,0 +1,990 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#include +#include +#include + +#include + +#include "file_url.hxx" +#include "file_error.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "path_helper.hxx" + +// FileURL functions + +namespace +{ +constexpr std::u16string_view WSTR_SYSTEM_ROOT_PATH = u"\\\\.\\"; +constexpr std::u16string_view WSTR_LONG_PATH_PREFIX = u"\\\\?\\"; +constexpr std::u16string_view WSTR_LONG_PATH_PREFIX_UNC = u"\\\\?\\UNC\\"; + +// Internal functions that expect only backslashes as path separators + +bool startsWithDriveColon(std::u16string_view s) +{ + return s.length() >= 2 && rtl::isAsciiAlpha(s[0]) && s[1] == ':'; +} + +bool startsWithDriveColonSlash(std::u16string_view s) +{ + return s.length() >= 3 && startsWithDriveColon(s) && s[2] == '\\'; +} + +bool startsWithSlashSlash(std::u16string_view s) { return o3tl::starts_with(s, u"\\\\"); } + +// An absolute path starts either with \\ (an UNC or device path like \\.\ or \\?\) +// or with a ASCII alpha character followed by colon followed by backslash. +bool isAbsolute(std::u16string_view s) +{ + return startsWithSlashSlash(s) || startsWithDriveColonSlash(s); +} + +bool onSameDrive(std::u16string_view s1, std::u16string_view s2) +{ + assert(startsWithDriveColon(s1) && startsWithDriveColon(s2)); + return rtl::toAsciiUpperCase(s1[0]) == rtl::toAsciiUpperCase(s2[0]) && s1[1] == s2[1]; +} + +sal_Int32 getRootLength(std::u16string_view path) +{ + assert(isAbsolute(path)); + size_t nResult = 0; + if (startsWithSlashSlash(path)) + { + // Cases: + // 1. Device UNC: \\?\UNC\server\share or \\.\UNC\server\share + // 2. Non-device UNC: \\server\share + // 3. Device non-UNC: \\?\C: or \\.\C: + bool bUNC = false; + if (path.length() > 3 && (path[2] == '.' || path[2] == '?') && path[3] == '\\') + { + if (path.substr(4, 4) == u"UNC\\") + { + // \\?\UNC\server\share or \\.\UNC\server\share + nResult = 8; + bUNC = true; + } + else + { + // \\?\C: or \\.\C: + assert(startsWithDriveColon(path.substr(4))); + nResult = 6; + } + } + else + { + // \\server\share + nResult = 2; + bUNC = true; + } + if (bUNC) + { + // \\?\UNC\server\share or \\.\UNC\server\share or \\server\share + assert(nResult < path.length() && path[nResult] != '\\'); + // Skip server name and share name + for (int nSlashes = 0; nResult < path.length(); ++nResult) + { + if (path[nResult] == '\\' && ++nSlashes == 2) + break; + } + } + } + else + { + // C: + assert(startsWithDriveColon(path)); + nResult = 2; + } + return std::min(nResult, path.length()); +} + +std::u16string_view pathView(std::u16string_view path, bool bOnlyRoot) +{ + return bOnlyRoot ? path.substr(0, getRootLength(path)) : path; +} + +OUString combinePath(std::u16string_view basePath, std::u16string_view relPath) +{ + const bool needSep = !o3tl::ends_with(basePath, u'\\'); + const auto sSeparator = needSep ? std::u16string_view(u"\\") : std::u16string_view(); + if (o3tl::starts_with(relPath, u'\\')) + relPath.remove_prefix(1); // avoid two adjacent backslashes + return OUString::Concat(basePath) + sSeparator + relPath; +} + +OUString removeRelativeParts(const OUString& p) +{ + const sal_Int32 rootPos = getRootLength(p); + OUStringBuffer buf(p.getLength()); + buf.append(p.subView(0, rootPos)); + std::stack partPositions; + bool bAfterSlash = false; + for (sal_Int32 i = rootPos; i < p.getLength(); ++i) + { + sal_Unicode c = p[i]; + if (c == '\\') + { + if (i + 1 < p.getLength() && p[i + 1] == '.') + { + if (i + 2 == p.getLength() || p[i + 2] == '\\') + { + // 1. Skip current directory (\.\ or trailing \.) + ++i; // process next slash: it may start another "\.\" + } + else if (p[i + 2] == '.' && (i + 3 == p.getLength() || p[i + 3] == '\\')) + { + // 2. For parent directory (\..\), drop previous part and skip + if (bAfterSlash && partPositions.size()) + partPositions.pop(); + sal_Int32 nParentPos = partPositions.size() ? partPositions.top() : rootPos; + if (partPositions.size()) + partPositions.pop(); + buf.truncate(nParentPos); + bAfterSlash = false; // we have just removed slash after parent part + i += 2; // process next slash: it may start another "\.\" + } + } + if (bAfterSlash) + continue; // 3. Skip double backslashes (\\) + partPositions.push(buf.getLength()); + bAfterSlash = true; + } + else + bAfterSlash = false; + + buf.append(c); + } + return buf.makeStringAndClear(); +} +} + +static bool IsValidFilePathComponent( + std::optional& roComponent, + DWORD dwFlags) +{ + assert(roComponent); + auto lpComponentEnd = roComponent->end(); + auto lpCurrent = roComponent->begin(); + bool bValid = lpCurrent != lpComponentEnd; // Empty components are not allowed + sal_Unicode cLast = 0; + + while (bValid) + { + /* Path component length must not exceed MAX_PATH even if long path with "\\?\" prefix is used */ + if (lpCurrent - roComponent->begin() >= MAX_PATH) + { + bValid = false; + break; + } + + switch ( *lpCurrent ) + { + /* Both backslash and slash determine the end of a path component */ + case '\0': + case '/': + case '\\': + switch ( cLast ) + { + /* Component must not end with '.' or blank and can't be empty */ + + case '.': + if ( dwFlags & VALIDATEPATH_ALLOW_ELLIPSE ) + { + if ( (dwFlags & VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD) || + 1 == lpCurrent - roComponent->begin() ) + { + /* Either do allow periods anywhere, or current directory */ + lpComponentEnd = lpCurrent; + break; + } + else if ( 2 == lpCurrent - roComponent->begin() && '.' == roComponent->front() ) + { + /* Parent directory is O.K. */ + lpComponentEnd = lpCurrent; + break; + } + } + [[fallthrough]]; + case 0: + case ' ': + if ( dwFlags & VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD ) + lpComponentEnd = lpCurrent; + else + bValid = false; + break; + default: + lpComponentEnd = lpCurrent; + break; + } + break; + /* The following characters are reserved */ + case '?': + case '*': + case '<': + case '>': + case '\"': + case '|': + case ':': + bValid = false; + break; + default: + /* Characters below ASCII 32 are not allowed */ + if ( *lpCurrent < ' ' ) + bValid = false; + break; + } + + if (lpCurrent != lpComponentEnd) + cLast = *lpCurrent++; + + if (lpCurrent == lpComponentEnd) + break; + } + + if ( bValid ) + { + // Empty components are not allowed + if (lpComponentEnd - roComponent->begin() < 1) + bValid = false; + // If we reached the end of the string nullopt is returned + else if (lpComponentEnd == roComponent->end()) + roComponent.reset(); + else + roComponent->remove_prefix(lpComponentEnd - roComponent->begin()); + } + + return bValid; +} + +static sal_Int32 countInitialSeparators(std::u16string_view path) { + size_t n = 0; + while (n < path.length() && (path[n] == '\\' || path[n] == '/')) + ++n; + return n; +} + +DWORD IsValidFilePath(const OUString& path, DWORD dwFlags, OUString* corrected) +{ + std::optional oComponent = path; + bool bValid = true; + DWORD dwPathType = PATHTYPE_ERROR; + + if ( dwFlags & VALIDATEPATH_ALLOW_RELATIVE ) + dwFlags |= VALIDATEPATH_ALLOW_ELLIPSE; + + DWORD dwCandidatPathType = PATHTYPE_ERROR; + + if (path.matchIgnoreAsciiCase(WSTR_LONG_PATH_PREFIX_UNC)) + { + /* This is long path in UNC notation */ + oComponent = path.subView(WSTR_LONG_PATH_PREFIX_UNC.size()); + dwCandidatPathType = PATHTYPE_ABSOLUTE_UNC | PATHTYPE_IS_LONGPATH; + } + else if (path.matchIgnoreAsciiCase(WSTR_LONG_PATH_PREFIX)) + { + /* This is long path */ + oComponent = path.subView(WSTR_LONG_PATH_PREFIX.size()); + + if (startsWithDriveColon(*oComponent)) + { + oComponent->remove_prefix(2); + dwCandidatPathType = PATHTYPE_ABSOLUTE_LOCAL | PATHTYPE_IS_LONGPATH; + } + } + else if ( 2 == countInitialSeparators(path) ) + { + /* The UNC path notation */ + oComponent = path.subView(2); + dwCandidatPathType = PATHTYPE_ABSOLUTE_UNC; + } + else if (startsWithDriveColon(path)) + { + /* Local path verification. Must start with : */ + oComponent = path.subView(2); + dwCandidatPathType = PATHTYPE_ABSOLUTE_LOCAL; + } + + if ( ( dwCandidatPathType & PATHTYPE_MASK_TYPE ) == PATHTYPE_ABSOLUTE_UNC ) + { + bValid = IsValidFilePathComponent(oComponent, VALIDATEPATH_ALLOW_ELLIPSE); + + /* So far we have a valid servername. Now let's see if we also have a network resource */ + + dwPathType = dwCandidatPathType; + + if ( bValid ) + { + if (oComponent) + { + oComponent->remove_prefix(1); + if (oComponent->empty()) + oComponent.reset(); + } + + if (!oComponent) + { + dwPathType |= PATHTYPE_IS_SERVER; + } + else + { + /* Now test the network resource */ + + bValid = IsValidFilePathComponent(oComponent, 0); + + /* If we now reached the end of the path, everything is O.K. */ + + if (bValid) + { + if (oComponent) + { + oComponent->remove_prefix(1); + if (oComponent->empty()) + oComponent.reset(); + } + if (!oComponent) + dwPathType |= PATHTYPE_IS_VOLUME; + } + } + } + } + else if ( ( dwCandidatPathType & PATHTYPE_MASK_TYPE ) == PATHTYPE_ABSOLUTE_LOCAL ) + { + if (1 == countInitialSeparators(*oComponent)) + oComponent->remove_prefix(1); + else if (!oComponent->empty()) + bValid = false; + + dwPathType = dwCandidatPathType; + + /* Now we are behind the backslash or it was a simple drive without backslash */ + + if (bValid && oComponent->empty()) + { + oComponent.reset(); + dwPathType |= PATHTYPE_IS_VOLUME; + } + } + else if ( dwFlags & VALIDATEPATH_ALLOW_RELATIVE ) + { + /* Can be a relative path */ + oComponent = path; + + /* Relative path can start with a backslash */ + + if (1 == countInitialSeparators(*oComponent)) + { + oComponent->remove_prefix(1); + if (oComponent->empty()) + oComponent.reset(); + } + + dwPathType = PATHTYPE_RELATIVE; + } + else + { + /* Anything else is an error */ + bValid = false; + } + + /* Now validate each component of the path */ + OUString lastCorrected = path; + while (bValid && oComponent) + { + // Correct path by merging consecutive slashes: + if (o3tl::starts_with(*oComponent, u"\\") && corrected != nullptr) { + sal_Int32 i = oComponent->data() - lastCorrected.getStr(); + *corrected = lastCorrected.replaceAt(i, 1, {}); + //TODO: handle out-of-memory + lastCorrected = *corrected; + oComponent = lastCorrected.subView(i); + } + + bValid = IsValidFilePathComponent(oComponent, dwFlags | VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD); + + if (bValid && oComponent) + { + oComponent->remove_prefix(1); + + /* If the string behind the backslash is empty, we've done */ + + if (oComponent->empty()) + oComponent.reset(); + } + } + + /* The path can be longer than MAX_PATH only in case it has the longpath prefix */ + if (bValid && !(dwPathType & PATHTYPE_IS_LONGPATH) && path.getLength() >= MAX_PATH) + { + bValid = false; + } + + return bValid ? dwPathType : PATHTYPE_ERROR; +} + +static std::optional osl_decodeURL_(const OString& sUTF8) +{ + const char *pSrcEnd; + const char *pSrc; + bool bValidEncoded = true; /* Assume success */ + + /* The resulting decoded string length is shorter or equal to the source length */ + + const sal_Int32 nSrcLen = sUTF8.getLength(); + OStringBuffer aBuffer(nSrcLen + 1); + + pSrc = sUTF8.getStr(); + pSrcEnd = pSrc + nSrcLen; + + /* Now decode the URL what should result in a UTF-8 string */ + while ( bValidEncoded && pSrc < pSrcEnd ) + { + switch ( *pSrc ) + { + case '%': + { + char aToken[3]; + char aChar; + + pSrc++; + aToken[0] = *pSrc++; + aToken[1] = *pSrc++; + aToken[2] = 0; + + aChar = static_cast(strtoul( aToken, nullptr, 16 )); + + /* The chars are path delimiters and must not be encoded */ + + if ( 0 == aChar || '\\' == aChar || '/' == aChar || ':' == aChar ) + bValidEncoded = false; + else + aBuffer.append(aChar); + } + break; + case '\0': + case '#': + case '?': + bValidEncoded = false; + break; + default: + aBuffer.append(*pSrc++); + break; + } + } + + return bValidEncoded ? OUString(aBuffer.getStr(), aBuffer.getLength(), RTL_TEXTENCODING_UTF8) + : std::optional(); +} + +static OUString osl_encodeURL_(std::u16string_view sURL) +{ + /* Encode non ascii characters within the URL */ + + const char *pURLScan; + sal_Int32 nURLScanLen; + sal_Int32 nURLScanCount; + + OString sUTF8 = OUStringToOString(sURL, RTL_TEXTENCODING_UTF8); + + OUStringBuffer sEncodedURL(sUTF8.getLength() * 3 + 1); + pURLScan = sUTF8.getStr(); + nURLScanLen = sUTF8.getLength(); + nURLScanCount = 0; + + while ( nURLScanCount < nURLScanLen ) + { + char cCurrent = *pURLScan; + switch ( cCurrent ) + { + default: + if (!( ( cCurrent >= 'a' && cCurrent <= 'z' ) || ( cCurrent >= 'A' && cCurrent <= 'Z' ) || ( cCurrent >= '0' && cCurrent <= '9' ) ) ) + { + char buf[3]; + sprintf( buf, "%02X", static_cast(cCurrent) ); + sEncodedURL.append('%').appendAscii(buf, 2); + break; + } + [[fallthrough]]; + case '!': + case '\'': + case '(': + case ')': + case '*': + case '-': + case '.': + case '_': + case '~': + case '$': + case '&': + case '+': + case ',': + case '=': + case '@': + case ':': + case '/': + case '\\': + case '|': + sEncodedURL.appendAscii(&cCurrent, 1); + break; + case 0: + break; + } + + pURLScan++; + nURLScanCount++; + } + + return sEncodedURL.makeStringAndClear(); +} + +// A helper that makes sure that for existing part of the path, the case is correct. +// Unlike GetLongPathNameW that it wraps, this function does not require the path to exist. +static OUString GetCaseCorrectPathName(std::u16string_view sysPath) +{ + // Prepare a null-terminated string first. + // Neither OUString, nor u16string_view are guaranteed to be null-terminated + osl::LongPathBuffer szPath(sysPath.size() + WSTR_LONG_PATH_PREFIX_UNC.size() + 1); + wchar_t* const pPath = szPath; + wchar_t* pEnd = pPath; + size_t sysPathOffset = 0; + if (sysPath.size() >= MAX_PATH && isAbsolute(sysPath) + && !o3tl::starts_with(sysPath, WSTR_LONG_PATH_PREFIX)) + { + // Allow GetLongPathNameW consume long paths + std::u16string_view prefix = WSTR_LONG_PATH_PREFIX; + if (startsWithSlashSlash(sysPath)) + { + sysPathOffset = 2; // skip leading "\\" + prefix = WSTR_LONG_PATH_PREFIX_UNC; + } + pEnd = std::copy(prefix.begin(), prefix.end(), pEnd); + } + wchar_t* const pStart = pEnd; + pEnd = std::copy(sysPath.begin() + sysPathOffset, sysPath.end(), pStart); + *pEnd = 0; + osl::LongPathBuffer aBuf(MAX_LONG_PATH); + while (pEnd > pStart) + { + std::u16string_view curPath(o3tl::toU(pPath), pEnd - pPath); + if (curPath == u"\\\\" || curPath == WSTR_SYSTEM_ROOT_PATH + || curPath == WSTR_LONG_PATH_PREFIX + || o3tl::equalsIgnoreAsciiCase(curPath, WSTR_LONG_PATH_PREFIX_UNC)) + break; // Do not check if the special path prefix exists itself + + DWORD nNewLen = GetLongPathNameW(pPath, aBuf, aBuf.getBufSizeInSymbols()); + if (nNewLen == 0) + { + // Error? + const DWORD err = GetLastError(); + if (err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND) + { + // Check the base path; skip possible trailing separator + size_t sepPos = curPath.substr(0, curPath.size() - 1).rfind(u'\\'); + if (sepPos != std::u16string_view::npos) + { + pEnd = pPath + sepPos; + *pEnd = 0; + continue; + } + } + else + { + SAL_WARN("sal.osl", "GetLongPathNameW: Windows error code " + << err << " processing path " << OUString(curPath)); + } + break; // All other errors, or no separators left + } + assert(nNewLen < aBuf.getBufSizeInSymbols()); + // Combine the case-correct leading part with the non-existing trailing part + return OUString::Concat(std::u16string_view(o3tl::toU(aBuf), nNewLen)) + + sysPath.substr(pEnd - pStart + sysPathOffset); + }; + return OUString(sysPath); // We found no existing parts - just assume it's OK +} + +oslFileError osl_getSystemPathFromFileURL_(const OUString& strURL, rtl_uString **pustrPath, bool bAllowRelative) +{ + OUString sTempPath; + oslFileError nError = osl_File_E_INVAL; /* Assume failure */ + + /* If someone hasn't encoded the complete URL we convert it to UTF8 now to prevent from + having a mixed encoded URL later */ + + OString sUTF8 = OUStringToOString(strURL, RTL_TEXTENCODING_UTF8); + + /* If the length of strUTF8 and strURL differs it indicates that the URL was not correct encoded */ + + SAL_WARN_IF( + sUTF8.getLength() != strURL.getLength() && + strURL.matchIgnoreAsciiCase("file:\\") + , "sal.osl" + ,"osl_getSystemPathFromFileURL: \"" << strURL << "\" is not encoded !!!"); + + if (auto sDecodedURL = osl_decodeURL_(sUTF8)) + { + /* Replace backslashes and pipes */ + + sDecodedURL = sDecodedURL->replace('/', '\\').replace('|', ':'); + + /* Must start with "file:/" */ + if ( sDecodedURL->startsWithIgnoreAsciiCase("file:\\") ) + { + sal_uInt32 nSkip; + + if ( sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\\\") ) + nSkip = 8; + else if ( + sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\localhost\\") || + sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\127.0.0.1\\") + ) + nSkip = 17; + else if ( sDecodedURL->startsWithIgnoreAsciiCase("file:\\\\") ) + nSkip = 5; + else + nSkip = 6; + + const sal_uInt32 nDecodedLen = sDecodedURL->getLength(); + + /* Indicates local root */ + if ( nDecodedLen == nSkip ) + sTempPath = WSTR_SYSTEM_ROOT_PATH; + else + { + /* do not separate the directory and file case, so the maximal path length without prefix is MAX_PATH-12 */ + if ( nDecodedLen - nSkip <= MAX_PATH - 12 ) + { + sTempPath = sDecodedURL->subView(nSkip); + } + else + { + sDecodedURL = GetCaseCorrectPathName(sDecodedURL->subView(nSkip)); + if (sDecodedURL->getLength() <= MAX_PATH - 12 + || sDecodedURL->startsWith(WSTR_SYSTEM_ROOT_PATH) + || sDecodedURL->startsWith(WSTR_LONG_PATH_PREFIX)) + { + sTempPath = *sDecodedURL; + } + else if (sDecodedURL->startsWith("\\\\")) + { + /* it should be an UNC path, use the according prefix */ + sTempPath = OUString::Concat(WSTR_LONG_PATH_PREFIX_UNC) + sDecodedURL->subView(2); + } + else + { + sTempPath = WSTR_LONG_PATH_PREFIX + *sDecodedURL; + } + } + } + + if (IsValidFilePath(sTempPath, VALIDATEPATH_ALLOW_ELLIPSE, &sTempPath)) + nError = osl_File_E_None; + } + else if ( bAllowRelative ) /* This maybe a relative file URL */ + { + /* In future the relative path could be converted to absolute if it is too long */ + sTempPath = *sDecodedURL; + + if (IsValidFilePath(sTempPath, VALIDATEPATH_ALLOW_RELATIVE | VALIDATEPATH_ALLOW_ELLIPSE, &sTempPath)) + nError = osl_File_E_None; + } + else + SAL_INFO_IF(nError, "sal.osl", + "osl_getSystemPathFromFileURL: \"" << strURL << "\" is not an absolute FileURL"); + + } + + if ( osl_File_E_None == nError ) + rtl_uString_assign(pustrPath, sTempPath.pData); + + SAL_INFO_IF(nError, "sal.osl", + "osl_getSystemPathFromFileURL: \"" << strURL << "\" is not a FileURL"); + + return nError; +} + +oslFileError osl_getFileURLFromSystemPath( rtl_uString* strPath, rtl_uString** pstrURL ) +{ + oslFileError nError = osl_File_E_INVAL; /* Assume failure */ + OUString sTempURL; + DWORD dwPathType = PATHTYPE_ERROR; + + if (strPath) + dwPathType = IsValidFilePath(OUString::unacquired(&strPath), VALIDATEPATH_ALLOW_RELATIVE, nullptr); + + if (dwPathType) + { + OUString sTempPath; + const OUString& sPath = OUString::unacquired(&strPath); + + if ( dwPathType & PATHTYPE_IS_LONGPATH ) + { + /* the path has the longpath prefix, lets remove it */ + switch ( dwPathType & PATHTYPE_MASK_TYPE ) + { + case PATHTYPE_ABSOLUTE_UNC: + static_assert(WSTR_LONG_PATH_PREFIX_UNC.size() == 8, + "Unexpected long path UNC prefix!"); + + /* generate the normal UNC path */ + sTempPath = "\\\\" + sPath.copy(8).replace('\\', '/'); + break; + + case PATHTYPE_ABSOLUTE_LOCAL: + static_assert(WSTR_LONG_PATH_PREFIX.size() == 4, + "Unexpected long path prefix!"); + + /* generate the normal path */ + sTempPath = sPath.copy(4).replace('\\', '/'); + break; + + default: + OSL_FAIL( "Unexpected long path format!" ); + sTempPath = sPath.replace('\\', '/'); + break; + } + } + else + { + /* Replace backslashes */ + sTempPath = sPath.replace('\\', '/'); + } + + switch ( dwPathType & PATHTYPE_MASK_TYPE ) + { + case PATHTYPE_RELATIVE: + sTempURL = sTempPath; + nError = osl_File_E_None; + break; + case PATHTYPE_ABSOLUTE_UNC: + sTempURL = "file:" + sTempPath; + nError = osl_File_E_None; + break; + case PATHTYPE_ABSOLUTE_LOCAL: + sTempURL = "file:///" + sTempPath; + nError = osl_File_E_None; + break; + default: + break; + } + } + + if ( osl_File_E_None == nError ) + { + /* Encode the URL */ + rtl_uString_assign(pstrURL, osl_encodeURL_(sTempURL).pData); + OSL_ASSERT(*pstrURL != nullptr); + } + + SAL_INFO_IF(nError, "sal.osl", + "osl_getFileURLFromSystemPath: \"" << OUString::unacquired(&strPath) << "\" is not a systemPath"); + return nError; +} + +oslFileError SAL_CALL osl_getSystemPathFromFileURL( + rtl_uString *ustrURL, rtl_uString **pustrPath) +{ + return osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrURL), pustrPath, true); +} + +oslFileError SAL_CALL osl_searchFileURL( + rtl_uString *ustrFileName, + rtl_uString *ustrSystemSearchPath, + rtl_uString **pustrPath) +{ + OUString ustrUNCPath; + OUString ustrSysPath; + oslFileError error; + + /* First try to interpret the file name as a URL even a relative one */ + error = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrFileName), &ustrUNCPath.pData, true); + + /* So far we either have an UNC path or something invalid + Now create a system path */ + if ( osl_File_E_None == error ) + error = osl_getSystemPathFromFileURL_(ustrUNCPath, &ustrSysPath.pData, true); + + if ( osl_File_E_None == error ) + { + DWORD nBufferLength; + DWORD dwResult; + LPWSTR lpBuffer = nullptr; + LPWSTR lpszFilePart; + + /* Repeat calling SearchPath ... + Start with MAX_PATH for the buffer. In most cases this + will be enough and does not force the loop to run twice */ + dwResult = MAX_PATH; + + do + { + /* If search path is empty use a nullptr pointer instead according to MSDN documentation of SearchPath */ + LPCWSTR lpszSearchPath = ustrSystemSearchPath && ustrSystemSearchPath->length ? o3tl::toW(ustrSystemSearchPath->buffer) : nullptr; + LPCWSTR lpszSearchFile = o3tl::toW(ustrSysPath.getStr()); + + /* Allocate space for buffer according to previous returned count of required chars */ + /* +1 is not necessary if we follow MSDN documentation but for robustness we do so */ + nBufferLength = dwResult + 1; + lpBuffer = lpBuffer ? + static_cast(realloc(lpBuffer, nBufferLength * sizeof(WCHAR))) : + static_cast(malloc(nBufferLength * sizeof(WCHAR))); + + dwResult = SearchPathW( lpszSearchPath, lpszSearchFile, nullptr, nBufferLength, lpBuffer, &lpszFilePart ); + } while ( dwResult && dwResult >= nBufferLength ); + + /* ... until an error occurs or buffer is large enough. + dwResult == nBufferLength can not happen according to documentation but lets be robust ;-) */ + + if ( dwResult ) + { + ustrSysPath = o3tl::toU(lpBuffer); + error = osl_getFileURLFromSystemPath(ustrSysPath.pData, pustrPath); + } + else + { + WIN32_FIND_DATAW aFindFileData; + HANDLE hFind; + + /* something went wrong, perhaps the path was absolute */ + error = oslTranslateFileError( GetLastError() ); + + hFind = FindFirstFileW(o3tl::toW(ustrSysPath.getStr()), &aFindFileData); + + if ( IsValidHandle(hFind) ) + { + error = osl_getFileURLFromSystemPath(ustrSysPath.pData, pustrPath); + FindClose( hFind ); + } + } + + free( lpBuffer ); + } + + return error; +} + +oslFileError SAL_CALL osl_getAbsoluteFileURL( rtl_uString* ustrBaseURL, rtl_uString* ustrRelativeURL, rtl_uString** pustrAbsoluteURL ) +{ + oslFileError eError = osl_File_E_None; + OUString ustrRelSysPath; + OUString ustrBaseSysPath; + + if ( ustrBaseURL && ustrBaseURL->length ) + { + eError = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrBaseURL), &ustrBaseSysPath.pData, false); + OSL_ENSURE( osl_File_E_None == eError, "osl_getAbsoluteFileURL called with relative or invalid base URL" ); + } + if (eError == osl_File_E_None) + { + eError = osl_getSystemPathFromFileURL_(OUString::unacquired(&ustrRelativeURL), &ustrRelSysPath.pData, + !ustrBaseSysPath.isEmpty()); + OSL_ENSURE( osl_File_E_None == eError, "osl_getAbsoluteFileURL called with empty base URL and/or invalid relative URL" ); + } + + if ( !eError ) + { + OUString sResultPath; +/*@@@ToDo + The whole FileURL implementation should be merged + with the rtl/uri class. +*/ + // If ustrRelSysPath is absolute, we don't need ustrBaseSysPath. + if (!ustrBaseSysPath.isEmpty() && !isAbsolute(ustrRelSysPath)) + { + // ustrBaseSysPath is known here to be a valid absolute path -> its first two characters + // are ASCII (either alpha + colon, or double backslashes) + + // Don't use SetCurrentDirectoryW together with GetFullPathNameW, because: + // (a) it needs synchronization and may affect threads that may access relative paths; + // (b) it would give wrong results for non-existing base path (allowed by RFC2396). + + if (startsWithDriveColon(ustrRelSysPath)) + { + // Special case: a path relative to a specific drive's current directory. + // Should we error out here? + + // If ustrBaseSysPath is on the same drive as ustrRelSysPath, then take base path + // as is; otherwise, use current directory on ustrRelSysPath's drive as base path + if (onSameDrive(ustrRelSysPath, ustrBaseSysPath)) + { + sResultPath = combinePath(ustrBaseSysPath, ustrRelSysPath.subView(2)); + } + else + { + // Call GetFullPathNameW to get current directory on ustrRelSysPath's drive + wchar_t baseDrive[3] = { ustrRelSysPath[0], ':' }; // just "C:" + osl::LongPathBuffer aBuf(MAX_LONG_PATH); + DWORD dwResult + = GetFullPathNameW(baseDrive, aBuf.getBufSizeInSymbols(), aBuf, nullptr); + if (dwResult) + { + if (dwResult >= aBuf.getBufSizeInSymbols()) + eError = osl_File_E_INVAL; + else + sResultPath = combinePath(o3tl::toU(aBuf), ustrRelSysPath.subView(2)); + } + else + eError = oslTranslateFileError(GetLastError()); + } + } + else + { + // Is this a rooted relative path (starting with a backslash)? + // Then we need only root from base. E.g., + // ustrBaseSysPath is "\\server\share\path1\" and ustrRelSysPath is "\path2\to\file" + // => \\server\share\path2\to\file + // ustrBaseSysPath is "D:\path1\" and ustrRelSysPath is "\path2\to\file" + // => D:\path2\to\file + auto sBaseView(pathView(ustrBaseSysPath, ustrRelSysPath.startsWith("\\"))); + sResultPath = combinePath(sBaseView, ustrRelSysPath); + } + } + else + sResultPath = ustrRelSysPath; + + if (eError == osl_File_E_None) + { + sResultPath = removeRelativeParts(sResultPath); + eError = osl_getFileURLFromSystemPath(sResultPath.pData, pustrAbsoluteURL); + } + } + + return eError; +} + +oslFileError SAL_CALL osl_getCanonicalName( rtl_uString *strRequested, rtl_uString **strValid ) +{ + rtl_uString_newFromString(strValid, strRequested); + return osl_File_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/file_url.hxx b/sal/osl/w32/file_url.hxx new file mode 100644 index 000000000..86ce27060 --- /dev/null +++ b/sal/osl/w32/file_url.hxx @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_W32_FILE_URL_HXX +#define INCLUDED_SAL_OSL_W32_FILE_URL_HXX + +#include +#include +#include +#include + +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include + +#define PATHTYPE_ERROR 0 +#define PATHTYPE_RELATIVE 1 +#define PATHTYPE_ABSOLUTE_UNC 2 +#define PATHTYPE_ABSOLUTE_LOCAL 3 +#define PATHTYPE_MASK_TYPE 0xFF +#define PATHTYPE_IS_VOLUME 0x0100 +#define PATHTYPE_IS_SERVER 0x0200 +#define PATHTYPE_IS_LONGPATH 0x0400 + +#define VALIDATEPATH_NORMAL 0x0000 +#define VALIDATEPATH_ALLOW_ELLIPSE 0x0002 +#define VALIDATEPATH_ALLOW_RELATIVE 0x0004 +#define VALIDATEPATH_ALLOW_INVALID_SPACE_AND_PERIOD 0x0010 + +#define MAX_LONG_PATH 32767 + +DWORD IsValidFilePath ( + const OUString& path, + DWORD dwFlags, + OUString* corrected +); + +oslFileError osl_getSystemPathFromFileURL_ ( + const OUString& strURL, + rtl_uString** pustrPath, + bool bAllowRelative +); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/filetime.hxx b/sal/osl/w32/filetime.hxx new file mode 100644 index 000000000..dc355591a --- /dev/null +++ b/sal/osl/w32/filetime.hxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_W32_FILETIME_HXX +#define INCLUDED_SAL_OSL_W32_FILETIME_HXX + +#include + +#define WIN32_LEAN_AND_MEAN +#include + +#include + +BOOL TimeValueToFileTime(TimeValue const* cpTimeVal, FILETIME* pFTime); + +BOOL FileTimeToTimeValue(FILETIME const* cpFTime, TimeValue* pTimeVal); + +namespace osl::detail +{ +inline __int64 getFiletime(FILETIME const& ft) +{ + return (DWORD64(ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +} + +inline void setFiletime(FILETIME& ft, __int64 value) +{ + ft.dwHighDateTime = value >> 32; + ft.dwLowDateTime = value & 0xFFFFFFFF; +} +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/w32/interlck.cxx b/sal/osl/w32/interlck.cxx new file mode 100644 index 000000000..b9ecf6d78 --- /dev/null +++ b/sal/osl/w32/interlck.cxx @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" + +#include + +oslInterlockedCount SAL_CALL osl_incrementInterlockedCount(oslInterlockedCount* pCount) +{ + return InterlockedIncrement(pCount); +} + +oslInterlockedCount SAL_CALL osl_decrementInterlockedCount(oslInterlockedCount* pCount) +{ + return InterlockedDecrement(pCount); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/memory.cxx b/sal/osl/w32/memory.cxx new file mode 100644 index 000000000..1f1a5b516 --- /dev/null +++ b/sal/osl/w32/memory.cxx @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +void* osl_aligned_alloc( sal_Size align, sal_Size size ) +{ + return _aligned_malloc(size, align); +} + +void osl_aligned_free( void* p ) +{ + _aligned_free(p); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/module.cxx b/sal/osl/w32/module.cxx new file mode 100644 index 000000000..8379e14b2 --- /dev/null +++ b/sal/osl/w32/module.cxx @@ -0,0 +1,202 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" + +#include "file_url.hxx" +#include "path_helper.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + under WIN32, we use the void* oslModule + as a WIN32 HANDLE (which is also a 32-bit value) +*/ + +oslModule SAL_CALL osl_loadModule(rtl_uString *strModuleName, sal_Int32 /*nRtldMode*/ ) +{ + HMODULE h; +#if OSL_DEBUG_LEVEL < 2 + UINT errorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS); +#endif + rtl_uString* Module = nullptr; + oslModule ret = nullptr; + oslFileError nError; + + SAL_INFO( "sal.osl", "osl_loadModule: " << OUString(strModuleName) ); + OSL_ASSERT(strModuleName); + + nError = osl_getSystemPathFromFileURL(strModuleName, &Module); + + if ( osl_File_E_None != nError ) + rtl_uString_assign(&Module, strModuleName); + + h = LoadLibraryW(o3tl::toW(Module->buffer)); + + if (h == nullptr) + h = LoadLibraryExW(o3tl::toW(Module->buffer), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); + + // In case of long path names (\\?\c:\...) try to shorten the filename. + // LoadLibrary cannot handle file names which exceed 260 letters. + // In case the path is too long, the function will fail. However, the error + // code can be different. For example, it returned ERROR_FILENAME_EXCED_RANGE + // on Windows XP and ERROR_INSUFFICIENT_BUFFER on Windows 7 (64bit) + if (h == nullptr && Module->length > 260) + { + std::vector vec(Module->length + 1); + DWORD len = GetShortPathNameW(o3tl::toW(Module->buffer), vec.data(), Module->length + 1); + if (len ) + { + h = LoadLibraryW(vec.data()); + + if (h == nullptr) + h = LoadLibraryExW(vec.data(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); + } + } + + ret = static_cast(h); + rtl_uString_release(Module); +#if OSL_DEBUG_LEVEL < 2 + SetErrorMode(errorMode); +#endif + + return ret; +} + +oslModule SAL_CALL osl_loadModuleAscii(const char *pModuleName, sal_Int32 ) +{ + HMODULE h; + UINT errorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS); + oslModule ret = nullptr; + + SAL_INFO( "sal.osl", "osl_loadModule: " << pModuleName ); + OSL_ASSERT(pModuleName); + + h = LoadLibraryA(pModuleName); + if (h == nullptr) + h = LoadLibraryExA(pModuleName, nullptr, + LOAD_WITH_ALTERED_SEARCH_PATH); + + ret = static_cast(h); + SetErrorMode(errorMode); + + return ret; +} + +oslModule osl_loadModuleRelativeAscii( + oslGenericFunction baseModule, char const * relativePath, sal_Int32 mode) +{ + return osl_loadModuleRelative(baseModule, OUString::createFromAscii(relativePath).pData, mode); +} + +sal_Bool SAL_CALL +osl_getModuleHandle(rtl_uString *pModuleName, oslModule *pResult) +{ + LPCWSTR pName = pModuleName ? o3tl::toW(pModuleName->buffer) : nullptr; + HMODULE h = GetModuleHandleW(pName); + if( h ) + { + *pResult = static_cast(h); + return true; + } + + return false; +} + +void SAL_CALL osl_unloadModule(oslModule Module) +{ + FreeLibrary(static_cast(Module)); +} + +void* SAL_CALL osl_getSymbol(oslModule Module, rtl_uString *strSymbolName) +{ + /* casting from a function pointer to a data pointer is invalid + be in this case unavoidable because the API has to stay + compatible. We need to keep this function which returns a + void* by definition */ + return reinterpret_cast(osl_getFunctionSymbol(Module, strSymbolName)); +} + +oslGenericFunction SAL_CALL osl_getFunctionSymbol( oslModule Module, rtl_uString *strSymbolName ) +{ + rtl_String *symbolName = nullptr; + oslGenericFunction address; + + OSL_ASSERT(Module); + OSL_ASSERT(strSymbolName); + + rtl_uString2String( + &symbolName, + strSymbolName->buffer, + strSymbolName->length, + RTL_TEXTENCODING_UTF8, + OUSTRING_TO_OSTRING_CVTFLAGS + ); + + address=osl_getAsciiFunctionSymbol(Module, rtl_string_getStr(symbolName)); + rtl_string_release(symbolName); + + return address; +} + +oslGenericFunction SAL_CALL +osl_getAsciiFunctionSymbol( oslModule Module, const char *pSymbol ) +{ + oslGenericFunction fncAddr = nullptr; + + if( pSymbol ) + fncAddr=reinterpret_cast(GetProcAddress(static_cast(Module), pSymbol)); + + return fncAddr; +} + +sal_Bool SAL_CALL osl_getModuleURLFromAddress( void *pv, rtl_uString **pustrURL ) +{ + HMODULE hModule{}; + GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS + | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + static_cast(pv), &hModule); + if (!hModule) + return false; + + ::osl::LongPathBuffer aBuffer(MAX_LONG_PATH); + + DWORD nch = GetModuleFileNameW(hModule, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols()); + + OUString ustrSysPath(aBuffer, nch); + return osl_getFileURLFromSystemPath(ustrSysPath.pData, pustrURL) == osl_File_E_None; +} + +sal_Bool SAL_CALL osl_getModuleURLFromFunctionAddress( oslGenericFunction addr, rtl_uString ** ppLibraryUrl ) +{ + /* casting a function pointer to a data pointer (void*) is + not allowed according to the C/C++ standards. In this case + it is unavoidable because we have to stay compatible we + cannot remove any function. */ + return osl_getModuleURLFromAddress(reinterpret_cast(addr), ppLibraryUrl); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/mutex.cxx b/sal/osl/w32/mutex.cxx new file mode 100644 index 000000000..7de4c41ee --- /dev/null +++ b/sal/osl/w32/mutex.cxx @@ -0,0 +1,88 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "system.h" + +#include +#include + +/* + Implementation notes: + The void* hidden by oslMutex points to a WIN32 + CRITICAL_SECTION structure. +*/ + +oslMutex SAL_CALL osl_createMutex(void) +{ + CRITICAL_SECTION* pMutexImpl; + + pMutexImpl = static_cast(calloc(sizeof(CRITICAL_SECTION), 1)); + + OSL_ASSERT(pMutexImpl); /* alloc successful? */ + + InitializeCriticalSection(pMutexImpl); + + return reinterpret_cast(pMutexImpl); +} + +void SAL_CALL osl_destroyMutex(oslMutex Mutex) +{ + CRITICAL_SECTION* pMutexImpl = reinterpret_cast(Mutex); + + if (pMutexImpl) + { + DeleteCriticalSection(pMutexImpl); + free(pMutexImpl); + } +} + +sal_Bool SAL_CALL osl_acquireMutex(oslMutex Mutex) +{ + CRITICAL_SECTION* pMutexImpl = reinterpret_cast(Mutex); + + OSL_ASSERT(Mutex); + + EnterCriticalSection(pMutexImpl); + + return true; +} + +sal_Bool SAL_CALL osl_tryToAcquireMutex(oslMutex Mutex) +{ + CRITICAL_SECTION* pMutexImpl = reinterpret_cast(Mutex); + + OSL_ASSERT(Mutex); + + return TryEnterCriticalSection(pMutexImpl) != FALSE; +} + +sal_Bool SAL_CALL osl_releaseMutex(oslMutex Mutex) +{ + CRITICAL_SECTION* pMutexImpl = reinterpret_cast(Mutex); + + OSL_ASSERT(Mutex); + + LeaveCriticalSection(pMutexImpl); + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/nlsupport.cxx b/sal/osl/w32/nlsupport.cxx new file mode 100644 index 000000000..f27b97aa7 --- /dev/null +++ b/sal/osl/w32/nlsupport.cxx @@ -0,0 +1,202 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#define WIN32_LEAN_AND_MEAN +#include + +#include + +#include "nlsupport.hxx" + +#include +#include +#include +#include +#include +#include + +/* XXX NOTE: + * http://msdn.microsoft.com/en-us/library/windows/desktop/dd373848.aspx + * (retrieved 2013-02-13) has some weird description for the LOCALE_SISO* + * constants: "The maximum number of characters allowed for this string is + * nine, including a terminating null character." NINE?!? In ISO 639 and ISO + * 3166? + */ +#define ELP_LANGUAGE_FIELD_LENGTH 4 +#define ELP_COUNTRY_FIELD_LENGTH 3 + +namespace { + +/** Struct used in EnumLocalesProcW() called via EnumSystemLocalesW() to obtain + available locales. +*/ +struct EnumLocalesParams +{ + WCHAR Language[ELP_LANGUAGE_FIELD_LENGTH]; + WCHAR Country[ELP_COUNTRY_FIELD_LENGTH]; + LCID Locale; +}; + +} + +static DWORD g_dwTLSLocaleEncId = DWORD(-1); + +/***************************************************************************** + * callback function test + *****************************************************************************/ + +static BOOL CALLBACK EnumLocalesProcW( LPWSTR lpLocaleStringW ) +{ + /* check params received via TLS */ + EnumLocalesParams * params = static_cast(TlsGetValue( g_dwTLSLocaleEncId )); + if( nullptr == params || '\0' == params->Language[0] ) + return FALSE; + + LPWSTR pszEnd; + WCHAR langCode[ELP_LANGUAGE_FIELD_LENGTH]; + + /* convert hex-string to LCID */ + LCID localeId = wcstol(lpLocaleStringW, &pszEnd, 16); + + /* + get the ISO language code for this locale + */ + if( !GetLocaleInfoW( localeId, LOCALE_SISO639LANGNAME , langCode, ELP_LANGUAGE_FIELD_LENGTH ) ) + /* retry by going on */ + return TRUE; + + WCHAR ctryCode[ELP_COUNTRY_FIELD_LENGTH]; + + /* continue if language code does not match */ + if( 0 != wcscmp( langCode, params->Language ) ) + return TRUE; + + /* check if country code is set and equals the current locale */ + if( '\0' != params->Country[0] && GetLocaleInfoW( localeId, + LOCALE_SISO3166CTRYNAME , ctryCode, ELP_COUNTRY_FIELD_LENGTH ) ) + { + /* save return value in TLS and break if found desired locale */ + if( 0 == wcscmp( ctryCode, params->Country ) ) + { + params->Locale = localeId; + return FALSE; + } + } + else + { + /* fill with default values for that language */ + LANGID langId = LANGIDFROMLCID( localeId ); + + /* exchange sublanguage with SUBLANG_NEUTRAL */ + langId = MAKELANGID( PRIMARYLANGID( langId ), SUBLANG_NEUTRAL ); + + /* and use default sorting order */ + params->Locale = MAKELCID( langId, SORT_DEFAULT ); + + return FALSE; + } + + /* retry by going on */ + return TRUE; +} + +static rtl_TextEncoding GetTextEncodingFromLCID( LCID localeId ) +{ + /* query ansi codepage for given locale */ + WCHAR ansiCP[6]; + if( !localeId || !GetLocaleInfoW( localeId, LOCALE_IDEFAULTANSICODEPAGE, ansiCP, 6 ) ) + return RTL_TEXTENCODING_DONTKNOW; + + /* if GetLocaleInfo returns "0", it is a UNICODE only locale */ + if( 0 == wcscmp( ansiCP, L"0" ) ) + return RTL_TEXTENCODING_UNICODE; + + /* values returned from GetLocaleInfo are decimal based */ + WCHAR *pwcEnd; + UINT codepage = wcstol( ansiCP, &pwcEnd, 10 ); + + /* find matching rtl encoding */ + return rtl_getTextEncodingFromWindowsCodePage( codepage ); +} + +rtl_TextEncoding SAL_CALL osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) +{ + struct EnumLocalesParams params = { L"", L"", 0 }; + + /* initialise global TLS id */ + if( DWORD(-1) == g_dwTLSLocaleEncId ) + { + oslMutex globalMutex = * osl_getGlobalMutex(); + + /* initializing must be thread save */ + osl_acquireMutex( globalMutex ); + + if( DWORD(-1) == g_dwTLSLocaleEncId ) + g_dwTLSLocaleEncId = TlsAlloc(); + + osl_releaseMutex( globalMutex ); + } + + /* if pLocale is NULL, use process locale as default */ + if( nullptr == pLocale ) + osl_getProcessLocale( &pLocale ); + + /* copy in parameters to structure */ + if( !pLocale || !pLocale->Language || pLocale->Language->length >= ELP_LANGUAGE_FIELD_LENGTH ) + return RTL_TEXTENCODING_DONTKNOW; + + wcscpy( params.Language, o3tl::toW(pLocale->Language->buffer) ); + + if( pLocale->Country && pLocale->Country->length < ELP_COUNTRY_FIELD_LENGTH ) + wcscpy( params.Country, o3tl::toW(pLocale->Country->buffer) ); + + /* save pointer to local structure in TLS */ + TlsSetValue( g_dwTLSLocaleEncId, ¶ms ); + + /* enum all locales known to Windows */ + EnumSystemLocalesW( EnumLocalesProcW, LCID_SUPPORTED ); + + /* use the LCID found in iteration */ + return GetTextEncodingFromLCID( params.Locale ); +} + +void imp_getProcessLocale( rtl_Locale ** ppLocale ) +{ + WCHAR langCode[ELP_LANGUAGE_FIELD_LENGTH]; + WCHAR ctryCode[ELP_COUNTRY_FIELD_LENGTH]; + LCID localeId; + + OSL_ASSERT( ppLocale ); + + /* get the LCID to retrieve information from */ + localeId = GetUserDefaultLCID(); + + /* call GetLocaleInfo to retrieve the iso codes */ + if( GetLocaleInfoW( localeId, LOCALE_SISO639LANGNAME , langCode, ELP_LANGUAGE_FIELD_LENGTH ) && + GetLocaleInfoW( localeId, LOCALE_SISO3166CTRYNAME , ctryCode, ELP_COUNTRY_FIELD_LENGTH ) ) + { + *ppLocale = rtl_locale_register( o3tl::toU(langCode), o3tl::toU(ctryCode), u"" ); + } + else + { + *ppLocale = rtl_locale_register( u"C", u"", u"" ); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/nlsupport.hxx b/sal/osl/w32/nlsupport.hxx new file mode 100644 index 000000000..2d818c378 --- /dev/null +++ b/sal/osl/w32/nlsupport.hxx @@ -0,0 +1,21 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_W32_NLSUPPORT_HXX +#define INCLUDED_SAL_OSL_W32_NLSUPPORT_HXX + +#include + +#include + +void imp_getProcessLocale(rtl_Locale** ppLocale); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/w32/path_helper.cxx b/sal/osl/w32/path_helper.cxx new file mode 100644 index 000000000..a2dd134fd --- /dev/null +++ b/sal/osl/w32/path_helper.cxx @@ -0,0 +1,89 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "path_helper.hxx" +#include +#include +#include + +#include +#include + +constexpr OUStringLiteral BACKSLASH (u"\\"); +constexpr OUStringLiteral SLASH (u"/"); + +void osl_systemPathEnsureSeparator(/*inout*/ rtl_uString** ppustrPath) +{ + OSL_PRECOND(ppustrPath && (nullptr != *ppustrPath), + "osl_systemPathEnsureSeparator: Invalid parameter"); + + OUString path(*ppustrPath); + sal_Int32 i = std::max(path.lastIndexOf(BACKSLASH), path.lastIndexOf(SLASH)); + + if (i < (path.getLength()-1)) + { + path += BACKSLASH; + rtl_uString_assign(ppustrPath, path.pData); + } + + SAL_WARN_IF( !path.endsWith(BACKSLASH), + "sal.osl", + "osl_systemPathEnsureSeparator: Post condition failed"); +} + +void osl_systemPathRemoveSeparator(/*inout*/ rtl_uString** ppustrPath) +{ + OUString path(*ppustrPath); + + if (!osl::systemPathIsLogicalDrivePattern(path)) + { + sal_Int32 i = std::max(path.lastIndexOf(BACKSLASH), path.lastIndexOf(SLASH)); + + if (i > -1 && (i == (path.getLength() - 1))) + { + path = OUString(path.getStr(), path.getLength() - 1); + rtl_uString_assign(ppustrPath, path.pData); + } + } +} + +// is [A-Za-z]:[/|\]\0 +const char* const LDP = ":"; +const char* const LDP_WITH_BACKSLASH = ":\\"; +const char* const LDP_WITH_SLASH = ":/"; + +// degenerated case returned by the Windows FileOpen dialog +// when someone enters for instance "x:filename", the Win32 +// API accepts this case +const char* const LDP_WITH_DOT_BACKSLASH = ":.\\"; + +bool osl_systemPathIsLogicalDrivePattern(/*in*/ const rtl_uString* pustrPath) +{ + const sal_Unicode* p = rtl_uString_getStr(const_cast(pustrPath)); + if (iswalpha(*p++)) + { + return ((0 == rtl_ustr_ascii_compare(p, LDP)) || + (0 == rtl_ustr_ascii_compare(p, LDP_WITH_BACKSLASH)) || + (0 == rtl_ustr_ascii_compare(p, LDP_WITH_SLASH)) || + (0 == rtl_ustr_ascii_compare(p, LDP_WITH_DOT_BACKSLASH))); + } + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/path_helper.hxx b/sal/osl/w32/path_helper.hxx new file mode 100644 index 000000000..bcb4f83af --- /dev/null +++ b/sal/osl/w32/path_helper.hxx @@ -0,0 +1,125 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_W32_PATH_HELPER_HXX +#define INCLUDED_SAL_OSL_W32_PATH_HELPER_HXX + +#include + +#include +#include +#include +#include +#include +#include + +/** + Adds a trailing path separator to the given system path if not + already there and if the path is not the root path or a logical + drive alone +*/ + +void osl_systemPathEnsureSeparator(/*inout*/ rtl_uString** ppustrPath); + +/** + Removes the last separator from the given system path if any and + if the path is not the root path '\' +*/ + +void osl_systemPathRemoveSeparator(/*inout*/ rtl_uString** ppustrPath); + +/** + Returns whether a given path is only a logical drive pattern or not. + A logical drive pattern is something like "a:\", "c:\". + No logical drive pattern is something like "c:\test" +*/ + +bool osl_systemPathIsLogicalDrivePattern(/*in*/ const rtl_uString* pustrPath); + +namespace osl +{ + +/** + Adds a trailing path separator to the given system path if not + already there and if the path is not the root path or a logical + drive alone +*/ + +inline void systemPathEnsureSeparator(/*inout*/ OUString& Path) +{ + osl_systemPathEnsureSeparator(&Path.pData); +} + +/** + Removes the last separator from the given system path if any and + if the path is not the root path '\' +*/ + +inline void systemPathRemoveSeparator(/*inout*/ OUString& Path) +{ + osl_systemPathRemoveSeparator(&Path.pData); +} + +inline bool systemPathIsLogicalDrivePattern(/*in*/ const OUString& path) +{ + return osl_systemPathIsLogicalDrivePattern(path.pData); +} + +template< class T > +class LongPathBuffer +{ + T* m_pBuffer; + sal_uInt32 m_nCharNum; + + LongPathBuffer(); + LongPathBuffer( const LongPathBuffer& ); + LongPathBuffer& operator=( const LongPathBuffer& ); + +public: + explicit LongPathBuffer( sal_uInt32 nCharNum ) + : m_pBuffer( static_cast( malloc( nCharNum * sizeof( T ) ) ) ) + , m_nCharNum( nCharNum ) + { + OSL_ENSURE( m_pBuffer, "Can not allocate the buffer!" ); + } + + ~LongPathBuffer() + { + if ( m_pBuffer ) + free( m_pBuffer ); + m_pBuffer = nullptr; + } + + sal_uInt32 getBufSizeInSymbols() + { + return m_nCharNum; + } + + operator T* () + { + return m_pBuffer; + } + +}; + +} // end namespace osl + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/pipe.cxx b/sal/osl/w32/pipe.cxx new file mode 100644 index 000000000..c94441e63 --- /dev/null +++ b/sal/osl/w32/pipe.cxx @@ -0,0 +1,489 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define PIPESYSTEM "\\\\.\\pipe\\" +#define PIPEPREFIX "OSL_PIPE_" + +struct oslPipeImpl +{ + oslInterlockedCount m_Reference; + HANDLE m_File; + HANDLE m_NamedObject; + PSECURITY_ATTRIBUTES m_Security; + HANDLE m_ReadEvent; + HANDLE m_WriteEvent; + HANDLE m_AcceptEvent; + rtl_uString* m_Name; + oslPipeError m_Error; + bool m_bClosed; +}; + +static oslPipe osl_createPipeImpl(void) +{ + oslPipe pPipe; + + pPipe = static_cast< oslPipe >(rtl_allocateZeroMemory(sizeof(struct oslPipeImpl))); + + pPipe->m_bClosed = false; + pPipe->m_Reference = 0; + pPipe->m_Name = nullptr; + pPipe->m_File = INVALID_HANDLE_VALUE; + pPipe->m_NamedObject = nullptr; + + pPipe->m_ReadEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr); + pPipe->m_WriteEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr); + pPipe->m_AcceptEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr); + + return pPipe; +} + +static void osl_destroyPipeImpl(oslPipe pPipe) +{ + if (!pPipe) + return; + + if (pPipe->m_NamedObject) + CloseHandle(pPipe->m_NamedObject); + + if (pPipe->m_Security) + { + free(pPipe->m_Security->lpSecurityDescriptor); + free(pPipe->m_Security); + } + + CloseHandle(pPipe->m_ReadEvent); + CloseHandle(pPipe->m_WriteEvent); + CloseHandle(pPipe->m_AcceptEvent); + + if (pPipe->m_Name) + rtl_uString_release(pPipe->m_Name); + + free(pPipe); +} + +oslPipe SAL_CALL osl_createPipe(rtl_uString *strPipeName, oslPipeOptions Options, + oslSecurity Security) +{ + rtl_uString* name = nullptr; + rtl_uString* path = nullptr; + rtl_uString* temp = nullptr; + oslPipe pPipe; + + PSECURITY_ATTRIBUTES pSecAttr = nullptr; + + rtl_uString_newFromAscii(&path, PIPESYSTEM); + rtl_uString_newFromAscii(&name, PIPEPREFIX); + + if (Security) + { + rtl_uString *Ident = nullptr; + rtl_uString *Delim = nullptr; + + OSL_VERIFY(osl_getUserIdent(Security, &Ident)); + rtl_uString_newFromAscii(&Delim, "_"); + + rtl_uString_newConcat(&temp, name, Ident); + rtl_uString_newConcat(&name, temp, Delim); + + rtl_uString_release(Ident); + rtl_uString_release(Delim); + } + else + { + if (Options & osl_Pipe_CREATE) + { + PSECURITY_DESCRIPTOR pSecDesc; + + pSecDesc = static_cast< PSECURITY_DESCRIPTOR >(malloc(SECURITY_DESCRIPTOR_MIN_LENGTH)); + assert(pSecDesc); // Don't handle OOM conditions + + /* add a NULL disc. ACL to the security descriptor */ + OSL_VERIFY(InitializeSecurityDescriptor(pSecDesc, SECURITY_DESCRIPTOR_REVISION)); + OSL_VERIFY(SetSecurityDescriptorDacl(pSecDesc, TRUE, nullptr, FALSE)); + + pSecAttr = static_cast< PSECURITY_ATTRIBUTES >(malloc(sizeof(SECURITY_ATTRIBUTES))); + assert(pSecAttr); // Don't handle OOM conditions + pSecAttr->nLength = sizeof(SECURITY_ATTRIBUTES); + pSecAttr->lpSecurityDescriptor = pSecDesc; + pSecAttr->bInheritHandle = TRUE; + } + } + + rtl_uString_assign(&temp, name); + rtl_uString_newConcat(&name, temp, strPipeName); + + /* alloc memory */ + pPipe = osl_createPipeImpl(); + + assert(pPipe); // if osl_createPipeImpl() cannot init. a new pipe, this is a failure + + osl_atomic_increment(&(pPipe->m_Reference)); + + /* build system pipe name */ + rtl_uString_assign(&temp, path); + rtl_uString_newConcat(&path, temp, name); + rtl_uString_release(temp); + temp = nullptr; + + if (Options & osl_Pipe_CREATE) + { + SetLastError(ERROR_SUCCESS); + + pPipe->m_NamedObject = CreateMutexW(nullptr, FALSE, o3tl::toW(name->buffer)); + + if (pPipe->m_NamedObject) + { + if (GetLastError() != ERROR_ALREADY_EXISTS) + { + pPipe->m_Security = pSecAttr; + rtl_uString_assign(&pPipe->m_Name, name); + + /* try to open system pipe */ + pPipe->m_File = CreateNamedPipeW( + o3tl::toW(path->buffer), + PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, + PIPE_WAIT | PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, + PIPE_UNLIMITED_INSTANCES, + 4096, 4096, + NMPWAIT_WAIT_FOREVER, + pPipe->m_Security); + + if (pPipe->m_File != INVALID_HANDLE_VALUE) + { + rtl_uString_release( name ); + rtl_uString_release( path ); + + return pPipe; + } + } + else + { + CloseHandle(pPipe->m_NamedObject); + pPipe->m_NamedObject = nullptr; + } + } + } + else + { + bool bPipeAvailable; + + do + { + /* free instance should be available first */ + bPipeAvailable = WaitNamedPipeW(o3tl::toW(path->buffer), NMPWAIT_WAIT_FOREVER); + + /* first try to open system pipe */ + if (bPipeAvailable) + { + pPipe->m_File = CreateFileW( + o3tl::toW(path->buffer), + GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, + nullptr); + + if (pPipe->m_File != INVALID_HANDLE_VALUE) + { + // We got it ! + rtl_uString_release(name); + rtl_uString_release(path); + + // We should try to transfer our privilege to become foreground process + // to the other process, so that it may show popups (otherwise, they might + // be blocked by SPI_GETFOREGROUNDLOCKTIMEOUT setting - + // see SystemParametersInfo function at MSDN + ULONG ServerProcessId = 0; + if (GetNamedPipeServerProcessId(pPipe->m_File, &ServerProcessId)) + AllowSetForegroundWindow(ServerProcessId); + + return pPipe; + } + else + { + // Pipe instance maybe caught by another client -> try again + } + } + } while (bPipeAvailable); + } + + /* if we reach here something went wrong */ + osl_destroyPipeImpl(pPipe); + + return nullptr; +} + +void SAL_CALL osl_acquirePipe(oslPipe pPipe) +{ + osl_atomic_increment(&(pPipe->m_Reference)); +} + +void SAL_CALL osl_releasePipe(oslPipe pPipe) +{ + if (!pPipe) + return; + + if (osl_atomic_decrement(&(pPipe->m_Reference)) == 0) + { + if (!pPipe->m_bClosed) + osl_closePipe(pPipe); + + osl_destroyPipeImpl(pPipe); + } +} + +void SAL_CALL osl_closePipe(oslPipe pPipe) +{ + if (pPipe && !pPipe->m_bClosed) + { + pPipe->m_bClosed = true; + /* if we have a system pipe close it */ + if (pPipe->m_File != INVALID_HANDLE_VALUE) + { + DisconnectNamedPipe(pPipe->m_File); + CloseHandle(pPipe->m_File); + } + } +} + +oslPipe SAL_CALL osl_acceptPipe(oslPipe pPipe) +{ + oslPipe pAcceptedPipe = nullptr; + + OVERLAPPED os = {}; + + DWORD nBytesTransferred; + rtl_uString* path = nullptr; + rtl_uString* temp = nullptr; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_acceptPipe: invalid pipe"); + if (!pPipe) + return nullptr; + + SAL_WARN_IF(pPipe->m_File == INVALID_HANDLE_VALUE, "sal.osl.pipe", "osl_acceptPipe: invalid handle"); + + os.hEvent = pPipe->m_AcceptEvent; + ResetEvent(pPipe->m_AcceptEvent); + + if (!ConnectNamedPipe(pPipe->m_File, &os)) + { + switch (GetLastError()) + { + case ERROR_PIPE_CONNECTED: // Client already connected to pipe + case ERROR_NO_DATA: // Client was connected but has already closed pipe end + // should only appear in nonblocking mode but in fact does + // in blocking asynchronous mode. + break; + case ERROR_PIPE_LISTENING: // Only for nonblocking mode but see ERROR_NO_DATA + case ERROR_IO_PENDING: // This is normal if not client is connected yet + case ERROR_MORE_DATA: // Should not happen + // blocking call to accept + if( !GetOverlappedResult(pPipe->m_File, &os, &nBytesTransferred, TRUE)) + { + // Possible error could be that between ConnectNamedPipe and + // GetOverlappedResult a connect took place. + + switch (GetLastError()) + { + case ERROR_PIPE_CONNECTED: // Pipe was already connected + case ERROR_NO_DATA: // Pipe was connected but client has already closed -> ver fast client ;-) + break; // Everything's fine !!! + default: + // Something went wrong + return nullptr; + } + } + break; + default: // All other error say that somethings going wrong. + return nullptr; + } + } + + pAcceptedPipe = osl_createPipeImpl(); + assert(pAcceptedPipe); // should never be the case that an oslPipe cannot be initialized + + osl_atomic_increment(&(pAcceptedPipe->m_Reference)); + rtl_uString_assign(&pAcceptedPipe->m_Name, pPipe->m_Name); + pAcceptedPipe->m_File = pPipe->m_File; + + rtl_uString_newFromAscii(&temp, PIPESYSTEM); + rtl_uString_newConcat(&path, temp, pPipe->m_Name); + rtl_uString_release(temp); + + // prepare for next accept + pPipe->m_File = + CreateNamedPipeW(o3tl::toW(path->buffer), + PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, + PIPE_WAIT | PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, + PIPE_UNLIMITED_INSTANCES, + 4096, 4096, + NMPWAIT_WAIT_FOREVER, + pAcceptedPipe->m_Security); + rtl_uString_release(path); + + return pAcceptedPipe; +} + +sal_Int32 SAL_CALL osl_receivePipe(oslPipe pPipe, + void* pBuffer, + sal_Int32 BytesToRead) +{ + DWORD nBytes; + OVERLAPPED os = {}; + + assert(pPipe); + + os.hEvent = pPipe->m_ReadEvent; + + ResetEvent(pPipe->m_ReadEvent); + + if (!ReadFile(pPipe->m_File, pBuffer, BytesToRead, &nBytes, &os) && + ((GetLastError() != ERROR_IO_PENDING) || + !GetOverlappedResult(pPipe->m_File, &os, &nBytes, TRUE))) + { + DWORD lastError = GetLastError(); + + if (lastError == ERROR_MORE_DATA) + { + nBytes = BytesToRead; + } + else + { + if (lastError == ERROR_PIPE_NOT_CONNECTED) + nBytes = 0; + else + nBytes = DWORD(-1); + + pPipe->m_Error = osl_Pipe_E_ConnectionAbort; + } + } + + return nBytes; +} + +sal_Int32 SAL_CALL osl_sendPipe(oslPipe pPipe, + const void* pBuffer, + sal_Int32 BytesToSend) +{ + DWORD nBytes; + OVERLAPPED os = {}; + + assert(pPipe); + + os.hEvent = pPipe->m_WriteEvent; + ResetEvent(pPipe->m_WriteEvent); + + if (!WriteFile(pPipe->m_File, pBuffer, BytesToSend, &nBytes, &os) && + ((GetLastError() != ERROR_IO_PENDING) || + !GetOverlappedResult(pPipe->m_File, &os, &nBytes, TRUE))) + { + if (GetLastError() == ERROR_PIPE_NOT_CONNECTED) + nBytes = 0; + else + nBytes = DWORD(-1); + + pPipe->m_Error = osl_Pipe_E_ConnectionAbort; + } + + return nBytes; +} + +sal_Int32 SAL_CALL osl_writePipe(oslPipe pPipe, const void *pBuffer , sal_Int32 n) +{ + /* loop until all desired bytes were send or an error occurred */ + sal_Int32 BytesSend = 0; + sal_Int32 BytesToSend = n; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_writePipe: invalid pipe"); + while (BytesToSend > 0) + { + sal_Int32 RetVal; + + RetVal= osl_sendPipe(pPipe, pBuffer, BytesToSend); + + /* error occurred? */ + if (RetVal <= 0) + break; + + BytesToSend -= RetVal; + BytesSend += RetVal; + pBuffer= static_cast< char const* >(pBuffer) + RetVal; + } + + return BytesSend; +} + +sal_Int32 SAL_CALL osl_readPipe(oslPipe pPipe, void *pBuffer, sal_Int32 n) +{ + /* loop until all desired bytes were read or an error occurred */ + sal_Int32 BytesRead = 0; + sal_Int32 BytesToRead = n; + + SAL_WARN_IF(!pPipe, "sal.osl.pipe", "osl_readPipe: invalid pipe"); + while (BytesToRead > 0) + { + sal_Int32 RetVal; + RetVal= osl_receivePipe(pPipe, pBuffer, BytesToRead); + + /* error occurred? */ + if(RetVal <= 0) + break; + + BytesToRead -= RetVal; + BytesRead += RetVal; + pBuffer= static_cast< char* >(pBuffer) + RetVal; + } + return BytesRead; +} + +oslPipeError SAL_CALL osl_getLastPipeError(oslPipe pPipe) +{ + oslPipeError Error; + + if (pPipe) + { + Error = pPipe->m_Error; + pPipe->m_Error = osl_Pipe_E_None; + } + else + { + Error = osl_Pipe_E_NotFound; + } + + return Error; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx new file mode 100644 index 000000000..065415f2c --- /dev/null +++ b/sal/osl/w32/process.cxx @@ -0,0 +1,525 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" +#include + +#include + +#include + +#include +#include +#include + +#include "filetime.hxx" +#include "nlsupport.hxx" +#include "procimpl.hxx" +#include "file_url.hxx" +#include "path_helper.hxx" +#include +#include +#include + +oslProcessError SAL_CALL osl_terminateProcess(oslProcess Process) +{ + if (Process == nullptr) + return osl_Process_E_Unknown; + + HANDLE hProcess = static_cast(Process)->m_hProcess; + DWORD dwPID = GetProcessId(hProcess); + + // cannot be System Process (0x00000000) + if (dwPID == 0x0) + return osl_Process_E_InvalidError; + + // Test to see if we can create a thread in a process... adapted from: + // * https://support.microsoft.com/en-us/help/178893/how-to-terminate-an-application-cleanly-in-win32 + // * http://www.drdobbs.com/a-safer-alternative-to-terminateprocess/184416547 + + // TODO: we really should firstly check to see if we have access to create threads and only + // duplicate the handle with elevated access if we don't have access... this can be done, but + // it's not exactly easy - an example can be found here: + // http://windowsitpro.com/site-files/windowsitpro.com/files/archive/windowsitpro.com/content/content/15989/listing_01.txt + + HANDLE hDupProcess = nullptr; + + + // we need to make sure we can create a thread in the remote process, if the handle was created + // in something that doesn't give us appropriate levels of access then we will need to give it the + // desired level of access - if the process handle was grabbed from OpenProcess it's quite possible + // that the handle doesn't have the appropriate level of access... + + // see https://msdn.microsoft.com/en-au/library/windows/desktop/ms684880(v=vs.85).aspx + DWORD const dwAccessFlags = (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION + | PROCESS_VM_WRITE | PROCESS_VM_READ); + + bool bHaveDuplHdl = DuplicateHandle(GetCurrentProcess(), // handle to process that has handle + hProcess, // handle to be duplicated + GetCurrentProcess(), // process that will get the dup handle + &hDupProcess, // store duplicate process handle here + dwAccessFlags, // desired access + FALSE, // handle can't be inherited + 0); // zero means no additional action needed + + if (bHaveDuplHdl) + hProcess = hDupProcess; // so we were able to duplicate the handle, all good... + else + SAL_WARN("sal.osl", "Could not duplicate process handle, let's hope for the best..."); + + DWORD dwProcessStatus = 0; + HANDLE hRemoteThread = nullptr; + + if (GetExitCodeProcess(hProcess, &dwProcessStatus) && (dwProcessStatus == STILL_ACTIVE)) + { + // We need to get the address of the Win32 procedure ExitProcess, can't call it + // directly because we'll be calling the thunk and that will probably lead to an + // access violation. Once we have the address, then we need to create a new + // thread in the process (which we might need to run in the address space of + // another process) and then call on ExitProcess to try to cleanly terminate that + // process + + DWORD dwTID = 0; // dummy variable as we don't need to track the thread ID + + // Note: we want to call on ExitProcess() and not TerminateProcess() - this is + // because with ExitProcess() Windows notifies all attached dlls that the process + // is detaching from the dll, but TerminateProcess() terminates all threads + // immediately, doesn't call any termination handlers and doesn't notify any dlls + // that it is detaching from them + + HINSTANCE hKernel = GetModuleHandleW(L"kernel32.dll"); + FARPROC pfnExitProc = GetProcAddress(hKernel, "ExitProcess"); + hRemoteThread = CreateRemoteThread( + hProcess, /* process handle */ + nullptr, /* default security descriptor */ + 0, /* initial size of stack in bytes is default + size for executable */ + reinterpret_cast(pfnExitProc), /* Win32 ExitProcess() */ + reinterpret_cast(UINT(0)), /* ExitProcess(UINT uExitCode) argument */ + 0, /* value of 0 tells thread to run immediately + after creation */ + &dwTID); /* new remote thread's identifier */ + + } + + bool bHasExited = false; + + if (hRemoteThread) + { + WaitForSingleObject(hProcess, INFINITE); // wait for process to terminate, never stop waiting... + CloseHandle(hRemoteThread); // close the thread handle to allow the process to exit + bHasExited = true; + } + + // need to close this duplicated process handle... + if (bHaveDuplHdl) + CloseHandle(hProcess); + + if (bHasExited) + return osl_Process_E_None; + + // fallback - given that we wait for an infinite time on WaitForSingleObject, this should + // never occur... unless CreateRemoteThread failed + SAL_WARN("sal.osl", "TerminateProcess(hProcess, 0) called - we should never get here!"); + return (TerminateProcess(hProcess, 0) == FALSE) ? osl_Process_E_Unknown : osl_Process_E_None; +} + +oslProcess SAL_CALL osl_getProcess(oslProcessIdentifier Ident) +{ + oslProcessImpl* pProcImpl; + HANDLE hProcess = OpenProcess( + STANDARD_RIGHTS_REQUIRED | PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, static_cast(Ident)); + + if (hProcess) + { + pProcImpl = static_cast< oslProcessImpl*>( malloc(sizeof(oslProcessImpl)) ); + pProcImpl->m_hProcess = hProcess; + pProcImpl->m_IdProcess = Ident; + } + else + pProcImpl = nullptr; + + return pProcImpl; +} + +void SAL_CALL osl_freeProcessHandle(oslProcess Process) +{ + if (Process != nullptr) + { + CloseHandle(static_cast(Process)->m_hProcess); + + free(Process); + } +} + +oslProcessError SAL_CALL osl_getProcessInfo(oslProcess Process, oslProcessData Fields, + oslProcessInfo* pInfo) +{ + HANDLE hProcess; + DWORD IdProcess; + + if (Process == nullptr) + { + hProcess = GetCurrentProcess(); + IdProcess = GetCurrentProcessId(); + } + else + { + hProcess = static_cast(Process)->m_hProcess; + IdProcess = static_cast(Process)->m_IdProcess; + } + + if (! pInfo || (pInfo->Size != sizeof(oslProcessInfo))) + return osl_Process_E_Unknown; + + pInfo->Fields = 0; + + if (Fields & osl_Process_IDENTIFIER) + { + pInfo->Ident = IdProcess; + pInfo->Fields |= osl_Process_IDENTIFIER; + } + + if (Fields & osl_Process_EXITCODE) + { + if (GetExitCodeProcess(hProcess, &(pInfo->Code)) && (pInfo->Code != STILL_ACTIVE)) + pInfo->Fields |= osl_Process_EXITCODE; + } + + if (Fields & osl_Process_HEAPUSAGE) + { + void* lpAddress=nullptr; + MEMORY_BASIC_INFORMATION Info; + + pInfo->HeapUsage = 0; + + do + { + if (VirtualQueryEx(hProcess, lpAddress, &Info, sizeof(Info)) == 0) + break; + + if ((Info.State == MEM_COMMIT) && (Info.Type == MEM_PRIVATE)) + pInfo->HeapUsage += Info.RegionSize; + + lpAddress = static_cast(lpAddress) + Info.RegionSize; + } + while (reinterpret_cast(lpAddress) <= 0x7FFFFFFFU); // 2GB address space + + pInfo->Fields |= osl_Process_HEAPUSAGE; + } + + if (Fields & osl_Process_CPUTIMES) + { + FILETIME CreationTime, ExitTime, KernelTime, UserTime; + + if (GetProcessTimes(hProcess, &CreationTime, &ExitTime, + &KernelTime, &UserTime)) + { + __int64 Value; + + Value = osl::detail::getFiletime(UserTime); + pInfo->UserTime.Seconds = static_cast(Value / 10000000L); + pInfo->UserTime.Nanosec = static_cast((Value % 10000000L) * 100); + + Value = osl::detail::getFiletime(KernelTime); + pInfo->SystemTime.Seconds = static_cast(Value / 10000000L); + pInfo->SystemTime.Nanosec = static_cast((Value % 10000000L) * 100); + + pInfo->Fields |= osl_Process_CPUTIMES; + } + } + + return (pInfo->Fields == Fields) ? osl_Process_E_None : osl_Process_E_Unknown; +} + +oslProcessError SAL_CALL osl_joinProcess(oslProcess Process) +{ + return osl_joinProcessWithTimeout(Process, nullptr); +} + +oslProcessError SAL_CALL osl_joinProcessWithTimeout(oslProcess Process, const TimeValue* pTimeout) +{ + DWORD timeout = INFINITE; + oslProcessError osl_error = osl_Process_E_None; + DWORD ret; + + if (nullptr == Process) + return osl_Process_E_Unknown; + + if (pTimeout) + timeout = pTimeout->Seconds * 1000 + pTimeout->Nanosec / 1000000L; + + ret = WaitForSingleObject(static_cast(Process)->m_hProcess, timeout); + + if (WAIT_FAILED == ret) + osl_error = osl_Process_E_Unknown; + else if (WAIT_TIMEOUT == ret) + osl_error = osl_Process_E_TimedOut; + + return osl_error; +} + +namespace { + +oslProcessError bootstrap_getExecutableFile(rtl_uString ** ppFileURL) +{ + oslProcessError result = osl_Process_E_NotFound; + + ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH ); + DWORD buflen = 0; + + if ((buflen = GetModuleFileNameW (nullptr, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols())) > 0) + { + rtl_uString * pAbsPath = nullptr; + rtl_uString_newFromStr_WithLength (&pAbsPath, aBuffer, buflen); + if (pAbsPath) + { + /* Convert from path to url. */ + if (osl_getFileURLFromSystemPath (pAbsPath, ppFileURL) == osl_File_E_None) + { + /* Success. */ + result = osl_Process_E_None; + } + rtl_uString_release (pAbsPath); + } + } + + return result; +} + +struct CommandArgs_Impl +{ + sal_uInt32 m_nCount; + rtl_uString ** m_ppArgs; +}; + +} + +static struct CommandArgs_Impl g_command_args = +{ + 0, + nullptr +}; + +static rtl_uString ** osl_createCommandArgs_Impl (int argc, char **) +{ + rtl_uString ** ppArgs = + static_cast(rtl_allocateZeroMemory (argc * sizeof(rtl_uString*))); + if (ppArgs != nullptr) + { + int i; + int nArgs; + LPWSTR *wargv = CommandLineToArgvW( GetCommandLineW(), &nArgs ); + assert( nArgs == argc ); + for (i = 0; i < nArgs; i++) + { + /* Convert to unicode */ + rtl_uString_newFromStr( &(ppArgs[i]), o3tl::toU(wargv[i]) ); + } + if (ppArgs[0] != nullptr) + { + /* Ensure absolute path */ + ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH ); + DWORD dwResult + = GetModuleFileNameW(nullptr, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols()); + if ((0 < dwResult) && (dwResult < aBuffer.getBufSizeInSymbols())) + { + /* Replace argv[0] with its absolute path */ + rtl_uString_newFromStr_WithLength( + &(ppArgs[0]), aBuffer, dwResult); + } + } + if (ppArgs[0] != nullptr) + { + /* Convert to FileURL, see @ osl_getExecutableFile() */ + rtl_uString * pResult = nullptr; + osl_getFileURLFromSystemPath (ppArgs[0], &pResult); + if (pResult != nullptr) + { + rtl_uString_assign (&(ppArgs[0]), pResult); + rtl_uString_release (pResult); + } + } + } + return ppArgs; + +} + +oslProcessError SAL_CALL osl_getExecutableFile( rtl_uString **ppustrFile ) +{ + { + osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex()); + if (g_command_args.m_nCount > 0) + { + /* CommandArgs set. Obtain arv[0]. */ + rtl_uString_assign(ppustrFile, g_command_args.m_ppArgs[0]); + return osl_Process_E_None; + } + } + return bootstrap_getExecutableFile(ppustrFile); +} + +sal_uInt32 SAL_CALL osl_getCommandArgCount() +{ + sal_uInt32 result = 0; + + osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex()); + SAL_INFO_IF( + g_command_args.m_nCount == 0, "sal.osl", + "osl_getCommandArgCount w/o prior call to osl_setCommandArgs"); + if (g_command_args.m_nCount > 0) + { + /* We're not counting argv[0] here. */ + result = g_command_args.m_nCount - 1; + } + + return result; +} + +oslProcessError SAL_CALL osl_getCommandArg( sal_uInt32 nArg, rtl_uString **strCommandArg) +{ + oslProcessError result = osl_Process_E_NotFound; + + osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex()); + assert(g_command_args.m_nCount > 0); + if (g_command_args.m_nCount > (nArg + 1)) + { + /* We're not counting argv[0] here. */ + rtl_uString_assign (strCommandArg, g_command_args.m_ppArgs[nArg + 1]); + result = osl_Process_E_None; + } + + return result; +} + +void SAL_CALL osl_setCommandArgs (int argc, char ** argv) +{ + assert(argc > 0); + osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex()); + SAL_WARN_IF(g_command_args.m_nCount != 0, "sal.osl", "args already set"); + if (g_command_args.m_nCount == 0) + { + rtl_uString** ppArgs = osl_createCommandArgs_Impl (argc, argv); + if (ppArgs != nullptr) + { + g_command_args.m_nCount = argc; + g_command_args.m_ppArgs = ppArgs; + } + } +} + +/* TODO because of an issue with GetEnvironmentVariableW we have to + allocate a buffer large enough to hold the requested environment + variable instead of testing for the required size. This wastes + some stack space, maybe we should revoke this work around if + this is no longer a problem */ +#define ENV_BUFFER_SIZE (32*1024-1) + +oslProcessError SAL_CALL osl_getEnvironment(rtl_uString *ustrVar, rtl_uString **ustrValue) +{ + WCHAR buff[ENV_BUFFER_SIZE]; + + if (GetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), buff, ENV_BUFFER_SIZE) > 0) + { + rtl_uString_newFromStr(ustrValue, o3tl::toU(buff)); + return osl_Process_E_None; + } + return osl_Process_E_Unknown; +} + +oslProcessError SAL_CALL osl_setEnvironment(rtl_uString *ustrVar, rtl_uString *ustrValue) +{ + // set Windows environment variable + if (SetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), o3tl::toW(ustrValue->buffer))) + { + OUString sAssign = OUString::unacquired(&ustrVar) + "=" + OUString::unacquired(&ustrValue); + _wputenv(o3tl::toW(sAssign.getStr())); + return osl_Process_E_None; + } + return osl_Process_E_Unknown; +} + +oslProcessError SAL_CALL osl_clearEnvironment(rtl_uString *ustrVar) +{ + // delete the variable from the current process environment + // by setting SetEnvironmentVariable's second parameter to NULL + if (SetEnvironmentVariableW(o3tl::toW(ustrVar->buffer), nullptr)) + { + OUString sAssign = OUString::unacquired(&ustrVar) + "="; + _wputenv(o3tl::toW(sAssign.getStr())); + return osl_Process_E_None; + } + return osl_Process_E_Unknown; +} + +oslProcessError SAL_CALL osl_getProcessWorkingDir( rtl_uString **pustrWorkingDir ) +{ + ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH ); + DWORD dwLen = GetCurrentDirectoryW(aBuffer.getBufSizeInSymbols(), o3tl::toW(aBuffer)); + + if ( dwLen && dwLen < aBuffer.getBufSizeInSymbols() ) + { + oslFileError eError; + rtl_uString *ustrTemp = nullptr; + + rtl_uString_newFromStr_WithLength( &ustrTemp, aBuffer, dwLen ); + eError = osl_getFileURLFromSystemPath( ustrTemp, pustrWorkingDir ); + + rtl_uString_release( ustrTemp ); + + if ( osl_File_E_None != eError ) + return osl_Process_E_Unknown; + else + return osl_Process_E_None; + } + else + return osl_Process_E_Unknown; +} + +static rtl_Locale * g_theProcessLocale = nullptr; + +oslProcessError SAL_CALL osl_getProcessLocale( rtl_Locale ** ppLocale ) +{ + osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex()); + + /* determine the users default locale */ + if( nullptr == g_theProcessLocale ) + imp_getProcessLocale( &g_theProcessLocale ); + + /* or return the cached value */ + *ppLocale = g_theProcessLocale; + + return osl_Process_E_None; +} + +oslProcessError SAL_CALL osl_setProcessLocale( rtl_Locale * pLocale ) +{ + osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex()); + + /* check if locale is supported */ + if( RTL_TEXTENCODING_DONTKNOW == osl_getTextEncodingFromLocale( pLocale ) ) + return osl_Process_E_Unknown; + + /* just remember the locale here */ + g_theProcessLocale = pLocale; + + return osl_Process_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/procimpl.cxx b/sal/osl/w32/procimpl.cxx new file mode 100644 index 000000000..5fb9a4634 --- /dev/null +++ b/sal/osl/w32/procimpl.cxx @@ -0,0 +1,596 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN +#endif + +#include "file-impl.hxx" +#include "procimpl.hxx" +#include +#include +#include +#include "secimpl.hxx" +#include +#include + +#include +#include + +namespace /* private */ +{ + /* Function object that compares two strings that are + expected to be environment variables in the form + "name=value". Only the 'name' part will be compared. + The comparison is in upper case and returns true + if the first of both strings is less than the + second one. */ + struct less_environment_variable + { + bool operator() (const OUString& lhs, const OUString& rhs) const + { + OSL_ENSURE((lhs.indexOf(L'=') > -1) && + (rhs.indexOf(L'=') > -1), + "Malformed environment variable"); + + // Windows compares environment variables uppercase + // so we do it, too + return (rtl_ustr_compare_WithLength( + lhs.toAsciiUpperCase().pData->buffer, + lhs.indexOf(L'='), + rhs.toAsciiUpperCase().pData->buffer, + rhs.indexOf(L'=')) < 0); + } + }; + + /* Function object used by for_each algorithm to + calculate the sum of the length of all strings + in a string container. */ + class sum_of_string_lengths + { + public: + + sum_of_string_lengths() : sum_(0) {} + + void operator() (const OUString& string) + { + OSL_ASSERT(string.getLength()); + + // always include the terminating '\0' + if (string.getLength()) + sum_ += string.getLength() + 1; + } + + operator size_t () const + { + return sum_; + } + private: + size_t sum_; + }; + + size_t calc_sum_of_string_lengths(const std::vector& string_cont) + { + return std::for_each( + string_cont.begin(), string_cont.end(), sum_of_string_lengths()); + } + + void read_environment(/*out*/ std::vector* environment) + { + // GetEnvironmentStrings returns a sorted list, Windows + // sorts environment variables upper case + LPWSTR env = GetEnvironmentStringsW(); + LPWSTR p = env; + + while (size_t l = wcslen(p)) + { + environment->push_back(OUString(o3tl::toU(p))); + p += l + 1; + } + FreeEnvironmentStringsW(env); + + // it is apparently possible that the environment is not completely + // sorted; Cygwin may append entries, which breaks the equal_range + std::stable_sort(environment->begin(), environment->end(), + less_environment_variable()); + } + + /* the environment list must be sorted, new values + should either replace existing ones or should be + added to the list, environment variables will + be handled case-insensitive */ + bool create_merged_environment( + rtl_uString* env_vars[], + sal_uInt32 env_vars_count, + /*in|out*/ std::vector* merged_env) + { + OSL_ASSERT(env_vars && env_vars_count > 0 && merged_env); + + read_environment(merged_env); + + for (sal_uInt32 i = 0; i < env_vars_count; i++) + { + OUString env_var(env_vars[i]); + + if (env_var.getLength() == 0) + return false; + + auto iter_pair = std::equal_range( + merged_env->begin(), + merged_env->end(), + env_var, + less_environment_variable()); + + if (env_var.indexOf(L'=') == -1) + { + merged_env->erase(iter_pair.first, iter_pair.second); + } + else + { + if (iter_pair.first != iter_pair.second) // found + *iter_pair.first = env_var; + else // not found + merged_env->insert(iter_pair.first, env_var); + } + } + return true; + } + + /* Create a merged environment */ + bool setup_process_environment( + rtl_uString* environment_vars[], + sal_uInt32 n_environment_vars, + /*in|out*/ std::vector& environment) + { + std::vector merged_env; + if (!create_merged_environment(environment_vars, n_environment_vars, &merged_env)) + return false; + + // allocate enough space for the '\0'-separated environment strings and + // a final '\0' + environment.resize(calc_sum_of_string_lengths(merged_env) + 1); + + sal_uInt32 pos = 0; + for (auto& envv : merged_env) + { + OSL_ASSERT(envv.getLength()); + + sal_uInt32 n = envv.getLength() + 1; // copy the final '\0', too + memcpy(&environment[pos], envv.getStr(), n * sizeof(sal_Unicode)); + pos += n; + } + environment[pos] = 0; // append a final '\0' + + return true; + } + + /* In contrast to the Win32 API function CreatePipe with + this function the caller is able to determine separately + which handle of the pipe is inheritable. */ + bool create_pipe( + PHANDLE p_read_pipe, + bool b_read_pipe_inheritable, + PHANDLE p_write_pipe, + bool b_write_pipe_inheritable, + LPVOID p_security_descriptor = nullptr, + DWORD pipe_size = 0) + { + SECURITY_ATTRIBUTES sa; + sa.nLength = sizeof(SECURITY_ATTRIBUTES); + sa.lpSecurityDescriptor = p_security_descriptor; + sa.bInheritHandle = b_read_pipe_inheritable || b_write_pipe_inheritable; + + bool bRet = false; + HANDLE hTemp = nullptr; + + if (!b_read_pipe_inheritable && b_write_pipe_inheritable) + { + bRet = CreatePipe(&hTemp, p_write_pipe, &sa, pipe_size); + + if (bRet && !DuplicateHandle(GetCurrentProcess(), hTemp, + GetCurrentProcess(), p_read_pipe, 0, FALSE, + DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) + { + CloseHandle(hTemp); + CloseHandle(*p_read_pipe); + return false; + } + } + else if (b_read_pipe_inheritable && !b_write_pipe_inheritable) + { + bRet = CreatePipe(p_read_pipe, &hTemp, &sa, pipe_size); + + if (bRet && !DuplicateHandle(GetCurrentProcess(), hTemp, + GetCurrentProcess(), p_write_pipe, 0, FALSE, + DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) + { + CloseHandle(hTemp); + CloseHandle(*p_write_pipe); + return false; + } + } + else + { + bRet = CreatePipe(p_read_pipe, p_write_pipe, &sa, pipe_size); + } + return bRet; + } + + // Add a quote sign to the start and the end of a string + // if not already present + OUString quote_string(const OUString& string) + { + OUStringBuffer quoted; + if (string.indexOf(L'"') != 0) + quoted.append('"'); + + quoted.append(string); + + if (string.lastIndexOf(L'"') != (string.getLength() - 1)) + quoted.append('"'); + + return quoted.makeStringAndClear(); + } + + // The parameter path must be a system path. If it is longer than 260 characters + // then it is shortened using the GetShortPathName function. This function only + // works if the path exists. Because "path" can be the path to an executable, it + // may not have the file extension ".exe". However, if the file on disk has the + // ".exe" extension, then the function will fail. In this case a second attempt + // is started by adding the parameter "extension" to "path". + OUString getShortPath(OUString const & path, OUString const & extension) + { + OUString ret(path); + if (path.getLength() > 260) + { + std::vector vec(path.getLength() + 1); + //GetShortPathNameW only works if the file can be found! + const DWORD len = GetShortPathNameW( + o3tl::toW(path.getStr()), o3tl::toW(vec.data()), path.getLength() + 1); + + if (!len && GetLastError() == ERROR_FILE_NOT_FOUND + && extension.getLength()) + { + const OUString extPath(path + extension); + std::vector vec2( + extPath.getLength() + 1); + const DWORD len2 = GetShortPathNameW( + o3tl::toW(extPath.getStr()), o3tl::toW(vec2.data()), extPath.getLength() + 1); + ret = OUString(vec2.data(), len2); + } + else + { + ret = OUString(vec.data(), len); + } + } + return ret; + } + + // Returns the system path of the executable which can either + // be provided via the strImageName parameter or as first + // element of the strArguments list. + // The returned path will be quoted if it contains spaces. + OUString get_executable_path( + rtl_uString* image_name, + rtl_uString* cmdline_args[], + sal_uInt32 n_cmdline_args, + bool search_path) + { + OUString exe_name; + + if (image_name) + exe_name = image_name; + else if (n_cmdline_args) + exe_name = OUString(cmdline_args[0]); + + OUString exe_url = exe_name; + if (search_path) + osl_searchFileURL(exe_name.pData, nullptr, &exe_url.pData); + + OUString exe_path; + if (osl::FileBase::E_None != osl::FileBase::getSystemPathFromFileURL(exe_url, exe_path)) + return OUString(); + + exe_path = getShortPath(exe_path, ".exe"); + + if (exe_path.indexOf(' ') != -1) + exe_path = quote_string(exe_path); + + return exe_path; + } + + OUString get_file_extension(const OUString& file_name) + { + // Quoted file name + if ((file_name.indexOf(L'"') == 0) && (file_name.lastIndexOf(L'"') == (file_name.getLength() - 1))) + { + sal_Int32 index = file_name.lastIndexOf('.'); + if ((index != -1) && ((index + 2) < file_name.getLength())) + return file_name.copy(index + 1, file_name.getLength() - (index + 2)); + } + // Unquoted file name + else + { + sal_Int32 index = file_name.lastIndexOf('.'); + if ((index != -1) && ((index + 1) < file_name.getLength())) + return file_name.copy(index + 1); + } + return OUString(); + } + + bool is_batch_file(const OUString& file_name) + { + OUString ext = get_file_extension(file_name); + return (ext.equalsIgnoreAsciiCase("bat") || + ext.equalsIgnoreAsciiCase("cmd") || + ext.equalsIgnoreAsciiCase("btm")); + } + + const OUString ENV_COMSPEC ("COMSPEC"); + OUString get_batch_processor() + { + OUString comspec; + osl_getEnvironment(ENV_COMSPEC.pData, &comspec.pData); + + OSL_ASSERT(comspec.getLength()); + + /* check if comspec path contains blanks and quote it if any */ + if (comspec.indexOf(' ') != -1) + comspec = quote_string(comspec); + + return comspec; + } + +} // namespace private + +oslProcessError SAL_CALL osl_executeProcess( + rtl_uString *strImageName, + rtl_uString *strArguments[], + sal_uInt32 nArguments, + oslProcessOption Options, + oslSecurity Security, + rtl_uString *strDirectory, + rtl_uString *strEnvironmentVars[], + sal_uInt32 nEnvironmentVars, + oslProcess *pProcess +) +{ + return osl_executeProcess_WithRedirectedIO( + strImageName, + strArguments, + nArguments, + Options, + Security, + strDirectory, + strEnvironmentVars, + nEnvironmentVars, + pProcess, + nullptr, nullptr, nullptr ); +} + +oslProcessError SAL_CALL osl_executeProcess_WithRedirectedIO( + rtl_uString *ustrImageName, + rtl_uString *ustrArguments[], + sal_uInt32 nArguments, + oslProcessOption Options, + oslSecurity Security, + rtl_uString *ustrDirectory, + rtl_uString *ustrEnvironmentVars[], + sal_uInt32 nEnvironmentVars, + oslProcess *pProcess, + oslFileHandle *pProcessInputWrite, + oslFileHandle *pProcessOutputRead, + oslFileHandle *pProcessErrorRead) +{ + OUString exe_path = get_executable_path( + ustrImageName, ustrArguments, nArguments, (Options & osl_Process_SEARCHPATH) != 0); + + if (0 == exe_path.getLength()) + return osl_Process_E_NotFound; + + if (pProcess == nullptr) + return osl_Process_E_InvalidError; + + DWORD flags = NORMAL_PRIORITY_CLASS; + OUStringBuffer command_line; + + if (is_batch_file(exe_path)) + { + OUString batch_processor = get_batch_processor(); + + if (batch_processor.getLength()) + { + /* cmd.exe does not work without a console window */ + if (!(Options & osl_Process_WAIT) || (Options & osl_Process_DETACHED)) + flags |= CREATE_NEW_CONSOLE; + + command_line.append(batch_processor); + command_line.append(" /c "); + } + else + // should we return here in case of error? + return osl_Process_E_Unknown; + } + + command_line.append(exe_path); + + /* Add remaining arguments to command line. If ustrImageName is nullptr + the first parameter is the name of the executable so we have to + start at 1 instead of 0 */ + for (sal_uInt32 n = (nullptr != ustrImageName) ? 0 : 1; n < nArguments; n++) + { + command_line.append(" "); + + /* Quote arguments containing blanks */ + if (OUString(ustrArguments[n]).indexOf(' ') != -1) + command_line.append(quote_string(ustrArguments[n])); + else + command_line.append(ustrArguments[n]); + } + + std::vector environment; + LPVOID p_environment = nullptr; + + if (nEnvironmentVars && ustrEnvironmentVars) + { + if (!setup_process_environment( + ustrEnvironmentVars, nEnvironmentVars, environment)) + return osl_Process_E_InvalidError; + + flags |= CREATE_UNICODE_ENVIRONMENT; + p_environment = environment.data(); + } + + OUString cwd; + if (ustrDirectory && ustrDirectory->length && (osl::FileBase::E_None != osl::FileBase::getSystemPathFromFileURL(ustrDirectory, cwd))) + return osl_Process_E_InvalidError; + + LPCWSTR p_cwd = (cwd.getLength()) ? o3tl::toW(cwd.getStr()) : nullptr; + + if ((Options & osl_Process_DETACHED) && !(flags & CREATE_NEW_CONSOLE)) + flags |= DETACHED_PROCESS; + + STARTUPINFOW startup_info = {}; + startup_info.cb = sizeof(startup_info); + startup_info.dwFlags = STARTF_USESHOWWINDOW; + startup_info.lpDesktop = const_cast(L""); + + /* Create pipes for redirected IO */ + HANDLE hInputRead = nullptr; + HANDLE hInputWrite = nullptr; + if (pProcessInputWrite && create_pipe(&hInputRead, true, &hInputWrite, false)) + startup_info.hStdInput = hInputRead; + + HANDLE hOutputRead = nullptr; + HANDLE hOutputWrite = nullptr; + if (pProcessOutputRead && create_pipe(&hOutputRead, false, &hOutputWrite, true)) + startup_info.hStdOutput = hOutputWrite; + + HANDLE hErrorRead = nullptr; + HANDLE hErrorWrite = nullptr; + if (pProcessErrorRead && create_pipe(&hErrorRead, false, &hErrorWrite, true)) + startup_info.hStdError = hErrorWrite; + + bool b_inherit_handles = false; + if (pProcessInputWrite || pProcessOutputRead || pProcessErrorRead) + { + startup_info.dwFlags |= STARTF_USESTDHANDLES; + b_inherit_handles = true; + } + + switch(Options & (osl_Process_NORMAL | osl_Process_HIDDEN | osl_Process_MINIMIZED | osl_Process_MAXIMIZED | osl_Process_FULLSCREEN)) + { + case osl_Process_HIDDEN: + startup_info.wShowWindow = SW_HIDE; + flags |= CREATE_NO_WINDOW; // ignored for non-console + // applications; ignored on + // Win9x + break; + + case osl_Process_MINIMIZED: + startup_info.wShowWindow = SW_MINIMIZE; + break; + + case osl_Process_MAXIMIZED: + case osl_Process_FULLSCREEN: + startup_info.wShowWindow = SW_MAXIMIZE; + break; + + default: + startup_info.wShowWindow = SW_NORMAL; + } + + OUString cmdline = command_line.makeStringAndClear(); + PROCESS_INFORMATION process_info; + bool bRet = false; + + if ((Security != nullptr) && (static_cast(Security)->m_hToken != nullptr)) + { + bRet = CreateProcessAsUserW( + static_cast(Security)->m_hToken, + nullptr, const_cast(o3tl::toW(cmdline.getStr())), nullptr, nullptr, + b_inherit_handles, flags, p_environment, p_cwd, + &startup_info, &process_info); + } + else + { + bRet = CreateProcessW( + nullptr, const_cast(o3tl::toW(cmdline.getStr())), nullptr, nullptr, + b_inherit_handles, flags, p_environment, p_cwd, + &startup_info, &process_info); + } + + /* Now we can close the pipe ends that are used by the child process */ + + if (hInputRead) + CloseHandle(hInputRead); + + if (hOutputWrite) + CloseHandle(hOutputWrite); + + if (hErrorWrite) + CloseHandle(hErrorWrite); + + if (bRet) + { + CloseHandle(process_info.hThread); + + oslProcessImpl* pProcImpl = static_cast( + malloc(sizeof(oslProcessImpl))); + + if (pProcImpl != nullptr) + { + pProcImpl->m_hProcess = process_info.hProcess; + pProcImpl->m_IdProcess = process_info.dwProcessId; + + *pProcess = static_cast(pProcImpl); + + if (Options & osl_Process_WAIT) + WaitForSingleObject(pProcImpl->m_hProcess, INFINITE); + + if (pProcessInputWrite) + *pProcessInputWrite = osl_createFileHandleFromOSHandle(hInputWrite, osl_File_OpenFlag_Write); + + if (pProcessOutputRead) + *pProcessOutputRead = osl_createFileHandleFromOSHandle(hOutputRead, osl_File_OpenFlag_Read); + + if (pProcessErrorRead) + *pProcessErrorRead = osl_createFileHandleFromOSHandle(hErrorRead, osl_File_OpenFlag_Read); + + return osl_Process_E_None; + } + } + + /* if an error occurred we have to close the server side pipe ends too */ + + if (hInputWrite) + CloseHandle(hInputWrite); + + if (hOutputRead) + CloseHandle(hOutputRead); + + if (hErrorRead) + CloseHandle(hErrorRead); + + return osl_Process_E_Unknown; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/procimpl.hxx b/sal/osl/w32/procimpl.hxx new file mode 100644 index 000000000..fb1263fa7 --- /dev/null +++ b/sal/osl/w32/procimpl.hxx @@ -0,0 +1,33 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_W32_PROCIMPL_HXX +#define INCLUDED_SAL_OSL_W32_PROCIMPL_HXX + +#include + +struct oslProcessImpl +{ + HANDLE m_hProcess; + DWORD m_IdProcess; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/profile.cxx b/sal/osl/w32/profile.cxx new file mode 100644 index 000000000..a0790c3de --- /dev/null +++ b/sal/osl/w32/profile.cxx @@ -0,0 +1,2341 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" + +#include "file_url.hxx" +#include "path_helper.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using std::min; +static void copy_ustr_n( void *dest, const void *source, size_t length ) { memcpy(dest, source, length*sizeof(sal_Unicode)); } + +#define LINES_INI 32 +#define LINES_ADD 10 +#define SECTIONS_INI 5 +#define SECTIONS_ADD 3 +#define ENTRIES_INI 5 +#define ENTRIES_ADD 3 + +#define STR_INI_EXTENSION L".ini" +#define STR_INI_METAHOME "?~" +#define STR_INI_METASYS "?$" +#define STR_INI_METACFG "?^" +#define STR_INI_METAINS "?#" + +#define STR_INI_BOOLYES "yes" +#define STR_INI_BOOLON "on" +#define STR_INI_BOOLONE "1" +#define STR_INI_BOOLNO "no" +#define STR_INI_BOOLOFF "off" +#define STR_INI_BOOLZERO "0" + +#define FLG_USER 0x00FF +#define FLG_AUTOOPEN 0x0100 +#define FLG_MODIFIED 0x0200 + +#define SVERSION_LOCATION STR_INI_METACFG +#define SVERSION_FALLBACK STR_INI_METASYS +#define SVERSION_NAME "sversion" +#define SVERSION_SECTION "Versions" +#define SVERSION_SOFFICE "StarOffice" +#define SVERSION_PROFILE "soffice.ini" +#define SVERSION_DIRS { "bin", "program" } +#define SVERSION_USER "user" + +/*#define DEBUG_OSL_PROFILE 1*/ + +typedef FILETIME osl_TStamp; + +namespace { + +enum osl_TLockMode +{ + un_lock, read_lock, write_lock +}; + +struct osl_TFile +{ + HANDLE m_Handle; + char* m_pReadPtr; + char m_ReadBuf[512]; + char* m_pWriteBuf; + sal_uInt32 m_nWriteBufLen; + sal_uInt32 m_nWriteBufFree; +}; + +struct osl_TProfileEntry +{ + sal_uInt32 m_Line; + sal_uInt32 m_Offset; + sal_uInt32 m_Len; +}; + +struct osl_TProfileSection +{ + sal_uInt32 m_Line; + sal_uInt32 m_Offset; + sal_uInt32 m_Len; + sal_uInt32 m_NoEntries; + sal_uInt32 m_MaxEntries; + osl_TProfileEntry* m_Entries; +}; + +/* + Profile-data structure hidden behind oslProfile: +*/ +struct osl_TProfileImpl +{ + sal_uInt32 m_Flags; + osl_TFile* m_pFile; + osl_TStamp m_Stamp; + sal_uInt32 m_NoLines; + sal_uInt32 m_MaxLines; + sal_uInt32 m_NoSections; + sal_uInt32 m_MaxSections; + char** m_Lines; + rtl_uString *m_strFileName; + osl_TProfileSection* m_Sections; +}; + +} + +static osl_TFile* openFileImpl(rtl_uString * strFileName, oslProfileOption ProfileFlags ); +static osl_TStamp closeFileImpl(osl_TFile* pFile); +static bool lockFile(const osl_TFile* pFile, osl_TLockMode eMode); +static bool rewindFile(osl_TFile* pFile, bool bTruncate); +static osl_TStamp getFileStamp(osl_TFile* pFile); + +static bool getLine(osl_TFile* pFile, char *pszLine, int MaxLen); +static bool putLine(osl_TFile* pFile, const char *pszLine); +static const char* stripBlanks(const char* String, sal_uInt32* pLen); +static const char* addLine(osl_TProfileImpl* pProfile, const char* Line); +static const char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo); +static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo); +static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection, + sal_uInt32 NoEntry, sal_uInt32 Line, + const char* Entry, sal_uInt32 Len); +static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection, + int Line, const char* Entry, sal_uInt32 Len); +static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry); +static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len); +static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection); +static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const char* Section, + const char* Entry, sal_uInt32 *pNoEntry); +static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile); +static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup); +static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable); +static bool releaseProfile(osl_TProfileImpl* pProfile); +static bool lookupProfile(const sal_Unicode *strPath, const sal_Unicode *strFile, sal_Unicode *strProfile); + +static bool writeProfileImpl (osl_TFile* pFile); +static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl*); +static bool osl_ProfileSwapProfileNames(osl_TProfileImpl*); +static rtl_uString* osl_ProfileGenerateExtension(rtl_uString* ustrFileName, rtl_uString* ustrExtension); + +static bool osl_getProfileName(rtl_uString* strPath, rtl_uString* strName, rtl_uString** strProfileName); + +oslProfile SAL_CALL osl_openProfile(rtl_uString *strProfileName, oslProfileOption Flags) +{ + osl_TFile* pFile = nullptr; + osl_TProfileImpl* pProfile; + rtl_uString *FileName=nullptr; + + OSL_VERIFY(strProfileName); + + if (rtl_uString_getLength(strProfileName) == 0 ) + { + OSL_VERIFY(osl_getProfileName(nullptr, nullptr, &FileName)); + } + else + { + rtl_uString_assign(&FileName, strProfileName); + } + + osl_getSystemPathFromFileURL(FileName, &FileName); + +#ifdef DEBUG_OSL_PROFILE + Flags=osl_Profile_FLUSHWRITE; + + if ( Flags == osl_Profile_DEFAULT ) + { + SAL_INFO("sal.osl", "with osl_Profile_DEFAULT"); + } + if ( Flags & osl_Profile_SYSTEM ) + { + SAL_INFO("sal.osl", "with osl_Profile_SYSTEM"); + } + if ( Flags & osl_Profile_READLOCK ) + { + SAL_INFO("sal.osl", "with osl_Profile_READLOCK"); + } + if ( Flags & osl_Profile_WRITELOCK ) + { + SAL_INFO("sal.osl", "with osl_Profile_WRITELOCK"); + } + if ( Flags & osl_Profile_FLUSHWRITE ) + { + SAL_INFO("sal.osl", "with osl_Profile_FLUSHWRITE"); + } +#endif + + if ( (! (Flags & osl_Profile_SYSTEM)) && ( (pFile = openFileImpl(FileName, Flags) ) == nullptr ) ) + { + if( FileName) + rtl_uString_release( FileName); + + return nullptr; + } + + pProfile = static_cast(calloc(1, sizeof(osl_TProfileImpl))); + if (!pProfile) + return nullptr; + + pProfile->m_Flags = Flags & FLG_USER; + osl_getSystemPathFromFileURL(strProfileName, &pProfile->m_strFileName); + + if (Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE )) + pProfile->m_pFile = pFile; + + pProfile->m_Stamp = getFileStamp(pFile); + + loadProfile(pFile, pProfile); + + if (pProfile->m_pFile == nullptr) + closeFileImpl(pFile); + + if( FileName) + rtl_uString_release( FileName); + + return pProfile; +} + +sal_Bool SAL_CALL osl_closeProfile(oslProfile Profile) +{ + osl_TProfileImpl* pProfile = static_cast(Profile); + + + if ( Profile == nullptr ) + { + return false; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + pProfile = acquireProfile(Profile,true); + + if ( pProfile != nullptr ) + { + if ( !( pProfile->m_Flags & osl_Profile_READLOCK ) && ( pProfile->m_Flags & FLG_MODIFIED ) ) + { + storeProfile(pProfile, false); + } + } + else + { + pProfile = acquireProfile(Profile,false); + } + + if ( pProfile == nullptr ) + { + return false; + } + + if (pProfile->m_pFile != nullptr) + closeFileImpl(pProfile->m_pFile); + } + + pProfile->m_pFile = nullptr; + rtl_uString_release(pProfile->m_strFileName); + pProfile->m_strFileName = nullptr; + + /* release whole profile data types memory */ + if ( pProfile->m_NoLines > 0) + { + unsigned int index=0; + if ( pProfile->m_Lines != nullptr ) + { + for ( index = 0 ; index < pProfile->m_NoLines ; ++index) + { + if ( pProfile->m_Lines[index] != nullptr ) + { + free(pProfile->m_Lines[index]); + } + } + free(pProfile->m_Lines); + } + if ( pProfile->m_Sections != nullptr ) + { + for ( index = 0 ; index < pProfile->m_NoSections ; ++index ) + { + if ( pProfile->m_Sections[index].m_Entries != nullptr ) + free(pProfile->m_Sections[index].m_Entries); + } + free(pProfile->m_Sections); + } + + } + free(pProfile); + + return true; +} + +sal_Bool SAL_CALL osl_flushProfile(oslProfile Profile) +{ + osl_TProfileImpl* pProfile = static_cast(Profile); + osl_TFile* pFile; + bool bRet = false; + + + if ( pProfile == nullptr ) + { + return false; + } + + pFile = pProfile->m_pFile; + if ( pFile == nullptr || pFile->m_Handle == INVALID_HANDLE_VALUE ) + { + return false; + } + + if ( pProfile->m_Flags & FLG_MODIFIED ) + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "swapping to storeprofile"); +#endif + bRet = storeProfile(pProfile,false); + } + + return bRet; +} + +static bool writeProfileImpl(osl_TFile* pFile) +{ + DWORD BytesWritten=0; + bool bRet; + + if ( pFile == nullptr || pFile->m_Handle == INVALID_HANDLE_VALUE || ( pFile->m_pWriteBuf == nullptr ) ) + { + return false; + } + + bRet=WriteFile(pFile->m_Handle, pFile->m_pWriteBuf, pFile->m_nWriteBufLen - pFile->m_nWriteBufFree,&BytesWritten,nullptr); + + if ( !bRet || BytesWritten == 0 ) + { + OSL_ENSURE(bRet,"WriteFile failed!!!"); + SAL_WARN("sal.osl", "write failed " << strerror(errno)); + + return false; + } + + free(pFile->m_pWriteBuf); + pFile->m_pWriteBuf=nullptr; + pFile->m_nWriteBufLen=0; + pFile->m_nWriteBufFree=0; + + return true; +} + +namespace { +// Use Unicode version of GetPrivateProfileString, to work with Multi-language paths +DWORD GetPrivateProfileStringWrapper(const osl_TProfileImpl* pProfile, + const char* pszSection, const char* pszEntry, + char* pszString, sal_uInt32 MaxLen, + const char* pszDefault) +{ + OSL_ASSERT(pProfile && (!MaxLen || pszString)); + + rtl_uString *pSection = nullptr, *pEntry = nullptr, *pDefault = nullptr; + if (pszSection) + { + rtl_string2UString(&pSection, pszSection, strlen(pszSection), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(pSection); + } + if (pszEntry) + { + rtl_string2UString(&pEntry, pszEntry, strlen(pszEntry), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(pEntry); + } + if (pszDefault) + { + rtl_string2UString(&pDefault, pszDefault, strlen(pszDefault), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(pDefault); + } + + LPCWSTR pWSection = (pSection ? o3tl::toW(rtl_uString_getStr(pSection)) : nullptr), + pWEntry = (pEntry ? o3tl::toW(rtl_uString_getStr(pEntry)) : nullptr), + pWDefault = (pDefault ? o3tl::toW(rtl_uString_getStr(pDefault)) : nullptr); + + std::vector aBuf(MaxLen + 1); + GetPrivateProfileStringW(pWSection, pWEntry, pWDefault, aBuf.data(), MaxLen, o3tl::toW(rtl_uString_getStr(pProfile->m_strFileName))); + + if (pDefault) + rtl_uString_release(pDefault); + if (pEntry) + rtl_uString_release(pEntry); + if (pSection) + rtl_uString_release(pSection); + + return WideCharToMultiByte(CP_ACP, 0, aBuf.data(), -1, pszString, MaxLen, nullptr, nullptr); +} + +// Use Unicode version of WritePrivateProfileString, to work with Multi-language paths +bool WritePrivateProfileStringWrapper(const osl_TProfileImpl* pProfile, + const char* pszSection, const char* pszEntry, + const char* pszString) +{ + OSL_ASSERT(pProfile && pszSection); + rtl_uString *pSection, *pEntry = nullptr, *pString = nullptr; + rtl_string2UString(&pSection, pszSection, strlen(pszSection), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(pSection); + if (pszEntry) + { + rtl_string2UString(&pEntry, pszEntry, strlen(pszEntry), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(pEntry); + } + if (pszString) + { + rtl_string2UString(&pString, pszString, strlen(pszString), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS); + OSL_ASSERT(pString); + } + + LPCWSTR pWSection = o3tl::toW(pSection->buffer), + pWEntry = (pEntry ? o3tl::toW(rtl_uString_getStr(pEntry)) : nullptr), + pWString = (pString ? o3tl::toW(rtl_uString_getStr(pString)) : nullptr); + + bool bResult = WritePrivateProfileStringW(pWSection, pWEntry, pWString, o3tl::toW(rtl_uString_getStr(pProfile->m_strFileName))); + + if (pString) + rtl_uString_release(pString); + if (pEntry) + rtl_uString_release(pEntry); + rtl_uString_release(pSection); + + return bResult; +} +} + +sal_Bool SAL_CALL osl_readProfileString(oslProfile Profile, + const char* pszSection, const char* pszEntry, + char* pszString, sal_uInt32 MaxLen, + const char* pszDefault) +{ + sal_uInt32 NoEntry; + const char* pStr = nullptr; + osl_TProfileImpl* pProfile = nullptr; + + pProfile = acquireProfile(Profile, false); + + if (pProfile == nullptr) + { + return false; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec; + if (((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) != nullptr) && + (NoEntry < pSec->m_NoEntries) && + ((pStr = strchr(pProfile->m_Lines[pSec->m_Entries[NoEntry].m_Line], + '=')) != nullptr)) + pStr++; + else + pStr = pszDefault; + + if ( pStr != nullptr ) + { + pStr = stripBlanks(pStr, nullptr); + MaxLen = (MaxLen - 1 < strlen(pStr)) ? (MaxLen - 1) : strlen(pStr); + pStr = stripBlanks(pStr, &MaxLen); + strncpy(pszString, pStr, MaxLen); + pszString[MaxLen] = '\0'; + } + } + else + { + if (GetPrivateProfileStringWrapper(pProfile, pszSection, pszEntry, pszString, MaxLen, pszDefault) > 0) + pStr = pszString; // required to return true below + } + + releaseProfile(pProfile); + + if ( pStr == nullptr ) + { + return false; + } + + return true; +} + +sal_Bool SAL_CALL osl_readProfileBool(oslProfile Profile, + const char* pszSection, const char* pszEntry, + sal_Bool Default) +{ + char Line[32]; + + if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), "")) + { + if ((stricmp(Line, STR_INI_BOOLYES) == 0) || + (stricmp(Line, STR_INI_BOOLON) == 0) || + (stricmp(Line, STR_INI_BOOLONE) == 0)) + Default = true; + else + if ((stricmp(Line, STR_INI_BOOLNO) == 0) || + (stricmp(Line, STR_INI_BOOLOFF) == 0) || + (stricmp(Line, STR_INI_BOOLZERO) == 0)) + Default = false; + } + + return Default; +} + +sal_uInt32 SAL_CALL osl_readProfileIdent(oslProfile Profile, + const char* pszSection, const char* pszEntry, + sal_uInt32 FirstId, const char* Strings[], + sal_uInt32 Default) +{ + sal_uInt32 i; + char Line[256]; + + if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), "")) + { + i = 0; + while (Strings[i] != nullptr) + { + if (stricmp(Line, Strings[i]) == 0) + { + Default = i + FirstId; + break; + } + i++; + } + } + + return Default; +} + +sal_Bool SAL_CALL osl_writeProfileString(oslProfile Profile, + const char* pszSection, const char* pszEntry, + const char* pszString) +{ + sal_uInt32 i; + bool bRet = false; + sal_uInt32 NoEntry; + const char* pStr; + char Line[4096]; + osl_TProfileSection* pSec; + osl_TProfileImpl* pProfile = nullptr; + + pProfile = acquireProfile(Profile, true); + + if (pProfile == nullptr) + { + return false; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + if ((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) == nullptr) + { + Line[0] = '\0'; + addLine(pProfile, Line); + + Line[0] = '['; + strcpy(&Line[1], pszSection); + Line[1 + strlen(pszSection)] = ']'; + Line[2 + strlen(pszSection)] = '\0'; + + if (((pStr = addLine(pProfile, Line)) == nullptr) || + (! addSection(pProfile, pProfile->m_NoLines - 1, &pStr[1], strlen(pszSection)))) + { + releaseProfile(pProfile); + return false; + } + + pSec = &pProfile->m_Sections[pProfile->m_NoSections - 1]; + NoEntry = pSec->m_NoEntries; + } + + Line[0] = '\0'; + strcpy(&Line[0], pszEntry); + Line[0 + strlen(pszEntry)] = '='; + strcpy(&Line[1 + strlen(pszEntry)], pszString); + + if (NoEntry >= pSec->m_NoEntries) + { + if (pSec->m_NoEntries > 0) + i = pSec->m_Entries[pSec->m_NoEntries - 1].m_Line + 1; + else + i = pSec->m_Line + 1; + + if (((pStr = insertLine(pProfile, Line, i)) == nullptr) || + (! addEntry(pProfile, pSec, i, pStr, strlen(pszEntry)))) + { + releaseProfile(pProfile); + return false; + } + + pProfile->m_Flags |= FLG_MODIFIED; + } + else + { + i = pSec->m_Entries[NoEntry].m_Line; + free(pProfile->m_Lines[i]); + pProfile->m_Lines[i] = strdup(Line); + setEntry(pProfile, pSec, NoEntry, i, pProfile->m_Lines[i], strlen(pszEntry)); + + pProfile->m_Flags |= FLG_MODIFIED; + } + } + else + { + WritePrivateProfileStringWrapper(pProfile, pszSection, pszEntry, pszString); + } + + bRet = releaseProfile(pProfile); + return bRet; +} + +sal_Bool SAL_CALL osl_writeProfileBool(oslProfile Profile, + const char* pszSection, const char* pszEntry, + sal_Bool Value) +{ + bool bRet = false; + + if (Value) + bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLONE); + else + bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLZERO); + + return bRet; +} + +sal_Bool SAL_CALL osl_writeProfileIdent(oslProfile Profile, + const char* pszSection, const char* pszEntry, + sal_uInt32 FirstId, const char* Strings[], + sal_uInt32 Value) +{ + int i, n; + bool bRet = false; + + for (n = 0; Strings[n] != nullptr; n++); + + if ((i = Value - FirstId) >= n) + bRet=false; + else + bRet=osl_writeProfileString(Profile, pszSection, pszEntry, Strings[i]); + + return bRet; +} + +sal_Bool SAL_CALL osl_removeProfileEntry(oslProfile Profile, + const char *pszSection, const char *pszEntry) +{ + sal_uInt32 NoEntry; + osl_TProfileImpl* pProfile = nullptr; + bool bRet = false; + + pProfile = acquireProfile(Profile, true); + + if (pProfile == nullptr) + return false; + + if (!(pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec; + if (((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) != nullptr) && + (NoEntry < pSec->m_NoEntries)) + { + removeLine(pProfile, pSec->m_Entries[NoEntry].m_Line); + removeEntry(pSec, NoEntry); + if (pSec->m_NoEntries == 0) + { + removeLine(pProfile, pSec->m_Line); + + /* remove any empty separation line */ + if ((pSec->m_Line > 0) && (pProfile->m_Lines[pSec->m_Line - 1][0] == '\0')) + removeLine(pProfile, pSec->m_Line - 1); + + removeSection(pProfile, pSec); + } + + pProfile->m_Flags |= FLG_MODIFIED; + } + } + else + { + WritePrivateProfileStringWrapper(pProfile, pszSection, pszEntry, nullptr); + } + + bRet = releaseProfile(pProfile); + return bRet; +} + +sal_uInt32 SAL_CALL osl_getProfileSectionEntries(oslProfile Profile, const char *pszSection, + char* pszBuffer, sal_uInt32 MaxLen) +{ + sal_uInt32 i, n = 0; + sal_uInt32 NoEntry; + osl_TProfileImpl* pProfile = nullptr; + + pProfile = acquireProfile(Profile, false); + + if (pProfile == nullptr) + return 0; + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + osl_TProfileSection* pSec; + if ((pSec = findEntry(pProfile, pszSection, "", &NoEntry)) != nullptr) + { + if (MaxLen != 0) + { + for (i = 0; i < pSec->m_NoEntries; i++) + { + if ((n + pSec->m_Entries[i].m_Len + 1) < MaxLen) + { + strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Entries[i].m_Line] + [pSec->m_Entries[i].m_Offset], pSec->m_Entries[i].m_Len); + n += pSec->m_Entries[i].m_Len; + pszBuffer[n++] = '\0'; + } + else + { + break; + } + + } + + pszBuffer[n++] = '\0'; + } + else + { + for (i = 0; i < pSec->m_NoEntries; i++) + { + n += pSec->m_Entries[i].m_Len + 1; + } + + n += 1; + } + } + else + { + n = 0; + } + } + else + { + n = GetPrivateProfileStringWrapper(pProfile, pszSection, nullptr, pszBuffer, MaxLen, nullptr); + } + + releaseProfile(pProfile); + + return n; +} + +bool osl_getProfileName(rtl_uString* strPath, rtl_uString* strName, rtl_uString** strProfileName) +{ + bool bFailed; + ::osl::LongPathBuffer< sal_Unicode > aFile( MAX_LONG_PATH ); + ::osl::LongPathBuffer< sal_Unicode > aPath( MAX_LONG_PATH ); + sal_uInt32 nFileLen = 0; + sal_uInt32 nPathLen = 0; + + rtl_uString * strTmp = nullptr; + oslFileError nError; + + /* build file name */ + if (strName && strName->length) + { + if( ::sal::static_int_cast< sal_uInt32 >( strName->length ) >= aFile.getBufSizeInSymbols() ) + return false; + + copy_ustr_n( aFile, strName->buffer, strName->length+1); + nFileLen = strName->length; + + if (rtl_ustr_indexOfChar( aFile, L'.' ) == -1) + { + if (nFileLen + wcslen(STR_INI_EXTENSION) >= aFile.getBufSizeInSymbols()) + return false; + + /* add default extension */ + copy_ustr_n( aFile + nFileLen, STR_INI_EXTENSION, wcslen(STR_INI_EXTENSION)+1 ); + nFileLen += wcslen(STR_INI_EXTENSION); + } + } + else + { + rtl_uString *strProgName = nullptr; + sal_Unicode *pProgName; + sal_Int32 nOffset = 0; + sal_Int32 nLen; + sal_Int32 nPos; + + if (osl_getExecutableFile(&strProgName) != osl_Process_E_None) + return false; + + /* remove path and extension from filename */ + pProgName = strProgName->buffer; + nLen = strProgName->length ; + + if ((nPos = rtl_ustr_lastIndexOfChar( pProgName, L'/' )) != -1) + nOffset = nPos + 1; + else if ((nPos = rtl_ustr_lastIndexOfChar( pProgName, L':' )) != -1) + nOffset = nPos + 1; + + if ((nPos = rtl_ustr_lastIndexOfChar( pProgName, L'.' )) != -1 ) + nLen -= 4; + + if ((nFileLen = nLen - nOffset) >= aFile.getBufSizeInSymbols()) + return false; + + copy_ustr_n(aFile, pProgName + nOffset, nFileLen); + + if (nFileLen + wcslen(STR_INI_EXTENSION) >= aFile.getBufSizeInSymbols()) + return false; + + /* add default extension */ + copy_ustr_n(aFile + nFileLen, STR_INI_EXTENSION, wcslen(STR_INI_EXTENSION)+1); + nFileLen += wcslen(STR_INI_EXTENSION); + + rtl_uString_release( strProgName ); + } + + if (aFile[0] == 0) + return false; + + /* build directory path */ + if (strPath && strPath->length) + { + sal_Unicode *pPath = rtl_uString_getStr(strPath); + sal_Int32 nLen = rtl_uString_getLength(strPath); + + if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METAHOME) , STR_INI_METAHOME) == 0) && + ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METAHOME)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METAHOME)] == '/'))) + { + rtl_uString * strHome = nullptr; + oslSecurity security = osl_getCurrentSecurity(); + + bFailed = ! osl_getHomeDir(security, &strHome); + osl_freeSecurityHandle(security); + + if (bFailed) return false; + + if ( ::sal::static_int_cast< sal_uInt32 >( strHome->length ) >= aPath.getBufSizeInSymbols()) + return false; + + copy_ustr_n( aPath, strHome->buffer, strHome->length+1); + nPathLen = strHome->length; + + if (nLen > RTL_CONSTASCII_LENGTH(STR_INI_METAHOME)) + { + pPath += RTL_CONSTASCII_LENGTH(STR_INI_METAHOME); + nLen -= RTL_CONSTASCII_LENGTH(STR_INI_METAHOME); + + if (nLen + nPathLen >= aPath.getBufSizeInSymbols()) + return false; + + copy_ustr_n(aPath + nPathLen, pPath, nLen+1); + nPathLen += nLen; + } + + rtl_uString_release(strHome); + } + + else if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METACFG), STR_INI_METACFG) == 0) && + ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METACFG)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METACFG)] == '/'))) + { + rtl_uString * strConfig = nullptr; + oslSecurity security = osl_getCurrentSecurity(); + + bFailed = ! osl_getConfigDir(security, &strConfig); + osl_freeSecurityHandle(security); + + if (bFailed) return false; + + if ( ::sal::static_int_cast< sal_uInt32 >( strConfig->length ) >= aPath.getBufSizeInSymbols()) + return false; + + copy_ustr_n( aPath, strConfig->buffer, strConfig->length+1 ); + nPathLen = strConfig->length; + + if (nLen > RTL_CONSTASCII_LENGTH(STR_INI_METACFG)) + { + pPath += RTL_CONSTASCII_LENGTH(STR_INI_METACFG); + nLen -= RTL_CONSTASCII_LENGTH(STR_INI_METACFG); + + if (nLen + nPathLen >= aPath.getBufSizeInSymbols()) + return false; + + copy_ustr_n(aPath + nPathLen, pPath, nLen+1); + nPathLen += nLen; + } + + rtl_uString_release(strConfig); + } + + else if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METASYS), STR_INI_METASYS) == 0) && + ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METASYS)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METASYS)] == '/'))) + { + if (((nPathLen = GetWindowsDirectoryW(o3tl::toW(aPath), aPath.getBufSizeInSymbols())) == 0) || (nPathLen >= aPath.getBufSizeInSymbols())) + return false; + + if (nLen > RTL_CONSTASCII_LENGTH(STR_INI_METASYS)) + { + pPath += RTL_CONSTASCII_LENGTH(STR_INI_METASYS); + nLen -= RTL_CONSTASCII_LENGTH(STR_INI_METASYS); + + if (nLen + nPathLen >= aPath.getBufSizeInSymbols()) + return false; + + copy_ustr_n(aPath + nPathLen, pPath, nLen+1); + nPathLen += nLen; + } + } + + else if ((rtl_ustr_ascii_compare_WithLength(pPath, RTL_CONSTASCII_LENGTH(STR_INI_METAINS), STR_INI_METAINS) == 0) && + ((nLen == RTL_CONSTASCII_LENGTH(STR_INI_METAINS)) || (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METAINS)] == '/') || + (pPath[RTL_CONSTASCII_LENGTH(STR_INI_METAINS)] == '"') ) ) + { + if (! lookupProfile(pPath + RTL_CONSTASCII_LENGTH(STR_INI_METAINS), aFile, aPath)) + return false; + + nPathLen = rtl_ustr_getLength(aPath); + } + + else if( ::sal::static_int_cast< sal_uInt32 >( nLen ) < aPath.getBufSizeInSymbols()) + { + copy_ustr_n(aPath, pPath, nLen+1); + nPathLen = rtl_ustr_getLength(aPath); + } + else + return false; + } + else + { + rtl_uString * strConfigDir = nullptr; + oslSecurity security = osl_getCurrentSecurity(); + + bFailed = ! osl_getConfigDir(security, &strConfigDir); + osl_freeSecurityHandle(security); + + if (bFailed) return false; + if ( ::sal::static_int_cast< sal_uInt32 >( strConfigDir->length ) >= aPath.getBufSizeInSymbols() ) + return false; + + copy_ustr_n(aPath, strConfigDir->buffer, strConfigDir->length+1); + nPathLen = strConfigDir->length; + } + + if (nPathLen && (aPath[nPathLen - 1] != L'/') && (aPath[nPathLen - 1] != L'\\')) + { + aPath[nPathLen++] = L'\\'; + aPath[nPathLen] = 0; + } + + if (nPathLen + nFileLen >= aPath.getBufSizeInSymbols()) + return false; + + /* append file name */ + copy_ustr_n(aPath + nPathLen, aFile, nFileLen+1); + nPathLen += nFileLen; + + /* copy filename */ + rtl_uString_newFromStr_WithLength(&strTmp, aPath, nPathLen); + nError = osl_getFileURLFromSystemPath(strTmp, strProfileName); + rtl_uString_release(strTmp); + + return nError == osl_File_E_None; +} + +sal_uInt32 SAL_CALL osl_getProfileSections(oslProfile Profile, char* pszBuffer, sal_uInt32 MaxLen) +{ + sal_uInt32 i, n = 0; + osl_TProfileImpl* pProfile = acquireProfile(Profile, false); + + if (pProfile == nullptr) + return 0; + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + if (MaxLen != 0) + { + for (i = 0; i < pProfile->m_NoSections; i++) + { + osl_TProfileSection* pSec = &pProfile->m_Sections[i]; + + if ((n + pSec->m_Len + 1) < MaxLen) + { + strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], + pSec->m_Len); + n += pSec->m_Len; + pszBuffer[n++] = '\0'; + } + else + break; + } + + pszBuffer[n++] = '\0'; + } + else + { + for (i = 0; i < pProfile->m_NoSections; i++) + n += pProfile->m_Sections[i].m_Len + 1; + + n += 1; + } + } + else + { + std::vector aBuf(MaxLen + 1); + GetPrivateProfileSectionNamesW(aBuf.data(), MaxLen, o3tl::toW(rtl_uString_getStr(pProfile->m_strFileName))); + + n = WideCharToMultiByte(CP_ACP, 0, aBuf.data(), -1, pszBuffer, MaxLen, nullptr, nullptr); + } + + releaseProfile(pProfile); + + return n; +} + +static osl_TStamp getFileStamp(osl_TFile* pFile) +{ + FILETIME FileTime; + + if ((pFile->m_Handle == INVALID_HANDLE_VALUE) || + (! GetFileTime(pFile->m_Handle, nullptr, nullptr, &FileTime))) + memset(&FileTime, 0, sizeof(FileTime)); + + return FileTime; +} + +static bool lockFile(const osl_TFile* pFile, osl_TLockMode eMode) +{ + bool status = false; + OVERLAPPED Overlapped = {}; + + if (pFile->m_Handle == INVALID_HANDLE_VALUE) + return false; + + switch (eMode) + { + case un_lock: + status = UnlockFileEx( + pFile->m_Handle, 0, 0xFFFFFFFF, 0, &Overlapped); + break; + + case read_lock: + status = LockFileEx( + pFile->m_Handle, 0, 0, 0xFFFFFFFF, 0, &Overlapped); + break; + + case write_lock: + status = LockFileEx( + pFile->m_Handle, LOCKFILE_EXCLUSIVE_LOCK, 0, 0xFFFFFFFF, 0, + &Overlapped); + break; + } + + return status; +} + +static osl_TFile* openFileImpl(rtl_uString * strFileName, oslProfileOption ProfileFlags ) +{ + osl_TFile* pFile = static_cast< osl_TFile*>( calloc( 1, sizeof(osl_TFile) ) ); + if (!pFile) + return nullptr; + bool bWriteable = false; + + if ( ProfileFlags & ( osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) ) + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "setting bWriteable to TRUE"); +#endif + bWriteable=true; + } + + if (! bWriteable) + { + pFile->m_Handle = CreateFileW( o3tl::toW(rtl_uString_getStr( strFileName )), GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); + + /* mfe: argghh!!! do not check if the file could be opened */ + /* default mode expects it that way!!! */ + } + else + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "opening read/write " << pszFilename); +#endif + + if ((pFile->m_Handle = CreateFileW( o3tl::toW(rtl_uString_getStr( strFileName )), GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr)) + == INVALID_HANDLE_VALUE) + { + free(pFile); + return nullptr; + } + } + + pFile->m_pWriteBuf=nullptr; + pFile->m_nWriteBufFree=0; + pFile->m_nWriteBufLen=0; + + if ( ProfileFlags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) ) + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "locking file " << pszFilename); +#endif + + lockFile(pFile, bWriteable ? write_lock : read_lock); + } + + return pFile; +} + +static osl_TStamp closeFileImpl(osl_TFile* pFile) +{ + osl_TStamp stamp = {0, 0}; + + if ( pFile == nullptr ) + { + return stamp; + } + + if (pFile->m_Handle != INVALID_HANDLE_VALUE) + { + stamp = getFileStamp(pFile); + + lockFile(pFile, un_lock); + + CloseHandle(pFile->m_Handle); + pFile->m_Handle = INVALID_HANDLE_VALUE; + } + + if ( pFile->m_pWriteBuf != nullptr ) + { + free(pFile->m_pWriteBuf); + } + + free(pFile); + + return stamp; +} + +static bool rewindFile(osl_TFile* pFile, bool bTruncate) +{ + if (pFile->m_Handle != INVALID_HANDLE_VALUE) + { + pFile->m_pReadPtr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf); + + SetFilePointer(pFile->m_Handle, 0, nullptr, FILE_BEGIN); + + if (bTruncate) + SetEndOfFile(pFile->m_Handle); + } + + return true; +} + +static bool getLine(osl_TFile* pFile, char *pszLine, int MaxLen) +{ + DWORD Max; + size_t Free; + char* pChr; + char* pLine = pszLine; + + if (pFile->m_Handle == INVALID_HANDLE_VALUE) + return false; + + MaxLen -= 1; + + do + { + size_t Bytes = sizeof(pFile->m_ReadBuf) - (pFile->m_pReadPtr - pFile->m_ReadBuf); + + if (Bytes <= 1) + { + /* refill buffer */ + memcpy(pFile->m_ReadBuf, pFile->m_pReadPtr, Bytes); + pFile->m_pReadPtr = pFile->m_ReadBuf; + + Free = sizeof(pFile->m_ReadBuf) - Bytes; + + if (! ReadFile(pFile->m_Handle, &pFile->m_ReadBuf[Bytes], Free, &Max, nullptr)) + { + *pLine = '\0'; + return false; + } + + if (Max < Free) + { + if ((Max == 0) && (pLine == pszLine)) + { + *pLine = '\0'; + return false; + } + + pFile->m_ReadBuf[Bytes + Max] = '\0'; + } + } + + for (pChr = pFile->m_pReadPtr; + (*pChr != '\n') && (*pChr != '\r') && (*pChr != '\0') && + (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1)); + pChr++); + + Max = min(static_cast(pChr - pFile->m_pReadPtr), MaxLen); + memcpy(pLine, pFile->m_pReadPtr, Max); + MaxLen -= Max; + pLine += Max; + + if (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1)) + { + if (*pChr != '\0') + { + if ((pChr[0] == '\r') && (pChr[1] == '\n')) + pChr += 2; + else + pChr += 1; + } + + if ((pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf))) && + (*pChr == '\0')) + pChr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf); + + *pLine = '\0'; + + /* setting MaxLen to -1 indicates terminating read loop */ + MaxLen = -1; + } + + pFile->m_pReadPtr = pChr; + } + while (MaxLen > 0); + + return true; +} + +static bool putLine(osl_TFile* pFile, const char *pszLine) +{ + unsigned int Len = strlen(pszLine); + + if ( pFile == nullptr || pFile->m_Handle == INVALID_HANDLE_VALUE ) + { + return false; + } + + if ( pFile->m_pWriteBuf == nullptr ) + { + pFile->m_pWriteBuf = static_cast(malloc(Len+3)); + pFile->m_nWriteBufLen = Len+3; + pFile->m_nWriteBufFree = Len+3; + } + else + { + if ( pFile->m_nWriteBufFree <= Len + 3 ) + { + char* pTmp; + + pTmp=static_cast(realloc(pFile->m_pWriteBuf,( ( pFile->m_nWriteBufLen + Len ) * 2) )); + if ( pTmp == nullptr ) + { + return false; + } + pFile->m_pWriteBuf = pTmp; + pFile->m_nWriteBufFree = pFile->m_nWriteBufFree + pFile->m_nWriteBufLen + ( 2 * Len ); + pFile->m_nWriteBufLen = ( pFile->m_nWriteBufLen + Len ) * 2; + memset( (pFile->m_pWriteBuf) + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ), 0, pFile->m_nWriteBufFree); + } + } + + memcpy(pFile->m_pWriteBuf + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ),pszLine,Len+1); + + pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len]='\r'; + pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 1]='\n'; + pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 2]='\0'; + + pFile->m_nWriteBufFree-=Len+2; + + return true; +} + +/* platform specific end */ + +static const char* stripBlanks(const char* String, sal_uInt32* pLen) +{ + if ( (pLen != nullptr) && ( *pLen != 0 ) ) + { + while ((String[*pLen - 1] == ' ') || (String[*pLen - 1] == '\t')) + (*pLen)--; + + while ((*String == ' ') || (*String == '\t')) + { + String++; + (*pLen)--; + } + } + else + while ((*String == ' ') || (*String == '\t')) + String++; + + return String; +} + +static const char* addLine(osl_TProfileImpl* pProfile, const char* Line) +{ + if (pProfile->m_NoLines >= pProfile->m_MaxLines) + { + if (pProfile->m_Lines == nullptr) + { + pProfile->m_MaxLines = LINES_INI; + pProfile->m_Lines = static_cast(calloc(pProfile->m_MaxLines, sizeof(char *))); + } + else + { + unsigned int index=0; + unsigned int oldmax=pProfile->m_MaxLines; + + pProfile->m_MaxLines += LINES_ADD; + if (auto p = static_cast(realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(char *)))) + { + pProfile->m_Lines = p; + + for ( index = oldmax ; index < pProfile->m_MaxLines ; ++index ) + { + pProfile->m_Lines[index]=nullptr; + } + } + else + { + free(pProfile->m_Lines); + pProfile->m_Lines = nullptr; + } + } + + if (pProfile->m_Lines == nullptr) + { + pProfile->m_NoLines = 0; + pProfile->m_MaxLines = 0; + return nullptr; + } + + } + + if ( pProfile->m_Lines != nullptr && pProfile->m_Lines[pProfile->m_NoLines] != nullptr ) + { + free(pProfile->m_Lines[pProfile->m_NoLines]); + } + pProfile->m_Lines[pProfile->m_NoLines++] = strdup(Line); + + return pProfile->m_Lines[pProfile->m_NoLines - 1]; +} + +static const char* insertLine(osl_TProfileImpl* pProfile, const char* Line, sal_uInt32 LineNo) +{ + if (pProfile->m_NoLines >= pProfile->m_MaxLines) + { + if (pProfile->m_Lines == nullptr) + { + pProfile->m_MaxLines = LINES_INI; + pProfile->m_Lines = static_cast(calloc(pProfile->m_MaxLines, sizeof(char *))); + } + else + { + pProfile->m_MaxLines += LINES_ADD; + if (auto p = static_cast( + realloc(pProfile->m_Lines, pProfile->m_MaxLines * sizeof(char*)))) + { + pProfile->m_Lines = p; + + memset(&pProfile->m_Lines[pProfile->m_NoLines], 0, + (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(char*)); + } + else + { + free(pProfile->m_Lines); + pProfile->m_Lines = nullptr; + } + } + + if (pProfile->m_Lines == nullptr) + { + pProfile->m_NoLines = 0; + pProfile->m_MaxLines = 0; + return nullptr; + } + } + + LineNo = std::min(LineNo, pProfile->m_NoLines); + + if (LineNo < pProfile->m_NoLines) + { + sal_uInt32 i, n; + + memmove(&pProfile->m_Lines[LineNo + 1], &pProfile->m_Lines[LineNo], + (pProfile->m_NoLines - LineNo) * sizeof(char *)); + + /* adjust line references */ + for (i = 0; i < pProfile->m_NoSections; i++) + { + osl_TProfileSection* pSec = &pProfile->m_Sections[i]; + + if (pSec->m_Line >= LineNo) + pSec->m_Line++; + + for (n = 0; n < pSec->m_NoEntries; n++) + if (pSec->m_Entries[n].m_Line >= LineNo) + pSec->m_Entries[n].m_Line++; + } + } + + pProfile->m_NoLines++; + + pProfile->m_Lines[LineNo] = strdup(Line); + + return pProfile->m_Lines[LineNo]; +} + +static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo) +{ + if (LineNo < pProfile->m_NoLines) + { + free(pProfile->m_Lines[LineNo]); + pProfile->m_Lines[LineNo]=nullptr; + if (pProfile->m_NoLines - LineNo > 1) + { + sal_uInt32 i, n; + + memmove(&pProfile->m_Lines[LineNo], &pProfile->m_Lines[LineNo + 1], + (pProfile->m_NoLines - LineNo - 1) * sizeof(char *)); + + memset(&pProfile->m_Lines[pProfile->m_NoLines - 1], + 0, + (pProfile->m_MaxLines - pProfile->m_NoLines) * sizeof(char*)); + + /* adjust line references */ + for (i = 0; i < pProfile->m_NoSections; i++) + { + osl_TProfileSection* pSec = &pProfile->m_Sections[i]; + + if (pSec->m_Line > LineNo) + pSec->m_Line--; + + for (n = 0; n < pSec->m_NoEntries; n++) + if (pSec->m_Entries[n].m_Line > LineNo) + pSec->m_Entries[n].m_Line--; + } + } + else + { + pProfile->m_Lines[LineNo] = nullptr; + } + + pProfile->m_NoLines--; + } + + return; +} + +static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection, + sal_uInt32 NoEntry, sal_uInt32 Line, + const char* Entry, sal_uInt32 Len) +{ + Entry = stripBlanks(Entry, &Len); + pSection->m_Entries[NoEntry].m_Line = Line; + pSection->m_Entries[NoEntry].m_Offset = Entry - pProfile->m_Lines[Line]; + pSection->m_Entries[NoEntry].m_Len = Len; + + return; +} + +static bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection, + int Line, const char* Entry, sal_uInt32 Len) +{ + if (pSection != nullptr) + { + if (pSection->m_NoEntries >= pSection->m_MaxEntries) + { + if (pSection->m_Entries == nullptr) + { + pSection->m_MaxEntries = ENTRIES_INI; + pSection->m_Entries = static_cast(malloc( + pSection->m_MaxEntries * sizeof(osl_TProfileEntry))); + } + else + { + pSection->m_MaxEntries += ENTRIES_ADD; + if (auto p = static_cast(realloc( + pSection->m_Entries, pSection->m_MaxEntries * sizeof(osl_TProfileEntry)))) + pSection->m_Entries = p; + else + { + free(pSection->m_Entries); + pSection->m_Entries = nullptr; + } + } + + if (pSection->m_Entries == nullptr) + { + pSection->m_NoEntries = 0; + pSection->m_MaxEntries = 0; + return false; + } + } + + pSection->m_NoEntries++; + + Entry = stripBlanks(Entry, &Len); + setEntry(pProfile, pSection, pSection->m_NoEntries - 1, Line, + Entry, Len); + + return true; + } + + return false; +} + +static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry) +{ + if (NoEntry < pSection->m_NoEntries) + { + if (pSection->m_NoEntries - NoEntry > 1) + { + memmove(&pSection->m_Entries[NoEntry], + &pSection->m_Entries[NoEntry + 1], + (pSection->m_NoEntries - NoEntry - 1) * sizeof(osl_TProfileEntry)); + pSection->m_Entries[pSection->m_NoEntries - 1].m_Line=0; + pSection->m_Entries[pSection->m_NoEntries - 1].m_Offset=0; + pSection->m_Entries[pSection->m_NoEntries - 1].m_Len=0; + } + + pSection->m_NoEntries--; + } + + return; +} + +static bool addSection(osl_TProfileImpl* pProfile, int Line, const char* Section, sal_uInt32 Len) +{ + if (pProfile->m_NoSections >= pProfile->m_MaxSections) + { + if (pProfile->m_Sections == nullptr) + { + pProfile->m_MaxSections = SECTIONS_INI; + pProfile->m_Sections = static_cast(calloc(pProfile->m_MaxSections, sizeof(osl_TProfileSection))); + } + else + { + unsigned int index=0; + unsigned int oldmax=pProfile->m_MaxSections; + + pProfile->m_MaxSections += SECTIONS_ADD; + if (auto p = static_cast(realloc( + pProfile->m_Sections, pProfile->m_MaxSections * sizeof(osl_TProfileSection)))) + { + pProfile->m_Sections = p; + for ( index = oldmax ; index < pProfile->m_MaxSections ; ++index ) + { + pProfile->m_Sections[index].m_Entries=nullptr; + } + } + else + { + free(pProfile->m_Sections); + pProfile->m_Sections = nullptr; + } + } + + if (pProfile->m_Sections == nullptr) + { + pProfile->m_NoSections = 0; + pProfile->m_MaxSections = 0; + return false; + } + } + + pProfile->m_NoSections++; + + if ( pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries != nullptr ) + { + free(pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries); + } + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_NoEntries = 0; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_MaxEntries = 0; + + Section = stripBlanks(Section, &Len); + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Line = Line; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Offset = Section - pProfile->m_Lines[Line]; + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Len = Len; + + return true; +} + +static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection) +{ + sal_uInt32 Section; + + if ((Section = pSection - pProfile->m_Sections) < pProfile->m_NoSections) + { + free (pSection->m_Entries); + pSection->m_Entries=nullptr; + if (pProfile->m_NoSections - Section > 1) + { + memmove(&pProfile->m_Sections[Section], &pProfile->m_Sections[Section + 1], + (pProfile->m_NoSections - Section - 1) * sizeof(osl_TProfileSection)); + + memset(&pProfile->m_Sections[pProfile->m_NoSections - 1], + 0, + (pProfile->m_MaxSections - pProfile->m_NoSections) * sizeof(osl_TProfileSection)); + pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = nullptr; + } + else + { + pSection->m_Entries = nullptr; + } + + pProfile->m_NoSections--; + } + + return; +} + +static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const char* Section, + const char* Entry, sal_uInt32 *pNoEntry) +{ + static sal_uInt32 Sect = 0; + sal_uInt32 i, n; + sal_uInt32 Len; + osl_TProfileSection* pSec = nullptr; + + Len = strlen(Section); + Section = stripBlanks(Section, &Len); + + n = Sect; + + for (i = 0; i < pProfile->m_NoSections; i++) + { + n %= pProfile->m_NoSections; + pSec = &pProfile->m_Sections[n]; + if ((Len == pSec->m_Len) && + (strnicmp(Section, &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], pSec->m_Len) + == 0)) + break; + n++; + } + + Sect = n; + + if (i < pProfile->m_NoSections) + { + Len = strlen(Entry); + Entry = stripBlanks(Entry, &Len); + + *pNoEntry = pSec->m_NoEntries; + + for (i = 0; i < pSec->m_NoEntries; i++) + { + const char* pStr = &pProfile->m_Lines[pSec->m_Entries[i].m_Line] + [pSec->m_Entries[i].m_Offset]; + if ((Len == pSec->m_Entries[i].m_Len) && + (strnicmp(Entry, pStr, pSec->m_Entries[i].m_Len) + == 0)) + { + *pNoEntry = i; + break; + } + } + } + else + pSec = nullptr; + + return pSec; +} + +static bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile) +{ + sal_uInt32 i; + char const * pStr; + char const * pChar; + char Line[4096]; + + pProfile->m_NoLines = 0; + pProfile->m_NoSections = 0; + + OSL_VERIFY(rewindFile(pFile, false)); + + while (getLine(pFile, Line, sizeof(Line))) + { + if (! addLine(pProfile, Line)) + return false; + } + + for (i = 0; i < pProfile->m_NoLines; i++) + { + pStr = stripBlanks(pProfile->m_Lines[i], nullptr); + + if ((*pStr == '\0') || (*pStr == ';')) + continue; + + if ((*pStr != '[') || ((pChar = strrchr(pStr, ']')) == nullptr) || + ((pChar - pStr) <= 2)) + { + /* insert entry */ + + if (pProfile->m_NoSections < 1) + continue; + + if ((pChar = strchr(pStr, '=')) == nullptr) + pChar = pStr + strlen(pStr); + + if (! addEntry(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1], + i, pStr, pChar - pStr)) + return false; + } + else + { + /* new section */ + if (! addSection(pProfile, i, pStr + 1, pChar - pStr - 1)) + return false; + } + } + + return true; +} + +static bool storeProfile(osl_TProfileImpl* pProfile, bool bCleanup) +{ + if (pProfile->m_Lines != nullptr) + { + if (pProfile->m_Flags & FLG_MODIFIED) + { + sal_uInt32 i; + + osl_TFile* pTmpFile = osl_openTmpProfileImpl(pProfile); + + if ( pTmpFile == nullptr ) + { + return false; + } + + OSL_VERIFY(rewindFile(pTmpFile, true)); + + for (i = 0; i < pProfile->m_NoLines; i++) + { + OSL_VERIFY(putLine(pTmpFile, pProfile->m_Lines[i])); + } + + if ( ! writeProfileImpl(pTmpFile) ) + { + if ( pTmpFile->m_pWriteBuf != nullptr ) + { + free(pTmpFile->m_pWriteBuf); + } + + pTmpFile->m_pWriteBuf=nullptr; + pTmpFile->m_nWriteBufLen=0; + pTmpFile->m_nWriteBufFree=0; + + closeFileImpl(pTmpFile); + + return false; + } + + pProfile->m_Flags &= ~FLG_MODIFIED; + + closeFileImpl(pProfile->m_pFile); + closeFileImpl(pTmpFile); + + osl_ProfileSwapProfileNames(pProfile); + + pProfile->m_pFile = openFileImpl(pProfile->m_strFileName,pProfile->m_Flags); + + } + + if (bCleanup) + { + while (pProfile->m_NoLines > 0) + removeLine(pProfile, pProfile->m_NoLines - 1); + + free(pProfile->m_Lines); + pProfile->m_Lines = nullptr; + pProfile->m_MaxLines = 0; + + while (pProfile->m_NoSections > 0) + removeSection(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1]); + + free(pProfile->m_Sections); + pProfile->m_Sections = nullptr; + pProfile->m_MaxSections = 0; + } + } + + return true; +} + +static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl* pProfile) +{ + osl_TFile* pFile=nullptr; + rtl_uString* ustrExtension=nullptr; + rtl_uString* ustrTmpName=nullptr; + oslProfileOption PFlags=0; + + rtl_uString_newFromAscii(&ustrExtension,"tmp"); + + /* generate tmp profilename */ + ustrTmpName=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension); + rtl_uString_release(ustrExtension); + + if (ustrTmpName == nullptr) + return nullptr; + + if (!(pProfile->m_Flags & osl_Profile_READLOCK)) + PFlags |= osl_Profile_WRITELOCK; + + /* open this file */ + pFile = openFileImpl(ustrTmpName,pProfile->m_Flags | PFlags); + + /* return new pFile */ + return pFile; +} + +static bool osl_ProfileSwapProfileNames(osl_TProfileImpl* pProfile) +{ + rtl_uString* ustrBakFile=nullptr; + rtl_uString* ustrTmpFile=nullptr; + rtl_uString* ustrIniFile=nullptr; + rtl_uString* ustrExtension=nullptr; + + rtl_uString_newFromAscii(&ustrExtension,"bak"); + + ustrBakFile=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension); + rtl_uString_release(ustrExtension); + ustrExtension=nullptr; + + rtl_uString_newFromAscii(&ustrExtension,"ini"); + + ustrIniFile=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension); + rtl_uString_release(ustrExtension); + ustrExtension=nullptr; + + rtl_uString_newFromAscii(&ustrExtension,"tmp"); + + ustrTmpFile=osl_ProfileGenerateExtension(pProfile->m_strFileName,ustrExtension); + rtl_uString_release(ustrExtension); + ustrExtension=nullptr; + + /* unlink bak */ + DeleteFileW( o3tl::toW(rtl_uString_getStr( ustrBakFile )) ); + + /* rename ini bak */ + MoveFileExW( o3tl::toW(rtl_uString_getStr( ustrIniFile )), o3tl::toW(rtl_uString_getStr( ustrBakFile )), MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH ); + + /* rename tmp ini */ + MoveFileExW( o3tl::toW(rtl_uString_getStr( ustrTmpFile )), o3tl::toW(rtl_uString_getStr( ustrIniFile )), MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH ); + + return false; +} + +static rtl_uString* osl_ProfileGenerateExtension(rtl_uString* ustrFileName, rtl_uString* ustrExtension) +{ + rtl_uString* ustrNewFileName = nullptr; + rtl_uString* ustrOldExtension = nullptr; + + sal_Unicode* pFileNameBuf = rtl_uString_getStr(ustrFileName); + + rtl_uString_newFromAscii(&ustrOldExtension, "."); + + sal_Unicode* pExtensionBuf = rtl_uString_getStr(ustrOldExtension); + + sal_Int32 nIndex = rtl_ustr_lastIndexOfChar(pFileNameBuf, *pExtensionBuf); + + rtl_uString_newReplaceStrAt(&ustrNewFileName, + ustrFileName, + nIndex+1, + 3, + ustrExtension); + + return ustrNewFileName; +} + +static osl_TProfileImpl* acquireProfile(oslProfile Profile, bool bWriteable) +{ + osl_TProfileImpl* pProfile = static_cast(Profile); + oslProfileOption PFlags=0; + + if ( bWriteable ) + { + PFlags = osl_Profile_DEFAULT | osl_Profile_WRITELOCK; + } + else + { + PFlags = osl_Profile_DEFAULT; + } + + if (pProfile == nullptr) + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "AUTOOPEN MODE"); +#endif + + if ( ( pProfile = static_cast(osl_openProfile( nullptr, PFlags )) ) != nullptr ) + { + pProfile->m_Flags |= FLG_AUTOOPEN; + } + } + else + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "try to acquire"); +#endif + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + if (! (pProfile->m_Flags & (osl_Profile_READLOCK | + osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE))) + { + osl_TStamp Stamp; +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "DEFAULT MODE"); +#endif + pProfile->m_pFile = openFileImpl( + pProfile->m_strFileName, pProfile->m_Flags | PFlags); + if (!pProfile->m_pFile) + return nullptr; + + Stamp = getFileStamp(pProfile->m_pFile); + + if (memcmp(&Stamp, &(pProfile->m_Stamp), sizeof(osl_TStamp))) + { + pProfile->m_Stamp = Stamp; + + loadProfile(pProfile->m_pFile, pProfile); + } + } + else + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "READ/WRITELOCK MODE"); +#endif + + /* A readlock file could not be written */ + if ((pProfile->m_Flags & osl_Profile_READLOCK) && bWriteable) + { + return nullptr; + } + } + } + } + + return pProfile; +} + +static bool releaseProfile(osl_TProfileImpl* pProfile) +{ + if ( pProfile == nullptr ) + { + return false; + } + + if (! (pProfile->m_Flags & osl_Profile_SYSTEM)) + { + if (pProfile->m_Flags & FLG_AUTOOPEN) + { + return osl_closeProfile(static_cast(pProfile)); + } + else + { +#ifdef DEBUG_OSL_PROFILE + SAL_INFO("sal.osl", "DEFAULT MODE"); +#endif + if (! (pProfile->m_Flags & (osl_Profile_READLOCK | + osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE))) + { + if (pProfile->m_Flags & FLG_MODIFIED) + storeProfile(pProfile, false); + + closeFileImpl(pProfile->m_pFile); + pProfile->m_pFile = nullptr; + } + } + } + + return true; +} + +static bool lookupProfile(const sal_Unicode *strPath, const sal_Unicode *strFile, sal_Unicode *strProfile) +{ + char *pChr; + char Buffer[4096] = ""; + char Product[132] = ""; + + ::osl::LongPathBuffer< sal_Unicode > aPath( MAX_LONG_PATH ); + aPath[0] = 0; + + if (*strPath == L'"') + { + int i = 0; + + strPath++; + + while ((strPath[i] != L'"') && (strPath[i] != L'\0')) + i++; + + WideCharToMultiByte(CP_ACP,0, o3tl::toW(strPath), i, Product, sizeof(Product), nullptr, nullptr); + Product[i] = '\0'; + strPath += i; + + if (*strPath == L'"') + strPath++; + + if ( (*strPath == L'/') || (*strPath == L'\\') ) + { + strPath++; + } + } + + else + { + /* if we have not product identification, do a special handling for soffice.ini */ + if (rtl_ustr_ascii_compare(strFile, SVERSION_PROFILE) == 0) + { + rtl_uString * strSVProfile = nullptr; + rtl_uString * strSVFallback = nullptr; + rtl_uString * strSVLocation = nullptr; + rtl_uString * strSVName = nullptr; + ::osl::LongPathBuffer< char > aDir( MAX_LONG_PATH ); + oslProfile hProfile; + + rtl_uString_newFromAscii(&strSVFallback, SVERSION_FALLBACK); + rtl_uString_newFromAscii(&strSVLocation, SVERSION_LOCATION); + rtl_uString_newFromAscii(&strSVName, SVERSION_NAME); + + /* open sversion.ini in the system directory, and try to locate the entry + with the highest version for StarOffice */ + if (osl_getProfileName( strSVFallback, strSVName, &strSVProfile)) + { + hProfile = osl_openProfile(strSVProfile, osl_Profile_READLOCK); + if (hProfile) + { + osl_getProfileSectionEntries( + hProfile, SVERSION_SECTION, Buffer, sizeof(Buffer)); + + for (pChr = Buffer; *pChr != '\0'; pChr += strlen(pChr) + 1) + { + if ((strnicmp( + pChr, SVERSION_SOFFICE, + sizeof(SVERSION_SOFFICE) - 1) + == 0) + && (stricmp(Product, pChr) < 0)) + { + osl_readProfileString( + hProfile, SVERSION_SECTION, pChr, aDir, + aDir.getBufSizeInSymbols(), ""); + + /* check for existence of path */ + if (access(aDir, 0) >= 0) + strcpy(Product, pChr); + } + } + + osl_closeProfile(hProfile); + } + rtl_uString_release(strSVProfile); + strSVProfile = nullptr; + } + + /* open sversion.ini in the users directory, and try to locate the entry + with the highest version for StarOffice */ + if ( osl_getProfileName(strSVLocation, strSVName, &strSVProfile) ) + { + hProfile = osl_openProfile(strSVProfile, osl_Profile_READLOCK); + if (hProfile) + { + osl_getProfileSectionEntries( + hProfile, SVERSION_SECTION, Buffer, sizeof(Buffer)); + + for (pChr = Buffer; *pChr != '\0'; pChr += strlen(pChr) + 1) + { + if ((strnicmp( + pChr, SVERSION_SOFFICE, + sizeof(SVERSION_SOFFICE) - 1) + == 0) + && (stricmp(Product, pChr) < 0)) + { + osl_readProfileString( + hProfile, SVERSION_SECTION, pChr, aDir, + aDir.getBufSizeInSymbols(), ""); + + /* check for existence of path */ + if (access(aDir, 0) >= 0) + strcpy(Product, pChr); + } + } + + osl_closeProfile(hProfile); + } + rtl_uString_release(strSVProfile); + } + + rtl_uString_release(strSVFallback); + rtl_uString_release(strSVLocation); + rtl_uString_release(strSVName); + + /* remove any trailing build number */ + if ((pChr = strrchr(Product, '/')) != nullptr) + *pChr = '\0'; + } + } + + rtl_uString * strExecutable = nullptr; + rtl_uString * strTmp = nullptr; + sal_Int32 nPos; + + /* try to find the file in the directory of the executable */ + if (osl_getExecutableFile(&strTmp) != osl_Process_E_None) + return false; + + /* convert to native path */ + if (osl_getSystemPathFromFileURL(strTmp, &strExecutable) != osl_File_E_None) + { + rtl_uString_release(strTmp); + return false; + } + + rtl_uString_release(strTmp); + + DWORD dwPathLen = 0; + + /* separate path from filename */ + if ((nPos = rtl_ustr_lastIndexOfChar(strExecutable->buffer, L'\\')) == -1) + { + if ((nPos = rtl_ustr_lastIndexOfChar(strExecutable->buffer, L':')) == -1) + { + rtl_uString_release(strExecutable); + return false; + } + else + { + copy_ustr_n(aPath, strExecutable->buffer, nPos); + aPath[nPos] = 0; + dwPathLen = nPos; + } + } + else + { + copy_ustr_n(aPath, strExecutable->buffer, nPos); + dwPathLen = nPos; + aPath[dwPathLen] = 0; + } + + /* if we have no product identification use the executable file name */ + if (*Product == 0) + { + WideCharToMultiByte(CP_ACP,0, o3tl::toW(strExecutable->buffer + nPos + 1), -1, Product, sizeof(Product), nullptr, nullptr); + + /* remove extension */ + if ((pChr = strrchr(Product, '.')) != nullptr) + *pChr = '\0'; + } + + rtl_uString_release(strExecutable); + + /* remember last subdir */ + nPos = rtl_ustr_lastIndexOfChar(aPath, L'\\'); + + copy_ustr_n(aPath + dwPathLen++, L"\\", 2); + + if (*strPath) + { + copy_ustr_n(aPath + dwPathLen, strPath, rtl_ustr_getLength(strPath)+1); + dwPathLen += rtl_ustr_getLength(strPath); + } + + { + ::osl::LongPathBuffer< char > aTmpPath( MAX_LONG_PATH ); + + WideCharToMultiByte(CP_ACP,0, o3tl::toW(aPath), -1, aTmpPath, aTmpPath.getBufSizeInSymbols(), nullptr, nullptr); + + /* if file not exists, remove any specified subdirectories + like "bin" or "program" */ + + if (((access(aTmpPath, 0) < 0) && (nPos != -1)) || (*strPath == 0)) + { + static const char *SubDirs[] = SVERSION_DIRS; + + unsigned i = 0; + char *pStr = aTmpPath + nPos; + + for (i = 0; i < SAL_N_ELEMENTS(SubDirs); i++) + if (strnicmp(pStr + 1, SubDirs[i], strlen(SubDirs[i])) == 0) + { + if ( *strPath == 0) + { + strcpy(pStr + 1,SVERSION_USER); + if ( access(aTmpPath, 0) < 0 ) + { + *(pStr+1)='\0'; + } + else + { + dwPathLen = nPos + MultiByteToWideChar( CP_ACP, 0, SVERSION_USER, -1, o3tl::toW(aPath + nPos + 1), aPath.getBufSizeInSymbols() - (nPos + 1) ); + } + } + else + { + copy_ustr_n(aPath + nPos + 1, strPath, rtl_ustr_getLength(strPath)+1); + dwPathLen = nPos + 1 + rtl_ustr_getLength(strPath); + } + + break; + } + } + } + + if ((aPath[dwPathLen - 1] != L'/') && (aPath[dwPathLen - 1] != L'\\')) + { + aPath[dwPathLen++] = L'\\'; + aPath[dwPathLen] = 0; + } + + copy_ustr_n(aPath + dwPathLen, strFile, rtl_ustr_getLength(strFile)+1); + + { + ::osl::LongPathBuffer< char > aTmpPath( MAX_LONG_PATH ); + + WideCharToMultiByte(CP_ACP,0, o3tl::toW(aPath), -1, aTmpPath, aTmpPath.getBufSizeInSymbols(), nullptr, nullptr); + + if ((access(aTmpPath, 0) < 0) && (Product[0] != '\0')) + { + rtl_uString * strSVFallback = nullptr; + rtl_uString * strSVProfile = nullptr; + rtl_uString * strSVLocation = nullptr; + rtl_uString * strSVName = nullptr; + oslProfile hProfile; + + rtl_uString_newFromAscii(&strSVFallback, SVERSION_FALLBACK); + rtl_uString_newFromAscii(&strSVLocation, SVERSION_LOCATION); + rtl_uString_newFromAscii(&strSVName, SVERSION_NAME); + + /* open sversion.ini in the system directory, and try to locate the entry + with the highest version for StarOffice */ + if (osl_getProfileName(strSVLocation, strSVName, &strSVProfile)) + { + hProfile = osl_openProfile( + strSVProfile, osl_Profile_READLOCK); + if (hProfile) + { + osl_readProfileString( + hProfile, SVERSION_SECTION, Product, Buffer, + sizeof(Buffer), ""); + osl_closeProfile(hProfile); + + /* if not found, try the fallback */ + if (Buffer[0] == '\0') + { + if (osl_getProfileName( + strSVFallback, strSVName, &strSVProfile)) + { + hProfile = osl_openProfile( + strSVProfile, osl_Profile_READLOCK); + if (hProfile) + { + osl_readProfileString( + hProfile, SVERSION_SECTION, Product, + Buffer, sizeof(Buffer), ""); + } + } + + osl_closeProfile(hProfile); + } + + if (Buffer[0] != '\0') + { + dwPathLen = MultiByteToWideChar( + CP_ACP, 0, Buffer, -1, o3tl::toW(aPath), aPath.getBufSizeInSymbols() ); + dwPathLen -=1; + + /* build full path */ + if ((aPath[dwPathLen - 1] != L'/') + && (aPath[dwPathLen - 1] != L'\\')) + { + copy_ustr_n(aPath + dwPathLen++, L"\\", 2); + } + + if (*strPath) + { + copy_ustr_n(aPath + dwPathLen, strPath, rtl_ustr_getLength(strPath)+1); + dwPathLen += rtl_ustr_getLength(strPath); + } + else + { + ::osl::LongPathBuffer< char > aTmpPath2( MAX_LONG_PATH ); + int n; + + if ((n = WideCharToMultiByte( + CP_ACP,0, o3tl::toW(aPath), -1, aTmpPath2, + aTmpPath2.getBufSizeInSymbols(), nullptr, nullptr)) + > 0) + { + strcpy(aTmpPath2 + n, SVERSION_USER); + if (access(aTmpPath2, 0) >= 0) + { + dwPathLen += MultiByteToWideChar( + CP_ACP, 0, SVERSION_USER, -1, + o3tl::toW(aPath + dwPathLen), + aPath.getBufSizeInSymbols() - dwPathLen ); + } + } + } + } + } + + rtl_uString_release(strSVProfile); + } + + rtl_uString_release(strSVFallback); + rtl_uString_release(strSVLocation); + rtl_uString_release(strSVName); + } + } + + aPath[dwPathLen] = 0; + + /* copy filename */ + copy_ustr_n(strProfile, aPath, dwPathLen+1); + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/random.cxx b/sal/osl/w32/random.cxx new file mode 100644 index 000000000..a2c364da2 --- /dev/null +++ b/sal/osl/w32/random.cxx @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#define _CRT_RAND_S + +#include +#include + +#include + +int osl_get_system_random_data(char* buffer, size_t desired_len) +{ + unsigned int val; + + /* if unaligned fill to alignment */ + if (reinterpret_cast(buffer) & 3) + { + size_t len = 4 - (reinterpret_cast(buffer) & 3); + + if (len > desired_len) + { + len = desired_len; + } + if (rand_s(&val)) + { + return 0; + } + memcpy(buffer, &val, len); + buffer += len; + desired_len -= len; + } + /* fill directly into the buffer as long as we can */ + while (desired_len >= 4) + { + if (rand_s(reinterpret_cast(buffer))) + { + return 0; + } + else + { + buffer += 4; + desired_len -= 4; + } + } + /* deal with the partial int reminder to fill */ + if (desired_len) + { + if (rand_s(&val)) + { + return 0; + } + memcpy(buffer, &val, desired_len); + } + return 1; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/salinit.cxx b/sal/osl/w32/salinit.cxx new file mode 100644 index 000000000..c0b917127 --- /dev/null +++ b/sal/osl/w32/salinit.cxx @@ -0,0 +1,83 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "system.h" +#include "time.hxx" + +#include +#include +#include + +extern "C" { + +// Prototypes for initialization and deinitialization of SAL library + +void sal_detail_initialize(int argc, char ** argv) +{ + if (argc == sal::detail::InitializeSoffice) + { + return; + } + sal_initGlobalTimer(); +#ifndef _WIN64 + SetProcessDEPPolicy(PROCESS_DEP_ENABLE); +#endif + SetDllDirectoryW(L""); // remove the current directory from the default DLL search order + SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE | BASE_SEARCH_PATH_PERMANENT); + + WSADATA wsaData; + int error; + WORD wVersionRequested; + + wVersionRequested = MAKEWORD(1, 1); + + error = WSAStartup(wVersionRequested, &wsaData); + if ( 0 == error ) + { + WORD const wMajorVersionRequired = 1; + WORD const wMinorVersionRequired = 1; + + if ((LOBYTE(wsaData.wVersion) < wMajorVersionRequired) || + ((LOBYTE(wsaData.wVersion) == wMajorVersionRequired) && + (HIBYTE(wsaData.wVersion) < wMinorVersionRequired))) + { + // How to handle a very unlikely error ??? + } + } + else + { + // How to handle a very unlikely error ??? + } + + osl_setCommandArgs(argc, argv); +} + +void sal_detail_deinitialize() +{ + if ( SOCKET_ERROR == WSACleanup() ) + { + // We should never reach this point or we did wrong elsewhere + } +} + +} // extern "C" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/secimpl.hxx b/sal/osl/w32/secimpl.hxx new file mode 100644 index 000000000..7c952bb64 --- /dev/null +++ b/sal/osl/w32/secimpl.hxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_OSL_W32_SECIMPL_HXX +#define INCLUDED_SAL_OSL_W32_SECIMPL_HXX + +#include + +#include + +#define USER_BUFFER_SIZE 256 + +typedef struct +{ + HANDLE m_hProfile; + HANDLE m_hToken; + sal_Unicode m_User[USER_BUFFER_SIZE]; + /* extension by fileserver login */ + NETRESOURCEW* m_pNetResource; +} oslSecurityImpl; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/security.cxx b/sal/osl/w32/security.cxx new file mode 100644 index 000000000..21ed64a78 --- /dev/null +++ b/sal/osl/w32/security.cxx @@ -0,0 +1,662 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "secimpl.hxx" + +/* To get an impersonation token we need to create an impersonation + duplicate so every access token has to be created with duplicate + access rights */ + +#define TOKEN_DUP_QUERY (TOKEN_QUERY|TOKEN_DUPLICATE) + +static bool GetSpecialFolder(rtl_uString **strPath, REFKNOWNFOLDERID rFolder); +// We use LPCTSTR here, because we use it with SE_foo_NAME constants +// which are defined in winnt.h as UNICODE-dependent TEXT("PrivilegeName") +static bool Privilege(LPCTSTR pszPrivilege, bool bEnable); +static bool getUserNameImpl(oslSecurity Security, rtl_uString **strName, bool bIncludeDomain); + +oslSecurity SAL_CALL osl_getCurrentSecurity(void) +{ + oslSecurityImpl* pSecImpl = static_cast(malloc(sizeof(oslSecurityImpl))); + if (pSecImpl) + { + pSecImpl->m_pNetResource = nullptr; + pSecImpl->m_User[0] = '\0'; + pSecImpl->m_hToken = nullptr; + pSecImpl->m_hProfile = nullptr; + } + return pSecImpl; +} + +oslSecurityError SAL_CALL osl_loginUser( rtl_uString *strUserName, rtl_uString *strPasswd, oslSecurity *pSecurity ) +{ + oslSecurityError ret; + + sal_Unicode* strUser; + sal_Unicode* strDomain = o3tl::toU(_wcsdup(o3tl::toW(rtl_uString_getStr(strUserName)))); + HANDLE hUserToken; + LUID luid; + + if (nullptr != (strUser = o3tl::toU(wcschr(o3tl::toW(strDomain), L'/')))) + *strUser++ = L'\0'; + else + { + strUser = strDomain; + strDomain = nullptr; + } + + // this process must have the right: 'act as a part of operatingsystem' + OSL_ASSERT(LookupPrivilegeValue(nullptr, SE_TCB_NAME, &luid)); + (void) luid; + + if (LogonUserW(o3tl::toW(strUser), strDomain ? o3tl::toW(strDomain) : L"", o3tl::toW(rtl_uString_getStr(strPasswd)), + LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, + &hUserToken)) + { + oslSecurityImpl* pSecImpl = static_cast(malloc(sizeof(oslSecurityImpl))); + if (pSecImpl) + { + pSecImpl->m_pNetResource = nullptr; + pSecImpl->m_hToken = hUserToken; + pSecImpl->m_hProfile = nullptr; + wcscpy(o3tl::toW(pSecImpl->m_User), o3tl::toW(strUser)); + } + *pSecurity = pSecImpl; + ret = pSecImpl ? osl_Security_E_None : osl_Security_E_Unknown; + } + else + { + ret = osl_Security_E_UserUnknown; + } + + if (strDomain) + free(strDomain); + else + free(strUser); + + return ret; +} + +oslSecurityError SAL_CALL osl_loginUserOnFileServer(rtl_uString *strUserName, + rtl_uString *strPasswd, + rtl_uString *strFileServer, + oslSecurity *pSecurity) +{ + oslSecurityError ret; + DWORD err; + NETRESOURCEW netResource; + sal_Unicode* remoteName; + sal_Unicode* userName; + + remoteName = static_cast(malloc((rtl_uString_getLength(strFileServer) + rtl_uString_getLength(strUserName) + 4) * sizeof(sal_Unicode))); + userName = static_cast(malloc((rtl_uString_getLength(strFileServer) + rtl_uString_getLength(strUserName) + 2) * sizeof(sal_Unicode))); + + wcscpy(o3tl::toW(remoteName), L"\\\\"); + wcscat(o3tl::toW(remoteName), o3tl::toW(rtl_uString_getStr(strFileServer))); + wcscat(o3tl::toW(remoteName), L"\\"); + wcscat(o3tl::toW(remoteName), o3tl::toW(rtl_uString_getStr(strUserName))); + + wcscpy(o3tl::toW(userName), o3tl::toW(rtl_uString_getStr(strFileServer))); + wcscat(o3tl::toW(userName), L"\\"); + wcscat(o3tl::toW(userName), o3tl::toW(rtl_uString_getStr(strUserName))); + + netResource.dwScope = RESOURCE_GLOBALNET; + netResource.dwType = RESOURCETYPE_DISK; + netResource.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE; + netResource.dwUsage = RESOURCEUSAGE_CONNECTABLE; + netResource.lpLocalName = nullptr; + netResource.lpRemoteName = o3tl::toW(remoteName); + netResource.lpComment = nullptr; + netResource.lpProvider = nullptr; + + err = WNetAddConnection2W(&netResource, o3tl::toW(rtl_uString_getStr(strPasswd)), o3tl::toW(userName), 0); + + if ((err == NO_ERROR) || (err == ERROR_ALREADY_ASSIGNED)) + { + oslSecurityImpl* pSecImpl = static_cast(malloc(sizeof(oslSecurityImpl))); + if (pSecImpl) + { + pSecImpl->m_pNetResource = static_cast(malloc(sizeof(NETRESOURCE))); + if (pSecImpl->m_pNetResource) + { + *pSecImpl->m_pNetResource = netResource; + pSecImpl->m_hToken = nullptr; + pSecImpl->m_hProfile = nullptr; + wcscpy(o3tl::toW(pSecImpl->m_User), o3tl::toW(rtl_uString_getStr(strUserName))); + } + else + { + free(pSecImpl); + pSecImpl = nullptr; + } + } + *pSecurity = pSecImpl; + + ret = pSecImpl ? osl_Security_E_None : osl_Security_E_Unknown; + } + else + { + ret = osl_Security_E_UserUnknown; + } + + free(remoteName); + free(userName); + + return ret; +} + +sal_Bool SAL_CALL osl_isAdministrator(oslSecurity Security) +{ + if (!Security) + return false; + + HANDLE hImpersonationToken = nullptr; + PSID psidAdministrators; + SID_IDENTIFIER_AUTHORITY siaNtAuthority = { SECURITY_NT_AUTHORITY }; + bool bSuccess = false; + + /* If Security contains an access token we need to duplicate it to an impersonation + access token. NULL works with CheckTokenMembership() as the current effective + impersonation token + */ + + if ( static_cast(Security)->m_hToken ) + { + if ( !DuplicateToken (static_cast(Security)->m_hToken, SecurityImpersonation, &hImpersonationToken) ) + return false; + } + + /* CheckTokenMembership() can be used on W2K and higher (NT4 no longer supported by OOo) + and also works on Vista to retrieve the effective user rights. Just checking for + membership of Administrators group is not enough on Vista this would require additional + complicated checks as described in KB article Q118626: http://support.microsoft.com/kb/118626/en-us + */ + + if (AllocateAndInitializeSid(&siaNtAuthority, + 2, + SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, + 0, 0, 0, 0, 0, 0, + &psidAdministrators)) + { + BOOL fSuccess = FALSE; + + if (CheckTokenMembership(hImpersonationToken, psidAdministrators, &fSuccess) && fSuccess) + bSuccess = true; + + FreeSid(psidAdministrators); + } + + if (hImpersonationToken) + CloseHandle(hImpersonationToken); + + return bSuccess; +} + +void SAL_CALL osl_freeSecurityHandle(oslSecurity Security) +{ + if (!Security) + return; + + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl->m_pNetResource != nullptr) + { + WNetCancelConnection2W(pSecImpl->m_pNetResource->lpRemoteName, 0, true); + + free(pSecImpl->m_pNetResource->lpRemoteName); + free(pSecImpl->m_pNetResource); + } + + if (pSecImpl->m_hToken) + CloseHandle(pSecImpl->m_hToken); + + if ( pSecImpl->m_hProfile ) + CloseHandle(pSecImpl->m_hProfile); + + free (pSecImpl); +} + +sal_Bool SAL_CALL osl_getUserIdent(oslSecurity Security, rtl_uString **strIdent) +{ + if (!Security) + return false; + + oslSecurityImpl *pSecImpl = static_cast(Security); + + HANDLE hAccessToken = pSecImpl->m_hToken; + + if (hAccessToken == nullptr) + OpenProcessToken(GetCurrentProcess(), TOKEN_DUP_QUERY, &hAccessToken); + + if (hAccessToken) + { + DWORD nInfoBuffer = 512; + UCHAR* pInfoBuffer = static_cast(malloc(nInfoBuffer)); + + while (!GetTokenInformation(hAccessToken, TokenUser, + pInfoBuffer, nInfoBuffer, &nInfoBuffer)) + { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + if (auto p = static_cast(realloc(pInfoBuffer, nInfoBuffer))) + pInfoBuffer = p; + else + { + free(pInfoBuffer); + pInfoBuffer = nullptr; + break; + } + } + else + { + free(pInfoBuffer); + pInfoBuffer = nullptr; + break; + } + } + + if (pSecImpl->m_hToken == nullptr) + CloseHandle(hAccessToken); + + if (pInfoBuffer) + { + PSID pSid = reinterpret_cast(pInfoBuffer)->User.Sid; + + LPWSTR pSidStr = nullptr; + bool bResult = ConvertSidToStringSidW(pSid, &pSidStr); + if (bResult) + { + rtl_uString_newFromStr(strIdent, o3tl::toU(pSidStr)); + LocalFree(pSidStr); + } + else + { + const DWORD dwError = GetLastError(); + SAL_WARN( + "sal.osl", + "ConvertSidToStringSidW failed. GetLastError returned: " << dwError); + } + + free(pInfoBuffer); + + return bResult; + } + } + else + { + DWORD needed = 0; + + WNetGetUserW(nullptr, nullptr, &needed); + if (needed < 16) + needed = 16; + + if (auto Ident = static_cast(malloc(needed*sizeof(sal_Unicode)))) + { + if (WNetGetUserW(nullptr, o3tl::toW(Ident), &needed) != NO_ERROR) + { + wcscpy(o3tl::toW(Ident), L"unknown"); + Ident[7] = L'\0'; + } + + rtl_uString_newFromStr( strIdent, Ident); + free(Ident); + return true; + } + } + return false; +} + +sal_Bool SAL_CALL osl_getUserName(oslSecurity Security, rtl_uString **strName) +{ + return getUserNameImpl(Security, strName, true); +} + +sal_Bool SAL_CALL osl_getShortUserName(oslSecurity Security, rtl_uString **strName) +{ + return getUserNameImpl(Security, strName, false); +} + +sal_Bool SAL_CALL osl_getHomeDir(oslSecurity Security, rtl_uString **pustrDirectory) +{ + if (!Security) + return false; + + rtl_uString *ustrSysDir = nullptr; + bool bSuccess = false; + + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl->m_pNetResource != nullptr) + { + rtl_uString_newFromStr( &ustrSysDir, o3tl::toU(pSecImpl->m_pNetResource->lpRemoteName)); + + bSuccess = osl_File_E_None == osl_getFileURLFromSystemPath( ustrSysDir, pustrDirectory ); + } + else + { + bSuccess = GetSpecialFolder(&ustrSysDir, FOLDERID_Documents) && + (osl_File_E_None == osl_getFileURLFromSystemPath(ustrSysDir, pustrDirectory)); + } + + if ( ustrSysDir ) + rtl_uString_release( ustrSysDir ); + + return bSuccess; +} + +sal_Bool SAL_CALL osl_getConfigDir(oslSecurity Security, rtl_uString **pustrDirectory) +{ + if (!Security) + return false; + + bool bSuccess = false; + oslSecurityImpl *pSecImpl = static_cast(Security); + + if (pSecImpl->m_pNetResource != nullptr) + { + rtl_uString *ustrSysDir = nullptr; + + rtl_uString_newFromStr( &ustrSysDir, o3tl::toU(pSecImpl->m_pNetResource->lpRemoteName)); + bSuccess = osl_File_E_None == osl_getFileURLFromSystemPath( ustrSysDir, pustrDirectory); + + if ( ustrSysDir ) + rtl_uString_release( ustrSysDir ); + } + else + { + if (pSecImpl->m_hToken) + { + /* not implemented */ + OSL_ASSERT(false); + } + else + { + rtl_uString *ustrFile = nullptr; + sal_Unicode sFile[_MAX_PATH]; + + if ( !GetSpecialFolder( &ustrFile, FOLDERID_RoamingAppData) ) + { + OSL_VERIFY(GetWindowsDirectoryW(o3tl::toW(sFile), _MAX_DIR) > 0); + + rtl_uString_newFromStr( &ustrFile, sFile); + } + + bSuccess = osl_File_E_None == osl_getFileURLFromSystemPath(ustrFile, pustrDirectory); + + if ( ustrFile ) + rtl_uString_release( ustrFile ); + } + } + + return bSuccess; +} + +sal_Bool SAL_CALL osl_loadUserProfile(oslSecurity Security) +{ + /* CreateProcessAsUser does not load the specified user's profile + into the HKEY_USERS registry key. This means that access to information + in the HKEY_CURRENT_USER registry key may not produce results consistent + with a normal interactive logon. + It is your responsibility to load the user's registry hive into HKEY_USERS + with the LoadUserProfile function before calling CreateProcessAsUser. + */ + + RegCloseKey(HKEY_CURRENT_USER); + + if (!Privilege(SE_RESTORE_NAME, true)) + return false; + + bool bOk = false; + HANDLE hAccessToken = static_cast(Security)->m_hToken; + + /* try to create user profile */ + if ( !hAccessToken ) + { + /* retrieve security handle if not done before e.g. osl_getCurrentSecurity() + */ + HANDLE hProcess = GetCurrentProcess(); + + if (hProcess != nullptr) + { + OpenProcessToken(hProcess, TOKEN_IMPERSONATE, &hAccessToken); + CloseHandle(hProcess); + } + } + + rtl_uString *buffer = nullptr; + PROFILEINFOW pi; + + getUserNameImpl(Security, &buffer, false); + + ZeroMemory(&pi, sizeof(pi)); + pi.dwSize = sizeof(pi); + pi.lpUserName = o3tl::toW(rtl_uString_getStr(buffer)); + pi.dwFlags = PI_NOUI; + + if (LoadUserProfileW(hAccessToken, &pi)) + { + UnloadUserProfile(hAccessToken, pi.hProfile); + + bOk = true; + } + + rtl_uString_release(buffer); + + if (hAccessToken && (hAccessToken != static_cast(Security)->m_hToken)) + CloseHandle(hAccessToken); + + return bOk; +} + +void SAL_CALL osl_unloadUserProfile(oslSecurity Security) +{ + if ( static_cast(Security)->m_hProfile == nullptr ) + return; + + HANDLE hAccessToken = static_cast(Security)->m_hToken; + + if ( !hAccessToken ) + { + /* retrieve security handle if not done before e.g. osl_getCurrentSecurity() + */ + HANDLE hProcess = GetCurrentProcess(); + + if (hProcess != nullptr) + { + OpenProcessToken(hProcess, TOKEN_IMPERSONATE, &hAccessToken); + CloseHandle(hProcess); + } + } + + /* unloading the user profile */ + UnloadUserProfile(hAccessToken, static_cast(Security)->m_hProfile); + + static_cast(Security)->m_hProfile = nullptr; + + if (hAccessToken && (hAccessToken != static_cast(Security)->m_hToken)) + CloseHandle(hAccessToken); +} + +static bool GetSpecialFolder(rtl_uString **strPath, REFKNOWNFOLDERID rFolder) +{ + bool bRet = false; + PWSTR PathW; + if (SUCCEEDED(SHGetKnownFolderPath(rFolder, KF_FLAG_CREATE, nullptr, &PathW))) + { + rtl_uString_newFromStr(strPath, o3tl::toU(PathW)); + CoTaskMemFree(PathW); + bRet = true; + } + + return bRet; +} + +// We use LPCTSTR here, because we use it with SE_foo_NAME constants +// which are defined in winnt.h as UNICODE-dependent TEXT("PrivilegeName") +static bool Privilege(LPCTSTR strPrivilege, bool bEnable) +{ + HANDLE hToken; + TOKEN_PRIVILEGES tp; + + // obtain the processes token + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_DUP_QUERY, &hToken)) + return false; + + // get the luid + if (!LookupPrivilegeValue(nullptr, strPrivilege, &tp.Privileges[0].Luid)) + return false; + + tp.PrivilegeCount = 1; + + if (bEnable) + tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + else + tp.Privileges[0].Attributes = 0; + + // enable or disable the privilege + if (!AdjustTokenPrivileges(hToken, FALSE, &tp, 0, nullptr, nullptr)) + return false; + + if (!CloseHandle(hToken)) + return false; + + return true; +} + +static bool getUserNameImpl(oslSecurity Security, rtl_uString **strName, bool bIncludeDomain) +{ + if (!Security) + return false; + + oslSecurityImpl *pSecImpl = static_cast(Security); + + HANDLE hAccessToken = pSecImpl->m_hToken; + + if (hAccessToken == nullptr) + OpenProcessToken(GetCurrentProcess(), TOKEN_DUP_QUERY, &hAccessToken); + + if (hAccessToken) + { + DWORD nInfoBuffer = 512; + UCHAR* pInfoBuffer = static_cast(malloc(nInfoBuffer)); + + while (!GetTokenInformation(hAccessToken, TokenUser, + pInfoBuffer, nInfoBuffer, &nInfoBuffer)) + { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + if (auto p = static_cast(realloc(pInfoBuffer, nInfoBuffer))) + pInfoBuffer = p; + else + { + free(pInfoBuffer); + pInfoBuffer = nullptr; + break; + } + } + else + { + free(pInfoBuffer); + pInfoBuffer = nullptr; + break; + } + } + + if (pSecImpl->m_hToken == nullptr) + CloseHandle(hAccessToken); + + if (pInfoBuffer) + { + sal_Unicode UserName[128]; + sal_Unicode DomainName[128]; + sal_Unicode Name[257]; + DWORD nUserName = SAL_N_ELEMENTS(UserName); + DWORD nDomainName = SAL_N_ELEMENTS(DomainName); + SID_NAME_USE sUse; + + if (LookupAccountSidW(nullptr, reinterpret_cast(pInfoBuffer)->User.Sid, + o3tl::toW(UserName), &nUserName, + o3tl::toW(DomainName), &nDomainName, &sUse)) + { + if (bIncludeDomain) + { + wcscpy(o3tl::toW(Name), o3tl::toW(DomainName)); + wcscat(o3tl::toW(Name), L"/"); + wcscat(o3tl::toW(Name), o3tl::toW(UserName)); + } + else + { + wcscpy(o3tl::toW(Name), o3tl::toW(UserName)); + } + + rtl_uString_newFromStr(strName, Name); + free(pInfoBuffer); + return true; + } + } + } + else + { + DWORD needed=0; + sal_Unicode *pNameW=nullptr; + + WNetGetUserW(nullptr, nullptr, &needed); + pNameW = static_cast(malloc (needed*sizeof(sal_Unicode))); + assert(pNameW); // Don't handle OOM conditions + + if (WNetGetUserW(nullptr, o3tl::toW(pNameW), &needed) == NO_ERROR) + { + rtl_uString_newFromStr( strName, pNameW); + + if (pNameW) + free(pNameW); + return true; + } + else if (pSecImpl->m_User[0] != '\0') + { + rtl_uString_newFromStr(strName, o3tl::toU(pSecImpl->m_pNetResource->lpRemoteName)); + + if (pNameW) + free(pNameW); + + return true; + } + + if (pNameW) + free(pNameW); + } + + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/signal.cxx b/sal/osl/w32/signal.cxx new file mode 100644 index 000000000..dcb05beae --- /dev/null +++ b/sal/osl/w32/signal.cxx @@ -0,0 +1,133 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include + +#include + +#include +#include +#include + +namespace +{ +long WINAPI signalHandlerFunction(LPEXCEPTION_POINTERS lpEP); + +LPTOP_LEVEL_EXCEPTION_FILTER pPreviousHandler = nullptr; +} + +bool onInitSignal() +{ + pPreviousHandler = SetUnhandledExceptionFilter(signalHandlerFunction); + + WerAddExcludedApplication(L"SOFFICE.EXE", FALSE); + + return true; +} + +bool onDeInitSignal() +{ + SetUnhandledExceptionFilter(pPreviousHandler); + + return false; +} + +namespace +{ +/* magic Microsoft C++ compiler exception constant */ +#define EXCEPTION_MSC_CPP_EXCEPTION 0xe06d7363 + +long WINAPI signalHandlerFunction(LPEXCEPTION_POINTERS lpEP) +{ +#if HAVE_FEATURE_BREAKPAD + // we should make sure to call the breakpad handler as + // first step when we hit a problem + if (pPreviousHandler) + pPreviousHandler(lpEP); +#endif + + static bool bNested = false; + + oslSignalInfo info; + + info.UserSignal = lpEP->ExceptionRecord->ExceptionCode; + info.UserData = nullptr; + + switch (lpEP->ExceptionRecord->ExceptionCode) + { + /* Transform unhandled exceptions into access violations. + Microsoft C++ compiler (add more for other compilers if necessary). + */ + case EXCEPTION_MSC_CPP_EXCEPTION: + case EXCEPTION_ACCESS_VIOLATION: + info.Signal = osl_Signal_AccessViolation; + break; + + case EXCEPTION_INT_DIVIDE_BY_ZERO: + info.Signal = osl_Signal_IntegerDivideByZero; + break; + + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + info.Signal = osl_Signal_FloatDivideByZero; + break; + + case EXCEPTION_BREAKPOINT: + info.Signal = osl_Signal_DebugBreak; + break; + + default: + info.Signal = osl_Signal_System; + break; + } + + oslSignalAction action; + + if (!bNested) + { + bNested = true; + action = callSignalHandler(&info); + } + else + action = osl_Signal_ActKillApp; + + switch (action) + { + case osl_Signal_ActCallNextHdl: + return EXCEPTION_CONTINUE_SEARCH; + + case osl_Signal_ActAbortApp: + return EXCEPTION_EXECUTE_HANDLER; + + case osl_Signal_ActKillApp: + SetErrorMode(SEM_NOGPFAULTERRORBOX); + exit(255); + break; + default: + break; + } + + return EXCEPTION_CONTINUE_EXECUTION; +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/socket.cxx b/sal/osl/w32/socket.cxx new file mode 100644 index 000000000..2548be0d5 --- /dev/null +++ b/sal/osl/w32/socket.cxx @@ -0,0 +1,1611 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "system.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sockimpl.hxx" + +/* + oslSocketAddr is a pointer to a Berkeley struct sockaddr. + I refrained from using sockaddr_in because of possible further + extensions of this socket-interface (IP-NG?). + The intention was to hide all Berkeley data-structures from + direct access past the osl-interface. + + The current implementation is internet (IP) centered. All + the constructor-functions (osl_create...) take parameters + that will probably make sense only in the IP-environment + (e.g. because of using the dotted-Addr-format). + + If the interface will be extended to host other protocol- + families, I expect no externally visible changes in the + existing functions. You'll probably need only new + constructor-functions who take the different Addr + formats into consideration (maybe a long dotted Addr + or whatever). +*/ + +/* + _Note_ that I rely on the fact that oslSocketAddr and struct sockaddr + are the same! I don't like it very much but see no other easy way to + conceal the struct sockaddr from the eyes of the user. +*/ + +#define OSL_INVALID_SOCKET INVALID_SOCKET /* WIN32 */ +#define OSL_SOCKET_ERROR SOCKET_ERROR /* WIN32 */ + +static DWORD FamilyMap[]= { + AF_INET, /* osl_Socket_FamilyInet */ + AF_IPX, /* osl_Socket_FamilyIpx */ + 0 /* osl_Socket_FamilyInvalid */ +}; + +static oslAddrFamily osl_AddrFamilyFromNative(DWORD nativeType) +{ + oslAddrFamily i= oslAddrFamily(0); + while(i != osl_Socket_FamilyInvalid) + { + if(FamilyMap[i] == nativeType) + return i; + i = static_cast( static_cast(i) + 1); + } + return i; +} + +#define FAMILY_FROM_NATIVE(y) osl_AddrFamilyFromNative(y) +#define FAMILY_TO_NATIVE(x) static_cast(FamilyMap[x]) + +static DWORD ProtocolMap[]= { + 0, /* osl_Socket_FamilyInet */ + NSPROTO_IPX, /* osl_Socket_FamilyIpx */ + NSPROTO_SPX, /* osl_Socket_ProtocolSpx */ + NSPROTO_SPXII, /* osl_Socket_ProtocolSpx_ii */ + 0 /* osl_Socket_ProtocolInvalid */ +}; + +#define PROTOCOL_TO_NATIVE(x) ProtocolMap[x] + +static DWORD TypeMap[]= { + SOCK_STREAM, /* osl_Socket_TypeStream */ + SOCK_DGRAM, /* osl_Socket_TypeDgram */ + SOCK_RAW, /* osl_Socket_TypeRaw */ + SOCK_RDM, /* osl_Socket_TypeRdm */ + SOCK_SEQPACKET, /* osl_Socket_TypeSeqPacket */ + 0 /* osl_Socket_TypeInvalid */ +}; + +static oslSocketType osl_SocketTypeFromNative(DWORD nativeType) +{ + oslSocketType i= oslSocketType(0); + while(i != osl_Socket_TypeInvalid) + { + if(TypeMap[i] == nativeType) + return i; + i = static_cast(static_cast(i)+1); + } + return i; +} + +#define TYPE_TO_NATIVE(x) TypeMap[x] +#define TYPE_FROM_NATIVE(y) osl_SocketTypeFromNative(y) + +static DWORD OptionMap[]= { + SO_DEBUG, /* osl_Socket_OptionDebug */ + SO_ACCEPTCONN, /* osl_Socket_OptionAcceptConn */ + SO_REUSEADDR, /* osl_Socket_OptionReuseAddr */ + SO_KEEPALIVE, /* osl_Socket_OptionKeepAlive */ + SO_DONTROUTE, /* osl_Socket_OptionDontRoute */ + SO_BROADCAST, /* osl_Socket_OptionBroadcast */ + SO_USELOOPBACK, /* osl_Socket_OptionUseLoopback */ + SO_LINGER, /* osl_Socket_OptionLinger */ + SO_OOBINLINE, /* osl_Socket_OptionOOBinLine */ + SO_SNDBUF, /* osl_Socket_OptionSndBuf */ + SO_RCVBUF, /* osl_Socket_OptionRcvBuf */ + SO_SNDLOWAT, /* osl_Socket_OptionSndLowat */ + SO_RCVLOWAT, /* osl_Socket_OptionRcvLowat */ + SO_SNDTIMEO, /* osl_Socket_OptionSndTimeo */ + SO_RCVTIMEO, /* osl_Socket_OptionRcvTimeo */ + SO_ERROR, /* osl_Socket_OptionError */ + SO_TYPE, /* osl_Socket_OptionType */ + TCP_NODELAY, /* osl_Socket_OptionTcpNoDelay */ + 0 /* osl_Socket_OptionInvalid */ +}; + +#define OPTION_TO_NATIVE(x) OptionMap[x] + +static DWORD OptionLevelMap[]= { + SOL_SOCKET, /* osl_Socket_LevelSocket */ + IPPROTO_TCP, /* osl_Socket_LevelTcp */ + 0 /* osl_invalid_SocketLevel */ +}; + +#define OPTION_LEVEL_TO_NATIVE(x) OptionLevelMap[x] + +static DWORD SocketMsgFlagMap[]= { + 0, /* osl_Socket_MsgNormal */ + MSG_OOB, /* osl_Socket_MsgOOB */ + MSG_PEEK, /* osl_Socket_MsgPeek */ + MSG_DONTROUTE, /* osl_Socket_MsgDontRoute */ + MSG_MAXIOVLEN /* osl_Socket_MsgMaxIOVLen */ +}; + +#define MSG_FLAG_TO_NATIVE(x) SocketMsgFlagMap[x] + +static DWORD SocketDirection[]= { + SD_RECEIVE, /* osl_Socket_DirRead */ + SD_SEND, /* osl_Socket_DirWrite */ + SD_BOTH /* osl_Socket_DirReadwrite */ +}; + +#define DIRECTION_TO_NATIVE(x) SocketDirection[x] + +static int SocketError[]= { + 0, /* no error */ + WSAENOTSOCK, /* Socket operation on non-socket */ + WSAEDESTADDRREQ, /* Destination address required */ + WSAEMSGSIZE, /* Message too long */ + WSAEPROTOTYPE, /* Protocol wrong type for socket */ + WSAENOPROTOOPT, /* Protocol not available */ + WSAEPROTONOSUPPORT, /* Protocol not supported */ + WSAESOCKTNOSUPPORT, /* Socket type not supported */ + WSAEOPNOTSUPP, /* Operation not supported on socket */ + WSAEPFNOSUPPORT, /* Protocol family not supported */ + WSAEAFNOSUPPORT, /* Address family not supported by protocol family */ + WSAEADDRINUSE, /* Address already in use */ + WSAEADDRNOTAVAIL, /* Can't assign requested address */ + WSAENETDOWN, /* Network is down */ + WSAENETUNREACH, /* Network is unreachable */ + WSAENETRESET, /* Network dropped connection because of reset */ + WSAECONNABORTED, /* Software caused connection abort */ + WSAECONNRESET, /* Connection reset by peer */ + WSAENOBUFS, /* No buffer space available */ + WSAEISCONN, /* Socket is already connected */ + WSAENOTCONN, /* Socket is not connected */ + WSAESHUTDOWN, /* Can't send after socket shutdown */ + WSAETOOMANYREFS, /* Too many references: can't splice */ + WSAETIMEDOUT, /* Connection timed out */ + WSAECONNREFUSED, /* Connection refused */ + WSAEHOSTDOWN, /* Host is down */ + WSAEHOSTUNREACH, /* No route to host */ + WSAEWOULDBLOCK, /* call would block on non-blocking socket */ + WSAEALREADY, /* operation already in progress */ + WSAEINPROGRESS /* operation now in progress */ +}; + +static oslSocketError osl_SocketErrorFromNative(int nativeType) +{ + oslSocketError i= oslSocketError(0); + + while(i != osl_Socket_E_InvalidError) + { + if(SocketError[i] == nativeType) + return i; + + i = static_cast( static_cast(i) + 1); + } + return i; +} + +#define ERROR_FROM_NATIVE(y) osl_SocketErrorFromNative(y) + +#if OSL_DEBUG_LEVEL > 0 +static sal_uInt32 g_nSocketAddr = 0; + +namespace { + +struct LeakWarning +{ + ~LeakWarning() + { + SAL_WARN_IF( g_nSocketAddr, "sal.osl", "sal_socket: " << g_nSocketAddr << " socket address instances leak" ); + } +}; + +} + +static LeakWarning socketWarning; +#endif + +static oslSocket createSocketImpl(SOCKET Socket) +{ + oslSocket pSockImpl = static_cast(rtl_allocateZeroMemory( sizeof(struct oslSocketImpl))); + pSockImpl->m_Socket = Socket; + pSockImpl->m_nRefCount = 1; + return pSockImpl; +} + +static void destroySocketImpl(oslSocketImpl *pImpl) +{ + if (pImpl) + { + free (pImpl); + } +} + +static oslSocketAddr createSocketAddr( ) +{ + oslSocketAddr pAddr = static_cast(rtl_allocateZeroMemory( sizeof( struct oslSocketAddrImpl ))); + pAddr->m_nRefCount = 1; +#if OSL_DEBUG_LEVEL > 0 + g_nSocketAddr ++; +#endif + return pAddr; +} + +static oslSocketAddr createSocketAddrWithFamily( + oslAddrFamily family, sal_Int32 port, sal_uInt32 nAddr ) +{ + OSL_ASSERT( family == osl_Socket_FamilyInet ); + + oslSocketAddr pAddr = createSocketAddr(); + switch( family ) + { + case osl_Socket_FamilyInet: + { + struct sockaddr_in* pInetAddr= reinterpret_cast(&pAddr->m_sockaddr); + + pInetAddr->sin_family = FAMILY_TO_NATIVE(osl_Socket_FamilyInet); + pInetAddr->sin_addr.s_addr = nAddr; + pInetAddr->sin_port = static_cast(port&0xffff); + break; + } + default: + pAddr->m_sockaddr.sa_family = FAMILY_TO_NATIVE(family); + } + return pAddr; +} + +static oslSocketAddr createSocketAddFromSystem( struct sockaddr *pSystemSockAddr ) +{ + oslSocketAddr pAddr = createSocketAddr(); + memcpy( &(pAddr->m_sockaddr), pSystemSockAddr, sizeof( sockaddr ) ); + return pAddr; +} + +static void destroySocketAddr( oslSocketAddr addr ) +{ +#if OSL_DEBUG_LEVEL > 0 + g_nSocketAddr --; +#endif + free( addr ); +} + +oslSocketAddr SAL_CALL osl_createEmptySocketAddr(oslAddrFamily Family) +{ + oslSocketAddr pAddr = nullptr; + + /* is it an internet-Addr? */ + if (Family == osl_Socket_FamilyInet) + pAddr = createSocketAddrWithFamily(Family, 0 , htonl(INADDR_ANY) ); + else + pAddr = createSocketAddrWithFamily( Family , 0 , 0 ); + + return pAddr; +} + +/** @deprecated, to be removed */ +oslSocketAddr SAL_CALL osl_copySocketAddr(oslSocketAddr Addr) +{ + oslSocketAddr pCopy = nullptr; + if (Addr) + { + pCopy = createSocketAddr(); + + if (pCopy) + memcpy(&(pCopy->m_sockaddr),&(Addr->m_sockaddr), sizeof(struct sockaddr)); + } + return pCopy; +} + +sal_Bool SAL_CALL osl_isEqualSocketAddr(oslSocketAddr Addr1, oslSocketAddr Addr2) +{ + OSL_ASSERT(Addr1); + OSL_ASSERT(Addr2); + struct sockaddr* pAddr1= &(Addr1->m_sockaddr); + struct sockaddr* pAddr2= &(Addr2->m_sockaddr); + + OSL_ASSERT(pAddr1); + OSL_ASSERT(pAddr2); + + if (pAddr1->sa_family == pAddr2->sa_family) + { + switch (pAddr1->sa_family) + { + case AF_INET: + { + struct sockaddr_in* pInetAddr1= reinterpret_cast(pAddr1); + struct sockaddr_in* pInetAddr2= reinterpret_cast(pAddr2); + + if ((pInetAddr1->sin_family == pInetAddr2->sin_family) && + (pInetAddr1->sin_addr.s_addr == pInetAddr2->sin_addr.s_addr) && + (pInetAddr1->sin_port == pInetAddr2->sin_port)) + return true; + [[fallthrough]]; + } + + default: + { + return (memcmp(pAddr1, pAddr2, sizeof(struct sockaddr)) == 0); + } + } + } + + return false; +} + +oslSocketAddr SAL_CALL osl_createInetBroadcastAddr ( + rtl_uString *strDottedAddr, + sal_Int32 Port) +{ + sal_uInt32 nAddr = OSL_INADDR_NONE; + + if (strDottedAddr && strDottedAddr->length) + { + IN_ADDR addr; + INT ret = InetPtonW(AF_INET, o3tl::toW(strDottedAddr->buffer), & addr); + if (1 == ret) + { + nAddr = addr.S_un.S_addr; + } + } + + if (nAddr != OSL_INADDR_NONE) + { + /* Limited broadcast */ + nAddr = ntohl(nAddr); + if (IN_CLASSA(nAddr)) + { + nAddr &= IN_CLASSA_NET; + nAddr |= IN_CLASSA_HOST; + } + else if (IN_CLASSB(nAddr)) + { + nAddr &= IN_CLASSB_NET; + nAddr |= IN_CLASSB_HOST; + } + else if (IN_CLASSC(nAddr)) + { + nAddr &= IN_CLASSC_NET; + nAddr |= IN_CLASSC_HOST; + } + else + { + /* No broadcast in class D */ + return nullptr; + } + nAddr = htonl(nAddr); + } + + oslSocketAddr pAddr = + createSocketAddrWithFamily( osl_Socket_FamilyInet, htons( static_cast(Port)), nAddr ); + return pAddr; +} + +oslSocketAddr SAL_CALL osl_createInetSocketAddr ( + rtl_uString *strDottedAddr, + sal_Int32 Port) +{ + sal_uInt32 Addr; + + IN_ADDR addr; + INT ret = InetPtonW(AF_INET, o3tl::toW(strDottedAddr->buffer), & addr); + Addr = ret == 1 ? addr.S_un.S_addr : OSL_INADDR_NONE; + + oslSocketAddr pAddr = nullptr; + if(Addr != OSL_INADDR_NONE) + { + pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons( static_cast(Port)), Addr ); + } + return pAddr; +} + +oslSocketResult SAL_CALL osl_setAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence *pByteSeq ) +{ + OSL_ASSERT( pAddr ); + OSL_ASSERT( pByteSeq ); + + oslSocketResult res = osl_Socket_Error; + if( pAddr && pByteSeq ) + { + OSL_ASSERT( pAddr->m_sockaddr.sa_family == FAMILY_TO_NATIVE( osl_Socket_FamilyInet ) ); + OSL_ASSERT( pByteSeq->nElements == 4 ); + struct sockaddr_in * pSystemInetAddr = reinterpret_cast(&pAddr->m_sockaddr); + memcpy( &(pSystemInetAddr->sin_addr) , pByteSeq->elements , 4 ); + res = osl_Socket_Ok; + } + return res; +} + +/** Returns the addr field in the struct sockaddr. ppByteSeq is in network byteorder. *ppByteSeq may + either be 0 or contain a constructed sal_Sequence. + */ +oslSocketResult SAL_CALL osl_getAddrOfSocketAddr( oslSocketAddr pAddr, sal_Sequence **ppByteSeq ) +{ + OSL_ASSERT( pAddr ); + OSL_ASSERT( ppByteSeq ); + + oslSocketResult res = osl_Socket_Error; + if( pAddr && ppByteSeq ) + { + struct sockaddr_in * pSystemInetAddr = reinterpret_cast(&pAddr->m_sockaddr); + rtl_byte_sequence_constructFromArray( ppByteSeq , reinterpret_cast(&pSystemInetAddr->sin_addr),4); + res = osl_Socket_Ok; + } + return res; +} + +struct oslHostAddrImpl { + rtl_uString *pHostName; + oslSocketAddr pSockAddr; +} ; + +oslHostAddr SAL_CALL osl_createHostAddr ( + rtl_uString *strHostname, + const oslSocketAddr pSocketAddr) +{ + oslHostAddr pAddr; + rtl_uString *cn= nullptr; + + if ((strHostname == nullptr) || (strHostname->length == 0) || (pSocketAddr == nullptr)) + return nullptr; + + rtl_uString_newFromString( &cn, strHostname); + + pAddr= static_cast(malloc (sizeof (struct oslHostAddrImpl))); + + if (pAddr == nullptr) + { + rtl_uString_release(cn); + return nullptr; + } + + pAddr->pHostName= cn; + pAddr->pSockAddr= osl_copySocketAddr( pSocketAddr ); + + return pAddr; +} + +oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *strHostname) +{ + if ((strHostname == nullptr) || (strHostname->length == 0)) + return nullptr; + + PADDRINFOW pAddrInfo = nullptr; + int ret = GetAddrInfoW( + o3tl::toW(strHostname->buffer), nullptr, nullptr, & pAddrInfo); + if (0 != ret) + { + SAL_INFO("sal.osl", "GetAddrInfoW failed: " << WSAGetLastError()); + return nullptr; + } + + oslHostAddr pRet = nullptr; + for (PADDRINFOW pIter = pAddrInfo; pIter; pIter = pIter->ai_next) + { + if (AF_INET == pIter->ai_family) + { + pRet = static_cast( + rtl_allocateZeroMemory(sizeof(struct oslHostAddrImpl))); + if (pIter->ai_canonname == nullptr) { + rtl_uString_new(&pRet->pHostName); + } else { + rtl_uString_newFromStr(&pRet->pHostName, o3tl::toU(pIter->ai_canonname)); + } + pRet->pSockAddr = createSocketAddr(); + memcpy(& pRet->pSockAddr->m_sockaddr, + pIter->ai_addr, pIter->ai_addrlen); + break; // ignore other results + } + } + FreeAddrInfoW(pAddrInfo); + return pRet; +} + +oslHostAddr SAL_CALL osl_createHostAddrByAddr(const oslSocketAddr pAddr) +{ + if (pAddr == nullptr) + return nullptr; + + if (pAddr->m_sockaddr.sa_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + return nullptr; + + const struct sockaddr_in *sin= reinterpret_cast(&pAddr->m_sockaddr); + + if (sin->sin_addr.s_addr == htonl(INADDR_ANY)) + return nullptr; + + WCHAR buf[NI_MAXHOST]; + int ret = GetNameInfoW( + & pAddr->m_sockaddr, sizeof(struct sockaddr), + buf, NI_MAXHOST, + nullptr, 0, 0); + if (0 != ret) + { + SAL_INFO("sal.osl", "GetNameInfoW failed: " << WSAGetLastError()); + return nullptr; + } + + oslHostAddr pRet = static_cast( + rtl_allocateZeroMemory(sizeof(struct oslHostAddrImpl))); + rtl_uString_newFromStr(&pRet->pHostName, o3tl::toU(buf)); + pRet->pSockAddr = createSocketAddr(); + memcpy(& pRet->pSockAddr->m_sockaddr, + & pAddr->m_sockaddr, sizeof(struct sockaddr)); + return pRet; +} + +oslHostAddr SAL_CALL osl_copyHostAddr(const oslHostAddr Addr) +{ + oslHostAddr pAddr = Addr; + + if (pAddr) + return osl_createHostAddr (pAddr->pHostName, pAddr->pSockAddr); + else + return nullptr; +} + +void SAL_CALL osl_getHostnameOfHostAddr( + const oslHostAddr pAddr, rtl_uString **strHostname) +{ + if (pAddr) + rtl_uString_assign (strHostname, pAddr->pHostName); + else + rtl_uString_new (strHostname); +} + +oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr(const oslHostAddr pAddr) +{ + if (pAddr) + return pAddr->pSockAddr; + else + return nullptr; +} + +void SAL_CALL osl_destroyHostAddr(oslHostAddr pAddr) +{ + if (pAddr) + { + if (pAddr->pHostName) + rtl_uString_release (pAddr->pHostName); + if (pAddr->pSockAddr) + osl_destroySocketAddr( pAddr->pSockAddr ); + + free (pAddr); + } +} + +oslSocketResult SAL_CALL osl_getLocalHostname (rtl_uString **strLocalHostname) +{ + static auto const init = []() -> std::pair { + sal_Unicode LocalHostname[256] = {0}; + + char Host[256]= ""; + if (gethostname(Host, sizeof(Host)) == 0) + { + OUString u; + if (rtl_convertStringToUString( + &u.pData, Host, strlen(Host), osl_getThreadTextEncoding(), + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)) + && o3tl::make_unsigned(u.getLength()) < SAL_N_ELEMENTS(LocalHostname)) + { + memcpy(LocalHostname, u.getStr(), (u.getLength() + 1) * sizeof (sal_Unicode)); + } + } + + if (rtl_ustr_getLength(LocalHostname) > 0) + { + return {osl_Socket_Ok, OUString(LocalHostname)}; + } + + return {osl_Socket_Error, OUString()}; + }(); + + rtl_uString_assign (strLocalHostname, init.second.pData); + + return init.first; +} + +oslSocketAddr SAL_CALL osl_resolveHostname(rtl_uString* strHostname) +{ + oslHostAddr pAddr = osl_createHostAddrByName (strHostname); + if (pAddr) + { + oslSocketAddr SockAddr = osl_copySocketAddr( pAddr->pSockAddr ); + osl_destroyHostAddr(pAddr); + return SockAddr; + } + return nullptr; +} + +sal_Int32 SAL_CALL osl_getServicePort ( + rtl_uString* strServicename, + rtl_uString* strProtocol) +{ + struct servent* ps; + + rtl_String *str_Servicename=nullptr; + rtl_String *str_Protocol=nullptr; + + rtl_uString2String( + &str_Servicename, + rtl_uString_getStr(strServicename), + rtl_uString_getLength(strServicename), + RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS); + rtl_uString2String( + &str_Protocol, + rtl_uString_getStr(strProtocol), + rtl_uString_getLength(strProtocol), + RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS); + + ps= getservbyname( + rtl_string_getStr(str_Servicename), + rtl_string_getStr(str_Protocol)); + + rtl_string_release( str_Servicename ); + rtl_string_release( str_Protocol ); + + if (ps != nullptr) + return ntohs(ps->s_port); + + return OSL_INVALID_PORT; +} + +void SAL_CALL osl_destroySocketAddr(oslSocketAddr pAddr) +{ + destroySocketAddr( pAddr ); +} + +oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr(oslSocketAddr pAddr) +{ + if (pAddr) + return FAMILY_FROM_NATIVE(pAddr->m_sockaddr.sa_family); + else + return osl_Socket_FamilyInvalid; +} + +sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr(oslSocketAddr pAddr) +{ + if( pAddr ) + { + struct sockaddr_in* pSystemInetAddr= reinterpret_cast(&pAddr->m_sockaddr); + + if (pSystemInetAddr->sin_family == FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + return ntohs(pSystemInetAddr->sin_port); + } + return OSL_INVALID_PORT; +} + +sal_Bool SAL_CALL osl_setInetPortOfSocketAddr ( + oslSocketAddr pAddr, + sal_Int32 Port) +{ + if (pAddr == nullptr) + return false; + + struct sockaddr_in* pSystemInetAddr= reinterpret_cast(&pAddr->m_sockaddr); + + if (pSystemInetAddr->sin_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + return false; + + pSystemInetAddr->sin_port= htons(static_cast(Port)); + return true; +} + +oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr ( + oslSocketAddr Addr, + rtl_uString **strHostName) +{ + oslHostAddr pAddr= osl_createHostAddrByAddr (Addr); + + if (pAddr) + { + rtl_uString_newFromString(strHostName, pAddr->pHostName); + + osl_destroyHostAddr(pAddr); + + return osl_Socket_Ok; + } + + return osl_Socket_Error; +} + +oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr ( + oslSocketAddr pAddr, + rtl_uString **strDottedInetAddr) +{ + if (pAddr == nullptr) + return osl_Socket_Error; + + struct sockaddr_in *pSystemInetAddr = reinterpret_cast(&pAddr->m_sockaddr); + if (pSystemInetAddr->sin_family != FAMILY_TO_NATIVE(osl_Socket_FamilyInet)) + return osl_Socket_Error; + + *strDottedInetAddr = nullptr; + WCHAR buf[16]; // 16 for IPV4, 46 for IPV6 + PCWSTR ret = InetNtopW( + AF_INET, & pSystemInetAddr->sin_addr, + buf, SAL_N_ELEMENTS(buf)); + if (nullptr == ret) + { + SAL_INFO("sal.osl", "InetNtopW failed: " << WSAGetLastError()); + return osl_Socket_Error; + } + rtl_uString_newFromStr(strDottedInetAddr, o3tl::toU(ret)); + OSL_ASSERT(*strDottedInetAddr != nullptr); + + return osl_Socket_Ok; +} + +oslSocket SAL_CALL osl_createSocket( + oslAddrFamily Family, + oslSocketType Type, + oslProtocol Protocol) +{ + /* alloc memory */ + oslSocket pSocket = createSocketImpl(0); + + if (pSocket == nullptr) + return nullptr; + + /* create socket */ + pSocket->m_Socket = socket(FAMILY_TO_NATIVE(Family), + TYPE_TO_NATIVE(Type), + PROTOCOL_TO_NATIVE(Protocol)); + + /* creation failed => free memory */ + if(pSocket->m_Socket == OSL_INVALID_SOCKET) + { + int nErrno = WSAGetLastError(); + SAL_WARN("sal.osl", "socket creation failed: (" << nErrno << "): " << WindowsErrorString(nErrno)); + + destroySocketImpl(pSocket); + pSocket = nullptr; + } + else + { + pSocket->m_Flags = 0; + } + + return pSocket; +} + +void SAL_CALL osl_acquireSocket(oslSocket pSocket) +{ + osl_atomic_increment(&(pSocket->m_nRefCount)); +} + +void SAL_CALL osl_releaseSocket(oslSocket pSocket) +{ + if (pSocket && osl_atomic_decrement(&(pSocket->m_nRefCount)) == 0) + { + osl_closeSocket(pSocket); + destroySocketImpl(pSocket); + } +} + +void SAL_CALL osl_closeSocket(oslSocket pSocket) +{ + /* socket already invalid */ + if (!pSocket) + return; + + /* close */ + closesocket(pSocket->m_Socket); + + pSocket->m_Socket = OSL_INVALID_SOCKET; +} + +/** + Note that I rely on the fact that oslSocketAddr and struct sockaddr + are the same! I don't like it very much but see no other easy way + to conceal the struct sockaddr from the eyes of the user. +*/ +oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket pSocket) +{ + struct sockaddr Addr; + int AddrLen; + + if (pSocket == nullptr) /* ENOTSOCK */ + return nullptr; + + AddrLen= sizeof(struct sockaddr); + + if (getsockname(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR) + return nullptr; + + oslSocketAddr pAddr = createSocketAddFromSystem( &Addr ); + return pAddr; +} + +oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket pSocket) +{ + struct sockaddr Addr; + int AddrLen; + + if (pSocket == nullptr) /* ENOTSOCK */ + return nullptr; + + AddrLen= sizeof(struct sockaddr); + + if (getpeername(pSocket->m_Socket, &Addr, &AddrLen) == OSL_SOCKET_ERROR) + return nullptr; + + oslSocketAddr pAddr = createSocketAddFromSystem( &Addr ); + return pAddr; +} + +sal_Bool SAL_CALL osl_bindAddrToSocket ( oslSocket pSocket, oslSocketAddr pAddr) +{ + OSL_ASSERT( pAddr ); + + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + return (bind(pSocket->m_Socket, + &(pAddr->m_sockaddr), + sizeof(struct sockaddr)) != OSL_SOCKET_ERROR); +} + +oslSocketResult SAL_CALL osl_connectSocketTo ( + oslSocket pSocket, + oslSocketAddr pAddr, + const TimeValue* pTimeout) +{ + + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_Error; + + if (pAddr == nullptr) /* EDESTADDRREQ */ + return osl_Socket_Error; + + if (pTimeout == nullptr) + { + if(connect(pSocket->m_Socket, + &(pAddr->m_sockaddr), + sizeof(struct sockaddr)) == OSL_SOCKET_ERROR) + return osl_Socket_Error; + else + return osl_Socket_Ok; + } + else + { + fd_set fds; + int error; + struct timeval tv; + unsigned long Param; + oslSocketResult Result= osl_Socket_Ok; + + if (pSocket->m_Flags & OSL_SOCKET_FLAGS_NONBLOCKING) + { + if (connect(pSocket->m_Socket, + &(pAddr->m_sockaddr), + sizeof(struct sockaddr)) == OSL_SOCKET_ERROR) + { + switch (WSAGetLastError()) + { + case WSAEWOULDBLOCK: + case WSAEINPROGRESS: + return osl_Socket_InProgress; + + default: + return osl_Socket_Error; + } + } + else + return osl_Socket_Ok; + } + + /* set socket temporarily to non-blocking */ + Param= 1; + OSL_VERIFY(ioctlsocket( + pSocket->m_Socket, FIONBIO, &Param) != OSL_SOCKET_ERROR); + + /* initiate connect */ + if (connect(pSocket->m_Socket, + &(pAddr->m_sockaddr), + sizeof(struct sockaddr)) != OSL_SOCKET_ERROR) + { + /* immediate connection */ + + Param= 0; + ioctlsocket(pSocket->m_Socket, FIONBIO, &Param); + + return osl_Socket_Ok; + } + else + { + error = WSAGetLastError(); + + /* really an error or just delayed? */ + if (error != WSAEWOULDBLOCK && error != WSAEINPROGRESS) + { + Param= 0; + ioctlsocket(pSocket->m_Socket, FIONBIO, &Param); + + return osl_Socket_Error; + } + } + + /* prepare select set for socket */ + FD_ZERO(&fds); + FD_SET(pSocket->m_Socket, &fds); + + /* divide milliseconds into seconds and microseconds */ + tv.tv_sec= pTimeout->Seconds; + tv.tv_usec= pTimeout->Nanosec / 1000L; + + /* select */ + error= select(pSocket->m_Socket+1, + nullptr, + &fds, + nullptr, + &tv); + + if (error > 0) /* connected */ + { + SAL_WARN_IF( + !FD_ISSET(pSocket->m_Socket, &fds), + "sal.osl", + "osl_connectSocketTo(): select returned but socket not set"); + + Result= osl_Socket_Ok; + + } + else if(error < 0) /* error */ + { + /* errno == EBADF: most probably interrupted by close() */ + if(WSAGetLastError() == WSAEBADF) + { + /* do not access pSockImpl because it is about to be or */ + /* already destroyed */ + return osl_Socket_Interrupted; + } + else + Result= osl_Socket_Error; + + } + else /* timeout */ + Result= osl_Socket_TimedOut; + + /* clean up */ + Param= 0; + ioctlsocket(pSocket->m_Socket, FIONBIO, &Param); + + return Result; + } +} + +sal_Bool SAL_CALL osl_listenOnSocket ( + oslSocket pSocket, + sal_Int32 MaxPendingConnections) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + return (listen(pSocket->m_Socket, + MaxPendingConnections == -1 ? + SOMAXCONN : + MaxPendingConnections) != OSL_SOCKET_ERROR); +} + +oslSocket SAL_CALL osl_acceptConnectionOnSocket ( + oslSocket pSocket, + oslSocketAddr* ppAddr) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return nullptr; + + SOCKET Connection; + if(ppAddr) + { + if( *ppAddr ) + { + osl_destroySocketAddr( *ppAddr ); + *ppAddr = nullptr; + } + int AddrLen= sizeof(struct sockaddr); + + /* user wants to know peer Addr */ + struct sockaddr Addr; + + Connection= accept(pSocket->m_Socket, &Addr, &AddrLen); + OSL_ASSERT(AddrLen == sizeof(struct sockaddr)); + + if(Connection != static_cast(OSL_SOCKET_ERROR)) + *ppAddr= createSocketAddFromSystem(&Addr); + else + *ppAddr = nullptr; + } + else + { + /* user is not interested in peer-addr */ + Connection= accept(pSocket->m_Socket, nullptr, nullptr); + } + + /* accept failed? */ + if(Connection == static_cast(OSL_SOCKET_ERROR)) + return nullptr; + + /* alloc memory */ + oslSocket pConnectionSocket; + pConnectionSocket= createSocketImpl(Connection); + + pConnectionSocket->m_Flags = 0; + + return pConnectionSocket; +} + +sal_Int32 SAL_CALL osl_receiveSocket ( + oslSocket pSocket, + void* pBuffer, + sal_uInt32 BytesToRead, + oslSocketMsgFlag Flag) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_Error; + + return recv(pSocket->m_Socket, + static_cast(pBuffer), + BytesToRead, + MSG_FLAG_TO_NATIVE(Flag)); +} + +sal_Int32 SAL_CALL osl_receiveFromSocket ( + oslSocket pSocket, + oslSocketAddr SenderAddr, + void* pBuffer, + sal_uInt32 BufferSize, + oslSocketMsgFlag Flag) +{ + struct sockaddr *pSystemSockAddr = nullptr; + int AddrLen = 0; + if( SenderAddr ) + { + AddrLen = sizeof( struct sockaddr ); + pSystemSockAddr = &(SenderAddr->m_sockaddr); + } + + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_Error; + + return recvfrom(pSocket->m_Socket, + static_cast(pBuffer), + BufferSize, + MSG_FLAG_TO_NATIVE(Flag), + pSystemSockAddr, + &AddrLen); +} + +sal_Int32 SAL_CALL osl_sendSocket ( + oslSocket pSocket, + const void* pBuffer, + sal_uInt32 BytesToSend, + oslSocketMsgFlag Flag) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_Error; + + return send(pSocket->m_Socket, + static_cast(pBuffer), + BytesToSend, + MSG_FLAG_TO_NATIVE(Flag)); +} + +sal_Int32 SAL_CALL osl_sendToSocket ( + oslSocket pSocket, + oslSocketAddr ReceiverAddr, + const void* pBuffer, + sal_uInt32 BytesToSend, + oslSocketMsgFlag Flag) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_Error; + + /* ReceiverAddr might be 0 when used on a connected socket. */ + /* Then sendto should behave like send. */ + + struct sockaddr *pSystemSockAddr = nullptr; + if( ReceiverAddr ) + pSystemSockAddr = &(ReceiverAddr->m_sockaddr); + + return sendto(pSocket->m_Socket, + static_cast(pBuffer), + BytesToSend, + MSG_FLAG_TO_NATIVE(Flag), + pSystemSockAddr, + pSystemSockAddr == nullptr ? 0 : sizeof(struct sockaddr)); +} + +sal_Int32 SAL_CALL osl_readSocket( oslSocket pSocket, void *pBuffer, sal_Int32 n ) +{ + sal_uInt8 * Ptr = static_cast(pBuffer); + + OSL_ASSERT( pSocket); + + /* loop until all desired bytes were read or an error occurred */ + sal_uInt32 BytesRead= 0; + sal_uInt32 BytesToRead= n; + while (BytesToRead > 0) + { + sal_Int32 RetVal; + RetVal= osl_receiveSocket(pSocket, + Ptr, + BytesToRead, + osl_Socket_MsgNormal); + + /* error occurred? */ + if(RetVal <= 0) + { + break; + } + + BytesToRead -= RetVal; + BytesRead += RetVal; + Ptr += RetVal; + } + + return BytesRead; +} + +sal_Int32 SAL_CALL osl_writeSocket( oslSocket pSocket, const void *pBuffer, sal_Int32 n ) +{ + OSL_ASSERT( pSocket ); + + /* loop until all desired bytes were send or an error occurred */ + sal_uInt32 BytesSend= 0; + sal_uInt32 BytesToSend= n; + sal_uInt8 const *Ptr = static_cast(pBuffer); + while (BytesToSend > 0) + { + sal_Int32 RetVal; + + RetVal= osl_sendSocket( pSocket,Ptr,BytesToSend,osl_Socket_MsgNormal); + + /* error occurred? */ + if(RetVal <= 0) + { + break; + } + + BytesToSend -= RetVal; + BytesSend += RetVal; + Ptr += RetVal; + + } + return BytesSend; +} + +sal_Bool SAL_CALL osl_isReceiveReady ( + oslSocket pSocket, + const TimeValue* pTimeout) +{ + fd_set fds; + struct timeval tv; + + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + FD_ZERO(&fds); + FD_SET(pSocket->m_Socket, &fds); + + if (pTimeout) + { + tv.tv_sec = pTimeout->Seconds; + tv.tv_usec = pTimeout->Nanosec / 1000L; + } + + return (select(pSocket->m_Socket + 1, /* no of sockets to monitor */ + &fds, /* check read operations */ + nullptr, /* check write ops */ + nullptr, /* ckeck for OOB */ + pTimeout ? &tv : nullptr)==1); /* use timeout? */ +} + +/*****************************************************************************/ +/* osl_isSendReady */ +/*****************************************************************************/ +sal_Bool SAL_CALL osl_isSendReady ( + oslSocket pSocket, + const TimeValue* pTimeout) +{ + fd_set fds; + struct timeval tv; + + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + FD_ZERO(&fds); + FD_SET(pSocket->m_Socket, &fds); + + if (pTimeout) + { + tv.tv_sec = pTimeout->Seconds; + tv.tv_usec = pTimeout->Nanosec / 1000L; + } + + return (select(pSocket->m_Socket + 1, /* no of sockets to monitor */ + nullptr, /* check read operations */ + &fds, /* check write ops */ + nullptr, /* ckeck for OOB */ + pTimeout ? &tv : nullptr)==1); /* use timeout? */ +} + +sal_Bool SAL_CALL osl_isExceptionPending ( + oslSocket pSocket, + const TimeValue* pTimeout) +{ + fd_set fds; + struct timeval tv; + + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + FD_ZERO(&fds); + FD_SET(pSocket->m_Socket, &fds); + + if (pTimeout) + { + tv.tv_sec = pTimeout->Seconds; + tv.tv_usec = pTimeout->Nanosec / 1000L; + } + + return (select(pSocket->m_Socket + 1, /* no of sockets to monitor */ + nullptr, /* check read operations */ + nullptr, /* check write ops */ + &fds, /* ckeck for OOB */ + pTimeout ? &tv : nullptr)==1); /* use timeout? */ +} + +sal_Bool SAL_CALL osl_shutdownSocket ( + oslSocket pSocket, + oslSocketDirection Direction) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + return (shutdown(pSocket->m_Socket, DIRECTION_TO_NATIVE(Direction))==0); +} + +sal_Int32 SAL_CALL osl_getSocketOption ( + oslSocket pSocket, + oslSocketOptionLevel Level, + oslSocketOption Option, + void* pBuffer, + sal_uInt32 BufferLen) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_Error; + + int len = BufferLen; + if (getsockopt(pSocket->m_Socket, + OPTION_LEVEL_TO_NATIVE(Level), + OPTION_TO_NATIVE(Option), + static_cast(pBuffer), + &len) == -1) + { + return -1; + } + + return len; +} + +sal_Bool SAL_CALL osl_setSocketOption ( + oslSocket pSocket, + oslSocketOptionLevel Level, + oslSocketOption Option, + void* pBuffer, + sal_uInt32 BufferLen) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + return(setsockopt(pSocket->m_Socket, + OPTION_LEVEL_TO_NATIVE(Level), + OPTION_TO_NATIVE(Option), + static_cast(pBuffer), + BufferLen) == 0); +} + +sal_Bool SAL_CALL osl_enableNonBlockingMode ( oslSocket pSocket, sal_Bool On) +{ + unsigned long Param= On ? 1 : 0; + + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + pSocket->m_Flags = Param ? + (pSocket->m_Flags | OSL_SOCKET_FLAGS_NONBLOCKING) : + (pSocket->m_Flags & ~OSL_SOCKET_FLAGS_NONBLOCKING) ; + + return ( + ioctlsocket(pSocket->m_Socket, FIONBIO, &Param) != OSL_SOCKET_ERROR); +} + +sal_Bool SAL_CALL osl_isNonBlockingMode(oslSocket pSocket) +{ + if (pSocket == nullptr) /* ENOTSOCK */ + return false; + + return (pSocket->m_Flags & OSL_SOCKET_FLAGS_NONBLOCKING) != 0; +} + +oslSocketType SAL_CALL osl_getSocketType(oslSocket pSocket) +{ + int Type=0; + int TypeSize= sizeof(Type); + + if (pSocket == nullptr) /* ENOTSOCK */ + return osl_Socket_TypeInvalid; + + if(getsockopt(pSocket->m_Socket, + OPTION_LEVEL_TO_NATIVE(osl_Socket_LevelSocket), + OPTION_TO_NATIVE(osl_Socket_OptionType), + reinterpret_cast(&Type), + &TypeSize) == -1) + { + /* error */ + return osl_Socket_TypeInvalid; + } + + return TYPE_FROM_NATIVE(Type); +} + +void SAL_CALL osl_getLastSocketErrorDescription ( + oslSocket /*Socket*/, + rtl_uString **strError) +{ + int error; + + switch(error = WSAGetLastError()) + { + case WSAENOTSOCK: + rtl_uString_newFromAscii (strError, "WSAENOTSOCK, Socket operation on non-socket. A socket created in one process is used by another process."); + break; + + case WSAEDESTADDRREQ: + rtl_uString_newFromAscii (strError, "WSAEDESTADDRREQ, Destination Addr required"); + break; + + case WSAEMSGSIZE: + rtl_uString_newFromAscii (strError, "WSAEMSGSIZE, Message too long"); + break; + + case WSAEPROTOTYPE: + rtl_uString_newFromAscii (strError, "WSAEPROTOTYPE, Protocol wrong type for socket"); + break; + + case WSAENOPROTOOPT: + rtl_uString_newFromAscii (strError, "WSAENOPROTOOPT, Protocol not available"); + break; + + case WSAEPROTONOSUPPORT: + rtl_uString_newFromAscii (strError, "WSAEPROTONOSUPPORT, Protocol not supported"); + break; + + case WSAESOCKTNOSUPPORT: + rtl_uString_newFromAscii (strError, "WSAESOCKTNOSUPPORT, Socket type not supported"); + break; + + case WSAEOPNOTSUPP: + rtl_uString_newFromAscii (strError, "WSAEOPNOTSUPP, Operation not supported on socket"); + break; + + case WSAEPFNOSUPPORT: + rtl_uString_newFromAscii (strError, "WSAEPFNOSUPPORT, Protocol family not supported"); + break; + + case WSAEAFNOSUPPORT: + rtl_uString_newFromAscii (strError, "WSEAFNOSUPPORT, Addr family not supported by protocol family"); + break; + + case WSAEADDRINUSE: + rtl_uString_newFromAscii (strError, "WSAEADDRINUSE, Triggered by bind() because a process went down without closing a socket."); + break; + + case WSAEADDRNOTAVAIL: + rtl_uString_newFromAscii (strError, "WSAEADDRNOTAVAIL, Can't assign requested Addr"); + break; + + case WSAENETDOWN: + rtl_uString_newFromAscii (strError, "WSAENETDOWN, Network is down"); + break; + + case WSAENETUNREACH: + rtl_uString_newFromAscii (strError, "WSAENETUNREACH, Network is unreachable"); + break; + + case WSAENETRESET: + rtl_uString_newFromAscii (strError, "WSAENETRESET, Network dropped connection or reset"); + break; + + case WSAECONNABORTED: + rtl_uString_newFromAscii (strError, "WSAECONNABORTED, Software caused connection abort"); + break; + + case WSAECONNRESET: + rtl_uString_newFromAscii (strError, "WSAECONNRESET, Connection reset by peer"); + break; + + case WSAENOBUFS: + rtl_uString_newFromAscii (strError, "WSAENOBUFS, No buffer space available."); + break; + + case WSAEISCONN: + rtl_uString_newFromAscii (strError, "WSAEISCONN, Socket is already connected"); + break; + + case WSAENOTCONN: + rtl_uString_newFromAscii (strError, "WSAENOTCONN, Socket is not connected"); + break; + + case WSAESHUTDOWN: + rtl_uString_newFromAscii (strError, "WSAESHUTDOWN, Can't send after socket shutdown"); + break; + + case WSAETIMEDOUT: + rtl_uString_newFromAscii (strError, "WSAETIMEDOUT, Connection timed out"); + break; + + case WSAECONNREFUSED: + rtl_uString_newFromAscii (strError, "WSAECONNREFUSED, Connection refused"); + break; + + case WSAEHOSTDOWN: + rtl_uString_newFromAscii (strError, "WSAEHOSTDOWN, Networking subsystem not started"); + break; + + case WSAEHOSTUNREACH: + rtl_uString_newFromAscii (strError, "WSAEHOSTUNREACH, No route to host"); + break; + + case WSAEWOULDBLOCK: + rtl_uString_newFromAscii (strError, "WSAEWOULDBLOCK, Operation would block"); + break; + + case WSAEINPROGRESS: + rtl_uString_newFromAscii (strError, "WSAEINPROGRESS, Operation now in progress"); + break; + + case WSAEALREADY: + rtl_uString_newFromAscii (strError, "WSAEALREADY, Operation already in progress"); + break; + + case WSAEINTR: + rtl_uString_newFromAscii (strError, "WSAEALREADY, Operation was interrupted"); + break; + + case WSAEBADF: + rtl_uString_newFromAscii (strError, "WSAEBADF, Bad file number"); + break; + + case WSAEACCES: + rtl_uString_newFromAscii (strError, "WSAEACCES, Access is denied"); + break; + + case WSAEFAULT: + rtl_uString_newFromAscii (strError, "WSAEFAULT, Bad memory Addr"); + break; + + case WSAEINVAL: + rtl_uString_newFromAscii (strError, "WSAEINVAL, The socket has not been bound with bind() or is already connected"); + break; + + case WSAEMFILE: + rtl_uString_newFromAscii (strError, "WSAEMFILE, No more file descriptors are available"); + break; + + case WSAETOOMANYREFS: + rtl_uString_newFromAscii (strError, "WSAETOOMANYREFS, Undocumented WinSock error"); + break; + + case WSAENAMETOOLONG: + rtl_uString_newFromAscii (strError, "WSAENAMETOOLONG, Undocumented WinSock error"); + break; + + case WSAENOTEMPTY: + rtl_uString_newFromAscii (strError, "WSAENOTEMPTY, Undocumented WinSock error"); + break; + + case WSAEPROCLIM: + rtl_uString_newFromAscii (strError, "WSAEPROCLIM, Undocumented WinSock error"); + break; + + case WSAEUSERS: + rtl_uString_newFromAscii (strError, "WSAEUSERS, Undocumented WinSock error"); + break; + + case WSAEDQUOT: + rtl_uString_newFromAscii (strError, "WSAEDQUOT, Undocumented WinSock error"); + break; + + case WSAESTALE: + rtl_uString_newFromAscii (strError, "WSAESTALE, Undocumented WinSock error"); + break; + + case WSAEREMOTE: + rtl_uString_newFromAscii (strError, "WSAEREMOTE, Undocumented WinSock error"); + break; + + case WSAEDISCON: + rtl_uString_newFromAscii (strError, "WSAEDISCON, Circuit was gracefully terminated"); + break; + + case WSASYSNOTREADY: + rtl_uString_newFromAscii (strError, "WSASYSNOTREADY, The underlying network subsystem is not ready for network communication"); + break; + + case WSAVERNOTSUPPORTED: + rtl_uString_newFromAscii (strError, "WSAVERNOTSUPPORTED, The version of Windows Sockets API support requested is not provided by this particular Windows Sockets implementation"); + break; + + case WSANOTINITIALISED: + rtl_uString_newFromAscii (strError, "WSANOTINITIALISED, WSAStartup() has not been called"); + break; + + case WSAHOST_NOT_FOUND: + rtl_uString_newFromAscii (strError, "WSAHOST_NOT_FOUND, Authoritative answer host not found"); + break; + + case WSATRY_AGAIN: + rtl_uString_newFromAscii (strError, "WSATRY_AGAIN, Non-authoritative answer host not found or SERVERFAIL"); + break; + + case WSANO_RECOVERY: + rtl_uString_newFromAscii (strError, "WSANO_RECOVERY, Non recoverable errors, FORMERR, REFUSED, NOTIMP"); + break; + + case WSANO_DATA: + rtl_uString_newFromAscii (strError, "WSANO_DATA or WSANO_ADDRESS, Valid name, no data record of requested type"); + break; + + default: + { + sal_Unicode message[128]; + + wsprintfW(o3tl::toW(message), L"Unknown WinSock Error Number %d", error); + rtl_uString_newFromStr (strError, message); + } + + return; + + } +} + +oslSocketError SAL_CALL osl_getLastSocketError(oslSocket /*Socket*/) +{ + return ERROR_FROM_NATIVE(WSAGetLastError()); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/sockimpl.hxx b/sal/osl/w32/sockimpl.hxx new file mode 100644 index 000000000..72b204a2e --- /dev/null +++ b/sal/osl/w32/sockimpl.hxx @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include +#include + +#define OSL_SOCKET_FLAGS_NONBLOCKING 0x0001 + +struct oslSocketImpl { + oslInterlockedCount m_nRefCount; + SOCKET m_Socket; + int m_Flags; +}; + +struct oslSocketAddrImpl +{ + struct sockaddr m_sockaddr; + oslInterlockedCount m_nRefCount; +}; + +oslSocket osl_createSocketImpl_(SOCKET Socket); +void osl_destroySocketImpl_(oslSocket pImpl); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/system.h b/sal/osl/w32/system.h new file mode 100644 index 000000000..921d746fd --- /dev/null +++ b/sal/osl/w32/system.h @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#if OSL_DEBUG_LEVEL <= 3 +#define NO_DEBUG_CRT +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Must define this else build breaks because Winsock2.h + includes Windows.h and without WIN32_LEAN_AND_MEAN + also includes mswsock.h which needs a forward typedef + of SOCKET ... +*/ +#define WIN32_LEAN_AND_MEAN + +// winsock2.h includes windows.h +#include +#include +#include +#include +#ifndef NO_DEBUG_CRT +#include +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/tempfile.cxx b/sal/osl/w32/tempfile.cxx new file mode 100644 index 000000000..f0065bf2d --- /dev/null +++ b/sal/osl/w32/tempfile.cxx @@ -0,0 +1,238 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include + +#include "file-impl.hxx" +#include "file_error.hxx" +#include "file_url.hxx" +#include "path_helper.hxx" + +#include +#include + +// Allocate n number of t's on the stack return a pointer to it in p +#define STACK_ALLOC(p, t, n) __try {(p) = static_cast(_alloca((n)*sizeof(t)));} \ + __except(EXCEPTION_EXECUTE_HANDLER) {(p) = nullptr;} + +// Temp file functions + +static oslFileError osl_setup_base_directory_impl_( + rtl_uString* pustrDirectoryURL, + rtl_uString** ppustr_base_dir) +{ + OUString dir_url; + OUString dir; + oslFileError error = osl_File_E_None; + + if (pustrDirectoryURL) + dir_url = pustrDirectoryURL; + else + error = osl_getTempDirURL(&dir_url.pData); + + if (error == osl_File_E_None) + error = osl_getSystemPathFromFileURL_(dir_url, &dir.pData, false); + + if (error == osl_File_E_None) + rtl_uString_assign(ppustr_base_dir, dir.pData); + + return error; +} + +static oslFileError osl_setup_createTempFile_impl_( + rtl_uString* pustrDirectoryURL, + oslFileHandle* pHandle, + rtl_uString** ppustrTempFileURL, + rtl_uString** ppustr_base_dir, + sal_Bool* b_delete_on_close) +{ + oslFileError osl_error; + + OSL_PRECOND(((pHandle != nullptr) || (ppustrTempFileURL != nullptr)), "Invalid parameter!"); + + if ((pHandle == nullptr) && (ppustrTempFileURL == nullptr)) + { + osl_error = osl_File_E_INVAL; + } + else + { + osl_error = osl_setup_base_directory_impl_( + pustrDirectoryURL, ppustr_base_dir); + + *b_delete_on_close = (ppustrTempFileURL == nullptr); + } + + return osl_error; +} + +static oslFileError osl_win32_GetTempFileName_impl_( + rtl_uString* base_directory, LPWSTR temp_file_name) +{ + oslFileError osl_error = osl_File_E_None; + + if (GetTempFileNameW( + o3tl::toW(rtl_uString_getStr(base_directory)), + L"", + 0, + temp_file_name) == 0) + { + osl_error = oslTranslateFileError(GetLastError()); + } + + return osl_error; +} + +static bool osl_win32_CreateFile_impl_( + LPCWSTR file_name, bool b_delete_on_close, oslFileHandle* p_handle) +{ + DWORD flags = FILE_ATTRIBUTE_NORMAL; + HANDLE hFile; + + assert(p_handle); + + if (b_delete_on_close) + flags |= FILE_FLAG_DELETE_ON_CLOSE; + + hFile = CreateFileW( + file_name, + GENERIC_READ | GENERIC_WRITE, + 0, + nullptr, + TRUNCATE_EXISTING, + flags, + nullptr); + + // @@@ ERROR HANDLING @@@ + if (IsValidHandle(hFile)) + *p_handle = osl_createFileHandleFromOSHandle(hFile, osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + + return IsValidHandle(hFile); +} + +static oslFileError osl_createTempFile_impl_( + rtl_uString* base_directory, + LPWSTR tmp_name, + bool b_delete_on_close, + oslFileHandle* pHandle, + rtl_uString** ppustrTempFileURL) +{ + oslFileError osl_error; + + do + { + osl_error = osl_win32_GetTempFileName_impl_(base_directory, tmp_name); + + /* if file could not be opened try again */ + + if ((osl_File_E_None != osl_error) || (nullptr == pHandle) || + osl_win32_CreateFile_impl_(tmp_name, b_delete_on_close, pHandle)) + break; + + } while(true); // try until success + + if ((osl_error == osl_File_E_None) && !b_delete_on_close) + { + rtl_uString* pustr = nullptr; + rtl_uString_newFromStr(&pustr, o3tl::toU(tmp_name)); + osl_getFileURLFromSystemPath(pustr, ppustrTempFileURL); + rtl_uString_release(pustr); + } + + return osl_error; +} + +oslFileError SAL_CALL osl_createTempFile( + rtl_uString* pustrDirectoryURL, + oslFileHandle* pHandle, + rtl_uString** ppustrTempFileURL) +{ + rtl_uString* base_directory = nullptr; + LPWSTR tmp_name; + sal_Bool b_delete_on_close; + oslFileError osl_error; + + osl_error = osl_setup_createTempFile_impl_( + pustrDirectoryURL, + pHandle, + ppustrTempFileURL, + &base_directory, + &b_delete_on_close); + + if (osl_error != osl_File_E_None) + return osl_error; + + /* allocate enough space on the stack, the file name can not be longer than MAX_PATH */ + STACK_ALLOC(tmp_name, WCHAR, (rtl_uString_getLength(base_directory) + MAX_PATH)); + + if (tmp_name) + { + osl_error = osl_createTempFile_impl_( + base_directory, + tmp_name, + b_delete_on_close, + pHandle, + ppustrTempFileURL); + } + else // stack alloc failed + { + osl_error = osl_File_E_NOMEM; + } + + if (base_directory) + rtl_uString_release(base_directory); + + return osl_error; +} + +oslFileError SAL_CALL osl_getTempDirURL(rtl_uString** pustrTempDir) +{ + ::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH ); + LPWSTR lpBuffer = o3tl::toW(aBuffer); + DWORD nBufferLength = aBuffer.getBufSizeInSymbols() - 1; + + DWORD nLength; + oslFileError error; + + nLength = GetTempPathW( aBuffer.getBufSizeInSymbols(), lpBuffer ); + + if ( nLength > nBufferLength ) + { + // the provided path has invalid length + error = osl_File_E_NOENT; + } + else if ( nLength ) + { + if ( '\\' == lpBuffer[nLength-1] ) + --nLength; + + const OUString ustrTempPath(o3tl::toU(lpBuffer), static_cast(nLength)); + + error = osl_getFileURLFromSystemPath(ustrTempPath.pData, pustrTempDir); + } + else + error = oslTranslateFileError( GetLastError() ); + + return error; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/thread.cxx b/sal/osl/w32/thread.cxx new file mode 100644 index 000000000..fe5ac30b0 --- /dev/null +++ b/sal/osl/w32/thread.cxx @@ -0,0 +1,540 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "system.h" +#include "thread.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace { + +/** + Thread-data structure hidden behind oslThread: + */ +typedef struct +{ + HANDLE m_hThread; /* OS-handle used for all thread-functions */ + DWORD m_ThreadId; /* identifier for this thread */ + sal_Int32 m_nTerminationRequested; + oslWorkerFunction m_WorkerFunction; + void* m_pData; + +} osl_TThreadImpl; + +} + +static oslThread oslCreateThread(oslWorkerFunction pWorker, void* pThreadData, sal_uInt32 nFlags); + +static DWORD WINAPI oslWorkerWrapperFunction(_In_ LPVOID pData) +{ + osl_TThreadImpl* pThreadImpl= static_cast(pData); + + /* Initialize COM - Multi Threaded Apartment (MTA) for all threads */ + sal::systools::CoInitializeGuard aGuard(COINIT_MULTITHREADED, false, + sal::systools::CoInitializeGuard::WhenFailed::NoThrow); + + /* call worker-function with data */ + + pThreadImpl->m_WorkerFunction(pThreadImpl->m_pData); + + return 0; +} + +static oslThread oslCreateThread(oslWorkerFunction pWorker, + void* pThreadData, + sal_uInt32 nFlags) +{ + osl_TThreadImpl* pThreadImpl; + + /* alloc mem. for our internal data structure */ + pThreadImpl= static_cast(malloc(sizeof(osl_TThreadImpl))); + + OSL_ASSERT(pThreadImpl); + + if ( pThreadImpl == nullptr ) + { + return nullptr; + } + + pThreadImpl->m_WorkerFunction= pWorker; + pThreadImpl->m_pData= pThreadData; + pThreadImpl->m_nTerminationRequested= 0; + + pThreadImpl->m_hThread= CreateThread( + nullptr, /* no security */ + 0, /* default stack-size */ + oslWorkerWrapperFunction, /* worker-function */ + pThreadImpl, /* provide worker-function with data */ + nFlags, /* start thread immediately or suspended */ + &pThreadImpl->m_ThreadId); + + if(pThreadImpl->m_hThread == nullptr) + { + SAL_WARN("sal.osl", "CreateThread failed:" << WindowsErrorString(GetLastError())); + + /* create failed */ + free(pThreadImpl); + return nullptr; + } + + return pThreadImpl; +} + +oslThread SAL_CALL osl_createThread(oslWorkerFunction pWorker, + void* pThreadData) +{ + return oslCreateThread(pWorker, pThreadData, 0); +} + +oslThread SAL_CALL osl_createSuspendedThread(oslWorkerFunction pWorker, + void* pThreadData) +{ + return oslCreateThread(pWorker, pThreadData, CREATE_SUSPENDED); +} + +oslThreadIdentifier SAL_CALL osl_getThreadIdentifier(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + if (pThreadImpl != nullptr) + return static_cast(pThreadImpl->m_ThreadId); + else + return static_cast(GetCurrentThreadId()); +} + +void SAL_CALL osl_destroyThread(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + if (Thread == nullptr) /* valid ptr? */ + { + /* thread already destroyed or not created */ + return; + } + + /* !!!! _exitthreadex does _not_ call CloseHandle !!! */ + CloseHandle( pThreadImpl->m_hThread ); + + /* free memory */ + free(Thread); +} + +void SAL_CALL osl_resumeThread(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + OSL_ASSERT(pThreadImpl); /* valid ptr? */ + + ResumeThread(pThreadImpl->m_hThread); +} + +void SAL_CALL osl_suspendThread(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + OSL_ASSERT(pThreadImpl); /* valid ptr? */ + + SuspendThread(pThreadImpl->m_hThread); +} + +void SAL_CALL osl_setThreadPriority(oslThread Thread, + oslThreadPriority Priority) +{ + int winPriority; + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + OSL_ASSERT(pThreadImpl); /* valid ptr? */ + + /* map enum to WIN32 levels + it would be faster and more elegant to preset + the enums, but that would require an #ifdef in + the exported header, which is not desired. + */ + switch(Priority) { + + case osl_Thread_PriorityHighest: + winPriority= THREAD_PRIORITY_HIGHEST; + break; + + case osl_Thread_PriorityAboveNormal: + winPriority= THREAD_PRIORITY_ABOVE_NORMAL; + break; + + case osl_Thread_PriorityNormal: + winPriority= THREAD_PRIORITY_NORMAL; + break; + + case osl_Thread_PriorityBelowNormal: + winPriority= THREAD_PRIORITY_BELOW_NORMAL; + break; + + case osl_Thread_PriorityLowest: + winPriority= THREAD_PRIORITY_LOWEST; + break; + + case osl_Thread_PriorityUnknown: + OSL_ASSERT(FALSE); /* only fools try this...*/ + + /* let release-version behave friendly */ + return; + + default: + OSL_ASSERT(FALSE); /* enum expanded, but forgotten here...*/ + + /* let release-version behave friendly */ + return; + } + + SetThreadPriority(pThreadImpl->m_hThread, winPriority); +} + +oslThreadPriority SAL_CALL osl_getThreadPriority(const oslThread Thread) +{ + int winPriority; + oslThreadPriority Priority; + + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + /* invalid arguments ?*/ + if(pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr) + { + return osl_Thread_PriorityUnknown; + } + + winPriority= + GetThreadPriority(pThreadImpl->m_hThread); + + if(winPriority == THREAD_PRIORITY_ERROR_RETURN) + { + return osl_Thread_PriorityUnknown; + } + + /* map WIN32 priority to enum */ + switch(winPriority) + { + case THREAD_PRIORITY_TIME_CRITICAL: + case THREAD_PRIORITY_HIGHEST: + Priority= osl_Thread_PriorityHighest; + break; + + case THREAD_PRIORITY_ABOVE_NORMAL: + Priority= osl_Thread_PriorityAboveNormal; + break; + + case THREAD_PRIORITY_NORMAL: + Priority= osl_Thread_PriorityNormal; + break; + + case THREAD_PRIORITY_BELOW_NORMAL: + Priority= osl_Thread_PriorityBelowNormal; + break; + + case THREAD_PRIORITY_IDLE: + case THREAD_PRIORITY_LOWEST: + Priority= osl_Thread_PriorityLowest; + break; + + default: + OSL_ASSERT(FALSE); /* WIN32 API changed, incorporate new prio-level! */ + + /* release-version behaves friendly */ + Priority= osl_Thread_PriorityUnknown; + } + + return Priority; +} + +sal_Bool SAL_CALL osl_isThreadRunning(const oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + /* invalid arguments ?*/ + if(pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr) + { + return false; + } + + return WaitForSingleObject(pThreadImpl->m_hThread, 0) != WAIT_OBJECT_0; +} + +void SAL_CALL osl_joinWithThread(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + /* invalid arguments?*/ + if(pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr) + { + /* assume thread is not running */ + return; + } + + WaitForSingleObject(pThreadImpl->m_hThread, INFINITE); +} + +void SAL_CALL osl_waitThread(const TimeValue* pDelay) +{ + if (pDelay) + { + DWORD millisecs = pDelay->Seconds * 1000L + pDelay->Nanosec / 1000000L; + + Sleep(millisecs); + } +} + +void SAL_CALL osl_terminateThread(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + /* invalid arguments?*/ + if (pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr) + { + /* assume thread is not running */ + return; + } + + osl_atomic_increment(&(pThreadImpl->m_nTerminationRequested)); +} + +sal_Bool SAL_CALL osl_scheduleThread(oslThread Thread) +{ + osl_TThreadImpl* pThreadImpl= static_cast(Thread); + + osl_yieldThread(); + + /* invalid arguments?*/ + if (pThreadImpl==nullptr || pThreadImpl->m_hThread==nullptr) + { + /* assume thread is not running */ + return false; + } + + return 0 == pThreadImpl->m_nTerminationRequested; +} + +void SAL_CALL osl_yieldThread(void) +{ + Sleep(0); +} + +static void impSetThreadDescription(char const * name) { + // SetThreadDescription is only available since Windows 10 version 1607 + typedef HRESULT(WINAPI * TSetThreadDescription)(HANDLE, PCWSTR); + static const auto pSetThreadDescription = reinterpret_cast( + GetProcAddress(GetModuleHandleA("KernelBase.dll"), "SetThreadDescription")); + if (pSetThreadDescription) + { + if (const int nReqCCh = MultiByteToWideChar(CP_ACP, 0, name, -1, nullptr, 0)) + { + if (PWSTR wStr = static_cast(malloc(nReqCCh * sizeof(WCHAR)))) + { + if (MultiByteToWideChar(CP_ACP, 0, name, -1, wStr, nReqCCh)) + pSetThreadDescription(GetCurrentThread(), wStr); + free(wStr); + } + } + } +} + +void SAL_CALL osl_setThreadName(char const * name) { + /* See < https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code >: */ +#pragma pack(push, 8) + struct { + DWORD dwType = 0x1000; + LPCSTR szName; + DWORD dwThreadID = DWORD(-1); + DWORD dwFlags = 0; + } info; +#pragma pack(pop) + info.szName = name; + __try { + RaiseException( + 0x406D1388, 0, sizeof info / sizeof (ULONG_PTR), + reinterpret_cast(&info)); + } __except (EXCEPTION_EXECUTE_HANDLER) {} + + impSetThreadDescription(name); +} + +namespace { + +typedef struct TLS_ +{ + DWORD dwIndex; + oslThreadKeyCallbackFunction pfnCallback; + struct TLS_ *pNext, *pPrev; +} TLS, *PTLS; + +PTLS g_pThreadKeyList = nullptr; +osl::Mutex& getThreadKeyListMutex() +{ + static osl::Mutex g_ThreadKeyListMutex; + return g_ThreadKeyListMutex; +} + +} + +static void AddKeyToList( PTLS pTls ) +{ + if ( pTls ) + { + osl::MutexGuard aGuard(getThreadKeyListMutex()); + + pTls->pNext = g_pThreadKeyList; + pTls->pPrev = nullptr; + + if ( g_pThreadKeyList ) + g_pThreadKeyList->pPrev = pTls; + + g_pThreadKeyList = pTls; + } +} + +static void RemoveKeyFromList( PTLS pTls ) +{ + if ( pTls ) + { + osl::MutexGuard aGuard(getThreadKeyListMutex()); + if ( pTls->pPrev ) + pTls->pPrev->pNext = pTls->pNext; + else + { + OSL_ASSERT( pTls == g_pThreadKeyList ); + g_pThreadKeyList = pTls->pNext; + } + + if ( pTls->pNext ) + pTls->pNext->pPrev = pTls->pPrev; + } +} + +void osl_callThreadKeyCallbackOnThreadDetach(void) +{ + PTLS pTls; + + osl::MutexGuard aGuard(getThreadKeyListMutex()); + pTls = g_pThreadKeyList; + while ( pTls ) + { + if ( pTls->pfnCallback ) + { + void *pValue = TlsGetValue( pTls->dwIndex ); + + if ( pValue ) + pTls->pfnCallback( pValue ); + } + + pTls = pTls->pNext; + } +} + +oslThreadKey SAL_CALL osl_createThreadKey(oslThreadKeyCallbackFunction pCallback) +{ + PTLS pTls = static_cast(malloc( sizeof(TLS) )); + + if ( pTls ) + { + pTls->pfnCallback = pCallback; + if ( DWORD(-1) == (pTls->dwIndex = TlsAlloc()) ) + { + free( pTls ); + pTls = nullptr; + } + else + AddKeyToList( pTls ); + } + + return pTls; +} + +void SAL_CALL osl_destroyThreadKey(oslThreadKey Key) +{ + if (Key != nullptr) + { + PTLS pTls = static_cast(Key); + + RemoveKeyFromList( pTls ); + TlsFree( pTls->dwIndex ); + free( pTls ); + } +} + +void* SAL_CALL osl_getThreadKeyData(oslThreadKey Key) +{ + if (Key != nullptr) + { + PTLS pTls = static_cast(Key); + + return TlsGetValue( pTls->dwIndex ); + } + + return nullptr; +} + +sal_Bool SAL_CALL osl_setThreadKeyData(oslThreadKey Key, void *pData) +{ + if (Key != nullptr) + { + PTLS pTls = static_cast(Key); + void* pOldData = nullptr; + bool fSuccess; + + if ( pTls->pfnCallback ) + pOldData = TlsGetValue( pTls->dwIndex ); + + fSuccess = TlsSetValue( pTls->dwIndex, pData ); + + if ( fSuccess && pTls->pfnCallback && pOldData ) + pTls->pfnCallback( pOldData ); + + return fSuccess; + } + + return false; +} + +namespace +{ +rtl_TextEncoding& getThreadTextEncodingImpl() +{ + static thread_local rtl_TextEncoding s_enc = rtl_getTextEncodingFromWindowsCodePage(GetACP()); + return s_enc; +} +} + +rtl_TextEncoding SAL_CALL osl_getThreadTextEncoding(void) { return getThreadTextEncodingImpl(); } + +rtl_TextEncoding SAL_CALL osl_setThreadTextEncoding( rtl_TextEncoding Encoding ) +{ + rtl_TextEncoding oldEncoding = getThreadTextEncodingImpl(); + getThreadTextEncodingImpl() = Encoding; + return oldEncoding; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/thread.hxx b/sal/osl/w32/thread.hxx new file mode 100644 index 000000000..8002d8b7f --- /dev/null +++ b/sal/osl/w32/thread.hxx @@ -0,0 +1,18 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include + +#include + +void osl_callThreadKeyCallbackOnThreadDetach(void); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/osl/w32/time.cxx b/sal/osl/w32/time.cxx new file mode 100644 index 000000000..3f11746fe --- /dev/null +++ b/sal/osl/w32/time.cxx @@ -0,0 +1,200 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include "system.h" + +#include "filetime.hxx" +#include "time.hxx" + +#include +#include +#include + +sal_Bool SAL_CALL osl_getSystemTime(TimeValue* pTimeVal) +{ + unsigned __int64 CurTime; + + typedef VOID (WINAPI *GetSystemTimePreciseAsFileTime_PROC)(LPFILETIME); + + OSL_ASSERT(pTimeVal != nullptr); + + static GetSystemTimePreciseAsFileTime_PROC pGetSystemTimePreciseAsFileTime = []() + { + HMODULE hModule = GetModuleHandleW( L"Kernel32.dll" ); + return reinterpret_cast( + GetProcAddress(hModule, "GetSystemTimePreciseAsFileTime")); + }(); + + // use ~1 microsecond resolution if available + if (pGetSystemTimePreciseAsFileTime) + pGetSystemTimePreciseAsFileTime(reinterpret_cast(&CurTime)); + else + { + SYSTEMTIME SystemTime; + GetSystemTime(&SystemTime); + SystemTimeToFileTime(&SystemTime, reinterpret_cast(&CurTime)); + } + + static const unsigned __int64 OffTime = [] { + SYSTEMTIME SystemTime; + SystemTime.wYear = 1970; + SystemTime.wMonth = 1; + SystemTime.wDayOfWeek = 0; + SystemTime.wDay = 1; + SystemTime.wHour = 0; + SystemTime.wMinute = 0; + SystemTime.wSecond = 0; + SystemTime.wMilliseconds = 0; + + unsigned __int64 ft; + SystemTimeToFileTime(&SystemTime, reinterpret_cast(&ft)); + return ft; + }(); + + const unsigned __int64 Value = CurTime - OffTime; + + pTimeVal->Seconds = static_cast(Value / 10000000L); + pTimeVal->Nanosec = static_cast((Value % 10000000L) * 100); + + return true; +} + +sal_Bool SAL_CALL osl_getDateTimeFromTimeValue( const TimeValue* pTimeVal, oslDateTime* pDateTime ) +{ + FILETIME aFileTime; + SYSTEMTIME aSystemTime; + + if ( TimeValueToFileTime(pTimeVal, &aFileTime) ) + { + if ( FileTimeToSystemTime( &aFileTime, &aSystemTime ) ) + { + pDateTime->NanoSeconds = pTimeVal->Nanosec; + + pDateTime->Seconds = aSystemTime.wSecond; + pDateTime->Minutes = aSystemTime.wMinute; + pDateTime->Hours = aSystemTime.wHour; + pDateTime->Day = aSystemTime.wDay; + pDateTime->DayOfWeek = aSystemTime.wDayOfWeek; + pDateTime->Month = aSystemTime.wMonth; + pDateTime->Year = aSystemTime.wYear; + + return true; + } + } + + return false; +} + +sal_Bool SAL_CALL osl_getTimeValueFromDateTime( const oslDateTime* pDateTime, TimeValue* pTimeVal ) +{ + FILETIME aFileTime; + SYSTEMTIME aSystemTime; + + aSystemTime.wMilliseconds = 0; + aSystemTime.wSecond = pDateTime->Seconds; + aSystemTime.wMinute = pDateTime->Minutes; + aSystemTime.wHour = pDateTime->Hours; + aSystemTime.wDay = pDateTime->Day; + aSystemTime.wDayOfWeek = pDateTime->DayOfWeek; + aSystemTime.wMonth = pDateTime->Month; + aSystemTime.wYear = pDateTime->Year; + + if ( SystemTimeToFileTime( &aSystemTime, &aFileTime ) ) + { + if (FileTimeToTimeValue( &aFileTime, pTimeVal ) ) + { + pTimeVal->Nanosec = pDateTime->NanoSeconds; + return true; + } + } + + return false; +} + +sal_Bool SAL_CALL osl_getLocalTimeFromSystemTime( const TimeValue* pSystemTimeVal, TimeValue* pLocalTimeVal ) +{ + TIME_ZONE_INFORMATION aTimeZoneInformation; + + // get timezone information + DWORD Success = GetTimeZoneInformation( &aTimeZoneInformation ); + if (Success == TIME_ZONE_ID_INVALID) + return false; + + sal_Int64 bias = aTimeZoneInformation.Bias; + + // add bias for daylight saving time + if ( Success == TIME_ZONE_ID_DAYLIGHT ) + bias+=aTimeZoneInformation.DaylightBias; + + if ( static_cast(pSystemTimeVal->Seconds) > ( bias * 60 ) ) + { + pLocalTimeVal->Seconds = static_cast(pSystemTimeVal->Seconds - ( bias * 60) ); + pLocalTimeVal->Nanosec = pSystemTimeVal->Nanosec; + + return true; + } + return false; +} + +sal_Bool SAL_CALL osl_getSystemTimeFromLocalTime( const TimeValue* pLocalTimeVal, TimeValue* pSystemTimeVal ) +{ + TIME_ZONE_INFORMATION aTimeZoneInformation; + + // get timezone information + DWORD Success = GetTimeZoneInformation( &aTimeZoneInformation ); + if ( Success == TIME_ZONE_ID_INVALID ) + return false; + + sal_Int64 bias = aTimeZoneInformation.Bias; + + // add bias for daylight saving time + if ( Success == TIME_ZONE_ID_DAYLIGHT ) + bias+=aTimeZoneInformation.DaylightBias; + + if ( static_cast(pLocalTimeVal->Seconds) + ( bias * 60 ) > 0 ) + { + pSystemTimeVal->Seconds = static_cast( pLocalTimeVal->Seconds + ( bias * 60) ); + pSystemTimeVal->Nanosec = pLocalTimeVal->Nanosec; + + return true; + } + + return false; +} + +static struct _timeb startTime; +void sal_initGlobalTimer() +{ + _ftime( &startTime ); +} + +sal_uInt32 SAL_CALL osl_getGlobalTimer(void) +{ + struct _timeb currentTime; + sal_uInt32 nSeconds; + + _ftime( ¤tTime ); + + nSeconds = static_cast( currentTime.time - startTime.time ); + + return ( nSeconds * 1000 ) + static_cast( currentTime.millitm - startTime.millitm ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/osl/w32/time.hxx b/sal/osl/w32/time.hxx new file mode 100644 index 000000000..c0ca9d777 --- /dev/null +++ b/sal/osl/w32/time.hxx @@ -0,0 +1,19 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_OSL_W32_TIME_HXX +#define INCLUDED_SAL_OSL_W32_TIME_HXX + +#include + +void sal_initGlobalTimer(void); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/ByteSequence/ByteSequence.cxx b/sal/qa/ByteSequence/ByteSequence.cxx new file mode 100644 index 000000000..f5541a0f3 --- /dev/null +++ b/sal/qa/ByteSequence/ByteSequence.cxx @@ -0,0 +1,183 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include + +namespace { + +class Test: public CppUnit::TestFixture { +public: + void test_default() { + rtl::ByteSequence s; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + } + + void test_size0() { + rtl::ByteSequence s(sal_Int32(0)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + } + + void test_size5() { + rtl::ByteSequence s(5); + sal_Int8 const * p = s.getConstArray(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[0]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[1]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[2]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[3]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[4]); + } + + void test_noinit0() { + rtl::ByteSequence s(0, rtl::BYTESEQ_NODEFAULT); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + } + + void test_noinit5() { + rtl::ByteSequence s(5, rtl::BYTESEQ_NODEFAULT); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); + } + + void test_elem0() { + rtl::ByteSequence s(nullptr, 0); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + } + + void test_elem5() { + sal_Int8 const a[5] = { 0, 1, 2, 3, 4 }; + rtl::ByteSequence s(a, 5); + sal_Int8 const * p = s.getConstArray(); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); + CPPUNIT_ASSERT_EQUAL(sal_Int8(0), p[0]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(1), p[1]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(2), p[2]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(3), p[3]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(4), p[4]); + } + + void test_copy() { + rtl::ByteSequence s1(5); + { + rtl::ByteSequence s2(s1); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s2.getLength()); + CPPUNIT_ASSERT_EQUAL(s1.getConstArray(), s2.getConstArray()); + CPPUNIT_ASSERT_EQUAL(s1.getHandle(), s2.getHandle()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s1.getHandle()->nRefCount); + } + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getHandle()->nRefCount); + } + + void test_fromC() { + sal_Sequence c = { 1, 1, { 0 } }; + { + rtl::ByteSequence s(&c); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength()); + CPPUNIT_ASSERT_EQUAL( + static_cast< void const * >(c.elements), + static_cast< void const * >(s.getConstArray())); + CPPUNIT_ASSERT_EQUAL(&c, s.getHandle()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), c.nRefCount); + } + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), c.nRefCount); + } + + void test_noacquire() { + sal_Sequence c = { 2, 1, { 0 } }; + { + rtl::ByteSequence s(&c, rtl::BYTESEQ_NOACQUIRE); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength()); + CPPUNIT_ASSERT_EQUAL( + static_cast< void const * >(c.elements), + static_cast< void const * >(s.getConstArray())); + CPPUNIT_ASSERT_EQUAL(&c, s.getHandle()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), c.nRefCount); + } + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), c.nRefCount); + } + + void test_getArray() { + sal_Int8 const a[5] = { 0, 1, 2, 3, 4 }; + rtl::ByteSequence s1(a, 5); + rtl::ByteSequence s2(s1); + sal_Int8 * p = s2.getArray(); + p[2] = 10; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getHandle()->nRefCount); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s2.getHandle()->nRefCount); + CPPUNIT_ASSERT_EQUAL(sal_Int8(2), s1.getConstArray()[2]); + CPPUNIT_ASSERT_EQUAL(sal_Int8(10), s2.getConstArray()[2]); + } + + void test_same0() { + rtl::ByteSequence s1; + rtl::ByteSequence s2; + CPPUNIT_ASSERT_EQUAL(true, s1 == s2); + CPPUNIT_ASSERT_EQUAL(true, s2 == s1); + CPPUNIT_ASSERT_EQUAL(false, s1 != s2); + CPPUNIT_ASSERT_EQUAL(false, s2 != s1); + } + + void test_diffLen() { + sal_Int8 const a[5] = { 0, 1, 2, 3, 4 }; + rtl::ByteSequence s1(a, 5); + rtl::ByteSequence s2(a, 4); + CPPUNIT_ASSERT_EQUAL(false, s1 == s2); + CPPUNIT_ASSERT_EQUAL(false, s2 == s1); + CPPUNIT_ASSERT_EQUAL(true, s1 != s2); + CPPUNIT_ASSERT_EQUAL(true, s2 != s1); + } + + void test_diffElem() { + sal_Int8 const a1[5] = { 0, 1, 2, 3, 4 }; + rtl::ByteSequence s1(a1, 5); + sal_Int8 const a2[5] = { 0, 1, 10, 3, 4 }; + rtl::ByteSequence s2(a2, 5); + CPPUNIT_ASSERT_EQUAL(false, s1 == s2); + CPPUNIT_ASSERT_EQUAL(false, s2 == s1); + CPPUNIT_ASSERT_EQUAL(true, s1 != s2); + CPPUNIT_ASSERT_EQUAL(true, s2 != s1); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test_default); + CPPUNIT_TEST(test_size0); + CPPUNIT_TEST(test_size5); + CPPUNIT_TEST(test_noinit0); + CPPUNIT_TEST(test_noinit5); + CPPUNIT_TEST(test_elem0); + CPPUNIT_TEST(test_elem5); + CPPUNIT_TEST(test_copy); + CPPUNIT_TEST(test_fromC); + CPPUNIT_TEST(test_noacquire); + CPPUNIT_TEST(test_getArray); + CPPUNIT_TEST(test_same0); + CPPUNIT_TEST(test_diffLen); + CPPUNIT_TEST(test_diffElem); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx new file mode 100644 index 000000000..5b55d8a49 --- /dev/null +++ b/sal/qa/OStringBuffer/rtl_OStringBuffer.cxx @@ -0,0 +1,18393 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include "rtl_String_Const.h" +#include + +#include +#include +#include +#include +#include + +// This file contains cppunit tests for the +// OString and OStringBuffer classes + +// testing constructors +namespace rtl_OStringBuffer +{ + class ctors : public CppUnit::TestFixture + { + public: + + void ctor_001() + { + OStringBuffer aStrBuf; + const char* pStr = aStrBuf.getStr(); + + CPPUNIT_ASSERT_MESSAGE + ( + "New OStringBuffer containing no characters", + aStrBuf.isEmpty() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer containing no characters", + '\0', *pStr + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer containing no characters", + sal_Int32(16), aStrBuf.getCapacity() + ); + } + + void ctor_002() + { + OString aStrtmp( kTestStr1 ); + OStringBuffer aStrBuftmp( aStrtmp ); + OStringBuffer aStrBuf( aStrBuftmp ); + // sal_Bool res = cmpstr(aStrBuftmp.getStr(),aStrBuf.getStr()); + + sal_Int32 nLenStrBuftmp = aStrBuftmp.getLength(); + + OString sStr(aStrBuftmp.getStr()); + bool res = aStrtmp == sStr; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from another OStringBuffer", + nLenStrBuftmp, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from another OStringBuffer", + aStrBuftmp.getCapacity(), aStrBuf.getCapacity() + ); + CPPUNIT_ASSERT_MESSAGE + ( + "New OStringBuffer from another OStringBuffer", + res + ); + + } + + void ctor_003() + { + OStringBuffer aStrBuf1(kTestStr2Len); + OStringBuffer aStrBuf2(0); + + const char* pStr1 = aStrBuf1.getStr(); + const char* pStr2 = aStrBuf2.getStr(); + + CPPUNIT_ASSERT_MESSAGE + ( + "New OStringBuffer containing no characters and contain assigned capacity", + aStrBuf1.isEmpty() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer containing no characters and contain assigned capacity", + '\0', *pStr1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer containing no characters and contain assigned capacity", + kTestStr2Len, aStrBuf1.getCapacity() + ); + CPPUNIT_ASSERT_MESSAGE + ( + "New OStringBuffer containing no characters and contain assigned capacity", + aStrBuf2.isEmpty() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer containing no characters and contain assigned capacity", + '\0', *pStr2 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer containing no characters and contain assigned capacity", + sal_Int32(0), aStrBuf2.getCapacity() + ); + + } + + void ctor_004() + { + OString aStrtmp( kTestStr1 ); + OStringBuffer aStrBuf( aStrtmp ); + sal_Int32 leg = aStrBuf.getLength(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from OString", + aStrtmp, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from OString", + aStrtmp.pData->length, leg + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from OString", + leg+16, aStrBuf.getCapacity() + + ); + } + + void ctor_005() { + OStringBuffer b1; + auto dummy = b1.makeStringAndClear(); + (void)dummy; + OStringBuffer b2(b1); + (void)b2; + } + + void ctor_006() + { + //pass in a const char*, get a temp + //OString + OStringBuffer aStrBuf(kTestStr1); + sal_Int32 leg = aStrBuf.getLength(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from const char*", + rtl_str_getLength(kTestStr1), leg + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "New OStringBuffer from const char*", + leg+16, aStrBuf.getCapacity() + ); + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctor_001); + CPPUNIT_TEST(ctor_002); + CPPUNIT_TEST(ctor_003); + CPPUNIT_TEST(ctor_004); + CPPUNIT_TEST(ctor_005); + CPPUNIT_TEST(ctor_006); + CPPUNIT_TEST_SUITE_END(); + }; + + class makeStringAndClear : public CppUnit::TestFixture + { + OString arrOUS[6]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr1 ); + arrOUS[1] = OString( kTestStr14 ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( kTestStr27 ); + arrOUS[4] = OString( kTestStr29 ); + arrOUS[5] = OString( "\0", 1 ); + + } + + void makeStringAndClear_001() + { + OStringBuffer aStrBuf1; + + bool lastRes = aStrBuf1.makeStringAndClear().isEmpty(); + + CPPUNIT_ASSERT_MESSAGE + ( + "two empty strings(def. constructor)", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "two empty strings(def. constructor)", + sal_Int32(0), aStrBuf1.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "two empty strings(def. constructor)", + '\0', *(aStrBuf1.getStr()) + ); + + } + + void makeStringAndClear_002() + { + OStringBuffer aStrBuf2(26); + + bool lastRes = aStrBuf2.makeStringAndClear().isEmpty(); + + CPPUNIT_ASSERT_MESSAGE + ( + "two empty strings(with an argu)", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "two empty strings(with an argu)", + sal_Int32(0), aStrBuf2.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "two empty strings(with an argu)", + '\0', *(aStrBuf2.getStr()) + ); + + } + + void makeStringAndClear_003() + { + OStringBuffer aStrBuf3(arrOUS[0]); + OString aStr3(arrOUS[0]); + + bool lastRes = (aStrBuf3.makeStringAndClear() == aStr3 ); + + CPPUNIT_ASSERT_MESSAGE + ( + "normal string", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "normal string", + sal_Int32(0), aStrBuf3.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "normal string", + '\0', *(aStrBuf3.getStr()) + ); + + } + + void makeStringAndClear_004() + { + OStringBuffer aStrBuf4(arrOUS[1]); + OString aStr4(arrOUS[1]); + + bool lastRes = (aStrBuf4.makeStringAndClear() == aStr4 ); + + CPPUNIT_ASSERT_MESSAGE + ( + "string with space ", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string with space ", + sal_Int32(0), aStrBuf4.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string with space ", + '\0', *(aStrBuf4.getStr()) + ); + } + + void makeStringAndClear_005() + { + OStringBuffer aStrBuf5(arrOUS[2]); + OString aStr5(arrOUS[2]); + + bool lastRes = (aStrBuf5.makeStringAndClear() == aStr5 ); + + CPPUNIT_ASSERT_MESSAGE + ( + "empty string", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "empty string", + sal_Int32(0), aStrBuf5.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "empty string", + '\0', *(aStrBuf5.getStr()) + ); + } + + void makeStringAndClear_006() + { + OStringBuffer aStrBuf6(arrOUS[3]); + OString aStr6(arrOUS[3]); + + bool lastRes = (aStrBuf6.makeStringAndClear() == aStr6 ); + + CPPUNIT_ASSERT_MESSAGE + ( + "string with a character", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string with a character", + sal_Int32(0), aStrBuf6.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string with a character", + '\0', *(aStrBuf6.getStr()) + ); + } + + void makeStringAndClear_007() + { + OStringBuffer aStrBuf7(arrOUS[4]); + OString aStr7(arrOUS[4]); + + bool lastRes = (aStrBuf7.makeStringAndClear() == aStr7 ); + + CPPUNIT_ASSERT_MESSAGE + ( + "string with special characters", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string with special characters", + sal_Int32(0), aStrBuf7.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string with special characters", + '\0', *(aStrBuf7.getStr()) + ); + } + + void makeStringAndClear_008() + { + OStringBuffer aStrBuf8(arrOUS[5]); + OString aStr8(arrOUS[5]); + + bool lastRes = (aStrBuf8.makeStringAndClear() == aStr8 ); + + CPPUNIT_ASSERT_MESSAGE + ( + "string only with (\0)", + lastRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string only with (\0)", + sal_Int32(0), aStrBuf8.getCapacity() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "string only with (\0)", + '\0', *(aStrBuf8.getStr()) + ); + } + + CPPUNIT_TEST_SUITE(makeStringAndClear); + CPPUNIT_TEST(makeStringAndClear_001); + CPPUNIT_TEST(makeStringAndClear_002); + CPPUNIT_TEST(makeStringAndClear_003); + CPPUNIT_TEST(makeStringAndClear_004); + CPPUNIT_TEST(makeStringAndClear_005); + CPPUNIT_TEST(makeStringAndClear_006); + CPPUNIT_TEST(makeStringAndClear_007); + CPPUNIT_TEST(makeStringAndClear_008); + CPPUNIT_TEST_SUITE_END(); + }; + + class remove : public CppUnit::TestFixture + { + public: + void remove_001() + { + OStringBuffer sb( + RTL_CONSTASCII_STRINGPARAM("Red Hat, Inc.")); + + sb.remove(0, 4); + CPPUNIT_ASSERT(sb.toString().equalsL( + RTL_CONSTASCII_STRINGPARAM("Hat, Inc."))); + + sb.remove(3, 6); + CPPUNIT_ASSERT(sb.toString().equalsL( + RTL_CONSTASCII_STRINGPARAM("Hat"))); + + sb.remove(0, 100); + + CPPUNIT_ASSERT(sb.toString().isEmpty()); + + sb.append(RTL_CONSTASCII_STRINGPARAM("Red Hat, Inc.")); + + sb.remove(3, 100); + + CPPUNIT_ASSERT(sb.toString().equalsL( + RTL_CONSTASCII_STRINGPARAM("Red"))); + + sb.remove(0, sb.getLength()); + + CPPUNIT_ASSERT(sb.toString().isEmpty()); + } + + CPPUNIT_TEST_SUITE(remove); + CPPUNIT_TEST(remove_001); + CPPUNIT_TEST_SUITE_END(); + }; + + class getLength : public CppUnit::TestFixture + { + OString arrOUS[6]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr1 ); + arrOUS[1] = OString( "1" ); + arrOUS[2] = OString( ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( "\0", 1 ); + arrOUS[5] = OString( kTestStr2 ); + + } + + void getLength_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal = kTestStr1Len; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of ascii string", + expVal, aStrBuf.getLength() + ); + + } + + void getLength_002() + { + OStringBuffer aStrBuf( arrOUS[1] ); + sal_Int32 expVal = 1; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of ascii string of size 1", + expVal, aStrBuf.getLength() + ); + } + + void getLength_003() + { + OStringBuffer aStrBuf( arrOUS[2] ); + sal_Int32 expVal = 0; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of empty string", + expVal, aStrBuf.getLength() + ); + } + + void getLength_004() + { + OStringBuffer aStrBuf( arrOUS[3] ); + sal_Int32 expVal = 0; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of empty string (empty ascii string arg)", + expVal, aStrBuf.getLength() + ); + } + + void getLength_005() + { + OStringBuffer aStrBuf( arrOUS[4] ); + sal_Int32 expVal = 1; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of string with \\0 embedded", + expVal, aStrBuf.getLength() + ); + } + + void getLength_006() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal = kTestStr2Len; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length(>16) of ascii string", + expVal, aStrBuf.getLength() + ); + } + + void getLength_007() + { + OStringBuffer aStrBuf; + sal_Int32 expVal = 0; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of empty string (default constructor)", + expVal, aStrBuf.getLength() + ); + } + + void getLength_008() + { + OStringBuffer aStrBuf( 26 ); + sal_Int32 expVal = 0; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "length of empty string (with capacity)", + expVal, aStrBuf.getLength() + ); + } + + CPPUNIT_TEST_SUITE( getLength ); + CPPUNIT_TEST( getLength_001 ); + CPPUNIT_TEST( getLength_002 ); + CPPUNIT_TEST( getLength_003 ); + CPPUNIT_TEST( getLength_004 ); + CPPUNIT_TEST( getLength_005 ); + CPPUNIT_TEST( getLength_006 ); + CPPUNIT_TEST( getLength_007 ); + CPPUNIT_TEST( getLength_008 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class getCapacity : public CppUnit::TestFixture + { + OString arrOUS[6]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr1 ); + arrOUS[1] = OString( "1" ); + arrOUS[2] = OString( ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( "\0", 1 ); + arrOUS[5] = OString( kTestStr2 ); + + } + + void getCapacity_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal = kTestStr1Len+16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of ascii string", + expVal, aStrBuf.getCapacity() + ); + + } + + void getCapacity_002() + { + OStringBuffer aStrBuf( arrOUS[1] ); + sal_Int32 expVal = 1+16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of ascii string of size 1", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_003() + { + OStringBuffer aStrBuf( arrOUS[2] ); + sal_Int32 expVal = 0+16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of empty string", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_004() + { + OStringBuffer aStrBuf( arrOUS[3] ); + sal_Int32 expVal = 0+16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of empty string (empty ascii string arg)", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_005() + { + OStringBuffer aStrBuf( arrOUS[4] ); + sal_Int32 expVal = 1+16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of string with \\0 embedded", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_006() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal = kTestStr2Len+16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity(>16) of ascii string", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_007() + { + OStringBuffer aStrBuf; + sal_Int32 expVal = 16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of empty string (default constructor)", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_010() + { + OStringBuffer aStrBuf( 16 ); + sal_Int32 expVal = 16; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of empty string (with capacity 16)", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_011() + { + OStringBuffer aStrBuf( 6 ); + sal_Int32 expVal = 6; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of empty string (with capacity 6)", + expVal, aStrBuf.getCapacity() + ); + } + + void getCapacity_012() + { + OStringBuffer aStrBuf( 0 ); + sal_Int32 expVal = 0; + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity of empty string (with capacity 0)", + expVal, aStrBuf.getCapacity() + ); + } + + CPPUNIT_TEST_SUITE( getCapacity ); + CPPUNIT_TEST( getCapacity_001 ); + CPPUNIT_TEST( getCapacity_002 ); + CPPUNIT_TEST( getCapacity_003 ); + CPPUNIT_TEST( getCapacity_004 ); + CPPUNIT_TEST( getCapacity_005 ); + CPPUNIT_TEST( getCapacity_006 ); + CPPUNIT_TEST( getCapacity_007 ); + CPPUNIT_TEST( getCapacity_010 ); + CPPUNIT_TEST( getCapacity_011 ); + CPPUNIT_TEST( getCapacity_012 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class ensureCapacity : public CppUnit::TestFixture + { + void ensureCapacity_001() + { + sal_Int32 expVal = 16; + OStringBuffer aStrBuf; + sal_Int32 input = 5; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 16, minimum is 5", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_002() + { + sal_Int32 expVal = 16; + OStringBuffer aStrBuf; + sal_Int32 input = -5; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 16, minimum is -5", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_003() + { + sal_Int32 expVal = 16; + OStringBuffer aStrBuf; + sal_Int32 input = 0; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 16, minimum is 0", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_004() //the testcase is based on comments + { + sal_Int32 expVal = 20; + OStringBuffer aStrBuf; + sal_Int32 input = 20; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 16, minimum is 20", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_005() + { + sal_Int32 expVal = 50; + OStringBuffer aStrBuf; + sal_Int32 input = 50; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 16, minimum is 50", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_006() + { + sal_Int32 expVal = 20; + OStringBuffer aStrBuf( 6 ); + sal_Int32 input = 20; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 6, minimum is 20", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_007() + { + sal_Int32 expVal = 6; + OStringBuffer aStrBuf( 6 ); + sal_Int32 input = 2; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 6, minimum is 2", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_008() + { + sal_Int32 expVal = 6; + OStringBuffer aStrBuf( 6 ); + sal_Int32 input = -6; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 6, minimum is -6", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_009() //the testcase is based on comments + { + sal_Int32 expVal = 10; + OStringBuffer aStrBuf( 6 ); + sal_Int32 input = 10; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 6, minimum is -6", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_010() + { + sal_Int32 expVal = 6; + OStringBuffer aStrBuf( 0 ); + sal_Int32 input = 6; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 0, minimum is 6", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_011() //the testcase is based on comments + { + sal_Int32 expVal = 2; // capacity is x = (str->length + 1) * 2; minimum < x ? x : minimum + OStringBuffer aStrBuf( 0 ); + sal_Int32 input = 1; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 0, minimum is 1", + expVal, aStrBuf.getCapacity() + ); + + } + + void ensureCapacity_012() + { + sal_Int32 expVal = 0; + OStringBuffer aStrBuf( 0 ); + sal_Int32 input = -1; + + aStrBuf.ensureCapacity( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "capacity equal to 0, minimum is -1", + expVal, aStrBuf.getCapacity() + ); + + } + + CPPUNIT_TEST_SUITE( ensureCapacity ); + CPPUNIT_TEST( ensureCapacity_001 ); + CPPUNIT_TEST( ensureCapacity_002 ); + CPPUNIT_TEST( ensureCapacity_003 ); + CPPUNIT_TEST( ensureCapacity_004 ); + CPPUNIT_TEST( ensureCapacity_005 ); + CPPUNIT_TEST( ensureCapacity_006 ); + CPPUNIT_TEST( ensureCapacity_007 ); + CPPUNIT_TEST( ensureCapacity_008 ); + CPPUNIT_TEST( ensureCapacity_009 ); + CPPUNIT_TEST( ensureCapacity_010 ); + CPPUNIT_TEST( ensureCapacity_011 ); + CPPUNIT_TEST( ensureCapacity_012 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class setLength : public CppUnit::TestFixture + { + OString arrOUS[6]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr1 ); + arrOUS[1] = OString( "1" ); + arrOUS[2] = OString( ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( "\0", 1 ); + arrOUS[5] = OString( kTestStr2 ); + + } + + void setLength_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal1 = 50; + OString expVal2( kTestStr1 ); + sal_Int32 expVal3 = 50; + sal_Int32 input = 50; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(kTestStr1)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(kTestStr1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(kTestStr1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal1 = kTestStr13Len; + OString expVal2( kTestStr1 ); + sal_Int32 expVal3 = 32; + sal_Int32 input = kTestStr13Len; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(kTestStr1)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(kTestStr1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(kTestStr1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal1 = kTestStr1Len; + OString expVal2( kTestStr1 ); + sal_Int32 expVal3 = 32; + sal_Int32 input = kTestStr1Len; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OStringBuffer(kTestStr1)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OStringBuffer(kTestStr1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OStringBuffer(kTestStr1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal1 = kTestStr7Len; + OString expVal2( kTestStr7 ); + sal_Int32 expVal3 = 32; + sal_Int32 input = kTestStr7Len; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer(kTestStr1)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer(kTestStr1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer(kTestStr1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + sal_Int32 expVal1 = 0; + sal_Int32 expVal3 = 32; + sal_Int32 input = 0; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to 0", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to 0", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to 0", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_006() + { + OStringBuffer aStrBuf( arrOUS[1] ); + sal_Int32 expVal1 = 25; + OString expVal2( arrOUS[1] ); + sal_Int32 expVal3 = 25; + sal_Int32 input = 25; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(1)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_007() + { + OStringBuffer aStrBuf( arrOUS[1] ); + sal_Int32 expVal1 = kTestStr27Len; + OString expVal2( arrOUS[1] ); + sal_Int32 expVal3 = 17; + sal_Int32 input = kTestStr27Len; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OStringBuffer(1)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OStringBuffer(1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OStringBuffer(1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_008() + { + OStringBuffer aStrBuf( arrOUS[1] ); + sal_Int32 expVal1 = 0; + sal_Int32 expVal3 = 17; + sal_Int32 input = 0; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OUStringBuffer(1)", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OUStringBuffer(1)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OUStringBuffer(1)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_009() + { + OStringBuffer aStrBuf( arrOUS[2] ); + sal_Int32 expVal1 = 20; + sal_Int32 expVal3 = 20; + sal_Int32 input = 20; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer()", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer()", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer()", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_010() + { + OStringBuffer aStrBuf( arrOUS[2] ); + sal_Int32 expVal1 = 3; + sal_Int32 expVal3 = 16; + sal_Int32 input = 3; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer()", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer()", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer()", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_011() + { + OStringBuffer aStrBuf( arrOUS[2] ); + sal_Int32 expVal1 = 0; + sal_Int32 expVal3 = 16; + sal_Int32 input = 0; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer()", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer()", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer()", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_012() + { + OStringBuffer aStrBuf( arrOUS[3] ); + sal_Int32 expVal1 = 20; + sal_Int32 expVal3 = 20; + sal_Int32 input = 20; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer("")", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer("")", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer("")", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_013() + { + OStringBuffer aStrBuf( arrOUS[3] ); + sal_Int32 expVal1 = 5; + sal_Int32 expVal3 = 16; + sal_Int32 input = 5; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer("")", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer("")", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer("")", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_014() + { + OStringBuffer aStrBuf( arrOUS[3] ); + sal_Int32 expVal1 = 0; + sal_Int32 expVal3 = 16; + sal_Int32 input = 0; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer("")", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer("")", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer("")", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_015() + { + OStringBuffer aStrBuf( arrOUS[4] ); + sal_Int32 expVal1 = 20; + sal_Int32 expVal3 = 20; + sal_Int32 input = 20; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(\0)", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(\0)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(\0)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_016() + { + OStringBuffer aStrBuf( arrOUS[4] ); + sal_Int32 expVal1 = 5; + sal_Int32 expVal3 = 17; + sal_Int32 input = 5; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(\0)", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(\0)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(\0)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_017() + { + OStringBuffer aStrBuf( arrOUS[4] ); + sal_Int32 expVal1 = 0; + sal_Int32 expVal3 = 17; + sal_Int32 input = 0; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer(\0)", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer(\0)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OStringBuffer(\0)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_018() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal1 = 50; + OString expVal2( kTestStr2 ); + sal_Int32 expVal3 = 66; + sal_Int32 input = 50; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(kTestStr2)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(kTestStr2)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the capacity of OStringBuffer(kTestStr2)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_019() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal1 = 40; + OString expVal2(kTestStr2); + sal_Int32 expVal3 = 48; + sal_Int32 input = 40; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(kTestStr2)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(kTestStr2)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength more than the length of OStringBuffer(kTestStr2)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_020() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal1 = kTestStr2Len; + OString expVal2(kTestStr2); + sal_Int32 expVal3 = 48; + sal_Int32 input = kTestStr2Len; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OUStringBuffer(kTestStr2)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OUStringBuffer(kTestStr2)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to the length of OUStringBuffer(kTestStr2)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_021() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal1 = kTestStr7Len; + OString expVal2(kTestStr7); + sal_Int32 expVal3 = 48; + sal_Int32 input = kTestStr7Len; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OUStringBuffer(TestStr2)", + expVal2, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OUStringBuffer(TestStr2)", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength less than the length of OUStringBuffer(TestStr2)", + expVal3, aStrBuf.getCapacity() + ); + + } + + void setLength_022() + { + OStringBuffer aStrBuf( arrOUS[5] ); + sal_Int32 expVal1 = 0; + sal_Int32 expVal3 = 48; + sal_Int32 input = 0; + + aStrBuf.setLength( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to 0", + '\0', aStrBuf.getStr()[0] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to 0", + expVal1, aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "newLength equal to 0", + expVal3, aStrBuf.getCapacity() + ); + + } + + CPPUNIT_TEST_SUITE( setLength ); + CPPUNIT_TEST( setLength_001 ); + CPPUNIT_TEST( setLength_002 ); + CPPUNIT_TEST( setLength_003 ); + CPPUNIT_TEST( setLength_004 ); + CPPUNIT_TEST( setLength_005 ); + CPPUNIT_TEST( setLength_006 ); + CPPUNIT_TEST( setLength_007 ); + CPPUNIT_TEST( setLength_008 ); + CPPUNIT_TEST( setLength_009 ); + CPPUNIT_TEST( setLength_010 ); + CPPUNIT_TEST( setLength_011 ); + CPPUNIT_TEST( setLength_012 ); + CPPUNIT_TEST( setLength_013 ); + CPPUNIT_TEST( setLength_014 ); + CPPUNIT_TEST( setLength_015 ); + CPPUNIT_TEST( setLength_016 ); + CPPUNIT_TEST( setLength_017 ); + CPPUNIT_TEST( setLength_018 ); + CPPUNIT_TEST( setLength_019 ); + CPPUNIT_TEST( setLength_020 ); + CPPUNIT_TEST( setLength_021 ); + CPPUNIT_TEST( setLength_022 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class csuc : public CppUnit::TestFixture + { + void csuc_001() + { + const char* expVal = kTestStr1; + OStringBuffer aStrBuf( kTestStr1 ); + sal_Int32 cmpLen = kTestStr1Len; + + // LLA: wrong access! const char* pstr = *&aStrBuf; + const char* pstr = aStrBuf.getStr(); + int nEqual = strncmp(pstr, expVal, cmpLen); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "test normal string", + /* cmpstr( pstr, expVal, cmpLen ) */ + 0, nEqual + ); + + } + + void csuc_002() + { + OStringBuffer aStrBuf; + + // LLA: wrong access! const char* pstr = *&aStrBuf; + const char* pstr = aStrBuf.getStr(); + sal_Int32 nLen = strlen(pstr); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "test empty string", + // cmpstr( pstr, &expVal, cmpLen ) + static_cast(0), nLen + ); + + } + + CPPUNIT_TEST_SUITE( csuc ); + CPPUNIT_TEST( csuc_001 ); + CPPUNIT_TEST( csuc_002 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class getStr : public CppUnit::TestFixture + { + void getStr_001() + { + const char* expVal = kTestStr1; + OStringBuffer aStrBuf( kTestStr1 ); + sal_Int32 cmpLen = kTestStr1Len; + + const char* pstr = aStrBuf.getStr(); + int nEqual = strncmp(pstr, expVal, cmpLen); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "test normal string", + 0, nEqual + ); + + } + + void getStr_002() + { + OStringBuffer aStrBuf; + const char* pstr = aStrBuf.getStr(); + CPPUNIT_ASSERT_MESSAGE + ( + "test empty string", + pstr != nullptr + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "test empty string", + '\0', pstr[0] + ); + + } + + CPPUNIT_TEST_SUITE( getStr ); + CPPUNIT_TEST( getStr_001 ); + CPPUNIT_TEST( getStr_002 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class append_001 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + OString empty; // silence loplugin + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + + } + + void append_001_001() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[0] ); + OString input2( kTestStr8 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_002() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[0] ); + OString input2( kTestStr36 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_003() + { + OString expVal( kTestStr37 ); + OStringBuffer aStrBuf( arrOUS[0] ); + OString input2( kTestStr23 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_004() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[0] ); + + aStrBuf.append( empty ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_005() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[1] ); + OString input2( kTestStr7 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_006() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[1] ); + OString input2( kTestStr2 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_007() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[1] ); + OString input2( kTestStr1 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_008() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[1] ); + + aStrBuf.append( empty ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_009() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[2] ); + OString input2( kTestStr7 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_010() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[2] ); + OString input2( kTestStr2 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_011() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[2] ); + OString input2( kTestStr1 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_012() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[2] ); + + aStrBuf.append( empty ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_013() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[3] ); + OString input2( kTestStr7 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_014() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[3] ); + OString input2( kTestStr2 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_015() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[3] ); + OString input2( kTestStr1 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_016() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[3] ); + + aStrBuf.append( empty ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_017() + { + OString expVal( kTestStr29 ); + OStringBuffer aStrBuf( arrOUS[4] ); + OString input2( kTestStr38 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_018() + { + OString expVal( kTestStr39 ); + OStringBuffer aStrBuf( arrOUS[4] ); + OString input2( kTestStr17 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_019() + { + OString expVal( kTestStr40 ); + OStringBuffer aStrBuf( arrOUS[4] ); + OString input2( kTestStr31 ); + + aStrBuf.append( input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_001_020() + { + OString expVal( kTestStr28 ); + OStringBuffer aStrBuf( arrOUS[4] ); + + aStrBuf.append( empty ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_null() + { + OStringBuffer aStrBuf("hello world"); + + aStrBuf.append('\0'); + aStrBuf.append('\1'); + aStrBuf.append('\2'); + + aStrBuf.append("hello world"); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "should be able to append nulls", + sal_Int32(2 * RTL_CONSTASCII_LENGTH("hello world") + 3), aStrBuf.getLength() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "should be able to append nulls", + '\0', aStrBuf[RTL_CONSTASCII_LENGTH("hello world")] + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "should be able to append nulls", + 1, aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]+1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "should be able to append nulls", + 2, aStrBuf[RTL_CONSTASCII_LENGTH("hello world")]+2 + ); + + } + + CPPUNIT_TEST_SUITE( append_001 ); + CPPUNIT_TEST( append_001_001 ); + CPPUNIT_TEST( append_001_002 ); + CPPUNIT_TEST( append_001_003 ); + CPPUNIT_TEST( append_001_004 ); + CPPUNIT_TEST( append_001_005 ); + CPPUNIT_TEST( append_001_006 ); + CPPUNIT_TEST( append_001_007 ); + CPPUNIT_TEST( append_001_008 ); + CPPUNIT_TEST( append_001_009 ); + CPPUNIT_TEST( append_001_010 ); + CPPUNIT_TEST( append_001_011 ); + CPPUNIT_TEST( append_001_012 ); + CPPUNIT_TEST( append_001_013 ); + CPPUNIT_TEST( append_001_014 ); + CPPUNIT_TEST( append_001_015 ); + CPPUNIT_TEST( append_001_016 ); + CPPUNIT_TEST( append_001_017 ); + CPPUNIT_TEST( append_001_018 ); + CPPUNIT_TEST( append_001_019 ); + CPPUNIT_TEST( append_001_020 ); + CPPUNIT_TEST( append_null ); + CPPUNIT_TEST_SUITE_END(); + }; + + class append_002 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + + } + + void append_002_001() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input = kTestStr8; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_002() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input = kTestStr36; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_003() + { + OString expVal( kTestStr37 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input = kTestStr23; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_004() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input = kTestStr25; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_005() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input = kTestStr7; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_006() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input = kTestStr2; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_007() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input = kTestStr1; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_008() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input = kTestStr25; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_009() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input = kTestStr7; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_010() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input = kTestStr2; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_011() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input = kTestStr1; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_012() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input = kTestStr25; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_013() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input = kTestStr7; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_014() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input = kTestStr2; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_015() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input = kTestStr1; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_016() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input = kTestStr25; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_017() + { + OString expVal( kTestStr29 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input = kTestStr38; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_018() + { + OString expVal( kTestStr39 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input = kTestStr17; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_019() + { + OString expVal( kTestStr40 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input = kTestStr31; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002_020() + { + OString expVal( kTestStr28 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input = kTestStr25; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + +#ifdef WITH_CORE + void append_002_021() + { + OString expVal; + OStringBuffer aStrBuf( kSInt32Max ); + const char* input = kTestStr25; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer(with INT_MAX)", + ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() ) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_002 ); + CPPUNIT_TEST( append_002_001 ); + CPPUNIT_TEST( append_002_002 ); + CPPUNIT_TEST( append_002_003 ); + CPPUNIT_TEST( append_002_004 ); + CPPUNIT_TEST( append_002_005 ); + CPPUNIT_TEST( append_002_006 ); + CPPUNIT_TEST( append_002_007 ); + CPPUNIT_TEST( append_002_008 ); + CPPUNIT_TEST( append_002_009 ); + CPPUNIT_TEST( append_002_010 ); + CPPUNIT_TEST( append_002_011 ); + CPPUNIT_TEST( append_002_012 ); + CPPUNIT_TEST( append_002_013 ); + CPPUNIT_TEST( append_002_014 ); + CPPUNIT_TEST( append_002_015 ); + CPPUNIT_TEST( append_002_016 ); + CPPUNIT_TEST( append_002_017 ); + CPPUNIT_TEST( append_002_018 ); + CPPUNIT_TEST( append_002_019 ); + CPPUNIT_TEST( append_002_020 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_002_021 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + + class append_003 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + + } + + void append_003_001() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input1 = kTestStr36; + sal_Int32 input2 = 12; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_002() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input1 = kTestStr36; + sal_Int32 input2 = 28; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_003() + { + OString expVal( kTestStr37 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input1 = kTestStr23; + sal_Int32 input2 = 16; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_004() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[0] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 0; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_006() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 4; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_007() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 32; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_008() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 16; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_009() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[1] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 0; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_011() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 4; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_012() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 32; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_013() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 16; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_014() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[2] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 0; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_016() + { + OString expVal( kTestStr7 ); + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 4; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_017() + { + OString expVal( kTestStr2 ); + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 32; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_018() + { + OString expVal( kTestStr1 ); + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 16; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_019() + { + OString expVal; + OStringBuffer aStrBuf( arrOUS[3] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 0; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_021() + { + OString expVal( kTestStr29 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input1 = kTestStr38; + sal_Int32 input2 = 7; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length less than 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_022() + { + OString expVal( kTestStr39 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input1 = kTestStr17; + sal_Int32 input2 = 22; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length more than 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_023() + { + OString expVal( kTestStr40 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input1 = kTestStr31; + sal_Int32 input2 = 16; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 16) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003_024() + { + OString expVal( kTestStr28 ); + OStringBuffer aStrBuf( arrOUS[4] ); + const char* input1 = kTestStr2; + sal_Int32 input2 = 0; + + aStrBuf.append( input1, input2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the string(length equal to 0) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + CPPUNIT_TEST_SUITE( append_003 ); + CPPUNIT_TEST( append_003_001 ); + CPPUNIT_TEST( append_003_002 ); + CPPUNIT_TEST( append_003_003 ); + CPPUNIT_TEST( append_003_004 ); + CPPUNIT_TEST( append_003_006 ); + CPPUNIT_TEST( append_003_007 ); + CPPUNIT_TEST( append_003_008 ); + CPPUNIT_TEST( append_003_009 ); + CPPUNIT_TEST( append_003_011 ); + CPPUNIT_TEST( append_003_012 ); + CPPUNIT_TEST( append_003_013 ); + CPPUNIT_TEST( append_003_014 ); + CPPUNIT_TEST( append_003_016 ); + CPPUNIT_TEST( append_003_017 ); + CPPUNIT_TEST( append_003_018 ); + CPPUNIT_TEST( append_003_019 ); + CPPUNIT_TEST( append_003_021 ); + CPPUNIT_TEST( append_003_022 ); + CPPUNIT_TEST( append_003_023 ); + CPPUNIT_TEST( append_003_024 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class append_004 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + + } + + void append_004_001() + { + OString expVal( kTestStr45 ); + OStringBuffer aStrBuf( arrOUS[0] ); + bool input = true; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_002() + { + OString expVal( kTestStr46 ); + OStringBuffer aStrBuf( arrOUS[0] ); + bool input = false; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_003() + { + OString expVal( kTestStr47 ); + OStringBuffer aStrBuf( arrOUS[1] ); + bool input = true; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_004() + { + OString expVal( kTestStr48 ); + OStringBuffer aStrBuf( arrOUS[1] ); + bool input = false; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_005() + { + OString expVal( kTestStr47 ); + OStringBuffer aStrBuf( arrOUS[2] ); + bool input = true; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_006() + { + OString expVal( kTestStr48 ); + OStringBuffer aStrBuf( arrOUS[2] ); + bool input = false; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_007() + { + OString expVal( kTestStr47 ); + OStringBuffer aStrBuf( arrOUS[3] ); + bool input = true; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_008() + { + OString expVal( kTestStr48 ); + OStringBuffer aStrBuf( arrOUS[3] ); + bool input = false; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_009() + { + OString expVal( kTestStr49 ); + OStringBuffer aStrBuf( arrOUS[4] ); + bool input = true; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004_010() + { + OString expVal( kTestStr50 ); + OStringBuffer aStrBuf( arrOUS[4] ); + bool input = false; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + +#ifdef WITH_CORE + void append_004_011() + { + OString expVal( kTestStr47 ); + OStringBuffer aStrBuf( kSInt32Max ); + sal_Bool input = sal_True; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "Appends the sal_Bool(sal_True) to the string buffer(with INT_MAX)", + ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() ) + ); + + } + + void append_004_012() + { + OString expVal( kTestStr48 ); + OStringBuffer aStrBuf( kSInt32Max ); + sal_Bool input = sal_False; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "Appends the sal_Bool(sal_False) to the string buffer(with INT_MAX)", + ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() ) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_004 ); + CPPUNIT_TEST( append_004_001 ); + CPPUNIT_TEST( append_004_002 ); + CPPUNIT_TEST( append_004_003 ); + CPPUNIT_TEST( append_004_004 ); + CPPUNIT_TEST( append_004_005 ); + CPPUNIT_TEST( append_004_006 ); + CPPUNIT_TEST( append_004_007 ); + CPPUNIT_TEST( append_004_008 ); + CPPUNIT_TEST( append_004_009 ); + CPPUNIT_TEST( append_004_010 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_004_011 ); + CPPUNIT_TEST( append_004_012 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append(char c) + + class append_005 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + + } + + void append_001() + { + OString expVal( kTestStr51 ); + OStringBuffer aStrBuf( arrOUS[0] ); + char input = 'M'; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(M) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(M) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OString expVal( kTestStr143 ); + OStringBuffer aStrBuf( arrOUS[0] ); + char input = static_cast(SAL_MAX_UINT8); + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Unicode(kSInt8Max) to the string buffer arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the sal_Unicode(kSInt8Max) to the string buffer arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OString expVal( kTestStr27 ); + OStringBuffer aStrBuf( arrOUS[1] ); + char input = 's'; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OString expVal( kTestStr144 ); + OStringBuffer aStrBuf( arrOUS[1] ); + char input = static_cast(SAL_MAX_UINT8); + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005_005() + { + OString expVal( kTestStr27 ); + OStringBuffer aStrBuf( arrOUS[2] ); + char input = 's'; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OString expVal( kTestStr144 ); + OStringBuffer aStrBuf( arrOUS[2] ); + char input = static_cast(SAL_MAX_UINT8); + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OString expVal( kTestStr27 ); + OStringBuffer aStrBuf( arrOUS[3] ); + char input = 's'; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OString expVal( kTestStr144 ); + OStringBuffer aStrBuf( arrOUS[3] ); + char input = static_cast(SAL_MAX_UINT8); + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OString expVal( kTestStr56 ); + OStringBuffer aStrBuf( arrOUS[4] ); + char input = 's'; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(s) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OString expVal( kTestStr145 ); + OStringBuffer aStrBuf( arrOUS[4] ); + char input = static_cast(SAL_MAX_UINT8); + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + +#ifdef WITH_CORE + void append_011() + { + OString expVal( kTestStr27 ); + OStringBuffer aStrBuf( kSInt32Max ); + char input = 's'; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "Appends the char(s) to the string buffer(with INT_MAX)", + ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() ) + ); + + } + + void append_012() + { + OString expVal( kTestStr144 ); + OStringBuffer aStrBuf( kSInt32Max ); + char input = static_cast(SAL_MAX_UINT8); + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "Appends the char(kSInt8Max) to the string buffer with INT_MAX)", + ( aStrBuf.getStr()== expVal) &&( aStrBuf.getLength() == expVal.getLength() ) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_005 ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); + CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005_005 ); + CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); + CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); + CPPUNIT_TEST( append_010 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_011 ); + CPPUNIT_TEST( append_012 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + + class append_006_Int32 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_026() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_031() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_032() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_033() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_034() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_036() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_043() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_044() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_045() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_046() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_047() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_048() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_049() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_050() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_051() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_052() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_053() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_054() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_055() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_056() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_057() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_058() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_059() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_060() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_061() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_062() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_063() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_064() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_065() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_066() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_067() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_068() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_069() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_070() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_071() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_072() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_073() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_074() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_075() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_076() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_077() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_078() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_079() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_080() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_081() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_082() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_083() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_084() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_085() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_086() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_087() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_088() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_089() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_090() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_091() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_092() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_093() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_094() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_095() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_096() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_097() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_098() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_099() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_100() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + CPPUNIT_TEST_SUITE( append_006_Int32 ); + CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 ); + CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 ); + CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 ); + CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 ); + CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 ); + CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 ); + CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 ); + CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 ); + CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 ); + CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 ); + CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 ); + CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 ); + CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 ); + CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 ); + CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 ); + CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 ); + CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 ); + CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 ); + CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 ); + CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 ); + CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 ); + CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 ); + CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 ); + CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 ); + CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 ); + CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 ); + CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 ); + CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 ); + CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 ); + CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 ); + CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 ); + CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 ); + CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 ); + CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 ); + CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 ); + CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 ); + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( sal_Int32 i, sal_Int16 radix=2 ) +// where i = large constants +// testing the method append( sal_Int32 i, sal_Int16 radix=8 ) +// where i = large constants +// testing the method append( sal_Int32 i, sal_Int16 radix=10 ) +// where i = large constants +// testing the method append( sal_Int32 i, sal_Int16 radix=16 ) +// where i = large constants +// testing the method append( sal_Int32 i, sal_Int16 radix=36 ) +// where i = large constants + + class append_006_Int32_Bounderies : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 8; + + expVal += OString( "17777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 10; + + expVal += OString( "2147483647" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 36; + + expVal += OString( "zik0zj" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 8; + + expVal += OString( "17777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 10; + + expVal += OString( "2147483647" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 36; + + expVal += OString( "zik0zj" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 8; + + expVal += OString( "17777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_026() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 10; + + expVal += OString( "2147483647" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 36; + + expVal += OString( "zik0zj" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_031() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_032() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_033() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_034() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 8; + + expVal += OString( "17777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_036() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 10; + + expVal += OString( "2147483647" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 36; + + expVal += OString( "zik0zj" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_043() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_044() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 8; + + expVal += OString( "17777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_045() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_046() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 10; + + expVal += OString( "2147483647" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_047() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_048() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_049() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_050() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = kSInt32Max; + sal_Int16 radix = 36; + + expVal += OString( "zik0zj" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + CPPUNIT_TEST_SUITE( append_006_Int32_Bounderies ); + CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 ); + CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 ); + CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 ); + CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 ); + CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 ); + CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 ); + CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 ); + CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 ); + CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 ); + CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 ); + CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 ); + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( sal_Int32 i, sal_Int16 radix=2 ) +// for negative value +// testing the method append( sal_Int32 i, sal_Int16 radix=8 ) +// for negative value +// testing the method append( sal_Int32 i, sal_Int16 radix=10 ) +// for negative value +// testing the method append( sal_Int32 i, sal_Int16 radix=16 ) +// for negative value +// testing the method append( sal_Int32 i, sal_Int16 radix=36 ) +// for negative value + + class append_006_Int32_Negative : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_026() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_031() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_032() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_033() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_034() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_036() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_043() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_044() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_045() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_046() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_047() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_048() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_049() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_050() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_051() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_052() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_053() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_054() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_055() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_056() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_057() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_058() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_059() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_060() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_061() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_062() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_063() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_064() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_065() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_066() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_067() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_068() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_069() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_070() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_071() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_072() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_073() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_074() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_075() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_076() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_077() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_078() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_079() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_080() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_081() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_082() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_083() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_084() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_085() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_086() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_087() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_088() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_089() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_090() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_091() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_092() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_093() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_094() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_095() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_096() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_097() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_098() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + } + + void append_099() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + } + + void append_100() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int32 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int32, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + } + + CPPUNIT_TEST_SUITE( append_006_Int32_Negative ); + CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 ); + CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 ); + CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 ); + CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 ); + CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 ); + CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 ); + CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 ); + CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 ); + CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 ); + CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 ); + CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 ); + CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 ); + CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 ); + CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 ); + CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 ); + CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 ); + CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 ); + CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 ); + CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 ); + CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 ); + CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 ); + CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 ); + CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 ); + CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 ); + CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 ); + CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 ); + CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 ); + CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 ); + CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 ); + CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 ); + CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 ); + CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 ); + CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 ); + CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 ); + CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 ); + CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class append_006_Int32_defaultParam : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr59 ); + sal_Int32 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[0]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[0]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr62 ); + sal_Int32 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[0]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[0]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr63 ); + sal_Int32 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[0]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[0]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr64 ); + sal_Int32 input = 2147483647; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[0]+2147483647", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[0]+2147483647", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr65 ); + sal_Int32 input = kNonSInt32Max; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[0]+(-2147483648)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[0]+(-2147483648)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr60 ); + sal_Int32 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[1]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[1]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr66 ); + sal_Int32 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[1]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[1]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr67 ); + sal_Int32 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[1]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[1]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr68 ); + sal_Int32 input = 2147483647; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[1]+2147483647", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[1]+2147483647", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr69 ); + sal_Int32 input = SAL_MIN_INT32 /*-2147483648*/; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[1]+(-2147483648)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[1]+(-2147483648)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr60 ); + sal_Int32 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[2]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[2]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr66 ); + sal_Int32 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OUStringBuffer[2]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OUStringBuffer[2]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr67 ); + sal_Int32 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OUStringBuffer[2]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OUStringBuffer[2]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr68 ); + sal_Int32 input = 2147483647; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[2]+2147483647", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[2]+2147483647", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr69 ); + sal_Int32 input = SAL_MIN_INT32; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[2]+(-2147483648)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[2]+(-2147483648)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr60 ); + sal_Int32 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[3]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[3]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr66 ); + sal_Int32 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[3]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[3]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr67 ); + sal_Int32 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[3]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[3]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr68 ); + sal_Int32 input = 2147483647; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[3]+2147483647", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[3]+2147483647", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr69 ); + sal_Int32 input = SAL_MIN_INT32; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[3]+(-2147483648)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[3]+(-2147483648)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr61 ); + sal_Int32 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[4]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 11 and return OStringBuffer[4]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr70 ); + sal_Int32 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[4]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 0 and return OStringBuffer[4]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr71 ); + sal_Int32 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[4]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -11 and return OStringBuffer[4]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr72 ); + sal_Int32 input = 2147483647; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[4]+2147483647", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer[4]+2147483647", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr73 ); + sal_Int32 input = SAL_MIN_INT32; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[4]+(-2147483648)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer[4]+(-2147483648)", + expVal.getLength(), aStrBuf.getLength() + ); + + } +#ifdef WITH_CORE + void append_026() + { + OStringBuffer aStrBuf( kSInt32Max ); + OString expVal( kTestStr60 ); + sal_Int32 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int32 11 and return OStringBuffer(kSInt32Max)+11", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( kSInt32Max ); + OString expVal( kTestStr66 ); + sal_Int32 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int32 0 and return OStringBuffer(kSInt32Max)+0", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( kSInt32Max ); + OString expVal( kTestStr67 ); + sal_Int32 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int32 -11 and return OStringBuffer(kSInt32Max)+(-11)", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( kSInt32Max ); + OString expVal( kTestStr68 ); + sal_Int32 input = 2147483647; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int32 2147483647 and return OStringBuffer(kSInt32Max)+2147483647", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( kSInt32Max ); + OString expVal( kTestStr69 ); + sal_Int32 input = SAL_MIN_INT32; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int32 -2147483648 and return OStringBuffer(kSInt32Max)+(-2147483648)", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_006_Int32_defaultParam ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); + CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); + CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); + CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); + CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); + CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); + CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); + CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); + CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); + CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); + CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); + CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); + CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); + CPPUNIT_TEST( append_030 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( sal_Int64 l, sal_Int16 radix=2 ) +// testing the method append( sal_Int64 l, sal_Int16 radix=8 ) +// testing the method append( sal_Int64 l, sal_Int16 radix=10 ) +// testing the method append( sal_Int64 l, sal_Int16 radix=16 ) +// testing the method append( sal_Int64 l, sal_Int16 radix=36 ) + + class append_007_Int64 : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_026() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_031() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_032() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_033() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_034() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_036() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_043() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_044() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_045() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_046() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_047() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_048() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_049() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_050() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_051() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_052() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_053() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_054() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_055() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_056() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_057() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_058() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_059() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_060() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_061() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_062() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_063() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_064() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_065() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_066() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_067() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_068() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_069() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_070() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_071() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_072() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_073() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_074() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_075() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_076() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_077() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_078() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_079() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_080() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_081() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_082() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 2; + + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_083() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 2; + + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_084() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 2; + + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_085() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_086() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 8; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_087() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 8; + + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_088() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 8; + + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_089() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_090() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 10; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_091() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 10; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_092() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 10; + + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_093() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_094() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 16; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_095() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 16; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_096() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 15; + sal_Int16 radix = 16; + + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_097() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_098() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 4; + sal_Int16 radix = 36; + + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_099() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 8; + sal_Int16 radix = 36; + + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_100() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = 35; + sal_Int16 radix = 36; + + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + CPPUNIT_TEST_SUITE( append_007_Int64 ); + CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 ); + CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 ); + CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 ); + CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 ); + CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 ); + CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 ); + CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 ); + CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 ); + CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 ); + CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 ); + CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 ); + CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 ); + CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 ); + CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 ); + CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 ); + CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 ); + CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 ); + CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 ); + CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 ); + CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 ); + CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 ); + CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 ); + CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 ); + CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 ); + CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 ); + CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 ); + CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 ); + CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 ); + CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 ); + CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 ); + CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 ); + CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 ); + CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 ); + CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 ); + CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 ); + CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 ); + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( sal_Int64 i, sal_Int16 radix=2 ) +// where i = large constants +// testing the method append( sal_Int64 i, sal_Int16 radix=8 ) +// where i = large constants +// testing the method append( sal_Int64 i, sal_Int16 radix=10 ) +// where i = large constants +// testing the method append( sal_Int64 i, sal_Int16 radix=16 ) +// where i = large constants +// testing the method append( sal_Int64 i, sal_Int16 radix=36 ) +// where i = large constants + + class append_007_Int64_Bounderies : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 2; + + expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 8; + + expVal += OString( "777777777777777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 10; + + expVal += OString( "9223372036854775807" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffffffffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 36; + + expVal += OString( "1y2p0ij32e8e7" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 2; + + expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 8; + + expVal += OString( "777777777777777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 10; + + expVal += OString( "9223372036854775807" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffffffffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 36; + + expVal += OString( "1y2p0ij32e8e7" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 2; + + expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 8; + + expVal += OString( "777777777777777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_026() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 10; + + expVal += OString( "9223372036854775807" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffffffffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 36; + + expVal += OString( "1y2p0ij32e8e7" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_031() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_032() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 2; + + expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_033() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_034() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 8; + + expVal += OString( "777777777777777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_036() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 10; + + expVal += OString( "9223372036854775807" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffffffffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 36; + + expVal += OString( "1y2p0ij32e8e7" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 2; + + expVal += OString( "1111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 2; + + expVal += OString( "111111111111111111111111111111111111111111111111111111111111111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_043() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 8; + + expVal += OString( "177" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_044() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 8; + + expVal += OString( "777777777777777777777" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_045() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 10; + + expVal += OString( "127" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_046() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 10; + + expVal += OString( "9223372036854775807" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_047() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 16; + + expVal += OString( "7f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_048() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 16; + + expVal += OString( "7fffffffffffffff" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_049() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt8Max; + sal_Int16 radix = 36; + + expVal += OString( "3j" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_050() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = kSInt64Max; + sal_Int16 radix = 36; + + expVal += OString( "1y2p0ij32e8e7" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_Bounderies_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + CPPUNIT_TEST_SUITE( append_007_Int64_Bounderies ); + CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 ); + CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 ); + CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 ); + CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 ); + CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 ); + CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 ); + CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 ); + CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 ); + CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 ); + CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 ); + CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 ); + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( sal_Int64 i, sal_Int16 radix=2 ) +// for negative value +// testing the method append( sal_Int64 i, sal_Int16 radix=8 ) +// for negative value +// testing the method append( sal_Int64 i, sal_Int16 radix=10 ) +// for negative value +// testing the method append( sal_Int64 i, sal_Int16 radix=16 ) +// for negative value +// testing the method append( sal_Int64 i, sal_Int16 radix=36 ) +// for negative value + + class append_007_Int64_Negative : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[0]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_026() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_031() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_032() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_033() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_034() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_036() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[1]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_043() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_044() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_045() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_046() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_047() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_048() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_049() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_050() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_051() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_052() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_053() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_054() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_055() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_056() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_057() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_058() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_059() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_060() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[2]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_061() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_062() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_063() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_064() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_065() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_066() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_067() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_068() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_069() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_070() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_071() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_072() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_073() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_074() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_075() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_076() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_077() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_078() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_079() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_080() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[3]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_081() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 2; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_082() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "100" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_083() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1000" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_084() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 2; + + expVal += OString( "-" ); + expVal += OString( "1111" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 2)_006_negative_kRadixBinary for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_085() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 8; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_086() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_087() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "10" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_088() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 8; + + expVal += OString( "-" ); + expVal += OString( "17" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 8)_006_negative_kRadixOctol for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_089() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 10; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_090() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_091() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_092() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 10; + + expVal += OString( "-" ); + expVal += OString( "15" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 10)_006_negative_kRadixDecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_093() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 16; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_094() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_095() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_096() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -15; + sal_Int16 radix = 16; + + expVal += OString( "-" ); + expVal += OString( "f" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 16)_006_negative_kRadixHexdecimal for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_097() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -0; + sal_Int16 radix = 36; + + expVal += OString( "0" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_098() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -4; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "4" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_099() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -8; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "8" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_100() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( aStrBuf.getStr() ); + sal_Int64 input = -35; + sal_Int16 radix = 36; + + expVal += OString( "-" ); + expVal += OString( "z" ); + aStrBuf.append( input, radix ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal, OString(aStrBuf.getStr()) + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "append(sal_Int64, radix 36)_006_negative_kRadixBase36 for arrOUS[4]", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + CPPUNIT_TEST_SUITE( append_007_Int64_Negative ); + CPPUNIT_TEST( append_001 ); CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); CPPUNIT_TEST( append_030 ); + CPPUNIT_TEST( append_031 ); CPPUNIT_TEST( append_032 ); + CPPUNIT_TEST( append_033 ); CPPUNIT_TEST( append_034 ); + CPPUNIT_TEST( append_035 ); CPPUNIT_TEST( append_036 ); + CPPUNIT_TEST( append_037 ); CPPUNIT_TEST( append_038 ); + CPPUNIT_TEST( append_039 ); CPPUNIT_TEST( append_040 ); + CPPUNIT_TEST( append_041 ); CPPUNIT_TEST( append_042 ); + CPPUNIT_TEST( append_043 ); CPPUNIT_TEST( append_044 ); + CPPUNIT_TEST( append_045 ); CPPUNIT_TEST( append_046 ); + CPPUNIT_TEST( append_047 ); CPPUNIT_TEST( append_048 ); + CPPUNIT_TEST( append_049 ); CPPUNIT_TEST( append_050 ); + CPPUNIT_TEST( append_051 ); CPPUNIT_TEST( append_052 ); + CPPUNIT_TEST( append_053 ); CPPUNIT_TEST( append_054 ); + CPPUNIT_TEST( append_055 ); CPPUNIT_TEST( append_056 ); + CPPUNIT_TEST( append_057 ); CPPUNIT_TEST( append_058 ); + CPPUNIT_TEST( append_059 ); CPPUNIT_TEST( append_060 ); + CPPUNIT_TEST( append_061 ); CPPUNIT_TEST( append_062 ); + CPPUNIT_TEST( append_063 ); CPPUNIT_TEST( append_064 ); + CPPUNIT_TEST( append_065 ); CPPUNIT_TEST( append_066 ); + CPPUNIT_TEST( append_067 ); CPPUNIT_TEST( append_068 ); + CPPUNIT_TEST( append_069 ); CPPUNIT_TEST( append_070 ); + CPPUNIT_TEST( append_071 ); CPPUNIT_TEST( append_072 ); + CPPUNIT_TEST( append_073 ); CPPUNIT_TEST( append_074 ); + CPPUNIT_TEST( append_075 ); CPPUNIT_TEST( append_076 ); + CPPUNIT_TEST( append_077 ); CPPUNIT_TEST( append_078 ); + CPPUNIT_TEST( append_079 ); CPPUNIT_TEST( append_080 ); + CPPUNIT_TEST( append_081 ); CPPUNIT_TEST( append_082 ); + CPPUNIT_TEST( append_083 ); CPPUNIT_TEST( append_084 ); + CPPUNIT_TEST( append_085 ); CPPUNIT_TEST( append_086 ); + CPPUNIT_TEST( append_087 ); CPPUNIT_TEST( append_088 ); + CPPUNIT_TEST( append_089 ); CPPUNIT_TEST( append_090 ); + CPPUNIT_TEST( append_091 ); CPPUNIT_TEST( append_092 ); + CPPUNIT_TEST( append_093 ); CPPUNIT_TEST( append_094 ); + CPPUNIT_TEST( append_095 ); CPPUNIT_TEST( append_096 ); + CPPUNIT_TEST( append_097 ); CPPUNIT_TEST( append_098 ); + CPPUNIT_TEST( append_099 ); CPPUNIT_TEST( append_100 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class append_007_Int64_defaultParam : public CppUnit::TestFixture + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr59 ); + sal_Int64 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[0]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[0]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr62 ); + sal_Int64 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[0]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[0]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr63 ); + sal_Int64 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[0]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[0]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr116 ); + sal_Int64 input = SAL_CONST_INT64(9223372036854775807); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[0]+9223372036854775807", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[0]+9223372036854775807", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + OString expVal( kTestStr117 ); + sal_Int64 input = SAL_MIN_INT64/*-9223372036854775808*/; // LLA: this is not the same :-( kNonSInt64Max; + + aStrBuf.append( input ); + + bool bRes = expVal == aStrBuf.getStr(); + CPPUNIT_ASSERT_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[0]+(-9223372036854775808)", + bRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[0]+(-9223372036854775808)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr60 ); + sal_Int64 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[1]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[1]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr66 ); + sal_Int64 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[1]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[1]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr67 ); + sal_Int64 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[1]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[1]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr118 ); + sal_Int64 input = SAL_CONST_INT64(9223372036854775807); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[1]+9223372036854775807", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[1]+9223372036854775807", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[1] ); + OString expVal( kTestStr119 ); + sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[1]+(-9223372036854775808)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[1]+(-9223372036854775808)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr60 ); + sal_Int64 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[2]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[2]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr66 ); + sal_Int64 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OUStringBuffer[2]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OUStringBuffer[2]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr67 ); + sal_Int64 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OUStringBuffer[2]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OUStringBuffer[2]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr118 ); + sal_Int64 input = SAL_CONST_INT64(9223372036854775807); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[2]+9223372036854775807", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[2]+9223372036854775807", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[2] ); + OString expVal( kTestStr119 ); + sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[2]+(-9223372036854775808)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[2]+(-9223372036854775808)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr60 ); + sal_Int64 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[3]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[3]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr66 ); + sal_Int64 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[3]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[3]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr67 ); + sal_Int64 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[3]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[3]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr118 ); + sal_Int64 input = SAL_CONST_INT64(9223372036854775807); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[3]+9223372036854775807", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[3]+9223372036854775807", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[3] ); + OString expVal( kTestStr119 ); + sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[3]+(-9223372036854775808)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[3]+(-9223372036854775808)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr61 ); + sal_Int64 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[4]+11", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 11 and return OStringBuffer[4]+11", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr70 ); + sal_Int64 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[4]+0", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 0 and return OStringBuffer[4]+0", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr71 ); + sal_Int64 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[4]+(-11)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -11 and return OStringBuffer[4]+(-11)", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr120 ); + sal_Int64 input = SAL_CONST_INT64(9223372036854775807); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[4]+9223372036854775807", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer[4]+9223372036854775807", + expVal.getLength(), aStrBuf.getLength() + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[4] ); + OString expVal( kTestStr121 ); + sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[4]+(-9223372036854775808)", + expVal, aStrBuf.toString() + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer[4]+(-9223372036854775808)", + expVal.getLength(), aStrBuf.getLength() + ); + + } +#ifdef WITH_CORE + void append_026() + { + OStringBuffer aStrBuf( kSInt64Max ); + OString expVal( kTestStr60 ); + sal_Int64 input = 11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int64 11 and return OStringBuffer(kSInt64Max)+11", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_027() + { + OStringBuffer aStrBuf( kSInt64Max ); + OString expVal( kTestStr66 ); + sal_Int64 input = 0; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int64 0 and return OStringBuffer(kSInt64Max)+0", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_028() + { + OStringBuffer aStrBuf( kSInt64Max ); + OString expVal( kTestStr67 ); + sal_Int64 input = -11; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int64 -11 and return OStringBuffer(kSInt64Max)+(-11)", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_029() + { + OStringBuffer aStrBuf( kSInt64Max ); + OString expVal( kTestStr118 ); + sal_Int64 input = 9223372036854775807; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int64 9223372036854775807 and return OStringBuffer(kSInt64Max)+9223372036854775807", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } + + void append_030() + { + OStringBuffer aStrBuf( kSInt64Max ); + OString expVal( kTestStr119 ); + sal_Int64 input = SAL_MIN_INT64; // LLA: this is not the same :-( kNonSInt64Max; + + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "input Int64 -9223372036854775808 and return OStringBuffer(kSInt64Max)+(-9223372036854775808)", + (aStrBuf.toString() == expVal && + aStrBuf.getLength() == expVal.getLength()) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_007_Int64_defaultParam ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); + CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); + CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); + CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); + CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); + CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); + CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); + CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); + CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); + CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); + CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); + CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); + CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); + CPPUNIT_TEST( append_030 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( float f ) + + class checkfloat : public CppUnit::TestFixture + { + public: + bool checkIfStrBufContainAtPosTheFloat(OStringBuffer const& _sStrBuf, sal_Int32 _nLen, float _nFloat) + { + OString sFloatValue = OString::number(_nFloat); + + OString sBufferString(_sStrBuf.getStr()); + sal_Int32 nPos = sBufferString.indexOf(sFloatValue); + return nPos >= 0 && nPos == _nLen; + } + }; + + class append_008_float : public checkfloat + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.0")); + + // LLA: + // the complex problem is here, that a float value is not really what we write. + // So a 3.0 could also be 3 or 3.0 or 3.0000001 or 2.9999999 + // this has to be checked. + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.141592")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.5025255")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("3.00390625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.141592")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.5025255")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("3.00390625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append 3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.141592")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.5025255")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("3.00390625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append 3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append 3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append 3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append 3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append 3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + +#ifdef WITH_CORE + void append_036() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.0"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.5"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.0625"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.502525"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.141592"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.5025255"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("3.00390625"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append 3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_008_float ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); + CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); + CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); + CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); + CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); + CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); + CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); + CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); + CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); + CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); + CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); + CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); + CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); + CPPUNIT_TEST( append_030 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( float f ) for negative value + + class append_008_Float_Negative : public checkfloat + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_002() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_003() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_004() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_005() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.141592")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_006() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.5025255")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_007() + { + OStringBuffer aStrBuf( arrOUS[0] ); + float input = static_cast(atof("-3.00390625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_008() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_009() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_010() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_011() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_012() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.141592")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_013() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.5025255")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_014() + { + OStringBuffer aStrBuf( arrOUS[1] ); + float input = static_cast(atof("-3.00390625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[1] append -3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_015() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_016() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_017() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_018() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_019() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.141592")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_020() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.5025255")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_021() + { + OStringBuffer aStrBuf( arrOUS[2] ); + float input = static_cast(atof("-3.00390625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[2] append -3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_022() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("-3.0")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append -3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_023() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("-3.5")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append -3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_024() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("-3.0625")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append -3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_025() + { + OStringBuffer aStrBuf( arrOUS[3] ); + float input = static_cast(atof("-3.502525")); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[3] append -3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + +#ifdef WITH_CORE + void append_036() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.0"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.0", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_037() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.5"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.5", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_038() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.0625"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.0625", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_039() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.502525"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.502525", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_040() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.141592"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.141592", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_041() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.5025255"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.5025255", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } + + void append_042() + { + OStringBuffer aStrBuf( kSInt32Max ); + float input = (float)atof("-3.00390625"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "OStringBuffer( kSInt32Max ) append -3.0039062", + checkIfStrBufContainAtPosTheFloat(aStrBuf, nLen, input) + ); + + } +#endif + + CPPUNIT_TEST_SUITE( append_008_Float_Negative ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_002 ); + CPPUNIT_TEST( append_003 ); + CPPUNIT_TEST( append_004 ); + CPPUNIT_TEST( append_005 ); + CPPUNIT_TEST( append_006 ); + CPPUNIT_TEST( append_007 ); + CPPUNIT_TEST( append_008 ); + CPPUNIT_TEST( append_009 ); + CPPUNIT_TEST( append_010 ); + CPPUNIT_TEST( append_011 ); + CPPUNIT_TEST( append_012 ); + CPPUNIT_TEST( append_013 ); + CPPUNIT_TEST( append_014 ); + CPPUNIT_TEST( append_015 ); + CPPUNIT_TEST( append_016 ); + CPPUNIT_TEST( append_017 ); + CPPUNIT_TEST( append_018 ); + CPPUNIT_TEST( append_019 ); + CPPUNIT_TEST( append_020 ); + CPPUNIT_TEST( append_021 ); + CPPUNIT_TEST( append_022 ); + CPPUNIT_TEST( append_023 ); + CPPUNIT_TEST( append_024 ); + CPPUNIT_TEST( append_025 ); +#ifdef WITH_CORE + CPPUNIT_TEST( append_026 ); + CPPUNIT_TEST( append_027 ); + CPPUNIT_TEST( append_028 ); + CPPUNIT_TEST( append_029 ); + CPPUNIT_TEST( append_030 ); +#endif + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( double d ) + + class checkdouble : public CppUnit::TestFixture + { + public: + bool checkIfStrBufContainAtPosTheDouble(OStringBuffer const& _sStrBuf, sal_Int32 _nLen, double _nDouble) + { + OString sDoubleValue = OString::number(_nDouble); + + OString sBufferString(_sStrBuf.getStr()); + sal_Int32 nPos = sBufferString.indexOf(sDoubleValue); + return nPos >= 0 && nPos == _nLen; + } + }; + + class append_009_double : public checkdouble + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + double input = atof("3.0"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append 3.0", + checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input) + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[4] ); + double input = atof("3.141592653589793238462643"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[4] append 3.141592653589793238462643", + checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input) + ); + + } + + CPPUNIT_TEST_SUITE( append_009_double ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_035 ); + CPPUNIT_TEST_SUITE_END(); + }; + +// testing the method append( double f ) for negative value + + class append_009_Double_Negative : public checkdouble + { + OString arrOUS[5]; + + public: + void setUp() override + { + arrOUS[0] = OString( kTestStr7 ); + arrOUS[1] = OString( ); + arrOUS[2] = OString( kTestStr25 ); + arrOUS[3] = OString( "" ); + arrOUS[4] = OString( kTestStr28 ); + } + + void append_001() + { + OStringBuffer aStrBuf( arrOUS[0] ); + double input = atof("-3.0"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[0] append -3.0", + checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input) + ); + + } + + void append_035() + { + OStringBuffer aStrBuf( arrOUS[4] ); + double input = atof("-3.141592653589793238462643"); + + sal_Int32 nLen = aStrBuf.getLength(); + aStrBuf.append( input ); + + CPPUNIT_ASSERT_MESSAGE + ( + "arrOUS[4] append -3.141592653589793238462643", + checkIfStrBufContainAtPosTheDouble(aStrBuf, nLen, input) + ); + + } + + CPPUNIT_TEST_SUITE( append_009_Double_Negative ); + CPPUNIT_TEST( append_001 ); + CPPUNIT_TEST( append_035 ); + CPPUNIT_TEST_SUITE_END(); + }; + + class AppendUninitialized: public CppUnit::TestFixture { + private: + void testEmpty(); + + void testNonEmpty(); + + void testZero(); + + CPPUNIT_TEST_SUITE(AppendUninitialized); + CPPUNIT_TEST(testEmpty); + CPPUNIT_TEST(testNonEmpty); + CPPUNIT_TEST(testZero); + CPPUNIT_TEST_SUITE_END(); + }; + + void AppendUninitialized::testEmpty() { + OStringBuffer s; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + char * p = s.appendUninitialized(5); + CPPUNIT_ASSERT_EQUAL( + static_cast(s.getStr()), + static_cast(p)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); + } + + void AppendUninitialized::testNonEmpty() { + OStringBuffer s("ab"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s.getLength()); + char * p = s.appendUninitialized(5); + CPPUNIT_ASSERT_EQUAL( + static_cast(s.getStr() + 2), + static_cast(p)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength()); + } + + void AppendUninitialized::testZero() { + OStringBuffer s; + char * p = s.appendUninitialized(0); + CPPUNIT_ASSERT_EQUAL( + static_cast(s.getStr()), + static_cast(p)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + } +} // namespace rtl_OStringBuffer + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::ctors); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::makeStringAndClear); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getCapacity); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::ensureCapacity); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::setLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::csuc); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::getStr); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_001); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_002); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_003); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_004); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_005); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_Bounderies); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_Negative); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_006_Int32_defaultParam); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_Bounderies); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_Negative); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_007_Int64_defaultParam); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_008_float); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_008_Float_Negative); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_009_double); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::append_009_Double_Negative); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::AppendUninitialized); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OStringBuffer::remove); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/OStringBuffer/rtl_String_Const.h b/sal/qa/OStringBuffer/rtl_String_Const.h new file mode 100644 index 000000000..551191fcc --- /dev/null +++ b/sal/qa/OStringBuffer/rtl_String_Const.h @@ -0,0 +1,468 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H +#define INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +const rtl_TextEncoding kEncodingRTLTextUSASCII = RTL_TEXTENCODING_ASCII_US; + +const sal_uInt32 kConvertFlagsOUStringToOString = OUSTRING_TO_OSTRING_CVTFLAGS; +const sal_uInt32 kConvertFlagsOStringToOUString = OSTRING_TO_OUSTRING_CVTFLAGS; + +const char * const kTestStr1 = "Sun Microsystems"; +const char * const kTestStr2 = "Sun Microsystems Java Technology"; +const char * const kTestStr7 = "Sun "; +const char * const kTestStr8 = "Microsystems"; +const char * const kTestStr14 = " Sun Microsystems"; +const char * const kTestStr17 = " Sun Microsystems "; +const char * const kTestStr23 = " Java Technology"; +const char * const kTestStr25 = ""; +const char * const kTestStr27 = "s"; +const char * const kTestStr28 = "\50\3\5\7\11\13\15\17sun"; +const char * const kTestStr29 = "\50\3\5\7\11\13\15\17sun\21\23\25\27\31\33\50"; +const char * const kTestStr31 = "sun Microsystems"; +const char * const kTestStr36 = "Microsystems Java Technology"; +const char * const kTestStr37 = "Sun Java Technology"; +const char * const kTestStr38 = "\21\23\25\27\31\33\50"; +const char * const kTestStr39 = "\50\3\5\7\11\13\15\17sun Sun Microsystems "; +const char * const kTestStr40 = "\50\3\5\7\11\13\15\17sunsun Microsystems"; +const char * const kTestStr45 = "Sun true"; +const char * const kTestStr46 = "Sun false"; +const char * const kTestStr47 = "true"; +const char * const kTestStr48 = "false"; +const char * const kTestStr49 = "\50\3\5\7\11\13\15\17suntrue"; +const char * const kTestStr50 = "\50\3\5\7\11\13\15\17sunfalse"; +const char * const kTestStr51 = "Sun M"; +//static const char *kTestStr52 = "Sun \077777"; +//static const char *kTestStr53 = "Sun \100000"; +//static const char *kTestStr54 = "\77777"; +//static const char *kTestStr55 = "\100000"; +const char * const kTestStr56 = "\50\3\5\7\11\13\15\17suns"; +//static const char *kTestStr57 = "\50\3\5\7\11\13\15\17sun\77777"; +//static const char *kTestStr58 = "\50\3\5\7\11\13\15\17sun\10000"; +const char * const kTestStr59 = "Sun 11"; +const char * const kTestStr60 = "11"; +const char * const kTestStr61 = "\50\3\5\7\11\13\15\17sun11"; +const char * const kTestStr62 = "Sun 0"; +const char * const kTestStr63 = "Sun -11"; +const char * const kTestStr64 = "Sun 2147483647"; +const char * const kTestStr65 = "Sun -2147483648"; +const char * const kTestStr66 = "0"; +const char * const kTestStr67 = "-11"; +const char * const kTestStr68 = "2147483647"; +const char * const kTestStr69 = "-2147483648"; +const char * const kTestStr70 = "\50\3\5\7\11\13\15\17sun0"; +const char * const kTestStr71 = "\50\3\5\7\11\13\15\17sun-11"; +const char * const kTestStr72 = "\50\3\5\7\11\13\15\17sun2147483647"; +const char * const kTestStr73 = "\50\3\5\7\11\13\15\17sun-2147483648"; +const char * const kTestStr116 = "Sun 9223372036854775807"; +const char * const kTestStr117 = "Sun -9223372036854775808"; +const char * const kTestStr118 = "9223372036854775807"; +const char * const kTestStr119 = "-9223372036854775808"; +const char * const kTestStr120 = "\50\3\5\7\11\13\15\17sun9223372036854775807"; +const char * const kTestStr121 = "\50\3\5\7\11\13\15\17sun-9223372036854775808"; +const char * const kTestStr143 = "Sun \377"; +const char * const kTestStr144 = "\377"; +const char * const kTestStr145 = "\50\3\5\7\11\13\15\17sun\377"; + +const sal_Int32 kTestStr1Len = 16; +const sal_Int32 kTestStr2Len = 32; +const sal_Int32 kTestStr3Len = 16; +const sal_Int32 kTestStr4Len = 16; +const sal_Int32 kTestStr5Len = 16; +const sal_Int32 kTestStr6Len = 15; +const sal_Int32 kTestStr7Len = 4; +const sal_Int32 kTestStr8Len = 12; +const sal_Int32 kTestStr9Len = 32; +const sal_Int32 kTestStr10Len = 17; +const sal_Int32 kTestStr11Len = 17; +const sal_Int32 kTestStr12Len = 18; +const sal_Int32 kTestStr13Len = 19; +const sal_Int32 kTestStr14Len = 19; +const sal_Int32 kTestStr15Len = 20; +const sal_Int32 kTestStr16Len = 20; +const sal_Int32 kTestStr17Len = 22; +const sal_Int32 kTestStr18Len = 16; +const sal_Int32 kTestStr19Len = 22; +const sal_Int32 kTestStr20Len = 3; +const sal_Int32 kTestStr21Len = 3; +const sal_Int32 kTestStr22Len = 32; +const sal_Int32 kTestStr23Len = 16; +const sal_Int32 kTestStr24Len = 31; +const sal_Int32 kTestStr25Len = 0; +const sal_Int32 kTestStr26Len = 4; +const sal_Int32 kTestStr27Len = 1; +const sal_Int32 kTestStr28Len = 11; +const sal_Int32 kTestStr29Len = 18; +const sal_Int32 kTestStr30Len = 10; +const sal_Int32 kTestStr31Len = 16; +const sal_Int32 kTestStr32Len = 16; +const sal_Int32 kTestStr33Len = 1; +const sal_Int32 kTestStr34Len = 11; +const sal_Int32 kTestStr35Len = 11; +const sal_Int32 kTestStr36Len = 28; +const sal_Int32 kTestStr37Len = 20; +const sal_Int32 kTestStr38Len = 7; +const sal_Int32 kTestStr39Len = 33; +const sal_Int32 kTestStr40Len = 27; +const sal_Int32 kTestStr41Len = 3; +const sal_Int32 kTestStr42Len = 10; +const sal_Int32 kTestStr43Len = 13; +const sal_Int32 kTestStr44Len = 2; +const sal_Int32 kTestStr45Len = 8; +const sal_Int32 kTestStr46Len = 9; +const sal_Int32 kTestStr47Len = 4; +const sal_Int32 kTestStr48Len = 5; +const sal_Int32 kTestStr49Len = 15; +const sal_Int32 kTestStr50Len = 16; +const sal_Int32 kTestStr51Len = 5; +const sal_Int32 kTestStr52Len = 5; +const sal_Int32 kTestStr53Len = 5; +const sal_Int32 kTestStr54Len = 1; +const sal_Int32 kTestStr55Len = 1; +const sal_Int32 kTestStr56Len = 12; +const sal_Int32 kTestStr57Len = 12; +const sal_Int32 kTestStr58Len = 12; +const sal_Int32 kTestStr59Len = 6; +const sal_Int32 kTestStr60Len = 2; +const sal_Int32 kTestStr61Len = 13; +const sal_Int32 kTestStr62Len = 5; +const sal_Int32 kTestStr63Len = 7; +const sal_Int32 kTestStr64Len = 14; +const sal_Int32 kTestStr65Len = 15; +const sal_Int32 kTestStr66Len = 1; +const sal_Int32 kTestStr67Len = 3; +const sal_Int32 kTestStr68Len = 10; +const sal_Int32 kTestStr69Len = 11; +const sal_Int32 kTestStr70Len = 12; +const sal_Int32 kTestStr71Len = 14; +const sal_Int32 kTestStr72Len = 21; +const sal_Int32 kTestStr73Len = 22; +const sal_Int32 kTestStr74Len = 7; +const sal_Int32 kTestStr75Len = 7; +const sal_Int32 kTestStr76Len = 10; +const sal_Int32 kTestStr77Len = 12; +const sal_Int32 kTestStr78Len = 12; +const sal_Int32 kTestStr79Len = 13; +const sal_Int32 kTestStr80Len = 13; +const sal_Int32 kTestStr81Len = 3; +const sal_Int32 kTestStr82Len = 3; +const sal_Int32 kTestStr83Len = 6; +const sal_Int32 kTestStr84Len = 8; +const sal_Int32 kTestStr85Len = 8; +const sal_Int32 kTestStr86Len = 9; +const sal_Int32 kTestStr87Len = 9; +const sal_Int32 kTestStr88Len = 14; +const sal_Int32 kTestStr89Len = 14; +const sal_Int32 kTestStr90Len = 17; +const sal_Int32 kTestStr91Len = 19; +const sal_Int32 kTestStr92Len = 19; +const sal_Int32 kTestStr93Len = 20; +const sal_Int32 kTestStr94Len = 20; +const sal_Int32 kTestStr95Len = 8; +const sal_Int32 kTestStr96Len = 8; +const sal_Int32 kTestStr97Len = 11; +const sal_Int32 kTestStr98Len = 13; +const sal_Int32 kTestStr99Len = 13; +const sal_Int32 kTestStr100Len = 14; +const sal_Int32 kTestStr101Len = 14; +const sal_Int32 kTestStr102Len = 4; +const sal_Int32 kTestStr103Len = 4; +const sal_Int32 kTestStr104Len = 7; +const sal_Int32 kTestStr105Len = 9; +const sal_Int32 kTestStr106Len = 9; +const sal_Int32 kTestStr107Len = 10; +const sal_Int32 kTestStr108Len = 10; +const sal_Int32 kTestStr109Len = 15; +const sal_Int32 kTestStr110Len = 15; +const sal_Int32 kTestStr111Len = 18; +const sal_Int32 kTestStr112Len = 20; +const sal_Int32 kTestStr113Len = 20; +const sal_Int32 kTestStr114Len = 21; +const sal_Int32 kTestStr115Len = 21; +const sal_Int32 kTestStr116Len = 23; +const sal_Int32 kTestStr117Len = 24; +const sal_Int32 kTestStr118Len = 19; +const sal_Int32 kTestStr119Len = 20; +const sal_Int32 kTestStr120Len = 30; +const sal_Int32 kTestStr121Len = 31; +const sal_Int32 kTestStr122Len = 16; +const sal_Int32 kTestStr123Len = 21; +const sal_Int32 kTestStr124Len = 23; +const sal_Int32 kTestStr125Len = 30; +const sal_Int32 kTestStr126Len = 12; +const sal_Int32 kTestStr127Len = 17; +const sal_Int32 kTestStr128Len = 19; +const sal_Int32 kTestStr129Len = 26; +const sal_Int32 kTestStr130Len = 23; +const sal_Int32 kTestStr131Len = 28; +const sal_Int32 kTestStr132Len = 30; +const sal_Int32 kTestStr133Len = 37; +const sal_Int32 kTestStr134Len = 22; +const sal_Int32 kTestStr135Len = 24; +const sal_Int32 kTestStr136Len = 31; +const sal_Int32 kTestStr137Len = 18; +const sal_Int32 kTestStr138Len = 20; +const sal_Int32 kTestStr139Len = 27; +const sal_Int32 kTestStr140Len = 29; +const sal_Int32 kTestStr141Len = 31; +const sal_Int32 kTestStr142Len = 38; +const sal_Int32 kTestStr143Len = 5; +const sal_Int32 kTestStr144Len = 1; +const sal_Int32 kTestStr145Len = 12; +const sal_Int32 kTestStr146Len = 19; +const sal_Int32 kTestStr147Len = 19; +const sal_Int32 kTestStr148Len = 19; +const sal_Int32 kTestStr149Len = 32; +const sal_Int32 kTestStr150Len = 32; +const sal_Int32 kTestStr151Len = 31; +const sal_Int32 kTestStr152Len = 31; +const sal_Int32 kTestStr153Len = 31; +const sal_Int32 kTestStr154Len = 36; +const sal_Int32 kTestStr155Len = 36; +const sal_Int32 kTestStr156Len = 36; +const sal_Int32 kTestStr157Len = 49; +const sal_Int32 kTestStr158Len = 49; +const sal_Int32 kTestStr159Len = 49; +const sal_Int32 kTestStr160Len = 48; +const sal_Int32 kTestStr161Len = 48; +const sal_Int32 kTestStr162Len = 48; +const sal_Int32 kTestStr163Len = 15; +const sal_Int32 kTestStr164Len = 15; +const sal_Int32 kTestStr165Len = 15; +const sal_Int32 kTestStr166Len = 28; +const sal_Int32 kTestStr167Len = 28; +const sal_Int32 kTestStr168Len = 28; +const sal_Int32 kTestStr169Len = 27; +const sal_Int32 kTestStr170Len = 27; +const sal_Int32 kTestStr171Len = 27; +const sal_Int32 kTestStr1PlusStr6Len = kTestStr1Len + kTestStr6Len; + +const sal_Int32 uTestStr1Len = 16; +const sal_Int32 uTestStr2Len = 32; +const sal_Int32 uTestStr3Len = 16; +const sal_Int32 uTestStr4Len = 16; +const sal_Int32 uTestStr5Len = 16; +const sal_Int32 uTestStr9Len = 32; +const sal_Int32 uTestStr22Len = 32; + +const sal_Unicode uTestStr31[]= {0x400,0x410,0x4DF}; +const sal_Unicode uTestStr32[]= {0x9F9F,0xA000,0x8F80,0x9AD9}; + +const sal_Int32 uTestStr31Len = 3; +const sal_Int32 uTestStr32Len = 4; + +const sal_Int16 kRadixBinary = 2; +const sal_Int16 kRadixOctol = 8; +const sal_Int16 kRadixDecimal = 10; +const sal_Int16 kRadixHexdecimal = 16; +const sal_Int16 kRadixBase36 = 36; + +const sal_Int8 kSInt8Max = SCHAR_MAX; +const sal_Int16 kUInt8Max = UCHAR_MAX; +const sal_Int16 kSInt16Max = SHRT_MAX; +const sal_Int32 kUInt16Max = USHRT_MAX; +const sal_Int32 kSInt32Max = INT_MAX; +const sal_Int64 kUInt32Max = UINT_MAX; +const sal_Int64 kSInt64Max = SAL_CONST_INT64(9223372036854775807); + +const sal_Int32 kInt32MaxNumsCount = 5; + +const sal_Int32 kInt32MaxNums[kInt32MaxNumsCount] = + { + kSInt8Max, kUInt8Max, + kSInt16Max, kUInt16Max, + kSInt32Max + }; + +const sal_Int32 kInt64MaxNumsCount = 7; + +const sal_Int64 kInt64MaxNums[kInt64MaxNumsCount] = + { + kSInt8Max, kUInt8Max, + kSInt16Max, kUInt16Max, + kSInt32Max, kUInt32Max, + kSInt64Max + }; + +const sal_Int32 kBinaryNumsCount = 16; + +const sal_Int32 kBinaryMaxNumsCount = 7; + +const sal_Int32 kOctolNumsCount = 16; + +const sal_Int32 kOctolMaxNumsCount = 7; + +const sal_Int32 kDecimalNumsCount = 16; + +const sal_Int32 kDecimalMaxNumsCount = 7; + +const sal_Int32 kHexDecimalNumsCount = 16; + +const sal_Int32 kHexDecimalMaxNumsCount = 7; + +const sal_Int32 kBase36NumsCount = 36; + +const sal_Int32 kBase36MaxNumsCount = 7; + +const sal_Int32 nDoubleCount=24; +const double expValDouble[nDoubleCount]= + { + 3.0,3.1,3.1415,3.1415926535,3.141592653589793, + 3.1415926535897932,3.14159265358979323,3.1, + 3.141592653589793238462643,9.1096e-31,2.997925e8,6.241e18,5.381e18, + 1.7e-309,6.5822e-16,1.7e+307,2.2e30,3.1,3.1,-3.1, + 0.0,0.0,0.0,1.00e+308 + }; + +const sal_Int32 nFloatCount=22; +const float expValFloat[nFloatCount] = + { + 3.0f,3.1f,3.1415f,3.14159f,3.141592f, + 3.1415926f,3.14159265f,3.141592653589793238462643f, + 6.5822e-16f,9.1096e-31f,2.997925e8f,6.241e18f, + 1.00e38f,6.241e-37f,6.241e37f,3.1f,3.1f,-3.1f, + 3.1f,0.0f,0.0f,0.0f + }; + +const sal_Int32 nCharCount=15; +const sal_Unicode expValChar[nCharCount] = + { + 65,97,48,45,95, + 21,27,29, + 64,10,39,34, + 0,0,83 + }; + +const sal_Int32 nDefaultCount=6; +const sal_Unicode input1Default[nDefaultCount] = + { + 77,115,85,119,32,0 + }; +const sal_Int32 input2Default[nDefaultCount] = + { + 0,0,0,0,0,0 + }; +const sal_Int32 expValDefault[nDefaultCount] = + { + 4,9,-1,-1,3,-1 + }; + +const sal_Int32 nNormalCount=10; +const sal_Unicode input1Normal[nNormalCount] = + { + 77,77,77,115,115,115,119,119,0,0 + }; +const sal_Int32 input2Normal[nNormalCount] = + { + 0,32,80,0,13,20,0,80,0,32 + }; +const sal_Int32 expValNormal[nNormalCount] = + { + 4,-1,-1,9,15,-1,-1,-1,-1,-1 + }; + +const sal_Int32 nlastDefaultCount=5; +const sal_Unicode input1lastDefault[nlastDefaultCount] = + { + 77,115,119,32,0 + }; +const sal_Int32 input2lastDefault[nlastDefaultCount] = + { + 31,31,31,31,31 + }; +const sal_Int32 expVallastDefault[nlastDefaultCount] = + { + 4,15,-1,21,-1 + }; + +const sal_Int32 nlastNormalCount=8; +const sal_Unicode input1lastNormal[nlastNormalCount] = + { + 77,77,77,115,115,119,119,0 + }; +const sal_Int32 input2lastNormal[nlastNormalCount] = + { + 29,0,80,31,3,31,80,31 + }; +const sal_Int32 expVallastNormal[nlastNormalCount] = + { + 4,-1,4,15,-1,-1,-1,-1 + }; + +const sal_Int32 nStrDefaultCount=6; +const sal_Int32 input2StrDefault[nStrDefaultCount] = + { + 0,0,0,0,0,0 + }; +const sal_Int32 expValStrDefault[nStrDefaultCount] = + { + 0,4,-1,-1,-1,3 + }; + +const sal_Int32 nStrNormalCount=9; +const sal_Int32 input2StrNormal[nStrNormalCount] = + { + 0,32,0,30,0,0,0,32,0 + }; +const sal_Int32 expValStrNormal[nStrNormalCount] = + { + 0,-1,4,-1,-1,-1,-1,-1,3 + }; + +const sal_Int32 nStrLastDefaultCount=6; +const sal_Int32 input2StrLastDefault[nStrLastDefaultCount] = + { + 31,31,31,31,31,31 + }; +const sal_Int32 expValStrLastDefault[nStrLastDefaultCount] = + { + 0,4,-1,-1,-1,3 + }; + +const sal_Int32 nStrLastNormalCount=12; +const sal_Int32 input2StrLastNormal[nStrLastNormalCount] = + { + 31,0,80,31,2,31,31,31,0,31,31,14 + }; +const sal_Int32 expValStrLastNormal[nStrLastNormalCount] = + { + 0,-1,0,4,-1,-1,-1,-1,-1,3,15,11 + }; + +const sal_Int32 kNonSInt32Max = INT_MIN; +const sal_Int32 kNonSInt16Max = SHRT_MIN; + +#ifdef __cplusplus +} +#endif + +#endif // INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/OStringBuffer/rtl_String_Utils_Const.h b/sal/qa/OStringBuffer/rtl_String_Utils_Const.h new file mode 100644 index 000000000..fc258ead3 --- /dev/null +++ b/sal/qa/OStringBuffer/rtl_String_Utils_Const.h @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H +#define INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +static const sal_Int32 kErrCompareAStringToUString = -2; +static const sal_Int32 kErrCompareNAStringToUString = -3; +static const sal_Int32 kErrCompareAStringToRTLUString = -4; +static const sal_Int32 kErrCompareNAStringToRTLUString = -5; +static const sal_Int32 kErrAStringToByteStringCompare = -6; +static const sal_Int32 kErrAStringToByteStringNCompare = -7; +static const sal_Int32 kErrCompareAStringToString = -8; +static const sal_Int32 kErrCompareNAStringToString = -9; + +#ifdef __cplusplus +} +#endif + +#endif // INCLUDED_SAL_QA_OSTRINGBUFFER_RTL_STRING_UTILS_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/inc/stringhelper.hxx b/sal/qa/inc/stringhelper.hxx new file mode 100644 index 000000000..24222b915 --- /dev/null +++ b/sal/qa/inc/stringhelper.hxx @@ -0,0 +1,33 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_INC_STRINGHELPER_HXX +#define INCLUDED_SAL_QA_INC_STRINGHELPER_HXX + +#include +#include + +inline void operator<<=(OString& _rAsciiString, OUString const& _rUnicodeString) +{ + _rAsciiString = OUStringToOString(_rUnicodeString, RTL_TEXTENCODING_ASCII_US); +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/inc/valueequal.hxx b/sal/qa/inc/valueequal.hxx new file mode 100644 index 000000000..5e6d47d30 --- /dev/null +++ b/sal/qa/inc/valueequal.hxx @@ -0,0 +1,120 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX +#define INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX + +#include + +#include + +#define PREC_float 1 +#define PREC_double 2 +#define PREC_long_double 3 + +template +bool is_equal(T x, T y, sal_Int16 _nPrec) +{ + if (!(std::isfinite(x) && std::isfinite(y))) { + return x == y; + } + + // due to the fact that this check looks only if both values are equal + // we only need to look on one value + + // 14 digits will announce the checkPrecisionSize + + sal_Int32 nPRECISION; + switch(_nPrec) + { + case PREC_float: + nPRECISION = 6; + break; + case PREC_double: + nPRECISION = 14; + break; + case PREC_long_double: + nPRECISION = 20; + break; + default: + nPRECISION = 2; + } + + if (x < 0) + { + x = -x; + } + if (y < 0) + { + y = -y; + } + + if (_nPrec != PREC_long_double) + { + printf("double equal: %.20f\n", x); + printf(" %.20f\n", y); + } + //here nPrecOfN is the number after dot + sal_Int32 nBeforeDot = sal_Int32( log10(x) ); + if ( nBeforeDot < 0) + { + nBeforeDot = 0; + } + //printf("nPRECISION is %d\n", nPRECISION); + sal_Int32 nPrecOfN = -nPRECISION + nBeforeDot; + + if (_nPrec != PREC_long_double) + printf("nPrecOfN is %" SAL_PRIdINT32 "\n", nPrecOfN); + + double nPrec = pow(0.1, -nPrecOfN); + + if (_nPrec != PREC_long_double) + printf(" prec: %.20f\n", nPrec); + + double nDelta = fabs( x - y ) ; + + if (_nPrec != PREC_long_double) + { + printf(" delta: %.20f\n", nDelta); + printf(" nPrec: %.20f\n", nPrec); + printf("delta must be less or equal to prec\n\n"); + } + + if (nDelta > nPrec) + { + // values are not equal + return false; + } + + // values are equal + return true; +} + +bool is_float_equal(float x, float y) +{ + return is_equal(x, y, PREC_float); +} +bool is_double_equal(double x, double y) +{ + return is_equal(x, y, PREC_double); +} + +#endif // INCLUDED_SAL_QA_INC_VALUEEQUAL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/libs2test.txt b/sal/qa/libs2test.txt new file mode 100644 index 000000000..5503124f4 --- /dev/null +++ b/sal/qa/libs2test.txt @@ -0,0 +1,101 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# +# This file contain a list of todos for testshl2 automated tests. +# +# Legend: +# there exist 2 formats +# 1. file +# 2. path ; file +# +# 1. if only a file exist, it will be assume, that a directory with name 'file' +# exist, and a library with name 'file' create. +# 2. if the path to the file differ from the library file, use this format. +# + + +# LLA: marked as deprecated by Stephan Bergmann +ByteSequence ; rtl_ByteSequence + +OStringBuffer ; rtl_OStringBuffer + +rtl_strings ; rtl_OUString +rtl_strings ; rtl_OString +rtl_strings ; rtl_OUStringBuffer + +# replacements for old rtl::XString tests +rtl/oustring ; rtl_OUString2 +rtl/ostring ; rtl_OString2 + +osl/file ; osl_File +# LLA: temporarily removed, there are lot of problems with our environment +osl/socket ; osl_StreamSocket +osl/socket ; osl_DatagramSocket +osl/socket ; osl_SocketAddr +osl/socket ; osl_Socket2 +osl/socket ; osl_ConnectorSocket +osl/socket ; osl_AcceptorSocket + +osl/mutex ; osl_Mutex +osl/pipe ; osl_Pipe +osl/condition ; osl_Condition +osl/module ; osl_Module +osl/security ; osl_Security + +rtl/math ; rtl_math +rtl/math ; rtl_math2 + +# new 20040315 +rtl/alloc ; rtl_Alloc +rtl/crc32 ; rtl_crc32 +rtl/digest ; rtl_digest +rtl/bootstrap ; rtl_Bootstrap +rtl/ostring ; rtl_str +rtl/ostring ; rtl_string +rtl/random ; rtl_Random + +# new 20040324 +rtl/oustring ; rtl_ustr + +# new 20040326 +rtl/cipher ; rtl_cipher + +# new 20040331 +rtl/locale ; rtl_locale +rtl/uuid ; rtl_Uuid +rtl/process ; rtl_Process + +# new 20040413 +rtl/textenc ; rtl_textcvt +rtl/textenc ; rtl_tencinfo +rtl/oustringbuffer; rtl_OUStringBuffer2 + +# new 20040420 +rtl/uri ; rtl_Uri +rtl/logfile ; rtl_logfile + +# LLA: Due to the fact, that thread testing seems to be little bit error prone, now +# check this at the end. +osl/process ; osl_Thread + +# not ready yet +# strings ; test_oustring + +# new 20041025 +rtl/doublelock ; rtl_doublelocking + diff --git a/sal/qa/osl/condition/osl_Condition.cxx b/sal/qa/osl/condition/osl_Condition.cxx new file mode 100644 index 000000000..05b7fc661 --- /dev/null +++ b/sal/qa/osl/condition/osl_Condition.cxx @@ -0,0 +1,327 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "osl_Condition_Const.h" +#include + +using namespace osl; + +namespace { + +enum ConditionType +{ + thread_type_set, + thread_type_reset, + thread_type_wait +}; + +/** thread for testing Condition. + */ +class ConditionThread : public Thread +{ +public: + //get the Condition to operate + ConditionThread( ::osl::Condition& Con, ConditionType tType): m_MyCon( Con ), m_MyType( tType ) { } + +protected: + ::osl::Condition& m_MyCon; + ConditionType m_MyType; + + void SAL_CALL run() override + { + switch ( m_MyType ) + { + case thread_type_wait: + m_MyCon.wait(); break; + case thread_type_set: + m_MyCon.set(); break; + case thread_type_reset: + m_MyCon.reset(); break; + default: + break; + } + } +}; + +} + +namespace osl_Condition +{ + /** testing the method: + Condition() + */ + class ctors : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void ctors_create() + { + ::osl::Condition aCond; + bRes = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition its initial check state should be sal_False.", + !bRes ); + } + + void ctors_createAndSet() + { + ::osl::Condition aCond; + aCond.set(); + bRes = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and set it.", + bRes ); + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctors_create); + CPPUNIT_TEST(ctors_createAndSet); + CPPUNIT_TEST_SUITE_END(); + }; + + /** testing the method: + void set() + */ + class set : public CppUnit::TestFixture + { + public: + bool bRes, bRes1, bRes2; + + void set_createAndSet() + { + ::osl::Condition aCond; + aCond.set(); + bRes = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: check state should be sal_True after set.", + bRes ); + } + + void set_threadWaitRelease() + { + ::osl::Condition aCond; + ConditionThread myThread1(aCond, thread_type_wait); + myThread1.create(); + bRes = myThread1.isRunning(); + + ConditionThread myThread2(aCond, thread_type_set); + myThread2.create(); + + myThread1.join(); + bRes1 = myThread1.isRunning(); + bRes2 = aCond.check(); + myThread2.join(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: use one thread to set the condition in order to release another thread.", + bRes); + CPPUNIT_ASSERT_MESSAGE("#test comment#: use one thread to set the condition in order to release another thread.", + !bRes1); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: use one thread to set the condition in order to release another thread.", + bRes2); + } + + CPPUNIT_TEST_SUITE(set); + CPPUNIT_TEST(set_createAndSet); + CPPUNIT_TEST(set_threadWaitRelease); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + void reset() + */ + class reset : public CppUnit::TestFixture + { + public: + bool bRes, bRes1, bRes2; + + void reset_resetWaitAndSet() + { + ::osl::Condition aCond; + aCond.reset(); + + ConditionThread myThread(aCond, thread_type_wait); + myThread.create(); + bRes = myThread.isRunning(); + bRes2 = aCond.check(); + + aCond.set(); + myThread.join(); + bRes1 = myThread.isRunning(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.", + bRes); + CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.", + !bRes1); + CPPUNIT_ASSERT_MESSAGE("#test comment#: wait will cause a reset thread block, use set to release it.", + !bRes2); + } + + void reset_resetAndSet() + { + ::osl::Condition aCond; + aCond.reset(); + bRes = aCond.check(); + aCond.set(); + bRes1 = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and reset/set it.", + !bRes ); + CPPUNIT_ASSERT_MESSAGE("#test comment#: create a condition and reset/set it.", + bRes1 ); + } + + CPPUNIT_TEST_SUITE(reset); + CPPUNIT_TEST(reset_resetWaitAndSet); + CPPUNIT_TEST(reset_resetAndSet); + CPPUNIT_TEST_SUITE_END(); + }; + + /** testing the method: + Result wait(const TimeValue *pTimeout = 0) + */ + class wait : public CppUnit::TestFixture + { + public: + bool bRes, bRes1, bRes2; + std::unique_ptr tv1; + + void setUp() override + { + tv1.reset(new TimeValue); + tv1->Seconds = 1; + tv1->Nanosec = 0; + } + + void tearDown() override + { + tv1.reset(); + } + + void wait_testAllCombos( ) + { + ::osl::Condition cond1; + ::osl::Condition cond2; + ::osl::Condition cond3; + + cond1.set(); + cond2.set(); + + osl::Condition::Result r1=cond1.wait(tv1.get()); + osl::Condition::Result r2=cond2.wait(); + osl::Condition::Result r3=cond3.wait(tv1.get()); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.", + ::osl::Condition::result_ok, r1 ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.", + ::osl::Condition::result_ok, r2 ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: test three types of wait.", + ::osl::Condition::result_timeout, r3 ); + } + + void wait_timeoutWaits() + { + ::osl::Condition aCond; + ::osl::Condition::Result wRes, wRes1; + + aCond.reset(); + bRes = aCond.check(); + wRes = aCond.wait(tv1.get()); + + aCond.set(); + wRes1 = aCond.wait(tv1.get()); + bRes1 = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: wait a condition after set/reset.", + !bRes ); + CPPUNIT_ASSERT_MESSAGE("#test comment#: wait a condition after set/reset.", + bRes1 ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("#test comment#: wait a condition after set/reset.", + ::osl::Condition::result_timeout, wRes ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("#test comment#: wait a condition after set/reset.", + ::osl::Condition::result_ok, wRes1 ); + } + + CPPUNIT_TEST_SUITE(wait); + CPPUNIT_TEST(wait_testAllCombos); + CPPUNIT_TEST(wait_timeoutWaits); + CPPUNIT_TEST_SUITE_END(); + }; + + /** testing the method: + sal_Bool check() + */ + class check : public CppUnit::TestFixture + { + public: + bool bRes, bRes1, bRes2; + + void check_checkStates() + { + ::osl::Condition aCond; + + aCond.reset(); + bRes = aCond.check(); + aCond.set(); + bRes1 = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: check the condition states.", + !bRes ); + CPPUNIT_ASSERT_MESSAGE("#test comment#: check the condition states.", + bRes1 ); + } + + void check_threadedCheckStates( ) + { + ::osl::Condition aCond; + aCond.reset(); + + ConditionThread myThread(aCond, thread_type_set); + myThread.create(); + myThread.join(); + bRes = aCond.check(); + + ConditionThread myThread1(aCond, thread_type_reset); + myThread1.create(); + myThread1.join(); + bRes1 = aCond.check(); + + CPPUNIT_ASSERT_MESSAGE("#test comment#: use threads to set/reset Condition and check it in main routine.", + bRes ); + CPPUNIT_ASSERT_MESSAGE("#test comment#: use threads to set/reset Condition and check it in main routine.", + !bRes1 ); + } + + CPPUNIT_TEST_SUITE(check); + CPPUNIT_TEST(check_checkStates); + CPPUNIT_TEST(check_threadedCheckStates); + CPPUNIT_TEST_SUITE_END(); + }; + + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::ctors); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::set); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::reset); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::wait); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Condition::check); + +} // namespace osl_Condition + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/condition/osl_Condition_Const.h b/sal/qa/osl/condition/osl_Condition_Const.h new file mode 100644 index 000000000..89b26121b --- /dev/null +++ b/sal/qa/osl/condition/osl_Condition_Const.h @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H +#define INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef UNX +#include +#endif + +#include +#include +#include + +// condition names + +OUString aTestCon("testcondition"); + +const char pTestString[17] = "Sun Microsystems"; + +#endif // INCLUDED_SAL_QA_OSL_CONDITION_OSL_CONDITION_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/file/osl_File.cxx b/sal/qa/osl/file/osl_File.cxx new file mode 100644 index 000000000..718fb6542 --- /dev/null +++ b/sal/qa/osl/file/osl_File.cxx @@ -0,0 +1,4980 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +#include +#include +#include "osl_File_Const.h" + +#include +#include +#include + +#include + +#include + +#ifdef _WIN32 +#include +#include +#include +#endif + +using namespace osl; + +/** detailed wrong message. +*/ +static OString errorToString(const osl::FileBase::RC _nError) +{ + OString sResult; + switch (_nError) { + case osl::FileBase::E_None: + sResult = "Success"; + break; + case osl::FileBase::E_PERM: + sResult = "Operation not permitted"; + break; + case osl::FileBase::E_NOENT: + sResult = "No such file or directory"; + break; + case osl::FileBase::E_EXIST: + sResult = "Already Exist"; + break; + case osl::FileBase::E_ACCES: + sResult = "Permission denied"; + break; + case osl::FileBase::E_INVAL: + sResult = "The format of the parameters was not valid"; + break; + case osl::FileBase::E_NOTDIR: + sResult = "Not a directory"; + break; + case osl::FileBase::E_ISDIR: + sResult = "Is a directory"; + break; + case osl::FileBase::E_BADF: + sResult = "Bad file"; + break; + case osl::FileBase::E_NOTEMPTY: + sResult = "The directory is not empty"; + break; + default: + sResult = "Unknown Error"; + break; + } + return sResult; +} + +static OString errorToStr(osl::FileBase::RC const& nError) +{ + OString suBuf = "The returned error is: " + + errorToString(nError) + + "!\n"; + return suBuf; +} + +/** compare two TimeValue, unit is "ms", since Windows time precision is better than UNX. +*/ +/* FIXME: the above assertion is bogus */ + +#if (defined UNX) // precision of time in Windows is better than UNX +# define delta 2000 // time precision, 2000ms +#else +# define delta 1800 // time precision, 1.8s +#endif + +static bool t_compareTime(TimeValue *m_aEndTime, TimeValue *m_aStartTime, sal_Int32 nDelta) +{ + sal_Int32 nDeltaSeconds = m_aEndTime->Seconds - m_aStartTime->Seconds; + sal_Int32 nDeltaNanoSec = sal_Int32(m_aEndTime->Nanosec) - sal_Int32(m_aStartTime->Nanosec); + if (nDeltaNanoSec < 0) + { + nDeltaNanoSec = 1000000000 + nDeltaNanoSec; + nDeltaSeconds--; + } + + sal_Int32 nDeltaMilliSec = (nDeltaSeconds * 1000) + (nDeltaNanoSec / 1000000); + return (nDeltaMilliSec < nDelta); +} + +/** compare two OUString file name. +*/ +static bool compareFileName(const OUString & ustr1, const OUString & ustr2) +{ + bool bOk; +// on Windows, the separator is '\', so here change to '/', then compare +#if defined(_WIN32) + OUString ustr1new,ustr2new; + sal_Unicode reverseSlash = '\\'; + + if (ustr1.lastIndexOf(reverseSlash) != -1) + ustr1new = ustr1.replace(reverseSlash,'/'); + else + ustr1new = ustr1; + if (ustr2.lastIndexOf(reverseSlash) != -1) + ustr2new = ustr2.replace(reverseSlash,'/'); + else + ustr2new = ustr2; + bOk = ustr1new.equalsIgnoreAsciiCase(ustr2new); +#else + bOk = ustr1.equalsIgnoreAsciiCase(ustr2); +#endif + return bOk; +} + +/** simple version to judge if a file name or directory name is a URL or a system path, just to see if it + is start with "file:///";. +*/ +static bool isURL(const OUString& pathname) +{ + return pathname.startsWith(aPreURL); +} + +/** concat two part to form a URL or system path, add PATH_SEPARATOR between them if necessary, add "file:///" to beginning if necessary. +*/ +static void concatURL(OUString & pathname1, const OUString & pathname2) +{ + // check if pathname1 is full qualified URL; + if (!isURL(pathname1)) + { + OUString aPathName = pathname1.copy(0); + osl::FileBase::getFileURLFromSystemPath(pathname1, aPathName); // convert if not full qualified URL + pathname1 = aPathName.copy(0); + } + + // check if '/' is in the end of pathname1 or at the begin of pathname2; + if (!pathname1.endsWith(aSlashURL) && !pathname2.startsWith(aSlashURL)) + pathname1 += aSlashURL; + pathname1 += pathname2; +} + +/** create a temp test file using OUString name of full qualified URL or system path. +*/ +static void createTestFile(const OUString& filename) +{ + OUString aPathURL = filename.copy(0); + osl::FileBase::RC nError; + + if (!isURL(filename)) + osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL + + File aFile(aPathURL); + nError = aFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_OpenFlag_Create); + if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST)) + printf("createTestFile failed!\n"); + + aFile.close(); + +} + +/** create a temp test file using OUString name of full qualified URL or system path in a base directory. +*/ +static void createTestFile(const OUString& basename, const OUString& filename) +{ + OUString aBaseURL = basename.copy(0); + + concatURL(aBaseURL, filename); + createTestFile(aBaseURL); +} + +/** delete a temp test file using OUString name. +*/ +static void deleteTestFile(const OUString& filename) +{ + OUString aPathURL = filename.copy(0); + osl::FileBase::RC nError; + + if (!isURL(filename)) + osl::FileBase::getFileURLFromSystemPath(filename, aPathURL); // convert if not full qualified URL + + nError = File::setAttributes(aPathURL, osl_File_Attribute_GrpWrite| osl_File_Attribute_OwnWrite| osl_File_Attribute_OthWrite); // if readonly, make writable. + CPPUNIT_ASSERT_MESSAGE("In deleteTestFile Function: set writable ", (osl::FileBase::E_None == nError) || (osl::FileBase::E_NOENT == nError)); + + nError = File::remove(aPathURL); + CPPUNIT_ASSERT_MESSAGE("In deleteTestFile Function: remove ", (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT)); +} + +/** delete a temp test file using OUString name of full qualified URL or system path in a base directory. +*/ +static void deleteTestFile(const OUString& basename, const OUString& filename) +{ + OUString aBaseURL = basename.copy(0); + + concatURL(aBaseURL, filename); + deleteTestFile(aBaseURL); +} + +/** create a temp test directory using OUString name of full qualified URL or system path. +*/ +static void createTestDirectory(const OUString& dirname) +{ + OUString aPathURL = dirname.copy(0); + osl::FileBase::RC nError; + + if (!isURL(dirname)) + osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL + nError = Directory::create(aPathURL); + if ((nError != osl::FileBase::E_None) && (nError != osl::FileBase::E_EXIST)) + printf("createTestDirectory failed: %d!\n", int(nError)); +} + +/** create a temp test directory using OUString name of full qualified URL or system path in a base directory. +*/ +static void createTestDirectory(const OUString& basename, const OUString& dirname) +{ + OUString aBaseURL = basename.copy(0); + + concatURL(aBaseURL, dirname); + createTestDirectory(aBaseURL); +} + +/** delete a temp test directory using OUString name of full qualified URL or system path. +*/ +static void deleteTestDirectory(const OUString& dirname) +{ + OUString aPathURL = dirname.copy(0); + if (!isURL(dirname)) + osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL + + Directory testDir(aPathURL); + if (testDir.isOpen()) + testDir.close(); // close if still open. + + osl::FileBase::RC nError = Directory::remove(aPathURL); + + OString strError = "In deleteTestDirectory function: remove Directory " + + OUStringToOString(aPathURL, RTL_TEXTENCODING_ASCII_US) + " -> result: " + OString::number(nError); + CPPUNIT_ASSERT_MESSAGE(strError.getStr(), (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT)); +} + +/** delete a temp test directory using OUString name of full qualified URL or system path in a base directory. +*/ +static void deleteTestDirectory(const OUString& basename, const OUString& dirname) +{ + OUString aBaseURL = basename.copy(0); + + concatURL(aBaseURL, dirname); + deleteTestDirectory(aBaseURL); +} + +namespace { + +/** Check for the file and directory access right. +*/ +enum class oslCheckMode { + Exist, + OpenAccess, + ReadAccess, + WriteAccess +}; + +} + +/** check if the file exist +*/ +static bool ifFileExist(const OUString & str) +{ + File testFile(str); + return (testFile.open(osl_File_OpenFlag_Read) == osl::FileBase::E_None); +} + +/** check if the file can be written +*/ +static bool ifFileCanWrite(const OUString & str) +{ + // on Windows, the file has no write right, but can be written +#ifdef _WIN32 + bool bCheckResult = false; + OUString aUStr = str.copy(0); + if (isURL(str)) + osl::FileBase::getSystemPathFromFileURL(str, aUStr); + + OString aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US); + const char *path = aString.getStr(); + if ((_access(path, 2)) != -1) + bCheckResult = true; + // on UNX, just test if open success with osl_File_OpenFlag_Write +#else + File testFile(str); + bool bCheckResult = (testFile.open(osl_File_OpenFlag_Write) == osl::FileBase::E_None); +#endif + return bCheckResult; +} + +static bool checkDirectory(const OUString& str, oslCheckMode nCheckMode) +{ + OUString aUString; + DirectoryItem rItem; + osl::FileBase::RC rc; + bool bCheckResult= false; + + Directory aDir(str); + rc = aDir.open(); + + if ((rc != osl::FileBase::E_NOENT) && (rc != osl::FileBase::E_ACCES)) + { + switch (nCheckMode) + { + case oslCheckMode::Exist: + if (rc == ::osl::FileBase::E_None) + bCheckResult = true; + break; + case oslCheckMode::OpenAccess: + if (rc == osl::FileBase::E_None) + bCheckResult = true; + break; + case oslCheckMode::ReadAccess: + rc = aDir.getNextItem(rItem); + bCheckResult = (rc == osl::FileBase::E_None) || (rc == osl::FileBase::E_NOENT); + break; + case oslCheckMode::WriteAccess: + ((aUString += str) += aSlashURL) += aTmpName2; + if (Directory::create(aUString) == osl::FileBase::E_None) + { + bCheckResult = true; + rc = Directory::remove(aUString); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, rc); + } + else + { + bCheckResult = false; + } + break; + + default: + bCheckResult = false; + } + + rc = aDir.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, rc); + } + + return bCheckResult; +} + +/** construct error message +*/ +static OString outputError(const OString & returnVal, const OString & rightVal, const char * msg = "") +{ + if (returnVal == rightVal) + return OString(); + + OString aString = msg + + OString::Concat(": the returned value is '") + + returnVal + + "', but the value should be '" + + rightVal + + "'."; + return aString; +} + +#if (defined UNX) /* chmod() method is different in Windows */ +/** Change file mode, two version in UNIX and Windows;. +*/ +static void changeFileMode(OUString & filepath, sal_Int32 mode) +{ + OString aString; + OUString aUStr = filepath.copy(0); + + if (isURL(filepath)) + osl::FileBase::getSystemPathFromFileURL(filepath, aUStr); + + aString = OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US); + int ret = chmod(aString.getStr(), mode); + CPPUNIT_ASSERT_EQUAL(0, ret); +} +#else +static void hideFile(const OUString& filepath) +{ + OUString aSysPath(filepath); + + if (isURL(filepath)) + osl::FileBase::getSystemPathFromFileURL(filepath, aSysPath); + + bool ret = SetFileAttributesW(o3tl::toW(aSysPath.getStr()), FILE_ATTRIBUTE_HIDDEN); + CPPUNIT_ASSERT(ret); +} +#endif + +#if 0 +#if defined UNX +static OUString getCurrentPID(); +#endif +#endif + +// Beginning of the test cases for osl::FileBase class + +namespace osl_FileBase +{ + // testing the method + // static inline RC getAbsoluteFileURL(const OUString& ustrBaseDirectoryURL, + // const OUString& ustrRelativeFileURL, + // OUString& ustrAbsoluteFileURL) + + class getAbsoluteFileURL : public CppUnit::TestFixture + { + public: + void check_getAbsoluteFileURL(OUString const& _suBaseURL, + OString const& _sRelativeURL, + osl::FileBase::RC _nAssumeError, + OUString const& _suAssumeResultStr); + + void getAbsoluteFileURL_001_1(); + void getAbsoluteFileURL_001_2(); + void getAbsoluteFileURL_001_3(); + void getAbsoluteFileURL_001_4(); + void getAbsoluteFileURL_001_5(); + void getAbsoluteFileURL_001_6(); + void getAbsoluteFileURL_001_7(); + void getAbsoluteFileURL_001_8(); + void getAbsoluteFileURL_002(); + void getAbsoluteFileURL_003(); + void getAbsoluteFileURL_004(); + + CPPUNIT_TEST_SUITE(getAbsoluteFileURL); + CPPUNIT_TEST(getAbsoluteFileURL_001_1); + CPPUNIT_TEST(getAbsoluteFileURL_001_2); + CPPUNIT_TEST(getAbsoluteFileURL_001_3); + CPPUNIT_TEST(getAbsoluteFileURL_001_4); + CPPUNIT_TEST(getAbsoluteFileURL_001_5); + CPPUNIT_TEST(getAbsoluteFileURL_001_6); + CPPUNIT_TEST(getAbsoluteFileURL_001_7); + CPPUNIT_TEST(getAbsoluteFileURL_001_8); + CPPUNIT_TEST(getAbsoluteFileURL_002); + CPPUNIT_TEST(getAbsoluteFileURL_003); + CPPUNIT_TEST(getAbsoluteFileURL_004); + CPPUNIT_TEST_SUITE_END(); + }; + + void getAbsoluteFileURL::check_getAbsoluteFileURL(OUString const& _suBaseURL, + OString const& _sRelativeURL, + osl::FileBase::RC _nAssumeError, + OUString const& _suAssumeResultStr) + { + OUString suRelativeURL = OStringToOUString(_sRelativeURL, RTL_TEXTENCODING_UTF8); + OString sBaseURL = OUStringToOString(_suBaseURL, RTL_TEXTENCODING_UTF8); + OUString suResultURL; + osl::FileBase::RC nError = osl::FileBase::getAbsoluteFileURL(_suBaseURL, suRelativeURL, suResultURL); + OString sResultURL = OUStringToOString(suResultURL, RTL_TEXTENCODING_UTF8); + OString sError = errorToString(nError); + printf("getAbsoluteFileURL('%s','%s') deliver absolute URL: '%s', error '%s'\n", + sBaseURL.getStr(), _sRelativeURL.getStr(),sResultURL.getStr(), sError.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: error number is wrong", _nAssumeError, nError); + + if (nError == osl::FileBase::E_None) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong: ResultURL is not equal to expected URL ", _suAssumeResultStr, suResultURL); + } + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_1() + { + OUString suAssume = aUserDirectoryURL + "/relative/file1"; + check_getAbsoluteFileURL(aUserDirectoryURL, "relative/file1",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_2() + { + OUString suAssume = aUserDirectoryURL + "/relative/file2"; + check_getAbsoluteFileURL(aUserDirectoryURL, "relative/./file2",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_3() + { + OUString suAssume = aUserDirectoryURL + "/file3"; + check_getAbsoluteFileURL(aUserDirectoryURL, "relative/../file3",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_4() + { + OUString suAssume = aUserDirectoryURL + "/file4"; + check_getAbsoluteFileURL(aUserDirectoryURL, "././relative/../file4",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_5() + { + OUString suAssume; + suAssume = aUserDirectoryURL + "/relative/"; + check_getAbsoluteFileURL(aUserDirectoryURL, "././relative/.",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_6() + { + OUString suAssume = aUserDirectoryURL + "/.relative"; + check_getAbsoluteFileURL(aUserDirectoryURL, "./.relative",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_7() + { + OUString suAssume; + suAssume = aUserDirectoryURL + "/.a/"; + check_getAbsoluteFileURL(aUserDirectoryURL, "./.a/mydir/..",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_001_8() + { + OUString suAssume = aUserDirectoryURL + "/tmp/ok"; + check_getAbsoluteFileURL(aUserDirectoryURL, "tmp//ok",osl::FileBase::E_None, suAssume); + } + + void getAbsoluteFileURL::getAbsoluteFileURL_002() + { +#if 0 +#if (defined UNX) // Link is not defined in Windows + OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys); + aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file"; + aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/canonical.name"; + + OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US); + strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US); + + createTestFile(aCanURL1); + sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), fd); + OString sLnkURL = OUStringToOString(aLnkURL1, RTL_TEXTENCODING_ASCII_US); + OUString suAssume = aUserDirectoryURL + "/canonical.name"; + check_getAbsoluteFileURL(aUserDirectoryURL, sLnkURL, osl::FileBase::E_None, suAssume); + deleteTestFile(aCanURL1); + fd = remove(strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), fd); +#endif +#endif + } + + // please see line# 930 + void getAbsoluteFileURL::getAbsoluteFileURL_003() + { + } + + void getAbsoluteFileURL::getAbsoluteFileURL_004() + { + // create two level directories under $Temp/PID/ + OUString aUStrUpBase = aUserDirectoryURL + "/test1"; + createTestDirectory(aUStrUpBase); + OUString aUStrBase = aUserDirectoryURL + "/test1/dir1"; + createTestDirectory(aUStrBase); + + OUString suAssume = aUserDirectoryURL + "/mytestfile"; + check_getAbsoluteFileURL(aUStrBase, "../../mytestfile" , osl::FileBase::E_None, suAssume); + deleteTestDirectory(aUStrBase); + deleteTestDirectory(aUStrUpBase); + } + + // testing two methods: + // static inline RC getSystemPathFromFileURL(const OUString& ustrFileURL, + // OUString& ustrSystemPath) + // static RC getFileURLFromSystemPath(const OUString & ustrSystemPath, + // OUString & ustrFileURL); + + class SystemPath_FileURL : public CppUnit::TestFixture + { + public: + void getSystemPathFromFileURL_001_1(); + void getSystemPathFromFileURL_001_2(); + void getSystemPathFromFileURL_001_21(); + void getSystemPathFromFileURL_001_22(); + void getSystemPathFromFileURL_001_3(); + void getSystemPathFromFileURL_001_31(); + void getSystemPathFromFileURL_001_4(); + void getSystemPathFromFileURL_001_41(); + void getSystemPathFromFileURL_001_5(); + void getSystemPathFromFileURL_001_51(); + void getSystemPathFromFileURL_001_52(); + void getSystemPathFromFileURL_001_53(); + void getSystemPathFromFileURL_001_6(); + void getSystemPathFromFileURL_001_61(); + void getSystemPathFromFileURL_001_7(); + void getSystemPathFromFileURL_001_71(); + void getSystemPathFromFileURL_001_8(); + void getSystemPathFromFileURL_001_81(); + void getSystemPathFromFileURL_001_9(); + void getSystemPathFromFileURL_001_91(); + void getSystemPathFromFileURL_001_92(); + void getSystemPathFromFileURL_004(); + void getSystemPathFromFileURL_005(); + + // test case for getFileURLFromSystemPath + void getFileURLFromSystemPath_001(); + void getFileURLFromSystemPath_002(); + void getFileURLFromSystemPath_003(); + void getFileURLFromSystemPath_004(); + void getFileURLFromSystemPath_004_1(); + void getFileURLFromSystemPath_005(); + + CPPUNIT_TEST_SUITE(SystemPath_FileURL); + CPPUNIT_TEST(getSystemPathFromFileURL_001_1); + CPPUNIT_TEST(getSystemPathFromFileURL_001_2); + CPPUNIT_TEST(getSystemPathFromFileURL_001_21); + CPPUNIT_TEST(getSystemPathFromFileURL_001_22); + CPPUNIT_TEST(getSystemPathFromFileURL_001_3); + CPPUNIT_TEST(getSystemPathFromFileURL_001_31); + CPPUNIT_TEST(getSystemPathFromFileURL_001_4); + CPPUNIT_TEST(getSystemPathFromFileURL_001_41); + CPPUNIT_TEST(getSystemPathFromFileURL_001_5); + CPPUNIT_TEST(getSystemPathFromFileURL_001_51); + CPPUNIT_TEST(getSystemPathFromFileURL_001_52); + CPPUNIT_TEST(getSystemPathFromFileURL_001_53); + CPPUNIT_TEST(getSystemPathFromFileURL_001_6); + CPPUNIT_TEST(getSystemPathFromFileURL_001_61); + CPPUNIT_TEST(getSystemPathFromFileURL_001_7); + CPPUNIT_TEST(getSystemPathFromFileURL_001_71); + CPPUNIT_TEST(getSystemPathFromFileURL_001_8); + CPPUNIT_TEST(getSystemPathFromFileURL_001_81); + CPPUNIT_TEST(getSystemPathFromFileURL_001_9); + CPPUNIT_TEST(getSystemPathFromFileURL_001_91); + CPPUNIT_TEST(getSystemPathFromFileURL_001_92); + CPPUNIT_TEST(getSystemPathFromFileURL_004); + CPPUNIT_TEST(getSystemPathFromFileURL_005); + CPPUNIT_TEST(getFileURLFromSystemPath_001); + CPPUNIT_TEST(getFileURLFromSystemPath_002); + CPPUNIT_TEST(getFileURLFromSystemPath_003); + CPPUNIT_TEST(getFileURLFromSystemPath_004); + CPPUNIT_TEST(getFileURLFromSystemPath_004_1); + CPPUNIT_TEST(getFileURLFromSystemPath_005); + CPPUNIT_TEST_SUITE_END(); + + private: + void check_SystemPath_FileURL( + OString const& _sSource, + osl::FileBase::RC _nAssumeError, + OString const& _sAssumeResultStr, + bool bDirection = true); + + void checkWNTBehaviour_getSystemPathFromFileURL( + OString const& _sURL, + osl::FileBase::RC _nAssumeError, + OString const& _sWNTAssumeResultString); + + void checkUNXBehaviour_getSystemPathFromFileURL( + OString const& _sURL, + osl::FileBase::RC _nAssumeError, + OString const& _sUnixAssumeResultString); + + void checkWNTBehaviour_getFileURLFromSystemPath(OString const& _sSysPath, + osl::FileBase::RC _nAssumeError, + OString const& _sWNTAssumeResultString); + + void checkUNXBehaviour_getFileURLFromSystemPath( + OString const& _sSysPath, + osl::FileBase::RC _nAssumeError, + OString const& _sUnixAssumeResultString); + + }; + + // if bDirection==sal_True, check getSystemPathFromFileURL + // if bDirection==sal_False, check getFileURLFromSystemPath + void SystemPath_FileURL::check_SystemPath_FileURL( + OString const& _sSource, + osl::FileBase::RC _nAssumeError, + OString const& _sAssumeResultStr, + bool bDirection) + { + // PRE: URL as String + OUString suSource; + OUString suStr; + suSource = OStringToOUString(_sSource, RTL_TEXTENCODING_UTF8); + osl::FileBase::RC nError; + + if (bDirection) + nError = osl::FileBase::getSystemPathFromFileURL(suSource, suStr); + else + nError = osl::FileBase::getFileURLFromSystemPath(suSource, suStr); + + // if the given string is gt length 0, + // we check also this string + OString sStr = OUStringToOString(suStr, RTL_TEXTENCODING_UTF8); + OString sError = errorToString(nError); + + if (bDirection) + printf("getSystemPathFromFileURL('%s') deliver system path: '%s', error '%s'\n", + _sSource.getStr(), sStr.getStr(), sError.getStr()); + else + printf("getFileURLFromSystemPath('%s') deliver File URL: '%s', error '%s'\n", + _sSource.getStr(), sStr.getStr(), sError.getStr()); + + if (!_sAssumeResultStr.isEmpty()) + { + bool bStrAreEqual = _sAssumeResultStr == sStr; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong", + _nAssumeError, nError); + CPPUNIT_ASSERT_MESSAGE("Assumption is wrong", + bStrAreEqual); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("Assumption is wrong", _nAssumeError, nError); + } + } + + void SystemPath_FileURL::checkWNTBehaviour_getSystemPathFromFileURL( + OString const& _sURL, + osl::FileBase::RC _nAssumeError, + OString const& _sWNTAssumeResultString) + { +#if defined(_WIN32) + check_SystemPath_FileURL(_sURL, _nAssumeError, _sWNTAssumeResultString); +#else + (void)_sURL; + (void)_nAssumeError; + (void)_sWNTAssumeResultString; +#endif + } + + void SystemPath_FileURL::checkUNXBehaviour_getSystemPathFromFileURL( + OString const& _sURL, + osl::FileBase::RC _nAssumeError, + OString const& _sUnixAssumeResultString) + { +#if (defined UNX) + check_SystemPath_FileURL(_sURL, _nAssumeError, _sUnixAssumeResultString); +#else + (void)_sURL; + (void)_nAssumeError; + (void)_sUnixAssumeResultString; +#endif + } + + void SystemPath_FileURL::checkWNTBehaviour_getFileURLFromSystemPath( + OString const& _sSysPath, + osl::FileBase::RC _nAssumeError, + OString const& _sWNTAssumeResultString) + { +#if defined(_WIN32) + check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sWNTAssumeResultString, false); +#else + (void)_sSysPath; + (void)_nAssumeError; + (void)_sWNTAssumeResultString; +#endif + } + + void SystemPath_FileURL::checkUNXBehaviour_getFileURLFromSystemPath( + OString const& _sSysPath, + osl::FileBase::RC _nAssumeError, + OString const& _sUnixAssumeResultString) + { +#if (defined UNX) + check_SystemPath_FileURL(_sSysPath, _nAssumeError, _sUnixAssumeResultString, false); +#else + (void)_sSysPath; + (void)_nAssumeError; + (void)_sUnixAssumeResultString; +#endif + } + + /** Test for getSystemPathFromFileURL() + this test is split into 2 different OS tests, + the first function checkUNXBehaviour... runs only on Unix based Systems, + the second only on windows based systems + the first parameter are a file URL where we want to get the system path of, + the second parameter is the assumed error of the osl_getSystemPathFromFileURL() function, + the third parameter is the assumed result string, the string will only test, if its length is greater than 0 + */ + + void SystemPath_FileURL::getSystemPathFromFileURL_001_1() + { + OString sURL(""); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_2() + { + OString sURL("/"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "\\"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_21() + { + /* From RFC3986, "2.2. Reserved Characters": + + "The purpose of reserved characters is to provide a set of delimiting + characters that are distinguishable from other data within a URI. + URIs that differ in the replacement of a reserved character with its + corresponding percent-encoded octet are not equivalent. Percent- + encoding a reserved character, or decoding a percent-encoded octet + that corresponds to a reserved character, will change how the URI is + interpreted by most applications. Thus, characters in the reserved + set are protected from normalization and are therefore safe to be + used by scheme-specific and producer-specific algorithms for + delimiting data subcomponents within a URI." + + In other words, %2F ("/") is NOT the same as /. + */ + OString sURL("%2F"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_22() + { + OString sURL("file:///tmp%2Fmydir"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_3() + { + OString sURL("a"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "a"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_31() + { + OString sURL("tmpname"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "tmpname"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_4() + { + OString sURL("file://"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_41() + { + OString sURL("file://localhost/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_5() + { + OString sURL("file:///tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_51() + { + OString sURL("file://c:/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_52() + { + OString sURL("file:///c:/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_53() + { + OString sURL("file:///c|/tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c|/tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_6() + { + OString sURL("file:///tmp/first"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_61() + { + OString sURL("file:///c:/tmp/first"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_7() + { + OString sURL("file:///tmp/../second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/../second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_71() + { + OString sURL("file:///c:/tmp/../second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/../second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\..\\second"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_8() + { + OString sURL("../tmp"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "../tmp"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "..\\tmp"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_81() + { +#if 0 + OString sURL("file://~/tmp"); + char* home_path; + home_path = getenv("HOME"); + OString expResult(home_path ? home_path : ""); + expResult += "/tmp"; + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, expResult); +#endif + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_9() + { + OString sURL("file:///tmp/first%20second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/tmp/first second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_91() + { + OString sURL("file:///c:/tmp/first%20second"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "/c:/tmp/first second"); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_None, "c:\\tmp\\first second"); + } + + void SystemPath_FileURL::getSystemPathFromFileURL_001_92() + { + OString sURL("ca@#;+.,$///78no%01ni..name"); + checkUNXBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getSystemPathFromFileURL(sURL, osl::FileBase::E_INVAL, ""); + } + + // normal legal case + void SystemPath_FileURL::getSystemPathFromFileURL_004() + { + OUString aUStr; + OUString aUNormalURL(aTmpName6); + OUString aUResultURL (aSysPath4); + osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL(aUNormalURL, aUStr); + + bool bOk = compareFileName(aUStr, aUResultURL); + + OString sError = + "test for getSystemPathFromFileURL(' " + + OUStringToOString(aUNormalURL, RTL_TEXTENCODING_ASCII_US) + + " ') function:use an absolute file URL, " + + outputError(OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US), + OUStringToOString(aUResultURL, RTL_TEXTENCODING_ASCII_US)); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError); + CPPUNIT_ASSERT_MESSAGE(sError.getStr(), bOk); + + } + + // CJK characters case + void SystemPath_FileURL::getSystemPathFromFileURL_005() + { + OUString aUStr; + createTestDirectory(aTmpName10); + OUString aUNormalURL(aTmpName10); + OUString aUResultURL (aSysPath5); + + osl::FileBase::RC nError = osl::FileBase::getSystemPathFromFileURL(aUNormalURL, aUStr); + + bool bOk = compareFileName(aUStr, aUResultURL); + + OString sError = + "test for getSystemPathFromFileURL(' " + + OUStringToOString(aUNormalURL, RTL_TEXTENCODING_ASCII_US) + + " ') function:use a CJK coded absolute URL, " + + outputError(OUStringToOString(aUStr, RTL_TEXTENCODING_ASCII_US), + OUStringToOString(aUResultURL, RTL_TEXTENCODING_ASCII_US)); + deleteTestDirectory(aTmpName10); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError); + CPPUNIT_ASSERT_MESSAGE(sError.getStr(), bOk); + } + + void SystemPath_FileURL::getFileURLFromSystemPath_001() + { + OString sSysPath("~/tmp"); + char* home_path; + home_path = getenv("HOME"); + OString expResult(home_path ? home_path : ""); + expResult = "file://"+ expResult + "/tmp"; + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, expResult); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "~/tmp"); + } + + void SystemPath_FileURL::getFileURLFromSystemPath_002() + { + OString sSysPath("c:/tmp"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "c:/tmp"); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///c:/tmp"); + } + + void SystemPath_FileURL::getFileURLFromSystemPath_003() + { + OString sSysPath("file:///temp"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getFileURLFromSystemPath_004() + { + OString sSysPath("//tmp//first start"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start"); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getFileURLFromSystemPath_004_1() + { + OString sSysPath("/tmp///first start"); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_None, "file:///tmp/first%20start"); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + + void SystemPath_FileURL::getFileURLFromSystemPath_005() + { + OString sSysPath(""); + checkUNXBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + checkWNTBehaviour_getFileURLFromSystemPath(sSysPath, osl::FileBase::E_INVAL, ""); + } + + // testing the method + // static inline RC searchFileURL( const OUString& ustrFileName, + // const OUString& ustrSearchPath, + // OUString& ustrFileURL) + + class searchFileURL : public CppUnit::TestFixture + { + private: + OUString aUStr; + + public: + void searchFileURL_001() + { + /* search file is passed by system filename */ + auto nError1 = osl::FileBase::searchFileURL(aTmpName1, aUserDirectorySys, aUStr); + /* search file is passed by full qualified file URL */ + auto nError2 = osl::FileBase::searchFileURL(aCanURL1, aUserDirectorySys, aUStr); + /* search file is passed by relative file path */ + auto nError3 = osl::FileBase::searchFileURL(aRelURL4, aUserDirectorySys, aUStr); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ", + osl::FileBase::E_NOENT, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ", + osl::FileBase::E_NOENT, nError2); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched files that is not exist, but it reply invalid error, did not pass in (W32) ", + osl::FileBase::E_NOENT, nError3); + } + + void searchFileURL_002() + { +#ifndef UNX + /* search file is passed by system filename */ + OUString strRootSys = INetURLObject(aTempDirectoryURL).GetLastName(); + auto nError1 = osl::FileBase::searchFileURL(aTempDirectorySys, strRootSys, aUStr); + bool bOk1 = compareFileName(aUStr, aTempDirectoryURL); + /* search file is passed by full qualified file URL */ + auto nError2 = osl::FileBase::searchFileURL(aTempDirectoryURL, strRootSys, aUStr); + bool bOk2 = compareFileName(aUStr, aTempDirectoryURL); +#ifndef _WIN32 + /* search file is passed by relative file path */ + auto nError3 = osl::FileBase::searchFileURL(aRelURL5, strRootSys, aUStr); + bool bOk3 = compareFileName(aUStr, aTempDirectoryURL); +#endif + /* search file is passed by an exist file */ + createTestFile(aCanURL1); + auto nError4 = osl::FileBase::searchFileURL(aCanURL4, aUserDirectorySys, aUStr); + bool bOk4 = compareFileName(aUStr, aCanURL1); + deleteTestFile(aCanURL1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename, system directory, searched file already exist.", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: URL filename, system directory, searched file already exist.", + osl::FileBase::E_None, nError2); +#ifndef _WIN32 + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: relative path, system directory, searched file already exist.", + osl::FileBase::E_None, nError3); +#endif + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.", + osl::FileBase::E_None, nError4); + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename, system directory, searched file already exist.", + bOk1); + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: URL filename, system directory, searched file already exist.", + bOk2); +#ifndef _WIN32 + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: relative path, system directory, searched file already exist.", + bOk3); +#endif + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: system filename/URL filename/relative path, system directory, searched file already exist.", + bOk4); +#endif + } + + void searchFileURL_003() + { + OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path"); + auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr); + bool bOk = compareFileName(aUStr, aUserDirectoryURL); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths", + bOk); + } + + void searchFileURL_004() + { + OUString aSystemPathList(aRootSys + PATH_LIST_DELIMITER + aTempDirectorySys + PATH_LIST_DELIMITER + aRootSys + "system/path/../name"); + auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aSystemPathList, aUStr); + bool bOk = compareFileName(aUStr, aUserDirectoryURL); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is a list of system paths", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is a list of system paths", + bOk); + } + + void searchFileURL_005() + { + auto nError1 = osl::FileBase::searchFileURL(aUserDirectoryURL, aNullURL, aUStr); + bool bOk = compareFileName(aUStr, aUserDirectoryURL); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for searchFileURL function: search directory is NULL", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("test for searchFileURL function: search directory is NULL", + bOk); + } + + CPPUNIT_TEST_SUITE(searchFileURL); + CPPUNIT_TEST(searchFileURL_001); + CPPUNIT_TEST(searchFileURL_002); + CPPUNIT_TEST(searchFileURL_003); + CPPUNIT_TEST(searchFileURL_004); + CPPUNIT_TEST(searchFileURL_005); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // static inline RC getTempDirURL(OUString& ustrTempDirURL) + + class getTempDirURL : public CppUnit::TestFixture + { + private: + OUString aUStr; + + public: + void setUp() override + { + osl::FileBase::RC nError = osl::FileBase::getTempDirURL(aUStr); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getTempDirURL function: execution", + osl::FileBase::E_None, nError); + } + + void getTempDirURL_002() + { + CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights", + checkDirectory(aUStr, oslCheckMode::OpenAccess)); + CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights", + checkDirectory(aUStr, oslCheckMode::ReadAccess)); + CPPUNIT_ASSERT_MESSAGE("test for getTempDirURL function: test for open and write access rights", + checkDirectory(aUStr, oslCheckMode::WriteAccess)); + } + + CPPUNIT_TEST_SUITE(getTempDirURL); + CPPUNIT_TEST(getTempDirURL_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // static inline RC createTempFile(OUString* pustrDirectoryURL, + // oslFileHandle* pHandle, + // OUString* pustrTempFileURL) + + class createTempFile : public CppUnit::TestFixture + { + private: + std::unique_ptr pHandle; + std::unique_ptr pUStr_DirURL; + std::unique_ptr pUStr_FileURL; + + public: + void setUp() override + { + pHandle.reset(new oslFileHandle()); + pUStr_DirURL.reset(new OUString(aUserDirectoryURL)); + pUStr_FileURL.reset(new OUString()); + } + + void tearDown() override + { + pUStr_DirURL.reset(); + pUStr_FileURL.reset(); + pHandle.reset(); + } + + void createTempFile_001() + { + auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get()); + File testFile(*pUStr_FileURL); + auto nError2 = testFile.open(osl_File_OpenFlag_Create); + + if (nError2 == osl::FileBase::E_EXIST) + { + osl_closeFile(*pHandle); + deleteTestFile(*pUStr_FileURL); + } + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: create temp file and test the existence", + (pHandle != nullptr)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: create temp file and test the existence", + osl::FileBase::E_EXIST, nError2); + } + + void createTempFile_002() + { + bool bOK = false; + auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), pUStr_FileURL.get()); + File testFile(*pUStr_FileURL); + auto nError2 = testFile.open(osl_File_OpenFlag_Create); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist", + (pHandle != nullptr)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist", + osl::FileBase::E_EXIST, nError2); + + // check file if have the write permission + if (nError2 == osl::FileBase::E_EXIST) + { + bOK = ifFileCanWrite(*pUStr_FileURL); + osl_closeFile(*pHandle); + deleteTestFile(*pUStr_FileURL); + } + + CPPUNIT_ASSERT_MESSAGE("test for open and write access rights, in (W32), it did not have write access right, but it should be writable.", + bOK); + } + + void createTempFile_003() + { + auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), pHandle.get(), nullptr); + // the temp file will be removed when return from createTempFile + bool bOK = (pHandle != nullptr && nError1 == osl::FileBase::E_None); + if (bOK) + osl_closeFile(*pHandle); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("test for createTempFile function: set pUStrFileURL to 0 to let it remove the file after call.", + bOK); + } + + void createTempFile_004() + { + auto nError1 = osl::FileBase::createTempFile(pUStr_DirURL.get(), nullptr, pUStr_FileURL.get()); + bool bOK = (pUStr_FileURL != nullptr); + CPPUNIT_ASSERT(bOK); + File testFile(*pUStr_FileURL); + auto nError2 = testFile.open(osl_File_OpenFlag_Create); + deleteTestFile(*pUStr_FileURL); + CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile function: create a temp file, but it does not exist", + osl::FileBase::E_EXIST, nError2); + CPPUNIT_ASSERT_MESSAGE("createTempFile function: create a temp file, but it does not exist", + bOK); + + } + + CPPUNIT_TEST_SUITE(createTempFile); + CPPUNIT_TEST(createTempFile_001); + CPPUNIT_TEST(createTempFile_002); + CPPUNIT_TEST(createTempFile_003); + CPPUNIT_TEST(createTempFile_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // FIXME: remove the _disabled to enable: + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::getAbsoluteFileURL, "osl_osl::FileBase"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::SystemPath_FileURL, "osl_osl::FileBase"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::searchFileURL, "osl_osl::FileBase"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::getTempDirURL, "osl_osl::FileBase"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileBase::createTempFile, "osl_osl::FileBase"); + + CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_osl::FileBase"); +} + +namespace osl_FileStatus +{ + // testing the method + // FileStatus(sal_uInt32 nMask): _nMask(nMask) + class ctors : public CppUnit::TestFixture + { + private: + OUString aUStr; + DirectoryItem rItem; + + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + Directory aDir(aTmpName3); + auto nError1 = aDir.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = aDir.getNextItem(rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + aDir.close(); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + void ctors_001() + { + FileStatus rFileStatus(osl_FileStatus_Mask_All); + auto nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + aUStr = rFileStatus.getFileName(); + + CPPUNIT_ASSERT_MESSAGE("test for ctors function: mask all and see the file name", + compareFileName(aUStr, aTmpName2)); + } + + void ctors_002() + { + FileStatus rFileStatus(0); + auto nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + aUStr = rFileStatus.getFileName(); + + CPPUNIT_ASSERT_MESSAGE("test for ctors function: mask is empty", + compareFileName(aUStr, aNullURL)); + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctors_001); + CPPUNIT_TEST(ctors_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline sal_Bool isValid(sal_uInt32 nMask) const + + class isValid : public CppUnit::TestFixture + { + private: + std::unique_ptr pDir; + DirectoryItem rItem_file, rItem_link; + + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + pDir.reset(new Directory(aTmpName3)); + osl::FileBase::RC nError1 = pDir->open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = pDir->getNextItem(rItem_file, 1); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + osl::FileBase::RC nError1 = pDir->close(); + pDir.reset(); + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1); + + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + void isValid_001() + { + sal_uInt32 mask = 0; + FileStatus rFileStatus(mask); + osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + bool bOk = rFileStatus.isValid(mask); + + CPPUNIT_ASSERT_MESSAGE("test for isValid function: no fields specified", bOk); + } + + void check_FileStatus(FileStatus const& _aStatus) + { + OString sStat; + if (_aStatus.isValid(osl_FileStatus_Mask_Type)) + sStat += "type "; + if (_aStatus.isValid(osl_FileStatus_Mask_Attributes)) + sStat += "attributes "; + if (_aStatus.isValid(osl_FileStatus_Mask_CreationTime)) + sStat += "ctime "; + if (_aStatus.isValid(osl_FileStatus_Mask_AccessTime)) + sStat += "atime "; + if (_aStatus.isValid(osl_FileStatus_Mask_ModifyTime)) + sStat += "mtime "; + if (_aStatus.isValid(osl_FileStatus_Mask_FileSize)) + sStat += "filesize "; + if (_aStatus.isValid(osl_FileStatus_Mask_FileName)) + sStat += "filename "; + if (_aStatus.isValid(osl_FileStatus_Mask_FileURL)) + sStat += "fileurl "; + printf("mask: %s\n", sStat.getStr()); + } + + void isValid_002() + { + createTestFile(aTmpName6); + sal_uInt32 mask_file = osl_FileStatus_Mask_Type | + osl_FileStatus_Mask_Attributes | + osl_FileStatus_Mask_CreationTime | + osl_FileStatus_Mask_AccessTime | + osl_FileStatus_Mask_ModifyTime | + osl_FileStatus_Mask_FileSize | + osl_FileStatus_Mask_FileName | + osl_FileStatus_Mask_FileURL; + + FileStatus rFileStatus(mask_file); + DirectoryItem::get(aTmpName6, rItem_file); + osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus); + + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1); + + check_FileStatus(rFileStatus); + deleteTestFile(aTmpName6); + + } + + /** Check if is a valid linked file. + + Link is not defined in Windows, and on Linux, we can not get the directory item of the linked file. + We have to defer to filesystems, normal filesystems support links (EXT2, ...), castrated filesystems + don't have links (FAT, FAT32) and Windows NT NTFS support links, but the Windows API doesn't :-( + */ + void isValid_003() + { +#if 0 +#if defined (UNX) + sal_Int32 fd; + + OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys); + aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/tmpdir/link.file"; + aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpdir/tmpname"; + + OString strLinkFileName; + OString strSrcFileName; + strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US); + strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US); + + // create a link file and link it to file "/tmp/PID/tmpdir/tmpname" + fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), fd); + + // testDirectory is "/tmp/PID/tmpdir/" + Directory testDirectory(aTmpName3); + testDirectory.open(); + OUString aFileName ("link.file"); + bool bOk = false; + while (true) + { + osl::FileBase::RC nError1 = testDirectory.getNextItem(rItem_link, 4); + + if (nError1 == osl::FileBase::E_None) + { + sal_uInt32 mask_link = osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_LinkTargetURL; + FileStatus rFileStatus(mask_link); + rItem_link.getFileStatus(rFileStatus); + + if (compareFileName(rFileStatus.getFileName(), aFileName)) + { + if (rFileStatus.isValid(osl_FileStatus_Mask_LinkTargetURL)) + { + bOk = true; + break; + } + } + } + else + { + break; + } + }; + + fd = remove(strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), fd); + + CPPUNIT_ASSERT_MESSAGE("test for isValid function: link file, check for LinkTargetURL", bOk); +#endif +#endif + } + + void isValid_004() + { + sal_uInt32 mask_file_all = osl_FileStatus_Mask_All; + FileStatus rFileStatus_all(mask_file_all); + osl::FileBase::RC nError1 = rItem_file.getFileStatus(rFileStatus_all); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + check_FileStatus(rFileStatus_all); + + sal_uInt32 mask_file_val = osl_FileStatus_Mask_Validate; + FileStatus rFileStatus_val(mask_file_val); + nError1 = rItem_file.getFileStatus(rFileStatus_val); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + check_FileStatus(rFileStatus_val); + } + + CPPUNIT_TEST_SUITE(isValid); + CPPUNIT_TEST(isValid_001); + CPPUNIT_TEST(isValid_002); + CPPUNIT_TEST(isValid_003); + CPPUNIT_TEST(isValid_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline Type getFileType() const + + class getFileType : public CppUnit::TestFixture + { + private: + DirectoryItem m_aItem_1, m_aItem_2, m_aVolumeItem, m_aFifoItem; + DirectoryItem m_aLinkItem, m_aSocketItem, m_aSpecialItem; + + public: + void setUp() override + { + // create a tempfile: $TEMP/tmpdir/tmpname. + // a tempdirectory: $TEMP/tmpdir/tmpdir. + // use $ROOT/staroffice as volume ---> use dev/fd as volume. + // and get their directory item. + createTestDirectory(aTmpName3); + createTestFile(aTmpName3, aTmpName2); + createTestDirectory(aTmpName3, aTmpName1); + + std::unique_ptr xDir(new Directory(aTmpName3)); + auto nError1 = xDir->open(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("open aTmpName3 failed!", osl::FileBase::E_None, nError1); + // getNextItem can not assure which item retrieved + nError1 = xDir->getNextItem(m_aItem_1, 1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("get first item failed!", osl::FileBase::E_None, nError1); + + nError1 = xDir->getNextItem(m_aItem_2); + CPPUNIT_ASSERT_EQUAL_MESSAGE("get second item failed!", osl::FileBase::E_None, nError1); + xDir->close(); + // FIXME mindy: failed on my RH9, so removed temporarily + // nError1 = DirectoryItem::get(aVolURL2, m_aVolumeItem); + // CPPUNIT_ASSERT_MESSAGE("get volume item failed!", osl::FileBase::E_None == nError1); + } + + void tearDown() override + { + // remove all in $TEMP/tmpdir. + deleteTestDirectory(aTmpName3, aTmpName1); + deleteTestFile(aTmpName3, aTmpName2); + deleteTestDirectory(aTmpName3); + } + + void getFileType_001() + { + FileStatus rFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileName); + auto nError1 = m_aItem_1.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL_MESSAGE("getFileStatus failed", osl::FileBase::E_None, nError1); + + check_FileType(rFileStatus); + } + + void check_FileType(osl::FileStatus const& _rFileStatus) + { + if (_rFileStatus.isValid(osl_FileStatus_Mask_FileName)) + { + OUString suFilename = _rFileStatus.getFileName(); + + if (_rFileStatus.isValid(osl_FileStatus_Mask_Type)) + { + osl::FileStatus::Type eType = _rFileStatus.getFileType(); + bool bOK = false; + + if (compareFileName(suFilename, aTmpName2)) + bOK = (eType == osl::FileStatus::Regular); + + if (compareFileName(suFilename, aTmpName1)) + bOK = (eType == FileStatus::Directory); + + CPPUNIT_ASSERT_MESSAGE("test for getFileType function: ", bOK); + } + } + // LLA: it's not a bug, if a FileStatus not exist, so no else + } + + void getFileType_002() + { + FileStatus rFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileName); + auto nError1 = m_aItem_2.getFileStatus(rFileStatus); + + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + check_FileType(rFileStatus); + } + + void getFileType_003() + { + } + + void getFileType_007() + { +#if defined(__sun) // Special file is different in Windows + auto nError1 = DirectoryItem::get(aTypeURL2, m_aSpecialItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // check for File type + FileStatus rFileStatus(osl_FileStatus_Mask_Type); + nError1 = m_aSpecialItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + if (rFileStatus.isValid(osl_FileStatus_Mask_Type)) + { + osl::FileStatus::Type eType = rFileStatus.getFileType(); + + CPPUNIT_ASSERT_MESSAGE("test for getFileType function: Special, Solaris version ", + (eType == FileStatus::Special)); + } +#endif + } + + CPPUNIT_TEST_SUITE(getFileType); + CPPUNIT_TEST(getFileType_001); + CPPUNIT_TEST(getFileType_002); + CPPUNIT_TEST(getFileType_003); + CPPUNIT_TEST(getFileType_007); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline sal_uInt64 getAttributes() const + + class getAttributes : public CppUnit::TestFixture + { + private: + OUString aTypeURL, aTypeURL_Hid; + DirectoryItem rItem, rItem_hidden; + + public: + void setUp() override + { + aTypeURL = aUserDirectoryURL.copy(0); + concatURL(aTypeURL, aTmpName2); + createTestFile(aTypeURL); + osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + aTypeURL_Hid = aUserDirectoryURL.copy(0); + concatURL(aTypeURL_Hid, aHidURL1); + createTestFile(aTypeURL_Hid); +#ifdef _WIN32 + hideFile(aTypeURL_Hid); +#endif + nError = DirectoryItem::get(aTypeURL_Hid, rItem_hidden); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + } + + void tearDown() override + { + deleteTestFile(aTypeURL); + deleteTestFile(aTypeURL_Hid); + } + +#if (defined UNX) +// windows only has 3 file attributes: normal, readonly and hidden + void getAttributes_001() + { + changeFileMode(aTypeURL, S_IRUSR | S_IRGRP | S_IROTH); + + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + if (geteuid() == 0) // as root, access(W_OK) may be true despite mode + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: (not ReadOnly,) GrpRead, OwnRead, OthRead(UNX version) ", + static_cast(osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead), + rFileStatus.getAttributes()); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead(UNX version) ", + static_cast(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead), + rFileStatus.getAttributes()); + } + } +#else // Windows version + void getAttributes_001() + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: ReadOnly, GrpRead, OwnRead, OthRead(Windows version)", + 1, 1); + } +#endif + + void getAttributes_002() + { +#if (defined UNX) + changeFileMode(aTypeURL, S_IXUSR | S_IXGRP | S_IXOTH); + + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + if (geteuid() == 0) // as root, access(W_OK) may be true despite mode + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is (not Readonly,) Executable, GrpExe, OwnExe, OthExe, it partly not pass(Solaris version)", + static_cast(osl_File_Attribute_Executable | osl_File_Attribute_GrpExe | osl_File_Attribute_OwnExe | osl_File_Attribute_OthExe), + rFileStatus.getAttributes()); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Executable, GrpExe, OwnExe, OthExe, the result is Readonly, Executable, GrpExe, OwnExe, OthExe, it partly not pass(Solaris version)", + static_cast(osl_File_Attribute_ReadOnly | osl_File_Attribute_Executable | osl_File_Attribute_GrpExe | osl_File_Attribute_OwnExe | osl_File_Attribute_OthExe), + rFileStatus.getAttributes()); + } +#endif + } + +#if (defined UNX) + void getAttributes_003() + { + changeFileMode(aTypeURL, S_IWUSR | S_IWGRP | S_IWOTH); + + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: GrpWrite, OwnWrite, OthWrite(Solaris version)", + static_cast(osl_File_Attribute_GrpWrite | osl_File_Attribute_OwnWrite | osl_File_Attribute_OthWrite), + rFileStatus.getAttributes()); + } +#else // Windows version + void getAttributes_003() + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: GrpWrite, OwnWrite, OthWrite(Windows version)", + 1, 1); + } +#endif + + void getAttributes_004() + { + sal_Int32 test_Attributes = osl_File_Attribute_Hidden; + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + osl::FileBase::RC nError = rItem_hidden.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + test_Attributes &= rFileStatus.getAttributes(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getAttributes function: Hidden files", + static_cast(osl_File_Attribute_Hidden), test_Attributes); + } + + CPPUNIT_TEST_SUITE(getAttributes); + CPPUNIT_TEST(getAttributes_001); + CPPUNIT_TEST(getAttributes_002); + CPPUNIT_TEST(getAttributes_003); + CPPUNIT_TEST(getAttributes_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline TimeValue getAccessTime() const + + class getAccessTime : public CppUnit::TestFixture + { + private: + OUString aTypeURL; + DirectoryItem rItem; + + public: + void setUp() override + { + aTypeURL = aUserDirectoryURL.copy(0); + concatURL(aTypeURL, aTmpName2); + createTestFile(aTypeURL); + osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + } + + void tearDown() override + { + deleteTestFile(aTypeURL); + } + + void getAccessTime_001() + { + TimeValue *pTV_current = nullptr; + CPPUNIT_ASSERT((pTV_current = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + TimeValue *pTV_access = nullptr; + CPPUNIT_ASSERT((pTV_access = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + + FileStatus rFileStatus(osl_FileStatus_Mask_AccessTime); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + bool bOk = osl_getSystemTime(pTV_current); + CPPUNIT_ASSERT(bOk); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + *pTV_access = rFileStatus.getAccessTime(); + + bool bOK = t_compareTime(pTV_access, pTV_current, delta); + free(pTV_current); + free(pTV_access); + + CPPUNIT_ASSERT_MESSAGE("test for getAccessTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to test this function, in Windows test, it lost hour min sec, only have date time. ", + bOK); + } + + CPPUNIT_TEST_SUITE(getAccessTime); + CPPUNIT_TEST(getAccessTime_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline TimeValue getModifyTime() const + + class getModifyTime : public CppUnit::TestFixture + { + private: + OUString aTypeURL; + DirectoryItem rItem; + + public: + void getModifyTime_001() + { + TimeValue *pTV_current = nullptr; + CPPUNIT_ASSERT((pTV_current = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + + // create file + aTypeURL = aUserDirectoryURL.copy(0); + concatURL(aTypeURL, aTmpName2); + createTestFile(aTypeURL); + + // get current time + bool bOk = osl_getSystemTime(pTV_current); + CPPUNIT_ASSERT(bOk); + + // get instance item and filestatus + osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + FileStatus rFileStatus(osl_FileStatus_Mask_ModifyTime); + nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + // get modify time + TimeValue* pTV_modify = nullptr; + CPPUNIT_ASSERT((pTV_modify = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + *pTV_modify = rFileStatus.getModifyTime(); + + bool bOK = t_compareTime(pTV_modify, pTV_current, delta); + // delete file + deleteTestFile(aTypeURL); + free(pTV_current); + free(pTV_modify); + + CPPUNIT_ASSERT_MESSAGE("test for getModifyTime function: This test turns out that UNX precision is no more than 1 sec, don't know how to improve this function. ", + bOK); + } + + CPPUNIT_TEST_SUITE(getModifyTime); + CPPUNIT_TEST(getModifyTime_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline sal_uInt64 getFileSize() const + + class getFileSize : public CppUnit::TestFixture + { + private: + OUString aTypeURL; + DirectoryItem rItem; + + public: + void setUp() override + { + aTypeURL = aUserDirectoryURL.copy(0); + concatURL(aTypeURL, aTmpName2); + createTestFile(aTypeURL); + osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + } + + void tearDown() override + { + deleteTestFile(aTypeURL); + } + + void getFileSize_001() + { + FileStatus rFileStatus(osl_FileStatus_Mask_FileSize); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + sal_uInt64 uFileSize = rFileStatus.getFileSize(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: empty file ", + static_cast(0), uFileSize); + } + + void getFileSize_002() + { + File testfile(aTypeURL); + osl::FileBase::RC nError = testfile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + nError = testfile.setSize(TEST_FILE_SIZE); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + nError = DirectoryItem::get(aTypeURL, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + FileStatus rFileStatus(osl_FileStatus_Mask_FileSize); + nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + sal_uInt64 uFileSize = rFileStatus.getFileSize(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileSize function: file with size of TEST_FILE_SIZE, did not pass in (W32). ", + static_cast(TEST_FILE_SIZE), uFileSize); + } + + CPPUNIT_TEST_SUITE(getFileSize); + CPPUNIT_TEST(getFileSize_001); + CPPUNIT_TEST(getFileSize_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline OUString getFileName() const + + class getFileName : public CppUnit::TestFixture + { + private: + OUString aTypeURL; + DirectoryItem rItem; + + public: + void setUp() override + { + aTypeURL = aUserDirectoryURL.copy(0); + concatURL(aTypeURL, aTmpName2); + createTestFile(aTypeURL); + osl::FileBase::RC nError = DirectoryItem::get(aTypeURL, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + } + + void tearDown() override + { + deleteTestFile(aTypeURL); + } + + + void getFileName_001() + { + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + OUString aFileName = rFileStatus.getFileName(); + + CPPUNIT_ASSERT_MESSAGE("test for getFileName function: name compare with specify", + compareFileName(aFileName, aTmpName2)); + } + + CPPUNIT_TEST_SUITE(getFileName); + CPPUNIT_TEST(getFileName_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline OUString getFileURL() const + + class getFileURL : public CppUnit::TestFixture + { + DirectoryItem rItem; + + public: + void setUp() override + { + createTestFile(aTmpName6); + osl::FileBase::RC nError = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + } + + void tearDown() override + { + deleteTestFile(aTmpName6); + } + + + void getFileURL_001() + { + FileStatus rFileStatus(osl_FileStatus_Mask_FileURL); + osl::FileBase::RC nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError); + + OUString aFileURL = rFileStatus.getFileURL(); + + CPPUNIT_ASSERT_MESSAGE("test for getFileURL function: ", + compareFileName(aFileURL, aTmpName6)); + } + + CPPUNIT_TEST_SUITE(getFileURL); + CPPUNIT_TEST(getFileURL_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline OUString getLinkTargetURL() const + + class getLinkTargetURL : public CppUnit::TestFixture + { + private: + OUString aTypeURL; + DirectoryItem rItem; + + public: + void setUp() override + { + aTypeURL = aUserDirectoryURL.copy(0); + concatURL(aTypeURL, aTmpName2); + createTestFile(aTypeURL); + } + + void tearDown() override + { + deleteTestFile(aTypeURL); + } + + void getLinkTargetURL_001() + { +#if 0 +#if (defined UNX) // Link file is not defined in Windows + // create a link file; + OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys); + aUStr_LnkFileSys += aSlashURL + getCurrentPID() + "/link.file"; + aUStr_SrcFileSys += aSlashURL + getCurrentPID() + "/tmpname"; + + OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US); + strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US); + + sal_Int32 fd; + fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("in creating link file", static_cast(0), fd); + + // get linkTarget URL + auto nError = DirectoryItem::get(aLnkURL1, rItem); + CPPUNIT_ASSERT_EQUAL_MESSAGE("in getting link file item", osl::FileBase::E_None, nError); + + FileStatus rFileStatus(osl_FileStatus_Mask_LinkTargetURL); + nError = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL_MESSAGE("in getting link file status", osl::FileBase::E_None, nError); + OUString aFileURL = rFileStatus.getLinkTargetURL(); + + // remove link file + fd = remove(strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("in deleting link file", static_cast(0), fd); + + CPPUNIT_ASSERT_MESSAGE("test for getLinkTargetURL function: Solaris version, create a file, and a link file link to it, get its LinkTargetURL and compare", + compareFileName(aFileURL, aTypeURL)); +#endif +#endif + } + + CPPUNIT_TEST_SUITE(getLinkTargetURL); + CPPUNIT_TEST(getLinkTargetURL_001); + CPPUNIT_TEST_SUITE_END(); + }; + + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::ctors, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::isValid, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileType, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getAttributes, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getAccessTime, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getModifyTime, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileSize, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileName, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getFileURL, "osl_FileStatus"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_FileStatus::getLinkTargetURL, "osl_FileStatus"); + + CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_FileStatus"); +} + +namespace osl_File +{ + + // testing the method + // File(const OUString& ustrFileURL) + + class ctors : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + void ctors_001() + { + File testFile(aTmpName4); + + osl::FileBase::RC nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + osl::FileBase::RC nError2 = testFile.close(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a File and test its open and close", + osl::FileBase::E_None, nError2); + } + + void ctors_002() + { + File testFile(aTmpName5); + char buffer[30] = "Test for File constructor"; + sal_uInt64 nCount; + + osl::FileBase::RC nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + osl::FileBase::RC nError2 = testFile.write(buffer, 30, nCount); + testFile.close(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: test relative file URL, this test show that relative file URL is also acceptable", + osl::FileBase::E_None, nError2); + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctors_001); + CPPUNIT_TEST(ctors_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC open(sal_uInt32 uFlags) + + class open : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void open_001() + { + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + auto nError2 = testFile.close(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("close error", osl::FileBase::E_None, nError2); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a regular file", + osl::FileBase::E_None, nError1); + } + + void open_002() + { + File testFile(aTmpName3); + + auto nError1 = testFile.open(osl_File_OpenFlag_Read); + + CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory", + (File::E_INVAL == nError1) || (File::E_ACCES == nError1)); + } + + void open_003() + { + File testFile(aCanURL1); + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a non-exist file", + File::E_NOENT, nError1); + } + + void open_005() + { + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Create); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: create an exist file", + File::E_EXIST, nError1); + } + + void open_006() + { + File testFile(aCanURL1); + char buffer_write[30] = "Test for File open"; + char buffer_read[30]; + sal_uInt64 nCount_write, nCount_read; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write | osl_File_OpenFlag_Create); + auto nError2 = testFile.write(buffer_write, 30, nCount_write); + osl::FileBase::RC nError4 = testFile.setPos(osl_Pos_Absolut, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError4); + auto nError3 = testFile.read(buffer_read, 10, nCount_read); + + osl::FileBase::RC nError5 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError5); + osl::FileBase::RC nError6 = osl::File::remove(aCanURL1); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError6); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create", + osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create", + osl::FileBase::E_None, nError3); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create", + sal_uInt64(30), nCount_write); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: test for osl_File_OpenFlag_Read, osl_File_OpenFlag_Write and osl_File_OpenFlag_Create", + sal_uInt64(10), nCount_read); + } + + CPPUNIT_TEST_SUITE(open); + CPPUNIT_TEST(open_001); + CPPUNIT_TEST(open_002); + CPPUNIT_TEST(open_003); + CPPUNIT_TEST(open_005); + CPPUNIT_TEST(open_006); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC close() + + class close : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void close_001() + { + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + auto nError2 = testFile.close(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: close a regular file", + osl::FileBase::E_None, nError2); + } + + void close_002() + { + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + auto nError2 = testFile.close(); + + auto nError3 = testFile.setPos(osl_Pos_Absolut, 0); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for close function: manipulate a file after it has been closed", + osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_MESSAGE("test for close function: manipulate a file after it has been closed", + (osl::FileBase::E_None != nError3)); + } + + CPPUNIT_TEST_SUITE(close); + CPPUNIT_TEST(close_001); + CPPUNIT_TEST(close_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC setPos(sal_uInt32 uHow, sal_Int64 uPos) + + class setPos : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + void setPos_001() + { + File testFile(aTmpName4); + char buffer_read[2]; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.setPos(osl_Pos_Absolut, 26); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_read = 0; + nError1 = testFile.read(buffer_read, 1, nCount_read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Absolut, set the position to 26, test if the 26th char in file is correct", + pBuffer_Char[26], buffer_read[0]); + } + + void setPos_002() + { + File testFile(aTmpName4); + char buffer_read[2]; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.setPos(osl_Pos_Absolut, sizeof(pBuffer_Char) - 2); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.setPos(osl_Pos_Current, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_read = 0; + nError1 = testFile.read(buffer_read, 1, nCount_read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_Current, set the position to end, test if the (end -1) char in file is correct", + pBuffer_Char[sizeof(pBuffer_Char) - 2], buffer_read[0]); + } + + void setPos_003() + { + File testFile(aTmpName4); + char buffer_read[2]; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // the file size is smaller than 100 + nError1 = testFile.setPos(osl_Pos_End, -100); + CPPUNIT_ASSERT_EQUAL_MESSAGE("should return error", osl::FileBase::E_INVAL, nError1); + + nError1 = testFile.setPos(osl_Pos_End, -53); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_read = 0; + nError1 = testFile.read(buffer_read, 1, nCount_read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setPos function: test for osl_Pos_End, set the position to end, test if the first char in file is correct", + pBuffer_Char[0], buffer_read[0]); + } + + CPPUNIT_TEST_SUITE(setPos); + CPPUNIT_TEST(setPos_001); + CPPUNIT_TEST(setPos_002); + CPPUNIT_TEST(setPos_003); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC getPos(sal_uInt64& uPos) + + class getPos : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void getPos_001() + { + File testFile(aTmpName4); + sal_uInt64 nFilePointer; + + auto nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, nError1); + + nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.setPos(osl_Pos_Absolut, 26); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getPos function: set the position to 26, get position and check if it is right", + static_cast(26), nFilePointer); + } + + CPPUNIT_TEST_SUITE(getPos); + CPPUNIT_TEST(getPos_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC isEndOfFile(sal_Bool *pIsEOF) + + class isEndOfFile : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void isEndOfFile_001() + { + File testFile(aTmpName4); + sal_Bool bEOF = false; + sal_Bool *pEOF = &bEOF; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.setPos(osl_Pos_End, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.isEndOfFile(pEOF); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for isEndOfFile function: set the position to end, check if reach end", + *pEOF); + } + + void isEndOfFile_002() + { + File testFile(aTmpName4); + sal_Bool bEOF = false; + sal_Bool *pEOF = &bEOF; + sal_uInt64 nFilePointer = 0; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.setPos(osl_Pos_Absolut, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + *pEOF = false; + + while (!(*pEOF)) + { + nError1 = testFile.isEndOfFile(pEOF); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.setPos(osl_Pos_Current, 1); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isEndOfFile function: use isEndOfFile to move pointer step by step", + static_cast(sizeof(pBuffer_Char) + 1), nFilePointer); + } + CPPUNIT_TEST_SUITE(isEndOfFile); + CPPUNIT_TEST(isEndOfFile_001); + CPPUNIT_TEST(isEndOfFile_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC setSize(sal_uInt64 uSize) + + class setSize : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void setSize_001() + { + File testFile(aTmpName4); + sal_uInt64 nFilePointer; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // enlarge the file to size of 100; + nError1 = testFile.setSize(100); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // get the file size; + nError1 = testFile.setPos(osl_Pos_End, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setSize function: enlarge the file ", + static_cast(100), nFilePointer); + } + + void setSize_002() + { + File testFile(aTmpName4); + sal_uInt64 nFilePointer; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // enlarge the file to size of 100; + nError1 = testFile.setSize(10); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // get the file size; + nError1 = testFile.setPos(osl_Pos_End, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setSize function: truncate the file ", + static_cast(10), nFilePointer); + } + + CPPUNIT_TEST_SUITE(setSize); + CPPUNIT_TEST(setSize_001); + CPPUNIT_TEST(setSize_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC read(void *pBuffer, sal_uInt64 uBytesRequested, sal_uInt64& rBytesRead) + + class read : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void read_001() + { + File testFile(aTmpName4); + sal_uInt64 nFilePointer; + char buffer_read[10]; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_read = 0; + nError1 = testFile.read(buffer_read, 10, nCount_read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer", + sal_uInt64(10), nFilePointer); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read whole content in the file to a buffer", + 0, strncmp(buffer_read, pBuffer_Char, 10)); + } + + void read_002() + { + File testFile(aTmpName4); + sal_uInt64 nFilePointer; + char buffer_read[26]; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.setPos(osl_Pos_Absolut, 26); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_read = 0; + nError1 = testFile.read(buffer_read, 26, nCount_read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file", + sal_uInt64(52), nFilePointer); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file", + sal_uInt64(26), nCount_read); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for read function: read from a special position in the file", + 0, strncmp(buffer_read, &pBuffer_Char[26], 26)); + } + + CPPUNIT_TEST_SUITE(read); + CPPUNIT_TEST(read_001); + CPPUNIT_TEST(read_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC write(const void *pBuffer, sal_uInt64 uBytesToWrite, sal_uInt64& rBytesWritten) + + class write : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile(aTmpName6); + } + + + void write_001() + { + File testFile(aTmpName6); + sal_uInt64 nFilePointer; + char buffer_read[10]; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + sal_uInt64 nCount_write = 0, nCount_read = 0; + // write chars into the file. + nError1 = testFile.write(pBuffer_Char, 10, nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // get the current pointer; + nError1 = testFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // reset pointer to the beginning; + nError1 = testFile.setPos(osl_Pos_Absolut, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.read(buffer_read, 10, nCount_read); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size", + sal_uInt64(10), nFilePointer); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size", + 0, strncmp(buffer_read, pBuffer_Char, 10)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for write function: read whole content in the file to a buffer. Note, buffer size can not smaller than the read size", + sal_uInt64(10), nCount_write); + } + + CPPUNIT_TEST_SUITE(write); + CPPUNIT_TEST(write_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC readLine(::ByteSequence& aSeq) + + class readLine : public CppUnit::TestFixture + { + rtl::ByteSequence aSequence; + + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpname. + createTestFile(aTmpName6); + + // write some strings into the file. + File testFile(aTmpName6); + char ppStrSeq[3][27] = { "abcde\n", + "1234567890\n", + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + }; + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + sal_uInt64 nCount_write = 0; + for (int nCount = 0; nCount < 3; nCount++) + { + nError1 = testFile.write(ppStrSeq[nCount], strlen(ppStrSeq[nCount]), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile(aTmpName6); + } + + + void readLine_001() + { + File testFile(aTmpName6); + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.readLine(aSequence); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read the first line of the file.", + 0, strncmp(reinterpret_cast(aSequence.getArray()), pBuffer_Char, 5)); + } + + void readLine_002() + { + File testFile(aTmpName6); + sal_Bool bEOF = false; + sal_Bool *pEOF = &bEOF; + + auto nError1 = testFile.open(osl_File_OpenFlag_Read | osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + for (int nCount = 0; nCount < 3; nCount++) + { + nError1 = testFile.readLine(aSequence); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + nError1 = testFile.isEndOfFile(pEOF); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.", + *pEOF); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for readLine function: read three lines of the file and check the file pointer moving.", + 0, strncmp(reinterpret_cast(aSequence.getArray()), &pBuffer_Char[26], 26)); + } + CPPUNIT_TEST_SUITE(readLine); + CPPUNIT_TEST(readLine_001); + CPPUNIT_TEST(readLine_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC copy(const OUString& ustrSourceFileURL, const OUString& ustrDestFileURL) + + class copy : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + void copy_001() + { + File testFile(aTmpName6); + + // copy $TEMP/tmpdir/tmpname to $TEMP/tmpname. + auto nError1 = File::copy(aTmpName4, aTmpName6); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // check + nError1 = testFile.open(osl_File_OpenFlag_Create); + deleteTestFile(aTmpName6); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy file to upper directory", + osl::FileBase::E_EXIST, nError1); + } + + void copy_002() + { + // copy $TEMP/tmpdir/tmpname to $TEMP/tmpdir. + auto nError1 = File::copy(aTmpName4, aTmpName3); + + CPPUNIT_ASSERT_MESSAGE("test for copy function: use directory as destination", + (osl::FileBase::E_ISDIR == nError1) ||(osl::FileBase::E_ACCES == nError1)); + } + + void copy_003() + { +#if 0 + // copy $TEMP/tmpdir/tmpname to $ROOT/tmpname. + auto nError1 = File::copy(aTmpName4, aTmpName7); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy to an illegal place", + osl::FileBase::E_ACCES, nError1); +#endif + } + + void copy_004() + { + // copy $TEMP/tmpname to $TEMP/tmpdir/tmpname. + auto nError1 = File::copy(aTmpName6, aTmpName4); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy a not exist file", + osl::FileBase::E_NOENT, nError1); + } + + void copy_005() + { + // copy $TEMP/tmpname to $TEMP/system.path using system path. + auto nError1 = File::copy(aTmpName6, aSysPath1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: copy a file using system file path", + osl::FileBase::E_INVAL, nError1); + } + + void copy_006() + { + createTestFile(aTmpName6); + File tmpFile(aTmpName6); + tmpFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read); + tmpFile.setSize(200); + tmpFile.close(); + // copy to new path + auto nError1 = File::copy(aTmpName6, aTmpName4); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // check if is the new file + File newFile(aTmpName4); + newFile.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Read); + nError1 = newFile.setPos(osl_Pos_End, 0); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + sal_uInt64 nFilePointer; + nError1 = newFile.getPos(nFilePointer); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + newFile.close(); + deleteTestFile(aTmpName6); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for copy function: the dest file exist", + static_cast(200), nFilePointer); + } + + CPPUNIT_TEST_SUITE(copy); + CPPUNIT_TEST(copy_001); + CPPUNIT_TEST(copy_002); + CPPUNIT_TEST(copy_003); + CPPUNIT_TEST(copy_004); + CPPUNIT_TEST(copy_005); + CPPUNIT_TEST(copy_006); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC move(const OUString& ustrSourceFileURL, const OUString& ustrDestFileURL) + + class move : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void move_001() + { + // rename $TEMP/tmpdir/tmpname to $TEMP/canonical.name. + auto nError1 = File::move(aTmpName4, aCanURL1); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // check + File testFile(aCanURL1); + auto nError2 = testFile.open(osl_File_OpenFlag_Create); + deleteTestFile(aCanURL1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: rename file to another directory", + osl::FileBase::E_EXIST, nError2); + } + + void move_002() + { +#ifdef _WIN32 + // move $TEMP/tmpdir/tmpname to $TEMP/tmpdir. + auto nError1 = File::move(aTmpName4, aTmpName3); + // returned osl::FileBase::E_ACCES on WNT + CPPUNIT_ASSERT_MESSAGE("test for move function: use directory as destination", + (osl::FileBase::E_ACCES == nError1 || osl::FileBase::E_ISDIR == nError1) ||(osl::FileBase::E_EXIST == nError1)); +#endif + } + + void move_003() + { +#if 0 + // move $TEMP/tmpdir/tmpname to $ROOT/tmpname. + auto nError1 = File::move(aTmpName4, aTmpName7); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move to an illegal place", + osl::FileBase::E_ACCES, nError1); +#endif + } + + void move_004() + { + // move $TEMP/tmpname to $TEMP/tmpdir/tmpname. + auto nError1 = File::move(aTmpName6, aTmpName4); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a not exist file", + osl::FileBase::E_NOENT, nError1); + } + + void move_005() + { + // move $TEMP/tmpname to $TEMP/system.path using system path. + auto nError1 = File::move(aTmpName6, aSysPath1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a file using system file", + osl::FileBase::E_INVAL, nError1); + } + + void move_006() + { + // move directory $TEMP/tmpname to $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName6); + auto nError1 = File::move(aTmpName6, aTmpName4); + // move file $TEMP/tmpdir/tmpname to $TEMP/tmpname + auto nError2 = File::move(aTmpName4, aTmpName6); + deleteTestDirectory(aTmpName6); +#if defined(_WIN32) + deleteTestDirectory(aTmpName4);// in Windows, it can be moved!!!!! this is only for not influence the following test. + deleteTestFile(aTmpName6); + nError1 = osl::FileBase::E_NOTDIR; + nError2 = osl::FileBase::E_ISDIR; +#endif + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)", + osl::FileBase::E_NOTDIR, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name, did not pass in (W32)", + osl::FileBase::E_ISDIR, nError2); + } + + void move_007() + { + // create directory $TEMP/tmpname. + createTestDirectory(aTmpName6); + // move directory $TEMP/tmpdir to $TEMP/tmpname/tmpdir + auto nError1 = File::move(aTmpName3, aTmpName8); + // check + auto nError2 = Directory::create(aTmpName8); + File::move(aTmpName8, aTmpName3); + deleteTestDirectory(aTmpName6); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for move function: move a directory to an exist file with same name", + osl::FileBase::E_EXIST, nError2); + } + + // bugid# 115420, after the bug fix, add the case + CPPUNIT_TEST_SUITE(move); + CPPUNIT_TEST(move_001); + CPPUNIT_TEST(move_002); + CPPUNIT_TEST(move_003); + CPPUNIT_TEST(move_004); + CPPUNIT_TEST(move_005); + CPPUNIT_TEST(move_006); + CPPUNIT_TEST(move_007); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC remove(const OUString& ustrFileURL) + + class remove : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + + // write chars into the file. + File testFile(aTmpName4); + + auto nError1 = testFile.open(osl_File_OpenFlag_Write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + sal_uInt64 nCount_write = 0; + nError1 = testFile.write(pBuffer_Char, sizeof(pBuffer_Char), nCount_write); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = testFile.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void remove_001() + { + // remove $TEMP/tmpdir/tmpname. + auto nError1 = File::remove(aTmpName4); + // check + File testFile(aTmpName4); + auto nError2 = testFile.open(osl_File_OpenFlag_Create); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a file", + (osl::FileBase::E_EXIST != nError2)); + } + + void remove_002() + { + // remove $TEMP/tmpname. + auto nError1 = File::remove(aTmpName6); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a file not exist", + osl::FileBase::E_NOENT, nError1); + } + + void remove_003() + { + // remove $TEMP/system/path. + auto nError1 = File::remove(aSysPath2); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: removing a file not using full qualified URL", + osl::FileBase::E_INVAL, nError1); + } + + void remove_004() + { + // remove $TEMP/tmpdir. + auto nError1 = File::remove(aTmpName3); + + CPPUNIT_ASSERT_MESSAGE("test for remove function: remove a directory", + (osl::FileBase::E_ISDIR == nError1) || (osl::FileBase::E_ACCES == nError1)); + } + + CPPUNIT_TEST_SUITE(remove); + CPPUNIT_TEST(remove_001); + CPPUNIT_TEST(remove_002); + CPPUNIT_TEST(remove_003); + CPPUNIT_TEST(remove_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC setAttributes(const OUString& ustrFileURL, sal_uInt64 uAttributes) + + class setAttributes : public CppUnit::TestFixture + { + private: + DirectoryItem rItem; + + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName6); + } + + + void setAttributes_001() + { + // on windows, only can set 2 attributes: osl_File_Attribute_ReadOnly, osl_File_Attribute_Hidden +#ifdef UNX + // set the file to readonly + auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // get the file attributes + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + if (geteuid() == 0) // as root, access(W_OK) may be true despite mode + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.", + static_cast(osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead), + rFileStatus.getAttributes()); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for setAttributes function: set file attributes and get it to verify.", + static_cast(osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead), + rFileStatus.getAttributes()); + } +#else + // please see GetFileAttributes + auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // get the file attributes + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // here the file has 2 Attributes: FILE_ATTRIBUTE_READONLY and FILE_ATTRIBUTE_NORMAL, + // but FILE_ATTRIBUTE_NORMAL is valid only if used alone, so this is maybe a bug + /*OString aString = OUStringToOString(aTmpName6, RTL_TEXTENCODING_ASCII_US); + DWORD dwFileAttributes = GetFileAttributes(aString.getStr()); + if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL) + printf("has normal attribute"); + if (dwFileAttributes & FILE_ATTRIBUTE_READONLY) + printf("has readonly attribute"); + */ + CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes READONLY and get it to verify.", + (osl_File_Attribute_ReadOnly & rFileStatus.getAttributes()) != 0); +#endif + } + void setAttributes_002() + { + // on UNX, can not set hidden attribute to file, rename file can set the attribute +#ifdef _WIN32 + // set the file to hidden + auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_Hidden); + + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // get the file attributes + FileStatus rFileStatus(osl_FileStatus_Mask_Attributes); + nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for setAttributes function: set file attributes and get it to verify.", + (osl_File_Attribute_Hidden & rFileStatus.getAttributes()) != 0); +#endif + } + + CPPUNIT_TEST_SUITE(setAttributes); + CPPUNIT_TEST(setAttributes_001); + CPPUNIT_TEST(setAttributes_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC setTime( + // const OUString& ustrFileURL, + // const TimeValue& rCreationTime, + // const TimeValue& rLastAccessTime, + // const TimeValue& rLastWriteTime) + + class setTime : public CppUnit::TestFixture + { + private: + DirectoryItem rItem; + + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName6); + } + + + void setTime_001() + { + TimeValue *pTV_current = nullptr; + CPPUNIT_ASSERT((pTV_current = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + TimeValue *pTV_creation = nullptr; + CPPUNIT_ASSERT((pTV_creation = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + TimeValue *pTV_access = nullptr; + CPPUNIT_ASSERT((pTV_access = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + TimeValue *pTV_modify = nullptr; + CPPUNIT_ASSERT((pTV_modify = static_cast(malloc(sizeof(TimeValue)))) != nullptr); + + // get current time + bool bOk = osl_getSystemTime(pTV_current); + CPPUNIT_ASSERT(bOk); + + // set the file time + auto nError2 = File::setTime(aTmpName6, *pTV_current, *pTV_current, *pTV_current); + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError2).getStr(), osl::FileBase::E_None, nError2); + + // get the file access time, creation time, modify time + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1); + + FileStatus rFileStatus(osl_FileStatus_Mask_AccessTime); + nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1); + *pTV_access = rFileStatus.getAccessTime(); + + FileStatus rFileStatus1(osl_FileStatus_Mask_CreationTime); + nError1 = rItem.getFileStatus(rFileStatus1); + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1); + *pTV_creation = rFileStatus1.getCreationTime(); + + FileStatus rFileStatus2(osl_FileStatus_Mask_ModifyTime); + nError1 = rItem.getFileStatus(rFileStatus2); + CPPUNIT_ASSERT_EQUAL_MESSAGE(errorToStr(nError1).getStr(), osl::FileBase::E_None, nError1); + *pTV_modify = rFileStatus2.getModifyTime(); + + CPPUNIT_ASSERT_MESSAGE("test for setTime function: set access time then get it. time precision is still a problem for it cut off the nanosec.", + t_compareTime(pTV_access, pTV_current, delta)); +#if defined(_WIN32) + // Unfortunately there is no way to get the creation time of a file under Unix (it's a Windows only feature). + // That means the flag osl_FileStatus_Mask_CreationTime should be deprecated under Unix. + CPPUNIT_ASSERT_MESSAGE("test for setTime function: set creation time then get it. ", + t_compareTime(pTV_creation, pTV_current, delta)); +#endif + CPPUNIT_ASSERT_MESSAGE("test for setTime function: set modify time then get it. ", + t_compareTime(pTV_modify, pTV_current, delta)); + free(pTV_current); + free(pTV_creation); + free(pTV_access); + free(pTV_modify); + } + + CPPUNIT_TEST_SUITE(setTime); + CPPUNIT_TEST(setTime_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC sync() + + class sync : public CppUnit::TestFixture + { + private: + DirectoryItem rItem; + + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestFile(aTmpName6); + + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName6); + } + + // test case: if The file is located on a read only file system. + void sync_001() + { + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + File tmp_file(aTmpName6); + osl::FileBase::RC err = tmp_file.open(osl_File_OpenFlag_Write); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("File open failed", osl::FileBase::E_None, err); + + char buffer[50000]; + sal_uInt64 written = 0; + nError1 = tmp_file.write(static_cast(buffer), sizeof(buffer), written); + CPPUNIT_ASSERT_EQUAL_MESSAGE("write failed!", osl::FileBase::E_None, nError1); + + // set the file to readonly + auto nError2 = File::setAttributes(aTmpName6, osl_File_Attribute_ReadOnly | osl_File_Attribute_GrpRead | osl_File_Attribute_OwnRead | osl_File_Attribute_OthRead); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + + nError2 = tmp_file.sync(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("can not sync to readonly file!", osl::FileBase::E_None, nError2); + + tmp_file.close(); + } + // test case:no enough space, how to create such case???see test_cpy_wrt_file.cxx::test_osl_writeFile + + CPPUNIT_TEST_SUITE(sync); + CPPUNIT_TEST(sync_001); + CPPUNIT_TEST_SUITE_END(); + }; + + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::ctors, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::open, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::close, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setPos, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::getPos, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::isEndOfFile, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setSize, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::read, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::write, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::readLine, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::copy, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::move, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::remove, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setAttributes, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::setTime, "osl_File"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_File::sync, "osl_File"); + + CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_File"); +} + +// Beginning of the test cases for DirectoryItem class + +namespace osl_DirectoryItem +{ + // testing the method + // DirectoryItem(): _pData(NULL) + + class ctors : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile(aTmpName6); + } + + void ctors_001() + { + File testFile(aTmpName6); + DirectoryItem rItem; // constructor + + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: initialize a new instance of DirectoryItem and get an item to check.", + osl::FileBase::E_None, nError1); + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctors_001); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // DirectoryItem(const DirectoryItem& rItem): _pData(rItem._pData) + + class copy_assin_Ctors : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile(aTmpName6); + } + + + void copy_assin_Ctors_001() + { + DirectoryItem rItem; // constructor + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + DirectoryItem copyItem(rItem); // copy constructor + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + nError1 = copyItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: use copy constructor to get an item and check filename.", + compareFileName(rFileStatus.getFileName(), aTmpName2)); + } + + void copy_assin_Ctors_002() + { + DirectoryItem rItem; // constructor + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + DirectoryItem copyItem; + copyItem = rItem; // assignment operator + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + nError1 = copyItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for copy_assin_Ctors function: test assignment operator here since it is same as copy constructor in test way.", + compareFileName(rFileStatus.getFileName(), aTmpName2)); + } + + CPPUNIT_TEST_SUITE(copy_assin_Ctors); + CPPUNIT_TEST(copy_assin_Ctors_001); + CPPUNIT_TEST(copy_assin_Ctors_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline sal_Bool is() + + class is : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile(aTmpName6); + } + + void is_001() + { + DirectoryItem rItem; // constructor + + CPPUNIT_ASSERT_MESSAGE("test for is function: use an uninitialized instance.", + !rItem.is()); + } + + void is_002() + { + DirectoryItem rItem; // constructor + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for is function: use an uninitialized instance.", + rItem.is()); + } + + CPPUNIT_TEST_SUITE(is); + CPPUNIT_TEST(is_001); + CPPUNIT_TEST(is_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // static inline RC get(const OUString& ustrFileURL, DirectoryItem& rItem) + + class get : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpname. + createTestFile(aTmpName6); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpname. + deleteTestFile(aTmpName6); + } + + + void get_001() + { + DirectoryItem rItem; + auto nError2 = DirectoryItem::get(aTmpName6, rItem); + + // check the file name + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + auto nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use copy constructor to get an item and check filename.", + osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_MESSAGE("test for get function: use copy constructor to get an item and check filename.", + compareFileName(rFileStatus.getFileName(), aTmpName2)); + } + + void get_002() + { + DirectoryItem rItem; + auto nError1 = DirectoryItem::get(aSysPath1, rItem); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a system name instead of a URL.", + osl::FileBase::E_INVAL, nError1); + } + + void get_003() + { + DirectoryItem rItem; + + auto nError1 = DirectoryItem::get(aTmpName3, rItem); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for get function: use a non existed file URL.", + osl::FileBase::E_NOENT, nError1); + } + + CPPUNIT_TEST_SUITE(get); + CPPUNIT_TEST(get_001); + CPPUNIT_TEST(get_002); + CPPUNIT_TEST(get_003); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC getFileStatus(FileStatus& rStatus) + + class getFileStatus : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void getFileStatus_001() + { + DirectoryItem rItem; + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName4, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // check the file name + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + auto nError2 = rItem.getFileStatus(rFileStatus); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get file status and check filename", + osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get file status and check filename", + compareFileName(rFileStatus.getFileName(), aTmpName2)); + } + + void getFileStatus_002() + { + DirectoryItem rItem; // constructor + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName6, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_NOENT, nError1); + + // check the file name + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + auto nError2 = rItem.getFileStatus(rFileStatus); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: file not existed", + osl::FileBase::E_INVAL, nError2); + } + + void getFileStatus_003() + { + DirectoryItem rItem; // constructor + // get the DirectoryItem. + auto nError1 = DirectoryItem::get(aTmpName3, rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // check the file name + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + auto nError2 = rItem.getFileStatus(rFileStatus); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getFileStatus function: get directory information", + osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_MESSAGE("test for getFileStatus function: get directory information", + compareFileName(rFileStatus.getFileName(), aTmpName1)); + } + + CPPUNIT_TEST_SUITE(getFileStatus); + CPPUNIT_TEST(getFileStatus_001); + CPPUNIT_TEST(getFileStatus_002); + CPPUNIT_TEST(getFileStatus_003); + CPPUNIT_TEST_SUITE_END(); + }; + + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::ctors, "osl_DirectoryItem"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::copy_assin_Ctors, "osl_DirectoryItem"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::is, "osl_DirectoryItem"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::get, "osl_DirectoryItem"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DirectoryItem::getFileStatus, "osl_DirectoryItem"); + + CPPUNIT_REGISTRY_ADD_TO_DEFAULT("osl_DirectoryItem"); +} + +// Beginning of the test cases for Directory class + +namespace osl_Directory +{ + // testing the method + // Directory(const OUString& strPath): _pData(0), _aPath(strPath) + + class ctors : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + // LLA: t_print("tearDown done.\n"); + } + + + void ctors_001() + { + Directory testDirectory(aTmpName3); // constructor + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // close a directory + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: create an instance and check open and close", + osl::FileBase::E_None, nError2); + } + + void ctors_002() + { + Directory testDirectory(aTmpName9); // constructor + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // close a directory + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for ctors function: relative URL, :-), it is also worked", + osl::FileBase::E_None, nError2); + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctors_001); + CPPUNIT_TEST(ctors_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC open() + + class open : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + void open_001() + { + Directory testDirectory(aTmpName3); + + // open a directory + auto nError1 = testDirectory.open(); + // check if directory is opened. + bool bOk = testDirectory.isOpen(); + // close a directory + auto nError2 = testDirectory.close(); + + CPPUNIT_ASSERT_MESSAGE("test for open function: open a directory and check for open", + bOk); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a directory and check for open", + osl::FileBase::E_None, nError2); + } + + void open_002() + { + Directory testDirectory(aTmpName6); + + auto nError1 = testDirectory.open(); + if (nError1 == osl::FileBase::E_None) + { + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + } + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: open a file that is not existed", + osl::FileBase::E_NOENT, nError1); + } + + void open_003() + { + Directory testDirectory(aUserDirectorySys); + + auto nError1 = testDirectory.open(); + if (nError1 == osl::FileBase::E_None) + { + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + } + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for open function: using system path", + osl::FileBase::E_INVAL, nError1); + } + + void open_004() + { + Directory testDirectory(aTmpName4); + + auto nError1 = testDirectory.open(); + if (nError1 == osl::FileBase::E_None) + { + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + } + + CPPUNIT_ASSERT_MESSAGE("test for open function: open a file instead of a directory", + (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_ACCES == nError1)); + } + + CPPUNIT_TEST_SUITE(open); + CPPUNIT_TEST(open_001); + CPPUNIT_TEST(open_002); + CPPUNIT_TEST(open_003); + CPPUNIT_TEST(open_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline sal_Bool isOpen() { return _pData != NULL; }; + + class isOpen : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempfile in $TEMP/tmpdir/tmpname. + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + } + + void tearDown() override + { + // remove the tempfile in $TEMP/tmpdir/tmpname. + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + } + + + void isOpen_001() + { + Directory testDirectory(aTmpName3); // constructor + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // check if directory is opened. + bool bOk = testDirectory.isOpen(); + // close a directory + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_MESSAGE("test for isOpen function: open a directory and check for open", + bOk); + } + + void isOpen_002() + { + Directory testDirectory(aTmpName3); // constructor + + // check if directory is opened. + bool bOk = testDirectory.isOpen(); + + CPPUNIT_ASSERT_MESSAGE("test for isOpen function: do not open a directory and check for open", + !bOk); + } + + CPPUNIT_TEST_SUITE(isOpen); + CPPUNIT_TEST(isOpen_001); + CPPUNIT_TEST(isOpen_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC close() + + class close : public CppUnit::TestFixture + { + public: + void setUp() override + { + // create a tempdirectory : $TEMP/tmpdir. + createTestDirectory(aTmpName3); + } + + void tearDown() override + { + // remove a tempdirectory : $TEMP/tmpdir. + deleteTestDirectory(aTmpName3); + } + + void close_001() + { + Directory testDirectory(aTmpName3); + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // close a directory + auto nError2 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + // check if directory is opened. + bool bOk = testDirectory.isOpen(); + + CPPUNIT_ASSERT_MESSAGE("test for isOpen function: close a directory and check for open", + !bOk); + } + + void close_002() + { + Directory testDirectory(aTmpName3); + + // close a directory + auto nError1 = testDirectory.close(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for isOpen function: close a not opened directory", + osl::FileBase::E_BADF, nError1); + } + + CPPUNIT_TEST_SUITE(close); + CPPUNIT_TEST(close_001); + CPPUNIT_TEST(close_002); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC reset() + + class reset : public CppUnit::TestFixture + { + private: + DirectoryItem rItem; + + public: + void setUp() override + { + // create a tempdirectory : $TEMP/tmpdir. + createTestDirectory(aTmpName3); + // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + createTestFile(aTmpName3, aTmpName2); + createTestFile(aTmpName3, aTmpName1); + createTestFile(aTmpName3, aHidURL1); + } + + void tearDown() override + { + // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + deleteTestFile(aTmpName3, aHidURL1); + deleteTestFile(aTmpName3, aTmpName1); + deleteTestFile(aTmpName3, aTmpName2); + // remove a tempdirectory : $TEMP/tmpdir. + deleteTestDirectory(aTmpName3); + } + + + void reset_001() + { + Directory testDirectory(aTmpName3); // constructor + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // get first Item + nError1 = testDirectory.getNextItem(rItem, 1); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // check the file name of first Item + FileStatus rFileStatusFirst(osl_FileStatus_Mask_FileName); + nError1 = rItem.getFileStatus(rFileStatusFirst); + + // get second Item + // mindy: nError1 = testDirectory.getNextItem(rItem, 0); + // mindy: CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // reset enumeration + auto nError2 = testDirectory.reset(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError2); + // get reset Item, if reset does not work, getNextItem() should return the second Item (aTmpName1) + nError1 = testDirectory.getNextItem(rItem); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // check the file name again + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + nError1 = rItem.getFileStatus(rFileStatus); + // close a directory + nError1 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + bool bOK1,bOK2,bOK3; + bOK1 = compareFileName(rFileStatus.getFileName(), aTmpName2); + bOK2 = compareFileName(rFileStatus.getFileName(), aHidURL1); + bOK3 = compareFileName(rFileStatus.getFileName(), rFileStatusFirst.getFileName()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename", + osl::FileBase::E_None, nError2); + CPPUNIT_ASSERT_MESSAGE("test for reset function: get two directory item, reset it, then get again, check the filename", + (bOK1 || bOK2 || bOK3)); + } + + void reset_002() + { + Directory testDirectory(aTmpName6); // constructor + + // close a directory + auto nError1 = testDirectory.reset(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: reset a non existed directory", + osl::FileBase::E_NOENT, nError1); + } + + void reset_003() + { + Directory testDirectory(aTmpName4); // constructor + + // close a directory + auto nError1 = testDirectory.reset(); + + CPPUNIT_ASSERT_MESSAGE("test for reset function: reset a file instead of a directory", + (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1)); + } + + void reset_004() + { + Directory testDirectory(aUserDirectorySys); // constructor + + // close a directory + auto nError1 = testDirectory.reset(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for reset function: use a system path", + osl::FileBase::E_INVAL, nError1); + } + + CPPUNIT_TEST_SUITE(reset); + CPPUNIT_TEST(reset_001); + CPPUNIT_TEST(reset_002); + CPPUNIT_TEST(reset_003); + CPPUNIT_TEST(reset_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline RC getNextItem(DirectoryItem& rItem, sal_uInt32 nHint = 0) + + class getNextItem : public CppUnit::TestFixture + { + private: + DirectoryItem rItem; + + public: + void setUp() override + { + // create a tempdirectory : $TEMP/tmpdir. + createTestDirectory(aTmpName3); + // create three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + createTestFile(aTmpName3, aTmpName2); + createTestFile(aTmpName3, aTmpName1); + createTestFile(aTmpName3, aHidURL1); + + } + + void tearDown() override + { + // remove three files : $TEMP/tmpdir/tmpname, $TEMP/tmpdir/tmpdir, $TEMP/tmpdir/hiddenfile, + deleteTestFile(aTmpName3, aHidURL1); + deleteTestFile(aTmpName3, aTmpName1); + deleteTestFile(aTmpName3, aTmpName2); + // remove a tempdirectory : $TEMP/tmpdir. + deleteTestDirectory(aTmpName3); + } + + + void getNextItem_001() + { + Directory testDirectory(aTmpName3); // constructor + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // check the file name + bool bOk1 = false; + bool bOk2 = false; + bool bOk3 = false; + FileStatus rFileStatus(osl_FileStatus_Mask_FileName); + + for (int nCount = 0; nCount < 3; nCount++) + { + // get three Items + nError1 = testDirectory.getNextItem(rItem, 2); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + nError1 = rItem.getFileStatus(rFileStatus); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + // a special order is not guaranteed. So any file may occur on any time. + // But every file name should occur only once. + if (!bOk1 && compareFileName(rFileStatus.getFileName(), aTmpName1)) + { + bOk1 = true; + } + + if (!bOk2 && compareFileName(rFileStatus.getFileName(), aTmpName2)) + { + bOk2 = true; + } + + if (!bOk3 && compareFileName(rFileStatus.getFileName(), aHidURL1)) + { + bOk3 = true; + } + } + + // close a directory + nError1 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.", + bOk1); + CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.", + bOk2); + CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: retrieve three items and check their names.", + bOk3); + } + + void getNextItem_002() + { + Directory testDirectory(aTmpName3); // constructor + auto nError1 = testDirectory.getNextItem(rItem); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve an item in a directory which is not opened, also test for nHint's default value.", + osl::FileBase::E_INVAL, nError1); + } + + void getNextItem_003() + { + Directory testDirectory(aTmpName3); // constructor + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + osl::FileBase::RC nError2 = osl::FileBase::E_None; + for (int nCount = 0; nCount < 4; nCount++) + { + nError2 = testDirectory.getNextItem(rItem, 3); + } + + // close a directory + nError1 = testDirectory.close(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getNextItem function: retrieve 4 times in a directory which contain only 3 files.", + osl::FileBase::E_NOENT, nError2); + } + + void getNextItem_004() + { + // create a link file(can not on Windows), then check if getNextItem can get it. +#ifdef UNX + bool bLnkOK = false; + bool bFoundOK = false; + + OUString aUStr_LnkFileSys(aTempDirectorySys), aUStr_SrcFileSys(aTempDirectorySys); + aUStr_LnkFileSys += aSlashURL + "/tmpdir/link.file"; + aUStr_SrcFileSys += aSlashURL + "/tmpdir/tmpname"; + + OString strLinkFileName, strSrcFileName; + strLinkFileName = OUStringToOString(aUStr_LnkFileSys, RTL_TEXTENCODING_ASCII_US); + strSrcFileName = OUStringToOString(aUStr_SrcFileSys, RTL_TEXTENCODING_ASCII_US); + + // create a link file and link it to file "/tmp/PID/tmpdir/tmpname" + sal_Int32 fd = symlink(strSrcFileName.getStr(), strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), fd); + Directory testDirectory(aTmpName3); + + // open a directory + auto nError1 = testDirectory.open(); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + OUString aFileName ("link.file"); + + while (true) { + nError1 = testDirectory.getNextItem(rItem, 4); + if (nError1 == osl::FileBase::E_None) { + FileStatus rFileStatus(osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Type); + rItem.getFileStatus(rFileStatus); + if (compareFileName(rFileStatus.getFileName(), aFileName)) + { + bFoundOK = true; + if (rFileStatus.getFileType() == FileStatus::Link) + { + bLnkOK = true; + break; + } + } + } + else + break; + } + fd = std::remove(strLinkFileName.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("remove link file failed", static_cast(0), fd); + CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if can retrieve the link file name", + bFoundOK); + CPPUNIT_ASSERT_MESSAGE("test for getNextItem function: check if link file has file type link", + bLnkOK); +#endif + } + + CPPUNIT_TEST_SUITE(getNextItem); + CPPUNIT_TEST(getNextItem_001); + CPPUNIT_TEST(getNextItem_002); + CPPUNIT_TEST(getNextItem_003); + CPPUNIT_TEST(getNextItem_004); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC getVolumeInfo(const OUString& ustrDirectoryURL, VolumeInfo& rInfo) + + class getVolumeInfo : public CppUnit::TestFixture + { + public: + void checkValidMask(osl::VolumeInfo const& _aVolumeInfo, sal_Int32 _nMask) + { + if (_nMask == osl_VolumeInfo_Mask_FileSystemName) + { + // get file system name + OUString aFileSysName = _aVolumeInfo.getFileSystemName(); + + bool bRes2 = compareFileName(aFileSysName, aNullURL); + CPPUNIT_ASSERT_MESSAGE("test for getVolumeInfo function: getVolumeInfo of root directory.", + !bRes2); + } + + if (_nMask == osl_VolumeInfo_Mask_Attributes) + { + bool b1 = _aVolumeInfo.getRemoteFlag(); + bool b2 = _aVolumeInfo.getRemoveableFlag(); + bool b3 = _aVolumeInfo.getCompactDiscFlag(); + bool b4 = _aVolumeInfo.getFloppyDiskFlag(); + bool b5 = _aVolumeInfo.getFixedDiskFlag(); + bool b6 = _aVolumeInfo.getRAMDiskFlag(); + + OString sAttr; + if (b1) sAttr = "Remote"; + if (b2) sAttr += " Removeable"; + if (b3) sAttr += " CDROM"; + if (b4) sAttr += " Floppy"; + if (b5) sAttr += " FixedDisk"; + if (b6) sAttr += " RAMDisk"; + + printf("Attributes: %s\n", sAttr.getStr()); + } + if (_nMask == osl_VolumeInfo_Mask_TotalSpace) + { + // within Linux, df / * 1024 bytes is the result + sal_uInt64 nSize = _aVolumeInfo.getTotalSpace(); + printf("Total space: %" SAL_PRIuUINT64 "\n", nSize); + } + if (_nMask == osl_VolumeInfo_Mask_UsedSpace) + { + sal_uInt64 nSize = _aVolumeInfo.getUsedSpace(); + printf(" Used space: %" SAL_PRIuUINT64 "\n", nSize); + } + if (_nMask == osl_VolumeInfo_Mask_FreeSpace) + { + sal_uInt64 nSize = _aVolumeInfo.getFreeSpace(); + printf(" Free space: %" SAL_PRIuUINT64 "\n", nSize); + } + if (_nMask == osl_VolumeInfo_Mask_MaxNameLength) + { + sal_uInt32 nLength = _aVolumeInfo.getMaxNameLength(); + printf("max name length: %" SAL_PRIuUINT32 "\n", nLength); + } + if (_nMask == osl_VolumeInfo_Mask_MaxPathLength) + { + sal_uInt32 nLength = _aVolumeInfo.getMaxPathLength(); + printf("max path length: %" SAL_PRIuUINT32 "\n", nLength); + } + if (_nMask == osl_VolumeInfo_Mask_FileSystemCaseHandling) + { + bool bIsCase = _aVolumeInfo.isCaseSensitiveFileSystem(); + printf("filesystem case sensitive: %s\n", bIsCase ? "yes" : "no"); + } + } + + void checkVolumeInfo(sal_Int32 _nMask) + { + VolumeInfo aVolumeInfo(_nMask); + // call getVolumeInfo here + auto nError1 = Directory::getVolumeInfo(aVolURL1, aVolumeInfo); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "test for getVolumeInfo function: getVolumeInfo of root directory.", + osl::FileBase::E_None, nError1); + // LLA: IMHO it's not a bug, if VolumeInfo is not valid, it's a feature + // LLA: CPPUNIT_ASSERT_MESSAGE("mask is not valid", sal_True == aVolumeInfo.isValid(_nMask)); + if (aVolumeInfo.isValid(_nMask)) + checkValidMask(aVolumeInfo, _nMask); + } + + void getVolumeInfo_001_1() + { + sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_2() + { + sal_Int32 mask = osl_VolumeInfo_Mask_Attributes; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_3() + { + sal_Int32 mask = osl_VolumeInfo_Mask_TotalSpace; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_4() + { + sal_Int32 mask = osl_VolumeInfo_Mask_UsedSpace; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_5() + { + sal_Int32 mask = osl_VolumeInfo_Mask_FreeSpace; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_6() + { + sal_Int32 mask = osl_VolumeInfo_Mask_MaxNameLength; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_7() + { + sal_Int32 mask = osl_VolumeInfo_Mask_MaxPathLength; + checkVolumeInfo(mask); + } + + void getVolumeInfo_001_8() + { + sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemCaseHandling; + checkVolumeInfo(mask); + } + + void getVolumeInfo_002() + { + sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName; + VolumeInfo aVolumeInfo(mask); + // call getVolumeInfo here + + OUString aRootSysURL; + auto nError1 = osl::File::getFileURLFromSystemPath(aRootSys, aRootSysURL); + CPPUNIT_ASSERT_EQUAL_MESSAGE("can't convert root path to file url", osl::FileBase::E_None, nError1); + + nError1 = Directory::getVolumeInfo(aRootSys, aVolumeInfo); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: use system path as parameter.", + osl::FileBase::E_INVAL, nError1); + } + + void getVolumeInfo_003() + { +// LLA: in Windows, it reply no error, it did not pass in (W32). +#if defined(UNX) && !defined(IOS) + sal_Int32 mask = osl_VolumeInfo_Mask_FileSystemName; + VolumeInfo aVolumeInfo(mask); + // call getVolumeInfo here + auto nError1 = Directory::getVolumeInfo(aTmpName3, aVolumeInfo); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for getVolumeInfo function: non-existence test. ", + osl::FileBase::E_NOENT, nError1); +#endif + } + + CPPUNIT_TEST_SUITE(getVolumeInfo); + CPPUNIT_TEST(getVolumeInfo_001_1); + CPPUNIT_TEST(getVolumeInfo_001_2); + CPPUNIT_TEST(getVolumeInfo_001_3); + CPPUNIT_TEST(getVolumeInfo_001_4); + CPPUNIT_TEST(getVolumeInfo_001_5); + CPPUNIT_TEST(getVolumeInfo_001_6); + CPPUNIT_TEST(getVolumeInfo_001_7); + CPPUNIT_TEST(getVolumeInfo_001_8); + CPPUNIT_TEST(getVolumeInfo_002); + CPPUNIT_TEST(getVolumeInfo_003); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC create(const OUString& ustrDirectoryURL) + + class create : public CppUnit::TestFixture + { + public: + void create_001() + { + // create directory in $TEMP/tmpdir + auto nError1 = Directory::create(aTmpName3); + // check for existence + auto nError2 = Directory::create(aTmpName3); + // remove it + deleteTestDirectory(aTmpName3); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory and check its existence.", + osl::FileBase::E_EXIST, nError2); + } + + void create_002() + { +#if !defined(_WIN32) && !defined(MACOSX) && defined(SAL_UNX) + if (geteuid() == 0) // don't test if building as root + return; + + OUString aTmpDir; + auto nError1 = osl::FileBase::createTempFile(nullptr, nullptr, &aTmpDir); + CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File creation failed", osl::FileBase::E_None, nError1); + + nError1 = File::remove(aTmpDir); + CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File removal failed", osl::FileBase::E_None, nError1); + + nError1 = Directory::create(aTmpDir); + OString sError = "test for create function: create a directory '" + + OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) + + "' and check its existence."; + CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_None, nError1); + osl_setFileAttributes(aTmpDir.pData, 0); // no access allowed now + + // Shouldn't be possible now to create a dir underneath it + OUString aTmpSubLevel = aTmpDir + "/notallowedhere"; + nError1 = Directory::create(aTmpSubLevel); + + // allow removal + osl_setFileAttributes(aTmpDir.pData, + osl_File_Attribute_OwnRead | + osl_File_Attribute_OwnWrite | + osl_File_Attribute_OwnExe); + deleteTestDirectory(aTmpDir); + sError = "test for create function: create a directory under '" + + OUStringToOString(aTmpDir, RTL_TEXTENCODING_ASCII_US) + + "' for access test."; + CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_ACCES, nError1); +#endif + } + + void create_003() + { + // create directory in /tmpname + auto nError1 = Directory::create(aSysPath1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for create function: create a directory using system path.", + osl::FileBase::E_INVAL, nError1); + } + + CPPUNIT_TEST_SUITE(create); + CPPUNIT_TEST(create_001); + CPPUNIT_TEST(create_002); + CPPUNIT_TEST(create_003); + CPPUNIT_TEST_SUITE_END(); + }; + + // testing the method + // inline static RC remove(const OUString& ustrDirectoryURL) + + class remove : public CppUnit::TestFixture + { + public: + void remove_001() + { + // create directory in $TEMP/tmpdir + auto nError1 = Directory::create(aTmpName3); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // remove it + nError1 = Directory::remove(aTmpName3); + // check for existence + Directory rDirectory(aTmpName3); + auto nError2 = rDirectory.open(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.", + osl::FileBase::E_None, nError1); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory and check its existence.", + osl::FileBase::E_NOENT, nError2); + } + + void remove_002() + { + // create directory in $TEMP/tmpdir + auto nError1 = Directory::create(aTmpName3); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, nError1); + // try to remove it by system path + nError1 = Directory::remove(aSysPath3); + // check for existence + Directory rDirectory(aTmpName3); + auto nError2 = rDirectory.open(); + + if (nError2 != osl::FileBase::E_NOENT) + Directory::remove(aTmpName3); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: remove a directory by its system path, and check its existence.", + osl::FileBase::E_INVAL, nError1); + } + + void remove_003() + { + // try to remove a non-existed directory + auto nError1 = Directory::remove(aTmpName6); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("test for remove function: try to remove a non-existed directory.", + osl::FileBase::E_NOENT, nError1); + } + + void remove_004() + { + createTestFile(aTmpName6); + bool bExist = ifFileExist(aTmpName6); + // try to remove file. + auto nError1 = Directory::remove(aTmpName6); + deleteTestFile(aTmpName6); + + CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.", + bExist); + CPPUNIT_ASSERT_MESSAGE("test for remove function: try to remove a file but not directory.", + (osl::FileBase::E_NOTDIR == nError1) || (osl::FileBase::E_NOENT == nError1)); + } + + void remove_005() + { + createTestDirectory(aTmpName3); + createTestFile(aTmpName4); + auto nError1 = Directory::remove(aTmpName3); + deleteTestFile(aTmpName4); + deleteTestDirectory(aTmpName3); + OString sError = "test for remove function: try to remove a directory that is not empty." + + errorToStr(nError1); +#if defined(__sun) + // on UNX, the implementation uses rmdir(), which EEXIST is thrown on Solaris when the directory is not empty, refer to: 'man -s 2 rmdir', while on linux, ENOTEMPTY is thrown. + // EEXIST The directory contains entries other than those for "." and "..". + printf("#Solaris test\n"); + CPPUNIT_ASSERT_MESSAGE(sError.getStr(), (osl::FileBase::E_EXIST == nError1)); +#else + CPPUNIT_ASSERT_EQUAL_MESSAGE(sError.getStr(), osl::FileBase::E_NOTEMPTY, nError1); +#endif + } + + CPPUNIT_TEST_SUITE(remove); + CPPUNIT_TEST(remove_001); + CPPUNIT_TEST(remove_002); + CPPUNIT_TEST(remove_003); + CPPUNIT_TEST(remove_004); + CPPUNIT_TEST(remove_005); + CPPUNIT_TEST_SUITE_END(); + }; + + // TEST Directory::createPath + + #ifdef _WIN32 + # define PATH_BUFFER_SIZE MAX_PATH + #else + # define PATH_BUFFER_SIZE PATH_MAX + #endif + +#define TEST_PATH_POSTFIX "hello/world" + + static OUString const & get_test_path() + { + static OUString test_path = []() + { + OUString tmp; + osl::FileBase::RC rc = osl::FileBase::getTempDirURL(tmp); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Getting the location of TMP dir failed", + osl::FileBase::E_None, rc + ); + + OUString system_path; + rc = osl::FileBase::getSystemPathFromFileURL(tmp, system_path); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Cannot convert the TMP dir to system path", + osl::FileBase::E_None, rc + ); + + OString tmp_x(OUStringToOString(system_path, RTL_TEXTENCODING_UTF8)); + if (tmp_x.lastIndexOf('/') != (tmp_x.getLength() - 1)) + tmp_x += "/"; + +#if !defined(_WIN32) && !defined(ANDROID) && !defined(AIX) + // FIXME would be nice to create unique dir even on Windows + tmp_x += "XXXXXX"; + char *out = mkdtemp(const_cast(tmp_x.getStr())); + + CPPUNIT_ASSERT_MESSAGE + ( + "mkdtemp call failed", + out != nullptr + ); + + tmp_x += "/"; +#endif + tmp_x += TEST_PATH_POSTFIX; + + OUString tmpTestPath; + rc = osl::FileBase::getFileURLFromSystemPath(OStringToOUString(tmp_x, RTL_TEXTENCODING_UTF8), tmpTestPath); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "Cannot convert the system path back to a URL", + osl::FileBase::E_None, rc + ); + return tmpTestPath; + }(); + return test_path; + } + + static void rm_test_path(const OUString& path) + { + sal_Unicode buffer[PATH_BUFFER_SIZE]; + memcpy(buffer, path.getStr(), (path.getLength() + 1) * sizeof(sal_Unicode)); + + sal_Int32 i = rtl_ustr_lastIndexOfChar(buffer, '/'); + if (i == path.getLength()) + buffer[i] = 0; + + Directory::remove(OUString(buffer)); + + i = rtl_ustr_lastIndexOfChar(buffer, '/'); + assert(i != -1); + if (i != -1) + { + buffer[i] = 0; + Directory::remove(OUString(buffer)); + } + } + + namespace { + + class DirCreatedObserver : public DirectoryCreationObserver + { + public: + DirCreatedObserver() : i(0) {} + virtual void DirectoryCreated(const OUString&) override { i++; }; + + int number_of_dirs_created() const { return i; } + + private: + int i; + }; + + } + + class createPath : public CppUnit::TestFixture + { + public: + createPath() + {} + + void with_relative_path() + { + osl::FileBase::RC rc = Directory::createPath(TEST_PATH_POSTFIX); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createDirectoryPath contract broken", + osl::FileBase::E_INVAL, rc + ); + } + + void without_callback() + { + OUString tp_url = get_test_path(); + + rm_test_path(tp_url); + + osl::FileBase::RC rc = Directory::createPath(tp_url); + + rm_test_path(tp_url); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createDirectoryPath failed", + osl::FileBase::E_None, rc + ); + } + + void with_callback() + { + OUString tp_url = get_test_path(); + + rm_test_path(tp_url); + + DirCreatedObserver* observer = new DirCreatedObserver; + osl::FileBase::RC rc = Directory::createPath(tp_url, observer); + int nDirs = observer->number_of_dirs_created(); + delete observer; + + rm_test_path(tp_url); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createDirectoryPath failed", + osl::FileBase::E_None, rc + ); + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath failed", + nDirs > 0 + ); + + } + +#ifdef _WIN32 + + const char* get_unused_drive_letter() + { + static const char m_aBuff[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + DWORD ld = GetLogicalDrives(); + DWORD i = 4; + DWORD j = 2; + + while ((ld & i) && (i > 1)) + { i = i << 1; j++; } + + if (i > 2) + return m_aBuff + j; + + return nullptr; + } + + void at_invalid_logical_drive() + { + const char* drv = get_unused_drive_letter(); + char buff[PATH_BUFFER_SIZE]; + memset(buff, 0, sizeof(buff)); + + strncpy(buff, drv, 1); + strcat(buff, ":\\"); + strcat(buff, TEST_PATH_POSTFIX); + + OUString path = OUString::createFromAscii(buff); + OUString tp_url; + osl::FileBase::getFileURLFromSystemPath(path, tp_url); + + osl::FileBase::RC rc = Directory::createPath(tp_url); + + CPPUNIT_ASSERT_MESSAGE + ( + "osl_createDirectoryPath doesn't fail on unused logical drive letters", + rc != osl::FileBase::E_None + ); + } +#endif /* _WIN32 */ + + CPPUNIT_TEST_SUITE(createPath); + CPPUNIT_TEST(with_relative_path); + CPPUNIT_TEST(without_callback); + CPPUNIT_TEST(with_callback); +#ifdef _WIN32 + CPPUNIT_TEST(at_invalid_logical_drive); +#endif + CPPUNIT_TEST_SUITE_END(); + + }; + + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::ctors); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::open); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::isOpen); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::close); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::reset); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::getNextItem); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::getVolumeInfo); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::create); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::remove); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Directory::createPath); +} + +#if 0 +#if defined UNX +/** get Current PID. +*/ +OUString getCurrentPID() +{ + //~ Get current PID and turn it into OUString; + int nPID = 0; +#ifdef _WIN32 + nPID = GetCurrentProcessId(); +#else + nPID = getpid(); +#endif + return OUString::number(nPID); +} +#endif +#endif + +namespace { + +//~ do some clean up work after all test completed. +class GlobalObject +{ +public: + ~GlobalObject() + { + try + { + //~ special clean up task in Windows and Unix separately; +#if (defined UNX) + //~ some clean up task for UNIX OS + ; +#else + //~ some clean up task for Windows OS + //~ check if some files are in the way, remove them if necessary. + if (ifFileExist(aTmpName6)) + deleteTestFile(aTmpName6); + if (ifFileExist(aTmpName4)) + deleteTestFile(aTmpName4); + if (checkDirectory(aTmpName4, oslCheckMode::Exist)) + deleteTestDirectory(aTmpName4); + if (ifFileExist(aTmpName3)) + deleteTestFile(aTmpName3); + if (checkDirectory(aTmpName3, oslCheckMode::Exist)) + deleteTestDirectory(aTmpName3); + + OUString aUStr(aUserDirectoryURL); + concatURL(aUStr, aHidURL1); + if (ifFileExist(aUStr)) + deleteTestFile(aUStr); + + OUString aUStr1(aRootURL); + concatURL(aUStr1, aTmpName2); + if (ifFileExist(aUStr1)) + deleteTestFile(aUStr1); +#endif + } + catch (const CppUnit::Exception &e) + { + printf("Exception caught in GlobalObject dtor(). Exception message: '%s'. Source line: %d\n", e.what(), e.sourceLine().lineNumber()); + } + catch (...) + { + printf("Exception caught (...) in GlobalObject dtor()\n"); + } + } +}; + +} + +static GlobalObject theGlobalObject; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/file/osl_File_Const.h b/sal/qa/osl/file/osl_File_Const.h new file mode 100644 index 000000000..beee8d6d6 --- /dev/null +++ b/sal/qa/osl/file/osl_File_Const.h @@ -0,0 +1,206 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H +#define INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H + +#include +#include +#include +#include + +#include + +#include + +static OUString getTempDirectoryURL_() +{ + OUString aDir; + CPPUNIT_ASSERT_EQUAL_MESSAGE("couldn't get system temp URL", + osl::FileBase::E_None, osl::FileBase::getTempDirURL(aDir)); + // This resolves symlinks in the temp path if any + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, + osl::FileBase::getAbsoluteFileURL(aDir, aDir, aDir)); + return aDir; +} + +static OUString getTempDirectorySys_() +{ + OUString aDir; + CPPUNIT_ASSERT_EQUAL_MESSAGE("couldn't get system temp directory", + osl::FileBase::E_None, osl::FileBase::getSystemPathFromFileURL(getTempDirectoryURL_(), aDir)); + return aDir; +} + +#ifdef __cplusplus +extern "C" +{ +#endif + +// common used string resource +// these common used string will be used as assist resource in test +// they are mostly OS independent, some of the resource can be reused +// so, a common test data repository will be better since it can be +// shared among all test code + +const char pBuffer_Char[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const char pBuffer_Number[] = "1234567890"; +const char pBuffer_Blank[] = ""; + +// OS dependent/independent definitions/includes +// we use FILE_PREFIX for URL prefix, +// TEST_PLATFORM for test platform initial, +// TEST_PLATFORM_ROOT for root dir in comrresponding platform, +// TEST_PLATFORM_TEMP for temp dir in comrresponding platform, +// PATH_LIST_DELIMITER for separator of path list in comrresponding platform, +// PATH_SEPARATOR for separator in URL or system path in comrresponding platform, +// PATH_MAX/MAX_PATH for max path length in comrresponding platform, + +// OS independent const definition + +# define FILE_PREFIX "file:///" +# define TEST_FILE_SIZE 1024 + +// OS dependent declaration and includes + +#if ( defined UNX ) //Unix +# include +# include +# include +# include +# include +# include +# if !defined(MACOSX) && !defined(IOS) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined (DRAGONFLY) && !defined(HAIKU) +# include +# else +# include +# ifndef HAIKU +# include +# endif +# endif +# if !defined(ANDROID) +# include +# endif +# include +# define TEST_PLATFORM_ROOT "/" +# define PATH_LIST_DELIMITER ":" +# define PATH_SEPARATOR "/" +#endif + +#if defined(_WIN32) // Windows +# include +# define PATH_MAX MAX_PATH +# define TEST_PLATFORM_ROOT "c:/" +# define PATH_LIST_DELIMITER ";" +# define PATH_SEPARATOR "/" +#endif + +// OS independent file definition + +OUString aNullURL( "" ); +OUString aSlashURL( PATH_SEPARATOR ); +OUString aPreURL( FILE_PREFIX ); +OUString aRootURL( FILE_PREFIX TEST_PLATFORM_ROOT ); + +OUString aTempDirectorySys(getTempDirectorySys_()); +OUString aTempDirectoryURL(getTempDirectoryURL_()); +OUString aUserDirectorySys( aTempDirectorySys + "" ); +OUString aUserDirectoryURL( aTempDirectoryURL + "" ); + +// common used URL:temp, canonical, root, relative, link,etc + +OUString aCanURL1( aTempDirectoryURL + "/canonical.name" ); +OUString aCanURL2( + RTL_CONSTASCII_USTRINGPARAM("ca@#;+.,$///78no\0ni..name")); +OUString aCanURL3( "ca@#;+.,$//tmp/678nonical//name" ); +OUString aCanURL4( "canonical.name" ); +OUString aTmpName1( "tmpdir" ); +OUString aTmpName2( "tmpname" ); +OUString aTmpName3( aTempDirectoryURL + "/tmpdir" ); +OUString aTmpName4( aTempDirectoryURL + "/tmpdir/tmpname" ); +OUString aTmpName5( aTempDirectoryURL + "/tmpdir/../tmpdir/./tmpname" ); +OUString aTmpName6( aTempDirectoryURL + "/tmpname" ); +OUString aTmpName7( aTempDirectoryURL + "/noaccess" ); +OUString aTmpName8( aTempDirectoryURL + "/tmpname/tmpdir" ); +OUString aTmpName9( aTempDirectoryURL + "/tmpdir/../tmpdir/./" ); +OUString aTmpName10(aTempDirectoryURL + u"/\xE6\x9C\xAA\xE5\x91\xBD\xE5\x90\x8Dzhgb18030"); + +OUString aRelURL1( "relative/file1" ); +OUString aRelURL2( "relative/./file2" ); +OUString aRelURL3( "relative/../file3" ); +OUString aRelURL4( "././relative/../file4" ); +OUString aRelURL5( aTempDirectoryURL + "/./../" ); +OUString aLnkURL1( aTempDirectoryURL + "/link.file" ); +OUString aHidURL1( ".hiddenfile" ); + +// common used System Path:temp, root,etc + +OUString aRootSys( TEST_PLATFORM_ROOT ); +OUString aSysPath1( aTempDirectorySys + "/system.path" ); +OUString aSysPath2( aTempDirectorySys + "/system/path" ); +OUString aSysPath3( aTempDirectorySys + "/tmpdir" ); +OUString aSysPath4( aTempDirectorySys + "/tmpname" ); +OUString aSysPath5( aTempDirectorySys + u"/\xE6\x9C\xAA\xE5\x91\xBD\xE5\x90\x8Dzhgb18030" ); +OUString aSysPathLnk( aTempDirectorySys + "/link.file" ); +OUString aFifoSys( aTempDirectorySys + "/tmpdir/fifo" ); + +// FileType URL, we pick some canonical file in corresponding system for test: +// socket, link, etc. +// Note that this may be changed in the different platform, so be careful to use. + +#if ( defined UNX ) // Unix +OUString aTypeURL1( FILE_PREFIX "dev/ccv"); //socket Solaris/Linux +OUString aTypeURL2( FILE_PREFIX "devices/pseudo/tcp@0:tcp"); //special Solaris/Linux +OUString aTypeURL3( FILE_PREFIX "lib" ); //link Solaris +#else // Windows +OUString aTypeURL1( FILE_PREFIX "" ); +OUString aTypeURL2( FILE_PREFIX "" ); +OUString aTypeURL3( FILE_PREFIX "" ); +#endif + +// Volume device URL, we pick some canonical volume device for test: +// UNIX file system, Floppy Disk, Proc file system, Temp file system, Compact Disk. + +#if ( defined UNX ) // Unix +OUString aVolURL1( FILE_PREFIX ""); //ufs Solaris/Linux +#ifdef __sun +OUString aVolURL2( FILE_PREFIX "dev/fd" ); //fd Solaris +#else +OUString aVolURL2( FILE_PREFIX "dev/floppy/0u1440" ); //fd0 Linux +#endif +OUString aVolURL3( FILE_PREFIX "proc" ); //proc Solaris/Linux +OUString aVolURL4( FILE_PREFIX "staroffice" ); //nfs Solaris/Linux +OUString aVolURL5( FILE_PREFIX "tmp" ); //tmpfs Solaris +OUString aVolURL6( FILE_PREFIX "cdrom" ); //cd Solaris +#else // Windows +OUString aVolURL1( FILE_PREFIX "c:/" ); +OUString aVolURL2( FILE_PREFIX "a:/" ); +OUString aVolURL3( FILE_PREFIX "" ); +OUString aVolURL4( FILE_PREFIX "" ); +OUString aVolURL5( FILE_PREFIX "c:/temp" ); +OUString aVolURL6( FILE_PREFIX "e:/" ); +#endif + +#ifdef __cplusplus +} +#endif + +#endif // INCLUDED_SAL_QA_OSL_FILE_OSL_FILE_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/file/osl_old_test_file.cxx b/sal/qa/osl/file/osl_old_test_file.cxx new file mode 100644 index 000000000..7b0ef6e6d --- /dev/null +++ b/sal/qa/osl/file/osl_old_test_file.cxx @@ -0,0 +1,115 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#ifdef SAL_UNX +#define TEST_VOLUME "" +#elif defined _WIN32 +#define TEST_VOLUME "Z:/" +#endif + +#include +#include + +#include + +namespace osl_test_file +{ + +class oldtestfile : public CppUnit::TestFixture +{ +public: + void test_file_001(); + void test_file_002(); + void test_file_004(); + + CPPUNIT_TEST_SUITE( oldtestfile ); + CPPUNIT_TEST( test_file_001 ); + CPPUNIT_TEST( test_file_002 ); + CPPUNIT_TEST( test_file_004 ); + CPPUNIT_TEST_SUITE_END( ); +}; + +const std::pair aSource1[] = { + { u"a", u"file:///" TEST_VOLUME "bla/a" }, + ///TODO: check if last slash must be omitted in resolved path. +// { u"a/", u"file:///" TEST_VOLUME "bla/a" }, + { u"../a", u"file:///" TEST_VOLUME "a" }, + { u"a/..", u"file:///" TEST_VOLUME "bla/" }, + { u"a/../b", u"file:///" TEST_VOLUME "bla/b" }, + { u"..", u"file:///" TEST_VOLUME "" }, + { u"a/b/c/d", u"file:///" TEST_VOLUME "bla/a/b/c/d" }, + { u"a/./c", u"file:///" TEST_VOLUME "bla/a/c" }, + { u"a/././c", u"file:///" TEST_VOLUME "bla/a/c" }, + { u"file:///" TEST_VOLUME "bla1/blub", u"file:///" TEST_VOLUME "bla1/blub" }, +}; + +const std::pair aSource2[] = { + { u"a", u"file:///" TEST_VOLUME "bla/blubs/schnubbel/a" }, + ///TODO: check if last slash must be omitted in resolved path. +// { u"a/", u"file:///" TEST_VOLUME "bla/blubs/schnubbel/a" }, + { u"../a", u"file:///" TEST_VOLUME "bla/blubs/a" }, + { u"../../a", u"file:///" TEST_VOLUME "bla/a" }, + { u"../../../a", u"file:///" TEST_VOLUME "a" }, + { u"../../../a/b/c/d", u"file:///" TEST_VOLUME "a/b/c/d" }, +}; + +void oldtestfile::test_file_001() +{ + OUString base1( "file:///" TEST_VOLUME "bla" ); + for (const auto& [rel, expected] : aSource1) + { + OUString target; + oslFileError e = osl_getAbsoluteFileURL( base1.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #1", osl_File_E_None, e ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #1.1", expected, target); + } +} + +void oldtestfile::test_file_002() +{ + OUString base2( "file:///" TEST_VOLUME "bla/blubs/schnubbel" ); + for (const auto& [rel, expected] : aSource2) + { + OUString target; + oslFileError e = osl_getAbsoluteFileURL( base2.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #2", osl_File_E_None, e ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #2.1", expected, target); + } +} + +void oldtestfile::test_file_004() +{ + OUString base4( "file:///" TEST_VOLUME "bla/" ); + for (const auto& [rel, expected] : aSource1) + { + OUString target; + oslFileError e = osl_getAbsoluteFileURL( base4.pData, rel.pData , &target.pData ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #10", osl_File_E_None, e ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("failure #10.1", expected, target); + } +} + +} // namespace osl_test_file + +CPPUNIT_TEST_SUITE_REGISTRATION( osl_test_file::oldtestfile); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/file/test_cpy_wrt_file.cxx b/sal/qa/osl/file/test_cpy_wrt_file.cxx new file mode 100644 index 000000000..6843d10b3 --- /dev/null +++ b/sal/qa/osl/file/test_cpy_wrt_file.cxx @@ -0,0 +1,76 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include + +using namespace osl; + +class test_osl_writeFile : public CppUnit::TestFixture +{ +public: + void wrt_file() + { + FileBase::RC err; + + //create a tempfile + OUString aTmpFile; + err = FileBase::createTempFile(nullptr, nullptr, &aTmpFile); + CPPUNIT_ASSERT_EQUAL_MESSAGE("temp File creation failed", osl::FileBase::E_None, err); + + //now attempt to open with Create flag an existing file, should get E_EXIST + File tmp_file(aTmpFile); + err = tmp_file.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Create); + + OString sErrorMsg = "Expected that '" + + OUStringToOString(aTmpFile, RTL_TEXTENCODING_ASCII_US) + + "' would exist!"; + CPPUNIT_ASSERT_EQUAL_MESSAGE(sErrorMsg.getStr(), FileBase::E_EXIST, err); + + char buffer[1]; + sal_uInt64 written = 0; + err = tmp_file.write(static_cast(buffer), sizeof(buffer), written); + CPPUNIT_ASSERT_MESSAGE("write on unconnected file should fail", + err != osl::FileBase::E_None); + CPPUNIT_ASSERT_EQUAL_MESSAGE("write on unconnected file should fail", + sal_uInt64(0), written); + + err = tmp_file.sync(); + CPPUNIT_ASSERT_MESSAGE("sync on unconnected file should fail", err != FileBase::E_None); + err = tmp_file.close(); + CPPUNIT_ASSERT_MESSAGE("close on unconnected file should fail", err != FileBase::E_None); + + err = ::osl::File::remove(aTmpFile); + CPPUNIT_ASSERT_EQUAL_MESSAGE("temp file should have existed", FileBase::E_None, err); + } + + CPPUNIT_TEST_SUITE(test_osl_writeFile); + CPPUNIT_TEST(wrt_file); + CPPUNIT_TEST_SUITE_END(); +}; + +// register test suites +CPPUNIT_TEST_SUITE_REGISTRATION(test_osl_writeFile); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx new file mode 100644 index 000000000..4fd5d6b16 --- /dev/null +++ b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx @@ -0,0 +1,243 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include + +#include + +#if defined(_WIN32) +#define MY_PATH_IN "/c:/foo/bar" +#define MY_PATH_OUT "c:\\foo\\bar" +#define MY_PATH_OUT_CONT MY_PATH_OUT "\\" +#define MY_PATH_OUT_REL "foo\\bar" +#else +#define MY_PATH_IN "/foo/bar" +#define MY_PATH_OUT MY_PATH_IN +#define MY_PATH_OUT_CONT MY_PATH_OUT "/" +#define MY_PATH_OUT_REL "foo/bar" +#endif + +namespace { + +class Test: public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testBadScheme); + CPPUNIT_TEST(testNoScheme); + CPPUNIT_TEST(testBadAuthority); + CPPUNIT_TEST(testLocalhost1Authority); + CPPUNIT_TEST(testLocalhost2Authority); + CPPUNIT_TEST(testLocalhost3Authority); + CPPUNIT_TEST(testNoAuthority); + CPPUNIT_TEST(testEmptyPath); + CPPUNIT_TEST(testHomeAbbreviation); + CPPUNIT_TEST(testOtherHomeAbbreviation); + CPPUNIT_TEST(testRelative); + CPPUNIT_TEST(testEscape); + CPPUNIT_TEST(testBadEscape2f); + CPPUNIT_TEST(testBadEscape2F); + CPPUNIT_TEST(testBad0); + CPPUNIT_TEST(testBadEscape0); + CPPUNIT_TEST(testBadQuery); + CPPUNIT_TEST(testBadFragment); + CPPUNIT_TEST_SUITE_END(); + + void testBadScheme(); + void testNoScheme(); + void testBadAuthority(); + void testLocalhost1Authority(); + void testLocalhost2Authority(); + void testLocalhost3Authority(); + void testNoAuthority(); + void testEmptyPath(); + void testHomeAbbreviation(); + void testOtherHomeAbbreviation(); + void testRelative(); + void testEscape(); + void testBadEscape2f(); + void testBadEscape2F(); + void testBad0(); + void testBadEscape0(); + void testBadQuery(); + void testBadFragment(); +}; + +void Test::testBadScheme() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("foo:bar", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testNoScheme() { +#if !defined(_WIN32) //TODO + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("//" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +#endif +} + +void Test::testBadAuthority() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://baz" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +#endif +} + +void Test::testLocalhost1Authority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://localhost" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testLocalhost2Authority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://LOCALHOST" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testLocalhost3Authority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://127.0.0.1" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testNoAuthority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("file:" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testEmptyPath() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("file://", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString("/"), p); +#endif +} + +void Test::testHomeAbbreviation() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("file:///~", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + // could theoretically fail due to osl::Security::getHomeDir problem + e = osl::FileBase::getSystemPathFromFileURL("file:///~/foo%2525/bar", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + // could theoretically fail due to osl::Security::getHomeDir problem + CPPUNIT_ASSERT(p.endsWith("/foo%25/bar")); +#endif +} + +void Test::testOtherHomeAbbreviation() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file:///~baz" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); // not supported for now + CPPUNIT_ASSERT_EQUAL(OUString(), p); +#endif +} + +void Test::testRelative() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("foo/bar", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT(p.endsWith(MY_PATH_OUT_REL)); +} + +void Test::testEscape() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%61z", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT_CONT "baz"), p); +} + +void Test::testBadEscape2f() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%2fz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadEscape2F() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%2Fz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBad0() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + OUString(RTL_CONSTASCII_USTRINGPARAM("file://" MY_PATH_IN "/b\x00z")), + p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadEscape0() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%00z", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadQuery() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "?baz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadFragment() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "#baz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/module/osl_Module.cxx b/sal/qa/osl/module/osl_Module.cxx new file mode 100644 index 000000000..f440a7151 --- /dev/null +++ b/sal/qa/osl/module/osl_Module.cxx @@ -0,0 +1,376 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +// include files + +#include "osl_Module_Const.h" + +using namespace osl; + +/** get dll file URL. +*/ +static OUString getDllURL() +{ +#if defined(_WIN32) // lib in Unix and lib in Windows are not same in file name. + OUString libPath( "test_Module_DLL.dll" ); +#else + OUString libPath( "libtest_Module_DLL.so" ); +#endif + + OUString dirPath, dllPath; + osl::Module::getUrlFromAddress( + reinterpret_cast(&getDllURL), dirPath); + dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') + 1); + osl::FileBase::getAbsoluteFileURL( dirPath, libPath, dllPath ); + + return dllPath; +} + +namespace osl_Module +{ + namespace { + + /** class and member function that is available for module test : + */ + + class testClass + { + public: + static void myFunc() + { + printf("#Sun Microsystem\n"); + }; + }; + + } + + /** testing the methods: + Module(); + Module( const OUString& strModuleName, sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT); + */ + class ctors : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void ctors_none( ) + { + ::osl::Module aMod; + bRes = aMod.is(); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor without parameter.", + !bRes ); + } + + void ctors_name_mode( ) + { + OUString aFileURL; + bRes = osl::Module::getUrlFromAddress( + reinterpret_cast( + &osl_Module::testClass::myFunc), + aFileURL); + + if ( !bRes ) + { + CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false ); + } + + ::osl::Module aMod( aFileURL ); + bRes = aMod.is( ); + aMod.unload( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with load action.", + bRes ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_none ); + CPPUNIT_TEST( ctors_name_mode ); + CPPUNIT_TEST_SUITE_END( ); + }; // class ctors + + /** testing the methods: + static sal_Bool getUrlFromAddress(void * addr, OUString & libraryUrl) + */ + class getUrlFromAddress : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getUrlFromAddress_001( ) + { + OUString aFileURL; + bRes = osl::Module::getUrlFromAddress( + reinterpret_cast( + &osl_Module::testClass::myFunc), + aFileURL); + if ( !bRes ) + { + CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false ); + } + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.", + 0 < aFileURL.lastIndexOf('/') ); + } + + void getUrlFromAddress_002( ) + { +#if !defined( MACOSX ) + // TODO: Find out why this fails on macOS + ::osl::Module aMod( getDllURL( ) ); + FuncPtr pFunc = reinterpret_cast(aMod.getSymbol( "firstfunc" )); + + OUString aFileURL; + bRes = osl::Module::getUrlFromAddress( + reinterpret_cast(pFunc), aFileURL); + if ( !bRes ) + { + CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false ); + } + aMod.unload( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.", + 0 < aFileURL.lastIndexOf('/') ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load an external library, get its function address and get its URL.", + aFileURL.equalsIgnoreAsciiCase( getDllURL( ) ) ); +#endif + } + + /* tester comments: another case is getFunctionSymbol_001*/ + + CPPUNIT_TEST_SUITE( getUrlFromAddress ); + CPPUNIT_TEST( getUrlFromAddress_001 ); + CPPUNIT_TEST( getUrlFromAddress_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getUrlFromAddress + + /** testing the method: + sal_Bool SAL_CALL load( const OUString& strModuleName, + sal_Int32 nRtldMode = SAL_LOADMODULE_DEFAULT) + */ + class load : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void load_001( ) + { + ::osl::Module aMod( getDllURL( ) ); + ::osl::Module aMod1; + + aMod1.load( getDllURL( ) ); + bRes = oslModule(aMod) == oslModule(aMod1); + aMod.unload( ); + aMod1.unload( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load function should do the same thing as constructor with library name.", + bRes ); + } + + CPPUNIT_TEST_SUITE( load ); + CPPUNIT_TEST( load_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class load + + /** testing the method: + void SAL_CALL unload() + */ + class unload : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void unload_001( ) + { + ::osl::Module aMod( getDllURL( ) ); + + aMod.unload( ); + bRes = oslModule(aMod) ==nullptr; + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: unload function should do the same thing as destructor.", + bRes ); + } + + CPPUNIT_TEST_SUITE( unload ); + CPPUNIT_TEST( unload_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class unload + + /** testing the methods: + sal_Bool SAL_CALL is() const + */ + class is : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void is_001( ) + { + OUString aFileURL; + bRes = osl::Module::getUrlFromAddress( + reinterpret_cast( + osl_Module::testClass::myFunc), + aFileURL); + if ( !bRes ) + { + CPPUNIT_ASSERT_MESSAGE("Cannot locate current module - using executable instead", false ); + } + + ::osl::Module aMod; + bRes = aMod.is( ); + aMod.load( aFileURL ); + bRes1 = aMod.is( ); + aMod.unload( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test if a module is a loaded module.", + !bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test if a module is a loaded module.", + bRes1 ); + } + CPPUNIT_TEST_SUITE( is ); + CPPUNIT_TEST( is_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class is + + /** testing the methods: + void* SAL_CALL getSymbol( const OUString& strSymbolName) + */ + class getSymbol : public CppUnit::TestFixture + { + public: + bool bRes; + + void getSymbol_001( ) + { +#if !defined( MACOSX ) + // TODO: Find out why this fails on macOS + ::osl::Module aMod( getDllURL( ) ); + FuncPtr pFunc = reinterpret_cast(aMod.getSymbol( "firstfunc" )); + bRes = false; + if ( pFunc ) + bRes = pFunc( bRes ); + aMod.unload(); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and call one function in it.", + bRes ); +#endif + } + + CPPUNIT_TEST_SUITE( getSymbol ); + CPPUNIT_TEST( getSymbol_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getSymbol + + /** testing the methods: + operator oslModule() const + */ + class optr_oslModule : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void optr_oslModule_001( ) + { +#if !defined( MACOSX ) + // TODO: Find out why this fails on macOS + ::osl::Module aMod; + bRes = ( static_cast(aMod) == nullptr ); + + aMod.load( getDllURL( ) ); + bRes1 = static_cast(aMod) != nullptr; + + aMod.unload( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: the m_Module of a Module instance will be NULL when is not loaded, it will not be NULL after loaded.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: the m_Module of a Module instance will be NULL when is not loaded, it will not be NULL after loaded.", + bRes1 ); +#endif + } + + void optr_oslModule_002( ) + { +#if !defined( MACOSX ) + // TODO: Find out why this fails on macOS + ::osl::Module aMod( getDllURL( ) ); + OUString funcName( "firstfunc" ); + + FuncPtr pFunc = reinterpret_cast(osl_getSymbol( static_cast(aMod), funcName.pData )); + bRes = false; + if ( pFunc ) + bRes = pFunc( bRes ); + + aMod.unload(); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: use m_Module to call osl_getSymbol() function.", + bRes ); +#endif + } + + CPPUNIT_TEST_SUITE( optr_oslModule ); + CPPUNIT_TEST( optr_oslModule_001 ); + CPPUNIT_TEST( optr_oslModule_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class optr_oslModule + + /** testing the methods: + oslGenericFunction SAL_CALL getFunctionSymbol( const OUString& ustrFunctionSymbolName ) + */ + class getFunctionSymbol : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getFunctionSymbol_001( ) + { +#if !defined( MACOSX ) + // TODO: Find out why this fails on macOS + ::osl::Module aMod( getDllURL( ) ); + oslGenericFunction oslFunc = aMod.getFunctionSymbol( "firstfunc" ); + OUString aLibraryURL; + bRes = ::osl::Module::getUrlFromAddress( oslFunc, aLibraryURL); + aMod.unload(); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and get its function addr and get its URL.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: load a dll and get its function addr and get its URL.", + aLibraryURL.equalsIgnoreAsciiCase( getDllURL() ) ); +#endif + } + + CPPUNIT_TEST_SUITE( getFunctionSymbol ); + CPPUNIT_TEST( getFunctionSymbol_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getFunctionSymbol + +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::ctors); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getUrlFromAddress); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::load); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::unload); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::is); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getSymbol); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::optr_oslModule); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Module::getFunctionSymbol); + +} // namespace osl_Module + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/module/osl_Module_Const.h b/sal/qa/osl/module/osl_Module_Const.h new file mode 100644 index 000000000..3434d439f --- /dev/null +++ b/sal/qa/osl/module/osl_Module_Const.h @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H +#define INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H + +#include +#include +#include +#include + +#include +#include +#include + +#if defined(UNX) // Unix +# include +#elif defined(_WIN32) // Windows +# include +#endif + +# define FILE_PREFIX "file:///" + +// function pointer type. + +typedef sal_Bool (* FuncPtr )( sal_Bool ); + +#endif // INCLUDED_SAL_QA_OSL_MODULE_OSL_MODULE_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/module/osl_Module_DLL.cxx b/sal/qa/osl/module/osl_Module_DLL.cxx new file mode 100644 index 000000000..59f30b137 --- /dev/null +++ b/sal/qa/osl/module/osl_Module_DLL.cxx @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "osl_Module_Const.h" + +#include +#include + +// This module contains no tests. It is loaded as a dynamic library by +// osl_Module. +// But we instantiate a test plugin to fake the build process. +CPPUNIT_PLUGIN_IMPLEMENT(); + +extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool firstfunc(sal_Bool) { return true; } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/mutex/osl_Mutex.cxx b/sal/qa/osl/mutex/osl_Mutex.cxx new file mode 100644 index 000000000..3424bca07 --- /dev/null +++ b/sal/qa/osl/mutex/osl_Mutex.cxx @@ -0,0 +1,905 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +// include files + +#include +#include +#include +#include +#include +#include "osl_Mutex_Const.h" + +using namespace osl; + +/** pause nSec seconds helper function. +*/ +namespace ThreadHelper +{ + static void thread_sleep_tenth_sec(sal_uInt32 _nTenthSec) + { + osl::Thread::wait(std::chrono::milliseconds(_nTenthSec * 100)); + } + static void thread_sleep( sal_uInt32 _nSec ) + { + /// print statement in thread process must use fflush() to force display. + // t_print("# wait %d seconds. ", _nSec ); + fflush(stdout); + + thread_sleep_tenth_sec( _nSec * 10 ); + // printf("# done\n" ); + } +} + +// Beginning of the test cases for osl_Mutex class + +namespace { + +/** mutually exclusive data +*/ +struct resource { + sal_Int32 data1; + sal_Int32 data2; + Mutex lock; +}; + +/** IncreaseThread provide data. +*/ +class IncreaseThread : public Thread +{ +public: + explicit IncreaseThread( struct resource *pData ): pResource( pData ) { } + + virtual ~IncreaseThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#IncreaseThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + struct resource *pResource; + + void SAL_CALL run( ) override + { + pResource->lock.acquire( ); + for( sal_Int8 i = 0; i < 3; i++ ) + { + pResource->data1++; + yield( ); //yield() give CPU time to other thread, other thread if not block, they will change the data; + } + if ( pResource->data2 == 0 ) + pResource->data2 = ( pResource->data1 > 0 ? pResource->data1 : 0 - pResource->data1 ); + pResource->lock.release(); + } +}; + +/** DecreaseThread consume data. +*/ +class DecreaseThread : public Thread +{ +public: + explicit DecreaseThread( struct resource *pData ): pResource( pData ) { } + + virtual ~DecreaseThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#DecreaseThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + struct resource *pResource; + + void SAL_CALL run( ) override + { + pResource->lock.acquire( ); + for( sal_Int8 i = 0; i < 3; i++ ) + { + pResource->data1--; + yield( ); //yield() give CPU time to other thread, other thread if not block, they will change the data; + } + if ( pResource->data2 == 0 ) + pResource->data2 = ( pResource->data1 > 0 ? pResource->data1 : 0 - pResource->data1 ); + pResource->lock.release(); + } +}; + +/** chain structure used in Threads as critical resource +*/ +struct chain { + sal_Int32 buffer[ BUFFER_SIZE ]; + Mutex lock; + sal_Int8 pos; +}; + +/** PutThread write to the chain structure in a mutex manner. +*/ +class PutThread : public Thread +{ +public: + //get the struct pointer to write data to buffer + explicit PutThread( struct chain* pData ): pChain( pData ) { } + + virtual ~PutThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#PutThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + struct chain* pChain; + + void SAL_CALL run( ) override + { + //block here if the mutex has been acquired + pChain->lock.acquire( ); + + //current position in buffer to write + sal_Int8 nPos = pChain->pos; + oslThreadIdentifier oId = getIdentifier( ); + //write data + sal_Int8 i; + for ( i = 0; i < 5; i++ ) + { + pChain->buffer[ nPos + i ] = oId; + yield( ); + } + //revise the position + pChain->pos = nPos + i; + + //finish writing, release the mutex + pChain->lock.release(); + } +}; + +/** thread for testing Mutex acquire. + */ +class HoldThread : public Thread +{ +public: + //get the Mutex pointer to operate + explicit HoldThread( Mutex* pMutex ): pMyMutex( pMutex ) { } + + virtual ~HoldThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#HoldThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + Mutex* pMyMutex; + + void SAL_CALL run() override + { + // block here if the mutex has been acquired + pMyMutex->acquire( ); + printf("# Mutex acquired. \n" ); + pMyMutex->release( ); + } +}; + +class WaitThread : public Thread +{ +public: + //get the Mutex pointer to operate + explicit WaitThread( Mutex* pMutex ): pMyMutex( pMutex ) { } + + virtual ~WaitThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#WaitThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + Mutex* pMyMutex; + + void SAL_CALL run( ) override + { + // block here if the mutex has been acquired + pMyMutex->acquire( ); + ThreadHelper::thread_sleep_tenth_sec( 2 ); + pMyMutex->release( ); + } +}; + +/** thread for testing getGlobalMutex. + */ +class GlobalMutexThread : public Thread +{ +public: + //get the Mutex pointer to operate + GlobalMutexThread( ){ } + + virtual ~GlobalMutexThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#GlobalMutexThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + void SAL_CALL run( ) override + { + // block here if the mutex has been acquired + Mutex* pGlobalMutex; + pGlobalMutex = Mutex::getGlobalMutex( ); + pGlobalMutex->acquire( ); + printf("# Global Mutex acquired. \n" ); + pGlobalMutex->release( ); + } +}; + +} + +namespace osl_Mutex +{ + + /** Test of the osl::Mutex::constructor + */ + class ctor : public CppUnit::TestFixture + { + public: + // initialise your test code values here. + struct chain m_Data; + struct resource m_Res; + + void setUp( ) override + { + for ( sal_Int8 i=0; i < BUFFER_SIZE; i++ ) + m_Data.buffer[i] = 0; + m_Data.pos = 0; + + m_Res.data1 = 0; + m_Res.data2 = 0; + } + + /** Create two threads to write data to the same buffer, use Mutex to assure + during one thread write data five times, the other thread should not begin writing. + the two threads wrote two different data: their thread ID, so we can check the data + in buffer to know the order of the two threads writing + */ + void ctor_001() + { + PutThread myThread1( &m_Data ); + PutThread myThread2( &m_Data ); + + myThread1.create( ); + myThread2.create( ); + + //wait until the two threads terminate + myThread1.join( ); + myThread2.join( ); + + bool bRes = false; + + // every 5 data should the same + // LLA: this is not a good check, it's too fix + if (m_Data.buffer[0] == m_Data.buffer[1] && + m_Data.buffer[1] == m_Data.buffer[2] && + m_Data.buffer[2] == m_Data.buffer[3] && + m_Data.buffer[3] == m_Data.buffer[4] && + m_Data.buffer[5] == m_Data.buffer[6] && + m_Data.buffer[6] == m_Data.buffer[7] && + m_Data.buffer[7] == m_Data.buffer[8] && + m_Data.buffer[8] == m_Data.buffer[9]) + bRes = true; + + /*for (sal_Int8 i=0; iacquire(); + + GlobalMutexThread myThread; + myThread.create(); + + ThreadHelper::thread_sleep_tenth_sec(1); + bool bRes1 = myThread.isRunning(); + + pGlobalMutex->release(); + ThreadHelper::thread_sleep_tenth_sec(1); + // after release mutex, myThread stops blocking and will terminate immediately + bool bRes2 = myThread.isRunning(); + + CPPUNIT_ASSERT_MESSAGE("Global Mutex works", bRes1); + CPPUNIT_ASSERT_MESSAGE("Global Mutex works", !bRes2); + } + + void getGlobalMutex_002( ) + { + bool bRes; + + Mutex *pGlobalMutex; + pGlobalMutex = Mutex::getGlobalMutex( ); + pGlobalMutex->acquire( ); + { + Mutex *pGlobalMutex1; + pGlobalMutex1 = Mutex::getGlobalMutex( ); + bRes = pGlobalMutex1->release( ); + } + + CPPUNIT_ASSERT_MESSAGE( "Global Mutex works: if the code between {} get the different mutex as the former one, it will return false when release.", + bRes ); + } + + CPPUNIT_TEST_SUITE(getGlobalMutex); + CPPUNIT_TEST(getGlobalMutex_001); + CPPUNIT_TEST(getGlobalMutex_002); + CPPUNIT_TEST_SUITE_END(); + }; // class getGlobalMutex + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::ctor, "osl_Mutex"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::acquire, "osl_Mutex"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::tryToAcquire, "osl_Mutex"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::release, "osl_Mutex"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Mutex::getGlobalMutex, "osl_Mutex"); +} // namespace osl_Mutex + +// Beginning of the test cases for osl_Guard class + +namespace { + +class GuardThread : public Thread +{ +public: + //get the Mutex pointer to operate + explicit GuardThread( Mutex* pMutex ): pMyMutex( pMutex ) { } + + virtual ~GuardThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#GuardThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + Mutex* pMyMutex; + + void SAL_CALL run( ) override + { + // block here if the mutex has been acquired + MutexGuard aGuard( pMyMutex ); + ThreadHelper::thread_sleep_tenth_sec( 2 ); + } +}; + +} + +namespace osl_Guard +{ + class ctor : public CppUnit::TestFixture + { + public: + // insert your test code here. + void ctor_001() + { + Mutex aMutex; + GuardThread myThread(&aMutex); + myThread.create(); + + ThreadHelper::thread_sleep_tenth_sec(1); + bool bRes = aMutex.tryToAcquire(); + // after 1 second, the mutex has been guarded, and the child thread should be running + bool bRes1 = myThread.isRunning(); + + myThread.join(); + bool bRes2 = aMutex.tryToAcquire(); + + CPPUNIT_ASSERT_MESSAGE("GuardThread constructor", + !bRes); + CPPUNIT_ASSERT_MESSAGE("GuardThread constructor", + bRes1); + CPPUNIT_ASSERT_MESSAGE("GuardThread constructor", + bRes2); + } + + void ctor_002( ) + { + Mutex aMutex; + + /// use reference constructor here + MutexGuard myGuard( aMutex ); + + /// the GuardThread will block here when it is initialised. + GuardThread myThread( &aMutex ); + myThread.create( ); + + /// is it still blocking? + ThreadHelper::thread_sleep_tenth_sec( 2 ); + bool bRes = myThread.isRunning( ); + + /// oh, release him. + aMutex.release( ); + myThread.join( ); + + CPPUNIT_ASSERT_MESSAGE("GuardThread constructor: reference initialization, acquire the mutex before running the thread, then check if it is blocking.", + bRes); + } + + CPPUNIT_TEST_SUITE(ctor); + CPPUNIT_TEST(ctor_001); + CPPUNIT_TEST(ctor_002); + CPPUNIT_TEST_SUITE_END(); + }; // class ctor + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Guard::ctor, "osl_Guard"); +} // namespace osl_Guard + +// Beginning of the test cases for osl_ClearableGuard class + +namespace { + +/** Thread for test ClearableGuard + */ +class ClearGuardThread : public Thread +{ +public: + //get the Mutex pointer to operate + explicit ClearGuardThread( Mutex* pMutex ): pMyMutex( pMutex ) {} + + virtual ~ClearGuardThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#ClearGuardThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + Mutex* pMyMutex; + + void SAL_CALL run( ) override + { + // acquire the mutex + // printf("# ClearGuardThread" ); + ClearableMutexGuard aGuard( pMyMutex ); + ThreadHelper::thread_sleep( 5 ); + + // release the mutex + aGuard.clear( ); + ThreadHelper::thread_sleep( 2 ); + } +}; + +} + +namespace osl_ClearableGuard +{ + + class ctor : public CppUnit::TestFixture + { + public: + void ctor_001() + { + Mutex aMutex; + + /// now, the aMutex has been guarded. + ClearableMutexGuard myMutexGuard( &aMutex ); + + /// it will return sal_False if the aMutex has not been Guarded. + bool bRes = aMutex.release( ); + + CPPUNIT_ASSERT_MESSAGE("ClearableMutexGuard constructor, test the acquire operation when initialized.", + bRes); + } + + void ctor_002( ) + { + Mutex aMutex; + + /// now, the aMutex has been guarded, this time, we use reference constructor. + ClearableMutexGuard myMutexGuard( aMutex ); + + /// it will return sal_False if the aMutex has not been Guarded. + bool bRes = aMutex.release( ); + + CPPUNIT_ASSERT_MESSAGE("ClearableMutexGuard constructor, test the acquire operation when initialized, we use reference constructor this time.", + bRes); + } + + CPPUNIT_TEST_SUITE(ctor); + CPPUNIT_TEST(ctor_001); + CPPUNIT_TEST(ctor_002); + CPPUNIT_TEST_SUITE_END(); + }; // class ctor + + class clear : public CppUnit::TestFixture + { + public: + void clear_001() + { + Mutex aMutex; + ClearGuardThread myThread(&aMutex); + myThread.create(); + + TimeValue aTimeVal_befor; + osl_getSystemTime( &aTimeVal_befor ); + // wait 1 second to assure the child thread has begun + ThreadHelper::thread_sleep(1); + + while (true) + { + if (aMutex.tryToAcquire()) + { + break; + } + ThreadHelper::thread_sleep(1); + } + TimeValue aTimeVal_after; + osl_getSystemTime( &aTimeVal_after ); + sal_Int32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds; + printf("nSec is %" SAL_PRIdINT32 "\n", nSec); + + myThread.join(); + + CPPUNIT_ASSERT_MESSAGE("ClearableGuard method: clear", + nSec < 7); + CPPUNIT_ASSERT_MESSAGE("ClearableGuard method: clear", + nSec > 1); + } + + void clear_002( ) + { + Mutex aMutex; + + /// now, the aMutex has been guarded. + ClearableMutexGuard myMutexGuard( &aMutex ); + + /// launch the HoldThread, it will be blocked here. + HoldThread myThread( &aMutex ); + myThread.create( ); + + /// is it blocking? + ThreadHelper::thread_sleep_tenth_sec( 4 ); + bool bRes = myThread.isRunning( ); + + /// use clear to release. + myMutexGuard.clear( ); + myThread.join( ); + bool bRes1 = myThread.isRunning( ); + + CPPUNIT_ASSERT_MESSAGE( "ClearableGuard method: clear, control the HoldThread's running status!", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "ClearableGuard method: clear, control the HoldThread's running status!", + !bRes1 ); + } + + CPPUNIT_TEST_SUITE( clear ); + CPPUNIT_TEST( clear_001 ); + CPPUNIT_TEST( clear_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class clear + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_ClearableGuard::ctor, "osl_ClearableGuard" ); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_ClearableGuard::clear, "osl_ClearableGuard" ); +} // namespace osl_ClearableGuard + +// Beginning of the test cases for osl_ResettableGuard class + +namespace { + +/** Thread for test ResettableGuard + */ +class ResetGuardThread : public Thread +{ +public: + //get the Mutex pointer to operate + explicit ResetGuardThread( Mutex* pMutex ): pMyMutex( pMutex ) {} + + virtual ~ResetGuardThread( ) override + { + CPPUNIT_ASSERT_MESSAGE( "#ResetGuardThread does not shutdown properly.\n", !isRunning( ) ); + } +protected: + Mutex* pMyMutex; + + void SAL_CALL run( ) override + { + // acquire the mutex + printf("# ResettableGuard\n" ); + ResettableMutexGuard aGuard( pMyMutex ); + // release the mutex + aGuard.clear( ); + ThreadHelper::thread_sleep_tenth_sec( 2 ); + } +}; + +} + +namespace osl_ResettableGuard +{ + class ctor : public CppUnit::TestFixture + { + public: + void ctor_001() + { + Mutex aMutex; + + /// now, the aMutex has been guarded. + ResettableMutexGuard myMutexGuard( &aMutex ); + + /// it will return sal_False if the aMutex has not been Guarded. + bool bRes = aMutex.release( ); + + CPPUNIT_ASSERT_MESSAGE("ResettableMutexGuard constructor, test the acquire operation when initialized.", + bRes); + + aMutex.acquire(); + } + + void ctor_002( ) + { + Mutex aMutex; + + /// now, the aMutex has been guarded, this time, we use reference constructor. + ResettableMutexGuard myMutexGuard( aMutex ); + + /// it will return sal_False if the aMutex has not been Guarded. + bool bRes = aMutex.release( ); + + CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard constructor, test the acquire operation when initialized, we use reference constructor this time.", + bRes); + + aMutex.acquire(); + } + + CPPUNIT_TEST_SUITE(ctor); + CPPUNIT_TEST(ctor_001); + CPPUNIT_TEST(ctor_002); + CPPUNIT_TEST_SUITE_END(); + }; // class ctor + + class reset : public CppUnit::TestFixture + { + public: + void reset_001( ) + { + Mutex aMutex; + ResetGuardThread myThread( &aMutex ); + ResettableMutexGuard myMutexGuard( aMutex ); + myThread.create( ); + + /// is it running? and clear done? + bool bRes = myThread.isRunning( ); + myMutexGuard.clear( ); + ThreadHelper::thread_sleep_tenth_sec( 1 ); + + /// if reset is not success, the release will return sal_False + myMutexGuard.reset( ); + bool bRes1 = aMutex.release( ); + myThread.join( ); + + CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset", + bRes1 ); + + aMutex.acquire(); + } + +#ifdef LINUX + void reset_002( ) + { + Mutex aMutex; + ResettableMutexGuard myMutexGuard( &aMutex ); + + /// shouldn't release after clear; + myMutexGuard.clear( ); + aMutex.acquire(); + bool bRes = aMutex.release( ); + + /// can release after reset. + myMutexGuard.reset( ); + bool bRes1 = aMutex.release( ); + + CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset, release after clear and reset, on Solaris, the mutex can be release without acquire, so it can not passed on (SOLARIS), but not the reason for reset_002", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "ResettableMutexGuard method: reset, release after clear and reset, on Solaris, the mutex can be release without acquire, so it can not passed on (SOLARIS), but not the reason for reset_002", + bRes1 ); + + aMutex.acquire(); + } +#endif + + CPPUNIT_TEST_SUITE(reset); + CPPUNIT_TEST(reset_001); +#ifdef LINUX + CPPUNIT_TEST(reset_002); +#endif + CPPUNIT_TEST_SUITE_END(); + }; // class reset + +CPPUNIT_TEST_SUITE_REGISTRATION(osl_ResettableGuard::ctor); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_ResettableGuard::reset); +} // namespace osl_ResettableGuard + +// The following sets variables for GNU EMACS +// Local Variables: +// tab-width:4 +// End: + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/mutex/osl_Mutex_Const.h b/sal/qa/osl/mutex/osl_Mutex_Const.h new file mode 100644 index 000000000..a5ac53ed4 --- /dev/null +++ b/sal/qa/osl/mutex/osl_Mutex_Const.h @@ -0,0 +1,37 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H +#define INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H + +#include +#include +#include +#include +#include + +#ifdef UNX +#include +#endif + +#define BUFFER_SIZE 16 + +#endif // INCLUDED_SAL_QA_OSL_MUTEX_OSL_MUTEX_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/pipe/osl_Pipe.cxx b/sal/qa/osl/pipe/osl_Pipe.cxx new file mode 100644 index 000000000..eef77e998 --- /dev/null +++ b/sal/qa/osl/pipe/osl_Pipe.cxx @@ -0,0 +1,894 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +// include files + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#ifdef UNX +#include +#endif +#include + +using namespace osl; + +/** print last error of pipe system. + */ +static void printPipeError( ::osl::Pipe const & aPipe ) +{ + oslPipeError nError = aPipe.getError( ); + printf("#printPipeError# " ); + switch ( nError ) { + case osl_Pipe_E_None: + printf("Success!\n" ); + break; + case osl_Pipe_E_NotFound: + printf("The returned error is: Not found!\n" ); + break; + case osl_Pipe_E_AlreadyExists: + printf("The returned error is: Already exist!\n" ); + break; + case osl_Pipe_E_NoProtocol: + printf("The returned error is: No protocol!\n" ); + break; + case osl_Pipe_E_NetworkReset: + printf("The returned error is: Network reset!\n" ); + break; + case osl_Pipe_E_ConnectionAbort: + printf("The returned error is: Connection aborted!\n" ); + break; + case osl_Pipe_E_ConnectionReset: + printf("The returned error is: Connection reset!\n" ); + break; + case osl_Pipe_E_NoBufferSpace: + printf("The returned error is: No buffer space!\n" ); + break; + case osl_Pipe_E_TimedOut: + printf("The returned error is: Timeout!\n" ); + break; + case osl_Pipe_E_ConnectionRefused: + printf("The returned error is: Connection refused!\n" ); + break; + case osl_Pipe_E_invalidError: + printf("The returned error is: Invalid error!\n" ); + break; + default: + printf("The returned error is: Number %d, Unknown Error\n", nError ); + break; + } +} + +// pipe name and transfer contents + +constexpr OUStringLiteral aTestPipeName(u"testpipe2"); +constexpr OUStringLiteral aTestPipe1(u"testpipe1"); + +constexpr OStringLiteral m_pTestString1("Sun Microsystems"); +constexpr OStringLiteral m_pTestString2("test pipe PASS/OK"); + +// test code start here + +namespace osl_Pipe +{ + +// most return value -1 denote a fail of operation. + +#define OSL_PIPE_FAIL -1 + + /** testing the methods: + inline Pipe(); + inline Pipe(const OUString& strName, oslPipeOptions Options); + inline Pipe(const OUString& strName, oslPipeOptions Options,const Security & rSecurity); + inline Pipe(const Pipe& pipe); + inline Pipe(oslPipe pipe, __sal_NoAcquire noacquire ); + inline Pipe(oslPipe Pipe); + */ + class ctors : public CppUnit::TestFixture + { + public: + bool bRes, bRes1, bRes2; + + void ctors_none( ) + { + ::osl::Pipe aPipe; + bRes = aPipe.is( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, yet no case to test.", + !bRes ); + } + + void ctors_name_option( ) + { + /// create a named pipe. + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + ::osl::Pipe aAssignPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); + + bRes = aPipe.is( ) && aAssignPipe.is( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name and option.", + bRes ); + } + + void ctors_name_option_security( ) + { + /// create a security pipe. + const ::osl::Security rSecurity; + ::osl::Pipe aSecurityPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity ); + + bRes = aSecurityPipe.is( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name, option and security, the test of security is not implemented yet.", + bRes ); + } + + void ctors_copy( ) + { + /// create a pipe. + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + /// create a pipe using copy constructor. + ::osl::Pipe aCopyPipe( aPipe ); + + bRes = aCopyPipe.is( ) && aCopyPipe == aPipe; + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test copy constructor.", + bRes ); + } + + /* Note: DO NOT DO THIS - I have very deliberately caused send to FAIL, *on purpose* as this is the + only sane way to test noacquire. This is a terrible misuse of no-acquire, but in this case is + needed only so we can test to make sure no-acquire is working! + */ + void ctors_no_acquire( ) + { + /// create a pipe. + OUString aPipeName(test::uniquePipeName(aTestPipeName)); + oslPipe handle(osl_createPipe(aPipeName.pData, osl_Pipe_CREATE, nullptr)); + /// constructs a pipe reference without acquiring the handle. + std::unique_ptr xNoAcquirePipe(new osl::Pipe(handle, SAL_NO_ACQUIRE)); + + StreamPipe aStreamPipe(handle); + xNoAcquirePipe.reset(); + int nRet = aStreamPipe.send("a", 1); + + if (nRet >= 0) + bRes = false; + else + bRes = true; + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no acquire of handle, deleted nonacquired pipe but could still send on original pipe!.", + bRes ); + } + + void ctors_acquire( ) + { + /// create a base pipe. + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + /// constructs two pipes, the second acquires the first pipe's handle. + ::osl::Pipe aAcquirePipe( aPipe.getHandle( ) ); + ::osl::Pipe aAcquirePipe1( nullptr ); + + bRes = aAcquirePipe.is(); + bRes1 = aAcquirePipe1.is(); + bRes2 = aPipe == aAcquirePipe; + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with acquire of handle, original pipe does not exist.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with acquire of handle, copied pipe does not exist", + !bRes1 ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test pipes should have same handle", bRes2); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_none ); + CPPUNIT_TEST( ctors_name_option ); + CPPUNIT_TEST( ctors_name_option_security ); + CPPUNIT_TEST( ctors_copy ); + CPPUNIT_TEST( ctors_no_acquire ); + CPPUNIT_TEST( ctors_acquire ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + inline sal_Bool SAL_CALL is() const; + */ + class is : public CppUnit::TestFixture + { + public: + void is_001( ) + { + ::osl::Pipe aPipe; + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), check if the pipe is a valid one.", !aPipe.is( ) ); + } + + void is_002( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), a normal pipe creation.", aPipe.is( ) ); + } + + void is_003( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), an invalid case.", !aPipe.is( ) ); + } + + void is_004( ) + { + ::osl::Pipe aPipe( nullptr ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test is(), an invalid constructor.", !aPipe.is( ) ); + } + + CPPUNIT_TEST_SUITE( is ); + CPPUNIT_TEST( is_001 ); + CPPUNIT_TEST( is_002 ); + CPPUNIT_TEST( is_003 ); + CPPUNIT_TEST( is_004 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the methods: + inline sal_Bool create( const OUString & strName, + oslPipeOptions Options, const Security &rSec ); + nline sal_Bool create( const OUString & strName, + oslPipeOptions Options = osl_Pipe_OPEN ); + */ + class create : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + /** tester comment: + + security create only be tested creation, security section is + untested yet. + */ + + void create_named_security_001( ) + { + const Security rSec; + ::osl::Pipe aPipe; + bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec ); + bRes1 = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.", + bRes); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.", + !bRes1); + } + + void create_named_security_002( ) + { + const Security rSec; + ::osl::Pipe aPipe, aPipe1; + bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec ); + bRes1 = aPipe1.create( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN, rSec ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.", + bRes); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.", + bRes1); + } + + void create_named_001( ) + { + ::osl::Pipe aPipe; + bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + bRes1 = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.", + bRes); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation.", + !bRes1); + } + + void create_named_002( ) + { + ::osl::Pipe aPipe, aPipe1; + bRes = aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + bRes1 = aPipe1.create( test::uniquePipeName(aTestPipeName) ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.", + bRes); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test creation and open.", + bRes1); + } + + void create_named_003( ) + { + ::osl::Pipe aPipe; + bRes = aPipe.create( test::uniquePipeName(aTestPipeName) ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test default option is open.", + !bRes ); + } + + CPPUNIT_TEST_SUITE( create ); + CPPUNIT_TEST( create_named_security_001 ); + CPPUNIT_TEST( create_named_security_002 ); + CPPUNIT_TEST( create_named_001 ); + CPPUNIT_TEST( create_named_002 ); + CPPUNIT_TEST( create_named_003 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + inline void SAL_CALL clear(); + */ + class clear : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void clear_001( ) + { + ::osl::Pipe aPipe; + aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + aPipe.clear( ); + bRes = aPipe.is( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test clear.", + !bRes ); + } + + CPPUNIT_TEST_SUITE( clear ); + CPPUNIT_TEST( clear_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the methods: + inline Pipe& SAL_CALL operator= (const Pipe& pipe); + inline Pipe& SAL_CALL operator= (const oslPipe pipe ); + */ + class assign : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void assign_ref( ) + { + ::osl::Pipe aPipe, aPipe1; + aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + aPipe1 = aPipe; + bRes = aPipe1.is( ); + bRes1 = aPipe == aPipe1; + aPipe.close( ); + aPipe1.close( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with reference.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with reference.", + bRes1 ); + } + + void assign_handle( ) + { + ::osl::Pipe aPipe, aPipe1; + aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + aPipe1 = aPipe.getHandle( ); + bRes = aPipe1.is( ); + bRes1 = aPipe == aPipe1; + aPipe.close( ); + aPipe1.close( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with handle.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test assign with handle.", + bRes1 ); + } + + CPPUNIT_TEST_SUITE( assign ); + CPPUNIT_TEST( assign_ref ); + CPPUNIT_TEST( assign_handle ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + inline sal_Bool SAL_CALL isValid() const; + isValid( ) has not been implemented under the following platforms, please refer to osl/pipe.hxx + */ + + /** testing the method: + inline sal_Bool SAL_CALL operator==( const Pipe& rPipe ) const; + */ + class isEqual : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void isEqual_001( ) + { + ::osl::Pipe aPipe; + aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + bRes = aPipe == aPipe; // NOLINT(misc-redundant-expression) + aPipe.close( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(), compare itself.", + bRes ); + } + + void isEqual_002( ) + { + ::osl::Pipe aPipe, aPipe1, aPipe2; + aPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + + aPipe1 = aPipe; + aPipe2.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + + bRes = aPipe == aPipe1; + bRes1 = aPipe == aPipe2; + aPipe.close( ); + aPipe1.close( ); + aPipe2.close( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(),create one copy instance, and compare.", + bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test isEqual(),create one copy instance, and compare.", + !bRes1 ); + } + + CPPUNIT_TEST_SUITE( isEqual ); + CPPUNIT_TEST( isEqual_001 ); + CPPUNIT_TEST( isEqual_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + inline void SAL_CALL close(); + */ + class close : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void close_001( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipe1), osl_Pipe_CREATE ); + aPipe.close( ); + bRes = aPipe.is( ); + + aPipe.clear( ); + bRes1 = aPipe.is( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: difference between close and clear.", + bRes); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: difference between close and clear.", + !bRes1); + } + + void close_002( ) + { + ::osl::StreamPipe aPipe( test::uniquePipeName(aTestPipe1), osl_Pipe_CREATE ); + aPipe.close( ); + int nRet = aPipe.send( m_pTestString1.getStr(), 3 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: use after close.", + OSL_PIPE_FAIL, nRet ); + } + + CPPUNIT_TEST_SUITE( close ); + CPPUNIT_TEST( close_001 ); + CPPUNIT_TEST( close_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + inline oslPipeError SAL_CALL accept(StreamPipe& Connection); + please refer to StreamPipe::recv + */ + + /** testing the method: + inline oslPipeError SAL_CALL getError() const; + */ + class getError : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getError_001( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); + oslPipeError nError = aPipe.getError( ); + printPipeError( aPipe ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: open a non-exist pipe.", + nError != osl_Pipe_E_None ); + } + + void getError_002( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + ::osl::Pipe aPipe1( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + oslPipeError nError = aPipe.getError( ); + printPipeError( aPipe ); + aPipe.clear( ); + aPipe1.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: create an already exist pipe.", + nError != osl_Pipe_E_None ); + } + + CPPUNIT_TEST_SUITE( getError ); + CPPUNIT_TEST( getError_001 ); + CPPUNIT_TEST( getError_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the method: + inline oslPipe SAL_CALL getHandle() const; + */ + class getHandle : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getHandle_equalityOperatorAgainstSelf( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); + bRes = aPipe == aPipe.getHandle( ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: one pipe should equal to its handle.", + bRes ); + } + + void getHandle_equalityOperatorAgainstDerivedPipe( ) + { + ::osl::Pipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + ::osl::Pipe aPipe1( aPipe.getHandle( ) ); + bRes = aPipe == aPipe1; + aPipe.clear( ); + aPipe1.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: one pipe derived from another pipe's handle.", + bRes ); + } + + CPPUNIT_TEST_SUITE( getHandle ); + CPPUNIT_TEST( getHandle_equalityOperatorAgainstSelf ); + CPPUNIT_TEST( getHandle_equalityOperatorAgainstDerivedPipe ); + CPPUNIT_TEST_SUITE_END( ); + }; + + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::ctors); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::is); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::create); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::clear); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::assign); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::isEqual); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::close); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::getError); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_Pipe::getHandle); + +} // namespace osl_Pipe + +namespace osl_StreamPipe +{ + + /** testing the methods: + inline StreamPipe(); + inline StreamPipe(oslPipe Pipe); + inline StreamPipe(const StreamPipe& Pipe); + inline StreamPipe(const OUString& strName, oslPipeOptions Options = osl_Pipe_OPEN); + inline StreamPipe(const OUString& strName, oslPipeOptions Options, const Security &rSec ); + inline StreamPipe( oslPipe pipe, __sal_NoAcquire noacquire ); + */ + class ctors : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void ctors_none( ) + { + // create a pipe. + ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + // create an unattached pipe. + ::osl::StreamPipe aStreamPipe1; + bRes = aStreamPipe1.is( ); + + // assign it and check. + aStreamPipe1 = aStreamPipe; + bRes1 = aStreamPipe1.is( ); + aStreamPipe.clear( ); + aStreamPipe1.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, before and after assign.", + !bRes ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no parameter, before and after assign.", + bRes1 ); + } + + void ctors_handle( ) + { + // create a pipe. + ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + // create a pipe with last handle. + ::osl::StreamPipe aStreamPipe1( aStreamPipe.getHandle( ) ); + bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1; + aStreamPipe.clear( ); + aStreamPipe1.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with other's handle.", + bRes ); + } + + void ctors_copy( ) + { + // create a pipe. + ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + // create an unattached pipe. + ::osl::StreamPipe aStreamPipe1( aStreamPipe ); + bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1; + aStreamPipe.clear( ); + aStreamPipe1.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test copy constructor.", + bRes ); + } + + void ctors_name_option( ) + { + // create a pipe. + ::osl::StreamPipe aStreamPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + // create an unattached pipe. + ::osl::StreamPipe aStreamPipe1( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); + bRes = aStreamPipe1.is( ) && aStreamPipe.is( ); + aStreamPipe.clear( ); + aStreamPipe1.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name and option.", + bRes ); + } + + void ctors_name_option_security( ) + { + /// create a security pipe. + const ::osl::Security rSecurity; + ::osl::StreamPipe aSecurityPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity ); + + bRes = aSecurityPipe.is( ); + aSecurityPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with name, option and security, the test of security is not implemented yet.", + bRes ); + } + + /** tester comment: + + When test the following constructor, don't know how to test the + acquire and no acquire action. possible plans: + 1.release one handle and check the other( did not success since the + other still exist and valid. ) + 2. release one handle twice to see getLastError( )(the getLastError + always returns invalidError(LINUX)). + */ + + void ctors_no_acquire( ) + { + // create a pipe. + ::osl::StreamPipe aPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + osl_acquirePipe(aPipe.getHandle()); + // constructs a pipe reference without acquiring the handle. + ::osl::StreamPipe aNoAcquirePipe( aPipe.getHandle( ), SAL_NO_ACQUIRE ); + + bRes = aNoAcquirePipe.is( ); + aPipe.clear( ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: test constructor with no acquire of handle, only validation test, do not know how to test no acquire.", + bRes ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_none ); + CPPUNIT_TEST( ctors_handle ); + CPPUNIT_TEST( ctors_copy ); + CPPUNIT_TEST( ctors_name_option ); + CPPUNIT_TEST( ctors_name_option_security ); + CPPUNIT_TEST( ctors_no_acquire ); + CPPUNIT_TEST_SUITE_END( ); + }; + + /** testing the methods: + inline StreamPipe & SAL_CALL operator=(oslPipe Pipe); + inline StreamPipe& SAL_CALL operator=(const Pipe& pipe); + mindy: not implemented in osl/pipe.hxx, so remove the cases + */ + + /** wait _nSec seconds. + */ + static void thread_sleep( sal_uInt32 _nSec ) + { + /// print statement in thread process must use fflush() to force display. + fflush(stdout); + + osl::Thread::wait(std::chrono::seconds(_nSec)); + } + // test read/write & send/recv data to pipe + + namespace { + + class Pipe_DataSink_Thread : public Thread + { + public: + char buf[256]; + Pipe_DataSink_Thread( ) { } + + protected: + void SAL_CALL run( ) override + { + printf("open pipe\n"); + ::osl::StreamPipe aSenderPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_OPEN ); // test::uniquePipeName(aTestPipeName) is a string = "TestPipe" + if ( !aSenderPipe.is() ) + { + printf("pipe open failed! \n"); + } + else + { + printf("read\n"); + sal_Int32 nChars = aSenderPipe.read( buf, m_pTestString1.getLength() + 1 ); + if ( nChars < 0 ) + { + printf("read failed! \n"); + return; + } + buf[sizeof(buf)-1] = '\0'; + printf("buffer is %s \n", buf); + printf("send\n"); + nChars = aSenderPipe.send( m_pTestString2.getStr(), m_pTestString2.getLength() + 1 ); + if ( nChars < 0 ) + { + printf("client send failed! \n"); + return; + } + } + } + + }; + + class Pipe_DataSource_Thread : public Thread + { + public: + char buf[256]; + ::osl::Pipe aListenPipe; + ::osl::StreamPipe aConnectionPipe; + Pipe_DataSource_Thread( ) + { + printf("create pipe\n"); + aListenPipe.create( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE ); + } + virtual ~Pipe_DataSource_Thread( ) override + { + aListenPipe.close(); + } + protected: + void SAL_CALL run( ) override + { + //create pipe. + printf("listen\n"); + if ( !aListenPipe.is() ) + { + printf("pipe create failed! \n"); + } + else + { + //start server and wait for connection. + printf("accept\n"); + if ( aListenPipe.accept( aConnectionPipe ) != osl_Pipe_E_None ) + { + printf("pipe accept failed!"); + return; + } + printf("write\n"); + // write to pipe + sal_Int32 nChars = aConnectionPipe.write( m_pTestString1.getStr(), m_pTestString1.getLength() + 1 ); + if ( nChars < 0) + { + printf("server write failed! \n"); + return; + } + printf("recv\n"); + nChars = aConnectionPipe.recv( buf, 256 ); + + if ( nChars < 0) + { + printf("server receive failed! \n"); + return; + } + buf[sizeof(buf)-1] = '\0'; + printf("received message is: %s\n", buf ); + } + } + }; + + } + + /** testing the method: read/write/send/recv and Pipe::accept + */ + class recv : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void recv_001( ) + { + //launch threads. + Pipe_DataSource_Thread myDataSourceThread; + Pipe_DataSink_Thread myDataSinkThread; + myDataSourceThread.create( ); + thread_sleep( 1 ); + myDataSinkThread.create( ); + + //wait until the thread terminate + myDataSinkThread.join( ); + myDataSourceThread.join( ); + + int nCompare1 = strcmp( myDataSinkThread.buf, m_pTestString1.getStr() ); + int nCompare2 = strcmp( myDataSourceThread.buf, m_pTestString2.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "test send/recv/write/read.", 0, nCompare1 ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "test send/recv/write/read.", 0, nCompare2 ); + } + //close pipe when accept + void recv_002() + { + thread_sleep( 1 ); + + Pipe_DataSource_Thread myDataSourceThread; + Pipe_DataSink_Thread myDataSinkThread; + myDataSourceThread.create( ); + thread_sleep( 1 ); + myDataSourceThread.aListenPipe.close(); + myDataSourceThread.join( ); + //no condition judgment here, if the case could finish executing within 1 or 2 seconds, it passes. + } + + CPPUNIT_TEST_SUITE( recv ); + CPPUNIT_TEST( recv_001 ); + CPPUNIT_TEST( recv_002 ); + CPPUNIT_TEST_SUITE_END( ); + }; + + CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::ctors); +//CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::assign); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_StreamPipe::recv); + +} // namespace osl_StreamPipe + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/process/batch.bat b/sal/qa/osl/process/batch.bat new file mode 100755 index 000000000..e27f7191b --- /dev/null +++ b/sal/qa/osl/process/batch.bat @@ -0,0 +1,19 @@ +rem +rem This file is part of the LibreOffice project. +rem +rem This Source Code Form is subject to the terms of the Mozilla Public +rem License, v. 2.0. If a copy of the MPL was not distributed with this +rem file, You can obtain one at http://mozilla.org/MPL/2.0/. +rem +rem This file incorporates work covered by the following license notice: +rem +rem Licensed to the Apache Software Foundation (ASF) under one or more +rem contributor license agreements. See the NOTICE file distributed +rem with this work for additional information regarding copyright +rem ownership. The ASF licenses this file to you under the Apache +rem License, Version 2.0 (the "License"); you may not use this file +rem except in compliance with the License. You may obtain a copy of +rem the License at http://www.apache.org/licenses/LICENSE-2.0 . +rem +@echo off +echo "Hello world" \ No newline at end of file diff --git a/sal/qa/osl/process/batch.sh b/sal/qa/osl/process/batch.sh new file mode 100755 index 000000000..fd3828c6a --- /dev/null +++ b/sal/qa/osl/process/batch.sh @@ -0,0 +1,2 @@ +#!/bin/sh +echo "Hello world" \ No newline at end of file diff --git a/sal/qa/osl/process/osl_Thread.cxx b/sal/qa/osl/process/osl_Thread.cxx new file mode 100644 index 000000000..3f62c6ea3 --- /dev/null +++ b/sal/qa/osl/process/osl_Thread.cxx @@ -0,0 +1,2005 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#ifdef _WIN32 +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#include +#include +#endif + +// include files + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#define t_print printf + +using namespace osl; + +namespace { + +// Small stopwatch +class StopWatch { + TimeValue t1,t2; // Start and stoptime + +protected: + sal_Int32 m_nNanoSec; + sal_Int32 m_nSeconds; + + bool m_bIsValid; // TRUE, when started and stopped + bool m_bIsRunning; // TRUE, when started + +public: + StopWatch(); + + void start(); // Starts time + void stop(); // Stops time + + double getSeconds() const; + double getTenthSec() const; +}; + +} + +// ================================= Stop Watch ================================= + +// A small stopwatch for internal use +// (c) Lars Langhans 29.12.1996 22:10 + +StopWatch::StopWatch() + : m_nNanoSec(0) + , m_nSeconds(0) + , m_bIsValid(false) + , m_bIsRunning(false) +{ + t1.Seconds = 0; + t1.Nanosec = 0; + t2.Seconds = 0; + t2.Nanosec = 0; +} + +void StopWatch::start() +{ +// pre: % +// post: Start Timer + + m_bIsValid = false; + m_bIsRunning = true; + osl_getSystemTime( &t1 ); + t_print("# %u %u nsecs\n", static_cast(t1.Seconds), static_cast(t1.Nanosec)); + // gettimeofday(&t1, 0); +} + +void StopWatch::stop() +{ +// pre: Timer should be started +// post: Timer will stopped + + osl_getSystemTime( &t2 ); + t_print("# %u %u nsecs\n", static_cast(t2.Seconds), static_cast(t2.Nanosec)); + + if (m_bIsRunning) + { // check if started. + m_nSeconds = static_cast(t2.Seconds) - static_cast(t1.Seconds); + if ( t2.Nanosec > t1.Nanosec ) + m_nNanoSec = static_cast(t2.Nanosec) - static_cast(t1.Nanosec); + else + { + m_nNanoSec = 1000000000 + static_cast(t2.Nanosec) - static_cast(t1.Nanosec); + m_nSeconds -= 1; + } + t_print("# %u %u nsecs\n", static_cast(m_nSeconds), static_cast(m_nNanoSec) ); + m_bIsValid = true; + m_bIsRunning = false; + } +} + +double StopWatch::getSeconds() const +{ +// pre: valid = TRUE +// BACK: time in seconds + + double nValue = 0.0; + if (m_bIsValid) + { + nValue = double(m_nNanoSec) / 1000000000.0 + m_nSeconds; // milli micro nano + } + return nValue; +} + +double StopWatch::getTenthSec() const +{ + double nValue = 0.0; + if (m_bIsValid) + { + nValue = double(m_nNanoSec) / 100000000.0 + m_nSeconds * 10; + } + return nValue ; +} + +namespace { + +template +class ThreadSafeValue +{ + T m_nFlag; + Mutex m_aMutex; +public: + explicit ThreadSafeValue(T n = 0): m_nFlag(n) {} + T getValue() + { + //block if already acquired by another thread. + osl::MutexGuard g(m_aMutex); + return m_nFlag; + } + void incValue() + { + //only one thread operate on the flag. + osl::MutexGuard g(m_aMutex); + m_nFlag++; + } + void acquire() {m_aMutex.acquire();} + void release() {m_aMutex.release();} +}; + +} + +namespace ThreadHelper +{ + static void thread_sleep_tenth_sec(sal_Int32 _nTenthSec) + { + osl::Thread::wait(std::chrono::milliseconds(_nTenthSec * 100)); + } + + static void outputPriority(oslThreadPriority const& _aPriority) + { + // LLA: output the priority + if (_aPriority == osl_Thread_PriorityHighest) + { + t_print("Prio is High\n"); + } + else if (_aPriority == osl_Thread_PriorityAboveNormal) + { + t_print("Prio is above normal\n"); + } + else if (_aPriority == osl_Thread_PriorityNormal) + { + t_print("Prio is normal\n"); + } + else if (_aPriority == osl_Thread_PriorityBelowNormal) + { + t_print("Prio is below normal\n"); + } + else if (_aPriority == osl_Thread_PriorityLowest) + { + t_print("Prio is lowest\n"); + } + else + { + t_print("Prio is unknown\n"); + } + } +} + +namespace { + +/** Simple thread for testing Thread-create. + + Just add 1 of value 0, and after running, result is 1. + */ +class myThread : public Thread +{ + ThreadSafeValue m_aFlag; +public: + sal_Int32 getValue() { return m_aFlag.getValue(); } +protected: + /** guarded value which initialized 0 + + @see ThreadSafeValue + */ + void SAL_CALL run() override + { + while(schedule()) + { + m_aFlag.incValue(); + ThreadHelper::thread_sleep_tenth_sec(1); + } + } + +public: + + virtual void SAL_CALL suspend() override + { + m_aFlag.acquire(); + ::osl::Thread::suspend(); + m_aFlag.release(); + } + + virtual ~myThread() override + { + if (isRunning()) + { + t_print("error: not terminated.\n"); + } + } + +}; + +/** Thread which has a flag add 1 every second until 20 + */ +class OCountThread : public Thread +{ + ThreadSafeValue m_aFlag; +public: + OCountThread() : m_nWaitSec(0) + { + t_print("new OCountThread thread %u!\n", static_cast(getIdentifier())); + } + sal_Int32 getValue() { return m_aFlag.getValue(); } + + void setWait(sal_Int32 nSec) + { + m_nWaitSec = nSec; + //m_bWait = sal_True; + } + + virtual void SAL_CALL suspend() override + { + m_aFlag.acquire(); + ::osl::Thread::suspend(); + m_aFlag.release(); + } + +protected: + //sal_Bool m_bWait; + sal_Int32 m_nWaitSec; + + void SAL_CALL run() override + { + /// if the thread should terminate, schedule return false + while (m_aFlag.getValue() < 20 && schedule()) + { + m_aFlag.incValue(); + ThreadHelper::thread_sleep_tenth_sec(1); + + if (m_nWaitSec != 0) + { + TimeValue nTV; + nTV.Seconds = m_nWaitSec / 10 ; + nTV.Nanosec = ( m_nWaitSec%10 ) * 100000000 ; + wait( nTV ); + m_nWaitSec = 0; + } + } + } + void SAL_CALL onTerminated() override + { + t_print("normally terminate this thread %u!\n", static_cast(getIdentifier())); + } +public: + + virtual ~OCountThread() override + { + if (isRunning()) + { + t_print("error: not terminated.\n"); + } + } + +}; + +/** no call schedule in the run method +*/ +class ONoScheduleThread : public Thread +{ + ThreadSafeValue m_aFlag; +public: + sal_Int32 getValue() { return m_aFlag.getValue(); } + + virtual void SAL_CALL suspend() override + { + m_aFlag.acquire(); + ::osl::Thread::suspend(); + m_aFlag.release(); + } +protected: + void SAL_CALL run() override + { + while (m_aFlag.getValue() < 10) + { + m_aFlag.incValue(); + ThreadHelper::thread_sleep_tenth_sec(1); + } + } + void SAL_CALL onTerminated() override + { + t_print("normally terminate this thread %u!\n", static_cast(getIdentifier())); + } +public: + ONoScheduleThread() + { + t_print("new thread id %u!\n", static_cast(getIdentifier())); + } + virtual ~ONoScheduleThread() override + { + if (isRunning()) + { + t_print("error: not terminated.\n"); + } + } + +}; + + +class OAddThread : public Thread +{ + ThreadSafeValue m_aFlag; +public: + //oslThreadIdentifier m_id, m_CurId; + OAddThread(){} + sal_Int32 getValue() { return m_aFlag.getValue(); } + + virtual void SAL_CALL suspend() override + { + m_aFlag.acquire(); + ::osl::Thread::suspend(); + m_aFlag.release(); + } +protected: + void SAL_CALL run() override + { + //if the thread should terminate, schedule return false + while (schedule()) + { + m_aFlag.incValue(); + } + } + void SAL_CALL onTerminated() override + { + // t_print("normally terminate this thread %d!\n", getIdentifier()); + } +public: + + virtual ~OAddThread() override + { + if (isRunning()) + { + // t_print("error: not terminated.\n"); + } + } + +}; + +} + +namespace osl_Thread +{ + + static void resumeAndWaitThread(Thread* _pThread) + { + // This function starts a thread, wait a second and suspends the thread + // Due to the fact, that a suspend and never run thread never really exists. + + // Note: on UNX, after createSuspended, and then terminate the thread, it performs well; + // while on Windows, after createSuspended, the thread can not terminate, wait endlessly, + // so here call resume at first, then call terminate. +#ifdef _WIN32 + t_print("resumeAndWaitThread\n"); + _pThread->resume(); + ThreadHelper::thread_sleep_tenth_sec(1); +#else + _pThread->resume(); +#endif + } + + // kill a running thread and join it, if it has terminated, do nothing + static void termAndJoinThread(Thread* _pThread) + { + _pThread->terminate(); + +// LLA: Windows feature???, a suspended thread can not terminated, so we have to weak it up +#ifdef _WIN32 + _pThread->resume(); + ThreadHelper::thread_sleep_tenth_sec(1); +#endif + t_print("#wait for join.\n"); + _pThread->join(); + } +/** Test of the osl::Thread::create method + */ + + class create : public CppUnit::TestFixture + { + public: + /** Simple create a thread. + + Create a simple thread, it just does add 1 to value(which initialized 0), + if the thread run, the value should be 1. + */ + void create_001() + { + myThread* newthread = new myThread; + bool bRes = newthread->create(); + CPPUNIT_ASSERT_MESSAGE("Can not creates a new thread!\n", bRes); + + ThreadHelper::thread_sleep_tenth_sec(1); // wait short + bool isRunning = newthread->isRunning(); // check if thread is running + /// wait for the new thread to assure it has run + ThreadHelper::thread_sleep_tenth_sec(3); + sal_Int32 nValue = newthread->getValue(); + /// to assure the new thread has terminated + termAndJoinThread(newthread); + delete newthread; + + t_print(" nValue = %d\n", static_cast(nValue)); + t_print("isRunning = %s\n", isRunning ? "true" : "false"); + + CPPUNIT_ASSERT_MESSAGE( + "Creates a new thread", + nValue >= 1 + ); + CPPUNIT_ASSERT_MESSAGE( + "Creates a new thread", + isRunning + ); + + } + + /** only one running thread per instance, return false if create secondly + */ + void create_002() + { + myThread* newthread = new myThread; + bool res1 = newthread->create(); + bool res2 = newthread->create(); + t_print("In non pro, an assertion should occurred. This behaviour is right.\n"); + termAndJoinThread(newthread); + delete newthread; + + CPPUNIT_ASSERT_MESSAGE( + "Creates a new thread: can not create two threads per instance", + res1 + ); + CPPUNIT_ASSERT_MESSAGE( + "Creates a new thread: can not create two threads per instance", + !res2 + ); + + } + + CPPUNIT_TEST_SUITE(create); + CPPUNIT_TEST(create_001); + CPPUNIT_TEST(create_002); + CPPUNIT_TEST_SUITE_END(); + }; // class create + + /** Test of the osl::Thread::createSuspended method + */ + class createSuspended : public CppUnit::TestFixture + { + public: + /** Create a suspended thread, use the same class as create_001 + + after create, wait enough time, check the value, if it's still the initial value, pass + */ + void createSuspended_001() + { + myThread* newthread = new myThread; + bool bRes = newthread->createSuspended(); + CPPUNIT_ASSERT_MESSAGE("Can not creates a new thread!", bRes); + + ThreadHelper::thread_sleep_tenth_sec(1); + bool isRunning = newthread->isRunning(); + ThreadHelper::thread_sleep_tenth_sec(3); + sal_Int32 nValue = newthread->getValue(); + + resumeAndWaitThread(newthread); + + termAndJoinThread(newthread); + delete newthread; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Creates a new suspended thread", + sal_Int32(0), nValue + ); + CPPUNIT_ASSERT_MESSAGE( + "Creates a new suspended thread", + isRunning + ); + } + + void createSuspended_002() + { + myThread* newthread = new myThread; + bool res1 = newthread->createSuspended(); + bool res2 = newthread->createSuspended(); + + resumeAndWaitThread(newthread); + + termAndJoinThread(newthread); + + delete newthread; + + CPPUNIT_ASSERT_MESSAGE( + "Creates a new thread: can not create two threads per instance", + res1 + ); + CPPUNIT_ASSERT_MESSAGE( + "Creates a new thread: can not create two threads per instance", + !res2 + ); + } + + CPPUNIT_TEST_SUITE(createSuspended); + CPPUNIT_TEST(createSuspended_001); + // LLA: Deadlocked!!! + CPPUNIT_TEST(createSuspended_002); + CPPUNIT_TEST_SUITE_END(); + }; // class createSuspended + + /** when the count value equal to or more than 3, suspend the thread. + */ + static void suspendCountThread(OCountThread* _pCountThread) + { + sal_Int32 nValue = 0; + while (true) + { + nValue = _pCountThread->getValue(); + if (nValue >= 3) + { + _pCountThread->suspend(); + break; + } + } + } + + /** Test of the osl::Thread::suspend method + */ + class suspend : public CppUnit::TestFixture + { + public: + /** Use a thread which has a flag added 1 every second + + ALGORITHM: + create the thread, after running special time, record value of flag, then suspend it, + wait a long time, check the flag, if it remains unchanged during suspending + */ + void suspend_001() + { + OCountThread* aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + // the thread run for some seconds, but not terminate + suspendCountThread( aCountThread ); + + // the value just after calling suspend + sal_Int32 nValue = aCountThread->getValue(); // (2) + + ThreadHelper::thread_sleep_tenth_sec(3); + + // the value after waiting 3 seconds + sal_Int32 nLaterValue = aCountThread->getValue(); // (3) + + resumeAndWaitThread(aCountThread); + termAndJoinThread(aCountThread); + delete aCountThread; + + CPPUNIT_ASSERT_MESSAGE( + "Suspend the thread", + bRes + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Suspend the thread", + nValue, nLaterValue + ); + + } + + CPPUNIT_TEST_SUITE(suspend); + CPPUNIT_TEST(suspend_001); + // LLA: Deadlocked!!! + // CPPUNIT_TEST(createSuspended_002); + CPPUNIT_TEST_SUITE_END(); + }; // class suspend + + /** Test of the osl::Thread::resume method + */ + class resume : public CppUnit::TestFixture + { + public: + /** check if the thread run samely as usual after suspend and resume + + ALGORITHM: + compare the values before and after suspend, they should be same, + then compare values before and after resume, the difference should be same as the sleep seconds number + */ + void resume_001() + { + OCountThread* pCountThread = new OCountThread(); + bool bRes = pCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + suspendCountThread(pCountThread); + + sal_Int32 nSuspendValue = pCountThread->getValue(); // (2) + // suspend for 3 seconds + ThreadHelper::thread_sleep_tenth_sec(3); + pCountThread->resume(); + + ThreadHelper::thread_sleep_tenth_sec(3); + sal_Int32 nResumeValue = pCountThread->getValue(); + + ThreadHelper::thread_sleep_tenth_sec(3); + sal_Int32 nLaterValue = pCountThread->getValue(); + + termAndJoinThread(pCountThread); + delete pCountThread; + + t_print("SuspendValue: %d\n", static_cast(nSuspendValue)); + t_print("ResumeValue: %d\n", static_cast(nResumeValue)); + t_print("LaterValue: %d\n", static_cast(nLaterValue)); + + /* LLA: this assumption is no longer relevant: nResumeValue == nSuspendValue && */ + CPPUNIT_ASSERT_MESSAGE( + "Suspend then resume the thread", + nLaterValue >= 9 + ); + CPPUNIT_ASSERT_MESSAGE( + "Suspend then resume the thread", + nResumeValue > nSuspendValue + ); + CPPUNIT_ASSERT_MESSAGE( + "Suspend then resume the thread", + nLaterValue > nResumeValue + ); + + } + + /** Create a suspended thread then resume, check if the thread has run + */ + void resume_002() + { + myThread* newthread = new myThread; + bool bRes = newthread->createSuspended(); + CPPUNIT_ASSERT_MESSAGE ( "Can't create thread!", bRes ); + + newthread->resume(); + ThreadHelper::thread_sleep_tenth_sec(2); + sal_Int32 nValue = newthread->getValue(); + + termAndJoinThread(newthread); + delete newthread; + + t_print(" nValue = %d\n", static_cast(nValue)); + + CPPUNIT_ASSERT_MESSAGE( + "Creates a suspended thread, then resume", + nValue >= 1 + ); + } + + CPPUNIT_TEST_SUITE(resume); + CPPUNIT_TEST(resume_001); + CPPUNIT_TEST(resume_002); + CPPUNIT_TEST_SUITE_END(); + }; // class resume + + /** Test of the osl::Thread::terminate method + */ + class terminate : public CppUnit::TestFixture + { + public: + /** Check after call terminate if the running thread running go on executing + + ALGORITHM: + before and after call terminate, the values should be the same + */ + void terminate_001() + { + OCountThread* aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + ThreadHelper::thread_sleep_tenth_sec(2); + sal_Int32 nValue = aCountThread->getValue(); + aCountThread->terminate(); + ThreadHelper::thread_sleep_tenth_sec(2); + sal_Int32 nLaterValue = aCountThread->getValue(); + + // isRunning should be false after terminate + bool isRunning = aCountThread->isRunning(); + aCountThread->join(); + delete aCountThread; + + t_print(" nValue = %d\n", static_cast(nValue)); + t_print("nLaterValue = %d\n", static_cast(nLaterValue)); + + CPPUNIT_ASSERT_MESSAGE( + "Terminate the thread", + !isRunning + ); + CPPUNIT_ASSERT_MESSAGE( + "Terminate the thread", + nLaterValue >= nValue + ); + } + /** Check if a suspended thread will terminate after call terminate, different on w32 and on UNX + */ + void terminate_002() + { + OCountThread* aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + ThreadHelper::thread_sleep_tenth_sec(1); + suspendCountThread(aCountThread); + sal_Int32 nValue = aCountThread->getValue(); + + // seems a suspended thread can not be terminated on W32, while on Solaris can + resumeAndWaitThread(aCountThread); + + ThreadHelper::thread_sleep_tenth_sec(2); + + termAndJoinThread(aCountThread); + sal_Int32 nLaterValue = aCountThread->getValue(); + delete aCountThread; + + t_print(" nValue = %d\n", static_cast(nValue)); + t_print("nLaterValue = %d\n", static_cast(nLaterValue)); + + CPPUNIT_ASSERT_MESSAGE( + "Suspend then resume the thread", + nLaterValue > nValue ); + } + + CPPUNIT_TEST_SUITE(terminate); + CPPUNIT_TEST(terminate_001); + CPPUNIT_TEST(terminate_002); + CPPUNIT_TEST_SUITE_END(); + }; // class terminate + + /** Test of the osl::Thread::join method + */ + class join : public CppUnit::TestFixture + { + public: + /** Check after call terminate if the thread running function will not go on executing + + the next statement after join will not exec before the thread terminates + ALGORITHM: + recode system time at the beginning of the thread run, call join, then record system time again, + the difference of the two times should be equal or more than 20 seconds, the CountThread normally terminates + */ + void join_001() + { + OCountThread *aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + StopWatch aStopWatch; + aStopWatch.start(); + // TimeValue aTimeVal_befor; + // osl_getSystemTime( &aTimeVal_befor ); + //t_print("#join:the system time is %d,%d\n", pTimeVal_befor->Seconds,pTimeVal_befor->Nanosec); + + aCountThread->join(); + + //the below line will be executed after aCountThread terminate + // TimeValue aTimeVal_after; + // osl_getSystemTime( &aTimeVal_after ); + aStopWatch.stop(); + // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds; + double nSec = aStopWatch.getSeconds(); + t_print("join_001 nSec=%f\n", nSec); + delete aCountThread; + + CPPUNIT_ASSERT_MESSAGE( + "Join the thread: after the thread terminate", + nSec >= 2 + ); + + } + /** after terminated by another thread, join exited immediately + + ALGORITHM: + terminate the thread when value>=3, call join, check the beginning time and time after join, + the difference should be 3 seconds, join costs little time + */ + void join_002() + { + OCountThread *aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + //record the time when the running begin + // TimeValue aTimeVal_befor; + // osl_getSystemTime( &aTimeVal_befor ); + StopWatch aStopWatch; + aStopWatch.start(); + + ThreadHelper::thread_sleep_tenth_sec(10); + termAndJoinThread(aCountThread); + + //the below line will be executed after aCountThread terminate + // TimeValue aTimeVal_after; + // osl_getSystemTime( &aTimeVal_after ); + // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds; + aStopWatch.stop(); + double nSec = aStopWatch.getSeconds(); + t_print("join_002 nSec=%f\n", nSec); + + delete aCountThread; + CPPUNIT_ASSERT_MESSAGE( + "Join the thread: after thread terminate by another thread", + nSec >= 1 + ); + } + + CPPUNIT_TEST_SUITE(join); + CPPUNIT_TEST(join_001); + CPPUNIT_TEST(join_002); + CPPUNIT_TEST_SUITE_END(); + }; // class join + + /** Test of the osl::Thread::isRunning method + */ + class isRunning : public CppUnit::TestFixture + { + public: + void isRunning_001() + { + OCountThread *aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + bool bRun = aCountThread->isRunning(); + + ThreadHelper::thread_sleep_tenth_sec(2); + termAndJoinThread(aCountThread); + bool bTer = aCountThread->isRunning(); + delete aCountThread; + + CPPUNIT_ASSERT_MESSAGE( + "Test isRunning", + bRun + ); + CPPUNIT_ASSERT_MESSAGE( + "Test isRunning", + !bTer + ); + } + /** check the value of isRunning when suspending and after resume + */ + void isRunning_002() + { + OCountThread *aCountThread = new OCountThread(); + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + // sal_Bool bRunning = aCountThread->isRunning(); + // sal_Int32 nValue = 0; + suspendCountThread(aCountThread); + + bool bRunning_sup = aCountThread->isRunning(); + ThreadHelper::thread_sleep_tenth_sec(2); + aCountThread->resume(); + ThreadHelper::thread_sleep_tenth_sec(2); + bool bRunning_res = aCountThread->isRunning(); + termAndJoinThread(aCountThread); + bool bRunning_ter = aCountThread->isRunning(); + delete aCountThread; + + CPPUNIT_ASSERT_MESSAGE( + "Test isRunning", + bRes ); + CPPUNIT_ASSERT_MESSAGE( + "Test isRunning", + bRunning_sup ); + CPPUNIT_ASSERT_MESSAGE( + "Test isRunning", + bRunning_res ); + CPPUNIT_ASSERT_MESSAGE( + "Test isRunning", + !bRunning_ter ); + + } + + CPPUNIT_TEST_SUITE(isRunning); + CPPUNIT_TEST(isRunning_001); + CPPUNIT_TEST(isRunning_002); + CPPUNIT_TEST_SUITE_END(); + }; // class isRunning + + /// check osl::Thread::setPriority + class setPriority : public CppUnit::TestFixture + { + public: + // insert your test code here. + OString getPrioName(oslThreadPriority _aPriority) + { + OString sPrioStr; + switch (_aPriority) + { + case osl_Thread_PriorityHighest: + sPrioStr = "Highest"; + break; + + case osl_Thread_PriorityAboveNormal: + sPrioStr = "AboveNormal"; + break; + + case osl_Thread_PriorityNormal: + sPrioStr = "Normal"; + break; + + case osl_Thread_PriorityBelowNormal: + sPrioStr = "BelowNormal"; + break; + + case osl_Thread_PriorityLowest: + sPrioStr = "Lowest"; + break; + default: + sPrioStr = "unknown"; + } + return sPrioStr; + } + + /** check 2 threads. + + ALGORITHM: + Here the function should show, that 2 different threads, + which only increase a value, should run at the same time with same prio. + The test fails, if the difference between the two values is more than 5% + but IMHO this isn't a failure, it's only a feature of the OS. + */ + + void check2Threads(oslThreadPriority _aPriority) + { + // initial 5 threads with different priorities + OAddThread* pThread = new OAddThread(); + OAddThread* p2Thread = new OAddThread(); + + //Create them and start running at the same time + pThread->create(); + pThread->setPriority(_aPriority); + p2Thread->create(); + p2Thread->setPriority(_aPriority); + + ThreadHelper::thread_sleep_tenth_sec(5); + + pThread->terminate(); + p2Thread->terminate(); + + sal_Int32 nValueNormal = pThread->getValue(); + + sal_Int32 nValueNormal2 = p2Thread->getValue(); + + OString sPrio = getPrioName(_aPriority); + t_print("After 10 tenth seconds\n"); + + t_print("nValue in %s Prio Thread is %d\n",sPrio.getStr(), static_cast(nValueNormal)); + t_print("nValue in %s Prio Thread is %d\n", sPrio.getStr(), static_cast(nValueNormal2)); + + // ThreadHelper::thread_sleep_tenth_sec(1); + pThread->join(); + p2Thread->join(); + + delete pThread; + delete p2Thread; + + sal_Int32 nDelta = abs(nValueNormal - nValueNormal2); + double nQuotient = std::max(nValueNormal, nValueNormal2); + CPPUNIT_ASSERT_MESSAGE( + "Quotient is zero, which means, there exist no right values.", + nQuotient != 0 + ); + double nDeltaPercent = nDelta / nQuotient * 100; + + t_print("Delta value %d, percent %f\n", static_cast(nDelta), nDeltaPercent); + + // LLA: it's not a bug if the current OS is not able to handle thread scheduling right and good. + // like Windows XP + // LLA: CPPUNIT_ASSERT_MESSAGE( + // LLA: "Run 2 normal threads, the count diff more than 5 percent.", + // LLA: nDeltaPercent <= 5 + // LLA: ); + } + + void setPriority_001_1() + { + check2Threads(osl_Thread_PriorityHighest); + } + void setPriority_001_2() + { + check2Threads(osl_Thread_PriorityAboveNormal); + } + void setPriority_001_3() + { + check2Threads(osl_Thread_PriorityNormal); + } + void setPriority_001_4() + { + check2Threads(osl_Thread_PriorityBelowNormal); + } + void setPriority_001_5() + { + check2Threads(osl_Thread_PriorityLowest); + } + + void setPriority_002() + { + // initial 5 threads with different priorities + + OAddThread aHighestThread; + OAddThread aAboveNormalThread; + OAddThread aNormalThread; + //OAddThread *aBelowNormalThread = new OAddThread(); + //OAddThread *aLowestThread = new OAddThread(); + + //Create them and start running at the same time + aHighestThread.createSuspended(); + aHighestThread.setPriority(osl_Thread_PriorityHighest); + + aAboveNormalThread.createSuspended(); + aAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal); + + aNormalThread.createSuspended(); + aNormalThread.setPriority(osl_Thread_PriorityNormal); + /*aBelowNormalThread->create(); + aBelowNormalThread->setPriority(osl_Thread_PriorityBelowNormal); + aLowestThread->create(); + aLowestThread->setPriority(osl_Thread_PriorityLowest); + */ + + aHighestThread.resume(); + aAboveNormalThread.resume(); + aNormalThread.resume(); + + ThreadHelper::thread_sleep_tenth_sec(5); + + aHighestThread.suspend(); + aAboveNormalThread.suspend(); + aNormalThread.suspend(); + + termAndJoinThread(&aNormalThread); + termAndJoinThread(&aAboveNormalThread); + termAndJoinThread(&aHighestThread); + //aBelowNormalThread->terminate(); + //aLowestThread->terminate(); + + sal_Int32 nValueHighest = aHighestThread.getValue(); + + sal_Int32 nValueAboveNormal = aAboveNormalThread.getValue(); + + sal_Int32 nValueNormal = aNormalThread.getValue(); + + t_print("After 10 tenth seconds\n"); + t_print("nValue in Highest Prio Thread is %d\n", static_cast(nValueHighest)); + t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast(nValueAboveNormal)); + t_print("nValue in Normal Prio Thread is %d\n", static_cast(nValueNormal)); + +#ifndef _WIN32 + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueHighest > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueAboveNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueNormal > 0 + ); +#endif + } + + void setPriority_003() + { + // initial 5 threads with different priorities + OAddThread pHighestThread; + OAddThread pAboveNormalThread; + OAddThread pNormalThread; + OAddThread pBelowNormalThread; + OAddThread pLowestThread; + + //Create them and start running at the same time + pHighestThread.createSuspended(); + pHighestThread.setPriority(osl_Thread_PriorityHighest); + + pAboveNormalThread.createSuspended(); + pAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal); + + pNormalThread.createSuspended(); + pNormalThread.setPriority(osl_Thread_PriorityNormal); + + pBelowNormalThread.createSuspended(); + pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal); + + pLowestThread.createSuspended(); + pLowestThread.setPriority(osl_Thread_PriorityLowest); + + pHighestThread.resume(); + pAboveNormalThread.resume(); + pNormalThread.resume(); + pBelowNormalThread.resume(); + pLowestThread.resume(); + + ThreadHelper::thread_sleep_tenth_sec(5); + + pHighestThread.suspend(); + pAboveNormalThread.suspend(); + pNormalThread.suspend(); + pBelowNormalThread.suspend(); + pLowestThread.suspend(); + + termAndJoinThread(&pHighestThread); + termAndJoinThread(&pAboveNormalThread); + termAndJoinThread(&pNormalThread); + termAndJoinThread(&pBelowNormalThread); + termAndJoinThread(&pLowestThread); + + sal_Int32 nValueHighest = pHighestThread.getValue(); + + sal_Int32 nValueAboveNormal = pAboveNormalThread.getValue(); + + sal_Int32 nValueNormal = pNormalThread.getValue(); + + sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue(); + + sal_Int32 nValueLowest = pLowestThread.getValue(); + + t_print("After 10 tenth seconds\n"); + t_print("nValue in Highest Prio Thread is %d\n", static_cast(nValueHighest)); + t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast(nValueAboveNormal)); + t_print("nValue in Normal Prio Thread is %d\n", static_cast(nValueNormal)); + t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast(nValueBelowNormal)); + t_print("nValue in Lowest Prio Thread is %d\n", static_cast(nValueLowest)); + +#ifndef _WIN32 + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueHighest > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueAboveNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueBelowNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueLowest > 0 + ); +#endif + } + + void setPriority_004() + { + // initial 5 threads with different priorities + // OAddThread *pHighestThread = new OAddThread(); + OAddThread pAboveNormalThread; + OAddThread pNormalThread; + OAddThread pBelowNormalThread; + OAddThread pLowestThread; + + //Create them and start running at the same time + // pHighestThread->createSuspended(); + // pHighestThread->setPriority(osl_Thread_PriorityHighest); + + pAboveNormalThread.createSuspended(); + pAboveNormalThread.setPriority(osl_Thread_PriorityAboveNormal); + + pNormalThread.createSuspended(); + pNormalThread.setPriority(osl_Thread_PriorityNormal); + + pBelowNormalThread.createSuspended(); + pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal); + + pLowestThread.createSuspended(); + pLowestThread.setPriority(osl_Thread_PriorityLowest); + + // pHighestThread->resume(); + pAboveNormalThread.resume(); + pNormalThread.resume(); + pBelowNormalThread.resume(); + pLowestThread.resume(); + + ThreadHelper::thread_sleep_tenth_sec(5); + + // pHighestThread->suspend(); + pAboveNormalThread.suspend(); + pNormalThread.suspend(); + pBelowNormalThread.suspend(); + pLowestThread.suspend(); + + // termAndJoinThread(pHighestThread); + termAndJoinThread(&pAboveNormalThread); + termAndJoinThread(&pNormalThread); + termAndJoinThread(&pBelowNormalThread); + termAndJoinThread(&pLowestThread); + + // sal_Int32 nValueHighest = 0; + // nValueHighest = pHighestThread->getValue(); + + sal_Int32 nValueAboveNormal = pAboveNormalThread.getValue(); + + sal_Int32 nValueNormal = pNormalThread.getValue(); + + sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue(); + + sal_Int32 nValueLowest = pLowestThread.getValue(); + + t_print("After 5 tenth seconds\n"); + t_print("nValue in AboveNormal Prio Thread is %d\n", static_cast(nValueAboveNormal)); + t_print("nValue in Normal Prio Thread is %d\n", static_cast(nValueNormal)); + t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast(nValueBelowNormal)); + t_print("nValue in Lowest Prio Thread is %d\n", static_cast(nValueLowest)); + + // delete pHighestThread; + +#ifndef _WIN32 + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + /* nValueHighest > 0 && */ + nValueAboveNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueBelowNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueLowest > 0 + ); +#endif + } + void setPriority_005() + { + // initial 5 threads with different priorities + // OAddThread *pHighestThread = new OAddThread(); + // OAddThread *pAboveNormalThread = new OAddThread(); + OAddThread pNormalThread; + OAddThread pBelowNormalThread; + OAddThread pLowestThread; + + //Create them and start running at the same time + // pHighestThread->createSuspended(); + // pHighestThread->setPriority(osl_Thread_PriorityHighest); + + // pAboveNormalThread->createSuspended(); + // pAboveNormalThread->setPriority(osl_Thread_PriorityAboveNormal); + + pNormalThread.createSuspended(); + pNormalThread.setPriority(osl_Thread_PriorityNormal); + + pBelowNormalThread.createSuspended(); + pBelowNormalThread.setPriority(osl_Thread_PriorityBelowNormal); + + pLowestThread.createSuspended(); + pLowestThread.setPriority(osl_Thread_PriorityLowest); + + // pHighestThread->resume(); + // pAboveNormalThread->resume(); + pNormalThread.resume(); + pBelowNormalThread.resume(); + pLowestThread.resume(); + + ThreadHelper::thread_sleep_tenth_sec(5); + + // pHighestThread->suspend(); + // pAboveNormalThread->suspend(); + pNormalThread.suspend(); + pBelowNormalThread.suspend(); + pLowestThread.suspend(); + + // termAndJoinThread(pHighestThread); + // termAndJoinThread(pAboveNormalThread); + termAndJoinThread(&pNormalThread); + termAndJoinThread(&pBelowNormalThread); + termAndJoinThread(&pLowestThread); + + // sal_Int32 nValueHighest = 0; + // nValueHighest = pHighestThread->getValue(); + + // sal_Int32 nValueAboveNormal = 0; + // nValueAboveNormal = pAboveNormalThread->getValue(); + + sal_Int32 nValueNormal = pNormalThread.getValue(); + + sal_Int32 nValueBelowNormal = pBelowNormalThread.getValue(); + + sal_Int32 nValueLowest = pLowestThread.getValue(); + + t_print("After 5 tenth seconds\n"); + t_print("nValue in Normal Prio Thread is %d\n", static_cast(nValueNormal)); + t_print("nValue in BelowNormal Prio Thread is %d\n", static_cast(nValueBelowNormal)); + t_print("nValue in Lowest Prio Thread is %d\n", static_cast(nValueLowest)); + +#ifndef _WIN32 + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + /* nValueHighest > 0 && */ + /* nValueAboveNormal > 0 && */ + nValueNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueBelowNormal > 0 + ); + CPPUNIT_ASSERT_MESSAGE( + "SetPriority", + nValueLowest > 0 + ); +#endif + } + + CPPUNIT_TEST_SUITE(setPriority); +#ifndef __sun + CPPUNIT_TEST(setPriority_002); + CPPUNIT_TEST(setPriority_003); + CPPUNIT_TEST(setPriority_004); + CPPUNIT_TEST(setPriority_005); +#endif + CPPUNIT_TEST(setPriority_001_1); + CPPUNIT_TEST(setPriority_001_2); + CPPUNIT_TEST(setPriority_001_3); + CPPUNIT_TEST(setPriority_001_4); + CPPUNIT_TEST(setPriority_001_5); + CPPUNIT_TEST_SUITE_END(); + }; // class setPriority + + /** Test of the osl::Thread::getPriority method + */ + class getPriority : public CppUnit::TestFixture + { + public: + // insert your test code here. + void getPriority_001() + { + OAddThread *pHighestThread = new OAddThread(); + + //Create them and start running at the same time + pHighestThread->create(); + pHighestThread->setPriority(osl_Thread_PriorityHighest); + + oslThreadPriority aPriority = pHighestThread->getPriority(); + termAndJoinThread(pHighestThread); + delete pHighestThread; + + ThreadHelper::outputPriority(aPriority); + +// LLA: Priority settings may not work within some OS versions. +#if defined(_WIN32) || defined(__sun) + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "getPriority", + osl_Thread_PriorityHighest, aPriority + ); +#else +// LLA: Linux +// NO_PTHREAD_PRIORITY ??? + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "getPriority", + osl_Thread_PriorityNormal, aPriority + ); +#endif + } + + CPPUNIT_TEST_SUITE(getPriority); + CPPUNIT_TEST(getPriority_001); + CPPUNIT_TEST_SUITE_END(); + }; // class getPriority + + class getIdentifier : public CppUnit::TestFixture + { + public: + // initialise your test code values here. + + void getIdentifier_001() + { + // insert your test code here. + } + + CPPUNIT_TEST_SUITE(getIdentifier); + CPPUNIT_TEST(getIdentifier_001); + CPPUNIT_TEST_SUITE_END(); + }; // class getIdentifier + + /** Test of the osl::Thread::getCurrentIdentifier method + */ + class getCurrentIdentifier : public CppUnit::TestFixture + { + public: + void getCurrentIdentifier_001() + { + oslThreadIdentifier oId; + OCountThread* pCountThread = new OCountThread; + pCountThread->create(); + pCountThread->setWait(3); + oId = Thread::getCurrentIdentifier(); + oslThreadIdentifier oIdChild = pCountThread->getIdentifier(); + termAndJoinThread(pCountThread); + delete pCountThread; + + CPPUNIT_ASSERT_MESSAGE( + "Get the identifier for the current active thread.", + oId != oIdChild); + } + + CPPUNIT_TEST_SUITE(getCurrentIdentifier); + CPPUNIT_TEST(getCurrentIdentifier_001); + CPPUNIT_TEST_SUITE_END(); + }; // class getCurrentIdentifier + + /** Test of the osl::Thread::wait method + */ + class waittest : public CppUnit::TestFixture + { + public: + /** call wait in the run method + + ALGORITHM: + tested thread wait nWaitSec seconds, main thread sleep (2) seconds, + then terminate the tested thread, due to the fact that the thread do a sleep(1) + wait(5) + it's finish after 6 seconds. + */ + void wait_001() + { + OCountThread *aCountThread = new OCountThread(); + sal_Int32 nWaitSec = 5; + aCountThread->setWait(nWaitSec); + // thread runs at least 5 seconds. + bool bRes = aCountThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + //record the time when the running begin + StopWatch aStopWatch; + aStopWatch.start(); + + // wait a little bit, to let the thread the time, to start + ThreadHelper::thread_sleep_tenth_sec( 4 ); + + // if wait works, + // this function returns, after 4 sec. later + termAndJoinThread(aCountThread); + + // value should be one. + sal_Int32 nValue = aCountThread->getValue(); + + aStopWatch.stop(); + + // sal_uInt32 nSec = aTimeVal_after.Seconds - aTimeVal_befor.Seconds; + double nTenthSec = aStopWatch.getTenthSec(); + double nSec = aStopWatch.getSeconds(); + delete aCountThread; + t_print("nTenthSec = %f \n", nTenthSec); + t_print("nSec = %f \n", nSec); + t_print("nValue = %d \n", static_cast(nValue)); + + CPPUNIT_ASSERT_MESSAGE( + "Wait: Blocks the calling thread for the given number of time.", + nTenthSec >= 5 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Wait: Blocks the calling thread for the given number of time.", + sal_Int32(1), nValue + ); + + } + + CPPUNIT_TEST_SUITE(waittest); + CPPUNIT_TEST(wait_001); + CPPUNIT_TEST_SUITE_END(); + }; // class waittest + + /** osl::Thread::yield method: can not design good test scenario to test up to now + */ + class yield : public CppUnit::TestFixture + { + public: + void yield_001() + { + // insert your test code here. + } + + CPPUNIT_TEST_SUITE(yield); + CPPUNIT_TEST(yield_001); + CPPUNIT_TEST_SUITE_END(); + }; // class yield + + /** Test of the osl::Thread::schedule method + */ + class schedule : public CppUnit::TestFixture + { + public: + + /** The requested thread will get terminate the next time schedule() is called. + + Note: on UNX, if call suspend thread is not the to be suspended thread, the to be + suspended thread will get suspended the next time schedule() is called, + while on w32, it's nothing with schedule. + + check if suspend and terminate work well via schedule + */ + void schedule_001() + { + OAddThread* aThread = new OAddThread(); + bool bRes = aThread->create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + ThreadHelper::thread_sleep_tenth_sec(2); + aThread->suspend(); + ThreadHelper::thread_sleep_tenth_sec(1); + sal_Int32 nValue = aThread->getValue(); + ThreadHelper::thread_sleep_tenth_sec(3); + sal_Int32 nLaterValue = aThread->getValue(); + // resumeAndWaitThread(aThread); + t_print(" value = %d\n", static_cast(nValue)); + t_print("later value = %d\n", static_cast(nLaterValue)); + // if value and latervalue not equal, then the thread would not suspended + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Schedule: suspend works.", + nValue, nLaterValue + ); + + aThread->resume(); + ThreadHelper::thread_sleep_tenth_sec(2); + + aThread->terminate(); + sal_Int32 nValue_term = aThread->getValue(); + + aThread->join(); + sal_Int32 nValue_join = aThread->getValue(); + + t_print("value after term = %d\n", static_cast(nValue_term)); + t_print("value after join = %d\n", static_cast(nValue_join)); + + // nValue_term and nValue_join should be the same + // but should be differ from nValue + + delete aThread; + //check if thread really terminate after call terminate, if join immediately return + CPPUNIT_ASSERT_MESSAGE( + "Schedule: Returns False if the thread should terminate.", + nValue_join - nValue_term <= 1 + ); + CPPUNIT_ASSERT_MESSAGE( + "Schedule: Returns False if the thread should terminate.", + nValue_join - nValue_term >= 0 + ); + + } + + /** design a thread that has not call schedule in the workfunction--run method + */ + void schedule_002() + { + ONoScheduleThread aThread; // this thread runs 10 sec. (no schedule() used) + bool bRes = aThread.create(); + CPPUNIT_ASSERT_MESSAGE ( "Can't start thread!", bRes ); + + ThreadHelper::thread_sleep_tenth_sec(2); + aThread.suspend(); + sal_Int32 nValue = aThread.getValue(); + + ThreadHelper::thread_sleep_tenth_sec(3); + sal_Int32 nLaterValue = aThread.getValue(); + ThreadHelper::thread_sleep_tenth_sec(5); + + resumeAndWaitThread(&aThread); + + t_print(" value = %d\n", static_cast(nValue)); + t_print("later value = %d\n", static_cast(nLaterValue)); + + //On windows, suspend works, so the values are same +#ifdef _WIN32 + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Schedule: don't schedule in thread run method, suspend works.", + nValue, nLaterValue + ); +#endif + + //On UNX, suspend does not work, so the difference of the values equals to sleep seconds number +#ifdef UNX + aThread.resume(); + CPPUNIT_ASSERT_MESSAGE( + "Schedule: don't schedule in thread run method, suspend does not work too.", + nLaterValue > nValue + ); +#endif + + // terminate will not work if no schedule in thread's work function + termAndJoinThread(&aThread); + sal_Int32 nValue_term = aThread.getValue(); + + t_print(" value term = %d\n", static_cast(nValue_term)); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "Schedule: don't schedule in thread run method, terminate failed.", + static_cast(10), nValue_term + ); + } + + CPPUNIT_TEST_SUITE(schedule); + CPPUNIT_TEST(schedule_001); + CPPUNIT_TEST(schedule_002); + CPPUNIT_TEST_SUITE_END(); + }; // class schedule + + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::create, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::createSuspended, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::suspend, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::resume, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::terminate, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::join, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::isRunning, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::setPriority, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getPriority, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getIdentifier, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::getCurrentIdentifier, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::waittest, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::yield, "osl_Thread"); + CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Thread::schedule, "osl_Thread"); +} // namespace osl_Thread + +// destroy function when the binding thread terminate +static void destroyCallback(void * data) +{ + delete[] static_cast(data); +} + +static ThreadData myThreadData(destroyCallback); + +namespace { + +class myKeyThread : public Thread +{ +public: + // a public char member for test result checking + char m_Char_Test; + // for pass thread-special data to thread + explicit myKeyThread(const char cData) + : m_Char_Test(0) + { + m_nData = cData; + } +private: + char m_nData; + + void SAL_CALL run() override + { + char * pc = new char[2]; +// strcpy(pc, &m_nData); + memcpy(pc, &m_nData, 1); + pc[1] = '\0'; + + myThreadData.setData(pc); + char* pData = static_cast(myThreadData.getData()); + m_Char_Test = *pData; + // wait for long time to check the data value in main thread + ThreadHelper::thread_sleep_tenth_sec(3); + } +public: + virtual ~myKeyThread() override + { + if (isRunning()) + { + t_print("error: not terminated.\n"); + } + } +}; + +} + +static ThreadData idData; + +namespace { + +class idThread: public Thread +{ +public: + oslThreadIdentifier m_Id; +private: + void SAL_CALL run() override + { + std::unique_ptr pId( new oslThreadIdentifier ); + *pId = getIdentifier(); + idData.setData(pId.get()); + oslThreadIdentifier* pIdData = static_cast(idData.getData()); + //t_print("Thread %d has Data %d\n", getIdentifier(), *pIdData); + m_Id = *pIdData; + } + +public: + virtual ~idThread() override + { + if (isRunning()) + { + t_print("error: not terminated.\n"); + } + } +}; + +} + +namespace osl_ThreadData +{ + + class ctors : public CppUnit::TestFixture + { + public: + + // insert your test code here. + void ctor_001() + { + + } + + CPPUNIT_TEST_SUITE(ctors); + CPPUNIT_TEST(ctor_001); + CPPUNIT_TEST_SUITE_END(); + }; // class ctors + + class setData : public CppUnit::TestFixture + { + public: + + /** the same instance of the class can have different values in different threads + */ + void setData_001() + { + idThread aThread1; + aThread1.create(); + idThread aThread2; + aThread2.create(); + + aThread1.join(); + aThread2.join(); + + oslThreadIdentifier aThreadId1 = aThread1.getIdentifier(); + oslThreadIdentifier aThreadId2 = aThread2.getIdentifier(); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + aThread1.m_Id, aThreadId1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + aThread2.m_Id, aThreadId2 + ); + + } + + void setData_002() + { + // at first, set the data a value + char* pc = new char[2]; + char nData = 'm'; + pc[0] = nData; + pc[1] = '\0'; + + myThreadData.setData(pc); + + myKeyThread aThread1('a'); + aThread1.create(); + myKeyThread aThread2('b'); + aThread2.create(); + // aThread1 and aThread2 should have not terminated yet, check current data, not 'a' 'b' + char* pChar = static_cast(myThreadData.getData()); + char aChar = *pChar; + + aThread1.join(); + aThread2.join(); + + // the saved thread data of aThread1 & aThread2, different + char cData1 = aThread1.m_Char_Test; + char cData2 = aThread2.m_Char_Test; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'a', cData1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'b', cData2 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'm', aChar + ); + + } + /** setData the second time, and then getData + */ + void setData_003() + { + // at first, set the data a value + char* pc = new char[2]; + char nData = 'm'; + memcpy(pc, &nData, 1); + pc[1] = '\0'; + myThreadData.setData(pc); + + myKeyThread aThread1('a'); + aThread1.create(); + myKeyThread aThread2('b'); + aThread2.create(); + // aThread1 and aThread2 should have not terminated yet + // setData the second time + char* pc2 = new char[2]; + nData = 'o'; + memcpy(pc2, &nData, 1); + pc2[1] = '\0'; + + myThreadData.setData(pc2); + char* pChar = static_cast(myThreadData.getData()); + char aChar = *pChar; + + aThread1.join(); + aThread2.join(); + + // the saved thread data of aThread1 & aThread2, different + char cData1 = aThread1.m_Char_Test; + char cData2 = aThread2.m_Char_Test; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'a', cData1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'b', cData2 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'o', aChar + ); + } + + CPPUNIT_TEST_SUITE(setData); + CPPUNIT_TEST(setData_001); + CPPUNIT_TEST(setData_002); + CPPUNIT_TEST(setData_003); + CPPUNIT_TEST_SUITE_END(); + }; // class setData + + class getData : public CppUnit::TestFixture + { + public: + + // After setData in child threads, get Data in the main thread, should be independent + void getData_001() + { + char* pc = new char[2]; + strcpy(pc, "i"); + myThreadData.setData(pc); + + myKeyThread aThread1('c'); + aThread1.create(); + myKeyThread aThread2('d'); + aThread2.create(); + + aThread1.join(); + aThread2.join(); + + char cData1 = aThread1.m_Char_Test; + char cData2 = aThread2.m_Char_Test; + + char* pChar = static_cast(myThreadData.getData()); + char aChar = *pChar; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'c', cData1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'd', cData2 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'i', aChar + ); + } + + // setData then change the value in the address data pointer points, + // and then getData, should get the new value + void getData_002() + { + char* pc = new char[2]; + char nData = 'i'; + memcpy(pc, &nData, 1); + pc[1] = '\0'; + + myThreadData.setData(pc); + + myKeyThread aThread1('a'); + aThread1.create(); + myKeyThread aThread2('b'); + aThread2.create(); + + // change the value which pc points + char nData2 = 'j'; + memcpy(pc, &nData2, 1); + pc[1] = '\0'; + + void* pChar = myThreadData.getData(); + char aChar = *static_cast(pChar); + + aThread1.join(); + aThread2.join(); + + char cData1 = aThread1.m_Char_Test; + char cData2 = aThread2.m_Char_Test; + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'a', cData1 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'b', cData2 + ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "ThreadData setData: ", + 'j', aChar + ); + + } + + CPPUNIT_TEST_SUITE(getData); + CPPUNIT_TEST(getData_001); + CPPUNIT_TEST(getData_002); + CPPUNIT_TEST_SUITE_END(); + }; // class getData + + CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::ctors); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::setData); + CPPUNIT_TEST_SUITE_REGISTRATION(osl_ThreadData::getData); +} // namespace osl_ThreadData + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/process/osl_Thread.xsce b/sal/qa/osl/process/osl_Thread.xsce new file mode 100644 index 000000000..11d0c5da1 --- /dev/null +++ b/sal/qa/osl/process/osl_Thread.xsce @@ -0,0 +1,18 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +osl_Thread.setPriority.setPriority_001_1 unxsols4 diff --git a/sal/qa/osl/process/osl_process.cxx b/sal/qa/osl/process/osl_process.cxx new file mode 100644 index 000000000..c396a06b5 --- /dev/null +++ b/sal/qa/osl/process/osl_process.cxx @@ -0,0 +1,450 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifdef IOS +#define CPPUNIT_PLUGIN_EXPORTED_NAME cppunitTest_osl_process +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if defined HAVE_VALGRIND_HEADERS +#include +#elif !defined _WIN32 +#define RUNNING_ON_VALGRIND false +#endif + +#if !defined(_WIN32) // Windows +#include +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef UNX +#if defined( MACOSX ) +# include +# define environ (*_NSGetEnviron()) +# else + extern char** environ; +# endif +#endif + +using namespace osl; + +/** get binary Path. +*/ +static OUString getExecutablePath() +{ + OUString dirPath; + osl::Module::getUrlFromAddress( + reinterpret_cast(&getExecutablePath), dirPath); + dirPath = dirPath.copy( 0, dirPath.lastIndexOf('/') ); + dirPath = OUString::Concat(dirPath.subView( 0, dirPath.lastIndexOf('/') + 1)) + + "Executable"; + return dirPath; +} + +#if !defined _WIN32 + +namespace { + +class exclude +{ +public: + + explicit exclude(const std::vector& exclude_list) + { + for (auto& exclude_list_item : exclude_list) + exclude_list_.push_back(env_var_name(exclude_list_item)); + } + + bool operator() (const OString& env_var) const + { + return (exclude_list_.end() != + std::find( + exclude_list_.begin(), + exclude_list_.end(), + env_var_name(env_var))); + } + +private: + + // extract the name from an environment variable + // that is given in the form "NAME=VALUE" + static OString env_var_name(const OString& env_var) + { + sal_Int32 pos_equal_sign = + env_var.indexOf('='); + + if (pos_equal_sign != -1) + return env_var.copy(0, pos_equal_sign); + + return OString(); + } + +private: + std::vector exclude_list_; +}; + + void tidy_container(std::vector &env_container) + { + //sort them because there are no guarantees to ordering + std::sort(env_container.begin(), env_container.end()); + if (RUNNING_ON_VALGRIND) + { + env_container.erase( + std::remove_if( + env_container.begin(), env_container.end(), + [](OString const & s) { + return s.startsWith("LD_PRELOAD=") + || s.startsWith("VALGRIND_LIB="); }), + env_container.end()); + } + } +} + + static void read_parent_environment(std::vector* env_container) + { + for (int i = 0; environ[i] != nullptr; i++) + env_container->push_back(OString(environ[i])); + tidy_container(*env_container); + } + +#endif + +class Test_osl_executeProcess : public CppUnit::TestFixture +{ + const OUString env_param_; + + OUString temp_file_url_; + OUString temp_file_path_; + rtl_uString* parameters_[2]; + static const int parameters_count_ = 2; + OUString suCWD; + OUString suExecutableFileURL; + +public: + + // ctor + Test_osl_executeProcess() : + env_param_(OUString("-env")), suCWD(getExecutablePath()) + { + parameters_[0] = env_param_.pData; + +#if defined(_WIN32) + suExecutableFileURL = suCWD + "/" "osl_process_child.exe"; +#else + suExecutableFileURL = suCWD + "/" "osl_process_child"; +#endif + } + + virtual void setUp() override + { + temp_file_path_ = create_temp_file(temp_file_url_); + parameters_[1] = temp_file_path_.pData; + } + + virtual void tearDown() override + { + osl::File::remove(temp_file_url_); + } + + OUString create_temp_file(OUString &temp_file_url) + { + FileBase::RC rc = FileBase::createTempFile(nullptr, nullptr, &temp_file_url); + CPPUNIT_ASSERT_EQUAL_MESSAGE("createTempFile failed", FileBase::E_None, rc); + + OUString temp_file_path; + rc = FileBase::getSystemPathFromFileURL(temp_file_url, temp_file_path); + CPPUNIT_ASSERT_EQUAL_MESSAGE("getSystemPathFromFileURL failed", FileBase::E_None, rc); + + return temp_file_path; + } + +#if !defined _WIN32 + + void read_child_environment(std::vector* env_container) + { + OString temp_file_name = OUStringToOString(OUString( + parameters_[1]), osl_getThreadTextEncoding()); + std::ifstream file(temp_file_name.getStr()); + + CPPUNIT_ASSERT_MESSAGE + ( + "I/O error, cannot open child environment file", + file.is_open() + ); + + std::string line; + line.reserve(1024); + while (std::getline(file, line, '\0')) + env_container->push_back(OString(line.c_str())); + tidy_container(*env_container); + } + + // environment of the child process that was + // started. The child process writes his + // environment into a file + void compare_environments() + { + std::vector parent_env; + read_parent_environment(&parent_env); + + std::vector child_env; + read_child_environment(&child_env); + + OString msg( + OString::number(parent_env.size()) + "/" + + OString::number(child_env.size())); + auto min = std::min(parent_env.size(), child_env.size()); + for (decltype(min) i = 0; i != min; ++i) { + CPPUNIT_ASSERT_EQUAL_MESSAGE( + msg.getStr(), parent_env[i], child_env[i]); + } + if (parent_env.size() != child_env.size()) { + CPPUNIT_ASSERT_EQUAL_MESSAGE( + (parent_env.size() >= child_env.size() + ? parent_env.back() : child_env.back()).getStr(), + parent_env.size(), child_env.size()); + } + } + + // compare the equal environment parts and the + // different part of the child environment + bool compare_merged_environments(const std::vector& different_env_vars) + { + std::vector parent_env; + read_parent_environment(&parent_env); + + for (auto& env : parent_env) + std::cout << "initially parent env: " << env << "\n"; + + //remove the environment variables that we have changed + //in the child environment from the read parent environment + parent_env.erase( + std::remove_if(parent_env.begin(), parent_env.end(), exclude(different_env_vars)), + parent_env.end()); + + for (auto& env : parent_env) + std::cout << "stripped parent env: " << env << "\n"; + + //read the child environment and exclude the variables that + //are different + std::vector child_env; + read_child_environment(&child_env); + + for (auto& env : child_env) + std::cout << "initial child env: " << env << "\n"; + //partition the child environment into the variables that + //are different to the parent environment (they come first) + //and the variables that should be equal between parent + //and child environment + auto iter_logical_end = + std::stable_partition(child_env.begin(), child_env.end(), exclude(different_env_vars)); + + std::vector different_child_env_vars(child_env.begin(), iter_logical_end); + child_env.erase(child_env.begin(), iter_logical_end); + + for (auto& env : child_env) + std::cout << "stripped child env: " << env << "\n"; + + bool common_env_size_equals = (parent_env.size() == child_env.size()); + bool common_env_content_equals = std::equal(child_env.begin(), child_env.end(), parent_env.begin()); + + for (auto& env_var : different_env_vars) + std::cout << "different should be: " << env_var << "\n"; + + for (auto& env_var : different_child_env_vars) + std::cout << "different are: " << env_var << "\n"; + + bool different_env_size_equals = (different_child_env_vars.size() == different_env_vars.size()); + bool different_env_content_equals = + std::equal(different_env_vars.begin(), different_env_vars.end(), different_child_env_vars.begin()); + + return (common_env_size_equals && common_env_content_equals && + different_env_size_equals && different_env_content_equals); + } + + // test that parent and child process have the + // same environment when osl_executeProcess will + // be called without setting new environment + // variables + void osl_execProc_parent_equals_child_environment() + { + oslProcess process; + oslProcessError osl_error = osl_executeProcess( + suExecutableFileURL.pData, + parameters_, + parameters_count_, + osl_Process_NORMAL, + nullptr, + suCWD.pData, + nullptr, + 0, + &process); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createProcess failed", + osl_Process_E_None, osl_error + ); + + osl_error = ::osl_joinProcess(process); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_joinProcess returned with failure", + osl_Process_E_None, osl_error + ); + + osl_freeProcessHandle(process); + + compare_environments(); + } + + #define ENV1 "PAT=a:\\" + #define ENV2 "PATHb=b:\\" + #define ENV3 "Patha=c:\\" + #define ENV4 "Patha=d:\\" + + void osl_execProc_merged_child_environment() + { + rtl_uString* child_env[4]; + OUString env1(ENV1); + OUString env2(ENV2); + OUString env3(ENV3); + OUString env4(ENV4); + + child_env[0] = env1.pData; + child_env[1] = env2.pData; + child_env[2] = env3.pData; + child_env[3] = env4.pData; + + oslProcess process; + oslProcessError osl_error = osl_executeProcess( + suExecutableFileURL.pData, + parameters_, + parameters_count_, + osl_Process_NORMAL, + nullptr, + suCWD.pData, + child_env, + SAL_N_ELEMENTS(child_env), + &process); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createProcess failed", + osl_Process_E_None, osl_error + ); + + osl_error = ::osl_joinProcess(process); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_joinProcess returned with failure", + osl_Process_E_None, osl_error + ); + + osl_freeProcessHandle(process); + + std::vector different_child_env_vars + { + ENV1, + ENV2, + ENV4 + }; + + CPPUNIT_ASSERT_MESSAGE + ( + "osl_execProc_merged_child_environment", + compare_merged_environments(different_child_env_vars) + ); + } + +#endif + + void osl_execProc_test_batch() + { + oslProcess process; +#if defined(_WIN32) + OUString suBatch = suCWD + "/batch.bat"; +#else + OUString suBatch = suCWD + "/batch.sh"; +#endif + oslProcessError osl_error = osl_executeProcess( + suBatch.pData, + nullptr, + 0, + osl_Process_NORMAL, + nullptr, + suCWD.pData, + nullptr, + 0, + &process); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createProcess failed", + osl_Process_E_None, osl_error + ); + + osl_error = ::osl_joinProcess(process); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_joinProcess returned with failure", + osl_Process_E_None, osl_error + ); + + osl_freeProcessHandle(process); + } + + CPPUNIT_TEST_SUITE(Test_osl_executeProcess); + //TODO: Repair these (at least under Windows) +#if !defined(_WIN32) + CPPUNIT_TEST(osl_execProc_parent_equals_child_environment); + CPPUNIT_TEST(osl_execProc_merged_child_environment); +#endif + CPPUNIT_TEST(osl_execProc_test_batch); + ///TODO: Repair test (or tested function ;-) - test fails. + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test_osl_executeProcess); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/process/osl_process_child.cxx b/sal/qa/osl/process/osl_process_child.cxx new file mode 100644 index 000000000..17f749bc2 --- /dev/null +++ b/sal/qa/osl/process/osl_process_child.cxx @@ -0,0 +1,101 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#if defined(_WIN32) // Windows +# define WIN32_LEAN_AND_MEAN +# include +#else +# include +#endif + +#include +#include +#include +#include + + +#ifdef UNX +#if defined( MACOSX ) +# include +# define environ (*_NSGetEnviron()) +# else + extern char** environ; +# endif +#endif + +#ifdef _WIN32 +# define SLEEP(t) (Sleep((t)*1000)) +#else +# define SLEEP(t) (sleep((t))) +#endif + +static void wait_for_seconds(char* time) +{ + SLEEP(atoi(time)); +} + +#ifdef _WIN32 + +static void w_to_a(LPCWSTR strW, LPSTR strA, DWORD size) +{ + WideCharToMultiByte(CP_ACP, 0, strW, -1, strA, size, nullptr, nullptr); +} + + static void dump_env(char* file_path) + { + LPWSTR env = GetEnvironmentStringsW(); + LPWSTR p = env; + + std::ofstream file(file_path); + + char buffer[32767]; + while (size_t l = wcslen(p)) + { + w_to_a(p, buffer, sizeof(buffer)); + file << buffer << '\0'; + p += l + 1; + } + FreeEnvironmentStringsW(env); + } +#else + static void dump_env(char* file_path) + { + std::ofstream file(file_path); + for (int i = 0; environ[i] != nullptr; ++i) + file << environ[i] << '\0'; + } +#endif + +int main(int argc, char* argv[]) +{ + if (argc > 2) + { + if (strcmp("-join", argv[1]) == 0) + { + // coverity[tainted_data] - this is a build-time only test tool + wait_for_seconds(argv[2]); + } + else if (strcmp("-env", argv[1]) == 0) + dump_env(argv[2]); + } + + return 0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/profile/osl_old_testprofile.cxx b/sal/qa/osl/profile/osl_old_testprofile.cxx new file mode 100644 index 000000000..d1556bb15 --- /dev/null +++ b/sal/qa/osl/profile/osl_old_testprofile.cxx @@ -0,0 +1,62 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include + +#include +#include + +namespace osl_Profile +{ + class oldtests : public CppUnit::TestFixture + { + public: + void test_profile(); + + CPPUNIT_TEST_SUITE( oldtests ); + CPPUNIT_TEST( test_profile ); + CPPUNIT_TEST_SUITE_END( ); + }; + +void oldtests::test_profile() +{ + OUString baseUrl; + CPPUNIT_ASSERT(rtl::Bootstrap::get("UserInstallation", baseUrl)); + + // successful write + oslProfile hProfile = osl_openProfile( OUString(baseUrl + "/soffice.ini").pData, osl_Profile_WRITELOCK ); + CPPUNIT_ASSERT(hProfile != nullptr); + CPPUNIT_ASSERT_MESSAGE( + "cannot write into init file", + osl_writeProfileBool( hProfile, "testsection", "testbool", true )); + CPPUNIT_ASSERT(osl_closeProfile( hProfile )); + + // unsuccessful open + CPPUNIT_ASSERT_EQUAL(oslProfile(nullptr), osl_openProfile( OUString(baseUrl + "/not_existing_path/soffice.ini").pData, osl_Profile_WRITELOCK )); +} + +} // namespace osl_Profile + +CPPUNIT_TEST_SUITE_REGISTRATION( osl_Profile::oldtests ); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/security/TODO.h b/sal/qa/osl/security/TODO.h new file mode 100644 index 000000000..082c54633 --- /dev/null +++ b/sal/qa/osl/security/TODO.h @@ -0,0 +1,8 @@ +#include "sal/types.h" +#define T1(x) do { x; } while (0) +#define T2(x) do { x; } while (sal_False) +#define T3(x) do { x; } while (false) +#define T4(x, y) do { x; } while (y) +#define T5(x) T4(x, 0) +#define T6(x) T4(x, sal_False) +#define T7(x) T4(x, false) diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx new file mode 100644 index 000000000..34417cd14 --- /dev/null +++ b/sal/qa/osl/security/osl_Security.cxx @@ -0,0 +1,624 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#ifdef _WIN32 +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#undef min +#endif +#include "osl_Security_Const.h" +#include +#include +#include +#include +#include + +using namespace osl; +using namespace rtl; + +/** print a UNICODE String. +*/ +static void printUString( const OUString & str ) +{ + //t_print("#printUString_u# " ); + OString aString = OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); + t_print("%s\n", aString.getStr( ) ); +} + +// test code start here + +namespace osl_Security +{ + + /** testing the method: + Security() + */ + class ctors : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void ctors_001( ) + { + ::osl::Security aSec; + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: create a security its handle should not be NULL.", + aSec.getHandle( ) != nullptr ); + } + + CPPUNIT_TEST_SUITE( ctors ); + CPPUNIT_TEST( ctors_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class ctors + + /** testing the methods: + inline sal_Bool SAL_CALL logonUser(const OUString& strName, + const OUString& strPasswd); + inline sal_Bool SAL_CALL logonUser(const OUString & strName, + const OUString & strPasswd, + const OUString & strFileServer); + */ + class logonUser : public CppUnit::TestFixture + { + public: + bool bRes; + + void logonUser_user_pwd( ) + { + ::osl::Security aSec; + bRes = aSec.logonUser( aLogonUser, aLogonPasswd ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd, passed in (UNX), failed in (W32).", + bRes ); + } + + void logonUser_user_pwd_server( ) + { + ::osl::Security aSec; + bRes = aSec.logonUser( aLogonUser, aLogonPasswd, aFileServer ); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd and server name, failed in (UNX)(W32).", + bRes ); + } + + CPPUNIT_TEST_SUITE( logonUser ); + if ( !aStringForward.isEmpty() && aStringForward.indexOf( ' ' ) != -1 && ( aStringForward.indexOf( ' ' ) == aStringForward.lastIndexOf( ' ' ) ) ) + /// if user name and passwd are forwarded + { + CPPUNIT_TEST( logonUser_user_pwd ); + } + if ( !aStringForward.isEmpty() && aStringForward.indexOf( ' ' ) != -1 && ( aStringForward.indexOf( ' ' ) != aStringForward.lastIndexOf( ' ' ) ) ) + /// if user name and passwd and file server are forwarded + { + CPPUNIT_TEST( logonUser_user_pwd_server ); + } + CPPUNIT_TEST_SUITE_END( ); + }; // class logonUser + + /** testing the method: + inline sal_Bool Security::getUserIdent( OUString& strIdent) const + */ + class getUserIdent : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getUserIdent_001( ) + { + ::osl::Security aSec; + OUString strID; + bRes = aSec.getUserIdent( strID ); + + OString aMessage = "strUserID: " + + OUStringToOString(strUserID, osl_getThreadTextEncoding()) + + ", strID: " + + OUStringToOString(strID, osl_getThreadTextEncoding()) + + ", bRes: " + + OString::boolean(bRes); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( aMessage.getStr(), strUserID, strID ); + CPPUNIT_ASSERT_MESSAGE( aMessage.getStr(), bRes ); + } + + CPPUNIT_TEST_SUITE( getUserIdent ); + CPPUNIT_TEST( getUserIdent_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getUserIdent + + /** testing the method: + inline sal_Bool SAL_CALL getUserName( OUString& strName) const; + */ + class getUserName : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getUserName_001( ) + { + ::osl::Security aSec; +#ifdef _WIN32 + OUString strName( strUserName ), strGetName; +#else + OUString strName( strUserName ), strGetName; +#endif + bRes = aSec.getUserName( strGetName ); + + sal_Int32 nPos = -1; + if (!strName.isEmpty()) + { + nPos = strGetName.indexOf(strName); + } + CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.", + ( nPos >= 0 ) ); + CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.", + bRes ); + } + + CPPUNIT_TEST_SUITE( getUserName ); + CPPUNIT_TEST( getUserName_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getUserName + + /** testing the method: + inline sal_Bool Security::getConfigDir( OUString& strDirectory ) const + */ + class getConfigDir : public CppUnit::TestFixture + { + public: + bool bRes, bRes1; + + void getConfigDir_001( ) + { + ::osl::Security aSec; + OUString strConfig; + bRes = aSec.getConfigDir( strConfig ); + + CPPUNIT_ASSERT_MESSAGE( "failed to find a ConfigDir!", bRes ); + } + + CPPUNIT_TEST_SUITE( getConfigDir ); + CPPUNIT_TEST( getConfigDir_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getConfigDir + + /** testing the method: + inline sal_Bool SAL_CALL isAdministrator() const; + */ + class isAdministrator : public CppUnit::TestFixture + { + public: + bool bRes; + + void isAdministrator_001( ) + { + ::osl::Security aSec; + bRes = aSec.isAdministrator( ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#test comment#: check if the user is administrator at beginning, compare here.", + isAdmin, bRes ); + } + + CPPUNIT_TEST_SUITE( isAdministrator ); + CPPUNIT_TEST( isAdministrator_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class isAdministrator + + /** testing the method: + inline oslSecurity getHandle() const; + */ + class getHandle : public CppUnit::TestFixture + { + public: + bool bRes; + + void getHandle_001( ) + { + ::osl::Security aSec; + bRes = aSec.isAdministrator( ) == bool(osl_isAdministrator( aSec.getHandle( ) )); + + CPPUNIT_ASSERT_MESSAGE( "#test comment#: use getHandle function to call C API.", + bRes ); + } + + CPPUNIT_TEST_SUITE( getHandle ); + CPPUNIT_TEST( getHandle_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class getHandle + + class UserProfile : public CppUnit::TestFixture + { + public: + + void loadUserProfile( ) + { + ::osl::Security aSec; + bool bValue = osl_loadUserProfile(aSec.getHandle()); + + CPPUNIT_ASSERT_MESSAGE( "empty function.", !bValue ); + } + + void unloadUserProfile( ) + { + ::osl::Security aSec; + osl_unloadUserProfile(aSec.getHandle()); + CPPUNIT_ASSERT_MESSAGE( "empty function.", true ); + } + + CPPUNIT_TEST_SUITE( UserProfile ); + CPPUNIT_TEST( loadUserProfile ); + CPPUNIT_TEST( unloadUserProfile ); + CPPUNIT_TEST_SUITE_END( ); + }; // class UserProfile + + class loginUserOnFileServer : public CppUnit::TestFixture + { + public: + + void loginUserOnFileServer_001( ) + { + OUString suUserName; + OUString suPassword; + OUString suFileServer; + ::osl::Security aSec; + oslSecurity pSec = aSec.getHandle(); + + oslSecurityError erg = osl_loginUserOnFileServer(suUserName.pData, suPassword.pData, suFileServer.pData, &pSec); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( "empty function.", osl_Security_E_UserUnknown, erg ); + } + + CPPUNIT_TEST_SUITE( loginUserOnFileServer ); + CPPUNIT_TEST( loginUserOnFileServer_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; // class loginUserOnFileServer + +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::ctors); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::logonUser); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserIdent); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getUserName); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getConfigDir); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::isAdministrator); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::getHandle); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::UserProfile); +CPPUNIT_TEST_SUITE_REGISTRATION(osl_Security::loginUserOnFileServer); + +} // namespace osl_Security + +/* This defines an own TestPlugIn implementation with an own initialize() + method that will be called after loading the PlugIn + */ +#include + +namespace { + +class MyTestPlugInImpl: public CPPUNIT_NS::TestPlugInDefaultImpl +{ + public: + MyTestPlugInImpl() {}; + void initialize( CPPUNIT_NS::TestFactoryRegistry *registry, + const CPPUNIT_NS::PlugInParameters ¶meters ) override; +}; + +} + +void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *, + const CPPUNIT_NS::PlugInParameters & ) +{ + /// start message + t_print("#Initializing ...\n" ); + t_print("#\n#logonUser function need root/Administrator account to test.\n" ); + t_print("#You can test by login with root/Administrator, and execute:\n" ); + t_print("#testshl2 -forward \"username password\" ../../../wntmsci9/bin/Security.dll\n" ); + t_print("# where username and password are forwarded account info.\n" ); + t_print("#if no text forwarded, this function will be skipped.\n" ); + + /// get system information +#if ( defined UNX ) + /// some initialization work for UNIX OS + + struct passwd* pw; + CPPUNIT_ASSERT_MESSAGE( "getpwuid: no password entry\n",( pw = getpwuid( getuid() ) ) != nullptr ); + + /// get user ID; + strUserID = OUString::number( getuid( ) ); + + /// get user Name; + strUserName = OUString::createFromAscii( pw->pw_name ); + + /// get home directory; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.", + ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString::createFromAscii( pw->pw_dir ), strHomeDirectory ) ); + + /// get config directory; + strConfigDirectory = strHomeDirectory.copy(0); + + /// is administrator; + if( !getuid( ) ) + isAdmin = true; + +#endif +#if defined(_WIN32) + /// some initialization work for Windows OS + + /// Get the user name, computer name, user home directory. + LPWSTR lpszSystemInfo; // pointer to system information string + DWORD cchBuff = BUFSIZE; // size of computer or user name + WCHAR wchBuffer[BUFSIZE]; // buffer for string + + lpszSystemInfo = wchBuffer; + if( GetUserNameW(lpszSystemInfo, &cchBuff) ) + strUserName = o3tl::toU(lpszSystemInfo); + + cchBuff = BUFSIZE; + if( GetComputerNameW(lpszSystemInfo, &cchBuff) ) + strComputerName = o3tl::toU(lpszSystemInfo); + + /// Get user home directory. + HKEY hRegKey; + if (RegOpenKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &hRegKey) == ERROR_SUCCESS) + { + sal_Unicode PathW[_MAX_PATH]; + LSTATUS lRet; + DWORD lSize = sizeof(PathW); + DWORD Type; + + lRet = RegQueryValueExW(hRegKey, L"AppData", nullptr, &Type, reinterpret_cast(PathW), &lSize); + if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _waccess( o3tl::toW(PathW), 0 ) == 0 ) ) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.", + ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString(PathW), strConfigDirectory ) ); + } + + lSize = sizeof(PathW); + lRet = RegQueryValueExW(hRegKey, L"Personal", nullptr, &Type, reinterpret_cast(PathW), &lSize); + if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _waccess( o3tl::toW(PathW), 0 ) == 0 ) ) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE( "#Convert from system path to URL failed.", + ::osl::File::E_None, ::osl::File::getFileURLFromSystemPath( OUString(PathW), strHomeDirectory ) ); + } + + RegCloseKey(hRegKey); + } + + /// Get user Security ID: + + // Create buffers that may be large enough. If a buffer is too small, the count parameter will be set to the size needed. + const DWORD INITIAL_SIZE = 32; + DWORD cbSid = 0; + DWORD dwSidBufferSize = INITIAL_SIZE; + DWORD cchDomainName = 0; + DWORD dwDomainBufferSize = INITIAL_SIZE; + WCHAR * wszDomainName = nullptr; + SID_NAME_USE eSidType; + DWORD dwErrorCode = 0; + + OUString sLookupUserName = strUserName; + LPCWSTR wszAccName = o3tl::toW(sLookupUserName.getStr( )); + + // Create buffers for the SID and the domain name. + PSID pSid = static_cast(new BYTE[dwSidBufferSize]); + memset( pSid, 0, dwSidBufferSize); + + wszDomainName = new WCHAR[dwDomainBufferSize]; + memset(wszDomainName, 0, dwDomainBufferSize*sizeof(WCHAR)); + + // Obtain the SID for the account name passed. + for ( ; ; ) + { + // Set the count variables to the buffer sizes and retrieve the SID. + cbSid = dwSidBufferSize; + cchDomainName = dwDomainBufferSize; + if (LookupAccountNameW( + nullptr, // Computer name. NULL for the local computer + wszAccName, + pSid, // Pointer to the SID buffer. Use NULL to get the size needed, + &cbSid, // Size of the SID buffer needed. + wszDomainName, // wszDomainName, + &cchDomainName, + &eSidType + )) + { + if (eSidType == SID_NAME_USE::SidTypeDomain) + { + // LookupAccountNameW returned SID of a domain; likely the hostname is the same as + // username (case-insensitive): something like "JOHNSMITH\JohnSmith", so looking up + // for "JohnSmith" without domain returns domain itself. Try getting the SID of the + // user using fully qualified name (the case of user of another domain having name + // identical this hostname is not handled). + sLookupUserName = OUString::Concat(o3tl::toU(wszDomainName)) + u"\\" + strUserName; + wszAccName = o3tl::toW(sLookupUserName.getStr()); + continue; + } + if (IsValidSid( pSid) == FALSE) + wprintf(L"# The SID for %s is invalid.\n", wszAccName); + break; + } + dwErrorCode = GetLastError(); + + // Check if one of the buffers was too small. + if (dwErrorCode == ERROR_INSUFFICIENT_BUFFER) + { + if (cbSid > dwSidBufferSize) + { + // Reallocate memory for the SID buffer. + wprintf(L"# The SID buffer was too small. It will be reallocated.\n"); + delete[] static_cast(pSid); + pSid = static_cast(new BYTE[cbSid]); + memset( pSid, 0, cbSid); + dwSidBufferSize = cbSid; + } + if (cchDomainName > dwDomainBufferSize) + { + // Reallocate memory for the domain name buffer. + wprintf(L"# The domain name buffer was too small. It will be reallocated.\n"); + delete [] wszDomainName; + wszDomainName = new WCHAR[cchDomainName]; + memset(wszDomainName, 0, cchDomainName*sizeof(WCHAR)); + dwDomainBufferSize = cchDomainName; + } + } + else + { + wprintf(L"# LookupAccountNameW failed. GetLastError returned: %d\n", dwErrorCode); + break; + } + } + + LPWSTR pSidStr = nullptr; + if (ConvertSidToStringSidW(pSid, &pSidStr)) + { + strUserID = o3tl::toU(pSidStr); + LocalFree(pSidStr); + } + else + { + wprintf(L"# ConvertSidToStringSidW failed. GetLastError returned: %d\n", GetLastError()); + } + + delete [] static_cast(pSid); + delete [] wszDomainName; + + /// check if logged in user is administrator: + + BOOL b; + SID_IDENTIFIER_AUTHORITY NtAuthority = { SECURITY_NT_AUTHORITY }; + PSID AdministratorsGroup; + b = AllocateAndInitializeSid( + &NtAuthority, + 2, + SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, + 0, 0, 0, 0, 0, 0, + &AdministratorsGroup); + if(b) + { + if (!CheckTokenMembership( nullptr, AdministratorsGroup, &b)) + { + b = FALSE; + } + FreeSid(AdministratorsGroup); + } + + isAdmin = b; + +#endif + + /// print the information. + t_print("#\n#Retrieved system information is below:\n"); + + t_print("Computer Name: "); + if ( strComputerName.isEmpty()) + t_print("Not retrieved\n" ); + else + printUString( strComputerName ); + + t_print("Current User Name: "); + if ( strUserName.isEmpty()) + t_print("Not retrieved\n" ); + else + printUString( strUserName ); + + t_print("Current User Home Directory:"); + if ( strHomeDirectory.isEmpty()) + t_print("Not retrieved\n" ); + else + printUString( strHomeDirectory ); + + t_print("Current Config Directory: "); + if ( strConfigDirectory.isEmpty()) + t_print("Not retrieved\n" ); + else + printUString( strConfigDirectory ); + + t_print("Current UserID: "); + if ( strUserID.isEmpty()) + t_print("Not retrieved\n" ); + else + printUString( strUserID ); + + t_print("Current User is: "); + if ( !isAdmin ) + t_print("NOT Administrator.\n" ); + else + t_print("Administrator.\n" ); + + /// get and display forwarded text if available. + OUString args[ 3 ]; + int argsCount = 0; + sal_uInt32 n = rtl_getAppCommandArgCount(); + for (sal_uInt32 i = 0; i < n; ++i) + { + OUString arg; + rtl_getAppCommandArg(i, &arg.pData); + if( arg.startsWith("-") ) + continue; + if( argsCount >= 3 ) + { + SAL_WARN( "sal.osl", "Too many test arguments" ); + continue; + } + args[ argsCount++ ] = arg; + } + /// only forwarded two parameters, username and password. + if( argsCount == 2 ) + { + aLogonUser = args[ 0 ]; + t_print("\n#Forwarded username: "); + printUString( aLogonUser); + + aLogonPasswd = args[ 1 ]; + t_print("#Forwarded password: "); + for (int i = 0; i < aLogonPasswd.getLength(); ++i) + t_print("*"); + t_print("\n" ); + } + else if( argsCount == 3 ) + /// forwarded three parameters, username, password and fileserver. + { + aLogonUser = args[ 0 ]; + t_print("#Forwarded username: "); + printUString( aLogonUser); + + aLogonPasswd = args[ 1 ]; + t_print("#Forwarded password: "); + for (int i = 0; i < aLogonPasswd.getLength(); ++i) + t_print("*"); + t_print("\n" ); + + aFileServer = args[ 2 ]; + t_print("#Forwarded FileServer: "); + printUString( aFileServer ); + } + t_print("#\n#Initialization Done.\n" ); + +} + +/* Instantiate and register the own TestPlugIn and instantiate the default + main() function. + (This is done by CPPUNIT_PLUGIN_IMPLEMENT() for TestPlugInDefaultImpl) + */ + +CPPUNIT_PLUGIN_EXPORTED_FUNCTION_IMPL( MyTestPlugInImpl ); +CPPUNIT_PLUGIN_IMPLEMENT_MAIN(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/security/osl_Security_Const.h b/sal/qa/osl/security/osl_Security_Const.h new file mode 100644 index 000000000..8329962a3 --- /dev/null +++ b/sal/qa/osl/security/osl_Security_Const.h @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H +#define INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H + +#if defined(_WIN32) // Windows +#include +#endif + +#include +#include +#include +#include + +#include +#include + +#if (defined UNX) +#include +#include +#endif + +#include +#include +#include +#include + +#define t_print printf + +#define BUFSIZE 1024 +const char pTestString[17] = "Sun Microsystems"; + +OUString aLogonUser, aLogonPasswd, aFileServer, aStringForward; +OUString strUserName, strComputerName, strHomeDirectory; +OUString strConfigDirectory, strUserID; + +bool isAdmin = false; + +#endif // INCLUDED_SAL_QA_OSL_SECURITY_OSL_SECURITY_CONST_H + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/setthreadname/test-setthreadname.cxx b/sal/qa/osl/setthreadname/test-setthreadname.cxx new file mode 100644 index 000000000..9af8793eb --- /dev/null +++ b/sal/qa/osl/setthreadname/test-setthreadname.cxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace { + +class TestThread: public osl::Thread { +private: + virtual void SAL_CALL run() override; +public: + TestThread() = default; + TestThread(const TestThread&) = delete; + TestThread& operator=(const TestThread&) = delete; +}; + +void TestThread::run() { +#if defined(_WIN32) + if (std::getenv("URE_TEST_SETTHREADNAME") != nullptr) { + // On Windows, setting thread names appears to only take effect when the + // process is being debugged, so attach a debugger now: + std::cout << "set: "; + std::cin.ignore(std::numeric_limits< int >::max(), '\n'); + } +#endif + setName("TestThread"); + if (std::getenv("URE_TEST_SETTHREADNAME") != nullptr) { + // On Linux, the thread name can now be observed with "ps -L"; on + // Windows, the thread name can now be observed in a debugger. + std::cout << "stop: "; + std::cin.ignore(std::numeric_limits< int >::max(), '\n'); + } +} + +class Test: public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); + + void test(); +}; + +void Test::test() { + TestThread t; + t.create(); + t.join(); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/osl/socket.cxx b/sal/qa/osl/socket.cxx new file mode 100644 index 000000000..ed31c9ede --- /dev/null +++ b/sal/qa/osl/socket.cxx @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include + +#include +#include + +namespace +{ +class SocketTest : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE(SocketTest); + CPPUNIT_TEST(test_createInetSocketAddr); + CPPUNIT_TEST(test_createInetBroadcastAddr); + CPPUNIT_TEST_SUITE_END(); + + void test_createInetSocketAddr() + { + OUString const in("123.4.56.78"); + auto const addr = osl_createInetSocketAddr(in.pData, 100); + CPPUNIT_ASSERT(addr != nullptr); + CPPUNIT_ASSERT_EQUAL(osl_Socket_FamilyInet, osl_getFamilyOfSocketAddr(addr)); + OUString out; + auto const res = osl_getDottedInetAddrOfSocketAddr(addr, &out.pData); + CPPUNIT_ASSERT_EQUAL(osl_Socket_Ok, res); + CPPUNIT_ASSERT_EQUAL(in, out); + CPPUNIT_ASSERT_EQUAL(sal_Int32(100), osl_getInetPortOfSocketAddr(addr)); + osl_destroySocketAddr(addr); + } + + void test_createInetBroadcastAddr() + { + OUString const in("123.4.56.78"); + auto const addr = osl_createInetBroadcastAddr(in.pData, 100); + CPPUNIT_ASSERT(addr != nullptr); + CPPUNIT_ASSERT_EQUAL(osl_Socket_FamilyInet, osl_getFamilyOfSocketAddr(addr)); + OUString out; + auto const res = osl_getDottedInetAddrOfSocketAddr(addr, &out.pData); + CPPUNIT_ASSERT_EQUAL(osl_Socket_Ok, res); + CPPUNIT_ASSERT_EQUAL(OUString("123.255.255.255"), out); + CPPUNIT_ASSERT_EQUAL(sal_Int32(100), osl_getInetPortOfSocketAddr(addr)); + osl_destroySocketAddr(addr); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(SocketTest); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/osl/thread/test_thread.cxx b/sal/qa/osl/thread/test_thread.cxx new file mode 100644 index 000000000..12ddafc6d --- /dev/null +++ b/sal/qa/osl/thread/test_thread.cxx @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include "osl/conditn.hxx" +#include "osl/thread.hxx" +#include "osl/time.h" +#include + +namespace { + +osl::Condition global; + +class Thread: public osl::Thread { +public: + explicit Thread(osl::Condition & cond): m_cond(cond) {} + +private: + virtual void SAL_CALL run() {} + + virtual void SAL_CALL onTerminated() { + m_cond.set(); + CPPUNIT_ASSERT_EQUAL(osl::Condition::result_ok, global.wait()); + } + + osl::Condition & m_cond; +}; + +class Test: public CppUnit::TestFixture { +public: + // Nondeterministic, best effort test that an osl::Thread can be destroyed + // (and in particular osl_destroyThread---indirectly---be called) before the + // corresponding thread has terminated: + void test() { + for (int i = 0; i < 50; ++i) { + osl::Condition c; + Thread t(c); + CPPUNIT_ASSERT(t.create()); + // Make sure virtual Thread::run/onTerminated are called before + // Thread::~Thread: + CPPUNIT_ASSERT_EQUAL(osl::Condition::result_ok, c.wait()); + } + // Make sure Thread::~Thread is called before each spawned thread + // terminates: + global.set(); + // Give the spawned threads enough time to terminate: + osl::Thread::wait(std::chrono::seconds(20)); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/alloc/rtl_alloc.cxx b/sal/qa/rtl/alloc/rtl_alloc.cxx new file mode 100644 index 000000000..419a3f3b0 --- /dev/null +++ b/sal/qa/rtl/alloc/rtl_alloc.cxx @@ -0,0 +1,211 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include + +#include "../../../rtl/strimp.hxx" + +#include + +namespace rtl_alloc +{ + + // small memory check routine, which return false, if there is a problem + + static bool checkMemory(const char* _pMemory, sal_uInt32 _nSize, char _n) + { + bool bOk = true; + + for (sal_uInt32 i=0;i<_nSize;i++) + { + if (_pMemory[i] != _n) + { + bOk = false; + } + } + return bOk; + } + +class Memory : public CppUnit::TestFixture +{ + // for normal alloc functions + char *m_pMemory; + static const sal_uInt32 m_nSizeOfMemory = 1024; + +public: + Memory() + : m_pMemory(nullptr) + { + } + + // initialise your test code values here. + void setUp() override + { + m_pMemory = static_cast(rtl_allocateMemory( m_nSizeOfMemory )); + } + + void tearDown() override + { + rtl_freeMemory(m_pMemory); + m_pMemory = nullptr; + } + + void rtl_allocateMemory_001() + { + CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", m_pMemory != nullptr); + memset(m_pMemory, 1, m_nSizeOfMemory); + CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pMemory, m_nSizeOfMemory, 1)); + } + + void rtl_reallocateMemory_001() + { + sal_uInt32 nSize = 2 * 1024; + m_pMemory = static_cast(rtl_reallocateMemory(m_pMemory, nSize)); + + CPPUNIT_ASSERT_MESSAGE( "Can reallocate memory.", m_pMemory != nullptr); + memset(m_pMemory, 2, nSize); + CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pMemory, nSize, 2)); + } + + CPPUNIT_TEST_SUITE(Memory); + CPPUNIT_TEST(rtl_allocateMemory_001); + CPPUNIT_TEST(rtl_reallocateMemory_001); + CPPUNIT_TEST_SUITE_END(); +}; // class test + +class TestZeroMemory : public CppUnit::TestFixture +{ + // for zero functions + char *m_pZeroMemory; + static const sal_uInt32 m_nSizeOfZeroMemory = 50 * 1024 * 1024; + +public: + TestZeroMemory() + : m_pZeroMemory(nullptr) + { + } + + // initialise your test code values here. + void setUp() override + { + m_pZeroMemory = static_cast(rtl_allocateZeroMemory( m_nSizeOfZeroMemory )); + } + + void tearDown() override + { + rtl_freeZeroMemory(m_pZeroMemory, m_nSizeOfZeroMemory); + // LLA: no check possible, may GPF if there is something wrong. + // CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", pZeroMemory != NULL); + } + + // insert your test code here. + + void rtl_allocateZeroMemory_001() + { + CPPUNIT_ASSERT_MESSAGE( "Can get zero memory.", m_pZeroMemory != nullptr); + CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pZeroMemory, m_nSizeOfZeroMemory, 0)); + + memset(m_pZeroMemory, 3, m_nSizeOfZeroMemory); + CPPUNIT_ASSERT_MESSAGE( "memory contains wrong value.", checkMemory(m_pZeroMemory, m_nSizeOfZeroMemory, 3)); + } + + CPPUNIT_TEST_SUITE(TestZeroMemory); + CPPUNIT_TEST(rtl_allocateZeroMemory_001); + CPPUNIT_TEST_SUITE_END(); +}; + +class TestPreinit : public CppUnit::TestFixture +{ +public: + TestPreinit() + { + } + + // initialise your test code values here. + void setUp() override + { + } + + void tearDown() override + { + } + + // insert your test code here. + + void test() + { + const char sample[] = "Hello World"; + std::vector aStrings; + + rtl_alloc_preInit(true); + + OUString aFoo("foo"); + + // fill some cache bits + for (int iter = 0; iter < 4; iter++) + { + for (int i = 1; i < 4096; i += 8) + { + OUStringBuffer aBuf(i); + aBuf.appendAscii(sample, (i/8) % (SAL_N_ELEMENTS(sample)-1)); + OUString aStr = aBuf.makeStringAndClear(); + aStrings.push_back(aStr); + } + // free some pieces to make holes + for (size_t i = iter; i < aStrings.size(); i += 17) + aStrings[i] = aFoo; + } + + for (size_t i = 0; i < aStrings.size(); ++i) + { + CPPUNIT_ASSERT_MESSAGE( "not static before.", !(aStrings[i].pData->refCount & SAL_STRING_STATIC_FLAG) ); + } + + // should static-ize all the strings. + rtl_alloc_preInit(false); + + for (size_t i = 0; i < aStrings.size(); ++i) + CPPUNIT_ASSERT_MESSAGE( "static after.", (aStrings[i].pData->refCount & SAL_STRING_STATIC_FLAG) ); + } + + void test2() + { + // should never happen but lets try it again. + test(); + } + + CPPUNIT_TEST_SUITE(TestPreinit); + CPPUNIT_TEST(test); + CPPUNIT_TEST(test2); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::Memory); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::TestZeroMemory); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_alloc::TestPreinit); +} // namespace rtl_alloc + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/bootstrap/expand.cxx b/sal/qa/rtl/bootstrap/expand.cxx new file mode 100644 index 000000000..e9799c15f --- /dev/null +++ b/sal/qa/rtl/bootstrap/expand.cxx @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include + +namespace { + +class Test: public CppUnit::TestFixture { +public: + virtual void setUp() override; + +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testDollar); + CPPUNIT_TEST(testIndirectDollar); + CPPUNIT_TEST_SUITE_END(); + + void testDollar(); + + void testIndirectDollar(); +}; + +void Test::setUp() { + rtl::Bootstrap::set("TEST", ""); + rtl::Bootstrap::set("WITH_DOLLAR", "foo\\$TEST"); + rtl::Bootstrap::set("INDIRECT", "$WITH_DOLLAR"); +} + +void Test::testDollar() { + OUString s("$WITH_DOLLAR"); + rtl::Bootstrap::expandMacros(s); + CPPUNIT_ASSERT_EQUAL(OUString("foo$TEST"), s); +} + +void Test::testIndirectDollar() { + OUString s("$INDIRECT"); + rtl::Bootstrap::expandMacros(s); + CPPUNIT_ASSERT_EQUAL(OUString("foo$TEST"), s); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/cipher/rtl_cipher.cxx b/sal/qa/rtl/cipher/rtl_cipher.cxx new file mode 100644 index 000000000..1f6852184 --- /dev/null +++ b/sal/qa/rtl/cipher/rtl_cipher.cxx @@ -0,0 +1,600 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include + +#include +#include + +namespace rtl_cipher +{ + +class create : public CppUnit::TestFixture +{ +public: + + void create_001() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); +#endif + } + void create_002() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeECB); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast(nullptr), aCipher); + } + void create_003() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); +#endif + } + void create_004() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeCBC); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast(nullptr), aCipher); + } + void create_005() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeStream); + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); + } + void create_006() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeStream); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast(nullptr), aCipher); + } + void create_007() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeInvalid); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast(nullptr), aCipher); + } + void create_008() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmInvalid, rtl_Cipher_ModeInvalid); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast(nullptr), aCipher); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(create); + CPPUNIT_TEST(create_001); + CPPUNIT_TEST(create_002); + CPPUNIT_TEST(create_003); + CPPUNIT_TEST(create_004); + CPPUNIT_TEST(create_005); + CPPUNIT_TEST(create_006); + CPPUNIT_TEST(create_007); + CPPUNIT_TEST(create_008); + CPPUNIT_TEST_SUITE_END(); +}; // class create + +class createBF : public CppUnit::TestFixture +{ +public: + + void createBF_001() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); +#endif + } + void createBF_002() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeCBC); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); +#endif + } + void createBF_003() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeStream); + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); + } + void createBF_004() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeInvalid); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create provide wrong object.", static_cast(nullptr), aCipher); + // rtl_cipher_destroy(aCipher); + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(createBF); + CPPUNIT_TEST(createBF_001); + CPPUNIT_TEST(createBF_002); + CPPUNIT_TEST(createBF_003); + CPPUNIT_TEST(createBF_004); + CPPUNIT_TEST_SUITE_END(); +}; // class createBF + +class decode : public CppUnit::TestFixture +{ +public: + + void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, OString const& _sPlainTextStr) + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); + (void) _nKeyValue; + (void) _nArgValue; + (void) _sPlainTextStr; +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + pKeyBuffer[0] = _nKeyValue; + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + pArgBuffer[0] = _nArgValue; + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + sal_uInt32 nPlainTextLen = 16; + sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ]; + memset(pPlainTextBuffer, 0, nPlainTextLen); + strncpy(reinterpret_cast(pPlainTextBuffer), _sPlainTextStr.getStr(), 16); + + sal_uInt32 nCipherLen = 16; + sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ]; + memset(pCipherBuffer, 0, nCipherLen); + + /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError); + + sal_uInt32 nPlainText2Len = 16; + sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ]; + memset(pPlainText2Buffer, 0, nPlainText2Len); + + /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len); + CPPUNIT_ASSERT_MESSAGE("decode should not work", aError != rtl_Cipher_E_None); + + delete [] pPlainText2Buffer; + + delete [] pCipherBuffer; + delete [] pPlainTextBuffer; + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + + void test_encode_and_decode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, OString const& _sPlainTextStr) + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); + (void) _nKeyValue; + (void) _nArgValue; + (void) _sPlainTextStr; +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + pKeyBuffer[0] = _nKeyValue; + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + pArgBuffer[0] = _nArgValue; + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionBoth, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + sal_uInt32 nPlainTextLen = 16; + sal_uInt8 *pPlainTextBuffer = new sal_uInt8[ nPlainTextLen ]; + memset(pPlainTextBuffer, 0, nPlainTextLen); + strncpy(reinterpret_cast(pPlainTextBuffer), _sPlainTextStr.getStr(), 16); + + sal_uInt32 nCipherLen = 16; + sal_uInt8 *pCipherBuffer = new sal_uInt8[ nCipherLen ]; + memset(pCipherBuffer, 0, nCipherLen); + + /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pPlainTextBuffer, nPlainTextLen, pCipherBuffer, nCipherLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError); + + sal_uInt32 nPlainText2Len = 16; + sal_uInt8 *pPlainText2Buffer = new sal_uInt8[ nPlainText2Len ]; + memset(pPlainText2Buffer, 0, nPlainText2Len); + + /* rtlCipherError */ aError = rtl_cipher_decode(aCipher, pCipherBuffer, nCipherLen, pPlainText2Buffer, nPlainText2Len); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong decode", rtl_Cipher_E_None, aError); + + sal_Int32 nCompare = memcmp(pPlainTextBuffer, pPlainText2Buffer, 16); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare between plain and decoded plain failed", static_cast(0), nCompare); + + delete [] pPlainText2Buffer; + + delete [] pCipherBuffer; + delete [] pPlainTextBuffer; + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + + void decode_001() + { + test_encode_and_decode(0,0,""); + test_encode_and_decode(0,0,"hallo"); + test_encode_and_decode(1,0,"B2Aahg5B"); + test_encode_and_decode(1,2,"Longer text string"); + } + + void decode_002() + { + test_encode(0,0,""); + test_encode(0,0,"hallo"); + test_encode(1,0,"B2Aahg5B"); + test_encode(1,2,"Longer text string"); + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(decode); + CPPUNIT_TEST(decode_001); + CPPUNIT_TEST(decode_002); + CPPUNIT_TEST_SUITE_END(); +}; // class decode + +class decodeBF : public CppUnit::TestFixture +{ +public: + + void decodeBF_001() + { + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(decodeBF); + CPPUNIT_TEST(decodeBF_001); + CPPUNIT_TEST_SUITE_END(); +}; // class decodeBF + +class destroy : public CppUnit::TestFixture +{ +public: + + void destroy_001() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); +#endif + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(destroy); + CPPUNIT_TEST(destroy_001); + CPPUNIT_TEST_SUITE_END(); +}; // class destroy + +class destroyBF : public CppUnit::TestFixture +{ +public: + + void destroyBF_001() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroyBF(aCipher); + // more proforma + // should not GPF +#endif + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(destroyBF); + CPPUNIT_TEST(destroyBF_001); + CPPUNIT_TEST_SUITE_END(); +}; // class destroyBF + +class encode : public CppUnit::TestFixture +{ +public: + + void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, sal_uInt8 _nDataValue) + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); + (void) _nKeyValue; + (void) _nArgValue; + (void) _nDataValue; +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + pKeyBuffer[0] = _nKeyValue; + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + pArgBuffer[0] = _nArgValue; + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + sal_uInt32 nDataLen = 16; + sal_uInt8 *pDataBuffer = new sal_uInt8[ nDataLen ]; + memset(pDataBuffer, 0, nDataLen); + pDataBuffer[0] = _nDataValue; + + sal_uInt32 nLen = 16; + sal_uInt8 *pBuffer = new sal_uInt8[ nLen ]; + memset(pBuffer, 0, nLen); + + /* rtlCipherError */ aError = rtl_cipher_encode(aCipher, pDataBuffer, nDataLen, pBuffer, nLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong encode", rtl_Cipher_E_None, aError); + + delete [] pBuffer; + delete [] pDataBuffer; + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + + void encode_001() + { + test_encode(0,0,0); + test_encode(1,0,0); + test_encode(0,1,0); + test_encode(1,1,0); + + test_encode(0,0,1); + test_encode(1,0,1); + test_encode(0,1,1); + test_encode(1,1,1); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(encode); + CPPUNIT_TEST(encode_001); + CPPUNIT_TEST_SUITE_END(); +}; // class encode + +class encodeBF : public CppUnit::TestFixture +{ +public: + + void encodeBF_001() + { + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(encodeBF); + CPPUNIT_TEST(encodeBF_001); + CPPUNIT_TEST_SUITE_END(); +}; // class encodeBF + +class init : public CppUnit::TestFixture +{ +public: + + void init_001() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + + void init_002() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + pKeyBuffer[0] = 1; + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + void init_003() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + pArgBuffer[0] = 1; + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + void init_004() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); +#if defined LIBO_CIPHER_OPENSSL_BACKEND + CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); +#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; + sal_uInt8 *pKeyBuffer = new sal_uInt8[ nKeyLen ]; + memset(pKeyBuffer, 0, nKeyLen); + pKeyBuffer[0] = 1; + + sal_uInt32 nArgLen = 16; + sal_uInt8 *pArgBuffer = new sal_uInt8[ nArgLen ]; + memset(pArgBuffer, 0, nArgLen); + pArgBuffer[0] = 1; + + rtlCipherError aError = rtl_cipher_init(aCipher, rtl_Cipher_DirectionEncode, pKeyBuffer, nKeyLen, pArgBuffer, nArgLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong init", rtl_Cipher_E_None, aError); + + delete [] pArgBuffer; + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); +#endif + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(init); + CPPUNIT_TEST(init_001); + CPPUNIT_TEST(init_002); + CPPUNIT_TEST(init_003); + CPPUNIT_TEST(init_004); + CPPUNIT_TEST_SUITE_END(); +}; // class init + +class initBF : public CppUnit::TestFixture +{ +public: + + void initBF_001() + { + // seems to be the same as init, so empty + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(initBF); + CPPUNIT_TEST(initBF_001); + CPPUNIT_TEST_SUITE_END(); +}; // class initBF + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::create); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::createBF); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::decode); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::decodeBF); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::destroy); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::destroyBF); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::encode); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::encodeBF); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::init); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_cipher::initBF); + +} // namespace rtl_cipher + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/crc32/rtl_crc32.cxx b/sal/qa/rtl/crc32/rtl_crc32.cxx new file mode 100644 index 000000000..00933b589 --- /dev/null +++ b/sal/qa/rtl/crc32/rtl_crc32.cxx @@ -0,0 +1,154 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +#include + +namespace rtl_CRC32 +{ + +class test : public CppUnit::TestFixture +{ +public: + + // insert your test code here. + void rtl_crc32_001() + { + // this is demonstration code + // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); + + sal_uInt32 nCRC = 0; + + char buf[] = {0}; + int num = 0; + + nCRC = rtl_crc32(nCRC, buf, num); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("empty crc buffer", static_cast(0), nCRC); + } + + void rtl_crc32_002() + { + sal_uInt32 nCRC = 0; + + char buf[] = {0,0}; + int num = sizeof(buf); + + nCRC = rtl_crc32(nCRC, buf, num); + + CPPUNIT_ASSERT_MESSAGE("buffer contain 2 empty bytes, crc is zero", nCRC != 0); + } + + void rtl_crc32_002_1() + { + sal_uInt32 nCRC = 0; + + char buf[] = {0,0,0}; + int num = sizeof(buf); + + nCRC = rtl_crc32(nCRC, buf, num); + + CPPUNIT_ASSERT_MESSAGE("buffer contain 3 empty bytes, crc is zero", nCRC != 0); + } + + /** + * crc32 check: + * Build checksum on two buffers with same size but different content, + * the result (crc32 checksum) must differ + */ + + void rtl_crc32_003() + { + sal_uInt32 nCRC1 = 0; + char buf1[] = {2}; + int num1 = sizeof(buf1); + + nCRC1 = rtl_crc32(nCRC1, buf1, num1); + + sal_uInt32 nCRC2 = 0; + char buf2[] = {3}; + int num2 = sizeof(buf2); + + nCRC2 = rtl_crc32(nCRC2, buf2, num2); + + CPPUNIT_ASSERT_MESSAGE("checksum should differ for buf1 and buf2", nCRC1 != nCRC2); + } + + /** check if the crc32 only use as much values, as given + * + */ + void rtl_crc32_003_1() + { + sal_uInt32 nCRC1 = 0; + char buf1[] = {2,1}; + int num1 = sizeof(buf1) - 1; + + nCRC1 = rtl_crc32(nCRC1, buf1, num1); + + sal_uInt32 nCRC2 = 0; + char buf2[] = {2,2}; + int num2 = sizeof(buf2) - 1; + + nCRC2 = rtl_crc32(nCRC2, buf2, num2); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("checksum leave it's bounds", nCRC2, nCRC1); + } + + /** check if the crc32 differ at same content in reverse order + * + */ + void rtl_crc32_003_2() + { + sal_uInt32 nCRC1 = 0; + char buf1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; + int num1 = sizeof(buf1); + + nCRC1 = rtl_crc32(nCRC1, buf1, num1); + + sal_uInt32 nCRC2 = 0; + char buf2[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0}; + int num2 = sizeof(buf2); + + nCRC2 = rtl_crc32(nCRC2, buf2, num2); + + CPPUNIT_ASSERT_MESSAGE("checksum should differ", nCRC1 != nCRC2); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(test); + CPPUNIT_TEST(rtl_crc32_001); + CPPUNIT_TEST(rtl_crc32_002); + CPPUNIT_TEST(rtl_crc32_002_1); + CPPUNIT_TEST(rtl_crc32_003); + CPPUNIT_TEST(rtl_crc32_003_1); + CPPUNIT_TEST(rtl_crc32_003_2); + CPPUNIT_TEST_SUITE_END(); +}; // class test + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_CRC32::test); +} // namespace rtl_CRC32 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/digest/rtl_digest.cxx b/sal/qa/rtl/digest/rtl_digest.cxx new file mode 100644 index 000000000..4bf0512a0 --- /dev/null +++ b/sal/qa/rtl/digest/rtl_digest.cxx @@ -0,0 +1,515 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include + +using namespace rtl; + +namespace +{ + +constexpr OStringLiteral sSampleString ("This is a sample sentence, which we use to check some crypto functions in sal."); +constexpr OStringLiteral sSampleString_only_one_diff ("This is a sample sentence. which we use to check some crypto functions in sal."); + +const rtlDigestAlgorithm constDigestAlgorithms[] = +{ + rtl_Digest_AlgorithmMD2, + rtl_Digest_AlgorithmMD5, + rtl_Digest_AlgorithmSHA, + rtl_Digest_AlgorithmSHA1, + rtl_Digest_AlgorithmHMAC_MD5, + rtl_Digest_AlgorithmHMAC_SHA1, +}; + +const sal_uInt32 constDigestAlgorithmLengths[] = +{ + RTL_DIGEST_LENGTH_MD2, + RTL_DIGEST_LENGTH_MD5, + RTL_DIGEST_LENGTH_SHA, + RTL_DIGEST_LENGTH_SHA1, + RTL_DIGEST_LENGTH_HMAC_MD5, + RTL_DIGEST_LENGTH_HMAC_SHA1, +}; + +const std::string_view constSampleStringSums[] = +{ + std::string_view("647ee6c9d4aa5fdd374ed9d7a156acbf"), + std::string_view("b16b903e6fc0b62ae389013ed93fe531"), + std::string_view("eab2814429b2613301c8a077b806af3680548914"), + std::string_view("2bc5bdb7506a2cdc2fd27fc8b9889343012d5008"), + std::string_view("0b1b0e1a6f2e4420326354b031063605"), + std::string_view("1998c6a556915be76451bfb587fa7c34d849936e") +}; + +// Create hex-value string from the digest value to keep the string size minimal +OString createHex(const sal_uInt8* pKeyBuffer, sal_uInt32 nKeyLen) +{ + OStringBuffer aBuffer(nKeyLen * 2 + 1); + for (sal_uInt32 i = 0; i < nKeyLen; ++i) + { + sal_Int32 nValue = static_cast(pKeyBuffer[i]); + if (nValue < 16) + aBuffer.append('0'); + aBuffer.append(nValue, 16); + } + return aBuffer.makeStringAndClear(); +} + +OString getDigest(const OString& aMessage, rtlDigestAlgorithm aAlgorithm) +{ + rtlDigest handle = rtl_digest_create(aAlgorithm); + + const sal_uInt8* pData = reinterpret_cast(aMessage.getStr()); + sal_uInt32 nSize = aMessage.getLength(); + + rtl_digest_init(handle, pData, nSize); + rtl_digest_update(handle, pData, nSize); + + sal_uInt32 nKeyLen = rtl_digest_queryLength(handle); + std::unique_ptr pKeyBuffer(new sal_uInt8[nKeyLen]); + + rtl_digest_get(handle, pKeyBuffer.get(), nKeyLen); + OString aSum = createHex(pKeyBuffer.get(), nKeyLen); + + rtl_digest_destroy( handle ); + return aSum; +} + +class DigestTest : public CppUnit::TestFixture +{ +public: + void testCreate() + { + for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++) + { + rtlDigest handle = rtl_digest_create( constDigestAlgorithms[i] ); + CPPUNIT_ASSERT_MESSAGE("create digest", handle != nullptr); + rtl_digest_destroy( handle ); + } + + rtlDigest handle = rtl_digest_create( rtl_Digest_AlgorithmInvalid ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("create invalid digest", static_cast(nullptr), handle); + rtl_digest_destroy( handle ); + } + + void testQuery() + { + for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++) + { + rtlDigest handle = rtl_digest_create(constDigestAlgorithms[i]); + rtlDigestAlgorithm aAlgo = rtl_digest_queryAlgorithm(handle); + CPPUNIT_ASSERT_EQUAL_MESSAGE("query handle", aAlgo, constDigestAlgorithms[i]); + rtl_digest_destroy( handle ); + } + + } + + void testQueryLength() + { + rtlDigest handle; + sal_uInt32 nAlgoLength; + + for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++) + { + handle = rtl_digest_create(constDigestAlgorithms[i]); + nAlgoLength = rtl_digest_queryLength(handle); + CPPUNIT_ASSERT_EQUAL_MESSAGE("query Length", nAlgoLength, constDigestAlgorithmLengths[i]); + rtl_digest_destroy( handle ); + } + + handle = rtl_digest_create( rtl_Digest_AlgorithmInvalid ); + nAlgoLength = rtl_digest_queryLength(handle); + CPPUNIT_ASSERT_EQUAL_MESSAGE("query length", static_cast(0), nAlgoLength); + rtl_digest_destroy( handle ); + } + + void testInit() + { + rtlDigestError aError; + rtlDigest handle; + + handle = nullptr; + aError = rtl_digest_init(handle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("init(NULL, 0, 0)", rtl_Digest_E_Argument, aError); + + handle = rtl_digest_create( rtl_Digest_AlgorithmMD5 ); + aError = rtl_digest_init(handle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("init(handle, 0, 0)", rtl_Digest_E_None, aError); + rtl_digest_destroy( handle ); + + for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++) + { + handle = rtl_digest_create(constDigestAlgorithms[i]); + + OString aMessage = sSampleString; + const sal_uInt8* pData = reinterpret_cast(aMessage.getStr()); + sal_uInt32 nSize = aMessage.getLength(); + + aError = rtl_digest_init(handle, pData, nSize); + CPPUNIT_ASSERT_EQUAL_MESSAGE("init(handle, pData, nSize)", rtl_Digest_E_None, aError); + + rtl_digest_update(handle, pData, nSize); + + sal_uInt32 nKeyLen = rtl_digest_queryLength( handle ); + std::unique_ptr pKeyBuffer(new sal_uInt8[nKeyLen]); + + rtl_digest_get( handle, pKeyBuffer.get(), nKeyLen ); + createHex(pKeyBuffer.get(), nKeyLen); + + rtl_digest_destroy( handle ); + } + } + + void testEqual() + { + { + OString aSum1 = getDigest(sSampleString, rtl_Digest_AlgorithmMD5); + OString aSum2 = getDigest(sSampleString, rtl_Digest_AlgorithmMD5); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "md5sum must have a length", sal_Int32(32), aSum1.getLength() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "md5sum must have a length", sal_Int32(32), aSum2.getLength() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("source is the same, dest must be also the same", aSum1, aSum2); + } + + { + OString aSum1 = getDigest(sSampleString, rtl_Digest_AlgorithmMD5); + OString aSum2 = getDigest(sSampleString_only_one_diff, rtl_Digest_AlgorithmMD5); + + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "md5sum must have a length", sal_Int32(32), aSum1.getLength() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "md5sum must have a length", sal_Int32(32), aSum2.getLength() ); + CPPUNIT_ASSERT_MESSAGE("differ only in one char", aSum1 != aSum2); + } + } + + void testCheckSum() + { + for (size_t i = 0; i < SAL_N_ELEMENTS(constDigestAlgorithms); i++) + { + OString aSum = getDigest(sSampleString, constDigestAlgorithms[i]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Checksum of sample string is wrong.", OString(constSampleStringSums[i]), aSum); + } + } + + OString runCheckPBKDF2(OString& sPassword, bool bClearSalt, sal_uInt32 nCount) + { + sal_uInt32 nKeyLen = RTL_DIGEST_LENGTH_HMAC_SHA1; + std::unique_ptr pKeyBuffer(new sal_uInt8[nKeyLen]); + + memset(pKeyBuffer.get(), 0, nKeyLen); + + sal_uInt8 const * pPassword = reinterpret_cast(sPassword.getStr()); + sal_Int32 nPasswordLen = sPassword.getLength(); + + sal_uInt32 nSaltDataLen = RTL_DIGEST_LENGTH_HMAC_SHA1; + std::unique_ptr pSaltData(new sal_uInt8[nSaltDataLen]); + memset(pSaltData.get(), 0, nSaltDataLen); + + if (!bClearSalt) + { + // wilful contamination + pSaltData[0] = 1; + } + + rtlDigestError aError = rtl_digest_PBKDF2(pKeyBuffer.get(), nKeyLen, pPassword, nPasswordLen, pSaltData.get(), nSaltDataLen, nCount); + + CPPUNIT_ASSERT_EQUAL(rtl_Digest_E_None, aError); + + OString aKey = createHex(pKeyBuffer.get(), nKeyLen); + + // OString sSalt = createHex(pSaltData, nSaltDataLen); + // printf("Salt: %s\n", sSalt.getStr()); + + // CPPUNIT_ASSERT_MESSAGE("md5sum of sample string is wrong. Code changes or sample problems, please check.", aStr.equals(sSampleString_PBKDF2) ); + return aKey; + } + + void testPBKDF2() + { + OString aPassword = "Password"; + + // all permutations + runCheckPBKDF2(aPassword, false, 1); + runCheckPBKDF2(aPassword, false, 2); + runCheckPBKDF2(aPassword, true, 1); + runCheckPBKDF2(aPassword, true, 2); + runCheckPBKDF2(aPassword, false, 3); + runCheckPBKDF2(aPassword, false, 4); + runCheckPBKDF2(aPassword, true, 3); + runCheckPBKDF2(aPassword, true, 4); + } + + void testUpdate() + { + rtlDigestError aError; + rtlDigest aHandle; + + aHandle = nullptr; + aError = rtl_digest_update(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError); + + aHandle = nullptr; + aError = rtl_digest_updateMD2(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError); + + aError = rtl_digest_updateMD5(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError); + + aHandle = rtl_digest_create( rtl_Digest_AlgorithmMD2 ); + CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr); + + const sal_uInt8* pData = reinterpret_cast(sSampleString.getStr()); + sal_uInt32 nSize = sSampleString.getLength(); + + aError = rtl_digest_updateMD2(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError); + + aError = rtl_digest_updateMD2(aHandle, pData, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_None, aError); + + rtl_digest_destroyMD2(aHandle); + + // use wrong Algorithm!!! This is volitional! + aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD2); + CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr); + + aError = rtl_digest_updateMD5(aHandle, pData, nSize); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'handle' wrong", rtl_Digest_E_Algorithm, aError); + + rtl_digest_destroyMD5(aHandle); + + aHandle = rtl_digest_create( rtl_Digest_AlgorithmMD5 ); + CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD5", aHandle != nullptr); + + aError = rtl_digest_updateMD5(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError); + + aError = rtl_digest_updateMD5(aHandle, pData, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_None, aError); + + rtl_digest_destroyMD5(aHandle); + } + + void testGet() + { + rtlDigest aHandle; + rtlDigestError aError; + + aHandle = nullptr; + aError = rtl_digest_get(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError); + + aHandle = nullptr; + aError = rtl_digest_getMD5(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("does not handle wrong parameter", rtl_Digest_E_Argument, aError); + + // test with wrong algorithm + aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD2); + CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD2", aHandle != nullptr); + + sal_uInt32 nKeyLen = rtl_digest_queryLength(aHandle); + std::unique_ptr pKeyBuffer(new sal_uInt8[nKeyLen]); + + aError = rtl_digest_getMD5(aHandle, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle 2. parameter wrong", rtl_Digest_E_Argument, aError); + + aError = rtl_digest_getMD5(aHandle, pKeyBuffer.get(), 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'handle' wrong", rtl_Digest_E_Algorithm, aError); + + rtl_digest_destroyMD2(aHandle); + + aHandle = rtl_digest_create(rtl_Digest_AlgorithmMD5); + CPPUNIT_ASSERT_MESSAGE("create with rtl_Digest_AlgorithmMD5", aHandle != nullptr); + + aError = rtl_digest_getMD5(aHandle, nullptr, nKeyLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'pData' wrong", rtl_Digest_E_Argument, aError); + + aError = rtl_digest_getMD5(aHandle, pKeyBuffer.get(), 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("handle parameter 'nSize' wrong", rtl_Digest_E_BufferSize, aError); + + rtl_digest_destroyMD5(aHandle); + } + + void testSHA1SumForBiggerInputData() + { + // The test data was extracted from oox encrypted document (salt + password). + // First case: 16 bytes salt + 34 bytes password (12345678901234567) + // Second case: 16 bytes salt + 36 bytes password (123456789012345678) + { + const unsigned char aData[] = { + 0x37, 0x5f, 0x47, 0x7a, 0xd2, 0x13, 0xbe, 0xd2, 0x3c, 0x23, 0x33, 0x39, + 0x68, 0x21, 0x03, 0x6d, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x37, 0x00 + }; + + std::unique_ptr pResult(new sal_uInt8[RTL_DIGEST_LENGTH_SHA1]); + + rtl_digest_SHA1(aData, sizeof(aData), pResult.get(), RTL_DIGEST_LENGTH_SHA1); + + OString sKey = createHex(pResult.get(), RTL_DIGEST_LENGTH_SHA1); + + CPPUNIT_ASSERT_EQUAL(OString("06f460d693aecdd3b5cbe8365408eccfc570f32a"), sKey); + } + + // tdf#114939, verify that rtl_digest_SHA1 computes broken results for certain input (which + // is not fixed for compatibility reasons): + { + sal_uInt8 result[RTL_DIGEST_LENGTH_SHA1]; + rtl_digest_SHA1( + RTL_CONSTASCII_STRINGPARAM("1012345678901234567890123456789012345678901234567890"), + result, RTL_DIGEST_LENGTH_SHA1); + // Rather than correct "9cb1dab34448c1ea460da1f8736869c8852f212f": + CPPUNIT_ASSERT_EQUAL( + OString("90a461ee9cc69cedaeb25c2dc5cc62544ebd5241"), + createHex(result, RTL_DIGEST_LENGTH_SHA1)); + } + } + + void testMD5() + { + unsigned char const data[] = { + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + }; + OString const expected[] = { + "d41d8cd98f00b204e9800998ecf8427e", + "cfcd208495d565ef66e7dff9f98764da", + "b4b147bc522828731f1a016bfa72c073", + "c6f057b86584942e415435ffb1fa93d4", + "4a7d1ed414474e4033ac29ccb8653d9b", + "dcddb75469b4b4875094e14561e573d8", + "670b14728ad9902aecba32e22fa4f6bd", + "29c3eea3f305d6b823f562ac4be35217", + "dd4b21e9ef71e1291183a46b913ae6f2", + "4c93008615c2d041e33ebac605d14b5b", + "f1b708bba17f1ce948dc979f4d7092bc", + "645a8aca5a5b84527c57ee2f153f1946", + "35b9ab5a36f3234dd26db357fd4a0dc1", + "4aad0d9ff11812ebdd5e376fdbef6222", + "c47532bbb1e2883c902071591ae1ec9b", + "5284047f4ffb4e04824a2fd1d1f0cd62", + "1e4a1b03d1b6cd8a174a826f76e009f4", + "0e7b9f29a828b6f953b482fc299e536b", + "3ea032bf79e8c116b05f4698d5a8e044", + "15f47c8a3e5e9685307dd65a653b8dc0", + "cc545187d0745132de1e9941db0ef6ce", + "0585e303e79acd837c3a3e2a2bec8b18", + "b28ccfdee4b9f39ba18b58a4f61a03d1", + "d018229b1183c926c10ea688350afec8", + "660719b4a7591769583a7c8d20c6dfa4", + "1e2432adacf481836265fcc62ee8f3e3", + "6e88e2af74c1d9d7d7d652b90d03751e", + "780ca685003cec1d617beaa6f346e1be", + "7f2e1dcfd6e2a3f5c38f31e640136ff6", + "1a3dee46117aeb8010cf365b8653faa8", + "1d0064395af3c745f6c3194e92373d7a", + "b52582043219f2deb2d3c9cb05d6448a", + "cd9e459ea708a948d5c2f5a6ca8838cf", + "00de800ecd7a4fb2813986c987e46d51", + "15336d4b38561a82bd24c9398b781aed", + "5fe699d3c461ab5a795505f59d5adf15", + "c5e0eb03cbb4bea95ce3f8f48fca77d5", + "355c1410373ef02fff2b03844d72c7d4", + "02df97da8207de2b3afa69c151ca8958", + "82c66dbf3e73f87ffc9564b2098d6a4f", + "b373e3ddc3438d7c10c76f3ad9d4c401", + "fac901a4a3dbc4461541731a33a31d15", + "f573e011b414bf3f9dd284f7dad29592", + "11694570cc5dda099669f2ba3660a70d", + "60997cc8aef7fedd9995e6b3ca89ce26", + "63c5fcf83c2275fe64e880dd8dfc5cd6", + "c7a0a100057ebbfc63ee169562026aea", + "42c2dec247919384edece38033458627", + "b505acf9fc996902b0c547a2abfc62b2", + "2fa7a1321d6b5fa0e04ad46785f574f3", + "86d2bfc0bab44eecf21e1432be7b3efc", + "7ca318f12a0955a3e637dc5645a2f96e", + "3eda02765b8fb8bb9b20c735f4537827", + "26dead12262c9a5c115b01e0a3c805b6", + "978b0444e93c5f7d714575f28a77dca1", + "d7fe636bd28e2ee2ba4d6c5898318699", + "ce992c2ad906967c63c3f9ab0c2294a9", + "1f3b814e9d417e9fd8750299982feb1f", + "1a2f42174eaa78ce6a67d75e98a59cb6", + "17c772c45c9a09f6e56b7228ddd161a7", + "5b19445b70b493c78f3bc06eb7962315", + "e590c24cc612bdedd522dfe23bb29b42", + "4d78c699a0167bc0cfce8a5c5a715c0e", + "5703db92acb9d45e3975822c9206453f", + "10eab6008d5642cf42abd2aa41f847cb", + }; + rtlDigest digest = rtl_digest_createMD5(); + for (size_t i = 0; i < sizeof(data); ++i) + { + rtl_digest_updateMD5(digest, &data, i); + sal_uInt8 buf[RTL_DIGEST_LENGTH_MD5]; + rtl_digest_getMD5(digest, &buf[0], sizeof(buf)); + OString const sResult = createHex(&buf[0], sizeof(buf)); + CPPUNIT_ASSERT_EQUAL(expected[i], sResult); + } + rtl_digest_destroyMD5(digest); + } + + CPPUNIT_TEST_SUITE(DigestTest); + CPPUNIT_TEST(testCreate); + CPPUNIT_TEST(testQuery); + CPPUNIT_TEST(testQueryLength); + CPPUNIT_TEST(testInit); + CPPUNIT_TEST(testEqual); + CPPUNIT_TEST(testCheckSum); + CPPUNIT_TEST(testPBKDF2); + CPPUNIT_TEST(testUpdate); + CPPUNIT_TEST(testGet); + CPPUNIT_TEST(testSHA1SumForBiggerInputData); + CPPUNIT_TEST(testMD5); + + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(DigestTest); + +} // namespace rtl_digest + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/doublelock/rtl_doublelocking.cxx b/sal/qa/rtl/doublelock/rtl_doublelocking.cxx new file mode 100644 index 000000000..ef639423d --- /dev/null +++ b/sal/qa/rtl/doublelock/rtl_doublelocking.cxx @@ -0,0 +1,182 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include + +#include + +#include +#include + +#include +#include +#include + +#ifdef _WIN32 +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#include +#include +#endif + +#define CONST_TEST_STRING "gregorian" + +namespace { +struct Gregorian : public rtl::StaticWithInit { + OUString operator () () { + return CONST_TEST_STRING; + } +}; + +/** Simple thread for testing Thread-create. + * Just add 1 of value 0, and after running, result is 1. + */ +class OGetThread : public osl::Thread +{ + osl::Mutex m_mutex; + sal_Int32 m_nOK; + sal_Int32 m_nFails; + + OUString m_sConstStr; +public: + OGetThread() + :m_nOK(0), + m_nFails(0), + m_sConstStr(CONST_TEST_STRING) + { + } + + sal_Int32 getOK() { osl::MutexGuard g(m_mutex); return m_nOK; } + sal_Int32 getFails() {osl::MutexGuard g(m_mutex); return m_nFails;} + +protected: + + /** guarded value which initialized 0 + + @see ThreadSafeValue + */ + void SAL_CALL run() override + { + for (int i = 0; i != 5; ++i) + { + OUString aStr = Gregorian::get(); + if (aStr == m_sConstStr) + { + osl::MutexGuard g(m_mutex); + m_nOK++; + } + else + { + osl::MutexGuard g(m_mutex); + m_nFails++; + } + } + } + +public: + + virtual ~OGetThread() override + { + if (isRunning()) + { + printf("error: not terminated.\n"); + } + } +}; + +} + +namespace rtl_DoubleLocking +{ + +/** Test of the osl::Thread::create method + */ + + class getValue : public CppUnit::TestFixture + { + public: + + void getValue_001() + { + OUString aStr = Gregorian::get(); + + CPPUNIT_ASSERT_MESSAGE( + "Gregorian::get() failed, wrong value expected.", + !aStr.isEmpty() + ); + } + + /** check 2 threads. + + ALGORITHM: + Here the function should show, that 2 different threads, + which only increase a value, should run at the same time with same prio. + The test fails, if the difference between the two values is more than 5% + but IMHO this isn't a failure, it's only a feature of the OS. + */ + + void getValue_002() + { + // initial 5 threads with different priorities + OGetThread* pThread = new OGetThread(); + OGetThread* p2Thread = new OGetThread(); + + //Create them and start running at the same time + pThread->create(); + p2Thread->create(); + + pThread->join(); + p2Thread->join(); + + sal_Int32 nValueOK = pThread->getOK(); + + sal_Int32 nValueOK2 = p2Thread->getOK(); + + std::cout << "Value in Thread #1 is " << nValueOK << "\n"; + std::cout << "Value in Thread #2 is " << nValueOK2 << "\n"; + sal_Int32 nValueFails = pThread->getFails(); + + sal_Int32 nValueFails2 = p2Thread->getFails(); + + delete pThread; + delete p2Thread; + + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nValueOK); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), nValueOK2); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nValueFails); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nValueFails2); + } + + CPPUNIT_TEST_SUITE(getValue); + CPPUNIT_TEST(getValue_001); + CPPUNIT_TEST(getValue_002); + CPPUNIT_TEST_SUITE_END(); + }; // class create + + CPPUNIT_TEST_SUITE_REGISTRATION(rtl_DoubleLocking::getValue); +} // namespace rtl_DoubleLocking + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/locale/rtl_locale.cxx b/sal/qa/rtl/locale/rtl_locale.cxx new file mode 100644 index 000000000..27e30db9f --- /dev/null +++ b/sal/qa/rtl/locale/rtl_locale.cxx @@ -0,0 +1,280 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +#include +#include +#include + +namespace rtl_locale +{ + // default locale for test purpose + static void setDefaultLocale() + { + rtl_locale_setDefault(OUString("de").getStr(), OUString("DE").getStr(), /* OUString() */ OUString("hochdeutsch").getStr() ); + } + +class getDefault : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + void getDefault_001() + { + rtl_Locale* pData = rtl_locale_getDefault(); + CPPUNIT_ASSERT_MESSAGE("locale must not null", pData != nullptr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(getDefault); + CPPUNIT_TEST(getDefault_001); + CPPUNIT_TEST_SUITE_END(); +}; // class getDefault + +class setDefault : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + void tearDown() override + { + setDefaultLocale(); + } + + // insert your test code here. + void setDefault_001() + { + rtl_locale_setDefault(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr()); + rtl_Locale* pData = rtl_locale_getDefault(); + CPPUNIT_ASSERT_MESSAGE("locale must not null", pData != nullptr); + + // be sure to not GPF + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(setDefault); + CPPUNIT_TEST(setDefault_001); + CPPUNIT_TEST_SUITE_END(); +}; // class setDefault + +class getLanguage : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + // insert your test code here. + void getLanguage_001() + { + rtl_Locale* pData = rtl_locale_getDefault(); + OUString suLanguage = pData->Language; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale language must be 'de'", OUString("de"), suLanguage ); + } + void getLanguage_002() + { + rtl_Locale* pData = rtl_locale_getDefault(); + OUString suLanguage(rtl_locale_getLanguage(pData), SAL_NO_ACQUIRE); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale language must be 'de'", OUString("de"), suLanguage ); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(getLanguage); + CPPUNIT_TEST(getLanguage_001); + CPPUNIT_TEST(getLanguage_002); + CPPUNIT_TEST_SUITE_END(); +}; // class getLanguage + +class getCountry : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + // insert your test code here. + void getCountry_001() + { + rtl_Locale* pData = rtl_locale_getDefault(); + OUString suCountry = pData->Country; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale country must be 'DE'", OUString("DE"), suCountry ); + } + void getCountry_002() + { + rtl_Locale* pData = rtl_locale_getDefault(); + OUString suCountry(rtl_locale_getCountry(pData), SAL_NO_ACQUIRE); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale country must be 'DE'", OUString("DE"), suCountry ); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(getCountry); + CPPUNIT_TEST(getCountry_001); + CPPUNIT_TEST(getCountry_002); + CPPUNIT_TEST_SUITE_END(); +}; // class getCountry + +class getVariant : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + // insert your test code here. + void getVariant_001() + { + rtl_Locale* pData = rtl_locale_getDefault(); + OUString suVariant = pData->Variant; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale variant must be 'hochdeutsch'", OUString("hochdeutsch"), suVariant ); + } + void getVariant_002() + { + rtl_Locale* pData = rtl_locale_getDefault(); + OUString suVariant(rtl_locale_getVariant(pData), SAL_NO_ACQUIRE); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "locale variant must be 'hochdeutsch'", OUString("hochdeutsch"), suVariant ); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(getVariant); + CPPUNIT_TEST(getVariant_001); + CPPUNIT_TEST(getVariant_002); + CPPUNIT_TEST_SUITE_END(); +}; // class getVariant + +class hashCode : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + // insert your test code here. + void hashCode_001() + { + rtl_Locale* pData = rtl_locale_getDefault(); + sal_Int32 nHashCode = pData->HashCode; + CPPUNIT_ASSERT_MESSAGE("locale hashcode must be 3831", nHashCode != 0); + } + void hashCode_002() + { + rtl_Locale* pData = rtl_locale_getDefault(); + sal_Int32 nHashCode = rtl_locale_hashCode(pData); + CPPUNIT_ASSERT_MESSAGE("locale hashcode must be 3831", nHashCode != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(hashCode); + CPPUNIT_TEST(hashCode_001); + CPPUNIT_TEST(hashCode_002); + CPPUNIT_TEST_SUITE_END(); +}; // class hashCode + +class equals : public CppUnit::TestFixture +{ +public: + // initialise your test code values here. + void setUp() override + { + // start message + rtl_locale::setDefaultLocale(); + } + + // insert your test code here. + void equals_001() + { + rtl_Locale* pData1 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr()); + rtl_Locale* pData2 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr()); + + bool bLocaleAreEqual = (pData1 == pData2); + + CPPUNIT_ASSERT_MESSAGE("check operator ==()", bLocaleAreEqual); + } + + void equals_002() + { + rtl_Locale* pData1 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr()); + rtl_Locale* pData2 = rtl_locale_register(OUString("en").getStr(), OUString("US").getStr(), OUString().getStr()); + + sal_Int32 nEqual = rtl_locale_equals(pData1, pData2); + CPPUNIT_ASSERT(nEqual != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(equals); + CPPUNIT_TEST(equals_001); + CPPUNIT_TEST(equals_002); + CPPUNIT_TEST_SUITE_END(); +}; // class equals + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getDefault); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::setDefault); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getLanguage); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getCountry); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::getVariant); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::hashCode); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_locale::equals); +} // namespace rtl_locale + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/math/test-rtl-math.cxx b/sal/qa/rtl/math/test-rtl-math.cxx new file mode 100644 index 000000000..ee4ae55a1 --- /dev/null +++ b/sal/qa/rtl/math/test-rtl-math.cxx @@ -0,0 +1,677 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +CPPUNIT_NS_BEGIN + +template<> struct assertion_traits +{ + static bool equal( const rtl_math_ConversionStatus& x, const rtl_math_ConversionStatus& y ) + { + return x == y; + } + + static std::string toString( const rtl_math_ConversionStatus& x ) + { + OStringStream ost; + ost << static_cast(x); + return ost.str(); + } +}; + +CPPUNIT_NS_END + +namespace { + +class Test: public CppUnit::TestFixture { +public: + void test_stringToDouble_good() { + rtl_math_ConversionStatus status; + sal_Int32 end; + double res = rtl::math::stringToDouble( + " +1.E01foo", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH(" +1.E01"), end); + CPPUNIT_ASSERT_EQUAL(10.0, res); + + res = rtl::math::stringToDouble( + "NaN", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end); + CPPUNIT_ASSERT(std::isnan(res)); + + res = rtl::math::stringToDouble( + "NaN1.23", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end); + CPPUNIT_ASSERT(std::isnan(res)); + + res = rtl::math::stringToDouble( + "+NaN", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + res = rtl::math::stringToDouble( + "-NaN", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + res = rtl::math::stringToDouble( + "+1.#NAN", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), end); + CPPUNIT_ASSERT(std::isnan(res)); + CPPUNIT_ASSERT(!std::signbit(res)); + + res = rtl::math::stringToDouble( + "-1.#NAN", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), end); + CPPUNIT_ASSERT(std::isnan(res)); + CPPUNIT_ASSERT(std::signbit(res)); + + res = rtl::math::stringToDouble( + "INF", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end); + CPPUNIT_ASSERT(std::isinf(res)); + + res = rtl::math::stringToDouble( + "INF1.23", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), end); + CPPUNIT_ASSERT(std::isinf(res)); + + res = rtl::math::stringToDouble( + ".5", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end); + CPPUNIT_ASSERT_EQUAL(0.5, res); + + res = rtl::math::stringToDouble( + "5.", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end); + CPPUNIT_ASSERT_EQUAL(5.0, res); + + // Leading 0 and group separator. + res = rtl::math::stringToDouble( + "0,123", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end); + CPPUNIT_ASSERT_EQUAL(123.0, res); + + // Leading 0 and two consecutive group separators are none. + res = rtl::math::stringToDouble( + "0,,1", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + // Leading 0 and group separator at end is none. + res = rtl::math::stringToDouble( + "0,", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + // Leading 0 and group separator before non-digit is none. + res = rtl::math::stringToDouble( + "0,x", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + // Trailing group separator is none. + res = rtl::math::stringToDouble( + "1,234,", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end); + CPPUNIT_ASSERT_EQUAL(1234.0, res); + + // Group separator followed by non-digit is none. + res = rtl::math::stringToDouble( + "1,234,x", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), end); + CPPUNIT_ASSERT_EQUAL(1234.0, res); + + // Check that the value is the nearest double-precision representation of the decimal 0.0042 + // (it was 0.0042000000000000006 instead of 0.0041999999999999997) + res = rtl::math::stringToDouble("0,0042", ',', ' ', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(0.0042, res); + + // "- 1" is nothing + res = rtl::math::stringToDouble("- 1", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + // "-1E+E" : no exponent + res = rtl::math::stringToDouble("-1E+E", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end); + CPPUNIT_ASSERT_EQUAL(-1.0, res); + + // "-0" is negative zero + res = rtl::math::stringToDouble("-0", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + CPPUNIT_ASSERT(std::signbit(res)); + + // Compensating: "0.001E311" is 1E308, not overflow/inf + res = rtl::math::stringToDouble("0.001E311", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(9), end); + CPPUNIT_ASSERT_EQUAL(1E308, res); + + res = rtl::math::stringToDouble("1E8589934590", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_OutOfRange, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(12), end); + CPPUNIT_ASSERT_EQUAL(std::numeric_limits::infinity(), res); + + // DBL_MAX and 4 nextafters + double fValAfter = DBL_MAX; + res = rtl::math::stringToDouble("1.7976931348623157e+308", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end); + CPPUNIT_ASSERT_EQUAL(fValAfter, res); + + fValAfter = std::nextafter( fValAfter, 0); + res = rtl::math::stringToDouble("1.7976931348623155e+308", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end); + CPPUNIT_ASSERT_EQUAL(fValAfter, res); + + fValAfter = std::nextafter( fValAfter, 0); + res = rtl::math::stringToDouble("1.7976931348623153e+308", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end); + CPPUNIT_ASSERT_EQUAL(fValAfter, res); + + fValAfter = std::nextafter( fValAfter, 0); + res = rtl::math::stringToDouble("1.7976931348623151e+308", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end); + CPPUNIT_ASSERT_EQUAL(fValAfter, res); + + fValAfter = std::nextafter( fValAfter, 0); + res = rtl::math::stringToDouble("1.7976931348623149e+308", '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(23), end); + CPPUNIT_ASSERT_EQUAL(fValAfter, res); + } + + void test_stringToDouble_bad() { + rtl_math_ConversionStatus status; + sal_Int32 end; + double res = rtl::math::stringToDouble( + " +Efoo", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + res = rtl::math::stringToDouble( + ".", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + res = rtl::math::stringToDouble( + " +.Efoo", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + res = rtl::math::stringToDouble( + " +,.Efoo", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + + // Leading group separator is none. + res = rtl::math::stringToDouble( + ",1234", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + } + + void test_stringToDouble_exponent_without_digit() { + rtl_math_ConversionStatus status; + sal_Int32 end; + double res = rtl::math::stringToDouble( + "1e", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH("1"), end); + CPPUNIT_ASSERT_EQUAL(1.0, res); + res = rtl::math::stringToDouble( + "0e", + '.', ',', &status, &end); + CPPUNIT_ASSERT_EQUAL(rtl_math_ConversionStatus_Ok, status); + CPPUNIT_ASSERT_EQUAL(RTL_CONSTASCII_LENGTH("1"), end); + CPPUNIT_ASSERT_EQUAL(0.0, res); + } + + void test_round() { + double fVal = 5000000000000001.0; + CPPUNIT_ASSERT_EQUAL( 5000000000000001.0, rtl::math::round( fVal, 9, rtl_math_RoundingMode_Corrected)); + + fVal = 8796093022188.0; + CPPUNIT_ASSERT_EQUAL( 6093022188.0 , rtl::math::round( fVal, 9, rtl_math_RoundingMode_Corrected) - 8790000000000); + + fVal = 4503599627370491.0; + CPPUNIT_ASSERT_EQUAL( 4503599627370000.0, rtl::math::round( fVal, -3, rtl_math_RoundingMode_Corrected)); + } + + void test_doubleToString() { + double fVal = 999999999999999.0; + sal_Int32 aGroups[3] = { 3, 2, 0 }; + OUString aRes( rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, + '.', aGroups, ',', true)); + CPPUNIT_ASSERT_EQUAL( OUString("99,99,99,99,99,99,999"), aRes); + + fVal = 949.0; + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + -2, // round before decimals + '.', aGroups, ',', true); + CPPUNIT_ASSERT_EQUAL( OUString("900"), aRes); + + fVal = 950.0; + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + -2, // round before decimals + '.', aGroups, ',', true); + CPPUNIT_ASSERT_EQUAL( OUString("1,000"), aRes); + + fVal = 4503599627370495.0; + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.'); + CPPUNIT_ASSERT_EQUAL( OUString("4503599627370495"), aRes); + + fVal = 4503599627370496.0; + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + 2, '.'); + CPPUNIT_ASSERT_EQUAL( OUString("4503599627370496.00"), aRes); + + fVal = -4503599627370496.0; + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + 2, '.'); + CPPUNIT_ASSERT_EQUAL( OUString("-4503599627370496.00"), aRes); + + fVal = 9007199254740991.0; // (2^53)-1 + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("9007199254740991"), aRes); + + fVal = 9007199254740992.0; // (2^53), algorithm switch + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("9.00719925474099E+015"), aRes); + + fVal = 9007199254740993.0; // (2^53)+1 would be but is 9007199254740992 + aRes = rtl::math::doubleToUString( fVal, + rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("9.00719925474099E+015"), aRes); + + // Test rtl_math_StringFormat_G + + fVal = 0.001234567; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("0.00123"), aRes); + + fVal = 123.4567; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("123"), aRes); + + fVal = 123.4567; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 4, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("123.5"), aRes); + + fVal = 99.6; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("99.6"), aRes); + + // Expected could be 1E+03 (as 999.6 rounded to 3 significant digits + // results in 1000 with an exponent equal to significant digits). + // Currently we don't and output 1000 instead, negligible. + fVal = 999.6; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1000"), aRes); + + fVal = 9999.6; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, 3, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1E+004"), aRes); + + fVal = 12345.6789; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_G, -3, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.2E+004"), aRes); + + // DBL_MAX and 4 nextafters + fVal = DBL_MAX; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623157E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623155E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623153E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.7976931348623151E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, + rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes); + CPPUNIT_ASSERT_EQUAL(fVal, rtl::math::stringToDouble(aRes, '.', ',')); // Test roundtrip + + // DBL_MAX and 4 nextafters rounded to 15 decimals + fVal = DBL_MAX; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862316E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862316E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes); + + fVal = std::nextafter( fVal, 0); + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 15, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.797693134862315E+308"), aRes); + + // DBL_MAX rounded to 14 decimals + fVal = DBL_MAX; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 14, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.79769313486232E+308"), aRes); + + // DBL_MAX rounded to 2 decimals + fVal = DBL_MAX; + aRes = rtl::math::doubleToUString( fVal, rtl_math_StringFormat_Automatic, 2, '.', true); + CPPUNIT_ASSERT_EQUAL( OUString("1.8E+308"), aRes); + + // Crashed after commit eae24a9488814e77254d175c11fc4a138c1dbd30 + fVal = 123456.789; + aRes = rtl::math::doubleToUString(fVal, rtl_math_StringFormat_E, 2, '.', false); + CPPUNIT_ASSERT_EQUAL(OUString("1.23E+005"), aRes); + + fVal = 9.9999999999999929; + aRes = rtl::math::doubleToUString(fVal, rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL(OUString("9.99999999999999"), aRes); + + fVal = 0.99999999999999933; + aRes = rtl::math::doubleToUString(fVal, rtl_math_StringFormat_F, rtl_math_DecimalPlaces_Max, '.', true); + CPPUNIT_ASSERT_EQUAL(OUString("0.999999999999999"), aRes); + } + + void test_approx() { + // (2^53)-1 , (2^53)-3 + CPPUNIT_ASSERT_EQUAL( false, rtl::math::approxEqual( 9007199254740991.0, 9007199254740989.0)); + // (2^53)-1 , (2^53)-2 + CPPUNIT_ASSERT_EQUAL( false, rtl::math::approxEqual( 9007199254740991.0, 9007199254740990.0)); + // Note: the following are internally represented as 900719925474099.12 + // and 900719925474098.88 and the difference is 0.25 ... + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 900719925474099.1, 900719925474098.9)); + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 72.944444444444443, 72.9444444444444)); + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 359650.27322404372, 359650.27322404401)); + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 5.3590326375710063e+238, 5.3590326375710109e+238)); + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 7.4124095894894475e+158, 7.4124095894894514e+158)); + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 1.2905754687023132e+79, 1.2905754687023098e+79)); + CPPUNIT_ASSERT_EQUAL( true, rtl::math::approxEqual( 3.5612905090455637e+38, 3.5612905090455599e+38)); + // 0.3 - 0.2 - 0.1 == 0.0 + CPPUNIT_ASSERT_EQUAL( 0.0, rtl::math::approxSub( rtl::math::approxSub( 0.3, 0.2), 0.1)); + // ((2^53)-1) - ((2^53)-2) == 1.0 + CPPUNIT_ASSERT_EQUAL( 1.0, rtl::math::approxSub( 9007199254740991.0, 9007199254740990.0)); + // (3^31) - ((3^31)-1) == 1.0 + CPPUNIT_ASSERT_EQUAL( 1.0, rtl::math::approxSub( 617673396283947.0, 617673396283946.0)); + } + + void test_erf() { + double x, res; + x = 0.0; + res = rtl::math::erf(x); + CPPUNIT_ASSERT_EQUAL(0.0,res); + rtl::math::setInf( &x, false); + res = rtl::math::erf(x); + CPPUNIT_ASSERT_EQUAL(1.0,res); + rtl::math::setInf( &x, true); + res = rtl::math::erf(x); + CPPUNIT_ASSERT_EQUAL(-1.0,res); + rtl::math::setNan( &x); + res = rtl::math::erf(x); + CPPUNIT_ASSERT(std::isnan(res)); + x = 3.0; + res = rtl::math::erf(-x); + CPPUNIT_ASSERT_DOUBLES_EQUAL( -rtl::math::erf(x), res, 1E-12); + } + + void test_erfc() { + double x, res; + x = 0.0; + res = rtl::math::erfc(x); + CPPUNIT_ASSERT_EQUAL(1.0,res); + rtl::math::setInf( &x, false); + res = rtl::math::erfc(x); + CPPUNIT_ASSERT_EQUAL(0.0,res); + rtl::math::setInf( &x, true); + res = rtl::math::erfc(x); + CPPUNIT_ASSERT_EQUAL(2.0,res); + rtl::math::setNan( &x); + res = rtl::math::erfc(x); + CPPUNIT_ASSERT(std::isnan(res)); + x = 3.0; + res = rtl::math::erfc(-x); + CPPUNIT_ASSERT_DOUBLES_EQUAL( 2.0 - rtl::math::erfc(x), res, 1E-12); + } + + void test_expm1() { + double x, res; + x = 0.0; + res = rtl::math::expm1(x); + CPPUNIT_ASSERT_EQUAL(0.0,res); + x = -0.0; + res = rtl::math::expm1(x); + CPPUNIT_ASSERT_EQUAL(-0.0,res); + CPPUNIT_ASSERT(std::signbit(res)); + rtl::math::setInf( &x, false); + res = rtl::math::expm1(x); + CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && !std::signbit(res)); + rtl::math::setInf( &x, true); + res = rtl::math::expm1(x); + CPPUNIT_ASSERT_EQUAL(-1.0,res); + rtl::math::setNan( &x); + res = rtl::math::expm1(x); + CPPUNIT_ASSERT(std::isnan(res)); + } + + void test_log1p() { + double x, res; + x = 0.0; + res = rtl::math::log1p(x); + CPPUNIT_ASSERT_EQUAL(0.0,res); + x = -0.0; + res = rtl::math::log1p(x); + CPPUNIT_ASSERT_EQUAL(-0.0,res); + CPPUNIT_ASSERT(std::signbit(res)); + rtl::math::setInf( &x, false); + res = rtl::math::log1p(x); + CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && !std::signbit(res)); + x = -1.0; + res = rtl::math::log1p(x); + CPPUNIT_ASSERT_EQUAL(true, std::isinf(res) && std::signbit(res)); + x = -1.1; + res = rtl::math::log1p(x); + CPPUNIT_ASSERT(std::isnan(res)); + rtl::math::setInf( &x, true); + res = rtl::math::log1p(x); + CPPUNIT_ASSERT(std::isnan(res)); + rtl::math::setNan( &x); + res = rtl::math::log1p(x); + CPPUNIT_ASSERT(std::isnan(res)); + } + + void test_acosh() { + double res; + + res = rtl::math::acosh(-1.0); // NaN + CPPUNIT_ASSERT(std::isnan(res)); + + res = rtl::math::acosh(0.0); // NaN + CPPUNIT_ASSERT(std::isnan(res)); + + res = rtl::math::acosh(0.5); // NaN + CPPUNIT_ASSERT(std::isnan(res)); + + CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::acosh(1.0)); + + res = rtl::math::acosh(std::numeric_limits::infinity()); // +Inf + CPPUNIT_ASSERT(!std::signbit(res)); + CPPUNIT_ASSERT(std::isinf(res)); + + // #i97605 + CPPUNIT_ASSERT_DOUBLES_EQUAL(692.56728736744176, rtl::math::acosh(3e+300), 1e-15); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0.014142017775252324, rtl::math::acosh(1.0001), 1e-15); + } + + void test_asinh() { + double res; + + res = rtl::math::asinh(-std::numeric_limits::infinity()); // -Inf + CPPUNIT_ASSERT(std::signbit(res)); + CPPUNIT_ASSERT(std::isinf(res)); + + CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::asinh(0.0)); + + res = rtl::math::asinh(std::numeric_limits::infinity()); // +Inf + CPPUNIT_ASSERT(!std::signbit(res)); + CPPUNIT_ASSERT(std::isinf(res)); + + // #i97605 + CPPUNIT_ASSERT_DOUBLES_EQUAL(691.67568924815798, rtl::math::asinh(1.23e+300), 1e-15); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0350378961923076, rtl::math::asinh(1.23), 1e-16); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1.23e-300, rtl::math::asinh(1.23e-300), 1e-303); + + // asinh is an odd function + CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23e+300), rtl::math::asinh(-1.23e+300)); + CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23), rtl::math::asinh(-1.23)); + CPPUNIT_ASSERT_EQUAL(-rtl::math::asinh(1.23e-300), rtl::math::asinh(-1.23e-300)); + } + + void test_atanh() { + double res; + + res = rtl::math::atanh(-2.0); // NaN + CPPUNIT_ASSERT(std::isnan(res)); + + res = rtl::math::atanh(-1.0); // -Inf + CPPUNIT_ASSERT(std::signbit(res)); + CPPUNIT_ASSERT(std::isinf(res)); + + CPPUNIT_ASSERT_EQUAL(0.0, rtl::math::atanh(0.0)); + + res = rtl::math::atanh(1.0); // +Inf + CPPUNIT_ASSERT(!std::signbit(res)); + CPPUNIT_ASSERT(std::isinf(res)); + + res = rtl::math::atanh(2.0); // NaN + CPPUNIT_ASSERT(std::isnan(res)); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test_stringToDouble_good); + CPPUNIT_TEST(test_stringToDouble_bad); + CPPUNIT_TEST(test_stringToDouble_exponent_without_digit); + CPPUNIT_TEST(test_round); + CPPUNIT_TEST(test_doubleToString); + CPPUNIT_TEST(test_erf); + CPPUNIT_TEST(test_erfc); + CPPUNIT_TEST(test_expm1); + CPPUNIT_TEST(test_log1p); + CPPUNIT_TEST(test_approx); + CPPUNIT_TEST(test_acosh); + CPPUNIT_TEST(test_asinh); + CPPUNIT_TEST(test_atanh); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/ostring/rtl_OString2.cxx b/sal/qa/rtl/ostring/rtl_OString2.cxx new file mode 100644 index 000000000..204475084 --- /dev/null +++ b/sal/qa/rtl/ostring/rtl_OString2.cxx @@ -0,0 +1,508 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +#include + +#include "valueequal.hxx" + +namespace rtl_OString +{ + +class valueOf : public CppUnit::TestFixture +{ + void valueOf_float_test_impl(float _nValue) + { + OString sValue; + sValue = OString::valueOf( _nValue ); + printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr()); + + float nValueATOF = static_cast(atof( sValue.getStr() )); + + bool bEqualResult = is_float_equal(_nValue, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true); + } + + void valueOf_float_test(float _nValue) + { + valueOf_float_test_impl(_nValue); + + // test also the negative part. + float nNegativeValue = -_nValue; + valueOf_float_test_impl(nNegativeValue); + } + +public: + // insert your test code here. + void valueOf_float_test_001() + { + // this is demonstration code + // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); + float nValue = 3.0f; + valueOf_float_test(nValue); + } + + void valueOf_float_test_002() + { + float nValue = 3.5f; + valueOf_float_test(nValue); + } + + void valueOf_float_test_003() + { + float nValue = 3.0625f; + valueOf_float_test(nValue); + } + + void valueOf_float_test_004() + { + float nValue = 3.502525f; + valueOf_float_test(nValue); + } + + void valueOf_float_test_005() + { + float nValue = 3.141592f; + valueOf_float_test(nValue); + } + + void valueOf_float_test_006() + { + float nValue = 3.5025255f; + valueOf_float_test(nValue); + } + + void valueOf_float_test_007() + { + float nValue = 3.0039062f; + valueOf_float_test(nValue); + } + +private: + + void valueOf_double_test_impl(double _nValue) + { + OString sValue; + sValue = OString::valueOf( _nValue ); + printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr()); + + double nValueATOF = atof( sValue.getStr() ); + + bool bEqualResult = is_double_equal(_nValue, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true); + } + + void valueOf_double_test(double _nValue) + { + valueOf_double_test_impl(_nValue); + + // test also the negative part. + double nNegativeValue = -_nValue; + valueOf_double_test_impl(nNegativeValue); + } +public: + + // valueOf double + void valueOf_double_test_001() + { + double nValue = 3.0; + valueOf_double_test(nValue); + } + void valueOf_double_test_002() + { + double nValue = 3.5; + valueOf_double_test(nValue); + } + void valueOf_double_test_003() + { + double nValue = 3.0625; + valueOf_double_test(nValue); + } + void valueOf_double_test_004() + { + double nValue = 3.1415926535; + valueOf_double_test(nValue); + } + void valueOf_double_test_005() + { + double nValue = 3.141592653589793; + valueOf_double_test(nValue); + } + void valueOf_double_test_006() + { + double nValue = 3.1415926535897932; + valueOf_double_test(nValue); + } + void valueOf_double_test_007() + { + double nValue = 3.14159265358979323; + valueOf_double_test(nValue); + } + void valueOf_double_test_008() + { + double nValue = 3.141592653589793238462643; + valueOf_double_test(nValue); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(valueOf); + CPPUNIT_TEST(valueOf_float_test_001); + CPPUNIT_TEST(valueOf_float_test_002); + CPPUNIT_TEST(valueOf_float_test_003); + CPPUNIT_TEST(valueOf_float_test_004); + CPPUNIT_TEST(valueOf_float_test_005); + CPPUNIT_TEST(valueOf_float_test_006); + CPPUNIT_TEST(valueOf_float_test_007); + + CPPUNIT_TEST(valueOf_double_test_001); + CPPUNIT_TEST(valueOf_double_test_002); + CPPUNIT_TEST(valueOf_double_test_003); + CPPUNIT_TEST(valueOf_double_test_004); + CPPUNIT_TEST(valueOf_double_test_005); + CPPUNIT_TEST(valueOf_double_test_006); + CPPUNIT_TEST(valueOf_double_test_007); + CPPUNIT_TEST(valueOf_double_test_008); + CPPUNIT_TEST_SUITE_END(); +}; // class valueOf + +// - toDouble (tests) + +class toDouble : public CppUnit::TestFixture +{ + +public: + + toDouble() + { + // testPrecision a; + } + + void toDouble_test_impl(OString const& _sValue) + { + double nValueATOF = atof( _sValue.getStr() ); + + // OUString suValue = OUString::createFromAscii( _sValue.getStr() ); + double nValueToDouble = _sValue.toDouble(); + + bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult == true); + } + + void toDouble_test(OString const& _sValue) + { + toDouble_test_impl(_sValue); + + // test also the negative part. + OString sNegativValue("-"); + sNegativValue += _sValue; + toDouble_test_impl(sNegativValue); + } + + // insert your test code here. + void toDouble_selftest() + { + printf("Start selftest:\n"); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.01) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.0001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.00001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000001) == false); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000001) == false); + // we check til 14 values after comma + CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000000001) == true); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000000001) == true); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000000001) == true); + printf("Selftest done.\n"); + } + + void toDouble_test_3() + { + OString sValue("3"); + toDouble_test(sValue); + } + void toDouble_test_3_5() + { + OString sValue("3.5"); + toDouble_test(sValue); + } + void toDouble_test_3_0625() + { + OString sValue("3.0625"); + toDouble_test(sValue); + } + void toDouble_test_pi() + { + // value from http://www.angio.net/pi/digits/50.txt + OString sValue("3.141592653589793238462643383279502884197169399375"); + toDouble_test(sValue); + } + + void toDouble_test_1() + { + OString sValue("1"); + toDouble_test(sValue); + } + void toDouble_test_10() + { + OString sValue("10"); + toDouble_test(sValue); + } + void toDouble_test_100() + { + OString sValue("100"); + toDouble_test(sValue); + } + void toDouble_test_1000() + { + OString sValue("1000"); + toDouble_test(sValue); + } + void toDouble_test_10000() + { + OString sValue("10000"); + toDouble_test(sValue); + } + void toDouble_test_1e99() + { + OString sValue("1e99"); + toDouble_test(sValue); + } + void toDouble_test_1e_n99() + { + OString sValue("1e-99"); + toDouble_test(sValue); + } + void toDouble_test_1e308() + { + OString sValue("1e308"); + toDouble_test(sValue); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toDouble); + CPPUNIT_TEST(toDouble_selftest); + + CPPUNIT_TEST(toDouble_test_3); + CPPUNIT_TEST(toDouble_test_3_5); + CPPUNIT_TEST(toDouble_test_3_0625); + CPPUNIT_TEST(toDouble_test_pi); + CPPUNIT_TEST(toDouble_test_1); + CPPUNIT_TEST(toDouble_test_10); + CPPUNIT_TEST(toDouble_test_100); + CPPUNIT_TEST(toDouble_test_1000); + CPPUNIT_TEST(toDouble_test_10000); + CPPUNIT_TEST(toDouble_test_1e99); + CPPUNIT_TEST(toDouble_test_1e_n99); + CPPUNIT_TEST(toDouble_test_1e308); + CPPUNIT_TEST_SUITE_END(); +}; // class toDouble + +// - getToken (tests) + +class getToken : public CppUnit::TestFixture +{ + +public: + void getToken_000() + { + OString sTokenStr; + + sal_Int32 nIndex = 0; + do + { + OString sToken = sTokenStr.getToken( 0, ';', nIndex ); + } + while ( nIndex >= 0 ); + // printf("Index %d\n", nIndex); + // should not GPF + } + + void getToken_001() + { + OString sTokenStr = "a;b"; + + sal_Int32 nIndex = 0; + + OString sToken = sTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True); + CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1); + } + + void getToken_002() + { + OString sTokenStr = "a;b.c"; + + sal_Int32 nIndex = 0; + + OString sToken = sTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'c'", sToken.equals("c") == sal_True); + CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1); + } + + void getToken_003() + { + OString sTokenStr = "a;;b"; + + sal_Int32 nIndex = 0; + + OString sToken = sTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'a'", sToken.equals("a") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be empty", sToken.isEmpty()); + + /* OString */ sToken = sTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be a 'b'", sToken.equals("b") == sal_True); + CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1); + } + + void getToken_004() + { + OString sTokenStr = "longer.then.ever."; + + sal_Int32 nIndex = 0; + + OString sToken = sTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be 'longer'", sToken.equals("longer") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be 'then'", sToken.equals("then") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be 'ever'", sToken.equals("ever") == sal_True); + + /* OString */ sToken = sTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be empty", sToken.isEmpty()); + + CPPUNIT_ASSERT_MESSAGE("index should be negative", nIndex == -1); + } + + CPPUNIT_TEST_SUITE(getToken); + CPPUNIT_TEST(getToken_000); + CPPUNIT_TEST(getToken_001); + CPPUNIT_TEST(getToken_002); + CPPUNIT_TEST(getToken_003); + CPPUNIT_TEST(getToken_004); + CPPUNIT_TEST_SUITE_END(); +}; // class getToken + +// testing the method replaceAt( sal_Int32 index, sal_Int32 count, +// const OString& newStr ) + +// Developer note: Mindy Liu, 2004-04-23 +// stolen from sal/qa/rtl_strings/rtl_OString.cxx + +class replaceAt : public CppUnit::TestFixture +{ + +public: + sal_Bool check_replaceAt( const OString* expVal, const OString* input, + const OString* newStr, sal_Int32 index, sal_Int32 count) + { + OString aStr1; + aStr1= input->replaceAt( index, count, *newStr ); + + printf("the result OString is %s#\n", aStr1.getStr() ); + + sal_Bool bRes = ( expVal->compareTo(aStr1) == 0 ); + return bRes; + } + + void replaceAt_001() + { + sal_Bool bRes = check_replaceAt(new OString("Java@Sun"), + new OString("Sun java"), new OString("Java@Sun"), 0, 8 ); + CPPUNIT_ASSERT_MESSAGE("string differs, replace whole string", bRes == sal_True); + } + + void replaceAt_002() + { + sal_Bool bRes = check_replaceAt(new OString("Sun Java desktop system"), + new OString("Sun "), new OString("Java desktop system"), 10, 8 ); + CPPUNIT_ASSERT_MESSAGE("index > length of input string", bRes == sal_True); + } + + void replaceAt_003() + { + sal_Bool bRes = check_replaceAt(new OString("SuJava desktop system"), + new OString("Sun "), new OString("Java desktop system"), 2, 64 ); + CPPUNIT_ASSERT_MESSAGE("larger count", bRes == sal_True); + } + + void replaceAt_004() + { + + sal_Bool bRes = check_replaceAt(new OString("Java desktop system"), + new OString("Sun "), new OString("Java desktop system"), -4, 8 ); + CPPUNIT_ASSERT_MESSAGE("navigate index", bRes == sal_True); + } + void replaceAt_005() + { + + sal_Bool bRes = check_replaceAt(new OString("Sun Jesktop System"), + new OString("Sun Java Desktop System"), new OString(""), 5, 5 ); + CPPUNIT_ASSERT_MESSAGE("replace with null string", bRes == sal_True); + } + + CPPUNIT_TEST_SUITE(replaceAt); + CPPUNIT_TEST(replaceAt_001); + CPPUNIT_TEST(replaceAt_002); + CPPUNIT_TEST(replaceAt_003); + CPPUNIT_TEST(replaceAt_004); + CPPUNIT_TEST(replaceAt_005); + CPPUNIT_TEST_SUITE_END(); +}; // class replaceAt + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::valueOf); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::toDouble); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::getToken); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OString::replaceAt); + +} // namespace rtl_OString + +// this macro creates an empty function, which will called by the RegisterAllFunctions() +// to let the user the possibility to also register some functions by hand. +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/ostring/rtl_str.cxx b/sal/qa/rtl/ostring/rtl_str.cxx new file mode 100644 index 000000000..f7af22008 --- /dev/null +++ b/sal/qa/rtl/ostring/rtl_str.cxx @@ -0,0 +1,724 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +#include +#include + +namespace rtl_str +{ + + class compare : public CppUnit::TestFixture + { + void compare_001() + { + OString aStr1 = ""; + OString aStr2 = ""; + + sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002() + { + OString aStr1 = "Line must be equal."; + OString aStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_003() + { + OString aStr1 = "Line must differ."; + OString aStr2 = "Line foo bar, ok, differ."; + + sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(compare); + CPPUNIT_TEST(compare_001); + CPPUNIT_TEST(compare_002); + CPPUNIT_TEST(compare_003); + CPPUNIT_TEST_SUITE_END(); + }; // class compare + + class compareIgnoreAsciiCase : public CppUnit::TestFixture + { + void compare_001() + { + OString aStr1 = ""; + OString aStr2 = ""; + + sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002() + { + OString aStr1 = "Line must be equal."; + OString aStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002_1() + { + OString aStr1 = "Line must be equal."; + OString aStr2 = "LINE MUST BE EQUAL."; + + sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue); + } + + void compare_003() + { + OString aStr1 = "Line must differ."; + OString aStr2 = "Line foo bar, ok, differ."; + + sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(compareIgnoreAsciiCase); + CPPUNIT_TEST(compare_001); + CPPUNIT_TEST(compare_002); + CPPUNIT_TEST(compare_002_1); + CPPUNIT_TEST(compare_003); + CPPUNIT_TEST_SUITE_END(); + }; // class compareIgnoreAsciiCase + + class shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture + { + void compare_000() + { + rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( nullptr, 0, nullptr, 0, 0); + } + + void compare_000_1() + { + OString aStr1 = "Line must be equal."; + rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), nullptr, 0, 1); + } + void compare_001() + { + OString aStr1 = ""; + OString aStr2 = ""; + + sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002() + { + OString aStr1 = "Line must be equal."; + OString aStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + aStr1.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002_1() + { + OString aStr1 = "Line must be equal."; + OString aStr2 = "LINE MUST BE EQUAL."; + + sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + aStr1.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue); + } + + void compare_003() + { + OString aStr1 = "Line must differ."; + OString aStr2 = "Line foo bar, ok, differ."; + + sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + 5); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal first 5 characters.", sal_Int32(0), nValue); + } + + void compare_004() + { + OString aStr1 = "Line must differ."; + OString aStr2 = "Line foo bar, ok, differ."; + + sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + aStr1.getLength()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(shortenedCompareIgnoreAsciiCase_WithLength); + CPPUNIT_TEST(compare_000); + CPPUNIT_TEST(compare_000_1); + CPPUNIT_TEST(compare_001); + CPPUNIT_TEST(compare_002); + CPPUNIT_TEST(compare_002_1); + CPPUNIT_TEST(compare_003); + CPPUNIT_TEST(compare_004); + CPPUNIT_TEST_SUITE_END(); + }; // class compare + + class hashCode : public CppUnit::TestFixture + { + void hashCode_001() + { + OString aStr1 = "Line for a hashCode."; + sal_Int32 nHashCode = rtl_str_hashCode( aStr1.getStr() ); + printf("hashcode: %" SAL_PRIdINT32 "\n", nHashCode); + // CPPUNIT_ASSERT_MESSAGE("failed.", nValue == 0); + } + + void hashCode_002() + { + OString aStr1 = "Line for a hashCode."; + sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() ); + + OString aStr2 = "Line for a hashCode."; + sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("hashcodes must be equal.", nHashCode1, nHashCode2 ); + } + + void hashCode_003() + { + OString aStr1 = "Line for a hashCode."; + sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() ); + + OString aStr2 = "Line for another hashcode."; + sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() ); + + CPPUNIT_ASSERT_MESSAGE("hashcodes must differ.", nHashCode1 != nHashCode2 ); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(hashCode); + CPPUNIT_TEST(hashCode_001); + CPPUNIT_TEST(hashCode_002); + CPPUNIT_TEST(hashCode_003); + CPPUNIT_TEST_SUITE_END(); + }; // class compare + + class indexOfChar : public CppUnit::TestFixture + { + void indexOfChar_000() + { + sal_Int32 nIndex = rtl_str_indexOfChar("", 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string", + sal_Int32(-1), nIndex); + } + + void indexOfChar_001() + { + OString aStr1 = "Line for an indexOfChar."; + + sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'L' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'i' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(1), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'n' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(2), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'e' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(3), nIndex); + } + + void indexOfChar_002() + { + OString aStr1 = "Line for an indexOfChar."; + sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'y' ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(indexOfChar); + CPPUNIT_TEST(indexOfChar_000); + CPPUNIT_TEST(indexOfChar_001); + CPPUNIT_TEST(indexOfChar_002); + CPPUNIT_TEST_SUITE_END(); + }; // class compare + + class lastIndexOfChar : public CppUnit::TestFixture + { + void lastIndexOfChar_000() + { + sal_Int32 nIndex = rtl_str_lastIndexOfChar("", 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string", + sal_Int32(-1), nIndex); + } + + void lastIndexOfChar_001() + { + OString aStr1 = "Line for a lastIndexOfChar."; + + sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'C' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(22), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'h' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(23), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'a' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(24), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'r' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(25), nIndex); + } + + void lastIndexOfChar_002() + { + OString aStr1 = "Line for a lastIndexOfChar."; + sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'y' ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(lastIndexOfChar); + CPPUNIT_TEST(lastIndexOfChar_000); + CPPUNIT_TEST(lastIndexOfChar_001); + CPPUNIT_TEST(lastIndexOfChar_002); + CPPUNIT_TEST_SUITE_END(); + }; // class lastIndexOfChar + + class indexOfStr : public CppUnit::TestFixture + { + void indexOfStr_000() + { + OString aStr1("Line for an indexOfStr."); + sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable", + sal_Int32(-1), nIndex); + } + + void indexOfStr_001() + { + OString aStr1 = "Line for an indexOfStr."; + + sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "Line" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "for" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(5), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "a" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex); + + /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "an index" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex); + } + + void indexOfStr_002() + { + OString aStr1 = "Line for an indexOfStr."; + sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "not exist" ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(indexOfStr); + CPPUNIT_TEST(indexOfStr_000); + CPPUNIT_TEST(indexOfStr_001); + CPPUNIT_TEST(indexOfStr_002); + CPPUNIT_TEST_SUITE_END(); + }; // class compare + + class lastIndexOfStr : public CppUnit::TestFixture + { + void lastIndexOfStr_000() + { + OString aStr1("Line for a lastIndexOfStr."); + sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), "" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable", + sal_Int32(-1), nIndex); + } + + void lastIndexOfStr_001() + { + OString aStr1 = "Line for a lastIndexOfStr."; + OString aSearchStr = "Index"; + + sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(15), nIndex); + + /* OString */ aSearchStr = "Line"; + /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex); + + /* OString */ aSearchStr = ""; + /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + void lastIndexOfStr_002() + { + OString aStr1 = "Line for a lastIndexOfStr."; + OString aSearchStr = "foo"; + sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + void lastIndexOfStr_003() + { + OString aStr1 = "Line for a lastIndexOfStr."; + OString aSearchStr = "O"; + sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(20), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(lastIndexOfStr); + CPPUNIT_TEST(lastIndexOfStr_000); + CPPUNIT_TEST(lastIndexOfStr_001); + CPPUNIT_TEST(lastIndexOfStr_002); + CPPUNIT_TEST(lastIndexOfStr_003); + CPPUNIT_TEST_SUITE_END(); + }; // class lastIndexOfStr + + class replaceChar : public CppUnit::TestFixture + { + void replaceChar_001() + { + OString aStr1 = "replace char."; + OString aShouldStr1 = "ruplacu char."; + + char* pStr = static_cast(malloc(aStr1.getLength() + 1)); + CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + strcpy(pStr, aStr1.getStr()); + + rtl_str_replaceChar( pStr, 'e', 'u' ); + + CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(OString(pStr))); + free(pStr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(replaceChar); + CPPUNIT_TEST(replaceChar_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class replaceChar_WithLength : public CppUnit::TestFixture + { + void replaceChar_WithLength_000() + { + rtl_str_replaceChar_WithLength( nullptr, 0, 0, 0 ); + } + + void replaceChar_WithLength_001() + { + OString aStr1 = "replace char."; + OString aShouldStr1 = "ruplace char."; + + char* pStr = static_cast(malloc(aStr1.getLength() + 1)); + CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + strcpy(pStr, aStr1.getStr()); + + rtl_str_replaceChar_WithLength( pStr, 6, 'e', 'u' ); + + CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(OString(pStr))); + free(pStr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(replaceChar_WithLength); + CPPUNIT_TEST(replaceChar_WithLength_000); + CPPUNIT_TEST(replaceChar_WithLength_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiLowerCase : public CppUnit::TestFixture + { + void toAsciiLowerCase_001() + { + OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE."; + OString aShouldStr1 = "change this to ascii lower case."; + + char* pStr = static_cast(malloc(aStr1.getLength() + 1)); + CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + strcpy(pStr, aStr1.getStr()); + + rtl_str_toAsciiLowerCase( pStr ); + + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr))); + free(pStr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiLowerCase); + CPPUNIT_TEST(toAsciiLowerCase_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiLowerCase_WithLength : public CppUnit::TestFixture + { + void toAsciiLowerCase_WithLength_000() + { + rtl_str_toAsciiLowerCase_WithLength( nullptr, 0 ); + } + + void toAsciiLowerCase_WithLength_001() + { + OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE."; + OString aShouldStr1 = "change thiS TO ASCII LOWER CASE."; + + char* pStr = static_cast(malloc(aStr1.getLength() + 1)); + CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + strcpy(pStr, aStr1.getStr()); + + rtl_str_toAsciiLowerCase_WithLength( pStr, 10 ); + + printf("Lowercase with length: '%s'\n", pStr); + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr))); + free(pStr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiLowerCase_WithLength); + CPPUNIT_TEST(toAsciiLowerCase_WithLength_000); + CPPUNIT_TEST(toAsciiLowerCase_WithLength_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiUpperCase : public CppUnit::TestFixture + { + void toAsciiUpperCase_001() + { + OString aStr1 = "change this to ascii upper case."; + OString aShouldStr1 = "CHANGE THIS TO ASCII UPPER CASE."; + + char* pStr = static_cast(malloc(aStr1.getLength() + 1)); + CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + strcpy(pStr, aStr1.getStr()); + + rtl_str_toAsciiUpperCase( pStr ); + + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr))); + free(pStr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiUpperCase); + CPPUNIT_TEST(toAsciiUpperCase_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiUpperCase_WithLength : public CppUnit::TestFixture + { + void toAsciiUpperCase_WithLength_000() + { + rtl_str_toAsciiUpperCase_WithLength( nullptr, 0 ); + } + + void toAsciiUpperCase_WithLength_001() + { + OString aStr1 = "change this to ascii lower case."; + OString aShouldStr1 = "CHANGE THIs to ascii lower case."; + + char* pStr = static_cast(malloc(aStr1.getLength() + 1)); + CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + + strcpy(pStr, aStr1.getStr()); + rtl_str_toAsciiUpperCase_WithLength( pStr, 10 ); + + printf("Uppercase with length: '%s'\n", aStr1.getStr()); + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(OString(pStr))); + free(pStr); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiUpperCase_WithLength); + CPPUNIT_TEST(toAsciiUpperCase_WithLength_000); + CPPUNIT_TEST(toAsciiUpperCase_WithLength_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class trim_WithLength : public CppUnit::TestFixture + { + void trim_WithLength_000() + { + rtl_str_trim_WithLength(nullptr, 0); + // should not GPF + } + + void trim_WithLength_000_1() + { + char pStr[] = { " trim this" }; + rtl_str_trim_WithLength( pStr, 0 ); + } + + void trim_WithLength_001() + { + char pStr[] = { " trim this" }; + rtl_str_trim_WithLength( pStr, 2 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should be empty", size_t(0), strlen(pStr)); + } + + void trim_WithLength_002() + { + char pStr[] = { "trim this" }; + rtl_str_trim_WithLength( pStr, 5 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", size_t(4), strlen(pStr)); + } + + void trim_WithLength_003() + { + char pStr[] = {" trim this"}; + rtl_str_trim_WithLength( pStr, 11 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", size_t(4), strlen(pStr)); + } + + void trim_WithLength_004() + { + char pStr[] = { "\r\n\t \n\r trim \n this" }; + rtl_str_trim_WithLength( pStr, 17 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", size_t(4), strlen(pStr)); + } + + void trim_WithLength_005() + { + char pStr[] = { "\r\n\t \n\r trim \t this \n\r\t\t " }; + rtl_str_trim_WithLength( pStr, strlen(pStr) ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim \t this'", size_t(11), strlen(pStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(trim_WithLength); + CPPUNIT_TEST(trim_WithLength_000); + CPPUNIT_TEST(trim_WithLength_000_1); + CPPUNIT_TEST(trim_WithLength_001); + CPPUNIT_TEST(trim_WithLength_002); + CPPUNIT_TEST(trim_WithLength_003); + CPPUNIT_TEST(trim_WithLength_004); + CPPUNIT_TEST(trim_WithLength_005); + CPPUNIT_TEST_SUITE_END(); + }; + + class valueOfChar : public CppUnit::TestFixture + { + void valueOfChar_001() + { + char pStr[RTL_STR_MAX_VALUEOFCHAR]; + rtl_str_valueOfChar(pStr, 'A'); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'A'", 'A', pStr[0]); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(valueOfChar); + CPPUNIT_TEST(valueOfChar_001); + CPPUNIT_TEST_SUITE_END(); + }; + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::compare); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::compareIgnoreAsciiCase); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::shortenedCompareIgnoreAsciiCase_WithLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::hashCode); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::indexOfChar); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::lastIndexOfChar); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::indexOfStr); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::lastIndexOfStr); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::replaceChar); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::replaceChar_WithLength); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiLowerCase); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiLowerCase_WithLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiUpperCase); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::toAsciiUpperCase_WithLength); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::trim_WithLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_str::valueOfChar); + +} // namespace rtl_str + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/ostring/rtl_str.xsce b/sal/qa/rtl/ostring/rtl_str.xsce new file mode 100644 index 000000000..cd12e72f7 --- /dev/null +++ b/sal/qa/rtl/ostring/rtl_str.xsce @@ -0,0 +1,43 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# signaled with SIGNAL 11 +rtl_str.compare.compare_000 +rtl_str.compare.compare_000_1 + +rtl_str.compareIgnoreAsciiCase.compare_000 +rtl_str.compareIgnoreAsciiCase.compare_000_1 + +rtl_str.hashCode.hashCode_000 + +rtl_str.indexOfChar.indexOfChar_000 + +rtl_str.lastIndexOfChar.lastIndexOfChar_000 + +rtl_str.indexOfStr.indexOfStr_000 + +rtl_str.lastIndexOfStr.lastIndexOfStr_000 + +rtl_str.replaceChar.replaceChar_000 + +rtl_str.replaceChar_WithLength.replaceChar_WithLength_000_1 + +rtl_str.toAsciiLowerCase.toAsciiLowerCase_000 + +rtl_str.toAsciiUpperCase.toAsciiUpperCase_000 + +rtl_str.valueOfChar.valueOfChar_000 diff --git a/sal/qa/rtl/ostring/rtl_string.cxx b/sal/qa/rtl/ostring/rtl_string.cxx new file mode 100644 index 000000000..71c709519 --- /dev/null +++ b/sal/qa/rtl/ostring/rtl_string.cxx @@ -0,0 +1,169 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +#include +#include + +namespace rtl_string +{ + + class getLength : public CppUnit::TestFixture + { + public: + + void getLength_000() + { + rtl_string_getLength( NULL ); + // should not GPF + } + + void getLength_001() + { + OString aStr("Test Length."); + sal_Int32 nValue = rtl_string_getLength( aStr.pData ); + + CPPUNIT_ASSERT_MESSAGE("Length must equal getLength()", aStr.getLength() == nValue); + CPPUNIT_ASSERT_MESSAGE( + "Length must equal strlen()", + nValue >= 0 + && (strlen(aStr.getStr()) + == sal::static_int_cast< sal_uInt32 >(nValue))); + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(getLength); + CPPUNIT_TEST(getLength_000); + CPPUNIT_TEST(getLength_001); + CPPUNIT_TEST_SUITE_END(); + }; // class getLength + + class newFromString : public CppUnit::TestFixture + { + public: + + // void newFromString_000() + // { + // sal_Int32 nValue = rtl_string_newFromString( NULL, NULL ); + // // should not GPF + // } + + void newFromString_001() + { + OString aStr("Test Length."); + rtl_String *pStr = NULL; + + rtl_string_newFromString( &pStr, aStr.pData ); + + OString aNewStr(pStr); + CPPUNIT_ASSERT_MESSAGE("Strings must be equal", aStr.equals(aNewStr) == sal_True); + + rtl_string_release(pStr); + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(newFromString); + // CPPUNIT_TEST(newFromString_000); + CPPUNIT_TEST(newFromString_001); + CPPUNIT_TEST_SUITE_END(); + }; // class newFromString + + class convertUStringToString : public CppUnit::TestFixture + { + public: + + // void newFromString_000() + // { + // sal_Int32 nValue = rtl_string_newFromString( NULL, NULL ); + // // should not GPF + // } + + void convertUStringToString_001() + { + OUString suString("Hello"); + OString sString; + sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS); + + CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("Hello")) == sal_True); + } + + void convertUStringToString_002() + { + OString sStr("H\xE4llo"); + OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15); + + OString sString; + sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS); + + CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("H\xE4llo")) == sal_True); + } + + void convertUStringToString_003() + { + OString sStr("H\xC3\xA4llo"); + OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_UTF8); + + OString sString; + sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS); + + CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("H\xE4llo")) == sal_True); + } + + void convertUStringToString_004() + { + OString sStr("Tsch\xFC\xDF"); + OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15); + OString sString; + + sal_Bool bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS); + /* sal_Bool */ bRet = rtl_convertUStringToString(&sString.pData, suString.getStr(), suString.getLength(), RTL_TEXTENCODING_ISO_8859_15, OUSTRING_TO_OSTRING_CVTFLAGS); + CPPUNIT_ASSERT_MESSAGE("Strings must be equal", bRet == sal_True && sString.equals(OString("Tsch\xFC\xDF")) == sal_True); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(convertUStringToString); + CPPUNIT_TEST(convertUStringToString_001); + CPPUNIT_TEST(convertUStringToString_002); + CPPUNIT_TEST(convertUStringToString_003); + CPPUNIT_TEST(convertUStringToString_004); + CPPUNIT_TEST_SUITE_END(); + }; // class convertUStringToString + +} // namespace rtl_string + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::getLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::newFromString); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_string::convertUStringToString); + +// this macro creates an empty function, which will called by the RegisterAllFunctions() +// to let the user the possibility to also register some functions by hand. +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/ostring/rtl_string.xsce b/sal/qa/rtl/ostring/rtl_string.xsce new file mode 100644 index 000000000..7c8227e49 --- /dev/null +++ b/sal/qa/rtl/ostring/rtl_string.xsce @@ -0,0 +1,18 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +rtl_string.getLength.getLength_000 diff --git a/sal/qa/rtl/oustring/joblist.txt b/sal/qa/rtl/oustring/joblist.txt new file mode 100644 index 000000000..c309c670d --- /dev/null +++ b/sal/qa/rtl/oustring/joblist.txt @@ -0,0 +1,27 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# JobFile for rtl_OUString +# header source sal/inc/rtl/ustring.hxx + +rtl_OUString.valueOf.valueOf_double_001 +rtl_OUString.valueOf.valueOf_double_002 +rtl_OUString.valueOf.valueOf_double_003 +rtl_OUString.valueOf.valueOf_double_004 +rtl_OUString.valueOf.valueOf_double_005 +rtl_OUString.valueOf.valueOf_double_006 +rtl_OUString.valueOf.valueOf_double_007 diff --git a/sal/qa/rtl/oustring/rtl_OUString2.cxx b/sal/qa/rtl/oustring/rtl_OUString2.cxx new file mode 100644 index 000000000..22e731fd1 --- /dev/null +++ b/sal/qa/rtl/oustring/rtl_OUString2.cxx @@ -0,0 +1,1068 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +// autogenerated file with codegen.pl + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace rtl_OUString +{ + +namespace { + +// Avoid -fsanitize=undefined warning e.g. "runtime error: value 1e+99 is +// outside the range of representable values of type 'float'" with Clang prior to +// "Treat the +// range of representable values of floating-point types as [-inf, +inf] not as [-max, +max]" +// (ENABLE_RUNTIME_OPTIMIZATIONS is an approximation for checking whether building is done without +// -fsanitize=undefined): +float doubleToFloat(double x) { +#if !defined __clang__ || __clang_major__ >= 9 || ENABLE_RUNTIME_OPTIMIZATIONS + return static_cast(x); +#else + return + x < -std::numeric_limits::max() + ? -std::numeric_limits::infinity() + : x > std::numeric_limits::max() + ? std::numeric_limits::infinity() + : static_cast(x); +#endif +} + +} + +class number : public CppUnit::TestFixture +{ + void number_float_test_impl(float _nValue) + { + OUString suValue(OUString::number(_nValue)); + OString sValue; + sValue <<= suValue; + printf("nFloat := %.9f sValue := %s\n", _nValue, sValue.getStr()); + + double nValueATOF = doubleToFloat(atof( sValue.getStr() )); + + bool bEqualResult = is_float_equal(_nValue, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult); + } + + void number_float_test(float _nValue) + { + number_float_test_impl(_nValue); + + // test also the negative part. + float nNegativeValue = -_nValue; + number_float_test_impl(nNegativeValue); + } + +public: + // insert your test code here. + void number_float_test_001() + { + // this is demonstration code + // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); + float nValue = 3.0f; + number_float_test(nValue); + } + + void number_float_test_002() + { + float nValue = 3.5f; + number_float_test(nValue); + } + + void number_float_test_003() + { + float nValue = 3.0625f; + number_float_test(nValue); + } + + void number_float_test_004() + { + float nValue = 3.502525f; + number_float_test(nValue); + } + + void number_float_test_005() + { + float nValue = 3.141592f; + number_float_test(nValue); + } + + void number_float_test_006() + { + float nValue = 3.5025255f; + number_float_test(nValue); + } + + void number_float_test_007() + { + float nValue = 3.0039062f; + number_float_test(nValue); + } + +private: + + void number_double_test_impl(double _nValue) + { + OUString suValue = OUString::number( _nValue ); + OString sValue; + sValue <<= suValue; + printf("nDouble := %.20f sValue := %s\n", _nValue, sValue.getStr()); + + double nValueATOF = atof( sValue.getStr() ); + + bool bEqualResult = is_double_equal(_nValue, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult); + } + + void number_double_test(double _nValue) + { + number_double_test_impl(_nValue); + + // test also the negative part. + double nNegativeValue = -_nValue; + number_double_test_impl(nNegativeValue); + } +public: + + // number double + void number_double_test_001() + { + double nValue = 3.0; + number_double_test(nValue); + } + void number_double_test_002() + { + double nValue = 3.5; + number_double_test(nValue); + } + void number_double_test_003() + { + double nValue = 3.0625; + number_double_test(nValue); + } + void number_double_test_004() + { + double nValue = 3.1415926535; + number_double_test(nValue); + } + void number_double_test_005() + { + double nValue = 3.141592653589793; + number_double_test(nValue); + } + void number_double_test_006() + { + double nValue = 3.1415926535897932; + number_double_test(nValue); + } + void number_double_test_007() + { + double nValue = 3.14159265358979323; + number_double_test(nValue); + } + void number_double_test_008() + { + double nValue = 3.141592653589793238462643; + number_double_test(nValue); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(number); + CPPUNIT_TEST(number_float_test_001); + CPPUNIT_TEST(number_float_test_002); + CPPUNIT_TEST(number_float_test_003); + CPPUNIT_TEST(number_float_test_004); + CPPUNIT_TEST(number_float_test_005); + CPPUNIT_TEST(number_float_test_006); + CPPUNIT_TEST(number_float_test_007); + + CPPUNIT_TEST(number_double_test_001); + CPPUNIT_TEST(number_double_test_002); + CPPUNIT_TEST(number_double_test_003); + CPPUNIT_TEST(number_double_test_004); + CPPUNIT_TEST(number_double_test_005); + CPPUNIT_TEST(number_double_test_006); + CPPUNIT_TEST(number_double_test_007); + CPPUNIT_TEST(number_double_test_008); + CPPUNIT_TEST_SUITE_END(); +}; // class number + + class toInt: public CppUnit::TestFixture { + public: + void test() { + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_Int32 >(-0x76543210), + (OUString("-76543210"). + toInt32(16))); + // @return 0 if this string represents no number or one of too large magnitude + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_Int32 >(0), + (OUString("+FEDCBA98"). + toInt32(16))); + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_Int64 >(-SAL_CONST_INT64(0x76543210FEDCBA98)), + (OUString( + "-76543210FEDCBA98"). + toInt64(16))); + // @return 0 if this string represents no number or one of too large magnitude + CPPUNIT_ASSERT_EQUAL( + static_cast< sal_Int64 >(SAL_CONST_INT64(0)), + (OUString( + "+FEDCBA9876543210"). + toInt64(16))); + } + + CPPUNIT_TEST_SUITE(toInt); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); + }; + + // - toDouble (tests) + class toDouble : public CppUnit::TestFixture + { + public: + void toDouble_test_impl(OString const& _sValue) + { + //printf("the original str is %s\n", _sValue.getStr()); + double nValueATOF = atof( _sValue.getStr() ); + //printf("original data is %e\n", nValueATOF); + OUString suValue = OUString::createFromAscii( _sValue.getStr() ); + double nValueToDouble = suValue.toDouble(); + //printf("result data is %e\n", nValueToDouble); + + bool bEqualResult = is_double_equal(nValueToDouble, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult); + } + + void toDouble_test(OString const& _sValue) + { + toDouble_test_impl(_sValue); + + // test also the negative part. + OString sNegativValue("-"); + sNegativValue += _sValue; + toDouble_test_impl(sNegativValue); + } + + // insert your test code here. + void toDouble_selftest() + { + printf("Start selftest:\n"); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.01)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.00000000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.000000000001)); + CPPUNIT_ASSERT (!is_double_equal(1.0, 1.0000000000001)); + // we check til 15 values after comma + CPPUNIT_ASSERT (is_double_equal(1.0, 1.00000000000001)); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.000000000000001)); + CPPUNIT_ASSERT (is_double_equal(1.0, 1.0000000000000001)); + printf("Selftest done.\n"); + } + + void toDouble_test_3() + { + toDouble_test("3"); + } + void toDouble_test_3_5() + { + toDouble_test("3.5"); + } + void toDouble_test_3_0625() + { + toDouble_test("3.0625"); + } + void toDouble_test_pi() + { + // value from http://www.angio.net/pi/digits/50.txt + toDouble_test("3.141592653589793238462643383279502884197169399375"); + } + + void toDouble_test_1() + { + toDouble_test("1"); + } + void toDouble_test_10() + { + toDouble_test("10"); + } + void toDouble_test_100() + { + toDouble_test("100"); + } + void toDouble_test_1000() + { + toDouble_test("1000"); + } + void toDouble_test_10000() + { + toDouble_test("10000"); + } + void toDouble_test_1e99() + { + toDouble_test("1e99"); + } + void toDouble_test_1e_n99() + { + toDouble_test("1e-99"); + } + void toDouble_test_1e308() + { + toDouble_test("1e308"); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toDouble); + CPPUNIT_TEST(toDouble_selftest); + + CPPUNIT_TEST(toDouble_test_3); + CPPUNIT_TEST(toDouble_test_3_5); + CPPUNIT_TEST(toDouble_test_3_0625); + CPPUNIT_TEST(toDouble_test_pi); + CPPUNIT_TEST(toDouble_test_1); + CPPUNIT_TEST(toDouble_test_10); + CPPUNIT_TEST(toDouble_test_100); + CPPUNIT_TEST(toDouble_test_1000); + CPPUNIT_TEST(toDouble_test_10000); + CPPUNIT_TEST(toDouble_test_1e99); + CPPUNIT_TEST(toDouble_test_1e_n99); + CPPUNIT_TEST(toDouble_test_1e308); + CPPUNIT_TEST_SUITE_END(); + }; // class toDouble + + // - toFloat (tests) + class toFloat : public CppUnit::TestFixture + { + public: + void toFloat_test_impl(OString const& _sValue) + { + //printf("the original str is %s\n", _sValue.getStr()); + float nValueATOF = doubleToFloat(atof( _sValue.getStr() )); + //printf("the original str is %.10f\n", nValueATOF); + OUString suValue = OUString::createFromAscii( _sValue.getStr() ); + float nValueToFloat = suValue.toFloat(); + //printf("the result str is %.10f\n", nValueToFloat); + + bool bEqualResult = is_float_equal(nValueToFloat, nValueATOF); + CPPUNIT_ASSERT_MESSAGE("Values are not equal.", bEqualResult); + } + + void toFloat_test(OString const& _sValue) + { + toFloat_test_impl(_sValue); + + // test also the negative part. + OString sNegativValue("-"); + sNegativValue += _sValue; + toFloat_test_impl(sNegativValue); + } + + // insert your test code here. + void toFloat_selftest() + { + printf("Start selftest:\n"); + CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.01f)); + CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.001f)); + CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.0001f)); + CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.00001f)); + CPPUNIT_ASSERT (!is_float_equal(1.0f, 1.000002f)); + CPPUNIT_ASSERT (is_float_equal(1.0f, 1.0000001f)); + CPPUNIT_ASSERT (is_float_equal(1.0f, 1.00000001f)); + CPPUNIT_ASSERT (is_float_equal(1.0f, 1.000000001f)); + + printf("Selftest done.\n"); + } + + void toFloat_test_3() + { + toFloat_test("3"); + } + void toFloat_test_3_5() + { + toFloat_test("3.5"); + } + void toFloat_test_3_0625() + { + toFloat_test("3.0625"); + } + void toFloat_test_3_0625_e() + { + toFloat_test("3.0625e-4"); + } + void toFloat_test_pi() + { + // value from http://www.angio.net/pi/digits/50.txt + toFloat_test("3.141592653589793238462643383279502884197169399375"); + } + + void toFloat_test_1() + { + toFloat_test("1"); + } + void toFloat_test_10() + { + toFloat_test("10"); + } + void toFloat_test_100() + { + toFloat_test("100"); + } + void toFloat_test_1000() + { + toFloat_test("1000"); + } + void toFloat_test_10000() + { + toFloat_test("10000"); + } + void toFloat_test_mix() + { + toFloat_test("456789321455.123456789012"); + } + void toFloat_test_1e99() + { + toFloat_test("1e99"); + } + void toFloat_test_1e_n99() + { + toFloat_test("1e-9"); + } + void toFloat_test_1e308() + { + toFloat_test("1e308"); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toFloat); + CPPUNIT_TEST(toFloat_selftest); + + CPPUNIT_TEST(toFloat_test_3); + CPPUNIT_TEST(toFloat_test_3_5); + CPPUNIT_TEST(toFloat_test_3_0625); + CPPUNIT_TEST(toFloat_test_3_0625_e); + CPPUNIT_TEST(toFloat_test_pi); + CPPUNIT_TEST(toFloat_test_1); + CPPUNIT_TEST(toFloat_test_10); + CPPUNIT_TEST(toFloat_test_100); + CPPUNIT_TEST(toFloat_test_1000); + CPPUNIT_TEST(toFloat_test_10000); + CPPUNIT_TEST(toFloat_test_mix); + CPPUNIT_TEST(toFloat_test_1e99); + CPPUNIT_TEST(toFloat_test_1e_n99); + CPPUNIT_TEST(toFloat_test_1e308); + CPPUNIT_TEST_SUITE_END(); + }; // class toFloat + +// - lastIndexOf (tests) +class lastIndexOf : public CppUnit::TestFixture +{ + +public: + void lastIndexOf_oustring(OUString const& _suStr, OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos) + { + // Algorithm + // search the string _suSearchStr (OUString) in the string _suStr. + // check if the _nExpectedResultPos occurs. + + sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr); + CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos); + } + + void lastIndexOf_salunicode(OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos) + { + // Algorithm + // search the unicode char _suSearchChar (sal_Unicode) in the string _suStr. + // check if the _nExpectedResultPos occurs. + + sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar); + CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos); + } + + void lastIndexOf_oustring_offset(OUString const& _suStr, OUString const& _suSearchStr, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset) + { + sal_Int32 nPos = _suStr.lastIndexOf(_suSearchStr, _nStartOffset); + CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos); + } + + void lastIndexOf_salunicode_offset(OUString const& _suStr, sal_Unicode _cuSearchChar, sal_Int32 _nExpectedResultPos, sal_Int32 _nStartOffset) + { + sal_Int32 nPos = _suStr.lastIndexOf(_cuSearchChar, _nStartOffset); + CPPUNIT_ASSERT_EQUAL_MESSAGE("expected position is wrong", _nExpectedResultPos, nPos); + } + + void lastIndexOf_test_oustring_offset_001() + { + // search for sun, start at the end, found (pos==0) + OUString aStr("sun java system"); + lastIndexOf_oustring_offset(aStr, "sun", 0, aStr.getLength()); + } + + void lastIndexOf_test_oustring_offset_002() + { + // search for sun, start at pos = 3, found (pos==0) + lastIndexOf_oustring_offset("sun java system", "sun", 0, 3); + } + + void lastIndexOf_test_oustring_offset_003() + { + // search for sun, start at pos = 2, found (pos==-1) + lastIndexOf_oustring_offset("sun java system", "sun", -1, 2); + } + + void lastIndexOf_test_oustring_offset_004() + { + // search for sun, start at the end, found (pos==0) + lastIndexOf_oustring_offset("sun java system", "sun", -1, 1); + } + + void lastIndexOf_test_oustring_001() + { + // search for sun, found (pos==0) + lastIndexOf_oustring("sun java system", "sun", 0); + } + + void lastIndexOf_test_oustring_002() + { + // search for sun, found (pos==4) + lastIndexOf_oustring("the sun java system", "sun", 4); + } + + void lastIndexOf_test_oustring_003() + { + // search for sun, found (pos==8) + lastIndexOf_oustring("the sun sun java system", "sun", 8); + } + + void lastIndexOf_test_oustring_004() + { + // search for sun, found (pos==8) + lastIndexOf_oustring("the sun sun", "sun", 8); + } + + void lastIndexOf_test_oustring_005() + { + // search for sun, found (pos==4) + lastIndexOf_oustring("the sun su", "sun", 4); + } + + void lastIndexOf_test_oustring_006() + { + // search for sun, found (pos==-1) + lastIndexOf_oustring("the su su", "sun", -1); + } + + void lastIndexOf_test_oustring_007() + { + // search for earth, not found (-1) + lastIndexOf_oustring("the su su", "earth", -1); + } + + void lastIndexOf_test_oustring_008() + { + // search for earth, not found (-1) + lastIndexOf_oustring("", "earth", -1); + } + + void lastIndexOf_test_oustring_009() + { + // search for earth, not found (-1) + lastIndexOf_oustring("", "", -1); + + } + + void lastIndexOf_test_salunicode_001() + { + // search for 's', found (19) + sal_Unicode suChar = L's'; + lastIndexOf_salunicode("the sun sun java system", suChar, 19); + } + + void lastIndexOf_test_salunicode_002() + { + // search for 'x', not found (-1) + sal_Unicode suChar = L'x'; + lastIndexOf_salunicode("the sun sun java system", suChar, -1); + } + + void lastIndexOf_test_salunicode_offset_001() + { + // search for 's', start from pos last char, found (19) + OUString aStr("the sun sun java system"); + sal_Unicode cuChar = L's'; + lastIndexOf_salunicode_offset(aStr, cuChar, 19, aStr.getLength()); + } + void lastIndexOf_test_salunicode_offset_002() + { + // search for 's', start pos is last occur from search behind, found (17) + sal_Unicode cuChar = L's'; + lastIndexOf_salunicode_offset("the sun sun java system", cuChar, 17, 19); + } + void lastIndexOf_test_salunicode_offset_003() + { + // search for 't', start pos is 1, found (0) + sal_Unicode cuChar = L't'; + lastIndexOf_salunicode_offset("the sun sun java system", cuChar, 0, 1); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(lastIndexOf); + CPPUNIT_TEST(lastIndexOf_test_oustring_001); + CPPUNIT_TEST(lastIndexOf_test_oustring_002); + CPPUNIT_TEST(lastIndexOf_test_oustring_003); + CPPUNIT_TEST(lastIndexOf_test_oustring_004); + CPPUNIT_TEST(lastIndexOf_test_oustring_005); + CPPUNIT_TEST(lastIndexOf_test_oustring_006); + CPPUNIT_TEST(lastIndexOf_test_oustring_007); + CPPUNIT_TEST(lastIndexOf_test_oustring_008); + CPPUNIT_TEST(lastIndexOf_test_oustring_009); + + CPPUNIT_TEST(lastIndexOf_test_oustring_offset_001); + CPPUNIT_TEST(lastIndexOf_test_oustring_offset_002); + CPPUNIT_TEST(lastIndexOf_test_oustring_offset_003); + CPPUNIT_TEST(lastIndexOf_test_oustring_offset_004); + + CPPUNIT_TEST(lastIndexOf_test_salunicode_001); + CPPUNIT_TEST(lastIndexOf_test_salunicode_002); + + CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_001); + CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_002); + CPPUNIT_TEST(lastIndexOf_test_salunicode_offset_003); + + CPPUNIT_TEST_SUITE_END(); +}; // class lastIndexOf + +// - getToken (tests) +class getToken : public CppUnit::TestFixture +{ + +public: + void getToken_000() + { + OUString suTokenStr; + + sal_Int32 nIndex = 0; + do + { + suTokenStr.getToken( 0, ';', nIndex ); + } + while ( nIndex >= 0 ); + printf("Index %" SAL_PRIdINT32 "\n", nIndex); + // should not GPF + } + + void getToken_001() + { + OUString suTokenStr("a;b"); + + sal_Int32 nIndex = 0; + + OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken); + + /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast(-1), nIndex); + } + + void getToken_002() + { + OUString suTokenStr("a;b.c"); + + sal_Int32 nIndex = 0; + + OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken ); + + /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken ); + + /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'c'", OUString("c"), suToken ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast(-1), nIndex); + } + + void getToken_003() + { + OUString suTokenStr("a;;b"); + + sal_Int32 nIndex = 0; + + OUString suToken = suTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'a'", OUString("a"), suToken ); + + /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be empty", suToken.isEmpty()); + + /* OUString */ suToken = suTokenStr.getToken( 0, ';', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be a 'b'", OUString("b"), suToken ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast(-1), nIndex); + } + + void getToken_004() + { + OUString suTokenStr("longer.then.ever."); + + sal_Int32 nIndex = 0; + + OUString suToken = suTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'longer'", OUString("longer"), suToken ); + + /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'then'", OUString("then"), suToken ); + + /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Token should be 'ever'", OUString("ever"), suToken ); + + /* OUString */ suToken = suTokenStr.getToken( 0, '.', nIndex ); + CPPUNIT_ASSERT_MESSAGE("Token should be empty", suToken.isEmpty()); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index should be negative", static_cast(-1), nIndex); + } + + void getToken_005() { + OUString ab("ab"); + sal_Int32 n = 0; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "token should be 'ab'", ab, ab.getToken(0, '-', n)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("n should be -1", static_cast(-1), n); + CPPUNIT_ASSERT_MESSAGE( + "token should be empty", ab.getToken(0, '-', n).isEmpty()); + } + + void getToken_006() + { + OUString suTokenStr; + auto pTokenStr = suTokenStr.getStr(); + sal_uInt64 n64 = reinterpret_cast(pTokenStr) / sizeof(sal_Unicode); + // Point either to 0x0, or to some random address -4GiB away from this string + sal_Int32 n = n64 > o3tl::make_unsigned(SAL_MAX_INT32) ? -SAL_MAX_INT32 + : -static_cast(n64); + suTokenStr.getToken(0, ';', n); + // should not GPF with negative index + } + + CPPUNIT_TEST_SUITE(getToken); + CPPUNIT_TEST(getToken_000); + CPPUNIT_TEST(getToken_001); + CPPUNIT_TEST(getToken_002); + CPPUNIT_TEST(getToken_003); + CPPUNIT_TEST(getToken_004); + CPPUNIT_TEST(getToken_005); + CPPUNIT_TEST(getToken_006); + CPPUNIT_TEST_SUITE_END(); +}; // class getToken + +class convertToString: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(convertToString); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void convertToString::test() { + static constexpr OUStringLiteral utf16 = u"A\u00E4a"; + OString s; + CPPUNIT_ASSERT( + OUString(utf16).convertToString( + &s, RTL_TEXTENCODING_UTF7, + (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | + RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR))); + CPPUNIT_ASSERT_EQUAL( + OString(RTL_CONSTASCII_STRINGPARAM("A+AOQ-a")), s); +} + +// - string construction & interning (tests) + +class construction : public CppUnit::TestFixture +{ +public: + void construct() + { +#ifdef RTL_INLINE_STRINGS + OUString aFoo( "foo" ); + CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[0] == 'f'); + CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[1] == 'o'); + CPPUNIT_ASSERT_MESSAGE("string contents", aFoo[2] == 'o'); + CPPUNIT_ASSERT_MESSAGE("string length", aFoo.getLength() == 3); + + OUString aBaa( "this is a very long string with a lot of long things inside it and it goes on and on and on forever etc." ); + CPPUNIT_ASSERT_MESSAGE("string length", aBaa.getLength() == 104); + // Dig at the internals ... FIXME: should we have the bit-flag defines public ? + CPPUNIT_ASSERT_MESSAGE("string static flags", (aBaa.pData->refCount & 1<<30) != 0); +#endif + } + + void intern() + { + // The empty string is 'static' a special case ... + OUString().intern(); + OUString::intern( "",strlen(""),RTL_TEXTENCODING_ASCII_US ); + + OUString aFoo( "foo" ); + OUString aFooIntern = aFoo.intern(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "string contents", OUString("foo"), aFooIntern); + CPPUNIT_ASSERT_EQUAL_MESSAGE("string length", static_cast(3), aFooIntern.getLength()); + // We have to dup due to no atomic 'intern' bit-set operation + CPPUNIT_ASSERT_MESSAGE("intern dups", aFoo.pData != aFooIntern.pData); + + // Test interning lots of things + int i; + static const int nSequence = 4096; + std::unique_ptr pStrs(new OUString[nSequence]); + for (i = 0; i < nSequence; i++) + { + pStrs[i] = OUString( OUString::number( sqrt( static_cast(i) ) ) ).intern(); + } + for (i = 0; i < nSequence; i++) + { + OUString aNew = OUString( OUString::number( sqrt( static_cast(i) ) ) ).intern(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("double intern failed", + pStrs[i].pData, aNew.pData); + } + } + + CPPUNIT_TEST_SUITE(construction); + CPPUNIT_TEST(construct); + CPPUNIT_TEST(intern); + CPPUNIT_TEST_SUITE_END(); +}; + +class indexOfAscii: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(indexOfAscii); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void indexOfAscii::test() { + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString().indexOf("")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString().lastIndexOf("")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), OUString("foo").indexOf("foo")); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), OUString("foo").lastIndexOf("foo")); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(2), OUString("fofoobar").indexOf("foo")); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(3), OUString("foofoofob").lastIndexOf("foo")); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(3), OUString("foofoobar").indexOf("foo", 1)); +} + +class endsWith: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(endsWith); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void endsWith::test() { + CPPUNIT_ASSERT_EQUAL(true, OUString().endsWith("")); + CPPUNIT_ASSERT_EQUAL(false, OUString().endsWith("foo")); + CPPUNIT_ASSERT_EQUAL(true, OUString("bar").endsWith("bar")); + CPPUNIT_ASSERT_EQUAL(true, OUString("foobar").endsWith("bar")); + CPPUNIT_ASSERT_EQUAL(false, OUString("FOOBAR").endsWith("bar")); +} + +class isEmpty: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(isEmpty); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void isEmpty::test() { + OUString aString; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Newly constructed string should be empty", true, aString.isEmpty() ); + + aString = "Not empty any more"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( "String should not be empty", false, aString.isEmpty() ); + + aString.clear(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "aString.clear(), so should now be empty", true, aString.isEmpty() ); +} + + +class createFromCodePoints: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(createFromCodePoints); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void createFromCodePoints::test() { + CPPUNIT_ASSERT_EQUAL( + sal_Int32(0), + OUString(static_cast< sal_uInt32 const * >(nullptr), 0).getLength()); + sal_uInt32 cp[] = { 0, 0xD800, 0xFFFF, 0x10000, 0x10FFFF }; + // non-const, to avoid loplugin:stringliteralvar + OUString s(cp, SAL_N_ELEMENTS(cp)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength()); + CPPUNIT_ASSERT_EQUAL(u'\0', s[0]); + CPPUNIT_ASSERT_EQUAL(u'\xD800', s[1]); + CPPUNIT_ASSERT_EQUAL(u'\xFFFF', s[2]); + CPPUNIT_ASSERT_EQUAL(u'\xD800', s[3]); + CPPUNIT_ASSERT_EQUAL(u'\xDC00', s[4]); + CPPUNIT_ASSERT_EQUAL(u'\xDBFF', s[5]); + CPPUNIT_ASSERT_EQUAL(u'\xDFFF', s[6]); +} + +class iterateCodePoints: public CppUnit::TestFixture { +public: + void testNotWellFormed(); + + CPPUNIT_TEST_SUITE(iterateCodePoints); + CPPUNIT_TEST(testNotWellFormed); + CPPUNIT_TEST_SUITE_END(); +}; + +void iterateCodePoints::testNotWellFormed() { + static constexpr OUStringLiteral utf16 = + u"\U00010000A\U0010FFFF\xDDEF\xD9AB"; + OUString s(utf16); + sal_Int32 i = 0; + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0041), s.iterateCodePoints(&i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDDEF), s.iterateCodePoints(&i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xD9AB), s.iterateCodePoints(&i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xD9AB), s.iterateCodePoints(&i, -1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDDEF), s.iterateCodePoints(&i, -1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10FFFF), s.iterateCodePoints(&i, -1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0041), s.iterateCodePoints(&i, -1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), i); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i, -1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + i = 1; + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xDC00), s.iterateCodePoints(&i, 2)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), i); + i = 4; + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x10000), s.iterateCodePoints(&i, -3)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); +} + +class convertFromString: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(convertFromString); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void convertFromString::test() { + OUString t; + CPPUNIT_ASSERT( + !rtl_convertStringToUString( + &t.pData, RTL_CONSTASCII_STRINGPARAM("\x80"), RTL_TEXTENCODING_UTF8, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); + CPPUNIT_ASSERT( + !rtl_convertStringToUString( + &t.pData, RTL_CONSTASCII_STRINGPARAM("\xC0"), RTL_TEXTENCODING_UTF8, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); + CPPUNIT_ASSERT( + !rtl_convertStringToUString( + &t.pData, RTL_CONSTASCII_STRINGPARAM("\xFF"), RTL_TEXTENCODING_UTF8, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); + CPPUNIT_ASSERT( + rtl_convertStringToUString( + &t.pData, RTL_CONSTASCII_STRINGPARAM("abc"), RTL_TEXTENCODING_UTF8, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))); + CPPUNIT_ASSERT_EQUAL( OUString("abc"), t ); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::number); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toInt); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toDouble); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::toFloat); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::lastIndexOf); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::getToken); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::convertToString); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::construction); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::indexOfAscii); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::endsWith); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::isEmpty); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::createFromCodePoints); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::iterateCodePoints); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_OUString::convertFromString); + +} // namespace rtl_OUString + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/oustring/rtl_ustr.cxx b/sal/qa/rtl/oustring/rtl_ustr.cxx new file mode 100644 index 000000000..f5c405dfd --- /dev/null +++ b/sal/qa/rtl/oustring/rtl_ustr.cxx @@ -0,0 +1,1080 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include +#include +#include + +namespace rtl_ustr +{ + + class compare : public CppUnit::TestFixture + { + void compare_001() + { + OUString aStr1; + OUString aStr2; + + sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002() + { + OUString aStr1("Line must be equal."); + OUString aStr2("Line must be equal."); + + sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_003() + { + OUString aStr1("Line must differ."); + OUString aStr2("Line foo bar, ok, differ."); + + sal_Int32 nValue = rtl_ustr_compare( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(compare); + CPPUNIT_TEST(compare_001); + CPPUNIT_TEST(compare_002); + CPPUNIT_TEST(compare_003); + CPPUNIT_TEST_SUITE_END(); +}; // class compare + + class compareIgnoreAsciiCase : public CppUnit::TestFixture + { + void compare_001() + { + OUString aStr1; + OUString aStr2; + + sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002() + { + OUString aStr1("Line must be equal."); + OUString aStr2("Line must be equal."); + + sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002_1() + { + OUString aStr1("Line must be equal."); + OUString aStr2("LINE MUST BE EQUAL."); + + sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue); + } + + void compare_003() + { + OUString aStr1("Line must differ."); + OUString aStr2("Line foo bar, ok, differ."); + + sal_Int32 nValue = rtl_ustr_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(compareIgnoreAsciiCase); + CPPUNIT_TEST(compare_001); + CPPUNIT_TEST(compare_002); + CPPUNIT_TEST(compare_002_1); + CPPUNIT_TEST(compare_003); + CPPUNIT_TEST_SUITE_END(); + }; // class compareIgnoreAsciiCase + + class shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture + { + void compare_000() + { + rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( nullptr, 0, nullptr, 0, 0); + } + + void compare_000_1() + { + OUString aStr1("Line must be equal."); + rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), nullptr, 0, 1); + } + void compare_001() + { + OUString aStr1; + OUString aStr2; + + sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002() + { + OUString aStr1("Line must be equal."); + OUString aStr2("Line must be equal."); + + sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + aStr1.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void compare_002_1() + { + OUString aStr1("Line must be equal."); + OUString aStr2("LINE MUST BE EQUAL."); + + sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + aStr1.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue); + } + + void compare_003() + { + OUString aStr1("Line must differ."); + OUString aStr2("Line foo bar, ok, differ."); + + sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + 5); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal first 5 characters.", sal_Int32(0), nValue); + } + + void compare_004() + { + OUString aStr1("Line must differ."); + OUString aStr2("Line foo bar, ok, differ."); + + sal_Int32 nValue = rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), + aStr2.getStr(), aStr2.getLength(), + aStr1.getLength()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(shortenedCompareIgnoreAsciiCase_WithLength); + CPPUNIT_TEST(compare_000); + CPPUNIT_TEST(compare_000_1); + CPPUNIT_TEST(compare_001); + CPPUNIT_TEST(compare_002); + CPPUNIT_TEST(compare_002_1); + CPPUNIT_TEST(compare_003); + CPPUNIT_TEST(compare_004); + CPPUNIT_TEST_SUITE_END(); +}; // class compare + +// +// +// class hashCode : public CppUnit::TestFixture +// { +// void hashCode_000() +// { +// sal_Int32 nHashCode = rtl_ustr_hashCode( nullptr ); +// volatile int dummy = 0; +// } +// +// void hashCode_001() +// { +// OString aStr1 = "Line for a hashCode."; +// sal_Int32 nHashCode = rtl_ustr_hashCode( aStr1.getStr() ); +// printf("hashcode: %d\n", nHashCode); +// // CPPUNIT_ASSERT_MESSAGE("failed.", nValue == 0); +// } +// +// void hashCode_002() +// { +// OString aStr1 = "Line for a hashCode."; +// sal_Int32 nHashCode1 = rtl_ustr_hashCode( aStr1.getStr() ); +// +// OString aStr2 = "Line for a hashCode."; +// sal_Int32 nHashCode2 = rtl_ustr_hashCode( aStr2.getStr() ); +// +// CPPUNIT_ASSERT_MESSAGE("hashcodes must be equal.", nHashCode1 == nHashCode2 ); +// } +// +// void hashCode_003() +// { +// OString aStr1 = "Line for a hashCode."; +// sal_Int32 nHashCode1 = rtl_ustr_hashCode( aStr1.getStr() ); +// +// OString aStr2 = "Line for another hashcode."; +// sal_Int32 nHashCode2 = rtl_ustr_hashCode( aStr2.getStr() ); +// +// CPPUNIT_ASSERT_MESSAGE("hashcodes must differ.", nHashCode1 != nHashCode2 ); +// } +// +// // Change the following lines only, if you add, remove or rename +// // member functions of the current class, +// // because these macros are need by auto register mechanism. +// +// CPPUNIT_TEST_SUITE(hashCode); +// CPPUNIT_TEST(hashCode_000); +// CPPUNIT_TEST(hashCode_001); +// CPPUNIT_TEST(hashCode_002); +// CPPUNIT_TEST(hashCode_003); +// CPPUNIT_TEST_SUITE_END(); +// }; // class compare + + class indexOfChar : public CppUnit::TestFixture + { + void indexOfChar_000() + { + sal_Int32 nIndex = rtl_ustr_indexOfChar( u"", 0 ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string", + sal_Int32(-1), nIndex); + } + + void indexOfChar_001() + { + OUString aStr1("Line for an indexOfChar."); + + sal_Int32 nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'L' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex); + + /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'i' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(1), nIndex); + + /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'n' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(2), nIndex); + + /* sal_Int32 */ nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'e' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(3), nIndex); + } + + void indexOfChar_002() + { + OUString aStr1("Line for an indexOfChar."); + sal_Int32 nIndex = rtl_ustr_indexOfChar( aStr1.getStr(), 'y' ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(indexOfChar); + CPPUNIT_TEST(indexOfChar_000); + CPPUNIT_TEST(indexOfChar_001); + CPPUNIT_TEST(indexOfChar_002); + CPPUNIT_TEST_SUITE_END(); + }; // class indexOfChar + + class lastIndexOfChar : public CppUnit::TestFixture + { + void lastIndexOfChar_000() + { + sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( u"", 0 ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Trailing zero character is not part of the string", + sal_Int32(-1), nIndex); + } + + void lastIndexOfChar_001() + { + OUString aStr1("Line for a lastIndexOfChar."); + + sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'C' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(22), nIndex); + + /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'h' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(23), nIndex); + + /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'a' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(24), nIndex); + + /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'r' ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(25), nIndex); + } + + void lastIndexOfChar_002() + { + OUString aStr1("Line for a lastIndexOfChar."); + sal_Int32 nIndex = rtl_ustr_lastIndexOfChar( aStr1.getStr(), 'y' ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(lastIndexOfChar); + CPPUNIT_TEST(lastIndexOfChar_000); + CPPUNIT_TEST(lastIndexOfChar_001); + CPPUNIT_TEST(lastIndexOfChar_002); + CPPUNIT_TEST_SUITE_END(); + }; // class lastIndexOfChar + + class indexOfStr : public CppUnit::TestFixture + { + void indexOfStr_000() + { + OUString aStr1("Line for an indexOfStr."); + sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), u"" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable", + sal_Int32(-1), nIndex); + } + + void indexOfStr_001() + { + OUString aStr1("Line for an indexOfStr."); + + OUString suSearch("Line"); + sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex); + + suSearch = "for"; + nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(5), nIndex); + + suSearch = "a"; + /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex); + + suSearch = "an index"; + /* sal_Int32 */ nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(9), nIndex); + } + + void indexOfStr_002() + { + OUString aStr1("Line for an indexOfStr."); + OUString suSearch("not exist"); + sal_Int32 nIndex = rtl_ustr_indexOfStr( aStr1.getStr(), suSearch.getStr() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(indexOfStr); + CPPUNIT_TEST(indexOfStr_000); + CPPUNIT_TEST(indexOfStr_001); + CPPUNIT_TEST(indexOfStr_002); + CPPUNIT_TEST_SUITE_END(); + }; // class compare + + class lastIndexOfStr : public CppUnit::TestFixture + { + void lastIndexOfStr_000() + { + OUString aStr1("Line for a lastIndexOfStr."); + sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), u"" ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("an empty substring is always not findable", + sal_Int32(-1), nIndex); + } + + void lastIndexOfStr_001() + { + OUString aStr1("Line for a lastIndexOfStr."); + OUString aSearchStr("Index"); + + sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(15), nIndex); + + /* OString */ aSearchStr = OUString("Line"); + /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(0), nIndex); + + /* OString */ aSearchStr = OUString(); + /* sal_Int32 */ nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + void lastIndexOfStr_002() + { + OUString aStr1("Line for a lastIndexOfStr."); + OUString aSearchStr("foo"); + sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(-1), nIndex); + } + + void lastIndexOfStr_003() + { + OUString aStr1("Line for a lastIndexOfStr."); + OUString aSearchStr("O"); + sal_Int32 nIndex = rtl_ustr_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("index is wrong.", sal_Int32(20), nIndex); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(lastIndexOfStr); + CPPUNIT_TEST(lastIndexOfStr_000); + CPPUNIT_TEST(lastIndexOfStr_001); + CPPUNIT_TEST(lastIndexOfStr_002); + CPPUNIT_TEST(lastIndexOfStr_003); + CPPUNIT_TEST_SUITE_END(); + }; // class lastIndexOfStr + + class replaceChar : public CppUnit::TestFixture + { + void replaceChar_001() + { + sal_Unicode pStr[] = u"replace char."; + OUString aShouldStr1("ruplacu char."); + + rtl_ustr_replaceChar( pStr, 'e', 'u' ); + OUString suStr(pStr); + + CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(replaceChar); + CPPUNIT_TEST(replaceChar_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class replaceChar_WithLength : public CppUnit::TestFixture + { + void replaceChar_WithLength_000() + { + rtl_ustr_replaceChar_WithLength( nullptr, 0, 0, 0 ); + } + + void replaceChar_WithLength_001() + { + sal_Unicode pStr[] = u"replace char."; + OUString aShouldStr1("ruplace char."); + + rtl_ustr_replaceChar_WithLength( pStr, 6, 'e', 'u' ); + OUString suStr(pStr); + + CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr)); + } + + void replaceChar_WithLength_002() + { + sal_Unicode pStr[] = u"eeeeeeeeeeeee"; + OUString aShouldStr1("uuuuuueeeeeee"); + + rtl_ustr_replaceChar_WithLength( pStr, 6, 'e', 'u' ); + OUString suStr(pStr); + + CPPUNIT_ASSERT_MESSAGE("replace failed", aShouldStr1.equals(suStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(replaceChar_WithLength); + CPPUNIT_TEST(replaceChar_WithLength_000); + CPPUNIT_TEST(replaceChar_WithLength_001); + CPPUNIT_TEST(replaceChar_WithLength_002); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiLowerCase : public CppUnit::TestFixture + { + void toAsciiLowerCase_001() + { + sal_Unicode pStr[] = u"CHANGE THIS TO ASCII LOWER CASE."; + OUString aShouldStr1("change this to ascii lower case."); + + rtl_ustr_toAsciiLowerCase( pStr ); + OUString suStr(pStr); + + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiLowerCase); + CPPUNIT_TEST(toAsciiLowerCase_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiLowerCase_WithLength : public CppUnit::TestFixture + { + void toAsciiLowerCase_WithLength_000() + { + rtl_ustr_toAsciiLowerCase_WithLength( nullptr, 0 ); + } + + void toAsciiLowerCase_WithLength_001() + { + sal_Unicode pStr[] = u"CHANGE THIS TO ASCII LOWER CASE."; + OUString aShouldStr1("change thiS TO ASCII LOWER CASE."); + + rtl_ustr_toAsciiLowerCase_WithLength( pStr, 10 ); + OUString suStr(pStr); + + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiLowerCase_WithLength); + CPPUNIT_TEST(toAsciiLowerCase_WithLength_000); + CPPUNIT_TEST(toAsciiLowerCase_WithLength_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiUpperCase : public CppUnit::TestFixture + { + void toAsciiUpperCase_001() + { + sal_Unicode pStr[] = u"change this to ascii upper case."; + OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE."); + + rtl_ustr_toAsciiUpperCase( pStr ); + OUString suStr(pStr); + + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiUpperCase); + CPPUNIT_TEST(toAsciiUpperCase_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class toAsciiUpperCase_WithLength : public CppUnit::TestFixture + { + void toAsciiUpperCase_WithLength_000() + { + rtl_ustr_toAsciiUpperCase_WithLength( nullptr, 0 ); + } + + void toAsciiUpperCase_WithLength_001() + { + sal_Unicode pStr[] = u"change this to ascii lower case."; + OUString aShouldStr1("CHANGE THIs to ascii lower case."); + + rtl_ustr_toAsciiUpperCase_WithLength( pStr, 10 ); + OUString suStr(pStr); + + // printf("Uppercase with length: '%s'\n", aStr1.getStr()); + CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr)); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(toAsciiUpperCase_WithLength); + CPPUNIT_TEST(toAsciiUpperCase_WithLength_000); + CPPUNIT_TEST(toAsciiUpperCase_WithLength_001); + CPPUNIT_TEST_SUITE_END(); + }; // class replaceChar + + class trim_WithLength : public CppUnit::TestFixture + { + void trim_WithLength_000() + { + rtl_ustr_trim_WithLength(nullptr, 0); + // should not GPF + } + + void trim_WithLength_000_1() + { + sal_Unicode pStr[] = u" trim this"; + + rtl_ustr_trim_WithLength( pStr, 0 ); + } + + void trim_WithLength_001() + { + sal_Unicode pStr[] = u" trim this"; + + rtl_ustr_trim_WithLength( pStr, 2 ); + + CPPUNIT_ASSERT_MESSAGE("string should be empty", OUString(pStr).isEmpty()); + } + + void trim_WithLength_002() + { + sal_Unicode pStr[] = u"trim this"; + + rtl_ustr_trim_WithLength( pStr, 5 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", sal_Int32(4), OUString(pStr).getLength()); + } + + void trim_WithLength_003() + { + sal_Unicode pStr[] = u" trim this"; + + rtl_ustr_trim_WithLength( pStr, 11 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", sal_Int32(4), OUString(pStr).getLength()); + } + + void trim_WithLength_004() + { + sal_Unicode pStr[] = u"\r\n\t \n\r trim \n this"; + + rtl_ustr_trim_WithLength( pStr, 17 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim'", sal_Int32(4), OUString(pStr).getLength()); + } + + void trim_WithLength_005() + { + sal_Unicode pStr[] = u"\r\n\t \n\r trim \t this \n\r\t\t "; + + rtl_ustr_trim_WithLength( pStr, std::size(pStr) - 1 ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'trim \\t this'", sal_Int32(11), OUString(pStr).getLength()); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(trim_WithLength); + CPPUNIT_TEST(trim_WithLength_000); + CPPUNIT_TEST(trim_WithLength_000_1); + CPPUNIT_TEST(trim_WithLength_001); + CPPUNIT_TEST(trim_WithLength_002); + CPPUNIT_TEST(trim_WithLength_003); + CPPUNIT_TEST(trim_WithLength_004); + CPPUNIT_TEST(trim_WithLength_005); + CPPUNIT_TEST_SUITE_END(); + }; + + class valueOfChar : public CppUnit::TestFixture + { + void valueOfChar_001() + { + sal_Unicode pStr[RTL_USTR_MAX_VALUEOFCHAR]; + rtl_ustr_valueOfChar(pStr, 'A'); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("string should contain 'A'", u'A', pStr[0]); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(valueOfChar); + CPPUNIT_TEST(valueOfChar_001); + CPPUNIT_TEST_SUITE_END(); + }; + + class ascii_compare_WithLength : public CppUnit::TestFixture + { + void zero_length() + { + sal_Unicode pUnicode[] = {0xffff, 0xffff}; + char const pAscii[] = "reference"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(pUnicode, 0, pAscii); + CPPUNIT_ASSERT_LESS(sal_Int32(0), value); + } + + void equal_ascii_shorter() + { + OUString refStr("referenceString"); + char const pAscii[] = "reference"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii); + CPPUNIT_ASSERT_GREATER(sal_Int32(0), value); + } + + void equal_ascii_shorter_asciiLength() + { + OUString refStr("referenceString"); + char const pAscii[] = "reference"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, rtl_str_getLength(pAscii), pAscii); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), value); + } + + void equal_ref_shorter() + { + OUString refStr("reference"); + char const pAscii[] = "referenceString"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii); + CPPUNIT_ASSERT_LESS(sal_Int32(0), value); + } + + void equal() + { + OUString refStr("reference"); + char const pAscii[] = "reference"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), value); + } + + void unequal_reference_bigger() + { + OUString refStr("defghi"); + char const pAscii[] = "abc"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii); + CPPUNIT_ASSERT_GREATER(sal_Int32(0), value); + } + + void unequal_ascii_bigger() + { + OUString refStr("abc"); + char const pAscii[] = "defghi"; + + sal_Int32 value = rtl_ustr_ascii_compare_WithLength(refStr.pData->buffer, refStr.pData->length, pAscii); + + CPPUNIT_ASSERT_LESS(sal_Int32(0), value); + } + + CPPUNIT_TEST_SUITE(ascii_compare_WithLength); + CPPUNIT_TEST(zero_length); + CPPUNIT_TEST(equal_ascii_shorter); + CPPUNIT_TEST(equal_ascii_shorter_asciiLength); + CPPUNIT_TEST(equal_ref_shorter); + CPPUNIT_TEST(equal); + CPPUNIT_TEST(unequal_reference_bigger); + CPPUNIT_TEST(unequal_ascii_bigger); + CPPUNIT_TEST_SUITE_END(); + }; + + class ascii_shortenedCompareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture + { + void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000() + { + rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( nullptr, 0, "", 0); + // should not GPF + } + + void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_1() + { + OUString aStr1("Line must be equal."); + rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), "", 0); + // should not GPF + } + void ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_2() + { + OUString aStr1("Line must be equal."); + OString sStr2 = "Line is shorter."; + rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), sStr2.getLength(), sStr2.getStr(), 0); + // should not GPF + } + void ascii_shortenedCompareIgnoreAsciiCase_WithLength_001() + { + OUString suStr1; + OString sStr2; + + sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), 0, sStr2.getStr(), 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_shortenedCompareIgnoreAsciiCase_WithLength_002() + { + OUString suStr1("Line must be equal."); + OString sStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr(), sStr2.getLength()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_shortenedCompareIgnoreAsciiCase_WithLength_003() + { + OUString suStr1("Line must differ."); + OString sStr2 = "Line must be differ and longer."; + + sal_Int32 nValue = rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr(), sStr2.getLength()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(ascii_shortenedCompareIgnoreAsciiCase_WithLength); + CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000); + CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_1); + CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_000_2); + CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_001); + CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_002); + CPPUNIT_TEST(ascii_shortenedCompareIgnoreAsciiCase_WithLength_003); + CPPUNIT_TEST_SUITE_END(); + }; // class ascii_shortenedCompareIgnoreAsciiCase_WithLength + + class ascii_compareIgnoreAsciiCase_WithLength : public CppUnit::TestFixture + { + void ascii_compareIgnoreAsciiCase_WithLength_000() + { + rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( nullptr, 0, ""); + // should not GPF + } + + void ascii_compareIgnoreAsciiCase_WithLength_000_1() + { + OUString aStr1("Line must be equal."); + rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( aStr1.getStr(), 0, ""); + // should not GPF + } + void ascii_compareIgnoreAsciiCase_WithLength_000_2() + { + OUString aStr1("Line must be equal."); + OString sStr2 = "Line is shorter."; + rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( aStr1.getStr(), sStr2.getLength(), sStr2.getStr()); + // should not GPF + } + void ascii_compareIgnoreAsciiCase_WithLength_001() + { + OUString suStr1; + OString sStr2; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), 0, sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compareIgnoreAsciiCase_WithLength failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_compareIgnoreAsciiCase_WithLength_002() + { + OUString suStr1("Line must be equal."); + OString sStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_compareIgnoreAsciiCase_WithLength_003() + { + OUString suStr1("Line must differ."); + OString sStr2 = "Line must be differ and longer."; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( suStr1.getStr(), suStr1.getLength(), sStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase_WithLength); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000_1); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_000_2); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_001); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_002); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_WithLength_003); + CPPUNIT_TEST_SUITE_END(); + }; // class ascii_compareIgnoreAsciiCase_WithLength + + class ascii_compare : public CppUnit::TestFixture + { + void ascii_compare_001() + { + OUString suStr1; + OString sStr2; + + sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_compare_002() + { + OUString suStr1("Line must be equal."); + OString sStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_compare_003() + { + OUString suStr1("Line must differ."); + OString sStr2 = "Line foo bar, ok, differ."; + + sal_Int32 nValue = rtl_ustr_ascii_compare( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(ascii_compare); + CPPUNIT_TEST(ascii_compare_001); + CPPUNIT_TEST(ascii_compare_002); + CPPUNIT_TEST(ascii_compare_003); + CPPUNIT_TEST_SUITE_END(); + }; // class ascii_compare + + class ascii_compareIgnoreAsciiCase : public CppUnit::TestFixture + { + void ascii_compareIgnoreAsciiCase_001() + { + OUString suStr1; + OString sStr2; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_compareIgnoreAsciiCase_002() + { + OUString suStr1("Line must be equal."); + OString sStr2 = "Line must be equal."; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal.", sal_Int32(0), nValue); + } + + void ascii_compareIgnoreAsciiCase_002_1() + { + OUString suStr1("Line must be equal, when ignore case."); + OString sStr2 = "LINE MUST BE EQUAL, WHEN IGNORE CASE."; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("compare failed, strings are equal (if case insensitive).", sal_Int32(0), nValue); + } + + void ascii_compareIgnoreAsciiCase_003() + { + OUString suStr1("Line must differ."); + OString sStr2 = "Line foo bar, ok, differ."; + + sal_Int32 nValue = rtl_ustr_ascii_compareIgnoreAsciiCase( suStr1.getStr(), sStr2.getStr()); + CPPUNIT_ASSERT_MESSAGE("compare failed, strings differ.", nValue != 0); + } + + //! LLA: some more tests with some high level strings + + // void ascii_compareIgnoreAsciiCase_001() + // { + // OUString suStr1("change this to ascii upper case."); + // OUString aShouldStr1("CHANGE THIS TO ASCII UPPER CASE."); + // + // sal_uInt32 nLength = suStr1.getLength() * sizeof(sal_Unicode); + // sal_Unicode* pStr = (sal_Unicode*) malloc(nLength + sizeof(sal_Unicode)); // length + null terminator + // CPPUNIT_ASSERT_MESSAGE("can't get memory for test", pStr != nullptr); + // memset(pStr, 0, nLength + sizeof(sal_Unicode)); + // memcpy(pStr, suStr1.getStr(), nLength); + // + // rtl_ustr_ascii_compareIgnoreAsciiCase( pStr ); + // OUString suStr(pStr, suStr1.getLength()); + // + // CPPUNIT_ASSERT_MESSAGE("failed", aShouldStr1.equals(suStr)); + // free(pStr); + // } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(ascii_compareIgnoreAsciiCase); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_001); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_002_1); + CPPUNIT_TEST(ascii_compareIgnoreAsciiCase_003); + CPPUNIT_TEST_SUITE_END(); + }; // class ascii_compareIgnoreAsciiCase + + // sample out of inc/rtl/ustring.hxx + // rtl_uString * pToken = nullptr; + // sal_Int32 nIndex = 0; + // do + // { + // ... + // nIndex = rtl_uString_getToken(&pToken, pStr, 0, ';', nIndex); + // ... + // } + // while (nIndex >= 0); + + class getToken : public CppUnit::TestFixture + { + void getToken_000() + { + OUString s("a;b;c"); + // Replace the string in place + const sal_Int32 i = rtl_uString_getToken(&s.pData, s.pData, 1, ';', 0); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), i); + CPPUNIT_ASSERT_EQUAL(OUString("b"), s); + } + + CPPUNIT_TEST_SUITE(getToken); + CPPUNIT_TEST(getToken_000); + CPPUNIT_TEST_SUITE_END(); + }; // class ascii_compareIgnoreAsciiCase + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::compare); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::compareIgnoreAsciiCase); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compare_WithLength); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::shortenedCompareIgnoreAsciiCase_WithLength); +// CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::hashCode); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::indexOfChar); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::lastIndexOfChar); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::indexOfStr); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::lastIndexOfStr); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::replaceChar); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::replaceChar_WithLength); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiLowerCase); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiLowerCase_WithLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiUpperCase); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::toAsciiUpperCase_WithLength); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::trim_WithLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::valueOfChar); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compare); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compareIgnoreAsciiCase); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_compareIgnoreAsciiCase_WithLength); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::ascii_shortenedCompareIgnoreAsciiCase_WithLength); + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ustr::getToken); + +} // namespace rtl_ustr + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/oustring/rtl_ustr.xsce b/sal/qa/rtl/oustring/rtl_ustr.xsce new file mode 100644 index 000000000..c7b5c99f3 --- /dev/null +++ b/sal/qa/rtl/oustring/rtl_ustr.xsce @@ -0,0 +1,50 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +# functions which are gpf + +rtl_ustr.compare.compare_000 +rtl_ustr.compare.compare_000_1 + +rtl_ustr.compareIgnoreAsciiCase.compare_000 +rtl_ustr.compareIgnoreAsciiCase.compare_000_1 + +rtl_ustr.indexOfChar.indexOfChar_000 + +rtl_ustr.lastIndexOfChar.lastIndexOfChar_000 + +rtl_ustr.indexOfStr.indexOfStr_000 + +rtl_ustr.lastIndexOfStr.lastIndexOfStr_000 + +rtl_ustr.replaceChar.replaceChar_000 + +rtl_ustr.replaceChar_WithLength.replaceChar_WithLength_000_1 + +rtl_ustr.toAsciiLowerCase.toAsciiLowerCase_000 + +rtl_ustr.toAsciiUpperCase.toAsciiUpperCase_000 + +rtl_ustr.valueOfChar.valueOfChar_000 + +rtl_ustr.ascii_compare.ascii_compare_000 +rtl_ustr.ascii_compare.ascii_compare_000_1 +rtl_ustr.ascii_compareIgnoreAsciiCase.ascii_compareIgnoreAsciiCase_000 +rtl_ustr.ascii_compareIgnoreAsciiCase.ascii_compareIgnoreAsciiCase_000_1 +rtl_ustr.ascii_compareIgnoreAsciiCase_WithLength.ascii_compareIgnoreAsciiCase_WithLength_000 +rtl_ustr.ascii_compareIgnoreAsciiCase_WithLength.ascii_compareIgnoreAsciiCase_WithLength_000_1 + diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx new file mode 100644 index 000000000..f5168b60d --- /dev/null +++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar.cxx @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include + +namespace test::oustringbuffer { + +class AppendChar: public CppUnit::TestFixture { +private: + void testAppendChar(); + + CPPUNIT_TEST_SUITE(AppendChar); + CPPUNIT_TEST(testAppendChar); + CPPUNIT_TEST_SUITE_END(); +}; + +void AppendChar::testAppendChar() { + // Check that append('a') does not unexpectedly pick + // append(sal_Int32 i, sal_Int16 radix = 10): + OUStringBuffer s; + s.append('a'); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s.getLength()); + CPPUNIT_ASSERT_EQUAL(u'a', s[0]); +} + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::AppendChar); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx new file mode 100644 index 000000000..7530d6a32 --- /dev/null +++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized.cxx @@ -0,0 +1,66 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include + +namespace { + +class Test: public CppUnit::TestFixture { +private: + void testEmpty(); + + void testNonEmpty(); + + void testZero(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testEmpty); + CPPUNIT_TEST(testNonEmpty); + CPPUNIT_TEST(testZero); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testEmpty() { + OUStringBuffer s; + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); + sal_Unicode * p = s.appendUninitialized(5); + CPPUNIT_ASSERT_EQUAL( + static_cast(s.getStr()), static_cast(p)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); +} + +void Test::testNonEmpty() { + OUStringBuffer s("ab"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s.getLength()); + sal_Unicode * p = s.appendUninitialized(5); + CPPUNIT_ASSERT_EQUAL( + static_cast(s.getStr() + 2), + static_cast(p)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(7), s.getLength()); +} + +void Test::testZero() { + OUStringBuffer s; + sal_Unicode * p = s.appendUninitialized(0); + CPPUNIT_ASSERT_EQUAL( + static_cast(s.getStr()), static_cast(p)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s.getLength()); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx new file mode 100644 index 000000000..3c3f436ee --- /dev/null +++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign.cxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include +#include +#include + +#include +#include +#include + +namespace +{ +class Test : public CppUnit::TestFixture +{ +private: + void test() + { + OUStringBuffer b1; + OUString s1("123456789012345"); + b1 = s1; + CPPUNIT_ASSERT_EQUAL(s1, b1.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b1.getCapacity()); + OUString s2("abc"); + b1 = s2; + CPPUNIT_ASSERT_EQUAL(s2, b1.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b1.getCapacity()); + OUString s3("1234567890123456"); + b1 = s3; + CPPUNIT_ASSERT_EQUAL(s3, b1.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b1.getCapacity()); + OUStringBuffer b2; + b2 = "123456789012345"; + CPPUNIT_ASSERT_EQUAL(s1, b2.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b2.getCapacity()); + b2 = "abc"; + CPPUNIT_ASSERT_EQUAL(s2, b2.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b2.getCapacity()); + b2 = "1234567890123456"; + CPPUNIT_ASSERT_EQUAL(s3, b2.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b2.getCapacity()); + OUStringBuffer b3; + b3 = u"123456789012345"; + CPPUNIT_ASSERT_EQUAL(s1, b3.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b3.getCapacity()); + b3 = u"abc"; + CPPUNIT_ASSERT_EQUAL(s2, b3.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b3.getCapacity()); + b3 = u"1234567890123456"; + CPPUNIT_ASSERT_EQUAL(s3, b3.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b3.getCapacity()); + OUStringBuffer b4; + b4 = OUStringLiteral(u"1") + "23456789012345"; + CPPUNIT_ASSERT_EQUAL(s1, b4.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity()); + b4 = OUStringLiteral(u"a") + "bc"; + CPPUNIT_ASSERT_EQUAL(s2, b4.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(16), b4.getCapacity()); + b4 = OUStringLiteral(u"1") + "234567890123456"; + CPPUNIT_ASSERT_EQUAL(s3, b4.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(32), b4.getCapacity()); + b4 = OUStringChar('a'); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), b4.getLength()); + CPPUNIT_ASSERT_EQUAL(u'a', b4.getStr()[0]); + CPPUNIT_ASSERT_EQUAL(u'\0', b4.getStr()[1]); + b4 = std::u16string_view(u"abc").substr( + 0, 2); // avoid the string_view accidentally being NUL-terminated + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), b4.getLength()); + CPPUNIT_ASSERT_EQUAL(u'a', b4.getStr()[0]); + CPPUNIT_ASSERT_EQUAL(u'b', b4.getStr()[1]); + CPPUNIT_ASSERT_EQUAL(u'\0', b4.getStr()[2]); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx new file mode 100644 index 000000000..d942480d1 --- /dev/null +++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring.cxx @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include + +namespace test::oustringbuffer { + +class ToString: public CppUnit::TestFixture { +private: + void testEmptyToString(); + void testToString(); + + CPPUNIT_TEST_SUITE(ToString); + CPPUNIT_TEST(testEmptyToString); + CPPUNIT_TEST(testToString); + CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::ToString); + +void test::oustringbuffer::ToString::testEmptyToString() { + OUStringBuffer sb; + OUString str = sb.toString(); + CPPUNIT_ASSERT_EQUAL(OUString(), str); +} + +void test::oustringbuffer::ToString::testToString() { + OUStringBuffer sb("test string"); + OUString str = sb.toString(); + CPPUNIT_ASSERT_EQUAL( OUString("test string"), str ); + // returned OUString must be independent from sb + sb.append( 'a' ); + CPPUNIT_ASSERT_EQUAL( OUString("test string"), str ); + sb.setLength(0); + CPPUNIT_ASSERT_EQUAL( OUString("test string"), str ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx new file mode 100644 index 000000000..764b03d8c --- /dev/null +++ b/sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32.cxx @@ -0,0 +1,121 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace test::oustringbuffer { + +class Utf32: public CppUnit::TestFixture { +private: + void appendUtf32(); + + void insertUtf32(); + + CPPUNIT_TEST_SUITE(Utf32); + CPPUNIT_TEST(appendUtf32); + CPPUNIT_TEST(insertUtf32); + CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustringbuffer::Utf32); + +namespace { + +void appendString(OStringBuffer & buffer, OUString const & string) { + buffer.append('"'); + for (int i = 0; i < string.getLength(); ++i) { + buffer.append("\\u"); + sal_Unicode c = string[i]; + if (c < 0x1000) { + buffer.append('0'); + if (c < 0x100) { + buffer.append('0'); + if (c < 0x10) { + buffer.append('0'); + } + } + } + buffer.append( + static_cast< sal_Int32 >(c), static_cast< sal_Int16 >(16)); + } + buffer.append('"'); +} + +void createMessage( + OStringBuffer & message, OUString const & string1, + OUString const & string2) +{ + message.setLength(0); + appendString(message, string1); + message.append(" vs. "); + appendString(message, string2); +} + +} + +void test::oustringbuffer::Utf32::appendUtf32() { + int const str1Len = 3; + sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' }; + static constexpr OUStringLiteral str2 = u"abcd"; + static constexpr OUStringLiteral str3 = u"abcd\U00010000"; + OStringBuffer message; + OUStringBuffer buf1(std::u16string_view(str1, str1Len)); + buf1.appendUtf32('d'); + OUString res1(buf1.makeStringAndClear()); + createMessage(message, res1, str2); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + message.getStr(), OUString(str2), res1); + OUStringBuffer buf2(str2); + buf2.appendUtf32(0x10000); + OUString res2(buf2.makeStringAndClear()); + createMessage(message, res2, str3); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + message.getStr(), OUString(str3), res2); +} + +void test::oustringbuffer::Utf32::insertUtf32() { + int const str1Len = 3; + sal_Unicode const str1[str1Len] = { 'a', 'b', 'c' }; + static constexpr OUStringLiteral str2 = u"abdc"; + static constexpr OUStringLiteral str3 = u"ab\U0010FFFFdc"; + OStringBuffer message; + OUStringBuffer buf1(std::u16string_view(str1, str1Len)); + buf1.insertUtf32(2, 'd'); + OUString res1(buf1.makeStringAndClear()); + createMessage(message, res1, str2); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + message.getStr(), OUString(str2), res1); + OUStringBuffer buf2(str2); + buf2.insertUtf32(2, 0x10FFFF); + OUString res2(buf2.makeStringAndClear()); + createMessage(message, res2, str3); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + message.getStr(), OUString(str3), res2); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/process/child_process.cxx b/sal/qa/rtl/process/child_process.cxx new file mode 100644 index 000000000..d5039b059 --- /dev/null +++ b/sal/qa/rtl/process/child_process.cxx @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include "sal/main.h" +#include +#include + +// ----------------------------------- Main ----------------------------------- +SAL_IMPLEMENT_MAIN_WITH_ARGS(, argv) +{ + printf("# %s is called.\n", argv[0]); + + sal_Int32 nCount = rtl_getAppCommandArgCount(); + if ( nCount != 4 ) + { + printf( + "# not enough arguments found, need 4 found %ld.\n", + sal::static_int_cast< long >(nCount)); + return 0; + } + + OUString suArg[4]; + for( sal_Int32 i = 0 ; i < nCount ; i ++ ) + { + rtl_getAppCommandArg( i , &(suArg[i].pData) ); + OString aString; + aString = OUStringToOString( suArg[i], RTL_TEXTENCODING_ASCII_US ); + printf( + "# Parameter[%ld] is %s\n", sal::static_int_cast< long >(i), + aString.getStr()); + } + + if ( suArg[0] != suParam0 || + suArg[1] != suParam1 || + suArg[2] != suParam2 || + suArg[3] != suParam3 ) + { + return 0; + } + return 2; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/process/child_process_id.cxx b/sal/qa/rtl/process/child_process_id.cxx new file mode 100644 index 000000000..077f5c668 --- /dev/null +++ b/sal/qa/rtl/process/child_process_id.cxx @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include "sal/main.h" +#include +#include + +void printUuid(sal_uInt8* pNode) +{ + for (sal_Int32 i1 = 0; i1 < 4; i1++) + { + for (sal_Int32 i2 = 0; i2 < 4; i2++) + { + sal_uInt8 nValue = pNode[i1 * 4 + i2]; + if (nValue < 16) + { + printf("0"); + } + printf("%02x", nValue); + } + if (i1 == 3) + break; + //printf( "-" ); + } +} + +// ----------------------------------- Main ----------------------------------- + +SAL_IMPLEMENT_MAIN() +{ + sal_uInt8 pTargetUUID[16]; + rtl_getGlobalProcessId(pTargetUUID); + printUuid(pTargetUUID); + return 1; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/process/rtl_Process.cxx b/sal/qa/rtl/process/rtl_Process.cxx new file mode 100644 index 000000000..5d4f3e5b5 --- /dev/null +++ b/sal/qa/rtl/process/rtl_Process.cxx @@ -0,0 +1,258 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "rtl_Process_Const.h" + +using namespace osl; + +/** print a UNI_CODE String. And also print some comments of the string. +*/ +static void printUString( const OUString & str, const char * msg ) +{ + if ( msg != nullptr ) + { + printf("#%s #printUString_u# ", msg ); + } + OString aString = OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); + printf("%s\n", aString.getStr( ) ); +} + +static OUString getModulePath() +{ + OUString suDirPath; + ::osl::Module::getUrlFromAddress( + reinterpret_cast< oslGenericFunction >(getModulePath), suDirPath ); + + printUString(suDirPath, "modulePath:"); + suDirPath = suDirPath.copy( 0, suDirPath.lastIndexOf('/') ); + suDirPath = OUString::Concat(suDirPath.subView( 0, suDirPath.lastIndexOf('/') + 1)) + "bin"; + return suDirPath; +} + +namespace rtl_Process +{ +class getAppCommandArg : public CppUnit::TestFixture +{ +public: + void getAppCommandArg_001() + { +#if defined(_WIN32) + static const OUStringLiteral EXECUTABLE_NAME(u"child_process.exe"); +#else + static const OUStringLiteral EXECUTABLE_NAME(u"child_process"); +#endif + OUString suCWD = getModulePath(); + // OUString suCWD2 = getExecutableDirectory(); + + printUString(suCWD, "path to the current module"); + // printUString(suCWD2, "suCWD2"); + + oslProcess hProcess = nullptr; + + const int nParameterCount = 4; + rtl_uString* pParameters[ nParameterCount ]; + + pParameters[0] = suParam0.pData; + pParameters[1] = suParam1.pData; + pParameters[2] = suParam2.pData; + pParameters[3] = suParam3.pData; + + OUString suFileURL = suCWD + "/" + EXECUTABLE_NAME; + + oslProcessError osl_error = osl_executeProcess( + suFileURL.pData, + pParameters, + nParameterCount, + osl_Process_WAIT, + nullptr, /* osl_getCurrentSecurity() */ + suCWD.pData, + nullptr, + 0, + &hProcess ); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createProcess failed", + osl_Process_E_None, osl_error + ); + //we could get return value only after the process terminated + osl_joinProcess(hProcess); + // CPPUNIT_ASSERT_MESSAGE + // ( + // "osl_joinProcess returned with failure", + // osl_Process_E_None == osl_error + // ); + std::unique_ptr pInfo( new oslProcessInfo ); + //please pay attention to initial the Size to sizeof(oslProcessInfo), or else + //you will get unknown error when call osl_getProcessInfo + pInfo->Size = sizeof(oslProcessInfo); + osl_error = osl_getProcessInfo( hProcess, osl_Process_EXITCODE, pInfo.get() ); + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_getProcessInfo returned with failure", + osl_Process_E_None, osl_error + ); + + printf("the exit code is %" SAL_PRIuUINT32 ".\n", pInfo->Code ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getAppCommandArg or rtl_getAppCommandArgCount error.", static_cast(2), pInfo->Code); + } + + CPPUNIT_TEST_SUITE(getAppCommandArg); + CPPUNIT_TEST(getAppCommandArg_001); + // CPPUNIT_TEST(getAppCommandArg_002); + CPPUNIT_TEST_SUITE_END(); +}; // class getAppCommandArg + +/************************************************************************ + * For diagnostics( from sal/test/testuuid.cxx ) + ************************************************************************/ +static void printUuid( const sal_uInt8 *pNode ) +{ + printf("# UUID is: "); + for( sal_Int32 i1 = 0 ; i1 < 4 ; i1++ ) + { + for( sal_Int32 i2 = 0 ; i2 < 4 ; i2++ ) + { + sal_uInt8 nValue = pNode[i1*4 +i2]; + if (nValue < 16) + { + printf( "0"); + } + printf( "%02x" ,nValue ); + } + if( i1 == 3 ) + break; + printf( "-" ); + } + printf("\n"); +} + +/************************************************************************** + * output UUID to a string + **************************************************************************/ +static void printUuidtoBuffer( const sal_uInt8 *pNode, char * pBuffer ) +{ + sal_Int8 nPtr = 0; + for( sal_Int32 i1 = 0 ; i1 < 16 ; i1++ ) + { + sal_uInt8 nValue = pNode[i1]; + if (nValue < 16) + { + SAL_WNODEPRECATED_DECLARATIONS_PUSH // sprintf (macOS 13 SDK) + sprintf( pBuffer + nPtr, "0"); + SAL_WNODEPRECATED_DECLARATIONS_POP + nPtr++; + } + SAL_WNODEPRECATED_DECLARATIONS_PUSH // sprintf (macOS 13 SDK) + sprintf( pBuffer + nPtr, "%02x", nValue ); + SAL_WNODEPRECATED_DECLARATIONS_POP + nPtr += 2 ; + } +} + +class getGlobalProcessId : public CppUnit::TestFixture +{ +public: + //gets a 16-byte fixed size identifier which is guaranteed not to change during the current process. + void getGlobalProcessId_001() + { + sal_uInt8 pTargetUUID1[16]; + sal_uInt8 pTargetUUID2[16]; + rtl_getGlobalProcessId( pTargetUUID1 ); + rtl_getGlobalProcessId( pTargetUUID2 ); + CPPUNIT_ASSERT_MESSAGE("getGlobalProcessId: got two same ProcessIds.", !memcmp( pTargetUUID1 , pTargetUUID2 , 16 ) ); + } + //different processes different pids + void getGlobalProcessId_002() + { +#if defined(_WIN32) + static const OUStringLiteral EXEC_NAME(u"child_process_id.exe"); +#else + static const OUStringLiteral EXEC_NAME(u"child_process_id"); +#endif + sal_uInt8 pTargetUUID1[16]; + rtl_getGlobalProcessId( pTargetUUID1 ); + printUuid( pTargetUUID1 ); + char pUUID1[32]; + printUuidtoBuffer( pTargetUUID1, pUUID1 ); + printf("# UUID to String is %s\n", pUUID1); + + OUString suCWD = getModulePath(); + oslProcess hProcess = nullptr; + OUString suFileURL = suCWD + "/" + EXEC_NAME; + oslFileHandle* pChildOutputRead = new oslFileHandle(); + oslProcessError osl_error = osl_executeProcess_WithRedirectedIO( + suFileURL.pData, + nullptr, + 0, + osl_Process_WAIT, + nullptr, + suCWD.pData, + nullptr, + 0, + &hProcess, + nullptr, + pChildOutputRead, + nullptr); + + CPPUNIT_ASSERT_EQUAL_MESSAGE + ( + "osl_createProcess failed", + osl_Process_E_None, osl_error + ); + //we could get return value only after the process terminated + osl_joinProcess(hProcess); + + char pUUID2[33] {}; + sal_uInt64 nRead = 0; + osl_readFile( *pChildOutputRead, pUUID2, 32, &nRead ); + printf("read buffer is %s, nRead is %" SAL_PRIdINT64 "\n", pUUID2, nRead ); + OUString suUUID2 = OUString::createFromAscii( pUUID2 ); + CPPUNIT_ASSERT_MESSAGE("getGlobalProcessId: got two same ProcessIds.", !suUUID2.equalsAsciiL( pUUID1, 32) ); + } + + CPPUNIT_TEST_SUITE(getGlobalProcessId); + CPPUNIT_TEST(getGlobalProcessId_001); + CPPUNIT_TEST(getGlobalProcessId_002); + CPPUNIT_TEST_SUITE_END(); + +}; // class getGlobalProcessId + +} // namespace rtl_Process + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Process::getAppCommandArg, "rtl_Process"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(rtl_Process::getGlobalProcessId, "rtl_Process"); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/process/rtl_Process_Const.h b/sal/qa/rtl/process/rtl_Process_Const.h new file mode 100644 index 000000000..aab40ff9a --- /dev/null +++ b/sal/qa/rtl/process/rtl_Process_Const.h @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_QA_RTL_PROCESS_RTL_PROCESS_CONST_H +#define INCLUDED_SAL_QA_RTL_PROCESS_RTL_PROCESS_CONST_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +OUString suParam0("-join"); +OUString suParam1("-with"); +OUString suParam2("-child"); +OUString suParam3("-process"); + +#ifdef __cplusplus +} +#endif + +#endif /* RTL_PROCESS_CONST_H*/ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/random/random.txt b/sal/qa/rtl/random/random.txt new file mode 100644 index 000000000..c5546df9b --- /dev/null +++ b/sal/qa/rtl/random/random.txt @@ -0,0 +1,22 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +rtl_random.createPool.createPool_001 +rtl_random.destroyPool.destroyPool_001 +rtl_random.addBytes.addBytes_001 +rtl_random.getBytes.getBytes_001 + diff --git a/sal/qa/rtl/random/rtl_random.cxx b/sal/qa/rtl/random/rtl_random.cxx new file mode 100644 index 000000000..4987b5a0c --- /dev/null +++ b/sal/qa/rtl/random/rtl_random.cxx @@ -0,0 +1,363 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include + +namespace rtl_random +{ + +class createPool : public CppUnit::TestFixture +{ +public: + // insert your test code here. + // this is only demonstration code + void createPool_001() + { + // this is demonstration code + + rtlRandomPool aPool = rtl_random_createPool(); + + // LLA: seems to be that another test is not possible for createPool() + CPPUNIT_ASSERT_MESSAGE("create failed", aPool != nullptr); + + rtl_random_destroyPool(aPool); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(createPool); + CPPUNIT_TEST(createPool_001); + CPPUNIT_TEST_SUITE_END(); +}; // class createPool + +class destroyPool : public CppUnit::TestFixture +{ +public: + // insert your test code here. + void destroyPool_000() + { + // GPF, if failed + rtl_random_destroyPool(nullptr); + } + + void destroyPool_001() + { + rtlRandomPool aPool = rtl_random_createPool(); + + // LLA: seems to be that another test is not possible for createPool() + CPPUNIT_ASSERT_MESSAGE("create failed", aPool != nullptr); + + rtl_random_destroyPool(aPool); + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(destroyPool); + CPPUNIT_TEST(destroyPool_000); + CPPUNIT_TEST(destroyPool_001); + CPPUNIT_TEST_SUITE_END(); +}; // class destroyPool + +class addBytes : public CppUnit::TestFixture +{ +public: + // insert your test code here. + // this is only demonstration code + void addBytes_000() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 4; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen ] ); + memset(pBuffer.get(), 0, nBufLen); + + rtlRandomError aError = rtl_random_addBytes(nullptr, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError); + + /* rtlRandomError */ aError = rtl_random_addBytes(aPool, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError); + + /* rtlRandomError */ aError = rtl_random_addBytes(aPool, pBuffer.get(), nBufLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError); + + rtl_random_destroyPool(aPool); + } + + void addBytes_001() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 4; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen ] ); + + memset(pBuffer.get(), 0, nBufLen); + + rtl_random_addBytes(aPool, pBuffer.get(), nBufLen); + + printf("%2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3]); + + rtl_random_destroyPool(aPool); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(addBytes); + CPPUNIT_TEST(addBytes_000); + CPPUNIT_TEST(addBytes_001); + CPPUNIT_TEST_SUITE_END(); +}; // class addBytes + +namespace { + +class Statistics +{ + int m_nDispensation[256]; + + int m_nMin; + int m_nMax; + int m_nAverage; + int m_nMinDeviation; + int m_nMaxDeviation; + +public: + void clearDispensation() + { + for (int i = 0;i < 256;++i) // clear array + { + m_nDispensation[i] = 0; + } + } + Statistics() + : m_nMin(0) + , m_nMax(0) + , m_nAverage(0) + , m_nMinDeviation(0) + , m_nMaxDeviation(0) + { + clearDispensation(); + } + + void addValue(sal_uInt8 _nIndex, sal_Int32 _nValue) + { + m_nDispensation[_nIndex] += _nValue; + } + + void build(sal_Int32 _nCountMax) + { + m_nMin = _nCountMax; + m_nMax = 0; + + m_nAverage = _nCountMax / 256; + + m_nMinDeviation = _nCountMax; + m_nMaxDeviation = 0; + + for (int i = 0;i < 256;++i) // show dispensation + { + m_nMin = std::min(m_nMin, m_nDispensation[i]); + m_nMax = std::max(m_nMax, m_nDispensation[i]); + + m_nMinDeviation = std::min(m_nMinDeviation, abs(m_nAverage - m_nDispensation[i])); + m_nMaxDeviation = std::max(m_nMaxDeviation, abs(m_nAverage - m_nDispensation[i])); + } + } + + void print() + { + // LLA: these are only info values + printf("\nSome statistics\n"); + printf("Min: %d\n", m_nMin); + printf("Max: %d\n", m_nMax); + printf("Average: %d\n", m_nAverage); + printf("Min abs deviation: %d\n", m_nMinDeviation); + printf("Max abs deviation: %d\n", m_nMaxDeviation); + } + + sal_Int32 getAverage() const {return m_nAverage;} + sal_Int32 getMaxDeviation() const {return m_nMaxDeviation;} + +}; + +} + +class getBytes : public CppUnit::TestFixture +{ +public: + // insert your test code here. + void getBytes_000() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 4; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen ] ); + memset(pBuffer.get(), 0, nBufLen); + + rtlRandomError aError = rtl_random_getBytes(nullptr, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError); + + /* rtlRandomError */ aError = rtl_random_getBytes(aPool, nullptr, 0); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_Argument, aError); + + /* rtlRandomError */ aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError); + + rtl_random_destroyPool(aPool); + } + + void getBytes_001() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 4; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen ] ); + memset(pBuffer.get(), 0, nBufLen); + + rtlRandomError aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError); + + printf("%2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3]); + + rtl_random_destroyPool(aPool); + } + + void getBytes_002() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 4; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen << 1 ] ); + memset(pBuffer.get(), 0, nBufLen << 1); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[4]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[5]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[6]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", sal_uInt8(0), pBuffer[7]); + + rtlRandomError aError = rtl_random_getBytes(aPool, pBuffer.get(), nBufLen); + CPPUNIT_ASSERT_EQUAL_MESSAGE("wrong parameter", rtl_Random_E_None, aError); + + printf("%2x %2x %2x %2x %2x %2x %2x %2x\n", pBuffer[0], pBuffer[1], pBuffer[2], pBuffer[3], pBuffer[4], pBuffer[5], pBuffer[6], pBuffer[7]); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[4]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[5]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[6]); + CPPUNIT_ASSERT_EQUAL_MESSAGE("internal memory overwrite", sal_uInt8(0), pBuffer[7]); + + rtl_random_destroyPool(aPool); + } + + void getBytes_003() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 1; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen ] ); + memset(pBuffer.get(), 0, nBufLen); + + Statistics aStat; + + CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", static_cast(0), pBuffer[0]); + + int nCount = 0; + + int nCountMax = 1000000; + for(nCount = 0;nCount < nCountMax; ++nCount) // run 100000000 through getBytes(...) + { + /* rtlRandomError aError = */ rtl_random_getBytes(aPool, pBuffer.get(), nBufLen); + /* CPPUNIT_ASSERT_MESSAGE("wrong parameter", aError == rtl_Random_E_None); */ + + aStat.addValue(pBuffer[0], 1); + } + + aStat.build(nCountMax); + aStat.print(); + + CPPUNIT_ASSERT_MESSAGE("deviation should be less average", aStat.getMaxDeviation() < aStat.getAverage()); + + rtl_random_destroyPool(aPool); + } + + void getBytes_003_1() + { + rtlRandomPool aPool = rtl_random_createPool(); + + sal_uInt32 nBufLen = 256; + std::unique_ptr pBuffer( new sal_uInt8[ nBufLen ] ); + memset(pBuffer.get(), 0, nBufLen); + + Statistics aStat; + + CPPUNIT_ASSERT_EQUAL_MESSAGE("memset failed", static_cast(0), pBuffer[0]); + + int nCount = 0; + + int nCountMax = 10000; + for(nCount = 0;nCount < nCountMax; ++nCount) // run 100000000 through getBytes(...) + { + /* rtlRandomError aError = */ rtl_random_getBytes(aPool, pBuffer.get(), nBufLen); + // CPPUNIT_ASSERT_MESSAGE("wrong parameter", aError == rtl_Random_E_None); + + for (sal_uInt32 i=0;i +#include +#include +#include +#include + +namespace rtl_ref +{ + +namespace { + +class MoveTestClass +{ +private: + bool m_bIncFlag; + long m_nRef; +public: + MoveTestClass(): m_bIncFlag(false), m_nRef(0) { } + + // There should never be more than two references to this class as it + // is used as a test class for move functions. One reference being the + // original reference and the second being the test reference + void acquire() + { + if(m_bIncFlag) + { + ++m_nRef; + m_bIncFlag = false; + } + else + CPPUNIT_FAIL("RC was incremented when in should not have been"); + } + + void release() { --m_nRef; } + + long use_count() { return m_nRef; } + + void set_inc_flag() { m_bIncFlag = true; } +}; + +} + +static rtl::Reference< MoveTestClass > get_reference( MoveTestClass* pcTestClass ) +{ + // constructor will increment the reference count + pcTestClass->set_inc_flag(); + rtl::Reference< MoveTestClass > tmp(pcTestClass); + return tmp; +} + +class TestReferenceRefCounting : public CppUnit::TestFixture +{ + void testMove() + { + MoveTestClass cTestClass; + + // constructor will increment the reference count + cTestClass.set_inc_flag(); + rtl::Reference< MoveTestClass > test1( &cTestClass ); + + // move should not increment the reference count + rtl::Reference< MoveTestClass > test2( std::move(test1) ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 1", + static_cast(1), test2->use_count()); + + // test1 now contains a null pointer + CPPUNIT_ASSERT_MESSAGE("!test1.is()", + !test1.is()); // NOLINT(bugprone-use-after-move) + + // function return should move the reference + test2 = get_reference( &cTestClass ); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 1", + static_cast(1), test2->use_count()); + + // normal copy + test2->set_inc_flag(); + test1 = test2; + CPPUNIT_ASSERT_EQUAL_MESSAGE("test2.use_count() == 2", + static_cast(2), test2->use_count()); + + // use count should decrement + test2 = rtl::Reference< MoveTestClass >(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("test1.use_count() == 1", + static_cast(1), test1->use_count()); + + // move of a null pointer should not cause an error + test1 = std::move(test2); + + CPPUNIT_ASSERT_MESSAGE("!test1.is()", + !test1.is()); + CPPUNIT_ASSERT_MESSAGE("!test2.is()", + !test2.is()); // NOLINT(bugprone-use-after-move) + + CPPUNIT_ASSERT_EQUAL_MESSAGE("cTestClass.use_count() == 0", + static_cast(0), cTestClass.use_count()); + } + + CPPUNIT_TEST_SUITE(TestReferenceRefCounting); + CPPUNIT_TEST(testMove); + CPPUNIT_TEST_SUITE_END(); +}; + +} // namespace rtl_ref +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_ref::TestReferenceRefCounting); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/compile-oustring.cxx b/sal/qa/rtl/strings/compile-oustring.cxx new file mode 100644 index 000000000..667a52324 --- /dev/null +++ b/sal/qa/rtl/strings/compile-oustring.cxx @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +// expected-note@rtl/ustring.hxx:* 1+ {{}} + +void checkExtraIntArgument() +{ + // This makes sure that using by mistake RTL_CONSTASCII_STRINGPARAM does not trigger a different + // overload, i.e. the second argument to match() in this case is the indexFrom argument, + // but with the macro it would contain the length of the string. Therefore + // match( RTL_CONSTASCII_STRINGPARAM( "bar" )) would be match( "bar", 3 ), which would be + // true when called for OUString( "foobar" ). But this should not happen because of the + // &foo[0] trick in the RTL_CONSTASCII_STRINGPARAM macro. + // expected-error@+1 {{}} + OUString("foobar").match(RTL_CONSTASCII_STRINGPARAM("bar")); +} + +void checkNonconstChar() +{ + // check that non-const char[] data do not trigger string literal overloads + char test[] = "test"; + char bar[] = "bar"; + const char consttest[] = "test"; + const char constbar[] = "bar"; + // expected-error@+1 {{}} + (void)OUString("footest").replaceAll(test, bar); + // expected-error@+1 {{}} + (void)OUString("footest").replaceAll(consttest, bar); + // expected-error@+1 {{}} + (void)OUString("footest").replaceAll(test, constbar); + (void)OUString("footest").replaceAll(consttest, constbar); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/rtl/strings/nonconstarray.cxx b/sal/qa/rtl/strings/nonconstarray.cxx new file mode 100644 index 000000000..4b66e4e31 --- /dev/null +++ b/sal/qa/rtl/strings/nonconstarray.cxx @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include + +namespace +{ +class Test : public CppUnit::TestFixture +{ +private: + void testOString() + { + struct S + { + char a[4]; + }; + S s{ "x\0y" }; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OString(s.a).getLength()); + // Ideally, the below would work the same as the above. However, the const reference makes + // the ConstCharArrayDetector instead of the NonConstCharArrayDetector kick in, so that the + // call to OString(r.a) would fire the ConstCharArrayDetector::isValid assert (and in + // NDEBUG builds the CPPUNIT_ASSERT_EQUAL would fail with 3 != 1): + if ((false)) + { + S const& r = s; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OString(r.a).getLength()); + } + } + + void testOUStringChar() + { + struct S + { + char a[4]; + }; + S s{ "x\0y" }; + // This would fail to compile, as there is no OUString ctor taking a + // NonConstCharArrayDetector char array: +#if 0 + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(s.a).getLength()); +#endif + // Ideally, the below would fail to compile the same as the above. However, the const + // reference makes the ConstCharArrayDetector instead of the NonConstCharArrayDetector kick + // in, so that the call to OUString(r.a) would fire the ConstCharArrayDetector::isValid + // assert (and in NDEBUG builds the CPPUNIT_ASSERT_EQUAL would fail with 3 != 1): + if ((false)) + { + S const& r = s; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(r.a).getLength()); + } + } + + void testOUStringChar16t() + { + struct S + { + char16_t a[4]; + }; + S s{ u"x\0y" }; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(s.a).getLength()); + // Ideally, the below would work the same as the above. However, the const reference makes + // the ConstCharArrayDetector instead of the NonConstCharArrayDetector kick in, so that the + // call to OUString(r.a) would fire the ConstCharArrayDetector::isValid assert (and in + // NDEBUG builds the CPPUNIT_ASSERT_EQUAL would fail with 3 != 1):: + if ((false)) + { + S const& r = s; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), OUString(r.a).getLength()); + } + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testOString); + CPPUNIT_TEST(testOUStringChar); + CPPUNIT_TEST(testOUStringChar16t); + CPPUNIT_TEST_SUITE_END(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/rtl/strings/test_ostring.cxx b/sal/qa/rtl/strings/test_ostring.cxx new file mode 100644 index 000000000..b4fb201ca --- /dev/null +++ b/sal/qa/rtl/strings/test_ostring.cxx @@ -0,0 +1,123 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include + +namespace { + +class Test: public CppUnit::TestFixture { +private: + void testStartsWithIgnoreAsciiCase(); + void testCompareTo(); + void testUtf8StringLiterals(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testStartsWithIgnoreAsciiCase); + CPPUNIT_TEST(testCompareTo); + CPPUNIT_TEST(testUtf8StringLiterals); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testStartsWithIgnoreAsciiCase() { + { + OString r; + CPPUNIT_ASSERT(OString().startsWithIgnoreAsciiCase(std::string_view(), &r)); + CPPUNIT_ASSERT(r.isEmpty()); + } + { + OString r; + CPPUNIT_ASSERT(OString("foo").startsWithIgnoreAsciiCase(std::string_view(), &r)); + CPPUNIT_ASSERT_EQUAL(OString("foo"), r); + } + { + OString r; + CPPUNIT_ASSERT( + OString("foo").startsWithIgnoreAsciiCase("F", &r)); + CPPUNIT_ASSERT_EQUAL(OString("oo"), r); + } + { + OString r("other"); + CPPUNIT_ASSERT( + !OString("foo").startsWithIgnoreAsciiCase("bar", &r)); + CPPUNIT_ASSERT_EQUAL(OString("other"), r); + } + { + OString r("other"); + CPPUNIT_ASSERT( + !OString("foo").startsWithIgnoreAsciiCase("foobar", &r)); + CPPUNIT_ASSERT_EQUAL(OString("other"), r); + } + + { + OString r; + CPPUNIT_ASSERT(OString().startsWithIgnoreAsciiCase("", &r)); + CPPUNIT_ASSERT(r.isEmpty()); + } + { + OString r; + CPPUNIT_ASSERT(OString("foo").startsWithIgnoreAsciiCase("", &r)); + CPPUNIT_ASSERT_EQUAL(OString("foo"), r); + } + { + OString r; + CPPUNIT_ASSERT( + OString("foo").startsWithIgnoreAsciiCase("F", &r)); + CPPUNIT_ASSERT_EQUAL(OString("oo"), r); + } + { + OString r("other"); + CPPUNIT_ASSERT( + !OString("foo").startsWithIgnoreAsciiCase("bar", &r)); + CPPUNIT_ASSERT_EQUAL(OString("other"), r); + } + { + OString r("other"); + CPPUNIT_ASSERT( + !OString("foo").startsWithIgnoreAsciiCase("foobar", &r)); + CPPUNIT_ASSERT_EQUAL(OString("other"), r); + } +} + +void Test::testCompareTo() +{ + // test that embedded NUL does not stop the compare + char str1[2] = { '\0', 'x' }; + char str2[2] = { '\0', 'y' }; + + OString s1(str1, 2); + OString s2(str2, 2); + CPPUNIT_ASSERT_EQUAL(static_cast(0), s1.compareTo(s1)); + CPPUNIT_ASSERT_EQUAL(static_cast(0), s2.compareTo(s2)); + CPPUNIT_ASSERT(s1.compareTo(s2) < 0); + CPPUNIT_ASSERT(s2.compareTo(s1) > 0); + CPPUNIT_ASSERT(s1.compareTo(OString(s2 + "y")) < 0); + CPPUNIT_ASSERT(s2.compareTo(OString(s1 + "x")) > 0); + CPPUNIT_ASSERT(OString(s1 + "x").compareTo(s2) < 0); + CPPUNIT_ASSERT(OString(s2 + "y").compareTo(s1) > 0); +} + +void Test::testUtf8StringLiterals() +{ + const OString sIn(u8"ßa"); + CPPUNIT_ASSERT_EQUAL(static_cast(3), sIn.getLength()); + CPPUNIT_ASSERT_EQUAL(195, int(static_cast(sIn[0]))); + CPPUNIT_ASSERT_EQUAL(159, int(static_cast(sIn[1]))); + CPPUNIT_ASSERT_EQUAL(97, int(static_cast(sIn[2]))); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_ostring_concat.cxx b/sal/qa/rtl/strings/test_ostring_concat.cxx new file mode 100644 index 000000000..853f97564 --- /dev/null +++ b/sal/qa/rtl/strings/test_ostring_concat.cxx @@ -0,0 +1,206 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +// activate support for detecting errors instead of getting compile errors +#define RTL_STRING_UNITTEST_CONCAT + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +bool rtl_string_unittest_invalid_concat = false; + +using namespace rtl; + +namespace CppUnit +{ +template<> struct assertion_traits +{ + static bool equal(std::type_info const & x, std::type_info const & y) { return x == y; } + + static std::string toString(std::type_info const & x) { return x.name(); } +}; +} // namespace + +namespace test::ostring { + +class StringConcat : public CppUnit::TestFixture +{ +private: + void checkConcat(); + void checkEnsureCapacity(); + void checkAppend(); + void checkInvalid(); + +CPPUNIT_TEST_SUITE(StringConcat); +CPPUNIT_TEST(checkConcat); +CPPUNIT_TEST(checkEnsureCapacity); +CPPUNIT_TEST(checkAppend); +CPPUNIT_TEST(checkInvalid); +CPPUNIT_TEST_SUITE_END(); +}; + +void test::ostring::StringConcat::checkConcat() +{ +// All the extra () are to protect commas against being treated as separators of macro arguments. + CPPUNIT_ASSERT_EQUAL( OString(), OString(OString() + OString())); + CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString( "foo" ) + OString( "bar" ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OString > )), typeid( OString( "foo" ) + OString( "bar" ))); + CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char[ 4 ] > )), typeid( OString( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), OString( OString( "foo" ) + "bar" + "baz" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OString, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString( "foo" ) + "bar" + "baz" )); + CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringBuffer( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringBuffer, const char[ 4 ] > )), typeid( OStringBuffer( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + "bar" )); +#if defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__ + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char[ 4 ] > )), typeid( OStringLiteral<4>( "foo" ) + "bar" )); + // the explicit OStringLiteral<4> template argument in the unevaluated typeid context + // is needed by some GCC versions, see + // "Failed class template argument deduction in unevaluated, parenthesized context" +#else + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char[ 4 ] > )), typeid( OStringLiteral( "foo" ) + "bar" )); +#endif + CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + static_cast("bar") )); +#if defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__ + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char* > )), typeid( OStringLiteral<4>( "foo" ) + static_cast("bar") )); + // the explicit OStringLiteral<4> template argument in the unevaluated typeid context + // is needed by some GCC versions, see + // "Failed class template argument deduction in unevaluated, parenthesized context" +#else + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char* > )), typeid( OStringLiteral( "foo" ) + static_cast("bar") )); +#endif + const char d1[] = "xyz"; + char d2[] = "abc"; + const char* d3 = d1; + char* d4 = d2; + CPPUNIT_ASSERT_EQUAL( OString( "fooxyz" ), OString( OString( "foo" ) + d1 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char[ 4 ] > )), typeid( OString( "foo" ) + d1 )); + CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d2 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char[ 4 ] > )), typeid( OString( "foo" ) + d2 )); + CPPUNIT_ASSERT_EQUAL( OString( "fooxyz" ), OString( OString( "foo" ) + d3 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, const char* > )), typeid( OString( "foo" ) + d3 )); + CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 )); + CPPUNIT_ASSERT_EQUAL( OString( "fooabc" ), OString( OString( "foo" ) + d4 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, char* > )), typeid( OString( "foo" ) + d4 )); + CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OString::Concat( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString::Concat( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OString( "xyzbar" ), OString( OString::Concat( d1 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OString::Concat( d1 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OString( "abcbar" ), OString( OString::Concat( d2 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, char[ 4 ] >, const char[ 4 ] > )), typeid( OString::Concat( d2 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OString( "xyzbar" ), OString( OString::Concat( d3 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, const char* >, const char[ 4 ] > )), typeid( OString::Concat( d3 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OString( "abcbar" ), OString( OString::Concat( d4 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, char* >, const char[ 4 ] > )), typeid( OString::Concat( d4 ) + "bar" )); + + CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< int > > )), typeid( OString( "num" ) + OString::number( 10 ))); + CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10L ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< long long > > )), typeid( OString( "num" ) + OString::number( 10L ))); + CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10ULL ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< unsigned long long > > )), typeid( OString( "num" ) + OString::number( 10ULL ))); + CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5f ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< float > > )), typeid( OString( "num" ) + OString::number( 10.5f ))); + CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< double > > )), typeid( OString( "num" ) + OString::number( 10.5 ))); +} + +void test::ostring::StringConcat::checkEnsureCapacity() +{ + rtl_String* str = nullptr; + rtl_string_newFromLiteral( &str, "test", strlen( "test" ), 0 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + + rtl_String* oldStr = str; + rtl_string_ensureCapacity( &str, 4 ); // should be no-op + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + CPPUNIT_ASSERT_EQUAL( str, oldStr ); + + rtl_string_acquire( oldStr ); + CPPUNIT_ASSERT_EQUAL( 2, int( str->refCount )); + rtl_string_ensureCapacity( &str, 4 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + // a copy was forced because of refcount + CPPUNIT_ASSERT( oldStr != str ); + CPPUNIT_ASSERT_EQUAL( 0, strcmp( oldStr->buffer, str->buffer ) ); + CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount )); + rtl_string_release( str ); + str = oldStr; + + rtl_string_acquire( oldStr ); + rtl_string_ensureCapacity( &str, 1024 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); // size is still 4 + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + CPPUNIT_ASSERT( oldStr != str ); + CPPUNIT_ASSERT_EQUAL( 0, strcmp( oldStr->buffer, str->buffer ) ); + CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount )); + strcpy( str->buffer, "01234567890123456789" ); // but there should be extra capacity + str->length += 20; + rtl_string_release( str ); + rtl_string_release( oldStr ); +} + +void test::ostring::StringConcat::checkAppend() +{ + OString str( "foo" ); + str += OStringLiteral( "bar" ) + "baz"; + CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), str ); + OStringBuffer buf( "foo" ); + buf.append( OStringLiteral( "bar" ) + "baz" ); + CPPUNIT_ASSERT_EQUAL( OString( "foobarbaz" ), buf.makeStringAndClear()); +} + +#define INVALID_CONCAT( expression ) \ + ( \ + rtl_string_unittest_invalid_concat = false, \ + ( void ) OString( expression ), \ + rtl_string_unittest_invalid_concat ) + +void test::ostring::StringConcat::checkInvalid() +{ + CPPUNIT_ASSERT( !INVALID_CONCAT( OString() + OString())); + CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString( "b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUStringBuffer( "b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUStringLiteral( u"b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString::Concat( u"b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + 1 )); + rtl_String* rs = nullptr; + rtl_uString* rus = nullptr; + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs )); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus )); + CPPUNIT_ASSERT( INVALID_CONCAT( OString( "a" ) + OUString::number( 10 ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OString::number( 0 ) + OUString::number( 10 ))); + +#if 0 + // Should fail to compile, to avoid use of OStringConcat lvalues that + // contain dangling references to temporaries: + auto const conc = OStringLiteral("foo") + "bar"; + (void) OString(conc); +#endif +} + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(test::ostring::StringConcat); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx new file mode 100644 index 000000000..ec0faec94 --- /dev/null +++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx @@ -0,0 +1,282 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +// activate the extra needed ctor +#define RTL_STRING_UNITTEST + +#include +#include +#include +#include +#include +#include + +bool rtl_string_unittest_const_literal; +bool rtl_string_unittest_const_literal_function; +static bool rtl_string_unittest_non_const_literal_function; + +namespace test::ostring { + +class StringLiterals: public CppUnit::TestFixture +{ +private: + void checkCtors(); + void checkConstexprCtor(); + void checkUsage(); + void checkNonConstUsage(); + void checkBuffer(); + + void testcall( const char str[] ); + + static const char bad5[]; + static char bad6[]; + + // Check that OStringLiteral ctor is actually constexpr: + static constexpr rtlunittest::OStringLiteral dummy{"dummy"}; + +CPPUNIT_TEST_SUITE(StringLiterals); +CPPUNIT_TEST(checkCtors); +CPPUNIT_TEST(checkConstexprCtor); +CPPUNIT_TEST(checkUsage); +CPPUNIT_TEST(checkNonConstUsage); +CPPUNIT_TEST(checkBuffer); +CPPUNIT_TEST_SUITE_END(); +}; + +// reset the flag, call OString ctor with the given argument and return +// whether the string literal ctor was used +#define CONST_CTOR_USED( argument ) \ + ( \ + rtl_string_unittest_const_literal = false, \ + ( void ) rtl::OString( argument ), \ + result_tmp = rtl_string_unittest_const_literal, \ + rtl_string_unittest_const_literal = false, \ + ( void ) rtl::OStringBuffer( argument ), \ + rtl_string_unittest_const_literal && result_tmp ) + +void test::ostring::StringLiterals::checkCtors() +{ + bool result_tmp; + CPPUNIT_ASSERT( CONST_CTOR_USED( "test" )); + const char good1[] = "test"; + CPPUNIT_ASSERT( CONST_CTOR_USED( good1 )); + + CPPUNIT_ASSERT( !CONST_CTOR_USED( static_cast("test") )); + const char* bad1 = good1; + CPPUNIT_ASSERT( !CONST_CTOR_USED( bad1 )); + char bad2[] = "test"; + CPPUNIT_ASSERT( !CONST_CTOR_USED( bad2 )); + char* bad3 = bad2; + CPPUNIT_ASSERT( !CONST_CTOR_USED( bad3 )); + const char* bad4[] = { "test1" }; + CPPUNIT_ASSERT( !CONST_CTOR_USED( bad4[ 0 ] )); + testcall( good1 ); +#ifndef _MSC_VER + // this is actually not supposed to work (see discussion in stringutils.hxx), + // but gcc and clang somehow manage, so keep it used, just in case some other problem + // shows up somewhen in the future + CPPUNIT_ASSERT( !CONST_CTOR_USED( bad5 )); // size is not known here + CPPUNIT_ASSERT( !CONST_CTOR_USED( bad6 )); +#endif + +// This one is technically broken, since the first element is 6 characters test\0\0, +// but there does not appear a way to detect this by compile time (runtime will assert()). +// RTL_CONSTASCII_USTRINGPARAM() has the same flaw. + const char bad7[][ 6 ] = { "test", "test2" }; +// CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 0 ] )); + CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 1 ] )); + +// Check that contents are correct and equal to the case when const char* ctor is used. + CPPUNIT_ASSERT_EQUAL( rtl::OString( "" ), rtl::OString( static_cast("") ) ); + CPPUNIT_ASSERT_EQUAL( rtl::OString( "ab" ), rtl::OString( static_cast("ab") ) ); + +// Check that contents are correct and equal to the case when RTL_CONSTASCII_STRINGPARAM is used. + CPPUNIT_ASSERT_EQUAL( rtl::OString( "" ), rtl::OString( RTL_CONSTASCII_STRINGPARAM( "" )) ); + CPPUNIT_ASSERT_EQUAL( rtl::OString( "ab" ), rtl::OString( RTL_CONSTASCII_STRINGPARAM( "ab" )) ); +} + +const char test::ostring::StringLiterals::bad5[] = "test"; +char test::ostring::StringLiterals::bad6[] = "test"; + +void test::ostring::StringLiterals::testcall( const char str[] ) +{ +#ifndef _MSC_VER + bool result_tmp; + CPPUNIT_ASSERT( !CONST_CTOR_USED( str )); +#else + // MSVC just errors out on this for some reason, which is fine as well + (void)str; +#endif +} + +void test::ostring::StringLiterals::checkConstexprCtor() +{ +#if __cplusplus >= 202002L + static constinit +#endif + rtl::OString s(dummy); + CPPUNIT_ASSERT_EQUAL(oslInterlockedCount(0x40000000), s.pData->refCount); + // SAL_STRING_STATIC_FLAG (sal/rtl/strimp.hxx) + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); + CPPUNIT_ASSERT_EQUAL(rtl::OString("dummy"), s); + CPPUNIT_ASSERT_EQUAL( + static_cast(dummy.getStr()), static_cast(s.getStr())); +} + +void test::ostring::StringLiterals::checkUsage() +{ +// simply check that all string literal based calls work as expected +// also check that they really use string literal overload and do not convert to OString + rtl::OString foo( "foo" ); + rtl::OString FoO( "FoO" ); + rtl::OString foobarfoo( "foobarfoo" ); + rtl::OString foobar( "foobar" ); + rtl::OString FooBaRfoo( "FooBaRfoo" ); + rtl::OString FooBaR( "FooBaR" ); + rtl::OString bar( "bar" ); + + rtl_string_unittest_const_literal = false; // start checking for OString conversions + rtl_string_unittest_non_const_literal_function = false; // and check for non-const variants + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = "foo" ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( foobar.match( "foo" )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( "bAr", 3 )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( "fOo" )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( foobar.startsWith( "foo" )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( foobar.endsWith( "bar" )); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); +// rtl_string_unittest_const_literal_function = false; +// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( "bar" )); +// CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( bool(foo == "foo") ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( bool("foo" == foo) ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( foo != "bar" ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT( "foo" != bar ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + rtl_string_unittest_const_literal_function = false; + CPPUNIT_ASSERT_EQUAL( static_cast(6), foobarfoo.indexOf( "foo", 1 ) ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); +// rtl_string_unittest_const_literal_function = false; +// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( "foo" ) == 6 ); +// CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true ); + // if this is not true, some of the calls above converted to OString + CPPUNIT_ASSERT( !rtl_string_unittest_const_literal ); + // if this is not true, some of the calls above used non-const variants + CPPUNIT_ASSERT( !rtl_string_unittest_non_const_literal_function ); +} + +void test::ostring::StringLiterals::checkNonConstUsage() +{ +// check that (non-const) char[] overloads work and do not use const char[] overloads + rtl::OString foo( "foo" ); + rtl::OString FoO( "FoO" ); + rtl::OString foobarfoo( "foobarfoo" ); + rtl::OString foobar( "foobar" ); + rtl::OString FooBaRfoo( "FooBaRfoo" ); + rtl::OString FooBaR( "FooBaR" ); + rtl::OString bar( "bar" ); + char foo_c[] = "foo"; + char bar_c[] = "bar"; + char fOo_c[] = "fOo"; + char bAr_c[] = "bAr"; + + rtl_string_unittest_const_literal = false; // start checking for OString conversions + rtl_string_unittest_const_literal_function = false; // and check for const variants + CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = static_cast(foo_c) ); + CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = foo_c ); + CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( static_cast(fOo_c) )); + CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( fOo_c )); + CPPUNIT_ASSERT( foobarfoo.match( static_cast(bar_c), 3 )); + CPPUNIT_ASSERT( foobarfoo.match( bar_c, 3 )); + CPPUNIT_ASSERT( foobar.match( static_cast(foo_c) )); + CPPUNIT_ASSERT( foobar.match( foo_c )); + CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( static_cast(bAr_c), 3 )); + CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( bAr_c, 3 )); + CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( static_cast(fOo_c) )); + CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( fOo_c )); + CPPUNIT_ASSERT( foobar.startsWith( static_cast(foo_c) )); + CPPUNIT_ASSERT( foobar.startsWith( foo_c )); + CPPUNIT_ASSERT( foobar.endsWith( static_cast(bar_c) )); + CPPUNIT_ASSERT( foobar.endsWith( bar_c )); +// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( (const char*)bar_c )); +// CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( bar_c )); + CPPUNIT_ASSERT( bool(foo == static_cast(foo_c)) ); + CPPUNIT_ASSERT( bool(foo == foo_c) ); + CPPUNIT_ASSERT( bool(static_cast(foo_c) == foo) ); + CPPUNIT_ASSERT( bool(foo_c == foo) ); + CPPUNIT_ASSERT( foo != static_cast(bar_c) ); + CPPUNIT_ASSERT( foo != bar_c ); + CPPUNIT_ASSERT( static_cast(foo_c) != bar ); + CPPUNIT_ASSERT( foo_c != bar ); + CPPUNIT_ASSERT_EQUAL( static_cast(6), foobarfoo.indexOf( static_cast(foo_c), 1 ) ); + CPPUNIT_ASSERT_EQUAL( static_cast(6), foobarfoo.indexOf( foo_c, 1 ) ); +// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( (const char*)foo_c ) == 6 ); +// CPPUNIT_ASSERT( foobarfoo.lastIndexOf( foo_c ) == 6 ); + // if this is not true, some of the calls above used const variants + CPPUNIT_ASSERT( !rtl_string_unittest_const_literal ); + CPPUNIT_ASSERT( !rtl_string_unittest_const_literal_function ); +} + +void test::ostring::StringLiterals::checkBuffer() +{ + rtl::OStringBuffer buf; + rtl_string_unittest_const_literal_function = false; + buf.append( "foo" ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + CPPUNIT_ASSERT_EQUAL( rtl::OString( "foo" ), buf.toString()); + rtl_string_unittest_const_literal_function = false; + buf.append( "bar" ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobar" ), buf.toString()); + rtl_string_unittest_const_literal_function = false; + buf.insert( 3, "baz" ); + CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function ); + CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobazbar" ), buf.toString()); + + rtl::OString foobazbard( "foobazbard" ); + rtl::OString foodbazbard( "foodbazbard" ); + rtl_string_unittest_const_literal = false; // start checking for OString conversions + rtl_string_unittest_const_literal_function = false; // and check for const variants + char d[] = "d"; + CPPUNIT_ASSERT_EQUAL( foobazbard, buf.append( d ).toString()); + CPPUNIT_ASSERT_EQUAL( foodbazbard, buf.insert( 3, d ).toString() ); + CPPUNIT_ASSERT( !rtl_string_unittest_const_literal ); + CPPUNIT_ASSERT( !rtl_string_unittest_const_literal_function ); +} + +#undef CONST_CTOR_USED + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(test::ostring::StringLiterals); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_ostringbuffer.cxx b/sal/qa/rtl/strings/test_ostringbuffer.cxx new file mode 100644 index 000000000..292e24310 --- /dev/null +++ b/sal/qa/rtl/strings/test_ostringbuffer.cxx @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include +#include +#include + +#include +#include +#include + +namespace +{ +class Test : public CppUnit::TestFixture +{ +private: + void testStringView() + { + OStringBuffer b("foobar"); + b = std::string_view("abc").substr( + 0, 2); // avoid the string_view accidentally being NUL-terminated + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), b.getLength()); + CPPUNIT_ASSERT_EQUAL('a', b.getStr()[0]); + CPPUNIT_ASSERT_EQUAL('b', b.getStr()[1]); + CPPUNIT_ASSERT_EQUAL('\0', b.getStr()[2]); + } + + void testOStringChar() + { + OStringBuffer b("foobar"); + b = OStringChar('a'); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), b.getLength()); + CPPUNIT_ASSERT_EQUAL('a', b.getStr()[0]); + CPPUNIT_ASSERT_EQUAL('\0', b.getStr()[1]); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testStringView); + CPPUNIT_TEST(testOStringChar); + CPPUNIT_TEST_SUITE_END(); +}; +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/rtl/strings/test_oustring_compare.cxx b/sal/qa/rtl/strings/test_oustring_compare.cxx new file mode 100644 index 000000000..e55d4d3d9 --- /dev/null +++ b/sal/qa/rtl/strings/test_oustring_compare.cxx @@ -0,0 +1,97 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include + +namespace test::oustring { + +class Compare: public CppUnit::TestFixture +{ +private: + void equalsIgnoreAsciiCaseAscii(); + void compareToIgnoreAsciiCase(); + void compareTo(); + +CPPUNIT_TEST_SUITE(Compare); +CPPUNIT_TEST(equalsIgnoreAsciiCaseAscii); +CPPUNIT_TEST(compareToIgnoreAsciiCase); +CPPUNIT_TEST(compareTo); +CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::Compare); + +void test::oustring::Compare::equalsIgnoreAsciiCaseAscii() +{ + const char* const abc = "abc"; + const char* const abcd = "abcd"; + const char* const empty = ""; + CPPUNIT_ASSERT(!OUString().equalsIgnoreAsciiCaseAscii(abc)); + CPPUNIT_ASSERT(!OUString().equalsIgnoreAsciiCaseAsciiL(abc,3)); + CPPUNIT_ASSERT(!OUString("abc"). + equalsIgnoreAsciiCaseAscii(empty)); + CPPUNIT_ASSERT(!OUString("abc"). + equalsIgnoreAsciiCaseAsciiL(empty,0)); + + CPPUNIT_ASSERT(OUString("abc"). + equalsIgnoreAsciiCaseAscii(abc)); + CPPUNIT_ASSERT(!OUString("abcd"). + equalsIgnoreAsciiCaseAscii(abc)); + CPPUNIT_ASSERT(!OUString("abc"). + equalsIgnoreAsciiCaseAscii(abcd)); +} + +void test::oustring::Compare::compareToIgnoreAsciiCase() +{ + CPPUNIT_ASSERT_EQUAL( + sal_Int32(0), + OUString("abc").compareToIgnoreAsciiCase(u"ABC")); + CPPUNIT_ASSERT( + OUString("ABC").compareToIgnoreAsciiCase(u"abcdef") + < 0); + CPPUNIT_ASSERT( + OUString("A").compareToIgnoreAsciiCase(u"_") > 0); +} + +void test::oustring::Compare::compareTo() +{ + // test that embedded NUL does not stop the compare + // this sort of thing is how we assign shape ids in oox + sal_Unicode str1[2] = { '\0', 'x' }; + sal_Unicode str2[2] = { '\0', 'y' }; + + OUString s1(str1, 2); + OUString s2(str2, 2); + CPPUNIT_ASSERT_EQUAL(static_cast(0), s1.compareTo(s1)); + CPPUNIT_ASSERT_EQUAL(static_cast(0), s2.compareTo(s2)); + CPPUNIT_ASSERT(s1.compareTo(s2) < 0); + CPPUNIT_ASSERT(s2.compareTo(s1) > 0); + CPPUNIT_ASSERT(s1.compareTo(OUStringConcatenation(s2 + "y")) < 0); + CPPUNIT_ASSERT(s2.compareTo(OUStringConcatenation(s1 + "x")) > 0); + CPPUNIT_ASSERT(OUString(s1 + "x").compareTo(s2) < 0); + CPPUNIT_ASSERT(OUString(s2 + "y").compareTo(s1) > 0); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_oustring_concat.cxx b/sal/qa/rtl/strings/test_oustring_concat.cxx new file mode 100644 index 000000000..5a11da892 --- /dev/null +++ b/sal/qa/rtl/strings/test_oustring_concat.cxx @@ -0,0 +1,213 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +// activate support for detecting errors instead of getting compile errors +#define RTL_STRING_UNITTEST_CONCAT +extern bool rtl_string_unittest_invalid_concat; + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +using namespace rtl; + +namespace CppUnit +{ +template<> struct assertion_traits +{ + static bool equal(std::type_info const & x, std::type_info const & y) { return x == y; } + + static std::string toString(std::type_info const & x) { return x.name(); } +}; +} // namespace + +namespace test::oustring { + +class StringConcat : public CppUnit::TestFixture +{ +private: + void checkConcat(); + void checkConcatAsciiL(); + void checkEnsureCapacity(); + void checkAppend(); + void checkInvalid(); + +CPPUNIT_TEST_SUITE(StringConcat); +CPPUNIT_TEST(checkConcat); +CPPUNIT_TEST(checkConcatAsciiL); +CPPUNIT_TEST(checkEnsureCapacity); +CPPUNIT_TEST(checkAppend); +CPPUNIT_TEST(checkInvalid); +CPPUNIT_TEST_SUITE_END(); +}; + +void test::oustring::StringConcat::checkConcat() +{ +// All the extra () are to protect commas against being treated as separators of macro arguments. + CPPUNIT_ASSERT_EQUAL( OUString(), OUString(OUString() + OUString())); + CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString( "foo" ) + OUString( "bar" ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUString > )), typeid( OUString( "foo" ) + OUString( "bar" ))); + CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), OUString( OUString( "foo" ) + "bar" + "baz" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< OUString, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString( "foo" ) + "bar" + "baz" )); + CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringBuffer( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringBuffer, const char[ 4 ] > )), typeid( OUStringBuffer( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringLiteral( u"foo" ) + "bar" )); +#if defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__ + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral<4>, const char[ 4 ] > )), typeid( OUStringLiteral<4>( u"foo" ) + "bar" )); + // the explicit OUStringLiteral<4> template argument in the unevaluated typeid context + // is needed by some GCC versions, see + // "Failed class template argument deduction in unevaluated, parenthesized context" +#else + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral<4>, const char[ 4 ] > )), typeid( OUStringLiteral( u"foo" ) + "bar" )); +#endif + const char d1[] = "xyz"; + CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d1 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + d1 )); + const sal_Unicode* d2 = u"xyz"; + CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d2 )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const sal_Unicode* > )), typeid( OUString( "foo" ) + d2 )); + const sal_Unicode d3[] = u"xyz"; + CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString::Concat( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( "foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OUString( "xyzbar" ), OUString( OUString::Concat( d1 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const char[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d1 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUString::Concat( u"foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( u"foo" ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OUString( "xyzbar" ), OUString( OUString::Concat( d2 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode* >, const char[ 4 ] > )), typeid( OUString::Concat( d2 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL( OUString( "xyzbar" ), OUString( OUString::Concat( d3 ) + "bar" )); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d3 ) + "bar" )); + + CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< int > > )), typeid( OUString( "num" ) + OUString::number( 10 ))); + CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10L ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< long long > > )), typeid( OUString( "num" ) + OUString::number( 10L ))); + CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10ULL ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< unsigned long long > > )), typeid( OUString( "num" ) + OUString::number( 10ULL ))); + CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5f ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< float > > )), typeid( OUString( "num" ) + OUString::number( 10.5f ))); + CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5 ))); + CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< double > > )), typeid( OUString( "num" ) + OUString::number( 10.5 ))); +} + +void test::oustring::StringConcat::checkConcatAsciiL() +{ + { + OUString s("foo"); + s += ""; + CPPUNIT_ASSERT_EQUAL(OUString("foo"), s); + } + { + OUString s("foo"); + s += "bar"; + CPPUNIT_ASSERT_EQUAL(OUString("foobar"), s); + } +} + +void test::oustring::StringConcat::checkEnsureCapacity() +{ + rtl_uString* str = nullptr; + rtl_uString_newFromLiteral( &str, "test", strlen( "test" ), 0 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + + rtl_uString* oldStr = str; + rtl_uString_ensureCapacity( &str, 4 ); // should be no-op + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + CPPUNIT_ASSERT_EQUAL( str, oldStr ); + + rtl_uString_acquire( oldStr ); + CPPUNIT_ASSERT_EQUAL( 2, int( str->refCount )); + rtl_uString_ensureCapacity( &str, 4 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + // a copy was forced because of refcount + CPPUNIT_ASSERT( oldStr != str ); + CPPUNIT_ASSERT_EQUAL( static_cast(0), rtl_ustr_compare( oldStr->buffer, str->buffer ) ); + CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount )); + rtl_uString_release( str ); + str = oldStr; + + rtl_uString_acquire( oldStr ); + rtl_uString_ensureCapacity( &str, 1024 ); + CPPUNIT_ASSERT_EQUAL( sal_Int32( 4 ), str->length ); // size is still 4 + CPPUNIT_ASSERT_EQUAL( 1, int( str->refCount )); + CPPUNIT_ASSERT( oldStr != str ); + CPPUNIT_ASSERT_EQUAL( static_cast(0), rtl_ustr_compare( oldStr->buffer, str->buffer ) ); + CPPUNIT_ASSERT_EQUAL( 1, int( oldStr->refCount )); + // but there should be extra capacity + for( int i = 0; + i < 20; + ++i ) + str->buffer[ str->length + i ] = '0'; + str->length += 20; + rtl_uString_release( str ); + rtl_uString_release( oldStr ); +} + +void test::oustring::StringConcat::checkAppend() +{ + OUString str( "foo" ); + str += OUStringLiteral( u"bar" ) + "baz"; + CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), str ); + OUStringBuffer buf( "foo" ); + buf.append( OUStringLiteral( u"bar" ) + "baz" ); + CPPUNIT_ASSERT_EQUAL( OUString( "foobarbaz" ), buf.makeStringAndClear()); +} + +#define INVALID_CONCAT( expression ) \ + ( \ + rtl_string_unittest_invalid_concat = false, \ + ( void ) OUString( expression ), \ + rtl_string_unittest_invalid_concat ) + +void test::oustring::StringConcat::checkInvalid() +{ + CPPUNIT_ASSERT( !INVALID_CONCAT( OUString() + OUString())); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString( "b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OStringBuffer( "b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + static_cast("b") )); + char d[] = "b"; + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + d )); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + static_cast(d) )); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OStringLiteral( "b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString::Concat( "b" ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + 1 )); + rtl_String* rs = nullptr; + rtl_uString* rus = nullptr; + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rs )); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "b" ) + rus )); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString( "a" ) + OString::number( 10 ))); + CPPUNIT_ASSERT( INVALID_CONCAT( OUString::number( 0 ) + OString::number( 10 ))); + +#if 0 + // Should fail to compile, to avoid use of OUStringConcat lvalues that + // contain dangling references to temporaries: + auto const conc = OUStringLiteral("foo") + "bar"; + (void) OUString(conc); +#endif +} + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StringConcat); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_oustring_convert.cxx b/sal/qa/rtl/strings/test_oustring_convert.cxx new file mode 100644 index 000000000..da930a03f --- /dev/null +++ b/sal/qa/rtl/strings/test_oustring_convert.cxx @@ -0,0 +1,177 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace test::oustring { + +class Convert: public CppUnit::TestFixture +{ +private: + void convertToString(); + + CPPUNIT_TEST_SUITE(Convert); + CPPUNIT_TEST(convertToString); + CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::Convert); + +namespace { + +struct TestConvertToString +{ + sal_Unicode aSource[100]; + sal_Int32 nLength; + rtl_TextEncoding nEncoding; + sal_uInt32 nFlags; + char const * pStrict; + char const * pRelaxed; +}; + +void testConvertToString(TestConvertToString const & rTest) +{ + const OUString aSource(rTest.aSource, rTest.nLength); + OString aStrict(RTL_CONSTASCII_STRINGPARAM("12345")); + bool bSuccess = aSource.convertToString(&aStrict, rTest.nEncoding, + rTest.nFlags); + OString aRelaxed(OUStringToOString(aSource, rTest.nEncoding, + rTest.nFlags)); + + OStringBuffer aPrefix; + aPrefix.append("{"); + for (sal_Int32 i = 0; i < rTest.nLength; ++i) + { + aPrefix.append("U+"); + aPrefix.append(static_cast< sal_Int32 >(rTest.aSource[i]), 16); + if (i + 1 < rTest.nLength) + aPrefix.append(","); + } + aPrefix.append("}, "); + aPrefix.append(static_cast< sal_Int32 >(rTest.nEncoding)); + aPrefix.append(", 0x"); + aPrefix.append(static_cast< sal_Int32 >(rTest.nFlags), 16); + aPrefix.append(" -> "); + + if (bSuccess) + { + if (rTest.pStrict == nullptr || aStrict != rTest.pStrict) + { + OStringBuffer aMessage(aPrefix); + aMessage.append("strict = \""); + aMessage.append(aStrict); + aMessage.append("\""); + CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false); + } + } + else + { + if (aStrict != "12345") + { + OStringBuffer aMessage(aPrefix); + aMessage.append("modified output"); + CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false); + } + if (rTest.pStrict != nullptr) + { + OStringBuffer aMessage(aPrefix); + aMessage.append("failed"); + CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false); + } + } + if (aRelaxed != rTest.pRelaxed) + { + OStringBuffer aMessage(aPrefix); + aMessage.append("relaxed = \""); + aMessage.append(aRelaxed); + aMessage.append("\""); + CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), false); + } +} + +} + +void test::oustring::Convert::convertToString() +{ + TestConvertToString const aTests[] + = { { { 0 }, + 0, + RTL_TEXTENCODING_ASCII_US, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR, + "", + "" }, + { { 0 }, + 0, + RTL_TEXTENCODING_ASCII_US, + OUSTRING_TO_OSTRING_CVTFLAGS, + "", + "" }, + { { 0x0041,0x0042,0x0043 }, + 3, + RTL_TEXTENCODING_ASCII_US, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR, + "ABC", + "ABC" }, + { { 0x0041,0x0042,0x0043 }, + 3, + RTL_TEXTENCODING_ASCII_US, + OUSTRING_TO_OSTRING_CVTFLAGS, + "ABC", + "ABC" }, + { { 0xB800 }, + 1, + RTL_TEXTENCODING_ISO_2022_JP, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR, + nullptr, + "" }, + { { 0x3001, 0xB800 }, + 2, + RTL_TEXTENCODING_ISO_2022_JP, + OUSTRING_TO_OSTRING_CVTFLAGS, + "\x1b\x24\x42\x21\x22\x1b\x28\x42\x3f", + "\x1b\x24\x42\x21\x22\x1b\x28\x42\x3f" }, + { { 0x0041,0x0100,0x0042 }, + 3, + RTL_TEXTENCODING_ISO_8859_1, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR, + nullptr, + "A" }, + { { 0x0041,0x0100,0x0042 }, + 3, + RTL_TEXTENCODING_ISO_8859_1, + OUSTRING_TO_OSTRING_CVTFLAGS, + "A?B", + "A?B" } }; + for (size_t i = 0; i < SAL_N_ELEMENTS(aTests); ++i) + testConvertToString(aTests[i]); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_oustring_endswith.cxx b/sal/qa/rtl/strings/test_oustring_endswith.cxx new file mode 100644 index 000000000..bf01577e2 --- /dev/null +++ b/sal/qa/rtl/strings/test_oustring_endswith.cxx @@ -0,0 +1,113 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace test::oustring { + +class EndsWith: public CppUnit::TestFixture +{ +private: + void endsWith(); + + CPPUNIT_TEST_SUITE(EndsWith); + CPPUNIT_TEST(endsWith); + CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::EndsWith); + +namespace { + +void appendString(OStringBuffer & buffer, OString const & string) +{ + buffer.append('"'); + for (int i = 0; i < string.getLength(); ++i) { + char c = string[i]; + if (c < ' ' || c == '"' || c == '\\' || c > '~') { + buffer.append('\\'); + sal_Int32 n = static_cast< sal_Int32 >( + static_cast< unsigned char >(c)); + if (n < 16) { + buffer.append('0'); + } + buffer.append(n, 16); + } else { + buffer.append(c); + } + } + buffer.append('"'); +} + +} + +void test::oustring::EndsWith::endsWith() +{ + struct Data { + char const * str1; + sal_Int32 str1Len; + char const * str2; + sal_Int32 str2Len; + bool endsWith; + }; + Data const data[] = { + { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM(""), + true }, + { RTL_CONSTASCII_STRINGPARAM("abc"), RTL_CONSTASCII_STRINGPARAM(""), + true }, + { RTL_CONSTASCII_STRINGPARAM(""), RTL_CONSTASCII_STRINGPARAM("abc"), + false }, + { RTL_CONSTASCII_STRINGPARAM("ABC"), RTL_CONSTASCII_STRINGPARAM("abc"), + true }, + { RTL_CONSTASCII_STRINGPARAM("abcd"), RTL_CONSTASCII_STRINGPARAM("bcd"), + true }, + { RTL_CONSTASCII_STRINGPARAM("bcd"), RTL_CONSTASCII_STRINGPARAM("abcd"), + false }, + { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"), + RTL_CONSTASCII_STRINGPARAM("b\0c"), true }, + { RTL_CONSTASCII_STRINGPARAM("a\0b\0c"), + RTL_CONSTASCII_STRINGPARAM("b"), false } }; + for (size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + OStringBuffer msg; + appendString(msg, OString(data[i].str1, data[i].str1Len)); + msg.append(".endsWithIgnoreAsciiCaseAsciiL("); + appendString(msg, OString(data[i].str2, data[i].str2Len)); + msg.append(") == "); + msg.append(data[i].endsWith); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + msg.getStr(), + data[i].endsWith, + OUString( + data[i].str1, data[i].str1Len, + RTL_TEXTENCODING_ASCII_US).endsWithIgnoreAsciiCaseAsciiL( + data[i].str2, data[i].str2Len)); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_oustring_startswith.cxx b/sal/qa/rtl/strings/test_oustring_startswith.cxx new file mode 100644 index 000000000..a74671e6e --- /dev/null +++ b/sal/qa/rtl/strings/test_oustring_startswith.cxx @@ -0,0 +1,38 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include +#include + +namespace test::oustring { + +class StartsWith: public CppUnit::TestFixture +{ +private: + void startsWith(); + + CPPUNIT_TEST_SUITE(StartsWith); + CPPUNIT_TEST(startsWith); + CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StartsWith); + +void test::oustring::StartsWith::startsWith() +{ + CPPUNIT_ASSERT( OUString( "foobar" ).startsWith( "foo" )); + CPPUNIT_ASSERT( !OUString( "foo" ).startsWith( "foobar" )); + CPPUNIT_ASSERT( !OUString( "foobar" ).startsWith( "oo" )); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_oustring_stringliterals.cxx b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx new file mode 100644 index 000000000..0caa3fc03 --- /dev/null +++ b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx @@ -0,0 +1,432 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +// activate the extra needed ctor +#define RTL_STRING_UNITTEST + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +extern bool rtl_string_unittest_const_literal; +bool rtl_string_unittest_invalid_conversion; + +namespace test::oustring { + +class StringLiterals: public CppUnit::TestFixture +{ +private: + void checkCtors(); + void checkConstexprCtor(); + void checkUsage(); + void checkBuffer(); + void checkOUStringLiteral(); + void checkOUStringChar(); + void checkUtf16(); + void checkEmbeddedNul(); + + void testcall( const char str[] ); + + // Check that OUStringLiteral ctor is actually constexpr: + static constexpr rtlunittest::OUStringLiteral dummy{u"dummy"}; + +CPPUNIT_TEST_SUITE(StringLiterals); +CPPUNIT_TEST(checkCtors); +CPPUNIT_TEST(checkConstexprCtor); +CPPUNIT_TEST(checkUsage); +CPPUNIT_TEST(checkBuffer); +CPPUNIT_TEST(checkOUStringLiteral); +CPPUNIT_TEST(checkOUStringChar); +CPPUNIT_TEST(checkUtf16); +CPPUNIT_TEST(checkEmbeddedNul); +CPPUNIT_TEST_SUITE_END(); +}; + +// reset the flag, evaluate the expression and return +// whether the string literal ctor was used (i.e. whether the conversion was valid) +template static bool VALID_CONVERSION( T && expression ) +{ + rtl_string_unittest_invalid_conversion = false; + // OK to std::forward expression twice; what is relevant in both ctor calls + // is not the content of the passed argument (which is ignored anyway by the + // special RTL_STRING_UNITTEST ctors) but only its type: + ( void ) rtl::OUString( std::forward(expression) ); + ( void ) rtl::OUStringBuffer( std::forward(expression) ); + return !rtl_string_unittest_invalid_conversion; +} +template static bool VALID_CONVERSION_CALL( T f ) +{ + rtl_string_unittest_invalid_conversion = false; + ( void ) rtl::OUString( f() ); + ( void ) rtl::OUStringBuffer( f() ); + return !rtl_string_unittest_invalid_conversion; +} + +void test::oustring::StringLiterals::checkCtors() +{ + CPPUNIT_ASSERT( VALID_CONVERSION( "test" )); + const char good1[] = "test"; + CPPUNIT_ASSERT( VALID_CONVERSION( good1 )); + + CPPUNIT_ASSERT( !VALID_CONVERSION( static_cast("test") )); + const char* bad1 = good1; + CPPUNIT_ASSERT( !VALID_CONVERSION( bad1 )); + char bad2[] = "test"; + CPPUNIT_ASSERT( !VALID_CONVERSION( bad2 )); + char* bad3 = bad2; + CPPUNIT_ASSERT( !VALID_CONVERSION( bad3 )); + const char* bad4[] = { "test1" }; + CPPUNIT_ASSERT( !VALID_CONVERSION( bad4[ 0 ] )); + testcall( good1 ); + +// This one is technically broken, since the first element is 6 characters test\0\0, +// but there does not appear a way to detect this by compile time (runtime will assert()). +// RTL_CONSTASCII_USTRINGPARAM() has the same flaw. + const char bad5[][ 6 ] = { "test", "test2" }; +// CPPUNIT_ASSERT( VALID_CONVERSION( bad5[ 0 ] )); + CPPUNIT_ASSERT( VALID_CONVERSION( bad5[ 1 ] )); + +// Check that contents are correct and equal to the case when RTL_CONSTASCII_USTRINGPARAM is used. + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "" ), rtl::OUString( "" )); + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "ab" ), rtl::OUString( "ab" )); +#if 0 +// Also check that embedded \0 is included. +// In fact, allowing this is probably just trouble, so this now asserts. + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "\0" ), rtl::OUString( "\0" )); + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "a\0b" ), rtl::OUString( "a\0b" )); +#endif +} + +void test::oustring::StringLiterals::testcall( const char str[] ) +{ + CPPUNIT_ASSERT( + !VALID_CONVERSION_CALL([&str]() { return rtl::OUString(str); })); +} + +void test::oustring::StringLiterals::checkConstexprCtor() +{ +#if __cplusplus >= 202002L + static constinit +#endif + rtl::OUString s(dummy); + CPPUNIT_ASSERT_EQUAL(oslInterlockedCount(0x40000000), s.pData->refCount); + // SAL_STRING_STATIC_FLAG (sal/rtl/strimp.hxx) + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), s.getLength()); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("dummy"), s); + CPPUNIT_ASSERT_EQUAL( + static_cast(dummy.getStr()), static_cast(s.getStr())); +} + +void test::oustring::StringLiterals::checkUsage() +{ +// simply check that all string literal based calls work as expected +// also check that they really use string literal overload and do not convert to OUString + rtl::OUString foo( "foo" ); + rtl::OUString FoO( "FoO" ); + rtl::OUString foobarfoo( "foobarfoo" ); + rtl::OUString foobar( "foobar" ); + rtl::OUString FooBaRfoo( "FooBaRfoo" ); + rtl::OUString FooBaR( "FooBaR" ); + rtl::OUString bar( "bar" ); + rtl::OUString test( "test" ); + + rtl_string_unittest_const_literal = false; // start checking for OUString conversions + CPPUNIT_ASSERT_EQUAL( foo, rtl::OUString() = "foo" ); + CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" )); + CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 )); + CPPUNIT_ASSERT( foobar.match( "foo" )); + CPPUNIT_ASSERT( FooBaRfoo.matchIgnoreAsciiCase( "bAr", 3 )); + CPPUNIT_ASSERT( FooBaR.matchIgnoreAsciiCase( "fOo" )); + CPPUNIT_ASSERT( foobar.startsWith( "foo" )); + CPPUNIT_ASSERT( FooBaR.startsWithIgnoreAsciiCase( "foo" )); + CPPUNIT_ASSERT( foobar.endsWith( "bar" )); + CPPUNIT_ASSERT( FooBaR.endsWithIgnoreAsciiCase( "bar" )); + CPPUNIT_ASSERT( bool(foo == "foo") ); + CPPUNIT_ASSERT( bool("foo" == foo) ); + CPPUNIT_ASSERT( foo != "bar" ); + CPPUNIT_ASSERT( "foo" != bar ); + CPPUNIT_ASSERT_EQUAL( static_cast(6), foobarfoo.indexOf( "foo", 1 ) ); + CPPUNIT_ASSERT_EQUAL( static_cast(6), foobarfoo.lastIndexOf( "foo" ) ); + CPPUNIT_ASSERT( bool(foobarfoo.replaceFirst( "foo", test ) == "testbarfoo") ); + CPPUNIT_ASSERT( bool(foobarfoo.replaceFirst( "foo", "test" ) == "testbarfoo") ); + CPPUNIT_ASSERT( bool(foobarfoo.replaceAll( "foo", test ) == "testbartest") ); + CPPUNIT_ASSERT( bool(foobarfoo.replaceAll( "foo", "test" ) == "testbartest") ); + CPPUNIT_ASSERT_EQUAL( static_cast(0), foo.reverseCompareTo( "foo" ) ); + // if this is not true, some of the calls above converted to OUString + CPPUNIT_ASSERT( !rtl_string_unittest_const_literal ); +} + +void test::oustring::StringLiterals::checkBuffer() +{ + rtl::OUStringBuffer buf; + buf.append( "foo" ); + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foo" ), buf.toString()); + buf.append( "bar" ); + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobar" ), buf.toString()); + buf.insert( 3, "baz" ); + CPPUNIT_ASSERT_EQUAL( rtl::OUString( "foobazbar" ), buf.toString()); + char d[] = "d"; + CPPUNIT_ASSERT( !VALID_CONVERSION( buf.append( rtl::OUString( d )))); + CPPUNIT_ASSERT( !VALID_CONVERSION( buf.append( rtl::OUStringBuffer( d )))); +} + +namespace { + +rtl::OUString conditional(bool flag) { + return rtl::OUString::Concat(flag ? std::u16string_view(u"a") : std::u16string_view(u"bb")) + + "c"; +} + +} + +void test::oustring::StringLiterals::checkOUStringLiteral() +{ + CPPUNIT_ASSERT(bool(conditional(true) == "ac")); + CPPUNIT_ASSERT(bool(conditional(false) == "bbc")); + + static constexpr rtlunittest::OUStringLiteral s1lit(u"abc"); + rtl::OUString s1(s1lit); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), s1); + static constexpr rtlunittest::OUStringLiteral de(u"de"); + s1 = de; + CPPUNIT_ASSERT_EQUAL(rtl::OUString("de"), s1); + s1 += rtlunittest::OUStringLiteral(u"fde"); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("defde"), s1); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(0), + s1.reverseCompareTo(rtlunittest::OUStringLiteral(u"defde"))); + CPPUNIT_ASSERT( + s1.equalsIgnoreAsciiCase(rtlunittest::OUStringLiteral(u"DEFDE"))); + CPPUNIT_ASSERT(s1.match(rtlunittest::OUStringLiteral(u"fde"), 2)); + CPPUNIT_ASSERT( + s1.matchIgnoreAsciiCase(rtlunittest::OUStringLiteral(u"FDE"), 2)); + rtl::OUString s2; + CPPUNIT_ASSERT(s1.startsWith(rtlunittest::OUStringLiteral(u"de"), &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("fde"), s2); + CPPUNIT_ASSERT( + s1.startsWithIgnoreAsciiCase( + rtlunittest::OUStringLiteral(u"DEFD"), &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("e"), s2); + CPPUNIT_ASSERT(s1.endsWith(rtlunittest::OUStringLiteral(u"de"), &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("def"), s2); + CPPUNIT_ASSERT( + s1.endsWithIgnoreAsciiCase(rtlunittest::OUStringLiteral(u"EFDE"), &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("d"), s2); + static constexpr rtlunittest::OUStringLiteral defde(u"defde"); + CPPUNIT_ASSERT(bool(s1 == defde)); + CPPUNIT_ASSERT(bool(defde == s1)); + static constexpr rtlunittest::OUStringLiteral abc(u"abc"); + CPPUNIT_ASSERT(s1 != abc); + CPPUNIT_ASSERT(abc != s1); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(3), s1.indexOf(rtlunittest::OUStringLiteral(u"de"), 1)); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(3), s1.lastIndexOf(rtlunittest::OUStringLiteral(u"de"))); + sal_Int32 i = 0; + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfde"), + s1.replaceFirst( + rtlunittest::OUStringLiteral(u"de"), rtl::OUString("abc"), &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfde"), + s1.replaceFirst( + rtl::OUString("de"), rtlunittest::OUStringLiteral(u"abc"), &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfde"), + s1.replaceFirst( + rtlunittest::OUStringLiteral(u"de"), + rtlunittest::OUStringLiteral(u"abc"), &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfde"), + s1.replaceFirst(rtlunittest::OUStringLiteral(u"de"), "abc", &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfde"), + s1.replaceFirst("de", rtlunittest::OUStringLiteral(u"abc"), &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfabc"), + s1.replaceAll( + rtlunittest::OUStringLiteral(u"de"), rtl::OUString("abc"))); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfabc"), + s1.replaceAll( + rtl::OUString("de"), rtlunittest::OUStringLiteral(u"abc"))); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfabc"), + s1.replaceAll( + rtlunittest::OUStringLiteral(u"de"), + rtlunittest::OUStringLiteral(u"abc"))); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfabc"), + s1.replaceAll(rtlunittest::OUStringLiteral(u"de"), "abc")); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcfabc"), + s1.replaceAll("de", rtlunittest::OUStringLiteral(u"abc"))); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcdef"), + rtl::OUString( + rtl::OUString("abc") + rtlunittest::OUStringLiteral(u"def"))); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcdef"), + rtl::OUString( + rtlunittest::OUStringLiteral(u"abc") + rtl::OUString("def"))); + rtl::OUStringBuffer b(rtlunittest::OUStringLiteral(u"abc")); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), b.toString()); + b.append(rtlunittest::OUStringLiteral(u"def")); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abcdef"), b.toString()); + b.insert(2, rtlunittest::OUStringLiteral(u"gabab")); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abgababcdef"), b.toString()); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(3), b.indexOf(rtlunittest::OUStringLiteral(u"ab"), 1)); + CPPUNIT_ASSERT_EQUAL( + sal_Int32(5), b.lastIndexOf(rtlunittest::OUStringLiteral(u"ab"))); +} + +void test::oustring::StringLiterals::checkOUStringChar() +{ + auto l1 = rtlunittest::OUStringChar('A'); + CPPUNIT_ASSERT_EQUAL(u'A', l1.c); + + char const c2 = 'A'; + auto l2 = rtlunittest::OUStringChar(c2); + CPPUNIT_ASSERT_EQUAL(u'A', l2.c); + + char c3 = 'A'; auto l3 = rtlunittest::OUStringChar(c3); + CPPUNIT_ASSERT_EQUAL(u'A', l3.c); + + auto l4 = rtlunittest::OUStringChar(u'A'); + CPPUNIT_ASSERT_EQUAL(u'A', l4.c); + + sal_Unicode const c5 = 0x100; + auto l5 = rtlunittest::OUStringChar(c5); + CPPUNIT_ASSERT_EQUAL(c5, l5.c); + + rtl::OUString s1{rtlunittest::OUStringChar('A')}; + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getLength()); + CPPUNIT_ASSERT_EQUAL(u'A', s1[0]); + + CPPUNIT_ASSERT_EQUAL( + true, rtl::OUString("A") == rtlunittest::OUStringChar('A')); + CPPUNIT_ASSERT_EQUAL( + false, rtl::OUString("AB") == rtlunittest::OUStringChar('A')); + CPPUNIT_ASSERT_EQUAL( + false, rtl::OUString("A") != rtlunittest::OUStringChar('A')); + CPPUNIT_ASSERT_EQUAL( + true, rtl::OUString("AB") != rtlunittest::OUStringChar('A')); + + rtl::OUString s2("A" + rtlunittest::OUStringChar('b')); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), s2.getLength()); + CPPUNIT_ASSERT_EQUAL(u'A', s2[0]); + CPPUNIT_ASSERT_EQUAL(u'b', s2[1]); +} + +void test::oustring::StringLiterals::checkUtf16() { + rtl::OUString s1(u"abc"); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), s1); + s1 = u"de"; + CPPUNIT_ASSERT_EQUAL(rtl::OUString("de"), s1); + s1 += u"fde"; + CPPUNIT_ASSERT_EQUAL(rtl::OUString("defde"), s1); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), s1.reverseCompareTo(u"defde")); + CPPUNIT_ASSERT(s1.equalsIgnoreAsciiCase(u"DEFDE")); + CPPUNIT_ASSERT(s1.match(u"fde", 2)); + CPPUNIT_ASSERT(s1.matchIgnoreAsciiCase(u"FDE", 2)); + rtl::OUString s2; + CPPUNIT_ASSERT(s1.startsWith(u"de", &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"fde"), s2); + CPPUNIT_ASSERT(s1.startsWithIgnoreAsciiCase(u"DEFD", &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"e"), s2); + CPPUNIT_ASSERT(s1.endsWith(u"de", &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"def"), s2); + CPPUNIT_ASSERT(s1.endsWithIgnoreAsciiCase(u"EFDE", &s2)); + CPPUNIT_ASSERT_EQUAL(rtl::OUString(u"d"), s2); + CPPUNIT_ASSERT(bool(s1 == u"defde")); + CPPUNIT_ASSERT(bool(u"defde" == s1)); + CPPUNIT_ASSERT(s1 != u"abc"); + CPPUNIT_ASSERT(u"abc" != s1); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), s1.indexOf(u"de", 1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), s1.lastIndexOf(u"de")); + sal_Int32 i = 0; + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfde"), + s1.replaceFirst(u"de", rtl::OUString("abc"), &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfde"), + s1.replaceFirst(rtl::OUString("de"), u"abc", &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfde"), s1.replaceFirst(u"de", u"abc", &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfde"), s1.replaceFirst(u"de", "abc", &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfde"), s1.replaceFirst("de", u"abc", &i)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), i); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", rtl::OUString("abc"))); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfabc"), s1.replaceAll(rtl::OUString("de"), u"abc")); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", u"abc")); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfabc"), s1.replaceAll(u"de", "abc")); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString(u"abcfabc"), s1.replaceAll("de", u"abc")); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcdef"), rtl::OUString(rtl::OUString("abc") + u"def")); + CPPUNIT_ASSERT_EQUAL( + rtl::OUString("abcdef"), rtl::OUString(u"abc" + rtl::OUString("def"))); + rtl::OUStringBuffer b(u"abc"); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abc"), b.toString()); + b.append(u"def"); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abcdef"), b.toString()); + b.insert(2, u"gabab"); + CPPUNIT_ASSERT_EQUAL(rtl::OUString("abgababcdef"), b.toString()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3), b.indexOf(u"ab", 1)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(5), b.lastIndexOf(u"ab")); +} + +void test::oustring::StringLiterals::checkEmbeddedNul() { + using namespace std::literals; + rtl::OUString const s("foobar"); + constexpr char16_t const a[] = u"foo\0hidden"; + char16_t const * const p = a; + CPPUNIT_ASSERT(s.startsWith(a)); + CPPUNIT_ASSERT(s.startsWith(p)); + CPPUNIT_ASSERT(s.startsWith(u"foo\0hidden")); + CPPUNIT_ASSERT(!s.startsWith(u"foo\0hidden"s)); + CPPUNIT_ASSERT(!s.startsWith(u"foo\0hidden"sv)); +/*TODO:*/ + CPPUNIT_ASSERT(!s.startsWith(rtlunittest::OUStringLiteral(a))); + CPPUNIT_ASSERT(!s.startsWith(rtlunittest::OUStringLiteral(u"foo\0hidden"))); +/*TODO*/ +} + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(test::oustring::StringLiterals); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_strings_defaultstringview.cxx b/sal/qa/rtl/strings/test_strings_defaultstringview.cxx new file mode 100644 index 000000000..591688b31 --- /dev/null +++ b/sal/qa/rtl/strings/test_strings_defaultstringview.cxx @@ -0,0 +1,118 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include +#include +#include + +#include +#include +#include + +namespace +{ +class Test : public CppUnit::TestFixture +{ + void string() { CPPUNIT_ASSERT_EQUAL(OString(), OString(std::string_view())); } + + void stringbuffer() + { + // No functions related to OStringBuffer that take a std::string_view or std::u16string_view + // argument. + } + + void ustring() + { + CPPUNIT_ASSERT_EQUAL(OUString(), OUString(std::u16string_view())); + OUString s1("foo"); + s1 = std::u16string_view(); + CPPUNIT_ASSERT_EQUAL(OUString(), s1); + OUString s2("foo"); + s2 += std::u16string_view(); + CPPUNIT_ASSERT_EQUAL(OUString("foo"), s2); + CPPUNIT_ASSERT_GREATER(sal_Int32(0), + OUString("foo").reverseCompareTo(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(false, OUString("foo").equalsIgnoreAsciiCase(std::u16string_view())); + CPPUNIT_ASSERT_GREATER(sal_Int32(0), + OUString("foo").compareToIgnoreAsciiCase(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(true, OUString("foo").match(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(true, OUString("foo").matchIgnoreAsciiCase(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(true, OUString("foo").startsWith(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(true, + OUString("foo").startsWithIgnoreAsciiCase(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(true, OUString("foo").endsWith(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(true, OUString("foo").endsWithIgnoreAsciiCase(std::u16string_view())); + OUString const foo("foo"); // avoid loplugin:stringconstant, loplugin:stringview + CPPUNIT_ASSERT_EQUAL(false, foo == std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(true, foo != std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(false, foo < std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(false, foo <= std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(true, foo > std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(true, foo >= std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(false, std::u16string_view() == foo); + CPPUNIT_ASSERT_EQUAL(true, std::u16string_view() != foo); + CPPUNIT_ASSERT_EQUAL(true, std::u16string_view() < foo); + CPPUNIT_ASSERT_EQUAL(true, std::u16string_view() <= foo); + CPPUNIT_ASSERT_EQUAL(false, std::u16string_view() > foo); + CPPUNIT_ASSERT_EQUAL(false, std::u16string_view() >= foo); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString("foo").indexOf(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString("foo").lastIndexOf(std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), OUString("foo").lastIndexOf(std::u16string_view(), 3)); + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(std::u16string_view(), std::u16string_view())); + CPPUNIT_ASSERT_EQUAL( + OUString("barfoo"), + OUString("foobarfoo").replaceFirst(std::u16string_view(u"foo"), std::u16string_view())); + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(std::u16string_view(), std::u16string_view(u"baz"))); + CPPUNIT_ASSERT_EQUAL(OUString("barfoo"), + OUString("foobarfoo").replaceFirst("foo", std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(std::u16string_view(), "baz")); + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceAll(std::u16string_view(), std::u16string_view())); + CPPUNIT_ASSERT_EQUAL( + OUString("bar"), + OUString("foobarfoo").replaceAll(std::u16string_view(u"foo"), std::u16string_view())); + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceAll(std::u16string_view(), std::u16string_view(u"baz"))); + CPPUNIT_ASSERT_EQUAL(OUString("bar"), + OUString("foobarfoo").replaceAll("foo", std::u16string_view())); + CPPUNIT_ASSERT_EQUAL(OUString("foobarfoo"), + OUString("foobarfoo").replaceAll(std::u16string_view(), "baz")); + CPPUNIT_ASSERT_EQUAL(OUString(), OUString::createFromAscii(std::string_view())); + } + + void ustringbuffer() + { + OUStringBuffer b("foo"); + b.append(std::u16string_view()); + CPPUNIT_ASSERT_EQUAL(OUString("foo"), b.toString()); + } + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(string); + CPPUNIT_TEST(stringbuffer); + CPPUNIT_TEST(ustring); + CPPUNIT_TEST(ustringbuffer); + CPPUNIT_TEST_SUITE_END(); +}; +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/qa/rtl/strings/test_strings_replace.cxx b/sal/qa/rtl/strings/test_strings_replace.cxx new file mode 100644 index 000000000..3be6e176a --- /dev/null +++ b/sal/qa/rtl/strings/test_strings_replace.cxx @@ -0,0 +1,339 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + +OUString s_empty; +OUString s_bar("bar"); +OUString s_bars("bars"); +OUString s_foo("foo"); +OUString s_other("other"); +OUString s_xa("xa"); +OUString s_xx("xx"); + +class Test: public CppUnit::TestFixture { +private: + void stringReplaceFirst(); + + void stringReplaceAll(); + + void ustringReplaceFirst(); + + void ustringReplaceFirstAsciiL(); + + void ustringReplaceFirstToAsciiL(); + + void ustringReplaceFirstAsciiLAsciiL(); + + void ustringReplaceAll(); + + void ustringReplaceAllAsciiL(); + + void ustringReplaceAllToAsciiL(); + + void ustringReplaceAllAsciiLAsciiL(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(stringReplaceFirst); + CPPUNIT_TEST(stringReplaceAll); + CPPUNIT_TEST(ustringReplaceFirst); + CPPUNIT_TEST(ustringReplaceFirstAsciiL); + CPPUNIT_TEST(ustringReplaceFirstToAsciiL); + CPPUNIT_TEST(ustringReplaceFirstAsciiLAsciiL); + CPPUNIT_TEST(ustringReplaceAll); + CPPUNIT_TEST(ustringReplaceAllAsciiL); + CPPUNIT_TEST(ustringReplaceAllToAsciiL); + CPPUNIT_TEST(ustringReplaceAllAsciiLAsciiL); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::stringReplaceFirst() { + CPPUNIT_ASSERT_EQUAL( + OString("otherbarfoo"), + OString("foobarfoo").replaceFirst("foo", "other")); + + CPPUNIT_ASSERT_EQUAL( + OString("foobarfoo"), + OString("foobarfoo").replaceFirst("bars", "other")); + + { + sal_Int32 n = 0; + CPPUNIT_ASSERT_EQUAL( + OString("otherbarfoo"), + OString("foobarfoo").replaceFirst("foo", "other", &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n); + } + + { + sal_Int32 n = 1; + CPPUNIT_ASSERT_EQUAL( + OString("foobarother"), + OString("foobarfoo").replaceFirst("foo", "other", &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n); + } + + { + sal_Int32 n = 4; + CPPUNIT_ASSERT_EQUAL( + OString("foobarfoo"), + OString("foobarfoo").replaceFirst("bar", "other", &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); + } +} + +void Test::stringReplaceAll() { + CPPUNIT_ASSERT_EQUAL( + OString("otherbarother"), + OString("foobarfoo").replaceAll("foo", "other")); + + CPPUNIT_ASSERT_EQUAL( + OString("foobarfoo"), + OString("foobarfoo").replaceAll("bars", "other")); + + CPPUNIT_ASSERT_EQUAL( + OString("xxa"), OString("xaa").replaceAll("xa", "xx")); +} + +void Test::ustringReplaceFirst() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + OUString("foobarfoo").replaceFirst(s_foo, s_other)); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(s_bars, s_other)); + + { + sal_Int32 n = 0; + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + OUString("foobarfoo").replaceFirst(s_foo, s_other, &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n); + } + + { + sal_Int32 n = 1; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarother"), + OUString("foobarfoo").replaceFirst(s_foo, s_other, &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n); + } + + { + sal_Int32 n = 4; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(s_bar, s_other, &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); + } +} + +void Test::ustringReplaceFirstAsciiL() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + OUString("foobarfoo").replaceFirst("foo", s_other)); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst("bars", s_other)); + + { + sal_Int32 n = 0; + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + OUString("foobarfoo").replaceFirst("foo", s_other, &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n); + } + + { + sal_Int32 n = 1; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarother"), + OUString("foobarfoo").replaceFirst("foo", s_other, &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n); + } + + { + sal_Int32 n = 4; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst("bar", s_other, &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); + } + + CPPUNIT_ASSERT_EQUAL( + OUString(), OUString("xa").replaceFirst("xa", s_empty)); +} + +void Test::ustringReplaceFirstToAsciiL() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + OUString("foobarfoo").replaceFirst(s_foo, "other")); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(s_bars, "other")); + + { + sal_Int32 n = 0; + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + OUString("foobarfoo").replaceFirst(s_foo, "other", &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n); + } + + { + sal_Int32 n = 1; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarother"), + OUString("foobarfoo").replaceFirst(s_foo, "other", &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n); + } + + { + sal_Int32 n = 4; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceFirst(s_bar, "other", &n)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); + } + + CPPUNIT_ASSERT_EQUAL( + OUString(), OUString("xa").replaceFirst(s_xa, "")); +} + +void Test::ustringReplaceFirstAsciiLAsciiL() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + (OUString("foobarfoo"). + replaceFirst("foo", "other"))); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + (OUString("foobarfoo"). + replaceFirst("bars", "other"))); + + { + sal_Int32 n = 0; + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarfoo"), + (OUString("foobarfoo"). + replaceFirst("foo", "other", &n))); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), n); + } + + { + sal_Int32 n = 1; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarother"), + (OUString("foobarfoo"). + replaceFirst("foo", "other", &n))); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6), n); + } + + { + sal_Int32 n = 4; + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + (OUString("foobarfoo"). + replaceFirst("bar", "other", &n))); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), n); + } + + CPPUNIT_ASSERT_EQUAL( + OUString(), OUString("xa").replaceFirst("xa", "")); +} + +void Test::ustringReplaceAll() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarother"), + OUString("foobarfoo").replaceAll(s_foo, s_other)); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceAll(s_bars, s_other)); + + CPPUNIT_ASSERT_EQUAL( + OUString("xxa"), + OUString("xaa").replaceAll(s_xa, s_xx)); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarbaz"), OUString("foobarfoo").replaceAll(u"foo", u"baz", 1)); +} + +void Test::ustringReplaceAllAsciiL() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarother"), + OUString("foobarfoo").replaceAll("foo", s_other)); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceAll("bars", s_other)); + + CPPUNIT_ASSERT_EQUAL( + OUString("xxa"), + OUString("xaa").replaceAll("xa", s_xx)); + + CPPUNIT_ASSERT_EQUAL( + OUString(), OUString("xa").replaceAll("xa", s_empty)); +} + +void Test::ustringReplaceAllToAsciiL() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarother"), + OUString("foobarfoo").replaceAll(s_foo, "other")); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + OUString("foobarfoo").replaceAll(s_bars, "other")); + + CPPUNIT_ASSERT_EQUAL( + OUString("xxa"), + OUString("xaa").replaceAll(s_xa, "xx")); + + CPPUNIT_ASSERT_EQUAL( + OUString(), OUString("xa").replaceAll(s_xa, "")); +} + +void Test::ustringReplaceAllAsciiLAsciiL() { + CPPUNIT_ASSERT_EQUAL( + OUString("otherbarother"), + (OUString("foobarfoo"). + replaceAll("foo", "other"))); + + CPPUNIT_ASSERT_EQUAL( + OUString("foobarfoo"), + (OUString("foobarfoo"). + replaceAll("bars", "other"))); + + CPPUNIT_ASSERT_EQUAL( + OUString("xxa"), + (OUString("xaa"). + replaceAll("xa", "xx"))); + + CPPUNIT_ASSERT_EQUAL( + OUString(), OUString("xa").replaceAll("xa", "")); +} + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_strings_toint.cxx b/sal/qa/rtl/strings/test_strings_toint.cxx new file mode 100644 index 000000000..d81525b94 --- /dev/null +++ b/sal/qa/rtl/strings/test_strings_toint.cxx @@ -0,0 +1,72 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include +#include +#include +#include +#include + +namespace { + +template< typename T > class Test: public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testToInt32Overflow); + CPPUNIT_TEST(testToUInt32Overflow); + CPPUNIT_TEST(testToInt64Overflow); + CPPUNIT_TEST(testToUInt64Overflow); + CPPUNIT_TEST_SUITE_END(); + + void testToInt32Overflow() { + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("-2147483649").toInt32()); + CPPUNIT_ASSERT_EQUAL(SAL_MIN_INT32, T("-2147483648").toInt32()); + CPPUNIT_ASSERT_EQUAL(SAL_MIN_INT32 + 1, T("-2147483647").toInt32()); + CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT32 - 1, T("2147483646").toInt32()); + CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT32, T("2147483647").toInt32()); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), T("2147483648").toInt32()); + } + + void testToUInt32Overflow() { + CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32 - 1, T("4294967294").toUInt32()); + CPPUNIT_ASSERT_EQUAL(SAL_MAX_UINT32, T("4294967295").toUInt32()); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), T("4294967296").toUInt32()); + } + + void testToInt64Overflow() { + CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("-9223372036854775809").toInt64()); + CPPUNIT_ASSERT_EQUAL( + SAL_MIN_INT64, T("-9223372036854775808").toInt64()); + CPPUNIT_ASSERT_EQUAL( + SAL_MIN_INT64 + 1, T("-9223372036854775807").toInt64()); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_INT64 - 1, T("9223372036854775806").toInt64()); + CPPUNIT_ASSERT_EQUAL(SAL_MAX_INT64, T("9223372036854775807").toInt64()); + CPPUNIT_ASSERT_EQUAL(sal_Int64(0), T("9223372036854775808").toInt64()); + } + + void testToUInt64Overflow() { + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_UINT64 - 1, T("18446744073709551614").toUInt64()); + CPPUNIT_ASSERT_EQUAL( + SAL_MAX_UINT64, T("18446744073709551615").toUInt64()); + CPPUNIT_ASSERT_EQUAL( + sal_uInt64(0), T("18446744073709551616").toUInt64()); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(Test< OString >); +CPPUNIT_TEST_SUITE_REGISTRATION(Test< OUString >); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/strings/test_strings_valuex.cxx b/sal/qa/rtl/strings/test_strings_valuex.cxx new file mode 100644 index 000000000..6c9c83644 --- /dev/null +++ b/sal/qa/rtl/strings/test_strings_valuex.cxx @@ -0,0 +1,115 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include +#include +#include + +namespace test::strings { + +class valueX : public CppUnit::TestFixture { +public: + void testOBoolean(); + void testOUBoolean(); + void testOUInt(); + void testOInt(); + void testOUFloat(); + void testOFloat(); + + CPPUNIT_TEST_SUITE(valueX); + CPPUNIT_TEST(testOBoolean); + CPPUNIT_TEST(testOUBoolean); + CPPUNIT_TEST(testOUInt); + CPPUNIT_TEST(testOInt); + CPPUNIT_TEST(testOUFloat); + CPPUNIT_TEST(testOFloat); + CPPUNIT_TEST_SUITE_END(); +}; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(test::strings::valueX); + +namespace { + +template< typename T > +void testBoolean() { + CPPUNIT_ASSERT_EQUAL( T( "false" ), T::boolean( false ) ); + CPPUNIT_ASSERT_EQUAL( T( "true" ), T::boolean( true ) ); +} + +} + +void test::strings::valueX::testOBoolean() { + testBoolean(); +} + +void test::strings::valueX::testOUBoolean() { + testBoolean(); +} + +template< typename T > +static void testInt() { + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( 30039062 ))); + + // test the overloading resolution + + CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< signed char >( 30 )))); + CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< unsigned char >( 30 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< short >( 30039 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< unsigned short >( 30039 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< int >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned int >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< long long >( 30039062 )))); + // The highest bit set in unsigned long long may not actually work. + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< unsigned long long >( 30039062 )))); + + CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_Int8 >( 30 )))); + CPPUNIT_ASSERT_EQUAL( T( "30" ), T( T::number( static_cast< sal_uInt8 >( 30 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_Int16 >( 30039 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039" ), T( T::number( static_cast< sal_uInt16 >( 30039 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int32 >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt32 >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_Int64 >( 30039062 )))); + CPPUNIT_ASSERT_EQUAL( T( "30039062" ), T( T::number( static_cast< sal_uInt64 >( 30039062 )))); + + // The implementation internally uses sal_Int64 etc. types, so check ranges. + assert( sizeof( int ) <= sizeof( sal_Int32 )); + assert( sizeof( long ) <= sizeof( sal_Int64 )); + assert( sizeof( long long ) <= sizeof( sal_Int64 )); + assert( sizeof( unsigned int ) < sizeof( sal_Int64 )); +} + +void test::strings::valueX::testOUInt() { + testInt(); +} + +void test::strings::valueX::testOInt() { + testInt(); +} + +template< typename T > +static void testFloat() { + CPPUNIT_ASSERT_EQUAL( T( "39062.2" ), T( T::number( 39062.2f ))); + CPPUNIT_ASSERT_EQUAL( T( "30039062.2" ), T( T::number( 30039062.2 ))); + // long double not supported +} + +void test::strings::valueX::testOUFloat() { + testFloat(); +} + +void test::strings::valueX::testOFloat() { + testFloat(); +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/textenc/rtl_tencinfo.cxx b/sal/qa/rtl/textenc/rtl_tencinfo.cxx new file mode 100644 index 000000000..88da153ae --- /dev/null +++ b/sal/qa/rtl/textenc/rtl_tencinfo.cxx @@ -0,0 +1,1674 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include + +#include +#include +#include + +namespace +{ + class testBestMime : public CppUnit::TestFixture + { + public: + void check(rtl_TextEncoding eIn, rtl_TextEncoding eOut) + { + const char *pCharSet = rtl_getBestMimeCharsetFromTextEncoding(eIn); + rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromMimeCharset(pCharSet); + CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestMimeCharsetFromTextEncoding && rtl_getTextEncodingFromMimeCharset differdiffer", eOut, eTextEnc ); + } + + // the defines for the follows test could be found in file inc/rtl/textenc.h + + void MimeCharsetFromTextEncoding_MS_1252() + { + check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_MS_1252 ); + } + + void MimeCharsetFromTextEncoding_APPLE_ROMAN() + { + check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_APPLE_ROMAN); + } + + void MimeCharsetFromTextEncoding_IBM_437() + { + check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_IBM_437 ); + } + + void MimeCharsetFromTextEncoding_IBM_850() + { + check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_IBM_850 ); + } + + void MimeCharsetFromTextEncoding_IBM_860() + { + check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_IBM_860 ); + } + + void MimeCharsetFromTextEncoding_IBM_861() + { + check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_IBM_861 ); + } + + void MimeCharsetFromTextEncoding_IBM_863() + { + check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_IBM_863 ); + } + + void MimeCharsetFromTextEncoding_IBM_865() + { + check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_IBM_865 ); + } + + void MimeCharsetFromTextEncoding_SYMBOL() + { + check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_DONTKNOW ); + } + + void MimeCharsetFromTextEncoding_ASCII_US() + { + check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_ASCII_US ); + } + + void MimeCharsetFromTextEncoding_ISO_8859_1() + { + check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_ISO_8859_1 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_2() + { + check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_ISO_8859_2 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_3() + { + check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_ISO_8859_3 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_4() + { + check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_ISO_8859_4 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_5() + { + check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_ISO_8859_5 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_6() + { + check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_ISO_8859_6 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_7() + { + check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_ISO_8859_7 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_8() + { + check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_ISO_8859_8 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_9() + { + check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_ISO_8859_9 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_14() + { + check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_ISO_8859_14 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_15() + { + check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_ISO_8859_15 ); + } + void MimeCharsetFromTextEncoding_IBM_737() + { + check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_ISO_8859_7 ); + } + void MimeCharsetFromTextEncoding_IBM_775() + { + check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_ISO_8859_4 ); + } + void MimeCharsetFromTextEncoding_IBM_852() + { + check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_IBM_852 ); + } + void MimeCharsetFromTextEncoding_IBM_855() + { + check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_ISO_8859_5 ); + } + void MimeCharsetFromTextEncoding_IBM_857() + { + check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_ISO_8859_9 ); + } + void MimeCharsetFromTextEncoding_IBM_862() + { + check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_IBM_862 ); + } + void MimeCharsetFromTextEncoding_IBM_864() + { + check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_IBM_864 ); + } + void MimeCharsetFromTextEncoding_IBM_866() + { + check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_IBM_866 ); + } + void MimeCharsetFromTextEncoding_IBM_869() + { + check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_ISO_8859_7 ); + } + void MimeCharsetFromTextEncoding_MS_874() + { + check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_MS_874 ); + } + void MimeCharsetFromTextEncoding_MS_1250() + { + check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_MS_1250 ); + } + void MimeCharsetFromTextEncoding_MS_1251() + { + check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_MS_1251 ); + } + void MimeCharsetFromTextEncoding_MS_1253() + { + check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_MS_1253 ); + } + void MimeCharsetFromTextEncoding_MS_1254() + { + check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_MS_1254 ); + } + void MimeCharsetFromTextEncoding_MS_1255() + { + check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_MS_1255 ); + } + void MimeCharsetFromTextEncoding_MS_1256() + { + check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_MS_1256 ); + } + void MimeCharsetFromTextEncoding_MS_1257() + { + check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_MS_1257 ); + } + void MimeCharsetFromTextEncoding_MS_1258() + { + check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_MS_1258 ); + } + void MimeCharsetFromTextEncoding_APPLE_CENTEURO() + { + check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_ISO_8859_2 ); + } + void MimeCharsetFromTextEncoding_APPLE_CROATIAN() + { + check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_ISO_8859_2 ); + } + void MimeCharsetFromTextEncoding_APPLE_CYRILLIC() + { + check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_ISO_8859_5 ); + } + void MimeCharsetFromTextEncoding_APPLE_GREEK() + { + check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_ISO_8859_7 ); + } + void MimeCharsetFromTextEncoding_APPLE_ICELAND() + { + check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_ISO_8859_1 ); + } + void MimeCharsetFromTextEncoding_APPLE_ROMANIAN() + { + check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_ISO_8859_2 ); + } + void MimeCharsetFromTextEncoding_APPLE_TURKISH() + { + check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_ISO_8859_9 ); + } + void MimeCharsetFromTextEncoding_APPLE_UKRAINIAN() + { + check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_ISO_8859_5 ); + } + void MimeCharsetFromTextEncoding_MS_932() + { + check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_SHIFT_JIS ); + } + void MimeCharsetFromTextEncoding_MS_936() + { + check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_GB_2312 ); + } + void MimeCharsetFromTextEncoding_MS_949() + { + check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_EUC_KR ); + } + void MimeCharsetFromTextEncoding_MS_950() + { + check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_BIG5 ); + } + void MimeCharsetFromTextEncoding_KOI8_R() + { + check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_KOI8_R ); + } + void MimeCharsetFromTextEncoding_UTF7() + { + check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_UTF7 ); + } + void MimeCharsetFromTextEncoding_UTF8() + { + check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_UTF8 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_10() + { + check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_ISO_8859_10 ); + } + void MimeCharsetFromTextEncoding_ISO_8859_13() + { + check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_ISO_8859_13 ); + } + void MimeCharsetFromTextEncoding_MS_1361() + { + check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_EUC_KR ); + } + void MimeCharsetFromTextEncoding_TIS_620() + { + check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_TIS_620 ); + } + void MimeCharsetFromTextEncoding_KOI8_U() + { + check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_KOI8_U ); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + void MimeCharsetFromTextEncoding_APPLE_JAPANESE() + { + check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_SHIFT_JIS ); + } + void MimeCharsetFromTextEncoding_SHIFT_JIS() + { + check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_SHIFT_JIS ); + } + void MimeCharsetFromTextEncoding_EUC_JP() + { + check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_EUC_JP ); + } + void MimeCharsetFromTextEncoding_ISO_2022_JP() + { + check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_ISO_2022_JP ); + } + void MimeCharsetFromTextEncoding_JIS_X_0201() + { + check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_EUC_JP ); + } + void MimeCharsetFromTextEncoding_JIS_X_0208() + { + check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_EUC_JP ); + } + void MimeCharsetFromTextEncoding_JIS_X_0212() + { + check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_EUC_JP ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + void MimeCharsetFromTextEncoding_APPLE_KOREAN() + { + check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_EUC_KR ); + } + void MimeCharsetFromTextEncoding_EUC_KR() + { + check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_EUC_KR ); + } + void MimeCharsetFromTextEncoding_ISO_2022_KR() + { + check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_ISO_2022_KR ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + void MimeCharsetFromTextEncoding_APPLE_CHINSIMP() + { + check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_GB_2312 ); + } + void MimeCharsetFromTextEncoding_APPLE_CHINTRAD() + { + check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_BIG5 ); + } + void MimeCharsetFromTextEncoding_GB_2312() + { + check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_GB_2312 ); + } + void MimeCharsetFromTextEncoding_GBT_12345() + { + check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_GBT_12345 ); + } + void MimeCharsetFromTextEncoding_GBK() + { + check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_GBK ); + } + void MimeCharsetFromTextEncoding_BIG5() + { + check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_BIG5 ); + } + void MimeCharsetFromTextEncoding_EUC_CN() + { + check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_GB_2312 ); + } + void MimeCharsetFromTextEncoding_EUC_TW() + { + check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_BIG5 ); + } + void MimeCharsetFromTextEncoding_ISO_2022_CN() + { + check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_ISO_2022_CN ); + } + void MimeCharsetFromTextEncoding_GB_18030() + { + check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_GB_18030 ); + } + void MimeCharsetFromTextEncoding_BIG5_HKSCS() + { + check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_BIG5_HKSCS ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva + void MimeCharsetFromTextEncoding_ISCII_DEVANAGARI() + { + check( RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_ISCII_DEVANAGARI ); + } +#endif + CPPUNIT_TEST_SUITE( testBestMime ); + + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1252 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ROMAN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_437 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_850 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_860 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_861 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_863 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_865 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_SYMBOL ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ASCII_US ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_1 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_2 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_3 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_4 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_5 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_6 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_7 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_8 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_9 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_14 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_15 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_737 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_775 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_852 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_855 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_857 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_862 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_864 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_866 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_IBM_869 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_874 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1250 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1251 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1253 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1254 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1255 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1256 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1257 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1258 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CENTEURO ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CROATIAN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CYRILLIC ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_GREEK ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ICELAND ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_ROMANIAN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_TURKISH ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_UKRAINIAN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_932 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_936 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_949 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_950 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_KOI8_R ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_UTF7 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_UTF8 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_10 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_8859_13 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_MS_1361 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_TIS_620 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_KOI8_U ); +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_JAPANESE ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_SHIFT_JIS ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_JP ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_JP ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0201 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0208 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_JIS_X_0212 ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_KOREAN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_KR ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_KR ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CHINSIMP ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_APPLE_CHINTRAD ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_GB_2312 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_GBT_12345 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_GBK ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_BIG5 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_CN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_EUC_TW ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISO_2022_CN ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_GB_18030 ); + CPPUNIT_TEST( MimeCharsetFromTextEncoding_BIG5_HKSCS ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva + CPPUNIT_TEST( MimeCharsetFromTextEncoding_ISCII_DEVANAGARI ); +#endif + CPPUNIT_TEST_SUITE_END( ); + }; + + class testBestUnix : public CppUnit::TestFixture + { + public: + void check(rtl_TextEncoding eIn, rtl_TextEncoding eOut) + { + const char *pCharSet = rtl_getBestUnixCharsetFromTextEncoding(eIn); + rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromUnixCharset(pCharSet); + CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestUnixCharsetFromTextEncoding && rtl_getTextEncodingFromUnixCharset", eOut, eTextEnc ); + } + + void UnixCharsetFromTextEncoding_MS_1252() + { + check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_APPLE_ROMAN() + { + check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_IBM_437() + { + check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_IBM_850() + { + check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_IBM_860() + { + check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_IBM_861() + { + check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_IBM_863() + { + check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_IBM_865() + { + check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_SYMBOL() + { + check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_SYMBOL ); + } + + void UnixCharsetFromTextEncoding_ASCII_US() + { + check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_1() + { + check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_2() + { + check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_ISO_8859_2 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_3() + { + check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_ISO_8859_3 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_4() + { + check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_ISO_8859_4 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_5() + { + check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_ISO_8859_5 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_6() + { + check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_ISO_8859_6 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_7() + { + check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_ISO_8859_7 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_8() + { + check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_ISO_8859_8 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_9() + { + check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_ISO_8859_9 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_14() + { + check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_ISO_8859_14 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_15() + { + check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_ISO_8859_15 ); + } + + void UnixCharsetFromTextEncoding_IBM_737() + { + check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_ISO_8859_7 ); + } + + void UnixCharsetFromTextEncoding_IBM_775() + { + check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_ISO_8859_4 ); + } + + void UnixCharsetFromTextEncoding_IBM_852() + { + check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_ISO_8859_2 ); + } + + void UnixCharsetFromTextEncoding_IBM_855() + { + check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_ISO_8859_5 ); + } + + void UnixCharsetFromTextEncoding_IBM_857() + { + check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_ISO_8859_9 ); + } + + void UnixCharsetFromTextEncoding_IBM_862() + { + check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_ISO_8859_8 ); + } + + void UnixCharsetFromTextEncoding_IBM_864() + { + check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_ISO_8859_6 ); + } + + void UnixCharsetFromTextEncoding_IBM_866() + { + check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_ISO_8859_5 ); + } + + void UnixCharsetFromTextEncoding_IBM_869() + { + check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_ISO_8859_7 ); + } + + void UnixCharsetFromTextEncoding_MS_874() + { + check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_MS_1250() + { + check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_ISO_8859_2 ); + } + + void UnixCharsetFromTextEncoding_MS_1251() + { + check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_ISO_8859_5 ); + } + + void UnixCharsetFromTextEncoding_MS_1253() + { + check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_ISO_8859_7 ); + } + + void UnixCharsetFromTextEncoding_MS_1254() + { + check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_ISO_8859_9 ); + } + + void UnixCharsetFromTextEncoding_MS_1255() + { + check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_ISO_8859_8 ); + } + + void UnixCharsetFromTextEncoding_MS_1256() + { + check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_ISO_8859_6 ); + } + + void UnixCharsetFromTextEncoding_MS_1257() + { + check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_ISO_8859_4 ); + } + + void UnixCharsetFromTextEncoding_MS_1258() + { + check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_APPLE_CENTEURO() + { + check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_ISO_8859_2 ); + } + + void UnixCharsetFromTextEncoding_APPLE_CROATIAN() + { + check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_ISO_8859_2 ); + } + + void UnixCharsetFromTextEncoding_APPLE_CYRILLIC() + { + check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_ISO_8859_5 ); + } + + void UnixCharsetFromTextEncoding_APPLE_GREEK() + { + check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_ISO_8859_7 ); + } + + void UnixCharsetFromTextEncoding_APPLE_ICELAND() + { + check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_APPLE_ROMANIAN() + { + check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_ISO_8859_2 ); + } + + void UnixCharsetFromTextEncoding_APPLE_TURKISH() + { + check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_ISO_8859_9 ); + } + + void UnixCharsetFromTextEncoding_APPLE_UKRAINIAN() + { + check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_ISO_8859_5 ); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + void UnixCharsetFromTextEncoding_APPLE_CHINSIMP() + { + check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_APPLE_CHINTRAD() + { + check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + void UnixCharsetFromTextEncoding_APPLE_JAPANESE() + { + check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + void UnixCharsetFromTextEncoding_APPLE_KOREAN() + { + check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_DONTKNOW ); + } +#endif + void UnixCharsetFromTextEncoding_MS_932() + { + check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_MS_936() + { + check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_MS_949() + { + check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_MS_950() + { + check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_DONTKNOW ); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + void UnixCharsetFromTextEncoding_SHIFT_JIS() + { + check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + void UnixCharsetFromTextEncoding_GB_2312() + { + check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_GBT_12345() + { + check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_GBK() + { + check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_BIG5() + { + check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + void UnixCharsetFromTextEncoding_EUC_JP() + { + check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + void UnixCharsetFromTextEncoding_EUC_CN() + { + check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_EUC_TW() + { + check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + void UnixCharsetFromTextEncoding_ISO_2022_JP() + { + check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + void UnixCharsetFromTextEncoding_ISO_2022_CN() + { + check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_DONTKNOW ); + } +#endif + void UnixCharsetFromTextEncoding_KOI8_R() + { + check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_KOI8_R ); + } + + void UnixCharsetFromTextEncoding_UTF7() + { + check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_UTF8() + { + check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_10() + { + check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_ISO_8859_10 ); + } + + void UnixCharsetFromTextEncoding_ISO_8859_13() + { + check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_ISO_8859_13 ); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + void UnixCharsetFromTextEncoding_EUC_KR() + { + check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_ISO_2022_KR() + { + check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_DONTKNOW ); + } +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + void UnixCharsetFromTextEncoding_JIS_X_0201() + { + check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_JIS_X_0208() + { + check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_DONTKNOW ); + } + + void UnixCharsetFromTextEncoding_JIS_X_0212() + { + check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_DONTKNOW ); + } +#endif + void UnixCharsetFromTextEncoding_MS_1361() + { + check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_DONTKNOW ); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + void UnixCharsetFromTextEncoding_GB_18030() + { + check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_GBK ); + } + + void UnixCharsetFromTextEncoding_BIG5_HKSCS() + { + check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_DONTKNOW ); + } +#endif + void UnixCharsetFromTextEncoding_TIS_620() + { + check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_ISO_8859_1 ); + } + + void UnixCharsetFromTextEncoding_KOI8_U() + { + check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_KOI8_U ); + } + + CPPUNIT_TEST_SUITE( testBestUnix ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1252 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ROMAN ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_437 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_850 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_860 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_861 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_863 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_865 ); + + CPPUNIT_TEST( UnixCharsetFromTextEncoding_SYMBOL ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ASCII_US ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_1 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_2 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_3 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_4 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_5 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_6 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_7 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_8 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_9 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_14 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_15 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_737 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_775 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_852 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_855 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_857 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_862 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_864 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_866 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_IBM_869 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_874 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1250 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1251 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1253 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1254 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1255 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1256 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1257 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1258 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CENTEURO ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CROATIAN ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CYRILLIC ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_GREEK ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ICELAND ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_ROMANIAN ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_TURKISH ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_UKRAINIAN ); +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CHINSIMP ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_CHINTRAD ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_JAPANESE ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + CPPUNIT_TEST( UnixCharsetFromTextEncoding_APPLE_KOREAN ); +#endif + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_932 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_936 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_949 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_950 ); +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + CPPUNIT_TEST( UnixCharsetFromTextEncoding_SHIFT_JIS ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + CPPUNIT_TEST( UnixCharsetFromTextEncoding_GB_2312 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_GBT_12345 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_GBK ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_BIG5 ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_JP ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_CN ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_TW ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_JP ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_CN ); +#endif + CPPUNIT_TEST( UnixCharsetFromTextEncoding_KOI8_R ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_UTF7 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_UTF8 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_10 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_8859_13 ); +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + CPPUNIT_TEST( UnixCharsetFromTextEncoding_EUC_KR ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_ISO_2022_KR ); +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0201 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0208 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_JIS_X_0212 ); +#endif + CPPUNIT_TEST( UnixCharsetFromTextEncoding_MS_1361 ); +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + CPPUNIT_TEST( UnixCharsetFromTextEncoding_GB_18030 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_BIG5_HKSCS ); +#endif + CPPUNIT_TEST( UnixCharsetFromTextEncoding_TIS_620 ); + CPPUNIT_TEST( UnixCharsetFromTextEncoding_KOI8_U ); + + CPPUNIT_TEST_SUITE_END( ); + }; + + class testBestWindows : public CppUnit::TestFixture + { + public: + void check(rtl_TextEncoding nIn, rtl_TextEncoding nOut) + { + const sal_uInt8 nCharSet = rtl_getBestWindowsCharsetFromTextEncoding(nIn); + rtl_TextEncoding eTextEnc = rtl_getTextEncodingFromWindowsCharset(nCharSet); + CPPUNIT_ASSERT_EQUAL_MESSAGE("rtl_getBestWindowsCharsetFromTextEncoding && rtl_getTextEncodingFromWindowsCharset differ", nOut, eTextEnc ); + } + + void WindowsCharsetFromTextEncoding_MS_1252() + { + check( RTL_TEXTENCODING_MS_1252, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_ROMAN() + { + check( RTL_TEXTENCODING_APPLE_ROMAN, RTL_TEXTENCODING_APPLE_ROMAN ); + } + + void WindowsCharsetFromTextEncoding_IBM_437() + { + check( RTL_TEXTENCODING_IBM_437, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_850() + { + check( RTL_TEXTENCODING_IBM_850, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_860() + { + check( RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_861() + { + check( RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_863() + { + check( RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_865() + { + check( RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_SYMBOL() + { + check( RTL_TEXTENCODING_SYMBOL, RTL_TEXTENCODING_SYMBOL ); + } + + void WindowsCharsetFromTextEncoding_ASCII_US() + { + check( RTL_TEXTENCODING_ASCII_US, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_1() + { + check( RTL_TEXTENCODING_ISO_8859_1, RTL_TEXTENCODING_MS_1252 ); + } +#if 0 + void WindowsCharsetFromTextEncoding_ISO_8859_2() + { + check( RTL_TEXTENCODING_ISO_8859_2, RTL_TEXTENCODING_MS_1252 ); + } +#endif + void WindowsCharsetFromTextEncoding_ISO_8859_3() + { + check( RTL_TEXTENCODING_ISO_8859_3, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_4() + { + check( RTL_TEXTENCODING_ISO_8859_4, RTL_TEXTENCODING_MS_1257 ); + } +#if 0 + void WindowsCharsetFromTextEncoding_ISO_8859_5() + { + check( RTL_TEXTENCODING_ISO_8859_5, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_6() + { + check( RTL_TEXTENCODING_ISO_8859_6, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_7() + { + check( RTL_TEXTENCODING_ISO_8859_7, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_8() + { + check( RTL_TEXTENCODING_ISO_8859_8, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_9() + { + check( RTL_TEXTENCODING_ISO_8859_9, RTL_TEXTENCODING_MS_1252 ); + } +#endif + void WindowsCharsetFromTextEncoding_ISO_8859_14() + { + check( RTL_TEXTENCODING_ISO_8859_14, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_15() + { + check( RTL_TEXTENCODING_ISO_8859_15, RTL_TEXTENCODING_MS_1252 ); + } +#if 0 + void WindowsCharsetFromTextEncoding_IBM_737() + { + check( RTL_TEXTENCODING_IBM_737, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_775() + { + check( RTL_TEXTENCODING_IBM_775, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_852() + { + check( RTL_TEXTENCODING_IBM_852, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_855() + { + check( RTL_TEXTENCODING_IBM_855, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_857() + { + check( RTL_TEXTENCODING_IBM_857, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_862() + { + check( RTL_TEXTENCODING_IBM_862, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_864() + { + check( RTL_TEXTENCODING_IBM_864, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_866() + { + check( RTL_TEXTENCODING_IBM_866, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_IBM_869() + { + check( RTL_TEXTENCODING_IBM_869, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_874() + { + check( RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1250() + { + check( RTL_TEXTENCODING_MS_1250, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1251() + { + check( RTL_TEXTENCODING_MS_1251, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1253() + { + check( RTL_TEXTENCODING_MS_1253, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1254() + { + check( RTL_TEXTENCODING_MS_1254, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1255() + { + check( RTL_TEXTENCODING_MS_1255, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1256() + { + check( RTL_TEXTENCODING_MS_1256, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1257() + { + check( RTL_TEXTENCODING_MS_1257, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1258() + { + check( RTL_TEXTENCODING_MS_1258, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_ARABIC() + { + check( RTL_TEXTENCODING_APPLE_ARABIC, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_CENTEURO() + { + check( RTL_TEXTENCODING_APPLE_CENTEURO, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_CROATIAN() + { + check( RTL_TEXTENCODING_APPLE_CROATIAN, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_CYRILLIC() + { + check( RTL_TEXTENCODING_APPLE_CYRILLIC, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_DEVANAGARI() + { + check( RTL_TEXTENCODING_APPLE_DEVANAGARI, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_FARSI() + { + check( RTL_TEXTENCODING_APPLE_FARSI, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_GREEK() + { + check( RTL_TEXTENCODING_APPLE_GREEK, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_GUJARATI() + { + check( RTL_TEXTENCODING_APPLE_GUJARATI, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_GURMUKHI() + { + check( RTL_TEXTENCODING_APPLE_GURMUKHI, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_HEBREW() + { + check( RTL_TEXTENCODING_APPLE_HEBREW, RTL_TEXTENCODING_MS_1252 ); + } +#endif + void WindowsCharsetFromTextEncoding_APPLE_ICELAND() + { + check( RTL_TEXTENCODING_APPLE_ICELAND, RTL_TEXTENCODING_MS_1252 ); + } +#if 0 + void WindowsCharsetFromTextEncoding_APPLE_ROMANIAN() + { + check( RTL_TEXTENCODING_APPLE_ROMANIAN, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_THAI() + { + check( RTL_TEXTENCODING_APPLE_THAI, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_TURKISH() + { + check( RTL_TEXTENCODING_APPLE_TURKISH, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_UKRAINIAN() + { + check( RTL_TEXTENCODING_APPLE_UKRAINIAN, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_CHINSIMP() + { + check( RTL_TEXTENCODING_APPLE_CHINSIMP, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_CHINTRAD() + { + check( RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_JAPANESE() + { + check( RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_APPLE_KOREAN() + { + check( RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_932() + { + check( RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_936() + { + check( RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_949() + { + check( RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_950() + { + check( RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_SHIFT_JIS() + { + check( RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_GB_2312() + { + check( RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_GBT_12345() + { + check( RTL_TEXTENCODING_GBT_12345, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_GBK() + { + check( RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_BIG5() + { + check( RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_EUC_JP() + { + check( RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_EUC_CN() + { + check( RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_EUC_TW() + { + check( RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_2022_JP() + { + check( RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_2022_CN() + { + check( RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_KOI8_R() + { + check( RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_MS_1252 ); + } +#endif + void WindowsCharsetFromTextEncoding_UTF7() + { + check( RTL_TEXTENCODING_UTF7, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_UTF8() + { + check( RTL_TEXTENCODING_UTF8, RTL_TEXTENCODING_MS_1252 ); + } +#if 0 + void WindowsCharsetFromTextEncoding_ISO_8859_10() + { + check( RTL_TEXTENCODING_ISO_8859_10, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_8859_13() + { + check( RTL_TEXTENCODING_ISO_8859_13, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_EUC_KR() + { + check( RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISO_2022_KR() + { + check( RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_JIS_X_0201() + { + check( RTL_TEXTENCODING_JIS_X_0201, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_JIS_X_0208() + { + check( RTL_TEXTENCODING_JIS_X_0208, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_JIS_X_0212() + { + check( RTL_TEXTENCODING_JIS_X_0212, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_MS_1361() + { + check( RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_GB_18030() + { + check( RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_BIG5_HKSCS() + { + check( RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_TIS_620() + { + check( RTL_TEXTENCODING_TIS_620, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_KOI8_U() + { + check( RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_MS_1252 ); + } + + void WindowsCharsetFromTextEncoding_ISCII_DEVANAGARI() + { + check( RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_MS_1252 ); + } +#endif + void WindowsCharsetFromTextEncoding_JAVA_UTF8() + { + check( RTL_TEXTENCODING_JAVA_UTF8, RTL_TEXTENCODING_MS_1252 ); + } + + CPPUNIT_TEST_SUITE( testBestWindows ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1252 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ROMAN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_437 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_850 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_860 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_861 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_863 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_865 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_SYMBOL ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ASCII_US ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_1 ); +#if 0 + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_2 ); +#endif + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_3 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_4 ); +#if 0 + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_5 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_6 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_7 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_8 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_9 ); +#endif + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_14 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_15 ); +#if 0 + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_737 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_775 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_852 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_855 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_857 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_862 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_864 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_866 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_IBM_869 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_874 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1250 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1251 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1253 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1254 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1255 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1256 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1257 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1258 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ARABIC ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CENTEURO ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CROATIAN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CYRILLIC ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_DEVANAGARI ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_FARSI ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GREEK ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GUJARATI ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_GURMUKHI ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_HEBREW ); +#endif + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ICELAND ); +#if 0 + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_ROMANIAN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_THAI ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_TURKISH ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_UKRAINIAN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CHINSIMP ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_CHINTRAD ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_JAPANESE ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_APPLE_KOREAN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_932 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_936 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_949 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_950 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_SHIFT_JIS ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GB_2312 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GBT_12345 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GBK ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_BIG5 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_JP ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_CN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_TW ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_JP ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_CN ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_KOI8_R ); +#endif + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_UTF7 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_UTF8 ); +#if 0 + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_10 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_8859_13 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_EUC_KR ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISO_2022_KR ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0201 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0208 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JIS_X_0212 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_MS_1361 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_GB_18030 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_BIG5_HKSCS ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_TIS_620 ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_KOI8_U ); + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_ISCII_DEVANAGARI ); +#endif + CPPUNIT_TEST( WindowsCharsetFromTextEncoding_JAVA_UTF8 ); + + CPPUNIT_TEST_SUITE_END( ); + }; + + class testTextEncodingInfo: public CppUnit::TestFixture + { + public: + // not implemented encoding test + void testTextEncodingInfo_001() + { + rtl_TextEncodingInfo aInfo1, aInfo2, aInfo3, aInfo4, aInfo5; + aInfo1.StructSize = 4; + // not implemented + bool bRes1 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo1 ); + // implemented + bool bRes11 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo1 ); + CPPUNIT_ASSERT_MESSAGE("should return sal_False.", !bRes1); + CPPUNIT_ASSERT_MESSAGE("should return sal_False.", !bRes11); + + aInfo2.StructSize = 5; + bool bRes2 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo2 ); + bool bRes21 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo2 ); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes2); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes21); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", aInfo2.MinimumCharSize >=1 ); + + aInfo3.StructSize = 6; + bool bRes3 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo3 ); + bool bRes31 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo3 ); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes3); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes31); +//&& aInfo2.MinimumCharSize >=1 ); + + aInfo4.StructSize = 8; + bool bRes4 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo4 ); + bool bRes41 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_CYRILLIC, &aInfo4); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes4); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", bRes41); +// && aInfo2.MinimumCharSize >=1 ); + + aInfo5.StructSize = sizeof aInfo5; + bool bRes5 = rtl_getTextEncodingInfo( RTL_TEXTENCODING_APPLE_ARABIC, &aInfo5 ); + CPPUNIT_ASSERT_MESSAGE("StructSize<6 should return sal_True", !bRes5); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "StructSize<6 should return sal_True", sal_uInt32(0), aInfo5.Flags); + + } + CPPUNIT_TEST_SUITE(testTextEncodingInfo); + CPPUNIT_TEST(testTextEncodingInfo_001); + CPPUNIT_TEST_SUITE_END(); + }; + + class testEncodingFromUnix: public CppUnit::TestFixture + { + public: + void testIso8859() { + check(RTL_TEXTENCODING_DONTKNOW, "ISO8859"); + check(RTL_TEXTENCODING_DONTKNOW, "ISO8859-0"); + check(RTL_TEXTENCODING_DONTKNOW, "ISO8859-01"); + check(RTL_TEXTENCODING_DONTKNOW, "ISO8859_1"); + check(RTL_TEXTENCODING_DONTKNOW, "ISO88591"); + check(RTL_TEXTENCODING_ISO_8859_1, "ISO8859-1"); + check(RTL_TEXTENCODING_ISO_8859_2, "ISO8859-2"); + check(RTL_TEXTENCODING_ISO_8859_3, "ISO8859-3"); + check(RTL_TEXTENCODING_ISO_8859_4, "ISO8859-4"); + check(RTL_TEXTENCODING_ISO_8859_5, "ISO8859-5"); + check(RTL_TEXTENCODING_ISO_8859_6, "ISO8859-6"); + check(RTL_TEXTENCODING_ISO_8859_7, "ISO8859-7"); + check(RTL_TEXTENCODING_ISO_8859_8, "ISO8859-8"); + check(RTL_TEXTENCODING_ISO_8859_9, "ISO8859-9"); + check(RTL_TEXTENCODING_ISO_8859_10, "ISO8859-10"); + check(RTL_TEXTENCODING_TIS_620, "ISO8859-11"); + check(RTL_TEXTENCODING_ISO_8859_13, "ISO8859-13"); + check(RTL_TEXTENCODING_ISO_8859_14, "ISO8859-14"); + check(RTL_TEXTENCODING_ISO_8859_15, "ISO8859-15"); + } + + void testTis620() { + check(RTL_TEXTENCODING_DONTKNOW, "TIS620"); + check(RTL_TEXTENCODING_TIS_620, "TIS620-0"); + check(RTL_TEXTENCODING_DONTKNOW, "TIS620-1"); + check(RTL_TEXTENCODING_TIS_620, "TIS620-2529"); + check(RTL_TEXTENCODING_TIS_620, "TIS620-2533"); + check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2529-0"); + check(RTL_TEXTENCODING_TIS_620, "TIS620.2529-1"); + check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2529-2"); + check(RTL_TEXTENCODING_TIS_620, "TIS620.2533-0"); + check(RTL_TEXTENCODING_TIS_620, "TIS620.2533-1"); + check(RTL_TEXTENCODING_DONTKNOW, "TIS620.2533-2"); + } + + CPPUNIT_TEST_SUITE(testEncodingFromUnix); + CPPUNIT_TEST(testIso8859); + CPPUNIT_TEST(testTis620); + CPPUNIT_TEST_SUITE_END(); + + private: + void check(rtl_TextEncoding expected, char const * input) { + CPPUNIT_ASSERT_EQUAL_MESSAGE( + input, expected, rtl_getTextEncodingFromUnixCharset(input)); + } + }; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(testBestMime); +CPPUNIT_TEST_SUITE_REGISTRATION(testBestUnix); +CPPUNIT_TEST_SUITE_REGISTRATION(testBestWindows); +CPPUNIT_TEST_SUITE_REGISTRATION(testTextEncodingInfo); +CPPUNIT_TEST_SUITE_REGISTRATION(testEncodingFromUnix); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/textenc/rtl_textcvt.cxx b/sal/qa/rtl/textenc/rtl_textcvt.cxx new file mode 100644 index 000000000..55804bd32 --- /dev/null +++ b/sal/qa/rtl/textenc/rtl_textcvt.cxx @@ -0,0 +1,3313 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + +struct SingleByteCharSet { + rtl_TextEncoding m_nEncoding; + sal_Unicode m_aMap[256]; +}; + +void testSingleByteCharSet(SingleByteCharSet const & rSet) { + char aText[256]; + sal_Unicode aUnicode[256]; + sal_Size nNumber = 0; + for (int i = 0; i < 256; ++i) { + if (rSet.m_aMap[i] != 0xFFFF) { + aText[nNumber++] = static_cast< char >(i); + } + } + { + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(rSet.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::number(rSet.m_nEncoding) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + rtl_TextToUnicodeContext aContext + = rtl_createTextToUnicodeContext(aConverter); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr); + sal_Size nSize; + sal_uInt32 nInfo; + sal_Size nConverted; + nSize = rtl_convertTextToUnicode( + aConverter, aContext, aText, nNumber, aUnicode, nNumber, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &nInfo, &nConverted); + CPPUNIT_ASSERT_EQUAL(nNumber, nSize); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo); + CPPUNIT_ASSERT_EQUAL(nNumber, nConverted); + rtl_destroyTextToUnicodeContext(aConverter, aContext); + rtl_destroyTextToUnicodeConverter(aConverter); + } + { + int j = 0; + for (int i = 0; i < 256; ++i) { + if (rSet.m_aMap[i] != 0xFFFF && aUnicode[j] != rSet.m_aMap[i]) { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("rSet.m_aMap[" + OUString::number(i) + "] == " + + OUString::number(rSet.m_aMap[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + u'\xFFFF', rSet.m_aMap[i]); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(j) + "] == " + + OUString::number(aUnicode[j], 16) + + ", rSet.m_aMap[" + OUString::number(i) + "] == " + + OUString::number(rSet.m_aMap[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + rSet.m_aMap[i], aUnicode[j]); + } + if (rSet.m_aMap[i] != 0xFFFF) + j++; + } + } + if (rSet.m_nEncoding == RTL_TEXTENCODING_ASCII_US) { + nNumber = 128; + } + { + rtl_UnicodeToTextConverter aConverter + = rtl_createUnicodeToTextConverter(rSet.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + rtl_UnicodeToTextContext aContext + = rtl_createUnicodeToTextContext(aConverter); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr); + sal_Size nSize; + sal_uInt32 nInfo; + sal_Size nConverted; + nSize = rtl_convertUnicodeToText( + aConverter, aContext, aUnicode, nNumber, aText, nNumber, + (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR), + &nInfo, &nConverted); + CPPUNIT_ASSERT_EQUAL(nNumber, nSize); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo); + CPPUNIT_ASSERT_EQUAL(nNumber, nConverted); + rtl_destroyUnicodeToTextContext(aConverter, aContext); + rtl_destroyUnicodeToTextConverter(aConverter); + } + { + int j = 0; + for (int i = 0; i < 256; ++i) { + if (rSet.m_aMap[i] != 0xFFFF + && aText[j] != static_cast< char >(i)) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("rSet.m_aMap[" + OUString::number(i) + "] == " + + OUString::number(rSet.m_aMap[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + u'\xFFFF', rSet.m_aMap[i]); + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aText[" + OUString::number(j) + "] == " + + OUString::number(i, 16)), + RTL_TEXTENCODING_UTF8).getStr(), + static_cast< char >(i), aText[j]); + } + if (rSet.m_aMap[i] != 0xFFFF) + j++; + } + } + for (int i = 0; i < 256; ++i) { + if (rSet.m_aMap[i] == 0xFFFF) { + aText[0] = static_cast< char >(i); + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(rSet.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + rtl_TextToUnicodeContext aContext + = rtl_createTextToUnicodeContext(aConverter); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr); + sal_Size nSize; + sal_uInt32 nInfo; + sal_Size nConverted; + nSize = rtl_convertTextToUnicode( + aConverter, aContext, aText, 1, aUnicode, 1, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &nInfo, &nConverted); + + sal_uInt32 nExpectedInfo = (RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_UNDEFINED); + + CPPUNIT_ASSERT_EQUAL(sal_Size(0), nSize); + CPPUNIT_ASSERT_EQUAL(nExpectedInfo, nInfo); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), nConverted); + + rtl_destroyTextToUnicodeContext(aConverter, aContext); + rtl_destroyTextToUnicodeConverter(aConverter); + } + } +} + +int const TEST_STRING_SIZE = 1000; + +struct ComplexCharSetTest { + rtl_TextEncoding m_nEncoding; + char const * m_pText; + sal_Size m_nTextSize; + sal_Unicode m_aUnicode[TEST_STRING_SIZE]; + sal_Size m_nUnicodeSize; + bool m_bNoContext; + bool m_bForward; + bool m_bReverse; + bool m_bGlobalSignature; + sal_uInt32 m_nReverseUndefined; +}; + +void doComplexCharSetTest(ComplexCharSetTest const & rTest) { + if (rTest.m_bForward) { + sal_Unicode aUnicode[TEST_STRING_SIZE]; + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(rTest.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + rtl_TextToUnicodeContext aContext + = rtl_createTextToUnicodeContext(aConverter); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr); + sal_Size nSize; + sal_uInt32 nInfo; + sal_Size nConverted; + nSize = rtl_convertTextToUnicode( + aConverter, aContext, + reinterpret_cast< char const * >(rTest.m_pText), + rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR + | RTL_TEXTTOUNICODE_FLAGS_FLUSH + | (rTest.m_bGlobalSignature ? + RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)), + &nInfo, &nConverted); + CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo); + CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nConverted); + + rtl_destroyTextToUnicodeContext(aConverter, aContext); + rtl_destroyTextToUnicodeConverter(aConverter); + + for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " + + OUString::number(aUnicode[i], 16) + + ", rTest.m_aUnicode[" + OUString::number(i) + "] == " + + OUString::number(rTest.m_aUnicode[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + rTest.m_aUnicode[i], aUnicode[i]); + } + } + if (rTest.m_bForward) { + sal_Unicode aUnicode[TEST_STRING_SIZE]; + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(rTest.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + rtl_TextToUnicodeContext aContext + = rtl_createTextToUnicodeContext(aConverter); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr); + if (aContext != reinterpret_cast(1)) { + sal_Size nInput = 0; + sal_Size nOutput = 0; + for (bool bFlush = true; nInput < rTest.m_nTextSize || bFlush;) { + sal_Size nSrcBytes = 1; + sal_uInt32 nFlags + = (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR + | (rTest.m_bGlobalSignature ? + RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)); + if (nInput >= rTest.m_nTextSize) { + nSrcBytes = 0; + nFlags |= RTL_TEXTTOUNICODE_FLAGS_FLUSH; + bFlush = false; + } + sal_uInt32 nInfo; + sal_Size nConverted; + sal_Size nSize = rtl_convertTextToUnicode( + aConverter, aContext, + rTest.m_pText + nInput, + nSrcBytes, aUnicode + nOutput, TEST_STRING_SIZE - nOutput, + nFlags, &nInfo, &nConverted); + nOutput += nSize; + nInput += nConverted; + CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), + (nInfo & ~RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL)); + } + CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nOutput); + CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nInput); + + for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " + + OUString::number(aUnicode[i], 16) + + ", rTest.m_aUnicode[" + OUString::number(i) + "] == " + + OUString::number(rTest.m_aUnicode[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + rTest.m_aUnicode[i], aUnicode[i]); + } + } + rtl_destroyTextToUnicodeContext(aConverter, aContext); + rtl_destroyTextToUnicodeConverter(aConverter); + } + if (rTest.m_bNoContext && rTest.m_bForward) { + sal_Unicode aUnicode[TEST_STRING_SIZE] = { 0, }; + int nSize = 0; + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(rTest.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + for (sal_Size i = 0;;) { + if (i == rTest.m_nTextSize) { + goto done; + } + char c1 = rTest.m_pText[i++]; + sal_Unicode aUC[2]; + sal_uInt32 nInfo = 0; + sal_Size nCvtBytes; + sal_Size nChars = rtl_convertTextToUnicode( + aConverter, nullptr, &c1, 1, aUC, 2, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR + | (rTest.m_bGlobalSignature ? + RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)), + &nInfo, &nCvtBytes); + if ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0) { + char sBuffer[10]; + sBuffer[0] = c1; + sal_uInt16 nLen = 1; + while ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0 + && nLen < 10) + { + if (i == rTest.m_nTextSize) { + goto done; + } + c1 = rTest.m_pText[i++]; + sBuffer[nLen++] = c1; + nChars = rtl_convertTextToUnicode( + aConverter, nullptr, sBuffer, nLen, aUC, 2, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR + | (rTest.m_bGlobalSignature ? + RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)), + &nInfo, &nCvtBytes); + } + if (nChars == 1 && nInfo == 0) { + OSL_ASSERT(nCvtBytes == nLen); + aUnicode[nSize++] = aUC[0]; + } else if (nChars == 2 && nInfo == 0) { + OSL_ASSERT(nCvtBytes == nLen); + aUnicode[nSize++] = aUC[0]; + aUnicode[nSize++] = aUC[1]; + } else { + OSL_ASSERT( + (nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) == 0 + && nChars == 0 && nInfo != 0); + aUnicode[nSize++] = sBuffer[0]; + i -= nLen - 1; + } + } else if (nChars == 1 && nInfo == 0) { + OSL_ASSERT(nCvtBytes == 1); + aUnicode[nSize++] = aUC[0]; + } else if (nChars == 2 && nInfo == 0) { + OSL_ASSERT(nCvtBytes == 1); + aUnicode[nSize++] = aUC[0]; + aUnicode[nSize++] = aUC[1]; + } else { + OSL_ASSERT(nChars == 0 && nInfo != 0); + aUnicode[nSize++] = c1; + } + } + done: + rtl_destroyTextToUnicodeConverter(aConverter); + for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " + + OUString::number(aUnicode[i], 16) + + ", rTest.m_aUnicode[" + OUString::number(i) + "] == " + + OUString::number(rTest.m_aUnicode[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + rTest.m_aUnicode[i], aUnicode[i]); + } + } + if (rTest.m_bReverse) { + char aText[TEST_STRING_SIZE]; + rtl_UnicodeToTextConverter aConverter + = rtl_createUnicodeToTextConverter(rTest.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + rtl_UnicodeToTextContext aContext + = rtl_createUnicodeToTextContext(aConverter); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr); + sal_Size nSize; + sal_uInt32 nInfo; + sal_Size nConverted; + nSize = rtl_convertUnicodeToText( + aConverter, aContext, rTest.m_aUnicode, rTest.m_nUnicodeSize, aText, + TEST_STRING_SIZE, + (rTest.m_nReverseUndefined | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR + | RTL_UNICODETOTEXT_FLAGS_FLUSH + | (rTest.m_bGlobalSignature ? + RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE : 0)), + &nInfo, &nConverted); + CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nSize); + if (nInfo != 0) + { + CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_UNDEFINED, nInfo); + CPPUNIT_ASSERT_MESSAGE("rTest.m_nReverseUndefined should not be RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR", + rTest.m_nReverseUndefined != RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR); + } + CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nConverted); + rtl_destroyUnicodeToTextContext(aConverter, aContext); + rtl_destroyUnicodeToTextConverter(aConverter); + for (sal_Size i = 0; i < rTest.m_nTextSize; ++i) { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aText[" + OUString::number(i) + "] == " + + OUString::number(aText[i], 16) + + ", rTest.m_pText[" + OUString::number(i) + "] == " + + OUString::number(rTest.m_pText[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + rTest.m_pText[i], aText[i]); + } + } +} + +void doComplexCharSetCutTest(ComplexCharSetTest const & rTest) { + if (rTest.m_bNoContext) { + sal_Unicode aUnicode[TEST_STRING_SIZE]; + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(rTest.m_nEncoding); + CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"), + RTL_TEXTENCODING_UTF8).getStr(), + aConverter != nullptr); + sal_Size nSize; + sal_uInt32 nInfo; + sal_Size nConverted; + nSize = rtl_convertTextToUnicode( + aConverter, nullptr, reinterpret_cast< char const * >(rTest.m_pText), + rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &nInfo, &nConverted); + + CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize); + if (nInfo != RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) + { + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL, + nInfo); + } + CPPUNIT_ASSERT_MESSAGE("nConverted should be less than rTest.m_nTextSize", nConverted < rTest.m_nTextSize); + + rtl_destroyTextToUnicodeConverter(aConverter); + for (sal_Size i = 0; i < nSize; ++i) { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode[" + OUString::number(i) + "] == " + + OUString::number(aUnicode[i], 16) + + ", rTest.m_aUnicode[" + OUString::number(i) + "] == " + + OUString::number(rTest.m_aUnicode[i], 16)), + RTL_TEXTENCODING_UTF8).getStr(), + rTest.m_aUnicode[i], aUnicode[i]); + } + } +} + +class Test: public CppUnit::TestFixture { +public: + void testSingleByte(); + + void testComplex(); + + void testComplexCut(); + + void testInvalidUtf7(); + + void testInvalidUtf8(); + + void testInvalidUnicode(); + + void testSRCBUFFERTOSMALL(); + + void testMime(); + + void testWindows(); + + void testInfo(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testSingleByte); + CPPUNIT_TEST(testComplex); + CPPUNIT_TEST(testComplexCut); + CPPUNIT_TEST(testInvalidUtf7); + CPPUNIT_TEST(testInvalidUtf8); + CPPUNIT_TEST(testInvalidUnicode); + CPPUNIT_TEST(testSRCBUFFERTOSMALL); + CPPUNIT_TEST(testMime); + CPPUNIT_TEST(testWindows); + CPPUNIT_TEST(testInfo); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::testSingleByte() { + static SingleByteCharSet const data[] + = { { RTL_TEXTENCODING_MS_1250, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021, + 0xFFFF,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0xFFFF,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, + 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, + 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, + 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, + 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, + 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, + 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, + 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, + 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, + 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, + 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, + 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 } }, + { RTL_TEXTENCODING_MS_1251, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, + 0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, + 0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0xFFFF,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, + 0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, + 0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, + 0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, + 0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, + 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, + 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, + 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, + 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, + 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, + 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, + 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, + 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F } }, + { RTL_TEXTENCODING_MS_1252, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, + 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178, + 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, + 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, + 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, + 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, + 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, + 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, + 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, + 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, + 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF } }, + { RTL_TEXTENCODING_MS_1253, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, + 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x00A0,0x0385,0x0386,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0xFFFF,0x00AB,0x00AC,0x00AD,0x00AE,0x2015, + 0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x00B5,0x00B6,0x00B7, + 0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F, + 0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, + 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, + 0x03A0,0x03A1,0xFFFF,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, + 0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF, + 0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7, + 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF, + 0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7, + 0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0xFFFF } }, + { RTL_TEXTENCODING_MS_1254, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, + 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0xFFFF,0x0178, + 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, + 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, + 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, + 0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, + 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF, + 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, + 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, + 0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, + 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF } }, + { RTL_TEXTENCODING_APPLE_ROMAN, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0x7F, + 0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1, + 0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8, + 0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3, + 0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC, + 0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF, + 0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8, + 0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211, + 0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8, + 0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB, + 0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153, + 0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA, + 0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02, + 0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1, + 0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4, + 0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC, + 0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7 } }, + { RTL_TEXTENCODING_IBM_437, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7, + 0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5, + 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9, + 0x00ff,0x00d6,0x00dc,0x00a2,0x00a3,0x00a5,0x20a7,0x0192, + 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba, + 0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, + 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556, + 0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, + 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f, + 0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, + 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b, + 0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, + 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4, + 0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, + 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248, + 0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 } }, + + { RTL_TEXTENCODING_ASCII_US, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, // ! + 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF, // ! + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, // ! + 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178, // ! + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF } }, + { RTL_TEXTENCODING_ISO_8859_1, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, + 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, + 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, + 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, + 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, + 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, + 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, + 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, + 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, + 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF } }, + { RTL_TEXTENCODING_ISO_8859_2, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, + 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, + 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, + 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, + 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, + 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, + 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, + 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, + 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, + 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, + 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, + 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, + 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 } }, + { RTL_TEXTENCODING_ISO_8859_3, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, + 0x00A0,0x0126,0x02D8,0x00A3,0x00A4,0xFFFF,0x0124,0x00A7, + 0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,0xFFFF,0x017B, + 0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7, + 0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,0xFFFF,0x017C, + 0x00C0,0x00C1,0x00C2,0xFFFF,0x00C4,0x010A,0x0108,0x00C7, + 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, + 0xFFFF,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7, + 0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF, + 0x00E0,0x00E1,0x00E2,0xFFFF,0x00E4,0x010B,0x0109,0x00E7, + 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, + 0xFFFF,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7, + 0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9 } }, + + { RTL_TEXTENCODING_ISO_8859_6, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, + 0x00A0,0xFFFF,0xFFFF,0xFFFF,0x00A4,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x060C,0x00AD,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0x061B,0xFFFF,0xFFFF,0xFFFF,0x061F, + 0xFFFF,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, + 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F, + 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637, + 0x0638,0x0639,0x063A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647, + 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F, + 0x0650,0x0651,0x0652,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } }, + + { RTL_TEXTENCODING_ISO_8859_8, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, + 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2017, + 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, + 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, + 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, + 0x05E8,0x05E9,0x05EA,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } }, + + { RTL_TEXTENCODING_TIS_620, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, + 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, + 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, + 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, + 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07, // ! + 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F, + 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17, + 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F, + 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27, + 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F, + 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37, + 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F, + 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47, + 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F, + 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57, + 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } }, + { RTL_TEXTENCODING_MS_874, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2026,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07, + 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F, + 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17, + 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F, + 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27, + 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F, + 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37, + 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F, + 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47, + 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F, + 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57, + 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } }, + { RTL_TEXTENCODING_MS_1255, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, + 0x02C6,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0x02DC,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x00A0,0x00A1,0x00A2,0x00A3,0x20AA,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, + 0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7, + 0x05B8,0x05B9,0xFFFF,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF, + 0x05C0,0x05C1,0x05C2,0x05C3,0x05F0,0x05F1,0x05F2,0x05F3, + 0x05F4,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, + 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, + 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, + 0x05E8,0x05E9,0x05EA,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } }, + { RTL_TEXTENCODING_MS_1256, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, + 0x02C6,0x2030,0x0679,0x2039,0x0152,0x0686,0x0698,0x0688, + 0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0x06A9,0x2122,0x0691,0x203A,0x0153,0x200C,0x200D,0x06BA, + 0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x06BE,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F, + 0x06C1,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, + 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F, + 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7, + 0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643, + 0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7, + 0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF, + 0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7, + 0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x06D2 } }, + { RTL_TEXTENCODING_MS_1257, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021, + 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0x00A8,0x02C7,0x00B8, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0x00AF,0x02DB,0xFFFF, + 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0xFFFF,0x00A6,0x00A7, + 0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, + 0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, + 0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, + 0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, + 0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, + 0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, + 0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, + 0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, + 0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 } }, + { RTL_TEXTENCODING_MS_1258, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, + 0x02C6,0x2030,0xFFFF,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0x02DC,0x2122,0xFFFF,0x203A,0x0153,0xFFFF,0xFFFF,0x0178, + 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, + 0x00C0,0x00C1,0x00C2,0x0102,0x00C4,0x00C5,0x00C6,0x00C7, + 0x00C8,0x00C9,0x00CA,0x00CB,0x0300,0x00CD,0x00CE,0x00CF, + 0x0110,0x00D1,0x0309,0x00D3,0x00D4,0x01A0,0x00D6,0x00D7, + 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x01AF,0x0303,0x00DF, + 0x00E0,0x00E1,0x00E2,0x0103,0x00E4,0x00E5,0x00E6,0x00E7, + 0x00E8,0x00E9,0x00EA,0x00EB,0x0301,0x00ED,0x00EE,0x00EF, + 0x0111,0x00F1,0x0323,0x00F3,0x00F4,0x01A1,0x00F6,0x00F7, + 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x01B0,0x20AB,0x00FF } }, + { RTL_TEXTENCODING_KOI8_U, // RFC 2319 + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, + 0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, + 0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248, + 0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, + 0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457, + 0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E, + 0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407, + 0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9, + 0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, + 0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, + 0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, + 0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, + 0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, + 0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, + 0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, + 0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A } }, + { RTL_TEXTENCODING_ADOBE_STANDARD, + { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x2019, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x2018,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x00A1,0x00A2,0x00A3,0x2215,0x00A5,0x0192,0x00A7, + 0x00A4,0x0027,0x201C,0x00AB,0x2039,0x203A,0xFB01,0xFB02, + 0xFFFF,0x2013,0x2020,0x2021,0x00B7,0xFFFF,0x00B6,0x2022, + 0x201A,0x201E,0x201D,0x00BB,0x2026,0x2030,0xFFFF,0x00BF, + 0xFFFF,0x0060,0x00B4,0x02C6,0x02DC,0x00AF,0x02D8,0x02D9, + 0x00A8,0xFFFF,0x02DA,0x00B8,0xFFFF,0x02DD,0x02DB,0x02C7, + 0x2014,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x00C6,0xFFFF,0x00AA,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x0141,0x00D8,0x0152,0x00BA,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x00E6,0xFFFF,0xFFFF,0xFFFF,0x0131,0xFFFF,0xFFFF, + 0x0142,0x00F8,0x0153,0x00DF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } }, + { RTL_TEXTENCODING_ADOBE_SYMBOL, + { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x0020,0x0021,0x2200,0x0023,0x2203,0x0025,0x0026,0x220B, + 0x0028,0x0029,0x2217,0x002B,0x002C,0x2212,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x2245,0x0391,0x0392,0x03A7,0x0394,0x0395,0x03A6,0x0393, + 0x0397,0x0399,0x03D1,0x039A,0x039B,0x039C,0x039D,0x039F, + 0x03A0,0x0398,0x03A1,0x03A3,0x03A4,0x03A5,0x03C2,0x03A9, + 0x039E,0x03A8,0x0396,0x005B,0x2234,0x005D,0x22A5,0x005F, + 0xF8E5,0x03B1,0x03B2,0x03C7,0x03B4,0x03B5,0x03C6,0x03B3, + 0x03B7,0x03B9,0x03D5,0x03BA,0x03BB,0x03BC,0x03BD,0x03BF, + 0x03C0,0x03B8,0x03C1,0x03C3,0x03C4,0x03C5,0x03D6,0x03C9, + 0x03BE,0x03C8,0x03B6,0x007B,0x007C,0x007D,0x223C,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0x20AC,0x03D2,0x2032,0x2264,0x2215,0x221E,0x0192,0x2663, + 0x2666,0x2665,0x2660,0x2194,0x2190,0x2191,0x2192,0x2193, + 0x00B0,0x00B1,0x2033,0x2265,0x00D7,0x221D,0x2202,0x2022, + 0x00F7,0x2260,0x2261,0x2248,0x2026,0x23AF,0x23D0,0x21B5, + 0x2135,0x2111,0x211C,0x2118,0x2297,0x2295,0x2205,0x2229, + 0x222A,0x2283,0x2287,0x2284,0x2282,0x2286,0x2208,0x2209, + 0x2220,0x2207,0xF6DA,0xF6D9,0xF6DB,0x220F,0x221A,0x22C5, + 0x00AC,0x2227,0x2228,0x21D4,0x21D0,0x21D1,0x21D2,0x21D3, + 0x25CA,0x2329,0xF8E8,0xF8E9,0xF8EA,0x2211,0x239B,0x239C, + 0x239D,0x23A1,0x23A2,0x23A3,0x23A7,0x23A8,0x23A9,0x23AA, + 0xFFFF,0x232A,0x222B,0x2320,0x23AE,0x2321,0x239E,0x239F, + 0x23A0,0x23A4,0x23A5,0x23A6,0x23AB,0x23AC,0x23AD,0xFFFF } }, + { RTL_TEXTENCODING_ADOBE_DINGBATS, + { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, +// 20 + 0x0020,0x2701,0x2702,0x2703,0x2704,0x260E,0x2706,0x2707, + 0x2708,0x2709,0x261B,0x261E,0x270C,0x270D,0x270E,0x270F, + 0x2710,0x2711,0x2712,0x2713,0x2714,0x2715,0x2716,0x2717, + 0x2718,0x2719,0x271A,0x271B,0x271C,0x271D,0x271E,0x271F, +// 40 + 0x2720,0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2727, + 0x2605,0x2729,0x272A,0x272B,0x272C,0x272D,0x272E,0x272F, + 0x2730,0x2731,0x2732,0x2733,0x2734,0x2735,0x2736,0x2737, + 0x2738,0x2739,0x273A,0x273B,0x273C,0x273D,0x273E,0x273F, +// 60 + 0x2740,0x2741,0x2742,0x2743,0x2744,0x2745,0x2746,0x2747, + 0x2748,0x2749,0x274A,0x274B,0x25CF,0x274D,0x25A0,0x274F, + 0x2750,0x2751,0x2752,0x25B2,0x25BC,0x25C6,0x2756,0x25D7, + 0x2758,0x2759,0x275A,0x275B,0x275C,0x275D,0x275E,0xFFFF, +// 80 + 0xF8D7,0xF8D8,0xF8D9,0xF8DA,0xF8DB,0xF8DC,0xF8DD,0xF8DE, + 0xF8DF,0xF8E0,0xF8E1,0xF8E2,0xF8E3,0xF8E4,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, +// A0 + 0xFFFF,0x2761,0x2762,0x2763,0x2764,0x2765,0x2766,0x2767, + 0x2663,0x2666,0x2665,0x2660,0x2460,0x2461,0x2462,0x2463, + 0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,0x2776,0x2777, + 0x2778,0x2779,0x277A,0x277B,0x277C,0x277D,0x277E,0x277F, +// C0 + 0x2780,0x2781,0x2782,0x2783,0x2784,0x2785,0x2786,0x2787, + 0x2788,0x2789,0x278A,0x278B,0x278C,0x278D,0x278E,0x278F, + 0x2790,0x2791,0x2792,0x2793,0x2794,0x2795,0x2796,0x2797, + 0x2798,0x2799,0x279A,0x279B,0x279C,0x279D,0x279E,0x279F, +// E0 + 0x27A0,0x27A1,0x27A2,0x27A3,0x27A4,0x27A5,0x27A6,0x27A7, + 0x27A8,0x27A9,0x27AA,0x27AB,0x27AC,0x27AD,0x27AE,0x27AF, + 0xFFFF,0x27B1,0x27B2,0x27B3,0x27B4,0x27B5,0x27B6,0x27B7, + 0x27B8,0x27B9,0x27BA,0x27BB,0x27BC,0x27BD,0x27BE,0xFFFF } }, + { RTL_TEXTENCODING_PT154, + { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0496,0x0492,0x04EE,0x0493,0x201E,0x2026,0x04B6,0x04AE, + 0x04B2,0x04AF,0x04A0,0x04E2,0x04A2,0x049A,0x04BA,0x04B8, + 0x0497,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, + 0x04B3,0x04B7,0x04A1,0x04E3,0x04A3,0x049B,0x04BB,0x04B9, + 0x00A0,0x040E,0x045E,0x0408,0x04E8,0x0498,0x04B0,0x00A7, + 0x0401,0x00A9,0x04D8,0x00AB,0x00AC,0x04EF,0x00AE,0x049C, + 0x00B0,0x04B1,0x0406,0x0456,0x0499,0x04E9,0x00B6,0x00B7, + 0x0451,0x2116,0x04D9,0x00BB,0x0458,0x04AA,0x04AB,0x049D, + 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, + 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, + 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, + 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, + 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, + 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, + 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, + 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F } } }; + for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + testSingleByteCharSet(data[i]); + } +} + +void Test::testComplex() { + static ComplexCharSetTest const data[] + = { { RTL_TEXTENCODING_ASCII_US, + RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E }, + 7, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_EUC_CN, + RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~\xA1\xB9\xF0\xC5"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E, + 0x300D,0x9E4B }, + 9, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_TW, + RTL_CONSTASCII_STRINGPARAM( + "\x01\"3De$~\xC5\xF0\x8E\xA4\xDC\xD9"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E, + 0x4ED9,0xD87E,0xDD68 }, + 10, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_GB_18030, + RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E }, + 7, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_GB_18030, + RTL_CONSTASCII_STRINGPARAM("\x81\x40\xFE\xFE"), + { 0x4E02,0xE4C5 }, + 2, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_GB_18030, + RTL_CONSTASCII_STRINGPARAM( + "\x81\x30\xB1\x33\x81\x30\xD3\x30\x81\x36\xA5\x31"), + { 0x028A,0x0452,0x200F }, + 3, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_GB_18030, + RTL_CONSTASCII_STRINGPARAM( + "\xFE\x50\xFE\x51\xFE\x52\xFE\x53\xFE\x54\xFE\x55\xFE\x56" + "\xFE\x57\xFE\x58\xFE\x59\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D" + "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x61\xFE\x62\xFE\x63\xFE\x64" + "\xFE\x65\xFE\x66\xFE\x67\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B" + "\xFE\x6C\xFE\x6D\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72" + "\xFE\x73\xFE\x74\xFE\x75\xFE\x76\xFE\x77\xFE\x78\xFE\x79" + "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x7E\xFE\x80\xFE\x81" + "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88" + "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F" + "\xFE\x90\xFE\x91\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96" + "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D" + "\xFE\x9E\xFE\x9F\xFE\xA0"), + { 0x2E81,0xE816,0xE817,0xE818,0x2E84,0x3473,0x3447,0x2E88, + 0x2E8B,0xE81E,0x359E,0x361A,0x360E,0x2E8C,0x2E97,0x396E, + 0x3918,0xE826,0x39CF,0x39DF,0x3A73,0x39D0,0xE82B,0xE82C, + 0x3B4E,0x3C6E,0x3CE0,0x2EA7,0xE831,0xE832,0x2EAA,0x4056, + 0x415F,0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0xE83B,0x43B1, + 0x43AC,0x2EBB,0x43DD,0x44D6,0x4661,0x464C,0xE843,0x4723, + 0x4729,0x477C,0x478D,0x2ECA,0x4947,0x497A,0x497D,0x4982, + 0x4983,0x4985,0x4986,0x499F,0x499B,0x49B7,0x49B6,0xE854, + 0xE855,0x4CA3,0x4C9F,0x4CA0,0x4CA1,0x4C77,0x4CA2,0x4D13, + 0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,0x4D19,0x4DAE,0xE864 }, + 80, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + { RTL_TEXTENCODING_ISO_2022_JP, + RTL_CONSTASCII_STRINGPARAM("\x01\"3De$\\~"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E }, + 8, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_JP, + RTL_CONSTASCII_STRINGPARAM("\x1B(B\x01\"3De$\\~"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E }, + 8, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_JP, + RTL_CONSTASCII_STRINGPARAM("\x1B(J\x01\"3De$\\~"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x00A5,0x00AF }, + 8, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_JP, + RTL_CONSTASCII_STRINGPARAM("\x1B$B\x26\x21\x27\x71\x1B(B"), + { 0x0391,0x044F }, + 2, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + { RTL_TEXTENCODING_ISO_2022_KR, + RTL_CONSTASCII_STRINGPARAM("\x1B$)C\x01\"3De$\\~"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E }, + 8, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_KR, + RTL_CONSTASCII_STRINGPARAM( + "\x1B$)C\x0E\x25\x21\x0F\x0D\x0Ax\x0E\x48\x7E\x0F"), + { 0x2170,0x000D,0x000A,0x0078,0xD79D }, + 5, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_ISO_2022_CN, + RTL_CONSTASCII_STRINGPARAM( + "\x01\"3De$\\~\x1B$)G\x0E\x45\x70\x1B$*H\x1BN\x22\x22" + "\x45\x70\x0F\x1B$)A\x0E\x26\x21\x0F"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E, + 0x4ED9,0x531F,0x4ED9,0x0391 }, + 12, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_CN, + RTL_CONSTASCII_STRINGPARAM( + "\x01\"3De$\\~\x1B$)A\x0E\x26\x21\x1B$*H\x1BN\x22\x22" + "\x26\x21\x0F\x0D\x0A\x1B$)A\x0E\x26\x21\x0F"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E, + 0x0391,0x531F,0x0391,0x000D,0x000A,0x0391 }, + 14, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif + // The following does not work as long as Big5-HKSCS maps to + // Unicode PUA instead of Plane 2. Use the next two tests + // instead: +// { RTL_TEXTENCODING_BIG5_HKSCS, +// RTL_CONSTASCII_STRINGPARAM( +// "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"), +// { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100, +// 0xFFED,0xD849,0xDD13,0x3000,0x9F98 }, +// 13, +// true, +// true, +// true, +// false, +// RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM( + "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100, + 0xFFED,0xE01E,0x3000,0x9F98 }, + 12, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM( + "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"), + { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100, + 0xFFED,0xD849,0xDD13,0x3000,0x9F98 }, + 13, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM( + "\xC6\xA1\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF" + "\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE"), + { 0x2460,0xF6E0,0xF6E4,0xF6E6,0xF6E8,0xF6EF,0xF6F0,0x3058, + 0x3059,0x30A4,0x30A5,0x041A }, + 12, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM("\x81\x40\x84\xFE"), + { 0xEEB8,0xF12B }, + 2, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM( + "\x81\x40\x8D\xFE\x8E\x40\xA0\xFE\xC6\xA1\xC8\xFE\xFA\x40" + "\xFE\xFE"), + { 0xEEB8,0xF6B0,0xE311,0xEEB7,0xF6B1,0xF848,0xE000,0xE310 }, + 8, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM("\xAD\xC5\x94\x55"), + { 0x5029,0x7250 }, + 2, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM("\xFA\x5F\xA0\xE4"), + { 0x5029,0x7250 }, + 2, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"), + { 0xEE1B,0xEE59,0xEE5A,0xEEB7 }, + 4, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5, + RTL_CONSTASCII_STRINGPARAM("\xA1\x45"), + { 0x2027 }, + 1, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5, + RTL_CONSTASCII_STRINGPARAM( + "\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"), + { 0x306B,0x306F,0x3071,0x3073,0x307A,0x307B }, + 6, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5, + RTL_CONSTASCII_STRINGPARAM( + "\xC7\xFD\xC7\xFE\xC8\x40\xC8\x7E\xC8\xA1\xC8\xFE"), + { 0xF7AA,0xF7AB,0xF7AC,0xF7EA,0xF7EB,0xF848 }, + 6, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5, + RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"), + { 0xEE1B,0xEE59,0xEE5A,0xEEB7 }, + 4, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif + { RTL_TEXTENCODING_MS_950, + RTL_CONSTASCII_STRINGPARAM( + "\xC6\xA1\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE\xC8\x40" + "\xC8\x7E\xC8\xA1\xC8\xFE"), + { 0xF6B1,0xF70E,0xF70F,0xF74D,0xF74E,0xF7AB,0xF7AC,0xF7EA, + 0xF7EB,0xF848 }, + 10, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_MS_950, + RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"), + { 0xEE1B,0xEE59,0xEE5A,0xEEB7 }, + 4, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + + // Test Unicode beyond BMP: + + // FIXME The second m_bForward test (requiring a context) does not + // work for UTF7: +// { RTL_TEXTENCODING_UTF7, +// RTL_CONSTASCII_STRINGPARAM("+2EndEw-"), +// { 0xD849,0xDD13 }, +// 2, +// true, +// true, +// true, +// false, +// RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\xF0\xA2\x94\x93"), + { 0xD849,0xDD13 }, + 2, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_GB_18030, + RTL_CONSTASCII_STRINGPARAM("\x95\x39\xC5\x37"), + { 0xD849,0xDD13 }, + 2, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_BIG5_HKSCS, + RTL_CONSTASCII_STRINGPARAM("\xFA\x5E"), + { 0xD849,0xDD13 }, + 2, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + + // Test GBK (aka CP936): + + { RTL_TEXTENCODING_GBK, + RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"), + { 0x9F76,0x9F99,0x9FA5 }, + 3, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif + { RTL_TEXTENCODING_MS_936, + RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"), + { 0x9F76,0x9F99,0x9FA5 }, + 3, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_GBK, + RTL_CONSTASCII_STRINGPARAM( + "\xFE\x50\xFE\x54\xFE\x55\xFE\x56" + "\xFE\x57\xFE\x58\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D" + "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x62\xFE\x63\xFE\x64" + "\xFE\x65\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B" + "\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72" + "\xFE\x73\xFE\x74\xFE\x75\xFE\x77\xFE\x78\xFE\x79" + "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x80\xFE\x81" + "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88" + "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F" + "\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96" + "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D" + "\xFE\x9E\xFE\x9F"), + { 0x2E81,0x2E84,0x3473,0x3447,0x2E88,0x2E8B,0x359E,0x361A, + 0x360E,0x2E8C,0x2E97,0x396E,0x3918,0x39CF,0x39DF,0x3A73, + 0x39D0,0x3B4E,0x3C6E,0x3CE0,0x2EA7,0x2EAA,0x4056,0x415F, + 0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0x43B1,0x43AC,0x2EBB, + 0x43DD,0x44D6,0x4661,0x464C,0x4723,0x4729,0x477C,0x478D, + 0x2ECA,0x4947,0x497A,0x497D,0x4982,0x4983,0x4985,0x4986, + 0x499F,0x499B,0x49B7,0x49B6,0x4CA3,0x4C9F,0x4CA0,0x4CA1, + 0x4C77,0x4CA2,0x4D13,0x4D14,0x4D15,0x4D16,0x4D17,0x4D18, + 0x4D19,0x4DAE }, + 66, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM("?"), + { 0xFF0D }, + 1, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK }, +#endif + // Test of "JIS X 0208 row 13" (taken from CP932; added to + // ISO-2022-JP and EUC-JP; 74 of the 83 characters introduce + // mappings to new Unicode characters): + { RTL_TEXTENCODING_MS_932, + RTL_CONSTASCII_STRINGPARAM( + "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46" + "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D" + "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54" + "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B" + "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63" + "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A" + "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71" + "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81" + "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88" + "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F" + "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96" + "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"), + { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471, + 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, + 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327, + 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A, + 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B, + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261, + 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235, + 0x2229,0x222A }, + 83, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + { RTL_TEXTENCODING_SHIFT_JIS, + RTL_CONSTASCII_STRINGPARAM("\x00\xFA\x6F\xFA\x71"), + {0x0000, 0x4F92, 0x4F9A}, + 3, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_SHIFT_JIS, + RTL_CONSTASCII_STRINGPARAM( + "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46" + "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D" + "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54" + "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B" + "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63" + "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A" + "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71" + "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81" + "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88" + "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F" + "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96" + "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"), + { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471, + 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, + 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327, + 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A, + 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B, + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261, + 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235, + 0x2229,0x222A }, + 83, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_JP, + RTL_CONSTASCII_STRINGPARAM( + "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26" + "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D" + "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34" + "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B" + "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43" + "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A" + "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51" + "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60" + "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67" + "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E" + "\x2D\x6F\x2D\x70\x2D\x71\x2D\x72\x2D\x73\x2D\x74\x2D\x75" + "\x2D\x76\x2D\x77\x2D\x78\x2D\x79\x2D\x7A\x2D\x7B\x2D\x7C" + "\x1B(B"), + { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471, + 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, + 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327, + 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A, + 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B, + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261, + 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235, + 0x2229,0x222A }, + 83, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_2022_JP, + RTL_CONSTASCII_STRINGPARAM( + "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26" + "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D" + "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34" + "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B" + "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43" + "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A" + "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51" + "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60" + "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67" + "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E" + "\x2D\x6F\x2D\x73\x2D\x74\x2D\x78\x2D\x79\x1B(B"), + { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471, + 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, + 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327, + 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A, + 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B, + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211, + 0x221F,0x22BF }, + 74, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM( + "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7" + "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE" + "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5" + "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC" + "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4" + "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB" + "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2" + "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1" + "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8" + "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF" + "\xAD\xF0\xAD\xF1\xAD\xF2\xAD\xF3\xAD\xF4\xAD\xF5\xAD\xF6" + "\xAD\xF7\xAD\xF8\xAD\xF9\xAD\xFA\xAD\xFB\xAD\xFC"), + { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471, + 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, + 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327, + 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A, + 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B, + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261, + 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235, + 0x2229,0x222A }, + 83, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM( + "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7" + "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE" + "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5" + "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC" + "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4" + "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB" + "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2" + "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1" + "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8" + "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF" + "\xAD\xF3\xAD\xF4\xAD\xF8\xAD\xF9"), + { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471, + 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, + 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327, + 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A, + 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B, + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211, + 0x221F,0x22BF }, + 74, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM("\xB9\xF5"), + { 0x9ED2 }, + 1, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif + // Test ISO-8859-x/MS-125x range 0x80--9F: + + { RTL_TEXTENCODING_ISO_8859_1, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_2, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_3, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_4, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_5, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_6, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_7, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_8, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_9, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_14, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISO_8859_15, + RTL_CONSTASCII_STRINGPARAM( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E" + "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D" + "\x9E\x9F"), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_MS_874, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1250, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1251, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1252, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1253, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1254, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1255, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1256, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1257, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_1258, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088, + 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091, + 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A, + 0x009B,0x009C,0x009D,0x009E,0x009F }, + 32, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_MS_949, + RTL_CONSTASCII_STRINGPARAM( + "\xB0\xA1\xB0\xA2\x81\x41\x81\x42\xB0\xA3\x81\x43\x81\x44" + "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7\x81\x45\x81\x46\x81\x47" + "\x81\x48\x81\x49\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC" + "\xB0\xAD\xB0\xAE\xB0\xAF\x81\x4A\xB0\xB0\xB0\xB1\xB0\xB2"), + { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08, + 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11, + 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A, + 0xAC1B }, + 28, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_MS_949, + RTL_CONSTASCII_STRINGPARAM( + "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE" + "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"), + { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D, + 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB }, + 12, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + { RTL_TEXTENCODING_EUC_KR, + RTL_CONSTASCII_STRINGPARAM( + "\xB0\xA1\xB0\xA2" "\xB0\xA3" + "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7" + "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC" + "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"), + { 0xAC00,0xAC01, 0xAC04, 0xAC07,0xAC08, + 0xAC09,0xAC0A, 0xAC10,0xAC11, + 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17, 0xAC19,0xAC1A, + 0xAC1B }, + 18, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_KR, + RTL_CONSTASCII_STRINGPARAM( + "\xB0\xA1\xB0\xA2" "\xB0\xA3" + "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7" + "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC" + "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"), + { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08, + 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11, + 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A, + 0xAC1B }, + 28, + true, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_EUC_KR, + RTL_CONSTASCII_STRINGPARAM( + "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE" + "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"), + { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D, + 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB }, + 12, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif + // Test UTF-8: + + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\x00"), + { 0x0000 }, + 1, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"), + { 0xFEFF }, + 1, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"), + { 0xFEFF,0xFEFF }, + 2, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"), + { 0 }, + 0, + false, + true, + true, + true, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"), + { 0xFEFF }, + 1, + false, + true, + true, + true, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\x01\x02\x7E\x7F"), + { 0x0001,0x0002,0x007E,0x007F }, + 4, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_UTF8, + RTL_CONSTASCII_STRINGPARAM("\xEF\xBF\xBF"), + {0xFFFF}, + 1, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + + // Test Java UTF-8: + + { RTL_TEXTENCODING_JAVA_UTF8, + RTL_CONSTASCII_STRINGPARAM( + "\xEF\xBB\xBF\xC0\x80\x01\x20\x41\x7F\xED\xA0\x80" + "\xED\xB0\x80"), + { 0xFEFF,0x0000,0x0001,0x0020,0x0041,0x007F,0xD800,0xDC00 }, + 8, + false, + true, + true, + true, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + // Bug #112949#: + { RTL_TEXTENCODING_SHIFT_JIS, + RTL_CONSTASCII_STRINGPARAM("\x81\x63"), + { 0x2026 }, + 1, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_SHIFT_JIS, + RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"), + { 0x00A0, 0x00A9, 0x2122, 0x2026 }, + 4, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_SHIFT_JIS, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x00A0, 0x00A9, 0x2122 }, + 3, + false, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, +#endif + { RTL_TEXTENCODING_MS_932, + RTL_CONSTASCII_STRINGPARAM("\x81\x63"), + { 0x2026 }, + 1, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_MS_932, + RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"), + { 0x00A0, 0x00A9, 0x2122, 0x2026 }, + 4, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_MS_932, + RTL_CONSTASCII_STRINGPARAM(""), + { 0x00A0, 0x00A9, 0x2122 }, + 3, + false, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE }, + { RTL_TEXTENCODING_APPLE_JAPANESE, + RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\x81\x63"), + { 0x00A0, 0x00A9, 0x2122, 0x2026 }, + 4, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_APPLE_JAPANESE, + RTL_CONSTASCII_STRINGPARAM("\xFF"), + { 0x2026 }, + 1, + false, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + + { RTL_TEXTENCODING_ADOBE_STANDARD, + RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"), + { 0x0020, 0x002D, 0x2215, 0x00B7, 0x00AF }, + 5, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ADOBE_STANDARD, + RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"), + { 0x00A0, 0x00AD, 0x2044, 0x2219, 0x02C9 }, + 5, + false, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + + { RTL_TEXTENCODING_ADOBE_SYMBOL, + RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"), + { 0x0020, 0x0394, 0x03A9, 0x03BC, 0x2215 }, + 5, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ADOBE_SYMBOL, + RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"), + { 0x00A0, 0x2206, 0x2126, 0x00B5, 0x2044 }, + 5, + false, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + // Bug #i62310#: + { RTL_TEXTENCODING_SHIFT_JIS, + RTL_CONSTASCII_STRINGPARAM( + "\xF0\x40\xF0\x7E\xF0\x80\xF0\xFC\xF1\x40\xF9\xFC"), + { 0xE000, 0xE03E, 0xE03F, 0xE0BB, 0xE0BC, 0xE757 }, + 6, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif + // Bug #i73103#: + { RTL_TEXTENCODING_MS_1258, + RTL_CONSTASCII_STRINGPARAM( + "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"), + { 0x00C0, 0x0041, 0x0303, 0x0103, 0x0309, 0x00D4, 0x0301, 0x01B0, + 0x0323 }, + 9, + true, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_MS_1258, + RTL_CONSTASCII_STRINGPARAM( + "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"), + { 0x00C0, 0x00C3, 0x1EB3, 0x1ED0, 0x1EF1 }, + 5, + false, + false, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva + { RTL_TEXTENCODING_ISCII_DEVANAGARI, + RTL_CONSTASCII_STRINGPARAM( + "\xD7\xE6\x20\xD4\xCF\xE8\xD6\x20" + "\xC8\xD8\xD1\xE1\x20\xB3\xCA\xDC" + "\xCF\xC4\xDA\xD7\x20\xD8\xDB\xA2" + "\xC4\xDE\x20\xB1\xCF\x20\xCC\xDD" + "\xD7\xD1\xCC\xDA\xC6\x20\xC4\xE5" + "\xC6\xE5\xA2\x20\xB3\xE1\x20\xB3" + "\xBD\xE8\xBD\xCF\xC8\xC6\x20\xB3" + "\xE5\x20\xC9\xBD\xB3\xDA\xCF\x20" + "\xB8\xDD\xB3\xE1\x20\xC3\xE1\x20" + "\xEA"), + { 0x0938, 0x094C, 0x0020, 0x0935, 0x0930, 0x094D, 0x0937, 0x0020, + 0x092A, 0x0939, 0x0932, 0x0947, 0x0020, 0x0915, 0x092C, 0x0940, + 0x0930, 0x0926, 0x093E, 0x0938, 0x0020, 0x0939, 0x093F, 0x0902, + 0x0926, 0x0942, 0x0020, 0x0914, 0x0930, 0x0020, 0x092E, 0x0941, + 0x0938, 0x0932, 0x092E, 0x093E, 0x0928, 0x0020, 0x0926, 0x094B, + 0x0928, 0x094B, 0x0902, 0x0020, 0x0915, 0x0947, 0x0020, 0x0915, + 0x091F, 0x094D, 0x091F, 0x0930, 0x092A, 0x0928, 0x0020, 0x0915, + 0x094B, 0x0020, 0x092B, 0x091F, 0x0915, 0x093E, 0x0930, 0x0020, + 0x091A, 0x0941, 0x0915, 0x0947, 0x0020, 0x0925, 0x0947, 0x0020, + 0x0964 }, + 73, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_ISCII_DEVANAGARI, + RTL_CONSTASCII_STRINGPARAM("\xE8\xE8\xE8\xE9\xA1\xE9\xEA\xE9"), + { 0x094D, 0x200C, 0x094D, 0x200D, 0x0950, 0x93D }, + 6, + false, + true, + true, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR } +#endif + }; + for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + doComplexCharSetTest(data[i]); + } +} + +void Test::testComplexCut() { +#if WITH_LOCALE_ALL || WITH_LOCALE_ja || WITH_LOCALE_zh + static ComplexCharSetTest const data[] + = { +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM("\xA1"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM("\x8E"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM("\x8F"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_JP, + RTL_CONSTASCII_STRINGPARAM("\x8F\xA1"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_EUC_CN, + RTL_CONSTASCII_STRINGPARAM("\xA1"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, +#endif +/* , + { RTL_TEXTENCODING_EUC_TW, + RTL_CONSTASCII_STRINGPARAM("\xA1"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_TW, + RTL_CONSTASCII_STRINGPARAM("\x8E"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_TW, + RTL_CONSTASCII_STRINGPARAM("\x8E\xA1"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }, + { RTL_TEXTENCODING_EUC_TW, + RTL_CONSTASCII_STRINGPARAM("\x8E\xA1\xA1"), + { 0 }, + 0, + true, + true, + false, + false, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR } */ }; + for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + doComplexCharSetCutTest(data[i]); + } +#endif +} + +void Test::testInvalidUtf7() { + auto const converter = rtl_createTextToUnicodeConverter(RTL_TEXTENCODING_UTF7); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80"), buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL(OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted); + rtl_destroyTextToUnicodeConverter(converter); +} + +void Test::testInvalidUtf8() { + // UTF-8, invalid bytes: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80\xBF\xFE\xFF"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(4), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD\uFFFD\uFFFD\uFFFD"), + OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, non-shortest two-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0\x80"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(2), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, cut two-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0"), buf, + TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(0), size); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info); + CPPUNIT_ASSERT(converted <= 1); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, non-shortest three-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x9F\xBF"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, cut three-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80"), buf, + TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(0), size); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info); + CPPUNIT_ASSERT(converted <= 2); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, cut three-byte sequence followed by more: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80."), buf, + TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(2), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD."), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, surrogates: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, + RTL_CONSTASCII_STRINGPARAM("\xED\xA0\x80\xED\xB0\x80"), buf, + TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(2), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, non-shortest four-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF0\x8F\xBF\xBF"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, too-large four-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF4\x90\x80\x80"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, five-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, + RTL_CONSTASCII_STRINGPARAM("\xFB\xBF\xBF\xBF\xBF"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(5), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // UTF-8, six-byte sequence: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, + RTL_CONSTASCII_STRINGPARAM("\xFD\xBF\xBF\xBF\xBF\xBF"), + buf, TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // Java UTF-8, U+0000: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_JAVA_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\0"), buf, + TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted); + rtl_destroyTextToUnicodeConverter(converter); + } + // Java UTF-8, U+10000: + { + auto const converter = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_JAVA_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + constexpr OStringLiteral input(u8"\U00010000"); + sal_Unicode buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertTextToUnicode( + converter, nullptr, input.getStr(), input.getLength(), buf, + TEST_STRING_SIZE, + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + | RTL_TEXTTOUNICODE_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), size); + CPPUNIT_ASSERT_EQUAL( + OUString(u"\uFFFD"), OUString(buf, sal_Int32(size))); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted); + rtl_destroyTextToUnicodeConverter(converter); + } +} + +void Test::testInvalidUnicode() { + auto const converter = rtl_createUnicodeToTextConverter(RTL_TEXTENCODING_UTF8); + CPPUNIT_ASSERT(converter != nullptr); + sal_Unicode const input[] = {0xDC00}; // lone low surrogate + char buf[TEST_STRING_SIZE]; + sal_uInt32 info; + sal_Size converted; + auto const size = rtl_convertUnicodeToText( + converter, nullptr, input, SAL_N_ELEMENTS(input), buf, TEST_STRING_SIZE, + (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR + | RTL_UNICODETOTEXT_FLAGS_FLUSH), + &info, &converted); + CPPUNIT_ASSERT_EQUAL(sal_Size(0), size); + CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_INVALID, info); + CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted); + rtl_destroyTextToUnicodeConverter(converter); +} + +void Test::testSRCBUFFERTOSMALL() { + rtl_TextToUnicodeConverter cv = rtl_createTextToUnicodeConverter( + RTL_TEXTENCODING_EUC_JP); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeConverter(EUC-JP) failed", + cv != nullptr); + rtl_TextToUnicodeContext cx = rtl_createTextToUnicodeContext(cv); + CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", cx != nullptr); + char src = '\xA1'; + sal_Unicode dst[10]; + sal_uInt32 info; + sal_Size cvt; + CPPUNIT_ASSERT_EQUAL( + sal_Size(0), + rtl_convertTextToUnicode( + cv, cx, &src, 1, dst, SAL_N_ELEMENTS(dst), + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR | + RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &info, &cvt)); + CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL, info); + CPPUNIT_ASSERT(cvt <= 1); + rtl_destroyTextToUnicodeContext(cv, cx); + rtl_destroyTextToUnicodeConverter(cv); +} + +void Test::testMime() { + struct Data { + char const * mime; + rtl_TextEncoding encoding; + bool reverse; + }; + static Data const data[] = { + { "GBK", RTL_TEXTENCODING_GBK, false }, + { "CP936", RTL_TEXTENCODING_GBK, false }, + { "MS936", RTL_TEXTENCODING_GBK, false }, + { "windows-936", RTL_TEXTENCODING_GBK, false }, + + { "GB18030", RTL_TEXTENCODING_GB_18030, false }, + + { "TIS-620", RTL_TEXTENCODING_TIS_620, true }, + { "ISO-8859-11", RTL_TEXTENCODING_TIS_620, false }, // not registered + + { "CP874", RTL_TEXTENCODING_MS_874, false }, // not registered + { "MS874", RTL_TEXTENCODING_MS_874, false }, // not registered + { "windows-874", RTL_TEXTENCODING_MS_874, true }, // not registered + + { "ISO_8859-8:1988", RTL_TEXTENCODING_ISO_8859_8, false }, + { "iso-ir-138", RTL_TEXTENCODING_ISO_8859_8, false }, + { "ISO_8859-8", RTL_TEXTENCODING_ISO_8859_8, false }, + { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8, true }, + { "hebrew", RTL_TEXTENCODING_ISO_8859_8, false }, + { "csISOLatinHebrew", RTL_TEXTENCODING_ISO_8859_8, false }, + + { "windows-1255", RTL_TEXTENCODING_MS_1255, true }, + + { "IBM862", RTL_TEXTENCODING_IBM_862, true }, + { "cp862", RTL_TEXTENCODING_IBM_862, false }, + { "862", RTL_TEXTENCODING_IBM_862, false }, + { "csPC862LatinHebrew", RTL_TEXTENCODING_IBM_862, false }, + + { "ISO_8859-6:1987", RTL_TEXTENCODING_ISO_8859_6, false }, + { "iso-ir-127", RTL_TEXTENCODING_ISO_8859_6, false }, + { "ISO_8859-6", RTL_TEXTENCODING_ISO_8859_6, false }, + { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6, true }, + { "ECMA-114", RTL_TEXTENCODING_ISO_8859_6, false }, + { "ASMO-708", RTL_TEXTENCODING_ISO_8859_6, false }, + { "arabic", RTL_TEXTENCODING_ISO_8859_6, false }, + { "csISOLatinArabic", RTL_TEXTENCODING_ISO_8859_6, false }, + + { "windows-1256", RTL_TEXTENCODING_MS_1256, true }, + + { "IBM864", RTL_TEXTENCODING_IBM_864, true }, + { "cp864", RTL_TEXTENCODING_IBM_864, false }, + { "csIBM864", RTL_TEXTENCODING_IBM_864, false }, + + { "KOI8-R", RTL_TEXTENCODING_KOI8_R, false }, + { "csKOI8R", RTL_TEXTENCODING_KOI8_R, false }, + { "koi8-r", RTL_TEXTENCODING_KOI8_R, true }, + + { "KOI8-U", RTL_TEXTENCODING_KOI8_U, true }, + + { "IBM860", RTL_TEXTENCODING_IBM_860, true }, + { "cp860", RTL_TEXTENCODING_IBM_860, false }, + { "860", RTL_TEXTENCODING_IBM_860, false }, + { "csIBM860", RTL_TEXTENCODING_IBM_860, false }, + + { "IBM861", RTL_TEXTENCODING_IBM_861, true }, + { "cp861", RTL_TEXTENCODING_IBM_861, false }, + { "861", RTL_TEXTENCODING_IBM_861, false }, + { "cp-is", RTL_TEXTENCODING_IBM_861, false }, + { "csIBM861", RTL_TEXTENCODING_IBM_861, false }, + + { "IBM863", RTL_TEXTENCODING_IBM_863, true }, + { "cp863", RTL_TEXTENCODING_IBM_863, false }, + { "863", RTL_TEXTENCODING_IBM_863, false }, + { "csIBM863", RTL_TEXTENCODING_IBM_863, false }, + + { "IBM865", RTL_TEXTENCODING_IBM_865, true }, + { "cp865", RTL_TEXTENCODING_IBM_865, false }, + { "865", RTL_TEXTENCODING_IBM_865, false }, + { "csIBM865", RTL_TEXTENCODING_IBM_865, false }, + + { "Latin-9", RTL_TEXTENCODING_ISO_8859_15, false }, + + { "KS_C_5601-1987", RTL_TEXTENCODING_MS_949, false }, + { "iso-ir-149", RTL_TEXTENCODING_MS_949, false }, + { "KS_C_5601-1989", RTL_TEXTENCODING_MS_949, false }, + { "KSC_5601", RTL_TEXTENCODING_MS_949, false }, + { "korean", RTL_TEXTENCODING_MS_949, false }, + { "csKSC56011987", RTL_TEXTENCODING_MS_949, false }, + { nullptr, RTL_TEXTENCODING_MS_949, true }, + + { "Adobe-Standard-Encoding", RTL_TEXTENCODING_ADOBE_STANDARD, false }, + { "csAdobeStandardEncoding", RTL_TEXTENCODING_ADOBE_STANDARD, false }, + { "Adobe-Symbol-Encoding", RTL_TEXTENCODING_ADOBE_SYMBOL, false }, + { "csHPPSMath", RTL_TEXTENCODING_ADOBE_SYMBOL, false }, + + { "PTCP154", RTL_TEXTENCODING_PT154, true }, + { "csPTCP154", RTL_TEXTENCODING_PT154, false }, + { "PT154", RTL_TEXTENCODING_PT154, false }, + { "CP154", RTL_TEXTENCODING_PT154, false }, + { "Cyrillic-Asian", RTL_TEXTENCODING_PT154, false } + }; + for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + if (data[i].mime == nullptr) { + OSL_ASSERT(data[i].reverse); + CPPUNIT_ASSERT_EQUAL( + static_cast< char const * >(nullptr), + rtl_getMimeCharsetFromTextEncoding(data[i].encoding)); + } else { + CPPUNIT_ASSERT_EQUAL( + data[i].encoding, + rtl_getTextEncodingFromMimeCharset(data[i].mime)); + if (data[i].reverse) { + CPPUNIT_ASSERT_EQUAL( + OString(data[i].mime), + OString( + rtl_getMimeCharsetFromTextEncoding(data[i].encoding))); + } + } + } +} + +void Test::testWindows() { + struct Data { + sal_uInt32 codePage; + rtl_TextEncoding encoding; + bool reverse; + }; + static Data const data[] = { + { 42, RTL_TEXTENCODING_SYMBOL, true }, + { 437, RTL_TEXTENCODING_IBM_437, true }, + { 708, RTL_TEXTENCODING_ISO_8859_6, false }, + { 737, RTL_TEXTENCODING_IBM_737, true }, + { 775, RTL_TEXTENCODING_IBM_775, true }, + { 850, RTL_TEXTENCODING_IBM_850, true }, + { 852, RTL_TEXTENCODING_IBM_852, true }, + { 855, RTL_TEXTENCODING_IBM_855, true }, + { 857, RTL_TEXTENCODING_IBM_857, true }, + { 860, RTL_TEXTENCODING_IBM_860, true }, + { 861, RTL_TEXTENCODING_IBM_861, true }, + { 862, RTL_TEXTENCODING_IBM_862, true }, + { 863, RTL_TEXTENCODING_IBM_863, true }, + { 864, RTL_TEXTENCODING_IBM_864, true }, + { 865, RTL_TEXTENCODING_IBM_865, true }, + { 866, RTL_TEXTENCODING_IBM_866, true }, + { 869, RTL_TEXTENCODING_IBM_869, true }, + { 874, RTL_TEXTENCODING_MS_874, true }, + { 932, RTL_TEXTENCODING_MS_932, true }, + { 936, RTL_TEXTENCODING_MS_936, true }, + { 949, RTL_TEXTENCODING_MS_949, true }, + { 950, RTL_TEXTENCODING_MS_950, true }, + { 1250, RTL_TEXTENCODING_MS_1250, true }, + { 1251, RTL_TEXTENCODING_MS_1251, true }, + { 1252, RTL_TEXTENCODING_MS_1252, true }, + { 1253, RTL_TEXTENCODING_MS_1253, true }, + { 1254, RTL_TEXTENCODING_MS_1254, true }, + { 1255, RTL_TEXTENCODING_MS_1255, true }, + { 1256, RTL_TEXTENCODING_MS_1256, true }, + { 1257, RTL_TEXTENCODING_MS_1257, true }, + { 1258, RTL_TEXTENCODING_MS_1258, true }, + { 1361, RTL_TEXTENCODING_MS_1361, true }, + { 10000, RTL_TEXTENCODING_APPLE_ROMAN, true }, + { 10001, RTL_TEXTENCODING_APPLE_JAPANESE, true }, + { 10002, RTL_TEXTENCODING_APPLE_CHINTRAD, true }, + { 10003, RTL_TEXTENCODING_APPLE_KOREAN, true }, + { 10004, RTL_TEXTENCODING_APPLE_ARABIC, true }, + { 10005, RTL_TEXTENCODING_APPLE_HEBREW, true }, + { 10006, RTL_TEXTENCODING_APPLE_GREEK, true }, + { 10007, RTL_TEXTENCODING_APPLE_CYRILLIC, true }, + { 10008, RTL_TEXTENCODING_APPLE_CHINSIMP, true }, + { 10010, RTL_TEXTENCODING_APPLE_ROMANIAN, true }, + { 10017, RTL_TEXTENCODING_APPLE_UKRAINIAN, true }, + { 10029, RTL_TEXTENCODING_APPLE_CENTEURO, true }, + { 10079, RTL_TEXTENCODING_APPLE_ICELAND, true }, + { 10081, RTL_TEXTENCODING_APPLE_TURKISH, true }, + { 10082, RTL_TEXTENCODING_APPLE_CROATIAN, true }, + { 20127, RTL_TEXTENCODING_ASCII_US, true }, + { 20866, RTL_TEXTENCODING_KOI8_R, true }, + { 21866, RTL_TEXTENCODING_KOI8_U, true }, + { 28591, RTL_TEXTENCODING_ISO_8859_1, true }, + { 28592, RTL_TEXTENCODING_ISO_8859_2, true }, + { 28593, RTL_TEXTENCODING_ISO_8859_3, true }, + { 28594, RTL_TEXTENCODING_ISO_8859_4, true }, + { 28595, RTL_TEXTENCODING_ISO_8859_5, true }, + { 28596, RTL_TEXTENCODING_ISO_8859_6, true }, + { 28597, RTL_TEXTENCODING_ISO_8859_7, true }, + { 28598, RTL_TEXTENCODING_ISO_8859_8, true }, + { 28599, RTL_TEXTENCODING_ISO_8859_9, true }, + { 28605, RTL_TEXTENCODING_ISO_8859_15, true }, + { 50220, RTL_TEXTENCODING_ISO_2022_JP, true }, + { 50225, RTL_TEXTENCODING_ISO_2022_KR, true }, + { 51932, RTL_TEXTENCODING_EUC_JP, true }, + { 51936, RTL_TEXTENCODING_EUC_CN, true }, + { 51949, RTL_TEXTENCODING_EUC_KR, true }, + { 65000, RTL_TEXTENCODING_UTF7, true }, + { 65001, RTL_TEXTENCODING_UTF8, true }, + { 1200, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE + { 1201, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE + { 0, RTL_TEXTENCODING_DONTKNOW, true }, + { 0, RTL_TEXTENCODING_UCS4, true }, + { 0, RTL_TEXTENCODING_UCS2, true }, + { 57002, RTL_TEXTENCODING_ISCII_DEVANAGARI, true } + }; + for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + OSL_ASSERT(data[i].codePage != 0 || data[i].reverse); + if (data[i].codePage != 0) { + CPPUNIT_ASSERT_EQUAL( + data[i].encoding, + rtl_getTextEncodingFromWindowsCodePage(data[i].codePage)); + } + if (data[i].reverse) { + CPPUNIT_ASSERT_EQUAL( + data[i].codePage, + rtl_getWindowsCodePageFromTextEncoding(data[i].encoding)); + } + } +} + +void Test::testInfo() { + struct Data { + rtl_TextEncoding encoding; + sal_uInt32 flag; + bool value; + }; + static Data const data[] = { +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + { RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_CONTEXT, true }, + { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_INFO_ASCII, false }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + { RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_CONTEXT, true }, + { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_ASCII, false }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_UNICODE, true }, + { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_CONTEXT, true }, + { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_ASCII, false }, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva + { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_MIME, false }, +#endif + { RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_SYMBOL, false }, + { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_ASCII, false }, + { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_MIME, true }, + { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_SYMBOL, true }, + { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_ASCII, true }, + { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_MIME, true } + }; + for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) { + rtl_TextEncodingInfo info; + info.StructSize = sizeof info; + CPPUNIT_ASSERT(rtl_getTextEncodingInfo(data[i].encoding, &info)); + CPPUNIT_ASSERT_EQUAL(data[i].value, ((info.Flags & data[i].flag) != 0)); + } +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/uri/rtl_Uri.cxx b/sal/qa/rtl/uri/rtl_Uri.cxx new file mode 100644 index 000000000..1084926c6 --- /dev/null +++ b/sal/qa/rtl/uri/rtl_Uri.cxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace Stringtest +{ + + class Convert : public CppUnit::TestFixture + { + public: + OString convertToOString(OUString const& _suStr) + { + return OUStringToOString(_suStr, osl_getThreadTextEncoding()/*RTL_TEXTENCODING_ASCII_US*/); + } + + void showContent(OUString const& _suStr) + { + OString sStr = convertToOString(_suStr); + printf("%s\n", sStr.getStr()); + } + + void test_FromUTF8_001() + { + // string --> ustring + OUString suStrUTF8 = OStringToOUString("h%C3%A4llo", RTL_TEXTENCODING_ASCII_US); + + // UTF8 --> real ustring + OUString suStr_UriDecodeToIuri = rtl::Uri::decode(suStrUTF8, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8); + showContent(suStr_UriDecodeToIuri); + + // string --> ustring + OString sStr("h\xE4llo", strlen("h\xE4llo")); + OUString suString = OStringToOUString(sStr, RTL_TEXTENCODING_ISO_8859_15); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Strings must be equal", suString, suStr_UriDecodeToIuri); + + // ustring --> ustring (UTF8) + OUString suStr2 = rtl::Uri::encode(suStr_UriDecodeToIuri, rtl_UriCharClassUnoParamValue, rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8); + showContent(suStr2); + + CPPUNIT_ASSERT_EQUAL_MESSAGE("Strings must be equal", suStr2, suStrUTF8); + // suStr should be equal to suStr2 + } + + CPPUNIT_TEST_SUITE( Convert ); + CPPUNIT_TEST( test_FromUTF8_001 ); + CPPUNIT_TEST_SUITE_END( ); + }; + +} + +CPPUNIT_TEST_SUITE_REGISTRATION( Stringtest::Convert ); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/uri/rtl_testuri.cxx b/sal/qa/rtl/uri/rtl_testuri.cxx new file mode 100644 index 000000000..fc45ba238 --- /dev/null +++ b/sal/qa/rtl/uri/rtl_testuri.cxx @@ -0,0 +1,514 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace { + +struct Test: public CppUnit::TestFixture { + void test_Uri(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test_Uri); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::test_Uri() { + rtl_UriCharClass const eFirstCharClass = rtl_UriCharClassNone; + rtl_UriCharClass const eLastCharClass = rtl_UriCharClassUnoParamValue; + + OUString aText1; + OUString aText2; + + // Check that all characters map back to themselves when encoded/decoded: + + aText1 = OUString( + RTL_CONSTASCII_USTRINGPARAM( + "\x00\x01\x02\x03\x04\x05\x06\x07" + "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" + "\x10\x11\x12\x13\x14\x15\x16\x17" + "\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" + "\x20\x21\x22\x23\x24\x25\x26\x27" + "\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F" + "\x30\x31\x32\x33\x34\x35\x36\x37" + "\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F" + "\x40\x41\x42\x43\x44\x45\x46\x47" + "\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F" + "\x50\x51\x52\x53\x54\x55\x56\x57" + "\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F" + "\x60\x61\x62\x63\x64\x65\x66\x67" + "\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F" + "\x70\x71\x72\x73\x74\x75\x76\x77" + "\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F")); + aText2 = aText1; + for (rtl_UriCharClass eCharClass = eFirstCharClass; + eCharClass <= eLastCharClass; + eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1)) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 1", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 2", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ASCII_US)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 3", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 4", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 5", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 6", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)); + } + + aText1 = OUString( + ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" + "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F" + "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F" + "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F" + "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F" + "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F" + "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F" + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" + "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" + "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" + "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF" + "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF" + "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF" + "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF" + "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"), + 256, RTL_TEXTENCODING_ISO_8859_1); + aText2 = aText1; + for (rtl_UriCharClass eCharClass = eFirstCharClass; + eCharClass <= eLastCharClass; + eCharClass = static_cast< rtl_UriCharClass >(eCharClass + 1)) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 7", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 8", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_ISO_8859_1), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_1)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 9", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_UTF8), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 10", + aText2, + rtl::Uri::decode( + rtl::Uri::encode( + aText1, eCharClass, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_UTF8), + rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)); + } + + // Check surrogate handling: + + aText1 = u"\xD800" // %ED%A0%80 + u"\U000103FF" // 0xD800,0xDFFF -> %F0%90%8F%BF + u"\xDFFF" // %ED%BF%BF + u"A"; // A + aText2 = "%ED%A0%80" "%F0%90%8F%BF" "%ED%BF%BF" "A"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 11", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_UTF8)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 12", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeKeepEscapes, + RTL_TEXTENCODING_UTF8)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 13", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_UTF8)); + + aText1 = "%ed%a0%80" "%f0%90%8f%bf" "%ed%bf%bf" "A"; + aText2 = u"%ED%A0%80" u"\U000103FF" u"%ED%BF%BF" u"A"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 14", + aText2, + rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 15", + aText2, + rtl::Uri::decode( + aText1, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8)); + + // Check UTF-8 handling: + + aText1 = "%E0%83%BF"; + // \U+00FF encoded with three instead of two bytes + aText2 = aText1; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 16", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_UTF8)); + + aText1 = "%EF%BF%BF"; + // \U+FFFF is no legal character + aText2 = aText1; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 17", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_UTF8)); + + // Check IURI handling: + + aText1 = "%30%C3%BF"; + aText2 = u"%30\u00FF"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 18", + aText2, + rtl::Uri::decode(aText1, rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8)); + + // Check modified rtl_UriCharClassUnoParamValue (removed '[' and ']'): + + aText1 = "[]%5B%5D"; + aText2 = "%5B%5D%5B%5D"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 19", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUnoParamValue, rtl_UriEncodeCheckEscapes, + RTL_TEXTENCODING_ASCII_US)); + + // Check Uri::convertRelToAbs: + + struct RelToAbsTest + { + char const * pBase; + char const * pRel; + char const * pAbs; + }; + static RelToAbsTest const aRelToAbsTest[] + = { // The following tests are taken from RFC 3986: + { "http://a/b/c/d;p?q", "g:h", "g:h" }, + { "http://a/b/c/d;p?q", "g", "http://a/b/c/g" }, + { "http://a/b/c/d;p?q", "./g", "http://a/b/c/g" }, + { "http://a/b/c/d;p?q", "g/", "http://a/b/c/g/" }, + { "http://a/b/c/d;p?q", "/g", "http://a/g" }, + { "http://a/b/c/d;p?q", "//g", "http://g" }, + { "http://a/b/c/d;p?q", "?y", "http://a/b/c/d;p?y" }, + { "http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y" }, + { "http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s" }, + { "http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s" }, + { "http://a/b/c/d;p?q", "g?y#s", "http://a/b/c/g?y#s" }, + { "http://a/b/c/d;p?q", ";x", "http://a/b/c/;x" }, + { "http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x" }, + { "http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s" }, + { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" }, + { "http://a/b/c/d;p?q", ".", "http://a/b/c/" }, + { "http://a/b/c/d;p?q", "./", "http://a/b/c/" }, + { "http://a/b/c/d;p?q", "..", "http://a/b/" }, + { "http://a/b/c/d;p?q", "../", "http://a/b/" }, + { "http://a/b/c/d;p?q", "../g", "http://a/b/g" }, + { "http://a/b/c/d;p?q", "../..", "http://a/" }, + { "http://a/b/c/d;p?q", "../../", "http://a/" }, + { "http://a/b/c/d;p?q", "../../g", "http://a/g" }, + { "http://a/b/c/d;p?q", "../../../g", "http://a/g" }, + { "http://a/b/c/d;p?q", "../../../../g", "http://a/g" }, + { "http://a/b/c/d;p?q", "/./g", "http://a/g" }, + { "http://a/b/c/d;p?q", "/../g", "http://a/g" }, + { "http://a/b/c/d;p?q", "g.", "http://a/b/c/g." }, + { "http://a/b/c/d;p?q", ".g", "http://a/b/c/.g" }, + { "http://a/b/c/d;p?q", "g..", "http://a/b/c/g.." }, + { "http://a/b/c/d;p?q", "..g", "http://a/b/c/..g" }, + { "http://a/b/c/d;p?q", "./../g", "http://a/b/g" }, + { "http://a/b/c/d;p?q", "./g/.", "http://a/b/c/g/" }, + { "http://a/b/c/d;p?q", "g/./h", "http://a/b/c/g/h" }, + { "http://a/b/c/d;p?q", "g/../h", "http://a/b/c/h" }, + { "http://a/b/c/d;p?q", "g;x=1/./y", "http://a/b/c/g;x=1/y" }, + { "http://a/b/c/d;p?q", "g;x=1/../y", "http://a/b/c/y" }, + { "http://a/b/c/d;p?q", "g?y/./x", "http://a/b/c/g?y/./x" }, + { "http://a/b/c/d;p?q", "g?y/../x", "http://a/b/c/g?y/../x" }, + { "http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x" }, + { "http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x" }, + { "http://a/b/c/d;p?q", "http:g", "http:g" }, + + { "http!://a/b/c/d;p?q", "g:h", "g:h" }, + { "http!://a/b/c/d;p?q", "g", nullptr }, + { "http:b/c/d;p?q", "g:h", "g:h" }, + { "http:b/c/d;p?q", "g", "http:b/c/g" }, + { "http://a/b/../", "../c", "http://a/c" }, + { "http://a/b/..", "../c", "http://a/c" }, + { "http://a/./b/", ".././.././../c", "http://a/c" }, + { "http://a", "b", "http://a/b" }, + { "", "http://a/b/../c", "http://a/c" }, + + { "http://a/b/c", "d", "http://a/b/d" }, + { "http://a/b/c/", "d", "http://a/b/c/d" }, + { "http://a/b/c//", "d", "http://a/b/c//d" } }; + + for (std::size_t i = 0; i < SAL_N_ELEMENTS(aRelToAbsTest); ++i) + { + OUString aAbs; + bool bMalformed = false; + try { + aAbs = rtl::Uri::convertRelToAbs( + OUString::createFromAscii(aRelToAbsTest[i].pBase), + OUString::createFromAscii(aRelToAbsTest[i].pRel)); + } catch (const rtl::MalformedUriException &) { + bMalformed = true; + } + if (bMalformed + ? aRelToAbsTest[i].pAbs != nullptr + : (aRelToAbsTest[i].pAbs == nullptr + || !aAbs.equalsAscii(aRelToAbsTest[i].pAbs))) + { + printf( + "FAILED convertRelToAbs(%s, %s) -> %s != %s\n", + aRelToAbsTest[i].pBase, aRelToAbsTest[i].pRel, + (bMalformed + ? "" + : OUStringToOString( + aAbs, RTL_TEXTENCODING_UTF8).getStr()), + (aRelToAbsTest[i].pAbs == nullptr + ? "" : aRelToAbsTest[i].pAbs)); + CPPUNIT_ASSERT(false); + } + } + + // Check encode with unusual text encodings: + + { + static constexpr OUStringLiteral aText1U = u" !\u0401\u045F"; + aText1 = OUString(aText1U); + aText2 = "%20!%A1%FF"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 20", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_ISO_8859_5)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 20a", + aText1, + rtl::Uri::decode( + aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5)); + } + { + static constexpr OUStringLiteral aText1U = u" !\u0401\u0700\u045F"; + aText1 = OUString(aText1U); + static constexpr OUStringLiteral aText2U = + u"%20!%A1\u0700%FF"; + aText2 = OUString(aText2U); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 21", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_ISO_8859_5)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 21a", + aText1, + rtl::Uri::decode( + aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_ISO_8859_5)); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { + static constexpr OUStringLiteral aText1U = u" !\u028A\U00022513"; + aText1 = OUString(aText1U); + aText2 = "%20!%81%30%B1%33%95%39%C5%37"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 22", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_GB_18030)); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 22a", + aText1, + rtl::Uri::decode( + aText2, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_GB_18030)); + } +#endif + // Check strict mode: + + { + static constexpr OUStringLiteral aText1U = u" !\u0401\u0700\u045F"; + aText1 = OUString(aText1U); + aText2 = OUString(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 23", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeStrict, + RTL_TEXTENCODING_ISO_8859_5)); + } + { + aText1 = "%20%C4%80%FF"; + aText2 = OUString(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 24", + aText2, + rtl::Uri::decode( + aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8)); + } +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + { + aText1 = "%81 "; + aText2 = OUString(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 25", + aText2, + rtl::Uri::decode( + aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)); + } + { + aText1 = "%81%20"; + aText2 = OUString(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 26", + aText2, + rtl::Uri::decode( + aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)); + } + { + aText1 = "%81%30%B1%33"; + static constexpr OUStringLiteral aText2U = u"\u028A"; + aText2 = OUString(aText2U); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 27", + aText2, + rtl::Uri::decode( + aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)); + } + { + aText1 = "%810%B13"; + static constexpr OUStringLiteral aText2U = u"\u028A"; + aText2 = OUString(aText2U); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 28", + aText2, + rtl::Uri::decode( + aText1, rtl_UriDecodeStrict, RTL_TEXTENCODING_GB_18030)); + } +#endif + // Check rtl_UriEncodeStrictKeepEscapes mode: + + { + aText1 = "%%ea%c3%aa"; + aText2 = "%25%EA%C3%AA"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 29", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes, + RTL_TEXTENCODING_UTF8)); + } + { + static constexpr OUStringLiteral aText1U = u"\u00EA"; + aText1 = OUString(aText1U); + aText2 = "%C3%AA"; + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 30", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes, + RTL_TEXTENCODING_UTF8)); + } + { + static constexpr OUStringLiteral aText1U = u" !\u0401\u0700\u045F"; + aText1 = OUString(aText1U); + aText2 = OUString(); + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "failure 23", + aText2, + rtl::Uri::encode( + aText1, rtl_UriCharClassUric, rtl_UriEncodeStrictKeepEscapes, + RTL_TEXTENCODING_ISO_8859_5)); + } +} + +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/rtl/uuid/rtl_Uuid.cxx b/sal/qa/rtl/uuid/rtl_Uuid.cxx new file mode 100644 index 000000000..aae77cfe3 --- /dev/null +++ b/sal/qa/rtl/uuid/rtl_Uuid.cxx @@ -0,0 +1,159 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include +#elif defined UNX +#include +#include +#endif + + +namespace rtl_Uuid +{ +class createUuid : public CppUnit::TestFixture +{ +public: +#define TEST_UUID 20 + void createUuid_001() + { + sal_uInt8 aNode[TEST_UUID][16]; + sal_Int32 i,i2; + for( i = 0 ; i < TEST_UUID ; i ++ ) + { + rtl_createUuid( aNode[i], nullptr, false ); + } + bool bRes = true; + for( i = 0 ; i < TEST_UUID ; i ++ ) + { + for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ ) + { + if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 ) + { + bRes = false; + break; + } + } + if ( !bRes ) + break; + } + CPPUNIT_ASSERT_MESSAGE("createUuid: every uuid must be different.", bRes); + } + /* + void createUuid_002() + { + sal_uInt8 pNode[16]; + sal_uInt8 aNode[TEST_UUID][16]; + sal_Int32 i,i2; + for( i = 0 ; i < TEST_UUID ; i ++ ) + { + rtl_createUuid( aNode[i], pNode, sal_True ); + } + sal_Bool bRes = sal_True; + for( i = 0 ; i < TEST_UUID ; i ++ ) + { + //printUuid( aNode[i] ); + for( i2 = i+1 ; i2 < TEST_UUID ; i2 ++ ) + { + if ( rtl_compareUuid( aNode[i] , aNode[i2] ) == 0 ) + { + bRes = sal_False; + break; + } + } + if ( bRes == sal_False ) + break; + } + CPPUNIT_ASSERT_MESSAGE("createUuid: every uuid must be different.", bRes == sal_True ); + }*/ + + CPPUNIT_TEST_SUITE(createUuid); + CPPUNIT_TEST(createUuid_001); + //CPPUNIT_TEST(createUuid_002); + CPPUNIT_TEST_SUITE_END(); +}; // class createUuid + +class createNamedUuid : public CppUnit::TestFixture +{ +public: + void createNamedUuid_001() + { + sal_uInt8 NameSpace_DNS[16] = RTL_UUID_NAMESPACE_DNS; + sal_uInt8 NameSpace_URL[16] = RTL_UUID_NAMESPACE_URL; + sal_uInt8 pPriorCalculatedUUID[16] = { + 0x52,0xc9,0x30,0xa5, + 0xd1,0x61,0x3b,0x16, + 0x98,0xc5,0xf8,0xd1, + 0x10,0x10,0x6d,0x4d }; + + sal_uInt8 pNamedUUID[16], pNamedUUID2[16]; + + // Same name does generate the same uuid + rtl_String *pName = nullptr; + rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Name" ); + rtl_createNamedUuid( pNamedUUID , NameSpace_DNS , pName ); + rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName ); + CPPUNIT_ASSERT_MESSAGE( "Same name should generate the same uuid", ! memcmp( pNamedUUID , pNamedUUID2 , 16 )); + CPPUNIT_ASSERT_EQUAL_MESSAGE( "Same name should generate the same uuid", sal_Int32(0), rtl_compareUuid( pNamedUUID , pNamedUUID2 ) ); + CPPUNIT_ASSERT_MESSAGE( "Same name should generate the same uuid", ! memcmp( pNamedUUID , pPriorCalculatedUUID , 16 ) ); + + // Different names does not generate the same uuid + rtl_string_newFromStr( &pName , "this is a bla.blubs.DNS-Namf" ); + rtl_createNamedUuid( pNamedUUID2 , NameSpace_DNS , pName ); + CPPUNIT_ASSERT_MESSAGE("Different names does not generate the same uuid.", memcmp( pNamedUUID , pNamedUUID2 , 16 ) ); + + // the same name with different namespace uuid produces different uuids + rtl_createNamedUuid( pNamedUUID , NameSpace_URL , pName ); + CPPUNIT_ASSERT_MESSAGE( " same name with different namespace uuid produces different uuids", memcmp( pNamedUUID , pNamedUUID2 , 16 )); + CPPUNIT_ASSERT_MESSAGE( " same name with different namespace uuid produces different uuids", rtl_compareUuid( pNamedUUID , pNamedUUID2 ) != 0); + + //test compareUuid + if ( rtl_compareUuid( pNamedUUID , pNamedUUID2 ) > 0 ) + { CPPUNIT_ASSERT_MESSAGE( " compare uuids", rtl_compareUuid( pNamedUUID2 , pNamedUUID ) < 0); + } + else + CPPUNIT_ASSERT_MESSAGE( " compare uuids", rtl_compareUuid( pNamedUUID2 , pNamedUUID ) > 0); + + rtl_string_release( pName ); + } + + CPPUNIT_TEST_SUITE(createNamedUuid); + CPPUNIT_TEST(createNamedUuid_001); + CPPUNIT_TEST_SUITE_END(); +}; // class createNamedUuid + +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_Uuid::createUuid); +CPPUNIT_TEST_SUITE_REGISTRATION(rtl_Uuid::createNamedUuid); +} // namespace rtl_Uuid + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/sal/test_types.cxx b/sal/qa/sal/test_types.cxx new file mode 100644 index 000000000..a03ccc93e --- /dev/null +++ b/sal/qa/sal/test_types.cxx @@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +#include +#include +#include +#include + +namespace { + +template< typename T > void testPrintf( + char const * result, char const * format, T argument) +{ + std::size_t const bufsize = 1000; + char buf[bufsize]; + int n = snprintf(buf, bufsize, format, argument); + CPPUNIT_ASSERT(n >= 0); + CPPUNIT_ASSERT(sal::static_int_cast< unsigned int >(n) < bufsize); + CPPUNIT_ASSERT_EQUAL(0, strcmp(buf, result)); +} + +class Test: public CppUnit::TestFixture { +public: + void test(); + + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void Test::test() { + testPrintf("-2147483648", "%" SAL_PRIdINT32, SAL_MIN_INT32); + testPrintf("4294967295", "%" SAL_PRIuUINT32, SAL_MAX_UINT32); + testPrintf("ffffffff", "%" SAL_PRIxUINT32, SAL_MAX_UINT32); + testPrintf("FFFFFFFF", "%" SAL_PRIXUINT32, SAL_MAX_UINT32); + testPrintf("-9223372036854775808", "%" SAL_PRIdINT64, SAL_MIN_INT64); + testPrintf("18446744073709551615", "%" SAL_PRIuUINT64, SAL_MAX_UINT64); + testPrintf("ffffffffffffffff", "%" SAL_PRIxUINT64, SAL_MAX_UINT64); + testPrintf("FFFFFFFFFFFFFFFF", "%" SAL_PRIXUINT64, SAL_MAX_UINT64); + testPrintf("123", "%" SAL_PRI_SIZET "u", static_cast< std::size_t >(123)); + testPrintf( + "-123", "%" SAL_PRI_PTRDIFFT "d", static_cast< std::ptrdiff_t >(-123)); + testPrintf("-123", "%" SAL_PRIdINTPTR, static_cast< sal_IntPtr >(-123)); + testPrintf("123", "%" SAL_PRIuUINTPTR, static_cast< sal_uIntPtr >(123)); + testPrintf("abc", "%" SAL_PRIxUINTPTR, static_cast< sal_uIntPtr >(0xabc)); + testPrintf("ABC", "%" SAL_PRIXUINTPTR, static_cast< sal_uIntPtr >(0xabc)); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/systools/test_comtools.cxx b/sal/qa/systools/test_comtools.cxx new file mode 100644 index 000000000..073bb79ec --- /dev/null +++ b/sal/qa/systools/test_comtools.cxx @@ -0,0 +1,247 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +namespace { + +class COMObject : public IUnknown +{ +public: + COMObject() : ref_count_(0) + { + } + + virtual ~COMObject() + { + } + + ULONG __stdcall AddRef() override + { + ref_count_++; + return ref_count_; + } + + ULONG __stdcall Release() override + { + ULONG cnt = --ref_count_; + if (cnt == 0) + delete this; + return cnt; + } + + HRESULT __stdcall QueryInterface(REFIID riid, void** ppv) override + { + if (riid == IID_IUnknown) + { + AddRef(); + *ppv = this; + return S_OK; + } + return E_NOINTERFACE; + } + + ULONG GetRefCount() const + { + return ref_count_; + } + +private: + ULONG ref_count_; +}; + +} + +static sal::systools::COMReference comObjectSource() +{ + return sal::systools::COMReference(new COMObject); +} + +static bool comObjectSink(sal::systools::COMReference r, ULONG expectedRefCountOnReturn) +{ + r = sal::systools::COMReference(); + COMObject* p = reinterpret_cast(r.get()); + if (p) + return (p->GetRefCount() == expectedRefCountOnReturn); + else + return (0 == expectedRefCountOnReturn); +} + +static void comObjectSource2(LPVOID* ppv) +{ + COMObject* p = new COMObject; + p->AddRef(); + *ppv = p; +} + +namespace test_comtools +{ + + class test_COMReference : public CppUnit::TestFixture + { + + public: + /// test of COMReference r; + void default_ctor() + { + sal::systools::COMReference r; + CPPUNIT_ASSERT_EQUAL_MESSAGE("COMReference should be empty", static_cast(nullptr), r.get()); + } + + void test_ctor_manual_AddRef() + { + COMObject* p = new COMObject; + p->AddRef(); + sal::systools::COMReference r(p, false); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + } + + void test_copy_ctor() + { + sal::systools::COMReference r(comObjectSource()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + } + + void test_copy_assignment() + { + sal::systools::COMReference r; + CPPUNIT_ASSERT_EQUAL_MESSAGE("COMReference should be empty", static_cast(nullptr), r.get()); + + r = comObjectSource(); + CPPUNIT_ASSERT_MESSAGE("COMReference should be empty", r.get() != nullptr); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + } + + void test_ref_to_ref_assignment() + { + sal::systools::COMReference r1 = comObjectSource(); + sal::systools::COMReference r2 = r1; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 2 is expected", ULONG(2), reinterpret_cast(r2.get())->GetRefCount()); + } + + void test_pointer_to_ref_assignment() + { + sal::systools::COMReference r; + r = new COMObject; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + } + + void test_pointer_to_ref_assignment2() + { + sal::systools::COMReference r = comObjectSource(); + r = new COMObject; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + } + + void test_source_sink() + { + CPPUNIT_ASSERT_MESSAGE("Wrong reference count, 0 is expected", comObjectSink(comObjectSource(), 0)); + } + + void test_address_operator() + { + sal::systools::COMReference r; + comObjectSource2(reinterpret_cast(&r)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count, 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + } + + void test_address_operator2() + { + sal::systools::COMReference r1 = comObjectSource(); + sal::systools::COMReference r2 = r1; + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 2 is expected", ULONG(2), reinterpret_cast(r2.get())->GetRefCount()); + comObjectSource2(reinterpret_cast(&r1)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r1.get())->GetRefCount()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r2.get())->GetRefCount()); + } + + void test_clear() + { + sal::systools::COMReference r = comObjectSource(); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count 1 is expected", ULONG(1), reinterpret_cast(r.get())->GetRefCount()); + r.clear(); + CPPUNIT_ASSERT_MESSAGE("Expect reference to be empty", !r.is()); + } + + void test_query_interface() + { + sal::systools::COMReference r1 = comObjectSource(); + sal::systools::COMReference r2; + CPPUNIT_ASSERT_NO_THROW_MESSAGE( + "Exception should not have been thrown", + r2 = r1.QueryInterface(sal::systools::COM_QUERY_THROW)); + CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong reference count, 2 is expected", ULONG(2), + reinterpret_cast(r2.get())->GetRefCount()); + } + + void test_query_interface_throw() + { + sal::systools::COMReference r1 = comObjectSource(); + CPPUNIT_ASSERT_THROW_MESSAGE("Exception should have been thrown", + auto r2 = r1.QueryInterface(sal::systools::COM_QUERY_THROW), + sal::systools::ComError); + } + + void test_CoCreateInstance() + { + if (FAILED(CoInitialize(nullptr))) + return; + { + // Use scope to destroy the reference before calling CoUninitialize + sal::systools::COMReference r; + CPPUNIT_ASSERT_NO_THROW(r.CoCreateInstance(__uuidof(FileOpenDialog))); + // Immediately after CoCreateInstance, refcount must be 1; increasing once gives 2 + CPPUNIT_ASSERT_EQUAL(ULONG(2), r->AddRef()); + r->Release(); + } + CoUninitialize(); + } + + // Change the following lines only, if you add, remove or rename + // member functions of the current class, + // because these macros are need by auto register mechanism. + + CPPUNIT_TEST_SUITE(test_COMReference); + CPPUNIT_TEST(default_ctor); + CPPUNIT_TEST(test_ctor_manual_AddRef); + CPPUNIT_TEST(test_copy_ctor); + CPPUNIT_TEST(test_copy_assignment); + CPPUNIT_TEST(test_ref_to_ref_assignment); + CPPUNIT_TEST(test_pointer_to_ref_assignment); + CPPUNIT_TEST(test_pointer_to_ref_assignment2); + CPPUNIT_TEST(test_source_sink); + CPPUNIT_TEST(test_address_operator); + CPPUNIT_TEST(test_address_operator2); + CPPUNIT_TEST(test_clear); + CPPUNIT_TEST(test_query_interface); + CPPUNIT_TEST(test_query_interface_throw); + CPPUNIT_TEST(test_CoCreateInstance); + CPPUNIT_TEST_SUITE_END(); + }; + +CPPUNIT_TEST_SUITE_REGISTRATION(test_comtools::test_COMReference); + +} // namespace rtl_OUString + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/qa/systools/test_retry_if_failed.cxx b/sal/qa/systools/test_retry_if_failed.cxx new file mode 100644 index 000000000..a218b3e9f --- /dev/null +++ b/sal/qa/systools/test_retry_if_failed.cxx @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include + +namespace test_systools +{ +constexpr int ClockRes = 15; // default interval between system clock ticks is ~15 ms on x86 + +class test_retry_if_failed : public CppUnit::TestFixture +{ +public: + void test_success() + { + unsigned counter = 0; + const DWORD nTicksBefore = GetTickCount(); + HRESULT hr = sal::systools::RetryIfFailed(10, 200, Tester(5, counter)); + const DWORD nTicksAfter = GetTickCount(); + const DWORD nTicksElapsed = nTicksAfter > nTicksBefore ? nTicksAfter - nTicksBefore + : std::numeric_limits::max() + - nTicksBefore + nTicksAfter; + CPPUNIT_ASSERT(SUCCEEDED(hr)); + // 5 attempts, 4 sleeps by ~200 ms + CPPUNIT_ASSERT_EQUAL(5U, counter); + CPPUNIT_ASSERT_GREATER(DWORD(800 - ClockRes), nTicksElapsed); + } + + void test_failure() + { + unsigned counter = 0; + const DWORD nTicksBefore = GetTickCount(); + HRESULT hr = sal::systools::RetryIfFailed(10, 100, Tester(15, counter)); + const DWORD nTicksAfter = GetTickCount(); + const DWORD nTicksElapsed = nTicksAfter > nTicksBefore ? nTicksAfter - nTicksBefore + : std::numeric_limits::max() + - nTicksBefore + nTicksAfter; + CPPUNIT_ASSERT(FAILED(hr)); + // 1 + 10 attempts, 10 sleeps by ~100 ms + CPPUNIT_ASSERT_EQUAL(11U, counter); + CPPUNIT_ASSERT_GREATER(DWORD(1000 - ClockRes), nTicksElapsed); + } + + CPPUNIT_TEST_SUITE(test_retry_if_failed); + CPPUNIT_TEST(test_success); + CPPUNIT_TEST(test_failure); + CPPUNIT_TEST_SUITE_END(); + +private: + struct Tester + { + Tester(unsigned triesBeforeSuccess, unsigned& counter) + : m_nTriesBeforeSuccess(triesBeforeSuccess) + , m_rCounter(counter) + { + } + + HRESULT operator()() { return ++m_rCounter >= m_nTriesBeforeSuccess ? S_OK : E_FAIL; } + + unsigned m_nTriesBeforeSuccess; + unsigned& m_rCounter; + }; +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(test_systools::test_retry_if_failed); + +} // namespace test_systools + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sal/rtl/alloc_arena.cxx b/sal/rtl/alloc_arena.cxx new file mode 100644 index 000000000..f126efdab --- /dev/null +++ b/sal/rtl/alloc_arena.cxx @@ -0,0 +1,1112 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "alloc_arena.hxx" + +#include "alloc_impl.hxx" +#include +#include + +#include +#include +#include + +namespace { + +/** + @internal +*/ +struct rtl_arena_list_st +{ + rtl_memory_lock_type m_lock; + rtl_arena_type m_arena_head; +}; + +} + +static rtl_arena_list_st g_arena_list; + +/** + provided for arena_type allocations, and hash_table resizing. + + @internal +*/ +static rtl_arena_type * gp_arena_arena = nullptr; + +/** + Low level virtual memory (pseudo) arena + (platform dependent implementation) + + @internal + */ +static rtl_arena_type * gp_machdep_arena = nullptr; + +rtl_arena_type * gp_default_arena = nullptr; + +namespace +{ + +void * rtl_machdep_alloc( + rtl_arena_type * pArena, + sal_Size * pSize +); + +void rtl_machdep_free( + rtl_arena_type * pArena, + void * pAddr, + sal_Size nSize +); + +sal_Size rtl_machdep_pagesize(); + +void rtl_arena_segment_constructor(void * obj) +{ + rtl_arena_segment_type * segment = static_cast(obj); + + QUEUE_START_NAMED(segment, s); + QUEUE_START_NAMED(segment, f); +} + +void rtl_arena_segment_destructor(void * obj) +{ + rtl_arena_segment_type * segment = static_cast< rtl_arena_segment_type * >( + obj); + assert(QUEUE_STARTED_NAMED(segment, s)); + assert(QUEUE_STARTED_NAMED(segment, f)); + (void) segment; // avoid warnings +} + +/** + @precond arena->m_lock acquired. + */ +bool rtl_arena_segment_populate(rtl_arena_type * arena) +{ + rtl_arena_segment_type *span; + sal_Size size = rtl_machdep_pagesize(); + + span = static_cast< rtl_arena_segment_type * >( + rtl_machdep_alloc(gp_machdep_arena, &size)); + if (span) + { + rtl_arena_segment_type *first, *last, *head; + sal_Size count = size / sizeof(rtl_arena_segment_type); + + /* insert onto reserve span list */ + QUEUE_INSERT_TAIL_NAMED(&(arena->m_segment_reserve_span_head), span, s); + QUEUE_START_NAMED(span, f); + span->m_addr = reinterpret_cast(span); + span->m_size = size; + span->m_type = RTL_ARENA_SEGMENT_TYPE_SPAN; + + /* insert onto reserve list */ + head = &(arena->m_segment_reserve_head); + for (first = span + 1, last = span + count; first < last; ++first) + { + QUEUE_INSERT_TAIL_NAMED(head, first, s); + QUEUE_START_NAMED(first, f); + first->m_addr = 0; + first->m_size = 0; + first->m_type = 0; + } + } + return (span != nullptr); +} + +/** + @precond arena->m_lock acquired. + @precond (*ppSegment == 0) +*/ +void rtl_arena_segment_get( + rtl_arena_type * arena, + rtl_arena_segment_type ** ppSegment +) +{ + rtl_arena_segment_type * head; + + assert(!*ppSegment); + + head = &(arena->m_segment_reserve_head); + if (head->m_snext != head || rtl_arena_segment_populate (arena)) + { + (*ppSegment) = head->m_snext; + QUEUE_REMOVE_NAMED(*ppSegment, s); + } +} + +/** + @precond arena->m_lock acquired. + @postcond (*ppSegment == 0) + */ +void rtl_arena_segment_put( + rtl_arena_type * arena, + rtl_arena_segment_type ** ppSegment +) +{ + rtl_arena_segment_type * head; + + assert(QUEUE_STARTED_NAMED(*ppSegment, s)); + assert(QUEUE_STARTED_NAMED(*ppSegment, f)); + + (*ppSegment)->m_addr = 0; + (*ppSegment)->m_size = 0; + + assert((*ppSegment)->m_type != RTL_ARENA_SEGMENT_TYPE_HEAD); + (*ppSegment)->m_type = 0; + + /* keep as reserve */ + head = &(arena->m_segment_reserve_head); + QUEUE_INSERT_HEAD_NAMED(head, (*ppSegment), s); + + /* clear */ + (*ppSegment) = nullptr; +} + +/** + @precond arena->m_lock acquired. +*/ +void rtl_arena_freelist_insert ( + rtl_arena_type * arena, + rtl_arena_segment_type * segment +) +{ + rtl_arena_segment_type * head; + const auto bit = highbit(segment->m_size); + assert(bit > 0); + head = &(arena->m_freelist_head[bit - 1]); + QUEUE_INSERT_TAIL_NAMED(head, segment, f); + + arena->m_freelist_bitmap |= head->m_size; +} + +/** + @precond arena->m_lock acquired. +*/ +void rtl_arena_freelist_remove( + rtl_arena_type * arena, + rtl_arena_segment_type * segment +) +{ + if (segment->m_fnext->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD && + segment->m_fprev->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD) + { + rtl_arena_segment_type * head; + + head = segment->m_fprev; + assert(arena->m_freelist_bitmap & head->m_size); + arena->m_freelist_bitmap ^= head->m_size; + } + QUEUE_REMOVE_NAMED(segment, f); +} + +#define RTL_ARENA_HASH_INDEX_IMPL(a, s, q, m) \ + ((((a) + ((a) >> (s)) + ((a) >> ((s) << 1))) >> (q)) & (m)) + +#define RTL_ARENA_HASH_INDEX(arena, addr) \ + RTL_ARENA_HASH_INDEX_IMPL((addr), (arena)->m_hash_shift, (arena)->m_quantum_shift, ((arena)->m_hash_size - 1)) + +/** + @precond arena->m_lock released. +*/ +void rtl_arena_hash_rescale( + rtl_arena_type * arena, + sal_Size new_size +) +{ + assert(new_size != 0); + + rtl_arena_segment_type ** new_table; + sal_Size new_bytes; + + new_bytes = new_size * sizeof(rtl_arena_segment_type*); + new_table = static_cast(rtl_arena_alloc (gp_arena_arena, &new_bytes)); + + if (new_table) + { + rtl_arena_segment_type ** old_table; + sal_Size old_size, i; + + memset (new_table, 0, new_bytes); + + RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); + + old_table = arena->m_hash_table; + old_size = arena->m_hash_size; + + arena->m_hash_table = new_table; + arena->m_hash_size = new_size; + arena->m_hash_shift = highbit(arena->m_hash_size) - 1; + + for (i = 0; i < old_size; i++) + { + rtl_arena_segment_type * curr = old_table[i]; + while (curr) + { + rtl_arena_segment_type * next = curr->m_fnext; + rtl_arena_segment_type ** head; + + // coverity[negative_shift] - bogus + head = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, curr->m_addr)]); + curr->m_fnext = (*head); + (*head) = curr; + + curr = next; + } + old_table[i] = nullptr; + } + + RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); + + if (old_table != arena->m_hash_table_0) + { + sal_Size old_bytes = old_size * sizeof(rtl_arena_segment_type*); + rtl_arena_free (gp_arena_arena, old_table, old_bytes); + } + } +} + +/** + Insert arena hash, and update stats. +*/ +void rtl_arena_hash_insert( + rtl_arena_type * arena, + rtl_arena_segment_type * segment +) +{ + rtl_arena_segment_type ** ppSegment; + + ppSegment = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, segment->m_addr)]); + + segment->m_fnext = (*ppSegment); + (*ppSegment) = segment; + + arena->m_stats.m_alloc += 1; + arena->m_stats.m_mem_alloc += segment->m_size; +} + +/** + Remove arena hash, and update stats. +*/ +rtl_arena_segment_type * rtl_arena_hash_remove( + rtl_arena_type * arena, + sal_uIntPtr addr, + sal_Size size +) +{ + rtl_arena_segment_type *segment, **segpp; + sal_Size lookups = 0; + + segpp = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, addr)]); + while ((segment = *segpp)) + { + if (segment->m_addr == addr) + { + *segpp = segment->m_fnext; + segment->m_fnext = segment->m_fprev = segment; + break; + } + + /* update lookup miss stats */ + lookups += 1; + segpp = &(segment->m_fnext); + } + + assert(segment); // bad free + if (segment) + { + assert(segment->m_size == size); + (void) size; // avoid warnings + + arena->m_stats.m_free += 1; + arena->m_stats.m_mem_alloc -= segment->m_size; + + if (lookups > 1) + { + sal_Size nseg = static_cast(arena->m_stats.m_alloc - arena->m_stats.m_free); + if (nseg > 4 * arena->m_hash_size) + { + if (!(arena->m_flags & RTL_ARENA_FLAG_RESCALE)) + { + sal_Size ave = nseg >> arena->m_hash_shift; + assert(ave != 0); + sal_Size new_size = arena->m_hash_size << (highbit(ave) - 1); + + arena->m_flags |= RTL_ARENA_FLAG_RESCALE; + RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); + rtl_arena_hash_rescale (arena, new_size); + RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); + arena->m_flags &= ~RTL_ARENA_FLAG_RESCALE; + } + } + } + } + + return segment; +} + +/** + allocate (and remove) segment from freelist + + @precond arena->m_lock acquired + @precond (*ppSegment == 0) +*/ +bool rtl_arena_segment_alloc( + rtl_arena_type * arena, + sal_Size size, + rtl_arena_segment_type ** ppSegment +) +{ + int index = 0; + + assert(!*ppSegment); + if (!RTL_MEMORY_ISP2(size)) + { + unsigned int msb = highbit(size); + if (RTL_ARENA_FREELIST_SIZE == msb) + { + /* highest possible freelist: fall back to first fit */ + rtl_arena_segment_type *head, *segment; + + head = &(arena->m_freelist_head[msb - 1]); + for (segment = head->m_fnext; segment != head; segment = segment->m_fnext) + { + if (segment->m_size >= size) + { + /* allocate first fit segment */ + (*ppSegment) = segment; + break; + } + } + goto dequeue_and_leave; + } + + /* roundup to next power of 2 */ + size = ((sal_Size(1)) << msb); + } + + index = lowbit(RTL_MEMORY_P2ALIGN(arena->m_freelist_bitmap, size)); + if (index > 0) + { + /* instant fit: allocate first free segment */ + rtl_arena_segment_type *head; + + head = &(arena->m_freelist_head[index - 1]); + (*ppSegment) = head->m_fnext; + assert((*ppSegment) != head); + } + +dequeue_and_leave: + if (*ppSegment) + { + /* remove from freelist */ + rtl_arena_freelist_remove (arena, (*ppSegment)); + } + return (*ppSegment != nullptr); +} + +/** + import new (span) segment from source arena + + @precond arena->m_lock acquired + @precond (*ppSegment == 0) +*/ +bool rtl_arena_segment_create( + rtl_arena_type * arena, + sal_Size size, + rtl_arena_segment_type ** ppSegment +) +{ + assert(!*ppSegment); + if (arena->m_source_alloc) + { + rtl_arena_segment_get (arena, ppSegment); + if (*ppSegment) + { + rtl_arena_segment_type * span = nullptr; + rtl_arena_segment_get (arena, &span); + if (span) + { + /* import new span from source arena */ + RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); + + span->m_size = size; + span->m_addr = reinterpret_cast( + (arena->m_source_alloc)( + arena->m_source_arena, &(span->m_size))); + + RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); + if (span->m_addr != 0) + { + /* insert onto segment list, update stats */ + span->m_type = RTL_ARENA_SEGMENT_TYPE_SPAN; + QUEUE_INSERT_HEAD_NAMED(&(arena->m_segment_head), span, s); + arena->m_stats.m_mem_total += span->m_size; + + (*ppSegment)->m_addr = span->m_addr; + (*ppSegment)->m_size = span->m_size; + (*ppSegment)->m_type = RTL_ARENA_SEGMENT_TYPE_FREE; + QUEUE_INSERT_HEAD_NAMED(span, (*ppSegment), s); + + /* report success */ + return true; + } + rtl_arena_segment_put (arena, &span); + } + rtl_arena_segment_put (arena, ppSegment); + } + } + return false; // failure +} + +/** + mark as free and join with adjacent free segment(s) + + @precond arena->m_lock acquired + @precond segment marked 'used' +*/ +void rtl_arena_segment_coalesce( + rtl_arena_type * arena, + rtl_arena_segment_type * segment +) +{ + rtl_arena_segment_type *next, *prev; + + /* mark segment free */ + assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_USED); + segment->m_type = RTL_ARENA_SEGMENT_TYPE_FREE; + + /* try to merge w/ next segment */ + next = segment->m_snext; + if (next->m_type == RTL_ARENA_SEGMENT_TYPE_FREE) + { + assert(segment->m_addr + segment->m_size == next->m_addr); + segment->m_size += next->m_size; + + /* remove from freelist */ + rtl_arena_freelist_remove (arena, next); + + /* remove from segment list */ + QUEUE_REMOVE_NAMED(next, s); + + /* release segment descriptor */ + rtl_arena_segment_put (arena, &next); + } + + /* try to merge w/ prev segment */ + prev = segment->m_sprev; + if (prev->m_type == RTL_ARENA_SEGMENT_TYPE_FREE) + { + assert(prev->m_addr + prev->m_size == segment->m_addr); + segment->m_addr = prev->m_addr; + segment->m_size += prev->m_size; + + /* remove from freelist */ + rtl_arena_freelist_remove (arena, prev); + + /* remove from segment list */ + QUEUE_REMOVE_NAMED(prev, s); + + /* release segment descriptor */ + rtl_arena_segment_put (arena, &prev); + } +} + +void rtl_arena_constructor(void * obj) +{ + rtl_arena_type * arena = static_cast(obj); + rtl_arena_segment_type * head; + size_t i; + + memset (arena, 0, sizeof(rtl_arena_type)); + + QUEUE_START_NAMED(arena, arena_); + + RTL_MEMORY_LOCK_INIT(&(arena->m_lock)); + + head = &(arena->m_segment_reserve_span_head); + rtl_arena_segment_constructor (head); + head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD; + + head = &(arena->m_segment_reserve_head); + rtl_arena_segment_constructor (head); + head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD; + + head = &(arena->m_segment_head); + rtl_arena_segment_constructor (head); + head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD; + + for (i = 0; i < RTL_ARENA_FREELIST_SIZE; i++) + { + head = &(arena->m_freelist_head[i]); + rtl_arena_segment_constructor (head); + + head->m_size = ((sal_Size(1)) << i); + head->m_type = RTL_ARENA_SEGMENT_TYPE_HEAD; + } + + arena->m_hash_table = arena->m_hash_table_0; + arena->m_hash_size = RTL_ARENA_HASH_SIZE; + arena->m_hash_shift = highbit(arena->m_hash_size) - 1; +} + +void rtl_arena_destructor(void * obj) +{ + rtl_arena_type * arena = static_cast(obj); + rtl_arena_segment_type * head; + size_t i; + + assert(QUEUE_STARTED_NAMED(arena, arena_)); + + RTL_MEMORY_LOCK_DESTROY(&(arena->m_lock)); + + head = &(arena->m_segment_reserve_span_head); + assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD); + rtl_arena_segment_destructor (head); + + head = &(arena->m_segment_reserve_head); + assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD); + rtl_arena_segment_destructor (head); + + head = &(arena->m_segment_head); + assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD); + rtl_arena_segment_destructor (head); + + for (i = 0; i < RTL_ARENA_FREELIST_SIZE; i++) + { + head = &(arena->m_freelist_head[i]); + + assert(head->m_size == ((sal_Size(1)) << i)); + assert(head->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD); + + rtl_arena_segment_destructor (head); + } + + assert(arena->m_hash_table == arena->m_hash_table_0); + assert(arena->m_hash_size == RTL_ARENA_HASH_SIZE); + assert(arena->m_hash_shift == highbit(arena->m_hash_size) - 1); +} + +rtl_arena_type * rtl_arena_activate( + rtl_arena_type * arena, + const char * name, + sal_Size quantum, + rtl_arena_type * source_arena, + void * (SAL_CALL * source_alloc)(rtl_arena_type *, sal_Size *), + void (SAL_CALL * source_free) (rtl_arena_type *, void *, sal_Size) +) +{ + assert(arena); + if (arena) + { + (void) snprintf (arena->m_name, sizeof(arena->m_name), "%s", name); + + if (!RTL_MEMORY_ISP2(quantum)) + { + /* roundup to next power of 2 */ + quantum = ((sal_Size(1)) << highbit(quantum)); + } + + arena->m_quantum = quantum; + arena->m_quantum_shift = highbit(arena->m_quantum) - 1; + + arena->m_source_arena = source_arena; + arena->m_source_alloc = source_alloc; + arena->m_source_free = source_free; + + /* insert into arena list */ + RTL_MEMORY_LOCK_ACQUIRE(&(g_arena_list.m_lock)); + QUEUE_INSERT_TAIL_NAMED(&(g_arena_list.m_arena_head), arena, arena_); + RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock)); + } + return arena; +} + +void rtl_arena_deactivate(rtl_arena_type * arena) +{ + rtl_arena_segment_type * head, * segment; + + /* remove from arena list */ + RTL_MEMORY_LOCK_ACQUIRE(&(g_arena_list.m_lock)); + QUEUE_REMOVE_NAMED(arena, arena_); + RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock)); + + /* check for leaked segments */ + if (arena->m_stats.m_alloc > arena->m_stats.m_free) + { + sal_Size i, n; + + /* cleanup still used segment(s) */ + for (i = 0, n = arena->m_hash_size; i < n; i++) + { + while ((segment = arena->m_hash_table[i])) + { + /* pop from hash table */ + arena->m_hash_table[i] = segment->m_fnext; + segment->m_fnext = segment->m_fprev = segment; + + /* coalesce w/ adjacent free segment(s) */ + rtl_arena_segment_coalesce (arena, segment); + + /* insert onto freelist */ + rtl_arena_freelist_insert (arena, segment); + } + } + } + + /* cleanup hash table */ + if (arena->m_hash_table != arena->m_hash_table_0) + { + rtl_arena_free( + gp_arena_arena, + arena->m_hash_table, + arena->m_hash_size * sizeof(rtl_arena_segment_type*)); + + arena->m_hash_table = arena->m_hash_table_0; + arena->m_hash_size = RTL_ARENA_HASH_SIZE; + arena->m_hash_shift = highbit(arena->m_hash_size) - 1; + } + + /* cleanup segment list */ + head = &(arena->m_segment_head); + for (segment = head->m_snext; segment != head; segment = head->m_snext) + { + if (segment->m_type == RTL_ARENA_SEGMENT_TYPE_FREE) + { + /* remove from freelist */ + rtl_arena_freelist_remove (arena, segment); + } + else + { + /* can have only free and span segments here */ + assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN); + } + + /* remove from segment list */ + QUEUE_REMOVE_NAMED(segment, s); + + /* release segment descriptor */ + rtl_arena_segment_put (arena, &segment); + } + + /* cleanup segment reserve list */ + head = &(arena->m_segment_reserve_head); + for (segment = head->m_snext; segment != head; segment = head->m_snext) + { + /* remove from segment list */ + QUEUE_REMOVE_NAMED(segment, s); + } + + /* cleanup segment reserve span(s) */ + head = &(arena->m_segment_reserve_span_head); + for (segment = head->m_snext; segment != head; segment = head->m_snext) + { + /* can have only span segments here */ + assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN); + + /* remove from segment list */ + QUEUE_REMOVE_NAMED(segment, s); + + /* return span to g_machdep_arena */ + rtl_machdep_free (gp_machdep_arena, reinterpret_cast(segment->m_addr), segment->m_size); + } +} + +} // namespace + +rtl_arena_type * SAL_CALL rtl_arena_create( + const char * name, + sal_Size quantum, + sal_Size, + rtl_arena_type * source_arena, + void * (SAL_CALL * source_alloc)(rtl_arena_type *, sal_Size *), + void (SAL_CALL * source_free) (rtl_arena_type *, void *, sal_Size), + SAL_UNUSED_PARAMETER int +) SAL_THROW_EXTERN_C() +{ + rtl_arena_type * result = nullptr; + sal_Size size = sizeof(rtl_arena_type); + +try_alloc: + result = static_cast(rtl_arena_alloc (gp_arena_arena, &size)); + if (result) + { + rtl_arena_type * arena = result; + rtl_arena_constructor (arena); + + if (!source_arena) + { + assert(gp_default_arena); + source_arena = gp_default_arena; + } + + result = rtl_arena_activate ( + arena, + name, + quantum, + source_arena, + source_alloc, + source_free + ); + + if (!result) + { + rtl_arena_deactivate (arena); + rtl_arena_destructor (arena); + rtl_arena_free (gp_arena_arena, arena, size); + } + } + else if (!gp_arena_arena) + { + ensureArenaSingleton(); + if (gp_arena_arena) + { + /* try again */ + goto try_alloc; + } + } + return result; +} + +void SAL_CALL rtl_arena_destroy(rtl_arena_type * arena) SAL_THROW_EXTERN_C() +{ + if (arena) + { + rtl_arena_deactivate (arena); + rtl_arena_destructor (arena); + rtl_arena_free (gp_arena_arena, arena, sizeof(rtl_arena_type)); + } +} + +void * SAL_CALL rtl_arena_alloc( + rtl_arena_type * arena, + sal_Size * pSize +) SAL_THROW_EXTERN_C() +{ + void * addr = nullptr; + + if (arena && pSize) + { + sal_Size size; + + size = RTL_MEMORY_ALIGN(*pSize, arena->m_quantum); + if (size > 0) + { + /* allocate from segment list */ + rtl_arena_segment_type *segment = nullptr; + + RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); + if (rtl_arena_segment_alloc (arena, size, &segment) || + rtl_arena_segment_create(arena, size, &segment) ) + { + /* shrink to fit */ + sal_Size oversize; + + /* mark segment used */ + assert(segment->m_type == RTL_ARENA_SEGMENT_TYPE_FREE); + segment->m_type = RTL_ARENA_SEGMENT_TYPE_USED; + + /* resize */ + assert(segment->m_size >= size); + oversize = segment->m_size - size; + if (oversize >= arena->m_quantum) + { + rtl_arena_segment_type * remainder = nullptr; + rtl_arena_segment_get (arena, &remainder); + if (remainder) + { + segment->m_size = size; + + remainder->m_addr = segment->m_addr + segment->m_size; + remainder->m_size = oversize; + remainder->m_type = RTL_ARENA_SEGMENT_TYPE_FREE; + QUEUE_INSERT_HEAD_NAMED(segment, remainder, s); + + rtl_arena_freelist_insert (arena, remainder); + } + } + + rtl_arena_hash_insert (arena, segment); + + (*pSize) = segment->m_size; + addr = reinterpret_cast(segment->m_addr); + } + RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); + } + } + return addr; +} + +void SAL_CALL rtl_arena_free ( + rtl_arena_type * arena, + void * addr, + sal_Size size +) SAL_THROW_EXTERN_C() +{ + if (arena) + { + size = RTL_MEMORY_ALIGN(size, arena->m_quantum); + if (size > 0) + { + /* free to segment list */ + rtl_arena_segment_type * segment; + + RTL_MEMORY_LOCK_ACQUIRE(&(arena->m_lock)); + + segment = rtl_arena_hash_remove (arena, reinterpret_cast(addr), size); + if (segment) + { + rtl_arena_segment_type *next, *prev; + + /* coalesce w/ adjacent free segment(s) */ + rtl_arena_segment_coalesce (arena, segment); + + /* determine (new) next and prev segment */ + next = segment->m_snext; + prev = segment->m_sprev; + + /* entire span free when prev is a span, and next is either a span or a list head */ + if (prev->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN && + ((next->m_type == RTL_ARENA_SEGMENT_TYPE_SPAN) || + (next->m_type == RTL_ARENA_SEGMENT_TYPE_HEAD))) + { + assert( + prev->m_addr == segment->m_addr + && prev->m_size == segment->m_size); + + if (arena->m_source_free) + { + addr = reinterpret_cast(prev->m_addr); + size = prev->m_size; + + /* remove from segment list */ + QUEUE_REMOVE_NAMED(segment, s); + + /* release segment descriptor */ + rtl_arena_segment_put (arena, &segment); + + /* remove from segment list */ + QUEUE_REMOVE_NAMED(prev, s); + + /* release (span) segment descriptor */ + rtl_arena_segment_put (arena, &prev); + + /* update stats, return span to source arena */ + arena->m_stats.m_mem_total -= size; + RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); + + (arena->m_source_free)(arena->m_source_arena, addr, size); + return; + } + } + + /* insert onto freelist */ + rtl_arena_freelist_insert (arena, segment); + } + + RTL_MEMORY_LOCK_RELEASE(&(arena->m_lock)); + } + } +} + +void rtl_arena_foreach (rtl_arena_type *arena, ArenaForeachFn foreachFn) +{ + /* used segments */ + for (int i = 0, n = arena->m_hash_size; i < n; i++) + { + for (rtl_arena_segment_type *segment = arena->m_hash_table[i]; + segment != nullptr; segment = segment->m_fnext) + { + foreachFn(reinterpret_cast(segment->m_addr), + segment->m_size); + } + } +} + +#if defined(SAL_UNX) +#include +#elif defined(_WIN32) +#define MAP_FAILED nullptr +#endif /* SAL_UNX || _WIN32 */ + +namespace +{ + +void * rtl_machdep_alloc( + rtl_arena_type * pArena, + sal_Size * pSize +) +{ + void * addr; + sal_Size size = *pSize; + + assert(pArena == gp_machdep_arena); + +#if defined(__sun) && defined(SPARC) + /* see @ mmap(2) man pages */ + size += (pArena->m_quantum + pArena->m_quantum); /* "red-zone" pages */ + if (size > (4 << 20)) + size = RTL_MEMORY_P2ROUNDUP(size, (4 << 20)); + else if (size > (512 << 10)) + size = RTL_MEMORY_P2ROUNDUP(size, (512 << 10)); + else + size = RTL_MEMORY_P2ROUNDUP(size, (64 << 10)); + size -= (pArena->m_quantum + pArena->m_quantum); /* "red-zone" pages */ +#else + /* default allocation granularity */ + if (pArena->m_quantum < (64 << 10)) + { + size = RTL_MEMORY_P2ROUNDUP(size, (64 << 10)); + } + else + { + size = RTL_MEMORY_P2ROUNDUP(size, pArena->m_quantum); + } +#endif + +#if defined(SAL_UNX) + addr = mmap (nullptr, static_cast(size), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); +#elif defined(_WIN32) + addr = VirtualAlloc (nullptr, static_cast(size), MEM_COMMIT, PAGE_READWRITE); +#endif /* (SAL_UNX || _WIN32) */ + + if (addr != MAP_FAILED) + { + pArena->m_stats.m_alloc += 1; + pArena->m_stats.m_mem_total += size; + pArena->m_stats.m_mem_alloc += size; + + (*pSize) = size; + return addr; + } + return nullptr; +} + +void rtl_machdep_free( + rtl_arena_type * pArena, + void * pAddr, + sal_Size nSize +) +{ + assert(pArena == gp_machdep_arena); + + pArena->m_stats.m_free += 1; + pArena->m_stats.m_mem_total -= nSize; + pArena->m_stats.m_mem_alloc -= nSize; + +#if defined(SAL_UNX) + (void) munmap(pAddr, nSize); +#elif defined(_WIN32) + (void) VirtualFree (pAddr, SIZE_T(0), MEM_RELEASE); +#endif /* (SAL_UNX || _WIN32) */ +} + +sal_Size rtl_machdep_pagesize() +{ +#if defined(SAL_UNX) +#if defined(FREEBSD) || defined(NETBSD) || defined(DRAGONFLY) + return (sal_Size)getpagesize(); +#else /* POSIX */ + return static_cast(sysconf(_SC_PAGESIZE)); +#endif /* xBSD || POSIX */ +#elif defined(_WIN32) + SYSTEM_INFO info; + GetSystemInfo (&info); + return static_cast(info.dwPageSize); +#endif /* (SAL_UNX || _WIN32) */ +} + +} //namespace + +void rtl_arena_init() +{ + { + /* list of arenas */ + RTL_MEMORY_LOCK_INIT(&(g_arena_list.m_lock)); + rtl_arena_constructor (&(g_arena_list.m_arena_head)); + } + { + /* machdep (pseudo) arena */ + static rtl_arena_type g_machdep_arena; + + assert(!gp_machdep_arena); + rtl_arena_constructor (&g_machdep_arena); + + gp_machdep_arena = rtl_arena_activate ( + &g_machdep_arena, + "rtl_machdep_arena", + rtl_machdep_pagesize(), + nullptr, nullptr, nullptr /* no source */ + ); + assert(gp_machdep_arena); + } + { + /* default arena */ + static rtl_arena_type g_default_arena; + + assert(!gp_default_arena); + rtl_arena_constructor (&g_default_arena); + + gp_default_arena = rtl_arena_activate ( + &g_default_arena, + "rtl_default_arena", + rtl_machdep_pagesize(), + gp_machdep_arena, /* source */ + rtl_machdep_alloc, + rtl_machdep_free + ); + assert(gp_default_arena); + } + { + /* arena internal arena */ + static rtl_arena_type g_arena_arena; + + assert(!gp_arena_arena); + rtl_arena_constructor (&g_arena_arena); + + gp_arena_arena = rtl_arena_activate( + &g_arena_arena, + "rtl_arena_internal_arena", + 64, /* quantum */ + gp_default_arena, /* source */ + rtl_arena_alloc, + rtl_arena_free + ); + assert(gp_arena_arena); + } +} + +void rtl_arena_fini() +{ + if (gp_arena_arena) + { + rtl_arena_type * arena, * head; + + RTL_MEMORY_LOCK_ACQUIRE(&(g_arena_list.m_lock)); + head = &(g_arena_list.m_arena_head); + + for (arena = head->m_arena_next; arena != head; arena = arena->m_arena_next) + { + // noop + } + RTL_MEMORY_LOCK_RELEASE(&(g_arena_list.m_lock)); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/alloc_arena.hxx b/sal/rtl/alloc_arena.hxx new file mode 100644 index 000000000..7226ef3f1 --- /dev/null +++ b/sal/rtl/alloc_arena.hxx @@ -0,0 +1,118 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_RTL_ALLOC_ARENA_HXX +#define INCLUDED_SAL_RTL_ALLOC_ARENA_HXX + +#include +#include +#include "alloc_impl.hxx" + +/** rtl_arena_stat_type + * @internal + */ +struct rtl_arena_stat_type +{ + sal_uInt64 m_alloc; + sal_uInt64 m_free; + + sal_Size m_mem_total; + sal_Size m_mem_alloc; +}; + +/** rtl_arena_segment_type + * @internal + */ +constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_HEAD = 0x01; +constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_SPAN = 0x02; +constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_FREE = 0x04; +constexpr sal_Size RTL_ARENA_SEGMENT_TYPE_USED = 0x08; + +struct rtl_arena_segment_type +{ + /* segment list linkage */ + rtl_arena_segment_type * m_snext; + rtl_arena_segment_type * m_sprev; + + /* free/used list linkage */ + rtl_arena_segment_type * m_fnext; + rtl_arena_segment_type * m_fprev; + + /* segment description */ + sal_uIntPtr m_addr; + sal_Size m_size; + sal_Size m_type; +}; + +/** rtl_arena_type + * @internal + */ +constexpr auto RTL_ARENA_FREELIST_SIZE = sizeof(void*) * 8; +constexpr auto RTL_ARENA_HASH_SIZE = 64; + +constexpr auto RTL_ARENA_FLAG_RESCALE = 1; /* within hash rescale operation */ + +struct rtl_arena_st +{ + /* linkage */ + rtl_arena_type * m_arena_next; + rtl_arena_type * m_arena_prev; + + /* properties */ + char m_name[RTL_ARENA_NAME_LENGTH + 1]; + long m_flags; + + rtl_memory_lock_type m_lock; + rtl_arena_stat_type m_stats; + + rtl_arena_type * m_source_arena; + void * (SAL_CALL * m_source_alloc)(rtl_arena_type *, sal_Size *); + void (SAL_CALL * m_source_free) (rtl_arena_type *, void *, sal_Size); + + sal_Size m_quantum; + sal_Size m_quantum_shift; /* log2(m_quantum) */ + + rtl_arena_segment_type m_segment_reserve_span_head; + rtl_arena_segment_type m_segment_reserve_head; + + rtl_arena_segment_type m_segment_head; + + rtl_arena_segment_type m_freelist_head[RTL_ARENA_FREELIST_SIZE]; + sal_Size m_freelist_bitmap; + + rtl_arena_segment_type ** m_hash_table; + rtl_arena_segment_type * m_hash_table_0[RTL_ARENA_HASH_SIZE]; + sal_Size m_hash_size; /* m_hash_mask + 1 */ + sal_Size m_hash_shift; /* log2(m_hash_size) */ +}; + +/** gp_default_arena + * default arena with pagesize quantum + * + * @internal + */ +extern rtl_arena_type * gp_default_arena; + +typedef void (*ArenaForeachFn)(void *addr, sal_Size size); + +void rtl_arena_foreach(rtl_arena_type *arena, ArenaForeachFn fn); + +#endif // INCLUDED_SAL_RTL_ALLOC_ARENA_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/alloc_cache.cxx b/sal/rtl/alloc_cache.cxx new file mode 100644 index 000000000..1f165cca1 --- /dev/null +++ b/sal/rtl/alloc_cache.cxx @@ -0,0 +1,225 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "alloc_cache.hxx" +#include "alloc_impl.hxx" +#include "alloc_arena.hxx" +#include + +#include +#include +#include +#include + +/** + provided for cache_type allocations, and hash_table resizing. + + @internal +*/ +static rtl_arena_type * gp_cache_arena = nullptr; + +namespace +{ + +rtl_cache_type * rtl_cache_activate( + rtl_cache_type * cache, + const char * name, + size_t objsize, + size_t objalign, + int (SAL_CALL * constructor)(void * obj, void * userarg), + void (SAL_CALL * destructor) (void * obj, void * userarg), + void * userarg +) +{ + assert(cache); + + snprintf (cache->m_name, sizeof(cache->m_name), "%s", name); + + if (objalign == 0) + { + /* determine default alignment */ + if (objsize >= RTL_MEMORY_ALIGNMENT_8) + objalign = RTL_MEMORY_ALIGNMENT_8; + else + objalign = RTL_MEMORY_ALIGNMENT_4; + } + else + { + /* ensure minimum alignment */ + if(objalign < RTL_MEMORY_ALIGNMENT_4) + { + objalign = RTL_MEMORY_ALIGNMENT_4; + } + } + assert(RTL_MEMORY_ISP2(objalign)); + + cache->m_type_size = RTL_MEMORY_P2ROUNDUP(objsize, objalign); + + cache->m_constructor = constructor; + cache->m_destructor = destructor; + cache->m_userarg = userarg; + + return cache; +} + +} //namespace + +rtl_cache_type * SAL_CALL rtl_cache_create( + const char * name, + sal_Size objsize, + sal_Size objalign, + int (SAL_CALL * constructor)(void * obj, void * userarg), + void (SAL_CALL * destructor) (void * obj, void * userarg), + void (SAL_CALL * /*reclaim*/) (void * userarg), + void * userarg, + rtl_arena_type *, + int +) SAL_THROW_EXTERN_C() +{ + rtl_cache_type * result = nullptr; + sal_Size size = sizeof(rtl_cache_type); + +try_alloc: + result = static_cast(rtl_arena_alloc (gp_cache_arena, &size)); + if (result) + { + rtl_cache_type * cache = result; + memset (cache, 0, sizeof(rtl_cache_type)); + + result = rtl_cache_activate ( + cache, + name, + objsize, + objalign, + constructor, + destructor, + userarg + ); + + if (!result) + { + /* activation failed */ + rtl_arena_free (gp_cache_arena, cache, size); + } + } + else if (!gp_cache_arena) + { + ensureCacheSingleton(); + if (gp_cache_arena) + { + /* try again */ + goto try_alloc; + } + } + return result; +} + +void SAL_CALL rtl_cache_destroy(rtl_cache_type * cache) SAL_THROW_EXTERN_C() +{ + if (cache) + { + rtl_arena_free (gp_cache_arena, cache, sizeof(rtl_cache_type)); + } +} + +void * SAL_CALL rtl_cache_alloc(rtl_cache_type * cache) SAL_THROW_EXTERN_C() +{ + void * obj = nullptr; + + if (!cache) + return nullptr; + + obj = std::malloc(cache->m_type_size); + if (obj && cache->m_constructor) + { + if (!(cache->m_constructor)(obj, cache->m_userarg)) + { + /* construction failure */ + std::free(obj); + obj = nullptr; + } + } + return obj; +} + +void SAL_CALL rtl_cache_free( + rtl_cache_type * cache, + void * obj +) SAL_THROW_EXTERN_C() +{ + if (obj && cache) + { + if (cache->m_destructor) + { + /* destruct object */ + (cache->m_destructor)(obj, cache->m_userarg); + } + std::free(obj); + } +} + +#if defined(SAL_UNX) + +void SAL_CALL rtl_secureZeroMemory(void *Ptr, sal_Size Bytes) SAL_THROW_EXTERN_C() +{ + //currently glibc doesn't implement memset_s + volatile char *p = static_cast(Ptr); + while (Bytes--) + *p++ = 0; +} + +#elif defined(_WIN32) + +void SAL_CALL rtl_secureZeroMemory(void *Ptr, sal_Size Bytes) SAL_THROW_EXTERN_C() +{ + RtlSecureZeroMemory(Ptr, Bytes); +} + +#endif /* SAL_UNX || _WIN32 */ + +void rtl_cache_init() +{ + /* cache: internal arena */ + assert(!gp_cache_arena); + + gp_cache_arena = rtl_arena_create ( + "rtl_cache_internal_arena", + 64, /* quantum */ + 0, /* no quantum caching */ + nullptr, /* default source */ + rtl_arena_alloc, + rtl_arena_free, + 0 /* flags */ + ); + assert(gp_cache_arena); + + /* check 'gp_default_arena' initialization */ + assert(gp_default_arena); +} + +void rtl_cache_fini() +{ + if (gp_cache_arena) + { + rtl_arena_destroy (gp_cache_arena); + gp_cache_arena = nullptr; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/alloc_cache.hxx b/sal/rtl/alloc_cache.hxx new file mode 100644 index 000000000..501d5770b --- /dev/null +++ b/sal/rtl/alloc_cache.hxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_RTL_ALLOC_CACHE_HXX +#define INCLUDED_SAL_RTL_ALLOC_CACHE_HXX + +#include +#include + +struct rtl_cache_st +{ + /* properties */ + char m_name[RTL_CACHE_NAME_LENGTH + 1]; + + sal_Size m_type_size; /* const */ + + int (SAL_CALL * m_constructor)(void * obj, void * userarg); /* const */ + void (SAL_CALL * m_destructor) (void * obj, void * userarg); /* const */ + void * m_userarg; +}; + +#endif // INCLUDED_SAL_RTL_ALLOC_CACHE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/alloc_fini.cxx b/sal/rtl/alloc_fini.cxx new file mode 100644 index 000000000..ba798452d --- /dev/null +++ b/sal/rtl/alloc_fini.cxx @@ -0,0 +1,97 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +namespace +{ + struct rtlCacheSingleton + { + rtlCacheSingleton() + { + rtl_cache_init(); + } + ~rtlCacheSingleton() + { + rtl_cache_fini(); + } + }; + rtlCacheSingleton& theCacheSingleton() + { + static rtlCacheSingleton SINGLETON; + return SINGLETON; + } +} + +void ensureCacheSingleton() +{ + theCacheSingleton(); +} + +namespace +{ + struct rtlArenaSingleton + { + rtlArenaSingleton() + { + rtl_arena_init(); + } + ~rtlArenaSingleton() + { + rtl_arena_fini(); + } + }; + rtlArenaSingleton& theArenaSingleton() + { + static rtlArenaSingleton SINGLETON; + return SINGLETON; + } +} + +void ensureArenaSingleton() +{ + theArenaSingleton(); +} + +namespace +{ + struct rtlLocaleSingleton + { + rtlLocaleSingleton() + { + rtl_locale_init(); + } + ~rtlLocaleSingleton() + { + rtl_locale_fini(); + } + }; + rtlLocaleSingleton& theLocaleSingleton() + { + static rtlLocaleSingleton SINGLETON; + return SINGLETON; + } +} + +void ensureLocaleSingleton() +{ + theLocaleSingleton(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/alloc_global.cxx b/sal/rtl/alloc_global.cxx new file mode 100644 index 000000000..4b7ec6037 --- /dev/null +++ b/sal/rtl/alloc_global.cxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "alloc_impl.hxx" +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +void* SAL_CALL rtl_allocateMemory(sal_Size n) SAL_THROW_EXTERN_C() +{ + SAL_WARN_IF( + n >= SAL_MAX_INT32, "sal.rtl", + "suspicious massive alloc " << n); + return malloc (n); +} + +void* SAL_CALL rtl_reallocateMemory(void * p, sal_Size n) SAL_THROW_EXTERN_C() +{ + SAL_WARN_IF( + n >= SAL_MAX_INT32, "sal.rtl", + "suspicious massive alloc " << n); + return realloc (p, n); +} + +void SAL_CALL rtl_freeMemory(void * p) SAL_THROW_EXTERN_C() +{ + free (p); +} + +void * SAL_CALL rtl_allocateZeroMemory(sal_Size n) SAL_THROW_EXTERN_C() +{ + SAL_WARN_IF( n >= SAL_MAX_INT32, "sal.rtl", "suspicious massive alloc " << n); + return calloc(n, 1); +} + +void SAL_CALL rtl_freeZeroMemory(void * p, sal_Size n) SAL_THROW_EXTERN_C() +{ + if (p) + { + rtl_secureZeroMemory (p, n); + rtl_freeMemory (p); + } +} + +void* SAL_CALL rtl_allocateAlignedMemory(sal_Size Alignment, sal_Size Bytes) SAL_THROW_EXTERN_C() +{ + return osl_aligned_alloc(Alignment, Bytes); +} + +void SAL_CALL rtl_freeAlignedMemory(void* Ptr) SAL_THROW_EXTERN_C() +{ + osl_aligned_free(Ptr); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/alloc_impl.hxx b/sal/rtl/alloc_impl.hxx new file mode 100644 index 000000000..29c24cc99 --- /dev/null +++ b/sal/rtl/alloc_impl.hxx @@ -0,0 +1,219 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_RTL_ALLOC_IMPL_HXX +#define INCLUDED_SAL_RTL_ALLOC_IMPL_HXX + +#include + +/** Alignment macros + */ +#if SAL_TYPES_ALIGNMENT4 > 1 +#define RTL_MEMORY_ALIGNMENT_4 SAL_TYPES_ALIGNMENT4 +#else +#define RTL_MEMORY_ALIGNMENT_4 sizeof(int) +#endif /* SAL_TYPES_ALIGNMENT4 */ + +#if SAL_TYPES_ALIGNMENT8 > 1 +#define RTL_MEMORY_ALIGNMENT_8 SAL_TYPES_ALIGNMENT8 +#else +#define RTL_MEMORY_ALIGNMENT_8 sizeof(void*) +#endif /* SAL_TYPES_ALIGNMENT8 */ + +#if 0 /* @@@ */ +#define RTL_MEMORY_ALIGNMENT_1 8 +#define RTL_MEMORY_ALIGNMENT_2 (sizeof(void*) * 2) +#endif /* @@@ */ + +#define RTL_MEMORY_ALIGN(value, align) (((value) + ((align) - 1)) & ~((align) - 1)) + +#define RTL_MEMORY_ISP2(value) (((value) & ((value) - 1)) == 0) +#define RTL_MEMORY_P2ALIGN(value, align) ((value) & -static_cast(align)) + +#define RTL_MEMORY_P2ROUNDUP(value, align) \ + (-(-static_cast(value) & -static_cast(align))) +#define RTL_MEMORY_P2END(value, align) \ + (-(~static_cast(value) & -static_cast(align))) + +/** highbit(): log2() + 1 + (complexity O(1)) +*/ +static inline unsigned int highbit(sal_Size n) +{ + unsigned int k = 1; + + if (n == 0) + return 0; + if constexpr (sizeof(n) >= 8) + { + if (n & 0xffffffff00000000) + { + k |= 32; + n >>= 32; + } + } + if (n & 0xffff0000) + { + k |= 16; + n >>= 16; + } + if (n & 0xff00) + { + k |= 8; + n >>= 8; + } + if (n & 0xf0) + { + k |= 4; + n >>= 4; + } + if (n & 0x0c) + { + k |= 2; + n >>= 2; + } + if (n & 0x02) + k++; + + return k; +} + +/** find first bit set + (complexity O(1)) +*/ +static inline unsigned int lowbit(sal_Size n) +{ + unsigned int k = 1; + + if (n == 0) + return 0; + + if constexpr (sizeof(n) >= 8) + { + if (!(n & 0xffffffff)) + { + k |= 32; + n >>= 32; + } + } + + if (!(n & 0xffff)) + { + k |= 16; + n >>= 16; + } + + if (!(n & 0xff)) + { + k |= 8; + n >>= 8; + } + + if (!(n & 0xf)) + { + k |= 4; + n >>= 4; + } + + if (!(n & 0x3)) + { + k |= 2; + n >>= 2; + } + + if (!(n & 0x1)) + k++; + + return k; +} + +/** Queue manipulation macros + (doubly linked circular list) + (complexity O(1)) +*/ +#define QUEUE_STARTED_NAMED(entry, name) \ + (((entry)->m_##name##next == (entry)) && ((entry)->m_##name##prev == (entry))) + +#define QUEUE_START_NAMED(entry, name) \ +{ \ + (entry)->m_##name##next = (entry); \ + (entry)->m_##name##prev = (entry); \ +} + +#define QUEUE_REMOVE_NAMED(entry, name) \ +{ \ + (entry)->m_##name##prev->m_##name##next = (entry)->m_##name##next; \ + (entry)->m_##name##next->m_##name##prev = (entry)->m_##name##prev; \ + QUEUE_START_NAMED(entry, name); \ +} + +#define QUEUE_INSERT_HEAD_NAMED(head, entry, name) \ +{ \ + (entry)->m_##name##prev = (head); \ + (entry)->m_##name##next = (head)->m_##name##next; \ + (head)->m_##name##next = (entry); \ + (entry)->m_##name##next->m_##name##prev = (entry); \ +} + +#define QUEUE_INSERT_TAIL_NAMED(head, entry, name) \ +{ \ + (entry)->m_##name##next = (head); \ + (entry)->m_##name##prev = (head)->m_##name##prev; \ + (head)->m_##name##prev = (entry); \ + (entry)->m_##name##prev->m_##name##next = (entry); \ +} + +#if defined(SAL_UNX) + +#include +#include + +typedef pthread_mutex_t rtl_memory_lock_type; + +#define RTL_MEMORY_LOCK_INIT(lock) pthread_mutex_init((lock), nullptr) +#define RTL_MEMORY_LOCK_DESTROY(lock) pthread_mutex_destroy((lock)) + +#define RTL_MEMORY_LOCK_ACQUIRE(lock) pthread_mutex_lock((lock)) +#define RTL_MEMORY_LOCK_RELEASE(lock) pthread_mutex_unlock((lock)) + +#elif defined(_WIN32) + +#define WIN32_LEAN_AND_MEAN +#include + +typedef CRITICAL_SECTION rtl_memory_lock_type; + +#define RTL_MEMORY_LOCK_INIT(lock) InitializeCriticalSection((lock)) +#define RTL_MEMORY_LOCK_DESTROY(lock) DeleteCriticalSection((lock)) + +#define RTL_MEMORY_LOCK_ACQUIRE(lock) EnterCriticalSection((lock)) +#define RTL_MEMORY_LOCK_RELEASE(lock) LeaveCriticalSection((lock)) + +#else +#error Unknown platform +#endif /* SAL_UNX | _WIN32 */ + +/** Cache creation flags. + @internal +*/ +#define RTL_CACHE_FLAG_NOMAGAZINE (1 << 13) /* w/o magazine layer */ + +#endif // INCLUDED_SAL_RTL_ALLOC_IMPL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/bootstrap.cxx b/sal/rtl/bootstrap.cxx new file mode 100644 index 000000000..12558d319 --- /dev/null +++ b/sal/rtl/bootstrap.cxx @@ -0,0 +1,992 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifdef ANDROID +#include +#endif + +#ifdef IOS +#include +#import +#include +#endif + +using osl::DirectoryItem; +using osl::FileStatus; + +namespace +{ + +struct Bootstrap_Impl; + +constexpr std::u16string_view VND_SUN_STAR_PATHNAME = u"vnd.sun.star.pathname:"; + +bool isPathnameUrl(std::u16string_view url) +{ + return o3tl::matchIgnoreAsciiCase(url, VND_SUN_STAR_PATHNAME); +} + +bool resolvePathnameUrl(OUString * url) +{ + OSL_ASSERT(url); + if (!isPathnameUrl(*url) || + (osl::FileBase::getFileURLFromSystemPath( + url->copy(VND_SUN_STAR_PATHNAME.size()), *url) == + osl::FileBase::E_None)) + { + return true; + } + *url = OUString(); + return false; +} + +enum LookupMode { + LOOKUP_MODE_NORMAL, LOOKUP_MODE_URE_BOOTSTRAP, + LOOKUP_MODE_URE_BOOTSTRAP_EXPANSION }; + +struct ExpandRequestLink { + ExpandRequestLink const * next; + Bootstrap_Impl const * file; + OUString key; +}; + +OUString expandMacros( + Bootstrap_Impl const * file, std::u16string_view text, LookupMode mode, + ExpandRequestLink const * requestStack); + +OUString recursivelyExpandMacros( + Bootstrap_Impl const * file, std::u16string_view text, LookupMode mode, + Bootstrap_Impl const * requestFile, OUString const & requestKey, + ExpandRequestLink const * requestStack) +{ + for (; requestStack; requestStack = requestStack->next) { + if (requestStack->file == requestFile && + requestStack->key == requestKey) + { + return "***RECURSION DETECTED***"; + } + } + ExpandRequestLink link = { requestStack, requestFile, requestKey }; + return expandMacros(file, text, mode, &link); +} + +struct rtl_bootstrap_NameValue +{ + OUString sName; + OUString sValue; + + rtl_bootstrap_NameValue() + {} + rtl_bootstrap_NameValue(OUString name, OUString value ) + : sName(std::move( name )), + sValue(std::move( value )) + {} +}; + +} // end namespace + +typedef std::vector NameValueVector; + +static bool find( + NameValueVector const & vector, OUString const & key, + OUString * value) +{ + OSL_ASSERT(value); + auto i = std::find_if(vector.begin(), vector.end(), + [&key](const rtl_bootstrap_NameValue& rNameValue) { return rNameValue.sName == key; }); + if (i != vector.end()) + { + *value = i->sValue; + return true; + } + return false; +} + +namespace +{ + NameValueVector rtl_bootstrap_set_vector; +} + +static bool getFromCommandLineArgs( + OUString const & key, OUString * value ) +{ + OSL_ASSERT(value); + + static NameValueVector nameValueVector = []() + { + NameValueVector tmp; + + sal_Int32 nArgCount = osl_getCommandArgCount(); + for(sal_Int32 i = 0; i < nArgCount; ++ i) + { + OUString pArg; + osl_getCommandArg( i, &pArg.pData ); + if( (pArg.startsWith("-") || pArg.startsWith("/") ) && + pArg.match("env:", 1) ) + { + sal_Int32 nIndex = pArg.indexOf( '=' ); + + if( nIndex >= 0 ) + { + rtl_bootstrap_NameValue nameValue; + nameValue.sName = pArg.copy( 5, nIndex - 5 ); + nameValue.sValue = pArg.copy( nIndex+1 ); + + if( i == nArgCount-1 && + nameValue.sValue.getLength() && + nameValue.sValue[nameValue.sValue.getLength()-1] == 13 ) + { + // avoid the 13 linefeed for the last argument, + // when the executable is started from a script, + // that was edited on windows + nameValue.sValue = nameValue.sValue.copy(0,nameValue.sValue.getLength()-1); + } + + tmp.push_back( nameValue ); + } + } + }; + return tmp; + }(); + + return find(nameValueVector, key, value); +} + +static void getExecutableDirectory_Impl(rtl_uString ** ppDirURL) +{ + OUString fileName; + osl_getExecutableFile(&(fileName.pData)); + + sal_Int32 nDirEnd = fileName.lastIndexOf('/'); + OSL_ENSURE(nDirEnd >= 0, "Cannot locate executable directory"); + + rtl_uString_newFromStr_WithLength(ppDirURL,fileName.getStr(),nDirEnd); +} + +static OUString & getIniFileName_Impl() +{ + static OUString aStaticName = []() { + OUString fileName; + +#if defined IOS + // On iOS hardcode the inifile as "rc" in the .app + // directory. Apps are self-contained anyway, there is no + // possibility to have several "applications" in the same + // installation location with different inifiles. + const char *inifile = [[@"vnd.sun.star.pathname:" stringByAppendingString: [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"rc"]] UTF8String]; + fileName = OUString(inifile, strlen(inifile), RTL_TEXTENCODING_UTF8); + resolvePathnameUrl(&fileName); +#elif defined ANDROID + // Apps are self-contained on Android, too, can as well hardcode + // it as "rc" in the "/assets" directory, i.e. inside the app's + // .apk (zip) archive as the /assets/rc file. + fileName = OUString("vnd.sun.star.pathname:/assets/rc"); + resolvePathnameUrl(&fileName); +#elif defined(EMSCRIPTEN) + fileName = OUString("vnd.sun.star.pathname:/instdir/program/sofficerc"); + resolvePathnameUrl(&fileName); +#else + if (getFromCommandLineArgs("INIFILENAME", &fileName)) + { + resolvePathnameUrl(&fileName); + } + else + { + osl_getExecutableFile(&(fileName.pData)); + + // get rid of a potential executable extension + OUString progExt = ".bin"; + if (fileName.getLength() > progExt.getLength() + && o3tl::equalsIgnoreAsciiCase(fileName.subView(fileName.getLength() - progExt.getLength()), progExt)) + { + fileName = fileName.copy(0, fileName.getLength() - progExt.getLength()); + } + + progExt = ".exe"; + if (fileName.getLength() > progExt.getLength() + && o3tl::equalsIgnoreAsciiCase(fileName.subView(fileName.getLength() - progExt.getLength()), progExt)) + { + fileName = fileName.copy(0, fileName.getLength() - progExt.getLength()); + } + + // append config file suffix + fileName += SAL_CONFIGFILE(""); + +#ifdef MACOSX + // We keep only executables in the MacOS folder, and all + // rc files in LIBO_ETC_FOLDER (typically "Resources"). + sal_Int32 off = fileName.lastIndexOf( "/MacOS/" ); + if (off != -1) + fileName = fileName.replaceAt(off + 1, strlen("MacOS"), u"" LIBO_ETC_FOLDER); +#endif + } +#endif + + return fileName; + }(); + + return aStaticName; +} + +// ensure the given file url has no final slash + +static void EnsureNoFinalSlash (OUString & url) +{ + sal_Int32 i = url.getLength(); + + if (i > 0 && url[i - 1] == '/') + url = url.copy(0, i - 1); +} + +namespace { + +struct Bootstrap_Impl +{ + sal_Int32 _nRefCount; + Bootstrap_Impl * _base_ini; + + NameValueVector _nameValueVector; + OUString _iniName; + + explicit Bootstrap_Impl (OUString const & rIniName); + ~Bootstrap_Impl(); + + static void * operator new (std::size_t n) + { return malloc (sal_uInt32(n)); } + static void operator delete (void * p , std::size_t) + { free (p); } + + bool getValue( + OUString const & key, rtl_uString ** value, + rtl_uString * defaultValue, LookupMode mode, bool override, + ExpandRequestLink const * requestStack) const; + bool getDirectValue( + OUString const & key, rtl_uString ** value, LookupMode mode, + ExpandRequestLink const * requestStack) const; + bool getAmbienceValue( + OUString const & key, rtl_uString ** value, LookupMode mode, + ExpandRequestLink const * requestStack) const; + void expandValue( + rtl_uString ** value, OUString const & text, LookupMode mode, + Bootstrap_Impl const * requestFile, OUString const & requestKey, + ExpandRequestLink const * requestStack) const; +}; + +} + +Bootstrap_Impl::Bootstrap_Impl( OUString const & rIniName ) + : _nRefCount( 0 ), + _base_ini( nullptr ), + _iniName (rIniName) +{ + OUString base_ini(getIniFileName_Impl()); + // normalize path + FileStatus status( osl_FileStatus_Mask_FileURL ); + DirectoryItem dirItem; + if (DirectoryItem::get(base_ini, dirItem) == DirectoryItem::E_None && + dirItem.getFileStatus(status) == DirectoryItem::E_None) + { + base_ini = status.getFileURL(); + if (rIniName != base_ini) + { + _base_ini = static_cast< Bootstrap_Impl * >( + rtl_bootstrap_args_open(base_ini.pData)); + } + } + SAL_INFO("sal.bootstrap", "Bootstrap_Impl(): sFile=" << _iniName); + oslFileHandle handle; + if (!_iniName.isEmpty() && + osl_openFile(_iniName.pData, &handle, osl_File_OpenFlag_Read) == osl_File_E_None) + { + rtl::ByteSequence seq; + + while (osl_readLine(handle , reinterpret_cast(&seq)) == osl_File_E_None) + { + OString line(reinterpret_cast(seq.getConstArray()), seq.getLength()); + sal_Int32 nIndex = line.indexOf('='); + if (nIndex >= 1) + { + struct rtl_bootstrap_NameValue nameValue; + nameValue.sName = OStringToOUString(o3tl::trim(line.subView(0,nIndex)), RTL_TEXTENCODING_ASCII_US); + nameValue.sValue = OStringToOUString(o3tl::trim(line.subView(nIndex+1)), RTL_TEXTENCODING_UTF8); + + SAL_INFO("sal.bootstrap", "pushing: name=" << nameValue.sName << " value=" << nameValue.sValue); + + _nameValueVector.push_back(nameValue); + } + } + osl_closeFile(handle); + } + else + { + SAL_INFO( "sal.bootstrap", "couldn't open file: " << _iniName ); + } +} + +Bootstrap_Impl::~Bootstrap_Impl() +{ + if (_base_ini) + rtl_bootstrap_args_close( _base_ini ); +} + +namespace { + +Bootstrap_Impl * get_static_bootstrap_handle() +{ + static Bootstrap_Impl* s_handle = []() { + OUString iniName(getIniFileName_Impl()); + Bootstrap_Impl* that = static_cast(rtl_bootstrap_args_open(iniName.pData)); + if (!that) + { + that = new Bootstrap_Impl(iniName); + ++that->_nRefCount; + } + return that; + }(); + + return s_handle; +} + +struct FundamentalIniData +{ + rtlBootstrapHandle ini; + + FundamentalIniData() + { + OUString uri; + ini = + (get_static_bootstrap_handle()->getValue( + "URE_BOOTSTRAP", &uri.pData, nullptr, LOOKUP_MODE_NORMAL, false, + nullptr) + && resolvePathnameUrl(&uri)) + ? rtl_bootstrap_args_open(uri.pData) : nullptr; + } + + ~FundamentalIniData() { rtl_bootstrap_args_close(ini); } + + FundamentalIniData(const FundamentalIniData&) = delete; + FundamentalIniData& operator=(const FundamentalIniData&) = delete; +}; + +FundamentalIniData& FundamentalIni() +{ + static FundamentalIniData SINGLETON; + return SINGLETON; +} + +} + +bool Bootstrap_Impl::getValue( + OUString const & key, rtl_uString ** value, rtl_uString * defaultValue, + LookupMode mode, bool override, ExpandRequestLink const * requestStack) + const +{ + if (mode == LOOKUP_MODE_NORMAL && key == "URE_BOOTSTRAP") + mode = LOOKUP_MODE_URE_BOOTSTRAP; + + if (override && getDirectValue(key, value, mode, requestStack)) + return true; + + if (key == "_OS") + { + rtl_uString_assign( + value, OUString(RTL_OS).pData); + return true; + } + + if (key == "_ARCH") + { + rtl_uString_assign( + value, OUString(RTL_ARCH).pData); + return true; + } + + if (key == "_CPPU_ENV") + { + rtl_uString_assign( + value, + (OUString( + SAL_STRINGIFY(CPPU_ENV)). + pData)); + return true; + } + +#ifdef ANDROID + if (key == "APP_DATA_DIR") + { + const char *app_data_dir = lo_get_app_data_dir(); + rtl_uString_assign( + value, OUString(app_data_dir, strlen(app_data_dir), RTL_TEXTENCODING_UTF8).pData); + return true; + } +#endif + +#ifdef IOS + if (key == "APP_DATA_DIR") + { + const char *app_data_dir = [[[[NSBundle mainBundle] bundlePath] stringByAddingPercentEncodingWithAllowedCharacters: [NSCharacterSet URLPathAllowedCharacterSet]] UTF8String]; + rtl_uString_assign( + value, OUString(app_data_dir, strlen(app_data_dir), RTL_TEXTENCODING_UTF8).pData); + return true; + } +#endif + + if (key == "ORIGIN") + { + rtl_uString_assign( + value, + _iniName.copy( + 0, std::max(0, _iniName.lastIndexOf('/'))).pData); + return true; + } + + if (getAmbienceValue(key, value, mode, requestStack)) + return true; + + if (key == "SYSUSERCONFIG") + { + OUString v; + bool b = osl::Security().getConfigDir(v); + EnsureNoFinalSlash(v); + rtl_uString_assign(value, v.pData); + return b; + } + + if (key == "SYSUSERHOME") + { + OUString v; + bool b = osl::Security().getHomeDir(v); + EnsureNoFinalSlash(v); + rtl_uString_assign(value, v.pData); + return b; + } + + if (key == "SYSBINDIR") + { + getExecutableDirectory_Impl(value); + return true; + } + + if (_base_ini != nullptr && _base_ini->getDirectValue(key, value, mode, requestStack)) + return true; + + if (!override && getDirectValue(key, value, mode, requestStack)) + return true; + + if (mode == LOOKUP_MODE_NORMAL) + { + FundamentalIniData const & d = FundamentalIni(); + Bootstrap_Impl const * b = static_cast(d.ini); + if (b != nullptr && b != this && b->getDirectValue(key, value, mode, requestStack)) + return true; + } + + if (defaultValue != nullptr) + { + rtl_uString_assign(value, defaultValue); + return true; + } + + rtl_uString_new(value); + return false; +} + +bool Bootstrap_Impl::getDirectValue( + OUString const & key, rtl_uString ** value, LookupMode mode, + ExpandRequestLink const * requestStack) const +{ + OUString v; + if (find(_nameValueVector, key, &v)) + { + expandValue(value, v, mode, this, key, requestStack); + return true; + } + + return false; +} + +bool Bootstrap_Impl::getAmbienceValue( + OUString const & key, rtl_uString ** value, LookupMode mode, + ExpandRequestLink const * requestStack) const +{ + OUString v; + bool f; + + { + osl::MutexGuard g(osl::Mutex::getGlobalMutex()); + f = find(rtl_bootstrap_set_vector, key, &v); + } + + if (f || getFromCommandLineArgs(key, &v) || + osl_getEnvironment(key.pData, &v.pData) == osl_Process_E_None) + { + expandValue(value, v, mode, nullptr, key, requestStack); + return true; + } + + return false; +} + +void Bootstrap_Impl::expandValue( + rtl_uString ** value, OUString const & text, LookupMode mode, + Bootstrap_Impl const * requestFile, OUString const & requestKey, + ExpandRequestLink const * requestStack) const +{ + rtl_uString_assign( + value, + (mode == LOOKUP_MODE_URE_BOOTSTRAP && isPathnameUrl(text) ? + text : + recursivelyExpandMacros( + this, text, + (mode == LOOKUP_MODE_URE_BOOTSTRAP ? + LOOKUP_MODE_URE_BOOTSTRAP_EXPANSION : mode), + requestFile, requestKey, requestStack)).pData); +} + +namespace { + +typedef std::unordered_map< OUString, Bootstrap_Impl * > bootstrap_map_t; +bootstrap_map_t bootstrap_map; + +} + +rtlBootstrapHandle SAL_CALL rtl_bootstrap_args_open(rtl_uString * pIniName) +{ + static o3tl::lru_map fileUrlLookupCache(16); + + OUString originalIniName( pIniName ); + OUString iniName; + + osl::ResettableMutexGuard guard(osl::Mutex::getGlobalMutex()); + auto cacheIt = fileUrlLookupCache.find(originalIniName); + bool foundInCache = cacheIt != fileUrlLookupCache.end(); + if (foundInCache) + iniName = cacheIt->second; + guard.clear(); + + // normalize path + if (!foundInCache) + { + FileStatus status(osl_FileStatus_Mask_FileURL); + DirectoryItem dirItem; + if (DirectoryItem::get(originalIniName, dirItem) != DirectoryItem::E_None || + dirItem.getFileStatus(status) != DirectoryItem::E_None) + { + return nullptr; + } + iniName = status.getFileURL(); + } + + guard.reset(); + if (!foundInCache) + fileUrlLookupCache.insert({originalIniName, iniName}); + Bootstrap_Impl * that; + auto iFind(bootstrap_map.find(iniName)); + if (iFind == bootstrap_map.end()) + { + guard.clear(); + that = new Bootstrap_Impl(iniName); + guard.reset(); + iFind = bootstrap_map.find(iniName); + if (iFind == bootstrap_map.end()) + { + ++that->_nRefCount; + ::std::pair< bootstrap_map_t::iterator, bool > insertion( + bootstrap_map.emplace(iniName, that)); + OSL_ASSERT(insertion.second); + } + else + { + Bootstrap_Impl * obsolete = that; + that = iFind->second; + ++that->_nRefCount; + guard.clear(); + delete obsolete; + } + } + else + { + that = iFind->second; + ++that->_nRefCount; + } + return static_cast< rtlBootstrapHandle >( that ); +} + +void SAL_CALL rtl_bootstrap_args_close(rtlBootstrapHandle handle) SAL_THROW_EXTERN_C() +{ + if (!handle) + return; + + Bootstrap_Impl * that = static_cast< Bootstrap_Impl * >( handle ); + + osl::MutexGuard guard(osl::Mutex::getGlobalMutex()); + OSL_ASSERT(bootstrap_map.find(that->_iniName)->second == that); + --that->_nRefCount; + + if (that->_nRefCount != 0) + return; + + std::size_t const nLeaking = 8; // only hold up to 8 files statically + if (bootstrap_map.size() > nLeaking) + { + ::std::size_t erased = bootstrap_map.erase( that->_iniName ); + if (erased != 1) { + OSL_ASSERT( false ); + } + delete that; + } +} + +sal_Bool SAL_CALL rtl_bootstrap_get_from_handle( + rtlBootstrapHandle handle, + rtl_uString * pName, + rtl_uString ** ppValue, + rtl_uString * pDefault +) +{ + osl::MutexGuard guard(osl::Mutex::getGlobalMutex()); + + bool found = false; + if(ppValue && pName) + { + if (!handle) + handle = get_static_bootstrap_handle(); + + found = static_cast< Bootstrap_Impl * >(handle)->getValue( + pName, ppValue, pDefault, LOOKUP_MODE_NORMAL, false, nullptr ); + } + + return found; +} + +void SAL_CALL rtl_bootstrap_get_iniName_from_handle ( + rtlBootstrapHandle handle, + rtl_uString ** ppIniName +) +{ + if(!ppIniName) + return; + + if(handle) + { + Bootstrap_Impl * pImpl = static_cast(handle); + rtl_uString_assign(ppIniName, pImpl->_iniName.pData); + } + else + { + const OUString & iniName = getIniFileName_Impl(); + rtl_uString_assign(ppIniName, iniName.pData); + } +} + +void SAL_CALL rtl_bootstrap_setIniFileName ( + rtl_uString * pName +) +{ + osl::MutexGuard guard(osl::Mutex::getGlobalMutex()); + OUString & file = getIniFileName_Impl(); + file = pName; +} + +sal_Bool SAL_CALL rtl_bootstrap_get ( + rtl_uString * pName, + rtl_uString ** ppValue, + rtl_uString * pDefault +) +{ + return rtl_bootstrap_get_from_handle(nullptr, pName, ppValue, pDefault); +} + +void SAL_CALL rtl_bootstrap_set ( + rtl_uString * pName, + rtl_uString * pValue +) +{ + const OUString name(pName); + const OUString value(pValue); + + osl::MutexGuard guard(osl::Mutex::getGlobalMutex()); + + for (auto & item : rtl_bootstrap_set_vector) + { + if (item.sName == name) + { + item.sValue = value; + return; + } + } + + SAL_INFO("sal.bootstrap", "explicitly getting: name=" << name << " value=" <(handle), + OUString::unacquired(macro), + LOOKUP_MODE_NORMAL, nullptr)); + rtl_uString_assign(macro, expanded.pData); +} + +void SAL_CALL rtl_bootstrap_expandMacros(rtl_uString ** macro) +{ + rtl_bootstrap_expandMacros_from_handle(nullptr, macro); +} + +void rtl_bootstrap_encode(rtl_uString const * value, rtl_uString ** encoded) +{ + OSL_ASSERT(value); + OUStringBuffer b(value->length+5); + for (sal_Int32 i = 0; i < value->length; ++i) + { + sal_Unicode c = value->buffer[i]; + if (c == '$' || c == '\\') + b.append('\\'); + + b.append(c); + } + + rtl_uString_assign(encoded, b.makeStringAndClear().pData); +} + +namespace { + +int hex(sal_Unicode c) +{ + return + c >= '0' && c <= '9' ? c - '0' : + c >= 'A' && c <= 'F' ? c - 'A' + 10 : + c >= 'a' && c <= 'f' ? c - 'a' + 10 : -1; +} + +sal_Unicode read(std::u16string_view text, std::size_t * pos, bool * escaped) +{ + OSL_ASSERT(pos && *pos < text.length() && escaped); + sal_Unicode c = text[(*pos)++]; + if (c == '\\') + { + int n1, n2, n3, n4; + if (*pos < text.length() - 4 && text[*pos] == 'u' && + ((n1 = hex(text[*pos + 1])) >= 0) && + ((n2 = hex(text[*pos + 2])) >= 0) && + ((n3 = hex(text[*pos + 3])) >= 0) && + ((n4 = hex(text[*pos + 4])) >= 0)) + { + *pos += 5; + *escaped = true; + return static_cast< sal_Unicode >( + (n1 << 12) | (n2 << 8) | (n3 << 4) | n4); + } + + if (*pos < text.length()) + { + *escaped = true; + return text[(*pos)++]; + } + } + + *escaped = false; + return c; +} + +OUString lookup( + Bootstrap_Impl const * file, LookupMode mode, bool override, + OUString const & key, ExpandRequestLink const * requestStack) +{ + OUString v; + (file == nullptr ? get_static_bootstrap_handle() : file)->getValue( + key, &v.pData, nullptr, mode, override, requestStack); + return v; +} + +OUString expandMacros( + Bootstrap_Impl const * file, std::u16string_view text, LookupMode mode, + ExpandRequestLink const * requestStack) +{ + SAL_INFO("sal.bootstrap", "expandMacros called with: " << OUString(text)); + OUStringBuffer buf(2048); + + for (std::size_t i = 0; i < text.length();) + { + bool escaped; + sal_Unicode c = read(text, &i, &escaped); + if (escaped || c != '$') + { + buf.append(c); + } + else + { + if (i < text.length() && text[i] == '{') + { + ++i; + std::size_t p = i; + sal_Int32 nesting = 0; + OUString seg[3]; + int n = 0; + + while (i < text.length()) + { + std::size_t j = i; + c = read(text, &i, &escaped); + + if (!escaped) + { + switch (c) + { + case '{': + ++nesting; + break; + case '}': + if (nesting == 0) + { + seg[n++] = text.substr(p, j - p); + goto done; + } + else + { + --nesting; + } + break; + case ':': + if (nesting == 0 && n < 2) + { + seg[n++] = text.substr(p, j - p); + p = i; + } + break; + } + } + } + done: + for (int j = 0; j < n; ++j) + { + seg[j] = expandMacros(file, seg[j], mode, requestStack); + } + + if (n == 3 && seg[0] != ".override" && seg[1].isEmpty()) + { + // For backward compatibility, treat ${file::key} the + // same as just ${file:key}: + seg[1] = seg[2]; + n = 2; + } + + if (n == 1) + { + buf.append(lookup(file, mode, false, seg[0], requestStack)); + } + else if (n == 2) + { + rtl::Bootstrap b(seg[0]); + Bootstrap_Impl * f = static_cast< Bootstrap_Impl * >(b.getHandle()); + buf.append(lookup(f, mode, false, seg[1], requestStack)); + } + else if (n == 3 && seg[0] == ".override") + { + rtl::Bootstrap b(seg[1]); + Bootstrap_Impl * f = static_cast< Bootstrap_Impl * >(b.getHandle()); + buf.append(lookup(f, mode, f != nullptr, seg[2], requestStack)); + } + else + { + // Going through osl::Profile, this code erroneously + // does not recursively expand macros in the resulting + // replacement text (and if it did, it would fail to + // detect cycles that pass through here): + buf.append( + OStringToOUString( + osl::Profile(seg[0]).readString( + OUStringToOString( + seg[1], RTL_TEXTENCODING_UTF8), + OUStringToOString( + seg[2], RTL_TEXTENCODING_UTF8), + OString()), + RTL_TEXTENCODING_UTF8)); + } + } + else + { + OUStringBuffer kbuf(sal_Int32(text.length())); + for (; i < text.length();) + { + std::size_t j = i; + c = read(text, &j, &escaped); + if (!escaped && + (c == ' ' || c == '$' || c == '-' || c == '/' || + c == ';' || c == '\\')) + { + break; + } + + kbuf.append(c); + i = j; + } + + buf.append( + lookup( + file, mode, false, kbuf.makeStringAndClear(), + requestStack)); + } + } + } + + OUString result(buf.makeStringAndClear()); + SAL_INFO("sal.bootstrap", "expandMacros result: " << result); + + return result; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/byteseq.cxx b/sal/rtl/byteseq.cxx new file mode 100644 index 000000000..3c4967d54 --- /dev/null +++ b/sal/rtl/byteseq.cxx @@ -0,0 +1,246 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +#include +#include + +#include + +/* static data to be referenced by all empty strings + * the refCount is predefined to 1 and must never become 0 ! + */ +static sal_Sequence aEmpty_rtl_ByteSeq = +{ + 1, /* sal_Int32 refCount; */ + 0, /* sal_Int32 length; */ + { 0 } /* sal_Unicode buffer[1]; */ +}; + +void SAL_CALL rtl_byte_sequence_reference2One( + sal_Sequence ** ppSequence ) SAL_THROW_EXTERN_C() +{ + sal_Sequence * pSequence; + + OSL_ENSURE( ppSequence, "### null ptr!" ); + pSequence = *ppSequence; + + if (pSequence->nRefCount > 1) + { + sal_Sequence *pNew; + sal_Int32 nElements = pSequence->nElements; + if (nElements) + { + pNew = static_cast(malloc( SAL_SEQUENCE_HEADER_SIZE + nElements )); + + if ( pNew != nullptr ) + memcpy( pNew->elements, pSequence->elements, nElements ); + + if (! osl_atomic_decrement( &pSequence->nRefCount )) + free( pSequence ); + } + else + { + pNew = static_cast(malloc( SAL_SEQUENCE_HEADER_SIZE )); + } + + if ( pNew != nullptr ) + { + pNew->nRefCount = 1; + pNew->nElements = nElements; + } + + *ppSequence = pNew; + } +} + +void SAL_CALL rtl_byte_sequence_realloc( + sal_Sequence ** ppSequence, sal_Int32 nSize ) SAL_THROW_EXTERN_C() +{ + sal_Sequence * pSequence; + sal_Int32 nElements; + + assert(ppSequence && "### null ptr!"); + pSequence = *ppSequence; + nElements = pSequence->nElements; + + if (nElements == nSize) + return; + + if (pSequence->nRefCount > 1) // split + { + sal_Sequence *pNew = static_cast(malloc( SAL_SEQUENCE_HEADER_SIZE + nSize )); + + if ( pNew != nullptr ) + { + if (nSize > nElements) + { + memcpy( pNew->elements, pSequence->elements, nElements ); + memset( pNew->elements + nElements, 0, nSize - nElements ); + } + else + { + memcpy( pNew->elements, pSequence->elements, nSize ); + } + } + + if (! osl_atomic_decrement( &pSequence->nRefCount )) + free( pSequence ); + pSequence = pNew; + } + else + { + pSequence = static_cast(realloc( + pSequence, SAL_SEQUENCE_HEADER_SIZE + nSize )); + } + + if ( pSequence != nullptr ) + { + pSequence->nRefCount = 1; + pSequence->nElements = nSize; + } + + *ppSequence = pSequence; +} + +void SAL_CALL rtl_byte_sequence_acquire( sal_Sequence *pSequence ) + SAL_THROW_EXTERN_C() +{ + OSL_ASSERT( pSequence ); + osl_atomic_increment( &(pSequence->nRefCount) ); +} + +void SAL_CALL rtl_byte_sequence_release( sal_Sequence *pSequence ) + SAL_THROW_EXTERN_C() +{ + if ( pSequence != nullptr ) + { + if (! osl_atomic_decrement( &(pSequence->nRefCount )) ) + { + free( pSequence ); + } + } +} + +void SAL_CALL rtl_byte_sequence_construct( sal_Sequence **ppSequence , sal_Int32 nLength ) + SAL_THROW_EXTERN_C() +{ + OSL_ASSERT( ppSequence ); + if( *ppSequence ) + { + rtl_byte_sequence_release( *ppSequence ); + *ppSequence = nullptr; + } + + if( nLength ) + { + *ppSequence = static_cast(rtl_allocateZeroMemory( SAL_SEQUENCE_HEADER_SIZE + nLength )); + + if ( *ppSequence != nullptr ) + { + (*ppSequence)->nRefCount = 1; + (*ppSequence)->nElements = nLength; + } + } + else + { + *ppSequence = &aEmpty_rtl_ByteSeq; + rtl_byte_sequence_acquire( *ppSequence ); + } +} + +void SAL_CALL rtl_byte_sequence_constructNoDefault( sal_Sequence **ppSequence , sal_Int32 nLength ) + SAL_THROW_EXTERN_C() +{ + OSL_ASSERT( ppSequence ); + if( *ppSequence ) + { + rtl_byte_sequence_release( *ppSequence ); + *ppSequence = nullptr; + } + + *ppSequence = static_cast(malloc( SAL_SEQUENCE_HEADER_SIZE + nLength )); + + if ( *ppSequence != nullptr ) + { + (*ppSequence)->nRefCount = 1; + (*ppSequence)->nElements = nLength; + } +} + +void SAL_CALL rtl_byte_sequence_constructFromArray( + sal_Sequence **ppSequence, const sal_Int8 *pData , sal_Int32 nLength ) + SAL_THROW_EXTERN_C() +{ + rtl_byte_sequence_constructNoDefault( ppSequence , nLength ); + if ( *ppSequence != nullptr && nLength != 0 ) + memcpy( (*ppSequence)->elements, pData, nLength ); +} + +void SAL_CALL rtl_byte_sequence_assign( sal_Sequence **ppSequence , sal_Sequence *pSequence ) + SAL_THROW_EXTERN_C() +{ + if ( *ppSequence != pSequence) + { + if( *ppSequence ) + { + rtl_byte_sequence_release( *ppSequence ); + } + *ppSequence = pSequence; + rtl_byte_sequence_acquire( *ppSequence ); + } +// else +// nothing to do + +} + +sal_Bool SAL_CALL rtl_byte_sequence_equals( sal_Sequence *pSequence1 , sal_Sequence *pSequence2 ) + SAL_THROW_EXTERN_C() +{ + assert(pSequence1 && pSequence2); + if (pSequence1 == pSequence2) + { + return true; + } + if (pSequence1->nElements != pSequence2->nElements) + { + return false; + } + return + memcmp( + pSequence1->elements, pSequence2->elements, pSequence1->nElements ) + == 0; +} + +const sal_Int8 *SAL_CALL rtl_byte_sequence_getConstArray( sal_Sequence *pSequence ) + SAL_THROW_EXTERN_C() +{ + return reinterpret_cast(pSequence->elements); +} + +sal_Int32 SAL_CALL rtl_byte_sequence_getLength( sal_Sequence *pSequence ) + SAL_THROW_EXTERN_C() +{ + return pSequence->nElements; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/cipher.cxx b/sal/rtl/cipher.cxx new file mode 100644 index 000000000..bb0884b7a --- /dev/null +++ b/sal/rtl/cipher.cxx @@ -0,0 +1,1433 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined LIBO_CIPHER_OPENSSL_BACKEND +#include +#endif + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +#define RTL_CIPHER_NTOHL(c, l) \ + ((l) = (static_cast(*((c)++))) << 24, \ + (l) |= (static_cast(*((c)++))) << 16, \ + (l) |= (static_cast(*((c)++))) << 8, \ + (l) |= (static_cast(*((c)++)))) + +#define RTL_CIPHER_HTONL(l, c) \ + (*((c)++) = static_cast(((l) >> 24) & 0xff), \ + *((c)++) = static_cast(((l) >> 16) & 0xff), \ + *((c)++) = static_cast(((l) >> 8) & 0xff), \ + *((c)++) = static_cast(((l) ) & 0xff)) + +#define RTL_CIPHER_NTOHL64(c, xl, xr, n) \ +{ \ + (xl) = (xr) = 0; \ + (c) += (n); \ + switch ((n)) \ + { \ + case 8: (xr) = (static_cast(*(--(c)))); \ + [[fallthrough]]; \ + case 7: (xr) |= (static_cast(*(--(c)))) << 8; \ + [[fallthrough]]; \ + case 6: (xr) |= (static_cast(*(--(c)))) << 16; \ + [[fallthrough]]; \ + case 5: (xr) |= (static_cast(*(--(c)))) << 24; \ + [[fallthrough]]; \ + case 4: (xl) = (static_cast(*(--(c)))); \ + [[fallthrough]]; \ + case 3: (xl) |= (static_cast(*(--(c)))) << 8; \ + [[fallthrough]]; \ + case 2: (xl) |= (static_cast(*(--(c)))) << 16; \ + [[fallthrough]]; \ + case 1: (xl) |= (static_cast(*(--(c)))) << 24; \ + } \ +} + +#define RTL_CIPHER_HTONL64(xl, xr, c, n) \ +{ \ + (c) += (n); \ + switch ((n)) \ + { \ + case 8: *(--(c)) = static_cast(((xr) ) & 0xff); \ + [[fallthrough]]; \ + case 7: *(--(c)) = static_cast(((xr) >> 8) & 0xff); \ + [[fallthrough]]; \ + case 6: *(--(c)) = static_cast(((xr) >> 16) & 0xff); \ + [[fallthrough]]; \ + case 5: *(--(c)) = static_cast(((xr) >> 24) & 0xff); \ + [[fallthrough]]; \ + case 4: *(--(c)) = static_cast(((xl) ) & 0xff); \ + [[fallthrough]]; \ + case 3: *(--(c)) = static_cast(((xl) >> 8) & 0xff); \ + [[fallthrough]]; \ + case 2: *(--(c)) = static_cast(((xl) >> 16) & 0xff); \ + [[fallthrough]]; \ + case 1: *(--(c)) = static_cast(((xl) >> 24) & 0xff); \ + } \ +} +#endif + +typedef rtlCipherError(cipher_init_t) ( + rtlCipher Cipher, + rtlCipherDirection Direction, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + const sal_uInt8 *pArgData, sal_Size nArgLen); + +typedef rtlCipherError(cipher_update_t) ( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen); + +typedef void (cipher_delete_t) (rtlCipher Cipher); + +namespace { + +struct Cipher_Impl +{ + rtlCipherAlgorithm m_algorithm; + rtlCipherDirection m_direction; + rtlCipherMode m_mode; + + cipher_init_t *m_init; + cipher_update_t *m_encode; + cipher_update_t *m_decode; + cipher_delete_t *m_delete; +}; + +} + +rtlCipher SAL_CALL rtl_cipher_create( + rtlCipherAlgorithm Algorithm, + rtlCipherMode Mode) SAL_THROW_EXTERN_C() +{ + rtlCipher Cipher = nullptr; + switch (Algorithm) + { + case rtl_Cipher_AlgorithmBF: + Cipher = rtl_cipher_createBF (Mode); + break; + + case rtl_Cipher_AlgorithmARCFOUR: + Cipher = rtl_cipher_createARCFOUR (Mode); + break; + + default: /* rtl_Cipher_AlgorithmInvalid */ + break; + } + return Cipher; +} + +rtlCipherError SAL_CALL rtl_cipher_init( + rtlCipher Cipher, + rtlCipherDirection Direction, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + const sal_uInt8 *pArgData, sal_Size nArgLen) SAL_THROW_EXTERN_C() +{ + Cipher_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (!pImpl->m_init) + return rtl_Cipher_E_Unknown; + + return (pImpl->m_init)( + Cipher, Direction, pKeyData, nKeyLen, pArgData, nArgLen); +} + +rtlCipherError SAL_CALL rtl_cipher_encode( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C() +{ + Cipher_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (!pImpl->m_encode) + return rtl_Cipher_E_Unknown; + + return (pImpl->m_encode)(Cipher, pData, nDatLen, pBuffer, nBufLen); +} + +rtlCipherError SAL_CALL rtl_cipher_decode( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C() +{ + Cipher_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (!pImpl->m_decode) + return rtl_Cipher_E_Unknown; + + return (pImpl->m_decode)(Cipher, pData, nDatLen, pBuffer, nBufLen); +} + +void SAL_CALL rtl_cipher_destroy(rtlCipher Cipher) SAL_THROW_EXTERN_C() +{ + Cipher_Impl *pImpl = static_cast(Cipher); + if (pImpl && pImpl->m_delete) + pImpl->m_delete(Cipher); +} + +namespace { + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +#define CIPHER_ROUNDS_BF 16 + +struct CipherKeyBF +{ + sal_uInt32 m_S[4][256]; + sal_uInt32 m_P[CIPHER_ROUNDS_BF + 2]; +}; +#endif + +struct CipherContextBF +{ +#if defined LIBO_CIPHER_OPENSSL_BACKEND + EVP_CIPHER_CTX * m_context; +#else + CipherKeyBF m_key; + union + { + sal_uInt32 m_long[2]; + sal_uInt8 m_byte[8]; + } m_iv; + sal_uInt32 m_offset; +#endif +}; + +struct CipherBF_Impl +{ + Cipher_Impl m_cipher; + CipherContextBF m_context; +}; + +} + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +static rtlCipherError BF_init( + CipherContextBF *ctx, + rtlCipherMode eMode, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + const sal_uInt8 *pArgData, sal_Size nArgLen); +#endif + +static rtlCipherError BF_update( + CipherContextBF *ctx, + rtlCipherMode eMode, + rtlCipherDirection eDirection, + const sal_uInt8 *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen); + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +static void BF_updateECB( + CipherContextBF *ctx, + rtlCipherDirection direction, + const sal_uInt8 *pData, + sal_uInt8 *pBuffer, + sal_Size nLength); + +static void BF_updateCBC( + CipherContextBF *ctx, + rtlCipherDirection direction, + const sal_uInt8 *pData, + sal_uInt8 *pBuffer, + sal_Size nLength); + +static void BF_updateCFB( + CipherContextBF *ctx, + rtlCipherDirection direction, + const sal_uInt8 *pData, + sal_uInt8 *pBuffer); + +static void BF_encode(CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr); + +static void BF_decode(CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr); + +static sal_uInt32 BF(CipherKeyBF *key, sal_uInt32 x); + +const CipherKeyBF BF_key = +{ + /* S */ + { + /* S[0] */ + { + /* 0 */ + 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, + 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, + 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, + 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, + + /* 1 */ + 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL, + 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L, + 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL, + 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL, + + /* 2 */ + 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L, + 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L, + 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL, + 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL, + + /* 3 */ + 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL, + 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L, + 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L, + 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L, + + /* 4 */ + 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L, + 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L, + 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL, + 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L, + + /* 5 */ + 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L, + 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L, + 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L, + 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL, + + /* 6 */ + 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L, + 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL, + 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL, + 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L, + + /* 7 */ + 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL, + 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L, + 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL, + 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L, + + /* 8 */ + 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L, + 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL, + 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L, + 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L, + + /* 9 */ + 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL, + 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L, + 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL, + 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L, + + /* A */ + 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L, + 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL, + 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L, + 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L, + + /* B */ + 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L, + 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L, + 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L, + 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL, + + /* C */ + 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL, + 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L, + 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L, + 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L, + + /* D */ + 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L, + 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL, + 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L, + 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL, + + /* E */ + 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL, + 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L, + 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L, + 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L, + + /* F */ + 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, + 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, + 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, + 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL + }, + + /* S[1] */ + { + 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, + 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, + 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, + 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, + + 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L, + 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L, + 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL, + 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L, + + 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L, + 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L, + 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL, + 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL, + + 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L, + 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L, + 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L, + 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L, + + 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL, + 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL, + 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL, + 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L, + + 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL, + 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L, + 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L, + 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL, + + 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL, + 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L, + 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL, + 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L, + + 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL, + 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL, + 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L, + 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L, + + 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L, + 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L, + 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L, + 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L, + + 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L, + 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL, + 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L, + 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL, + + 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L, + 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L, + 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L, + 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L, + + 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L, + 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L, + 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L, + 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L, + + 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L, + 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L, + 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L, + 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L, + + 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L, + 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L, + 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L, + 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L, + + 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL, + 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL, + 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L, + 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL, + + 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, + 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, + 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, + 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L + }, + + /* S[2] */ + { + 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, + 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, + 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, + 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, + + 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L, + 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L, + 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL, + 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL, + + 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL, + 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L, + 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L, + 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL, + + 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L, + 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL, + 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L, + 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL, + + 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L, + 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL, + 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L, + 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL, + + 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L, + 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L, + 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL, + 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L, + + 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L, + 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L, + 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L, + 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL, + + 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L, + 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL, + 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L, + 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL, + + 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L, + 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL, + 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL, + 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL, + + 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L, + 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L, + 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL, + 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL, + + 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL, + 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL, + 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL, + 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L, + + 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L, + 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L, + 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L, + 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL, + + 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL, + 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L, + 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L, + 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L, + + 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L, + 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L, + 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L, + 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L, + + 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L, + 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L, + 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L, + 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL, + + 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, + 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, + 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, + 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L + }, + + /* S[3] */ + { + 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, + 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, + 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, + 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, + + 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L, + 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L, + 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L, + 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L, + + 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L, + 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L, + 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L, + 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L, + + 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L, + 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L, + 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L, + 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL, + + 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL, + 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L, + 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL, + 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL, + + 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL, + 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L, + 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL, + 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL, + + 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L, + 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L, + 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L, + 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L, + + 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL, + 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL, + 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L, + 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L, + + 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L, + 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL, + 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L, + 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L, + + 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L, + 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL, + 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L, + 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L, + + 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L, + 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL, + 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL, + 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L, + + 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L, + 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L, + 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L, + 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL, + + 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L, + 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL, + 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL, + 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L, + + 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L, + 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL, + 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L, + 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL, + + 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L, + 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL, + 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L, + 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L, + + 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, + 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, + 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, + 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L + } + }, + + /* P */ + { + 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, + 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, + 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, + 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, + 0x9216D5D9L, 0x8979FB1BL + } +}; +#endif + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +static rtlCipherError BF_init( + CipherContextBF *ctx, + rtlCipherMode eMode, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + const sal_uInt8 *pArgData, sal_Size nArgLen) +{ + CipherKeyBF *key; + sal_uInt32 D, DL, DR; + sal_uInt16 i, j, k; + + key = &(ctx->m_key); + + memcpy(key, &BF_key, sizeof (CipherKeyBF)); + memset(&(ctx->m_iv), 0, sizeof(ctx->m_iv)); + ctx->m_offset = 0; + + for (i = 0, k = 0; i < CIPHER_ROUNDS_BF + 2; ++i) + { + D = 0; + for (j = 0; j < 4; ++j) + { + D = ((D << 8) | pKeyData[k]); + k++; + if (k >= nKeyLen) + k = 0; + } + key->m_P[i] ^= D; + } + + rtl_secureZeroMemory(&DL, sizeof(DL)); + rtl_secureZeroMemory(&DR, sizeof(DR)); + + for (i = 0; i < CIPHER_ROUNDS_BF + 2; i += 2) + { + BF_encode(key, &DL, &DR); + key->m_P[i ] = DL; + key->m_P[i + 1] = DR; + } + + for (i = 0; i < 4; ++i) + { + for (k = 0; k < 256; k += 2) + { + BF_encode(key, &DL, &DR); + key->m_S[i][k ] = DL; + key->m_S[i][k + 1] = DR; + } + } + + if (pArgData && nArgLen) + { + nArgLen = std::min(nArgLen, 8); + if (eMode == rtl_Cipher_ModeStream) + { + memcpy(ctx->m_iv.m_byte, pArgData, nArgLen); + } + else + { + RTL_CIPHER_NTOHL64 (pArgData, DL, DR, nArgLen); + ctx->m_iv.m_long[0] = DL; + ctx->m_iv.m_long[1] = DR; + } + } + + return rtl_Cipher_E_None; +} +#endif + +static rtlCipherError BF_update( + CipherContextBF *ctx, + rtlCipherMode eMode, + rtlCipherDirection eDirection, + const sal_uInt8 *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) +{ + /* Check arguments. */ + if (!pData || !pBuffer) + return rtl_Cipher_E_Argument; + + if ((nDatLen <= 0) || (nDatLen > nBufLen)) + return rtl_Cipher_E_BufferSize; + + /* Update. */ +#if defined LIBO_CIPHER_OPENSSL_BACKEND + assert(eMode == rtl_Cipher_ModeStream); + (void) eMode; + (void) eDirection; + while (nDatLen > o3tl::make_unsigned(std::numeric_limits::max())) { + int outl; + if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, std::numeric_limits::max()) + == 0) + { + return rtl_Cipher_E_Unknown; + } + assert(outl == std::numeric_limits::max()); + pData += std::numeric_limits::max(); + nDatLen -= std::numeric_limits::max(); + pBuffer += std::numeric_limits::max(); + } + int outl; + if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, static_cast(nDatLen)) == 0) + { + return rtl_Cipher_E_Unknown; + } + assert(outl == static_cast(nDatLen)); + // A final call to EVP_CipherFinal_ex is intentionally missing; it wouldn't fit the rtl/cipher.h + // interface, and is hopefully not needed, as each individual Blowfish CFB update step doesn't + // hold back any data that would need to be finally flushed. +#else + if (eMode == rtl_Cipher_ModeECB) + { + /* Block mode. */ + while (nDatLen > 8) + { + BF_updateECB(ctx, eDirection, pData, pBuffer, 8); + nDatLen -= 8; + pData += 8; + pBuffer += 8; + } + BF_updateECB(ctx, eDirection, pData, pBuffer, nDatLen); + } + else if (eMode == rtl_Cipher_ModeCBC) + { + /* Block mode. */ + while (nDatLen > 8) + { + BF_updateCBC (ctx, eDirection, pData, pBuffer, 8); + nDatLen -= 8; + pData += 8; + pBuffer += 8; + } + BF_updateCBC (ctx, eDirection, pData, pBuffer, nDatLen); + } + else + { + /* Stream mode. */ + while (nDatLen > 0) + { + BF_updateCFB (ctx, eDirection, pData, pBuffer); + nDatLen -= 1; + pData += 1; + pBuffer += 1; + } + } +#endif + return rtl_Cipher_E_None; +} + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +static void BF_updateECB( + CipherContextBF *ctx, + rtlCipherDirection direction, + const sal_uInt8 *pData, + sal_uInt8 *pBuffer, + sal_Size nLength) +{ + CipherKeyBF *key; + sal_uInt32 DL, DR; + + key = &(ctx->m_key); + if (direction == rtl_Cipher_DirectionEncode) + { + RTL_CIPHER_NTOHL64(pData, DL, DR, nLength); + + BF_encode(key, &DL, &DR); + + RTL_CIPHER_HTONL(DL, pBuffer); + RTL_CIPHER_HTONL(DR, pBuffer); + } + else + { + RTL_CIPHER_NTOHL(pData, DL); + RTL_CIPHER_NTOHL(pData, DR); + + BF_decode(key, &DL, &DR); + + RTL_CIPHER_HTONL64(DL, DR, pBuffer, nLength); + } + rtl_secureZeroMemory(&DL, sizeof(DL)); + rtl_secureZeroMemory(&DR, sizeof(DR)); +} + +static void BF_updateCBC( + CipherContextBF *ctx, + rtlCipherDirection direction, + const sal_uInt8 *pData, + sal_uInt8 *pBuffer, + sal_Size nLength) +{ + CipherKeyBF *key; + sal_uInt32 DL, DR; + + key = &(ctx->m_key); + if (direction == rtl_Cipher_DirectionEncode) + { + RTL_CIPHER_NTOHL64(pData, DL, DR, nLength); + + DL ^= ctx->m_iv.m_long[0]; + DR ^= ctx->m_iv.m_long[1]; + + BF_encode(key, &DL, &DR); + + ctx->m_iv.m_long[0] = DL; + ctx->m_iv.m_long[1] = DR; + + RTL_CIPHER_HTONL(DL, pBuffer); + RTL_CIPHER_HTONL(DR, pBuffer); + } + else + { + sal_uInt32 IVL, IVR; + + RTL_CIPHER_NTOHL(pData, DL); + RTL_CIPHER_NTOHL(pData, DR); + + IVL = DL; + IVR = DR; + + BF_decode(key, &DL, &DR); + + DL ^= ctx->m_iv.m_long[0]; + DR ^= ctx->m_iv.m_long[1]; + + ctx->m_iv.m_long[0] = IVL; + ctx->m_iv.m_long[1] = IVR; + + RTL_CIPHER_HTONL64(DL, DR, pBuffer, nLength); + } + rtl_secureZeroMemory(&DL, sizeof(DL)); + rtl_secureZeroMemory(&DR, sizeof(DR)); +} + +static void BF_updateCFB( + CipherContextBF *ctx, + rtlCipherDirection direction, + const sal_uInt8 *pData, + sal_uInt8 *pBuffer) +{ + sal_uInt8 *iv; + sal_uInt32 k; + + iv = ctx->m_iv.m_byte; + k = ctx->m_offset; + + if (k == 0) + { + sal_uInt32 IVL, IVR; + + RTL_CIPHER_NTOHL64(iv, IVL, IVR, 8); + BF_encode(&(ctx->m_key), &IVL, &IVR); + RTL_CIPHER_HTONL64(IVL, IVR, iv, 8); + + rtl_secureZeroMemory(&IVL, sizeof(IVL)); + rtl_secureZeroMemory(&IVR, sizeof(IVR)); + } + + if (direction == rtl_Cipher_DirectionEncode) + { + iv[k] ^= *pData; + *pBuffer = iv[k]; + } + else + { + sal_uInt8 c = iv[k]; + iv[k] = *pData; + *pBuffer = *pData ^ c; + } + + ctx->m_offset = ((k + 1) & 0x07); + iv = nullptr; +} + +static void BF_encode( + CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr) +{ + sal_uInt32 t, XL, XR; + sal_uInt16 i; + + XL = *xl; + XR = *xr; + + for (i = 0; i < CIPHER_ROUNDS_BF; ++i) + { + XL ^= key->m_P[i]; + XR ^= BF (key, XL); + + t = XL; + XL = XR; + XR = t; + } + + t = XL; + XL = XR; + XR = t; + + XR ^= key->m_P[CIPHER_ROUNDS_BF ]; + XL ^= key->m_P[CIPHER_ROUNDS_BF + 1]; + + *xl = XL; + *xr = XR; + +} + +static void BF_decode( + CipherKeyBF *key, sal_uInt32 *xl, sal_uInt32 *xr) +{ + sal_uInt32 t, XL, XR; + sal_uInt16 i; + + XL = *xl; + XR = *xr; + + for (i = CIPHER_ROUNDS_BF + 1; i > 1; --i) + { + XL ^= key->m_P[i]; + XR ^= BF (key, XL); + + t = XL; + XL = XR; + XR = t; + } + + t = XL; + XL = XR; + XR = t; + + XR ^= key->m_P[1]; + XL ^= key->m_P[0]; + + *xl = XL; + *xr = XR; + +} + +static sal_uInt32 BF(CipherKeyBF *key, sal_uInt32 x) +{ + sal_uInt16 a, b, c, d; + sal_uInt32 y; + + d = static_cast(x & 0x00ff); + x >>= 8; + c = static_cast(x & 0x00ff); + x >>= 8; + b = static_cast(x & 0x00ff); + x >>= 8; + a = static_cast(x & 0x00ff); + + y = key->m_S[0][a]; + y += key->m_S[1][b]; + y ^= key->m_S[2][c]; + y += key->m_S[3][d]; + + return y; +} +#endif + +/** + rtl_cipherBF (Blowfish) implementation. + + Reference: Bruce Schneier: Applied Cryptography, 2nd edition, ch. 14.3 +*/ +rtlCipher SAL_CALL rtl_cipher_createBF(rtlCipherMode Mode) SAL_THROW_EXTERN_C() +{ + CipherBF_Impl *pImpl = nullptr; + + if (Mode == rtl_Cipher_ModeInvalid) + return nullptr; +#if defined LIBO_CIPHER_OPENSSL_BACKEND + if (Mode != rtl_Cipher_ModeStream) { + // Cannot easily support ModeECB and ModeCBC, and they aren't used in the LO code at least: + return nullptr; + } +#endif + + pImpl = static_cast(rtl_allocateZeroMemory(sizeof (CipherBF_Impl))); + if (pImpl) + { + pImpl->m_cipher.m_algorithm = rtl_Cipher_AlgorithmBF; + pImpl->m_cipher.m_direction = rtl_Cipher_DirectionInvalid; + pImpl->m_cipher.m_mode = Mode; + + pImpl->m_cipher.m_init = rtl_cipher_initBF; + pImpl->m_cipher.m_encode = rtl_cipher_encodeBF; + pImpl->m_cipher.m_decode = rtl_cipher_decodeBF; + pImpl->m_cipher.m_delete = rtl_cipher_destroyBF; + } + return static_cast(pImpl); +} + +rtlCipherError SAL_CALL rtl_cipher_initBF( + rtlCipher Cipher, + rtlCipherDirection Direction, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + const sal_uInt8 *pArgData, sal_Size nArgLen) SAL_THROW_EXTERN_C() +{ + CipherBF_Impl *pImpl = static_cast(Cipher); + + if (!pImpl || !pKeyData) + return rtl_Cipher_E_Argument; + + if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmBF) + return rtl_Cipher_E_Algorithm; + + if (Direction != rtl_Cipher_DirectionInvalid) + pImpl->m_cipher.m_direction = Direction; + else + return rtl_Cipher_E_Direction; + +#if defined LIBO_CIPHER_OPENSSL_BACKEND + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionBoth) { + // Cannot easily support DirectionBoth, and it isn't used in the LO code at least: + return rtl_Cipher_E_Direction; + } + if (nKeyLen > o3tl::make_unsigned(std::numeric_limits::max())) { + return rtl_Cipher_E_BufferSize; + } + if (pImpl->m_context.m_context != nullptr) { + EVP_CIPHER_CTX_free(pImpl->m_context.m_context); + } + pImpl->m_context.m_context = EVP_CIPHER_CTX_new(); + if (pImpl->m_context.m_context == nullptr) { + return rtl_Cipher_E_Memory; + } + unsigned char iv[8]; + auto const n = std::min(nArgLen, sal_Size(8)); + std::memcpy(iv, pArgData, n); + std::memset(iv + n, 0, 8 - n); + if (EVP_CipherInit_ex( + pImpl->m_context.m_context, EVP_bf_cfb(), nullptr, nullptr, iv, + pImpl->m_cipher.m_direction == rtl_Cipher_DirectionDecode ? 0 : 1) + == 0) + { + return rtl_Cipher_E_Unknown; + } + if (EVP_CIPHER_CTX_set_key_length(pImpl->m_context.m_context, static_cast(nKeyLen)) == 0) { + return rtl_Cipher_E_Unknown; + } + if (EVP_CipherInit_ex(pImpl->m_context.m_context, nullptr, nullptr, pKeyData, nullptr, -1) == 0) + { + return rtl_Cipher_E_Unknown; + } + return rtl_Cipher_E_None; +#else + return BF_init( + &(pImpl->m_context), pImpl->m_cipher.m_mode, + pKeyData, nKeyLen, pArgData, nArgLen); +#endif +} + +rtlCipherError SAL_CALL rtl_cipher_encodeBF( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C() +{ + CipherBF_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmBF) + return rtl_Cipher_E_Algorithm; + + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid) + return rtl_Cipher_E_Direction; + + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionDecode) + return rtl_Cipher_E_Direction; + + return BF_update( + &(pImpl->m_context), pImpl->m_cipher.m_mode, + rtl_Cipher_DirectionEncode, + static_cast(pData), nDatLen, pBuffer, nBufLen); +} + +rtlCipherError SAL_CALL rtl_cipher_decodeBF( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C() +{ + CipherBF_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmBF) + return rtl_Cipher_E_Algorithm; + + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid) + return rtl_Cipher_E_Direction; + + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionEncode) + return rtl_Cipher_E_Direction; + + return BF_update( + &(pImpl->m_context), pImpl->m_cipher.m_mode, + rtl_Cipher_DirectionDecode, + static_cast(pData), nDatLen, pBuffer, nBufLen); +} + +void SAL_CALL rtl_cipher_destroyBF(rtlCipher Cipher) SAL_THROW_EXTERN_C() +{ + CipherBF_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return; + + if (pImpl->m_cipher.m_algorithm == rtl_Cipher_AlgorithmBF) + { +#if defined LIBO_CIPHER_OPENSSL_BACKEND + if (pImpl->m_context.m_context != nullptr) { + EVP_CIPHER_CTX_free(pImpl->m_context.m_context); + } +#endif + rtl_freeZeroMemory(pImpl, sizeof(CipherBF_Impl)); + } + else + free(pImpl); +} + +#if !defined LIBO_CIPHER_OPENSSL_BACKEND +#define CIPHER_CBLOCK_ARCFOUR 256 +#endif + +namespace { + +struct ContextARCFOUR_Impl +{ +#if defined LIBO_CIPHER_OPENSSL_BACKEND + EVP_CIPHER_CTX * m_context; +#else + unsigned int m_S[CIPHER_CBLOCK_ARCFOUR]; + unsigned int m_X, m_Y; +#endif +}; + +struct CipherARCFOUR_Impl +{ + Cipher_Impl m_cipher; + ContextARCFOUR_Impl m_context; +}; + +} + +static rtlCipherError rtl_cipherARCFOUR_update_Impl( + ContextARCFOUR_Impl *ctx, + const sal_uInt8 *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen); + +static rtlCipherError rtl_cipherARCFOUR_init_Impl( + ContextARCFOUR_Impl *ctx, + const sal_uInt8 *pKeyData, sal_Size nKeyLen) +{ +#if defined LIBO_CIPHER_OPENSSL_BACKEND + if (nKeyLen > o3tl::make_unsigned(std::numeric_limits::max())) { + return rtl_Cipher_E_BufferSize; + } + if (ctx->m_context != nullptr) { + EVP_CIPHER_CTX_free(ctx->m_context); + } + ctx->m_context = EVP_CIPHER_CTX_new(); + if (ctx->m_context == nullptr) { + return rtl_Cipher_E_Memory; + } + if (EVP_CipherInit_ex(ctx->m_context, EVP_rc4(), nullptr, nullptr, nullptr, 0) == 0) { + // RC4 en- and decryption is identical, so we can use 0=decrypt regardless of direction, + // and thus also support rtl_Cipher_DirectionBoth + return rtl_Cipher_E_Unknown; + } + if (EVP_CIPHER_CTX_set_key_length(ctx->m_context, static_cast(nKeyLen)) == 0) { + return rtl_Cipher_E_Unknown; + } + if (EVP_CipherInit_ex(ctx->m_context, nullptr, nullptr, pKeyData, nullptr, -1) == 0) { + return rtl_Cipher_E_Unknown; + } +#else + unsigned int K[CIPHER_CBLOCK_ARCFOUR]; + unsigned int *L, *S; + unsigned int x, y; + sal_Size n, k; + + S = &(ctx->m_S[0]); + + /* Initialize S linearly. */ + for (x = 0; x < CIPHER_CBLOCK_ARCFOUR; x++) + S[x] = x; + + /* Initialize K with key, repeat key as necessary. */ + for (L = K, n = CIPHER_CBLOCK_ARCFOUR; n > nKeyLen; n -= nKeyLen) + { + for (k = 0; k < nKeyLen; k++) + { + L[k] = pKeyData[k]; + } + + L += nKeyLen; + } + + for (k = 0; k < n; k++) + { + L[k] = pKeyData[k]; + } + + /* Initialize S with K. */ + for (x = 0, y = 0; x < CIPHER_CBLOCK_ARCFOUR; x++) + { + y = (y + S[x] + K[x]) % CIPHER_CBLOCK_ARCFOUR; + /* swap S[x] and S[y] */ + unsigned int t = S[x]; + S[x] = S[y]; + S[y] = t; + } + + /* Initialize counters X and Y. */ + ctx->m_X = 0; + ctx->m_Y = 0; +#endif + + return rtl_Cipher_E_None; +} + +static rtlCipherError rtl_cipherARCFOUR_update_Impl( + ContextARCFOUR_Impl *ctx, + const sal_uInt8 *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) +{ + /* Check arguments. */ + if (!pData || !pBuffer) + return rtl_Cipher_E_Argument; + + if ((0 >= nDatLen) || (nDatLen > nBufLen)) + return rtl_Cipher_E_BufferSize; + +#if defined LIBO_CIPHER_OPENSSL_BACKEND + while (nDatLen > o3tl::make_unsigned(std::numeric_limits::max())) { + int outl; + if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, std::numeric_limits::max()) + == 0) + { + return rtl_Cipher_E_Unknown; + } + assert(outl == std::numeric_limits::max()); + pData += std::numeric_limits::max(); + nDatLen -= std::numeric_limits::max(); + pBuffer += std::numeric_limits::max(); + } + int outl; + if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, static_cast(nDatLen)) == 0) { + return rtl_Cipher_E_Unknown; + } + assert(outl == static_cast(nDatLen)); + // A final call to EVP_CipherFinal_ex is intentionally missing; it wouldn't fit the rtl/cipher.h + // interface, and is hopefully not needed, as each individual RC4 update step doesn't hold back + // any data that would need to be finally flushed. +#else + unsigned int *S; + sal_Size k; + + /* Update. */ + S = &(ctx->m_S[0]); + for (k = 0; k < nDatLen; k++) + { + /* Update counters X and Y. */ + unsigned int x = ctx->m_X; + unsigned int y = ctx->m_Y; + x = (x + 1 ) % CIPHER_CBLOCK_ARCFOUR; + y = (y + S[x]) % CIPHER_CBLOCK_ARCFOUR; + ctx->m_X = x; + ctx->m_Y = y; + + /* Swap S[x] and S[y]. */ + unsigned int t = S[x]; + S[x] = S[y]; + S[y] = t; + + /* Evaluate next key byte S[t]. */ + t = (S[x] + S[y]) % CIPHER_CBLOCK_ARCFOUR; + pBuffer[k] = pData[k] ^ static_cast(S[t] & 0xff); + } +#endif + + return rtl_Cipher_E_None; +} + +/** + rtl_cipher_ARCFOUR (RC4) implementation. + + Reference: Bruce Schneier: Applied Cryptography, 2nd edition, ch. 17.1 +*/ +rtlCipher SAL_CALL rtl_cipher_createARCFOUR(rtlCipherMode Mode) + SAL_THROW_EXTERN_C() +{ + CipherARCFOUR_Impl *pImpl = nullptr; + + if (Mode != rtl_Cipher_ModeStream) + return nullptr; + + pImpl = static_cast(rtl_allocateZeroMemory(sizeof(CipherARCFOUR_Impl))); + if (pImpl) + { + pImpl->m_cipher.m_algorithm = rtl_Cipher_AlgorithmARCFOUR; + pImpl->m_cipher.m_direction = rtl_Cipher_DirectionInvalid; + pImpl->m_cipher.m_mode = rtl_Cipher_ModeStream; + + pImpl->m_cipher.m_init = rtl_cipher_initARCFOUR; + pImpl->m_cipher.m_encode = rtl_cipher_encodeARCFOUR; + pImpl->m_cipher.m_decode = rtl_cipher_decodeARCFOUR; + pImpl->m_cipher.m_delete = rtl_cipher_destroyARCFOUR; + } + + return static_cast(pImpl); +} + +rtlCipherError SAL_CALL rtl_cipher_initARCFOUR( + rtlCipher Cipher, + rtlCipherDirection Direction, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + SAL_UNUSED_PARAMETER const sal_uInt8 *, SAL_UNUSED_PARAMETER sal_Size) + SAL_THROW_EXTERN_C() +{ + CipherARCFOUR_Impl *pImpl = static_cast(Cipher); + + if (!pImpl || !pKeyData) + return rtl_Cipher_E_Argument; + + if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmARCFOUR) + return rtl_Cipher_E_Algorithm; + + if (Direction != rtl_Cipher_DirectionInvalid) + pImpl->m_cipher.m_direction = Direction; + else + return rtl_Cipher_E_Direction; + + return rtl_cipherARCFOUR_init_Impl(&(pImpl->m_context), pKeyData, nKeyLen); +} + +rtlCipherError SAL_CALL rtl_cipher_encodeARCFOUR( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C() +{ + CipherARCFOUR_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmARCFOUR) + return rtl_Cipher_E_Algorithm; + + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid) + return rtl_Cipher_E_Direction; + + return rtl_cipherARCFOUR_update_Impl( + &(pImpl->m_context), + static_cast(pData), nDatLen, pBuffer, nBufLen); +} + +rtlCipherError SAL_CALL rtl_cipher_decodeARCFOUR( + rtlCipher Cipher, + const void *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) SAL_THROW_EXTERN_C() +{ + CipherARCFOUR_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return rtl_Cipher_E_Argument; + + if (pImpl->m_cipher.m_algorithm != rtl_Cipher_AlgorithmARCFOUR) + return rtl_Cipher_E_Algorithm; + + if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionInvalid) + return rtl_Cipher_E_Direction; + + return rtl_cipherARCFOUR_update_Impl( + &(pImpl->m_context), + static_cast(pData), nDatLen, pBuffer, nBufLen); +} + +void SAL_CALL rtl_cipher_destroyARCFOUR(rtlCipher Cipher) SAL_THROW_EXTERN_C() +{ + CipherARCFOUR_Impl *pImpl = static_cast(Cipher); + if (!pImpl) + return; + + if (pImpl->m_cipher.m_algorithm == rtl_Cipher_AlgorithmARCFOUR) + { +#if defined LIBO_CIPHER_OPENSSL_BACKEND + if (pImpl->m_context.m_context != nullptr) { + EVP_CIPHER_CTX_free(pImpl->m_context.m_context); + } +#endif + rtl_freeZeroMemory(pImpl, sizeof(CipherARCFOUR_Impl)); + } + else + free(pImpl); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/cmdargs.cxx b/sal/rtl/cmdargs.cxx new file mode 100644 index 000000000..bad833077 --- /dev/null +++ b/sal/rtl/cmdargs.cxx @@ -0,0 +1,103 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include + +namespace { + +rtl_uString ** g_ppCommandArgs = nullptr; +sal_uInt32 g_nCommandArgCount = 0; + +struct ArgHolder +{ + ~ArgHolder(); +}; + +ArgHolder::~ArgHolder() +{ + while (g_nCommandArgCount > 0) + rtl_uString_release (g_ppCommandArgs[--g_nCommandArgCount]); + + free (g_ppCommandArgs); + g_ppCommandArgs = nullptr; +} + +// The destructor of this static ArgHolder is "activated" by the assignments to +// g_ppCommandArgs and g_nCommandArgCount in init(): +ArgHolder argHolder; + +void init() +{ + osl::MutexGuard guard( osl::Mutex::getGlobalMutex() ); + if (g_ppCommandArgs) + return; + + sal_Int32 i, n = osl_getCommandArgCount(); + + g_ppCommandArgs = + static_cast(rtl_allocateZeroMemory (n * sizeof(rtl_uString*))); + for (i = 0; i < n; i++) + { + rtl_uString * pArg = nullptr; + osl_getCommandArg (i, &pArg); + bool env; + { + auto const & arg = OUString::unacquired(&pArg); + env = (arg.startsWith("-") || arg.startsWith("/")) && + arg.match("env:", 1) && + arg.indexOf ('=') >= 0; + } + if (env ) + { + // ignore. + rtl_uString_release (pArg); + } + else + { + // assign. + g_ppCommandArgs[g_nCommandArgCount++] = pArg; + } + } +} + +} + +oslProcessError SAL_CALL rtl_getAppCommandArg ( + sal_uInt32 nArg, rtl_uString **ppCommandArg) +{ + init(); + oslProcessError result = osl_Process_E_NotFound; + if( nArg < g_nCommandArgCount ) + { + rtl_uString_assign( ppCommandArg, g_ppCommandArgs[nArg] ); + result = osl_Process_E_None; + } + return result; +} + +sal_uInt32 SAL_CALL rtl_getAppCommandArgCount() +{ + init(); + return g_nCommandArgCount; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/crc.cxx b/sal/rtl/crc.cxx new file mode 100644 index 000000000..7912b15d0 --- /dev/null +++ b/sal/rtl/crc.cxx @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +#include + +// Zlib's crc32() is very fast, so simply use that one instead +// of implementing this ourselves. + +sal_uInt32 SAL_CALL rtl_crc32 ( + sal_uInt32 Crc, + const void *Data, sal_uInt32 DatLen) SAL_THROW_EXTERN_C() +{ + // Check that our types map to zlib correctly. + static_assert(sizeof(uLong) >= sizeof(sal_uInt32)); + static_assert(sizeof(uInt) >= sizeof(sal_uInt32)); + // Our API says that Crc should be initialized to 0, while + // zlib says it should be initialized with 'crc32(0,Z_NULL,0)', + // which however simply returns 0. Ensure this. + assert(crc32(0, Z_NULL, 0) == 0); + if (Data) + Crc = crc32( Crc, static_cast(Data), DatLen); + return Crc; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/digest.cxx b/sal/rtl/digest.cxx new file mode 100644 index 000000000..de52ecae5 --- /dev/null +++ b/sal/rtl/digest.cxx @@ -0,0 +1,1897 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#include +#include +#include + +#define RTL_DIGEST_CREATE(T) (static_cast(rtl_allocateZeroMemory(sizeof(T)))) + +#define RTL_DIGEST_ROTL(a,n) (((a) << (n)) | ((a) >> (32 - (n)))) + +#define RTL_DIGEST_HTONL(l,c) \ + (*((c)++) = static_cast(((l) >> 24) & 0xff), \ + *((c)++) = static_cast(((l) >> 16) & 0xff), \ + *((c)++) = static_cast(((l) >> 8) & 0xff), \ + *((c)++) = static_cast(((l) ) & 0xff)) + +#define RTL_DIGEST_LTOC(l,c) \ + *((c)++) = static_cast(((l) ) & 0xff); \ + *((c)++) = static_cast(((l) >> 8) & 0xff); \ + *((c)++) = static_cast(((l) >> 16) & 0xff); \ + *((c)++) = static_cast(((l) >> 24) & 0xff); + +typedef rtlDigestError (Digest_init_t) ( + void *ctx, const sal_uInt8 *Data, sal_uInt32 DatLen); + +typedef void (Digest_delete_t) (void *ctx); + +typedef rtlDigestError (Digest_update_t) ( + void *ctx, const void *Data, sal_uInt32 DatLen); + +typedef rtlDigestError (Digest_get_t) ( + void *ctx, sal_uInt8 *Buffer, sal_uInt32 BufLen); + +namespace { + +struct Digest_Impl +{ + rtlDigestAlgorithm m_algorithm; + sal_uInt32 m_length; + + Digest_init_t *m_init; + Digest_delete_t *m_delete; + Digest_update_t *m_update; + Digest_get_t *m_get; +}; + +} + +static void swapLong(sal_uInt32 *pData, sal_uInt32 nDatLen) +{ + sal_uInt32 *X; + int i, n; + + X = pData; + n = nDatLen; + + for (i = 0; i < n; i++) + { + X[i] = OSL_SWAPDWORD(X[i]); + } +} + +rtlDigest SAL_CALL rtl_digest_create(rtlDigestAlgorithm Algorithm) + SAL_THROW_EXTERN_C() +{ + rtlDigest Digest = nullptr; + switch (Algorithm) + { + case rtl_Digest_AlgorithmMD2: + Digest = rtl_digest_createMD2(); + break; + + case rtl_Digest_AlgorithmMD5: + Digest = rtl_digest_createMD5(); + break; + + case rtl_Digest_AlgorithmSHA: + Digest = rtl_digest_createSHA(); + break; + + case rtl_Digest_AlgorithmSHA1: + Digest = rtl_digest_createSHA1(); + break; + + case rtl_Digest_AlgorithmHMAC_MD5: + Digest = rtl_digest_createHMAC_MD5(); + break; + + case rtl_Digest_AlgorithmHMAC_SHA1: + Digest = rtl_digest_createHMAC_SHA1(); + break; + + default: /* rtl_Digest_AlgorithmInvalid */ + break; + } + return Digest; +} + +rtlDigestAlgorithm SAL_CALL rtl_digest_queryAlgorithm(rtlDigest Digest) + SAL_THROW_EXTERN_C() +{ + Digest_Impl *pImpl = static_cast(Digest); + if (pImpl) + return pImpl->m_algorithm; + return rtl_Digest_AlgorithmInvalid; +} + +sal_uInt32 SAL_CALL rtl_digest_queryLength(rtlDigest Digest) + SAL_THROW_EXTERN_C() +{ + Digest_Impl *pImpl = static_cast(Digest); + if (pImpl) + return pImpl->m_length; + return 0; +} + +rtlDigestError SAL_CALL rtl_digest_init( + rtlDigest Digest, const sal_uInt8 *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + Digest_Impl *pImpl = static_cast(Digest); + if (pImpl) + { + if (pImpl->m_init) + return pImpl->m_init (Digest, pData, nDatLen); + return rtl_Digest_E_None; + } + return rtl_Digest_E_Argument; +} + +rtlDigestError SAL_CALL rtl_digest_update( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + Digest_Impl *pImpl = static_cast(Digest); + if (pImpl && pImpl->m_update) + return pImpl->m_update(Digest, pData, nDatLen); + return rtl_Digest_E_Argument; +} + +rtlDigestError SAL_CALL rtl_digest_get( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + Digest_Impl *pImpl = static_cast(Digest); + if (pImpl && pImpl->m_get) + return pImpl->m_get(Digest, pBuffer, nBufLen); + return rtl_Digest_E_Argument; +} + +void SAL_CALL rtl_digest_destroy(rtlDigest Digest) SAL_THROW_EXTERN_C() +{ + Digest_Impl *pImpl = static_cast(Digest); + if (pImpl && pImpl->m_delete) + pImpl->m_delete(Digest); +} + +constexpr auto DIGEST_CBLOCK_MD2 = 16; +constexpr auto DIGEST_LBLOCK_MD2 = 16; + +namespace { + +struct DigestContextMD2 +{ + sal_uInt32 m_nDatLen; + sal_uInt8 m_pData[DIGEST_CBLOCK_MD2]; + sal_uInt32 m_state[DIGEST_LBLOCK_MD2]; + sal_uInt32 m_chksum[DIGEST_LBLOCK_MD2]; +}; + +struct DigestMD2_Impl +{ + Digest_Impl m_digest; + DigestContextMD2 m_context; +}; + +} + +static void initMD2 (DigestContextMD2 *ctx); +static void updateMD2 (DigestContextMD2 *ctx); +static void endMD2 (DigestContextMD2 *ctx); + +const sal_uInt32 S[256] = +{ + 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, + 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, + 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, + 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA, + 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, + 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12, + 0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, + 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A, + 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F, + 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21, + 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, + 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03, + 0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1, + 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6, + 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, + 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1, + 0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, + 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02, + 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6, + 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F, + 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, + 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26, + 0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09, + 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52, + 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, + 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A, + 0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, + 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39, + 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4, + 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A, + 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, + 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14, +}; + +const Digest_Impl MD2 = +{ + rtl_Digest_AlgorithmMD2, + RTL_DIGEST_LENGTH_MD2, + nullptr, + rtl_digest_destroyMD2, + rtl_digest_updateMD2, + rtl_digest_getMD2 +}; + +static void initMD2(DigestContextMD2 *ctx) +{ + memset(ctx, 0, sizeof(DigestContextMD2)); +} + +static void updateMD2(DigestContextMD2 *ctx) +{ + sal_uInt8 *X; + sal_uInt32 *sp1, *sp2; + sal_uInt32 i, k, t; + + sal_uInt32 state[48]; + + X = ctx->m_pData; + sp1 = ctx->m_state; + sp2 = ctx->m_chksum; + + k = sp2[DIGEST_LBLOCK_MD2 - 1]; + for (i = 0; i < 16; i++) + { + state[i + 0] = sp1[i]; + state[i + 16] = t = X[i]; + state[i + 32] = t ^ sp1[i]; + k = sp2[i] ^= S[t^k]; + } + + t = 0; + for (i = 0; i < 18; i++) + { + for (k = 0; k < 48; k += 8) + { + t = state[k + 0] ^= S[t]; + t = state[k + 1] ^= S[t]; + t = state[k + 2] ^= S[t]; + t = state[k + 3] ^= S[t]; + t = state[k + 4] ^= S[t]; + t = state[k + 5] ^= S[t]; + t = state[k + 6] ^= S[t]; + t = state[k + 7] ^= S[t]; + } + t = ((t + i) & 0xff); + } + + memcpy(sp1, state, 16 * sizeof(sal_uInt32)); + rtl_secureZeroMemory(state, 48 * sizeof(sal_uInt32)); +} + +static void endMD2(DigestContextMD2 *ctx) +{ + sal_uInt8 *X; + sal_uInt32 *C; + sal_uInt32 i, n; + + X = ctx->m_pData; + C = ctx->m_chksum; + n = DIGEST_CBLOCK_MD2 - ctx->m_nDatLen; + + for (i = ctx->m_nDatLen; i < DIGEST_CBLOCK_MD2; i++) + X[i] = static_cast(n & 0xff); + + updateMD2(ctx); + + for (i = 0; i < DIGEST_CBLOCK_MD2; i++) + X[i] = static_cast(C[i] & 0xff); + updateMD2(ctx); +} + +rtlDigestError SAL_CALL rtl_digest_MD2( + const void *pData, sal_uInt32 nDatLen, + sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C() +{ + DigestMD2_Impl digest; + rtlDigestError result; + + digest.m_digest = MD2; + initMD2(&(digest.m_context)); + + result = rtl_digest_updateMD2(&digest, pData, nDatLen); + if (result == rtl_Digest_E_None) + result = rtl_digest_getMD2(&digest, pBuffer, nBufLen); + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return result; +} + +rtlDigest SAL_CALL rtl_digest_createMD2() SAL_THROW_EXTERN_C() +{ + DigestMD2_Impl *pImpl = RTL_DIGEST_CREATE(DigestMD2_Impl); + if (pImpl) + { + pImpl->m_digest = MD2; + initMD2(&(pImpl->m_context)); + } + return static_cast(pImpl); +} + +rtlDigestError SAL_CALL rtl_digest_updateMD2( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + DigestMD2_Impl *pImpl = static_cast(Digest); + const sal_uInt8 *d = static_cast(pData); + + DigestContextMD2 *ctx; + + if (!pImpl || !pData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD2) + return rtl_Digest_E_Algorithm; + + if (nDatLen == 0) + return rtl_Digest_E_None; + + ctx = &(pImpl->m_context); + + if (ctx->m_nDatLen) + { + sal_uInt8 *p = ctx->m_pData + ctx->m_nDatLen; + sal_uInt32 n = DIGEST_CBLOCK_MD2 - ctx->m_nDatLen; + + if (nDatLen < n) + { + memcpy(p, d, nDatLen); + ctx->m_nDatLen += nDatLen; + + return rtl_Digest_E_None; + } + + memcpy(p, d, n); + d += n; + nDatLen -= n; + + updateMD2(ctx); + ctx->m_nDatLen = 0; + } + + while (nDatLen >= DIGEST_CBLOCK_MD2) + { + memcpy(ctx->m_pData, d, DIGEST_CBLOCK_MD2); + d += DIGEST_CBLOCK_MD2; + nDatLen -= DIGEST_CBLOCK_MD2; + + updateMD2(ctx); + } + + memcpy(ctx->m_pData, d, nDatLen); + ctx->m_nDatLen = nDatLen; + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_getMD2( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestMD2_Impl *pImpl = static_cast(Digest); + sal_uInt32 i; + + DigestContextMD2 *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD2) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + ctx = &(pImpl->m_context); + + endMD2(ctx); + for (i = 0; i < DIGEST_CBLOCK_MD2; i++) + { + pBuffer[i] = static_cast(ctx->m_state[i] & 0xff); + } + + initMD2(ctx); + + return rtl_Digest_E_None; +} + +void SAL_CALL rtl_digest_destroyMD2(rtlDigest Digest) SAL_THROW_EXTERN_C() +{ + DigestMD2_Impl *pImpl = static_cast(Digest); + if (pImpl) + { + if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmMD2) + rtl_freeZeroMemory(pImpl, sizeof(DigestMD2_Impl)); + else + free(pImpl); + } +} + +#define DIGEST_CBLOCK_MD5 64 +#define DIGEST_LBLOCK_MD5 16 + +namespace { + +struct DigestContextMD5 +{ + sal_uInt32 m_nDatLen; + sal_uInt32 m_pData[DIGEST_LBLOCK_MD5]; + sal_uInt32 m_nA, m_nB, m_nC, m_nD; + sal_uInt32 m_nL, m_nH; +}; + +struct DigestMD5_Impl +{ + Digest_Impl m_digest; + DigestContextMD5 m_context; +}; + +} + +static void initMD5 (DigestContextMD5 *ctx); +static void updateMD5 (DigestContextMD5 *ctx); +static void endMD5 (DigestContextMD5 *ctx); + +#define F(x,y,z) ((((y) ^ (z)) & (x)) ^ (z)) +#define G(x,y,z) ((((x) ^ (y)) & (z)) ^ (y)) +#define H(x,y,z) ((x) ^ (y) ^ (z)) +#define I(x,y,z) (((x) | (~(z))) ^ (y)) + +#define R0(a,b,c,d,k,s,t) { \ + a += ((k) + (t) + F((b), (c), (d))); \ + a = RTL_DIGEST_ROTL(a, s); \ + a += b; } + +#define R1(a,b,c,d,k,s,t) { \ + a += ((k) + (t) + G((b), (c), (d))); \ + a = RTL_DIGEST_ROTL(a, s); \ + a += b; } + +#define R2(a,b,c,d,k,s,t) { \ + a += ((k) + (t) + H((b), (c), (d))); \ + a = RTL_DIGEST_ROTL(a, s); \ + a += b; } + +#define R3(a,b,c,d,k,s,t) { \ + a += ((k) + (t) + I((b), (c), (d))); \ + a = RTL_DIGEST_ROTL(a, s); \ + a += b; } + +const Digest_Impl MD5 = +{ + rtl_Digest_AlgorithmMD5, + RTL_DIGEST_LENGTH_MD5, + nullptr, + rtl_digest_destroyMD5, + rtl_digest_updateMD5, + rtl_digest_getMD5 +}; + +static void initMD5(DigestContextMD5 *ctx) +{ + memset(ctx, 0, sizeof(DigestContextMD5)); + + ctx->m_nA = sal_uInt32(0x67452301L); + ctx->m_nB = sal_uInt32(0xefcdab89L); + ctx->m_nC = sal_uInt32(0x98badcfeL); + ctx->m_nD = sal_uInt32(0x10325476L); +} + +static void updateMD5(DigestContextMD5 *ctx) +{ + sal_uInt32 A, B, C, D; + sal_uInt32 *X; + + A = ctx->m_nA; + B = ctx->m_nB; + C = ctx->m_nC; + D = ctx->m_nD; + X = ctx->m_pData; + + R0 (A, B, C, D, X[ 0], 7, 0xd76aa478L); + R0 (D, A, B, C, X[ 1], 12, 0xe8c7b756L); + R0 (C, D, A, B, X[ 2], 17, 0x242070dbL); + R0 (B, C, D, A, X[ 3], 22, 0xc1bdceeeL); + R0 (A, B, C, D, X[ 4], 7, 0xf57c0fafL); + R0 (D, A, B, C, X[ 5], 12, 0x4787c62aL); + R0 (C, D, A, B, X[ 6], 17, 0xa8304613L); + R0 (B, C, D, A, X[ 7], 22, 0xfd469501L); + R0 (A, B, C, D, X[ 8], 7, 0x698098d8L); + R0 (D, A, B, C, X[ 9], 12, 0x8b44f7afL); + R0 (C, D, A, B, X[10], 17, 0xffff5bb1L); + R0 (B, C, D, A, X[11], 22, 0x895cd7beL); + R0 (A, B, C, D, X[12], 7, 0x6b901122L); + R0 (D, A, B, C, X[13], 12, 0xfd987193L); + R0 (C, D, A, B, X[14], 17, 0xa679438eL); + R0 (B, C, D, A, X[15], 22, 0x49b40821L); + + R1 (A, B, C, D, X[ 1], 5, 0xf61e2562L); + R1 (D, A, B, C, X[ 6], 9, 0xc040b340L); + R1 (C, D, A, B, X[11], 14, 0x265e5a51L); + R1 (B, C, D, A, X[ 0], 20, 0xe9b6c7aaL); + R1 (A, B, C, D, X[ 5], 5, 0xd62f105dL); + R1 (D, A, B, C, X[10], 9, 0x02441453L); + R1 (C, D, A, B, X[15], 14, 0xd8a1e681L); + R1 (B, C, D, A, X[ 4], 20, 0xe7d3fbc8L); + R1 (A, B, C, D, X[ 9], 5, 0x21e1cde6L); + R1 (D, A, B, C, X[14], 9, 0xc33707d6L); + R1 (C, D, A, B, X[ 3], 14, 0xf4d50d87L); + R1 (B, C, D, A, X[ 8], 20, 0x455a14edL); + R1 (A, B, C, D, X[13], 5, 0xa9e3e905L); + R1 (D, A, B, C, X[ 2], 9, 0xfcefa3f8L); + R1 (C, D, A, B, X[ 7], 14, 0x676f02d9L); + R1 (B, C, D, A, X[12], 20, 0x8d2a4c8aL); + + R2 (A, B, C, D, X[ 5], 4, 0xfffa3942L); + R2 (D, A, B, C, X[ 8], 11, 0x8771f681L); + R2 (C, D, A, B, X[11], 16, 0x6d9d6122L); + R2 (B, C, D, A, X[14], 23, 0xfde5380cL); + R2 (A, B, C, D, X[ 1], 4, 0xa4beea44L); + R2 (D, A, B, C, X[ 4], 11, 0x4bdecfa9L); + R2 (C, D, A, B, X[ 7], 16, 0xf6bb4b60L); + R2 (B, C, D, A, X[10], 23, 0xbebfbc70L); + R2 (A, B, C, D, X[13], 4, 0x289b7ec6L); + R2 (D, A, B, C, X[ 0], 11, 0xeaa127faL); + R2 (C, D, A, B, X[ 3], 16, 0xd4ef3085L); + R2 (B, C, D, A, X[ 6], 23, 0x04881d05L); + R2 (A, B, C, D, X[ 9], 4, 0xd9d4d039L); + R2 (D, A, B, C, X[12], 11, 0xe6db99e5L); + R2 (C, D, A, B, X[15], 16, 0x1fa27cf8L); + R2 (B, C, D, A, X[ 2], 23, 0xc4ac5665L); + + R3 (A, B, C, D, X[ 0], 6, 0xf4292244L); + R3 (D, A, B, C, X[ 7], 10, 0x432aff97L); + R3 (C, D, A, B, X[14], 15, 0xab9423a7L); + R3 (B, C, D, A, X[ 5], 21, 0xfc93a039L); + R3 (A, B, C, D, X[12], 6, 0x655b59c3L); + R3 (D, A, B, C, X[ 3], 10, 0x8f0ccc92L); + R3 (C, D, A, B, X[10], 15, 0xffeff47dL); + R3 (B, C, D, A, X[ 1], 21, 0x85845dd1L); + R3 (A, B, C, D, X[ 8], 6, 0x6fa87e4fL); + R3 (D, A, B, C, X[15], 10, 0xfe2ce6e0L); + R3 (C, D, A, B, X[ 6], 15, 0xa3014314L); + R3 (B, C, D, A, X[13], 21, 0x4e0811a1L); + R3 (A, B, C, D, X[ 4], 6, 0xf7537e82L); + R3 (D, A, B, C, X[11], 10, 0xbd3af235L); + R3 (C, D, A, B, X[ 2], 15, 0x2ad7d2bbL); + R3 (B, C, D, A, X[ 9], 21, 0xeb86d391L); + + ctx->m_nA += A; + ctx->m_nB += B; + ctx->m_nC += C; + ctx->m_nD += D; +} + +static void endMD5(DigestContextMD5 *ctx) +{ + static const sal_uInt8 end[4] = + { + 0x80, 0x00, 0x00, 0x00 + }; + const sal_uInt8 *p = end; + + sal_uInt32 *X; + int i; + + X = ctx->m_pData; + i = (ctx->m_nDatLen >> 2); + +#ifdef OSL_BIGENDIAN + swapLong(X, i + 1); +#endif /* OSL_BIGENDIAN */ + + switch (ctx->m_nDatLen & 0x03) + { + case 1: X[i] &= 0x000000ff; break; + case 2: X[i] &= 0x0000ffff; break; + case 3: X[i] &= 0x00ffffff; break; + } + + switch (ctx->m_nDatLen & 0x03) + { + case 0: X[i] = static_cast(*(p++)) << 0; + [[fallthrough]]; + case 1: X[i] |= static_cast(*(p++)) << 8; + [[fallthrough]]; + case 2: X[i] |= static_cast(*(p++)) << 16; + [[fallthrough]]; + case 3: X[i] |= static_cast(*p) << 24; + } + + i += 1; + + if (i > (DIGEST_LBLOCK_MD5 - 2)) + { + for (; i < DIGEST_LBLOCK_MD5; i++) + { + X[i] = 0; + } + + updateMD5(ctx); + i = 0; + } + + for (; i < (DIGEST_LBLOCK_MD5 - 2); i++) + X[i] = 0; + + X[DIGEST_LBLOCK_MD5 - 2] = ctx->m_nL; + X[DIGEST_LBLOCK_MD5 - 1] = ctx->m_nH; + + updateMD5(ctx); +} + +rtlDigestError SAL_CALL rtl_digest_MD5( + const void *pData, sal_uInt32 nDatLen, + sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C() +{ + DigestMD5_Impl digest; + rtlDigestError result; + + digest.m_digest = MD5; + initMD5(&(digest.m_context)); + + result = rtl_digest_update(&digest, pData, nDatLen); + if (result == rtl_Digest_E_None) + result = rtl_digest_getMD5(&digest, pBuffer, nBufLen); + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return result; +} + +rtlDigest SAL_CALL rtl_digest_createMD5() SAL_THROW_EXTERN_C() +{ + DigestMD5_Impl *pImpl = RTL_DIGEST_CREATE(DigestMD5_Impl); + if (pImpl) + { + pImpl->m_digest = MD5; + initMD5(&(pImpl->m_context)); + } + return static_cast(pImpl); +} + +rtlDigestError SAL_CALL rtl_digest_updateMD5( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + DigestMD5_Impl *pImpl = static_cast(Digest); + const sal_uInt8 *d = static_cast(pData); + + DigestContextMD5 *ctx; + sal_uInt32 len; + + if (!pImpl || !pData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD5) + return rtl_Digest_E_Algorithm; + + if (nDatLen == 0) + return rtl_Digest_E_None; + + ctx = &(pImpl->m_context); + + len = ctx->m_nL + (nDatLen << 3); + if (len < ctx->m_nL) + ctx->m_nH += 1; + + ctx->m_nH += (nDatLen >> 29); + ctx->m_nL = len; + + if (ctx->m_nDatLen) + { + sal_uInt8 *p = reinterpret_cast(ctx->m_pData) + ctx->m_nDatLen; + sal_uInt32 n = DIGEST_CBLOCK_MD5 - ctx->m_nDatLen; + + if (nDatLen < n) + { + memcpy(p, d, nDatLen); + ctx->m_nDatLen += nDatLen; + + return rtl_Digest_E_None; + } + + memcpy(p, d, n); + d += n; + nDatLen -= n; + +#ifdef OSL_BIGENDIAN + swapLong(ctx->m_pData, DIGEST_LBLOCK_MD5); +#endif /* OSL_BIGENDIAN */ + + updateMD5(ctx); + ctx->m_nDatLen = 0; + } + + while (nDatLen >= DIGEST_CBLOCK_MD5) + { + memcpy(ctx->m_pData, d, DIGEST_CBLOCK_MD5); + d += DIGEST_CBLOCK_MD5; + nDatLen -= DIGEST_CBLOCK_MD5; + +#ifdef OSL_BIGENDIAN + swapLong(ctx->m_pData, DIGEST_LBLOCK_MD5); +#endif /* OSL_BIGENDIAN */ + + updateMD5(ctx); + } + + memcpy(ctx->m_pData, d, nDatLen); + ctx->m_nDatLen = nDatLen; + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_getMD5( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestMD5_Impl *pImpl = static_cast(Digest); + sal_uInt8 *p = pBuffer; + + DigestContextMD5 *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD5) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + ctx = &(pImpl->m_context); + + endMD5(ctx); + RTL_DIGEST_LTOC(ctx->m_nA, p); + RTL_DIGEST_LTOC(ctx->m_nB, p); + RTL_DIGEST_LTOC(ctx->m_nC, p); + RTL_DIGEST_LTOC(ctx->m_nD, p); + initMD5(ctx); + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_rawMD5( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestMD5_Impl *pImpl = static_cast(Digest); + sal_uInt8 *p = pBuffer; + + DigestContextMD5 *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmMD5) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + ctx = &(pImpl->m_context); + + /* not finalized */ + RTL_DIGEST_LTOC(ctx->m_nA, p); + RTL_DIGEST_LTOC(ctx->m_nB, p); + RTL_DIGEST_LTOC(ctx->m_nC, p); + RTL_DIGEST_LTOC(ctx->m_nD, p); + initMD5(ctx); + + return rtl_Digest_E_None; +} + +void SAL_CALL rtl_digest_destroyMD5(rtlDigest Digest) SAL_THROW_EXTERN_C() +{ + DigestMD5_Impl *pImpl = static_cast(Digest); + if (pImpl) + { + if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmMD5) + rtl_freeZeroMemory(pImpl, sizeof(DigestMD5_Impl)); + else + free(pImpl); + } +} + +#define DIGEST_CBLOCK_SHA 64 +#define DIGEST_LBLOCK_SHA 16 + +typedef sal_uInt32 DigestSHA_update_t(sal_uInt32 x); + +static sal_uInt32 updateSHA_0(sal_uInt32 x); +static sal_uInt32 updateSHA_1(sal_uInt32 x); + +namespace { + +struct DigestContextSHA +{ + DigestSHA_update_t *m_update; + sal_uInt32 m_nDatLen; + sal_uInt32 m_pData[DIGEST_LBLOCK_SHA]; + sal_uInt32 m_nA, m_nB, m_nC, m_nD, m_nE; + sal_uInt32 m_nL, m_nH; +}; + +struct DigestSHA_Impl +{ + Digest_Impl m_digest; + DigestContextSHA m_context; +}; + +} + +static void initSHA( + DigestContextSHA *ctx, DigestSHA_update_t *fct); + +static void updateSHA(DigestContextSHA *ctx); +static void endSHA(DigestContextSHA *ctx); + +#define K_00_19 sal_uInt32(0x5a827999L) +#define K_20_39 sal_uInt32(0x6ed9eba1L) +#define K_40_59 sal_uInt32(0x8f1bbcdcL) +#define K_60_79 sal_uInt32(0xca62c1d6L) + +#define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d)) +#define F_20_39(b,c,d) ((b) ^ (c) ^ (d)) +#define F_40_59(b,c,d) (((b) & (c)) | ((b) & (d)) | ((c) & (d))) +#define F_60_79(b,c,d) F_20_39(b,c,d) + +#define BODY_X(i) \ + (X[(i)&0x0f] ^ X[((i)+2)&0x0f] ^ X[((i)+8)&0x0f] ^ X[((i)+13)&0x0f]) + +#define BODY_00_15(u,i,a,b,c,d,e,f) \ + (f) = X[i]; \ + (f) += (e) + K_00_19 + RTL_DIGEST_ROTL((a), 5) + F_00_19((b), (c), (d)); \ + (b) = RTL_DIGEST_ROTL((b), 30); + +#define BODY_16_19(u,i,a,b,c,d,e,f) \ + (f) = BODY_X((i)); \ + (f) = X[(i)&0x0f] = (u)((f)); \ + (f) += (e) + K_00_19 + RTL_DIGEST_ROTL((a), 5) + F_00_19((b), (c), (d)); \ + (b) = RTL_DIGEST_ROTL((b), 30); + +#define BODY_20_39(u,i,a,b,c,d,e,f) \ + (f) = BODY_X((i)); \ + (f) = X[(i)&0x0f] = (u)((f)); \ + (f) += (e) + K_20_39 + RTL_DIGEST_ROTL((a), 5) + F_20_39((b), (c), (d)); \ + (b) = RTL_DIGEST_ROTL((b), 30); + +#define BODY_40_59(u,i,a,b,c,d,e,f) \ + (f) = BODY_X((i)); \ + (f) = X[(i)&0x0f] = (u)((f)); \ + (f) += (e) + K_40_59 + RTL_DIGEST_ROTL((a), 5) + F_40_59((b), (c), (d)); \ + (b) = RTL_DIGEST_ROTL((b), 30); + +#define BODY_60_79(u,i,a,b,c,d,e,f) \ + (f) = BODY_X((i)); \ + (f) = X[(i)&0x0f] = (u)((f)); \ + (f) += (e) + K_60_79 + RTL_DIGEST_ROTL((a), 5) + F_60_79((b), (c), (d)); \ + (b) = RTL_DIGEST_ROTL((b), 30); + +static void initSHA( + DigestContextSHA *ctx, DigestSHA_update_t *fct) +{ + memset(ctx, 0, sizeof(DigestContextSHA)); + ctx->m_update = fct; + + ctx->m_nA = sal_uInt32(0x67452301L); + ctx->m_nB = sal_uInt32(0xefcdab89L); + ctx->m_nC = sal_uInt32(0x98badcfeL); + ctx->m_nD = sal_uInt32(0x10325476L); + ctx->m_nE = sal_uInt32(0xc3d2e1f0L); +} + +static void updateSHA(DigestContextSHA *ctx) +{ + sal_uInt32 A, B, C, D, E, T; + sal_uInt32 *X; + + DigestSHA_update_t *U; + U = ctx->m_update; + + A = ctx->m_nA; + B = ctx->m_nB; + C = ctx->m_nC; + D = ctx->m_nD; + E = ctx->m_nE; + X = ctx->m_pData; + + BODY_00_15 (U, 0, A, B, C, D, E, T); + BODY_00_15 (U, 1, T, A, B, C, D, E); + BODY_00_15 (U, 2, E, T, A, B, C, D); + BODY_00_15 (U, 3, D, E, T, A, B, C); + BODY_00_15 (U, 4, C, D, E, T, A, B); + BODY_00_15 (U, 5, B, C, D, E, T, A); + BODY_00_15 (U, 6, A, B, C, D, E, T); + BODY_00_15 (U, 7, T, A, B, C, D, E); + BODY_00_15 (U, 8, E, T, A, B, C, D); + BODY_00_15 (U, 9, D, E, T, A, B, C); + BODY_00_15 (U, 10, C, D, E, T, A, B); + BODY_00_15 (U, 11, B, C, D, E, T, A); + BODY_00_15 (U, 12, A, B, C, D, E, T); + BODY_00_15 (U, 13, T, A, B, C, D, E); + BODY_00_15 (U, 14, E, T, A, B, C, D); + BODY_00_15 (U, 15, D, E, T, A, B, C); + BODY_16_19 (U, 16, C, D, E, T, A, B); + BODY_16_19 (U, 17, B, C, D, E, T, A); + BODY_16_19 (U, 18, A, B, C, D, E, T); + BODY_16_19 (U, 19, T, A, B, C, D, E); + + BODY_20_39 (U, 20, E, T, A, B, C, D); + BODY_20_39 (U, 21, D, E, T, A, B, C); + BODY_20_39 (U, 22, C, D, E, T, A, B); + BODY_20_39 (U, 23, B, C, D, E, T, A); + BODY_20_39 (U, 24, A, B, C, D, E, T); + BODY_20_39 (U, 25, T, A, B, C, D, E); + BODY_20_39 (U, 26, E, T, A, B, C, D); + BODY_20_39 (U, 27, D, E, T, A, B, C); + BODY_20_39 (U, 28, C, D, E, T, A, B); + BODY_20_39 (U, 29, B, C, D, E, T, A); + BODY_20_39 (U, 30, A, B, C, D, E, T); + BODY_20_39 (U, 31, T, A, B, C, D, E); + BODY_20_39 (U, 32, E, T, A, B, C, D); + BODY_20_39 (U, 33, D, E, T, A, B, C); + BODY_20_39 (U, 34, C, D, E, T, A, B); + BODY_20_39 (U, 35, B, C, D, E, T, A); + BODY_20_39 (U, 36, A, B, C, D, E, T); + BODY_20_39 (U, 37, T, A, B, C, D, E); + BODY_20_39 (U, 38, E, T, A, B, C, D); + BODY_20_39 (U, 39, D, E, T, A, B, C); + + BODY_40_59 (U, 40, C, D, E, T, A, B); + BODY_40_59 (U, 41, B, C, D, E, T, A); + BODY_40_59 (U, 42, A, B, C, D, E, T); + BODY_40_59 (U, 43, T, A, B, C, D, E); + BODY_40_59 (U, 44, E, T, A, B, C, D); + BODY_40_59 (U, 45, D, E, T, A, B, C); + BODY_40_59 (U, 46, C, D, E, T, A, B); + BODY_40_59 (U, 47, B, C, D, E, T, A); + BODY_40_59 (U, 48, A, B, C, D, E, T); + BODY_40_59 (U, 49, T, A, B, C, D, E); + BODY_40_59 (U, 50, E, T, A, B, C, D); + BODY_40_59 (U, 51, D, E, T, A, B, C); + BODY_40_59 (U, 52, C, D, E, T, A, B); + BODY_40_59 (U, 53, B, C, D, E, T, A); + BODY_40_59 (U, 54, A, B, C, D, E, T); + BODY_40_59 (U, 55, T, A, B, C, D, E); + BODY_40_59 (U, 56, E, T, A, B, C, D); + BODY_40_59 (U, 57, D, E, T, A, B, C); + BODY_40_59 (U, 58, C, D, E, T, A, B); + BODY_40_59 (U, 59, B, C, D, E, T, A); + + BODY_60_79 (U, 60, A, B, C, D, E, T); + BODY_60_79 (U, 61, T, A, B, C, D, E); + BODY_60_79 (U, 62, E, T, A, B, C, D); + BODY_60_79 (U, 63, D, E, T, A, B, C); + BODY_60_79 (U, 64, C, D, E, T, A, B); + BODY_60_79 (U, 65, B, C, D, E, T, A); + BODY_60_79 (U, 66, A, B, C, D, E, T); + BODY_60_79 (U, 67, T, A, B, C, D, E); + BODY_60_79 (U, 68, E, T, A, B, C, D); + BODY_60_79 (U, 69, D, E, T, A, B, C); + BODY_60_79 (U, 70, C, D, E, T, A, B); + BODY_60_79 (U, 71, B, C, D, E, T, A); + BODY_60_79 (U, 72, A, B, C, D, E, T); + BODY_60_79 (U, 73, T, A, B, C, D, E); + BODY_60_79 (U, 74, E, T, A, B, C, D); + BODY_60_79 (U, 75, D, E, T, A, B, C); + BODY_60_79 (U, 76, C, D, E, T, A, B); + BODY_60_79 (U, 77, B, C, D, E, T, A); + BODY_60_79 (U, 78, A, B, C, D, E, T); + BODY_60_79 (U, 79, T, A, B, C, D, E); + + ctx->m_nA += E; + ctx->m_nB += T; + ctx->m_nC += A; + ctx->m_nD += B; + ctx->m_nE += C; +} + +static void endSHA(DigestContextSHA *ctx) +{ + static const sal_uInt8 end[4] = + { + 0x80, 0x00, 0x00, 0x00 + }; + const sal_uInt8 *p = end; + + sal_uInt32 *X; + int i; + + X = ctx->m_pData; + i = (ctx->m_nDatLen >> 2); + +#ifdef OSL_BIGENDIAN + swapLong(X, i + 1); +#endif /* OSL_BIGENDIAN */ + + switch (ctx->m_nDatLen & 0x03) + { + case 1: X[i] &= 0x000000ff; break; + case 2: X[i] &= 0x0000ffff; break; + case 3: X[i] &= 0x00ffffff; break; + } + + switch (ctx->m_nDatLen & 0x03) + { + case 0: X[i] = static_cast(*(p++)) << 0; + [[fallthrough]]; + case 1: X[i] |= static_cast(*(p++)) << 8; + [[fallthrough]]; + case 2: X[i] |= static_cast(*(p++)) << 16; + [[fallthrough]]; + case 3: X[i] |= static_cast(*(p++)) << 24; + } + + swapLong(X, i + 1); + + i += 1; + + // tdf#114939 NB: this is WRONG and should be ">" not ">=" but is not + // fixed as this buggy SHA1 implementation is needed for compatibility + if (i >= (DIGEST_LBLOCK_SHA - 2)) + { + for (; i < DIGEST_LBLOCK_SHA; i++) + { + X[i] = 0; + } + + updateSHA(ctx); + i = 0; + } + + for (; i < (DIGEST_LBLOCK_SHA - 2); i++) + { + X[i] = 0; + } + + X[DIGEST_LBLOCK_SHA - 2] = ctx->m_nH; + X[DIGEST_LBLOCK_SHA - 1] = ctx->m_nL; + + updateSHA(ctx); +} + +const Digest_Impl SHA_0 = +{ + rtl_Digest_AlgorithmSHA, + RTL_DIGEST_LENGTH_SHA, + nullptr, + rtl_digest_destroySHA, + rtl_digest_updateSHA, + rtl_digest_getSHA +}; + +static sal_uInt32 updateSHA_0(sal_uInt32 x) +{ + return x; +} + +rtlDigestError SAL_CALL rtl_digest_SHA( + const void *pData, sal_uInt32 nDatLen, + sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl digest; + rtlDigestError result; + + digest.m_digest = SHA_0; + initSHA(&(digest.m_context), updateSHA_0); + + result = rtl_digest_updateSHA(&digest, pData, nDatLen); + if (result == rtl_Digest_E_None) + result = rtl_digest_getSHA(&digest, pBuffer, nBufLen); + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return result; +} + +rtlDigest SAL_CALL rtl_digest_createSHA() SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = RTL_DIGEST_CREATE(DigestSHA_Impl); + if (pImpl) + { + pImpl->m_digest = SHA_0; + initSHA(&(pImpl->m_context), updateSHA_0); + } + return static_cast(pImpl); +} + +rtlDigestError SAL_CALL rtl_digest_updateSHA( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = static_cast(Digest); + const sal_uInt8 *d = static_cast(pData); + + DigestContextSHA *ctx; + sal_uInt32 len; + + if (!pImpl || !pData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA) + return rtl_Digest_E_Algorithm; + + if (nDatLen == 0) + return rtl_Digest_E_None; + + ctx = &(pImpl->m_context); + + len = ctx->m_nL + (nDatLen << 3); + if (len < ctx->m_nL) + ctx->m_nH += 1; + + ctx->m_nH += (nDatLen >> 29); + ctx->m_nL = len; + + if (ctx->m_nDatLen) + { + sal_uInt8 *p = reinterpret_cast(ctx->m_pData) + ctx->m_nDatLen; + sal_uInt32 n = DIGEST_CBLOCK_SHA - ctx->m_nDatLen; + + if (nDatLen < n) + { + memcpy(p, d, nDatLen); + ctx->m_nDatLen += nDatLen; + + return rtl_Digest_E_None; + } + + memcpy(p, d, n); + d += n; + nDatLen -= n; + +#ifndef OSL_BIGENDIAN + swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA); +#endif /* OSL_BIGENDIAN */ + + updateSHA(ctx); + ctx->m_nDatLen = 0; + } + + while (nDatLen >= DIGEST_CBLOCK_SHA) + { + memcpy(ctx->m_pData, d, DIGEST_CBLOCK_SHA); + d += DIGEST_CBLOCK_SHA; + nDatLen -= DIGEST_CBLOCK_SHA; + +#ifndef OSL_BIGENDIAN + swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA); +#endif /* OSL_BIGENDIAN */ + + updateSHA(ctx); + } + + memcpy(ctx->m_pData, d, nDatLen); + ctx->m_nDatLen = nDatLen; + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_getSHA( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = static_cast(Digest); + sal_uInt8 *p = pBuffer; + + DigestContextSHA *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + ctx = &(pImpl->m_context); + + endSHA(ctx); + RTL_DIGEST_HTONL(ctx->m_nA, p); + RTL_DIGEST_HTONL(ctx->m_nB, p); + RTL_DIGEST_HTONL(ctx->m_nC, p); + RTL_DIGEST_HTONL(ctx->m_nD, p); + RTL_DIGEST_HTONL(ctx->m_nE, p); + initSHA(ctx, updateSHA_0); + + return rtl_Digest_E_None; +} + +void SAL_CALL rtl_digest_destroySHA(rtlDigest Digest) SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = static_cast< DigestSHA_Impl * >(Digest); + if (pImpl) + { + if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmSHA) + rtl_freeZeroMemory(pImpl, sizeof(DigestSHA_Impl)); + else + free(pImpl); + } +} + +const Digest_Impl SHA_1 = +{ + rtl_Digest_AlgorithmSHA1, + RTL_DIGEST_LENGTH_SHA1, + nullptr, + rtl_digest_destroySHA1, + rtl_digest_updateSHA1, + rtl_digest_getSHA1 +}; + +static sal_uInt32 updateSHA_1(sal_uInt32 x) +{ + return RTL_DIGEST_ROTL(x, 1); +} + +rtlDigestError SAL_CALL rtl_digest_SHA1( + const void *pData, sal_uInt32 nDatLen, + sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl digest; + rtlDigestError result; + + digest.m_digest = SHA_1; + initSHA(&(digest.m_context), updateSHA_1); + + result = rtl_digest_updateSHA1(&digest, pData, nDatLen); + if (result == rtl_Digest_E_None) + result = rtl_digest_getSHA1(&digest, pBuffer, nBufLen); + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return result; +} + +rtlDigest SAL_CALL rtl_digest_createSHA1() SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = RTL_DIGEST_CREATE(DigestSHA_Impl); + if (pImpl) + { + pImpl->m_digest = SHA_1; + initSHA(&(pImpl->m_context), updateSHA_1); + } + return static_cast(pImpl); +} + +rtlDigestError SAL_CALL rtl_digest_updateSHA1( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = static_cast< DigestSHA_Impl * >(Digest); + const sal_uInt8 *d = static_cast< const sal_uInt8 * >(pData); + + DigestContextSHA *ctx; + sal_uInt32 len; + + if (!pImpl || !pData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA1) + return rtl_Digest_E_Algorithm; + + if (nDatLen == 0) + return rtl_Digest_E_None; + + ctx = &(pImpl->m_context); + + len = ctx->m_nL + (nDatLen << 3); + if (len < ctx->m_nL) + ctx->m_nH += 1; + + ctx->m_nH += (nDatLen >> 29); + ctx->m_nL = len; + + if (ctx->m_nDatLen) + { + sal_uInt8 *p = reinterpret_cast(ctx->m_pData) + ctx->m_nDatLen; + sal_uInt32 n = DIGEST_CBLOCK_SHA - ctx->m_nDatLen; + + if (nDatLen < n) + { + memcpy(p, d, nDatLen); + ctx->m_nDatLen += nDatLen; + + return rtl_Digest_E_None; + } + + memcpy(p, d, n); + d += n; + nDatLen -= n; + +#ifndef OSL_BIGENDIAN + swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA); +#endif /* OSL_BIGENDIAN */ + + updateSHA(ctx); + ctx->m_nDatLen = 0; + } + + while (nDatLen >= DIGEST_CBLOCK_SHA) + { + memcpy(ctx->m_pData, d, DIGEST_CBLOCK_SHA); + d += DIGEST_CBLOCK_SHA; + nDatLen -= DIGEST_CBLOCK_SHA; + +#ifndef OSL_BIGENDIAN + swapLong(ctx->m_pData, DIGEST_LBLOCK_SHA); +#endif /* OSL_BIGENDIAN */ + + updateSHA(ctx); + } + + memcpy(ctx->m_pData, d, nDatLen); + ctx->m_nDatLen = nDatLen; + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_getSHA1 ( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = static_cast(Digest); + sal_uInt8 *p = pBuffer; + + DigestContextSHA *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmSHA1) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + ctx = &(pImpl->m_context); + + endSHA(ctx); + RTL_DIGEST_HTONL(ctx->m_nA, p); + RTL_DIGEST_HTONL(ctx->m_nB, p); + RTL_DIGEST_HTONL(ctx->m_nC, p); + RTL_DIGEST_HTONL(ctx->m_nD, p); + RTL_DIGEST_HTONL(ctx->m_nE, p); + initSHA(ctx, updateSHA_1); + + return rtl_Digest_E_None; +} + +void SAL_CALL rtl_digest_destroySHA1(rtlDigest Digest) SAL_THROW_EXTERN_C() +{ + DigestSHA_Impl *pImpl = static_cast< DigestSHA_Impl * >(Digest); + if (pImpl) + { + if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmSHA1) + rtl_freeZeroMemory(pImpl, sizeof(DigestSHA_Impl)); + else + free(pImpl); + } +} + +#define DIGEST_CBLOCK_HMAC_MD5 64 + +namespace { + +struct ContextHMAC_MD5 +{ + DigestMD5_Impl m_hash; + sal_uInt8 m_opad[DIGEST_CBLOCK_HMAC_MD5]; +}; + +struct DigestHMAC_MD5_Impl +{ + Digest_Impl m_digest; + ContextHMAC_MD5 m_context; +}; + +} + +static void initHMAC_MD5(ContextHMAC_MD5 * ctx); +static void ipadHMAC_MD5(ContextHMAC_MD5 * ctx); +static void opadHMAC_MD5(ContextHMAC_MD5 * ctx); + +const Digest_Impl HMAC_MD5 = +{ + rtl_Digest_AlgorithmHMAC_MD5, + RTL_DIGEST_LENGTH_MD5, + + rtl_digest_initHMAC_MD5, + rtl_digest_destroyHMAC_MD5, + rtl_digest_updateHMAC_MD5, + rtl_digest_getHMAC_MD5 +}; + +static void initHMAC_MD5(ContextHMAC_MD5 * ctx) +{ + DigestMD5_Impl *pImpl = &(ctx->m_hash); + + pImpl->m_digest = MD5; + initMD5(&(pImpl->m_context)); + + memset(ctx->m_opad, 0, DIGEST_CBLOCK_HMAC_MD5); +} + +static void ipadHMAC_MD5(ContextHMAC_MD5 * ctx) +{ + sal_uInt32 i; + + for (i = 0; i < DIGEST_CBLOCK_HMAC_MD5; i++) + { + ctx->m_opad[i] ^= 0x36; + } + + rtl_digest_updateMD5(&(ctx->m_hash), ctx->m_opad, DIGEST_CBLOCK_HMAC_MD5); + + for (i = 0; i < DIGEST_CBLOCK_HMAC_MD5; i++) + { + ctx->m_opad[i] ^= 0x36; + } +} + +static void opadHMAC_MD5(ContextHMAC_MD5 * ctx) +{ + sal_uInt32 i; + + for (i = 0; i < DIGEST_CBLOCK_HMAC_MD5; i++) + { + ctx->m_opad[i] ^= 0x5c; + } +} + +rtlDigestError SAL_CALL rtl_digest_HMAC_MD5( + const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen, + const void *pData, sal_uInt32 nDatLen, + sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C() +{ + DigestHMAC_MD5_Impl digest; + rtlDigestError result; + + digest.m_digest = HMAC_MD5; + + result = rtl_digest_initHMAC_MD5(&digest, pKeyData, nKeyLen); + if (result == rtl_Digest_E_None) + { + result = rtl_digest_updateHMAC_MD5(&digest, pData, nDatLen); + if (result == rtl_Digest_E_None) + result = rtl_digest_getHMAC_MD5(&digest, pBuffer, nBufLen); + } + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return result; +} + +rtlDigest SAL_CALL rtl_digest_createHMAC_MD5() SAL_THROW_EXTERN_C() +{ + DigestHMAC_MD5_Impl *pImpl = RTL_DIGEST_CREATE(DigestHMAC_MD5_Impl); + if (pImpl) + { + pImpl->m_digest = HMAC_MD5; + initHMAC_MD5(&(pImpl->m_context)); + } + return static_cast< rtlDigest >(pImpl); +} + +rtlDigestError SAL_CALL rtl_digest_initHMAC_MD5( + rtlDigest Digest, const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_MD5_Impl *pImpl = static_cast< DigestHMAC_MD5_Impl* >(Digest); + ContextHMAC_MD5 *ctx; + + if (!pImpl || !pKeyData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_MD5) + return rtl_Digest_E_Algorithm; + + ctx = &(pImpl->m_context); + initHMAC_MD5(ctx); + + if (nKeyLen > DIGEST_CBLOCK_HMAC_MD5) + { + /* Initialize 'opad' with hashed 'KeyData' */ + rtl_digest_updateMD5(&(ctx->m_hash), pKeyData, nKeyLen); + rtl_digest_getMD5(&(ctx->m_hash), ctx->m_opad, RTL_DIGEST_LENGTH_MD5); + } + else + { + /* Initialize 'opad' with plain 'KeyData' */ + memcpy(ctx->m_opad, pKeyData, nKeyLen); + } + + ipadHMAC_MD5(ctx); + opadHMAC_MD5(ctx); + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_updateHMAC_MD5( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_MD5_Impl *pImpl = static_cast< DigestHMAC_MD5_Impl* >(Digest); + ContextHMAC_MD5 *ctx; + + if (!pImpl || !pData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_MD5) + return rtl_Digest_E_Algorithm; + + ctx = &(pImpl->m_context); + rtl_digest_updateMD5(&(ctx->m_hash), pData, nDatLen); + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_getHMAC_MD5( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_MD5_Impl *pImpl = static_cast(Digest); + ContextHMAC_MD5 *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_MD5) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + nBufLen = pImpl->m_digest.m_length; + + ctx = &(pImpl->m_context); + rtl_digest_getMD5(&(ctx->m_hash), pBuffer, nBufLen); + + rtl_digest_updateMD5(&(ctx->m_hash), ctx->m_opad, 64); + rtl_digest_updateMD5(&(ctx->m_hash), pBuffer, nBufLen); + rtl_digest_getMD5(&(ctx->m_hash), pBuffer, nBufLen); + + opadHMAC_MD5(ctx); + ipadHMAC_MD5(ctx); + opadHMAC_MD5(ctx); + + return rtl_Digest_E_None; +} + +void SAL_CALL rtl_digest_destroyHMAC_MD5(rtlDigest Digest) SAL_THROW_EXTERN_C() +{ + DigestHMAC_MD5_Impl *pImpl = static_cast< DigestHMAC_MD5_Impl* >(Digest); + if (pImpl) + { + if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmHMAC_MD5) + rtl_freeZeroMemory(pImpl, sizeof(DigestHMAC_MD5_Impl)); + else + free(pImpl); + } +} + +#define DIGEST_CBLOCK_HMAC_SHA1 64 + +namespace { + +struct ContextHMAC_SHA1 +{ + DigestSHA_Impl m_hash; + sal_uInt8 m_opad[DIGEST_CBLOCK_HMAC_SHA1]; +}; + +struct DigestHMAC_SHA1_Impl +{ + Digest_Impl m_digest; + ContextHMAC_SHA1 m_context; +}; + +} + +static void initHMAC_SHA1(ContextHMAC_SHA1 * ctx); +static void ipadHMAC_SHA1(ContextHMAC_SHA1 * ctx); +static void opadHMAC_SHA1(ContextHMAC_SHA1 * ctx); + +const Digest_Impl HMAC_SHA1 = +{ + rtl_Digest_AlgorithmHMAC_SHA1, + RTL_DIGEST_LENGTH_SHA1, + rtl_digest_initHMAC_SHA1, + rtl_digest_destroyHMAC_SHA1, + rtl_digest_updateHMAC_SHA1, + rtl_digest_getHMAC_SHA1 +}; + +static void initHMAC_SHA1(ContextHMAC_SHA1 * ctx) +{ + DigestSHA_Impl *pImpl = &(ctx->m_hash); + + pImpl->m_digest = SHA_1; + initSHA(&(pImpl->m_context), updateSHA_1); + + memset(ctx->m_opad, 0, DIGEST_CBLOCK_HMAC_SHA1); +} + +static void ipadHMAC_SHA1(ContextHMAC_SHA1 * ctx) +{ + sal_uInt32 i; + + for (i = 0; i < DIGEST_CBLOCK_HMAC_SHA1; i++) + { + ctx->m_opad[i] ^= 0x36; + } + + rtl_digest_updateSHA1(&(ctx->m_hash), ctx->m_opad, DIGEST_CBLOCK_HMAC_SHA1); + + for (i = 0; i < DIGEST_CBLOCK_HMAC_SHA1; i++) + { + ctx->m_opad[i] ^= 0x36; + } +} + +static void opadHMAC_SHA1(ContextHMAC_SHA1 * ctx) +{ + sal_uInt32 i; + + for (i = 0; i < DIGEST_CBLOCK_HMAC_SHA1; i++) + { + ctx->m_opad[i] ^= 0x5c; + } +} + +rtlDigestError SAL_CALL rtl_digest_HMAC_SHA1( + const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen, + const void *pData, sal_uInt32 nDatLen, + sal_uInt8 *pBuffer, sal_uInt32 nBufLen) SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl digest; + rtlDigestError result; + + digest.m_digest = HMAC_SHA1; + + result = rtl_digest_initHMAC_SHA1(&digest, pKeyData, nKeyLen); + if (result == rtl_Digest_E_None) + { + result = rtl_digest_updateHMAC_SHA1(&digest, pData, nDatLen); + if (result == rtl_Digest_E_None) + result = rtl_digest_getHMAC_SHA1(&digest, pBuffer, nBufLen); + } + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return result; +} + +rtlDigest SAL_CALL rtl_digest_createHMAC_SHA1() SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl *pImpl = RTL_DIGEST_CREATE(DigestHMAC_SHA1_Impl); + if (pImpl) + { + pImpl->m_digest = HMAC_SHA1; + initHMAC_SHA1(&(pImpl->m_context)); + } + return static_cast(pImpl); +} + +rtlDigestError SAL_CALL rtl_digest_initHMAC_SHA1( + rtlDigest Digest, const sal_uInt8 *pKeyData, sal_uInt32 nKeyLen) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl *pImpl = static_cast(Digest); + ContextHMAC_SHA1 *ctx; + + if (!pImpl || !pKeyData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_SHA1) + return rtl_Digest_E_Algorithm; + + ctx = &(pImpl->m_context); + initHMAC_SHA1(ctx); + + if (nKeyLen > DIGEST_CBLOCK_HMAC_SHA1) + { + /* Initialize 'opad' with hashed 'KeyData' */ + rtl_digest_updateSHA1(&(ctx->m_hash), pKeyData, nKeyLen); + rtl_digest_getSHA1(&(ctx->m_hash), ctx->m_opad, RTL_DIGEST_LENGTH_SHA1); + } + else + { + /* Initialize 'opad' with plain 'KeyData' */ + memcpy(ctx->m_opad, pKeyData, nKeyLen); + } + + ipadHMAC_SHA1(ctx); + opadHMAC_SHA1(ctx); + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_updateHMAC_SHA1( + rtlDigest Digest, const void *pData, sal_uInt32 nDatLen) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl *pImpl = static_cast(Digest); + ContextHMAC_SHA1 *ctx; + + if (!pImpl || !pData) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_SHA1) + return rtl_Digest_E_Algorithm; + + ctx = &(pImpl->m_context); + rtl_digest_updateSHA1(&(ctx->m_hash), pData, nDatLen); + + return rtl_Digest_E_None; +} + +rtlDigestError SAL_CALL rtl_digest_getHMAC_SHA1( + rtlDigest Digest, sal_uInt8 *pBuffer, sal_uInt32 nBufLen) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl *pImpl = static_cast(Digest); + ContextHMAC_SHA1 *ctx; + + if (!pImpl || !pBuffer) + return rtl_Digest_E_Argument; + + if (pImpl->m_digest.m_algorithm != rtl_Digest_AlgorithmHMAC_SHA1) + return rtl_Digest_E_Algorithm; + + if (pImpl->m_digest.m_length > nBufLen) + return rtl_Digest_E_BufferSize; + + nBufLen = pImpl->m_digest.m_length; + + ctx = &(pImpl->m_context); + rtl_digest_getSHA1(&(ctx->m_hash), pBuffer, nBufLen); + + rtl_digest_updateSHA1(&(ctx->m_hash), ctx->m_opad, sizeof(ctx->m_opad)); + rtl_digest_updateSHA1(&(ctx->m_hash), pBuffer, nBufLen); + rtl_digest_getSHA1(&(ctx->m_hash), pBuffer, nBufLen); + + opadHMAC_SHA1(ctx); + ipadHMAC_SHA1(ctx); + opadHMAC_SHA1(ctx); + + return rtl_Digest_E_None; +} + +void SAL_CALL rtl_digest_destroyHMAC_SHA1(rtlDigest Digest) + SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl *pImpl = static_cast(Digest); + if (pImpl) + { + if (pImpl->m_digest.m_algorithm == rtl_Digest_AlgorithmHMAC_SHA1) + rtl_freeZeroMemory(pImpl, sizeof(DigestHMAC_SHA1_Impl)); + else + free(pImpl); + } +} + +#define DIGEST_CBLOCK_PBKDF2 RTL_DIGEST_LENGTH_HMAC_SHA1 + +static void updatePBKDF2( + rtlDigest hDigest, + sal_uInt8 T[DIGEST_CBLOCK_PBKDF2], + const sal_uInt8 *pSaltData, sal_uInt32 nSaltLen, + sal_uInt32 nCount, sal_uInt32 nIndex) +{ + /* T_i = F (P, S, c, i) */ + sal_uInt8 U[DIGEST_CBLOCK_PBKDF2]; + sal_uInt32 i, k; + + /* U_(1) = PRF (P, S || INDEX) */ + rtl_digest_updateHMAC_SHA1(hDigest, pSaltData, nSaltLen); + rtl_digest_updateHMAC_SHA1(hDigest, &nIndex, sizeof(nIndex)); + rtl_digest_getHMAC_SHA1(hDigest, U, DIGEST_CBLOCK_PBKDF2); + + /* T = U_(1) */ + for (k = 0; k < DIGEST_CBLOCK_PBKDF2; k++) + { + T[k] = U[k]; + } + + /* T ^= U_(2) ^ ... ^ U_(c) */ + for (i = 1; i < nCount; i++) + { + /* U_(i) = PRF (P, U_(i-1)) */ + rtl_digest_updateHMAC_SHA1(hDigest, U, DIGEST_CBLOCK_PBKDF2); + rtl_digest_getHMAC_SHA1(hDigest, U, DIGEST_CBLOCK_PBKDF2); + + /* T ^= U_(i) */ + for (k = 0; k < DIGEST_CBLOCK_PBKDF2; k++) + { + T[k] ^= U[k]; + } + } + + rtl_secureZeroMemory(U, DIGEST_CBLOCK_PBKDF2); +} + +rtlDigestError SAL_CALL rtl_digest_PBKDF2( + sal_uInt8 *pKeyData , sal_uInt32 nKeyLen, + const sal_uInt8 *pPassData, sal_uInt32 nPassLen, + const sal_uInt8 *pSaltData, sal_uInt32 nSaltLen, + sal_uInt32 nCount) SAL_THROW_EXTERN_C() +{ + DigestHMAC_SHA1_Impl digest; + sal_uInt32 i = 1; + + if (!pKeyData || !pPassData || !pSaltData) + return rtl_Digest_E_Argument; + + digest.m_digest = HMAC_SHA1; + rtl_digest_initHMAC_SHA1(&digest, pPassData, nPassLen); + + /* DK = T_(1) || T_(2) || ... || T_(l) */ + while (nKeyLen >= DIGEST_CBLOCK_PBKDF2) + { + /* T_(i) = F (P, S, c, i); DK ||= T_(i) */ + updatePBKDF2( + &digest, pKeyData, + pSaltData, nSaltLen, + nCount, OSL_NETDWORD(i)); + + /* Next 'KeyData' block */ + pKeyData += DIGEST_CBLOCK_PBKDF2; + nKeyLen -= DIGEST_CBLOCK_PBKDF2; + i += 1; + } + + if (nKeyLen > 0) + { + /* Last 'KeyData' block */ + sal_uInt8 T[DIGEST_CBLOCK_PBKDF2]; + + /* T_i = F (P, S, c, i) */ + updatePBKDF2( + &digest, T, + pSaltData, nSaltLen, + nCount, OSL_NETDWORD(i)); + + /* DK ||= T_(i) */ + memcpy(pKeyData, T, nKeyLen); + rtl_secureZeroMemory(T, DIGEST_CBLOCK_PBKDF2); + } + + rtl_secureZeroMemory(&digest, sizeof(digest)); + return rtl_Digest_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/hash.cxx b/sal/rtl/hash.cxx new file mode 100644 index 000000000..4fed60889 --- /dev/null +++ b/sal/rtl/hash.cxx @@ -0,0 +1,241 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "hash.hxx" +#include "strimp.hxx" +#include +#include + +namespace { + +struct StringHashTableImpl { + sal_uInt32 nEntries; + sal_uInt32 nSize; + rtl_uString **pData; +}; + +} + +typedef StringHashTableImpl StringHashTable; + +// Only for use in the implementation +static StringHashTable *rtl_str_hash_new(sal_uInt32 nSize); +static void rtl_str_hash_free(StringHashTable *pHash); + +static StringHashTable * getHashTable() +{ + static StringHashTable* pInternPool = rtl_str_hash_new(1024); + return pInternPool; +} + +// Better / smaller / faster hash set... + +// TODO: add bottom bit-set list terminator to string list + +static sal_uInt32 getNextSize(sal_uInt32 nSize) +{ + // Sedgewick - Algorithms in C P577. + static const sal_uInt32 nPrimes[] = { 1021, 2039, 4093, 8191, 16381, 32749, + 65521, 131071,262139, 524287, 1048573, + 2097143, 4194301, 8388593, 16777213, + 33554393, 67108859, 134217689 }; + + for (sal_uInt32 nPrime : nPrimes) + { + if (nPrime > nSize) + return nPrime; + } + return nSize * 2; +} + +static sal_uInt32 hashString(rtl_uString *pString) +{ + return static_cast(rtl_ustr_hashCode_WithLength(pString->buffer, + pString->length)); +} + +static StringHashTable * rtl_str_hash_new(sal_uInt32 nSize) +{ + StringHashTable *pHash = static_cast(malloc(sizeof(StringHashTable))); + + pHash->nEntries = 0; + pHash->nSize = getNextSize (nSize); + pHash->pData = static_cast< rtl_uString ** >(calloc(sizeof(rtl_uString *), pHash->nSize)); + + return pHash; +} + +static void rtl_str_hash_free(StringHashTable *pHash) +{ + if (!pHash) + return; + + if (pHash->pData) + free(pHash->pData); + + free(pHash); +} + +static void +rtl_str_hash_insert_nonequal(StringHashTable *pHash, + rtl_uString *pString) +{ + sal_uInt32 nHash = hashString(pString); + sal_uInt32 n; + + n = nHash % pHash->nSize; + while (pHash->pData[n]) + { + n++; + if (n >= pHash->nSize) + n = 0; + } + pHash->pData[n] = pString; +} + +static void rtl_str_hash_resize(sal_uInt32 nNewSize) +{ + sal_uInt32 i; + StringHashTable *pNewHash; + StringHashTable *pHash = getHashTable(); + + OSL_ASSERT(nNewSize > pHash->nEntries); + + pNewHash = rtl_str_hash_new(nNewSize); + + for (i = 0; i < pHash->nSize; i++) + { + if (pHash->pData[i]) + rtl_str_hash_insert_nonequal(pNewHash, pHash->pData[i]); + } + + pNewHash->nEntries = pHash->nEntries; + free(pHash->pData); + *pHash = *pNewHash; + pNewHash->pData = nullptr; + rtl_str_hash_free(pNewHash); +} + +static bool compareEqual(rtl_uString *pStringA, rtl_uString *pStringB) +{ + if (pStringA == pStringB) + return true; + + if (pStringA->length != pStringB->length) + return false; + + return !rtl_ustr_compare_WithLength( pStringA->buffer, pStringA->length, + pStringB->buffer, pStringB->length); +} + +rtl_uString * rtl_str_hash_intern ( + rtl_uString *pString, + int can_return) +{ + sal_uInt32 nHash = hashString(pString); + sal_uInt32 n; + rtl_uString *pHashStr; + + StringHashTable *pHash = getHashTable(); + + // Should we resize ? + if (pHash->nEntries >= pHash->nSize/2) + rtl_str_hash_resize(getNextSize(pHash->nSize)); + + n = nHash % pHash->nSize; + while ((pHashStr = pHash->pData[n])) + { + if (compareEqual(pHashStr, pString)) + { + rtl_uString_acquire(pHashStr); + return pHashStr; + } + + n++; + if (n >= pHash->nSize) + n = 0; + } + + if (!can_return) + { + rtl_uString *pCopy = nullptr; + rtl_uString_newFromString( &pCopy, pString ); + pString = pCopy; + + if (!pString) + return nullptr; + } + + if (!SAL_STRING_IS_STATIC(pString)) + pString->refCount |= SAL_STRING_INTERN_FLAG; + + pHash->pData[n] = pString; + pHash->nEntries++; + + return pString; +} + +void rtl_str_hash_remove(rtl_uString *pString) +{ + sal_uInt32 n; + sal_uInt32 nHash = hashString(pString); + rtl_uString *pHashStr; + + StringHashTable *pHash = getHashTable(); + + n = nHash % pHash->nSize; + while ((pHashStr = pHash->pData[n])) + { + if (compareEqual(pHashStr, pString)) + break; + + n++; + + if (n >= pHash->nSize) + n = 0; + } + + OSL_ASSERT(pHash->pData[n]); + if (!pHash->pData[n]) + return; + + pHash->pData[n++] = nullptr; + pHash->nEntries--; + + if (n >= pHash->nSize) + n = 0; + + while ((pHashStr = pHash->pData[n])) + { + pHash->pData[n] = nullptr; + // FIXME: rather unsophisticated and N^2 in chain-length, but robust. + rtl_str_hash_insert_nonequal(pHash, pHashStr); + n++; + + if (n >= pHash->nSize) + n = 0; + } + // FIXME: Should we down-size ? +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/hash.hxx b/sal/rtl/hash.hxx new file mode 100644 index 000000000..9f80448e7 --- /dev/null +++ b/sal/rtl/hash.hxx @@ -0,0 +1,33 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_RTL_HASH_HXX +#define INCLUDED_SAL_RTL_HASH_HXX + +#include + +/* These functions are not multi-thread safe: */ + +rtl_uString *rtl_str_hash_intern (rtl_uString *pString, + int can_return); +void rtl_str_hash_remove (rtl_uString *pString); + +#endif // INCLUDED_SAL_RTL_HASH_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/locale.cxx b/sal/rtl/locale.cxx new file mode 100644 index 000000000..742041ac1 --- /dev/null +++ b/sal/rtl/locale.cxx @@ -0,0 +1,136 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include + +#include +#include +#include + +namespace { + +struct locale_deleter +{ + void operator() (rtl_Locale* p) noexcept + { + rtl_uString_release(p->Language); + rtl_uString_release(p->Country); + rtl_uString_release(p->Variant); + delete p; + } +}; + +} + +using locale_unique_ptr = std::unique_ptr; + +static std::unordered_map g_aLocaleTable; + +static rtl_Locale* g_pDefaultLocale = nullptr; + +void rtl_locale_init() +{ +} + +void rtl_locale_fini() +{ + g_aLocaleTable.clear(); + g_pDefaultLocale = nullptr; +} + +rtl_Locale * SAL_CALL rtl_locale_register(const sal_Unicode * language, const sal_Unicode * country, const sal_Unicode * variant) +{ + sal_Unicode c = 0; + rtl_uString* sLanguage = nullptr; + rtl_uString* sCountry = nullptr; + rtl_uString* sVariant = nullptr; + sal_Int32 hashCode = -1; + + if (!country) + country = &c; + + if (!variant) + variant = &c; + + ensureLocaleSingleton(); + + hashCode = rtl_ustr_hashCode(language) ^ rtl_ustr_hashCode(country) ^ rtl_ustr_hashCode(variant); + + auto it = g_aLocaleTable.find(hashCode); + if (it != g_aLocaleTable.end()) + return it->second.get(); + + rtl_uString_newFromStr(&sLanguage, language); + rtl_uString_newFromStr(&sCountry, country); + rtl_uString_newFromStr(&sVariant, variant); + + locale_unique_ptr newLocale(new rtl_Locale); + + newLocale->Language = sLanguage; + newLocale->Country = sCountry; + newLocale->Variant = sVariant; + newLocale->HashCode = hashCode; + + auto ret = newLocale.get(); + g_aLocaleTable.insert(it, std::pair( hashCode, std::move(newLocale) ) ); + return ret; +} + +rtl_Locale * SAL_CALL rtl_locale_getDefault() +{ + return g_pDefaultLocale; +} + +void SAL_CALL rtl_locale_setDefault(const sal_Unicode * language, const sal_Unicode * country, const sal_Unicode * variant) +{ + g_pDefaultLocale = rtl_locale_register(language, country, variant); +} + +rtl_uString * SAL_CALL rtl_locale_getLanguage(rtl_Locale * This) +{ + rtl_uString_acquire(This->Language); + return This->Language; +} + +rtl_uString * SAL_CALL rtl_locale_getCountry(rtl_Locale * This) +{ + rtl_uString_acquire(This->Country); + return This->Country; +} + +rtl_uString * SAL_CALL rtl_locale_getVariant(rtl_Locale * This) +{ + rtl_uString_acquire(This->Variant); + return This->Variant; +} + +sal_Int32 SAL_CALL rtl_locale_hashCode(rtl_Locale * This) +{ + return This->HashCode; +} + +sal_Int32 SAL_CALL rtl_locale_equals(rtl_Locale * This, rtl_Locale * obj) +{ + return This == obj; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx new file mode 100644 index 000000000..0d70e9718 --- /dev/null +++ b/sal/rtl/math.cxx @@ -0,0 +1,828 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "strtmpl.hxx" + +#include + +constexpr int minExp = -323, maxExp = 308; +constexpr double n10s[] = { + 1e-323, 1e-322, 1e-321, 1e-320, 1e-319, 1e-318, 1e-317, 1e-316, 1e-315, 1e-314, 1e-313, 1e-312, + 1e-311, 1e-310, 1e-309, 1e-308, 1e-307, 1e-306, 1e-305, 1e-304, 1e-303, 1e-302, 1e-301, 1e-300, + 1e-299, 1e-298, 1e-297, 1e-296, 1e-295, 1e-294, 1e-293, 1e-292, 1e-291, 1e-290, 1e-289, 1e-288, + 1e-287, 1e-286, 1e-285, 1e-284, 1e-283, 1e-282, 1e-281, 1e-280, 1e-279, 1e-278, 1e-277, 1e-276, + 1e-275, 1e-274, 1e-273, 1e-272, 1e-271, 1e-270, 1e-269, 1e-268, 1e-267, 1e-266, 1e-265, 1e-264, + 1e-263, 1e-262, 1e-261, 1e-260, 1e-259, 1e-258, 1e-257, 1e-256, 1e-255, 1e-254, 1e-253, 1e-252, + 1e-251, 1e-250, 1e-249, 1e-248, 1e-247, 1e-246, 1e-245, 1e-244, 1e-243, 1e-242, 1e-241, 1e-240, + 1e-239, 1e-238, 1e-237, 1e-236, 1e-235, 1e-234, 1e-233, 1e-232, 1e-231, 1e-230, 1e-229, 1e-228, + 1e-227, 1e-226, 1e-225, 1e-224, 1e-223, 1e-222, 1e-221, 1e-220, 1e-219, 1e-218, 1e-217, 1e-216, + 1e-215, 1e-214, 1e-213, 1e-212, 1e-211, 1e-210, 1e-209, 1e-208, 1e-207, 1e-206, 1e-205, 1e-204, + 1e-203, 1e-202, 1e-201, 1e-200, 1e-199, 1e-198, 1e-197, 1e-196, 1e-195, 1e-194, 1e-193, 1e-192, + 1e-191, 1e-190, 1e-189, 1e-188, 1e-187, 1e-186, 1e-185, 1e-184, 1e-183, 1e-182, 1e-181, 1e-180, + 1e-179, 1e-178, 1e-177, 1e-176, 1e-175, 1e-174, 1e-173, 1e-172, 1e-171, 1e-170, 1e-169, 1e-168, + 1e-167, 1e-166, 1e-165, 1e-164, 1e-163, 1e-162, 1e-161, 1e-160, 1e-159, 1e-158, 1e-157, 1e-156, + 1e-155, 1e-154, 1e-153, 1e-152, 1e-151, 1e-150, 1e-149, 1e-148, 1e-147, 1e-146, 1e-145, 1e-144, + 1e-143, 1e-142, 1e-141, 1e-140, 1e-139, 1e-138, 1e-137, 1e-136, 1e-135, 1e-134, 1e-133, 1e-132, + 1e-131, 1e-130, 1e-129, 1e-128, 1e-127, 1e-126, 1e-125, 1e-124, 1e-123, 1e-122, 1e-121, 1e-120, + 1e-119, 1e-118, 1e-117, 1e-116, 1e-115, 1e-114, 1e-113, 1e-112, 1e-111, 1e-110, 1e-109, 1e-108, + 1e-107, 1e-106, 1e-105, 1e-104, 1e-103, 1e-102, 1e-101, 1e-100, 1e-99, 1e-98, 1e-97, 1e-96, + 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86, 1e-85, 1e-84, + 1e-83, 1e-82, 1e-81, 1e-80, 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, + 1e-71, 1e-70, 1e-69, 1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, + 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48, + 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 1e-39, 1e-38, 1e-37, 1e-36, + 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, + 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, + 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, + 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, + 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23, 1e24, + 1e25, 1e26, 1e27, 1e28, 1e29, 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, + 1e37, 1e38, 1e39, 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, + 1e49, 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59, 1e60, + 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69, 1e70, 1e71, 1e72, + 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79, 1e80, 1e81, 1e82, 1e83, 1e84, + 1e85, 1e86, 1e87, 1e88, 1e89, 1e90, 1e91, 1e92, 1e93, 1e94, 1e95, 1e96, + 1e97, 1e98, 1e99, 1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, + 1e109, 1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119, 1e120, + 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129, 1e130, 1e131, 1e132, + 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139, 1e140, 1e141, 1e142, 1e143, 1e144, + 1e145, 1e146, 1e147, 1e148, 1e149, 1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, + 1e157, 1e158, 1e159, 1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, + 1e169, 1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179, 1e180, + 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189, 1e190, 1e191, 1e192, + 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199, 1e200, 1e201, 1e202, 1e203, 1e204, + 1e205, 1e206, 1e207, 1e208, 1e209, 1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, + 1e217, 1e218, 1e219, 1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, + 1e229, 1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239, 1e240, + 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249, 1e250, 1e251, 1e252, + 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259, 1e260, 1e261, 1e262, 1e263, 1e264, + 1e265, 1e266, 1e267, 1e268, 1e269, 1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, + 1e277, 1e278, 1e279, 1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, + 1e289, 1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299, 1e300, + 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308, +}; +static_assert(SAL_N_ELEMENTS(n10s) == maxExp - minExp + 1); + +// return pow(10.0,nExp) optimized for exponents in the interval [-323,308] (i.e., incl. denormals) +static double getN10Exp(int nExp) +{ + if (nExp < minExp || nExp > maxExp) + return pow(10.0, static_cast(nExp)); // will return 0 or INF with IEEE 754 + return n10s[nExp - minExp]; +} + +namespace { + +/** If value (passed as absolute value) is an integer representable as double, + which we handle explicitly at some places. + */ +bool isRepresentableInteger(double fAbsValue) +{ + assert(fAbsValue >= 0.0); + const sal_Int64 kMaxInt = (static_cast< sal_Int64 >(1) << 53) - 1; + if (fAbsValue <= static_cast< double >(kMaxInt)) + { + sal_Int64 nInt = static_cast< sal_Int64 >(fAbsValue); + // Check the integer range again because double comparison may yield + // true within the precision range. + // XXX loplugin:fpcomparison complains about floating-point comparison + // for static_cast(nInt) == fAbsValue, though we actually want + // this here. + if (nInt > kMaxInt) + return false; + double fInt = static_cast< double >(nInt); + return !(fInt < fAbsValue) && !(fInt > fAbsValue); + } + return false; +} + +// Returns 1-based index of least significant bit in a number, or zero if number is zero +int findFirstSetBit(unsigned n) +{ +#if defined _WIN32 + unsigned long pos; + unsigned char bNonZero = _BitScanForward(&pos, n); + return (bNonZero == 0) ? 0 : pos + 1; +#else + return __builtin_ffs(n); +#endif +} + +/** Returns number of binary bits for fractional part of the number + Expects a proper non-negative double value, not +-INF, not NAN + */ +int getBitsInFracPart(double fAbsValue) +{ + assert(std::isfinite(fAbsValue) && fAbsValue >= 0.0); + if (fAbsValue == 0.0) + return 0; + auto pValParts = reinterpret_cast< const sal_math_Double * >(&fAbsValue); + int nExponent = pValParts->inf_parts.exponent - 1023; + if (nExponent >= 52) + return 0; // All bits in fraction are in integer part of the number + int nLeastSignificant = findFirstSetBit(pValParts->inf_parts.fraction_lo); + if (nLeastSignificant == 0) + { + nLeastSignificant = findFirstSetBit(pValParts->inf_parts.fraction_hi); + if (nLeastSignificant == 0) + nLeastSignificant = 53; // the implied leading 1 is the least significant + else + nLeastSignificant += 32; + } + int nFracSignificant = 53 - nLeastSignificant; + int nBitsInFracPart = nFracSignificant - nExponent; + + return std::max(nBitsInFracPart, 0); +} + +} + +void SAL_CALL rtl_math_doubleToString(rtl_String ** pResult, + sal_Int32 * pResultCapacity, + sal_Int32 nResultOffset, double fValue, + rtl_math_StringFormat eFormat, + sal_Int32 nDecPlaces, + char cDecSeparator, + sal_Int32 const * pGroups, + char cGroupSeparator, + sal_Bool bEraseTrailingDecZeros) + SAL_THROW_EXTERN_C() +{ + rtl::str::doubleToString( + pResult, pResultCapacity, nResultOffset, fValue, eFormat, nDecPlaces, + cDecSeparator, pGroups, cGroupSeparator, bEraseTrailingDecZeros); +} + +void SAL_CALL rtl_math_doubleToUString(rtl_uString ** pResult, + sal_Int32 * pResultCapacity, + sal_Int32 nResultOffset, double fValue, + rtl_math_StringFormat eFormat, + sal_Int32 nDecPlaces, + sal_Unicode cDecSeparator, + sal_Int32 const * pGroups, + sal_Unicode cGroupSeparator, + sal_Bool bEraseTrailingDecZeros) + SAL_THROW_EXTERN_C() +{ + rtl::str::doubleToString( + pResult, pResultCapacity, nResultOffset, fValue, eFormat, nDecPlaces, + cDecSeparator, pGroups, cGroupSeparator, bEraseTrailingDecZeros); +} + +namespace { + +template< typename CharT > +double stringToDouble(CharT const * pBegin, CharT const * pEnd, + CharT cDecSeparator, CharT cGroupSeparator, + rtl_math_ConversionStatus * pStatus, + CharT const ** pParsedEnd) +{ + double fVal = 0.0; + rtl_math_ConversionStatus eStatus = rtl_math_ConversionStatus_Ok; + + CharT const * p0 = pBegin; + while (p0 != pEnd && (*p0 == CharT(' ') || *p0 == CharT('\t'))) + { + ++p0; + } + + bool bSign; + bool explicitSign = false; + if (p0 != pEnd && *p0 == CharT('-')) + { + bSign = true; + explicitSign = true; + ++p0; + } + else + { + bSign = false; + if (p0 != pEnd && *p0 == CharT('+')) + { + explicitSign = true; + ++p0; + } + } + + CharT const * p = p0; + bool bDone = false; + + // #i112652# XMLSchema-2 + if ((pEnd - p) >= 3) + { + if (!explicitSign && (CharT('N') == p[0]) && (CharT('a') == p[1]) + && (CharT('N') == p[2])) + { + p += 3; + fVal = std::numeric_limits::quiet_NaN(); + bDone = true; + } + else if ((CharT('I') == p[0]) && (CharT('N') == p[1]) + && (CharT('F') == p[2])) + { + p += 3; + fVal = HUGE_VAL; + eStatus = rtl_math_ConversionStatus_OutOfRange; + bDone = true; + } + } + + if (!bDone) // do not recognize e.g. NaN1.23 + { + std::unique_ptr bufInHeap; + std::unique_ptr bufInHeapMap; + constexpr int bufOnStackSize = 256; + char bufOnStack[bufOnStackSize]; + const CharT* bufOnStackMap[bufOnStackSize]; + char* buf = bufOnStack; + const CharT** bufmap = bufOnStackMap; + int bufpos = 0; + const size_t bufsize = pEnd - p + (bSign ? 2 : 1); + if (bufsize > bufOnStackSize) + { + bufInHeap = std::make_unique(bufsize); + bufInHeapMap = std::make_unique(bufsize); + buf = bufInHeap.get(); + bufmap = bufInHeapMap.get(); + } + + if (bSign) + { + buf[0] = '-'; + bufmap[0] = p; // yes, this may be the same pointer as for the next mapping + bufpos = 1; + } + // Put first zero to buffer for strings like "-0" + if (p != pEnd && *p == CharT('0')) + { + buf[bufpos] = '0'; + bufmap[bufpos] = p; + ++bufpos; + ++p; + } + // Leading zeros and group separators between digits may be safely + // ignored. p0 < p implies that there was a leading 0 already, + // consecutive group separators may not happen as *(p+1) is checked for + // digit. + while (p != pEnd && (*p == CharT('0') || (*p == cGroupSeparator + && p0 < p && p+1 < pEnd && rtl::isAsciiDigit(*(p+1))))) + { + ++p; + } + + // integer part of mantissa + for (; p != pEnd; ++p) + { + CharT c = *p; + if (rtl::isAsciiDigit(c)) + { + buf[bufpos] = static_cast(c); + bufmap[bufpos] = p; + ++bufpos; + } + else if (c != cGroupSeparator) + { + break; + } + else if (p == p0 || (p+1 == pEnd) || !rtl::isAsciiDigit(*(p+1))) + { + // A leading or trailing (not followed by a digit) group + // separator character is not a group separator. + break; + } + } + + // fraction part of mantissa + if (p != pEnd && *p == cDecSeparator) + { + buf[bufpos] = '.'; + bufmap[bufpos] = p; + ++bufpos; + ++p; + + for (; p != pEnd; ++p) + { + CharT c = *p; + if (!rtl::isAsciiDigit(c)) + { + break; + } + buf[bufpos] = static_cast(c); + bufmap[bufpos] = p; + ++bufpos; + } + } + + // Exponent + if (p != p0 && p != pEnd && (*p == CharT('E') || *p == CharT('e'))) + { + buf[bufpos] = 'E'; + bufmap[bufpos] = p; + ++bufpos; + ++p; + if (p != pEnd && *p == CharT('-')) + { + buf[bufpos] = '-'; + bufmap[bufpos] = p; + ++bufpos; + ++p; + } + else if (p != pEnd && *p == CharT('+')) + ++p; + + for (; p != pEnd; ++p) + { + CharT c = *p; + if (!rtl::isAsciiDigit(c)) + break; + + buf[bufpos] = static_cast(c); + bufmap[bufpos] = p; + ++bufpos; + } + } + else if (p - p0 == 2 && p != pEnd && p[0] == CharT('#') + && p[-1] == cDecSeparator && p[-2] == CharT('1')) + { + if (pEnd - p >= 4 && p[1] == CharT('I') && p[2] == CharT('N') + && p[3] == CharT('F')) + { + // "1.#INF", "+1.#INF", "-1.#INF" + p += 4; + fVal = HUGE_VAL; + eStatus = rtl_math_ConversionStatus_OutOfRange; + // Eat any further digits: + while (p != pEnd && rtl::isAsciiDigit(*p)) + ++p; + bDone = true; + } + else if (pEnd - p >= 4 && p[1] == CharT('N') && p[2] == CharT('A') + && p[3] == CharT('N')) + { + // "1.#NAN", "+1.#NAN", "-1.#NAN" + p += 4; + fVal = std::copysign(std::numeric_limits::quiet_NaN(), bSign ? -1.0 : 1.0); + bSign = false; // don't negate again + + // Eat any further digits: + while (p != pEnd && rtl::isAsciiDigit(*p)) + { + ++p; + } + bDone = true; + } + } + + if (!bDone) + { + buf[bufpos] = '\0'; + bufmap[bufpos] = p; + char* pCharParseEnd; + errno = 0; + fVal = strtod_nolocale(buf, &pCharParseEnd); + if (errno == ERANGE) + { + // Check for the dreaded rounded to 15 digits max value + // 1.79769313486232e+308 for 1.7976931348623157e+308 we wrote + // everywhere, accept with or without plus sign in exponent. + const char* b = buf; + if (b[0] == '-') + ++b; + if (((pCharParseEnd - b == 21) || (pCharParseEnd - b == 20)) + && !strncmp( b, "1.79769313486232", 16) + && (b[16] == 'e' || b[16] == 'E') + && (((pCharParseEnd - b == 21) && !strncmp( b+17, "+308", 4)) + || ((pCharParseEnd - b == 20) && !strncmp( b+17, "308", 3)))) + { + fVal = (buf < b) ? -DBL_MAX : DBL_MAX; + } + else + { + eStatus = rtl_math_ConversionStatus_OutOfRange; + } + } + p = bufmap[pCharParseEnd - buf]; + bSign = false; + } + } + + // overflow also if more than DBL_MAX_10_EXP digits without decimal + // separator, or 0. and more than DBL_MIN_10_EXP digits, ... + bool bHuge = fVal == HUGE_VAL; // g++ 3.0.1 requires it this way... + if (bHuge) + eStatus = rtl_math_ConversionStatus_OutOfRange; + + if (bSign) + fVal = -fVal; + + if (pStatus) + *pStatus = eStatus; + + if (pParsedEnd) + *pParsedEnd = p == p0 ? pBegin : p; + + return fVal; +} + +} + +double SAL_CALL rtl_math_stringToDouble(char const * pBegin, + char const * pEnd, + char cDecSeparator, + char cGroupSeparator, + rtl_math_ConversionStatus * pStatus, + char const ** pParsedEnd) + SAL_THROW_EXTERN_C() +{ + return stringToDouble( + reinterpret_cast(pBegin), + reinterpret_cast(pEnd), + static_cast(cDecSeparator), + static_cast(cGroupSeparator), pStatus, + reinterpret_cast(pParsedEnd)); +} + +double SAL_CALL rtl_math_uStringToDouble(sal_Unicode const * pBegin, + sal_Unicode const * pEnd, + sal_Unicode cDecSeparator, + sal_Unicode cGroupSeparator, + rtl_math_ConversionStatus * pStatus, + sal_Unicode const ** pParsedEnd) + SAL_THROW_EXTERN_C() +{ + return stringToDouble(pBegin, pEnd, cDecSeparator, cGroupSeparator, pStatus, + pParsedEnd); +} + +double SAL_CALL rtl_math_round(double fValue, int nDecPlaces, + enum rtl_math_RoundingMode eMode) + SAL_THROW_EXTERN_C() +{ + if (!std::isfinite(fValue)) + return fValue; + + if (fValue == 0.0) + return fValue; + + if (nDecPlaces == 0) + { + switch (eMode) + { + case rtl_math_RoundingMode_Corrected: + return std::round(fValue); + case rtl_math_RoundingMode_HalfEven: + if (const int oldMode = std::fegetround(); std::fesetround(FE_TONEAREST) == 0) + { + fValue = std::nearbyint(fValue); + std::fesetround(oldMode); + return fValue; + } + break; + default: + break; + } + } + + const double fOrigValue = fValue; + + // sign adjustment + bool bSign = std::signbit( fValue ); + if (bSign) + fValue = -fValue; + + // Rounding to decimals between integer distance precision (gaps) does not + // make sense, do not even try to multiply/divide and introduce inaccuracy. + // For same reasons, do not attempt to round integers to decimals. + if (nDecPlaces >= 0 + && (fValue >= 0x1p52 + || isRepresentableInteger(fValue))) + return fOrigValue; + + double fFac = 0; + if (nDecPlaces != 0) + { + if (nDecPlaces > 0) + { + // Determine how many decimals are representable in the precision. + // Anything greater 2^52 and 0.0 was already ruled out above. + // Theoretically 0.5, 0.25, 0.125, 0.0625, 0.03125, ... + const sal_math_Double* pd = reinterpret_cast(&fValue); + const sal_Int32 nDec = 52 - (pd->parts.exponent - 1023); + + if (nDec <= 0) + { + assert(!"Shouldn't this had been caught already as large number?"); + return fOrigValue; + } + + if (nDec < nDecPlaces) + nDecPlaces = nDec; + } + + // Avoid 1e-5 (1.0000000000000001e-05) and such inaccurate fractional + // factors that later when dividing back spoil things. For negative + // decimals divide first with the inverse, then multiply the rounded + // value back. + fFac = getN10Exp(abs(nDecPlaces)); + + if (fFac == 0.0 || (nDecPlaces < 0 && !std::isfinite(fFac))) + // Underflow, rounding to that many integer positions would be 0. + return 0.0; + + if (!std::isfinite(fFac)) + // Overflow with very small values and high number of decimals. + return fOrigValue; + + if (nDecPlaces < 0) + fValue /= fFac; + else + fValue *= fFac; + + if (!std::isfinite(fValue)) + return fOrigValue; + } + + // Round only if not already in distance precision gaps of integers, where + // for [2^52,2^53) adding 0.5 would even yield the next representable + // integer. + if (fValue < 0x1p52) + { + switch ( eMode ) + { + case rtl_math_RoundingMode_Corrected : + fValue = rtl::math::approxFloor(fValue + 0.5); + break; + case rtl_math_RoundingMode_Down: + fValue = rtl::math::approxFloor(fValue); + break; + case rtl_math_RoundingMode_Up: + fValue = rtl::math::approxCeil(fValue); + break; + case rtl_math_RoundingMode_Floor: + fValue = bSign ? rtl::math::approxCeil(fValue) + : rtl::math::approxFloor( fValue ); + break; + case rtl_math_RoundingMode_Ceiling: + fValue = bSign ? rtl::math::approxFloor(fValue) + : rtl::math::approxCeil(fValue); + break; + case rtl_math_RoundingMode_HalfDown : + { + double f = floor(fValue); + fValue = ((fValue - f) <= 0.5) ? f : ceil(fValue); + } + break; + case rtl_math_RoundingMode_HalfUp: + { + double f = floor(fValue); + fValue = ((fValue - f) < 0.5) ? f : ceil(fValue); + } + break; + case rtl_math_RoundingMode_HalfEven: +#if defined FLT_ROUNDS + /* + Use fast version. FLT_ROUNDS may be defined to a function by some compilers! + + DBL_EPSILON is the smallest fractional number which can be represented, + its reciprocal is therefore the smallest number that cannot have a + fractional part. Once you add this reciprocal to `x', its fractional part + is stripped off. Simply subtracting the reciprocal back out returns `x' + without its fractional component. + Simple, clever, and elegant - thanks to Ross Cottrell, the original author, + who placed it into public domain. + + volatile: prevent compiler from being too smart + */ + if (FLT_ROUNDS == 1) + { + volatile double x = fValue + 1.0 / DBL_EPSILON; + fValue = x - 1.0 / DBL_EPSILON; + } + else +#endif // FLT_ROUNDS + { + double f = floor(fValue); + if ((fValue - f) != 0.5) + { + fValue = floor( fValue + 0.5 ); + } + else + { + double g = f / 2.0; + fValue = (g == floor( g )) ? f : (f + 1.0); + } + } + break; + default: + OSL_ASSERT(false); + break; + } + } + + if (nDecPlaces != 0) + { + if (nDecPlaces < 0) + fValue *= fFac; + else + fValue /= fFac; + } + + if (!std::isfinite(fValue)) + return fOrigValue; + + return bSign ? -fValue : fValue; +} + +double SAL_CALL rtl_math_pow10Exp(double fValue, int nExp) SAL_THROW_EXTERN_C() +{ + return fValue * getN10Exp(nExp); +} + +double SAL_CALL rtl_math_approxValue( double fValue ) SAL_THROW_EXTERN_C() +{ + const double fBigInt = 0x1p41; // 2^41 -> only 11 bits left for fractional part, fine as decimal + if (fValue == 0.0 || fValue == HUGE_VAL || !std::isfinite( fValue) || fValue > fBigInt) + { + // We don't handle these conditions. Bail out. + return fValue; + } + + double fOrigValue = fValue; + + bool bSign = std::signbit(fValue); + if (bSign) + fValue = -fValue; + + // If the value is either integer representable as double, + // or only has small number of bits in fraction part, then we need not do any approximation + if (isRepresentableInteger(fValue) || getBitsInFracPart(fValue) <= 11) + return fOrigValue; + + int nExp = static_cast< int >(floor(log10(fValue))); + nExp = 14 - nExp; + double fExpValue = getN10Exp(abs(nExp)); + + if (nExp < 0) + fValue /= fExpValue; + else + fValue *= fExpValue; + + // If the original value was near DBL_MIN we got an overflow. Restore and + // bail out. + if (!std::isfinite(fValue)) + return fOrigValue; + + fValue = std::round(fValue); + + if (nExp < 0) + fValue *= fExpValue; + else + fValue /= fExpValue; + + // If the original value was near DBL_MAX we got an overflow. Restore and + // bail out. + if (!std::isfinite(fValue)) + return fOrigValue; + + return bSign ? -fValue : fValue; +} + +bool SAL_CALL rtl_math_approxEqual(double a, double b) SAL_THROW_EXTERN_C() +{ + static const double e48 = 0x1p-48; + static const double e44 = 0x1p-44; + + if (a == b) + return true; + + if (a == 0.0 || b == 0.0) + return false; + + const double d = fabs(a - b); + if (!std::isfinite(d)) + return false; // Nan or Inf involved + + a = fabs(a); + if (d > (a * e44)) + return false; + b = fabs(b); + if (d > (b * e44)) + return false; + + if (isRepresentableInteger(d) && isRepresentableInteger(a) && isRepresentableInteger(b)) + return false; // special case for representable integers. + + return (d < a * e48 && d < b * e48); +} + +double SAL_CALL rtl_math_expm1(double fValue) SAL_THROW_EXTERN_C() +{ + return expm1(fValue); +} + +double SAL_CALL rtl_math_log1p(double fValue) SAL_THROW_EXTERN_C() +{ +#ifdef __APPLE__ + if (fValue == -0.0) + return fValue; // macOS 10.8 libc returns 0.0 for -0.0 +#endif + + return log1p(fValue); +} + +double SAL_CALL rtl_math_atanh(double fValue) SAL_THROW_EXTERN_C() +{ + return ::atanh(fValue); +} + +/** Parent error function (erf) */ +double SAL_CALL rtl_math_erf(double x) SAL_THROW_EXTERN_C() +{ + return erf(x); +} + +/** Parent complementary error function (erfc) */ +double SAL_CALL rtl_math_erfc(double x) SAL_THROW_EXTERN_C() +{ + return erfc(x); +} + +/** improved accuracy of asinh for |x| large and for x near zero + @see #i97605# + */ +double SAL_CALL rtl_math_asinh(double fX) SAL_THROW_EXTERN_C() +{ + if ( fX == 0.0 ) + return 0.0; + + double fSign = 1.0; + if ( fX < 0.0 ) + { + fX = - fX; + fSign = -1.0; + } + + if ( fX < 0.125 ) + return fSign * rtl_math_log1p( fX + fX*fX / (1.0 + sqrt( 1.0 + fX*fX))); + + if ( fX < 1.25e7 ) + return fSign * log( fX + sqrt( 1.0 + fX*fX)); + + return fSign * log( 2.0*fX); +} + +/** improved accuracy of acosh for x large and for x near 1 + @see #i97605# + */ +double SAL_CALL rtl_math_acosh(double fX) SAL_THROW_EXTERN_C() +{ + volatile double fZ = fX - 1.0; + if (fX < 1.0) + return std::numeric_limits::quiet_NaN(); + if ( fX == 1.0 ) + return 0.0; + + if ( fX < 1.1 ) + return rtl_math_log1p( fZ + sqrt( fZ*fZ + 2.0*fZ)); + + if ( fX < 1.25e7 ) + return log( fX + sqrt( fX*fX - 1.0)); + + return log( 2.0*fX); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/random.cxx b/sal/rtl/random.cxx new file mode 100644 index 000000000..418358b22 --- /dev/null +++ b/sal/rtl/random.cxx @@ -0,0 +1,310 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RTL_RANDOM_RNG_1(a) ((a) * 16807L) +#define RTL_RANDOM_RNG_2(a) ((a) * 65539L) + +#define RTL_RANDOM_RNG(x, y, z) \ +{ \ + (x) = 170 * ((x) % 178) - 63 * ((x) / 178); \ + if ((x) < 0) (x) += 30328; \ + \ + (y) = 171 * ((y) % 177) - 2 * ((y) / 177); \ + if ((y) < 0) (y) += 30269; \ + \ + (z) = 172 * ((z) % 176) - 35 * ((z) / 176); \ + if ((z) < 0) (z) += 30307; \ +} + +namespace { + +struct RandomData_Impl +{ + sal_Int16 m_nX; + sal_Int16 m_nY; + sal_Int16 m_nZ; +}; + +} + +static double data (RandomData_Impl *pImpl); + +#define RTL_RANDOM_DIGEST rtl_Digest_AlgorithmMD5 +#define RTL_RANDOM_SIZE_DIGEST RTL_DIGEST_LENGTH_MD5 +#define RTL_RANDOM_SIZE_POOL 1023 + +namespace { + +struct RandomPool_Impl +{ + rtlDigest m_hDigest; + sal_uInt8 m_pDigest[RTL_RANDOM_SIZE_DIGEST]; + sal_uInt8 m_pData[RTL_RANDOM_SIZE_POOL + 1]; + sal_uInt32 m_nData; + sal_uInt32 m_nIndex; + sal_uInt32 m_nCount; +}; + +} + +static bool initPool(RandomPool_Impl *pImpl); + +static void seedPool( + RandomPool_Impl *pImpl, const sal_uInt8 *pBuffer, sal_Size nBufLen); + +static void readPool( + RandomPool_Impl *pImpl, sal_uInt8 *pBuffer, sal_Size nBufLen); + +static double data(RandomData_Impl *pImpl) +{ + double random; + + RTL_RANDOM_RNG (pImpl->m_nX, pImpl->m_nY, pImpl->m_nZ); + random = ((static_cast(pImpl->m_nX) / 30328.0) + + (static_cast(pImpl->m_nY) / 30269.0) + + (static_cast(pImpl->m_nZ) / 30307.0) ); + + return std::modf(random, &o3tl::temporary(double())); +} + +static bool initPool(RandomPool_Impl *pImpl) +{ + pImpl->m_hDigest = rtl_digest_create(RTL_RANDOM_DIGEST); + if (pImpl->m_hDigest) + { + oslThreadIdentifier tid; + TimeValue tv; + RandomData_Impl rd; + double seed; + + /* The use of uninitialized stack variables as a way to + * enhance the entropy of the random pool triggers + * memory checkers like purify and valgrind. + */ + + /* + seedPool (pImpl, (sal_uInt8*)&tid, sizeof(tid)); + seedPool (pImpl, (sal_uInt8*)&tv, sizeof(tv)); + seedPool (pImpl, (sal_uInt8*)&rd, sizeof(rd)); + */ + + tid = osl::Thread::getCurrentIdentifier(); + tid = RTL_RANDOM_RNG_2(RTL_RANDOM_RNG_1(tid)); + seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&tid), sizeof(tid)); + + osl_getSystemTime (&tv); + tv.Seconds = RTL_RANDOM_RNG_2(tv.Seconds); + tv.Nanosec = RTL_RANDOM_RNG_2(tv.Nanosec); + seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&tv), sizeof(tv)); + + rd.m_nX = static_cast(((tid >> 1) << 1) + 1); + rd.m_nY = static_cast(((tv.Seconds >> 1) << 1) + 1); + rd.m_nZ = static_cast(((tv.Nanosec >> 1) << 1) + 1); + seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&rd), sizeof(rd)); + + while (pImpl->m_nData < RTL_RANDOM_SIZE_POOL) + { + seed = data (&rd); + seedPool (pImpl, reinterpret_cast< sal_uInt8* >(&seed), sizeof(seed)); + } + return true; + } + return false; +} + +static void seedPool( + RandomPool_Impl *pImpl, const sal_uInt8 *pBuffer, sal_Size nBufLen) +{ + sal_Size i; + sal_sSize j, k; + + for (i = 0; i < nBufLen; i += RTL_RANDOM_SIZE_DIGEST) + { + j = nBufLen - i; + if (j > RTL_RANDOM_SIZE_DIGEST) + j = RTL_RANDOM_SIZE_DIGEST; + + rtl_digest_update( + pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST); + + k = (pImpl->m_nIndex + j) - RTL_RANDOM_SIZE_POOL; + if (k > 0) + { + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j - k); + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_pData[0]), k); + } + else + { + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j); + } + + rtl_digest_update(pImpl->m_hDigest, pBuffer, j); + pBuffer += j; + + rtl_digest_get( + pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST); + for (k = 0; k < j; k++) + { + pImpl->m_pData[pImpl->m_nIndex++] ^= pImpl->m_pDigest[k]; + if (pImpl->m_nIndex >= RTL_RANDOM_SIZE_POOL) + { + pImpl->m_nData = RTL_RANDOM_SIZE_POOL; + pImpl->m_nIndex = 0; + } + } + } + + if (pImpl->m_nIndex > pImpl->m_nData) + pImpl->m_nData = pImpl->m_nIndex; +} + +static void readPool ( + RandomPool_Impl *pImpl, sal_uInt8 *pBuffer, sal_Size nBufLen) +{ + sal_Int32 j, k; + + while (nBufLen > 0) + { + j = nBufLen; + if (j > RTL_RANDOM_SIZE_DIGEST/2) + j = RTL_RANDOM_SIZE_DIGEST/2; + nBufLen -= j; + + rtl_digest_update( + pImpl->m_hDigest, + &(pImpl->m_pDigest[RTL_RANDOM_SIZE_DIGEST/2]), + RTL_RANDOM_SIZE_DIGEST/2); + + k = (pImpl->m_nIndex + j) - pImpl->m_nData; + if (k > 0) + { + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j - k); + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_pData[0]), k); + } + else + { + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_pData[pImpl->m_nIndex]), j); + } + + rtl_digest_get( + pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST); + for (k = 0; k < j; k++) + { + if (pImpl->m_nIndex >= pImpl->m_nData) + pImpl->m_nIndex = 0; + + pImpl->m_pData[pImpl->m_nIndex++] ^= pImpl->m_pDigest[k]; + *pBuffer++ = pImpl->m_pDigest[k + RTL_RANDOM_SIZE_DIGEST/2]; + } + } + + pImpl->m_nCount++; + rtl_digest_update( + pImpl->m_hDigest, &(pImpl->m_nCount), sizeof(pImpl->m_nCount)); + rtl_digest_update( + pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST); + rtl_digest_get( + pImpl->m_hDigest, pImpl->m_pDigest, RTL_RANDOM_SIZE_DIGEST); +} + +rtlRandomPool SAL_CALL rtl_random_createPool() SAL_THROW_EXTERN_C() +{ + /* try to get system random number, if it fail fall back on own pool */ + RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(rtl_allocateZeroMemory(sizeof(RandomPool_Impl))); + if (pImpl) + { + char sanity[4]; + if (!osl_get_system_random_data(sanity, 4)) + { + if (!initPool(pImpl)) + { + rtl_freeZeroMemory(pImpl, sizeof(RandomPool_Impl)); + pImpl = nullptr; + } + } + } + return static_cast< rtlRandomPool >(pImpl); +} + +void SAL_CALL rtl_random_destroyPool(rtlRandomPool Pool) SAL_THROW_EXTERN_C() +{ + RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(Pool); + if (pImpl) + { + if (pImpl->m_hDigest) + rtl_digest_destroy(pImpl->m_hDigest); + + rtl_freeZeroMemory (pImpl, sizeof(RandomPool_Impl)); + } +} + +rtlRandomError SAL_CALL rtl_random_addBytes( + rtlRandomPool Pool, const void *Buffer, sal_Size Bytes) SAL_THROW_EXTERN_C() +{ + RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(Pool); + const sal_uInt8 *pBuffer = static_cast< const sal_uInt8* >(Buffer); + + if (!pImpl || !pBuffer) + return rtl_Random_E_Argument; + + if (pImpl->m_hDigest) + seedPool (pImpl, pBuffer, Bytes); + + return rtl_Random_E_None; +} + +rtlRandomError SAL_CALL rtl_random_getBytes ( + rtlRandomPool Pool, void *Buffer, sal_Size Bytes) SAL_THROW_EXTERN_C() +{ + RandomPool_Impl *pImpl = static_cast< RandomPool_Impl* >(Pool); + sal_uInt8 *pBuffer = static_cast< sal_uInt8* >(Buffer); + + if (!pImpl || !pBuffer) + return rtl_Random_E_Argument; + + if (pImpl->m_hDigest || !osl_get_system_random_data(static_cast< char* >(Buffer), Bytes)) + { + if (!pImpl->m_hDigest && !initPool(pImpl)) + return rtl_Random_E_Unknown; + readPool(pImpl, pBuffer, Bytes); + } + return rtl_Random_E_None; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/rtl_process.cxx b/sal/rtl/rtl_process.cxx new file mode 100644 index 000000000..76963dc13 --- /dev/null +++ b/sal/rtl/rtl_process.cxx @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +namespace +{ + +class Id +{ +public: + Id() { rtl_createUuid(uuid_, nullptr, false); } + + Id(const Id&) = delete; + Id& operator=(const Id&) = delete; + + void copy(sal_uInt8 * target) const + { std::memcpy(target, uuid_, UUID_SIZE); } + +private: + enum { UUID_SIZE = 16 }; + + sal_uInt8 uuid_[UUID_SIZE]; +}; + +} // end namespace + +void rtl_getGlobalProcessId(sal_uInt8 * pTargetUUID) +{ + static Id theId; + theId.copy(pTargetUUID); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/strbuf.cxx b/sal/rtl/strbuf.cxx new file mode 100644 index 000000000..7ba25ff4a --- /dev/null +++ b/sal/rtl/strbuf.cxx @@ -0,0 +1,83 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include "strimp.hxx" + +#if USE_SDT_PROBES +#define RTL_LOG_STRING_BITS 8 +#endif + +#include "strtmpl.hxx" + +/************************************************************************* + * rtl_stringbuffer_newFromStr_WithLength + */ +void SAL_CALL rtl_stringbuffer_newFromStr_WithLength( rtl_String ** newStr, + const char * value, + sal_Int32 count ) +{ + rtl::str::stringbuffer_newFromStr_WithLength(newStr, value, count); +} + +/************************************************************************* + * rtl_stringbuffer_newFromStringBuffer + */ +sal_Int32 SAL_CALL rtl_stringbuffer_newFromStringBuffer( rtl_String ** newStr, + sal_Int32 capacity, + rtl_String * oldStr ) +{ + return rtl::str::stringbuffer_newFromStringBuffer(newStr, capacity, oldStr); +} + +/************************************************************************* + * rtl_stringbuffer_ensureCapacity + */ +void SAL_CALL rtl_stringbuffer_ensureCapacity + (rtl_String ** This, sal_Int32* capacity, sal_Int32 minimumCapacity) +{ + rtl::str::stringbuffer_ensureCapacity(This, capacity, minimumCapacity); +} + +/************************************************************************* + * rtl_stringbuffer_insert + */ +void SAL_CALL rtl_stringbuffer_insert( rtl_String ** This, + sal_Int32 * capacity, + sal_Int32 offset, + const char * str, + sal_Int32 len ) +{ + rtl::str::stringbuffer_insert(This, capacity, offset, str, len); +} + +/************************************************************************* + * rtl_stringbuffer_remove + */ +void SAL_CALL rtl_stringbuffer_remove( rtl_String ** This, + sal_Int32 start, + sal_Int32 len ) +{ + rtl::str::stringbuffer_remove(This, start, len); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/strimp.cxx b/sal/rtl/strimp.cxx new file mode 100644 index 000000000..44b56023d --- /dev/null +++ b/sal/rtl/strimp.cxx @@ -0,0 +1,90 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#include + +#include +#include +#include +#include + +#include "strimp.hxx" +#include "alloc_impl.hxx" +#include "alloc_arena.hxx" + +/* + * TODO: add a slower, more awful, but more space efficient + * custom allocator for the pre-init phase. Existing slab + * allocator's minimum alloc size is 24bytes, and by default + * is 32 bytes. + */ +static rtl_arena_type *pre_arena = nullptr; + +rtl_allocateStringFn rtl_allocateString = malloc; +rtl_freeStringFn rtl_freeString = free; + +extern "C" { +static void *pre_allocateStringFn(size_t n) +{ + sal_Size size = RTL_MEMORY_ALIGN(n + 4, 4); + char *addr = static_cast(rtl_arena_alloc(pre_arena, &size)); + assert(size>= 12); + reinterpret_cast(addr)[0] = size - 12; + return addr + 4; +} + +static void pre_freeStringFn(void *data) +{ + char *addr = static_cast(data) - 4; + sal_uInt32 size = reinterpret_cast(addr)[0] + 12; + + rtl_arena_free(pre_arena, addr, size); +} +} // extern "C" + +static void mark_static(void *addr, sal_Size /* size */) +{ + char *inner = static_cast(addr) + 4; + rtl_uString *str = reinterpret_cast(inner); + str->refCount |= SAL_STRING_STATIC_FLAG; +} + +void SAL_CALL rtl_alloc_preInit (sal_Bool start) SAL_THROW_EXTERN_C() +{ + if (start) + { + rtl_allocateString = pre_allocateStringFn; + rtl_freeString = pre_freeStringFn; + pre_arena = rtl_arena_create("pre-init strings", 4, 0, + nullptr, rtl_arena_alloc, + rtl_arena_free, 0); + + // To be consistent (and to ensure the rtl_cache threads are started). + ensureCacheSingleton(); + } + else + { + rtl_arena_foreach(pre_arena, mark_static); + rtl_allocateString = malloc; + rtl_freeString = free; + + // TODO: also re-initialize main allocator as well. + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/strimp.hxx b/sal/rtl/strimp.hxx new file mode 100644 index 000000000..69404e0aa --- /dev/null +++ b/sal/rtl/strimp.hxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_RTL_STRIMP_HXX +#define INCLUDED_SAL_RTL_STRIMP_HXX + +#include +#if USE_SDT_PROBES +#include +#endif + +#include +#include +#include + +/* ======================================================================= */ +/* Help functions for String and UString */ +/* ======================================================================= */ + +/* + * refCount is opaque and includes 2 bit-fields; + * MSB: 'interned' - is stored in the intern hash + * MSB-1: 'static' - is a const / static string, + * do no ref counting + */ +#define SAL_STRING_INTERN_FLAG 0x80000000 +#define SAL_STRING_STATIC_FLAG 0x40000000 +#define SAL_STRING_REFCOUNT(a) ((a) & 0x3fffffff) + +#define SAL_STRING_IS_INTERN(a) ((a)->refCount & SAL_STRING_INTERN_FLAG) +#define SAL_STRING_IS_STATIC(a) ((a)->refCount & SAL_STRING_STATIC_FLAG) + +rtl_uString* rtl_uString_ImplAlloc( sal_Int32 nLen ); + +rtl_String* rtl_string_ImplAlloc( sal_Int32 nLen ); + +extern "C" { + +typedef void *(SAL_CALL * rtl_allocateStringFn)(size_t size); +typedef void (*rtl_freeStringFn)(void *); + +} + +extern rtl_allocateStringFn rtl_allocateString; +extern rtl_freeStringFn rtl_freeString; + +// string lifetime instrumentation / diagnostics +#if USE_SDT_PROBES +# define PROBE_SNAME(n,b) n ## _ ## b +# define PROBE_NAME(n,b) PROBE_SNAME(n,b) +# define PROBE_NEW PROBE_NAME (new_string,RTL_LOG_STRING_BITS) +# define PROBE_DEL PROBE_NAME (delete_string,RTL_LOG_STRING_BITS) +# define PROBE_INTERN_NEW PROBE_NAME (new_string_intern,RTL_LOG_STRING_BITS) +# define PROBE_INTERN_DEL PROBE_NAME (delete_string_intern,RTL_LOG_STRING_BITS) +# define RTL_LOG_STRING_NEW(s) \ + DTRACE_PROBE4(libreoffice, PROBE_NEW, s, \ + (s)->refCount, (s)->length, (s)->buffer) +# define RTL_LOG_STRING_DELETE(s) \ + DTRACE_PROBE4(libreoffice, PROBE_DEL, s, \ + (s)->refCount, (s)->length, (s)->buffer) +# define RTL_LOG_STRING_INTERN_NEW(s,o) \ + DTRACE_PROBE5(libreoffice, PROBE_INTERN_NEW, s, \ + (s)->refCount, (s)->length, (s)->buffer, o) +# define RTL_LOG_STRING_INTERN_DELETE(s) \ + DTRACE_PROBE4(libreoffice, PROBE_INTERN_DEL, s, \ + (s)->refCount, (s)->length, (s)->buffer) +#else +# define RTL_LOG_STRING_NEW(s) +# define RTL_LOG_STRING_DELETE(s) +# define RTL_LOG_STRING_INTERN_NEW(s,o) +# define RTL_LOG_STRING_INTERN_DELETE(s) +#endif /* USE_SDT_PROBES */ + +#endif // INCLUDED_SAL_RTL_STRIMP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/string.cxx b/sal/rtl/string.cxx new file mode 100644 index 000000000..23196e528 --- /dev/null +++ b/sal/rtl/string.cxx @@ -0,0 +1,667 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include +#include +#include + +#include "strimp.hxx" +#include +#include + +#include + +#if defined _WIN32 +// Temporary check to verify that the #pragma pack around rtl_String is indeed cargo cult and can +// safely be removed: +static_assert(alignof (rtl_String) == 4); +static_assert(sizeof (rtl_String) == 12); +#endif + +/* ======================================================================= */ + +#if USE_SDT_PROBES +#define RTL_LOG_STRING_BITS 8 +#endif + +#include "strtmpl.hxx" + +/* ======================================================================= */ + +sal_Int32 SAL_CALL rtl_str_valueOfFloat(char * pStr, float f) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfFP(pStr, f); +} + +sal_Int32 SAL_CALL rtl_str_valueOfDouble(char * pStr, double d) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfFP(pStr, d); +} + +float SAL_CALL rtl_str_toFloat(char const * pStr) SAL_THROW_EXTERN_C() +{ + assert(pStr); + return static_cast(rtl_math_stringToDouble(pStr, pStr + rtl_str_getLength(pStr), + '.', 0, nullptr, nullptr)); +} + +double SAL_CALL rtl_str_toDouble(char const * pStr) SAL_THROW_EXTERN_C() +{ + assert(pStr); + return rtl_math_stringToDouble(pStr, pStr + rtl_str_getLength(pStr), '.', 0, + nullptr, nullptr); +} + +/* ======================================================================= */ + +static int rtl_ImplGetFastUTF8ByteLen( const sal_Unicode* pStr, sal_Int32 nLen ) +{ + int n; + sal_Unicode c; + sal_uInt32 nUCS4Char; + const sal_Unicode* pEndStr; + + n = 0; + pEndStr = pStr+nLen; + while ( pStr < pEndStr ) + { + c = *pStr; + + if ( c < 0x80 ) + n++; + else if ( c < 0x800 ) + n += 2; + else + { + if ( !rtl::isHighSurrogate(c) ) + n += 3; + else + { + nUCS4Char = c; + + if ( pStr+1 < pEndStr ) + { + c = *(pStr+1); + if ( rtl::isLowSurrogate(c) ) + { + nUCS4Char = rtl::combineSurrogates(nUCS4Char, c); + pStr++; + } + } + + if ( nUCS4Char < 0x10000 ) + n += 3; + else if ( nUCS4Char < 0x200000 ) + n += 4; + else if ( nUCS4Char < 0x4000000 ) + n += 5; + else + n += 6; + } + } + + pStr++; + } + + return n; +} + +/* ----------------------------------------------------------------------- */ + +static bool rtl_impl_convertUStringToString(rtl_String ** pTarget, + sal_Unicode const * pSource, + sal_Int32 nLength, + rtl_TextEncoding nEncoding, + sal_uInt32 nFlags, + bool bCheckErrors) +{ + assert(pTarget != nullptr); + assert(pSource != nullptr || nLength == 0); + assert(nLength >= 0); + OSL_ASSERT(nLength == 0 || rtl_isOctetTextEncoding(nEncoding)); + + if ( !nLength ) + rtl_string_new( pTarget ); + else + { + rtl_String* pTemp; + rtl_UnicodeToTextConverter hConverter; + sal_uInt32 nInfo; + sal_Size nSrcChars; + sal_Size nDestBytes; + sal_Size nNewLen; + sal_Size nNotConvertedChars; + sal_Size nMaxCharLen; + + /* Optimization for UTF-8 - we try to calculate the exact length */ + /* For all other encoding we try a good estimation */ + if ( nEncoding == RTL_TEXTENCODING_UTF8 ) + { + nNewLen = rtl_ImplGetFastUTF8ByteLen( pSource, nLength ); + /* Includes the string only ASCII, then we could copy + the buffer faster */ + if ( nNewLen == static_cast(nLength) ) + { + char* pBuffer; + if ( *pTarget ) + rtl_string_release( *pTarget ); + *pTarget = rtl_string_ImplAlloc( nLength ); + OSL_ASSERT(*pTarget != nullptr); + pBuffer = (*pTarget)->buffer; + do + { + /* Check ASCII range */ + OSL_ENSURE( *pSource <= 127, + "rtl_uString2String() - UTF8 test is encoding is wrong" ); + + *pBuffer = static_cast(static_cast(*pSource)); + pBuffer++; + pSource++; + nLength--; + } + while ( nLength ); + return true; + } + + nMaxCharLen = 4; + } + else + { + rtl_TextEncodingInfo aTextEncInfo; + aTextEncInfo.StructSize = sizeof( aTextEncInfo ); + if ( !rtl_getTextEncodingInfo( nEncoding, &aTextEncInfo ) ) + { + aTextEncInfo.AverageCharSize = 1; + aTextEncInfo.MaximumCharSize = 8; + } + + nNewLen = nLength * static_cast(aTextEncInfo.AverageCharSize); + nMaxCharLen = aTextEncInfo.MaximumCharSize; + } + + nFlags |= RTL_UNICODETOTEXT_FLAGS_FLUSH; + hConverter = rtl_createUnicodeToTextConverter( nEncoding ); + + for (;;) + { + pTemp = rtl_string_ImplAlloc( nNewLen ); + OSL_ASSERT(pTemp != nullptr); + nDestBytes = rtl_convertUnicodeToText( hConverter, nullptr, + pSource, nLength, + pTemp->buffer, nNewLen, + nFlags, + &nInfo, &nSrcChars ); + if (bCheckErrors && (nInfo & RTL_UNICODETOTEXT_INFO_ERROR) != 0) + { + rtl_freeString(pTemp); + rtl_destroyUnicodeToTextConverter(hConverter); + return false; + } + + if ((nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0) + break; + + /* Buffer not big enough, try again with enough space */ + rtl_freeString( pTemp ); + + /* Try with the max. count of characters with + additional overhead for replacing functionality */ + nNotConvertedChars = nLength-nSrcChars; + nNewLen = nDestBytes+(nNotConvertedChars*nMaxCharLen)+nNotConvertedChars+4; + } + + /* Set the buffer to the correct size or is there to + much overhead, reallocate to the correct size */ + if ( nNewLen > nDestBytes+8 ) + { + rtl_String* pTemp2 = rtl_string_ImplAlloc( nDestBytes ); + OSL_ASSERT(pTemp2 != nullptr); + rtl::str::Copy(pTemp2->buffer, pTemp->buffer, nDestBytes); + rtl_freeString( pTemp ); + pTemp = pTemp2; + } + else + { + pTemp->length = nDestBytes; + pTemp->buffer[nDestBytes] = 0; + } + + rtl_destroyUnicodeToTextConverter( hConverter ); + if ( *pTarget ) + rtl_string_release( *pTarget ); + *pTarget = pTemp; + + /* Results the conversion in an empty buffer - + create an empty string */ + if ( pTemp && !nDestBytes ) + rtl_string_new( pTarget ); + } + return true; +} + +void SAL_CALL rtl_uString2String( rtl_String** ppThis, + const sal_Unicode* pUStr, + sal_Int32 nULen, + rtl_TextEncoding eTextEncoding, + sal_uInt32 nCvtFlags ) + SAL_THROW_EXTERN_C() +{ + rtl_impl_convertUStringToString(ppThis, pUStr, nULen, eTextEncoding, + nCvtFlags, false); +} + +sal_Bool SAL_CALL rtl_convertUStringToString(rtl_String ** pTarget, + sal_Unicode const * pSource, + sal_Int32 nLength, + rtl_TextEncoding nEncoding, + sal_uInt32 nFlags) + SAL_THROW_EXTERN_C() +{ + return rtl_impl_convertUStringToString(pTarget, pSource, nLength, nEncoding, + nFlags, true); +} + +void rtl_string_newReplaceFirst( + rtl_String ** newStr, rtl_String * str, char const * from, + sal_Int32 fromLength, char const * to, sal_Int32 toLength, + sal_Int32 * index) SAL_THROW_EXTERN_C() +{ + assert(str != nullptr); + assert(index != nullptr); + assert(*index >= 0 && *index <= str->length); + assert(fromLength >= 0); + assert(toLength >= 0); + sal_Int32 i = rtl_str_indexOfStr_WithLength( + str->buffer + *index, str->length - *index, from, fromLength); + if (i == -1) { + rtl_string_assign(newStr, str); + } else { + assert(i <= str->length - *index); + i += *index; + assert(fromLength <= str->length); + if (str->length - fromLength > SAL_MAX_INT32 - toLength) { + std::abort(); + } + rtl::str::newReplaceStrAt(newStr, str, i, fromLength, to, toLength); + } + *index = i; +} + +void rtl_string_newReplaceAll( + rtl_String ** newStr, rtl_String * str, char const * from, + sal_Int32 fromLength, char const * to, sal_Int32 toLength) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0); +} + +sal_Int32 SAL_CALL rtl_str_getLength(const char* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::getLength(pStr); +} + +sal_Int32 SAL_CALL rtl_str_compare(const char* pStr1, const char* pStr2) SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2), + rtl::str::CompareNormal(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_str_compare_WithLength(const char* pStr1, sal_Int32 nStr1Len, + const char* pStr2, sal_Int32 nStr2Len) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), + rtl::str::CompareNormal(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_str_shortenedCompare_WithLength(const char* pStr1, sal_Int32 nStr1Len, + const char* pStr2, sal_Int32 nStr2Len, + sal_Int32 nShortenedLength) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), + rtl::str::CompareNormal(), nShortenedLength); +} + +sal_Int32 SAL_CALL rtl_str_reverseCompare_WithLength(const char* pStr1, sal_Int32 nStr1Len, + const char* pStr2, sal_Int32 nStr2Len) + SAL_THROW_EXTERN_C() +{ + return rtl::str::reverseCompare_WithLengths(pStr1, nStr1Len, pStr2, nStr2Len, + rtl::str::CompareNormal()); +} + +sal_Int32 SAL_CALL rtl_str_compareIgnoreAsciiCase(const char* pStr1, const char* pStr2) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_str_compareIgnoreAsciiCase_WithLength(const char* pStr1, sal_Int32 nStr1Len, + const char* pStr2, sal_Int32 nStr2Len) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( + const char* pStr1, sal_Int32 nStr1Len, const char* pStr2, sal_Int32 nStr2Len, + sal_Int32 nShortenedLength) SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), + rtl::str::CompareIgnoreAsciiCase(), nShortenedLength); +} + +sal_Int32 SAL_CALL rtl_str_hashCode(const char* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::hashCode(pStr); +} + +sal_Int32 SAL_CALL rtl_str_hashCode_WithLength(const char* pStr, sal_Int32 nLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::hashCode_WithLength(pStr, nLen); +} + +sal_Int32 SAL_CALL rtl_str_indexOfChar(const char* pStr, char c) SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfChar(pStr, c); +} + +sal_Int32 SAL_CALL rtl_str_indexOfChar_WithLength(const char* pStr, sal_Int32 nLen, char c) + SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfChar_WithLength(pStr, nLen, c); +} + +sal_Int32 SAL_CALL rtl_str_lastIndexOfChar(const char* pStr, char c) SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfChar(pStr, c); +} + +sal_Int32 SAL_CALL rtl_str_lastIndexOfChar_WithLength(const char* pStr, sal_Int32 nLen, char c) + SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfChar_WithLength(pStr, nLen, c); +} + +sal_Int32 SAL_CALL rtl_str_indexOfStr(const char* pStr, const char* pSubStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfStr(pStr, pSubStr); +} + +sal_Int32 SAL_CALL rtl_str_indexOfStr_WithLength(const char* pStr, sal_Int32 nStrLen, + const char* pSubStr, sal_Int32 nSubLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen); +} + +sal_Int32 SAL_CALL rtl_str_lastIndexOfStr(const char* pStr, const char* pSubStr) + SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfStr(pStr, pSubStr); +} + +sal_Int32 SAL_CALL rtl_str_lastIndexOfStr_WithLength(const char* pStr, sal_Int32 nStrLen, + const char* pSubStr, sal_Int32 nSubLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen); +} + +void SAL_CALL rtl_str_replaceChar(char* pStr, char cOld, char cNew) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::FromTo(cOld, cNew)); +} + +void SAL_CALL rtl_str_replaceChar_WithLength(char* pStr, sal_Int32 nLen, char cOld, char cNew) + SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::FromTo(cOld, cNew)); +} + +void SAL_CALL rtl_str_toAsciiLowerCase(char* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiLower); +} + +void SAL_CALL rtl_str_toAsciiLowerCase_WithLength(char* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiLower); +} + +void SAL_CALL rtl_str_toAsciiUpperCase(char* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiUpper); +} + +void SAL_CALL rtl_str_toAsciiUpperCase_WithLength(char* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiUpper); +} + +sal_Int32 SAL_CALL rtl_str_trim(char* pStr) SAL_THROW_EXTERN_C() { return rtl::str::trim(pStr); } + +sal_Int32 SAL_CALL rtl_str_trim_WithLength(char* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + return rtl::str::trim_WithLength(pStr, nLen); +} + +sal_Int32 SAL_CALL rtl_str_valueOfBoolean(char* pStr, sal_Bool b) SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfBoolean(pStr, b); +} + +sal_Int32 SAL_CALL rtl_str_valueOfChar(char* pStr, char c) SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfChar(pStr, c); +} + +sal_Int32 SAL_CALL rtl_str_valueOfInt32(char* pStr, sal_Int32 n, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfInt(pStr, n, nRadix); +} + +sal_Int32 SAL_CALL rtl_str_valueOfInt64(char* pStr, sal_Int64 n, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfInt(pStr, n, nRadix); +} + +sal_Int32 SAL_CALL rtl_str_valueOfUInt64(char* pStr, sal_uInt64 n, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfInt(pStr, n, nRadix); +} + +sal_Bool SAL_CALL rtl_str_toBoolean(const char* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::toBoolean(pStr); +} + +sal_Int32 SAL_CALL rtl_str_toInt32(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +sal_Int64 SAL_CALL rtl_str_toInt64(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +sal_Int64 SAL_CALL rtl_str_toInt64_WithLength(const char* pStr, sal_Int16 nRadix, + sal_Int32 nStrLength) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::with_length(pStr, nStrLength), nRadix); +} + +sal_uInt32 SAL_CALL rtl_str_toUInt32(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +sal_uInt64 SAL_CALL rtl_str_toUInt64(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +rtl_String* rtl_string_ImplAlloc(sal_Int32 nLen) { return rtl::str::Alloc(nLen); } + +void SAL_CALL rtl_string_acquire(rtl_String* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::acquire(pThis); +} + +void SAL_CALL rtl_string_release(rtl_String* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::release(pThis); +} + +void SAL_CALL rtl_string_new(rtl_String** ppThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::new_(ppThis); +} + +rtl_String* SAL_CALL rtl_string_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + assert(nLen >= 0); + return rtl::str::Alloc(nLen); +} + +void SAL_CALL rtl_string_new_WithLength(rtl_String** ppThis, sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + rtl::str::new_WithLength(ppThis, nLen); +} + +void SAL_CALL rtl_string_newFromString(rtl_String** ppThis, const rtl_String* pStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newFromString(ppThis, pStr); +} + +void SAL_CALL rtl_string_newFromStr(rtl_String** ppThis, const char* pCharStr) SAL_THROW_EXTERN_C() +{ + rtl::str::newFromStr(ppThis, pCharStr); +} + +void SAL_CALL rtl_string_newFromStr_WithLength(rtl_String** ppThis, const char* pCharStr, + sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen); +} + +void SAL_CALL rtl_string_newFromSubString(rtl_String** ppThis, const rtl_String* pFrom, + sal_Int32 beginIndex, sal_Int32 count) + SAL_THROW_EXTERN_C() +{ + rtl::str::newFromSubString(ppThis, pFrom, beginIndex, count); +} + +// Used when creating from string literals. +void SAL_CALL rtl_string_newFromLiteral(rtl_String** ppThis, const char* pCharStr, sal_Int32 nLen, + sal_Int32 allocExtra) SAL_THROW_EXTERN_C() +{ + rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen, allocExtra); +} + +void SAL_CALL rtl_string_assign(rtl_String** ppThis, rtl_String* pStr) SAL_THROW_EXTERN_C() +{ + rtl::str::assign(ppThis, pStr); +} + +sal_Int32 SAL_CALL rtl_string_getLength(const rtl_String* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::getLength(pThis); +} + +char* SAL_CALL rtl_string_getStr(rtl_String* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::getStr(pThis); +} + +void SAL_CALL rtl_string_newConcat(rtl_String** ppThis, rtl_String* pLeft, rtl_String* pRight) + SAL_THROW_EXTERN_C() +{ + rtl::str::newConcat(ppThis, pLeft, pRight); +} + +void SAL_CALL rtl_string_ensureCapacity(rtl_String** ppThis, sal_Int32 size) SAL_THROW_EXTERN_C() +{ + rtl::str::ensureCapacity(ppThis, size); +} + +void SAL_CALL rtl_string_newReplaceStrAt(rtl_String** ppThis, rtl_String* pStr, sal_Int32 nIndex, + sal_Int32 nCount, rtl_String* pNewSubStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, pNewSubStr); +} + +void SAL_CALL rtl_string_newReplaceStrAt_WithLength(rtl_String** ppThis, rtl_String* pStr, sal_Int32 nIndex, + sal_Int32 nCount, char const * subStr, sal_Int32 substrLen) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, subStr, substrLen); +} + +void SAL_CALL rtl_string_newReplace(rtl_String** ppThis, rtl_String* pStr, char cOld, char cNew) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplace(ppThis, pStr, cOld, cNew); +} + +void SAL_CALL rtl_string_newToAsciiLowerCase(rtl_String** ppThis, rtl_String* pStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceChars(ppThis, pStr); +} + +void SAL_CALL rtl_string_newToAsciiUpperCase(rtl_String** ppThis, rtl_String* pStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceChars(ppThis, pStr); +} + +void SAL_CALL rtl_string_newTrim(rtl_String** ppThis, rtl_String* pStr) SAL_THROW_EXTERN_C() +{ + rtl::str::newTrim(ppThis, pStr); +} + +sal_Int32 SAL_CALL rtl_string_getToken(rtl_String** ppThis, rtl_String* pStr, sal_Int32 nToken, + char cTok, sal_Int32 nIndex) SAL_THROW_EXTERN_C() +{ + return rtl::str::getToken(ppThis, pStr, nToken, cTok, nIndex); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/strtmpl.hxx b/sal/rtl/strtmpl.hxx new file mode 100644 index 000000000..e1389ce6a --- /dev/null +++ b/sal/rtl/strtmpl.hxx @@ -0,0 +1,1904 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "strimp.hxx" + +#include +#include +#include +#include +#include +#include +#include + +#include + +void internRelease(rtl_uString*); + +namespace rtl::str +{ +template auto IMPL_RTL_USTRCODE(C c) { return std::make_unsigned_t(c); } + +// Wrappers around null-terminated/known-length strings, that allow to generalize algorithms +// without overhead (e.g., without need to get length of null-terminated strings). + +template struct null_terminated +{ + C* p; + null_terminated(C* pStr) + : p(pStr) + { + assert(pStr); + } + auto begin() const { return p; } + struct EndDetector + { + friend bool operator==(EndDetector, C* iter) { return *iter == 0; } + friend bool operator==(C* iter, EndDetector) { return *iter == 0; } + friend bool operator!=(EndDetector, C* iter) { return *iter != 0; } + friend bool operator!=(C* iter, EndDetector) { return *iter != 0; } + }; + static auto end() { return EndDetector{}; } +}; + +template struct with_length +{ + C* p; + sal_Int32 len; + with_length(C* pStr, sal_Int32 nLength) + : p(pStr) + , len(nLength) + { + assert(len >= 0); + } + auto begin() const { return p; } + auto end() const { return p + len; } +}; + +struct ToAsciiLower +{ + template static bool Applicable(C c) + { + return rtl::isAsciiUpperCase(IMPL_RTL_USTRCODE(c)); + } + template static C Replace(C c) + { + return rtl::toAsciiLowerCase(IMPL_RTL_USTRCODE(c)); + } +} constexpr toAsciiLower; + +struct ToAsciiUpper +{ + template static bool Applicable(C c) + { + return rtl::isAsciiLowerCase(IMPL_RTL_USTRCODE(c)); + } + template static C Replace(C c) + { + return rtl::toAsciiUpperCase(IMPL_RTL_USTRCODE(c)); + } +} constexpr toAsciiUpper; + +template struct FromTo +{ + C from; + C to; + FromTo(C cFrom, C cTo) : from(cFrom), to(cTo) {} + C Replace(C c) const { return c == from ? to : c; } +}; + +template void Copy(C* _pDest, const C* _pSrc, sal_Int32 _nCount) +{ + // take advantage of builtin optimisations + std::copy(_pSrc, _pSrc + _nCount, _pDest); +} + +template void CopyBackward(C* _pDest, const C* _pSrc, sal_Int32 _nCount) +{ + // take advantage of builtin optimisations + std::copy_backward(_pSrc, _pSrc + _nCount, _pDest + _nCount); +} + +inline void Copy(sal_Unicode* _pDest, const char* _pSrc, sal_Int32 _nCount) +{ + std::transform(_pSrc, _pSrc + _nCount, _pDest, + [](char c) + { + assert(rtl::isAscii(static_cast(c))); + SAL_WARN_IF(c == '\0', "rtl.string", "Found embedded \\0 ASCII character"); + return static_cast(c); + }); +} + +inline sal_Int16 implGetDigit(sal_Unicode ch, sal_Int16 nRadix) +{ + sal_Int16 n = -1; + if ((ch >= '0') && (ch <= '9')) + n = ch - '0'; + else if ((ch >= 'a') && (ch <= 'z')) + n = ch - 'a' + 10; + else if ((ch >= 'A') && (ch <= 'Z')) + n = ch - 'A' + 10; + return (n < nRadix) ? n : -1; +} + +inline bool implIsWhitespace(sal_Unicode c) +{ + /* Space or Control character? */ + if ((c <= 32) && c) + return true; + + /* Only in the General Punctuation area Space or Control characters are included? */ + if ((c < 0x2000) || (c > 0x206F)) + return false; + + if (((c >= 0x2000) && (c <= 0x200B)) || /* All Spaces */ + (c == 0x2028) || /* LINE SEPARATOR */ + (c == 0x2029)) /* PARAGRAPH SEPARATOR */ + return true; + + return false; +} + +/* ======================================================================= */ +/* C-String functions which could be used without the String-Class */ +/* ======================================================================= */ + +template sal_Int32 getLength( const T* pStr ) +{ + assert(pStr); + if constexpr (std::is_class_v) + { + return pStr->length; + } + else + { + // take advantage of builtin optimisations + return std::char_traits::length(pStr); + } +} + +/* ----------------------------------------------------------------------- */ + +template void warnIfCharAndNotAscii(C c) +{ + if constexpr (sizeof(c) == sizeof(char)) + SAL_WARN_IF(!rtl::isAscii(static_cast(c)), "rtl.string", + "Found non-ASCII char"); +} + +template void warnIfOneIsCharAndNotAscii(C1 c1, C2 c2) +{ + if constexpr (sizeof(c1) != sizeof(c2)) + { + warnIfCharAndNotAscii(c1); + warnIfCharAndNotAscii(c2); + } +} + +struct CompareNormal +{ + template static sal_Int32 compare(C1 c1, C2 c2) + { + warnIfOneIsCharAndNotAscii(c1, c2); + return static_cast(IMPL_RTL_USTRCODE(c1)) + - static_cast(IMPL_RTL_USTRCODE(c2)); + } +}; + +struct CompareIgnoreAsciiCase +{ + template static sal_Int32 compare(C1 c1, C2 c2) + { + warnIfOneIsCharAndNotAscii(c1, c2); + return rtl::compareIgnoreAsciiCase(IMPL_RTL_USTRCODE(c1), IMPL_RTL_USTRCODE(c2)); + } +}; + +/* ----------------------------------------------------------------------- */ + +struct NoShortening +{ + constexpr bool operator>=(int) { return true; } // for assert + constexpr bool operator==(int) { return false; } // for loop break check + constexpr void operator--() {} // for decrement in loop +} constexpr noShortening; + +template +sal_Int32 compare(S1 s1, S2 s2, Compare, Shorten_t shortenedLength) +{ + static_assert(std::is_same_v || std::is_same_v); + assert(shortenedLength >= 0); + auto pStr1 = s1.begin(); + const auto end1 = s1.end(); + auto pStr2 = s2.begin(); + const auto end2 = s2.end(); + for (;;) + { + if (shortenedLength == 0) + return 0; + if (pStr2 == end2) + return pStr1 == end1 ? 0 : 1; + if (pStr1 == end1) + return -1; + if (const sal_Int32 nRet = Compare::compare(*pStr1, *pStr2)) + return nRet; + --shortenedLength; + ++pStr1; + ++pStr2; + } +} + +// take advantage of builtin optimisations +template = 0> +sal_Int32 compare(null_terminated s1, null_terminated s2, CompareNormal, NoShortening) +{ + return wcscmp(reinterpret_cast(s1.p), reinterpret_cast(s2.p)); +} +template = 0> +sal_Int32 compare(null_terminated s1, null_terminated s2, CompareNormal, NoShortening) +{ + return strcmp(reinterpret_cast(s1.p), reinterpret_cast(s2.p)); +} +template +sal_Int32 compare(with_length s1, with_length s2, CompareNormal, NoShortening) +{ + std::basic_string_view sv1(s1.p, s1.len); + return sv1.compare(std::basic_string_view(s2.p, s2.len)); +} +template +sal_Int32 compare(with_length s1, with_length s2, Compare cf, sal_Int32 nShortenedLength) +{ + assert(nShortenedLength >= 0); + s1.len = std::min(s1.len, nShortenedLength); + s2.len = std::min(s2.len, nShortenedLength); + return compare(s1, s2, cf, noShortening); +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 reverseCompare_WithLengths(const C1* pStr1, sal_Int32 nStr1Len, + const C2* pStr2, sal_Int32 nStr2Len, Compare) +{ + assert(pStr1 || nStr1Len == 0); + assert(nStr1Len >= 0); + assert(pStr2 || nStr2Len == 0); + assert(nStr2Len >= 0); + const C1* pStr1Run = pStr1+nStr1Len; + const C2* pStr2Run = pStr2+nStr2Len; + while ((pStr1 < pStr1Run) && (pStr2 < pStr2Run)) + { + pStr1Run--; + pStr2Run--; + if (const sal_Int32 nRet = Compare::compare(*pStr1Run, *pStr2Run)) + return nRet; + } + + return nStr1Len - nStr2Len; +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 hashCode_WithLength(const IMPL_RTL_STRCODE*, sal_Int32); + +template sal_Int32 hashCode( const IMPL_RTL_STRCODE* pStr ) +{ + return hashCode_WithLength( pStr, getLength( pStr ) ); +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 hashCode_WithLength ( const IMPL_RTL_STRCODE* pStr, + sal_Int32 nLen ) +{ + assert(nLen >= 0); + sal_uInt32 h = static_cast(nLen); + while ( nLen > 0 ) + { + h = (h*37U) + IMPL_RTL_USTRCODE( *pStr ); + pStr++; + nLen--; + } + return static_cast(h); +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 indexOfChar ( const IMPL_RTL_STRCODE* pStr, + IMPL_RTL_STRCODE c ) +{ + assert(pStr); + if (!c) + return -1; // Unifies behavior of strchr/wcschr and unoptimized algorithm wrt '\0' + + if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(char)) + { + // take advantage of builtin optimisations + const IMPL_RTL_STRCODE* p = strchr(pStr, c); + return p ? p - pStr : -1; + } + else if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(wchar_t)) + { + // take advantage of builtin optimisations + wchar_t const * p = wcschr(reinterpret_cast(pStr), static_cast(c)); + return p ? p - reinterpret_cast(pStr) : -1; + } + else + { + const IMPL_RTL_STRCODE* pTempStr = pStr; + while ( *pTempStr ) + { + if ( *pTempStr == c ) + return pTempStr-pStr; + + pTempStr++; + } + + return -1; + } +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 indexOfChar_WithLength ( const IMPL_RTL_STRCODE* pStr, + sal_Int32 nLen, + IMPL_RTL_STRCODE c ) +{ +// assert(nLen >= 0); + if (nLen <= 0) + return -1; + // take advantage of builtin optimisations + using my_string_view = std::basic_string_view; + my_string_view v(pStr, nLen); + typename my_string_view::size_type idx = v.find(c); + return idx == my_string_view::npos ? -1 : idx; +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 lastIndexOfChar_WithLength(const IMPL_RTL_STRCODE*, sal_Int32, IMPL_RTL_STRCODE); + +template +sal_Int32 lastIndexOfChar ( const IMPL_RTL_STRCODE* pStr, + IMPL_RTL_STRCODE c ) +{ + assert(pStr); + if (!c) + return -1; // Unifies behavior of strrchr/wcsrchr and lastIndexOfChar_WithLength wrt '\0' + + if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(char)) + { + // take advantage of builtin optimisations + const IMPL_RTL_STRCODE* p = strrchr(pStr, c); + return p ? p - pStr : -1; + } + else if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(wchar_t)) + { + // take advantage of builtin optimisations + wchar_t const * p = wcsrchr(reinterpret_cast(pStr), static_cast(c)); + return p ? p - reinterpret_cast(pStr) : -1; + } + else + { + return lastIndexOfChar_WithLength( pStr, getLength( pStr ), c ); + } +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 lastIndexOfChar_WithLength ( const IMPL_RTL_STRCODE* pStr, + sal_Int32 nLen, + IMPL_RTL_STRCODE c ) +{ + assert(nLen >= 0); + // take advantage of builtin optimisations + using my_string_view = std::basic_string_view; + my_string_view v(pStr, nLen); + typename my_string_view::size_type idx = v.rfind(c); + return idx == my_string_view::npos ? -1 : idx; +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 indexOfStr_WithLength(const IMPL_RTL_STRCODE*, sal_Int32, const IMPL_RTL_STRCODE*, + sal_Int32); + +template +sal_Int32 indexOfStr ( const IMPL_RTL_STRCODE* pStr, + const IMPL_RTL_STRCODE* pSubStr ) +{ + assert(pStr); + assert(pSubStr); + /* an empty SubString is always not findable */ + if (*pSubStr == 0) + return -1; + if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(char)) + { + // take advantage of builtin optimisations + const IMPL_RTL_STRCODE* p = strstr(pStr, pSubStr); + return p ? p - pStr : -1; + } + else if constexpr (sizeof(IMPL_RTL_STRCODE) == sizeof(wchar_t)) + { + // take advantage of builtin optimisations + wchar_t const * p = wcsstr(reinterpret_cast(pStr), reinterpret_cast(pSubStr)); + return p ? p - reinterpret_cast(pStr) : -1; + } + else + { + return indexOfStr_WithLength( pStr, getLength( pStr ), + pSubStr, getLength( pSubStr ) ); + } +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 indexOfStr_WithLength ( const IMPL_RTL_STRCODE* pStr, + sal_Int32 nStrLen, + const IMPL_RTL_STRCODE* pSubStr, + sal_Int32 nSubLen ) +{ + assert(nStrLen >= 0); + assert(nSubLen >= 0); + /* an empty SubString is always not findable */ + if ( nSubLen == 0 ) + return -1; + // take advantage of builtin optimisations + using my_string_view = std::basic_string_view; + my_string_view v(pStr, nStrLen); + auto idx = nSubLen == 1 ? v.find(*pSubStr) : v.find(pSubStr, 0, nSubLen); + return idx == my_string_view::npos ? -1 : idx; +} + +inline sal_Int32 indexOfStr_WithLength(const sal_Unicode* pStr, sal_Int32 nStrLen, + const char* pSubStr, sal_Int32 nSubLen) +{ + assert(nStrLen >= 0); + assert(nSubLen >= 0); + if (nSubLen > 0 && nSubLen <= nStrLen) + { + sal_Unicode const* end = pStr + nStrLen; + sal_Unicode const* cursor = pStr; + + while (cursor < end) + { + cursor = std::char_traits::find(cursor, end - cursor, *pSubStr); + if (!cursor || (end - cursor < nSubLen)) + { + /* no enough left to actually have a match */ + break; + } + /* now it is worth trying a full match */ + if (nSubLen == 1 || rtl_ustr_asciil_reverseEquals_WithLength(cursor, pSubStr, nSubLen)) + { + return cursor - pStr; + } + cursor += 1; + } + } + return -1; +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 lastIndexOfStr_WithLength(const IMPL_RTL_STRCODE*, sal_Int32, const IMPL_RTL_STRCODE*, + sal_Int32); + +template +sal_Int32 lastIndexOfStr ( const IMPL_RTL_STRCODE* pStr, + const IMPL_RTL_STRCODE* pSubStr ) +{ + return lastIndexOfStr_WithLength( pStr, getLength( pStr ), + pSubStr, getLength( pSubStr ) ); +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 lastIndexOfStr_WithLength ( const IMPL_RTL_STRCODE* pStr, + sal_Int32 nStrLen, + const IMPL_RTL_STRCODE* pSubStr, + sal_Int32 nSubLen ) +{ + assert(nStrLen >= 0); + assert(nSubLen >= 0); + /* an empty SubString is always not findable */ + if ( nSubLen == 0 ) + return -1; + // take advantage of builtin optimisations + using my_string_view = std::basic_string_view; + my_string_view v(pStr, nStrLen); + my_string_view needle(pSubStr, nSubLen); + typename my_string_view::size_type idx = v.rfind(needle); + return idx == my_string_view::npos ? -1 : idx; +} + +/* ----------------------------------------------------------------------- */ + +template void replaceChars(S str, Replacer replacer) +{ + for (auto& rChar : str) + rChar = replacer.Replace(rChar); +} + +/* ----------------------------------------------------------------------- */ + +template sal_Int32 trim_WithLength(IMPL_RTL_STRCODE*, sal_Int32); + +template sal_Int32 trim( IMPL_RTL_STRCODE* pStr ) +{ + return trim_WithLength( pStr, getLength( pStr ) ); +} + +/* ----------------------------------------------------------------------- */ + +template +std::basic_string_view trimView( IMPL_RTL_STRCODE* pStr, sal_Int32 nLen ) +{ + assert(nLen >= 0); + sal_Int32 nPreSpaces = 0; + sal_Int32 nPostSpaces = 0; + sal_Int32 nIndex = nLen-1; + + while ( (nPreSpaces < nLen) && implIsWhitespace( IMPL_RTL_USTRCODE(*(pStr+nPreSpaces)) ) ) + nPreSpaces++; + + while ( (nIndex > nPreSpaces) && implIsWhitespace( IMPL_RTL_USTRCODE(*(pStr+nIndex)) ) ) + { + nPostSpaces++; + nIndex--; + } + + return { pStr + nPreSpaces, static_cast(nLen - nPostSpaces - nPreSpaces) }; +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 trim_WithLength( IMPL_RTL_STRCODE* pStr, sal_Int32 nLen ) +{ + const auto view = trimView(pStr, nLen); + + if (static_cast(view.size()) != nLen) + { + nLen = static_cast(view.size()); + if (view.data() != pStr) + Copy(pStr, view.data(), nLen); + *(pStr+nLen) = 0; + } + + return nLen; +} + +/* ----------------------------------------------------------------------- */ + +template sal_Int32 valueOfBoolean( IMPL_RTL_STRCODE* pStr, sal_Bool b ) +{ + assert(pStr); + if ( b ) + { + *pStr = 't'; + pStr++; + *pStr = 'r'; + pStr++; + *pStr = 'u'; + pStr++; + *pStr = 'e'; + pStr++; + *pStr = 0; + return 4; + } + else + { + *pStr = 'f'; + pStr++; + *pStr = 'a'; + pStr++; + *pStr = 'l'; + pStr++; + *pStr = 's'; + pStr++; + *pStr = 'e'; + pStr++; + *pStr = 0; + return 5; + } +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 valueOfChar ( IMPL_RTL_STRCODE* pStr, + IMPL_RTL_STRCODE c ) +{ + assert(pStr); + *pStr++ = c; + *pStr = 0; + return 1; +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 valueOfInt ( IMPL_RTL_STRCODE* pStr, + T n, + sal_Int16 nRadix ) +{ + assert(pStr); + assert( nRadix >= RTL_STR_MIN_RADIX && nRadix <= RTL_STR_MAX_RADIX ); + char aBuf[maxLen]; + char* pBuf = aBuf; + sal_Int32 nLen = 0; + using uT = std::make_unsigned_t; + uT nValue; + + /* Radix must be valid */ + if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) ) + nRadix = 10; + + if constexpr (std::is_signed_v) + { + /* is value negative */ + if ( n < 0 ) + { + *pStr = '-'; + pStr++; + nLen++; + nValue = n == std::numeric_limits::min() ? static_cast(n) : -n; + } + else + nValue = n; + } + else + nValue = n; + + /* create a recursive buffer with all values, except the last one */ + do + { + char nDigit = static_cast(nValue % nRadix); + nValue /= nRadix; + if ( nDigit > 9 ) + *pBuf = (nDigit-10) + 'a'; + else + *pBuf = (nDigit + '0' ); + pBuf++; + } + while ( nValue > 0 ); + + /* copy the values in the right direction into the destination buffer */ + do + { + pBuf--; + *pStr = *pBuf; + pStr++; + nLen++; + } + while ( pBuf != aBuf ); + *pStr = 0; + + return nLen; +} + +/* ----------------------------------------------------------------------- */ + +template sal_Bool toBoolean( const IMPL_RTL_STRCODE* pStr ) +{ + assert(pStr); + if ( *pStr == '1' ) + return true; + + if ( (*pStr == 'T') || (*pStr == 't') ) + { + pStr++; + if ( (*pStr == 'R') || (*pStr == 'r') ) + { + pStr++; + if ( (*pStr == 'U') || (*pStr == 'u') ) + { + pStr++; + if ( (*pStr == 'E') || (*pStr == 'e') ) + return true; + } + } + } + + return false; +} + +/* ----------------------------------------------------------------------- */ + +template inline bool HandleSignChar(Iter& iter) +{ + if constexpr (std::numeric_limits::is_signed) + { + if (*iter == '-') + { + ++iter; + return true; + } + } + if (*iter == '+') + ++iter; + return false; +} + +template std::pair DivMod(sal_Int16 nRadix, [[maybe_unused]] bool bNeg) +{ + if constexpr (std::numeric_limits::is_signed) + if (bNeg) + return { -(std::numeric_limits::min() / nRadix), + -(std::numeric_limits::min() % nRadix) }; + return { std::numeric_limits::max() / nRadix, std::numeric_limits::max() % nRadix }; +} + +template T toInt(S str, sal_Int16 nRadix) +{ + assert( nRadix >= RTL_STR_MIN_RADIX && nRadix <= RTL_STR_MAX_RADIX ); + + if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) ) + nRadix = 10; + + auto pStr = str.begin(); + const auto end = str.end(); + + /* Skip whitespaces */ + while (pStr != end && implIsWhitespace(IMPL_RTL_USTRCODE(*pStr))) + pStr++; + if (pStr == end) + return 0; + + const bool bNeg = HandleSignChar(pStr); + const auto& [nDiv, nMod] = DivMod(nRadix, bNeg); + assert(nDiv > 0); + + std::make_unsigned_t n = 0; + while (pStr != end) + { + sal_Int16 nDigit = implGetDigit(IMPL_RTL_USTRCODE(*pStr), nRadix); + if ( nDigit < 0 ) + break; + if (static_cast>(nMod < nDigit ? nDiv - 1 : nDiv) < n) + return 0; + + n *= nRadix; + n += nDigit; + + pStr++; + } + + if constexpr (std::numeric_limits::is_signed) + if (bNeg) + return n == static_cast>(std::numeric_limits::min()) + ? std::numeric_limits::min() + : -static_cast(n); + return static_cast(n); +} + +/* ======================================================================= */ +/* Internal String-Class help functions */ +/* ======================================================================= */ + +template using STRCODE = std::remove_extent_t; +template struct STRINGDATA_; +template <> struct STRINGDATA_ +{ + using T = rtl_String; +}; +template <> struct STRINGDATA_ +{ + using T = rtl_uString; +}; +template using STRINGDATA = typename STRINGDATA_::T; + +template IMPL_RTL_STRINGDATA* Alloc( sal_Int32 nLen ) +{ + IMPL_RTL_STRINGDATA * pData + = (sal::static_int_cast< sal_uInt32 >(nLen) + <= ((SAL_MAX_UINT32 - sizeof (IMPL_RTL_STRINGDATA)) + / sizeof (STRCODE))) + ? static_cast(rtl_allocateString( + sizeof (IMPL_RTL_STRINGDATA) + nLen * sizeof (STRCODE))) + : nullptr; + if (pData != nullptr) { + pData->refCount = 1; + pData->length = nLen; + pData->buffer[nLen] = 0; + } + return pData; +} + +/* ======================================================================= */ +/* String-Class functions */ +/* ======================================================================= */ + +template void acquire(IMPL_RTL_STRINGDATA * pThis) +{ + if (!SAL_STRING_IS_STATIC (pThis)) + osl_atomic_increment( &((pThis)->refCount) ); +} + +/* ----------------------------------------------------------------------- */ + +template void release( IMPL_RTL_STRINGDATA* pThis ) +{ + if (SAL_UNLIKELY(SAL_STRING_IS_STATIC (pThis))) + return; + + /* OString doesn't have an 'intern' */ + if constexpr (sizeof(STRCODE) == sizeof(sal_Unicode)) + { + if (SAL_STRING_IS_INTERN (pThis)) + { + internRelease (pThis); + return; + } + } + + if ( !osl_atomic_decrement( &(pThis->refCount) ) ) + { + RTL_LOG_STRING_DELETE( pThis ); + rtl_freeString( pThis ); + } +} + +/* ----------------------------------------------------------------------- */ + +/* static data to be referenced by all empty strings + * the refCount is predefined to 1 and must never become 0 ! + */ +template struct EmptyStringImpl +{ + static IMPL_RTL_STRINGDATA data; +}; + +template <> +inline rtl_uString EmptyStringImpl::data = { + sal_Int32(SAL_STRING_INTERN_FLAG | SAL_STRING_STATIC_FLAG | 1), /* sal_Int32 refCount; */ + 0, /* sal_Int32 length; */ + { 0 } /* sal_Unicode buffer[1]; */ +}; + +template <> +inline rtl_String EmptyStringImpl::data = { + SAL_STRING_STATIC_FLAG | 1, /* sal_Int32 refCount; */ + 0, /* sal_Int32 length; */ + { 0 } /* char buffer[1]; */ +}; + +template void new_( IMPL_RTL_STRINGDATA** ppThis ) +{ + assert(ppThis); + if ( *ppThis) + release( *ppThis ); + + *ppThis = &EmptyStringImpl::data; +} + +/* ----------------------------------------------------------------------- */ + +template +void new_WithLength( IMPL_RTL_STRINGDATA** ppThis, sal_Int32 nLen ) +{ + assert(ppThis); + assert(nLen >= 0); + if ( nLen <= 0 ) + new_( ppThis ); + else + { + if ( *ppThis) + release( *ppThis ); + + *ppThis = Alloc( nLen ); + assert(*ppThis != nullptr); + (*ppThis)->length = 0; + (*ppThis)->buffer[0] = 0; + } +} + +/* ----------------------------------------------------------------------- */ + +template +void newFromStr_WithLength(IMPL_RTL_STRINGDATA** ppThis, const C* pCharStr, sal_Int32 nLen, + sal_Int32 allocExtra = 0) +{ + assert(ppThis); + assert(nLen >= 0); + assert(pCharStr || nLen == 0); + assert(allocExtra >= 0); + + if (nLen + allocExtra == 0) + return new_(ppThis); + + IMPL_RTL_STRINGDATA* pOrg = *ppThis; + *ppThis = Alloc(nLen + allocExtra); + assert(*ppThis != nullptr); + if (nLen > 0) + Copy((*ppThis)->buffer, pCharStr, nLen); + if (allocExtra > 0) + { + (*ppThis)->length = nLen; + (*ppThis)->buffer[nLen] = 0; + } + + RTL_LOG_STRING_NEW(*ppThis); + + /* must be done last, if pCharStr belongs to *ppThis */ + if (pOrg) + release(pOrg); +} + +template +void newFromString ( IMPL_RTL_STRINGDATA** ppThis, + const IMPL_RTL_STRINGDATA* pStr ) +{ + assert(pStr); + + newFromStr_WithLength(ppThis, pStr->buffer, pStr->length); +} + +/* ----------------------------------------------------------------------- */ + +template +void newFromStr ( IMPL_RTL_STRINGDATA** ppThis, + const STRCODE* pCharStr ) +{ +#if OSL_DEBUG_LEVEL > 0 + //TODO: For now, only abort in non-production debug builds; once all places that rely on the + // undocumented newFromStr behavior of treating a null pCharStr like an empty string have been + // found and fixed, drop support for that behavior and turn this into a general assert: + if (pCharStr == nullptr) { + std::abort(); + } +#endif + + newFromStr_WithLength(ppThis, pCharStr, pCharStr ? getLength(pCharStr) : 0); +} + +/* ----------------------------------------------------------------------- */ + +template void assign(IMPL_RTL_STRINGDATA**, IMPL_RTL_STRINGDATA*); + +template +void newFromSubString ( IMPL_RTL_STRINGDATA** ppThis, + const IMPL_RTL_STRINGDATA* pFrom, + sal_Int32 beginIndex, + sal_Int32 count ) +{ + assert(ppThis); + if ( beginIndex == 0 && count == pFrom->length ) + return assign(ppThis, const_cast(pFrom)); + if ( count < 0 || beginIndex < 0 || beginIndex + count > pFrom->length ) + { + assert(false); // fail fast at least in debug builds + return newFromStr_WithLength(ppThis, "!!br0ken!!", 10); + } + + newFromStr_WithLength( ppThis, pFrom->buffer + beginIndex, count ); +} + +/* ----------------------------------------------------------------------- */ + +template +void assign ( IMPL_RTL_STRINGDATA** ppThis, + IMPL_RTL_STRINGDATA* pStr ) +{ + assert(ppThis); + /* must be done at first, if pStr == *ppThis */ + acquire( pStr ); + + if ( *ppThis ) + release( *ppThis ); + + *ppThis = pStr; +} + +/* ----------------------------------------------------------------------- */ + +template auto* getStr( IMPL_RTL_STRINGDATA* pThis ) +{ + assert(pThis); + return pThis->buffer; +} + +/* ----------------------------------------------------------------------- */ + +enum ThrowPolicy { NoThrow, Throw }; + +template +void newConcat(IMPL_RTL_STRINGDATA** ppThis, const C1* pLeft, sal_Int32 nLeftLength, + const C2* pRight, sal_Int32 nRightLength) +{ + assert(ppThis); + assert(nLeftLength >= 0); + assert(pLeft || nLeftLength == 0); + assert(nRightLength >= 0); + assert(pRight || nRightLength == 0); + IMPL_RTL_STRINGDATA* pOrg = *ppThis; + + if (nLeftLength > std::numeric_limits::max() - nRightLength) + { + if constexpr (throwPolicy == NoThrow) + *ppThis = nullptr; + else + { +#if !defined(__COVERITY__) + throw std::length_error("newConcat"); +#else + //coverity doesn't report std::bad_alloc as an unhandled exception when + //potentially thrown from destructors but does report std::length_error + throw std::bad_alloc(); +#endif + } + } + else + { + auto* pTempStr = Alloc(nLeftLength + nRightLength); + OSL_ASSERT(pTempStr != nullptr); + *ppThis = pTempStr; + if (*ppThis != nullptr) { + if (nLeftLength) + Copy( pTempStr->buffer, pLeft, nLeftLength ); + if (nRightLength) + Copy( pTempStr->buffer+nLeftLength, pRight, nRightLength ); + + RTL_LOG_STRING_NEW( *ppThis ); + } + } + + /* must be done last, if left or right == *ppThis */ + if ( pOrg ) + release( pOrg ); +} + +template +void newConcat(IMPL_RTL_STRINGDATA** ppThis, IMPL_RTL_STRINGDATA* pLeft, + const IMPL_RTL_STRCODE* pRight, sal_Int32 nRightLength) +{ + assert(pLeft != nullptr); + if (nRightLength == 0) + assign(ppThis, pLeft); + else + newConcat(ppThis, pLeft->buffer, pLeft->length, pRight, nRightLength); +} + +template +void newConcat ( IMPL_RTL_STRINGDATA** ppThis, + IMPL_RTL_STRINGDATA* pLeft, + IMPL_RTL_STRINGDATA* pRight ) +{ + /* Test for 0-Pointer - if not, change newReplaceStrAt! */ + if ( !pRight || !pRight->length ) + { + assert(pLeft != nullptr); + assign(ppThis, pLeft); + } + else if ( !pLeft || !pLeft->length ) + assign(ppThis, pRight); + else + newConcat(ppThis, pLeft->buffer, pLeft->length, pRight->buffer, pRight->length); +} + +/* ----------------------------------------------------------------------- */ + +template +void ensureCapacity ( IMPL_RTL_STRINGDATA** ppThis, + sal_Int32 size ) +{ + assert(ppThis); + IMPL_RTL_STRINGDATA* const pOrg = *ppThis; + if ( pOrg->refCount == 1 && pOrg->length >= size ) + return; + assert( pOrg->length <= size ); // do not truncate + auto* pTempStr = Alloc( size ); + Copy( pTempStr->buffer, pOrg->buffer, pOrg->length ); + // right now the length is still the same as of the original + pTempStr->length = pOrg->length; + pTempStr->buffer[ pOrg->length ] = '\0'; + *ppThis = pTempStr; + RTL_LOG_STRING_NEW( *ppThis ); + + release( pOrg ); +} + +/* ----------------------------------------------------------------------- */ + +template +void newReplaceStrAt ( IMPL_RTL_STRINGDATA** ppThis, + IMPL_RTL_STRINGDATA* pStr, + sal_Int32 nIndex, + sal_Int32 nCount, + const IMPL_RTL_STRCODE* pNewSubStr, + sal_Int32 nNewSubStrLen ) +{ + assert(ppThis); + assert(nIndex >= 0 && nIndex <= pStr->length); + assert(nCount >= 0); + assert(nCount <= pStr->length - nIndex); + assert(pNewSubStr != nullptr || nNewSubStrLen == 0); + assert(nNewSubStrLen >= 0); + /* Append? */ + if ( nIndex >= pStr->length ) + return newConcat(ppThis, pStr, pNewSubStr, nNewSubStrLen); + + /* not more than the String length could be deleted */ + if ( nCount >= pStr->length-nIndex ) + { + /* Assign of NewSubStr? */ + if (nIndex == 0) + return newFromStr_WithLength( ppThis, pNewSubStr, nNewSubStrLen ); + + nCount = pStr->length - nIndex; + } + + /* Assign of Str? */ + if ( !nCount && !nNewSubStrLen ) + return assign(ppThis, pStr); + + IMPL_RTL_STRINGDATA* pOrg = *ppThis; + + /* Alloc New Buffer */ + *ppThis = Alloc(pStr->length - nCount + nNewSubStrLen); + assert(*ppThis != nullptr); + auto* pBuffer = (*ppThis)->buffer; + if ( nIndex ) + { + Copy( pBuffer, pStr->buffer, nIndex ); + pBuffer += nIndex; + } + if ( nNewSubStrLen ) + { + Copy( pBuffer, pNewSubStr, nNewSubStrLen ); + pBuffer += nNewSubStrLen; + } + Copy( pBuffer, pStr->buffer+nIndex+nCount, pStr->length-nIndex-nCount ); + + RTL_LOG_STRING_NEW( *ppThis ); + /* must be done last, if pStr or pNewSubStr == *ppThis */ + if ( pOrg ) + release( pOrg ); +} + +/* ----------------------------------------------------------------------- */ + +template +void newReplaceStrAt ( IMPL_RTL_STRINGDATA** ppThis, + IMPL_RTL_STRINGDATA* pStr, + sal_Int32 nIndex, + sal_Int32 nCount, + IMPL_RTL_STRINGDATA* pNewSubStr ) +{ + assert(ppThis); + assert(nIndex >= 0 && nIndex <= pStr->length); + assert(nCount >= 0); + assert(nCount <= pStr->length - nIndex); + /* Append? */ + if (nIndex >= pStr->length) + { + /* newConcat test, if pNewSubStr is 0 */ + newConcat(ppThis, pStr, pNewSubStr); + return; + } + + /* not more than the String length could be deleted */ + if (nCount >= pStr->length-nIndex) + { + /* Assign of NewSubStr? */ + if (nIndex == 0) + { + if (!pNewSubStr) + return new_(ppThis); + else + return assign(ppThis, pNewSubStr); + } + nCount = pStr->length - nIndex; + } + + /* Assign of Str? */ + if (!nCount && (!pNewSubStr || !pNewSubStr->length)) + { + assign(ppThis, pStr); + return; + } + + const auto* pNewSubStrBuf = pNewSubStr ? pNewSubStr->buffer : nullptr; + const sal_Int32 nNewSubStrLength = pNewSubStr ? pNewSubStr->length : 0; + newReplaceStrAt(ppThis, pStr, nIndex, nCount, pNewSubStrBuf, nNewSubStrLength); +} + +/* ----------------------------------------------------------------------- */ + +template +void newReplaceChars(IMPL_RTL_STRINGDATA** ppThis, IMPL_RTL_STRINGDATA* pStr) +{ + assert(ppThis); + assert(pStr); + + const auto pEnd = pStr->buffer + pStr->length; + auto pCharStr = std::find_if(pStr->buffer, pEnd, [](auto c) { return Traits::Applicable(c); }); + if (pCharStr != pEnd) + { + IMPL_RTL_STRINGDATA* pOrg = *ppThis; + *ppThis = Alloc(pStr->length); + assert(*ppThis != nullptr); + auto* pNewCharStr = (*ppThis)->buffer; + /* Copy String */ + const sal_Int32 nCount = pCharStr - pStr->buffer; + Copy(pNewCharStr, pStr->buffer, nCount); + pNewCharStr += nCount; + /* replace/copy rest of the string */ + do + { + *pNewCharStr = Traits::Replace(*pCharStr); + pNewCharStr++; + pCharStr++; + } while (pCharStr != pEnd); + + RTL_LOG_STRING_NEW(*ppThis); + /* must be done last, if pStr == *ppThis */ + if (pOrg) + release(pOrg); + } + else + assign(ppThis, pStr); +} + +/* ----------------------------------------------------------------------- */ + +template +void newTrim ( IMPL_RTL_STRINGDATA** ppThis, + IMPL_RTL_STRINGDATA* pStr ) +{ + assert(pStr); + const auto view = trimView(pStr->buffer, pStr->length); + + if (static_cast(view.size()) == pStr->length) + assign(ppThis, pStr); + else + newFromStr_WithLength(ppThis, view.data(), view.size()); +} + +/* ----------------------------------------------------------------------- */ + +template +sal_Int32 getToken ( IMPL_RTL_STRINGDATA** ppThis, + IMPL_RTL_STRINGDATA* pStr, + sal_Int32 nToken, + STRCODE cTok, + sal_Int32 nIndex ) +{ + assert(ppThis); + assert(pStr); + assert(nIndex <= pStr->length); + + // Set ppThis to an empty string and return -1 if either nToken or nIndex is + // negative: + if (nIndex >= 0 && nToken >= 0) + { + const auto* pOrgCharStr = pStr->buffer; + const auto* pCharStr = pOrgCharStr + nIndex; + sal_Int32 nLen = pStr->length - nIndex; + sal_Int32 nTokCount = 0; + const auto* pCharStrStart = pCharStr; + while (nLen > 0) + { + if (*pCharStr == cTok) + { + nTokCount++; + + if (nTokCount > nToken) + break; + if (nTokCount == nToken) + pCharStrStart = pCharStr + 1; + } + + pCharStr++; + nLen--; + } + if (nTokCount >= nToken) + { + newFromStr_WithLength(ppThis, pCharStrStart, pCharStr - pCharStrStart); + if (nLen > 0) + return pCharStr - pOrgCharStr + 1; + else + return -1; + } + } + + new_(ppThis); + return -1; +} + +/* ======================================================================= */ +/* String buffer help functions */ +/* ======================================================================= */ + +template +void stringbuffer_newFromStr_WithLength(IMPL_RTL_STRINGDATA** ppThis, + const STRCODE* pStr, sal_Int32 count) +{ + assert(ppThis); + assert(count >= 0); + if (!pStr) + count = 0; // Because old code didn't care about count when !pStr + + newFromStr_WithLength(ppThis, pStr, count, 16); +} + +template +sal_Int32 stringbuffer_newFromStringBuffer(IMPL_RTL_STRINGDATA** ppThis, sal_Int32 capacity, + IMPL_RTL_STRINGDATA* pStr) +{ + assert(capacity >= 0); + assert(pStr); + + if (capacity < pStr->length) + capacity = pStr->length; + + newFromStr_WithLength(ppThis, pStr->buffer, pStr->length, capacity - pStr->length); + return capacity; +} + +template +void stringbuffer_ensureCapacity(IMPL_RTL_STRINGDATA** ppThis, sal_Int32* capacity, + sal_Int32 minimumCapacity) +{ + assert(ppThis); + assert(capacity && *capacity >= 0); + // assert(minimumCapacity >= 0); // It was commented out in rtl_stringbuffer_ensureCapacity + if (minimumCapacity <= *capacity) + return; + + const auto nLength = (*ppThis)->length; + *capacity = (nLength + 1) * 2; + if (minimumCapacity > *capacity) + *capacity = minimumCapacity; + + newFromStr_WithLength(ppThis, (*ppThis)->buffer, nLength, *capacity - nLength); +} + +template +void stringbuffer_insert(IMPL_RTL_STRINGDATA** ppThis, sal_Int32* capacity, sal_Int32 offset, + const C* pStr, sal_Int32 len) +{ + assert(ppThis); + assert(capacity && *capacity >= 0); + assert(offset >= 0 && offset <= (*ppThis)->length); + assert(len >= 0); + if (len == 0) + return; + + stringbuffer_ensureCapacity(ppThis, capacity, (*ppThis)->length + len); + + sal_Int32 nOldLen = (*ppThis)->length; + auto* pBuf = (*ppThis)->buffer; + + /* copy the tail */ + const sal_Int32 n = nOldLen - offset; + if (n > 0) + CopyBackward(pBuf + offset + len, pBuf + offset, n); + + /* insert the new characters */ + if (pStr != nullptr) + Copy(pBuf + offset, pStr, len); + + (*ppThis)->length = nOldLen + len; + pBuf[nOldLen + len] = 0; +} + +template +void stringbuffer_remove(IMPL_RTL_STRINGDATA** ppThis, sal_Int32 start, sal_Int32 len) +{ + assert(ppThis); + assert(start >= 0 && start <= (*ppThis)->length); + assert(len >= 0); + + if (len > (*ppThis)->length - start) + len = (*ppThis)->length - start; + + //remove nothing + if (!len) + return; + + auto* pBuf = (*ppThis)->buffer; + const sal_Int32 nTailLen = (*ppThis)->length - (start + len); + + if (nTailLen) + { + /* move the tail */ + Copy(pBuf + start, pBuf + start + len, nTailLen); + } + + (*ppThis)->length -= len; + pBuf[(*ppThis)->length] = 0; +} + +template +void newReplaceAllFromIndex(S** s, S* s1, CharTypeFrom const* from, sal_Int32 fromLength, + CharTypeTo const* to, sal_Int32 toLength, sal_Int32 fromIndex) +{ + assert(s != nullptr); + assert(s1 != nullptr); + assert(fromLength >= 0); + assert(from != nullptr || fromLength == 0); + assert(toLength >= 0); + assert(to != nullptr || toLength == 0); + assert(fromIndex >= 0 && fromIndex <= s1->length); + sal_Int32 i = indexOfStr_WithLength(s1->buffer + fromIndex, s1->length - fromIndex, + from, fromLength); + if (i >= 0) + { + if (s1->length - fromLength > SAL_MAX_INT32 - toLength) + std::abort(); + i += fromIndex; + sal_Int32 nCapacity = s1->length + (toLength - fromLength); + if (fromLength < toLength) + { + // Pre-allocate up to 16 replacements more + const sal_Int32 nMaxMoreFinds = (s1->length - i - fromLength) / fromLength; + const sal_Int32 nIncrease = toLength - fromLength; + const sal_Int32 nMoreReplacements = std::min( + { nMaxMoreFinds, (SAL_MAX_INT32 - nCapacity) / nIncrease, sal_Int32(16) }); + nCapacity += nMoreReplacements * nIncrease; + } + const auto pOld = *s; + *s = Alloc(nCapacity); + (*s)->length = 0; + fromIndex = 0; + do + { + stringbuffer_insert(s, &nCapacity, (*s)->length, s1->buffer + fromIndex, i); + stringbuffer_insert(s, &nCapacity, (*s)->length, to, toLength); + fromIndex += i + fromLength; + i = indexOfStr_WithLength(s1->buffer + fromIndex, s1->length - fromIndex, + from, fromLength); + } while (i >= 0); + // the rest + stringbuffer_insert(s, &nCapacity, (*s)->length, + s1->buffer + fromIndex, s1->length - fromIndex); + if (pOld) + release(pOld); // Must be last in case *s == s1 + } + else + assign(s, s1); + + RTL_LOG_STRING_NEW(*s); +} + +template +void newReplace(IMPL_RTL_STRINGDATA** ppThis, IMPL_RTL_STRINGDATA* pStr, + STRCODE cOld, STRCODE cNew) +{ + return newReplaceAllFromIndex(ppThis, pStr, &cOld, 1, &cNew, 1, 0); +} + +template +void newReplaceFirst(S** s, S* s1, CharTypeFrom const* from, sal_Int32 fromLength, + CharTypeTo const* to, sal_Int32 toLength, sal_Int32& fromIndex) +{ + assert(s != nullptr); + assert(s1 != nullptr); + assert(fromLength >= 0); + assert(from != nullptr || fromLength == 0); + assert(toLength >= 0); + assert(to != nullptr || toLength == 0); + assert(fromIndex >= 0 && fromIndex <= s1->length); + sal_Int32 i = indexOfStr_WithLength(s1->buffer + fromIndex, s1->length - fromIndex, + from, fromLength); + if (i >= 0) + { + if (s1->length - fromLength > SAL_MAX_INT32 - toLength) + std::abort(); + i += fromIndex; + newReplaceStrAt(s, s1, i, fromLength, to, toLength); + } + else + assign(s, s1); + + fromIndex = i; +} + +// doubleToString implementation + +static inline constexpr sal_uInt64 eX[] = { 10ull, + 100ull, + 1000ull, + 10000ull, + 100000ull, + 1000000ull, + 10000000ull, + 100000000ull, + 1000000000ull, + 10000000000ull, + 100000000000ull, + 1000000000000ull, + 10000000000000ull, + 100000000000000ull, + 1000000000000000ull, + 10000000000000000ull, + 100000000000000000ull, + 1000000000000000000ull, + 10000000000000000000ull }; + +template +void doubleToString(S** pResult, sal_Int32* pResultCapacity, sal_Int32 nResultOffset, double fValue, + rtl_math_StringFormat eFormat, sal_Int32 nDecPlaces, STRCODE cDecSeparator, + sal_Int32 const* pGroups, STRCODE cGroupSeparator, + bool bEraseTrailingDecZeros) +{ + auto decimalDigits = [](sal_uInt64 n) { + return std::distance(std::begin(eX), std::upper_bound(std::begin(eX), std::end(eX), n)) + 1; + }; + + auto roundToPow10 = [](sal_uInt64 n, int e) { + assert(e > 0 && o3tl::make_unsigned(e) <= std::size(eX)); + const sal_uInt64 d = eX[e - 1]; + return (n + d / 2) / d * d; + }; + + auto append = [](S** s, sal_Int32* pCapacity, sal_Int32& rOffset, auto sv) + { + stringbuffer_insert(s, pCapacity, rOffset, sv.data(), sv.size()); + rOffset += sv.size(); + }; + + if (std::isnan(fValue)) + { + // #i112652# XMLSchema-2 + constexpr std::string_view nan{ "NaN" }; + if (!pResultCapacity) + return newFromStr_WithLength(pResult, nan.data(), nan.size()); + else + return append(pResult, pResultCapacity, nResultOffset, nan); + } + + // sign adjustment, instead of testing for fValue<0.0 this will also fetch -0.0 + bool bSign = std::signbit(fValue); + + if (std::isinf(fValue)) + { + // #i112652# XMLSchema-2 + std::string_view inf = bSign ? std::string_view("-INF") : std::string_view("INF"); + if (!pResultCapacity) + return newFromStr_WithLength(pResult, inf.data(), inf.size()); + else + return append(pResult, pResultCapacity, nResultOffset, inf); + } + + if (bSign) + fValue = -fValue; + + decltype(jkj::dragonbox::to_decimal(fValue, jkj::dragonbox::policy::sign::ignore, + jkj::dragonbox::policy::trailing_zero::ignore)) aParts{}; + if (fValue) // to_decimal is documented to only handle non-zero finite numbers + aParts = jkj::dragonbox::to_decimal(fValue, jkj::dragonbox::policy::sign::ignore, + jkj::dragonbox::policy::trailing_zero::ignore); + + int nOrigDigits = decimalDigits(aParts.significand); + int nExp = nOrigDigits + aParts.exponent - 1; + int nRoundDigits = 15; + + // Unfortunately the old rounding below writes 1.79769313486232e+308 for + // DBL_MAX and 4 subsequent nextafter(...,0). + static const double fB1 = std::nextafter(std::numeric_limits::max(), 0); + static const double fB2 = std::nextafter(fB1, 0); + static const double fB3 = std::nextafter(fB2, 0); + static const double fB4 = std::nextafter(fB3, 0); + if ((fValue >= fB4) && eFormat != rtl_math_StringFormat_F) + { + // 1.7976931348623157e+308 instead of rounded 1.79769313486232e+308 + // that can't be converted back as out of range. For rounded values if + // they exceed range they should not be written to exchange strings or + // file formats. + + eFormat = rtl_math_StringFormat_E; + nDecPlaces = std::clamp(nDecPlaces, 0, 16); + nRoundDigits = 17; + } + + // Use integer representation for integer values that fit into the + // mantissa (1.((2^53)-1)) with a precision of 1 for highest accuracy. + if ((eFormat == rtl_math_StringFormat_Automatic || eFormat == rtl_math_StringFormat_F) + && aParts.exponent >= 0 && fValue < 0x1p53) + { + eFormat = rtl_math_StringFormat_F; + if (nDecPlaces == rtl_math_DecimalPlaces_Max) + nDecPlaces = 0; + else + nDecPlaces = std::clamp(nDecPlaces, -15, 15); + + if (bEraseTrailingDecZeros && nDecPlaces > 0) + nDecPlaces = 0; + + nRoundDigits = nOrigDigits; // no rounding + } + + switch (eFormat) + { + case rtl_math_StringFormat_Automatic: + // E or F depending on exponent magnitude + if (nExp <= -15 || nExp >= 15) + { + if (nDecPlaces == rtl_math_DecimalPlaces_Max) + nDecPlaces = 14; + eFormat = rtl_math_StringFormat_E; + } + else + { + if (nDecPlaces == rtl_math_DecimalPlaces_Max) + nDecPlaces = (nExp < 14) ? 15 - nExp - 1 : 15; + eFormat = rtl_math_StringFormat_F; + } + break; + + case rtl_math_StringFormat_G: + case rtl_math_StringFormat_G1: + case rtl_math_StringFormat_G2: + // G-Point, similar to sprintf %G + if (nDecPlaces == rtl_math_DecimalPlaces_DefaultSignificance) + nDecPlaces = 6; + + if (nExp < -4 || nExp >= nDecPlaces) + { + nDecPlaces = std::max(1, nDecPlaces - 1); + + if (eFormat == rtl_math_StringFormat_G) + eFormat = rtl_math_StringFormat_E; + else if (eFormat == rtl_math_StringFormat_G2) + eFormat = rtl_math_StringFormat_E2; + else if (eFormat == rtl_math_StringFormat_G1) + eFormat = rtl_math_StringFormat_E1; + } + else + { + nDecPlaces = std::max(0, nDecPlaces - nExp - 1); + eFormat = rtl_math_StringFormat_F; + } + break; + + default: + break; + } + + // Too large values for nDecPlaces make no sense; it might also be + // rtl_math_DecimalPlaces_Max was passed with rtl_math_StringFormat_F or + // others, but we don't want to allocate/deallocate 2GB just to fill it + // with trailing '0' characters.. + nDecPlaces = std::clamp(nDecPlaces, -20, 20); + + sal_Int32 nDigits = nDecPlaces + 1; + + if (eFormat == rtl_math_StringFormat_F) + nDigits += nExp; + + // Round the number + nRoundDigits = std::min(nDigits, nRoundDigits); + if (nDigits >= 0 && nOrigDigits > nRoundDigits) + { + aParts.significand = roundToPow10(aParts.significand, nOrigDigits - nRoundDigits); + assert(aParts.significand <= eX[nOrigDigits - 1]); + if (aParts.significand == eX[nOrigDigits - 1]) // up-rounding to the next decade + { + nOrigDigits++; + nExp++; + + if (eFormat == rtl_math_StringFormat_F) + nDigits++; + } + } + + sal_Int32 nBuf + = (nDigits <= 0 ? std::max(nDecPlaces, std::abs(nExp)) : nDigits + nDecPlaces) + + 10 + (pGroups ? std::abs(nDigits) * 2 : 0); + // max(nDigits) = max(nDecPlaces) + 1 + max(nExp) + 1 = 20 + 1 + 308 + 1 = 330 + // max(nBuf) = max(nDigits) + max(nDecPlaces) + 10 + max(nDigits) * 2 = 330 * 3 + 20 + 10 = 1020 + assert(nBuf <= 1024); + STRCODE* const pBuf = static_cast*>(alloca(nBuf * sizeof(STRCODE))); + STRCODE* p = pBuf; + if (bSign) + *p++ = '-'; + + bool bHasDec = false; + + int nDecPos; + // Check for F format and number < 1 + if (eFormat == rtl_math_StringFormat_F) + { + if (nExp < 0) + { + *p++ = '0'; + if (nDecPlaces > 0) + { + *p++ = cDecSeparator; + bHasDec = true; + } + + sal_Int32 i = (nDigits <= 0 ? nDecPlaces : -nExp - 1); + + while ((i--) > 0) + *p++ = '0'; + + nDecPos = 0; + } + else + nDecPos = nExp + 1; + } + else + nDecPos = 1; + + int nGrouping = 0, nGroupSelector = 0, nGroupExceed = 0; + if (nDecPos > 1 && pGroups && pGroups[0] && cGroupSeparator) + { + while (nGrouping + pGroups[nGroupSelector] < nDecPos) + { + nGrouping += pGroups[nGroupSelector]; + if (pGroups[nGroupSelector + 1]) + { + if (nGrouping + pGroups[nGroupSelector + 1] >= nDecPos) + break; // while + + ++nGroupSelector; + } + else if (!nGroupExceed) + nGroupExceed = nGrouping; + } + } + + // print the number + if (nDigits > 0) + { + for (int nCurExp = nOrigDigits - 1;;) + { + int nDigit; + if (aParts.significand > 0 && nCurExp > 0) + { + --nCurExp; + nDigit = aParts.significand / eX[nCurExp]; + aParts.significand %= eX[nCurExp]; + } + else + { + nDigit = aParts.significand; + aParts.significand = 0; + } + assert(nDigit >= 0 && nDigit < 10); + *p++ = nDigit + '0'; + + if (!--nDigits) + break; // for + + if (nDecPos) + { + if (!--nDecPos) + { + *p++ = cDecSeparator; + bHasDec = true; + } + else if (nDecPos == nGrouping) + { + *p++ = cGroupSeparator; + nGrouping -= pGroups[nGroupSelector]; + + if (nGroupSelector && nGrouping < nGroupExceed) + --nGroupSelector; + } + } + } + } + + if (!bHasDec && eFormat == rtl_math_StringFormat_F) + { // nDecPlaces < 0 did round the value + while (--nDecPos > 0) + { // fill before decimal point + if (nDecPos == nGrouping) + { + *p++ = cGroupSeparator; + nGrouping -= pGroups[nGroupSelector]; + + if (nGroupSelector && nGrouping < nGroupExceed) + --nGroupSelector; + } + + *p++ = '0'; + } + } + + if (bEraseTrailingDecZeros && bHasDec) + { + while (*(p - 1) == '0') + p--; + + if (*(p - 1) == cDecSeparator) + p--; + } + + // Print the exponent ('E', followed by '+' or '-', followed by exactly + // three digits for rtl_math_StringFormat_E). The code in + // rtl_[u]str_valueOf{Float|Double} relies on this format. + if (eFormat == rtl_math_StringFormat_E || eFormat == rtl_math_StringFormat_E2 + || eFormat == rtl_math_StringFormat_E1) + { + if (p == pBuf) + *p++ = '1'; + // maybe no nDigits if nDecPlaces < 0 + + *p++ = 'E'; + if (nExp < 0) + { + nExp = -nExp; + *p++ = '-'; + } + else + *p++ = '+'; + + if (eFormat == rtl_math_StringFormat_E || nExp >= 100) + *p++ = nExp / 100 + '0'; + + nExp %= 100; + + if (eFormat == rtl_math_StringFormat_E || eFormat == rtl_math_StringFormat_E2 || nExp >= 10) + *p++ = nExp / 10 + '0'; + + *p++ = nExp % 10 + '0'; + } + + if (!pResultCapacity) + newFromStr_WithLength(pResult, pBuf, p - pBuf); + else + append(pResult, pResultCapacity, nResultOffset, std::basic_string_view(pBuf, p - pBuf)); +} + +template sal_Int32 SAL_CALL valueOfFP(C* pStr, T f) +{ + assert(pStr); + STRINGDATA* pResult = nullptr; + doubleToString(&pResult, nullptr, 0, f, rtl_math_StringFormat_G, + maxLen - std::size("-x.E-xxx") + 1, '.', nullptr, 0, true); + const sal_Int32 nLen = pResult->length; + assert(nLen < maxLen); + Copy(pStr, pResult->buffer, nLen + 1); + release(pResult); + return nLen; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/unload.cxx b/sal/rtl/unload.cxx new file mode 100644 index 000000000..beac56ffa --- /dev/null +++ b/sal/rtl/unload.cxx @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +extern "C" void rtl_moduleCount_acquire(rtl_ModuleCount*) {} + +extern "C" void rtl_moduleCount_release(rtl_ModuleCount*) {} + +extern "C" sal_Bool rtl_moduleCount_canUnload(rtl_StandardModuleCount*, TimeValue*) +{ + return false; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/uri.cxx b/sal/rtl/uri.cxx new file mode 100644 index 000000000..341455261 --- /dev/null +++ b/sal/rtl/uri.cxx @@ -0,0 +1,759 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +namespace { + +sal_Unicode const cEscapePrefix = 0x25; // '%' + +int getHexWeight(sal_uInt32 nUtf32) +{ + return nUtf32 >= 0x30 && nUtf32 <= 0x39 ? // '0'--'9' + static_cast< int >(nUtf32 - 0x30) : + nUtf32 >= 0x41 && nUtf32 <= 0x46 ? // 'A'--'F' + static_cast< int >(nUtf32 - 0x41 + 10) : + nUtf32 >= 0x61 && nUtf32 <= 0x66 ? // 'a'--'f' + static_cast< int >(nUtf32 - 0x61 + 10) : + -1; // not a hex digit +} + +bool isValid(sal_Bool const * pCharClass, sal_uInt32 nUtf32) +{ + return nUtf32 < rtl::UriCharClassSize && pCharClass[nUtf32]; +} + +void writeUnicode(rtl_uString ** pBuffer, sal_Int32 * pCapacity, + sal_Unicode cChar) +{ + rtl_uStringbuffer_insert(pBuffer, pCapacity, (*pBuffer)->length, &cChar, 1); +} + +} + +namespace rtl::uri::detail { + +/** Read any of the following: + + @li sequence of escape sequences representing character from eCharset, + translated to single UCS4 character; or + @li pair of UTF-16 surrogates, translated to single UCS4 character; or + @li single UTF-16 character, extended to UCS4 character. + */ +sal_uInt32 readUcs4(sal_Unicode const ** pBegin, sal_Unicode const * pEnd, + bool bEncoded, rtl_TextEncoding eCharset, + EscapeType * pType) +{ + sal_uInt32 nChar = *(*pBegin)++; + int nWeight1; + int nWeight2; + if (nChar == cEscapePrefix && bEncoded && pEnd - *pBegin >= 2 + && (nWeight1 = getHexWeight((*pBegin)[0])) >= 0 + && (nWeight2 = getHexWeight((*pBegin)[1])) >= 0) + { + *pBegin += 2; + nChar = static_cast< sal_uInt32 >(nWeight1 << 4 | nWeight2); + if (nChar <= 0x7F) + { + *pType = EscapeChar; + } + else if (eCharset == RTL_TEXTENCODING_UTF8) + { + if (nChar >= 0xC0 && nChar <= 0xF4) + { + sal_uInt32 nEncoded; + int nShift; + sal_uInt32 nMin; + if (nChar <= 0xDF) + { + nEncoded = (nChar & 0x1F) << 6; + nShift = 0; + nMin = 0x80; + } + else if (nChar <= 0xEF) + { + nEncoded = (nChar & 0x0F) << 12; + nShift = 6; + nMin = 0x800; + } + else + { + nEncoded = (nChar & 0x07) << 18; + nShift = 12; + nMin = 0x10000; + } + + sal_Unicode const * p = *pBegin; + bool bUTF8 = true; + + for (; nShift >= 0; nShift -= 6) + { + if (pEnd - p < 3 || p[0] != cEscapePrefix + || (nWeight1 = getHexWeight(p[1])) < 8 + || nWeight1 > 11 + || (nWeight2 = getHexWeight(p[2])) < 0) + { + bUTF8 = false; + break; + } + p += 3; + nEncoded |= ((nWeight1 & 3) << 4 | nWeight2) << nShift; + } + if (bUTF8 && rtl::isUnicodeScalarValue(nEncoded) + && nEncoded >= nMin) + { + *pBegin = p; + *pType = EscapeChar; + return nEncoded; + } + } + *pType = EscapeOctet; + } + else + { + OStringBuffer aBuf; + aBuf.append(static_cast< char >(nChar)); + rtl_TextToUnicodeConverter aConverter + = rtl_createTextToUnicodeConverter(eCharset); + sal_Unicode const * p = *pBegin; + + for (;;) + { + sal_Unicode aDst[2]; + sal_uInt32 nInfo; + sal_Size nConverted; + sal_Size nDstSize = rtl_convertTextToUnicode( + aConverter, nullptr, aBuf.getStr(), aBuf.getLength(), aDst, + SAL_N_ELEMENTS( aDst ), + (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR + | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR), + &nInfo, &nConverted); + + if (nInfo == 0) + { + assert( nConverted + == sal::static_int_cast< sal_uInt32 >( + aBuf.getLength())); + + rtl_destroyTextToUnicodeConverter(aConverter); + *pBegin = p; + *pType = EscapeChar; + + assert( nDstSize == 1 + || (nDstSize == 2 && rtl::isHighSurrogate(aDst[0]) + && rtl::isLowSurrogate(aDst[1]))); + + return nDstSize == 1 + ? aDst[0] : rtl::combineSurrogates(aDst[0], aDst[1]); + } + if (nInfo == RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL + && pEnd - p >= 3 && p[0] == cEscapePrefix + && (nWeight1 = getHexWeight(p[1])) >= 0 + && (nWeight2 = getHexWeight(p[2])) >= 0) + { + p += 3; + aBuf.append(static_cast< char >(nWeight1 << 4 | nWeight2)); + } + else if (nInfo == RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL + && p != pEnd && *p <= 0x7F) + { + aBuf.append(static_cast< char >(*p++)); + } + else + { + assert( + (nInfo & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL) + == 0); + break; + } + } + rtl_destroyTextToUnicodeConverter(aConverter); + *pType = EscapeOctet; + } + return nChar; + } + + *pType = EscapeNo; + return rtl::isHighSurrogate(nChar) && *pBegin < pEnd + && rtl::isLowSurrogate(**pBegin) ? + rtl::combineSurrogates(nChar, *(*pBegin)++) : nChar; +} + +} + +namespace { + +void writeUcs4(rtl_uString ** pBuffer, sal_Int32 * pCapacity, sal_uInt32 nUtf32) +{ + rtl_uStringbuffer_insertUtf32(pBuffer, pCapacity, (*pBuffer)->length, nUtf32); +} + +void writeEscapeOctet(rtl_uString ** pBuffer, sal_Int32 * pCapacity, + sal_uInt32 nOctet) +{ + assert(nOctet <= 0xFF); // bad octet + + static sal_Unicode const aHex[16] + = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }; /* '0'--'9', 'A'--'F' */ + + writeUnicode(pBuffer, pCapacity, cEscapePrefix); + writeUnicode(pBuffer, pCapacity, aHex[nOctet >> 4]); + writeUnicode(pBuffer, pCapacity, aHex[nOctet & 15]); +} + +bool writeEscapeChar(rtl_uString ** pBuffer, sal_Int32 * pCapacity, + sal_uInt32 nUtf32, rtl_TextEncoding eCharset, bool bStrict) +{ + assert(rtl::isUnicodeCodePoint(nUtf32)); + if (eCharset == RTL_TEXTENCODING_UTF8) + { + if (nUtf32 < 0x80) + { + writeEscapeOctet(pBuffer, pCapacity, nUtf32); + } + else if (nUtf32 < 0x800) + { + writeEscapeOctet(pBuffer, pCapacity, nUtf32 >> 6 | 0xC0); + writeEscapeOctet(pBuffer, pCapacity, (nUtf32 & 0x3F) | 0x80); + } + else if (nUtf32 < 0x10000) + { + writeEscapeOctet(pBuffer, pCapacity, nUtf32 >> 12 | 0xE0); + writeEscapeOctet(pBuffer, pCapacity, (nUtf32 >> 6 & 0x3F) | 0x80); + writeEscapeOctet(pBuffer, pCapacity, (nUtf32 & 0x3F) | 0x80); + } + else + { + writeEscapeOctet(pBuffer, pCapacity, nUtf32 >> 18 | 0xF0); + writeEscapeOctet(pBuffer, pCapacity, (nUtf32 >> 12 & 0x3F) | 0x80); + writeEscapeOctet(pBuffer, pCapacity, (nUtf32 >> 6 & 0x3F) | 0x80); + writeEscapeOctet(pBuffer, pCapacity, (nUtf32 & 0x3F) | 0x80); + } + } + else + { + rtl_UnicodeToTextConverter aConverter + = rtl_createUnicodeToTextConverter(eCharset); + sal_Unicode aSrc[2]; + sal_Size nSrcSize = rtl::splitSurrogates(nUtf32, aSrc); + + char aDst[32]; // FIXME random value + sal_uInt32 nInfo; + sal_Size nConverted; + sal_Size nDstSize = rtl_convertUnicodeToText( + aConverter, nullptr, aSrc, nSrcSize, aDst, sizeof aDst, + RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR + | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR + | RTL_UNICODETOTEXT_FLAGS_FLUSH, + &nInfo, &nConverted); + assert((nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0); + rtl_destroyUnicodeToTextConverter(aConverter); + + if (nInfo == 0) + { + assert(nConverted == nSrcSize); // bad rtl_convertUnicodeToText + + for (sal_Size i = 0; i < nDstSize; ++i) + { + writeEscapeOctet(pBuffer, pCapacity, + static_cast< unsigned char >(aDst[i])); + // FIXME all octets are escaped, even if there is no need + } + } + else + { + if (bStrict) + return false; + + writeUcs4(pBuffer, pCapacity, nUtf32); + } + } + return true; +} + +struct Component +{ + sal_Unicode const * pBegin; + sal_Unicode const * pEnd; + + Component(): pBegin(nullptr), pEnd(nullptr) {} + + bool isPresent() const { return pBegin != nullptr; } + + sal_Int32 getLength() const; +}; + +sal_Int32 Component::getLength() const +{ + assert(isPresent()); // taking length of non-present component + return static_cast< sal_Int32 >(pEnd - pBegin); +} + +struct Components +{ + Component aScheme; + Component aAuthority; + Component aPath; + Component aQuery; + Component aFragment; +}; + +void parseUriRef(rtl_uString const * pUriRef, Components * pComponents) +{ + // This algorithm is liberal and accepts various forms of illegal input. + + sal_Unicode const * pBegin = pUriRef->buffer; + sal_Unicode const * pEnd = pBegin + pUriRef->length; + sal_Unicode const * pPos = pBegin; + + if (pPos != pEnd && rtl::isAsciiAlpha(*pPos)) + { + for (sal_Unicode const * p = pPos + 1; p != pEnd; ++p) + { + if (*p == ':') + { + pComponents->aScheme.pBegin = pBegin; + pComponents->aScheme.pEnd = ++p; + pPos = p; + break; + } + + if (!rtl::isAsciiAlphanumeric(*p) && *p != '+' && *p != '-' + && *p != '.') + { + break; + } + } + } + + if (pEnd - pPos >= 2 && pPos[0] == '/' && pPos[1] == '/') + { + pComponents->aAuthority.pBegin = pPos; + pPos += 2; + while (pPos != pEnd && *pPos != '/' && *pPos != '?' && *pPos != '#') + { + ++pPos; + } + + pComponents->aAuthority.pEnd = pPos; + } + + pComponents->aPath.pBegin = pPos; + while (pPos != pEnd && *pPos != '?' && * pPos != '#') + { + ++pPos; + } + + pComponents->aPath.pEnd = pPos; + + if (pPos != pEnd && *pPos == '?') + { + pComponents->aQuery.pBegin = pPos++; + while (pPos != pEnd && * pPos != '#') + { + ++pPos; + } + + pComponents->aQuery.pEnd = pPos; + } + + if (pPos != pEnd) + { + assert(*pPos == '#'); + pComponents->aFragment.pBegin = pPos; + pComponents->aFragment.pEnd = pEnd; + } +} + +void appendPath( + OUStringBuffer & buffer, sal_Int32 bufferStart, bool precedingSlash, + sal_Unicode const * pathBegin, sal_Unicode const * pathEnd) +{ + while (precedingSlash || pathBegin != pathEnd) + { + sal_Unicode const * p = pathBegin; + while (p != pathEnd && *p != '/') + { + ++p; + } + + std::size_t n = p - pathBegin; + if (n == 1 && pathBegin[0] == '.') + { + // input begins with "." -> remove from input (and done): + // i.e., !precedingSlash -> !precedingSlash + // input begins with "./" -> remove from input: + // i.e., !precedingSlash -> !precedingSlash + // input begins with "/." -> replace with "/" in input (and not yet + // done): + // i.e., precedingSlash -> precedingSlash + // input begins with "/./" -> replace with "/" in input: + // i.e., precedingSlash -> precedingSlash + } + else if (n == 2 && pathBegin[0] == '.' && pathBegin[1] == '.') + { + // input begins with ".." -> remove from input (and done): + // i.e., !precedingSlash -> !precedingSlash + // input begins with "../" -> remove from input + // i.e., !precedingSlash -> !precedingSlash + // input begins with "/.." -> replace with "/" in input, and shrink + // output (not yet done): + // i.e., precedingSlash -> precedingSlash + // input begins with "/../" -> replace with "/" in input, and shrink + // output: + // i.e., precedingSlash -> precedingSlash + if (precedingSlash) + { + buffer.truncate( + bufferStart + + std::max( + rtl_ustr_lastIndexOfChar_WithLength( + buffer.getStr() + bufferStart, + buffer.getLength() - bufferStart, '/'), + 0)); + } + } + else + { + if (precedingSlash) + buffer.append('/'); + + buffer.append(pathBegin, n); + precedingSlash = p != pathEnd; + } + pathBegin = p + (p == pathEnd ? 0 : 1); + } +} + +} + +sal_Bool const * SAL_CALL rtl_getUriCharClass(rtl_UriCharClass eCharClass) + SAL_THROW_EXTERN_C() +{ + static constexpr std::array aCharClass[] = { + rtl::createUriCharClass(u8""), // None + rtl::createUriCharClass( + u8"!$&'()*+,-./:;=?@[]_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // Uric + rtl::createUriCharClass( + u8"!$&'()*+,-.:;=?@_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // UricNoSlash + rtl::createUriCharClass( + u8"!$&'()*+,-.;=@_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // RelSegment + rtl::createUriCharClass( + u8"!$&'()*+,-.:;=@_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // RegName + rtl::createUriCharClass( + u8"!$&'()*+,-.:;=_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // Userinfo + rtl::createUriCharClass( + u8"!$&'()*+,-.:=@_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), // Pchar + rtl::createUriCharClass( + u8"!$&'()*+-./:?@_~" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")}; // UnoParamValue + + assert( + (eCharClass >= 0 + && (sal::static_int_cast< std::size_t >(eCharClass) + < SAL_N_ELEMENTS(aCharClass)))); // bad eCharClass + return aCharClass[eCharClass].data(); +} + +void SAL_CALL rtl_uriEncode(rtl_uString * pText, sal_Bool const * pCharClass, + rtl_UriEncodeMechanism eMechanism, + rtl_TextEncoding eCharset, rtl_uString ** pResult) + SAL_THROW_EXTERN_C() +{ + assert(!pCharClass[0x25]); // make sure the percent sign is encoded... + + sal_Unicode const * p = pText->buffer; + sal_Unicode const * pEnd = p + pText->length; + sal_Int32 nCapacity = 256; + rtl_uString_new_WithLength(pResult, nCapacity); + + while (p < pEnd) + { + rtl::uri::detail::EscapeType eType; + sal_uInt32 nUtf32 = rtl::uri::detail::readUcs4( + &p, pEnd, + (eMechanism == rtl_UriEncodeKeepEscapes + || eMechanism == rtl_UriEncodeCheckEscapes + || eMechanism == rtl_UriEncodeStrictKeepEscapes), + eCharset, &eType); + + switch (eType) + { + case rtl::uri::detail::EscapeNo: + if (isValid(pCharClass, nUtf32)) // implies nUtf32 <= 0x7F + { + writeUnicode(pResult, &nCapacity, + static_cast< sal_Unicode >(nUtf32)); + } + else if (!writeEscapeChar( + pResult, &nCapacity, nUtf32, eCharset, + (eMechanism == rtl_UriEncodeStrict + || eMechanism == rtl_UriEncodeStrictKeepEscapes))) + { + rtl_uString_new(pResult); + return; + } + break; + + case rtl::uri::detail::EscapeChar: + if (eMechanism == rtl_UriEncodeCheckEscapes + && isValid(pCharClass, nUtf32)) // implies nUtf32 <= 0x7F + { + writeUnicode(pResult, &nCapacity, + static_cast< sal_Unicode >(nUtf32)); + } + else if (!writeEscapeChar( + pResult, &nCapacity, nUtf32, eCharset, + (eMechanism == rtl_UriEncodeStrict + || eMechanism == rtl_UriEncodeStrictKeepEscapes))) + { + rtl_uString_new(pResult); + return; + } + break; + + case rtl::uri::detail::EscapeOctet: + writeEscapeOctet(pResult, &nCapacity, nUtf32); + break; + } + } + *pResult = rtl_uStringBuffer_makeStringAndClear(pResult, &nCapacity); +} + +void SAL_CALL rtl_uriDecode(rtl_uString * pText, + rtl_UriDecodeMechanism eMechanism, + rtl_TextEncoding eCharset, rtl_uString ** pResult) + SAL_THROW_EXTERN_C() +{ + switch (eMechanism) + { + case rtl_UriDecodeNone: + rtl_uString_assign(pResult, pText); + break; + + case rtl_UriDecodeToIuri: + eCharset = RTL_TEXTENCODING_UTF8; + [[fallthrough]]; + default: // rtl_UriDecodeWithCharset, rtl_UriDecodeStrict + { + sal_Unicode const * p = pText->buffer; + sal_Unicode const * pEnd = p + pText->length; + sal_Int32 nCapacity = pText->length; + rtl_uString_new_WithLength(pResult, nCapacity); + + while (p < pEnd) + { + rtl::uri::detail::EscapeType eType; + sal_uInt32 nUtf32 = rtl::uri::detail::readUcs4(&p, pEnd, true, eCharset, &eType); + switch (eType) + { + case rtl::uri::detail::EscapeChar: + if (nUtf32 <= 0x7F && eMechanism == rtl_UriDecodeToIuri) + { + writeEscapeOctet(pResult, &nCapacity, nUtf32); + break; + } + [[fallthrough]]; + + case rtl::uri::detail::EscapeNo: + writeUcs4(pResult, &nCapacity, nUtf32); + break; + + case rtl::uri::detail::EscapeOctet: + if (eMechanism == rtl_UriDecodeStrict) + { + rtl_uString_new(pResult); + return; + } + writeEscapeOctet(pResult, &nCapacity, nUtf32); + break; + } + } + + *pResult = rtl_uStringBuffer_makeStringAndClear( pResult, &nCapacity ); + } + break; + } +} + +sal_Bool SAL_CALL rtl_uriConvertRelToAbs(rtl_uString * pBaseUriRef, + rtl_uString * pRelUriRef, + rtl_uString ** pResult, + rtl_uString ** pException) + SAL_THROW_EXTERN_C() +{ + // Use the strict parser algorithm from RFC 3986, section 5.2, to turn the + // relative URI into an absolute one: + Components aRelComponents; + parseUriRef(pRelUriRef, &aRelComponents); + OUStringBuffer aBuffer(256); + + if (aRelComponents.aScheme.isPresent()) + { + aBuffer.append(aRelComponents.aScheme.pBegin, + aRelComponents.aScheme.getLength()); + + if (aRelComponents.aAuthority.isPresent()) + { + aBuffer.append(aRelComponents.aAuthority.pBegin, + aRelComponents.aAuthority.getLength()); + } + + appendPath( + aBuffer, aBuffer.getLength(), false, aRelComponents.aPath.pBegin, + aRelComponents.aPath.pEnd); + + if (aRelComponents.aQuery.isPresent()) + { + aBuffer.append(aRelComponents.aQuery.pBegin, + aRelComponents.aQuery.getLength()); + } + } + else + { + Components aBaseComponents; + parseUriRef(pBaseUriRef, &aBaseComponents); + if (!aBaseComponents.aScheme.isPresent()) + { + rtl_uString_assign( + pException, + (OUString( + "<" + OUString::unacquired(&pBaseUriRef) + + "> does not start with a scheme component") + .pData)); + return false; + } + + aBuffer.append(aBaseComponents.aScheme.pBegin, + aBaseComponents.aScheme.getLength()); + if (aRelComponents.aAuthority.isPresent()) + { + aBuffer.append(aRelComponents.aAuthority.pBegin, + aRelComponents.aAuthority.getLength()); + appendPath( + aBuffer, aBuffer.getLength(), false, + aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd); + + if (aRelComponents.aQuery.isPresent()) + { + aBuffer.append(aRelComponents.aQuery.pBegin, + aRelComponents.aQuery.getLength()); + } + } + else + { + if (aBaseComponents.aAuthority.isPresent()) + { + aBuffer.append(aBaseComponents.aAuthority.pBegin, + aBaseComponents.aAuthority.getLength()); + } + + if (aRelComponents.aPath.pBegin == aRelComponents.aPath.pEnd) + { + aBuffer.append(aBaseComponents.aPath.pBegin, + aBaseComponents.aPath.getLength()); + if (aRelComponents.aQuery.isPresent()) + { + aBuffer.append(aRelComponents.aQuery.pBegin, + aRelComponents.aQuery.getLength()); + } + else if (aBaseComponents.aQuery.isPresent()) + { + aBuffer.append(aBaseComponents.aQuery.pBegin, + aBaseComponents.aQuery.getLength()); + } + } + else + { + if (*aRelComponents.aPath.pBegin == '/') + { + appendPath( + aBuffer, aBuffer.getLength(), false, + aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd); + } + else if (aBaseComponents.aAuthority.isPresent() + && aBaseComponents.aPath.pBegin + == aBaseComponents.aPath.pEnd) + { + appendPath( + aBuffer, aBuffer.getLength(), true, + aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd); + } + else + { + sal_Int32 n = aBuffer.getLength(); + sal_Int32 i = rtl_ustr_lastIndexOfChar_WithLength( + aBaseComponents.aPath.pBegin, + aBaseComponents.aPath.getLength(), '/'); + + if (i >= 0) + { + appendPath( + aBuffer, n, false, aBaseComponents.aPath.pBegin, + aBaseComponents.aPath.pBegin + i); + } + + appendPath( + aBuffer, n, i >= 0, aRelComponents.aPath.pBegin, + aRelComponents.aPath.pEnd); + } + + if (aRelComponents.aQuery.isPresent()) + { + aBuffer.append(aRelComponents.aQuery.pBegin, + aRelComponents.aQuery.getLength()); + } + } + } + } + if (aRelComponents.aFragment.isPresent()) + { + aBuffer.append(aRelComponents.aFragment.pBegin, + aRelComponents.aFragment.getLength()); + } + + rtl_uString_assign(pResult, aBuffer.makeStringAndClear().pData); + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/ustrbuf.cxx b/sal/rtl/ustrbuf.cxx new file mode 100644 index 000000000..c91834cfa --- /dev/null +++ b/sal/rtl/ustrbuf.cxx @@ -0,0 +1,115 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include +#include "strimp.hxx" + +#if USE_SDT_PROBES +#define RTL_LOG_STRING_BITS 16 +#endif + +#include "strtmpl.hxx" + +void SAL_CALL rtl_uStringbuffer_newFromStr_WithLength( rtl_uString ** newStr, + const sal_Unicode * value, + sal_Int32 count) +{ + rtl::str::stringbuffer_newFromStr_WithLength(newStr, value, count); +} + +rtl_uString * SAL_CALL rtl_uStringBuffer_refReturn( rtl_uString * pThis ) +{ + RTL_LOG_STRING_NEW( pThis ); + rtl::str::acquire( pThis ); + return pThis; +} + +rtl_uString * SAL_CALL rtl_uStringBuffer_makeStringAndClear( rtl_uString ** ppThis, + sal_Int32 *nCapacity ) +{ + assert(ppThis); + assert(nCapacity); + // avoid an un-necessary atomic ref/unref pair + rtl_uString *pStr = *ppThis; + *ppThis = nullptr; + + rtl::str::new_(ppThis); + *nCapacity = 0; + + RTL_LOG_STRING_NEW( pStr ); + + return pStr; +} + +sal_Int32 SAL_CALL rtl_uStringbuffer_newFromStringBuffer( rtl_uString ** newStr, + sal_Int32 capacity, + rtl_uString * oldStr ) +{ + return rtl::str::stringbuffer_newFromStringBuffer(newStr, capacity, oldStr); +} + +void SAL_CALL rtl_uStringbuffer_ensureCapacity + (rtl_uString ** This, sal_Int32* capacity, sal_Int32 minimumCapacity) +{ + rtl::str::stringbuffer_ensureCapacity(This, capacity, minimumCapacity); +} + +void SAL_CALL rtl_uStringbuffer_insert( rtl_uString ** This, + sal_Int32 * capacity, + sal_Int32 offset, + const sal_Unicode * str, + sal_Int32 len) +{ + rtl::str::stringbuffer_insert(This, capacity, offset, str, len); +} + +void rtl_uStringbuffer_insertUtf32( + rtl_uString ** pThis, sal_Int32 * capacity, sal_Int32 offset, sal_uInt32 c) + SAL_THROW_EXTERN_C() +{ + sal_Unicode buf[2]; + sal_Int32 len = rtl::splitSurrogates(c, buf); + rtl::str::stringbuffer_insert(pThis, capacity, offset, buf, len); +} + +void SAL_CALL rtl_uStringbuffer_insert_ascii( /*inout*/rtl_uString ** This, + /*inout*/sal_Int32 * capacity, + sal_Int32 offset, + const char * str, + sal_Int32 len) +{ + rtl::str::stringbuffer_insert(This, capacity, offset, str, len); +} + +/************************************************************************* + * rtl_uStringbuffer_remove + */ +void SAL_CALL rtl_uStringbuffer_remove( rtl_uString ** This, + sal_Int32 start, + sal_Int32 len ) +{ + rtl::str::stringbuffer_remove(This, start, len); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/ustring.cxx b/sal/rtl/ustring.cxx new file mode 100644 index 000000000..6fc0e8707 --- /dev/null +++ b/sal/rtl/ustring.cxx @@ -0,0 +1,1324 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "hash.hxx" +#include "strimp.hxx" +#include +#include + +#include + +#if defined _WIN32 +// Temporary check to verify that the #pragma pack around rtl_uString is indeed cargo cult and can +// safely be removed: +static_assert(alignof (rtl_uString) == 4); +static_assert(sizeof (rtl_uString) == 12); +#endif + +/* ======================================================================= */ + +#if USE_SDT_PROBES +#define RTL_LOG_STRING_BITS 16 +#endif + +#include "strtmpl.hxx" + +/* ======================================================================= */ + +sal_Int32 rtl_ustr_indexOfAscii_WithLength( + sal_Unicode const * str, sal_Int32 len, + char const * subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfStr_WithLength(str, len, subStr, subLen); +} + +sal_Int32 rtl_ustr_lastIndexOfAscii_WithLength( + sal_Unicode const * str, sal_Int32 len, + char const * subStr, sal_Int32 subLen) SAL_THROW_EXTERN_C() +{ + assert(len >= 0); + assert(subLen >= 0); + if (subLen > 0 && subLen <= len) { + sal_Int32 i; + for (i = len - subLen; i >= 0; --i) { + if (rtl_ustr_asciil_reverseEquals_WithLength( + str + i, subStr, subLen)) + { + return i; + } + } + } + return -1; +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfFloat(sal_Unicode * pStr, float f) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfFP(pStr, f); +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfDouble(sal_Unicode * pStr, double d) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfFP(pStr, d); +} + +namespace { + +// Avoid -fsanitize=undefined warning e.g. "runtime error: value 1e+99 is +// outside the range of representable values of type 'float'" with Clang prior to +// "Treat the +// range of representable values of floating-point types as [-inf, +inf] not as [-max, +max]" +// (ENABLE_RUNTIME_OPTIMIZATIONS is an approximation for checking whether building is done without +// -fsanitize=undefined): +float doubleToFloat(double x) { +#if !defined __clang__ || __clang_major__ >= 9 || ENABLE_RUNTIME_OPTIMIZATIONS + return static_cast(x); +#else + return + x < -std::numeric_limits::max() + ? -std::numeric_limits::infinity() + : x > std::numeric_limits::max() + ? std::numeric_limits::infinity() + : static_cast(x); +#endif +} + +} + +float SAL_CALL rtl_ustr_toFloat(sal_Unicode const * pStr) SAL_THROW_EXTERN_C() +{ + assert(pStr); + return doubleToFloat(rtl_math_uStringToDouble(pStr, + pStr + rtl_ustr_getLength(pStr), + '.', 0, nullptr, nullptr)); +} + +double SAL_CALL rtl_ustr_toDouble(sal_Unicode const * pStr) SAL_THROW_EXTERN_C() +{ + assert(pStr); + return rtl_math_uStringToDouble(pStr, pStr + rtl_ustr_getLength(pStr), '.', + 0, nullptr, nullptr); +} + +/* ======================================================================= */ + +sal_Int32 SAL_CALL rtl_ustr_ascii_compare( const sal_Unicode* pStr1, + const char* pStr2 ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2), + rtl::str::CompareNormal(), rtl::str::noShortening); +} + +/* ----------------------------------------------------------------------- */ + +sal_Int32 SAL_CALL rtl_ustr_ascii_compare_WithLength( const sal_Unicode* pStr1, + sal_Int32 nStr1Len, + const char* pStr2 ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::null_terminated(pStr2), + rtl::str::CompareNormal(), rtl::str::noShortening); +} + +/* ----------------------------------------------------------------------- */ + +sal_Int32 SAL_CALL rtl_ustr_ascii_shortenedCompare_WithLength( const sal_Unicode* pStr1, + sal_Int32 nStr1Len, + const char* pStr2, + sal_Int32 nShortenedLength ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::null_terminated(pStr2), + rtl::str::CompareNormal(), nShortenedLength); +} + +/* ----------------------------------------------------------------------- */ + +sal_Int32 SAL_CALL rtl_ustr_asciil_reverseCompare_WithLength( const sal_Unicode* pStr1, + sal_Int32 nStr1Len, + const char* pStr2, + sal_Int32 nStr2Len ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::reverseCompare_WithLengths(pStr1, nStr1Len, pStr2, nStr2Len, + rtl::str::CompareNormal()); +} + +/* ----------------------------------------------------------------------- */ + +sal_Bool SAL_CALL rtl_ustr_asciil_reverseEquals_WithLength( const sal_Unicode* pStr1, + const char* pStr2, + sal_Int32 nStrLen ) + SAL_THROW_EXTERN_C() +{ + assert(nStrLen >= 0); + const sal_Unicode* pStr1Run = pStr1+nStrLen; + const char* pStr2Run = pStr2+nStrLen; + while ( pStr1 < pStr1Run ) + { + SAL_WARN_IF( !rtl::isAscii(static_cast(*pStr2)), "rtl.string", + "rtl_ustr_asciil_reverseEquals_WithLength - Found char > 127" ); + pStr1Run--; + pStr2Run--; + if( *pStr1Run != static_cast(*pStr2Run) ) + return false; + } + + return true; +} + +/* ----------------------------------------------------------------------- */ + +sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase( const sal_Unicode* pStr1, + const char* pStr2 ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +/* ----------------------------------------------------------------------- */ + +sal_Int32 SAL_CALL rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( const sal_Unicode* pStr1, + sal_Int32 nStr1Len, + const char* pStr2 ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::null_terminated(pStr2), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +sal_Int32 rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( + sal_Unicode const * first, sal_Int32 firstLen, + char const * second, sal_Int32 secondLen) SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(first, firstLen), + rtl::str::with_length(second, secondLen), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +/* ----------------------------------------------------------------------- */ + +sal_Int32 SAL_CALL rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( const sal_Unicode* pStr1, + sal_Int32 nStr1Len, + const char* pStr2, + sal_Int32 nShortenedLength ) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::null_terminated(pStr2), + rtl::str::CompareIgnoreAsciiCase(), nShortenedLength); +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_uString_newFromAscii( rtl_uString** ppThis, + const char* pCharStr ) + SAL_THROW_EXTERN_C() +{ + assert(ppThis); + sal_Int32 nLen = pCharStr ? rtl::str::getLength(pCharStr) : 0; + + if ( !nLen ) + { + rtl_uString_new( ppThis ); + return; + } + + if ( *ppThis ) + rtl_uString_release( *ppThis ); + + *ppThis = rtl_uString_ImplAlloc( nLen ); + OSL_ASSERT(*ppThis != nullptr); + if ( !(*ppThis) ) + return; + + sal_Unicode* pBuffer = (*ppThis)->buffer; + do + { + assert(static_cast(*pCharStr) < 0x80); // ASCII range + *pBuffer = *pCharStr; + pBuffer++; + pCharStr++; + } + while ( *pCharStr ); + + RTL_LOG_STRING_NEW( *ppThis ); +} + +void SAL_CALL rtl_uString_newFromCodePoints( + rtl_uString ** newString, sal_uInt32 const * codePoints, + sal_Int32 codePointCount) SAL_THROW_EXTERN_C() +{ + sal_Int32 n; + sal_Int32 i; + sal_Unicode * p; + assert(newString != nullptr); + assert((codePoints != nullptr || codePointCount == 0) && codePointCount >= 0); + if (codePointCount == 0) { + rtl_uString_new(newString); + return; + } + if (*newString != nullptr) { + rtl_uString_release(*newString); + } + n = codePointCount; + for (i = 0; i < codePointCount; ++i) { + OSL_ASSERT(rtl::isUnicodeCodePoint(codePoints[i])); + if (codePoints[i] >= 0x10000) { + ++n; + } + } + /* Builds on the assumption that sal_Int32 uses 32 bit two's complement + representation with wrap around (the necessary number of UTF-16 code + units will be no larger than 2 * SAL_MAX_INT32, represented as + sal_Int32 -2): */ + if (n < 0) { + // coverity[dead_error_begin] - assumes wrap around + *newString = nullptr; + return; + } + *newString = rtl_uString_ImplAlloc(n); + if (*newString == nullptr) { + return; + } + p = (*newString)->buffer; + for (i = 0; i < codePointCount; ++i) { + p += rtl::splitSurrogates(codePoints[i], p); + } + RTL_LOG_STRING_NEW( *newString ); +} + +void rtl_uString_newConcatAsciiL( + rtl_uString ** newString, rtl_uString * left, char const * right, + sal_Int32 rightLength) +{ + rtl::str::newConcat(newString, left, right, rightLength); +} + +void rtl_uString_newConcatUtf16L( + rtl_uString ** newString, rtl_uString * left, sal_Unicode const * right, + sal_Int32 rightLength) +{ + rtl::str::newConcat(newString, left, right, rightLength); +} + +/* ======================================================================= */ + +static int rtl_ImplGetFastUTF8UnicodeLen( const char* pStr, sal_Int32 nLen, bool * ascii ) +{ + int n; + const char* pEndStr; + + *ascii = true; + n = 0; + pEndStr = pStr+nLen; + while ( pStr < pEndStr ) + { + unsigned char c = static_cast(*pStr); + + if ( !(c & 0x80) ) + pStr++; + else + { + if ( (c & 0xE0) == 0xC0 ) + pStr += 2; + else if ( (c & 0xF0) == 0xE0 ) + pStr += 3; + else if ( (c & 0xF8) == 0xF0 ) + pStr += 4; + else if ( (c & 0xFC) == 0xF8 ) + pStr += 5; + else if ( (c & 0xFE) == 0xFC ) + pStr += 6; + else + pStr++; + *ascii = false; + } + + n++; + } + + return n; +} + +/* ----------------------------------------------------------------------- */ + +static void rtl_string2UString_status( rtl_uString** ppThis, + const char* pStr, + sal_Int32 nLen, + rtl_TextEncoding eTextEncoding, + sal_uInt32 nCvtFlags, + sal_uInt32 *pInfo ) +{ + OSL_ENSURE(nLen == 0 || rtl_isOctetTextEncoding(eTextEncoding), + "rtl_string2UString_status() - Wrong TextEncoding" ); + + if ( !nLen ) + { + rtl_uString_new( ppThis ); + if (pInfo != nullptr) { + *pInfo = 0; + } + } + else + { + if ( *ppThis ) + rtl_uString_release( *ppThis ); + + /* Optimization for US-ASCII */ + if ( eTextEncoding == RTL_TEXTENCODING_ASCII_US ) + { + sal_Unicode* pBuffer; + *ppThis = rtl_uString_ImplAlloc( nLen ); + if (*ppThis == nullptr) { + if (pInfo != nullptr) { + *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR | + RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + } + return; + } + pBuffer = (*ppThis)->buffer; + sal_Int32 nLenCopy(nLen); + const char *pStrCopy(pStr); + do + { + /* Check ASCII range */ + if (static_cast(*pStrCopy) > 127) + { + rtl_uString_release(*ppThis); + goto retry; // cancel loop - try again with the converter + } + + *pBuffer = *pStrCopy; + pBuffer++; + pStrCopy++; + nLenCopy--; + } + while (nLenCopy); + if (pInfo != nullptr) { + *pInfo = 0; + } + RTL_LOG_STRING_NEW( *ppThis ); + return; + } +retry: + { + rtl_uString* pTemp; + rtl_uString* pTemp2 = nullptr; + rtl_TextToUnicodeConverter hConverter; + sal_uInt32 nInfo; + sal_Size nSrcBytes; + sal_Size nDestChars; + sal_Size nNewLen; + + /* Optimization for UTF-8 - we try to calculate the exact length */ + /* For all other encoding we try the maximum - and reallocate + the buffer if needed */ + if ( eTextEncoding == RTL_TEXTENCODING_UTF8 ) + { + bool ascii; + nNewLen = rtl_ImplGetFastUTF8UnicodeLen( pStr, nLen, &ascii ); + /* Includes the string only ASCII, then we could copy + the buffer faster */ + if ( ascii ) + { + sal_Unicode* pBuffer; + *ppThis = rtl_uString_ImplAlloc( nLen ); + if (*ppThis == nullptr) + { + if (pInfo != nullptr) { + *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR | + RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + } + return; + } + pBuffer = (*ppThis)->buffer; + do + { + assert((static_cast(*pStr)) <= 127); + *pBuffer = *pStr; + pBuffer++; + pStr++; + nLen--; + } + while ( nLen ); + if (pInfo != nullptr) { + *pInfo = 0; + } + RTL_LOG_STRING_NEW( *ppThis ); + return; + } + } + else + nNewLen = nLen; + + nCvtFlags |= RTL_TEXTTOUNICODE_FLAGS_FLUSH; + hConverter = rtl_createTextToUnicodeConverter( eTextEncoding ); + + pTemp = rtl_uString_ImplAlloc( nNewLen ); + if (pTemp == nullptr) { + if (pInfo != nullptr) { + *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR | + RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + } + return; + } + nDestChars = rtl_convertTextToUnicode( hConverter, nullptr, + pStr, nLen, + pTemp->buffer, nNewLen, + nCvtFlags, + &nInfo, &nSrcBytes ); + + /* Buffer not big enough, try again with enough space */ + /* Shouldn't be the case, but if we get textencoding which + could results in more unicode characters we have this + code here. Could be the case for apple encodings */ + while ( nInfo & RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL ) + { + rtl_freeString( pTemp ); + nNewLen += 8; + pTemp = rtl_uString_ImplAlloc( nNewLen ); + if (pTemp == nullptr) { + if (pInfo != nullptr) { + *pInfo = RTL_TEXTTOUNICODE_INFO_ERROR | + RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + } + return; + } + nDestChars = rtl_convertTextToUnicode( hConverter, nullptr, + pStr, nLen, + pTemp->buffer, nNewLen, + nCvtFlags, + &nInfo, &nSrcBytes ); + } + + if (pInfo) + *pInfo = nInfo; + + /* Set the buffer to the correct size or if there is too + much overhead, reallocate to the correct size */ + if ( nNewLen > nDestChars+8 ) + { + pTemp2 = rtl_uString_ImplAlloc( nDestChars ); + } + if (pTemp2 != nullptr) + { + rtl::str::Copy(pTemp2->buffer, pTemp->buffer, nDestChars); + rtl_freeString(pTemp); + pTemp = pTemp2; + } + else + { + pTemp->length = nDestChars; + pTemp->buffer[nDestChars] = 0; + } + + rtl_destroyTextToUnicodeConverter( hConverter ); + *ppThis = pTemp; + + /* Results the conversion in an empty buffer - + create an empty string */ + if ( pTemp && !nDestChars ) + rtl_uString_new( ppThis ); + } + } + RTL_LOG_STRING_NEW( *ppThis ); +} + +void SAL_CALL rtl_string2UString( rtl_uString** ppThis, + const char* pStr, + sal_Int32 nLen, + rtl_TextEncoding eTextEncoding, + sal_uInt32 nCvtFlags ) SAL_THROW_EXTERN_C() +{ + assert(ppThis); + assert(nLen >= 0); + rtl_string2UString_status( ppThis, pStr, nLen, eTextEncoding, + nCvtFlags, nullptr ); +} + +/* ----------------------------------------------------------------------- */ + +namespace { + +enum StrLifecycle { + CANNOT_RETURN, + CAN_RETURN = 1 +}; + +} + +static oslMutex +getInternMutex() +{ + static oslMutex pPoolGuard = osl_createMutex(); + + return pPoolGuard; +} + +/* returns true if we found a dup in the pool */ +static void rtl_ustring_intern_internal( rtl_uString ** newStr, + rtl_uString * str, + StrLifecycle can_return ) +{ + oslMutex pPoolMutex; + + pPoolMutex = getInternMutex(); + + osl_acquireMutex( pPoolMutex ); + + *newStr = rtl_str_hash_intern (str, can_return); + + osl_releaseMutex( pPoolMutex ); + + RTL_LOG_STRING_INTERN_NEW(*newStr, str); + + if( can_return && *newStr != str ) + { /* we dupped, then found a match */ + rtl_freeString( str ); + } +} + +void SAL_CALL rtl_uString_intern( rtl_uString ** newStr, + rtl_uString * str) SAL_THROW_EXTERN_C() +{ + assert(newStr); + assert(str); + if (SAL_STRING_IS_INTERN(str)) + { + rtl::str::acquire(str); + *newStr = str; + } + else + { + rtl_uString *pOrg = *newStr; + *newStr = nullptr; + rtl_ustring_intern_internal( newStr, str, CANNOT_RETURN ); + if (pOrg) + rtl_uString_release (pOrg); + } +} + +static int rtl_canGuessUOutputLength( int len, rtl_TextEncoding eTextEncoding ) +{ + // FIXME: Maybe we should use a bit flag in the higher bits of the + // eTextEncoding value itself to determine the encoding type. But if we + // do, be sure to mask the value in certain places that expect the values + // to be numbered serially from 0 and up. One such place is + // Impl_getTextEncodingData(). + + switch ( eTextEncoding ) + { + // 1 to 1 (with no zero elements) + case RTL_TEXTENCODING_IBM_437: + case RTL_TEXTENCODING_IBM_850: + case RTL_TEXTENCODING_IBM_860: + case RTL_TEXTENCODING_IBM_861: + case RTL_TEXTENCODING_IBM_863: + case RTL_TEXTENCODING_IBM_865: + return len; + } + return 0; +} + +void SAL_CALL rtl_uString_internConvert( rtl_uString ** newStr, + const char * str, + sal_Int32 len, + rtl_TextEncoding eTextEncoding, + sal_uInt32 convertFlags, + sal_uInt32 * pInfo ) + SAL_THROW_EXTERN_C() +{ + assert(newStr); + assert(len >= 0); + rtl_uString *scratch; + + if (*newStr) + { + rtl_uString_release (*newStr); + *newStr = nullptr; + } + + if ( len < 256 ) + { // try various optimisations + sal_Int32 ulen; + if ( eTextEncoding == RTL_TEXTENCODING_ASCII_US ) + { + int i; + rtl_uString *pScratch; + pScratch = static_cast< rtl_uString * >( + alloca(sizeof (rtl_uString) + len * sizeof (sal_Unicode))); + for (i = 0; i < len; i++) + { + /* Check ASCII range */ + SAL_WARN_IF( !rtl::isAscii(static_cast(str[i])), "rtl.string", + "rtl_ustring_internConvert() - Found char > 127 and RTL_TEXTENCODING_ASCII_US is specified" ); + pScratch->buffer[i] = str[i]; + } + pScratch->length = len; + rtl_ustring_intern_internal( newStr, pScratch, CANNOT_RETURN ); + return; + } + if ( (ulen = rtl_canGuessUOutputLength(len, eTextEncoding)) != 0 ) + { + rtl_uString *pScratch; + rtl_TextToUnicodeConverter hConverter; + sal_Size nSrcBytes; + sal_uInt32 nInfo; + + pScratch = static_cast< rtl_uString * >( + alloca( + sizeof (rtl_uString) + ulen * sizeof (sal_Unicode))); + + hConverter = rtl_createTextToUnicodeConverter( eTextEncoding ); + rtl_convertTextToUnicode( + hConverter, nullptr, str, len, pScratch->buffer, ulen, convertFlags, &nInfo, &nSrcBytes ); + rtl_destroyTextToUnicodeConverter( hConverter ); + + if (pInfo) + *pInfo = nInfo; + + pScratch->length = ulen; + rtl_ustring_intern_internal( newStr, pScratch, CANNOT_RETURN ); + return; + } + + /* FIXME: we want a nice UTF-8 / alloca shortcut here */ + } + + scratch = nullptr; + rtl_string2UString_status( &scratch, str, len, eTextEncoding, convertFlags, + pInfo ); + if (!scratch) { + return; + } + rtl_ustring_intern_internal( newStr, scratch, CAN_RETURN ); +} + +void internRelease (rtl_uString *pThis) +{ + rtl_uString *pFree = nullptr; + if ( SAL_STRING_REFCOUNT( + osl_atomic_decrement( &(pThis->refCount) ) ) == 0) + { + RTL_LOG_STRING_INTERN_DELETE(pThis); + oslMutex pPoolMutex = getInternMutex(); + osl_acquireMutex( pPoolMutex ); + + rtl_str_hash_remove (pThis); + + /* May have been separately acquired */ + if ( SAL_STRING_REFCOUNT( + osl_atomic_increment( &(pThis->refCount) ) ) == 1 ) + { + /* we got the last ref */ + pFree = pThis; + } + else /* very unusual */ + { + internRelease (pThis); + } + + osl_releaseMutex( pPoolMutex ); + } + if (pFree) + rtl_freeString (pFree); +} + +sal_uInt32 SAL_CALL rtl_uString_iterateCodePoints( + rtl_uString const * string, sal_Int32 * indexUtf16, + sal_Int32 incrementCodePoints) +{ + sal_Int32 n; + sal_Unicode cu; + sal_uInt32 cp; + assert(string != nullptr && indexUtf16 != nullptr); + n = *indexUtf16; + assert(n >= 0 && n <= string->length); + while (incrementCodePoints < 0) { + assert(n > 0); + cu = string->buffer[--n]; + if (rtl::isLowSurrogate(cu) && n != 0 && + rtl::isHighSurrogate(string->buffer[n - 1])) + { + --n; + } + ++incrementCodePoints; + } + assert(n >= 0 && n < string->length); + cu = string->buffer[n]; + if (rtl::isHighSurrogate(cu) && string->length - n >= 2 && + rtl::isLowSurrogate(string->buffer[n + 1])) + { + cp = rtl::combineSurrogates(cu, string->buffer[n + 1]); + } else { + cp = cu; + } + while (incrementCodePoints > 0) { + assert(n < string->length); + cu = string->buffer[n++]; + if (rtl::isHighSurrogate(cu) && n != string->length && + rtl::isLowSurrogate(string->buffer[n])) + { + ++n; + } + --incrementCodePoints; + } + assert(n >= 0 && n <= string->length); + *indexUtf16 = n; + return cp; +} + +sal_Bool rtl_convertStringToUString( + rtl_uString ** target, char const * source, sal_Int32 length, + rtl_TextEncoding encoding, sal_uInt32 flags) SAL_THROW_EXTERN_C() +{ + assert(target); + assert(length >= 0); + sal_uInt32 info; + rtl_string2UString_status(target, source, length, encoding, flags, &info); + return (info & RTL_TEXTTOUNICODE_INFO_ERROR) == 0; +} + +void rtl_uString_newReplaceFirst( + rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, + rtl_uString const * to, sal_Int32 * index) SAL_THROW_EXTERN_C() +{ + assert(from != nullptr); + assert(to != nullptr); + rtl_uString_newReplaceFirstUtf16LUtf16L(newStr, str, from->buffer, from->length, to->buffer, + to->length, index); +} + +void rtl_uString_newReplaceFirstAsciiL( + rtl_uString ** newStr, rtl_uString * str, char const * from, + sal_Int32 fromLength, rtl_uString const * to, sal_Int32 * index) + SAL_THROW_EXTERN_C() +{ + assert(to != nullptr); + rtl_uString_newReplaceFirstAsciiLUtf16L(newStr, str, from, fromLength, to->buffer, to->length, + index); +} + +void rtl_uString_newReplaceFirstToAsciiL( + rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, + char const * to, sal_Int32 toLength, sal_Int32 * index) + SAL_THROW_EXTERN_C() +{ + assert(from != nullptr); + rtl_uString_newReplaceFirstUtf16LAsciiL(newStr, str, from->buffer, from->length, to, toLength, + index); +} + +void rtl_uString_newReplaceFirstAsciiLAsciiL( + rtl_uString ** newStr, rtl_uString * str, char const * from, + sal_Int32 fromLength, char const * to, sal_Int32 toLength, + sal_Int32 * index) SAL_THROW_EXTERN_C() +{ + assert(index != nullptr); + rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index); +} + +void rtl_uString_newReplaceFirstAsciiLUtf16L( + rtl_uString ** newStr, rtl_uString * str, char const * from, + sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength, + sal_Int32 * index) SAL_THROW_EXTERN_C() +{ + assert(index != nullptr); + rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index); +} + +void rtl_uString_newReplaceFirstUtf16LAsciiL( + rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from, + sal_Int32 fromLength, char const * to, sal_Int32 toLength, + sal_Int32 * index) SAL_THROW_EXTERN_C() +{ + assert(index != nullptr); + rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index); +} + +void rtl_uString_newReplaceFirstUtf16LUtf16L( + rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from, + sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength, + sal_Int32 * index) SAL_THROW_EXTERN_C() +{ + assert(index != nullptr); + rtl::str::newReplaceFirst(newStr, str, from, fromLength, to, toLength, *index); +} + +void rtl_uString_newReplaceAll( + rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, + rtl_uString const * to) SAL_THROW_EXTERN_C() +{ + rtl_uString_newReplaceAllFromIndex( newStr, str, from, to, 0 ); +} + +void rtl_uString_newReplaceAllFromIndex( + rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, + rtl_uString const * to, sal_Int32 fromIndex) SAL_THROW_EXTERN_C() +{ + assert(to != nullptr); + assert(fromIndex >= 0 && fromIndex <= str->length); + rtl_uString_newReplaceAllFromIndexUtf16LUtf16L(newStr, str, from->buffer, from->length, + to->buffer, to->length, fromIndex); +} + +void rtl_uString_newReplaceAllAsciiL( + rtl_uString ** newStr, rtl_uString * str, char const * from, + sal_Int32 fromLength, rtl_uString const * to) SAL_THROW_EXTERN_C() +{ + assert(to != nullptr); + rtl_uString_newReplaceAllAsciiLUtf16L(newStr, str, from, fromLength, to->buffer, to->length); +} + +void rtl_uString_newReplaceAllToAsciiL( + rtl_uString ** newStr, rtl_uString * str, rtl_uString const * from, + char const * to, sal_Int32 toLength) SAL_THROW_EXTERN_C() +{ + assert(from != nullptr); + rtl_uString_newReplaceAllUtf16LAsciiL(newStr, str, from->buffer, from->length, to, toLength); +} + +void rtl_uString_newReplaceAllAsciiLAsciiL( + rtl_uString ** newStr, rtl_uString * str, char const * from, + sal_Int32 fromLength, char const * to, sal_Int32 toLength) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0); +} + +void rtl_uString_newReplaceAllAsciiLUtf16L( + rtl_uString ** newStr, rtl_uString * str, char const * from, + sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0); +} + +void rtl_uString_newReplaceAllUtf16LAsciiL( + rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from, + sal_Int32 fromLength, char const * to, sal_Int32 toLength) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, 0); +} + +void rtl_uString_newReplaceAllUtf16LUtf16L( + rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from, + sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength) + SAL_THROW_EXTERN_C() +{ + rtl_uString_newReplaceAllFromIndexUtf16LUtf16L(newStr, str, from, fromLength, to, toLength, 0); +} + +void rtl_uString_newReplaceAllFromIndexUtf16LUtf16L( + rtl_uString ** newStr, rtl_uString * str, sal_Unicode const * from, + sal_Int32 fromLength, sal_Unicode const * to, sal_Int32 toLength, sal_Int32 fromIndex) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceAllFromIndex(newStr, str, from, fromLength, to, toLength, fromIndex); +} + +sal_Int32 SAL_CALL rtl_ustr_getLength(const sal_Unicode* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::getLength(pStr); +} + +sal_Int32 SAL_CALL rtl_ustr_compare(const sal_Unicode* pStr1, const sal_Unicode* pStr2) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2), + rtl::str::CompareNormal(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_ustr_compare_WithLength(const sal_Unicode* pStr1, sal_Int32 nStr1Len, + const sal_Unicode* pStr2, sal_Int32 nStr2Len) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), rtl::str::CompareNormal(), + rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_ustr_shortenedCompare_WithLength( + const sal_Unicode* pStr1, sal_Int32 nStr1Len, const sal_Unicode* pStr2, sal_Int32 nStr2Len, + sal_Int32 nShortenedLength) SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), rtl::str::CompareNormal(), + nShortenedLength); +} + +sal_Int32 SAL_CALL rtl_ustr_reverseCompare_WithLength(const sal_Unicode* pStr1, sal_Int32 nStr1Len, + const sal_Unicode* pStr2, sal_Int32 nStr2Len) + SAL_THROW_EXTERN_C() +{ + return rtl::str::reverseCompare_WithLengths(pStr1, nStr1Len, pStr2, nStr2Len, + rtl::str::CompareNormal()); +} + +sal_Int32 SAL_CALL rtl_ustr_compareIgnoreAsciiCase(const sal_Unicode* pStr1, + const sal_Unicode* pStr2) SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::null_terminated(pStr1), rtl::str::null_terminated(pStr2), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_ustr_compareIgnoreAsciiCase_WithLength(const sal_Unicode* pStr1, + sal_Int32 nStr1Len, + const sal_Unicode* pStr2, + sal_Int32 nStr2Len) + SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), + rtl::str::CompareIgnoreAsciiCase(), rtl::str::noShortening); +} + +sal_Int32 SAL_CALL rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength( + const sal_Unicode* pStr1, sal_Int32 nStr1Len, const sal_Unicode* pStr2, sal_Int32 nStr2Len, + sal_Int32 nShortenedLength) SAL_THROW_EXTERN_C() +{ + return rtl::str::compare(rtl::str::with_length(pStr1, nStr1Len), + rtl::str::with_length(pStr2, nStr2Len), + rtl::str::CompareIgnoreAsciiCase(), nShortenedLength); +} + +sal_Int32 SAL_CALL rtl_ustr_hashCode(const sal_Unicode* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::hashCode(pStr); +} + +sal_Int32 SAL_CALL rtl_ustr_hashCode_WithLength(const sal_Unicode* pStr, sal_Int32 nLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::hashCode_WithLength(pStr, nLen); +} + +sal_Int32 SAL_CALL rtl_ustr_indexOfChar(const sal_Unicode* pStr, sal_Unicode c) SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfChar(pStr, c); +} + +sal_Int32 SAL_CALL rtl_ustr_indexOfChar_WithLength(const sal_Unicode* pStr, sal_Int32 nLen, + sal_Unicode c) SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfChar_WithLength(pStr, nLen, c); +} + +sal_Int32 SAL_CALL rtl_ustr_lastIndexOfChar(const sal_Unicode* pStr, sal_Unicode c) + SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfChar(pStr, c); +} + +sal_Int32 SAL_CALL rtl_ustr_lastIndexOfChar_WithLength(const sal_Unicode* pStr, sal_Int32 nLen, + sal_Unicode c) SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfChar_WithLength(pStr, nLen, c); +} + +sal_Int32 SAL_CALL rtl_ustr_indexOfStr(const sal_Unicode* pStr, const sal_Unicode* pSubStr) + SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfStr(pStr, pSubStr); +} + +sal_Int32 SAL_CALL rtl_ustr_indexOfStr_WithLength(const sal_Unicode* pStr, sal_Int32 nStrLen, + const sal_Unicode* pSubStr, sal_Int32 nSubLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::indexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen); +} + +sal_Int32 SAL_CALL rtl_ustr_lastIndexOfStr(const sal_Unicode* pStr, const sal_Unicode* pSubStr) + SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfStr(pStr, pSubStr); +} + +sal_Int32 SAL_CALL rtl_ustr_lastIndexOfStr_WithLength(const sal_Unicode* pStr, sal_Int32 nStrLen, + const sal_Unicode* pSubStr, sal_Int32 nSubLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::lastIndexOfStr_WithLength(pStr, nStrLen, pSubStr, nSubLen); +} + +void SAL_CALL rtl_ustr_replaceChar(sal_Unicode* pStr, sal_Unicode cOld, sal_Unicode cNew) + SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::FromTo(cOld, cNew)); +} + +void SAL_CALL rtl_ustr_replaceChar_WithLength(sal_Unicode* pStr, sal_Int32 nLen, sal_Unicode cOld, + sal_Unicode cNew) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::FromTo(cOld, cNew)); +} + +void SAL_CALL rtl_ustr_toAsciiLowerCase(sal_Unicode* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiLower); +} + +void SAL_CALL rtl_ustr_toAsciiLowerCase_WithLength(sal_Unicode* pStr, sal_Int32 nLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiLower); +} + +void SAL_CALL rtl_ustr_toAsciiUpperCase(sal_Unicode* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::null_terminated(pStr), rtl::str::toAsciiUpper); +} + +void SAL_CALL rtl_ustr_toAsciiUpperCase_WithLength(sal_Unicode* pStr, sal_Int32 nLen) + SAL_THROW_EXTERN_C() +{ + return rtl::str::replaceChars(rtl::str::with_length(pStr, nLen), rtl::str::toAsciiUpper); +} + +sal_Int32 SAL_CALL rtl_ustr_trim(sal_Unicode* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::trim(pStr); +} + +sal_Int32 SAL_CALL rtl_ustr_trim_WithLength(sal_Unicode* pStr, sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + return rtl::str::trim_WithLength(pStr, nLen); +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfBoolean(sal_Unicode* pStr, sal_Bool b) SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfBoolean(pStr, b); +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfChar(sal_Unicode* pStr, sal_Unicode c) SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfChar(pStr, c); +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfInt32(sal_Unicode* pStr, sal_Int32 n, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfInt(pStr, n, nRadix); +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfInt64(sal_Unicode* pStr, sal_Int64 n, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfInt(pStr, n, nRadix); +} + +sal_Int32 SAL_CALL rtl_ustr_valueOfUInt64(sal_Unicode* pStr, sal_uInt64 n, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::valueOfInt(pStr, n, nRadix); +} + +sal_Bool SAL_CALL rtl_ustr_toBoolean(const sal_Unicode* pStr) SAL_THROW_EXTERN_C() +{ + return rtl::str::toBoolean(pStr); +} + +sal_Int32 SAL_CALL rtl_ustr_toInt32(const sal_Unicode* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +sal_Int64 SAL_CALL rtl_ustr_toInt64(const sal_Unicode* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +sal_Int64 SAL_CALL rtl_ustr_toInt64_WithLength(const sal_Unicode* pStr, sal_Int16 nRadix, + sal_Int32 nStrLength) SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::with_length(pStr, nStrLength), nRadix); +} + +sal_uInt32 SAL_CALL rtl_ustr_toUInt32(const sal_Unicode* pStr, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +sal_uInt64 SAL_CALL rtl_ustr_toUInt64(const sal_Unicode* pStr, sal_Int16 nRadix) + SAL_THROW_EXTERN_C() +{ + return rtl::str::toInt(rtl::str::null_terminated(pStr), nRadix); +} + +rtl_uString* rtl_uString_ImplAlloc(sal_Int32 nLen) +{ + return rtl::str::Alloc(nLen); +} + +void SAL_CALL rtl_uString_acquire(rtl_uString* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::acquire(pThis); +} + +void SAL_CALL rtl_uString_release(rtl_uString* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::release(pThis); +} + +void SAL_CALL rtl_uString_new(rtl_uString** ppThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::new_(ppThis); +} + +rtl_uString* SAL_CALL rtl_uString_alloc(sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + assert(nLen >= 0); + return rtl::str::Alloc(nLen); +} + +void SAL_CALL rtl_uString_new_WithLength(rtl_uString** ppThis, sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + rtl::str::new_WithLength(ppThis, nLen); +} + +void SAL_CALL rtl_uString_newFromString(rtl_uString** ppThis, const rtl_uString* pStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newFromString(ppThis, pStr); +} + +void SAL_CALL rtl_uString_newFromStr(rtl_uString** ppThis, const sal_Unicode* pCharStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newFromStr(ppThis, pCharStr); +} + +void SAL_CALL rtl_uString_newFromStr_WithLength(rtl_uString** ppThis, const sal_Unicode* pCharStr, + sal_Int32 nLen) SAL_THROW_EXTERN_C() +{ + rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen); +} + +void SAL_CALL rtl_uString_newFromSubString(rtl_uString** ppThis, const rtl_uString* pFrom, + sal_Int32 beginIndex, sal_Int32 count) + SAL_THROW_EXTERN_C() +{ + rtl::str::newFromSubString(ppThis, pFrom, beginIndex, count); +} + +// Used when creating from string literals. +void SAL_CALL rtl_uString_newFromLiteral(rtl_uString** ppThis, const char* pCharStr, sal_Int32 nLen, + sal_Int32 allocExtra) SAL_THROW_EXTERN_C() +{ + rtl::str::newFromStr_WithLength(ppThis, pCharStr, nLen, allocExtra); +} + +void SAL_CALL rtl_uString_assign(rtl_uString** ppThis, rtl_uString* pStr) SAL_THROW_EXTERN_C() +{ + rtl::str::assign(ppThis, pStr); +} + +sal_Int32 SAL_CALL rtl_uString_getLength(const rtl_uString* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::getLength(pThis); +} + +sal_Unicode* SAL_CALL rtl_uString_getStr(rtl_uString* pThis) SAL_THROW_EXTERN_C() +{ + return rtl::str::getStr(pThis); +} + +void SAL_CALL rtl_uString_newConcat(rtl_uString** ppThis, rtl_uString* pLeft, rtl_uString* pRight) + SAL_THROW_EXTERN_C() +{ + rtl::str::newConcat(ppThis, pLeft, pRight); +} + +void SAL_CALL rtl_uString_ensureCapacity(rtl_uString** ppThis, sal_Int32 size) SAL_THROW_EXTERN_C() +{ + rtl::str::ensureCapacity(ppThis, size); +} + +void SAL_CALL rtl_uString_newReplaceStrAt(rtl_uString** ppThis, rtl_uString* pStr, sal_Int32 nIndex, + sal_Int32 nCount, rtl_uString* pNewSubStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, pNewSubStr); +} + +void SAL_CALL rtl_uString_newReplaceStrAtUtf16L(rtl_uString** ppThis, rtl_uString* pStr, sal_Int32 nIndex, + sal_Int32 nCount, sal_Unicode const * subStr, sal_Int32 substrLen) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceStrAt(ppThis, pStr, nIndex, nCount, subStr, substrLen); +} + +void SAL_CALL rtl_uString_newReplace(rtl_uString** ppThis, rtl_uString* pStr, sal_Unicode cOld, + sal_Unicode cNew) SAL_THROW_EXTERN_C() +{ + rtl::str::newReplace(ppThis, pStr, cOld, cNew); +} + +void SAL_CALL rtl_uString_newToAsciiLowerCase(rtl_uString** ppThis, rtl_uString* pStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceChars(ppThis, pStr); +} + +void SAL_CALL rtl_uString_newToAsciiUpperCase(rtl_uString** ppThis, rtl_uString* pStr) + SAL_THROW_EXTERN_C() +{ + rtl::str::newReplaceChars(ppThis, pStr); +} + +void SAL_CALL rtl_uString_newTrim(rtl_uString** ppThis, rtl_uString* pStr) SAL_THROW_EXTERN_C() +{ + rtl::str::newTrim(ppThis, pStr); +} + +sal_Int32 SAL_CALL rtl_uString_getToken(rtl_uString** ppThis, rtl_uString* pStr, sal_Int32 nToken, + sal_Unicode cTok, sal_Int32 nIndex) SAL_THROW_EXTERN_C() +{ + return rtl::str::getToken(ppThis, pStr, nToken, cTok, nIndex); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/rtl/uuid.cxx b/sal/rtl/uuid.cxx new file mode 100644 index 000000000..130be1245 --- /dev/null +++ b/sal/rtl/uuid.cxx @@ -0,0 +1,173 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#include +#include +#include + +#define SWAP_INT32_TO_NETWORK(x)\ + { sal_uInt32 y = x;\ + sal_uInt8 *p = reinterpret_cast(&(x)); \ + p[0] = static_cast( ( y >> 24 ) & 0xff );\ + p[1] = static_cast( ( y >> 16 ) & 0xff );\ + p[2] = static_cast( ( y >> 8 ) & 0xff );\ + p[3] = static_cast( ( y ) & 0xff);\ + } +#define SWAP_INT16_TO_NETWORK(x)\ + { sal_uInt16 y = x;\ + sal_uInt8 *p = reinterpret_cast(&(x)); \ + p[0] = static_cast( ( y >> 8 ) & 0xff );\ + p[1] = static_cast( ( y ) & 0xff);\ + } + +#define SWAP_NETWORK_TO_INT16(x)\ + { sal_uInt16 y = x;\ + sal_uInt8 *p = reinterpret_cast(&(y));\ + x = ( ( (static_cast(p[0])) & 0xff) << 8 ) |\ + ( ( static_cast(p[1])) & 0xff);\ + } +#define SWAP_NETWORK_TO_INT32(x)\ + { sal_uInt32 y = x;\ + sal_uInt8 *p = reinterpret_cast(&(y)); \ + x = ( ( (static_cast(p[0])) & 0xff) << 24 ) |\ + ( ( (static_cast(p[1])) & 0xff) << 16 ) |\ + ( ( (static_cast(p[2])) & 0xff) << 8 ) |\ + ( ( static_cast(p[3])) & 0xff);\ + } + +namespace { + +struct UUID +{ + sal_uInt32 time_low; + sal_uInt16 time_mid; + sal_uInt16 time_hi_and_version; + sal_uInt8 clock_seq_hi_and_reserved; + sal_uInt8 clock_seq_low; + sal_uInt8 node[6]; +}; + +} + +static void write_v3( sal_uInt8 *pUuid ) +{ + UUID uuid; + // copy to avoid alignment problems + memcpy(&uuid, pUuid, 16); + + SWAP_NETWORK_TO_INT32(uuid.time_low); + SWAP_NETWORK_TO_INT16(uuid.time_mid); + SWAP_NETWORK_TO_INT16(uuid.time_hi_and_version); + + /* put in the variant and version bits */ + uuid.time_hi_and_version &= 0x0FFF; + uuid.time_hi_and_version |= (3 << 12); + uuid.clock_seq_hi_and_reserved &= 0x3F; + uuid.clock_seq_hi_and_reserved |= 0x80; + + SWAP_INT32_TO_NETWORK(uuid.time_low); + SWAP_INT16_TO_NETWORK(uuid.time_mid); + SWAP_INT16_TO_NETWORK(uuid.time_hi_and_version); + + memcpy(pUuid, &uuid, 16); +} + +extern "C" void SAL_CALL rtl_createUuid(sal_uInt8 *pTargetUUID , + SAL_UNUSED_PARAMETER const sal_uInt8 *, + SAL_UNUSED_PARAMETER sal_Bool) +{ + { + static rtlRandomPool pool = []() { + rtlRandomPool aPool = rtl_random_createPool(); + if (!aPool) + { + abort(); + // only possible way to signal failure here (rtl_createUuid + // being part of a fixed C API) + } + return aPool; + }(); + + osl::MutexGuard g(osl::Mutex::getGlobalMutex()); + if (rtl_random_getBytes(pool, pTargetUUID, 16) != rtl_Random_E_None) + { + abort(); + // only possible way to signal failure here (rtl_createUuid + // being part of a fixed C API) + } + } + // See ITU-T Recommendation X.667: + pTargetUUID[6] &= 0x0F; + pTargetUUID[6] |= 0x40; + pTargetUUID[8] &= 0x3F; + pTargetUUID[8] |= 0x80; +} + +extern "C" void SAL_CALL rtl_createNamedUuid(sal_uInt8 *pTargetUUID, + const sal_uInt8 *pNameSpaceUUID, + const rtl_String *pName ) +{ + rtlDigest digest = rtl_digest_createMD5(); + + rtl_digest_updateMD5(digest, pNameSpaceUUID, 16); + rtl_digest_updateMD5(digest, pName->buffer, pName->length); + + rtl_digest_getMD5(digest, pTargetUUID, 16); + rtl_digest_destroyMD5(digest); + + write_v3(pTargetUUID); +} + +extern "C" sal_Int32 SAL_CALL rtl_compareUuid(const sal_uInt8 *pUUID1, const sal_uInt8 *pUUID2) +{ + int i; + UUID u1; + UUID u2; + memcpy(&u1, pUUID1, 16 ); + memcpy(&u2, pUUID2, 16 ); + + SWAP_NETWORK_TO_INT32(u1.time_low); + SWAP_NETWORK_TO_INT16(u1.time_mid); + SWAP_NETWORK_TO_INT16(u1.time_hi_and_version); + + SWAP_NETWORK_TO_INT32(u2.time_low); + SWAP_NETWORK_TO_INT16(u2.time_mid); + SWAP_NETWORK_TO_INT16(u2.time_hi_and_version); + +#define CHECK(f1, f2) if (f1 != f2) return f1 < f2 ? -1 : 1; + CHECK(u1.time_low, u2.time_low); + CHECK(u1.time_mid, u2.time_mid); + CHECK(u1.time_hi_and_version, u2.time_hi_and_version); + CHECK(u1.clock_seq_hi_and_reserved, u2.clock_seq_hi_and_reserved); + CHECK(u1.clock_seq_low, u2.clock_seq_low); + for (i = 0; i < 6; i++) + { + if (u1.node[i] < u2.node[i]) + return -1; + if (u1.node[i] > u2.node[i]) + return 1; + } + return 0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/test/bootstrap b/sal/test/bootstrap new file mode 100644 index 000000000..c12ef1922 --- /dev/null +++ b/sal/test/bootstrap @@ -0,0 +1,82 @@ +#/bin/tcsh +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +setenv MYBOOTSTRAPTESTVALUE 0 +echo 1 +./testbootstrap 1 -env:MYBOOTSTRAPTESTVALUE=1 + +echo 2 +./testbootstrap.bin file + +echo 3 +./testbootstrap.Bin file + +echo 4 +./testbootstrap.exe file + +echo 5 +./testbootstrap.Exe file + +echo 6 +./testbootstrap 0 -env:INIFILENAME= + +unsetenv MYBOOTSTRAPTESTVALUE +echo 7 +./testbootstrap default -env:INIFILENAME= + +echo 8 +./testbootstrap default -env:MYBOOTSTRAPTESTVALUE2=1 -env:INIFILENAME= + +echo +echo "macro tests" +echo + +# simple macro expansion +echo 9 +./testbootstrap _first_second_third_ -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE='_${FIRST}_${SECOND}_${THIRD}_' + +# simple quoting +echo 10 +./testbootstrap '_${FIRST}_${SECOND}_${THIRD}_' -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE='_\$\{FIRST\}_\$\{SECOND\}_\$\{THIRD\}_' + +# simple ini access +echo 11 +./testbootstrap TheKeysValue -env:'MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheSection:TheKey}' + +# ini access with simple macro expansion +echo 12 +./testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini -env:SECTIONNAME=TheSection -env:KEYNAME=TheKey \ + -env:'MYBOOTSTRAPTESTVALUE=${$ININAME:$SECTIONNAME:$KEYNAME}' + +# ini access with complex macro expansion +echo 13 +./testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini \ + -env:'MYBOOTSTRAPTESTVALUE=${$ININAME:${$ININAME:SecondSection:IndirectSection}:${$ININAME:SecondSection:IndirectKey}}' + +# test no infinite recursion +echo 14 +./testbootstrap "***RECURSION DETECTED***" -env:'MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE' + +# test unicode +echo 15 +./testbootstrap AAABBBCCC000 -env:'MYBOOTSTRAPTESTVALUE=\u0041\u0041\u0041\u0042\u0042\u0042\u0043\u0043\u0043\u0030\u0030\u0030' + +echo +echo "bootstrap test finished" +echo diff --git a/sal/test/bootstrap.bat b/sal/test/bootstrap.bat new file mode 100755 index 000000000..f94696ba9 --- /dev/null +++ b/sal/test/bootstrap.bat @@ -0,0 +1,79 @@ +rem +rem This file is part of the LibreOffice project. +rem +rem This Source Code Form is subject to the terms of the Mozilla Public +rem License, v. 2.0. If a copy of the MPL was not distributed with this +rem file, You can obtain one at http://mozilla.org/MPL/2.0/. +rem +rem This file incorporates work covered by the following license notice: +rem +rem Licensed to the Apache Software Foundation (ASF) under one or more +rem contributor license agreements. See the NOTICE file distributed +rem with this work for additional information regarding copyright +rem ownership. The ASF licenses this file to you under the Apache +rem License, Version 2.0 (the "License"); you may not use this file +rem except in compliance with the License. You may obtain a copy of +rem the License at http://www.apache.org/licenses/LICENSE-2.0 . +rem +@echo off +set MYBOOTSTRAPTESTVALUE=0 +echo 1 +.\testbootstrap 1 -env:MYBOOTSTRAPTESTVALUE=1 + +echo 2 +.\testbootstrap.exe file + +echo 3 +.\testbootstrap.Exe file + +echo 4 +.\testbootstrap.bin file + +echo 5 +.\testbootstrap.Bin file + +echo 6 +.\testbootstrap 0 -env:INIFILENAME= + +echo 7 +set MYBOOTSTRAPTESTVALUE= +rem simply ignore the file... +.\testbootstrap default -env:INIFILENAME= + +echo 8 +.\testbootstrap default -env:MYBOOTSTRAPTESTVALUE2=1 -env:INIFILENAME= + +echo +echo "macro tests" +echo + +rem simple macro expansion +echo 9 +.\testbootstrap _first_second_third_ -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE=_${FIRST}_${SECOND}_${THIRD}_ + +rem simple quoting +echo 10 +.\testbootstrap _${FIRST}_${SECOND}_${THIRD}_ -env:FIRST=first -env:SECOND=second -env:THIRD=third -env:MYBOOTSTRAPTESTVALUE=_\$\{FIRST\}_\$\{SECOND\}_\$\{THIRD\}_ + +rem simple ini access +echo 11 +.\testbootstrap TheKeysValue -env:MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheSection:TheKey} + +rem ini access with simple macro expansion +echo 12 +.\testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini -env:SECTIONNAME=TheSection -env:KEYNAME=TheKey -env:MYBOOTSTRAPTESTVALUE=${$ININAME:$SECTIONNAME:$KEYNAME} + +rem ini access with complex macro expansion +echo 13 +.\testbootstrap TheKeysValue -env:ININAME=./bootstraptest.ini -env:MYBOOTSTRAPTESTVALUE=${$ININAME:${$ININAME:SecondSection:IndirectSection}:${$ININAME:SecondSection:IndirectKey}} + +rem test no infinite recursion +echo 14 +.\testbootstrap "***RECURSION DETECTED***" -env:MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE + +rem test unicode +echo 15 +.\testbootstrap AAABBBCCC000 -env:MYBOOTSTRAPTESTVALUE=\u0041\u0041\u0041\u0042\u0042\u0042\u0043\u0043\u0043\u0030\u0030\u0030 + + +@echo bootstrap test finished diff --git a/sal/test/bootstrap.pl b/sal/test/bootstrap.pl new file mode 100644 index 000000000..5dde94f80 --- /dev/null +++ b/sal/test/bootstrap.pl @@ -0,0 +1,251 @@ +: +eval 'exec perl -wS $0 ${1+"$@"}' + if 0; +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + + +my $rc; +my $state = 1; +my $comment = ""; + +$ENV{MYBOOTSTRAPTESTVALUE}=0; + +$rc = system "./testbootstrap", 1, "-env:MYBOOTSTRAPTESTVALUE=1"; +if (!$rc) { + $comment = $comment . "commandline over environment test not passed\n"; + $state = 0; +} + +$rc = system "./testbootstrap", "0", "-env:INIFILENAME="; +if (!$rc) { + $comment = $comment . "exe custom ini test not passed\n"; + $state = 0; +} + +delete $ENV{MYBOOTSTRAPTESTVALUE}; + +$rc = system "./testbootstrap.bin", "file"; +if (!$rc) { + $comment = $comment . "extensions cut test not passed with .bin\n"; + $state = 0; +} + +$rc = system "./testbootstrap.Bin", "file"; +if (!$rc) { + $comment = $comment . "extensions cut test not passed with .Bin\n"; + $state = 0; +} + +$rc = system "./testbootstrap.exe", "file"; +if (!$rc) { + $comment = $comment . "extensions cut test not passed with .exe\n"; + $state = 0; +} + +$rc = system "./testbootstrap.Exe", "file"; +if (!$rc) { + $comment = $comment . "extensions cut test not passed with .Exe\n"; + $state = 0; +} + +if ($ENV{OS} eq "WNT") { + $rc = system "./testbootstrap", "auxaux", "-env:iniName=ini.ini", '-env:MYBOOTSTRAPTESTVALUE=$CUSTOMINIVALUE'; +} +else { + $rc = system "./testbootstrap", "auxaux", "-env:iniName=inirc", '-env:MYBOOTSTRAPTESTVALUE=$CUSTOMINIVALUE'; +} +if (!$rc) { + $comment = $comment . "custom ini test not passed\n"; + $state = 0; +} + +if ($ENV{OS} eq "WNT") { + $comment = $comment . '$SYSUSERHOME not testable under windows' . "\n"; +} +else { + $rc = system "./testbootstrap", "file://$ENV{HOME}", '-env:MYBOOTSTRAPTESTVALUE=$SYSUSERHOME'; + if (!$rc) { + $comment = $comment . '$SYSUSERHOME test not passed' . "\n"; + $state = 0; + } +} + +if ($ENV{OS} eq "WNT") { + $comment = $comment . '$SYSUSERCONFIG' . " not testable under windows\n"; +} +else { + $rc = system "./testbootstrap", "file://$ENV{HOME}", '-env:MYBOOTSTRAPTESTVALUE=$SYSUSERCONFIG'; + if (!$rc) { + $comment = $comment . '$SYSUSERCONFIG test not passed' . "\n"; + $state = 0; + } +} + +if ($ENV{OS} eq "WNT") { + $comment = $comment . '$SYSBINDIR' . " not testable under windows\n"; +} +else { + $rc = system "./testbootstrap", "file://$ENV{PWD}", '-env:MYBOOTSTRAPTESTVALUE=$SYSBINDIR'; + if (!$rc) { + $comment = $comment . '$SYSBINDIR test not passed' . "\n"; + $state = 0; + } +} + +if ($ENV{OS} eq "WNT") { + $rc = system "./testbootstrap", "inherited_value", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_VALUE', "-env:iniName=ini.ini"; +} +else { + $rc = system "./testbootstrap", "inherited_value", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_VALUE', "-env:iniName=inirc"; +} +if (!$rc) { + $comment = $comment . "inherited value not passed\n"; + $state = 0; +} + +if ($ENV{OS} eq "WNT") { + $rc = system "./testbootstrap", "not_overwritten", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_OVERWRITTEN_VALUE', "-env:iniName=ini.ini"; +} +else { + $rc = system "./testbootstrap", "not_overwritten", '-env:MYBOOTSTRAPTESTVALUE=$INHERITED_OVERWRITTEN_VALUE', "-env:iniName=inirc"; +} +if (!$rc) { + $comment = $comment . "inherited overwritten value not passed\n"; + $state = 0; +} + + +$rc = system "./testbootstrap", "defaultvalue", "-env:INIFILENAME=", "-env:Default=defaultvalue", "-env:USEDEFAULT=1"; +if (!$rc) { + $comment = $comment . "default test from parameter not passed\n"; + $state = 0; +} + +if ($ENV{OS} eq "WNT") { + $rc = system "./testbootstrap", "defaultValue", "-env:iniName=default.ini", "-env:INIFILENAME=", "-env:USEDEFAULT=1"; +} +else { + $rc = system "./testbootstrap", "defaultValue", "-env:iniName=defaultrc", "-env:INIFILENAME=", "-env:USEDEFAULT=1"; +} +if (!$rc) { + $comment = $comment . "default test from custom ini not passed\n"; + $state = 0; +} + +# simple macro expansion +$rc = system "./testbootstrap", + "_first_second_third_", + "-env:FIRST=first", + "-env:SECOND=second", + "-env:THIRD=third", + '-env:MYBOOTSTRAPTESTVALUE=_${FIRST}_${SECOND}_${THIRD}_'; +if (!$rc) { + $comment = $comment . "simple macro expansion test not passed\n"; + $state = 0; +} + +# simple quoting +$rc = system "./testbootstrap", + '_${FIRST}_${SECOND}_${THIRD}_', + "-env:FIRST=first", + "-env:SECOND=second", + "-env:THIRD=third", + '-env:MYBOOTSTRAPTESTVALUE=_\$\{FIRST\}_\$\{SECOND\}_\$\{THIRD\}_'; +if (!$rc) { + $comment = $comment . "simple macro quoting test not passed\n"; + $state = 0; +} + +# simple ini access +$rc = system "./testbootstrap", + "TheIniKeysValue", + '-env:MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheIniKey}'; +if (!$rc) { + $comment = $comment . "simple macro ini access test not passed\n"; + $state = 0; +} + +# simple profile access +$rc = system "./testbootstrap", + "TheKeysValue", + '-env:MYBOOTSTRAPTESTVALUE=${./bootstraptest.ini:TheSection:TheKey}'; +if (!$rc) { + $comment = $comment . "simple macro profile access test not passed\n"; + $state = 0; +} + +# profile access with simple macro expansion +$rc = system "./testbootstrap", + "TheKeysValue", + "-env:ININAME=./bootstraptest.ini", + "-env:SECTIONNAME=TheSection", + "-env:KEYNAME=TheKey", + '-env:MYBOOTSTRAPTESTVALUE=${$ININAME:$SECTIONNAME:$KEYNAME}'; +if (!$rc) { + $comment = $comment . "profile access with simple macro expansion test not passed\n"; + $state = 0; +} + +# profile access with complex macro expansion +$rc = system "./testbootstrap", + "TheKeysValue", + "-env:ININAME=./bootstraptest.ini", + '-env:MYBOOTSTRAPTESTVALUE=${$ININAME:${$ININAME:SecondSection:IndirectSection}:${$ININAME:SecondSection:IndirectKey}}'; +if (!$rc) { + $comment = $comment . "profile access with complex macro expansion test not passed\n"; + $state = 0; +} + +# test no infinite recursion +if ($ENV{OS} eq "WNT") { + $rc = system "./testbootstrap", + '"***RECURSION DETECTED***"', + '-env:MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE'; +} +else { + $rc = system "./testbootstrap", + '***RECURSION DETECTED***', + '-env:MYBOOTSTRAPTESTVALUE=$MYBOOTSTRAPTESTVALUE'; +} +if (!$rc) { + $comment = $comment . "no infinite recursion test not passed\n"; + $state = 0; +} + +# test unicode +$rc = system "./testbootstrap", + "AAABBBCCC000", + '-env:MYBOOTSTRAPTESTVALUE=\u0041\u0041\u0041\u0042\u0042\u0042\u0043\u0043\u0043\u0030\u0030\u0030'; +if (!$rc) { + $comment = $comment . "unicode not passed\n"; + $state = 0; +} + +print "**************************\n"; +if($state) { + print "****** tests passed ******\n"; +} +else { + print "**** tests NOT passed ****\n"; + print "Comment:\n", $comment, "\n"; +} +print "**************************\n"; + + + diff --git a/sal/test/bootstraptest.ini b/sal/test/bootstraptest.ini new file mode 100644 index 000000000..6be9615e2 --- /dev/null +++ b/sal/test/bootstraptest.ini @@ -0,0 +1,28 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +TheIniKey=TheIniKeysValue + +[TheSection] +TheKey=TheKeysValue + +[SecondSection] +IndirectSection=TheSection +IndirectKey=TheKey + + diff --git a/sal/test/makefile.mk b/sal/test/makefile.mk new file mode 100644 index 000000000..25aa5dd5f --- /dev/null +++ b/sal/test/makefile.mk @@ -0,0 +1,145 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +PRJ=.. + +PRJNAME=sal +TARGET=saltest +TARGETTYPE=CUI +LIBTARGET=NO +USE_LDUMP2=TRUE +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +CFLAGS+= $(LFS_CFLAGS) +CXXFLAGS+= $(LFS_CFLAGS) + +# ------------------------------------------------------------------ + +.IF "$(OS)"=="WNT" +BOOTSTRAPSCRIPT=bootstrap.bat +BOOTSTRAPINI=testbootstrap.ini +MY_SCRIPTCAT=cat +.ELSE +BOOTSTRAPSCRIPT=bootstrap +BOOTSTRAPINI=testbootstraprc +MY_SCRIPTCAT=tr -d "\015" < +.ENDIF + +APP2OBJS = $(OBJ)$/testbootstrap.obj + +OBJFILES= \ + $(APP2OBJS) + +APP2TARGET = testbootstrap +APP2STDLIBS = $(SALLIB) + +APP3OBJS = $(OBJ)$/test_salmain.obj +APP3TARGET = test_salmain +APP3STDLIBS = $(SALLIB) + +APP4OBJS = $(OBJ)$/test_salmainwithargs.obj +APP4TARGET = test_salmainwithargs +APP4STDLIBS = $(SALLIB) + + +# --- Targets ------------------------------------------------------ + +.IF "$(depend)" == "" +ALL : ALLTAR \ + $(BIN)$/$(BOOTSTRAPSCRIPT) \ + $(BIN)$/$(BOOTSTRAPINI) \ + $(BIN)$/bootstraptest.ini \ + $(BIN)$/$(APP2TARGET).bin \ + $(BIN)$/$(APP2TARGET).Bin \ + $(BIN)$/$(APP2TARGET).Exe \ + $(BIN)$/bootstrap.pl + + +.IF "$(OS)"!="WNT" +ALL: $(BIN)$/$(APP2TARGET).exe \ + $(BIN)$/inirc \ + $(BIN)$/defaultrc + +$(BIN)$/$(APP2TARGET).exe : $(APP2TARGETN) + cp $(APP2TARGETN) $@ + +$(BIN)$/inirc: + echo "CUSTOMINIVALUE=auxaux" > $@ + echo "INHERITED_OVERWRITTEN_VALUE=inherited_overwritten_value" >> $@ + +$(BIN)$/defaultrc: + echo "Default=defaultValue" > $@ + +.ELSE + +ALL: $(BIN)$/ini.ini \ + $(BIN)$/default.ini + +$(BIN)$/ini.ini: + echo CUSTOMINIVALUE=auxaux > $@ + echo INHERITED_OVERWRITTEN_VALUE=inherited_overwritten_value >> $@ + + +$(BIN)$/default.ini: + echo Default=defaultValue > $@ + +.ENDIF + +$(BIN)$/bootstrap.pl: + cp bootstrap.pl $@ + +$(BIN)$/$(APP2TARGET).bin : $(APP2TARGETN) + cp $(APP2TARGETN) $@ + +$(BIN)$/$(APP2TARGET).Bin : $(APP2TARGETN) + cp $(APP2TARGETN) $@ + +$(BIN)$/$(APP2TARGET).Exe : $(APP2TARGETN) + cp $(APP2TARGETN) $@ + +.ELSE +ALL: ALLDEP +.ENDIF + +.INCLUDE : target.mk + + +$(BIN)$/$(BOOTSTRAPSCRIPT) : $(BOOTSTRAPSCRIPT) + $(MY_SCRIPTCAT) $(BOOTSTRAPSCRIPT) > $@ +.IF "$(OS)"!="WNT" + chmod ug+x $@ +.ENDIF + +$(BIN)$/$(BOOTSTRAPINI) : $(APP2TARGET).ini + $(MY_SCRIPTCAT) $(APP2TARGET).ini > $@ + +$(BIN)$/bootstraptest.ini : bootstraptest.ini + $(MY_SCRIPTCAT) bootstraptest.ini > $@ + + +# --- SO2-Filter-Datei --- + +$(MISC)$/tsl$(DLLPOSTFIX).flt: + @echo ------------------------------ + @echo Making: $@ + @echo WEP>$@ + @echo LIBMAIN>>$@ + @echo LibMain>>$@ diff --git a/sal/test/test_salmain.cxx b/sal/test/test_salmain.cxx new file mode 100644 index 000000000..93984e582 --- /dev/null +++ b/sal/test/test_salmain.cxx @@ -0,0 +1,31 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "sal/main.h" + +#include + +SAL_IMPLEMENT_MAIN() +{ + fprintf(stderr, "success!\n"); + + return 0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/test/test_salmainwithargs.cxx b/sal/test/test_salmainwithargs.cxx new file mode 100644 index 000000000..405cd91c2 --- /dev/null +++ b/sal/test/test_salmainwithargs.cxx @@ -0,0 +1,31 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "sal/main.h" + +#include + +SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) +{ + fprintf(stderr, "argc: %i argv: %p - success!\n", argc, argv); + + return 0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/test/testbootstrap.cxx b/sal/test/testbootstrap.cxx new file mode 100644 index 000000000..9ae34f78c --- /dev/null +++ b/sal/test/testbootstrap.cxx @@ -0,0 +1,116 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include +#include + +#include +#include + +int main( int argc, char *argv[] ) +{ + osl_setCommandArgs (argc, argv); + + sal_Int32 nCount = rtl_getAppCommandArgCount(); + +#if OSL_DEBUG_LEVEL > 0 + OUStringBuffer debugBuff; + debugBuff.append("rtl-commandargs (").append(nCount).append(")real args: ").append(argc); + for( sal_Int32 i = 0 ; i < nCount ; i ++ ) + { + OUString data; + rtl_getAppCommandArg( i , &(data.pData) ); + OString o = OUStringToOString( data, RTL_TEXTENCODING_ASCII_US ); + debugBuff.append(" ").append(o); + } + SAL_INFO("sal.test", debugBuff.toString()); +#endif + + if( nCount == 0 ) + { + printf( "usage : testbootstrap \n" ); + exit( 1 ); + } + + OUString iniName; + Bootstrap::get(OUString("iniName"), iniName, OUString()); + + SAL_INFO_IF(!iniName.isEmpty(), "sal.test", "using ini: " << iniName); + + Bootstrap bootstrap(iniName); + + OUString name( "MYBOOTSTRAPTESTVALUE" ); + OUString myDefault("$Default"); + + OUString value; + sal_Bool useDefault; + + OUString aDummy; + useDefault = bootstrap.getFrom(OUString("USEDEFAULT"), aDummy); + + sal_Bool result = sal_False; + sal_Bool found = sal_True; + + if(useDefault) + bootstrap.getFrom(name, value, myDefault); + + else + found = bootstrap.getFrom(name, value); + + if(found) + { + OUString para(OUString::createFromAscii( argv[1] )); + + result = para == value; + + if(!result) + { + OString para_tmp = OUStringToOString(para, RTL_TEXTENCODING_ASCII_US); + OString value_tmp = OUStringToOString(value, RTL_TEXTENCODING_ASCII_US); + + fprintf(stderr, "para(%s) != value(%s)\n", para_tmp.getStr(), value_tmp.getStr()); + } + } + else + fprintf(stderr, "bootstrap parameter couldn't be found\n"); + + // test the default case + name = "no_one_has_set_this_name"; + OSL_ASSERT( ! bootstrap.getFrom( name, value ) ); + result = result && !bootstrap.getFrom( name, value ); + + myDefault = "1"; + OUString myDefault2 = "2"; + + bootstrap.getFrom( name, value, myDefault ); + OSL_ASSERT( value == myDefault ); + result = result && (value == myDefault); + + bootstrap.getFrom( name, value, myDefault2 ); + OSL_ASSERT( value == myDefault2 ); + result = result && (value == myDefault2); + + return result; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/test/testbootstrap.ini b/sal/test/testbootstrap.ini new file mode 100644 index 000000000..2cf7b667c --- /dev/null +++ b/sal/test/testbootstrap.ini @@ -0,0 +1,4 @@ +MYBOOTSTRAPTESTVALUE=file +INHERITED_VALUE=inherited_value +INHERITED_OVERWRITTEN_VALUE=not_overwritten + diff --git a/sal/textenc/context.cxx b/sal/textenc/context.cxx new file mode 100644 index 000000000..7d7e75d3b --- /dev/null +++ b/sal/textenc/context.cxx @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "context.hxx" + +void* ImplCreateUnicodeToTextContext() +{ + ImplUnicodeToTextContext* pContext = new ImplUnicodeToTextContext; + pContext->m_nHighSurrogate = 0; + return pContext; +} + +void ImplResetUnicodeToTextContext(void* pContext) +{ + if (pContext) + static_cast(pContext)->m_nHighSurrogate = 0; +} + +void ImplDestroyUnicodeToTextContext(void* pContext) +{ + delete static_cast(pContext); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/context.hxx b/sal/textenc/context.hxx new file mode 100644 index 000000000..11684cf49 --- /dev/null +++ b/sal/textenc/context.hxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include + +struct ImplUnicodeToTextContext +{ + sal_Unicode m_nHighSurrogate; +}; + +void* ImplCreateUnicodeToTextContext(); + +void ImplResetUnicodeToTextContext(void* pContext); + +void ImplDestroyUnicodeToTextContext(void* pContext); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertadobe.tab b/sal/textenc/convertadobe.tab new file mode 100644 index 000000000..5ae3c2d63 --- /dev/null +++ b/sal/textenc/convertadobe.tab @@ -0,0 +1,320 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "context.hxx" +#include "convertsinglebytetobmpunicode.hxx" +#include "tenchelp.hxx" + +namespace { + +// RTL_TEXTENCODING_ADOBE_STANDARD is based on +// revision +// "v0.2, 30 March 1999". + +rtl::textenc::BmpUnicodeToSingleByteRange const unicodeToAdobeStandardEncoding[] += { { 0x0020, 0x0026 - 0x0020, 0x20 }, { 0x0027, 0x0027 - 0x0027, 0xA9 }, + { 0x0028, 0x005F - 0x0028, 0x28 }, { 0x0060, 0x0060 - 0x0060, 0xC1 }, + { 0x0061, 0x007E - 0x0061, 0x61 }, { 0x00A0, 0x00A0 - 0x00A0, 0x20 }, + { 0x00A1, 0x00A3 - 0x00A1, 0xA1 }, { 0x00A4, 0x00A4 - 0x00A4, 0xA8 }, + { 0x00A5, 0x00A5 - 0x00A5, 0xA5 }, { 0x00A7, 0x00A7 - 0x00A7, 0xA7 }, + { 0x00A8, 0x00A8 - 0x00A8, 0xC8 }, { 0x00AA, 0x00AA - 0x00AA, 0xE3 }, + { 0x00AB, 0x00AB - 0x00AB, 0xAB }, { 0x00AD, 0x00AD - 0x00AD, 0x2D }, + { 0x00AF, 0x00AF - 0x00AF, 0xC5 }, { 0x00B4, 0x00B4 - 0x00B4, 0xC2 }, + { 0x00B6, 0x00B6 - 0x00B6, 0xB6 }, { 0x00B7, 0x00B7 - 0x00B7, 0xB4 }, + { 0x00B8, 0x00B8 - 0x00B8, 0xCB }, { 0x00BA, 0x00BA - 0x00BA, 0xEB }, + { 0x00BB, 0x00BB - 0x00BB, 0xBB }, { 0x00BF, 0x00BF - 0x00BF, 0xBF }, + { 0x00C6, 0x00C6 - 0x00C6, 0xE1 }, { 0x00D8, 0x00D8 - 0x00D8, 0xE9 }, + { 0x00DF, 0x00DF - 0x00DF, 0xFB }, { 0x00E6, 0x00E6 - 0x00E6, 0xF1 }, + { 0x00F8, 0x00F8 - 0x00F8, 0xF9 }, { 0x0131, 0x0131 - 0x0131, 0xF5 }, + { 0x0141, 0x0141 - 0x0141, 0xE8 }, { 0x0142, 0x0142 - 0x0142, 0xF8 }, + { 0x0152, 0x0152 - 0x0152, 0xEA }, { 0x0153, 0x0153 - 0x0153, 0xFA }, + { 0x0192, 0x0192 - 0x0192, 0xA6 }, { 0x02C6, 0x02C6 - 0x02C6, 0xC3 }, + { 0x02C7, 0x02C7 - 0x02C7, 0xCF }, { 0x02C9, 0x02C9 - 0x02C9, 0xC5 }, + { 0x02D8, 0x02D9 - 0x02D8, 0xC6 }, { 0x02DA, 0x02DA - 0x02DA, 0xCA }, + { 0x02DB, 0x02DB - 0x02DB, 0xCE }, { 0x02DC, 0x02DC - 0x02DC, 0xC4 }, + { 0x02DD, 0x02DD - 0x02DD, 0xCD }, { 0x2013, 0x2013 - 0x2013, 0xB1 }, + { 0x2014, 0x2014 - 0x2014, 0xD0 }, { 0x2018, 0x2018 - 0x2018, 0x60 }, + { 0x2019, 0x2019 - 0x2019, 0x27 }, { 0x201A, 0x201A - 0x201A, 0xB8 }, + { 0x201C, 0x201C - 0x201C, 0xAA }, { 0x201D, 0x201D - 0x201D, 0xBA }, + { 0x201E, 0x201E - 0x201E, 0xB9 }, { 0x2020, 0x2020 - 0x2020, 0xB2 }, + { 0x2021, 0x2021 - 0x2021, 0xB3 }, { 0x2022, 0x2022 - 0x2022, 0xB7 }, + { 0x2026, 0x2026 - 0x2026, 0xBC }, { 0x2030, 0x2030 - 0x2030, 0xBD }, + { 0x2039, 0x2039 - 0x2039, 0xAC }, { 0x203A, 0x203A - 0x203A, 0xAD }, + { 0x2044, 0x2044 - 0x2044, 0xA4 }, { 0x2215, 0x2215 - 0x2215, 0xA4 }, + { 0x2219, 0x2219 - 0x2219, 0xB4 }, { 0xFB01, 0xFB02 - 0xFB01, 0xAE } }; + +rtl::textenc::BmpUnicodeToSingleByteConverterData const +adobeStandardEncodingConverterData = { + { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x00 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x10 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x2019, // 0x20 + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 0x30 + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, // 0x40 + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, // 0x50 + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, + 0x2018, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, // 0x60 + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, // x070 + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x80 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x90 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00A1, 0x00A2, 0x00A3, 0x2215, 0x00A5, 0x0192, 0x00A7, // 0xA0 + 0x00A4, 0x0027, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02, + 0xffff, 0x2013, 0x2020, 0x2021, 0x00B7, 0xffff, 0x00B6, 0x2022, // 0xB0 + 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0xffff, 0x00BF, + 0xffff, 0x0060, 0x00B4, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, // 0xC0 + 0x00A8, 0xffff, 0x02DA, 0x00B8, 0xffff, 0x02DD, 0x02DB, 0x02C7, + 0x2014, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0xD0 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00C6, 0xffff, 0x00AA, 0xffff, 0xffff, 0xffff, 0xffff, // 0xE0 + 0x0141, 0x00D8, 0x0152, 0x00BA, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00E6, 0xffff, 0xffff, 0xffff, 0x0131, 0xffff, 0xffff, // 0xF0 + 0x0142, 0x00F8, 0x0153, 0x00DF, 0xffff, 0xffff, 0xffff, 0xffff }, + SAL_N_ELEMENTS(unicodeToAdobeStandardEncoding), + unicodeToAdobeStandardEncoding }; + +// RTL_TEXTENCODING_ADOBE_SYMBOL is based on +// revision +// "v0.2, 30 March 1999," with the modification that some mappings go to code +// points newly assigned in Unicode 3.2/4.0, instead of to PUA: +// 0xBD -> U+23AF (was U+F8E6) +// 0xBE -> U+23D0 (was U+F8E7) +// 0xE6--E8 -> U+239B--239D (was U+F8EB--F8ED) +// 0xE9--EB -> U+23A1--23A3 (was U+F8EE--F8F0) +// 0xEC--EF -> U+23A7--23AA (was U+F8F1--F8F4) +// 0xF4 -> U+23AE (was U+F8F5) +// 0xF6--F8 -> U+239E--23A0 (was U+F8F6--F8F8) +// 0xF9--FB -> U+23A4--23A6 (was U+F8F9--F8FB) +// 0xFC--FE -> U+23AB--23AD (was U+F8FC--F8FE) + +//TODO: Contains Unicode PUA mappings +rtl::textenc::BmpUnicodeToSingleByteRange const unicodeToAdobeSymbolEncoding[] += { { 0x0020, 0x0021 - 0x0020, 0x20 }, { 0x0023, 0x0023 - 0x0023, 0x23 }, + { 0x0025, 0x0026 - 0x0025, 0x25 }, { 0x0028, 0x0029 - 0x0028, 0x28 }, + { 0x002B, 0x002C - 0x002B, 0x2B }, { 0x002E, 0x003F - 0x002E, 0x2E }, + { 0x005B, 0x005B - 0x005B, 0x5B }, { 0x005D, 0x005D - 0x005D, 0x5D }, + { 0x005F, 0x005F - 0x005F, 0x5F }, { 0x007B, 0x007D - 0x007B, 0x7B }, + { 0x00A0, 0x00A0 - 0x00A0, 0x20 }, { 0x00AC, 0x00AC - 0x00AC, 0xD8 }, + { 0x00B0, 0x00B1 - 0x00B0, 0xB0 }, { 0x00B5, 0x00B5 - 0x00B5, 0x6D }, + { 0x00D7, 0x00D7 - 0x00D7, 0xB4 }, { 0x00F7, 0x00F7 - 0x00F7, 0xB8 }, + { 0x0192, 0x0192 - 0x0192, 0xA6 }, { 0x0391, 0x0392 - 0x0391, 0x41 }, + { 0x0393, 0x0393 - 0x0393, 0x47 }, { 0x0394, 0x0395 - 0x0394, 0x44 }, + { 0x0396, 0x0396 - 0x0396, 0x5A }, { 0x0397, 0x0397 - 0x0397, 0x48 }, + { 0x0398, 0x0398 - 0x0398, 0x51 }, { 0x0399, 0x0399 - 0x0399, 0x49 }, + { 0x039A, 0x039D - 0x039A, 0x4B }, { 0x039E, 0x039E - 0x039E, 0x58 }, + { 0x039F, 0x03A0 - 0x039F, 0x4F }, { 0x03A1, 0x03A1 - 0x03A1, 0x52 }, + { 0x03A3, 0x03A5 - 0x03A3, 0x53 }, { 0x03A6, 0x03A6 - 0x03A6, 0x46 }, + { 0x03A7, 0x03A7 - 0x03A7, 0x43 }, { 0x03A8, 0x03A8 - 0x03A8, 0x59 }, + { 0x03A9, 0x03A9 - 0x03A9, 0x57 }, { 0x03B1, 0x03B2 - 0x03B1, 0x61 }, + { 0x03B3, 0x03B3 - 0x03B3, 0x67 }, { 0x03B4, 0x03B5 - 0x03B4, 0x64 }, + { 0x03B6, 0x03B6 - 0x03B6, 0x7A }, { 0x03B7, 0x03B7 - 0x03B7, 0x68 }, + { 0x03B8, 0x03B8 - 0x03B8, 0x71 }, { 0x03B9, 0x03B9 - 0x03B9, 0x69 }, + { 0x03BA, 0x03BD - 0x03BA, 0x6B }, { 0x03BE, 0x03BE - 0x03BE, 0x78 }, + { 0x03BF, 0x03C0 - 0x03BF, 0x6F }, { 0x03C1, 0x03C1 - 0x03C1, 0x72 }, + { 0x03C2, 0x03C2 - 0x03C2, 0x56 }, { 0x03C3, 0x03C5 - 0x03C3, 0x73 }, + { 0x03C6, 0x03C6 - 0x03C6, 0x66 }, { 0x03C7, 0x03C7 - 0x03C7, 0x63 }, + { 0x03C8, 0x03C8 - 0x03C8, 0x79 }, { 0x03C9, 0x03C9 - 0x03C9, 0x77 }, + { 0x03D1, 0x03D1 - 0x03D1, 0x4A }, { 0x03D2, 0x03D2 - 0x03D2, 0xA1 }, + { 0x03D5, 0x03D5 - 0x03D5, 0x6A }, { 0x03D6, 0x03D6 - 0x03D6, 0x76 }, + { 0x2022, 0x2022 - 0x2022, 0xB7 }, { 0x2026, 0x2026 - 0x2026, 0xBC }, + { 0x2032, 0x2032 - 0x2032, 0xA2 }, { 0x2033, 0x2033 - 0x2033, 0xB2 }, + { 0x2044, 0x2044 - 0x2044, 0xA4 }, { 0x20AC, 0x20AC - 0x20AC, 0xA0 }, + { 0x2111, 0x2111 - 0x2111, 0xC1 }, { 0x2118, 0x2118 - 0x2118, 0xC3 }, + { 0x211C, 0x211C - 0x211C, 0xC2 }, { 0x2126, 0x2126 - 0x2126, 0x57 }, + { 0x2135, 0x2135 - 0x2135, 0xC0 }, { 0x2190, 0x2193 - 0x2190, 0xAC }, + { 0x2194, 0x2194 - 0x2194, 0xAB }, { 0x21B5, 0x21B5 - 0x21B5, 0xBF }, + { 0x21D0, 0x21D3 - 0x21D0, 0xDC }, { 0x21D4, 0x21D4 - 0x21D4, 0xDB }, + { 0x2200, 0x2200 - 0x2200, 0x22 }, { 0x2202, 0x2202 - 0x2202, 0xB6 }, + { 0x2203, 0x2203 - 0x2203, 0x24 }, { 0x2205, 0x2205 - 0x2205, 0xC6 }, + { 0x2206, 0x2206 - 0x2206, 0x44 }, { 0x2207, 0x2207 - 0x2207, 0xD1 }, + { 0x2208, 0x2209 - 0x2208, 0xCE }, { 0x220B, 0x220B - 0x220B, 0x27 }, + { 0x220F, 0x220F - 0x220F, 0xD5 }, { 0x2211, 0x2211 - 0x2211, 0xE5 }, + { 0x2212, 0x2212 - 0x2212, 0x2D }, { 0x2215, 0x2215 - 0x2215, 0xA4 }, + { 0x2217, 0x2217 - 0x2217, 0x2A }, { 0x221A, 0x221A - 0x221A, 0xD6 }, + { 0x221D, 0x221D - 0x221D, 0xB5 }, { 0x221E, 0x221E - 0x221E, 0xA5 }, + { 0x2220, 0x2220 - 0x2220, 0xD0 }, { 0x2227, 0x2228 - 0x2227, 0xD9 }, + { 0x2229, 0x222A - 0x2229, 0xC7 }, { 0x222B, 0x222B - 0x222B, 0xF2 }, + { 0x2234, 0x2234 - 0x2234, 0x5C }, { 0x223C, 0x223C - 0x223C, 0x7E }, + { 0x2245, 0x2245 - 0x2245, 0x40 }, { 0x2248, 0x2248 - 0x2248, 0xBB }, + { 0x2260, 0x2261 - 0x2260, 0xB9 }, { 0x2264, 0x2264 - 0x2264, 0xA3 }, + { 0x2265, 0x2265 - 0x2265, 0xB3 }, { 0x2282, 0x2282 - 0x2282, 0xCC }, + { 0x2283, 0x2283 - 0x2283, 0xC9 }, { 0x2284, 0x2284 - 0x2284, 0xCB }, + { 0x2286, 0x2286 - 0x2286, 0xCD }, { 0x2287, 0x2287 - 0x2287, 0xCA }, + { 0x2295, 0x2295 - 0x2295, 0xC5 }, { 0x2297, 0x2297 - 0x2297, 0xC4 }, + { 0x22A5, 0x22A5 - 0x22A5, 0x5E }, { 0x22C5, 0x22C5 - 0x22C5, 0xD7 }, + { 0x2320, 0x2320 - 0x2320, 0xF3 }, { 0x2321, 0x2321 - 0x2321, 0xF5 }, + { 0x2329, 0x2329 - 0x2329, 0xE1 }, { 0x232A, 0x232A - 0x232A, 0xF1 }, + { 0x239B, 0x239D - 0x239B, 0xE6 }, { 0x239E, 0x23A0 - 0x239E, 0xF6 }, + { 0x23A1, 0x23A3 - 0x23A1, 0xE9 }, { 0x23A4, 0x23A6 - 0x23A4, 0xF9 }, + { 0x23A7, 0x23AA - 0x23A7, 0xEC }, { 0x23AB, 0x23AD - 0x23AB, 0xFC }, + { 0x23AE, 0x23AE - 0x23AE, 0xF4 }, { 0x23AF, 0x23AF - 0x23AF, 0xBD }, + { 0x23D0, 0x23D0 - 0x23D0, 0xBE }, { 0x25CA, 0x25CA - 0x25CA, 0xE0 }, + { 0x2660, 0x2660 - 0x2660, 0xAA }, { 0x2663, 0x2663 - 0x2663, 0xA7 }, + { 0x2665, 0x2665 - 0x2665, 0xA9 }, { 0x2666, 0x2666 - 0x2666, 0xA8 }, + { 0xF000, 0xF0FF - 0xF000, 0x00 }, // symbol aliasing U+F0XX->S+00XX + { 0xF6D9, 0xF6D9 - 0xF6D9, 0xD3 }, { 0xF6DA, 0xF6DA - 0xF6DA, 0xD2 }, + { 0xF6DB, 0xF6DB - 0xF6DB, 0xD4 }, { 0xF8E5, 0xF8E5 - 0xF8E5, 0x60 }, + { 0xF8E8, 0xF8EA - 0xF8E8, 0xE2 } }; + +//TODO: Contains Unicode PUA mappings +rtl::textenc::BmpUnicodeToSingleByteConverterData const +adobeSymbolEncodingConverterData = { + { 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x00 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x10 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220B, // 0x20 + 0x0028, 0x0029, 0x2217, 0x002B, 0x002C, 0x2212, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, // 0x30 + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x2245, 0x0391, 0x0392, 0x03A7, 0x0394, 0x0395, 0x03A6, 0x0393, // 0x40 + 0x0397, 0x0399, 0x03D1, 0x039A, 0x039B, 0x039C, 0x039D, 0x039F, + 0x03A0, 0x0398, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03C2, 0x03A9, // 0x50 + 0x039E, 0x03A8, 0x0396, 0x005B, 0x2234, 0x005D, 0x22A5, 0x005F, + 0xF8E5, 0x03B1, 0x03B2, 0x03C7, 0x03B4, 0x03B5, 0x03C6, 0x03B3, // 0x60 + 0x03B7, 0x03B9, 0x03D5, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, + 0x03C0, 0x03B8, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03D6, 0x03C9, // 0x70 + 0x03BE, 0x03C8, 0x03B6, 0x007B, 0x007C, 0x007D, 0x223C, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x80 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, // 0x90 + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x20AC, 0x03D2, 0x2032, 0x2264, 0x2215, 0x221E, 0x0192, 0x2663, // 0xA0 + 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, + 0x00B0, 0x00B1, 0x2033, 0x2265, 0x00D7, 0x221D, 0x2202, 0x2022, // 0xB0 + 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026, 0x23AF, 0x23D0, 0x21B5, + 0x2135, 0x2111, 0x211C, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229, // 0xC0 + 0x222A, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209, + 0x2220, 0x2207, 0xF6DA, 0xF6D9, 0xF6DB, 0x220F, 0x221A, 0x22C5, // 0xD0 + 0x00AC, 0x2227, 0x2228, 0x21D4, 0x21D0, 0x21D1, 0x21D2, 0x21D3, + 0x25CA, 0x2329, 0xF8E8, 0xF8E9, 0xF8EA, 0x2211, 0x239B, 0x239C, // 0xE0 + 0x239D, 0x23A1, 0x23A2, 0x23A3, 0x23A7, 0x23A8, 0x23A9, 0x23AA, + 0xffff, 0x232A, 0x222B, 0x2320, 0x23AE, 0x2321, 0x239E, 0x239F, // 0xF0 + 0x23A0, 0x23A4, 0x23A5, 0x23A6, 0x23AB, 0x23AC, 0x23AD, 0xffff }, + SAL_N_ELEMENTS( unicodeToAdobeSymbolEncoding ), + unicodeToAdobeSymbolEncoding }; + +// RTL_TEXTENCODING_ADOBE_DINGBATS is based on +// revision +// "v0.2, 30 March 1999" + +//TODO: Contains Unicode PUA mappings +rtl::textenc::BmpUnicodeToSingleByteRange const unicodeToAdobeDingbatsEncoding[] += { { 0x0020, 0x0020 - 0x0020, 0x20 }, { 0x00A0, 0x00A0 - 0x00A0, 0x20 }, + { 0x2192, 0x2192 - 0x2192, 0xD5 }, { 0x2194, 0x2195 - 0x2194, 0xD6 }, + { 0x2460, 0x2469 - 0x2460, 0xAC }, + { 0x25A0, 0x25A0 - 0x25A0, 0x6E }, + { 0x25B2, 0x25B2 - 0x25B2, 0x73 }, { 0x25BC, 0x25BC - 0x25BC, 0x74 }, + { 0x25C6, 0x25C6 - 0x25C6, 0x75 }, { 0x25CF, 0x25CF - 0x25CF, 0x6C }, + { 0x25D7, 0x25D7 - 0x25D7, 0x77 }, + { 0x2605, 0x2605 - 0x2605, 0x48 }, { 0x260E, 0x260E - 0x260E, 0x25 }, + { 0x261B, 0x261B - 0x261B, 0x2A }, { 0x261E, 0x261E - 0x261E, 0x2B }, + { 0x2660, 0x2660 - 0x2660, 0xAB }, { 0x2663, 0x2663 - 0x2663, 0xA8 }, + { 0x2665, 0x2665 - 0x2665, 0xAA }, { 0x2666, 0x2666 - 0x2666, 0xA9 }, + { 0x2701, 0x2704 - 0x2701, 0x21 }, { 0x2706, 0x2709 - 0x2706, 0x26 }, + { 0x270C, 0x2727 - 0x270C, 0x2C }, { 0x2729, 0x274B - 0x2729, 0x49 }, + { 0x274D, 0x274D - 0x274D, 0x6D }, { 0x274F, 0x2752 - 0x274F, 0x6F }, + { 0x2756, 0x2756 - 0x2756, 0x76 }, { 0x2758, 0x275E - 0x2758, 0x78 }, + { 0x2761, 0x2767 - 0x2761, 0xA1 }, { 0x2776, 0x27AF - 0x2776, 0xB6 }, + { 0x27B1, 0x27BE - 0x27B1, 0xF1 }, + { 0xF000, 0xF0FF - 0xF000, 0x00 }, // symbol aliasing U+F0XX->S+00XX + { 0xF8D7, 0xF8E4 - 0xF8D7, 0x80 }}; + +rtl::textenc::BmpUnicodeToSingleByteConverterData const +adobeDingbatsEncodingConverterData = { + { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00 + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x10 + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0x0020, 0x2701, 0x2702, 0x2703, 0x2704, 0x260E, 0x2706, 0x2707, // 0x20 + 0x2708, 0x2709, 0x261B, 0x261E, 0x270C, 0x270D, 0x270E, 0x270F, + 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, // 0x30 + 0x2718, 0x2719, 0x271A, 0x271B, 0x271C, 0x271D, 0x271E, 0x271F, + 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, // 0x40 + 0x2605, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, + 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, // 0x50 + 0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, + 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, // 0x60 + 0x2748, 0x2749, 0x274A, 0x274B, 0x25CF, 0x274D, 0x25A0, 0x274F, + 0x2750, 0x2751, 0x2752, 0x25B2, 0x25BC, 0x25C6, 0x2756, 0x25D7, // 0x70 + 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0xFFFF, + 0xF8D7, 0xF8D8, 0xF8D9, 0xF8DA, 0xF8DB, 0xF8DC, 0xF8DD, 0xF8DE, // 0x80 + 0xF8DF, 0xF8E0, 0xF8E1, 0xF8E2, 0xF8E3, 0xF8E4, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x90 + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, // 0xA0 + 0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463, + 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, // 0xB0 + 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F, + 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, // 0xC0 + 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E, 0x278F, + 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2795, 0x2796, 0x2797, // 0xD0 + 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F, + 0x27A0, 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, // 0xE0 + 0x27A8, 0x27A9, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF, + 0xFFFF, 0x27B1, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, // 0xF0 + 0x27B8, 0x27B9, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE, 0xFFFF }, + SAL_N_ELEMENTS(unicodeToAdobeDingbatsEncoding), + unicodeToAdobeDingbatsEncoding }; + +ImplTextEncodingData const adobeStandardEncodingData += { { &adobeStandardEncodingConverterData, + &rtl_textenc_convertSingleByteToBmpUnicode, + &rtl_textenc_convertBmpUnicodeToSingleByte, + nullptr, nullptr, nullptr, + ImplCreateUnicodeToTextContext, ImplDestroyUnicodeToTextContext, + ImplResetUnicodeToTextContext }, + nullptr, "Adobe-Standard-Encoding", + 1, 1, 1, 0, + RTL_TEXTENCODING_INFO_MIME }; + +ImplTextEncodingData const adobeSymbolEncodingData += { { &adobeSymbolEncodingConverterData, + &rtl_textenc_convertSingleByteToBmpUnicode, + &rtl_textenc_convertBmpUnicodeToSingleByte, + nullptr, nullptr, nullptr, + ImplCreateUnicodeToTextContext, ImplDestroyUnicodeToTextContext, + ImplResetUnicodeToTextContext }, + nullptr, "Adobe-Symbol-Encoding", + 1, 1, 1, 0, + RTL_TEXTENCODING_INFO_SYMBOL | RTL_TEXTENCODING_INFO_MIME }; + +ImplTextEncodingData const adobeDingbatsEncodingData += { { &adobeDingbatsEncodingConverterData, + &rtl_textenc_convertSingleByteToBmpUnicode, + &rtl_textenc_convertBmpUnicodeToSingleByte, + nullptr, nullptr, nullptr, + ImplCreateUnicodeToTextContext, ImplDestroyUnicodeToTextContext, + ImplResetUnicodeToTextContext }, + nullptr, "Adobe-ZapfDingbats-Encoding", + 1, 1, 1, 0, + 0 }; // TODO: RTL_TEXTENCODING_INFO_DINGBATS + +} diff --git a/sal/textenc/convertbig5hkscs.cxx b/sal/textenc/convertbig5hkscs.cxx new file mode 100644 index 000000000..bf3a2e2cf --- /dev/null +++ b/sal/textenc/convertbig5hkscs.cxx @@ -0,0 +1,501 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "context.hxx" +#include "convertbig5hkscs.hxx" +#include "converter.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +struct ImplBig5HkscsToUnicodeContext +{ + sal_Int32 m_nRow; // 0--255; 0 means none +}; + +} + +void * ImplCreateBig5HkscsToUnicodeContext() +{ + ImplBig5HkscsToUnicodeContext * pContext = + new ImplBig5HkscsToUnicodeContext; + pContext->m_nRow = 0; + return pContext; +} + +void ImplResetBig5HkscsToUnicodeContext(void * pContext) +{ + if (pContext) + static_cast< ImplBig5HkscsToUnicodeContext * >(pContext)->m_nRow = 0; +} + +void ImplDestroyBig5HkscsToUnicodeContext(void * pContext) +{ + delete static_cast< ImplBig5HkscsToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertBig5HkscsToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes) +{ + sal_uInt16 const * pBig5Hkscs2001Data + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pBig5Hkscs2001ToUnicodeData; + sal_Int32 const * pBig5Hkscs2001RowOffsets + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pBig5Hkscs2001ToUnicodeRowOffsets; + ImplDBCSToUniLeadTab const * pBig5Data + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pBig5ToUnicodeData; + sal_Int32 nRow = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + if (pContext) + nRow = static_cast< ImplBig5HkscsToUnicodeContext * >(pContext)->m_nRow; + + for (; nConverted < nSrcBytes; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *reinterpret_cast(pSrcBuf++); + if (nRow == 0) + if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + else if (nChar >= 0x81 && nChar <= 0xFE) + nRow = nChar; + else + { + bUndefined = false; + goto bad_input; + } + else + if ((nChar >= 0x40 && nChar <= 0x7E) + || (nChar >= 0xA1 && nChar <= 0xFE)) + { + sal_uInt32 nUnicode = 0xFFFF; + sal_Int32 nOffset = pBig5Hkscs2001RowOffsets[nRow]; + sal_uInt32 nFirst=0; + sal_uInt32 nLast=0; + if (nOffset != -1) + { + sal_uInt32 nFirstLast = pBig5Hkscs2001Data[nOffset++]; + nFirst = nFirstLast & 0xFF; + nLast = nFirstLast >> 8; + if (nChar >= nFirst && nChar <= nLast) + nUnicode + = pBig5Hkscs2001Data[nOffset + (nChar - nFirst)]; + } + if (nUnicode == 0xFFFF) + { + sal_uInt32 n = pBig5Data[nRow].mnTrailStart; + if (nChar >= n && nChar <= pBig5Data[nRow].mnTrailEnd) + { + nUnicode = pBig5Data[nRow].mpToUniTrailTab[nChar - n]; + if (nUnicode == 0) + nUnicode = 0xFFFF; + assert(!rtl::isHighSurrogate(nUnicode)); + } + } + if (nUnicode == 0xFFFF) + { + ImplDBCSEUDCData const * p + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pEudcData; + sal_uInt32 nCount + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_nEudcCount; + sal_uInt32 i; + for (i = 0; i < nCount; ++i) + { + if (nRow >= p->mnLeadStart && nRow <= p->mnLeadEnd) + { + if (nChar < p->mnTrail1Start) + break; + if (nChar <= p->mnTrail1End) + { + nUnicode + = p->mnUniStart + + (nRow - p->mnLeadStart) + * p->mnTrailRangeCount + + (nChar - p->mnTrail1Start); + break; + } + if (p->mnTrailCount < 2 + || nChar < p->mnTrail2Start) + break; + if (nChar <= p->mnTrail2End) + { + nUnicode + = p->mnUniStart + + (nRow - p->mnLeadStart) + * p->mnTrailRangeCount + + (nChar - p->mnTrail2Start) + + (p->mnTrail1End - p->mnTrail1Start + + 1); + break; + } + if (p->mnTrailCount < 3 + || nChar < p->mnTrail3Start) + break; + if (nChar <= p->mnTrail3End) + { + nUnicode + = p->mnUniStart + + (nRow - p->mnLeadStart) + * p->mnTrailRangeCount + + (nChar - p->mnTrail3Start) + + (p->mnTrail1End - p->mnTrail1Start + + 1) + + (p->mnTrail2End - p->mnTrail2Start + + 1); + break; + } + break; + } + ++p; + } + assert(!rtl::isHighSurrogate(nUnicode)); + } + if (nUnicode == 0xFFFF) + goto bad_input; + if (rtl::isHighSurrogate(nUnicode)) + if (pDestBufEnd - pDestBufPtr >= 2) + { + nOffset += nLast - nFirst + 1; + nFirst = pBig5Hkscs2001Data[nOffset++]; + *pDestBufPtr++ = static_cast(nUnicode); + *pDestBufPtr++ + = static_cast(pBig5Hkscs2001Data[ + nOffset + (nChar - nFirst)]); + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nUnicode); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + nRow = 0; + } + else + { + bUndefined = false; + goto bad_input; + } + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nRow = 0; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++nConverted; + } else { + nConverted = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nRow = 0; + startOfCurrentChar = nConverted + 1; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (nRow != 0 + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nRow = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext) + static_cast< ImplBig5HkscsToUnicodeContext * >(pContext)->m_nRow = nRow; + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +sal_Size ImplConvertUnicodeToBig5Hkscs(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + sal_uInt16 const * pBig5Hkscs2001Data + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pUnicodeToBig5Hkscs2001Data; + sal_Int32 const * pBig5Hkscs2001PageOffsets + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pUnicodeToBig5Hkscs2001PageOffsets; + sal_Int32 const * pBig5Hkscs2001PlaneOffsets + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pUnicodeToBig5Hkscs2001PlaneOffsets; + ImplUniToDBCSHighTab const * pBig5Data + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pUnicodeToBig5Data; + sal_Unicode nHighSurrogate = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBuf + nDestBytes; + + if (pContext) + nHighSurrogate + = static_cast(pContext)->m_nHighSurrogate; + + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *pSrcBuf++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar)) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar)) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + { + bUndefined = false; + goto bad_input; + } + + assert(rtl::isUnicodeScalarValue(nChar)); + + if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + else + { + sal_uInt32 nBytes = 0; + sal_Int32 nOffset = pBig5Hkscs2001PlaneOffsets[nChar >> 16]; + if (nOffset != -1) + { + nOffset + = pBig5Hkscs2001PageOffsets[nOffset + ((nChar & 0xFF00) + >> 8)]; + if (nOffset != -1) + { + sal_uInt32 nFirstLast = pBig5Hkscs2001Data[nOffset++]; + sal_uInt32 nFirst = nFirstLast & 0xFF; + sal_uInt32 nLast = nFirstLast >> 8; + sal_uInt32 nIndex = nChar & 0xFF; + if (nIndex >= nFirst && nIndex <= nLast) + { + nBytes + = pBig5Hkscs2001Data[nOffset + (nIndex - nFirst)]; + } + } + } + if (nBytes == 0) + { + sal_uInt32 nIndex1 = nChar >> 8; + if (nIndex1 < 0x100) + { + sal_uInt32 nIndex2 = nChar & 0xFF; + sal_uInt32 nFirst = pBig5Data[nIndex1].mnLowStart; + if (nIndex2 >= nFirst + && nIndex2 <= pBig5Data[nIndex1].mnLowEnd) + nBytes = pBig5Data[nIndex1]. + mpToUniTrailTab[nIndex2 - nFirst]; + } + } + if (nBytes == 0) + { + ImplDBCSEUDCData const * p + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_pEudcData; + sal_uInt32 nCount + = static_cast< ImplBig5HkscsConverterData const * >(pData)-> + m_nEudcCount; + sal_uInt32 i; + for (i = 0; i < nCount; ++i) { + if (nChar >= p->mnUniStart && nChar <= p->mnUniEnd) + { + sal_uInt32 nIndex = nChar - p->mnUniStart; + sal_uInt32 nLeadOff = nIndex / p->mnTrailRangeCount; + sal_uInt32 nTrailOff = nIndex % p->mnTrailRangeCount; + sal_uInt32 nSize; + nBytes = (p->mnLeadStart + nLeadOff) << 8; + nSize = p->mnTrail1End - p->mnTrail1Start + 1; + if (nTrailOff < nSize) + { + nBytes |= p->mnTrail1Start + nTrailOff; + break; + } + nTrailOff -= nSize; + nSize = p->mnTrail2End - p->mnTrail2Start + 1; + if (nTrailOff < nSize) + { + nBytes |= p->mnTrail2Start + nTrailOff; + break; + } + nTrailOff -= nSize; + nBytes |= p->mnTrail3Start + nTrailOff; + break; + } + ++p; + } + } + if (nBytes == 0) + goto bad_input; + if (pDestBufEnd - pDestBufPtr >= 2) + { + *pDestBufPtr++ = static_cast< char >(nBytes >> 8); + *pDestBufPtr++ = static_cast< char >(nBytes & 0xFF); + } + else + goto no_output; + } + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo, nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if (nHighSurrogate != 0 + && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + + if (pContext) + static_cast(pContext)->m_nHighSurrogate + = nHighSurrogate; + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertbig5hkscs.hxx b/sal/textenc/convertbig5hkscs.hxx new file mode 100644 index 000000000..089ac5845 --- /dev/null +++ b/sal/textenc/convertbig5hkscs.hxx @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTBIG5HKSCS_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTBIG5HKSCS_HXX + +#include + +#include "tenchelp.hxx" + +struct ImplBig5HkscsConverterData +{ + sal_uInt16 const * m_pBig5Hkscs2001ToUnicodeData; + sal_Int32 const * m_pBig5Hkscs2001ToUnicodeRowOffsets; + ImplDBCSToUniLeadTab const * m_pBig5ToUnicodeData; + sal_uInt16 const * m_pUnicodeToBig5Hkscs2001Data; + sal_Int32 const * m_pUnicodeToBig5Hkscs2001PageOffsets; + sal_Int32 const * m_pUnicodeToBig5Hkscs2001PlaneOffsets; + ImplUniToDBCSHighTab const * m_pUnicodeToBig5Data; + ImplDBCSEUDCData const * m_pEudcData; + int m_nEudcCount; +}; + +void * ImplCreateBig5HkscsToUnicodeContext(); + +void ImplResetBig5HkscsToUnicodeContext(void * pContext); + +void ImplDestroyBig5HkscsToUnicodeContext(void * pContext); + +sal_Size ImplConvertBig5HkscsToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +sal_Size ImplConvertUnicodeToBig5Hkscs(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertbig5hkscs.tab b/sal/textenc/convertbig5hkscs.tab new file mode 100644 index 000000000..04d56b824 --- /dev/null +++ b/sal/textenc/convertbig5hkscs.tab @@ -0,0 +1,57 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "context.hxx" +#include "convertbig5hkscs.hxx" +#include "generate/big5hkscs2001.tab" +#include "tenchelp.hxx" + +ImplBig5HkscsConverterData const aImplBig5HkscsConvertData + = { aImplBig5Hkscs2001ToUnicodeData, + aImplBig5Hkscs2001ToUnicodeRowOffsets, + aBIG5UniLeadTab, /* from tcvttcn6.tab */ + aImplUnicodeToBig5Hkscs2001Data, + aImplUnicodeToBig5Hkscs2001PageOffsets, + aImplUnicodeToBig5Hkscs2001PlaneOffsets, + aBIG5DBCSHighTab, /* from tcvttcn6.tab */ + aImplMS950DBCSEUDCTab, /* from tcvttcn6.tab */ + DBCS_EUDC_MS950_COUNT }; /* from tcvttcn6.tab */ + +ImplTextEncodingData const aImplBig5HkscsTextEncodingData + = { { &aImplBig5HkscsConvertData, + &ImplConvertBig5HkscsToUnicode, + &ImplConvertUnicodeToBig5Hkscs, + &ImplCreateBig5HkscsToUnicodeContext, + &ImplDestroyBig5HkscsToUnicodeContext, + &ImplResetBig5HkscsToUnicodeContext, + &ImplCreateUnicodeToTextContext, + &ImplDestroyUnicodeToTextContext, + &ImplResetUnicodeToTextContext }, + "euc-tw", + "Big5-HKSCS", + 1, + 2, + 2, + 136, + RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CHINESE_TRADITIONAL */ diff --git a/sal/textenc/converter.cxx b/sal/textenc/converter.cxx new file mode 100644 index 000000000..60e6a3383 --- /dev/null +++ b/sal/textenc/converter.cxx @@ -0,0 +1,157 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include +#include + +#include "converter.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +sal::detail::textenc::BadInputConversionAction +sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bool bUndefined, bool bMultiByte, char cByte, sal_uInt32 nFlags, + sal_Unicode ** pDestBufPtr, const sal_Unicode * pDestBufEnd, sal_uInt32 * pInfo) +{ + *pInfo |= bUndefined + ? (bMultiByte + ? RTL_TEXTTOUNICODE_INFO_MBUNDEFINED + : RTL_TEXTTOUNICODE_INFO_UNDEFINED) + : RTL_TEXTTOUNICODE_INFO_INVALID; + switch (nFlags + & (bUndefined + ? (bMultiByte + ? RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK + : RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) + : RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK)) + { + case RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR: + case RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR: + case RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR: + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + return BAD_INPUT_STOP; + + case RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE: + case RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE: + case RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE: + return BAD_INPUT_CONTINUE; + + case RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE: + if (*pDestBufPtr != pDestBufEnd) + { + *(*pDestBufPtr)++ = RTL_TEXTCVT_BYTE_PRIVATE_START + | static_cast(cByte); + return BAD_INPUT_CONTINUE; + } + else + return BAD_INPUT_NO_OUTPUT; + + default: // RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT, + // RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT, + // RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT + if (*pDestBufPtr != pDestBufEnd) + { + *(*pDestBufPtr)++ = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + return BAD_INPUT_CONTINUE; + } + else + return BAD_INPUT_NO_OUTPUT; + } +} + +sal::detail::textenc::BadInputConversionAction +sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bool bUndefined, sal_uInt32 nUtf32, sal_uInt32 nFlags, char ** pDestBufPtr, + const char * pDestBufEnd, sal_uInt32 * pInfo, char const * pPrefix, + sal_Size nPrefixLen, bool * pPrefixWritten) +{ + // TODO! RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE + // RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR + + char cReplace; + + if (bUndefined) + { + if (ImplIsControlOrFormat(nUtf32)) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE) != 0) + nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE; + } + else if (ImplIsPrivateUse(nUtf32)) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE) != 0) + nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE; + else if ((nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0) != 0) + nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0; + } + else if (ImplIsZeroWidth(nUtf32)) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE) != 0) + nFlags = RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE; + } + } + *pInfo |= bUndefined ? RTL_UNICODETOTEXT_INFO_UNDEFINED : + RTL_UNICODETOTEXT_INFO_INVALID; + switch (nFlags & (bUndefined ? RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK : + RTL_UNICODETOTEXT_FLAGS_INVALID_MASK)) + { + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR: + case RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR: + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR; + return BAD_INPUT_STOP; + + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE: + case RTL_UNICODETOTEXT_FLAGS_INVALID_IGNORE: + if (pPrefixWritten) + *pPrefixWritten = false; + return BAD_INPUT_CONTINUE; + + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0: + case RTL_UNICODETOTEXT_FLAGS_INVALID_0: + cReplace = 0; + break; + + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK: + case RTL_UNICODETOTEXT_FLAGS_INVALID_QUESTIONMARK: + default: // RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT, + // RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT + cReplace = '?'; + break; + + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_UNDERLINE: + case RTL_UNICODETOTEXT_FLAGS_INVALID_UNDERLINE: + cReplace = '_'; + break; + } + if (o3tl::make_unsigned(pDestBufEnd - *pDestBufPtr) > nPrefixLen) + { + while (nPrefixLen-- > 0) + *(*pDestBufPtr)++ = *pPrefix++; + *(*pDestBufPtr)++ = cReplace; + if (pPrefixWritten) + *pPrefixWritten = true; + return BAD_INPUT_CONTINUE; + } + return BAD_INPUT_NO_OUTPUT; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/converter.hxx b/sal/textenc/converter.hxx new file mode 100644 index 000000000..189f2048a --- /dev/null +++ b/sal/textenc/converter.hxx @@ -0,0 +1,53 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTER_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTER_HXX + +#include +#include +#include + +// Internal, non-stable ABI + +namespace sal::detail::textenc { + +enum BadInputConversionAction +{ + BAD_INPUT_STOP, + BAD_INPUT_CONTINUE, + BAD_INPUT_NO_OUTPUT +}; + +BadInputConversionAction SAL_DLLPUBLIC +handleBadInputTextToUnicodeConversion( + bool bUndefined, bool bMultiByte, char cByte, sal_uInt32 nFlags, + sal_Unicode ** pDestBufPtr, const sal_Unicode * pDestBufEnd, sal_uInt32 * pInfo); + +BadInputConversionAction SAL_DLLPUBLIC +handleBadInputUnicodeToTextConversion( + bool bUndefined, sal_uInt32 nUtf32, sal_uInt32 nFlags, char ** pDestBufPtr, + const char * pDestBufEnd, sal_uInt32 * pInfo, char const * pPrefix, + sal_Size nPrefixLen, bool * pPrefixWritten); + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/converteuctw.cxx b/sal/textenc/converteuctw.cxx new file mode 100644 index 000000000..8684b643c --- /dev/null +++ b/sal/textenc/converteuctw.cxx @@ -0,0 +1,461 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "context.hxx" +#include "converter.hxx" +#include "converteuctw.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +enum ImplEucTwToUnicodeState +{ + IMPL_EUC_TW_TO_UNICODE_STATE_0, + IMPL_EUC_TW_TO_UNICODE_STATE_1, + IMPL_EUC_TW_TO_UNICODE_STATE_2_1, + IMPL_EUC_TW_TO_UNICODE_STATE_2_2, + IMPL_EUC_TW_TO_UNICODE_STATE_2_3 +}; + +struct ImplEucTwToUnicodeContext +{ + ImplEucTwToUnicodeState m_eState; + sal_Int32 m_nPlane; // 0--15 + sal_Int32 m_nRow; // 0--93 +}; + +} + +void * ImplCreateEucTwToUnicodeContext() +{ + ImplEucTwToUnicodeContext * pContext = new ImplEucTwToUnicodeContext; + pContext->m_eState = IMPL_EUC_TW_TO_UNICODE_STATE_0; + return pContext; +} + +void ImplResetEucTwToUnicodeContext(void * pContext) +{ + if (pContext) + static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_eState + = IMPL_EUC_TW_TO_UNICODE_STATE_0; +} + +void ImplDestroyEucTwToUnicodeContext(void * pContext) +{ + delete static_cast< ImplEucTwToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertEucTwToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes) +{ + sal_uInt16 const * pCns116431992Data + = static_cast< ImplEucTwConverterData const * >(pData)-> + m_pCns116431992ToUnicodeData; + sal_Int32 const * pCns116431992RowOffsets + = static_cast< ImplEucTwConverterData const * >(pData)-> + m_pCns116431992ToUnicodeRowOffsets; + sal_Int32 const * pCns116431992PlaneOffsets + = static_cast< ImplEucTwConverterData const * >(pData)-> + m_pCns116431992ToUnicodePlaneOffsets; + ImplEucTwToUnicodeState eState = IMPL_EUC_TW_TO_UNICODE_STATE_0; + sal_Int32 nPlane = 0; + sal_Int32 nRow = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + if (pContext) + { + eState = static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_eState; + nPlane = static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nPlane; + nRow = static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nRow; + } + + for (; nConverted < nSrcBytes; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *reinterpret_cast(pSrcBuf++); + switch (eState) + { + case IMPL_EUC_TW_TO_UNICODE_STATE_0: + if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + else if (nChar >= 0xA1 && nChar <= 0xFE) + { + nRow = nChar - 0xA1; + eState = IMPL_EUC_TW_TO_UNICODE_STATE_1; + } + else if (nChar == 0x8E) + eState = IMPL_EUC_TW_TO_UNICODE_STATE_2_1; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_EUC_TW_TO_UNICODE_STATE_1: + if (nChar >= 0xA1 && nChar <= 0xFE) + { + nPlane = 0; + goto transform; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_EUC_TW_TO_UNICODE_STATE_2_1: + if (nChar >= 0xA1 && nChar <= 0xB0) + { + nPlane = nChar - 0xA1; + eState = IMPL_EUC_TW_TO_UNICODE_STATE_2_2; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_EUC_TW_TO_UNICODE_STATE_2_2: + if (nChar >= 0xA1 && nChar <= 0xFE) + { + nRow = nChar - 0xA1; + eState = IMPL_EUC_TW_TO_UNICODE_STATE_2_3; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_EUC_TW_TO_UNICODE_STATE_2_3: + if (nChar >= 0xA1 && nChar <= 0xFE) + goto transform; + else + { + bUndefined = false; + goto bad_input; + } + break; + } + continue; + + transform: + { + sal_Int32 nPlaneOffset = pCns116431992PlaneOffsets[nPlane]; + if (nPlaneOffset == -1) + goto bad_input; + else + { + sal_Int32 nOffset + = pCns116431992RowOffsets[nPlaneOffset + nRow]; + if (nOffset == -1) + goto bad_input; + else + { + sal_uInt32 nFirstLast = pCns116431992Data[nOffset++]; + sal_uInt32 nFirst = nFirstLast & 0xFF; + sal_uInt32 nLast = nFirstLast >> 8; + nChar -= 0xA0; + if (nChar >= nFirst && nChar <= nLast) + { + sal_uInt32 nUnicode + = pCns116431992Data[nOffset + (nChar - nFirst)]; + if (nUnicode == 0xFFFF) + goto bad_input; + else if (rtl::isHighSurrogate(nUnicode)) + if (pDestBufEnd - pDestBufPtr >= 2) + { + nOffset += nLast - nFirst + 1; + nFirst = pCns116431992Data[nOffset++]; + *pDestBufPtr++ = static_cast(nUnicode); + *pDestBufPtr++ + = static_cast(pCns116431992Data[ + nOffset + (nChar - nFirst)]); + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nUnicode); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + } + else + goto bad_input; + eState = IMPL_EUC_TW_TO_UNICODE_STATE_0; + } + } + continue; + } + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + eState = IMPL_EUC_TW_TO_UNICODE_STATE_0; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++nConverted; + } else { + nConverted = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_EUC_TW_TO_UNICODE_STATE_0; + startOfCurrentChar = nConverted + 1; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (eState != IMPL_EUC_TW_TO_UNICODE_STATE_0 + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_EUC_TW_TO_UNICODE_STATE_0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext) + { + static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_eState = eState; + static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nPlane = nPlane; + static_cast< ImplEucTwToUnicodeContext * >(pContext)->m_nRow = nRow; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +sal_Size ImplConvertUnicodeToEucTw(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + sal_uInt8 const * pCns116431992Data + = static_cast< ImplEucTwConverterData const * >(pData)-> + m_pUnicodeToCns116431992Data; + sal_Int32 const * pCns116431992PageOffsets + = static_cast< ImplEucTwConverterData const * >(pData)-> + m_pUnicodeToCns116431992PageOffsets; + sal_Int32 const * pCns116431992PlaneOffsets + = static_cast< ImplEucTwConverterData const * >(pData)-> + m_pUnicodeToCns116431992PlaneOffsets; + sal_Unicode nHighSurrogate = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBuf + nDestBytes; + + if (pContext) + nHighSurrogate + = static_cast(pContext)->m_nHighSurrogate; + + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *pSrcBuf++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar)) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar)) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + { + bUndefined = false; + goto bad_input; + } + + assert(rtl::isUnicodeScalarValue(nChar)); + + if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + else + { + sal_Int32 nOffset = pCns116431992PlaneOffsets[nChar >> 16]; + sal_uInt32 nFirst; + sal_uInt32 nLast; + sal_uInt32 nPlane; + if (nOffset == -1) + goto bad_input; + nOffset + = pCns116431992PageOffsets[nOffset + ((nChar & 0xFF00) >> 8)]; + if (nOffset == -1) + goto bad_input; + nFirst = pCns116431992Data[nOffset++]; + nLast = pCns116431992Data[nOffset++]; + nChar &= 0xFF; + if (nChar < nFirst || nChar > nLast) + goto bad_input; + nOffset += 3 * (nChar - nFirst); + nPlane = pCns116431992Data[nOffset++]; + if (nPlane == 0) + goto bad_input; + if (pDestBufEnd - pDestBufPtr < (nPlane == 1 ? 2 : 4)) + goto no_output; + if (nPlane != 1) + { + *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0x8E)); + *pDestBufPtr++ = static_cast< char >(0xA0 + nPlane); + } + *pDestBufPtr++ = static_cast< char >(0xA0 + pCns116431992Data[nOffset++]); + *pDestBufPtr++ = static_cast< char >(0xA0 + pCns116431992Data[nOffset]); + } + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo, nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if (nHighSurrogate != 0 + && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + + if (pContext) + static_cast(pContext)->m_nHighSurrogate + = nHighSurrogate; + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/converteuctw.hxx b/sal/textenc/converteuctw.hxx new file mode 100644 index 000000000..7d2d7294f --- /dev/null +++ b/sal/textenc/converteuctw.hxx @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTEUCTW_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTEUCTW_HXX + +#include + +#include + +struct ImplEucTwConverterData +{ + sal_uInt16 const * m_pCns116431992ToUnicodeData; + sal_Int32 const * m_pCns116431992ToUnicodeRowOffsets; + sal_Int32 const * m_pCns116431992ToUnicodePlaneOffsets; + sal_uInt8 const * m_pUnicodeToCns116431992Data; + sal_Int32 const * m_pUnicodeToCns116431992PageOffsets; + sal_Int32 const * m_pUnicodeToCns116431992PlaneOffsets; +}; + +void * ImplCreateEucTwToUnicodeContext(); + +void ImplResetEucTwToUnicodeContext(void * pContext); + +void ImplDestroyEucTwToUnicodeContext(void * pContext); + +sal_Size ImplConvertEucTwToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +sal_Size ImplConvertUnicodeToEucTw(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/converteuctw.tab b/sal/textenc/converteuctw.tab new file mode 100644 index 000000000..e1b553fb0 --- /dev/null +++ b/sal/textenc/converteuctw.tab @@ -0,0 +1,54 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "context.hxx" +#include "converteuctw.hxx" + +#include "generate/cns116431992.tab" + +ImplEucTwConverterData const aImplEucTwConvertData + = { aImplCns116431992ToUnicodeData, + aImplCns116431992ToUnicodeRowOffsets, + aImplCns116431992ToUnicodePlaneOffsets, + aImplUnicodeToCns116431992Data, + aImplUnicodeToCns116431992PageOffsets, + aImplUnicodeToCns116431992PlaneOffsets }; + +ImplTextEncodingData const aImplEucTwTextEncodingData + = { { &aImplEucTwConvertData, + &ImplConvertEucTwToUnicode, + &ImplConvertUnicodeToEucTw, + &ImplCreateEucTwToUnicodeContext, + &ImplDestroyEucTwToUnicodeContext, + &ImplResetEucTwToUnicodeContext, + &ImplCreateUnicodeToTextContext, + &ImplDestroyUnicodeToTextContext, + &ImplResetUnicodeToTextContext }, + "cns11643-1", + "Big5", + 1, + 4, + 2, + 136, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* SCRIPT_CHINESE_TRADITIONAL */ diff --git a/sal/textenc/convertgb18030.cxx b/sal/textenc/convertgb18030.cxx new file mode 100644 index 000000000..d7963762f --- /dev/null +++ b/sal/textenc/convertgb18030.cxx @@ -0,0 +1,475 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "context.hxx" +#include "converter.hxx" +#include "convertgb18030.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +enum ImplGb18030ToUnicodeState +{ + IMPL_GB_18030_TO_UNICODE_STATE_0, + IMPL_GB_18030_TO_UNICODE_STATE_1, + IMPL_GB_18030_TO_UNICODE_STATE_2, + IMPL_GB_18030_TO_UNICODE_STATE_3 +}; + +struct ImplGb18030ToUnicodeContext +{ + ImplGb18030ToUnicodeState m_eState; + sal_uInt32 m_nCode; +}; + +} + +void * ImplCreateGb18030ToUnicodeContext() +{ + ImplGb18030ToUnicodeContext * pContext = new ImplGb18030ToUnicodeContext; + pContext->m_eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + return pContext; +} + +void ImplResetGb18030ToUnicodeContext(void * pContext) +{ + if (pContext) + static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_eState + = IMPL_GB_18030_TO_UNICODE_STATE_0; +} + +void ImplDestroyGb18030ToUnicodeContext(void * pContext) +{ + delete static_cast< ImplGb18030ToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertGb18030ToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes) +{ + sal_Unicode const * pGb18030Data + = static_cast< ImplGb18030ConverterData const * >(pData)->m_pGb18030ToUnicodeData; + ImplGb180302000ToUnicodeRange const * pGb18030Ranges + = static_cast< ImplGb18030ConverterData const * >(pData)-> + m_pGb18030ToUnicodeRanges; + ImplGb18030ToUnicodeState eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + sal_uInt32 nCode = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + if (pContext) + { + eState = static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_eState; + nCode = static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_nCode; + } + + for (; nConverted < nSrcBytes; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *reinterpret_cast(pSrcBuf++); + switch (eState) + { + case IMPL_GB_18030_TO_UNICODE_STATE_0: + if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + else if (nChar == 0x80) + goto bad_input; + else if (nChar <= 0xFE) + { + nCode = nChar - 0x81; + eState = IMPL_GB_18030_TO_UNICODE_STATE_1; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_GB_18030_TO_UNICODE_STATE_1: + if (nChar >= 0x30 && nChar <= 0x39) + { + nCode = nCode * 10 + (nChar - 0x30); + eState = IMPL_GB_18030_TO_UNICODE_STATE_2; + } + else if ((nChar >= 0x40 && nChar <= 0x7E) + || (nChar >= 0x80 && nChar <= 0xFE)) + { + nCode = nCode * 190 + (nChar <= 0x7E ? nChar - 0x40 : + nChar - 0x80 + 63); + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = pGb18030Data[nCode]; + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_GB_18030_TO_UNICODE_STATE_2: + if (nChar >= 0x81 && nChar <= 0xFE) + { + nCode = nCode * 126 + (nChar - 0x81); + eState = IMPL_GB_18030_TO_UNICODE_STATE_3; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_GB_18030_TO_UNICODE_STATE_3: + if (nChar >= 0x30 && nChar <= 0x39) + { + nCode = nCode * 10 + (nChar - 0x30); + + // 90 30 81 30 to E3 32 9A 35 maps to U+10000 to U+10FFFF: + if (nCode >= 189000 && nCode <= 1237575) + if (pDestBufEnd - pDestBufPtr >= 2) + { + nCode -= 189000 - 0x10000; + pDestBufPtr += rtl::splitSurrogates(nCode, pDestBufPtr); + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + { + ImplGb180302000ToUnicodeRange const * pRange + = pGb18030Ranges; + sal_uInt32 nFirstNonRange = 0; + for (;;) + { + if (pRange->m_nNonRangeDataIndex == -1) + goto bad_input; + else if (nCode < pRange->m_nFirstLinear) + { + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ + = pGb18030Data[ + pRange->m_nNonRangeDataIndex + + (nCode - nFirstNonRange)]; + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + break; + } + else if (nCode < pRange->m_nPastLinear) + { + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ + = static_cast(pRange->m_nFirstUnicode + + (nCode + - pRange-> + m_nFirstLinear)); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + break; + } + nFirstNonRange = (pRange++)->m_nPastLinear; + } + } + eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + } + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++nConverted; + } else { + nConverted = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + startOfCurrentChar = nConverted + 1; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (eState != IMPL_GB_18030_TO_UNICODE_STATE_0 + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_GB_18030_TO_UNICODE_STATE_0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext) + { + static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_eState = eState; + static_cast< ImplGb18030ToUnicodeContext * >(pContext)->m_nCode = nCode; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +sal_Size ImplConvertUnicodeToGb18030(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + sal_uInt32 const * pGb18030Data + = static_cast< ImplGb18030ConverterData const * >(pData)-> + m_pUnicodeToGb18030Data; + ImplUnicodeToGb180302000Range const * pGb18030Ranges + = static_cast< ImplGb18030ConverterData const * >(pData)-> + m_pUnicodeToGb18030Ranges; + sal_Unicode nHighSurrogate = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBuf + nDestBytes; + + if (pContext) + nHighSurrogate + = static_cast(pContext)->m_nHighSurrogate; + + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *pSrcBuf++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar)) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar)) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + { + bUndefined = false; + goto bad_input; + } + + assert(rtl::isUnicodeScalarValue(nChar)); + + if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + else if (nChar < 0x10000) + { + ImplUnicodeToGb180302000Range const * pRange = pGb18030Ranges; + sal_Unicode nFirstNonRange = 0x80; + for (;;) + { + if (nChar < pRange->m_nFirstUnicode) + { + sal_uInt32 nCode + = pGb18030Data[pRange->m_nNonRangeDataIndex + + (nChar - nFirstNonRange)]; + if (pDestBufEnd - pDestBufPtr + >= (nCode <= 0xFFFF ? 2 : 4)) + { + if (nCode > 0xFFFF) + { + *pDestBufPtr++ = static_cast< char >(nCode >> 24); + *pDestBufPtr++ = static_cast< char >(nCode >> 16 & 0xFF); + } + *pDestBufPtr++ = static_cast< char >(nCode >> 8 & 0xFF); + *pDestBufPtr++ = static_cast< char >(nCode & 0xFF); + } + else + goto no_output; + break; + } + if (nChar <= pRange->m_nLastUnicode) + { + if (pDestBufEnd - pDestBufPtr >= 4) + { + sal_uInt32 nCode + = pRange->m_nFirstLinear + + (nChar - pRange->m_nFirstUnicode); + *pDestBufPtr++ = static_cast< char >(nCode / 12600 + 0x81); + *pDestBufPtr++ + = static_cast< char >(nCode / 1260 % 10 + 0x30); + *pDestBufPtr++ = static_cast< char >(nCode / 10 % 126 + 0x81); + *pDestBufPtr++ = static_cast< char >(nCode % 10 + 0x30); + } + else + goto no_output; + break; + } + nFirstNonRange + = static_cast((pRange++)->m_nLastUnicode + 1); + } + } + else + if (pDestBufEnd - pDestBufPtr >= 4) + { + sal_uInt32 nCode = nChar - 0x10000; + *pDestBufPtr++ = static_cast< char >(nCode / 12600 + 0x90); + *pDestBufPtr++ = static_cast< char >(nCode / 1260 % 10 + 0x30); + *pDestBufPtr++ = static_cast< char >(nCode / 10 % 126 + 0x81); + *pDestBufPtr++ = static_cast< char >(nCode % 10 + 0x30); + } + else + goto no_output; + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo, nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if (nHighSurrogate != 0 + && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + + if (pContext) + static_cast(pContext)->m_nHighSurrogate + = nHighSurrogate; + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertgb18030.hxx b/sal/textenc/convertgb18030.hxx new file mode 100644 index 000000000..680384794 --- /dev/null +++ b/sal/textenc/convertgb18030.hxx @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTGB18030_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTGB18030_HXX + +#include + +#include + +struct ImplGb180302000ToUnicodeRange +{ + sal_Int32 m_nNonRangeDataIndex; + sal_uInt32 m_nFirstLinear; + sal_uInt32 m_nPastLinear; + sal_Unicode m_nFirstUnicode; +}; + +struct ImplUnicodeToGb180302000Range +{ + sal_Int32 m_nNonRangeDataIndex; + sal_Unicode m_nFirstUnicode; + sal_Unicode m_nLastUnicode; + sal_uInt32 m_nFirstLinear; +}; + +struct ImplGb18030ConverterData +{ + sal_Unicode const * m_pGb18030ToUnicodeData; + ImplGb180302000ToUnicodeRange const * m_pGb18030ToUnicodeRanges; + sal_uInt32 const * m_pUnicodeToGb18030Data; + ImplUnicodeToGb180302000Range const * m_pUnicodeToGb18030Ranges; +}; + +void * ImplCreateGb18030ToUnicodeContext(); + +void ImplResetGb18030ToUnicodeContext(void * pContext); + +void ImplDestroyGb18030ToUnicodeContext(void * pContext); + +sal_Size ImplConvertGb18030ToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +sal_Size ImplConvertUnicodeToGb18030(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertgb18030.tab b/sal/textenc/convertgb18030.tab new file mode 100644 index 000000000..04064d64d --- /dev/null +++ b/sal/textenc/convertgb18030.tab @@ -0,0 +1,53 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "context.hxx" +#include "convertgb18030.hxx" +#include "generate/gb180302000.tab" + +ImplGb18030ConverterData const aImplGb18030ConvertData + = { aImplGb180302000ToUnicodeData, + aImplGb180302000ToUnicodeRanges, + aImplUnicodeToGb180302000Data, + aImplUnicodeToGb180302000Ranges }; + +ImplTextEncodingData const aImplGb18030TextEncodingData + = { { &aImplGb18030ConvertData, + &ImplConvertGb18030ToUnicode, + &ImplConvertUnicodeToGb18030, + &ImplCreateGb18030ToUnicodeContext, + &ImplDestroyGb18030ToUnicodeContext, + &ImplResetGb18030ToUnicodeContext, + &ImplCreateUnicodeToTextContext, + &ImplDestroyUnicodeToTextContext, + &ImplResetUnicodeToTextContext }, + "gbk-0", + "GB18030", + 1, + 4, + 2, + 134, + RTL_TEXTENCODING_INFO_UNICODE + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CHINESE_SIMPLIFIED */ diff --git a/sal/textenc/convertisciidevangari.cxx b/sal/textenc/convertisciidevangari.cxx new file mode 100644 index 000000000..75fcadcf7 --- /dev/null +++ b/sal/textenc/convertisciidevangari.cxx @@ -0,0 +1,515 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include + +#include "converter.hxx" +#include "unichars.hxx" +#include "convertisciidevangari.hxx" +#include "convertsinglebytetobmpunicode.hxx" + +#include +#include + +using namespace sal::detail::textenc; +using namespace rtl::textenc; + +namespace { + +struct IsciiDevanagariToUnicode +{ + sal_uInt8 m_cPrevChar; + IsciiDevanagariToUnicode() + : m_cPrevChar(0) + { + } + void reset() + { + m_cPrevChar = 0; + } + sal_Size convert(char const* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags, + sal_uInt32* pInfo, sal_Size* pSrcCvtBytes); +}; + +struct UnicodeToIsciiDevanagari +{ + sal_Unicode m_cPrevChar; + sal_Unicode m_cHighSurrogate; + UnicodeToIsciiDevanagari() + : m_cPrevChar(0) + , m_cHighSurrogate(0) + { + } + void reset() + { + m_cPrevChar = 0; + m_cHighSurrogate = 0; + } + sal_Size convert(sal_Unicode const* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtChars); +}; + +} + +const sal_Unicode IsciiDevanagariMap[256] = +{ + 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x0901,0x0902,0x0903,0x0905,0x0906,0x0907,0x0908, + 0x0909,0x090A,0x090B,0x090E,0x090F,0x0910,0x090D,0x0912, + 0x0913,0x0914,0x0911,0x0915,0x0916,0x0917,0x0918,0x0919, + 0x091A,0x091B,0x091C,0x091D,0x091E,0x091F,0x0920,0x0921, + 0x0922,0x0923,0x0924,0x0925,0x0926,0x0927,0x0928,0x0929, + 0x092A,0x092B,0x092C,0x092D,0x092E,0x092F,0x095F,0x0930, + 0x0931,0x0932,0x0933,0x0934,0x0935,0x0936,0x0937,0x0938, + 0x0939,0xFFFF,0x093E,0x093F,0x0940,0x0941,0x0942,0x0943, + 0x0946,0x0947,0x0948,0x0945,0x094A,0x094B,0x094C,0x0949, + 0x094D,0x093C,0x0964,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, + 0xFFFF,0x0966,0x0967,0x0968,0x0969,0x096A,0x096B,0x096C, + 0x096D,0x096E,0x096F,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF +}; + +sal_Size IsciiDevanagariToUnicode::convert( + char const* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags, + sal_uInt32* pInfo, sal_Size* pSrcCvtBytes) +{ + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode* pDestBufPtr = pDestBuf; + sal_Unicode* pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + while (nConverted < nSrcBytes) + { + if (pDestBufPtr == pDestBufEnd) + { + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + sal_Unicode cChar = sal_Unicode(); + sal_uInt8 nIn = static_cast(pSrcBuf[nConverted]); + sal_uInt8 nNext = nConverted < nSrcBytes + 1 ? static_cast(pSrcBuf[nConverted+1]) : 0; + bool bNormal = true; + bool bDouble = false; + //halant + halant E8 E8 -> halant + ZWNJ 094D 200C + //halant + nukta E8 E9 halant + ZWJ 094D 200D + if (m_cPrevChar == 0xE8 && nIn == 0xE8) + { + cChar = 0x200C; + bNormal = false; + } + else if (m_cPrevChar == 0xE8 && nIn == 0xE9) + { + cChar = 0x200D; + bNormal = false; + } + else if (nNext == 0xE9) + { + bNormal = false; + bDouble = true; + switch(nIn) + { + case 0xA1: + cChar = 0x0950; + break; + case 0xA6: + cChar = 0x090C; + break; + case 0xA7: + cChar = 0x0961; + break; + case 0xAA: + cChar = 0x0960; + break; + case 0xB3: + cChar = 0x0958; + break; + case 0xB4: + cChar = 0x0959; + break; + case 0xB5: + cChar = 0x095A; + break; + case 0xBA: + cChar = 0x095B; + break; + case 0xBF: + cChar = 0x095C; + break; + case 0xC0: + cChar = 0x095D; + break; + case 0xC9: + cChar = 0x095E; + break; + case 0xDB: + cChar = 0x0962; + break; + case 0xDC: + cChar = 0x0963; + break; + case 0xDF: + cChar = 0x0944; + break; + case 0xEA: + cChar = 0x093D; + break; + default: + bNormal = true; + bDouble = false; + break; + } + } + + ++nConverted; + if (bDouble) + ++nConverted; + + if (bNormal) + cChar = IsciiDevanagariMap[nIn]; + + bool bUndefined = cChar == 0xffff; + + if (bUndefined) + { + BadInputConversionAction eAction = handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo); + if (eAction == BAD_INPUT_CONTINUE) { + startOfCurrentChar = nConverted; + continue; + } + if (eAction == BAD_INPUT_STOP) { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + break; + } + assert(eAction == BAD_INPUT_NO_OUTPUT); + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + *pDestBufPtr++ = cChar; + m_cPrevChar = bNormal ? nIn : 0; + startOfCurrentChar = nConverted; + } + + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +BmpUnicodeToSingleByteRange const unicodeToISCIIEncoding[] = +{ + { 0x0000, 0x007F - 0x0000, 0x00 }, { 0x0901, 0x0903 - 0x0901, 0xA1 }, + { 0x0905, 0x090B - 0x0905, 0xA4 }, { 0x090D, 0x090D - 0x090D, 0xAE }, + { 0x090E, 0x0910 - 0x090E, 0xAB }, { 0x0911, 0x0911 - 0x0911, 0xB2 }, + { 0x0912, 0x0914 - 0x0912, 0xAF }, { 0x0915, 0x092F - 0x0915, 0xB3 }, + { 0x0930, 0x0939 - 0x0930, 0xCF }, { 0x093C, 0x093C - 0x093C, 0xE9 }, + { 0x093E, 0x0943 - 0x093E, 0xDA }, { 0x0945, 0x0945 - 0x0945, 0xE3 }, + { 0x0946, 0x0948 - 0x0946, 0xE0 }, { 0x0949, 0x0949 - 0x0949, 0xE7 }, + { 0x094A, 0x094C - 0x094A, 0xE4 }, { 0x094D, 0x094D - 0x094D, 0xE8 }, + { 0x095F, 0x095F - 0x095F, 0xCE }, { 0x0964, 0x0964 - 0x0964, 0xEA }, + { 0x0966, 0x096F - 0x0966, 0xF1 } +}; + +sal_Size UnicodeToIsciiDevanagari::convert(sal_Unicode const* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size* pSrcCvtChars) +{ + size_t const entries = SAL_N_ELEMENTS(unicodeToISCIIEncoding); + BmpUnicodeToSingleByteRange const * ranges = unicodeToISCIIEncoding; + + sal_Unicode cHighSurrogate = m_cHighSurrogate; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char* pDestBufPtr = pDestBuf; + char* pDestBufEnd = pDestBuf + nDestBytes; + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 c = *pSrcBuf++; + char cSpecialChar = 0; + if (cHighSurrogate == 0) + { + if (rtl::isHighSurrogate(c)) + { + cHighSurrogate = static_cast< sal_Unicode >(c); + continue; + } + else if (rtl::isLowSurrogate(c)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(c)) + { + c = rtl::combineSurrogates(cHighSurrogate, c); + } + else + { + bUndefined = false; + goto bad_input; + } + assert(rtl::isUnicodeScalarValue(c)); + + //halant + halant E8 E8 -> halant + ZWNJ 094D 200C + //halant + nukta E8 E9 halant + ZWJ 094D 200D + if (m_cPrevChar == 0x094D && c == 0x200C) + cSpecialChar = '\xE8'; + else if (m_cPrevChar == 0x094D && c == 0x200D) + cSpecialChar = '\xE9'; + if (cSpecialChar) + { + if (pDestBufEnd - pDestBufPtr < 1) + { + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + *pDestBufPtr++ = cSpecialChar; + m_cPrevChar = 0; + goto done; + } + switch (c) + { + case 0x0950: + cSpecialChar = '\xA1'; + break; + case 0x090C: + cSpecialChar = '\xA6'; + break; + case 0x0961: + cSpecialChar = '\xA7'; + break; + case 0x0960: + cSpecialChar = '\xAA'; + break; + case 0x0958: + cSpecialChar = '\xB3'; + break; + case 0x0959: + cSpecialChar = '\xB4'; + break; + case 0x095A: + cSpecialChar = '\xB5'; + break; + case 0x095B: + cSpecialChar = '\xBA'; + break; + case 0x095C: + cSpecialChar = '\xBF'; + break; + case 0x095D: + cSpecialChar = '\xC0'; + break; + case 0x095E: + cSpecialChar = '\xC9'; + break; + case 0x0962: + cSpecialChar = '\xDB'; + break; + case 0x0963: + cSpecialChar = '\xDC'; + break; + case 0x0944: + cSpecialChar = '\xDF'; + break; + case 0x093D: + cSpecialChar = '\xEA'; + break; + default: + break; + } + if (cSpecialChar) + { + if (pDestBufEnd - pDestBufPtr < 2) + { + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + *pDestBufPtr++ = cSpecialChar; + *pDestBufPtr++ = '\xE9'; + m_cPrevChar = 0; + goto done; + } + + // Linearly searching through the ranges if probably fastest, assuming + // that most converted characters belong to the ASCII subset: + for (size_t i = 0; i < entries; ++i) + { + if (c < ranges[i].unicode) + { + break; + } + if (c <= sal::static_int_cast< sal_uInt32 >( + ranges[i].unicode + ranges[i].range)) + { + if (pDestBufEnd - pDestBufPtr < 1) + { + goto no_output; + } + *pDestBufPtr++ = static_cast< char >( + ranges[i].byte + (c - ranges[i].unicode)); + m_cPrevChar = c; + goto done; + } + } + goto bad_input; + done: + cHighSurrogate = 0; + continue; + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, c, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, nullptr, + 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + cHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + cHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if (cHighSurrogate != 0 + && ((nInfo + & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0)) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + { + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + } + else + { + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, nullptr, + 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + case sal::detail::textenc::BAD_INPUT_CONTINUE: + cHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + } + m_cHighSurrogate = cHighSurrogate; + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +sal_Size ImplConvertIsciiDevanagariToUnicode(void const*, + void* pContext, char const* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags, + sal_uInt32* pInfo, sal_Size* pSrcCvtBytes) +{ + IsciiDevanagariToUnicode *pCtx = + static_cast(pContext); + return pCtx->convert(pSrcBuf, nSrcBytes, pDestBuf, nDestChars, nFlags, + pInfo, pSrcCvtBytes); +} + +sal_Size ImplConvertUnicodeToIsciiDevanagari(void const*, + void * pContext, sal_Unicode const * pSrcBuf, sal_Size nSrcChars, + char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtChars) +{ + UnicodeToIsciiDevanagari *pCtx = + static_cast(pContext); + return pCtx->convert(pSrcBuf, nSrcChars, + pDestBuf, nDestBytes, nFlags, pInfo, pSrcCvtChars); +} + +void *ImplCreateIsciiDevanagariToUnicodeContext() +{ + return new IsciiDevanagariToUnicode; +} + +void ImplDestroyIsciiDevanagariToUnicodeContext(void * pContext) +{ + IsciiDevanagariToUnicode *pCtx = + static_cast(pContext); + delete pCtx; +} + +void ImplResetIsciiDevanagariToUnicodeContext(void * pContext) +{ + IsciiDevanagariToUnicode *pCtx = + static_cast(pContext); + pCtx->reset(); +} + +void *ImplCreateUnicodeToIsciiDevanagariContext() +{ + return new UnicodeToIsciiDevanagari; +} + +void ImplResetUnicodeToIsciiDevanagariContext(void * pContext) +{ + UnicodeToIsciiDevanagari *pCtx = + static_cast(pContext); + pCtx->reset(); +} + +void ImplDestroyUnicodeToIsciiDevanagariContext(void * pContext) +{ + UnicodeToIsciiDevanagari *pCtx = + static_cast(pContext); + delete pCtx; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertisciidevangari.hxx b/sal/textenc/convertisciidevangari.hxx new file mode 100644 index 000000000..89aeeaef7 --- /dev/null +++ b/sal/textenc/convertisciidevangari.hxx @@ -0,0 +1,39 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTISCIIDEVANGARI_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTISCIIDEVANGARI_HXX + +#include + +sal_Size ImplConvertIsciiDevanagariToUnicode(void const * pData, + void * pContext, char const * pSrcBuf, sal_Size nSrcBytes, + sal_Unicode * pDestBuf, sal_Size nDestChars, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes); + +sal_Size ImplConvertUnicodeToIsciiDevanagari(void const * pData, + void * pContext, sal_Unicode const * pSrcBuf, sal_Size nSrcChars, + char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtChars); + +void *ImplCreateIsciiDevanagariToUnicodeContext(); + +void ImplDestroyIsciiDevanagariToUnicodeContext(void * pContext); + +void ImplResetIsciiDevanagariToUnicodeContext(void * pContext); + +void *ImplCreateUnicodeToIsciiDevanagariContext(); + +void ImplResetUnicodeToIsciiDevanagariContext(void * pContext); + +void ImplDestroyUnicodeToIsciiDevanagariContext(void * pContext); + +#endif // INCLUDED_SAL_TEXTENC_CONVERTISCIIDEVANGARI_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertisciidevangari.tab b/sal/textenc/convertisciidevangari.tab new file mode 100644 index 000000000..c65dc333e --- /dev/null +++ b/sal/textenc/convertisciidevangari.tab @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +#include "convertisciidevangari.hxx" + +ImplTextEncodingData const aImplIsciiDevanagariTextEncodingData + = { { nullptr, + &ImplConvertIsciiDevanagariToUnicode, + &ImplConvertUnicodeToIsciiDevanagari, + &ImplCreateIsciiDevanagariToUnicodeContext, + &ImplDestroyIsciiDevanagariToUnicodeContext, + &ImplResetIsciiDevanagariToUnicodeContext, + &ImplCreateUnicodeToIsciiDevanagariContext, + &ImplDestroyUnicodeToIsciiDevanagariContext, + &ImplResetUnicodeToIsciiDevanagariContext }, + nullptr, + "x-iscii-de ", + 1, + 2, + 2, + 1, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE }; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022cn.cxx b/sal/textenc/convertiso2022cn.cxx new file mode 100644 index 000000000..60c2b5743 --- /dev/null +++ b/sal/textenc/convertiso2022cn.cxx @@ -0,0 +1,873 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "converter.hxx" +#include "convertiso2022cn.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +enum ImplIso2022CnToUnicodeState // order is important: +{ + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO_2, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432_2, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN, + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_ASTERISK +}; + +struct ImplIso2022CnToUnicodeContext +{ + ImplIso2022CnToUnicodeState m_eState; + sal_uInt32 m_nRow; + bool m_bSo; + bool m_b116431; +}; + +enum ImplUnicodeToIso2022CnDesignator +{ + IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE, + IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312, + IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431 +}; + +struct ImplUnicodeToIso2022CnContext +{ + sal_Unicode m_nHighSurrogate; + ImplUnicodeToIso2022CnDesignator m_eSoDesignator; + bool m_b116432Designator; + bool m_bSo; +}; + +} + +void * ImplCreateIso2022CnToUnicodeContext() +{ + ImplIso2022CnToUnicodeContext * pContext = + new ImplIso2022CnToUnicodeContext; + pContext->m_eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + pContext->m_bSo = false; + pContext->m_b116431 = false; + return pContext; +} + +void ImplResetIso2022CnToUnicodeContext(void * pContext) +{ + if (pContext) + { + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_eState + = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_bSo = false; + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_b116431 = false; + } +} + +void ImplDestroyIso2022CnToUnicodeContext(void * pContext) +{ + delete static_cast< ImplIso2022CnToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertIso2022CnToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes) +{ + ImplDBCSToUniLeadTab const * pGb2312Data + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pGb2312ToUnicodeData; + sal_uInt16 const * pCns116431992Data + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pCns116431992ToUnicodeData; + sal_Int32 const * pCns116431992RowOffsets + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pCns116431992ToUnicodeRowOffsets; + sal_Int32 const * pCns116431992PlaneOffsets + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pCns116431992ToUnicodePlaneOffsets; + ImplIso2022CnToUnicodeState eState + = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + sal_uInt32 nRow = 0; + bool bSo = false; + bool b116431 = false; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + if (pContext) + { + eState = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_eState; + nRow = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_nRow; + bSo = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_bSo; + b116431 = static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_b116431; + } + + for (; nConverted < nSrcBytes; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *reinterpret_cast(pSrcBuf++); + sal_uInt32 nPlane; + switch (eState) + { + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII: + if (nChar == 0x0E) // SO + { + bSo = true; + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO; + } + else if (nChar == 0x1B) // ESC + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC; + else if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO: + if (nChar == 0x0F) // SI + { + bSo = false; + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + } + else if (nChar == 0x1B) // ESC + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC; + else if (nChar >= 0x21 && nChar <= 0x7E) + { + nRow = nChar; + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO_2; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO_2: + if (nChar >= 0x21 && nChar <= 0x7E) + if (b116431) + { + nPlane = 0; + goto transform; + } + else + { + sal_uInt16 nUnicode = 0; + sal_uInt32 nFirst; + nRow += 0x80; + nChar += 0x80; + nFirst = pGb2312Data[nRow].mnTrailStart; + if (nChar >= nFirst + && nChar <= pGb2312Data[nRow].mnTrailEnd) + nUnicode = pGb2312Data[nRow]. + mpToUniTrailTab[nChar - nFirst]; + if (nUnicode != 0) + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = static_cast(nUnicode); + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO; + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + goto bad_input; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432: + if (nChar >= 0x21 && nChar <= 0x7E) + { + nRow = nChar; + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432_2; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432_2: + if (nChar >= 0x21 && nChar <= 0x7E) + { + nPlane = 1; + goto transform; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC: + if (nChar == 0x24) // $ + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR; + else if (nChar == 0x4E) // N + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_116432; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR: + if (nChar == 0x29) // ) + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN; + else if (nChar == 0x2A) // * + eState + = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_ASTERISK; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN: + if (nChar == 0x41) // A + { + b116431 = false; + eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO : + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + } + else if (nChar == 0x47) // G + { + b116431 = true; + eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO : + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_CN_TO_UNICODE_STATE_ESC_DOLLAR_ASTERISK: + if (nChar == 0x48) // H + eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO : + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + else + { + bUndefined = false; + goto bad_input; + } + break; + } + continue; + + transform: + { + sal_Int32 nPlaneOffset = pCns116431992PlaneOffsets[nPlane]; + if (nPlaneOffset == -1) + goto bad_input; + else + { + sal_Int32 nOffset + = pCns116431992RowOffsets[nPlaneOffset + (nRow - 0x21)]; + if (nOffset == -1) + goto bad_input; + else + { + sal_uInt32 nFirstLast = pCns116431992Data[nOffset++]; + sal_uInt32 nFirst = nFirstLast & 0xFF; + sal_uInt32 nLast = nFirstLast >> 8; + nChar -= 0x20; + if (nChar >= nFirst && nChar <= nLast) + { + sal_uInt32 nUnicode + = pCns116431992Data[nOffset + (nChar - nFirst)]; + if (nUnicode == 0xFFFF) + goto bad_input; + else if (rtl::isHighSurrogate(nUnicode)) + if (pDestBufEnd - pDestBufPtr >= 2) + { + nOffset += nLast - nFirst + 1; + nFirst = pCns116431992Data[nOffset++]; + *pDestBufPtr++ = static_cast(nUnicode); + *pDestBufPtr++ + = static_cast(pCns116431992Data[ + nOffset + (nChar - nFirst)]); + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nUnicode); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + } + else + goto bad_input; + eState = bSo ? IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO : + IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + } + } + continue; + } + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + b116431 = false; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++nConverted; + } else { + nConverted = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + b116431 = false; + startOfCurrentChar = nConverted + 1; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (eState > IMPL_ISO_2022_CN_TO_UNICODE_STATE_SO + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_ISO_2022_CN_TO_UNICODE_STATE_ASCII; + b116431 = false; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext) + { + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_eState = eState; + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_nRow = nRow; + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_bSo = bSo; + static_cast< ImplIso2022CnToUnicodeContext * >(pContext)->m_b116431 = b116431; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +void * ImplCreateUnicodeToIso2022CnContext() +{ + ImplUnicodeToIso2022CnContext * pContext = + new ImplUnicodeToIso2022CnContext; + pContext->m_nHighSurrogate = 0; + pContext->m_eSoDesignator = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + pContext->m_b116432Designator = false; + pContext->m_bSo = false; + return pContext; +} + +void ImplResetUnicodeToIso2022CnContext(void * pContext) +{ + if (pContext) + { + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_nHighSurrogate = 0; + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_eSoDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_b116432Designator + = false; + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_bSo = false; + } +} + +void ImplDestroyUnicodeToIso2022CnContext(void * pContext) +{ + delete static_cast< ImplUnicodeToIso2022CnContext * >(pContext); +} + +static sal_uInt32 ImplIso2022CnTranslateTo2312(ImplUniToDBCSHighTab const * + pGb2312Data, + sal_uInt32 nChar) +{ + sal_uInt32 nIndex1 = nChar >> 8; + if (nIndex1 < 0x100) + { + sal_uInt32 nIndex2 = nChar & 0xFF; + sal_uInt32 nFirst = pGb2312Data[nIndex1].mnLowStart; + if (nIndex2 >= nFirst && nIndex2 <= pGb2312Data[nIndex1].mnLowEnd) + return pGb2312Data[nIndex1].mpToUniTrailTab[nIndex2 - nFirst] + & 0x7F7F; + } + return 0; +} + +static sal_uInt32 +ImplIso2022CnTranslateTo116431(sal_uInt8 const * pCns116431992Data, + sal_Int32 const * pCns116431992PageOffsets, + sal_Int32 const * pCns116431992PlaneOffsets, + sal_uInt32 nChar) +{ + sal_Int32 nOffset = pCns116431992PlaneOffsets[nChar >> 16]; + sal_uInt32 nFirst; + sal_uInt32 nLast; + sal_uInt32 nPlane; + if (nOffset == -1) + return 0; + nOffset = pCns116431992PageOffsets[nOffset + ((nChar & 0xFF00) >> 8)]; + if (nOffset == -1) + return 0; + nFirst = pCns116431992Data[nOffset++]; + nLast = pCns116431992Data[nOffset++]; + nChar &= 0xFF; + if (nChar < nFirst || nChar > nLast) + return 0; + nOffset += 3 * (nChar - nFirst); + nPlane = pCns116431992Data[nOffset++]; + if (nPlane != 1) + return 0; + return (0x20 + pCns116431992Data[nOffset]) << 8 + | (0x20 + pCns116431992Data[nOffset + 1]); +} + +sal_Size ImplConvertUnicodeToIso2022Cn(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + ImplUniToDBCSHighTab const * pGb2312Data + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pUnicodeToGb2312Data; + sal_uInt8 const * pCns116431992Data + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pUnicodeToCns116431992Data; + sal_Int32 const * pCns116431992PageOffsets + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pUnicodeToCns116431992PageOffsets; + sal_Int32 const * pCns116431992PlaneOffsets + = static_cast< ImplIso2022CnConverterData const * >(pData)-> + m_pUnicodeToCns116431992PlaneOffsets; + sal_Unicode nHighSurrogate = 0; + ImplUnicodeToIso2022CnDesignator eSoDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + bool b116432Designator = false; + bool bSo = false; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBuf + nDestBytes; + bool bWritten; + + if (pContext) + { + nHighSurrogate + = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_nHighSurrogate; + eSoDesignator + = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_eSoDesignator; + b116432Designator = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)-> + m_b116432Designator; + bSo = static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_bSo; + } + + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *pSrcBuf++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar)) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar)) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + { + bUndefined = false; + goto bad_input; + } + + assert(rtl::isUnicodeScalarValue(nChar)); + + if (nChar == 0x0A || nChar == 0x0D) // LF, CR + { + if (bSo) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + bSo = false; + eSoDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + b116432Designator = false; + } + else + goto no_output; + } + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + } + else if (nChar == 0x0E || nChar == 0x0F || nChar == 0x1B) + goto bad_input; + else if (nChar < 0x80) + { + if (bSo) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + bSo = false; + } + else + goto no_output; + } + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + } + else + { + sal_uInt32 nBytes = 0; + ImplUnicodeToIso2022CnDesignator eNewDesignator = + IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + switch (eSoDesignator) + { + case IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE: + nBytes = ImplIso2022CnTranslateTo2312(pGb2312Data, nChar); + if (nBytes != 0) + { + eNewDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312; + break; + } + nBytes = ImplIso2022CnTranslateTo116431( + pCns116431992Data, + pCns116431992PageOffsets, + pCns116431992PlaneOffsets, + nChar); + if (nBytes != 0) + { + eNewDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431; + break; + } + break; + + case IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312: + nBytes = ImplIso2022CnTranslateTo2312(pGb2312Data, nChar); + if (nBytes != 0) + { + eNewDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + break; + } + nBytes = ImplIso2022CnTranslateTo116431( + pCns116431992Data, + pCns116431992PageOffsets, + pCns116431992PlaneOffsets, + nChar); + if (nBytes != 0) + { + eNewDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431; + break; + } + break; + + case IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_116431: + nBytes = ImplIso2022CnTranslateTo116431( + pCns116431992Data, + pCns116431992PageOffsets, + pCns116431992PlaneOffsets, + nChar); + if (nBytes != 0) + { + eNewDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE; + break; + } + nBytes = ImplIso2022CnTranslateTo2312(pGb2312Data, nChar); + if (nBytes != 0) + { + eNewDesignator + = IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312; + break; + } + break; + } + if (nBytes != 0) + { + if (eNewDesignator + != IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_NONE) + { + if (bSo) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + bSo = false; + } + else + goto no_output; + } + if (pDestBufEnd - pDestBufPtr >= 4) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x24; // $ + *pDestBufPtr++ = 0x29; // ) + *pDestBufPtr++ + = eNewDesignator + == IMPL_UNICODE_TO_ISO_2022_CN_DESIGNATOR_2312 ? + 0x41 : 0x47; // A, G + eSoDesignator = eNewDesignator; + } + else + goto no_output; + } + if (!bSo) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0E; // SO + bSo = true; + } + else + goto no_output; + } + if (pDestBufEnd - pDestBufPtr >= 4) + { + *pDestBufPtr++ = static_cast< char >(nBytes >> 8); + *pDestBufPtr++ = static_cast< char >(nBytes & 0xFF); + } + else + goto no_output; + } + else + { + sal_Int32 nOffset = pCns116431992PlaneOffsets[nChar >> 16]; + sal_uInt32 nFirst; + sal_uInt32 nLast; + sal_uInt32 nPlane; + if (nOffset == -1) + goto bad_input; + nOffset + = pCns116431992PageOffsets[nOffset + + ((nChar & 0xFF00) >> 8)]; + if (nOffset == -1) + goto bad_input; + nFirst = pCns116431992Data[nOffset++]; + nLast = pCns116431992Data[nOffset++]; + nChar &= 0xFF; + if (nChar < nFirst || nChar > nLast) + goto bad_input; + nOffset += 3 * (nChar - nFirst); + nPlane = pCns116431992Data[nOffset++]; + if (nPlane != 2) + goto bad_input; + if (!b116432Designator) + { + if (pDestBufEnd - pDestBufPtr >= 4) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x24; // $ + *pDestBufPtr++ = 0x2A; // * + *pDestBufPtr++ = 0x48; // H + b116432Designator = true; + } + else + goto no_output; + } + if (pDestBufEnd - pDestBufPtr >= 4) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x4E; // N + *pDestBufPtr++ + = static_cast< char >(0x20 + pCns116431992Data[nOffset++]); + *pDestBufPtr++ + = static_cast< char >(0x20 + pCns116431992Data[nOffset]); + } + else + goto no_output; + } + } + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo, "\x0F" /* SI */, bSo ? 1 : 0, &bWritten)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + if (bWritten) + bSo = false; + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if ((nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + bool bFlush = true; + if (nHighSurrogate != 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + "\x0F" /* SI */, bSo ? 1 : 0, &bWritten)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + bFlush = false; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + if (bWritten) + bSo = false; + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + if (bFlush && bSo && (nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + bSo = false; + } + else + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + } + } + + if (pContext) + { + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_nHighSurrogate + = nHighSurrogate; + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_eSoDesignator + = eSoDesignator; + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_b116432Designator + = b116432Designator; + static_cast< ImplUnicodeToIso2022CnContext * >(pContext)->m_bSo = bSo; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022cn.hxx b/sal/textenc/convertiso2022cn.hxx new file mode 100644 index 000000000..e858b9f87 --- /dev/null +++ b/sal/textenc/convertiso2022cn.hxx @@ -0,0 +1,73 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTISO2022CN_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTISO2022CN_HXX + +#include +#include +#include "tenchelp.hxx" + +struct ImplIso2022CnConverterData +{ + ImplDBCSToUniLeadTab const * m_pGb2312ToUnicodeData; + sal_uInt16 const * m_pCns116431992ToUnicodeData; + sal_Int32 const * m_pCns116431992ToUnicodeRowOffsets; + sal_Int32 const * m_pCns116431992ToUnicodePlaneOffsets; + ImplUniToDBCSHighTab const * m_pUnicodeToGb2312Data; + sal_uInt8 const * m_pUnicodeToCns116431992Data; + sal_Int32 const * m_pUnicodeToCns116431992PageOffsets; + sal_Int32 const * m_pUnicodeToCns116431992PlaneOffsets; +}; + +void * ImplCreateIso2022CnToUnicodeContext(); + +void ImplResetIso2022CnToUnicodeContext(void * pContext); + +void ImplDestroyIso2022CnToUnicodeContext(void * pContext); + +sal_Size ImplConvertIso2022CnToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +void * ImplCreateUnicodeToIso2022CnContext(); + +void ImplResetUnicodeToIso2022CnContext(void * pContext); + +void ImplDestroyUnicodeToIso2022CnContext(void * pContext); + +sal_Size ImplConvertUnicodeToIso2022Cn(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022cn.tab b/sal/textenc/convertiso2022cn.tab new file mode 100644 index 000000000..14522a658 --- /dev/null +++ b/sal/textenc/convertiso2022cn.tab @@ -0,0 +1,59 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "convertiso2022cn.hxx" +#include "tenchelp.hxx" + +ImplIso2022CnConverterData const aImplIso2022CnConvertData + = { aGB2312UniLeadTab, /* from tcvtscn6.tab */ + aImplCns116431992ToUnicodeData, /* from generate/cns116431992.tab */ + aImplCns116431992ToUnicodeRowOffsets, + /* from generate/cns116431992.tab */ + aImplCns116431992ToUnicodePlaneOffsets, + /* from generate/cns116431992.tab */ + aGB2312DBCSHighTab, /* from tcvtscn6.tab */ + aImplUnicodeToCns116431992Data, /* from generate/cns116431992.tab */ + aImplUnicodeToCns116431992PageOffsets, + /* from generate/cns116431992.tab */ + aImplUnicodeToCns116431992PlaneOffsets }; + /* from generate/cns116431992.tab */ + +ImplTextEncodingData const aImplIso2022CnTextEncodingData + = { { &aImplIso2022CnConvertData, + &ImplConvertIso2022CnToUnicode, + &ImplConvertUnicodeToIso2022Cn, + &ImplCreateIso2022CnToUnicodeContext, + &ImplDestroyIso2022CnToUnicodeContext, + &ImplResetIso2022CnToUnicodeContext, + &ImplCreateUnicodeToIso2022CnContext, + &ImplDestroyUnicodeToIso2022CnContext, + &ImplResetUnicodeToIso2022CnContext }, + "euc-cn", + "ISO-2022-CN", + 1, + 8, + 2, + 134, + RTL_TEXTENCODING_INFO_CONTEXT + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; diff --git a/sal/textenc/convertiso2022jp.cxx b/sal/textenc/convertiso2022jp.cxx new file mode 100644 index 000000000..935bc8515 --- /dev/null +++ b/sal/textenc/convertiso2022jp.cxx @@ -0,0 +1,581 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "converter.hxx" +#include "convertiso2022jp.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +enum ImplIso2022JpToUnicodeState // order is important: +{ + IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII, + IMPL_ISO_2022_JP_TO_UNICODE_STATE_JIS_ROMAN, + IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208, + IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208_2, + IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC, + IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_LPAREN, + IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_DOLLAR +}; + +struct ImplIso2022JpToUnicodeContext +{ + ImplIso2022JpToUnicodeState m_eState; + sal_uInt32 m_nRow; +}; + +struct ImplUnicodeToIso2022JpContext +{ + sal_Unicode m_nHighSurrogate; + bool m_b0208; +}; + +} + +void * ImplCreateIso2022JpToUnicodeContext() +{ + ImplIso2022JpToUnicodeContext * pContext = + new ImplIso2022JpToUnicodeContext; + pContext->m_eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; + return pContext; +} + +void ImplResetIso2022JpToUnicodeContext(void * pContext) +{ + if (pContext) + static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_eState + = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; +} + +void ImplDestroyIso2022JpToUnicodeContext(void * pContext) +{ + delete static_cast< ImplIso2022JpToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertIso2022JpToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes) +{ + ImplDBCSToUniLeadTab const * pJisX0208Data + = static_cast< ImplIso2022JpConverterData const * >(pData)-> + m_pJisX0208ToUnicodeData; + ImplIso2022JpToUnicodeState eState + = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; + sal_uInt32 nRow = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + if (pContext) + { + eState = static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_eState; + nRow = static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_nRow; + } + + for (; nConverted < nSrcBytes; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *reinterpret_cast(pSrcBuf++); + switch (eState) + { + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII: + if (nChar == 0x1B) // ESC + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC; + else if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_JIS_ROMAN: + if (nChar == 0x1B) // ESC + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC; + else if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) + { + switch (nChar) + { + case 0x5C: // REVERSE SOLIDUS (\) + nChar = 0xA5; // YEN SIGN + break; + + case 0x7E: // ~ + nChar = 0xAF; // MACRON + break; + } + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208: + if (nChar == 0x1B) // ESC + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC; + else if (nChar >= 0x21 && nChar <= 0x7E) + { + nRow = nChar; + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208_2; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208_2: + if (nChar >= 0x21 && nChar <= 0x7E) + { + sal_uInt16 nUnicode = 0; + sal_uInt32 nFirst = pJisX0208Data[nRow].mnTrailStart; + if (nChar >= nFirst + && nChar <= pJisX0208Data[nRow].mnTrailEnd) + nUnicode = pJisX0208Data[nRow]. + mpToUniTrailTab[nChar - nFirst]; + if (nUnicode != 0) + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = static_cast(nUnicode); + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208; + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + goto bad_input; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC: + switch (nChar) + { + case 0x24: // $ + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_DOLLAR; + break; + + case 0x28: // ( + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_LPAREN; + break; + + default: + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_LPAREN: + switch (nChar) + { + case 0x42: // B + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; + break; + + case 0x4A: // J + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_JIS_ROMAN; + break; + + default: + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_JP_TO_UNICODE_STATE_ESC_DOLLAR: + switch (nChar) + { + case 0x40: // @ + case 0x42: // B + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208; + break; + + default: + bUndefined = false; + goto bad_input; + } + break; + } + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++nConverted; + } else { + nConverted = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; + startOfCurrentChar = nConverted + 1; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (eState > IMPL_ISO_2022_JP_TO_UNICODE_STATE_0208 + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_ISO_2022_JP_TO_UNICODE_STATE_ASCII; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext) + { + static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_eState = eState; + static_cast< ImplIso2022JpToUnicodeContext * >(pContext)->m_nRow = nRow; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +void * ImplCreateUnicodeToIso2022JpContext() +{ + ImplUnicodeToIso2022JpContext * pContext = + new ImplUnicodeToIso2022JpContext; + pContext->m_nHighSurrogate = 0; + pContext->m_b0208 = false; + return pContext; +} + +void ImplResetUnicodeToIso2022JpContext(void * pContext) +{ + if (pContext) + { + static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_nHighSurrogate = 0; + static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_b0208 = false; + } +} + +void ImplDestroyUnicodeToIso2022JpContext(void * pContext) +{ + delete static_cast< ImplUnicodeToIso2022JpContext * >(pContext); +} + +sal_Size ImplConvertUnicodeToIso2022Jp(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + ImplUniToDBCSHighTab const * pJisX0208Data + = static_cast< ImplIso2022JpConverterData const * >(pData)-> + m_pUnicodeToJisX0208Data; + sal_Unicode nHighSurrogate = 0; + bool b0208 = false; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBuf + nDestBytes; + bool bWritten; + + if (pContext) + { + nHighSurrogate + = static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_nHighSurrogate; + b0208 = static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_b0208; + } + + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *pSrcBuf++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar)) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar)) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + { + bUndefined = false; + goto bad_input; + } + + assert(rtl::isUnicodeScalarValue(nChar)); + + if (nChar == 0x0A || nChar == 0x0D) // LF, CR + { + if (b0208) + { + if (pDestBufEnd - pDestBufPtr >= 3) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x28; // ( + *pDestBufPtr++ = 0x42; // B + b0208 = false; + } + else + goto no_output; + } + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + } + else if (nChar == 0x1B) + goto bad_input; + else if (nChar < 0x80) + { + if (b0208) + { + if (pDestBufEnd - pDestBufPtr >= 3) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x28; // ( + *pDestBufPtr++ = 0x42; // B + b0208 = false; + } + else + goto no_output; + } + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + } + else + { + sal_uInt16 nBytes = 0; + sal_uInt32 nIndex1 = nChar >> 8; + if (nIndex1 < 0x100) + { + sal_uInt32 nIndex2 = nChar & 0xFF; + sal_uInt32 nFirst = pJisX0208Data[nIndex1].mnLowStart; + if (nIndex2 >= nFirst + && nIndex2 <= pJisX0208Data[nIndex1].mnLowEnd) + { + nBytes = pJisX0208Data[nIndex1]. + mpToUniTrailTab[nIndex2 - nFirst]; + if (nBytes == 0) + // For some reason, the tables in tcvtjp4.tab do not + // include these two conversions: + switch (nChar) + { + case 0xA5: // YEN SIGN + nBytes = 0x216F; + break; + + case 0xAF: // MACRON + nBytes = 0x2131; + break; + } + } + } + if (nBytes != 0) + { + if (!b0208) + { + if (pDestBufEnd - pDestBufPtr >= 3) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x24; // $ + *pDestBufPtr++ = 0x42; // B + b0208 = true; + } + else + goto no_output; + } + if (pDestBufEnd - pDestBufPtr >= 2) + { + *pDestBufPtr++ = static_cast< char >(nBytes >> 8); + *pDestBufPtr++ = static_cast< char >(nBytes & 0xFF); + } + else + goto no_output; + } + else + goto bad_input; + } + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo, "\x1B(B", b0208 ? 3 : 0, &bWritten)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + if (bWritten) + b0208 = false; + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if ((nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + bool bFlush = true; + if (nHighSurrogate != 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + "\x1B(B", b0208 ? 3 : 0, &bWritten)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + bFlush = false; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + if (bWritten) + b0208 = false; + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + if (bFlush + && b0208 + && (nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + { + if (pDestBufEnd - pDestBufPtr >= 3) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x28; // ( + *pDestBufPtr++ = 0x42; // B + b0208 = false; + } + else + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + } + } + + if (pContext) + { + static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_nHighSurrogate + = nHighSurrogate; + static_cast< ImplUnicodeToIso2022JpContext * >(pContext)->m_b0208 = b0208; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022jp.hxx b/sal/textenc/convertiso2022jp.hxx new file mode 100644 index 000000000..fea57bc96 --- /dev/null +++ b/sal/textenc/convertiso2022jp.hxx @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTISO2022JP_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTISO2022JP_HXX + +#include +#include +#include "tenchelp.hxx" + +struct ImplIso2022JpConverterData +{ + ImplDBCSToUniLeadTab const * m_pJisX0208ToUnicodeData; + ImplUniToDBCSHighTab const * m_pUnicodeToJisX0208Data; +}; + +void * ImplCreateIso2022JpToUnicodeContext(); + +void ImplResetIso2022JpToUnicodeContext(void * pContext); + +void ImplDestroyIso2022JpToUnicodeContext(void * pContext); + +sal_Size ImplConvertIso2022JpToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +void * ImplCreateUnicodeToIso2022JpContext(); + +void ImplResetUnicodeToIso2022JpContext(void * pContext); + +void ImplDestroyUnicodeToIso2022JpContext(void * pContext); + +sal_Size ImplConvertUnicodeToIso2022Jp(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022jp.tab b/sal/textenc/convertiso2022jp.tab new file mode 100644 index 000000000..c455492b8 --- /dev/null +++ b/sal/textenc/convertiso2022jp.tab @@ -0,0 +1,50 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "convertiso2022jp.hxx" +#include "tenchelp.hxx" + +ImplIso2022JpConverterData const aImplIso2022JpConvertData + = { aJIS0208UniLeadTab, /* from tcvtjp6.tab */ + aJIS0208DBCSHighTab }; /* from tcvtjp6.tab */ + +ImplTextEncodingData const aImplIso2022JpTextEncodingData + = { { &aImplIso2022JpConvertData, + &ImplConvertIso2022JpToUnicode, + &ImplConvertUnicodeToIso2022Jp, + &ImplCreateIso2022JpToUnicodeContext, + &ImplDestroyIso2022JpToUnicodeContext, + &ImplResetIso2022JpToUnicodeContext, + &ImplCreateUnicodeToIso2022JpContext, + &ImplDestroyUnicodeToIso2022JpContext, + &ImplResetUnicodeToIso2022JpContext }, + "euc-jp", + "ISO-2022-JP", + 1, + 8, + 2, + 128, + RTL_TEXTENCODING_INFO_CONTEXT + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_JAPANESE */ diff --git a/sal/textenc/convertiso2022kr.cxx b/sal/textenc/convertiso2022kr.cxx new file mode 100644 index 000000000..5aea5c66c --- /dev/null +++ b/sal/textenc/convertiso2022kr.cxx @@ -0,0 +1,541 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "converter.hxx" +#include "convertiso2022kr.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +enum ImplIso2022KrToUnicodeState // order is important: +{ + IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII, + IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001, + IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001_2, + IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC, + IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR, + IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN +}; + +struct ImplIso2022KrToUnicodeContext +{ + ImplIso2022KrToUnicodeState m_eState; + sal_uInt32 m_nRow; +}; + +enum ImplUnicodeToIso2022KrSet +{ + IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE, + IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII, + IMPL_UNICODE_TO_ISO_2022_KR_SET_1001 +}; + +struct ImplUnicodeToIso2022KrContext +{ + sal_Unicode m_nHighSurrogate; + ImplUnicodeToIso2022KrSet m_eSet; +}; + +} + +void * ImplCreateIso2022KrToUnicodeContext() +{ + ImplIso2022KrToUnicodeContext * pContext = + new ImplIso2022KrToUnicodeContext; + pContext->m_eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + return pContext; +} + +void ImplResetIso2022KrToUnicodeContext(void * pContext) +{ + if (pContext) + static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_eState + = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; +} + +void ImplDestroyIso2022KrToUnicodeContext(void * pContext) +{ + delete static_cast< ImplIso2022KrToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertIso2022KrToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes) +{ + ImplDBCSToUniLeadTab const * pKsX1001Data + = static_cast< ImplIso2022KrConverterData const * >(pData)-> + m_pKsX1001ToUnicodeData; + ImplIso2022KrToUnicodeState eState + = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + sal_uInt32 nRow = 0; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBuf + nDestChars; + sal_Size startOfCurrentChar = 0; + + if (pContext) + { + eState = static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_eState; + nRow = static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_nRow; + } + + for (; nConverted < nSrcBytes; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *reinterpret_cast(pSrcBuf++); + switch (eState) + { + case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII: + if (nChar == 0x0E) // SO + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001; + else if (nChar == 0x1B) // ESC + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC; + else if (nChar < 0x80) + if (pDestBufPtr != pDestBufEnd) { + *pDestBufPtr++ = static_cast(nChar); + startOfCurrentChar = nConverted + 1; + } else + goto no_output; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001: + if (nChar == 0x0F) // SI + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + else if (nChar >= 0x21 && nChar <= 0x7E) + { + nRow = nChar + 0x80; + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001_2; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001_2: + if (nChar >= 0x21 && nChar <= 0x7E) + { + sal_uInt16 nUnicode = 0; + sal_uInt32 nFirst = pKsX1001Data[nRow].mnTrailStart; + nChar += 0x80; + if (nChar >= nFirst && nChar <= pKsX1001Data[nRow].mnTrailEnd) + nUnicode = pKsX1001Data[nRow]. + mpToUniTrailTab[nChar - nFirst]; + if (nUnicode != 0) + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = static_cast(nUnicode); + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001; + startOfCurrentChar = nConverted + 1; + } + else + goto no_output; + else + goto bad_input; + } + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC: + if (nChar == 0x24) // $ + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR: + if (nChar == 0x29) // ) + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN; + else + { + bUndefined = false; + goto bad_input; + } + break; + + case IMPL_ISO_2022_KR_TO_UNICODE_STATE_ESC_DOLLAR_RPAREN: + if (nChar == 0x43) // C + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + else + { + bUndefined = false; + goto bad_input; + } + break; + } + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + bUndefined, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++nConverted; + } else { + nConverted = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + startOfCurrentChar = nConverted + 1; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (eState > IMPL_ISO_2022_KR_TO_UNICODE_STATE_1001 + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + nConverted = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + eState = IMPL_ISO_2022_KR_TO_UNICODE_STATE_ASCII; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext) + { + static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_eState = eState; + static_cast< ImplIso2022KrToUnicodeContext * >(pContext)->m_nRow = nRow; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtBytes) + *pSrcCvtBytes = nConverted; + + return pDestBufPtr - pDestBuf; +} + +void * ImplCreateUnicodeToIso2022KrContext() +{ + ImplUnicodeToIso2022KrContext * pContext = + new ImplUnicodeToIso2022KrContext; + pContext->m_nHighSurrogate = 0; + pContext->m_eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE; + return pContext; +} + +void ImplResetUnicodeToIso2022KrContext(void * pContext) +{ + if (pContext) + { + static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_nHighSurrogate = 0; + static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_eSet + = IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE; + } +} + +void ImplDestroyUnicodeToIso2022KrContext(void * pContext) +{ + delete static_cast< ImplUnicodeToIso2022KrContext * >(pContext); +} + +sal_Size ImplConvertUnicodeToIso2022Kr(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + ImplUniToDBCSHighTab const * pKsX1001Data + = static_cast< ImplIso2022KrConverterData const * >(pData)-> + m_pUnicodeToKsX1001Data; + sal_Unicode nHighSurrogate = 0; + ImplUnicodeToIso2022KrSet eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE; + sal_uInt32 nInfo = 0; + sal_Size nConverted = 0; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBuf + nDestBytes; + bool bWritten; + + if (pContext) + { + nHighSurrogate + = static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_nHighSurrogate; + eSet = static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_eSet; + } + + if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_NONE) + { + if (pDestBufEnd - pDestBufPtr >= 4) + { + *pDestBufPtr++ = 0x1B; // ESC + *pDestBufPtr++ = 0x24; // $ + *pDestBufPtr++ = 0x29; // ) + *pDestBufPtr++ = 0x43; // C + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII; + } + else + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + } + + if ((nInfo & RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL) == 0) + for (; nConverted < nSrcChars; ++nConverted) + { + bool bUndefined = true; + sal_uInt32 nChar = *pSrcBuf++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar)) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar)) + { + bUndefined = false; + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar)) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + { + bUndefined = false; + goto bad_input; + } + + assert(rtl::isUnicodeScalarValue(nChar)); + + if (nChar == 0x0A || nChar == 0x0D) // LF, CR + { + if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_1001) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII; + } + else + goto no_output; + } + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + } + else if (nChar == 0x0E || nChar == 0x0F || nChar == 0x1B) + goto bad_input; + else if (nChar < 0x80) + { + if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_1001) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII; + } + else + goto no_output; + } + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + } + else + { + sal_uInt16 nBytes = 0; + sal_uInt32 nIndex1 = nChar >> 8; + if (nIndex1 < 0x100) + { + sal_uInt32 nIndex2 = nChar & 0xFF; + sal_uInt32 nFirst = pKsX1001Data[nIndex1].mnLowStart; + if (nIndex2 >= nFirst + && nIndex2 <= pKsX1001Data[nIndex1].mnLowEnd) + nBytes = pKsX1001Data[nIndex1]. + mpToUniTrailTab[nIndex2 - nFirst]; + } + if (nBytes != 0) + { + if (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0E; // SO + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_1001; + } + else + goto no_output; + } + if (pDestBufEnd - pDestBufPtr >= 2) + { + *pDestBufPtr++ = static_cast< char >((nBytes >> 8) & 0x7F); + *pDestBufPtr++ = static_cast< char >(nBytes & 0x7F); + } + else + goto no_output; + } + else + goto bad_input; + } + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + bUndefined, nChar, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo, "\x0F" /* SI */, + eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII ? 0 : 1, + &bWritten)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + if (bWritten) + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII; + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBuf; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if ((nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + bool bFlush = true; + if (nHighSurrogate != 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + "\x0F" /* SI */, + (eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII + ? 0 : 1), + &bWritten)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + bFlush = false; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + if (bWritten) + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII; + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + if (bFlush + && eSet == IMPL_UNICODE_TO_ISO_2022_KR_SET_1001 + && (nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + { + if (pDestBufPtr != pDestBufEnd) + { + *pDestBufPtr++ = 0x0F; // SI + eSet = IMPL_UNICODE_TO_ISO_2022_KR_SET_ASCII; + } + else + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + } + } + + if (pContext) + { + static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_nHighSurrogate + = nHighSurrogate; + static_cast< ImplUnicodeToIso2022KrContext * >(pContext)->m_eSet = eSet; + } + if (pInfo) + *pInfo = nInfo; + if (pSrcCvtChars) + *pSrcCvtChars = nConverted; + + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022kr.hxx b/sal/textenc/convertiso2022kr.hxx new file mode 100644 index 000000000..3e153d5b8 --- /dev/null +++ b/sal/textenc/convertiso2022kr.hxx @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTISO2022KR_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTISO2022KR_HXX + +#include +#include +#include "tenchelp.hxx" + +struct ImplIso2022KrConverterData +{ + ImplDBCSToUniLeadTab const * m_pKsX1001ToUnicodeData; + ImplUniToDBCSHighTab const * m_pUnicodeToKsX1001Data; +}; + +void * ImplCreateIso2022KrToUnicodeContext(); + +void ImplResetIso2022KrToUnicodeContext(void * pContext); + +void ImplDestroyIso2022KrToUnicodeContext(void * pContext); + +sal_Size ImplConvertIso2022KrToUnicode(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +void * ImplCreateUnicodeToIso2022KrContext(); + +void ImplResetUnicodeToIso2022KrContext(void * pContext); + +void ImplDestroyUnicodeToIso2022KrContext(void * pContext); + +sal_Size ImplConvertUnicodeToIso2022Kr(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertiso2022kr.tab b/sal/textenc/convertiso2022kr.tab new file mode 100644 index 000000000..8b139f6e8 --- /dev/null +++ b/sal/textenc/convertiso2022kr.tab @@ -0,0 +1,50 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include "convertiso2022kr.hxx" +#include "tenchelp.hxx" + +ImplIso2022KrConverterData const aImplIso2022KrConvertData + = { aKSC5601UniLeadTab, /* from tcvtkr6.tab */ + aKSC5601DBCSHighTab }; /* from tcvtkr6.tab */ + +ImplTextEncodingData const aImplIso2022KrTextEncodingData + = { { &aImplIso2022KrConvertData, + &ImplConvertIso2022KrToUnicode, + &ImplConvertUnicodeToIso2022Kr, + &ImplCreateIso2022KrToUnicodeContext, + &ImplDestroyIso2022KrToUnicodeContext, + &ImplResetIso2022KrToUnicodeContext, + &ImplCreateUnicodeToIso2022KrContext, + &ImplDestroyUnicodeToIso2022KrContext, + &ImplResetUnicodeToIso2022KrContext }, + "euc-kr", + "ISO-2022-KR", + 1, + 8, + 2, + 130, + RTL_TEXTENCODING_INFO_CONTEXT + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_KOREAN */ diff --git a/sal/textenc/convertsimple.cxx b/sal/textenc/convertsimple.cxx new file mode 100644 index 000000000..2738acc13 --- /dev/null +++ b/sal/textenc/convertsimple.cxx @@ -0,0 +1,665 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +#include "convertsimple.hxx" +#include "handleundefinedunicodetotextchar.hxx" +#include "tenchelp.hxx" + +#define IMPL_MAX_REPLACECHAR 5 + +namespace { + +struct ImplReplaceCharData +{ + sal_uInt16 mnUniChar; + sal_uInt16 mnReplaceChar; +}; + +ImplReplaceCharData const aImplRepCharTab[] = +{ + { 0x00A0, 0x0020 }, /* NO-BREAK-SPACE */ + { 0x00A1, 0x0021 }, /* INVERTED EXCLAMATION MARK */ + { 0x00B7, 0x0045 }, /* MIDDLE DOT */ + { 0x00BF, 0x003F }, /* INVERTED QUESTION MARK */ + { 0x00D7, 0x002A }, /* MULTIPLICATION SIGN */ + { 0x00F7, 0x002F }, /* DIVISION SIGN */ + { 0x2000, 0x0020 }, /* EN QUAD */ + { 0x2001, 0x0020 }, /* EM QUAD */ + { 0x2002, 0x0020 }, /* EN SPACE */ + { 0x2003, 0x0020 }, /* EM SPACE */ + { 0x2004, 0x0020 }, /* THREE-PER-EM SPACE */ + { 0x2005, 0x0020 }, /* FOUR-PER-EM SPACE */ + { 0x2006, 0x0020 }, /* SIX-PER-EM SPACE */ + { 0x2007, 0x0020 }, /* FIGURE SPACE */ + { 0x2008, 0x0020 }, /* PUNCTUATION SPACE */ + { 0x2009, 0x0020 }, /* THIN SPACE */ + { 0x200A, 0x0020 }, /* HAIR SPACE */ + { 0x2010, 0x002D }, /* HYPHEN */ + { 0x2011, 0x002D }, /* NON-BREAKING HYPHEN */ + { 0x2012, 0x002D }, /* FIGURE DASH */ + { 0x2013, 0x002D }, /* EN DASH */ + { 0x2014, 0x002D }, /* EM DASH */ + { 0x2015, 0x002D }, /* HORIZONTAL BAR */ + { 0x2018, 0x0027 }, /* LEFT SINGLE QUOTATION MARK */ + { 0x2019, 0x0027 }, /* RIGHT SINGLE QUOTATION MARK */ + { 0x201A, 0x002C }, /* SINGLE LOW-9 QUOTATION MARK */ + { 0x201B, 0x0027 }, /* SINGLE HIGH-RESERVED-9 QUOTATION MARK */ + { 0x201C, 0x0022 }, /* LEFT DOUBLE QUOTATION MARK */ + { 0x201D, 0x0022 }, /* RIGHT DOUBLE QUOTATION MARK */ + { 0x201E, 0x0022 }, /* DOUBLE LOW-9 QUOTATION MARK */ + { 0x201F, 0x0022 }, /* DOUBLE HIGH-RESERVED-9 QUOTATION MARK */ + { 0x2022, 0x002D }, /* BULLET */ + { 0x2023, 0x002D }, /* TRIANGULAR BULLET */ + { 0x2024, 0x002D }, /* ONE DOT LEADER */ + { 0x2027, 0x002D }, /* HYPHENATION POINT */ + { 0x2028, 0x000A }, /* LINE SEPARATOR */ + { 0x2029, 0x000D }, /* PARAGRAPH SEPARATOR */ + { 0x2032, 0x0027 }, /* PRIME */ + { 0x2033, 0x0022 }, /* DOUBLE PRIME */ + { 0x2035, 0x0027 }, /* RESERVED PRIME */ + { 0x2036, 0x0022 }, /* RESERVED DOUBLE PRIME */ + { 0x2039, 0x003C }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */ + { 0x203A, 0x003E }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */ + { 0x2043, 0x002D }, /* HYPHEN BULLET */ + { 0x2044, 0x002F }, /* FRACTION SLASH */ + { 0x2160, 0x0049 }, /* ROMAN NUMERAL ONE */ + { 0x2164, 0x0056 }, /* ROMAN NUMERAL FIVE */ + { 0x2169, 0x0058 }, /* ROMAN NUMERAL TEN */ + { 0x216C, 0x004C }, /* ROMAN NUMERAL FIFTY */ + { 0x216D, 0x0043 }, /* ROMAN NUMERAL ONE HUNDRED */ + { 0x216E, 0x0044 }, /* ROMAN NUMERAL FIVE HUNDRED */ + { 0x216F, 0x004D }, /* ROMAN NUMERAL ONE THOUSAND */ + { 0x2170, 0x0069 }, /* SMALL ROMAN NUMERAL ONE */ + { 0x2174, 0x0076 }, /* SMALL ROMAN NUMERAL FIVE */ + { 0x2179, 0x0078 }, /* SMALL ROMAN NUMERAL TEN */ + { 0x217C, 0x006C }, /* SMALL ROMAN NUMERAL FIFTY */ + { 0x217D, 0x0063 }, /* SMALL ROMAN NUMERAL ONE HUNDRED */ + { 0x217E, 0x0064 }, /* SMALL ROMAN NUMERAL FIVE HUNDRED */ + { 0x217F, 0x006D }, /* SMALL ROMAN NUMERAL ONE THOUSAND */ + { 0x2215, 0x002F }, /* DIVISION SLASH */ + { 0x2217, 0x002A }, /* ASTERISK OPERATOR */ + { 0xFF00, 0x0020 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF01, 0x0021 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF02, 0x0022 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF03, 0x0023 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF04, 0x0024 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF05, 0x0025 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF06, 0x0026 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF07, 0x0027 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF08, 0x0028 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF09, 0x0029 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF0A, 0x002A }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF0B, 0x002B }, /* FULLWIDTH ASCII FORMS */ + { 0xFF0C, 0x002C }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF0D, 0x002D }, /* FULLWIDTH ASCII FORMS */ + { 0xFF0E, 0x002E }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF0F, 0x002F }, /* FULLWIDTH ASCII FORMS */ + { 0xFF10, 0x0030 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF11, 0x0031 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF12, 0x0032 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF13, 0x0033 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF14, 0x0034 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF15, 0x0035 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF16, 0x0036 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF17, 0x0037 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF18, 0x0038 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF19, 0x0039 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF1A, 0x003A }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF1B, 0x003B }, /* FULLWIDTH ASCII FORMS */ + { 0xFF1C, 0x003C }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF1D, 0x003D }, /* FULLWIDTH ASCII FORMS */ + { 0xFF1E, 0x003E }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF1F, 0x003F }, /* FULLWIDTH ASCII FORMS */ + { 0xFF20, 0x0040 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF21, 0x0041 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF22, 0x0042 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF23, 0x0043 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF24, 0x0044 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF25, 0x0045 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF26, 0x0046 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF27, 0x0047 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF28, 0x0048 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF29, 0x0049 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF2A, 0x004A }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF2B, 0x004B }, /* FULLWIDTH ASCII FORMS */ + { 0xFF2C, 0x004C }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF2D, 0x004D }, /* FULLWIDTH ASCII FORMS */ + { 0xFF2E, 0x004E }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF2F, 0x004F }, /* FULLWIDTH ASCII FORMS */ + { 0xFF30, 0x0050 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF31, 0x0051 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF32, 0x0052 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF33, 0x0053 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF34, 0x0054 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF35, 0x0055 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF36, 0x0056 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF37, 0x0057 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF38, 0x0058 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF39, 0x0059 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF3A, 0x005A }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF3B, 0x005B }, /* FULLWIDTH ASCII FORMS */ + { 0xFF3C, 0x005C }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF3D, 0x005D }, /* FULLWIDTH ASCII FORMS */ + { 0xFF3E, 0x005E }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF3F, 0x005F }, /* FULLWIDTH ASCII FORMS */ + { 0xFF40, 0x0060 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF41, 0x0061 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF42, 0x0062 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF43, 0x0063 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF44, 0x0064 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF45, 0x0065 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF46, 0x0066 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF47, 0x0067 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF48, 0x0068 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF49, 0x0069 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF4A, 0x006A }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF4B, 0x006B }, /* FULLWIDTH ASCII FORMS */ + { 0xFF4C, 0x006C }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF4D, 0x006D }, /* FULLWIDTH ASCII FORMS */ + { 0xFF4E, 0x006E }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF4F, 0x006F }, /* FULLWIDTH ASCII FORMS */ + { 0xFF50, 0x0070 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF51, 0x0071 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF52, 0x0072 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF53, 0x0073 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF54, 0x0074 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF55, 0x0075 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF56, 0x0076 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF57, 0x0077 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF58, 0x0078 }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF59, 0x0079 }, /* FULLWIDTH ASCII FORMS */ + { 0xFF5A, 0x007A }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF5B, 0x007B }, /* FULLWIDTH ASCII FORMS */ + { 0xFF5C, 0x007C }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF5D, 0x007D }, /* FULLWIDTH ASCII FORMS */ + { 0xFF5E, 0x007E }, /* FULLWIDTH ASCII FORMS*/ + { 0xFF5F, 0x007F }, /* FULLWIDTH ASCII FORMS */ + { 0xFF61, 0x3002 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF62, 0x300C }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF63, 0x300D }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF64, 0x3001 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF65, 0x30FB }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF66, 0x30F2 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF67, 0x30A1 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF68, 0x30A3 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF69, 0x30A5 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF6A, 0x30A7 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF6B, 0x30A9 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF6C, 0x30E3 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF6D, 0x30E5 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF6E, 0x30E7 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF6F, 0x30C3 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF70, 0x30FC }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF71, 0x30A2 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF72, 0x30A4 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF73, 0x30A6 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF74, 0x30A8 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF75, 0x30AA }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF76, 0x30AB }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF77, 0x30AD }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF78, 0x30AF }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF79, 0x30B1 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF7A, 0x30B3 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF7B, 0x30B5 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF7C, 0x30B7 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF7D, 0x30B9 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF7E, 0x30BB }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF7F, 0x30BD }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF80, 0x30BF }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF81, 0x30C1 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF82, 0x30C4 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF83, 0x30C6 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF84, 0x30C8 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF85, 0x30CA }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF86, 0x30CB }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF87, 0x30CC }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF88, 0x30CD }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF89, 0x30CE }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF8A, 0x30CF }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF8B, 0x30D2 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF8C, 0x30D5 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF8D, 0x30D8 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF8E, 0x30DB }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF8F, 0x30DE }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF90, 0x30DF }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF91, 0x30E0 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF92, 0x30E1 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF93, 0x30E2 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF94, 0x30E4 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF95, 0x30E6 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF96, 0x30E8 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF97, 0x30E9 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF98, 0x30EA }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF99, 0x30EB }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF9A, 0x30EC }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF9B, 0x30ED }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF9C, 0x30EF }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF9D, 0x30F3 }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF9E, 0x309B }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFF9F, 0x309C }, /* HALFWIDTH KATAKANA FORMS */ + { 0xFFA0, 0x3164 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA1, 0x3131 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA2, 0x3132 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA3, 0x3133 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA4, 0x3134 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA5, 0x3135 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA6, 0x3136 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA7, 0x3137 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA8, 0x3138 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFA9, 0x3139 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFAA, 0x313A }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFAB, 0x313B }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFAC, 0x313C }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFAD, 0x313D }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFAE, 0x313E }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFAF, 0x313F }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB0, 0x3140 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB1, 0x3141 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB2, 0x3142 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB3, 0x3143 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB4, 0x3144 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB5, 0x3145 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB6, 0x3146 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB7, 0x3147 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB8, 0x3148 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFB9, 0x3149 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFBA, 0x314A }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFBB, 0x314B }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFBC, 0x314C }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFBD, 0x314D }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFBE, 0x314E }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFC2, 0x314F }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFC3, 0x3150 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFC4, 0x3151 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFC5, 0x3152 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFC6, 0x3153 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFC7, 0x3154 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFCA, 0x3155 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFCB, 0x3156 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFCC, 0x3157 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFCD, 0x3158 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFCE, 0x3159 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFCF, 0x315A }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFD2, 0x315B }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFD3, 0x315C }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFD4, 0x315D }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFD5, 0x315E }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFD6, 0x315F }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFD7, 0x3160 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFDA, 0x3161 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFDB, 0x3162 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFDC, 0x3163 }, /* HALFWIDTH HANGUL FORMS */ + { 0xFFE0, 0x00A2 }, /* FULLWIDTH CENT SIGN */ + { 0xFFE1, 0x00A3 }, /* FULLWIDTH POUND SIGN */ + { 0xFFE2, 0x00AC }, /* FULLWIDTH NOT SIGN */ + { 0xFFE3, 0x00AF }, /* FULLWIDTH MACRON */ + { 0xFFE4, 0x00A6 }, /* FULLWIDTH BROKEN BAR */ + { 0xFFE5, 0x00A5 }, /* FULLWIDTH YEN SIGN */ + { 0xFFE6, 0x20A9 }, /* FULLWIDTH WON SIGN */ + { 0xFFE8, 0x2502 }, /* HALFWIDTH FORMS LIGHT VERTICAL */ + { 0xFFE9, 0x2190 }, /* HALFWIDTH LEFTWARDS ARROW */ + { 0xFFEA, 0x2191 }, /* HALFWIDTH UPWARDS ARROW */ + { 0xFFEB, 0x2192 }, /* HALFWIDTH RIGHTWARDS ARROW */ + { 0xFFEC, 0x2193 }, /* HALFWIDTH DOWNWARDS ARROW */ + { 0xFFED, 0x25A0 }, /* HALFWIDTH BLACK SQUARE */ + { 0xFFEE, 0x25CB }, /* HALFWIDTH WHITE CIRCLE */ + { 0xFFFD, 0x003F } /* REPLACEMENT CHARACTER */ +}; + +sal_uInt16 ImplGetReplaceChar( sal_Unicode c ) +{ + sal_uInt16 nLow; + sal_uInt16 nHigh; + sal_uInt16 nMid; + sal_uInt16 nCompareChar; + const ImplReplaceCharData* pCharData; + + nLow = 0; + nHigh = SAL_N_ELEMENTS( aImplRepCharTab ) - 1; + do + { + nMid = (nLow+nHigh)/2; + pCharData = aImplRepCharTab+nMid; + nCompareChar = pCharData->mnUniChar; + if ( c < nCompareChar ) + { + if ( !nMid ) + break; + nHigh = nMid-1; + } + else + { + if ( c > nCompareChar ) + nLow = nMid+1; + else + return pCharData->mnReplaceChar; + } + } + while ( nLow <= nHigh ); + + return 0; +} + +struct ImplReplaceCharStrData +{ + sal_uInt16 mnUniChar; + sal_uInt16 maReplaceChars[IMPL_MAX_REPLACECHAR]; +}; + +ImplReplaceCharStrData const aImplRepCharStrTab[] = +{ + { 0x00A9, { 0x0028, 0x0063, 0x0029, 0x0000, 0x0000 } }, /* COPYRIGHT SIGN */ + { 0x00AB, { 0x003C, 0x003C, 0x0000, 0x0000, 0x0000 } }, /* LEFT-POINTING-DOUBLE ANGLE QUOTATION MARK */ + { 0x0AE0, { 0x0028, 0x0072, 0x0029, 0x0000, 0x0000 } }, /* REGISTERED SIGN */ + { 0x00BB, { 0x003E, 0x003E, 0x0000, 0x0000, 0x0000 } }, /* RIGHT-POINTING-DOUBLE ANGLE QUOTATION MARK */ + { 0x00BC, { 0x0031, 0x002F, 0x0034, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE QUARTER */ + { 0x00BD, { 0x0031, 0x002F, 0x0032, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE HALF */ + { 0x00BE, { 0x0033, 0x002F, 0x0034, 0x0000, 0x0000 } }, /* VULGAR FRACTION THREE QUARTERS */ + { 0x00C6, { 0x0041, 0x0045, 0x0000, 0x0000, 0x0000 } }, /* LATIN CAPITAL LETTER AE */ + { 0x00E6, { 0x0061, 0x0065, 0x0000, 0x0000, 0x0000 } }, /* LATIN SMALL LETTER AE */ + { 0x0152, { 0x004F, 0x0045, 0x0000, 0x0000, 0x0000 } }, /* LATIN CAPITAL LIGATURE OE */ + { 0x0153, { 0x006F, 0x0065, 0x0000, 0x0000, 0x0000 } }, /* LATIN SMALL LIGATURE OE */ + { 0x2025, { 0x002E, 0x002E, 0x0000, 0x0000, 0x0000 } }, /* TWO DOT LEADER */ + { 0x2026, { 0x002E, 0x002E, 0x002E, 0x0000, 0x0000 } }, /* HORIZONTAL ELLIPSES */ + { 0x2034, { 0x0027, 0x0027, 0x0027, 0x0000, 0x0000 } }, /* TRIPLE PRIME */ + { 0x2037, { 0x0027, 0x0027, 0x0027, 0x0000, 0x0000 } }, /* REVERSED TRIPLE PRIME */ + { 0x20AC, { 0x0045, 0x0055, 0x0052, 0x0000, 0x0000 } }, /* EURO SIGN */ + { 0x2122, { 0x0028, 0x0074, 0x006D, 0x0029, 0x0000 } }, /* TRADE MARK SIGN */ + { 0x2153, { 0x0031, 0x002F, 0x0033, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE THIRD */ + { 0x2154, { 0x0032, 0x002F, 0x0033, 0x0000, 0x0000 } }, /* VULGAR FRACTION TWO THIRD */ + { 0x2155, { 0x0031, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE FIFTH */ + { 0x2156, { 0x0032, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION TWO FIFTH */ + { 0x2157, { 0x0033, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION THREE FIFTH */ + { 0x2158, { 0x0034, 0x002F, 0x0035, 0x0000, 0x0000 } }, /* VULGAR FRACTION FOUR FIFTH */ + { 0x2159, { 0x0031, 0x002F, 0x0036, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE SIXTH */ + { 0x215A, { 0x0035, 0x002F, 0x0036, 0x0000, 0x0000 } }, /* VULGAR FRACTION FIVE SIXTH */ + { 0x215B, { 0x0031, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION ONE EIGHTH */ + { 0x215C, { 0x0033, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION THREE EIGHTH */ + { 0x215D, { 0x0035, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION FIVE EIGHTH */ + { 0x215E, { 0x0037, 0x002F, 0x0038, 0x0000, 0x0000 } }, /* VULGAR FRACTION SEVEN EIGHTH */ + { 0x215F, { 0x0031, 0x002F, 0x0000, 0x0000, 0x0000 } }, /* FRACTION NUMERATOR ONE */ + { 0x2161, { 0x0049, 0x0049, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL TWO */ + { 0x2162, { 0x0049, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL THREE */ + { 0x2163, { 0x0049, 0x0056, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL FOUR */ + { 0x2165, { 0x0056, 0x0049, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL SIX */ + { 0x2166, { 0x0056, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL SEVEN */ + { 0x2168, { 0x0056, 0x0049, 0x0049, 0x0049, 0x0000 } }, /* ROMAN NUMERAL EIGHT */ + { 0x2169, { 0x0049, 0x0058, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL NINE */ + { 0x216A, { 0x0058, 0x0049, 0x0000, 0x0000, 0x0000 } }, /* ROMAN NUMERAL ELEVEN */ + { 0x216B, { 0x0058, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL TWELVE */ + { 0x2171, { 0x0069, 0x0069, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL TWO */ + { 0x2172, { 0x0069, 0x0069, 0x0069, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL THREE */ + { 0x2173, { 0x0069, 0x0076, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL FOUR */ + { 0x2175, { 0x0076, 0x0069, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL SIX */ + { 0x2176, { 0x0076, 0x0069, 0x0069, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL SEVEN */ + { 0x2178, { 0x0076, 0x0069, 0x0069, 0x0069, 0x0000 } }, /* SMALL ROMAN NUMERAL EIGHT */ + { 0x2179, { 0x0069, 0x0078, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL NINE */ + { 0x217A, { 0x0078, 0x0069, 0x0000, 0x0000, 0x0000 } }, /* SMALL ROMAN NUMERAL ELEVEN */ + { 0x217B, { 0x0058, 0x0069, 0x0069, 0x0000, 0x0000 } } /* SMALL ROMAN NUMERAL TWELVE */ +}; + +const sal_uInt16* ImplGetReplaceString( sal_Unicode c ) +{ + sal_uInt16 nLow; + sal_uInt16 nHigh; + sal_uInt16 nMid; + sal_uInt16 nCompareChar; + const ImplReplaceCharStrData* pCharData; + + nLow = 0; + nHigh = SAL_N_ELEMENTS( aImplRepCharStrTab ) - 1; + do + { + nMid = (nLow+nHigh)/2; + pCharData = aImplRepCharStrTab+nMid; + nCompareChar = pCharData->mnUniChar; + if ( c < nCompareChar ) + { + if ( !nMid ) + break; + nHigh = nMid-1; + } + else + { + if ( c > nCompareChar ) + nLow = nMid+1; + else + return pCharData->maReplaceChars; + } + } + while ( nLow <= nHigh ); + + return nullptr; +} + +// Writes 0--2 characters to dest: +int ImplConvertUnicodeCharToChar( + const ImplByteConvertData* pConvertData, sal_Unicode c, char * dest ) +{ + const ImplUniCharTabData* pToCharExTab; + + if ( c < 0x80 ) + { + dest[0] = static_cast< char >(c); + return 1; + } + if ( (c >= pConvertData->mnToCharStart1) && (c <= pConvertData->mnToCharEnd1) ) + { + dest[0] = static_cast< char >(pConvertData->mpToCharTab1[c-pConvertData->mnToCharStart1]); + if ( dest[0] != 0 ) + return 1; + } + else if ( (c >= pConvertData->mnToCharStart2) && (c <= pConvertData->mnToCharEnd2) ) + { + dest[0] = static_cast< char >(pConvertData->mpToCharTab2[c-pConvertData->mnToCharStart2]); + if ( dest[0] != 0 ) + return 1; + } + pToCharExTab = pConvertData->mpToCharExTab; + if ( pToCharExTab ) + { + sal_uInt16 nLow; + sal_uInt16 nHigh; + sal_uInt16 nMid; + sal_uInt16 nCompareChar; + const ImplUniCharTabData* pCharExData; + + nLow = 0; + nHigh = pConvertData->mnToCharExCount-1; + do + { + nMid = (nLow+nHigh)/2; + pCharExData = pToCharExTab+nMid; + nCompareChar = pCharExData->mnUniChar; + if ( c < nCompareChar ) + { + if ( !nMid ) + break; + nHigh = nMid-1; + } + else + { + if ( c > nCompareChar ) + nLow = nMid+1; + else + { + dest[0] = static_cast< char >(pCharExData->mnChar); + if ( pCharExData->mnChar2 == 0 ) + return 1; + dest[1] = static_cast< char >(pCharExData->mnChar2); + return 2; + } + } + } + while ( nLow <= nHigh ); + } + return 0; +} + +} + +sal_Size sal::detail::textenc::convertCharToUnicode( + void const * pData, SAL_UNUSED_PARAMETER void *, char const * pSrcBuf, + sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes) +{ + sal_Unicode cConv; + const ImplByteConvertData* pConvertData = static_cast(pData); + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + while ( pSrcBuf < pEndSrcBuf ) + { + unsigned char c = static_cast(*pSrcBuf); + if ( c < 0x80 ) + cConv = c; + else + { + if ( (c >= pConvertData->mnToUniStart1) && (c <= pConvertData->mnToUniEnd1) ) + cConv = pConvertData->mpToUniTab1[c-pConvertData->mnToUniStart1]; + else if ( (c >= pConvertData->mnToUniStart2) && (c <= pConvertData->mnToUniEnd2) ) + cConv = pConvertData->mpToUniTab2[c-pConvertData->mnToUniStart2]; + else + cConv = 0; + if ( !cConv ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_UNDEFINED; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE ) + { + pSrcBuf++; + continue; + } + cConv = ImplGetUndefinedUnicodeChar(c, nFlags); + } + } + + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + *pDestBuf = cConv; + pDestBuf++; + pSrcBuf++; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +sal_Size sal::detail::textenc::convertUnicodeToChar( + void const * pData, SAL_UNUSED_PARAMETER void *, + sal_Unicode const * pSrcBuf, sal_Size nSrcChars, char * pDestBuf, + sal_Size nDestBytes, sal_uInt32 nFlags, sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars) +{ + sal_Unicode c; + const ImplByteConvertData* pConvertData = static_cast(pData); + char* pEndDestBuf; + const sal_Unicode* pEndSrcBuf; + int i; + int n; + sal_uInt16 cTemp; + char aTempBuf[IMPL_MAX_REPLACECHAR+2]; + const sal_uInt16* pReplace; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestBytes; + pEndSrcBuf = pSrcBuf+nSrcChars; + while ( pSrcBuf < pEndSrcBuf ) + { + c = *pSrcBuf; + if ( c < 0x80 ) + { + aTempBuf[0] = static_cast< char >(c); + n = 1; + } + else + { + n = ImplConvertUnicodeCharToChar( pConvertData, c, aTempBuf ); + + if ( n == 0 ) + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE ) + { + cTemp = ImplGetReplaceChar( c ); + if ( cTemp ) + n = ImplConvertUnicodeCharToChar( + pConvertData, cTemp, aTempBuf ); + } + + if ( n == 0 ) + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR ) + { + pReplace = ImplGetReplaceString( c ); + if ( pReplace ) + { + while ( *pReplace && (n < IMPL_MAX_REPLACECHAR) ) + { + i = ImplConvertUnicodeCharToChar( + pConvertData, *pReplace, aTempBuf + n ); + if ( i == 0 ) + { + n = 0; + break; + } + pReplace++; + n += i; + } + } + } + + /* Handle undefined and surrogates characters */ + /* (all surrogates characters are undefined) */ + if ( n == 0 ) + { + if (sal::detail::textenc::handleUndefinedUnicodeToTextChar( + &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf, + nFlags, pInfo)) + continue; + break; + } + } + } + } + + if ( pEndDestBuf - pDestBuf < n ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + for ( i = 0; i < n; ++i ) + *pDestBuf++ = aTempBuf[i]; + pSrcBuf++; + } + + *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf); + return (nDestBytes - (pEndDestBuf-pDestBuf)); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertsimple.hxx b/sal/textenc/convertsimple.hxx new file mode 100644 index 000000000..f7154989a --- /dev/null +++ b/sal/textenc/convertsimple.hxx @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTSIMPLE_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTSIMPLE_HXX + +#include + +#include +#include + +// Internal, non-stable ABI + +namespace sal::detail::textenc { + +sal_Size SAL_DLLPUBLIC convertCharToUnicode( + void const * pData, void * pContext, char const * pSrcBuf, + sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes); + +sal_Size SAL_DLLPUBLIC convertUnicodeToChar( + void const * pData, void * pContext, sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtChars); + +} + +#endif diff --git a/sal/textenc/convertsinglebytetobmpunicode.cxx b/sal/textenc/convertsinglebytetobmpunicode.cxx new file mode 100644 index 000000000..43c2b9cf3 --- /dev/null +++ b/sal/textenc/convertsinglebytetobmpunicode.cxx @@ -0,0 +1,210 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include +#include +#include + +#include "context.hxx" +#include "converter.hxx" +#include "convertsinglebytetobmpunicode.hxx" +#include "unichars.hxx" + +sal_Size rtl_textenc_convertSingleByteToBmpUnicode( + void const * data, SAL_UNUSED_PARAMETER void *, char const * srcBuf, + sal_Size srcBytes, sal_Unicode * destBuf, sal_Size destChars, + sal_uInt32 flags, sal_uInt32 * info, sal_Size * srcCvtBytes) +{ + sal_Unicode const * map = static_cast< + rtl::textenc::BmpUnicodeToSingleByteConverterData const * >( + data)->byteToUnicode; + sal_uInt32 infoFlags = 0; + sal_Size converted = 0; + sal_Unicode * destBufPtr = destBuf; + sal_Unicode * destBufEnd = destBuf + destChars; + for (; converted < srcBytes; ++converted) { + char b = *srcBuf++; + sal_Unicode c = map[static_cast< sal_uInt8 >(b)]; + if (c == 0xFFFF) { + goto bad_input; + } + if (destBufEnd - destBufPtr < 1) { + goto no_output; + } + *destBufPtr++ = c; + continue; + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + true/*undefined*/, false, b, flags, &destBufPtr, destBufEnd, + &infoFlags)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((flags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++converted; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + no_output: + --srcBuf; + infoFlags |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + if (info != nullptr) { + *info = infoFlags; + } + if (srcCvtBytes != nullptr) { + *srcCvtBytes = converted; + } + return destBufPtr - destBuf; +} + +sal_Size rtl_textenc_convertBmpUnicodeToSingleByte( + void const * data, void * context, + sal_Unicode const * srcBuf, sal_Size srcChars, char * destBuf, + sal_Size destBytes, sal_uInt32 flags, sal_uInt32 * info, + sal_Size * srcCvtChars) +{ + std::size_t entries = static_cast< + rtl::textenc::BmpUnicodeToSingleByteConverterData const * >( + data)->unicodeToByteEntries; + rtl::textenc::BmpUnicodeToSingleByteRange const * ranges = static_cast< + rtl::textenc::BmpUnicodeToSingleByteConverterData const * >( + data)->unicodeToByte; + sal_Unicode highSurrogate = 0; + sal_uInt32 infoFlags = 0; + sal_Size converted = 0; + char * destBufPtr = destBuf; + char * destBufEnd = destBuf + destBytes; + if (context != nullptr) { + highSurrogate = static_cast< ImplUnicodeToTextContext * >(context)-> + m_nHighSurrogate; + } + for (; converted < srcChars; ++converted) { + bool undefined = true; + sal_uInt32 c = *srcBuf++; + if (highSurrogate == 0) { + if (rtl::isHighSurrogate(c)) { + highSurrogate = static_cast< sal_Unicode >(c); + continue; + } + else if (rtl::isLowSurrogate(c)) + { + undefined = false; + goto bad_input; + } + } else if (rtl::isLowSurrogate(c)) { + c = rtl::combineSurrogates(highSurrogate, c); + } else { + undefined = false; + goto bad_input; + } + assert(rtl::isUnicodeScalarValue(c)); + // Linearly searching through the ranges if probably fastest, assuming + // that most converted characters belong to the ASCII subset: + for (std::size_t i = 0; i < entries; ++i) { + if (c < ranges[i].unicode) { + break; + } + if (c <= sal::static_int_cast< sal_uInt32 >( + ranges[i].unicode + ranges[i].range)) + { + if (destBufEnd - destBufPtr < 1) { + goto no_output; + } + *destBufPtr++ = static_cast< char >( + ranges[i].byte + (c - ranges[i].unicode)); + goto done; + } + } + goto bad_input; + done: + highSurrogate = 0; + continue; + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + undefined, c, flags, &destBufPtr, destBufEnd, &infoFlags, nullptr, + 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + highSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + highSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + no_output: + --srcBuf; + infoFlags |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + if (highSurrogate != 0 + && ((infoFlags + & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0)) + { + if ((flags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) { + infoFlags |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + } else { + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, flags, &destBufPtr, destBufEnd, &infoFlags, nullptr, + 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + case sal::detail::textenc::BAD_INPUT_CONTINUE: + highSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + infoFlags |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + } + if (context != nullptr) { + static_cast< ImplUnicodeToTextContext * >(context)->m_nHighSurrogate + = highSurrogate; + } + if (info != nullptr) { + *info = infoFlags; + } + if (srcCvtChars != nullptr) { + *srcCvtChars = converted; + } + return destBufPtr - destBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/convertsinglebytetobmpunicode.hxx b/sal/textenc/convertsinglebytetobmpunicode.hxx new file mode 100644 index 000000000..bd657bbca --- /dev/null +++ b/sal/textenc/convertsinglebytetobmpunicode.hxx @@ -0,0 +1,121 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_CONVERTSINGLEBYTETOBMPUNICODE_HXX +#define INCLUDED_SAL_TEXTENC_CONVERTSINGLEBYTETOBMPUNICODE_HXX + +#include + +#include + +#include + + +/// @HTML + +namespace rtl::textenc { + +/** + Maps a range of BMP Unicode code points to individual bytes. + + @see rtl::textenc::BmpUnicodeToSingleByteConverterData + */ +struct BmpUnicodeToSingleByteRange { + /** + The start of the range of BMP Unicode code points. + */ + sal_Unicode unicode; + + /** + The extend of the range of BMP Unicode code points. + +

The range covers unicode to unicode + range, + inclusive. It is an error if unicode + range is greater + than 0xFFFF.

+ */ + sal_uInt8 range; + + /** + The start of the corresponding range of individual bytes. + +

It is an error if byte + range is greater than + 0xFF.

+ */ + sal_uInt8 byte; +}; + +/** + Data to convert between BMP Unicode and a single-byte character set. + +

Only supports conversions where each legal unit from the single-byte + character set has one or more mappings to individual BMP Unicode code points + that are neither noncharacters nor surrogates.

+ + @see rtl_textenc_convertSingleByteToBmpUnicode + @see rtl_textenc_convertBmpUnicodeToSingleByte + */ +struct BmpUnicodeToSingleByteConverterData { + /** + Mapping from the single-byte character set to BMP Unicode code points. + +

Illegal units from the single-byte character set are mapped to + 0xFFFF.

+ */ + sal_Unicode byteToUnicode[256]; + + /** + The number of Unicode-to-byte conversion ranges. + */ + std::size_t unicodeToByteEntries; + + /** + The array of Unicode-to-byte conversion ranges, sorted by increasing + unicode values. + +

The ranges may not overlap.

+ */ + BmpUnicodeToSingleByteRange const * unicodeToByte; +}; + +} + +/** + Function to convert from a single-byte character set to BMP Unicode. + + @see ImplConvertToUnicodeProc + */ +sal_Size rtl_textenc_convertSingleByteToBmpUnicode( + void const * data, void * context, char const * srcBuf, + sal_Size srcBytes, sal_Unicode * destBuf, sal_Size destChars, + sal_uInt32 flags, sal_uInt32 * info, sal_Size * srcCvtBytes); + +/** + Function to convert from BMP Unicode to a single-byte character set. + + @see ImplConvertToTextProc + */ +sal_Size rtl_textenc_convertBmpUnicodeToSingleByte( + void const * data, void * context, + sal_Unicode const * srcBuf, sal_Size srcChars, char * destBuf, + sal_Size destBytes, sal_uInt32 flags, sal_uInt32 * info, + sal_Size * srcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/generate/big5hkscs2001.pl b/sal/textenc/generate/big5hkscs2001.pl new file mode 100644 index 000000000..4245cbdd6 --- /dev/null +++ b/sal/textenc/generate/big5hkscs2001.pl @@ -0,0 +1,795 @@ +#!/usr/bin/env perl +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +# The following files must be available in a ./input subdir: + +# + +# : +# "Unicode version: 1.1 Table version: 0.0d3 Date: 11 February 1994" +# Only used to track Unicode characters that are mapped from both Big5 and +# HKSCS. + +# : +# "Unicode version: 2.0 Table version: 2.01 Date: 1/7/2000" +# Only used to track Unicode characters that are mapped from both CP950 and +# HKSCS. + +$surrogates = 0; # set to 1 to allow mappings to Unicode beyond Plane 0 + +$id = "Big5Hkscs2001"; + +sub isValidUtf32 +{ + my $utf32 = $_[0]; + return $utf32 >= 0 && $utf32 <= 0x10FFFF + && !($utf32 >= 0xD800 && $utf32 <= 0xDFFF) + && !($utf32 >= 0xFDD0 && $utf32 <= 0xFDEF) + && ($utf32 & 0xFFFF) < 0xFFFE; +} + +sub printUtf32 +{ + my $utf32 = $_[0]; + return sprintf("U+%04X", $utf32); +} + +sub isValidBig5 +{ + my $big5 = $_[0]; + my $big5_row = $big5 >> 8; + my $big5_column = $big5 & 0xFF; + return $big5_row >= 0x81 && $big5_row <= 0xFE + && ($big5_column >= 0x40 && $big5_column <= 0x7E + || $big5_column >= 0xA1 && $big5_column <= 0xFE); +} + +sub printBig5 +{ + my $big5 = $_[0]; + return sprintf("%04X", $big5); +} + +sub printStats +{ + my $used = $_[0]; + my $space = $_[1]; + return sprintf("%d/%d bytes (%.1f%%)", + $used, + $space, + $used * 100 / $space); +} + +sub printSpaces +{ + my $column_width = $_[0]; + my $columns_per_line = $_[1]; + my $end = $_[2]; + $output = ""; + for ($i = int($end / $columns_per_line) * $columns_per_line; + $i < $end; + ++$i) + { + for ($j = 0; $j < $column_width; ++$j) + { + $output = $output . " "; + } + } + return $output; +} + +sub addMapping +{ + my $utf32 = $_[0]; + my $big5 = $_[1]; + my $comp = $_[2]; + + $uni_plane = $utf32 >> 16; + $uni_page = ($utf32 >> 8) & 0xFF; + $uni_index = $utf32 & 0xFF; + + if (!defined($uni_plane_used[$uni_plane]) + || !defined($uni_page_used[$uni_plane][$uni_page]) + || !defined($uni_map[$uni_plane][$uni_page][$uni_index])) + { + $uni_map[$uni_plane][$uni_page][$uni_index] = $big5; + $uni_plane_used[$uni_plane] = 1; + $uni_page_used[$uni_plane][$uni_page] = 1; + if ($comp != -1) + { + ++$compat[$comp]; + } + } + else + { + $big5_1 = $uni_map[$uni_plane][$uni_page][$uni_index]; + print "WARNING! Mapping ", printUtf32($utf32), " to ", + printBig5($big5_1), ", NOT ", ($comp ? "compat " : ""), + printBig5($big5), "\n"; + } +} + +# Build mappings to track Unicode characters that are mapped from both Big5/ +# CP950 and HKSCS: +{ + $filename = "BIG5.TXT"; + open IN, ("input/" . $filename) or die "Cannot read " . $filename; + while () + { + if (/(0x[0-9A-F][0-9A-F][0-9A-F][0-9A-F])[ \t]+(0x[0-9A-F]+)[ \t]+\#.*$/) + { + $big5 = oct($1); + $utf32 = oct($2); + isValidBig5($big5) + or die "Bad Big5 char " . printBig5($big5); + isValidUtf32($utf32) + or die "Bad UTF32 char " . printUtf32($utf32); + if ($utf32 != 0xFFFD) + { + if (defined($underlying_big5[$utf32])) + { + print "WARNING! In ", $filename, ", both ", + printBig5($underlying_big5[$utf32]), " and ", + printBig5($big5), " map to ", printUtf32($utf32), + "\n"; + } + else + { + $underlying_big5[$utf32] = $big5; + } + } + } + } + close IN; + + $filename = "CP950.TXT"; + open IN, ("input/" . $filename) or die "Cannot read " . $filename; + while () + { + if (/(0x[0-9A-F][0-9A-F][0-9A-F][0-9A-F])[ \t]+(0x[0-9A-F]+)[ \t]+\#.*$/) + { + $big5 = oct($1); + $utf32 = oct($2); + isValidBig5($big5) + or die "Bad Big5 char " . printBig5($big5); + isValidUtf32($utf32) + or die "Bad UTF32 char " . printUtf32($utf32); + if (defined($underlying_cp950[$utf32])) + { + print "WARNING! In ", $filename, ", both ", + printBig5($underlying_cp950[$utf32]), " and ", + printBig5($big5), " map to ", printUtf32($utf32), "\n"; + } + else + { + $underlying_cp950[$utf32] = $big5; + } + } + } + close IN; +} + +# The following are mapped by the underlying RTL_TEXTENCODING_BIG5 to some +# nonstandard Unicode points, so they are explicitly mentioned here to map +# to the standard Unicode PUA points. (In the other direction, the unofficial +# mappings from Unicode to RTL_TEXTENCODING_BIG5 C6A1--C7FE are harmless, +# since all Unicode characters involved are already covered by the official +# Big5-HKSCS mappings.) +$big5_map[0xC6][0xCF] = 0xF6E0; addMapping(0xF6E0, 0xC6CF, -1); +$big5_map[0xC6][0xD3] = 0xF6E4; addMapping(0xF6E4, 0xC6D3, -1); +$big5_map[0xC6][0xD5] = 0xF6E6; addMapping(0xF6E6, 0xC6D5, -1); +$big5_map[0xC6][0xD7] = 0xF6E8; addMapping(0xF6E8, 0xC6D7, -1); +$big5_map[0xC6][0xDE] = 0xF6EF; addMapping(0xF6EF, 0xC6DE, -1); +$big5_map[0xC6][0xDF] = 0xF6F0; addMapping(0xF6F0, 0xC6DF, -1); + +# The following implements the mapping of Big5-HKSCS compatibility points +# (GCCS characters unified with other HKSCS characters) to Unicode. In the +# other direction, characters from Unicode's PUA will map to these Big5-HKSCS +# compatibility points. (See the first list in .) +$big5_map[0x8E][0x69] = 0x7BB8; +$big5_map[0x8E][0x6F] = 0x7C06; +$big5_map[0x8E][0x7E] = 0x7CCE; +$big5_map[0x8E][0xAB] = 0x7DD2; +$big5_map[0x8E][0xB4] = 0x7E1D; +$big5_map[0x8E][0xCD] = 0x8005; +$big5_map[0x8E][0xD0] = 0x8028; +$big5_map[0x8F][0x57] = 0x83C1; +$big5_map[0x8F][0x69] = 0x84A8; +$big5_map[0x8F][0x6E] = 0x840F; +$big5_map[0x8F][0xCB] = 0x89A6; +$big5_map[0x8F][0xCC] = 0x89A9; +$big5_map[0x8F][0xFE] = 0x8D77; +$big5_map[0x90][0x6D] = 0x90FD; +$big5_map[0x90][0x7A] = 0x92B9; +$big5_map[0x90][0xDC] = 0x975C; +$big5_map[0x90][0xF1] = 0x97FF; +$big5_map[0x91][0xBF] = 0x9F16; +$big5_map[0x92][0x44] = 0x8503; +$big5_map[0x92][0xAF] = 0x5159; +$big5_map[0x92][0xB0] = 0x515B; +$big5_map[0x92][0xB1] = 0x515D; +$big5_map[0x92][0xB2] = 0x515E; +$big5_map[0x92][0xC8] = 0x936E; +$big5_map[0x92][0xD1] = 0x7479; +$big5_map[0x94][0x47] = 0x6D67; +$big5_map[0x94][0xCA] = 0x799B; +$big5_map[0x95][0xD9] = 0x9097; +$big5_map[0x96][0x44] = 0x975D; +$big5_map[0x96][0xED] = 0x701E; +$big5_map[0x96][0xFC] = 0x5B28; +$big5_map[0x9B][0x76] = 0x7201; +$big5_map[0x9B][0x78] = 0x77D7; +$big5_map[0x9B][0x7B] = 0x7E87; +$big5_map[0x9B][0xC6] = 0x99D6; +$big5_map[0x9B][0xDE] = 0x91D4; +$big5_map[0x9B][0xEC] = 0x60DE; +$big5_map[0x9B][0xF6] = 0x6FB6; +$big5_map[0x9C][0x42] = 0x8F36; +$big5_map[0x9C][0x53] = 0x4FBB; +$big5_map[0x9C][0x62] = 0x71DF; +$big5_map[0x9C][0x68] = 0x9104; +$big5_map[0x9C][0x6B] = 0x9DF0; +$big5_map[0x9C][0x77] = 0x83CF; +$big5_map[0x9C][0xBC] = 0x5C10; +$big5_map[0x9C][0xBD] = 0x79E3; +$big5_map[0x9C][0xD0] = 0x5A67; +$big5_map[0x9D][0x57] = 0x8F0B; +$big5_map[0x9D][0x5A] = 0x7B51; +$big5_map[0x9D][0xC4] = 0x62D0; +$big5_map[0x9E][0xA9] = 0x6062; +$big5_map[0x9E][0xEF] = 0x75F9; +$big5_map[0x9E][0xFD] = 0x6C4A; +$big5_map[0x9F][0x60] = 0x9B2E; +$big5_map[0x9F][0x66] = 0x9F17; +$big5_map[0x9F][0xCB] = 0x50ED; +$big5_map[0x9F][0xD8] = 0x5F0C; +$big5_map[0xA0][0x63] = 0x880F; +$big5_map[0xA0][0x77] = 0x62CE; +$big5_map[0xA0][0xD5] = 0x7468; +$big5_map[0xA0][0xDF] = 0x7162; +$big5_map[0xA0][0xE4] = 0x7250; +$big5_map[0xFA][0x5F] = 0x5029; +$big5_map[0xFA][0x66] = 0x507D; +$big5_map[0xFA][0xBD] = 0x5305; +$big5_map[0xFA][0xC5] = 0x5344; +$big5_map[0xFA][0xD5] = 0x537F; +$big5_map[0xFB][0x48] = 0x5605; +$big5_map[0xFB][0xB8] = 0x5A77; +$big5_map[0xFB][0xF3] = 0x5E75; +$big5_map[0xFB][0xF9] = 0x5ED0; +$big5_map[0xFC][0x4F] = 0x5F58; +$big5_map[0xFC][0x6C] = 0x60A4; +$big5_map[0xFC][0xB9] = 0x6490; +$big5_map[0xFC][0xE2] = 0x6674; +$big5_map[0xFC][0xF1] = 0x675E; +$big5_map[0xFD][0xB7] = 0x6C9C; +$big5_map[0xFD][0xB8] = 0x6E1D; +$big5_map[0xFD][0xBB] = 0x6E2F; +$big5_map[0xFD][0xF1] = 0x716E; +$big5_map[0xFE][0x52] = 0x732A; +$big5_map[0xFE][0x6F] = 0x745C; +$big5_map[0xFE][0xAA] = 0x74E9; +$big5_map[0xFE][0xDD] = 0x7809; + +$pua = 0; +$compat[0] = 0; # 1993 +$compat[1] = 0; # 2000 +$compat[2] = 0; # 2001 + +$filename = "big5-iso.txt"; +open IN, ("input/" . $filename) or die "Cannot read " . $filename; +while () +{ + if (/^([0-9A-F]+) +([0-9A-F]+) +([0-9A-F]+) +([0-9A-F]+)$/) + { + $big5 = oct("0x" . $1); + $utf32_1993 = oct("0x" . $2); + $utf32_2000 = oct("0x" . $3); + $utf32_2001 = oct("0x" . $4); + isValidBig5($big5) + or die "Bad Big5 char " . printBig5($big5); + isValidUtf32($utf32_1993) + or die "Bad UTF32 char " . printUtf32($utf32_1993); + isValidUtf32($utf32_2000) + or die "Bad UTF32 char " . printUtf32($utf32_2000); + isValidUtf32($utf32_2001) + or die "Bad UTF32 char " . printUtf32($utf32_2001); + + $utf32 = $surrogates ? $utf32_2001 : $utf32_2000; + + if (defined($underlying_big5[$utf32]) + || defined($underlying_cp950[$utf32])) + { + if (defined($underlying_big5[$utf32]) + && defined($underlying_cp950[$utf32]) + && $underlying_big5[$utf32] == $underlying_cp950[$utf32] + && $underlying_big5[$utf32] == $big5 + || + defined($underlying_big5[$utf32]) + && !defined($underlying_cp950[$utf32]) + && $underlying_big5[$utf32] == $big5 + || + !defined($underlying_big5[$utf32]) + && defined($underlying_cp950[$utf32]) + && $underlying_cp950[$utf32] == $big5) + { + # ignore + + # Depending on real underlying mapping (cf. + # ../convertbig5hkscs.tab), it would be possible to save some + # table space by dropping those HKSCS code points that are + # already covered by the underlying mapping. + } + else + { + print "XXX mapping underlying"; + if (defined($underlying_big5[$utf32]) + && defined($underlying_cp950[$utf32]) + && $underlying_big5[$utf32] == $underlying_cp950[$utf32]) + { + print " Big5/CP950 ", printBig5($underlying_big5[$utf32]); + } + else + { + if (defined($underlying_big5[$utf32])) + { + print " Big5 ", printBig5($underlying_big5[$utf32]); + } + if (defined($underlying_cp950[$utf32])) + { + print " CP950 ", printBig5($underlying_cp950[$utf32]); + } + } + print " and HKSCS ", printBig5($big5), " to ", + printUtf32($utf32), "\n"; + } + } + + if ($utf32 >= 0xE000 && $utf32 <= 0xF8FF) + { + ++$pua; + } + + $big5_row = $big5 >> 8; + $big5_column = $big5 & 0xFF; + if (defined($big5_map[$big5_row][$big5_column])) + { + die "Bad Big5 mapping " . printBig5($big5); + } + $big5_map[$big5_row][$big5_column] = $utf32; + + addMapping($utf32, $big5, -1); + + if ($utf32_2001 != $utf32) + { + addMapping($utf32_2001, $big5, 2); + } + if ($utf32_2000 != $utf32 && $utf32_2000 != $utf32_2001) + { + addMapping($utf32_2000, $big5, 1); + } + if ($utf32_1993 != $utf32 && $utf32_1993 != $utf32_2000 + && $utf32_1993 != $utf32_2001) + { + addMapping($utf32_1993, $big5, 0); + } + } +} +close IN; + +print $pua, " mappings to PUA\n"; +print $compat[0], " 1993 compatibility mappings\n" if ($compat[0] != 0); +print $compat[1], " 2000 compatibility mappings\n" if ($compat[1] != 0); +print $compat[2], " 2001 compatibility mappings\n" if ($compat[2] != 0); + +if (defined($uni_plane_used[0]) && defined($uni_page_used[0][0])) +{ + for ($utf32 = 0; $utf32 <= 0x7F; ++$utf32) + { + if (defined($uni_map[0][0][$uni_index])) + { + $big5 = $uni_map[0][0][$utf32]; + die "Mapping " . printUtf32($utf32) . " to " . printBig5($big5); + } + } +} + +$filename = lc($id) . ".tab"; +open OUT, ("> " . $filename) or die "Cannot write " . $filename; + +{ + $filename = lc($id). ".pl"; + open IN, $filename or die "Cannot read ". $filename; + $first = 1; + while () + { + if (/^\#!.*$/) + { + } + elsif (/^\#(\*.*)$/) + { + if ($first == 1) + { + print OUT "/", $1, "\n"; + $first = 0; + } + else + { + print OUT " ", substr($1, 0, length($1) - 1), "/\n"; + } + } + elsif (/^\# (.*)$/) + { + print OUT " *", $1, "\n"; + } + elsif (/^\#(.*)$/) + { + print OUT " *", $1, "\n"; + } + else + { + goto done; + } + } + done: +} + +print OUT "\n", + "#include \"sal/types.h\"\n", + "\n"; + +print OUT "static sal_uInt16 const aImpl", $id, "ToUnicodeData[] = {\n"; +$big5_data_index = 0; +$big5_rows = 0; +$big5_chars = 0; +for ($big5_row = 0; $big5_row <= 255; ++$big5_row) +{ + $big5_row_first = -1; + for ($big5_column = 0; $big5_column <= 255; ++$big5_column) + { + if (defined($big5_map[$big5_row][$big5_column])) + { + if ($big5_row_first == -1) + { + $big5_row_first = $big5_column; + } + $big5_row_last = $big5_column; + } + } + if ($big5_row_first != -1) + { + $big5_data_offsets[$big5_row] = $big5_data_index; + ++$big5_rows; + print OUT " /* row ", $big5_row, " */\n"; + + $big5_row_surrogates_first = -1; + $big5_row_chars = 0; + $big5_row_surrogates = 0; + + print OUT " ", $big5_row_first, " | (", $big5_row_last, + " << 8), /* first, last */\n"; + ++$big5_data_index; + + print OUT " ", printSpaces(7, 10, $big5_row_first); + $bol = 0; + for ($big5_column = $big5_row_first; + $big5_column <= $big5_row_last; + ++$big5_column) + { + if ($bol == 1) + { + print OUT " "; + $bol = 0; + } + if (defined($big5_map[$big5_row][$big5_column])) + { + $utf32 = $big5_map[$big5_row][$big5_column]; + ++$big5_row_chars; + if ($utf32 <= 0xFFFF) + { + printf OUT "0x%04X,", $utf32; + } + else + { + ++$big5_row_surrogates; + printf OUT "0x%04X,", + (0xD800 | (($utf32 - 0x10000) >> 10)); + if ($big5_row_surrogates_first == -1) + { + $big5_row_surrogates_first = $big5_column; + } + $big5_row_surrogates_last = $big5_column; + } + } + else + { + printf OUT "0xffff,"; + } + ++$big5_data_index; + if ($big5_column % 10 == 9) + { + print OUT "\n"; + $bol = 1; + } + } + if ($bol == 0) + { + print OUT "\n"; + } + + if ($big5_row_surrogates_first != -1) + { + print OUT " ", $big5_row_surrogates_first, + ", /* first low-surrogate */\n"; + ++$big5_data_index; + + print OUT " ", printSpaces(7, 10, $big5_row_surrogates_first); + $bol = 0; + for ($big5_column = $big5_row_surrogates_first; + $big5_column <= $big5_row_surrogates_last; + ++$big5_column) + { + if ($bol == 1) + { + print OUT " "; + $bol = 0; + } + $utf32 = 0; + if (defined($big5_map[$big5_row][$big5_column])) + { + $utf32 = $big5_map[$big5_row][$big5_column]; + } + if ($utf32 <= 0xFFFF) + { + printf OUT " 0,"; + } + else + { + printf OUT "0x%04X,", + (0xDC00 | (($utf32 - 0x10000) & 0x3FF)); + } + ++$big5_data_index; + if ($big5_column % 10 == 9) + { + print OUT "\n"; + $bol = 1; + } + } + if ($bol == 0) + { + print OUT "\n"; + } + } + + $big5_chars += $big5_row_chars; + $big5_data_space[$big5_row] + = ($big5_data_index - $big5_data_offsets[$big5_row]) * 2; + $big5_data_used[$big5_row] + = (1 + $big5_row_chars + ($big5_row_surrogates == 0 ? + 0 : 1 + $big5_row_surrogates)) + * 2; + } + else + { + print OUT " /* row ", $big5_row, ": --- */\n"; + $big5_data_offsets[$big5_row] = -1; + } +} +print OUT "};\n\n"; +print "big5 rows = ", $big5_rows, ", chars = ", $big5_chars, "\n"; + +print OUT "static sal_Int32 const aImpl", $id, "ToUnicodeRowOffsets[] = {\n"; +$big5_rowoffsets_used = 0; +for ($big5_row = 0; $big5_row <= 255; ++$big5_row) +{ + if ($big5_data_offsets[$big5_row] == -1) + { + print OUT " -1, /* row ", $big5_row, " */\n"; + } + else + { + print OUT " ", + $big5_data_offsets[$big5_row], + ", /* row ", + $big5_row, + "; ", + printStats($big5_data_used[$big5_row], + $big5_data_space[$big5_row]), + " */\n"; + $big5_rowoffsets_used += 4; + } +} +print OUT "};\n\n"; + +print OUT "static sal_uInt16 const aImplUnicodeTo", $id, "Data[] = {\n"; +$uni_data_index = 0; +for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane) +{ + if (defined($uni_plane_used[$uni_plane])) + { + for ($uni_page = 0; $uni_page <= 255; ++$uni_page) + { + if (defined($uni_page_used[$uni_plane][$uni_page])) + { + $uni_data_offsets[$uni_plane][$uni_page] = $uni_data_index; + print OUT " /* plane ", $uni_plane, ", page ", $uni_page, + " */\n"; + + $uni_page_first = -1; + for ($uni_index = 0; $uni_index <= 255; ++$uni_index) + { + if (defined($uni_map[$uni_plane][$uni_page][$uni_index])) + { + if ($uni_page_first == -1) + { + $uni_page_first = $uni_index; + } + $uni_page_last = $uni_index; + } + } + + $uni_data_used[$uni_plane][$uni_page] = 0; + + print OUT " ", $uni_page_first, " | (", $uni_page_last, + " << 8), /* first, last */\n"; + ++$uni_data_index; + $uni_data_used[$uni_plane][$uni_page] += 2; + + print OUT " ", printSpaces(7, 10, $uni_page_first); + $bol = 0; + for ($uni_index = $uni_page_first; + $uni_index <= $uni_page_last; + ++$uni_index) + { + if ($bol == 1) + { + print OUT " "; + $bol = 0; + } + if (defined($uni_map[$uni_plane][$uni_page][$uni_index])) + { + $big5 = $uni_map[$uni_plane][$uni_page][$uni_index]; + printf OUT "0x%04X,", $big5; + $uni_data_used[$uni_plane][$uni_page] += 2; + } + else + { + print OUT " 0,"; + } + ++$uni_data_index; + if ($uni_index % 10 == 9) + { + print OUT "\n"; + $bol = 1; + } + } + if ($bol == 0) + { + print OUT "\n"; + } + + $uni_data_space[$uni_plane][$uni_page] + = ($uni_data_index + - $uni_data_offsets[$uni_plane][$uni_page]) * 2; + } + else + { + $uni_data_offsets[$uni_plane][$uni_page] = -1; + print OUT " /* plane ", $uni_plane, ", page ", $uni_page, + ": --- */\n"; + } + } + } + else + { + print OUT " /* plane ", $uni_plane, ": --- */\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_Int32 const aImplUnicodeTo", $id, "PageOffsets[] = {\n"; +for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane) +{ + if (defined($uni_plane_used[$uni_plane])) + { + $uni_pageoffsets_used[$uni_plane] = 0; + $uni_data_used_sum[$uni_plane] = 0; + $uni_data_space_sum[$uni_plane] = 0; + for ($uni_page = 0; $uni_page <= 255; ++$uni_page) + { + $offset = $uni_data_offsets[$uni_plane][$uni_page]; + if ($offset == -1) + { + print OUT " -1, /* plane ", + $uni_plane, + ", page ", + $uni_page, + " */\n"; + } + else + { + print OUT " ", + $offset, + ", /* plane ", + $uni_plane, + ", page ", + $uni_page, + "; ", + printStats($uni_data_used[$uni_plane][$uni_page], + $uni_data_space[$uni_plane][$uni_page]), + " */\n"; + $uni_pageoffsets_used[$uni_plane] += 4; + $uni_data_used_sum[$uni_plane] + += $uni_data_used[$uni_plane][$uni_page]; + $uni_data_space_sum[$uni_plane] + += $uni_data_space[$uni_plane][$uni_page]; + } + } + } + else + { + print OUT " /* plane ", $uni_plane, ": --- */\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_Int32 const aImplUnicodeTo", + $id, + "PlaneOffsets[] = {\n"; +$uni_page_offset = 0; +$uni_planeoffsets_used = 0; +$uni_pageoffsets_used_sum = 0; +$uni_pageoffsets_space_sum = 0; +$uni_data_used_sum2 = 0; +$uni_data_space_sum2 = 0; +for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane) +{ + if (defined ($uni_plane_used[$uni_plane])) + { + print OUT " ", + $uni_page_offset++, + " * 256, /* plane ", + $uni_plane, + "; ", + printStats($uni_pageoffsets_used[$uni_plane], 256 * 4), + ", ", + printStats($uni_data_used_sum[$uni_plane], + $uni_data_space_sum[$uni_plane]), + " */\n"; + $uni_planeoffsets_used += 4; + $uni_pageoffsets_used_sum += $uni_pageoffsets_used[$uni_plane]; + $uni_pageoffsets_space_sum += 256 * 4; + $uni_data_used_sum2 += $uni_data_used_sum[$uni_plane]; + $uni_data_space_sum2 += $uni_data_space_sum[$uni_plane]; + } + else + { + print OUT " -1, /* plane ", $uni_plane, " */\n"; + } +} +print OUT " /* ", + printStats($uni_planeoffsets_used, 17 * 4), + ", ", + printStats($uni_pageoffsets_used_sum, $uni_pageoffsets_space_sum), + ", ", + printStats($uni_data_used_sum2, $uni_data_space_sum2), + " */\n};\n"; + +close OUT; diff --git a/sal/textenc/generate/big5hkscs2001.tab b/sal/textenc/generate/big5hkscs2001.tab new file mode 100644 index 000000000..b8609633f --- /dev/null +++ b/sal/textenc/generate/big5hkscs2001.tab @@ -0,0 +1,8813 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +sal_uInt16 const aImplBig5Hkscs2001ToUnicodeData[] = { + /* row 0: --- */ + /* row 1: --- */ + /* row 2: --- */ + /* row 3: --- */ + /* row 4: --- */ + /* row 5: --- */ + /* row 6: --- */ + /* row 7: --- */ + /* row 8: --- */ + /* row 9: --- */ + /* row 10: --- */ + /* row 11: --- */ + /* row 12: --- */ + /* row 13: --- */ + /* row 14: --- */ + /* row 15: --- */ + /* row 16: --- */ + /* row 17: --- */ + /* row 18: --- */ + /* row 19: --- */ + /* row 20: --- */ + /* row 21: --- */ + /* row 22: --- */ + /* row 23: --- */ + /* row 24: --- */ + /* row 25: --- */ + /* row 26: --- */ + /* row 27: --- */ + /* row 28: --- */ + /* row 29: --- */ + /* row 30: --- */ + /* row 31: --- */ + /* row 32: --- */ + /* row 33: --- */ + /* row 34: --- */ + /* row 35: --- */ + /* row 36: --- */ + /* row 37: --- */ + /* row 38: --- */ + /* row 39: --- */ + /* row 40: --- */ + /* row 41: --- */ + /* row 42: --- */ + /* row 43: --- */ + /* row 44: --- */ + /* row 45: --- */ + /* row 46: --- */ + /* row 47: --- */ + /* row 48: --- */ + /* row 49: --- */ + /* row 50: --- */ + /* row 51: --- */ + /* row 52: --- */ + /* row 53: --- */ + /* row 54: --- */ + /* row 55: --- */ + /* row 56: --- */ + /* row 57: --- */ + /* row 58: --- */ + /* row 59: --- */ + /* row 60: --- */ + /* row 61: --- */ + /* row 62: --- */ + /* row 63: --- */ + /* row 64: --- */ + /* row 65: --- */ + /* row 66: --- */ + /* row 67: --- */ + /* row 68: --- */ + /* row 69: --- */ + /* row 70: --- */ + /* row 71: --- */ + /* row 72: --- */ + /* row 73: --- */ + /* row 74: --- */ + /* row 75: --- */ + /* row 76: --- */ + /* row 77: --- */ + /* row 78: --- */ + /* row 79: --- */ + /* row 80: --- */ + /* row 81: --- */ + /* row 82: --- */ + /* row 83: --- */ + /* row 84: --- */ + /* row 85: --- */ + /* row 86: --- */ + /* row 87: --- */ + /* row 88: --- */ + /* row 89: --- */ + /* row 90: --- */ + /* row 91: --- */ + /* row 92: --- */ + /* row 93: --- */ + /* row 94: --- */ + /* row 95: --- */ + /* row 96: --- */ + /* row 97: --- */ + /* row 98: --- */ + /* row 99: --- */ + /* row 100: --- */ + /* row 101: --- */ + /* row 102: --- */ + /* row 103: --- */ + /* row 104: --- */ + /* row 105: --- */ + /* row 106: --- */ + /* row 107: --- */ + /* row 108: --- */ + /* row 109: --- */ + /* row 110: --- */ + /* row 111: --- */ + /* row 112: --- */ + /* row 113: --- */ + /* row 114: --- */ + /* row 115: --- */ + /* row 116: --- */ + /* row 117: --- */ + /* row 118: --- */ + /* row 119: --- */ + /* row 120: --- */ + /* row 121: --- */ + /* row 122: --- */ + /* row 123: --- */ + /* row 124: --- */ + /* row 125: --- */ + /* row 126: --- */ + /* row 127: --- */ + /* row 128: --- */ + /* row 129: --- */ + /* row 130: --- */ + /* row 131: --- */ + /* row 132: --- */ + /* row 133: --- */ + /* row 134: --- */ + /* row 135: --- */ + /* row 136 */ + 64 | (170 << 8), /* first, last */ + 0xF303,0xF304,0xF305,0xF306,0xF307,0xF308, + 0xF309,0xF30A,0xF30B,0xF30C,0xF30D,0xF30E,0xF30F,0xF310,0xF311,0xF312, + 0xF313,0xF314,0xF315,0xF316,0xF317,0xF318,0x0100,0x00C1,0x01CD,0x00C0, + 0x0112,0x00C9,0x011A,0x00C8,0x014C,0x00D3,0x01D1,0x00D2,0xF325,0x1EBE, + 0xF327,0x1EC0,0x00CA,0x0101,0x00E1,0x01CE,0x00E0,0x0251,0x0113,0x00E9, + 0x011B,0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3,0x01D2,0x00F2, + 0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8,0x01DA,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x01DC,0x00FC,0xF344,0x1EBF,0xF346,0x1EC1,0x00EA,0x0261,0xF34A, + 0xF34B, + /* row 137 */ + 64 | (254 << 8), /* first, last */ + 0xF3A0,0xF3A1,0xffff,0x650A,0xffff,0xffff, + 0x4E3D,0x6EDD,0x9D4E,0x91DF,0xffff,0xffff,0xF3AC,0x6491,0x4F1A,0x4F28, + 0x4FA8,0x5156,0x5174,0x519C,0x51E4,0x52A1,0x52A8,0x533B,0x534E,0x53D1, + 0x53D8,0x56E2,0x58F0,0x5904,0x5907,0x5932,0x5934,0x5B66,0x5B9E,0x5B9F, + 0x5C9A,0x5E86,0x603B,0x6589,0x67FE,0x6804,0x6865,0x6D4E,0x70BC,0x7535, + 0x7EA4,0x7EAC,0x7EBA,0x7EC7,0x7ECF,0x7EDF,0x7F06,0x7F37,0x827A,0x82CF, + 0x836F,0x89C6,0x8BBE,0x8BE2,0x8F66,0x8F67,0x8F6E,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x7411,0x7CFC,0x7DCD,0x6946,0x7AC9,0x5227,0xffff,0xffff,0xffff, + 0xffff,0x918C,0x78B8,0x915E,0x80BC,0xffff,0x8D0B,0x80F6,0xF3F0,0xffff, + 0xffff,0x809F,0x9EC7,0x4CCD,0x9DC9,0x9E0C,0x4C3E,0xF3F9,0xF3FA,0x9E0A, + 0xF3FC,0x35C1,0xffff,0x6E9A,0x823E,0x7519,0xffff,0x4911,0x9A6C,0x9A8F, + 0x9F99,0x7987,0xF408,0xF409,0xF40A,0xF40B,0x4E24,0x4E81,0x4E80,0x4E87, + 0x4EBF,0x4EEB,0x4F37,0x344C,0x4FBD,0x3E48,0x5003,0x5088,0x347D,0x3493, + 0x34A5,0x5186,0x5905,0x51DB,0x51FC,0x5205,0x4E89,0x5279,0x5290,0x5327, + 0x35C7,0x53A9,0x3551,0x53B0,0x3553,0x53C2,0x5423,0x356D,0x3572,0x3681, + 0x5493,0x54A3,0x54B4,0x54B9,0x54D0,0x54EF,0x5518,0x5523,0x5528,0x3598, + 0x553F,0x35A5,0x35BF,0x55D7,0x35C5, + /* row 138 */ + 64 | (254 << 8), /* first, last */ + 0xF43D,0x5525,0xffff,0xF440,0xF441,0xF442, + 0x5590,0xF444,0x39EC,0xF446,0x8E46,0xF448,0xF449,0x4053,0xF44B,0x777A, + 0xF44D,0x3A34,0x47D5,0xF450,0xF451,0xF452,0x64DD,0xF454,0xF455,0xF456, + 0xF457,0x648D,0x8E7E,0xF45A,0xF45B,0xF45C,0xF45D,0xF45E,0xF45F,0xffff, + 0xF461,0xF462,0xF463,0x47F4,0xF465,0xF466,0x9AB2,0x3A67,0xF469,0x3FED, + 0x3506,0xF46C,0xF46D,0xF46E,0xF46F,0x9D6E,0x9815,0xffff,0x43D9,0xF474, + 0x64B4,0x54E3,0xF477,0xF478,0xF479,0x39FB,0xF47B,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xF47C,0xF47D,0xF47E,0x64EA,0xF480,0xF481,0x8E68,0xF483,0xF484, + 0xF485,0xffff,0x480B,0xF488,0x3FFA,0x5873,0xF48B,0xffff,0xF48D,0xF48E, + 0xF48F,0xF490,0xF491,0x5579,0x40BB,0x43BA,0xffff,0x4AB4,0xF497,0xF498, + 0x81AA,0x98F5,0xF49B,0x6379,0x39FE,0xF49E,0x8DC0,0x56A1,0x647C,0x3E43, + 0xffff,0xF4A4,0xF4A5,0xF4A6,0xF4A7,0xffff,0xF4A9,0xF4AA,0x3992,0x3A06, + 0xF4AD,0x3578,0xF4AF,0xF4B0,0x5652,0xF4B2,0xF4B3,0xF4B4,0x34BC,0x6C3D, + 0xF4B7,0xffff,0xffff,0xF4BA,0xF4BB,0xF4BC,0xF4BD,0xF4BE,0xF4BF,0xF4C0, + 0xF4C1,0x7F93,0xF4C3,0xF4C4,0xF4C5,0x35FB,0xF4C7,0xF4C8,0xF4C9,0xF4CA, + 0x3F93,0xF4CC,0xF4CD,0xF4CE,0xF4CF,0xffff,0xF4D1,0xF4D2,0xF4D3,0xF4D4, + 0xF4D5,0x3FF9,0xF4D7,0x6432,0xF4D9, + /* row 139 */ + 64 | (253 << 8), /* first, last */ + 0xF4DA,0xF4DB,0xF4DC,0xF4DD,0xF4DE,0xF4DF, + 0xF4E0,0x3A18,0xF4E2,0xF4E3,0xF4E4,0xF4E5,0xF4E6,0xF4E7,0xF4E8,0xF4E9, + 0x95AA,0x54CC,0x82C4,0x55B9,0xffff,0xF4EF,0x9C26,0x9AB6,0xF4F2,0xF4F3, + 0x7140,0x816D,0x80EC,0x5C1C,0xF4F8,0x8134,0x3797,0x535F,0xF4FC,0x91B6, + 0xF4FE,0xF4FF,0xF500,0xF501,0x35DD,0xF503,0x3609,0xF505,0x56AF,0xF507, + 0xF508,0xF509,0xF50A,0xF50B,0xF50C,0xF50D,0xF50E,0xF50F,0xF510,0xF511, + 0x5A54,0xF513,0xF514,0xF515,0xF516,0x579C,0xF518,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xF519,0xF51A,0xF51B,0xF51C,0xF51D,0x3703,0xF51F,0xF520,0xF521, + 0xF522,0xF523,0xF524,0xF525,0xF526,0x5899,0x5268,0x361A,0xF52A,0x7BB2, + 0x5B68,0x4800,0x4B2C,0x9F27,0x49E7,0x9C1F,0x9B8D,0xF533,0xF534,0x55FB, + 0x35F2,0x5689,0x4E28,0x5902,0xF53A,0xF53B,0x9751,0xF53D,0x4E5B,0x4EBB, + 0x353E,0x5C23,0x5F51,0x5FC4,0x38FA,0x624C,0x6535,0x6B7A,0x6C35,0x6C3A, + 0x706C,0x722B,0x4E2C,0x72AD,0xF54E,0x7F52,0x793B,0x7CF9,0x7F53,0xF553, + 0x34C1,0xffff,0xF556,0x8002,0x8080,0xF559,0xF55A,0x535D,0x8864,0x89C1, + 0xF55E,0x8BA0,0x8D1D,0x9485,0x9578,0x957F,0x95E8,0xF565,0x97E6,0x9875, + 0x98CE,0x98DE,0x9963,0xF56B,0x9C7C,0x9E1F,0x9EC4,0x6B6F,0xF907,0x4E37, + 0xF572,0x961D,0x6237,0x94A2, + /* row 140 */ + 64 | (220 << 8), /* first, last */ + 0x503B,0x6DFE,0xF579,0xF57A,0x3DC9,0x888F, + 0xF57D,0x7077,0x5CF5,0x4B20,0xF581,0x3559,0xF583,0x6122,0xF585,0x8FA7, + 0x91F6,0x7191,0x6719,0x73BA,0xF58B,0xF58C,0x3C8B,0xF58E,0x4B10,0x78E4, + 0x7402,0x51AE,0xF593,0x4009,0x6A63,0xF596,0x4223,0x860F,0xffff,0x7A2A, + 0xF59B,0xF59C,0x9755,0x704D,0x5324,0xF5A0,0x93F4,0x76D9,0xF5A3,0xF5A4, + 0x77DD,0x4EA3,0x4FF0,0x50BC,0x4E2F,0x4F17,0xF5AB,0x5434,0x7D8B,0x5892, + 0x58D0,0xF5B0,0x5E92,0x5E99,0x5FC2,0xF5B4,0x658B,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xF5B6,0x6919,0x6A43,0xF5B9,0x6CFF,0xffff,0x7200,0xF5BD,0x738C, + 0x3EDB,0xF5C0,0x5B15,0x74B9,0x8B83,0xF5C4,0xF5C5,0x7A93,0x7BEC,0x7CC3, + 0x7E6C,0x82F8,0x8597,0xF5CC,0x8890,0xF5CE,0x8EB9,0xF5D0,0x8FCF,0x855F, + 0x99E0,0x9221,0xF5D5,0xF5D6,0xF5D7,0x4071,0x42A2,0x5A1A,0xffff,0xffff, + 0xffff,0x9868,0x676B,0x4276,0x573D,0xffff,0x85D6,0xF5E4,0x82BF,0xF5E6, + 0x4C81,0xF5E8,0x5D7B,0xF5EA,0xF5EB,0xF5EC,0xF5ED,0x5B96,0xF5EF,0xffff, + 0x7E5B, + /* row 141 */ + 96 | (254 << 8), /* first, last */ + 0x5D3E,0x5D48,0x5D56,0x3DFC, + 0x380F,0x5DA4,0x5DB9,0x3820,0x3838,0x5E42,0x5EBD,0x5F25,0x5F83,0x3908, + 0x3914,0x393F,0x394D,0x60D7,0x613D,0x5CE5,0x3989,0x61B7,0x61B9,0x61CF, + 0x39B8,0x622C,0x6290,0x62E5,0x6318,0x39F8,0x56B1,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x3A03,0x63E2,0x63FB,0x6407,0x645A,0x3A4B,0x64C0,0x5D15,0x5621, + 0x9F9F,0x3A97,0x6586,0x3ABD,0x65FF,0x6653,0x3AF2,0x6692,0x3B22,0x6716, + 0x3B42,0x67A4,0x6800,0x3B58,0x684A,0x6884,0x3B72,0x3B71,0x3B7B,0x6909, + 0x6943,0x725C,0x6964,0x699F,0x6985,0x3BBC,0x69D6,0x3BDD,0x6A65,0x6A74, + 0x6A71,0x6A82,0x3BEC,0x6A99,0x3BF2,0x6AAB,0x6AB5,0x6AD4,0x6AF6,0x6B81, + 0x6BC1,0x6BEA,0x6C75,0x6CAA,0x3CCB,0x6D02,0x6D06,0x6D26,0x6D81,0x3CEF, + 0x6DA4,0x6DB1,0x6E15,0x6E18,0x6E29,0x6E86,0xF694,0x6EBB,0x6EE2,0x6EDA, + 0x9F7F,0x6EE8,0x6EE9,0x6F24,0x6F34,0x3D46,0xF69E,0x6F81,0x6FBE,0x3D6A, + 0x3D75,0x71B7,0x5C99,0x3D8A,0x702C,0x3D91,0x7050,0x7054,0x706F,0x707F, + 0x7089,0xF6AD,0x43C1,0x35F1,0xF6B0, + /* row 142 */ + 64 | (254 << 8), /* first, last */ + 0xE311,0x57BE,0xE313,0x713E,0xE315,0x364E, + 0x69A2,0xE318,0x5B74,0x7A49,0xE31B,0xE31C,0x7A65,0x7A7D,0xE31F,0x7ABB, + 0x7AB0,0x7AC2,0x7AC3,0x71D1,0xE325,0x41CA,0x7ADA,0x7ADD,0x7AEA,0x41EF, + 0x54B2,0xE32C,0x7B0B,0x7B55,0x7B29,0xE330,0xE331,0x7BA2,0x7B6F,0x839C, + 0xE335,0xE336,0x7BD0,0x8421,0x7B92,0x7BB8,0xE33B,0x3DAD,0xE33D,0x8492, + 0x7BFA,0x7C06,0x7C35,0xE342,0x7C44,0x7C83,0xE345,0x7CA6,0x667D,0xE348, + 0x7CC9,0x7CC7,0x7CE6,0x7C74,0x7CF3,0x7CF5,0x7CCE,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x7E67,0x451D,0xE352,0x7D5D,0xE354,0x748D,0x7D89,0x7DAB,0x7135, + 0x7DB3,0x7DD2,0xE35B,0xE35C,0x7DE4,0x3D13,0x7DF5,0xE360,0x7DE5,0xE362, + 0x7E1D,0xE364,0xE365,0x7E6E,0x7E92,0x432B,0x946C,0x7E27,0x7F40,0x7F41, + 0x7F47,0x7936,0xE36F,0x99E1,0x7F97,0xE372,0x7FA3,0xE374,0xE375,0x455C, + 0xE377,0x4503,0xE379,0x7FFA,0xE37B,0x8005,0x8008,0x801D,0x8028,0x802F, + 0xE381,0xE382,0x803B,0x803C,0x8061,0xE386,0x4989,0xE388,0xE389,0xE38A, + 0x6725,0x80A7,0xE38D,0x8107,0x811A,0x58B0,0xE391,0x6C7F,0xE393,0xE394, + 0x64E7,0xE396,0x8218,0xE398,0x6A53,0xE39A,0xE39B,0x447A,0x8229,0xE39E, + 0xE39F,0xE3A0,0x4FF9,0xE3A2,0x84E2,0x8362,0xE3A5,0xE3A6,0xE3A7,0xE3A8, + 0xE3A9,0x82AA,0x691B,0xE3AC,0x41DB, + /* row 143 */ + 64 | (254 << 8), /* first, last */ + 0x854B,0x82D0,0x831A,0xE3B1,0xE3B2,0x36C1, + 0xE3B4,0xE3B5,0x827B,0x82E2,0x8318,0xE3B9,0xE3BA,0xE3BB,0xE3BC,0xE3BD, + 0x3DBF,0x831D,0x55EC,0x8385,0x450B,0xE3C3,0x83AC,0x83C1,0x83D3,0x347E, + 0xE3C8,0x6A57,0x855A,0x3496,0xE3CC,0xE3CD,0x8458,0xE3CF,0x8471,0x3DD3, + 0x44E4,0x6AA7,0x844A,0xE3D5,0x7958,0x84A8,0xE3D8,0xE3D9,0xE3DA,0x84DE, + 0x840F,0x8391,0x44A0,0x8493,0x84E4,0xE3E1,0x4240,0xE3E3,0x4543,0x8534, + 0x5AF2,0xE3E7,0x4527,0x8573,0x4516,0x67BF,0x8616,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE3ED,0xE3EE,0x85C1,0xE3F0,0x8602,0xE3F2,0xE3F3,0xE3F4,0x456A, + 0x8628,0x3648,0xE3F8,0x53F7,0xE3FA,0x867E,0x8771,0xE3FD,0x87EE,0xE3FF, + 0x87B1,0x87DA,0x880F,0x5661,0x866C,0x6856,0x460F,0x8845,0x8846,0xE409, + 0xE40A,0xE40B,0x885E,0x889C,0x465B,0x88B4,0x88B5,0x63C1,0x88C5,0x7777, + 0xE414,0x8987,0x898A,0x89A6,0x89A9,0x89A7,0x89BC,0xE41B,0x89E7,0xE41D, + 0xE41E,0x8A9C,0x7793,0x91FE,0x8A90,0xE423,0x7AE9,0xE425,0xE426,0x4713, + 0xE428,0x717C,0x8B0C,0x8B1F,0xE42C,0xE42D,0x8B3F,0x8B4C,0x8B4D,0x8AA9, + 0xE432,0x8B90,0x8B9B,0x8AAF,0xE436,0x4615,0x884F,0x8C9B,0xE43A,0xE43B, + 0xE43C,0x3725,0xE43E,0x8CD6,0xE440,0xE441,0x8D12,0x8D03,0xE444,0x8CDB, + 0x705C,0x8D11,0xE448,0x3ED0,0x8D77, + /* row 144 */ + 64 | (254 << 8), /* first, last */ + 0x8DA9,0xE44C,0xE44D,0xE44E,0x3B7C,0xE450, + 0xE451,0x7AE7,0x8EAD,0x8EB6,0x8EC3,0x92D4,0x8F19,0x8F2D,0xE459,0xE45A, + 0x8FA5,0x9303,0xE45D,0xE45E,0x8FB3,0x492A,0xE461,0xE462,0xE463,0x5EF8, + 0xE465,0x8FF9,0xE467,0xE468,0xE469,0xE46A,0x3980,0xE46C,0x9037,0xE46E, + 0xE46F,0x9061,0xE471,0xE472,0x90A8,0xE474,0x90C4,0xE476,0x90AE,0x90FD, + 0x9167,0x3AF0,0x91A9,0x91C4,0x7CAC,0xE47E,0xE47F,0x920E,0x6C9F,0x9241, + 0x9262,0xE484,0x92B9,0xE486,0xE487,0xE488,0xE489,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE48A,0x932C,0x936B,0xE48D,0xE48E,0x708F,0x5AC3,0xE491,0xE492, + 0x4965,0x9244,0xE495,0xE496,0xE497,0x9373,0x945B,0x8EBC,0x9585,0x95A6, + 0x9426,0x95A0,0x6FF6,0x42B9,0xE4A1,0xE4A2,0xE4A3,0xE4A4,0x49DF,0x6C1C, + 0x967B,0x9696,0x416C,0x96A3,0xE4AB,0x61DA,0x96B6,0x78F5,0xE4AF,0x96BD, + 0x53CC,0x49A1,0xE4B3,0xE4B4,0xE4B5,0xE4B6,0xE4B7,0xE4B8,0xE4B9,0xE4BA, + 0x9731,0x8642,0x9736,0x4A0F,0x453D,0x4585,0xE4C1,0x7075,0x5B41,0x971B, + 0x975C,0xE4C6,0x9757,0x5B4A,0xE4C9,0x975F,0x9425,0x50D0,0xE4CD,0xE4CE, + 0x9789,0x979F,0x97B1,0x97BE,0x97C0,0x97D2,0x97E0,0xE4D6,0x97EE,0x741C, + 0xE4D9,0x97FF,0x97F5,0xE4DC,0xE4DD,0x4AD1,0x9834,0x9833,0x984B,0x9866, + 0x3B0E,0xE4E4,0x3D51,0xE4E6,0xE4E7, + /* row 145 */ + 64 | (254 << 8), /* first, last */ + 0xE4E8,0x98CA,0x98B7,0x98C8,0x98C7,0x4AFF, + 0xE4EE,0xE4EF,0x55B0,0x98E1,0x98E6,0x98EC,0x9378,0x9939,0xE4F6,0x4B72, + 0xE4F8,0xE4F9,0x99F5,0x9A0C,0x9A3B,0x9A10,0x9A58,0xE4FF,0x36C4,0xE501, + 0xE502,0x9AE0,0x9AE2,0xE505,0x9AF4,0x4C0E,0x9B14,0x9B2D,0xE50A,0x5034, + 0x9B34,0xE50D,0x38C3,0xE50F,0x9B50,0x9B40,0xE512,0x5A45,0xE514,0x9B8E, + 0xE516,0x9C02,0x9BFF,0x9C0C,0xE51A,0x9DD4,0xE51C,0xE51D,0xE51E,0xE51F, + 0xE520,0xE521,0x9D7E,0x9D83,0xE524,0x9E0E,0x6888,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x9DC4,0xE528,0xE529,0xE52A,0xE52B,0xE52C,0x9D39,0xE52E,0xE52F, + 0x9E90,0x9E95,0x9E9E,0x9EA2,0x4D34,0x9EAA,0x9EAF,0xE537,0x9EC1,0x3B60, + 0x39E5,0x3D1D,0x4F32,0x37BE,0xE53E,0x9F02,0x9F08,0x4B96,0x9424,0xE543, + 0x9F17,0x9F16,0x9F39,0x569F,0x568A,0x9F45,0x99B8,0xE54B,0x97F2,0x847F, + 0x9F62,0x9F69,0x7ADC,0x9F8E,0x7216,0x4BBE,0xE554,0xE555,0x7177,0xE557, + 0xE558,0xE559,0x739E,0xE55B,0xE55C,0x799F,0xE55E,0xE55F,0x9369,0x93F3, + 0xE562,0x92EC,0x9381,0x93CB,0xE566,0xE567,0x7217,0x3EEB,0x7772,0x7A43, + 0x70D0,0xE56D,0xE56E,0x717E,0xE570,0x70A3,0xE572,0xE573,0x3EC7,0xE575, + 0xE576,0xE577,0x3722,0xE579,0xE57A,0x36E1,0xE57C,0xE57D,0xE57E,0x3723, + 0xE580,0x575B,0xE582,0xE583,0xE584, + /* row 146 */ + 64 | (254 << 8), /* first, last */ + 0xE585,0xE586,0x8503,0xE588,0x8503,0x8455, + 0xE58B,0xE58C,0xE58D,0xE58E,0xE58F,0xE590,0x44F4,0xE592,0xE593,0xE594, + 0x67F9,0x3733,0x3C15,0x3DE7,0x586C,0xE59A,0x6810,0x4057,0xE59D,0xE59E, + 0xE59F,0xE5A0,0xE5A1,0x54CB,0x569E,0xE5A4,0x5692,0xE5A6,0xE5A7,0xE5A8, + 0x93C6,0xE5AA,0x939C,0x4EF8,0x512B,0x3819,0xE5AF,0x4EBC,0xE5B1,0xE5B2, + 0x4F4B,0x4F8A,0xE5B5,0x5A68,0xE5B7,0xE5B8,0x3999,0xE5BA,0xE5BB,0x3435, + 0x4F29,0xE5BE,0xE5BF,0xE5C0,0x8ADA,0xE5C2,0x4E98,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x50CD,0x510D,0x4FA2,0x4F03,0xE5C8,0xE5C9,0x4F42,0x502E,0x506C, + 0x5081,0x4FCC,0x4FE5,0x5058,0x50FC,0x5159,0x515B,0x515D,0x515E,0x6E76, + 0xE5D7,0xE5D8,0xE5D9,0x6D72,0xE5DB,0xE5DC,0x51A8,0x51C3,0xE5DF,0x44DD, + 0xE5E1,0xE5E2,0xE5E3,0x8D7A,0xE5E5,0xE5E6,0x5259,0x52A4,0xE5E9,0x52E1, + 0x936E,0x467A,0x718C,0xE5EE,0xE5EF,0xE5F0,0xE5F1,0x69D1,0xE5F3,0x7479, + 0x3EDE,0x7499,0x7414,0x7456,0x7398,0x4B8E,0xE5FB,0xE5FC,0x53D0,0x3584, + 0x720F,0xE600,0x55B4,0xE602,0x54CD,0xE604,0x571D,0x925D,0x96F4,0x9366, + 0x57DD,0x578D,0x577F,0x363E,0x58CB,0x5A99,0xE60F,0xE610,0xE611,0xE612, + 0x5A2C,0x59B8,0x928F,0x5A7E,0x5ACF,0x5A12,0xE619,0xE61A,0xE61B,0xE61C, + 0x36F5,0x6D05,0x7443,0x5A21,0xE621, + /* row 147 */ + 64 | (254 << 8), /* first, last */ + 0x5A81,0xE623,0xE624,0x93E0,0x748C,0xE627, + 0x7105,0x4972,0x9408,0xE62B,0x93BD,0x37A0,0x5C1E,0x5C9E,0x5E5E,0x5E48, + 0xE632,0xE633,0xE634,0x5ECD,0x5B4F,0xE637,0xE638,0x3701,0xE63A,0x36DD, + 0xE63C,0x36D3,0x812A,0xE63F,0xE640,0xE641,0xE642,0x5F0C,0x5F0E,0xE645, + 0xE646,0x5A6B,0xE648,0x5B44,0x8614,0xE64B,0x8860,0x607E,0xE64E,0xE64F, + 0x5FDB,0x3EB8,0xE652,0xE653,0xE654,0xE655,0x61C0,0xE657,0xE658,0xE659, + 0x6199,0x6198,0x6075,0xE65D,0xE65E,0xE65F,0xE660,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x6471,0xE662,0xE663,0x3A29,0xE665,0xE666,0xE667,0xE668,0x6337, + 0xE66A,0x64B6,0x6331,0x63D1,0xE66E,0xE66F,0x62A4,0xE671,0x643B,0x656B, + 0x6972,0x3BF4,0xE676,0xE677,0xE678,0xE679,0x550D,0xE67B,0xE67C,0xE67D, + 0x66CE,0xE67F,0xE680,0x3AE0,0x4190,0xE683,0xE684,0xE685,0xE686,0xE687, + 0xE688,0x78EE,0xE68A,0xE68B,0xE68C,0x3464,0xE68E,0xE68F,0xE690,0x668E, + 0xE692,0x666B,0x4B93,0x6630,0xE696,0xE697,0x6663,0xE699,0xE69A,0x661E, + 0xE69C,0x38D1,0xE69E,0xE69F,0x3B99,0xE6A1,0xE6A2,0x74D0,0x3B96,0x678F, + 0xE6A6,0x68B6,0x681E,0x3BC4,0x6ABE,0x3863,0xE6AC,0xE6AD,0x6A33,0x6A52, + 0x6AC9,0x6B05,0xE6B2,0x6511,0x6898,0x6A4C,0x3BD7,0x6A7A,0x6B57,0xE6B9, + 0xE6BA,0x93A0,0x92F2,0xE6BD,0xE6BE, + /* row 148 */ + 64 | (254 << 8), /* first, last */ + 0x9289,0xE6C0,0xE6C1,0x9467,0x6DA5,0x6F0B, + 0xE6C5,0x6D67,0xE6C7,0x3D8F,0x6E04,0xE6CA,0x5A3D,0x6E0A,0x5847,0x6D24, + 0x7842,0x713B,0xE6D1,0xE6D2,0x70F1,0x7250,0x7287,0x7294,0xE6D7,0xE6D8, + 0x5179,0xE6DA,0xE6DB,0x747A,0xE6DD,0xE6DE,0xE6DF,0xE6E0,0xE6E1,0x3F06, + 0x3EB1,0xE6E4,0xE6E5,0xE6E6,0x60A7,0x3EF3,0x74CC,0x743C,0x9387,0x7437, + 0x449F,0xE6EE,0x4551,0x7583,0x3F63,0xE6F2,0xE6F3,0x3F58,0x7555,0x7673, + 0xE6F7,0x3B19,0x7468,0xE6FA,0xE6FB,0xE6FC,0x3AFB,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x3DCD,0xE6FF,0x3EFF,0xE701,0xE702,0x91FA,0x5732,0x9342,0xE706, + 0xE707,0x50DF,0xE709,0xE70A,0x7778,0xE70C,0x770E,0x770F,0x777B,0xE710, + 0xE711,0x3A5E,0xE713,0x7438,0x749B,0x3EBF,0xE717,0xE718,0x40C8,0xE71A, + 0xE71B,0x9307,0xE71D,0x781E,0x788D,0x7888,0x78D2,0x73D0,0x7959,0xE724, + 0xE725,0x410E,0x799B,0x8496,0x79A5,0x6A2D,0xE72B,0x7A3A,0x79F4,0x416E, + 0xE72F,0x4132,0x9235,0x79F1,0xE733,0xE734,0xE735,0xE736,0xE737,0x3597, + 0x556B,0x3570,0x36AA,0xE73C,0xE73D,0x7AE2,0x5A59,0xE740,0xE741,0xE742, + 0x5A0D,0xE744,0x78F0,0x5A2A,0xE747,0x7AFE,0x41F9,0x7C5D,0x7C6D,0x4211, + 0xE74D,0xE74E,0xE74F,0x7CCD,0xE751,0xE752,0x7C8E,0x7C7C,0x7CAE,0x6AB2, + 0x7DDC,0x7E07,0x7DD3,0x7F4E,0xE75B, + /* row 149 */ + 64 | (254 << 8), /* first, last */ + 0xE75C,0xE75D,0x7D97,0xE75F,0x426A,0xE761, + 0xE762,0x67D6,0xE764,0xE765,0x57C4,0xE767,0xE768,0xE769,0x7FDD,0x7B27, + 0xE76C,0xE76D,0xE76E,0x7B0C,0xE770,0x99E6,0x8645,0x9A63,0x6A1C,0xE775, + 0x39E2,0xE777,0xE778,0x9A1F,0xE77A,0x8480,0xE77C,0xE77D,0x44EA,0x8137, + 0x4402,0x80C6,0x8109,0x8142,0xE784,0x98C3,0xE786,0x8262,0x8265,0xE789, + 0x8453,0xE78B,0x8610,0xE78D,0x5A86,0x417F,0xE790,0x5B2B,0xE792,0x5AE4, + 0xE794,0x86A0,0xE796,0xE797,0x882D,0xE799,0x5A02,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x886E,0x4F45,0x8887,0x88BF,0x88E6,0x8965,0x894D,0xE7A2,0x8954, + 0xE7A4,0xE7A5,0xE7A6,0xE7A7,0xE7A8,0xE7A9,0x3EAD,0x84A3,0x46F5,0x46CF, + 0x37F2,0x8A3D,0x8A1C,0xE7B1,0x5F4D,0x922B,0xE7B4,0x65D4,0x7129,0x70C4, + 0xE7B8,0x9D6D,0x8C9F,0x8CE9,0xE7BC,0x599A,0x77C3,0x59F0,0x436E,0x36D4, + 0x8E2A,0x8EA7,0xE7C4,0x8F30,0x8F4A,0x42F4,0x6C58,0x6FBB,0xE7CA,0x489B, + 0x6F79,0x6E8B,0xE7CE,0x9BE9,0x36B5,0xE7D1,0x90BB,0x9097,0x5571,0x4906, + 0x91BB,0x9404,0xE7D8,0x4062,0xE7DA,0x9427,0xE7DC,0xE7DD,0x84E5,0x8A2B, + 0x9599,0x95A7,0x9597,0x9596,0xE7E4,0x7445,0x3EC2,0xE7E7,0xE7E8,0xE7E9, + 0x3EE7,0xE7EB,0x968F,0xE7ED,0xE7EE,0xE7EF,0x3ECC,0xE7F1,0xE7F2,0xE7F3, + 0x7412,0x746B,0x3EFC,0x9741,0xE7F8, + /* row 150 */ + 64 | (254 << 8), /* first, last */ + 0x6847,0x4A1D,0xE7FB,0xE7FC,0x975D,0x9368, + 0xE7FF,0xE800,0xE801,0xE802,0x92BA,0x5B11,0x8B69,0x493C,0x73F9,0xE808, + 0x979B,0x9771,0x9938,0xE80C,0x5DC1,0xE80E,0xE80F,0x981F,0xE811,0x92F6, + 0xE813,0x91E5,0x44C0,0xE816,0xE817,0xE818,0x98DC,0xE81A,0x3F00,0x922A, + 0x4925,0x8414,0x993B,0x994D,0xE821,0x3DFD,0x999B,0x4B6F,0x99AA,0x9A5C, + 0xE827,0xE828,0x6A8F,0x9A21,0x5AFE,0x9A2F,0xE82D,0x4B90,0xE82F,0x99BC, + 0x4BBD,0x4B97,0x937D,0x5872,0xE835,0x5822,0xE837,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE838,0x7844,0xE83A,0xE83B,0x68C5,0x3D7D,0x9458,0x3927,0x6150, + 0xE841,0xE842,0x6107,0x9C4F,0x9C53,0x9C7B,0x9C35,0x9C10,0x9B7F,0x9BCF, + 0xE84B,0x9B9F,0xE84D,0xE84E,0x9D21,0x4CAE,0xE851,0x9E18,0x4CB0,0x9D0C, + 0xE855,0xE856,0xE857,0xE858,0x9DA5,0x84BD,0xE85B,0xE85C,0xE85D,0x85FC, + 0x4533,0xE860,0xE861,0xE862,0x8420,0x85EE,0xE865,0xE866,0xE867,0x79E2, + 0xE869,0xE86A,0x492D,0xE86C,0x3D62,0x93DB,0x92BE,0x9348,0xE871,0x78B9, + 0x9277,0x944D,0x4FE4,0x3440,0x9064,0xE878,0x783D,0x7854,0x78B6,0x784B, + 0xE87D,0xE87E,0xE87F,0x369A,0x4F72,0x6FDA,0x6FD9,0x701E,0x701E,0x5414, + 0xE887,0x57BB,0x58F3,0x578A,0x9D16,0x57D7,0x7134,0x34AF,0xE88F,0x71EB, + 0xE891,0xE892,0x5B28,0xE894,0xE895, + /* row 151 */ + 64 | (254 << 8), /* first, last */ + 0x610C,0x5ACE,0x5A0B,0x42BC,0xE89A,0x372C, + 0x4B7B,0xE89D,0x93BB,0x93B8,0xE8A0,0xE8A1,0x8472,0xE8A3,0xE8A4,0xE8A5, + 0xE8A6,0xE8A7,0x5994,0xE8A9,0xE8AA,0x7DA8,0xE8AC,0xE8AD,0xE8AE,0xE8AF, + 0xE8B0,0x92E5,0x73E2,0x3EE9,0x74B4,0xE8B5,0xE8B6,0x3EE1,0xE8B8,0x6AD8, + 0x73F3,0x73FB,0x3ED6,0xE8BD,0xE8BE,0xE8BF,0xE8C0,0xE8C1,0xE8C2,0xE8C3, + 0x7448,0xE8C5,0x70A5,0xE8C7,0x9284,0x73E6,0x935F,0xE8CB,0x9331,0xE8CD, + 0xE8CE,0x9386,0xE8D0,0xE8D1,0x4935,0xE8D3,0x716B,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE8D5,0xE8D6,0x56A4,0xE8D8,0xE8D9,0xE8DA,0x5502,0x79C4,0xE8DD, + 0x7DFE,0xE8DF,0xE8E0,0xE8E1,0x452E,0x9401,0x370A,0xE8E5,0xE8E6,0x59B0, + 0xE8E8,0xE8E9,0xE8EA,0x5AA1,0x36E2,0xE8ED,0x36B0,0x925F,0x5A79,0xE8F1, + 0xE8F2,0x9374,0x3CCD,0xE8F5,0x4A96,0x398A,0x50F4,0x3D69,0x3D4C,0xE8FB, + 0x7175,0x42FB,0xE8FE,0x6E0F,0xE900,0x44EB,0x6D57,0xE903,0x7067,0x6CAF, + 0x3CD6,0xE907,0xE908,0x6E02,0x6F0C,0x3D6F,0xE90C,0x7551,0x36BC,0x34C8, + 0x4680,0x3EDA,0x4871,0x59C4,0x926E,0x493E,0x8F41,0xE917,0xE918,0x5812, + 0x57C8,0x36D6,0xE91C,0x70FE,0xE91E,0xE91F,0xE920,0xE921,0xE922,0x68B9, + 0x6967,0xE925,0xE926,0xE927,0xE928,0xE929,0xE92A,0xE92B,0xE92C,0x6A1A, + 0xE92E,0xE92F,0x843E,0x44DF,0x44CE, + /* row 152 */ + 64 | (254 << 8), /* first, last */ + 0xE933,0xE934,0xE935,0xE936,0x6F17,0xE938, + 0x833D,0xE93A,0x83ED,0xE93C,0xE93D,0xE93E,0x5989,0x5A82,0xE941,0x5A61, + 0x5A71,0xE944,0xE945,0x372D,0x59EF,0xE948,0x36C7,0x718E,0x9390,0x669A, + 0xE94D,0x5A6E,0x5A2B,0xE950,0x6A2B,0xE952,0xE953,0xE954,0xE955,0x711D, + 0xE957,0xE958,0x4FB0,0xE95A,0x5CC2,0xE95C,0xE95D,0xE95E,0x6A0C,0xE960, + 0xE961,0x70A6,0x7133,0xE964,0x3DA5,0x6CDF,0xE967,0xE968,0x7E65,0x59EB, + 0x5D2F,0x3DF3,0x5F5C,0xE96E,0xE96F,0x7DA4,0x8426,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x5485,0xE973,0xE974,0xE975,0x577E,0xE977,0xE978,0x3FE5,0xE97A, + 0xE97B,0x7003,0xE97D,0x5D70,0x738F,0x7CD3,0xE981,0xE982,0x4FC8,0x7FE7, + 0x72CD,0x7310,0xE987,0x7338,0x7339,0xE98A,0x7341,0x7348,0x3EA9,0xE98E, + 0x906C,0x71F5,0xE991,0x73E1,0x81F6,0x3ECA,0x770C,0x3ED1,0x6CA2,0x56FD, + 0x7419,0x741E,0x741F,0x3EE2,0x3EF0,0x3EF4,0x3EFA,0x74D3,0x3F0E,0x3F53, + 0x7542,0x756D,0x7572,0x758D,0x3F7C,0x75C8,0x75DC,0x3FC0,0x764D,0x3FD7, + 0x7674,0x3FDC,0x767A,0xE9B0,0x7188,0x5623,0x8980,0x5869,0x401D,0x7743, + 0x4039,0x6761,0x4045,0x35DB,0x7798,0x406A,0x406F,0x5C5E,0x77BE,0x77CB, + 0x58F2,0x7818,0x70B9,0x781C,0x40A8,0x7839,0x7847,0x7851,0x7866,0x8448, + 0xE9CB,0x7933,0x6803,0x7932,0x4103, + /* row 153 */ + 64 | (254 << 8), /* first, last */ + 0x4109,0x7991,0x7999,0x8FBB,0x7A06,0x8FBC, + 0x4167,0x7A91,0x41B2,0x7ABC,0x8279,0x41C4,0x7ACF,0x7ADB,0x41CF,0x4E21, + 0x7B62,0x7B6C,0x7B7B,0x7C12,0x7C1B,0x4260,0x427A,0x7C7B,0x7C9C,0x428C, + 0x7CB8,0x4294,0x7CED,0x8F93,0x70C0,0xE9EF,0x7DCF,0x7DD4,0x7DD0,0x7DFD, + 0x7FAE,0x7FB4,0x729F,0x4397,0x8020,0x8025,0x7B39,0x802E,0x8031,0x8054, + 0x3DCC,0x57B4,0x70A0,0x80B7,0x80E9,0x43ED,0x810C,0x732A,0x810E,0x8112, + 0x7560,0x8114,0x4401,0x3B39,0x8156,0x8159,0x815A,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x4413,0x583A,0x817C,0x8184,0x4425,0x8193,0x442D,0x81A5,0x57EF, + 0x81C1,0x81E4,0x8254,0x448F,0x82A6,0x8276,0x82CA,0x82D8,0x82FF,0x44B0, + 0x8357,0x9669,0x698A,0x8405,0x70F5,0x8464,0x60E3,0x8488,0x4504,0x84BE, + 0x84E1,0x84F8,0x8510,0x8538,0x8552,0x453B,0x856F,0x8570,0x85E0,0x4577, + 0x8672,0x8692,0x86B2,0x86EF,0x9645,0x878B,0x4606,0x4617,0x88AE,0x88FF, + 0x8924,0x8947,0x8991,0xEA43,0x8A29,0x8A38,0x8A94,0x8AB4,0x8C51,0x8CD4, + 0x8CF2,0x8D1C,0x4798,0x585F,0x8DC3,0x47ED,0x4EEE,0x8E3A,0x55D8,0x5754, + 0x8E71,0x55F5,0x8EB0,0x4837,0x8ECE,0x8EE2,0x8EE4,0x8EED,0x8EF2,0x8FB7, + 0x8FC1,0x8FCA,0x8FCC,0x9033,0x99C4,0x48AD,0x98E0,0x9213,0x491E,0x9228, + 0x9258,0x926B,0x92B1,0x92AE,0x92BF, + /* row 154 */ + 64 | (254 << 8), /* first, last */ + 0x92E3,0x92EB,0x92F3,0x92F4,0x92FD,0x9343, + 0x9384,0x93AD,0x4945,0x4951,0x9EBF,0x9417,0x5301,0x941D,0x942D,0x943E, + 0x496A,0x9454,0x9479,0x952D,0x95A2,0x49A7,0x95F4,0x9633,0x49E5,0x67A0, + 0x4A24,0x9740,0x4A35,0x97B2,0x97C2,0x5654,0x4AE4,0x60E8,0x98B9,0x4B19, + 0x98F1,0x5844,0x990E,0x9919,0x51B4,0x991C,0x9937,0x9942,0x995D,0x9962, + 0x4B70,0x99C5,0x4B9D,0x9A3C,0x9B0F,0x7A83,0x9B69,0x9B81,0x9BDD,0x9BF1, + 0x9BF4,0x4C6D,0x9C20,0x376F,0xEAA9,0x9D49,0x9C3A,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x9EFE,0x5650,0x9D93,0x9DBD,0x9DC0,0x9DFC,0x94F6,0x8FB6,0x9E7B, + 0x9EAC,0x9EB1,0x9EBD,0x9EC6,0x94DC,0x9EE2,0x9EF1,0x9EF8,0x7AC8,0x9F44, + 0xEABF,0xEAC0,0xEAC1,0x691A,0x94C3,0x59AC,0xEAC5,0x5840,0x94C1,0x37B9, + 0xEAC9,0xEACA,0xEACB,0xEACC,0x5757,0x7173,0xEACF,0xEAD0,0xEAD1,0x546A, + 0xEAD3,0xEAD4,0x549E,0xEAD6,0xEAD7,0xEAD8,0xEAD9,0xEADA,0x60E7,0xEADC, + 0x567A,0xEADE,0xEADF,0xEAE0,0xEAE1,0xEAE2,0xEAE3,0x6955,0x9C2F,0x87A5, + 0xEAE7,0xEAE8,0xEAE9,0xEAEA,0xEAEB,0xEAEC,0x5C20,0xEAEE,0x5E0B,0xEAF0, + 0xEAF1,0xEAF2,0x671E,0xEAF4,0xEAF5,0xEAF6,0x3647,0xEAF8,0xEAF9,0xEAFA, + 0xEAFB,0x5364,0x84AD,0xEAFE,0xEAFF,0xEB00,0x8B81,0xEB02,0xEB03,0xEB04, + 0xEB05,0x4E78,0x70BB,0xEB08,0xEB09, + /* row 155 */ + 64 | (254 << 8), /* first, last */ + 0xEB0A,0xEB0B,0xEB0C,0xEB0D,0xEB0E,0xEB0F, + 0x62C3,0xEB11,0xEB12,0x7198,0x6855,0xEB15,0x69E9,0x36C8,0xEB18,0xEB19, + 0xEB1A,0xEB1B,0xEB1C,0xEB1D,0x82FD,0xEB1F,0xEB20,0xEB21,0x89A5,0xEB23, + 0x8FA0,0xEB25,0x97B8,0xEB27,0x9847,0x9ABD,0xEB2A,0xffff,0xEB2C,0xEB2D, + 0xEB2E,0xEB2F,0xEB30,0xEB31,0xEB32,0xEB33,0xEB34,0xEB35,0xEB36,0xEB37, + 0xEB38,0xEB39,0x5FB1,0x6648,0x66BF,0xEB3D,0xEB3E,0xEB3F,0x7201,0xEB41, + 0x77D7,0xEB43,0xEB44,0x7E87,0xEB46,0x58B5,0x670E,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x6918,0xEB4A,0xEB4B,0xEB4C,0xEB4D,0xEB4E,0xEB4F,0xEB50,0x48D0, + 0x4AB8,0xEB53,0xEB54,0xEB55,0xEB56,0xEB57,0xEB58,0xEB59,0xEB5A,0xEB5B, + 0x51D2,0xEB5D,0x599F,0xEB5F,0x3BBE,0xEB61,0xEB62,0xEB63,0x5788,0xEB65, + 0x399B,0xEB67,0xEB68,0xEB69,0x3762,0xEB6B,0x8B5E,0xEB6D,0x99D6,0xEB6F, + 0xEB70,0xEB71,0x7209,0xEB73,0xEB74,0x5965,0xEB76,0xEB77,0xEB78,0x8EDA, + 0xEB7A,0x528F,0x573F,0x7171,0xEB7E,0xEB7F,0xEB80,0xEB81,0x55BC,0xEB83, + 0xEB84,0xEB85,0x91D4,0x3473,0xEB88,0xEB89,0xEB8A,0x4718,0xEB8C,0xEB8D, + 0xEB8E,0xEB8F,0xEB90,0x5066,0x34FB,0xEB93,0x60DE,0xEB95,0x477C,0xEB97, + 0xEB98,0xEB99,0xEB9A,0xEB9B,0x57A1,0x7151,0x6FB6,0xEB9F,0xEBA0,0x9056, + 0xEBA2,0xEBA3,0x8B62,0xEBA5,0xEBA6, + /* row 156 */ + 64 | (254 << 8), /* first, last */ + 0x5D5B,0xEBA8,0x8F36,0xEBAA,0xEBAB,0x8AEA, + 0xEBAD,0xEBAE,0xEBAF,0xEBB0,0x4BC0,0xEBB2,0xEBB3,0xEBB4,0x9465,0xEBB6, + 0x6195,0x5A27,0xEBB9,0x4FBB,0x56B9,0xEBBC,0xEBBD,0x4E6A,0xEBBF,0x9656, + 0x6D8F,0xEBC2,0x3618,0x8977,0xEBC5,0xEBC6,0xEBC7,0xEBC8,0x71DF,0xEBCA, + 0x7B42,0xEBCC,0xEBCD,0xEBCE,0x9104,0xEBD0,0x7A45,0x9DF0,0xEBD3,0x9A26, + 0xEBD5,0x365F,0xEBD7,0xEBD8,0x7983,0xEBDA,0xEBDB,0x5D2C,0xEBDD,0x83CF, + 0xEBDF,0x46D0,0xEBE1,0x753B,0x8865,0xEBE4,0x58B6,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x371C,0xEBE7,0xEBE8,0xEBE9,0x3C54,0xEBEB,0xEBEC,0x9281,0xEBEE, + 0xEBEF,0x9330,0xEBF1,0xEBF2,0x6C39,0x949F,0xEBF5,0xEBF6,0x8827,0x88F5, + 0xEBF9,0xEBFA,0xEBFB,0x6EB8,0xEBFD,0xEBFE,0x39A4,0x36B9,0x5C10,0x79E3, + 0x453F,0x66B6,0xEC05,0xEC06,0x8943,0xEC08,0xEC09,0x56D6,0x40DF,0xEC0C, + 0x39A1,0xEC0E,0xEC0F,0xEC10,0x71AD,0x8366,0xEC13,0xEC14,0x5A67,0x4CB7, + 0xEC17,0xEC18,0xEC19,0xEC1A,0xEC1B,0xEC1C,0xEC1D,0x7B43,0x797E,0xEC20, + 0x6FB5,0xEC22,0x6A03,0xEC24,0x53A2,0xEC26,0x93BF,0x6836,0x975D,0xEC2A, + 0xEC2B,0xEC2C,0xEC2D,0xEC2E,0xEC2F,0x5D85,0xEC31,0xEC32,0x5715,0x9823, + 0xEC35,0x5DAB,0xEC37,0x65BE,0x69D5,0x53D2,0xEC3B,0xEC3C,0x3C11,0x6736, + 0xEC3F,0xEC40,0xEC41,0xEC42,0xEC43, + /* row 157 */ + 64 | (254 << 8), /* first, last */ + 0xEC44,0xEC45,0xEC46,0xEC47,0xEC48,0xEC49, + 0x35CA,0xEC4B,0xEC4C,0x48FA,0x63E6,0xEC4F,0x7808,0x9255,0xEC52,0x43F2, + 0xEC54,0x43DF,0xEC56,0xEC57,0xEC58,0x59F8,0xEC5A,0x8F0B,0xEC5C,0xEC5D, + 0x7B51,0xEC5F,0xEC60,0x3DF7,0xEC62,0xEC63,0x8FD0,0x728F,0x568B,0xEC67, + 0xEC68,0xEC69,0xEC6A,0xEC6B,0xEC6C,0xEC6D,0xEC6E,0xEC6F,0xEC70,0xEC71, + 0xEC72,0xEC73,0x7E9F,0xEC75,0xEC76,0x4CA4,0x9547,0xEC79,0x71A2,0xEC7B, + 0x4D91,0x9012,0xEC7E,0x4D9C,0xEC80,0x8FBE,0x55C1,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x8FBA,0xEC84,0x8FB9,0xEC86,0x4509,0x7E7F,0x6F56,0x6AB1,0x4EEA, + 0x34E4,0xEC8D,0xEC8E,0x373A,0x8E80,0xEC91,0xEC92,0xEC93,0xEC94,0xEC95, + 0xEC96,0x3DEB,0xEC98,0xEC99,0xEC9A,0xEC9B,0x4E9A,0xEC9D,0xEC9E,0x56BF, + 0xECA0,0x8E0E,0x5B6D,0xECA3,0xECA4,0x63DE,0x62D0,0xECA7,0xECA8,0x6530, + 0x562D,0xECAB,0x541A,0xECAD,0x3DC6,0xECAF,0x4C7D,0x5622,0x561E,0x7F49, + 0xECB4,0x5975,0xECB6,0x8770,0x4E1C,0xECB9,0xECBA,0xECBB,0x8117,0x9D5E, + 0x8D18,0x763B,0x9C45,0x764E,0x77B9,0x9345,0x5432,0x8148,0x82F7,0x5625, + 0x8132,0x8418,0x80BD,0x55EA,0x7962,0x5643,0x5416,0xECCF,0x35CE,0x5605, + 0x55F1,0x66F1,0xECD4,0x362D,0x7534,0x55F0,0x55BA,0x5497,0x5572,0xECDB, + 0xECDC,0x5ED0,0xECDE,0xECDF,0xECE0, + /* row 158 */ + 64 | (254 << 8), /* first, last */ + 0xECE1,0x9EAB,0x7D5A,0x55DE,0xECE5,0x629D, + 0x976D,0x5494,0x8CCD,0x71F6,0x9176,0x63FC,0x63B9,0x63FE,0x5569,0xECF0, + 0x9C72,0xECF2,0x519A,0x34DF,0xECF5,0x51A7,0x544D,0x551E,0x5513,0x7666, + 0x8E2D,0xECFC,0x75B1,0x80B6,0x8804,0x8786,0x88C7,0x81B6,0x841C,0xED04, + 0x44EC,0x7304,0xED07,0x5B90,0x830B,0xED0A,0x567B,0xED0C,0xED0D,0xED0E, + 0xED0F,0xED10,0xED11,0x9170,0xED13,0x9208,0xED15,0xED16,0xED17,0xED18, + 0x7266,0xED1A,0x474E,0xED1C,0xED1D,0xED1E,0x40FA,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x9C5D,0x651F,0xED22,0x48F3,0xED24,0xED25,0xED26,0xED27,0x6062, + 0xED29,0xED2A,0xffff,0xED2C,0xED2D,0x71A3,0x7E8E,0x9D50,0x4E1A,0x4E04, + 0x3577,0x5B0D,0x6CB2,0x5367,0x36AC,0x39DC,0x537D,0x36A5,0xED3B,0x589A, + 0xED3D,0x822D,0x544B,0x57AA,0xED41,0xED42,0xffff,0x3A52,0xED45,0x7374, + 0xED47,0x4D09,0x9BED,0xED4A,0xED4B,0x4C5B,0xED4D,0xED4E,0xED4F,0x845C, + 0xED51,0xED52,0xED53,0xED54,0x632E,0x7D25,0xED57,0xED58,0x3A2A,0x9008, + 0x52CC,0x3E74,0x367A,0x45E9,0xED5F,0x7640,0x5AF0,0xED62,0x787A,0x47B6, + 0x58A7,0x40BF,0x567C,0x9B8B,0x5D74,0x7654,0xED6B,0x9E85,0x4CE1,0x75F9, + 0x37FB,0x6119,0xED71,0xED72,0xffff,0x565D,0xED75,0x57A7,0xED77,0xED78, + 0x5234,0xED7A,0x35AD,0x6C4A,0x9D7C, + /* row 159 */ + 64 | (254 << 8), /* first, last */ + 0x7C56,0x9B39,0x57DE,0xED81,0x5C53,0x64D3, + 0xED84,0xED85,0xED86,0x86AD,0xED88,0xED89,0xED8A,0xED8B,0xffff,0x51FE, + 0xED8E,0x5D8E,0x9703,0xED91,0x9E81,0x904C,0x7B1F,0x9B02,0x5CD1,0x7BA3, + 0x6268,0x6335,0x9AFF,0x7BCF,0x9B2A,0x7C7E,0x9B2E,0x7C42,0x7C86,0x9C15, + 0x7BFC,0x9B09,0x9F17,0x9C1B,0xEDA6,0x9F5A,0x5573,0x5BC3,0x4FFD,0x9E98, + 0x4FF2,0x5260,0x3E06,0x52D1,0x5767,0x5056,0x59B7,0x5E12,0x97C8,0x9DAB, + 0x8F5C,0x5469,0x97B4,0x9940,0x97BA,0x532C,0x6130,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x692C,0x53DA,0x9C0A,0x9D02,0x4C3B,0x9641,0x6980,0x50A6,0x7546, + 0xEDC6,0x99DA,0x5273,0xffff,0x9159,0x9681,0x915C,0xffff,0x9151,0xEDCF, + 0x637F,0xEDD1,0x6ACA,0x5611,0x918E,0x757A,0x6285,0xEDD7,0x734F,0x7C70, + 0xEDDA,0xEDDB,0xffff,0xEDDD,0x76D6,0x9B9D,0x4E2A,0xEDE1,0x83BE,0x8842, + 0xffff,0x5C4A,0x69C0,0x50ED,0x577A,0x521F,0x5DF5,0x4ECE,0x6C31,0xEDED, + 0x4F39,0x549C,0x54DA,0x529A,0x8D82,0x35FE,0x5F0C,0x35F3,0xffff,0x6B52, + 0x917C,0x9FA5,0x9B97,0x982E,0x98B4,0x9ABA,0x9EA8,0x9E84,0x717A,0x7B14, + 0xffff,0x6BFA,0x8818,0x7F78,0xffff,0x5620,0xEE08,0x8E77,0x9F53,0xffff, + 0x8DD4,0x8E4F,0x9E1C,0x8E01,0x6282,0xEE11,0x8E28,0x8E75,0x7AD3,0xEE15, + 0x7A3E,0x78D8,0x6CEA,0x8A67,0x7607, + /* row 160 */ + 64 | (254 << 8), /* first, last */ + 0xEE1B,0x9F26,0x6CCE,0x87D6,0x75C3,0xEE20, + 0x7853,0xEE22,0x8D0C,0x72E2,0x7371,0x8B2D,0x7302,0x74F1,0x8CEB,0xEE2A, + 0x862F,0x5FBA,0x88A0,0x44B7,0xffff,0xEE30,0xEE31,0xffff,0x8A7E,0xEE34, + 0xffff,0x60FD,0x7667,0x9AD7,0x9D44,0x936E,0x9B8F,0x87F5,0xffff,0x880F, + 0x8CF7,0x732C,0x9721,0x9BB0,0x35D6,0x72B2,0x4C07,0x7C51,0x994A,0xEE48, + 0x6159,0x4C04,0x9E96,0x617D,0xffff,0x575F,0x616F,0x62A6,0x6239,0x62CE, + 0x3A5C,0x61E2,0x53AA,0xEE56,0x6364,0x6802,0x35D2,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x5D57,0xEE5B,0x8FDA,0xEE5D,0xffff,0x50D9,0xEE60,0x7906,0x5332, + 0x9638,0xEE64,0x4065,0xffff,0x77FE,0xffff,0x7CC2,0xEE6A,0x7CDA,0x7A2D, + 0x8066,0x8063,0x7D4D,0x7505,0x74F2,0x8994,0x821A,0x670C,0x8062,0xEE76, + 0x805B,0x74F0,0x8103,0x7724,0x8989,0xEE7C,0x7553,0xEE7E,0x87A9,0x87CE, + 0x81C8,0x878C,0x8A49,0x8CAD,0x8B43,0x772B,0x74F8,0x84DA,0x3635,0x69B2, + 0x8DA6,0xffff,0x89A9,0x7468,0x6DB9,0x87C1,0xEE91,0x74E7,0x3DDB,0x7176, + 0x60A4,0x619C,0x3CD1,0x7162,0x6077,0xffff,0x7F71,0xEE9C,0x7250,0x60E9, + 0x4B7E,0x5220,0x3C18,0xEEA2,0xEEA3,0xEEA4,0xEEA5,0xEEA6,0xEEA7,0xEEA8, + 0xEEA9,0xEEAA,0x5CC1,0xEEAC,0xEEAD,0xEEAE,0xEEAF,0xEEB0,0xEEB1,0x4562, + 0x5B1F,0xEEB4,0x9F50,0x9EA6,0xEEB7, + /* row 161: --- */ + /* row 162: --- */ + /* row 163: --- */ + /* row 164: --- */ + /* row 165: --- */ + /* row 166: --- */ + /* row 167: --- */ + /* row 168: --- */ + /* row 169: --- */ + /* row 170: --- */ + /* row 171: --- */ + /* row 172: --- */ + /* row 173: --- */ + /* row 174: --- */ + /* row 175: --- */ + /* row 176: --- */ + /* row 177: --- */ + /* row 178: --- */ + /* row 179: --- */ + /* row 180: --- */ + /* row 181: --- */ + /* row 182: --- */ + /* row 183: --- */ + /* row 184: --- */ + /* row 185: --- */ + /* row 186: --- */ + /* row 187: --- */ + /* row 188: --- */ + /* row 189: --- */ + /* row 190: --- */ + /* row 191: --- */ + /* row 192: --- */ + /* row 193: --- */ + /* row 194: --- */ + /* row 195: --- */ + /* row 196: --- */ + /* row 197: --- */ + /* row 198 */ + 161 | (254 << 8), /* first, last */ + 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x2474,0x2475,0x2476,0x2477,0x2478,0x2479,0x247A,0x247B,0x247C, + 0x247D,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178, + 0x2179,0x4E36,0x4E3F,0x4E85,0x4EA0,0x5182,0x5196,0x51AB,0x52F9,0x5338, + 0x5369,0x53B6,0x590A,0x5B80,0x5DDB,0x2F33,0x5E7F,0xF6E0,0x5F50,0x5F61, + 0x6534,0xF6E4,0x7592,0xF6E6,0x8FB5,0xF6E8,0x00A8,0x02C6,0x30FD,0x30FE, + 0x309D,0x309E,0xF6EF,0xF6F0,0x3005,0x3006,0x3007,0x30FC,0xFF3B,0xFF3D, + 0x273D,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049, + 0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050,0x3051,0x3052,0x3053, + 0x3054,0x3055,0x3056,0x3057,0x3058, + /* row 199 */ + 64 | (254 << 8), /* first, last */ + 0x3059,0x305A,0x305B,0x305C,0x305D,0x305E, + 0x305F,0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068, + 0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070,0x3071,0x3072, + 0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,0x3079,0x307A,0x307B,0x307C, + 0x307D,0x307E,0x307F,0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086, + 0x3087,0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090, + 0x3091,0x3092,0x3093,0x30A1,0x30A2,0x30A3,0x30A4,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x30A5,0x30A6,0x30A7,0x30A8,0x30A9,0x30AA,0x30AB,0x30AC,0x30AD, + 0x30AE,0x30AF,0x30B0,0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7, + 0x30B8,0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0,0x30C1, + 0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8,0x30C9,0x30CA,0x30CB, + 0x30CC,0x30CD,0x30CE,0x30CF,0x30D0,0x30D1,0x30D2,0x30D3,0x30D4,0x30D5, + 0x30D6,0x30D7,0x30D8,0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF, + 0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8,0x30E9, + 0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0,0x30F1,0x30F2,0x30F3, + 0x30F4,0x30F5,0x30F6,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401, + 0x0416,0x0417,0x0418,0x0419,0x041A, + /* row 200 */ + 64 | (254 << 8), /* first, last */ + 0x041B,0x041C,0x041D,0x041E,0x041F,0x0420, + 0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A, + 0x042B,0x042C,0x042D,0x042E,0x042F,0x0430,0x0431,0x0432,0x0433,0x0434, + 0x0435,0x0451,0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D, + 0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, + 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F,0x21E7,0x21B8, + 0x21B9,0xF7E5,0xF7E6,0x4E5A,0xF7E8,0x5202,0xF7EA,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xF7EB,0x5188,0xF7ED,0xF7EE,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xFFE2,0xFFE4,0xFF07,0xFF02,0x3231, + 0x2116,0x2121,0x309B,0x309C,0x2E80,0x2E84,0x2E86,0x2E87,0x2E88,0x2E8A, + 0x2E8C,0x2E8D,0x2E95,0x2E9C,0x2E9D,0x2EA5,0x2EA7,0x2EAA,0x2EAC,0x2EAE, + 0x2EB6,0x2EBC,0x2EBE,0x2EC6,0x2ECA,0x2ECC,0x2ECD,0x2ECF,0x2ED6,0x2ED7, + 0x2EDE,0x2EE3,0xffff,0xffff,0xffff,0x0283,0x0250,0x025B,0x0254,0x0275, + 0x0153,0x00F8,0x014B,0x028A,0x026A, + /* row 201: --- */ + /* row 202: --- */ + /* row 203: --- */ + /* row 204: --- */ + /* row 205: --- */ + /* row 206: --- */ + /* row 207: --- */ + /* row 208: --- */ + /* row 209: --- */ + /* row 210: --- */ + /* row 211: --- */ + /* row 212: --- */ + /* row 213: --- */ + /* row 214: --- */ + /* row 215: --- */ + /* row 216: --- */ + /* row 217: --- */ + /* row 218: --- */ + /* row 219: --- */ + /* row 220: --- */ + /* row 221: --- */ + /* row 222: --- */ + /* row 223: --- */ + /* row 224: --- */ + /* row 225: --- */ + /* row 226: --- */ + /* row 227: --- */ + /* row 228: --- */ + /* row 229: --- */ + /* row 230: --- */ + /* row 231: --- */ + /* row 232: --- */ + /* row 233: --- */ + /* row 234: --- */ + /* row 235: --- */ + /* row 236: --- */ + /* row 237: --- */ + /* row 238: --- */ + /* row 239: --- */ + /* row 240: --- */ + /* row 241: --- */ + /* row 242: --- */ + /* row 243: --- */ + /* row 244: --- */ + /* row 245: --- */ + /* row 246: --- */ + /* row 247: --- */ + /* row 248: --- */ + /* row 249 */ + 214 | (254 << 8), /* first, last */ + 0x7881,0x92B9,0x88CF,0x58BB,0x6052,0x7CA7, + 0x5AFA,0x2554,0x2566,0x2557,0x2560,0x256C,0x2563,0x255A,0x2569,0x255D, + 0x2552,0x2564,0x2555,0x255E,0x256A,0x2561,0x2558,0x2567,0x255B,0x2553, + 0x2565,0x2556,0x255F,0x256B,0x2562,0x2559,0x2568,0x255C,0x2551,0x2550, + 0x256D,0x256E,0x2570,0x256F,0xFFED, + /* row 250 */ + 64 | (254 << 8), /* first, last */ + 0xE000,0x92DB,0xE002,0xE003,0x854C,0x42B5, + 0x73EF,0x51B5,0x3649,0xE009,0xE00A,0x9344,0xE00C,0x82EE,0xE00E,0x783C, + 0x6744,0x62DF,0xE012,0xE013,0xE014,0xE015,0xE016,0x4FAB,0xE018,0x5008, + 0xE01A,0xE01B,0xE01C,0xE01D,0xE01E,0x5029,0xE020,0x5FA4,0xE022,0xE023, + 0x6EDB,0xE025,0x507D,0x5101,0x347A,0x510E,0x986C,0x3743,0x8416,0xE02D, + 0xE02E,0x5160,0xE030,0x516A,0xE032,0xE033,0xE034,0xE035,0xE036,0xE037, + 0xE038,0x5B82,0x877D,0xE03B,0xE03C,0x51B2,0x51B8,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x9D34,0x51C9,0x51CF,0x51D1,0x3CDC,0x51D3,0xE045,0x51B3,0x51E2, + 0x5342,0x51ED,0x83CD,0x693E,0xE04C,0x5F7B,0x520B,0x5226,0x523C,0x52B5, + 0x5257,0x5294,0x52B9,0x52C5,0x7C15,0x8542,0x52E0,0x860D,0xE05A,0x5305, + 0xE05C,0x5549,0x6ED9,0xE05F,0xE060,0xE061,0x5333,0x5344,0xE064,0x6CCB, + 0xE066,0x681B,0x73D5,0x604A,0x3EAA,0x38CC,0xE06C,0x71DD,0x44A2,0x536D, + 0x5374,0xE071,0x537E,0x537F,0xE074,0xE075,0x77E6,0x5393,0xE078,0x53A0, + 0x53AB,0x53AE,0x73A7,0xE07D,0x3F59,0x739C,0x53C1,0x53C5,0x6C49,0x4E49, + 0x57FE,0x53D9,0x3AAB,0xE087,0x53E0,0xE089,0xE08A,0x53F6,0xE08C,0x5413, + 0x7079,0x552B,0x6657,0x6D5B,0x546D,0xE093,0xE094,0x555D,0x548F,0x54A4, + 0x47A6,0xE099,0xE09A,0x3DB4,0xE09C, + /* row 251 */ + 64 | (254 << 8), /* first, last */ + 0xE09D,0xE09E,0x5547,0x4CED,0x542F,0x7417, + 0x5586,0x55A9,0x5605,0xE0A6,0xE0A7,0x4552,0xE0A9,0x66B3,0xE0AB,0x5637, + 0x66CD,0xE0AE,0x66A4,0x66AD,0x564D,0x564F,0x78F1,0x56F1,0x9787,0x53FE, + 0x5700,0x56EF,0x56ED,0xE0BA,0x3623,0xE0BC,0x5746,0xE0BE,0x6C6E,0x708B, + 0x5742,0x36B1,0xE0C3,0x57E6,0xE0C5,0x5803,0xE0C7,0xE0C8,0x5826,0xE0CA, + 0x585C,0x58AA,0x3561,0x58E0,0x58DC,0xE0D0,0x58FB,0x5BFF,0x5743,0xE0D4, + 0xE0D5,0x93D3,0x35A1,0x591F,0x68A6,0x36C3,0x6E59,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE0DC,0x5A24,0x5553,0xE0DF,0x8505,0x59C9,0xE0E2,0xE0E3,0xE0E4, + 0xE0E5,0x59D9,0xE0E7,0xE0E8,0xE0E9,0x6D71,0xE0EB,0xE0EC,0x59F9,0xE0EE, + 0x5AAB,0x5A63,0x36E6,0xE0F2,0x5A77,0x3708,0x5A96,0x7465,0x5AD3,0xE0F8, + 0xE0F9,0x3D85,0xE0FB,0x3732,0xE0FD,0x5E83,0x52D0,0x5B76,0x6588,0x5B7C, + 0xE103,0x4004,0x485D,0xE106,0x5BD5,0x6160,0xE109,0xE10A,0xE10B,0x5BF3, + 0x5B9D,0x4D10,0x5C05,0xE110,0x5C13,0x73CE,0x5C14,0xE114,0xE115,0x5C49, + 0x48DD,0x5C85,0x5CE9,0x5CEF,0x5D8B,0xE11C,0xE11D,0x5D10,0x5D18,0x5D46, + 0xE121,0x5CBA,0x5DD7,0x82FC,0x382D,0xE126,0xE127,0xE128,0x8287,0x3836, + 0x3BC2,0x5E2E,0x6A8A,0x5E75,0x5E7A,0xE130,0xE131,0x53A6,0x4EB7,0x5ED0, + 0x53A8,0xE136,0x5E09,0x5EF4,0xE139, + /* row 252 */ + 64 | (254 << 8), /* first, last */ + 0x5EF9,0x5EFB,0x38A0,0x5EFC,0x683E,0x941B, + 0x5F0D,0xE141,0xE142,0x3ADE,0x48AE,0xE145,0x5F3A,0xE147,0xE148,0x5F58, + 0xE14A,0x5F63,0x97BD,0xE14D,0x5F72,0x9340,0xE150,0x5FA7,0x5DB6,0x3D5F, + 0xE154,0xE155,0xE156,0xE157,0x91D6,0xE159,0xE15A,0x6031,0x6685,0xE15D, + 0x3963,0x3DC7,0x3639,0x5790,0xE162,0x7971,0x3E40,0x609E,0x60A4,0x60B3, + 0xE168,0xE169,0xE16A,0x74A4,0x50E1,0x5AA0,0x6164,0x8424,0x6142,0xE171, + 0xE172,0x6181,0x51F4,0xE175,0x6187,0x5BAA,0xE178,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE179,0x61D3,0xE17B,0xE17C,0x61D0,0x3932,0xE17F,0xE180,0x6023, + 0x615C,0x651E,0x638B,0xE185,0x62C5,0xE187,0x62D5,0xE189,0x636C,0xE18B, + 0x3A17,0x6438,0x63F8,0xE18F,0xE190,0x6490,0x6F8A,0xE193,0x9814,0xE195, + 0xE196,0x64E1,0x64E5,0x947B,0x3A66,0x643A,0x3A57,0x654D,0x6F16,0xE19F, + 0xE1A0,0x6585,0x656D,0x655F,0xE1A4,0x65B5,0xE1A6,0x4B37,0x65D1,0x40D8, + 0xE1AA,0x65E0,0x65E3,0x5FDF,0xE1AE,0x6618,0xE1B0,0xE1B1,0x6644,0xE1B3, + 0xE1B4,0x664B,0xE1B6,0x6667,0xE1B8,0x6673,0x6674,0xE1BB,0xE1BC,0xE1BD, + 0xE1BE,0xE1BF,0x77C5,0xE1C1,0x99A4,0x6702,0xE1C4,0xE1C5,0x3B2B,0x69FA, + 0xE1C8,0x675E,0x6767,0x6762,0xE1CC,0xE1CD,0x67D7,0x44E9,0x6822,0x6E50, + 0x923C,0x6801,0xE1D4,0xE1D5,0x685D, + /* row 253 */ + 64 | (254 << 8), /* first, last */ + 0xE1D7,0x69E1,0x6A0B,0xE1DA,0x6973,0x68C3, + 0xE1DD,0x6901,0x6900,0x3D32,0x3A01,0xE1E2,0x3B80,0x67AC,0x6961,0xE1E6, + 0x42FC,0x6936,0x6998,0x3BA1,0xE1EB,0x8363,0x5090,0x69F9,0xE1EF,0xE1F0, + 0x6A45,0xE1F2,0x6A9D,0x3BF3,0x67B1,0x6AC8,0xE1F7,0x3C0D,0x6B1D,0xE1FA, + 0x60DE,0x6B35,0x6B74,0xE1FE,0x6EB5,0xE200,0xE201,0xE202,0x3740,0x5421, + 0xE205,0x6BE1,0xE207,0x6BDC,0x6C37,0xE20A,0xE20B,0xE20C,0x6C5A,0x8226, + 0x6C79,0xE210,0x44C5,0xE212,0xE213,0xE214,0xE215,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE216,0x36E5,0x3CEB,0xE219,0x9B83,0xE21B,0xE21C,0x7F8F,0x6837, + 0xE21F,0xE220,0xE221,0x6D96,0x6D5C,0x6E7C,0x6F04,0xE226,0xE227,0xE228, + 0x8533,0xE22A,0x51C7,0x6C9C,0x6E1D,0x842E,0xE22F,0x6E2F,0xE231,0x7453, + 0xE233,0x79CC,0x6E4F,0x5A91,0xE237,0x6FF8,0x370D,0x6F9D,0xE23B,0x6EFA, + 0xE23D,0xE23E,0x4555,0x93F0,0x6F44,0x6F5C,0x3D4E,0x6F74,0xE245,0x3D3B, + 0x6F9F,0xE248,0x6FD3,0xE24A,0xE24B,0xE24C,0xE24D,0xE24E,0xE24F,0x51DF, + 0xE251,0xE252,0xE253,0xE254,0x704B,0x707E,0x70A7,0x7081,0x70CC,0x70D5, + 0x70D6,0x70DF,0x4104,0x3DE8,0x71B4,0x7196,0xE261,0x712B,0x7145,0x5A88, + 0x714A,0x716E,0x5C9C,0xE268,0x714F,0x9362,0xE26B,0x712C,0xE26D,0xE26E, + 0xE26F,0x71BA,0xE271,0x70BD,0x720E, + /* row 254 */ + 64 | (254 << 8), /* first, last */ + 0x9442,0x7215,0x5911,0x9443,0x7224,0x9341, + 0xE27A,0x722E,0x7240,0xE27D,0x68BD,0x7255,0x7257,0x3E55,0xE282,0x680D, + 0x6F3D,0x7282,0x732A,0x732B,0xE288,0xE289,0x48ED,0xE28B,0x7328,0x732E, + 0x73CF,0x73AA,0xE290,0xE291,0x73C9,0x7449,0xE294,0xE295,0xE296,0x6623, + 0x36C5,0xE299,0xE29A,0xE29B,0x73F7,0x7415,0x6903,0xE29F,0x7439,0xE2A1, + 0x3ED7,0x745C,0xE2A4,0x7460,0xE2A6,0x7447,0x73E4,0x7476,0x83B9,0x746C, + 0x3730,0x7474,0x93F1,0x6A2C,0x7482,0x4953,0xE2B2,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xE2B3,0xE2B4,0xE2B5,0x5B46,0xE2B7,0xE2B8,0x74C8,0xE2BA,0x750E, + 0x74E9,0x751E,0xE2BE,0xE2BF,0x5BD7,0xE2C1,0x9385,0x754D,0x754A,0x7567, + 0x756E,0xE2C7,0x3F04,0xE2C9,0x758E,0x745D,0x759E,0x75B4,0x7602,0x762C, + 0x7651,0x764F,0x766F,0x7676,0xE2D4,0x7690,0x81EF,0x37F8,0xE2D8,0xE2D9, + 0x76A1,0x76A5,0x76B7,0x76CC,0xE2DE,0x8462,0xE2E0,0xE2E1,0xE2E2,0x771E, + 0x7726,0x7740,0x64AF,0xE2E7,0x7758,0xE2E9,0x77AF,0xE2EB,0xE2EC,0xE2ED, + 0x77F4,0x7809,0xE2F0,0xE2F1,0x68CA,0x78AF,0x78C7,0x78D3,0x96A5,0x792E, + 0xE2F8,0x78D7,0x7934,0x78B1,0xE2FC,0x8FB8,0x8884,0xE2FF,0xE300,0xE301, + 0x7986,0x8900,0x6902,0x7980,0xE306,0x799D,0xE308,0x793C,0x79A9,0x6E2A, + 0xE30C,0x3EA8,0x79C6,0xE30F,0x79D4, + /* row 255: --- */ +}; + +sal_Int32 const aImplBig5Hkscs2001ToUnicodeRowOffsets[] = { + -1, /* row 0 */ + -1, /* row 1 */ + -1, /* row 2 */ + -1, /* row 3 */ + -1, /* row 4 */ + -1, /* row 5 */ + -1, /* row 6 */ + -1, /* row 7 */ + -1, /* row 8 */ + -1, /* row 9 */ + -1, /* row 10 */ + -1, /* row 11 */ + -1, /* row 12 */ + -1, /* row 13 */ + -1, /* row 14 */ + -1, /* row 15 */ + -1, /* row 16 */ + -1, /* row 17 */ + -1, /* row 18 */ + -1, /* row 19 */ + -1, /* row 20 */ + -1, /* row 21 */ + -1, /* row 22 */ + -1, /* row 23 */ + -1, /* row 24 */ + -1, /* row 25 */ + -1, /* row 26 */ + -1, /* row 27 */ + -1, /* row 28 */ + -1, /* row 29 */ + -1, /* row 30 */ + -1, /* row 31 */ + -1, /* row 32 */ + -1, /* row 33 */ + -1, /* row 34 */ + -1, /* row 35 */ + -1, /* row 36 */ + -1, /* row 37 */ + -1, /* row 38 */ + -1, /* row 39 */ + -1, /* row 40 */ + -1, /* row 41 */ + -1, /* row 42 */ + -1, /* row 43 */ + -1, /* row 44 */ + -1, /* row 45 */ + -1, /* row 46 */ + -1, /* row 47 */ + -1, /* row 48 */ + -1, /* row 49 */ + -1, /* row 50 */ + -1, /* row 51 */ + -1, /* row 52 */ + -1, /* row 53 */ + -1, /* row 54 */ + -1, /* row 55 */ + -1, /* row 56 */ + -1, /* row 57 */ + -1, /* row 58 */ + -1, /* row 59 */ + -1, /* row 60 */ + -1, /* row 61 */ + -1, /* row 62 */ + -1, /* row 63 */ + -1, /* row 64 */ + -1, /* row 65 */ + -1, /* row 66 */ + -1, /* row 67 */ + -1, /* row 68 */ + -1, /* row 69 */ + -1, /* row 70 */ + -1, /* row 71 */ + -1, /* row 72 */ + -1, /* row 73 */ + -1, /* row 74 */ + -1, /* row 75 */ + -1, /* row 76 */ + -1, /* row 77 */ + -1, /* row 78 */ + -1, /* row 79 */ + -1, /* row 80 */ + -1, /* row 81 */ + -1, /* row 82 */ + -1, /* row 83 */ + -1, /* row 84 */ + -1, /* row 85 */ + -1, /* row 86 */ + -1, /* row 87 */ + -1, /* row 88 */ + -1, /* row 89 */ + -1, /* row 90 */ + -1, /* row 91 */ + -1, /* row 92 */ + -1, /* row 93 */ + -1, /* row 94 */ + -1, /* row 95 */ + -1, /* row 96 */ + -1, /* row 97 */ + -1, /* row 98 */ + -1, /* row 99 */ + -1, /* row 100 */ + -1, /* row 101 */ + -1, /* row 102 */ + -1, /* row 103 */ + -1, /* row 104 */ + -1, /* row 105 */ + -1, /* row 106 */ + -1, /* row 107 */ + -1, /* row 108 */ + -1, /* row 109 */ + -1, /* row 110 */ + -1, /* row 111 */ + -1, /* row 112 */ + -1, /* row 113 */ + -1, /* row 114 */ + -1, /* row 115 */ + -1, /* row 116 */ + -1, /* row 117 */ + -1, /* row 118 */ + -1, /* row 119 */ + -1, /* row 120 */ + -1, /* row 121 */ + -1, /* row 122 */ + -1, /* row 123 */ + -1, /* row 124 */ + -1, /* row 125 */ + -1, /* row 126 */ + -1, /* row 127 */ + -1, /* row 128 */ + -1, /* row 129 */ + -1, /* row 130 */ + -1, /* row 131 */ + -1, /* row 132 */ + -1, /* row 133 */ + -1, /* row 134 */ + -1, /* row 135 */ + 0, /* row 136; 148/216 bytes (68.5%) */ + 108, /* row 137; 288/384 bytes (75.0%) */ + 300, /* row 138; 294/384 bytes (76.6%) */ + 492, /* row 139; 310/382 bytes (81.2%) */ + 683, /* row 140; 234/316 bytes (74.1%) */ + 841, /* row 141; 252/320 bytes (78.8%) */ + 1001, /* row 142; 316/384 bytes (82.3%) */ + 1193, /* row 143; 316/384 bytes (82.3%) */ + 1385, /* row 144; 316/384 bytes (82.3%) */ + 1577, /* row 145; 316/384 bytes (82.3%) */ + 1769, /* row 146; 316/384 bytes (82.3%) */ + 1961, /* row 147; 316/384 bytes (82.3%) */ + 2153, /* row 148; 316/384 bytes (82.3%) */ + 2345, /* row 149; 316/384 bytes (82.3%) */ + 2537, /* row 150; 316/384 bytes (82.3%) */ + 2729, /* row 151; 316/384 bytes (82.3%) */ + 2921, /* row 152; 316/384 bytes (82.3%) */ + 3113, /* row 153; 316/384 bytes (82.3%) */ + 3305, /* row 154; 316/384 bytes (82.3%) */ + 3497, /* row 155; 314/384 bytes (81.8%) */ + 3689, /* row 156; 316/384 bytes (82.3%) */ + 3881, /* row 157; 316/384 bytes (82.3%) */ + 4073, /* row 158; 310/384 bytes (80.7%) */ + 4265, /* row 159; 298/384 bytes (77.6%) */ + 4457, /* row 160; 296/384 bytes (77.1%) */ + -1, /* row 161 */ + -1, /* row 162 */ + -1, /* row 163 */ + -1, /* row 164 */ + -1, /* row 165 */ + -1, /* row 166 */ + -1, /* row 167 */ + -1, /* row 168 */ + -1, /* row 169 */ + -1, /* row 170 */ + -1, /* row 171 */ + -1, /* row 172 */ + -1, /* row 173 */ + -1, /* row 174 */ + -1, /* row 175 */ + -1, /* row 176 */ + -1, /* row 177 */ + -1, /* row 178 */ + -1, /* row 179 */ + -1, /* row 180 */ + -1, /* row 181 */ + -1, /* row 182 */ + -1, /* row 183 */ + -1, /* row 184 */ + -1, /* row 185 */ + -1, /* row 186 */ + -1, /* row 187 */ + -1, /* row 188 */ + -1, /* row 189 */ + -1, /* row 190 */ + -1, /* row 191 */ + -1, /* row 192 */ + -1, /* row 193 */ + -1, /* row 194 */ + -1, /* row 195 */ + -1, /* row 196 */ + -1, /* row 197 */ + 4649, /* row 198; 190/190 bytes (100.0%) */ + 4744, /* row 199; 316/384 bytes (82.3%) */ + 4936, /* row 200; 230/384 bytes (59.9%) */ + -1, /* row 201 */ + -1, /* row 202 */ + -1, /* row 203 */ + -1, /* row 204 */ + -1, /* row 205 */ + -1, /* row 206 */ + -1, /* row 207 */ + -1, /* row 208 */ + -1, /* row 209 */ + -1, /* row 210 */ + -1, /* row 211 */ + -1, /* row 212 */ + -1, /* row 213 */ + -1, /* row 214 */ + -1, /* row 215 */ + -1, /* row 216 */ + -1, /* row 217 */ + -1, /* row 218 */ + -1, /* row 219 */ + -1, /* row 220 */ + -1, /* row 221 */ + -1, /* row 222 */ + -1, /* row 223 */ + -1, /* row 224 */ + -1, /* row 225 */ + -1, /* row 226 */ + -1, /* row 227 */ + -1, /* row 228 */ + -1, /* row 229 */ + -1, /* row 230 */ + -1, /* row 231 */ + -1, /* row 232 */ + -1, /* row 233 */ + -1, /* row 234 */ + -1, /* row 235 */ + -1, /* row 236 */ + -1, /* row 237 */ + -1, /* row 238 */ + -1, /* row 239 */ + -1, /* row 240 */ + -1, /* row 241 */ + -1, /* row 242 */ + -1, /* row 243 */ + -1, /* row 244 */ + -1, /* row 245 */ + -1, /* row 246 */ + -1, /* row 247 */ + -1, /* row 248 */ + 5128, /* row 249; 84/84 bytes (100.0%) */ + 5170, /* row 250; 316/384 bytes (82.3%) */ + 5362, /* row 251; 316/384 bytes (82.3%) */ + 5554, /* row 252; 316/384 bytes (82.3%) */ + 5746, /* row 253; 316/384 bytes (82.3%) */ + 5938, /* row 254; 316/384 bytes (82.3%) */ + -1, /* row 255 */ +}; + +sal_uInt16 const aImplUnicodeToBig5Hkscs2001Data[] = { + /* plane 0, page 0 */ + 168 | (252 << 8), /* first, last */ + 0xC6D8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8859,0x8857, 0, 0, 0, 0, 0, 0, + 0x885D,0x885B,0x8866, 0, 0, 0, 0, 0, 0, 0, + 0x8861,0x885F, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x886A,0x8868, 0, 0, 0, 0, + 0, 0,0x886F,0x886D,0x88A7, 0,0x8873,0x8871, 0, 0, + 0, 0,0x8877,0x8875, 0, 0, 0, 0,0xC8FB,0x887B, + 0x8879, 0,0x88A2, + /* plane 0, page 1 */ + 0 | (220 << 8), /* first, last */ + 0x8856,0x8867, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x885A,0x886C, + 0, 0, 0, 0, 0, 0,0x885C,0x886E, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8870, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xC8FC,0x885E,0x8874, 0, 0, + 0, 0, 0,0xC8FA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8878, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8858,0x8869, 0,0x8872,0x8860, + 0x8876, 0,0x887A, 0,0x887C, 0,0x887D, 0,0x887E, 0, + 0x88A1, + /* plane 0, page 2 */ + 80 | (198 << 8), /* first, last */ + 0xC8F6,0x886B, 0, 0,0xC8F8, 0, 0, 0, 0, 0, + 0,0xC8F7, 0, 0, 0, 0, 0,0x88A8, 0, 0, + 0, 0, 0, 0, 0, 0,0xC8FE, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xC8F9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xC8F5, 0, 0, 0, 0, 0, 0,0xC8FD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xC6D9, + /* plane 0, page 3: --- */ + /* plane 0, page 4 */ + 1 | (81 << 8), /* first, last */ + 0xC7F9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xC7F3,0xC7F4,0xC7F5,0xC7F6, + 0xC7F7,0xC7F8,0xC7FA,0xC7FB,0xC7FC,0xC7FD,0xC7FE,0xC840,0xC841,0xC842, + 0xC843,0xC844,0xC845,0xC846,0xC847,0xC848,0xC849,0xC84A,0xC84B,0xC84C, + 0xC84D,0xC84E,0xC84F,0xC850,0xC851,0xC852,0xC853,0xC854,0xC855,0xC856, + 0xC857,0xC858,0xC859,0xC85A,0xC85C,0xC85D,0xC85E,0xC85F,0xC860,0xC861, + 0xC862,0xC863,0xC864,0xC865,0xC866,0xC867,0xC868,0xC869,0xC86A,0xC86B, + 0xC86C,0xC86D,0xC86E,0xC86F,0xC870,0xC871,0xC872,0xC873,0xC874,0xC875, + 0,0xC85B, + /* plane 0, page 5: --- */ + /* plane 0, page 6: --- */ + /* plane 0, page 7: --- */ + /* plane 0, page 8: --- */ + /* plane 0, page 9: --- */ + /* plane 0, page 10: --- */ + /* plane 0, page 11: --- */ + /* plane 0, page 12: --- */ + /* plane 0, page 13: --- */ + /* plane 0, page 14: --- */ + /* plane 0, page 15: --- */ + /* plane 0, page 16: --- */ + /* plane 0, page 17: --- */ + /* plane 0, page 18: --- */ + /* plane 0, page 19: --- */ + /* plane 0, page 20: --- */ + /* plane 0, page 21: --- */ + /* plane 0, page 22: --- */ + /* plane 0, page 23: --- */ + /* plane 0, page 24: --- */ + /* plane 0, page 25: --- */ + /* plane 0, page 26: --- */ + /* plane 0, page 27: --- */ + /* plane 0, page 28: --- */ + /* plane 0, page 29: --- */ + /* plane 0, page 30 */ + 190 | (193 << 8), /* first, last */ + 0x8863,0x88A4,0x8865,0x88A6, + /* plane 0, page 31: --- */ + /* plane 0, page 32: --- */ + /* plane 0, page 33 */ + 22 | (231 << 8), /* first, last */ + 0xC8D2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xC8D3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xC6B5,0xC6B6,0xC6B7,0xC6B8,0xC6B9,0xC6BA,0xC6BB,0xC6BC, + 0xC6BD,0xC6BE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xC877,0xC878, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xC876, + /* plane 0, page 34: --- */ + /* plane 0, page 35: --- */ + /* plane 0, page 36 */ + 96 | (125 << 8), /* first, last */ + 0xC6A1,0xC6A2,0xC6A3,0xC6A4, + 0xC6A5,0xC6A6,0xC6A7,0xC6A8,0xC6A9,0xC6AA, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xC6AB,0xC6AC,0xC6AD,0xC6AE, + 0xC6AF,0xC6B0,0xC6B1,0xC6B2,0xC6B3,0xC6B4, + /* plane 0, page 37 */ + 80 | (112 << 8), /* first, last */ + 0xF9F9,0xF9F8,0xF9E6,0xF9EF,0xF9DD,0xF9E8,0xF9F1,0xF9DF,0xF9EC,0xF9F5, + 0xF9E3,0xF9EE,0xF9F7,0xF9E5,0xF9E9,0xF9F2,0xF9E0,0xF9EB,0xF9F4,0xF9E2, + 0xF9E7,0xF9F0,0xF9DE,0xF9ED,0xF9F6,0xF9E4,0xF9EA,0xF9F3,0xF9E1,0xF9FA, + 0xF9FB,0xF9FD,0xF9FC, + /* plane 0, page 38: --- */ + /* plane 0, page 39 */ + 61 | (61 << 8), /* first, last */ + 0xC6E6, + /* plane 0, page 40: --- */ + /* plane 0, page 41: --- */ + /* plane 0, page 42: --- */ + /* plane 0, page 43: --- */ + /* plane 0, page 44: --- */ + /* plane 0, page 45: --- */ + /* plane 0, page 46 */ + 128 | (227 << 8), /* first, last */ + 0xC8D6, 0, + 0, 0,0xC8D7, 0,0xC8D8,0xC8D9,0xC8DA, 0,0xC8DB, 0, + 0xC8DC,0xC8DD, 0, 0, 0, 0, 0, 0, 0,0xC8DE, + 0, 0, 0, 0, 0, 0,0xC8DF,0xC8E0, 0, 0, + 0, 0, 0, 0, 0,0xC8E1, 0,0xC8E2, 0, 0, + 0xC8E3, 0,0xC8E4, 0,0xC8E5, 0, 0, 0, 0, 0, + 0, 0,0xC8E6, 0, 0, 0, 0, 0,0xC8E7, 0, + 0xC8E8, 0, 0, 0, 0, 0, 0, 0,0xC8E9, 0, + 0, 0,0xC8EA, 0,0xC8EB,0xC8EC, 0,0xC8ED, 0, 0, + 0, 0, 0, 0,0xC8EE,0xC8EF, 0, 0, 0, 0, + 0, 0,0xC8F0, 0, 0, 0, 0,0xC8F1, + /* plane 0, page 47 */ + 51 | (51 << 8), /* first, last */ + 0xC6CD, + /* plane 0, page 48 */ + 5 | (254 << 8), /* first, last */ + 0xC6E0,0xC6E1,0xC6E2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xC6E7,0xC6E8,0xC6E9,0xC6EA,0xC6EB, + 0xC6EC,0xC6ED,0xC6EE,0xC6EF,0xC6F0,0xC6F1,0xC6F2,0xC6F3,0xC6F4,0xC6F5, + 0xC6F6,0xC6F7,0xC6F8,0xC6F9,0xC6FA,0xC6FB,0xC6FC,0xC6FD,0xC6FE,0xC740, + 0xC741,0xC742,0xC743,0xC744,0xC745,0xC746,0xC747,0xC748,0xC749,0xC74A, + 0xC74B,0xC74C,0xC74D,0xC74E,0xC74F,0xC750,0xC751,0xC752,0xC753,0xC754, + 0xC755,0xC756,0xC757,0xC758,0xC759,0xC75A,0xC75B,0xC75C,0xC75D,0xC75E, + 0xC75F,0xC760,0xC761,0xC762,0xC763,0xC764,0xC765,0xC766,0xC767,0xC768, + 0xC769,0xC76A,0xC76B,0xC76C,0xC76D,0xC76E,0xC76F,0xC770,0xC771,0xC772, + 0xC773,0xC774,0xC775,0xC776,0xC777,0xC778,0xC779,0xC77A, 0, 0, + 0, 0, 0, 0, 0,0xC8D4,0xC8D5,0xC6DC,0xC6DD, 0, + 0,0xC77B,0xC77C,0xC77D,0xC77E,0xC7A1,0xC7A2,0xC7A3,0xC7A4,0xC7A5, + 0xC7A6,0xC7A7,0xC7A8,0xC7A9,0xC7AA,0xC7AB,0xC7AC,0xC7AD,0xC7AE,0xC7AF, + 0xC7B0,0xC7B1,0xC7B2,0xC7B3,0xC7B4,0xC7B5,0xC7B6,0xC7B7,0xC7B8,0xC7B9, + 0xC7BA,0xC7BB,0xC7BC,0xC7BD,0xC7BE,0xC7BF,0xC7C0,0xC7C1,0xC7C2,0xC7C3, + 0xC7C4,0xC7C5,0xC7C6,0xC7C7,0xC7C8,0xC7C9,0xC7CA,0xC7CB,0xC7CC,0xC7CD, + 0xC7CE,0xC7CF,0xC7D0,0xC7D1,0xC7D2,0xC7D3,0xC7D4,0xC7D5,0xC7D6,0xC7D7, + 0xC7D8,0xC7D9,0xC7DA,0xC7DB,0xC7DC,0xC7DD,0xC7DE,0xC7DF,0xC7E0,0xC7E1, + 0xC7E2,0xC7E3,0xC7E4,0xC7E5,0xC7E6,0xC7E7,0xC7E8,0xC7E9,0xC7EA,0xC7EB, + 0xC7EC,0xC7ED,0xC7EE,0xC7EF,0xC7F0,0xC7F1,0xC7F2, 0, 0, 0, + 0, 0,0xC6E3,0xC6DA,0xC6DB, + /* plane 0, page 49: --- */ + /* plane 0, page 50 */ + 49 | (49 << 8), /* first, last */ + 0xC8D1, + /* plane 0, page 51: --- */ + /* plane 0, page 52 */ + 53 | (251 << 8), /* first, last */ + 0x9277, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x96DF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x89D5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x93CD, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9BDF, 0, 0, 0, 0, + 0, 0,0xFA68, 0, 0,0x89DA,0x8F59, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x89DB, 0, 0, + 0x8F5D, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x89DC, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x96F7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8ADA, 0, + 0, 0, 0,0x8BDC, 0, 0, 0, 0, 0, 0, + 0x97DB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9E53, 0, 0, 0, 0,0x9DAA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9BEA, + /* plane 0, page 53 */ + 6 | (254 << 8), /* first, last */ + 0x8A6E, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8BC8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x89E8, 0,0x89EA, 0, 0, 0, 0, 0,0x8C4B, + 0, 0, 0, 0, 0, 0, 0,0xFB70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89ED, + 0, 0,0x94DD, 0,0x89EE, 0, 0, 0, 0,0x9EB4, + 0x8AD3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x92DB, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x94DB,0x89F9, 0, 0, 0, 0, 0, 0, 0, + 0,0xFB7A, 0, 0, 0,0x89FB, 0, 0, 0, 0, + 0, 0, 0,0x9EFC, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x89FC, 0,0x89BF, 0, 0, 0,0x89FE, 0,0x89E6, + 0, 0,0x9D46, 0, 0, 0,0x9DEE, 0, 0, 0, + 0xA07E, 0, 0, 0,0xA068, 0, 0, 0, 0,0x98E9, + 0,0x8B68, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8DFD,0x8BBE,0x9FD9, 0, 0, 0, 0, 0, 0, + 0,0x8AEB, 0, 0,0x9FD7, + /* plane 0, page 54 */ + 9 | (245 << 8), /* first, last */ + 0x8B6A, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9C5C, 0,0x8BB1, 0, 0, 0, + 0, 0, 0, 0, 0,0xFB5E, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9DF3, 0, 0, 0, 0, + 0, 0, 0,0xA0D0, 0, 0, 0,0xFC66, 0, 0, + 0, 0,0x92E9, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AEC,0x8FAB,0xFA48, 0, 0, 0, 0,0x8E45, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9C6F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EDE, 0, 0, 0, 0, 0, 0,0x89EF, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x96E9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9EBB, 0, 0, 0, 0, + 0x94DE, 0,0x9EB8, 0, 0, 0,0x97BA,0xFB65, 0, 0, + 0,0x95D6, 0, 0, 0,0x9CBB, 0, 0,0x97DA, 0, + 0, 0, 0,0x8F45, 0,0xFB7D,0x9158,0xFE64, 0,0x9856, + 0x9B4D, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x935B,0x95C7, 0,0x97E7, 0, 0, 0, 0, 0, + 0,0x9359, 0, 0, 0,0x91F5,0x97B8, 0, 0,0xFDA2, + 0xFBB6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x92FA, + /* plane 0, page 55 */ + 1 | (251 << 8), /* first, last */ + 0x9357, 0,0x8BA6, 0, 0, 0, 0,0xFBB9, 0, + 0x97B0, 0, 0,0xFDC4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9CA1, 0, + 0, 0, 0, 0,0x91F2,0x91F9, 0,0x8FF1, 0, 0, + 0, 0, 0, 0,0x9745,0x9853, 0, 0,0xFE78, 0, + 0xFBC1,0x9251, 0, 0, 0, 0, 0, 0,0x9DAD, 0, + 0, 0, 0, 0,0xFD6C, 0, 0,0xFA6B, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9BC2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9A7B, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8B60, 0, 0, 0, 0, 0, 0, 0, 0, + 0x934B, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9ABD, 0, 0, 0, 0, + 0x91B7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x95B4, 0, 0, 0, 0, 0,0xFEC5, 0, + 0,0x9EF0, + /* plane 0, page 56 */ + 15 | (250 << 8), /* first, last */ + 0x8D64, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9269, 0, 0, 0, 0, + 0, 0,0x8D67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFBEA, 0, 0, 0, 0, + 0, 0, 0, 0,0xFBEF, 0,0x8D68, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93EB, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFC42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9166, 0, 0, 0, 0, + 0, 0, 0, 0,0xFACD, 0, 0, 0, 0,0x93DD, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8BCC, + /* plane 0, page 57 */ + 8 | (254 << 8), /* first, last */ + 0x8D6D, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8D6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96A8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFCA6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8D6F, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8D70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC64, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9060, 0, + 0, 0, 0, 0, 0, 0, 0,0x8D74,0x97C3, 0, + 0, 0, 0, 0, 0, 0,0x8AD0, 0, 0, 0, + 0, 0, 0,0x9274, 0,0x9BBE, 0, 0, 0, 0, + 0,0x9CC8, 0, 0,0x9CBA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8D78, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9EB9, 0, 0, 0, 0, 0,0x955A, 0, 0,0x91B4, + 0, 0, 0, 0, 0, 0,0x8A48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8D7D, 0, + 0,0x8A7D, 0, 0,0x8AC2, + /* plane 0, page 58 */ + 1 | (251 << 8), /* first, last */ + 0xFD4A, 0,0x8DA1, 0, 0,0x8AD1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCB4,0x8B47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x93A4,0x9EDA, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8A51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8DA6, 0, 0, 0, 0, + 0, 0,0x9EC5, 0, 0, 0, 0,0xFCC4, 0, 0, + 0, 0,0xA078, 0,0x94B5, 0, 0, 0, 0, 0, + 0, 0,0xFCC2,0x8A6B, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8DAB, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFAE8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8DAD, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFC49, 0,0x93C1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x906F, 0,0x8DB0, 0, 0, 0, 0, 0, 0, 0, + 0,0x947E, + /* plane 0, page 59 */ + 14 | (244 << 8), /* first, last */ + 0x90FA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9479, 0, 0, 0, 0, + 0, 0, 0, 0,0x8DB2, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCEE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x997B, 0, 0, + 0, 0, 0, 0, 0, 0,0x8DB4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8DB7, 0, + 0, 0, 0, 0, 0, 0,0x91B3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DBB,0x8DBA, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DBC,0x9044, 0, 0, 0,0xFD4C, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x93E4, 0, 0,0x93E0, 0, 0, 0, 0, 0, 0, + 0,0xFD53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8DC3, 0, + 0x9BB8, 0, 0, 0,0xFBF0, 0,0x93E9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x93F6, 0, 0, 0, 0, + 0,0x8DC5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8DCA, 0, 0, 0, + 0, 0,0x8DCC,0xFD5D,0x93B5, + /* plane 0, page 60 */ + 13 | (239 << 8), /* first, last */ + 0xFD61, 0, 0, 0,0x9CF8, 0, 0, + 0,0x9252, 0, 0,0xA0E8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CA5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8C56, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DD6, 0,0x97C0, 0, 0, 0,0xA0DE, + 0, 0, 0, 0,0x97D2, 0, 0, 0, 0, 0, + 0xFAA5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFDA3, 0, 0, 0,0x8DDB, + /* plane 0, page 61 */ + 19 | (253 << 8), /* first, last */ + 0x8EAF, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91B5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFD49, 0, 0, 0, 0, 0, 0, 0, 0,0xFDD1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8DEB, 0, 0, 0, 0, 0,0x97C6, 0,0xFDCE, 0, + 0,0x90FC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFC59, 0, 0,0x96D6, 0, + 0, 0, 0, 0, 0,0x97C5,0x8DEF, 0, 0, 0, + 0,0x97D7, 0, 0, 0, 0, 0,0x8DF0, 0, 0, + 0, 0, 0, 0, 0,0x96A6, 0, 0, 0, 0, + 0, 0, 0,0xFBBF, 0, 0, 0, 0,0x8DF3, 0, + 0, 0, 0,0x9449, 0,0x8DF5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9872, 0, 0, 0, 0, + 0, 0, 0,0x8E6B, 0, 0, 0, 0, 0, 0, + 0xFAFD, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8F50, 0, 0, 0, 0, 0, 0,0x9DCC,0xFC65, + 0,0x8C44, 0, 0,0x996E,0x94A1, 0, 0, 0, 0, + 0,0x8F63, 0, 0, 0, 0, 0, 0, 0,0xA0DA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9253,0xFDE9, 0, 0,0x9DB5, 0, 0, 0, 0, + 0, 0, 0,0x9879, 0, 0, 0,0x9D5D, 0, 0, + 0, 0,0x8D63,0x9669, + /* plane 0, page 62 */ + 6 | (255 << 8), /* first, last */ + 0x9F70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFC6A, 0, 0,0x8AC7, 0, 0, + 0, 0,0x89D7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFE4D, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9EDD, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFEFB,0x98BC, + 0xFACC, 0, 0,0x95B0, 0, 0, 0,0x9464, 0, 0, + 0, 0, 0, 0,0x936F, 0, 0, 0, 0, 0, + 0,0x94B9, 0, 0,0x95EC, 0, 0, 0, 0,0x91EE, + 0, 0,0x98C3, 0,0x95F6, 0, 0, 0,0x8FFD,0x98C5, + 0, 0, 0, 0,0x9766,0xFE6E, 0, 0,0x97DD,0x8CAA, + 0, 0,0x92D2, 0, 0,0x9761,0x98CB, 0, 0, 0, + 0,0x95F0, 0,0x975D, 0,0x91E3, 0, 0, 0, 0, + 0x98CC, 0, 0,0x9469,0x98CD, 0, 0, 0, 0, 0, + 0x98CE, 0,0x95FC, 0, 0,0x94A3, + /* plane 0, page 63 */ + 0 | (250 << 8), /* first, last */ + 0x9662, 0, 0, 0,0xFEB6, 0,0x9463, 0, 0, 0, + 0, 0, 0, 0,0x98D0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x98D1, 0, 0, 0, 0,0x9475,0xFAE0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9472, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x98D6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8AF0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x98D9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x98DB, 0, 0, 0, 0, + 0x98DD, 0, 0, 0, 0, 0, 0, 0, 0,0x98A8, + 0, 0, 0, 0, 0, 0, 0,0x8A6D, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AFB, + 0x8AAE, + /* plane 0, page 64 */ + 4 | (250 << 8), /* first, last */ + 0xFBC9, 0, 0, 0, 0,0x8C5D, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x98E4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x98E6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x98E8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8A4D, 0, 0, 0,0x9257, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x95DF, 0, + 0,0xA0AC, 0, 0, 0, 0,0x98EB, 0, 0, 0, + 0,0x98EC, 0,0x8CC3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x98F4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8AB8, 0, 0, + 0,0x9EE7, 0, 0, 0, 0, 0, 0, 0, 0, + 0x94BC, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFCD1, 0, 0, 0, + 0, 0, 0,0x9CC6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9E7E, + /* plane 0, page 65 */ + 3 | (249 << 8), /* first, last */ + 0x98FE,0xFDE8, 0, 0, 0, 0,0x9940, + 0, 0, 0, 0,0x94C9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x94D3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9946, 0, 0, 0, 0,0x90C0, 0, + 0x94D1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9573, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x93C2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9948, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x994B, 0, 0, 0, + 0, 0,0x8E55, 0, 0, 0, 0,0x994E, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8EFE, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8E59, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94EC, + /* plane 0, page 66 */ + 17 | (252 << 8), /* first, last */ + 0x94EF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8C60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8F74, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9955, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9544, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8CCB, 0, + 0, 0,0x9956, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9959, 0, 0, 0, 0, 0, 0, 0,0x995B, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8CC4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFA45, 0, 0, 0,0x90B7, 0, 0,0x9743, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x95CD, 0, 0, 0, 0, 0, + 0,0x97C9,0xFD50, + /* plane 0, page 67 */ + 43 | (242 << 8), /* first, last */ + 0x8EB9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x95C6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9967, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8AB9, 0, 0, 0, + 0, 0, 0,0x8DFC, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8A76, 0, 0, + 0, 0, 0,0x9D51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9973, 0, 0, + 0, 0,0x9D4F, + /* plane 0, page 68 */ + 1 | (244 << 8), /* first, last */ + 0x997A,0x9564, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99A1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x99A5, 0, 0, + 0, 0, 0, 0, 0,0x99A7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8EED, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x99AD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x946E, + 0x8F70, 0,0xFAD0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99B3, 0, 0, 0, + 0, 0, 0,0xA053, 0, 0, 0, 0, 0, 0, + 0, 0,0x965C, 0, 0, 0, 0,0xFD7A, 0, 0, + 0, 0, 0, 0, 0, 0,0x97FE, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x92BD, 0,0x97FD, 0, 0, 0, 0,0x8F64, 0, + 0, 0, 0,0xFCF7,0x9562,0x97CD,0x9E64, 0, 0, 0, + 0, 0, 0, 0,0x924C, + /* plane 0, page 69 */ + 3 | (233 << 8), /* first, last */ + 0x8EC9,0x99BC, 0, 0, 0, 0,0x9DA5, + 0,0x8F54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8F7C, 0, 0, 0, 0, 0, 0,0x8EA2, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8F7A, + 0, 0, 0, 0, 0, 0,0x97AE, 0, 0, 0, + 0,0x96C8, 0, 0, 0, 0, 0, 0, 0,0x99C3, + 0,0x90D6, 0,0x9CBE, 0, 0, 0,0x8F76, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9470,0xFB4B, 0, 0,0xFDCA, 0, 0, 0, 0, + 0, 0,0x8EC7, 0, 0, 0, 0, 0,0xA0F9, 0, + 0, 0, 0, 0, 0, 0,0x8FA9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99C7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x90D7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9EDF, + /* plane 0, page 70 */ + 6 | (245 << 8), /* first, last */ + 0x99CE, 0, 0, 0, + 0, 0, 0, 0, 0,0x8FBA, 0, 0, 0, 0, + 0,0x8FEB, 0,0x99CF, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8FC2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x92C9, 0, 0, 0, 0, 0,0x97DC, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x95B3,0x9C79, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x95B2, + /* plane 0, page 71 */ + 19 | (244 << 8), /* first, last */ + 0x8FDB, + 0, 0, 0, 0,0x9BE3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9E7A, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BEE, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x99DE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFAFA, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EE5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8A52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x99E1, 0, 0, + 0, 0, 0, 0,0x8A67, + /* plane 0, page 72 */ + 0 | (250 << 8), /* first, last */ + 0x8BB5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AAC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x99E9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBCA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x97DE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x95D1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x99F5,0xFC4A, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9BA9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFBDC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFE56, 0, 0, + 0, 0, 0,0x9EA4, 0, 0, 0, 0, 0, 0, + 0x9D49, + /* plane 0, page 73 */ + 6 | (231 << 8), /* first, last */ + 0x95DB, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x89C5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x99F8, 0, 0, 0, 0, 0, 0,0x9664, 0, 0, + 0, 0,0x9055, 0, 0,0x96D4, 0, 0, 0, 0, + 0, 0, 0,0x977C, 0, 0, 0, 0, 0, 0, + 0x964D, 0,0x97E1, 0, 0, 0, 0, 0, 0,0x9A48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9A49, 0,0xFE7D, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x90AA, 0, 0, 0, 0,0x9A50, 0, 0, 0, + 0, 0, 0, 0,0x9347, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8ED8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x90C9, 0, 0, 0, 0, 0,0x9A55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x90BC, 0, 0, 0, 0, 0,0x9A58, + 0,0x8BB8, + /* plane 0, page 74 */ + 15 | (255 << 8), /* first, last */ + 0x90D5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9641, + 0, 0, 0, 0, 0, 0,0x9A5A, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9A5C, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x97C2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8ABB, 0, 0, 0,0x9BAA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x90F5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9A60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9145, + /* plane 0, page 75 */ + 16 | (192 << 8), /* first, last */ + 0x8C58, 0, 0, 0, + 0, 0, 0, 0, 0,0x9A63, 0, 0, 0, 0, + 0, 0,0x8C49, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8BB6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFCCF, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x966B,0x9A6E, 0,0x914F, 0, 0, 0, 0, 0, + 0, 0, 0,0x9746, 0, 0,0xA0E6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x92D7, 0,0x9675, 0, 0,0x93D4, 0, 0, + 0x91BB,0x9679, 0, 0, 0, 0, 0,0x9A70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9678, + 0x91CD, 0,0x9C4A, + /* plane 0, page 76 */ + 4 | (237 << 8), /* first, last */ + 0xA06F, 0, 0,0xA06A, 0, 0, + 0, 0, 0, 0,0x915F, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9FA5, + 0, 0,0x89BA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9ECD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9A79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9DCE, 0, 0, 0,0x8CD2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9D73, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x96B9, 0,0x96BC, 0, 0, 0, + 0, 0, 0,0x9CD1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x89B7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9EEE, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFB43, + /* plane 0, page 77 */ + 9 | (156 << 8), /* first, last */ + 0x9EC9, + 0, 0, 0, 0, 0, 0,0xFBD3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x91AE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9D78, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9D7B, + /* plane 0, page 78 */ + 4 | (248 << 8), /* first, last */ + 0x9EB3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9EB2, 0,0x9DD6, 0, + 0, 0, 0,0x994F, 0, 0,0x89CE, 0, 0, 0, + 0x8BC0, 0,0x9FC4, 0,0x8BD4, 0, 0,0x8C72, 0, 0, + 0, 0, 0, 0,0xC6BF,0x8BF9, 0, 0, 0, 0, + 0,0x8946, 0,0xC6C0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAE5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xC87B,0x8BC6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9C57, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9AFB, 0, 0, 0, 0, 0, 0, 0,0x89D0,0x89CF, + 0, 0, 0,0xC6C1, 0,0x89D1, 0,0x89E2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x927E, 0,0x9DBA, 0, 0, 0, 0, 0, + 0xC6C2, 0, 0,0x8C6F, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBF8, 0, 0, 0,0x8BC7,0x926B, 0, + 0,0x89D2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9FCF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9DA9,0x89D3, 0, 0,0x99E2, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9267, + /* plane 0, page 79 */ + 3 | (253 << 8), /* first, last */ + 0x92A4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8C73, 0, 0,0x894E, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x894F,0x9278, 0, 0, 0, 0, 0, 0, 0, 0, + 0x91B6, 0, 0, 0, 0,0x89D4, 0,0x9FD2, 0, 0, + 0, 0, 0, 0, 0, 0,0x92A7, 0, 0,0x95A2, + 0, 0, 0, 0, 0,0x926E, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x96EA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x926F, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x92A3, 0, 0, 0, 0, 0,0x8950, 0, + 0,0xFA57, 0, 0, 0, 0,0x9866, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89D6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x98B2, 0, 0, 0,0x92AB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x96DE,0x92AC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8C70, 0,0x9F6E, 0, 0, 0, 0, 0, 0,0x8EF2, + 0, 0, 0,0x9F6C, + /* plane 0, page 80 */ + 3 | (252 << 8), /* first, last */ + 0x89D8, 0, 0, 0, 0,0xFA59, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x92A8, 0, 0, 0, + 0, 0,0x9163, 0, 0, 0, 0, 0, 0,0x8C40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9F73, 0,0x92AD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9BE9, 0, 0, 0, 0, 0,0x92A9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x92AA, + 0, 0, 0, 0, 0, 0,0x89D9, 0, 0, 0, + 0, 0, 0, 0,0xFD56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9FA8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8C71, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x92A1, 0, 0,0x90E3, 0, + 0, 0, 0, 0, 0, 0, 0,0xA0A6, 0, 0, + 0, 0, 0,0x94AB, 0,0xFC72, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x97C4, 0, 0, 0, 0, 0, + 0, 0,0x92AE, + /* plane 0, page 81 */ + 1 | (254 << 8), /* first, last */ + 0xFA67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x92A2,0xFA69, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9268, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8951, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFA6F, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFA71, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8952, 0, 0, 0, + 0,0x945A, 0, 0, 0, 0, 0, 0, 0, 0, + 0xC6C3, 0, 0, 0,0x89DD, 0,0xC8A2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xC6C4, 0, 0, 0,0x9E52, 0,0x8953, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9E55,0x92BA, 0, + 0,0xC6C5, 0, 0,0x8C5B, 0, 0, 0,0xFA7D,0xFAA8, + 0x9A68,0xFA47, 0, 0,0xFA7E, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x92BB, 0, 0, 0,0xFDB6, + 0,0xFAA2, 0, 0, 0, 0, 0,0xFAA3, 0,0xFAA4, + 0x9BB4,0xFAA6, 0, 0, 0, 0, 0, 0, 0,0x89DF, + 0, 0, 0,0xFDDB, 0, 0,0xFAA9, 0,0x8954, 0, + 0, 0, 0, 0, 0, 0, 0,0xFAAB, 0, 0, + 0, 0, 0, 0,0xFC7A, 0, 0, 0, 0, 0, + 0, 0,0x89E0, 0,0x9F4F, + /* plane 0, page 82 */ + 2 | (249 << 8), /* first, last */ + 0xC87D, 0, 0,0x89E1, 0, 0, 0, 0, + 0,0xFAB0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9FCD,0xA0E7, 0, 0, 0, 0, 0,0xFAB1,0x89A6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EFA, 0, 0, 0, 0, 0, 0, 0, + 0xFAB2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFAB4, 0,0x92C4, + 0, 0, 0, 0, 0, 0,0x9F6F, 0, 0, 0, + 0, 0, 0, 0,0x8BB0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9FAC, 0, 0, 0, 0, + 0,0x89E3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9BD3,0x89E4, 0, 0, 0,0xFAB5, 0, + 0, 0, 0, 0,0x9FD5, 0, 0, 0, 0, 0, + 0,0x8955, 0, 0,0x92C5, 0, 0, 0,0x8956, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFAB3, 0, 0, 0,0xFAB6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFAB7, 0, 0, + 0, 0, 0, 0,0x9EDC, 0, 0, 0,0xFBC4,0x9F71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFABA,0x92C7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xC6C6, + /* plane 0, page 83 */ + 1 | (254 << 8), /* first, last */ + 0x9A4C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8C68, 0, 0,0x89E5, + 0, 0, 0, 0,0x9F7D, 0, 0, 0, 0, 0, + 0xA0A9,0xFAC4, 0, 0, 0, 0,0xC6C7, 0, 0,0x8957, + 0, 0, 0, 0, 0, 0,0xFAAA, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8958, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8BE3, 0,0x8B61, 0, 0, 0, 0, + 0x9AF1, 0, 0,0x9EB7, 0,0xC6C8, 0, 0, 0,0xFAD1, + 0, 0, 0, 0, 0, 0,0xFAD2, 0, 0, 0, + 0, 0, 0, 0, 0,0x9EBA,0xFAD4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFAD9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFADB, 0,0x9CE0, 0, 0, 0,0xFBF7, 0,0xFBFA,0x89E7, + 0xA07A,0xFADC, 0, 0,0xFADD, 0,0x89E9, 0, 0, 0, + 0, 0,0xC6C9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAE2,0x89EB, 0, 0,0xFAE3, 0, 0, + 0, 0, 0, 0,0x90C8, 0, 0, 0,0x92DA,0x8959, + 0x9CF5, 0, 0, 0, 0, 0,0x895A,0xFAE7,0x9FA2, 0, + 0, 0, 0, 0,0xFAEA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFAED,0x8FAD, 0, 0, + 0, 0, 0, 0,0xFB59, + /* plane 0, page 84 */ + 19 | (239 << 8), /* first, last */ + 0xFAEF, + 0x96EF, 0,0x9DEC, 0, 0, 0,0x9DCA, 0, 0, 0, + 0, 0, 0,0xFD6D, 0,0x89EC, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFB44, 0, 0, + 0x9DE2, 0,0x8C75, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9EC0, 0,0x9E56, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9F79,0x9AC7, 0, 0,0xFAF4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x98A1, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAF8, 0, 0, 0,0x89F0,0x9E47, 0, + 0,0x9DF7, 0, 0, 0, 0,0x9FD3, 0,0x9ACA, 0, + 0, 0, 0,0x89F1,0xFAF9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8E5A, 0, + 0x89F2, 0, 0, 0, 0,0x89F3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x925D,0x8B51,0x92E0, 0, 0,0x89F4, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9FD4, 0, + 0, 0, 0, 0, 0, 0, 0,0x8A79, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89F5, + /* plane 0, page 85 */ + 2 | (251 << 8), /* first, last */ + 0x97A7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93BA, 0, 0, 0, 0, 0,0x9E58, + 0, 0, 0, 0,0x89F6, 0, 0, 0, 0, 0, + 0x9E57, 0, 0, 0, 0,0x89F7, 0,0x8A41, 0, 0, + 0x89F8, 0, 0,0xFAF1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x89FA, 0, 0, 0, 0, 0, 0, + 0,0xFB42, 0,0xFABF, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBA3, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAF7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9E4E, 0,0x94DC, 0, 0, + 0, 0, 0,0x95DA,0x9DF8,0x9F6A, 0, 0, 0, 0, + 0,0x8AB7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFB46, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8A46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFB47, + 0, 0, 0, 0, 0, 0,0x9148, 0, 0, 0, + 0x92DE, 0, 0, 0, 0,0x8B53,0x9DF6, 0,0x9BDA, 0, + 0, 0, 0,0x9D7E, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x89FD,0x99E4, 0, 0, 0, + 0, 0,0x9E43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9DE9, 0,0x8F52, 0, 0, 0, + 0x9DF5,0x9DF0, 0, 0, 0,0x99E7, 0, 0, 0, 0, + 0,0x8BBD, + /* plane 0, page 86 */ + 5 | (253 << 8), /* first, last */ + 0x9DEF, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9FB7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9DD0, 0,0x9FEB,0x8DA9,0x9DCF,0x98E1, 0,0x9DE5, 0, 0, + 0, 0, 0, 0, 0,0x9DC8, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFB4F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9DEB, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFB54, 0,0xFB55, + 0x9AA2, 0,0x8AD6, 0,0x9A5F, 0, 0, 0, 0, 0, + 0, 0, 0,0x9EF5, 0, 0, 0,0x8FB7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9AD2,0x9E6A,0x9EE8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8BBF,0x91C2,0x9D62, + 0, 0, 0, 0, 0, 0,0x9260, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x925E,0x91C1, + 0,0x8AC5, 0, 0,0x97A3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8B6C, 0,0x8D7E, 0, 0, + 0, 0, 0, 0, 0,0x9C54, 0, 0, 0, 0, + 0,0x9DBD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CC5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x895B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFB5C, 0,0xFB5B, + 0,0xFB57, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x98C7, + /* plane 0, page 87 */ + 0 | (254 << 8), /* first, last */ + 0xFB5A, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CEE, 0, 0, 0, 0, 0, 0, 0,0x92E2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x94A7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8CCC, 0,0x9BD4, 0, 0,0xFB64,0xFB76, 0, 0, + 0xFB60, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x99E5, 0, 0,0x9AC2, 0, 0, + 0,0x91FB, 0, 0, 0,0xA073, 0, 0, 0, 0, + 0, 0, 0,0x9F72, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9FCC, 0, 0, 0,0x98A5,0x92E8, 0, 0, + 0, 0, 0, 0, 0, 0,0x9BBC, 0,0x96F3, 0, + 0,0x92E7, 0, 0,0xFC67, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8B7D, 0, 0, 0, + 0,0x9BF4, 0, 0, 0, 0, 0,0x9EF7, 0, 0, + 0x9EC1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x996F, 0, 0, 0, 0, 0, 0,0x96F1, 0, 0, + 0x8E41, 0, 0, 0, 0, 0,0x954A, 0, 0, 0, + 0x97E6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x96F5, 0, 0, 0, 0, + 0,0x92E6,0x9F42, 0, 0, 0, 0, 0, 0, 0, + 0xFB67, 0, 0, 0, 0, 0, 0, 0, 0,0x99A9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFAE6, + /* plane 0, page 88 */ + 3 | (251 << 8), /* first, last */ + 0xFB69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x97E5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x967D, 0, 0, 0,0xFB6C, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x99A2, 0, + 0, 0, 0, 0,0x9ABB, 0, 0, 0,0x9A65, 0, + 0,0x944E, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFB6E, 0, 0,0x99DF, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x98E3, 0, 0,0x9254, 0, + 0, 0, 0, 0,0x967B,0x8AAF, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8C77, 0, 0, 0, + 0, 0, 0,0x8BAF,0x9EBD, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9EE6, 0, 0, + 0xFB6F, 0, 0, 0, 0, 0,0x8EE1, 0, 0, 0, + 0,0x9B7D,0x9C7E, 0, 0, 0, 0,0xF9D9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x92EA, 0, 0, 0, 0,0x8C78, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFB72, 0, 0, 0,0xFB71, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x895C, 0,0x98F0,0x96F2, 0, 0, 0, 0, 0, 0, + 0,0xFB74, + /* plane 0, page 89 */ + 2 | (249 << 8), /* first, last */ + 0x8BC1, 0,0x895D,0x89DE, 0,0x895E, 0, 0, + 0xC6CA, 0, 0, 0, 0, 0, 0,0xFE42, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFB7B, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x895F, 0,0x8960, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9BCD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9DD3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x984C, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9752, 0, + 0, 0, 0, 0,0x95C3, 0, 0, 0, 0,0x9BB6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9AB9, 0, 0, 0,0x97B3, 0, 0, 0, + 0, 0, 0,0x9F74,0x92F1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x97DF, 0, 0, 0, + 0,0xFBA6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFBAB, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9877, 0, 0, 0,0x9854, + 0x95C5, 0, 0, 0, 0, 0, 0, 0,0x9D55,0xFBB2, + /* plane 0, page 90 */ + 2 | (254 << 8), /* first, last */ + 0x957E, 0, 0, 0, 0, 0, 0, 0, + 0,0x9742, 0,0x94E6, 0, 0, 0, 0,0x92F5, 0, + 0, 0, 0, 0, 0, 0,0x8CC5, 0, 0, 0, + 0, 0, 0,0x92FD, 0, 0,0xFBA2, 0, 0,0x9C51, + 0, 0,0x94E9,0x985C,0x92F0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x944C, 0, 0, 0, 0, 0, 0, 0,0x916B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8B78, 0, 0, 0, 0,0x94E2, + 0, 0, 0, 0, 0, 0, 0,0x984F, 0,0xFBB5, + 0, 0, 0, 0,0x9271, 0, 0,0x9365, 0, 0, + 0x985B, 0, 0,0x9850, 0, 0, 0, 0, 0, 0, + 0,0x97BC, 0, 0, 0, 0,0x92F3, 0, 0,0x9340, + 0x984D, 0, 0, 0,0x9572, 0,0xFDEF, 0, 0, 0, + 0, 0, 0, 0, 0,0xFDC1, 0, 0, 0, 0, + 0xFBBA, 0, 0,0x92EB, 0, 0, 0, 0, 0, 0, + 0xFC73,0x97B7, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFBB4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x90A7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9741,0x92F4, 0, 0, + 0,0xFBBC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9577, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9EE2, 0,0x8F78, 0, 0, 0, 0, 0, 0, 0, + 0xF9DC, 0, 0, 0,0x9672, + /* plane 0, page 91 */ + 13 | (255 << 8), /* first, last */ + 0x9EB5, 0, 0, 0,0x964B, 0, 0, + 0,0x8CAC, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xA0FA, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9575, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x90DA, 0, 0,0x9367, 0, + 0xFEA4, 0, 0, 0,0x90DF, 0, 0, 0, 0,0x9354, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8961, 0,0x8BB4, 0, 0, 0, 0,0x9DC0, + 0, 0, 0, 0, 0, 0,0x8E48, 0,0xFBC5, 0, + 0, 0, 0, 0,0xFBC7, 0, 0, 0,0xC6CB, 0, + 0xFA79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9E67, 0, 0, 0, 0, 0, + 0x8CD9, 0, 0, 0, 0, 0, 0,0xFBD2,0x8962,0x8963, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFC7D, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9F6B, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBCC, 0,0xFEAE, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBD1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFB75, + /* plane 0, page 92 */ + 5 | (245 << 8), /* first, last */ + 0xFBD4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFBD6, + 0xFBD8, 0, 0, 0, 0, 0, 0, 0,0x8B5D, 0, + 0x934C, 0,0x9AE2, 0, 0,0x8BC9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBDB,0x9FC9, 0, 0, 0, 0, 0, + 0, 0, 0,0x9F44, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x98ED, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBDD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DF2,0x8964, 0,0xFDF2, 0,0x934D, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFBE7, 0, 0, 0, + 0, 0, 0,0xA0F2,0x9868, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9F58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8D73, + 0, 0, 0,0xFBDE, 0, 0, 0, 0, 0,0xFBDF, + 0, 0, 0, 0, 0,0x8C48, + /* plane 0, page 93 */ + 16 | (245 << 8), /* first, last */ + 0xFBE3, 0, 0, 0, + 0,0x8DA8, 0, 0,0xFBE4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9C75, 0, 0,0x9878, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8D60, 0, 0, 0, 0, 0, 0, 0, + 0xFBE5, 0,0x8D61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8D62,0xA0A1, 0, 0, + 0,0x9C40, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x98AD, 0, 0, 0,0x9EEA, 0, 0, 0, + 0, 0, 0,0x8CD4, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9CEB, 0, 0, 0, 0, 0,0xFBE0, + 0, 0,0x9F51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8D65, 0, 0, 0, 0, 0, + 0,0x9CF1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFC58, 0, 0,0x8D66, 0, 0, 0, 0, + 0, 0, 0,0x9654, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFBE8, 0, 0, 0,0xC6CC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9FCE, + /* plane 0, page 94 */ + 9 | (252 << 8), /* first, last */ + 0xFBFC, + 0,0x9AE4, 0, 0, 0, 0, 0, 0,0x9F75, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFBF1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8D69, 0, 0, 0, + 0, 0,0x934F, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x934E, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFBF4, 0, 0, 0, 0,0xC6CE, 0, 0, + 0,0xFBC3, 0, 0,0x8965, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8C7A, 0, 0, 0, + 0, 0, 0,0x8C7B, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8D6A, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9353, 0, 0,0x9DFB, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFBFD, 0, 0, 0,0x9059,0xFC40, + 0,0xFC41,0xFC43, + /* plane 0, page 95 */ + 12 | (223 << 8), /* first, last */ + 0x9361,0xFC46,0x9362, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8D6B, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFC4C, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x95B8, 0, 0, + 0xC6D0,0x8BCA, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x987A, 0, 0, 0, 0,0xC6D1, 0,0xFC51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFC54, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAAF, 0, 0, 0, 0, 0, 0, + 0,0x8D6C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFA61, 0, 0,0xFC57, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9B70, 0, 0, + 0, 0, 0, 0, 0, 0,0xA051, 0, 0, 0, + 0, 0, 0, 0,0x8C7C, 0,0x8BCB, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x936E, + 0, 0, 0,0xFCD5, + /* plane 0, page 96 */ + 35 | (253 << 8), /* first, last */ + 0xFCA9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC61, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8966, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFACB, 0, 0, 0, 0, 0, + 0, 0,0xF9DA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x937A, 0,0xA0E0, + 0, 0, 0, 0, 0, 0,0x936B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFC6B, 0, + 0, 0, 0, 0,0xA0DC, 0, 0,0x9468, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC6D, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8D71, 0, 0, 0, 0, + 0, 0,0xFD64, 0, 0, 0, 0,0x99BA, 0, 0, + 0,0x9AD0,0x9A61,0xA0E5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA05B, + /* plane 0, page 97 */ + 7 | (226 << 8), /* first, last */ + 0x96AC, 0, 0, + 0, 0,0x9740, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9EF1, 0, 0, 0, 0, + 0, 0, 0, 0,0x8C4D, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9F7E, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8D72, 0, 0, 0, 0,0xFC76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x96A9, 0, 0, 0, 0, 0, 0, 0, 0,0xA06E, + 0, 0,0xFCAA, 0, 0, 0,0xFBCD, 0, 0, 0, + 0xFC74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xA074, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xA071, 0, 0, 0,0xFC79, + 0, 0, 0, 0, 0,0xFC7C, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9C50, + 0, 0,0x9379,0x9378, 0, 0,0xA0DD, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8D75, 0,0x8D76, 0, 0, 0, 0, + 0, 0,0x9374, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8D77,0xFCA5, 0, + 0,0xFCA2, 0, 0, 0, 0, 0, 0,0x90C3, 0, + 0, 0, 0, 0, 0, 0,0xA079, + /* plane 0, page 98 */ + 44 | (229 << 8), /* first, last */ + 0x8D79, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8BFC, 0,0xA076, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8BCD, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9F5A, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9FF4, 0, 0,0x9FBA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8D7A, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9E45, 0, 0, + 0, 0, 0, 0,0x93B0, 0,0xA075, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9B46, 0,0xFCAE, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCB0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFA51, 0, 0, 0, 0, 0,0x8D7B, + /* plane 0, page 99 */ + 24 | (254 << 8), /* first, last */ + 0x8D7C, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9ED6, 0, 0,0x93AC, + 0, 0, 0,0x9F5B, 0,0x93A9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xA07C, 0, 0, 0, 0, 0, 0, 0,0xFCB2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AC1, 0, 0, 0, 0, 0,0x9FB4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFCAC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9E4C, 0, 0, 0, 0, + 0, 0, 0,0x8FC5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93AD, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9DC3, 0, 0, 0,0x8DA2, 0, 0, 0, + 0x9D4A, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFCB6, 0, + 0,0x8DA3,0x9E4B, 0,0x9E4D, + /* plane 0, page 100 */ + 7 | (234 << 8), /* first, last */ + 0x8DA4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8AFD, 0, 0, 0, 0, 0,0xFCB5, 0,0xFCC3,0x93B2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8DA5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93A1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8AC6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8A5B, 0, 0, 0,0x894D, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFED4, 0, 0, 0, 0, + 0x8A78, 0,0x93AB, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8DA7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9F45, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8A56, 0, 0, 0,0xFCBF, 0, 0, 0,0xFCC0, + 0,0x8EE6, 0, 0,0x8AA4, + /* plane 0, page 101 */ + 10 | (255 << 8), /* first, last */ + 0x8943, 0, 0, 0, 0, 0, 0,0x93F3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFCAB,0x9EA2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9DC7, 0, + 0, 0,0xC6D2,0x8BCE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFCC5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFCCB, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x93B3, 0,0xFCCA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCC9,0x8DAC, 0,0xFBC6,0x8967, 0,0x8C7E, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFCCD, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9CF3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFCD0, + 0, 0,0x95BB, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFCD3, 0, 0,0xFCD4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8DAE, + /* plane 0, page 102 */ + 24 | (241 << 8), /* first, last */ + 0xFCD7, 0, 0, 0, 0, 0, + 0x93DB, 0, 0, 0, 0,0xFE63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x93D5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFCDA, 0, + 0, 0,0x9B71, 0, 0,0xFCDD, 0, 0, 0, 0, + 0, 0, 0,0x8DAF, 0, 0, 0,0xFAF2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93D8, + 0, 0, 0,0xFCDF, 0, 0, 0,0x93D3, 0, 0, + 0, 0, 0, 0, 0,0xFCE1, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8E76, 0, 0, 0, 0, + 0, 0, 0,0xFC62, 0, 0, 0, 0, 0, 0, + 0, 0,0x93D1, 0, 0, 0,0x8DB1, 0, 0, 0, + 0, 0, 0, 0,0x9859, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFB52, 0, 0, 0, 0, 0, + 0, 0, 0,0xFB53, 0, 0, 0, 0, 0,0xFB4D, + 0, 0,0x9CBF, 0, 0, 0, 0, 0, 0, 0, + 0,0x9B72, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFB50,0x93BE, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9DF1, + /* plane 0, page 103 */ + 2 | (254 << 8), /* first, last */ + 0xFCEB, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xA0BB, 0,0x9B7E, 0, 0, 0, 0, 0, + 0, 0,0x8DB3, 0, 0,0x8C52, 0, 0, 0, 0, + 0x9AE8, 0, 0, 0, 0, 0, 0,0x8EDC, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CF9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFA50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x98E7,0xFCF3, 0, + 0, 0, 0,0xFCF2, 0, 0, 0,0x8CCA, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93E5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9A59, 0, 0, 0,0x8DB5, 0, 0, 0, 0, 0, + 0, 0,0xFD4D, 0, 0, 0, 0,0xFD5E, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8F7D, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9547,0xFCF6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9250, + 0, 0, 0, 0,0x8968, + /* plane 0, page 104 */ + 0 | (202 << 8), /* first, last */ + 0x8DB6,0xFCFB,0xA07D,0x98FC,0x8969, 0, 0, 0, 0, 0, + 0, 0, 0,0xFE4F, 0, 0,0x9256, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFAC9, 0, 0, + 0x93E8, 0, 0, 0,0xFCF8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CE3,0xFDA9, 0, 0, 0, 0, + 0, 0,0xFC44, 0, 0, 0, 0, 0, 0, 0, + 0,0x9640, 0, 0,0x8DB8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9B4A,0x8FB9, 0, 0, 0, + 0, 0, 0,0xFCFE, 0, 0, 0, 0, 0, 0, + 0,0x896A, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8DB9, 0, 0, 0,0x917E, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x93F4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFB7C, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x93E7, 0, 0,0x97EF, 0, 0, 0,0xFE4A, + 0, 0, 0, 0, 0,0xFD45, 0,0x96A5, 0, 0, + 0, 0,0xFEE0, + /* plane 0, page 105 */ + 0 | (250 << 8), /* first, last */ + 0xFD48,0xFD47,0xFEF2,0xFE6A, 0, 0, 0, 0, 0,0x8DBD, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BA1,0x8CA2,0x9AB7,0x8EFC, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9FA1, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFD51, 0, 0, 0, 0, 0, + 0, 0,0xFAAD, 0, 0, 0, 0,0x8DBE, 0, 0, + 0x89A4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9AD9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFD4E, 0, 0, + 0x8DC0, 0, 0,0x97F0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x93B4,0xFD44, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9FA7, 0, + 0, 0, 0,0x8DC2, 0, 0, 0, 0,0x99B6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFD52, 0, 0, 0, 0, 0, 0,0x8DC1, + 0, 0,0x8E46, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA0D1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9FCA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x92CF, + 0, 0, 0,0x9CF4,0x8DC4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFD41, 0, 0, 0, 0, + 0, 0, 0,0x9B4C, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD57, + 0xFCEF, + /* plane 0, page 106 */ + 3 | (246 << 8), /* first, last */ + 0x9CDE, 0, 0, 0, 0, 0, 0, + 0,0xFD42,0x986C, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x97F9, 0,0x9558, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x985E,0xFE7B,0x94CD, 0, 0, 0, 0, + 0,0x93EE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8CA3, 0,0xFD5A, + 0, 0, 0, 0, 0, 0,0x93F5, 0, 0, 0, + 0, 0,0x93EF,0x8EEA, 0, 0, 0,0x8F5B, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8C5E, + 0,0x8DC6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DC8, 0, 0,0x8DC7, 0, 0, 0, + 0, 0,0x93F7, 0, 0, 0, 0, 0, 0, 0, + 0x8DC9, 0, 0, 0, 0, 0, 0, 0,0xFBF2, 0, + 0, 0, 0,0x9670, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DCB, 0, 0, 0,0xFD5C, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8F65, 0, 0, + 0,0x8DCD, 0, 0, 0, 0, 0,0x9DA8,0x94F9, 0, + 0,0x8DCE, 0, 0, 0, 0, 0, 0, 0, 0, + 0x93EA, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFD5F,0x93F0,0x9FB6, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8DCF, 0, 0, 0,0x9763, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8DD0, + /* plane 0, page 107 */ + 5 | (250 << 8), /* first, last */ + 0x93F1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFD65, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9FDB, 0, 0, 0, 0,0x93F8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8BF7, 0, 0, 0, 0,0xFD66, 0, 0, 0, + 0, 0,0x8BCF, 0, 0, 0, 0, 0, 0,0x8DD1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8DD2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFD71, 0, 0, 0, 0,0xFD6F, 0, 0, 0, 0, + 0, 0, 0, 0,0x8DD3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9FE7, + /* plane 0, page 108 */ + 28 | (255 << 8), /* first, last */ + 0x90BD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9FD0, + 0, 0, 0,0x8BD0, 0,0xFD72, 0,0x9CAE,0x8BD1, 0, + 0,0x8ADB, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAE4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x95CE, 0, + 0xFD76, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFB62, 0, 0, 0, 0, 0, 0,0x8DD4, 0, 0, + 0,0xFD78, 0, 0, 0, 0, 0,0x8EE3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9076, + 0, 0,0x98C6, 0, 0, 0, 0, 0, 0, 0, + 0x8DD5, 0, 0, 0, 0,0x97D1, 0, 0,0x9EB6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAC7, 0, 0,0xA042, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9873, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9FFC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8CA5, + /* plane 0, page 109 */ + 2 | (254 << 8), /* first, last */ + 0x8DD7, 0, 0,0x92FB,0x8DD8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x944F, 0,0x8DD9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x896B, 0, + 0, 0, 0, 0, 0, 0, 0,0x97CE, 0, 0, + 0,0xFAF3,0xFDAE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFBAF,0x92B7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8DDA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9C5A, 0, 0, 0, 0, 0, 0, + 0xFDAD, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8DDC,0x9444, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8DDD, 0, 0, + 0, 0, 0, 0, 0,0xA0D6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8C41, + /* plane 0, page 110 */ + 2 | (250 << 8), /* first, last */ + 0x97D5, 0,0x944A, 0, 0, 0, 0, 0, + 0x944D, 0, 0, 0, 0,0x97CB, 0, 0, 0, 0, + 0,0x8DDE, 0, 0,0x8DDF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8DE0,0xFEF9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFDC0, + 0xFCF9, 0, 0, 0, 0, 0, 0, 0, 0,0xFB7E, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x92B3, 0, + 0, 0, 0, 0,0xFDAF, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8DE1, 0, 0, 0, 0,0x95D3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x89C1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFD68, 0, 0,0x9CB7, 0, 0,0x8DE3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFAC0,0x8DE5,0xFA64, + 0,0x8947, 0, 0, 0, 0,0x8DE4, 0, 0, 0, + 0, 0,0x8DE7,0x8DE8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFDC7, + /* plane 0, page 111 */ + 4 | (248 << 8), /* first, last */ + 0xFDB0, 0, 0, 0, 0, 0, + 0,0x9445,0x97D6, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFCC6,0x9844, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8DE9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8DEA, 0, 0, 0, 0, 0, 0, 0, + 0,0xFE50, 0, 0, 0, 0, 0, 0,0xFDCC, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9DA7, 0, 0, 0, + 0, 0,0xFDCD, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFDCF, 0, 0, 0, + 0,0x95D2, 0, 0, 0, 0, 0, 0, 0,0x8DED, + 0, 0, 0, 0, 0, 0, 0, 0,0xFCBA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFDC5, 0,0xFDD2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CDC, 0, 0, 0, 0, 0,0x95CF, 0, 0, + 0x8DEE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFDD4, 0, 0, 0, 0, 0,0x96EC,0x96EB, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x90B6, 0,0xFDC3, + /* plane 0, page 112 */ + 3 | (254 << 8), /* first, last */ + 0x98AB, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x96EE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8DF4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFDE0, 0,0x8C67, 0, 0, + 0x8DF6, 0, 0, 0,0x8DF7, 0, 0, 0, 0, 0, + 0, 0,0x8FFA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x97D0, 0, 0, 0, 0,0x8BD2, 0, + 0,0x8DF8, 0, 0, 0, 0, 0,0x90D9, 0,0x8C47, + 0,0xFAF0, 0, 0, 0, 0,0xFDE1,0x8DF9, 0,0xFDE3, + 0, 0, 0, 0, 0, 0, 0,0x8DFA, 0,0xFB63, + 0, 0, 0,0x90A6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9970, 0, 0,0x91EB, 0,0x9770,0x986F,0xFDE2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x98F2, 0,0x9AFC,0x896C,0xFDFD, + 0, 0,0x995E, 0, 0, 0,0x95BD, 0, 0, 0, + 0, 0, 0, 0,0xFDE4, 0, 0, 0,0x91E6, 0, + 0, 0, 0,0xFDE5,0xFDE6, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDE7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9454, 0, 0, 0,0x99B8, 0, 0, 0, 0, + 0, 0, 0, 0,0x97E9, + /* plane 0, page 113 */ + 5 | (246 << 8), /* first, last */ + 0x9346, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9863, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x95BC, 0,0xFDED,0xFDF7, 0, 0, 0, 0, 0, + 0,0x9870,0x96F6,0x8EA9, 0, 0, 0, 0, 0,0x9451, + 0, 0,0x8E43, 0,0x8B5A, 0, 0, 0, 0,0xFDEE, + 0, 0, 0, 0,0xFDF0, 0, 0, 0, 0,0xFDF4, + 0,0x9BF5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x977E, 0, 0, + 0, 0, 0,0x9BD5, 0,0x9AC3, 0,0x97C8,0xA0DB,0x91D0, + 0, 0,0x9FE4, 0,0x8FDD, 0,0x91E9, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x98E0, 0, 0, 0, + 0x92CA, 0,0x9857, 0, 0,0x8C51, 0, 0, 0, 0, + 0xFDEB, 0,0x9B49, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9D76,0x9EAF, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9CCC, 0, 0, 0, 0, 0, 0, + 0xFDEA, 0, 0,0x8DF1, 0, 0,0xFDFB, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8E53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFACF, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x96F9, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x98BF,0x9E49, + /* plane 0, page 114 */ + 0 | (226 << 8), /* first, last */ + 0x8CA7, 0, 0, 0, 0, 0, 0, 0, 0,0x9BCA, + 0, 0, 0, 0,0xFDFE,0x92DC, 0, 0, 0, 0, + 0,0xFE41,0x91CC,0x91E2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFE44, 0, 0, 0, + 0, 0, 0,0x8BD3, 0, 0,0xFE47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFE48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9455, 0, 0, 0, 0,0xFE4B, 0,0xFE4C, 0, 0, + 0, 0,0x8DBF, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E78, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFE51, 0, 0, 0, 0,0x9456, 0, 0, 0, 0, + 0, 0, 0,0x9D61, 0, 0, 0, 0,0x9457, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9966, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8BD5, 0, 0, 0, 0,0xA069, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x98B4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xA049, + /* plane 0, page 115 */ + 2 | (251 << 8), /* first, last */ + 0xA04C, 0,0x9E65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x98B5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFE58, 0,0x9975,0xFE53,0xA065, 0,0xFE59, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x98B7,0x98B8, 0, 0, + 0, 0, 0, 0, 0,0x98BA, 0, 0, 0, 0, + 0, 0,0x98BB, 0, 0, 0, 0, 0, 0,0x9FBC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA04A, 0, 0,0x9EC7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8CA9, 0, 0,0x98AE, 0, 0, 0, 0, 0, 0, + 0, 0,0x92D6, 0, 0, 0,0xFAE1, 0,0x91D4, 0, + 0, 0, 0, 0, 0, 0, 0,0xFADE, 0, 0, + 0xFE5B, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8C53, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFE5E, 0, 0, 0, 0,0xFBD7,0xFE5A,0x94C5, 0, + 0, 0, 0,0xFACA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x98C1,0x975C, 0,0xFE74, 0, + 0x9773, 0, 0, 0, 0, 0, 0, 0, 0,0xFA46, + 0, 0, 0,0x9764, 0, 0, 0,0xFE68, 0,0x964E, + 0,0x9765, + /* plane 0, page 116 */ + 2 | (248 << 8), /* first, last */ + 0x8C5A, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x89A1,0x95FA, 0, + 0x92D4,0xFE69, 0,0xFB45, 0,0x98C8, 0, 0,0x90EF, 0, + 0x98C9,0x98CA, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x946D,0x94B7,0xFE6C, 0, 0, + 0x946B, 0, 0, 0, 0, 0, 0,0x92FC, 0,0x95EB, + 0,0xFE73,0x976E,0xFE5F, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDBD, 0, 0,0x92D5, 0, 0, 0, + 0, 0, 0,0xFEB9, 0, 0,0xFE71, 0, 0, 0, + 0,0xFBBB, 0, 0,0x947A, 0, 0,0x95FB,0xFE77, 0, + 0, 0, 0, 0, 0, 0,0xFE79, 0,0xFE75, 0, + 0, 0,0x945D, 0, 0, 0, 0, 0, 0, 0, + 0xFE7C, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9344,0x8EA6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x92D3, 0,0x94B8, 0, 0, 0, 0, + 0, 0, 0, 0,0xFC71, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x975E, 0, 0, 0, 0,0x8CAD, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFEA7, 0, 0, 0,0x946A, 0, 0, 0,0x93E3, 0, + 0,0x98CF, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xA0D9, 0, 0, 0, 0, 0, 0, 0, 0, + 0xA0BF,0xA04D,0xA0B8, 0, 0, 0, 0, 0,0xA0CE, + /* plane 0, page 117 */ + 5 | (220 << 8), /* first, last */ + 0xA0B7, 0, 0, 0, 0, + 0, 0, 0, 0,0xFEA9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x89C3, 0, 0, 0, 0, + 0xFEAB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9DF4,0x896D, 0, 0, 0, 0, 0,0x9C7B, + 0, 0, 0, 0, 0, 0,0x98D2, 0, 0, 0, + 0x9FA9, 0, 0, 0,0xFEB2, 0, 0,0xFEB1, 0, 0, + 0,0x97D9, 0,0xA0C4, 0,0x9476, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9978, 0, 0, 0, + 0, 0, 0,0xFEB3, 0, 0, 0, 0, 0,0x98D3, + 0xFEB4, 0, 0, 0,0x98D4, 0, 0, 0, 0, 0, + 0, 0,0x9FB9, 0, 0, 0, 0, 0, 0, 0, + 0,0x9471, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x98D5,0xFEB8, 0, 0, 0,0xC6D4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFEBA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9E5C, 0, 0, + 0xFEBB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xA044, 0, 0, 0, 0, + 0x98D7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x98D8, + /* plane 0, page 118 */ + 2 | (217 << 8), /* first, last */ + 0xFEBC, 0, 0, 0, 0,0x9FFE, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFEBD, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DDD, + 0, 0, 0, 0,0x9EE1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x98DA,0x9DDF,0xFEBF, + 0,0xFEBE, 0, 0,0x9EEB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E59,0xA05C, 0, 0, 0, 0, 0, 0, + 0,0xFEC0, 0, 0, 0,0x9477,0x98DC, 0,0xFEC1, 0, + 0, 0,0x98DE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFEC3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFEC8, 0, 0, 0,0xFEC9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFECA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFECB, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9FC2, 0, 0,0x8C6B, + /* plane 0, page 119 */ + 12 | (254 << 8), /* first, last */ + 0x98C4, 0,0x94B0,0x94B1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFED1, 0, 0, 0, 0, 0,0xA0C1, 0,0xFED2, 0, + 0, 0, 0,0xA0CD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFED3, 0, 0,0x98E5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFED6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x91E4, 0, 0, 0, 0,0x8FC7, + 0x94AE, 0,0x8A4F,0x94B2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8FD4, 0, 0, + 0, 0,0x98EA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFED8, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9DE0, 0, 0, 0, 0, + 0x98EE, 0, 0, 0, 0,0x95C4, 0,0xFCE8, 0, 0, + 0, 0, 0,0x98EF, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8C6E, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFAD8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFEDC, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xA0AE, + /* plane 0, page 120 */ + 8 | (245 << 8), /* first, last */ + 0x9D4C, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x98F1, 0, 0, 0,0x98F3, 0, + 0x94C1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x98F5, 0, 0, + 0xFA4F,0x96E2, 0, 0, 0, 0,0x9450, 0,0x96A2, 0, + 0,0x98F6, 0, 0, 0,0x96E5, 0, 0, 0, 0, + 0,0x98F7, 0,0xA046,0x96E3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x98F8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EE4, 0, 0, 0, 0, 0, 0,0xF9D6, + 0, 0, 0, 0, 0, 0,0x94C3, 0, 0, 0, + 0,0x94C2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFEE1, 0,0xFEE9, 0, 0, + 0, 0,0x96E4, 0,0x89AC,0x96DB, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFEE2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x94C4,0xFEE3, 0, 0, 0,0xFEE7,0x9FFB, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8C59, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x93C9, 0, + 0x94E8,0xFB56, 0, 0, 0,0x90C5, + /* plane 0, page 121 */ + 6 | (244 << 8), /* first, last */ + 0xA0A8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFEE5, 0, 0, 0, + 0x98FD,0x98FB,0xFEE8, 0,0x8EBF, 0, 0, 0, 0,0x8BD8, + 0xFEF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8F68,0x94C6, + 0, 0, 0, 0, 0, 0, 0, 0,0x9DEA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFC69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9CDA, 0,0xFEF3, 0, + 0,0x9C72, 0, 0,0xFEF0,0x89C9, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9941, 0, 0, 0, 0, + 0, 0, 0,0x9942, 0, 0, 0,0xFEF5, 0,0x91D7, + 0, 0, 0, 0, 0,0x94CC, 0, 0, 0,0xFEF8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x97A8, 0,0xFEFC, 0, + 0, 0, 0, 0,0xFDBF, 0, 0, 0, 0, 0, + 0, 0,0xFEFE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x96D1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x94D5, 0, 0,0x94D0, + /* plane 0, page 122 */ + 6 | (254 << 8), /* first, last */ + 0x9944, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8C63, 0, 0,0xA0B3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x94CF, 0, + 0, 0,0x9FFA, 0, 0, 0, 0,0x91E5, 0,0x9C6A, + 0, 0, 0,0x8E49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8E4C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8E4D, 0, 0, 0, 0, + 0,0x9A73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9947, 0,0x8CB1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8E50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8E4F,0x9949, 0, + 0, 0, 0, 0,0x8E51,0x8E52, 0, 0, 0, 0, + 0x9AB2,0x89A5, 0, 0, 0, 0, 0,0x994C, 0, 0, + 0,0x9FF8, 0, 0, 0, 0, 0, 0,0x8E56,0x994D, + 0x91CA,0x8E57, 0, 0, 0, 0,0x94E1, 0, 0, 0, + 0,0x9047, 0,0x8FD8,0x8E58, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x94EB, + /* plane 0, page 123 */ + 11 | (252 << 8), /* first, last */ + 0x8E5C,0x9553, 0, 0, 0, 0, 0, 0, 0, + 0x9FE5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9F56, 0, 0, 0, 0, 0, 0, 0,0x954F, + 0,0x8E5E, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x996A, 0, 0, + 0, 0, 0, 0, 0, 0,0x9C64,0x9CD9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8E5D, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9950, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9951, 0, + 0,0x8E62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8E68, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8E61,0x9F59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BB3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9F5D,0x8E66, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8CB2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8E6E, 0,0x9F64, + /* plane 0, page 124 */ + 18 | (252 << 8), /* first, last */ + 0x9953, 0, + 0,0xFAB8, 0, 0, 0, 0, 0,0x9954, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8E70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9F61, 0,0x8E72, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xA06B, 0, 0, 0, 0,0x9F40, 0, 0, 0, + 0, 0, 0,0x94ED, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94EE, + 0, 0,0x9FBD, 0, 0, 0,0x8E7B, 0, 0, 0, + 0, 0, 0,0x9957,0x94F7, 0,0x9F5F, 0, 0, 0, + 0,0x8E73, 0, 0,0x9F62, 0, 0, 0, 0, 0, + 0, 0,0x94F6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9958, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8E75,0xF9DB, 0, 0, + 0, 0,0x9072, 0,0x94F8, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x995A, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xA0B0,0x8CB3, 0, 0, 0,0x8E79, + 0,0x8E78, 0, 0, 0,0x94F3, 0, 0, 0, 0, + 0,0x98AF, 0, 0, 0, 0, 0, 0,0xA0B2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8E7A, 0, 0, 0, 0, 0, 0,0x995C, 0, 0, + 0, 0, 0,0x8E7C, 0,0x8E7D, 0, 0, 0,0x8BD9, + 0, 0,0x89A2, + /* plane 0, page 125 */ + 37 | (254 << 8), /* first, last */ + 0x9ED7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xA0B6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9E42, 0, 0,0x8EA4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8EA7, 0,0x8C76, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9542, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x987D, 0, 0, 0,0x9755, 0, + 0,0x8EA8, 0, 0, 0, 0, 0, 0, 0,0x8EAA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x89A3, 0,0x9960,0x9962, 0, + 0,0x94FC,0x9961, 0, 0, 0, 0, 0, 0, 0, + 0x94FA, 0, 0, 0, 0, 0, 0, 0,0x8EAE,0x8EB2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8EB0, 0, 0, 0, 0, + 0, 0, 0,0x9963,0x97AA, + /* plane 0, page 126 */ + 7 | (223 << 8), /* first, last */ + 0x94FB, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8EBB, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8CDC, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9876, 0,0x8EA1, 0, 0, 0, 0,0x8CB4, 0, + 0x8EB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9DA6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EB0, 0, 0, 0,0x8EB8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9D70, + 0, 0, 0, 0,0x896E, 0, 0, 0, 0, 0, + 0, 0,0x896F, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8970, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8971, + 0, 0, 0, 0, 0, 0, 0,0x8972, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8973, + /* plane 0, page 127 */ + 6 | (250 << 8), /* first, last */ + 0x8974, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8975, 0, 0, 0, 0, + 0, 0, 0, 0,0x8EBC,0x8EBD, 0, 0, 0, 0, + 0,0x8EBE, 0,0x9DD1, 0, 0, 0, 0,0x94FD, 0, + 0, 0,0x8BD7,0x8BDA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA0E2, 0, 0, 0, 0, 0, 0, + 0x9FE9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDA8, 0, 0, 0,0x8AE7, 0, 0, + 0,0x8EC2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8EC4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9964, 0, 0, 0, 0, 0, + 0x9965, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x954E, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x98B3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8ECB, + /* plane 0, page 128 */ + 2 | (246 << 8), /* first, last */ + 0x8BDF, 0, 0, 0, 0, 0,0x8ECE, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8ECF, + 0, 0,0x9968, 0, 0, 0, 0,0x9969, 0, 0, + 0, 0, 0, 0, 0, 0,0x996B,0x8ED1, 0,0x996C, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8ED4, + 0x8ED5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x996D, 0, 0, 0, 0, 0, + 0,0xA0BE, 0, 0, 0, 0, 0,0x8ED6,0xA0BC,0xA0B5, + 0, 0,0xA0B4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BE0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x89B5, + 0, 0, 0, 0, 0, 0, 0,0x8EDD, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E5D,0x9971, 0, 0, 0, 0,0x89AE,0x9DE8, + 0, 0, 0, 0, 0, 0, 0, 0,0x9565, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9972, 0, 0,0x8B5C, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x89B1, + /* plane 0, page 129 */ + 3 | (246 << 8), /* first, last */ + 0xA0C0, 0, 0, 0,0x8EDF, 0,0x9566, + 0, 0,0x9974, 0,0x9976, 0, 0, 0,0x9977, 0, + 0x9979, 0, 0,0x9DDA, 0, 0,0x8EE0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x935C, 0, 0, 0, 0, 0, 0, 0, + 0x9DE6, 0,0x8B5F, 0, 0,0x9563, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9567, 0, 0, 0, + 0, 0,0x9DE3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x997C, 0, 0,0x997D, + 0x997E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8B5B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x99A3, 0, 0, 0, 0, 0, + 0, 0,0x99A4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x99A6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x99A8, 0, 0, 0, 0, + 0x8ABE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x99AA, 0, 0, 0, 0, 0, 0, + 0xA0C8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x99AB, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFEC4, + 0, 0, 0, 0, 0, 0,0x98C2, + /* plane 0, page 130 */ + 24 | (255 << 8), /* first, last */ + 0x8EE8, 0,0xA0BA, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFD77, 0, + 0,0x8EEE, 0, 0, 0,0x9EBF, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x89C2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x99AC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x956B, 0, + 0,0x956C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x99AF, 0, + 0,0x994A,0x8976,0x8F48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFBEE, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99AE, 0, 0, 0, + 0x8EFB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8CD0, 0, 0, 0, 0,0x8B52, 0, 0, 0, + 0, 0,0x99B0, 0, 0, 0, 0,0x8977,0x8F41, 0, + 0, 0, 0, 0, 0, 0,0x99B1, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8F49, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFA4D, 0, + 0, 0, 0, 0, 0, 0, 0,0x9DE4,0x8CB5, 0, + 0, 0,0xFBE9,0x9B54, 0,0x99B2, + /* plane 0, page 131 */ + 11 | (237 << 8), /* first, last */ + 0x9E68, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8F4A, 0,0x8F42, 0, 0,0x8F51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9846, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x99B4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8EF5,0xFD55, + 0, 0,0x9CCD, 0, 0, 0, 0, 0, 0, 0, + 0,0x8978, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8F53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8F6F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8E63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8F56, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFE76, 0, 0, 0, 0, + 0x9FC6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFAAC, 0, 0, 0, 0, + 0,0x8F58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9848, + /* plane 0, page 132 */ + 5 | (248 << 8), /* first, last */ + 0x99B7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9665, 0,0xFA6C, 0,0x9DE7, 0, 0, 0,0x9E62, 0, + 0, 0,0x96CC,0x8E67, 0, 0,0xFC75, 0,0x987E, 0, + 0, 0, 0, 0, 0, 0,0xFDB9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97FC, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x98F9, 0,0x8F66, 0, 0, 0, 0, 0, + 0, 0, 0,0x956E, 0,0x9245, 0, 0,0x8F60, 0, + 0, 0,0x9ED1, 0, 0, 0, 0, 0,0xFECD, 0, + 0x99B9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8F62,0x974C, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x91C7,0x955F, 0, + 0, 0, 0, 0, 0, 0,0x99BB, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8E6D,0x8F71, 0, 0, + 0x94CB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x95B1, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9AF2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96C3, + 0x99BD, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA0CF, 0, + 0, 0,0x8F6D, 0, 0,0x99BE,0x8EF4, 0,0x8F72,0x95E4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x99BF, + /* plane 0, page 133 */ + 3 | (252 << 8), /* first, last */ + 0x9242, 0,0xFBA5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99C0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFDB4,0x8F77, 0, 0, 0,0x99C1, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFAB9, 0, 0, 0, + 0, 0, 0, 0, 0,0x8F40,0xFA44, 0, 0, 0, + 0, 0,0x99C2, 0, 0, 0, 0, 0, 0, 0, + 0x8F5C, 0, 0, 0, 0,0x8CBD, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x99C4,0x99C5, 0, 0,0x8F7B, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8CB6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8FA3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8CCE, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x99C6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x96CD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x96C7, + /* plane 0, page 134 */ + 2 | (239 << 8), /* first, last */ + 0x8FA5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFABB, 0,0x8C61,0x9570, 0, 0, 0, + 0x9368, 0,0x8F7E, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8FAA, 0, 0, 0, 0, 0, 0,0xA050, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x90D3, 0, 0,0x9556, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8FB8, 0, + 0, 0, 0, 0,0x99C8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8FAF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99C9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9579, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9F49, 0, 0, 0, 0,0x99CA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99CB, + /* plane 0, page 135 */ + 112 | (245 << 8), /* first, last */ + 0x9DD5,0x8FB0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFA7A, 0, 0, 0, 0, + 0, 0, 0, 0,0x9E5F, 0, 0, 0, 0,0x99CD, + 0xA0C9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9ADB, 0, 0, 0,0xA0C6, + 0, 0, 0, 0, 0, 0, 0,0x8FB4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA0D7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xA0C7, 0, 0, 0, + 0, 0, 0, 0,0xA043, 0, 0, 0,0x8FB5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8FB2, 0, + 0, 0, 0, 0, 0,0xA061, + /* plane 0, page 136 */ + 4 | (255 << 8), /* first, last */ + 0x9E5E, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8FB6, 0, 0, 0, 0, + 0, 0, 0, 0,0x9FE8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CB2, + 0, 0, 0, 0, 0,0x957C, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9FC7, 0, 0,0x8FBB, + 0x8FBC, 0, 0, 0, 0, 0, 0, 0, 0,0x8FEC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8FC0, 0,0x936A, 0, 0, 0, + 0x8BE4,0x9C7C, 0, 0, 0, 0, 0, 0, 0, 0, + 0x95A1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFEEC, 0, 0,0x95A3, 0, 0, 0, 0, + 0, 0, 0,0x8C45,0x8CB8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8FC1, 0, 0, 0, + 0xA052, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x99D0, 0, 0, 0, 0, 0, + 0x8FC3,0x8FC4, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x95A4, 0, 0, 0, 0, 0,0x8FC6, 0,0x9E60, + 0, 0, 0, 0, 0, 0, 0,0xF9D8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x95A5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9CB3, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x99D1, + /* plane 0, page 137 */ + 0 | (231 << 8), /* first, last */ + 0xFEF1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99D2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9CC2, 0, 0, + 0,0x99D3, 0, 0, 0, 0, 0,0x95A7, 0, 0, + 0, 0, 0, 0,0x95A9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x95A6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9C5D, + 0, 0, 0, 0, 0, 0, 0, 0,0x98E2, 0, + 0, 0, 0, 0, 0,0x8FC9, 0,0xA0C2,0x8FCA, 0, + 0, 0, 0, 0, 0,0x99D4, 0, 0,0xA0B9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9B58, 0,0x8FCD, 0,0xA0D4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8FCE, 0, + 0, 0, 0,0x8BE5, 0, 0, 0, 0,0x8979, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8FD0, + /* plane 0, page 138 */ + 28 | (234 << 8), /* first, last */ + 0x95B6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x99D6, 0,0x95E5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99D7, 0, 0, 0, + 0,0x95B5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA0CA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9FFD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xA058, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8FD6, 0, 0, 0,0x99D8, 0, + 0, 0, 0, 0, 0, 0,0x8FD3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FE5, + 0, 0, 0, 0, 0,0x8FE9, 0, 0, 0, 0, + 0x99D9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x927C, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9C45, + /* plane 0, page 139 */ + 12 | (226 << 8), /* first, last */ + 0x8FDE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8FDF, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xA04B, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8FE2, 0, 0, 0,0xA0CC, 0, 0, + 0, 0, 0, 0, 0, 0,0x8FE3,0x8FE4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BC4, 0, 0, 0,0x9BFC, 0, + 0, 0, 0, 0, 0,0x964C, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AF6, + 0,0x8CAE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8FE7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8FE8, 0, 0, 0, 0, + 0x8BE7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x897A, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x897B, + /* plane 0, page 140 */ + 81 | (247 << 8), /* first, last */ + 0x99DA, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8FED, 0, 0, 0,0x95C0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA0CB, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9E48, 0, 0, 0, 0, + 0, 0,0x99DB, 0,0x8FF3, 0, 0, 0, 0,0x8FF9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x95C1, 0,0xA04E, 0, 0, 0, 0, + 0, 0,0x99DC, 0, 0, 0, 0,0xA064, + /* plane 0, page 141 */ + 3 | (212 << 8), /* first, last */ + 0x8FF7, 0, 0, 0, 0, 0, 0, + 0,0x89B0,0xA048, 0, 0, 0, 0,0x8FFB,0x8FF6, 0, + 0, 0, 0, 0,0x9DDC, 0, 0, 0,0x99DD,0x8BE8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x92C1, 0, 0, 0, 0, 0, 0, 0, + 0x9FD6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xA0D2, 0, 0,0x9040, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8AC4, 0, 0,0x99E0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9FF0, + /* plane 0, page 142 */ + 1 | (242 << 8), /* first, last */ + 0x9FF3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9DBF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9FF6, 0,0x95C8, 0, 0,0x9E5A, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x99E3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8A4A, 0, 0, 0, 0, 0, 0, 0, 0,0x9FF1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8AA7, 0, 0, 0, 0, 0, + 0, 0, 0,0x99E6, 0, 0, 0,0x9FF7, 0,0x9FED, + 0, 0, 0, 0, 0, 0,0x8A5C, 0,0x9DAE, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x95C9, 0, 0, + 0, 0, 0,0x9048, 0, 0,0x99E8, 0, 0, 0, + 0, 0,0x9049, 0, 0,0x8CBA, 0, 0,0x90B1, 0, + 0, 0, 0, 0, 0,0x904A, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x99EA, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9BD1, 0, + 0, 0, 0, 0, 0, 0,0x99EB, 0,0x99EC, 0, + 0, 0, 0, 0, 0, 0, 0,0x99ED, 0, 0, + 0, 0,0x99EE, + /* plane 0, page 143 */ + 25 | (249 << 8), /* first, last */ + 0x904C, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x904D, 0, 0,0x95CB, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x97E2, 0, 0, 0, 0, + 0, 0, 0, 0,0x95CC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9F78, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x897C,0x897D, 0, 0, 0, 0, 0, 0, + 0x897E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x995D, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9B5A, 0, 0, 0, 0,0x9050, 0,0x8C4F, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9054, + 0,0xC6D6,0x9AA8,0x99EF,0xFEEB,0x9DA3,0x9DA1,0x9943,0x9945, 0, + 0x9D7D, 0, 0,0x99F0, 0, 0, 0, 0, 0, 0, + 0, 0,0x99F1, 0,0x99F2, 0, 0,0x8CBC,0x9D60, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA0A3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x905B, + /* plane 0, page 144 */ + 8 | (196 << 8), /* first, last */ + 0x9EDB, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9D79, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x99F3, 0, 0, 0,0x9062, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9F55, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9BF9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9065, 0, 0, + 0x96E0, 0, 0, 0, 0, 0, 0, 0,0x98BE, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9068, 0, + 0, 0, 0, 0,0x906C, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x95D8, 0, 0, + 0, 0, 0, 0, 0, 0,0x906A, + /* plane 0, page 145 */ + 81 | (254 << 8), /* first, last */ + 0x9FB2, 0, 0, 0, 0, 0, 0, 0,0x9FAE, + 0, 0,0x9FB0, 0,0x89AD, 0, 0, 0, 0, 0, + 0, 0, 0,0x906E, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E71, 0, 0, 0, 0, 0,0x9E4A, 0, + 0, 0, 0, 0,0x9FDC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x89AB, 0,0x9FB8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9070, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8B63, 0, 0, 0, 0,0x95DC, 0, 0, + 0, 0, 0, 0, 0, 0,0x9071, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFC5E, 0, 0, 0, 0, 0, + 0, 0, 0,0x8949, 0, 0, 0, 0, 0,0x965B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8C50, 0, 0, 0, + 0x94A6, 0, 0, 0,0x8FD5, + /* plane 0, page 146 */ + 8 | (253 << 8), /* first, last */ + 0x9E73, 0, + 0, 0, 0, 0,0x9075, 0, 0, 0, 0,0x99F7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8CBF, 0, 0, 0, 0, 0, 0, + 0x99F9, 0,0x9663,0x95B9, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x94D4, 0, 0, 0, 0, 0, 0, + 0xFCFA, 0, 0, 0, 0,0x9077, 0, 0,0x90AB, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9D4D, 0, 0,0x99FA, 0, + 0, 0, 0,0x92E3, 0,0x97BB, 0, 0,0x9078, 0, + 0, 0, 0, 0, 0, 0, 0,0x99FB, 0, 0, + 0x97E0, 0, 0, 0, 0, 0, 0, 0, 0,0x96DC, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CA8, + 0, 0,0x9772, 0, 0, 0, 0,0x9440, 0, 0, + 0, 0, 0,0x92F2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x99FD, 0, 0,0x99FC, 0, 0, + 0, 0, 0, 0, 0,0xF9D7,0x964A, 0, 0, 0, + 0x96D8,0x99FE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x904B, 0, 0, 0, 0, 0, 0,0xFA41, + 0, 0, 0, 0, 0, 0, 0,0x9A40, 0,0x975B, + 0, 0, 0, 0, 0,0x9A41,0x91DD, 0, 0, 0, + 0, 0,0x93FC,0x9A42,0x9A43, 0,0x9659, 0, 0, 0, + 0, 0, 0,0x9A44, + /* plane 0, page 147 */ + 3 | (244 << 8), /* first, last */ + 0x9051, 0, 0, 0,0x94BF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x90A2, 0, 0, 0,0x9CAB,0x9776, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFC55,0xFE45,0x94A8,0x9A45,0xFA4B,0x9DE1, + 0, 0,0x96D9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9774, 0, 0,0xFDF5, 0, + 0, 0,0x92E5, 0,0x9645,0x91DA, 0,0x90A3, 0, 0, + 0xA05F, 0, 0, 0, 0,0x90AF,0x97BF, 0, 0, 0, + 0x914C, 0, 0, 0, 0,0x967A, 0, 0, 0,0x91DE, + 0, 0,0x9A46,0xFEB0,0x9779,0x946C, 0, 0, 0, 0, + 0, 0, 0, 0,0x9858, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9266, 0, 0, 0, + 0x93FB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9A47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9749, 0, 0,0x9748, 0,0x934A, + 0,0x9CE2, 0, 0, 0, 0, 0, 0,0x9264, 0, + 0, 0, 0,0x91DF, 0, 0, 0, 0, 0, 0, + 0,0xFB79, 0, 0, 0, 0, 0, 0, 0,0x96D7, + 0, 0, 0, 0,0x9343, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFDCB,0xFE7A, 0,0x91DB,0x8C6A, + /* plane 0, page 148 */ + 1 | (246 << 8), /* first, last */ + 0x97AF, 0, 0,0x95DD, 0, 0, 0,0x9348, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9A4B, 0, 0, 0,0xFC45, 0,0x9A4D, + 0, 0, 0, 0, 0, 0,0x91BC,0x90E2,0x90B4,0x95E1, + 0, 0, 0, 0, 0,0x9A4E, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9A4F, 0, 0, 0,0xFE40,0xFE43, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x96DD, 0, 0, + 0, 0, 0, 0,0x9A51, 0, 0, 0,0x96A7, 0, + 0,0x90B0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9C4E, 0,0x9443, 0, 0, 0, 0,0x8EBA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9A52, 0,0xFCC1, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8BE9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CAF, + 0, 0,0x8BFD, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9ABC, 0,0x9AB8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9AAE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9AA7, + /* plane 0, page 149 */ + 45 | (244 << 8), /* first, last */ + 0x9A53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9D74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8BEA, 0, 0, 0, 0, 0, 0,0x8BEB, 0, 0, + 0, 0, 0,0x90B2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x95E9,0x95E8, 0,0x95E6, 0, 0, 0, 0, 0, 0, + 0x90B5, 0,0x9A54, 0, 0, 0,0x90B3,0x95E7, 0, 0, + 0x8B50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8BEC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9A56, + /* plane 0, page 150 */ + 29 | (244 << 8), /* first, last */ + 0x8BFB, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9A57, 0, 0, 0, 0,0xA0AA, 0, 0, 0, + 0, 0, 0, 0, 0,0x9FA6, 0, 0, 0,0x99CC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9C59, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x99B5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x90BE, 0, 0, 0, 0, 0,0x9FAF, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x95F2, 0, 0, 0, 0, 0, 0, + 0x90BF, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x90C1, 0,0xFEE4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x90C4, 0, 0, 0, 0, 0, 0,0x90C7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x92E4, + /* plane 0, page 151 */ + 3 | (245 << 8), /* first, last */ + 0x9F52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x90DB, 0, 0, + 0, 0, 0,0xA066, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x90D2, + 0, 0, 0, 0,0x90D4, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9A5B,0x95FD, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8BC4, 0, 0, 0,0x8C66, 0,0x90DE, 0, 0, + 0, 0, 0,0x9CE4, 0,0x90E1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9E46, + 0, 0, 0,0x9651, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFB58, 0,0x90E6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9650, 0, 0, 0,0x90E7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x90E8,0x9A5D, 0, + 0x9F7A, 0, 0, 0,0x9B5C, 0,0x9F7C, 0, 0,0xFC52, + 0x90E9, 0,0x90EA, 0,0x9A5E, 0, 0, 0, 0, 0, + 0x9F76, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x90EB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x90EC, 0, 0, 0, 0, 0, + 0x8BEE, 0, 0, 0, 0, 0, 0, 0,0x90EE, 0, + 0, 0,0x91C6, 0, 0,0x90F2, + /* plane 0, page 152 */ + 20 | (245 << 8), /* first, last */ + 0xFCBC,0x8A74, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9657, 0, 0, 0,0x9CEF, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9FDF, 0, 0, 0, + 0,0x90F7,0x90F6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9B5E, 0, 0, 0,0x90F8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x90F9, 0,0x8CC9, 0, 0, 0,0xFA6A, 0, + 0, 0, 0, 0, 0, 0, 0,0x8BEF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9FE0, 0, 0,0x9142, 0,0x9A62, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9569, 0, 0, 0,0x9144, + 0x9143, 0,0x9141, 0, 0, 0,0x8BF0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9660, 0,0x8BF1, 0,0x99F6,0x9149, 0, 0, 0, 0, + 0x914A, 0, 0, 0, 0, 0,0x914B, 0, 0, 0, + 0,0x9A64, 0, 0, 0,0x8ABF, + /* plane 0, page 153 */ + 14 | (245 << 8), /* first, last */ + 0x9A66, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9A67, 0, 0,0x9A69, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9A6A,0x9652,0x914D, 0,0x9666, + 0, 0, 0, 0,0x9F7B, 0,0x9A6B, 0, 0, 0, + 0, 0, 0, 0,0xA06C, 0, 0,0x9667, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9A6C, 0, 0, 0, 0,0x9A6D,0x8BF2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x966A, 0, 0, 0, 0, + 0, 0, 0, 0,0xFCEA, 0, 0, 0, 0, 0, + 0x966C, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x91C4, 0, 0, 0,0x9677, 0, + 0, 0, 0, 0, 0, 0,0x99F4,0x9A6F, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9FAB, 0, + 0, 0, 0, 0,0x8CBE,0x8EC1, 0, 0, 0, 0, + 0x9555, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9152, + /* plane 0, page 154 */ + 12 | (255 << 8), /* first, last */ + 0x9153, 0, 0, 0,0x9155, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x955D, 0,0x9671, 0, 0, 0, 0,0x9C6D, 0, + 0, 0, 0, 0, 0, 0, 0,0x9673, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9154, + 0x9A71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9156, 0, + 0, 0,0x966D, 0, 0, 0, 0, 0, 0,0x9557, + 0, 0, 0, 0, 0, 0, 0, 0,0x89C6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x89C7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8A6A, 0, + 0, 0,0x8B57, 0, 0, 0,0x9FE1, 0, 0,0x9B5F, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xA05D, 0, 0, 0, 0, + 0, 0, 0, 0,0x915B, 0,0x915C, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x915E, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9F5C, + /* plane 0, page 155 */ + 2 | (255 << 8), /* first, last */ + 0x9F57, 0, 0, 0, 0, 0, 0,0x9F65, + 0, 0, 0, 0, 0,0x9A72, 0, 0, 0, 0, + 0x9160, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9F5E, 0, 0,0x9161, 0, 0, 0, 0, + 0, 0,0x9164, 0, 0, 0, 0,0x9F41, 0, 0, + 0, 0, 0, 0,0x9169, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9168, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9A74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x96B2, 0,0x9A75, + 0,0xFDA5, 0, 0, 0, 0, 0, 0, 0,0x9EE9, + 0,0x8BBA,0x916D,0xA060, 0, 0, 0, 0, 0, 0, + 0,0x9FDE, 0, 0, 0, 0, 0,0x9FC3, 0,0x96B5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xA067, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x96B3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9A76, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x95D5, 0, 0, 0,0x9ECA, 0, 0, + 0,0x9A77, 0, 0,0x9A78, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9170, + /* plane 0, page 156 */ + 2 | (124 << 8), /* first, last */ + 0x916F, 0, 0, 0, 0, 0, 0, 0, + 0x9FA3, 0,0x9171, 0, 0, 0,0x96B1, 0, 0, 0, + 0,0x9F63, 0, 0, 0, 0, 0,0x9F67, 0, 0, + 0,0x8BB9,0x9A7A, 0, 0, 0, 0, 0,0x8B56, 0, + 0, 0, 0, 0, 0, 0, 0,0x9ADA, 0, 0, + 0, 0, 0,0x96B0, 0, 0, 0, 0,0x9A7E, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DDE, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96AD, + 0, 0, 0,0x96AE, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9EA1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9E50, 0, 0, 0, 0, 0, + 0, 0, 0,0x96AF,0x8BF4, + /* plane 0, page 157 */ + 2 | (252 << 8), /* first, last */ + 0x9FA4, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x96BD, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x96F4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x96B8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFAA1, 0, 0, 0, 0,0x91A7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA05E, 0, + 0, 0, 0,0x9A7D, 0, 0, 0, 0,0x8948, 0, + 0x9EB1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9DDB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x95BF, + 0x8A73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9EFE, 0,0x917A, 0, 0, 0, + 0,0x917B, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9AA3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x96C2, 0, 0, 0, 0, + 0,0x9F77, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AA4, + 0, 0,0x9AA5, 0, 0, 0,0x91A1, 0, 0, 0, + 0,0x89B8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9173, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9AA6, + /* plane 0, page 158 */ + 10 | (254 << 8), /* first, last */ + 0x89BD, 0,0x89B9, 0,0x917D, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x96BB, 0, 0, 0,0x9FF2, 0, + 0,0x8BF5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9AA9, 0, 0, 0, 0, 0,0x9F54, + 0, 0,0x9FE3,0x9EED, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x91AA, 0, 0, 0, 0,0x91AB, + 0xA070, 0,0x9F6D, 0, 0, 0, 0, 0,0x91AC, 0, + 0, 0,0x91AD, 0, 0, 0,0xA0FD, 0,0x9FE2, 0, + 0x91AF,0x9E41,0x9AAA, 0, 0,0x91B0, 0,0x9AAB, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AAC, + 0,0x9A4A, 0,0x91B2, 0, 0,0x8BF6, 0,0x9AAD,0x89B6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9AAF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AB0, 0, 0, 0, 0, 0, 0,0x9AB1, 0, + 0, 0, 0, 0,0x9AA1, + /* plane 0, page 159 */ + 2 | (165 << 8), /* first, last */ + 0x91B9, 0, 0, 0, 0, 0,0x91BA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x91BE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA041,0x8BB7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x91C0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9AB3,0x91C3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xA0FC, 0, 0,0x9FEE, 0, 0, 0, 0, 0, 0, + 0x9F69, 0, 0, 0, 0, 0, 0, 0,0x91C8, 0, + 0, 0, 0, 0, 0,0x91C9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8DE6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x91CB, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x89C8, 0, 0, 0, 0, 0,0x8DAA, + 0, 0, 0, 0, 0,0x9FDD, + /* plane 0, page 160: --- */ + /* plane 0, page 161: --- */ + /* plane 0, page 162: --- */ + /* plane 0, page 163: --- */ + /* plane 0, page 164: --- */ + /* plane 0, page 165: --- */ + /* plane 0, page 166: --- */ + /* plane 0, page 167: --- */ + /* plane 0, page 168: --- */ + /* plane 0, page 169: --- */ + /* plane 0, page 170: --- */ + /* plane 0, page 171: --- */ + /* plane 0, page 172: --- */ + /* plane 0, page 173: --- */ + /* plane 0, page 174: --- */ + /* plane 0, page 175: --- */ + /* plane 0, page 176: --- */ + /* plane 0, page 177: --- */ + /* plane 0, page 178: --- */ + /* plane 0, page 179: --- */ + /* plane 0, page 180: --- */ + /* plane 0, page 181: --- */ + /* plane 0, page 182: --- */ + /* plane 0, page 183: --- */ + /* plane 0, page 184: --- */ + /* plane 0, page 185: --- */ + /* plane 0, page 186: --- */ + /* plane 0, page 187: --- */ + /* plane 0, page 188: --- */ + /* plane 0, page 189: --- */ + /* plane 0, page 190: --- */ + /* plane 0, page 191: --- */ + /* plane 0, page 192: --- */ + /* plane 0, page 193: --- */ + /* plane 0, page 194: --- */ + /* plane 0, page 195: --- */ + /* plane 0, page 196: --- */ + /* plane 0, page 197: --- */ + /* plane 0, page 198: --- */ + /* plane 0, page 199: --- */ + /* plane 0, page 200: --- */ + /* plane 0, page 201: --- */ + /* plane 0, page 202: --- */ + /* plane 0, page 203: --- */ + /* plane 0, page 204: --- */ + /* plane 0, page 205: --- */ + /* plane 0, page 206: --- */ + /* plane 0, page 207: --- */ + /* plane 0, page 208: --- */ + /* plane 0, page 209: --- */ + /* plane 0, page 210: --- */ + /* plane 0, page 211: --- */ + /* plane 0, page 212: --- */ + /* plane 0, page 213: --- */ + /* plane 0, page 214: --- */ + /* plane 0, page 215: --- */ + /* plane 0, page 216: --- */ + /* plane 0, page 217: --- */ + /* plane 0, page 218: --- */ + /* plane 0, page 219: --- */ + /* plane 0, page 220: --- */ + /* plane 0, page 221: --- */ + /* plane 0, page 222: --- */ + /* plane 0, page 223: --- */ + /* plane 0, page 224 */ + 0 | (253 << 8), /* first, last */ + 0xFA40, 0,0xFA42,0xFA43, 0,0xFA45, 0, 0,0xFA48,0xFA49, + 0xFA4A, 0,0xFA4C, 0,0xFA4E, 0, 0, 0,0xFA52,0xFA53, + 0xFA54,0xFA55,0xFA56, 0,0xFA58, 0,0xFA5A,0xFA5B,0xFA5C,0xFA5D, + 0xFA5E, 0,0xFA60, 0,0xFA62,0xFA63, 0,0xFA65, 0, 0, + 0xFA68, 0, 0,0xFA6B, 0,0xFA6D,0xFA6E, 0,0xFA70, 0, + 0xFA72,0xFA73,0xFA74,0xFA75,0xFA76,0xFA77,0xFA78, 0, 0,0xFA7B, + 0xFA7C, 0, 0, 0, 0, 0, 0,0xFAA5, 0,0xFAA7, + 0, 0, 0, 0, 0, 0,0xFAAE, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFABC, 0,0xFABE, 0, 0,0xFAC1,0xFAC2,0xFAC3, 0, 0, + 0xFAC6, 0,0xFAC8, 0, 0, 0,0xFACC,0xFACD,0xFACE, 0, + 0xFAD0, 0, 0,0xFAD3, 0, 0,0xFAD6,0xFAD7, 0, 0, + 0xFADA, 0, 0, 0, 0,0xFADF,0xFAE0, 0, 0, 0, + 0, 0, 0, 0,0xFAE8,0xFAE9, 0,0xFAEB,0xFAEC, 0, + 0xFAEE, 0, 0, 0, 0, 0, 0,0xFAF5,0xFAF6, 0, + 0, 0,0xFAFA,0xFAFB,0xFAFC,0xFAFD,0xFAFE,0xFB40,0xFB41, 0, + 0xFB43, 0, 0, 0, 0, 0,0xFB49,0xFB4A,0xFB4B,0xFB4C, + 0,0xFB4E, 0, 0,0xFB51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFB5D,0xFB5E,0xFB5F, 0, + 0xFB61, 0, 0, 0,0xFB65,0xFB66, 0,0xFB68, 0,0xFB6A, + 0xFB6B, 0,0xFB6D, 0, 0,0xFB70, 0, 0,0xFB73, 0, + 0, 0,0xFB77,0xFB78, 0,0xFB7A, 0, 0,0xFB7D, 0, + 0xFBA1, 0, 0,0xFBA4, 0, 0,0xFBA7,0xFBA8,0xFBA9,0xFBAA, + 0,0xFBAC,0xFBAD,0xFBAE, 0,0xFBB0,0xFBB1, 0,0xFBB3, 0, + 0,0xFBB6,0xFBB7, 0,0xFBB9, 0, 0, 0,0xFBBD,0xFBBE, + 0xFBBF,0xFBC0,0xFBC1,0xFBC2, + /* plane 0, page 225 */ + 3 | (254 << 8), /* first, last */ + 0xFBC8,0xFBC9,0xFBCA,0xFBCB, 0, 0,0xFBCE, + 0xFBCF,0xFBD0, 0, 0,0xFBD3, 0,0xFBD5, 0, 0, 0, + 0xFBD9,0xFBDA, 0,0xFBDC, 0, 0, 0, 0,0xFBE1,0xFBE2, + 0, 0, 0,0xFBE6, 0, 0, 0,0xFBEA,0xFBEB,0xFBEC, + 0xFBED, 0,0xFBEF,0xFBF0, 0, 0, 0, 0,0xFBF5,0xFBF6, + 0, 0, 0, 0,0xFBFB, 0, 0,0xFBFE, 0, 0, + 0xFC42, 0, 0, 0, 0,0xFC47,0xFC48,0xFC49,0xFC4A,0xFC4B, + 0,0xFC4D,0xFC4E, 0,0xFC50, 0, 0,0xFC53, 0, 0, + 0xFC56, 0, 0,0xFC59,0xFC5A,0xFC5B,0xFC5C,0xFC5D, 0,0xFC5F, + 0xFC60, 0, 0,0xFC63,0xFC64,0xFC65,0xFC66, 0,0xFC68, 0, + 0xFC6A, 0, 0, 0,0xFC6E,0xFC6F,0xFC70, 0, 0, 0, + 0, 0, 0,0xFC77,0xFC78, 0, 0,0xFC7B, 0, 0, + 0xFC7E,0xFCA1, 0,0xFCA3,0xFCA4, 0,0xFCA6,0xFCA7,0xFCA8, 0, + 0, 0, 0,0xFCAD, 0,0xFCAF, 0,0xFCB1, 0,0xFCB3, + 0xFCB4, 0, 0,0xFCB7,0xFCB8, 0, 0,0xFCBB, 0,0xFCBD, + 0xFCBE, 0, 0, 0,0xFCC2, 0,0xFCC4, 0, 0,0xFCC7, + 0xFCC8, 0, 0, 0,0xFCCC, 0,0xFCCE,0xFCCF, 0,0xFCD1, + 0xFCD2, 0, 0, 0,0xFCD6, 0,0xFCD8,0xFCD9, 0,0xFCDB, + 0xFCDC, 0,0xFCDE, 0,0xFCE0, 0, 0,0xFCE3,0xFCE4,0xFCE5, + 0xFCE6,0xFCE7, 0,0xFCE9, 0, 0,0xFCEC,0xFCED,0xFCEE, 0, + 0xFCF0, 0, 0, 0,0xFCF4,0xFCF5, 0,0xFCF7, 0, 0, + 0, 0,0xFCFC,0xFCFD, 0,0xFD40, 0, 0,0xFD43, 0, + 0,0xFD46, 0, 0,0xFD49,0xFD4A,0xFD4B,0xFD4C, 0, 0, + 0xFD4F,0xFD50, 0, 0,0xFD53,0xFD54, 0, 0, 0,0xFD58, + 0xFD59, 0,0xFD5B, 0,0xFD5D, 0, 0,0xFD60,0xFD61, 0, + 0xFD63, 0, 0, 0,0xFD67, + /* plane 0, page 226 */ + 0 | (255 << 8), /* first, last */ + 0xFD69,0xFD6A,0xFD6B,0xFD6C, 0,0xFD6E, 0,0xFD70, 0, 0, + 0xFD73,0xFD74,0xFD75, 0, 0, 0,0xFD79,0xFD7A,0xFD7B,0xFD7C, + 0xFD7D,0xFD7E,0xFDA1,0xFDA2,0xFDA3,0xFDA4, 0,0xFDA6,0xFDA7, 0, + 0,0xFDAA,0xFDAB,0xFDAC, 0, 0, 0, 0,0xFDB1,0xFDB2, + 0xFDB3, 0,0xFDB5, 0, 0, 0, 0,0xFDBA, 0,0xFDBC, + 0,0xFDBE, 0, 0, 0,0xFDC2, 0,0xFDC4, 0,0xFDC6, + 0,0xFDC8,0xFDC9,0xFDCA, 0, 0, 0,0xFDCE, 0,0xFDD0, + 0xFDD1, 0,0xFDD3, 0,0xFDD5,0xFDD6,0xFDD7,0xFDD8,0xFDD9,0xFDDA, + 0,0xFDDC,0xFDDD,0xFDDE,0xFDDF, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDE8,0xFDE9, 0, 0,0xFDEC, 0, 0, + 0, 0, 0, 0,0xFDF3, 0, 0,0xFDF6, 0,0xFDF8, + 0xFDF9,0xFDFA, 0,0xFDFC, 0, 0, 0, 0, 0, 0, + 0, 0,0xFE46, 0, 0,0xFE49, 0, 0, 0,0xFE4D, + 0xFE4E, 0, 0, 0, 0, 0,0xFE54,0xFE55,0xFE56,0xFE57, + 0, 0, 0, 0,0xFE5C,0xFE5D, 0, 0,0xFE60,0xFE61, + 0xFE62, 0,0xFE64,0xFE65,0xFE66,0xFE67, 0, 0, 0,0xFE6B, + 0,0xFE6D,0xFE6E, 0,0xFE70, 0,0xFE72, 0, 0, 0, + 0, 0,0xFE78, 0, 0, 0, 0,0xFE7D,0xFE7E,0xFEA1, + 0xFEA2,0xFEA3, 0,0xFEA5,0xFEA6, 0,0xFEA8, 0, 0, 0, + 0xFEAC,0xFEAD, 0,0xFEAF, 0, 0, 0, 0, 0,0xFEB5, + 0xFEB6,0xFEB7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFEC2, 0, 0,0xFEC5,0xFEC6,0xFEC7, 0, 0, + 0, 0,0xFECC, 0,0xFECE,0xFECF,0xFED0, 0, 0, 0, + 0,0xFED5, 0,0xFED7, 0,0xFED9,0xFEDA,0xFEDB, 0, 0, + 0xFEDE,0xFEDF, 0, 0, 0, 0, 0, 0,0xFEE6, 0, + 0, 0,0xFEEA, 0, 0,0xFEED, + /* plane 0, page 227 */ + 0 | (255 << 8), /* first, last */ + 0xFEEE,0xFEEF, 0, 0, 0, 0,0xFEF4, 0,0xFEF6, 0, + 0, 0,0xFEFA,0xFEFB, 0,0xFEFD, 0,0x8E40, 0,0x8E42, + 0,0x8E44,0x8E45, 0,0x8E47, 0, 0,0x8E4A,0x8E4B, 0, + 0,0x8E4E, 0, 0, 0, 0, 0,0x8E54,0x8E55, 0, + 0, 0,0x8E59, 0,0x8E5B, 0, 0, 0,0x8E5F,0x8E60, + 0, 0, 0,0x8E64,0x8E65, 0, 0, 0, 0,0x8E6A, + 0x8E6B,0x8E6C, 0, 0, 0, 0,0x8E71, 0, 0,0x8E74, + 0, 0,0x8E77, 0, 0, 0, 0, 0, 0, 0, + 0,0x8EA2,0x8EA3, 0,0x8EA5, 0, 0, 0, 0, 0, + 0,0x8EAC,0x8EAD, 0,0x8EAF, 0,0x8EB1, 0,0x8EB3, 0, + 0x8EB5,0x8EB6, 0, 0,0x8EB9, 0, 0, 0, 0, 0, + 0,0x8EC0, 0, 0,0x8EC3, 0,0x8EC5,0x8EC6,0x8EC7,0x8EC8, + 0x8EC9,0x8ECA, 0,0x8ECC, 0, 0, 0, 0, 0,0x8ED2, + 0x8ED3, 0, 0, 0,0x8ED7,0x8ED8,0x8ED9,0x8EDA,0x8EDB, 0, + 0,0x8EDE, 0, 0, 0,0x8EE2, 0,0x8EE4,0x8EE5, 0, + 0x8EE7, 0,0x8EE9, 0,0x8EEB,0x8EEC,0x8EED, 0,0x8EEF,0x8EF0, + 0x8EF1, 0,0x8EF3, 0, 0,0x8EF6,0x8EF7,0x8EF8,0x8EF9,0x8EFA, + 0, 0,0x8EFD,0x8EFE, 0, 0, 0,0x8F43,0x8F44,0x8F45, + 0x8F46,0x8F47, 0, 0, 0,0x8F4B,0x8F4C,0x8F4D,0x8F4E,0x8F4F, + 0x8F50, 0, 0, 0,0x8F54,0x8F55, 0, 0, 0,0x8F59, + 0x8F5A, 0, 0,0x8F5D,0x8F5E,0x8F5F, 0,0x8F61, 0,0x8F63, + 0x8F64, 0, 0,0x8F67, 0, 0,0x8F6A,0x8F6B,0x8F6C, 0, + 0, 0,0x8F70, 0, 0,0x8F73,0x8F74,0x8F75,0x8F76, 0, + 0,0x8F79,0x8F7A, 0,0x8F7C, 0, 0,0x8FA1,0x8FA2, 0, + 0x8FA4, 0,0x8FA6,0x8FA7,0x8FA8,0x8FA9, 0,0x8FAB,0x8FAC, 0, + 0x8FAE, 0, 0,0x8FB1, 0,0x8FB3, + /* plane 0, page 228 */ + 6 | (255 << 8), /* first, last */ + 0x8FBA, 0, 0,0x8FBD, + 0x8FBE,0x8FBF, 0, 0,0x8FC2, 0, 0, 0, 0, 0, + 0x8FC8, 0, 0, 0, 0, 0, 0,0x8FCF, 0,0x8FD1, + 0x8FD2, 0, 0, 0, 0,0x8FD7, 0,0x8FD9,0x8FDA,0x8FDB, + 0x8FDC, 0, 0, 0,0x8FE0,0x8FE1, 0, 0, 0, 0, + 0x8FE6, 0, 0, 0,0x8FEA,0x8FEB, 0, 0,0x8FEE,0x8FEF, + 0x8FF0,0x8FF1,0x8FF2, 0,0x8FF4,0x8FF5, 0, 0,0x8FF8, 0, + 0, 0,0x8FFC,0x8FFD, 0, 0,0x9041,0x9042,0x9043,0x9044, + 0x9045,0x9046, 0, 0, 0, 0, 0, 0, 0,0x904E, + 0x904F, 0, 0,0x9052,0x9053, 0,0x9055,0x9056,0x9057,0x9058, + 0,0x905A, 0,0x905C,0x905D,0x905E,0x905F,0x9060,0x9061, 0, + 0x9063,0x9064, 0,0x9066,0x9067, 0,0x9069, 0,0x906B, 0, + 0, 0,0x906F, 0, 0, 0,0x9073,0x9074, 0, 0, + 0, 0,0x9079, 0,0x907B,0x907C,0x907D,0x907E,0x90A1, 0, + 0,0x90A4,0x90A5, 0, 0,0x90A8,0x90A9,0x90AA, 0,0x90AC, + 0x90AD,0x90AE, 0, 0, 0, 0, 0, 0, 0, 0, + 0x90B7,0x90B8,0x90B9,0x90BA,0x90BB,0x90BC, 0, 0, 0,0x90C0, + 0,0x90C2, 0, 0, 0,0x90C6, 0, 0,0x90C9,0x90CA, + 0x90CB,0x90CC,0x90CD,0x90CE,0x90CF,0x90D0,0x90D1, 0, 0, 0, + 0x90D5,0x90D6,0x90D7,0x90D8, 0, 0, 0, 0,0x90DD, 0, + 0,0x90E0, 0, 0, 0,0x90E4,0x90E5, 0, 0, 0, + 0, 0, 0, 0,0x90ED, 0, 0,0x90F0, 0, 0, + 0x90F3,0x90F4,0x90F5, 0, 0, 0, 0,0x90FA,0x90FB,0x90FC, + 0x90FD,0x90FE,0x9140, 0, 0, 0, 0,0x9145,0x9146,0x9147, + 0, 0, 0, 0, 0, 0,0x914E,0x914F,0x9150,0x9151, + 0, 0, 0, 0, 0,0x9157, + /* plane 0, page 229 */ + 0 | (254 << 8), /* first, last */ + 0x9158,0x9159,0x915A, 0, 0,0x915D, 0,0x915F, 0, 0, + 0x9162, 0, 0,0x9165,0x9166,0x9167, 0, 0,0x916A, 0, + 0x916C, 0,0x916E, 0, 0, 0,0x9172, 0,0x9174,0x9175, + 0x9176,0x9177,0x9178,0x9179, 0, 0,0x917C, 0, 0, 0, + 0x91A2,0x91A3,0x91A4,0x91A5,0x91A6, 0,0x91A8,0x91A9, 0, 0, + 0, 0,0x91AE, 0, 0,0x91B1, 0,0x91B3,0x91B4,0x91B5, + 0,0x91B7,0x91B8, 0, 0,0x91BB, 0,0x91BD, 0, 0, + 0, 0, 0, 0, 0,0x91C5, 0, 0, 0, 0, + 0, 0, 0,0x91CD,0x91CE,0x91CF, 0,0x91D1,0x91D2,0x91D3, + 0,0x91D5,0x91D6, 0,0x91D8,0x91D9, 0, 0,0x91DC, 0, + 0, 0,0x91E0,0x91E1, 0,0x91E3, 0, 0, 0,0x91E7, + 0x91E8, 0,0x91EA, 0,0x91EC,0x91ED,0x91EE,0x91EF,0x91F0,0x91F1, + 0x91F2,0x91F3,0x91F4,0x91F5,0x91F6,0x91F7,0x91F8,0x91F9,0x91FA, 0, + 0x91FC,0x91FD,0x91FE,0x9240,0x9241, 0,0x9243, 0, 0,0x9246, + 0x9247,0x9248,0x9249,0x924A,0x924B,0x924C,0x924D,0x924E,0x924F, 0, + 0x9251,0x9252,0x9253, 0,0x9255, 0,0x9257,0x9258,0x9259,0x925A, + 0x925B,0x925C, 0, 0,0x925F, 0,0x9261,0x9262,0x9263, 0, + 0x9265, 0, 0, 0,0x9269,0x926A, 0,0x926C,0x926D, 0, + 0,0x9270, 0,0x9272,0x9273,0x9274,0x9275,0x9276,0x9277, 0, + 0x9279,0x927A,0x927B, 0,0x927D, 0, 0, 0, 0, 0, + 0x92A5,0x92A6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x92B4,0x92B5,0x92B6, 0,0x92B8, + 0x92B9, 0, 0,0x92BC,0x92BD,0x92BE,0x92BF,0x92C0, 0,0x92C2, + 0x92C3, 0, 0,0x92C6, 0, 0,0x92C9, 0,0x92CB,0x92CC, + 0x92CD,0x92CE, 0,0x92D0, 0,0x92D2, 0, 0, 0, 0, + 0x92D7,0x92D8,0x92D9, 0,0x92DB, + /* plane 0, page 230 */ + 0 | (255 << 8), /* first, last */ + 0x92DD, 0,0x92DF, 0,0x92E1, 0, 0, 0, 0, 0, + 0, 0,0x92E9, 0, 0,0x92EC,0x92ED,0x92EE,0x92EF, 0, + 0, 0, 0, 0, 0,0x92F6,0x92F7,0x92F8,0x92F9,0x92FA, + 0, 0, 0,0x92FE, 0,0x9341,0x9342, 0, 0,0x9345, + 0,0x9347, 0,0x9349, 0,0x934B, 0, 0, 0, 0, + 0x9350,0x9351,0x9352, 0, 0,0x9355,0x9356,0x9357,0x9358,0x9359, + 0x935A,0x935B, 0,0x935D,0x935E,0x935F,0x9360, 0, 0,0x9363, + 0x9364, 0,0x9366, 0, 0,0x9369, 0, 0,0x936C,0x936D, + 0,0x936F,0x9370,0x9371,0x9372,0x9373, 0,0x9375,0x9376,0x9377, + 0, 0, 0,0x937B,0x937C,0x937D,0x937E, 0,0x93A2,0x93A3, + 0x93A4,0x93A5,0x93A6,0x93A7,0x93A8, 0,0x93AA, 0, 0, 0, + 0x93AE,0x93AF, 0,0x93B1, 0, 0, 0,0x93B5,0x93B6,0x93B7, + 0x93B8,0x93B9, 0,0x93BB,0x93BC,0x93BD, 0,0x93BF,0x93C0,0x93C1, + 0x93C2,0x93C3,0x93C4,0x93C5,0x93C6,0x93C7,0x93C8, 0,0x93CA,0x93CB, + 0x93CC,0x93CD,0x93CE,0x93CF,0x93D0, 0,0x93D2, 0,0x93D4, 0, + 0x93D6,0x93D7, 0,0x93D9,0x93DA, 0,0x93DC,0x93DD,0x93DE,0x93DF, + 0x93E0,0x93E1,0x93E2, 0,0x93E4, 0,0x93E6, 0, 0,0x93E9, + 0,0x93EB,0x93EC,0x93ED, 0, 0, 0, 0,0x93F2, 0, + 0, 0,0x93F6, 0, 0,0x93F9,0x93FA, 0, 0,0x93FD, + 0x93FE, 0,0x9441,0x9442, 0, 0, 0,0x9446, 0,0x9448, + 0x9449, 0,0x944B, 0, 0, 0, 0, 0, 0,0x9452, + 0x9453, 0, 0, 0, 0,0x9458,0x9459, 0,0x945B,0x945C, + 0,0x945E,0x945F,0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466, + 0x9467, 0,0x9469, 0, 0, 0, 0,0x946E,0x946F,0x9470, + 0,0x9472,0x9473,0x9474,0x9475, 0, 0,0x9478,0x9479, 0, + 0x947B,0x947C,0x947D,0x947E,0x94A1,0x94A2, + /* plane 0, page 231 */ + 0 | (255 << 8), /* first, last */ + 0x94A3,0x94A4,0x94A5, 0, 0, 0,0x94A9,0x94AA, 0,0x94AC, + 0x94AD, 0,0x94AF, 0, 0, 0,0x94B3,0x94B4,0x94B5,0x94B6, + 0, 0,0x94B9,0x94BA,0x94BB,0x94BC,0x94BD,0x94BE, 0,0x94C0, + 0, 0, 0, 0, 0, 0,0x94C7,0x94C8,0x94C9, 0, + 0, 0, 0,0x94CE, 0, 0,0x94D1,0x94D2,0x94D3, 0, + 0,0x94D6,0x94D7,0x94D8,0x94D9,0x94DA,0x94DB, 0,0x94DD,0x94DE, + 0x94DF,0x94E0, 0, 0,0x94E3,0x94E4,0x94E5, 0,0x94E7, 0, + 0,0x94EA, 0,0x94EC, 0, 0,0x94EF,0x94F0,0x94F1,0x94F2, + 0,0x94F4,0x94F5, 0, 0, 0, 0, 0, 0, 0, + 0,0x94FE,0x9540,0x9541, 0,0x9543,0x9544,0x9545,0x9546, 0, + 0x9548,0x9549, 0,0x954B,0x954C,0x954D, 0, 0,0x9550,0x9551, + 0x9552, 0,0x9554, 0, 0, 0, 0,0x9559,0x955A,0x955B, + 0x955C, 0,0x955E, 0,0x9560,0x9561,0x9562, 0,0x9564, 0, + 0, 0,0x9568, 0,0x956A, 0, 0,0x956D, 0,0x956F, + 0,0x9571, 0,0x9573,0x9574, 0,0x9576, 0,0x9578, 0, + 0x957A,0x957B, 0,0x957D, 0, 0, 0, 0, 0, 0, + 0, 0,0x95A8, 0,0x95AA,0x95AB,0x95AC,0x95AD,0x95AE,0x95AF, + 0x95B0, 0,0x95B2,0x95B3,0x95B4, 0, 0,0x95B7, 0, 0, + 0x95BA, 0, 0, 0,0x95BE, 0, 0, 0,0x95C2, 0, + 0, 0,0x95C6,0x95C7, 0, 0,0x95CA, 0, 0,0x95CD, + 0, 0,0x95D0,0x95D1, 0, 0,0x95D4, 0,0x95D6,0x95D7, + 0, 0, 0,0x95DB, 0, 0,0x95DE,0x95DF,0x95E0, 0, + 0x95E2,0x95E3, 0, 0, 0, 0, 0, 0,0x95EA, 0, + 0x95EC,0x95ED,0x95EE,0x95EF,0x95F0,0x95F1, 0,0x95F3,0x95F4,0x95F5, + 0x95F6,0x95F7,0x95F8,0x95F9, 0, 0,0x95FC, 0,0x95FE, 0, + 0x9641,0x9642,0x9643, 0, 0,0x9646, + /* plane 0, page 232 */ + 0 | (254 << 8), /* first, last */ + 0x9647,0x9648,0x9649, 0, 0, 0,0x964D, 0,0x964F, 0, + 0, 0,0x9653, 0,0x9655,0x9656, 0,0x9658, 0,0x965A, + 0,0x965C,0x965D,0x965E,0x965F, 0,0x9661,0x9662, 0,0x9664, + 0, 0, 0,0x9668,0x9669, 0,0x966B, 0, 0,0x966E, + 0x966F, 0, 0, 0, 0,0x9674,0x9675,0x9676, 0,0x9678, + 0x9679, 0, 0,0x967C, 0,0x967E,0x96A1, 0,0x96A3,0x96A4, + 0,0x96A6, 0,0x96A8, 0,0x96AA,0x96AB, 0, 0, 0, + 0, 0, 0, 0, 0,0x96B4, 0,0x96B6,0x96B7, 0, + 0x96B9,0x96BA, 0,0x96BC, 0,0x96BE,0x96BF,0x96C0,0x96C1, 0, + 0,0x96C4,0x96C5,0x96C6, 0,0x96C8,0x96C9,0x96CA,0x96CB, 0, + 0,0x96CE,0x96CF,0x96D0, 0,0x96D2,0x96D3,0x96D4,0x96D5,0x96D6, + 0, 0, 0,0x96DA, 0, 0, 0, 0,0x96DF, 0, + 0x96E1, 0, 0, 0, 0,0x96E6,0x96E7,0x96E8,0x96E9, 0, + 0, 0, 0, 0, 0,0x96F0, 0, 0, 0, 0, + 0, 0,0x96F7,0x96F8, 0,0x96FA,0x96FB, 0,0x96FD,0x96FE, + 0, 0, 0,0x9743,0x9744,0x9745,0x9746,0x9747, 0, 0, + 0x974A,0x974B, 0,0x974D,0x974E,0x974F,0x9750,0x9751, 0,0x9753, + 0x9754, 0,0x9756,0x9757,0x9758,0x9759,0x975A, 0, 0,0x975D, + 0,0x975F,0x9760,0x9761,0x9762, 0, 0, 0,0x9766,0x9767, + 0x9768,0x9769,0x976A,0x976B,0x976C,0x976D, 0,0x976F, 0,0x9771, + 0, 0, 0,0x9775, 0,0x9777,0x9778, 0,0x977A,0x977B, + 0x977C,0x977D, 0,0x97A1,0x97A2, 0,0x97A4,0x97A5,0x97A6, 0, + 0,0x97A9, 0,0x97AB,0x97AC,0x97AD,0x97AE, 0,0x97B0,0x97B1, + 0x97B2, 0,0x97B4,0x97B5,0x97B6, 0,0x97B8,0x97B9,0x97BA, 0, + 0,0x97BD,0x97BE, 0,0x97C0,0x97C1,0x97C2,0x97C3, 0,0x97C5, + 0x97C6,0x97C7, 0,0x97C9,0x97CA, + /* plane 0, page 233 */ + 0 | (254 << 8), /* first, last */ + 0x97CC,0x97CD, 0,0x97CF, 0, 0,0x97D2,0x97D3,0x97D4, 0, + 0,0x97D7,0x97D8, 0,0x97DA,0x97DB,0x97DC,0x97DD,0x97DE, 0, + 0,0x97E1, 0,0x97E3,0x97E4, 0, 0,0x97E7,0x97E8, 0, + 0x97EA,0x97EB,0x97EC,0x97ED,0x97EE, 0, 0,0x97F1,0x97F2,0x97F3, + 0x97F4,0x97F5,0x97F6,0x97F7,0x97F8, 0,0x97FA,0x97FB, 0,0x97FD, + 0x97FE,0x9840,0x9841,0x9842,0x9843, 0,0x9845, 0,0x9847, 0, + 0x9849,0x984A,0x984B, 0, 0,0x984E, 0, 0,0x9851,0x9852, + 0x9853, 0,0x9855,0x9856, 0, 0, 0,0x985A, 0, 0, + 0x985D, 0,0x985F,0x9860,0x9861,0x9862, 0,0x9864,0x9865, 0, + 0x9867, 0,0x9869,0x986A,0x986B, 0,0x986D,0x986E, 0, 0, + 0x9871,0x9872, 0,0x9874,0x9875, 0, 0, 0,0x9879, 0, + 0x987B,0x987C, 0, 0, 0,0x98A2,0x98A3,0x98A4, 0,0x98A6, + 0x98A7,0x98A8,0x98A9,0x98AA, 0,0x98AC, 0, 0, 0,0x98B0, + 0x98B1, 0, 0, 0, 0,0x98B6, 0, 0,0x98B9, 0, + 0,0x98BC,0x98BD, 0, 0,0x98C0, 0, 0,0x98C3, 0, + 0x98C5, 0, 0, 0, 0, 0,0x98CB,0x98CC,0x98CD,0x98CE, + 0,0x98D0,0x98D1, 0, 0, 0, 0,0x98D6, 0, 0, + 0x98D9, 0,0x98DB, 0,0x98DD, 0,0x98DF, 0, 0, 0, + 0,0x98E4, 0,0x98E6, 0,0x98E8,0x98E9, 0,0x98EB,0x98EC, + 0, 0, 0, 0, 0, 0, 0,0x98F4, 0, 0, + 0, 0, 0,0x98FA, 0, 0, 0,0x98FE,0x9940, 0, + 0, 0, 0, 0,0x9946, 0,0x9948, 0, 0,0x994B, + 0, 0,0x994E, 0, 0, 0, 0, 0, 0,0x9955, + 0x9956, 0, 0,0x9959, 0,0x995B, 0, 0, 0,0x995F, + 0, 0, 0, 0, 0, 0, 0,0x9967, 0, 0, + 0, 0, 0, 0,0x996E, + /* plane 0, page 234 */ + 3 | (255 << 8), /* first, last */ + 0x9973, 0, 0, 0, 0, 0, 0, + 0x997A,0x997B, 0, 0, 0,0x99A1, 0, 0, 0,0x99A5, + 0,0x99A7, 0, 0, 0, 0, 0,0x99AD, 0, 0, + 0, 0, 0,0x99B3, 0, 0, 0, 0, 0, 0, + 0, 0,0x99BC, 0, 0, 0, 0, 0, 0,0x99C3, + 0, 0, 0,0x99C7, 0, 0, 0, 0, 0, 0, + 0x99CE,0x99CF, 0, 0, 0, 0, 0,0x99D5, 0, 0, + 0, 0, 0, 0, 0, 0,0x99DE, 0, 0,0x99E1, + 0, 0, 0, 0, 0, 0, 0,0x99E9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x99F5, + 0, 0,0x99F8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9A48,0x9A49, 0, + 0, 0, 0, 0, 0,0x9A50, 0, 0, 0, 0, + 0x9A55, 0, 0,0x9A58, 0,0x9A5A, 0,0x9A5C, 0, 0, + 0,0x9A60, 0, 0,0x9A63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9A6E, 0,0x9A70, 0, 0, + 0, 0, 0, 0, 0, 0,0x9A79, 0,0x9A7B,0x9A7C, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AB4,0x9AB5,0x9AB6, 0, 0, 0,0x9ABA, 0, 0, + 0x9ABD,0x9ABE,0x9ABF,0x9AC0,0x9AC1, 0, 0,0x9AC4,0x9AC5,0x9AC6, + 0,0x9AC8,0x9AC9, 0,0x9ACB,0x9ACC,0x9ACD,0x9ACE,0x9ACF, 0, + 0x9AD1, 0,0x9AD3,0x9AD4,0x9AD5,0x9AD6,0x9AD7,0x9AD8, 0, 0, + 0,0x9ADC,0x9ADD,0x9ADE,0x9ADF,0x9AE0,0x9AE1, 0,0x9AE3, 0, + 0x9AE5,0x9AE6,0x9AE7, 0,0x9AE9,0x9AEA,0x9AEB,0x9AEC,0x9AED,0x9AEE, + 0x9AEF,0x9AF0, 0, 0,0x9AF3,0x9AF4, + /* plane 0, page 235 */ + 0 | (255 << 8), /* first, last */ + 0x9AF5, 0,0x9AF7,0x9AF8,0x9AF9,0x9AFA, 0, 0,0x9AFD,0x9AFE, + 0x9B40,0x9B41,0x9B42,0x9B43,0x9B44,0x9B45, 0,0x9B47,0x9B48, 0, + 0,0x9B4B, 0,0x9B4D,0x9B4E,0x9B4F,0x9B50,0x9B51,0x9B52,0x9B53, + 0,0x9B55,0x9B56,0x9B57, 0,0x9B59, 0,0x9B5B, 0,0x9B5D, + 0, 0,0x9B60, 0,0x9B62,0x9B63,0x9B64,0x9B65,0x9B66,0x9B67, + 0x9B68,0x9B69,0x9B6A,0x9B6B,0x9B6C,0x9B6D,0x9B6E,0x9B6F, 0, 0, + 0,0x9B73,0x9B74,0x9B75, 0,0x9B77, 0,0x9B79,0x9B7A, 0, + 0x9B7C, 0, 0, 0,0x9BA2,0x9BA3,0x9BA4,0x9BA5,0x9BA6,0x9BA7, + 0x9BA8,0x9BA9,0x9BAA,0x9BAB,0x9BAC,0x9BAD,0x9BAE,0x9BAF,0x9BB0,0x9BB1, + 0x9BB2,0x9BB3, 0,0x9BB5, 0,0x9BB7,0x9BB8,0x9BB9,0x9BBA,0x9BBB, + 0,0x9BBD,0x9BBE,0x9BBF,0x9BC0,0x9BC1,0x9BC2,0x9BC3, 0,0x9BC5, + 0,0x9BC7,0x9BC8,0x9BC9, 0,0x9BCB,0x9BCC, 0,0x9BCE,0x9BCF, + 0x9BD0, 0,0x9BD2, 0, 0, 0,0x9BD6,0x9BD7,0x9BD8,0x9BD9, + 0,0x9BDB,0x9BDC,0x9BDD, 0,0x9BDF,0x9BE0,0x9BE1,0x9BE2,0x9BE3, + 0x9BE4,0x9BE5,0x9BE6,0x9BE7,0x9BE8, 0,0x9BEA,0x9BEB, 0,0x9BED, + 0x9BEE,0x9BEF,0x9BF0,0x9BF1,0x9BF2,0x9BF3, 0, 0, 0,0x9BF7, + 0x9BF8, 0,0x9BFA,0x9BFB, 0,0x9BFD,0x9BFE, 0,0x9C41, 0, + 0x9C43,0x9C44, 0,0x9C46,0x9C47,0x9C48,0x9C49,0x9C4A,0x9C4B,0x9C4C, + 0x9C4D, 0,0x9C4F, 0, 0,0x9C52, 0, 0,0x9C55,0x9C56, + 0,0x9C58, 0, 0,0x9C5B,0x9C5C, 0,0x9C5E,0x9C5F,0x9C60, + 0x9C61, 0,0x9C63, 0,0x9C65,0x9C66,0x9C67, 0,0x9C69, 0, + 0,0x9C6C, 0,0x9C6E,0x9C6F,0x9C70,0x9C71, 0,0x9C73,0x9C74, + 0,0x9C76, 0,0x9C78,0x9C79,0x9C7A, 0, 0,0x9C7D, 0, + 0x9CA1,0x9CA2,0x9CA3,0x9CA4,0x9CA5,0x9CA6,0x9CA7, 0,0x9CA9,0x9CAA, + 0,0x9CAC,0x9CAD, 0, 0,0x9CB0,0x9CB1, 0, 0,0x9CB4, + 0x9CB5,0x9CB6, 0,0x9CB8,0x9CB9,0x9CBA, + /* plane 0, page 236 */ + 0 | (252 << 8), /* first, last */ + 0x9CBB, 0, 0,0x9CBE, 0,0x9CC0,0x9CC1, 0,0x9CC3,0x9CC4, + 0,0x9CC6,0x9CC7,0x9CC8,0x9CC9,0x9CCA,0x9CCB, 0, 0,0x9CCE, + 0x9CCF, 0,0x9CD1,0x9CD2,0x9CD3,0x9CD4,0x9CD5,0x9CD6,0x9CD7,0x9CD8, + 0, 0,0x9CDB, 0,0x9CDD, 0,0x9CDF, 0,0x9CE1, 0, + 0, 0,0x9CE5,0x9CE6,0x9CE7,0x9CE8,0x9CE9,0x9CEA, 0,0x9CEC, + 0x9CED, 0, 0,0x9CF0, 0,0x9CF2, 0, 0, 0,0x9CF6, + 0x9CF7,0x9CF8, 0,0x9CFA,0x9CFB,0x9CFC,0x9CFD,0x9CFE,0x9D40,0x9D41, + 0x9D42,0x9D43,0x9D44,0x9D45,0x9D46,0x9D47,0x9D48,0x9D49, 0,0x9D4B, + 0, 0,0x9D4E,0x9D4F,0x9D50,0x9D51,0x9D52,0x9D53,0x9D54, 0, + 0x9D56, 0,0x9D58,0x9D59, 0,0x9D5B,0x9D5C,0x9D5D,0x9D5E,0x9D5F, + 0, 0, 0,0x9D63,0x9D64,0x9D65,0x9D66,0x9D67,0x9D68,0x9D69, + 0x9D6A,0x9D6B,0x9D6C,0x9D6D,0x9D6E,0x9D6F, 0,0x9D71,0x9D72,0x9D73, + 0,0x9D75, 0,0x9D77,0x9D78, 0,0x9D7A,0x9D7B,0x9D7C, 0, + 0, 0,0x9DA2, 0,0x9DA4,0x9DA5, 0, 0, 0, 0, + 0x9DAA,0x9DAB,0x9DAC,0x9DAD, 0,0x9DAF,0x9DB0,0x9DB1,0x9DB2,0x9DB3, + 0x9DB4,0x9DB5,0x9DB6,0x9DB7,0x9DB8,0x9DB9, 0,0x9DBB,0x9DBC, 0, + 0x9DBE, 0, 0,0x9DC1,0x9DC2, 0, 0,0x9DC5,0x9DC6, 0, + 0,0x9DC9, 0,0x9DCB,0x9DCC,0x9DCD,0x9DCE, 0, 0, 0, + 0x9DD2, 0,0x9DD4, 0, 0,0x9DD7,0x9DD8,0x9DD9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9DED,0x9DEE, 0, + 0, 0,0x9DF2,0x9DF3, 0, 0, 0, 0, 0,0x9DF9, + 0x9DFA, 0,0x9DFC,0x9DFD,0x9DFE,0x9E40, 0, 0, 0,0x9E44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9E4F, 0,0x9E51, 0,0x9E53,0x9E54, 0, 0, 0, 0, + 0, 0,0x9E5B, + /* plane 0, page 237 */ + 4 | (245 << 8), /* first, last */ + 0x9E63,0x9E64, 0,0x9E66, 0, 0, + 0x9E69, 0,0x9E6B,0x9E6C,0x9E6D,0x9E6E,0x9E6F,0x9E70, 0,0x9E72, + 0,0x9E74,0x9E75,0x9E76,0x9E77, 0,0x9E79,0x9E7A,0x9E7B,0x9E7C, + 0x9E7D,0x9E7E, 0, 0,0x9EA3,0x9EA4,0x9EA5,0x9EA6,0x9EA7,0x9EA8, + 0,0x9EAA,0x9EAB, 0,0x9EAD,0x9EAE, 0, 0, 0, 0, + 0,0x9EB4, 0, 0, 0,0x9EB8,0x9EB9, 0,0x9EBB,0x9EBC, + 0,0x9EBE, 0, 0, 0,0x9EC2,0x9EC3, 0,0x9EC5,0x9EC6, + 0,0x9EC8,0x9EC9, 0,0x9ECB,0x9ECC,0x9ECD,0x9ECE,0x9ECF,0x9ED0, + 0,0x9ED2,0x9ED3,0x9ED4,0x9ED5, 0, 0,0x9ED8,0x9ED9,0x9EDA, + 0, 0,0x9EDD,0x9EDE,0x9EDF,0x9EE0, 0, 0,0x9EE3, 0, + 0x9EE5, 0,0x9EE7, 0, 0, 0, 0,0x9EEC, 0,0x9EEE, + 0,0x9EF0, 0,0x9EF2,0x9EF3, 0, 0,0x9EF6, 0,0x9EF8, + 0x9EF9, 0,0x9EFB,0x9EFC, 0, 0, 0, 0, 0,0x9F43, + 0, 0,0x9F46,0x9F47,0x9F48, 0,0x9F4A,0x9F4B,0x9F4C,0x9F4D, + 0, 0,0x9F50, 0, 0,0x9F53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9F68, 0, 0, 0, + 0, 0, 0, 0,0x9F70, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9FA5, 0, 0, 0, 0,0x9FAA, 0, + 0, 0, 0, 0, 0, 0, 0,0x9FB3, 0,0x9FB5, + 0, 0, 0, 0, 0,0x9FBB, 0, 0,0x9FBE,0x9FBF, + 0,0x9FC1, 0, 0, 0,0x9FC5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9FD1, 0, 0, + 0, 0, 0,0x9FD7, 0,0x9FD9, + /* plane 0, page 238 */ + 8 | (183 << 8), /* first, last */ + 0x9FEC, 0, + 0, 0, 0, 0, 0, 0, 0,0x9FF5, 0, 0, + 0,0x9FF9, 0, 0, 0, 0, 0,0xA040, 0, 0, + 0, 0,0xA045, 0,0xA047, 0, 0, 0, 0, 0, + 0, 0,0xA04F, 0, 0, 0,0xA053, 0,0xA055,0xA056, + 0, 0,0xA059, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xA068, 0,0xA06A, + 0, 0,0xA06D, 0,0xA06F, 0, 0, 0, 0, 0, + 0, 0, 0,0xA078, 0, 0,0xA07B, 0, 0,0xA07E, + 0,0xA0A2, 0,0xA0A4, 0, 0,0xA0A7, 0, 0, 0, + 0xA0AB,0xA0AC, 0, 0, 0, 0,0xA0B1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA0BD, 0, + 0, 0, 0, 0,0xA0C3, 0,0xA0C5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xA0D0, 0, 0, + 0, 0, 0, 0, 0,0xA0D8, 0,0xA0DA, 0, 0, + 0,0xA0DE, 0, 0, 0, 0,0xA0E3, 0, 0,0xA0E6, + 0,0xA0E8,0xA0E9,0xA0EA,0xA0EB,0xA0EC,0xA0ED,0xA0EE,0xA0EF,0xA0F0, + 0xA0F1, 0,0xA0F3,0xA0F4,0xA0F5,0xA0F6,0xA0F7,0xA0F8,0xA0F9, 0, + 0xA0FB, 0, 0,0xA0FE, + /* plane 0, page 239: --- */ + /* plane 0, page 240: --- */ + /* plane 0, page 241: --- */ + /* plane 0, page 242: --- */ + /* plane 0, page 243 */ + 3 | (253 << 8), /* first, last */ + 0x8840,0x8841,0x8842,0x8843,0x8844,0x8845,0x8846, + 0x8847,0x8848,0x8849,0x884A,0x884B,0x884C,0x884D,0x884E,0x884F,0x8850, + 0x8851,0x8852,0x8853,0x8854,0x8855, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8862, 0,0x8864, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x88A3, 0, + 0x88A5, 0, 0, 0,0x88A9,0x88AA, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8940,0x8941, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x894C, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x89B2, 0, 0, 0, 0,0x89B7, 0, 0,0x89BA,0x89BB, + 0x89BC, 0,0x89BE,0x89BF, + /* plane 0, page 244 */ + 3 | (255 << 8), /* first, last */ + 0x89C5, 0, 0, 0, 0,0x89CA,0x89CB, + 0x89CC,0x89CD, 0, 0, 0, 0, 0, 0, 0,0x89D5, + 0,0x89D7, 0, 0,0x89DA,0x89DB,0x89DC, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x89E6, 0,0x89E8, 0, + 0x89EA, 0, 0,0x89ED,0x89EE,0x89EF, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x89F9, 0,0x89FB,0x89FC, 0, + 0x89FE,0x8A40, 0, 0,0x8A43,0x8A44,0x8A45, 0,0x8A47,0x8A48, + 0x8A49, 0,0x8A4B,0x8A4C,0x8A4D,0x8A4E, 0,0x8A50,0x8A51,0x8A52, + 0x8A53,0x8A54,0x8A55, 0,0x8A57,0x8A58,0x8A59,0x8A5A, 0, 0, + 0x8A5D,0x8A5E,0x8A5F,0x8A60,0x8A61,0x8A62, 0,0x8A64,0x8A65,0x8A66, + 0x8A67,0x8A68,0x8A69, 0,0x8A6B,0x8A6C,0x8A6D,0x8A6E,0x8A6F,0x8A70, + 0x8A71,0x8A72, 0, 0, 0,0x8A76,0x8A77, 0, 0,0x8A7A, + 0x8A7B,0x8A7C,0x8A7D,0x8A7E,0x8AA1,0x8AA2,0x8AA3, 0,0x8AA5,0x8AA6, + 0,0x8AA8,0x8AA9,0x8AAA, 0,0x8AAC,0x8AAD,0x8AAE, 0,0x8AB0, + 0,0x8AB2,0x8AB3,0x8AB4,0x8AB5,0x8AB6, 0,0x8AB8,0x8AB9, 0, + 0x8ABB,0x8ABC,0x8ABD, 0, 0,0x8AC0, 0,0x8AC2,0x8AC3, 0, + 0, 0,0x8AC7, 0,0x8AC9,0x8ACA,0x8ACB,0x8ACC, 0,0x8ACE, + 0x8ACF,0x8AD0,0x8AD1,0x8AD2,0x8AD3,0x8AD4,0x8AD5, 0,0x8AD7,0x8AD8, + 0x8AD9,0x8ADA, 0,0x8ADC, 0, 0,0x8ADF,0x8AE0,0x8AE1,0x8AE2, + 0x8AE3,0x8AE4,0x8AE5,0x8AE6, 0,0x8AE8,0x8AE9,0x8AEA,0x8AEB,0x8AEC, + 0x8AED,0x8AEE,0x8AEF,0x8AF0,0x8AF1,0x8AF2,0x8AF3,0x8AF4, 0,0x8AF6, + 0x8AF7,0x8AF8,0x8AF9,0x8AFA,0x8AFB,0x8AFC, 0,0x8AFE,0x8B40,0x8B41, + 0x8B42,0x8B43,0x8B44,0x8B45,0x8B46,0x8B47,0x8B48,0x8B49,0x8B4A,0x8B4B, + 0x8B4C,0x8B4D,0x8B4E,0x8B4F, 0, 0, 0, 0, 0,0x8B55, + 0, 0,0x8B58,0x8B59, 0, 0, 0, 0,0x8B5E, 0, + 0x8B60, 0,0x8B62, 0,0x8B64,0x8B65, + /* plane 0, page 245 */ + 0 | (239 << 8), /* first, last */ + 0x8B66,0x8B67,0x8B68,0x8B69,0x8B6A,0x8B6B, 0,0x8B6D,0x8B6E,0x8B6F, + 0x8B70,0x8B71,0x8B72,0x8B73,0x8B74,0x8B75,0x8B76,0x8B77, 0,0x8B79, + 0x8B7A,0x8B7B,0x8B7C, 0,0x8B7E,0x8BA1,0x8BA2,0x8BA3,0x8BA4,0x8BA5, + 0x8BA6,0x8BA7,0x8BA8,0x8BA9,0x8BAA,0x8BAB,0x8BAC,0x8BAD,0x8BAE, 0, + 0,0x8BB1,0x8BB2, 0, 0,0x8BB5,0x8BB6, 0,0x8BB8, 0, + 0,0x8BBB,0x8BBC, 0,0x8BBE, 0, 0, 0,0x8BC2,0x8BC3, + 0,0x8BC5, 0, 0,0x8BC8, 0, 0, 0,0x8BCC, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BD6, 0, + 0, 0, 0,0x8BDB,0x8BDC, 0,0x8BDE, 0, 0,0x8BE1, + 0x8BE2, 0, 0, 0,0x8BE6, 0, 0, 0, 0, 0, + 0,0x8BED, 0, 0, 0, 0, 0,0x8BF3, 0, 0, + 0, 0, 0, 0,0x8BFA, 0, 0, 0, 0, 0, + 0,0x8C42,0x8C43,0x8C44, 0,0x8C46, 0, 0,0x8C49,0x8C4A, + 0x8C4B,0x8C4C, 0,0x8C4E, 0, 0, 0, 0, 0,0x8C54, + 0x8C55,0x8C56,0x8C57,0x8C58, 0, 0, 0,0x8C5C,0x8C5D, 0, + 0x8C5F,0x8C60, 0, 0, 0,0x8C64,0x8C65, 0, 0, 0, + 0x8C69, 0, 0,0x8C6C,0x8C6D, 0, 0, 0, 0, 0, + 0,0x8C74, 0, 0, 0, 0,0x8C79, 0, 0, 0, + 0x8C7D, 0,0x8CA1, 0, 0,0x8CA4, 0, 0, 0,0x8CA8, + 0,0x8CAA,0x8CAB, 0, 0, 0,0x8CAF,0x8CB0, 0, 0, + 0, 0, 0, 0,0x8CB7, 0,0x8CB9, 0,0x8CBB, 0, + 0, 0, 0,0x8CC0,0x8CC1,0x8CC2,0x8CC3,0x8CC4, 0, 0, + 0, 0, 0, 0,0x8CCB, 0, 0, 0,0x8CCF, 0, + 0x8CD1,0x8CD2,0x8CD3, 0,0x8CD5,0x8CD6,0x8CD7,0x8CD8, 0,0x8CDA, + /* plane 0, page 246 */ + 55 | (240 << 8), /* first, last */ + 0x8D63,0x8D64, 0, 0,0x8D67, + 0x8D68, 0, 0, 0, 0,0x8D6D,0x8D6E,0x8D6F,0x8D70, 0, + 0, 0,0x8D74, 0, 0, 0,0x8D78, 0, 0, 0, + 0,0x8D7D, 0,0x8DA1, 0, 0, 0, 0,0x8DA6, 0, + 0, 0, 0,0x8DAB, 0,0x8DAD, 0, 0,0x8DB0, 0, + 0x8DB2, 0,0x8DB4, 0, 0,0x8DB7, 0, 0,0x8DBA,0x8DBB, + 0x8DBC, 0, 0, 0, 0, 0, 0,0x8DC3, 0,0x8DC5, + 0, 0, 0, 0,0x8DCA, 0,0x8DCC, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8DD6, 0, 0, 0, + 0,0x8DDB, 0, 0, 0, 0, 0, 0,0x8DE2, 0, + 0, 0, 0, 0, 0, 0, 0,0x8DEB,0x8DEC, 0, + 0,0x8DEF,0x8DF0, 0, 0,0x8DF3, 0,0x8DF5, 0, 0, + 0, 0, 0,0x8DFB,0x8DFC,0x8DFD,0x8DFE, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xC6CD, 0, 0,0xC6CF, 0, 0, 0,0xC6D3, 0, + 0xC6D5, 0,0xC6D7, 0, 0, 0, 0, 0, 0,0xC6DE, + 0xC6DF, + /* plane 0, page 247 */ + 229 | (238 << 8), /* first, last */ + 0xC879, + 0xC87A, 0,0xC87C, 0,0xC87E,0xC8A1, 0,0xC8A3,0xC8A4, + /* plane 0, page 248 */ + 32 | (59 << 8), /* first, last */ + 0xC8D6,0xC8D7,0xC8D8,0xC8D9,0xC8DA,0xC8DB,0xC8DC,0xC8DD, + 0xC8DE,0xC8DF,0xC8E0,0xC8E1,0xC8E2,0xC8E3,0xC8E4,0xC8E5,0xC8E6,0xC8E7, + 0xC8E8,0xC8E9,0xC8EA,0xC8EB,0xC8EC,0xC8ED,0xC8EE,0xC8EF,0xC8F0,0xC8F1, + /* plane 0, page 249 */ + 7 | (7 << 8), /* first, last */ + 0x8BF8, + /* plane 0, page 250: --- */ + /* plane 0, page 251: --- */ + /* plane 0, page 252: --- */ + /* plane 0, page 253: --- */ + /* plane 0, page 254: --- */ + /* plane 0, page 255 */ + 2 | (237 << 8), /* first, last */ + 0xC8D0, 0, 0, 0, 0,0xC8CF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xC6E4, + 0,0xC6E5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xC8CD, 0,0xC8CE, 0, + 0, 0, 0, 0, 0, 0, 0,0xF9FE, + /* plane 1: --- */ + /* plane 2, page 0 */ + 33 | (238 << 8), /* first, last */ + 0x9C71, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9375, 0, 0, 0, 0, 0, 0, 0, + 0x9376, 0, 0, 0, 0, 0, 0, 0,0x9548, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8EC6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8BC5,0x8BFA, 0, 0,0xC87C, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9AB4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x884E,0x884B,0xC87A,0x8848, 0, 0, 0,0x8847, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA0F6, + /* plane 2, page 1 */ + 12 | (242 << 8), /* first, last */ + 0x8845, 0,0x8853, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFCAD, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AAD, + 0,0x9272, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFC47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x94DF, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9FD1, + /* plane 2, page 2 */ + 4 | (229 << 8), /* first, last */ + 0xFBCB, 0, 0, 0, 0, 0, + 0, 0,0x927D, 0, 0, 0, 0, 0, 0, 0, + 0x98A4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x94E7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x90CB,0x927B, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x94D8, 0, 0, 0, 0,0xFC5F, 0, + 0xFA54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9AB5, 0, 0, 0, 0, 0, 0, + 0,0x96DA,0x9279, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA74, + /* plane 2, page 3 */ + 10 | (252 << 8), /* first, last */ + 0x9275, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8DFB, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8A49, 0, 0, 0,0x92DF, + 0x9B7C,0xFA63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFA60,0x926D,0xFA62, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9AB6, 0, 0, 0, 0, 0, 0,0x976B, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFD6A, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFD54, 0,0x9273, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x97D8, 0, 0, 0, 0, + 0, 0,0x9FBB, + /* plane 2, page 4 */ + 19 | (254 << 8), /* first, last */ + 0x9342, + 0x9276, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFA65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x926C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFA6E, 0, 0, 0, 0, + 0, 0,0x9EE0, 0, 0,0x92C0,0x92BF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x92BE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9ABA, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8AB3, 0,0x9775, + /* plane 2, page 5 */ + 71 | (235 << 8), /* first, last */ + 0xFA40, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFA76, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFBD0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA7B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFE6D, 0, 0, 0, 0, + 0, 0,0x9BB3, 0, 0, 0, 0, 0,0x89CC, 0, + 0, 0, 0,0x9ABE, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFA42,0x92BC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x945C, + /* plane 2, page 6 */ + 17 | (118 << 8), /* first, last */ + 0x9BB5, 0, 0, + 0,0x9ABF, 0, 0, 0,0x98A7,0x97A4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x90FD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFC7B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9AC0, + /* plane 2, page 7 */ + 14 | (121 << 8), /* first, last */ + 0x92C3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AAA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9BD0, + /* plane 2, page 8 */ + 44 | (213 << 8), /* first, last */ + 0x9550, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x92C6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x98A6, + /* plane 2, page 9 */ + 22 | (231 << 8), /* first, last */ + 0x9546, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFD63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFAC2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9EC3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x89B2, + /* plane 2, page 10 */ + 17 | (205 << 8), /* first, last */ + 0x9C66, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9053, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x97C1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9AC4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9AC5, + /* plane 2, page 11 */ + 13 | (255 << 8), /* first, last */ + 0x8EEF, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFAE9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9262,0x8AF7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AC6, 0, 0, 0, 0, 0, 0,0x92E1, 0, + 0, 0, 0,0x9AC9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFAC6, 0, 0, 0, + 0, 0, 0, 0, 0,0x97A5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9ACB, 0, 0, 0,0xFA72, + /* plane 2, page 12 */ + 11 | (255 << 8), /* first, last */ + 0x8A5E, 0,0x94E0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x92CC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8AE5, 0, 0, 0, 0, 0,0xFE5C,0x9ACC, + 0, 0, 0, 0, 0,0x9DF9,0x8A43,0x8AA6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9ACD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9ACE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFAEE, + 0x9BCC, 0, 0, 0,0x9ACF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AD1, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9DFA, 0, 0, 0, 0, 0,0x9D7C, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AD3, 0, 0,0x97A6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x995F, 0, 0, + 0,0xFBF6,0x9FC5,0x8A59,0x8B6B, 0, 0, 0, 0, 0, + 0,0x9AD4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9AD5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x97A2, + /* plane 2, page 13 */ + 21 | (200 << 8), /* first, last */ + 0x8A44, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9F4A, 0, 0, 0, 0, 0, 0, 0, 0,0x90A1, + 0xFDA4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8A64,0x8AF2,0x8AF8,0x9DD8, 0, 0,0x94D6,0xFAFE,0xFBA7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AD6, 0,0x9F4D, 0, 0,0xFAF6, 0, 0, 0, + 0, 0, 0, 0,0x8A57, 0,0x8B43,0x8B44, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8AB6, 0, 0, 0, 0, 0,0x8AC0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9E54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9AD7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9AD8, + /* plane 2, page 14 */ + 4 | (251 << 8), /* first, last */ + 0x9ADC, 0, 0, 0, 0,0x8ACA, + 0x9EA8, 0, 0,0x9263,0x9ADD,0x8B65,0x8B6F,0x8B7E, 0, 0, + 0, 0,0x8F43, 0, 0, 0, 0, 0, 0,0x92D0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8AF4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DBE, + 0, 0, 0, 0, 0,0x9AE1, 0,0xFCDE,0x9DFD,0x8B66, + 0x8B70,0x8B75,0x8AE4,0x8BA4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8AED, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8A5D, 0,0x8B48, 0, 0, 0, 0,0x9DED, 0, 0, + 0, 0,0x9E40, 0, 0, 0, 0, 0, 0, 0, + 0x8AEF,0x8AF6,0x9E76, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EE3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9ADE,0x8DFE, 0, 0, 0, + 0,0xFAFC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9CB1,0x9E77, + 0x8B64,0x8B67, + /* plane 2, page 15 */ + 29 | (237 << 8), /* first, last */ + 0x974B, + 0, 0, 0, 0, 0, 0, 0, 0,0x9653, 0, + 0, 0, 0, 0, 0,0x9AE0,0x8B4A, 0,0x8AF1,0x8AD7, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA0AB, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8AB5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8A5F, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AEE, 0, 0,0x9ADF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8AFE, 0, 0, 0, 0, 0, 0, + 0x8A58,0x8BA3,0x8BA7, 0, 0, 0, 0, 0,0x9AE3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9DD7,0x9E7D,0x9EA7,0x9EAB, + /* plane 2, page 16 */ + 20 | (246 << 8), /* first, last */ + 0x9042, 0, 0, 0, 0, 0, 0, 0, 0,0x8B79, + 0x8B7A, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AE6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9AE5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8A7E, 0, 0, 0, 0, 0,0x9E44,0x9AE7,0x8A7C, + 0x8B71, 0, 0,0x9AE9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9AEA, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9AEB, 0, 0, 0, 0, 0, 0,0x8ABD, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFB4E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9AED,0x8AF9,0x9E63, 0, 0, 0, 0, 0,0x8B49, + 0x8ACE,0x8B6E, 0, 0, 0, 0, 0,0x8AE8, 0, 0, + 0,0x9AEE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x92CE, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8A5A,0x8B7B,0x8B7C, + /* plane 2, page 17 */ + 47 | (217 << 8), /* first, last */ + 0x9AEF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AF0, + 0,0x8AFA, 0, 0, 0, 0, 0, 0, 0,0x8941, + 0, 0,0x8B72, 0, 0, 0, 0, 0, 0,0x8AF3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BA8, 0, + 0, 0, 0, 0, 0,0x9EAE, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9E72, + /* plane 2, page 18 */ + 60 | (254 << 8), /* first, last */ + 0xFB73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFB5F, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x90BA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x91FE,0x9EF6, + 0, 0, 0, 0, 0, 0,0x97ED, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9AF3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xA0EE, + /* plane 2, page 19 */ + 2 | (254 << 8), /* first, last */ + 0x967C,0x9345,0x986E,0xFA56, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9AF5, 0, 0, 0,0xFC4B, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9AF4,0xFEDE, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFCB7, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97F1, 0, 0, 0,0x97C7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9CCB,0x9240, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9CE8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x91FD, + /* plane 2, page 20 */ + 19 | (253 << 8), /* first, last */ + 0x974E, + 0, 0,0xFB68, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x976C, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8CC2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97E8, 0,0xFB6A,0x8B74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8EE7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFDC8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9241, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x96A1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8EF3, + /* plane 2, page 21 */ + 119 | (150 << 8), /* first, last */ + 0x9AF7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8FA6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFAD6, + /* plane 2, page 22 */ + 10 | (254 << 8), /* first, last */ + 0x9CC7, 0, 0, 0, 0, 0, 0, 0, 0,0xFAD7, + 0, 0, 0, 0, 0,0x9AF8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFBA1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8EC5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFBA4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFBC2, 0,0x9AC1, 0, 0, 0, + 0, 0,0x91FA,0xFEDB,0x97AB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9147, 0,0xFBB1, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8FEA, 0, 0, 0, 0, 0, 0, + 0x94D2,0xFE61,0xFACE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x92ED,0x91F3,0x93C6, 0,0x935A, + /* plane 2, page 23 */ + 13 | (252 << 8), /* first, last */ + 0xFAFB, 0, 0,0x92EF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFAC8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9847,0x9366, + 0x9855, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x96E6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9F43,0x9FAA, + 0x94DA,0x92EE,0xFCAF,0xFBFB, 0,0x8EF9,0x91F6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9364, 0, 0, 0, 0,0x94F5,0x9CB6,0xFBAD,0x984E, + 0x8F44,0x96FD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9AF9, 0, 0, 0,0x9AFA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9769,0x95D4,0x984B, + 0xFBAA, 0, 0,0x987C, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91EA, + 0, 0, 0, 0, 0,0x9DAF,0x9DC5, 0,0x91F1,0x8EB1, + 0x97A9,0xFBAC,0xFCB8, + /* plane 2, page 24 */ + 32 | (250 << 8), /* first, last */ + 0x9CB9, 0, 0, 0, 0, 0, 0, 0, + 0xFBB0,0xFCD2,0x93CB, 0, 0,0x9AFD, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x91F4,0x8BAC,0xA055, + 0, 0, 0, 0,0x9574, 0, 0, 0, 0,0x95BE, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97AD, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8EE9, 0, 0,0x92F8,0x97BE,0x916C, + 0x94AA, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFC63, + 0, 0, 0,0x9DC6, 0, 0, 0, 0, 0, 0, + 0,0x97B5,0x92B8,0x91EF, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFEA6,0x9760, + 0x9358,0x9576,0x8FAC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x91EC,0x97B4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91F7, + 0, 0, 0, 0,0x974A,0xFB49,0x9578,0x93BC, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x91D6, + /* plane 2, page 25 */ + 3 | (243 << 8), /* first, last */ + 0x9355,0x9356,0x9851, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8FF8,0xFBC0,0x93F2, 0, + 0,0x90D0, 0, 0, 0, 0, 0, 0,0x9C44, 0, + 0, 0, 0, 0,0x9255, 0, 0, 0, 0,0x9363, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x91A5, + 0, 0, 0, 0, 0, 0, 0, 0,0xA0ED, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFD6B, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9AFE, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9351, 0, 0, 0,0x8C57, 0, + 0,0xFA78, 0, 0, 0, 0,0xFEA8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9350, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA4C, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x92F7, + /* plane 2, page 26 */ + 45 | (75 << 8), /* first, last */ + 0x9B40, 0, 0, 0, 0, + 0, 0,0xFBCE, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9B41, + 0, 0, 0, 0, 0,0xFEAD, + /* plane 2, page 27 */ + 68 | (194 << 8), /* first, last */ + 0xFBD5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8BC2,0x9A7C, + /* plane 2, page 28 */ + 42 | (172 << 8), /* first, last */ + 0x9B42, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9B43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E79, 0, 0,0xFBD9, 0, 0, 0, 0, + 0, 0,0x9B44, + /* plane 2, page 29 */ + 70 | (249 << 8), /* first, last */ + 0xA0A7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BF3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8C79, 0, 0, 0,0x935E, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x89CB, 0, 0, 0, 0, 0, 0,0x9F53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x93D7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFBE1, + /* plane 2, page 30 */ + 28 | (213 << 8), /* first, last */ + 0xFED0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFBE2, 0, 0, 0, 0, + 0,0xFCE3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9074, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFBE6, 0, 0, 0,0x9BB7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9B45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B47, + /* plane 2, page 31 */ + 15 | (232 << 8), /* first, last */ + 0x9F50, 0, 0, 0, 0, + 0,0x9B48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFC5B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x98A9, 0, + 0,0x9CFD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x884C, + /* plane 2, page 32 */ + 69 | (252 << 8), /* first, last */ + 0x9B4B, + 0, 0, 0,0xFBEC, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8C69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BA8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AD5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFA73, + /* plane 2, page 33 */ + 42 | (195 << 8), /* first, last */ + 0xFD59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x91A2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFBED, 0, 0, 0, 0, + 0, 0,0x9CA9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AA8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9BC3, + /* plane 2, page 34 */ + 8 | (124 << 8), /* first, last */ + 0x8AE1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9B4E, + /* plane 2, page 35 */ + 33 | (250 << 8), /* first, last */ + 0x95D0, 0, 0, 0,0x905F, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x97EE, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFC4E, 0, + 0, 0, 0, 0, 0,0x9B4F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9B50, + /* plane 2, page 36 */ + 101 | (237 << 8), /* first, last */ + 0x9EC6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFC50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD73, + 0, 0, 0, 0, 0,0xFDA7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9DA2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFA58, + /* plane 2, page 37 */ + 19 | (190 << 8), /* first, last */ + 0xFA5E, + 0, 0, 0, 0, 0, 0, 0,0xA059, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFA75, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFBBE, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CA2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9370, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9371, + /* plane 2, page 38 */ + 27 | (246 << 8), /* first, last */ + 0x9377,0xFEEF, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x936D, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFC5D, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x90B8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8AFC, 0,0xFB41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9E6B,0x94E3,0x8EE2, + /* plane 2, page 39 */ + 18 | (205 << 8), /* first, last */ + 0x8C7D, 0, + 0x8ED7, 0, 0, 0, 0, 0, 0,0x9C4D, 0, 0, + 0,0x96A3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9B51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8AC3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x96AA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFC68,0x8B6D, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFD67, + /* plane 2, page 40 */ + 3 | (247 << 8), /* first, last */ + 0x8AE9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFCA1,0x936C, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFE70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCA8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFCE9, + /* plane 2, page 41 */ + 38 | (147 << 8), /* first, last */ + 0x9CB4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8AEA, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9B53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B55, 0, 0, 0,0x96AB, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFCA7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9B56, + /* plane 2, page 42 */ + 102 | (232 << 8), /* first, last */ + 0x8ABC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8ACB, 0, 0, + 0, 0, 0,0x9B57, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x89CD, 0,0x9B59, + /* plane 2, page 43 */ + 14 | (206 << 8), /* first, last */ + 0x9B5B, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x93A5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B5D, 0, 0, 0,0x9E4F, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x93A3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8A7B, 0, 0, 0,0x8B42, + /* plane 2, page 44 */ + 38 | (201 << 8), /* first, last */ + 0x9750,0x8FB3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8A50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9B60, 0, 0, 0, + 0,0x8B45, 0, 0, 0,0x8B46, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9DFE, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9B62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x937B, 0, 0, 0, 0, + 0,0x93B1, 0, 0, 0, 0, 0, 0, 0,0x8A60, + 0, 0, 0, 0, 0, 0, 0, 0,0x8AD8, 0, + 0, 0, 0,0x9B63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8A69, 0, 0, 0,0x8A47, 0, + 0,0x8ACC, + /* plane 2, page 45 */ + 7 | (238 << 8), /* first, last */ + 0x937C,0x9B65, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9B66, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8A72, 0, + 0, 0, 0, 0, 0, 0,0x8A7A, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93AF, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AB0, 0, 0, 0, 0, 0, 0, 0,0x9B68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9EA3, 0, 0,0xFAEC,0x8B77, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8B59, + /* plane 2, page 46 */ + 13 | (239 << 8), /* first, last */ + 0xFCB1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFCBB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9B69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x93A8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8AE0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9E51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8F5F, + /* plane 2, page 47 */ + 116 | (227 << 8), /* first, last */ + 0x9B6A, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9B6B, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x97EC, + /* plane 2, page 48 */ + 51 | (218 << 8), /* first, last */ + 0x9B6C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFE4E, 0, + 0, 0, 0, 0, 0,0xFDC2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9B6D, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9167,0xFCCC, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x93B6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x90E4, 0, 0, 0, 0,0x90E5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9EF2, + /* plane 2, page 49 */ + 3 | (249 << 8), /* first, last */ + 0x93CA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8BBC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8F46, 0, 0, 0, 0, + 0x93CF, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFCDB,0xFCDC, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x93C0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFCE6,0x96E7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFCD8,0xFCD9,0xFDA6, + /* plane 2, page 50 */ + 15 | (225 << 8), /* first, last */ + 0x93CE, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x95F1, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9CE9, 0,0xFCE4, + 0x94AF,0xFA77,0x93CC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x905A, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8C54, + 0, 0, 0, 0, 0, 0, 0,0x93BF,0xFB51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x93B9,0xFED7,0x93B7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x93D9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x93BB,0x93DA, + /* plane 2, page 51 */ + 0 | (254 << 8), /* first, last */ + 0x98A3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x90D1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9B6E, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFA70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BEB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9B6F, 0, 0, 0, 0, 0, 0, 0, + 0xFCFC, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8B40,0xA07B, 0, 0, 0,0x8CA1, + 0x97F7, 0, 0, 0,0x93E2, + /* plane 2, page 52 */ + 0 | (229 << 8), /* first, last */ + 0xFCD6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9559, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x93A6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFD40, 0, 0,0x935F, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x97F2, + /* plane 2, page 53 */ + 25 | (243 << 8), /* first, last */ + 0x9C76, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8EF8, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8F47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x92B4, + 0, 0, 0,0x91ED, 0, 0,0x96D2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFD46,0x8F4F,0x9549, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9B75, + /* plane 2, page 54 */ + 0 | (238 << 8), /* first, last */ + 0xFA5C, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9B79, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFD4B, 0, 0, 0,0x96D3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD58, + 0, 0, 0, 0, 0,0x945F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA0F5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9243, 0, 0, 0, + 0, 0, 0,0x97FA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9DD9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x97F4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x924D, + /* plane 2, page 55 */ + 3 | (215 << 8), /* first, last */ + 0xFD5B, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9B7A, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9ED5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFAAE, 0,0x9CC9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8EC8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94B4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x93E1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x93DF, 0, + 0, 0, 0, 0,0xFCF0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93EC,0x97F6,0x96CF, + /* plane 2, page 56 */ + 58 | (58 << 8), /* first, last */ + 0x93DE, + /* plane 2, page 57 */ + 194 | (194 << 8), /* first, last */ + 0x8ACF, + /* plane 2, page 58 */ + 167 | (250 << 8), /* first, last */ + 0x9BA2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFD69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9352, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x98A2, + /* plane 2, page 59 */ + 90 | (90 << 8), /* first, last */ + 0xFD6E, + /* plane 2, page 60 */ + 99 | (255 << 8), /* first, last */ + 0x8CA4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFA7C,0x93FA,0x907C, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8F67, 0,0x9DB7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA0E9, + 0xFA4E,0xFDA1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9E74,0x9FBF,0x9ECB,0x9BB9, + /* plane 2, page 61 */ + 64 | (248 << 8), /* first, last */ + 0x9DD4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x97B9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8EF1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x957B, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9ED2,0x9753,0x96A4,0x8FBE,0x94D9,0x9058,0xFD79,0xFD7B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8EDA, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8EFA, + /* plane 2, page 62 */ + 17 | (252 << 8), /* first, last */ + 0x9BA5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9ED9,0x97D4,0x90BB,0xFDBC,0xFDC6,0x9248, + 0, 0, 0, 0, 0, 0, 0,0x92B5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9DC1,0x92B9,0x92A6,0x8F4B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9BA6, 0, 0, 0, 0, + 0,0x92B6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8E40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9ED8,0x945E,0x985F, + 0x94CE,0x924A,0xFD70, + /* plane 2, page 63 */ + 53 | (240 << 8), /* first, last */ + 0x9467, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8DEC, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BD8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9448,0xFAC1,0x9CF7, + 0xFDBE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8FDA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFDD9, 0, 0,0xFC7E, 0, 0, 0, 0, 0, 0, + 0, 0,0x93F9, 0, 0, 0, 0,0xFA43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFAEB,0xFAC3,0x97D3,0x95F9,0x9C48, + 0xFDD8, + /* plane 2, page 64 */ + 17 | (225 << 8), /* first, last */ + 0xA0D8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFDD7,0xFB4A,0x9BAF, + 0x944B,0xFDC9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8EAC, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDB2, 0, 0, 0, 0, 0,0x925A, + 0xFCBD,0x92D9, 0, 0, 0,0xFDD5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x92DD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9259, + /* plane 2, page 65 */ + 4 | (252 << 8), /* first, last */ + 0x96BA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x925B, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9BAB, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDDA,0xFDDE, 0, 0, 0,0xFDD3, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8C46, 0, + 0, 0, 0, 0, 0,0xFDD6,0xFDDC,0xFDDD, 0, 0, + 0, 0,0x90FE, 0, 0,0xFEA1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8BAD, + 0, 0,0x9CD8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9E6D,0xFD7C,0xFB61, 0, 0, 0, 0, + 0, 0,0x96F8, 0, 0, 0, 0, 0, 0, 0, + 0,0x96F0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFCF4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFE60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9852, + /* plane 2, page 66 */ + 27 | (250 << 8), /* first, last */ + 0x964F, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x916E, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x986D, 0, 0,0x9864, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9453,0xFDEC, + 0xFB78, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x95BA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x985D, 0,0x92F9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x985A, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDF6, 0, 0, 0, 0, 0, 0, + 0,0x93D0,0x9862, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9BAD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x974F, + /* plane 2, page 67 */ + 13 | (248 << 8), /* first, last */ + 0x9BAE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9452, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9BB0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x91D2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x97EA,0xFB6B, + 0x91B1,0xFDF3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x92CB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9BB1, 0, 0, 0, 0, 0,0xFCEC, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x986B, + 0, 0, 0,0x9751, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9871,0x95EF, 0, 0, 0, 0, 0, + 0, 0,0x9EF3, 0, 0, 0, 0, 0,0x91E8, + /* plane 2, page 68 */ + 4 | (214 << 8), /* first, last */ + 0x9BBA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFB4C,0x926A, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFDF8,0x9861, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x91E7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x93ED,0x9744, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x91E1, 0, 0,0xFBF5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9869, 0, 0, 0, + 0,0x8A62, 0, 0,0x9BBB, + /* plane 2, page 69 */ + 5 | (200 << 8), /* first, last */ + 0x8CA8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9C55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8E77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8AB2, + /* plane 2, page 70 */ + 24 | (212 << 8), /* first, last */ + 0x9EBC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x93E6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x93A2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9BBD, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x94B3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x937D, + /* plane 2, page 71 */ + 6 | (224 << 8), /* first, last */ + 0x9E66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9459, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9BBF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9458, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9EA5, + /* plane 2, page 72 */ + 18 | (255 << 8), /* first, last */ + 0x9BC7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFE54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8E74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8BD6, 0, 0, 0, 0, 0, 0, + 0x94B6,0xFD74,0x98C0,0x94A5, 0, 0, 0, 0, 0, 0, + 0,0x9BC8, 0, 0, 0,0x95ED, + /* plane 2, page 73 */ + 0 | (251 << 8), /* first, last */ + 0xFD7E,0xFBEB, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFD7D, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x976F,0x9461, 0,0x9FC1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x95D7, 0, 0, + 0,0xFA52,0x9C58, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9F68,0x9BE7,0xFCCE,0x96E8,0xFA49,0x97A1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x954D,0x9EF8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFE49,0x91CE,0x9771, 0, + 0, 0, 0,0x8CCF, 0, 0, 0,0xFDB1, 0, 0, + 0xFC6E, 0, 0, 0, 0, 0,0x9CF2,0x93B8,0x9043,0x9759, + 0x94D7,0xFE66,0x947D,0xFC6F, 0, 0, 0, 0,0x9246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFA6D, 0, 0,0x8EF7, 0,0xFBB7, + 0,0x947C,0x92CD,0x97B2, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFE65,0x967E,0x9758,0x9B77,0x91CF, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x94A4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9CAD, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BAB, 0, + 0, 0,0x96D5,0xFCB3, 0, 0, 0,0x93AE, 0,0x976D, + 0, 0, 0, 0, 0, 0,0x9446,0x95F7, 0, 0, + 0, 0, 0, 0, 0, 0,0x9C46,0x955B,0x91D1,0x94F4, + 0,0xFE67, + /* plane 2, page 74 */ + 14 | (233 << 8), /* first, last */ + 0x92A5, 0, 0, 0,0xFEDF,0x8CAB, + 0,0x9BC9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCED,0xFDFA,0xFCC8,0xFE62,0x91FC,0xFE6B,0xFDF9, + 0xFCC7,0x914E,0x9CB8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9767, 0, 0, 0,0x95EE, 0, 0,0x9BB2, + 0, 0, 0, 0,0x9460, 0, 0, 0,0x94A2,0x9875, + 0x97AC,0x91D3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x987B, 0, 0, 0, 0, 0, 0, + 0,0x8EEB,0x976A,0x965E, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x97EB, 0, 0, 0, 0, 0,0x9FF9, + 0x95F8,0xFEA2,0x8FE6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFE7E, 0, 0, 0, 0, 0, 0,0x9DA4,0x9768,0x8EEC, + 0x94BD, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x945B,0x9CF6,0xFAA7,0x9BD9, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFA5D,0x9656,0x9762, + 0, 0, 0, 0, 0, 0,0x94BA,0xA04F,0x92D8, 0, + 0, 0,0x9BCB, 0, 0, 0, 0, 0, 0,0x94BB, + 0, 0,0x9D5F, 0, 0, 0, 0, 0, 0,0x90CF, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9465, 0, 0,0x9F4C, 0, 0, 0, + 0, 0, 0,0x90D8, + /* plane 2, page 75 */ + 110 | (245 << 8), /* first, last */ + 0x9EBE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFB6D, + /* plane 2, page 76 */ + 9 | (217 << 8), /* first, last */ + 0x95CA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9DC2,0x97F8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8FFC, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9473, + /* plane 2, page 77 */ + 6 | (235 << 8), /* first, last */ + 0x9474, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFEB7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8A4B, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8A55,0x8B69, + /* plane 2, page 78 */ + 59 | (167 << 8), /* first, last */ + 0x8ADC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8B76, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9BCE, 0,0x8A68, + /* plane 2, page 79 */ + 14 | (194 << 8), /* first, last */ + 0xA0F8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x98DF, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFEB5, 0, 0, 0,0x9BCF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x96FB, 0, 0,0x9BFB, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9ECE, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8EE5, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9E7B, + /* plane 2, page 80 */ + 44 | (157 << 8), /* first, last */ + 0x9BD2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8AA5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFECE, + /* plane 2, page 81 */ + 43 | (231 << 8), /* first, last */ + 0x8A45, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9DFC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFECF,0x8BA5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8C4A, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8AEC, 0, 0, + 0xFCE0,0x94AD, + /* plane 2, page 82 */ + 32 | (216 << 8), /* first, last */ + 0xFED5,0x94AC, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFC5A, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9BD6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8A6F, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8BA9, + /* plane 2, page 83 */ + 14 | (19 << 8), /* first, last */ + 0x8E5F, 0, 0,0x9DCB, 0,0xFCE7, + /* plane 2, page 84 */ + 25 | (110 << 8), /* first, last */ + 0x9BD7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x93C8, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x91F0,0x8FE0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9BDB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x90ED, 0, + 0x9BDC, + /* plane 2, page 85 */ + 49 | (224 << 8), /* first, last */ + 0xA0EC, + 0, 0, 0,0x98FA, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9BE0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x93C7,0x9249,0x96E1,0x9BE2, 0, 0, 0,0x9BE4, 0, + 0,0x8FE1,0x9BE5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94C0, + 0, 0,0x93C3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93C5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9079, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x977B, 0, 0, 0, 0, 0,0x907E, + 0, 0, 0, 0,0xFEE6, + /* plane 2, page 86 */ + 5 | (246 << 8), /* first, last */ + 0xFE46, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9DB8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9270, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x95A8, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8CB0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x94C8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x98B9, + /* plane 2, page 87 */ + 6 | (225 << 8), /* first, last */ + 0x9140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFCBE, + 0, 0, 0, 0, 0, 0, 0,0x9157, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8BB2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFADF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9BE6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9643,0x8E44,0x9C4F, + /* plane 2, page 88 */ + 87 | (225 << 8), /* first, last */ + 0xFEF4, 0, 0, + 0, 0, 0,0x9BE8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x93DC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x966F, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8E4A, + /* plane 2, page 89 */ + 3 | (204 << 8), /* first, last */ + 0x9BED, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x92F6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9DB9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8E4E, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFBCF, + /* plane 2, page 90 */ + 149 | (233 << 8), /* first, last */ + 0x9EC2, + 0, 0, 0, 0, 0, 0,0x94E5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BF0,0x94E4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9551, + /* plane 2, page 91 */ + 116 | (232 << 8), /* first, last */ + 0x8BBB, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9BF1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x94F0, + 0x8E64, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x94EA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8F61, 0, + 0, 0,0x9B64, + /* plane 2, page 92 */ + 1 | (254 << 8), /* first, last */ + 0x8E5B, 0, 0, 0, 0,0x9BF2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9FBE, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9DC9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8E6C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8F73, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8CAF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8F75,0x8E71, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8E60, + /* plane 2, page 93 */ + 32 | (67 << 8), /* first, last */ + 0x8E6A, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8C4C, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9552, + /* plane 2, page 94 */ + 14 | (216 << 8), /* first, last */ + 0x9554, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8AD4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9DBB, + 0x9543,0x92FE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x94F2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x94F1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xA0EA,0x9DD2, + /* plane 2, page 95 */ + 26 | (226 << 8), /* first, last */ + 0xA0B1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x91F8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9462,0x9BA4, + /* plane 2, page 96 */ + 41 | (165 << 8), /* first, last */ + 0x8EAD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EAD, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x96D0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFEEE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AB4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9757,0x8A77, + /* plane 2, page 97 */ + 2 | (221 << 8), /* first, last */ + 0x9BF7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8EB5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xA06D, + 0x8EB6,0x9756,0x9540, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA0F3,0x94BE, 0, 0, 0,0x9BFA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xFDDF, + /* plane 2, page 98 */ + 88 | (208 << 8), /* first, last */ + 0x9DBC, 0, + 0, 0, 0, 0, 0, 0, 0,0x94FE, 0, 0, + 0, 0, 0, 0, 0, 0,0x8BDB,0xA0FE, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8EC0, + /* plane 2, page 99 */ + 53 | (248 << 8), /* first, last */ + 0x9F47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8BDE,0xA0FB, 0, 0, 0, + 0,0x8EC3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9649, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xFEC2, 0, 0,0x954C, + /* plane 2, page 100 */ + 2 | (152 << 8), /* first, last */ + 0x9BFD, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x90CC,0x9C60,0x954B, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BFE, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9C70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9C43, 0, 0, 0,0x9C47,0x8ECC, 0, 0, + 0,0x8E54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8EE4, + /* plane 2, page 101 */ + 18 | (191 << 8), /* first, last */ + 0x9C49, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8B5E, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x955E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x955C, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9C4B, + /* plane 2, page 102 */ + 18 | (252 << 8), /* first, last */ + 0x8BE1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8ED9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9DB4, 0,0x925F, 0, 0, + 0,0x9C4C, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8AA1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8EDB, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9C56, + /* plane 2, page 103 */ + 22 | (204 << 8), /* first, last */ + 0x8AA2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9754, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9C5E, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9ED4, + 0x9568, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xA0C3, + /* plane 2, page 104 */ + 28 | (199 << 8), /* first, last */ + 0x8AE6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xA0F7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9C61, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9C5F, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFC4D, 0,0x9E5B, 0, + 0, 0, 0, 0, 0, 0, 0,0x9E69, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9C63, + /* plane 2, page 105 */ + 14 | (250 << 8), /* first, last */ + 0xFEC7, 0, 0,0xFEC6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9C67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9C69, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8BE2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9165, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CE7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8A54, 0, 0, 0, 0, 0, 0, 0, + 0x9C6C, + /* plane 2, page 106 */ + 45 | (82 << 8), /* first, last */ + 0x9C6E,0xFE5D, 0, 0, 0, + 0, 0,0x9C73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x956A, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x956D,0x8EF0, + /* plane 2, page 107 */ + 5 | (247 << 8), /* first, last */ + 0x8F4D, 0, 0, 0, 0, + 0x8EF6, 0, 0, 0, 0, 0, 0, 0, 0,0xFABC, + 0,0x8CD5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFBDA, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8B4C,0xFD75,0x9BDD,0xFAF5, 0, 0, 0, 0, 0, 0, + 0,0x9C74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9545, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x96C6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8F6A,0x8F4E, 0, 0, 0, 0, 0,0x9C78, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFA55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97E4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9C41, + /* plane 2, page 108 */ + 33 | (209 << 8), /* first, last */ + 0x925C, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x96FA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFB66,0x8E65,0x9849,0xFBA8, + 0x9842, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9C7A, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x97FB,0x90CA, 0, 0, 0, 0,0x9C5B, + 0, 0,0x974D, 0, 0,0x8ED3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9561, + /* plane 2, page 109 */ + 34 | (240 << 8), /* first, last */ + 0x9F4B,0x9FB5,0x93D2,0xFDAA,0x9840,0x9146, + 0x9867,0xFA5A,0xFBA9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9841, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8CD3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFCFD,0xFDAB,0x91BD,0x8F4C,0x96C9,0x8F55,0xFBAE,0x956F, 0, 0, + 0, 0, 0, 0,0x9C7D, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xA0F0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x946F,0xFDAC, 0, 0, 0, 0, + 0x96CB, + /* plane 2, page 110 */ + 0 | (215 << 8), /* first, last */ + 0x96CE, 0, 0, 0, 0,0xA056, 0,0x9CE1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x96C4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8F5E,0x8F6C,0x8EA3,0xFBB3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFC53, 0, 0, 0,0xFDB3, 0, 0, 0, 0,0x8F6B, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x96CA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8F79, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9E6F,0xA0C5, + 0xFC78,0x8E42,0x8F5A,0x90C2,0x8EA5,0x9061, + /* plane 2, page 111 */ + 38 | (223 << 8), /* first, last */ + 0x924F, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9373,0xFDB5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xFECC, + 0,0xFBBD, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8CD6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9843,0x96C5, + /* plane 2, page 112 */ + 14 | (248 << 8), /* first, last */ + 0x89BC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9CA3, 0, 0, 0, 0, + 0, 0,0x924B,0x984A, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8FA4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xA0F1,0x9EFB,0x9CD2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8FA7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFC5C, + /* plane 2, page 113 */ + 9 | (205 << 8), /* first, last */ + 0x9845, + 0, 0,0x9046,0x8CD1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFEFA,0x9560, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9F48,0x9247, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x90FB, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9CA4, + /* plane 2, page 114 */ + 27 | (230 << 8), /* first, last */ + 0x9571, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9CA6, 0, + 0, 0, 0,0x9CA7, 0, 0, 0, 0, 0,0x9CAA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9ED3, 0, + 0, 0,0x9E70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9CAC, + /* plane 2, page 115 */ + 154 | (154 << 8), /* first, last */ + 0x8FAE, + /* plane 2, page 116 */ + 34 | (134 << 8), /* first, last */ + 0x957D, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9CB0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97B6, 0,0xA0BD, + /* plane 2, page 117 */ + 116 | (254 << 8), /* first, last */ + 0x8ADF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9EAA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8FBD, 0, 0, 0,0x8FBF, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9369,0x9BA7, + /* plane 2, page 118 */ + 7 | (148 << 8), /* first, last */ + 0xC8A4, 0, 0, + 0, 0,0xFEEA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9BE1, 0, 0, 0, 0, 0, 0,0x8B41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9DB6,0xA0EB,0x9BA3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BA1, + /* plane 2, page 119 */ + 15 | (204 << 8), /* first, last */ + 0x8FC8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x894C,0x9860, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x94C7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8B58, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x95AB,0x95AA, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CC3, + /* plane 2, page 120 */ + 88 | (200 << 8), /* first, last */ + 0x9CC4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x93D6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9DAC, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8BE6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8A71, + /* plane 2, page 121 */ + 36 | (253 << 8), /* first, last */ + 0x8FD1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x99D5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x90F4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8AA3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CCE, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9CD4, + /* plane 2, page 122 */ + 10 | (244 << 8), /* first, last */ + 0x9CD5, 0, 0, 0,0xFBC8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9DB3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFC70, 0, 0, 0, 0, 0,0x8FD7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9B73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFA5B, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FD2, + 0x9064, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x98B6, + /* plane 2, page 123 */ + 6 | (244 << 8), /* first, last */ + 0x9668, 0, 0, 0, + 0,0x9CD6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x98BD, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8FDC,0xFEF6,0x8FD9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9541, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x97F3, + /* plane 2, page 124 */ + 18 | (18 << 8), /* first, last */ + 0x9BF8, + /* plane 2, page 125 */ + 47 | (220 << 8), /* first, last */ + 0x9E6C, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8FF2,0x8FEE, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9CD7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9E6E, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8A40, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8FEF, 0, 0, 0, 0, 0, 0, + 0, 0,0x8FF4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FF5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x95C2, + /* plane 2, page 126 */ + 77 | (79 << 8), /* first, last */ + 0x986A, 0,0x97CF, + /* plane 2, page 127 */ + 249 | (249 << 8), /* first, last */ + 0x9E7C, + /* plane 2, page 128 */ + 2 | (244 << 8), /* first, last */ + 0x9041, 0, 0, 0, 0, 0, 0,0x9CDB, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9441, 0, 0, 0, 0,0x9CE6,0x9DB0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9CEA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CED, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CFA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8B62, + 0x8A4E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9CCA,0x8A66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CFB, + /* plane 2, page 129 */ + 46 | (188 << 8), /* first, last */ + 0x9CFC, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9CFE, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8A53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9CE5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9D40, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9D41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9045, + /* plane 2, page 130 */ + 7 | (226 << 8), /* first, last */ + 0x8B73, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x97CA, 0,0x9D42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x8A61, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8BAE, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8AD2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8BA2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9DF2, + /* plane 2, page 131 */ + 6 | (138 << 8), /* first, last */ + 0x9D43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CDF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9D44, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8ECA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x904E, 0, 0, 0, 0, 0, 0, 0,0x8EB3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9FF5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9D45, + /* plane 2, page 132 */ + 18 | (130 << 8), /* first, last */ + 0x904F, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9D47, 0, 0, 0,0x89CA, 0, + 0, 0, 0, 0, 0,0x9CB5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFBFE, + /* plane 2, page 133 */ + 1 | (244 << 8), /* first, last */ + 0x905E, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9063,0x9057, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9066, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9BC0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xFCE5, + /* plane 2, page 134 */ + 0 | (230 << 8), /* first, last */ + 0x9162, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9067, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8FA1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8FA2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9D48,0xFAD3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x905D, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x90B9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x906B, + /* plane 2, page 135 */ + 15 | (19 << 8), /* first, last */ + 0x8C5C, 0, 0, 0,0x9069, + /* plane 2, page 136 */ + 4 | (43 << 8), /* first, last */ + 0xFE57, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFE55, + /* plane 2, page 137 */ + 51 | (252 << 8), /* first, last */ + 0x9073, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9BEF,0x9CF0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9D4B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFED9, 0, 0, 0,0xFEDA, 0, 0, 0,0x91E0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x91D8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9646, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9360, 0, + 0xFA53,0x9CD3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9D4E, 0, 0, 0,0xFB40, 0, + 0, 0,0x8DE2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9442, 0,0x9056, 0, 0,0x9865, 0,0x8C6C,0xFA4A, 0, + 0,0x9D50,0x9D52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x95AF, + 0x975A,0x9349,0x9747, + /* plane 2, page 138 */ + 15 | (252 << 8), /* first, last */ + 0xA0F4, 0, 0, 0, 0, + 0, 0,0x9778, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8FCF, 0, 0, + 0,0xFC60, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8C4E, 0, 0, 0,0xFC56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x91DC,0x9661, + 0x92EC,0x935D,0x8EDE,0x96FE,0xFD4F,0x95DE, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x98B0, + 0xA040, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x97BD, + 0x977D,0x97F5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9BAC,0xFADA,0x92C2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x97B1, 0, 0, 0, 0, 0,0x907B, 0, + 0, 0, 0,0x93FE,0x947B, 0,0x9777, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFABE,0xFD43,0x90C6,0x90A4,0x90A8,0x94A9, 0,0x90A9, + 0, 0, 0, 0,0x8C65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x95E0, + /* plane 2, page 139 */ + 12 | (255 << 8), /* first, last */ + 0x907D, 0, 0, 0, 0, 0, 0,0x9265, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFDBA,0x93C4, 0, 0, 0, 0, 0, + 0, 0, 0,0xFEED,0x9DAB,0xA0E3, 0,0x9648, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9D53, 0, 0, 0, 0, 0,0x8AA9, 0,0x9BC5, 0, + 0x965D, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x975F, + 0x965F,0x966E,0xFB5D, 0, 0, 0, 0, 0,0x9DB1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFEA3, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9DB2, 0, 0,0x95AE,0xFCA3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xA0A2, 0, 0,0x9655, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9D54, 0, 0,0x9341, 0,0x95AD,0x91D5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x977A,0xFDFC,0x8E47,0x93FD,0x90A5,0x90AC, 0, 0, 0, + 0, 0, 0, 0, 0,0x95AC, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x90AE, + /* plane 2, page 140 */ + 3 | (210 << 8), /* first, last */ + 0xFEA5, 0, 0, 0, 0, 0,0x9D56, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x97E3,0x95E2, + 0, 0, 0, 0, 0,0x9466, 0, 0,0x9647, 0, + 0, 0, 0,0x91B8, 0, 0, 0, 0,0x9CEC, 0, + 0, 0, 0, 0, 0, 0, 0,0x90AD, 0,0x95E3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8B4F, 0, 0,0x8AE3, 0, 0, 0, 0, + 0x8B4D, + /* plane 2, page 141 */ + 52 | (185 << 8), /* first, last */ + 0x95EA, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x8B4E, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8CC1, + /* plane 2, page 142 */ + 15 | (231 << 8), /* first, last */ + 0x8BED, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x91D9, 0, 0,0xA0A4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x95F5,0x95F4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9FB3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFEAF, 0, 0, 0, 0, 0,0xFE72,0x927A, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xFEAC, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x95F3, + /* plane 2, page 143 */ + 197 | (197 << 8), /* first, last */ + 0x9D58, + /* plane 2, page 144 */ + 136 | (237 << 8), /* first, last */ + 0x9372, 0, 0,0x91C5, + 0, 0, 0, 0, 0, 0, 0,0x9642, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x90CD,0x95FE,0x9159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9C65, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x97CC,0x90CE, + 0, 0, 0, 0, 0, 0,0x9D59,0xFCF5, + /* plane 2, page 145 */ + 13 | (235 << 8), /* first, last */ + 0xFEFD, 0, 0,0x9D5B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9D5C, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x937E, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x98AC, 0, 0,0x9D5E, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xFDD0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFD60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9CCF, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x90DD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x90E0, + /* plane 2, page 146: --- */ + /* plane 2, page 147: --- */ + /* plane 2, page 148 */ + 29 | (231 << 8), /* first, last */ + 0x90F3, + 0, 0,0x98B1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x90F0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x93BD, 0, 0, 0, 0, 0, 0, + 0, 0,0x95B7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9F46, 0, + 0, 0, 0, 0, 0, 0, 0,0x8E4B,0x9658, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x8A4C, + 0,0x9D63, + /* plane 2, page 149 */ + 158 | (244 << 8), /* first, last */ + 0x9ECF, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9D65, 0, 0, 0, + 0, 0, 0, 0,0x9D66, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x965A, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9D64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x8A6C, + /* plane 2, page 150: --- */ + /* plane 2, page 151 */ + 32 | (212 << 8), /* first, last */ + 0x8AD9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9D67, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8A70, + /* plane 2, page 152 */ + 16 | (241 << 8), /* first, last */ + 0x8BF3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9150, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9CC1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9D68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x93A7, 0, 0, 0, 0, 0, + 0,0x9674, + /* plane 2, page 153 */ + 3 | (201 << 8), /* first, last */ + 0xA0EF, 0,0x9151, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x96C1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8C64,0x9676,0x9D69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xFCA4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9D6A, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x924E, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9D6B, 0, 0, 0, 0, + 0,0x9BC1, + /* plane 2, page 154 */ + 40 | (77 << 8), /* first, last */ + 0x9D6C, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x8A65, + /* plane 2, page 155 */ + 5 | (213 << 8), /* first, last */ + 0x915D, 0, 0, 0, 0, + 0, 0, 0, 0,0x9D6D, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x915A, + /* plane 2, page 156 */ + 115 | (173 << 8), /* first, last */ + 0x8C42, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9CC0, + /* plane 2, page 157 */ + 62 | (246 << 8), /* first, last */ + 0x916A, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x9D6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9EA6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9DCD, 0, 0,0x9D6F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x89BB, + /* plane 2, page 158 */ + 6 | (248 << 8), /* first, last */ + 0x9EF9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x96B4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9EC8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8B55, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9D71, + /* plane 2, page 159 */ + 35 | (222 << 8), /* first, last */ + 0x9D72, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x9ECC, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x9ED0, + /* plane 2, page 160 */ + 20 | (254 << 8), /* first, last */ + 0x905C, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x8ED2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x91A8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9177, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x96BF, 0, 0, + 0, 0, 0,0x96C0, 0, 0, 0, 0,0x8FB1, 0, + 0, 0, 0, 0,0x96B7, + /* plane 2, page 161 */ + 7 | (245 << 8), /* first, last */ + 0x8C55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x89BE,0x917C, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xFB77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0x9175,0x91A3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x9176, 0, 0, 0, 0, 0, 0, 0, 0, + 0x96BE, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x96B6, + /* plane 2, page 162 */ + 32 | (255 << 8), /* first, last */ + 0x91A4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x91A6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0x9D75, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9052, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xA045, 0, + 0x91A9, 0,0x98AA, 0, 0, 0,0x8C5F, 0, 0,0x8BAA, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0x9CDD, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9D77, + /* plane 2, page 163 */ + 169 | (169 << 8), /* first, last */ + 0x8940, + /* plane 2, page 164 */ + 52 | (91 << 8), /* first, last */ + 0x9EEC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x93AA, + /* plane 2, page 165 */ + 198 | (203 << 8), /* first, last */ + 0x9478, 0, + 0, 0, 0,0x9D7A, + /* plane 2, page 166 */ + 1 | (169 << 8), /* first, last */ + 0x8AC9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8B4B, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0x9FEC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0x8AE2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9E75, + /* plane 2, page 167: --- */ + /* plane 2, page 168: --- */ + /* plane 2, page 169: --- */ + /* plane 2, page 170: --- */ + /* plane 2, page 171: --- */ + /* plane 2, page 172: --- */ + /* plane 2, page 173: --- */ + /* plane 2, page 174: --- */ + /* plane 2, page 175: --- */ + /* plane 2, page 176: --- */ + /* plane 2, page 177: --- */ + /* plane 2, page 178: --- */ + /* plane 2, page 179: --- */ + /* plane 2, page 180: --- */ + /* plane 2, page 181: --- */ + /* plane 2, page 182: --- */ + /* plane 2, page 183: --- */ + /* plane 2, page 184: --- */ + /* plane 2, page 185: --- */ + /* plane 2, page 186: --- */ + /* plane 2, page 187: --- */ + /* plane 2, page 188: --- */ + /* plane 2, page 189: --- */ + /* plane 2, page 190: --- */ + /* plane 2, page 191: --- */ + /* plane 2, page 192: --- */ + /* plane 2, page 193: --- */ + /* plane 2, page 194: --- */ + /* plane 2, page 195: --- */ + /* plane 2, page 196: --- */ + /* plane 2, page 197: --- */ + /* plane 2, page 198: --- */ + /* plane 2, page 199: --- */ + /* plane 2, page 200: --- */ + /* plane 2, page 201: --- */ + /* plane 2, page 202: --- */ + /* plane 2, page 203: --- */ + /* plane 2, page 204: --- */ + /* plane 2, page 205: --- */ + /* plane 2, page 206: --- */ + /* plane 2, page 207: --- */ + /* plane 2, page 208: --- */ + /* plane 2, page 209: --- */ + /* plane 2, page 210: --- */ + /* plane 2, page 211: --- */ + /* plane 2, page 212: --- */ + /* plane 2, page 213: --- */ + /* plane 2, page 214: --- */ + /* plane 2, page 215: --- */ + /* plane 2, page 216: --- */ + /* plane 2, page 217: --- */ + /* plane 2, page 218: --- */ + /* plane 2, page 219: --- */ + /* plane 2, page 220: --- */ + /* plane 2, page 221: --- */ + /* plane 2, page 222: --- */ + /* plane 2, page 223: --- */ + /* plane 2, page 224: --- */ + /* plane 2, page 225: --- */ + /* plane 2, page 226: --- */ + /* plane 2, page 227: --- */ + /* plane 2, page 228: --- */ + /* plane 2, page 229: --- */ + /* plane 2, page 230: --- */ + /* plane 2, page 231: --- */ + /* plane 2, page 232: --- */ + /* plane 2, page 233: --- */ + /* plane 2, page 234: --- */ + /* plane 2, page 235: --- */ + /* plane 2, page 236: --- */ + /* plane 2, page 237: --- */ + /* plane 2, page 238: --- */ + /* plane 2, page 239: --- */ + /* plane 2, page 240: --- */ + /* plane 2, page 241: --- */ + /* plane 2, page 242: --- */ + /* plane 2, page 243: --- */ + /* plane 2, page 244: --- */ + /* plane 2, page 245: --- */ + /* plane 2, page 246: --- */ + /* plane 2, page 247: --- */ + /* plane 2, page 248 */ + 37 | (205 << 8), /* first, last */ + 0x9874, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0x9AC8, + 0, 0, 0, 0,0xA047, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x8BC3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xFC48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xFC77, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0x9C52, + /* plane 2, page 249 */ + 148 | (212 << 8), /* first, last */ + 0x8EFD, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x8FA8, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0x957A, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0x8FF0, + /* plane 2, page 250: --- */ + /* plane 2, page 251: --- */ + /* plane 2, page 252: --- */ + /* plane 2, page 253: --- */ + /* plane 2, page 254: --- */ + /* plane 2, page 255: --- */ + /* plane 3: --- */ + /* plane 4: --- */ + /* plane 5: --- */ + /* plane 6: --- */ + /* plane 7: --- */ + /* plane 8: --- */ + /* plane 9: --- */ + /* plane 10: --- */ + /* plane 11: --- */ + /* plane 12: --- */ + /* plane 13: --- */ + /* plane 14: --- */ + /* plane 15: --- */ + /* plane 16: --- */ +}; + +sal_Int32 const aImplUnicodeToBig5Hkscs2001PageOffsets[] = { + 0, /* plane 0, page 0; 44/172 bytes (25.6%) */ + 86, /* plane 0, page 1; 46/444 bytes (10.4%) */ + 308, /* plane 0, page 2; 22/240 bytes (9.2%) */ + -1, /* plane 0, page 3 */ + 428, /* plane 0, page 4; 134/164 bytes (81.7%) */ + -1, /* plane 0, page 5 */ + -1, /* plane 0, page 6 */ + -1, /* plane 0, page 7 */ + -1, /* plane 0, page 8 */ + -1, /* plane 0, page 9 */ + -1, /* plane 0, page 10 */ + -1, /* plane 0, page 11 */ + -1, /* plane 0, page 12 */ + -1, /* plane 0, page 13 */ + -1, /* plane 0, page 14 */ + -1, /* plane 0, page 15 */ + -1, /* plane 0, page 16 */ + -1, /* plane 0, page 17 */ + -1, /* plane 0, page 18 */ + -1, /* plane 0, page 19 */ + -1, /* plane 0, page 20 */ + -1, /* plane 0, page 21 */ + -1, /* plane 0, page 22 */ + -1, /* plane 0, page 23 */ + -1, /* plane 0, page 24 */ + -1, /* plane 0, page 25 */ + -1, /* plane 0, page 26 */ + -1, /* plane 0, page 27 */ + -1, /* plane 0, page 28 */ + -1, /* plane 0, page 29 */ + 510, /* plane 0, page 30; 10/10 bytes (100.0%) */ + -1, /* plane 0, page 31 */ + -1, /* plane 0, page 32 */ + 515, /* plane 0, page 33; 32/422 bytes (7.6%) */ + -1, /* plane 0, page 34 */ + -1, /* plane 0, page 35 */ + 726, /* plane 0, page 36; 42/62 bytes (67.7%) */ + 757, /* plane 0, page 37; 68/68 bytes (100.0%) */ + -1, /* plane 0, page 38 */ + 791, /* plane 0, page 39; 4/4 bytes (100.0%) */ + -1, /* plane 0, page 40 */ + -1, /* plane 0, page 41 */ + -1, /* plane 0, page 42 */ + -1, /* plane 0, page 43 */ + -1, /* plane 0, page 44 */ + -1, /* plane 0, page 45 */ + 793, /* plane 0, page 46; 58/202 bytes (28.7%) */ + 894, /* plane 0, page 47; 4/4 bytes (100.0%) */ + 896, /* plane 0, page 48; 360/502 bytes (71.7%) */ + -1, /* plane 0, page 49 */ + 1147, /* plane 0, page 50; 4/4 bytes (100.0%) */ + -1, /* plane 0, page 51 */ + 1149, /* plane 0, page 52; 38/400 bytes (9.5%) */ + 1349, /* plane 0, page 53; 66/500 bytes (13.2%) */ + 1599, /* plane 0, page 54; 80/476 bytes (16.8%) */ + 1837, /* plane 0, page 55; 54/504 bytes (10.7%) */ + 2089, /* plane 0, page 56; 26/474 bytes (5.5%) */ + 2326, /* plane 0, page 57; 48/496 bytes (9.7%) */ + 2574, /* plane 0, page 58; 48/504 bytes (9.5%) */ + 2826, /* plane 0, page 59; 54/464 bytes (11.6%) */ + 3058, /* plane 0, page 60; 28/456 bytes (6.1%) */ + 3286, /* plane 0, page 61; 76/472 bytes (16.1%) */ + 3522, /* plane 0, page 62; 72/502 bytes (14.3%) */ + 3773, /* plane 0, page 63; 36/504 bytes (7.1%) */ + 4025, /* plane 0, page 64; 40/496 bytes (8.1%) */ + 4273, /* plane 0, page 65; 36/496 bytes (7.3%) */ + 4521, /* plane 0, page 66; 34/474 bytes (7.2%) */ + 4758, /* plane 0, page 67; 20/402 bytes (5.0%) */ + 4959, /* plane 0, page 68; 48/490 bytes (9.8%) */ + 5204, /* plane 0, page 69; 46/464 bytes (9.9%) */ + 5436, /* plane 0, page 70; 22/482 bytes (4.6%) */ + 5677, /* plane 0, page 71; 22/454 bytes (4.8%) */ + 5904, /* plane 0, page 72; 28/504 bytes (5.6%) */ + 6156, /* plane 0, page 73; 44/454 bytes (9.7%) */ + 6383, /* plane 0, page 74; 22/484 bytes (4.5%) */ + 6625, /* plane 0, page 75; 40/356 bytes (11.2%) */ + 6803, /* plane 0, page 76; 34/470 bytes (7.2%) */ + 7038, /* plane 0, page 77; 12/298 bytes (4.0%) */ + 7187, /* plane 0, page 78; 74/492 bytes (15.0%) */ + 7433, /* plane 0, page 79; 54/504 bytes (10.7%) */ + 7685, /* plane 0, page 80; 44/502 bytes (8.8%) */ + 7936, /* plane 0, page 81; 80/510 bytes (15.7%) */ + 8191, /* plane 0, page 82; 64/498 bytes (12.9%) */ + 8440, /* plane 0, page 83; 90/510 bytes (17.6%) */ + 8695, /* plane 0, page 84; 68/444 bytes (15.3%) */ + 8917, /* plane 0, page 85; 78/502 bytes (15.5%) */ + 9168, /* plane 0, page 86; 80/500 bytes (16.0%) */ + 9418, /* plane 0, page 87; 74/512 bytes (14.5%) */ + 9674, /* plane 0, page 88; 64/500 bytes (12.8%) */ + 9924, /* plane 0, page 89; 56/498 bytes (11.2%) */ + 10173, /* plane 0, page 90; 86/508 bytes (16.9%) */ + 10427, /* plane 0, page 91; 60/488 bytes (12.3%) */ + 10671, /* plane 0, page 92; 50/484 bytes (10.3%) */ + 10913, /* plane 0, page 93; 52/462 bytes (11.3%) */ + 11144, /* plane 0, page 94; 44/490 bytes (9.0%) */ + 11389, /* plane 0, page 95; 46/426 bytes (10.8%) */ + 11602, /* plane 0, page 96; 40/440 bytes (9.1%) */ + 11822, /* plane 0, page 97; 58/442 bytes (13.1%) */ + 12043, /* plane 0, page 98; 34/374 bytes (9.1%) */ + 12230, /* plane 0, page 99; 42/464 bytes (9.1%) */ + 12462, /* plane 0, page 100; 42/458 bytes (9.2%) */ + 12691, /* plane 0, page 101; 48/494 bytes (9.7%) */ + 12938, /* plane 0, page 102; 54/438 bytes (12.3%) */ + 13157, /* plane 0, page 103; 48/508 bytes (9.4%) */ + 13411, /* plane 0, page 104; 60/408 bytes (14.7%) */ + 13615, /* plane 0, page 105; 72/504 bytes (14.3%) */ + 13867, /* plane 0, page 106; 76/490 bytes (15.5%) */ + 14112, /* plane 0, page 107; 30/494 bytes (6.1%) */ + 14359, /* plane 0, page 108; 50/458 bytes (10.9%) */ + 14588, /* plane 0, page 109; 40/508 bytes (7.9%) */ + 14842, /* plane 0, page 110; 56/500 bytes (11.2%) */ + 15092, /* plane 0, page 111; 52/492 bytes (10.6%) */ + 15338, /* plane 0, page 112; 80/506 bytes (15.8%) */ + 15591, /* plane 0, page 113; 84/486 bytes (17.3%) */ + 15834, /* plane 0, page 114; 52/456 bytes (11.4%) */ + 16062, /* plane 0, page 115; 76/502 bytes (15.1%) */ + 16313, /* plane 0, page 116; 96/496 bytes (19.4%) */ + 16561, /* plane 0, page 117; 62/434 bytes (14.3%) */ + 16778, /* plane 0, page 118; 50/434 bytes (11.5%) */ + 16995, /* plane 0, page 119; 56/488 bytes (11.5%) */ + 17239, /* plane 0, page 120; 70/478 bytes (14.6%) */ + 17478, /* plane 0, page 121; 62/480 bytes (12.9%) */ + 17718, /* plane 0, page 122; 64/500 bytes (12.8%) */ + 17968, /* plane 0, page 123; 48/486 bytes (9.9%) */ + 18211, /* plane 0, page 124; 76/472 bytes (16.1%) */ + 18447, /* plane 0, page 125; 46/438 bytes (10.5%) */ + 18666, /* plane 0, page 126; 36/436 bytes (8.3%) */ + 18884, /* plane 0, page 127; 42/492 bytes (8.5%) */ + 19130, /* plane 0, page 128; 56/492 bytes (11.4%) */ + 19376, /* plane 0, page 129; 62/490 bytes (12.7%) */ + 19621, /* plane 0, page 130; 60/466 bytes (12.9%) */ + 19854, /* plane 0, page 131; 40/456 bytes (8.8%) */ + 20082, /* plane 0, page 132; 78/490 bytes (15.9%) */ + 20327, /* plane 0, page 133; 44/502 bytes (8.8%) */ + 20578, /* plane 0, page 134; 38/478 bytes (7.9%) */ + 20817, /* plane 0, page 135; 32/270 bytes (11.9%) */ + 20952, /* plane 0, page 136; 62/506 bytes (12.3%) */ + 21205, /* plane 0, page 137; 44/466 bytes (9.4%) */ + 21438, /* plane 0, page 138; 34/416 bytes (8.2%) */ + 21646, /* plane 0, page 139; 36/432 bytes (8.3%) */ + 21862, /* plane 0, page 140; 26/336 bytes (7.7%) */ + 22030, /* plane 0, page 141; 32/422 bytes (7.6%) */ + 22241, /* plane 0, page 142; 56/486 bytes (11.5%) */ + 22484, /* plane 0, page 143; 62/452 bytes (13.7%) */ + 22710, /* plane 0, page 144; 28/380 bytes (7.4%) */ + 22900, /* plane 0, page 145; 42/350 bytes (12.0%) */ + 23075, /* plane 0, page 146; 82/494 bytes (16.6%) */ + 23322, /* plane 0, page 147; 92/486 bytes (18.9%) */ + 23565, /* plane 0, page 148; 62/494 bytes (12.6%) */ + 23812, /* plane 0, page 149; 32/402 bytes (8.0%) */ + 24013, /* plane 0, page 150; 34/434 bytes (7.8%) */ + 24230, /* plane 0, page 151; 70/488 bytes (14.3%) */ + 24474, /* plane 0, page 152; 60/454 bytes (13.2%) */ + 24701, /* plane 0, page 153; 54/466 bytes (11.6%) */ + 24934, /* plane 0, page 154; 46/490 bytes (9.4%) */ + 25179, /* plane 0, page 155; 60/510 bytes (11.8%) */ + 25434, /* plane 0, page 156; 40/248 bytes (16.1%) */ + 25558, /* plane 0, page 157; 52/504 bytes (10.3%) */ + 25810, /* plane 0, page 158; 68/492 bytes (13.8%) */ + 26056, /* plane 0, page 159; 38/330 bytes (11.5%) */ + -1, /* plane 0, page 160 */ + -1, /* plane 0, page 161 */ + -1, /* plane 0, page 162 */ + -1, /* plane 0, page 163 */ + -1, /* plane 0, page 164 */ + -1, /* plane 0, page 165 */ + -1, /* plane 0, page 166 */ + -1, /* plane 0, page 167 */ + -1, /* plane 0, page 168 */ + -1, /* plane 0, page 169 */ + -1, /* plane 0, page 170 */ + -1, /* plane 0, page 171 */ + -1, /* plane 0, page 172 */ + -1, /* plane 0, page 173 */ + -1, /* plane 0, page 174 */ + -1, /* plane 0, page 175 */ + -1, /* plane 0, page 176 */ + -1, /* plane 0, page 177 */ + -1, /* plane 0, page 178 */ + -1, /* plane 0, page 179 */ + -1, /* plane 0, page 180 */ + -1, /* plane 0, page 181 */ + -1, /* plane 0, page 182 */ + -1, /* plane 0, page 183 */ + -1, /* plane 0, page 184 */ + -1, /* plane 0, page 185 */ + -1, /* plane 0, page 186 */ + -1, /* plane 0, page 187 */ + -1, /* plane 0, page 188 */ + -1, /* plane 0, page 189 */ + -1, /* plane 0, page 190 */ + -1, /* plane 0, page 191 */ + -1, /* plane 0, page 192 */ + -1, /* plane 0, page 193 */ + -1, /* plane 0, page 194 */ + -1, /* plane 0, page 195 */ + -1, /* plane 0, page 196 */ + -1, /* plane 0, page 197 */ + -1, /* plane 0, page 198 */ + -1, /* plane 0, page 199 */ + -1, /* plane 0, page 200 */ + -1, /* plane 0, page 201 */ + -1, /* plane 0, page 202 */ + -1, /* plane 0, page 203 */ + -1, /* plane 0, page 204 */ + -1, /* plane 0, page 205 */ + -1, /* plane 0, page 206 */ + -1, /* plane 0, page 207 */ + -1, /* plane 0, page 208 */ + -1, /* plane 0, page 209 */ + -1, /* plane 0, page 210 */ + -1, /* plane 0, page 211 */ + -1, /* plane 0, page 212 */ + -1, /* plane 0, page 213 */ + -1, /* plane 0, page 214 */ + -1, /* plane 0, page 215 */ + -1, /* plane 0, page 216 */ + -1, /* plane 0, page 217 */ + -1, /* plane 0, page 218 */ + -1, /* plane 0, page 219 */ + -1, /* plane 0, page 220 */ + -1, /* plane 0, page 221 */ + -1, /* plane 0, page 222 */ + -1, /* plane 0, page 223 */ + 26221, /* plane 0, page 224; 234/510 bytes (45.9%) */ + 26476, /* plane 0, page 225; 246/506 bytes (48.6%) */ + 26729, /* plane 0, page 226; 232/514 bytes (45.1%) */ + 26986, /* plane 0, page 227; 244/514 bytes (47.5%) */ + 27243, /* plane 0, page 228; 238/502 bytes (47.4%) */ + 27494, /* plane 0, page 229; 284/512 bytes (55.5%) */ + 27750, /* plane 0, page 230; 304/514 bytes (59.1%) */ + 28007, /* plane 0, page 231; 272/514 bytes (52.9%) */ + 28264, /* plane 0, page 232; 294/512 bytes (57.4%) */ + 28520, /* plane 0, page 233; 244/512 bytes (47.7%) */ + 28776, /* plane 0, page 234; 160/508 bytes (31.5%) */ + 29030, /* plane 0, page 235; 366/514 bytes (71.2%) */ + 29287, /* plane 0, page 236; 288/508 bytes (56.7%) */ + 29541, /* plane 0, page 237; 196/486 bytes (40.3%) */ + 29784, /* plane 0, page 238; 106/354 bytes (29.9%) */ + -1, /* plane 0, page 239 */ + -1, /* plane 0, page 240 */ + -1, /* plane 0, page 241 */ + -1, /* plane 0, page 242 */ + 29961, /* plane 0, page 243; 78/504 bytes (15.5%) */ + 30213, /* plane 0, page 244; 330/508 bytes (65.0%) */ + 30467, /* plane 0, page 245; 222/482 bytes (46.1%) */ + 30708, /* plane 0, page 246; 94/374 bytes (25.1%) */ + 30895, /* plane 0, page 247; 16/22 bytes (72.7%) */ + 30906, /* plane 0, page 248; 58/58 bytes (100.0%) */ + 30935, /* plane 0, page 249; 4/4 bytes (100.0%) */ + -1, /* plane 0, page 250 */ + -1, /* plane 0, page 251 */ + -1, /* plane 0, page 252 */ + -1, /* plane 0, page 253 */ + -1, /* plane 0, page 254 */ + 30937, /* plane 0, page 255; 16/474 bytes (3.4%) */ + /* plane 1: --- */ + 31174, /* plane 2, page 0; 32/414 bytes (7.7%) */ + 31381, /* plane 2, page 1; 18/464 bytes (3.9%) */ + 31613, /* plane 2, page 2; 28/454 bytes (6.2%) */ + 31840, /* plane 2, page 3; 34/488 bytes (7.0%) */ + 32084, /* plane 2, page 4; 26/474 bytes (5.5%) */ + 32321, /* plane 2, page 5; 24/332 bytes (7.2%) */ + 32487, /* plane 2, page 6; 16/206 bytes (7.8%) */ + 32590, /* plane 2, page 7; 8/218 bytes (3.7%) */ + 32699, /* plane 2, page 8; 8/342 bytes (2.3%) */ + 32870, /* plane 2, page 9; 12/422 bytes (2.8%) */ + 33081, /* plane 2, page 10; 12/380 bytes (3.2%) */ + 33271, /* plane 2, page 11; 24/488 bytes (4.9%) */ + 33515, /* plane 2, page 12; 56/492 bytes (11.4%) */ + 33761, /* plane 2, page 13; 46/362 bytes (12.7%) */ + 33942, /* plane 2, page 14; 74/498 bytes (14.9%) */ + 34191, /* plane 2, page 15; 44/420 bytes (10.5%) */ + 34401, /* plane 2, page 16; 56/456 bytes (12.3%) */ + 34629, /* plane 2, page 17; 20/344 bytes (5.8%) */ + 34801, /* plane 2, page 18; 18/392 bytes (4.6%) */ + 34997, /* plane 2, page 19; 32/508 bytes (6.3%) */ + 35251, /* plane 2, page 20; 26/472 bytes (5.5%) */ + 35487, /* plane 2, page 21; 8/66 bytes (12.1%) */ + 35520, /* plane 2, page 22; 44/492 bytes (8.9%) */ + 35766, /* plane 2, page 23; 76/482 bytes (15.8%) */ + 36007, /* plane 2, page 24; 70/440 bytes (15.9%) */ + 36227, /* plane 2, page 25; 44/484 bytes (9.1%) */ + 36469, /* plane 2, page 26; 10/64 bytes (15.6%) */ + 36501, /* plane 2, page 27; 8/256 bytes (3.1%) */ + 36629, /* plane 2, page 28; 12/264 bytes (4.5%) */ + 36761, /* plane 2, page 29; 18/362 bytes (5.0%) */ + 36942, /* plane 2, page 30; 18/374 bytes (4.8%) */ + 37129, /* plane 2, page 31; 14/438 bytes (3.2%) */ + 37348, /* plane 2, page 32; 14/370 bytes (3.8%) */ + 37533, /* plane 2, page 33; 14/310 bytes (4.5%) */ + 37688, /* plane 2, page 34; 6/236 bytes (2.5%) */ + 37806, /* plane 2, page 35; 14/438 bytes (3.2%) */ + 38025, /* plane 2, page 36; 14/276 bytes (5.1%) */ + 38163, /* plane 2, page 37; 16/346 bytes (4.6%) */ + 38336, /* plane 2, page 38; 22/442 bytes (5.0%) */ + 38557, /* plane 2, page 39; 22/378 bytes (5.8%) */ + 38746, /* plane 2, page 40; 16/492 bytes (3.3%) */ + 38992, /* plane 2, page 41; 16/222 bytes (7.2%) */ + 39103, /* plane 2, page 42; 12/264 bytes (4.5%) */ + 39235, /* plane 2, page 43; 16/388 bytes (4.1%) */ + 39429, /* plane 2, page 44; 34/330 bytes (10.3%) */ + 39594, /* plane 2, page 45; 28/466 bytes (6.0%) */ + 39827, /* plane 2, page 46; 16/456 bytes (3.5%) */ + 40055, /* plane 2, page 47; 8/226 bytes (3.5%) */ + 40168, /* plane 2, page 48; 22/338 bytes (6.5%) */ + 40337, /* plane 2, page 49; 26/496 bytes (5.2%) */ + 40585, /* plane 2, page 50; 36/424 bytes (8.5%) */ + 40797, /* plane 2, page 51; 26/512 bytes (5.1%) */ + 41053, /* plane 2, page 52; 14/462 bytes (3.0%) */ + 41284, /* plane 2, page 53; 24/440 bytes (5.5%) */ + 41504, /* plane 2, page 54; 26/480 bytes (5.4%) */ + 41744, /* plane 2, page 55; 30/428 bytes (7.0%) */ + 41958, /* plane 2, page 56; 4/4 bytes (100.0%) */ + 41960, /* plane 2, page 57; 4/4 bytes (100.0%) */ + 41962, /* plane 2, page 58; 10/170 bytes (5.9%) */ + 42047, /* plane 2, page 59; 4/4 bytes (100.0%) */ + 42049, /* plane 2, page 60; 28/316 bytes (8.9%) */ + 42207, /* plane 2, page 61; 30/372 bytes (8.1%) */ + 42393, /* plane 2, page 62; 44/474 bytes (9.3%) */ + 42630, /* plane 2, page 63; 38/378 bytes (10.1%) */ + 42819, /* plane 2, page 64; 30/420 bytes (7.1%) */ + 43029, /* plane 2, page 65; 46/500 bytes (9.2%) */ + 43279, /* plane 2, page 66; 34/450 bytes (7.6%) */ + 43504, /* plane 2, page 67; 36/474 bytes (7.6%) */ + 43741, /* plane 2, page 68; 28/424 bytes (6.6%) */ + 43953, /* plane 2, page 69; 10/394 bytes (2.5%) */ + 44150, /* plane 2, page 70; 14/380 bytes (3.7%) */ + 44340, /* plane 2, page 71; 12/440 bytes (2.7%) */ + 44560, /* plane 2, page 72; 22/478 bytes (4.6%) */ + 44799, /* plane 2, page 73; 116/506 bytes (22.9%) */ + 45052, /* plane 2, page 74; 108/442 bytes (24.4%) */ + 45273, /* plane 2, page 75; 6/274 bytes (2.2%) */ + 45410, /* plane 2, page 76; 12/420 bytes (2.9%) */ + 45620, /* plane 2, page 77; 12/462 bytes (2.6%) */ + 45851, /* plane 2, page 78; 10/220 bytes (4.5%) */ + 45961, /* plane 2, page 79; 20/364 bytes (5.5%) */ + 46143, /* plane 2, page 80; 8/230 bytes (3.5%) */ + 46258, /* plane 2, page 81; 18/380 bytes (4.7%) */ + 46448, /* plane 2, page 82; 14/372 bytes (3.8%) */ + 46634, /* plane 2, page 83; 8/14 bytes (57.1%) */ + 46641, /* plane 2, page 84; 16/174 bytes (9.2%) */ + 46728, /* plane 2, page 85; 36/354 bytes (10.2%) */ + 46905, /* plane 2, page 86; 16/486 bytes (3.3%) */ + 47148, /* plane 2, page 87; 20/442 bytes (4.5%) */ + 47369, /* plane 2, page 88; 12/280 bytes (4.3%) */ + 47509, /* plane 2, page 89; 12/406 bytes (3.0%) */ + 47712, /* plane 2, page 90; 12/172 bytes (7.0%) */ + 47798, /* plane 2, page 91; 16/236 bytes (6.8%) */ + 47916, /* plane 2, page 92; 22/510 bytes (4.3%) */ + 48171, /* plane 2, page 93; 8/74 bytes (10.8%) */ + 48208, /* plane 2, page 94; 20/408 bytes (4.9%) */ + 48412, /* plane 2, page 95; 10/404 bytes (2.5%) */ + 48614, /* plane 2, page 96; 16/252 bytes (6.3%) */ + 48740, /* plane 2, page 97; 22/442 bytes (5.0%) */ + 48961, /* plane 2, page 98; 12/244 bytes (4.9%) */ + 49083, /* plane 2, page 99; 16/394 bytes (4.1%) */ + 49280, /* plane 2, page 100; 24/304 bytes (7.9%) */ + 49432, /* plane 2, page 101; 12/350 bytes (3.4%) */ + 49607, /* plane 2, page 102; 18/472 bytes (3.8%) */ + 49843, /* plane 2, page 103; 14/368 bytes (3.8%) */ + 50027, /* plane 2, page 104; 18/346 bytes (5.2%) */ + 50200, /* plane 2, page 105; 20/476 bytes (4.2%) */ + 50438, /* plane 2, page 106; 14/78 bytes (17.9%) */ + 50477, /* plane 2, page 107; 38/488 bytes (7.8%) */ + 50721, /* plane 2, page 108; 30/356 bytes (8.4%) */ + 50899, /* plane 2, page 109; 50/416 bytes (12.0%) */ + 51107, /* plane 2, page 110; 44/434 bytes (10.1%) */ + 51324, /* plane 2, page 111; 18/374 bytes (4.8%) */ + 51511, /* plane 2, page 112; 22/472 bytes (4.7%) */ + 51747, /* plane 2, page 113; 20/396 bytes (5.1%) */ + 51945, /* plane 2, page 114; 16/410 bytes (3.9%) */ + 52150, /* plane 2, page 115; 4/4 bytes (100.0%) */ + 52152, /* plane 2, page 116; 10/204 bytes (4.9%) */ + 52254, /* plane 2, page 117; 14/280 bytes (5.0%) */ + 52394, /* plane 2, page 118; 18/286 bytes (6.3%) */ + 52537, /* plane 2, page 119; 18/382 bytes (4.7%) */ + 52728, /* plane 2, page 120; 12/228 bytes (5.3%) */ + 52842, /* plane 2, page 121; 14/438 bytes (3.2%) */ + 53061, /* plane 2, page 122; 22/472 bytes (4.7%) */ + 53297, /* plane 2, page 123; 18/480 bytes (3.8%) */ + 53537, /* plane 2, page 124; 4/4 bytes (100.0%) */ + 53539, /* plane 2, page 125; 22/350 bytes (6.3%) */ + 53714, /* plane 2, page 126; 6/8 bytes (75.0%) */ + 53718, /* plane 2, page 127; 4/4 bytes (100.0%) */ + 53720, /* plane 2, page 128; 28/488 bytes (5.7%) */ + 53964, /* plane 2, page 129; 16/288 bytes (5.6%) */ + 54108, /* plane 2, page 130; 18/442 bytes (4.1%) */ + 54329, /* plane 2, page 131; 18/268 bytes (6.7%) */ + 54463, /* plane 2, page 132; 12/228 bytes (5.3%) */ + 54577, /* plane 2, page 133; 14/490 bytes (2.9%) */ + 54822, /* plane 2, page 134; 20/464 bytes (4.3%) */ + 55054, /* plane 2, page 135; 6/12 bytes (50.0%) */ + 55060, /* plane 2, page 136; 6/82 bytes (7.3%) */ + 55101, /* plane 2, page 137; 54/406 bytes (13.3%) */ + 55304, /* plane 2, page 138; 74/478 bytes (15.5%) */ + 55543, /* plane 2, page 139; 72/490 bytes (14.7%) */ + 55788, /* plane 2, page 140; 28/418 bytes (6.7%) */ + 55997, /* plane 2, page 141; 8/270 bytes (3.0%) */ + 56132, /* plane 2, page 142; 24/436 bytes (5.5%) */ + 56350, /* plane 2, page 143; 4/4 bytes (100.0%) */ + 56352, /* plane 2, page 144; 24/206 bytes (11.7%) */ + 56455, /* plane 2, page 145; 24/448 bytes (5.4%) */ + -1, /* plane 2, page 146 */ + -1, /* plane 2, page 147 */ + 56679, /* plane 2, page 148; 22/408 bytes (5.4%) */ + 56883, /* plane 2, page 149; 14/176 bytes (8.0%) */ + -1, /* plane 2, page 150 */ + 56971, /* plane 2, page 151; 8/364 bytes (2.2%) */ + 57153, /* plane 2, page 152; 14/454 bytes (3.1%) */ + 57380, /* plane 2, page 153; 24/400 bytes (6.0%) */ + 57580, /* plane 2, page 154; 6/78 bytes (7.7%) */ + 57619, /* plane 2, page 155; 8/420 bytes (1.9%) */ + 57829, /* plane 2, page 156; 6/120 bytes (5.0%) */ + 57889, /* plane 2, page 157; 14/372 bytes (3.8%) */ + 58075, /* plane 2, page 158; 14/488 bytes (2.9%) */ + 58319, /* plane 2, page 159; 10/378 bytes (2.6%) */ + 58508, /* plane 2, page 160; 18/472 bytes (3.8%) */ + 58744, /* plane 2, page 161; 24/480 bytes (5.0%) */ + 58984, /* plane 2, page 162; 24/450 bytes (5.3%) */ + 59209, /* plane 2, page 163; 4/4 bytes (100.0%) */ + 59211, /* plane 2, page 164; 6/82 bytes (7.3%) */ + 59252, /* plane 2, page 165; 6/14 bytes (42.9%) */ + 59259, /* plane 2, page 166; 12/340 bytes (3.5%) */ + -1, /* plane 2, page 167 */ + -1, /* plane 2, page 168 */ + -1, /* plane 2, page 169 */ + -1, /* plane 2, page 170 */ + -1, /* plane 2, page 171 */ + -1, /* plane 2, page 172 */ + -1, /* plane 2, page 173 */ + -1, /* plane 2, page 174 */ + -1, /* plane 2, page 175 */ + -1, /* plane 2, page 176 */ + -1, /* plane 2, page 177 */ + -1, /* plane 2, page 178 */ + -1, /* plane 2, page 179 */ + -1, /* plane 2, page 180 */ + -1, /* plane 2, page 181 */ + -1, /* plane 2, page 182 */ + -1, /* plane 2, page 183 */ + -1, /* plane 2, page 184 */ + -1, /* plane 2, page 185 */ + -1, /* plane 2, page 186 */ + -1, /* plane 2, page 187 */ + -1, /* plane 2, page 188 */ + -1, /* plane 2, page 189 */ + -1, /* plane 2, page 190 */ + -1, /* plane 2, page 191 */ + -1, /* plane 2, page 192 */ + -1, /* plane 2, page 193 */ + -1, /* plane 2, page 194 */ + -1, /* plane 2, page 195 */ + -1, /* plane 2, page 196 */ + -1, /* plane 2, page 197 */ + -1, /* plane 2, page 198 */ + -1, /* plane 2, page 199 */ + -1, /* plane 2, page 200 */ + -1, /* plane 2, page 201 */ + -1, /* plane 2, page 202 */ + -1, /* plane 2, page 203 */ + -1, /* plane 2, page 204 */ + -1, /* plane 2, page 205 */ + -1, /* plane 2, page 206 */ + -1, /* plane 2, page 207 */ + -1, /* plane 2, page 208 */ + -1, /* plane 2, page 209 */ + -1, /* plane 2, page 210 */ + -1, /* plane 2, page 211 */ + -1, /* plane 2, page 212 */ + -1, /* plane 2, page 213 */ + -1, /* plane 2, page 214 */ + -1, /* plane 2, page 215 */ + -1, /* plane 2, page 216 */ + -1, /* plane 2, page 217 */ + -1, /* plane 2, page 218 */ + -1, /* plane 2, page 219 */ + -1, /* plane 2, page 220 */ + -1, /* plane 2, page 221 */ + -1, /* plane 2, page 222 */ + -1, /* plane 2, page 223 */ + -1, /* plane 2, page 224 */ + -1, /* plane 2, page 225 */ + -1, /* plane 2, page 226 */ + -1, /* plane 2, page 227 */ + -1, /* plane 2, page 228 */ + -1, /* plane 2, page 229 */ + -1, /* plane 2, page 230 */ + -1, /* plane 2, page 231 */ + -1, /* plane 2, page 232 */ + -1, /* plane 2, page 233 */ + -1, /* plane 2, page 234 */ + -1, /* plane 2, page 235 */ + -1, /* plane 2, page 236 */ + -1, /* plane 2, page 237 */ + -1, /* plane 2, page 238 */ + -1, /* plane 2, page 239 */ + -1, /* plane 2, page 240 */ + -1, /* plane 2, page 241 */ + -1, /* plane 2, page 242 */ + -1, /* plane 2, page 243 */ + -1, /* plane 2, page 244 */ + -1, /* plane 2, page 245 */ + -1, /* plane 2, page 246 */ + -1, /* plane 2, page 247 */ + 59429, /* plane 2, page 248; 16/340 bytes (4.7%) */ + 59599, /* plane 2, page 249; 10/132 bytes (7.6%) */ + -1, /* plane 2, page 250 */ + -1, /* plane 2, page 251 */ + -1, /* plane 2, page 252 */ + -1, /* plane 2, page 253 */ + -1, /* plane 2, page 254 */ + -1, /* plane 2, page 255 */ + /* plane 3: --- */ + /* plane 4: --- */ + /* plane 5: --- */ + /* plane 6: --- */ + /* plane 7: --- */ + /* plane 8: --- */ + /* plane 9: --- */ + /* plane 10: --- */ + /* plane 11: --- */ + /* plane 12: --- */ + /* plane 13: --- */ + /* plane 14: --- */ + /* plane 15: --- */ + /* plane 16: --- */ +}; + +sal_Int32 const aImplUnicodeToBig5Hkscs2001PlaneOffsets[] = { + 0 * 256, /* plane 0; 576/1024 bytes (56.3%), 11016/62348 bytes (17.7%) */ + -1, /* plane 1 */ + 1 * 256, /* plane 2; 664/1024 bytes (64.8%), 3634/56982 bytes (6.4%) */ + -1, /* plane 3 */ + -1, /* plane 4 */ + -1, /* plane 5 */ + -1, /* plane 6 */ + -1, /* plane 7 */ + -1, /* plane 8 */ + -1, /* plane 9 */ + -1, /* plane 10 */ + -1, /* plane 11 */ + -1, /* plane 12 */ + -1, /* plane 13 */ + -1, /* plane 14 */ + -1, /* plane 15 */ + -1, /* plane 16 */ + /* 8/68 bytes (11.8%), 1240/2048 bytes (60.5%), 14650/119330 bytes (12.3%) */ +}; diff --git a/sal/textenc/generate/cns116431992.pl b/sal/textenc/generate/cns116431992.pl new file mode 100644 index 000000000..29bbefabf --- /dev/null +++ b/sal/textenc/generate/cns116431992.pl @@ -0,0 +1,845 @@ +#!/usr/bin/env perl +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +# The following files must be available in a ./input subdir: + +# : +# "Unicode version: 3.1.1 Table version: 1.1 Date: 28 June 2001" +# contains descriptions for: +# U+3400..4DFF CJK Unified Ideographs Extension A +# U+4E00..9FFF CJK Unified Ideographs +# U+F900..FAFF CJK Compatibility Ideographs +# U+20000..2F7FF CJK Unified Ideographs Extension B +# U+2F800..2FFFF CJK Compatibility Ideographs Supplement + +# : +# "Unicode version: 1.1 Table version: 0.0d1 Date: 21 October 1994" +# contains mappings for CNS 11643-1986 + +# : +# "Unicode version: 1.1 Table version: 0.49 Date: 26 March 1998" +# contains mappings for CNS 11643-1992 that are incompatible with +# CNS11643.TXT + +$id = "Cns116431992"; + +sub isValidUtf32 +{ + my $utf32 = $_[0]; + return $utf32 >= 0 && $utf32 <= 0x10FFFF + && !($utf32 >= 0xD800 && $utf32 <= 0xDFFF) + && !($utf32 >= 0xFDD0 && $utf32 <= 0xFDEF) + && ($utf32 & 0xFFFF) < 0xFFFE; +} + +sub printUtf32 +{ + my $utf32 = $_[0]; + return sprintf("U+%04X", $utf32); +} + +sub isValidCns116431992 +{ + my $plane = $_[0]; + my $row = $_[1]; + my $column = $_[2]; + return $plane >= 1 && $plane <= 16 + && $row >= 1 && $row <= 94 + && $column >= 1 && $column <= 94; +} + +sub printCns116431992 +{ + my $plane = $_[0]; + my $row = $_[1]; + my $column = $_[2]; + return sprintf("%d-%02d/%02d", $plane, $row, $column); +} + +sub printStats +{ + my $used = $_[0]; + my $space = $_[1]; + return sprintf("%d/%d bytes (%.1f%%)", + $used, + $space, + $used * 100 / $space); +} + +sub printSpaces +{ + my $column_width = $_[0]; + my $columns_per_line = $_[1]; + my $end = $_[2]; + $output = ""; + for ($i = int($end / $columns_per_line) * $columns_per_line; + $i < $end; + ++$i) + { + for ($j = 0; $j < $column_width; ++$j) + { + $output = $output . " "; + } + } + return $output; +} + +$count_Unihan_txt = 0; +$count_CNS11643_TXT = 0; +$count_Uni2CNS = 0; + +if (1) +{ + $filename = "Unihan.txt"; + open IN, ("input/" . $filename) or die "Cannot read " . $filename; + while () + { + if (/^U\+([0-9A-F]+)\tkCNS1992\t([0-9A-F])-([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])$/) + { + $utf32 = oct("0x" . $1); + $cns_plane = oct("0x" . $2); + $cns_row = oct("0x" . $3) - 0x20; + $cns_column = oct("0x" . $4) - 0x20; + isValidUtf32($utf32) + or die "Bad UTF32 char U+" . printUtf32($utf32); + isValidCns116431992($cns_plane, $cns_row, $cns_column) + or die "Bad CNS11643-1992 char " + . printCns116431992($cns_plane, + $cns_row, + $cns_column); + if (!defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32; + $cns_plane_used[$cns_plane] = 1; + ++$count_Unihan_txt; + } + else + { + ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32) + or die "Mapping " + . printCns116431992($cns_plane, + $cns_row, + $cns_column) + . " to " + . printUtf32($cns_map[$cns_plane] + [$cns_row] + [$cns_column]) + . ", NOT " + . printUtf32($utf32); + } + } + elsif (/^U\+([0-9A-F]+)\tkIRG_TSource\t([0-9A-F])-([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])$/) + { + $utf32 = oct("0x" . $1); + $cns_plane = oct("0x" . $2); + $cns_row = oct("0x" . $3) - 0x20; + $cns_column = oct("0x" . $4) - 0x20; + isValidUtf32($utf32) + or die "Bad UTF32 char U+" . printUtf32($utf32); + isValidCns116431992($cns_plane, $cns_row, $cns_column) + or die "Bad CNS11643-1992 char " + . printCns116431992($cns_plane, + $cns_row, + $cns_column); + if (!defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32; + $cns_plane_used[$cns_plane] = 1; + ++$count_Unihan_txt; + } + else + { + ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32) + or print "WARNING! Mapping ", + printCns116431992($cns_plane, + $cns_row, + $cns_column), + " to ", + printUtf32($cns_map[$cns_plane] + [$cns_row] + [$cns_column]), + ", NOT ", + printUtf32($utf32), + "\n"; + } + } + elsif (/^U\+([0-9A-F]+)\tkCNS1992\t.*$/) + { + die "Bad format"; + } + } + close IN; +} + +if (1) +{ + $filename = "CNS11643.TXT"; + open IN, ("input/" . $filename) or die "Cannot read " . $filename; + while () + { + if (/0x([0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])\t0x([0-9A-F]+)\t\#.*$/) + { + $utf32 = oct("0x" . $4); + $cns_plane = oct("0x" . $1); + $cns_row = oct("0x" . $2) - 0x20; + $cns_column = oct("0x" . $3) - 0x20; + isValidUtf32($utf32) + or die "Bad UTF32 char U+" . printUtf32($utf32); + isValidCns116431992($cns_plane, $cns_row, $cns_column) + or die "Bad CNS11643-1992 char " + . printCns116431992($cns_plane, + $cns_row, + $cns_column); + if ($cns_plane <= 2) + { + if (!defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32; + $cns_plane_used[$cns_plane] = 1; + ++$count_CNS11643_TXT; + } + else + { + ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32) + or die "Mapping " + . printCns116431992($cns_plane, + $cns_row, + $cns_column) + . " to " + . printUtf32($cns_map[$cns_plane] + [$cns_row] + [$cns_column]) + . ", NOT " + . printUtf32($utf32); + } + } + } + } + close IN; +} + +if (0) +{ + $filename = "Uni2CNS"; + open IN, ("input/" . $filename) or die "Cannot read " . $filename; + while () + { + if (/([0-9A-F]+)\t([0-9A-F])-([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])\t.*$/) + { + $utf32 = oct("0x" . $1); + $cns_plane = oct("0x" . $2); + $cns_row = oct("0x" . $3) - 0x20; + $cns_column = oct("0x" . $4) - 0x20; + isValidUtf32($utf32) + or die "Bad UTF32 char U+" . printUtf32($utf32); + isValidCns116431992($cns_plane, $cns_row, $cns_column) + or die "Bad CNS11643-1992 char " + . printCns116431992($cns_plane, + $cns_row, + $cns_column); + if (!defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + $cns_map[$cns_plane][$cns_row][$cns_column] = $utf32; + $cns_plane_used[$cns_plane] = 1; + ++$count_Uni2CNS; + } + else + { +# ($cns_map[$cns_plane][$cns_row][$cns_column] == $utf32) +# or die "Mapping " +# . printCns116431992($cns_plane, +# $cns_row, +# $cns_column) +# . " to " +# . printUtf32($cns_map[$cns_plane] +# [$cns_row] +# [$cns_column]) +# . ", NOT " +# . printUtf32($utf32); + } + if ($cns_plane == 1) + { + print printCns116431992($cns_plane, $cns_row, $cns_column), + "\n"; + } + } + } + close IN; +} + +for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane) +{ + if (defined($cns_plane_used[$cns_plane])) + { + for ($cns_row = 1; $cns_row <= 94; ++$cns_row) + { + for ($cns_column = 1; $cns_column <= 94; ++$cns_column) + { + if (defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + $utf32 = $cns_map[$cns_plane][$cns_row][$cns_column]; + $uni_plane = $utf32 >> 16; + $uni_page = ($utf32 >> 8) & 0xFF; + $uni_index = $utf32 & 0xFF; + if (!defined($uni_plane_used[$uni_plane]) + || !defined($uni_page_used[$uni_plane][$uni_page]) + || !defined($uni_map[$uni_plane] + [$uni_page] + [$uni_index])) + { + $uni_map[$uni_plane][$uni_page][$uni_index] + = ($cns_plane << 16) + | ($cns_row << 8) + | $cns_column; + $uni_plane_used[$uni_plane] = 1; + $uni_page_used[$uni_plane][$uni_page] = 1; + } + else + { + $cns1 = $uni_map[$uni_plane][$uni_page][$uni_index]; + $cns1_plane = $cns1 >> 16; + $cns1_row = ($cns1 >> 8) & 0xFF; + $cns1_column = $cns1 & 0xFF; + + # Do not map from Unicode to Fictitious Character Set + # Extensions (Lunde, p. 131), if possible: + if ($cns_plane == 3 + && ($cns_row == 66 && $cns_column > 38 + || $cns_row > 66)) + { + print " (", + printUtf32($utf32), + " to fictitious ", + printCns116431992($cns_plane, + $cns_row, + $cns_column), + " ignored, favouring ", + printCns116431992($cns1_plane, + $cns1_row, + $cns1_column), + ")\n"; + } + elsif ($cns1_plane == 3 + && ($cns1_row == 66 && $cns1_column > 38 + || $cns1_row > 66)) + { + $uni_map[$uni_plane][$uni_page][$uni_index] + = ($cns_plane << 16) + | ($cns_row << 8) + | $cns_column; + print " (", + printUtf32($utf32), + " to fictitious ", + printCns116431992($cns1_plane, + $cns1_row, + $cns1_column), + " ignored, favouring ", + printCns116431992($cns_plane, + $cns_row, + $cns_column), + ")\n"; + } + else + { + print "WARNING! Mapping ", + printUtf32($utf32), + " to ", + printCns116431992($cns1_plane, + $cns1_row, + $cns1_column), + ", NOT ", + printCns116431992($cns_plane, + $cns_row, + $cns_column), + "\n"; + } + } + } + } + } + } +} +if (defined($uni_plane_used[0]) && defined($uni_page_used[0][0])) +{ + for ($utf32 = 0; $utf32 <= 0x7F; ++$utf32) + { + if (defined($uni_map[0][0][$uni_index])) + { + $cns = $uni_map[0][0][$utf32]; + die "Mapping " + . printUtf32($utf32) + . " to " + . printCns116431992($cns >> 16, + ($cns >> 8) & 0xFF, + $cns & 0xFF); + } + } +} + +$filename = lc($id) . ".tab"; +open OUT, ("> " . $filename) or die "Cannot write " . $filename; + +{ + $filename = lc($id). ".pl"; + open IN, $filename or die "Cannot read ". $filename; + $first = 1; + while () + { + if (/^\#!.*$/) + { + } + elsif (/^\#(\*.*)$/) + { + if ($first == 1) + { + print OUT "/", $1, "\n"; + $first = 0; + } + else + { + print OUT " ", substr($1, 0, length($1) - 1), "/\n"; + } + } + elsif (/^\# (.*)$/) + { + print OUT " *", $1, "\n"; + } + elsif (/^\#(.*)$/) + { + print OUT " *", $1, "\n"; + } + else + { + goto done; + } + } + done: +} + +print OUT "\n", + "#include \"sal/types.h\"\n", + "\n"; + +print OUT "static sal_uInt16 const aImpl", $id, "ToUnicodeData[] = {\n"; +$cns_data_index = 0; +for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane) +{ + if (defined($cns_plane_used[$cns_plane])) + { + $cns_rows = 0; + $cns_chars = 0; + for ($cns_row = 1; $cns_row <= 94; ++$cns_row) + { + $cns_row_first = -1; + for ($cns_column = 1; $cns_column <= 94; ++$cns_column) + { + if (defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + if ($cns_row_first == -1) + { + $cns_row_first = $cns_column; + } + $cns_row_last = $cns_column; + } + } + if ($cns_row_first != -1) + { + $cns_data_offsets[$cns_plane][$cns_row] = $cns_data_index; + ++$cns_rows; + print OUT " /* plane ", $cns_plane, ", row ", $cns_row, + " */\n"; + + $cns_row_surrogates_first = -1; + $cns_row_chars = 0; + $cns_row_surrogates = 0; + + print OUT " ", $cns_row_first, " | (", $cns_row_last, + " << 8), /* first, last */\n"; + ++$cns_data_index; + + print OUT " ", printSpaces(7, 10, $cns_row_first); + $bol = 0; + for ($cns_column = $cns_row_first; + $cns_column <= $cns_row_last; + ++$cns_column) + { + if ($bol == 1) + { + print OUT " "; + $bol = 0; + } + if (defined($cns_map[$cns_plane][$cns_row][$cns_column])) + { + $utf32 = $cns_map[$cns_plane][$cns_row][$cns_column]; + ++$cns_row_chars; + if ($utf32 <= 0xFFFF) + { + printf OUT "0x%04X,", $utf32; + } + else + { + ++$cns_row_surrogates; + printf OUT "0x%04X,", + (0xD800 | (($utf32 - 0x10000) >> 10)); + if ($cns_row_surrogates_first == -1) + { + $cns_row_surrogates_first = $cns_column; + } + $cns_row_surrogates_last = $cns_column; + } + } + else + { + printf OUT "0xffff,"; + } + ++$cns_data_index; + if ($cns_column % 10 == 9) + { + print OUT "\n"; + $bol = 1; + } + } + if ($bol == 0) + { + print OUT "\n"; + } + + if ($cns_row_surrogates_first != -1) + { + print OUT " ", $cns_row_surrogates_first, + ", /* first low-surrogate */\n"; + ++$cns_data_index; + + print OUT " ", + printSpaces(7, 10, $cns_row_surrogates_first); + $bol = 0; + for ($cns_column = $cns_row_surrogates_first; + $cns_column <= $cns_row_surrogates_last; + ++$cns_column) + { + if ($bol == 1) + { + print OUT " "; + $bol = 0; + } + $utf32 = 0; + if (defined($cns_map[$cns_plane] + [$cns_row] + [$cns_column])) + { + $utf32 + = $cns_map[$cns_plane][$cns_row][$cns_column]; + } + if ($utf32 <= 0xFFFF) + { + printf OUT " 0,"; + } + else + { + printf OUT "0x%04X,", + (0xDC00 + | (($utf32 - 0x10000) & 0x3FF)); + } + ++$cns_data_index; + if ($cns_column % 10 == 9) + { + print OUT "\n"; + $bol = 1; + } + } + if ($bol == 0) + { + print OUT "\n"; + } + } + + $cns_chars += $cns_row_chars; + $cns_data_space[$cns_plane][$cns_row] + = ($cns_data_index + - $cns_data_offsets[$cns_plane][$cns_row]) * 2; + $cns_data_used[$cns_plane][$cns_row] + = (1 + $cns_row_chars + + ($cns_row_surrogates == 0 ? + 0 : 1 + $cns_row_surrogates)) * 2; + } + else + { + print OUT " /* plane ", $cns_plane, ", row ", $cns_row, + ": --- */\n"; + $cns_data_offsets[$cns_plane][$cns_row] = -1; + } + } + print "cns plane ", + $cns_plane, + ": rows = ", + $cns_rows, + ", chars = ", + $cns_chars, + "\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_Int32 const aImpl", $id, "ToUnicodeRowOffsets[] = {\n"; +for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane) +{ + if (defined ($cns_plane_used[$cns_plane])) + { + $cns_rowoffsets_used[$cns_plane] = 0; + for ($cns_row = 1; $cns_row <= 94; ++$cns_row) + { + if ($cns_data_offsets[$cns_plane][$cns_row] == -1) + { + print OUT " -1, /* plane ", + $cns_plane, + ", row ", + $cns_row, + " */\n"; + } + else + { + print OUT " ", + $cns_data_offsets[$cns_plane][$cns_row], + ", /* plane ", + $cns_plane, + ", row ", + $cns_row, + "; ", + printStats($cns_data_used[$cns_plane][$cns_row], + $cns_data_space[$cns_plane][$cns_row]), + " */\n"; + $cns_rowoffsets_used[$cns_plane] += 4; + } + } + } + else + { + print OUT " /* plane ", $cns_plane, ": --- */\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_Int32 const aImpl", + $id, + "ToUnicodePlaneOffsets[] = {\n"; +$cns_row_offset = 0; +for ($cns_plane = 1; $cns_plane <= 16; ++$cns_plane) +{ + if (defined ($cns_plane_used[$cns_plane])) + { + print OUT " ", + $cns_row_offset++, + " * 94, /* plane ", + $cns_plane, + "; ", + printStats($cns_rowoffsets_used[$cns_plane], 94 * 4), + " */\n"; + } + else + { + print OUT " -1, /* plane ", $cns_plane, " */\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_uInt8 const aImplUnicodeTo", $id, "Data[] = {\n"; +$uni_data_index = 0; +for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane) +{ + if (defined($uni_plane_used[$uni_plane])) + { + for ($uni_page = 0; $uni_page <= 255; ++$uni_page) + { + if (defined($uni_page_used[$uni_plane][$uni_page])) + { + $uni_data_offsets[$uni_plane][$uni_page] = $uni_data_index; + print OUT " /* plane ", $uni_plane, ", page ", $uni_page, + " */\n"; + + $uni_page_first = -1; + for ($uni_index = 0; $uni_index <= 255; ++$uni_index) + { + if (defined($uni_map[$uni_plane][$uni_page][$uni_index])) + { + if ($uni_page_first == -1) + { + $uni_page_first = $uni_index; + } + $uni_page_last = $uni_index; + } + } + + $uni_data_used[$uni_plane][$uni_page] = 0; + + print OUT " ", $uni_page_first, ", ", $uni_page_last, + ", /* first, last */\n"; + $uni_data_index += 2; + $uni_data_used[$uni_plane][$uni_page] += 2; + + print OUT " ", printSpaces(9, 8, $uni_page_first); + $bol = 0; + for ($uni_index = $uni_page_first; + $uni_index <= $uni_page_last; + ++$uni_index) + { + if ($bol == 1) + { + print OUT " "; + $bol = 0; + } + if (defined($uni_map[$uni_plane][$uni_page][$uni_index])) + { + $cns = $uni_map[$uni_plane][$uni_page][$uni_index]; + printf OUT "%2d,%2d,%2d,", + $cns >> 16, + $cns >> 8 & 0xFF, + $cns & 0xFF; + $uni_data_used[$uni_plane][$uni_page] += 3; + } + else + { + print OUT " 0, 0, 0,"; + } + $uni_data_index += 3; + if ($uni_index % 8 == 7) + { + print OUT "\n"; + $bol = 1; + } + } + if ($bol == 0) + { + print OUT "\n"; + } + + $uni_data_space[$uni_plane][$uni_page] + = $uni_data_index + - $uni_data_offsets[$uni_plane][$uni_page]; + } + else + { + $uni_data_offsets[$uni_plane][$uni_page] = -1; + print OUT " /* plane ", $uni_plane, ", page ", $uni_page, + ": --- */\n"; + } + } + } + else + { + print OUT " /* plane ", $uni_plane, ": --- */\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_Int32 const aImplUnicodeTo", $id, "PageOffsets[] = {\n"; +for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane) +{ + if (defined($uni_plane_used[$uni_plane])) + { + $uni_pageoffsets_used[$uni_plane] = 0; + $uni_data_used_sum[$uni_plane] = 0; + $uni_data_space_sum[$uni_plane] = 0; + for ($uni_page = 0; $uni_page <= 255; ++$uni_page) + { + $offset = $uni_data_offsets[$uni_plane][$uni_page]; + if ($offset == -1) + { + print OUT " -1, /* plane ", + $uni_plane, + ", page ", + $uni_page, + " */\n"; + } + else + { + print OUT " ", + $offset, + ", /* plane ", + $uni_plane, + ", page ", + $uni_page, + "; ", + printStats($uni_data_used[$uni_plane][$uni_page], + $uni_data_space[$uni_plane][$uni_page]), + " */\n"; + $uni_pageoffsets_used[$uni_plane] += 4; + $uni_data_used_sum[$uni_plane] + += $uni_data_used[$uni_plane][$uni_page]; + $uni_data_space_sum[$uni_plane] + += $uni_data_space[$uni_plane][$uni_page]; + } + } + } + else + { + print OUT " /* plane ", $uni_plane, ": --- */\n"; + } +} +print OUT "};\n\n"; + +print OUT "static sal_Int32 const aImplUnicodeTo", + $id, + "PlaneOffsets[] = {\n"; +$uni_page_offset = 0; +$uni_planeoffsets_used = 0; +$uni_pageoffsets_used_sum = 0; +$uni_pageoffsets_space_sum = 0; +$uni_data_used_sum2 = 0; +$uni_data_space_sum2 = 0; +for ($uni_plane = 0; $uni_plane <= 16; ++$uni_plane) +{ + if (defined ($uni_plane_used[$uni_plane])) + { + print OUT " ", + $uni_page_offset++, + " * 256, /* plane ", + $uni_plane, + "; ", + printStats($uni_pageoffsets_used[$uni_plane], 256 * 4), + ", ", + printStats($uni_data_used_sum[$uni_plane], + $uni_data_space_sum[$uni_plane]), + " */\n"; + $uni_planeoffsets_used += 4; + $uni_pageoffsets_used_sum += $uni_pageoffsets_used[$uni_plane]; + $uni_pageoffsets_space_sum += 256 * 4; + $uni_data_used_sum2 += $uni_data_used_sum[$uni_plane]; + $uni_data_space_sum2 += $uni_data_space_sum[$uni_plane]; + } + else + { + print OUT " -1, /* plane ", $uni_plane, " */\n"; + } +} +print OUT " /* ", + printStats($uni_planeoffsets_used, 17 * 4), + ", ", + printStats($uni_pageoffsets_used_sum, $uni_pageoffsets_space_sum), + ", ", + printStats($uni_data_used_sum2, $uni_data_space_sum2), + " */\n};\n"; + +close OUT; + +print "Unihan.txt = ", $count_Unihan_txt, + ", CNS11643.TXT = ", $count_CNS11643_TXT, + ", Uni2CNS = ", $count_Uni2CNS, + ", total = ", + ($count_Unihan_txt + $count_CNS11643_TXT + $count_Uni2CNS), + "\n"; diff --git a/sal/textenc/generate/cns116431992.tab b/sal/textenc/generate/cns116431992.tab new file mode 100644 index 000000000..b1d72705a --- /dev/null +++ b/sal/textenc/generate/cns116431992.tab @@ -0,0 +1,22858 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +sal_uInt16 const aImplCns116431992ToUnicodeData[] = { + /* plane 1, row 1 */ + 1 | (94 << 8), /* first, last */ + 0x3000,0xFF0C,0x3001,0x3002,0xFF0E,0x30FB,0xFF1B,0xFF1A,0xFF1F, + 0xFF01,0xFE30,0x2026,0x2025,0xFE50,0xFE51,0xFE52,0x00B7,0xFE54,0xFE55, + 0xFE56,0xFE57,0xFE31,0x2014,0xFE32,0x2013,0xffff,0xffff,0xffff,0xffff, + 0xFF08,0xFF09,0xFE35,0xFE36,0xFF5B,0xFF5D,0xFE37,0xFE38,0x3014,0x3015, + 0xFE39,0xFE3A,0x3010,0x3011,0xFE3B,0xFE3C,0x300A,0x300B,0xFE3D,0xFE3E, + 0x3008,0x3009,0xFE3F,0xFE40,0x300C,0x300D,0xFE41,0xFE42,0x300E,0x300F, + 0xFE43,0xFE44,0xFE59,0xFE5A,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0x2018,0x2019, + 0x201C,0x201D,0x301D,0x301E,0x2032,0x2035,0xFF03,0xFF06,0xFF0A,0x203B, + 0x00A7,0x3003,0x25CB,0x25CF,0x25B3,0x25B2,0x25CE,0x2606,0x2605,0x25C7, + 0x25C6,0x25A1,0x25A0,0x25BD,0x25BC, + /* plane 1, row 2 */ + 1 | (94 << 8), /* first, last */ + 0x32A3,0x2105,0x203E,0xffff,0xFF3F,0xffff,0xFE49,0xFE4A,0xFE4D, + 0xFE4E,0xFE4B,0xFE4C,0xFE5F,0xFE60,0xFE61,0xFF0B,0xFF0D,0x00D7,0x00F7, + 0x00B1,0x221A,0xFF1C,0xFF1E,0xFF1D,0x2266,0x2267,0x2260,0x221E,0x2252, + 0x2261,0xFE62,0xFE63,0xFE64,0xFE66,0xFE65,0x223C,0x2229,0x222A,0x22A5, + 0x2220,0x221F,0x22BF,0x33D2,0x33D1,0x222B,0x222E,0x2235,0x2234,0x2640, + 0x2642,0x2641,0x2609,0x2191,0x2193,0x2192,0x2190,0x2196,0x2197,0x2199, + 0x2198,0x2016,0xFF5C,0xFF0F,0xFF3C,0x2215,0xFE68,0xFF04,0xFFE5,0x3012, + 0xFFE0,0xFFE1,0xFF05,0xFF20,0x2103,0x2109,0xFE69,0xFE6A,0xFE6B,0x33D5, + 0x339C,0x339D,0x339E,0x33CE,0x33A1,0x338E,0x338F,0x33C4,0x00B0,0x5159, + 0x515B,0x515E,0x515D,0x5161,0x5163, + /* plane 1, row 3 */ + 1 | (46 << 8), /* first, last */ + 0x55E7,0x74E9,0x7CCE,0x2581,0x2582,0x2583,0x2584,0x2585,0x2586, + 0x2587,0x2588,0x258F,0x258E,0x258D,0x258C,0x258B,0x258A,0x2589,0x253C, + 0x2534,0x252C,0x2524,0x251C,0x2594,0x2500,0x2502,0x2595,0x250C,0x2510, + 0x2514,0x2518,0x256D,0x256E,0x2570,0x256F,0x2550,0x255E,0x256A,0x2561, + 0x25E2,0x25E3,0x25E5,0x25E4,0x2571,0x2572,0x2573, + /* plane 1, row 4 */ + 1 | (94 << 8), /* first, last */ + 0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18, + 0xFF19,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168, + 0x2169,0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029, + 0xffff,0x5344,0xffff,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27, + 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31, + 0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A,0xFF41, + 0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B, + 0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55, + 0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A,0x0391,0x0392,0x0393,0x0394,0x0395, + 0x0396,0x0397,0x0398,0x0399,0x039A, + /* plane 1, row 5 */ + 1 | (80 << 8), /* first, last */ + 0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3,0x03A4, + 0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5, + 0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF, + 0x03C0,0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0x3105, + 0x3106,0x3107,0x3108,0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,0x310F, + 0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117,0x3118,0x3119, + 0x311A,0x311B,0x311C,0x311D,0x311E,0x311F,0x3120,0x3121,0x3122,0x3123, + 0x3124,0x3125,0x3126,0x3127,0x3128,0x3129,0x02D9,0x02C9,0x02CA,0x02C7, + 0x02CB, + /* plane 1, row 6 */ + 1 | (30 << 8), /* first, last */ + 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468, + 0x2469,0x2474,0x2475,0x2476,0x2477,0x2478,0x2479,0x247A,0x247B,0x247C, + 0x247D,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178, + 0x2179, + /* plane 1, row 7 */ + 8 | (20 << 8), /* first, last */ + 0x4EA0,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0x51AB,0xffff,0xffff,0xffff,0xffff, + 0x52F9, + /* plane 1, row 8: --- */ + /* plane 1, row 9: --- */ + /* plane 1, row 10: --- */ + /* plane 1, row 11: --- */ + /* plane 1, row 12: --- */ + /* plane 1, row 13: --- */ + /* plane 1, row 14: --- */ + /* plane 1, row 15: --- */ + /* plane 1, row 16: --- */ + /* plane 1, row 17: --- */ + /* plane 1, row 18: --- */ + /* plane 1, row 19: --- */ + /* plane 1, row 20: --- */ + /* plane 1, row 21: --- */ + /* plane 1, row 22: --- */ + /* plane 1, row 23: --- */ + /* plane 1, row 24: --- */ + /* plane 1, row 25: --- */ + /* plane 1, row 26: --- */ + /* plane 1, row 27: --- */ + /* plane 1, row 28: --- */ + /* plane 1, row 29: --- */ + /* plane 1, row 30: --- */ + /* plane 1, row 31: --- */ + /* plane 1, row 32: --- */ + /* plane 1, row 33: --- */ + /* plane 1, row 34 */ + 1 | (33 << 8), /* first, last */ + 0x2400,0x2401,0x2402,0x2403,0x2404,0x2405,0x2406,0x2407,0x2408, + 0x2409,0x240A,0x240B,0x240C,0x240D,0x240E,0x240F,0x2410,0x2411,0x2412, + 0x2413,0x2414,0x2415,0x2416,0x2417,0x2418,0x2419,0x241A,0x241B,0x241C, + 0x241D,0x241E,0x241F,0x2421, + /* plane 1, row 35: --- */ + /* plane 1, row 36 */ + 1 | (94 << 8), /* first, last */ + 0x4E00,0x4E59,0x4E01,0x4E03,0x4E43,0x4E5D,0x4E86,0x4E8C,0x4EBA, + 0x513F,0x5165,0x516B,0x51E0,0x5200,0x5201,0x529B,0x5315,0x5341,0x535C, + 0x53C8,0x4E09,0x4E0B,0x4E08,0x4E0A,0x4E2B,0x4E38,0x51E1,0x4E45,0x4E48, + 0x4E5F,0x4E5E,0x4E8E,0x4EA1,0x5140,0x5203,0x52FA,0x5343,0x53C9,0x53E3, + 0x571F,0x58EB,0x5915,0x5927,0x5973,0x5B50,0x5B51,0x5B53,0x5BF8,0x5C0F, + 0x5C22,0x5C38,0x5C71,0x5DDD,0x5DE5,0x5DF1,0x5DF2,0x5DF3,0x5DFE,0x5E72, + 0x5EFE,0x5F0B,0x5F13,0x624D,0x4E11,0x4E10,0x4E0D,0x4E2D,0x4E30,0x4E39, + 0x4E4B,0x5C39,0x4E88,0x4E91,0x4E95,0x4E92,0x4E94,0x4EA2,0x4EC1,0x4EC0, + 0x4EC3,0x4EC6,0x4EC7,0x4ECD,0x4ECA,0x4ECB,0x4EC4,0x5143,0x5141,0x5167, + 0x516D,0x516E,0x516C,0x5197,0x51F6, + /* plane 1, row 37 */ + 1 | (94 << 8), /* first, last */ + 0x5206,0x5207,0x5208,0x52FB,0x52FE,0x52FF,0x5316,0x5339,0x5348, + 0x5347,0x5345,0x535E,0x5384,0x53CB,0x53CA,0x53CD,0x58EC,0x5929,0x592B, + 0x592A,0x592D,0x5B54,0x5C11,0x5C24,0x5C3A,0x5C6F,0x5DF4,0x5E7B,0x5EFF, + 0x5F14,0x5F15,0x5FC3,0x6208,0x6236,0x624B,0x624E,0x652F,0x6587,0x6597, + 0x65A4,0x65B9,0x65E5,0x66F0,0x6708,0x6728,0x6B20,0x6B62,0x6B79,0x6BCB, + 0x6BD4,0x6BDB,0x6C0F,0x6C34,0x706B,0x722A,0x7236,0x723B,0x7247,0x7259, + 0x725B,0x72AC,0x738B,0x4E19,0x4E16,0x4E15,0x4E14,0x4E18,0x4E3B,0x4E4D, + 0x4E4F,0x4E4E,0x4EE5,0x4ED8,0x4ED4,0x4ED5,0x4ED6,0x4ED7,0x4EE3,0x4EE4, + 0x4ED9,0x4EDE,0x5145,0x5144,0x5189,0x518A,0x51AC,0x51F9,0x51FA,0x51F8, + 0x520A,0x52A0,0x529F,0x5305,0x5306, + /* plane 1, row 38 */ + 1 | (94 << 8), /* first, last */ + 0x5317,0x531D,0x4EDF,0x534A,0x5349,0x5361,0x5360,0x536F,0x536E, + 0x53BB,0x53EF,0x53E4,0x53F3,0x53EC,0x53EE,0x53E9,0x53E8,0x53FC,0x53F8, + 0x53F5,0x53EB,0x53E6,0x53EA,0x53F2,0x53F1,0x53F0,0x53E5,0x53ED,0x53FB, + 0x56DB,0x56DA,0x5916,0x592E,0x5931,0x5974,0x5976,0x5B55,0x5B83,0x5C3C, + 0x5DE8,0x5DE7,0x5DE6,0x5E02,0x5E03,0x5E73,0x5E7C,0x5F01,0x5F18,0x5F17, + 0x5FC5,0x620A,0x6253,0x6254,0x6252,0x6251,0x65A5,0x65E6,0x672E,0x672C, + 0x672A,0x672B,0x672D,0x6B63,0x6BCD,0x6C11,0x6C10,0x6C38,0x6C41,0x6C40, + 0x6C3E,0x72AF,0x7384,0x7389,0x74DC,0x74E6,0x7518,0x751F,0x7528,0x7529, + 0x7530,0x7531,0x7532,0x7533,0x758B,0x767D,0x76AE,0x76BF,0x76EE,0x77DB, + 0x77E2,0x77F3,0x793A,0x79BE,0x7A74, + /* plane 1, row 39 */ + 1 | (94 << 8), /* first, last */ + 0x7ACB,0x4E1E,0x4E1F,0x4E52,0x4E53,0x4E69,0x4E99,0x4EA4,0x4EA6, + 0x4EA5,0x4EFF,0x4F09,0x4F19,0x4F0A,0x4F15,0x4F0D,0x4F10,0x4F11,0x4F0F, + 0x4EF2,0x4EF6,0x4EFB,0x4EF0,0x4EF3,0x4EFD,0x4F01,0x4F0B,0x5149,0x5147, + 0x5146,0x5148,0x5168,0x5171,0x518D,0x51B0,0x5217,0x5211,0x5212,0x520E, + 0x5216,0x52A3,0x5308,0x5321,0x5320,0x5370,0x5371,0x5409,0x540F,0x540C, + 0x540A,0x5410,0x5401,0x540B,0x5404,0x5411,0x540D,0x5408,0x5403,0x540E, + 0x5406,0x5412,0x56E0,0x56DE,0x56DD,0x5733,0x5730,0x5728,0x572D,0x572C, + 0x572F,0x5729,0x5919,0x591A,0x5937,0x5938,0x5984,0x5978,0x5983,0x597D, + 0x5979,0x5982,0x5981,0x5B57,0x5B58,0x5B87,0x5B88,0x5B85,0x5B89,0x5BFA, + 0x5C16,0x5C79,0x5DDE,0x5E06,0x5E76, + /* plane 1, row 40 */ + 1 | (94 << 8), /* first, last */ + 0x5E74,0x5F0F,0x5F1B,0x5FD9,0x5FD6,0x620E,0x620C,0x620D,0x6210, + 0x6263,0x625B,0x6258,0x6536,0x65E9,0x65E8,0x65EC,0x65ED,0x66F2,0x66F3, + 0x6709,0x673D,0x6734,0x6731,0x6735,0x6B21,0x6B64,0x6B7B,0x6C16,0x6C5D, + 0x6C57,0x6C59,0x6C5F,0x6C60,0x6C50,0x6C55,0x6C61,0x6C5B,0x6C4D,0x6C4E, + 0x7070,0x725F,0x725D,0x767E,0x7AF9,0x7C73,0x7CF8,0x7F36,0x7F8A,0x7FBD, + 0x8001,0x8003,0x800C,0x8012,0x8033,0x807F,0x8089,0x808B,0x808C,0x81E3, + 0x81EA,0x81F3,0x81FC,0x820C,0x821B,0x821F,0x826E,0x8272,0x827E,0x866B, + 0x8840,0x884C,0x8863,0x897F,0x9621,0x4E32,0x4EA8,0x4F4D,0x4F4F,0x4F47, + 0x4F57,0x4F5E,0x4F34,0x4F5B,0x4F55,0x4F30,0x4F50,0x4F51,0x4F3D,0x4F3A, + 0x4F38,0x4F43,0x4F54,0x4F3C,0x4F46, + /* plane 1, row 41 */ + 1 | (94 << 8), /* first, last */ + 0x4F63,0x4F5C,0x4F60,0x4F2F,0x4F4E,0x4F36,0x4F59,0x4F5D,0x4F48, + 0x4F5A,0x514C,0x514B,0x514D,0x5175,0x51B6,0x51B7,0x5225,0x5224,0x5229, + 0x522A,0x5228,0x52AB,0x52A9,0x52AA,0x52AC,0x5323,0x5373,0x5375,0x541D, + 0x542D,0x541E,0x543E,0x5426,0x544E,0x5427,0x5446,0x5443,0x5433,0x5448, + 0x5442,0x541B,0x5429,0x544A,0x5439,0x543B,0x5438,0x542E,0x5435,0x5436, + 0x5420,0x543C,0x5440,0x5431,0x542B,0x541F,0x542C,0x56EA,0x56F0,0x56E4, + 0x56EB,0x574A,0x5751,0x5740,0x574D,0x5747,0x574E,0x573E,0x5750,0x574F, + 0x573B,0x58EF,0x593E,0x599D,0x5992,0x59A8,0x599E,0x59A3,0x5999,0x5996, + 0x598D,0x59A4,0x5993,0x598A,0x59A5,0x5B5D,0x5B5C,0x5B5A,0x5B5B,0x5B8C, + 0x5B8B,0x5B8F,0x5C2C,0x5C40,0x5C41, + /* plane 1, row 42 */ + 1 | (94 << 8), /* first, last */ + 0x5C3F,0x5C3E,0x5C90,0x5C91,0x5C94,0x5C8C,0x5DEB,0x5E0C,0x5E8F, + 0x5E87,0x5E8A,0x5EF7,0x5F04,0x5F1F,0x5F64,0x5F62,0x5F77,0x5F79,0x5FD8, + 0x5FCC,0x5FD7,0x5FCD,0x5FF1,0x5FEB,0x5FF8,0x5FEA,0x6212,0x6211,0x6284, + 0x6297,0x6296,0x6280,0x6276,0x6289,0x626D,0x628A,0x627C,0x627E,0x6279, + 0x6273,0x6292,0x626F,0x6298,0x626E,0x6295,0x6293,0x6291,0x6286,0x6539, + 0x653B,0x6538,0x65F1,0x66F4,0x675F,0x674E,0x674F,0x6750,0x6751,0x675C, + 0x6756,0x675E,0x6749,0x6746,0x6760,0x6753,0x6757,0x6B65,0x6BCF,0x6C42, + 0x6C5E,0x6C99,0x6C81,0x6C88,0x6C89,0x6C85,0x6C9B,0x6C6A,0x6C7A,0x6C90, + 0x6C70,0x6C8C,0x6C68,0x6C96,0x6C92,0x6C7D,0x6C83,0x6C72,0x6C7E,0x6C74, + 0x6C86,0x6C76,0x6C8D,0x6C94,0x6C98, + /* plane 1, row 43 */ + 1 | (94 << 8), /* first, last */ + 0x6C82,0x7076,0x707C,0x707D,0x7078,0x7262,0x7261,0x7260,0x72C4, + 0x72C2,0x7396,0x752C,0x752B,0x7537,0x7538,0x7682,0x76EF,0x77E3,0x79C1, + 0x79C0,0x79BF,0x7A76,0x7CFB,0x7F55,0x8096,0x8093,0x809D,0x8098,0x809B, + 0x809A,0x80B2,0x826F,0x8292,0x828B,0x828D,0x898B,0x89D2,0x8A00,0x8C37, + 0x8C46,0x8C55,0x8C9D,0x8D64,0x8D70,0x8DB3,0x8EAB,0x8ECA,0x8F9B,0x8FB0, + 0x8FC2,0x8FC6,0x8FC5,0x8FC4,0x5DE1,0x9091,0x90A2,0x90AA,0x90A6,0x90A3, + 0x9149,0x91C6,0x91CC,0x9632,0x962E,0x9631,0x962A,0x962C,0x4E26,0x4E56, + 0x4E73,0x4E8B,0x4E9B,0x4E9E,0x4EAB,0x4EAC,0x4F6F,0x4F9D,0x4F8D,0x4F73, + 0x4F7F,0x4F6C,0x4F9B,0x4F8B,0x4F86,0x4F83,0x4F70,0x4F75,0x4F88,0x4F69, + 0x4F7B,0x4F96,0x4F7E,0x4F8F,0x4F91, + /* plane 1, row 44 */ + 1 | (94 << 8), /* first, last */ + 0x4F7A,0x5154,0x5152,0x5155,0x5169,0x5177,0x5176,0x5178,0x51BD, + 0x51FD,0x523B,0x5238,0x5237,0x523A,0x5230,0x522E,0x5236,0x5241,0x52BE, + 0x52BB,0x5352,0x5354,0x5353,0x5351,0x5366,0x5377,0x5378,0x5379,0x53D6, + 0x53D4,0x53D7,0x5473,0x5475,0x5496,0x5478,0x5495,0x5480,0x547B,0x5477, + 0x5484,0x5492,0x5486,0x547C,0x5490,0x5471,0x5476,0x548C,0x549A,0x5462, + 0x5468,0x548B,0x547D,0x548E,0x56FA,0x5783,0x5777,0x576A,0x5769,0x5761, + 0x5766,0x5764,0x577C,0x591C,0x5949,0x5947,0x5948,0x5944,0x5954,0x59BE, + 0x59BB,0x59D4,0x59B9,0x59AE,0x59D1,0x59C6,0x59D0,0x59CD,0x59CB,0x59D3, + 0x59CA,0x59AF,0x59B3,0x59D2,0x59C5,0x5B5F,0x5B64,0x5B63,0x5B97,0x5B9A, + 0x5B98,0x5B9C,0x5B99,0x5B9B,0x5C1A, + /* plane 1, row 45 */ + 1 | (94 << 8), /* first, last */ + 0x5C48,0x5C45,0x5C46,0x5CB7,0x5CA1,0x5CB8,0x5CA9,0x5CAB,0x5CB1, + 0x5CB3,0x5E18,0x5E1A,0x5E16,0x5E15,0x5E1B,0x5E11,0x5E78,0x5E9A,0x5E97, + 0x5E9C,0x5E95,0x5E96,0x5EF6,0x5F26,0x5F27,0x5F29,0x5F80,0x5F81,0x5F7F, + 0x5F7C,0x5FDD,0x5FE0,0x5FFD,0x5FF5,0x5FFF,0x600F,0x6014,0x602F,0x6035, + 0x6016,0x602A,0x6015,0x6021,0x6027,0x6029,0x602B,0x601B,0x6216,0x6215, + 0x623F,0x623E,0x6240,0x627F,0x62C9,0x62CC,0x62C4,0x62BF,0x62C2,0x62B9, + 0x62D2,0x62DB,0x62AB,0x62D3,0x62D4,0x62CB,0x62C8,0x62A8,0x62BD,0x62BC, + 0x62D0,0x62D9,0x62C7,0x62CD,0x62B5,0x62DA,0x62B1,0x62D8,0x62D6,0x62D7, + 0x62C6,0x62AC,0x62CE,0x653E,0x65A7,0x65BC,0x65FA,0x6614,0x6613,0x660C, + 0x6606,0x6602,0x660E,0x6600,0x660F, + /* plane 1, row 46 */ + 1 | (94 << 8), /* first, last */ + 0x6615,0x660A,0x6607,0x670D,0x670B,0x676D,0x678B,0x6795,0x6771, + 0x679C,0x6773,0x6777,0x6787,0x679D,0x6797,0x676F,0x6770,0x677F,0x6789, + 0x677E,0x6790,0x6775,0x679A,0x6793,0x677C,0x676A,0x6772,0x6B23,0x6B66, + 0x6B67,0x6B7F,0x6C13,0x6C1B,0x6CE3,0x6CE8,0x6CF3,0x6CB1,0x6CCC,0x6CE5, + 0x6CB3,0x6CBD,0x6CBE,0x6CBC,0x6CE2,0x6CAB,0x6CD5,0x6CD3,0x6CB8,0x6CC4, + 0x6CB9,0x6CC1,0x6CAE,0x6CD7,0x6CC5,0x6CF1,0x6CBF,0x6CBB,0x6CE1,0x6CDB, + 0x6CCA,0x6CAC,0x6CEF,0x6CDC,0x6CD6,0x6CE0,0x7095,0x708E,0x7092,0x708A, + 0x7099,0x722C,0x722D,0x7238,0x7248,0x7267,0x7269,0x72C0,0x72CE,0x72D9, + 0x72D7,0x72D0,0x73A9,0x73A8,0x739F,0x73AB,0x73A5,0x753D,0x759D,0x7599, + 0x759A,0x7684,0x76C2,0x76F2,0x76F4, + /* plane 1, row 47 */ + 1 | (94 << 8), /* first, last */ + 0x77E5,0x77FD,0x793E,0x7940,0x7941,0x79C9,0x79C8,0x7A7A,0x7A79, + 0x7AFA,0x7CFE,0x7F54,0x7F8C,0x7F8B,0x8005,0x80BA,0x80A5,0x80A2,0x80B1, + 0x80A1,0x80AB,0x80A9,0x80B4,0x80AA,0x80AF,0x81E5,0x81FE,0x820D,0x82B3, + 0x829D,0x8299,0x82AD,0x82BD,0x829F,0x82B9,0x82B1,0x82AC,0x82A5,0x82AF, + 0x82B8,0x82A3,0x82B0,0x82BE,0x82B7,0x864E,0x8671,0x521D,0x8868,0x8ECB, + 0x8FCE,0x8FD4,0x8FD1,0x90B5,0x90B8,0x90B1,0x90B6,0x91C7,0x91D1,0x9577, + 0x9580,0x961C,0x9640,0x963F,0x963B,0x9644,0x9642,0x96B9,0x96E8,0x9752, + 0x975E,0x4E9F,0x4EAD,0x4EAE,0x4FE1,0x4FB5,0x4FAF,0x4FBF,0x4FE0,0x4FD1, + 0x4FCF,0x4FDD,0x4FC3,0x4FB6,0x4FD8,0x4FDF,0x4FCA,0x4FD7,0x4FAE,0x4FD0, + 0x4FC4,0x4FC2,0x4FDA,0x4FCE,0x4FDE, + /* plane 1, row 48 */ + 1 | (94 << 8), /* first, last */ + 0x4FB7,0x5157,0x5192,0x5191,0x51A0,0x524E,0x5243,0x524A,0x524D, + 0x524C,0x524B,0x5247,0x52C7,0x52C9,0x52C3,0x52C1,0x530D,0x5357,0x537B, + 0x539A,0x53DB,0x54AC,0x54C0,0x54A8,0x54CE,0x54C9,0x54B8,0x54A6,0x54B3, + 0x54C7,0x54C2,0x54BD,0x54AA,0x54C1,0x54C4,0x54C8,0x54AF,0x54AB,0x54B1, + 0x54BB,0x54A9,0x54A7,0x54BF,0x56FF,0x5782,0x578B,0x57A0,0x57A3,0x57A2, + 0x57CE,0x57AE,0x5793,0x5955,0x5951,0x594F,0x594E,0x5950,0x59DC,0x59D8, + 0x59FF,0x59E3,0x59E8,0x5A03,0x59E5,0x59EA,0x59DA,0x59E6,0x5A01,0x59FB, + 0x5B69,0x5BA3,0x5BA6,0x5BA4,0x5BA2,0x5BA5,0x5C01,0x5C4E,0x5C4F,0x5C4D, + 0x5C4B,0x5CD9,0x5CD2,0x5DF7,0x5E1D,0x5E25,0x5E1F,0x5E7D,0x5EA0,0x5EA6, + 0x5EFA,0x5F08,0x5F2D,0x5F65,0x5F88, + /* plane 1, row 49 */ + 1 | (94 << 8), /* first, last */ + 0x5F85,0x5F8A,0x5F8B,0x5F87,0x5F8C,0x5F89,0x6012,0x601D,0x6020, + 0x6025,0x600E,0x6028,0x604D,0x6070,0x6068,0x6062,0x6046,0x6043,0x606C, + 0x606B,0x606A,0x6064,0x6241,0x62DC,0x6316,0x6309,0x62FC,0x62ED,0x6301, + 0x62EE,0x62FD,0x6307,0x62F1,0x62F7,0x62EF,0x62EC,0x62FE,0x62F4,0x6311, + 0x6302,0x653F,0x6545,0x65AB,0x65BD,0x65E2,0x6625,0x662D,0x6620,0x6627, + 0x662F,0x661F,0x6628,0x6631,0x6624,0x66F7,0x67FF,0x67D3,0x67F1,0x67D4, + 0x67D0,0x67EC,0x67B6,0x67AF,0x67F5,0x67E9,0x67EF,0x67C4,0x67D1,0x67B4, + 0x67DA,0x67E5,0x67B8,0x67CF,0x67DE,0x67F3,0x67B0,0x67D9,0x67E2,0x67DD, + 0x67D2,0x6B6A,0x6B83,0x6B86,0x6BB5,0x6BD2,0x6BD7,0x6C1F,0x6CC9,0x6D0B, + 0x6D32,0x6D2A,0x6D41,0x6D25,0x6D0C, + /* plane 1, row 50 */ + 1 | (94 << 8), /* first, last */ + 0x6D31,0x6D1E,0x6D17,0x6D3B,0x6D3D,0x6D3E,0x6D36,0x6D1B,0x6CF5, + 0x6D39,0x6D27,0x6D38,0x6D29,0x6D2E,0x6D35,0x6D0E,0x6D2B,0x70AB,0x70BA, + 0x70B3,0x70AC,0x70AF,0x70AD,0x70B8,0x70AE,0x70A4,0x7230,0x7272,0x726F, + 0x7274,0x72E9,0x72E0,0x72E1,0x73B7,0x73CA,0x73BB,0x73B2,0x73CD,0x73C0, + 0x73B3,0x751A,0x752D,0x754F,0x754C,0x754E,0x754B,0x75AB,0x75A4,0x75A5, + 0x75A2,0x75A3,0x7678,0x7686,0x7687,0x7688,0x76C8,0x76C6,0x76C3,0x76C5, + 0x7701,0x76F9,0x76F8,0x7709,0x770B,0x76FE,0x76FC,0x7707,0x77DC,0x7802, + 0x7814,0x780C,0x780D,0x7946,0x7949,0x7948,0x7947,0x79B9,0x79BA,0x79D1, + 0x79D2,0x79CB,0x7A7F,0x7A81,0x7AFF,0x7AFD,0x7C7D,0x7D02,0x7D05,0x7D00, + 0x7D09,0x7D07,0x7D04,0x7D06,0x7F38, + /* plane 1, row 51 */ + 1 | (94 << 8), /* first, last */ + 0x7F8E,0x7FBF,0x8010,0x800D,0x8011,0x8036,0x80D6,0x80E5,0x80DA, + 0x80C3,0x80C4,0x80CC,0x80E1,0x80DB,0x80CE,0x80DE,0x80E4,0x80DD,0x81F4, + 0x8222,0x82E7,0x8303,0x8305,0x82E3,0x82DB,0x82E6,0x8304,0x82E5,0x8302, + 0x8309,0x82D2,0x82D7,0x82F1,0x8301,0x82DC,0x82D4,0x82D1,0x82DE,0x82D3, + 0x82DF,0x82EF,0x8306,0x8650,0x8679,0x867B,0x867A,0x884D,0x886B,0x8981, + 0x89D4,0x8A08,0x8A02,0x8A03,0x8C9E,0x8CA0,0x8D74,0x8D73,0x8DB4,0x8ECD, + 0x8ECC,0x8FF0,0x8FE6,0x8FE2,0x8FEA,0x8FE5,0x8FED,0x8FEB,0x8FE4,0x8FE8, + 0x90CA,0x90CE,0x90C1,0x90C3,0x914B,0x914A,0x91CD,0x9582,0x9650,0x964B, + 0x964C,0x964D,0x9762,0x9769,0x97CB,0x97ED,0x97F3,0x9801,0x98A8,0x98DB, + 0x98DF,0x9996,0x9999,0x4E58,0x4EB3, + /* plane 1, row 52 */ + 1 | (94 << 8), /* first, last */ + 0x500C,0x500D,0x5023,0x4FEF,0x5026,0x5025,0x4FF8,0x5029,0x5016, + 0x5006,0x503C,0x501F,0x501A,0x5012,0x5011,0x4FFA,0x5000,0x5014,0x5028, + 0x4FF1,0x5021,0x500B,0x5019,0x5018,0x4FF3,0x4FEE,0x502D,0x502A,0x4FFE, + 0x502B,0x5009,0x517C,0x51A4,0x51A5,0x51A2,0x51CD,0x51CC,0x51C6,0x51CB, + 0x5256,0x525C,0x5254,0x525B,0x525D,0x532A,0x537F,0x539F,0x539D,0x53DF, + 0x54E8,0x5510,0x5501,0x5537,0x54FC,0x54E5,0x54F2,0x5506,0x54FA,0x5514, + 0x54E9,0x54ED,0x54E1,0x5509,0x54EE,0x54EA,0x54E6,0x5527,0x5507,0x54FD, + 0x550F,0x5703,0x5704,0x57C2,0x57D4,0x57CB,0x57C3,0x5809,0x590F,0x5957, + 0x5958,0x595A,0x5A11,0x5A18,0x5A1C,0x5A1F,0x5A1B,0x5A13,0x59EC,0x5A20, + 0x5A23,0x5A29,0x5A25,0x5A0C,0x5A09, + /* plane 1, row 53 */ + 1 | (94 << 8), /* first, last */ + 0x5B6B,0x5C58,0x5BB0,0x5BB3,0x5BB6,0x5BB4,0x5BAE,0x5BB5,0x5BB9, + 0x5BB8,0x5C04,0x5C51,0x5C55,0x5C50,0x5CED,0x5CFD,0x5CFB,0x5CEA,0x5CE8, + 0x5CF0,0x5CF6,0x5D01,0x5CF4,0x5DEE,0x5E2D,0x5E2B,0x5EAB,0x5EAD,0x5EA7, + 0x5F31,0x5F92,0x5F91,0x5F90,0x6059,0x6063,0x6065,0x6050,0x6055,0x606D, + 0x6069,0x606F,0x6084,0x609F,0x609A,0x608D,0x6094,0x608C,0x6085,0x6096, + 0x6247,0x62F3,0x6308,0x62FF,0x634E,0x633E,0x632F,0x6355,0x6342,0x6346, + 0x634F,0x6349,0x633A,0x6350,0x633D,0x632A,0x632B,0x6328,0x634D,0x634C, + 0x6548,0x6549,0x6599,0x65C1,0x65C5,0x6642,0x6649,0x664F,0x6643,0x6652, + 0x664C,0x6645,0x6641,0x66F8,0x6714,0x6715,0x6717,0x6821,0x6838,0x6848, + 0x6846,0x6853,0x6839,0x6842,0x6854, + /* plane 1, row 54 */ + 1 | (94 << 8), /* first, last */ + 0x6829,0x68B3,0x6817,0x684C,0x6851,0x683D,0x67F4,0x6850,0x6840, + 0x683C,0x6843,0x682A,0x6845,0x6813,0x6818,0x6841,0x6B8A,0x6B89,0x6BB7, + 0x6C23,0x6C27,0x6C28,0x6C26,0x6C24,0x6CF0,0x6D6A,0x6D95,0x6D88,0x6D87, + 0x6D66,0x6D78,0x6D77,0x6D59,0x6D93,0x6D6C,0x6D89,0x6D6E,0x6D5A,0x6D74, + 0x6D69,0x6D8C,0x6D8A,0x6D79,0x6D85,0x6D65,0x6D94,0x70CA,0x70D8,0x70E4, + 0x70D9,0x70C8,0x70CF,0x7239,0x7279,0x72FC,0x72F9,0x72FD,0x72F8,0x72F7, + 0x7386,0x73ED,0x7409,0x73EE,0x73E0,0x73EA,0x73DE,0x7554,0x755D,0x755C, + 0x755A,0x7559,0x75BE,0x75C5,0x75C7,0x75B2,0x75B3,0x75BD,0x75BC,0x75B9, + 0x75C2,0x75B8,0x768B,0x76B0,0x76CA,0x76CD,0x76CE,0x7729,0x771F,0x7720, + 0x7728,0x77E9,0x7830,0x7827,0x7838, + /* plane 1, row 55 */ + 1 | (94 << 8), /* first, last */ + 0x781D,0x7834,0x7837,0x7825,0x782D,0x7820,0x781F,0x7832,0x7955, + 0x7950,0x7960,0x795F,0x7956,0x795E,0x795D,0x7957,0x795A,0x79E4,0x79E3, + 0x79E7,0x79DF,0x79E6,0x79E9,0x79D8,0x7A84,0x7A88,0x7AD9,0x7B06,0x7B11, + 0x7C89,0x7D21,0x7D17,0x7D0B,0x7D0A,0x7D20,0x7D22,0x7D14,0x7D10,0x7D15, + 0x7D1A,0x7D1C,0x7D0D,0x7D19,0x7D1B,0x7F3A,0x7F5F,0x7F94,0x7FC5,0x7FC1, + 0x8006,0x8004,0x8018,0x8015,0x8019,0x8017,0x803D,0x803F,0x80F1,0x8102, + 0x80F0,0x8105,0x80ED,0x80F4,0x8106,0x80F8,0x80F3,0x8108,0x80FD,0x810A, + 0x80FC,0x80EF,0x81ED,0x81EC,0x8200,0x8210,0x822A,0x822B,0x8228,0x822C, + 0x82BB,0x832B,0x8352,0x8354,0x834A,0x8338,0x8350,0x8349,0x8335,0x8334, + 0x834F,0x8332,0x8339,0x8336,0x8317, + /* plane 1, row 56 */ + 1 | (94 << 8), /* first, last */ + 0x8340,0x8331,0x8328,0x8343,0x8654,0x868A,0x86AA,0x8693,0x86A4, + 0x86A9,0x868C,0x86A3,0x869C,0x8870,0x8877,0x8881,0x8882,0x887D,0x8879, + 0x8A18,0x8A10,0x8A0E,0x8A0C,0x8A15,0x8A0A,0x8A17,0x8A13,0x8A16,0x8A0F, + 0x8A11,0x8C48,0x8C7A,0x8C79,0x8CA1,0x8CA2,0x8D77,0x8EAC,0x8ED2,0x8ED4, + 0x8ECF,0x8FB1,0x9001,0x9006,0x8FF7,0x9000,0x8FFA,0x8FF4,0x9003,0x8FFD, + 0x9005,0x8FF8,0x9095,0x90E1,0x90DD,0x90E2,0x9152,0x914D,0x914C,0x91D8, + 0x91DD,0x91D7,0x91DC,0x91D9,0x9583,0x9662,0x9663,0x9661,0x965B,0x965D, + 0x9664,0x9658,0x965E,0x96BB,0x98E2,0x99AC,0x9AA8,0x9AD8,0x9B25,0x9B32, + 0x9B3C,0x4E7E,0x507A,0x507D,0x505C,0x5047,0x5043,0x504C,0x505A,0x5049, + 0x5065,0x5076,0x504E,0x5055,0x5075, + /* plane 1, row 57 */ + 1 | (94 << 8), /* first, last */ + 0x5074,0x5077,0x504F,0x500F,0x506F,0x506D,0x515C,0x5195,0x51F0, + 0x526A,0x526F,0x52D2,0x52D9,0x52D8,0x52D5,0x5310,0x530F,0x5319,0x533F, + 0x5340,0x533E,0x53C3,0x66FC,0x5546,0x556A,0x5566,0x5544,0x555E,0x5561, + 0x5543,0x554A,0x5531,0x5556,0x554F,0x5555,0x552F,0x5564,0x5538,0x552E, + 0x555C,0x552C,0x5563,0x5533,0x5541,0x5557,0x5708,0x570B,0x5709,0x57DF, + 0x5805,0x580A,0x5806,0x57E0,0x57E4,0x57FA,0x5802,0x5835,0x57F7,0x57F9, + 0x5920,0x5962,0x5A36,0x5A41,0x5A49,0x5A66,0x5A6A,0x5A40,0x5A3C,0x5A62, + 0x5A5A,0x5A46,0x5A4A,0x5B70,0x5BC7,0x5BC5,0x5BC4,0x5BC2,0x5BBF,0x5BC6, + 0x5C09,0x5C08,0x5C07,0x5C60,0x5C5C,0x5C5D,0x5D07,0x5D06,0x5D0E,0x5D1B, + 0x5D16,0x5D22,0x5D11,0x5D29,0x5D14, + /* plane 1, row 58 */ + 1 | (94 << 8), /* first, last */ + 0x5D19,0x5D24,0x5D27,0x5D17,0x5DE2,0x5E38,0x5E36,0x5E33,0x5E37, + 0x5EB7,0x5EB8,0x5EB6,0x5EB5,0x5EBE,0x5F35,0x5F37,0x5F57,0x5F6C,0x5F69, + 0x5F6B,0x5F97,0x5F99,0x5F9E,0x5F98,0x5FA1,0x5FA0,0x5F9C,0x607F,0x60A3, + 0x6089,0x60A0,0x60A8,0x60CB,0x60B4,0x60E6,0x60BD,0x60C5,0x60BB,0x60B5, + 0x60DC,0x60BC,0x60D8,0x60D5,0x60C6,0x60DF,0x60B8,0x60DA,0x60C7,0x621A, + 0x621B,0x6248,0x63A0,0x63A7,0x6372,0x6396,0x63A2,0x63A5,0x6377,0x6367, + 0x6398,0x63AA,0x6371,0x63A9,0x6389,0x6383,0x639B,0x636B,0x63A8,0x6384, + 0x6388,0x6399,0x63A1,0x63AC,0x6392,0x638F,0x6380,0x637B,0x6369,0x6368, + 0x637A,0x655D,0x6556,0x6551,0x6559,0x6557,0x555F,0x654F,0x6558,0x6555, + 0x6554,0x659C,0x659B,0x65AC,0x65CF, + /* plane 1, row 59 */ + 1 | (94 << 8), /* first, last */ + 0x65CB,0x65CC,0x65CE,0x665D,0x665A,0x6664,0x6668,0x6666,0x665E, + 0x66F9,0x52D7,0x671B,0x6881,0x68AF,0x68A2,0x6893,0x68B5,0x687F,0x6876, + 0x68B1,0x68A7,0x6897,0x68B0,0x6883,0x68C4,0x68AD,0x6886,0x6885,0x6894, + 0x689D,0x68A8,0x689F,0x68A1,0x6882,0x6B32,0x6BBA,0x6BEB,0x6BEC,0x6C2B, + 0x6D8E,0x6DBC,0x6DF3,0x6DD9,0x6DB2,0x6DE1,0x6DCC,0x6DE4,0x6DFB,0x6DFA, + 0x6E05,0x6DC7,0x6DCB,0x6DAF,0x6DD1,0x6DAE,0x6DDE,0x6DF9,0x6DB8,0x6DF7, + 0x6DF5,0x6DC5,0x6DD2,0x6E1A,0x6DB5,0x6DDA,0x6DEB,0x6DD8,0x6DEA,0x6DF1, + 0x6DEE,0x6DE8,0x6DC6,0x6DC4,0x6DAA,0x6DEC,0x6DBF,0x6DE6,0x70F9,0x7109, + 0x710A,0x70FD,0x70EF,0x723D,0x727D,0x7281,0x731C,0x731B,0x7316,0x7313, + 0x7319,0x7387,0x7405,0x740A,0x7403, + /* plane 1, row 60 */ + 1 | (94 << 8), /* first, last */ + 0x7406,0x73FE,0x740D,0x74E0,0x74F6,0x74F7,0x751C,0x7522,0x7565, + 0x7566,0x7562,0x7570,0x758F,0x75D4,0x75D5,0x75B5,0x75CA,0x75CD,0x768E, + 0x76D4,0x76D2,0x76DB,0x7737,0x773E,0x773C,0x7736,0x7738,0x773A,0x786B, + 0x7843,0x784E,0x7965,0x7968,0x796D,0x79FB,0x7A92,0x7A95,0x7B20,0x7B28, + 0x7B1B,0x7B2C,0x7B26,0x7B19,0x7B1E,0x7B2E,0x7C92,0x7C97,0x7C95,0x7D46, + 0x7D43,0x7D71,0x7D2E,0x7D39,0x7D3C,0x7D40,0x7D30,0x7D33,0x7D44,0x7D2F, + 0x7D42,0x7D32,0x7D31,0x7F3D,0x7F9E,0x7F9A,0x7FCC,0x7FCE,0x7FD2,0x801C, + 0x804A,0x8046,0x812F,0x8116,0x8123,0x812B,0x8129,0x8130,0x8124,0x8202, + 0x8235,0x8237,0x8236,0x8239,0x838E,0x839E,0x8398,0x8378,0x83A2,0x8396, + 0x83BD,0x83AB,0x8392,0x838A,0x8393, + /* plane 1, row 61 */ + 1 | (94 << 8), /* first, last */ + 0x8389,0x83A0,0x8377,0x837B,0x837C,0x8386,0x83A7,0x8655,0x5F6A, + 0x86C7,0x86C0,0x86B6,0x86C4,0x86B5,0x86C6,0x86CB,0x86B1,0x86AF,0x86C9, + 0x8853,0x889E,0x8888,0x88AB,0x8892,0x8896,0x888D,0x888B,0x8993,0x898F, + 0x8A2A,0x8A1D,0x8A23,0x8A25,0x8A31,0x8A2D,0x8A1F,0x8A1B,0x8A22,0x8C49, + 0x8C5A,0x8CA9,0x8CAC,0x8CAB,0x8CA8,0x8CAA,0x8CA7,0x8D67,0x8D66,0x8DBE, + 0x8DBA,0x8EDB,0x8EDF,0x9019,0x900D,0x901A,0x9017,0x9023,0x901F,0x901D, + 0x9010,0x9015,0x901E,0x9020,0x900F,0x9022,0x9016,0x901B,0x9014,0x90E8, + 0x90ED,0x90FD,0x9157,0x91CE,0x91F5,0x91E6,0x91E3,0x91E7,0x91ED,0x91E9, + 0x9589,0x966A,0x9675,0x9673,0x9678,0x9670,0x9674,0x9676,0x9677,0x966C, + 0x96C0,0x96EA,0x96E9,0x7AE0,0x7ADF, + /* plane 1, row 62 */ + 1 | (94 << 8), /* first, last */ + 0x9802,0x9803,0x9B5A,0x9CE5,0x9E75,0x9E7F,0x9EA5,0x9EBB,0x50A2, + 0x508D,0x5085,0x5099,0x5091,0x5080,0x5096,0x5098,0x509A,0x6700,0x51F1, + 0x5272,0x5274,0x5275,0x5269,0x52DE,0x52DD,0x52DB,0x535A,0x53A5,0x557B, + 0x5580,0x55A7,0x557C,0x558A,0x559D,0x5598,0x5582,0x559C,0x55AA,0x5594, + 0x5587,0x558B,0x5583,0x55B3,0x55AE,0x559F,0x553E,0x55B2,0x559A,0x55BB, + 0x55AC,0x55B1,0x557E,0x5589,0x55AB,0x5599,0x570D,0x582F,0x582A,0x5834, + 0x5824,0x5830,0x5831,0x5821,0x581D,0x5820,0x58F9,0x58FA,0x5960,0x5A77, + 0x5A9A,0x5A7F,0x5A92,0x5A9B,0x5AA7,0x5B73,0x5B71,0x5BD2,0x5BCC,0x5BD3, + 0x5BD0,0x5C0A,0x5C0B,0x5C31,0x5D4C,0x5D50,0x5D34,0x5D47,0x5DFD,0x5E45, + 0x5E3D,0x5E40,0x5E43,0x5E7E,0x5ECA, + /* plane 1, row 63 */ + 1 | (94 << 8), /* first, last */ + 0x5EC1,0x5EC2,0x5EC4,0x5F3C,0x5F6D,0x5FA9,0x5FAA,0x5FA8,0x60D1, + 0x60E1,0x60B2,0x60B6,0x60E0,0x611C,0x6123,0x60FA,0x6115,0x60F0,0x60FB, + 0x60F4,0x6168,0x60F1,0x610E,0x60F6,0x6109,0x6100,0x6112,0x621F,0x6249, + 0x63A3,0x638C,0x63CF,0x63C0,0x63E9,0x63C9,0x63C6,0x63CD,0x63D2,0x63E3, + 0x63D0,0x63E1,0x63D6,0x63ED,0x63EE,0x6376,0x63F4,0x63EA,0x63DB,0x6452, + 0x63DA,0x63F9,0x655E,0x6566,0x6562,0x6563,0x6591,0x6590,0x65AF,0x666E, + 0x6670,0x6674,0x6676,0x666F,0x6691,0x667A,0x667E,0x6677,0x66FE,0x66FF, + 0x671F,0x671D,0x68FA,0x68D5,0x68E0,0x68D8,0x68D7,0x6905,0x68DF,0x68F5, + 0x68EE,0x68E7,0x68F9,0x68D2,0x68F2,0x68E3,0x68CB,0x68CD,0x690D,0x6912, + 0x690E,0x68C9,0x68DA,0x696E,0x68FB, + /* plane 1, row 64 */ + 1 | (94 << 8), /* first, last */ + 0x6B3E,0x6B3A,0x6B3D,0x6B98,0x6B96,0x6BBC,0x6BEF,0x6C2E,0x6C2F, + 0x6C2C,0x6E2F,0x6E38,0x6E54,0x6E21,0x6E32,0x6E67,0x6E4A,0x6E20,0x6E25, + 0x6E23,0x6E1B,0x6E5B,0x6E58,0x6E24,0x6E56,0x6E6E,0x6E2D,0x6E26,0x6E6F, + 0x6E34,0x6E4D,0x6E3A,0x6E2C,0x6E43,0x6E1D,0x6E3E,0x6ECB,0x6E89,0x6E19, + 0x6E4E,0x6E63,0x6E44,0x6E72,0x6E69,0x6E5F,0x7119,0x711A,0x7126,0x7130, + 0x7121,0x7136,0x716E,0x711C,0x724C,0x7284,0x7280,0x7336,0x7325,0x7334, + 0x7329,0x743A,0x742A,0x7433,0x7422,0x7425,0x7435,0x7436,0x7434,0x742F, + 0x741B,0x7426,0x7428,0x7525,0x7526,0x756B,0x756A,0x75E2,0x75DB,0x75E3, + 0x75D9,0x75D8,0x75DE,0x75E0,0x767B,0x767C,0x7696,0x7693,0x76B4,0x76DC, + 0x774F,0x77ED,0x785D,0x786C,0x786F, + /* plane 1, row 65 */ + 1 | (94 << 8), /* first, last */ + 0x7A0D,0x7A08,0x7A0B,0x7A05,0x7A00,0x7A98,0x7A97,0x7A96,0x7AE5, + 0x7AE3,0x7B49,0x7B56,0x7B46,0x7B50,0x7B52,0x7B54,0x7B4D,0x7B4B,0x7B4F, + 0x7B51,0x7C9F,0x7CA5,0x7D5E,0x7D50,0x7D68,0x7D55,0x7D2B,0x7D6E,0x7D72, + 0x7D61,0x7D66,0x7D62,0x7D70,0x7D73,0x5584,0x7FD4,0x7FD5,0x800B,0x8052, + 0x8085,0x8155,0x8154,0x814B,0x8151,0x814E,0x8139,0x8146,0x813E,0x814C, + 0x8153,0x8174,0x8212,0x821C,0x83E9,0x8403,0x83F8,0x840D,0x83E0,0x83C5, + 0x840B,0x83C1,0x83EF,0x83F1,0x83F4,0x8457,0x840A,0x83F0,0x840C,0x83CC, + 0x83FD,0x83F2,0x83CA,0x8438,0x840E,0x8404,0x83DC,0x8407,0x83D4,0x83DF, + 0x865B,0x86DF,0x86D9,0x86ED,0x86D4,0x86DB,0x86E4,0x86D0,0x86DE,0x8857, + 0x88C1,0x88C2,0x88B1,0x8983,0x8996, + /* plane 1, row 66 */ + 1 | (94 << 8), /* first, last */ + 0x8A3B,0x8A60,0x8A55,0x8A5E,0x8A3C,0x8A41,0x8A54,0x8A5B,0x8A50, + 0x8A46,0x8A34,0x8A3A,0x8A36,0x8A56,0x8C61,0x8C82,0x8CAF,0x8CBC,0x8CB3, + 0x8CBD,0x8CC1,0x8CBB,0x8CC0,0x8CB4,0x8CB7,0x8CB6,0x8CBF,0x8CB8,0x8D8A, + 0x8D85,0x8D81,0x8DCE,0x8DDD,0x8DCB,0x8DDA,0x8DD1,0x8DCC,0x8DDB,0x8DC6, + 0x8EFB,0x8EF8,0x8EFC,0x8F9C,0x902E,0x9035,0x9031,0x9038,0x9032,0x9036, + 0x9102,0x90F5,0x9109,0x90FE,0x9163,0x9165,0x91CF,0x9214,0x9215,0x9223, + 0x9209,0x921E,0x920D,0x9210,0x9207,0x9211,0x9594,0x958F,0x958B,0x9591, + 0x9593,0x9592,0x958E,0x968A,0x968E,0x968B,0x967D,0x9685,0x9686,0x968D, + 0x9672,0x9684,0x96C1,0x96C5,0x96C4,0x96C6,0x96C7,0x96EF,0x96F2,0x97CC, + 0x9805,0x9806,0x9808,0x98E7,0x98EA, + /* plane 1, row 67 */ + 1 | (94 << 8), /* first, last */ + 0x98EF,0x98E9,0x98F2,0x98ED,0x99AE,0x99AD,0x9EC3,0x9ECD,0x9ED1, + 0x4E82,0x50AD,0x50B5,0x50B2,0x50B3,0x50C5,0x50BE,0x50AC,0x50B7,0x50BB, + 0x50AF,0x50C7,0x527F,0x5277,0x527D,0x52DF,0x52E6,0x52E4,0x52E2,0x52E3, + 0x532F,0x55DF,0x55E8,0x55D3,0x55E6,0x55CE,0x55DC,0x55C7,0x55D1,0x55E3, + 0x55E4,0x55EF,0x55DA,0x55E1,0x55C5,0x55C6,0x55E5,0x55C9,0x5712,0x5713, + 0x585E,0x5851,0x5858,0x5857,0x585A,0x5854,0x586B,0x584C,0x586D,0x584A, + 0x5862,0x5852,0x584B,0x5967,0x5AC1,0x5AC9,0x5ACC,0x5ABE,0x5ABD,0x5ABC, + 0x5AB3,0x5AC2,0x5AB2,0x5D69,0x5D6F,0x5E4C,0x5E79,0x5EC9,0x5EC8,0x5F12, + 0x5F59,0x5FAC,0x5FAE,0x611A,0x610F,0x6148,0x611F,0x60F3,0x611B,0x60F9, + 0x6101,0x6108,0x614E,0x614C,0x6144, + /* plane 1, row 68 */ + 1 | (94 << 8), /* first, last */ + 0x614D,0x613E,0x6134,0x6127,0x610D,0x6106,0x6137,0x6221,0x6222, + 0x6413,0x643E,0x641E,0x642A,0x642D,0x643D,0x642C,0x640F,0x641C,0x6414, + 0x640D,0x6436,0x6416,0x6417,0x6406,0x656C,0x659F,0x65B0,0x6697,0x6689, + 0x6687,0x6688,0x6696,0x6684,0x6698,0x668D,0x6703,0x6994,0x696D,0x695A, + 0x6977,0x6960,0x6954,0x6975,0x6930,0x6982,0x694A,0x6968,0x696B,0x695E, + 0x6953,0x6979,0x6986,0x695D,0x6963,0x695B,0x6B47,0x6B72,0x6BC0,0x6BBF, + 0x6BD3,0x6BFD,0x6EA2,0x6EAF,0x6ED3,0x6EB6,0x6EC2,0x6E90,0x6E9D,0x6EC7, + 0x6EC5,0x6EA5,0x6E98,0x6EBC,0x6EBA,0x6EAB,0x6ED1,0x6E96,0x6E9C,0x6EC4, + 0x6ED4,0x6EAA,0x6EA7,0x6EB4,0x714E,0x7159,0x7169,0x7164,0x7149,0x7167, + 0x715C,0x716C,0x7166,0x714C,0x7165, + /* plane 1, row 69 */ + 1 | (94 << 8), /* first, last */ + 0x715E,0x7146,0x7168,0x7156,0x723A,0x7252,0x7337,0x7345,0x733F, + 0x733E,0x746F,0x745A,0x7455,0x745F,0x745E,0x7441,0x743F,0x7459,0x745B, + 0x745C,0x7576,0x7578,0x7600,0x75F0,0x7601,0x75F2,0x75F1,0x75FA,0x75FF, + 0x75F4,0x75F3,0x76DE,0x76DF,0x775B,0x776B,0x7766,0x775E,0x7763,0x7779, + 0x776A,0x776C,0x775C,0x7765,0x7768,0x7762,0x77EE,0x788E,0x78B0,0x7897, + 0x7898,0x788C,0x7889,0x787C,0x7891,0x7893,0x787F,0x797A,0x797F,0x7981, + 0x842C,0x79BD,0x7A1C,0x7A1A,0x7A20,0x7A14,0x7A1F,0x7A1E,0x7A9F,0x7AA0, + 0x7B77,0x7BC0,0x7B60,0x7B6E,0x7B67,0x7CB1,0x7CB3,0x7CB5,0x7D93,0x7D79, + 0x7D91,0x7D81,0x7D8F,0x7D5B,0x7F6E,0x7F69,0x7F6A,0x7F72,0x7FA9,0x7FA8, + 0x7FA4,0x8056,0x8058,0x8086,0x8084, + /* plane 1, row 70 */ + 1 | (94 << 8), /* first, last */ + 0x8171,0x8170,0x8178,0x8165,0x816E,0x8173,0x816B,0x8179,0x817A, + 0x8166,0x8205,0x8247,0x8482,0x8477,0x843D,0x8431,0x8475,0x8466,0x846B, + 0x8449,0x846C,0x845B,0x843C,0x8435,0x8461,0x8463,0x8469,0x846D,0x8446, + 0x865E,0x865C,0x865F,0x86F9,0x8713,0x8708,0x8707,0x8700,0x86FE,0x86FB, + 0x8702,0x8703,0x8706,0x870A,0x8859,0x88DF,0x88D4,0x88D9,0x88DC,0x88D8, + 0x88DD,0x88E1,0x88CA,0x88D5,0x88D2,0x899C,0x89E3,0x8A6B,0x8A72,0x8A73, + 0x8A66,0x8A69,0x8A70,0x8A87,0x8A7C,0x8A63,0x8AA0,0x8A71,0x8A85,0x8A6D, + 0x8A62,0x8A6E,0x8A6C,0x8A79,0x8A7B,0x8A3E,0x8A68,0x8C62,0x8C8A,0x8C89, + 0x8CCA,0x8CC7,0x8CC8,0x8CC4,0x8CB2,0x8CC3,0x8CC2,0x8CC5,0x8DE1,0x8DDF, + 0x8DE8,0x8DEF,0x8DF3,0x8DFA,0x8DEA, + /* plane 1, row 71 */ + 1 | (94 << 8), /* first, last */ + 0x8DE4,0x8DE6,0x8EB2,0x8F03,0x8F09,0x8EFE,0x8F0A,0x8F9F,0x8FB2, + 0x904B,0x904A,0x9053,0x9042,0x9054,0x903C,0x9055,0x9050,0x9047,0x904F, + 0x904E,0x904D,0x9051,0x903E,0x9041,0x9112,0x9117,0x916C,0x916A,0x9169, + 0x91C9,0x9237,0x9257,0x9238,0x923D,0x9240,0x923E,0x925B,0x924B,0x9264, + 0x9251,0x9234,0x9249,0x924D,0x9245,0x9239,0x923F,0x925A,0x9598,0x9698, + 0x9694,0x9695,0x96CD,0x96CB,0x96C9,0x96CA,0x96F7,0x96FB,0x96F9,0x96F6, + 0x9756,0x9774,0x9776,0x9810,0x9811,0x9813,0x980A,0x9812,0x980C,0x98FC, + 0x98F4,0x98FD,0x98FE,0x99B3,0x99B1,0x99B4,0x9AE1,0x9CE9,0x9E82,0x9F0E, + 0x9F13,0x9F20,0x50E7,0x50EE,0x50E5,0x50D6,0x50ED,0x50DA,0x50D5,0x50CF, + 0x50D1,0x50F1,0x50CE,0x50E9,0x5162, + /* plane 1, row 72 */ + 1 | (94 << 8), /* first, last */ + 0x51F3,0x5283,0x5282,0x5331,0x53AD,0x55FE,0x5600,0x561B,0x5617, + 0x55FD,0x5614,0x5606,0x5609,0x560D,0x560E,0x55F7,0x5616,0x561F,0x5608, + 0x5610,0x55F6,0x5718,0x5716,0x5875,0x587E,0x5883,0x5893,0x588A,0x5879, + 0x5885,0x587D,0x58FD,0x5925,0x5922,0x5924,0x596A,0x5969,0x5AE1,0x5AE6, + 0x5AE9,0x5AD7,0x5AD6,0x5AD8,0x5AE3,0x5B75,0x5BDE,0x5BE7,0x5BE1,0x5BE5, + 0x5BE6,0x5BE8,0x5BE2,0x5BE4,0x5BDF,0x5C0D,0x5C62,0x5D84,0x5D87,0x5E5B, + 0x5E63,0x5E55,0x5E57,0x5E54,0x5ED3,0x5ED6,0x5F0A,0x5F46,0x5F70,0x5FB9, + 0x6147,0x613F,0x614B,0x6177,0x6162,0x6163,0x615F,0x615A,0x6158,0x6175, + 0x622A,0x6487,0x6458,0x6454,0x64A4,0x6478,0x645F,0x647A,0x6451,0x6467, + 0x6434,0x646D,0x647B,0x6572,0x65A1, + /* plane 1, row 73 */ + 1 | (94 << 8), /* first, last */ + 0x65D7,0x65D6,0x66A2,0x66A8,0x669D,0x699C,0x69A8,0x6995,0x69C1, + 0x69AE,0x69D3,0x69CB,0x699B,0x69B7,0x69BB,0x69AB,0x69B4,0x69D0,0x69CD, + 0x69AD,0x69CC,0x69A6,0x69C3,0x69A3,0x6B49,0x6B4C,0x6C33,0x6F33,0x6F14, + 0x6EFE,0x6F13,0x6EF4,0x6F29,0x6F3E,0x6F20,0x6F2C,0x6F0F,0x6F02,0x6F22, + 0x6EFF,0x6EEF,0x6F06,0x6F31,0x6F38,0x6F32,0x6F23,0x6F15,0x6F2B,0x6F2F, + 0x6F88,0x6F2A,0x6EEC,0x6F01,0x6EF2,0x6ECC,0x6EF7,0x7194,0x7199,0x717D, + 0x718A,0x7184,0x7192,0x723E,0x7292,0x7296,0x7344,0x7350,0x7464,0x7463, + 0x746A,0x7470,0x746D,0x7504,0x7591,0x7627,0x760D,0x760B,0x7609,0x7613, + 0x76E1,0x76E3,0x7784,0x777D,0x777F,0x7761,0x78C1,0x789F,0x78A7,0x78B3, + 0x78A9,0x78A3,0x798E,0x798F,0x798D, + /* plane 1, row 74 */ + 1 | (94 << 8), /* first, last */ + 0x7A2E,0x7A31,0x7AAA,0x7AA9,0x7AED,0x7AEF,0x7BA1,0x7B95,0x7B8B, + 0x7B75,0x7B97,0x7B9D,0x7B94,0x7B8F,0x7BB8,0x7B87,0x7B84,0x7CB9,0x7CBD, + 0x7CBE,0x7DBB,0x7DB0,0x7D9C,0x7DBD,0x7DBE,0x7DA0,0x7DCA,0x7DB4,0x7DB2, + 0x7DB1,0x7DBA,0x7DA2,0x7DBF,0x7DB5,0x7DB8,0x7DAD,0x7DD2,0x7DC7,0x7DAC, + 0x7F70,0x7FE0,0x7FE1,0x7FDF,0x805E,0x805A,0x8087,0x8150,0x8180,0x818F, + 0x8188,0x818A,0x817F,0x8182,0x81E7,0x81FA,0x8207,0x8214,0x821E,0x824B, + 0x84C9,0x84BF,0x84C6,0x84C4,0x8499,0x849E,0x84B2,0x849C,0x84CB,0x84B8, + 0x84C0,0x84D3,0x8490,0x84BC,0x84D1,0x84CA,0x873F,0x871C,0x873B,0x8722, + 0x8725,0x8734,0x8718,0x8755,0x8737,0x8729,0x88F3,0x8902,0x88F4,0x88F9, + 0x88F8,0x88FD,0x88E8,0x891A,0x88EF, + /* plane 1, row 75 */ + 1 | (94 << 8), /* first, last */ + 0x8AA6,0x8A8C,0x8A9E,0x8AA3,0x8A8D,0x8AA1,0x8A93,0x8AA4,0x8AAA, + 0x8AA5,0x8AA8,0x8A98,0x8A91,0x8A9A,0x8AA7,0x8C6A,0x8C8D,0x8C8C,0x8CD3, + 0x8CD1,0x8CD2,0x8D6B,0x8D99,0x8D95,0x8DFC,0x8F14,0x8F12,0x8F15,0x8F13, + 0x8FA3,0x9060,0x9058,0x905C,0x9063,0x9059,0x905E,0x9062,0x905D,0x905B, + 0x9119,0x9118,0x911E,0x9175,0x9178,0x9177,0x9174,0x9278,0x92AC,0x9280, + 0x9285,0x9298,0x9296,0x927B,0x9293,0x929C,0x92A8,0x927C,0x9291,0x95A1, + 0x95A8,0x95A9,0x95A3,0x95A5,0x95A4,0x9699,0x969C,0x969B,0x96CC,0x96D2, + 0x9700,0x977C,0x9785,0x97F6,0x9817,0x9818,0x98AF,0x98B1,0x9903,0x9905, + 0x990C,0x9909,0x99C1,0x9AAF,0x9AB0,0x9AE6,0x9B41,0x9B42,0x9CF4,0x9CF6, + 0x9CF3,0x9EBC,0x9F3B,0x9F4A,0x5104, + /* plane 1, row 76 */ + 1 | (94 << 8), /* first, last */ + 0x5100,0x50FB,0x50F5,0x50F9,0x5102,0x5108,0x5109,0x5105,0x51DC, + 0x5287,0x5288,0x5289,0x528D,0x528A,0x52F0,0x53B2,0x562E,0x563B,0x5639, + 0x5632,0x563F,0x5634,0x5629,0x5653,0x564E,0x5657,0x5674,0x5636,0x562F, + 0x5630,0x5880,0x589F,0x589E,0x58B3,0x589C,0x58AE,0x58A9,0x58A6,0x596D, + 0x5B09,0x5AFB,0x5B0B,0x5AF5,0x5B0C,0x5B08,0x5BEE,0x5BEC,0x5BE9,0x5BEB, + 0x5C64,0x5C65,0x5D9D,0x5D94,0x5E62,0x5E5F,0x5E61,0x5EE2,0x5EDA,0x5EDF, + 0x5EDD,0x5EE3,0x5EE0,0x5F48,0x5F71,0x5FB7,0x5FB5,0x6176,0x6167,0x616E, + 0x615D,0x6155,0x6182,0x617C,0x6170,0x616B,0x617E,0x61A7,0x6190,0x61AB, + 0x618E,0x61AC,0x619A,0x61A4,0x6194,0x61AE,0x622E,0x6469,0x646F,0x6479, + 0x649E,0x64B2,0x6488,0x6490,0x64B0, + /* plane 1, row 77 */ + 1 | (94 << 8), /* first, last */ + 0x64A5,0x6493,0x6495,0x64A9,0x6492,0x64AE,0x64AD,0x64AB,0x649A, + 0x64AC,0x6499,0x64A2,0x64B3,0x6575,0x6577,0x6578,0x66AE,0x66AB,0x66B4, + 0x66B1,0x6A23,0x6A1F,0x69E8,0x6A01,0x6A1E,0x6A19,0x69FD,0x6A21,0x6A13, + 0x6A0A,0x69F3,0x6A02,0x6A05,0x69ED,0x6A11,0x6B50,0x6B4E,0x6BA4,0x6BC5, + 0x6BC6,0x6F3F,0x6F7C,0x6F84,0x6F51,0x6F66,0x6F54,0x6F86,0x6F6D,0x6F5B, + 0x6F78,0x6F6E,0x6F8E,0x6F7A,0x6F70,0x6F64,0x6F97,0x6F58,0x6ED5,0x6F6F, + 0x6F60,0x6F5F,0x719F,0x71AC,0x71B1,0x71A8,0x7256,0x729B,0x734E,0x7357, + 0x7469,0x748B,0x7483,0x747E,0x7480,0x757F,0x7620,0x7629,0x761F,0x7624, + 0x7626,0x7621,0x7622,0x769A,0x76BA,0x76E4,0x778E,0x7787,0x778C,0x7791, + 0x778B,0x78CB,0x78C5,0x78BA,0x78CA, + /* plane 1, row 78 */ + 1 | (94 << 8), /* first, last */ + 0x78BE,0x78D5,0x78BC,0x78D0,0x7A3F,0x7A3C,0x7A40,0x7A3D,0x7A37, + 0x7A3B,0x7AAF,0x7AAE,0x7BAD,0x7BB1,0x7BC4,0x7BB4,0x7BC6,0x7BC7,0x7BC1, + 0x7BA0,0x7BCC,0x7CCA,0x7DE0,0x7DF4,0x7DEF,0x7DFB,0x7DD8,0x7DEC,0x7DDD, + 0x7DE8,0x7DE3,0x7DDA,0x7DDE,0x7DE9,0x7D9E,0x7DD9,0x7DF2,0x7DF9,0x7F75, + 0x7F77,0x7FAF,0x7FE9,0x8026,0x819B,0x819C,0x819D,0x81A0,0x819A,0x8198, + 0x8517,0x853D,0x851A,0x84EE,0x852C,0x852D,0x8513,0x8511,0x8523,0x8521, + 0x8514,0x84EC,0x8525,0x84FF,0x8506,0x8782,0x8774,0x8776,0x8760,0x8766, + 0x8778,0x8768,0x8759,0x8757,0x874C,0x8753,0x885B,0x885D,0x8910,0x8907, + 0x8912,0x8913,0x8915,0x890A,0x8ABC,0x8AD2,0x8AC7,0x8AC4,0x8A95,0x8ACB, + 0x8AF8,0x8AB2,0x8AC9,0x8AC2,0x8ABF, + /* plane 1, row 79 */ + 1 | (94 << 8), /* first, last */ + 0x8AB0,0x8AD6,0x8ACD,0x8AB6,0x8AB9,0x8ADB,0x8C4C,0x8C4E,0x8C6C, + 0x8CE0,0x8CDE,0x8CE6,0x8CE4,0x8CEC,0x8CED,0x8CE2,0x8CE3,0x8CDC,0x8CEA, + 0x8CE1,0x8D6D,0x8D9F,0x8DA3,0x8E2B,0x8E10,0x8E1D,0x8E22,0x8E0F,0x8E29, + 0x8E1F,0x8E21,0x8E1E,0x8EBA,0x8F1D,0x8F1B,0x8F1F,0x8F29,0x8F26,0x8F2A, + 0x8F1C,0x8F1E,0x8F25,0x9069,0x906E,0x9068,0x906D,0x9077,0x9130,0x912D, + 0x9127,0x9131,0x9187,0x9189,0x918B,0x9183,0x92C5,0x92BB,0x92B7,0x92EA, + 0x92E4,0x92C1,0x92B3,0x92BC,0x92D2,0x92C7,0x92F0,0x92B2,0x95AD,0x95B1, + 0x9704,0x9706,0x9707,0x9709,0x9760,0x978D,0x978B,0x978F,0x9821,0x982B, + 0x981C,0x98B3,0x990A,0x9913,0x9912,0x9918,0x99DD,0x99D0,0x99DF,0x99DB, + 0x99D1,0x99D5,0x99D2,0x99D9,0x9AB7, + /* plane 1, row 80 */ + 1 | (94 << 8), /* first, last */ + 0x9AEE,0x9AEF,0x9B27,0x9B45,0x9B44,0x9B77,0x9B6F,0x9D06,0x9D09, + 0x9D03,0x9EA9,0x9EBE,0x9ECE,0x58A8,0x9F52,0x5112,0x5118,0x5114,0x5110, + 0x5115,0x5180,0x51AA,0x51DD,0x5291,0x5293,0x52F3,0x5659,0x566B,0x5679, + 0x5669,0x5664,0x5678,0x566A,0x5668,0x5665,0x5671,0x566F,0x566C,0x5662, + 0x5676,0x58C1,0x58BE,0x58C7,0x58C5,0x596E,0x5B1D,0x5B34,0x5B78,0x5BF0, + 0x5C0E,0x5F4A,0x61B2,0x6191,0x61A9,0x618A,0x61CD,0x61B6,0x61BE,0x61CA, + 0x61C8,0x6230,0x64C5,0x64C1,0x64CB,0x64BB,0x64BC,0x64DA,0x64C4,0x64C7, + 0x64C2,0x64CD,0x64BF,0x64D2,0x64D4,0x64BE,0x6574,0x66C6,0x66C9,0x66B9, + 0x66C4,0x66C7,0x66B8,0x6A3D,0x6A38,0x6A3A,0x6A59,0x6A6B,0x6A58,0x6A39, + 0x6A44,0x6A62,0x6A61,0x6A4B,0x6A47, + /* plane 1, row 81 */ + 1 | (94 << 8), /* first, last */ + 0x6A35,0x6A5F,0x6A48,0x6B59,0x6B77,0x6C05,0x6FC2,0x6FB1,0x6FA1, + 0x6FC3,0x6FA4,0x6FC1,0x6FA7,0x6FB3,0x6FC0,0x6FB9,0x6FB6,0x6FA6,0x6FA0, + 0x6FB4,0x71BE,0x71C9,0x71D0,0x71D2,0x71C8,0x71D5,0x71B9,0x71CE,0x71D9, + 0x71DC,0x71C3,0x71C4,0x7368,0x749C,0x74A3,0x7498,0x749F,0x749E,0x74E2, + 0x750C,0x750D,0x7634,0x7638,0x763A,0x76E7,0x76E5,0x77A0,0x779E,0x779F, + 0x77A5,0x78E8,0x78DA,0x78EC,0x78E7,0x79A6,0x7A4D,0x7A4E,0x7A46,0x7A4C, + 0x7A4B,0x7ABA,0x7BD9,0x7C11,0x7BC9,0x7BE4,0x7BDB,0x7BE1,0x7BE9,0x7BE6, + 0x7CD5,0x7CD6,0x7E0A,0x7E11,0x7E08,0x7E1B,0x7E23,0x7E1E,0x7E1D,0x7E09, + 0x7E10,0x7F79,0x7FB2,0x7FF0,0x7FF1,0x7FEE,0x8028,0x81B3,0x81A9,0x81A8, + 0x81FB,0x8208,0x8258,0x8259,0x854A, + /* plane 1, row 82 */ + 1 | (94 << 8), /* first, last */ + 0x8559,0x8548,0x8568,0x8569,0x8543,0x8549,0x856D,0x856A,0x855E, + 0x8783,0x879F,0x879E,0x87A2,0x878D,0x8861,0x892A,0x8932,0x8925,0x892B, + 0x8921,0x89AA,0x89A6,0x8AE6,0x8AFA,0x8AEB,0x8AF1,0x8B00,0x8ADC,0x8AE7, + 0x8AEE,0x8AFE,0x8B01,0x8B02,0x8AF7,0x8AED,0x8AF3,0x8AF6,0x8AFC,0x8C6B, + 0x8C6D,0x8C93,0x8CF4,0x8E44,0x8E31,0x8E34,0x8E42,0x8E39,0x8E35,0x8F3B, + 0x8F2F,0x8F38,0x8F33,0x8FA8,0x8FA6,0x9075,0x9074,0x9078,0x9072,0x907C, + 0x907A,0x9134,0x9192,0x9320,0x9336,0x92F8,0x9333,0x932F,0x9322,0x92FC, + 0x932B,0x9304,0x931A,0x9310,0x9326,0x9321,0x9315,0x932E,0x9319,0x95BB, + 0x96A7,0x96A8,0x96AA,0x96D5,0x970E,0x9711,0x9716,0x970D,0x9713,0x970F, + 0x975B,0x975C,0x9766,0x9798,0x9830, + /* plane 1, row 83 */ + 1 | (94 << 8), /* first, last */ + 0x9838,0x983B,0x9837,0x982D,0x9839,0x9824,0x9910,0x9928,0x991E, + 0x991B,0x9921,0x991A,0x99ED,0x99E2,0x99F1,0x9AB8,0x9ABC,0x9AFB,0x9AED, + 0x9B28,0x9B91,0x9D15,0x9D23,0x9D26,0x9D28,0x9D12,0x9D1B,0x9ED8,0x9ED4, + 0x9F8D,0x9F9C,0x512A,0x511F,0x5121,0x5132,0x52F5,0x568E,0x5680,0x5690, + 0x5685,0x5687,0x568F,0x58D5,0x58D3,0x58D1,0x58CE,0x5B30,0x5B2A,0x5B24, + 0x5B7A,0x5C37,0x5C68,0x5DBC,0x5DBA,0x5DBD,0x5DB8,0x5E6B,0x5F4C,0x5FBD, + 0x61C9,0x61C2,0x61C7,0x61E6,0x61CB,0x6232,0x6234,0x64CE,0x64CA,0x64D8, + 0x64E0,0x64F0,0x64E6,0x64EC,0x64F1,0x64E2,0x64ED,0x6582,0x6583,0x66D9, + 0x66D6,0x6A80,0x6A94,0x6A84,0x6AA2,0x6A9C,0x6ADB,0x6AA3,0x6A7E,0x6A97, + 0x6A90,0x6AA0,0x6B5C,0x6BAE,0x6BDA, + /* plane 1, row 84 */ + 1 | (94 << 8), /* first, last */ + 0x6C08,0x6FD8,0x6FF1,0x6FDF,0x6FE0,0x6FDB,0x6FE4,0x6FEB,0x6FEF, + 0x6F80,0x6FEC,0x6FE1,0x6FE9,0x6FD5,0x6FEE,0x6FF0,0x71E7,0x71DF,0x71EE, + 0x71E6,0x71E5,0x71ED,0x71EC,0x71F4,0x71E0,0x7235,0x7246,0x7370,0x7372, + 0x74A9,0x74B0,0x74A6,0x74A8,0x7646,0x7642,0x764C,0x76EA,0x77B3,0x77AA, + 0x77B0,0x77AC,0x77A7,0x77AD,0x77EF,0x78F7,0x78FA,0x78F4,0x78EF,0x7901, + 0x79A7,0x79AA,0x7A57,0x7ABF,0x7C07,0x7C0D,0x7BFE,0x7BF7,0x7C0C,0x7BE0, + 0x7CE0,0x7CDC,0x7CDE,0x7CE2,0x7CDF,0x7CD9,0x7CDD,0x7E2E,0x7E3E,0x7E46, + 0x7E37,0x7E32,0x7E43,0x7E2B,0x7E3D,0x7E31,0x7E45,0x7E41,0x7E34,0x7E39, + 0x7E48,0x7E35,0x7E3F,0x7E2F,0x7F44,0x7FF3,0x7FFC,0x8071,0x8072,0x8070, + 0x806F,0x8073,0x81C6,0x81C3,0x81BA, + /* plane 1, row 85 */ + 1 | (94 << 8), /* first, last */ + 0x81C2,0x81C0,0x81BF,0x81BD,0x81C9,0x81BE,0x81E8,0x8209,0x8271, + 0x85AA,0x8584,0x857E,0x859C,0x8591,0x8594,0x85AF,0x859B,0x8587,0x85A8, + 0x858A,0x85A6,0x8667,0x87C0,0x87D1,0x87B3,0x87D2,0x87C6,0x87AB,0x87BB, + 0x87BA,0x87C8,0x87CB,0x893B,0x8936,0x8944,0x8938,0x893D,0x89AC,0x8B0E, + 0x8B17,0x8B19,0x8B1B,0x8B0A,0x8B20,0x8B1D,0x8B04,0x8B10,0x8C41,0x8C3F, + 0x8C73,0x8CFA,0x8CFD,0x8CFC,0x8CF8,0x8CFB,0x8DA8,0x8E49,0x8E4B,0x8E48, + 0x8E4A,0x8F44,0x8F3E,0x8F42,0x8F45,0x8F3F,0x907F,0x907D,0x9084,0x9081, + 0x9082,0x9080,0x9139,0x91A3,0x919E,0x919C,0x934D,0x9382,0x9328,0x9375, + 0x934A,0x9365,0x934B,0x9318,0x937E,0x936C,0x935B,0x9370,0x935A,0x9354, + 0x95CA,0x95CB,0x95CC,0x95C8,0x95C6, + /* plane 1, row 86 */ + 1 | (94 << 8), /* first, last */ + 0x96B1,0x96B8,0x96D6,0x971C,0x971E,0x97A0,0x97D3,0x9846,0x98B6, + 0x9935,0x9A01,0x99FF,0x9BAE,0x9BAB,0x9BAA,0x9BAD,0x9D3B,0x9D3F,0x9E8B, + 0x9ECF,0x9EDE,0x9EDC,0x9EDD,0x9EDB,0x9F3E,0x9F4B,0x53E2,0x5695,0x56AE, + 0x58D9,0x58D8,0x5B38,0x5F5E,0x61E3,0x6233,0x64F4,0x64F2,0x64FE,0x6506, + 0x64FA,0x64FB,0x64F7,0x65B7,0x66DC,0x6726,0x6AB3,0x6AAC,0x6AC3,0x6ABB, + 0x6AB8,0x6AC2,0x6AAE,0x6AAF,0x6B5F,0x6B78,0x6BAF,0x7009,0x700B,0x6FFE, + 0x7006,0x6FFA,0x7011,0x700F,0x71FB,0x71FC,0x71FE,0x71F8,0x7377,0x7375, + 0x74A7,0x74BF,0x7515,0x7656,0x7658,0x7652,0x77BD,0x77BF,0x77BB,0x77BC, + 0x790E,0x79AE,0x7A61,0x7A62,0x7A60,0x7AC4,0x7AC5,0x7C2B,0x7C27,0x7C2A, + 0x7C1E,0x7C23,0x7C21,0x7CE7,0x7E54, + /* plane 1, row 87 */ + 1 | (94 << 8), /* first, last */ + 0x7E55,0x7E5E,0x7E5A,0x7E61,0x7E52,0x7E59,0x7F48,0x7FF9,0x7FFB, + 0x8077,0x8076,0x81CD,0x81CF,0x820A,0x85CF,0x85A9,0x85CD,0x85D0,0x85C9, + 0x85B0,0x85BA,0x85B9,0x87EF,0x87EC,0x87F2,0x87E0,0x8986,0x89B2,0x89F4, + 0x8B28,0x8B39,0x8B2C,0x8B2B,0x8C50,0x8D05,0x8E59,0x8E63,0x8E66,0x8E64, + 0x8E5F,0x8E55,0x8EC0,0x8F49,0x8F4D,0x9087,0x9083,0x9088,0x91AB,0x91AC, + 0x91D0,0x9394,0x938A,0x9396,0x93A2,0x93B3,0x93AE,0x93AC,0x93B0,0x9398, + 0x939A,0x9397,0x95D4,0x95D6,0x95D0,0x95D5,0x96E2,0x96DC,0x96D9,0x96DB, + 0x96DE,0x9724,0x97A3,0x97A6,0x97AD,0x97F9,0x984D,0x984F,0x984C,0x984E, + 0x9853,0x98BA,0x993E,0x993F,0x993D,0x992E,0x99A5,0x9A0E,0x9AC1,0x9B03, + 0x9B06,0x9B4F,0x9B4E,0x9B4D,0x9BCA, + /* plane 1, row 88 */ + 1 | (94 << 8), /* first, last */ + 0x9BC9,0x9BFD,0x9BC8,0x9BC0,0x9D51,0x9D5D,0x9D60,0x9EE0,0x9F15, + 0x9F2C,0x5133,0x56A5,0x56A8,0x58DE,0x58DF,0x58E2,0x5BF5,0x9F90,0x5EEC, + 0x61F2,0x61F7,0x61F6,0x61F5,0x6500,0x650F,0x66E0,0x66DD,0x6AE5,0x6ADD, + 0x6ADA,0x6AD3,0x701B,0x701F,0x7028,0x701A,0x701D,0x7015,0x7018,0x7206, + 0x720D,0x7258,0x72A2,0x7378,0x737A,0x74BD,0x74CA,0x74E3,0x7587,0x7586, + 0x765F,0x7661,0x77C7,0x7919,0x79B1,0x7A6B,0x7A69,0x7C3E,0x7C3F,0x7C38, + 0x7C3D,0x7C37,0x7C40,0x7E6B,0x7E6D,0x7E79,0x7E69,0x7E6A,0x7E73,0x7F85, + 0x7FB6,0x7FB9,0x7FB8,0x81D8,0x85E9,0x85DD,0x85EA,0x85D5,0x85E4,0x85E5, + 0x85F7,0x87FB,0x8805,0x880D,0x87F9,0x87FE,0x8960,0x895F,0x8956,0x895E, + 0x8B41,0x8B5C,0x8B58,0x8B49,0x8B5A, + /* plane 1, row 89 */ + 1 | (94 << 8), /* first, last */ + 0x8B4E,0x8B4F,0x8B46,0x8B59,0x8D08,0x8D0A,0x8E7C,0x8E72,0x8E87, + 0x8E76,0x8E6C,0x8E7A,0x8E74,0x8F54,0x8F4E,0x8FAD,0x908A,0x908B,0x91B1, + 0x91AE,0x93E1,0x93D1,0x93DF,0x93C3,0x93C8,0x93DC,0x93DD,0x93D6,0x93E2, + 0x93CD,0x93D8,0x93E4,0x93D7,0x93E8,0x95DC,0x96B4,0x96E3,0x972A,0x9727, + 0x9761,0x97DC,0x97FB,0x985E,0x9858,0x985B,0x98BC,0x9945,0x9949,0x9A16, + 0x9A19,0x9B0D,0x9BE8,0x9BE7,0x9BD6,0x9BDB,0x9D89,0x9D61,0x9D72,0x9D6A, + 0x9D6C,0x9E92,0x9E97,0x9E93,0x9EB4,0x52F8,0x56B7,0x56B6,0x56B4,0x56BC, + 0x58E4,0x5B40,0x5B43,0x5B7D,0x5BF6,0x5DC9,0x61F8,0x61FA,0x6518,0x6514, + 0x6519,0x66E6,0x6727,0x6AEC,0x703E,0x7030,0x7032,0x7210,0x737B,0x74CF, + 0x7662,0x7665,0x7926,0x792A,0x792C, + /* plane 1, row 90 */ + 1 | (94 << 8), /* first, last */ + 0x792B,0x7AC7,0x7AF6,0x7C4C,0x7C43,0x7C4D,0x7CEF,0x7CF0,0x8FAE, + 0x7E7D,0x7E7C,0x7E82,0x7F4C,0x8000,0x81DA,0x8266,0x85FB,0x85F9,0x8611, + 0x85FA,0x8606,0x860B,0x8607,0x860A,0x8814,0x8815,0x8964,0x89BA,0x89F8, + 0x8B70,0x8B6C,0x8B66,0x8B6F,0x8B5F,0x8B6B,0x8D0F,0x8D0D,0x8E89,0x8E81, + 0x8E85,0x8E82,0x91B4,0x91CB,0x9418,0x9403,0x93FD,0x95E1,0x9730,0x98C4, + 0x9952,0x9951,0x99A8,0x9A2B,0x9A30,0x9A37,0x9A35,0x9C13,0x9C0D,0x9E79, + 0x9EB5,0x9EE8,0x9F2F,0x9F5F,0x9F63,0x9F61,0x5137,0x5138,0x56C1,0x56C0, + 0x56C2,0x5914,0x5C6C,0x5DCD,0x61FC,0x61FE,0x651D,0x651C,0x6595,0x66E9, + 0x6AFB,0x6B04,0x6AFA,0x6BB2,0x704C,0x721B,0x72A7,0x74D6,0x74D4,0x7669, + 0x77D3,0x7C50,0x7E8F,0x7E8C,0x7FBC, + /* plane 1, row 91 */ + 1 | (94 << 8), /* first, last */ + 0x8617,0x862D,0x861A,0x8823,0x8822,0x8821,0x881F,0x896A,0x896C, + 0x89BD,0x8B74,0x8B77,0x8B7D,0x8D13,0x8E8A,0x8E8D,0x8E8B,0x8F5F,0x8FAF, + 0x91BA,0x942E,0x9433,0x9435,0x943A,0x9438,0x9432,0x942B,0x95E2,0x9738, + 0x9739,0x9732,0x97FF,0x9867,0x9865,0x9957,0x9A45,0x9A43,0x9A40,0x9A3E, + 0x9ACF,0x9B54,0x9B51,0x9C2D,0x9C25,0x9DAF,0x9DB4,0x9DC2,0x9DB8,0x9E9D, + 0x9EEF,0x9F19,0x9F5C,0x9F66,0x9F67,0x513C,0x513B,0x56C8,0x56CA,0x56C9, + 0x5B7F,0x5DD4,0x5DD2,0x5F4E,0x61FF,0x6524,0x6B0A,0x6B61,0x7051,0x7058, + 0x7380,0x74E4,0x758A,0x766E,0x766C,0x79B3,0x7C60,0x7C5F,0x807E,0x807D, + 0x81DF,0x8972,0x896F,0x89FC,0x8B80,0x8D16,0x8D17,0x8E91,0x8E93,0x8F61, + 0x9148,0x9444,0x9451,0x9452,0x973D, + /* plane 1, row 92 */ + 1 | (94 << 8), /* first, last */ + 0x973E,0x97C3,0x97C1,0x986B,0x9955,0x9A55,0x9A4D,0x9AD2,0x9B1A, + 0x9C49,0x9C31,0x9C3E,0x9C3B,0x9DD3,0x9DD7,0x9F34,0x9F6C,0x9F6A,0x9F94, + 0x56CC,0x5DD6,0x6200,0x6523,0x652B,0x652A,0x66EC,0x6B10,0x74DA,0x7ACA, + 0x7C64,0x7C63,0x7C65,0x7E93,0x7E96,0x7E94,0x81E2,0x8638,0x863F,0x8831, + 0x8B8A,0x9090,0x908F,0x9463,0x9460,0x9464,0x9768,0x986F,0x995C,0x9A5A, + 0x9A5B,0x9A57,0x9AD3,0x9AD4,0x9AD1,0x9C54,0x9C57,0x9C56,0x9DE5,0x9E9F, + 0x9EF4,0x56D1,0x58E9,0x652C,0x705E,0x7671,0x7672,0x77D7,0x7F50,0x7F88, + 0x8836,0x8839,0x8862,0x8B93,0x8B92,0x8B96,0x8277,0x8D1B,0x91C0,0x946A, + 0x9742,0x9748,0x9744,0x97C6,0x9870,0x9A5F,0x9B22,0x9B58,0x9C5F,0x9DF9, + 0x9DFA,0x9E7C,0x9E7D,0x9F07,0x9F77, + /* plane 1, row 93 */ + 1 | (43 << 8), /* first, last */ + 0x9F72,0x5EF3,0x6B16,0x7063,0x7C6C,0x7C6E,0x883B,0x89C0,0x8EA1, + 0x91C1,0x9472,0x9470,0x9871,0x995E,0x9AD6,0x9B23,0x9ECC,0x7064,0x77DA, + 0x8B9A,0x9477,0x97C9,0x9A62,0x9A65,0x7E9C,0x8B9C,0x8EAA,0x91C5,0x947D, + 0x947E,0x947C,0x9C77,0x9C78,0x9EF7,0x8C54,0x947F,0x9E1A,0x7228,0x9A6A, + 0x9B31,0x9E1B,0x9E1E,0x7C72, + /* plane 1, row 94: --- */ + /* plane 2, row 1 */ + 1 | (94 << 8), /* first, last */ + 0x4E42,0x4E5C,0x51F5,0x531A,0x5382,0x4E07,0x4E0C,0x4E47,0x4E8D, + 0x56D7,0x5C6E,0x5F73,0x4E0F,0x5187,0x4E0E,0x4E2E,0x4E93,0x4EC2,0x4EC9, + 0x4EC8,0x5198,0x52FC,0x536C,0x53B9,0x5720,0x5903,0x592C,0x5C10,0x5DFF, + 0x65E1,0x6BB3,0x6BCC,0x6C14,0x723F,0x4E31,0x4E3C,0x4EE8,0x4EDC,0x4EE9, + 0x4EE1,0x4EDD,0x4EDA,0x520C,0x5209,0x531C,0x534C,0x5722,0x5723,0x5917, + 0x592F,0x5B81,0x5B84,0x5C12,0x5C3B,0x5C74,0x5C73,0x5E04,0x5E80,0x5E82, + 0x5FC9,0x6209,0x6250,0x6C15,0x6C36,0x6C43,0x6C3F,0x6C3B,0x72AE,0x72B0, + 0x738A,0x79B8,0x808A,0x961E,0x4F0E,0x4F18,0x4F2C,0x4EF5,0x4F14,0x4EF1, + 0x4F00,0x4EF7,0x4F08,0x4F1D,0x4F02,0x4F05,0x4F22,0x4F13,0x4F04,0x4EF4, + 0x4F12,0x51B1,0x5213,0x5210,0x52A6, + /* plane 2, row 2 */ + 1 | (94 << 8), /* first, last */ + 0x5322,0x531F,0x534D,0x538A,0x5407,0x56E1,0x56DF,0x572E,0x572A, + 0x5734,0x593C,0x5980,0x597C,0x5985,0x597B,0x597E,0x5977,0x597F,0x5B56, + 0x5C15,0x5C25,0x5C7C,0x5C7A,0x5C7B,0x5C7E,0x5DDF,0x5E75,0x5E84,0x5F02, + 0x5F1A,0x5F74,0x5FD5,0x5FD4,0x5FCF,0x625C,0x625E,0x6264,0x6261,0x6266, + 0x6262,0x6259,0x6260,0x625A,0x6265,0x6537,0x65EF,0x65EE,0x673E,0x6739, + 0x6738,0x673B,0x673A,0x673F,0x673C,0x6733,0x6C18,0x6C46,0x6C52,0x6C5C, + 0x6C4F,0x6C4A,0x6C54,0x6C4B,0x6C4C,0x7071,0x725E,0x72B4,0x72B5,0x738E, + 0x752A,0x767F,0x7A75,0x7F51,0x8278,0x827C,0x8280,0x827D,0x827F,0x864D, + 0x897E,0x9099,0x9097,0x9098,0x909B,0x9094,0x9622,0x9624,0x9620,0x9623, + 0x4F56,0x4F3B,0x4F62,0x4F49,0x4F53, + /* plane 2, row 3 */ + 1 | (94 << 8), /* first, last */ + 0x4F64,0x4F3E,0x4F67,0x4F52,0x4F5F,0x4F41,0x4F58,0x4F2D,0x4F33, + 0x4F3F,0x4F61,0x518F,0x51B9,0x521C,0x521E,0x5221,0x52AD,0x52AE,0x5309, + 0x5363,0x5372,0x538E,0x538F,0x5430,0x5437,0x542A,0x5454,0x5445,0x5419, + 0x541C,0x5425,0x5418,0x543D,0x544F,0x5441,0x5428,0x5424,0x5447,0x56EE, + 0x56E7,0x56E5,0x5741,0x5745,0x574C,0x5749,0x574B,0x5752,0x5906,0x5940, + 0x59A6,0x5998,0x59A0,0x5997,0x598E,0x59A2,0x5990,0x598F,0x59A7,0x59A1, + 0x5B8E,0x5B92,0x5C28,0x5C2A,0x5C8D,0x5C8F,0x5C88,0x5C8B,0x5C89,0x5C92, + 0x5C8A,0x5C86,0x5C93,0x5C95,0x5DE0,0x5E0A,0x5E0E,0x5E8B,0x5E89,0x5E8C, + 0x5E88,0x5E8D,0x5F05,0x5F1D,0x5F78,0x5F76,0x5FD2,0x5FD1,0x5FD0,0x5FED, + 0x5FE8,0x5FEE,0x5FF3,0x5FE1,0x5FE4, + /* plane 2, row 4 */ + 1 | (94 << 8), /* first, last */ + 0x5FE3,0x5FFA,0x5FEF,0x5FF7,0x5FFB,0x6000,0x5FF4,0x623A,0x6283, + 0x628C,0x628E,0x628F,0x6294,0x6287,0x6271,0x627B,0x627A,0x6270,0x6281, + 0x6288,0x6277,0x627D,0x6272,0x6274,0x65F0,0x65F4,0x65F3,0x65F2,0x65F5, + 0x6745,0x6747,0x6759,0x6755,0x674C,0x6748,0x675D,0x674D,0x675A,0x674B, + 0x6BD0,0x6C19,0x6C1A,0x6C78,0x6C67,0x6C6B,0x6C84,0x6C8B,0x6C8F,0x6C71, + 0x6C6F,0x6C69,0x6C9A,0x6C6D,0x6C87,0x6C95,0x6C9C,0x6C66,0x6C73,0x6C65, + 0x6C7B,0x6C8E,0x7074,0x707A,0x7263,0x72BF,0x72BD,0x72C3,0x72C6,0x72C1, + 0x72BA,0x72C5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753A,0x7539,0x7594, + 0x7595,0x7681,0x793D,0x8034,0x8095,0x8099,0x8090,0x8092,0x809C,0x8290, + 0x828F,0x8285,0x828E,0x8291,0x8293, + /* plane 2, row 5 */ + 1 | (94 << 8), /* first, last */ + 0x828A,0x8283,0x8284,0x8C78,0x8FC9,0x8FBF,0x909F,0x90A1,0x90A5, + 0x909E,0x90A7,0x90A0,0x9630,0x9628,0x962F,0x962D,0x4E33,0x4F98,0x4F7C, + 0x4F85,0x4F7D,0x4F80,0x4F87,0x4F76,0x4F74,0x4F89,0x4F84,0x4F77,0x4F4C, + 0x4F97,0x4F6A,0x4F9A,0x4F79,0x4F81,0x4F78,0x4F90,0x4F9C,0x4F94,0x4F9E, + 0x4F92,0x4F82,0x4F95,0x4F6B,0x4F6E,0x519E,0x51BC,0x51BE,0x5235,0x5232, + 0x5233,0x5246,0x5231,0x52BC,0x530A,0x530B,0x533C,0x5392,0x5394,0x5487, + 0x547F,0x5481,0x5491,0x5482,0x5488,0x546B,0x547A,0x547E,0x5465,0x546C, + 0x5474,0x5466,0x548D,0x546F,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464, + 0x56F7,0x56F9,0x576F,0x5772,0x576D,0x576B,0x5771,0x5770,0x5776,0x5780, + 0x5775,0x577B,0x5773,0x5774,0x5762, + /* plane 2, row 6 */ + 1 | (94 << 8), /* first, last */ + 0x5768,0x577D,0x590C,0x5945,0x59B5,0x59BA,0x59CF,0x59CE,0x59B2, + 0x59CC,0x59C1,0x59B6,0x59BC,0x59C3,0x59D6,0x59B1,0x59BD,0x59C0,0x59C8, + 0x59B4,0x59C7,0x5B62,0x5B65,0x5B93,0x5B95,0x5C44,0x5C47,0x5CAE,0x5CA4, + 0x5CA0,0x5CB5,0x5CAF,0x5CA8,0x5CAC,0x5C9F,0x5CA3,0x5CAD,0x5CA2,0x5CAA, + 0x5CA7,0x5C9D,0x5CA5,0x5CB6,0x5CB0,0x5CA6,0x5E17,0x5E14,0x5E19,0x5F28, + 0x5F22,0x5F23,0x5F24,0x5F54,0x5F82,0x5F7E,0x5F7D,0x5FDE,0x5FE5,0x602D, + 0x6026,0x6019,0x6032,0x600B,0x6034,0x600A,0x6017,0x6033,0x601A,0x601E, + 0x602C,0x6022,0x600D,0x6010,0x602E,0x6013,0x6011,0x600C,0x6009,0x601C, + 0x6214,0x623D,0x62AD,0x62B4,0x62D1,0x62BE,0x62AA,0x62B6,0x62CA,0x62AE, + 0x62B3,0x62AF,0x62BB,0x62A9,0x62B0, + /* plane 2, row 7 */ + 1 | (94 << 8), /* first, last */ + 0x62B8,0x653D,0x65A8,0x65BB,0x6609,0x65FC,0x6604,0x6612,0x6608, + 0x65FB,0x6603,0x660B,0x660D,0x6605,0x65FD,0x6611,0x6610,0x66F6,0x670A, + 0x6785,0x676C,0x678E,0x6792,0x6776,0x677B,0x6798,0x6786,0x6784,0x6774, + 0x678D,0x678C,0x677A,0x679F,0x6791,0x6799,0x6783,0x677D,0x6781,0x6778, + 0x6779,0x6794,0x6B25,0x6B80,0x6B7E,0x6BDE,0x6C1D,0x6C93,0x6CEC,0x6CEB, + 0x6CEE,0x6CD9,0x6CB6,0x6CD4,0x6CAD,0x6CE7,0x6CB7,0x6CD0,0x6CC2,0x6CBA, + 0x6CC3,0x6CC6,0x6CED,0x6CF2,0x6CD2,0x6CDD,0x6CB4,0x6C8A,0x6C9D,0x6C80, + 0x6CDE,0x6CC0,0x6D30,0x6CCD,0x6CC7,0x6CB0,0x6CF9,0x6CCF,0x6CE9,0x6CD1, + 0x7094,0x7098,0x7085,0x7093,0x7086,0x7084,0x7091,0x7096,0x7082,0x709A, + 0x7083,0x726A,0x72D6,0x72CB,0x72D8, + /* plane 2, row 8 */ + 1 | (94 << 8), /* first, last */ + 0x72C9,0x72DC,0x72D2,0x72D4,0x72DA,0x72CC,0x72D1,0x73A4,0x73A1, + 0x73AD,0x73A6,0x73A2,0x73A0,0x73AC,0x739D,0x74DD,0x74E8,0x753F,0x7540, + 0x753E,0x758C,0x7598,0x76AF,0x76F3,0x76F1,0x76F0,0x76F5,0x77F8,0x77FC, + 0x77F9,0x77FB,0x77FA,0x77F7,0x7942,0x793F,0x79C5,0x7A78,0x7A7B,0x7AFB, + 0x7C75,0x7CFD,0x8035,0x808F,0x80AE,0x80A3,0x80B8,0x80B5,0x80AD,0x8220, + 0x82A0,0x82C0,0x82AB,0x829A,0x8298,0x829B,0x82B5,0x82A7,0x82AE,0x82BC, + 0x829E,0x82BA,0x82B4,0x82A8,0x82A1,0x82A9,0x82C2,0x82A4,0x82C3,0x82B6, + 0x82A2,0x8670,0x866F,0x866D,0x866E,0x8C56,0x8FD2,0x8FCB,0x8FD3,0x8FCD, + 0x8FD6,0x8FD5,0x8FD7,0x90B2,0x90B4,0x90AF,0x90B3,0x90B0,0x9639,0x963D, + 0x963C,0x963A,0x9643,0x4FCD,0x4FC5, + /* plane 2, row 9 */ + 1 | (94 << 8), /* first, last */ + 0x4FD3,0x4FB2,0x4FC9,0x4FCB,0x4FC1,0x4FD4,0x4FDC,0x4FD9,0x4FBB, + 0x4FB3,0x4FDB,0x4FC7,0x4FD6,0x4FBA,0x4FC0,0x4FB9,0x4FEC,0x5244,0x5249, + 0x52C0,0x52C2,0x533D,0x537C,0x5397,0x5396,0x5399,0x5398,0x54BA,0x54A1, + 0x54AD,0x54A5,0x54CF,0x54C3,0x830D,0x54B7,0x54AE,0x54D6,0x54B6,0x54C5, + 0x54C6,0x54A0,0x5470,0x54BC,0x54A2,0x54BE,0x5472,0x54DE,0x54B0,0x57B5, + 0x579E,0x579F,0x57A4,0x578C,0x5797,0x579D,0x579B,0x5794,0x5798,0x578F, + 0x5799,0x57A5,0x579A,0x5795,0x58F4,0x590D,0x5953,0x59E1,0x59DE,0x59EE, + 0x5A00,0x59F1,0x59DD,0x59FA,0x59FD,0x59FC,0x59F6,0x59E4,0x59F2,0x59F7, + 0x59DB,0x59E9,0x59F3,0x59F5,0x59E0,0x59FE,0x59F4,0x59ED,0x5BA8,0x5C4C, + 0x5CD0,0x5CD8,0x5CCC,0x5CD7,0x5CCB, + /* plane 2, row 10 */ + 1 | (94 << 8), /* first, last */ + 0x5CDB,0x5CDE,0x5CDA,0x5CC9,0x5CC7,0x5CCA,0x5CD6,0x5CD3,0x5CD4, + 0x5CCF,0x5CC8,0x5CC6,0x5CCE,0x5CDF,0x5CF8,0x5DF9,0x5E21,0x5E22,0x5E23, + 0x5E20,0x5E24,0x5EB0,0x5EA4,0x5EA2,0x5E9B,0x5EA3,0x5EA5,0x5F07,0x5F2E, + 0x5F56,0x5F86,0x6037,0x6039,0x6054,0x6072,0x605E,0x6045,0x6053,0x6047, + 0x6049,0x605B,0x604C,0x6040,0x6042,0x605F,0x6024,0x6044,0x6058,0x6066, + 0x606E,0x6242,0x6243,0x62CF,0x630D,0x630B,0x62F5,0x630E,0x6303,0x62EB, + 0x62F9,0x630F,0x630C,0x62F8,0x62F6,0x6300,0x6313,0x6314,0x62FA,0x6315, + 0x62FB,0x62F0,0x6541,0x6543,0x65AA,0x65BF,0x6636,0x6621,0x6632,0x6635, + 0x661C,0x6626,0x6622,0x6633,0x662B,0x663A,0x661D,0x6634,0x6639,0x662E, + 0x670F,0x6710,0x67C1,0x67F2,0x67C8, + /* plane 2, row 11 */ + 1 | (94 << 8), /* first, last */ + 0x67BA,0x67DC,0x67BB,0x67F8,0x67D8,0x67C0,0x67B7,0x67C5,0x67EB, + 0x67E4,0x67DF,0x67B5,0x67CD,0x67B3,0x67F7,0x67F6,0x67EE,0x67E3,0x67C2, + 0x67B9,0x67CE,0x67E7,0x67F0,0x67B2,0x67FC,0x67C6,0x67ED,0x67CC,0x67AE, + 0x67E6,0x67DB,0x67FA,0x67C9,0x67CA,0x67C3,0x67EA,0x67CB,0x6B28,0x6B82, + 0x6B84,0x6BB6,0x6BD6,0x6BD8,0x6BE0,0x6C20,0x6C21,0x6D28,0x6D34,0x6D2D, + 0x6D1F,0x6D3C,0x6D3F,0x6D12,0x6D0A,0x6CDA,0x6D33,0x6D04,0x6D19,0x6D3A, + 0x6D1A,0x6D11,0x6D00,0x6D1D,0x6D42,0x6D01,0x6D18,0x6D37,0x6D03,0x6D0F, + 0x6D40,0x6D07,0x6D20,0x6D2C,0x6D08,0x6D22,0x6D09,0x6D10,0x70B7,0x709F, + 0x70BE,0x70B1,0x70B0,0x70A1,0x70B4,0x70B5,0x70A9,0x7241,0x7249,0x724A, + 0x726C,0x7270,0x7273,0x726E,0x72CA, + /* plane 2, row 12 */ + 1 | (94 << 8), /* first, last */ + 0x72E4,0x72E8,0x72EB,0x72DF,0x72EA,0x72E6,0x72E3,0x7385,0x73CC, + 0x73C2,0x73C8,0x73C5,0x73B9,0x73B6,0x73B5,0x73B4,0x73EB,0x73BF,0x73C7, + 0x73BE,0x73C3,0x73C6,0x73B8,0x73CB,0x74EC,0x74EE,0x752E,0x7547,0x7548, + 0x75A7,0x75AA,0x7679,0x76C4,0x7708,0x7703,0x7704,0x7705,0x770A,0x76F7, + 0x76FB,0x76FA,0x77E7,0x77E8,0x7806,0x7811,0x7812,0x7805,0x7810,0x780F, + 0x780E,0x7809,0x7803,0x7813,0x794A,0x794C,0x794B,0x7945,0x7944,0x79D5, + 0x79CD,0x79CF,0x79D6,0x79CE,0x7A80,0x7A7E,0x7AD1,0x7B00,0x7B01,0x7C7A, + 0x7C78,0x7C79,0x7C7F,0x7C80,0x7C81,0x7D03,0x7D08,0x7D01,0x7F58,0x7F91, + 0x7F8D,0x7FBE,0x8007,0x800E,0x800F,0x8014,0x8037,0x80D8,0x80C7,0x80E0, + 0x80D1,0x80C8,0x80C2,0x80D0,0x80C5, + /* plane 2, row 13 */ + 1 | (94 << 8), /* first, last */ + 0x80E3,0x80D9,0x80DC,0x80CA,0x80D5,0x80C9,0x80CF,0x80D7,0x80E6, + 0x80CD,0x81FF,0x8221,0x8294,0x82D9,0x82FE,0x82F9,0x8307,0x82E8,0x8300, + 0x82D5,0x833A,0x82EB,0x82D6,0x82F4,0x82EC,0x82E1,0x82F2,0x82F5,0x830C, + 0x82FB,0x82F6,0x82F0,0x82EA,0x82E4,0x82E0,0x82FA,0x82F3,0x82ED,0x8677, + 0x8674,0x867C,0x8673,0x8841,0x884E,0x8867,0x886A,0x8869,0x89D3,0x8A04, + 0x8A07,0x8D72,0x8FE3,0x8FE1,0x8FEE,0x8FE0,0x90F1,0x90BD,0x90BF,0x90D5, + 0x90C5,0x90BE,0x90C7,0x90CB,0x90C8,0x91D4,0x91D3,0x9654,0x964F,0x9651, + 0x9653,0x964A,0x964E,0x501E,0x5005,0x5007,0x5013,0x5022,0x5030,0x501B, + 0x4FF5,0x4FF4,0x5033,0x5037,0x502C,0x4FF6,0x4FF7,0x5017,0x501C,0x5020, + 0x5027,0x5035,0x502F,0x5031,0x500E, + /* plane 2, row 14 */ + 1 | (94 << 8), /* first, last */ + 0x515A,0x5194,0x5193,0x51CA,0x51C4,0x51C5,0x51C8,0x51CE,0x5261, + 0x525A,0x5252,0x525E,0x525F,0x5255,0x5262,0x52CD,0x530E,0x539E,0x5526, + 0x54E2,0x5517,0x5512,0x54E7,0x54F3,0x54E4,0x551A,0x54FF,0x5504,0x5508, + 0x54EB,0x5511,0x5505,0x54F1,0x550A,0x54FB,0x54F7,0x54F8,0x54E0,0x550E, + 0x5503,0x550B,0x5701,0x5702,0x57CC,0x5832,0x57D5,0x57D2,0x57BA,0x57C6, + 0x57BD,0x57BC,0x57B8,0x57B6,0x57BF,0x57C7,0x57D0,0x57B9,0x57C1,0x590E, + 0x594A,0x5A19,0x5A16,0x5A2D,0x5A2E,0x5A15,0x5A0F,0x5A17,0x5A0A,0x5A1E, + 0x5A33,0x5B6C,0x5BA7,0x5BAD,0x5BAC,0x5C03,0x5C56,0x5C54,0x5CEC,0x5CFF, + 0x5CEE,0x5CF1,0x5CF7,0x5D00,0x5CF9,0x5E29,0x5E28,0x5EA8,0x5EAE,0x5EAA, + 0x5EAC,0x5F33,0x5F30,0x5F67,0x605D, + /* plane 2, row 15 */ + 1 | (94 << 8), /* first, last */ + 0x605A,0x6067,0x6041,0x60A2,0x6088,0x6080,0x6092,0x6081,0x609D, + 0x6083,0x6095,0x609B,0x6097,0x6087,0x609C,0x608E,0x6219,0x6246,0x62F2, + 0x6310,0x6356,0x632C,0x6344,0x6345,0x6336,0x6343,0x63E4,0x6339,0x634B, + 0x634A,0x633C,0x6329,0x6341,0x6334,0x6358,0x6354,0x6359,0x632D,0x6347, + 0x6333,0x635A,0x6351,0x6338,0x6357,0x6340,0x6348,0x654A,0x6546,0x65C6, + 0x65C3,0x65C4,0x65C2,0x664A,0x665F,0x6647,0x6651,0x6712,0x6713,0x681F, + 0x681A,0x6849,0x6832,0x6833,0x683B,0x684B,0x684F,0x6816,0x6831,0x681C, + 0x6835,0x682B,0x682D,0x682F,0x684E,0x6844,0x6834,0x681D,0x6812,0x6814, + 0x6826,0x6828,0x682E,0x684D,0x683A,0x6825,0x6820,0x6B2C,0x6B2F,0x6B2D, + 0x6B31,0x6B34,0x6B6D,0x8082,0x6B88, + /* plane 2, row 16 */ + 1 | (94 << 8), /* first, last */ + 0x6BE6,0x6BE4,0x6BE8,0x6BE3,0x6BE2,0x6BE7,0x6C25,0x6D7A,0x6D63, + 0x6D64,0x6D76,0x6D0D,0x6D61,0x6D92,0x6D58,0x6D62,0x6D6D,0x6D6F,0x6D91, + 0x6D8D,0x6DEF,0x6D7F,0x6D86,0x6D5E,0x6D67,0x6D60,0x6D97,0x6D70,0x6D7C, + 0x6D5F,0x6D82,0x6D98,0x6D2F,0x6D68,0x6D8B,0x6D7E,0x6D80,0x6D84,0x6D16, + 0x6D83,0x6D7B,0x6D7D,0x6D75,0x6D90,0x70DC,0x70D3,0x70D1,0x70DD,0x70CB, + 0x7F39,0x70E2,0x70D7,0x70D2,0x70DE,0x70E0,0x70D4,0x70CD,0x70C5,0x70C6, + 0x70C7,0x70DA,0x70CE,0x70E1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72FA, + 0x72F4,0x72FE,0x72F6,0x72F3,0x72FB,0x7301,0x73D3,0x73D9,0x73E5,0x73D6, + 0x73BC,0x73E7,0x73E3,0x73E9,0x73DC,0x73D2,0x73DB,0x73D4,0x73DD,0x73DA, + 0x73D7,0x73D8,0x73E8,0x74DE,0x74DF, + /* plane 2, row 17 */ + 1 | (94 << 8), /* first, last */ + 0x74F4,0x74F5,0x7521,0x755B,0x755F,0x75B0,0x75C1,0x75BB,0x75C4, + 0x75C0,0x75BF,0x75B6,0x75BA,0x768A,0x76C9,0x771D,0x771B,0x7710,0x7713, + 0x7712,0x7723,0x7711,0x7715,0x7719,0x771A,0x7722,0x7727,0x7823,0x782C, + 0x7822,0x7835,0x782F,0x7828,0x782E,0x782B,0x7821,0x7829,0x7833,0x782A, + 0x7831,0x7954,0x795B,0x794F,0x795C,0x7953,0x7952,0x7951,0x79EB,0x79EC, + 0x79E0,0x79EE,0x79ED,0x79EA,0x79DC,0x79DE,0x79DD,0x7A86,0x7A89,0x7A85, + 0x7A8B,0x7A8C,0x7A8A,0x7A87,0x7AD8,0x7B10,0x7B04,0x7B13,0x7B05,0x7B0F, + 0x7B08,0x7B0A,0x7B0E,0x7B09,0x7B12,0x7C84,0x7C91,0x7C8A,0x7C8C,0x7C88, + 0x7C8D,0x7C85,0x7D1E,0x7D1D,0x7D11,0x7D0E,0x7D18,0x7D16,0x7D13,0x7D1F, + 0x7D12,0x7D0F,0x7D0C,0x7F5C,0x7F61, + /* plane 2, row 18 */ + 1 | (94 << 8), /* first, last */ + 0x7F5E,0x7F60,0x7F5D,0x7F5B,0x7F96,0x7F92,0x7FC3,0x7FC2,0x7FC0, + 0x8016,0x803E,0x8039,0x80FA,0x80F2,0x80F9,0x80F5,0x8101,0x80FB,0x8100, + 0x8201,0x822F,0x8225,0x8333,0x832D,0x8344,0x8319,0x8351,0x8325,0x8356, + 0x833F,0x8341,0x8326,0x831C,0x8322,0x8342,0x834E,0x831B,0x832A,0x8308, + 0x833C,0x834D,0x8316,0x8324,0x8320,0x8337,0x832F,0x8329,0x8347,0x8345, + 0x834C,0x8353,0x831E,0x832C,0x834B,0x8327,0x8348,0x8653,0x8652,0x86A2, + 0x86A8,0x8696,0x868D,0x8691,0x869E,0x8687,0x8697,0x8686,0x868B,0x869A, + 0x8685,0x86A5,0x8699,0x86A1,0x86A7,0x8695,0x8698,0x868E,0x869D,0x8690, + 0x8694,0x8843,0x8844,0x886D,0x8875,0x8876,0x8872,0x8880,0x8871,0x887F, + 0x886F,0x8883,0x887E,0x8874,0x887C, + /* plane 2, row 19 */ + 1 | (94 << 8), /* first, last */ + 0x8A12,0x8C47,0x8C57,0x8C7B,0x8CA4,0x8CA3,0x8D76,0x8D78,0x8DB5, + 0x8DB7,0x8DB6,0x8ED1,0x8ED3,0x8FFE,0x8FF5,0x9002,0x8FFF,0x8FFB,0x9004, + 0x8FFC,0x8FF6,0x90D6,0x90E0,0x90D9,0x90DA,0x90E3,0x90DF,0x90E5,0x90D8, + 0x90DB,0x90D7,0x90DC,0x90E4,0x9150,0x914E,0x914F,0x91D5,0x91E2,0x91DA, + 0x965C,0x965F,0x96BC,0x98E3,0x9ADF,0x9B2F,0x4E7F,0x5070,0x506A,0x5061, + 0x505E,0x5060,0x5053,0x504B,0x505D,0x5072,0x5048,0x504D,0x5041,0x505B, + 0x504A,0x5062,0x5015,0x5045,0x505F,0x5069,0x506B,0x5063,0x5064,0x5046, + 0x5040,0x506E,0x5073,0x5057,0x5051,0x51D0,0x526B,0x526D,0x526C,0x526E, + 0x52D6,0x52D3,0x532D,0x539C,0x5575,0x5576,0x553C,0x554D,0x5550,0x5534, + 0x552A,0x5551,0x5562,0x5536,0x5535, + /* plane 2, row 20 */ + 1 | (94 << 8), /* first, last */ + 0x5530,0x5552,0x5545,0x550C,0x5532,0x5565,0x554E,0x5539,0x5548, + 0x552D,0x553B,0x5540,0x554B,0x570A,0x5707,0x57FB,0x5814,0x57E2,0x57F6, + 0x57DC,0x57F4,0x5800,0x57ED,0x57FD,0x5808,0x57F8,0x580B,0x57F3,0x57CF, + 0x5807,0x57EE,0x57E3,0x57F2,0x57E5,0x57EC,0x57E1,0x580E,0x57FC,0x5810, + 0x57E7,0x5801,0x580C,0x57F1,0x57E9,0x57F0,0x580D,0x5804,0x595C,0x5A60, + 0x5A58,0x5A55,0x5A67,0x5A5E,0x5A38,0x5A35,0x5A6D,0x5A50,0x5A5F,0x5A65, + 0x5A6C,0x5A53,0x5A64,0x5A57,0x5A43,0x5A5D,0x5A52,0x5A44,0x5A5B,0x5A48, + 0x5A8E,0x5A3E,0x5A4D,0x5A39,0x5A4C,0x5A70,0x5A69,0x5A47,0x5A51,0x5A56, + 0x5A42,0x5A5C,0x5B72,0x5B6E,0x5BC1,0x5BC0,0x5C59,0x5D1E,0x5D0B,0x5D1D, + 0x5D1A,0x5D20,0x5D0C,0x5D28,0x5D0D, + /* plane 2, row 21 */ + 1 | (94 << 8), /* first, last */ + 0x5D26,0x5D25,0x5D0F,0x5D30,0x5D12,0x5D23,0x5D1F,0x5D2E,0x5E3E, + 0x5E34,0x5EB1,0x5EB4,0x5EB9,0x5EB2,0x5EB3,0x5F36,0x5F38,0x5F9B,0x5F96, + 0x5F9F,0x608A,0x6090,0x6086,0x60BE,0x60B0,0x60BA,0x60D3,0x60D4,0x60CF, + 0x60E4,0x60D9,0x60DD,0x60C8,0x60B1,0x60DB,0x60B7,0x60CA,0x60BF,0x60C3, + 0x60CD,0x60C0,0x6332,0x6365,0x638A,0x6382,0x637D,0x63BD,0x639E,0x63AD, + 0x639D,0x6397,0x63AB,0x638E,0x636F,0x6387,0x6390,0x636E,0x63AF,0x6375, + 0x639C,0x636D,0x63AE,0x637C,0x63A4,0x633B,0x639F,0x6378,0x6385,0x6381, + 0x6391,0x638D,0x6370,0x6553,0x65CD,0x6665,0x6661,0x665B,0x6659,0x665C, + 0x6662,0x6718,0x6879,0x6887,0x6890,0x689C,0x686D,0x686E,0x68AE,0x68AB, + 0x6956,0x686F,0x68A3,0x68AC,0x68A9, + /* plane 2, row 22 */ + 1 | (94 << 8), /* first, last */ + 0x6875,0x6874,0x68B2,0x688F,0x6877,0x6892,0x687C,0x686B,0x6872, + 0x68AA,0x6880,0x6871,0x687E,0x689B,0x6896,0x688B,0x68A0,0x6889,0x68A4, + 0x6878,0x687B,0x6891,0x688C,0x688A,0x687D,0x6B36,0x6B33,0x6B37,0x6B38, + 0x6B91,0x6B8F,0x6B8D,0x6B8E,0x6B8C,0x6C2A,0x6DC0,0x6DAB,0x6DB4,0x6DB3, + 0x6E74,0x6DAC,0x6DE9,0x6DE2,0x6DB7,0x6DF6,0x6DD4,0x6E00,0x6DC8,0x6DE0, + 0x6DDF,0x6DD6,0x6DBE,0x6DE5,0x6DDC,0x6DDD,0x6DDB,0x6DF4,0x6DCA,0x6DBD, + 0x6DED,0x6DF0,0x6DBA,0x6DD5,0x6DC2,0x6DCF,0x6DC9,0x6DD0,0x6DF2,0x6DD3, + 0x6DFD,0x6DD7,0x6DCD,0x6DE3,0x6DBB,0x70FA,0x710D,0x70F7,0x7117,0x70F4, + 0x710C,0x70F0,0x7104,0x70F3,0x7110,0x70FC,0x70FF,0x7106,0x7113,0x7100, + 0x70F8,0x70F6,0x710B,0x7102,0x710E, + /* plane 2, row 23 */ + 1 | (94 << 8), /* first, last */ + 0x727E,0x727B,0x727C,0x727F,0x731D,0x7317,0x7307,0x7311,0x7318, + 0x730A,0x7308,0x72FF,0x730F,0x731E,0x7388,0x73F6,0x73F8,0x73F5,0x7404, + 0x7401,0x73FD,0x7407,0x7400,0x73FA,0x73FC,0x73FF,0x740C,0x740B,0x73F4, + 0x7408,0x7564,0x7563,0x75CE,0x75D2,0x75CF,0x75CB,0x75CC,0x75D1,0x75D0, + 0x768F,0x7689,0x76D3,0x7739,0x772F,0x772D,0x7731,0x7732,0x7734,0x7733, + 0x773D,0x7725,0x773B,0x7735,0x7848,0x7852,0x7849,0x784D,0x784A,0x784C, + 0x7826,0x7845,0x7850,0x7964,0x7967,0x7969,0x796A,0x7963,0x796B,0x7961, + 0x79BB,0x79FA,0x79F8,0x79F6,0x79F7,0x7A8F,0x7A94,0x7A90,0x7B35,0x7B3B, + 0x7B34,0x7B25,0x7B30,0x7B22,0x7B24,0x7B33,0x7B18,0x7B2A,0x7B1D,0x7B31, + 0x7B2B,0x7B2D,0x7B2F,0x7B32,0x7B38, + /* plane 2, row 24 */ + 1 | (94 << 8), /* first, last */ + 0x7B1A,0x7B23,0x7C94,0x7C98,0x7C96,0x7CA3,0x7D35,0x7D3D,0x7D38, + 0x7D36,0x7D3A,0x7D45,0x7D2C,0x7D29,0x7D41,0x7D47,0x7D3E,0x7D3F,0x7D4A, + 0x7D3B,0x7D28,0x7F63,0x7F95,0x7F9C,0x7F9D,0x7F9B,0x7FCA,0x7FCB,0x7FCD, + 0x7FD0,0x7FD1,0x7FC7,0x7FCF,0x7FC9,0x801F,0x801E,0x801B,0x8047,0x8043, + 0x8048,0x8118,0x8125,0x8119,0x811B,0x812D,0x811F,0x812C,0x811E,0x8121, + 0x8115,0x8127,0x811D,0x8122,0x8211,0x8238,0x8233,0x823A,0x8234,0x8232, + 0x8274,0x8390,0x83A3,0x83A8,0x838D,0x837A,0x8373,0x83A4,0x8374,0x838F, + 0x8381,0x8395,0x8399,0x8375,0x8394,0x83A9,0x837D,0x8383,0x838C,0x839D, + 0x839B,0x83AA,0x838B,0x837E,0x83A5,0x83AF,0x8388,0x8397,0x83B0,0x837F, + 0x83A6,0x8387,0x83AE,0x8376,0x8659, + /* plane 2, row 25 */ + 1 | (94 << 8), /* first, last */ + 0x8656,0x86BF,0x86B7,0x86C2,0x86C1,0x86C5,0x86BA,0x86B0,0x86C8, + 0x86B9,0x86B3,0x86B8,0x86CC,0x86B4,0x86BB,0x86BC,0x86C3,0x86BD,0x86BE, + 0x8852,0x8889,0x8895,0x88A8,0x88A2,0x88AA,0x889A,0x8891,0x88A1,0x889F, + 0x8898,0x88A7,0x8899,0x889B,0x8897,0x88A4,0x88AC,0x888C,0x8893,0x888E, + 0x8982,0x89D6,0x89D9,0x89D5,0x8A30,0x8A27,0x8A2C,0x8A1E,0x8C39,0x8C3B, + 0x8C5C,0x8C5D,0x8C7D,0x8CA5,0x8D7D,0x8D7B,0x8D79,0x8DBC,0x8DC2,0x8DB9, + 0x8DBF,0x8DC1,0x8ED8,0x8EDE,0x8EDD,0x8EDC,0x8ED7,0x8EE0,0x8EE1,0x9024, + 0x900B,0x9011,0x901C,0x900C,0x9021,0x90EF,0x90EA,0x90F0,0x90F4,0x90F2, + 0x90F3,0x90D4,0x90EB,0x90EC,0x90E9,0x9156,0x9158,0x915A,0x9153,0x9155, + 0x91EC,0x91F4,0x91F1,0x91F3,0x91F8, + /* plane 2, row 26 */ + 1 | (94 << 8), /* first, last */ + 0x91E4,0x91F9,0x91EA,0x91EB,0x91F7,0x91E8,0x91EE,0x957A,0x9586, + 0x9588,0x967C,0x966D,0x966B,0x9671,0x966F,0x96BF,0x976A,0x9804,0x98E5, + 0x9997,0x509B,0x5095,0x5094,0x509E,0x508B,0x50A3,0x5083,0x508C,0x508E, + 0x509D,0x5068,0x509C,0x5092,0x5082,0x5087,0x515F,0x51D4,0x5312,0x5311, + 0x53A4,0x53A7,0x5591,0x55A8,0x55A5,0x55AD,0x5577,0x5645,0x55A2,0x5593, + 0x5588,0x558F,0x55B5,0x5581,0x55A3,0x5592,0x55A4,0x557D,0x558C,0x55A6, + 0x557F,0x5595,0x55A1,0x558E,0x570C,0x5829,0x5837,0x5819,0x581E,0x5827, + 0x5823,0x5828,0x57F5,0x5848,0x5825,0x581C,0x581B,0x5833,0x583F,0x5836, + 0x582E,0x5839,0x5838,0x582D,0x582C,0x583B,0x5961,0x5AAF,0x5A94,0x5A9F, + 0x5A7A,0x5AA2,0x5A9E,0x5A78,0x5AA6, + /* plane 2, row 27 */ + 1 | (94 << 8), /* first, last */ + 0x5A7C,0x5AA5,0x5AAC,0x5A95,0x5AAE,0x5A37,0x5A84,0x5A8A,0x5A97, + 0x5A83,0x5A8B,0x5AA9,0x5A7B,0x5A7D,0x5A8C,0x5A9C,0x5A8F,0x5A93,0x5A9D, + 0x5BEA,0x5BCD,0x5BCB,0x5BD4,0x5BD1,0x5BCA,0x5BCE,0x5C0C,0x5C30,0x5D37, + 0x5D43,0x5D6B,0x5D41,0x5D4B,0x5D3F,0x5D35,0x5D51,0x5D4E,0x5D55,0x5D33, + 0x5D3A,0x5D52,0x5D3D,0x5D31,0x5D59,0x5D42,0x5D39,0x5D49,0x5D38,0x5D3C, + 0x5D32,0x5D36,0x5D40,0x5D45,0x5E44,0x5E41,0x5F58,0x5FA6,0x5FA5,0x5FAB, + 0x60C9,0x60B9,0x60CC,0x60E2,0x60CE,0x60C4,0x6114,0x60F2,0x610A,0x6116, + 0x6105,0x60F5,0x6113,0x60F8,0x60FC,0x60FE,0x60C1,0x6103,0x6118,0x611D, + 0x6110,0x60FF,0x6104,0x610B,0x624A,0x6394,0x63B1,0x63B0,0x63CE,0x63E5, + 0x63E8,0x63EF,0x63C3,0x649D,0x63F3, + /* plane 2, row 28 */ + 1 | (94 << 8), /* first, last */ + 0x63CA,0x63E0,0x63F6,0x63D5,0x63F2,0x63F5,0x6461,0x63DF,0x63BE, + 0x63DD,0x63DC,0x63C4,0x63D8,0x63D3,0x63C2,0x63C7,0x63CC,0x63CB,0x63C8, + 0x63F0,0x63D7,0x63D9,0x6532,0x6567,0x656A,0x6564,0x655C,0x6568,0x6565, + 0x658C,0x659D,0x659E,0x65AE,0x65D0,0x65D2,0x667C,0x666C,0x667B,0x6680, + 0x6671,0x6679,0x666A,0x6672,0x6701,0x690C,0x68D3,0x6904,0x68DC,0x692A, + 0x68EC,0x68EA,0x68F1,0x690F,0x68D6,0x68F7,0x68EB,0x68E4,0x68F6,0x6913, + 0x6910,0x68F3,0x68E1,0x6907,0x68CC,0x6908,0x6970,0x68B4,0x6911,0x68EF, + 0x68C6,0x6914,0x68F8,0x68D0,0x68FD,0x68FC,0x68E8,0x690B,0x690A,0x6917, + 0x68CE,0x68C8,0x68DD,0x68DE,0x68E6,0x68F4,0x68D1,0x6906,0x68D4,0x68E9, + 0x6915,0x6925,0x68C7,0x6B39,0x6B3B, + /* plane 2, row 29 */ + 1 | (94 << 8), /* first, last */ + 0x6B3F,0x6B3C,0x6B94,0x6B97,0x6B99,0x6B95,0x6BBD,0x6BF0,0x6BF2, + 0x6BF3,0x6C30,0x6DFC,0x6E46,0x6E47,0x6E1F,0x6E49,0x6E88,0x6E3C,0x6E3D, + 0x6E45,0x6E62,0x6E2B,0x6E3F,0x6E41,0x6E5D,0x6E73,0x6E1C,0x6E33,0x6E4B, + 0x6E40,0x6E51,0x6E3B,0x6E03,0x6E2E,0x6E5E,0x6E68,0x6E5C,0x6E61,0x6E31, + 0x6E28,0x6E60,0x6E71,0x6E6B,0x6E39,0x6E22,0x6E30,0x6E53,0x6E65,0x6E27, + 0x6E78,0x6E64,0x6E77,0x6E55,0x6E79,0x6E52,0x6E66,0x6E35,0x6E36,0x6E5A, + 0x7120,0x711E,0x712F,0x70FB,0x712E,0x7131,0x7123,0x7125,0x7122,0x7132, + 0x711F,0x7128,0x713A,0x711B,0x724B,0x725A,0x7288,0x7289,0x7286,0x7285, + 0x728B,0x7312,0x730B,0x7330,0x7322,0x7331,0x7333,0x7327,0x7332,0x732D, + 0x7326,0x7323,0x7335,0x730C,0x742E, + /* plane 2, row 30 */ + 1 | (94 << 8), /* first, last */ + 0x742C,0x7430,0x742B,0x7416,0x741A,0x7421,0x742D,0x7431,0x7424, + 0x7423,0x741D,0x7429,0x7420,0x7432,0x74FB,0x752F,0x756F,0x756C,0x75E7, + 0x75DA,0x75E1,0x75E6,0x75DD,0x75DF,0x75E4,0x75D7,0x7695,0x7692,0x76DA, + 0x7746,0x7747,0x7744,0x774D,0x7745,0x774A,0x774E,0x774B,0x774C,0x77DE, + 0x77EC,0x7860,0x7864,0x7865,0x785C,0x786D,0x7871,0x786A,0x786E,0x7870, + 0x7869,0x7868,0x785E,0x7862,0x7974,0x7973,0x7972,0x7970,0x7A02,0x7A0A, + 0x7A03,0x7A0C,0x7A04,0x7A99,0x7AE6,0x7AE4,0x7B4A,0x7B47,0x7B44,0x7B48, + 0x7B4C,0x7B4E,0x7B40,0x7B58,0x7B45,0x7CA2,0x7C9E,0x7CA8,0x7CA1,0x7D58, + 0x7D6F,0x7D63,0x7D53,0x7D56,0x7D67,0x7D6A,0x7D4F,0x7D6D,0x7D5C,0x7D6B, + 0x7D52,0x7D54,0x7D69,0x7D51,0x7D5F, + /* plane 2, row 31 */ + 1 | (94 << 8), /* first, last */ + 0x7D4E,0x7F3E,0x7F3F,0x7F65,0x7F66,0x7FA2,0x7FA0,0x7FA1,0x7FD7, + 0x8051,0x804F,0x8050,0x80FE,0x80D4,0x8143,0x814A,0x8152,0x814F,0x8147, + 0x813D,0x814D,0x813A,0x81E6,0x81EE,0x81F7,0x81F8,0x81F9,0x8204,0x823C, + 0x823D,0x823F,0x8275,0x833B,0x83CF,0x83F9,0x8423,0x83C0,0x83E8,0x8412, + 0x83E7,0x83E4,0x83FC,0x83F6,0x8410,0x83C6,0x83C8,0x83EB,0x83E3,0x83BF, + 0x8401,0x83DD,0x83E5,0x83D8,0x83FF,0x83E1,0x83CB,0x83CE,0x83D6,0x83F5, + 0x83C9,0x8409,0x840F,0x83DE,0x8411,0x8406,0x83C2,0x83F3,0x83D5,0x83FA, + 0x83C7,0x83D1,0x83EA,0x8413,0x839A,0x83C3,0x83EC,0x83EE,0x83C4,0x83FB, + 0x83D7,0x83E2,0x841B,0x83DB,0x83FE,0x86D8,0x86E2,0x86E6,0x86D3,0x86E3, + 0x86DA,0x86EA,0x86DD,0x86EB,0x86DC, + /* plane 2, row 32 */ + 1 | (94 << 8), /* first, last */ + 0x86EC,0x86E9,0x86D7,0x86E8,0x86D1,0x8848,0x8856,0x8855,0x88BA, + 0x88D7,0x88B9,0x88B8,0x88C0,0x88BE,0x88B6,0x88BC,0x88B7,0x88BD,0x88B2, + 0x8901,0x88C9,0x8995,0x8998,0x8997,0x89DD,0x89DA,0x89DB,0x8A4E,0x8A4D, + 0x8A39,0x8A59,0x8A40,0x8A57,0x8A58,0x8A44,0x8A45,0x8A52,0x8A48,0x8A51, + 0x8A4A,0x8A4C,0x8A4F,0x8C5F,0x8C81,0x8C80,0x8CBA,0x8CBE,0x8CB0,0x8CB9, + 0x8CB5,0x8D84,0x8D80,0x8D89,0x8DD8,0x8DD3,0x8DCD,0x8DC7,0x8DD6,0x8DDC, + 0x8DCF,0x8DD5,0x8DD9,0x8DC8,0x8DD7,0x8DC5,0x8EEF,0x8EF7,0x8EFA,0x8EF9, + 0x8EE6,0x8EEE,0x8EE5,0x8EF5,0x8EE7,0x8EE8,0x8EF6,0x8EEB,0x8EF1,0x8EEC, + 0x8EF4,0x8EE9,0x902D,0x9034,0x902F,0x9106,0x912C,0x9104,0x90FF,0x90FC, + 0x9108,0x90F9,0x90FB,0x9101,0x9100, + /* plane 2, row 33 */ + 1 | (94 << 8), /* first, last */ + 0x9107,0x9105,0x9103,0x9161,0x9164,0x915F,0x9162,0x9160,0x9201, + 0x920A,0x9225,0x9203,0x921A,0x9226,0x920F,0x920C,0x9200,0x9212,0x91FF, + 0x91FD,0x9206,0x9204,0x9227,0x9202,0x921C,0x9224,0x9219,0x9217,0x9205, + 0x9216,0x957B,0x958D,0x958C,0x9590,0x9687,0x967E,0x9688,0x9689,0x9683, + 0x9680,0x96C2,0x96C8,0x96C3,0x96F1,0x96F0,0x976C,0x9770,0x976E,0x9807, + 0x98A9,0x98EB,0x9CE6,0x9EF9,0x4E83,0x4E84,0x4EB6,0x50BD,0x50BF,0x50C6, + 0x50AE,0x50C4,0x50CA,0x50B4,0x50C8,0x50C2,0x50B0,0x50C1,0x50BA,0x50B1, + 0x50CB,0x50C9,0x50B6,0x50B8,0x51D7,0x527A,0x5278,0x527B,0x527C,0x55C3, + 0x55DB,0x55CC,0x55D0,0x55CB,0x55CA,0x55DD,0x55C0,0x55D4,0x55C4,0x55E9, + 0x55BF,0x55D2,0x558D,0x55CF,0x55D5, + /* plane 2, row 34 */ + 1 | (94 << 8), /* first, last */ + 0x55E2,0x55D6,0x55C8,0x55F2,0x55CD,0x55D9,0x55C2,0x5714,0x5853, + 0x5868,0x5864,0x584F,0x584D,0x5849,0x586F,0x5855,0x584E,0x585D,0x5859, + 0x5865,0x585B,0x583D,0x5863,0x5871,0x58FC,0x5AC7,0x5AC4,0x5ACB,0x5ABA, + 0x5AB8,0x5AB1,0x5AB5,0x5AB0,0x5ABF,0x5AC8,0x5ABB,0x5AC6,0x5AB7,0x5AC0, + 0x5ACA,0x5AB4,0x5AB6,0x5ACD,0x5AB9,0x5A90,0x5BD6,0x5BD8,0x5BD9,0x5C1F, + 0x5C33,0x5D71,0x5D63,0x5D4A,0x5D65,0x5D72,0x5D6C,0x5D5E,0x5D68,0x5D67, + 0x5D62,0x5DF0,0x5E4F,0x5E4E,0x5E4A,0x5E4D,0x5E4B,0x5EC5,0x5ECC,0x5EC6, + 0x5ECB,0x5EC7,0x5F40,0x5FAF,0x5FAD,0x60F7,0x6149,0x614A,0x612B,0x6145, + 0x6136,0x6132,0x612E,0x6146,0x612F,0x614F,0x6129,0x6140,0x6220,0x9168, + 0x6223,0x6225,0x6224,0x63C5,0x63F1, + /* plane 2, row 35 */ + 1 | (94 << 8), /* first, last */ + 0x63EB,0x6410,0x6412,0x6409,0x6420,0x6424,0x6433,0x6443,0x641F, + 0x6415,0x6418,0x6439,0x6437,0x6422,0x6423,0x640C,0x6426,0x6430,0x6428, + 0x6441,0x6435,0x642F,0x640A,0x641A,0x6440,0x6425,0x6427,0x640B,0x63E7, + 0x641B,0x642E,0x6421,0x640E,0x656F,0x6592,0x65D3,0x6686,0x668C,0x6695, + 0x6690,0x668B,0x668A,0x6699,0x6694,0x6678,0x6720,0x6966,0x695F,0x6938, + 0x694E,0x6962,0x6971,0x693F,0x6945,0x696A,0x6939,0x6942,0x6957,0x6959, + 0x697A,0x6948,0x6949,0x6935,0x696C,0x6933,0x693D,0x6965,0x68F0,0x6978, + 0x6934,0x6969,0x6940,0x696F,0x6944,0x6976,0x6958,0x6941,0x6974,0x694C, + 0x693B,0x694B,0x6937,0x695C,0x694F,0x6951,0x6932,0x6952,0x692F,0x697B, + 0x693C,0x6B46,0x6B45,0x6B43,0x6B42, + /* plane 2, row 36 */ + 1 | (94 << 8), /* first, last */ + 0x6B48,0x6B41,0x6B9B,0x6BFB,0x6BFC,0x6BF9,0x6BF7,0x6BF8,0x6E9B, + 0x6ED6,0x6EC8,0x6E8F,0x6EC0,0x6E9F,0x6E93,0x6E94,0x6EA0,0x6EB1,0x6EB9, + 0x6EC6,0x6ED2,0x6EBD,0x6EC1,0x6E9E,0x6EC9,0x6EB7,0x6EB0,0x6ECD,0x6EA6, + 0x6ECF,0x6EB2,0x6EBE,0x6EC3,0x6EDC,0x6ED8,0x6E99,0x6E92,0x6E8E,0x6E8D, + 0x6EA4,0x6EA1,0x6EBF,0x6EB3,0x6ED0,0x6ECA,0x6E97,0x6EAE,0x6EA3,0x7147, + 0x7154,0x7152,0x7163,0x7160,0x7141,0x715D,0x7162,0x7172,0x7178,0x716A, + 0x7161,0x7142,0x7158,0x7143,0x714B,0x7170,0x715F,0x7150,0x7153,0x7144, + 0x714D,0x715A,0x724F,0x728D,0x728C,0x7291,0x7290,0x728E,0x733C,0x7342, + 0x733B,0x733A,0x7340,0x734A,0x7349,0x7444,0x744A,0x744B,0x7452,0x7451, + 0x7457,0x7440,0x744F,0x7450,0x744E, + /* plane 2, row 37 */ + 1 | (94 << 8), /* first, last */ + 0x7442,0x7446,0x744D,0x7454,0x74E1,0x74FF,0x74FE,0x74FD,0x751D, + 0x7579,0x7577,0x6983,0x75EF,0x760F,0x7603,0x75F7,0x75FE,0x75FC,0x75F9, + 0x75F8,0x7610,0x75FB,0x75F6,0x75ED,0x75F5,0x75FD,0x7699,0x76B5,0x76DD, + 0x7755,0x775F,0x7760,0x7752,0x7756,0x775A,0x7769,0x7767,0x7754,0x7759, + 0x776D,0x77E0,0x7887,0x789A,0x7894,0x788F,0x7884,0x7895,0x7885,0x7886, + 0x78A1,0x7883,0x7879,0x7899,0x7880,0x7896,0x787B,0x797C,0x7982,0x797D, + 0x7979,0x7A11,0x7A18,0x7A19,0x7A12,0x7A17,0x7A15,0x7A22,0x7A13,0x7A1B, + 0x7A10,0x7AA3,0x7AA2,0x7A9E,0x7AEB,0x7B66,0x7B64,0x7B6D,0x7B74,0x7B69, + 0x7B72,0x7B65,0x7B73,0x7B71,0x7B70,0x7B61,0x7B78,0x7B76,0x7B63,0x7CB2, + 0x7CB4,0x7CAF,0x7D88,0x7D86,0x7D80, + /* plane 2, row 38 */ + 1 | (94 << 8), /* first, last */ + 0x7D8D,0x7D7F,0x7D85,0x7D7A,0x7D8E,0x7D7B,0x7D83,0x7D7C,0x7D8C, + 0x7D94,0x7D84,0x7D7D,0x7D92,0x7F6D,0x7F6B,0x7F67,0x7F68,0x7F6C,0x7FA6, + 0x7FA5,0x7FA7,0x7FDB,0x7FDC,0x8021,0x8164,0x8160,0x8177,0x815C,0x8169, + 0x815B,0x8162,0x8172,0x6721,0x815E,0x8176,0x8167,0x816F,0x8144,0x8161, + 0x821D,0x8249,0x8244,0x8240,0x8242,0x8245,0x84F1,0x843F,0x8456,0x8476, + 0x8479,0x848F,0x848D,0x8465,0x8451,0x8440,0x8486,0x8467,0x8430,0x844D, + 0x847D,0x845A,0x8459,0x8474,0x8473,0x845D,0x8507,0x845E,0x8437,0x843A, + 0x8434,0x847A,0x8443,0x8478,0x8432,0x8445,0x8429,0x83D9,0x844B,0x842F, + 0x8442,0x842D,0x845F,0x8470,0x8439,0x844E,0x844C,0x8452,0x846F,0x84C5, + 0x848E,0x843B,0x8447,0x8436,0x8433, + /* plane 2, row 39 */ + 1 | (94 << 8), /* first, last */ + 0x8468,0x847E,0x8444,0x842B,0x8460,0x8454,0x846E,0x8450,0x870B, + 0x8704,0x86F7,0x870C,0x86FA,0x86D6,0x86F5,0x874D,0x86F8,0x870E,0x8709, + 0x8701,0x86F6,0x870D,0x8705,0x88D6,0x88CB,0x88CD,0x88CE,0x88DE,0x88DB, + 0x88DA,0x88CC,0x88D0,0x8985,0x899B,0x89DF,0x89E5,0x89E4,0x89E1,0x89E0, + 0x89E2,0x89DC,0x89E6,0x8A76,0x8A86,0x8A7F,0x8A61,0x8A3F,0x8A77,0x8A82, + 0x8A84,0x8A75,0x8A83,0x8A81,0x8A74,0x8A7A,0x8C3C,0x8C4B,0x8C4A,0x8C65, + 0x8C64,0x8C66,0x8C86,0x8C84,0x8C85,0x8CCC,0x8D68,0x8D69,0x8D91,0x8D8C, + 0x8D8E,0x8D8F,0x8D8D,0x8D93,0x8D94,0x8D90,0x8D92,0x8DF0,0x8DE0,0x8DEC, + 0x8DF1,0x8DEE,0x8DD0,0x8DE9,0x8DE3,0x8DE2,0x8DE7,0x8DF2,0x8DEB,0x8DF4, + 0x8F06,0x8EFF,0x8F01,0x8F00,0x8F05, + /* plane 2, row 40 */ + 1 | (94 << 8), /* first, last */ + 0x8F07,0x8F08,0x8F02,0x8F0B,0x9052,0x903F,0x9044,0x9049,0x903D, + 0x9110,0x910D,0x910F,0x9111,0x9116,0x9114,0x910B,0x910E,0x916E,0x916F, + 0x9248,0x9252,0x9230,0x923A,0x9266,0x9233,0x9265,0x925E,0x9283,0x922E, + 0x924A,0x9246,0x926D,0x926C,0x924F,0x9260,0x9267,0x926F,0x9236,0x9261, + 0x9270,0x9231,0x9254,0x9263,0x9250,0x9272,0x924E,0x9253,0x924C,0x9256, + 0x9232,0x959F,0x959C,0x959E,0x959B,0x9692,0x9693,0x9691,0x9697,0x96CE, + 0x96FA,0x96FD,0x96F8,0x96F5,0x9773,0x9777,0x9778,0x9772,0x980F,0x980D, + 0x980E,0x98AC,0x98F6,0x98F9,0x99AF,0x99B2,0x99B0,0x99B5,0x9AAD,0x9AAB, + 0x9B5B,0x9CEA,0x9CED,0x9CE7,0x9E80,0x9EFD,0x50E6,0x50D4,0x50D7,0x50E8, + 0x50F3,0x50DB,0x50EA,0x50DD,0x50E4, + /* plane 2, row 41 */ + 1 | (94 << 8), /* first, last */ + 0x50D3,0x50EC,0x50F0,0x50EF,0x50E3,0x50E0,0x51D8,0x5280,0x5281, + 0x52E9,0x52EB,0x5330,0x53AC,0x5627,0x5615,0x560C,0x5612,0x55FC,0x560F, + 0x561C,0x5601,0x5613,0x5602,0x55FA,0x561D,0x5604,0x55FF,0x55F9,0x5889, + 0x587C,0x5890,0x5898,0x5886,0x5881,0x587F,0x5874,0x588B,0x587A,0x5887, + 0x5891,0x588E,0x5876,0x5882,0x5888,0x587B,0x5894,0x588F,0x58FE,0x596B, + 0x5ADC,0x5AEE,0x5AE5,0x5AD5,0x5AEA,0x5ADA,0x5AED,0x5AEB,0x5AF3,0x5AE2, + 0x5AE0,0x5ADB,0x5AEC,0x5ADE,0x5ADD,0x5AD9,0x5AE8,0x5ADF,0x5B77,0x5BE0, + 0x5BE3,0x5C63,0x5D82,0x5D80,0x5D7D,0x5D86,0x5D7A,0x5D81,0x5D77,0x5D8A, + 0x5D89,0x5D88,0x5D7E,0x5D7C,0x5D8D,0x5D79,0x5D7F,0x5E58,0x5E59,0x5E53, + 0x5ED8,0x5ED1,0x5ED7,0x5ECE,0x5EDC, + /* plane 2, row 42 */ + 1 | (94 << 8), /* first, last */ + 0x5ED5,0x5ED9,0x5ED2,0x5ED4,0x5F44,0x5F43,0x5F6F,0x5FB6,0x612C, + 0x6128,0x6141,0x615E,0x6171,0x6173,0x6152,0x6153,0x6172,0x616C,0x6180, + 0x6174,0x6154,0x617A,0x615B,0x6165,0x613B,0x616A,0x6161,0x6156,0x6229, + 0x6227,0x622B,0x642B,0x644D,0x645B,0x645D,0x6474,0x6476,0x6472,0x6473, + 0x647D,0x6475,0x6466,0x64A6,0x644E,0x6482,0x645E,0x645C,0x644B,0x6453, + 0x6460,0x6450,0x647F,0x643F,0x646C,0x646B,0x6459,0x6465,0x6477,0x6573, + 0x65A0,0x66A1,0x66A0,0x669F,0x6705,0x6704,0x6722,0x69B1,0x69B6,0x69C9, + 0x69A0,0x69CE,0x6996,0x69B0,0x69AC,0x69BC,0x6991,0x6999,0x698E,0x69A7, + 0x698D,0x69A9,0x69BE,0x69AF,0x69BF,0x69C4,0x69BD,0x69A4,0x69D4,0x69B9, + 0x69CA,0x699A,0x69CF,0x69B3,0x6993, + /* plane 2, row 43 */ + 1 | (94 << 8), /* first, last */ + 0x69AA,0x69A1,0x699E,0x69D9,0x6997,0x6990,0x69C2,0x69B5,0x69A5, + 0x69C6,0x6B4A,0x6B4D,0x6B4B,0x6B9E,0x6B9F,0x6BA0,0x6BC3,0x6BC4,0x6BFE, + 0x6ECE,0x6EF5,0x6EF1,0x6F03,0x6F25,0x6EF8,0x6F37,0x6EFB,0x6F2E,0x6F09, + 0x6F4E,0x6F19,0x6F1A,0x6F27,0x6F18,0x6F3B,0x6F12,0x6EED,0x6F0A,0x6F36, + 0x6F73,0x6EF9,0x6EEE,0x6F2D,0x6F40,0x6F30,0x6F3C,0x6F35,0x6EEB,0x6F07, + 0x6F0E,0x6F43,0x6F05,0x6EFD,0x6EF6,0x6F39,0x6F1C,0x6EFC,0x6F3A,0x6F1F, + 0x6F0D,0x6F1E,0x6F08,0x6F21,0x7187,0x7190,0x7189,0x7180,0x7185,0x7182, + 0x718F,0x717B,0x7186,0x7181,0x7197,0x7244,0x7253,0x7297,0x7295,0x7293, + 0x7343,0x734D,0x7351,0x734C,0x7462,0x7473,0x7471,0x7475,0x7472,0x7467, + 0x746E,0x7500,0x7502,0x7503,0x757D, + /* plane 2, row 44 */ + 1 | (94 << 8), /* first, last */ + 0x7590,0x7616,0x7608,0x760C,0x7615,0x7611,0x760A,0x7614,0x76B8, + 0x7781,0x777C,0x7785,0x7782,0x776E,0x7780,0x776F,0x777E,0x7783,0x78B2, + 0x78AA,0x78B4,0x78AD,0x78A8,0x787E,0x78AB,0x789E,0x78A5,0x78A0,0x78AC, + 0x78A2,0x78A4,0x7998,0x798A,0x798B,0x7996,0x7995,0x7994,0x7993,0x7997, + 0x7988,0x7992,0x7990,0x7A2B,0x7A4A,0x7A30,0x7A2F,0x7A28,0x7A26,0x7AA8, + 0x7AAB,0x7AAC,0x7AEE,0x7B88,0x7B9C,0x7B8A,0x7B91,0x7B90,0x7B96,0x7B8D, + 0x7B8C,0x7B9B,0x7B8E,0x7B85,0x7B98,0x5284,0x7B99,0x7BA4,0x7B82,0x7CBB, + 0x7CBF,0x7CBC,0x7CBA,0x7DA7,0x7DB7,0x7DC2,0x7DA3,0x7DAA,0x7DC1,0x7DC0, + 0x7DC5,0x7D9D,0x7DCE,0x7DC4,0x7DC6,0x7DCB,0x7DCC,0x7DAF,0x7DB9,0x7D96, + 0x7DBC,0x7D9F,0x7DA6,0x7DAE,0x7DA9, + /* plane 2, row 45 */ + 1 | (94 << 8), /* first, last */ + 0x7DA1,0x7DC9,0x7F73,0x7FE2,0x7FE3,0x7FE5,0x7FDE,0x8024,0x805D, + 0x805C,0x8189,0x8186,0x8183,0x8187,0x818D,0x818C,0x818B,0x8215,0x8497, + 0x84A4,0x84A1,0x849F,0x84BA,0x84CE,0x84C2,0x84AC,0x84AE,0x84AB,0x84B9, + 0x84B4,0x84C1,0x84CD,0x84AA,0x849A,0x84B1,0x84D0,0x849D,0x84A7,0x84BB, + 0x84A2,0x8494,0x84C7,0x84CC,0x849B,0x84A9,0x84AF,0x84A8,0x84D6,0x8498, + 0x84B6,0x84CF,0x84A0,0x84D7,0x84D4,0x84D2,0x84DB,0x84B0,0x8491,0x8661, + 0x8733,0x8723,0x8728,0x876B,0x8740,0x872E,0x871E,0x8721,0x8719,0x871B, + 0x8743,0x872C,0x8741,0x873E,0x8746,0x8720,0x8732,0x872A,0x872D,0x873C, + 0x8712,0x873A,0x8731,0x8735,0x8742,0x8726,0x8727,0x8738,0x8724,0x871A, + 0x8730,0x8711,0x88F7,0x88E7,0x88F1, + /* plane 2, row 46 */ + 1 | (94 << 8), /* first, last */ + 0x88F2,0x88FA,0x88FE,0x88EE,0x88FC,0x88F6,0x88FB,0x88F0,0x88EC, + 0x88EB,0x899D,0x89A1,0x899F,0x899E,0x89E9,0x89EB,0x89E8,0x8AAB,0x8A99, + 0x8A8B,0x8A92,0x8A8F,0x8A96,0x8C3D,0x8C68,0x8C69,0x8CD5,0x8CCF,0x8CD7, + 0x8D96,0x8E09,0x8E02,0x8DFF,0x8E0D,0x8DFD,0x8E0A,0x8E03,0x8E07,0x8E06, + 0x8E05,0x8DFE,0x8E00,0x8E04,0x8F10,0x8F11,0x8F0E,0x8F0D,0x9123,0x911C, + 0x9120,0x9122,0x911F,0x911D,0x911A,0x9124,0x9121,0x911B,0x917A,0x9172, + 0x9179,0x9173,0x92A5,0x92A4,0x9276,0x929B,0x927A,0x92A0,0x9294,0x92AA, + 0x928D,0x92A6,0x929A,0x92AB,0x9279,0x9297,0x927F,0x92A3,0x92EE,0x928E, + 0x9282,0x9295,0x92A2,0x927D,0x9288,0x92A1,0x928A,0x9286,0x928C,0x9299, + 0x92A7,0x927E,0x9287,0x92A9,0x929D, + /* plane 2, row 47 */ + 1 | (94 << 8), /* first, last */ + 0x928B,0x922D,0x969E,0x96A1,0x96FF,0x9758,0x977D,0x977A,0x977E, + 0x9783,0x9780,0x9782,0x977B,0x9784,0x9781,0x977F,0x97CE,0x97CD,0x9816, + 0x98AD,0x98AE,0x9902,0x9900,0x9907,0x999D,0x999C,0x99C3,0x99B9,0x99BB, + 0x99BA,0x99C2,0x99BD,0x99C7,0x9AB1,0x9AE3,0x9AE7,0x9B3E,0x9B3F,0x9B60, + 0x9B61,0x9B5F,0x9CF1,0x9CF2,0x9CF5,0x9EA7,0x50FF,0x5103,0x5130,0x50F8, + 0x5106,0x5107,0x50F6,0x50FE,0x510B,0x510C,0x50FD,0x510A,0x528B,0x528C, + 0x52F1,0x52EF,0x5648,0x5642,0x564C,0x5635,0x5641,0x564A,0x5649,0x5646, + 0x5658,0x565A,0x5640,0x5633,0x563D,0x562C,0x563E,0x5638,0x562A,0x563A, + 0x571A,0x58AB,0x589D,0x58B1,0x58A0,0x58A3,0x58AF,0x58AC,0x58A5,0x58A1, + 0x58FF,0x5AFF,0x5AF4,0x5AFD,0x5AF7, + /* plane 2, row 48 */ + 1 | (94 << 8), /* first, last */ + 0x5AF6,0x5B03,0x5AF8,0x5B02,0x5AF9,0x5B01,0x5B07,0x5B05,0x5B0F, + 0x5C67,0x5D99,0x5D97,0x5D9F,0x5D92,0x5DA2,0x5D93,0x5D95,0x5DA0,0x5D9C, + 0x5DA1,0x5D9A,0x5D9E,0x5E69,0x5E5D,0x5E60,0x5E5C,0x7DF3,0x5EDB,0x5EDE, + 0x5EE1,0x5F49,0x5FB2,0x618B,0x6183,0x6179,0x61B1,0x61B0,0x61A2,0x6189, + 0x619B,0x6193,0x61AF,0x61AD,0x619F,0x6192,0x61AA,0x61A1,0x618D,0x6166, + 0x61B3,0x622D,0x646E,0x6470,0x6496,0x64A0,0x6485,0x6497,0x649C,0x648F, + 0x648B,0x648A,0x648C,0x64A3,0x649F,0x6468,0x64B1,0x6498,0x6576,0x657A, + 0x6579,0x657B,0x65B2,0x65B3,0x66B5,0x66B0,0x66A9,0x66B2,0x66B7,0x66AA, + 0x66AF,0x6A00,0x6A06,0x6A17,0x69E5,0x69F8,0x6A15,0x69F1,0x69E4,0x6A20, + 0x69FF,0x69EC,0x69E2,0x6A1B,0x6A1D, + /* plane 2, row 49 */ + 1 | (94 << 8), /* first, last */ + 0x69FE,0x6A27,0x69F2,0x69EE,0x6A14,0x69F7,0x69E7,0x6A40,0x6A08, + 0x69E6,0x69FB,0x6A0D,0x69FC,0x69EB,0x6A09,0x6A04,0x6A18,0x6A25,0x6A0F, + 0x69F6,0x6A26,0x6A07,0x69F4,0x6A16,0x6B51,0x6BA5,0x6BA3,0x6BA2,0x6BA6, + 0x6C01,0x6C00,0x6BFF,0x6C02,0x6F41,0x6F26,0x6F7E,0x6F87,0x6FC6,0x6F92, + 0x6F8D,0x6F89,0x6F8C,0x6F62,0x6F4F,0x6F85,0x6F5A,0x6F96,0x6F76,0x6F6C, + 0x6F82,0x6F55,0x6F72,0x6F52,0x6F50,0x6F57,0x6F94,0x6F93,0x6F5D,0x6F00, + 0x6F61,0x6F6B,0x6F7D,0x6F67,0x6F90,0x6F53,0x6F8B,0x6F69,0x6F7F,0x6F95, + 0x6F63,0x6F77,0x6F6A,0x6F7B,0x71B2,0x71AF,0x719B,0x71B0,0x71A0,0x719A, + 0x71A9,0x71B5,0x719D,0x71A5,0x719E,0x71A4,0x71A1,0x71AA,0x719C,0x71A7, + 0x71B3,0x7298,0x729A,0x7358,0x7352, + /* plane 2, row 50 */ + 1 | (94 << 8), /* first, last */ + 0x735E,0x735F,0x7360,0x735D,0x735B,0x7361,0x735A,0x7359,0x7362, + 0x7487,0x7489,0x748A,0x7486,0x7481,0x747D,0x7485,0x7488,0x747C,0x7479, + 0x7508,0x7507,0x757E,0x7625,0x761E,0x7619,0x761D,0x761C,0x7623,0x761A, + 0x7628,0x761B,0x769C,0x769D,0x769E,0x769B,0x778D,0x778F,0x7789,0x7788, + 0x78CD,0x78BB,0x78CF,0x78CC,0x78D1,0x78CE,0x78D4,0x78C8,0x78C3,0x78C4, + 0x78C9,0x799A,0x79A1,0x79A0,0x799C,0x79A2,0x799B,0x6B76,0x7A39,0x7AB2, + 0x7AB4,0x7AB3,0x7BB7,0x7BCB,0x7BBE,0x7BAC,0x7BCE,0x7BAF,0x7BB9,0x7BCA, + 0x7BB5,0x7CC5,0x7CC8,0x7CCC,0x7CCB,0x7DF7,0x7DDB,0x7DEA,0x7DE7,0x7DD7, + 0x7DE1,0x7E03,0x7DFA,0x7DE6,0x7DF6,0x7DF1,0x7DF0,0x7DEE,0x7DDF,0x7F76, + 0x7FAC,0x7FB0,0x7FAD,0x7FED,0x7FEB, + /* plane 2, row 51 */ + 1 | (94 << 8), /* first, last */ + 0x7FEA,0x7FEC,0x7FE6,0x7FE8,0x8064,0x8067,0x81A3,0x819F,0x819E, + 0x8195,0x81A2,0x8199,0x8197,0x8216,0x824F,0x8253,0x8252,0x8250,0x824E, + 0x8251,0x8524,0x853B,0x850F,0x8500,0x8529,0x850E,0x8509,0x850D,0x851F, + 0x850A,0x8527,0x851C,0x84FB,0x852B,0x84FA,0x8508,0x850C,0x84F4,0x852A, + 0x84F2,0x8515,0x84F7,0x84EB,0x84F3,0x84FC,0x8512,0x84EA,0x84E9,0x8516, + 0x84FE,0x8528,0x851D,0x852E,0x8502,0x84FD,0x851E,0x84F6,0x8531,0x8526, + 0x84E7,0x84E8,0x84F0,0x84EF,0x84F9,0x8518,0x8520,0x8530,0x850B,0x8519, + 0x852F,0x8662,0x8756,0x8763,0x8764,0x8777,0x87E1,0x8773,0x8758,0x8754, + 0x875B,0x8752,0x8761,0x875A,0x8751,0x875E,0x876D,0x876A,0x8750,0x874E, + 0x875F,0x875D,0x876F,0x876C,0x877A, + /* plane 2, row 52 */ + 1 | (94 << 8), /* first, last */ + 0x876E,0x875C,0x8765,0x874F,0x877B,0x8775,0x8762,0x8767,0x8769, + 0x885A,0x8905,0x890C,0x8914,0x890B,0x8917,0x8918,0x8919,0x8906,0x8916, + 0x8911,0x890E,0x8909,0x89A2,0x89A4,0x89A3,0x89ED,0x89F0,0x89EC,0x8ACF, + 0x8AC6,0x8AB8,0x8AD3,0x8AD1,0x8AD4,0x8AD5,0x8ABB,0x8AD7,0x8ABE,0x8AC0, + 0x8AC5,0x8AD8,0x8AC3,0x8ABA,0x8ABD,0x8AD9,0x8C3E,0x8C4D,0x8C8F,0x8CE5, + 0x8CDF,0x8CD9,0x8CE8,0x8CDA,0x8CDD,0x8CE7,0x8DA0,0x8D9C,0x8DA1,0x8D9B, + 0x8E20,0x8E23,0x8E25,0x8E24,0x8E2E,0x8E15,0x8E1B,0x8E16,0x8E11,0x8E19, + 0x8E26,0x8E27,0x8E14,0x8E12,0x8E18,0x8E13,0x8E1C,0x8E17,0x8E1A,0x8F2C, + 0x8F24,0x8F18,0x8F1A,0x8F20,0x8F23,0x8F16,0x8F17,0x9073,0x9070,0x906F, + 0x9067,0x906B,0x912F,0x912B,0x9129, + /* plane 2, row 53 */ + 1 | (94 << 8), /* first, last */ + 0x912A,0x9132,0x9126,0x912E,0x9185,0x9186,0x918A,0x9181,0x9182, + 0x9184,0x9180,0x92D0,0x92C3,0x92C4,0x92C0,0x92D9,0x92B6,0x92CF,0x92F1, + 0x92DF,0x92D8,0x92E9,0x92D7,0x92DD,0x92CC,0x92EF,0x92C2,0x92E8,0x92CA, + 0x92C8,0x92CE,0x92E6,0x92CD,0x92D5,0x92C9,0x92E0,0x92DE,0x92E7,0x92D1, + 0x92D3,0x92B5,0x92E1,0x9325,0x92C6,0x92B4,0x957C,0x95AC,0x95AB,0x95AE, + 0x95B0,0x96A4,0x96A2,0x96D3,0x9705,0x9708,0x9702,0x975A,0x978A,0x978E, + 0x9788,0x97D0,0x97CF,0x981E,0x981D,0x9826,0x9829,0x9828,0x9820,0x981B, + 0x9827,0x98B2,0x9908,0x98FA,0x9911,0x9914,0x9916,0x9917,0x9915,0x99DC, + 0x99CD,0x99CF,0x99D3,0x99D4,0x99CE,0x99C9,0x99D6,0x99D8,0x99CB,0x99D7, + 0x99CC,0x9AB3,0x9AEC,0x9AEB,0x9AF3, + /* plane 2, row 54 */ + 1 | (94 << 8), /* first, last */ + 0x9AF2,0x9AF1,0x9B46,0x9B43,0x9B67,0x9B74,0x9B71,0x9B66,0x9B76, + 0x9B75,0x9B70,0x9B68,0x9B64,0x9B6C,0x9CFC,0x9CFA,0x9CFD,0x9CFF,0x9CF7, + 0x9D07,0x9D00,0x9CF9,0x9CFB,0x9D08,0x9D05,0x9D04,0x9E83,0x9ED3,0x9F0F, + 0x9F10,0x511C,0x5113,0x5117,0x511A,0x5111,0x51DE,0x5334,0x53E1,0x5670, + 0x5660,0x566E,0x5673,0x5666,0x5663,0x566D,0x5672,0x565E,0x5677,0x571C, + 0x571B,0x58C8,0x58BD,0x58C9,0x58BF,0x58BA,0x58C2,0x58BC,0x58C6,0x5B17, + 0x5B19,0x5B1B,0x5B21,0x5B14,0x5B13,0x5B10,0x5B16,0x5B28,0x5B1A,0x5B20, + 0x5B1E,0x5BEF,0x5DAC,0x5DB1,0x5DA9,0x5DA7,0x5DB5,0x5DB0,0x5DAE,0x5DAA, + 0x5DA8,0x5DB2,0x5DAD,0x5DAF,0x5DB4,0x5E67,0x5E68,0x5E66,0x5E6F,0x5EE9, + 0x5EE7,0x5EE6,0x5EE8,0x5EE5,0x5F4B, + /* plane 2, row 55 */ + 1 | (94 << 8), /* first, last */ + 0x5FBC,0x5FBB,0x619D,0x61A8,0x6196,0x61C5,0x61B4,0x61C6,0x61C1, + 0x61CC,0x61BA,0x61BF,0x61B8,0x618C,0x64D7,0x64D6,0x64D0,0x64CF,0x64C9, + 0x64BD,0x6489,0x64C3,0x64DB,0x64F3,0x64D9,0x6533,0x657F,0x657C,0x65A2, + 0x66C8,0x66BE,0x66C0,0x66CA,0x66CB,0x66CF,0x66BD,0x66BB,0x66BA,0x66CC, + 0x6723,0x6A34,0x6A66,0x6A49,0x6A67,0x6A32,0x6A68,0x6A3E,0x6A5D,0x6A6D, + 0x6A76,0x6A5B,0x6A51,0x6A28,0x6A5A,0x6A3B,0x6A3F,0x6A41,0x6A6A,0x6A64, + 0x6A50,0x6A4F,0x6A54,0x6A6F,0x6A69,0x6A60,0x6A3C,0x6A5E,0x6A56,0x6A55, + 0x6A4D,0x6A4E,0x6A46,0x6B55,0x6B54,0x6B56,0x6BA7,0x6BAA,0x6BAB,0x6BC8, + 0x6BC7,0x6C04,0x6C03,0x6C06,0x6FAD,0x6FCB,0x6FA3,0x6FC7,0x6FBC,0x6FCE, + 0x6FC8,0x6F5E,0x6FC4,0x6FBD,0x6F9E, + /* plane 2, row 56 */ + 1 | (94 << 8), /* first, last */ + 0x6FCA,0x6FA8,0x7004,0x6FA5,0x6FAE,0x6FBA,0x6FAC,0x6FAA,0x6FCF, + 0x6FBF,0x6FB8,0x6FA2,0x6FC9,0x6FAB,0x6FCD,0x6FAF,0x6FB2,0x6FB0,0x71C5, + 0x71C2,0x71BF,0x71B8,0x71D6,0x71C0,0x71C1,0x71CB,0x71D4,0x71CA,0x71C7, + 0x71CF,0x71BD,0x71D8,0x71BC,0x71C6,0x71DA,0x71DB,0x729D,0x729E,0x7369, + 0x7366,0x7367,0x736C,0x7365,0x736B,0x736A,0x747F,0x749A,0x74A0,0x7494, + 0x7492,0x7495,0x74A1,0x750B,0x7580,0x762F,0x762D,0x7631,0x763D,0x7633, + 0x763C,0x7635,0x7632,0x7630,0x76BB,0x76E6,0x779A,0x779D,0x77A1,0x779C, + 0x779B,0x77A2,0x77A3,0x7795,0x7799,0x7797,0x78DD,0x78E9,0x78E5,0x78EA, + 0x78DE,0x78E3,0x78DB,0x78E1,0x78E2,0x78ED,0x78DF,0x78E0,0x79A4,0x7A44, + 0x7A48,0x7A47,0x7AB6,0x7AB8,0x7AB5, + /* plane 2, row 57 */ + 1 | (94 << 8), /* first, last */ + 0x7AB1,0x7AB7,0x7BDE,0x7BE3,0x7BE7,0x7BDD,0x7BD5,0x7BE5,0x7BDA, + 0x7BE8,0x7BF9,0x7BD4,0x7BEA,0x7BE2,0x7BDC,0x7BEB,0x7BD8,0x7BDF,0x7CD2, + 0x7CD4,0x7CD7,0x7CD0,0x7CD1,0x7E12,0x7E21,0x7E17,0x7E0C,0x7E1F,0x7E20, + 0x7E13,0x7E0E,0x7E1C,0x7E15,0x7E1A,0x7E22,0x7E0B,0x7E0F,0x7E16,0x7E0D, + 0x7E14,0x7E25,0x7E24,0x7F43,0x7F7B,0x7F7C,0x7F7A,0x7FB1,0x7FEF,0x802A, + 0x8029,0x806C,0x81B1,0x81A6,0x81AE,0x81B9,0x81B5,0x81AB,0x81B0,0x81AC, + 0x81B4,0x81B2,0x81B7,0x81A7,0x81F2,0x8255,0x8256,0x8257,0x8556,0x8545, + 0x856B,0x854D,0x8553,0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562, + 0x8544,0x8551,0x8547,0x8563,0x853E,0x855B,0x8571,0x854E,0x856E,0x8575, + 0x8555,0x8567,0x8560,0x858C,0x8566, + /* plane 2, row 58 */ + 1 | (94 << 8), /* first, last */ + 0x855D,0x8554,0x8565,0x856C,0x8663,0x8665,0x8664,0x87A4,0x879B, + 0x878F,0x8797,0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779,0x8787, + 0x87A3,0x8785,0x8790,0x8791,0x879D,0x8784,0x8794,0x879C,0x879A,0x8789, + 0x891E,0x8926,0x8930,0x892D,0x892E,0x8927,0x8931,0x8922,0x8929,0x8923, + 0x892F,0x892C,0x891F,0x89F1,0x8AE0,0x8AE2,0x8AF2,0x8AF4,0x8AF5,0x8ADD, + 0x8B14,0x8AE4,0x8ADF,0x8AF0,0x8AC8,0x8ADE,0x8AE1,0x8AE8,0x8AFF,0x8AEF, + 0x8AFB,0x8C91,0x8C92,0x8C90,0x8CF5,0x8CEE,0x8CF1,0x8CF0,0x8CF3,0x8D6C, + 0x8D6E,0x8DA5,0x8DA7,0x8E33,0x8E3E,0x8E38,0x8E40,0x8E45,0x8E36,0x8E3C, + 0x8E3D,0x8E41,0x8E30,0x8E3F,0x8EBD,0x8F36,0x8F2E,0x8F35,0x8F32,0x8F39, + 0x8F37,0x8F34,0x9076,0x9079,0x907B, + /* plane 2, row 59 */ + 1 | (94 << 8), /* first, last */ + 0x9086,0x90FA,0x9133,0x9135,0x9136,0x9193,0x9190,0x9191,0x918D, + 0x918F,0x9327,0x931E,0x9308,0x931F,0x9306,0x930F,0x937A,0x9338,0x933C, + 0x931B,0x9323,0x9312,0x9301,0x9346,0x932D,0x930E,0x930D,0x92CB,0x931D, + 0x92FA,0x9313,0x92F9,0x92F7,0x9334,0x9302,0x9324,0x92FF,0x9329,0x9339, + 0x9335,0x932A,0x9314,0x930C,0x930B,0x92FE,0x9309,0x9300,0x92FB,0x9316, + 0x95BC,0x95CD,0x95BE,0x95B9,0x95BA,0x95B6,0x95BF,0x95B5,0x95BD,0x96A9, + 0x96D4,0x970B,0x9712,0x9710,0x9799,0x9797,0x9794,0x97F0,0x97F8,0x9835, + 0x982F,0x9832,0x9924,0x991F,0x9927,0x9929,0x999E,0x99EE,0x99EC,0x99E5, + 0x99E4,0x99F0,0x99E3,0x99EA,0x99E9,0x99E7,0x9AB9,0x9ABF,0x9AB4,0x9ABB, + 0x9AF6,0x9AFA,0x9AF9,0x9AF7,0x9B33, + /* plane 2, row 60 */ + 1 | (94 << 8), /* first, last */ + 0x9B80,0x9B85,0x9B87,0x9B7C,0x9B7E,0x9B7B,0x9B82,0x9B93,0x9B92, + 0x9B90,0x9B7A,0x9B95,0x9B7D,0x9B88,0x9D25,0x9D17,0x9D20,0x9D1E,0x9D14, + 0x9D29,0x9D1D,0x9D18,0x9D22,0x9D10,0x9D19,0x9D1F,0x9E88,0x9E86,0x9E87, + 0x9EAE,0x9EAD,0x9ED5,0x9ED6,0x9EFA,0x9F12,0x9F3D,0x5126,0x5125,0x5122, + 0x5124,0x5120,0x5129,0x52F4,0x5693,0x568C,0x568D,0x5686,0x5684,0x5683, + 0x567E,0x5682,0x567F,0x5681,0x58D6,0x58D4,0x58CF,0x58D2,0x5B2D,0x5B25, + 0x5B32,0x5B23,0x5B2C,0x5B27,0x5B26,0x5B2F,0x5B2E,0x5B7B,0x5BF1,0x5BF2, + 0x5DB7,0x5E6C,0x5E6A,0x5FBE,0x61C3,0x61B5,0x61BC,0x61E7,0x61E0,0x61E5, + 0x61E4,0x61E8,0x61DE,0x64EF,0x64E9,0x64E3,0x64EB,0x64E4,0x64E8,0x6581, + 0x6580,0x65B6,0x65DA,0x66D2,0x6A8D, + /* plane 2, row 61 */ + 1 | (94 << 8), /* first, last */ + 0x6A96,0x6A81,0x6AA5,0x6A89,0x6A9F,0x6A9B,0x6AA1,0x6A9E,0x6A87, + 0x6A93,0x6A8E,0x6A95,0x6A83,0x6AA8,0x6AA4,0x6A91,0x6A7F,0x6AA6,0x6A9A, + 0x6A85,0x6A8C,0x6A92,0x6B5B,0x6BAD,0x6C09,0x6FCC,0x6FA9,0x6FF4,0x6FD4, + 0x6FE3,0x6FDC,0x6FED,0x6FE7,0x6FE6,0x6FDE,0x6FF2,0x6FDD,0x6FE2,0x6FE8, + 0x71E1,0x71F1,0x71E8,0x71F2,0x71E4,0x71F0,0x71E2,0x7373,0x736E,0x736F, + 0x7497,0x74B2,0x74AB,0x7490,0x74AA,0x74AD,0x74B1,0x74A5,0x74AF,0x7510, + 0x7511,0x7512,0x750F,0x7584,0x7643,0x7648,0x7649,0x7647,0x76A4,0x76E9, + 0x77B5,0x77AB,0x77B2,0x77B7,0x77B6,0x77B4,0x77B1,0x77A8,0x77F0,0x78F3, + 0x78FD,0x7902,0x78FB,0x78FC,0x78FF,0x78F2,0x7905,0x78F9,0x78FE,0x7904, + 0x79AB,0x79A8,0x7A5C,0x7A5B,0x7A56, + /* plane 2, row 62 */ + 1 | (94 << 8), /* first, last */ + 0x7A58,0x7A54,0x7A5A,0x7ABE,0x7AC0,0x7AC1,0x7C05,0x7C0F,0x7BF2, + 0x7C00,0x7BFF,0x7BFB,0x7C0E,0x7BF4,0x7C0B,0x7BF3,0x7C02,0x7C09,0x7C03, + 0x7C01,0x7BF8,0x7BFD,0x7C06,0x7BF0,0x7BF1,0x7C10,0x7C0A,0x7CE8,0x7E2D, + 0x7E3C,0x7E42,0x7E33,0x9848,0x7E38,0x7E2A,0x7E49,0x7E40,0x7E47,0x7E29, + 0x7E4C,0x7E30,0x7E3B,0x7E36,0x7E44,0x7E3A,0x7F45,0x7F7F,0x7F7E,0x7F7D, + 0x7FF4,0x7FF2,0x802C,0x81BB,0x81C4,0x81CC,0x81CA,0x81C5,0x81C7,0x81BC, + 0x81E9,0x825B,0x825A,0x825C,0x8583,0x8580,0x858F,0x85A7,0x8595,0x85A0, + 0x858B,0x85A3,0x857B,0x85A4,0x859A,0x859E,0x8577,0x857C,0x8589,0x85A1, + 0x857A,0x8578,0x8557,0x858E,0x8596,0x8586,0x858D,0x8599,0x859D,0x8581, + 0x85A2,0x8582,0x8588,0x8585,0x8579, + /* plane 2, row 63 */ + 1 | (94 << 8), /* first, last */ + 0x8576,0x8598,0x8590,0x859F,0x8668,0x87BE,0x87AA,0x87AD,0x87C5, + 0x87B0,0x87AC,0x87B9,0x87B5,0x87BC,0x87AE,0x87C9,0x87C3,0x87C2,0x87CC, + 0x87B7,0x87AF,0x87C4,0x87CA,0x87B4,0x87B6,0x87BF,0x87B8,0x87BD,0x87DE, + 0x87B2,0x8935,0x8933,0x893C,0x893E,0x8941,0x8952,0x8937,0x8942,0x89AD, + 0x89AF,0x89AE,0x89F2,0x89F3,0x8B1E,0x8B18,0x8B16,0x8B11,0x8B05,0x8B0B, + 0x8B22,0x8B0F,0x8B12,0x8B15,0x8B07,0x8B0D,0x8B08,0x8B06,0x8B1C,0x8B13, + 0x8B1A,0x8C4F,0x8C70,0x8C72,0x8C71,0x8C6F,0x8C95,0x8C94,0x8CF9,0x8D6F, + 0x8E4E,0x8E4D,0x8E53,0x8E50,0x8E4C,0x8E47,0x8F43,0x8F40,0x9085,0x907E, + 0x9138,0x919A,0x91A2,0x919B,0x9199,0x919F,0x91A1,0x919D,0x91A0,0x93A1, + 0x9383,0x93AF,0x9364,0x9356,0x9347, + /* plane 2, row 64 */ + 1 | (94 << 8), /* first, last */ + 0x937C,0x9358,0x935C,0x9376,0x9349,0x9350,0x9351,0x9360,0x936D, + 0x938F,0x934C,0x936A,0x9379,0x9357,0x9355,0x9352,0x934F,0x9371,0x9377, + 0x937B,0x9361,0x935E,0x9363,0x9367,0x934E,0x9359,0x95C7,0x95C0,0x95C9, + 0x95C3,0x95C5,0x95B7,0x96AE,0x96B0,0x96AC,0x9720,0x971F,0x9718,0x971D, + 0x9719,0x979A,0x97A1,0x979C,0x979E,0x979D,0x97D5,0x97D4,0x97F1,0x9841, + 0x9844,0x984A,0x9849,0x9845,0x9843,0x9925,0x992B,0x992C,0x992A,0x9933, + 0x9932,0x992F,0x992D,0x9931,0x9930,0x9998,0x99A3,0x99A1,0x9A02,0x99FA, + 0x99F4,0x99F7,0x99F9,0x99F8,0x99F6,0x99FB,0x99FD,0x99FE,0x99FC,0x9A03, + 0x9ABE,0x9AFE,0x9AFD,0x9B01,0x9AFC,0x9B48,0x9B9A,0x9BA8,0x9B9E,0x9B9B, + 0x9BA6,0x9BA1,0x9BA5,0x9BA4,0x9B86, + /* plane 2, row 65 */ + 1 | (94 << 8), /* first, last */ + 0x9BA2,0x9BA0,0x9BAF,0x9D33,0x9D41,0x9D67,0x9D36,0x9D2E,0x9D2F, + 0x9D31,0x9D38,0x9D30,0x9D45,0x9D42,0x9D43,0x9D3E,0x9D37,0x9D40,0x9D3D, + 0x7FF5,0x9D2D,0x9E8A,0x9E89,0x9E8D,0x9EB0,0x9EC8,0x9EDA,0x9EFB,0x9EFF, + 0x9F24,0x9F23,0x9F22,0x9F54,0x9FA0,0x5131,0x512D,0x512E,0x5698,0x569C, + 0x5697,0x569A,0x569D,0x5699,0x5970,0x5B3C,0x5C69,0x5C6A,0x5DC0,0x5E6D, + 0x5E6E,0x61D8,0x61DF,0x61ED,0x61EE,0x61F1,0x61EA,0x61F0,0x61EB,0x61D6, + 0x61E9,0x64FF,0x6504,0x64FD,0x64F8,0x6501,0x6503,0x64FC,0x6594,0x65DB, + 0x66DA,0x66DB,0x66D8,0x6AC5,0x6AB9,0x6ABD,0x6AE1,0x6AC6,0x6ABA,0x6AB6, + 0x6AB7,0x6AC7,0x6AB4,0x6AAD,0x6B5E,0x6BC9,0x6C0B,0x7007,0x700C,0x700D, + 0x7001,0x7005,0x7014,0x700E,0x6FFF, + /* plane 2, row 66 */ + 1 | (94 << 8), /* first, last */ + 0x7000,0x6FFB,0x7026,0x6FFC,0x6FF7,0x700A,0x7201,0x71FF,0x71F9, + 0x7203,0x71FD,0x7376,0x74B8,0x74C0,0x74B5,0x74C1,0x74BE,0x74B6,0x74BB, + 0x74C2,0x7514,0x7513,0x765C,0x7664,0x7659,0x7650,0x7653,0x7657,0x765A, + 0x76A6,0x76BD,0x76EC,0x77C2,0x77BA,0x790C,0x7913,0x7914,0x7909,0x7910, + 0x7912,0x7911,0x79AD,0x79AC,0x7A5F,0x7C1C,0x7C29,0x7C19,0x7C20,0x7C1F, + 0x7C2D,0x7C1D,0x7C26,0x7C28,0x7C22,0x7C25,0x7C30,0x7E5C,0x7E50,0x7E56, + 0x7E63,0x7E58,0x7E62,0x7E5F,0x7E51,0x7E60,0x7E57,0x7E53,0x7FB5,0x7FB3, + 0x7FF7,0x7FF8,0x8075,0x81D1,0x81D2,0x81D0,0x825F,0x825E,0x85B4,0x85C6, + 0x85C0,0x85C3,0x85C2,0x85B3,0x85B5,0x85BD,0x85C7,0x85C4,0x85BF,0x85CB, + 0x85CE,0x85C8,0x85C5,0x85B1,0x85B6, + /* plane 2, row 67 */ + 1 | (94 << 8), /* first, last */ + 0x85D2,0x8624,0x85B8,0x85B7,0x85BE,0x8669,0x87E7,0x87E6,0x87E2, + 0x87DB,0x87EB,0x87EA,0x87E5,0x87DF,0x87F3,0x87E4,0x87D4,0x87DC,0x87D3, + 0x87ED,0x87D8,0x87E3,0x87D7,0x87D9,0x8801,0x87F4,0x87E8,0x87DD,0x8953, + 0x894B,0x894F,0x894C,0x8946,0x8950,0x8951,0x8949,0x8B2A,0x8B27,0x8B23, + 0x8B33,0x8B30,0x8B35,0x8B47,0x8B2F,0x8B3C,0x8B3E,0x8B31,0x8B25,0x8B37, + 0x8B26,0x8B36,0x8B2E,0x8B24,0x8B3B,0x8B3D,0x8B3A,0x8C42,0x8C75,0x8C99, + 0x8C98,0x8C97,0x8CFE,0x8D04,0x8D02,0x8D00,0x8E5C,0x8E62,0x8E60,0x8E57, + 0x8E56,0x8E5E,0x8E65,0x8E67,0x8E5B,0x8E5A,0x8E61,0x8E5D,0x8E69,0x8E54, + 0x8F46,0x8F47,0x8F48,0x8F4B,0x9128,0x913A,0x913B,0x913E,0x91A8,0x91A5, + 0x91A7,0x91AF,0x91AA,0x93B5,0x938C, + /* plane 2, row 68 */ + 1 | (94 << 8), /* first, last */ + 0x9392,0x93B7,0x939B,0x939D,0x9389,0x93A7,0x938E,0x93AA,0x939E, + 0x93A6,0x9395,0x9388,0x9399,0x939F,0x9380,0x938D,0x93B1,0x9391,0x93B2, + 0x93A4,0x93A8,0x93B4,0x93A3,0x95D2,0x95D3,0x95D1,0x96B3,0x96D7,0x96DA, + 0x5DC2,0x96DF,0x96D8,0x96DD,0x9723,0x9722,0x9725,0x97AC,0x97AE,0x97A8, + 0x97AB,0x97A4,0x97AA,0x97A2,0x97A5,0x97D7,0x97D9,0x97D6,0x97D8,0x97FA, + 0x9850,0x9851,0x9852,0x98B8,0x9941,0x993C,0x993A,0x9A0F,0x9A0B,0x9A09, + 0x9A0D,0x9A04,0x9A11,0x9A0A,0x9A05,0x9A07,0x9A06,0x9AC0,0x9ADC,0x9B08, + 0x9B04,0x9B05,0x9B29,0x9B35,0x9B4A,0x9B4C,0x9B4B,0x9BC7,0x9BC6,0x9BC3, + 0x9BBF,0x9BC1,0x9BB5,0x9BB8,0x9BD3,0x9BB6,0x9BC4,0x9BB9,0x9BBD,0x9D5C, + 0x9D53,0x9D4F,0x9D4A,0x9D5B,0x9D4B, + /* plane 2, row 69 */ + 1 | (94 << 8), /* first, last */ + 0x9D59,0x9D56,0x9D4C,0x9D57,0x9D52,0x9D54,0x9D5F,0x9D58,0x9D5A, + 0x9E8E,0x9E8C,0x9EDF,0x9F01,0x9F00,0x9F16,0x9F25,0x9F2B,0x9F2A,0x9F29, + 0x9F28,0x9F4C,0x9F55,0x5134,0x5135,0x5296,0x52F7,0x53B4,0x56AB,0x56AD, + 0x56A6,0x56A7,0x56AA,0x56AC,0x58DA,0x58DD,0x58DB,0x5912,0x5B3D,0x5B3E, + 0x5B3F,0x5DC3,0x5E70,0x5FBF,0x61FB,0x6507,0x6510,0x650D,0x6509,0x650C, + 0x650E,0x6584,0x65DE,0x65DD,0x66DE,0x6AE7,0x6AE0,0x6ACC,0x6AD1,0x6AD9, + 0x6ACB,0x6ADF,0x6ADC,0x6AD0,0x6AEB,0x6ACF,0x6ACD,0x6ADE,0x6B60,0x6BB0, + 0x6C0C,0x7019,0x7027,0x7020,0x7016,0x702B,0x7021,0x7022,0x7023,0x7029, + 0x7017,0x7024,0x701C,0x720C,0x720A,0x7207,0x7202,0x7205,0x72A5,0x72A6, + 0x72A4,0x72A3,0x72A1,0x74CB,0x74C5, + /* plane 2, row 70 */ + 1 | (94 << 8), /* first, last */ + 0x74B7,0x74C3,0x7516,0x7660,0x77C9,0x77CA,0x77C4,0x77F1,0x791D, + 0x791B,0x7921,0x791C,0x7917,0x791E,0x79B0,0x7A67,0x7A68,0x7C33,0x7C3C, + 0x7C39,0x7C2C,0x7C3B,0x7CEC,0x7CEA,0x7E76,0x7E75,0x7E78,0x7E70,0x7E77, + 0x7E6F,0x7E7A,0x7E72,0x7E74,0x7E68,0x7F4B,0x7F4A,0x7F83,0x7F86,0x7FB7, + 0x7FFD,0x7FFE,0x8078,0x81D7,0x81D5,0x820B,0x8264,0x8261,0x8263,0x85EB, + 0x85F1,0x85ED,0x85D9,0x85E1,0x85E8,0x85DA,0x85D7,0x85EC,0x85F2,0x85F8, + 0x85D8,0x85DF,0x85E3,0x85DC,0x85D1,0x85F0,0x85E6,0x85EF,0x85DE,0x85E2, + 0x8800,0x87FA,0x8803,0x87F6,0x87F7,0x8809,0x880C,0x880B,0x8806,0x87FC, + 0x8808,0x87FF,0x880A,0x8802,0x8962,0x895A,0x895B,0x8957,0x8961,0x895C, + 0x8958,0x895D,0x8959,0x8988,0x89B7, + /* plane 2, row 71 */ + 1 | (94 << 8), /* first, last */ + 0x89B6,0x89F6,0x8B50,0x8B48,0x8B4A,0x8B40,0x8B53,0x8B56,0x8B54, + 0x8B4B,0x8B55,0x8B51,0x8B42,0x8B52,0x8B57,0x8C43,0x8C77,0x8C76,0x8C9A, + 0x8D06,0x8D07,0x8D09,0x8DAC,0x8DAA,0x8DAD,0x8DAB,0x8E6D,0x8E78,0x8E73, + 0x8E6A,0x8E6F,0x8E7B,0x8EC2,0x8F52,0x8F51,0x8F4F,0x8F50,0x8F53,0x8FB4, + 0x9140,0x913F,0x91B0,0x91AD,0x93DE,0x93C7,0x93CF,0x93C2,0x93DA,0x93D0, + 0x93F9,0x93EC,0x93CC,0x93D9,0x93A9,0x93E6,0x93CA,0x93D4,0x93EE,0x93E3, + 0x93D5,0x93C4,0x93CE,0x93C0,0x93D2,0x93A5,0x93E7,0x957D,0x95DA,0x95DB, + 0x96E1,0x9729,0x972B,0x972C,0x9728,0x9726,0x97B3,0x97B7,0x97B6,0x97DD, + 0x97DE,0x97DF,0x985C,0x9859,0x985D,0x9857,0x98BF,0x98BD,0x98BB,0x98BE, + 0x9948,0x9947,0x9943,0x99A6,0x99A7, + /* plane 2, row 72 */ + 1 | (94 << 8), /* first, last */ + 0x9A1A,0x9A15,0x9A25,0x9A1D,0x9A24,0x9A1B,0x9A22,0x9A20,0x9A27, + 0x9A23,0x9A1E,0x9A1C,0x9A14,0x9AC2,0x9B0B,0x9B0A,0x9B0E,0x9B0C,0x9B37, + 0x9BEA,0x9BEB,0x9BE0,0x9BDE,0x9BE4,0x9BE6,0x9BE2,0x9BF0,0x9BD4,0x9BD7, + 0x9BEC,0x9BDC,0x9BD9,0x9BE5,0x9BD5,0x9BE1,0x9BDA,0x9D77,0x9D81,0x9D8A, + 0x9D84,0x9D88,0x9D71,0x9D80,0x9D78,0x9D86,0x9D8B,0x9D8C,0x9D7D,0x9D6B, + 0x9D74,0x9D75,0x9D70,0x9D69,0x9D85,0x9D73,0x9D7B,0x9D82,0x9D6F,0x9D79, + 0x9D7F,0x9D87,0x9D68,0x9E94,0x9E91,0x9EC0,0x9EFC,0x9F2D,0x9F40,0x9F41, + 0x9F4D,0x9F56,0x9F57,0x9F58,0x5337,0x56B2,0x56B5,0x56B3,0x58E3,0x5B45, + 0x5DC6,0x5DC7,0x5EEE,0x5EEF,0x5FC0,0x5FC1,0x61F9,0x6517,0x6516,0x6515, + 0x6513,0x65DF,0x66E8,0x66E3,0x66E4, + /* plane 2, row 73 */ + 1 | (94 << 8), /* first, last */ + 0x6AF3,0x6AF0,0x6AEA,0x6AE8,0x6AF9,0x6AF1,0x6AEE,0x6AEF,0x703C, + 0x7035,0x702F,0x7037,0x7034,0x7031,0x7042,0x7038,0x703F,0x703A,0x7039, + 0x702A,0x7040,0x703B,0x7033,0x7041,0x7213,0x7214,0x72A8,0x737D,0x737C, + 0x74BA,0x76AB,0x76AA,0x76BE,0x76ED,0x77CC,0x77CE,0x77CF,0x77CD,0x77F2, + 0x7925,0x7923,0x7927,0x7928,0x7924,0x7929,0x79B2,0x7A6E,0x7A6C,0x7A6D, + 0x7AF7,0x7C49,0x7C48,0x7C4A,0x7C47,0x7C45,0x7CEE,0x7E7B,0x7E7E,0x7E81, + 0x7E80,0x7FBA,0x7FFF,0x8079,0x81DB,0x81D9,0x8268,0x8269,0x8622,0x85FF, + 0x8601,0x85FE,0x861B,0x8600,0x85F6,0x8604,0x8609,0x8605,0x860C,0x85FD, + 0x8819,0x8810,0x8811,0x8817,0x8813,0x8816,0x8963,0x8966,0x89B9,0x89F7, + 0x8B60,0x8B6A,0x8B5D,0x8B68,0x8B63, + /* plane 2, row 74 */ + 1 | (94 << 8), /* first, last */ + 0x8B65,0x8B67,0x8B6D,0x8DAE,0x8E86,0x8E88,0x8E84,0x8F59,0x8F56, + 0x8F57,0x8F55,0x8F58,0x8F5A,0x908D,0x9143,0x9141,0x91B7,0x91B5,0x91B2, + 0x91B3,0x940B,0x9413,0x93FB,0x9420,0x940F,0x9414,0x93FE,0x9415,0x9410, + 0x9428,0x9419,0x940D,0x93F5,0x9400,0x93F7,0x9407,0x940E,0x9416,0x9412, + 0x93FA,0x9409,0x93F8,0x943C,0x940A,0x93FF,0x93FC,0x940C,0x93F6,0x9411, + 0x9406,0x95DE,0x95E0,0x95DF,0x972E,0x972F,0x97B9,0x97BB,0x97FD,0x97FE, + 0x9860,0x9862,0x9863,0x985F,0x98C1,0x98C2,0x9950,0x994E,0x9959,0x994C, + 0x994B,0x9953,0x9A32,0x9A34,0x9A31,0x9A2C,0x9A2A,0x9A36,0x9A29,0x9A2E, + 0x9A38,0x9A2D,0x9AC7,0x9ACA,0x9AC6,0x9B10,0x9B12,0x9B11,0x9C0B,0x9C08, + 0x9BF7,0x9C05,0x9C12,0x9BF8,0x9C40, + /* plane 2, row 75 */ + 1 | (94 << 8), /* first, last */ + 0x9C07,0x9C0E,0x9C06,0x9C17,0x9C14,0x9C09,0x9D9F,0x9D99,0x9DA4, + 0x9D9D,0x9D92,0x9D98,0x9D90,0x9D9B,0x9DA0,0x9D94,0x9D9C,0x9DAA,0x9D97, + 0x9DA1,0x9D9A,0x9DA2,0x9DA8,0x9D9E,0x9DA3,0x9DBF,0x9DA9,0x9D96,0x9DA6, + 0x9DA7,0x9E99,0x9E9B,0x9E9A,0x9EE5,0x9EE4,0x9EE7,0x9EE6,0x9F30,0x9F2E, + 0x9F5B,0x9F60,0x9F5E,0x9F5D,0x9F59,0x9F91,0x513A,0x5139,0x5298,0x5297, + 0x56C3,0x56BD,0x56BE,0x5B48,0x5B47,0x5DCB,0x5DCF,0x5EF1,0x61FD,0x651B, + 0x6B02,0x6AFC,0x6B03,0x6AF8,0x6B00,0x7043,0x7044,0x704A,0x7048,0x7049, + 0x7045,0x7046,0x721D,0x721A,0x7219,0x737E,0x7517,0x766A,0x77D0,0x792D, + 0x7931,0x792F,0x7C54,0x7C53,0x7CF2,0x7E8A,0x7E87,0x7E88,0x7E8B,0x7E86, + 0x7E8D,0x7F4D,0x7FBB,0x8030,0x81DD, + /* plane 2, row 76 */ + 1 | (94 << 8), /* first, last */ + 0x8618,0x862A,0x8626,0x861F,0x8623,0x861C,0x8619,0x8627,0x862E, + 0x8621,0x8620,0x8629,0x861E,0x8625,0x8829,0x881D,0x881B,0x8820,0x8824, + 0x881C,0x882B,0x884A,0x896D,0x8969,0x896E,0x896B,0x89FA,0x8B79,0x8B78, + 0x8B45,0x8B7A,0x8B7B,0x8D10,0x8D14,0x8DAF,0x8E8E,0x8E8C,0x8F5E,0x8F5B, + 0x8F5D,0x9146,0x9144,0x9145,0x91B9,0x943F,0x943B,0x9436,0x9429,0x943D, + 0x9430,0x9439,0x942A,0x9437,0x942C,0x9440,0x9431,0x95E5,0x95E4,0x95E3, + 0x9735,0x973A,0x97BF,0x97E1,0x9864,0x98C9,0x98C6,0x98C0,0x9958,0x9956, + 0x9A39,0x9A3D,0x9A46,0x9A44,0x9A42,0x9A41,0x9A3A,0x9A3F,0x9ACD,0x9B15, + 0x9B17,0x9B18,0x9B16,0x9B3A,0x9B52,0x9C2B,0x9C1D,0x9C1C,0x9C2C,0x9C23, + 0x9C28,0x9C29,0x9C24,0x9C21,0x9DB7, + /* plane 2, row 77 */ + 1 | (94 << 8), /* first, last */ + 0x9DB6,0x9DBC,0x9DC1,0x9DC7,0x9DCA,0x9DCF,0x9DBE,0x9DC5,0x9DC3, + 0x9DBB,0x9DB5,0x9DCE,0x9DB9,0x9DBA,0x9DAC,0x9DC8,0x9DB1,0x9DAD,0x9DCC, + 0x9DB3,0x9DCD,0x9DB2,0x9E7A,0x9E9C,0x9EEB,0x9EEE,0x9EED,0x9F1B,0x9F18, + 0x9F1A,0x9F31,0x9F4E,0x9F65,0x9F64,0x9F92,0x4EB9,0x56C6,0x56C5,0x56CB, + 0x5971,0x5B4B,0x5B4C,0x5DD5,0x5DD1,0x5EF2,0x6521,0x6520,0x6526,0x6522, + 0x6B0B,0x6B08,0x6B09,0x6C0D,0x7055,0x7056,0x7057,0x7052,0x721E,0x721F, + 0x72A9,0x737F,0x74D8,0x74D5,0x74D9,0x74D7,0x766D,0x76AD,0x7935,0x79B4, + 0x7A70,0x7A71,0x7C57,0x7C5C,0x7C59,0x7C5B,0x7C5A,0x7CF4,0x7CF1,0x7E91, + 0x7F4F,0x7F87,0x81DE,0x826B,0x8634,0x8635,0x8633,0x862C,0x8632,0x8636, + 0x882C,0x8828,0x8826,0x882A,0x8825, + /* plane 2, row 78 */ + 1 | (94 << 8), /* first, last */ + 0x8971,0x89BF,0x89BE,0x89FB,0x8B7E,0x8B84,0x8B82,0x8B86,0x8B85, + 0x8B7F,0x8D15,0x8E95,0x8E94,0x8E9A,0x8E92,0x8E90,0x8E96,0x8E97,0x8F60, + 0x8F62,0x9147,0x944C,0x9450,0x944A,0x944B,0x944F,0x9447,0x9445,0x9448, + 0x9449,0x9446,0x973F,0x97E3,0x986A,0x9869,0x98CB,0x9954,0x995B,0x9A4E, + 0x9A53,0x9A54,0x9A4C,0x9A4F,0x9A48,0x9A4A,0x9A49,0x9A52,0x9A50,0x9AD0, + 0x9B19,0x9B2B,0x9B3B,0x9B56,0x9B55,0x9C46,0x9C48,0x9C3F,0x9C44,0x9C39, + 0x9C33,0x9C41,0x9C3C,0x9C37,0x9C34,0x9C32,0x9C3D,0x9C36,0x9DDB,0x9DD2, + 0x9DDE,0x9DDA,0x9DCB,0x9DD0,0x9DDC,0x9DD1,0x9DDF,0x9DE9,0x9DD9,0x9DD8, + 0x9DD6,0x9DF5,0x9DD5,0x9DDD,0x9EB6,0x9EF0,0x9F35,0x9F33,0x9F32,0x9F42, + 0x9F6B,0x9F95,0x9FA2,0x513D,0x5299, + /* plane 2, row 79 */ + 1 | (94 << 8), /* first, last */ + 0x58E8,0x58E7,0x5972,0x5B4D,0x5DD8,0x882F,0x5F4F,0x6201,0x6203, + 0x6204,0x6529,0x6525,0x6596,0x66EB,0x6B11,0x6B12,0x6B0F,0x6BCA,0x705B, + 0x705A,0x7222,0x7382,0x7381,0x7383,0x7670,0x77D4,0x7C67,0x7C66,0x7E95, + 0x826C,0x863A,0x8640,0x8639,0x863C,0x8631,0x863B,0x863E,0x8830,0x8832, + 0x882E,0x8833,0x8976,0x8974,0x8973,0x89FE,0x8B8C,0x8B8E,0x8B8B,0x8B88, + 0x8C45,0x8D19,0x8E98,0x8F64,0x8F63,0x91BC,0x9462,0x9455,0x945D,0x9457, + 0x945E,0x97C4,0x97C5,0x9800,0x9A56,0x9A59,0x9B1E,0x9B1F,0x9B20,0x9C52, + 0x9C58,0x9C50,0x9C4A,0x9C4D,0x9C4B,0x9C55,0x9C59,0x9C4C,0x9C4E,0x9DFB, + 0x9DF7,0x9DEF,0x9DE3,0x9DEB,0x9DF8,0x9DE4,0x9DF6,0x9DE1,0x9DEE,0x9DE6, + 0x9DF2,0x9DF0,0x9DE2,0x9DEC,0x9DF4, + /* plane 2, row 80 */ + 1 | (94 << 8), /* first, last */ + 0x9DF3,0x9DE8,0x9DED,0x9EC2,0x9ED0,0x9EF2,0x9EF3,0x9F06,0x9F1C, + 0x9F38,0x9F37,0x9F36,0x9F43,0x9F4F,0x9F71,0x9F70,0x9F6E,0x9F6F,0x56D3, + 0x56CD,0x5B4E,0x5C6D,0x652D,0x66ED,0x66EE,0x6B13,0x705F,0x7061,0x705D, + 0x7060,0x7223,0x74DB,0x74E5,0x77D5,0x7938,0x79B7,0x79B6,0x7C6A,0x7E97, + 0x7F89,0x826D,0x8643,0x8838,0x8837,0x8835,0x884B,0x8B94,0x8B95,0x8E9E, + 0x8E9F,0x8EA0,0x8E9D,0x91BE,0x91BD,0x91C2,0x946B,0x9468,0x9469,0x96E5, + 0x9746,0x9743,0x9747,0x97C7,0x97E5,0x9A5E,0x9AD5,0x9B59,0x9C63,0x9C67, + 0x9C66,0x9C62,0x9C5E,0x9C60,0x9E02,0x9DFE,0x9E07,0x9E03,0x9E06,0x9E05, + 0x9E00,0x9E01,0x9E09,0x9DFF,0x9DFD,0x9E04,0x9EA0,0x9F1E,0x9F46,0x9F74, + 0x9F75,0x9F76,0x56D4,0x652E,0x65B8, + /* plane 2, row 81 */ + 1 | (94 << 8), /* first, last */ + 0x6B18,0x6B19,0x6B17,0x6B1A,0x7062,0x7226,0x72AA,0x77D8,0x77D9, + 0x7939,0x7C69,0x7C6B,0x7CF6,0x7E9A,0x7E98,0x7E9B,0x7E99,0x81E0,0x81E1, + 0x8646,0x8647,0x8648,0x8979,0x897A,0x897C,0x897B,0x89FF,0x8B98,0x8B99, + 0x8EA5,0x8EA4,0x8EA3,0x946E,0x946D,0x946F,0x9471,0x9473,0x9749,0x9872, + 0x995F,0x9C68,0x9C6E,0x9C6D,0x9E0B,0x9E0D,0x9E10,0x9E0F,0x9E12,0x9E11, + 0x9EA1,0x9EF5,0x9F09,0x9F47,0x9F78,0x9F7B,0x9F7A,0x9F79,0x571E,0x7066, + 0x7C6F,0x883C,0x8DB2,0x8EA6,0x91C3,0x9474,0x9478,0x9476,0x9475,0x9A60, + 0x9B2E,0x9C74,0x9C73,0x9C71,0x9C75,0x9E14,0x9E13,0x9EF6,0x9F0A,0x9FA4, + 0x7068,0x7065,0x7CF7,0x866A,0x883E,0x883D,0x883F,0x8B9E,0x8C9C,0x8EA9, + 0x8EC9,0x974B,0x9873,0x9874,0x98CC, + /* plane 2, row 82 */ + 1 | (36 << 8), /* first, last */ + 0x9961,0x99AB,0x9A64,0x9A66,0x9A67,0x9B24,0x9E15,0x9E17,0x9F48, + 0x6207,0x6B1E,0x7227,0x864C,0x8EA8,0x9482,0x9480,0x9481,0x9A69,0x9A68, + 0x9E19,0x864B,0x8B9F,0x9483,0x9C79,0x9EB7,0x7675,0x9A6B,0x9C7A,0x9E1D, + 0x7069,0x706A,0x7229,0x9EA4,0x9F7E,0x9F49,0x9F98, + /* plane 2, row 83: --- */ + /* plane 2, row 84: --- */ + /* plane 2, row 85: --- */ + /* plane 2, row 86: --- */ + /* plane 2, row 87: --- */ + /* plane 2, row 88: --- */ + /* plane 2, row 89: --- */ + /* plane 2, row 90: --- */ + /* plane 2, row 91: --- */ + /* plane 2, row 92: --- */ + /* plane 2, row 93: --- */ + /* plane 2, row 94: --- */ + /* plane 3, row 1 */ + 1 | (94 << 8), /* first, last */ + 0x4E28,0x4E36,0x4E3F,0x4E85,0x4E05,0x4E04,0x5182,0x5196,0x5338, + 0x5369,0x53B6,0x4E2A,0x4E87,0x4E49,0x51E2,0x4E46,0x4E8F,0x4EBC,0x4EBE, + 0x5166,0x51E3,0x5204,0x529C,0x5344,0x5902,0x590A,0x5B80,0x5DDB,0x5E7A, + 0x5E7F,0x5EF4,0x5F50,0x5F51,0x5F61,0x961D,0xD840,0x4E63,0x4E62,0x4EA3, + 0x5185,0x4EC5,0x4ECF,0x4ECE,0x4ECC,0x5184,0x5186,0xD87E,0x34C5,0x51E4, + 0x5205,0x529E,0x529D,0x52FD,0x5300,0x533A,0x3539,0x5346,0x535D,0x5386, + 0x53B7,0x3555,0x53CC,0x355B,0x53CE,0x5721,0x37A2,0x5E00,0x5F0C,0x6237, + 0x6238,0x6534,0x6535,0x65E0,0x3E26,0x738D,0x4E97,0x4EE0,0x3432,0xD840, + 0x4EE7,0x3433,0x4EE6,0x3434,0x36A2,0x3431,0x34B0,0x56D8,0x518B,0x518C, + 0x5199,0x51E5,0xD87E,0x520B,0x34DC, + 36, /* first low-surrogate */ + 0xDC0B, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDC17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDDA9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xDC50, + /* plane 3, row 2 */ + 1 | (94 << 8), /* first, last */ + 0x361E,0x5304,0x5303,0x5307,0xD87E,0x531E,0x535F,0x536D,0x5389, + 0x53BA,0x53D0,0x3565,0x53F6,0x53F7,0x53F9,0x3564,0x53F4,0x361D,0x3626, + 0x5724,0x5904,0x5918,0x5932,0x5930,0x5934,0x368E,0x5975,0x374A,0x5B82, + 0x5BF9,0x5C14,0x378B,0x37A6,0x37A4,0x37A5,0x37A7,0x382F,0x3832,0x5E81, + 0x5E83,0x5F0D,0x5F52,0x38D4,0x5FCA,0x5FC7,0x6239,0x39C5,0x624F,0x65E7, + 0x672F,0x6B7A,0x6C39,0x3CBA,0x3CB9,0x6C37,0x6C44,0x6C45,0x738C,0x7592, + 0x7676,0x9093,0x9092,0x48B3,0x49BA,0x4E21,0x4E20,0x4E22,0x4E68,0x4E89, + 0x4E98,0x4EF9,0x4EEF,0x343B,0x343C,0x4EF8,0x4F06,0x4F03,0x4EFC,0x4EEE, + 0x4F16,0x3439,0x4F28,0x4F1C,0x4F07,0x4F1A,0x4EFA,0x4F17,0x514A,0x34B2, + 0x5172,0xD87E,0x51B4,0x51B3,0x51B2, + 5, /* first low-surrogate */ + 0xDC2A, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xDC15, + /* plane 3, row 3 */ + 1 | (94 << 8), /* first, last */ + 0x34C7,0x51E8,0x342B,0x5214,0x520F,0x5215,0x5218,0x52A8,0xD87E, + 0x534B,0x534F,0x353B,0x5350,0x3544,0x538B,0x3542,0x53BE,0x355C,0x53D2, + 0x5416,0x53FF,0x3567,0x5400,0x3566,0x5405,0x5413,0x5415,0xD87E,0x361F, + 0x56E3,0x5735,0x5736,0x5731,0x5732,0x58EE,0x5905,0x4E54,0x368F,0x5936, + 0x3690,0x36A8,0x36A4,0x597A,0x36A3,0x5986,0x373D,0x374C,0x5B86,0x5F53, + 0x5C18,0x378C,0x5C3D,0x5C78,0x37A8,0x37AD,0x37AF,0xD847,0x5C80,0x3829, + 0x5E08,0x3836,0x3871,0x3870,0x386F,0x5EF5,0x5F0E,0x38A9,0x38AA,0x38FB, + 0x5FD3,0x5FDA,0x38FC,0x5FDB,0x39AE,0x620F,0x625D,0x625F,0x6267,0x6257, + 0x9F50,0x3AC3,0x65EB,0x65EA,0x3B30,0x6737,0x3B41,0x6732,0x6736,0x6B22, + 0x6BCE,0x3C8C,0x6C58,0x6C51,0x6C77, + 9, /* first low-surrogate */ + 0xDC2C, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xDC3B, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDD46, + /* plane 3, row 4 */ + 1 | (94 << 8), /* first, last */ + 0x6C3C,0x3CBB,0x6C5A,0xD84F,0x6C53,0x706F,0x7072,0x706E,0xD87E, + 0x3DA1,0x7073,0x72B1,0x72B2,0x3EA8,0x738F,0x3EAA,0x3EAB,0x4096,0x793C, + 0x41C2,0x808D,0x808E,0x4493,0x827B,0x4494,0x8D71,0x8FB9,0x9096,0x909A, + 0x49BB,0x4E24,0x4E71,0xD87E,0x4E9C,0x4F45,0x4F4A,0x4F39,0x4F37,0x3443, + 0x4F32,0x4F42,0x3442,0x4F44,0x4F4B,0x3444,0x4F40,0x4F35,0x4F31,0x5151, + 0xD87E,0x5150,0x514E,0x34B3,0x34B7,0x519D,0x34C8,0x51B5,0x51B8,0x51EC, + 0x5223,0x5227,0x5226,0x521F,0x522B,0x5220,0x52B4,0x52B3,0x3518,0x5325, + 0x533B,0x5374,0x3547,0x3546,0x3545,0x356B,0x3569,0x544D,0x3572,0x3571, + 0x543A,0x356C,0x356F,0x5444,0x544C,0x5423,0x541A,0x5432,0x544B,0x5421, + 0x3573,0x5434,0x5449,0x5450,0x5422, + 4, /* first low-surrogate */ + 0xDC86, 0, 0, 0, 0,0xDC35, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xDC1B, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xDC0E, + /* plane 3, row 5 */ + 1 | (94 << 8), /* first, last */ + 0x543F,0x5451,0x545A,0x542F,0x3576,0x56E9,0x56F2,0x56F3,0x56EF, + 0x56ED,0x56EC,0x56E6,0x5748,0x3627,0x5744,0x573F,0x573C,0x5753,0x5756, + 0x3630,0x575F,0x5743,0x5758,0x5757,0x3629,0x362A,0x362F,0x5746,0x362C, + 0x573D,0x362D,0x5742,0x5754,0x5755,0x58F1,0x58F2,0x58F0,0x590B,0x9EA6, + 0x56F1,0x593D,0x3693,0x5994,0x598C,0x36AD,0x599C,0x36AC,0x36AB,0x599F, + 0x36A9,0x599B,0x36AE,0x5989,0x599A,0x36AA,0x6588,0x374E,0x5B8D,0x3750, + 0x5BFE,0x5BFF,0x5BFD,0x5C2B,0x37B2,0x5C84,0x5C8E,0x5C9C,0x37B5,0x37B6, + 0x5C85,0x5DF5,0x5E09,0x3839,0x383B,0x5E0B,0x3872,0x5E92,0x5E90,0x5F03, + 0x38AC,0x5F1E,0x5F63,0x3908,0x5FE7,0x5FFE,0x5FE6,0x5FDC,0x5FCE,0x3903, + 0x5FFC,0x5FDF,0x5FEC,0x5FF6,0xD849, + 94, /* first low-surrogate */ + 0xDDD7, + /* plane 3, row 6 */ + 1 | (94 << 8), /* first, last */ + 0x5FF2,0x5FF0,0x5FF9,0x390B,0x6213,0x39AF,0xD87E,0x623B,0x623C, + 0x6282,0x39CE,0x39CB,0x39CC,0x6278,0x628B,0x39CD,0x629E,0x62A5,0x629B, + 0x629C,0x6299,0x628D,0x6285,0x629D,0x6275,0x3A80,0x3AAF,0x3AD3,0x65F6, + 0x3AD5,0x3AD4,0x3AD7,0x66F5,0x675B,0x3B42,0x6754,0x6752,0x3B44,0x6758, + 0x6744,0x674A,0x6761,0x3CC6,0x6C7F,0x6C91,0x6C9E,0x3CC0,0x6C6E,0x6C7C, + 0x6C9F,0x6C75,0x3CBE,0x6C56,0x6CA2,0x6C79,0x3CCA,0x6CA1,0x3CC4,0x6CAA, + 0x6CA0,0x3CC2,0x7079,0x7077,0x707E,0x3DA4,0x7075,0x707B,0x7264,0x3E29, + 0x72BB,0x72BC,0x72C7,0x72B9,0x72BE,0x72B6,0x3E60,0x3E5E,0x7398,0x3EAD, + 0x3EAE,0x3EAC,0x3F57,0x7593,0x7680,0x3FDD,0x7683,0x76C0,0x76C1,0x400E, + 0x4097,0x77F4,0x77F5,0x4127,0x7ACC, + 7, /* first low-surrogate */ + 0xDCB2, + /* plane 3, row 7 */ + 1 | (94 << 8), /* first, last */ + 0x7ACD,0x7CFA,0x809F,0x8091,0x8097,0x8094,0x4495,0x8286,0x828C, + 0xD87E,0x8295,0x4498,0x866C,0x459D,0x8FB5,0x8FBE,0x8FC7,0x488A,0x8FC1, + 0x90A9,0x90A4,0x48B5,0x48B6,0x48B7,0x90A8,0x9627,0x9626,0x962B,0x9633, + 0x9634,0x9629,0x4E3D,0x3428,0x4E9D,0x4F93,0x4F8A,0x344D,0x3449,0x4F6D, + 0x4F8E,0x4FA0,0x4FA2,0x4FA1,0x4F9F,0x4FA3,0xD840,0x4F72,0x3451,0x4F8C, + 0x5156,0xD87E,0xD87E,0x5190,0x34CB,0x34CA,0x34CC,0x51ED,0x51FE,0x522F, + 0xD841,0x523C,0x5234,0x5239,0x52B9,0x52B5,0x52BF,0x5355,0x353D,0x5376, + 0x537A,0x5393,0x3548,0x53C1,0x53C2,0x53D5,0x5485,0x3578,0x545F,0x5493, + 0x5489,0x5479,0x9EFE,0x548F,0x5469,0x546D,0x357A,0x5494,0x546A,0x548A, + 0x3577,0x56FD,0x56FB,0x56F8,0x3621, + 10, /* first low-surrogate */ + 0xDD8F, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xDE09, 0, 0, 0, + 0,0xDC0F,0xDC11, 0, 0, 0, 0, 0, 0, 0, + 0xDEEC, + /* plane 3, row 8 */ + 1 | (94 << 8), /* first, last */ + 0x56FC,0x56F6,0x5765,0x5781,0x5763,0x5767,0x3631,0x576E,0x5778, + 0x577F,0x3633,0x3634,0x58F3,0x594B,0x594C,0x36C1,0x36B0,0x36B4,0x59AD, + 0x36B8,0x59C4,0x36BC,0x59C2,0x59B0,0x36BF,0x36B5,0x36B1,0x36BD,0x59BF, + 0x36BB,0x59C9,0x59B8,0x59AC,0x36B3,0x36B6,0x36BA,0x59B7,0x59D7,0x36B7, + 0x5B60,0x3740,0x5B96,0x5B9E,0x5B94,0x5B9F,0x5B9D,0x3752,0x5C00,0x5C19, + 0x3790,0x3791,0x5C49,0x5C4A,0x37BE,0x5CBB,0x5CC1,0x37C0,0x37C1,0x37B9, + 0x5CB9,0x5C9E,0x5CB4,0x5CBA,0x5DF6,0x5E13,0x5E12,0x5E77,0x3879,0x5E98, + 0x387B,0x5E99,0x5E9D,0x5EF8,0x38A0,0x5EF9,0x3429,0x5F06,0x5F21,0x38AE, + 0x5F25,0x5F55,0x38CD,0x38CB,0x38D9,0x5F84,0x5F83,0x6030,0x6007,0x390C, + 0x6036,0x3901,0x3905,0x3902,0x5FE9, + /* plane 3, row 9 */ + 1 | (94 << 8), /* first, last */ + 0x603D,0x6008,0x3913,0x3911,0x62BA,0x62B2,0x39E4,0x62B7,0x62E4, + 0x62A7,0x39DA,0x39D5,0x39D3,0x62D5,0x62E1,0x62DD,0x62A6,0x62C1,0x62C5, + 0x62C0,0x62DF,0x62E0,0x62DE,0x39D6,0x6589,0x3AB4,0x65A6,0x65BA,0x3AD9, + 0x65FF,0x3AD8,0x6617,0x6618,0x6601,0x65FE,0x3B33,0x670C,0x3B48,0x676B, + 0x6796,0x6782,0x678A,0x3B47,0x67A3,0x3B4B,0x67A2,0x678F,0x3B4A,0x67F9, + 0x6780,0x6B26,0x6B27,0x6B68,0x6B69,0x3C5A,0x6B81,0x6BB4,0x6BD1,0x3C8E, + 0x3CB4,0x6C1C,0x3CCD,0x3CCC,0x3CCF,0x3CCB,0x3CCE,0x6C97,0x6C6C,0x6CDF, + 0x3CD2,0x6CEA,0x3CD1,0x6CE4,0x6CD8,0x6CB2,0x6CCE,0x6CC8,0x3DA6,0x708B, + 0x7088,0x7090,0x708F,0x3DAA,0x7087,0x7089,0x708D,0x7081,0x3DA8,0x708C, + 0x3E13,0x3E1A,0x7240,0x3E1D,0x3E1E, + /* plane 3, row 10 */ + 1 | (94 << 8), /* first, last */ + 0x7265,0x7266,0x7268,0x3E65,0x3E66,0x72CD,0x72D3,0x72DB,0x3E64, + 0x72CF,0x73A7,0x73A3,0x739E,0x3EB0,0x73AF,0x3EB3,0x3EB5,0x73AA,0x739C, + 0x3F19,0x7542,0x7544,0x753B,0x7541,0xD848,0x759B,0x759E,0x3F75,0x79C4, + 0x79C3,0x79C6,0x412B,0x412C,0x79C7,0x412D,0x79CA,0xD856,0x41C3,0x7ACF, + 0x7C76,0x7C74,0x7CFF,0x7CFC,0x34BA,0x4350,0x7F59,0x80A8,0x43D3,0x43D0, + 0x80B0,0x43DC,0x80B3,0x43D2,0x80A4,0x80B6,0x80A7,0x80AC,0x43DB,0x80A6, + 0x5367,0x820E,0x82C4,0x833E,0x829C,0x44A5,0x449F,0x449A,0x449C,0x44A2, + 0x82AA,0x449B,0x82C9,0x44A3,0x449D,0x82A6,0x82B2,0x4588,0x461A,0x488D, + 0x8FCC,0x8FD9,0x8FCA,0x8FD8,0x8FCF,0x90B7,0x48B8,0x90AD,0x90B9,0x9637, + 0x49C3,0x9641,0x963E,0x96B6,0x9751, + 25, /* first low-surrogate */ + 0xDF3F, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDD2E, + /* plane 3, row 11 */ + 1 | (94 << 8), /* first, last */ + 0x9763,0x4E57,0x4E79,0x4EB2,0x4EB0,0x4EAF,0x4EB1,0x4FD2,0x4FD5, + 0x345D,0x4FBE,0x4FB8,0x4FB0,0x4FB1,0x4FC8,0x345A,0x3457,0x4FC6,0x4FCC, + 0x4FE5,0x4FE3,0x4FB4,0x516A,0x34B8,0x519F,0x34C2,0x51C1,0x34CF,0x51C2, + 0x51C3,0x5245,0x5248,0x34E7,0x34E9,0x524F,0x4452,0x34E8,0x52C5,0x52CA, + 0x52C4,0x5327,0x5358,0x537D,0x354A,0x53DD,0x53DC,0x53DA,0x53D9,0x54B9, + 0x3580,0x54D0,0x54B4,0x54CA,0x3587,0x54A3,0x54DA,0x54A4,0x3584,0x54B2, + 0x549E,0x549F,0x54B5,0x3582,0x3581,0x54CD,0x3583,0x54CC,0x3622,0x5700, + 0x57AC,0x5791,0x578E,0x578D,0x5792,0x57A1,0x5790,0x57A6,0x57A8,0x363B, + 0x579C,0x5796,0x57A7,0x363A,0x3638,0x3639,0x3636,0x58F5,0x3685,0x5909, + 0x5908,0x3C54,0x5952,0x369A,0x36C4, + /* plane 3, row 12 */ + 1 | (94 << 8), /* first, last */ + 0x59DF,0x36C5,0x59EB,0x59EF,0x59F0,0x59D5,0x5A0D,0x5A04,0x59F9, + 0x5A02,0x59F8,0x59E2,0x59D9,0x59E7,0x5B6A,0x3754,0x3755,0x5BAB,0x3756, + 0x5C1B,0x5C2F,0x3796,0x663C,0x3795,0x3794,0x37C4,0x5CD1,0x5CDC,0x5CE6, + 0x5CE1,0x5CCD,0xD87E,0x5CE2,0x5CDD,0x5CE5,0x5DFB,0x5DFA,0x5E1E,0x3844, + 0x5EA1,0x387D,0x387E,0x5EFC,0x5EFB,0x5F2F,0x38B2,0x38B6,0x5F66,0xD87E, + 0x38DC,0x38DF,0x605C,0x3928,0x604E,0x6051,0x3919,0x3910,0x6023,0x6031, + 0x607C,0x6052,0x392C,0x6060,0x604A,0x6061,0x391B,0x6218,0x39C2,0x39EF, + 0x39E3,0x39E5,0x39EA,0x39E6,0x39EE,0x631F,0x6317,0x62EA,0x6321,0x6304, + 0x6305,0x39E8,0x6531,0x6544,0x6540,0x3A85,0x6542,0x65BE,0x3AE0,0x6629, + 0x661B,0x3ADD,0x6623,0x662C,0x661A, + 32, /* first low-surrogate */ + 0xDC7A, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDC99, + /* plane 3, row 13 */ + 1 | (94 << 8), /* first, last */ + 0x6630,0x663B,0x661E,0x6637,0x6638,0x3AE1,0x670E,0x3B51,0x3B55, + 0x67E8,0x67D6,0x3B52,0x67C7,0x67BC,0x6852,0x67BF,0x67D5,0x67FE,0x8363, + 0x67FB,0xD87E,0x67B1,0x6801,0x6805,0x6800,0x67D7,0x409E,0x6B2A,0x6B6B, + 0x3C52,0x3C5E,0x3C60,0x3C5F,0x6BE1,0x3C92,0x3CD6,0x6D23,0x6CFF,0x6D14, + 0x6D05,0x6D13,0x6D06,0x6D21,0x3CDE,0x6D15,0x6CAF,0x6CF4,0x6D02,0x6D45, + 0xD87E,0x6D26,0x3CD9,0x6D44,0x3CDD,0x6D24,0x70A5,0x3DAC,0x70A3,0x3DB0, + 0x70A2,0x70BB,0x70A0,0x70AA,0x3DAF,0x3DAE,0x70A8,0x70B6,0x70B2,0x70A7, + 0x3DAD,0x3DAB,0x70B9,0x722E,0x3E16,0x723C,0x3E30,0x726D,0x3E33,0x3E31, + 0x72E7,0x72ED,0x3E6E,0x72EC,0x72E5,0x72E2,0x3EB1,0x73C4,0x73BD,0x73CF, + 0x73C9,0x73C1,0x73D0,0x3EB7,0x73CE, + 21, /* first low-surrogate */ + 0xDCDF, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xDCFE, + /* plane 3, row 14 */ + 1 | (94 << 8), /* first, last */ + 0x74ED,0x74EB,0x3F1A,0x74EF,0x7549,0x7550,0x7546,0x754A,0x3F59, + 0x754D,0x75A6,0x3F7A,0x3F78,0x3F7B,0x75A8,0x3FDE,0x3FEC,0x76C7,0x76FF, + 0x401E,0x76FD,0x77E6,0x780A,0x409B,0x7804,0x780B,0x7807,0x409D,0x7815, + 0x7808,0x40FD,0x79D3,0x79D4,0x79D0,0x79D7,0x7A7C,0x4194,0x4193,0x7A7D, + 0x7A83,0x7A82,0x41C6,0x7AD4,0x7AD5,0x7AD3,0x7AD0,0x7AD2,0x7AFE,0x7AFC, + 0x7C77,0x7C7C,0x7C7B,0x42B8,0xD87E,0x42B7,0x42B9,0x4353,0xD854,0x4352, + 0x4351,0x7F8F,0x80D3,0x43E3,0x80CB,0x80D2,0x43E2,0x8109,0x80E2,0x80DF, + 0x80C6,0x4463,0x8224,0x82F7,0x82D8,0x82DD,0x44AA,0x44A6,0x82F8,0x82FC, + 0x44A8,0x44A9,0x82E9,0x44AB,0x82EE,0x44AC,0x82D0,0x830E,0x82E2,0x830B, + 0x82FD,0x5179,0x8676,0x459E,0x8678, + 54, /* first low-surrogate */ + 0xDD6A, 0, 0, 0,0xDD33, + /* plane 3, row 15 */ + 1 | (94 << 8), /* first, last */ + 0x459F,0x45A0,0x8675,0x867D,0x460F,0x8842,0x8866,0x461C,0x898C, + 0x8A05,0x46AE,0x8A06,0x46B0,0x8C9F,0x47D4,0x8FF1,0x8FE7,0x8FE9,0x8FEF, + 0x90C2,0x90BC,0x48BB,0x90C6,0x90C0,0x48C1,0x48C2,0x90CD,0x90C9,0x48BE, + 0x90C4,0x48E5,0x9581,0x49C6,0x9CEC,0x5032,0x4FF9,0x501D,0x4FFF,0x5004, + 0x4FF0,0x5003,0x462E,0x5002,0x4FFC,0x4FF2,0x5024,0x5008,0x5036,0x502E, + 0x3465,0x5010,0x5038,0x5039,0x4FFD,0x5056,0x4FFB,0x51A3,0x51A6,0x51A1, + 0x34D1,0x34D0,0x51C7,0x51C9,0x5260,0x5264,0x5259,0x5265,0x5267,0x5257, + 0x5263,0x34EE,0x5253,0x34EF,0x52CF,0x351E,0x52CE,0x52D0,0x52D1,0x52CC, + 0x354B,0x354D,0x3556,0x550D,0x54F4,0x3592,0x5513,0x54EF,0x54F5,0x54F9, + 0x5502,0x5500,0x3593,0x3590,0x5518, + /* plane 3, row 16 */ + 1 | (94 << 8), /* first, last */ + 0x54F0,0x54F6,0xD87E,0x3597,0x5519,0x3623,0x5705,0x57C9,0x363F, + 0x57B7,0x57CD,0x3643,0x3642,0x3644,0x57BE,0x57BB,0x3645,0x57DB,0x57C8, + 0x57C4,0x57C5,0x57D1,0x57CA,0x57C0,0x36D9,0x36DE,0x5A21,0x5A2A,0x36CF, + 0x5A1D,0x36CD,0x5A0B,0x36DD,0x36CE,0x36D3,0x36D6,0x5A22,0x36DC,0x36D1, + 0x5A24,0x36D0,0x5A14,0x5A31,0x36D5,0x5A2F,0x5A1A,0x5A12,0x36D4,0x36DB, + 0x5A26,0xD845,0x3743,0x5BBC,0x5BBB,0x5BB7,0x5C05,0x5C06,0x5C52,0x5C53, + 0x37CD,0x37D1,0x5CFA,0x5CEB,0x37CA,0x5CF3,0x5CF5,0x5CE9,0x5CEF,0x37D4, + 0x5E2A,0x5E30,0x5E2E,0x5E2C,0x5E2F,0x5EAF,0x5EA9,0x3886,0x5EFD,0x5F32, + 0x5F8E,0x5F93,0x5F8F,0x604F,0x6099,0x3933,0x607E,0x3937,0x6074,0x604B, + 0x6073,0x6075,0x392A,0x391F,0x6056, + 3, /* first low-surrogate */ + 0xDC41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xDF2E, + /* plane 3, row 17 */ + 1 | (94 << 8), /* first, last */ + 0x60A9,0x608B,0x60A6,0x3939,0x6093,0x60AE,0x609E,0x60A7,0x6245, + 0x39F2,0x39F8,0x632E,0x39F7,0x6352,0x6330,0x635B,0x39F4,0x6319,0x631B, + 0x39F1,0x6331,0x635D,0x6337,0x6335,0x6353,0x39F5,0x635C,0x633F,0x654B, + 0x3A87,0x4369,0x658B,0x3AB6,0x659A,0x6650,0x6646,0x664E,0x6640,0x3AE9, + 0x664B,0x6648,0x3AEB,0x6660,0x6644,0x664D,0x3B34,0x6837,0x6824,0x3B62, + 0x3B5C,0x681B,0x6836,0x3B60,0x682C,0x6819,0x6856,0x6847,0x683E,0x681E, + 0xD87E,0x6815,0x6822,0x6827,0x6859,0x6858,0x6855,0x6830,0x6823,0x6B2E, + 0x6B2B,0x6B30,0x6B6C,0x3C61,0x6B8B,0x3C7F,0x6BE9,0x6BEA,0x6BE5,0x6D6B, + 0x3CE5,0x3CE6,0x6D73,0x6D57,0x3CE9,0x3CF3,0x6D5D,0x6D56,0x6D8F,0x6D5B, + 0x6D1C,0x6D9A,0x6D9B,0x6D99,0x3CEE, + 60, /* first low-surrogate */ + 0xDCE1, + /* plane 3, row 18 */ + 1 | (94 << 8), /* first, last */ + 0x6D81,0x6D71,0x3CED,0x3CEC,0x6D72,0x6D5C,0x6D96,0x70C4,0x70DB, + 0x70CC,0x70D0,0x70E3,0x70DF,0x3DB3,0x70D6,0x70EE,0x70D5,0x3DB5,0x3E27, + 0x3E35,0x3E36,0x727A,0x3E71,0x72F5,0x7302,0x3EB8,0x3EC2,0x73E2,0x73EC, + 0x73D5,0x73F9,0x73DF,0x73E6,0x3EC8,0x3EC0,0x3EC1,0x3EC4,0x73E4,0x73E1, + 0x74F3,0x3F1F,0x3F1C,0x3F1D,0x3F4D,0x7556,0x7555,0x7558,0x7557,0x755E, + 0x75C3,0x3F87,0x3F82,0x75B4,0x3F7D,0x75B1,0x3FDF,0x4000,0x76CB,0x76CC, + 0x772A,0x4020,0x7716,0x770F,0x4022,0x4024,0x773F,0x772B,0x770E,0x7724, + 0x4021,0x7721,0x7718,0x77DD,0x40A4,0x40A5,0x7824,0x7836,0x4101,0x7958, + 0x7959,0x4103,0x7962,0x79DA,0x79D9,0x4137,0x79E1,0x79E5,0x79E8,0x79DB, + 0x4138,0x79E2,0x79F0,0x4199,0x4198, + /* plane 3, row 19 */ + 1 | (94 << 8), /* first, last */ + 0x4197,0x41C9,0x7ADA,0x7ADD,0x41C7,0x7ADB,0x7ADC,0x41D9,0x41DB, + 0x7B0D,0x7B0B,0x7B14,0x7C8E,0x7C86,0x427B,0x7C87,0x7C83,0x7C8B,0x427C, + 0x42BD,0x42BC,0x42C3,0x7D24,0x42C1,0x42BF,0x42C4,0x7D25,0x7F62,0x7F93, + 0x7F99,0x7F97,0x437E,0x437F,0x7FC4,0x7FC6,0x800A,0x43B4,0x43B3,0x8040, + 0x803C,0x803B,0x80F6,0x80FF,0x80EE,0x8104,0x8103,0x8107,0xD87E,0x43E6, + 0x80F7,0x4459,0x445A,0x822D,0x4464,0x8227,0x8229,0x831F,0x8357,0x44B4, + 0x44B9,0x44B7,0x44B5,0x8321,0x44C1,0x44B1,0x8318,0x8358,0x44B3,0x44BA, + 0x458C,0x458B,0x458D,0x8684,0x869F,0x869B,0x8689,0x86A6,0x8692,0x868F, + 0x86A0,0x884F,0x8878,0x887A,0x886E,0x887B,0x8884,0x8873,0x4678,0x4677, + 0x8A0D,0x8A0B,0x8A19,0x46B2,0x47D6, + 48, /* first low-surrogate */ + 0xDD83, + /* plane 3, row 20 */ + 1 | (94 << 8), /* first, last */ + 0x8ED0,0x4845,0x4892,0x4895,0x8FF9,0x9009,0x9008,0x48C6,0x90DE, + 0x9151,0x48E7,0x48E8,0x91DB,0x91DF,0x91DE,0x91D6,0x91E0,0x9585,0x9660, + 0x9659,0x49CB,0x9656,0x49CD,0x49F1,0x96BD,0x4B22,0x3421,0x5042,0x5059, + 0x346F,0x5044,0x5066,0x5052,0x5054,0x5071,0x5050,0x507B,0x507C,0x5058, + 0x3470,0x3464,0x5079,0x506C,0x5078,0x51A8,0x51D1,0x51CF,0x5268,0x5276, + 0x52D4,0x352D,0x53A0,0x53C4,0x3558,0x5558,0x554C,0x5568,0x35A6,0x5549, + 0x35A4,0x359F,0x555D,0x5529,0xD843,0x5554,0x5553,0x35A3,0x555A,0x35A0, + 0x553A,0x553F,0x552B,0x57EA,0x364A,0x57EF,0x3647,0x3648,0x57DD,0x57FE, + 0xD87E,0x57DE,0x57E6,0x3649,0x57E8,0x57FF,0x5803,0x58F7,0x68A6,0x591F, + 0x369E,0x595B,0x595D,0x595E,0xD845, + 64, /* first low-surrogate */ + 0xDDAE, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xDC55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xDE37, + /* plane 3, row 21 */ + 1 | (94 << 8), /* first, last */ + 0x36E8,0x5A2B,0x36EC,0x5A3B,0x36ED,0x36E6,0x5A61,0x5A3A,0x5A6E, + 0x5A4B,0x5A6B,0x36EB,0x36E7,0x5A45,0x5A4E,0x5A68,0x5A3D,0x5A71,0x5A3F, + 0x5A6F,0x5A75,0x36E9,0x5A73,0x5A2C,0x5A59,0x5A54,0x5A4F,0x5A63,0x375C, + 0x375D,0x5BC8,0x3760,0x5BC3,0x375B,0x5C5B,0x5C61,0x3799,0x5D21,0x5D0A, + 0x5D09,0x37D8,0x5D2C,0x5D08,0x37DA,0x37DD,0x5D2A,0x5D15,0x37E0,0x5D10, + 0x5D13,0x37E5,0x5D2F,0x5D18,0x37D7,0x5DE3,0x5E39,0x5E35,0x5E3A,0x5E32, + 0x384E,0x388C,0x3888,0xD87E,0x5EBB,0x5EBA,0x5F34,0x5F39,0x38CE,0xD87E, + 0x38E5,0x38E6,0x6098,0x3932,0x60D0,0x3940,0x3947,0x394C,0x60D7,0x60AA, + 0x3935,0x60A1,0x60A4,0x3930,0x60EE,0x3943,0x60E7,0x394D,0x60E8,0x60DE, + 0x39B7,0x39F3,0x637E,0x638B,0x3A02, + 63, /* first low-surrogate */ + 0xDC8D, 0, 0, 0, 0, 0,0xDC9C, + /* plane 3, row 22 */ + 1 | (94 << 8), /* first, last */ + 0x3A0B,0x6379,0x6386,0x6393,0x3A04,0x6373,0x636A,0xD87E,0x636C, + 0x3A08,0x637F,0x39FC,0x63B2,0x63BA,0x39FF,0x3A00,0x6366,0x6374,0x3A8B, + 0x655A,0x3A8D,0x654E,0x654D,0x658D,0x658E,0x65AD,0x3ACA,0x65C7,0x65CA, + 0x3ACB,0x65C9,0xD87E,0x65E3,0x6657,0x3AF3,0x6663,0x6667,0x671A,0x6719, + 0x6716,0x3B36,0x3B6A,0x689E,0x68B6,0x6898,0x6873,0x3B6B,0x689A,0x688E, + 0x68B7,0x68DB,0x68A5,0x686C,0x68C1,0x6884,0x3B71,0x3B68,0x6895,0x687A, + 0x6899,0x3B72,0x68B8,0x68B9,0x6870,0x3C2E,0x6B35,0x3C62,0x6B90,0x6BBB, + 0x6BED,0x3C98,0x3CB5,0x3CEB,0x6DC1,0x6DC3,0x6DCE,0x3CFB,0x3CF8,0x6DAD, + 0x6E04,0x3CF5,0x6DB9,0x3D08,0x6DE7,0xD87E,0x6E08,0x6E06,0x3D0A,0x6E0A, + 0x6DB0,0x3D06,0x6DF8,0x6E0C,0x3CFD, + 8, /* first low-surrogate */ + 0xDCBA, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xDCCB, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xDD07, + /* plane 3, row 23 */ + 1 | (94 << 8), /* first, last */ + 0x6DB1,0x3CFA,0x6E02,0x6E07,0x6E09,0x6E01,0x6E17,0x6DFF,0x6E12, + 0x3DBA,0x3DB9,0x7103,0x7107,0x7101,0x70F5,0x70F1,0x7108,0x70F2,0x710F, + 0x3DBB,0x70FE,0x3E18,0x3E40,0x3E3D,0x731A,0x7310,0x730E,0x7402,0x73F3, + 0x3ECD,0x3EC9,0x73FB,0x3ECB,0x3ECA,0x3ECE,0x751B,0x7523,0x7561,0x7568, + 0x3F5E,0x7567,0x75D3,0x3F91,0x3F8C,0x7690,0x3FE1,0x4002,0x76D5,0x76D7, + 0x76D6,0x7730,0x402B,0x7726,0x402A,0x7740,0x3E14,0x771E,0x40AD,0x40A3, + 0x40AB,0x7847,0x40AF,0x784B,0x7851,0x784F,0x7842,0x7846,0x4104,0x796E, + 0x796C,0x79F2,0x4144,0x79F1,0x79F5,0x79F3,0x79F9,0x413D,0x4147,0x419C, + 0x7A9A,0x7A93,0x7A91,0x7AE1,0x41E0,0x41E4,0x7B21,0x7B1C,0x7B16,0x7B17, + 0x7B36,0x7B1F,0x4280,0x7C93,0x7C99, + /* plane 3, row 24 */ + 1 | (94 << 8), /* first, last */ + 0x7C9A,0x7C9C,0x42CA,0x7D49,0x42D4,0x7D34,0x7D37,0x42D2,0x7D2D, + 0x42CB,0x7D4C,0x42CE,0x42D3,0x7D48,0x4344,0x4348,0x7F3B,0x4345,0x4381, + 0x4386,0x4385,0x8008,0x801A,0x43A3,0x801D,0x43B5,0x8049,0x8045,0x8044, + 0x7C9B,0x43FA,0x43F9,0x812A,0x812E,0x43FB,0x43F2,0x8131,0x43EF,0x811A, + 0x8134,0x8117,0x445B,0x4466,0x44CE,0x831D,0x8371,0x8384,0x8380,0x8372, + 0x83A1,0x35B4,0x8379,0x8391,0x44C8,0x839F,0x83AD,0x44D1,0x44C5,0x8323, + 0x44D2,0x8385,0x839C,0x83B7,0x8658,0x865A,0x458F,0x8657,0x86B2,0x45A7, + 0x86AE,0x45A5,0x45A4,0x4611,0x8845,0x889C,0x8894,0x88A3,0x888F,0x88A5, + 0x88A9,0x88A6,0x888A,0x88A0,0x8890,0x8992,0x8991,0x8994,0x46B5,0x8A26, + 0x8A32,0x8A28,0x46B4,0x46BD,0x8A1C, + /* plane 3, row 25 */ + 1 | (94 << 8), /* first, last */ + 0x46BB,0x8A2B,0x8A20,0x46B9,0x8A29,0x46C2,0x46BE,0x46BA,0x8A21, + 0x8C3A,0x3AB7,0x8C5B,0x8C58,0x8C7C,0x4758,0x8CA6,0x8CAE,0x8CAD,0x8D65, + 0x479B,0x8D7E,0x479C,0x8D7C,0x8D7F,0x8D7A,0x8DBD,0x47DA,0x47DE,0x8DC0, + 0x8DBB,0x8EAD,0x8EAF,0x8ED6,0x484D,0x4846,0x4847,0x484B,0x484C,0x8ED9, + 0x4848,0x4899,0x9012,0x900E,0x9025,0x489B,0x9013,0x90EE,0x48CE,0x90AB, + 0x90F7,0x48EB,0x9159,0x9154,0x91F2,0x91F0,0x91E5,0x91F6,0x491C,0x498C, + 0x9587,0x49D1,0x965A,0x49D6,0x49D3,0x966E,0x49D4,0x49D0,0x49D5,0x9679, + 0x4A0B,0x98E1,0x98E6,0x4BC6,0x9EC4,0x9ED2,0x4E80,0x3424,0x4E81,0x508F, + 0x5097,0x5088,0x5089,0x3474,0x347A,0x5081,0x5160,0xD841,0x34C3,0x5E42, + 0x51D3,0x34D4,0x34D5,0x51D2,0x51D6, + 87, /* first low-surrogate */ + 0xDD64, + /* plane 3, row 26 */ + 1 | (94 << 8), /* first, last */ + 0x5273,0x34FB,0x5270,0x34F7,0x3532,0xD87E,0x53A8,0x53A6,0x53C5, + 0x5597,0x55DE,0x35BA,0x35BF,0x5596,0x55B4,0x35C7,0x5585,0x35B7,0x559B, + 0x55A0,0x35B9,0x5559,0x35C3,0x5586,0x35BD,0x35D0,0x55AF,0x557A,0x35C1, + 0x35BE,0x35CD,0x559E,0x35CB,0x55A9,0x570F,0x570E,0x581A,0x364F,0x581F, + 0x3653,0x583C,0x5818,0x583E,0x5826,0x3655,0x583A,0xD844,0x5822,0x3651, + 0x58FB,0x5963,0x5964,0x369F,0x5AA8,0x5AA3,0x5A82,0x5A88,0x5AA1,0x5A85, + 0x5A98,0x36FE,0x5A99,0x36FB,0x5A89,0x5A81,0x5A96,0x5A80,0x36F1,0x36F5, + 0x5A91,0x36EF,0x3704,0x3703,0x36F4,0x5ACF,0x36F3,0x3702,0x36F7,0x36FA, + 0x36FD,0x36EE,0x5A87,0x5AA0,0x36F0,0x5A79,0x36F2,0x5A86,0x5AAB,0x5AAA, + 0x5AA4,0x5A8D,0x5A7E,0x3744,0x5BD5, + 6, /* first low-surrogate */ + 0xDC33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDF64, + /* plane 3, row 27 */ + 1 | (94 << 8), /* first, last */ + 0x3762,0x3777,0x3DC9,0x5C1E,0x5C5F,0x5C5E,0x5D44,0x5D3E,0x37E8, + 0x5D48,0x5D1C,0x37EF,0x5D5B,0x5D4D,0x37E6,0x37ED,0x5D57,0x37E7,0x5D53, + 0x5D4F,0x37EB,0x5D3B,0x5D46,0x382D,0x3855,0x5E46,0x5E47,0x3853,0x5E48, + 0x5EC0,0x5EBD,0x5EBF,0x3890,0x5F11,0x38BE,0x5F3E,0x5F3B,0x38BD,0x5F3A, + 0x38CF,0x38D0,0x38EC,0x5FA7,0x394B,0x60EA,0x3948,0x6107,0x6122,0x610C, + 0x3955,0x3951,0x60B3,0x60D6,0x60D2,0x394E,0x60E3,0x60E5,0x60E9,0x396B, + 0x395E,0x6111,0x60FD,0x3960,0x3967,0x611E,0x6120,0x6121,0x621E,0x39B8, + 0x63E2,0x63DE,0x63E6,0x3A14,0x3A0F,0x3A07,0x3A13,0x63F8,0x3A17,0x63FE, + 0x63C1,0x63BF,0x63F7,0x63D1,0x655F,0x6560,0x6561,0x3A9A,0x3AB8,0x65D1, + 0x3AF7,0x3AF8,0x667D,0x666B,0x667F, + /* plane 3, row 28 */ + 1 | (94 << 8), /* first, last */ + 0x3AFD,0x3AF5,0x6673,0x6681,0x666D,0x6669,0x3AFA,0x3B38,0x671E, + 0x68ED,0x3B87,0x3B80,0x3B88,0x3B79,0x6903,0x3B7C,0x68FE,0x68E5,0x691E, + 0x6902,0x3B83,0x3B85,0x6909,0x68CA,0x6900,0xD87E,0x6901,0x6918,0x68E2, + 0x68CF,0x3B7B,0x692E,0x68C5,0x68FF,0x3B86,0x691C,0x68C3,0x3C34,0x6B6F, + 0x3C55,0x6B6E,0x3C68,0x6BBE,0x3C9C,0x6BF4,0x6C2D,0x3CFC,0x6DB6,0x6E75, + 0x6E1E,0x3D1A,0x6E18,0x3D17,0x6E48,0x3D1B,0x6E4F,0x3D13,0x6E42,0x6E6A, + 0x6E70,0x6DFE,0x3D05,0x3D07,0x6E6D,0x3D1C,0x6E7B,0x6E7E,0x6E59,0x3D11, + 0x6E57,0x3D16,0x6E80,0x6E50,0x3D15,0x6E29,0x6E76,0x6E2A,0x6E4C,0x712A, + 0x3DCB,0x7135,0x712C,0x7137,0x711D,0x3DC5,0x3DC2,0x7138,0x3DCD,0x7134, + 0x712B,0x7133,0x7127,0x7124,0x3DCA, + 26, /* first low-surrogate */ + 0xDCE5, + /* plane 3, row 29 */ + 1 | (94 << 8), /* first, last */ + 0x712D,0x7232,0x7283,0x7282,0x7287,0x7306,0x7324,0x7338,0x732A, + 0x732C,0x732B,0x3E83,0x732F,0x7328,0x7417,0x3ED6,0x3ED5,0x7419,0x7438, + 0x3ED1,0x741F,0x7414,0x743C,0x73F7,0x741C,0x7415,0x7418,0x7439,0x74F9, + 0x7524,0xD87E,0x3F52,0x3F5F,0x756E,0x756D,0x7571,0x758E,0x3F95,0x75E5, + 0x3F9D,0x3F98,0x3F9E,0x3F96,0x7694,0x76B3,0x4003,0x76D9,0x402F,0x7748, + 0x7749,0x7743,0x4031,0x4033,0x7742,0x77DF,0x40B4,0x7863,0x7876,0x40B0, + 0x785F,0x7866,0x7966,0x7971,0x4108,0x4107,0x7976,0x7984,0x7975,0x79FF, + 0x7A07,0x414E,0x7A0E,0x7A09,0x4150,0x4152,0x41A1,0x41A3,0x41A5,0x41CC, + 0x7AE7,0x7AE2,0x7B55,0x41EF,0x41EA,0x7B43,0x7B57,0x7B6C,0x7B42,0x7B53, + 0x41ED,0x7B41,0x4285,0x4284,0x7CA7, + 31, /* first low-surrogate */ + 0xDD34, + /* plane 3, row 30 */ + 1 | (94 << 8), /* first, last */ + 0x7CA0,0x7CA6,0x7CA4,0x7D74,0x42DB,0x7D59,0x42D9,0x7D60,0x7D57, + 0x7D6C,0x7D7E,0x7D64,0x42D7,0x7D5A,0x7D5D,0x42DA,0x42DE,0x42D8,0x7D76, + 0x7D4D,0x7D75,0x42D5,0x7FD3,0x7FD6,0x439C,0x439D,0x8060,0x804E,0x8145, + 0x813B,0x43FE,0x8148,0x8142,0x8149,0x8140,0x8114,0x8141,0x4407,0x81EF, + 0x81F6,0x8203,0x446A,0x83ED,0x44E7,0x83DA,0x8418,0x83D2,0x8408,0x44E2, + 0x8400,0x44DF,0x44E1,0x44E5,0x8417,0x8346,0x8414,0x83D3,0x8405,0x841F, + 0x8402,0x8416,0x83CD,0x83E6,0x4591,0x865D,0x86D5,0x86E1,0x45B4,0x45B0, + 0x45B5,0x45AE,0x86EE,0x8847,0x8846,0x462D,0x462C,0x88BB,0x462B,0x88BF, + 0x88B4,0x4629,0x88B5,0x467F,0x899A,0x8A43,0x46C9,0x46CB,0x8A5A,0x46C5, + 0x46C6,0x46CA,0x8A35,0x8A38,0x8A42, + /* plane 3, row 31 */ + 1 | (94 << 8), /* first, last */ + 0x8A49,0x8A5D,0x8A4B,0x8A3D,0x46D2,0x46D0,0x472D,0x4735,0x8C60, + 0x8C5E,0x8C7F,0x8C7E,0x8C83,0x476C,0x8CB1,0x8D87,0x479D,0x47A0,0x8D88, + 0x8D83,0x47A2,0x479F,0x8D86,0x8D8B,0x8D82,0x8DCA,0x8DD2,0x47EB,0x47E2, + 0x8DD4,0x8DC9,0x8EB0,0x4836,0x4832,0x4850,0x8EF2,0x8EE4,0x8EF3,0x8EEA, + 0x484F,0x8EFD,0x4852,0x8F9D,0x902B,0x902A,0x489E,0x9028,0x9029,0x902C, + 0x48A0,0x489C,0x903A,0x9030,0x9037,0x903B,0x48D1,0x910A,0x48EF,0x48F0, + 0x48F1,0x91FE,0x9220,0x491D,0x920B,0x491F,0x9218,0x9222,0x491E,0x921B, + 0x9208,0x4920,0x920E,0x9213,0x498E,0x4991,0x9595,0xD863,0x4990,0x49D7, + 0x968C,0x967B,0x967F,0x9681,0x49D9,0x9682,0x49F4,0x49F6,0x3560,0x49F5, + 0x49F3,0x96EE,0x96ED,0x4A0C,0x96EC, + 77, /* first low-surrogate */ + 0xDCDD, + /* plane 3, row 32 */ + 1 | (94 << 8), /* first, last */ + 0x975F,0x976F,0x4A51,0x976D,0x4AA6,0x4AA7,0x4AA8,0x4B27,0x4B24, + 0x4B25,0x98F0,0x4B2A,0x4B74,0x4BC7,0x9AA9,0x4BE7,0x4BED,0x9AE0,0x4EB7, + 0x342E,0x347B,0x50CC,0x50BC,0x347C,0x50AA,0x50B9,0x347D,0x50AB,0x50C3, + 0x50CD,0x517E,0x527E,0x5279,0x34FD,0xD87E,0x52E1,0x52E0,0x52E7,0x5380, + 0x53AB,0x53AA,0x53A9,0x53E0,0x55EA,0x35DA,0x55D7,0x35D6,0x35DB,0x55C1, + 0x5715,0x365B,0x586C,0x365C,0x585C,0x5850,0x5861,0x586A,0x5869,0x5856, + 0x5860,0x5866,0x585F,0x5923,0x5966,0x5968,0x3706,0x370B,0x5ACE,0x370D, + 0x5AC5,0x5AC3,0x370A,0x3713,0x5AD0,0x3710,0x3712,0x3709,0x3708,0x3711, + 0x370F,0x5B74,0x5B76,0x5BDC,0x5BD7,0x5BDA,0x5BDB,0x3767,0x5C20,0x5D6D, + 0x5D66,0x37F6,0x5D64,0x5D6E,0xD87E, + 35, /* first low-surrogate */ + 0xDC23, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xDC7E, + /* plane 3, row 33 */ + 1 | (94 << 8), /* first, last */ + 0x5D60,0x5F42,0x5F5A,0x5F6E,0x3964,0x396C,0x6130,0x613A,0x612A, + 0x6143,0x6119,0x6131,0x396D,0x613D,0x397A,0x3975,0x3A0D,0x6408,0x6432, + 0x6438,0x3A1E,0x6431,0x3A1B,0x6419,0x3A2A,0x6411,0x3A1F,0x3A22,0x6429, + 0x641D,0x3A25,0x3A27,0x3A29,0x643C,0x3A24,0x6446,0x6447,0x3A28,0x3A26, + 0x643A,0x6407,0x3A23,0x656B,0x3A9F,0x6570,0x656D,0x3AB1,0x65E4,0x6693, + 0x3B03,0x3B07,0x3B0C,0x3B06,0x668F,0x3B04,0x3B09,0x6692,0x3B05,0x668E, + 0x3B08,0x6946,0x3B96,0x3B9C,0x3B9F,0x3B9B,0x3B98,0x3B99,0x3B94,0x6931, + 0x3B8D,0x3BA3,0x693E,0x3B93,0x697C,0x6943,0x3B92,0x6973,0xD87E,0x6955, + 0x3B8E,0x3B8C,0x6985,0x694D,0x6950,0x6947,0x6967,0x6936,0x6964,0x6961, + 0x3B9A,0x697D,0x6B44,0x6B40,0x6B71, + 78, /* first low-surrogate */ + 0xDCE8, + /* plane 3, row 34 */ + 1 | (94 << 8), /* first, last */ + 0x6B73,0x6B9C,0x3C6A,0x3C6D,0x3C84,0x6BC1,0x3CA0,0x6BFA,0x6C31, + 0x6C32,0x3D1D,0x3D26,0x6EB8,0x6EA8,0x3D33,0x6E91,0x6EBB,0x3D38,0x6E9A, + 0x3D30,0x3D28,0x6EA9,0x3D27,0x3D2A,0x6EB5,0x6E6C,0x6EE8,0x3D31,0x6EDD, + 0x6EDA,0x6EE6,0x6EAC,0x3D34,0x3D2E,0x3D3B,0x6ED9,0x6EE3,0x6EE9,0x6EDB, + 0x3D29,0x716F,0x3DD2,0x3DD8,0x7148,0x3DCF,0x714A,0x716B,0x3DD9,0x714F, + 0x7157,0x7174,0x3DCE,0x3DD3,0x3DD0,0x7145,0x7151,0x716D,0x3BA1,0x7251, + 0x7250,0x724E,0x3E47,0x7341,0x3E8B,0x732E,0x7346,0x3ED4,0x7427,0x3EDE, + 0x7448,0x7453,0x743D,0x3EDF,0x745D,0x7456,0x3ED7,0x741E,0x7447,0x7443, + 0x7458,0x7449,0x3EE1,0x744C,0x7445,0x743E,0x3F2F,0x7501,0x751E,0x3F62, + 0x3F63,0x757A,0x75EE,0x7602,0x7697, + /* plane 3, row 35 */ + 1 | (94 << 8), /* first, last */ + 0x7698,0x3FE2,0x4004,0x4043,0x775D,0x7764,0x7753,0x7758,0x7882, + 0x7890,0x788A,0x40BE,0x787A,0x787D,0x40BA,0x788B,0x7878,0x40BC,0xD87E, + 0x788D,0x7888,0x7892,0x7881,0x797E,0x7983,0x410D,0x410E,0x4111,0x7980, + 0x410F,0x4112,0x4155,0x7A0F,0x4159,0x415B,0x7A1D,0x4157,0x7AA1,0x7AA4, + 0x41CE,0x7AE9,0x7AEA,0x41FE,0x7B62,0x7B6B,0x41FC,0x7B5E,0x41F5,0x7B79, + 0x41F9,0x41FA,0x7B6F,0x7B68,0x4288,0x4289,0x7CAE,0x428A,0x4287,0x428B, + 0x7CB0,0x42E6,0x7D90,0x42ED,0x7D8A,0x42E5,0x7D8B,0x7D99,0x7D95,0x42E0, + 0x7D87,0x7D78,0x7D97,0x7D89,0x7D98,0x42E1,0x435B,0x435C,0x7FA3,0x438F, + 0x438B,0x438D,0x7FDD,0x8057,0x43B9,0x8163,0x816A,0x816C,0x440F,0x4419, + 0x4413,0x815D,0x8175,0x4418,0x815F, + 19, /* first low-surrogate */ + 0xDD4E, + /* plane 3, row 36 */ + 1 | (94 << 8), /* first, last */ + 0x4416,0x817D,0x816D,0x4453,0xD87E,0x8241,0x844F,0x8484,0x44F6, + 0x847F,0x44F5,0x8448,0x842A,0x847B,0x8472,0x8464,0x842E,0x845C,0x8453, + 0x44F7,0x8441,0x84C8,0x44F0,0x8462,0x8480,0x843E,0x8483,0x8471,0x44F9, + 0x844A,0x8455,0x8458,0x4592,0x4595,0x4596,0x86FC,0x86FD,0x8715,0x45B9, + 0x8716,0x86FF,0x45BD,0x45B8,0x4612,0x8858,0x88CF,0x88E0,0x4680,0x4681, + 0x469A,0x4698,0x89E7,0x8A6A,0x8A80,0x46D4,0x8A6F,0x8A65,0x46DA,0x8A78, + 0x8A7D,0x8A88,0x46D6,0x46DB,0x8A64,0x8A7E,0x46DC,0x8A67,0x8C63,0x8C88, + 0x4771,0x8CCD,0x4772,0x8CC9,0x47A8,0x8DED,0x47F0,0xD87E,0x47F1,0x47FD, + 0x4838,0x4837,0x4839,0x8EB1,0x4855,0x4853,0x8F04,0x8F9E,0x8FA0,0x9043, + 0x9046,0x9048,0x9045,0x9040,0x904C, + 5, /* first low-surrogate */ + 0xDD8D, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDDDB, + /* plane 3, row 37 */ + 1 | (94 << 8), /* first, last */ + 0x48D5,0x48BD,0x910C,0x9113,0x9115,0x48F5,0x916B,0x9167,0x925D, + 0x9255,0x9235,0x4921,0x9259,0x922F,0x923C,0x928F,0x925C,0x926A,0x9262, + 0x925F,0x926B,0x926E,0x923B,0x9244,0x9241,0x959A,0x4992,0x9599,0x49DE, + 0x49DB,0x49DA,0x968F,0x49DF,0x9696,0x49F9,0x49F8,0x49FA,0x96F4,0x96FC, + 0x4A0E,0x9755,0x4A43,0x9779,0x4A56,0x4A53,0x4A9E,0x97EE,0x97F5,0x4AA9, + 0x980B,0x4AFA,0x98F3,0x4B31,0x4B30,0x98F7,0x98FF,0x98F5,0x4B32,0x98EC, + 0x98F1,0x4B29,0x4B2E,0x999A,0x4B76,0x9AE2,0x9B3D,0x9B5D,0x9CE8,0x4CA5, + 0x9CEB,0x9CEF,0x9CEE,0x9E81,0x9F14,0x50D0,0x50D9,0x50DC,0x50D8,0x348C, + 0x50E1,0x50EB,0x348B,0x3489,0x50F4,0x50E2,0x50DE,0x348D,0x3486,0x34D7, + 0x51F4,0x3504,0x3507,0x3503,0x52ED, + /* plane 3, row 38 */ + 1 | (94 << 8), /* first, last */ + 0x52EA,0x3522,0x5332,0x3551,0x53AE,0x53B0,0x3561,0x55FB,0x5603, + 0x560B,0x35E9,0x5607,0x35E5,0x55F8,0x35E4,0x5628,0x561E,0x35E3,0x5618, + 0x5611,0x5651,0x5605,0x5717,0x5892,0x3665,0x588C,0x3663,0x5878,0x5884, + 0x5873,0x58AD,0x5897,0x5895,0x5877,0x5872,0x5896,0x588D,0x5910,0x368C, + 0x596C,0x371A,0x5AE7,0x3715,0x5AE4,0x3720,0x3721,0x5AEF,0x5626,0x371C, + 0x371B,0x5AF0,0x5D7B,0x37FE,0x5D83,0x3804,0x3801,0x5D8B,0x5D8C,0x3800, + 0x5D78,0x5E52,0x386D,0x3893,0x5ED0,0x5ECF,0x38A1,0x5FB3,0x5FB4,0x3976, + 0x3979,0x3972,0x617B,0x3983,0x616F,0x6181,0x613C,0x6142,0x6138,0x6133, + 0xD87E,0x6160,0x6169,0x617D,0x6186,0x622C,0x6228,0x3A38,0x644C,0x3A30, + 0x6457,0x647C,0x3A34,0x3A3A,0x6455, + 80, /* first low-surrogate */ + 0xDCA6, + /* plane 3, row 39 */ + 1 | (94 << 8), /* first, last */ + 0x6462,0x6471,0x646A,0x6456,0x643B,0x6481,0x3A35,0x644F,0x647E, + 0x6464,0x3A3F,0x3A40,0x3A32,0x3A31,0x3A36,0x6571,0xD84C,0x3B0F,0x66A5, + 0x669A,0x669C,0x3B10,0x66A6,0x3B0D,0x66A4,0x698F,0x69C5,0x69C8,0x6992, + 0x69B2,0x3BA9,0x3BB4,0x3BAC,0x69E3,0x69C0,0x69D6,0x69D1,0x699F,0x69A2, + 0x69D2,0x3BB8,0x3BAE,0xD84D,0x69E1,0x69D5,0x699D,0x3BB3,0x3BBA,0x6998, + 0x3C3F,0x6B74,0x6BA1,0x3D3C,0x6EF0,0x6EF3,0x3D42,0x3D40,0x6F1B,0x6F0C, + 0x6F1D,0x6F34,0x6F28,0x6F17,0x3D3E,0x6F44,0x6F42,0x6F04,0x6F11,0x6EFA, + 0x6F4A,0x7191,0x718E,0x3DE1,0x718B,0x718D,0x717F,0x718C,0x717E,0x717C, + 0x7183,0x3DE6,0x7188,0x3DE0,0x3E15,0x7294,0x3E93,0x7355,0x7353,0x734F, + 0x7354,0x746C,0x7465,0x7466,0x7461, + 17, /* first low-surrogate */ + 0xDCBA, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xDDF3, + /* plane 3, row 40 */ + 1 | (94 << 8), /* first, last */ + 0x746B,0x7468,0x7476,0x3EE7,0x7460,0xD852,0x7474,0x7506,0x760E, + 0x3FAD,0x7607,0x3FAE,0x3FE3,0x76B9,0x3FF5,0x76B7,0x76E2,0x4006,0x7774, + 0x7777,0x7776,0x7775,0x404F,0x7778,0x7771,0x4054,0x777A,0x715B,0x777B, + 0x78A6,0x78AE,0x78B8,0x40CB,0x40E3,0x40C9,0x78B1,0x78AF,0x4113,0x7989, + 0x7987,0x4115,0x4161,0x7A29,0x4166,0x7A2A,0x4164,0x7A2D,0x7A2C,0x4160, + 0x7A32,0x4163,0x7AEC,0x7AF0,0x7B81,0x7B9E,0x7B83,0x420A,0x7B92,0x4204, + 0x7BA3,0x7B9F,0x7B93,0x4207,0x7B86,0x7CB8,0x7CB7,0x428D,0x428F,0x4290, + 0x4292,0x42EC,0x7DC8,0x7DB6,0xD87E,0x7DD1,0x42E7,0x7DA8,0x7DAB,0x42F2, + 0x7DB3,0x7DCD,0x42EE,0x7DCF,0x7DA4,0x42EF,0x434C,0x7F41,0x7F6F,0x7F71, + 0x435E,0x435F,0x4376,0x4374,0x4372, + 6, /* first low-surrogate */ + 0xDE0F, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xDD6C, + /* plane 3, row 41 */ + 1 | (94 << 8), /* first, last */ + 0x4390,0x8023,0x805B,0x43BE,0x8061,0x805F,0x8181,0x4426,0x4425, + 0x8184,0x8213,0x4474,0x824A,0x824C,0x44FD,0x4505,0x4501,0x84BD,0x8495, + 0x4509,0x8492,0x84C3,0x450C,0x8496,0x84A5,0x84B5,0x84B3,0x84A3,0x84E4, + 0x84D8,0x84D5,0x450D,0x84B7,0x84AD,0x84DA,0x8493,0x8736,0x45C0,0x45C5, + 0x45C9,0x873D,0x872B,0x8747,0x8739,0x45D5,0x8745,0x871D,0x4641,0x88FF, + 0x88EA,0x4633,0x88F5,0x463A,0x8900,0x88ED,0x8903,0x88E9,0x4640,0x4642, + 0x89EA,0x46E8,0x8A9B,0x8A8E,0x8AA2,0x46E4,0x8A9C,0x8A94,0x8A90,0x8AA9, + 0x8AAC,0x46E7,0x8A9F,0x46E6,0x46E1,0x8A9D,0x4739,0x8C67,0x475C,0x4775, + 0x8CD0,0x8CD6,0x8CD4,0x8D98,0x8D9A,0x8D97,0x47AE,0x47B0,0x47FA,0x8E0B, + 0x8E08,0x8E01,0x8EB4,0x8EB3,0x485B, + /* plane 3, row 42 */ + 1 | (94 << 8), /* first, last */ + 0x8FA1,0x8FA2,0x48A5,0x905A,0x48A2,0x9061,0x905F,0x48DB,0x48DA, + 0x9125,0x917B,0x9176,0x917C,0x4924,0x9289,0x92F6,0x92B1,0x92AD,0x9292, + 0x9281,0x9284,0x4926,0x92AE,0x9290,0x929E,0x4998,0x4996,0x499A,0x95A2, + 0x95A7,0x4997,0x49E1,0x49E0,0x49E3,0x49E2,0x96A0,0x969D,0x969F,0x96D0, + 0x49FB,0x96D1,0x4A12,0x4A14,0x9759,0x4A45,0x9764,0x4A5C,0x4A5D,0x4AB8, + 0x9819,0x4ABA,0x9814,0x9815,0x981A,0x4B03,0x4B35,0x4B36,0x4B39,0x9906, + 0x4B2D,0x98F8,0x9901,0x4B7A,0x99BE,0x99BC,0x99B7,0x99B6,0x99C0,0x4B78, + 0x99B8,0x4B7B,0x4B7C,0x4B7E,0x99C4,0x4B7D,0x99BF,0x4BC9,0x9ADA,0x9AE4, + 0x9AE9,0x9AE8,0x9AEA,0x9AE5,0x4BF3,0x9B26,0x4C1A,0x4C19,0x9B40,0x4C1F, + 0x4CA6,0x4CA7,0x4CA8,0x4CAB,0x4CA9, + /* plane 3, row 43 */ + 1 | (94 << 8), /* first, last */ + 0x4D2E,0x9EBD,0x4D5E,0x3495,0x3493,0x3492,0x510E,0x3496,0x50F7, + 0x3497,0x50FC,0x510D,0x5101,0x51DA,0x51D9,0x51DB,0x5286,0x528E,0x52EE, + 0x5333,0x53B1,0x35F5,0x5647,0x562D,0x5654,0x35EA,0x564B,0x5652,0x5631, + 0x5644,0x5656,0x5650,0x562B,0x35F3,0x564D,0x5637,0x564F,0x58A2,0x58B7, + 0x3669,0x58B2,0x366B,0x58AA,0x58B5,0x58B0,0x366C,0x58B4,0x58A4,0x58A7, + 0x3668,0x5926,0x5AFE,0x3728,0x5B04,0x3726,0x5AFC,0x3725,0x5B06,0x5B0A, + 0x5AFA,0x5B0D,0x5B00,0x5B0E,0x376B,0x380F,0x3808,0x5D91,0x380C,0x5D8F, + 0x5D90,0x5D98,0x5DA4,0x5D9B,0x5DA3,0x5D96,0x5DE4,0x5E5A,0x3860,0x3862, + 0x5E5E,0x3898,0x5FB8,0x6157,0x615C,0x61A6,0x6195,0x6188,0x398A,0x61A3, + 0x618F,0x3984,0x6164,0x397F,0x6159, + /* plane 3, row 44 */ + 1 | (94 << 8), /* first, last */ + 0x6178,0x3982,0x6185,0x6187,0x619E,0x3996,0x3989,0x6198,0x619C, + 0x398D,0x39BC,0x622F,0x6480,0x649B,0x648E,0x648D,0x6494,0x64C6,0x3A44, + 0x64A8,0x6483,0x3A3C,0x64B9,0x6486,0x64B4,0x64AF,0x6491,0x3A4E,0x64AA, + 0x64A1,0x64A7,0x66B6,0x66B3,0x3B14,0x66BC,0x66AC,0x3B15,0x66AD,0x6A0E, + 0x3BCE,0x6A1C,0x6A1A,0x3BE0,0x3BC2,0x6A0B,0x3BBF,0x69EF,0x6A0C,0x69F0, + 0x6A22,0x3BC4,0x69D8,0x3BCF,0x6A12,0x69FA,0x3BC8,0x6A2A,0x3BCC,0x6A10, + 0x3BCD,0x3BC7,0x6A29,0x69F9,0x69EA,0x6A2C,0x6A24,0x4CB7,0x69E9,0x6B52, + 0x6B4F,0x6B53,0x3C43,0x3CB6,0x6F10,0x6F65,0x6F75,0x3D51,0x3D4A,0x3D4D, + 0x3D56,0x6FD0,0x3D53,0x6F5C,0x6F3D,0x6F71,0x3D59,0x6F91,0x6F0B,0x6F79, + 0x6F81,0x6F8F,0x3D4E,0x6F59,0x6F74, + /* plane 3, row 45 */ + 1 | (94 << 8), /* first, last */ + 0x3DEE,0x71AE,0x3DEC,0x71A3,0x71AD,0x3DEB,0x3DEF,0x71AB,0x71A6, + 0x71A2,0x3DED,0x52F2,0x7257,0x7255,0x7299,0x734B,0x747A,0x3EF2,0x3EEF, + 0x3EF1,0x748C,0x7484,0x3EED,0x3EF0,0x7482,0x7493,0x747B,0x3EEE,0x7509, + 0x4C1B,0x3F50,0x3F66,0x3684,0x3FB8,0x3FF6,0x778A,0x4057,0x7790,0x405E, + 0x78C6,0x78D3,0x78C0,0x78D2,0x78C7,0x78C2,0x4119,0x799F,0x799D,0x799E, + 0x4170,0x7A41,0x416E,0x7A38,0x7A3A,0x7A42,0x4172,0x4176,0x7A3E,0x7AB0, + 0x7BAE,0x7BB3,0x4212,0x421F,0x7BBF,0x4211,0x4216,0x7BCD,0x4219,0x7BB2, + 0x4224,0x4214,0x4225,0x4295,0x4296,0x4293,0x4294,0x7CC4,0x7CCD,0x7CC2, + 0x7CC6,0x7CC3,0x7CC9,0x7CC7,0x42A0,0x7DF8,0x42FB,0x7DED,0x7DE2,0x42FC, + 0x4300,0x42F8,0x7DDC,0x7E02,0x7E01, + /* plane 3, row 46 */ + 1 | (94 << 8), /* first, last */ + 0x42F9,0x7DD6,0x4304,0x7DE4,0x7DFE,0x4303,0x7E00,0x7DFC,0x7DFD, + 0x42F3,0x7DF5,0x7DFF,0x42FA,0x7DEB,0x7DE5,0x7F78,0x7FAE,0x7FE7,0x43BF, + 0x8065,0x806A,0x8066,0x8068,0x806B,0x8194,0x81A1,0x8192,0x8196,0x8193, + 0x4479,0x4510,0x8501,0x4514,0x84F8,0x450E,0x84F5,0x451A,0x8504,0x4519, + 0x4521,0x4523,0x451F,0x851B,0x8503,0x8533,0x8534,0x84ED,0x4525,0x452B, + 0x8535,0x4516,0x8505,0x4522,0x451B,0x45CE,0x45CF,0x877D,0x45CB,0x45D1, + 0x45CC,0x8771,0x4617,0x885C,0x88E6,0x890F,0x891B,0x4651,0x89A9,0x89A5, + 0x89EE,0x8AB1,0x46ED,0x8ACC,0x8ACE,0x46F4,0x8AB7,0x46F1,0x8AB5,0x8AE9, + 0x8AB4,0x46F8,0x8AB3,0x8AC1,0x8AAF,0x8ACA,0x8AD0,0x472F,0x475E,0x475D, + 0x8C8E,0x4776,0x4777,0x8CE9,0x8CDB, + /* plane 3, row 47 */ + 1 | (94 << 8), /* first, last */ + 0x477E,0x8CEB,0x8DA4,0x47B6,0x8DA2,0x8D9D,0x47B3,0x47FC,0x4803, + 0x4800,0x8E2A,0x8E28,0x480A,0x4802,0x8EB8,0x8EB6,0x8EB9,0x8EB7,0x8F22, + 0x8F2B,0x8F27,0x8F19,0x8FA4,0x4887,0x8FB3,0x48A6,0x9071,0x906A,0x48A9, + 0x48DE,0x9188,0x918C,0x92BF,0x92B8,0x92BE,0x92DC,0x92E5,0x492E,0x492D, + 0x92D4,0x92D6,0x4930,0x92DA,0x92ED,0x92F3,0x92DB,0x492B,0x92B9,0x92E2, + 0x92EB,0x95AF,0x499E,0x95B2,0x95B3,0x499F,0x49E5,0x49E4,0x96A3,0x96A5, + 0x49FD,0x49FC,0x4A17,0x4A19,0x970A,0x4A18,0x9787,0x9789,0x978C,0x97EF, + 0x982A,0x9822,0x4ABF,0x981F,0x4B3C,0x9919,0x4B6B,0x99CA,0x99DA,0x4B83, + 0x4B81,0x4B80,0x99DE,0x99C8,0x99E0,0x4BCA,0x9AB6,0x9AB5,0x4BCE,0x9AF4, + 0x4BF6,0x9B6B,0x9B69,0x9B72,0x9B63, + /* plane 3, row 48 */ + 1 | (94 << 8), /* first, last */ + 0x4C39,0x9D0D,0x4CAE,0x9D01,0x9D0C,0x4CB5,0x9CF8,0x4CB3,0x4CB4, + 0x9CFE,0x9D02,0x9E84,0x4D22,0x9EAB,0x9EAA,0x511D,0x5116,0x3499,0x512B, + 0x511E,0x511B,0x5290,0x5294,0x5314,0xD842,0x3602,0x5667,0x3601,0x567B, + 0x36A1,0x565F,0x5661,0x35FD,0x3673,0x3674,0x3670,0x3676,0x3675,0x3672, + 0x58C3,0x58CA,0x58BB,0x58C0,0x58C4,0x5901,0x5B1F,0x5B18,0x5B11,0x5B15, + 0x3729,0x5B12,0x5B1C,0x372A,0x5B22,0x5B79,0x5DA6,0x3816,0x5DB3,0x5DAB, + 0x5EEA,0x3899,0x5F5B,0x38D3,0x38F5,0x61B7,0x61CE,0x61B9,0x61BD,0x61CF, + 0x61C0,0x6199,0x6197,0x3994,0x61BB,0x61D0,0x61C4,0x6231,0x3A56,0x64D3, + 0x64C0,0x3A59,0x3A58,0x3A55,0x3A52,0x64DC,0x64D1,0x64C8,0x3A57,0x64D5, + 0x66C3,0x3B1B,0x3B1C,0x66BF,0x66C5, + 25, /* first low-surrogate */ + 0xDF89, + /* plane 3, row 49 */ + 1 | (94 << 8), /* first, last */ + 0x3B19,0x66CD,0x66C1,0x6706,0x3B3F,0x6724,0x6A63,0x6A42,0x6A52, + 0x3BDB,0x6A43,0x6A33,0x3BE2,0x6A6C,0x6A57,0x3BD7,0x6A4C,0x6A6E,0x3BDE, + 0x3BE5,0x3BE4,0x3BE6,0x3BD6,0x6A37,0x3BDF,0x6A71,0x6A4A,0x6A36,0x3BDC, + 0x6A53,0x3BDA,0x6A45,0x6A70,0x3BD3,0x3BD0,0x6A5C,0x6B58,0x6B57,0x3C86, + 0x3C87,0x3CAD,0x3CB7,0x3D58,0x3D6A,0x6FBB,0x3D62,0x3D61,0x6FBE,0x3D69, + 0x3D6C,0x3D65,0x6FB5,0x6FD3,0x6F9F,0x3D66,0x6FB7,0x6FF5,0x71B7,0x3DF5, + 0x71BB,0x3DF4,0x71D1,0x3DF7,0x71BA,0x3DF8,0x71B6,0x71CC,0x3DFB,0x3DFC, + 0x71D3,0x749B,0x3EF5,0x3EF8,0x7496,0x74A2,0x749D,0x750A,0x750E,0x3F3C, + 0x7581,0x762C,0x7637,0x7636,0x763B,0x3FC5,0x76A1,0x4062,0x4063,0x7798, + 0x4067,0x7796,0x4066,0x40D9,0x40DB, + /* plane 3, row 50 */ + 1 | (94 << 8), /* first, last */ + 0x78D6,0x78EB,0x40D8,0x78DC,0x411B,0x79A5,0x79A9,0x9834,0x7A53, + 0x7A45,0x4179,0x7A4F,0x417D,0x7ABD,0x7ABB,0x7AF1,0x422C,0x4237,0x7BEC, + 0x7BED,0x4230,0x429A,0x7CD3,0x4A00,0x7CE1,0x4305,0x7E19,0x4307,0x4309, + 0x430A,0x7E27,0x7E26,0x4379,0x43C2,0x806E,0x81AF,0x4438,0x4437,0x81AD, + 0x4421,0x81AA,0x8218,0x445E,0x453D,0x4537,0x4540,0x856F,0x854C,0x451D, + 0x8542,0x4533,0x855C,0x8570,0x855F,0x4535,0x855A,0x854B,0x853F,0x878A, + 0x45D8,0x878B,0x87A1,0x878E,0x45DC,0x45DE,0x8799,0x885E,0x885F,0x8924, + 0x89A7,0x8AEA,0x8AFD,0x8AF9,0x8AE3,0x8AE5,0x46FA,0x46FB,0x8AEC,0x473D, + 0x473B,0x473F,0x475F,0x8CF2,0x477F,0x8CEF,0x4784,0x8DA6,0x47BC,0x4814, + 0x480F,0x8E3B,0x8E43,0x480E,0x8E32, + /* plane 3, row 51 */ + 1 | (94 << 8), /* first, last */ + 0x8F31,0x8F30,0x4860,0x8F2D,0x8F3C,0x8FA7,0x8FA5,0x48AB,0x48AC, + 0x48AA,0x9137,0x9195,0x918E,0x4904,0x9196,0x4908,0x9345,0x930A,0x4933, + 0x4934,0x92FD,0x9317,0x931C,0x9307,0x9331,0x9332,0x932C,0x9330,0x9303, + 0x9305,0x49A2,0x95C2,0x49A4,0x95B8,0x49A5,0x95C1,0x49A7,0x49A6,0x49E7, + 0x96AB,0x96B7,0x49FF,0x49FE,0x9715,0x9714,0x4A1D,0x4A1C,0x970C,0x9717, + 0x4A67,0x9793,0x4A94,0x97D2,0x4AC5,0x4AC8,0x9836,0x9831,0x9833,0x983C, + 0x982E,0x983A,0x4AC9,0x983D,0x4AC7,0x98B5,0x9922,0x9923,0x9920,0x991C, + 0x991D,0x4B6C,0x99A0,0x4B8A,0x99EF,0x99E8,0x99EB,0x4B88,0x4B87,0x4B86, + 0x99E1,0x99E6,0x4BCF,0x4BD0,0x9AF8,0x9AF5,0x4C1C,0x4C23,0x9B83,0x9B94, + 0x9B84,0x4C49,0x9B8B,0x9B8F,0x4C43, + /* plane 3, row 52 */ + 1 | (94 << 8), /* first, last */ + 0x9B8C,0x4C48,0x9B89,0x4C47,0x9B8E,0x4C46,0x4C3F,0x4C44,0x9D24, + 0x9D0F,0x4CBE,0x9D13,0x9D0A,0x4CC2,0x4CBA,0x4CBC,0x4CC6,0x9D2A,0x9D1A, + 0x4CC8,0x9D27,0x9D16,0x9D21,0x4D23,0x9E85,0x9EAC,0x9EC6,0x9EC5,0x9ED7, + 0x9F53,0x349D,0x5128,0x5127,0x51DF,0x3524,0x5335,0x53B3,0x3607,0x568A, + 0x567D,0x5689,0x3679,0x58CD,0x58D0,0x3678,0x5B2B,0x5B33,0x5B29,0x5B35, + 0x5B31,0x5B37,0x5C36,0x5DBE,0x3819,0x5DB9,0x381C,0x5DBB,0x3818,0x61E2, + 0x61DB,0x61DD,0x61DC,0x61DA,0xD87E,0x61D9,0x39BD,0x3A5D,0x64DF,0x3A5A, + 0x3A5E,0x64E1,0x3A5C,0x64EE,0x3A5B,0x65B5,0x66D4,0x66D5,0x3B21,0x66D0, + 0x66D1,0x66CE,0x66D7,0x3B20,0x3B32,0x6A7D,0x6A8A,0x3BF2,0x6AA7,0x3BF5, + 0x6A99,0x6A82,0x6A88,0x3BEE,0x3BEC, + 64, /* first low-surrogate */ + 0xDCAF, + /* plane 3, row 53 */ + 1 | (94 << 8), /* first, last */ + 0x6A86,0x3BEA,0x6A98,0x6A9D,0x3BED,0x3BF3,0x6A8F,0x3BF6,0x6AAA, + 0x3C48,0x6B5D,0x3C49,0x6C0A,0x3D75,0x6FD7,0x6FD6,0x6FE5,0x3D6F,0x3D7B, + 0x3D73,0x6FD9,0x6FDA,0x6FEA,0x3D70,0x6FF6,0xD850,0x3D78,0x71E3,0x3DFE, + 0x71E9,0x3E00,0x71EB,0x71EF,0x71F3,0x71EA,0x3E01,0xD87E,0x3E55,0x3E56, + 0x3E9D,0x7371,0x3EF9,0x74AE,0x3EFF,0x74B3,0x3EFD,0x74AC,0x3F43,0x3F41, + 0x7583,0x7645,0x764E,0x7644,0x76A3,0x76A5,0x77A6,0x77A4,0x406F,0x77A9, + 0x77AF,0x408A,0x40E5,0x40E6,0x78F0,0x78F8,0x78F1,0x417F,0x7A49,0x41B5, + 0x41B6,0x41BB,0x7AC2,0x7AF2,0x7AF3,0x7BFA,0x4240,0x7BF6,0x7BFC,0x7C18, + 0x7C08,0x7C12,0x429D,0x429C,0x7CDB,0x7CDA,0x430F,0x4311,0x430D,0x7E2C, + 0x7E4D,0x4314,0x4313,0x7F46,0x7FF6, + 26, /* first low-surrogate */ + 0xDC39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDD21, + /* plane 3, row 54 */ + 1 | (94 << 8), /* first, last */ + 0x802B,0x8074,0x81B8,0x81C8,0x4482,0x4483,0x454D,0x8592,0x8593, + 0x454F,0x857F,0x85AB,0x8597,0x454C,0x4551,0x85AC,0x45EE,0x45E8,0x4CCB, + 0x87CE,0x45EB,0x87CD,0x45E2,0x45E6,0x87C1,0x87B1,0x87C7,0x45EC,0x8940, + 0x4659,0x893F,0x8939,0x465D,0x8943,0x4657,0x465B,0x4656,0x89AB,0x46FE, + 0x8B1F,0x8B09,0x8B0C,0x4700,0x4701,0x8C40,0x4742,0x8C96,0x4760,0x8CF6, + 0x8CF7,0x481D,0x8E46,0x8E4F,0x483E,0x4869,0x4865,0x8F3D,0x8F41,0x9366, + 0x9378,0x935D,0x9369,0x9374,0x937D,0x936E,0x9372,0x9373,0x9362,0x9348, + 0x9353,0x935F,0x9368,0x4938,0x937F,0x936B,0x49AE,0x95C4,0x49AD,0x96AF, + 0x96AD,0x96B2,0x4A02,0x4A1F,0x971A,0x971B,0x4A22,0x4A20,0xD87E,0x4A6C, + 0x979B,0x979F,0x4A68,0x4A6D,0x4A6E, + 88, /* first low-surrogate */ + 0xDDF5, + /* plane 3, row 55 */ + 1 | (94 << 8), /* first, last */ + 0x4AA0,0x4ACE,0x4AD0,0x4AD1,0x4ACB,0x9840,0x4AD2,0x9847,0x4AD3, + 0x98B7,0x4B20,0x4B4E,0x4B4B,0x4B72,0x4B70,0x99A2,0x4B92,0x4B8F,0x9A00, + 0x99F3,0x4B90,0xD866,0x99F5,0x4BD9,0x4BD5,0x9ABD,0x9B00,0x9B02,0x4BFA, + 0x9B34,0x9B49,0x9B9F,0x4C4B,0x9BA3,0x9BCD,0x9B99,0x9B9D,0x4CD0,0x4CCE, + 0x9D39,0x4CCF,0x9D44,0x4CC4,0x4CCC,0x9D35,0x4CD2,0x4D35,0x9EAF,0x3E03, + 0x512F,0x349E,0x34AF,0x9F8E,0x360C,0x569F,0x569B,0x569E,0x5696,0x5694, + 0x56A0,0x367C,0x5B3B,0x3730,0x3731,0x5B3A,0x5DC1,0x5F4D,0x5F5D,0x61F3, + 0x39A1,0x399E,0x3A68,0x3A61,0x64F6,0x64E5,0x64EA,0x64E7,0x6505,0x3A65, + 0x64F9,0x3A66,0x3A6A,0x3AAB,0x6AAB,0x6AED,0x6AB2,0x6AB0,0x6AB5,0x6ABE, + 0x6AC1,0x6AC8,0x3BF9,0x6AC0,0x6ABC, + 22, /* first low-surrogate */ + 0xDD37, + /* plane 3, row 56 */ + 1 | (94 << 8), /* first, last */ + 0x6AB1,0x6AC4,0x6ABF,0x3C58,0x3C8A,0x7008,0x7003,0x6FFD,0x7010, + 0x7002,0x7013,0x3E04,0x71FA,0x7200,0x74B9,0x74BC,0x3F02,0x765B,0x7651, + 0x764F,0x76EB,0x77B8,0x4079,0x77B9,0x77C1,0x77C0,0x77BE,0x790B,0x40EB, + 0x7907,0x790A,0x7908,0x40E9,0x790D,0x7906,0x7915,0x79AF,0x4120,0x4121, + 0x4181,0x7AF5,0x424D,0x4259,0x7C2E,0x4258,0x7C1B,0xD857,0x7C1A,0x7C24, + 0x42A5,0x42A9,0x7CE6,0x7CE3,0x431A,0x4319,0x7E5D,0x7E4F,0x7E66,0x7E5B, + 0x7F47,0x7FB4,0x4396,0x4398,0x4397,0x7FFA,0x802E,0xD859,0x43C8,0x81CE, + 0x4443,0x4445,0x8219,0x4552,0x4557,0x85CC,0x85B2,0x4555,0x85BB,0x85C1, + 0x4556,0x4558,0x45F2,0x87E9,0x87EE,0x87F0,0x87D6,0x880E,0x87DA,0x8948, + 0x894A,0x894E,0x894D,0x89B1,0x89B0, + 47, /* first low-surrogate */ + 0xDCD1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDDDF, + /* plane 3, row 57 */ + 1 | (94 << 8), /* first, last */ + 0x89B3,0x4707,0x8B38,0x8B32,0x4708,0x8B2D,0x470A,0x8B34,0x431B, + 0x8B29,0x8C74,0x4761,0x4762,0x8D03,0x47C2,0x47C6,0x8DA9,0x8E58,0x481E, + 0x4825,0x8EBF,0x8EC1,0x8F4A,0x8FAC,0x48B0,0x9089,0x913D,0x913C,0x91A9, + 0x93A0,0x493D,0x9390,0x493E,0x9393,0x938B,0x93AD,0x93BB,0x93B8,0x4946, + 0x4945,0x939C,0x95D8,0x95D7,0x4A03,0x4A26,0x4A27,0x975D,0x97A9,0x97DA, + 0x4A98,0x4AAD,0x4AD5,0x4ADA,0x9854,0x4AD9,0x9855,0x984B,0x4ADD,0x983F, + 0x98B9,0x4B15,0x4B16,0x4B17,0x4B21,0x9938,0x9936,0x9940,0x4B4C,0x993B, + 0x9939,0x99A4,0x4B96,0x4B98,0x9A08,0x9A0C,0x4B9B,0x9A10,0x4BFF,0x9B07, + 0x4C25,0x9BD2,0x4C4F,0x9BC2,0x9BBB,0x9BCC,0x9BCB,0x4C56,0x4C54,0x9D4D, + 0x9D63,0x9D4E,0x4CD8,0x9D50,0x9D55, + /* plane 3, row 58 */ + 1 | (94 << 8), /* first, last */ + 0x4CD7,0x9D5E,0x4D26,0x9E90,0x9EB2,0x9EB1,0x4D38,0x9ECA,0x9F02, + 0x9F27,0x9F26,0x4D8A,0x56AF,0x58E0,0x58DC,0x3734,0x5B39,0x3735,0xD87E, + 0x5B7C,0x5BF3,0xD87E,0x37A1,0x5C6B,0x5DC4,0x650B,0x6508,0x650A,0x3A6C, + 0x3A6D,0x65DC,0x3B29,0x3B2A,0x66E1,0x66DF,0x6ACE,0x6AD4,0x6AE3,0x6AD7, + 0x6AE2,0x3C00,0x3C08,0x3C06,0x3C05,0x6AD8,0x6AD5,0x6AD2,0x3CB1,0x3D88, + 0x701E,0x702C,0x7025,0x6FF3,0x7204,0x7208,0x7215,0x3E09,0x74C4,0x74C9, + 0x74C7,0x74C8,0x76A9,0x77C6,0x77C5,0x7918,0x791A,0x7920,0x4122,0x7A66, + 0x7A64,0x7A6A,0x41D5,0x4261,0x425D,0x4262,0x424F,0x4260,0x7C35,0x7C34, + 0x42AA,0x4322,0x7E6C,0x4321,0x7E6E,0x7E71,0x4446,0x81D4,0x81D6,0x821A, + 0x8262,0x8265,0x8276,0x85DB,0x85D6, + 19, /* first low-surrogate */ + 0xDC6A, + 0, 0,0xDC70, + /* plane 3, row 59 */ + 1 | (94 << 8), /* first, last */ + 0x4562,0x85E7,0x4560,0x4564,0x85F4,0xD87E,0x87FD,0x87D5,0x8807, + 0x45F6,0x880F,0x87F8,0xD87E,0x4619,0x8987,0x4691,0x89B5,0x89F5,0x470D, + 0x8B3F,0x8B43,0x8B4C,0x4765,0x8D0B,0x8E6B,0x8E68,0x8E70,0x8E75,0x8E77, + 0x483F,0x8EC3,0x494B,0x93E9,0x93EA,0x93CB,0x93C5,0x93C6,0x4948,0x93ED, + 0x93D3,0x4952,0x93E5,0x494A,0x4951,0x93DB,0x93EB,0x93E0,0x93C1,0x4950, + 0x494C,0x95DD,0x49EE,0x4A04,0x4A06,0x4A2D,0x4A2E,0x4A2F,0x4A7B,0x4A78, + 0x4A77,0x97B2,0x97B4,0x97B1,0x97B5,0x97F2,0x4AA2,0x4AA1,0x4AE3,0x9856, + 0x4B1A,0x4B19,0x4B57,0x9944,0x4B9E,0x9A26,0x9A1F,0x9A18,0x9A21,0x9A17, + 0x4BDD,0x9B09,0x4C05,0x4C28,0x9BC5,0x9BDF,0x4C60,0x9BE3,0x4C66,0x9BE9, + 0x9BEE,0x4C67,0x4C68,0x9D66,0x9D7A, + 6, /* first low-surrogate */ + 0xDDB6, 0, 0, 0, + 0, 0, 0,0xDDC1, + /* plane 3, row 60 */ + 1 | (94 << 8), /* first, last */ + 0x4CDE,0x9D6E,0x9D91,0x9D83,0x9D76,0x9D7E,0x9D6D,0x4CE1,0x9E95, + 0x9EE3,0x4D69,0x4D77,0x9F03,0x9F04,0xD87E,0x9F17,0x34A6,0x5136,0x34A5, + 0x5336,0x3614,0x5B42,0x3736,0x3738,0x5B44,0x5B46,0x5B7E,0x5DCA,0x5DC8, + 0x5DCC,0x5EF0,0x3A70,0x6585,0x66E5,0x66E7,0x3B2B,0x3C11,0x3C0A,0x6AF4, + 0x3C0D,0x6AE9,0x3C16,0x3C10,0x3C09,0x3C0E,0x3C7A,0x703D,0x3D8C,0x7036, + 0x3D91,0x7216,0x3E0A,0x7212,0x720F,0x7217,0x7211,0x720B,0x3E08,0x3E0B, + 0x74CD,0x74D0,0x74CC,0x74CE,0x74D1,0x3F07,0x7589,0x40F2,0x7A6F,0x7C4B, + 0x7C44,0x7C55,0x42AE,0x4324,0x4326,0x4327,0x7E7F,0x8B71,0x4399,0x802F, + 0x807A,0x807B,0x807C,0x455F,0x456A,0x4571,0x85FC,0x8610,0x8602,0x456C, + 0x456F,0x85EE,0x8603,0x4568,0x860D, + 15, /* first low-surrogate */ + 0xDE19, + /* plane 3, row 61 */ + 1 | (94 << 8), /* first, last */ + 0x8613,0x8608,0x860F,0x8818,0x8812,0x4601,0x4668,0x8967,0x8965, + 0x89BB,0x8B69,0x8B62,0x4713,0x8B6E,0x4716,0x8B61,0x4718,0x8B64,0x8B4D, + 0x8C51,0x4789,0x47C8,0x8E83,0x8EC6,0x4884,0x941F,0x4954,0x9404,0x9417, + 0x9408,0x9405,0x4956,0x93F3,0x941E,0x9402,0x941A,0x941B,0x9427,0x941C, + 0x495A,0x96B5,0x4A05,0x4A07,0x9733,0x4A31,0x9734,0x9731,0x97B8,0x97BA, + 0x4AA3,0x97FC,0x4AEB,0x4B1C,0x98C3,0x4B5A,0x994D,0x4B5B,0x9A2F,0x4BA6, + 0x4BAA,0x4BA5,0x9AC9,0x4BE1,0x9AC8,0x9AC4,0x9B2A,0x9B38,0x9B50,0x4C2A, + 0x9C0A,0x9BFB,0x9C04,0x9BFC,0x9BFE,0x4C72,0x4C6F,0x4C73,0x9C02,0x9BF6, + 0x9C1B,0x9BF9,0x9C15,0x9C10,0x9BFF,0x9C00,0x9C0C,0x4C6B,0x4CE6,0x9D95, + 0x9DA5,0x4CE9,0x4CEC,0x4CE8,0x4CF0, + /* plane 3, row 62 */ + 1 | (94 << 8), /* first, last */ + 0x9E98,0x9EC1,0x4D8C,0x9F5A,0x5164,0x56BB,0x3615,0x58E6,0x5B49, + 0x5BF7,0x3771,0x3826,0x5DD0,0x38C6,0x5FC2,0x39A8,0x6511,0x3A73,0x6AFF, + 0x6AFE,0x6AFD,0x3C15,0x6B01,0x3D98,0x3D97,0x704B,0x704D,0x7047,0x74D3, + 0x7668,0x7667,0x3FD7,0x4080,0x77D1,0x7930,0x7932,0x792E,0x4188,0x9F9D, + 0x7AC9,0x7AC8,0x4269,0x7C56,0x7C51,0x426B,0x4329,0x4328,0x7E85,0x7E89, + 0x7E8E,0x7E84,0x445F,0x826A,0x862B,0x862F,0x8628,0x4574,0x8616,0x8615, + 0x861D,0x881A,0x4602,0x466A,0x4694,0x89BC,0x8B75,0x8B7C,0x478A,0x8D11, + 0x8D12,0x8F5C,0x91BB,0x4964,0x93F4,0x495E,0x4961,0x942D,0x4965,0x4966, + 0x96E4,0x9737,0x9736,0x9767,0x97BE,0x97BD,0x97E2,0x9868,0x9866,0x98C8, + 0x98CA,0x98C7,0x98DC,0x4B5F,0x994F, + /* plane 3, row 63 */ + 1 | (94 << 8), /* first, last */ + 0x99A9,0x9A3C,0x4BAF,0x9A3B,0x9ACE,0x4C0D,0x9B14,0x9B53,0x4C7C, + 0x9C2E,0x4C7A,0x9C1F,0x4C76,0x4C79,0x4C7D,0x4C77,0x9DB0,0x9DBD,0x4CF6, + 0x4CF1,0x9DAE,0x9DC4,0x9E7B,0x400B,0x4D29,0x9E9E,0x4D6F,0x9F05,0x4D9A, + 0x9F69,0x9FA1,0x56C7,0x571D,0x5B4A,0x5DD3,0x3869,0x5F72,0x6202,0x39AB, + 0x6235,0x6527,0x651E,0x651F,0x3B2C,0x3B2D,0x6B07,0x6B06,0x3C17,0x3D9A, + 0x7054,0x721C,0x7220,0x7AF8,0x426E,0x7C5D,0x7C58,0x432C,0x7E92,0x7F4E, + 0x43CA,0x4578,0x4606,0x8827,0x4607,0x8B81,0x8B83,0x4720,0x8C44,0x4753, + 0x47CE,0x487A,0x4879,0x9442,0x944D,0x9454,0x944E,0x496B,0x9443,0x4967, + 0x496D,0x973C,0x9740,0x97C0,0x4A85,0x4AB0,0x4AF3,0x4B63,0x995A,0x9A51, + 0x4BB6,0x9ADD,0x4C82,0x4C7F,0x9C38, + /* plane 3, row 64 */ + 1 | (94 << 8), /* first, last */ + 0x4C86,0x9C45,0x9C3A,0x4C84,0x9C35,0x4CFC,0x4CFD,0x4CFA,0x9EF1, + 0x4D87,0x9F93,0x529A,0x361A,0x3619,0x8641,0x5DD7,0x3A75,0x6528,0x3C1A, + 0x3C1B,0x3C19,0x7053,0x7059,0x3D9C,0x7221,0x3E10,0x766F,0x7937,0x79B5, + 0x7C62,0x7C5E,0x7CF5,0x457B,0x457C,0x863D,0x4608,0x882D,0x8989,0x8B8D, + 0x8B87,0x8B90,0x8D1A,0x8E99,0x4841,0x48E3,0x4972,0x945F,0x4973,0x4968, + 0x9456,0x9461,0x945B,0x945A,0x945C,0x9465,0x4A35,0x9741,0x4A88,0x4A9D, + 0x986E,0x986C,0x986D,0x4275,0x99AA,0x9A5C,0x9A58,0x9ADE,0x4C8F,0x9C4F, + 0x9C51,0x4C8E,0x9C53,0x4D05,0x4D04,0x4CFF,0x9DFC,0x9F39,0x4D9E,0x513E, + 0x3554,0x56D2,0x3681,0x5B4F,0x6B14,0x40FA,0x7A72,0x7A73,0x4332,0x4670, + 0x466E,0x8B91,0xD87E,0x487C,0x91BF, + 92, /* first low-surrogate */ + 0xDDD6, + /* plane 3, row 65 */ + 1 | (94 << 8), /* first, last */ + 0x4975,0x946C,0x4974,0x4977,0x96E6,0x9745,0x4A37,0x97C8,0x97E4, + 0x995D,0x4BBA,0x9B21,0x4C11,0x9B2C,0x9B57,0x4C92,0x4C99,0x9C5D,0x9C61, + 0x9C65,0x9E08,0x4D0A,0x4D2A,0x4D2B,0x4D44,0x4D79,0x9F45,0x34AA,0x3748, + 0x6205,0x66EF,0x6B1B,0x6B1D,0x7225,0x7224,0x7C6D,0x42B4,0x8642,0x8649, + 0x460D,0x8978,0x898A,0x8B97,0x4754,0x8C9B,0x8D1C,0x4830,0x8EA2,0x4A09, + 0x4A38,0x4A36,0x4A8B,0x4AF7,0x4B66,0x4BBD,0x4C1E,0x9C6C,0x4C96,0x9C6F, + 0x4D0D,0x9E0E,0x4D73,0x9F08,0x9F1D,0x9FA3,0x373B,0x373C,0x5F60,0x6B1C, + 0x3DA0,0x40FB,0xffff,0x7CF3,0x4581,0x8B9B,0x8EA7,0x91C4,0x4978,0x947A, + 0x4A8D,0x4B73,0x9A61,0x9A63,0x9AD7,0x9C76,0x4DA6,0x9FA5,0x39AD,0x7067, + 0x3E11,0x72AB,0x864A,0x897D,0x8B9D, + /* plane 3, row 66 */ + 1 | (89 << 8), /* first, last */ + 0x8C53,0x8F65,0x947B,0x4A39,0x98CD,0x98DD,0x4BBF,0x9B30,0x9E16, + 0x4D0F,0x4DA7,0x4DB5,0x3FDC,0x4831,0x96E7,0x9E18,0x9EA2,0x4DA8,0x9F7C, + 0x4125,0x7E9E,0x9484,0x4BC1,0x9E1C,0x4190,0x7C71,0x97CA,0x4696,0x487F, + 0x4D10,0x9EA3,0x4A0A,0x9C7B,0x9F97,0x4D12,0x4A3A,0x9750,0x4A3B,0xffff, + 0xffff,0x5727,0x5C13,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5FC8, + 0xffff,0xffff,0xffff,0xffff,0xffff,0x6765,0xffff,0xffff,0x52BD,0xffff, + 0x5B66,0xffff,0x65F9,0x6788,0x6CE6,0x6CCB,0xffff,0x4FBD,0x5F8D,0xffff, + 0x6018,0x6048,0xffff,0x6B29,0x70A6,0xffff,0x7706,0xffff,0xffff,0xffff, + 0x5A10,0x5CFC,0x5CFE,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x70C9, + /* plane 3, row 67 */ + 3 | (91 << 8), /* first, last */ + 0x9579,0xffff,0x96BA,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0x7B29,0x8128,0xffff,0x8A2E,0xffff,0xffff,0xffff, + 0x9AD9,0xffff,0x582B,0x5845,0xffff,0x63FA,0xffff,0xffff,0xffff,0x6E86, + 0xffff,0xffff,0xffff,0xffff,0xffff,0x5867,0xffff,0x5BDD,0x656E,0xffff, + 0xffff,0xffff,0x8C87,0xffff,0x50D2,0x50DF,0xffff,0xffff,0xffff,0xffff, + 0x69BA,0xffff,0x6B9D,0xffff,0x8059,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6F8A,0xffff,0xffff, + 0x7BC3,0x7BC2,0xffff,0xffff,0xffff,0xffff,0x90F6,0xffff,0x9823,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x71CD,0x7499,0xffff,0xffff,0xffff,0xffff, + 0xffff,0x9842, + /* plane 3, row 68 */ + 2 | (94 << 8), /* first, last */ + 0x7F84,0xffff,0xffff,0xffff,0xffff,0xffff,0x8D0E,0xffff, + 0x9861,0xffff,0xffff,0x8B73,0xffff,0x9C27,0xffff,0x9458,0x77D6,0x9B2D, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0x4F66,0x4F68,0x4FE7,0x503F,0xffff,0x50A6,0x510F,0x523E,0x5324,0x5365, + 0x539B,0x517F,0x54CB,0x5573,0x5571,0x556B,0x55F4,0x5622,0x5620,0x5692, + 0x56BA,0x5691,0x56B0,0x5759,0x578A,0x580F,0x5812,0x5813,0x5847,0x589B, + 0x5900,0x594D,0x5AD1,0x5AD3,0x5B67,0x5C57,0x5C77,0x5CD5,0x5D75,0x5D8E, + 0x5DA5,0x5DB6,0x5DBF,0x5E65,0x5ECD,0x5EED,0x5F94,0x5F9A,0x5FBA,0x6125, + 0x6150,0x62A3,0x6360,0x6364,0x63B6, + /* plane 3, row 69 */ + 1 | (94 << 8), /* first, last */ + 0x6403,0x64B6,0x651A,0x7A25,0x5C21,0x66E2,0x6702,0x67A4,0x67AC, + 0x6810,0x6806,0x685E,0x685A,0x692C,0x6929,0x6A2D,0x6A77,0x6A7A,0x6ACA, + 0x6AE6,0x6AF5,0x6B0D,0x6B0E,0x6BDC,0x6BDD,0x6BF6,0x6C1E,0x6C63,0x6DA5, + 0x6E0F,0x6E8A,0x6E84,0x6E8B,0x6E7C,0x6F4C,0x6F48,0x6F49,0x6F9D,0x6F99, + 0x6FF8,0x702E,0x702D,0x705C,0x79CC,0x70BF,0x70EA,0x70E5,0x7111,0x7112, + 0x713F,0x7139,0x713B,0x713D,0x7177,0x7175,0x7176,0x7171,0x7196,0x7193, + 0x71B4,0x71DD,0x71DE,0x720E,0x5911,0x7218,0x7347,0x7348,0x73EF,0x7412, + 0x743B,0x74A4,0x748D,0x74B4,0x7673,0x7677,0x76BC,0x7819,0x781B,0x783D, + 0x7853,0x7854,0x7858,0x78B7,0x78D8,0x78EE,0x7922,0x794D,0x7986,0x7999, + 0x79A3,0x79BC,0x7AA7,0x7B37,0x7B59, + /* plane 3, row 70 */ + 1 | (92 << 8), /* first, last */ + 0x7BD0,0x7C2F,0x7C32,0x7C42,0x7C4E,0x7C68,0x7CA9,0x7CED,0x7DD0, + 0x7E07,0x7DD3,0x7E64,0x7F40,0xffff,0x8041,0x8063,0x80BB,0x6711,0x6725, + 0x8248,0x8310,0x8362,0x8312,0x8421,0x841E,0x84E2,0x84DE,0x84E1,0x8573, + 0x85D4,0x85F5,0x8637,0x8645,0x8672,0x874A,0x87A9,0x87A5,0x87F5,0x8834, + 0x8850,0x8887,0x8954,0x8984,0x8B03,0x8C52,0x8CD8,0x8D0C,0x8D18,0x8DB0, + 0x8EBC,0x8ED5,0x8FAA,0x909C,0xffff,0x915C,0x922B,0x9221,0x9273,0x92F4, + 0x92F5,0x933F,0x9342,0x9386,0x93BE,0x93BC,0x93BD,0x93F1,0x93F2,0x93EF, + 0x9422,0x9423,0x9424,0x9467,0x9466,0x9597,0x95CE,0x95E7,0x973B,0x974D, + 0x98E4,0x9942,0x9B1D,0x9B98,0xffff,0x9D49,0x6449,0x5E71,0x5E85,0x61D3, + 0x990E,0x8002,0x781E, + /* plane 3, row 71 */ + 1 | (10 << 8), /* first, last */ + 0x5528,0x5572,0x55BA,0x55F0,0x55EE,0x56B8,0x56B9,0x56C4,0x8053, + 0x92B0, + /* plane 3, row 72: --- */ + /* plane 3, row 73: --- */ + /* plane 3, row 74: --- */ + /* plane 3, row 75: --- */ + /* plane 3, row 76: --- */ + /* plane 3, row 77: --- */ + /* plane 3, row 78: --- */ + /* plane 3, row 79: --- */ + /* plane 3, row 80: --- */ + /* plane 3, row 81: --- */ + /* plane 3, row 82: --- */ + /* plane 3, row 83: --- */ + /* plane 3, row 84: --- */ + /* plane 3, row 85: --- */ + /* plane 3, row 86: --- */ + /* plane 3, row 87: --- */ + /* plane 3, row 88: --- */ + /* plane 3, row 89: --- */ + /* plane 3, row 90: --- */ + /* plane 3, row 91: --- */ + /* plane 3, row 92: --- */ + /* plane 3, row 93: --- */ + /* plane 3, row 94: --- */ + /* plane 4, row 1 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0x4E40,0x4E41,0x4E5A,0xD847,0x4E02,0x4E29,0xD840,0xD841, + 0x5202,0x353E,0x5DDC,0xD841,0xD841,0xD87E,0x5342,0x536A,0x5B52,0xD846, + 0xD87E,0xD87E,0x5FC4,0x624C,0x72AD,0x4E12,0x4E2F,0x4E96,0x4ED0,0x5142, + 0x5183,0xD87E,0xD841,0xD841,0xD842,0xD842,0x5383,0x53B8,0xD842,0xD842, + 0xD844,0x5928,0xD846,0x5C23,0x5E01,0x5F00,0xD84C,0x3CB8,0x706C,0x722B, + 0x5188,0x8279,0x8FB6,0x4E17,0xD840,0x340C,0xD840,0x3430,0x4EE2,0x4EDB, + 0xD841,0xD841,0x51AD,0xD841,0x51F7,0x34DA,0xD841,0xD842,0x3513,0x531B, + 0x5388,0x5387,0xD842,0x53CF,0x53FD,0x3563,0x53E7,0x56DC,0xD844,0x56D9, + 0x5725,0x5727,0x5933,0x5C13,0xD847,0xD847,0x5C75,0xD848,0xD848,0xD849, + 0x39C4,0x39C3,0x66F1,0xD84C,0xD855, + 1, /* first low-surrogate */ + 0xDC86, 0, 0, 0,0xDFE8, 0, 0,0xDD0E,0xDE27, + 0, 0, 0,0xDD3C,0xDE75,0xDC28, 0, 0, 0,0xDD3C, + 0xDC75,0xDC78, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xDC19,0xDEA5,0xDEAA,0xDD0F,0xDE0E, 0, 0,0xDF9C,0xDF9B, + 0xDE3C, 0,0xDFC2, 0, 0, 0,0xDFB4, 0, 0, 0, + 0, 0, 0, 0,0xDC65, 0,0xDDB2, 0, 0, 0, + 0xDC77,0xDD42, 0,0xDE33, 0, 0,0xDEAF,0xDC36, 0, 0, + 0, 0,0xDF22, 0, 0, 0, 0, 0,0xDDA3, 0, + 0, 0, 0, 0,0xDC25,0xDC24, 0,0xDC52,0xDD89,0xDCBF, + 0, 0, 0,0xDFB5,0xDF4C, + /* plane 4, row 2 */ + 1 | (94 << 8), /* first, last */ + 0x7F52,0xD863,0xD863,0x3401,0xD840,0xD840,0x4E51,0x4E6A,0xD840, + 0x4F0C,0xD840,0xD840,0x4EFE,0x4F1B,0xD840,0xD840,0x343A,0xD841,0x34AB, + 0x5173,0xD841,0x518E,0xD841,0xD841,0xD841,0xD841,0xD841,0x34DD,0xD841, + 0xD841,0x52A5,0x3515,0x52A7,0x52A4,0xD842,0xD842,0xD842,0xD842,0xD842, + 0x53BD,0xD842,0xD842,0xD842,0x5402,0xD842,0xD842,0xD842,0xD842,0x572B, + 0x591B,0x5935,0xD845,0x36A7,0x36A5,0xD845,0xD845,0x36A6,0xD846,0xffff, + 0x5C17,0x377C,0xD847,0x5C70,0x5C7D,0x37A9,0xD847,0x5DE9,0xD848,0x3834, + 0x3835,0xD848,0xD848,0xD848,0x38A8,0x5F19,0x5F1C,0x5F75,0xD849,0xD849, + 0x38FF,0x5FC8,0xD84A,0x39C7,0x39C6,0x39C8,0xD84A,0xD84B,0x3AD0,0x3AD1, + 0xD84C,0xD84C,0x3C59,0xD84E,0xD84E, + 2, /* first low-surrogate */ + 0xDE14,0xDE12, 0,0xDCA3,0xDCA2, 0, 0,0xDDB6, + 0,0xDDB5,0xDDB4, 0, 0,0xDDC2,0xDDB8, 0,0xDC79, 0, + 0,0xDD08, 0,0xDD7A,0xDDB6,0xDEBD,0xDEB7,0xDEBC, 0,0xDEC4, + 0xDEC9, 0, 0, 0, 0,0xDD30,0xDD83,0xDD85,0xDE12,0xDE34, + 0,0xDEE4,0xDEDE,0xDF2A, 0,0xDFAF,0xDFB4,0xDFB3,0xDFB1, 0, + 0, 0,0xDDDE, 0, 0,0xDEB8,0xDEB0, 0,0xDDC2, 0, + 0, 0,0xDC2A, 0, 0, 0,0xDFE9, 0,0xDC57, 0, + 0,0xDDB6,0xDDD7,0xDDDE, 0, 0, 0, 0,0xDCC2,0xDDAB, + 0, 0,0xDD8F, 0, 0, 0,0xDE6D,0xDEB5, 0, 0, + 0xDFC0,0xDFBF, 0,0xDDB9,0xDF1C, + /* plane 4, row 3 */ + 1 | (94 << 8), /* first, last */ + 0x6C12,0x3CBD,0xD84F,0xD850,0xD850,0x3E28,0x72B3,0xD851,0x3EA9, + 0x7390,0x7536,0xD858,0x43CC,0xD85A,0x8281,0x8FB8,0xD861,0x48B4,0xD861, + 0xD863,0x4E23,0x3416,0x342C,0xD840,0x4F2E,0xD840,0x514F,0xD841,0x51BA, + 0x34DF,0x34E0,0x5222,0xD841,0xD841,0xD841,0x3517,0xD842,0x52AF,0x52B0, + 0x52B1,0xD842,0xD842,0x352F,0xD842,0x5364,0xD842,0x53D3,0xD842,0x356A, + 0xD842,0x3570,0x356D,0xD842,0xD842,0xD842,0xD842,0x356E,0xD842,0xD87E, + 0xD87E,0xD842,0x362B,0x3628,0xD844,0xffff,0x593F,0xD845,0xD845,0x3692, + 0xD845,0x598B,0xD845,0x5991,0x5995,0xD845,0xD846,0x373F,0xD846,0x5B8A, + 0x374F,0x3774,0xD846,0xD846,0x377D,0xD847,0x37B7,0x37A3,0x37B0,0x37B1, + 0x5C87,0x37AB,0xD847,0xD847,0xD847, + 3, /* first low-surrogate */ + 0xDC80,0xDD84,0xDD85, 0, 0,0xDF24, 0, + 0, 0,0xDF4C, 0,0xDEF6, 0, 0,0xDE70, 0,0xDE75, + 0xDE17, 0, 0, 0,0xDDF1, 0,0xDDDA, 0,0xDDB9, 0, + 0, 0, 0,0xDECE,0xDED2,0xDED0, 0,0xDC43, 0, 0, + 0,0xDC4D,0xDD34, 0,0xDDD9, 0,0xDE18, 0,0xDF38, 0, + 0xDFD7, 0, 0,0xDFDC,0xDFCB,0xDFD6,0xDFD8, 0,0xDFD1,0xDC3E, + 0xDC3C,0xDFD2, 0, 0,0xDE59, 0, 0,0xDDE5,0xDDE6, 0, + 0xDDE8, 0,0xDEBD, 0, 0,0xDEBE,0xDD49, 0,0xDDCD, 0, + 0, 0,0xDF5E,0xDFD0, 0,0xDD06, 0, 0, 0, 0, + 0, 0,0xDD7C,0xDD71,0xDFEF, + /* plane 4, row 4 */ + 1 | (94 << 8), /* first, last */ + 0x383A,0x3837,0x5E0D,0x3838,0x3840,0xD848,0xD848,0x5E8E,0x389F, + 0xD848,0xD848,0x5F7A,0xD849,0x3904,0x3909,0x3906,0x38FD,0x390A,0x3907, + 0xD84A,0xD84A,0x39CA,0xD84A,0xD84A,0x6290,0x39C9,0xD84A,0x629A,0xD84B, + 0x653C,0x653A,0x3A7F,0x6598,0xD84C,0x3AD2,0xD84C,0xD84C,0x6765,0xD87E, + 0x3B43,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3CC1,0xD84F,0x3CC5, + 0x3DA3,0xD850,0xD850,0x3E2A,0x3E5F,0xD851,0xD851,0x3E5D,0xD851,0xD851, + 0xD852,0xD852,0x3F17,0xD853,0xD853,0x3F71,0x3F72,0xD853,0xD854,0x400F, + 0xD854,0xD855,0x79C2,0x4191,0xD858,0xD858,0xD858,0x43B2,0x43CF,0x43CE, + 0x809E,0xD85A,0xD85A,0x81EB,0xD85A,0x8289,0x4496,0xD85A,0xD85A,0x8296, + 0xD85A,0x8287,0xD85A,0x4497,0xD861, + 6, /* first low-surrogate */ + 0xDD8D,0xDDB7, 0, 0, + 0xDF33,0xDF7F, 0,0xDDF2, 0, 0, 0, 0, 0, 0, + 0xDE2A,0xDE8B, 0,0xDE83,0xDE8A, 0, 0,0xDE8E, 0,0xDEB6, + 0, 0, 0, 0,0xDCD8, 0,0xDD56,0xDFD2, 0,0xDCDB, + 0,0xDFC2,0xDC87,0xDC81,0xDDC2,0xDDBC,0xDF23, 0,0xDC93, 0, + 0,0xDD8D,0xDD8E, 0, 0,0xDF3B,0xDF4D, 0,0xDF34,0xDF31, + 0xDCF2,0xDCF0, 0,0xDC15,0xDD28, 0, 0,0xDF25,0xDCE7, 0, + 0xDCE9,0xDC17, 0, 0,0xDE6C,0xDE80,0xDF4B, 0, 0, 0, + 0,0xDCDE,0xDCFB, 0,0xDD51, 0, 0,0xDF01,0xDF02, 0, + 0xDF05, 0,0xDF03, 0,0xDC51, + /* plane 4, row 5 */ + 1 | (94 << 8), /* first, last */ + 0x8FC0,0x488B,0x8FC3,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0x9578,0xD863,0xD863,0x9625,0xD84F,0x4E75,0x4E74,0xD840,0xD840, + 0x342D,0xD840,0x4F99,0xD840,0x3450,0x344B,0xD840,0x344F,0x344C,0xD87E, + 0x4F71,0x5153,0x51BF,0xD841,0xD841,0x51C0,0xD841,0x51EE,0xD841,0x34E4, + 0x34E3,0xD841,0x34E1,0xD841,0x34E2,0xD841,0x523D,0x3519,0x52BD,0x530C, + 0xD842,0xD853,0xD842,0xD842,0x3541,0x7F37,0xD842,0x53C0,0x355E,0xD843, + 0xD843,0x3579,0xD843,0x546E,0x5483,0xD843,0xD843,0x545E,0x545D,0x577E, + 0x5779,0xD844,0x577A,0x576C,0xD844,0xD844,0xD844,0x3632,0x5787,0xD845, + 0x591D,0x3694,0x5946,0x3697,0xD845,0x5943,0xD845,0x3696,0x3698,0xD845, + 0xD845,0x36B2,0xD845,0xD845,0xD845, + 4, /* first low-surrogate */ + 0xDC53,0xDE7A,0xDE78,0xDE76,0xDE79,0xDE8F, + 0xDE7C, 0,0xDE1B,0xDE1C, 0,0xDD92, 0, 0,0xDD2E,0xDD2C, + 0,0xDE0C, 0,0xDE0B, 0, 0,0xDE05, 0, 0,0xDC05, + 0, 0, 0,0xDDC2,0xDDC3, 0,0xDE48, 0,0xDE46, 0, + 0,0xDEEA, 0,0xDEEB, 0,0xDEEE, 0, 0, 0, 0, + 0xDCD8,0xDC1E,0xDDDF,0xDDDE, 0, 0,0xDE4F, 0, 0,0xDC0D, + 0xDC08, 0,0xDC09, 0, 0,0xDC12,0xDC65, 0, 0, 0, + 0,0xDE89, 0, 0,0xDE84,0xDE9E,0xDE8B, 0, 0,0xDD62, + 0, 0, 0, 0,0xDDF9, 0,0xDDF7, 0, 0,0xDE06, + 0xDEDD, 0,0xDED9,0xDEDF,0xDEE2, + /* plane 4, row 6 */ + 1 | (94 << 8), /* first, last */ + 0x36B9,0x5B61,0x5B66,0xD840,0x5B90,0x3775,0x377F,0x377E,0x5C29, + 0x378F,0xD847,0xD847,0xD847,0x37BD,0x5CB2,0xD847,0x37BB,0x37BC,0xD847, + 0x5CC0,0xD848,0x383D,0x383E,0x3874,0xD848,0x387A,0x3876,0x3878,0x3875, + 0xD848,0xD848,0x38AF,0x38B0,0x38C7,0x38CC,0xD849,0xD849,0x3916,0xD849, + 0x3912,0x391D,0xD849,0xD849,0x3915,0x390F,0x3914,0x601F,0x5FE2,0xD849, + 0xD84A,0xD84A,0x39B0,0x39BF,0x39C0,0xD84A,0x39D2,0x39D9,0xD84B,0x3A7A, + 0xD84B,0xD84B,0x3A81,0x3A82,0xD84B,0x6616,0x65F9,0x3ADA,0xD859,0x6788, + 0xD84C,0x679B,0xD87E,0x676E,0x679E,0xD84C,0x3C22,0x3C1F,0xD84E,0xD84E, + 0x3C21,0x6B24,0xD84E,0xD84E,0xD84E,0x3C5C,0x6B7D,0xD84E,0x3C7D,0x3C8D, + 0x3C8F,0x6CE6,0xD84F,0x6CCB,0x3CD0, + 4, /* first low-surrogate */ + 0xDCF1, 0, 0, 0, 0, 0, + 0,0xDC3F,0xDC3E,0xDD0B, 0, 0,0xDD83, 0, 0,0xDD86, + 0,0xDC7C, 0, 0, 0,0xDDF7, 0, 0, 0, 0, + 0xDDFB,0xDF3B, 0, 0, 0, 0,0xDDF9,0xDDCA, 0,0xDDFF, + 0, 0,0xDE09,0xDE03, 0, 0, 0, 0, 0,0xDE10, + 0xDD9A,0xDD9F, 0, 0, 0,0xDE87, 0, 0,0xDEB7, 0, + 0xDF08,0xDEF9, 0, 0,0xDEF4, 0, 0, 0,0xDE57, 0, + 0xDFD6, 0,0xDCDE, 0, 0,0xDFD4, 0, 0,0xDC90,0xDC8D, + 0, 0,0xDD60,0xDDCE,0xDDCF, 0, 0,0xDDD1, 0, 0, + 0, 0,0xDCCA, + /* plane 4, row 7 */ + 1 | (94 << 8), /* first, last */ + 0xD84F,0x3CD8,0xD84F,0xD84F,0xD84F,0x6CB5,0x3DA7,0xD850,0x7097, + 0xD850,0x709B,0x3E12,0xD851,0xD851,0x3E2F,0xD851,0x726B,0x3E2E,0x3E2C, + 0x3E5C,0xD851,0x72D5,0xD851,0xD851,0x3E62,0x3E67,0x3EB4,0xD852,0xD852, + 0xD852,0xD853,0x7543,0xD848,0xD853,0x759C,0xD853,0xD853,0x3FEA,0xD854, + 0x3FFB,0xD854,0x4014,0xD854,0x4013,0x4012,0x4010,0x4011,0xD854,0x4086, + 0x77E4,0x4098,0xD855,0xD855,0x412A,0xD855,0xD856,0xD856,0xD856,0x7ACE, + 0x42B5,0xD858,0xD858,0xD859,0xD859,0x8013,0x43D6,0x43D8,0x80B7,0x43D9, + 0x43D4,0x43D7,0xD87E,0x80B9,0xffff,0xD859,0x81E4,0x81FD,0x820F,0x4460, + 0xD85A,0xD85A,0x449E,0x44A1,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0x82BF,0x82CA,0xD85A,0xD85A,0x82C1, + 1, /* first low-surrogate */ + 0xDCB7, 0,0xDCB2,0xDCBB,0xDCB9, 0, 0,0xDD9E, 0, + 0xDDB2, 0, 0,0xDD6F,0xDDAC, 0,0xDE23, 0, 0, 0, + 0,0xDF6C, 0,0xDF32,0xDF5E, 0, 0, 0,0xDCFB,0xDF29, + 0xDFBD,0xDC1F, 0,0xDF41,0xDC1D, 0,0xDD31,0xDD2F, 0,0xDC43, + 0,0xDC41, 0,0xDCF5, 0, 0, 0, 0,0xDCF2, 0, + 0, 0,0xDC1E,0xDF54, 0,0xDF56,0xDD29,0xDD27,0xDD28, 0, + 0,0xDE79,0xDE7E,0xDCB6,0xDCB7, 0, 0, 0, 0, 0, + 0, 0,0xDD81, 0, 0,0xDE4D, 0, 0, 0, 0, + 0xDE09,0xDE08, 0, 0,0xDF1E,0xDF1A,0xDF23,0xDF15,0xDF19,0xDF16, + 0, 0,0xDF14,0xDF18, + /* plane 4, row 8 */ + 1 | (94 << 8), /* first, last */ + 0x44A0,0xD85C,0xD85D,0xD85D,0xD861,0x8FD0,0xffff,0xD861,0x48B9, + 0xD861,0x90AE,0xD861,0xD861,0xD861,0xD861,0xD863,0x49C1,0x49C2,0x9638, + 0xD87E,0x341C,0xD840,0x345E,0x4FBC,0x3459,0x345C,0xD840,0x345F,0x4FE9, + 0x4FBD,0x4FE2,0x5158,0xD841,0xD841,0x34CE,0xD841,0xD841,0xD841,0xD841, + 0xD841,0x52C6,0xD842,0x52C8,0xD842,0xD842,0x5328,0xD842,0x5329,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0x355F,0xD843,0x3585,0xD843,0xD843, + 0x3586,0xD843,0x57B4,0xD844,0x57A9,0x3687,0xD845,0xD845,0xD845,0xD845, + 0xD845,0x36CA,0xD845,0x36C3,0xD845,0xD845,0xD845,0x36C2,0x5B68,0xD846, + 0x3741,0xD846,0xD846,0xD846,0x3780,0x3781,0xD847,0xD847,0x3793,0x3792, + 0xD847,0x37C5,0xD847,0xffff,0xD847, + 2, /* first low-surrogate */ + 0xDE1F,0xDDDD,0xDDDF,0xDC69, 0, 0,0xDC6C, 0, + 0xDE93, 0,0xDE95,0xDE94,0xDE91,0xDE97,0xDE30, 0, 0, 0, + 0xDE18, 0,0xDE31, 0, 0, 0, 0,0xDE36, 0, 0, + 0, 0, 0,0xDDC9,0xDDCA, 0,0xDF18,0xDF12,0xDF19,0xDF10, + 0xDF16, 0,0xDC5F, 0,0xDCDF,0xDD17, 0,0xDD3C, 0,0xDDEA, + 0xDDE9,0xDE1C,0xDE58,0xDE64,0xDEF3, 0,0xDC97, 0,0xDC5A,0xDC59, + 0,0xDC8E, 0,0xDEBC, 0, 0,0xDE0D,0xDDFC,0xDE0C,0xDF07, + 0xDF0A, 0,0xDF02, 0,0xDF26,0xDF08,0xDF1D, 0, 0,0xDD4E, + 0,0xDDED,0xDDEE,0xDDEF, 0, 0,0xDC50,0xDC4C, 0, 0, + 0xDC4F, 0,0xDDD4, 0,0xDDB0, + /* plane 4, row 9 */ + 1 | (94 << 8), /* first, last */ + 0x3846,0x3841,0x3845,0x3842,0x383F,0xD848,0xD848,0x3882,0x3881, + 0x387F,0x38A5,0x5F2B,0x38B3,0x38B5,0xD848,0xD848,0x5F8D,0x38DA,0xD849, + 0x38DB,0x390D,0x6018,0x390E,0xD849,0x391E,0x3925,0x3926,0x391C,0x3921, + 0x6057,0x6048,0x3927,0x391A,0xD849,0xD849,0xD849,0x6038,0xD849,0xD849, + 0x3924,0xD849,0xD87E,0x6071,0xD84A,0x39C1,0x39E1,0xD84A,0xD84A,0x6312, + 0x39EB,0xD84A,0x39E2,0x39D7,0x39E9,0xD84A,0xD84A,0x630A,0xD84A,0x6323, + 0xD84A,0x3A84,0xD84B,0xD84B,0xD84B,0x3AB5,0x3ABC,0x3ADC,0x3ADE,0x3ADF, + 0xD84C,0x662A,0xD84C,0xD84C,0xD84C,0xD84D,0x3B54,0x67E0,0x67BE,0x3B53, + 0x3C24,0x3C25,0x6B29,0x3C28,0x3C27,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0x3C8B,0xD84F,0xD84F,0x3CDC, + 6, /* first low-surrogate */ + 0xDCA5,0xDE09, 0, 0, + 0, 0, 0, 0, 0,0xDFF3,0xDFD7, 0, 0,0xDCDC, + 0, 0, 0, 0,0xDE0B, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xDE3A,0xDE0D,0xDE11, 0,0xDE20,0xDE01, + 0,0xDE37,0xDCA3, 0,0xDDAA, 0, 0,0xDEE7,0xDEE8, 0, + 0,0xDEF5, 0, 0, 0,0xDF35,0xDEE6, 0,0xDEF8, 0, + 0xDEF1, 0,0xDF14,0xDF15,0xDF09, 0, 0, 0, 0, 0, + 0xDD7B, 0,0xDD7E,0xDF66,0xDF67,0xDC0A, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xDC9C,0xDD62,0xDDE1,0xDDDE,0xDDDF, + 0xDDE9, 0,0xDCE4,0xDCF7, + /* plane 4, row 10 */ + 1 | (94 << 8), /* first, last */ + 0x6D43,0xD84F,0xD84F,0xD84F,0xD87E,0x70A6,0x3DB2,0x70C0,0xD850, + 0x722F,0xD851,0x3E1B,0xD851,0x3E32,0x7271,0xD851,0xD851,0x3E6B,0xD851, + 0x3E6C,0x3E6D,0xD852,0x3EB9,0x3EBA,0x3F09,0x3F0A,0xD852,0x74EA,0x3F1B, + 0xD852,0xD852,0x7520,0x3F58,0xD853,0x3F5A,0xD87E,0xD853,0x3F77,0xD853, + 0xD853,0x3F79,0x75A9,0xD853,0x7685,0xD853,0x3FEB,0xD853,0x3FFD,0x3FFC, + 0x7706,0x4015,0x4018,0x76F6,0x4016,0x4017,0x4019,0x7700,0x401B,0xD854, + 0xD854,0x7702,0xD854,0x4087,0xD854,0xD854,0x409C,0xD855,0x409A,0xD855, + 0x40FF,0x40FE,0xD855,0x4131,0x412E,0x4130,0x4132,0xD855,0xffff,0x412F, + 0xD855,0x4195,0x4196,0xD856,0xD856,0xD856,0x41C5,0x427A,0xD858,0x4342, + 0xD858,0x4354,0xD858,0xD858,0xD858, + 2, /* first low-surrogate */ + 0xDCEA,0xDCF6,0xDD12,0xDD01, 0, 0, 0,0xDDD9, + 0,0xDD5F, 0,0xDD73, 0, 0,0xDE3F,0xDF78, 0,0xDF7D, + 0, 0,0xDD12, 0, 0, 0, 0,0xDF2F, 0, 0, + 0xDF30,0xDFDB, 0, 0,0xDC29, 0,0xDD36,0xDD40, 0,0xDD3D, + 0xDD3E, 0, 0,0xDD38, 0,0xDF48, 0,0xDFD0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDD0E, + 0xDD09, 0,0xDD07, 0,0xDF5F,0xDF60, 0,0xDC2A, 0,0xDC29, + 0, 0,0xDE4D, 0, 0, 0, 0,0xDF6C, 0, 0, + 0xDF67, 0, 0,0xDD39,0xDD34,0xDE59, 0, 0,0xDE23, 0, + 0xDE82, 0,0xDE83,0xDEA8,0xDF55, + /* plane 4, row 11 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD858,0xD858,0xD858,0x8009,0xD87E,0x439F,0x43A0,0x43A2, + 0x43E0,0xD859,0x43E1,0xD859,0xD859,0x43DF,0xD859,0xD85A,0x4462,0x4461, + 0xD85A,0xD85A,0x44A7,0xD85A,0xD85A,0xD85A,0x82DA,0xD85A,0xD85A,0x830A, + 0x4589,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0x461D,0xD85D, + 0xD85D,0x472A,0xD85F,0xD85F,0x47D3,0x4842,0x4843,0xD861,0x4891,0xD861, + 0xD861,0x4890,0x48BF,0xD861,0x48BC,0xD861,0x48C0,0x49C7,0x49C5,0x9655, + 0xD863,0x9652,0x4E35,0xD840,0xD840,0x5034,0x5001,0xD840,0x500A,0x3466, + 0xD840,0xD840,0xD840,0x34AD,0xD841,0xD841,0xD841,0xD841,0x5258,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD842,0x351D,0xD842,0x3531,0x532B,0xD842, + 0x354C,0xD842,0xD842,0x3595,0x3591, + 1, /* first low-surrogate */ + 0xDFF9,0xDFF8,0xDFFC,0xDFFA, 0,0xDD7A, 0, 0, 0, + 0,0xDE74, 0,0xDE6B,0xDE71, 0,0xDE76,0xDE0E, 0, 0, + 0xDE10,0xDE0F, 0,0xDF38,0xDF39,0xDF3A, 0,0xDF37,0xDF3E, 0, + 0,0xDD9C,0xDE2A,0xDE3A,0xDE2B,0xDE28,0xDDAA,0xDE0F, 0,0xDE10, + 0xDFE6, 0,0xDD25,0xDE8E, 0, 0, 0,0xDC8B, 0,0xDC8C, + 0xDC9A, 0, 0,0xDEB3, 0,0xDEB2, 0, 0, 0, 0, + 0xDE44, 0, 0,0xDD58,0xDEA7, 0, 0,0xDE63, 0, 0, + 0xDE6A,0xDE65,0xDE6B, 0,0xDCED,0xDDD9,0xDF3B,0xDF32, 0,0xDF35, + 0xDF31,0xDF3E,0xDF43,0xDF36,0xDC6D, 0,0xDCE4, 0, 0,0xDDF4, + 0,0xDE69,0xDE6B, + /* plane 4, row 12 */ + 1 | (94 << 8), /* first, last */ + 0x3594,0xD843,0xD843,0xD843,0x358F,0x54EC,0xD843,0x5515,0x54FE, + 0xD843,0xD843,0xD843,0x54E3,0x5516,0x3640,0xD844,0x3641,0xD844,0x57D3, + 0xD844,0xD845,0xD845,0xD845,0x5959,0x5A27,0x36D8,0x36D2,0x36DA,0x5A28, + 0x5A10,0x36D7,0x5A0E,0x3742,0x3757,0xD846,0xD846,0xD846,0x5BAF,0xD846, + 0x5BBA,0x5BB1,0xD846,0xD846,0x3778,0x3782,0x3797,0xD847,0xD847,0x37C9, + 0xD847,0x37C8,0x37D6,0x37CC,0xD847,0x37D0,0xD847,0xD847,0x37CE,0x37C7, + 0x5CFC,0xD847,0x37CF,0x37CB,0x5CF2,0x5CFE,0xD847,0xD847,0x5DF8,0xD848, + 0x3847,0xD848,0x3848,0xD848,0xD848,0x3883,0x3885,0x3884,0xD848,0xD848, + 0x5F2C,0x38B8,0x38BC,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849, + 2, /* first low-surrogate */ + 0xDCBF,0xDCC3,0xDCAE, 0, 0,0xDCB1, 0, 0, + 0xDCBB,0xDCAF,0xDCB0, 0, 0, 0,0xDEEF, 0,0xDEED, 0, + 0xDEF0,0xDD93,0xDE34,0xDE2B, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xDE04,0xDE03,0xDE02, 0,0xDE05, + 0, 0,0xDE00,0xDF74, 0, 0, 0,0xDC65,0xDC63, 0, + 0xDDD7, 0, 0, 0,0xDDE8, 0,0xDDDB,0xDDD8, 0, 0, + 0,0xDE09, 0, 0, 0, 0,0xDDE5,0xDDE7, 0,0xDC3F, + 0,0xDCC0, 0,0xDCB9,0xDCBA, 0, 0, 0,0xDE20,0xDF4F, + 0, 0, 0,0xDC91,0xDC90,0xDCEE,0xDCF3,0xDCEC,0xDCF1,0xDCEB, + 0xDCF2,0xDCF4,0xDCED,0xDE41,0xDE48, + /* plane 4, row 13 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0x3931,0x3934,0x3936,0x6082,0xD849,0xD849,0x3923,0xD849, + 0xD849,0x393A,0x6091,0x608F,0xD849,0x39B4,0x39B5,0x39ED,0x39EC,0x39D8, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x39F6,0x39E7,0xD84A, + 0xD84B,0x3A7C,0x3A7B,0xD84B,0x3A88,0x6547,0x654C,0xD84B,0xD87E,0x658A, + 0xD84C,0x3ABE,0xD84C,0x3AE7,0x3AE5,0x3AEE,0x67E1,0x684A,0xD84D,0x3B59, + 0x3B5E,0xD84D,0x3B5A,0x683F,0x3B61,0x3B58,0x3B5B,0x67BD,0xD84D,0x3B5F, + 0xD87E,0x3C2A,0x3C2D,0xD84E,0x3C23,0x3C2B,0x3C2C,0xD84E,0x3C7E,0xD87E, + 0x3C93,0x3C99,0xD84E,0xD84E,0x3CB3,0x3CE7,0x3CEA,0xD84F,0xD84F,0xD84F, + 0xD87E,0xD84F,0xD84F,0x3DB4,0xD850,0x70C9,0x3E17,0xD851,0xD851,0xD851, + 0x3E21,0xD851,0x3E38,0x3E37,0x3E74, + 1, /* first low-surrogate */ + 0xDE45, 0, 0, 0, 0,0xDE7F,0xDE8B, 0,0xDE3B, + 0xDE4E, 0, 0, 0,0xDE7C, 0, 0, 0, 0, 0, + 0xDEF0,0xDF36,0xDF3F,0xDF43,0xDF31,0xDF34,0xDF46, 0, 0,0xDF2F, + 0xDEC3, 0, 0,0xDF36, 0, 0, 0,0xDF21,0xDCC8, 0, + 0xDC73, 0,0xDCE6, 0, 0, 0, 0, 0,0xDC3F, 0, + 0,0xDC6B, 0, 0, 0, 0, 0, 0,0xDC71, 0, + 0xDCE2, 0, 0,0xDCB0, 0, 0, 0,0xDDF3, 0,0xDCF5, + 0, 0,0xDF61,0xDF5F, 0, 0, 0,0xDD28,0xDD1E,0xDD29, + 0xDD02,0xDCEB,0xDD66, 0,0xDDF6, 0, 0,0xDD60,0xDD77,0xDDBB, + 0,0xDDBC, + /* plane 4, row 14 */ + 1 | (94 << 8), /* first, last */ + 0x3E73,0x3E75,0xD851,0xD851,0xD851,0x3E76,0x3E78,0xD852,0xD852, + 0x73BA,0x3F0C,0x3F20,0x3F1E,0xD853,0x3F5B,0xD853,0x3F5C,0xD853,0x3F83, + 0x75C6,0x3F80,0x3F81,0x3F7E,0x3F88,0x3F85,0x3F89,0x3F7F,0x3F8E,0xD853, + 0xD853,0x3F84,0x75B7,0x768C,0xD853,0x768D,0xD853,0x3FEE,0x3FED,0x3FFE, + 0xD854,0x3FFF,0xD854,0xD854,0xD854,0x4023,0xD854,0x7717,0xD854,0x771C, + 0x401F,0xD854,0xD854,0x7714,0xD854,0x408F,0x4090,0xD855,0xD855,0xD855, + 0x40A0,0xD855,0x40A6,0x409F,0xD855,0x40A7,0x40A1,0xD855,0x4102,0x4136, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x41C8,0xD856,0xD856, + 0x41D8,0x7B0C,0x41DD,0x41DC,0xD856,0x41D7,0xD856,0x41DA,0x42BA,0xD857, + 0xD857,0xD857,0x42BE,0x42C2,0x42BB, + 3, /* first low-surrogate */ + 0xDFA2,0xDFB2,0xDF9E, 0, 0,0xDD3A,0xDD38, + 0, 0, 0, 0,0xDC4D, 0,0xDC5E, 0,0xDD17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,0xDD64, + 0xDD67, 0, 0, 0,0xDF59, 0,0xDFDA, 0, 0, 0, + 0xDC51, 0,0xDC55,0xDD3B,0xDD34, 0,0xDD37, 0,0xDD31, 0, + 0,0xDD3F,0xDD59, 0,0xDF61, 0, 0,0xDC58,0xDC62,0xDC50, + 0,0xDC51, 0, 0,0xDC46, 0, 0,0xDE2D, 0, 0, + 0xDD48,0xDD51,0xDD4A,0xDD4F,0xDD50,0xDD49,0xDE63, 0,0xDE66,0xDE60, + 0, 0, 0, 0,0xDEF1, 0,0xDF07, 0, 0,0xDF9B, + 0xDFA3,0xDF9D, + /* plane 4, row 15 */ + 1 | (94 << 8), /* first, last */ + 0x42C0,0xD857,0xD857,0xD857,0x7D23,0xD857,0xD848,0xD858,0x4343, + 0x4355,0xD858,0xD858,0x4357,0x4368,0x7F98,0x7F90,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0x43A1,0xD859,0x803A,0xD859,0xD859,0xD859, + 0xD859,0x43EA,0xD859,0x43E7,0xD859,0xD859,0xD859,0xD859,0x43E8,0x43E9, + 0xD859,0xD85A,0x4454,0xD85A,0xD85A,0xD85A,0xD85A,0x8226,0x4465,0xD85A, + 0xD85A,0x448A,0xD85A,0x44B0,0xD85A,0xD85A,0xD85A,0x44BC,0x832E,0xD85A, + 0x8355,0x831A,0x44B8,0x833D,0xD85A,0x44B2,0xD85A,0x8330,0x44BD,0xD85A, + 0xD85A,0x458A,0x8651,0x45A1,0xD85C,0x45A2,0xD85C,0x8688,0xD85C,0x4615, + 0xD85D,0xD85D,0x4620,0x4673,0xD85D,0x898E,0x898D,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0x8A09,0x8A14,0x46B1, + 2, /* first low-surrogate */ + 0xDFA9,0xDFA7,0xDFA4, 0,0xDFBA,0xDDC1,0xDE26, 0, + 0,0xDE94,0xDE93, 0, 0, 0, 0,0xDC07,0xDC0D,0xDC02, + 0xDC0C,0xDC09,0xDC08,0xDC13, 0,0xDCD2, 0,0xDD3E,0xDD3C,0xDE67, + 0xDE9E, 0,0xDEAD, 0,0xDED9,0xDE42,0xDEA3,0xDEA0, 0, 0, + 0xDE7C,0xDD04, 0,0xDD58,0xDD60,0xDDC9,0xDDC8, 0, 0,0xDE1C, + 0xDE1A, 0,0xDF74, 0,0xDF6E,0xDF6F,0xDF79, 0, 0,0xDF77, + 0, 0, 0, 0,0xDF7C, 0,0xDF70, 0, 0,0xDF7A, + 0xDF82, 0, 0, 0,0xDE44, 0,0xDE43, 0,0xDE45, 0, + 0xDE25,0xDE1F, 0, 0,0xDFE8, 0, 0,0xDC09,0xDCB7,0xDCB9, + 0xDD64,0xDD63, + /* plane 4, row 16 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0xD85E,0x472B,0xD85E,0x4745,0xD85F,0x4797,0x4798,0xD85F, + 0x47D5,0xD85F,0xD87E,0x4893,0x4896,0x9007,0x4894,0xD861,0xD861,0x48C7, + 0x48C5,0xD861,0xD861,0xD861,0x48C4,0xD861,0x9579,0x9584,0x49CE,0x49CA, + 0x49CC,0x9657,0x49C9,0x96BA,0xffff,0xD867,0xD840,0x346E,0xD840,0x5067, + 0xD840,0xD840,0x3471,0xD840,0x34BB,0x34D3,0xD841,0xD841,0xD841,0xD841, + 0x34F3,0x34ED,0x34F5,0xD841,0xD841,0x34F1,0x34F2,0x34F6,0x3520,0xD842, + 0x3528,0xD842,0x5318,0x532C,0x5359,0xD842,0xD842,0xD842,0x5368,0x537E, + 0xD842,0xD842,0x53A1,0xD843,0x35A1,0x555B,0x35AA,0x35A9,0xD843,0x35B5, + 0x35A5,0x35A8,0x5542,0x35A7,0x5547,0xD843,0xD87E,0x553D,0xD843,0xD843, + 0x5560,0x57EB,0xD844,0xD844,0xD844, + 1, /* first low-surrogate */ + 0xDD62,0xDD65, 0,0xDFAC, 0,0xDD2A, 0, 0,0xDE96, + 0,0xDFC2,0xDDDE, 0, 0, 0, 0,0xDCAA,0xDCB0, 0, + 0,0xDED4,0xDECD,0xDED6, 0,0xDFF0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xDD4B,0xDD62, 0,0xDEB7, 0, + 0xDEAC,0xDEAB, 0,0xDEC1, 0, 0,0xDDE8,0xDF69,0xDF5D,0xDF5F, + 0, 0, 0,0xDF64,0xDF62, 0, 0, 0, 0,0xDCF9, + 0,0xDCEE, 0, 0, 0,0xDDAB,0xDDAC,0xDDAA, 0, 0, + 0xDE86,0xDE7A, 0,0xDD28, 0, 0, 0, 0,0xDD31, 0, + 0, 0, 0, 0, 0,0xDD2D,0xDC43, 0,0xDD2B,0xDD32, + 0, 0,0xDF29,0xDF26,0xDF53, + /* plane 4, row 17 */ + 1 | (94 << 8), /* first, last */ + 0x364D,0xD844,0xD844,0xD845,0x369C,0x595F,0xD845,0x36EA,0x36E5, + 0xD845,0xD845,0x5B6F,0xD846,0x375E,0xD846,0xD87E,0xD846,0x3786,0x3784, + 0xD846,0x5C5A,0xD847,0x37D9,0xD847,0x37DE,0xD847,0xD847,0xD847,0x37DB, + 0xD847,0xD847,0xD847,0xD847,0x3831,0xD848,0xD848,0x384B,0xD848,0x3849, + 0x384A,0x384C,0xD848,0xD848,0x388A,0xD848,0x3889,0x388B,0xD848,0x38BB, + 0x5FA2,0x5F9D,0x38E4,0xD849,0xD849,0x5FA3,0xD849,0xD849,0x393B,0x392E, + 0x393E,0x3946,0x3953,0xD849,0x3944,0xD849,0x393F,0x3942,0x394F,0xD849, + 0x3952,0x394A,0x60C2,0xD849,0x395A,0x60A5,0x3949,0xD849,0x621C,0xD84A, + 0x621D,0x3A03,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x6395,0x639A,0x3A01, + 0x3A06,0x39FB,0x39F9,0xD84A,0x3A05, + 2, /* first low-surrogate */ + 0xDF33,0xDF34,0xDD9D, 0, 0,0xDE41, 0, 0, + 0xDF91,0xDF69, 0,0xDE22, 0,0xDE34,0xDC6D,0xDF2E, 0, 0, + 0xDFF4, 0,0xDE28, 0,0xDE1C, 0,0xDE11,0xDE24,0xDE15, 0, + 0xDE16,0xDE54,0xDE23,0xDFFF, 0,0xDCCF,0xDCD0, 0,0xDCCE, 0, + 0, 0,0xDDC7,0xDE5C, 0,0xDE36, 0, 0,0xDE43, 0, + 0, 0, 0,0xDD2A,0xDD01, 0,0xDD0B,0xDD0F, 0, 0, + 0, 0, 0,0xDEDF, 0,0xDED2, 0, 0, 0,0xDECD, + 0, 0, 0,0xDEDB, 0, 0, 0,0xDECF, 0,0xDDC0, + 0, 0,0xDF81,0xDF82,0xDF8A,0xDFA8,0xDF8C, 0, 0, 0, + 0, 0, 0,0xDF8E, + /* plane 4, row 18 */ + 1 | (94 << 8), /* first, last */ + 0x39FA,0xD84A,0x63A6,0xD84A,0x39FE,0xD84A,0x3A7D,0x3A8C,0xD84B, + 0xD84B,0x6550,0x3A8E,0xD84B,0xD84B,0x6552,0xD84B,0xD84B,0xD84C,0xD84C, + 0x65C8,0xD84C,0x3AF0,0x3AF2,0xD84C,0x6658,0x3AF1,0x3AE6,0xD84C,0xD84C, + 0xD87E,0x6888,0xD84D,0x3B6F,0x3B6D,0x3B69,0xD84D,0xD84D,0x3B6E,0xD84D, + 0x3C2F,0x3C30,0x3C63,0xD84E,0xD84E,0xD84E,0x6BB8,0x3C80,0x6BB9,0x3C9A, + 0x3C94,0x3C96,0x3C95,0x3C97,0xD84E,0x3CF4,0x3CFE,0xD84F,0x3D01,0xD84F, + 0x3D02,0xD84F,0x3CF9,0xD84F,0xD84F,0xD84F,0xD84F,0x3CF6,0x3CF7,0xD84F, + 0xD84F,0xD84F,0x3CFF,0xD84F,0xD84F,0xD84F,0xD84F,0x6E0B,0xD84F,0xD850, + 0x3DBF,0x3DBC,0x7105,0xD850,0xD850,0xD850,0x3DBE,0x3DC0,0xD851,0x3E3B, + 0x3E39,0xD851,0xD851,0xD851,0x3E3C, + 2, /* first low-surrogate */ + 0xDF8B, 0,0xDF96, 0,0xDFCC, 0, 0,0xDF4F, + 0xDF4A, 0, 0,0xDF4B,0xDF3D, 0,0xDF44,0xDF49,0xDC9E,0xDCF3, + 0,0xDCF5, 0, 0,0xDDB3, 0, 0, 0,0xDDE5,0xDDB6, + 0xDCD8, 0,0xDC86, 0, 0, 0,0xDCB6,0xDC85, 0,0xDCAB, + 0, 0, 0,0xDE0D,0xDE8B,0xDE8C, 0, 0, 0, 0, + 0, 0, 0, 0,0xDF72, 0, 0,0xDD8F, 0,0xDD79, + 0,0xDD77, 0,0xDD90,0xDD88,0xDD80,0xDD9E, 0, 0,0xDD82, + 0xDD34,0xDD89, 0,0xDD85,0xDD7E,0xDD7A,0xDDA6, 0,0xDDB5,0xDDF4, + 0, 0, 0,0xDE29,0xDE26,0xDE2A, 0, 0,0xDD7E, 0, + 0,0xDE5B,0xDE61,0xDE60, + /* plane 4, row 19 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0x7314,0x7304,0xD851,0x3E7D,0xD851,0x3E7F,0x3E7A,0x3E7C, + 0x7305,0x3E7E,0x7315,0x730D,0x3E80,0x3EBF,0x3EC3,0xD852,0xD852,0x3ECC, + 0x3F0E,0x3F0D,0xD852,0x3F26,0x3F24,0x3F25,0x3F23,0x3F21,0x3F29,0xD853, + 0xD853,0x3F8F,0x3F8D,0xD853,0x3F8B,0x3F92,0xD853,0x3F90,0xD853,0x3FEF, + 0x3FF0,0xD853,0xD854,0x4001,0xD854,0x402E,0x402D,0x772E,0x4028,0x4029, + 0x402C,0xD854,0xD854,0xD854,0x7741,0x4088,0xD854,0x4092,0x4091,0x77EA, + 0xD854,0x7844,0x40A9,0x40AC,0x40AE,0x40AA,0x4106,0x4105,0x414A,0x413E, + 0x413C,0x413B,0xD855,0x4142,0x4141,0x4143,0xD855,0x4145,0xD856,0x419A, + 0x419B,0x419F,0x419E,0xD856,0xD856,0xD856,0x41DE,0x41E2,0x41E6,0xD856, + 0x7B29,0x41E3,0x7B27,0x41DF,0xD857, + 1, /* first low-surrogate */ + 0xDF9B, 0, 0,0xDFC3, 0,0xDFCD, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDD54,0xDD59, 0, + 0, 0,0xDEF5, 0, 0, 0, 0, 0, 0,0xDC69, + 0xDC65, 0, 0,0xDD7C, 0, 0,0xDD80, 0,0xDF65, 0, + 0,0xDFDF,0xDC60, 0,0xDC5E, 0, 0, 0, 0, 0, + 0,0xDD8F,0xDD61,0xDD5A, 0, 0,0xDF67, 0, 0, 0, + 0xDFBB, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xDF9B, 0, 0, 0,0xDFA9, 0,0xDD66, 0, + 0, 0, 0,0xDE72,0xDE76,0xDF14, 0, 0, 0,0xDF0F, + 0, 0, 0, 0,0xDE41, + /* plane 4, row 20 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0x7C9D,0xD857,0xD857,0x427E,0x42C9,0x42CC,0xD857,0x42D1, + 0xD857,0x42D0,0xD857,0x42CF,0x42C8,0xD857,0x42CD,0xD857,0xD857,0x4349, + 0x4347,0x4358,0x436B,0x436C,0x436A,0xD858,0x4380,0x4382,0x4384,0x7FC8, + 0x4383,0xD859,0xD859,0x43B6,0xD859,0xD859,0xD859,0xD859,0xD859,0x8126, + 0x43F1,0xD859,0x43F6,0x43F3,0x43F0,0x811C,0xD859,0xD859,0x8128,0x43F5, + 0x43F4,0x43F7,0xD859,0xD859,0xD85A,0xD87E,0x4455,0xD85A,0xD85A,0xD85A, + 0x448B,0x44CB,0x44C2,0xD85A,0xD85A,0xD85A,0x44CA,0x44CC,0xD85A,0x44C7, + 0x44C9,0x8370,0xD85A,0x44C6,0xD85B,0xD85A,0x44C3,0x8382,0xD85A,0x83AC, + 0xD85A,0x44C4,0xD85A,0xD87E,0xD87E,0xD85A,0xD85C,0xD85C,0xD85C,0x45A9, + 0x86AD,0x45A8,0x45A6,0xD85C,0xD85C, + 1, /* first low-surrogate */ + 0xDE46, 0,0xDE4B,0xDE43, 0, 0, 0,0xDFC6, 0, + 0xDFC7, 0,0xDFCE, 0, 0,0xDFC9, 0,0xDFCB,0xDFC5, 0, + 0, 0, 0, 0, 0,0xDF69, 0, 0, 0, 0, + 0,0xDC1E,0xDCBA, 0,0xDD52,0xDD51,0xDD53,0xDE9F,0xDEDB, 0, + 0,0xDEE3, 0, 0, 0, 0,0xDED7,0xDEE9, 0, 0, + 0, 0,0xDEDE,0xDEDC,0xDD3C,0xDD8B, 0,0xDE22,0xDE32,0xDE23, + 0, 0, 0,0xDFD4,0xDFC8,0xDFBC, 0, 0,0xDFCD, 0, + 0, 0,0xDFBE, 0,0xDC40,0xDFD6, 0, 0,0xDFBD, 0, + 0xDFBA, 0,0xDFC0,0xDD9B,0xDD9D,0xDFC1,0xDDA6,0xDDA5,0xDDA8, 0, + 0, 0, 0,0xDE5F,0xDE70, + /* plane 4, row 21 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x86CA,0x8851,0xD85D,0xD85D, + 0x4622,0xD85D,0x4626,0x4624,0x4625,0x889D,0x462A,0x4674,0xD85E,0x4679, + 0x8990,0x467A,0xD85E,0xD85E,0x89D8,0x89D7,0x4697,0xD85E,0xD85E,0x8A2E, + 0xD85E,0x46BC,0xD85E,0x46B3,0xD85E,0x46BF,0x46B7,0xD87E,0xD85E,0xD85E, + 0xD85E,0xD85E,0x4734,0x4746,0x4748,0x8C59,0xD85F,0xD85F,0x4756,0x4767, + 0xD85F,0xD85F,0x4768,0x4799,0x479A,0xD85F,0xD85F,0x47D8,0xD85F,0x47DB, + 0x47DC,0x47DD,0x47D7,0xD85F,0xD860,0x4849,0x484A,0x8EDA,0xD860,0xD860, + 0x9033,0xD861,0x9018,0x489A,0xD861,0x48CD,0x48CA,0xD861,0x48CB,0xD861, + 0x48CF,0xD861,0xD87E,0x48CC,0x48EA,0x48ED,0xD861,0xD861,0x48E9,0xD862, + 0x491A,0x91EF,0x498D,0x49D2,0xD863, + 1, /* first low-surrogate */ + 0xDE6A,0xDE65,0xDE67,0xDE6F,0xDE87, 0, 0,0xDE3D,0xDE43, + 0,0xDE40, 0, 0, 0, 0, 0, 0,0xDC18, 0, + 0, 0,0xDC19,0xDCC1, 0, 0, 0,0xDCBC,0xDCC8, 0, + 0xDD71, 0,0xDD6E, 0,0xDD78, 0, 0,0xDDCD,0xDD7A,0xDFB1, + 0xDFAF,0xDFB0, 0, 0, 0, 0,0xDCA8,0xDCA6, 0, 0, + 0xDD48,0xDD45, 0, 0, 0,0xDEA0,0xDEA4, 0,0xDFD4, 0, + 0, 0, 0,0xDFD2,0xDE22, 0, 0, 0,0xDEB7,0xDECC, + 0,0xDCE6, 0, 0,0xDCC8, 0, 0,0xDEF4, 0,0xDEED, + 0,0xDE7E,0xDDE3, 0, 0, 0,0xDFF9,0xDFFD, 0,0xDC07, + 0, 0, 0, 0,0xDE78, + /* plane 4, row 22 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0x49F2,0xD864,0xD864,0xD864,0x4A3D,0xD864, + 0x4A3E,0x4AF8,0x4B23,0x9AD9,0x4EB4,0xD840,0x50A0,0x5090,0x3475,0x5086, + 0x5084,0xD840,0x508A,0x3476,0x3473,0x509F,0x50A1,0xD840,0x5093,0x34BD, + 0xD841,0x51D5,0xD841,0xD841,0x34F9,0xD841,0xD841,0x34FA,0xD841,0xD841, + 0xD841,0xD841,0xD841,0x3521,0xD87E,0x3529,0xD842,0xD842,0x3538,0x354E, + 0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0x35C8,0x35BC,0xD843,0xD843, + 0x5590,0xD843,0x35BB,0x35C2,0x35C0,0xD843,0xD843,0x35CA,0xD843,0x35C9, + 0xD843,0x35B8,0x5710,0x5817,0xD844,0x364E,0xD844,0x5844,0x3650,0x582B, + 0xD844,0x5845,0xD844,0xD844,0xD844,0xD844,0xD87E,0x368A,0xD845,0x5965, + 0xD845,0xD845,0xD845,0x36FC,0x36F9, + 1, /* first low-surrogate */ + 0xDE7A,0xDE79,0xDF8A, 0,0xDC7B,0xDDD5,0xDDE9, 0,0xDDEB, + 0, 0, 0, 0, 0,0xDD6C, 0, 0, 0, 0, + 0,0xDEFA, 0, 0, 0, 0, 0,0xDF18, 0, 0, + 0xDDF6, 0,0xDF8A,0xDF89, 0,0xDF7F,0xDF88, 0,0xDF83,0xDF84, + 0xDF98,0xDF63,0xDF87, 0,0xDC27, 0,0xDCF5,0xDD50, 0, 0, + 0xDE87,0xDE8A,0xDF65,0xDDB7,0xDDC1,0xDDC7, 0, 0,0xDDC5,0xDDCB, + 0,0xDDD1, 0, 0, 0,0xDDB8,0xDDCA, 0,0xDDDE, 0, + 0xDDCE, 0, 0, 0,0xDF68, 0,0xDF6B, 0, 0, 0, + 0xDF6A, 0,0xDF66,0xDF77,0xDF96,0xDF6E,0xDC56, 0,0xDE57, 0, + 0xDE56,0xDF9C,0xDF9E, + /* plane 4, row 23 */ + 1 | (94 << 8), /* first, last */ + 0xD845,0x3763,0xD846,0x5BCF,0xD846,0xD846,0xD846,0x3787,0x3788, + 0xD846,0x379A,0xD847,0xD847,0xD847,0x5D56,0xD847,0xD847,0x37E9,0xD847, + 0x37EA,0x5D54,0x3850,0xD848,0xD848,0x3856,0x3852,0x384F,0x3854,0x3851, + 0xD848,0xD848,0x388E,0x388F,0xD848,0xD848,0xD848,0x5F3D,0xD849,0xD849, + 0x38ED,0x38EB,0x5FA4,0xD849,0xD849,0xD849,0x3962,0xD849,0x395D,0xD849, + 0xD849,0xD849,0x3961,0x3965,0x395C,0xD849,0xD849,0x395F,0xD849,0xD849, + 0xD84A,0xD84A,0xD84A,0xD84A,0x63EC,0x3A16,0x3A0A,0xD84A,0x3A0E,0x3A12, + 0xD84A,0xD84A,0x3A11,0xD84A,0xD84A,0x3A10,0xD84B,0xD84A,0x3A09,0x63FA, + 0x3A15,0x63D4,0xD84B,0xD84B,0xD84B,0x3A91,0x3A95,0x3A93,0x3A92,0x3A8F, + 0xD84B,0xD84B,0xD84C,0xD84C,0x3AF6, + 1, /* first low-surrogate */ + 0xDFA1, 0,0xDE42, 0,0xDE46,0xDE3E,0xDF33, 0, 0, + 0xDFFA, 0,0xDC97,0xDC9B,0xDCAA, 0,0xDE73,0xDE7C, 0,0xDE86, + 0, 0, 0,0xDCF3,0xDCF0, 0, 0, 0, 0, 0, + 0xDCEC,0xDEAF, 0, 0,0xDE64,0xDE68,0xDF5A, 0,0xDD1F,0xDD25, + 0, 0, 0,0xDEC6,0xDED6,0xDEC3, 0,0xDF2C, 0,0xDF2E, + 0xDF5E,0xDF33, 0, 0, 0,0xDF2D,0xDF46, 0,0xDEC1,0xDF3A, + 0xDDCC,0xDF9D,0xDF83,0xDFF6, 0, 0, 0,0xDFF8, 0, 0, + 0xDFFE,0xDFF3, 0,0xDFEB,0xDFFA, 0,0xDC07,0xDFFC, 0, 0, + 0, 0,0xDF72,0xDF73,0xDF74, 0, 0, 0, 0, 0, + 0xDF5F,0xDF60,0xDCAA,0xDD34, + /* plane 4, row 24 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0x3AFB,0xD84C,0x6675,0x3AF9,0xD84C,0xD84C,0xD84C,0x671C, + 0x3B7D,0xD84D,0x3B7A,0x3B7F,0xD84D,0x3B78,0xD84D,0xD84D,0x68D9,0xD84D, + 0x3B70,0x3B82,0xD84D,0x3B84,0xD84D,0x3C33,0xD84E,0x3C32,0x3C36,0xD84E, + 0xD84E,0x3C56,0xD84E,0xD84E,0x3C67,0xD84E,0x3C65,0x3C64,0x3C66,0xD84E, + 0xD84E,0x3C81,0x3C82,0x3C83,0x3C9E,0xD84E,0x6BF1,0x3C9D,0xD84E,0x3D0F, + 0x3D12,0xD84F,0xD84F,0xD84F,0x3D10,0x3D18,0xD84F,0x3D14,0x3D19,0x6E37, + 0xffff,0xD84F,0x6E7D,0x6E86,0x3DC8,0x3DC4,0x3DC6,0xD850,0x3DC7,0x3DC3, + 0xD850,0xD850,0xD87E,0xD850,0xD851,0x3E19,0x3E1C,0xD851,0xD851,0xD851, + 0x3E41,0xD851,0x3E42,0x3E43,0xD851,0xD851,0xD851,0x3E82,0xD851,0x3E81, + 0x3E94,0x3E84,0xD852,0x3ED2,0x3F0F, + 1, /* first low-surrogate */ + 0xDDB4, 0,0xDDF0, 0, 0,0xDE0D,0xDDF3,0xDE0F, 0, + 0,0xDCC9, 0, 0,0xDCC5, 0,0xDCD7,0xDCCC, 0,0xDCE7, + 0, 0,0xDCC1, 0,0xDCE8, 0,0xDCCB, 0, 0,0xDCC8, + 0xDD7A, 0,0xDD79,0xDD7E, 0,0xDE1B, 0, 0, 0,0xDE1F, + 0xDE19, 0, 0, 0, 0,0xDF89, 0, 0,0xDF8B, 0, + 0,0xDE09,0xDDFE,0xDE00, 0, 0,0xDE0B, 0, 0, 0, + 0,0xDE4A, 0, 0, 0, 0, 0,0xDE79, 0, 0, + 0xDE6C,0xDE99,0xDD1B,0xDE62,0xDD14, 0, 0,0xDDC8,0xDDD7,0xDE0C, + 0,0xDE70, 0, 0,0xDE71,0xDFDF,0xDFE4, 0,0xDFE7, 0, + 0, 0,0xDD90, + /* plane 4, row 25 */ + 1 | (94 << 8), /* first, last */ + 0x3F22,0xD852,0x3F27,0x3F2A,0x74FA,0x3F28,0xD852,0x3F60,0xD853, + 0xD853,0xD853,0x7572,0xD853,0xD853,0x3F9B,0x3F9C,0xD853,0x3F93,0x3F94, + 0x75DC,0x3FA0,0x3F99,0xD853,0x3FA1,0xD853,0x3FF1,0xD853,0xD853,0xD854, + 0xD854,0x4036,0xD854,0x4037,0x403F,0x403C,0xD854,0x4034,0x4039,0x403B, + 0x4035,0x4030,0x4032,0x4038,0x403E,0x403A,0xD854,0xD854,0xD854,0xD854, + 0xD854,0x40B6,0x7867,0xD855,0xD855,0xD855,0x40B3,0x4109,0x7977,0xD855, + 0xD855,0xD855,0x414C,0xD855,0xD855,0x4153,0x414D,0x4151,0x414F,0x7A9B, + 0xD856,0x41A2,0xD856,0xD856,0x41CD,0xD856,0xD856,0x41E7,0xD856,0x41F0, + 0xD856,0x41E9,0x41EC,0xD856,0x41E8,0x41EE,0x4202,0xD856,0xD856,0xD856, + 0xD857,0x4282,0x4283,0x4286,0xD857, + 2, /* first low-surrogate */ + 0xDF4C, 0, 0, 0, 0,0xDF4F, 0,0xDC7D, + 0xDC7E,0xDC7C, 0,0xDC8D,0xDD19, 0, 0,0xDDC0, 0, 0, + 0, 0, 0,0xDDB6, 0,0xDDA8, 0,0xDFEB,0xDFE7,0xDC6F, + 0xDDC7, 0,0xDD9F, 0, 0, 0,0xDDC4, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xDD9B,0xDD97,0xDDC5,0xDF6B, + 0xDFCE, 0, 0,0xDCB1,0xDCAE,0xDCB0, 0, 0, 0,0xDF3E, + 0xDFB5,0xDFBA, 0,0xDFB2,0xDFB4, 0, 0, 0, 0, 0, + 0xDD77, 0,0xDD86,0xDD7B, 0,0xDE7E,0xDF2E, 0,0xDF2F, 0, + 0xDF37, 0, 0,0xDF32, 0, 0, 0,0xDF36,0xDF39,0xDF35, + 0xDE5C, 0, 0, 0,0xDE7B, + /* plane 4, row 26 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0xD857,0xD857,0xD857,0xD858,0x7D2A,0x7D65,0x434A,0xD858, + 0x435A,0x7F64,0xD858,0x436E,0xD858,0xD858,0x4370,0x436F,0xD859,0x438A, + 0x4387,0x4388,0xD859,0xD859,0x8020,0x43B7,0x43FD,0x8120,0xD859,0x4405, + 0x813C,0x4408,0x4403,0x4402,0x4404,0x3B39,0x4409,0x43FF,0xD859,0x813F, + 0xD859,0x43FC,0x4401,0x440A,0x81F0,0x81F5,0x446B,0x446C,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85B,0xD85B,0x44DE,0xD85B,0xD85B,0x44DB,0xD85B,0x44DD, + 0x44E3,0xD85B,0x44E0,0x44D9,0x44D8,0x44E4,0xD85B,0xD85B,0x44DA,0x44EF, + 0xD87E,0x8415,0x83BE,0xD85B,0xD85B,0xD85B,0x44D7,0x45B3,0x45BB,0x86E5, + 0x45B2,0x86D2,0x45AD,0xD85C,0x45AF,0xD87E,0x86E0,0xD85C,0x4616,0x4628, + 0x4623,0x88B3,0xD85D,0xD85D,0xD85D, + 1, /* first low-surrogate */ + 0xDE61,0xDFEE,0xDFEB,0xDFEF,0xDC20, 0, 0, 0,0xDE30, + 0, 0,0xDEBE, 0,0xDF67,0xDF7C, 0, 0,0xDC24, 0, + 0, 0,0xDC29,0xDCEF, 0, 0, 0, 0,0xDF0D, 0, + 0, 0, 0, 0, 0, 0, 0, 0,0xDF64, 0, + 0xDF15, 0, 0, 0, 0, 0, 0, 0,0xDE35,0xDE36, + 0xDE34,0xDE37,0xDC47,0xDC2B, 0,0xDC41,0xDC43, 0,0xDC42, 0, + 0,0xDC32, 0, 0, 0, 0,0xDC44,0xDC4A, 0, 0, + 0xDDA0, 0, 0,0xDC54,0xDC6E,0xDC52, 0, 0, 0, 0, + 0, 0, 0,0xDE92, 0,0xDDB8, 0,0xDEBF, 0, 0, + 0, 0,0xDE41,0xDE69,0xDE65, + /* plane 4, row 27 */ + 1 | (94 << 8), /* first, last */ + 0x4675,0x467E,0x467C,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46CE, + 0x46CD,0x46CF,0x8A53,0xD85E,0xD85E,0x8A37,0x8A47,0x8A5C,0xD85E,0x46C4, + 0x46CC,0x46C8,0x46C7,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F, + 0x475A,0x476A,0xD85F,0x476B,0x476D,0x476F,0xD85F,0x479E,0xD85F,0x47A4, + 0x47A3,0x47E4,0x47E8,0x47E9,0x47E0,0x47E3,0xD85F,0x47EA,0x47E1,0x47ED, + 0x4834,0x4835,0x4851,0x8EF0,0xD861,0x489D,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0x48D0,0xD861,0x48EE,0xD862,0xD862,0xD862,0x48F2,0xD862, + 0x921D,0x4988,0xD863,0xD863,0xD863,0x498F,0xD863,0x49D8,0xD863,0xD863, + 0xD863,0xD863,0xD864,0xD864,0x4A3F,0xD864,0x4A52,0x976B,0xD864,0x4A50, + 0xD865,0x4AB1,0xD865,0xD865,0x4AF9, + 4, /* first low-surrogate */ + 0xDC22,0xDC1D,0xDCD2,0xDCDA,0xDCDB, 0, + 0, 0, 0,0xDDA4,0xDD9E, 0, 0, 0,0xDD9D, 0, + 0, 0, 0,0xDDAD,0xDDA6,0xDDA7,0xDFB3,0xDFE0,0xDC35,0xDC37, + 0, 0,0xDD4A, 0, 0, 0,0xDE5E, 0,0xDEC0, 0, + 0, 0, 0, 0, 0, 0,0xDFF9, 0, 0, 0, + 0, 0, 0, 0,0xDCF0, 0,0xDCF3,0xDD1B,0xDCF2,0xDCFB, + 0xDF1C,0xDF13, 0,0xDF0F, 0,0xDC16,0xDC11,0xDC12, 0,0xDC0E, + 0, 0,0xDC67,0xDCF2,0xDCDA, 0,0xDCDC, 0,0xDF94,0xDF9B, + 0xDF92,0xDF9A,0xDC88,0xDC86, 0,0xDDEF, 0, 0,0xDE5E, 0, + 0xDC58, 0,0xDC56,0xDC54, + /* plane 4, row 28 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0x4B26,0x4B28,0xD865,0xD866,0x3480,0x50C0, + 0x3481,0xD840,0x347E,0x347F,0xD840,0xD840,0xD87E,0xD841,0x34BE,0xD841, + 0x34D6,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0x52E5,0xD842, + 0x3534,0xD842,0x53AF,0xD842,0xD842,0xD842,0xD843,0xD843,0x35D5,0x35D8, + 0xD843,0xD843,0x35D4,0x55D8,0x35D9,0xD843,0xD843,0xD843,0xD87E,0xD843, + 0x5711,0x5867,0xD844,0xD844,0x365D,0x5843,0x365E,0x3659,0xD844,0x365A, + 0x36A0,0xD845,0xD845,0x3705,0xD845,0x3707,0xD845,0x370E,0x370C,0xD845, + 0xD846,0x3745,0xD846,0xD846,0x3764,0xD846,0x3765,0xD846,0x5BDD,0x3766, + 0xD846,0x3789,0x37EC,0x37F1,0x5D70,0x5D6A,0x37F0,0x37F8,0x5D74,0x5D5F, + 0xD847,0x5D61,0x5D73,0xD847,0x37F2, + 1, /* first low-surrogate */ + 0xDD9B,0xDE96,0xDEA4, 0, 0,0xDE9A,0xDE12, 0, 0, + 0,0xDF6B, 0, 0,0xDF37,0xDF3C,0xDC0A,0xDCF7, 0,0xDD66, + 0,0xDFA9,0xDFAE,0xDFAD,0xDFC8,0xDFA5,0xDFB0,0xDC95, 0,0xDD25, + 0,0xDE99, 0,0xDF74,0xDF70,0xDF6F,0xDE41,0xDE54, 0, 0, + 0xDE40,0xDE38, 0, 0, 0,0xDE52,0xDE3A,0xDE57,0xDC4A,0xDE59, + 0, 0,0xDFB4,0xDFC0, 0, 0, 0, 0,0xDF75, 0, + 0,0xDE60,0xDE47, 0,0xDFF0, 0,0xDFEF, 0, 0,0xDFEC, + 0xDD83, 0,0xDD84,0xDD8F, 0,0xDE61, 0,0xDE69, 0, 0, + 0xDE62, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xDEAE, 0, 0,0xDEB2, + /* plane 4, row 29 */ + 1 | (94 << 8), /* first, last */ + 0x37F4,0xD848,0x3858,0xD848,0xD848,0x385A,0x3859,0x3857,0x385B, + 0x5E50,0xD848,0xD848,0x38A6,0x38C2,0x38C1,0x5F3F,0xD849,0xD849,0x38EF, + 0x5FB0,0xD849,0xD849,0x3968,0x6135,0x612D,0x3973,0x396E,0x3974,0x6102, + 0x3966,0xD849,0xD849,0xD84A,0x39B9,0x6226,0xD84A,0x3A0C,0xD84B,0xD84B, + 0x3A20,0xD84B,0x3A1D,0xD84B,0x3A1C,0xD84B,0x3A21,0x3A1A,0x3A19,0xD84A, + 0xD84B,0xD84B,0x3A7E,0xD84B,0xD84B,0xD84B,0xD84B,0x3A9D,0xD84B,0x3A9E, + 0x3A9C,0x656E,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x65B1,0x65D4,0x3ACD, + 0xD84C,0x3B0B,0x3B0A,0x6685,0xD84D,0x3B8F,0x6972,0x3B95,0x3B90,0x3B91, + 0xD84D,0x693A,0x3BB9,0xD84D,0xD84D,0x3B97,0x3B9E,0xD84D,0x3B8B,0xD84D, + 0xD84D,0x3C3B,0x3C3A,0x3C3C,0x3C3D, + 2, /* first low-surrogate */ + 0xDD0B, 0,0xDD10,0xDD0D, 0, 0, 0, 0, + 0,0xDE7F,0xDE81, 0, 0, 0, 0,0xDC0B,0xDD4E, 0, + 0,0xDFEA,0xDF45, 0, 0, 0, 0, 0, 0, 0, + 0,0xDF28,0xDF5D,0xDDDC, 0, 0,0xDDD4, 0,0xDC64,0xDC68, + 0,0xDC62, 0,0xDC61, 0,0xDC66, 0, 0, 0,0xDFF2, + 0xDC69,0xDC67, 0,0xDF9A,0xDF9B,0xDF85,0xDF9C, 0,0xDFA4, 0, + 0, 0,0xDF99,0xDF86,0xDF90,0xDC81,0xDCAE, 0, 0, 0, + 0xDD38, 0, 0, 0,0xDD3B, 0, 0, 0, 0, 0, + 0xDD4C, 0, 0,0xDD47,0xDD35, 0, 0,0xDD33, 0,0xDD82, + 0xDD40, + /* plane 4, row 30 */ + 1 | (94 << 8), /* first, last */ + 0x3C39,0x3C3E,0x3C6B,0x3C6C,0xD84E,0xD84E,0x3CA2,0x3CA1,0x3C9F, + 0xD84E,0xD84E,0xD84F,0x3D2D,0xD84F,0x3D36,0x3D2B,0xD84F,0x3D37,0xD87E, + 0xD84F,0xD84F,0x6EAD,0x3D25,0x3D2F,0x3D2C,0xD84F,0xD84F,0x3D32,0xD84F, + 0xD84F,0x6E95,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0x3DD5,0xD850, + 0x3DD4,0x3DD6,0xD850,0x3DD1,0x7243,0xD851,0x3E46,0x728F,0xD851,0xD851, + 0x3E8C,0x3E8A,0x3E88,0xD852,0xD852,0xD851,0xD852,0x3EDD,0xD852,0xD852, + 0xD852,0x3F2D,0xD852,0xD852,0x3F2E,0x3F2C,0x3F2B,0x3F30,0xD852,0x3F4E, + 0xD853,0xD853,0x3F64,0x3F61,0xD853,0x7575,0xD87E,0x3F70,0x3FA6,0x3FA4, + 0xD853,0xD853,0xD853,0x3FA8,0x3FA2,0xD853,0x3FA7,0x75EC,0x3FA5,0xD853, + 0x3FA9,0xD853,0xD853,0xD853,0xD853, + 5, /* first low-surrogate */ + 0xDE36,0xDF0E, 0, 0, 0, + 0xDFAD,0xDFAA,0xDE17, 0,0xDE67, 0, 0,0xDE72, 0,0xDD0A, + 0xDE61,0xDEB0, 0, 0, 0, 0,0xDE6E,0xDE64, 0,0xDE8C, + 0xDE66, 0,0xDE6B,0xDE5F,0xDE74,0xDE65,0xDEBB,0xDEBE, 0,0xDEB9, + 0, 0,0xDEEF, 0, 0,0xDDDA, 0, 0,0xDE90,0xDFE9, + 0, 0, 0,0xDC11,0xDC0D,0xDFED,0xDC21, 0,0xDD81,0xDDB1, + 0xDF01, 0,0xDF5E,0xDF62, 0, 0, 0, 0,0xDF5B, 0, + 0xDC96,0xDC93, 0, 0,0xDC92, 0,0xDD39, 0, 0, 0, + 0xDDC4,0xDDC7,0xDDC3, 0, 0,0xDDC8, 0, 0, 0,0xDDCA, + 0,0xDDC5,0xDDCF,0xDDDC,0xDF7C, + /* plane 4, row 31 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0x403D,0xD854,0xD854,0x4044,0x4045,0x4046,0xD854,0x7757, + 0xD854,0x4047,0x4048,0x4042,0xD854,0xD854,0x4041,0xD854,0xD854,0x4094, + 0xD854,0xD854,0xD854,0xD855,0x40C0,0x40B8,0x40C1,0x40C2,0x40BB,0x40BD, + 0x40BF,0x40B9,0x40B7,0xD855,0x40C7,0xD855,0x410C,0x410B,0x797B,0x4110, + 0xD855,0x415D,0x7A21,0x415A,0x4158,0x4156,0xD855,0x4154,0x7A16,0xD855, + 0x41A8,0x41A7,0x41CF,0x41D0,0xD856,0x7AE8,0xD856,0xD856,0x41D1,0x41EB, + 0xD856,0x41FB,0x7B6A,0xD856,0x41FD,0x41F8,0x41F7,0x4200,0xD856,0xD856, + 0x41F6,0x7B5F,0xD857,0xD858,0x42DF,0xD858,0xD858,0xD858,0x42E2,0x42E4, + 0xD858,0x7D82,0xD858,0x42E3,0xD858,0x4359,0x4371,0x438E,0x438C,0xD859, + 0x43A4,0xD859,0x8055,0x4414,0xD859, + 1, /* first low-surrogate */ + 0xDC01, 0,0xDDD3,0xDDDC, 0, 0, 0,0xDDD4, 0, + 0xDDCC, 0, 0, 0,0xDDD6,0xDDDB, 0,0xDDD5,0xDFD9, 0, + 0xDFDD,0xDFDC,0xDFE0,0xDCCC, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xDCD2, 0,0xDCD3, 0, 0, 0, 0, + 0xDE8D, 0, 0, 0, 0, 0,0xDFD8, 0, 0,0xDFBC, + 0, 0, 0, 0,0xDE8A, 0,0xDE8B,0xDE8D, 0, 0, + 0xDF53, 0, 0,0xDF59, 0, 0, 0, 0,0xDF56,0xDF57, + 0, 0,0xDE73,0xDC1B, 0,0xDC21,0xDC16,0xDC18, 0, 0, + 0xDC44, 0,0xDC26, 0,0xDE36, 0, 0, 0, 0,0xDC3A, + 0,0xDCF4, 0, 0,0xDF62, + /* plane 4, row 32 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0x4411,0xD859,0x441B,0x4412,0x440E,0x4415,0x8168, + 0x4410,0xD859,0x4417,0x8246,0x8243,0x4470,0x44ED,0xD85B,0x44EE,0xD85B, + 0xD85B,0xD85B,0x8481,0xD85B,0xD85B,0xD85B,0x44F4,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0x847C,0xD85B,0xD85B,0x846A,0xD85B,0x8488,0x44F2, + 0x44F8,0x44F3,0xD85B,0xD85B,0x44FA,0xD85B,0xD85B,0xD87E,0xD85C,0xD85C, + 0x8710,0xD85C,0xD85C,0x871F,0x45B6,0x45B7,0xD85C,0x870F,0xD85C,0x45BA, + 0xD85C,0x45BC,0xD85C,0xD85D,0x463B,0x88D3,0x462F,0xD85D,0xD85D,0xD85D, + 0x4637,0x4699,0xD85E,0xD85E,0xD85E,0xD85E,0x46D9,0x46D8,0x46D7,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0x4736,0xD85E,0xD85F,0xD85F,0x8C87,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0x8CC6, + 1, /* first low-surrogate */ + 0xDF5B,0xDF6A, 0,0xDF68, 0, 0, 0, 0, 0, + 0,0xDF81, 0, 0, 0, 0, 0,0xDCE7, 0,0xDCE6, + 0xDCD1,0xDD11, 0,0xDCD0,0xDCD9,0xDD0A, 0,0xDCDA,0xDCDD,0xDCC8, + 0xDCE2,0xDCE9,0xDCCB, 0,0xDCCC,0xDCC1, 0,0xDCDE, 0, 0, + 0, 0,0xDD51,0xDD12, 0,0xDCE0,0xDD2B,0xDDB4,0xDED8,0xDED1, + 0,0xDED2,0xDECD, 0, 0, 0,0xDF3D, 0,0xDECA, 0, + 0xDECB, 0,0xDED7,0xDDF4, 0, 0, 0,0xDE87,0xDE8B,0xDE83, + 0, 0,0xDDC5,0xDDD2,0xDDC6,0xDDD3, 0, 0, 0,0xDDF0, + 0xDDCD,0xDDCC,0xDDDC,0xDDD6, 0,0xDFE6,0xDC41,0xDC3F, 0,0xDCC5, + 0xDCC0,0xDCC6,0xDCBE,0xDCBF, + /* plane 4, row 33 */ + 1 | (94 << 8), /* first, last */ + 0x4770,0xD85F,0xD85F,0xD85F,0xD85F,0x47A5,0x47A6,0x47A9,0x47EE, + 0x4854,0xD860,0x4857,0xD860,0xD861,0x48A1,0xD861,0xD861,0xD861,0xD861, + 0x48D3,0xD861,0x48D4,0xD861,0x48D7,0x90CC,0x916D,0x9170,0x48F7,0x48F6, + 0x48F9,0x48F8,0x9258,0x9242,0x9268,0x9269,0xD862,0xD862,0x9243,0xD862, + 0x9247,0x498A,0xD863,0xD863,0xD863,0xD863,0x4994,0xD863,0x4993,0xD863, + 0xD863,0x959D,0x49DD,0x49DC,0x49F7,0x96CF,0xD864,0xD864,0x4A42,0xD864, + 0xD864,0x4A54,0xD864,0x4A55,0xD864,0x4A8F,0xD864,0x97F4,0x4AB4,0x4AB3, + 0xD865,0xD865,0x9809,0xD865,0xD865,0xD865,0xD865,0x4AFB,0x4AFD,0xD865, + 0xD865,0x98AB,0x4AFC,0xD865,0x4B2C,0x4B2F,0xD865,0x4B2B,0xD865,0x4B33, + 0x4B34,0x98FB,0xD866,0x9AAC,0x9AAE, + 2, /* first low-surrogate */ + 0xDD63,0xDED3,0xDEDA,0xDED5, 0, 0, 0, 0, + 0,0xDEEE, 0,0xDEFC,0xDC14, 0,0xDD23,0xDD22,0xDD30,0xDEB5, + 0,0xDF38, 0,0xDF3F, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,0xDD68,0xDD67, 0,0xDD65, + 0, 0,0xDC75,0xDCF7,0xDCF3,0xDCF6, 0,0xDD00, 0,0xDCFF, + 0xDCF5, 0, 0, 0, 0, 0,0xDC92,0xDE06, 0,0xDE07, + 0xDE6B, 0,0xDE6C, 0,0xDF93, 0,0xDF94, 0, 0, 0, + 0xDC62,0xDC63, 0,0xDC5F,0xDC64,0xDC5B,0xDC59, 0, 0,0xDDA4, + 0xDDAC, 0, 0,0xDEB5, 0, 0,0xDEAE, 0,0xDEC5, 0, + 0, 0,0xDC3B, + /* plane 4, row 34 */ + 1 | (94 << 8), /* first, last */ + 0x9AAA,0x4BE8,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0x9B5C, + 0xD867,0xD867,0x4D5D,0x50D2,0x3485,0x3488,0xD840,0xD840,0x348E,0x3484, + 0xD840,0x50DF,0xD840,0x3483,0xD840,0xD840,0xD841,0xD841,0x3502,0xD841, + 0x3506,0x3505,0xD841,0x34FE,0x3501,0x3500,0xD841,0xD842,0xD842,0xD842, + 0xD842,0xD842,0x35E7,0x5619,0xD843,0xD843,0xD843,0x35E6,0xD843,0x35ED, + 0x35E2,0x35EB,0xD843,0x35E8,0x35EC,0x560A,0x3624,0x589A,0xD845,0x3662, + 0xD844,0x3661,0x3660,0x3664,0x368B,0xD845,0xD845,0xD845,0xD845,0xD846, + 0x3719,0x3716,0x3718,0x3722,0xD846,0x371D,0x3717,0x371E,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0x3769,0x376A,0xD846,0x376C,0x377A,0x378A, + 0xD847,0xD847,0xD847,0x379C,0xD847, + 3, /* first low-surrogate */ + 0xDEBF,0xDC2B,0xDC84,0xDC80,0xDD4D,0xDD4F, 0, + 0xDD4C,0xDF92, 0, 0, 0, 0,0xDFAE,0xDF79, 0, 0, + 0xDF71, 0,0xDFB3, 0,0xDF2C,0xDF77,0xDD2F,0xDFC3, 0,0xDFCD, + 0, 0,0xDFC9, 0, 0, 0,0xDFCE,0xDCA5,0xDCA0,0xDCFE, + 0xDD59,0xDE9A, 0, 0,0xDEE4,0xDED7,0xDEDC, 0,0xDEE7, 0, + 0, 0,0xDEE5, 0, 0, 0, 0, 0,0xDC14, 0, + 0xDFF1, 0, 0, 0, 0,0xDDB6,0xDE6E,0xDE6C,0xDE81,0xDC42, + 0, 0, 0, 0,0xDC1A, 0, 0, 0,0xDC27,0xDC25, + 0xDC17,0xDC1C,0xDC3D,0xDC20, 0, 0,0xDE81, 0, 0, 0, + 0xDC09,0xDCC6,0xDCC4, 0,0xDCC5, + /* plane 4, row 35 */ + 1 | (94 << 8), /* first, last */ + 0x37FD,0x37F9,0xD847,0x37FF,0xD847,0xD847,0xD847,0xD847,0xD847, + 0x37FC,0xD847,0x5D85,0x37FB,0x3802,0x385F,0x5E56,0x385E,0x385D,0x385C, + 0xD848,0x5E51,0x3892,0xD848,0xD848,0x3894,0x3895,0x38D1,0xD849,0x38F1, + 0xD849,0x5FB1,0xD849,0xD849,0x3977,0x396F,0xD849,0xD849,0x3987,0x397D, + 0x397C,0x397E,0x3985,0x398B,0x3986,0x3980,0xffff,0xD849,0x3978,0xD87E, + 0xD84A,0xD84A,0x39BA,0xD84A,0x3A33,0xD84B,0x3A2D,0xD84B,0xD84B,0xD84B, + 0x3A37,0x645A,0x6463,0xD84B,0xD84B,0x3A2E,0xD84B,0xD84B,0x3A3D,0xD84B, + 0x3AA0,0xD84B,0xD84B,0x3AA3,0xD84C,0x669B,0xD84C,0x66A3,0x3B0E,0x669E, + 0xD84C,0x3BB6,0xD84D,0x3BAB,0x3BAD,0x3BA6,0xD84D,0x69B8,0x3BAA,0x69BA, + 0x3BB1,0xD84D,0x3BA8,0x3BAF,0x3BB0, + 3, /* first low-surrogate */ + 0xDEEF, 0,0xDEDF,0xDEDE,0xDEEE,0xDEF5,0xDEEC, + 0,0xDEDD, 0, 0, 0, 0, 0, 0, 0, 0, + 0xDD22, 0, 0,0xDE97,0xDE95, 0, 0, 0,0xDCA9, 0, + 0xDD53, 0,0xDD56,0xDD55, 0, 0,0xDFE3,0xDFE2, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDFA9, 0,0xDCAB, + 0xDC33,0xDC0A, 0,0xDE59, 0,0xDCBC, 0,0xDCC4,0xDCC7,0xDCC6, + 0, 0, 0,0xDCB8,0xDCDA, 0,0xDCB7,0xDCC0, 0,0xDCCD, + 0,0xDFBC,0xDFAB, 0,0xDC86, 0,0xDE5A, 0, 0, 0, + 0xDF43, 0,0xDDAC, 0, 0, 0,0xDDBE, 0, 0, 0, + 0,0xDDAB, + /* plane 4, row 36 */ + 1 | (94 << 8), /* first, last */ + 0x3BA7,0x3BB2,0x3B9D,0x3BA5,0x3BB5,0xD846,0x69C7,0x69D7,0xD84E, + 0x3C41,0xD84E,0xD84E,0x6B70,0xD84E,0xD84E,0x3C72,0x6B9D,0x3C6F,0x3C71, + 0xD84E,0x3C85,0xD84E,0xD84E,0x3CA4,0x3CA5,0x3CA6,0xD84E,0x3CA8,0xD84E, + 0xD84E,0x3CA3,0xD84F,0xD84F,0xD84F,0x6F16,0x6F24,0xD84F,0x3D43,0xD84F, + 0xD84F,0x3D3D,0x3D45,0xD84F,0xD84F,0x3D44,0xD84F,0xD84F,0xD84F,0xD84F, + 0x6F45,0xD84F,0xD84F,0xD850,0x3DE3,0x7179,0xffff,0x3DDF,0x3DE4,0x717A, + 0x3DE5,0xD850,0x7254,0x3E22,0x3E4A,0xD851,0x3E49,0x3E44,0x3E4B,0x3E87, + 0x3E89,0x3E92,0x3E91,0x3E90,0x3E8E,0xD852,0xD852,0xD852,0xD87E,0x3F12, + 0x3F10,0x3F11,0xD852,0x3F32,0x3F34,0x3F37,0x3F33,0x3F36,0x3F35,0x3F65, + 0xD853,0x757C,0x757B,0xD853,0x7612, + 6, /* first low-surrogate */ + 0xDF3E, 0, 0,0xDCF9, + 0,0xDCF3,0xDCF7, 0,0xDE45,0xDE48, 0, 0, 0, 0, + 0xDE44, 0,0xDEAF,0xDEB1, 0, 0, 0,0xDFCF, 0,0xDFCB, + 0xDFCD, 0,0xDC50,0xDEEC,0xDF1A, 0, 0,0xDED8, 0,0xDED0, + 0xDED1, 0, 0,0xDE7B,0xDED2, 0,0xDED4,0xDEE7,0xDEDF,0xDEDE, + 0,0xDED9,0xDECF,0xDF0D, 0, 0, 0, 0, 0, 0, + 0,0xDF38, 0, 0, 0,0xDEA9, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xDC3E,0xDC46,0xDDED,0xDD30, 0, + 0, 0,0xDF6C, 0, 0, 0, 0, 0, 0, 0, + 0xDCAC, 0, 0,0xDDC9, + /* plane 4, row 37 */ + 1 | (94 << 8), /* first, last */ + 0x3FB0,0xD853,0x3FAF,0x3FAA,0xD853,0xD853,0xD853,0x3FAB,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3FF3,0xD854,0x3FF4,0xD854, + 0x76B6,0x76E0,0x4008,0x404E,0x4055,0x404B,0xD854,0xD854,0x404D,0x7773, + 0xD854,0x4052,0x7772,0x404C,0x7770,0x4050,0x4053,0xD854,0x4051,0xD854, + 0xD854,0xD854,0x4089,0xD854,0x4095,0x40CC,0x40C8,0x40CE,0xD855,0x40CA, + 0xD855,0x789D,0xD855,0x40CD,0xD855,0x415C,0x4167,0x4169,0x4165,0x4162, + 0xD856,0x7A27,0x7A35,0xD87E,0x41AA,0xD856,0xD856,0x41D2,0x7BA2,0x4203, + 0x420C,0xD856,0x4209,0x4206,0x4205,0x7B89,0xD856,0x420B,0x4208,0xD856, + 0x7BA5,0xD856,0x428E,0xD857,0x7CB6,0x42E8,0xD858,0xD858,0xD858,0x42EA, + 0xD858,0x7DA5,0x7DC3,0xD858,0x42E9, + 2, /* first low-surrogate */ + 0xDE12, 0, 0,0xDDFD,0xDE01,0xDE11, 0,0xDE89, + 0xDE05,0xDDFE,0xDE0B,0xDE20,0xDE04,0xDF88, 0,0xDC02, 0,0xDC03, + 0, 0, 0, 0, 0, 0,0xDE29,0xDE3B, 0, 0, + 0xDE06, 0, 0, 0, 0, 0, 0,0xDE03, 0,0xDF78, + 0xDF79,0xDF7D, 0,0xDF7F, 0, 0, 0, 0,0xDD32, 0, + 0xDD00, 0,0xDD22, 0,0xDEA9, 0, 0, 0, 0, 0, + 0xDC04, 0, 0,0xDD59, 0,0xDDB8,0xDE9B, 0, 0, 0, + 0,0xDF92, 0, 0, 0, 0,0xDF8F, 0, 0,0xDF98, + 0,0xDFAE, 0,0xDE9D, 0, 0,0xDC49,0xDC50,0xDC46, 0, + 0xDC4E, 0, 0,0xDC55, + /* plane 4, row 38 */ + 1 | (94 << 8), /* first, last */ + 0x42EB,0xD858,0x42F0,0xD858,0x434B,0x7FAB,0x4373,0x4375,0x4392, + 0x4391,0x4393,0x8025,0x43A7,0x43A6,0x43A8,0x43AA,0xD859,0x43A9,0x8059, + 0x43BB,0x43BC,0x43BA,0x43BD,0x4427,0x8185,0xD859,0x4424,0x441E,0x441F, + 0x441D,0x4420,0x4423,0x4429,0x4422,0xD859,0xD859,0x441C,0x818E,0x4428, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0x4471,0x4473,0x4472, + 0xD85A,0x4502,0xD85B,0xD85B,0xD85B,0x44FE,0x84BE,0xD85B,0xD85B,0xD85B, + 0x4508,0xD85B,0xD85B,0xD85B,0x4507,0x4504,0xD85B,0xD85B,0x4500,0x44FC, + 0xD85B,0x4544,0xD85B,0x44F1,0xD85B,0xD85B,0x84A6,0x4506,0xD85C,0xD85C, + 0x45C6,0x45C3,0x45C1,0x45C2,0xD85C,0x45C4,0x45C7,0xD85C,0x45BF,0x45D2, + 0xD85C,0x45CA,0xD87E,0xD85C,0x872F, + 2, /* first low-surrogate */ + 0xDC64, 0,0xDE38, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,0xDCFE, 0, 0, + 0, 0, 0, 0, 0, 0,0xDFA6, 0, 0, 0, + 0, 0, 0, 0, 0,0xDF9C,0xDF99, 0, 0, 0, + 0xDFB5,0xDFA3,0xDFA0,0xDFA7,0xDF9B,0xDDDF,0xDDE1, 0, 0, 0, + 0xDE4D, 0,0xDDF3,0xDD6F,0xDD69, 0, 0,0xDD6B,0xDD78,0xDD87, + 0,0xDD85,0xDD82,0xDD90, 0, 0,0xDD80,0xDD67, 0, 0, + 0xDD61, 0,0xDD93, 0,0xDDF2,0xDD86, 0, 0,0xDDCD,0xDDC4, + 0, 0, 0, 0,0xDF0F, 0, 0,0xDF0D, 0, 0, + 0xDF73, 0,0xDDBA,0xDF0A, + /* plane 4, row 39 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0x4613,0xD85D,0x4630,0x463E,0x4639,0xD85D,0xD85D, + 0x463C,0x463F,0xD85D,0x4634,0x463D,0xD85D,0xD85D,0x4638,0xD85D,0xD85D, + 0xD85D,0x89A0,0x4682,0xD85E,0x4683,0xD85E,0x469B,0xD85E,0x46E0,0x46DD, + 0xD85E,0xD85E,0x46DE,0xD85E,0x46E3,0x46E5,0xD85E,0x8A97,0x46E2,0xD85E, + 0xD85E,0xD85E,0x46DF,0xD85E,0x472E,0xD85E,0x4737,0x4738,0xD85E,0xD85E, + 0xD85F,0xD85F,0x8C8B,0xD85F,0x3562,0xD85F,0x4794,0x4793,0x47AB,0x47AD, + 0xD85F,0xD85F,0x47F5,0x47F7,0xD860,0x47F6,0x47F8,0xD860,0x47FB,0x47F9, + 0x4858,0x485A,0xD860,0x4859,0x8F0F,0x4885,0x48A4,0x48D8,0x48D9,0xD861, + 0x48DD,0x48C8,0xD861,0x48FA,0x48FB,0x9275,0x4927,0x929F,0x492A,0x4925, + 0xD862,0x4928,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDF08,0xDF13, 0,0xDDF8, 0, 0, 0,0xDEAB,0xDEA8, + 0, 0,0xDEA5, 0, 0,0xDEC3,0xDEA4, 0,0xDED4,0xDEBA, + 0xDFF1, 0, 0,0xDC3F, 0,0xDCEA, 0,0xDDF7, 0, 0, + 0xDDFA,0xDDF5, 0,0xDDFE, 0, 0,0xDE00, 0, 0,0xDE02, + 0xDDFB,0xDE07, 0,0xDE1A, 0,0xDFB8, 0, 0,0xDFE9,0xDFEB, + 0xDC50,0xDC4F, 0,0xDD86, 0,0xDD8E, 0, 0, 0, 0, + 0xDEF0,0xDEFB, 0, 0,0xDC42, 0, 0,0xDC85, 0, 0, + 0, 0,0xDF05, 0, 0, 0, 0, 0, 0,0xDF4B, + 0, 0,0xDF63, 0, 0, 0, 0, 0, 0, 0, + 0xDD99, 0,0xDC81,0xDD17,0xDD10, + /* plane 4, row 40 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0x95A6,0x4995,0x969A,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD864,0x4A0F,0x4A11,0xD864,0xD864,0x4A10,0xD864,0x4A15, + 0x4A13,0x9757,0xD864,0x4A47,0x4A46,0xD864,0x4A59,0x4A5B,0xD864,0x4A5E, + 0xD864,0xD864,0x4A5A,0x4A91,0x4A92,0x4A90,0x4A93,0xD865,0x97F7,0x4ABE, + 0xD865,0xD865,0xD865,0x4ABC,0x4ABB,0x4AB7,0x4AB9,0xD865,0x4B01,0x4AFE, + 0xD865,0xD865,0x4B02,0xD865,0x4AFF,0x98B0,0xD865,0x4B00,0xD865,0x4B37, + 0x4B3A,0x4B6F,0x4B77,0x4B79,0x99C6,0xD866,0x4BC8,0xD866,0xD866,0xD866, + 0xD866,0x4BF2,0xD866,0x4BF1,0x4BF0,0x9B62,0xD867,0x4C34,0xD867,0xD867, + 0xD867,0xD868,0xD868,0x4D2C,0x4D2D,0xD868,0xD868,0xD87E,0xD869,0x50FA, + 0xD840,0x3491,0xD840,0x3494,0xD840, + 1, /* first low-surrogate */ + 0xDD12, 0, 0, 0,0xDEFA,0xDEF3,0xDEF2,0xDEF5,0xDEF6, + 0xDFBB,0xDFC2,0xDCA7, 0, 0,0xDCA8,0xDCA3, 0,0xDCAA, 0, + 0, 0,0xDDDC, 0, 0,0xDE0F, 0, 0,0xDE79, 0, + 0xDE7F,0xDE85, 0, 0, 0, 0, 0,0xDC1B, 0, 0, + 0xDC77,0xDC76,0xDC98, 0, 0, 0, 0,0xDC7A, 0, 0, + 0xDDBC,0xDDBA, 0,0xDDB6, 0, 0,0xDDB4, 0,0xDECF, 0, + 0, 0, 0, 0, 0,0xDC7B, 0,0xDE1C,0xDE21,0xDE1D, + 0xDEC0, 0,0xDEFF, 0, 0, 0,0xDD56, 0,0xDFA1,0xDFA2, + 0xDFA6,0xDE56,0xDE57, 0, 0,0xDF01,0xDFED,0xDE1C,0xDDF2, 0, + 0xDFB8, 0,0xDFC0, 0,0xDFB7, + /* plane 4, row 41 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0x34C4,0x350A,0xD841,0x5285,0xD842,0x3552,0xD842,0x3559, + 0x366F,0xD843,0x35F2,0x35F4,0x5643,0xD843,0x35F1,0x563C,0xD843,0x366A, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0x3724,0xD846,0x3723,0xD846, + 0xD846,0xD846,0x3727,0xD846,0xD846,0x376D,0x5BED,0x376E,0x376F,0xD846, + 0xD846,0x5C35,0x379F,0x380A,0x3806,0x380E,0xD847,0x380D,0x3805,0xD847, + 0xD847,0x380B,0x3810,0x382E,0xD848,0xD848,0xD848,0xD848,0xD848,0x3896, + 0x3897,0x38C4,0x5F47,0x38C5,0xD849,0x38D2,0xD849,0xD849,0xD849,0x3981, + 0xD84A,0x398E,0x3990,0x398F,0xD84A,0x3991,0x3995,0x3993,0xD849,0x616D, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x3A3B,0x3A48,0xD84B,0xD84B,0x3A46, + 0x3A47,0xD84B,0xD84B,0xD84B,0x3A4C, + 1, /* first low-surrogate */ + 0xDFE1, 0, 0,0xDFE8, 0,0xDCB2, 0,0xDEAE, 0, + 0,0xDF7E, 0, 0, 0,0xDF76, 0, 0,0xDF96, 0, + 0xDC20,0xDC21,0xDC23,0xDC29,0xDE77,0xDC51, 0,0xDC56, 0,0xDC88, + 0xDC59,0xDC55, 0,0xDD97,0xDD98, 0, 0, 0, 0,0xDEA1, + 0xDEA3, 0, 0, 0, 0, 0,0xDF0A, 0, 0,0xDF3D, + 0xDF0C, 0, 0, 0,0xDD3D,0xDD39,0xDEB0,0xDEB2,0xDEAE, 0, + 0, 0, 0, 0,0xDC20, 0,0xDD6E,0xDD6D,0xDD6A, 0, + 0xDC32, 0, 0, 0,0xDC39, 0, 0, 0,0xDFA3, 0, + 0xDC7F,0xDC35,0xDC3D,0xDDF4,0xDDF5, 0, 0,0xDD48,0xDD28, 0, + 0,0xDD27,0xDD32,0xDD2C, + /* plane 4, row 42 */ + 1 | (94 << 8), /* first, last */ + 0xD84B,0x3A4A,0x3A50,0x3A43,0xD84B,0xD84B,0xD87E,0x3A49,0x3AA6, + 0x3AA5,0x3AA4,0xD84B,0xD84C,0x3AB9,0xD84C,0x3ACE,0x3ACF,0x3B13,0xD84C, + 0xD84C,0xD84D,0x3BC6,0x3BC5,0x3BCA,0x3BD9,0x3BC1,0xD84D,0xD84D,0x69F5, + 0xD84D,0xD84D,0xD84D,0xD84D,0x3BCB,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0x6A03,0xD84D,0xD84D,0x6A65,0x3C42,0xD84E,0x6B75,0x3C74,0x3C73,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x6F8A,0x6F56,0x3D52,0xD84F,0xD84F, + 0xD84F,0x3D50,0xD84F,0x3D4B,0xD84F,0x3D4C,0x3D6D,0xD84F,0x6F98,0xD84F, + 0xD84F,0xD84F,0x3D4F,0x6F68,0x3DF0,0xD850,0x7234,0x7245,0x3E4D,0x3E4C, + 0xD851,0x3E4F,0x3E4E,0x3E50,0xD851,0x735C,0x3E96,0x7356,0xD852,0xD852, + 0x3E97,0x3E95,0x3E98,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDD2E, 0, 0, 0,0xDD23,0xDD31,0xDCC5, 0, 0, + 0, 0,0xDFC9,0xDC89, 0,0xDCBB, 0, 0, 0,0xDF97, + 0xDF93,0xDE28, 0, 0, 0, 0, 0,0xDE18,0xDE3B, 0, + 0xDE27,0xDE24,0xDE1B,0xDE31, 0,0xDE26,0xDEA3,0xDE3F,0xDE22,0xDE19, + 0,0xDE41,0xDE2B, 0, 0,0xDD0C, 0, 0, 0,0xDE4E, + 0xDEB9,0xDEFA,0xDFE9,0xDFE8,0xDFE4, 0, 0, 0,0xDF5F,0xDF5D, + 0xDF52, 0,0xDF74, 0,0xDF46, 0, 0,0xDFAA, 0,0xDF4A, + 0xDF59,0xDF4B, 0, 0, 0,0xDF50, 0, 0, 0, 0, + 0xDED0, 0, 0, 0,0xDECC, 0, 0, 0,0xDC64,0xDC65, + 0, 0, 0,0xDC5C,0xDE15, + /* plane 4, row 43 */ + 1 | (94 << 8), /* first, last */ + 0x3EEC,0x3EEB,0x3F13,0x3F14,0x3F38,0x3F3A,0x3F39,0xD852,0x3F68, + 0x3F67,0xD853,0xD853,0xD853,0x3FBE,0x3FBC,0xD853,0xD853,0xD853,0x3FBB, + 0xD853,0x3FBA,0xD853,0x3FB9,0x3FB7,0xD853,0xD853,0x3FC1,0xD853,0x3FF7, + 0xD854,0x4060,0xD854,0xD854,0x4059,0x405C,0x405A,0x4058,0xD854,0x405B, + 0xD854,0xD854,0xD854,0xD854,0xD854,0x405D,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0x40D4,0x40D3,0x78BF,0x40D2,0x78BD,0xD855,0x40D7, + 0x40D1,0x78E4,0x40D5,0xD855,0xD87E,0x416D,0x416F,0x7A34,0x4175,0x416C, + 0x4174,0xD856,0x4173,0xD856,0xD856,0x7A36,0x41AC,0xD856,0xD856,0xD856, + 0x4210,0xD856,0xD856,0x7BBA,0x7BBC,0x420F,0x7BC8,0x4223,0x7BC3,0x421D, + 0x7BB6,0x420E,0xD856,0xD856,0x4215, + 8, /* first low-surrogate */ + 0xDF79, 0, + 0,0xDCC5,0xDCB8,0xDE2C, 0, 0,0xDE37,0xDE35,0xDE31, 0, + 0xDE2F, 0,0xDE2B, 0, 0,0xDE2D,0xDE2A, 0,0xDF95, 0, + 0xDE3E, 0,0xDE47,0xDE45, 0, 0, 0, 0,0xDE52, 0, + 0xDE70,0xDE50,0xDE58,0xDE51,0xDE3D, 0,0xDE41,0xDE0C,0xDE3C,0xDF86, + 0xDF83,0xDF89,0xDFF3, 0, 0, 0, 0, 0,0xDD2D, 0, + 0, 0, 0,0xDEC5,0xDD55, 0, 0, 0, 0, 0, + 0,0xDC43, 0,0xDC37,0xDC45, 0, 0,0xDDE5,0xDEA6,0xDFDB, + 0,0xDFDA,0xDFE6, 0, 0, 0, 0, 0, 0, 0, + 0, 0,0xDFF8,0xDFE9, + /* plane 4, row 44 */ + 1 | (94 << 8), /* first, last */ + 0x7BC2,0x4213,0xD856,0xD856,0x421B,0x7BC5,0x4222,0x4226,0xD856, + 0x7BBD,0x7BB0,0x4221,0x421C,0x4217,0xD856,0x421A,0x7BBB,0xD857,0xD857, + 0xD857,0x4299,0xD857,0x4297,0xD858,0xD858,0x42FD,0xD858,0x42F6,0x42FE, + 0x42F5,0x42FF,0x42F7,0xD858,0xD858,0xD858,0x4301,0x7E04,0xD858,0xD858, + 0xD858,0x4377,0xD858,0xD858,0xD859,0xD859,0xD859,0x43AB,0xD859,0xD859, + 0x43C0,0xD859,0x4431,0x442E,0xD87E,0xD859,0x442C,0xD859,0xD859,0x4432, + 0x442F,0x442B,0x442D,0x4433,0xD85A,0xD85A,0x81F1,0x4457,0x445C,0x447B, + 0xD85A,0xD85A,0x447A,0xD85B,0x8522,0x4513,0x451E,0x4517,0x4520,0x452A, + 0x4511,0x4515,0x450F,0x4518,0x8538,0xD85B,0xD85B,0x452C,0x8532,0xD87E, + 0x8510,0xD85B,0xD85B,0x451C,0xD85B, + 3, /* first low-surrogate */ + 0xDFE8,0xDFF6, 0, 0, 0, 0,0xDFE7, + 0, 0, 0, 0, 0,0xDFD5, 0, 0,0xDED3,0xDEC7, + 0xDED1, 0,0xDEC3, 0,0xDC80,0xDC98, 0,0xDC84, 0, 0, + 0, 0, 0,0xDC97,0xDC83,0xDC81, 0, 0,0xDC8C,0xDE42, + 0xDFAB, 0,0xDFA3,0xDFA6,0xDC5C,0xDC69,0xDC67, 0,0xDD8B,0xDDA8, + 0,0xDFD8, 0, 0,0xDD89,0xDFDC, 0,0xDFE0,0xDFE5, 0, + 0, 0, 0, 0,0xDD18,0xDD19, 0, 0, 0, 0, + 0xDE5F,0xDE5E, 0,0xDE02, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,0xDE12,0xDE36, 0, 0,0xDDA8, + 0,0xDE23,0xDE03, 0,0xDE00, + /* plane 4, row 45 */ + 1 | (94 << 8), /* first, last */ + 0x4529,0xD85B,0xD85B,0x4512,0x854F,0x4597,0xD85C,0x8772,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x45D4,0x45D0,0x877C,0xD85C,0xD87E, + 0xD85C,0xD85C,0x45D3,0x4614,0xD85D,0x4646,0x4645,0xD85D,0x4643,0xD85D, + 0x890D,0x4644,0x4648,0xD85D,0x4647,0xD85D,0xD85D,0xD85D,0x8908,0x4649, + 0x4685,0xD85E,0x4684,0xD85E,0x469D,0xD85E,0x469E,0x46A0,0xD85E,0x469C, + 0xD85E,0x469F,0xD85E,0x46F7,0x46EA,0xD85E,0x46EF,0x46E9,0x46F3,0x46F0, + 0x46EB,0xD85E,0x46EC,0x46F2,0x46F5,0x46EE,0xD85E,0xD85E,0x473A,0x474B, + 0xD85F,0x474A,0x474C,0xD85F,0xD85F,0xD85F,0x4779,0x477B,0x4778,0xD85F, + 0xD85F,0x47B5,0xD85F,0x47B4,0x47B7,0x8D9E,0x4809,0x47FE,0x4808,0x4807, + 0xD860,0xD860,0xD860,0x4806,0x4804, + 2, /* first low-surrogate */ + 0xDE46,0xDE61, 0, 0, 0,0xDF84, 0,0xDF6B, + 0xDF62,0xDF56,0xDF6A,0xDF52,0xDF55, 0, 0, 0,0xDF61,0xDDBB, + 0xDF58,0xDF77, 0, 0,0xDED7, 0, 0,0xDEDE, 0,0xDEDF, + 0, 0, 0,0xDED1, 0,0xDEE2,0xDEE1,0xDEDD, 0, 0, + 0,0xDC4B, 0,0xDC4E, 0,0xDCFC, 0, 0,0xDCFA, 0, + 0xDCFB, 0,0xDCFE, 0, 0,0xDE31, 0, 0, 0, 0, + 0,0xDE38, 0, 0, 0, 0,0xDE3A,0xDFBB, 0, 0, + 0xDC59, 0, 0,0xDCDB,0xDCDF,0xDCE2, 0, 0, 0,0xDD9E, + 0xDDA1, 0,0xDF10, 0, 0, 0, 0, 0, 0, 0, + 0xDC76,0xDC7F,0xDC7D, + /* plane 4, row 46 */ + 1 | (94 << 8), /* first, last */ + 0x4805,0x47FF,0x480B,0xD860,0xD860,0x483B,0x485D,0x485C,0x485F, + 0x485E,0x8F28,0xD860,0x8F21,0x4883,0xD861,0xD861,0x48A7,0x9066,0x906C, + 0xD861,0x48A8,0xD861,0xD861,0xD861,0xD861,0xD861,0x90F6,0x48E0,0x48DF, + 0x48FE,0x48FC,0x48FF,0x48FD,0xD862,0x492C,0x92EC,0x92BA,0x92E3,0x92BD, + 0x499D,0xD863,0x95B4,0xD863,0x4A40,0xD864,0xD864,0x4A5F,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0x97D1,0xD865,0x4AC0,0x9823,0xD865, + 0x4AC1,0x4AC6,0xD865,0xD865,0x4B04,0x4B05,0xD865,0x990B,0x4B3E,0x4B3D, + 0x4B40,0x4B3F,0xD865,0x4B42,0xD865,0xD865,0xD865,0x4B84,0x4B82,0x4B7F, + 0x4B85,0xD866,0xD866,0x4BCC,0x9AB2,0x4BCB,0x4BCD,0xD866,0xD866,0x9ADB, + 0xD866,0x4BF5,0xD866,0xD866,0xD866, + 4, /* first low-surrogate */ + 0xDC82,0xDE57, 0, 0, 0, 0, + 0, 0,0xDF2E, 0, 0,0xDD8B,0xDD8D, 0, 0, 0, + 0xDD90, 0,0xDEEC,0xDF6F,0xDF6B,0xDF71,0xDF78, 0, 0, 0, + 0, 0, 0, 0,0xDDAD, 0, 0, 0, 0, 0, + 0,0xDD2F, 0,0xDF78, 0,0xDDF8,0xDE19, 0,0xDE9B,0xDE94, + 0xDE97,0xDE99,0xDFA6,0xDFA4,0xDFA7, 0,0xDC95, 0, 0,0xDC90, + 0, 0,0xDC9B,0xDDC4, 0, 0,0xDDC6, 0, 0, 0, + 0, 0,0xDEE3, 0,0xDEDF,0xDEDD,0xDEE7, 0, 0, 0, + 0,0xDE2D,0xDE2C, 0, 0, 0, 0,0xDE34,0xDE38, 0, + 0xDF1D, 0,0xDF1A,0xDF1B,0xDF14, + /* plane 4, row 47 */ + 1 | (94 << 8), /* first, last */ + 0x9AF0,0xD866,0xD867,0x4C20,0x4C21,0xD867,0xD867,0x4C37,0x4C3E, + 0x9B73,0x4C3D,0x9B6E,0xD867,0xD867,0xD867,0x9B65,0xD867,0x4C3C,0xD867, + 0x4C38,0x9B6A,0xD867,0x9B6D,0xD867,0x4C3B,0xD867,0x4CB0,0xD867,0xD867, + 0xD867,0x4CAD,0x4CB2,0x4CB8,0x9D0B,0xD867,0x4CAF,0xD867,0xD867,0x4D1A, + 0x9E76,0x4D20,0x4D21,0x4D30,0x9EA8,0x4D2F,0xD868,0xD868,0xD868,0xD868, + 0x4D5F,0x4D60,0xD869,0xD869,0x9F11,0xD869,0xD840,0x348A,0x5119,0x349C, + 0xD840,0x349A,0xD840,0xD840,0xD841,0x350C,0x350B,0x350D,0x5292,0xD842, + 0xD843,0x35FE,0xD843,0xD843,0x35FF,0x35FB,0x35FC,0x3609,0xD843,0x3600, + 0xD843,0x5675,0xD843,0xD843,0xD843,0xD844,0xD845,0xD845,0x3671,0xD845, + 0xD845,0x596F,0xD840,0xD846,0xD846, + 2, /* first low-surrogate */ + 0xDF17,0xDC21, 0, 0,0xDCAA,0xDCA1, 0, 0, + 0, 0, 0,0xDD63,0xDD79,0xDD60, 0,0xDD62, 0,0xDD61, + 0, 0,0xDD70, 0,0xDD6A, 0,0xDFC8, 0,0xDFC5,0xDFBE, + 0xDFC2, 0, 0, 0, 0,0xDFC7, 0,0xDFB0,0xDFCA, 0, + 0, 0, 0, 0, 0, 0,0xDF0D,0xDF07,0xDF96,0xDFEF, + 0, 0,0xDC1E,0xDC1D, 0,0xDD90,0xDFEB, 0, 0, 0, + 0xDFEE, 0,0xDFEF,0xDFEC,0xDFFA, 0, 0, 0, 0,0xDD04, + 0xDFD3, 0,0xDFD1,0xDFFA, 0, 0, 0, 0,0xDFC8, 0, + 0xDFD5, 0,0xDFCD,0xDFD2,0xDFFB,0xDE2A,0xDC88,0xDC61, 0,0xDC63, + 0xDC62, 0,0xDC57,0xDCC8,0xDC98, + /* plane 4, row 48 */ + 1 | (94 << 8), /* first, last */ + 0x372B,0xD846,0xD847,0xD847,0x3814,0x3811,0x3812,0xD848,0x3863, + 0xD848,0x386E,0x389A,0xD848,0x389B,0xD848,0xD849,0x38C8,0xD849,0xD849, + 0x38F6,0xD84A,0xD84A,0x61A5,0x398C,0x3997,0x39A2,0x61A0,0xD84A,0xD84A, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0x3A54,0xD84B,0xD84B, + 0xD84B,0x3AA8,0xD84B,0xD84B,0x3AA9,0xD84C,0x65B4,0x65D8,0x66C2,0x3B18, + 0x3B17,0x3B1D,0xD84C,0xD84C,0x3B31,0xD84D,0xD84D,0x3BD8,0x3BD5,0xD84D, + 0xD84D,0xD84D,0x3BE1,0xD84D,0x3BD4,0xD84D,0xD84D,0xD84D,0x3BE3,0xD84D, + 0x3C44,0x3C45,0xD84E,0xD84E,0x3C76,0x3C75,0xD84E,0x6BA8,0x3C88,0x3CAA, + 0xD84E,0x3CAB,0x3CAC,0xD84E,0x3D57,0x6F83,0x3D60,0x3D5D,0x3D6B,0xD84F, + 0x3D63,0x3D67,0xD84F,0x3D5E,0xD84F, + 2, /* first low-surrogate */ + 0xDEC1,0xDF3F,0xDF41, 0, 0, 0,0xDD52, 0, + 0xDD5E, 0, 0,0xDEC7, 0,0xDF70,0xDC27, 0,0xDC71,0xDCB0, + 0,0xDC42,0xDC43, 0, 0, 0, 0, 0,0xDC57,0xDC9D, + 0xDD89,0xDD8D,0xDD8B,0xDD80,0xDD92,0xDD8A,0xDDC8, 0,0xDD8F,0xDD93, + 0xDD91, 0,0xDFF2,0xDFDE, 0,0xDCC8, 0, 0, 0, 0, + 0, 0,0xDEA7,0xDEA1, 0,0xDE8C,0xDE7F, 0, 0,0xDE7B, + 0xDE95,0xDE99, 0,0xDE8E, 0,0xDEDA,0xDE8A,0xDE9C, 0,0xDE7E, + 0, 0,0xDD1A,0xDE55, 0, 0,0xDE60, 0, 0, 0, + 0xDFFB, 0, 0,0xDFFD, 0, 0, 0, 0, 0,0xDFD0, + 0, 0,0xDFC5, 0,0xDFD2, + /* plane 4, row 49 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0x6FC5,0x71CD,0x3DF9,0x3DF3,0xD850,0xD850,0xD850,0xD850, + 0xD850,0x3DF6,0xD851,0x729C,0x3E51,0x3E53,0x3E52,0xD852,0x3E9B,0xD852, + 0x3E9C,0xD852,0xD852,0x3EF7,0x7499,0x748F,0x7491,0xD852,0xD852,0xD852, + 0xD852,0x3F3B,0xD852,0x3F3E,0x3F3D,0xD853,0x3F69,0xD853,0xD853,0xD853, + 0x3FC3,0x3FC4,0x3FC7,0xD853,0xD853,0x7639,0x3FC6,0x762E,0x3FC8,0xD853, + 0xD853,0xD853,0x769F,0x76A0,0x3FE6,0x3FF8,0xD854,0xD854,0x4007,0xD854, + 0x4064,0x4068,0xD854,0x7794,0x4065,0x77AE,0xD854,0xD854,0x4069,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0x40DA,0x40E0,0x78E6,0xD855, + 0x40DE,0xD855,0xD855,0xD855,0x411C,0x411D,0x411A,0xD855,0x417B,0x417A, + 0x417C,0xD856,0x4178,0x4177,0xD856, + 1, /* first low-surrogate */ + 0xDC11, 0, 0, 0, 0,0xDFAD,0xDFA4,0xDFA9,0xDFB0, + 0xDF9D, 0,0xDD98, 0, 0, 0, 0,0xDC92, 0,0xDC8A, + 0,0xDC8D,0xDC96, 0, 0, 0, 0,0xDE45,0xDE4B,0xDF0F, + 0xDF16, 0,0xDF8A, 0, 0,0xDCC9, 0,0xDCC8,0xDCCA,0xDE64, + 0, 0, 0,0xDE5D,0xDE63, 0, 0, 0, 0,0xDE88, + 0xDF3A,0xDF39, 0, 0, 0, 0,0xDC17,0xDC93, 0,0xDC95, + 0, 0,0xDE76, 0, 0, 0,0xDE80,0xDE7B, 0,0xDE48, + 0xDEA8,0xDE88,0xDF8B,0xDF8A,0xDF8C,0xDFFC, 0, 0, 0,0xDD58, + 0,0xDD51,0xDD55,0xDD53, 0, 0, 0,0xDEDC, 0, 0, + 0,0xDC5C, 0, 0,0xDC65, + /* plane 4, row 50 */ + 1 | (94 << 8), /* first, last */ + 0xD87E,0x41B1,0xD856,0x41B2,0x41B0,0xD856,0x7ABC,0xD856,0x4236, + 0xD857,0x422E,0xD857,0x7BD6,0xD857,0x4234,0xD857,0xD857,0xD857,0xD857, + 0x422A,0xD857,0x4233,0x422D,0x422F,0x4231,0x422B,0x4232,0xD857,0x4235, + 0xD857,0xD857,0xD856,0xD857,0xD857,0xD857,0x7CCF,0xD858,0xD858,0x4308, + 0xD858,0x4306,0xD858,0xD858,0x7E18,0xD858,0x434D,0x4361,0xD858,0xD858, + 0xD858,0x4378,0xD858,0x4394,0x4395,0xD859,0xD859,0xD859,0x43C1,0x43C3, + 0x806D,0xD85A,0x4439,0xD85A,0xD85A,0x443A,0x443B,0x4435,0x4436,0xD85A, + 0x443C,0x8190,0xD85A,0xD85A,0xD85A,0x4458,0x447C,0x447D,0x448D,0x448C, + 0xD85B,0xD85B,0x453B,0x453F,0xD85B,0xD85B,0x4532,0x452D,0xD85B,0x452F, + 0x4539,0x452E,0x453A,0xD85B,0x4536, + 1, /* first low-surrogate */ + 0xDD5A, 0,0xDDEE, 0, 0,0xDDF0, 0,0xDDF2, 0, + 0xDC35, 0,0xDC22, 0,0xDC20, 0,0xDC2D,0xDC28,0xDC26,0xDC3C, + 0,0xDC38, 0, 0, 0, 0, 0, 0,0xDC2A, 0, + 0xDC1A,0xDC30,0xDFE3,0xDC19,0xDEE9,0xDEE7, 0,0xDCD6,0xDCC4, 0, + 0xDC87, 0,0xDCC7,0xDCD9, 0,0xDCDF, 0, 0,0xDF0A,0xDF01, + 0xDFB1, 0,0xDFC1, 0, 0,0xDC76,0xDD0D,0xDD0E, 0, 0, + 0,0xDC07, 0,0xDC09,0xDC16, 0, 0, 0, 0,0xDC0E, + 0, 0,0xDC06,0xDD1E,0xDD4A, 0, 0, 0, 0, 0, + 0xDEA6,0xDE91, 0, 0,0xDEB8,0xDE96, 0, 0,0xDEC5, 0, + 0, 0, 0,0xDF0A, + /* plane 4, row 51 */ + 1 | (94 << 8), /* first, last */ + 0x4531,0x453E,0x4538,0x8552,0x4534,0xD85B,0x4541,0xD85B,0xD85B, + 0xD85B,0xD85B,0x4530,0xD85B,0xD85B,0xD85B,0xD85B,0x4543,0xD85B,0x8550, + 0xD85B,0xD85C,0x4598,0xD85C,0xD85C,0x87A0,0xD85C,0xD85C,0x8786,0x45DA, + 0x45D7,0xD85C,0xD85C,0x8795,0xD85C,0xD85C,0x878C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0x4618,0x8860,0xD87E,0xD85D,0xD85D,0x4652,0x8928,0xD85D, + 0x464E,0x8920,0xD85D,0x464F,0x4650,0xD85E,0xD85E,0x89A8,0x4686,0x4687, + 0x4689,0xD85E,0xD85E,0xD85E,0xD85E,0x46A2,0x46A3,0xD85E,0x46A1,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0x46F9,0x46FD,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0x473E,0x473C,0xD85E,0x474D,0xD85F,0x474E,0xD85F,0x4781, + 0x4783,0x4782,0xD85F,0x4780,0x4788, + 6, /* first low-surrogate */ + 0xDEB2, 0,0xDEB7,0xDEB4, + 0xDE89,0xDE8D, 0,0xDE87,0xDEC2,0xDE9C,0xDE92, 0,0xDECA, 0, + 0xDE8A,0xDDE0, 0,0xDDE6,0xDDE5, 0,0xDFA5,0xDFB3, 0, 0, + 0,0xDFB5,0xDFAF, 0,0xDFB0,0xDFCC, 0,0xDFA2,0xDFBE,0xDFC6, + 0xDFAC,0xDFAE, 0, 0,0xDDC3,0xDF08,0xDF05, 0, 0,0xDEFE, + 0, 0,0xDF00, 0, 0,0xDC64,0xDC68, 0, 0, 0, + 0,0xDC6A,0xDC69,0xDD0D,0xDD12, 0, 0,0xDD0F, 0,0xDE67, + 0xDE79,0xDE72,0xDE66,0xDE7C, 0, 0,0xDE68,0xDE85,0xDE76,0xDE74, + 0xDE71,0xDE64, 0, 0,0xDFF8, 0,0xDC6C, 0,0xDCEB, 0, + 0, 0,0xDDB8, + /* plane 4, row 52 */ + 1 | (94 << 8), /* first, last */ + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47B9,0xD85F,0xD85F,0x8E3A, + 0xD860,0xD860,0xD860,0x4811,0x480D,0x4810,0x4813,0xD860,0x483C,0x4862, + 0x4863,0xD860,0xD861,0xD87E,0xD861,0xD861,0x4903,0x4906,0x4902,0x4901, + 0xD862,0xD862,0x4905,0xD862,0x9194,0x9311,0xD862,0x9337,0x4936,0xD862, + 0x4935,0x9343,0xD87E,0x49A1,0x49A3,0xD863,0xD863,0x49A0,0xD863,0x49EA, + 0x96A6,0x49E8,0xD863,0xD863,0xD863,0xD864,0x4A21,0x4A1B,0xD864,0xD864, + 0x4A49,0x4A48,0xD864,0x9795,0x4A62,0x4A61,0x4A64,0x4A60,0x4A63,0xD864, + 0xD864,0x9796,0x4A66,0x4AAC,0x4AAB,0xD865,0xD865,0x4AC3,0xD865,0x4AC4, + 0x9825,0xD865,0xD865,0x4B08,0x4B09,0x4B0A,0x4B06,0x4B07,0x4B41,0xD865, + 0x4B45,0xD865,0x4B43,0x4B44,0x9926, + 1, /* first low-surrogate */ + 0xDF2D,0xDF2E,0xDF28,0xDF29,0xDF31, 0,0xDF2F,0xDF2A, 0, + 0xDCA4,0xDCB7,0xDCBF, 0, 0, 0, 0,0xDE63, 0, 0, + 0,0xDF67,0xDDBE,0xDDE0,0xDF95,0xDF9C, 0, 0, 0, 0, + 0xDC71,0xDC72, 0,0xDC6F, 0, 0,0xDDF1, 0, 0,0xDDE8, + 0, 0,0xDDEA, 0, 0,0xDD49,0xDD64, 0,0xDD48, 0, + 0, 0,0xDF2C,0xDFE1,0xDFEF,0xDCC0, 0, 0,0xDCD7,0xDCD4, + 0, 0,0xDEAD, 0, 0, 0, 0, 0, 0,0xDEAE, + 0xDEAC, 0, 0, 0, 0,0xDC27,0xDCAE, 0,0xDCB0, 0, + 0,0xDCC0,0xDCC4, 0, 0, 0, 0, 0, 0,0xDF07, + 0,0xDEFD, + /* plane 4, row 53 */ + 1 | (94 << 8), /* first, last */ + 0x9934,0x4B47,0xD87E,0xD866,0xD866,0x4B71,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0x4B8B,0x4BD4,0x4BD3,0x4BD1,0x9ABA,0x4BD2,0xD866, + 0xD866,0x4BF7,0x4BF8,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867, + 0xD867,0x4C22,0xD867,0x4C45,0x4C41,0x9B81,0x4C40,0x9B8A,0xD867,0x9B7F, + 0x4C42,0xD867,0x4CC1,0x4CC5,0xD867,0x4CBB,0x4CB9,0x4CBD,0x4CC9,0xD868, + 0x9D11,0xD868,0x4CBF,0x4CC7,0xD867,0x4CC3,0x4D24,0x4D31,0x4D33,0xD868, + 0x4D32,0x4D34,0x4D52,0x4D61,0x9ED9,0x4D7A,0x4D82,0x9F3C,0xD869,0x5123, + 0xD841,0xD841,0xD841,0x512C,0xD841,0xD842,0x350F,0x5295,0xD842,0x3523, + 0x3525,0xD844,0x3606,0x3608,0x5688,0xD844,0xD844,0xD844,0x568B,0xD844, + 0xD844,0x367A,0x3677,0xD845,0xD845, + 3, /* first low-surrogate */ + 0xDE04,0xDC1B,0xDC1C, 0,0xDCB2,0xDCB4,0xDCB7, + 0xDCB1,0xDCB3,0xDCAE, 0, 0, 0, 0, 0, 0,0xDE3F, + 0xDF36, 0, 0,0xDF31,0xDF3B,0xDF35,0xDF3A,0xDF37,0xDC22,0xDC36, + 0xDC32, 0,0xDCC0, 0, 0, 0, 0, 0,0xDD85, 0, + 0,0xDD89, 0, 0,0xDFE1, 0, 0, 0, 0,0xDC0A, + 0,0xDC09, 0, 0,0xDFE8, 0, 0, 0, 0,0xDF18, + 0, 0, 0, 0, 0, 0, 0, 0,0xDDC5, 0, + 0xDC0D,0xDC0C,0xDC21, 0,0xDE16,0xDC0E, 0, 0,0xDC17, 0, + 0,0xDC48, 0, 0, 0,0xDC55,0xDC49,0xDC4C, 0,0xDC4F, + 0xDC3D, 0, 0,0xDC8A,0xDCA8, + /* plane 4, row 54 */ + 1 | (94 << 8), /* first, last */ + 0xD845,0x372E,0xD846,0x372F,0xD846,0xD848,0x381B,0x3813,0xD847, + 0xD847,0x3866,0xD848,0x3865,0xD845,0x38F7,0xD849,0xD84A,0x61E1,0x61D7, + 0xD84A,0xD84A,0x399C,0xD84B,0xD84B,0x3A53,0xD84B,0xD84B,0xD84C,0xD84C, + 0x3ABA,0x65A3,0x3B22,0x66D3,0xD84D,0xD84D,0xD84D,0x6A8B,0xD84D,0xD84D, + 0x3BEB,0x3BDD,0xD84D,0x3BEF,0xD84D,0xD84D,0x3C47,0x3C46,0xD84E,0x3C78, + 0x6BAC,0x3C89,0xD84F,0xD84F,0x3D68,0x3D76,0x3D74,0x3D79,0xD850,0x3D7A, + 0x3D77,0xD87E,0x3D71,0xD850,0x3D72,0xD850,0x3DFF,0xD850,0x3E05,0xD851, + 0xD851,0x3E54,0xD851,0xD851,0x3E9E,0x3E9F,0x7374,0xD852,0xD852,0x3EFA, + 0xD852,0x3F44,0x3F3F,0x3F40,0xD852,0x3F42,0xD852,0xD852,0x3F51,0xD852, + 0xD852,0xD853,0xD853,0xD853,0xD853, + 1, /* first low-surrogate */ + 0xDE8A, 0,0xDCCB, 0,0xDCD5,0xDDD4, 0, 0,0xDF5C, + 0xDF75, 0,0xDD61, 0,0xDE96, 0,0xDD8A,0xDCD0, 0, 0, + 0xDC49,0xDCCF, 0,0xDDD6,0xDD7F, 0,0xDDD2,0xDDCF,0xDC06,0xDC09, + 0, 0, 0, 0,0xDF06,0xDEF1,0xDF04, 0,0xDEFA,0xDEF4, + 0, 0,0xDEF9, 0,0xDE8B,0xDF03, 0, 0,0xDDA2, 0, + 0, 0,0xDC0C,0xDC0B, 0, 0, 0, 0,0xDC24, 0, + 0,0xDD14, 0,0xDC25, 0,0xDFF6, 0,0xDFFB, 0,0xDD32, + 0xDDFB, 0,0xDEF2,0xDEF3, 0, 0, 0,0xDC9C,0xDE72, 0, + 0xDE74, 0, 0, 0,0xDF86, 0,0xDF8E,0xDF90, 0,0xDFCD, + 0xDFF7,0xDCD6,0xDE84,0xDE95,0xDE8A, + /* plane 4, row 55 */ + 1 | (94 << 8), /* first, last */ + 0x7640,0x3FCA,0xD853,0x7641,0x3FCE,0x3FC9,0xD853,0xD853,0xD854, + 0xD854,0xD854,0x4009,0x76E8,0x406C,0x406E,0x4070,0x406D,0x406B,0x4071, + 0x4072,0xD854,0xD854,0xD854,0x408C,0x40E4,0xD855,0x40E1,0xD855,0xD855, + 0x78F6,0x40E7,0x7900,0x40E2,0x411F,0xD855,0xD855,0x417E,0xD856,0x4180, + 0x7A59,0x7A55,0xD856,0x41B9,0x41B7,0x41B8,0xD856,0x41BA,0x7AF4,0xD856, + 0x41D3,0x423F,0x7C04,0x4245,0x4241,0x7C15,0x4242,0x4243,0x423B,0x4238, + 0xD857,0xD857,0x423A,0x7BF5,0xD857,0xD857,0x423C,0xD857,0xD857,0x423E, + 0xD857,0xD857,0xD857,0x429E,0x429F,0x42A1,0xD857,0x429B,0x4312,0xD858, + 0xD858,0xD858,0x4318,0x430C,0xD858,0x4362,0xD858,0x437A,0xD858,0xD859, + 0x43AE,0x43AF,0xD859,0x43AD,0xD859, + 3, /* first low-surrogate */ + 0xDE97, 0, 0, 0,0xDFA0,0xDFA1,0xDC22, + 0xDCA6,0xDCA4, 0, 0, 0, 0, 0, 0, 0, 0, + 0,0xDEAF,0xDEB0,0xDEBD, 0, 0,0xDD76, 0,0xDD7B,0xDD79, + 0, 0, 0, 0, 0,0xDEEE,0xDEF1, 0,0xDC94, 0, + 0, 0,0xDC91, 0, 0, 0,0xDE10, 0, 0,0xDEAF, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xDC7B,0xDC77, 0, 0,0xDC80,0xDCC6, 0,0xDC7C,0xDC90, 0, + 0xDCA3,0xDC7D,0xDCBD, 0, 0, 0,0xDF13, 0, 0,0xDD11, + 0xDD44,0xDD0D, 0, 0,0xDF14, 0,0xDFB8, 0,0xDFB7,0xDC83, + 0, 0,0xDD14, 0,0xDD1C, + /* plane 4, row 56 */ + 1 | (94 << 8), /* first, last */ + 0x43C4,0x43C7,0x43C6,0x43C5,0xD859,0xD859,0x81C1,0x4440,0xD85A, + 0xD85A,0x443F,0x4441,0xD87E,0xD85A,0xD85A,0x447F,0xD85A,0x4486,0x4481, + 0x4480,0x448E,0x454A,0xD85B,0x4547,0xD85B,0xD85B,0x454B,0x4546,0x454E, + 0x857D,0xD85B,0x85A5,0xD85B,0x4548,0xD85B,0x4545,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0x45DB,0x45E7,0x45E4,0xD85D,0xD85D, + 0x45E1,0xD85D,0x45E9,0xD85C,0x45E5,0x45E0,0x45E3,0xD85C,0xD85D,0xD85D, + 0xD85C,0xD85D,0xD85D,0x45EA,0xD85C,0xD85D,0x893A,0x4654,0x4658,0x465C, + 0xD85D,0x4655,0x468B,0x468C,0x46A6,0x46A5,0xD85E,0xD85E,0xD85E,0xD85E, + 0x46FF,0xD85E,0xD85E,0xD85E,0xD85E,0x4730,0x4740,0x4741,0xD85F,0xD85F, + 0x4786,0xD85F,0x47BF,0x47BD,0xD85F, + 5, /* first low-surrogate */ + 0xDDD4,0xDDD5, 0, 0,0xDC43, + 0xDC42, 0, 0,0xDD8A,0xDC41,0xDD4E, 0,0xDE87, 0, 0, + 0, 0, 0,0xDF39, 0,0xDF8F,0xDF2A, 0, 0, 0, + 0,0xDF2B, 0,0xDF50, 0,0xDF6E, 0,0xDF3B,0xDF53,0xDF5F, + 0xDF2F,0xDF30,0xDF38,0xDF4C,0xDDF1, 0, 0, 0,0xDC07,0xDC16, + 0,0xDC14, 0,0xDFFB, 0, 0, 0,0xDFF8,0xDC10,0xDC1D, + 0xDFFF,0xDC0B,0xDC04, 0,0xDFFE,0xDDFF, 0, 0, 0, 0, + 0xDF23, 0, 0, 0, 0, 0,0xDD2A,0xDEA0,0xDE98,0xDE9C, + 0,0xDE9E,0xDEA6,0xDEB5,0xDEB0, 0, 0, 0,0xDCF9,0xDCF5, + 0,0xDDD2, 0, 0,0xDF50, + /* plane 4, row 57 */ + 1 | (94 << 8), /* first, last */ + 0xD85F,0xD85F,0xD85F,0xD85F,0x47BE,0x4819,0xD860,0x481C,0xD860, + 0x481B,0x4817,0x4818,0x8E51,0xD860,0xD860,0x483D,0x486A,0x4866,0xD860, + 0xD860,0x4867,0xD860,0x4868,0x48AD,0x48AE,0xD861,0xD861,0x48D6,0x4909, + 0xD862,0x9198,0xD862,0x490C,0x490A,0xD862,0x493B,0x493A,0x9384,0x9381, + 0xD862,0x936F,0xD863,0xD863,0xD863,0x49AF,0x49AA,0x49AB,0xD863,0xD863, + 0x49B1,0xD863,0x49AC,0x49EC,0xD863,0xD863,0x4A01,0xD863,0xD864,0xD864, + 0xD864,0x4A23,0xD864,0x4A24,0x4A1E,0xD864,0x4A4A,0x4A65,0x4A6A,0xD864, + 0xD864,0xD864,0x4A69,0xD864,0xD864,0x4A95,0xD864,0xD865,0xD865,0xD865, + 0x9842,0xD865,0xD865,0x4ACC,0xD865,0xD865,0xD87E,0x4ACF,0xD865,0xD865, + 0x4B0F,0xD865,0x4B0E,0x4B0B,0x4B10, + 1, /* first low-surrogate */ + 0xDF4E,0xDF4B,0xDF52,0xDF4D, 0, 0,0xDCE4, 0,0xDCDA, + 0, 0, 0, 0,0xDCDF,0xDCE8, 0, 0, 0,0xDF70, + 0xDF72, 0,0xDF77, 0, 0, 0,0xDDE6,0xDFAA, 0, 0, + 0xDC8C, 0,0xDC89, 0, 0,0xDE32, 0, 0, 0, 0, + 0xDE7A, 0,0xDC9E,0xDCA0,0xDD70, 0, 0, 0,0xDD6E,0xDD66, + 0,0xDD65, 0, 0,0xDF7F,0xDFE0, 0,0xDFFF,0xDCF6,0xDCF7, + 0xDCF5, 0,0xDCFC, 0, 0,0xDCF9, 0, 0, 0,0xDECA, + 0xDEC3,0xDEC6, 0,0xDFB8,0xDFBD, 0,0xDFBC,0xDC05,0xDCE0,0xDCE9, + 0,0xDCDF,0xDCEC, 0,0xDCE5,0xDCDE,0xDE00, 0,0xDCF0,0xDCE3, + 0,0xDDEC, + /* plane 4, row 58 */ + 1 | (94 << 8), /* first, last */ + 0x4B0D,0x4B0C,0xD865,0xD865,0xD865,0xD865,0x4B46,0x4B48,0x9937, + 0x4B49,0xD865,0xD866,0x4B91,0x4B8E,0xD866,0x4BD8,0x4BD6,0xD866,0x4BDA, + 0xD866,0x4BD7,0xD866,0x9AFF,0x4BF9,0xD866,0xD866,0x4BFC,0xD866,0xD867, + 0xD867,0x9BA9,0x4C4A,0x9BA7,0x4C4E,0x9BB3,0x9BAC,0x9BB0,0xD867,0xD867, + 0xD867,0x9B9C,0xD867,0xD867,0xD868,0x9D3C,0x9D1C,0x9D3A,0x4CD3,0x4CCD, + 0x4CD1,0xD868,0xD868,0x9D32,0x9D34,0xD868,0xD868,0xD87E,0xD868,0xD868, + 0xD868,0x9EC7,0xD868,0x4D62,0xD869,0xD869,0xD869,0x4D83,0x9F3F,0xD869, + 0x4D92,0x349F,0x34A0,0xD841,0xD841,0xD841,0xD841,0xD841,0x3527,0xD842, + 0x360B,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0x368D,0xD845,0xD846,0x3770,0xD847, + 3, /* first low-surrogate */ + 0xDDF2,0xDDEF,0xDDE9,0xDEFB, 0, 0, 0, + 0,0xDF37,0xDCDE, 0, 0,0xDCDA, 0, 0,0xDE4B, 0, + 0xDE49, 0,0xDED5, 0, 0,0xDF52,0xDF47, 0,0xDF48,0xDCCC, + 0xDCD0, 0, 0, 0, 0, 0, 0, 0,0xDD86,0xDDA7, + 0xDDA3, 0,0xDDB6,0xDDAD,0xDC13, 0, 0, 0, 0, 0, + 0,0xDC17,0xDC22, 0, 0,0xDC49,0xDC26,0xDE0C,0xDC3C,0xDC28, + 0xDEA8, 0,0xDFFB, 0,0xDC32,0xDCD6,0xDD48, 0, 0,0xDDC6, + 0, 0, 0,0xDC25,0xDC26,0xDC24,0xDC33,0xDD70, 0,0xDF90, + 0,0xDC95,0xDCA1,0xDC92,0xDC8F,0xDC9F,0xDC96,0xDC98,0xDC9D,0xDCA0, + 0,0xDE97,0xDCEB, 0,0xDF87, + /* plane 4, row 59 */ + 1 | (94 << 8), /* first, last */ + 0x5EEB,0xD849,0x399A,0x399F,0x399D,0xD84A,0xD84A,0xD84A,0x399B, + 0xD84A,0x61D5,0xD87E,0x3A60,0x3A64,0x3A69,0x3A63,0x3A67,0x3A62,0xD84B, + 0xD84B,0xD84B,0x6502,0xD84B,0xD84B,0xD84C,0x3AAC,0xD84C,0xD84C,0xD84C, + 0xD84C,0x3B26,0x3B23,0x3B25,0xD84D,0xD84D,0x3BF8,0xD84D,0xD84D,0xD84D, + 0x3BF7,0x3BFB,0x3BFA,0xD84D,0xD84D,0xD84E,0xD84E,0x3CB0,0x3CAF,0xD84F, + 0xD850,0xD850,0x3D7E,0xD850,0x3D7D,0x3D80,0xD850,0xD850,0x3D7F,0x3D86, + 0xD850,0xD850,0x7012,0xD850,0x3D81,0xD851,0xD851,0xD851,0x3E24,0x3E58, + 0x3E57,0x3EA0,0xD852,0x3EFE,0xD852,0xD852,0x3F15,0xD852,0x3F47,0x3F46, + 0xD852,0xD853,0x3F6B,0x3F6C,0x7585,0x7654,0xD853,0x3FCC,0xD853,0x7655, + 0xD853,0x3FCB,0x76A7,0x76A8,0x3FF9, + 2, /* first low-surrogate */ + 0xDC32, 0, 0, 0,0xDCD8,0xDCFB,0xDD06, 0, + 0xDCD1, 0,0xDCB0, 0, 0, 0, 0, 0, 0,0xDDF6, + 0xDE04,0xDDFE, 0,0xDDFF,0xDDF7,0xDC18, 0,0xDC14,0xDCCD,0xDD20, + 0xDEDE, 0, 0, 0,0xDF45,0xDF53, 0,0xDF4B,0xDF55,0xDF41, + 0, 0, 0,0xDF5C,0xDF54,0xDE71,0xDED0, 0, 0,0xDC53, + 0xDC29,0xDC7E, 0,0xDC79, 0, 0,0xDC70,0xDC6A, 0, 0, + 0xDC85,0xDC64, 0,0xDC78, 0,0xDC32,0xDC27,0xDC2F, 0, 0, + 0, 0,0xDCBA, 0,0xDE71,0xDE8C, 0,0xDF1A, 0, 0, + 0xDF98,0xDCE4, 0, 0, 0, 0,0xDEC2, 0,0xDEBA, 0, + 0xDEC8, + /* plane 4, row 60 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD854,0x4078,0x407A,0x4075,0xD854,0x4076, + 0x4077,0xD854,0xD854,0x40EA,0x40EE,0x40ED,0xD855,0x40EC,0x790F,0xD855, + 0xD855,0x4184,0x4185,0x4183,0xD856,0x41BC,0x41BD,0x41D4,0xD857,0xD857, + 0xD857,0xD857,0x4255,0xD857,0x4250,0x424C,0x4248,0xD857,0x4253,0xD857, + 0x4257,0x4254,0x424E,0x424A,0x4251,0xD857,0xD857,0x4249,0x424B,0x4263, + 0xD857,0xD857,0x42A7,0x42A6,0x42A4,0xD857,0xD857,0xD87E,0x7CE4,0x7CE5, + 0xD858,0xD858,0x7E65,0x7E4E,0x4317,0xD858,0x4316,0xD858,0xD858,0x4363, + 0xD858,0xD858,0x7F82,0xD858,0x437B,0x437C,0xD858,0xD858,0xD859,0xD859, + 0x43B0,0x802D,0xD859,0xD85A,0x4442,0xD85A,0x4444,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0x4488,0x448F,0x4553, + 1, /* first low-surrogate */ + 0xDCB9,0xDCB8,0xDCA5,0xDEE2, 0, 0, 0,0xDED9, 0, + 0,0xDEAC,0xDEDD, 0, 0, 0,0xDD9D, 0, 0,0xDF11, + 0xDF03, 0, 0, 0,0xDCEE, 0, 0, 0,0xDCA4,0xDCD8, + 0xDCDD,0xDCDE, 0,0xDCE7, 0, 0, 0,0xDCD4, 0,0xDCCE, + 0, 0, 0, 0, 0,0xDCF1,0xDCD3, 0, 0, 0, + 0xDCCA,0xDCE9, 0, 0, 0,0xDF1A,0xDF41,0xDD68, 0, 0, + 0xDD3D,0xDD40, 0, 0, 0,0xDD43, 0,0xDD3F,0xDD3C, 0, + 0xDF21,0xDF20, 0,0xDFC6, 0, 0,0xDFD1,0xDFCA,0xDC8E,0xDC91, + 0, 0,0xDDE3,0xDC88, 0,0xDC70, 0,0xDD9D,0xDE9D,0xDE91, + 0xDE98,0xDE99, + /* plane 4, row 61 */ + 1 | (94 << 8), /* first, last */ + 0x455B,0xD85B,0x4559,0xD85B,0xD85B,0xD85B,0xD85C,0x85CA,0xD85C, + 0xD85B,0x4554,0x85BC,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0x4599,0xD85C, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x45F1,0xD85D,0x45EF,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x4662,0xD85D,0x4663,0xD85D, + 0x4660,0x4661,0x465F,0xD85D,0xD85D,0xD85D,0x468D,0xD85E,0x468E,0xD85E, + 0xD85E,0xD85E,0x4709,0xD85E,0xD85E,0x4705,0xD85E,0xD85E,0x4703,0x4706, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4731,0xD85F,0xD85F,0x474F,0xD85F, + 0xD85F,0xD85F,0x4766,0x8CFF,0x47C4,0xD85F,0x47C3,0x47C1,0x47C5,0xD860, + 0xD860,0xD860,0x4821,0xD860,0x481F,0x4822,0xD860,0x4827,0x4820,0xD860, + 0x486D,0x486C,0x486B,0x486F,0x4870, + 2, /* first low-surrogate */ + 0xDFBF, 0,0xDFAE,0xDFB1,0xDFCC,0xDC04, 0,0xDC16, + 0xDFCD, 0, 0,0xDFE0,0xDFCB,0xDFD4,0xDFC9,0xDDFF, 0,0xDDFD, + 0xDC57,0xDC52,0xDC50,0xDC45,0xDC4D, 0,0xDC53, 0,0xDC82,0xDC44, + 0xDDCE,0xDDCF,0xDDD2,0xDE02,0xDF4F,0xDF58, 0,0xDF43, 0,0xDF52, + 0, 0, 0,0xDF49,0xDF53,0xDF4D, 0,0xDC84, 0,0xDC83, + 0xDD32,0xDEE2, 0,0xDEE4,0xDED3, 0,0xDED5,0xDEDD, 0, 0, + 0xDEEC,0xDEE6,0xDED2,0xDEFA,0xDEDA, 0,0xDC06,0xDC04, 0,0xDC7B, + 0xDD04,0xDD02, 0, 0, 0,0xDF60, 0, 0, 0,0xDD07, + 0xDD05,0xDD0C, 0,0xDD5A, 0, 0,0xDD1A, 0, 0,0xDF8A, + /* plane 4, row 62 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD861,0xD862,0x91A6,0xD862,0xD862,0x4942,0xD862,0x93B6, + 0xD862,0x4944,0x4940,0xD862,0xD862,0x493F,0xD862,0x93AB,0x498B,0xD863, + 0xD863,0x4A25,0x4A28,0xD864,0x9721,0xD864,0xD864,0x4A75,0x4A72,0xD864, + 0x4A6F,0xD864,0xD864,0x4A76,0x4A71,0x97A7,0xD864,0x4A97,0xD864,0x4AD7, + 0xD865,0x4AD6,0xD865,0x4AD8,0x4ADC,0x4ADB,0x4AD4,0x983E,0x4B13,0x4B11, + 0x4B14,0xD865,0xD865,0xD865,0xD865,0x4B51,0x4B50,0x4B53,0x4B54,0x4B52, + 0xD865,0xD865,0xD865,0x4B6D,0xD87E,0xD866,0x4B95,0x4B99,0xD866,0x4B9A, + 0xD866,0x4B93,0x4B97,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BDC,0xD866, + 0x4BFD,0xD866,0xD866,0x4BFE,0x4C00,0x4C02,0x4C01,0x4C03,0xD866,0xD867, + 0xD867,0xD867,0x4C27,0x4C26,0x4C24, + 1, /* first low-surrogate */ + 0xDF8C,0xDE09,0xDCA6, 0,0xDCAC,0xDCA9, 0,0xDE8B, 0, + 0xDE8C, 0, 0,0xDE88,0xDE89, 0,0xDE93, 0, 0,0xDD83, + 0xDF4F, 0, 0,0xDD20, 0,0xDE36,0xDEE2, 0, 0,0xDEEE, + 0,0xDEE7,0xDEE9, 0, 0, 0,0xDEDF, 0,0xDFC7, 0, + 0xDD09, 0,0xDD01, 0, 0, 0, 0, 0, 0, 0, + 0,0xDE05,0xDE0C,0xDF78,0xDF5D, 0, 0, 0, 0, 0, + 0xDF5E,0xDF60,0xDF67, 0,0xDE05,0xDCF4, 0, 0,0xDCF1, 0, + 0xDCFA, 0, 0,0xDCF8,0xDCF9,0xDD09,0xDCFD,0xDCF7, 0,0xDE59, + 0,0xDF60,0xDF68, 0, 0, 0, 0, 0,0xDF6A,0xDC14, + 0xDC3E,0xDCE4, + /* plane 4, row 63 */ + 1 | (94 << 8), /* first, last */ + 0x4C4C,0x9BBC,0x4C50,0x4C55,0x4C53,0x9BB7,0x4C52,0xD867,0x4C57, + 0x9BBE,0x4C58,0x4CD6,0xD868,0xD868,0x4CD4,0xD868,0x4CDA,0x4CD9,0xD860, + 0x9D62,0x4CD5,0x4CE4,0xD87E,0x4CDC,0x4D1B,0x9E8F,0x4D37,0x4D36,0x4D4B, + 0x9ECB,0x4D66,0x4D76,0xD869,0x4D7E,0x4D7D,0x4D7F,0x4D84,0x4D8B,0xD869, + 0x4D94,0x34A1,0x3511,0xD842,0x3610,0x56A9,0xD844,0xD844,0xD844,0xD844, + 0x5913,0xD846,0x3732,0x5BF4,0xD846,0xD846,0xD847,0xD847,0x3820,0xD847, + 0xD848,0xD848,0x389D,0xD849,0x61EC,0x61EF,0xD84A,0xD84A,0x39A5,0xD84A, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x3C02,0x3BFE, + 0x3C01,0x6AD6,0x3C03,0x3BFF,0xD84D,0x3C04,0xD87E,0x3C4A,0xD84E,0x3D87, + 0xD850,0x3D84,0xD850,0x3D85,0x7209, + 8, /* first low-surrogate */ + 0xDDD2, 0, + 0, 0, 0,0xDC58,0xDC50, 0,0xDC5C, 0, 0,0xDD19, + 0, 0, 0,0xDE0E, 0, 0, 0, 0, 0, 0, + 0, 0, 0,0xDCDF, 0, 0, 0, 0, 0,0xDDD9, + 0, 0, 0,0xDD66, 0, 0,0xDCE1,0xDCEF,0xDCE8,0xDE33, + 0,0xDCFE, 0, 0,0xDEEF,0xDEEC,0xDCEC,0xDF9C, 0,0xDF99, + 0xDD70,0xDD6E, 0,0xDC41, 0, 0,0xDD02,0xDD01, 0,0xDE1B, + 0xDE23,0xDE25,0xDE24,0xDE26,0xDE33,0xDE2F,0xDC8F,0xDF56, 0, 0, + 0, 0, 0, 0,0xDF99, 0,0xDCED, 0,0xDED9, 0, + 0xDCB7, 0,0xDCB6, + /* plane 4, row 64 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD851,0x3E59,0x7379,0xD852,0x74C6,0xD852,0xD852, + 0x3F04,0x3F49,0x3F48,0xD853,0x3F6D,0x3FD2,0x3FD3,0xD853,0x3FD1,0xD853, + 0xD853,0xD853,0xD853,0x3FE7,0x400A,0x77C3,0xD854,0xD854,0xD854,0xD854, + 0xD854,0x40F0,0xD855,0xD855,0x791F,0xD856,0xD856,0x7A65,0xD856,0xD856, + 0x41BE,0x41BF,0xD856,0x7AC6,0x7C3A,0xD857,0x7C36,0xD857,0xD857,0xD857, + 0xD857,0x425E,0xD857,0xD857,0x425B,0xD857,0xD857,0xD857,0x7CEB,0x42AB, + 0xD857,0x42AC,0xD857,0xD857,0xD858,0xD858,0x431F,0x431D,0xD858,0xD858, + 0x431C,0xD858,0x431E,0xD858,0xD858,0xD858,0xD858,0x4364,0xD858,0x7F84, + 0xD859,0xD85A,0xD85A,0x4448,0x4447,0xD85A,0xD85C,0x455E,0x4561,0xD85C, + 0x85E0,0x85F3,0xD85C,0xD85C,0xD85C, + 1, /* first low-surrogate */ + 0xDC54,0xDC57,0xDC7A, 0, 0,0xDE8E, 0,0xDE90,0xDEB9, + 0, 0, 0,0xDCEF, 0, 0, 0,0xDEE2, 0,0xDED6, + 0xDED8,0xDEDA,0xDEDE, 0, 0, 0,0xDF08,0xDF04,0xDF0A,0xDF0B, + 0xDF02, 0,0xDDAA,0xDDC1, 0,0xDCD7,0xDCD9, 0,0xDCDE,0xDCDA, + 0, 0,0xDE2A, 0, 0,0xDD31, 0,0xDD2B,0xDD2C,0xDD29, + 0xDD2E, 0,0xDD27,0xDD28, 0,0xDD5F,0xDD30,0xDD24, 0, 0, + 0xDF3A, 0,0xDF39,0xDF40,0xDD80,0xDD84, 0, 0,0xDD75,0xDD76, + 0,0xDD7C, 0,0xDD78,0xDD9B,0xDD7E,0xDE5A, 0,0xDF2C, 0, + 0xDC9C,0xDC47,0xDC8A, 0, 0,0xDD27,0xDC4A, 0, 0,0xDC27, + 0, 0,0xDC2E,0xDC26,0xDE08, + /* plane 4, row 65 */ + 1 | (94 << 8), /* first, last */ + 0x45F7,0xD85D,0xD85D,0x45F4,0x45F8,0x881E,0xD85D,0xD85D,0xD85D, + 0x4664,0xD85D,0x4692,0x468F,0x4690,0x89B4,0x4693,0x46A8,0xD85E,0xD85E, + 0x46A9,0xD85E,0xD85E,0x89F9,0xD85E,0xD85E,0x8B44,0x470E,0xD85E,0x470F, + 0xD85E,0xD85E,0x470B,0xD85E,0xD85E,0xD85E,0xD85E,0x4710,0x4751,0xD85F, + 0x4750,0xD85F,0x4763,0xD85F,0xD85F,0x47C7,0xD85F,0x8E71,0x4824,0x4826, + 0x8E6E,0xD860,0x8E79,0xD860,0x8EC4,0x4874,0x4873,0x4872,0xD860,0xD860, + 0xD861,0xD861,0x48B1,0x908C,0xD861,0x490E,0x4911,0x4910,0x490F,0x4912, + 0x4949,0x93C9,0x494F,0x494D,0xD862,0xD862,0x4955,0xD863,0xD863,0xD864, + 0xD864,0xD864,0xD864,0x4A2C,0x4A2B,0xD864,0xD864,0x4A79,0xD864,0xD864, + 0xD864,0x4A7A,0x97B0,0x4A99,0x4A9A, + 2, /* first low-surrogate */ + 0xDCBD,0xDC96, 0, 0, 0,0xDCBE,0xDC8E,0xDF74, + 0,0xDF80, 0, 0, 0, 0, 0, 0,0xDD3C,0xDD3D, + 0,0xDD3A,0xDD42, 0,0xDF24,0xDF06, 0, 0,0xDF15, 0, + 0xDF02,0xDF0C, 0,0xDF08,0xDF0A,0xDF05,0xDF1C, 0, 0,0xDC82, + 0,0xDC86, 0,0xDE03,0xDF7B, 0,0xDF7A, 0, 0, 0, + 0,0xDD80, 0,0xDD58, 0, 0, 0, 0,0xDFAA,0xDFAB, + 0xDC36,0xDC4A, 0, 0,0xDFD6, 0, 0, 0, 0, 0, + 0, 0, 0, 0,0xDF03,0xDECF, 0,0xDD9F,0xDDA2,0xDC2A, + 0xDC2F,0xDD44,0xDD40, 0, 0,0xDF11,0xDF0F, 0,0xDF0D,0xDF07, + 0xDF03, + /* plane 4, row 66 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0x4AAE,0x4AAF,0xD865,0x4AE4,0x4AE1,0x4ADE,0x4AE6,0x4ADF, + 0xD865,0x4AE7,0x4AE2,0x4AE0,0xD865,0x4AE5,0x985A,0xD865,0x4B18,0xD865, + 0xD865,0xD865,0x4B56,0xD865,0x9946,0xD865,0xD865,0xD865,0x4B6E,0xD866, + 0xD866,0x4B9D,0x4BA0,0x4B9C,0xD866,0xD866,0x4BA1,0x4BA2,0x4B9F,0x4BDF, + 0x4BDE,0x9AC3,0x4BEA,0xD866,0x4C06,0xD866,0x4C04,0x9B0F,0xD866,0xD867, + 0xD867,0xD867,0x4C5F,0x9BF4,0x9BFA,0x4C5C,0xD867,0x4C5E,0xD867,0xD867, + 0x9BDD,0x4C59,0xD867,0xD867,0x4C64,0x4C5D,0x4C62,0xD867,0x4C65,0xD867, + 0x9BED,0x4C5B,0x9BEF,0xD868,0x4CDD,0xD868,0x4CDF,0xD868,0xD87E,0x4CE2, + 0xD868,0xD868,0x4D27,0xD868,0xD868,0x9E96,0x4D3A,0x4D3C,0xD868,0x4D39, + 0xD868,0xD868,0x4D3D,0x4D3B,0x9EB3, + 1, /* first low-surrogate */ + 0xDC35, 0, 0,0xDD04, 0, 0, 0, 0, 0, + 0xDD26, 0, 0, 0,0xDD1E, 0, 0,0xDE0E, 0,0xDE1D, + 0xDE1E,0xDE1F, 0,0xDF88, 0,0xDF8D,0xDF91,0xDF80, 0,0xDC54, + 0xDC55, 0, 0, 0,0xDD25,0xDD1A, 0, 0, 0, 0, + 0, 0, 0,0xDF88, 0,0xDF7A, 0, 0,0xDF80,0xDD1E, + 0xDDFC,0xDE25, 0, 0, 0, 0,0xDE0B, 0,0xDE06,0xDE04, + 0, 0,0xDDF9,0xDE00, 0, 0, 0,0xDE02, 0,0xDE07, + 0, 0, 0,0xDCB5, 0,0xDC87, 0,0xDC93,0xDE0F, 0, + 0xDCBE,0xDE66, 0,0xDEC7,0xDECF, 0, 0, 0,0xDF3D, 0, + 0xDF3C,0xDF47, + /* plane 4, row 67 */ + 1 | (94 << 8), /* first, last */ + 0x4D4C,0xD868,0x4D68,0x9EE2,0xD869,0x4D80,0x4D85,0xD869,0x4D95, + 0xD869,0x4D96,0xD869,0x9F8F,0xD841,0x34A4,0x3512,0x56B1,0x3625,0xD845, + 0x5B41,0x3737,0xD846,0xD847,0xD847,0xffff,0x3868,0x3867,0x389E,0xD849, + 0xD849,0xD84A,0x39AA,0xD84A,0x39A9,0x39A4,0xD84A,0xD84A,0x3A71,0x3A6F, + 0xD84B,0xD84B,0xD84B,0xD84C,0x3AAD,0xD84C,0x6AF6,0x3C0C,0x6AF2,0x3C0B, + 0xD84D,0xD84D,0x3C0F,0x3C79,0xD850,0xD850,0xD850,0xD850,0x3D8D,0x3D8F, + 0xD850,0xD850,0x3D8E,0x3E0C,0xD851,0xD851,0xD851,0x3EA6,0xD852,0x3EA3, + 0x3EA4,0x3EA5,0x7588,0x3F6E,0xD853,0xD853,0x3FFA,0xD854,0x407C,0x407E, + 0x407B,0x407D,0xD854,0xD854,0x408D,0x40F4,0x40F3,0xD855,0xD856,0x4189, + 0xD856,0xD856,0x41C0,0xD857,0x4265, + 2, /* first low-surrogate */ + 0xDFC3, 0, 0,0xDD1B, 0, 0,0xDDC9, 0, + 0xDDDD, 0,0xDE93, 0,0xDC3D, 0, 0, 0, 0,0xDCE6, + 0, 0,0xDEF7,0xDFB0,0xDFAE, 0, 0, 0, 0,0xDD9F, + 0xDD9E,0xDD30, 0,0xDD4F, 0, 0,0xDD27,0xDD51, 0, 0, + 0xDE51,0xDE54,0xDE56,0xDC27, 0,0xDC24, 0, 0, 0, 0, + 0xDFEC,0xDFC4, 0, 0,0xDCF8,0xDCF6,0xDCF7,0xDCED, 0, 0, + 0xDCF4,0xDCEF, 0, 0,0xDC7F,0xDCA2,0xDC7E, 0,0xDCC5, 0, + 0, 0, 0, 0,0xDEF1,0xDEF2, 0,0xDC2F, 0, 0, + 0, 0,0xDF23,0xDF29, 0, 0, 0,0xDF1B,0xDCEB, 0, + 0xDCEA,0xDE33, 0,0xDD63, + /* plane 4, row 68 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0xD857,0x42AD,0x4325,0xD858,0xD87E,0xD858,0x43C9,0xD85A, + 0x444A,0xD85A,0x8267,0x4489,0xD85C,0x4566,0x4570,0xD85C,0x456D,0x4569, + 0x4567,0xD85C,0x4572,0x860E,0x456E,0xD85C,0x459C,0x45FC,0x45FD,0x4604, + 0x45FF,0xD87E,0x45FE,0x4600,0xD85D,0x4666,0x4669,0xD85D,0x46AA,0x46AB, + 0x4717,0xD85E,0xD85E,0xD85E,0x4715,0x8B5E,0x4712,0x8D0E,0xD85F,0xD85F, + 0xD85F,0x47CA,0xD85F,0x47C9,0x47CB,0xD85F,0xD85F,0xD860,0x4829,0x4828, + 0xD860,0xD860,0xD860,0x4840,0x4875,0x4876,0xD860,0x4888,0xD861,0x91B6, + 0x4957,0x9401,0xD862,0x495F,0xD862,0x941D,0x4958,0x495B,0xD862,0x942F, + 0xD863,0x49B3,0xD863,0x49EF,0xD864,0x4A30,0xD864,0xD864,0xD864,0xD864, + 0xD864,0x4A41,0x4A4B,0xD864,0x4A7D, + 1, /* first low-surrogate */ + 0xDD92,0xDD65, 0, 0,0xDDA0,0xDD70,0xDE5E, 0,0xDCAA, + 0,0xDCA9, 0, 0,0xDC9C, 0, 0,0xDC92, 0, 0, + 0,0xDC86, 0, 0, 0,0xDC83, 0, 0, 0, 0, + 0,0xDDC2, 0, 0,0xDCCE, 0, 0,0xDF93, 0, 0, + 0,0xDF2E,0xDF27,0xDF28, 0, 0, 0, 0,0xDE18,0xDE16, + 0xDF8D, 0,0xDF8E, 0, 0,0xDF90,0xDF8F,0xDD81, 0, 0, + 0xDD8A,0xDD8C,0xDE8D, 0, 0, 0,0xDFB2, 0,0xDFD9, 0, + 0, 0,0xDF0D, 0,0xDF13, 0, 0, 0,0xDF1B, 0, + 0xDDAC, 0,0xDDB3, 0,0xDD5E, 0,0xDD60,0xDD68,0xDD63,0xDD69, + 0xDD67, 0, 0,0xDF28, + /* plane 4, row 69 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0x4A7C,0xD864,0xD864,0xD864,0x97E0,0xD864,0x97DB, + 0xD87E,0xD865,0x9861,0xD865,0xD865,0x4AE8,0x4AEA,0x4AE9,0xD865,0xD865, + 0xD865,0xD865,0x4B1B,0xD865,0xD865,0x4B55,0x994A,0x4B59,0x4B58,0xD865, + 0xD865,0xD865,0x4BA4,0x4BA3,0xD866,0xD866,0xD866,0xD866,0x9A33,0x4BA7, + 0xD866,0x4BE0,0xD866,0xD866,0xD866,0x4C08,0x4C0A,0x4C09,0xD866,0xD867, + 0xD867,0x4C71,0x9C0F,0x4C6C,0xD867,0x9C11,0xD867,0x9C03,0x9C01,0x4C6E, + 0xD867,0x9C16,0xD867,0xffff,0xD867,0x4CE0,0x4CEE,0xD868,0x4CEB,0xD868, + 0xD868,0xD868,0xD868,0x9D93,0x4CEA,0x4CEF,0x4CE7,0xD868,0xD868,0xD868, + 0xD868,0x4D48,0x4D49,0xD868,0xD868,0xD868,0x4D4D,0xD868,0xD869,0x4D55, + 0xD869,0xD869,0x4D6A,0x4D6C,0xD869, + 1, /* first low-surrogate */ + 0xDF2E,0xDF30, 0,0xDF26,0xDF31,0xDF41, 0,0xDFDA, 0, + 0xDDFA,0xDC0B, 0,0xDD34,0xDD33, 0, 0, 0,0xDD39,0xDD3B, + 0xDD40,0xDE30, 0,0xDE32,0xDE37, 0, 0, 0, 0,0xDF81, + 0xDF9F,0xDFA7, 0, 0,0xDD44,0xDD47,0xDD48,0xDD3D, 0, 0, + 0xDD49, 0,0xDE80,0xDFA0,0xDF9D, 0, 0, 0,0xDF9C,0xDC47, + 0xDD07, 0, 0, 0,0xDE49, 0,0xDE44, 0, 0, 0, + 0xDEDF, 0,0xDE4C, 0,0xDE4F, 0, 0,0xDCC1, 0,0xDCB9, + 0xDCCB,0xDCCF,0xDCC4, 0, 0, 0, 0,0xDCCA,0xDCC3,0xDED0, + 0xDF51, 0, 0,0xDFA8,0xDFC7,0xDFC6, 0,0xDFCA,0xDC02, 0, + 0xDC5D,0xDC5A, 0, 0,0xDC59, + /* plane 4, row 70 */ + 1 | (94 << 8), /* first, last */ + 0x4D6B,0xD869,0xD869,0xD869,0x4D98,0x4D99,0x4D97,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD841,0xD841,0xD841,0x535B,0xD842,0x3616,0xD844, + 0x56BF,0xD844,0xD845,0x3739,0xD846,0xD847,0x3825,0x5DCE,0xD848,0xD849, + 0xD84A,0xD84B,0x3A74,0xD84B,0xD84B,0x3AAE,0xD84C,0xD84D,0xD84D,0xD84F, + 0xD850,0x3D92,0x3D94,0xD850,0x3D95,0xD850,0x3E0D,0xD851,0x3E25,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0x3FD5,0x3FD6,0x76AC,0x3FE8, + 0xD854,0x407F,0x77D2,0x40F5,0x40F6,0x40F7,0xD855,0x4124,0x418D,0x418A, + 0xD856,0xD856,0x426C,0x4266,0x426A,0xD857,0x4267,0x426D,0x4268,0x7C52, + 0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0x4365,0xD859,0x439A,0xD859, + 2, /* first low-surrogate */ + 0xDCCC,0xDD1C,0xDDCC, 0, 0, 0,0xDDE8,0xDDEC, + 0xDDEA,0xDEAD,0xDEB0,0xDC5F,0xDC58,0xDC57, 0,0xDF93, 0,0xDD3B, + 0,0xDD34,0xDCF2, 0,0xDEFD,0xDC1D, 0, 0,0xDF04,0xDC48, + 0xDD58,0xDE4F, 0,0xDE6E,0xDE72, 0,0xDC2E,0xDFFC,0xDFF4,0xDC36, + 0xDD0E, 0, 0,0xDD14, 0,0xDD19, 0,0xDCA6, 0,0xDEC9, + 0xDEC0,0xDECC,0xDF1B,0xDFAA,0xDFA8,0xDF03, 0, 0, 0, 0, + 0xDC35, 0, 0, 0, 0, 0,0xDDD9, 0, 0, 0, + 0xDE3F,0xDE3D, 0, 0, 0,0xDD8B, 0, 0, 0, 0, + 0xDD68,0xDD8A,0xDF58,0xDF57,0xDDCE,0xDDBC,0xDDC0,0xDDC1,0xDDBF,0xDDAB, + 0xDE5F, 0,0xDCA6, 0,0xDD29, + /* plane 4, row 71 */ + 1 | (94 << 8), /* first, last */ + 0x43B1,0x444B,0x444D,0x444C,0x444E,0xD85A,0x4573,0x4575,0xD85C, + 0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85D,0x4603,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0x471E,0xD85E,0x8B73,0xD85E,0x4719, + 0x471C,0x471A,0x471D,0x8B76,0xD85E,0xD85E,0x4743,0x4752,0xD85F,0xD85F, + 0x4795,0xD85F,0x47CC,0xD860,0x482B,0xD860,0xD860,0xD860,0x482A,0x8EC7, + 0x4877,0xD860,0xD860,0xD861,0xD861,0xD862,0xD862,0xD862,0x4913,0x4914, + 0x9434,0xD862,0xD862,0x495D,0xD862,0x4960,0x943E,0x4962,0xD863,0xD863, + 0x49B2,0x49F0,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A4C,0xD864, + 0x4A82,0x97BC,0x4A81,0x4A9B,0xD864,0x4AA4,0x4AEE,0x4AEC,0xD865,0x4AED, + 0xD865,0x4AF0,0x4AEF,0xD865,0x4B1D, + 6, /* first low-surrogate */ + 0xDCB8, 0, 0,0xDCDD, + 0xDCD6,0xDDB1,0xDCD5,0xDCE7,0xDCD8,0xDCEC, 0,0xDD00,0xDD07,0xDCFD, + 0xDCF1,0xDCFF,0xDFAA,0xDFB0,0xDF48, 0,0xDF53, 0,0xDF4D, 0, + 0, 0, 0, 0,0xDF43,0xDF50, 0, 0,0xDC8C,0xDE27, + 0,0xDF99, 0,0xDDB1, 0,0xDDB0,0xDDAA,0xDDAC, 0, 0, + 0,0xDFC8,0xDFCA,0xDE42,0xDFE0,0xDCE7,0xDCE8,0xDCE6, 0, 0, + 0,0xDF5B,0xDF56, 0,0xDF5A, 0, 0, 0,0xDCB8,0xDDC5, + 0, 0,0xDC48,0xDD7D,0xDD7C,0xDD81,0xDD82,0xDD62, 0,0xDF45, + 0, 0, 0, 0,0xDFE3, 0, 0, 0,0xDD50, 0, + 0xDD4F, 0, 0,0xDE39, + /* plane 4, row 72 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0x4B60,0x4B5E,0x4B5D,0xD865,0xD866,0xD866,0x4BB1,0x4BAB, + 0x4BAC,0x4BAD,0xD866,0x4BAE,0xD866,0xD866,0x4BE2,0xD866,0xD866,0xD866, + 0xD866,0xD867,0x9B39,0xD867,0xD867,0x9C2A,0x4C7B,0x9C26,0x4C78,0x4C75, + 0x9C27,0xD867,0x4CF2,0x4CF4,0x4CF3,0x9DC0,0x9DC9,0xD868,0xD868,0xD868, + 0x4D3F,0x4D3E,0x4D40,0x4D4E,0x4D57,0x4D59,0x4D58,0xD87E,0xD869,0xD869, + 0x4D6E,0xD869,0xD869,0xD869,0x9EEC,0xD869,0xD869,0x4D81,0x4D86,0xD869, + 0x4D8F,0xD869,0xD869,0xD869,0x9F68,0x4D9B,0x4DB1,0x4DB3,0xD844,0x373A, + 0xD846,0xD847,0x3827,0xD847,0xD847,0x386A,0x39AC,0xD84C,0x3C18,0xD84E, + 0xD84E,0x3C4C,0xD850,0x3D96,0xD852,0x3F4A,0xD852,0xD853,0x4081,0xD854, + 0x4083,0x40F9,0x40F8,0xD855,0x418E, + 1, /* first low-surrogate */ + 0xDE3A, 0, 0, 0,0xDFC1,0xDD4E,0xDD6E, 0, 0, + 0, 0,0xDD71, 0,0xDE8C,0xDE89, 0,0xDEE5,0xDFB3,0xDFB6, + 0xDFB4,0xDC4D, 0,0xDD13,0xDE78, 0, 0, 0, 0, 0, + 0,0xDE72, 0, 0, 0, 0, 0,0xDE75,0xDEDA,0xDED7, + 0, 0, 0, 0, 0, 0, 0,0xDE16,0xDC69,0xDC67, + 0,0xDC66,0xDC6F,0xDC71, 0,0xDCCF,0xDD23, 0, 0,0xDDA5, + 0,0xDDFE,0xDDFB,0xDDFD, 0, 0, 0, 0,0xDD6D, 0, + 0xDF05,0xDC20, 0,0xDFC8,0xDFC9, 0, 0,0xDD27, 0,0xDC1E, + 0xDD36, 0,0xDD3D, 0,0xDCD7, 0,0xDFAD,0xDD00, 0,0xDF3A, + 0, 0, 0,0xDF26, + /* plane 4, row 73 */ + 1 | (94 << 8), /* first, last */ + 0x418F,0x41C1,0xD857,0xD857,0xD857,0x4270,0xD857,0x4271,0xD858, + 0x432A,0x432D,0x437D,0x8032,0x8031,0xD85A,0x444F,0xD85A,0xD85A,0x4490, + 0xD85C,0xD85C,0xD85C,0x4579,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D, + 0x4605,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0x89FD,0xD85E,0xD85E, + 0x4721,0xD85E,0xD85E,0xD858,0x4732,0xD85F,0x47CD,0x47CF,0xD860,0xD860, + 0x908E,0x4916,0x4915,0x49B5,0x4A08,0xD864,0x4A32,0xD864,0x4A33,0x4A34, + 0x4A3C,0xD864,0x97C2,0xD864,0x4A9C,0xD865,0x4AF4,0x4AF2,0xD865,0x4B62, + 0xD865,0x4B61,0x4B64,0x4BB5,0x9A4B,0x4BB4,0xD866,0xD866,0x4BE3,0xD866, + 0xD866,0x9B1C,0x4C0E,0xD866,0x9B1B,0xD867,0x4C2C,0x4C2B,0xD867,0xD867, + 0xD867,0x4C85,0x4C81,0x4C7E,0x4C83, + 3, /* first low-surrogate */ + 0xDDB7,0xDDB6,0xDDC0, 0,0xDD9B, 0,0xDDD8, + 0, 0, 0, 0, 0,0xDCC0, 0,0xDCBF,0xDEBF, 0, + 0xDD20,0xDCD0,0xDD0E, 0,0xDD1D,0xDD1E,0xDD15,0xDD14,0xDD1E,0xDD2C, + 0,0xDFB9,0xDFB8,0xDFB6,0xDC9E,0xDC9C,0xDD4D, 0,0xDF6E,0xDF60, + 0,0xDF64,0xDF62,0xDDE5, 0,0xDFA3, 0, 0,0xDFD2,0xDFD5, + 0, 0, 0, 0, 0,0xDC55, 0,0xDD93, 0, 0, + 0,0xDF56, 0,0xDFE9, 0,0xDC45, 0, 0,0xDE7C, 0, + 0xDFD3, 0, 0, 0, 0, 0,0xDD8E,0xDE97, 0,0xDE9B, + 0xDE99, 0, 0,0xDFCF, 0,0xDC59, 0, 0,0xDD20,0xDD23, + 0xDD2A, + /* plane 4, row 74 */ + 1 | (94 << 8), /* first, last */ + 0x4C80,0xD867,0x9C42,0xD868,0x9DD4,0x4CFB,0x4CF7,0xD868,0xD868, + 0xD868,0xD868,0x4CF8,0xD868,0xD868,0xD868,0xD868,0x4D5A,0xD869,0xD869, + 0xD869,0xD869,0xD869,0x4D78,0xD869,0xD869,0xD869,0xD869,0x4D9D,0x4D9C, + 0xD869,0xD869,0xD841,0x34A9,0x34BF,0x56D0,0x56CF,0xD846,0x5DDA,0xD849, + 0x3A77,0x3A76,0xD84C,0x3ABB,0x66EA,0xD84E,0x3D9B,0xD851,0x3E0F,0x3E5B, + 0xD852,0x3F4C,0x3F6F,0x3FD9,0xD853,0x4082,0xD854,0xD854,0xD854,0xD855, + 0x4274,0x4272,0xD857,0xD857,0xD857,0x4273,0xD857,0xD857,0xD857,0x42B1, + 0x432E,0xD858,0xD858,0xD858,0xD858,0x434E,0xD859,0xD859,0xD85A,0xD85A, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0x460B,0xD85D, + 0xD85D,0x466C,0x8B89,0xD85E,0xD85E, + 2, /* first low-surrogate */ + 0xDEB0, 0,0xDD2F, 0, 0, 0,0xDD32,0xDD43, + 0xDD3F,0xDD39, 0,0xDD30,0xDEDD,0xDFDA,0xDFDB, 0,0xDC84,0xDC7F, + 0xDC72,0xDC80,0xDCEE, 0,0xDD2A,0xDD22,0xDD71,0xDDCD, 0, 0, + 0xDE0F,0xDE18,0xDC6A, 0, 0, 0, 0,0xDF0C, 0,0xDDA6, + 0, 0,0xDC37, 0, 0,0xDEE2, 0,0xDCBC, 0, 0, + 0xDED5, 0, 0, 0,0xDF12, 0,0xDF4B,0xDF41,0xDFA1,0xDDEC, + 0, 0,0xDDD4,0xDDD8,0xDDD9, 0,0xDDDA,0xDF6C,0xDF6D, 0, + 0,0xDDE7,0xDDEB,0xDDEC,0xDE62, 0,0xDD2B,0xDE0D,0xDCCD,0xDEC3, + 0xDD3F,0xDD3C,0xDD3E,0xDD3D,0xDD3A,0xDD38,0xDD44,0xDD45, 0,0xDD48, + 0xDD50, 0, 0,0xDF78,0xDF79, + /* plane 4, row 75 */ + 1 | (94 << 8), /* first, last */ + 0x478B,0xD85F,0x47D0,0x482D,0xD861,0x48E4,0x4971,0xD862,0x9458, + 0x496F,0xD864,0x4A87,0x4AA5,0xD865,0xD865,0x4B1E,0x4B65,0x4BB9,0x4BB7, + 0x4BB8,0x4BE4,0xD866,0xD866,0xD866,0xD866,0xD867,0x4C8C,0x4C89,0x4C8A, + 0xD867,0xD867,0x4C8B,0xD868,0xD868,0xD868,0x4D01,0x4CFE,0x9DE7,0x4D03, + 0x4D06,0xD868,0x9DEA,0x9DF1,0xD868,0x4D1D,0x4D43,0xD868,0xD868,0xD868, + 0x4D4F,0xD869,0xD869,0x4D5B,0x4D70,0xD869,0x4D88,0xD869,0xD869,0x4D89, + 0x9F44,0xD869,0xD869,0xD869,0xD869,0x9F6D,0xD869,0xD869,0xD869,0xD842, + 0xD844,0xD846,0x5DD9,0xD847,0xD847,0xD84B,0xD84E,0x3D9E,0x3D9F,0x3EA7, + 0x3F4B,0x3FDB,0x3FDA,0xD853,0x77D6,0x408E,0x4276,0xD857,0x4330,0x432F, + 0xD858,0x4366,0xD858,0x457E,0xD85D, + 2, /* first low-surrogate */ + 0xDE3E, 0, 0,0xDE54, 0, 0,0xDFB9, 0, + 0,0xDC5F, 0, 0,0xDD72,0xDD75, 0, 0, 0, 0, + 0, 0,0xDEA3,0xDEA5,0xDFDC,0xDFDD,0xDC5A, 0, 0, 0, + 0xDEDB,0xDEDC, 0,0xDDAB,0xDD84,0xDD76, 0, 0, 0, 0, + 0,0xDD83, 0, 0,0xDE7F, 0, 0,0xDF73,0xDFAD,0xDFB0, + 0,0xDC0F,0xDC0C, 0, 0,0xDD79, 0,0xDD77,0xDD7A, 0, + 0,0xDE32,0xDE27,0xDE2A,0xDE2C, 0,0xDE28,0xDE29,0xDE38,0xDC2F, + 0xDD7B,0xDF0D, 0,0xDFD6,0xDFD5,0xDEA1,0xDC4C, 0, 0, 0, + 0, 0, 0,0xDFC0, 0, 0, 0,0xDDF4, 0, 0, + 0xDDF0, 0,0xDF3F, 0,0xDD5D, + /* plane 4, row 76 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0xD85D,0x883A,0xD85D,0x8975,0x466F,0xD85E,0x47D1,0x482F, + 0xD860,0xD860,0x48B2,0x4918,0x4917,0xD862,0x4976,0xD864,0xD864,0x4A4F, + 0x4A89,0xD864,0xD865,0xD865,0xD865,0x4AF5,0x4B1F,0xD865,0xD865,0x9A5D, + 0x4BE5,0xD866,0xD866,0x4C10,0xD866,0x4C0F,0xD866,0xD867,0xD867,0xD867, + 0x4C2F,0x4C30,0x9C64,0xD867,0xD867,0x4C93,0x4C94,0xD867,0x4D07,0x4D09, + 0x4D08,0xD868,0x4D0B,0xD868,0x9E0A,0xD868,0xD868,0xD868,0x4D50,0x4D71, + 0xD869,0xD869,0xD869,0xD869,0xD869,0x4D7B,0x4D7C,0xD869,0x9F73,0xD869, + 0x4DA1,0xD869,0xD869,0x4DA0,0x4DA2,0xD842,0x361B,0xD844,0x3682,0xD84C, + 0xD84E,0xD850,0xD850,0x3FE9,0xD854,0x4084,0x77E1,0xD856,0xD856,0xD857, + 0x42B3,0x4334,0x4333,0x4580,0xD85D, + 1, /* first low-surrogate */ + 0xDD72,0xDD62, 0,0xDD66, 0, 0,0xDF88, 0, 0, + 0xDDE8,0xDDE4, 0, 0, 0,0xDCFF, 0,0xDDAF,0xDDAE, 0, + 0,0xDFF2,0xDC48,0xDD81,0xDD7E, 0, 0,0xDE52,0xDFEF, 0, + 0,0xDEAD,0xDFE6, 0,0xDFED, 0,0xDFE9,0xDC61,0xDC60,0xDD33, + 0, 0, 0,0xDF0B,0xDF08, 0, 0,0xDF07, 0, 0, + 0,0xDDCA, 0,0xDDC6, 0,0xDE84,0xDEEB,0xDF7D, 0, 0, + 0xDC9B,0xDCA2,0xDCA1,0xDCA0,0xDC9C, 0, 0,0xDD80, 0,0xDE40, + 0,0xDE39,0xDE3C, 0, 0,0xDCCA, 0,0xDD89, 0,0xDC3C, + 0xDD40,0xDD63,0xDD69, 0,0xDF53, 0, 0,0xDD17,0xDD1A,0xDE00, + 0, 0, 0, 0,0xDD6F, + /* plane 4, row 77 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0x46AD,0xD85E,0x4744,0x4755,0xD85F,0x47D2,0xD860,0xD863, + 0xD863,0xD864,0xD864,0x4A8A,0xD865,0xD865,0x4B67,0xD866,0xD866,0x4BE6, + 0xD866,0x4C13,0xD866,0x9B2D,0xD867,0x4C97,0x9E0C,0xD868,0xD868,0x4D0C, + 0xD868,0xD868,0xD868,0x4D46,0x4D5C,0x4D74,0x4D72,0xD869,0xD869,0xD869, + 0x9F1F,0xD869,0xD869,0x4DA4,0x4DA3,0xD869,0xD869,0xD869,0xD869,0x4DB4, + 0xD841,0x3536,0xD846,0xD84E,0xD84E,0x3CB2,0xD850,0xD850,0x3F16,0x7C70, + 0x4277,0xD857,0x457F,0xD85C,0xD85E,0x487D,0x9479,0xD862,0x974A,0x4A8C, + 0xD865,0x4B68,0x4BBE,0x4C15,0xD868,0xD868,0xD868,0xD868,0xD869,0x4D75, + 0x4DA5,0xD846,0xD84A,0xD84B,0xD850,0xD855,0x4278,0x4335,0x7E9D,0x4582, + 0xD85C,0x4583,0xD85C,0x4671,0xD85E, + 1, /* first low-surrogate */ + 0xDCAB, 0,0xDF91, 0, 0,0xDFB1, 0,0xDDEF,0xDDF1, + 0xDDF2,0xDDB7,0xDDB5, 0,0xDD86,0xDE5A, 0,0xDDC6,0xDDCB, 0, + 0xDEB2, 0,0xDFF3, 0,0xDF27, 0, 0,0xDDD5,0xDDD8, 0, + 0xDDEC,0xDE87,0xDEF2, 0, 0, 0, 0,0xDCAD,0xDCB0,0xDCFD, + 0,0xDD87,0xDE4A, 0, 0,0xDE4E,0xDE49,0xDE51,0xDE4D, 0, + 0xDC72, 0,0xDF16,0xDC6D,0xDD41, 0,0xDD71,0xDD74, 0, 0, + 0,0xDF7C, 0,0xDD8A,0xDD56, 0, 0,0xDFFA, 0, 0, + 0xDE5B, 0, 0, 0,0xDDF5,0xDDF0,0xDEF3,0xDF7F,0xDC13, 0, + 0,0xDF19,0xDD85,0xDEB0,0xDD77,0xDDFF, 0, 0, 0, 0, + 0xDD87, 0,0xDD8B, 0,0xDF9E, + /* plane 4, row 78 */ + 1 | (60 << 8), /* first, last */ + 0x487E,0x4A8E,0xD865,0x9960,0x4B69,0xD866,0xD866,0xD866,0xD867, + 0xD867,0xD867,0x4C9A,0x4C9B,0xD868,0xD869,0xD869,0x4D90,0xD869,0x9F9E, + 0xD852,0xD85C,0x4586,0x4585,0xD85C,0x460E,0xD85D,0xD85E,0xD85E,0x4919, + 0xD864,0x4BC0,0xD866,0xD867,0xD868,0x9EF8,0x9F3A,0x9F7D,0xD869,0xD869, + 0x400D,0x4C16,0xD869,0x4DA9,0x4DAA,0x4085,0xD857,0xD85A,0xD85D,0xD867, + 0xD868,0xD869,0xD867,0x9F96,0xD869,0x4BC2,0x4C31,0x4D11,0x4DAB,0x4C9C, + 0xD864, + 3, /* first low-surrogate */ + 0xDD8F, 0, 0,0xDC39,0xDDD4,0xDEF1,0xDC02, + 0xDC6B,0xDD40, 0, 0,0xDE10,0xDCBE,0xDCB9, 0,0xDE64, 0, + 0xDEE9,0xDD90, 0, 0,0xDE1C, 0,0xDD92,0xDCAE,0xDFA3, 0, + 0xDDC9, 0,0xDDD8,0xDD44,0xDE24, 0, 0, 0,0xDE70,0xDED3, + 0, 0,0xDCC3, 0, 0, 0,0xDE21,0xDECA,0xDD9C,0xDC73, + 0xDF86,0xDDC1,0xDC09, 0,0xDED5, 0, 0, 0, 0, 0, + 0xDDD4, + /* plane 4, row 79: --- */ + /* plane 4, row 80: --- */ + /* plane 4, row 81: --- */ + /* plane 4, row 82: --- */ + /* plane 4, row 83: --- */ + /* plane 4, row 84: --- */ + /* plane 4, row 85: --- */ + /* plane 4, row 86: --- */ + /* plane 4, row 87: --- */ + /* plane 4, row 88: --- */ + /* plane 4, row 89: --- */ + /* plane 4, row 90: --- */ + /* plane 4, row 91: --- */ + /* plane 4, row 92: --- */ + /* plane 4, row 93: --- */ + /* plane 4, row 94: --- */ + /* plane 5, row 1 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD87E, + 0xD848,0xD840,0xD840,0xD840,0xD842,0xD845,0xD847,0xD849,0xD84E,0xD840, + 0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842, + 0xD842,0xD842,0xD842,0x355A,0xD842,0xD842,0xD844,0xD847,0xD847,0xD848, + 0xD84C,0xD84E,0xD84E,0xD851,0xD852,0xD840,0xD840,0xD840,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD845,0xD846,0xD846,0xD846, + 0xD847,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84E,0xD84E,0xD84E,0xD84F,0x3CBC,0xD851,0xD845,0xD851,0xD851,0xD859, + 0xD859,0xD85A,0xD861,0x49B9,0xD863, + 1, /* first low-surrogate */ + 0xDCD1,0xDCCB,0xDCC9,0xDD0C,0xDC00,0xDC87,0xDD0D,0xDD0F,0xDC1D, + 0xDF98,0xDCD2,0xDD11,0xDC7E,0xDED3,0xDD52,0xDCFE,0xDDA9,0xDD42,0xDC09, + 0xDCD6,0xDCDD,0xDCDC,0xDD02,0xDD73,0xDE76,0xDEA7,0xDEA8,0xDC33,0xDCCC, + 0xDE0D,0xDE2C,0xDF1B, 0,0xDF1D,0xDF99,0xDE3E,0xDD2D,0xDD2F,0xDF99, + 0xDFB3,0xDDB6,0xDF1B,0xDCEF,0xDCE9,0xDC14,0xDC94,0xDCE1,0xDD06,0xDD4A, + 0xDD44,0xDE31,0xDE7A,0xDEAD,0xDEAE,0xDEB1,0xDC38,0xDC37,0xDD7D,0xDD7E, + 0xDE2D,0xDE32,0xDF23,0xDF26,0xDC3A,0xDFA0,0xDEA8,0xDD3F,0xDDBC,0xDFC4, + 0xDD3B,0xDC19,0xDC18,0xDDB3,0xDFAA,0xDCBE,0xDDAC,0xDE25,0xDE66,0xDE6B, + 0xDD43,0xDDB5,0xDEEC,0xDC76, 0,0xDE14,0xDDDC,0xDF1C,0xDF1D,0xDCD0, + 0xDE12,0xDEF3,0xDE69, 0,0xDE11, + /* plane 5, row 2 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x34DE,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x3543,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD844,0xD844,0xD845,0xD845,0xD846,0xD846,0xD847,0xD847,0x37AC,0x37AA, + 0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0x5E07,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849, + 0x5FCB,0x38FE,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84C,0xD84C,0xD84C,0xD84E,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD853,0xD854,0xD855, + 1, /* first low-surrogate */ + 0xDE15,0xDE10,0xDE13,0xDCA4,0xDCA5,0xDDD0,0xDDBA,0xDDCB,0xDD7B, + 0xDE86,0xDEBB,0xDEBA,0xDEC3,0xDEB9,0xDEC0, 0,0xDC39,0xDC3B,0xDC41, + 0xDCD1,0xDCCF,0xDCD2,0xDD2E,0xDD6E,0xDD8C,0xDD88,0xDE35, 0,0xDE3A, + 0xDE3B,0xDE38,0xDE39,0xDF2E,0xDF2C,0xDFC8,0xDFB5,0xDFAD,0xDFB0,0xDFAB, + 0xDDB3,0xDDA9,0xDEBB,0xDEB9,0xDF5A,0xDFCD,0xDC2B,0xDD05, 0, 0, + 0xDD51,0xDD4B,0xDFEA,0xDFED,0xDC36,0xDC62,0xDC56,0xDC55,0xDC64,0xDC58, + 0,0xDDDA,0xDDD8,0xDFAD,0xDFAB,0xDCC0,0xDCC3,0xDDB3,0xDDB7,0xDDBA, + 0, 0,0xDDC7,0xDDB5,0xDD8E,0xDE73,0xDE6C,0xDE74,0xDCB4,0xDE72, + 0xDE71,0xDE82,0xDE70,0xDD3F,0xDFBA,0xDFB8,0xDDB7,0xDF23,0xDF21,0xDF2B, + 0xDF26,0xDF22,0xDD25,0xDCE4,0xDC15, + /* plane 5, row 3 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85E,0xD85E,0xD85F, + 0xD861,0xD861,0xD861,0xD861,0xD863,0xD840,0xD840,0xD840,0xD840,0xD840, + 0x3441,0xD841,0xD841,0x34B4,0xD841,0xD841,0xD841,0xD841,0xD842,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842, + 0xD842,0xD842,0xD842,0xffff,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD842,0xD842,0xD843,0xD842, + 0xD842,0xD844,0xD844,0xD844,0xD844,0xD844,0xD87E,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD851,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847, + 0x37B3,0xD847,0xD847,0xD847,0x37B4,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD848,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDCE4,0xDE33,0xDE2A,0xDE32,0xDE29,0xDEFB,0xDD5B,0xDD5C,0xDC28, + 0xDE6F,0xDE6D,0xDE6B,0xDE6E,0xDE16,0xDC22,0xDD16,0xDD48,0xDDD8,0xDE00, + 0,0xDC80,0xDCE4, 0,0xDCE7,0xDD0C,0xDD53,0xDDB7,0xDEE8,0xDED1, + 0xDEE5,0xDED8,0xDED6,0xDEDA,0xDED9,0xDED5,0xDEE6,0xDED4,0xDED3,0xDC44, + 0xDCD6,0xDCD7,0xDD13, 0,0xDD70,0xDD92,0xDDDB,0xDDDA,0xDE41,0xDE43, + 0xDF33,0xDFF6,0xDFD4,0xDFDD,0xDFD0,0xDC04,0xDFD9,0xDFDB,0xDC05,0xDFD3, + 0xDFE1,0xDE80,0xDE77,0xDE81,0xDE82,0xDE83,0xDC5C,0xDD61,0xDD60,0xDED8, + 0xDED6,0xDED7,0xDE05,0xDD4D,0xDD48,0xDFD6,0xDFCF,0xDFD9,0xDFD8,0xDC3D, + 0,0xDD54,0xDD5B,0xDD5C, 0,0xDD59,0xDD58,0xDD5A,0xDD55,0xDD56, + 0xDD82,0xDFF0,0xDC1C,0xDC6A,0xDC69, + /* plane 5, row 4 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84E, + 0x3C1D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C7C,0xD84E,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0x3F55,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD855,0xD855,0x4126,0xD856, + 0xD856,0xD857,0xD859,0xD859,0xD85A,0xD85C,0xD85D,0xD85E,0xD861,0xD861, + 0xD861,0x49BC,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDC71,0xDC67,0xDC6C,0xDC6E,0xDC79,0xDD8B,0xDDB8,0xDDE7,0xDDE8, + 0xDDE4,0xDDE6,0xDDE5,0xDDF0,0xDF83,0xDFB7,0xDFBB,0xDFB9,0xDFC5,0xDC53, + 0xDCC4,0xDCC6,0xDCCB,0xDDC8,0xDC9F,0xDDC9,0xDDDB,0xDD94,0xDE95,0xDE88, + 0xDE8D,0xDEEC,0xDEEE,0xDEF1,0xDD2E,0xDD49,0xDF5F,0xDFD1,0xDFCB,0xDC85, + 0,0xDD4A,0xDD47,0xDD4B,0xDDBB,0xDDC4, 0,0xDF02,0xDC82,0xDC91, + 0xDC8F,0xDC92,0xDD8F,0xDD91,0xDDB4,0xDD92,0xDCF4,0xDDAA,0xDF35,0xDF37, + 0xDF3D,0xDF3C,0xDF2F,0xDF30,0xDCF8,0xDCEF,0xDF26, 0,0xDD26,0xDD27, + 0xDF41,0xDFC6,0xDFC7,0xDCEB,0xDCE8,0xDCEA,0xDC1A,0xDC19, 0,0xDD23, + 0xDD24,0xDE25,0xDE35,0xDE34,0xDE07,0xDE1D,0xDFE1,0xDFAB,0xDC60,0xDE77, + 0xDE7D, 0,0xDE1E,0xDE1A,0xDE1D, + /* plane 5, row 5 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD840,0x344A,0xD840,0xD840,0xD840,0xD840, + 0xD840,0x344E,0xD841,0xD841,0x34C9,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0x52B7,0x52B8,0xD842,0x52B6,0x52BA,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0x357B,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0x3620,0xD844,0xD844,0xD844,0xD844,0x3689,0x3695,0xD845,0xD845, + 0xD845,0x36BE,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0x37C3,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDC6B,0xDD2D,0xDD4C,0xDE2A, 0,0xDE15,0xDE2C,0xDE06,0xDE08, + 0xDE0A, 0,0xDD56,0xDD84, 0,0xDDC6,0xDEF5,0xDF09,0xDEF8,0xDEE8, + 0xDEFB,0xDEE9,0xDEF6, 0, 0,0xDC52, 0, 0,0xDC54,0xDC51, + 0xDD39,0xDD3A,0xDD98,0xDE4E, 0,0xDC36,0xDC0C,0xDC10,0xDC32,0xDC11, + 0xDC18,0xDC1C,0xDC1A,0xDC19,0xDC0B,0xDC0F,0xDC1D,0xDC21,0xDC13,0xDC1B, + 0xDC15, 0,0xDDD1,0xDDC8,0xDE8D,0xDEB5, 0, 0,0xDDF8,0xDEE0, + 0xDEE1, 0,0xDEDE,0xDEFE,0xDEDC,0xDF01,0xDEFD,0xDF00,0xDDD7,0xDDD6, + 0xDDD9,0xDF65,0xDFD2,0xDFDC,0xDFE1,0xDFDE,0xDC42,0xDC4B, 0,0xDD8E, + 0xDD91,0xDD8B,0xDD90,0xDD88,0xDD89,0xDD84,0xDDAA,0xDC8D,0xDC8F,0xDC7D, + 0xDC7F,0xDC7B,0xDC80,0xDC7E,0xDC83, + /* plane 5, row 6 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD848,0xD848,0x3877,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0x39D4,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84E,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B4C, + 0xD84C,0xD84C,0xD84C,0xD84D,0x3C20,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C5B,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD851,0x3E2D,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851, + 1, /* first low-surrogate */ + 0xDC81,0xDC86,0xDC8A,0xDDBD,0xDDBE, 0,0xDDF4,0xDDF3,0xDE02, + 0xDDF6,0xDDF5,0xDDF2,0xDE04,0xDF3D,0xDFC6,0xDC89,0xDCD4,0xDCD6,0xDCD2, + 0xDDFA,0xDE06,0xDE0C,0xDE0A,0xDE0F,0xDE2F, 0,0xDEB7,0xDEBE,0xDEBC, + 0xDEE2,0xDF06,0xDEF7,0xDF07,0xDEF6,0xDF35,0xDD5F,0xDD65,0xDD64,0xDD61, + 0xDD5A,0xDD5D,0xDCD7,0xDFD7,0xDFD5,0xDFDE,0xDFE1,0xDFE0,0xDFD9, 0, + 0xDFDA,0xDFDF,0xDFF6,0xDC03, 0,0xDC93,0xDC8B,0xDC91,0xDC92,0xDC8A, + 0xDC89,0xDC8F,0xDD56,0xDD59,0xDDCA,0xDDCC, 0,0xDDD0,0xDDCD,0xDDD6, + 0xDDCB,0xDE83,0xDE82,0xDF06,0xDF2A,0xDF2C,0xDF2B,0xDF29,0xDCBD,0xDCB3, + 0xDCBE,0xDCC0,0xDCB5,0xDCB6,0xDD9D,0xDD9F,0xDE20, 0,0xDE1E,0xDE1C, + 0xDE32,0xDE1F,0xDE2B,0xDE21,0xDE26, + /* plane 5, row 7 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0x3E63,0xD851,0xD852,0xD852,0x3F18,0xD852, + 0xD852,0xD853,0xD853,0x3F74,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0x4128,0xD855, + 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857, + 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0x43DA,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0x44A4,0xD85A,0xD85D, + 0xD85D,0xD85E,0xD861,0x488E,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD840,0xD840,0xD840,0xD840,0xD840, + 1, /* first low-surrogate */ + 0xDE24,0xDE1D,0xDE27,0xDF5B,0xDF59,0xDF80,0xDF55,0xDF50,0xDF5A, + 0xDF56,0xDF63,0xDF52,0xDF58, 0,0xDF39,0xDCF9,0xDF28, 0,0xDFBC, + 0xDFD6,0xDC05,0xDC20, 0,0xDD33,0xDF46,0xDF42,0xDF43,0xDF47,0xDFCB, + 0xDC42,0xDC45,0xDCFD,0xDCF4,0xDCF9,0xDCFA,0xDF5E,0xDC1D, 0,0xDF58, + 0xDF55,0xDE57,0xDE58,0xDED9,0xDEDC,0xDEDB,0xDE27,0xDF85,0xDF87,0xDF8A, + 0xDE8B,0xDF4F,0xDD30,0xDD2F,0xDE68,0xDE49, 0,0xDE48,0xDE3F,0xDE4B, + 0xDE5C,0xDE46,0xDE40,0xDE0D,0xDF1B,0xDF1D,0xDF17, 0,0xDF22,0xDDA7, + 0xDE08,0xDC06,0xDC7D, 0,0xDC63,0xDC64,0xDC7F,0xDC6B,0xDC7C,0xDC68, + 0xDC65,0xDC6A,0xDE98,0xDE99,0xDEAE,0xDE2B,0xDE2D,0xDE31,0xDE2E,0xDE2F, + 0xDC6D,0xDD31,0xDE2D,0xDE39,0xDE38, + /* plane 5, row 8 */ + 1 | (94 << 8), /* first, last */ + 0x345B,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD84E,0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0x3753,0xD846, + 0xD846,0xD846,0xD846,0xD87E,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD848,0xD848,0xD848, + 2, /* first low-surrogate */ + 0xDE3A,0xDE35,0xDE62,0xDCEA,0xDCEB,0xDD15,0xDDCC,0xDDC8, + 0xDDCD,0xDDDB,0xDDCB,0xDF11,0xDF26,0xDC62,0xDC5E,0xDC61,0xDD41,0xDD3F, + 0xDD75,0xDD65,0xDF49,0xDDEB,0xDE1A,0xDE57,0xDC6B,0xDCA9,0xDC54,0xDC62, + 0xDCAA,0xDC58,0xDC72,0xDC63,0xDC73,0xDC8B,0xDC8C,0xDC5C,0xDC51,0xDC16, + 0xDC60,0xDC61,0xDC5E,0xDC5D,0xDC64,0xDC53,0xDC5F,0xDC5B,0xDC6E,0xDC55, + 0xDC52,0xDC68,0xDDD2,0xDDD6,0xDDD3,0xDEB8,0xDEBB,0xDEEB,0xDEE8,0xDEB6, + 0xDEEA,0xDEE7,0xDEE9,0xDD91,0xDE10,0xDE0E,0xDE0F,0xDF0B,0xDF03,0xDF2B, + 0xDF09,0xDF28,0xDF2C,0xDF25,0xDF27,0xDF0F,0xDDE9,0xDDEC, 0,0xDF27, + 0xDF73,0xDFE2,0xDFE6,0xDC76,0xDC61,0xDC51,0xDD12,0xDD0E,0xDDAD,0xDDAF, + 0xDDB1,0xDDD3,0xDC94,0xDC92,0xDC90, + /* plane 5, row 9 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD848,0xD848,0x3880,0xD87E,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD849,0xD849,0x38DD,0xD849,0xD849,0xD849,0x38DE, + 0xD849,0x3922,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x6306,0xD84A,0xD84A, + 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x3ADB,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0x6B85,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0x3CDA,0x3CDB,0xD84F,0xD84F, + 1, /* first low-surrogate */ + 0xDC9D,0xDC93,0xDC95,0xDC98,0xDC97, 0,0xDC8A,0xDE07,0xDE0B, + 0xDE08,0xDFD9,0xDFD5,0xDCD7,0xDCDF, 0,0xDCDE,0xDCE3,0xDCE2, 0, + 0xDE47, 0,0xDE3D,0xDE38,0xDE44,0xDE3A,0xDEB8,0xDF2A,0xDF00,0xDEF3, + 0xDEF2,0xDEEB,0xDEFA,0xDEED,0xDEEC,0xDEFF,0xDEFB, 0,0xDF4E,0xDEEF, + 0xDEF7,0xDF10,0xDF11,0xDF0C,0xDF0B,0xDCDD,0xDD30, 0,0xDD7A,0xDD77, + 0xDF28,0xDF27,0xDF65,0xDC0E,0xDC0B,0xDC41,0xDC13,0xDC0F,0xDC12,0xDC30, + 0xDCA0,0xDCA3,0xDC9E,0xDC97,0xDCA1,0xDC9D,0xDC9B,0xDD63,0xDDE3,0xDDE4, + 0xDDE6,0xDDE7,0xDDDD, 0,0xDDEC,0xDDE5,0xDDF1,0xDF3B,0xDF39,0xDF3A, + 0xDF3C,0xDF3D,0xDF47,0xDF3F,0xDF44,0xDC48,0xDC49,0xDC60,0xDCE3,0xDCE9, + 0xDCF0, 0, 0,0xDCF2,0xDCED, + /* plane 5, row 10 */ + 1 | (94 << 8), /* first, last */ + 0xD84F,0xD84F,0xD84F,0x3CD7,0xD850,0xD850,0xD850,0xD850,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0x401A,0xD854,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856, + 1, /* first low-surrogate */ + 0xDCEC,0xDCE6,0xDD16, 0,0xDDBC,0xDDBE,0xDDC0,0xDDE0,0xDD00, + 0xDD02,0xDCFE,0xDD5E,0xDDB3,0xDDB7,0xDE3A,0xDE39,0xDE3E,0xDE38,0xDE3D, + 0xDE4F,0xDF6E,0xDF5F,0xDF81,0xDF82,0xDF71,0xDF7B,0xDF79,0xDF77,0xDF73, + 0xDF6F,0xDF97,0xDF7E,0xDCFC,0xDD11,0xDD32,0xDD31,0xDD10,0xDEEC,0xDEEB, + 0xDF2C,0xDF2D,0xDFDA,0xDC2E,0xDC2C,0xDC2A,0xDC33,0xDC4B,0xDD18,0xDD42, + 0xDD3B,0xDD3F,0xDD41,0xDD43,0xDD3C,0xDF4C,0xDF4A,0xDF49,0xDF56,0xDFCF, + 0xDC47,0xDC48,0xDC46,0xDD1B,0xDD11,0xDD14,0xDD1D,0xDD17,0xDD1E,0xDD0B, + 0xDD1C,0xDD12,0xDD16,0xDD0D,0xDD15,0xDD13,0xDD18, 0,0xDFAC,0xDC44, + 0xDC2C,0xDC45,0xDF66,0xDF6E,0xDF65,0xDF68,0xDF84,0xDD38,0xDD3B,0xDD3A, + 0xDD3F,0xDEDF,0xDEDD,0xDEDE,0xDEE2, + /* plane 5, row 11 */ + 1 | (94 << 8), /* first, last */ + 0x41D6,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858, + 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43DE, + 0xD859,0xD859,0xD859,0xD859,0xD859,0x43E5,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x4672, + 0xD85E,0x46AF,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,0x49C4,0xD863, + 0xD863,0xD840,0xD840,0xD840,0xD840,0xD840,0x3463,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0x34EC,0xD841,0xD841, + 2, /* first low-surrogate */ + 0xDE2C,0xDE2F,0xDF8F,0xDF90,0xDF8C,0xDF93,0xDE25,0xDE88, + 0xDEA7,0xDFF7,0xDCBB,0xDD38,0xDD39,0xDD37,0xDE14,0xDE6E,0xDE7B, 0, + 0xDE6C,0xDE7F,0xDE78,0xDE7A,0xDE6F, 0,0xDCFE,0xDF48,0xDF4B,0xDF41, + 0xDF49,0xDF3B,0xDE2D,0xDDE3,0xDE1A,0xDE0D,0xDE13,0xDE11,0xDE1C, 0, + 0xDCB5, 0,0xDC29,0xDCA1,0xDD24,0xDFBB,0xDEA1,0xDC83,0xDC8D,0xDC87, + 0xDC85,0xDC8A,0xDCA3,0xDC89,0xDC84,0xDCA2,0xDEB1,0xDEB0,0xDEAF,0xDEB6, + 0xDEC9,0xDECA,0xDEC8,0xDEB4,0xDC59,0xDCC9,0xDE41,0xDE4C, 0,0xDE45, + 0xDE5A,0xDCB9,0xDE94,0xDE6E,0xDEA2,0xDE67, 0,0xDEA3,0xDE76,0xDE6C, + 0xDE64,0xDEA5,0xDE30,0xDEA6,0xDE69,0xDEA4,0xDC90,0xDD5F,0xDD60,0xDDDA, + 0xDDD8,0xDDDD, 0,0xDF59,0xDF5B, + /* plane 5, row 12 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0x3598,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845, + 0xD840,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846, + 0xD846,0xD848,0x3758,0xD846,0xD846, + 1, /* first low-surrogate */ + 0xDF5A,0xDF39,0xDF34,0xDF44,0xDF33,0xDF3C,0xDF58,0xDF6A,0xDC6F, + 0xDC72,0xDC70,0xDC71,0xDC6E,0xDCF0,0xDCEB,0xDD49,0xDD4C,0xDDF5,0xDE20, + 0xDE6A,0xDE72,0xDF4B,0xDF5D,0xDC50,0xDCF9,0xDCFA,0xDCFB,0xDD23,0xDCB7, + 0xDD22,0xDCB5,0xDCC4,0xDCB4,0xDCEF, 0,0xDCCD,0xDCF0,0xDCB8,0xDCCB, + 0xDCF1,0xDCBA,0xDD03,0xDCF8,0xDCB6,0xDCBC,0xDCB3,0xDD21,0xDCF7,0xDCC2, + 0xDCBE,0xDCC9,0xDCBD,0xDCCE,0xDCB9,0xDCC7,0xDCCA,0xDCCC,0xDD26,0xDDE4, + 0xDDE0,0xDDF0,0xDEEC,0xDF24,0xDF18,0xDF2F,0xDF25,0xDD28,0xDD22,0xDD6A, + 0xDD57,0xDD94,0xDD92,0xDD9C,0xDE22,0xDE30,0xDE1D,0xDE23,0xDF35,0xDF33, + 0xDF2F,0xDF4D,0xDF31,0xDF5B,0xDF5A,0xDF32,0xDF5C,0xDF59,0xDF5D,0xDD69, + 0xDD6D,0xDE32, 0,0xDE0A,0xDE20, + /* plane 5, row 13 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0x37D3,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x38E2, + 0xD87E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0x3954,0xD849,0xD849,0x392F,0xD849, + 0xD849,0x39B6,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDE1F,0xDE0D,0xDFE8,0xDFEC,0xDC77,0xDC70,0xDC71,0xDDF8,0xDDD6, + 0xDDD9,0xDDDE,0xDDD5,0xDDE1, 0,0xDDE2,0xDDDD,0xDDE0,0xDE0E,0xDE08, + 0xDDDC,0xDE0A,0xDE0C,0xDCB4,0xDCB1,0xDCB6,0xDCBC,0xDE1D,0xDE24,0xDE19, + 0xDE1B,0xDE22,0xDE1A,0xDE1C,0xDE21,0xDFE6,0xDFE4,0xDFE7,0xDFEA, 0, + 0xDC9B,0xDCF0,0xDCF5,0xDCEF,0xDE42,0xDE6E,0xDE3C,0xDE97,0xDE8C,0xDE81, + 0xDE71,0xDECE,0xDEBA,0xDE7A,0xDE7E, 0,0xDE72,0xDEBB, 0,0xDE73, + 0xDE82, 0,0xDDBA,0xDDB8,0xDE4B,0xDE48,0xDF2B,0xDEF4,0xDF2C,0xDF42, + 0xDF48,0xDF44,0xDF45,0xDF3C,0xDF37,0xDF33,0xDF41,0xDF32,0xDF87,0xDF27, + 0xDF23,0xDF2D,0xDF1F,0xDF2C,0xDF28,0xDC75,0xDC74,0xDCE7,0xDD32,0xDD31, + 0xDD99,0xDD96,0xDD98,0xDD9D,0xDD92, + /* plane 5, row 14 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84C,0xD84C,0xD859,0x3B35,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0x3B5D,0xD84D,0xD84E,0x3C29,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851, + 0xD851,0x3E1F,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0x3E72,0xD851,0xD851,0xD851,0xD851,0xD852,0x3F0B,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD848,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDD94,0xDD95,0xDD97,0xDEB9, 0,0xDC11,0xDC3B,0xDC79,0xDC42, + 0xDC43, 0,0xDC78,0xDCAC, 0,0xDCB1,0xDCB4,0xDCB3,0xDCAF,0xDCAA, + 0xDCB2,0xDD68,0xDDF2,0xDDFE,0xDDF8,0xDDF9,0xDDFF,0xDDF5,0xDDF7,0xDDFD, + 0xDE00,0xDE88,0xDF6E,0xDF5D,0xDF63,0xDF60,0xDC61,0xDD37,0xDD71,0xDD23, + 0xDD22,0xDD1F,0xDD25,0xDDFD,0xDE11,0xDE23,0xDDF0,0xDDEF,0xDD0E,0xDD0C, + 0xDDBA, 0,0xDE52,0xDE55,0xDE53,0xDE54,0xDE51,0xDE58,0xDFB0,0xDF9F, + 0,0xDFA1,0xDF9A,0xDFBE,0xDFA0,0xDD37, 0,0xDEF1,0xDEF2,0xDF34, + 0xDF37,0xDF35,0xDF8C,0xDFDF,0xDC4C,0xDC4E,0xDC64,0xDC63,0xDC36,0xDD58, + 0xDD68,0xDD5B,0xDD5F,0xDD59,0xDD65,0xDD60,0xDD5E,0xDFD5,0xDFD6,0xDC4E, + 0xDC52,0xDD35,0xDD39,0xDD58,0xDD41, + /* plane 5, row 15 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0x40A2,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858, + 0xD84B,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43EC,0xD859,0xD859, + 0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDD57,0xDD38,0xDD3D,0xDD32,0xDD44,0xDD44,0xDF63,0xDF62,0xDFB8, + 0xDFB0,0xDFB1,0xDC4D,0xDC63,0xDC70,0xDC4B,0xDC4F,0xDC4E,0xDC53,0xDC47, + 0,0xDC54,0xDC52,0xDC59,0xDC7E,0xDE2B,0xDE2E,0xDF7F,0xDF7E,0xDF81, + 0xDF83,0xDD47,0xDD54,0xDD4D,0xDD4C,0xDD4B,0xDD57,0xDE65,0xDE64,0xDE61, + 0xDE62,0xDEF0,0xDEF3,0xDEF9,0xDEF4,0xDEF5,0xDEEF,0xDEF8,0xDEFC,0xDEF7, + 0xDEFD,0xDF17,0xDE34,0xDE36,0xDE38,0xDFAF,0xDFAE,0xDFAC,0xDFA2,0xDE28, + 0xDEC2,0xDE9C,0xDEB3,0xDE90,0xDC06,0xDC04,0xDC0B,0xDC05,0xDD40,0xDD4F, + 0xDEAB,0xDE9D,0xDEB8,0xDEB2,0xDED2,0xDECF,0xDEA2, 0,0xDEA5,0xDEA9, + 0xDEA7,0xDED0,0xDD02,0xDDCF,0xDDD0,0xDE16,0xDE19,0xDF75,0xDF71,0xDF91, + 0xDF72,0xDF8E,0xDF6D,0xDF88,0xDF73, + /* plane 5, row 16 */ + 1 | (94 << 8), /* first, last */ + 0x44BB,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0x4621,0xD85D,0xD85D,0xD85D,0x461F, + 0xD87E,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0x8C38,0xD85F, + 0xD85F,0xD85F,0xD85F,0x4791,0x4796,0xD85F,0xD85F,0xD85F,0xD85F,0xD860, + 0xD860,0xD860,0xD860,0x8ECE,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD864,0xD865,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840, + 2, /* first low-surrogate */ + 0xDF81,0xDF76,0xDF7B,0xDF7F,0xDF90,0xDF78,0xDE4B,0xDE48, + 0xDE5B,0xDE51,0xDE3D,0xDE40,0xDE46,0xDE4D,0xDE3B,0xDE4A,0xDE41,0xDE3E, + 0xDE4E,0xDDAC,0xDDE6,0xDDE9,0xDE29, 0,0xDE33,0xDE2E,0xDE1E, 0, + 0xDDC5,0xDE22,0xDE27,0xDFE7,0xDC0B,0xDD66,0xDFAD,0xDFAE, 0,0xDC2B, + 0xDC2A,0xDD2C,0xDD2D, 0, 0,0xDE8F,0xDE93,0xDFC6,0xDFC5,0xDE15, + 0xDE13,0xDEB1,0xDEA9, 0,0xDCA8,0xDCAB,0xDCBE,0xDCAC,0xDCA9,0xDCA6, + 0xDCC1,0xDECC,0xDED1,0xDED3,0xDEE4,0xDECB,0xDEE1,0xDED2,0xDEE3,0xDECF, + 0xDED0,0xDEE5,0xDF0E,0xDCCC,0xDCCA,0xDCCB,0xDE5C,0xDE61,0xDE5D,0xDE59, + 0xDC77,0xDE84,0xDC41,0xDCFD,0xDD1A,0xDD63,0xDEB6,0xDEB2,0xDEE9,0xDEE7, + 0xDED6,0xDF30,0xDEEC,0xDEDD,0xDEE8, + /* plane 5, row 17 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD841,0xD841,0x34BC,0xD841,0xD841,0x34D8, + 0xD841,0xD841,0x34F4,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD851,0xD845,0xD846,0xD846, + 0xD846,0xD846,0xD846,0x3785,0xD846,0x3783,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDEB0,0xDEB5,0xDEE1,0xDC98,0xDC99, 0,0xDD93,0xDDE5, 0, + 0xDF60,0xDF5E, 0,0xDC7B,0xDCF1,0xDCF3,0xDE7F,0xDC38,0xDF57,0xDF58, + 0xDD39,0xDDA7,0xDD35,0xDD60,0xDD51,0xDD62,0xDD42,0xDD3C,0xDD43,0xDDAB, + 0xDDA9,0xDDB4,0xDD79,0xDD6A,0xDD3B,0xDDAA,0xDD33,0xDD37,0xDD27,0xDDA8, + 0xDD70,0xDD2F,0xDD36,0xDDB5,0xDD30,0xDD3A,0xDD38,0xDDB1,0xDDAC,0xDD2E, + 0xDD75,0xDDB0,0xDDF7,0xDE00,0xDDF1,0xDDF3,0xDF60,0xDF61,0xDF32,0xDF2D, + 0xDF4A,0xDF2A,0xDD67,0xDDA2,0xDDA3,0xDD9E,0xDDA4,0xDE44,0xDE32,0xDF9B, + 0xDF98,0xDF99,0xDF9A,0xDF66,0xDF62,0xDF6B,0xDD62,0xDF67,0xDE3B,0xDE23, + 0xDE29,0xDF7E,0xDFF3, 0,0xDFF5, 0,0xDC80,0xDC7E,0xDC7C,0xDC7F, + 0xDC7D,0xDC81,0xDE25,0xDE29,0xDE17, + /* plane 5, row 18 */ + 1 | (94 << 8), /* first, last */ + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x38BA,0xD848, + 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0x3969,0xD849,0xD849,0x3945, + 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0x3B6C, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD87E, + 1, /* first low-surrogate */ + 0xDE63,0xDE67,0xDE65,0xDE2A,0xDE68,0xDE26,0xDE64,0xDE1B,0xDE62, + 0xDE69,0xDFFE,0xDC44,0xDC42,0xDCB7,0xDCD2,0xDCD4,0xDCD7,0xDCDC,0xDCD1, + 0xDCD5,0xDCCD,0xDCD8,0xDD9A,0xDE42,0xDE35,0xDE58,0xDE34,0xDE3C,0xDE3B, + 0xDE3E,0xDE3D,0xDE5A,0xDE41,0xDE38,0xDE45,0xDE33,0xDF26, 0,0xDFF7, + 0xDFEF,0xDFF0,0xDFEE,0xDC9D,0xDD06,0xDD11,0xDD08,0xDD02,0xDD0A,0xDD07, + 0xDE91,0xDE8E,0xDE85,0xDEE8,0xDF17,0xDED4, 0,0xDEC4,0xDED5, 0, + 0xDED8,0xDE80,0xDEDE,0xDF42,0xDDC7,0xDDBF,0xDF8D,0xDF89,0xDF90,0xDF9A, + 0xDFC8,0xDF92,0xDFA1,0xDF84,0xDF57,0xDF47,0xDF77,0xDF3A,0xDF50,0xDF42, + 0xDF43,0xDFA3,0xDC77,0xDDB2,0xDDE2,0xDDBD,0xDF74,0xDC82,0xDCB8, 0, + 0xDCBA,0xDCB9,0xDCBB,0xDC87,0xDCE4, + /* plane 5, row 19 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0xD84D,0xD840,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D04, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0x3E3A,0xD851,0xD851,0xD851,0x3E79, + 0xD851,0xD851,0x7309,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0x3F5D,0xD87E, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3F8A,0xD853,0xD853, + 0xD853,0xD87E,0xD854,0xD854,0xD854,0xD854,0x4027,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDC83,0xDCB7,0xDC43,0xDCCE,0xDCBA,0xDD73,0xDE09,0xDE0A,0xDE0B, + 0xDE07,0xDE05,0xDE0E,0xDE97,0xDF77,0xDF7B,0xDF7A,0xDF74,0xDF79,0xDD86, + 0xDDF5,0xDDA5,0xDD9D,0xDDBE,0xDD96,0xDDE1,0xDDA4,0xDDA1,0xDDF6, 0, + 0xDD8D,0xDD8B,0xDD78,0xDD98,0xDE0A,0xDE5D,0xDE27,0xDE5F,0xDDC0,0xDDC1, + 0xDE6D,0xDE5E,0xDE8A,0xDE62,0xDE64, 0,0xDFC0,0xDFCA,0xDFD1, 0, + 0xDFC7,0xDFCE, 0,0xDFC5,0xDD36,0xDD57,0xDD77,0xDEF6,0xDEF7,0xDF55, + 0xDF44,0xDF3E,0xDF42,0xDF52,0xDFE1,0xDC08,0xDC68,0xDC67, 0,0xDD37, + 0xDD7E,0xDD93,0xDD79,0xDD81,0xDD7D,0xDD7B,0xDD94, 0,0xDF66,0xDFD9, + 0xDFE0,0xDD3E,0xDC5F,0xDD5F,0xDD5E,0xDD68, 0,0xDD88,0xDD6A,0xDD6C, + 0xDD66,0xDD67,0xDD89,0xDD60,0xDD85, + /* plane 5, row 20 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0x4146,0x4140,0xD855,0x413F,0xD855,0xD855, + 0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0x419D,0x41CB,0xD856, + 0x41E1,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x427F,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0x4346,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD859,0xD859,0xD859,0xD859,0x441A,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDF2A,0xDF68,0xDFB9,0xDFBA,0xDFBE,0xDC6F,0xDC80,0xDC74,0xDC81, + 0xDC7A,0xDC9C,0xDC73,0xDC82,0xDC7F,0xDCA7,0xDC79,0xDC78,0xDC7D,0xDCA8, + 0xDC7C,0xDE68,0xDE4E,0xDF9E, 0, 0,0xDF98, 0,0xDF85,0xDF9C, + 0xDFC5,0xDF9A,0xDD68,0xDD65,0xDD67,0xDD61,0xDD60, 0, 0,0xDE7B, + 0,0xDF19,0xDF0E,0xDF31,0xDF12,0xDF10,0xDF15,0xDF3F,0xDF1D,0xDF1E, + 0xDE4D,0xDE48,0xDE45,0xDE42,0xDE49,0xDE4A,0xDE47, 0,0xDE4C,0xDFCD, + 0xDFD5,0xDFC4,0xDFCA,0xDFC3, 0,0xDE29,0xDEB4,0xDF6D,0xDF66,0xDF6A, + 0xDC15,0xDCD3,0xDCEC,0xDD55, 0,0xDED6,0xDED8,0xDF51,0xDEE0,0xDF03, + 0xDF04,0xDEDA,0xDEEA,0xDF02,0xDED3,0xDEE4,0xDEE5,0xDD3B,0xDD66,0xDE2C, + 0xDE21,0xDE26,0xDED4,0xDED5,0xDED9, + /* plane 5, row 21 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85A,0x44D3,0xD85B,0xD85A,0xD85A,0xD85B,0xD85A, + 0x44D0,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85C,0x458E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0x46C3,0x46B6,0xD85E,0xD85E,0xD85E,0x8A2F, + 0xD85E,0x46C0,0x46B8,0xD848,0xD849,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0x47D9,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDFD5,0xDFEB,0xDFC5, 0,0xDC27,0xDFF0,0xDFB9,0xDC18,0xDFEE, + 0,0xDFB7,0xDFBB,0xDFEF,0xDFB8,0xDFDF,0xDFDA,0xDFE3,0xDFC9,0xDFEC, + 0xDDA4, 0,0xDDA3,0xDE5E,0xDE61,0xDE62,0xDE63,0xDE8E,0xDE69,0xDE6B, + 0xDE85,0xDE8D,0xDE64,0xDE6D,0xDE4C,0xDE49,0xDE47,0xDE48,0xDE42,0xDE45, + 0xDE5B,0xDE5D,0xDE46,0xDC13,0xDC1A,0xDC0E,0xDC0F,0xDC1B,0xDC12,0xDCC3, + 0xDCBE,0xDCBD,0xDD79,0xDD7C, 0, 0,0xDD80,0xDD75,0xDD9B, 0, + 0xDD74, 0, 0,0xDC41,0xDC94,0xDC30,0xDCA7,0xDCA5,0xDCA4,0xDD3A, + 0xDE5B,0xDE9F,0xDEA8,0xDEB3,0xDEA1,0xDEA7,0xDEB2,0xDE9D,0xDEA3,0xDEA2, + 0xDFEF,0xDFD9, 0,0xDFD5,0xDFDD,0xDFDA,0xDFEE,0xDFD7,0xDE1A,0xDE19, + 0xDE18,0xDEB3,0xDEBF,0xDEBB,0xDEC0, + /* plane 5, row 22 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0x48EC,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD866,0xD866,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD840,0xD841,0xD841, + 0xD842,0xD842,0xD842,0xD842,0x52DC,0xD842,0xD842,0xD842,0x35CC,0xD843, + 0x35A2,0xD843,0xD843,0xD843,0xD843,0xD843,0x35B6,0xD843,0xD843,0x35C5, + 0x35C6,0xD843,0xD843,0xD843,0xD843, + 1, /* first low-surrogate */ + 0xDEB9,0xDEB8,0xDED5,0xDC11,0xDC10,0xDCC3,0xDCC2,0xDCE9,0xDCCD, + 0xDCE5,0xDCCA,0xDCC7,0xDCE8,0xDEF1,0xDF0C,0xDEEF,0xDEEE,0xDEF3,0xDF0D, + 0xDEF6,0xDEF0, 0,0xDFF5,0xDFF4,0xDFF8,0xDFFE,0xDD11,0xDD22,0xDD42, + 0xDC5C,0xDC5A,0xDC5D,0xDCD1,0xDCD0,0xDE75,0xDE7B,0xDF89,0xDC4D,0xDE89, + 0xDE92,0xDE8C,0xDE88,0xDC67,0xDC68,0xDF21,0xDEF2,0xDF09,0xDEF8,0xDEF0, + 0xDEF3,0xDEF5,0xDEFB,0xDEF7,0xDEEF,0xDF0B,0xDCA2,0xDDF5,0xDDF3,0xDDF4, + 0xDDF2,0xDE98,0xDF68,0xDF80,0xDF85,0xDF8E,0xDF8F,0xDEF4,0xDF86,0xDFA4, + 0xDC86,0xDC89,0xDC87,0xDC85, 0,0xDC88,0xDEFF,0xDF66, 0,0xDDC3, + 0,0xDDC4,0xDE3B,0xDDE7,0xDDF8,0xDDFB, 0,0xDDBE,0xDDC6, 0, + 0,0xDDFC,0xDDC0,0xDE33,0xDDC9, + /* plane 5, row 23 */ + 1 | (94 << 8), /* first, last */ + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x3683,0x5921, + 0xD845,0xD842,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x36F8,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x36F6,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847, + 0x379B,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0x5E3F,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDDFE,0xDDDA,0xDDCC,0xDDBB,0xDDFD,0xDDDF,0xDDCD,0xDDC2,0xDDC8, + 0xDE32,0xDE2D,0xDDD2,0xDE31,0xDDD3,0xDE2E,0xDDCF,0xDDFF,0xDE09,0xDDFC, + 0xDF72,0xDFAA,0xDFAB,0xDFA7,0xDF7B,0xDF76,0xDFA8,0xDFAC, 0, 0, + 0xDDAA,0xDE03,0xDDAC,0xDDAD,0xDDAB,0xDE50,0xDE58,0xDFDD, 0,0xDFAE, + 0xDFA2,0xDFAB,0xDFE3,0xDFAF,0xDFE0,0xDFE4, 0,0xDFA7,0xDFAA,0xDFE2, + 0xDFE1,0xDFDF,0xDFAD,0xDFE5,0xDFD1,0xDFAC,0xDFD5,0xDFA3,0xDF9F,0xDD79, + 0xDD76,0xDE43,0xDE3D,0xDE47,0xDE44,0xDE3F,0xDE5B,0xDF7F,0xDC9A,0xDC9C, + 0,0xDD1E,0xDE88,0xDE6A,0xDE76,0xDE72,0xDE70,0xDE7E,0xDE6C,0xDE6F, + 0xDE75,0xDE77,0xDE78,0xDE8A,0xDE79,0xDE94,0xDC01,0xDD05,0xDCF1,0xDCEE, + 0xDCEF,0xDD04, 0,0xDCFA,0xDD07, + /* plane 5, row 24 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x388D, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0x3956,0xD849,0xD849,0xD84A,0xD849,0xD849, + 0x395B,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B, + 0xD84A,0xD84B,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84A,0xD84B,0xD84A, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0x3A96,0xD84B,0xD84B, + 1, /* first low-surrogate */ + 0xDCF4,0xDCF5,0xDD9C,0xDE6D,0xDE69,0xDE66,0xDE62,0xDE46, 0, + 0xDE65,0xDE5D,0xDE5E,0xDE5F,0xDF8E,0xDC02,0xDC06,0xDC04,0xDC03,0xDC62, + 0xDD27,0xDD21,0xDD20,0xDD24,0xDD29,0xDD31,0xDD23,0xDD22,0xDEDC,0xDF4D, + 0xDEE5,0xDED3,0xDEEE,0xDEE6, 0,0xDF36,0xDF40,0xDC3F,0xDF3D,0xDF44, + 0,0xDF5F,0xDF29,0xDF49,0xDF8A,0xDF2A,0xDF87,0xDF4C,0xDF31,0xDF48, + 0xDF2B,0xDF3B,0xDF41,0xDEC9,0xDF34,0xDF53,0xDF35,0xDF47,0xDF38,0xDDD1, + 0xDDD2,0xDE51,0xDE55,0xDE52,0xDE53,0xDF8F,0xDFF4,0xDC47,0xDC0D,0xDC1C, + 0xDFFB,0xDC19,0xDFF7,0xDFF9,0xDFF5,0xDFE9,0xDC0A,0xDFEE,0xDC0B,0xDFFD, + 0xDC06,0xDC02,0xDC16,0xDC18,0xDFF0,0xDED4,0xDF66,0xDF6A,0xDF75,0xDF76, + 0xDF80,0xDF6D, 0,0xDF69,0xDF67, + /* plane 5, row 25 */ + 1 | (94 << 8), /* first, last */ + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3B7E, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3B81,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3C35,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C9B, + 0xD84E,0xD84F,0x3D00,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851, + 1, /* first low-surrogate */ + 0xDF68,0xDF5D,0xDCA4,0xDCFE,0xDCFD,0xDDEC,0xDDE9,0xDE21,0xDDEB, + 0xDDE7,0xDDF2,0xDE20,0xDF7A,0xDD2D,0xDD2E,0xDCCA,0xDD2F,0xDCC8, 0, + 0xDCCB,0xDCC3,0xDC84,0xDCD2,0xDCC6, 0,0xDCCF,0xDCD5,0xDCD4,0xDCDD, + 0xDD2B,0xDDA3,0xDCDB,0xDD2C,0xDD13, 0,0xDCD1,0xDCCC,0xDCD5,0xDCC9, + 0xDCCF,0xDCD2,0xDD7B,0xDD7C,0xDE23,0xDE1D,0xDE1C,0xDE1E,0xDE22,0xDE24, + 0xDE20,0xDE18,0xDE21,0xDF88,0xDF8A,0xDF94,0xDF8F,0xDF8E,0xDF90, 0, + 0xDFA7,0xDC64, 0,0xDE18,0xDE14,0xDE1D,0xDE05,0xDDFF,0xDE1B,0xDE1A, + 0xDE19,0xDE03,0xDE0E,0xDE47,0xDE04,0xDE5A,0xDE07,0xDE20,0xDE6A,0xDE66, + 0xDE7A,0xDE65,0xDEAF,0xDDCD,0xDDCF,0xDDD1,0xDDCE,0xDE5F,0xDE77,0xDE74, + 0xDE88,0xDE75,0xDE89,0xDE72,0xDFC6, + /* plane 5, row 26 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD852,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852, + 0xD852,0xD852,0xD852,0x3ED3,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3F9F,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0x40B1,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x414B, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856, + 1, /* first low-surrogate */ + 0xDFEA,0xDFE0,0xDC07,0xDFE6,0xDFE5,0xDFDD,0xDFE3,0xDFDA,0xDDAE, + 0xDD7E,0xDD7D,0xDD7F, 0,0xDDD9,0xDEFA,0xDEFB,0xDF4D,0xDF54,0xDF51, + 0xDF50,0xDD98,0xDD95,0xDD9D,0xDDC1,0xDD9A,0xDD9B, 0,0xDD9C,0xDDD7, + 0xDDA4,0xDD96,0xDDA0,0xDF31,0xDFE9,0xDC6E,0xDD9A,0xDDA5,0xDD94,0xDDA6, + 0xDD99,0xDD8B,0xDD98,0xDD91,0xDD8C,0xDDA1,0xDDA3,0xDDC6,0xDF6F,0xDF6D, + 0xDF6A,0xDF6C,0xDF71,0xDF6E,0xDFDF,0xDCAC,0xDCAA, 0,0xDCB5,0xDCAD, + 0xDCB2,0xDCB3,0xDCAB,0xDCB6,0xDCC7,0xDCC6,0xDE6C,0xDE70,0xDFB3, 0, + 0xDD8C,0xDD81,0xDD83,0xDD7D,0xDD85,0xDD90,0xDDA2,0xDD8D,0xDD8F,0xDD7E, + 0xDD8A,0xDD7F,0xDD76,0xDD87,0xDD78,0xDE80,0xDE82,0xDE81,0xDE83,0xDF5A, + 0xDF34,0xDF2C,0xDF2A,0xDF40,0xDF2D, + /* plane 5, row 27 */ + 1 | (94 << 8), /* first, last */ + 0xD856,0xD856,0xD856,0x7B3F,0xD856,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0x42D6,0xD857,0xD857,0xD858,0xD857,0xD857,0xD857,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x4389,0xD859,0xD859,0xD859, + 0xD859,0xD85A,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0x4400,0xD859,0xD859,0xD87E,0xD859, + 0xD85A,0xD85A,0xD85A,0xD85B,0x44DC,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x83D0, + 0x4590,0xD85C,0xD85C,0xD85C,0x45B1,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0x86E7,0xD85C,0xD85C,0xD85C, + 1, /* first low-surrogate */ + 0xDF33,0xDF2B,0xDF4B, 0,0xDF3C,0xDE5A,0xDE77,0xDE60,0xDFFA, + 0xDFF9,0xDFFC, 0,0xDFF5,0xDFE8,0xDC09,0xDFE7,0xDFE6,0xDFE9,0xDE32, + 0xDE2C,0xDEBD,0xDEBC,0xDF7A,0xDF7E,0xDF79, 0,0xDC23,0xDC30,0xDC28, + 0xDCD4,0xDECE,0xDCF1,0xDCF0,0xDD60,0xDD65,0xDEA8,0xDF0A,0xDF1B,0xDF12, + 0xDF07,0xDF4F,0xDF0E,0xDF52,0xDF16, 0,0xDF53,0xDF54,0xDD84,0xDF56, + 0xDD6D,0xDD72,0xDE2F,0xDC2A, 0,0xDC63,0xDC84,0xDCAF,0xDC45,0xDC70, + 0xDC56,0xDC16,0xDC3D,0xDC38,0xDC6F,0xDC77,0xDC2E,0xDC31,0xDC4C,0xDC5F, + 0xDC75,0xDC39,0xDC3A,0xDC2C,0xDC2D,0xDC3F,0xDC2F,0xDC30,0xDC3E, 0, + 0,0xDDB2,0xDEB7,0xDE8F, 0,0xDE96,0xDE9E,0xDE97,0xDE95,0xDEA5, + 0xDE98, 0,0xDEA3,0xDE9A,0xDEAD, + /* plane 5, row 28 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x45AA,0xD85C,0xD85C,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0x467D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0x4769,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0x47A1,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0x47E7,0xD85F,0xD860,0x47EC,0xD85F,0xD85F,0xD860,0x47DF,0xD860,0xD860, + 0xD860,0x4833,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861, + 1, /* first low-surrogate */ + 0xDEA6,0xDEB6,0xDE99,0xDEAF,0xDEAC, 0,0xDE9F,0xDE94,0xDDEB, + 0xDE6F,0xDE6D,0xDE7E,0xDE6C,0xDE61,0xDE63,0xDE6B,0xDE5E,0xDE3E,0xDE64, + 0xDEAD, 0,0xDC20,0xDCD1,0xDCD5,0xDDAE,0xDDAF,0xDD9F,0xDDA8,0xDDCA, + 0xDFE1,0xDC39,0xDC38,0xDC3B,0xDCAD,0xDCB5,0xDCAF,0xDCB1,0xDCAE,0xDCB4, + 0xDCB0,0xDD4B,0xDD51,0xDD4C, 0,0xDD60,0xDEBE,0xDEB9,0xDEB7,0xDEB6, + 0,0xDEBD,0xDEB8,0xDEC1,0xDFF7,0xDFF3,0xDFF4,0xDFFB,0xDFFD,0xDFF5, + 0,0xDFFA,0xDC14, 0,0xDFF2,0xDFFC,0xDC00, 0,0xDE2B,0xDE29, + 0xDE2E, 0,0xDED7,0xDEDB,0xDED9,0xDED8,0xDEE6,0xDED6,0xDED1,0xDEE7, + 0xDED0,0xDEDC,0xDCED,0xDD1A,0xDD19,0xDD16,0xDCEC,0xDCEF,0xDCEE,0xDCF4, + 0xDD2F,0xDF30,0xDF19,0xDF18,0xDF11, + /* plane 5, row 29 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD87E, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866, + 0x4BEE,0xD867,0x4C32,0xD84C,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0x34FC,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0x352A,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842, + 1, /* first low-surrogate */ + 0xDF16,0xDF12,0xDF10,0xDF14,0xDC0C,0xDC0D,0xDD10,0xDD29,0xDD28, + 0xDC65,0xDC66,0xDCDE,0xDCDF,0xDCE0,0xDCD9,0xDCDB,0xDCD8,0xDCE3,0xDCD7, + 0xDEA6,0xDEA7,0xDEBF,0xDEA8,0xDE9F,0xDEA1,0xDEA2,0xDEAD,0xDEA3,0xDEA0, + 0xDC83,0xDC85,0xDC82,0xDC84,0xDDEE,0xDE5D,0xDF92,0xDC55,0xDC53,0xDDFC, + 0xDC51,0xDC52,0xDC50,0xDD9D,0xDE87,0xDE97,0xDE9B,0xDE9D,0xDC69,0xDE11, + 0,0xDC7A, 0,0xDE44,0xDCC6,0xDF40,0xDF2E,0xDF68,0xDF2D,0xDF34, + 0xDF32,0xDF69,0xDF31,0xDF6A,0xDF3E,0xDF6F,0xDF75,0xDCF6,0xDD20,0xDD28, + 0xDD67,0xDDFB,0xDDFE,0xDDFC,0xDDFD,0xDDFF,0xDDFA,0xDFAC,0xDFAF,0xDFB1, + 0,0xDFBF,0xDFBE,0xDFA7,0xDFAA,0xDC94,0xDC93,0xDC99, 0,0xDCFA, + 0xDD56,0xDE22,0xDE91,0xDE92,0xDF08, + /* plane 5, row 30 */ + 1 | (94 << 8), /* first, last */ + 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0x35D3,0xD843,0xD843,0xD843,0x35D7, + 0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD846,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0x37F3,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDF06,0xDDD6,0xDE37,0xDE4B,0xDECE,0xDED0,0xDE39,0xDE64,0xDECF, + 0xDE46,0xDE66,0xDE56,0xDE43,0xDE4A,0xDE58,0xDE65,0xDE5A,0xDE5B,0xDE55, + 0xDE50,0xDE4C,0xDECD,0xDE51,0xDE47, 0,0xDE53,0xDE62,0xDECC, 0, + 0xDE7F,0xDE4D,0xDE0A,0xDE0C,0xDE0F,0xDFBB,0xDFB9,0xDFEB,0xDFAE,0xDFC1, + 0xDFEA,0xDFBE,0xDFBF,0xDFBA,0xDFB7,0xDFB3,0xDFE9,0xDD6E,0xDDAF,0xDDB3, + 0xDDB2,0xDE68,0xDE69,0xDE6A,0xDFDE,0xDFEB,0xDC11,0xDFED,0xDFE9,0xDFF7, + 0xDFF4,0xDFEA,0xDC12,0xDFE8,0xDC13,0xDD8E,0xDD86,0xDE63,0xDE65,0xDF99, + 0xDCC2,0xDCAE,0xDCB0,0xDCAD,0xDEB4,0xDED1,0xDEAD, 0,0xDEBD,0xDEB7, + 0xDEAB,0xDEAF,0xDEC1,0xDEB5,0xDD0F,0xDD0E,0xDD1C,0xDD13,0xDD0A,0xDD1E, + 0xDD14,0xDD1A,0xDDCB,0xDE87,0xDE93, + /* plane 5, row 31 */ + 1 | (94 << 8), /* first, last */ + 0x3891,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0x38C0, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0x6117,0xD849,0x3963,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0x3970,0xD849,0xD849,0xD849,0xD840,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B02,0xD84C,0xD84C,0xD84C, + 0xD87E,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 2, /* first low-surrogate */ + 0xDE84,0xDE85,0xDE92,0xDE80,0xDF2B,0xDF63,0xDC0A, 0, + 0xDC66,0xDD34,0xDD33,0xDD4D,0xDF89,0xDF57, 0,0xDF4A, 0,0xDF39, + 0xDF3F,0xDF90,0xDF8F,0xDFB2,0xDF9F,0xDF95,0xDFA1,0xDF9C,0xDF8E,0xDFA0, + 0xDFAE,0xDF96,0xDFCA,0xDFAC, 0,0xDFA6,0xDF97,0xDF93,0xDFB6,0xDDD6, + 0xDDE0,0xDDD8,0xDE56,0xDC6E,0xDC7E,0xDC74,0xDC77,0xDC80,0xDC7A,0xDC6B, + 0xDC5F,0xDC76,0xDCB0,0xDC63,0xDF92,0xDF82,0xDF9D,0xDF94,0xDF83,0xDF8B, + 0xDF84,0xDC57,0xDC84,0xDCB5,0xDD09,0xDDE6, 0,0xDE25,0xDE51,0xDF3E, + 0xDCDA,0xDF85,0xDD3F,0xDD42,0xDD38,0xDD3A,0xDD4E,0xDD45,0xDD39,0xDD37, + 0xDD44,0xDCE7,0xDDA4,0xDD3D,0xDD41,0xDCDF,0xDCDE,0xDCCA,0xDCE9,0xDCE2, + 0xDCE0,0xDD89,0xDD87,0xDE32,0xDE33, + /* plane 5, row 32 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0x3D35,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD851,0xD851,0xD851,0xD865,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3EE0,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0x3F9A,0xD853,0xD853,0xD853,0x3FA3,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x4005, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD84E,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDEAC,0xDEF9,0xDF0D,0xDFB9,0xDE5E,0xDE6A, 0,0xDE81,0xDE69, + 0xDEAC,0xDE80,0xDE75,0xDE71,0xDE76,0xDE6F,0xDEB6,0xDF03,0xDEBF,0xDF01, + 0xDEB2,0xDEC4,0xDDDB,0xDDDC,0xDDD8,0xDE72,0xDEB5,0xDEA8,0xDE8F,0xDE9E, + 0xDE8E,0xDFDE,0xDFE2,0xDC20,0xDC1D,0xDC1A,0xDC19,0xDC2B,0xDC18,0xDC10, + 0xDC0E,0xDC24,0xDC1F,0xDC13,0xDC35,0xDD83, 0,0xDDD7,0xDF02,0xDF03, + 0xDF5C,0xDF5F,0xDFC7,0xDC9A,0xDC97,0xDCA3,0xDDF7,0xDDC6,0xDDCC,0xDDD6, + 0xDDCD,0xDDF9,0xDDD9,0xDDD8, 0,0xDDD1,0xDDCE,0xDDD5, 0,0xDDD4, + 0xDDF8,0xDF7A,0xDF79,0xDF7F,0xDFF3,0xDFF5,0xDFF6,0xDFF4,0xDFF7, 0, + 0xDC79,0xDD9C,0xDDDF,0xDDF5,0xDDFF,0xDDD1,0xDDDA,0xDDCF,0xDDCD,0xDDDE, + 0xDDD8,0xDEAD,0xDDE0,0xDDFE,0xDD9E, + /* plane 5, row 33 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x415E,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0x41A6,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x435D, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859, + 0x43B8,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859, + 1, /* first low-surrogate */ + 0xDF75,0xDF73,0xDF72,0xDFD8,0xDCD0,0xDCD6,0xDCD7,0xDCCA,0xDCCD, + 0xDE8A,0xDE89,0xDE8B,0xDFD3,0xDFDA,0xDFCE,0xDFD2, 0,0xDFD4,0xDFD7, + 0xDFD5,0xDFFB,0xDFCD,0xDFFA,0xDFD6, 0,0xDD9B,0xDD9E,0xDD9D,0xDDA4, + 0xDD9F,0xDDA5,0xDDA8,0xDE8F,0xDE8C,0xDE95,0xDF60,0xDF55,0xDF5C,0xDF6F, + 0xDF51,0xDF61,0xDFA7,0xDF5E,0xDF62,0xDF54,0xDF6E,0xDF52,0xDF58,0xDF6D, + 0xDF5F,0xDF6C,0xDF50,0xDF5D,0xDF8E,0xDE72,0xDE78,0xDE75,0xDE76,0xDE7C, + 0xDE7E,0xDE7D,0xDC15,0xDC14,0xDC1D,0xDC1C,0xDC23,0xDC57,0xDEC8, 0, + 0xDEC9,0xDEC5,0xDF87,0xDF8A,0xDF94,0xDC39,0xDC40,0xDC3E,0xDC38,0xDCD6, + 0,0xDD77,0xDD78,0xDD7D,0xDEDD,0xDF5E,0xDF77,0xDFD4,0xDF66,0xDF5F, + 0xDF73,0xDF72,0xDF97,0xDF5A,0xDF96, + /* plane 5, row 34 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x4434,0xD859, + 0xD85A,0xD85A,0xD85A,0x446F,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C, + 0xD85C,0x4594,0x4593,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0x8714,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x88D1,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 1, /* first low-surrogate */ + 0xDF5D,0xDF65,0xDF70,0xDF75,0xDF74,0xDF5C,0xDF60, 0,0xDF6D, + 0xDD41,0xDE3C,0xDE3E, 0,0xDE49,0xDFE4,0xDD0C,0xDD15,0xDD0E,0xDCD4, + 0xDCC7,0xDD14,0xDCDB,0xDD5F,0xDCED,0xDD09,0xDCCF,0xDCFF,0xDD1A,0xDCF5, + 0xDCEE,0xDCE5,0xDD0D,0xDCDF,0xDCEC,0xDCD7,0xDD2C,0xDCCD,0xDCE3,0xDD00, + 0xDCEB,0xDCFD,0xDD0F,0xDD2D,0xDD50,0xDCFE,0xDCC4,0xDCE1,0xDCF9,0xDDBB, + 0xDDBC, 0, 0,0xDDBA,0xDED0,0xDED6,0xDECE,0xDEE1,0xDED5,0xDECF, + 0xDED3, 0,0xDED4,0xDDB5,0xDE90,0xDEA1,0xDE81,0xDE85,0xDE6E,0xDE88, + 0xDE82,0xDE86,0xDE8F,0xDE89,0xDE80,0xDE84, 0,0xDC29,0xDC2B,0xDC2A, + 0xDC30,0xDCE2,0xDCE3,0xDCE1,0xDDD5,0xDDC4,0xDDC9,0xDDE0,0xDDDF,0xDDCB, + 0xDDDD,0xDDE8,0xDDD4,0xDE1C,0xDFB5, + /* plane 5, row 35 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0x8CCB,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0x4792,0xD85F,0xD85F,0xD85F,0x47AA,0xD85F,0xD85F,0xD85F,0x47A7,0xD85F, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0x47EF,0xD860,0xD860,0xD860,0xD860,0x8EED,0xD860, + 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0x4922,0xD862,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDFB6,0xDFE5,0xDC45,0xDC49,0xDC40,0xDC46,0xDC44,0xDC4A,0xDCC9, + 0xDCC4,0xDCC2,0xDD68, 0,0xDD82,0xDD6B,0xDD67,0xDD6C,0xDD6D,0xDD71, + 0,0xDED7,0xDED2,0xDED9, 0,0xDEBC,0xDEDD,0xDED6, 0,0xDED8, + 0xDC20,0xDC16,0xDC18,0xDC15,0xDC19,0xDC27,0xDC50,0xDC1D,0xDC2C,0xDC1C, + 0xDC29,0xDC2B,0xDC24, 0,0xDC28,0xDE39,0xDEF2,0xDEF0, 0,0xDEED, + 0xDEEF,0xDEEA,0xDF01,0xDCBC,0xDD5C,0xDD5B,0xDD5A,0xDD26,0xDF43,0xDF33, + 0xDF3A,0xDF37,0xDF36,0xDF3C,0xDF34,0xDF4A,0xDF3B,0xDF35,0xDF3D,0xDF40, + 0xDF3E,0xDF17,0xDC26,0xDC24,0xDC10,0xDC36,0xDC25, 0,0xDD66,0xDC7F, + 0xDC7A,0xDCFB,0xDCFD,0xDCFC,0xDCFA,0xDED6,0xDED2,0xDEC8,0xDEC2,0xDEC7, + 0xDECD,0xDEC1,0xDEC6,0xDECC,0xDFA1, + /* plane 5, row 36 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0x4AB5,0xD87E,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD866,0x4B75,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD868,0xD869,0xD840,0xD840,0x3482,0xD840,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x52EC,0xD842,0xD842, + 0xD842,0x52E8,0xD842,0xD842,0xD842,0xD842,0x3535,0xD842,0xD842,0xD842, + 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD840, + 1, /* first low-surrogate */ + 0xDC95,0xDC94,0xDC97,0xDC96,0xDC93,0xDCA1,0xDE09,0xDE08,0xDE67, + 0xDE65,0xDE62,0xDE61,0xDF97,0xDC01,0xDC19,0xDC18,0xDC5C,0xDC67,0xDC6C, + 0,0xDDFD,0xDC66,0xDC61,0xDC6E,0xDC5D,0xDC5A,0xDDA2,0xDDA9,0xDDA5, + 0xDDA6,0xDDB2,0xDDA3,0xDEAC,0xDEAA,0xDEAF,0xDEAB,0xDEB1,0xDEC6,0xDEAD, + 0xDEB9,0xDC70, 0,0xDC0C,0xDC81,0xDC83,0xDC7E,0xDD51,0xDF99,0xDF94, + 0xDF95,0xDEFE,0xDC18,0xDD05,0xDF72, 0,0xDF99,0xDCAD,0xDE06,0xDFC2, + 0xDFCB,0xDFD5,0xDFD2,0xDFCC,0xDFD7,0xDFC5,0xDFCA, 0,0xDCA2,0xDCA3, + 0xDCA1, 0,0xDCA6,0xDCA4,0xDCFF,0xDD00, 0,0xDE06,0xDE25,0xDE9F, + 0xDF7F,0xDEEA,0xDEEB,0xDEDE,0xDF18,0xDEE0,0xDEE8,0xDEDF,0xDEF1,0xDEEC, + 0xDF1A,0xDEE6,0xDEE1,0xDF5D,0xDC77, + /* plane 5, row 37 */ + 1 | (94 << 8), /* first, last */ + 0xD843,0x35F0,0xD843,0xD844,0xD845,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD845,0xD845,0xD855,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848, + 0xD848,0xD85A,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0x38F0,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849,0xD849,0xD849,0xD849, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDF1E, 0,0xDF80,0xDE17,0xDC1D,0xDFF7,0xDFEF,0xDFEE,0xDFED, + 0xDFF5,0xDC1E,0xDDBD,0xDFFF,0xDDBE,0xDE6D,0xDE76,0xDC4C,0xDC19,0xDC48, + 0xDC1E,0xDC4A,0xDC49,0xDC26,0xDD95,0xDE85,0xDE7E,0xDE97,0xDE7D,0xDF42, + 0xDF9E,0xDC0C,0xDC0B,0xDC0E,0xDCCF,0xDED8,0xDEE0,0xDEE8,0xDEE9,0xDEE2, + 0xDEE1,0xDEDA,0xDEE3,0xDED9,0xDEF0,0xDEE7,0xDEE4,0xDD23,0xDD31,0xDD33, + 0xDD0C,0xDDE0,0xDD26,0xDD24,0xDD32,0xDD27,0xDD21,0xDD30,0xDDA2,0xDDCC, + 0xDE96,0xDC8F,0xDE98,0xDE9C,0xDE9B,0xDF6B,0xDC12,0xDC14,0xDD5A,0xDD54, + 0xDD51,0xDD5E,0xDD58, 0,0xDD59,0xDF9A,0xDFF2,0xDFAD,0xDC20,0xDFF1, + 0xDFF0,0xDFF3,0xDFF4,0xDFE9,0xDFFE,0xDC2E,0xDFE8,0xDFE7,0xDFFF,0xDFF5, + 0xDDE5,0xDDE7,0xDDE6,0xDDE9,0xDE58, + /* plane 5, row 38 */ + 1 | (94 << 8), /* first, last */ + 0xD84B,0xD84B,0x3A3E,0xD84B,0x3A39,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD87E,0xD84B,0x3AA2,0xD84B,0x3AA1,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84C,0x3B3B,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0x3BB7,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0x3C57,0x3C70,0xD84E,0xD84E,0xD84E,0xD866,0xD84E, + 0xD84E,0xD84E,0x3CA7,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D54,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850, + 1, /* first low-surrogate */ + 0xDC6C,0xDCD9, 0,0xDCCB, 0,0xDCBE,0xDCB5,0xDCD1,0xDCC2, + 0xDCB6,0xDCD3,0xDCC2,0xDEDA, 0,0xDFAE, 0,0xDFAC,0xDFA9,0xDFBA, + 0xDFA7,0xDFB3,0xDFBD,0xDFB1,0xDD0E,0xDD11,0xDD0F,0xDE52,0xDE6A,0xDE54, + 0xDE55,0xDE53,0xDE57,0xDCD0,0xDE5B,0xDE58,0xDE59, 0,0xDDB8,0xDDB5, + 0xDDBF,0xDDC1,0xDDBB, 0,0xDDC3,0xDDAD,0xDDA8,0xDDAE,0xDDAA,0xDDD0, + 0xDDB1,0xDDBC,0xDDB7,0xDDB0,0xDDFA,0xDDFB,0xDDB9,0xDD07,0xDCFC,0xDCFF, + 0xDCF2,0xDCF8,0xDCF4, 0, 0,0xDEAE,0xDF0F,0xDF10,0xDEC1,0xDFC7, + 0xDFC6,0xDFCE, 0,0xDFDC,0xDED5,0xDED3,0xDF20,0xDEE2,0xDEF1,0xDEDB, + 0xDEEA,0xDEEB,0xDEE1,0xDEFF,0xDED6,0xDEE0,0xDED7,0xDEE5, 0,0xDF1B, + 0xDF10,0xDF0F,0xDF0E,0xDF39,0xDF0A, + /* plane 5, row 39 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0x3F31,0x7527,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD866,0xD853,0xD853,0xD853,0xD853,0x3FBF,0xD853,0x3FE4, + 0xD854,0xD854,0xD854,0xD854,0xD854,0x404A,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0x40CF,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0x798C, + 1, /* first low-surrogate */ + 0xDF14,0xDF0C,0xDD23,0xDD5A,0xDDE2,0xDE93,0xDEB0,0xDEAB,0xDEBD, + 0xDEB1,0xDE8D,0xDEAD,0xDEAA,0xDEAC,0xDEBC,0xDEC9,0xDC47,0xDC62,0xDC40, + 0xDC44,0xDC3F,0xDC43,0xDC3D,0xDC60,0xDC5F,0xDC3A,0xDC42,0xDC5E,0xDC5D, + 0xDDBC,0xDDE0,0xDDEE,0xDDEB,0xDE0D,0xDF09,0xDF0C,0xDF69,0xDF74,0xDF67, + 0, 0,0xDCAD,0xDDFF,0xDE16,0xDE08,0xDE09,0xDE00,0xDDFC,0xDE13, + 0xDE14,0xDE0A,0xDC3E,0xDE29,0xDE17,0xDE3B,0xDDFB, 0,0xDE0E, 0, + 0xDC08,0xDE1B,0xDE1A,0xDE19,0xDE02, 0,0xDE17,0xDE07,0xDE13,0xDE09, + 0xDE0A,0xDE12,0xDEAA,0xDE38,0xDF7B,0xDF7C,0xDF7A,0xDFEA,0xDFEB,0xDFEF, + 0xDFF0,0xDD09,0xDD02,0xDD01,0xDD2B,0xDD07, 0,0xDD28,0xDCFB,0xDD2A, + 0xDCFE,0xDD04,0xDD29,0xDD0A, + /* plane 5, row 40 */ + 1 | (94 << 8), /* first, last */ + 0xD855,0x7991,0xD855,0x4114,0xD84B,0xD847,0xD856,0xD855,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0x420D,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x4201,0xD856, + 0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858, + 0xD858,0xD858,0x42F1,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859, + 1, /* first low-surrogate */ + 0xDEC2, 0,0xDEA6, 0,0xDFC6,0xDC07,0xDC0A,0xDFFD,0xDC06, + 0xDC0D,0xDC09,0xDC0B,0xDC00,0xDC05,0xDC3D,0xDDD5,0xDDBF,0xDDBA,0xDDC7, + 0xDE98,0xDE9A, 0,0xDFA4,0xDF9C,0xDF9D,0xDFA2,0xDF96,0xDF95,0xDFA5, + 0xDFAA,0xDFAD,0xDF9A,0xDFA3,0xDF97,0xDF90,0xDFAF,0xDF8D, 0,0xDFA8, + 0xDFEE,0xDEA3,0xDE99,0xDEA1,0xDE9C,0xDEA4,0xDECB,0xDC56,0xDC48,0xDC59, + 0xDC4A,0xDC5C, 0,0xDC4F,0xDC4D,0xDC5D,0xDE3A,0xDEE3,0xDEE1,0xDEDE, + 0xDF97,0xDF9A,0xDC48,0xDC4A,0xDC4C,0xDC4E,0xDC4F,0xDC4B,0xDC4D,0xDC47, + 0xDC51,0xDCDA,0xDCF9,0xDCFC,0xDCFB,0xDCFD,0xDCF8,0xDCFA,0xDD8A,0xDD8E, + 0xDD88,0xDD89,0xDD8D,0xDD90,0xDD7E,0xDF1C,0xDFAB,0xDFA4,0xDFA8,0xDFAD, + 0xDF9F,0xDF9A,0xDFB0,0xDFA5,0xDFD5, + /* plane 5, row 41 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0x4476,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x450A,0x4503,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x8660,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x4635,0x4636,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F, + 1, /* first low-surrogate */ + 0xDFA2,0xDFB2,0xDF9D,0xDFA1,0xDD15,0xDD42,0xDD73,0xDD84,0xDDDD, + 0xDE5C,0xDE4C, 0,0xDE4B,0xDC67,0xDDA8,0xDD7F,0xDD8D,0xDD8B,0xDDF7, + 0xDDA9,0xDDF4,0xDD9A,0xDD8C,0xDD95,0xDD7E,0xDD77, 0, 0,0xDD71, + 0xDDFD,0xDD88,0xDD99,0xDD6D,0xDDD4,0xDD91,0xDD7D,0xDD63,0xDD75,0xDDF9, + 0xDD8E,0xDD74,0xDDD9,0xDD66,0xDDFA,0xDDF5, 0,0xDDC1,0xDDC9,0xDF03, + 0xDF2C,0xDF34,0xDF17,0xDF09,0xDF04,0xDF06,0xDF1A,0xDF0E,0xDF27,0xDF05, + 0xDF07,0xDF19,0xDF14,0xDF0C,0xDF1D,0xDF22,0xDF23,0xDDBB,0xDDBC,0xDDBA, + 0xDEA9,0xDEB5,0xDEAC,0xDEAA,0xDEAF,0xDEB7, 0, 0,0xDC3D,0xDC45, + 0xDC48,0xDC3C,0xDC3E,0xDCEC,0xDCED,0xDCE9,0xDE0A,0xDE0B,0xDDF8,0xDE04, + 0xDDF6,0xDDF9,0xDC53,0xDC52,0xDC60, + /* plane 5, row 42 */ + 1 | (94 << 8), /* first, last */ + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x4773, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47B1,0xD85F, + 0x47AF,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0x47F4,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0x48DC,0xD861,0xD861,0xD861,0xD861,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0x4999,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD864, + 1, /* first low-surrogate */ + 0xDC63,0xDCCE,0xDCCD,0xDCD0,0xDCCC,0xDD87,0xDD8D,0xDD9D, 0, + 0xDE63,0xDEF4,0xDEF1,0xDEFF,0xDEF5,0xDEFC,0xDEF2,0xDEF6, 0,0xDEFA, + 0,0xDC2E,0xDC45,0xDC43,0xDC51,0xDC4C,0xDC73,0xDC47,0xDC4B,0xDC4F, + 0,0xDC44,0xDC4D,0xDC4E,0xDC4A,0xDC41,0xDC52,0xDC9F,0xDC54,0xDC59, + 0xDCA2,0xDE4B,0xDE48,0xDF0D,0xDF1F,0xDF08,0xDF0E,0xDF1D,0xDF04,0xDC18, + 0xDC1B,0xDD66,0xDD62,0xDD83,0xDD67,0xDF62,0xDF4F,0xDF4E,0xDF67,0xDF53, + 0xDF4D,0xDF4C,0xDF68,0xDF51, 0,0xDF58,0xDF5B,0xDF50,0xDF6A,0xDC39, + 0xDC38,0xDD82,0xDD84,0xDD86,0xDC80,0xDC86,0xDD25,0xDD11, 0,0xDD0E, + 0xDD15,0xDD0F,0xDD18,0xDD0D,0xDD13,0xDD16,0xDD19,0xDF08,0xDEF7,0xDEFB, + 0xDEFC,0xDFB4,0xDFBE,0xDFC1,0xDCA6, + /* plane 5, row 43 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0x4AB6,0x4ABD,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0x9904,0xD865,0x999B,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BF4,0xD866,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C35,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0x4CAA,0xD868,0x4D1F,0xD868,0xD868, + 0xD868,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD840,0xD840,0xD840, + 0xD841,0xD841,0xD841,0xD841,0xD841, + 1, /* first low-surrogate */ + 0xDCA5,0xDCA2,0xDCA4,0xDE12,0xDE0E,0xDE7A,0xDE78,0xDE7D,0xDE7E, + 0xDE81,0xDE83,0xDE80,0xDE82,0xDF9B,0xDF99,0xDF9C,0xDF9A,0xDFA1,0xDC1A, + 0xDC1C,0xDC8A,0xDC79,0xDC73,0xDC75,0xDC7C,0xDC78,0xDC60,0xDC83,0xDC70, + 0, 0,0xDC87,0xDC84,0xDC7B,0xDC7E,0xDC74,0xDDB9,0xDDB8,0xDDB7, + 0xDDB5,0xDECC,0xDECE,0xDED1, 0,0xDECB, 0,0xDC7E,0xDC7A,0xDC77, + 0xDC8C,0xDCE1,0xDE20,0xDE1E,0xDEC2,0xDF0F,0xDF00, 0,0xDF10,0xDC0D, + 0xDC0E,0xDC8E,0xDC8D,0xDC8A,0xDC8B,0xDC8C,0xDC8F,0xDD57, 0,0xDD55, + 0xDD5B,0xDFAC,0xDFA7,0xDFA0,0xDF9E, 0,0xDE8D, 0,0xDF93,0xDF94, + 0xDF92,0xDD81,0xDFD6,0xDFC3,0xDFE4,0xDFE2,0xDC09,0xDFBF,0xDFC8,0xDFC7, + 0xDCB5,0xDCB2,0xDE0C,0xDE0B,0xDE0A, + /* plane 5, row 44 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x3550,0xD842,0xD842, + 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD840,0xD843,0xD843, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0x377B,0xD847,0xD847, + 0xD847,0xD847,0x3809,0xD847,0xD847,0xD847,0x3807,0xD847,0xD847,0xD847, + 0xD847,0xD845,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDE05,0xDFD3,0xDFE6,0xDFE9,0xDFF0,0xDFEA,0xDFE7,0xDCB1,0xDCB3, + 0xDCB4,0xDCB0,0xDD5C,0xDD5D,0xDD5E,0xDDC0,0xDEAF, 0,0xDF86,0xDF83, + 0xDF84,0xDF5C,0xDF70,0xDF8C,0xDF7B,0xDF66,0xDF79,0xDF63,0xDFC5,0xDF6B, + 0xDF6D,0xDF72,0xDF69,0xDF75,0xDF89,0xDFC6,0xDFA5,0xDFE7,0xDF6A,0xDF97, + 0xDC5A,0xDC5C,0xDC59,0xDC24,0xDC25,0xDC30,0xDC58,0xDC31,0xDD76,0xDDC1, + 0xDE85,0xDE7D,0xDC65,0xDC87,0xDC52,0xDC54,0xDC8A,0xDC50,0xDC86,0xDC4F, + 0xDC68,0xDD9D,0xDEA0,0xDEBA,0xDEBD,0xDEB8,0xDFA6, 0,0xDCDE,0xDCD8, + 0xDCD1,0xDF13, 0,0xDF0E,0xDF1B,0xDF3A, 0,0xDF1C,0xDF12,0xDF16, + 0xDF1A,0xDC48,0xDD4B,0xDD37,0xDD36,0xDD38,0xDD3A,0xDD49,0xDD3C,0xDD4A, + 0xDEB1,0xDEC2,0xDEB5,0xDEC4,0xDEB6, + /* plane 5, row 45 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849, + 0x6184,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0x39BB,0xD84B,0xD84B,0x3A4B,0xD84B,0xD84B,0xD84B, + 0x3A4D,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84C,0xD84C,0xD84C,0x3AC2,0xD84C,0xD84C,0xD84C,0xD84C,0x3B1A,0xD84C, + 0xD84C,0x3B12,0xD84C,0xD84C,0xD84C,0xD84C,0x3B3C,0xD84C,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BC3,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BC0,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 1, /* first low-surrogate */ + 0xDC1E,0xDC1F,0xDCAF,0xDD6B,0xDD6F,0xDF92,0xDFE4,0xDC2C,0xDFEF, + 0,0xDC4F,0xDC52,0xDC50,0xDC3A,0xDC37,0xDC47,0xDC64,0xDC40,0xDC3C, + 0xDC45,0xDC41,0xDDF3, 0,0xDCC1,0xDCB4, 0,0xDD2A,0xDD22,0xDD29, + 0,0xDD3E,0xDD3C,0xDD30,0xDFC7,0xDFD5,0xDFD6,0xDFD3,0xDFCE,0xDFC8, + 0xDC5C,0xDC5F,0xDC62, 0,0xDCBD,0xDCBF,0xDE5C,0xDEB6, 0,0xDE9D, + 0xDE7F, 0,0xDE94,0xDE81,0xDF47,0xDF46, 0,0xDF94,0xDE75,0xDE1A, + 0xDE2A,0xDE32,0xDE17,0xDE23,0xDE74, 0,0xDE76,0xDE2E,0xDE25,0xDE20, + 0xDE71,0xDE16,0xDE70,0xDE2C,0xDE2F,0xDE1F,0xDE64, 0,0xDD08,0xDD14, + 0xDD0A,0xDD0B,0xDE4F,0xDE59,0xDE54,0xDE51,0xDEB6,0xDFEC,0xDFED,0xDFEA, + 0xDEEE,0xDF5A,0xDF73,0xDF65,0xDF61, + /* plane 5, row 46 */ + 1 | (94 << 8), /* first, last */ + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0x729F,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3FE5,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0x405F,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x4118,0xD841,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856, + 1, /* first low-surrogate */ + 0xDF55,0xDF6B,0xDF64,0xDF5B,0xDF4C,0xDF6F,0xDF84,0xDF70,0xDF5D, + 0xDF57,0xDF66,0xDF53,0xDF98,0xDF97,0xDD28,0xDDEB,0xDDEA,0xDDE8,0xDDEC, + 0xDDEF,0xDED1,0xDECA, 0,0xDECF,0xDECD,0xDECE,0xDC70,0xDC67,0xDC73, + 0xDC6D,0xDC76,0xDC79,0xDC6A,0xDC8B,0xDC72,0xDC71,0xDC6E,0xDC7A,0xDE16, + 0xDE39,0xDE3B,0xDF10,0xDF96,0xDF7B,0xDF7C,0xDF7D,0xDCBE,0xDE5C,0xDE38, + 0xDE39,0xDE2E,0xDE34,0xDE32,0xDE5B,0xDE33,0xDE3C, 0,0xDC0E,0xDC0F, + 0xDC10,0xDC87,0xDE5B,0xDE53, 0,0xDE5C,0xDE3F,0xDE59,0xDE4A,0xDE44, + 0xDE4C,0xDE40,0xDE5F,0xDE5E,0xDE4E,0xDE54,0xDE43,0xDE87,0xDF82,0xDF85, + 0xDD31,0xDD47,0xDD2E,0xDD2F,0xDD48,0xDD34, 0,0xDD9F,0xDC32,0xDC36, + 0xDC33,0xDC31,0xDC40,0xDC41,0xDDDD, + /* plane 5, row 47 */ + 1 | (94 << 8), /* first, last */ + 0xD856,0xD856,0x41AD,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD856,0x421E,0xD856, + 0xD856,0xD856,0x4227,0xD856,0xD856,0xD856,0xD856,0x4218,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x4220,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858, + 0xD858,0x42F4,0x4302,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A, + 0xD859,0xD859,0xD859,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDDD2,0xDDD9, 0,0xDDDF,0xDDDB,0xDDD8,0xDDD3,0xDDDE,0xDDE0, + 0xDDD4,0xDDD7,0xDDDA,0xDEA7,0xDFFE,0xDFDD,0xDC40,0xDFE2, 0,0xDFD6, + 0xDFDE,0xDFEF, 0,0xDFEB,0xDFEA,0xDFE4,0xDFD1, 0,0xDFEC,0xDFFA, + 0xDFD9,0xDFF3,0xDFE1,0xDFDC,0xDFE5,0xDFDF,0xDFD4, 0,0xDC05,0xDED6, + 0xDED5,0xDED0,0xDEC8,0xDEC4,0xDEC9,0xDECD,0xDED2,0xDECC,0xDECA,0xDCA0, + 0xDC92, 0, 0,0xDC8B,0xDCA1,0xDC95,0xDC88,0xDC86,0xDC8D,0xDC85, + 0xDC91,0xDC89,0xDCA2,0xDEF0,0xDEF3,0xDEF4,0xDEEF,0xDF06,0xDFA2,0xDC5E, + 0xDC63,0xDC60,0xDC5B,0xDC7B,0xDC58,0xDC59,0xDC5D,0xDD05,0xDD06,0xDD02, + 0xDD03,0xDD04,0xDDA2,0xDDA7,0xDDA6,0xDDA4,0xDDAC,0xDDA9,0xDFE7,0xDC01, + 0xDFDF,0xDFD9,0xDFE3,0xDC0F,0xDD1A, + /* plane 5, row 48 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x4524,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0x8770,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 1, /* first low-surrogate */ + 0xDD45,0xDD48,0xDD7B,0xDD85,0xDD86,0xDDFE,0xDDFF,0xDE64,0xDE71, + 0xDE72,0xDE61,0xDE62,0xDE6C,0xDE60,0xDE5D,0xDE63,0xDE67,0xDE01,0xDE2A, + 0xDE30,0xDE06,0xDE7D,0xDE22,0xDEB9,0xDE0A,0xDE10,0xDD8F,0xDE80,0xDE13, + 0xDE2E,0xDE18,0xDE17,0xDE1A,0xDE14,0xDE47,0xDE63,0xDE38, 0,0xDE7F, + 0xDE21,0xDE37,0xDE31,0xDE1B,0xDEA5,0xDF6C,0xDDD3,0xDF88,0xDF6E,0xDF5C, + 0xDF74,0xDF54,0xDF83, 0,0xDF65,0xDF60,0xDF70,0xDF6F,0xDF6D,0xDF72, + 0xDF6C,0xDF76,0xDF75,0xDF59,0xDFC7,0xDDC1,0xDDF9,0xDEE3,0xDEE7,0xDED6, + 0xDECF,0xDEDA,0xDEE9,0xDED2,0xDC55,0xDC4F,0xDC4D,0xDC51,0xDC56,0xDCF9, + 0xDCF8,0xDD06,0xDD03,0xDD09,0xDCF7,0xDCF5,0xDE47,0xDE45,0xDE3E,0xDE46, + 0xDE29,0xDE34,0xDE3F,0xDE44,0xDE35, + /* plane 5, row 49 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x477D,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860, + 0x8E37,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0x4864,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862, + 1, /* first low-surrogate */ + 0xDE5A,0xDE2A,0xDE33,0xDE37,0xDE43,0xDE39,0xDE30,0xDE5D,0xDE32, + 0xDE27,0xDFBD,0xDFBA,0xDFBC,0xDFF1,0xDFF0,0xDC61,0xDC5C,0xDC58,0xDC5D, + 0xDCDA,0xDCD9,0xDCDD,0xDCDC,0xDCDE, 0,0xDDA0,0xDDA2,0xDF0F,0xDF13, + 0xDF12,0xDF11,0xDF14,0xDF19,0xDF0E,0xDF17,0xDF21,0xDF20,0xDF16,0xDC78, + 0,0xDC87,0xDC79,0xDC80,0xDC77,0xDC81,0xDC46,0xDC7A,0xDC9C,0xDC83, + 0xDC84,0xDCAD,0xDC9D,0xDC9E,0xDE55,0xDF36,0xDF2B,0xDF27,0xDF46,0xDF2C, + 0xDF45,0xDF33,0xDF2D,0xDF34,0xDF22, 0,0xDC1F,0xDDB3,0xDD8C,0xDD8F, + 0xDDAF,0xDDAD,0xDD8E,0xDDAC,0xDDB0,0xDDB1,0xDDAE,0xDD99,0xDEEB,0xDF74, + 0xDF75,0xDF8E,0xDF6D,0xDF70,0xDF8C,0xDC4F,0xDC51,0xDC58,0xDC4C,0xDC4E, + 0xDD15,0xDDBE,0xDDDB,0xDDB3,0xDDAE, + /* plane 5, row 50 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0x9703,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0x4AC2,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866, + 1, /* first low-surrogate */ + 0xDC87,0xDC8A,0xDC88,0xDC8B,0xDC8C,0xDD44,0xDD2D,0xDD2A,0xDD31, + 0xDD2C,0xDD45,0xDD30,0xDD29,0xDD46,0xDEF4,0xDF14,0xDF10,0xDF0F,0xDF12, + 0xDF0B,0xDF0C,0xDF0A,0xDF13,0xDF0E,0xDFD9,0xDFD0, 0,0xDCC1,0xDCBF, + 0xDCBD,0xDCBC,0xDCBA,0xDCBB,0xDCD1,0xDCBE,0xDCD0,0xDCB9,0xDE1A,0xDE1C, + 0xDE1B,0xDE91,0xDE96,0xDE9F,0xDE9C,0xDE9A,0xDE9D,0xDFAD,0xDFA5,0xDFAE, + 0xDC03,0xDC26,0xDC20,0xDC23,0xDC24,0xDC21,0xDC28,0xDC25,0xDC1E,0xDC94, + 0xDC93,0xDC8F,0xDC9A,0xDCAD, 0,0xDDCA,0xDDC5,0xDEBB,0xDEE1,0xDEEA, + 0xDEE4,0xDEED,0xDEE6,0xDEE0,0xDEE8,0xDEE5,0xDC1A,0xDC94,0xDC96,0xDC9E, + 0xDC95,0xDCA1,0xDC8E,0xDC9B,0xDC92,0xDC97,0xDC99,0xDC93,0xDE32,0xDE2F, + 0xDE2E,0xDE33,0xDF1C,0xDF1E,0xDF11, + /* plane 5, row 51 */ + 1 | (94 << 8), /* first, last */ + 0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0x4CAC,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD87E, + 0xD846,0xD840,0xD840,0xD840,0xD840,0xD841,0xD840,0x349B,0xD840,0xD841, + 0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0x52F6,0x3526,0xD842,0xD842, + 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844,0xD843,0xD843,0xD845, + 0xD845,0xD845,0xD845,0xD846,0xD846, + 1, /* first low-surrogate */ + 0xDF20,0xDF1F,0xDF19,0xDF16,0xDCAC,0xDCB9,0xDCB3,0xDCA6,0xDCA2, + 0xDCA9,0xDCA7,0xDD6C,0xDD6D,0xDD69,0xDD80,0xDD66,0xDD65,0xDD71,0xDD6B, + 0xDFBD,0xDFC1,0xDFD3,0xDFB6, 0,0xDFB9,0xDFD4,0xDFB7,0xDFDB,0xDFB8, + 0xDFC0,0xDFBC,0xDFD5,0xDFBF,0xDFC3,0xDFC9,0xDE58,0xDE90,0xDE95,0xDE97, + 0xDF09,0xDF08,0xDF06,0xDF05,0xDF10,0xDF97,0xDF95,0xDFEE,0xDC1F,0xDE1A, + 0xDF4B,0xDD8E,0xDFE8,0xDFF0,0xDFF4,0xDC06,0xDFED, 0,0xDFE9,0xDC00, + 0xDCB8,0xDD6D,0xDC04,0xDC01,0xDC03,0xDC02, 0, 0,0xDD62,0xDEBA, + 0xDF13,0xDFDE,0xDFD7,0xDFE4,0xDFCE,0xDFE3,0xDFDD,0xDC3A,0xDFDB,0xDFD6, + 0xDFE0,0xDFD4,0xDFCB,0xDFE1,0xDFC9,0xDFDF,0xDC3C,0xDFFC,0xDFCF,0xDC79, + 0xDC76,0xDC78,0xDE87,0xDC9C,0xDCB1, + /* plane 5, row 52 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD846,0x41AF,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD842,0xD846,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0x3815,0xD847,0xD847,0xD848,0xD850,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0x389C,0xD848,0xD848,0xD848,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0x64CC,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84E, + 1, /* first low-surrogate */ + 0xDCC1,0xDC9A,0xDC92, 0,0xDCC2,0xDC96,0xDCC0,0xDC91,0xDC95, + 0xDDA2,0xDEC3,0xDEC0,0xDEC2,0xDF8A,0xDFB0,0xDC16,0xDF46,0xDF4A,0xDF3E, + 0xDF45,0xDF42, 0,0xDF5B,0xDF44,0xDC04,0xDC22,0xDD55,0xDD57,0xDD51, + 0xDD4E,0xDD5A,0xDEC6,0xDEC3, 0,0xDEC5,0xDECC,0xDF71,0xDC26,0xDCB2, + 0xDD7A,0xDD84,0xDD7B,0xDC74,0xDC8C,0xDC51,0xDC48,0xDC8D,0xDC92,0xDC98, + 0xDC93,0xDCB0,0xDC4E,0xDC96,0xDC97,0xDC9C,0xDCCA,0xDD33,0xDD83,0xDD84, + 0xDD9A,0xDD8C, 0,0xDD99,0xDEE0,0xDFE4,0xDFF8,0xDFED,0xDFF3,0xDFF4, + 0xDFF5,0xDFFD,0xDD19,0xDE9E,0xDEC4,0xDE9F,0xDF9B,0xDF9F,0xDF9A,0xDEAA, + 0xDE9D,0xDE92,0xDEA2,0xDEAF,0xDEEB,0xDEA0,0xDEA1,0xDE94,0xDE98,0xDE8F, + 0xDE87,0xDE84,0xDEA9,0xDE7C,0xDD18, + /* plane 5, row 53 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0x3D64,0x3D6E,0xD850,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0x3D5F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0x3EF6,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0x764A,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDE5F,0xDE62,0xDE61,0xDEC0,0xDF15,0xDFFC,0xDFF9,0xDFC8,0xDFC9, + 0xDFDE,0xDFCA,0xDFE2, 0, 0,0xDC04,0xDFCC,0xDFDD,0xDFE4,0xDFD3, + 0xDFC7,0xDFC6, 0,0xDC37,0xDFD8,0xDFEE,0xDFB2,0xDFA3,0xDFB3,0xDFED, + 0xDFF8,0xDD31,0xDD5B,0xDD66,0xDD69,0xDD96,0xDD9B,0xDDF7,0xDDF3,0xDDF4, + 0xDDF5,0xDEE2,0xDEE7,0xDEE5,0xDEE9,0xDEE6,0xDEE3,0xDC74,0xDC7F,0xDC8F, + 0xDC90,0xDC97,0xDCA3,0xDC8E,0xDC98,0xDC8C,0xDE42,0xDE44,0xDE69,0xDE43, + 0xDE68, 0,0xDF8D,0xDF88,0xDF8B,0xDF89,0xDCCC,0xDD1F,0xDE80,0xDE5E, + 0xDE67,0xDE68,0xDE65, 0,0xDE74,0xDE69,0xDE61,0xDE62,0xDE6C,0xDE93, + 0xDE86,0xDF9D,0xDF9B,0xDC1B,0xDC16,0xDC19,0xDC14,0xDC18,0xDC15,0xDC99, + 0xDC98,0xDE5D,0xDE89,0xDE7A,0xDE7D, + /* plane 5, row 54 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0x4073,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0x40DD, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0x7AB9,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0x7BD7,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858, + 1, /* first low-surrogate */ + 0xDE4B, 0,0xDE78,0xDE7F,0xDE77,0xDE7E,0xDE79,0xDEAB,0xDE7C, + 0xDE74,0xDE75,0xDEA7,0xDF8D,0xDD4E,0xDD66,0xDD61,0xDD4D,0xDD4F, 0, + 0xDD54,0xDD7C,0xDEDA,0xDEDE,0xDED8,0xDEDD,0xDEDF,0xDC66,0xDC62,0xDC5F, + 0xDC64,0xDC63,0xDC60,0xDC88,0xDC6A,0xDC67,0xDC87,0xDC3F,0xDC6C,0xDC6E, + 0xDCAD,0xDDF1,0xDDF4,0xDDF6,0xDDF5,0xDDF8,0xDDFB,0xDDEC,0xDDEF,0xDDED, + 0,0xDDF7,0xDDF9,0xDDFD,0xDEB1,0xDC36,0xDC1B,0xDC32,0xDC42,0xDC4D, + 0xDC1F,0xDC21,0xDC1C,0xDC31,0xDC2E,0xDC47,0xDC3B,0xDC41,0xDC18,0xDC39, + 0xDC1D,0xDC27,0xDC23, 0,0xDEEE,0xDEE8,0xDEE5,0xDEEF,0xDEE4,0xDEEC, + 0xDEF0,0xDCD7,0xDCD8,0xDCD4,0xDCCA,0xDCD2,0xDCCB,0xDCD3,0xDCE6,0xDCE2, + 0xDE49,0xDE48,0xDEFF,0xDF09,0xDFB0, + /* plane 5, row 55 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 1, /* first low-surrogate */ + 0xDFAF,0xDC7C,0xDC78,0xDC7A,0xDC72,0xDC79,0xDC7E,0xDD0C,0xDD0B, + 0xDDCD,0xDDBE,0xDDBC,0xDDBF,0xDDC0,0xDDBD,0xDC38,0xDC08,0xDC05,0xDC3B, + 0xDC10,0xDC0C,0xDC0D,0xDC04,0xDC3A,0xDC13,0xDC37,0xDC39,0xDD1F,0xDD4B, + 0xDDEE,0xDE75,0xDE78,0xDE7C,0xDE74,0xDE76,0xDEEA,0xDEEB,0xDDFB,0xDE19, + 0xDEA7,0xDE8C,0xDEDC,0xDE98,0xDEBE,0xDE9E,0xDF0F,0xDE9F,0xDEDD,0xDE93, + 0xDEBB,0xDEB6,0xDE90,0xDEA1,0xDEBD,0xDEDE,0xDE3A,0xDF22,0xDE97,0xDE94, + 0xDEC3,0xDE8E,0xDEA8,0xDE99,0xDEAD,0xDE9B,0xDEA2,0xDF21,0xDEAC,0xDF0E, + 0xDF31,0xDDE1,0xDDDE,0xDDDF,0xDDDC,0xDDDD,0xDDEC,0xDDE7,0xDF69,0xDFB8, + 0xDFA1,0xDFA8,0xDFBA,0xDFC2,0xDFA6,0xDFA4,0xDFA3,0xDFAB,0xDFBC,0xDFB7, + 0xDFBF,0xDFAD,0xDFB1,0xDFCA,0xDFC4, + /* plane 5, row 56 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4688,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD842, + 0xD85F,0xD85F,0xD85F,0x47BB,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0x47BA,0xD85F,0xD860,0xD860,0xD860,0xD860,0x4812,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0x4861,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0x48E1, + 1, /* first low-surrogate */ + 0xDFB9,0xDDC8,0xDDC6,0xDDC7,0xDF0A,0xDF0D,0xDEFB,0xDF03,0xDF02, + 0xDEFC,0xDEF9,0xDEF8,0xDC6E,0xDC63,0xDC62,0xDC61,0xDC6B, 0,0xDC6F, + 0xDC66,0xDC6C,0xDD0E,0xDD15,0xDD16,0xDD10,0xDD17,0xDD11,0xDE6E,0xDE6C, + 0xDE87,0xDE83,0xDE63,0xDEDC,0xDFC0,0xDFF7,0xDFFA,0xDC70,0xDC6A,0xDC68, + 0xDC69,0xDC84,0xDCEC,0xDCE7,0xDCEE,0xDDBA,0xDDB2,0xDDB5,0xDDCB,0xDC0B, + 0xDDD0,0xDE6D,0xDE6C, 0,0xDF45,0xDF46,0xDF34,0xDF2C,0xDF35,0xDF44, + 0,0xDF76,0xDCB1,0xDCAA,0xDCA1,0xDCB2, 0,0xDCA6,0xDCB5,0xDCB4, + 0xDCB8,0xDCAF,0xDCB0,0xDCA3,0xDE62,0xDE64,0xDF56,0xDF51,0xDF4F,0xDF68, + 0xDF4C,0xDF50, 0,0xDF48,0xDF4A,0xDC21,0xDDE3,0xDDB9,0xDDDE,0xDDB7, + 0xDDE1,0xDDB6,0xDDB5,0xDDDF, + /* plane 5, row 57 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDF97,0xDF9A,0xDF9B,0xDF98,0xDF92,0xDF93,0xDFD7,0xDF73,0xDC6B, + 0xDC74,0xDC78,0xDC6D,0xDD18,0xDDE9,0xDDF5,0xDDEA,0xDE2E,0xDDE7,0xDDFE, + 0xDDE5,0xDE36,0xDDF0,0xDDE6,0xDE2C,0xDC89,0xDC95,0xDC93,0xDD4D,0xDD4A, + 0xDD4F,0xDD50,0xDD4B,0xDF2A,0xDF2B,0xDF2F,0xDF2E,0xDF7C,0xDFED,0xDFE2, + 0xDCE0,0xDCDC,0xDCDA,0xDCD6,0xDCF4,0xDCD9,0xDCD5,0xDE22,0xDE21,0xDE24, + 0xDE25,0xDE26,0xDE23,0xDEAA,0xDEAF,0xDEB0,0xDEAB,0xDFAF,0xDFB7,0xDFB5, + 0xDFB2,0xDFB3,0xDC2B,0xDCD8,0xDCC2,0xDCAF,0xDCBC,0xDCB8,0xDCBE,0xDCB7, + 0xDCB4,0xDCBF,0xDCB3,0xDCB1,0xDCBB,0xDCBD,0xDCD6,0xDCDD,0xDDD8,0xDDD3, + 0xDDD5,0xDDE3,0xDDE2,0xDDD9,0xDDDE,0xDDDF,0xDDDA,0xDDD4,0xDEF3,0xDEE2, + 0xDF0D,0xDF01,0xDF05,0xDF1A,0xDF03, + /* plane 5, row 58 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xD865,0xD865,0x999F,0xD866,0xD866,0xD866, + 0xD866,0xD866,0x4B89,0xD866,0x4B8C,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0x9B8D,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0x9E77, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD864,0xD854,0xD841,0xD841,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842, + 1, /* first low-surrogate */ + 0xDF1F,0xDF16,0xDEFA,0xDEFC,0xDF0A, 0,0xDCBC,0xDCCA,0xDCB6, + 0xDCC7,0xDCBF, 0,0xDCB9, 0,0xDCB0,0xDCB8,0xDCBD,0xDC91,0xDCBB, + 0xDCBE,0xDE3E,0xDE3D,0xDF38,0xDF3D,0xDF39,0xDF33,0xDC33,0xDCBB,0xDCC6, + 0xDCC5,0xDCC7,0xDCCB,0xDCA8,0xDCC8,0xDCBE,0xDCC1,0xDCBD,0xDD82,0xDD9E, + 0xDD81,0xDD84, 0,0xDD96,0xDD8E,0xDD88,0xDD87,0xDFE0,0xDC0D,0xDFDF, + 0xDFE4,0xDFE2,0xDFDD,0xDFEC,0xDFDE,0xDFE7,0xDFEA,0xDFE3,0xDE5C, 0, + 0xDE5D,0xDE9C,0xDF1D,0xDF9D,0xDF9E,0xDF9B,0xDFB5,0xDFB9,0xDFB6,0xDFF3, + 0xDFF2,0xDFF4,0xDC26,0xDC27,0xDC25,0xDD06,0xDD0B,0xDD3A,0xDD3C,0xDC0A, + 0xDC0B,0xDCBF,0xDCFD,0xDE18,0xDDDF,0xDF90,0xDE9E,0xDFFC,0xDC10,0xDC0F, + 0xDC0D,0xDCB9,0xDCB7,0xDCBA,0xDD0A, + /* plane 5, row 59 */ + 1 | (94 << 8), /* first, last */ + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD843,0xD844,0xD844, + 0xD844,0xD844,0xD845,0xD85F,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0x381A,0xD847, + 0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849, + 0xD849,0xD84A,0xD84A,0xD84A,0x3998,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D, + 0xD84D,0xD84D,0x3BF1,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84E,0x6BA9,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD850,0xD84F, + 0xD850,0xD850,0xD850,0xD850,0xD850, + 1, /* first low-surrogate */ + 0xDC41,0xDC8B,0xDC46,0xDC53,0xDCE2,0xDC3F,0xDF7C,0xDC4B,0xDC4E, + 0xDC8A,0xDC47,0xDC93,0xDDCE,0xDC8C,0xDCAF,0xDCC9,0xDDC6,0xDDC8,0xDE91, + 0xDCCF,0xDCD4,0xDCCE,0xDEDD,0xDED4,0xDF49,0xDF63,0xDF5D, 0,0xDF67, + 0xDFBB,0xDF60,0xDF80,0xDD5F,0xDD60,0xDEDA,0xDED2,0xDEDD,0xDD8E,0xDD88, + 0xDD6C,0xDC9E,0xDCC9,0xDCA4, 0,0xDCD9,0xDCD2,0xDCDA,0xDCDD,0xDCCE, + 0xDCFC,0xDE14,0xDE60,0xDDD7,0xDDCB,0xDDCD,0xDDD5,0xDEE7,0xDC00,0xDC0A, + 0xDC0F,0xDC02,0xDC01,0xDD1D,0xDECA,0xDECB,0xDECD,0xDF4F,0xDF9C,0xDE80, + 0xDF0D,0xDF02, 0,0xDF07,0xDEF7,0xDEF8,0xDEFD,0xDF24,0xDEFB,0xDF39, + 0xDF3A,0xDD22, 0,0xDE6A,0xDE6D,0xDE74,0xDC0E,0xDFDF,0xDC2B,0xDFE3, + 0xDC26,0xDC2A,0xDC23,0xDC35,0xDC4A, + /* plane 5, row 60 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD851,0xD851,0xD850,0xD851,0xD851,0xD851,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0x3F6A,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0x764B,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0x76A2,0xD853,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0x4485,0xD854,0xD854,0xD854,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x4239,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0x423D,0x4244, + 1, /* first low-surrogate */ + 0xDFFD,0xDC00,0xDC1E,0xDFFF,0xDD9E,0xDDFA,0xDEF1,0xDC95,0xDCA8, + 0xDCA6,0xDE6E,0xDE83,0xDE6D,0xDF8F, 0,0xDCDF,0xDCD5,0xDCE0,0xDCD3, + 0xDCD8,0xDE8C, 0,0xDE94,0xDE96,0xDE85,0xDE8F,0xDEA9,0xDE8E,0xDE90, + 0xDEB8,0xDEC3,0xDEBB,0xDFA5,0xDFA2, 0,0xDFA3,0xDCB5,0xDCAC,0xDCA8, + 0xDEAD,0xDEB8,0xDEB4,0xDEAE,0xDEB6, 0,0xDEC1,0xDEBF,0xDF92,0xDC00, + 0xDC01,0xDD75,0xDD72,0xDD78,0xDD70,0xDD7E,0xDD7D,0xDD7F,0xDEEF,0xDC6D, + 0xDC8E,0xDC8F,0xDC8A,0xDC8D,0xDC95,0xDC8B,0xDC8C,0xDCB0,0xDC93,0xDDFC, + 0xDE15,0xDE0E,0xDE18,0xDE11,0xDE0D,0xDEBB,0xDEB3, 0,0xDCA1,0xDC9A, + 0xDC84,0xDCA0,0xDC86,0xDC9D,0xDCAA,0xDC78,0xDC8D,0xDC8A,0xDCA6,0xDC7A, + 0xDC97,0xDC88,0xDC8E, + /* plane 5, row 61 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x4246,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD858,0x430E,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x4310,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x443E, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD856,0xD85A,0xD85A, + 0xD85A,0x4484,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x4549, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDC76,0xDC81,0xDC85,0xDC75,0xDCA8,0xDC8F,0xDC91,0xDCA2,0xDC9C, + 0xDC89,0xDC7F,0xDC96,0xDC79,0xDC9F,0xDCA7, 0,0xDC87,0xDC9B,0xDCA5, + 0xDC8B,0xDCC9,0xDEFF,0xDF03,0xDF00,0xDF02,0xDF04,0xDF05,0xDEE6,0xDF1F, + 0xDD14, 0,0xDD0C,0xDD0F,0xDD19,0xDD0B,0xDD13,0xDCD5, 0,0xDD1C, + 0xDE50,0xDE4E,0xDF12,0xDFB9,0xDC85,0xDC88,0xDC90,0xDD13,0xDDD0,0xDDD1, + 0xDDD2,0xDDD7,0xDDD6,0xDDE5,0xDC46,0xDC6B,0xDC45,0xDC3F,0xDC3E, 0, + 0xDC6A,0xDC68,0xDC4C,0xDD23,0xDD22,0xDD97,0xDD91,0xDEB5,0xDD98,0xDD9C, + 0xDE89, 0,0xDE8B,0xDE8A,0xDE8D,0xDE8E,0xDE88,0xDF4E,0xDF44,0xDF37, + 0xDF75,0xDF54,0xDF76,0xDF34,0xDF6B,0xDF32,0xDF57,0xDF52,0xDF45, 0, + 0xDEB1,0xDF4B,0xDF47,0xDF33,0xDF40, + /* plane 5, row 62 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85D,0xD85C, + 0xD85D,0xD85D,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x45DF,0xD85D, + 0xD85D,0x45F0,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x468A,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0x4702,0xD85E,0xD85E,0xD85E,0xD85F,0xD85E,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47C0,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0x4815,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDF3C,0xDF43,0xDF4F,0xDF55,0xDF41,0xDFB2,0xDFC0,0xDC34,0xDFF9, + 0xDC19,0xDC0D,0xDFFA,0xDC1E,0xDC1F,0xDC0E,0xDC40,0xDC08, 0,0xDC13, + 0xDC4C, 0,0xDDCC,0xDDCB,0xDF24,0xDF25,0xDF3D,0xDF20,0xDF27,0xDF26, + 0xDF1D,0xDF1E,0xDF32,0xDF6C,0xDF59, 0,0xDC7A,0xDC79,0xDD1B,0xDD2E, + 0xDD23,0xDD20,0xDD1F,0xDEB6,0xDEB9,0xDEA1,0xDEA3,0xDEA8,0xDEAF,0xDE9A, + 0xDE99,0xDEA2,0xDE9D, 0,0xDEAB,0xDFC9,0xDFFE,0xDC00,0xDFFC,0xDC07, + 0xDC75,0xDC72,0xDC73,0xDC74,0xDCFA,0xDCFC,0xDCF8,0xDCF6,0xDCFB,0xDDCD, + 0xDDD1,0xDDCF,0xDE74,0xDE72,0xDE73,0xDF54,0xDF51, 0,0xDF53,0xDF49, + 0xDF4C,0xDF4A,0xDF4F,0xDF56,0xDD00,0xDCD5,0xDCD7,0xDCFF,0xDCD9,0xDCE3, + 0xDCD3, 0,0xDCD8,0xDCD4,0xDCDE, + /* plane 5, row 63 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x48E2,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD87E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDE71,0xDF74,0xDF88,0xDF7F,0xDF6B,0xDF87,0xDF79,0xDF78,0xDF89, + 0xDF80,0xDF76,0xDC29,0xDC28,0xDC2F,0xDDE5,0xDE04,0xDE03,0xDDF0,0xDDE8, + 0xDDEA,0xDDF1,0xDE01,0xDE02,0xDFA9,0xDFAB,0xDFB7,0xDFB6, 0,0xDCA0, + 0xDC8E,0xDC86,0xDC87,0xDC85,0xDC8B,0xDC88,0xDC90,0xDD1A,0xDD34,0xDE37, + 0xDE2F,0xDE30,0xDE39,0xDE34,0xDE33,0xDE85,0xDE84,0xDE3A,0xDC9F,0xDD69, + 0xDD6C,0xDD6A,0xDD67,0xDD6B,0xDF3F,0xDF40,0xDC0B,0xDCD2,0xDCF8,0xDD01, + 0xDCFA,0xDD16,0xDDF6,0xDE2C,0xDE2D,0xDE2F,0xDE2E,0xDEC1,0xDEF5,0xDEC4, + 0xDEDE,0xDECC,0xDED2,0xDEC2,0xDECD,0xDECF,0xDEDD,0xDEC8,0xDFBA,0xDFBE, + 0xDFBF,0xDC2E,0xDC30,0xDCE7,0xDCEE,0xDCE8,0xDCE6,0xDCE2,0xDCE4,0xDCFB, + 0xDCFC,0xDCEA,0xDDED,0xDDF6,0xDDF3, + /* plane 5, row 64 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0x4B4D,0xD865,0xD865,0xD865,0xD865,0x4B4A,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868, + 1, /* first low-surrogate */ + 0xDDF4,0xDDF1,0xDDF7,0xDDF5,0xDDEA,0xDDEB,0xDF00,0xDF2C,0xDF12, + 0xDF3D,0xDF33, 0,0xDF30,0xDF40,0xDF31,0xDF57, 0,0xDF35,0xDF32, + 0xDF2D,0xDF36,0xDF38,0xDF62,0xDF5F,0xDF8A,0xDCD6,0xDCD8,0xDCDD,0xDCE4, + 0xDCE3,0xDE4D,0xDED7,0xDF4A,0xDF4C,0xDF50,0xDF4B,0xDF4E,0xDF4F,0xDC39, + 0xDCD2,0xDCCD,0xDCD3,0xDCE1,0xDCCE,0xDCD5,0xDCDD,0xDCD4,0xDCCF,0xDDCB, + 0xDDA6,0xDDC2,0xDDA5,0xDDA9,0xDDA2,0xDDA4,0xDDB0,0xDDCC,0xDDAF,0xDDBF, + 0xDC24,0xDC1A,0xDC14,0xDC3A,0xDC20,0xDC1B,0xDC21,0xDC25,0xDC1E,0xDC3F, + 0xDC40,0xDC18,0xDC2C,0xDC15,0xDC2D,0xDC1F,0xDC29,0xDC4B,0xDEB3,0xDEA5, + 0xDEA7,0xDEAB,0xDEA6,0xDEAA,0xDF22,0xDF23,0xDFA1,0xDFA3,0xDFA0,0xDFBD, + 0xDFBA,0xDFFA,0xDFF8,0xDFFC,0xDFF6, + /* plane 5, row 65 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD869,0x4D63,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0x4D93,0xD869,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0x350E,0xD842,0xD844, + 0xD844,0xD844,0x360A,0xD844,0xD844,0xD844,0xD844,0x360D,0xD844,0xD845, + 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDC34,0xDC43, 0,0xDCD4,0xDD0D,0xDD43,0xDD41,0xDD3D,0xDD40, + 0xDD3E,0xDD3F,0xDD46, 0,0xDDD4,0xDC35,0xDC36,0xDC32,0xDC3A,0xDCC8, + 0xDD36,0xDE1E,0xDE1D,0xDE1F,0xDC1C,0xDC1D,0xDC20, 0,0xDCC0,0xDC9A, + 0xDC93,0xDCDD, 0,0xDCA3,0xDCA9,0xDC9C,0xDC9B, 0,0xDC97,0xDCB1, + 0xDCCA,0xDCB3,0xDCCD,0xDCEA,0xDCEE,0xDCEF,0xDEDF,0xDF50,0xDFBB,0xDF88, + 0xDF89,0xDF8C,0xDF85,0xDF5E,0xDF94,0xDF95,0xDD6B,0xDD6A,0xDD69,0xDEE3, + 0xDEF1,0xDC37,0xDC33,0xDD91,0xDD8F,0xDD97,0xDCD4,0xDCDE,0xDCD3,0xDCE0, + 0xDD43,0xDD0B,0xDCFF,0xDD04,0xDD07,0xDDF9,0xDDFA,0xDDFB,0xDDF8,0xDC12, + 0xDC10,0xDD1F,0xDEDF,0xDEE3,0xDF52,0xDFA9,0xDF65,0xDF87,0xDF42,0xDF52, + 0xDF4C,0xDE9F,0xDF01,0xDF48,0xDF4F, + /* plane 5, row 66 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD854,0x4074,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD856,0xD856,0xD856, + 1, /* first low-surrogate */ + 0xDF7E,0xDF4D,0xDF58,0xDF47,0xDF5E,0xDF49,0xDF4E,0xDF5D,0xDF5A, + 0xDF86,0xDF51,0xDD29,0xDDA6,0xDDA7,0xDE70,0xDE6F,0xDED3,0xDED2,0xDC28, + 0xDC1B,0xDC1A,0xDC1C,0xDC21,0xDC32,0xDC66,0xDC7D,0xDC73,0xDC7F,0xDC65, + 0xDC80,0xDC61,0xDC75,0xDC6E,0xDC67,0xDC71,0xDC6C,0xDC63,0xDC62,0xDC83, + 0xDCB2,0xDC81,0xDC6F,0xDC6B,0xDC82,0xDC8A,0xDC29,0xDC30,0xDC31,0xDD97, + 0xDE00,0xDDFF,0xDCB6,0xDCB5,0xDCC3,0xDE8D,0xDF18,0xDF9C,0xDF9A,0xDF99, + 0xDEB7,0xDEC4,0xDEC6,0xDEC7,0xDEBC,0xDEC0,0xDEC5,0xDECD,0xDEC1,0xDEBE, + 0xDFA7,0xDFB8,0xDC23, 0,0xDEE8,0xDEDE,0xDEE3,0xDEEF,0xDEDC,0xDEE4, + 0xDEE1,0xDEE5,0xDF95,0xDF94,0xDF93,0xDF8E,0xDD98,0xDD9C,0xDD99,0xDDA0, + 0xDD9E,0xDF04,0xDCD3,0xDCB4,0xDCBB, + /* plane 5, row 67 */ + 1 | (94 << 8), /* first, last */ + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0x4256,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0x425A,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x42A3,0xD857,0xD857,0xD857, + 0xD857,0xD857,0x42A8,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85B, + 1, /* first low-surrogate */ + 0xDCB7,0xDCB8,0xDCBD,0xDCB6,0xDCB9,0xDCB5,0xDE22,0xDE21,0xDEC3, + 0xDEBC,0xDCFF,0xDCE5,0xDCF7,0xDCD2,0xDD00,0xDCDB,0xDCF0,0xDCE2,0xDCCD, + 0,0xDCE1,0xDCF2,0xDCDC,0xDCCC,0xDCD6,0xDCF3,0xDCFA,0xDCF6,0xDCEC, + 0xDCEA,0xDCE3,0xDCD0, 0,0xDC95,0xDCD5,0xDCF4,0xDCCB,0xDCDA,0xDCC8, + 0xDCDF,0xDCF5,0xDCCF,0xDCC7,0xDCD7,0xDF24, 0,0xDF1C,0xDF21,0xDF1E, + 0xDF18,0xDF1B, 0,0xDD46,0xDD4B,0xDD48,0xDD47,0xDD67,0xDD54,0xDF15, + 0xDF22,0xDFC5,0xDF29,0xDFC7,0xDC8D,0xDD1B,0xDD20,0xDDE2,0xDDE7,0xDDE8, + 0xDDE1,0xDC72,0xDC7B,0xDC74,0xDC71,0xDC79,0xDC75,0xDC90,0xDC77,0xDC7D, + 0xDD4F,0xDD50,0xDDA3,0xDDA2,0xDDF4,0xDE94,0xDE9A,0xDE9B,0xDEA7,0xDE97, + 0xDE95,0xDE92,0xDE9C,0xDE96,0xDFB6, + /* plane 5, row 68 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85C,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85B, + 0xD85C,0xD85B,0xD85B,0x453C,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85C,0xD85B,0xD85C,0xD85B,0xD85B,0x459B,0x459A,0xD85C,0xD85C, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0x87F1,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0x465E,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0x46A7,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 1, /* first low-surrogate */ + 0xDFB8,0xDFB0,0xDC18,0xDFC5,0xDFB5,0xDFC2,0xDC06,0xDC19,0xDFB9, + 0xDC15,0xDFD6,0xDFAC, 0,0xDFC6,0xDFB3,0xDFC3,0xDFCA,0xDFCF,0xDFBD, + 0xDFCE,0xDC14,0xDFBA,0xDC1A,0xDFC1,0xDFBB, 0, 0,0xDE01,0xDDFC, + 0xDC5A,0xDC54,0xDC61,0xDC5C,0xDC55,0xDC4A,0xDC4B,0xDC51,0xDC69,0xDC6B, + 0,0xDC66,0xDC58,0xDC5D,0xDC67,0xDC56,0xDC88,0xDC64,0xDC4E,0xDF57, + 0xDF5A,0xDF51,0xDF4A,0xDF4B, 0,0xDF47,0xDF6F,0xDF6A,0xDF6B,0xDF46, + 0xDF6D,0xDF54,0xDF6E,0xDF4C,0xDC78,0xDC86,0xDC82, 0,0xDEE1,0xDEE5, + 0xDEDB,0xDEDE,0xDED7,0xDC03,0xDC7C,0xDC7E,0xDD05,0xDD07,0xDDE6,0xDDE1, + 0xDDFB,0xDDE5,0xDDE7,0xDDDF,0xDDFF,0xDE76,0xDF63,0xDF66,0xDF65,0xDF5E, + 0xDF64,0xDF6B,0xDF5F,0xDF67,0xDF68, + /* plane 5, row 69 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0x486E,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x490D,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x4943,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0x4A73,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0x4A74,0xD864,0xD864,0x4A70, + 1, /* first low-surrogate */ + 0xDD08,0xDD09,0xDD17,0xDD15,0xDD1B,0xDD0B,0xDD28,0xDD0E,0xDD18, + 0xDD53,0xDD45,0xDD0D,0xDD0A,0xDD13,0xDD4A,0xDE79,0xDFA1,0xDF8D,0xDFA2, + 0xDF90, 0,0xDC31,0xDC30,0xDE1F,0xDE19,0xDE0C,0xDE1E,0xDE1D,0xDE07, + 0xDF66,0xDFC5,0xDFBA,0xDFBD,0xDFC2,0xDFC3,0xDFBF, 0,0xDCA1,0xDCA2, + 0xDCA8,0xDCA3,0xDCAA,0xDCAF,0xDCB9,0xDD37,0xDE8F, 0,0xDE8E,0xDE87, + 0xDE8A,0xDE92,0xDE97,0xDE9F,0xDF05,0xDCA9,0xDCA7,0xDD8A,0xDD82,0xDD85, + 0xDD8B,0xDD89,0xDD81,0xDD80,0xDD87,0xDD86,0xDF4D,0xDC1C,0xDC1F,0xDD21, + 0xDD1D,0xDD22,0xDCFE,0xDD1B,0xDD3A,0xDD37,0xDD17,0xDD38,0xDD26,0xDD18, + 0xDE34,0xDE35,0xDE32, 0,0xDEE1,0xDEFD,0xDEE3,0xDEE8,0xDEF9,0xDEFF, + 0xDEFE, 0,0xDEE0,0xDF00, + /* plane 5, row 70 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BDB, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0x4C29,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C51,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x9BBA, + 0xD868,0xD868,0xD868,0xD868,0xD868, + 1, /* first low-surrogate */ + 0xDEEC,0xDEE4,0xDEEF,0xDEFA,0xDFCA,0xDC31,0xDC32,0xDC34,0xDC41, + 0xDD00,0xDD06,0xDD08,0xDD05,0xDD03,0xDD0B,0xDD02,0xDD0A,0xDDF0,0xDE13, + 0xDE0A,0xDE0F,0xDE11,0xDE08,0xDE0B,0xDE12,0xDE0D,0xDF5B,0xDF63,0xDF61, + 0xDF68,0xDF5A,0xDC4E,0xDC4D,0xDC50,0xDCFC,0xDD12,0xDCF5,0xDD1E,0xDCF0, + 0xDCF3,0xDCF2,0xDD01,0xDCEF,0xDCEE,0xDD16,0xDCF6,0xDCFB,0xDD1C, 0, + 0xDE5D,0xDE60,0xDE66,0xDE5F,0xDE61,0xDE5B,0xDE62,0xDE57,0xDF69,0xDF6B, + 0xDF61,0xDF77,0xDF5F,0xDF63,0xDF62,0xDF65,0xDCEF,0xDCE2,0xDD00,0xDCE8, + 0xDCF2,0xDCE7, 0,0xDCE5,0xDDD5,0xDDD0,0xDDDA,0xDDD3, 0,0xDDD9, + 0xDDCF,0xDDD6,0xDDD8,0xDDF5,0xDDCE,0xDDD7,0xDDF4,0xDDCD,0xDE01, 0, + 0xDC52,0xDC55,0xDC5A,0xDC4D,0xDC54, + /* plane 5, row 71 */ + 1 | (94 << 8), /* first, last */ + 0xD868,0xD868,0xD868,0xD868,0xD868,0x4CDB,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD868,0xD869,0x4D65, + 0xD869,0xD869,0x4D64,0x4D67,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD842,0xD842,0xD844,0xD844,0x3611,0xD844,0xD844, + 0xD844,0xD845,0x3733,0xD846,0xD846,0xD846,0xD847,0x3821,0x3822,0xD847, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0x39A6,0xD84A,0xD84A,0xD84A,0xD84A,0x39A3,0xD84B, + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDC53,0xDC5E,0xDC67,0xDC65,0xDC4E, 0,0xDC4F,0xDC61,0xDC6E, + 0xDC51,0xDC5B,0xDE63,0xDEB7,0xDEB6,0xDEC3,0xDEBB,0xDEB5,0xDF2E,0xDF30, + 0xDF33,0xDF31,0xDFA4,0xDFC1,0xDFBB,0xDFBE,0xDC00,0xDFFF,0xDC40, 0, + 0xDC3F,0xDC44, 0, 0,0xDCDB,0xDD0F,0xDD11,0xDD4E,0xDD4D,0xDD4B, + 0xDD4C,0xDD95,0xDC3B,0xDC45,0xDC44,0xDC3E,0xDC3C,0xDC3F,0xDCCC,0xDCCE, + 0xDE22,0xDE23,0xDE9F,0xDCC5,0xDCC4,0xDCE9,0xDC99, 0,0xDCE6,0xDCE7, + 0xDCF7,0xDCD2, 0,0xDCFD,0xDD0C,0xDD0B,0xDCED, 0, 0,0xDF9B, + 0xDC0A,0xDD6F,0xDD75,0xDEF2,0xDEF8,0xDC3E,0xDD24,0xDD0E,0xDD16,0xDD18, + 0xDD10,0xDD31,0xDD44, 0,0xDD29,0xDD2F,0xDD4B,0xDD36, 0,0xDE34, + 0xDE00,0xDE2B,0xDC20,0xDC21,0xDC1E, + /* plane 5, row 72 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E, + 0xD84F,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0x3EA1,0xD852,0xD852, + 0xD852,0xD852,0xD868,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857, + 0x425F,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x425C,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD859,0xD859, + 1, /* first low-surrogate */ + 0xDC1D,0xDEF5,0xDEF2,0xDEF6,0xDF90,0xDF9D,0xDF9C,0xDF92,0xDF94, + 0xDFD1,0xDF93,0xDFB7,0xDF97,0xDFB0,0xDF9F,0xDFC9,0xDD2D,0xDD2C,0xDE77, + 0xDC2C,0xDCC0,0xDCB9,0xDC53,0xDD40,0xDF02,0xDEFB, 0,0xDE8B,0xDEAE, + 0xDEAB,0xDFA1,0xDECD,0xDCEA,0xDEDD,0xDEDC,0xDED9,0xDFAB,0xDFAC,0xDFAD, + 0xDFB2,0xDC2C,0xDC2B,0xDCC2,0xDF00,0xDF0D,0xDF06,0xDEFF,0xDF03,0xDF01, + 0xDF10,0xDF0F,0xDF05,0xDF98,0xDF97,0xDF96,0xDF99,0xDDAC,0xDDAB,0xDF12, + 0xDCD8,0xDCDF,0xDCD6,0xDE2D,0xDE32,0xDD3F,0xDD2F,0xDD26,0xDD3A,0xDD39, + 0,0xDD3B,0xDD35,0xDD2A,0xDD21,0xDD38,0xDD37,0xDD34, 0,0xDD22, + 0xDD36,0xDD44,0xDF45,0xDF3B,0xDF36,0xDF42,0xDD7A,0xDD86,0xDD8B,0xDD7F, + 0xDD81,0xDF2A,0xDFD5,0xDC9F,0xDC9D, + /* plane 5, row 73 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85D,0x45F5,0xD85D,0x8804,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4711, + 0x470C,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD841,0xD861,0xD861, + 1, /* first low-surrogate */ + 0xDD26,0xDDF4,0xDDF5,0xDC15,0xDC8E,0xDC8F,0xDD26,0xDDA7,0xDDAF, + 0xDEAD,0xDEAC,0xDEAB,0xDEAA,0xDC2F,0xDC21,0xDC23,0xDCA3,0xDC49,0xDC3A, + 0xDC48,0xDC2D,0xDC25,0xDC29,0xDC32,0xDC34,0xDC24,0xDC2C,0xDC4B,0xDC3B, + 0xDC20,0xDC28,0xDC98, 0,0xDC97, 0,0xDC9D,0xDCA8,0xDDD5,0xDF77, + 0xDF78,0xDF72,0xDF73,0xDC02,0xDD3B,0xDEFE,0xDF0B,0xDEFF,0xDF07, 0, + 0,0xDF30,0xDFCD,0xDFCF,0xDC10,0xDC0A,0xDC83,0xDD15,0xDD0E,0xDD0C, + 0xDE02,0xDDFE,0xDE05,0xDE15,0xDE08,0xDF7F,0xDF77,0xDF7C,0xDF82,0xDF7E, + 0xDF78,0xDF7D,0xDF79,0xDF81,0xDD4B,0xDD63,0xDD64,0xDD56,0xDD54,0xDD4E, + 0xDD10,0xDD4F,0xDD57,0xDD5E,0xDD51,0xDD6A,0xDD69,0xDFAD,0xDFA4,0xDFAC, + 0xDFA9,0xDFAE,0xDC4C,0xDE50,0xDE35, + /* plane 5, row 74 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x494E, + 0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0x4B94,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866, + 1, /* first low-surrogate */ + 0xDE32,0xDFD8,0xDFD1,0xDFCF,0xDFBE,0xDCD5,0xDCC1,0xDCC6,0xDCC3, + 0xDCC2,0xDCC0,0xDCC5,0xDCC7,0xDCBF,0xDCC4,0xDCD4,0xDE90,0xDED2, 0, + 0xDED4,0xDCAF,0xDCAE,0xDCB2,0xDCAD,0xDD9C,0xDDA0,0xDDB6,0xDF3D,0xDF56, + 0xDF82,0xDC28,0xDC2B,0xDD3C,0xDD3E,0xDD3F,0xDD42,0xDD3D,0xDD41,0xDD3B, + 0xDD49,0xDD43,0xDE39,0xDE38,0xDF22,0xDF08,0xDF0C,0xDF06,0xDF13,0xDF04, + 0xDF20,0xDF1D,0xDF05,0xDF0A,0xDFD6,0xDFD7,0xDC36,0xDC37,0xDD23,0xDD22, + 0xDD20,0xDD1A,0xDD1D,0xDE1C,0xDE20,0xDE77,0xDF7F,0xDF8B,0xDF7D,0xDF99, + 0xDF84,0xDF89,0xDF85,0xDF83,0xDF86,0xDF9E,0xDC53,0xDD17, 0,0xDD19, + 0xDD20,0xDD1F,0xDD23,0xDD18,0xDD21,0xDD29,0xDD24,0xDD26,0xDE5E,0xDE6F, + 0xDE6E,0xDE74,0xDE72,0xDE73,0xDF7D, + /* plane 5, row 75 */ + 1 | (94 << 8), /* first, last */ + 0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0x4C63,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C61,0xD867,0x9BD8, + 0xD867,0x4C5A,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0x4CE3,0xD868, + 0xD868,0x9D7C,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0x4DAF,0xD869,0xD841,0xD841,0xD841,0xD84C,0xD844, + 0xD844,0xD844,0xD844,0x3613,0xD844,0xD844,0x3680,0xD845,0xD845,0xD846, + 0xD846,0xD846,0xD846,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDF7E,0xDF85,0xDF7F,0xDF84,0xDC44,0xDCF5,0xDCF8,0xDD03,0xDCF6, + 0xDE28, 0,0xDE39,0xDDFB,0xDE0E,0xDDFD,0xDE1F, 0,0xDE03, 0, + 0xDE10, 0,0xDE0D,0xDE27,0xDE41,0xDC72,0xDC78,0xDC80, 0,0xDC85, + 0xDC7B, 0,0xDC7D,0xDC91,0xDC88,0xDCAA,0xDC8D,0xDC89,0xDC95,0xDC9B, + 0xDC8C,0xDC9E,0xDC7C,0xDC86,0xDC84,0xDE68,0xDEC5,0xDEC4,0xDEC9,0xDEC6, + 0xDF42,0xDF45,0xDF41,0xDF44,0xDFA6,0xDFC2,0xDC42,0xDC49,0xDC48,0xDC4A, + 0xDC4C,0xDC4B,0xDD17,0xDD18,0xDD15,0xDD52,0xDD54,0xDD53,0xDD9A,0xDD9B, + 0xDDDC,0xDDE4,0xDE91, 0,0xDEBA,0xDC51,0xDC5B,0xDCCF,0xDF05,0xDD13, + 0xDD15,0xDD14,0xDD23, 0,0xDD11,0xDD12, 0,0xDCF0,0xDE9B,0xDD12, + 0xDD16,0xDD17,0xDDB5,0xDCF4,0xDFB1, + /* plane 5, row 76 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0x4DB0,0xD850,0xD864,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD853,0xD853,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x7C46, + 0xD857,0xD857,0xD857,0xD87E,0xD857, + 1, /* first low-surrogate */ + 0xDD79,0xDEFF,0xDEFC,0xDEFB,0xDC3F,0xDC44,0xDD9D,0xDD32,0xDD4C, + 0xDD2B,0xDD5A,0xDE1F,0xDE01,0xDE2D,0xDE27,0xDE59,0xDE5A,0xDE4D,0xDE58, + 0xDC23,0xDC25,0xDC2B,0xDEFF,0xDFAE,0xDFCB,0xDFCA,0xDFD0,0xDFCE,0xDFCC, + 0xDFD8,0xDFC6,0xDFD2,0xDFCF,0xDFC8,0xDF17, 0,0xDCC4,0xDE40,0xDCE9, + 0xDCF2,0xDCFC,0xDCEA,0xDCEB,0xDCFD,0xDC78,0xDC77,0xDC73,0xDC9E,0xDC79, + 0xDDA2,0xDE03,0xDF04,0xDF05,0xDCCE,0xDEBF,0xDEF6,0xDEF7,0xDC31,0xDC30, + 0xDCC9,0xDCC7,0xDF1C,0xDF28,0xDF1A,0xDF1E,0xDF1B,0xDF1F,0xDDBF,0xDDBB, + 0xDDBC,0xDDC0,0xDF1A,0xDCEF,0xDCEC,0xDCE9,0xDCF0,0xDCFE,0xDE34,0xDD6A, + 0xDD95,0xDD6C,0xDD72,0xDD67,0xDD60,0xDD6B,0xDD5E,0xDD6F,0xDD66, 0, + 0xDD62,0xDD5D,0xDD5C,0xDD65,0xDF50, + /* plane 5, row 77 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0x4323,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD85A,0xD85A,0x4449,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD842,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0x45FA,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD869,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDD9F, 0,0xDD9E,0xDDA6,0xDF35,0xDF38,0xDF36,0xDF3A,0xDFDC, + 0xDC7C,0xDCAB, 0,0xDCA8,0xDCA7,0xDD2B,0xDD2C,0xDD28,0xDD2B,0xDDA9, + 0xDDAA,0xDDAB,0xDDF8,0xDEB1,0xDEF0,0xDEEF,0xDCA8,0xDC8B,0xDC94,0xDC9E, + 0xDC8F,0xDC88,0xDC7E,0xDC81,0xDC30,0xDC9B,0xDC82,0xDC90,0xDC85,0xDC7F, + 0xDCA9,0xDCDE,0xDE0D, 0,0xDCCF,0xDCCB,0xDCD8,0xDCDD,0xDCD3,0xDCD0, + 0xDCD5,0xDCD6,0xDDD6,0xDF92,0xDF95,0xDDCB,0xDF8D,0xDF9B,0xDF9D,0xDF8F, + 0xDF9E,0xDFA6,0xDC96,0xDC92,0xDF16,0xDF2A,0xDF29,0xDF2C,0xDC15,0xDC12, + 0xDC11,0xDC13,0xDC88,0xDC8B,0xDC8A,0xDC87,0xDD17,0xDD16,0xDD1A,0xDE19, + 0xDE17,0xDF91,0xDF94,0xDD8B,0xDD90,0xDD8F,0xDD86,0xDD83,0xDD8E,0xDD87, + 0xDDA8,0xDD85,0xDDA6,0xDD82,0xDDA7, + /* plane 5, row 78 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0x4959,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0x4A7E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0x4BA8,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BA9,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866, + 1, /* first low-surrogate */ + 0xDFB9,0xDFB7,0xDFB4,0xDFB6,0xDFB3,0xDFC6,0xDE3C,0xDE40,0xDE38, + 0xDF91,0xDFA6,0xDFDA,0xDCDA,0xDCD8,0xDCD9,0xDCDB,0xDCD7,0xDF16,0xDF12, + 0xDF1F, 0,0xDF14,0xDF1A,0xDF10,0xDCB3,0xDDAE,0xDDC1,0xDDB0,0xDDAF, + 0xDDB1,0xDDAD,0xDDB2,0xDDC4,0xDC3C,0xDC3F,0xDD61,0xDD66,0xDE3C,0xDE3B, + 0xDF2C, 0,0xDF2A,0xDF3E,0xDF2F,0xDF32,0xDF27,0xDF29,0xDF40,0xDFDF, + 0xDFDE,0xDC3C,0xDC3B,0xDC3E,0xDD21,0xDD46,0xDD3C,0xDD36,0xDD38,0xDD35, + 0xDE31,0xDE36,0xDE2D,0xDE33,0xDE2F,0xDE2E,0xDE35,0xDFAC,0xDFA9,0xDFA6, + 0,0xDD4C,0xDD43,0xDD41,0xDD4F,0xDD42,0xDD51, 0,0xDD40,0xDD50, + 0xDD45,0xDD4A,0xDD4B,0xDE83,0xDE82,0xDE81,0xDEE0,0xDF98,0xDF9F,0xDF9B, + 0xDF9A,0xDF99,0xDF96,0xDFAE,0xDF9E, + /* plane 5, row 79 */ + 1 | (94 << 8), /* first, last */ + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869, + 0x4D54,0xD869,0x4D56,0xD869,0xD869,0xD869,0x4D6D,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0x4D8E,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD841,0xD841,0xD842,0xD842,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD847,0xD847, + 0xD847,0xD848,0xD849,0xD849,0xD849, + 1, /* first low-surrogate */ + 0xDD09,0xDD0D,0xDE4E,0xDE4A,0xDE4D,0xDE40,0xDE3E,0xDE48,0xDE42, + 0xDE62,0xDE45,0xDE51,0xDCC6,0xDCD0,0xDCC0,0xDCB7,0xDCC2,0xDCBC,0xDCC5, + 0xDCDC,0xDCDB,0xDCD2,0xDCC7,0xDCB6,0xDCC9,0xDCCC,0xDCD1,0xDCCD,0xDCDA, + 0xDCBA,0xDCD3,0xDCCE,0xDCF6,0xDCBD,0xDCDD,0xDCC8,0xDD0D,0xDD35,0xDE71, + 0xDE6E,0xDE6F,0xDED6,0xDF4C,0xDF4F,0xDF54,0xDF53,0xDFC9,0xDFC8,0xDC03, + 0,0xDC04, 0,0xDC57,0xDC52,0xDC53, 0,0xDC56,0xDC5C,0xDC55, + 0xDD64,0xDD5D,0xDD5E,0xDDA2,0xDDA3, 0,0xDDE7,0xDDE6,0xDE98,0xDEAC, + 0xDEAF,0xDEAE,0xDC59,0xDDA9,0xDC2A,0xDCC7,0xDD41,0xDD37,0xDD35,0xDD33, + 0xDD39,0xDD32,0xDCFF,0xDD01,0xDCF8,0xDD1B,0xDD19,0xDFBF,0xDFBC,0xDFBE, + 0xDFBD,0xDD7D,0xDC46,0xDC47,0xDDA4, + /* plane 5, row 80 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84B,0x3A72,0xD84C,0xD84C,0x3C14,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD850,0xD850,0xD850,0xD850, + 0x3D93,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD85C,0xD853,0xD853,0xD853,0xD853, + 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD857,0xD857,0xD857,0xD857,0x426F,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0x42B0,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD85A,0x352E,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85C, + 1, /* first low-surrogate */ + 0xDE21,0xDE62,0xDE86, 0,0xDC2F,0xDC31, 0,0xDFF8,0xDFF5, + 0xDFF9,0xDFF2,0xDFFA,0xDFF3,0xDC14,0xDFFD,0xDC0F,0xDC0E,0xDC01,0xDD37, + 0xDD35,0xDD34,0xDD31,0xDE7A,0xDE7B,0xDC37,0xDD2B,0xDCFB,0xDD16,0xDD13, + 0,0xDD11,0xDD0F,0xDD1B,0xDD38,0xDCA4,0xDF09,0xDF07,0xDF0B,0xDCD3, + 0xDCD1,0xDCD8,0xDF1D,0xDFA9,0xDFD0,0xDE15,0xDF02,0xDF05,0xDF01,0xDF00, + 0xDF2E,0xDF30,0xDF2F,0xDF31,0xDDD2,0xDDD3,0xDD02,0xDE40,0xDE42,0xDE3B, + 0xDECE,0xDD98,0xDD8F,0xDD94,0xDD91, 0,0xDDBA,0xDD90,0xDD86,0xDD9A, + 0xDD8C,0xDD93,0xDD87,0xDD88,0xDD97,0xDD8D,0xDD9C,0xDDBD,0xDF3C,0xDF59, + 0,0xDDD1,0xDDBB,0xDDBE,0xDE5D,0xDFE2,0xDE05,0xDCBA, 0,0xDCF4, + 0xDDB2,0xDDF9,0xDEB7,0xDEB6,0xDC89, + /* plane 5, row 81 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861, + 0xD861,0xD862,0xD862,0x4969,0x957E,0xD863,0xD863,0xD863,0xD863,0x49B4, + 0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A4D,0xD864,0xD864, + 0xD864,0xD864,0xD864,0x4A83,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDCF9,0xDCD9,0xDCE8,0xDCD4,0xDCDB,0xDCE2,0xDCDF,0xDCD1,0xDCE9, + 0xDCEA,0xDE13,0xDE11,0xDCFA,0xDCF8,0xDCF4,0xDCFB,0xDD0E,0xDD02,0xDD0F, + 0xDF90,0xDFAD,0xDFA9,0xDD48,0xDF5A,0xDF4F,0xDF4E,0xDF55,0xDF54,0xDF4A, + 0xDFD5,0xDC18,0xDC8D,0xDD1D,0xDD19,0xDE26,0xDE28,0xDE2B,0xDE7D,0xDFA0, + 0xDF9A,0xDF9B,0xDDB5,0xDDAD,0xDDB2,0xDE94,0xDFC9,0xDE4E,0xDE4F,0xDE44, + 0xDE52,0xDCE9,0xDD39, 0, 0,0xDDC7,0xDDD3,0xDDC6,0xDDC3, 0, + 0xDDD2,0xDF66,0xDD7F,0xDD80,0xDD84,0xDD85,0xDDE3, 0,0xDE41,0xDE44, + 0xDE43,0xDF4E,0xDF4F, 0,0xDF49,0xDF4A,0xDF4B,0xDF43,0xDFE0,0xDFE5, + 0xDFE1,0xDFE6,0xDFE2,0xDC0C,0xDC40,0xDD49,0xDD4A,0xDD54,0xDD4C,0xDD55, + 0xDD56,0xDE3B,0xDE3D,0xDFA4,0xDFA8, + /* plane 5, row 82 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD866,0x4BB0,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0x4C0C,0xD867,0x4C18,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0x9C20,0xD867,0xD867,0x9C22,0xD867,0xD867,0x9C1E, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4CF5,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869, + 1, /* first low-surrogate */ + 0xDFC3,0xDFBF,0xDFC8,0xDFC2,0xDFCA,0xDFCC,0xDFC9,0xDFBE,0xDFCD, + 0xDFC7,0xDFC5,0xDC5D, 0,0xDD6C,0xDD6B,0xDD70,0xDD6D,0xDD6F,0xDD89, + 0xDD84,0xDE8D,0xDE8A,0xDE8E,0xDE91,0xDFB5,0xDFB1,0xDFAF,0xDFB9,0xDFB7, + 0xDFB0, 0,0xDC17, 0,0xDC4F,0xDD19,0xDD10,0xDD18,0xDD11,0xDD1C, + 0xDD12,0xDE76,0xDE71, 0,0xDE7A,0xDE7F, 0,0xDE73,0xDEAB, 0, + 0xDE77,0xDE74,0xDE7E,0xDE9B,0xDE84,0xDE7C,0xDD29,0xDD2B,0xDD0E,0xDD00, + 0xDD0B,0xDCFE,0xDCFA,0xDD17,0xDCFF,0xDD0C,0xDD0F, 0,0xDD02,0xDD01, + 0xDCFC,0xDD49,0xDD06,0xDD12,0xDD13,0xDE78,0xDF5B,0xDF62,0xDF5F,0xDF5D, + 0xDFAB,0xDFD5,0xDFD4,0xDFD3,0xDC07,0xDC6C,0xDC70,0xDC6E,0xDC68,0xDC6D, + 0xDC77,0xDC6A,0xDCCE,0xDCEC,0xDD69, + /* plane 5, row 83 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,0xD841,0xD844, + 0xD845,0xD845,0xD846,0xD846,0xD846,0xD84C,0xD847,0xD847,0xD847,0xD848, + 0xD848,0xD849,0xD87E,0xD849,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84F,0xD850,0xD850,0xD851,0x3E0E,0xD851,0xD851,0xD852,0xD853, + 0x3FD8,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD859, + 1, /* first low-surrogate */ + 0xDD68,0xDDA6,0xDDA9,0xDDAA,0xDE00,0xDE0D,0xDDF8,0xDDFC,0xDE0A, + 0xDDF7,0xDE01,0xDEB6,0xDEBB,0xDEB7,0xDEB9,0xDECA,0xDC69,0xDE25,0xDD59, + 0xDD07,0xDD09,0xDD22,0xDF07,0xDF04,0xDF0F,0xDCF8,0xDFC7,0xDFD1,0xDD7E, + 0xDF08,0xDC4A,0xDC98,0xDCB9,0xDE88,0xDE91,0xDE84,0xDE73,0xDE89,0xDE85, + 0xDC33,0xDF13,0xDC1D,0xDC1F,0xDC1C,0xDC20,0xDC1A,0xDC1B,0xDD39,0xDDAF, + 0xDEE5,0xDC3C,0xDD37,0xDD3A,0xDCBB, 0,0xDF10,0xDF0D,0xDFAF,0xDC11, + 0,0xDF0D,0xDF0C,0xDF0B,0xDCD4,0xDF3D,0xDF3E,0xDF3B,0xDF43,0xDF40, + 0xDF46,0xDC11,0xDDDD,0xDDDF,0xDDEA,0xDF4A,0xDD06,0xDDC1,0xDDB9,0xDDC6, + 0xDDB8,0xDDBB,0xDDC8,0xDDC5,0xDDBF,0xDDC7,0xDDC4,0xDF65,0xDF67,0xDDD7, + 0xDDDB,0xDDD4,0xDDD6,0xDFE8,0xDE0A, + /* plane 5, row 84 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0x8970,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD860,0x482C,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD861,0xD862,0xD862,0x496E,0xD862,0xD862,0xD863,0xD863,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A86,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0x4BB3,0xD866,0xD866,0xD866, + 0x4BEB,0xD866,0xD866,0xD866,0xD866, + 1, /* first low-surrogate */ + 0xDEBD,0xDEBE,0xDD1A,0xDD0D,0xDD0F,0xDD1B,0xDD10,0xDD11,0xDD13, + 0xDE18,0xDD20,0xDD1F,0xDD23,0xDD1D,0xDD37,0xDD25,0xDD24,0xDD2A,0xDD27, + 0xDD33,0xDD28,0xDD34,0xDFBA, 0,0xDC9D,0xDD4C,0xDF5C,0xDF6A,0xDF5D, + 0xDF65,0xDF63,0xDF5E,0xDC19,0xDC97,0xDE3F,0xDE33,0xDE32,0xDFA1,0xDFA5, + 0xDFA4,0xDFA2,0xDDC1, 0,0xDDC7,0xDDC4,0xDDC6,0xDDC5,0xDDD4,0xDDCA, + 0xDE53,0xDCF1,0xDD21, 0,0xDFB7,0xDF92,0xDDD4,0xDF44,0xDD98,0xDD9B, + 0xDD91,0xDD95,0xDD9A,0xDD92,0xDF53,0xDF57, 0,0xDF5C,0xDF5D,0xDF64, + 0xDFEA,0xDFED,0xDC42,0xDC43,0xDD64,0xDD61,0xDD60,0xDE7D,0xDFD4,0xDFD5, + 0xDFD9,0xDD87,0xDD99,0xDD8C,0xDD8A,0xDD8F, 0,0xDD8B,0xDD82,0xDD9B, + 0,0xDFC8,0xDFC4,0xDFCC,0xDFC7, + /* plane 5, row 85 */ + 1 | (94 << 8), /* first, last */ + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0x9C43,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD87E,0xD87E,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x9DE0,0xD868,0xD868, + 0x4D42,0xD868,0xD868,0xD868,0xD868,0x4D41,0xD868,0xD868,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0x4DAC,0xD841,0xD841,0xD842,0xD842, + 0xD842,0xD844,0xD845,0xD846,0xD848,0xD84C,0xffff,0x3B2F,0x3B2E,0xD84C, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C4D,0x3C7B,0xD84E, + 0xD84E,0xD84E,0xD84F,0xD850,0xD850, + 1, /* first low-surrogate */ + 0xDFC3,0xDFC6,0xDFCB,0xDFCA,0xDFC9,0xDFCD,0xDC53,0xDD21,0xDD29, + 0xDD1D,0xDD24,0xDD28, 0,0xDEB1,0xDEB2,0xDEB5,0xDED6,0xDEAF,0xDECA, + 0xDEB8,0xDE12,0xDE11,0xDD45,0xDD47,0xDD34,0xDD6E,0xDD42,0xDD31,0xDD2E, + 0xDD56,0xDD38,0xDD37,0xDD4B,0xDD2D,0xDD33,0xDD36, 0,0xDD48,0xDEDC, + 0,0xDF66,0xDF6D,0xDF63,0xDF64, 0,0xDF67,0xDFD9,0xDC0B,0xDC7E, + 0xDC8B,0xDD26,0xDD2C,0xDD29,0xDD6F,0xDD6B,0xDD6D,0xDD6E,0xDE1C,0xDE11, + 0xDE10,0xDE24,0xDE12,0xDE15,0xDE17, 0,0xDC6F,0xDDAB,0xDC2E,0xDCC9, + 0xDF96,0xDD85,0xDEA0,0xDD2B,0xDF0D,0xDC36, 0, 0, 0,0xDFB1, + 0xDC4A,0xDC37,0xDC3C,0xDC38,0xDC3A,0xDC3E,0xDC49, 0, 0,0xDE80, + 0xDE7F,0xDEE3,0xDC3F,0xDD52,0xDD4E, + /* plane 5, row 86 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD850,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853, + 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0x42B2,0xD858,0xD858,0xD85A,0xD85A, + 0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0x4722,0xD85E,0xD85E,0xD85F,0xD85F,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD862,0xD862, + 0xD862,0x9459,0xD862,0x4970,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867, + 1, /* first low-surrogate */ + 0xDD4A,0xDD4B,0xDCD5,0xDED8,0xDF20,0xDFB3,0xDFB1,0xDFB0,0xDF17, + 0xDCD9,0xDF49,0xDC13,0xDDED,0xDDEB,0xDDEE,0xDD0A,0xDD0B,0xDE4A,0xDDD5, + 0xDDD7,0xDDDE,0xDDDC,0xDDEE,0xDF70, 0,0xDDD9,0xDFD7,0xDCCB,0xDCC7, + 0xDDFC,0xDD3B,0xDD39,0xDD4B,0xDD43,0xDD40,0xDD46,0xDD4D,0xDD43,0xDD47, + 0xDD4B,0xDD55,0xDD52,0xDF5F, 0,0xDF7C,0xDF7B,0xDFA8,0xDFA9,0xDDDE, + 0xDDD7,0xDDDD,0xDDD6,0xDDD8,0xDE9B,0xDFE0,0xDFE8,0xDFE6,0xDCF8,0xDCFB, + 0xDFBB, 0,0xDFB8, 0,0xDCC1,0xDCC0,0xDDA4,0xDDAB,0xDE4D,0xDF65, + 0xDF67,0xDF6A,0xDF66,0xDF69,0xDD73,0xDD80,0xDD6F,0xDD71,0xDFE4,0xDFE6, + 0xDFE7,0xDDA0,0xDDA4,0xDEA2,0xDEA7,0xDEA4,0xDFDE,0xDFDB,0xDC58,0xDC5C, + 0xDD2F,0xDD2E,0xDEDD,0xDEE4,0xDED8, + /* plane 5, row 87 */ + 1 | (94 << 8), /* first, last */ + 0xD867,0xD867,0xD867,0x4C95,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0x4D00,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0x4D02,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0x4D9F,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD841,0xD842,0xD844,0xD844,0xD845,0xD847,0xD848,0xD84A,0xD84A, + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD850,0xD850,0xD851,0xD851,0xD852,0xD853,0xD854,0xD854,0xD855,0xD855, + 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858, + 0xD858,0xD858,0xD859,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDEE7,0xDEDA,0xDE75, 0,0xDD79,0xDD80,0xDD7F,0xDD7C,0xDD75, + 0xDD7B,0xDD82, 0,0xDD89,0xDD74,0xDD7D,0xDD7A,0xDD86,0xDDA8,0xDD72, + 0,0xDD8B,0xDD91,0xDDB3,0xDD81,0xDE82,0xDEE1,0xDEE3,0xDEE2,0xDF76, + 0xDF74,0xDF72,0xDF75,0xDC0E,0xDC0D,0xDC94,0xDC92,0xDC93,0xDC91,0xDC8F, + 0xDC95,0xDCD0,0xDCF7,0xDD76,0xDDAF, 0,0xDE26,0xDE25,0xDE2D,0xDEA0, + 0xDEC3,0xDCD7,0xDECC,0xDD79,0xDD7A,0xDD15,0xDFDB,0xDD85,0xDD70,0xDD7B, + 0xDEA5,0xDE9F,0xDF17,0xDFB2,0xDC39,0xDC40,0xDC4E,0xDD3E,0xDEE8,0xDEE7, + 0xDD66,0xDD61,0xDCDA,0xDF14,0xDCDF,0xDF18,0xDC39,0xDC3A,0xDF30,0xDF32, + 0xDD0E,0xDE4C,0xDDE8,0xDDF1,0xDDEB,0xDDEC,0xDF74,0xDF73,0xDDF1,0xDF42, + 0xDF3E,0xDF41,0xDD2C,0xDCD2,0xDDBB, + /* plane 5, row 88 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85C,0x457D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861, + 0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864, + 0x4AF6,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866, + 0x4C12,0xD867,0xD867,0xD867,0x4C91,0xD867,0xD867,0xD867,0xD867,0x4C90, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869, + 1, /* first low-surrogate */ + 0xDD58,0xDD57,0xDD56,0xDD5A, 0,0xDD61,0xDD68,0xDD65,0xDD5F, + 0xDD64,0xDD5E,0xDD5B,0xDD67,0xDFC3,0xDCA2,0xDD53,0xDF7D,0xDC20,0xDFAE, + 0xDFAF,0xDFB0,0xDDE7,0xDDE6,0xDDE9,0xDFF1,0xDFEB,0xDFEA,0xDFE9,0xDE63, + 0xDD02,0xDCFE,0xDFDE,0xDCC2,0xDDE6,0xDF5D,0xDDAD,0xDF75,0xDF72,0xDF77, + 0,0xDE51,0xDFE8,0xDFED,0xDFEE,0xDDB9,0xDDA1,0xDDB6,0xDEAE,0xDFE8, + 0,0xDC1E,0xDD31,0xDD32, 0,0xDF0E,0xDF12,0xDF09,0xDF05, 0, + 0xDF03,0xDF1F,0xDF0D,0xDF0C,0xDF04,0xDF0A,0xDDC2,0xDDBF,0xDDC9,0xDDB2, + 0xDDC1,0xDDAF,0xDDB4,0xDDB0,0xDDB6,0xDDB7,0xDDBB,0xDDB1,0xDEF0,0xDF78, + 0xDF7A,0xDF79,0xDFE4,0xDFE6,0xDC9F,0xDC9D,0xDC98,0xDC99,0xDCF9,0xDD30, + 0xDD82,0xDD81,0xDDB3,0xDD7F,0xDE3A, + /* plane 5, row 89 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD869,0xD844,0xD846,0xD846,0xD847,0xD847,0xD849,0xD84A, + 0x3A79,0xD84C,0xD84E,0xD84E,0xD84E,0x3C4E,0xD84E,0xD852,0xD855,0xD856, + 0xD856,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD859,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD860, + 0xD860,0xD860,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865, + 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0x4D1E,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869, + 1, /* first low-surrogate */ + 0xDE3E,0xDE48,0xDD86,0xDD36,0xDF13,0xDC22,0xDFDD,0xDDA7,0xDD7D, + 0,0xDF1C,0xDC65,0xDC60,0xDC67, 0,0xDF1A,0xDEE3,0xDF34,0xDD18, + 0xDE52,0xDDFC,0xDF79,0xDF78,0xDF76,0xDDFA,0xDDF8,0xDD2D,0xDCD6,0xDDBD, + 0xDDBF,0xDDBE,0xDD44,0xDD70,0xDD62,0xDD6E,0xDD6E,0xDD7C,0xDD74,0xDD78, + 0xDD70,0xDD79,0xDD71,0xDFCC,0xDCA7,0xDCA6,0xDF93,0xDC21,0xDC9C,0xDE9D, + 0xDFF4,0xDFF3,0xDDF0,0xDDB8,0xDDB6,0xDDBD,0xDF73,0xDF82,0xDD87,0xDE56, + 0xDE59,0xDFF6,0xDDC9,0xDDC5,0xDDC7,0xDDCA,0xDDC2,0xDDC4,0xDFF2,0xDFF0, + 0xDD3B,0xDD3A,0xDF26,0xDF28,0xDF34,0xDF2D,0xDDD7,0xDDD2,0xDDD6,0xDDDC, + 0xDDD3,0xDDD1,0xDE86, 0,0xDEEF,0xDEEE,0xDFE8,0xDCAC,0xDCA9,0xDCAA, + 0xDCAB,0xDCFB,0xDD33,0xDD88,0xDDB6, + /* plane 5, row 90 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD846,0xD847,0xD84E, + 0xD850,0xD850,0xD852,0xD855,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD858,0xD85C,0xD85C,0xD85D,0xD87E,0xD85E,0xD85F,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867, + 0xD867,0x9C72,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD846, + 0xD847,0xD848,0xD848,0xD850,0xD850,0xD851,0xD852,0xD853,0xD855,0xD85A, + 0xD85A,0xD85A,0xD85C,0xD85D,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F, + 0xD860,0xD862,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDDB7,0xDDD0,0xDDCF,0xDE4F,0xDE59,0xDE4C,0xDF18,0xDFE0,0xDC69, + 0xDD73,0xDD72,0xDEE8,0xDDFB,0xDD1C,0xDE09,0xDE0A,0xDE08,0xDF7D,0xDF7F, + 0xDE67,0xDD7A,0xDD7B,0xDFD1,0xDDCB,0xDF9D,0xDC9D,0xDDFC,0xDDFB,0xDDFD, + 0xDFF5,0xDFF6,0xDC0F,0xDC1D,0xDDC7,0xDDC1,0xDDBF,0xDE54,0xDF7F,0xDFF5, + 0xDD8A,0xDD8C,0xDE5C,0xDC65,0xDDCF,0xDDD0,0xDEB8,0xDFFA,0xDC66,0xDF40, + 0xDF41, 0,0xDDF7,0xDDF3,0xDDEF,0xDDF4,0xDDED,0xDDF2,0xDDF1,0xDDF9, + 0xDCB4,0xDCFC,0xDDBC,0xDE5E,0xDE5B,0xDE5F,0xDE5D,0xDECF,0xDECE,0xDD3A, + 0xDFE1,0xDF15,0xDF14,0xDD78,0xDD79,0xDCE6,0xDFB8,0xDF22,0xDDFE,0xDCDB, + 0xDE06,0xDEC8,0xDD89,0xDD86,0xDCAD,0xDF99,0xDFD8,0xDC23,0xDD23,0xDFB5, + 0xDFF9,0xDD07,0xDC1E,0xDDFB,0xDF72, + /* plane 5, row 91 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD864,0xD865,0xD865,0xD865,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD847,0x3828, + 0xD84A,0xD84C,0xD84E,0xD850,0xD851,0xD854,0xD857,0xD85A,0xD85C,0xD85D, + 0xD85D,0xD85F,0xD860,0xD861,0xD864,0xD864,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD845,0xD84A,0xD856,0xD856,0xD856,0xD857,0xD858, + 0xD85C,0xD85D,0xD85D,0xD85E,0xD860,0xD861,0xD864,0xD864,0xD866,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869, + 0x4D91,0xD87E,0xD857,0xD857,0xD85D, + 1, /* first low-surrogate */ + 0xDF73,0xDF87,0xDC49,0xDE5D,0xDFF8,0xDC03,0xDF4E,0xDF4D,0xDF50, + 0xDF55,0xDE09,0xDE07,0xDE0C,0xDE03,0xDE06,0xDE0B,0xDE0A,0xDE89,0xDCBB, + 0xDCFF,0xDD36,0xDD8B,0xDE66,0xDE69,0xDE67,0xDEC2,0xDED2,0xDFE2, 0, + 0xDD88,0xDF5B,0xDC76,0xDD7D,0xDDA6,0xDF5A,0xDE17,0xDCDC,0xDD8F,0xDD94, + 0xDD95,0xDFB6,0xDE04,0xDFEE,0xDF8A,0xDFF9,0xDC07,0xDC1F,0xDC2A,0xDD45, + 0xDF5C,0xDF5B,0xDF61,0xDF5D,0xDE18,0xDE1F,0xDF83,0xDC16,0xDC14,0xDCBF, + 0xDCC0,0xDE73,0xDEC0,0xDD17,0xDD89,0xDD1E,0xDD1F,0xDE54,0xDE18,0xDE05, + 0xDD95,0xDD98,0xDD9B,0xDD59,0xDE08,0xDC01,0xDDCE,0xDFFA,0xDEBE,0xDD47, + 0xDF6A,0xDF69,0xDF68,0xDF67,0xDE25,0xDE28,0xDCC4,0xDD37,0xDD8D,0xDD8C, + 0,0xDD20,0xDE22,0xDF82,0xDFD9, + /* plane 5, row 92 */ + 1 | (49 << 8), /* first, last */ + 0xD863,0xD864,0xD866,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868, + 0xD869,0xD857,0xD85A,0xD867,0xD867,0xD868,0xD868,0xD868,0xD869,0xD869, + 0xD847,0xD864,0xD867,0xD867,0xD868,0xD868,0xD869,0xD869,0xD850,0xD85C, + 0x4587,0xD865,0xD867,0xD868,0xD869,0xD855,0xD85E,0xD869,0xD868,0xD865, + 0xD868,0xD85C,0xD869,0xD85D,0xD864,0xD869,0xD869,0xD85C,0xD85A,0xD869, + 1, /* first low-surrogate */ + 0xDC38,0xDFFB,0xDDE1,0xDC72,0xDD48,0xDF6C,0xDF70,0xDE31,0xDE30, + 0xDE79,0xDE23,0xDCF8,0xDC74,0xDF73,0xDE34,0xDF87,0xDFB2,0xDDC2,0xDE7D, + 0xDFE5,0xDF8C,0xDF77,0xDF75,0xDE38,0xDE3A,0xDE83,0xDE81,0xDD80,0xDD99, + 0,0xDC4A,0xDD4A,0xDE3C,0xDEC8,0xDE04,0xDCAF,0xDE89,0xDEFA,0xDE61, + 0xDE3F,0xDD93,0xDCC9,0xDFDE,0xDF91,0xDE8E,0xDE8D,0xDD98,0xDDC5,0xDEA5, + /* plane 5, row 93: --- */ + /* plane 5, row 94: --- */ + /* plane 6, row 1 */ + 1 | (94 << 8), /* first, last */ + 0xD87E,0xD840,0x3405,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD842,0xD842,0xD840,0xD840,0xD840,0xD840,0x3404,0xD87E,0xD840,0xD840, + 0xD840,0xD840,0xD841,0xD841,0xD87E,0xD841,0xD842,0x353F,0xD842,0xD842, + 0xD847,0xD848,0xD848,0xD841,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD87E,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD841,0xD842,0xD842, + 0xD841,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD844, + 0xD844,0xD845,0xD845,0xD846,0xD846,0xD846,0xD847,0xD847,0x382A,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0x38A7, + 0xD848,0xD848,0xD848,0xD849,0x38FA, + 1, /* first low-surrogate */ + 0xDC02,0xDC62, 0,0xDC88,0xDCD0,0xDCCF,0xDD1E,0xDD1F,0xDD20, + 0xDD0E,0xDD2C,0xDC61,0xDC04,0xDC05,0xDC03, 0,0xDC01,0xDC7D,0xDC8D, + 0xDDA3,0xDDA4,0xDCDB,0xDD00,0xDC1E,0xDEA3,0xDC32, 0,0xDED4,0xDED5, + 0xDC23,0xDF2C,0xDF7A,0xDD03,0xDC07,0xDC08,0xDC8F,0xDC9C,0xDCD5,0xDD12, + 0xDD13,0xDD14,0xDD21,0xDDA8,0xDDA6,0xDC76,0xDD01,0xDD3D,0xDC14,0xDD3E, + 0xDE29,0xDE77,0xDE78,0xDEA6,0xDEA9,0xDEAC,0xDC34,0xDD04,0xDD7B,0xDE10, + 0xDE2F,0xDED7,0xDF1C,0xDF1F,0xDF1A,0xDC36,0xDF1E,0xDF9E,0xDF9A,0xDDA0, + 0xDDA1,0xDDD2,0xDDD3,0xDDB9,0xDF1D,0xDF55,0xDCFF,0xDFE7, 0,0xDC11, + 0xDC13,0xDC12,0xDDAF,0xDDB1,0xDC90,0xDF2D,0xDF7B,0xDF9D,0xDF9A, 0, + 0xDF9F,0xDFA0,0xDF9C,0xDCBD, + /* plane 6, row 2 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD84C,0xD84C,0xD84F,0xD851,0xD87E,0xD855,0xD858,0xD858, + 0xD840,0xD840,0x3400,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841, + 0xD841,0xD841,0xD841,0x34DB,0xD842,0xD841,0xD841,0xD841,0xD87E,0xD842, + 0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD840,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD87E, + 0xD842,0xD842,0xD842,0xD840,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDDAA,0xDC6C,0xDC91,0xDC74,0xDD6A,0xDD29,0xDE05,0xDE6B,0xDE6A, + 0xDCE0,0xDC12, 0,0xDC7F,0xDCA0,0xDC99,0xDC95,0xDC9E,0xDCDF,0xDCDE, + 0xDDAF,0xDDAD,0xDDB0,0xDCDF,0xDD43,0xDD41,0xDD48,0xDD75,0xDC1A,0xDE32, + 0xDE7B,0xDE79,0xDEB3, 0,0xDFA7,0xDEB2,0xDEB0,0xDEB4,0xDC29,0xDCCD, + 0xDCCE,0xDC2B,0xDD10,0xDD80,0xDDD3,0xDE30,0xDC98,0xDE2F,0xDE31,0xDEDA, + 0xDED9,0xDF27,0xDF28,0xDF21,0xDF25,0xDFA6,0xDFA2,0xDFA1,0xDFA4,0xDC39, + 0xDFAA,0xDFA5,0xDFA3,0xDC64,0xDE3F,0xDE44,0xDD1B,0xDD53,0xDD84,0xDD86, + 0xDDD5,0xDC60,0xDD3E,0xDD40,0xDFCA,0xDFC9,0xDC26,0xDD00,0xDD31,0xDD3C, + 0xDD30,0xDD33,0xDD32,0xDD38,0xDC34,0xDC53,0xDC54,0xDDB4,0xDDB2,0xDF2F, + 0xDFA5,0xDFA7,0xDFA4,0xDFA8,0xDFA9, + /* plane 6, row 3 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84C,0xD84C,0xD84C,0xD84E,0xD850,0xD851,0xD851,0xD851,0xD852, + 0xD852,0xD852,0xD853,0xD856,0xD85A,0xD860,0xD860,0xD841,0xD867,0xD867, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0x3438,0xD840,0xD840,0xD840, + 0xD87E,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD85A,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x6530,0xD842,0xD842,0xD842, + 0xD842,0x353A,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD847, + 1, /* first low-surrogate */ + 0xDFA2,0xDFA3,0xDFA6,0xDC81,0xDC80,0xDDAD,0xDE24,0xDE65,0xDE68, + 0xDE69,0xDD3C,0xDD3B,0xDF5D,0xDD44,0xDD82,0xDCF1,0xDD6B,0xDF1B,0xDCEB, + 0xDFBA,0xDFD3,0xDD13,0xDD22,0xDEF4,0xDE0F,0xDE10,0xDD07,0xDC0B,0xDC0A, + 0xDC19,0xDC1A,0xDC18,0xDC66,0xDC82,0xDCA8,0xDCE5,0xDCE7,0xDCE4,0xDD15, + 0xDD23,0xDD24,0xDD43,0xDDC3,0xDDBC,0xDDBB, 0,0xDDB7,0xDDB9,0xDDCF, + 0xDC0D,0xDC7A,0xDC7B,0xDCE1,0xDCE0,0xDD09,0xDD4D,0xDC16,0xDD4B,0xDD79, + 0xDDB1,0xDE36,0xDE35,0xDE37,0xDE38,0xDE7F,0xDE80,0xDE81,0xDD53,0xDE7E, + 0xDECD,0xDEBF,0xDEBE,0xDEC2,0xDEB8,0xDEC1, 0,0xDD31,0xDD2F,0xDD6F, + 0xDD82, 0,0xDD87,0xDD86,0xDD8D,0xDD94,0xDDD7,0xDDD4,0xDDD8,0xDE16, + 0xDE14,0xDE2E,0xDE36,0xDE37,0xDFEE, + /* plane 6, row 4 */ + 1 | (94 << 8), /* first, last */ + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,0xD844,0xD844,0xD844,0xD87E, + 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846, + 0xD87E,0xD846,0xD846,0xD87E,0xD846,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD840,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD840,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849, + 0x38C9,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDEE0,0xDEE5,0xDEDF,0xDF2B,0xDF29,0xDF2D,0xDF2F,0xDFB7,0xDFC9, + 0xDFC1,0xDFCA,0xDFB2,0xDFAC,0xDFAE,0xDDB2,0xDDA8,0xDDB0,0xDDA7,0xDC51, + 0xDE52,0xDE4A,0xDD56,0xDD55,0xDD5F,0xDD5E,0xDD88,0xDC5D,0xDDDD,0xDDE2, + 0xDDE1,0xDDDF,0xDDE0,0xDEAF,0xDEB1,0xDEBA,0xDD45,0xDD43,0xDDBD,0xDDC8, + 0xDC6C,0xDDBE,0xDDBF,0xDC74,0xDF59,0xDC29,0xDC2C,0xDC2F,0xDC2D,0xDC2E, + 0xDD04,0xDD02,0xDD01,0xDD40,0xDD4A,0xDD3F,0xDD4F,0xDD41,0xDD4E,0xDFEB, + 0xDFEC,0xDCAC,0xDC5B,0xDC63,0xDC5A,0xDC59,0xDDDC,0xDDDB,0xDDD9,0xDDE0, + 0xDDDD,0xDC20,0xDFB0,0xDFB1,0xDFB2,0xDFB6,0xDC51,0xDC52,0xDC50,0xDC84, + 0,0xDC83,0xDDC3,0xDDB8,0xDDB9,0xDDB2,0xDD90,0xDE26,0xDE29,0xDE6E, + 0xDD40,0xDD3E,0xDD41,0xDF5E,0xDFBB, + /* plane 6, row 5 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84C,0xD87E,0xD84E,0x3C4F,0xD84E,0xD84E,0xD84E,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD850,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853, + 0xD855,0xD87E,0xD855,0xD855,0xD858,0xD858,0xD858,0xD858,0xD859,0xD841, + 0xD859,0x43CD,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x4492,0xD85A,0xD85A, + 0xD87E,0xD87E,0xD85F,0xD860,0xD840,0xD861,0xD861,0xD861,0xD861,0xD87E, + 0xD861,0xD863,0xD842,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD87E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0x3445,0xD87E,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0x34B5,0xD841,0x34B6,0xD841, + 1, /* first low-surrogate */ + 0xDFBC,0xDFB9,0xDCEF,0xDC80, 0,0xDD45,0xDDBA,0xDDBD,0xDC56, + 0xDC55,0xDC75,0xDC77,0xDC81,0xDCFA,0xDC83,0xDC8B,0xDC84,0xDD86,0xDD83, + 0xDD8B,0xDD6D,0xDE16,0xDF28,0xDCEA,0xDFD4,0xDC03,0xDD15,0xDF3D,0xDF3E, + 0xDC16,0xDD4C,0xDE06,0xDF4D,0xDE22,0xDE73,0xDE6D,0xDE6E,0xDCB1,0xDD4E, + 0xDE2D, 0,0xDCF9,0xDD52,0xDF00,0xDEFC,0xDEFA, 0,0xDEF7,0xDEF8, + 0xDD90,0xDDC4,0xDC27,0xDE11,0xDCAE,0xDC50,0xDC4F,0xDC4D,0xDE71,0xDDE2, + 0xDE72,0xDE18,0xDE44,0xDC21,0xDC67,0xDCAF,0xDCB0,0xDC29,0xDD17,0xDD22, + 0xDC03,0xDC25,0xDD28,0xDDFF,0xDDD9,0xDDDB,0xDDDE,0xDDF2,0xDDFE,0xDDF4, + 0xDDDD, 0,0xDC04,0xDE01,0xDDDC,0xDC7D,0xDC81,0xDC7E,0xDC7F,0xDCE5, + 0xDD0F, 0,0xDD0A, 0,0xDD0B, + /* plane 6, row 6 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0x3537,0xD842,0x3530,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD854,0xD842,0xD844,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0x373E,0x374D, + 0x3751,0xD846,0xD846,0xD846,0xD846, + 1, /* first low-surrogate */ + 0xDD51,0xDD52,0xDD50,0xDDB8,0xDE3D,0xDE3E,0xDE3C,0xDE87,0xDED7, + 0xDEDB,0xDECF,0xDEE0,0xDC4C,0xDC42,0xDCD4,0xDD11,0xDD14,0xDD15,0xDD12, + 0xDD33,0xDD35, 0,0xDD71, 0,0xDD91,0xDD93,0xDD95,0xDDDC,0xDE42, + 0xDE40,0xDFA6,0xDEE6,0xDE8F,0xDF32,0xDC37,0xDF31,0xDFF5,0xDFCD,0xDFDE, + 0xDFD5,0xDFDA,0xDFEE,0xDFEC,0xDFCF,0xDFCE,0xDC3D,0xDFCC,0xDFF3,0xDDC1, + 0xDDC4,0xDDC6,0xDDB4,0xDDC3,0xDDB8,0xDDBB,0xDDB7,0xDDBC,0xDDBF,0xDDC7, + 0xDDBE,0xDE60,0xDE5D,0xDE76,0xDE6C,0xDE75,0xDE5B,0xDE71,0xDE73,0xDE61, + 0xDE5A,0xDE62,0xDE72,0xDE5F,0xDE58,0xDD1E,0xDD58,0xDD8B,0xDD8A,0xDDF4, + 0xDDF0,0xDED2,0xDECD,0xDECE,0xDEBC,0xDED0,0xDD46,0xDD47, 0, 0, + 0,0xDDCE,0xDDCF,0xDDCC,0xDDCB, + /* plane 6, row 7 */ + 1 | (94 << 8), /* first, last */ + 0xD87E,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x3873, + 0xD848,0xD848,0xD87E,0xD848,0xD85A,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0x39BE,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B, + 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDC72,0xDF60,0xDF5F,0xDF5D,0xDFD4,0xDC3A,0xDC38,0xDC3C,0xDC36, + 0xDD08,0xDD7E,0xDD5E,0xDD6E,0xDD53,0xDD70,0xDD57,0xDD5D,0xDD63,0xDD7A, + 0xDD79,0xDD93,0xDC81,0xDC1D,0xDC68,0xDC73,0xDC74,0xDC66,0xDC6F,0xDC75, + 0xDC7A,0xDC70,0xDC6D,0xDC65,0xDD8A,0xDDED,0xDDE9,0xDDE3,0xDDEF, 0, + 0xDDEA,0xDF31,0xDC91,0xDF38,0xDF20,0xDF35,0xDF3A,0xDF81,0xDF80,0xDFB8, + 0xDFC1,0xDFBA,0xDC88,0xDCCF,0xDCCA,0xDCC7,0xDCC5,0xDCC8,0xDCD0,0xDCC9, + 0xDDBB,0xDDB6,0xDDBD,0xDC9D,0xDDB4,0xDDC1,0xDDD1,0xDDD2,0xDDCC,0xDDD4, + 0xDDCB,0xDDCE,0xDDD5,0xDDD8,0xDD95,0xDD93,0xDD99,0xDD96, 0,0xDE89, + 0xDE94,0xDE91,0xDE8F,0xDE84,0xDE97,0xDE86,0xDE85,0xDE8C,0xDEF2,0xDEED, + 0xDEEF,0xDCD9,0xDD46,0xDD47,0xDD4B, + /* plane 6, row 8 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD84E,0x3C1E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0x3CC8,0xD84F,0xD84F,0xD84F, + 0xD84F,0x3CC3,0x3CC7,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0x3F56,0xD853,0x3540,0xD853, + 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855, + 0xD855,0xD856,0xD856,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD841,0xD87E,0xD85A,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDD50,0xDD4A,0xDD4E,0xDD4C,0xDD48,0xDF63,0xDF61,0xDF62,0xDF60, + 0xDFC3,0xDFC5,0xDFC1,0xDFD0,0xDCDC,0xDC82, 0,0xDC86,0xDC84,0xDD4C, + 0xDD48,0xDDB8,0xDDBF,0xDDC1,0xDDC6,0xDDC5,0xDDC7,0xDDC0,0xDDC3,0xDEED, + 0xDF03,0xDF22,0xDF21,0xDC9F,0xDC90,0xDC9E, 0,0xDCA0,0xDC94,0xDC95, + 0xDCA1, 0, 0,0xDD9A,0xDD90,0xDCF2,0xDCF3,0xDD6E,0xDDAB,0xDDA9, + 0xDE1A,0xDE18,0xDE1B,0xDF60,0xDF4C,0xDF42,0xDF33,0xDF3F,0xDF3E,0xDF38, + 0xDF43,0xDF46,0xDF36,0xDCEE,0xDCF5,0xDCF4, 0,0xDC1B, 0,0xDD2B, + 0xDD29,0xDD2A,0xDD2E,0xDC3F,0xDCE6,0xDFA7,0xDFA8,0xDC18,0xDE08,0xDF50, + 0xDF53,0xDE56,0xDE55,0xDE6F,0xDE7F,0xDCB3,0xDE3A,0xDE38,0xDE37,0xDE36, + 0xDD54,0xDD80,0xDCDD,0xDCFC,0xDCFA, + /* plane 6, row 9 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD87E,0xD85C, + 0xD87E,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD863,0x49BD,0xD87E,0xD840,0xD840,0xD845,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD848,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0x351A, + 0xD842,0xD842,0x352C,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842, + 1, /* first low-surrogate */ + 0xDD33,0xDF04,0xDF07,0xDF08,0xDF06,0xDF09,0xDD91,0xDD93,0xDE1E, + 0xDDD2,0xDC0B,0xDC43,0xDC52,0xDC58,0xDC5E,0xDE68,0xDE8D,0xDE82,0xDE7B, + 0xDC58, 0,0xDC00,0xDC2C,0xDC2E,0xDE0B,0xDC2D,0xDC69,0xDCB2,0xDCB6, + 0xDCA9,0xDCED,0xDD19,0xDD4F,0xDE16,0xDE03,0xDE0E,0xDE04,0xDE07,0xDE10, + 0xDE27,0xDE28,0xDE0D,0xDE29,0xDE0F,0xDE22,0xDE11,0xDC85,0xDC84,0xDC83, + 0xDC8A,0xDC86,0xDD10,0xDD58,0xDD5A,0xDF0C,0xDDC4,0xDDC5,0xDE47,0xDE49, + 0xDE4A,0xDE4B,0xDDBB,0xDE8D,0xDE8B,0xDF07,0xDF06,0xDC20,0xDEEF,0xDEF0, + 0xDEED,0xDEF9,0xDF02,0xDEE7,0xDEF4,0xDEF7,0xDEF1,0xDC53,0xDC55, 0, + 0xDCDA,0xDCD9, 0,0xDD38,0xDD99,0xDDA2,0xDD9C,0xDD9A,0xDD9B,0xDDE5, + 0xDDE3,0xDDE1,0xDDE0,0xDDE2,0xDDE4, + /* plane 6, row 10 */ + 2 | (94 << 8), /* first, last */ + 0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0x3549,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0x357C,0xD843,0xD843,0xD87E,0xD843, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0x37BF,0xD847,0xD847,0xD847, + 0xD847,0x37BA,0xD847,0xD847,0xD848, + 2, /* first low-surrogate */ + 0xDDE8,0xDC2F,0xDE13,0xDE56,0xDE4B,0xDE4A,0xDE4D,0xDE4C, + 0,0xDEEA,0xDEE9,0xDEEB,0xDEEC,0xDF3A,0xDF3C,0xDF39,0xDF3B,0xDC14, + 0xDC0E,0xDC35,0xDC0A,0xDC3F,0xDC38, 0,0xDC4E,0xDC17,0xDC3F,0xDC1E, + 0xDDB6,0xDDCE,0xDDCA,0xDDCB,0xDDCC,0xDDC9,0xDEB4,0xDEAC,0xDE88,0xDE86, + 0xDE8C,0xDE93,0xDE8A,0xDEA4,0xDE87,0xDEA5,0xDEA6,0xDE85,0xDEA3,0xDE8E, + 0xDD1F,0xDD63,0xDD8D,0xDDFA,0xDDFB,0xDE09,0xDDFE,0xDDFF,0xDE02,0xDE04, + 0xDDFD,0xDE05,0xDEF9,0xDEF7,0xDEDB,0xDEDA,0xDD51,0xDD50,0xDD57,0xDDE2, + 0xDDD8,0xDDDA,0xDDDC,0xDF20,0xDF1F,0xDF69,0xDFDD,0xDC40,0xDC41,0xDC43, + 0xDD0D,0xDD0C,0xDD87,0xDDA9,0xDD92,0xDD85, 0,0xDD8C,0xDDA2,0xDD8F, + 0xDD8A, 0,0xDD8D,0xDFF1,0xDC37, + /* plane 6, row 11 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849, + 0x38D8,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A, + 0x39B2,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,0xD84A,0xD87E,0xD84A,0xD84A, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD851,0xD84B,0xD84C,0xD84C,0xD84C, + 0x3AC4,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDC8B,0xDC87,0xDC82,0xDD8E,0xDDBC,0xDDF8,0xDDFA,0xDDEB,0xDDF9, + 0xDDFC,0xDE05,0xDF1B,0xDF1D,0xDF1E,0xDC92,0xDF3C,0xDF3E,0xDF84,0xDFC8, + 0xDFC9,0xDFD3,0xDFC7,0xDFD2,0xDC55,0xDC96,0xDC8C,0xDC8A,0xDCD5,0xDCD3, + 0,0xDCD8,0xDDD0,0xDDEE,0xDDF1,0xDDFB,0xDDD3,0xDDEC,0xDDCD,0xDE15, + 0xDE26,0xDE0E,0xDE27,0xDE2A,0xDE00,0xDE04,0xDE28,0xDE08,0xDE14,0xDD9B, + 0,0xDDA1,0xDD9D,0xDDA0,0xDD9E,0xDDA2,0xDD9C,0xDE32,0xDE34,0xDE93, + 0xDE96,0xDE90,0xDEB4,0xDEB5,0xDCB6,0xDEB6,0xDEC2,0xDCB5,0xDEBA,0xDE92, + 0xDEFB,0xDF05,0xDEF3,0xDEFE,0xDEFD,0xDD5D,0xDEFA,0xDC43,0xDC95,0xDC94, + 0,0xDD6F,0xDD73,0xDD5C,0xDD5B,0xDD66,0xDD74,0xDD63,0xDD67,0xDD60, + 0xDD62,0xDD71,0xDD72,0xDD5E,0xDF23, + /* plane 6, row 12 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84C,0xD87E,0xD84C,0xD84D,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD840,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E, + 0xD84F,0xD87E,0xD850,0xD850,0xD87E,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0x3E2B,0xD851,0xD851,0xD851,0x3E61,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0x72DD, + 1, /* first low-surrogate */ + 0xDF26,0xDF64,0xDCD6,0xDFF2,0xDC01,0xDFDD,0xDFDC,0xDFDB,0xDFF3, + 0xDFFD,0xDFD8,0xDFF8,0xDFFB,0xDC83,0xDC8C,0xDC8E,0xDD49,0xDD54,0xDD52, + 0xDD4E,0xDD58,0xDD51,0xDD55,0xDD53,0xDD57,0xDD50,0xDD4F,0xDD4D,0xDDD2, + 0xDDD3,0xDDC9,0xDDD4,0xDEEF,0xDCF8,0xDCB1,0xDF05,0xDF04,0xDF2E,0xDF2D, + 0xDC45,0xDC5B,0xDC5A,0xDC59,0xDC9D,0xDC8E,0xDCBC,0xDCDD,0xDCBA,0xDCFD, + 0xDCD8,0xDCCB,0xDCD9,0xDCDA,0xDCC4,0xDCB8,0xDCBF,0xDCDB,0xDCC1,0xDCFC, + 0xDCC5,0xDD19,0xDDB1,0xDDAF,0xDD18,0xDCF7,0xDCF6,0xDCF8,0xDD50,0xDD51, + 0xDD71,0xDD70,0xDDB0,0xDDAF,0xDDAE,0xDDAD,0xDE25,0xDE2C,0xDE22,0xDE33, + 0xDE34, 0,0xDF3A,0xDF40,0xDF68, 0,0xDF64,0xDF5C,0xDF57,0xDF53, + 0xDF4F,0xDF51,0xDF54,0xDF66, + /* plane 6, row 13 */ + 1 | (94 << 8), /* first, last */ + 0x3EB2,0xD852,0xD852,0xD87E,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD847,0xD840,0xD840,0xD853,0xD853,0xD853,0xD853,0xD849,0xD853, + 0xD844,0xD853,0xD853,0xD853,0xD853,0xD853,0xD87E,0xD854,0xD854,0xD87E, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD87E,0xD855, + 0xD855,0x4129,0xD855,0xD856,0xD856,0xD856,0x4192,0xD856,0xD856,0xD857, + 0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859, + 0xD84D,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 2, /* first low-surrogate */ + 0xDD0D,0xDD08,0xDD2B,0xDCFA,0xDEEA,0xDF2A,0xDFBB,0xDFD5, + 0xDFD7,0xDDA4,0xDCF0,0xDCB5,0xDC06,0xDC28,0xDC22,0xDC21,0xDC56,0xDC23, + 0xDDCD,0xDD30,0xDD34,0xDFC9,0xDFCA,0xDFC8,0xDD3D,0xDC44,0xDCF3,0xDD41, + 0xDCF8,0xDCFC,0xDCF6,0xDCFB,0xDCF7,0xDD00,0xDD02,0xDD40,0xDD4D,0xDC24, + 0xDE0D, 0,0xDF62,0xDD30,0xDD2B,0xDD2A, 0,0xDD2D,0xDEDA,0xDE28, + 0xDF86,0xDE77,0xDE7C,0xDF50,0xDF4E,0xDFF2,0xDCB2,0xDCCE,0xDCCF,0xDCE5, + 0xDC07,0xDD35,0xDD31,0xDE13,0xDE2B,0xDE2C,0xDE45,0xDE60,0xDE41,0xDE58, + 0xDE47,0xDE5B,0xDE50,0xDD82,0xDE5F,0xDE4A,0xDE56,0xDE43,0xDE44,0xDE51, + 0xDCFD,0xDD34,0xDD35,0xDD54,0xDD55,0xDE0C,0xDE0B,0xDE0A,0xDEF9,0xDF35, + 0xDF24,0xDF13,0xDF1C,0xDF69,0xDF25, + /* plane 6, row 14 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD87E,0xD87E,0xD87E,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD864,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0x3458,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD87E,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841, + 1, /* first low-surrogate */ + 0xDF21,0xDD95,0xDD96,0xDD98,0xDE20,0xDDA9,0xDDA8,0xDDDE,0xDE09, + 0xDE0A,0xDE0B,0xDFE3,0xDC07,0xDCB2,0xDCB3,0xDD5D,0xDE58,0xDE86,0xDE87, + 0xDFB9,0xDFB8,0xDC0C,0xDC44,0xDC66,0xDC80,0xDC75,0xDC6D,0xDC7E,0xDC67, + 0xDC81,0xDC77,0xDEA8,0xDEA2,0xDEA5,0xDE9B,0xDC57,0xDE0F,0xDE32,0xDE2C, + 0xDE33,0xDDE7,0xDC6E,0xDCB7,0xDCF6,0xDCF2,0xDCF3,0xDD17,0xDD30,0xDD54, + 0xDD53,0xDE52,0xDE3D,0xDE3C,0xDE34,0xDE33,0xDE54,0xDE2F, 0,0xDE55, + 0xDE3F,0xDE37,0xDE56,0xDE61,0xDE58,0xDC06,0xDE3B,0xDE32,0xDE2E,0xDE3E, + 0xDC3B,0xDC8C,0xDC8D,0xDD13,0xDD16,0xDD12,0xDD5B,0xDD8A,0xDDD7,0xDDCE, + 0xDE50,0xDE51,0xDE4F,0xDE8E,0xDE8F,0xDEF2,0xDC21,0xDF28,0xDF1A,0xDF25, + 0xDF1D,0xDF14,0xDF20,0xDF1F,0xDF1B, + /* plane 6, row 15 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xD841,0xD87E,0xD842,0x351C,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD87E, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x3637, + 0xD844,0xD844,0xD844,0xD852,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845, + 1, /* first low-surrogate */ + 0xDF17,0xDF15,0xDF1C,0xDF13,0xDC25,0xDC60, 0,0xDC66,0xDCE3, + 0xDCDE,0xDCE0,0xDCE1,0xDD1A,0xDD1B,0xDD18,0xDD1C,0xDD19,0xDD42,0xDD40, + 0xDD3E,0xDD44,0xDD74,0xDD43,0xDC2D,0xDDF2,0xDE1B,0xDE19,0xDE1E,0xDC30, + 0xDE5E,0xDE66,0xDE5D,0xDE5A,0xDE5F,0xDE60,0xDE5B,0xDE5C,0xDE59,0xDEF0, + 0xDEF1,0xDF43,0xDF40,0xDF42,0xDF41,0xDF3F,0xDC57,0xDC69,0xDC6F,0xDCAB, + 0xDC71,0xDC93,0xDC56,0xDC90,0xDC6D,0xDC6C,0xDC70,0xDC66,0xDC67,0xDDD7, + 0xDDB5,0xDDDB,0xDDD8,0xDDD5,0xDDD4,0xDEBA,0xDEB7,0xDEBE,0xDEB9, 0, + 0xDEE0,0xDEDD,0xDEDE,0xDD18,0xDED8,0xDEBD,0xDEDB,0xDD1D,0xDD25,0xDF21, + 0xDF0C,0xDF29,0xDF2D,0xDF1B,0xDF0E,0xDF1F,0xDF04,0xDF1C,0xDF05,0xDF06, + 0xDF20,0xDF0D,0xDF2A,0xDF23,0xDF11, + /* plane 6, row 16 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD853,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD848,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x3843,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848, + 0x38B4,0xD841,0xD840,0xD848,0xD848, + 1, /* first low-surrogate */ + 0xDD5C,0xDD66,0xDD5B,0xDD4F,0xDD5E,0xDD5D,0xDDF1,0xDDEA,0xDDF4, + 0xDDEB,0xDDF0,0xDDFA,0xDDFB,0xDF28,0xDF2C,0xDF6B,0xDF2A,0xDF6A,0xDF6F, + 0xDFDB,0xDFE0,0xDFD1,0xDFE3,0xDFE5,0xDFE7,0xDC4D,0xDC55,0xDC54,0xDC53, + 0xDC52,0xDC4E,0xDC60,0xDDC0,0xDD0F,0xDD11,0xDD13,0xDDC6,0xDDB3,0xDDC7, + 0xDDD2,0xDDB8,0xDDAC,0xDDAE,0xDDCF,0xDDC5,0xDC7B,0xDDCC,0xDDAB,0xDDC9, + 0xDDB9,0xDFFB,0xDFF8,0xDFF7,0xDFF9,0xDC20,0xDC3B,0xDC39,0xDC9E,0xDC9A, + 0xDCAA,0xDCAB,0xDCAF,0xDC96,0xDCA9,0xDCA6,0xDC91, 0,0xDCAE,0xDC9F, + 0xDCAC,0xDCA0,0xDD92,0xDD91,0xDDBF,0xDE17,0xDE0A,0xDE0C,0xDF4A,0xDF46, + 0xDF34,0xDF45,0xDF43,0xDF44,0xDC93,0xDF87,0xDF86,0xDF8A,0xDFDA,0xDFD8, + 0,0xDD18,0xDD34,0xDFD6,0xDFD4, + /* plane 6, row 17 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD849,0xD849,0x38E0,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD855,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0x3AE4,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,0xD84C, + 0xD84C,0xD84C,0x6804,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3C26,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDC54,0xDC59,0xDC5A,0xDC57, 0,0xDCDD,0xDCE9,0xDCE0,0xDE05, + 0xDE12,0xDE13,0xDE07,0xDE16,0xDE23,0xDE02,0xDCA1,0xDE4A,0xDE36,0xDE40, + 0xDE56,0xDE43,0xDCA0,0xDE4B,0xDE46,0xDE3E,0xDE49,0xDDA7,0xDDB6,0xDDA6, + 0xDDA8,0xDDAC,0xDDA9,0xDDAB,0xDE38,0xDE37,0xDE39,0xDE41,0xDE3E,0xDEC0, + 0xDEBB,0xDEBF,0xDEBD,0xDEFE,0xDF1E,0xDEEE,0xDEFC,0xDCB7,0xDEF9,0xDF06, + 0xDEE4,0xDEE9,0xDEE5,0xDF03,0xDEFD,0xDF49,0xDEBE,0xDF0A,0xDE26,0xDF18, + 0xDF0D,0xDF0F,0xDF0E,0xDF20,0xDC71,0xDC99,0xDCE2,0xDCDF,0xDCDE,0xDD78, + 0xDD79, 0,0xDD7C,0xDD7D,0xDD84,0xDD8B,0xDD8A,0xDCD2,0xDD89,0xDF2C, + 0xDF29,0xDF6C, 0,0xDC09,0xDC08,0xDC0C,0xDC0D,0xDC10, 0,0xDC9F, + 0xDC98,0xDCA2,0xDC9A,0xDDD5,0xDDE2, + /* plane 6, row 18 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD847,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD87E,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD87E,0xD851,0xD851,0xD851, + 0xD851,0x3E6F,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD842,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD87E, + 0xD853,0xD853,0xD853,0xD853,0xD853, + 1, /* first low-surrogate */ + 0xDDF0,0xDDEA,0xDDEB,0xDDED,0xDDE8,0xDDE0,0xDE85,0xDE86,0xDEF0, + 0xDE46,0xDF45,0xDF38,0xDF3E,0xDF42,0xDF40,0xDC47,0xDC5C,0xDC5E,0xDCB4, + 0xDCC2,0xDD14,0xDCE5,0xDD15,0xDD11,0xDCFF,0xDCEE,0xDCE7,0xDCF5,0xDCF4, + 0xDCE8,0xDD01,0xDCEF,0xDCF1,0xDD00,0xDDDB,0xDDBF,0xDDDA,0xDDC7,0xDDDD, + 0xDD1A,0xDDEB,0xDDE1,0xDDC1,0xDDBD,0xDD07,0xDCFD,0xDD01,0xDD0A,0xDD03, + 0xDD72,0xDD74,0xDD75,0xDDB2,0xDDB1,0xDDB4,0xDE4C,0xDE42,0xDE40,0xDE49, + 0xDE3C,0xDE4D,0xDE4A,0xDE3B,0xDF61,0xDF74,0xDD26,0xDF7F,0xDF7A,0xDF88, + 0xDF7C, 0,0xDF70,0xDD0F,0xDD28,0xDD13,0xDD2A,0xDEED,0xDEEF,0xDF2E, + 0xDFC1,0xDFDD,0xDF47,0xDC2D,0xDC2B,0xDC35,0xDC2F,0xDC31,0xDC34,0xDD35, + 0xDC30,0xDD3A,0xDD39,0xDD37,0xDD4B, + /* plane 6, row 19 */ + 1 | (94 << 8), /* first, last */ + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0x401C,0xD854,0xD854,0xD854,0xD854,0xD87E, + 0xD85A,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0x4100,0xD855,0xD87E,0xD855,0xD84F,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0x42B6,0xD857, + 0xD87E,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD859,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0x43E4,0xD859, + 1, /* first low-surrogate */ + 0xDD54,0xDD4D,0xDD51,0xDD47,0xDF27,0xDF50,0xDF4D,0xDF4E,0xDF54, + 0xDFD2,0xDFCE,0xDC4B,0xDC49,0xDD05,0xDD0F,0xDD19,0xDD43,0xDD06,0xDD0C, + 0xDD29,0xDD04,0xDD08,0xDD25, 0,0xDD03,0xDD27,0xDD10,0xDD0A,0xDD42, + 0xDF5D,0xDFAA,0xDFAB,0xDFA9,0xDC41,0xDC3A,0xDC3C,0xDC2B,0xDC49,0xDE15, + 0,0xDE16,0xDD53,0xDE31,0xDC4A,0xDF3C,0xDF7C,0xDF6D,0xDF6A,0xDF63, + 0xDF6B,0xDF7B,0xDF64,0xDF7A,0xDF69,0xDF6F,0xDD37,0xDD35,0xDD3C,0xDD36, + 0xDD3D,0xDD3E,0xDEE1,0xDEE0,0xDE2D,0xDE2B,0xDF8D,0xDF92, 0,0xDF8E, + 0xDD6B,0xDF91,0xDF96,0xDE7B,0xDE78,0xDE81,0xDE96,0xDEA3,0xDE95,0xDE97, + 0xDF54,0xDF52,0xDFF5,0xDC00,0xDFFB,0xDFF4,0xDFF6,0xDCE8,0xDCEA,0xDE3E, + 0xDE3D,0xDE3B,0xDE80, 0,0xDE88, + /* plane 6, row 20 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD844,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x44AD,0xD85A,0x82FF,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD85A,0xD85A,0xD87E, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD860,0xD87E,0xD860,0xD861,0x8FEC,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x48C3,0xD862,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD852, + 0xD841,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDE81,0xDE82,0xDECE,0xDE83,0xDE77,0xDE79,0xDE73,0xDE6D,0xDE70, + 0xDE8D,0xDE75,0xDE8C,0xDE6A,0xDE91,0xDE89,0xDE8E,0xDEDC,0xDCFF,0xDD59, + 0xDDC7,0xDE12,0xDE14,0xDE13,0xDECB,0xDF42, 0,0xDF3D, 0,0xDF40, + 0xDF44,0xDF62,0xDF43,0xDF3F,0xDF45,0xDF3C,0xDD97,0xDF46,0xDF47,0xDDB3, + 0xDD9E,0xDD9D,0xDE2C,0xDE29,0xDE2F,0xDE2E,0xDE30,0xDDE1,0xDDE2,0xDE0E, + 0xDE19,0xDE12,0xDCB4,0xDFDA,0xDD26,0xDE59,0xDE5A,0xDE88,0xDFC0,0xDFBA, + 0xDEA0,0xDDDD,0xDEA2,0xDC86, 0,0xDC9D,0xDC88,0xDC8F,0xDC8E,0xDC9B, + 0xDEC1,0xDEC3,0xDEC4,0xDE96,0xDEC7,0xDEC6,0xDEBF, 0,0xDD0F,0xDE55, + 0xDE42,0xDE46,0xDE4B,0xDE43,0xDE53,0xDE48,0xDE49,0xDE4A,0xDE4E,0xDFDE, + 0xDE91,0xDC4B,0xDE80,0xDE81,0xDE83, + /* plane 6, row 21 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD865,0xD848,0xD842,0xD840,0xD840,0xD840,0xD847,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD842,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0x3467,0xD840,0xD840,0xD840,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x53DE,0xD842, + 0xD842,0xD842,0xD842,0x3596,0xD87E, + 1, /* first low-surrogate */ + 0xDE8A,0xDE82,0xDF42,0xDD22,0xDC70,0xDC71,0xDCBC,0xDD18,0xDCBE, + 0xDCBA,0xDCF8,0xDD37,0xDD35,0xDEFC,0xDD56,0xDD59,0xDD5E,0xDE6D,0xDE91, + 0xDE92,0xDE68,0xDE66,0xDE73, 0,0xDE96,0xDE8B,0xDE8C,0xDC96,0xDCEE, + 0xDD1C,0xDD1A,0xDD19,0xDD1B,0xDD5D,0xDD5E,0xDC18,0xDDDC,0xDDE2,0xDE52, + 0xDE92,0xDF30,0xDF52,0xDF42,0xDF41,0xDF45,0xDF37,0xDF40,0xDF3F,0xDF3D, + 0xDF38,0xDF3A,0xDF49,0xDC6B,0xDC78,0xDC79,0xDC26,0xDC6C,0xDCE9,0xDCE6, + 0xDCE5,0xDCEA,0xDCE7,0xDCE8,0xDD1F,0xDD4B,0xDD4A,0xDD53,0xDD76,0xDDA3, + 0xDDA4,0xDDF6,0xDDF3,0xDDF9,0xDDF7,0xDDFC,0xDE1D,0xDE6D,0xDE71,0xDE6C, + 0xDE6E,0xDE70,0xDE6F,0xDE67,0xDE68,0xDEFA,0xDEF9,0xDF4E, 0,0xDF4D, + 0xDF4F,0xDF4A,0xDF4C, 0,0xDC42, + /* plane 6, row 22 */ + 1 | (94 << 8), /* first, last */ + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD87E,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD84B,0xD845,0xD845,0xD845, + 0xD845,0xD842,0xD845,0xD845,0xD87E,0xD87E,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0x5A30,0xD846,0xD846,0xD846,0xD846, + 0xD846,0x3759,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0x5BB2,0xD87E,0x3776,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD858,0xD847,0x37D2,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDCEE,0xDCB2,0xDCC0,0xDCC1,0xDCF4,0xDCC8,0xDCC5,0xDCC6,0xDCAD, + 0xDDE2,0xDDEA,0xDDE3,0xDDE1,0xDEF7,0xDF01,0xDF12,0xDEF6,0xDEF1,0xDF1F, + 0xDEEE,0xDC52,0xDEF3,0xDF15,0xDF16,0xDF17,0xDEF8,0xDF19,0xDEF2,0xDEF4, + 0xDEF5,0xDF13,0xDF06,0xDD26,0xDD24,0xDD5A,0xDEC8,0xDD97,0xDD95,0xDD9A, + 0xDE1F,0xDEFB,0xDE29,0xDE20,0xDC62,0xDC63,0xDF4C,0xDF30,0xDF38,0xDF3D, + 0xDF51,0xDF4F,0xDF4A,0xDF34,0xDF36, 0,0xDD6A,0xDD68,0xDE1C,0xDE0E, + 0xDE1E, 0,0xDE09,0xDE08,0xDE13,0xDE01,0xDE0F,0xDE14,0xDE06,0xDE07, + 0,0xDC73, 0,0xDF79,0xDFEA,0xDFED,0xDFE9,0xDFEE,0xDC68,0xDC64, + 0xDC67,0xDC72,0xDC62,0xDC74,0xDC79,0xDD19,0xDD17,0xDD15,0xDD16,0xDDE6, + 0xDEA4,0xDDEE, 0,0xDDDF,0xDDE4, + /* plane 6, row 23 */ + 1 | (94 << 8), /* first, last */ + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD841,0xD848,0xD848, + 0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849, + 0xD84E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0x3920,0xD849,0xD849,0xD849,0xD849,0xD849,0x3929,0xD849, + 0xD849,0xD849,0x3938,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDDDA,0xDDEA,0xDDED,0xDDE3,0xDDE9,0xDFFD,0xDE57,0xDC21,0xDCC6, + 0xDCB8,0xDCCB,0xDC85,0xDCBD,0xDCB5,0xDCBB,0xDCBF,0xDCBE,0xDCB2,0xDCC1, + 0xDCC2,0xDD99,0xDDC6,0xDE2C,0xDE2D,0xDE25,0xDE1E,0xDE1F,0xDE23,0xDF50, + 0xDF4E,0xDF4D,0xDF52,0xDFE9,0xDFEC,0xDFE8,0xDC58,0xDC5C,0xDC5B,0xDC8F, + 0xDD72,0xDCF6,0xDD00,0xDCFC,0xDCF8,0xDCEA,0xDCFE,0xDCF7,0xDCFD,0xDE70, + 0xDE62,0xDE44, 0,0xDE4D,0xDE4C,0xDE3F,0xDE66,0xDE35, 0,0xDE34, + 0xDE8D,0xDE84, 0,0xDE86,0xDE89,0xDE87,0xDE83,0xDE75,0xDE79,0xDEAF, + 0xDEB0,0xDDB7,0xDDBB,0xDDB9,0xDE46,0xDE47,0xDE45,0xDEEA,0xDEF6,0xDF68, + 0xDF39,0xDCB9,0xDF3D,0xDF3B,0xDF4D,0xDF30,0xDF4A,0xDF3E,0xDF40,0xDF4C, + 0xDF47,0xDF38,0xDF52,0xDF3A,0xDF53, + /* plane 6, row 24 */ + 1 | (94 << 8), /* first, last */ + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0x3A89,0x3AB0,0xD84C,0xD84C,0xD84C,0x3ABF,0xD84C,0xD84C,0xD84C, + 0x3AC5,0xD84C,0xD87E,0x3AEA,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,0xD84D, + 0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C37,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84F,0xD84F,0x3CE4,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 1, /* first low-surrogate */ + 0xDEC4,0xDEC1,0xDF1C,0xDF1D,0xDF2A,0xDF1E,0xDF2F,0xDF22,0xDF2E, + 0xDF25, 0, 0,0xDC4A,0xDC4B,0xDC76, 0,0xDCE8,0xDCEF,0xDCE9, + 0,0xDCEA,0xDCCC, 0,0xDD9B,0xDD9E,0xDD93,0xDDA7,0xDD9C,0xDDA0, + 0xDD9A,0xDDAB,0xDDBE,0xDDA9,0xDF2D,0xDF6E,0xDC44,0xDC3D,0xDC3A,0xDC68, + 0xDC3C,0xDC6A,0xDCE0,0xDC38,0xDC65,0xDC39,0xDC6D,0xDC36,0xDCE3,0xDC3E, + 0xDC7E,0xDC37,0xDC99,0xDCA9,0xDCAD,0xDCA7,0xDCA8,0xDD66,0xDD69,0xDD6D, + 0xDD67,0xDD6B,0xDD6A,0xDDEE,0xDE01,0xDE03,0xDDF4,0xDDFB, 0,0xDDF6, + 0xDDFC,0xDEF4,0xDF08,0xDF0A,0xDF09,0xDF6D,0xDF62,0xDF41,0xDF5E,0xDF5C, + 0xDCF3,0xDD26, 0,0xDD39,0xDD04,0xDD6C,0xDD2B,0xDD2E,0xDD3B,0xDD5E, + 0xDDFB,0xDD27,0xDD24,0xDD69,0xDD30, + /* plane 6, row 25 */ + 1 | (94 << 8), /* first, last */ + 0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3CE8, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851, + 0xD851,0xD851,0x3E20,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD853,0xD843,0xD853,0xD853,0xD853,0xD853,0xD853,0xD840,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0x3F86,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD854,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDD05,0xDD62,0xDD38,0xDD35,0xDD2A,0xDD2C,0xDD68,0xDD31,0xDD2F, + 0xDD2D,0xDD3A,0xDD36,0xDD03,0xDD21,0xDD3C,0xDD20,0xDD64,0xDD3E, 0, + 0xDDF7,0xDE12,0xDDF1,0xDDF5,0xDE22,0xDDF2,0xDDDF,0xDE15,0xDE16,0xDD7A, + 0xDD76,0xDDBE, 0,0xDDBD,0xDE09,0xDE08,0xDE57,0xDFA3,0xDFBF,0xDFB8, + 0xDFAF,0xDF9C,0xDFA5,0xDF72,0xDF75,0xDF9D,0xDF99,0xDFB9,0xDD4E,0xDD39, + 0xDD3B,0xDD35,0xDD3C,0xDD55,0xDEF0,0xDEF3,0xDEF4,0xDF3B,0xDF3C,0xDF3A, + 0xDF36,0xDC07,0xDCEB,0xDC55,0xDC50,0xDC4F,0xDC52,0xDC56,0xDCBD,0xDC32, + 0xDD63,0xDD6B,0xDD66,0xDD57,0xDD5D, 0,0xDD6D,0xDD61,0xDD69,0xDD5A, + 0xDD5C,0xDD62,0xDF2A,0xDF29,0xDF58,0xDF5A,0xDFD7,0xDFDB,0xDFDC,0xDFDD, + 0xDFD8,0xDC54,0xDC5B,0xDC5C,0xDC53, + /* plane 6, row 26 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD87E,0xD87E,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,0xD855,0xD855,0xD855, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD840, + 0xD858,0xD858,0xD858,0xD858,0xD858,0x4356,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0x4367,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859, + 1, /* first low-surrogate */ + 0xDC4F,0xDC56,0xDC50,0xDC5A,0xDC6B,0xDD36,0xDD53,0xDD3A,0xDD3C, + 0xDD3E,0xDD49,0xDD40,0xDD46,0xDD47,0xDF64,0xDF65,0xDFB5,0xDFB6,0xDFB2, + 0xDC48,0xDC4A,0xDC72,0xDC69,0xDC5A,0xDC4C,0xDE2C,0xDE30,0xDE4B,0xDE49, + 0xDE42,0xDE44,0xDE4A,0xDE4F,0xDF92,0xDD57,0xDF97,0xDF80,0xDF82,0xDF86, + 0xDD53,0xDD5E,0xDD52,0xDD5B,0xDD4E,0xDE6D,0xDE6E,0xDEFA,0xDEF6,0xDEFB, + 0xDE33,0xDE3D,0xDE37,0xDE3E,0xDE35,0xDF9A,0xDFAB,0xDFA6,0xDFB0,0xDF99, + 0xDFA0,0xDF9E,0xDFA8,0xDFA1,0xDFAA,0xDFAD,0xDFBB,0xDF9C,0xDFA5,0xDCB3, + 0xDE27,0xDE8D,0xDE8E,0xDE8F,0xDE92, 0,0xDE91,0xDEAD,0xDF57,0xDF58, + 0xDF5E,0xDF5D,0xDF5C,0xDF5B, 0,0xDC0A,0xDC03,0xDC0E,0xDCB8,0xDD4D, + 0xDD3F,0xDD47,0xDD4B,0xDD4A,0xDD3D, + /* plane 6, row 27 */ + 1 | (94 << 8), /* first, last */ + 0x8038,0xD859,0xD859,0x8081,0xD859,0xD859,0xD859,0x43D1,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43EB,0xD859,0xD859, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD847,0xD85A,0xD85A,0xD85A, + 0xD87E,0xD85A,0xD85A,0xD85A,0x44B6,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0x45A3,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD87E,0xD85D,0x4610,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 2, /* first low-surrogate */ + 0xDD41,0xDD4C, 0,0xDE62,0xDE69,0xDE61, 0,0xDEAA, + 0xDEA6,0xDEAC,0xDEBD,0xDEBB,0xDEA4,0xDEBA,0xDE9A, 0,0xDEA1,0xDEC1, + 0xDCE0,0xDD0A,0xDD03,0xDD06,0xDD39,0xDD3A,0xDD36,0xDD5B,0xDD5F,0xDD5E, + 0xDD67,0xDD61,0xDD62,0xDD5D,0xDDCA,0xDDCC,0xDDCE,0xDE18,0xDE1D,0xDE1F, + 0xDE20,0xDE17,0xDE15,0xDF1F,0xDF27,0xDF26,0xDE10,0xDF8B,0xDFAE,0xDF8A, + 0xDD99,0xDF92,0xDF89,0xDF87, 0,0xDF8F,0xDF84,0xDF83,0xDF8C,0xDF93, + 0xDF8D,0xDF98,0xDF7D,0xDF7E,0xDFD2,0xDF80,0xDF99,0xDDAC,0xDE50,0xDE55, + 0xDE42,0xDE3F,0xDE3C, 0,0xDE4C,0xDE49,0xDE57,0xDE58,0xDE4F,0xDE5C, + 0xDE47,0xDDB7,0xDDAB, 0,0xDDAF,0xDDAD,0xDDE8,0xDDE7,0xDE30,0xDE26, + 0xDE2F,0xDE28,0xDE2B,0xDE1D,0xDE2D, + /* plane 6, row 28 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85E,0xD85E,0xD87E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD87E,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0x491B,0xD862,0x4987, + 0xD863,0xD842,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD864,0xD864,0xD865,0xD865,0xD87E,0xD865,0xD866, + 0xD842,0xD840,0xD842,0xD840,0xD840, + 1, /* first low-surrogate */ + 0xDE20,0xDE2A,0xDE2C,0xDE35,0xDE21,0xDE23,0xDE24,0xDE36,0xDE37, + 0xDFE9,0xDCBA,0xDCB8,0xDDCC,0xDD6D,0xDD6A,0xDD68,0xDD69,0xDD6B,0xDD61, + 0xDFDC,0xDFDB,0xDC2D,0xDC2C,0xDCA2,0xDD2B,0xDD32,0xDDD7,0xDE94,0xDE92, + 0xDE90,0xDFC9,0xDFC4,0xDFC1,0xDFC3,0xDFCD,0xDE14,0xDEA7,0xDEAF,0xDEAA, + 0xDC0D,0xDC54,0xDC5B,0xDC61,0xDCAE,0xDCB3,0xDCC0,0xDCC4,0xDCBF,0xDCCB, + 0xDCAD,0xDCA7,0xDCA4,0xDCBD,0xDCAF,0xDCB2,0xDCA5,0xDEE7,0xDEE0,0xDECE, + 0xDEDE,0xDED5,0xDEDF,0xDED9,0xDFF2,0xDD23,0xDD40, 0,0xDD3E, 0, + 0xDCCF,0xDF54,0xDE5B,0xDE58,0xDE62,0xDE5F,0xDE67,0xDE63,0xDE5E,0xDE60, + 0xDF85,0xDF86,0xDF87,0xDDE8,0xDDE6,0xDE71,0xDE85,0xDE02,0xDE86,0xDC10, + 0xDDF8,0xDCBF,0xDF61,0xDCFE,0xDCFC, + /* plane 6, row 29 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD87E,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD87E,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD87E,0xD87E,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0x3557,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD87E,0xD843,0xD843, + 1, /* first low-surrogate */ + 0xDD39,0xDD61,0xDD60,0xDEE2,0xDEEA,0xDEE3,0xDEB4,0xDEAE,0xDEBE, + 0xDEB8,0xDEA8,0xDEAA,0xDEA9,0xDEB3,0xDED5,0xDEAD,0xDEB9,0xDEBB,0xDEB1, + 0xDEC2,0xDC08,0xDEEB,0xDEBA,0xDED2,0xDED4,0xDCF1,0xDD1D,0xDC12,0xDD62, + 0xDD8C,0xDDE6,0xDDE7,0xDE5A,0xDE58,0xDE59,0xDE96,0xDE97,0xDF61,0xDF67, + 0xDF71,0xDF65,0xDF7D,0xDF7E,0xDC7D,0xDC84,0xDC7C,0xDC7E,0xDC7F,0xDC80, + 0xDCEF,0xDCF4,0xDD1E,0xDD4E,0xDDFB,0xDDFA,0xDDFD,0xDC31,0xDC32,0xDE79, + 0xDE7C,0xDE7D,0xDE84,0xDE7B,0xDE78, 0,0xDF5E,0xDF5A,0xDF5C,0xDF59, + 0xDF55,0xDF63,0xDF56,0xDF5F,0xDF60,0xDF5B,0xDD4A,0xDD65,0xDDB3,0xDD2C, + 0xDD77,0xDD3D,0xDD52,0xDD61,0xDD2A,0xDD3E,0xDD34,0xDD29,0xDDB2,0xDDAD, + 0xDD40,0xDD53,0xDC44,0xDD3F,0xDD41, + /* plane 6, row 30 */ + 1 | (94 << 8), /* first, last */ + 0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD87E,0xD87E,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0x369D,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845, + 0xD845,0xD845,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD846,0x375F,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0x3779,0xD840, + 0xD846,0xD847,0xD847,0xD847,0xD847,0x3798,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0x37DC,0x5D2B,0xD847,0x37DF,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDD72,0xDDF6,0xDDF5,0xDDF4,0xDDF2,0xDDF9,0xDF27,0xDF54,0xDF55, + 0xDF2E,0xDC54,0xDC53,0xDF2C,0xDF38,0xDF39,0xDF31,0xDF4F,0xDF73,0xDF30, + 0xDF2B,0xDF51,0xDD2C,0xDD5B,0xDD5C,0xDD68,0xDD6C,0xDD6B,0xDD69,0xDD9F, + 0xDE38,0xDE3C,0xDE3A,0xDE35, 0,0xDE39,0xDE36,0xDE3B,0xDF60,0xDF61, + 0xDF63,0xDF64,0xDF94,0xDF93,0xDF5E,0xDF68,0xDF6A,0xDF65,0xDC66,0xDF90, + 0xDF5F,0xDF72,0xDC65,0xDE3C,0xDE27,0xDE24,0xDE26,0xDE25, 0,0xDE28, + 0xDE36,0xDF31,0xDF30,0xDF34,0xDF81,0xDF7D,0xDF82,0xDF80, 0,0xDED3, + 0xDFF2,0xDC66,0xDC8C,0xDC7B,0xDC83, 0,0xDC8E,0xDC7A,0xDC92,0xDC91, + 0xDC82,0xDD1B,0xDD1C,0xDE27,0xDE21, 0, 0,0xDE43, 0,0xDE18, + 0xDE7B,0xDE1A,0xDE4B,0xDE4A,0xDE4D, + /* plane 6, row 31 */ + 1 | (94 << 8), /* first, last */ + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD87E,0xD87E,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849, + 1, /* first low-surrogate */ + 0xDE4F,0xDE19,0xDE35,0xDE13,0xDE52,0xDE14,0xDE1E,0xDE2C,0xDE20, + 0xDE22,0xDE12,0xDE1F,0xDC00,0xDC23,0xDC40,0xDC43,0xDCE4,0xDCDB,0xDCEA, + 0xDCDD,0xDCCC,0xDCD9,0xDCE8,0xDCF6,0xDCE3,0xDCD3,0xDCDA,0xDCD6,0xDCE7, + 0xDE3A,0xDE3F,0xDE40,0xDE48,0xDE59,0xDE37,0xDE44,0xDC8C,0xDC8B,0xDE55, + 0xDE39,0xDF54,0xDF55,0xDF56,0xDF57,0xDF58,0xDF59,0xDF8D,0xDFF2,0xDFF8, + 0xDFF5,0xDFF6,0xDFFC,0xDFFE,0xDFF1,0xDFFD,0xDC5E,0xDC96,0xDC97,0xDC9C, + 0xDC9B,0xDC95,0xDC9A,0xDD1A,0xDD09,0xDD04,0xDD0E,0xDD1C,0xDD18,0xDD0D, + 0xDD10,0xDD0C,0xDD03,0xDE7B,0xDEA6,0xDE77,0xDE88,0xDE74,0xDEDA,0xDE76, + 0xDE78,0xDE8A,0xDE8F,0xDE7D,0xDE90,0xDEED,0xDED9,0xDED0,0xDF1A,0xDED7, + 0xDEE2,0xDEE1,0xDEC5,0xDEE0,0xDECA, + /* plane 6, row 32 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0x39FD,0xD84A, + 0xD84A,0xD84A,0xD87E,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AF4,0xD84C,0x3AEF, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD87E,0xD84C,0xD84C,0xD84C, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0x3C31,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDF25,0xDECC,0xDCB3,0xDDC6,0xDDC1,0xDE4D,0xDF4B,0xDF64,0xDF95, + 0xDF99,0xDCBC,0xDF94,0xDFA2,0xDFAE,0xDF9E,0xDFA7,0xDF86, 0,0xDFA4, + 0xDF91,0xDF93,0xDCBB,0xDF88,0xDECD,0xDECA,0xDF3F,0xDF40,0xDF46,0xDF41, + 0xDF45,0xDF58,0xDF3B,0xDF48,0xDC4E,0xDC52,0xDC4F,0xDC7B,0xDC7A,0xDCA0, + 0xDC9F,0xDCFB,0xDCF7,0xDDB8,0xDDB9,0xDDBB,0xDDB7, 0,0xDDBA, 0, + 0xDDDA,0xDDB5,0xDDBF,0xDDBC,0xDDC0,0xDCD3,0xDCD9,0xDF75,0xDF79,0xDF76, + 0xDC35,0xDC40,0xDCC0,0xDC81,0xDCAD,0xDCAF,0xDCAC,0xDC8F,0xDCA8,0xDCAA, + 0xDCA9,0xDC88,0xDC7F,0xDC80,0xDCBC,0xDCAE,0xDCBB,0xDCBD, 0,0xDD78, + 0xDD74,0xDE0C,0xDE11,0xDE08,0xDE06,0xDE10,0xDE8F,0xDE90,0xDE8D,0xDE8E, + 0xDE96,0xDE95,0xDF0B,0xDF0C,0xDF7C, + /* plane 6, row 33 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F, + 0xD84F,0x3D03,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0x3D09,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD87E,0xD851,0xD87E,0xD851,0xD851, + 0x3E3E,0xD851,0xD851,0xD851,0xD87E,0xD853,0xD851,0x3E77,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0x3E7B,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD85A,0xD852, + 1, /* first low-surrogate */ + 0xDF73,0xDF75,0xDF76,0xDF7D,0xDF78,0xDF71,0xDC4B,0xDC4E,0xDD33, + 0xDD32, 0,0xDD91,0xDDE7,0xDDE9,0xDDA2,0xDD94,0xDD87,0xDDA3,0xDDDD, + 0xDD7B,0xDD83,0xDD81,0xDDDF,0xDD7C,0xDDE4,0xDDE2,0xDD93,0xDD7D,0xDDBF, + 0xDD9B,0xDD8E,0xDD9F, 0,0xDD8C,0xDD7F,0xDD9C,0xDD84,0xDD42,0xDDE6, + 0xDE51,0xDE4A,0xDE64,0xDE25,0xDE2F,0xDE2E,0xDE2B,0xDE28,0xDE32,0xDE2D, + 0xDE31,0xDE39,0xDE2C,0xDE61,0xDD11,0xDD10,0xDD12,0xDD53,0xDD55,0xDD7B, + 0xDD81,0xDD7D,0xDD7C,0xDDC2,0xDDC5,0xDD22,0xDDC4,0xDD23,0xDE6B,0xDE68, + 0,0xDE5C,0xDE5D,0xDE6A,0xDD24,0xDC76,0xDF76, 0,0xDFC4,0xDFCB, + 0xDFC8,0xDFD4,0xDFD5,0xDFC9,0xDFD7, 0,0xDD78,0xDD5A,0xDD5B,0xDD5C, + 0xDD56,0xDD58,0xDD71,0xDDD4,0xDF40, + /* plane 6, row 34 */ + 1 | (94 << 8), /* first, last */ + 0xD87E,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD87E,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD87E,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0x413A,0xffff,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0x41A0, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x41E5,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD857,0xD857, + 1, /* first low-surrogate */ + 0xDD33,0xDF3F,0xDF43,0xDF41,0xDFE2,0xDFE0,0xDFE3,0xDC66,0xDC73, + 0xDC6C,0xDC71,0xDC6A,0xDC6D,0xDC6E,0xDC6B,0xDD8C,0xDD77,0xDD3A,0xDD7F, + 0xDD89,0xDD7A,0xDD85,0xDD78,0xDD8A,0xDD86,0xDF2C,0xDF67,0xDF5B,0xDFE5, + 0xDFE1,0xDC61,0xDC69,0xDC6A,0xDD65,0xDD6D,0xDD63,0xDD86,0xDD5C,0xDD62, + 0xDD48,0xDD79,0xDD69,0xDD70,0xDD76,0xDD5D,0xDD87,0xDD6E,0xDD71,0xDD7C, + 0xDD73,0xDD5B,0xDD6B,0xDFBF,0xDFC1,0xDFBD,0xDFC9,0xDFBC,0xDFC2,0xDFC0, + 0xDC92,0xDCA9,0xDC8F,0xDC76,0xDC7B,0xDC75,0xDCA4,0xDE64,0xDF3D,0xDFAF, + 0, 0,0xDF9D,0xDF99,0xDFB1,0xDD63,0xDD62,0xDD64,0xDD69, 0, + 0xDE75,0xDE73,0xDE71,0xDE74,0xDF0C,0xDF16, 0,0xDF11,0xDF1F,0xDF1A, + 0xDF0D,0xDF1B,0xDF13,0xDE4E,0xDE55, + /* plane 6, row 35 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0x427D,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0x436D,0xD858, + 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x43F8,0xD859,0x8158,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD840,0x4450,0xD85A, + 0xD85A,0xD846,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0x4468,0x4467,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85B,0xD85A, + 1, /* first low-surrogate */ + 0xDE50, 0,0xDFD2,0xDFD3,0xDFD1,0xDFF1,0xDFDC,0xDFC8,0xDFCC, + 0xDFD0,0xDFCF,0xDFDF,0xDE2B,0xDE2E,0xDE2D,0xDE9D,0xDE9E,0xDE9F,0xDEA9, + 0xDEA0,0xDE98,0xDEA1,0xDEAB,0xDEAF,0xDF6E,0xDF5F,0xDF5A, 0,0xDF65, + 0xDF68,0xDF72,0xDC17,0xDC16,0xDC18,0xDC19,0xDC1A,0xDC22,0xDC1B,0xDC1C, + 0xDCBE,0xDCEE,0xDD5A,0xDD50,0xDD58,0xDD54,0xDD57,0xDD56,0xDE15,0xDE9B, + 0xDE93,0xDE92,0xDE72,0xDE98,0xDE99,0xDEDF, 0,0xDED5, 0,0xDED4, + 0xDEF3,0xDEF4,0xDEE7,0xDEE1,0xDEE6,0xDEEB,0xDEEC,0xDEDB, 0,0xDD0D, + 0xDD0C,0xDF2F,0xDD68,0xDD65,0xDD6B,0xDD69,0xDDD1,0xDDD3,0xDE27,0xDE28, + 0, 0,0xDE24,0xDED7,0xDFCA,0xDFC7,0xDD9E,0xDFD8,0xDFE1,0xDFC6, + 0xDFF8,0xDFC3,0xDFF4,0xDC17,0xDFEA, + /* plane 6, row 36 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85A,0xD85A,0x44CF,0xD85A, + 0xD85A,0xD87E,0x44CD,0xD85B,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85B,0xD85A,0xD85A,0xD85A,0xD87E,0xD87E,0xD87E, + 0xD87E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0x45AB,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46C1,0xD85E,0xD85E, + 0x8A24,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85F,0xD85F,0xD85F, + 1, /* first low-surrogate */ + 0xDFCB,0xDF86,0xDFC4,0xDFD9,0xDC19,0xDFC2,0xDFE2, 0,0xDFDE, + 0xDFED,0xDD9C, 0,0xDC1D,0xDFDD,0xDFDB,0xDFE8,0xDFE9,0xDFBF,0xDFE0, + 0xDFD1,0xDFDC,0xDFCE,0xDC1E,0xDFCC,0xDFF2,0xDFF3,0xDD9F,0xDDA2,0xDDA3, + 0xDDA1,0xDDAB,0xDDAA,0xDDA7,0xDDA9,0xDE88,0xDE75,0xDE60,0xDE6C,0xDE73, + 0,0xDE6E,0xDE74,0xDE76,0xDE68,0xDE77,0xDE86,0xDDEA,0xDE51,0xDE50, + 0xDE58,0xDE4D,0xDE4F,0xDE4E,0xDE5C,0xDE52,0xDE44,0xDE4A,0xDE4B,0xDFEA, + 0xDC10,0xDC11,0xDCCD,0xDCBF,0xDCC4,0xDCD0,0xDCCE,0xDCC0,0xDCC2,0xDCCF, + 0xDCC9,0xDCBB,0xDD97,0xDD92,0xDD6F,0xDD7E,0xDD9A, 0,0xDD86,0xDD73, + 0,0xDD77,0xDD8F,0xDD70,0xDD81,0xDD82,0xDD99,0xDD7D,0xDD7F,0xDD7B, + 0xDD87,0xDFB2,0xDC2F,0xDC34,0xDC2E, + /* plane 6, row 37 */ + 1 | (94 << 8), /* first, last */ + 0xD85F,0x4747,0xD85F,0x4757,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0x8DC3,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0x484E,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD861,0xD862,0xD861,0xD862, + 0xD861,0xD862,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD840,0xD840, + 1, /* first low-surrogate */ + 0xDC32, 0,0xDCAA, 0,0xDCA9,0xDD38,0xDD36,0xDD37,0xDD47, + 0xDD33,0xDD39,0xDD35,0xDD44,0xDEA5,0xDEA6,0xDE9E,0xDFE3,0xDFDF,0xDFD3, + 0xDFF1,0xDFE4,0xDFE0,0xDFD6, 0,0xDFE6,0xDFD8,0xDFDE,0xDFDB,0xDFDC, + 0xDE1B,0xDE1F,0xDE1D,0xDE1C,0xDE1E,0xDE20,0xDE21, 0,0xDEB6,0xDEBC, + 0xDEC6,0xDEC7,0xDEBA,0xDEBE,0xDEBD,0xDEB5,0xDEB4,0xDC0F,0xDC62,0xDCEB, + 0xDCD9,0xDCE4,0xDCD7,0xDCD8,0xDCD6,0xDCCE,0xDCDD,0xDCE7,0xDCD2,0xDCC5, + 0xDCC9,0xDCDB,0xDE92,0xDE8A,0xDE8B,0xDE89,0xDF08,0xDF03,0xDF06,0xDF05, + 0xDEF5,0xDF0B,0xDEFB,0xDFFC,0xDC01,0xDC02,0xDFFA,0xDC08,0xDFF7,0xDC00, + 0xDFFF,0xDC06,0xDFF6,0xDFFB,0xDC0A,0xDD25,0xDD43,0xDD44,0xDC64,0xDC62, + 0xDC5E,0xDC5B,0xDCD6,0xDC72,0xDCC2, + /* plane 6, row 38 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864, + 0xD864,0xD865,0xD865,0xD840,0xD865,0xD865,0xD865,0xD865,0xD866,0xD848, + 0xD87E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0x3477,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x51F2, + 0xD841,0xD87E,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD87E,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842, + 1, /* first low-surrogate */ + 0xDE77,0xDE82,0xDE7C,0xDE7D,0xDE86,0xDE81,0xDE84,0xDE76,0xDE83, + 0xDE7F,0xDE7E,0xDF88,0xDF8D,0xDF8B,0xDF91,0xDF8F,0xDC7C,0xDC79,0xDC7A, + 0xDDEA,0xDC4C,0xDD99,0xDED1,0xDE8B,0xDE8D,0xDE8A,0xDE8E,0xDC11,0xDE56, + 0xDE15,0xDC74,0xDCC3,0xDCC4,0xDD1B,0xDD5F,0xDD6A,0xDD69,0xDD6B,0xDF0C, + 0xDEF6,0xDEED,0xDF29,0xDEFE,0xDEF1,0xDF17,0xDEFF,0xDEEE,0xDEFD,0xDF1C, + 0xDEFC,0xDF00,0xDF20, 0,0xDEF9,0xDF67,0xDF08,0xDC9E,0xDCF3,0xDD25, + 0xDD27,0xDD1F,0xDD65,0xDD63,0xDD94,0xDD97,0xDDF1,0xDE5F,0xDE62, 0, + 0xDE60,0xDC22,0xDF8C,0xDF82,0xDF90,0xDF8B,0xDF8D,0xDF81,0xDF9D,0xDC8E, + 0xDC8F,0xDC92,0xDD23,0xDD52,0xDC2E,0xDE00,0xDE01,0xDE02,0xDE1F,0xDE8C, + 0xDE89,0xDE8B,0xDE88,0xDE8D,0xDE8F, + /* plane 6, row 39 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0x55B6, + 0xD87E,0xD843,0xD87E,0xD840,0xD843,0xD843,0xD87E,0xD87E,0xD843,0xD87E, + 0xD843,0xD843,0xD843,0xD843,0xD843,0x35C4,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD844,0xD844,0xD844,0xD851,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x3652,0xD844,0xD844,0xD844, + 0xD845,0xD868,0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847, + 0xD847,0xD87E,0xD847,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDF85,0xDF00,0xDF05,0xDF01,0xDF68,0xDF6E,0xDF67,0xDF75, 0, + 0xDC45,0xDDD7,0xDC46,0xDC48,0xDDD4,0xDDD8,0xDC47,0xDC48,0xDDBA,0xDC49, + 0xDDDB,0xDDBF,0xDE35,0xDDBC,0xDDD9, 0,0xDDDD,0xDE00,0xDDD5,0xDE30, + 0xDDBD,0xDDDC,0xDDFD,0xDDFE,0xDE07,0xDD17,0xDF6F,0xDF69,0xDF70,0xDF67, + 0xDFA9,0xDF95,0xDF90,0xDF6C,0xDF97,0xDF71, 0,0xDF74,0xDF6D,0xDF8E, + 0xDD2F,0xDF1B,0xDDA9,0xDE4E,0xDC5F,0xDE5A,0xDE48,0xDE55,0xDE4C,0xDE49, + 0xDE4F,0xDE4A,0xDFD6,0xDFA0,0xDFA9,0xDC67,0xDF9D,0xDFD4,0xDFA4,0xDFA8, + 0xDFA6,0xDFE6,0xDD7D,0xDD77,0xDD7A,0xDE41,0xDE49,0xDE59,0xDE45,0xDE48, + 0xDE40,0xDF8E,0xDF95,0xDF90,0xDFF7,0xDFF8,0xDFF6,0xDFFB,0xDC9E,0xDC9D, + 0xDC99,0xDC77,0xDCA3,0xDCA9,0xDC98, + /* plane 6, row 40 */ + 1 | (94 << 8), /* first, last */ + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD87E,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD87E,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD87E,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0x386B,0x5EC3,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD859,0xD849,0xD849,0xD849,0xD849,0x3941, + 0xD849,0xD849,0xD849,0xD849,0xD849,0x3950,0xD849,0xD849,0xD87E,0xD849, + 0xD849,0xD849,0xD87E,0xD849,0xD849, + 1, /* first low-surrogate */ + 0xDCA0,0xDC96,0xDC94,0xDC95,0xDC9F,0xDCA1,0xDD21,0xDD1D,0xDD1F, + 0xDE6D,0xDC7C,0xDE9A,0xDE92,0xDE7A,0xDE7D,0xDEA1,0xDE9D,0xDE99,0xDE6B, + 0xDE6E,0xDC7D,0xDC45,0xDC84,0xDCFB,0xDCEB,0xDCF2,0xDCF9,0xDC86,0xDCF8, + 0xDCED,0xDD01,0xDCF7,0xDD06,0xDD9B,0xDDCA, 0, 0,0xDE6B,0xDE6C, + 0xDE74,0xDE67,0xDE5B,0xDE60,0xDE76,0xDE63,0xDE61,0xDF28,0xDF5B,0xDF5E, + 0xDF60,0xDF5D,0xDF5C,0xDFF4,0xDC00,0xDC08,0xDC07,0xDC01,0xDC05,0xDC64, + 0xDC63,0xDC9E,0xDCA0,0xDCA1,0xDC9F,0xDD26,0xDD2D,0xDD28,0xDD1D,0xDEEC, + 0xDEE3,0xDEEB,0xDF16,0xDEC8,0xDE1B,0xDEE9,0xDEE4,0xDF24,0xDED1, 0, + 0xDEDD,0xDEC2,0xDECB,0xDEC7,0xDEE7, 0,0xDEEA,0xDF4B,0xDCA5,0xDF60, + 0xDF7D,0xDF3E,0xDCA4,0xDF52,0xDF4E, + /* plane 6, row 41 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A,0xD84B,0xD84B, + 0xD84A,0xD84B,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84A,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AC0,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0x3AFC,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0xD84C, + 0xD84C,0x3479,0xD84C,0xD84C,0x440B, + 1, /* first low-surrogate */ + 0xDF3C,0xDF32,0xDF30,0xDF23,0xDDCA,0xDDCB,0xDDC9,0xDDC8,0xDDCD, + 0xDF98,0xDFA0,0xDF9F,0xDF9C,0xDFA3,0xDF97,0xDCBE,0xDFF1,0xDC09,0xDC03, + 0xDFEA,0xDC45,0xDFED,0xDC05,0xDC1A,0xDC15,0xDC01,0xDFEC,0xDC0E,0xDC17, + 0xDC42,0xDC12,0xDC10,0xDFEF,0xDFFF,0xDC00,0xDC0C,0xDC0F,0xDC04,0xDC08, + 0xDC14,0xDC43,0xDCBD,0xDC1B,0xDC11,0xDC13,0xDECF,0xDECE,0xDF6F,0xDF6E, + 0xDF7A,0xDF70,0xDF64,0xDF5E,0xDF6C,0xDCC9,0xDF5B,0xDF61,0xDF65,0xDC7F, + 0xDC80,0xDC7C,0xDCA7,0xDCA6,0xDCA1, 0,0xDCA8,0xDCA3,0xDCA2,0xDCAD, + 0xDCA5,0xDD01,0xDCFF,0xDCFC,0xDD00,0xDD35,0xDDEE,0xDDEF,0xDDF6,0xDDE8, + 0xDDEA,0xDDE3,0xDE1F, 0,0xDDE4,0xDDFA,0xDDF1,0xDDFB,0xDCD4,0xDF3D, + 0xDF3C, 0,0xDF78,0xDF77, + /* plane 6, row 42 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD861, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD87E, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D1E,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850, + 1, /* first low-surrogate */ + 0xDCD1,0xDCC7,0xDCDF,0xDCD0,0xDCE0,0xDCD6,0xDCD8,0xDD16,0xDD0E, + 0xDCD9,0xDD0F,0xDD11,0xDCCD,0xDC89,0xDCCE,0xDD14,0xDCDA,0xDD12,0xDCD3, + 0xDCC2,0xDCE1,0xDCE9,0xDCEA,0xDCDE,0xDD15,0xDCD9,0xDCD6,0xDCCD,0xDCD0, + 0xDCD3,0xDCF0,0xDD82,0xDD85,0xDD7F,0xDD7D,0xDD81,0xDD83,0xDD84,0xDCA0, + 0xDE28,0xDE0F,0xDE17,0xDE1A,0xDE25,0xDCF7,0xDE9B,0xDE99,0xDF92,0xDF8C, + 0xDF95,0xDF8D,0xDFA3,0xDF93,0xDF91,0xDDDB,0xDD99,0xDD9A,0xDE08,0xDE4C, + 0xDE0D,0xDE01,0xDE4E,0xDE02,0xDE4D,0xDE21,0xDDFC,0xDD09,0xDD8A,0xDD08, + 0xDD95,0xDE11,0xDE12,0xDE46,0xDE1C,0xDE49,0xDE0C, 0,0xDE13,0xDE16, + 0xDDFD,0xDE0F,0xDE1F,0xDE30,0xDE6E,0xDE6B,0xDE9B,0xDE7B,0xDE63,0xDE97, + 0xDE6D,0xDE9C,0xDE98,0xDE6F,0xDE67, + /* plane 6, row 43 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD87E,0x3E85,0xD851,0xD851,0xD852,0xD87E, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD87E,0xD853,0xD853,0xD853,0x3F97,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD87E,0xD854,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDE69,0xDD15,0xDD63,0xDD86,0xDD8A,0xDD87,0xDD88,0xDD85,0xDD89, + 0xDDCA,0xDDC7,0xDDCB,0xDDCC,0xDDC9,0xDE0D,0xDE83,0xDE84,0xDE78,0xDE82, + 0xDE73,0xDE79,0xDE8C,0xDFD0,0xDFCF,0xDFD2,0xDFD9,0xDFCC,0xDFEB,0xDFFD, + 0xDFEC,0xDFE8,0xDFF8,0xDFFA,0xDD27, 0,0xDFE1,0xDFFB,0xDCE7,0xDD2E, + 0xDDA5,0xDD91,0xDDA6,0xDD7C,0xDD92,0xDDA2,0xDDA0,0xDEFC,0xDEFE,0xDF57, + 0xDF53,0xDF58,0xDFE7,0xDC8E,0xDD38,0xDC83,0xDC8B,0xDC84, 0,0xDDA2, + 0xDDB7,0xDDA9,0xDDA5,0xDD9F,0xDDAA,0xDD97,0xDDA1,0xDD9E,0xDDAB,0xDD99, + 0xDDA3,0xDF30,0xDF32,0xDF2F,0xDF70,0xDF6C,0xDF6F,0xDFE8,0xDFEE,0xDFEA, + 0xDC6D,0xDC76,0xDC70,0xDC71,0xDC6C,0xDDEB,0xDDB5,0xDD96,0xDD90,0xDD8D, + 0xDD49,0xDDA2,0xDDB0,0xDD92,0xDDA0, + /* plane 6, row 44 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0x4093,0xD854,0xD840,0xD855,0x7861,0xD855,0xD855,0xD855,0x40B2, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD84C,0xD855,0xD855,0xD855,0xD855,0x7A06,0xD855,0xD855,0xD841,0xD855, + 0x7A01,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0x41A4,0xD856,0xD856,0x41F2,0xD856,0xD856,0xD856,0xD856,0x41F1, + 0xD856,0xD856,0xD857,0xD857,0x4281,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD857,0xD857,0xD857,0xD857, + 0xD857,0x42DC,0xD87E,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD85B,0xD858,0xD858,0xD858, + 1, /* first low-surrogate */ + 0xDD93,0xDDC3,0xDD8E,0xDDB6,0xDD9D,0xDD95,0xDDB3,0xDDA4,0xDF70, + 0xDFD4, 0,0xDFCF,0xDD70,0xDC94, 0,0xDCC0,0xDCB4,0xDCC1, 0, + 0xDCBD,0xDCAF,0xDE77,0xDE78,0xDE6B,0xDE6D,0xDE6E,0xDE72,0xDE6F,0xDE71, + 0xDCAB,0xDE8C,0xDF3F,0xDFB6,0xDFB7, 0,0xDFBB,0xDFB8,0xDF9C,0xDFB9, + 0,0xDD8B,0xDD7A,0xDD84,0xDD88,0xDD91,0xDD79,0xDD8E,0xDD80,0xDD82, + 0xDD7C, 0,0xDE84,0xDE7F, 0,0xDF3B,0xDF71,0xDF3D,0xDF30, 0, + 0xDF3E,0xDF38,0xDE5E,0xDE64, 0,0xDE5D,0xDE6D,0xDE4F,0xDE62,0xDE5F, + 0xDFEC,0xDFF2,0xDFF4,0xDFF7,0xDFF6,0xDC07,0xDFED,0xDFEA,0xDFF0,0xDFF8, + 0xDFF3, 0,0xDD72,0xDE31,0xDE2F,0xDEB6,0xDEAE,0xDEAA,0xDEBF,0xDECC, + 0xDEC7,0xDC83,0xDF80,0xDF7B,0xDF7F, + /* plane 6, row 45 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD858,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0x440C,0xD859,0xD85A,0xD85A,0xD851,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD851,0xD87E,0xD85A,0xD85A,0xD85A,0xD842,0x446D,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85A,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDF7D,0xDF83,0xDD78,0xDC46,0xDC2D,0xDC25,0xDC26,0xDC2C,0xDC37, + 0xDC31,0xDC33,0xDC32,0xDC27,0xDC2A,0xDC2E,0xDC2F,0xDCC0,0xDD71,0xDD61, + 0xDD62,0xDD66,0xDE18,0xDEC5,0xDEC3,0xDEC4,0xDEC2,0xDEAE,0xDF10,0xDF08, + 0xDF1F,0xDF3A,0xDF3B,0xDF36,0xDF0C,0xDF06,0xDF2A,0xDF57,0xDF50,0xDF20, + 0xDD85,0xDF2C,0xDF21,0xDF0B,0xDF19,0xDF35,0xDF18,0xDF0F,0xDF13,0xDF55, + 0xDF39,0xDF1A, 0,0xDF17,0xDCE4,0xDCE9,0xDD8B,0xDD10,0xDD12,0xDD3F, + 0xDD6E,0xDD18,0xDD8C,0xDDD6,0xDDD5,0xDDD7,0xDF02, 0,0xDE31,0xDE30, + 0xDE3A,0xDF85,0xDF6B,0xDC48,0xDC4B,0xDC37,0xDC7B,0xDC6C,0xDC85,0xDC65, + 0xDC36,0xDC86,0xDC34,0xDC68,0xDC5A,0xDC58,0xDC72,0xDC6A,0xDFD3,0xDC3C, + 0xDC33,0xDC3B,0xDC4D,0xDC4F,0xDC7C, + /* plane 6, row 46 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x44E6,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85A,0xD85B,0xD85B,0xD85A,0xD87E,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD87E,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0x8849,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85E,0xD85E,0xD85E,0x8999,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46D1,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0x472C,0xD85E,0xD85F,0xD85F,0xD85F, + 1, /* first low-surrogate */ + 0xDCB0,0xDC5B,0xDC55,0xDC64,0xDC6B,0xDC53, 0,0xDC57,0xDC5E, + 0xDC6D,0xDC35,0xDC69,0xDC59,0xDC66,0xDC50,0xDC51,0xDC5C,0xDD5D,0xDC87, + 0xDC78,0xDC49,0xDC4E,0xDFF1,0xDC73,0xDC88,0xDFCF,0xDDA4,0xDDB1,0xDDB3, + 0xDE9C,0xDEA4,0xDE90,0xDEB8,0xDEA0,0xDE9D,0xDEA8,0xDEA9,0xDDB9,0xDEB1, + 0xDE93,0xDE9B,0xDEA2,0xDEA1,0xDEB0,0xDEA7,0xDDB3, 0,0xDDB4,0xDDF1, + 0xDDED,0xDDEC,0xDE68,0xDE75,0xDE6A,0xDE62,0xDE67,0xDE60,0xDE77,0xDE5F, + 0xDE79,0xDC23,0xDC21,0xDC1C, 0,0xDC1F,0xDC1E,0xDCD6,0xDCD3,0xDCD9, + 0xDCD7,0xDCD4,0xDCDC,0xDCD8,0xDDA3, 0,0xDDBE,0xDDA9,0xDDA1,0xDDA0, + 0xDDAB,0xDDA2,0xDDBA,0xDDC2,0xDD9C,0xDDBB,0xDDAA,0xDDAC,0xDDA5,0xDDC1, + 0,0xDFE2,0xDC36,0xDC3D,0xDC3A, + /* plane 6, row 47 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x476E, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0x47E5,0xD860,0xD85F,0xD85F,0xD860,0xD85F,0x47E6,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0x489F,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD844,0xD862,0x921F, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD863,0xD863,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDC61,0xDC48,0xDC3C,0xDCB7,0xDCAC,0xDCB3,0xDCB6,0xDCB2, 0, + 0xDD5D,0xDD49,0xDD4E,0xDD4F,0xDD4D,0xDD5C,0xDE5D,0xDEBB,0xDECE,0xDEBF, + 0xDEBA,0xDEC3, 0,0xDC06,0xDFF8,0xDFFE,0xDC13,0xDFF6, 0,0xDE34, + 0xDE2D,0xDE2A,0xDE35,0xDE2C,0xDED4,0xDEDA,0xDED3,0xDED2,0xDECE,0xDECF, + 0,0xDCFD,0xDD0B,0xDCFE,0xDCF8,0xDCF7,0xDD17,0xDCFA,0xDCF9,0xDD00, + 0xDCF5,0xDCF1,0xDD03,0xDD05,0xDD1C,0xDEAC,0xDE9A,0xDEAD,0xDEA0,0xDF1B, + 0xDF25,0xDF24,0xDF26,0xDF27,0xDF28,0xDF2A,0xDF1A,0xDF2E,0xDF15,0xDC15, + 0xDC14,0xDC17,0xDC18,0xDC0F,0xDC13,0xDC0B,0xDC22,0xDF7A,0xDD26, 0, + 0xDD51,0xDD4D,0xDD4E,0xDD4A,0xDD4B,0xDD4C,0xDD50,0xDD62,0xDD4F,0xDD52, + 0xDC68,0xDC69,0xDCE5,0xDCF0,0xDCE1, + /* plane 6, row 48 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD87E,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0x4A0D,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866, + 0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD868,0xD869,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD87E, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x34F8,0xD841,0xD841,0xD841, + 0xD841,0xD842,0xD842,0xD842,0x5313,0xD842,0x3533,0xD842,0xD842,0xD842, + 0x353C,0xD842,0xD842,0xD842,0xD842, + 1, /* first low-surrogate */ + 0xDCE2,0xDDF2,0xDEA5,0xDEA9,0xDEA4,0xDEAF,0xDEAC,0xDEAE,0xDEAA, + 0xDF95,0xDF99,0xDF93,0xDF9D,0xDF98,0xDF9C,0xDF97, 0,0xDC89,0xDC87, + 0xDDD7,0xDDED,0xDDF1,0xDDF0,0xDE05,0xDE03,0xDE04,0xDE5F,0xDC57,0xDD9C, + 0xDDA1,0xDD9A,0xDE8F,0xDE93,0xDE9E,0xDEA3,0xDE98,0xDE99,0xDE95,0xDC6E, + 0xDC6A,0xDEF4,0xDEF7,0xDC79,0xDF8F,0xDF91,0xDC0B,0xDD02,0xDC84,0xDD04, + 0xDD80,0xDF2F,0xDF3F,0xDF3B,0xDF62,0xDF44,0xDF33,0xDF5F,0xDF2B,0xDC09, + 0xDF39,0xDF36,0xDF48,0xDF35,0xDF6C,0xDF58,0xDF3A,0xDCA8,0xDCF4,0xDD29, + 0xDD9A,0xDE00,0xDFBB,0xDFBD,0xDFB7,0xDFB2, 0,0xDFA8,0xDFAB,0xDFA6, + 0xDFBC,0xDC97,0xDC96,0xDCF8, 0,0xDD51, 0,0xDDB5,0xDDB4,0xDDB6, + 0,0xDDB7,0xDE05,0xDE23,0xDE95, + /* plane 6, row 49 */ + 1 | (94 << 8), /* first, last */ + 0xD842,0x354F,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0x35DC,0xD843, + 0xD843,0xD843,0xD87E,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0x55E0,0xD843,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD87E,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD87E,0xD845,0xD845,0xD845,0xD842, + 0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845,0xD846,0xD845,0xD846,0xD845, + 0xD845,0xD845,0xD846,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD847,0xD847,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDE98, 0,0xDE94,0xDE93,0xDF07,0xDF73,0xDF71,0xDF72,0xDF78, + 0xDE5F,0xDE6A,0xDE67,0xDE6B,0xDE69,0xDE8E,0xDE49,0xDE80, 0,0xDE44, + 0xDE8F,0xDE45,0xDC4C,0xDE4F,0xDE63,0xDE36,0xDE48,0xDE5C,0xDE93,0xDE61, + 0xDE60,0xDE4E,0xDE5E,0xDE3F,0xDEA4, 0,0xDE68,0xDE0B,0xDE11,0xDE0D, + 0xDE0E,0xDFC2,0xDC57,0xDFB0,0xDFC3,0xDFC8,0xDF65,0xDFD7,0xDFBD,0xDFB8, + 0xDFB6,0xDFC7,0xDFBC,0xDFB1,0xDFAF,0xDC5B,0xDD35,0xDD30,0xDD5D,0xDF76, + 0xDD6F,0xDDB0,0xDC5E,0xDDB4,0xDE5C,0xDE5D,0xDC08,0xDFEE,0xDC0B,0xDFF2, + 0xDFFD,0xDFF1,0xDC10,0xDC68,0xDC14,0xDD8B,0xDD8C,0xDD85,0xDE7A,0xDE6C, + 0xDE60,0xDE67,0xDE66,0xDE6A,0xDE5F,0xDE6D,0xDE68,0xDE64,0xDF3A,0xDF3B, + 0xDF39,0xDC02,0xDC04,0xDC03,0xDCB4, + /* plane 6, row 50 */ + 1 | (94 << 8), /* first, last */ + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E, + 0x37F5,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD849,0xD849,0x38C3,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0x6139,0xD849, + 0xD87E,0xD849,0xD849,0x3971,0xD849,0xD849,0xD87E,0xD849,0xD849,0xD849, + 0xD84A,0xD84A,0xD851,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 1, /* first low-surrogate */ + 0xDCB3,0xDCBB,0xDCAC,0xDCB6,0xDCB1,0xDCAF,0xDCB5,0xDCBE,0xDCB2, + 0xDD24,0xDEB6,0xDEB9,0xDEAC,0xDEB0,0xDED7,0xDEBB,0xDEFE,0xDECB,0xDC7F, + 0,0xDEB3,0xDEBE,0xDECD,0xDEBC,0xDEBA,0xDEC7,0xDD16,0xDD1B,0xDD17, + 0xDD15,0xDD9F,0xDC8E,0xDE82,0xDE83,0xDE8E,0xDE6A,0xDE89,0xDE94,0xDE86, + 0xDE90,0xDF62,0xDF90,0xDC0C,0xDC0F, 0,0xDCA5,0xDCA7,0xDCA6,0xDCA4, + 0xDD35,0xDD38,0xDD36,0xDD43,0xDD47,0xDD37,0xDF43,0xDFA2,0xDF51,0xDF72, + 0xDF6D,0xDF2F,0xDF54,0xDF6E,0xDF55,0xDF37,0xDF4F,0xDF50, 0,0xDF9E, + 0xDCA8,0xDFB3,0xDFA7, 0,0xDFF9,0xDF91,0xDCA7,0xDFB6,0xDFDD,0xDF99, + 0xDDDF,0xDDD5,0xDFF5,0xDC28,0xDC40,0xDC71,0xDC98,0xDC95,0xDC65,0xDC78, + 0xDC7F,0xDC60,0xDC7C,0xDC96,0xDC6A, + /* plane 6, row 51 */ + 1 | (94 << 8), /* first, last */ + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD865, + 0xD84C,0xD854,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E,0x3B01, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD84E,0xD84E, + 0xD84E,0xD842,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDC79,0xDC73,0xDC72,0xDC7B,0xDC70,0xDED5,0xDED7,0xDF8F,0xDF89, + 0xDF9E,0xDF87,0xDFA0,0xDF8D,0xDF88,0xDF7F,0xDF8C,0xDF93,0xDC59,0xDDB0, + 0xDCB1,0xDDF4,0xDCAF,0xDCB2,0xDD08,0xDD0A,0xDD36,0xDD37,0xDCCF, 0, + 0xDE36,0xDE29,0xDE4A,0xDE26,0xDE28,0xDE24,0xDE2A,0xDE48,0xDF44,0xDF84, + 0xDF8C,0xDCC4,0xDCDC,0xDD87,0xDD53,0xDD7F,0xDD31,0xDD51,0xDD4B,0xDD52, + 0xDD80,0xDDA5,0xDD81,0xDD43,0xDD34,0xDD36,0xDD32,0xDD48,0xDD49,0xDD3C, + 0xDD4D,0xDD4A,0xDCE6,0xDD8A,0xDD46,0xDD3E,0xDD83,0xDD50,0xDDB4,0xDCF0, + 0xDCE4,0xDCE3,0xDCE5,0xDCE6,0xDCE7,0xDCE1,0xDCEF,0xDCE8,0xDCDD,0xDD03, + 0xDD88,0xDE26,0xDE16,0xDE3B,0xDE2F,0xDE39,0xDE34,0xDCF4,0xDE35,0xDE31, + 0xDE38,0xDF81,0xDEAA,0xDEA3,0xDEA4, + /* plane 6, row 52 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0x6ED7,0xD87E,0x3D41,0xD850, + 0xD850,0xD850,0x3DD7,0xD850,0xD850,0xD850,0xD850,0xD87E,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0x3DE2,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0x3E45,0xD851, + 0xD851,0xD851,0x733D,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDEA0,0xDEA1,0xDEA9,0xDEA5,0xDFAF,0xDFB1,0xDFAB,0xDFAE,0xDFB0, + 0xDFB3,0xDFAC,0xDFA9,0xDFB2,0xDFA8,0xDFB4,0xDFC2,0xDC4F,0xDC66,0xDE1E, + 0xDE15,0xDE10,0xDE7F,0xDE7E,0xDE60,0xDECC,0xDEB2,0xDE62,0xDE8D,0xDE8E, + 0xDE77,0xDE7C,0xDE8F,0xDE5D,0xDE6D,0xDE63,0xDEAF,0xDE90,0xDE7D,0xDE7A, + 0xDE06,0xDD0B,0xDE68,0xDEB4,0xDE78,0xDEB1, 0,0xDD0C, 0,0xDEE8, + 0xDEE9,0xDEC0, 0,0xDEEA,0xDEB7,0xDEBA,0xDEB5,0xDD1D,0xDEB4,0xDEBC, + 0xDEC6,0xDEB8,0xDEBD,0xDEC2,0xDF4D,0xDEF0,0xDEC7,0xDEC1,0xDEC3,0xDEF1, + 0xDEEC, 0,0xDD1C,0xDD20,0xDD58,0xDD65,0xDD64,0xDD8C,0xDD8D,0xDDD9, + 0xDDE0,0xDE10,0xDE94,0xDE92,0xDE96,0xDE95,0xDEBF,0xDEA0, 0,0xDFF4, + 0xDFF6,0xDFDC, 0,0xDC16,0xDC15, + /* plane 6, row 53 */ + 1 | (94 << 8), /* first, last */ + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0x3FF2,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD84B,0x4049,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD855,0xD87E,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855, + 1, /* first low-surrogate */ + 0xDC1C,0xDC0F,0xDC2C,0xDC14,0xDC25,0xDC17,0xDC12,0xDC1E,0xDD80, + 0xDDA8,0xDDAF,0xDDD6,0xDDE2,0xDDB4,0xDDB3,0xDDB0,0xDDB2,0xDDA1,0xDF60, + 0xDF66,0xDF61,0xDF4E,0xDF5D,0xDF63,0xDFE6,0xDFEF,0xDFEC,0xDC98,0xDCA7, + 0xDC94,0xDC95,0xDC91,0xDC9D,0xDC99,0xDC9B,0xDC9C,0xDD1D,0xDD1C,0xDDD0, + 0xDDE0,0xDDCB,0xDDDB,0xDDDA,0xDDC2,0xDDD3,0xDDE5,0xDF7D,0xDF7B,0xDFFF, + 0,0xDFF9,0xDC77,0xDC7C,0xDC78,0xDC7B,0xDC7A,0xDDD2,0xDDCB,0xDDC9, + 0xDDCE,0xDDE4,0xDDCA,0xDDD0,0xDFA5, 0,0xDDD9,0xDDEE,0xDDDD,0xDE00, + 0xDDE1,0xDFDE,0xDFE2,0xDFDA,0xDCCE,0xDD4F,0xDCCF,0xDCDA,0xDCD1,0xDCD4, + 0xDCED,0xDCCB,0xDCD5,0xDCF1,0xDE9C,0xDE88,0xDF41,0xDFD0,0xDFF7,0xDFCF, + 0xDFD1,0xDFDB,0xDFDE,0xDFF8,0xDFDC, + /* plane 6, row 54 */ + 1 | (94 << 8), /* first, last */ + 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0x41A9,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD840,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD849,0x43CB,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0x440D,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859, + 1, /* first low-surrogate */ + 0xDFD9,0xDDA0,0xDDB2,0xDDA1,0xDDAA,0xDDA9, 0,0xDDA6,0xDD9C, + 0xDDB5,0xDDA7,0xDE8E,0xDE90,0xDE91,0xDF85,0xDF5B,0xDF70,0xDF64,0xDF67, + 0xDF63,0xDF77,0xDF68,0xDF65,0xDF6A,0xDF78,0xDF66,0xDE88,0xDE9E,0xDE74, + 0xDE7A,0xDE79,0xDE8B,0xDE7F,0xDC13,0xDC1E,0xDC17,0xDC1A,0xDC22,0xDC43, + 0xDC19,0xDC1F,0xDC27,0xDC12,0xDC24,0xDC25,0xDF5E,0xDE35,0xDE34,0xDED1, + 0xDEC4,0xDECA,0xDEC6,0xDECB,0xDECD,0xDEE2,0xDF89,0xDF8B,0xDF86,0xDF88, + 0xDF8D,0xDC3B,0xDC3C,0xDC3D,0xDCF5,0xDD79,0xDD75,0xDD82,0xDD7F,0xDD85, + 0xDD76,0xDD7C,0xDD7E,0xDD7B,0xDD80,0xDD7A,0xDD48, 0,0xDE1D,0xDEF6, + 0xDEF7,0xDEF9,0xDF63,0xDF6C,0xDF6E,0xDF14, 0,0xDF67,0xDF6F,0xDF69, + 0xDF76,0xDF95,0xDF71,0xDF61,0xDF78, + /* plane 6, row 55 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD856,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 1, /* first low-surrogate */ + 0xDF6B,0xDF85,0xDF84,0xDD14,0xDD76,0xDDB6,0xDD75,0xDD74,0xDDE2, + 0xDE3F,0xDE44,0xDE3D,0xDE47,0xDE48,0xDEDB,0xDEDC,0xDEDD,0xDFE5,0xDFE6, + 0xDCC2,0xDD2E,0xDD1D,0xDCF8,0xDCF0,0xDCF6,0xDCC5,0xDCC6,0xDCFC,0xDD52, + 0xDD2F,0xDD10,0xDCF3,0xDCD2,0xDCEA,0xDCDC,0xDD1B,0xDCFB,0xDCC3,0xDD16, + 0xDD07,0xDCC9,0xDCD8,0xDD30,0xDD13,0xDD31,0xDCFA,0xDCF2,0xDDE3,0xDCD5, + 0xDD01,0xDCF1,0xDD1C,0xDCD6,0xDD08,0xDD0B,0xDD17,0xDD20,0xDCCA,0xDD32, + 0xDD05,0xDCE4,0xDCCE,0xDD33,0xDD02,0xDD19,0xDD1E,0xDCD3,0xDCF7,0xDCE8, + 0xDD1F,0xDCF4,0xDDD8,0xDDBF,0xDDBE,0xDDBD,0xDEDC,0xDEDD,0xDEAB,0xDEC9, + 0xDEC8,0xDEDF,0xDED9,0xDEDB,0xDECC,0xDEE0,0xDEEF,0xDEF3,0xDEAE,0xDF01, + 0xDDB7,0xDDB9,0xDDB6,0xDDB8,0xDDF6, + /* plane 6, row 56 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0x4631,0xD87E,0xD85D,0xD87E,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0x46D5,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD87E,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD84E,0xD85F, + 0xD87E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD85F, + 0xD860,0xD860,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDDF3,0xDDF5,0xDDF2,0xDE91,0xDE9D,0xDE9B,0xDE92,0xDE8D,0xDE9E, + 0xDE8C, 0,0xDDC7,0xDE95,0xDDC6,0xDE8A,0xDE8E,0xDE9C,0xDFEF,0xDC2D, + 0xDC52,0xDC35,0xDC28,0xDC2E,0xDCE5,0xDDEA,0xDDF1,0xDDEB,0xDDD8,0xDDD0, + 0xDDF3,0xDDDB,0xDDCE, 0,0xDDDA,0xDDD7,0xDDE1,0xDDF2,0xDDC8,0xDDD9, + 0xDDDE,0xDDD1,0xDDE7,0xDDCF,0xDFB7,0xDC47,0xDC42,0xDC43,0xDDD3,0xDCC3, + 0xDCC1,0xDCC7,0xDD64,0xDD6A,0xDD66,0xDD50,0xDD6E,0xDD65,0xDCEC,0xDD7F, + 0xDDD5,0xDD9A,0xDD69,0xDD72,0xDD6F,0xDD7D,0xDD70,0xDE60,0xDEC2,0xDEE7, + 0xDED1,0xDEEB,0xDED4,0xDEDC,0xDEDB,0xDC37,0xDC25,0xDC1F,0xDC1E,0xDC21, + 0xDC1B,0xDC17,0xDC22,0xDC2A,0xDC1A,0xDC2D,0xDC23,0xDC26,0xDC36,0xDFFF, + 0xDE3A,0xDE40,0xDE42,0xDE38,0xDE3B, + /* plane 6, row 57 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0x4856,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD87E, + 0xD861,0xD861,0xD87E,0xD861,0x48F4,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDE3C,0xDE43,0xDEE8, 0,0xDEF9,0xDEEB,0xDEF1,0xDEE9,0xDEEC, + 0xDC15,0xDC47,0xDC46,0xDC45,0xDD24,0xDD56,0xDD21,0xDD27,0xDD4D,0xDD31, + 0xDD1E,0xDD2C,0xDD4F,0xDD2B,0xDD53,0xDD51,0xDD54,0xDD29,0xDD50,0xDD1F, + 0xDD32,0xDD2A,0xDD1D,0xDD28,0xDD2E,0xDD2D,0xDEBC,0xDEBB,0xDEBD,0xDDE4, + 0xDF47,0xDF41,0xDDE5,0xDF49, 0,0xDC2E,0xDC27,0xDD6A,0xDD7B,0xDD73, + 0xDD75,0xDD69,0xDD79,0xDD72,0xDC76,0xDC77,0xDC74,0xDC73,0xDD02,0xDCFE, + 0xDD01,0xDCF9,0xDCF4,0xDED3,0xDED5,0xDED8,0xDEC3,0xDECA,0xDED0,0xDECB, + 0xDECE,0xDEC5,0xDEE6,0xDEC4,0xDEC0,0xDED4,0xDEE8,0xDF76,0xDFA2,0xDFAE, + 0xDFA8,0xDFA3,0xDFA7,0xDF96,0xDFA9,0xDFA5,0xDFAF,0xDFA4,0xDFAB,0xDFAA, + 0xDFA6,0xDFA0,0xDC98,0xDDDB,0xDDF6, + /* plane 6, row 58 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0x9775,0xD864,0xD864,0xD864,0x4A58,0xD864, + 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD87E, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD87E, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD850,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD868,0xD868,0xD868,0xD87E,0xD84E,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD87E,0x3487,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841, + 1, /* first low-surrogate */ + 0xDDF5,0xDE0C,0xDE0A, 0,0xDE68,0xDE63,0xDE66, 0,0xDE64, + 0xDE6A,0xDE69,0xDF95,0xDC02,0xDC6A,0xDC5E,0xDC68,0xDC69,0xDC65,0xDDFE, + 0xDDA7,0xDDAE,0xDDA8,0xDDB3,0xDE9C,0xDEA9,0xDEB6,0xDEB3,0xDEB2,0xDE03, + 0xDEB8,0xDEC0,0xDEBF,0xDEBA,0xDEA8,0xDC3C,0xDC72,0xDC71,0xDC75,0xDC73, + 0xDE17,0xDE15,0xDE16,0xDE1B,0xDEFA,0xDEF9,0xDC2C,0xDC85,0xDC82,0xDC7F, + 0xDC7D,0xDC88,0xDEF3,0xDD4E,0xDD50,0xDF93,0xDF97,0xDF98,0xDF9B,0xDF9C, + 0xDF96,0xDE8B,0xDEFD,0xDEFC,0xDE17,0xDD8B,0xDD08,0xDD07,0xDF73,0xDFA2, + 0xDFAF,0xDF82,0xDF7B,0xDF74,0xDFB0,0xDF76,0xDFB9,0xDF9E,0xDFB1,0xDFA1, + 0xDFB2,0xDF6E,0xDC0B, 0,0xDF78,0xDF7A,0xDF83,0xDF9A,0xDCF8,0xDD31, + 0xDD69,0xDD68,0xDD9C,0xDE04,0xDE99, + /* plane 6, row 59 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD845,0xD844,0xD844,0xD844,0xD844,0xD844,0xD87E,0xD844,0xD87E, + 0xD844,0xD845,0xD845,0xD85E,0xD844,0xD844,0xD844,0xD845,0xD844,0xD845, + 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD845,0xD846,0xD846, + 1, /* first low-surrogate */ + 0xDFC7,0xDFC6,0xDFDC,0xDFC4,0xDFD8,0xDFD4,0xDFDF,0xDFD1,0xDFD0, + 0xDFD6,0xDFCF,0xDCAD,0xDCAF,0xDCA7,0xDCFD,0xDD5B,0xDD5A,0xDE07,0xDE9D, + 0xDE9B,0xDEAB,0xDEA4,0xDE9C,0xDE9E,0xDEA5,0xDEAA,0xDEA6,0xDF0E,0xDF7E, + 0xDF7C,0xDEEE,0xDED5,0xDEE9,0xDE42,0xDEE2,0xDF23,0xDED9,0xDED4,0xDEE3, + 0xDF15,0xDEEF,0xDEF0,0xDED6,0xDEDD,0xDEF6,0xDF1C,0xDED8,0xDEDB,0xDEDA, + 0xDEED,0xDC11,0xDE15,0xDE18,0xDE1A,0xDE1F,0xDE16,0xDC4D,0xDE19,0xDC4B, + 0xDFF0,0xDC09,0xDC1B,0xDFE7,0xDFF6,0xDFF4,0xDFB5,0xDC10,0xDFF2,0xDC15, + 0xDFF3,0xDFF8,0xDD39,0xDD3B,0xDD36,0xDC0E,0xDD72,0xDD74,0xDDB9,0xDDB7, + 0xDDB8,0xDE72,0xDE6B,0xDC1D,0xDC37,0xDC22,0xDC43,0xDC4D,0xDC38,0xDC5B, + 0xDC79,0xDC1B,0xDFF3,0xDD91,0xDE7B, + /* plane 6, row 60 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD846,0xD846,0xD846,0xD846, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0x37FA,0xD847,0xD847,0xD847, + 0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0x38F2,0xD849,0xD849,0xD849,0xD84A,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD84A,0xD849,0xD849,0xD849,0xD849, + 1, /* first low-surrogate */ + 0xDE94,0xDC6F,0xDE96,0xDE7F,0xDE8F,0xDE84,0xDE7C,0xDE8E,0xDE90, + 0xDE98,0xDE83,0xDE80,0xDE93,0xDE82, 0,0xDF3D,0xDF41,0xDFA1,0xDF9F, + 0xDC0A,0xDC0D,0xDCC8,0xDCC9,0xDCC7,0xDCCD,0xDD25,0xDEB1,0xDEDC,0xDC80, + 0xDEE5,0xDEF4,0xDEBF,0xDEDB,0xDEEA,0xDEF2, 0,0xDEF1,0xDEED,0xDEE6, + 0xDC02,0xDC82,0xDD25,0xDD18,0xDD1F,0xDD20,0xDDCF,0xDE9D,0xDE99,0xDEA8, + 0xDF68,0xDF66,0xDF67,0xDF91,0xDC13,0xDC15,0xDC1D,0xDC16,0xDC19,0xDC6B, + 0xDC68,0xDC6A,0xDC6D,0xDC69,0xDCAA,0xDD57,0xDD52,0xDD50,0xDD5F,0xDD67, + 0xDD4F, 0,0xDD5B,0xDD5C,0xDD5D,0xDC1F,0xDF9D,0xDFB1,0xDFB0,0xDF94, + 0xDFC3,0xDFAF,0xDFA8,0xDFDC,0xDF98,0xDFC4,0xDFA4,0xDFAB,0xDFAA,0xDFA5, + 0xDC21,0xDFEB,0xDFE6,0xDFF7,0xDFF8, + /* plane 6, row 61 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD849,0xD87E,0xD849,0xD87E,0xD849,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84B,0xD84E,0xD84B,0xD84B,0xD84B,0xD84B,0x3A2F,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AC1, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E, + 0xD859,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C40,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDFFC,0xDFFA,0xDFE0,0xDCAA,0xDFF6,0xDCA9,0xDFE1,0xDDEC,0xDDE2, + 0xDDE4,0xDDF9,0xDC6F,0xDE4C,0xDCBB,0xDCE1,0xDD00,0xDCD8, 0,0xDCD6, + 0xDCE2,0xDCC3,0xDCB3,0xDCD2,0xDCC1,0xDCCE,0xDCD0,0xDCD5,0xDCB9,0xDCBA, + 0xDCCF,0xDCBD,0xDEDB,0xDFAA,0xDFAD,0xDFB8,0xDFB6,0xDFB5,0xDFAF,0xDFB4, + 0xDFB7,0xDFA8,0xDFB9,0xDFBE,0xDC82,0xDCBC,0xDCB8,0xDCB6,0xDCB9, 0, + 0xDD10,0xDE27,0xDE69,0xDE70,0xDE56,0xDE6B,0xDE7A,0xDE6C,0xDE6D,0xDCD5, + 0xDFC1,0xDF8D,0xDF90,0xDDB6,0xDE10,0xDE12,0xDDBA,0xDDBD,0xDE05,0xDDC2, + 0xDE07,0xDDF5,0xDCE9,0xDDAF,0xDDF4,0xDDF7,0xDDF8,0xDE11,0xDCF6,0xDCF5, + 0xDCFB,0xDD01,0xDD00,0xDD02,0xDCFE,0xDCFA,0xDCFD, 0,0xDE37,0xDE49, + 0xDE4B,0xDE46,0xDE47,0xDEB3,0xDEB2, + /* plane 6, row 62 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D3F,0xD84F,0xD84F, + 0xD87E,0xD84F,0x3D46,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD840,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD87E,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3E8F,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDEB0,0xDEB7,0xDF11,0xDFCC,0xDFDF,0xDFD3,0xDFD5,0xDFDB,0xDFC5, + 0xDFC8,0xDFC9,0xDFE2,0xDFCA,0xDFD1,0xDFD2,0xDFDD,0xDE6C,0xDE73,0xDF21, + 0xDEF0,0xDF1F,0xDF3B,0xDF22,0xDF23,0xDEE8,0xDEDD, 0,0xDF1B,0xDEED, + 0xDD0E,0xDEF2, 0,0xDEDC,0xDEE9,0xDF1D,0xDEDA,0xDEE6,0xDF13,0xDF15, + 0xDF16,0xDF3C,0xDF0B,0xDF1C,0xDF3A,0xDF3D,0xDF9A,0xDF1D,0xDF09,0xDF08, + 0xDF3B,0xDD22,0xDD26,0xDD25,0xDD24,0xDF9B,0xDD8F,0xDD90,0xDDE6,0xDDE3, + 0xDDE5,0xDE11,0xDD25,0xDEAE,0xDEBE,0xDEB4,0xDEB3,0xDEAF,0xDE91,0xDEC2, + 0xDEB6,0xDEB2,0xDC57,0xDC3B,0xDC58,0xDC51,0xDC41,0xDC39, 0,0xDC59, + 0xDC45,0xDC61,0xDCE8,0xDDFA,0xDDEA,0xDDEF,0xDDF2,0xDDF0,0xDF08,0xDF70, + 0xDF6A,0xDF73,0xDF68,0xDFC8,0xDFF2, + /* plane 6, row 63 */ + 1 | (94 << 8), /* first, last */ + 0xD842,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0x3FAC,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD856,0xD856,0xD856,0xD855,0xD856,0x4168,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD87E,0xD856,0xD856,0x41AB,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856, + 1, /* first low-surrogate */ + 0xDF7B,0xDCAE,0xDCAB,0xDCB5,0xDCAF,0xDCB2,0xDCB6,0xDCB0,0xDD1E, + 0xDE03,0xDE06,0xDE1F, 0,0xDE0F,0xDE02,0xDE19,0xDE18,0xDE22,0xDE15, + 0xDE07,0xDE0D,0xDE24,0xDE0C,0xDE1E,0xDF89,0xDF8A,0xDC0A,0xDC0B,0xDC07, + 0xDC04,0xDC09,0xDC84,0xDC83,0xDE18,0xDE14,0xDE05,0xDE16,0xDE0E,0xDE11, + 0xDE08,0xDE0B,0xDE15,0xDC85,0xDE37,0xDE2A,0xDE0D,0xDE0F,0xDF7E,0xDF76, + 0xDF77,0xDFEC,0xDCFC,0xDD08,0xDCFF,0xDD03,0xDD10,0xDD05,0xDD06,0xDCFA, + 0xDEC7,0xDEC0,0xDEC3,0xDEA7,0xDEA8,0xDEAB,0xDEC1,0xDEAA,0xDEC8,0xDF43, + 0xDC02,0xDC0E,0xDC01,0xDFFE,0xDC03, 0,0xDC22,0xDC21,0xDC07,0xDC08, + 0xDC0C,0xDDCA,0xDDBC,0xDDBE,0xDDBD,0xDD5C,0xDDBB,0xDDB9, 0,0xDDC5, + 0xDE99,0xDF6B,0xDF93,0xDF94,0xDFA9, + /* plane 6, row 64 */ + 1 | (94 << 8), /* first, last */ + 0xD856,0xD856,0xD87E,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857, + 0xD857,0xD857,0x4291,0xD857,0xD857,0xD857,0xD857,0xD848,0xD857,0xD857, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0x7FE4,0xD859,0xD859,0xD859, + 0xD859,0xD87E,0xD859,0xD859,0x8088,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD85A,0xD859,0xD859,0xD859,0xD859,0xD859,0x4430, + 0xD859,0xD859,0xD842,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDFA0,0xDFA6,0xDD61,0xDFAB,0xDF9E,0xDF9B,0xDF91,0xDF99,0xDEB6, + 0xDEB8,0xDE9A, 0,0xDE98,0xDE9B,0xDEB3,0xDEA2,0xDEAA,0xDEA0,0xDE9F, + 0xDC5B,0xDC70,0xDC54,0xDC71,0xDC65,0xDC51,0xDC9D,0xDC61,0xDC5A,0xDC74, + 0xDC4C,0xDC4B,0xDC5E,0xDC58,0xDC53,0xDC52,0xDE3B,0xDE39,0xDED6,0xDEE7, + 0xDED7,0xDED8,0xDED9,0xDEDA,0xDEDB,0xDEDC,0xDEE0,0xDEE4,0xDEDD,0xDEF5, + 0xDEF1,0xDF98,0xDF9D,0xDF99,0xDC50,0xDC49, 0,0xDC62,0xDCD7,0xDD01, + 0xDCF7,0xDD7D,0xDD8C,0xDD9C, 0,0xDE1F,0xDE1E,0xDF3D,0xDF3F,0xDF11, + 0xDF59,0xDF3E,0xDF58,0xDC00,0xDF9E,0xDFB6,0xDFAA,0xDFAF,0xDFAC, 0, + 0xDFC0,0xDFA9,0xDF10,0xDCEE,0xDD77,0xDD79,0xDD7A,0xDD7D,0xDD7F,0xDD83, + 0xDD78,0xDD7E,0xDDE4,0xDDE6,0xDDE5, + /* plane 6, row 65 */ + 1 | (94 << 8), /* first, last */ + 0x445D,0xD85A,0xD85A,0x4475,0xD87E,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD87E,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x44FF,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x450B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0x45C8,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 2, /* first low-surrogate */ + 0xDE4E,0xDE59, 0,0xDD8E,0xDE4F,0xDE4A,0xDEE3,0xDEDE, + 0xDEE2,0xDC74,0xDCAC,0xDC61,0xDC62,0xDC76,0xDC7A,0xDC79,0xDC60,0xDD64, + 0xDE81,0xDDDF,0xDD84,0xDD8A,0xDD92,0xDD79,0xDDDE,0xDD98,0xDD6C,0xDDE1, + 0xDDA5,0xDD7C,0xDD72,0xDD81,0xDDE0,0xDD65, 0,0xDD6A,0xDD97,0xDDAA, + 0xDDD3,0xDDAB,0xDD6E,0xDDAC,0xDD76,0xDD7B,0xDDAD,0xDDA6,0xDD94,0xDDD7, + 0xDD70,0xDDD5,0xDDF1,0xDD7A,0xDD68,0xDD96, 0,0xDD73,0xDDAE,0xDDDD, + 0xDDDA,0xDDAF,0xDDB0,0xDDDB,0xDD62,0xDDF8,0xDDC2,0xDDC7,0xDDC8,0xDDC5, + 0xDDC3,0xDDC6,0xDEDE, 0,0xDF11,0xDF15,0xDF28,0xDF21,0xDF2D,0xDF51, + 0xDF2B,0xDF16,0xDF24,0xDF35,0xDF1F,0xDF12,0xDF10,0xDF80,0xDF3B,0xDF29, + 0xDF2A,0xDF1B,0xDF18,0xDF20,0xDF3F, + /* plane 6, row 66 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD87E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD846,0xD85F,0xD85F,0x4774,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47AC,0xD85F,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDF1C,0xDF26,0xDF0B,0xDDBE,0xDDC4,0xDDBD,0xDDFA,0xDDFB,0xDEB1, + 0xDEB2,0xDEB0,0xDEB9,0xDEA6,0xDEBD,0xDEB6,0xDEB8,0xDEB4,0xDEB3,0xDEA7, + 0xDEAE,0xDEBC,0xDFF2,0xDFF3,0xDFF4,0xDC3B,0xDC40,0xDC46,0xDCF0,0xDCEE, + 0xDCE8,0xDCF1,0xDCEB,0xDCEF,0xDDFC,0xDE20,0xDE09,0xDE06,0xDE03,0xDDCF, + 0xDE19,0xDE24,0xDE1B,0xDE1D,0xDDFD,0xDE1E,0xDDF4,0xDE01,0xDE08,0xDE05, + 0xDE23,0xDDFF,0xDFEA,0xDC4D,0xDC4E,0xDC56,0xDC57,0xDC51,0xDC55,0xDC54, + 0xDCCB,0xDCD4,0xDCD1,0xDCCF,0xDCD2,0xDCCA,0xDCD6,0xDD8B,0xDD88,0xDD85, + 0xDD89,0xDE9B,0xDDBB,0xDD8C, 0,0xDD99,0xDD8A,0xDEEC,0xDEEF,0xDEF9, + 0xDF09,0xDEF8,0xDEF3,0xDF00,0xDF1D, 0,0xDEFD,0xDC48,0xDC5C,0xDC55, + 0xDC5E,0xDC49,0xDC63,0xDC60,0xDC53, + /* plane 6, row 67 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD87E,0xD862,0xD862, + 0xD862,0xD87E,0xD862,0xD862,0xD863,0xD863,0xD87E,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD87E,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864, + 0xD864,0x4A16,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDC62,0xDC40,0xDE49,0xDE4A,0xDE4C,0xDE4D,0xDF0A,0xDF06,0xDF2F, + 0xDF21,0xDF07,0xDF09,0xDF02,0xDF16,0xDF03,0xDF0B,0xDF0F,0xDD60,0xDD68, + 0xDD5E,0xDD5D,0xDD63,0xDD5F,0xDD64,0xDD78,0xDD61,0xDD69,0xDD65,0xDEDA, + 0xDEE6,0xDEDB,0xDEDC,0xDF39,0xDF57,0xDF55,0xDF65,0xDF61,0xDF54,0xDC45, + 0xDC41,0xDC3E,0xDC37,0xDD12,0xDD13,0xDD2C,0xDD96,0xDDE9,0xDD9C,0xDD9D, + 0xDD85,0xDDE8,0xDD9F,0xDDA3,0xDC82,0xDC83,0xDDEE,0xDD1D,0xDD14,0xDD1F, + 0xDD20,0xDE47,0xDE80,0xDEC9,0xDEF9,0xDF06,0xDEF0,0xDEF8,0xDEEF,0xDEFD, + 0xDEF1,0xDEFE,0xDFB8,0xDFC0,0xDFC3,0xDFB5,0xDFB6,0xDFC9,0xDDF3,0xDFBD, + 0xDFBA,0xDFBF,0xDFB3,0xDFC6,0xDFB2,0xDFBC,0xDFB7,0xDFB9,0xDFC8,0xDCB5, + 0xDCB3, 0,0xDCAC,0xDCA9,0xDCAD, + /* plane 6, row 68 */ + 1 | (90 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD87E,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD87E,0xD865,0xD865,0xD865, + 0xD865,0xD865,0x4B3B,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD87E,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0x4BEF,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD869,0xD869,0xD869,0xD869, + 0xD845, + 1, /* first low-surrogate */ + 0xDE11,0xDE0D,0xDE16,0xDE89,0xDE7C,0xDE8B,0xDE7B,0xDE88,0xDE84, + 0xDF9D,0xDF98,0xDC88,0xDC86,0xDC82,0xDC8B,0xDDFF,0xDC71,0xDC72,0xDC81, + 0xDC8C,0xDC80,0xDC89,0xDDBB,0xDDC1,0xDDBE,0xDE01,0xDDBD,0xDEC1,0xDEB4, + 0xDEB7,0xDEC8, 0,0xDED3,0xDED0,0xDEB0,0xDECA,0xDECD,0xDC15,0xDC19, + 0xDC17,0xDC3F,0xDC40,0xDC44,0xDC7C,0xDC78,0xDC79,0xDC88,0xDE06,0xDC89, + 0xDC7D,0xDE23,0xDE24,0xDE26,0xDE22,0xDE27,0xDE1F,0xDEC9,0xDEC3,0xDF0A, + 0xDF0B,0xDF04, 0,0xDF03,0xDF01,0xDF09,0xDC0F,0xDC2E,0xDC2D,0xDC91, + 0xDC99,0xDC9E,0xDC90,0xDC94,0xDC9D,0xDC98,0xDC9B,0xDC9C,0xDC9A,0xDD54, + 0xDF9D,0xDF9F,0xDFA3,0xDFA4,0xDFA5,0xDF02,0xDC17,0xDC1B,0xDC19,0xDCD1, + 0xDD37, + /* plane 6, row 69: --- */ + /* plane 6, row 70: --- */ + /* plane 6, row 71: --- */ + /* plane 6, row 72: --- */ + /* plane 6, row 73: --- */ + /* plane 6, row 74: --- */ + /* plane 6, row 75: --- */ + /* plane 6, row 76: --- */ + /* plane 6, row 77: --- */ + /* plane 6, row 78: --- */ + /* plane 6, row 79: --- */ + /* plane 6, row 80: --- */ + /* plane 6, row 81: --- */ + /* plane 6, row 82: --- */ + /* plane 6, row 83: --- */ + /* plane 6, row 84: --- */ + /* plane 6, row 85: --- */ + /* plane 6, row 86: --- */ + /* plane 6, row 87: --- */ + /* plane 6, row 88: --- */ + /* plane 6, row 89: --- */ + /* plane 6, row 90: --- */ + /* plane 6, row 91: --- */ + /* plane 6, row 92: --- */ + /* plane 6, row 93: --- */ + /* plane 6, row 94: --- */ + /* plane 7, row 1 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD840,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0x35F6,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD87E,0xD843,0xD843,0x5655,0xD844,0xD844, + 0xD844,0xD845,0xD845,0xD845,0x3667,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD841,0xD845,0xD845,0xD845,0xD845,0xD845,0xD87E,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845, + 1, /* first low-surrogate */ + 0xDC55,0xDD82,0xDD89,0xDD87,0xDFBE,0xDFBD,0xDFCA,0xDFD4,0xDFBC, + 0xDFC4,0xDFC1,0xDFC2,0xDFD7,0xDF70,0xDFBA,0xDFE3,0xDFBB,0xDCB1,0xDCB6, + 0xDCB0,0xDD6C,0xDE0D,0xDE07,0xDFF1,0xDFF5,0xDFED,0xDFEF,0xDFEB,0xDFEC, + 0xDFEE,0xDC07,0xDDC4,0xDE08,0xDEB3,0xDEAD,0xDEB0,0xDF11,0xDD8A,0xDF83, + 0xDF7A,0xDF82,0xDF68,0xDF71,0xDFB0,0xDFAF, 0,0xDF6C,0xDF6F,0xDF62, + 0xDF65,0xDF81,0xDF7F,0xDF64,0xDF73,0xDF6E,0xDF67,0xDF74,0xDF7D,0xDF78, + 0xDF85,0xDFAA,0xDF88,0xDFA6,0xDC4E,0xDF8A,0xDF84, 0,0xDE24,0xDE22, + 0xDE23,0xDC32,0xDC5B,0xDC4F, 0,0xDC26,0xDC3E,0xDC42,0xDC47,0xDC22, + 0xDE9B,0xDC4A,0xDC1F,0xDC49,0xDC2B,0xDC33,0xDC58,0xDC2A,0xDC28,0xDD3D, + 0xDD3C,0xDDBF,0xDE79,0xDE80,0xDE7C, + /* plane 7, row 2 */ + 1 | (94 << 8), /* first, last */ + 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD841,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD849,0xD849,0xD84F,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0x617F,0xD849,0xD84A,0xD849,0xD849,0xD84A,0xD849,0xD84A,0xD84A, + 0xD84A,0xD87E,0x3992,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDE7A,0xDE78,0xDC82,0xDC5C,0xDC5A,0xDC4B,0xDC7C,0xDC7F,0xDC1F, + 0xDC89,0xDC8B,0xDC57,0xDC7E,0xDC7D,0xDC53,0xDE9F,0xDEBC,0xDEA5,0xDE86, + 0xDEDC,0xDEA4,0xDEB6,0xDEA2,0xDEB4,0xDF48,0xDF46,0xDFA7,0xDC14,0xDC12, + 0xDC11,0xDCE1,0xDCD0,0xDD26,0xDD28,0xDD29,0xDF2F,0xDF0D,0xDF25,0xDF14, + 0xDF3C,0xDF0B,0xDF11,0xDF30,0xDF18,0xDF19,0xDF36,0xDF17,0xDF10,0xDF15, + 0xDC03,0xDC29,0xDC4C,0xDD3F,0xDD3E,0xDD34,0xDD42,0xDD35,0xDFF3,0xDDCD, + 0xDDD1,0xDDD2,0xDEAD,0xDEBA,0xDEC1,0xDEBB,0xDEB4,0xDEBC,0xDF6C,0xDF92, + 0xDC21,0xDC24,0xDF19,0xDCAD,0xDCAE,0xDCAB,0xDCAC,0xDD70,0xDD76,0xDD71, + 0xDD77, 0,0xDFEC,0xDC1C,0xDFFB,0xDFEE,0xDCE2,0xDFFD,0xDC1E,0xDC3B, + 0xDC4A,0xDCAE, 0,0xDC7D,0xDC56, + /* plane 7, row 3 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84B,0xD87E,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0x3A45,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BC9, + 0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD87E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDC44,0xDC4B,0xDDFA,0xDDE8,0xDDF8,0xDDFF,0xDDF7,0xDDF6,0xDDFE, + 0xDE07,0xDE5D,0xDCD4,0xDCC3,0xDCC8,0xDCC5,0xDCC0,0xDCC9,0xDD4D,0xDD20, + 0xDD36,0xDD35,0xDD88,0xDD25,0xDD21,0xDD26, 0,0xDD3F,0xDD3B,0xDD24, + 0xDD43,0xDD4E,0xDD4F,0xDD44,0xDD40,0xDD41,0xDD39,0xDD2B,0xDEDD,0xDEDE, + 0xDFCD,0xDFCB,0xDFDB,0xDFD8,0xDFD9,0xDFD2,0xDFCA,0xDFD1,0xDFD4,0xDFF9, + 0xDFD0,0xDC5E,0xDC5D,0xDC8A,0xDD14,0xDE83,0xDE84,0xDE9B,0xDE82,0xDE7D, + 0xDE7C,0xDE99,0xDE7E,0xDE9A,0xDE95,0xDE7B,0xDE86,0xDF48,0xDF92,0xDDB2, + 0xDE42,0xDE72,0xDE15,0xDE30,0xDE43,0xDE5B,0xDE1D,0xDE73,0xDE2D, 0, + 0xDE21,0xDE1C,0xDCEA,0xDE29,0xDE1E,0xDE33,0xDD10,0xDD0E,0xDCF1,0xDD0D, + 0xDD11,0xDD12,0xDD17,0xDD09,0xDD0F, + /* plane 7, row 4 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D55,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851, + 1, /* first low-surrogate */ + 0xDD98,0xDD94,0xDD96,0xDD99,0xDD95,0xDD97,0xDE50,0xDE52,0xDE4D, + 0xDE57,0xDE53,0xDE56,0xDEB8,0xDF12,0xDFF1,0xDFF0,0xDFEE,0xDFEF,0xDFE5, + 0xDFEB,0xDFE7,0xDFF2,0xDFE6,0xDFF7,0xDC09,0xDC6B,0xDC6A,0xDE79,0xDECD, + 0xDEEF,0xDEE4,0xDEE3,0xDF6C,0xDF67,0xDF62,0xDF58,0xDF69,0xDFAB,0xDF57, + 0xDFAD,0xDF54,0xDFAE,0xDF76,0xDF49,0xDF45,0xDF4F,0xDD0F,0xDF50,0xDF7D, + 0xDF44,0xDF66,0xDF48,0xDFA3,0xDF51,0xDF53,0xDD10,0xDF60,0xDF47,0xDF5E, + 0xDF85,0xDFAC,0xDF6D,0xDF75,0xDFA8, 0,0xDF43,0xDF4E,0xDF5C,0xDF56, + 0xDF6E,0xDF63,0xDF6A,0xDF56,0xDF12,0xDF5C,0xDF58,0xDF55,0xDF7E,0xDFA8, + 0xDF11,0xDF59,0xDF5A,0xDF67,0xDF54,0xDF5B,0xDFF0,0xDD29,0xDD2C,0xDD2A, + 0xDD27,0xDD67,0xDD68,0xDD93,0xDD95, + /* plane 7, row 5 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0x3EE8,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD842,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0x3FB6,0xD853,0xD853,0xD853, + 0x3FBD,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD84A,0xD854,0xD858,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD87E,0xD855,0xD855,0xD855, + 1, /* first low-surrogate */ + 0xDD9A,0xDDEE,0xDDF1,0xDDED,0xDDE9,0xDECB,0xDEDF,0xDEDB,0xDC3C, + 0xDC4E,0xDC6C,0xDC7B,0xDC7C,0xDC83,0xDC6B,0xDC66,0xDC63,0xDCA0,0xDC85, + 0xDC68,0xDCA2,0xDDEC, 0,0xDDE7,0xDE10,0xDE18,0xDE3A,0xDE1A,0xDE38, + 0xDE41,0xDE1B,0xDE14,0xDE1C,0xDE1D,0xDF12,0xDF0D,0xDF07,0xDF7E,0xDF7F, + 0xDEB9,0xDF80,0xDF7A,0xDFF3,0xDCB9,0xDCBB,0xDCBA,0xDCBD,0xDCB7,0xDCBF, + 0xDD21,0xDE3A,0xDE3D,0xDE36,0xDE49,0xDE81, 0,0xDE3F,0xDE4D,0xDE3E, + 0,0xDE30,0xDE4F,0xDF37,0xDF98,0xDF99,0xDC11,0xDC0D,0xDC88,0xDC8A, + 0xDE1C,0xDE55,0xDE56,0xDE62,0xDE57,0xDE42,0xDE10,0xDE4D,0xDE5A,0xDE66, + 0xDE46,0xDC7E,0xDE4F,0xDEF9,0xDF87,0xDF84,0xDFF4,0xDFF5,0xDFF2,0xDFF7, + 0xDD45,0xDD50,0xDD49,0xDD35,0xDCFD, + /* plane 7, row 6 */ + 1 | (94 << 8), /* first, last */ + 0xD855,0xD855,0xD855,0x40D6,0xD855,0xD855,0xD87E,0xD855,0xD85C, + 0xD855,0xD843,0xD855,0xD840,0xD856,0xD856,0xD856,0xD856,0x4171,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD87E,0xD856, + 0xD87E,0xD856,0xD856,0xD857,0xD856,0xD856,0xD856,0xD856,0xD857,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD87E,0xD856,0xD856,0xD856,0xD856, + 0xD857,0xD856,0xD857,0xD857,0xD857,0x4298,0xD857,0xD857,0xD857,0xD857, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD87E,0xD87E,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD840, + 0xD858,0xD858,0xD858,0xD859,0xD859, + 1, /* first low-surrogate */ + 0xDD30,0xDD43,0xDD46, 0,0xDD33,0xDEC6,0xDD56,0xDED4,0xDDD8, + 0xDEE0,0xDFA7,0xDF44,0xDF98,0xDC54,0xDC3E,0xDC35,0xDC3A, 0,0xDC34, + 0xDC39,0xDC46,0xDC5A,0xDC5B,0xDC3C,0xDDDC,0xDDD6,0xDDD0,0xDD5E,0xDEAC, + 0xDD5D,0xDEA5,0xDFF4,0xDC24,0xDFE0,0xDFFD,0xDFF2,0xDFFC,0xDC02,0xDFF1, + 0xDFFF,0xDFD2,0xDFD8,0xDFD3,0xDFF9,0xDD63,0xDFED,0xDFF7,0xDFF0,0xDFD7, + 0xDC09,0xDFF5,0xDEC2,0xDEC5,0xDECF, 0,0xDEC1,0xDEC6,0xDED4,0xDECE, + 0xDC9B,0xDC99,0xDC8F,0xDCB7,0xDC82,0xDC93,0xDCB4,0xDCC1,0xDC90,0xDC9A, + 0xDC94,0xDC9C,0xDCB5,0xDD6F,0xDD6E,0xDC9F,0xDC8E,0xDC9E,0xDE3C,0xDE47, + 0xDE41,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDEDF,0xDEF2,0xDF0D,0xDF0E,0xDD86, + 0xDFA9,0xDFA4,0xDFA5,0xDC5F,0xDC5A, + /* plane 7, row 7 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD87E,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD856,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDC66,0xDC68,0xDC6A,0xDC64,0xDC65,0xDCC1,0xDCD8,0xDD7B,0xDCD9, + 0xDD09,0xDDAA,0xDDA3,0xDDB9,0xDDE2,0xDDA5,0xDDAB,0xDE20,0xDF89,0xDF8B, + 0xDFDB,0xDFE4,0xDFEF,0xDFE2,0xDFE9,0xDFF0,0xDFF3,0xDFDD,0xDC1E,0xDD1D, + 0xDD46,0xDD7C,0xDD80,0xDD81,0xDD82,0xDD87,0xDD88,0xDD8A,0xDD8C,0xDDE7, + 0xDDEB,0xDDEA,0xDE68,0xDE6B,0xDE69,0xDE66,0xDE6A,0xDE65,0xDEE5,0xDEE4, + 0xDEE6,0xDD18,0xDE24,0xDE48,0xDE2F,0xDE7E,0xDD89,0xDE1E,0xDE49,0xDE26, + 0xDE09,0xDE34,0xDE2D,0xDE4A,0xDE15,0xDDA9,0xDE33,0xDE28,0xDE27,0xDE20, + 0xDE2B,0xDE29,0xDE6A,0xDE0B,0xDE0E,0xDE1C,0xDDFF,0xDDAA,0xDE35,0xDE11, + 0xDE4B,0xDE4C,0xDE1F,0xDE0F,0xDE39,0xDE68,0xDE1D,0xDE08,0xDE0C,0xDE0D, + 0xDE62,0xDEAF,0xDE32,0xDE2C,0xDE64, + /* plane 7, row 8 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0x45CD,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46F6, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 1, /* first low-surrogate */ + 0xDE04,0xDE16,0xDE4D,0xDE07,0xDEAE,0xDDD4,0xDDD1,0xDDD5,0xDDD0, + 0xDF71,0xDF5D,0xDF5B,0xDF7A,0xDDBD,0xDF7F,0xDF79,0xDF67,0xDF9E,0xDF94, + 0xDF64,0xDF5E,0xDF81,0xDF5A,0xDF57,0xDF7C,0xDF98,0xDF66,0xDF7E,0xDF82, + 0xDF68,0xDF5F,0xDF63,0xDF97, 0,0xDF53,0xDF7B,0xDF7D,0xDF78,0xDC06, + 0xDDC0,0xDDC2,0xDDC3,0xDEDC,0xDEE6,0xDEEC,0xDEF2,0xDEE8,0xDEEB,0xDEEA, + 0xDEE5,0xDEE0,0xDED0,0xDED8,0xDED5,0xDED3,0xDEE4,0xDEF3,0xDEDB,0xDF2F, + 0xDFF9,0xDC5D,0xDC5B,0xDC4C,0xDC58,0xDC60,0xDC53,0xDC50,0xDD07,0xDD08, + 0xDCF4,0xDCF6,0xDD04,0xDCFD,0xDD05,0xDE28,0xDE56,0xDE42,0xDE5C,0xDE3D, + 0xDE2F,0xDE2B,0xDE58,0xDE61,0xDE2C,0xDE51,0xDE50,0xDE3C,0xDE36, 0, + 0xDE60,0xDE5B,0xDE2E,0xDE40,0xDE5F, + /* plane 7, row 9 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0x477A,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47B8, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD87E,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0x4801,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861, + 1, /* first low-surrogate */ + 0xDE26,0xDE2D,0xDE5E,0xDE3B,0xDFEF,0xDFF3,0xDFEE,0xDFED,0xDC5A, + 0xDC62,0xDC5B,0xDC5F,0xDC5E,0xDC64,0xDCE0,0xDCE1,0xDCE5,0xDDA5,0xDD9B, + 0xDD9F,0xDD9C, 0,0xDDAA,0xDDA4,0xDDA3,0xDE67,0xDF26,0xDF1A, 0, + 0xDF1C,0xDF15,0xDF1B,0xDF18,0xDF1E,0xDF25,0xDDDC,0xDC7B,0xDC75,0xDC93, + 0xDC8F,0xDC7C,0xDC9B,0xDC88,0xDC91,0xDC7E, 0,0xDC86,0xDE5B,0xDE54, + 0xDF35,0xDF40,0xDF37,0xDF29,0xDF26,0xDF23,0xDF30,0xDF20,0xDF28,0xDF32, + 0xDF2A,0xDF31,0xDF24,0xDF41,0xDF42,0xDF43,0xDF25,0xDF38,0xDC1C,0xDC1D, + 0xDC1E,0xDCF6,0xDDA5,0xDD89,0xDD9D,0xDD8A,0xDD87,0xDDAB,0xDD86,0xDD9E, + 0xDD93,0xDDA1,0xDD88,0xDDA3,0xDD9F,0xDDA0,0xDEFF,0xDF00,0xDF02,0xDEF8, + 0xDEF7,0xDF01,0xDF87,0xDF89,0xDF76, + /* plane 7, row 10 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0x492F,0xD862,0xD862,0xD862,0xD862,0xD862, + 0x4931,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x499C,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0x49E6,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD850,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDF6E,0xDF77,0xDF82,0xDF85,0xDF83,0xDF84,0xDC57,0xDC4B,0xDC56, + 0xDC5D,0xDC60,0xDC4D,0xDC55,0xDC54,0xDC53,0xDC50,0xDC63,0xDC62,0xDD17, + 0xDD16,0xDD2D,0xDDD9,0xDDBF, 0,0xDDB2,0xDDAC,0xDDB0,0xDDCF,0xDDB8, + 0,0xDDD3,0xDDB1,0xDDAF,0xDDCE,0xDDB4,0xDDB7,0xDDD5, 0,0xDD38, + 0xDD28,0xDD3F,0xDD40,0xDD41,0xDD33,0xDD2B,0xDD2E,0xDF11,0xDF18,0xDF17, + 0xDF19,0xDF16, 0,0xDF0D,0xDF26,0xDF79,0xDFD8,0xDFF3,0xDFD7,0xDFCC, + 0xDFCF,0xDFCB,0xDFD1,0xDFCE,0xDFD4,0xDFD5,0xDFD3,0xDFD6,0xDFCD,0xDFDA, + 0xDFD2,0xDFDE,0xDCCC,0xDCB8,0xDCB7,0xDCC2,0xDCC3,0xDDFA,0xDDF9,0xDE1F, + 0xDE1D,0xDF82,0xDEA6,0xDE90,0xDE9E,0xDE98,0xDE93,0xDE92,0xDEA5,0xDE95, + 0xDFA9,0xDFA8,0xDFAA,0xDFAB,0xDFAC, + /* plane 7, row 11 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0x4B38,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD87E,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0x4C3A,0xD867,0xD867,0x4CB1,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD868, + 1, /* first low-surrogate */ + 0xDC1F,0xDC22,0xDCAA,0xDC96,0xDC91,0xDCAB,0xDCA2,0xDCA4,0xDC9D, + 0xDC97,0xDC7D,0xDC9F,0xDC9C,0xDC99,0xDCA6,0xDC92,0xDCA7,0xDDC9,0xDDC8, + 0xDDC7,0xDDCB,0xDE74,0xDEC9, 0,0xDED2,0xDEDB,0xDEEB,0xDEE9,0xDEEF, + 0xDEEE,0xDEF9,0xDEDE,0xDC16,0xDC45,0xDC7F,0xDC98,0xDC9F,0xDC86,0xDC90, + 0xDC9A,0xDC9D,0xDC8D,0xDC9C,0xDCA0,0xDCA7,0xDC8F,0xDE41,0xDE35,0xDE37, + 0xDE30,0xDE3A,0xDE36,0xDE08,0xDECA,0xDF12,0xDF15,0xDF22,0xDF13,0xDF18, + 0xDF21,0xDC10,0xDC20,0xDC2F,0xDCA5,0xDCA3,0xDCB6,0xDCAB,0xDD68,0xDD67, + 0xDD6F,0xDD77,0xDD64,0xDD78, 0,0xDD76,0xDD6E, 0,0xDFD0,0xDFB3, + 0xDFCB,0xDFD6,0xDFB1,0xDFB4,0xDFD7,0xDFC6,0xDFBA,0xDFD1,0xDFD2,0xDFB5, + 0xDFC4,0xDFCC,0xDFBB,0xDFB2,0xDE5B, + /* plane 7, row 12 */ + 1 | (94 << 8), /* first, last */ + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4D47,0xD868,0x4D51, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xffff,0xD853,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD864,0xD841,0xD841,0xD841, + 0xD842,0xD841,0xD841,0xD842,0xD842,0xD841,0xD841,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD85E,0xD843,0xD843,0xD843,0xD861,0xD843, + 0xD843,0xD844,0xD844,0xD843,0xD843,0xD843,0xD844,0xD84A,0xD843,0xD87E, + 0xD843,0xD843,0xD843,0xD844,0xD843,0xD843,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD850,0xD845,0xD845,0xD846, + 1, /* first low-surrogate */ + 0xDE5A,0xDE59,0xDE99,0xDE94,0xDE96,0xDE93,0xDE91,0xDE8F,0xDE98, + 0xDF0C,0xDF0A,0xDF0E,0xDF12,0xDF11,0xDF0B,0xDF9A, 0,0xDFB4, 0, + 0xDC1C,0xDC20,0xDC21,0xDCD3,0xDCD2,0xDD38, 0,0xDCCF,0xDD1D,0xDD92, + 0xDD8F,0xDD8C,0xDFEA,0xDCB9,0xDD6E,0xDDA0,0xDDDD,0xDE12,0xDE17,0xDE6D, + 0xDC05,0xDFFB,0xDFFD,0xDC06,0xDC00,0xDFFF,0xDFFE,0xDCB6,0xDD05,0xDD07, + 0xDEBC,0xDEBB,0xDF8B,0xDF87,0xDFFB,0xDFE7,0xDFE6,0xDFE2,0xDDD3,0xDFD9, + 0xDFCA,0xDC12,0xDC10,0xDFDC,0xDFD0,0xDF8B,0xDC13,0xDE10,0xDFDA,0xDC4F, + 0xDFFD,0xDFE5,0xDFCC,0xDC39,0xDFC7,0xDFD8,0xDC60,0xDC64,0xDC86,0xDC5E, + 0xDC66,0xDC5F,0xDC77,0xDC82,0xDC96,0xDD3E,0xDD79,0xDD7A,0xDE88,0xDE89, + 0xDE8C,0xDFE0,0xDE7B,0xDE86,0xDC94, + /* plane 7, row 13 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0x3747,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0x3817,0xD847,0xD849,0xD848,0xD848,0xD848, + 0xD848,0xD87E,0xD848,0xD87E,0xD848,0xD848,0xD848,0xD848,0xD848,0x38A3, + 0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD84C,0xD87E,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD87E,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDC97,0xDCB7,0xDCB5,0xDCB8,0xDC93,0xDCB2,0xDCB4,0xDC99,0xDCC3, + 0xDC9D,0xDC9B,0xDCA3, 0,0xDD9F,0xDD9E,0xDDA3,0xDDA0,0xDDA1,0xDEC5, + 0xDEC6,0xDEBE,0xDEC4,0xDEBF,0xDF4C,0xDF4A,0xDFB1,0xDC15,0xDC17,0xDC10, + 0xDC18,0xDCE0,0xDCDF,0xDD27,0xDF43,0xDF48,0xDF1D,0xDF50,0xDF58,0xDF47, + 0xDF54,0xDF53,0xDF40,0xDF55, 0,0xDF5A,0xDC70,0xDD5B,0xDD4D,0xDD56, + 0xDD4F,0xDC87,0xDD59,0xDC88,0xDD54,0xDD53,0xDD50,0xDEB3,0xDF6E, 0, + 0xDF6F,0xDF93,0xDC29,0xDC25,0xDC28,0xDC6F,0xDEB8,0xDC97,0xDCB3,0xDD79, + 0xDD7E,0xDD7C,0xDD83,0xDCAC,0xDC00,0xDC34,0xDC65,0xDC36,0xDCA7,0xDC59, + 0xDC58,0xDC31,0xDC62,0xDC38,0xDC73,0xDC3E,0xDC55,0xDC54,0xDC95,0xDCAD, + 0xDCA5,0xDC94,0xDC9A,0xDC9B,0xDC99, + /* plane 7, row 14 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B1E,0xD84C, + 0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDC9F,0xDC53,0xDE12,0xDE0A,0xDE09,0xDE0C,0xDE0B,0xDE0E,0xDE0D, + 0xDE08,0xDD38,0xDD3A,0xDD37,0xDD3D,0xDD2D,0xDD82,0xDD95,0xDD87,0xDD9D, + 0xDDB5,0xDD81,0xDDC7,0xDD9B,0xDD98,0xDD94,0xDD86,0xDD90,0xDD34,0xDD8E, + 0xDD85,0xDDA6,0xDD96,0xDFEA,0xDFDF,0xDEBD,0xDFF7,0xDFEB,0xDFE0,0xDFE8, + 0xDFE1,0xDFE9,0xDFEE,0xDFE5,0xDFEC,0xDC63,0xDCC6,0xDCC2,0xDCC1,0xDCC0, + 0xDCC3,0xDD18,0xDEAE,0xDEA3,0xDEC5,0xDEA0,0xDEB4,0xDEA5, 0,0xDEA4, + 0xDEA8,0xDEA6,0xDEA8,0xDE8D,0xDE82,0xDE9E,0xDE89,0xDE83,0xDE91,0xDEA6, + 0xDE9A,0xDE90,0xDE85,0xDE7D,0xDCEC,0xDE9B,0xDEA5,0xDEF0,0xDE96,0xDE88, + 0xDED6,0xDED8,0xDE86,0xDEA4,0xDE97,0xDD1C,0xDD19,0xDD9E,0xDD9F,0xDD9D, + 0xDD9C,0xDE5D,0xDE5E,0xDE73,0xDE63, + /* plane 7, row 15 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84F,0xD84E,0xD84F,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD850,0xD84F,0xD84F,0xD87E,0xD84F,0xD850,0xD850,0xD84F,0xD84F, + 0xD850,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0x71D7,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD852,0xD852,0x3E9A,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDEBE,0xDEC1,0xDEBC,0xDEBF,0xDEBB,0xDEBD,0xDF13,0xDF14,0xDFF8, + 0xDFFA,0xDC06,0xDFFE,0xDC51,0xDC0B,0xDFF1,0xDFA9,0xDFD5,0xDFDC,0xDFCB, + 0xDFF2,0xDC5F,0xDFDB,0xDFD6,0xDFD9,0xDFD1,0xDFCF,0xDFD8,0xDFE0,0xDFD4, + 0xDFF3,0xDC05,0xDFCE,0xDFF4,0xDD12,0xDFDA,0xDC0E,0xDC06,0xDFD7,0xDFCD, + 0xDC07,0xDFE1,0xDC08,0xDFBE,0xDFEF,0xDFD9,0xDFDA, 0,0xDFA0,0xDFDF, + 0xDF9E,0xDFBF,0xDFAF,0xDFA7,0xDFAA,0xDFF4,0xDFAE,0xDFB5,0xDFB8,0xDFDB, + 0xDFC0,0xDFB7,0xDFA2,0xDFDD,0xDFA1,0xDFA5,0xDFB4,0xDFA6,0xDFAB,0xDFAC, + 0xDF9F,0xDFB1,0xDFFC,0xDD2E,0xDD30,0xDD99,0xDDF8,0xDDF6,0xDEF4,0xDEEB, + 0xDEE1,0xDEE4,0xDC75,0xDC69, 0,0xDC99,0xDC9E,0xDC94,0xDC93,0xDC91, + 0xDE19,0xDE17,0xDE49,0xDE47,0xDE48, + /* plane 7, row 16 */ + 1 | (94 << 8), /* first, last */ + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD853,0xD847,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0x3FC2,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD87E,0xD854,0xD854,0xD854,0xD854,0xD854,0xD84A,0xD854, + 0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0x40DC,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD87E,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x41B3, + 0xD856,0xD856,0xD856,0xD87E,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857, + 1, /* first low-surrogate */ + 0xDE52,0xDE40,0xDE63,0xDE46,0xDE5F,0xDF0E,0xDF85,0xDF87,0xDFCB, + 0xDFCC,0xDFC9,0xDCCB,0xDCE7,0xDD20,0xDE5F,0xDE60,0xDE6A,0xDE76,0xDE73, + 0xDE71,0xDE66, 0,0xDE6B,0xDE79,0xDE7B,0xDF3C,0xDF9E,0xDF9C,0xDC1C, + 0xDC1E,0xDC21,0xDC96,0xDCA1,0xDCB6,0xDCA0,0xDC94,0xDC97,0xDE81,0xDE86, + 0xDEC0,0xDE8A,0xDD4B,0xDE85,0xDE95,0xDE49,0xDE82,0xDE84,0xDC78,0xDE90, + 0xDEB1,0xDFFE,0xDFFB,0xDD50,0xDD56,0xDD5A,0xDD4C, 0,0xDD57,0xDEE1, + 0xDED9,0xDEDB,0xDEF4,0xDF45,0xDF47,0xDC74,0xDC6B,0xDC68,0xDC69,0xDC79, + 0xDD5B,0xDC80,0xDC81,0xDC61,0xDC70,0xDC6F,0xDC73,0xDC5D,0xDDFA, 0, + 0xDDF3,0xDE0A,0xDE17,0xDD5F,0xDEB0,0xDC3E,0xDC46,0xDC4F,0xDC44,0xDC69, + 0xDC33,0xDC2F,0xDC4E,0xDC3A,0xDC2B, + /* plane 7, row 17 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD87E,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD84A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD850,0xD85A,0xD85A,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDCA9,0xDC50,0xDC45,0xDC37,0xDC25,0xDC2C,0xDC3F,0xDC34,0xDC29, + 0xDC1E,0xDC3D,0xDEED,0xDD66,0xDEF3,0xDEEA,0xDEEB,0xDCCC,0xDCCE,0xDCD0, + 0xDCE3,0xDCE0,0xDCD1,0xDCDC,0xDCDD,0xDCF0,0xDCDB,0xDCE5,0xDCF1,0xDCC9, + 0xDCE8,0xDCE7,0xDCC8,0xDCDE,0xDCCD,0xDCC5,0xDCC6,0xDCE4,0xDCC3,0xDEFB, + 0xDEFC,0xDEFE,0xDF03,0xDF00,0xDEFD,0xDF05,0xDF13,0xDFA7,0xDFB4,0xDC70, + 0xDC74,0xDC71,0xDC75,0xDC7D,0xDC73,0xDCC4,0xDCC3,0xDCDE,0xDCDD,0xDD11, + 0xDD0F,0xDD10,0xDDC3,0xDDC2,0xDDCA,0xDDC1,0xDE23,0xDFB1,0xDC24,0xDC11, + 0xDC25,0xDC0A,0xDC1F,0xDC20,0xDC14,0xDC28,0xDC03,0xDC12,0xDC0B,0xDC17, + 0xDE11,0xDD49,0xDD89,0xDD90,0xDD8F,0xDD96,0xDD95,0xDD93,0xDDED,0xDDF0, + 0xDFDE,0xDE85,0xDE77,0xDE7A,0xDE84, + /* plane 7, row 18 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x8666,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0x45D9,0xD85C,0x45DD,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 1, /* first low-surrogate */ + 0xDE79,0xDE7D,0xDE7B,0xDEED,0xDEEC,0xDDF6,0xDD9B,0xDE9D,0xDF11, + 0xDEC4,0xDEC8,0xDEDF,0xDEBF,0xDEB3,0xDEBA,0xDF10,0xDF06,0xDE88,0xDE9A, + 0xDEE0,0xDECC,0xDEB5,0xDEE1,0xDEBC,0xDEC6,0xDF0B,0xDEA4,0xDE95,0xDEA3, + 0xDEE2,0xDECD,0xDEE3,0xDEAB,0xDECB,0xDE8F,0xDDAB,0xDEA9,0xDF24,0xDEE4, + 0xDF12,0xDEE5,0xDF67,0xDEAA,0xDEA0,0xDEE6,0xDEC1,0xDEE7,0xDF0D,0xDE86, + 0xDEB0,0xDE8B,0xDEE8,0xDEC9,0xDF19,0xDEC0,0xDF0C,0xDEE9,0xDEEA,0xDDED, + 0xDDE3,0xDDE4,0xDDE8,0xDDD2,0xDDE2, 0,0xDFCF,0xDFD1,0xDFC3,0xDFC9, + 0xDFEA,0xDFB4,0xDFDC,0xDFBD,0xDFE6,0xDFC8,0xDFEC,0xDFB2,0xDFA9,0xDFD3, + 0xDFC0,0xDFE9,0xDFD5, 0,0xDFC5, 0,0xDFCB,0xDFD0,0xDFD2,0xDFE4, + 0xDFE8,0xDFCD,0xDFB6,0xDFAA,0xDFD4, + /* plane 7, row 19 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x46FC,0xD85E,0xD87E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD87E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD87E, + 0xD860,0xD860,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDC49,0xDFC1,0xDFDD,0xDFCE,0xDDC9,0xDDCA,0xDEFD,0xDED9,0xDEFF, + 0xDF04,0xDEFA,0xDF06,0xDF15,0xDF11,0xDF07,0xDF0B,0xDFFC,0xDFFD,0xDC6D, + 0xDC65,0xDD14,0xDD13,0xDD0C,0xDD0B,0xDD18,0xDD22,0xDE7D,0xDE6F,0xDE75, + 0xDE7B,0xDE80,0xDE7F,0xDE96,0xDE6D,0xDE6B,0xDE86,0xDE73,0xDE62,0xDE77, + 0xDE81,0xDE69,0xDE82,0xDE97,0xDE84, 0,0xDE78,0xDDD0,0xDE7A,0xDE6A, + 0xDE65,0xDE7E,0xDE94,0xDFC2,0xDFC1,0xDFF9,0xDC71,0xDC6B,0xDC6D,0xDC6F, + 0xDC6E,0xDCF2,0xDCE8,0xDCEF,0xDCE9,0xDCEA,0xDCED,0xDCF3,0xDCE6,0xDDC9, + 0xDDB4,0xDDB3,0xDDB9,0xDDCA,0xDDB1,0xDDB6,0xDDC7,0xDDC4,0xDDB7,0xDE6F, + 0xDF33,0xDF32,0xDF1F,0xDDD9,0xDF2B,0xDF30,0xDF36,0xDF42,0xDF41,0xDDD8, + 0xDCA5,0xDCAB,0xDCA9,0xDCB3,0xDCA7, + /* plane 7, row 20 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD87E,0x8F3A,0xD860, + 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD862,0x4907,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0x933D,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD845, + 0xD863,0xD87E,0xD863,0x49A8,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD87E,0xD863,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDCA0,0xDCD2,0xDCA8,0xDCB6,0xDCAC,0xDCAE,0xDCE6,0xDE65,0xDF47, + 0xDF63,0xDF4D,0xDF5F,0xDF4B,0xDF60,0xDF49,0xDF53,0xDDDF, 0,0xDF57, + 0xDF4E,0xDF52,0xDF54,0xDC20,0xDC22,0xDDC1,0xDDD7,0xDDD5,0xDDC4,0xDDD0, + 0xDDBB,0xDDE2,0xDDCB,0xDDB8,0xDDBF,0xDDD8,0xDDC0,0xDDBA,0xDDB4,0xDDBC, + 0xDDD4,0xDDED,0xDDC2,0xDDD9,0xDDCC,0xDF2F,0xDF23,0xDF96,0xDF8D,0xDF9E, + 0xDF99,0xDC83, 0,0xDC6A,0xDC69,0xDC75,0xDC6C,0xDC80,0xDC6E,0xDC81, + 0xDC77,0xDC76,0xDC73,0xDC70,0xDC84,0xDD19,0xDDF2, 0,0xDDEC,0xDDEB, + 0xDDF6,0xDDEF,0xDDF4,0xDDEE,0xDDF3,0xDDED,0xDC9B,0xDC98,0xDC94,0xDC7A, + 0xDC9A,0xDDF0,0xDD4C, 0,0xDD57,0xDD51,0xDD62,0xDD52,0xDD5C,0xDD53, + 0xDDEF,0xDE85,0xDF2D,0xDF3E,0xDF30, + /* plane 7, row 21 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD87E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0x4ACA, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866, + 1, /* first low-surrogate */ + 0xDF7D,0xDFE6,0xDFF6,0xDFE4,0xDFE9,0xDFEC,0xDFF2,0xDFE8,0xDFE3, + 0xDFEB,0xDFF0,0xDFEA,0xDFE7,0xDFFD,0xDFE5,0xDFEE,0xDFF5,0xDFF9,0xDFF1, + 0xDFF4,0xDDF4,0xDC11,0xDCDE,0xDCD8,0xDCDD,0xDCDB,0xDCD3,0xDCE1,0xDDDE, + 0xDDFC,0xDE28,0xDEB7,0xDEB8,0xDEC7,0xDEB2,0xDEA9,0xDEB9,0xDEBC,0xDEB3, + 0xDED1,0xDFB0,0xDFB1,0xDFB6,0xDC04,0xDC2C,0xDCC1,0xDC9E,0xDCBA, 0, + 0xDCD1,0xDCD3,0xDCD4,0xDCD5,0xDCC5,0xDCB6,0xDCB2,0xDCB5,0xDCC3,0xDCB9, + 0xDCC6,0xDDD6,0xDDE0,0xDDDB,0xDDD7,0xDDDD,0xDF15,0xDF0C,0xDF0F,0xDF0E, + 0xDEFE,0xDF04,0xDF0B,0xDF02,0xDEFF,0xDF08,0xDF10,0xDF17,0xDF13,0xDF06, + 0xDF09,0xDC24,0xDC26,0xDC25,0xDC48,0xDCB5,0xDCD2,0xDCD5,0xDCC4,0xDCAF, + 0xDCAD,0xDCC1,0xDCC0,0xDCCC,0xDCCD, + /* plane 7, row 22 */ + 1 | (94 << 8), /* first, last */ + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4B8D,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868, + 0xD868,0xD868,0x4CC0,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x4CCA, + 0xD867,0xD867,0xD867,0xD868,0xD868,0xD867,0xD867,0xD868,0xD868,0xD868, + 0x4D25,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4D4A, + 0xD868,0x4D53,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD854, + 0xD87E,0xD841,0xD842,0xD842,0xD842, + 1, /* first low-surrogate */ + 0xDCC3,0xDCC8,0xDCC5,0xDCBA,0xDCD0,0xDCC2,0xDCCE, 0,0xDE43, + 0xDE42,0xDE40,0xDE31,0xDECF,0xDECE,0xDF30,0xDF34,0xDF32,0xDF43,0xDF3C, + 0xDC11,0xDC35,0xDC34,0xDC37,0xDC31,0xDCBF,0xDCBC,0xDCC2,0xDCC9,0xDD83, + 0xDD8B,0xDDA0,0xDD8D,0xDD8C,0xDD9A,0xDD8A,0xDD91,0xDFF1,0xDC0F,0xDC01, + 0xDC07,0xDC0C, 0,0xDFDC,0xDFEE,0xDFF7,0xDFF2,0xDFF8,0xDFEB, 0, + 0xDFE6,0xDFED,0xDFE9,0xDC08,0xDC00,0xDFE5,0xDFFC,0xDE61,0xDE5E,0xDE5F, + 0,0xDE9B,0xDF16,0xDF15,0xDF20,0xDF14,0xDF1A,0xDF17,0xDF9C, 0, + 0xDFF1, 0,0xDFF0,0xDC28,0xDC24,0xDC2A,0xDC2B,0xDCD5,0xDD04,0xDD05, + 0xDD91,0xDD92,0xDEA6,0xDD09,0xDC22,0xDC1A,0xDC0E,0xDC1B,0xDC08,0xDCB3, + 0xDC1C,0xDE9D,0xDC12,0xDC1E,0xDCBB, + /* plane 7, row 23 */ + 1 | (94 << 8), /* first, last */ + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD84D,0xD842,0xD842, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0x3605,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD85A, + 1, /* first low-surrogate */ + 0xDCBF,0xDCBC,0xDD08,0xDD09,0xDD63,0xDDC8,0xDF28,0xDF8E,0xDF8D, + 0xDC43,0xDC4D,0xDC6D,0xDC42,0xDC52,0xDC51,0xDC69,0xDC50,0xDC56,0xDC6C, + 0xDC44,0xDC45,0xDC6B, 0,0xDC68,0xDC57,0xDE2E,0xDE31,0xDE2D,0xDC8B, + 0xDCB2,0xDC8D,0xDCA3,0xDCA4,0xDC90,0xDC89,0xDC8E,0xDC92,0xDD7B,0xDE90, + 0xDE8F,0xDCE9,0xDCCD,0xDCC5,0xDCD0,0xDCC9,0xDCD1,0xDCC7,0xDCD2,0xDC5F, + 0xDCE1,0xDCCC,0xDCC6,0xDCE4,0xDDA9,0xDED3,0xDEDA,0xDED2,0xDEDB,0xDF4D, + 0xDF4E,0xDC1C,0xDCE8,0xDF6C,0xDF5F,0xDF66,0xDF64,0xDF78,0xDF65,0xDF6D, + 0xDF61,0xDF7A,0xDC07,0xDD66,0xDD68,0xDD62,0xDED3,0xDED4,0xDED1,0xDEDC, + 0xDF73,0xDF72,0xDC2D,0xDC2C,0xDC2F,0xDC72,0xDCB4,0xDD89,0xDCCD,0xDCA6, + 0xDCA2,0xDCA0,0xDC46,0xDCA1,0xDC57, + /* plane 7, row 24 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0x3BF0,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD851, + 1, /* first low-surrogate */ + 0xDCA3,0xDCB1,0xDCDB,0xDCF6,0xDCDC,0xDCD6,0xDE13,0xDD9C,0xDD97, + 0xDDD8,0xDDE4,0xDDD4,0xDDE5,0xDDDB,0xDDD0,0xDDDA,0xDDCC,0xDDDC,0xDDED, + 0xDDD3,0xDDD1,0xDDCE,0xDDD9,0xDDDD,0xDCC6,0xDEE6,0xDEE5,0xDEE9,0xDFFF, + 0xDFFE,0xDC0E,0xDC8C,0xDCCA,0xDCCB,0xDD1A,0xDED7,0xDECF,0xDED0,0xDEC9, + 0xDECC,0xDED3,0xDFA4,0xDFA3,0xDE81,0xDF26,0xDEF3,0xDF27,0xDEF2,0xDEFF, + 0xDEF5,0xDEFC,0xDF0E, 0,0xDEF6,0xDF00,0xDF23,0xDF05,0xDF25,0xDF08, + 0xDF50,0xDD25,0xDD20,0xDD23,0xDD21,0xDDA1,0xDE69,0xDE6C,0xDE68,0xDE6B, + 0xDECC,0xDECD,0xDC10,0xDC0D,0xDC0A,0xDC16,0xDC14,0xDC52,0xDC28,0xDC2E, + 0xDC2C,0xDC4D,0xDC49,0xDC31,0xDC30,0xDC33,0xDC2D,0xDC36,0xDC3E,0xDC2F, + 0xDC27,0xDC34,0xDC4C,0xDFFE,0xDC12, + /* plane 7, row 25 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD850,0xD851,0xD850,0x3E02,0xD847,0xD850,0xD850, + 0xD851,0xD851,0xD851,0x3E23,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856, + 1, /* first low-surrogate */ + 0xDC1F,0xDC17,0xDFF5,0xDC15,0xDFF7, 0,0xDF7D,0xDFFA,0xDFF9, + 0xDC4B,0xDD9C,0xDD9D, 0,0xDEF0,0xDEF6,0xDEEF,0xDC9D,0xDC9A,0xDCA7, + 0xDCAF,0xDCAA,0xDE64,0xDE86,0xDE75,0xDE70,0xDE84,0xDE6B,0xDE85,0xDE6C, + 0xDF17,0xDF94,0xDF93,0xDCD2,0xDCD7,0xDCD4,0xDEA6,0xDEA7,0xDE9C,0xDE8B, + 0xDE8D,0xDE98,0xDEB9,0xDE9B,0xDE9D,0xDE99,0xDEA8,0xDE91,0xDE87,0xDE9A, + 0xDFA6,0xDC1F,0xDCA7,0xDCB1,0xDCB2,0xDCB7,0xDED0,0xDEB3,0xDEB5,0xDEC4, + 0xDEC3,0xDEBC,0xDEB2,0xDEBA,0xDEBB,0xDEC2,0xDECD,0xDEBE,0xDEB7,0xDF8F, + 0xDC03,0xDC04,0xDD71,0xDD77,0xDD74,0xDD8B,0xDD7A,0xDD51,0xDD8C,0xDD73, + 0xDEFF,0xDEFB,0xDEFD,0xDEF0,0xDEF3,0xDEFC,0xDEF2,0xDC92,0xDC9E,0xDCAE, + 0xDC96,0xDE14,0xDE12,0xDE13,0xDE16, + /* plane 7, row 26 */ + 1 | (94 << 8), /* first, last */ + 0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD87E, + 0xD857,0xD857,0xD858,0xD858,0xD858,0x4315,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD858, + 0xD858,0xD87E,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD84F,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDE0F,0xDEB6,0xDEBD,0xDC8C,0xDCAE,0xDCAC,0xDCAB,0xDC99,0xDC92, + 0xDCBB,0xDC9E,0xDC7E,0xDCAF,0xDCBC,0xDC98,0xDF01,0xDF09,0xDF06,0xDD67, + 0xDF07,0xDF08,0xDCCF,0xDD0E,0xDD32, 0,0xDD12,0xDD16,0xDD17,0xDD1B, + 0xDD15,0xDD31,0xDD18,0xDD1A,0xDD10,0xDD0A,0xDD09,0xDE4F,0xDD73,0xDF0F, + 0xDF10,0xDD75,0xDF28,0xDF11,0xDF16,0xDF17,0xDF02,0xDFBB,0xDFBA,0xDFC3, + 0xDFBC,0xDC8A,0xDC84,0xDC86,0xDCE0,0xDD17,0xDD18,0xDD1E,0xDD15,0xDDD3, + 0xDDDA,0xDDD9,0xDFE6,0xDFF4,0xDFE1,0xDC69,0xDC40,0xDC58,0xDC6C,0xDC4D, + 0xDD21,0xDD99,0xDDF1,0xDF68,0xDE86,0xDF5B,0xDF5C,0xDF77,0xDF2C,0xDDAD, + 0xDF58,0xDF64,0xDF61,0xDF48,0xDF97,0xDF59,0xDF29,0xDF62,0xDF2E,0xDF68, + 0xDF90,0xDF3A,0xDF3D,0xDF5E,0xDF46, + /* plane 7, row 27 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0x455D,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD842,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x465A,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD87E,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 1, /* first low-surrogate */ + 0xDF69,0xDF65,0xDF3E,0xDF49,0xDF56,0xDFE1,0xDF78,0xDF79,0xDF66, + 0xDF4A,0xDF35,0xDF7A,0xDF92,0xDF60,0xDF36,0xDF51,0xDF42, 0,0xDF3F, + 0xDF7B,0xDF5D,0xDF94,0xDF6A,0xDDB5,0xDDF2,0xDFBB,0xDC1B,0xDC1A,0xDC33, + 0xDC17,0xDC0A,0xDC15,0xDC12,0xDC01,0xDC2D,0xDFFD,0xDC23,0xDC05,0xDC11, + 0xDC00,0xDC1C,0xDC35,0xDC2E,0xDC36,0xDEBF,0xDC2F,0xDC0C,0xDC09,0xDC31, + 0xDFFC,0xDC0F,0xDC18,0xDC02,0xDE00,0xDF1F,0xDF37, 0,0xDF38,0xDF2B, + 0xDF2E,0xDF21,0xDF30,0xDF29,0xDF31,0xDDC9,0xDF01,0xDF2C,0xDF22,0xDFFF, + 0xDC77,0xDC67,0xDC7F,0xDC7D,0xDC7B,0xDC7E,0xDD1E,0xDD1C,0xDD21,0xDD26, + 0xDD27,0xDD29,0xDD2C,0xDD1D,0xDD2B,0xDEBF,0xDEA4,0xDEAA,0xDEAE,0xDE9F, + 0xDED0,0xDEB1,0xDEAD,0xDE9B,0xDEB2, + /* plane 7, row 28 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85F,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x4785, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD87E,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD87E,0xD862,0xD862,0xD862,0xD862, + 0x490B,0xD862,0xD862,0xD862,0xD862,0xD862,0xD853,0x4939,0xD862,0xD862, + 0xD862,0x4937,0xD862,0xD862,0xD862, + 1, /* first low-surrogate */ + 0xDEA9,0xDEB3,0xDEB4,0xDEBA,0xDEA5,0xDEB7,0xDEAC,0xDECB,0xDECF, + 0xDFC6,0xDC01,0xDFFF,0xDFFD,0xDC77,0xDC78,0xDC76,0xDCF7,0xDDCC, 0, + 0xDDD4,0xDDD7,0xDDD5,0xDDD6,0xDDD3,0xDF5D,0xDF55,0xDCE0,0xDD48,0xDCEE, + 0xDCDB,0xDCE7,0xDCD6,0xDCE5,0xDCE1,0xDCDD,0xDCE2,0xDE70,0xDE66,0xDE6F, + 0xDE6E,0xDF81,0xDF69,0xDF6E,0xDF6D,0xDF6C,0xDF84,0xDF85,0xDF71,0xDF73, + 0xDF6A,0xDF6F,0xDF7B,0xDD6A,0xDD7C,0xDD7D,0xDD81,0xDDFA,0xDE05,0xDDEB, + 0xDDFB,0xDDE9,0xDDEF,0xDDFC,0xDDE7,0xDDE1,0xDDEE,0xDDFD,0xDF32,0xDFA7, + 0xDFB5,0xDFB1,0xDFB9,0xDFA8,0xDFB3,0xDDE6,0xDC8A,0xDC91,0xDC8D,0xDC99, + 0,0xDC9A,0xDC9B,0xDC92,0xDC8F,0xDCAB,0xDCDB, 0,0xDE75,0xDE31, + 0xDE38, 0,0xDE35,0xDE69,0xDE3B, + /* plane 7, row 29 */ + 1 | (94 << 8), /* first, last */ + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD87E,0xD864, + 0xD864,0xD864,0xD864,0xD864,0x4A6B,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0x4ACD,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDE3D,0xDE6C,0xDE79,0xDE3C,0xDE3E,0xDC97,0xDCA5,0xDCA2,0xDC9D, + 0xDCA1,0xDD68,0xDD6F,0xDD6D,0xDD72,0xDD75,0xDD77,0xDD79,0xDEB5,0xDEEA, + 0xDEAB,0xDF43,0xDF41,0xDF42,0xDC09,0xDC08,0xDC06,0xDC01,0xDC03,0xDC00, + 0xDC04,0xDC0A,0xDC0E,0xDC0D,0xDC07,0xDC0F,0xDC14,0xDC02,0xDC15,0xDC0C, + 0xDC10,0xDC05,0xDCFD,0xDCFF,0xDD04,0xDD00,0xDD09,0xDE2B,0xDDF7,0xDE31, + 0xDEDB,0xDEC5,0xDED3,0xDECE, 0,0xDEC9,0xDEBF,0xDECB,0xDEC0,0xDED0, + 0xDED4,0xDFC1,0xDFB9,0xDFBB,0xDFC3,0xDFC9,0xDC07,0xDC2D,0xDCF8,0xDCE1, + 0xDCFA,0xDCEF,0xDCFD, 0,0xDCEB,0xDCF1,0xDCED,0xDCFE,0xDDF8,0xDE03, + 0xDDEE,0xDDE8,0xDE01,0xDEEC,0xDF22,0xDF14,0xDF34,0xDF2F,0xDF39,0xDF41, + 0xDF3C,0xDF49,0xDF58,0xDF3A,0xDF42, + /* plane 7, row 30 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD87E, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0x4C4D,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD87E,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD845,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD842,0x3510,0xD842, + 1, /* first low-surrogate */ + 0xDF3F,0xDC22,0xDC23,0xDC4A,0xDCDC,0xDCD9,0xDCDB,0xDCE2,0xDE07, + 0xDCDF,0xDCE0,0xDCD7,0xDE4F,0xDE46,0xDE53,0xDE55,0xDE4E,0xDE4A,0xDE4C, + 0xDE63,0xDF51,0xDF53,0xDF58,0xDF4D,0xDF5A,0xDF49,0xDF5D,0xDC12,0xDC3C, + 0xDCD1,0xDCDF,0xDCD6,0xDCD8,0xDCE0,0xDCD9,0xDDB1,0xDDAC,0xDDAA,0xDDEE, + 0xDDBD, 0,0xDDC3,0xDDA8,0xDDAE,0xDDAB,0xDC1D,0xDC27,0xDC38,0xDC12, + 0xDC48,0xDC2B,0xDC16,0xDC19,0xDC3D,0xDC23,0xDC2A,0xDE64,0xDEAD,0xDEAC, + 0xDE14,0xDEB1,0xDEAF,0xDF2C,0xDF24,0xDF25,0xDF28,0xDFF9,0xDFF7,0xDFFD, + 0xDFFE,0xDC39,0xDC33,0xDCD7,0xDCD8,0xDCE4,0xDCA1,0xDD0E,0xDD3B,0xDD44, + 0xDD42,0xDD94,0xDD93,0xDDD5,0xDEA7,0xDC31,0xDC23,0xDC28,0xDC27,0xDCC6, + 0xDDA3,0xDE21,0xDC1B, 0,0xDCC1, + /* plane 7, row 31 */ + 1 | (94 << 8), /* first, last */ + 0xD842,0xD842,0xD842,0xD842,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0x367B,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0x381D,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0x64F5,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3B27,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84D,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDCC3,0xDD2A,0xDD69,0xDE27,0xDCB6,0xDCA7,0xDCA4,0xDCA6,0xDC90, + 0xDC9E,0xDC94,0xDCA8,0xDCA5,0xDCA2,0xDC91, 0,0xDCBC,0xDCBD,0xDCB4, + 0xDCB0,0xDCE4,0xDD45,0xDD4B,0xDD7E,0xDD7F,0xDD7D,0xDDC3,0xDCFC,0xDCF7, + 0xDCF0,0xDCED,0xDCF1,0xDCF8,0xDEE9,0xDCEB, 0,0xDF90,0xDF8D,0xDF86, + 0xDF91,0xDF8A,0xDC08,0xDC50,0xDEEA,0xDEE6,0xDEE2,0xDEE7,0xDEED,0xDEE1, + 0xDC34,0xDC76,0xDC75,0xDC73,0xDCB5,0xDD90,0xDD92,0xDCE1,0xDCDF,0xDCD5, + 0xDCF2,0xDCFE,0xDD13,0xDD2E,0xDE19,0xDE08, 0,0xDE05,0xDE09,0xDE06, + 0xDE03,0xDDFD,0xDDFC,0xDE02,0xDE42,0xDC1A,0xDC11,0xDC15,0xDC16,0xDCCC, + 0xDCCF,0xDCD0,0xDD22,0xDD1E,0xDD21,0xDEE5, 0,0xDF54,0xDEEF,0xDF53, + 0xDF51,0xDFAD,0xDF67,0xDF68,0xDFA4, + /* plane 7, row 32 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD87E,0xD852,0xD852, + 0xD852,0x3FCF,0xD853,0xD853,0xD853,0x3FCD,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDF77,0xDF89,0xDF44,0xDF8B,0xDF79,0xDF5B,0xDF43,0xDF57,0xDF4A, + 0xDF7C,0xDF46,0xDF7B,0xDF56,0xDDA8,0xDE76,0xDE72,0xDED6,0xDED8,0xDED1, + 0xDC22,0xDC20,0xDC23,0xDC1E,0xDC6E,0xDCA3,0xDC77,0xDCA6,0xDC6D,0xDCA2, + 0xDC7C,0xDC84,0xDC68,0xDC74,0xDC86,0xDCA5,0xDC7B,0xDC7A,0xDC69,0xDC72, + 0xDC76,0xDC4A,0xDC37,0xDC2A,0xDC2D,0xDC46,0xDC28,0xDC26,0xDC42,0xDC2C, + 0xDC38,0xDC2B,0xDC33,0xDC45,0xDD39,0xDEF9,0xDEFA,0xDCB8,0xDCB7,0xDCBB, + 0xDCB9,0xDCB4,0xDE6F,0xDE87,0xDE8F,0xDEA2,0xDEA3,0xDD31,0xDF9B,0xDF9D, + 0xDFCE, 0,0xDEBD,0xDEBF,0xDE92, 0,0xDEEF,0xDEC9,0xDFA4,0xDFA8, + 0xDFAA,0xDC28,0xDC24,0xDC25,0xDC26,0xDCA9,0xDCBA,0xDCBE,0xDCBC,0xDCC0, + 0xDEF0,0xDEDF,0xDEE0,0xDEED,0xDEDB, + /* plane 7, row 33 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0x4182,0xD856,0xD856,0xD856,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD87E,0xD857, + 0xD857,0x4252,0xD857,0xD857,0xD857,0xD857,0xD87E,0xD857,0xD857,0xD857, + 0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xffff,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0x7F80,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDEFB,0xDEB9,0xDEDA,0xDEEB,0xDEEC,0xDD9A,0xDD9F,0xDD9B,0xDD97, + 0xDDA1,0xDF0F,0xDF05,0xDF48, 0,0xDCBC,0xDCBA,0xDEBF,0xDD01,0xDCE8, + 0xDCEF,0xDCE4,0xDCE6,0xDD02,0xDCEB,0xDCE0,0xDCED,0xDCD9,0xDD64,0xDD14, + 0xDCEE, 0,0xDD13,0xDCF9,0xDCF8,0xDF25,0xDD69,0xDF19,0xDF20,0xDF43, + 0xDF3F,0xDD45,0xDD4C,0xDD49,0xDD4F,0xDD41,0xDD3E,0xDD4D,0xDD52,0xDD4A, + 0xDD4E,0xDD73,0xDD42,0xDD51,0xDD55,0xDD50,0xDD6C, 0,0xDD6A,0xDD53, + 0xDD68,0xDE55,0xDE56,0xDF1C,0xDF1D, 0,0xDF1E,0xDF23,0xDF1F,0xDFE1, + 0xDFCD,0xDFCB,0xDFCC,0xDFC8,0xDFC9,0xDC9B,0xDC94,0xDC92,0xDC96,0xDC93, + 0xDC95,0xDC8F,0xDD1D,0xDD22,0xDD21,0xDDE9,0xDDEF,0xDDE0,0xDDE6,0xDDE4, + 0xDC29,0xDC2C,0xDC76,0xDC83,0xDC78, + /* plane 7, row 34 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD851,0xD85A,0x4451,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85C,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0x455A,0xD85B,0xD85B,0xD85B,0xD87E,0xD85B, + 0xD85B,0xD85B,0xD85C,0xD85C,0xD85B,0xD85C,0xD85B,0xD85B,0xD85B,0xD85C, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C, + 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD87E,0xD87E,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85A,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 1, /* first low-surrogate */ + 0xDC3C,0xDC43,0xDC7A, 0,0xDCF2,0xDD9E,0xDD9B,0xDD9A,0xDDF6, + 0xDDF5,0xDEA5,0xDE93,0xDEA4,0xDE82,0xDEC7,0xDFB7,0xDC1D,0xDFE2,0xDFD7, + 0xDFE3,0xDFE4,0xDFBC,0xDFD3, 0,0xDF5A,0xDFD2,0xDF2D,0xDDAF,0xDFC4, + 0xDFD0,0xDFE5,0xDC05,0xDC07,0xDFE6,0xDC1B,0xDFE7,0xDFD8,0xDFBE,0xDC17, + 0xDFB4,0xDFD9,0xDFE8,0xDFAD,0xDFAF,0xDFC8,0xDFE9,0xDFEA,0xDDFE,0xDDFB, + 0xDE00,0xDC72,0xDC70,0xDC46,0xDC59,0xDC5E,0xDC48,0xDC4F,0xDC71,0xDC60, + 0xDC5F,0xDC6E,0xDC73,0xDDC0,0xDDBF,0xDC47,0xDC6D,0xDC6F,0xDC81,0xDC6C, + 0xDC78,0xDC83,0xDC49,0xDC68,0xDC74,0xDC63,0xDC6A,0xDC85,0xDC65,0xDC62, + 0xDCC8,0xDDD0,0xDDD4,0xDDD1,0xDE03,0xDF42,0xDF63,0xDF56,0xDF5B,0xDF55, + 0xDF50,0xDF2D,0xDF44,0xDF48,0xDF45, + /* plane 7, row 35 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0x4665,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD845,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0x8D01,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0x48AF,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861, + 1, /* first low-surrogate */ + 0xDF82, 0,0xDF62,0xDC85,0xDC8D,0xDD36,0xDD2F,0xDD31,0xDD37, + 0xDEA7,0xDED9,0xDEF0,0xDEF2,0xDEFD,0xDEE8,0xDEEB,0xDEEE,0xDEE0,0xDEE9, + 0xDEED,0xDED6,0xDEF8,0xDED4,0xDEDF,0xDEE7,0xDED8,0xDEE3,0xDEEF,0xDF0F, + 0xDFCA,0xDD46,0xDC05,0xDC0C,0xDC0D,0xDC7F,0xDC80,0xDC81,0xDD01,0xDD03, + 0xDDF2,0xDDE2,0xDDE3,0xDDDE,0xDDE9,0xDDE8,0xDDE0,0xDE01,0xDDF5,0xDDE4, + 0,0xDE77,0xDF74,0xDF6F,0xDF62,0xDF61,0xDF6D,0xDF73,0xDF6A,0xDF69, + 0xDD12,0xDD2D,0xDD14,0xDD0F,0xDD29,0xDD16,0xDD03,0xDD46,0xDD5C,0xDD11, + 0xDD06,0xDCDC,0xDD2B,0xDD2A,0xDD2C,0xDD27,0xDE7A,0xDF9C,0xDF99,0xDF95, + 0xDF8B,0xDF98,0xDF96,0xDC32,0xDDA4,0xDDAA,0xDE1B, 0,0xDE0D,0xDE1C, + 0xDE0A,0xDE20,0xDE08,0xDE1A,0xDE13, + /* plane 7, row 36 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0x4941,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A29,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0x4A2A,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A96,0xD864,0xD865, + 0xD865,0xD865,0xD865,0xD865,0x4B12, + 1, /* first low-surrogate */ + 0xDE11,0xDF5D,0xDF5F,0xDF5E,0xDF60,0xDFBB,0xDFBC,0xDFC1,0xDFC0, + 0xDFC8,0xDFCE,0xDCA7,0xDCB2,0xDCB6,0xDCA5,0xDCBA,0xDCB5,0xDCAD,0xDCA4, + 0xDCD3,0xDCB0,0xDCB1,0xDD1D,0xDE8D, 0,0xDE91,0xDEB6,0xDEB7,0xDEBD, + 0xDEBC,0xDE96,0xDE94,0xDEA0,0xDCA8,0xDCA6,0xDD84,0xDD96,0xDD88,0xDD9A, + 0xDED1,0xDECF,0xDF50,0xDF51,0xDF4E,0xDF80,0xDF81,0xDC1B,0xDC17,0xDC20, + 0xDC19,0xDC1A,0xDC21,0xDC1E,0xDC18,0xDC1D, 0,0xDD2D,0xDD24,0xDD27, + 0xDD2E,0xDD25,0xDD1C,0xDD19, 0,0xDD23,0xDD1F,0xDD1A,0xDD2B,0xDD1E, + 0xDDE0,0xDE33,0xDEE6,0xDEFC,0xDEE5,0xDEF8,0xDEF6,0xDEEA,0xDEF2,0xDEED, + 0xDEEB,0xDEF0,0xDEF1,0xDFC6,0xDFC8,0xDFCE,0xDFC5, 0,0xDFCB,0xDD13, + 0xDD14,0xDD07,0xDD0C,0xDE1A, + /* plane 7, row 37 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD87E, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869, + 1, /* first low-surrogate */ + 0xDE17,0xDE06,0xDE16,0xDE07,0xDE10,0xDE09,0xDE19,0xDE15,0xDF6E, + 0xDF3B,0xDF3E,0xDF6C,0xDF65,0xDF64,0xDF59,0xDF7C,0xDF70,0xDF79,0xDC2C, + 0xDC52,0xDC51,0xDC4C,0xDD00,0xDD10,0xDD13,0xDCFF,0xDCFE,0xDCED,0xDE5A, + 0xDE58,0xDE5C,0xDEDA,0xDF78,0xDF5E,0xDF67,0xDF64,0xDC13,0xDC23,0xDC41, + 0xDC3F,0xDC40,0xDCED,0xDCE3,0xDCEA,0xDCF0,0xDCE6,0xDCE9,0xDCF1,0xDCEE, + 0xDDD4,0xDDD1,0xDDDC,0xDDEC,0xDC69,0xDC6D,0xDC57,0xDC66,0xDCF9,0xDC4A, + 0xDC60,0xDC56,0xDC59,0xDC4C,0xDC6A,0xDC62,0xDC63,0xDC70,0xDC5F,0xDE0D, + 0xDC64,0xDC5D,0xDC68,0xDC9F,0xDEBA,0xDEB8,0xDEBC,0xDEB9,0xDEB4,0xDF3B, + 0xDF2D,0xDF38,0xDF2F,0xDF32,0xDC41,0xDCCB,0xDCDE,0xDCDD,0xDCDA,0xDCDC, + 0xDD10,0xDD4F,0xDD49,0xDD98,0xDD96, + /* plane 7, row 38 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD869,0xD840,0xD869,0xD869,0xD869,0xD840,0xD840,0xD841, + 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD87E,0xD845,0xD845,0xD845,0xD845,0xD845,0x367E,0x58E1,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD869,0xD846,0xD87E, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD852,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDD97,0xDDC7,0xDD9C,0xDDDA,0xDDD8,0xDEA8,0xDD0A,0xDD9D,0xDCCB, + 0xDD38,0xDD39,0xDDA6,0xDC23,0xDC22,0xDC21,0xDDCE,0xDF92,0xDF91,0xDCEC, + 0xDCE0,0xDCED,0xDD08,0xDCE5,0xDCEE,0xDCE4,0xDCEB,0xDCE3,0xDCEA,0xDD0A, + 0xDC59,0xDCD1,0xDCE3,0xDCD4,0xDCD0,0xDCD9, 0, 0,0xDCDA,0xDCD3, + 0xDD4C,0xDD4D,0xDD7C,0xDD80,0xDDCC,0xDCFF,0xDD08,0xDD08,0xDD01,0xDC6B, + 0xDD00,0xDEED,0xDEF3,0xDEEE,0xDEF1,0xDEF0,0xDEDE,0xDF51,0xDF82,0xDFA9, + 0xDF98,0xDF9D,0xDF9A,0xDF9E,0xDF9F,0xDFA6,0xDFA7,0xDC09,0xDC2F,0xDD71, + 0xDD6D,0xDD72,0xDEEF,0xDEF0,0xDC3B,0xDC39,0xDC3C,0xDC38,0xDFFD,0xDC3A, + 0xDC78,0xDC79,0xDC77,0xDD98,0xDD9C,0xDD99,0xDD9A,0xDD11,0xDD0A,0xDCFD, + 0xDD0F,0xDD19,0xDD03,0xDD15,0xDD0C, + /* plane 7, row 39 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD87E,0xD84A, + 0xD84A,0xD84A,0x39A7,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0x4320,0xD858,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD844,0xD841, + 0xD851,0xD851,0xD851,0xD851,0xD852,0xD87E,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD853, + 1, /* first low-surrogate */ + 0xDD09,0xDD12,0xDD34,0xDD2A,0xDD08,0xDD2D,0xDD28,0xDCB1,0xDD2C, + 0xDD26,0xDD33, 0,0xDE1A,0xDE1E,0xDE07,0xDE2C,0xDE32,0xDE28,0xDE31, + 0xDE29,0xDE30,0xDE2A,0xDE44,0xDE2E,0xDCD1,0xDD24,0xDEF7,0xDEF4,0xDEF3, + 0xDEF8,0xDFB5,0xDF96,0xDF98,0xDF95,0xDF91,0xDFB2,0xDF9E,0xDF59,0xDFA3, + 0xDF9A,0xDF9B, 0,0xDD83,0xDEDA,0xDEDF,0xDF16,0xDC1F,0xDC2D,0xDC2E, + 0xDC2B,0xDCB8,0xDCBB,0xDCBF,0xDCBA,0xDCD5,0xDCE3,0xDCC1,0xDCBE,0xDCBD, + 0xDCB4,0xDCC2,0xDCA1,0xDC87,0xDCD7,0xDCCA,0xDCB5,0xDCDA,0xDCD9,0xDCB3, + 0xDCD8,0xDC67,0xDC71,0xDC62,0xDC5C,0xDC68,0xDC52,0xDC56,0xDD09,0xDC42, + 0xDDA0,0xDF00,0xDEFE,0xDEFF,0xDCCB,0xDD28,0xDCCA,0xDCA9,0xDCC8,0xDEB4, + 0xDEAC,0xDEAA,0xDEA9,0xDC0E,0xDCE9, + /* plane 7, row 40 */ + 1 | (94 << 8), /* first, last */ + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD845,0xD855,0xD855, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0x7CE9,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD858,0xD858, + 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A, + 0xD85A,0xD85A,0x81CB,0xD85A,0xD85A, + 1, /* first low-surrogate */ + 0xDCED,0xDCF2,0xDCEB,0xDCEE,0xDEE8,0xDEDB,0xDED7,0xDEE3,0xDEE5, + 0xDEEE,0xDED5,0xDFB3,0xDC2D,0xDCC1,0xDCC3,0xDF0C,0xDF0E,0xDF07,0xDF17, + 0xDF09,0xDF16,0xDF9A,0xDF9C,0xDDB4,0xDDB7,0xDDB3,0xDD4E,0xDF13,0xDF14, + 0xDCE6,0xDCDC,0xDCE8,0xDCE5,0xDE2E,0xDE2C,0xDE2B,0xDECD,0xDD3D,0xDD32, + 0xDD2D,0xDD45,0xDD3E,0xDD50,0xDD25,0xDD53,0xDD23,0xDF37,0xDF38,0xDF47, + 0xDF3D,0xDF3E,0xDF49,0xDF4A,0xDF1D, 0,0xDDA5,0xDD8C,0xDD8D,0xDD89, + 0xDD96,0xDD85,0xDD8F,0xDD77,0xDD8E,0xDD82,0xDD8A,0xDD88,0xDD7B,0xDD97, + 0xDD7D,0xDD79,0xDE59,0xDF24,0xDF2D,0xDF2E,0xDF2B,0xDD76,0xDFDA,0xDFD8, + 0xDFD6,0xDC87,0xDCA0,0xDD28,0xDD25,0xDD1F,0xDDF3,0xDDF7,0xDDF6,0xDC2B, + 0xDC5B,0xDC48, 0,0xDC5C,0xDC6D, + /* plane 7, row 41 */ + 1 | (94 << 8), /* first, last */ + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C, + 0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85B,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0x4565,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85E,0xD85E, + 1, /* first low-surrogate */ + 0xDC9D,0xDC99,0xDC8C,0xDC91,0xDC9B,0xDC9A,0xDC9C,0xDC95,0xDC8D, + 0xDC96,0xDCA5,0xDD2A,0xDDA1,0xDDA4,0xDDAD,0xDEA9,0xDEAE,0xDEB0,0xDC0D, + 0xDF63,0xDF71,0xDC51,0xDC54,0xDC2A,0xDC44,0xDC55,0xDC99,0xDC39,0xDC3F, + 0xDC3E,0xDC4F,0xDC4D,0xDC35,0xDC40,0xDC31,0xDFD5,0xDC2B,0xDC33,0xDC41, + 0xDC56,0xDC4C,0xDC46,0xDC3C,0xDC45,0xDC43,0xDC3D,0xDC70,0xDC57,0xDC38, + 0xDC58, 0,0xDC37,0xDE07,0xDE06,0xDE09,0xDCAB,0xDC90,0xDC93,0xDCBC, + 0xDCA9,0xDC9E,0xDCBF,0xDCAA,0xDC91,0xDCA4,0xDC9A,0xDCA7,0xDCA1,0xDC9C, + 0xDCA2,0xDC9B,0xDC9F,0xDC94,0xDC8F,0xDEF0,0xDC92,0xDC95,0xDCA5,0xDCA6, + 0xDE04,0xDF9C,0xDF79,0xDF7A,0xDF7E,0xDF7B,0xDF71,0xDF81,0xDF7F,0xDF7C, + 0xDF7D,0xDF75,0xDF76,0xDC8E,0xDC8F, + /* plane 7, row 42 */ + 1 | (94 << 8), /* first, last */ + 0xD85E,0xD85E,0xD85E,0xD85E,0x4704,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD845,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0x4764,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD860,0xD860,0xD860,0x4823,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD858,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861, + 1, /* first low-surrogate */ + 0xDD3E,0xDD3F,0xDD40,0xDD41, 0,0xDF0D,0xDF17,0xDF10,0xDF0E, + 0xDEEA,0xDF1D,0xDF03,0xDF22,0xDF04,0xDF00,0xDF20,0xDF21,0xDF23,0xDF13, + 0xDF09,0xDF11,0xDFCB,0xDFCE,0xDFD0,0xDFCC,0xDFD4,0xDCDB,0xDC09,0xDC0B, + 0xDC85,0xDD06,0xDD0D, 0,0xDD14,0xDD0F,0xDE09,0xDE14,0xDE0B,0xDDFC, + 0xDE04,0xDE0A,0xDE00,0xDDFD,0xDE07,0xDE06,0xDE11,0xDE79,0xDE78,0xDF88, + 0xDF80,0xDF8B,0xDD59,0xDD61,0xDD75, 0,0xDD55,0xDD5B,0xDD5F,0xDD52, + 0xDD62,0xDD72,0xDD5D,0xDD68,0xDD71,0xDD65,0xDD66,0xDD67,0xDD76,0xDD4C, + 0xDD60,0xDD74,0xDD50,0xDE8A,0xDE81,0xDE86,0xDE7F,0xDE80,0xDFA5,0xDFA7, + 0xDFA8,0xDFA6,0xDFAF,0xDD95,0xDFB1,0xDC35,0xDC39,0xDDC3,0xDE30,0xDE2A, + 0xDE2B,0xDE2D,0xDE2E,0xDE2C,0xDE23, + /* plane 7, row 43 */ + 1 | (94 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863, + 0xD863,0xD863,0x95D9,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD854,0xD864,0xD87E,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD842,0xD87E,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDE21,0xDE22,0xDF6C,0xDF81,0xDF8F,0xDF80,0xDFD0,0xDFCD,0xDFD5, + 0xDFD4,0xDCD1,0xDCBE,0xDCCB,0xDCCE,0xDCBD,0xDCD0,0xDF04,0xDED5,0xDED0, + 0xDED3,0xDEFB,0xDED8,0xDED1,0xDEFD,0xDED9,0xDED6,0xDEE6,0xDEF9,0xDDA1, + 0xDD9D,0xDD9E, 0,0xDEFF,0xDF5F,0xDF57,0xDF60,0xDF59,0xDC2C,0xDC25, + 0xDC27,0xDC30,0xDC24,0xDC26,0xDC2D,0xDC2E,0xDC29,0xDC31,0xDD45,0xDD47, + 0xDD52,0xDD4A,0xDD50,0xDD46,0xDD4F,0xDD4E,0xDD53,0xDF21,0xDF09,0xDF1A, + 0xDF1B,0xDF15,0xDF10,0xDDF9,0xDF14,0xDF0E,0xDF12,0xDF0B,0xDFCF,0xDFD2, + 0xDFD0,0xDFD4,0xDFD3,0xDFD1,0xDF18,0xDDFB,0xDC09,0xDD1C,0xDD27,0xDD25, + 0xDD1B,0xDD29,0xDD1F,0xDD30,0xDD24,0xDD28,0xDD19,0xDD2F,0xDE24,0xDE21, + 0xDE25,0xDE26,0xDE27,0xDE76,0xDF66, + /* plane 7, row 44 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD85C,0xD865,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD869, + 1, /* first low-surrogate */ + 0xDF75,0xDF69,0xDF7E,0xDF8F,0xDF74,0xDE10,0xDFAD,0xDC2B,0xDC2A, + 0xDC58,0xDD22,0xDD1D,0xDD2B,0xDD2C,0xDD2D,0xDD33,0xDD1B,0xDD27,0xDD2A, + 0xDD28,0xDD3B,0xDE7E,0xDE71,0xDE79,0xDE78,0xDE70,0xDE6D,0xDE7D,0xDE75, + 0xDE76,0xDEDE,0xDF66,0xDF83,0xDF87,0xDF7B,0xDF89,0xDF86,0xDF82,0xDF7C, + 0xDF81,0xDC43,0xDC45,0xDCF7,0xDCF9,0xDCFA,0xDE05,0xDDFE,0xDE0F,0xDDFF, + 0xDDFA,0xDE09,0xDE20,0xDE0C,0xDE3C,0xDE22,0xDDF8,0xDE0A,0xDE08,0xDDF7, + 0xDC8E,0xDC77,0xDC8B,0xDCB4,0xDC8A,0xDC9A,0xDC79,0xDC83,0xDC7F,0xDCA1, + 0xDC8F,0xDCA3,0xDC81,0xDC94,0xDC7E,0xDC82,0xDC90,0xDCA5,0xDCAD,0xDC9D, + 0xDE67,0xDE69,0xDECB,0xDEC8,0xDED1,0xDF40,0xDF4B,0xDF49,0xDF46,0xDF3E, + 0xDF43,0xDF3F,0xDFA5,0xDFA7,0xDC4E, + /* plane 7, row 45 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD849,0xD869,0xD869,0xD869,0xD869,0xD869,0xD87E,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD840,0xD841,0xD841,0x34B9, + 0xD87E,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD864,0xD846, + 0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD841,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84C,0xD866,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84D,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDC4D,0xDD9B,0xDCE5,0xDCE1,0xDCE2,0xDD16,0xDD14,0xDE1B,0xDD59, + 0xDD51,0xDD5F,0xDD4A,0xDD57,0xDD58,0xDDCA,0xDDDB,0xDDDE,0xDDE0,0xDDE1, + 0xDDDF,0xDDE2,0xDDE3,0xDE92,0xDEBF,0xDEBE,0xDD0B,0xDC52,0xDC4E, 0, + 0xDC13,0xDDA7,0xDC26,0xDC27,0xDCC6,0xDD0B,0xDD6A,0xDD78,0xDD1A,0xDD16, + 0xDD19,0xDD17,0xDD1B,0xDD18,0xDD20,0xDE37,0xDCEC,0xDD81,0xDE3D,0xDD0F, + 0xDDAD,0xDEFB,0xDF52,0xDFAF,0xDFB7,0xDFB2,0xDD78,0xDDAC,0xDF00,0xDEFE, + 0xDF02,0xDEFD,0xDF03,0xDC40,0xDC43,0xDC42,0xDCB7,0xDDA2,0xDD00,0xDD35, + 0xDD41,0xDD05,0xDC53,0xDD50,0xDD4E,0xDD53,0xDE53,0xDE50,0xDE57,0xDE5F, + 0xDE55,0xDEEA,0xDC26,0xDC30,0xDC2A,0xDC28,0xDC2C,0xDC2D,0xDCD4,0xDF07, + 0xDF58,0xDF59,0xDFC5,0xDFCD,0xDFC7, + /* plane 7, row 46 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0x3C4B,0xD84E,0xD869,0xD84E,0xD84F,0xD842,0xD87E,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD841,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855, + 0x40F1,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858, + 1, /* first low-surrogate */ + 0xDFE8, 0,0xDD32,0xDE97,0xDEDE,0xDC32,0xDEC8,0xDD15,0xDCF1, + 0xDCF0,0xDCEC,0xDD09,0xDCF9,0xDCF5,0xDCFE,0xDC74,0xDC81,0xDC7C,0xDC75, + 0xDC89,0xDC82,0xDC97,0xDC86,0xDC7D,0xDC93,0xDC9C,0xDC76,0xDC80,0xDD45, + 0xDEA1,0xDF03,0xDCC9,0xDCCD,0xDCD0,0xDEAD,0xDEC5,0xDFA2,0xDCEC,0xDCF6, + 0xDCF3,0xDEF3,0xDEFA,0xDEF9,0xDEF5,0xDEF4,0xDEF8,0xDFB6,0xDFB4,0xDC32, + 0xDCCD,0xDCC8,0xDCCE,0xDCCA,0xDF2A,0xDF21,0xDF1D,0xDDBD,0xDDBE,0xDDC2, + 0,0xDDC9,0xDF1F,0xDCF1,0xDCED,0xDCF2,0xDCE0,0xDCF7,0xDE30,0xDE37, + 0xDE31,0xDE36,0xDEC8,0xDD6D,0xDD69,0xDD7D,0xDD61,0xDD70,0xDD71,0xDD73, + 0xDD76,0xDD75,0xDD78,0xDD79,0xDD64,0xDD6E,0xDF51,0xDF4F,0xDF22,0xDDAF, + 0xDDAA,0xDDA3,0xDD9D,0xDD9C,0xDDA1, + /* plane 7, row 47 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 1, /* first low-surrogate */ + 0xDDB6,0xDDAC,0xDDA2,0xDDA7,0xDDB0,0xDDA9,0xDDC3,0xDF31,0xDF32, + 0xDF33,0xDF34,0xDF37,0xDF3C,0xDFD9,0xDFDD,0xDFDE,0xDFDF,0xDFE0,0xDCA5, + 0xDCAA,0xDCA2,0xDCA3,0xDE04,0xDE03,0xDDFE,0xDE28,0xDCAF,0xDCAD,0xDCA6, + 0xDDAC,0xDDA5,0xDDB0,0xDDB1,0xDE01,0xDEB2,0xDED2,0xDEF1,0xDFD1,0xDC47, + 0xDCC9,0xDCA7,0xDCC8,0xDC95,0xDC8E,0xDC91,0xDC7D,0xDCEE,0xDC8D,0xDC8C, + 0xDCB0,0xDC96,0xDC42,0xDC7C,0xDCB1,0xDCB2,0xDC84,0xDC9D,0xDCA1,0xDC98, + 0xDCB3,0xDC22,0xDC7B,0xDC8A,0xDCCE,0xDC80,0xDC97,0xDCB4,0xDCB5,0xDC9A, + 0xDC9F,0xDC93,0xDE12,0xDE0B,0xDE0E,0xDCA3,0xDCCC,0xDCDC,0xDCE1,0xDCDE, + 0xDCD2,0xDCDB,0xDCD9,0xDCD7,0xDCD4,0xDCC9,0xDCEB,0xDCDA,0xDCD1,0xDD04, + 0xDCCA,0xDCE2,0xDDD7,0xDF8C,0xDF99, + /* plane 7, row 48 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0xD85D,0xD85D,0xD85D,0x4667,0xD85D,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x4714,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD865,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD861,0x4889,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD87E,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDFA2,0xDF96,0xDF94,0xDF9F, 0,0xDF8E,0xDC03,0xDC94,0xDC93, + 0xDD44,0xDF2F,0xDF35,0xDF2B,0xDF32,0xDF2D,0xDF36, 0,0xDF31,0xDF12, + 0xDF33,0xDF1F,0xDF34,0xDF40,0xDF3F,0xDF41,0xDFD3,0xDC89,0xDD18,0xDD10, + 0xDE1A,0xDE25,0xDE1E,0xDF92,0xDF95,0xDF93,0xDD84,0xDD9A,0xDD89,0xDD8D, + 0xDD88,0xDD91,0xDD9B,0xDD9C,0xDD48,0xDE8E,0xDE92,0xDFC5,0xDFC1,0xDFB8, + 0xDFBE,0xDFB5,0xDFC7,0xDC3C, 0,0xDDEC,0xDE3F,0xDE39,0xDE37,0xDFA1, + 0xDF94,0xDFA0,0xDFDE,0xDFDB,0xDFDF,0xDFDC,0xDCD6,0xDCDC,0xDCDD,0xDCE0, + 0xDCE3,0xDCE1,0xDF18,0xDF19,0xDF53,0xDDEC,0xDF44,0xDF0E,0xDF0F,0xDF47, + 0xDF17,0xDF1D,0xDF11,0xDCB4,0xDCB6,0xDDB7,0xDDBE,0xDDC2,0xDDB4,0xDF31, + 0xDF15,0xDF83,0xDC3B,0xDC36,0xDC42, + /* plane 7, row 49 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD863,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x4C0B, + 0xD87E,0xD866,0xD866,0x4C17,0xD867, + 1, /* first low-surrogate */ + 0xDC50,0xDC40,0xDC34,0xDC38,0xDC3D,0xDC3E,0xDC35,0xDC3A,0xDC46, + 0xDC37,0xDC39,0xDC45,0xDD77,0xDD5D,0xDD6A,0xDD76,0xDD6B,0xDD6C,0xDD65, + 0xDD64,0xDD71,0xDD5F,0xDD72,0xDDFE,0xDDFF,0xDE3E,0xDF2B,0xDF36,0xDF2D, + 0xDF39,0xDF3F,0xDF3B,0xDF33,0xDF42,0xDF3A,0xDFD5,0xDFD8,0xDFD9,0xDC0D, + 0xDC0A,0xDC39,0xDC3A,0xDD3D,0xDD45,0xDD3A,0xDD37,0xDD3E,0xDD42,0xDF87, + 0xDF8C,0xDF82,0xDF6B,0xDFA0,0xDF9A,0xDF90,0xDF8E,0xDFA1,0xDFBD,0xDFB2, + 0xDFB5,0xDFB7,0xDFAA,0xDFA2,0xDFA5,0xDFAE,0xDFAB,0xDFBC,0xDC32,0xDC5A, + 0xDD64,0xDD5C,0xDD4D,0xDD3F,0xDD3E,0xDD52,0xDD58,0xDD57,0xDD5E,0xDD53, + 0xDD54,0xDD56,0xDF65,0xDE84,0xDE85,0xDE86,0xDF97,0xDFA1,0xDFA2, 0, + 0xDE0A,0xDFA3,0xDFA6, 0,0xDC15, + /* plane 7, row 50 */ + 1 | (94 << 8), /* first, last */ + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD866,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x4C6D,0xD867,0x4C70, + 0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0x4CED,0xD868,0xD868,0xD87E,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0x4D8D,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0x34A7,0xD841,0xD841,0xD842,0xD842,0xD842, + 0xD844,0xD844,0xD844,0xD844,0xD844, + 1, /* first low-surrogate */ + 0xDC24,0xDC4A,0xDC49,0xDC48,0xDC4B,0xDD0E,0xDD62,0xDD0B,0xDD0A, + 0xDD08,0xDD06,0xDE43,0xDE47,0xDE3F,0xDE46,0xDE50, 0,0xDE4B, 0, + 0xDE52,0xDCD7,0xDCBF,0xDCD8,0xDCE0,0xDCE7,0xDCB8,0xDCD5,0xDCEF,0xDCE6, + 0xDCE4,0xDCD4,0xDCD6,0xDCEA, 0,0xDCBB,0xDCE9,0xDE10,0xDE6D,0xDE70, + 0xDE73,0xDE72,0xDED4,0xDECE,0xDED5,0xDF5A,0xDF58,0xDF52,0xDF50,0xDF55, + 0xDF4E,0xDF4D,0xDFCB,0xDFCC,0xDFCD,0xDFD1,0xDC58,0xDC63,0xDC5E,0xDC54, + 0xDC5B,0xDCE9,0xDCE7,0xDCE8,0xDD1D,0xDD67,0xDD5A,0xDD5C,0xDD5B,0xDD61, + 0xDDA1, 0,0xDDA4,0xDDE9,0xDDEF,0xDDE5,0xDDF5,0xDDEB,0xDDED,0xDE96, + 0xDE95,0xDEB3,0xDEB5,0xDEB1, 0,0xDC4D,0xDE24,0xDC2B,0xDDCF,0xDEC9, + 0xDD36,0xDD31,0xDD54,0xDD3A,0xDD38, + /* plane 7, row 51 */ + 1 | (94 << 8), /* first, last */ + 0xD844,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD848, + 0xD848,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0x6707, + 0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84D,0xD84D,0xD84E,0xD84E,0xD84F, + 0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD87E,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD87E,0xD848,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0x3E5A,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD87E,0xD854,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDE39,0xDE38,0xDCF4,0xDCF3,0xDCF6,0xDCFC,0xDCF5,0xDCF1,0xDE9C, + 0xDD18,0xDD1A,0xDEFC,0xDEFE,0xDF03,0xDF53,0xDD2B,0xDFC6,0xDFC1,0xDD7B, + 0xDF06,0xDC49,0xDCB8,0xDDA3,0xDD52,0xDD4D,0xDD5F,0xDD5E,0xDD61,0xDE23, + 0xDE8C,0xDE6F,0xDE75,0xDE74,0xDE71,0xDE70,0xDE6C,0xDD26,0xDF08, 0, + 0xDFF0,0xDFEF,0xDFFB,0xDC10,0xDC0C,0xDFF6,0xDFFE,0xDE7C,0xDEE1,0xDC38, + 0xDC6F,0xDD18,0xDD15,0xDD1C,0xDD10,0xDD35,0xDD17,0xDD17,0xDD1D,0xDD26, + 0xDD28,0xDD29,0xDD2A,0xDD1A,0xDD16,0xDF07,0xDCAB,0xDCAC,0xDCA1,0xDCAE, + 0xDCA3,0xDCA7,0xDD48,0xDE04,0xDEFD, 0,0xDF08,0xDCD2,0xDEC6,0xDEBE, + 0xDF1C,0xDFA6,0xDFA7,0xDFAB,0xDC00,0xDCFB,0xDCFC,0xDCF9,0xDD01,0xDF06, + 0xDF04,0xDD3C,0xDC34,0xDF36,0xDF32, + /* plane 7, row 52 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856, + 0xD869,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x42AF,0xD857,0xD857,0xD857, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0x456B,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 1, /* first low-surrogate */ + 0xDF42,0xDF2D,0xDF35,0xDDD8,0xDF23,0xDF20,0xDD01,0xDD00,0xDD03, + 0xDEBC,0xDE3C,0xDE41,0xDE35,0xDEC9,0xDD8E,0xDD9E,0xDD99,0xDDB4,0xDDAA, + 0xDD9F,0xDD96,0xDD9D,0xDDC3,0xDD74,0xDDAB, 0,0xDF63,0xDF5B,0xDF5A, + 0xDDC5,0xDDC4,0xDDCF,0xDDC8,0xDDA4,0xDDBD,0xDDD3,0xDE60,0xDF3B,0xDFE3, + 0xDFE7,0xDCA8,0xDCAC,0xDCA9,0xDD2A,0xDE08,0xDE09,0xDCB9,0xDEC1,0xDEC2, + 0xDEB8,0xDCE1,0xDCEB,0xDCE5,0xDCFA,0xDCE4,0xDD0B,0xDCD7,0xDCEF,0xDCE0, + 0xDCEC,0xDCFB,0xDDB0,0xDCD3,0xDCE6,0xDCFC,0xDCE3,0xDCCF,0xDCDA,0xDCDC, + 0xDCD2,0xDCA4, 0,0xDE17,0xDE16,0xDCF2,0xDCFC,0xDD18,0xDCF6,0xDCFE, + 0xDCF3,0xDCF7,0xDD01,0xDCF9,0xDD06,0xDCF5,0xDD10,0xDCDF,0xDD03,0xDD08, + 0xDDD8,0xDE05,0xDF97,0xDFB3,0xDFAE, + /* plane 7, row 53 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0x471B,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85A,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0x4963,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD852,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDFAF,0xDFA7,0xDFB1,0xDFA8,0xDFAC,0xDFAB,0xDC04,0xDC9A,0xDD4A, + 0xDF42,0xDF58,0xDF4B,0xDF45,0xDF49,0xDF4C,0xDF59,0xDF56, 0,0xDF46, + 0xDF44,0xDF5B,0xDF69,0xDC8E,0xDC8F,0xDD1E,0xDCBC,0xDE2F,0xDF9E,0xDF9D, + 0xDF9F,0xDF9C,0xDDB4,0xDDAE,0xDDAB,0xDDB3,0xDDAF,0xDDC2,0xDE93,0xDE95, + 0xDE96,0xDE97,0xDFCF,0xDFCE,0xDFCB,0xDC4B,0xDE46,0xDE43,0xDE45,0xDE51, + 0xDFAE,0xDFAF,0xDFB0,0xDFB8,0xDFE2,0xDFE3,0xDFE6,0xDCED,0xDCEA,0xDD3A, + 0xDF59,0xDF84,0xDF5F,0xDF7C,0xDF5C,0xDF58,0xDF55,0xDF5D,0xDF7E,0xDF80, + 0xDF83,0xDF57, 0,0xDF5E,0xDCBA,0xDDD5,0xDF58,0xDF68,0xDF67,0xDC4A, + 0xDC4C,0xDC52,0xDC49,0xDC4E,0xDC47,0xDC4D,0xDC4B,0xDC4F,0xDD7E,0xDD87, + 0xDD83,0xDD89,0xDECA,0xDD86,0xDD88, + /* plane 7, row 54 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0x4A80,0x4A84,0x4A7F,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0x4AF1,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0x9A47, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868, + 1, /* first low-surrogate */ + 0xDE47,0xDE42,0xDE49,0xDE48, 0, 0, 0,0xDF44,0xDF51, + 0xDF46,0xDF47,0xDFE4,0xDC0F,0xDC3F,0xDD4B,0xDD57,0xDD52, 0,0xDD51, + 0xDD58,0xDD5E,0xDD53,0xDD5D,0xDD4D,0xDE3C,0xDE3F,0xDE46,0xDE3E,0xDE44, + 0xDE45,0xDE41,0xDE38,0xDE42,0xDE43,0xDE7A,0xDFA3,0xDFBA,0xDFC0,0xDFC4, + 0xDFC6,0xDFCB,0xDC61,0xDD7A,0xDD73,0xDD72,0xDD74,0xDD80,0xDD81, 0, + 0xDE95,0xDE8F,0xDE90,0xDE92,0xDE94,0xDE8B,0xDEE6,0xDFB2,0xDFB8,0xDFBD, + 0xDFBE,0xDFCE,0xDFBA,0xDC16,0xDC26,0xDC25,0xDC4C,0xDC50,0xDC4E,0xDC51, + 0xDC52,0xDD14,0xDD15,0xDD1B,0xDE82,0xDE99,0xDE9A,0xDE7D,0xDE85,0xDE86, + 0xDE9C,0xDE79,0xDE7B,0xDE80,0xDE83,0xDE81,0xDD1E,0xDD1B,0xDD2A,0xDCFB, + 0xDD05,0xDD20,0xDD11,0xDD04,0xDCFD, + /* plane 7, row 55 */ + 1 | (94 << 8), /* first, last */ + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0x4D1C, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0x34A8,0xD841,0xD841,0xD841,0xD842,0xD842, + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845, + 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDD03,0xDD10,0xDD18,0xDD0A,0xDD4E,0xDD09,0xDD07,0xDD1C, 0, + 0xDE77,0xDE76,0xDED8,0xDED9,0xDF61,0xDF5C,0xDF5E,0xDF60,0xDFAA,0xDFD6, + 0xDFD8,0xDC09,0xDC08,0xDC6B,0xDC65,0xDC73,0xDC74,0xDCED,0xDD24,0xDD25, + 0xDD6A,0xDDA7,0xDDA8,0xDE0B,0xDDFA,0xDDF9,0xDDFF,0xDE04,0xDDF6,0xDE05, + 0xDE99,0xDEAB,0xDEBD,0xDEB8, 0,0xDC64,0xDC5A,0xDD72,0xDD7A,0xDF95, + 0xDD5F,0xDD61,0xDD5E,0xDD5A,0xDD5C,0xDD5D,0xDD6E,0xDD57,0xDD58,0xDD02, + 0xDD0B,0xDD08,0xDD51,0xDD25,0xDD28,0xDD23,0xDD21,0xDD24,0xDD29,0xDF06, + 0xDF0A,0xDFCA,0xDFCC,0xDFCB,0xDFCF,0xDD7F,0xDD7C,0xDDD6,0xDF09,0xDF0B, + 0xDF76,0xDC7D,0xDDA5,0xDD5B,0xDD5C,0xDD5D,0xDD65,0xDE6D,0xDE82,0xDE83, + 0xDE87,0xDE95,0xDE8A,0xDCD6,0xDD28, + /* plane 7, row 56 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD855,0xD855,0xD855,0x418B,0xD856,0xD856,0xD856,0xD856,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x432B,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0x457A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 1, /* first low-surrogate */ + 0xDF0D,0xDC2E,0xDCEE,0xDC2D,0xDC21,0xDC19,0xDD3B,0xDD3C,0xDD3A, + 0xDE7E,0xDC3B,0xDD47,0xDD39,0xDD34,0xDD36,0xDD46,0xDD3B,0xDD41,0xDD45, + 0xDCC0,0xDCC4,0xDCBA,0xDCBD,0xDCBE,0xDDA3,0xDF0C,0xDCD9,0xDECD,0xDFAE, + 0xDCFF,0xDD24,0xDFBB,0xDFBC,0xDC36,0xDCD5,0xDCD3,0xDCD6,0xDF3C,0xDF3F, + 0xDDDE,0xDDE3,0xDF27,0xDF29, 0,0xDD05,0xDD07,0xDD0C,0xDED0,0xDDBE, + 0xDDBC,0xDDD0,0xDDC2,0xDDB5,0xDDC9,0xDF66, 0,0xDDD5,0xDDE2,0xDDDC, + 0xDDE3,0xDDDA,0xDDC2,0xDDE8,0xDFE9,0xDCAF,0xDCAD,0xDCAE,0xDE0B,0xDCC1, + 0xDDB6,0xDDB9,0xDEC0,0xDCA5,0xDD28,0xDD22,0xDD29,0xDD18,0xDD1F,0xDD1C, + 0xDD12,0xDD2A, 0,0xDD21,0xDD2B,0xDD17,0xDCF0,0xDD16,0xDD23,0xDD2B, + 0xDD26,0xDD3D,0xDD22,0xDD3A,0xDD31, + /* plane 7, row 57 */ + 1 | (94 << 8), /* first, last */ + 0xD85D,0xD85D,0xD85D,0xD85D,0x4609,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x466D,0xD854, + 0xD857,0xD85E,0xD85E,0xD85E,0x471F,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD87E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0x496A,0x496C,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDD32,0xDD54,0xDD21,0xDD35, 0,0xDD2E,0xDD30,0xDD2F,0xDD36, + 0xDDDA,0xDDD9,0xDFBB,0xDFBC,0xDFB7,0xDFC2,0xDFBD,0xDFB2, 0,0xDF44, + 0xDDD1,0xDF52,0xDF6B,0xDF67, 0,0xDF61,0xDF6C,0xDF51,0xDF74,0xDF77, + 0xDF6F,0xDF6D,0xDF68,0xDDD1,0xDF84,0xDC90,0xDC92,0xDC93,0xDD1F,0xDE31, + 0xDE38,0xDE39,0xDE37,0xDFAB,0xDDC3,0xDDC8,0xDDCB,0xDDCF,0xDE98,0xDFD4, + 0xDFD3,0xDFD8,0xDFD9,0xDFDD,0xDFD1,0xDFD6,0xDC3E,0xDE58,0xDE57,0xDE55, + 0xDFC4,0xDFE4,0xDCEE,0xDCEF,0xDCF3,0xDCF2,0xDCF0,0xDFAB,0xDF9A,0xDFAF, + 0xDF97, 0, 0,0xDFBF,0xDF94,0xDF93,0xDCBE,0xDCBB,0xDCBC,0xDDD9, + 0xDF6C,0xDC53,0xDC54,0xDC5B,0xDC58,0xDC56,0xDC57,0xDD9F,0xDD94,0xDD96, + 0xDD97,0xDE4A,0xDE4B,0xDF55,0xDF5A, + /* plane 7, row 58 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0x4BB2,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD867,0xD867,0x4C1D,0xD867,0xD867,0xD867,0x4C2D,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD87E,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0x4D45,0xD868, + 1, /* first low-surrogate */ + 0xDF5E,0xDF5F,0xDF59,0xDF5B,0xDF58,0xDF54,0xDFE8,0xDFEB,0xDFEC, + 0xDC13,0xDD66,0xDD6B,0xDD62,0xDD69,0xDD63,0xDD5F,0xDD4E,0xDE48,0xDE4A, + 0xDFE3,0xDFDB,0xDFD8,0xDFD6,0xDD86,0xDD90,0xDD91,0xDD88,0xDD94,0xDD83, + 0,0xDD9C,0xDD8D,0xDD85,0xDE98,0xDE9A,0xDE9C,0xDEE7,0xDFC5,0xDFD0, + 0xDFD1,0xDC19,0xDC27, 0,0xDC54,0xDD2D,0xDD22, 0,0xDD1F,0xDEBD, + 0xDEAE,0xDEBB,0xDEAD,0xDEBC,0xDEB9,0xDEB4,0xDECB,0xDEB7,0xDEB3,0xDEBA, + 0xDEB6,0xDECD,0xDEBE,0xDEC9,0xDE0B,0xDD5F,0xDD3B,0xDD61,0xDD5C,0xDD8A, + 0xDD5A,0xDD4D,0xDD46,0xDD44,0xDD3D,0xDD40,0xDD3C,0xDD8C,0xDD41,0xDD4C, + 0xDD3E,0xDD4A,0xDE7C,0xDE7A,0xDF65,0xDF6E,0xDF69,0xDF6A,0xDF6F,0xDF6C, + 0xDF70,0xDF68,0xDF6B, 0,0xDFAC, + /* plane 7, row 59 */ + 1 | (94 << 8), /* first, last */ + 0xD868,0xD868,0xD868,0xD851,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD841,0xD842,0xD844, + 0xD844,0xD844,0xD844,0xD845,0xD846,0xD848,0xD849,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD868,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD853,0xD853,0xD853, + 1, /* first low-surrogate */ + 0xDFDE,0xDFDD,0xDFDC,0xDCC5,0xDC8C,0xDC83,0xDC82,0xDC88,0xDC85, + 0xDC81,0xDCF5,0xDCEF,0xDCF4,0xDCF2,0xDCF6,0xDCF3,0xDCF0,0xDCF1,0xDD2B, + 0xDD27,0xDD28,0xDD6C,0xDDAE,0xDE0E,0xDE1B,0xDE16,0xDE1F,0xDE22,0xDE20, + 0xDE21,0xDE14,0xDE13,0xDE9D,0xDE9C,0xDE9E,0xDE9F,0xDC6B,0xDCC8,0xDD78, + 0xDD76,0xDD70,0xDD71,0xDD0A,0xDD2C,0xDF11,0xDC7E,0xDD57,0xDD66,0xDD69, + 0xDD67,0xDD68,0xDD71,0xDD6F,0xDFAE,0xDE8B,0xDE96,0xDC35,0xDC3A,0xDC6B, + 0xDF16,0xDC43,0xDC46,0xDC3F,0xDC3B,0xDC3D,0xDDB1,0xDDB2,0xDEE4,0xDC40, + 0xDD5D,0xDD51,0xDD4D,0xDD4C,0xDD5B,0xDCD4,0xDCD2,0xDCCA,0xDCC8,0xDCD0, + 0xDCC9,0xDD49,0xDDA4,0xDF12,0xDF0F,0xDF11,0xDCDB,0xDCDD,0xDCDC,0xDED4, + 0xDF21,0xDFB2,0xDD04,0xDD02,0xDF11, + /* plane 7, row 60 */ + 1 | (94 << 8), /* first, last */ + 0xD853,0xD853,0xD853,0xD85C,0xD854,0xD854,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD851,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85D,0xD85D,0x460A,0xD85D,0xD85D,0xD85D,0xD85D,0x460C,0xD85D,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD852,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x482E,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860, + 1, /* first low-surrogate */ + 0xDF16,0xDF10,0xDFBE,0xDE1A,0xDF4C,0xDF4A,0xDDF2,0xDDF1,0xDF2A, + 0xDF2C,0xDF2F,0xDF31,0xDD11,0xDD12,0xDE4B,0xDDDB,0xDDD6,0xDDDD,0xDDE2, + 0xDDE4,0xDDE0,0xDDDF,0xDDE3,0xDF6E,0xDF71,0xDDE9,0xDDEA,0xDE63,0xDFEB, + 0xDFEA,0xDCBD,0xDCBB,0xDCC6,0xDCCC,0xDCC8,0xDCCF,0xDCC9,0xDCCA,0xDCCF, + 0xDCD0,0xDDBA,0xDDFB,0xDE03,0xDEC4,0xDD49,0xDD53,0xDD36,0xDD4A,0xDD41, + 0xDD4E,0xDD19,0xDD4D,0xDD45,0xDD4C,0xDD47,0xDD48,0xDD4F,0xDD37,0xDD42, + 0xDD4A,0xDD46, 0,0xDD49,0xDD4F,0xDD51,0xDD4C, 0,0xDE06,0xDD51, + 0xDF7A,0xDF83,0xDF7E,0xDF7F,0xDF80,0xDFB5,0xDC91,0xDC94,0xDC95,0xDD21, + 0xDD20,0xDE3D,0xDE40,0xDE46,0xDE84,0xDFAC,0xDFAD, 0,0xDDDA,0xDDD9, + 0xDFE2,0xDFE1,0xDFE3,0xDFE4,0xDFDE, + /* plane 7, row 61 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD865, + 0xD865,0xD863,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867, + 1, /* first low-surrogate */ + 0xDFDF,0xDE41,0xDE59,0xDE5C,0xDE5A,0xDFE8,0xDCF6,0xDCFC,0xDCF7, + 0xDCFA,0xDCF9,0xDFC4,0xDFBE,0xDFD2,0xDFBD,0xDF95,0xDFD4,0xDDE4,0xDC61, + 0xDC62,0xDC63,0xDC64,0xDC60,0xDC5C,0xDC5D,0xDC5E,0xDDA5,0xDDA6,0xDE4C, + 0xDF68,0xDF6E,0xDF71,0xDF6B,0xDF6F,0xDFEE,0xDFF1,0xDFF0,0xDFEF,0xDC15, + 0xDC14,0xDF6E,0xDC47,0xDD7C,0xDD7A,0xDD74,0xDD76,0xDD6E,0xDD78,0xDD6D, + 0xDD6C,0xDE4E,0xDFD7,0xDFEA,0xDFE5,0xDC64,0xDDB3,0xDDA3,0xDDA5,0xDDA7, + 0xDDA2,0xDD9F,0xDDA6,0xDD9E,0xDDA8,0xDEA9,0xDEA6,0xDEAA,0xDEAB,0xDEA0, + 0xDEA1,0xDEA8,0xDEE8,0xDEE9,0xDEEA,0xDFE4,0xDFDF,0xDFE0,0xDC28,0xDC5D, + 0xDC5B,0xDC56,0xDC57,0xDC5F,0xDC62,0xDEE1,0xDEE3,0xDEDE,0xDED9,0xDEE8, + 0xDEF2,0xDEF6,0xDEE6,0xDEF4,0xDEF5, + /* plane 7, row 62 */ + 1 | (94 << 8), /* first, last */ + 0xD867,0xD867,0x4C8D,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD87E,0xD869,0xD869,0xD842,0xD842, + 0xD842,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD846,0xD846,0xD846, + 0xD846,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xD84A, + 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84E,0xD84E, + 0xD84E,0xD856,0xD87E,0xD84E,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851, + 0xD852,0xD852,0xD853,0xD853,0xD853, + 1, /* first low-surrogate */ + 0xDEE5,0xDEE2, 0,0xDD96,0xDDAA,0xDD97,0xDD70,0xDDA1,0xDD9D, + 0xDDA9,0xDD6F,0xDD7E,0xDD94,0xDD9A,0xDD73,0xDD87,0xDD71,0xDD77,0xDD88, + 0xDD8D,0xDD85,0xDD78,0xDDAD,0xDE80,0xDE81,0xDEE5,0xDEE7,0xDF7C,0xDFAF, + 0xDFE1,0xDC96,0xDCA3,0xDC90,0xDCF8,0xDD2E,0xDD75,0xDD7E,0xDD7D,0xDD7B, + 0xDD78,0xDDB0,0xDE34,0xDE36,0xDE30,0xDE1D,0xDE2E,0xDE37,0xDECE,0xDF97, + 0xDF98,0xDD7C,0xDD7E,0xDD7D,0xDD7F,0xDD0F,0xDEA4,0xDD31,0xDD2E,0xDD2F, + 0xDD32,0xDD2C,0xDFD4,0xDFDC,0xDFD8,0xDC0E,0xDD83,0xDD84,0xDF12,0xDD72, + 0xDD7C,0xDD7E,0xDEA6,0xDEA0,0xDE9E,0xDEA2,0xDD2A,0xDF18,0xDC4D,0xDC58, + 0xDC5B,0xDD14,0xDCF2,0xDEE6,0xDD64,0xDD68,0xDD60,0xDD62,0xDCD7,0xDD4B, + 0xDCE0,0xDF22,0xDD05,0xDF19,0xDF1A, + /* plane 7, row 63 */ + 1 | (94 << 8), /* first, last */ + 0xD853,0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD856,0xD856, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x4331, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD85A, + 0xD85A,0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDFC3,0xDCD8,0xDCDC,0xDF4F,0xDDF7,0xDDF4,0xDDF8,0xDD13,0xDE50, + 0xDDF0,0xDDE9,0xDDEF,0xDDED,0xDDEA,0xDDF8,0xDE05,0xDDF2,0xDF72, 0, + 0xDDF9,0xDDF3,0xDDF6,0xDDF2,0xDDF7,0xDE66,0xDE65,0xDF40,0xDD77,0xDCD1, + 0xDCD3,0xDE04,0xDD59,0xDD60,0xDD5B,0xDD5D,0xDD5E,0xDD69,0xDD5C,0xDD61, + 0xDD6A,0xDD5F,0xDD4E,0xDD5C,0xDD60,0xDD63,0xDDDB,0xDFCA,0xDFC9,0xDFC8, + 0xDCA5,0xDCA3,0xDF8E,0xDF87,0xDF89,0xDF85,0xDF86,0xDF8F,0xDF8A,0xDF90, + 0xDC98,0xDC9B,0xDE47,0xDE49,0xDE48,0xDDE5,0xDDEA,0xDDED,0xDFF0,0xDFEF, + 0xDFF2,0xDFEC,0xDC40,0xDE60,0xDE5F,0xDFEB,0xDFEC,0xDD00,0xDD01,0xDFE2, + 0xDFDF,0xDFE0,0xDFE1,0xDFE3,0xDCC3,0xDDEB,0xDDEA,0xDF61,0xDF71,0xDC6B, + 0xDC68,0xDC69,0xDC67,0xDDB0,0xDDB1, + /* plane 7, row 64 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD866,0xD866,0x4BBC,0x4BBB,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xD867,0xD849,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD842,0xD842,0xD844,0xD846,0xD87E,0xD87E,0xD849, + 0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD850,0xD850,0xD850, + 0xD867,0xD851,0xD851,0xD851,0xD851, + 1, /* first low-surrogate */ + 0xDDB2,0xDE51,0xDF74,0xDD7F,0xDD84,0xDE53,0xDE54,0xDFF0,0xDFF4, + 0xDFF1,0xDC37,0xDDBF, 0, 0,0xDDBD,0xDDBE,0xDDB7,0xDDC0,0xDDBA, + 0xDDB8,0xDDBC,0xDDBB,0xDEEB,0xDFE7,0xDC1D,0xDC1C,0xDC63,0xDC4B,0xDD38, + 0xDD36,0xDD34,0xDD37,0xDF06,0xDF1C,0xDF02,0xDF1D,0xDF1E,0xDEE0,0xDF11, + 0xDF18,0xDF21,0xDF20,0xDF10,0xDDBD,0xDDAE,0xDDB5,0xDDB8,0xDDB9,0xDDBE, + 0xDDC4,0xDDBC,0xDDBA,0xDE83,0xDEEA,0xDEEC,0xDF7E,0xDF7B,0xDFE5,0xDCA7, + 0xDC9E,0xDC9A,0xDD2F,0xDD31,0xDD83,0xDDB5,0xDE46,0xDE41,0xDE43,0xDE3D, + 0xDE42,0xDE3B,0xDE47,0xDD6B,0xDDD0,0xDD8E,0xDF11,0xDC71,0xDC89,0xDC4C, + 0xDD2B,0xDC4F,0xDC5E,0xDC63,0xDC6B,0xDD3F,0xDEE9,0xDD6D,0xDD6B,0xDD6A, + 0xDF2A,0xDCE0,0xDCDD,0xDCE1,0xDCDE, + /* plane 7, row 65 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD853,0xD855,0xD869, + 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD858,0xD858,0xD858,0xD85A,0xD851,0xD85A,0xD85A,0xD85A,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85D,0xD85D,0xD853,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD861,0xD863,0xD862,0xD862,0xD863,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD866,0xD866,0x4C14,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD869,0xD869,0xD869,0xD869,0xD869, + 1, /* first low-surrogate */ + 0xDCDC,0xDD4D,0xDF16,0xDCE3,0xDEE5,0xDEE4,0xDF1D,0xDF4B,0xDEC1, + 0xDE4E,0xDED6,0xDDFD,0xDE07,0xDDFE,0xDE03,0xDE0B,0xDDFF,0xDF7A,0xDF77, + 0xDDFB,0xDF43,0xDFED,0xDDBC,0xDCDF,0xDE05,0xDEC6,0xDEC5,0xDD74,0xDD73, + 0xDD72,0xDD78,0xDD73,0xDD7A,0xDF1C,0xDD76,0xDD75,0xDD77,0xDFCF,0xDFCE, + 0xDFCD,0xDCA8,0xDF98,0xDF92,0xDF94,0xDC9A,0xDFB4,0xDDEB,0xDDF4,0xDDF3, + 0xDDEE,0xDDF2,0xDDF0,0xDE64,0xDC05,0xDFFB,0xDFFC,0xDDF3,0xDC6C,0xDDBA, + 0xDF79,0xDF7E,0xDF78,0xDFF4,0xDC16,0xDE57,0xDDC8,0xDDC3,0xDDCE,0xDEB3, + 0xDEED,0xDEEE,0xDFF1,0xDFF8, 0,0xDC64,0xDC65,0xDF35,0xDF29,0xDF2C, + 0xDF31,0xDF2B,0xDF2E,0xDF25,0xDDDA,0xDDE0,0xDDD4,0xDDE1,0xDDDD,0xDFE7, + 0xDC12,0xDCAE,0xDCAF,0xDD86,0xDD85, + /* plane 7, row 66 */ + 1 | (94 << 8), /* first, last */ + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD842,0xD842,0xD842,0x361C,0xD844,0xD844,0xD844,0xD844, + 0xD844,0x3772,0xD848,0xD849,0xD84B,0xD850,0xD851,0xD852,0xD852,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD855,0xD855, + 0xD85C,0xD855,0xD856,0xD857,0xD857,0xD87E,0xD858,0xD858,0xD858,0xD85A, + 0xD85A,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E, + 0xD85F,0xD860,0xD860,0xD860,0xD861,0xD861,0xD862,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD864,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDDD1,0xDE58,0xDE3F,0xDE52,0xDE4B,0xDE53,0xDE50,0xDE56,0xDE57, + 0xDECD,0xDECB,0xDC31,0xDC30,0xDDD1, 0,0xDD92,0xDD90,0xDD8F,0xDD93, + 0xDD91, 0,0xDF13,0xDC7F,0xDEAC,0xDD70,0xDCE5,0xDF23,0xDF24,0xDD08, + 0xDD07,0xDF1F,0xDF20,0xDF21,0xDCE1,0xDF54,0xDF57,0xDF55,0xDDFA,0xDF38, + 0xDD86,0xDF37,0xDE53,0xDF7E,0xDF7B,0xDD71,0xDDFD,0xDDFC,0xDF46,0xDD32, + 0xDEC7,0xDD71,0xDD83,0xDD6F,0xDD7E,0xDD7D,0xDD81,0xDD7C,0xDD8A,0xDD7E, + 0xDD80,0xDD7D,0xDD7F,0xDD82,0xDFD4,0xDFD0,0xDFD2,0xDD55,0xDF9B,0xDF9A, + 0xDE4E,0xDDF1,0xDFF8,0xDFFD,0xDE5E,0xDE66,0xDD05,0xDC0A,0xDC0B,0xDC0E, + 0xDC0D,0xDC11,0xDC09,0xDC10,0xDC0C,0xDC12,0xDCC4,0xDDF7,0xDDF8,0xDF6A, + 0xDF6B,0xDDC0,0xDDC2,0xDF85,0xDF80, + /* plane 7, row 67 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD866,0xD866,0xD866, + 0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD868,0x4D0E,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xD869,0xD869,0xD869,0xD869,0xD854,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD842,0xD84E,0xD846,0xD846,0xD847,0xD848,0xD848, + 0xD848,0xD84B,0xD84E,0xD84E,0xD84E,0xD850,0xD851,0xD852,0xD853,0xD853, + 0xD853,0xD855,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD848,0xD860,0xD860,0xD861,0xD862, + 0xD862,0xD863,0xD863,0xD863,0xD864, + 1, /* first low-surrogate */ + 0xDF84,0xDF81,0xDDC4,0xDD8B,0xDD8D,0xDD8E,0xDEB7,0xDEB9,0xDEEF, + 0xDFFB,0xDFFF,0xDC67,0xDC68,0xDC69,0xDD3F,0xDF3C,0xDF4C,0xDF3D,0xDF3E, + 0xDF3F,0xDF3B,0xDDFF, 0,0xDDF6,0xDDEE,0xDDFC,0xDDF8,0xDE01,0xDDFA, + 0xDE88,0xDF80,0xDC11,0xDCFE,0xDD00,0xDD35,0xDC3C,0xDDBD,0xDDBB,0xDE5C, + 0xDE5A,0xDED1,0xDED0,0xDE0B,0xDC73,0xDD39,0xDF1A,0xDFE3,0xDD87,0xDF77, + 0xDF78,0xDEB1,0xDC6A,0xDC74,0xDEEB,0xDD7B,0xDDA5,0xDCE4,0xDD0B,0xDD0E, + 0xDD0C,0xDF39,0xDE10,0xDE11,0xDE16,0xDF81,0xDF80,0xDDFE,0xDE01,0xDE00, + 0xDF47,0xDFEF,0xDD88,0xDD8B,0xDD8D,0xDD87,0xDD85,0xDD8F,0xDD84,0xDD88, + 0xDD8E,0xDD8C,0xDFD7,0xDFD6,0xDF9F,0xDD88,0xDE03,0xDFFE,0xDFEF,0xDD09, + 0xDD08,0xDC20,0xDC24,0xDC1F,0xDC70, + /* plane 7, row 68 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xD864,0xD864,0xD864,0xD865,0xD865,0xD865,0xD866,0xD866, + 0xD866,0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD842,0xD85E,0xD846,0xD849,0xD84C, + 0xD84E,0xD84E,0xD84F,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD853, + 0x7674,0xD855,0xD857,0xD858,0xD858,0xD85A,0xD85C,0xD85C,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD860,0xD860,0xD862, + 0xD862,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD866,0xD866,0xD866,0xD866,0x4BEC,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867, + 1, /* first low-surrogate */ + 0xDE56,0xDFF7,0xDFF8,0xDFF6,0xDD90,0xDE5E,0xDFF7,0xDDD6,0xDDD5, + 0xDEBB,0xDEF0,0xDC01,0xDC6C,0xDD41,0xDD42,0xDF4F,0xDF53,0xDF58,0xDE12, + 0xDE04,0xDE13,0xDE05,0xDE0D,0xDF82,0xDF81,0xDCB5,0xDCBA,0xDDBE,0xDE65, + 0xDE63,0xDE6E,0xDE6A,0xDE6C,0xDEC4,0xDD6C,0xDFA5,0xDF12,0xDC4D,0xDF1F, + 0xDC77,0xDC78,0xDC44,0xDD7C,0xDCEB,0xDCEA,0xDCEC,0xDDA7,0xDF19,0xDF23, + 0,0xDE01,0xDE1C,0xDE03,0xDF48,0xDCDA,0xDD91,0xDD92,0xDD96,0xDD97, + 0xDD91,0xDD93,0xDFD8,0xDFD5,0xDD57,0xDD58,0xDFA2,0xDE05,0xDFFA,0xDD0C, + 0xDD0A,0xDC2E,0xDC29,0xDC2F,0xDCC5,0xDC72,0xDDC8,0xDE5A,0xDE59,0xDF89, + 0xDF88,0xDDDB,0xDDD9,0xDDDA,0xDEBC, 0,0xDC06,0xDC05,0xDC6F,0xDC6D, + 0xDC70,0xDF60,0xDF5E,0xDF63,0xDF5A, + /* plane 7, row 69 */ + 1 | (94 << 8), /* first, last */ + 0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD869,0xD842, + 0xD846,0xD848,0xD848,0xD851,0xD852,0xD853,0xD853,0xD855,0xD858,0xD85A, + 0xD85A,0xD85A,0xD85C,0xD85D,0xD85D,0xD85E,0xD85E,0xD85F,0xD85F,0xD861, + 0xD863,0xD863,0xD864,0xD864,0xD864,0xD865,0xD866,0xD867,0xD867,0xD868, + 0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD854,0xD869,0xD845,0xD84E, + 0xD850,0x4279,0xD858,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD860, + 0xD861,0xD861,0xD861,0xD864,0xD866,0xD867,0xD868,0xD868,0xD869,0xD869, + 0xD869,0xD869,0xD869,0xD869,0xD84E,0xD858,0xD85C,0xD85E,0xD862,0xD862, + 0xD866,0xD866,0xD866,0xD867,0xD868, + 1, /* first low-surrogate */ + 0xDF5F,0xDE19,0xDE1D,0xDE1B,0xDE22,0xDE1C,0xDE1E,0xDEF7,0xDF84, + 0xDC15,0xDCB8,0xDCC1,0xDD01,0xDD0A,0xDDD2,0xDE75,0xDE74,0xDE72,0xDED0, + 0xDF1B,0xDC10,0xDF79,0xDCED,0xDFB9,0xDF24,0xDFC5,0xDE03,0xDF4A,0xDCF7, + 0xDDC1,0xDDC2,0xDD94,0xDD99,0xDD9A,0xDD5A,0xDFA8,0xDC25,0xDC9E,0xDC41, + 0xDC32,0xDC33,0xDDCB,0xDDCA,0xDDCC,0xDD93,0xDDE0,0xDC71,0xDF6B,0xDE2B, + 0xDE29,0xDE1A,0xDE26,0xDE27,0xDE2A,0xDEF8,0xDC3D,0xDE76,0xDD18,0xDC7A, + 0xDD7F, 0,0xDFF0,0xDD9A,0xDD96,0xDD9E,0xDD9D,0xDDDC,0xDFDA,0xDE0B, + 0xDC02,0xDC42,0xDE67,0xDF8B,0xDDE2,0xDF71,0xDE2F,0xDE2E,0xDCC6,0xDD8E, + 0xDE7B,0xDE77,0xDE78,0xDE7C,0xDC7C,0xDE07,0xDD97,0xDFD9,0xDD0D,0xDD0E, + 0xDDE3,0xDDE4,0xDEF3,0xDC75,0xDE37, + /* plane 7, row 70 */ + 1 | (53 << 8), /* first, last */ + 0xD868,0xD869,0xD869,0xD869,0xD869,0xD84B,0xD868,0xD863,0xD853, + 0xD858,0xD85D,0xD85D,0xD864,0xD864,0xD867,0xD868,0xD869,0xD869,0xD842, + 0xD851,0xD853,0xD857,0xD863,0xD864,0xD864,0xD868,0xD842,0xD869,0xD869, + 0xD84C,0xD854,0xD864,0xD869,0xD845,0xD85F,0xD866,0xD868,0xD853,0xD868, + 0xD869,0xD854,0xD867,0xD867,0xD869,0xD85D,0xD864,0xD845,0xD85E,0xD864, + 0xD869,0xD85A,0xD85E,0xD865, + 1, /* first low-surrogate */ + 0xDE35,0xDD8F,0xDE80,0xDE7F,0xDED4,0xDEB4,0xDFEC,0xDF75,0xDD10, + 0xDE69,0xDDA4,0xDFDB,0xDDD1,0xDF8D,0xDF76,0xDE39,0xDE84,0xDE82,0xDED2, + 0xDCEE,0xDD11,0xDF84,0xDF74,0xDF8F,0xDF8E,0xDE3B,0xDCCB,0xDE88,0xDE86, + 0xDF5C,0xDFA4,0xDC75,0xDE8B,0xDD19,0xDC9F,0xDDE5,0xDE40,0xDD12,0xDEFB, + 0xDE8C,0xDFA5,0xDC77,0xDC78,0xDED6,0xDFDF,0xDDD2,0xDD1A,0xDFA9,0xDDD3, + 0xDCCA,0xDDC4,0xDCB1,0xDE64, + /* plane 7, row 71: --- */ + /* plane 7, row 72: --- */ + /* plane 7, row 73: --- */ + /* plane 7, row 74: --- */ + /* plane 7, row 75: --- */ + /* plane 7, row 76: --- */ + /* plane 7, row 77: --- */ + /* plane 7, row 78: --- */ + /* plane 7, row 79: --- */ + /* plane 7, row 80: --- */ + /* plane 7, row 81: --- */ + /* plane 7, row 82: --- */ + /* plane 7, row 83: --- */ + /* plane 7, row 84: --- */ + /* plane 7, row 85: --- */ + /* plane 7, row 86: --- */ + /* plane 7, row 87: --- */ + /* plane 7, row 88: --- */ + /* plane 7, row 89: --- */ + /* plane 7, row 90: --- */ + /* plane 7, row 91: --- */ + /* plane 7, row 92: --- */ + /* plane 7, row 93: --- */ + /* plane 7, row 94: --- */ + /* plane 15, row 1 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0x5301,0xD842,0xD842,0xD87E, + 0xD842,0xffff,0xD842,0xD844,0xD845,0xD846,0xD846,0xD848,0xffff,0xD851, + 0xD840,0xD840,0xD840,0xD840,0xffff,0xD840,0x3436,0xD840,0xD841,0x434F, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD846,0xD842,0xffff,0x53FA,0xD844, + 0xD844,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0x9F99,0xD846,0xffff, + 0xD847,0xD847,0xD847,0xD87E,0xD858,0xffff,0xD848,0xD848,0xD849,0xD84C, + 0x6C49,0xD84F,0xD851,0xD851,0x8FB7,0xD845,0x3406,0xffff,0xD840,0xD840, + 0xD840,0x4F29,0x343E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD841,0xD858,0xD841,0xD841, + 1, /* first low-surrogate */ + 0xDC02,0xDC8C,0xDCD4,0xDDA5,0xDC92,0xDC93,0xDCD8,0xDCD9,0xDDA7, + 0xDE2B,0xDE2C,0xDE2D,0xDE30,0xDE2E,0xDEAB, 0,0xDD2D,0xDD6D,0xDC34, + 0xDE0F, 0,0xDF9D,0xDDA2,0xDDD4,0xDF56,0xDFC3,0xDC14, 0,0xDF1A, + 0xDC0F,0xDC10,0xDC9A,0xDC9B, 0,0xDDAC, 0,0xDC97,0xDD46, 0, + 0xDD76,0xDD77,0xDDAE,0xDE3A,0xDE7D,0xDFC5,0xDFA8, 0, 0,0xDE41, + 0xDE42,0xDDD8,0xDDD9,0xDEAA,0xDEAB,0xDD42,0xDD41, 0,0xDFC6, 0, + 0xDD35,0xDD36,0xDD37,0xDC83,0xDF4D, 0,0xDDB5,0xDF17,0xDC82,0xDFB6, + 0,0xDC72,0xDD5C,0xDDA8, 0,0xDDE3, 0, 0,0xDCE6,0xDD44, + 0xDD45, 0, 0,0xDDC4,0xDDC5,0xDDC6,0xDDC7,0xDDC8,0xDDC9,0xDDCA, + 0xDDD4,0xDD7D,0xDE72,0xDDB2,0xDDB4, + /* plane 15, row 2 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xffff,0xD842,0xD842,0xD842,0xD842,0xD87E, + 0xD842,0xD840,0x534E,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD844,0xD844,0xD844,0xffff,0xD845,0xD845,0xD845,0xD845,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xffff,0xD846,0xD847,0xD847,0xD847,0x5C81, + 0xD848,0xffff,0xD848,0xD848,0xD848,0xD848,0x5F10,0xD849,0xD84A,0x6268, + 0xD84A,0xD84C,0xD84C,0xffff,0xD84C,0x6742,0x6740,0x51EA,0xD84E,0xD84E, + 0xD84F,0x6C62,0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,0xffff,0xffff, + 0x7391,0xD854,0xD855,0xD855,0xD855,0xffff,0xD859,0xD859,0xD85A,0xD85A, + 0xD85A,0x8FBB,0x8FBC,0xffff,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD841, + 1, /* first low-surrogate */ + 0xDE82,0xDEC7,0xDEC8, 0,0xDC3C,0xDC3D,0xDC3E,0xDC3F,0xDC24, + 0xDCD3,0xDD47, 0,0xDE3D,0xDEE2,0xDFB8,0xDFB9,0xDFC2,0xDFBA,0xDFC6, + 0xDFBB,0xDDAD,0xDE4C,0xDE4D, 0,0xDEB2,0xDEB3,0xDEB4,0xDEB5,0xDDC3, + 0xDDC4,0xDDC5,0xDDC6,0xDDC7, 0,0xDFCE,0xDC30,0xDD47,0xDD48, 0, + 0xDC5C, 0,0xDC5F,0xDF18,0xDF19,0xDF7E, 0,0xDDB0,0xDE75, 0, + 0xDE76,0xDC41,0xDD42, 0,0xDFBD, 0, 0, 0,0xDF1E,0xDF1F, + 0xDC87, 0,0xDC78,0xDD88,0xDD89,0xDD8A,0xDE17,0xDE15, 0, 0, + 0,0xDCE5,0xDE09,0xDF3B,0xDF4F, 0,0xDE2E,0xDE2F,0xDEFF,0xDEFD, + 0xDEFE, 0, 0, 0,0xDC23,0xDCEA,0xDD2A,0xDD49,0xDD4A,0xDD4B, + 0xDDDF,0xDDE0,0xDDE1,0xDDE2,0xDDC1, + /* plane 15, row 3 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xD840,0xD840,0xD841,0xD840,0xD840,0xffff,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD87E,0xD842,0xffff,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0x3575,0xD842,0xD842,0xD842,0xffff,0xffff,0xD844,0x56E8,0xD844, + 0x575B,0xD844,0xD844,0xffff,0xD844,0xffff,0xD844,0xD844,0xD844,0xD87E, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD846,0xffff,0xD846,0xD846,0xD847,0xffff,0xD847,0xD847,0x5C99,0xD847, + 0xD847,0xD847,0x5C97,0xD847,0xD847, + 1, /* first low-surrogate */ + 0xDDE3,0xDDE4,0xDDE5,0xDDC0,0xDDE6,0xDDF7, 0,0xDDE7,0xDDE8, + 0xDDE9,0xDDEA,0xDDEB,0xDD0E,0xDD80,0xDD81,0xDDBA,0xDDBB,0xDDBC,0xDDBD, + 0xDE3F,0xDE40,0xDE88,0xDC1F,0xDC46, 0,0xDC47,0xDC48,0xDD36,0xDD72, + 0xDD96,0xDE47,0xDEE7,0xDF34,0xDF35,0xDF36,0xDF37,0xDFE3,0xDFE4,0xDFE5, + 0xDFEB, 0,0xDFE6,0xDFE7,0xDFE8, 0, 0,0xDDB9, 0,0xDDBA, + 0,0xDE63,0xDE64, 0,0xDE65, 0,0xDE66,0xDE7C,0xDE67,0xDC5A, + 0xDD59,0xDDE9,0xDDEA,0xDDEB,0xDDEC,0xDDED,0xDDEE,0xDDEF,0xDEBF,0xDECB, + 0xDEC3,0xDED5,0xDEC4,0xDEC5,0xDED3,0xDEC6,0xDEC7,0xDEC8,0xDEC9,0xDECA, + 0xDD4A, 0,0xDDD1,0xDF61,0xDC37, 0,0xDD64,0xDD66, 0,0xDD67, + 0xDD68,0xDD69, 0,0xDD73,0xDD6A, + /* plane 15, row 4 */ + 1 | (94 << 8), /* first, last */ + 0xD847,0x6762,0xffff,0xD848,0x383C,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD87E, + 0xD849,0xD849,0xD849,0xD84A,0xD84A,0x62A4,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84C,0xD84C, + 0xD84C,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD87E, + 0xD84C,0x6766,0xD84C,0xD84E,0xD84E,0xD84E,0xffff,0xD84E,0xD84E,0xffff, + 0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0x6CA3,0xD84F,0xffff,0xD850,0xD850,0xD850,0x3DA5,0xffff, + 0xD850,0x707F,0xD850,0xD851,0xD851,0xD851,0xffff,0xD851,0xD87E,0xD852, + 0xD853,0xD853,0xD853,0xD854,0xD854, + 1, /* first low-surrogate */ + 0xDD6B, 0, 0,0xDC72, 0,0xDDB9,0xDF1C,0xDF36,0xDFBC, + 0xDFBE,0xDFBF,0xDFC0,0xDC87,0xDDDC,0xDDDD,0xDDF5,0xDDDE,0xDDDF,0xDC9E, + 0xDDE0,0xDDE1,0xDDE2,0xDE2C,0xDE2D, 0,0xDEA9,0xDE9C,0xDE9D,0xDE9E, + 0xDE9F,0xDEA0,0xDEA1,0xDEA2, 0,0xDEA3,0xDEA4,0xDEA7,0xDC42,0xDC93, + 0xDD51, 0,0xDD52,0xDD44,0xDD53,0xDF22,0xDFC6,0xDFC7,0xDFC9,0xDCDD, + 0xDFCA, 0,0xDFC8,0xDF24,0xDF25,0xDF26, 0,0xDF27,0xDF28, 0, + 0xDC58,0xDCFB,0xDCA7,0xDC88,0xDC89,0xDCA5,0xDCA8,0xDCA9,0xDCAA,0xDCAB, + 0xDCAC,0xDCAD, 0,0xDC79, 0,0xDD94,0xDD95,0xDD96, 0, 0, + 0xDD97, 0,0xDD98,0xDD4E,0xDD4F,0xDE19, 0,0xDF41,0xDD2A,0xDCF7, + 0xDC04,0xDC19,0xDC17,0xDC40,0xDCEC, + /* plane 15, row 5 */ + 1 | (94 << 8), /* first, last */ + 0xD855,0xD855,0x77F6,0xD855,0xD855,0xD856,0xD857,0xD858,0xffff, + 0xD858,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x8FC8,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xffff,0x95F5,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xD840,0xffff,0xD845,0xD840,0x4FAB,0xD840,0xD840,0xD840, + 0xD840,0xD840,0x3453,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD841,0xD841,0x5C2D,0xD841,0xD858,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xffff,0xffff,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD843,0x549C,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xffff,0xD843,0xD843,0xD843, + 1, /* first low-surrogate */ + 0xDC1B,0xDC1C, 0,0xDE0E,0xDF52,0xDED8,0xDE26,0xDE74, 0, + 0xDE75,0xDDC6,0xDF0B,0xDF0C,0xDF0D,0xDF0E,0xDF0F,0xDF10, 0,0xDC59, + 0xDC5A,0xDE83,0xDE84,0xDE85, 0, 0,0xDE20,0xDE21,0xDE22,0xDE23, + 0xDE24,0xDE29,0xDCF4, 0,0xDD8F,0xDD51, 0,0xDE17,0xDE18,0xDE5B, + 0xDE19,0xDE1A, 0,0xDE1B,0xDE1C,0xDE1D,0xDE1E,0xDE1F,0xDE20,0xDE21, + 0xDC8B,0xDC88, 0,0xDD85,0xDE87,0xDDC7,0xDE4C,0xDE4D,0xDEFC,0xDEFD, + 0xDEFE,0xDEFF, 0, 0,0xDC56,0xDC57,0xDC58,0xDC59,0xDCDC,0xDCDD, + 0xDD73,0xDD9D,0xDDA1,0xDD9E,0xDD9F,0xDDA0,0xDDE6,0xDE51,0xDE52,0xDF3D, + 0xDC22, 0,0xDC23,0xDC24,0xDC25,0xDC26,0xDC27,0xDC28,0xDC29,0xDC2A, + 0xDC2B, 0,0xDC40,0xDC2C,0xDC2D, + /* plane 15, row 6 */ + 1 | (94 << 8), /* first, last */ + 0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xffff,0xD844,0xD844,0xD844,0xD844,0xD844,0x5788, + 0xD845,0xffff,0xD845,0xD845,0xffff,0xffff,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0x34AC,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD87E,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848,0xffff, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xffff,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849, + 1, /* first low-surrogate */ + 0xDC2E,0xDC2F,0xDC30,0xDDD0,0xDEA8,0xDE94,0xDE95,0xDE96,0xDE97, + 0xDE98,0xDE9C,0xDE9B, 0,0xDEA1,0xDEA0,0xDE99,0xDE9A,0xDEA7, 0, + 0xDD64, 0,0xDE00,0xDE01, 0, 0,0xDEE5,0xDEE9,0xDEFB,0xDEFC, + 0xDEEA,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDEEF,0xDEFA,0xDEF0,0xDEF1,0xDEF2, + 0xDEF3,0xDEF4,0xDD52,0xDD53,0xDD54,0xDD55,0xDD58,0xDD56, 0,0xDDDD, + 0xDDDE,0xDDE3,0xDDDF,0xDDE0,0xDF22,0xDF23,0xDF68,0xDFDF, 0,0xDC44, + 0xDD94,0xDD95,0xDD96,0xDD97,0xDD98,0xDD99,0xDC79,0xDD9A,0xDD9B,0xDD9D, + 0xDD9E,0xDD9F,0xDDA0,0xDFF3,0xDFF2,0xDC1F,0xDC88,0xDD8F,0xDD90, 0, + 0xDDFD,0xDDFE,0xDDFF,0xDE00,0xDE01,0xDE1A, 0,0xDDE3,0xDDE4,0xDDE5, + 0xDDE6,0xDDE7,0xDDEB,0xDDE8,0xDDE9, + /* plane 15, row 7 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0x39DE,0xD84A,0x62C3,0xD84B,0xD84B,0xD84B, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0x6619,0xD84C,0xD84C,0xffff,0xD84D,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0x3B49,0xD84C,0x67A1,0xD84C,0x67A6,0xD84C, + 0xffff,0xD84D,0xD84C,0xD84C,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x3C91, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0x3CD3,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD84F,0x3DA9,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851, + 0xffff,0xD851,0xD851,0xD851,0xD851, + 1, /* first low-surrogate */ + 0xDDEA,0xDE1D,0xDDA4,0xDDA3,0xDED4,0xDEC6,0xDEC7,0xDEC8,0xDEC9, + 0xDECA,0xDECB,0xDECC,0xDECD, 0,0xDECE, 0,0xDEB8,0xDEB9,0xDEBA, + 0xDC6E,0xDCDB,0xDCDC,0xDD68,0xDD69,0xDD6A,0xDD6B,0xDD6C,0xDD6D,0xDD6E, + 0,0xDF24,0xDF25, 0,0xDC00,0xDFE5,0xDFF9,0xDFE7,0xDFE8,0xDFE9, + 0xDFFE,0xDFEA,0xDFEB,0xDFEC, 0,0xDFED, 0,0xDFEE, 0,0xDFEF, + 0,0xDC17,0xDFF0,0xDFF1,0xDC94,0xDD5B,0xDD5C,0xDD5D,0xDF2F, 0, + 0xDF30,0xDF31,0xDF32,0xDF33,0xDCCC,0xDCCD,0xDCCE,0xDCAE,0xDCAF,0xDCB0, + 0,0xDCCF,0xDCD0,0xDCD1,0xDCD2,0xDCD3, 0,0xDCD4, 0,0xDDA6, + 0xDDA7,0xDDA8,0xDDB0,0xDDA9,0xDDAA,0xDDAB,0xDDAC,0xDDAD,0xDCFB,0xDCFC, + 0,0xDE2D,0xDE2E,0xDE50,0xDE2F, + /* plane 15, row 8 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xffff,0xD852,0xD853,0xD853,0xD853,0xD853,0xD855,0xD855,0xD855,0xD855, + 0x77FE,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xffff,0xD857,0xffff,0xD857, + 0xD857,0xD858,0x7F57,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0x43D5,0xD859,0xD859,0xffff,0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD87E,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x82C5,0xD85A,0xD85C, + 0xD85C,0xD85C,0xffff,0xD85C,0xD85C,0xD85D,0xD85F,0xD861,0x8FDF,0xD861, + 0xD861,0x8FDC,0x488C,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0x4099,0xD861,0xD861,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDE30,0xDF65,0xDCE6,0xDD0C,0xDD02,0xDD03,0xDD04,0xDD05,0xDD06, + 0,0xDFC0,0xDC24,0xDC25,0xDD16,0xDD32,0xDC20,0xDC21,0xDC22,0xDC23, + 0,0xDC25,0xDE19,0xDE24,0xDE1A,0xDE1B,0xDE1C,0xDE1D,0xDD52,0xDE1E, + 0xDF5A,0xDF5B,0xDF5C,0xDF5D,0xDF5E,0xDD31, 0,0xDE29, 0,0xDF88, + 0xDF89,0xDE89, 0,0xDF56,0xDCD1,0xDCE6,0xDD32,0xDD33,0xDE52,0xDE53, + 0,0xDE54,0xDE55, 0, 0,0xDF29,0xDF2A,0xDF2B,0xDF2C,0xDF2D, + 0xDD92,0xDF2E,0xDF2F,0xDF30,0xDF31,0xDF32,0xDF33, 0,0xDF34,0xDD9B, + 0xDE23,0xDE24, 0,0xDE25,0xDE27,0xDE16,0xDCA0,0xDC6F, 0,0xDC70, + 0xDC71, 0, 0,0xDC72,0xDC73,0xDC74,0xDE9C,0xDEAA,0xDE9D,0xDE9E, + 0,0xDEAB,0xDE9F,0xDE35,0xDE38, + /* plane 15, row 9 */ + 1 | (94 << 8), /* first, last */ + 0xD868,0xD840,0xD840,0xD856,0xD840,0xD869,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0x4FE4,0xD840,0xD840,0xffff,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD858,0xD841,0xffff,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xffff,0xD842,0xD842,0xD842,0xD840,0xD842, + 0xD842,0xD843,0x551B,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0x3588,0xffff,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD844,0xD844,0x57AA,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0x57AB,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD845, + 1, /* first low-surrogate */ + 0xDF8D,0xDC35,0xDC36,0xDEEE,0xDCB4,0xDEC9,0xDD32,0xDD55,0xDE44, + 0xDE45,0xDE46,0xDE47, 0,0xDE48,0xDE49, 0,0xDE4A,0xDE4B,0xDE4C, + 0xDE4D,0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE99,0xDDD1, 0,0xDDD2,0xDDD3, + 0xDDD4,0xDDD5,0xDF21,0xDF22,0xDF23,0xDC68,0xDC69,0xDC6A,0xDCE2,0xDD45, + 0xDDEC,0xDDED,0xDDEE,0xDDEF, 0,0xDE62,0xDE63,0xDEF4,0xDC6F,0xDF44, + 0xDF45,0xDC79, 0,0xDC7A,0xDC7B,0xDC7C,0xDC7D,0xDC7E,0xDC7F,0xDC80, + 0, 0,0xDC81,0xDC82,0xDC83,0xDC84,0xDC85,0xDC86,0xDC87,0xDC8F, + 0xDC88,0xDC89,0xDEC5,0xDEC6, 0,0xDEC7,0xDEC8,0xDEC9,0xDECA,0xDECB, + 0xDECC, 0,0xDECD,0xDECE,0xDEE3,0xDECF,0xDED0,0xDED1,0xDED2,0xDED3, + 0xDEC4,0xDED4,0xDED5,0xDED6,0xDD20, + /* plane 15, row 10 */ + 1 | (94 << 8), /* first, last */ + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0x36C9,0xD87E,0xffff,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD846,0xD846,0xD846,0xD846,0x5BA9,0xD846,0xD846,0xD846,0xD846, + 0x3917,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD85A,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD85A,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD87E,0xD849,0xD849,0xffff,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD87E,0xD849,0xD849,0xffff,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDD21,0xDE1A,0xDE12,0xDE14,0xDE15,0xDE16,0xDE19,0xDE17,0xDE18, + 0,0xDC61, 0,0xDF12,0xDF13,0xDF14,0xDF15,0xDF16,0xDF17,0xDF18, + 0xDF19,0xDD61,0xDD62,0xDD63,0xDDF5, 0,0xDDF6,0xDDF7,0xDDF8,0xDF29, + 0,0xDC5D,0xDC57,0xDC58,0xDC59,0xDC5A,0xDC5B,0xDDBB,0xDDD1,0xDDBC, + 0xDDBD,0xDCDF,0xDDD0,0xDDBE,0xDDBF,0xDDC0,0xDDC1,0xDDC2,0xDDC3,0xDDC4, + 0xDF6C,0xDCA1,0xDCA2,0xDCA3,0xDD93,0xDE0D,0xDE0F,0xDE0E,0xDE10,0xDE11, + 0xDE12,0xDC95,0xDCE5,0xDE2F, 0,0xDE57,0xDE30,0xDE68,0xDE2B,0xDE31, + 0xDE58,0xDCA2,0xDE32,0xDE59, 0,0xDE5A,0xDE33,0xDE5B,0xDE5C,0xDE5D, + 0xDE1E,0xDDAE,0xDDAF,0xDE3B,0xDE3C,0xDE3D,0xDF07,0xDF08,0xDF09,0xDF0A, + 0xDF0B,0xDF0C,0xDF0D,0xDF0E,0xDF0F, + /* plane 15, row 11 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD87E,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD843, + 0xffff,0xD84C,0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D, + 0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0x6811,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0x7551,0xD850,0xD850,0xD850,0xD850, + 1, /* first low-surrogate */ + 0xDF10,0xDF22,0xDF11,0xDF12,0xDF13,0xDF14,0xDF15,0xDF16,0xDF17, + 0xDF18,0xDCB8, 0,0xDC46,0xDC47,0xDC48,0xDCE1,0xDD81,0xDD83,0xDC75, + 0,0xDD85,0xDD86,0xDF2A,0xDCD1,0xDF2B,0xDF6B,0xDC18,0xDC19,0xDC1A, + 0,0xDC1B,0xDC1C,0xDC1D,0xDC1E,0xDC1F,0xDC20,0xDC21,0xDC22,0xDC23, + 0,0xDC24,0xDC25,0xDC26,0xDC27,0xDC28,0xDC29,0xDC2A,0xDDEF,0xDF49, + 0xDF4A,0xDF4B,0xDF4C,0xDF4D,0xDF4E,0xDF4F,0xDF50,0xDF51,0xDF52,0xDF53, + 0xDF54,0xDF5A,0xDF55,0xDC5F,0xDD02,0xDD03,0xDD04,0xDD05,0xDCD5,0xDD06, + 0xDD07,0xDCD6,0xDD08,0xDD09,0xDD0A,0xDD0B,0xDCD7,0xDD0C,0xDD0D,0xDDC8, + 0xDDC9,0xDDCA,0xDDCB,0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2, + 0,0xDDD3,0xDDD4,0xDDD5,0xDDD6, + /* plane 15, row 12 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xffff,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0x3EBD,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD87E,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xffff,0xD852,0xD852,0xD852,0xD853,0xD853, + 0xD853,0xD853,0x7553,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD854,0xD854,0xD87E,0xD854,0xD855,0xD855,0xD855, + 0x7818,0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0x4133,0xD855,0xD855, + 0xD855,0xD856,0xD856,0xD856,0xD856,0xffff,0x7AD7,0xD84E,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD857, + 1, /* first low-surrogate */ + 0xDDD7,0xDDE2,0xDDD8,0xDD04,0xDD05,0xDD06, 0,0xDE43,0xDE44, + 0xDF84,0xDF8F,0xDF85,0xDF86,0xDD2F,0xDD1A,0xDD1B,0xDD1C, 0,0xDD1D, + 0xDD1E,0xDD1F,0xDD20,0xDD21,0xDD22,0xDD2C,0xDD23,0xDD24,0xDD0E,0xDD25, + 0xDD2B,0xDD2C,0xDD0B,0xDEEE, 0,0xDFC3,0xDFD8,0xDFD9,0xDC38,0xDC39, + 0xDC3A,0xDC3B, 0,0xDC3C,0xDC3D,0xDC3E,0xDC3F,0xDC40,0xDD48,0xDD4C, + 0xDF28,0xDF51,0xDF52,0xDC4C,0xDD23,0xDD45,0xDD24,0xDC31,0xDC32,0xDC33, + 0,0xDC34,0xDC35,0xDC36,0xDC40,0xDC37, 0,0xDC38,0xDC3D,0xDE38, + 0xDE39,0xDE3A,0xDE3B,0xDE3C,0xDE4C,0xDF73,0xDF74, 0,0xDF75,0xDF76, + 0xDF79,0xDD41,0xDD42,0xDD43,0xDE5B, 0, 0,0xDCA6,0xDE5C,0xDEE5, + 0xDEE6,0xDEE7,0xDEE8,0xDEED,0xDE30, + /* plane 15, row 13 */ + 1 | (94 << 8), /* first, last */ + 0x7C7E,0xD857,0xD857,0xD858,0xD858,0xD858,0xD859,0xffff,0xD859, + 0xD859,0xD859,0xffff,0xD859,0xffff,0xD859,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C, + 0x867E,0xD85C,0xffff,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xffff, + 0xD85D,0xD85D,0xD85F,0xD85F,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD860,0x4844,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD863, + 0xD863,0xD863,0xD864,0xffff,0xD840,0xD840,0xD840,0xD840,0xD840,0xffff, + 0xD840,0xD840,0xD87E,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD841,0xD841, + 2, /* first low-surrogate */ + 0xDE31,0xDF94,0xDF51,0xDFFD,0xDFFE,0xDCE9, 0,0xDEB3, + 0xDE84,0xDE94, 0,0xDE9C, 0,0xDE85,0xDD00,0xDD37,0xDD57,0xDF54, + 0xDF68,0xDF55,0xDF5C,0xDF56,0xDF57,0xDF58,0xDF59,0xDF5A,0xDF5B,0xDE34, + 0,0xDE35, 0,0xDE39,0xDE36,0xDE37,0xDE38,0xDDE5,0xDE59, 0, + 0xDE3A,0xDE3B,0xDD28,0xDE89, 0,0xDE8A,0xDE8B,0xDE8C,0xDE8D,0xDFBC, + 0xDEA3, 0,0xDEA4,0xDC93,0xDC94,0xDC95,0xDC96,0xDC97,0xDEB9,0xDE4F, + 0xDE50,0xDE51,0xDC76, 0,0xDCFB,0xDC83,0xDD38,0xDD5D,0xDE71, 0, + 0xDE77,0xDE78,0xDC07,0xDEC3,0xDE79,0xDE7A,0xDE7B,0xDE7C,0xDE72,0xDE7D, + 0xDEA0,0xDE7E,0xDE7F,0xDE80,0xDE81,0xDE82,0xDE83,0xDE9E,0xDE84,0xDE85, + 0xDE86,0xDE87,0xDE88,0xDC93,0xDC94, + /* plane 15, row 14 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD841,0xD841,0xffff,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0x5266,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD843,0xD843,0x5520,0xD843,0xD843,0xD843,0xffff,0xffff, + 0xD843,0xD843,0x5521,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0x57D7,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xffff,0x36E1,0xD845,0xD87E,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x36E2,0xD845, + 0xD846,0xD846,0xD846,0xD846,0x5BBE, + 1, /* first low-surrogate */ + 0xDC95,0xDCEF,0xDCF0, 0,0xDD8D,0xDD8F,0xDD90,0xDD91,0xDD92, + 0xDDDE,0xDDE1,0xDE53, 0,0xDF4A,0xDF4B,0xDF4C,0xDF51,0xDF4D,0xDF48, + 0xDC74,0xDC75,0xDD20,0xDD21,0xDDA5,0xDDA6,0xDE73,0xDE74,0xDF50,0xDF51, + 0xDF52,0xDF53,0xDCDB,0xDCDC, 0,0xDCDD,0xDCDE,0xDCFF, 0, 0, + 0xDCDF,0xDCE0, 0,0xDCE1,0xDCE2,0xDCE3,0xDCE4,0xDCE5,0xDCE6,0xDCE7, + 0xDCE8,0xDCE9,0xDCEA,0xDF07,0xDF08,0xDF09,0xDF0A,0xDF0B,0xDF0C,0xDF0D, + 0,0xDF1A,0xDF0E,0xDF0F,0xDF10,0xDF1C,0xDD27,0xDD66,0xDD98,0xDD99, + 0xDE33,0xDE24,0xDE25,0xDE26, 0, 0,0xDF3E,0xDC64,0xDF3F,0xDF57, + 0xDF40,0xDF41,0xDF58,0xDF42,0xDF43,0xDF44,0xDF45,0xDF46, 0,0xDF47, + 0xDD6B,0xDD6C,0xDE10,0xDE11, + /* plane 15, row 15 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD847,0xD847,0xffff,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD848,0xD848,0xD848,0xD848,0x387C,0xD848,0xD848,0xD848,0xD848,0xD848, + 0x38E3,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xffff,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xffff,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD859,0xD859,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0x3AEC,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDF75,0xDFEF,0xDC6A,0xDC6B, 0,0xDC6C,0xDC6D,0xDC6E,0xDDEF, + 0xDDF0,0xDDF1,0xDDF2,0xDDF3,0xDDF4,0xDDF5,0xDDFF,0xDDF6,0xDE02,0xDDF7, + 0xDC22,0xDCC4,0xDCC3,0xDE28, 0,0xDF20,0xDF25,0xDF22,0xDF23,0xDFEB, + 0,0xDCF9,0xDCFA,0xDE99,0xDE9A,0xDE9B,0xDE63, 0,0xDE5E,0xDE5F, + 0xDE60,0xDE9C,0xDE61,0xDE9D,0xDF54,0xDF55,0xDF56,0xDF57,0xDF58,0xDF59, + 0xDF5A,0xDF19,0xDF6A,0xDF5B,0xDF5C,0xDF5D,0xDF66, 0,0xDF5E,0xDF5F, + 0xDF1A,0xDF60,0xDF61, 0,0xDF62,0xDF1B,0xDF63,0xDC10,0xDC11,0xDC4C, + 0xDC9B,0xDCEB,0xDCEC,0xDCED,0xDCEE,0xDDA3,0xDDA8,0xDDA6, 0,0xDF2F, + 0xDF30,0xDF31,0xDF32,0xDF33,0xDC4F,0xDC51,0xDC52,0xDC7D,0xDC53,0xDC54, + 0xDC55,0xDC56,0xDC57,0xDC58,0xDC59, + /* plane 15, row 16 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0xD84D,0xD84D,0x6857,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xffff,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0x3CDF,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD87E, + 0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDC5A,0xDC5B,0xDC5C, 0,0xDC5D,0xDC5E,0xDC5F,0xDC6F,0xDC60, + 0xDC61,0xDC62,0xDC63,0xDC72,0xDC64, 0,0xDC6E,0xDCB5,0xDF65,0xDF66, + 0xDF67,0xDF68,0xDF69,0xDF6A,0xDF6B,0xDF6C,0xDD0E,0xDD43, 0,0xDD0F, + 0xDD44,0xDD45,0xDD46,0xDD47,0xDD48,0xDD49,0xDD10,0xDD4A,0xDD4B,0xDD4C, + 0xDD4D, 0,0xDD4E,0xDD4F,0xDD50,0xDD51,0xDD52,0xDD53,0xDD54,0xDD55, + 0xDD56,0xDD57,0xDD58,0xDD59,0xDD5A,0xDD1D,0xDD5B,0xDD5C,0xDD5D,0xDD06, + 0,0xDDFE,0xDDFF,0xDE00,0xDE01,0xDE02,0xDE03,0xDE04,0xDE05,0xDE06, + 0xDE07,0xDE18,0xDE08,0xDE09,0xDDF3,0xDE0A,0xDE0B,0xDE1B,0xDE0C,0xDE0D, + 0xDE0E,0xDE0F,0xDE10,0xDD0F,0xDD61,0xDD79,0xDFC1,0xDFAC,0xDFAD,0xDD43, + 0xDD44,0xDD45,0xDD46,0xDD47,0xDD48, + /* plane 15, row 17 */ + 1 | (94 << 8), /* first, last */ + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3EC7,0xD87E,0xD852, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xffff,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD855,0xD854,0xD854,0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xffff, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD856,0xD856,0xD856,0xffff, + 0xD856,0xD856,0xD856,0xD856,0xffff,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xffff, + 0xffff,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x7F3C,0xD858, + 0xD858,0xD858,0xD859,0xffff,0xD859, + 1, /* first low-surrogate */ + 0xDD49,0xDD64,0xDD4A,0xDD4B,0xDD4C,0xDD4D, 0,0xDD2D,0xDF39, + 0xDC57,0xDC58,0xDC59,0xDC5F,0xDC5A,0xDD6A,0xDF2B,0xDF5D,0xDF5E,0xDF5F, + 0,0xDF60,0xDF61,0xDC58,0xDC59,0xDD4A,0xDD4B,0xDD4C,0xDD4D,0xDD4E, + 0xDC57,0xDFB3,0xDFB4,0xDC6E,0xDC5B,0xDC5C, 0,0xDC5D,0xDC5E, 0, + 0xDC6C,0xDE3D,0xDE54,0xDE3E,0xDE55,0xDE56,0xDE3F,0xDE57,0xDE58,0xDE59, + 0xDE5A,0xDE5B,0xDE5C,0xDF88,0xDF89, 0,0xDD58,0xDD59,0xDD5A, 0, + 0xDE67,0xDE68,0xDE69,0xDE6A, 0,0xDE6B,0xDE6C,0xDEFE,0xDEFF,0xDF00, + 0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,0xDE39,0xDE3A,0xDE3B,0xDE3C, 0, + 0,0xDFB2,0xDFB3,0xDFB4,0xDFB5,0xDFB6,0xDFB7,0xDFB8, 0,0xDEA2, + 0xDF61,0xDF62,0xDC14, 0,0xDCEB, + /* plane 15, row 18 */ + 1 | (94 << 8), /* first, last */ + 0xD859,0xD859,0xffff,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xffff,0xffff,0xffff,0xD859,0xffff,0xD85A,0xD85A,0xffff,0x8273,0xD85A, + 0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD87E,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xffff,0xD85C,0xD85C,0xD85D,0x4627, + 0xD85D,0xD85E,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0x96BE, + 0xD864,0xD866,0xD840,0x66FA,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840, + 1, /* first low-surrogate */ + 0xDD42,0xDD48, 0,0xDD43,0xDD4E,0xDD44,0xDD45,0xDEB4,0xDEB5, + 0, 0, 0,0xDEB6, 0,0xDCE1,0xDD05, 0, 0,0xDF9A, + 0,0xDF9B,0xDF9C,0xDF9D,0xDF9E,0xDF9F,0xDD9A,0xDFA0,0xDFA1,0xDFA2, + 0xDFB5,0xDFA3,0xDFA4, 0,0xDFA5,0xDFA6,0xDFA7,0xDFA8,0xDFAF,0xDFA9, + 0xDFAA,0xDFAB,0xDFAC,0xDFAD,0xDFB3, 0,0xDDA0,0xDE56,0xDE34, 0, + 0xDE3C,0xDC0C, 0,0xDC3E,0xDCA3,0xDD30,0xDD31,0xDE97,0xDE98,0xDE99, + 0xDE9A,0xDE9B,0xDEB2,0xDEAB,0xDEAC,0xDEFC,0xDEE8,0xDEE9,0xDEEA,0xDFF1, + 0xDD3F,0xDCCE,0xDE6D,0xDE6E,0xDE6F,0xDE70,0xDE71,0xDE72,0xDE73, 0, + 0xDC78,0xDC3A,0xDD67, 0,0xDD64,0xDD65,0xDF07,0xDEC4,0xDEC5,0xDEC6, + 0xDEC7,0xDEC8,0xDEC9,0xDEE5,0xDECA, + /* plane 15, row 19 */ + 1 | (94 << 8), /* first, last */ + 0xD840,0xffff,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xffff,0xD841,0xD842,0xD842,0xD842,0xD842,0xD861,0xD842, + 0xD842,0xD843,0xD843,0xD843,0xD843,0x35AB,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xffff,0xffff,0xD843,0xD843,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD844,0x364B,0xD844,0xD844,0xD844,0xD844, + 0xffff,0xffff,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845,0xD845, + 0xD846,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0x5A72,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845, + 1, /* first low-surrogate */ + 0xDECB, 0,0xDECC,0xDECD,0xDECE,0xDECF,0xDED0,0xDC97,0xDC9A, + 0xDC9B,0xDDEA,0xDDEC,0xDDED,0xDDF7,0xDDEE,0xDDEF,0xDE5B,0xDE5C,0xDE5D, + 0xDF6D,0xDF6E, 0,0xDF6F,0xDC81,0xDC82,0xDD4F,0xDDAD,0xDF0A,0xDE7E, + 0xDF69,0xDD54,0xDD55,0xDD56,0xDD57, 0,0xDD58,0xDD59,0xDD5A,0xDD5B, + 0xDD5C,0xDD5D, 0, 0,0xDD5E,0xDD5F,0xDF3B,0xDF36,0xDF3C,0xDF3D, + 0xDF3E,0xDF3F,0xDF40,0xDF41,0xDF42, 0,0xDF43,0xDF44,0xDF45,0xDF37, + 0, 0,0xDF46,0xDF47,0xDF48,0xDF49,0xDD2D,0xDDA5,0xDE3D,0xDE3F, + 0xDD6E,0xDFE7,0xDF75,0xDF76,0xDF77,0xDF78,0xDF79,0xDF7A,0xDF7B,0xDF7C, + 0xDF8E,0xDF7D,0xDF7E, 0,0xDF7F,0xDF80,0xDF81,0xDF82,0xDF83,0xDF84, + 0xDF85,0xDF86,0xDF87,0xDF88,0xDF89, + /* plane 15, row 20 */ + 1 | (94 << 8), /* first, last */ + 0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847, + 0xffff,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847, + 0xD847,0x37E2,0xD847,0xD847,0xD847,0xD847,0xD847,0xffff,0xD847,0xD847, + 0xD847,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849,0xD849,0xffff, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 1, /* first low-surrogate */ + 0xDF8A,0xDF8B,0xDF8C,0xDD6F,0xDD70,0xDD71,0xDD72,0xDE2A,0xDE2B, + 0xDE2C,0xDE2D,0xDE2E,0xDE2F,0xDE30,0xDE31,0xDF83,0xDC84,0xDC85,0xDC93, + 0,0xDC86,0xDC87,0xDC88,0xDC89,0xDC8A,0xDC8B,0xDE36,0xDE38,0xDE39, + 0xDE3A, 0,0xDE3B,0xDE3C,0xDE3D,0xDE3E,0xDE3F, 0,0xDE40,0xDE41, + 0xDE42,0xDCDE,0xDCDF,0xDCE0,0xDCE1,0xDE4A,0xDE4B,0xDE4C,0xDE4D,0xDE4E, + 0xDE4F,0xDE50,0xDF27,0xDFF9,0xDFFA,0xDFFB,0xDC98,0xDC99,0xDC9A, 0, + 0xDD1E,0xDE9E,0xDEF7,0xDE9F,0xDEA0,0xDEF0,0xDEF8,0xDEF9,0xDEA1,0xDEA2, + 0xDEA3,0xDEA4,0xDEA5,0xDEFA,0xDEFB,0xDEFC,0xDEFD,0xDEFE,0xDF1F,0xDEFF, + 0xDF00,0xDF8C,0xDF01,0xDDC2,0xDDC3, 0,0xDDD3,0xDE4E,0xDFAF,0xDFB0, + 0xDFB1,0xDFB2,0xDFB3,0xDFC6,0xDFB4, + /* plane 15, row 21 */ + 2 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xffff,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x68BD,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xffff,0xD84D, + 0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD87E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84F,0xD84F, + 2, /* first low-surrogate */ + 0xDFB5,0xDFB6,0xDFB7,0xDFB8,0xDFB9,0xDFBA,0xDFBB,0xDFBC, + 0xDFBD,0xDFBE,0xDFBF,0xDFC1,0xDFC0,0xDFC2,0xDFC3,0xDF51,0xDF52,0xDF53, + 0xDF54,0xDF55,0xDC5A,0xDC50,0xDC51,0xDC78,0xDCF8,0xDCF9,0xDDC6,0xDDCB, + 0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,0xDDD3,0xDDD4,0xDDD5, + 0,0xDF37,0xDF38,0xDF73,0xDC90,0xDC91,0xDCBF,0xDC92,0xDC93,0xDC94, + 0xDC95,0xDC96,0xDC97,0xDC98,0xDC99, 0,0xDC9A,0xDC9B,0xDC9C,0xDC9D, + 0xDC9E,0xDC9F,0xDCA0,0xDCA1,0xDCA2,0xDCA3,0xDCA4,0xDCA5, 0,0xDCA6, + 0xDCA7,0xDCBF,0xDCC0,0xDCC1,0xDCC2,0xDCC3,0xDCC4,0xDCC5,0xDCC6,0xDD75, + 0xDE43,0xDE12,0xDE9F,0xDE91,0xDCF6,0xDE92,0xDE93,0xDE94,0xDF7E,0xDF7F, + 0xDF80,0xDF81,0xDF82,0xDC4C,0xDC63, + /* plane 15, row 22 */ + 1 | (94 << 8), /* first, last */ + 0xD84F,0xD84F,0xD84F,0xD850,0xD84F,0xD84F,0xD84F,0xD84F,0x6E15, + 0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D0E, + 0xffff,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850, + 0x3DC1,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD852,0x7413,0xD852,0x3ED9,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0x74F8,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xffff,0xD853,0xD853, + 0xD854,0xD854,0xD854,0xD854,0x7B3D, + 1, /* first low-surrogate */ + 0xDDC0,0xDDC1,0xDDC2,0xDE3A,0xDDC3,0xDDC4,0xDDC5,0xDDC6, 0, + 0xDDC7, 0,0xDDC8,0xDD73,0xDDC9,0xDDCA,0xDDCB,0xDDCC,0xDDCD, 0, + 0, 0,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,0xDDD3,0xDDD4,0xDDD5, + 0xDE3B,0xDE3C,0xDE3D,0xDE3E, 0,0xDE3F,0xDE40,0xDE41,0xDE42,0xDE43, + 0,0xDE44,0xDE45,0xDE59,0xDE46,0xDE47,0xDE48, 0,0xDE49,0xDD13, + 0xDD82,0xDD83,0xDE66,0xDE67,0xDD65, 0,0xDD66, 0,0xDD75,0xDD74, + 0xDD67,0xDD6D,0xDD76,0xDD68,0xDD69,0xDD6A,0xDD6B,0xDD4F,0xDD6C,0xDEF8, + 0xDF45, 0,0xDF46,0xDFE4,0xDC85,0xDC6F,0xDC70,0xDD82,0xDD83,0xDD84, + 0xDD8B,0xDF2D,0xDF68,0xDF69,0xDF77,0xDF64,0xDF6A, 0,0xDFF2,0xDFE2, + 0xDC63,0xDC64,0xDC65,0xDC66, + /* plane 15, row 23 */ + 1 | (94 << 8), /* first, last */ + 0xD854,0xD854,0x76D8,0xffff,0xD854,0xD854,0xD854,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0x4148,0xD855,0xD855, + 0xD855,0x79FC,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xffff,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0x7B39,0xD856,0xD856,0xD857,0xD857, + 0xD857,0xffff,0x7D4B,0xD857,0xffff,0xffff,0xD857,0xD857,0xD857,0xD857, + 0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xffff,0xD859,0xffff,0xD85A,0xD85A,0xffff, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0x83B9,0xD85A, + 0xD85B,0xD85A,0xD85A,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDC67,0xDC68, 0, 0,0xDD72,0xDD7D,0xDF69,0xDC84,0xDC86, + 0xDC87,0xDC88,0xDC9E, 0,0xDC89,0xDC8A,0xDC96,0xDC8B,0xDC8C,0xDC8D, + 0xDE79,0xDE83,0xDE7A,0xDE5D,0xDE7B, 0,0xDF9F, 0,0xDFA0,0xDFA1, + 0xDFA2, 0,0xDD6A,0xDD6B,0xDD6C,0xDD6D,0xDD6E,0xDE78, 0,0xDE79, + 0xDE7C,0xDF21,0xDF22,0xDF23,0xDF24, 0,0xDF25,0xDF26,0xDE51,0xDE52, + 0xDE56, 0, 0,0xDFE1, 0, 0,0xDFD6,0xDFD7,0xDFD8,0xDFD9, + 0xDEB5,0xDF6C,0xDF6F,0xDF70,0xDCBC,0xDCBD,0xDCED,0xDD5B,0xDD5C,0xDD5D, + 0xDD5E,0xDE86,0xDE87,0xDEED, 0,0xDEEE, 0,0xDD0E,0xDD0F, 0, + 0xDE2D,0xDE2A,0xDE2E,0xDECC,0xDFF9,0xDFFA,0xDFFB,0xDFFC, 0,0xDFFD, + 0xDC1B,0xDFFE,0xDFFF,0xDC00,0xDC01, + /* plane 15, row 24 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0x86CF,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85D,0xffff,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E, + 0xffff,0xD85E,0xD87E,0xD85E,0xffff,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xffff,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0x8EAE,0xD860,0xffff,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xffff,0xD861,0xD861,0xD862,0xD862,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDC02,0xDC03,0xDC21,0xDC04,0xDC05,0xDC06,0xDC07,0xDC08,0xDC09, + 0xDC0A,0xDC0B,0xDC0C,0xDC0D,0xDC0E,0xDC0F,0xDC10,0xDC11,0xDC12,0xDC13, + 0xDC14,0xDC15,0xDE7B,0xDE7C,0xDE7D,0xDE7E, 0,0xDE7F,0xDE80,0xDE66, + 0xDE81,0xDE82,0xDE83,0xDDB2, 0,0xDE7F,0xDE72,0xDE5A,0xDFEB,0xDC15, + 0,0xDC16,0xDDCA,0xDC17, 0,0xDCC5,0xDCC6,0xDCC7,0xDD88,0xDD89, + 0,0xDD8A,0xDD8B,0xDD8C,0xDD8D,0xDFDF, 0,0xDD3B,0xDD3C,0xDD3D, + 0xDD3E,0xDD3F,0xDD40,0xDD41,0xDD42,0xDE5C,0xDEAF,0xDEA9,0xDEAA,0xDEAB, + 0xDEAC,0xDEB5,0xDEAD,0xDEAE,0xDFE2,0xDE24, 0,0xDEC4, 0,0xDCEA, + 0xDCD3,0xDCD4,0xDCD5,0xDE86, 0,0xDE87,0xDEFD,0xDC05,0xDD49,0xDC5F, + 0xDCD3,0xDCD5,0xDE8A,0xDE8B,0xDE8C, + /* plane 15, row 25 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864, + 0x96EB,0xffff,0xffff,0xD864,0xD864,0xD867,0xD867,0xffff,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD84C,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xffff,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0x55B0,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0x5840,0x5842, + 1, /* first low-surrogate */ + 0xDE8D,0xDE8E,0xDE8F,0xDE90,0xDE91,0xDE92,0xDE93,0xDC7D,0xDC7E, + 0, 0, 0,0xDDEC,0xDE5B,0xDC87,0xDC86, 0,0xDC46,0xDC47, + 0xDD02,0xDD6D,0xDD6E,0xDD6F,0xDF0D,0xDF0E,0xDF0F,0xDF10,0xDF11,0xDF12, + 0xDF13,0xDF14,0xDC9F,0xDCA0,0xDCA1,0xDCA3,0xDD21,0xDD22,0xDF7C,0xDD95, + 0xDD96,0xDE61,0xDE67,0xDF91,0xDF92,0xDF93,0xDF94,0xDC8A,0xDC8B,0xDCF7, + 0xDD24,0xDDB0,0xDDB1,0xDE8E,0xDF04,0xDF6A,0xDF6B,0xDF6C,0xDF6D,0xDDE8, + 0xDE0C,0xDDE9,0xDDEA,0xDE0D, 0,0xDDEB,0xDDEC,0xDDED,0xDDEE,0xDDEF, + 0xDDF0,0xDDF1,0xDDF2,0xDE16,0xDDF3,0xDE04,0xDE1D,0xDDF4,0xDDF5,0xDDF6, + 0xDDF7, 0,0xDE02,0xDE03,0xDE04,0xDF9A,0xDF7C,0xDFC5,0xDF7D,0xDF7E, + 0xDF7F,0xDF80,0xDF81, + /* plane 15, row 26 */ + 1 | (94 << 8), /* first, last */ + 0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xffff,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0x3701,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xffff,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD841,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xffff,0xD848, + 0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xffff,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849, + 1, /* first low-surrogate */ + 0xDF82,0xDF83,0xDF84,0xDF85,0xDF86,0xDF87,0xDDAE,0xDE4D,0xDFB0, + 0xDFDC,0xDFB6,0xDFB7,0xDFB8,0xDFB9,0xDFBA,0xDFBB,0xDFDB,0xDFBC,0xDFBD, + 0xDFBE, 0,0xDFBF,0xDFC0,0xDFC1,0xDFC2,0xDFC3,0xDFCE, 0,0xDFD9, + 0xDFC4,0xDFC5,0xDFDA,0xDFC6,0xDFC7,0xDFC8,0xDFC9,0xDFCA,0xDD7E,0xDD7B, + 0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE52,0xDE53,0xDE54,0xDE55,0xDF8F,0xDFFC, + 0xDCA6,0xDCA7,0xDCA8,0xDD23,0xDE8B, 0,0xDE8C,0xDE8D,0xDE8E,0xDE8F, + 0xDEA4,0xDD99,0xDC24,0xDC46,0xDC47,0xDC48,0xDCFD,0xDCFE, 0,0xDE6E, + 0xDE7C,0xDE6F,0xDE70,0xDE71,0xDE72,0xDF29,0xDF2A,0xDF5F,0xDCA2,0xDD30, + 0xDD2B,0xDF61,0xDF02,0xDF03,0xDF04,0xDF05,0xDF06,0xDF07, 0,0xDF08, + 0xDF09,0xDF62,0xDF0A,0xDF0B,0xDF0C, + /* plane 15, row 27 */ + 1 | (94 << 8), /* first, last */ + 0xD849,0xD849,0xD849,0xD849,0xD849,0xffff,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD84B,0xD84A,0xD84B,0xffff, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xffff,0xD84B,0xD84B,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xffff,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD84C,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xffff,0xD84C,0xD84C,0xD84C,0xD84C,0xD859,0xD84D,0xD84D, + 0xffff,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0x692B,0xD84D, + 0x6916,0xD84D,0xD84D,0xD840,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDF0D,0xDF0E,0xDF63,0xDF27,0xDF0F, 0,0xDF1B,0xDF64,0xDF10, + 0xDF11,0xDF81,0xDF12,0xDF65,0xDF13,0xDDCE,0xDC29,0xDFC4,0xDC2A, 0, + 0xDC2B,0xDC2C,0xDC2D,0xDC2E,0xDC2F,0xDC30,0xDC31,0xDC32,0xDC33,0xDC34, + 0,0xDC35,0xDC36,0xDFE3,0xDC37,0xDC38,0xDC39,0xDC3A,0xDC3B,0xDC4D, + 0xDC3C,0xDC3D,0xDC3E, 0,0xDED0,0xDED1,0xDC55,0xDD02,0xDD04,0xDDFC, + 0xDE07,0xDDFD,0xDDFE, 0,0xDDFF,0xDE00,0xDE08,0xDE01,0xDE02,0xDE35, + 0xDE03,0xDE04, 0,0xDF3B,0xDF89,0xDF81,0xDF82,0xDF33,0xDCEB,0xDCEC, + 0,0xDCED,0xDCEE,0xDCEF, 0,0xDCF0,0xDCF1,0xDCF2, 0,0xDCF3, + 0,0xDCF4,0xDCF5,0xDC4B,0xDCF6,0xDCF7,0xDCF8,0xDCF9,0xDCFA,0xDCFB, + 0xDCFC,0xDCFD,0xDCFE,0xDCFF,0xDD00, + /* plane 15, row 28 */ + 1 | (94 << 8), /* first, last */ + 0x691B,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6927, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0x6BF5,0xD84E, + 0xffff,0xD84E,0xD84E,0xD84F,0xD84F,0x3D20,0xD84F,0xD84F,0xD84F,0x6E82, + 0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x3D21,0xD84F, + 0xD84F,0x6E7A,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xffff, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xffff,0xffff,0xD850,0xffff,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xffff,0x7129, + 2, /* first low-surrogate */ + 0xDD01,0xDD02,0xDD03,0xDD04,0xDD05,0xDD06,0xDD07, 0, + 0xDD08,0xDD09,0xDD0A,0xDD0B,0xDD0C,0xDD0D,0xDCD7,0xDCD8,0xDE29,0xDE9C, + 0xDEF8,0xDF98,0xDFA4,0xDF99,0xDF9A,0xDF9B,0xDF97,0xDF9C, 0,0xDF9D, + 0,0xDF9E,0xDF9F,0xDC65,0xDDD6, 0,0xDE32,0xDE33,0xDE34, 0, + 0xDE35,0xDE36,0xDE37,0xDDD7, 0,0xDDD8,0xDE38,0xDE39,0xDE3A,0xDE3B, + 0xDE3C,0xDE3D,0xDE3E,0xDE3F,0xDE40,0xDDD9,0xDE41,0xDE42, 0,0xDE43, + 0xDE44, 0,0xDE7C,0xDE7D,0xDE7E,0xDE7F,0xDE80,0xDE81,0xDE82, 0, + 0xDE83,0xDE84,0xDE85,0xDE86,0xDEA5,0xDE87,0xDE88,0xDE89,0xDE8A,0xDE8B, + 0xDE8C,0xDE8D,0xDE8E, 0, 0,0xDE8F, 0,0xDE90,0xDE91,0xDE92, + 0xDE93,0xDE94,0xDE95, + /* plane 15, row 29 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3EDA,0xffff,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD853,0xD854,0xD854,0xffff,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD87E,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xffff,0xD855,0xffff,0xD856,0xD846,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD857,0xD857,0xffff,0xD857, + 1, /* first low-surrogate */ + 0xDE96,0xDD56,0xDD57,0xDDE1,0xDE0E,0xDE0F,0xDE7A,0xDE7B,0xDE8B, + 0xDFF2,0xDFF3,0xDD93,0xDD94,0xDD95,0xDD96,0xDD97,0xDDAD,0xDD98,0xDDAB, + 0xDD7B,0xDD99,0xDD9A,0xDD9B,0xDD85,0xDD9C,0xDD9D, 0, 0,0xDDAC, + 0xDD79,0xDD9E,0xDDA4,0xDEFD,0xDFEB,0xDFEA,0xDC8F,0xDC90,0xDC86,0xDC87, + 0xDC88,0xDDAC,0xDDAD,0xDFEC,0xDC73,0xDC74, 0,0xDDAA,0xDDAB,0xDDAC, + 0xDFD1,0xDFD7,0xDCB9,0xDCBA,0xDCBB,0xDCBC,0xDE8E,0xDE8F,0xDE90,0xDE7C, + 0xDE91,0xDE92,0xDE93,0xDE94,0xDD54,0xDE9A,0xDE95,0xDE96,0xDE97,0xDFBD, + 0xDFC7,0xDFBE, 0,0xDFBF, 0,0xDD93,0xDE5E,0xDE86,0xDE87,0xDE88, + 0xDE89,0xDF41,0xDF42,0xDF43,0xDF44,0xDF45,0xDF46,0xDF4A,0xDF47,0xDF48, + 0xDF49,0xDE6B,0xDE66, 0,0xDE67, + /* plane 15, row 30 */ + 1 | (94 << 8), /* first, last */ + 0x7CAB,0xD857,0x7CAC,0xffff,0xD857,0xD857,0xD857,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD87E,0xD858, + 0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xffff,0xffff,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xffff,0xffff,0xD85A,0xD85A, + 0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0x83F7,0xffff,0xD85B,0xD85B,0xD85B,0x44EA,0xffff,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 2, /* first low-surrogate */ + 0xDE68, 0, 0,0xDFFD,0xDFFE,0xDFFF,0xDC00,0xDC01, + 0xDC02,0xDC03,0xDC04,0xDC05,0xDC06,0xDE33,0xDEC2,0xDED0,0xDD74,0xDF95, + 0xDF96,0xDC35,0xDC36,0xDD67,0xDD68,0xDD69,0xDD6A,0xDD72,0xDD6B,0xDD6C, + 0xDD6D,0xDD6E,0xDD6F,0xDF22, 0, 0,0xDF23,0xDF41,0xDF24,0xDF25, + 0xDF26,0xDF27,0xDF28,0xDF29,0xDEB7, 0, 0, 0,0xDDDA,0xDECF, + 0xDEDA,0xDC89,0xDCB7,0xDC8A,0xDC8B,0xDD5E,0xDC8C, 0,0xDC8D,0xDC8E, + 0xDC8F,0xDC90,0xDC91,0xDC92,0xDC93,0xDC94,0xDCB6,0xDC95,0xDC96,0xDC97, + 0, 0,0xDC98,0xDC99,0xDC9A, 0, 0,0xDC9B,0xDCBD,0xDC9C, + 0xDC9D,0xDC9E,0xDC9F,0xDCC0,0xDCA0,0xDCA1,0xDCA2,0xDCA3,0xDCA4,0xDCA5, + 0xDCA6,0xDCA7,0xDCA8,0xDCA9,0xDCAA, + /* plane 15, row 31 */ + 2 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD87E,0xD85E,0xD85E, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xffff,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD860,0xD87E,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xffff,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xffff,0xD862,0xD863,0x4989,0xffff,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0x9596, + 2, /* first low-surrogate */ + 0xDDB4,0xDDB5,0xDDB6,0xDEB9,0xDEBA,0xDEBB,0xDE91,0xDEBC, + 0xDDEE,0xDDEF,0xDE96,0xDE97,0xDE73,0xDE98,0xDE99,0xDFED,0xDFEE,0xDCDE, + 0xDDB0,0xDDB1,0xDDB2,0xDDB3,0xDDB4,0xDDB5,0xDDB6,0xDDCE,0xDDB7,0xDFE3, + 0xDCB9,0xDD55,0xDD7E,0xDD56,0xDD57,0xDD58,0xDD59,0xDD5A, 0,0xDEC4, + 0xDEC5,0xDEC6,0xDEC7,0xDEC8,0xDEC9,0xDEEE,0xDECF,0xDECA,0xDECB,0xDECC, + 0xDC09,0xDDDA,0xDC03,0xDE2F,0xDE30,0xDE31,0xDE32,0xDD0E,0xDD0F,0xDD10, + 0xDD11,0xDD12, 0,0xDD13,0xDD14,0xDD15,0xDCFF,0xDF1F,0xDF20,0xDF21, + 0xDF2D, 0,0xDC1B,0xDC1C,0xDC1D,0xDC1E,0xDD53,0xDD54,0xDD55,0xDD56, + 0xDD64,0xDD59,0xDD57, 0,0xDD58,0xDC6B, 0, 0,0xDCE7,0xDCE8, + 0xDCE9,0xDCEA,0xDCEB,0xDCEC, + /* plane 15, row 32 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xffff,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xffff,0xD848,0xD865,0x4AB2,0xD865,0xD865,0xffff,0xD866,0xD84C,0xD867, + 0xD869,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD842,0xffff,0xD843,0xffff,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0x55F1,0xD843,0xD843,0xD844, + 0xD844,0xD844,0xD844,0xD866,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xD844,0xD845,0xD840,0xD845,0xD846,0xD845,0xD845, + 0xD846,0xffff,0xD846,0xD846,0xD846, + 1, /* first low-surrogate */ + 0xDCED,0xDEB1,0xDEB4, 0,0xDC8A,0xDC8D,0xDC8C,0xDDF2,0xDDF3, + 0,0xDD08,0xDC17, 0,0xDD9F,0xDEA0, 0,0xDC6D,0xDC7D,0xDF90, + 0xDDC4,0xDC4C,0xDD74,0xDD75,0xDD76,0xDF49,0xDF4A,0xDF4B,0xDF4C,0xDF4D, + 0xDF4E,0xDF4F,0xDF50,0xDF51,0xDF52,0xDF53,0xDF54,0xDF55,0xDF56,0xDCA4, + 0xDCA9,0xDD2A,0xDD2B,0xDFB3,0xDFC1,0xDC98,0xDCFB,0xDCFC,0xDDBC,0xDE96, + 0xDF0A, 0,0xDEA2, 0,0xDE81,0xDE82,0xDE83,0xDE84,0xDE85,0xDE86, + 0xDE87,0xDE88,0xDE89,0xDE8A,0xDE8B,0xDE8C, 0,0xDE8D,0xDED1,0xDE14, + 0xDFC9,0xDFCA,0xDFCB,0xDEFD,0xDFCC,0xDFCD,0xDFCE,0xDFCF,0xDFD0,0xDFD1, + 0xDFD2,0xDFD3,0xDFD4,0xDFD5,0xDD71,0xDC4D,0xDE62,0xDC0E,0xDFFE,0xDFFF, + 0xDC00, 0,0xDC01,0xDC02,0xDC03, + /* plane 15, row 33 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD846,0xffff,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD87E,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xD848,0xD848,0xD848, + 0xD856,0x5F41,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849, + 0xD849,0xD849,0xffff,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xffff,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xD87E,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD84C,0xffff,0xD84C,0xD84C, + 1, /* first low-surrogate */ + 0xDC15,0xDC04,0xDC05, 0,0xDD87,0xDD89,0xDE6E,0xDE6F,0xDE70, + 0xDE71,0xDC6E,0xDE72,0xDE73,0xDE74,0xDF9D,0xDCB8,0xDCB9,0xDCBA,0xDEC2, + 0xDEC3,0xDED5,0xDEC4,0xDEC0,0xDEC5,0xDEC6,0xDE8A,0xDE8B,0xDE8C,0xDF64, + 0xDF8C, 0,0xDC0D,0xDCA8,0xDD3B,0xDD3C,0xDD3D,0xDD3E,0xDD3F,0xDD40, + 0xDF66,0xDFCB,0xDFB7,0xDFB8,0xDFB9,0xDFBA,0xDF67,0xDFBB,0xDF68,0xDF69, + 0xDF6A,0xDFBC, 0,0xDDDB,0xDC81,0xDC82,0xDC83,0xDC84,0xDC85,0xDC86, + 0xDC87,0xDC88,0xDC89,0xDCBF,0xDC8A,0xDC8B, 0,0xDC8C,0xDC8D,0xDC8E, + 0xDC8F,0xDC90,0xDCA1,0xDC91,0xDED6,0xDF9F,0xDC58,0xDC85,0xDD0B,0xDD0C, + 0xDE37,0xDE38,0xDCCE,0xDE39,0xDE3A,0xDE3B,0xDE3C,0xDE3D,0xDE3E,0xDE40, + 0xDE41,0xDE42, 0,0xDE43,0xDF8A, + /* plane 15, row 34 */ + 1 | (94 << 8), /* first, last */ + 0xD84C,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x698A,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x698C,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6980, + 0xD84D,0x697F,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xffff,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xffff,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD850,0xffff,0x3DDA,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850, + 1, /* first low-surrogate */ + 0xDF8B,0xDD90,0xDD59,0xDD5B,0xDD5C,0xDD5D,0xDD5E, 0,0xDD5F, + 0xDD60,0xDD61,0xDD62,0xDD63,0xDD64,0xDD93,0xDD65,0xDD66,0xDD67,0xDD68, + 0xDD69,0xDD6A,0xDD6B,0xDD95,0xDD6C,0xDD6D,0xDD6E,0xDD6F, 0,0xDD70, + 0xDD71,0xDD72,0xDD73,0xDD74,0xDD75,0xDD76,0xDD77,0xDD78,0xDD79, 0, + 0xDD7A, 0,0xDD7B,0xDDA9,0xDD7C,0xDCF1,0xDCEB,0xDD8A,0xDE3D,0xDEA6, + 0xDEA7,0xDFBA, 0,0xDFBB,0xDFBC,0xDFBD,0xDE91,0xDE92,0xDE93,0xDE94, + 0xDE95,0xDE96,0xDE97,0xDDDA,0xDE98,0xDE99,0xDE9A, 0, 0,0xDE9B, + 0xDE9C,0xDE9D,0xDE9E,0xDE9F,0xDEA0,0xDEBF,0xDEA1,0xDEA2,0xDEA3,0xDEA4, + 0xDEA5,0xDEA6,0xDEA7,0xDE5B,0xDD0D,0xDEA8,0xDECB, 0, 0,0xDECC, + 0xDF4F,0xDECD,0xDECE,0xDECF,0xDF4E, + /* plane 15, row 35 */ + 1 | (94 << 8), /* first, last */ + 0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD87E,0xD850,0xffff,0xffff,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0x3DDB,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xffff,0xD852,0xffff,0xD852,0xD852,0xD852, + 0xD852,0x3EE2,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0x3EE3,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD87E,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD853,0xD853,0xD853,0xD853,0xD853,0xD854, + 0xD854,0xD854,0xD854,0xD854,0xD84D,0xD854,0xffff,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855, + 1, /* first low-surrogate */ + 0xDED0,0xDED1,0xDED2, 0,0xDED3,0xDED4,0xDED5,0xDED6,0xDED7, + 0xDED8,0xDED9,0xDEFA,0xDEDA,0xDEDB,0xDD1C,0xDEDC, 0, 0,0xDEDD, + 0xDEDE,0xDEDF,0xDEE0,0xDEE1,0xDEE2,0xDEE3,0xDEE4,0xDEE5, 0,0xDEE6, + 0xDEE7,0xDD8E,0xDE98,0xDE99, 0,0xDC0A, 0,0xDC26,0xDC27,0xDDBD, + 0xDDDF, 0,0xDDBE,0xDDDE,0xDDBF,0xDDC0,0xDDC1,0xDDC2,0xDD9F,0xDDC3, + 0xDDC4,0xDDC5,0xDDC6,0xDDC7, 0,0xDDC8,0xDDC9,0xDDE3,0xDDCA,0xDDCB, + 0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1,0xDDD2,0xDDD3,0xDD2F,0xDDD4, + 0xDF04,0xDF65,0xDFEE,0xDCA0,0xDCA1,0xDDDD,0xDDDE,0xDF83,0xDFFA,0xDC7F, + 0xDC80,0xDDE8,0xDDE9,0xDDEA,0xDDA6,0xDFE1, 0,0xDCDB,0xDCDC,0xDCDD, + 0xDCDE,0xDCDF,0xDCE0,0xDCE1,0xDCE2, + /* plane 15, row 36 */ + 1 | (94 << 8), /* first, last */ + 0xD855,0xD855,0xD855,0xD855,0x789C,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x7B7B,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859, + 0xD859,0xD859,0xD87E,0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xD859, + 0xD859,0xD859,0xD85A,0xD85B,0x4749,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDCE3,0xDCE4,0xDCE5,0xDCE6, 0,0xDCE7,0xDEB0,0xDE98,0xDEB1, + 0xDE99,0xDEB2,0xDEB3,0xDEB4,0xDEB5,0xDEB6,0xDEB7,0xDEB8,0xDEB9,0xDFE2, + 0xDFE3,0xDFE4,0xDFE5,0xDFE6,0xDFE7,0xDFE8,0xDFE9,0xDDAD,0xDDCF,0xDDAE, + 0xDDAF,0xDDB0,0xDDB1,0xDE92,0xDE93,0xDE94,0xDF79, 0,0xDF7A,0xDF7B, + 0xDF7C,0xDF7D,0xDF7E,0xDF7F,0xDF80,0xDF81,0xDF82,0xDF83,0xDF84,0xDE97, + 0xDE84,0xDE85,0xDE89,0xDE86,0xDE87,0xDC2C,0xDC2D,0xDC2E,0xDC2F,0xDC30, + 0xDC31,0xDC32,0xDC33,0xDC34,0xDC35,0xDC36,0xDC37,0xDED2,0xDC44,0xDD00, + 0xDD83,0xDD84,0xDD86,0xDF7A,0xDF7B,0xDF7C,0xDF7D,0xDF7E, 0,0xDF7F, + 0xDF87,0xDF80,0xDE43,0xDD34, 0,0xDD35,0xDD36,0xDD37,0xDD38,0xDD39, + 0xDD3A,0xDD3B,0xDD3C,0xDD3D,0xDD3E, + /* plane 15, row 37 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,0xD85B,0xD85B,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD87E, + 0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xD85E,0xD85E,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0x47F3,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xffff,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0x90D2,0xD861,0xD861, + 0xD862,0xD862,0x9274,0xD87E,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD863,0x95A0,0xffff,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDD3F,0xDD40,0xDD41,0xDD42,0xDD43,0xDD44,0xDD45,0xDD46,0xDD47, + 0xDD48,0xDD49,0xDD4A, 0,0xDD4B,0xDD4C,0xDD4D,0xDD4E,0xDEE7,0xDEE8, + 0xDEE9,0xDEEA,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDDF7,0xDE9A,0xDECD,0xDDC8, + 0xDEA3,0xDECE,0xDC31,0xDC32,0xDC33,0xDDE4, 0,0xDDE5,0xDDE6,0xDCC8, + 0xDD74,0xDD75,0xDD76,0xDD77,0xDD78,0xDD79,0xDD7A,0xDE61,0xDEDF,0xDEE0, + 0xDEE1,0xDEE2,0xDEE3,0xDEE4,0xDEE5,0xDEE6, 0,0xDC31,0xDE3D,0xDE3E, + 0xDE3F,0xDEF4,0xDEF5,0xDEF6, 0,0xDC17,0xDD41,0xDD42,0xDD43,0xDD44, + 0xDD45,0xDD46,0xDD47,0xDD48,0xDD49,0xDD4A,0xDD4B, 0,0xDEBA,0xDF44, + 0xDD2A,0xDD6D, 0,0xDDE7,0xDD7E,0xDD6E,0xDD6F,0xDD70,0xDD71,0xDD76, + 0xDC79, 0, 0,0xDD04,0xDCF8, + /* plane 15, row 38 */ + 1 | (94 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0x4A57,0xD865, + 0xD85F,0xffff,0xD865,0xD865,0xffff,0xD84C,0xD866,0xD867,0xD867,0xD868, + 0xD868,0xD868,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840,0xD841,0xD841,0xD841, + 0x51A9,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD843,0xD842,0xD842,0xD842, + 0xD842,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843, + 1, /* first low-surrogate */ + 0xDD05,0xDEDA,0xDEDB,0xDEDC,0xDEDD,0xDEDE,0xDEDF,0xDEE0,0xDEE1, + 0xDCC5,0xDC9A,0xDC9B,0xDC9C,0xDDD8,0xDDD9,0xDDDA,0xDE6E, 0,0xDC6B, + 0xDD83, 0,0xDED6,0xDEBD, 0,0xDE2E,0xDEFC,0xDD53,0xDDB7,0xDE8C, + 0xDF8E,0xDEFF,0xDC76,0xDD06,0xDD7E,0xDF84,0xDF85,0xDF86,0xDF87,0xDF88, + 0xDFA7,0xDF89,0xDF8A,0xDF8B,0xDF8C,0xDF8D,0xDF8E,0xDF8F,0xDFA3,0xDF90, + 0xDF91,0xDF92,0xDF93,0xDFAC,0xDF94,0xDF95,0xDF96,0xDCAA,0xDCAB,0xDD9E, + 0,0xDE08,0xDE09,0xDE68,0xDE69,0xDE6A,0xDE9A,0xDFD9,0xDFDA,0xDFDB, + 0xDCA8,0xDD01,0xDD28,0xDD77,0xDDBD,0xDDBE,0xDF60,0xDEA0,0xDEA2,0xDF0F, + 0xDF85,0xDEFE,0xDEFF,0xDF00,0xDF01,0xDF16,0xDF02,0xDF03,0xDF04,0xDF05, + 0xDF06,0xDF07,0xDF08,0xDF22,0xDF09, + /* plane 15, row 39 */ + 1 | (94 << 8), /* first, last */ + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD844,0xD844,0xD844,0xD845,0xD844,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD840,0xffff,0xD846,0xD846,0xD87E,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xffff,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848,0xffff,0xD848,0xD848, + 0xffff,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848,0xD848, + 0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD849,0xD84A,0xD849, + 0xD849,0xffff,0xD84A,0xD849,0xD84A, + 1, /* first low-surrogate */ + 0xDF0A,0xDF0B,0xDF0C,0xDF14,0xDF29,0xDE6E,0xDF0D,0xDF0E,0xDF0F, + 0xDF10,0xDF11,0xDF12,0xDF13,0xDE1B,0xDE1C,0xDE1D,0xDC13,0xDFFF,0xDC00, + 0xDC01,0xDC02,0xDC03,0xDC04,0xDC0A,0xDC05,0xDC06,0xDC07,0xDC08,0xDD3A, + 0xDD73,0xDE6F,0xDE70,0xDE71,0xDC52, 0,0xDE9A,0xDC60,0xDC69,0xDC2B, + 0xDC24,0xDC2C,0xDC2D,0xDC2E,0xDC2F,0xDC30,0xDC31,0xDC32,0xDC33,0xDC34, + 0xDC35,0xDC45,0xDC36,0xDD92,0xDD93,0xDE88,0xDE89,0xDE8A,0xDE8B,0xDF3F, + 0,0xDCCA,0xDEF6,0xDEF7,0xDEF8,0xDEF9,0xDD2B, 0,0xDDA4,0xDDCE, + 0,0xDE9E,0xDE9F,0xDEA0,0xDEA1,0xDEA2,0xDEA3,0xDEA4,0xDEA5,0xDEA6, + 0xDC18,0xDD60,0xDD61,0xDD62,0xDD63,0xDD64,0xDFBD,0xDFBE,0xDC0B,0xDFBF, + 0xDFC0, 0,0xDC0C,0xDF8D,0xDC0D, + /* plane 15, row 40 */ + 1 | (94 << 8), /* first, last */ + 0xD84A,0xD84A,0xD84A,0xD84A,0xD849,0xD84A,0xffff,0xD849,0xD84A, + 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xffff,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D,0xD84D, + 0x3BBC,0xD84D,0xD84D,0x3BA4,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xffff,0xD84E,0xD87E, + 0xD84E,0xD87E,0xD84E,0xD84E,0xD84E, + 1, /* first low-surrogate */ + 0xDC0E,0xDC5E,0xDC0F,0xDC10,0xDFC1,0xDC11, 0,0xDFC2,0xDDEA, + 0xDDEB,0xDCE3,0xDCE4,0xDCE5,0xDCE6,0xDCE7,0xDC92,0xDD4A, 0,0xDCE8, + 0xDCE9,0xDCEA,0xDD01,0xDCEB,0xDCEC,0xDCEF,0xDCED,0xDCEE,0xDCF0,0xDCF1, + 0xDCF2,0xDCF3,0xDCF4,0xDCF5,0xDCF6,0xDCF7,0xDCF8,0xDCF9,0xDCFE,0xDCFA, + 0xDCFB,0xDCFC,0xDE63,0xDE64,0xDE65,0xDE66,0xDE67,0xDE68,0xDE0B,0xDE0D, + 0,0xDE0E,0xDE0F, 0,0xDE14,0xDDD4,0xDDD5,0xDDD6,0xDDD7,0xDDD8, + 0xDDD9,0xDDDA,0xDDDB,0xDDDC,0xDDDD,0xDDDE,0xDDDF,0xDDE0,0xDDE1,0xDDE2, + 0xDDE3,0xDDE4,0xDDE5,0xDDE6,0xDDE7,0xDDE8,0xDDE9,0xDDEA,0xDDEB,0xDDEC, + 0xDEEC,0xDDED,0xDDEE,0xDDEF,0xDE00,0xDDF0,0xDD04, 0,0xDD05,0xDCF3, + 0xDEB5,0xDCF9,0xDFD6,0xDFD7,0xDFD8, + /* plane 15, row 41 */ + 1 | (94 << 8), /* first, last */ + 0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xffff, + 0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xffff,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850, + 0xffff,0xD850,0xD850,0x7195,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0x3DE8,0xffff,0xD850,0xD850, + 0xD850,0xD850,0xD850,0x7198,0xD850,0xffff,0xD850,0xD850,0xD850,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x7478,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDFD9,0xDEA9,0xDF00,0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,0xDF06, + 0xDF3F,0xDF07,0xDF08,0xDF09,0xDF0A,0xDEB6,0xDF0B,0xDF0C, 0, 0, + 0xDF0D, 0,0xDF0E,0xDF0F,0xDF10,0xDF11,0xDF12,0xDF35,0xDF13,0xDF14, + 0xDEAA, 0,0xDFC1,0xDF15,0xDF16,0xDF17,0xDF1E,0xDF1F,0xDF20,0xDF21, + 0,0xDF22,0xDF23, 0,0xDF24,0xDF25,0xDF26,0xDF27,0xDF28,0xDF29, + 0xDF2A,0xDF2B,0xDF07,0xDF2C,0xDF2D,0xDF2E, 0, 0,0xDF2F,0xDF30, + 0xDF48,0xDF31,0xDF32, 0,0xDF33, 0,0xDF34,0xDF35,0xDF36,0xDD59, + 0xDD91,0xDDE7,0xDEB8,0xDEB9,0xDEBA,0xDEBB,0xDEC8,0xDC4D,0xDC89,0xDC50, + 0xDC28,0xDDFB,0xDDFC,0xDDFD,0xDDFE,0xDDFF, 0,0xDE00,0xDE01,0xDE02, + 0xDDE4,0xDDE5,0xDE03,0xDE04,0xDE05, + /* plane 15, row 42 */ + 1 | (94 << 8), /* first, last */ + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD853,0xD853,0xD853,0xD87E,0xD853,0xD853,0xD853,0xD853, + 0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0x78B9,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xD848,0xD855,0xD855,0xD855,0xD855,0xffff,0xD855,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x7A33,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD87E,0xD857,0xD857,0xD857, + 1, /* first low-surrogate */ + 0xDE06,0xDE07,0xDE13,0xDE08,0xDE09,0xDDE6,0xDE0A,0xDE0B,0xDE0C, + 0xDF0B,0xDFF4,0xDC0A,0xDCB1,0xDE1D,0xDD3B,0xDF8B,0xDF8C,0xDF8F,0xDF8D, + 0xDF8E,0xDC06,0xDC86,0xDE22,0xDE23,0xDE24,0xDE25,0xDE26,0xDE27,0xDE28, + 0xDFF1, 0,0xDD23,0xDD12, 0,0xDD13,0xDD14,0xDD15,0xDD16,0xDD17, + 0xDD18,0xDD19,0xDD4B,0xDD1A,0xDD1B,0xDD1C, 0,0xDD1D,0xDD1E,0xDD1F, + 0xDD20,0xDECA,0xDEAC,0xDECB,0xDECC,0xDECD,0xDECE, 0,0xDECF,0xDC10, + 0xDC11,0xDC12,0xDC13,0xDC14,0xDC0F,0xDC15,0xDC16,0xDC17, 0,0xDC18, + 0xDDC6,0xDE9F,0xDEA0,0xDEA4,0xDEA1,0xDFB5,0xDFB6,0xDFB7,0xDFB8,0xDFB9, + 0xDFBA,0xDFD0,0xDFC6,0xDFBB,0xDFBC,0xDFBD,0xDFBE,0xDFBF,0xDFC0,0xDFC1, + 0xDFC2,0xDD60,0xDEA7,0xDEA8,0xDEA9, + /* plane 15, row 43 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0x7CC0,0xD857,0xD857, + 0xD857,0x7CC1,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xffff,0xD858,0xD858,0xD858,0xD858,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xffff,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xD859, + 0xD859,0xD859,0xffff,0xD859,0xD87E,0xD87E,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xffff, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 1, /* first low-surrogate */ + 0xDEAA,0xDEAB,0xDEAC,0xDEBC,0xDEAD,0xDEAE, 0,0xDEAF,0xDEB0, + 0xDEB1, 0,0xDEB4,0xDEB2,0xDC66,0xDC67,0xDC68,0xDC69,0xDC6A,0xDC6B, + 0xDC6C,0xDC6D,0xDC6E,0xDC6F, 0,0xDE3E,0xDE3F,0xDE40,0xDEE8,0xDC52, + 0xDC53,0xDC54,0xDC55,0xDD91,0xDD92,0xDD93,0xDD94,0xDD95,0xDD96,0xDD97, + 0xDD98, 0,0xDD99,0xDD9A,0xDD9B,0xDFB7,0xDFB8,0xDFB9, 0,0xDFBA, + 0xDFBB,0xDFBD, 0,0xDFBC,0xDD88,0xDD87,0xDCEB,0xDCEC,0xDD16,0xDD44, + 0xDDE3,0xDE58,0xDE53,0xDE54,0xDEE0,0xDDB1,0xDDB2,0xDDB3,0xDDEA, 0, + 0xDDB4,0xDDF0,0xDDB5,0xDDB6,0xDDB7,0xDDB8,0xDDB9,0xDDBA,0xDDBB,0xDDBC, + 0xDDBD,0xDDBE,0xDDBF,0xDDC0,0xDDC1,0xDDC2,0xDDC3, 0,0xDDC4,0xDDC5, + 0xDDC6,0xDDFC,0xDDC7,0xDDC8,0xDDC9, + /* plane 15, row 44 */ + 1 | (94 << 8), /* first, last */ + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0x8744, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0x8AAD,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xffff, + 0xD85F,0xD85F,0xffff,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xffff,0xD860,0xffff,0xD861, + 0xD861,0x4886,0xD862,0xD861,0xD861,0x9064,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862, + 1, /* first low-surrogate */ + 0xDDCA,0xDDCB,0xDDCC,0xDE84,0xDDCD,0xDDCE,0xDDCF,0xDDD0,0xDDD1, + 0xDDD2,0xDDCA,0xDDCB,0xDF36,0xDF37,0xDF9F,0xDF38,0xDF39,0xDF3A, 0, + 0xDEBE,0xDEF0,0xDEBF,0xDEC0,0xDFF7,0xDFF8,0xDFFA,0xDC43,0xDC44,0xDE0F, + 0xDE10,0xDE11,0xDE12, 0,0xDE13,0xDE14,0xDE15,0xDE16, 0, 0, + 0xDCD3,0xDCD7, 0,0xDDB0,0xDD98,0xDD90,0xDD91,0xDD92,0xDD97,0xDD93, + 0xDE64,0xDF01,0xDF02,0xDF03,0xDF04,0xDF05,0xDF06,0xDF07,0xDC5A,0xDC5B, + 0xDE4E,0xDE4F,0xDE50,0xDF19,0xDF1A,0xDF1B, 0,0xDF1C, 0,0xDC19, + 0xDC1A, 0,0xDD8A,0xDD6E,0xDD6F, 0,0xDD70,0xDD71,0xDD72,0xDD73, + 0xDD74,0xDD75,0xDD76,0xDC3A,0xDC3B,0xDC3C,0xDC5A,0xDC3D,0xDC42,0xDD8B, + 0xDDA0,0xDD8C,0xDD8D,0xDD8E,0xDDAB, + /* plane 15, row 45 */ + 1 | (94 << 8), /* first, last */ + 0xD862,0x9277,0xD862,0xD862,0xD862,0xD862,0x92AF,0xD862,0xD862, + 0xD862,0xD862,0xffff,0xffff,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD863,0xffff,0xD864,0xD864,0xffff,0xffff,0xD864,0xD864,0xD864, + 0xD865,0xD854,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD866,0xD867,0xD867,0xD867,0xD867,0xD867,0xffff,0xD867,0xD867,0xD867, + 0xD868,0xD868,0xD868,0xD842,0xD840,0xD840,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xffff,0xD840,0xD840,0xD840,0xD841,0xD841,0xffff, + 0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD840,0xD843, + 0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843,0xD843, + 0xD843,0xD844,0xD845,0xD845,0xD845, + 1, /* first low-surrogate */ + 0xDD8F, 0,0xDD90,0xDD91,0xDD92,0xDDAA, 0,0xDD93,0xDD94, + 0xDD9E,0xDDA8, 0, 0,0xDF00,0xDF01,0xDF02,0xDF03,0xDF04,0xDF05, + 0xDFC4,0xDFC5, 0,0xDCAE,0xDCB2, 0, 0,0xDDF7,0xDE13,0xDF9E, + 0xDC85,0xDF80,0xDCC8,0xDC41,0xDC81,0xDC82,0xDC83,0xDC84,0xDEC4,0xDEC5, + 0xDEC6,0xDC95,0xDC96,0xDC97,0xDD58,0xDD59, 0,0xDFA9,0xDFAA,0xDFAB, + 0xDE8E,0xDF03,0xDFB3,0xDF82,0xDC53,0xDD83,0xDD84,0xDD85,0xDFCC,0xDFCD, + 0xDFCE,0xDFCF,0xDFD0, 0,0xDFD1,0xDFD2,0xDFDA,0xDCB3,0xDCB4, 0, + 0xDE13,0xDE0E,0xDE6B,0xDD03,0xDD61,0xDDC1,0xDDC2,0xDEB5,0xDD40,0xDF98, + 0xDF99,0xDF9A,0xDF9B,0xDF9C,0xDF9D,0xDF9E,0xDF9F,0xDFEE,0xDFA0,0xDFA1, + 0xDF86,0xDE25,0xDC34,0xDC35,0xDC51, + /* plane 15, row 46 */ + 1 | (94 << 8), /* first, last */ + 0xD845,0xD850,0xD845,0xD845,0x366D,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0x366E,0xD845,0xD84C,0xD845,0xD845,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD846, + 0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xD847,0xffff,0xD847, + 0xD847,0xD848,0x5E64,0xD848,0xD848,0xffff,0xD848,0xD848,0xD849,0xD849, + 0xD849,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xffff, + 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B, + 1, /* first low-surrogate */ + 0xDC2D,0xDF62,0xDC54,0xDC52, 0,0xDC36,0xDC37,0xDC38,0xDC39, + 0xDC3A,0xDC3B,0xDC68,0xDC3C, 0,0xDD77,0xDE96,0xDE7E,0xDE7F,0xDC69, + 0xDC6A,0xDC6B,0xDC6C,0xDC6D,0xDC6E,0xDC6F,0xDC5D,0xDC70,0xDC85,0xDC71, + 0xDC72,0xDC73,0xDC74,0xDC75,0xDC76,0xDC84,0xDC77,0xDC83,0xDD9A,0xDEA7, + 0xDEA8,0xDEA9,0xDEAA,0xDEAB,0xDEAC,0xDEB7,0xDEAD,0xDEAE, 0,0xDF45, + 0xDCD3,0xDCD4,0xDCD5,0xDCD6,0xDCD7,0xDF26,0xDF27,0xDF28, 0,0xDF29, + 0xDF2A,0xDC05, 0,0xDDD0,0xDEB7, 0,0xDEB8,0xDEB9,0xDC22,0xDC23, + 0xDD73,0xDD74,0xDC8F,0xDC12,0xDC13,0xDC14,0xDC15,0xDC16,0xDC17,0xDC18, + 0xDC61,0xDC66,0xDC67,0xDC19,0xDC68,0xDC1A,0xDC69,0xDE04,0xDE05, 0, + 0xDE06,0xDDFD,0xDD50,0xDD51,0xDD52, + /* plane 15, row 47 */ + 1 | (94 << 8), /* first, last */ + 0xD84B,0xD84B,0xD84B,0xD84B,0xD87E,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xffff,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xffff,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0x6A2B,0xD84D,0xD84D,0xffff,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD850,0xD84F,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD87E,0xD84F,0xD84F,0xD84F,0xD84F,0xffff,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0x6F46, + 0xffff,0xD84F,0xD84F,0x6F9A,0xD84F, + 1, /* first low-surrogate */ + 0xDD53,0xDD54,0xDD55,0xDD63,0xDCC4,0xDD56,0xDD57,0xDD58,0xDD59, + 0xDD5A,0xDD5B, 0,0xDD5C,0xDD5D,0xDD5E,0xDD5F,0xDFD7, 0,0xDC60, + 0xDC61,0xDD17,0xDD39,0xDE8F,0xDEC8,0xDE90,0xDE91,0xDF98,0xDF99,0xDE44, + 0xDE45,0xDE46,0xDE59,0xDEEE, 0,0xDE47,0xDE48, 0,0xDE49,0xDE4A, + 0xDE4B,0xDE4C,0xDE4D,0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE52,0xDE53,0xDE54, + 0xDE55,0xDE56,0xDD15,0xDD9A,0xDE58,0xDEFC,0xDEFD,0xDF86,0xDF87,0xDF88, + 0xDF89,0xDF8A,0xDF8B,0xDF8C, 0,0xDC1F,0xDF8D,0xDF8E,0xDF8F,0xDF90, + 0xDF91,0xDF92,0xDF93,0xDD11,0xDF94,0xDF95,0xDECA,0xDF18, 0,0xDF96, + 0xDF97,0xDF98,0xDF99,0xDF9A,0xDF9B,0xDF9C,0xDF9D,0xDF9E,0xDF9F, 0, + 0,0xDFA0,0xDFA1, 0,0xDFB7, + /* plane 15, row 48 */ + 2 | (94 << 8), /* first, last */ + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD87E, + 0xD851,0xD851,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0x3F53,0xD853,0xD853,0xD853, + 0xD853,0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854, + 0xD854,0xD854,0xffff,0xD87E,0xffff,0xD854,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD856,0xffff,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xffff,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857, + 2, /* first low-surrogate */ + 0xDF96,0xDF68,0xDF69,0xDF8C,0xDF6A,0xDF6B,0xDF6C,0xDF6D, + 0xDF6E,0xDF6F,0xDF7F,0xDF84,0xDF70,0xDF71,0xDF85,0xDF72,0xDF73,0xDF74, + 0xDF75,0xDF76, 0,0xDF77,0xDF78,0xDF79,0xDF7A,0xDF7B,0xDF7C,0xDD1E, + 0xDD94,0xDED5,0xDC29,0xDE2B,0xDE2C,0xDE2D,0xDE2E,0xDE2F,0xDE30,0xDE3E, + 0xDE31,0xDE32,0xDE33,0xDE34,0xDE35,0xDF11, 0,0xDCC0,0xDE42,0xDE43, + 0xDE44,0xDE45,0xDE46,0xDC8C,0xDC8D,0xDC8E,0xDC8F,0xDC90,0xDC91,0xDE63, + 0xDE64,0xDE65, 0,0xDD4A, 0,0xDFF6,0xDD36,0xDD37,0xDD2C,0xDD38, + 0xDD39, 0,0xDD3A,0xDEE3,0xDEE2,0xDEF5,0xDC47, 0,0xDC48,0xDC49, + 0xDC4A,0xDC4B,0xDC4C,0xDEA8,0xDEA9,0xDEAA, 0,0xDC0B,0xDC06,0xDC73, + 0xDC0C,0xDC0D,0xDC0E,0xDC0F,0xDC10, + /* plane 15, row 49 */ + 2 | (94 << 8), /* first, last */ + 0xD857,0xD87E,0xD857,0xD857,0xD857,0xD857,0xffff,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xffff,0xD857,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xffff,0xD87E,0xD858,0xD858,0xD858,0xffff,0xffff,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0x443D,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD87E,0x4526, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0x4527,0xffff,0xD85B,0x4528,0xD85B,0xffff,0xD85C, + 0xD85C,0xD85C,0xffff,0xD87E,0xD85C, + 2, /* first low-surrogate */ + 0xDC11,0xDD62,0xDC12,0xDC14,0xDC15,0xDC16, 0,0xDC13, + 0xDC17,0xDED9,0xDEDA,0xDEDB, 0,0xDEDC,0xDCA6,0xDCA7,0xDCA8,0xDCA9, + 0xDCAA,0xDCAB, 0,0xDD6D,0xDCAC,0xDCAD,0xDCAE, 0, 0,0xDCAF, + 0xDCB0,0xDCB1,0xDE44,0xDE45,0xDEF7,0xDEF8,0xDC6B,0xDC6C,0xDC61,0xDD12, + 0xDDAF,0xDDB0,0xDDB1,0xDDB2,0xDDB3,0xDDB4,0xDDB5,0xDDB6,0xDE22,0xDFEA, + 0xDFEB,0xDFEC,0xDFED, 0,0xDCED,0xDD1B,0xDD47,0xDDE8,0xDED0,0xDEE7, + 0xDEE8,0xDEE9,0xDE4E,0xDE4F,0xDE50,0xDE72,0xDE51,0xDE52,0xDDA7, 0, + 0xDE53,0xDE54,0xDE55,0xDE56,0xDE57,0xDE77,0xDE58,0xDE59,0xDE5A,0xDE5B, + 0xDE5C,0xDE6E,0xDE5D, 0, 0,0xDE5E, 0,0xDE5F, 0,0xDDD7, + 0xDF89,0xDF8A, 0,0xDDBE,0xDF8B, + /* plane 15, row 50 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD87E,0xD85C,0xffff,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85D,0xD85D,0xffff,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xffff,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860,0xffff, + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xffff,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0x92F2,0xD862,0xD862,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863, + 0xD863,0xD864,0xD864,0xD864,0xD864, + 1, /* first low-surrogate */ + 0xDF8C,0xDF8D,0xDF8E,0xDDBC,0xDF8F, 0,0xDF9A,0xDF90,0xDF91, + 0xDF92,0xDF93,0xDF12,0xDEF1, 0,0xDFFE,0xDFFB,0xDC57,0xDE49,0xDE4A, + 0xDE4B,0xDE4C, 0,0xDE4D,0xDE59,0xDE4E,0xDE4F,0xDFF4,0xDC65,0xDDA6, + 0xDDA7,0xDDA8,0xDF22,0xDF23,0xDC8B,0xDC8C,0xDC8D,0xDC8E,0xDE58, 0, + 0xDE59,0xDF3B,0xDF3C,0xDF3D,0xDF3E,0xDC48,0xDD94,0xDD95,0xDD96,0xDD97, + 0xDD98,0xDF7D,0xDEFE,0xDF7E,0xDF7F, 0,0xDC5B,0xDC5C,0xDDE4,0xDDC1, + 0xDDFD,0xDDC2,0xDDD6,0xDDC3,0xDDC4, 0,0xDDDC,0xDDC5,0xDDC6,0xDDC7, + 0xDDE1,0xDDC8,0xDDC9,0xDDCA,0xDDCB, 0,0xDDCC,0xDDCD,0xDD35,0xDD36, + 0xDD47,0xDD37,0xDF1B,0xDF1C,0xDF1D,0xDF1E,0xDF1F,0xDF20,0xDF7B,0xDF7A, + 0xDFFE,0xDCC6,0xDCC7,0xDCC8,0xDCC9, + /* plane 15, row 51 */ + 1 | (94 << 8), /* first, last */ + 0xD864,0xffff,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD866, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD867,0xD867,0xD867,0xD867,0xffff,0xD867,0xD867,0xffff,0xD867,0xD867, + 0x9B79,0xffff,0xD867,0xffff,0xD868,0xD841,0xD840,0xD840,0xD840,0xD840, + 0xD840,0xD840,0xD840,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842, + 0xD843,0x567A,0xD843,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xffff,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844,0xD844, + 0xffff,0xffff,0xffff,0xD844,0xD845,0xffff,0xD845,0xD845,0xD845,0xD845, + 0xD845,0xD846,0xD846,0xD846,0xD846, + 1, /* first low-surrogate */ + 0xDCCA, 0,0xDCA0,0xDCA1,0xDDCC,0xDDCD,0xDEF1,0xDED7,0xDC42, + 0xDC46,0xDCA3,0xDCA5,0xDCA6,0xDECB,0xDECC,0xDF26,0xDF27,0xDF28,0xDF29, + 0xDCAE,0xDCAF,0xDCB0,0xDD73, 0,0xDD7C,0xDD74, 0,0xDF80,0xDD75, + 0, 0,0xDFCF, 0,0xDF8F,0xDE70,0xDC85,0xDF97,0xDFF6,0xDFF7, + 0xDFF8,0xDFFA,0xDFFB,0xDCBA,0xDCBB,0xDCBC,0xDCBD,0xDD34,0xDD35,0xDDA2, + 0xDE14,0xDE11,0xDE6E,0xDE6F,0xDC08,0xDCB8,0xDE09,0xDEBD,0xDEBE,0xDF88, + 0xDFFE, 0,0xDFFF,0xDC00,0xDC01,0xDC02,0xDC03,0xDC04,0xDC05,0xDC06, + 0,0xDC07,0xDC08,0xDC09,0xDC0A,0xDC0B,0xDC0C,0xDC0D,0xDC0E,0xDC0F, + 0, 0, 0,0xDE2C,0xDC6B, 0,0xDC6C,0xDC87,0xDC6D,0xDD78, + 0xDE8B,0xDCA4,0xDCA5,0xDCA6,0xDCA7, + /* plane 15, row 52 */ + 1 | (94 << 8), /* first, last */ + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff, + 0x372C,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD85F,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD847,0xD847,0xD848, + 0xffff,0xD848,0xD848,0xD848,0xD848,0x5F5C,0xD849,0xD849,0xD841,0xD84A, + 0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xffff,0xD84A, + 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0x65D9,0xD84C, + 0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xffff,0xD84C,0xD84C,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD87E,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0x6A72,0xD84D,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDCBE,0xDCA8,0xDCA9,0xDCAA,0xDC8D,0xDCAB,0xDCAC,0xDCBF, 0, + 0,0xDCAD,0xDCAE,0xDDA4,0xDDA5,0xDEC7,0xDEC8,0xDEC9,0xDDBC,0xDECA, + 0xDECB,0xDECC,0xDECD,0xDECE,0xDC19,0xDCE6,0xDF4C,0xDF4D,0xDF4E,0xDC06, + 0,0xDECD,0xDECE,0xDECF,0xDED0, 0,0xDD81,0xDD82,0xDD33,0xDC6A, + 0xDC6B,0xDCB2,0xDC6C,0xDC6D,0xDCCC,0xDCAE,0xDCB3,0xDC91, 0,0xDC6E, + 0xDCB4,0xDC6F,0xDDC9,0xDDA7,0xDDA8,0xDDA9,0xDDAA,0xDDAB,0xDDAC,0xDDAD, + 0xDDAE,0xDDAF,0xDDB0,0xDD60,0xDDB1,0xDEE1,0xDFE3,0xDFF6, 0,0xDEAF, + 0xDEB0,0xDEB1,0xDEBA,0xDEB2,0xDEB3,0xDF4C, 0,0xDFA0,0xDFA1,0xDEB0, + 0xDEB1,0xDEB2,0xDEB3,0xDEB4,0xDCEB,0xDEB5,0xDEB6,0xDEB7,0xDEB8,0xDEB9, + 0xDEBA, 0,0xDEBB,0xDEBC,0xDEBD, + /* plane 15, row 53 */ + 1 | (93 << 8), /* first, last */ + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6A78, + 0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x6B5A,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84F,0xD84F,0xD84F,0xD84F,0xD850, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD84F,0xD850,0xD850,0xD84F,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD84F,0xD84F,0xD87E,0xD850,0xD87E,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD864,0xD850, + 0xD850,0xD850,0xD850,0xD851,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD851,0xD844,0xD852,0xD841,0xD852,0xD852,0xD852, + 0x3EFB,0xD852,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDEBE,0xDEBF,0xDEDF,0xDEC0,0xDEC1,0xDEC2,0xDEC3,0xDEC4, 0, + 0,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0xDEC9,0xDECA,0xDF3C,0xDECB,0xDECC, + 0xDECD,0xDECE,0xDECF,0xDED0,0xDED1, 0,0xDD1D,0xDD1E,0xDE64,0xDE65, + 0xDEC5,0xDEC6,0xDEC7,0xDEFF,0xDFFF,0xDC00,0xDC01,0xDC02,0xDFF5,0xDC5C, + 0xDFF6,0xDFF7,0xDFB0,0xDFF8,0xDFF9,0xDC5D,0xDC50,0xDFFA,0xDFFB,0xDFA2, + 0xDFFC,0xDFFD,0xDFFE,0xDFFF,0xDD13,0xDC00,0xDD1F,0xDFC1,0xDFC2,0xDFC3, + 0xDFC4,0xDFC5,0xDFC6,0xDFC7,0xDFC8,0xDFC9,0xDFCA,0xDFCB,0xDCEF,0xDFD7, + 0xDFCC,0xDFCD,0xDFCE,0xDC22,0xDFCF,0xDFD0, 0,0xDFD1,0xDFD2,0xDFE9, + 0xDFD3,0xDFD4,0xDFD5,0xDD38,0xDC3B,0xDC7D,0xDD6F,0xDCA1,0xDE53,0xDE54, + 0,0xDE55,0xDE3C,0xDE56, + /* plane 15, row 54 */ + 1 | (94 << 8), /* first, last */ + 0xD852,0x3EFC,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xffff,0xffff,0xD852,0xD852,0xD852,0xD852,0xD852,0xD853,0xD853,0xD868, + 0xD853,0xD853,0xD854,0xD854,0xD854,0xD854,0xD854,0xD854,0xD87E,0xD854, + 0xffff,0xD854,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD857,0xD857,0xffff,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858, + 1, /* first low-surrogate */ + 0xDE66, 0,0xDE57,0xDE58,0xDE59,0xDE5A,0xDE5B,0xDE67,0xDE5C, + 0, 0,0xDE6A,0xDE5D,0xDE3D,0xDE5E,0xDE65,0xDCE1,0xDCCD,0xDC11, + 0xDE6F,0xDE70,0xDC1A,0xDC9A,0xDC9B,0xDC9C,0xDC9E,0xDC9F,0xDD3F,0xDE8E, + 0,0xDFFD, 0,0xDD5E,0xDD5F,0xDD60,0xDD65,0xDD67,0xDD68,0xDD69, + 0,0xDD6A,0xDD8F,0xDD6B,0xDD6C,0xDD6D,0xDEF7,0xDEF8,0xDEF9,0xDEE4, + 0xDEFA,0xDCB1,0xDC75,0xDC76,0xDDFF,0xDE00,0xDE01,0xDE02,0xDE03,0xDEAE, + 0xDEAD,0xDC51,0xDC52, 0,0xDC53,0xDC54,0xDC55,0xDC56,0xDC57,0xDC58, + 0xDC59,0xDC5A,0xDC5B,0xDC5C,0xDC5D,0xDC5E,0xDC5F,0xDC60,0xDC61,0xDC62, + 0xDC63,0xDC64,0xDC4C,0xDC66,0xDEF1,0xDEF2,0xDCF2,0xDCF3,0xDCF4,0xDCF5, + 0xDCF6,0xDCF7,0xDCF8,0xDCF9,0xDCFA, + /* plane 15, row 55 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD87E,0xD87E,0xD859, + 0xD859,0xD859,0xD859,0xD859,0xD859,0xD859,0xffff,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD87E, + 0xffff,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xffff,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xffff, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 1, /* first low-surrogate */ + 0xDE4C,0xDE4B,0xDF1B,0xDFCE,0xDFB3,0xDC7F,0xDD79,0xDD7C,0xDD1A, + 0xDDC4,0xDDC5,0xDDC6,0xDDC7,0xDDC8,0xDDC9, 0,0xDC19,0xDC1C,0xDC1A, + 0xDD4C,0xDD8E,0xDE7E,0xDEEB,0xDEEC,0xDEED,0xDEEE,0xDEEF,0xDEF0,0xDEF1, + 0xDED8,0xDED9,0xDEDA,0xDEDB,0xDEF2,0xDEF3,0xDEF4,0xDF07, 0,0xDDAC, + 0,0xDEF5,0xDF15, 0,0xDEF6,0xDEF7,0xDEF8,0xDEF9,0xDEFA,0xDEFB, + 0xDEFC,0xDEFD,0xDEFE,0xDFA7,0xDEFF,0xDF00,0xDF01,0xDF02,0xDF03,0xDF04, + 0xDF05,0xDDE9,0xDDEA,0xDDEB,0xDFDE,0xDFDF, 0,0xDFE0,0xDFE1,0xDFE2, + 0xDFE3,0xDF3E,0xDF3F,0xDF40,0xDF41,0xDC71,0xDC72,0xDC73,0xDE88,0xDE89, + 0xDE8A,0xDE8B,0xDE8C,0xDE8D,0xDE8E,0xDE8F,0xDE90,0xDE91,0xDE92, 0, + 0xDCF1,0xDDBE,0xDDBF,0xDDC0,0xDDC1, + /* plane 15, row 56 */ + 1 | (94 << 8), /* first, last */ + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xffff,0xffff,0xD860,0xD860,0x8EBE, + 0xD860,0xffff,0xD860,0xD860,0xD860,0xD860,0xD860,0xD861,0xD861,0xD861, + 0xD861,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0x933B,0xD862,0xD862,0xD862,0xFA28,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0x9340,0xD862,0xD862,0xD862,0x933A,0xD862,0xffff, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,0xD863, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD864, + 0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD864,0xD87E,0xD865, + 0xD865,0xffff,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDDC2,0xDDC3,0xDE6E,0xDF37,0xDF57,0xDF38,0xDF39,0xDF3A,0xDF3B, + 0xDF3C,0xDF3D,0xDF3E,0xDF27,0xDF3F, 0, 0,0xDCC0,0xDCC1, 0, + 0xDE67, 0,0xDE68,0xDF58,0xDF65,0xDF59,0xDF5A,0xDC24,0xDDCD,0xDDCE, + 0xDDCF,0xDDD2,0xDF9F,0xDF22,0xDC7D,0xDC7E,0xDDFF,0xDE25,0xDE00,0xDE01, + 0,0xDE02,0xDE03,0xDE04, 0,0xDE05,0xDE06,0xDE07,0xDE16,0xDE08, + 0xDE17,0xDE09,0xDE0A, 0,0xDE0B,0xDE0C,0xDE29, 0,0xDE0D, 0, + 0xDE0E,0xDE10,0xDE11,0xDE1D,0xDE12,0xDE13, 0,0xDE14,0xDE15,0xDC8D, + 0xDD54,0xDD55,0xDD56,0xDF33,0xDF34,0xDF35,0xDF36,0xDFFA,0xDCE3,0xDCE6, + 0xDCED,0xDCE7,0xDCE8,0xDCE9,0xDCEA,0xDCEB,0xDE27,0xDE20,0xDDF8,0xDC2A, + 0xDCC9, 0,0xDCCA,0xDCCB,0xDCD9, + /* plane 15, row 57 */ + 1 | (94 << 8), /* first, last */ + 0xD865,0xD865,0xD865,0xffff,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD87E,0xD866, + 0xD867,0xD867,0xD867,0xD867,0x9B96,0xD867,0xD867,0xffff,0xffff,0xD867, + 0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD840, + 0xD841,0xD841,0xD841,0xD841,0xD841,0xD87E,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD841,0xD841,0xD842,0xD842,0xD842,0xD844,0xD844,0xD844, + 0xffff,0xffff,0xD844,0xD844,0xD844,0xD844,0xD844,0xffff,0xD845,0xD845, + 0xD845,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xffff,0xD847, + 0xD847,0xD847,0xD848,0xffff,0xD848, + 1, /* first low-surrogate */ + 0xDCCC,0xDCCD,0xDCCE, 0,0xDDE1,0xDF1B,0xDF1C,0xDF1D,0xDF1E, + 0xDC47,0xDCD1,0xDCC9,0xDED0,0xDED1,0xDF3F,0xDF40,0xDF41,0xDE09,0xDF42, + 0xDCC4,0xDD9B,0xDD92,0xDD93, 0,0xDD94,0xDD95, 0, 0,0xDFF3, + 0xDFF4,0xDFF5,0xDFF6,0xDE60,0xDE9E,0xDEA0,0xDEA1,0xDF1C,0xDF9F,0xDC56, + 0xDC12,0xDC1F,0xDC15,0xDC16,0xDC17,0xDC0C,0xDC18,0xDCC2,0xDCC3,0xDCC4, + 0xDDA1,0xDE1B,0xDE1C,0xDE71,0xDC13,0xDF17,0xDF8F,0xDC5F,0xDC60,0xDCAC, + 0, 0,0xDC61,0xDC62,0xDC63,0xDC64,0xDC65, 0,0xDC99,0xDC9A, + 0xDC9B,0xDC9C,0xDC9D,0xDC9E,0xDC9F,0xDCA0,0xDCDA,0xDCDB,0xDCDC,0xDCDD, + 0xDCDE,0xDCDF,0xDED5,0xDED6,0xDED7,0xDED8,0xDEE0,0xDFB4, 0,0xDF6E, + 0xDF6F,0xDF70,0xDD63, 0,0xDED5, + /* plane 15, row 58 */ + 1 | (94 << 8), /* first, last */ + 0xD848,0xD848,0xD848,0xD849,0xD84A,0xD84A,0xD84A,0xD84A,0x39A0, + 0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD84B,0xD84B,0xD87E,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xD84C,0xD840,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD84E,0xD858,0xD84E,0xD84F,0xD84F, + 0xD84F,0xD84F,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD851,0xD851,0x71F5,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851, + 1, /* first low-surrogate */ + 0xDED6,0xDED7,0xDED8,0xDC30,0xDCB5,0xDCB6,0xDCC1,0xDCF7, 0, + 0xDCCB,0xDCE8, 0,0xDCE9,0xDCB7,0xDE15,0xDDE6,0xDDE7,0xDDE8,0xDDE9, + 0xDDEA,0xDDEB,0xDCCA,0xDC0B,0xDC0C,0xDC64,0xDED4,0xDED5,0xDED6,0xDED8, + 0xDFA5,0xDC5B,0xDF0F,0xDF10, 0,0xDF11,0xDF12,0xDF13,0xDF14,0xDF15, + 0xDF16,0xDF17,0xDF18,0xDF19,0xDF1A,0xDF2F,0xDF1B,0xDF1C,0xDF3F,0xDF1D, + 0xDF1E,0xDF2C,0xDF1F,0xDD24,0xDDA4,0xDDA5,0xDE51,0xDEFE,0xDC11,0xDC12, + 0xDC13,0xDC54,0xDC5E,0xDC21,0xDC3F,0xDC40,0xDC41,0xDC42,0xDC43,0xDC44, + 0xDC20,0xDC45, 0,0xDC46,0xDCB0,0xDC47,0xDC57,0xDC01,0xDCB1,0xDC5A, + 0xDC48,0xDC04,0xDC05, 0,0xDC4F,0xDC50,0xDC06,0xDC07,0xDC08,0xDC09, + 0xDC0A,0xDC0B,0xDC0C,0xDC0D,0xDC0E, + /* plane 15, row 59 */ + 1 | (94 << 8), /* first, last */ + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852, + 0xD852,0xD852,0xD852,0x3F01,0xD852,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD853,0xD853,0xffff,0xffff,0xD854,0xD854,0xffff, + 0xD854,0xD854,0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD855,0xffff,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD855, + 0xD855,0xD856,0xD856,0xD856,0xD856,0xD856,0xD856,0x7A50,0xD856,0xD856, + 0xD856,0xD857,0xD857,0x7C14,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xffff,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD858,0xD858,0xD858, + 1, /* first low-surrogate */ + 0xDC0F,0xDC10,0xDC11,0xDD33,0xDD34,0xDD35,0xDDFC,0xDDFD,0xDCB0, + 0xDCB1,0xDCB2,0xDCB3, 0,0xDE7B,0xDE7C,0xDE7D,0xDE7E,0xDE7F,0xDE80, + 0xDE81,0xDE82,0xDFF9,0xDCDA,0xDEA1, 0, 0,0xDCAD,0xDCAE, 0, + 0xDEC8,0xDEC9,0xDECA,0xDD82,0xDD83,0xDD84,0xDD85,0xDD86,0xDD87,0xDD88, + 0xDD89,0xDD8A, 0,0xDF07,0xDF08,0xDF01,0xDF09,0xDF02,0xDF0A,0xDF0B, + 0xDF0C,0xDCA7,0xDC98,0xDC99,0xDC9A,0xDC9B,0xDC9C, 0,0xDC9D,0xDE1A, + 0xDEB2,0xDCB0,0xDCB1, 0,0xDCB2,0xDCB3,0xDCB4,0xDCB5,0xDCB6,0xDCC0, + 0xDCB7,0xDCB8,0xDCB9,0xDCBA,0xDD1D,0xDF0C,0xDF0D,0xDF0E,0xDF35,0xDF0F, + 0xDF10,0xDF11,0xDF12,0xDD22,0xDD23,0xDD24, 0,0xDD25,0xDD26,0xDD27, + 0xDD28,0xDD29,0xDD2A,0xDD2B,0xDD2C, + /* plane 15, row 60 */ + 1 | (94 << 8), /* first, last */ + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xD859, + 0xD859,0xD859,0xD859,0xD87E,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0xD85B,0xD85B,0xD85B,0xD85C, + 0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xffff, + 0xD85D,0xD85D,0xD85D,0xD849,0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xffff,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0x481A,0xD860, + 0xD860,0xD860,0xD860,0xD860,0xD861, + 1, /* first low-surrogate */ + 0xDD2D,0xDD2E,0xDE52,0xDE53,0xDF19,0xDFBF,0xDC8B,0xDC8C,0xDD23, + 0xDD24,0xDDF1,0xDDD8,0xDD7F,0xDC4E,0xDC4F,0xDC55,0xDC50,0xDC51,0xDC52, + 0xDC53,0xDC02,0xDC54,0xDCF1,0xDD24,0xDED1,0xDF7C,0xDF7D,0xDF7E,0xDF7F, + 0xDF80,0xDF9F,0xDF81,0xDF82,0xDF83,0xDF84,0xDF85,0xDF86,0xDF87,0xDF88, + 0xDF9B,0xDF89,0xDF8A,0xDF8B,0xDF8C, 0,0xDFA1,0xDF8D,0xDF8E,0xDDF3, + 0xDDF4,0xDDF5,0xDC24,0xDC25,0xDC26,0xDC27,0xDC28,0xDC29,0xDC2A, 0, + 0xDC2B,0xDDCD,0xDE01,0xDD8D,0xDF70,0xDC80,0xDC81,0xDEC0,0xDEC1,0xDEC2, + 0xDEC3,0xDEC4,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0xDCFE, 0,0xDDD9,0xDDDC, + 0xDDDA,0xDE75,0xDF58,0xDF59,0xDF5A,0xDF5B,0xDF5C,0xDCEC, 0,0xDCF3, + 0xDE72,0xDE73,0xDF82,0xDF83,0xDC2A, + /* plane 15, row 61 */ + 1 | (93 << 8), /* first, last */ + 0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xffff, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0x9387,0xD862,0xD862,0xD862,0xD862, + 0xffff,0xD862,0xD862,0x9385,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0x493C,0xffff,0xD862,0xD862,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xD864,0xffff,0xD864,0xD864,0xD864,0xD864,0xD864, + 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD865,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0x9BB1,0xD867,0xD867,0xD867, + 0xD868,0xD868,0xD868,0xD868, + 1, /* first low-surrogate */ + 0xDC2B,0xDC2C,0xDC2D,0xDDF6,0xDE00,0xDDF7,0xDDF8,0xDDF9, 0, + 0xDC94,0xDC95,0xDC96,0xDD1B,0xDE86,0xDE4C,0xDE4D,0xDE83, 0,0xDE82, + 0xDE4E,0xDE4F,0xDE50,0xDE51,0xDE81, 0,0xDE52,0xDE53,0xDE54,0xDE55, + 0,0xDE56,0xDE57, 0,0xDE58,0xDE5B,0xDE5C,0xDE5D,0xDE5E,0xDE5F, + 0xDE60,0xDE61,0xDE7C,0xDE62, 0, 0,0xDE63,0xDE64,0xDD73,0xDF45, + 0xDF46,0xDF47,0xDF4C,0xDC12, 0,0xDC13,0xDD39,0xDD03,0xDD0D,0xDE30, + 0xDED5,0xDFC0,0xDCF2,0xDCF3,0xDCF4,0xDCF5,0xDCF6,0xDCF7,0xDDFA,0xDDFB, + 0xDF45,0xDF46,0xDC49,0xDCE7,0xDCE8,0xDED8,0xDED9,0xDF55,0xDF56,0xDF57, + 0xDCDA,0xDCDB,0xDCDC,0xDDB8,0xDDB9,0xDDBA, 0,0xDDBB,0xDF89,0xDDBC, + 0xDC30,0xDC31,0xDC32,0xDC33, + /* plane 15, row 62 */ + 1 | (94 << 8), /* first, last */ + 0xD868,0xD868,0xD868,0x9D47,0xD868,0xD868,0xD868,0xD868,0xD868, + 0xD869,0xffff,0xD841,0xffff,0xD841,0xD841,0xD841,0xD841,0xD841,0xD841, + 0xD841,0xD841,0xD842,0xD842,0xD842,0xD842,0xD842,0xD842,0xD844,0xD844, + 0xD844,0xD844,0xD844,0xffff,0xffff,0xD844,0xD844,0xD844,0xD844,0xD845, + 0xD845,0xD845,0xD844,0xD845,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD848,0xD848, + 0xD848,0xD849,0xD849,0xD84A,0xD84A,0xffff,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xD87E,0xD84B,0xD84B,0x3A6B,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xD84C, + 0xffff,0xD84C,0xD84C,0xD84D,0xD84D, + 1, /* first low-surrogate */ + 0xDC34,0xDC35,0xDC36, 0,0xDC37,0xDEB2,0xDF90,0xDF26,0xDFA2, + 0xDC38, 0,0xDC2E, 0,0xDC2F,0xDC30,0xDC2A,0xDC2B,0xDCC9,0xDD37, + 0xDE20,0xDE72,0xDC1F,0xDD65,0xDDCA,0xDEC0,0xDEC1,0xDEC2,0xDCB7,0xDCB8, + 0xDCB9,0xDCBA,0xDCBB, 0, 0,0xDCBC,0xDCBD,0xDCBE,0xDCF2,0xDCB5, + 0xDCB7,0xDCB8,0xDCDF,0xDCB9,0xDCD5,0xDCBA,0xDCBB,0xDD4A,0xDCF2,0xDCF3, + 0xDCF4,0xDCFA,0xDCF5,0xDD02,0xDEE2,0xDEE3,0xDF8E,0xDF8B,0xDEE4,0xDEEB, + 0xDEE5,0xDC35,0xDD93,0xDCEA,0xDCEB, 0,0xDCEC,0xDCED,0xDD17,0xDCEE, + 0xDCEF,0xDCF0,0xDE0E,0xDE0F,0xDE10,0xDE19,0xDE18,0xDE11,0xDE12,0xDE13, + 0xDCC7,0xDE14,0xDE15, 0,0xDE16,0xDC65,0xDEEA,0xDEEB,0xDEEC,0xDEED, + 0,0xDEEE,0xDFAC,0xDFC2,0xDF69, + /* plane 15, row 63 */ + 1 | (94 << 8), /* first, last */ + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0x3BF4, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84F,0xD84F,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD851, + 0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD852,0xD852,0xD852,0xffff,0xD852,0xD852,0xD852,0xD852,0xD852, + 0xD852,0xD862,0xD852,0xD852,0xD852,0xD853,0xD854,0xD854,0xD854,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xD856,0xD856, + 0xD856,0xD856,0xD856,0xD846,0xD856,0xD856,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857, + 1, /* first low-surrogate */ + 0xDF81,0xDF6A,0xDF6B,0xDF6C,0xDF6D,0xDF6E,0xDF6F,0xDF70, 0, + 0xDF71,0xDF72,0xDF73,0xDF8C,0xDF74,0xDF75,0xDF76,0xDC24,0xDC2A,0xDC8E, + 0xDCAF,0xDC8F,0xDC90,0xDC91, 0,0xDC92,0xDC93,0xDC94,0xDC95,0xDC96, + 0xDC97,0xDC98,0xDC99,0xDC9A,0xDC9B,0xDC9C,0xDC39,0xDC3B,0xDC3A,0xDC3C, + 0xDC3D,0xDC3E,0xDC3F,0xDC70,0xDC40,0xDC41,0xDCC0,0xDCC1,0xDEA4,0xDE97, + 0xDEA5,0xDE98,0xDE99,0xDE9A, 0,0xDE9B,0xDEA6,0xDE9C,0xDE9D,0xDE9E, + 0xDE9F,0xDECE,0xDEC8,0xDEA0,0xDF19,0xDC0D,0xDCBF,0xDEE9,0xDEEA,0xDDA2, + 0xDDA3,0xDDA4,0xDDA5,0xDDA6,0xDF15,0xDF17,0xDCBF,0xDCC0,0xDCC1,0xDCC2, + 0xDCC3,0xDCC4,0xDCC5,0xDD0D,0xDE23,0xDEBE,0xDD03,0xDD04,0xDD05,0xDD06, + 0xDD07,0xDD08,0xDD09,0xDD0A,0xDD0B, + /* plane 15, row 64 */ + 1 | (94 << 8), /* first, last */ + 0xD857,0xD857,0xD857,0xD857,0xD857,0xffff,0xD857,0xD857,0xD857, + 0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858,0xD858, + 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD859,0xD85A,0xD85A,0xD85A, + 0xffff,0xffff,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xffff,0x455C,0xD85B,0xD85B,0xD85B, + 0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B,0xD85B, + 0xD85C,0xD87E,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xffff,0xD85D,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85E,0xD85E,0xD85E, + 0xD85E,0xD85E,0xD85E,0xffff,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F, + 0x4787,0xD85F,0xD85F,0xD85F,0xD860, + 1, /* first low-surrogate */ + 0xDD0C,0xDD20,0xDD0D,0xDD0E,0xDD0F, 0,0xDF26,0xDF27,0xDF28, + 0xDD5D,0xDD5E,0xDD5F,0xDD60,0xDD61,0xDD62,0xDD63,0xDD64,0xDD65,0xDE57, + 0xDFCF,0xDFD0,0xDC99,0xDC9A,0xDDEA,0xDDEB,0xDDEC,0xDC7E,0xDC7F,0xDC80, + 0, 0,0xDC81,0xDC82,0xDCF3,0xDD25,0xDD9F,0xDDA0,0xDDF3,0xDE00, + 0xDFEB,0xDFEC,0xDFED,0xDFEE,0xDFEF, 0, 0,0xDFF0,0xDFF1,0xDFF2, + 0xDFF3,0xDFF4,0xDFF5,0xDFF9,0xDFFA,0xDFFB,0xDFFC,0xDFFD,0xDFFE,0xDFFF, + 0xDC00,0xDDAE,0xDC01,0xDC02,0xDE03,0xDC86,0xDC79, 0,0xDC7A,0xDC7B, + 0xDC7C,0xDC84,0xDC7D,0xDC7E,0xDC7F,0xDF86,0xDF87,0xDC00,0xDC01,0xDC88, + 0xDC89,0xDC8A,0xDEF5, 0,0xDF25,0xDEF6,0xDDEB,0xDDEC,0xDDED,0xDDEE, + 0,0xDDEF,0xDDF0,0xDF6C,0xDD21, + /* plane 15, row 65 */ + 1 | (94 << 8), /* first, last */ + 0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD861,0xD861,0xD861,0xD862,0xD862,0xD862,0xD862,0xD862,0x93B9, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862,0xD862, + 0xD862,0xffff,0xD862,0xD862,0xD862,0x93BF,0xD862,0xD862,0xD862,0xD863, + 0xD863,0xD863,0xD87E,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864, + 0xffff,0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865, + 0xD866,0xD866,0xD866,0xffff,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866, + 0xffff,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867, + 0xD867,0xD867,0x9BCF,0xD867,0xD868,0xD868,0xD851,0x9D64,0xD868,0xD868, + 0xD868,0xD868,0x9EBF,0xD869,0xD841, + 1, /* first low-surrogate */ + 0xDD22,0xDD23,0xDD24,0xDD25,0xDD26,0xDE7B,0xDE7C,0xDF91,0xDF92, + 0xDF93,0xDE0E,0xDE0F,0xDE10,0xDCB3,0xDD36,0xDEC6,0xDEA1,0xDEA2, 0, + 0xDEA3,0xDECC,0xDEA4,0xDEA5,0xDEA6,0xDECB,0xDEA7, 0,0xDEA8,0xDEA9, + 0xDEAA, 0,0xDEAB,0xDEAC,0xDEAD, 0,0xDEAE,0xDEAF,0xDEB0,0xDD8C, + 0xDD8D,0xDD8E,0xDDF1,0xDD92,0xDD8F,0xDF52,0xDF53,0xDF54,0xDF55,0xDD29, + 0,0xDEF3,0xDEF4,0xDD0D,0xDD0E,0xDD0F,0xDD10,0xDE14,0xDF71,0xDF72, + 0xDD0F,0xDD04,0xDD06, 0,0xDD07,0xDEDC,0xDEDD,0xDF6D,0xDF79,0xDF6E, + 0,0xDCEC,0xDDDD,0xDDDE,0xDDDF,0xDDE0,0xDDE1,0xDDE2,0xDDE3,0xDDE4, + 0xDE3A,0xDDE5, 0,0xDDE6,0xDC6B,0xDC6C,0xDC4E, 0,0xDEBD,0xDEBE, + 0xDEBF,0xDF34, 0,0xDD12,0xDC40, + /* plane 15, row 66 */ + 1 | (94 << 8), /* first, last */ + 0xD841,0xD844,0xD844,0xD844,0xD844,0xD844,0xD845,0xD845,0xD845, + 0xD846,0xD846,0xD846,0xD846,0xD846,0xD846,0xD847,0xD847,0xD847,0xD848, + 0xD848,0xD848,0xD848,0xffff,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A,0xD84A, + 0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B,0xD84B, + 0xffff,0xD84B,0xD84C,0xD84C,0xD84C,0xD84C,0xffff,0xD84D,0xffff,0xffff, + 0xD84D,0x3C07,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D,0xD84E,0xD84E,0xD850,0xD850, + 0xD850,0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850,0xD850, + 0xD850,0xD850,0xffff,0xffff,0xD851,0xD851,0xD851,0xD851,0x3F05,0xD852, + 0xD852,0x3F06,0xD852,0xD852,0xD852, + 1, /* first low-surrogate */ + 0xDC41,0xDD02,0xDD03,0xDD04,0xDD05,0xDD06,0xDCD7,0xDCCC,0xDE98, + 0xDD06,0xDD07,0xDDAF,0xDDB0,0xDEEA,0xDEF2,0xDFA2,0xDFA3,0xDFA4,0xDD76, + 0xDEF5,0xDEF6,0xDEF7, 0,0xDD3B,0xDD25,0xDD3A,0xDD3C,0xDD3D,0xDD3E, + 0xDE37,0xDE38,0xDE39,0xDE3A,0xDE3B,0xDE3C,0xDE3D,0xDE3E,0xDE3F,0xDE4B, + 0,0xDE40,0xDC22,0xDC67,0xDCD3,0xDEFA, 0,0xDFBC, 0, 0, + 0xDFA5, 0,0xDFB6, 0,0xDFA6,0xDFBB,0xDFA7,0xDFA8,0xDFA9,0xDFAA, + 0xDFAB,0xDFAC,0xDFBF,0xDFAD,0xDFAE,0xDFAF,0xDD2E,0xDF00,0xDC9D,0xDC9E, + 0xDCCB,0xDCCC,0xDCCD,0xDCCE,0xDCCF, 0,0xDC9F,0xDCD0,0xDCD1,0xDCD2, + 0xDCD3,0xDCD4, 0, 0,0xDC5D,0xDC5E,0xDC5F,0xDC60, 0,0xDEBA, + 0xDEBC, 0,0xDEB5,0xDEBD,0xDEB6, + /* plane 15, row 67 */ + 1 | (94 << 8), /* first, last */ + 0xD852,0xD852,0xD852,0xD87E,0xD852,0xD852,0xD853,0xD854,0xD854, + 0xD854,0xD855,0xD855,0xD855,0xD855,0xD855,0xD856,0xD857,0xffff,0xD857, + 0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xffff, + 0xD857,0xD857,0xD858,0xD858,0xffff,0xD858,0xD858,0xD858,0xD858,0xD859, + 0xD859,0xD859,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85A,0xD85C, + 0xD85C,0xffff,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85B, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xffff,0xD85D,0xD85D,0xD85D,0x45F9,0xD85D, + 0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0x89B8,0xD85E,0xD85E, + 0xD85E,0xD85F,0xD85F,0xD85F,0xD85F, + 1, /* first low-surrogate */ + 0xDEB7,0xDEB8,0xDEA8,0xDD32,0xDFFE,0xDFFC,0xDEE1,0xDCC4,0xDCC5, + 0xDF14,0xDDAE,0xDDAF,0xDDB0,0xDDB1,0xDDB9,0xDCE7,0xDD46, 0,0xDD47, + 0xDD48,0xDD49,0xDD1E,0xDD1F,0xDD4A,0xDD4B,0xDD4C,0xDD4D,0xDD4E, 0, + 0xDF46,0xDF4B,0xDD90,0xDD91, 0,0xDD92,0xDD93,0xDD94,0xDE5B,0xDDF2, + 0xDDF8,0xDDF9,0xDC94,0xDCA4,0xDC97,0xDC98,0xDD29,0xDDAE,0xDEAF,0xDC59, + 0xDC5A, 0,0xDC5B,0xDC5C,0xDC5D,0xDC5E,0xDC5F,0xDC60,0xDC61,0xDFAA, + 0xDC62,0xDC63,0xDC64,0xDC65,0xDC66,0xDC67,0xDC68,0xDC69,0xDC6A,0xDC6B, + 0xDC6C,0xDC6D,0xDC6E,0xDC6F, 0,0xDCB2,0xDCB3,0xDCB4, 0,0xDCB5, + 0xDCB6,0xDCB7,0xDCB8,0xDCB9,0xDCBA,0xDCBB,0xDF88, 0,0xDF19,0xDF1A, + 0xDF1B,0xDC16,0xDE0C,0xDE0D,0xDE0E, + /* plane 15, row 68 */ + 1 | (94 << 8), /* first, last */ + 0xD85F,0xffff,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xffff, + 0xD861,0xD861,0xD861,0xD861,0xD861,0xffff,0xffff,0xD862,0xD862,0xD862, + 0x4953,0xD862,0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863, + 0xD863,0xD863,0xD863,0xffff,0xD863,0xffff,0xD864,0xD864,0xD864,0xffff, + 0xD864,0xD864,0xD865,0xD865,0xD865,0xD865,0xD865,0xD865,0xffff,0xD866, + 0xD866,0xD866,0xffff,0xD866,0xD866,0xD866,0xffff,0xD866,0xD867,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0x9BF3,0xD867,0xffff,0xD867,0xD867, + 0xD867,0xD867,0x4C69,0xffff,0xD868,0x4CE5,0xD868,0xD868,0xffff,0xD868, + 0xD841,0xD841,0xD842,0xD844,0xD844, + 1, /* first low-surrogate */ + 0xDE0F, 0,0xDF83,0xDF84,0xDF85,0xDE83,0xDE84,0xDFB0, 0, + 0xDE26,0xDE27,0xDE36,0xDE28,0xDE29, 0, 0,0xDEE7,0xDEE8,0xDEE9, + 0,0xDEEA,0xDEEB, 0,0xDEEC,0xDEED,0xDEEE,0xDEEF,0xDEF0,0xDEF1, + 0xDF0C,0xDEF2,0xDEF3,0xDEF4,0xDEF5,0xDEF6,0xDEF7,0xDEF8,0xDDA3,0xDDA4, + 0xDDA5,0xDDA6,0xDDA7, 0,0xDF5C, 0,0xDD4B,0xDDE1,0xDF15, 0, + 0xDF16,0xDF17,0xDD2C,0xDD2D,0xDE22,0xDE23,0xDF96,0xDF97, 0,0xDD2E, + 0xDD30,0xDD31, 0,0xDEDF,0xDF8B,0xDF8C, 0,0xDF8D,0xDCFC,0xDCFD, + 0xDCFE,0xDCFF,0xDE17,0xDE2D,0xDE18, 0,0xDE19, 0,0xDE12,0xDE1A, + 0xDE1B,0xDE1C, 0, 0,0xDC97, 0,0xDC98,0xDC99, 0,0xDFC4, + 0xDC4F,0xDCCD,0xDEC7,0xDD1C,0xDD1D, + /* plane 15, row 69 */ + 1 | (94 << 8), /* first, last */ + 0xD844,0xD845,0xD845,0xD845,0xD845,0xD846,0xD847,0xD847,0xD847, + 0xD849,0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84C,0xD84D, + 0xD84D,0xD84D,0xD84D,0xD84D,0xffff,0xD84D,0xD84D,0xD84D,0xD84D,0xD84D, + 0x3C12,0xD84D,0xffff,0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851, + 0xD851,0xffff,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xD851,0xffff, + 0xD852,0xD852,0xD852,0xD852,0xD854,0xD854,0xffff,0xffff,0xD855,0xD855, + 0xD855,0xD855,0xD855,0xD855,0xD856,0xD856,0xffff,0xD856,0xD856,0xD856, + 0xD856,0x7C4F,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858,0xffff, + 0xD858,0xD858,0xD859,0xD859,0xD859,0xD859,0xD85A,0xffff,0xD85A,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 1, /* first low-surrogate */ + 0xDD1E,0xDCE7,0xDCE9,0xDCEA,0xDCEB,0xDD15,0xDCF1,0xDCF2,0xDFB6, + 0xDDA0,0xDD4A,0xDE20,0xDE60,0xDE61,0xDE41,0xDE62,0xDF03,0xDF04,0xDFD9, + 0xDFDA,0xDFDB,0xDFDC,0xDFDD, 0,0xDFDE,0xDFDF,0xDFE0,0xDFE1,0xDFE2, + 0,0xDFE3, 0,0xDC31,0xDD05,0xDD06,0xDD07,0xDC72,0xDC8A,0xDC8B, + 0xDC88, 0,0xDC8C,0xDC8D,0xDC8E,0xDC8F,0xDC90,0xDD42,0xDD43, 0, + 0xDEC1,0xDEC2,0xDEC3,0xDEC4,0xDCCB,0xDF22, 0, 0,0xDDC3,0xDDC4, + 0xDDC5,0xDDC6,0xDF1E,0xDF25,0xDCF3,0xDCF4, 0,0xDCF5,0xDE38,0xDE48, + 0xDECA, 0,0xDD7A,0xDD7B,0xDF55,0xDF56,0xDDB1,0xDDB2,0xDDB3, 0, + 0xDDB4,0xDDB5,0xDCA4,0xDE00,0xDE01,0xDE02,0xDCAC, 0,0xDDB3,0xDCB6, + 0xDCB7,0xDCB8,0xDCB9,0xDCBA,0xDCBB, + /* plane 15, row 70 */ + 1 | (94 << 8), /* first, last */ + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D,0xD85D,0xD85D,0xffff,0xD85D, + 0xD85D,0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD85F,0xD85F,0xD85F,0xD85F,0xD85F,0xD860,0xD860,0xD860,0xD860,0xD860, + 0xD860,0xD860,0xD860,0xD861,0xD861,0xffff,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0x9425,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD87E,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff, + 0xD862,0xD862,0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD863,0xD863,0xD863,0xD863,0xD864,0xD864,0xffff,0xD864,0xD864,0xD864, + 0xD865,0xD865,0xD866,0xD866,0xD866, + 1, /* first low-surrogate */ + 0xDCBC,0xDCBD,0xDCBE,0xDCBF,0xDCC0,0xDCC1,0xDCC2,0xDCC3,0xDCC4, + 0xDCC5,0xDCC6,0xDCC7,0xDCE3,0xDCE4,0xDCE5,0xDCE6,0xDCE7, 0,0xDFB5, + 0xDFA1,0xDC95,0xDF3B,0xDF3C,0xDF3D,0xDF3E,0xDC14,0xDE20,0xDE21,0xDE22, + 0xDE23,0xDE24,0xDF96,0xDF97,0xDF98,0xDD94,0xDD95,0xDD96,0xDD97,0xDD98, + 0xDE8F,0xDE90,0xDFBC,0xDC3B,0xDE3D, 0,0xDCDF,0xDD1E,0xDF23,0xDF24, + 0xDF49,0xDF25,0xDF26,0xDF27,0xDF28, 0,0xDF29,0xDF2A,0xDF2E,0xDF2F, + 0xDF4E,0xDF30,0xDDEB,0xDF31,0xDF32,0xDF33,0xDF34,0xDF35,0xDF36, 0, + 0xDF37,0xDF50,0xDF38, 0,0xDF39,0xDF3A,0xDF3B,0xDF3C,0xDF3D,0xDF3E, + 0xDDB8,0xDDB9,0xDF62,0xDF63,0xDC41,0xDD6D, 0,0xDF52,0xDF37,0xDFDB, + 0xDD3F,0xDE34,0xDC5B,0xDD46,0xDD5A, + /* plane 15, row 71 */ + 1 | (94 << 8), /* first, last */ + 0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867, + 0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xffff, + 0xD867,0xffff,0xD868,0xD868,0xD868,0xD868,0xD868,0xD868,0xD869,0xD869, + 0xD869,0xD841,0xD87E,0xD841,0xD841,0xD841,0xD842,0xD842,0xffff,0xD844, + 0xD844,0xD845,0xD845,0xD845,0xD845,0xD846,0xD846,0xD846,0xD846,0xD847, + 0xD853,0xffff,0xD849,0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84E, + 0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E,0xD84E, + 0xffff,0xD84F,0xD850,0xD850,0xD850,0xD850,0xffff,0xD850,0xD850,0xD850, + 0xD850,0xD851,0xD851,0xD851,0xD851,0xD851,0xD852,0xD853,0xD853,0xD853, + 0xD854,0xD854,0xD855,0xD855,0xD841, + 1, /* first low-surrogate */ + 0xDD5B,0xDEE1,0xDEE2,0xDEE3,0xDEE4,0xDFA7,0xDFA8,0xDFA9,0xDD0F, + 0xDD2B,0xDE56,0xDE57,0xDE58,0xDE5E,0xDE59,0xDE5A,0xDE5B,0xDE5C, 0, + 0xDE68, 0,0xDD2C,0xDCE2,0xDCF3,0xDED2,0xDF56,0xDFCE,0xDC61,0xDE9B, + 0xDEB4,0xDC5C,0xDC10,0xDCD2,0xDD71,0xDE73,0xDC2C,0xDF94, 0,0xDD3F, + 0xDD40,0xDCF9,0xDCFA,0xDCFD,0xDCFB,0xDD1C,0xDD1D,0xDEFF,0xDF00,0xDCF7, + 0xDCFE, 0,0xDCB6,0xDD54,0xDE77,0xDE79,0xDE7A,0xDE7B,0xDC69,0xDC02, + 0xDC03,0xDC04,0xDC05,0xDC06,0xDC07,0xDC08,0xDC09,0xDC0A,0xDC0B,0xDC35, + 0,0xDC39,0xDD1E,0xDD1F,0xDD20,0xDD21, 0,0xDD22,0xDD23,0xDD24, + 0xDD2C,0xDCB3,0xDCB5,0xDCB6,0xDCB7,0xDCB8,0xDED0,0xDCFA,0xDF07,0xDFBD, + 0xDCD7,0xDCD2,0xDDDB,0xDDD6,0xDC5D, + /* plane 15, row 72 */ + 1 | (94 << 8), /* first, last */ + 0xD856,0xD856,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857,0xD857, + 0xD857,0xD857,0xD858,0xD858,0xD858,0xD858,0xD859,0xD859,0xffff,0xD85A, + 0xD85A,0xD85A,0xD85A,0xD85A,0xD85C,0x4577,0xD85C,0xD85C,0xD85C,0xD85C, + 0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85D,0xD85D,0x8977,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xffff,0xD860, + 0xD860,0x4878,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD861,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD863,0xD863,0x95E6,0xD863,0xD863,0xD863,0xD864,0xffff,0xffff,0xD864, + 0xD865,0xD865,0xD865,0xD865,0xD865, + 1, /* first low-surrogate */ + 0xDE43,0xDECF,0xDDA3,0xDDA4,0xDDA5,0xDDA6,0xDDA7,0xDDA8,0xDDA9, + 0xDF5D,0xDF5E,0xDDC9,0xDDCA,0xDDCB,0xDDCC,0xDE06,0xDE07, 0,0xDCC5, + 0xDCF5,0xDDB4,0xDDB8,0xDDB5,0xDCFD, 0,0xDCFE,0xDCFF,0xDD00,0xDD01, + 0xDD02,0xDD03,0xDD09,0xDD04,0xDD05,0xDD06,0xDD07,0xDD11,0xDD12,0xDD13, + 0xDD14,0xDD15, 0,0xDC98,0xDC99,0xDE3C,0xDE2D,0xDE2E, 0,0xDDBB, + 0xDDBC, 0,0xDC3D,0xDE47,0xDE48,0xDE49,0xDE4A,0xDFE1,0xDFE7,0xDCEB, + 0xDD20,0xDD38,0xDF62,0xDF67,0xDF68,0xDF69,0xDF6A,0xDF6B,0xDF6D,0xDF6E, + 0xDF6F,0xDF70,0xDF71,0xDF72,0xDF8F,0xDF73,0xDF74,0xDF75,0xDF76,0xDF77, + 0xDDC9,0xDDCA, 0,0xDDCB,0xDDCC,0xDDCD,0xDC51, 0, 0,0xDE45, + 0xDD59,0xDD5A,0xDD5B,0xDE40,0xDFCF, + /* plane 15, row 73 */ + 1 | (94 << 8), /* first, last */ + 0xD866,0xD866,0xD866,0xD866,0xD867,0xD867,0xffff,0xD867,0xD867, + 0x9C2F,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD867,0xD868, + 0xD868,0xD868,0xD869,0xD869,0xD841,0xD841,0xD841,0xD841,0xD844,0xD845, + 0xD845,0xD846,0xD846,0xD84A,0xD84A,0xD84B,0xD84B,0xD84C,0xD84C,0xD84E, + 0xD84E,0xD84E,0xffff,0xD84E,0x6B0C,0xffff,0xD84E,0xD84E,0xD84E,0xD84E, + 0xD84F,0xD850,0xD850,0xD850,0xD851,0xD851,0xD851,0xD852,0xD852,0xD855, + 0xD855,0xD855,0xD856,0xD857,0xD857,0xD857,0xD857,0xD858,0xD858,0xD858, + 0xD858,0xD85A,0xD85C,0xffff,0xD85C,0xD85C,0xD85C,0xD85D,0xD85D,0xD85D, + 0xD85E,0xD85E,0xD85E,0xD85E,0xD85E,0xffff,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD860,0xffff,0xD860,0xD862,0xD862, + 1, /* first low-surrogate */ + 0xDC5E,0xDD7B,0xDE93,0xDFBC,0xDD16,0xDD30, 0,0xDE8D,0xDE8E, + 0,0xDE8F,0xDE90,0xDE91,0xDE92,0xDE93,0xDE94,0xDE95,0xDE96,0xDD23, + 0xDD14,0xDEDB,0xDC0A,0xDDCE,0xDC66,0xDC68,0xDC67,0xDCD3,0xDD63,0xDD04, + 0xDE9E,0xDD26,0xDD2A,0xDD6C,0xDD64,0xDE8F,0xDE90,0xDC34,0xDF0E,0xDC25, + 0xDC26,0xDC27, 0,0xDC28, 0, 0,0xDC29,0xDC2A,0xDC2B,0xDC2C, + 0xDC3E,0xDD42,0xDD43,0xDD33,0xDCC1,0xDCC2,0xDCC3,0xDED6,0xDED7,0xDDE1, + 0xDDE2,0xDF2B,0xDED1,0xDDCC,0xDDCD,0xDDCE,0xDDCF,0xDDDE,0xDDDF,0xDDE0, + 0xDDE1,0xDCF6,0xDD2C, 0,0xDD54,0xDD2D,0xDD2E,0xDD41,0xDD42,0xDFC7, + 0xDCA0,0xDCA1,0xDF70,0xDF71,0xDF72, 0,0xDE34,0xDE35,0xDE36,0xDFA6, + 0xDDCC, 0,0xDE99,0xDCF4,0xDF9B, + /* plane 15, row 74 */ + 1 | (94 << 8), /* first, last */ + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862, + 0xD862,0xD862,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD865, + 0xD865,0xD865,0xffff,0xD865,0xD866,0xD866,0xD866,0xD866,0xD866,0xD867, + 0x9C47,0x4C88,0xD867,0xD867,0xD867,0xD867,0xD868,0xD868,0xD868,0xD868, + 0xD868,0xD868,0xffff,0xD841,0xD841,0xD844,0xD848,0xD848,0xD84A,0xD84A, + 0xD84A,0xD84A,0xD84B,0xD84B,0xD84B,0xD84E,0xD84E,0xD84E,0xD84E,0xD850, + 0xD850,0xD850,0xffff,0xD851,0xD851,0xD852,0xD852,0xD852,0xD853,0xD855, + 0x7936,0xD855,0xD856,0xD857,0xD857,0xD858,0xD859,0xD85C,0xD85C,0xD85C, + 0xD85D,0xD85D,0xD85D,0xffff,0xD85E,0xD85E,0xD85F,0xD85F,0xD85F,0xD85F, + 0xD862,0xffff,0xD862,0xD862,0xD862, + 1, /* first low-surrogate */ + 0xDF9E,0xDF9F,0xDFA0,0xDFA1,0xDFA2,0xDFA3,0xDFA4,0xDFA5,0xDFA6, + 0xDFA7,0xDFA8,0xDDDB,0xDDDC,0xDDDD,0xDDD7,0xDDDE,0xDDDF,0xDC59,0xDC46, + 0xDD65,0xDE49, 0,0xDFDD,0xDD95,0xDD96,0xDD97,0xDFD4,0xDFD6,0xDD26, + 0, 0,0xDEC8,0xDEC5,0xDEC6,0xDEC7,0xDD51,0xDD52,0xDD53,0xDD54, + 0xDD55,0xDEDE, 0,0xDC6D,0xDCD5,0xDD72,0xDDAE,0xDF0F,0xDD6B,0xDD6D, + 0xDD6E,0xDD78,0xDE98,0xDE99,0xDE9A,0xDC44,0xDC5C,0xDC45,0xDF01,0xDD58, + 0xDD59,0xDD5A, 0,0xDCD9,0xDCD6,0xDEDA,0xDEDF,0xDEDB,0xDD03,0xDDEF, + 0,0xDF33,0xDED2,0xDDE1,0xDF6F,0xDE64,0xDE0E,0xDD50,0xDD51,0xDD52, + 0xDD56,0xDD57,0xDD58, 0,0xDF81,0xDF82,0xDC1D,0xDC1E,0xDE43,0xDFAA, + 0xDCFD, 0,0xDFC6,0xDFC7,0xDFD9, + /* plane 15, row 75 */ + 1 | (94 << 8), /* first, last */ + 0xD862,0xffff,0xD862,0xD862,0xD862,0xD862,0xD862,0xffff,0xD862, + 0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863,0xD863,0xD864, + 0xD864,0xD865,0xffff,0xffff,0xD866,0xD866,0xD866,0xD866,0xD867,0xD867, + 0xD867,0xD867,0xD868,0xD841,0xD841,0xD844,0xD845,0xD846,0xD846,0xD84A, + 0xD84A,0xD84B,0xD84B,0xD84B,0xD84B,0xD84C,0xD84E,0xD84E,0xD84E,0x6B15, + 0xD84E,0xD84E,0xD84E,0xD852,0xD852,0xD856,0xD856,0xD856,0xD857,0xD857, + 0xD857,0xD858,0xD859,0xD859,0xD85C,0xD85C,0xffff,0xD85C,0xD85E,0xD85E, + 0xD85E,0xD860,0xD862,0xD862,0xD862,0xD862,0xD862,0xD862,0xD863,0xD863, + 0xD864,0xD864,0xD865,0xD866,0xffff,0xD867,0xffff,0xffff,0xD867,0xD868, + 0xD868,0xD868,0xffff,0xffff,0xD869, + 1, /* first low-surrogate */ + 0xDFD7, 0,0xDFC8,0xDFC9,0xDFCA,0xDFCB,0xDFDA, 0,0xDFCC, + 0xDFCD,0xDFCE,0xDFCF,0xDFD0,0xDFD1,0xDFBC,0xDDE1,0xDDE2,0xDDE3,0xDDA9, + 0xDE4E,0xDD77, 0, 0,0xDDAC,0xDDAD,0xDEB6,0xDFE5,0xDEF8,0xDEEA, + 0xDF8D,0xDEEB,0xDD95,0xDC6E,0xDCD8,0xDD83,0xDEA3,0xDD30,0xDF0F,0xDD79, + 0xDD7A,0xDEA7,0xDEA8,0xDEA9,0xDEAA,0xDF19,0xDC50,0xDC51,0xDC52, 0, + 0xDC68,0xDC53,0xDC54,0xDCE2,0xDEDC,0xDD15,0xDD16,0xDE4F,0xDDF5,0xDDF6, + 0xDDF7,0xDDF4,0xDCCC,0xDE0F,0xDD66,0xDD67, 0,0xDD68,0xDCA4,0xDF8B, + 0xDF8C,0xDDFA,0xDFE6,0xDFED,0xDFEE,0xDFEF,0xDFF0,0xDFFE,0xDDE7,0xDDE8, + 0xDDB3,0xDDE4,0xDD83,0xDEEC, 0,0xDF16, 0, 0,0xDF17,0xDDC3, + 0xDDAC,0xDEED, 0, 0,0xDDB4, + /* plane 15, row 76 */ + 2 | (93 << 8), /* first, last */ + 0xD844,0xD844,0xD846,0xD846,0xD847,0xD849,0xD84A,0xD84A, + 0xD84B,0xD84B,0xD84E,0xD84E,0xffff,0xD850,0xffff,0xD851,0xD852,0xD853, + 0xD856,0xffff,0xD859,0xD85A,0xD85C,0xD85C,0xD85E,0xD85E,0xD863,0xD863, + 0xD863,0xD87E,0xD863,0xD864,0xD866,0xD866,0xD867,0xD867,0xD867,0xD868, + 0xffff,0xD841,0xD846,0xffff,0xD84E,0xD857,0xffff,0xD857,0xD859,0xD85C, + 0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD863,0xD864,0xD867,0xD867, + 0xD867,0xD867,0xD868,0xD845,0xD846,0xD84B,0xD84C,0xD84E,0xD851,0xD851, + 0xD854,0xD855,0xD857,0xD858,0xD85A,0xD85C,0x4584,0xD85C,0xffff,0xD863, + 0xffff,0xffff,0xD867,0xD867,0xD867,0xD867,0xD868,0xD87E,0xffff,0xD844, + 0xD844,0xD848,0xD84A,0xD84A, + 2, /* first low-surrogate */ + 0xDD8A,0xDD8B,0xDD34,0xDF14,0xDFDF,0xDCBB,0xDD7F,0xDD81, + 0xDEAD,0xDEAE,0xDC62,0xDC6E, 0,0xDD6E, 0,0xDF17,0xDEE6,0xDC10, + 0xDD19, 0,0xDE10,0xDEF2,0xDD76,0xDD77,0xDF95,0xDF96,0xDC00,0xDC01, + 0xDC31,0xDDED,0xDC1C,0xDC6D,0xDFF4,0xDFF5,0xDD3D,0xDF32,0xDF33,0xDEF4, + 0,0xDC73,0xDD37, 0,0xDC71,0xDE0F, 0,0xDE0E,0xDE11,0xDD85, + 0xDC14,0xDC15,0xDC16,0xDC17,0xDC18,0xDC19,0xDC1A,0xDDC3,0xDF42,0xDF43, + 0xDF44,0xDF48,0xDDFB,0xDEA5,0xDDB8,0xDEB2,0xDC3D,0xDC72,0xDCE7,0xDCE8, + 0xDF59,0xDF3A,0xDE14,0xDDFF,0xDDC0,0xDD8D, 0,0xDD8E, 0,0xDC22, + 0, 0,0xDC04,0xDC29,0xDF51,0xDF66,0xDE0E,0xDE13, 0,0xDD9B, + 0xDD9C,0xDF16,0xDD86,0xDD87, + /* plane 15, row 77 */ + 1 | (25 << 8), /* first, last */ + 0xD863,0xD863,0xD863,0xD865,0xffff,0xD850,0xD857,0xD860,0xD863, + 0xD863,0xD867,0xD867,0xD869,0x53B5,0xD84E,0xD858,0xD85D,0xD868,0xD860, + 0xD84A,0xD863,0xffff,0xD868,0xD863,0xD863, + 1, /* first low-surrogate */ + 0xDC2C,0xDC30,0xDC28,0xDE5F, 0,0xDD7E,0xDE19,0xDE0A,0xDC36, + 0xDDFC,0xDF6D,0xDF6E,0xDEC6, 0,0xDC7B,0xDE06,0xDD9F,0xDE32,0xDE0D, + 0xDD8B,0xDC3B, 0,0xDE3D,0xDC3C,0xDC3D, + /* plane 15, row 78: --- */ + /* plane 15, row 79: --- */ + /* plane 15, row 80: --- */ + /* plane 15, row 81: --- */ + /* plane 15, row 82: --- */ + /* plane 15, row 83: --- */ + /* plane 15, row 84: --- */ + /* plane 15, row 85: --- */ + /* plane 15, row 86: --- */ + /* plane 15, row 87: --- */ + /* plane 15, row 88: --- */ + /* plane 15, row 89: --- */ + /* plane 15, row 90: --- */ + /* plane 15, row 91: --- */ + /* plane 15, row 92: --- */ + /* plane 15, row 93: --- */ + /* plane 15, row 94: --- */ +}; + +sal_Int32 const aImplCns116431992ToUnicodeRowOffsets[] = { + 0, /* plane 1, row 1; 182/190 bytes (95.8%) */ + 95, /* plane 1, row 2; 186/190 bytes (97.9%) */ + 190, /* plane 1, row 3; 94/94 bytes (100.0%) */ + 237, /* plane 1, row 4; 186/190 bytes (97.9%) */ + 332, /* plane 1, row 5; 162/162 bytes (100.0%) */ + 413, /* plane 1, row 6; 62/62 bytes (100.0%) */ + 444, /* plane 1, row 7; 8/28 bytes (28.6%) */ + -1, /* plane 1, row 8 */ + -1, /* plane 1, row 9 */ + -1, /* plane 1, row 10 */ + -1, /* plane 1, row 11 */ + -1, /* plane 1, row 12 */ + -1, /* plane 1, row 13 */ + -1, /* plane 1, row 14 */ + -1, /* plane 1, row 15 */ + -1, /* plane 1, row 16 */ + -1, /* plane 1, row 17 */ + -1, /* plane 1, row 18 */ + -1, /* plane 1, row 19 */ + -1, /* plane 1, row 20 */ + -1, /* plane 1, row 21 */ + -1, /* plane 1, row 22 */ + -1, /* plane 1, row 23 */ + -1, /* plane 1, row 24 */ + -1, /* plane 1, row 25 */ + -1, /* plane 1, row 26 */ + -1, /* plane 1, row 27 */ + -1, /* plane 1, row 28 */ + -1, /* plane 1, row 29 */ + -1, /* plane 1, row 30 */ + -1, /* plane 1, row 31 */ + -1, /* plane 1, row 32 */ + -1, /* plane 1, row 33 */ + 458, /* plane 1, row 34; 68/68 bytes (100.0%) */ + -1, /* plane 1, row 35 */ + 492, /* plane 1, row 36; 190/190 bytes (100.0%) */ + 587, /* plane 1, row 37; 190/190 bytes (100.0%) */ + 682, /* plane 1, row 38; 190/190 bytes (100.0%) */ + 777, /* plane 1, row 39; 190/190 bytes (100.0%) */ + 872, /* plane 1, row 40; 190/190 bytes (100.0%) */ + 967, /* plane 1, row 41; 190/190 bytes (100.0%) */ + 1062, /* plane 1, row 42; 190/190 bytes (100.0%) */ + 1157, /* plane 1, row 43; 190/190 bytes (100.0%) */ + 1252, /* plane 1, row 44; 190/190 bytes (100.0%) */ + 1347, /* plane 1, row 45; 190/190 bytes (100.0%) */ + 1442, /* plane 1, row 46; 190/190 bytes (100.0%) */ + 1537, /* plane 1, row 47; 190/190 bytes (100.0%) */ + 1632, /* plane 1, row 48; 190/190 bytes (100.0%) */ + 1727, /* plane 1, row 49; 190/190 bytes (100.0%) */ + 1822, /* plane 1, row 50; 190/190 bytes (100.0%) */ + 1917, /* plane 1, row 51; 190/190 bytes (100.0%) */ + 2012, /* plane 1, row 52; 190/190 bytes (100.0%) */ + 2107, /* plane 1, row 53; 190/190 bytes (100.0%) */ + 2202, /* plane 1, row 54; 190/190 bytes (100.0%) */ + 2297, /* plane 1, row 55; 190/190 bytes (100.0%) */ + 2392, /* plane 1, row 56; 190/190 bytes (100.0%) */ + 2487, /* plane 1, row 57; 190/190 bytes (100.0%) */ + 2582, /* plane 1, row 58; 190/190 bytes (100.0%) */ + 2677, /* plane 1, row 59; 190/190 bytes (100.0%) */ + 2772, /* plane 1, row 60; 190/190 bytes (100.0%) */ + 2867, /* plane 1, row 61; 190/190 bytes (100.0%) */ + 2962, /* plane 1, row 62; 190/190 bytes (100.0%) */ + 3057, /* plane 1, row 63; 190/190 bytes (100.0%) */ + 3152, /* plane 1, row 64; 190/190 bytes (100.0%) */ + 3247, /* plane 1, row 65; 190/190 bytes (100.0%) */ + 3342, /* plane 1, row 66; 190/190 bytes (100.0%) */ + 3437, /* plane 1, row 67; 190/190 bytes (100.0%) */ + 3532, /* plane 1, row 68; 190/190 bytes (100.0%) */ + 3627, /* plane 1, row 69; 190/190 bytes (100.0%) */ + 3722, /* plane 1, row 70; 190/190 bytes (100.0%) */ + 3817, /* plane 1, row 71; 190/190 bytes (100.0%) */ + 3912, /* plane 1, row 72; 190/190 bytes (100.0%) */ + 4007, /* plane 1, row 73; 190/190 bytes (100.0%) */ + 4102, /* plane 1, row 74; 190/190 bytes (100.0%) */ + 4197, /* plane 1, row 75; 190/190 bytes (100.0%) */ + 4292, /* plane 1, row 76; 190/190 bytes (100.0%) */ + 4387, /* plane 1, row 77; 190/190 bytes (100.0%) */ + 4482, /* plane 1, row 78; 190/190 bytes (100.0%) */ + 4577, /* plane 1, row 79; 190/190 bytes (100.0%) */ + 4672, /* plane 1, row 80; 190/190 bytes (100.0%) */ + 4767, /* plane 1, row 81; 190/190 bytes (100.0%) */ + 4862, /* plane 1, row 82; 190/190 bytes (100.0%) */ + 4957, /* plane 1, row 83; 190/190 bytes (100.0%) */ + 5052, /* plane 1, row 84; 190/190 bytes (100.0%) */ + 5147, /* plane 1, row 85; 190/190 bytes (100.0%) */ + 5242, /* plane 1, row 86; 190/190 bytes (100.0%) */ + 5337, /* plane 1, row 87; 190/190 bytes (100.0%) */ + 5432, /* plane 1, row 88; 190/190 bytes (100.0%) */ + 5527, /* plane 1, row 89; 190/190 bytes (100.0%) */ + 5622, /* plane 1, row 90; 190/190 bytes (100.0%) */ + 5717, /* plane 1, row 91; 190/190 bytes (100.0%) */ + 5812, /* plane 1, row 92; 190/190 bytes (100.0%) */ + 5907, /* plane 1, row 93; 88/88 bytes (100.0%) */ + -1, /* plane 1, row 94 */ + 5951, /* plane 2, row 1; 190/190 bytes (100.0%) */ + 6046, /* plane 2, row 2; 190/190 bytes (100.0%) */ + 6141, /* plane 2, row 3; 190/190 bytes (100.0%) */ + 6236, /* plane 2, row 4; 190/190 bytes (100.0%) */ + 6331, /* plane 2, row 5; 190/190 bytes (100.0%) */ + 6426, /* plane 2, row 6; 190/190 bytes (100.0%) */ + 6521, /* plane 2, row 7; 190/190 bytes (100.0%) */ + 6616, /* plane 2, row 8; 190/190 bytes (100.0%) */ + 6711, /* plane 2, row 9; 190/190 bytes (100.0%) */ + 6806, /* plane 2, row 10; 190/190 bytes (100.0%) */ + 6901, /* plane 2, row 11; 190/190 bytes (100.0%) */ + 6996, /* plane 2, row 12; 190/190 bytes (100.0%) */ + 7091, /* plane 2, row 13; 190/190 bytes (100.0%) */ + 7186, /* plane 2, row 14; 190/190 bytes (100.0%) */ + 7281, /* plane 2, row 15; 190/190 bytes (100.0%) */ + 7376, /* plane 2, row 16; 190/190 bytes (100.0%) */ + 7471, /* plane 2, row 17; 190/190 bytes (100.0%) */ + 7566, /* plane 2, row 18; 190/190 bytes (100.0%) */ + 7661, /* plane 2, row 19; 190/190 bytes (100.0%) */ + 7756, /* plane 2, row 20; 190/190 bytes (100.0%) */ + 7851, /* plane 2, row 21; 190/190 bytes (100.0%) */ + 7946, /* plane 2, row 22; 190/190 bytes (100.0%) */ + 8041, /* plane 2, row 23; 190/190 bytes (100.0%) */ + 8136, /* plane 2, row 24; 190/190 bytes (100.0%) */ + 8231, /* plane 2, row 25; 190/190 bytes (100.0%) */ + 8326, /* plane 2, row 26; 190/190 bytes (100.0%) */ + 8421, /* plane 2, row 27; 190/190 bytes (100.0%) */ + 8516, /* plane 2, row 28; 190/190 bytes (100.0%) */ + 8611, /* plane 2, row 29; 190/190 bytes (100.0%) */ + 8706, /* plane 2, row 30; 190/190 bytes (100.0%) */ + 8801, /* plane 2, row 31; 190/190 bytes (100.0%) */ + 8896, /* plane 2, row 32; 190/190 bytes (100.0%) */ + 8991, /* plane 2, row 33; 190/190 bytes (100.0%) */ + 9086, /* plane 2, row 34; 190/190 bytes (100.0%) */ + 9181, /* plane 2, row 35; 190/190 bytes (100.0%) */ + 9276, /* plane 2, row 36; 190/190 bytes (100.0%) */ + 9371, /* plane 2, row 37; 190/190 bytes (100.0%) */ + 9466, /* plane 2, row 38; 190/190 bytes (100.0%) */ + 9561, /* plane 2, row 39; 190/190 bytes (100.0%) */ + 9656, /* plane 2, row 40; 190/190 bytes (100.0%) */ + 9751, /* plane 2, row 41; 190/190 bytes (100.0%) */ + 9846, /* plane 2, row 42; 190/190 bytes (100.0%) */ + 9941, /* plane 2, row 43; 190/190 bytes (100.0%) */ + 10036, /* plane 2, row 44; 190/190 bytes (100.0%) */ + 10131, /* plane 2, row 45; 190/190 bytes (100.0%) */ + 10226, /* plane 2, row 46; 190/190 bytes (100.0%) */ + 10321, /* plane 2, row 47; 190/190 bytes (100.0%) */ + 10416, /* plane 2, row 48; 190/190 bytes (100.0%) */ + 10511, /* plane 2, row 49; 190/190 bytes (100.0%) */ + 10606, /* plane 2, row 50; 190/190 bytes (100.0%) */ + 10701, /* plane 2, row 51; 190/190 bytes (100.0%) */ + 10796, /* plane 2, row 52; 190/190 bytes (100.0%) */ + 10891, /* plane 2, row 53; 190/190 bytes (100.0%) */ + 10986, /* plane 2, row 54; 190/190 bytes (100.0%) */ + 11081, /* plane 2, row 55; 190/190 bytes (100.0%) */ + 11176, /* plane 2, row 56; 190/190 bytes (100.0%) */ + 11271, /* plane 2, row 57; 190/190 bytes (100.0%) */ + 11366, /* plane 2, row 58; 190/190 bytes (100.0%) */ + 11461, /* plane 2, row 59; 190/190 bytes (100.0%) */ + 11556, /* plane 2, row 60; 190/190 bytes (100.0%) */ + 11651, /* plane 2, row 61; 190/190 bytes (100.0%) */ + 11746, /* plane 2, row 62; 190/190 bytes (100.0%) */ + 11841, /* plane 2, row 63; 190/190 bytes (100.0%) */ + 11936, /* plane 2, row 64; 190/190 bytes (100.0%) */ + 12031, /* plane 2, row 65; 190/190 bytes (100.0%) */ + 12126, /* plane 2, row 66; 190/190 bytes (100.0%) */ + 12221, /* plane 2, row 67; 190/190 bytes (100.0%) */ + 12316, /* plane 2, row 68; 190/190 bytes (100.0%) */ + 12411, /* plane 2, row 69; 190/190 bytes (100.0%) */ + 12506, /* plane 2, row 70; 190/190 bytes (100.0%) */ + 12601, /* plane 2, row 71; 190/190 bytes (100.0%) */ + 12696, /* plane 2, row 72; 190/190 bytes (100.0%) */ + 12791, /* plane 2, row 73; 190/190 bytes (100.0%) */ + 12886, /* plane 2, row 74; 190/190 bytes (100.0%) */ + 12981, /* plane 2, row 75; 190/190 bytes (100.0%) */ + 13076, /* plane 2, row 76; 190/190 bytes (100.0%) */ + 13171, /* plane 2, row 77; 190/190 bytes (100.0%) */ + 13266, /* plane 2, row 78; 190/190 bytes (100.0%) */ + 13361, /* plane 2, row 79; 190/190 bytes (100.0%) */ + 13456, /* plane 2, row 80; 190/190 bytes (100.0%) */ + 13551, /* plane 2, row 81; 190/190 bytes (100.0%) */ + 13646, /* plane 2, row 82; 74/74 bytes (100.0%) */ + -1, /* plane 2, row 83 */ + -1, /* plane 2, row 84 */ + -1, /* plane 2, row 85 */ + -1, /* plane 2, row 86 */ + -1, /* plane 2, row 87 */ + -1, /* plane 2, row 88 */ + -1, /* plane 2, row 89 */ + -1, /* plane 2, row 90 */ + -1, /* plane 2, row 91 */ + -1, /* plane 2, row 92 */ + -1, /* plane 2, row 93 */ + -1, /* plane 2, row 94 */ + 13683, /* plane 3, row 1; 200/306 bytes (65.4%) */ + 13836, /* plane 3, row 2; 196/366 bytes (53.6%) */ + 14019, /* plane 3, row 3; 198/290 bytes (68.3%) */ + 14164, /* plane 3, row 4; 200/286 bytes (69.9%) */ + 14307, /* plane 3, row 5; 194/194 bytes (100.0%) */ + 14404, /* plane 3, row 6; 194/194 bytes (100.0%) */ + 14501, /* plane 3, row 7; 202/294 bytes (68.7%) */ + 14648, /* plane 3, row 8; 190/190 bytes (100.0%) */ + 14743, /* plane 3, row 9; 190/190 bytes (100.0%) */ + 14838, /* plane 3, row 10; 196/218 bytes (89.9%) */ + 14947, /* plane 3, row 11; 190/190 bytes (100.0%) */ + 15042, /* plane 3, row 12; 196/228 bytes (86.0%) */ + 15156, /* plane 3, row 13; 196/252 bytes (77.8%) */ + 15282, /* plane 3, row 14; 196/202 bytes (97.0%) */ + 15383, /* plane 3, row 15; 190/190 bytes (100.0%) */ + 15478, /* plane 3, row 16; 196/290 bytes (67.6%) */ + 15623, /* plane 3, row 17; 194/194 bytes (100.0%) */ + 15720, /* plane 3, row 18; 190/190 bytes (100.0%) */ + 15815, /* plane 3, row 19; 194/194 bytes (100.0%) */ + 15912, /* plane 3, row 20; 198/254 bytes (78.0%) */ + 16039, /* plane 3, row 21; 196/206 bytes (95.1%) */ + 16142, /* plane 3, row 22; 198/348 bytes (56.9%) */ + 16316, /* plane 3, row 23; 190/190 bytes (100.0%) */ + 16411, /* plane 3, row 24; 190/190 bytes (100.0%) */ + 16506, /* plane 3, row 25; 194/194 bytes (100.0%) */ + 16603, /* plane 3, row 26; 196/276 bytes (71.0%) */ + 16741, /* plane 3, row 27; 190/190 bytes (100.0%) */ + 16836, /* plane 3, row 28; 194/194 bytes (100.0%) */ + 16933, /* plane 3, row 29; 194/194 bytes (100.0%) */ + 17030, /* plane 3, row 30; 190/190 bytes (100.0%) */ + 17125, /* plane 3, row 31; 194/194 bytes (100.0%) */ + 17222, /* plane 3, row 32; 196/312 bytes (62.8%) */ + 17378, /* plane 3, row 33; 194/194 bytes (100.0%) */ + 17475, /* plane 3, row 34; 190/190 bytes (100.0%) */ + 17570, /* plane 3, row 35; 194/194 bytes (100.0%) */ + 17667, /* plane 3, row 36; 196/338 bytes (58.0%) */ + 17836, /* plane 3, row 37; 190/190 bytes (100.0%) */ + 17931, /* plane 3, row 38; 194/194 bytes (100.0%) */ + 18028, /* plane 3, row 39; 196/246 bytes (79.7%) */ + 18151, /* plane 3, row 40; 196/330 bytes (59.4%) */ + 18316, /* plane 3, row 41; 190/190 bytes (100.0%) */ + 18411, /* plane 3, row 42; 190/190 bytes (100.0%) */ + 18506, /* plane 3, row 43; 190/190 bytes (100.0%) */ + 18601, /* plane 3, row 44; 190/190 bytes (100.0%) */ + 18696, /* plane 3, row 45; 190/190 bytes (100.0%) */ + 18791, /* plane 3, row 46; 190/190 bytes (100.0%) */ + 18886, /* plane 3, row 47; 190/190 bytes (100.0%) */ + 18981, /* plane 3, row 48; 194/194 bytes (100.0%) */ + 19078, /* plane 3, row 49; 190/190 bytes (100.0%) */ + 19173, /* plane 3, row 50; 190/190 bytes (100.0%) */ + 19268, /* plane 3, row 51; 190/190 bytes (100.0%) */ + 19363, /* plane 3, row 52; 194/194 bytes (100.0%) */ + 19460, /* plane 3, row 53; 196/216 bytes (90.7%) */ + 19568, /* plane 3, row 54; 194/194 bytes (100.0%) */ + 19665, /* plane 3, row 55; 194/194 bytes (100.0%) */ + 19762, /* plane 3, row 56; 196/234 bytes (83.8%) */ + 19879, /* plane 3, row 57; 190/190 bytes (100.0%) */ + 19974, /* plane 3, row 58; 196/200 bytes (98.0%) */ + 20074, /* plane 3, row 59; 196/208 bytes (94.2%) */ + 20178, /* plane 3, row 60; 194/194 bytes (100.0%) */ + 20275, /* plane 3, row 61; 190/190 bytes (100.0%) */ + 20370, /* plane 3, row 62; 190/190 bytes (100.0%) */ + 20465, /* plane 3, row 63; 190/190 bytes (100.0%) */ + 20560, /* plane 3, row 64; 194/194 bytes (100.0%) */ + 20657, /* plane 3, row 65; 188/190 bytes (98.9%) */ + 20752, /* plane 3, row 66; 120/180 bytes (66.7%) */ + 20842, /* plane 3, row 67; 56/180 bytes (31.1%) */ + 20932, /* plane 3, row 68; 126/188 bytes (67.0%) */ + 21026, /* plane 3, row 69; 190/190 bytes (100.0%) */ + 21121, /* plane 3, row 70; 180/186 bytes (96.8%) */ + 21214, /* plane 3, row 71; 22/22 bytes (100.0%) */ + -1, /* plane 3, row 72 */ + -1, /* plane 3, row 73 */ + -1, /* plane 3, row 74 */ + -1, /* plane 3, row 75 */ + -1, /* plane 3, row 76 */ + -1, /* plane 3, row 77 */ + -1, /* plane 3, row 78 */ + -1, /* plane 3, row 79 */ + -1, /* plane 3, row 80 */ + -1, /* plane 3, row 81 */ + -1, /* plane 3, row 82 */ + -1, /* plane 3, row 83 */ + -1, /* plane 3, row 84 */ + -1, /* plane 3, row 85 */ + -1, /* plane 3, row 86 */ + -1, /* plane 3, row 87 */ + -1, /* plane 3, row 88 */ + -1, /* plane 3, row 89 */ + -1, /* plane 3, row 90 */ + -1, /* plane 3, row 91 */ + -1, /* plane 3, row 92 */ + -1, /* plane 3, row 93 */ + -1, /* plane 3, row 94 */ + 21225, /* plane 4, row 1; 264/380 bytes (69.5%) */ + 21415, /* plane 4, row 2; 288/378 bytes (76.2%) */ + 21604, /* plane 4, row 3; 278/376 bytes (73.9%) */ + 21792, /* plane 4, row 4; 286/370 bytes (77.3%) */ + 21977, /* plane 4, row 5; 282/374 bytes (75.4%) */ + 22164, /* plane 4, row 6; 260/370 bytes (70.3%) */ + 22349, /* plane 4, row 7; 282/378 bytes (74.6%) */ + 22538, /* plane 4, row 8; 296/378 bytes (78.3%) */ + 22727, /* plane 4, row 9; 266/368 bytes (72.3%) */ + 22911, /* plane 4, row 10; 270/378 bytes (71.4%) */ + 23100, /* plane 4, row 11; 300/376 bytes (79.8%) */ + 23288, /* plane 4, row 12; 284/378 bytes (75.1%) */ + 23477, /* plane 4, row 13; 272/374 bytes (72.7%) */ + 23664, /* plane 4, row 14; 274/370 bytes (74.1%) */ + 23849, /* plane 4, row 15; 298/372 bytes (80.1%) */ + 24035, /* plane 4, row 16; 272/380 bytes (71.6%) */ + 24225, /* plane 4, row 17; 278/376 bytes (73.9%) */ + 24413, /* plane 4, row 18; 286/376 bytes (76.1%) */ + 24601, /* plane 4, row 19; 246/380 bytes (64.7%) */ + 24791, /* plane 4, row 20; 282/380 bytes (74.2%) */ + 24981, /* plane 4, row 21; 276/380 bytes (72.6%) */ + 25171, /* plane 4, row 22; 288/376 bytes (76.6%) */ + 25359, /* plane 4, row 23; 292/378 bytes (77.2%) */ + 25548, /* plane 4, row 24; 274/376 bytes (72.9%) */ + 25736, /* plane 4, row 25; 276/378 bytes (73.0%) */ + 25925, /* plane 4, row 26; 266/380 bytes (70.0%) */ + 26115, /* plane 4, row 27; 284/372 bytes (76.3%) */ + 26301, /* plane 4, row 28; 288/378 bytes (76.2%) */ + 26490, /* plane 4, row 29; 270/370 bytes (73.0%) */ + 26675, /* plane 4, row 30; 288/372 bytes (77.4%) */ + 26861, /* plane 4, row 31; 264/380 bytes (69.5%) */ + 27051, /* plane 4, row 32; 300/378 bytes (79.4%) */ + 27240, /* plane 4, row 33; 276/374 bytes (73.8%) */ + 27427, /* plane 4, row 34; 288/376 bytes (76.6%) */ + 27615, /* plane 4, row 35; 266/370 bytes (71.9%) */ + 27800, /* plane 4, row 36; 262/368 bytes (71.2%) */ + 27984, /* plane 4, row 37; 270/376 bytes (71.8%) */ + 28172, /* plane 4, row 38; 264/376 bytes (70.2%) */ + 28360, /* plane 4, row 39; 272/380 bytes (71.6%) */ + 28550, /* plane 4, row 40; 284/380 bytes (74.7%) */ + 28740, /* plane 4, row 41; 284/378 bytes (75.1%) */ + 28929, /* plane 4, row 42; 284/380 bytes (74.7%) */ + 29119, /* plane 4, row 43; 274/364 bytes (75.3%) */ + 29301, /* plane 4, row 44; 272/376 bytes (72.3%) */ + 29489, /* plane 4, row 45; 272/374 bytes (72.7%) */ + 29676, /* plane 4, row 46; 272/374 bytes (72.7%) */ + 29863, /* plane 4, row 47; 286/378 bytes (75.7%) */ + 30052, /* plane 4, row 48; 286/378 bytes (75.7%) */ + 30241, /* plane 4, row 49; 282/380 bytes (74.2%) */ + 30431, /* plane 4, row 50; 282/378 bytes (74.6%) */ + 30620, /* plane 4, row 51; 296/366 bytes (80.9%) */ + 30803, /* plane 4, row 52; 274/374 bytes (73.3%) */ + 30990, /* plane 4, row 53; 276/376 bytes (73.4%) */ + 31178, /* plane 4, row 54; 292/380 bytes (76.8%) */ + 31368, /* plane 4, row 55; 266/376 bytes (70.7%) */ + 31556, /* plane 4, row 56; 286/372 bytes (76.9%) */ + 31742, /* plane 4, row 57; 288/374 bytes (77.0%) */ + 31929, /* plane 4, row 58; 296/376 bytes (78.7%) */ + 32117, /* plane 4, row 59; 284/370 bytes (76.8%) */ + 32302, /* plane 4, row 60; 282/374 bytes (75.4%) */ + 32489, /* plane 4, row 61; 306/368 bytes (83.2%) */ + 32673, /* plane 4, row 62; 282/374 bytes (75.4%) */ + 32860, /* plane 4, row 63; 268/362 bytes (74.0%) */ + 33041, /* plane 4, row 64; 304/380 bytes (80.0%) */ + 33231, /* plane 4, row 65; 280/370 bytes (75.7%) */ + 33416, /* plane 4, row 66; 272/374 bytes (72.7%) */ + 33603, /* plane 4, row 67; 276/376 bytes (73.4%) */ + 33791, /* plane 4, row 68; 274/378 bytes (72.5%) */ + 33980, /* plane 4, row 69; 294/380 bytes (77.4%) */ + 34170, /* plane 4, row 70; 304/378 bytes (80.4%) */ + 34359, /* plane 4, row 71; 292/368 bytes (79.3%) */ + 34543, /* plane 4, row 72; 280/378 bytes (74.1%) */ + 34732, /* plane 4, row 73; 286/368 bytes (77.7%) */ + 34916, /* plane 4, row 74; 310/378 bytes (82.0%) */ + 35105, /* plane 4, row 75; 282/378 bytes (74.6%) */ + 35294, /* plane 4, row 76; 292/380 bytes (76.8%) */ + 35484, /* plane 4, row 77; 298/380 bytes (78.4%) */ + 35674, /* plane 4, row 78; 190/240 bytes (79.2%) */ + -1, /* plane 4, row 79 */ + -1, /* plane 4, row 80 */ + -1, /* plane 4, row 81 */ + -1, /* plane 4, row 82 */ + -1, /* plane 4, row 83 */ + -1, /* plane 4, row 84 */ + -1, /* plane 4, row 85 */ + -1, /* plane 4, row 86 */ + -1, /* plane 4, row 87 */ + -1, /* plane 4, row 88 */ + -1, /* plane 4, row 89 */ + -1, /* plane 4, row 90 */ + -1, /* plane 4, row 91 */ + -1, /* plane 4, row 92 */ + -1, /* plane 4, row 93 */ + -1, /* plane 4, row 94 */ + 35794, /* plane 5, row 1; 374/380 bytes (98.4%) */ + 35984, /* plane 5, row 2; 366/380 bytes (96.3%) */ + 36174, /* plane 5, row 3; 368/380 bytes (96.8%) */ + 36364, /* plane 5, row 4; 370/380 bytes (97.4%) */ + 36554, /* plane 5, row 5; 354/380 bytes (93.2%) */ + 36744, /* plane 5, row 6; 368/380 bytes (96.8%) */ + 36934, /* plane 5, row 7; 366/380 bytes (96.3%) */ + 37124, /* plane 5, row 8; 376/378 bytes (99.5%) */ + 37313, /* plane 5, row 9; 362/380 bytes (95.3%) */ + 37503, /* plane 5, row 10; 376/380 bytes (98.9%) */ + 37693, /* plane 5, row 11; 364/378 bytes (96.3%) */ + 37882, /* plane 5, row 12; 376/380 bytes (98.9%) */ + 38072, /* plane 5, row 13; 370/380 bytes (97.4%) */ + 38262, /* plane 5, row 14; 368/380 bytes (96.8%) */ + 38452, /* plane 5, row 15; 376/380 bytes (98.9%) */ + 38642, /* plane 5, row 16; 366/378 bytes (96.8%) */ + 38831, /* plane 5, row 17; 370/380 bytes (97.4%) */ + 39021, /* plane 5, row 18; 372/380 bytes (97.9%) */ + 39211, /* plane 5, row 19; 366/380 bytes (96.3%) */ + 39401, /* plane 5, row 20; 362/380 bytes (95.3%) */ + 39591, /* plane 5, row 21; 362/380 bytes (95.3%) */ + 39781, /* plane 5, row 22; 366/380 bytes (96.3%) */ + 39971, /* plane 5, row 23; 368/380 bytes (96.8%) */ + 40161, /* plane 5, row 24; 372/380 bytes (97.9%) */ + 40351, /* plane 5, row 25; 370/380 bytes (97.4%) */ + 40541, /* plane 5, row 26; 372/380 bytes (97.9%) */ + 40731, /* plane 5, row 27; 362/380 bytes (95.3%) */ + 40921, /* plane 5, row 28; 364/380 bytes (95.8%) */ + 41111, /* plane 5, row 29; 372/380 bytes (97.9%) */ + 41301, /* plane 5, row 30; 374/380 bytes (98.4%) */ + 41491, /* plane 5, row 31; 368/378 bytes (97.4%) */ + 41680, /* plane 5, row 32; 370/380 bytes (97.4%) */ + 41870, /* plane 5, row 33; 372/380 bytes (97.9%) */ + 42060, /* plane 5, row 34; 368/380 bytes (96.8%) */ + 42250, /* plane 5, row 35; 366/380 bytes (96.3%) */ + 42440, /* plane 5, row 36; 368/380 bytes (96.8%) */ + 42630, /* plane 5, row 37; 376/380 bytes (98.9%) */ + 42820, /* plane 5, row 38; 360/380 bytes (94.7%) */ + 43010, /* plane 5, row 39; 366/378 bytes (96.8%) */ + 43199, /* plane 5, row 40; 370/380 bytes (97.4%) */ + 43389, /* plane 5, row 41; 368/380 bytes (96.8%) */ + 43579, /* plane 5, row 42; 368/380 bytes (96.8%) */ + 43769, /* plane 5, row 43; 364/380 bytes (95.8%) */ + 43959, /* plane 5, row 44; 372/380 bytes (97.9%) */ + 44149, /* plane 5, row 45; 360/380 bytes (94.7%) */ + 44339, /* plane 5, row 46; 372/380 bytes (97.9%) */ + 44529, /* plane 5, row 47; 366/380 bytes (96.3%) */ + 44719, /* plane 5, row 48; 376/380 bytes (98.9%) */ + 44909, /* plane 5, row 49; 374/380 bytes (98.4%) */ + 45099, /* plane 5, row 50; 376/380 bytes (98.9%) */ + 45289, /* plane 5, row 51; 372/380 bytes (97.9%) */ + 45479, /* plane 5, row 52; 372/380 bytes (97.9%) */ + 45669, /* plane 5, row 53; 370/380 bytes (97.4%) */ + 45859, /* plane 5, row 54; 372/380 bytes (97.9%) */ + 46049, /* plane 5, row 55; 380/380 bytes (100.0%) */ + 46239, /* plane 5, row 56; 368/378 bytes (97.4%) */ + 46428, /* plane 5, row 57; 380/380 bytes (100.0%) */ + 46618, /* plane 5, row 58; 370/380 bytes (97.4%) */ + 46808, /* plane 5, row 59; 372/380 bytes (97.9%) */ + 46998, /* plane 5, row 60; 366/376 bytes (97.3%) */ + 47186, /* plane 5, row 61; 368/380 bytes (96.8%) */ + 47376, /* plane 5, row 62; 368/380 bytes (96.8%) */ + 47566, /* plane 5, row 63; 378/380 bytes (99.5%) */ + 47756, /* plane 5, row 64; 376/380 bytes (98.9%) */ + 47946, /* plane 5, row 65; 370/380 bytes (97.4%) */ + 48136, /* plane 5, row 66; 378/380 bytes (99.5%) */ + 48326, /* plane 5, row 67; 372/380 bytes (97.9%) */ + 48516, /* plane 5, row 68; 368/380 bytes (96.8%) */ + 48706, /* plane 5, row 69; 368/378 bytes (97.4%) */ + 48895, /* plane 5, row 70; 372/380 bytes (97.9%) */ + 49085, /* plane 5, row 71; 360/380 bytes (94.7%) */ + 49275, /* plane 5, row 72; 374/380 bytes (98.4%) */ + 49465, /* plane 5, row 73; 372/380 bytes (97.9%) */ + 49655, /* plane 5, row 74; 376/380 bytes (98.9%) */ + 49845, /* plane 5, row 75; 362/380 bytes (95.3%) */ + 50035, /* plane 5, row 76; 376/380 bytes (98.9%) */ + 50225, /* plane 5, row 77; 374/380 bytes (98.4%) */ + 50415, /* plane 5, row 78; 372/380 bytes (97.9%) */ + 50605, /* plane 5, row 79; 372/380 bytes (97.9%) */ + 50795, /* plane 5, row 80; 368/380 bytes (96.8%) */ + 50985, /* plane 5, row 81; 370/380 bytes (97.4%) */ + 51175, /* plane 5, row 82; 366/380 bytes (96.3%) */ + 51365, /* plane 5, row 83; 376/380 bytes (98.9%) */ + 51555, /* plane 5, row 84; 368/380 bytes (96.8%) */ + 51745, /* plane 5, row 85; 358/380 bytes (94.2%) */ + 51935, /* plane 5, row 86; 372/380 bytes (97.9%) */ + 52125, /* plane 5, row 87; 372/380 bytes (97.9%) */ + 52315, /* plane 5, row 88; 370/380 bytes (97.4%) */ + 52505, /* plane 5, row 89; 374/380 bytes (98.4%) */ + 52695, /* plane 5, row 90; 378/380 bytes (99.5%) */ + 52885, /* plane 5, row 91; 376/380 bytes (98.9%) */ + 53075, /* plane 5, row 92; 198/200 bytes (99.0%) */ + -1, /* plane 5, row 93 */ + -1, /* plane 5, row 94 */ + 53175, /* plane 6, row 1; 368/378 bytes (97.4%) */ + 53364, /* plane 6, row 2; 376/380 bytes (98.9%) */ + 53554, /* plane 6, row 3; 374/380 bytes (98.4%) */ + 53744, /* plane 6, row 4; 378/380 bytes (99.5%) */ + 53934, /* plane 6, row 5; 368/380 bytes (96.8%) */ + 54124, /* plane 6, row 6; 370/380 bytes (97.4%) */ + 54314, /* plane 6, row 7; 376/380 bytes (98.9%) */ + 54504, /* plane 6, row 8; 368/380 bytes (96.8%) */ + 54694, /* plane 6, row 9; 374/380 bytes (98.4%) */ + 54884, /* plane 6, row 10; 368/376 bytes (97.9%) */ + 55072, /* plane 6, row 11; 374/380 bytes (98.4%) */ + 55262, /* plane 6, row 12; 374/378 bytes (98.9%) */ + 55451, /* plane 6, row 13; 374/378 bytes (98.9%) */ + 55640, /* plane 6, row 14; 378/380 bytes (99.5%) */ + 55830, /* plane 6, row 15; 376/380 bytes (98.9%) */ + 56020, /* plane 6, row 16; 376/380 bytes (98.9%) */ + 56210, /* plane 6, row 17; 372/380 bytes (97.9%) */ + 56400, /* plane 6, row 18; 378/380 bytes (99.5%) */ + 56590, /* plane 6, row 19; 372/380 bytes (97.9%) */ + 56780, /* plane 6, row 20; 372/380 bytes (97.9%) */ + 56970, /* plane 6, row 21; 374/380 bytes (98.4%) */ + 57160, /* plane 6, row 22; 370/380 bytes (97.4%) */ + 57350, /* plane 6, row 23; 374/380 bytes (98.4%) */ + 57540, /* plane 6, row 24; 366/380 bytes (96.3%) */ + 57730, /* plane 6, row 25; 374/380 bytes (98.4%) */ + 57920, /* plane 6, row 26; 376/380 bytes (98.9%) */ + 58110, /* plane 6, row 27; 366/378 bytes (96.8%) */ + 58299, /* plane 6, row 28; 376/380 bytes (98.9%) */ + 58489, /* plane 6, row 29; 378/380 bytes (99.5%) */ + 58679, /* plane 6, row 30; 366/380 bytes (96.3%) */ + 58869, /* plane 6, row 31; 380/380 bytes (100.0%) */ + 59059, /* plane 6, row 32; 372/380 bytes (97.9%) */ + 59249, /* plane 6, row 33; 370/380 bytes (97.4%) */ + 59439, /* plane 6, row 34; 370/380 bytes (97.4%) */ + 59629, /* plane 6, row 35; 366/380 bytes (96.3%) */ + 59819, /* plane 6, row 36; 370/380 bytes (97.4%) */ + 60009, /* plane 6, row 37; 372/380 bytes (97.9%) */ + 60199, /* plane 6, row 38; 376/380 bytes (98.9%) */ + 60389, /* plane 6, row 39; 374/380 bytes (98.4%) */ + 60579, /* plane 6, row 40; 372/380 bytes (97.9%) */ + 60769, /* plane 6, row 41; 372/378 bytes (98.4%) */ + 60958, /* plane 6, row 42; 378/380 bytes (99.5%) */ + 61148, /* plane 6, row 43; 376/380 bytes (98.9%) */ + 61338, /* plane 6, row 44; 360/380 bytes (94.7%) */ + 61528, /* plane 6, row 45; 376/380 bytes (98.9%) */ + 61718, /* plane 6, row 46; 370/380 bytes (97.4%) */ + 61908, /* plane 6, row 47; 370/380 bytes (97.4%) */ + 62098, /* plane 6, row 48; 370/380 bytes (97.4%) */ + 62288, /* plane 6, row 49; 374/380 bytes (98.4%) */ + 62478, /* plane 6, row 50; 372/380 bytes (97.9%) */ + 62668, /* plane 6, row 51; 378/380 bytes (99.5%) */ + 62858, /* plane 6, row 52; 368/380 bytes (96.8%) */ + 63048, /* plane 6, row 53; 376/380 bytes (98.9%) */ + 63238, /* plane 6, row 54; 374/380 bytes (98.4%) */ + 63428, /* plane 6, row 55; 380/380 bytes (100.0%) */ + 63618, /* plane 6, row 56; 376/380 bytes (98.9%) */ + 63808, /* plane 6, row 57; 376/380 bytes (98.9%) */ + 63998, /* plane 6, row 58; 374/380 bytes (98.4%) */ + 64188, /* plane 6, row 59; 380/380 bytes (100.0%) */ + 64378, /* plane 6, row 60; 372/380 bytes (97.9%) */ + 64568, /* plane 6, row 61; 374/380 bytes (98.4%) */ + 64758, /* plane 6, row 62; 374/380 bytes (98.4%) */ + 64948, /* plane 6, row 63; 374/380 bytes (98.4%) */ + 65138, /* plane 6, row 64; 372/380 bytes (97.9%) */ + 65328, /* plane 6, row 65; 370/378 bytes (97.9%) */ + 65517, /* plane 6, row 66; 376/380 bytes (98.9%) */ + 65707, /* plane 6, row 67; 378/380 bytes (99.5%) */ + 65897, /* plane 6, row 68; 360/364 bytes (98.9%) */ + -1, /* plane 6, row 69 */ + -1, /* plane 6, row 70 */ + -1, /* plane 6, row 71 */ + -1, /* plane 6, row 72 */ + -1, /* plane 6, row 73 */ + -1, /* plane 6, row 74 */ + -1, /* plane 6, row 75 */ + -1, /* plane 6, row 76 */ + -1, /* plane 6, row 77 */ + -1, /* plane 6, row 78 */ + -1, /* plane 6, row 79 */ + -1, /* plane 6, row 80 */ + -1, /* plane 6, row 81 */ + -1, /* plane 6, row 82 */ + -1, /* plane 6, row 83 */ + -1, /* plane 6, row 84 */ + -1, /* plane 6, row 85 */ + -1, /* plane 6, row 86 */ + -1, /* plane 6, row 87 */ + -1, /* plane 6, row 88 */ + -1, /* plane 6, row 89 */ + -1, /* plane 6, row 90 */ + -1, /* plane 6, row 91 */ + -1, /* plane 6, row 92 */ + -1, /* plane 6, row 93 */ + -1, /* plane 6, row 94 */ + 66079, /* plane 7, row 1; 374/380 bytes (98.4%) */ + 66269, /* plane 7, row 2; 376/380 bytes (98.9%) */ + 66459, /* plane 7, row 3; 376/380 bytes (98.9%) */ + 66649, /* plane 7, row 4; 378/380 bytes (99.5%) */ + 66839, /* plane 7, row 5; 374/380 bytes (98.4%) */ + 67029, /* plane 7, row 6; 374/380 bytes (98.4%) */ + 67219, /* plane 7, row 7; 380/380 bytes (100.0%) */ + 67409, /* plane 7, row 8; 376/380 bytes (98.9%) */ + 67599, /* plane 7, row 9; 374/380 bytes (98.4%) */ + 67789, /* plane 7, row 10; 372/380 bytes (97.9%) */ + 67979, /* plane 7, row 11; 374/380 bytes (98.4%) */ + 68169, /* plane 7, row 12; 372/380 bytes (97.9%) */ + 68359, /* plane 7, row 13; 374/380 bytes (98.4%) */ + 68549, /* plane 7, row 14; 378/380 bytes (99.5%) */ + 68739, /* plane 7, row 15; 376/380 bytes (98.9%) */ + 68929, /* plane 7, row 16; 374/380 bytes (98.4%) */ + 69119, /* plane 7, row 17; 380/380 bytes (100.0%) */ + 69309, /* plane 7, row 18; 374/380 bytes (98.4%) */ + 69499, /* plane 7, row 19; 378/380 bytes (99.5%) */ + 69689, /* plane 7, row 20; 372/380 bytes (97.9%) */ + 69879, /* plane 7, row 21; 378/380 bytes (99.5%) */ + 70069, /* plane 7, row 22; 368/380 bytes (96.8%) */ + 70259, /* plane 7, row 23; 378/380 bytes (99.5%) */ + 70449, /* plane 7, row 24; 378/380 bytes (99.5%) */ + 70639, /* plane 7, row 25; 376/380 bytes (98.9%) */ + 70829, /* plane 7, row 26; 378/380 bytes (99.5%) */ + 71019, /* plane 7, row 27; 376/380 bytes (98.9%) */ + 71209, /* plane 7, row 28; 372/380 bytes (97.9%) */ + 71399, /* plane 7, row 29; 376/380 bytes (98.9%) */ + 71589, /* plane 7, row 30; 376/380 bytes (98.9%) */ + 71779, /* plane 7, row 31; 372/380 bytes (97.9%) */ + 71969, /* plane 7, row 32; 376/380 bytes (98.9%) */ + 72159, /* plane 7, row 33; 370/380 bytes (97.4%) */ + 72349, /* plane 7, row 34; 376/380 bytes (98.9%) */ + 72539, /* plane 7, row 35; 374/380 bytes (98.4%) */ + 72729, /* plane 7, row 36; 370/378 bytes (97.9%) */ + 72918, /* plane 7, row 37; 380/380 bytes (100.0%) */ + 73108, /* plane 7, row 38; 376/380 bytes (98.9%) */ + 73298, /* plane 7, row 39; 376/380 bytes (98.9%) */ + 73488, /* plane 7, row 40; 376/380 bytes (98.9%) */ + 73678, /* plane 7, row 41; 378/380 bytes (99.5%) */ + 73868, /* plane 7, row 42; 374/380 bytes (98.4%) */ + 74058, /* plane 7, row 43; 378/380 bytes (99.5%) */ + 74248, /* plane 7, row 44; 380/380 bytes (100.0%) */ + 74438, /* plane 7, row 45; 378/380 bytes (99.5%) */ + 74628, /* plane 7, row 46; 376/380 bytes (98.9%) */ + 74818, /* plane 7, row 47; 380/380 bytes (100.0%) */ + 75008, /* plane 7, row 48; 374/380 bytes (98.4%) */ + 75198, /* plane 7, row 49; 376/380 bytes (98.9%) */ + 75388, /* plane 7, row 50; 370/380 bytes (97.4%) */ + 75578, /* plane 7, row 51; 376/380 bytes (98.9%) */ + 75768, /* plane 7, row 52; 376/380 bytes (98.9%) */ + 75958, /* plane 7, row 53; 376/380 bytes (98.9%) */ + 76148, /* plane 7, row 54; 370/380 bytes (97.4%) */ + 76338, /* plane 7, row 55; 376/380 bytes (98.9%) */ + 76528, /* plane 7, row 56; 374/380 bytes (98.4%) */ + 76718, /* plane 7, row 57; 370/380 bytes (97.4%) */ + 76908, /* plane 7, row 58; 372/380 bytes (97.9%) */ + 77098, /* plane 7, row 59; 380/380 bytes (100.0%) */ + 77288, /* plane 7, row 60; 374/380 bytes (98.4%) */ + 77478, /* plane 7, row 61; 380/380 bytes (100.0%) */ + 77668, /* plane 7, row 62; 378/380 bytes (99.5%) */ + 77858, /* plane 7, row 63; 378/380 bytes (99.5%) */ + 78048, /* plane 7, row 64; 376/380 bytes (98.9%) */ + 78238, /* plane 7, row 65; 378/380 bytes (99.5%) */ + 78428, /* plane 7, row 66; 376/380 bytes (98.9%) */ + 78618, /* plane 7, row 67; 378/380 bytes (99.5%) */ + 78808, /* plane 7, row 68; 376/380 bytes (98.9%) */ + 78998, /* plane 7, row 69; 378/380 bytes (99.5%) */ + 79188, /* plane 7, row 70; 216/216 bytes (100.0%) */ + -1, /* plane 7, row 71 */ + -1, /* plane 7, row 72 */ + -1, /* plane 7, row 73 */ + -1, /* plane 7, row 74 */ + -1, /* plane 7, row 75 */ + -1, /* plane 7, row 76 */ + -1, /* plane 7, row 77 */ + -1, /* plane 7, row 78 */ + -1, /* plane 7, row 79 */ + -1, /* plane 7, row 80 */ + -1, /* plane 7, row 81 */ + -1, /* plane 7, row 82 */ + -1, /* plane 7, row 83 */ + -1, /* plane 7, row 84 */ + -1, /* plane 7, row 85 */ + -1, /* plane 7, row 86 */ + -1, /* plane 7, row 87 */ + -1, /* plane 7, row 88 */ + -1, /* plane 7, row 89 */ + -1, /* plane 7, row 90 */ + -1, /* plane 7, row 91 */ + -1, /* plane 7, row 92 */ + -1, /* plane 7, row 93 */ + -1, /* plane 7, row 94 */ + /* plane 8: --- */ + /* plane 9: --- */ + /* plane 10: --- */ + /* plane 11: --- */ + /* plane 12: --- */ + /* plane 13: --- */ + /* plane 14: --- */ + 79296, /* plane 15, row 1; 332/380 bytes (87.4%) */ + 79486, /* plane 15, row 2; 322/380 bytes (84.7%) */ + 79676, /* plane 15, row 3; 338/380 bytes (88.9%) */ + 79866, /* plane 15, row 4; 334/380 bytes (87.9%) */ + 80056, /* plane 15, row 5; 342/380 bytes (90.0%) */ + 80246, /* plane 15, row 6; 348/380 bytes (91.6%) */ + 80436, /* plane 15, row 7; 346/380 bytes (91.1%) */ + 80626, /* plane 15, row 8; 340/380 bytes (89.5%) */ + 80816, /* plane 15, row 9; 354/380 bytes (93.2%) */ + 81006, /* plane 15, row 10; 362/380 bytes (95.3%) */ + 81196, /* plane 15, row 11; 364/380 bytes (95.8%) */ + 81386, /* plane 15, row 12; 354/380 bytes (93.2%) */ + 81576, /* plane 15, row 13; 342/378 bytes (90.5%) */ + 81765, /* plane 15, row 14; 350/378 bytes (92.6%) */ + 81954, /* plane 15, row 15; 358/380 bytes (94.2%) */ + 82144, /* plane 15, row 16; 364/380 bytes (95.8%) */ + 82334, /* plane 15, row 17; 340/380 bytes (89.5%) */ + 82524, /* plane 15, row 18; 332/380 bytes (87.4%) */ + 82714, /* plane 15, row 19; 350/380 bytes (92.1%) */ + 82904, /* plane 15, row 20; 362/380 bytes (95.3%) */ + 83094, /* plane 15, row 21; 366/376 bytes (97.3%) */ + 83282, /* plane 15, row 22; 342/378 bytes (90.5%) */ + 83471, /* plane 15, row 23; 328/380 bytes (86.3%) */ + 83661, /* plane 15, row 24; 348/380 bytes (91.6%) */ + 83851, /* plane 15, row 25; 356/376 bytes (94.7%) */ + 84039, /* plane 15, row 26; 362/380 bytes (95.3%) */ + 84229, /* plane 15, row 27; 344/380 bytes (90.5%) */ + 84419, /* plane 15, row 28; 336/374 bytes (89.8%) */ + 84606, /* plane 15, row 29; 358/380 bytes (94.2%) */ + 84796, /* plane 15, row 30; 336/378 bytes (88.9%) */ + 84985, /* plane 15, row 31; 352/374 bytes (94.1%) */ + 85172, /* plane 15, row 32; 352/380 bytes (92.6%) */ + 85362, /* plane 15, row 33; 362/380 bytes (95.3%) */ + 85552, /* plane 15, row 34; 354/380 bytes (93.2%) */ + 85742, /* plane 15, row 35; 350/380 bytes (92.1%) */ + 85932, /* plane 15, row 36; 370/380 bytes (97.4%) */ + 86122, /* plane 15, row 37; 356/380 bytes (93.7%) */ + 86312, /* plane 15, row 38; 368/380 bytes (96.8%) */ + 86502, /* plane 15, row 39; 360/380 bytes (94.7%) */ + 86692, /* plane 15, row 40; 364/380 bytes (95.8%) */ + 86882, /* plane 15, row 41; 344/380 bytes (90.5%) */ + 87072, /* plane 15, row 42; 364/380 bytes (95.8%) */ + 87262, /* plane 15, row 43; 352/380 bytes (92.6%) */ + 87452, /* plane 15, row 44; 352/380 bytes (92.6%) */ + 87642, /* plane 15, row 45; 344/380 bytes (90.5%) */ + 87832, /* plane 15, row 46; 358/380 bytes (94.2%) */ + 88022, /* plane 15, row 47; 350/380 bytes (92.1%) */ + 88212, /* plane 15, row 48; 350/376 bytes (93.1%) */ + 88400, /* plane 15, row 49; 336/376 bytes (89.4%) */ + 88588, /* plane 15, row 50; 354/380 bytes (93.2%) */ + 88778, /* plane 15, row 51; 336/380 bytes (88.4%) */ + 88968, /* plane 15, row 52; 356/380 bytes (93.7%) */ + 89158, /* plane 15, row 53; 362/376 bytes (96.3%) */ + 89346, /* plane 15, row 54; 354/380 bytes (93.2%) */ + 89536, /* plane 15, row 55; 356/380 bytes (93.7%) */ + 89726, /* plane 15, row 56; 346/380 bytes (91.1%) */ + 89916, /* plane 15, row 57; 346/380 bytes (91.1%) */ + 90106, /* plane 15, row 58; 364/380 bytes (95.8%) */ + 90296, /* plane 15, row 59; 354/380 bytes (93.2%) */ + 90486, /* plane 15, row 60; 366/380 bytes (96.3%) */ + 90676, /* plane 15, row 61; 348/376 bytes (92.6%) */ + 90864, /* plane 15, row 62; 352/380 bytes (92.6%) */ + 91054, /* plane 15, row 63; 370/380 bytes (97.4%) */ + 91244, /* plane 15, row 64; 352/380 bytes (92.6%) */ + 91434, /* plane 15, row 65; 350/380 bytes (92.1%) */ + 91624, /* plane 15, row 66; 338/380 bytes (88.9%) */ + 91814, /* plane 15, row 67; 356/380 bytes (93.7%) */ + 92004, /* plane 15, row 68; 316/380 bytes (83.2%) */ + 92194, /* plane 15, row 69; 340/380 bytes (89.5%) */ + 92384, /* plane 15, row 70; 358/380 bytes (94.2%) */ + 92574, /* plane 15, row 71; 356/380 bytes (93.7%) */ + 92764, /* plane 15, row 72; 356/380 bytes (93.7%) */ + 92954, /* plane 15, row 73; 352/380 bytes (92.6%) */ + 93144, /* plane 15, row 74; 354/380 bytes (93.2%) */ + 93334, /* plane 15, row 75; 338/380 bytes (88.9%) */ + 93524, /* plane 15, row 76; 330/372 bytes (88.7%) */ + 93710, /* plane 15, row 77; 94/104 bytes (90.4%) */ + -1, /* plane 15, row 78 */ + -1, /* plane 15, row 79 */ + -1, /* plane 15, row 80 */ + -1, /* plane 15, row 81 */ + -1, /* plane 15, row 82 */ + -1, /* plane 15, row 83 */ + -1, /* plane 15, row 84 */ + -1, /* plane 15, row 85 */ + -1, /* plane 15, row 86 */ + -1, /* plane 15, row 87 */ + -1, /* plane 15, row 88 */ + -1, /* plane 15, row 89 */ + -1, /* plane 15, row 90 */ + -1, /* plane 15, row 91 */ + -1, /* plane 15, row 92 */ + -1, /* plane 15, row 93 */ + -1, /* plane 15, row 94 */ + /* plane 16: --- */ +}; + +sal_Int32 const aImplCns116431992ToUnicodePlaneOffsets[] = { + 0 * 94, /* plane 1; 264/376 bytes (70.2%) */ + 1 * 94, /* plane 2; 328/376 bytes (87.2%) */ + 2 * 94, /* plane 3; 284/376 bytes (75.5%) */ + 3 * 94, /* plane 4; 312/376 bytes (83.0%) */ + 4 * 94, /* plane 5; 368/376 bytes (97.9%) */ + 5 * 94, /* plane 6; 272/376 bytes (72.3%) */ + 6 * 94, /* plane 7; 280/376 bytes (74.5%) */ + -1, /* plane 8 */ + -1, /* plane 9 */ + -1, /* plane 10 */ + -1, /* plane 11 */ + -1, /* plane 12 */ + -1, /* plane 13 */ + -1, /* plane 14 */ + 7 * 94, /* plane 15; 308/376 bytes (81.9%) */ + -1, /* plane 16 */ +}; + +sal_uInt8 const aImplUnicodeToCns116431992Data[] = { + /* plane 0, page 0 */ + 167, 247, /* first, last */ + 1, 1,80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2,88, 1, 2,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,19, + /* plane 0, page 1: --- */ + /* plane 0, page 2 */ + 199, 217, /* first, last */ + 1, 5,79, + 0, 0, 0, 1, 5,77, 1, 5,78, 1, 5,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 5,76, + /* plane 0, page 3 */ + 145, 201, /* first, last */ + 1, 4,85, 1, 4,86, 1, 4,87, 1, 4,88, 1, 4,89, 1, 4,90, 1, 4,91, + 1, 4,92, 1, 4,93, 1, 4,94, 1, 5, 1, 1, 5, 2, 1, 5, 3, 1, 5, 4, 1, 5, 5, + 1, 5, 6, 1, 5, 7, 0, 0, 0, 1, 5, 8, 1, 5, 9, 1, 5,10, 1, 5,11, 1, 5,12, + 1, 5,13, 1, 5,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 5,15, 1, 5,16, 1, 5,17, 1, 5,18, 1, 5,19, 1, 5,20, 1, 5,21, + 1, 5,22, 1, 5,23, 1, 5,24, 1, 5,25, 1, 5,26, 1, 5,27, 1, 5,28, 1, 5,29, + 1, 5,30, 1, 5,31, 0, 0, 0, 1, 5,32, 1, 5,33, 1, 5,34, 1, 5,35, 1, 5,36, + 1, 5,37, 1, 5,38, + /* plane 0, page 4: --- */ + /* plane 0, page 5: --- */ + /* plane 0, page 6: --- */ + /* plane 0, page 7: --- */ + /* plane 0, page 8: --- */ + /* plane 0, page 9: --- */ + /* plane 0, page 10: --- */ + /* plane 0, page 11: --- */ + /* plane 0, page 12: --- */ + /* plane 0, page 13: --- */ + /* plane 0, page 14: --- */ + /* plane 0, page 15: --- */ + /* plane 0, page 16: --- */ + /* plane 0, page 17: --- */ + /* plane 0, page 18: --- */ + /* plane 0, page 19: --- */ + /* plane 0, page 20: --- */ + /* plane 0, page 21: --- */ + /* plane 0, page 22: --- */ + /* plane 0, page 23: --- */ + /* plane 0, page 24: --- */ + /* plane 0, page 25: --- */ + /* plane 0, page 26: --- */ + /* plane 0, page 27: --- */ + /* plane 0, page 28: --- */ + /* plane 0, page 29: --- */ + /* plane 0, page 30: --- */ + /* plane 0, page 31: --- */ + /* plane 0, page 32 */ + 19, 62, /* first, last */ + 1, 1,25, 1, 1,23, 0, 0, 0, 1, 2,61, 0, 0, 0, + 1, 1,68, 1, 1,69, 0, 0, 0, 0, 0, 0, 1, 1,70, 1, 1,71, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,13, 1, 1,12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,74, 0, 0, 0, 0, 0, 0, 1, 1,75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,79, 0, 0, 0, 0, 0, 0, 1, 2, 3, + /* plane 0, page 33 */ + 3, 153, /* first, last */ + 1, 2,74, 0, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 2,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 4,11, 1, 4,12, 1, 4,13, 1, 4,14, 1, 4,15, 1, 4,16, 1, 4,17, 1, 4,18, + 1, 4,19, 1, 4,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 6,21, 1, 6,22, 1, 6,23, 1, 6,24, 1, 6,25, 1, 6,26, 1, 6,27, 1, 6,28, + 1, 6,29, 1, 6,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2,56, 1, 2,53, 1, 2,55, 1, 2,54, 0, 0, 0, 0, 0, 0, 1, 2,57, 1, 2,58, + 1, 2,60, 1, 2,59, + /* plane 0, page 34 */ + 21, 191, /* first, last */ + 1, 2,65, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,28, 1, 2,41, + 1, 2,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 2,37, 1, 2,38, 1, 2,45, 0, 0, 0, 0, 0, 0, 1, 2,46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,48, 1, 2,47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2,27, 1, 2,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,25, 1, 2,26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,42, + /* plane 0, page 35: --- */ + /* plane 0, page 36 */ + 0, 125, /* first, last */ + 1,34, 1, 1,34, 2, 1,34, 3, 1,34, 4, 1,34, 5, 1,34, 6, 1,34, 7, 1,34, 8, + 1,34, 9, 1,34,10, 1,34,11, 1,34,12, 1,34,13, 1,34,14, 1,34,15, 1,34,16, + 1,34,17, 1,34,18, 1,34,19, 1,34,20, 1,34,21, 1,34,22, 1,34,23, 1,34,24, + 1,34,25, 1,34,26, 1,34,27, 1,34,28, 1,34,29, 1,34,30, 1,34,31, 1,34,32, + 0, 0, 0, 1,34,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 6, 1, 1, 6, 2, 1, 6, 3, 1, 6, 4, 1, 6, 5, 1, 6, 6, 1, 6, 7, 1, 6, 8, + 1, 6, 9, 1, 6,10, 0, 0, 0, 0, 0, 0, 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, 6,11, 1, 6,12, 1, 6,13, 1, 6,14, + 1, 6,15, 1, 6,16, 1, 6,17, 1, 6,18, 1, 6,19, 1, 6,20, + /* plane 0, page 37 */ + 0, 229, /* first, last */ + 1, 3,25, 0, 0, 0, 1, 3,26, 0, 0, 0, 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, 3,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 3,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 3,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 3,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3,37, 0, 0, 0, + 0, 0, 0, 1, 3,39, 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, 3,38, 0, 0, 0, 0, 0, 0, 1, 3,32, 1, 3,33, 1, 3,35, + 1, 3,34, 1, 3,44, 1, 3,45, 1, 3,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 3, 4, 1, 3, 5, 1, 3, 6, 1, 3, 7, 1, 3, 8, 1, 3, 9, 1, 3,10, + 1, 3,11, 1, 3,18, 1, 3,17, 1, 3,16, 1, 3,15, 1, 3,14, 1, 3,13, 1, 3,12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3,24, 1, 3,27, 0, 0, 0, 0, 0, 0, + 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,92, 1, 1,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,85, 1, 1,84, 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,94, 1, 1,93, 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,90, 1, 1,89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,82, 0, 0, 0, 0, 0, 0, 1, 1,86, 1, 1,83, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 3,40, 1, 3,41, 1, 3,43, 1, 3,42, + /* plane 0, page 38 */ + 5, 66, /* first, last */ + 1, 1,88, 1, 1,87, 0, 0, 0, + 0, 0, 0, 1, 2,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2,49, 1, 2,51, 1, 2,50, + /* plane 0, page 39: --- */ + /* plane 0, page 40: --- */ + /* plane 0, page 41: --- */ + /* plane 0, page 42: --- */ + /* plane 0, page 43: --- */ + /* plane 0, page 44: --- */ + /* plane 0, page 45: --- */ + /* plane 0, page 46: --- */ + /* plane 0, page 47: --- */ + /* plane 0, page 48 */ + 0, 251, /* first, last */ + 1, 1, 1, 1, 1, 3, 1, 1, 4, 1, 1,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1,50, 1, 1,51, 1, 1,46, 1, 1,47, 1, 1,54, 1, 1,55, 1, 1,58, 1, 1,59, + 1, 1,42, 1, 1,43, 1, 2,69, 0, 0, 0, 1, 1,38, 1, 1,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,72, 1, 1,73, 0, 0, 0, + 0, 0, 0, 1, 4,21, 1, 4,22, 1, 4,23, 1, 4,24, 1, 4,25, 1, 4,26, 1, 4,27, + 1, 4,28, 1, 4,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, + /* plane 0, page 49 */ + 5, 41, /* first, last */ + 1, 5,39, 1, 5,40, 1, 5,41, + 1, 5,42, 1, 5,43, 1, 5,44, 1, 5,45, 1, 5,46, 1, 5,47, 1, 5,48, 1, 5,49, + 1, 5,50, 1, 5,51, 1, 5,52, 1, 5,53, 1, 5,54, 1, 5,55, 1, 5,56, 1, 5,57, + 1, 5,58, 1, 5,59, 1, 5,60, 1, 5,61, 1, 5,62, 1, 5,63, 1, 5,64, 1, 5,65, + 1, 5,66, 1, 5,67, 1, 5,68, 1, 5,69, 1, 5,70, 1, 5,71, 1, 5,72, 1, 5,73, + 1, 5,74, 1, 5,75, + /* plane 0, page 50 */ + 163, 163, /* first, last */ + 1, 2, 1, + /* plane 0, page 51 */ + 142, 213, /* first, last */ + 1, 2,85, 1, 2,86, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,80, 1, 2,81, 1, 2,82, 0, 0, 0, + 0, 0, 0, 1, 2,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,83, 0, 0, 0, + 0, 0, 0, 1, 2,44, 1, 2,43, 0, 0, 0, 0, 0, 0, 1, 2,79, + /* plane 0, page 52 */ + 0, 254, /* first, last */ + 6, 2,12, 4, 2, 4, 0, 0, 0, 0, 0, 0, 6, 1,16, 6, 1, 3,15, 1,76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3,22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,20,27, 0, 0, 0, 0, 0, 0, 3,25,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 7,33, 3, 8,76, 0, 0, 0, 3, 3, 3, 4, 3,23, 4, 5,20, 3,32,20, 0, 0, 0, + 4, 1,57, 3, 1,85, 3, 1,78, 3, 1,81, 3, 1,83, 0, 0, 0,15, 1,36, 0, 0, 0, + 6, 3,46, 3, 2,81, 4, 2,17, 3, 2,73, 3, 2,74, 0, 0, 0,15, 1,82, 0, 0, 0, + 0, 0, 0, 5, 3,20, 3, 4,42, 3, 4,39, 3, 4,45, 6, 5,81, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 7,38, 5, 5, 5, 4, 5,25, 4, 5,28, 3, 7,37, 5, 5,11, 4, 5,27, + 4, 5,24, 3, 7,48, 0, 0, 0,15, 5,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,11,17, + 6,14,58, 4, 8,25, 3,11,16, 5, 8, 1, 4, 8,26, 3,11,10, 4, 8,23, 4, 8,28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,11,76, 3,20,41, 3,15,50, 4,11,69, 6,21,24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,16,37, 3,20,30, + 3,20,40, 4,16,42, 0, 0, 0, 4,22,24, 3,25,83, 4,22,18, 4,22,23, 6,38,53, + 0, 0, 0, 6,41,91, 3,25,84, 3,32,21, 3,32,24, 3,32,27, 4,28,12, 4,28,13, + 4,28, 8, 4,28,10, 5,36,55, 4,34,23, 4,34,19, 4,34,14, 3,37,88, 6,58,83, + 4,34,15, 3,37,83, 4,47,57, 3,37,82, 3,37,79, 3,37,87, 4,34,18, 0, 0, 0, + 0, 0, 0, 4,40,91, 3,43, 6, 3,43, 5, 4,40,93, 3,43, 4, 3,43, 8, 3,43,10, + 0, 0, 0, 3,48,18, 4,47,61, 5,51,57, 4,47,59, 3,52,31, 3,55,51, 4,58,71, + 4,58,72, 4,63,41, 0, 0, 0, 0, 0, 0, 4,67,15, 3,60,19, 3,60,17, 7,50,84, + 7,55,44, 4,74,33, 3,65,28, 4, 2,19,15, 6,58, 4,11,73, 0, 0, 0, 3,55,52, + 3, 1,86, 0, 0, 0, 3, 2,89, 3, 4,53, 5, 3,23, 6, 5,91, 6, 5,93, 3, 4,54, + 3,11,24, 7,45,29, 3,10,44, 4,16,44, 5,17, 6, 4,22,29, 4,28,18, 4,74,34, + 0, 0, 0, 0, 0, 0, 3,11,26, 3,25,88, 4,41, 2, 3, 1,48, 0, 0, 0, 3, 3, 1, + 3, 4,56, 5, 5,14, 3, 7,55, 3, 7,54, 3, 7,56, 0, 0, 0, 4, 8,35, 3,11,28, + 3,15,61, 3,15,60, 0, 0, 0, 4,16,45, 3,25,91, 3,25,92, 4,28,20, 3,37,89, + 5,17, 9, 0, 0, 0, 4, 1,65, 6, 2,33, 3, 1,94, 4, 2,28, 5, 2,16, 4, 3,30, + 4, 3,31, 4, 5,42, 4, 5,44, 4, 5,40, 4, 5,39, 0, 0, 0, 0, 0, 0, 3,11,33, + 3,11,37, 3,11,34, 0, 0, 0, 0, 0, 0, 5,11,92, 4,16,51, 3,15,71, 3,15,73, + 0, 0, 0, 4,16,55, 4,16,56, 4,16,50, 5,17,12, 4,16,52, 4,16,57, 3,26, 4, + 6,48,76, 4,22,34, 4,22,37, 3,26, 2, 5,29,80, 3,32,34, 4,34,33, + /* plane 0, page 53 */ + 0, 255, /* first, last */ + 4,34,35, 4,34,34, 4,34,28, 3,37,93, 3,37,91, 4,34,31, 4,34,30, 3,37,92, + 0, 0, 0, 0, 0, 0, 4,41, 3, 4,47,66, 4,47,65, 4,47,67, 5,65,27, 4,53,76, + 7,30,93, 4,63,42, 4,67,16, 4, 1,68, 0, 0, 0, 4, 2,32, 0, 0, 0, 4, 3,36, + 3, 4,68, 4, 5,47, 6, 9,79, 0, 0, 0, 6,15, 7, 4,11,85, 3,15,75, 0, 0, 0, + 4,16,58, 4,22,43, 3,38, 2, 4,53,79, 3,52,35, 4,53,80, 5,51,67, 4,58,78, + 4,16,60, 4,22,45, 5,29,88, 0, 0, 0, 6, 9,82, 3,20,51, 5,80,88, 4, 3,43, + 6, 6,24, 4,11,87, 3,26, 5, 6,48,86, 4,28,30, 5,36,76, 4,77,51, 6, 6,22, + 4,22,48, 3, 1,56, 6, 3,81, 3, 3,12, 6,48,90, 3, 7,68, 4, 1,11, 6, 1,27, + 6, 8,68, 4, 5,54, 3, 3,16, 5, 2,28, 3, 3,14, 3, 4,74, 3, 4,73, 3, 4,72, + 3, 7,72, 6,10,10, 3,11,44, 3,15,80, 4,11,90, 3,15,81, 4,22,49, 6,49, 2, + 5,44,17, 3,38, 4, 4,41, 7, 0, 0, 0, 3,64,80, 3, 1,61, 3,15,82, 6,29,65, + 3,20,54, 4,41, 9, 5, 1,33, 3, 1,63, 3, 3,18, 0, 0, 0, 4, 5,58, 4, 8,55, + 3,31,88, 3,38, 7, 4,39,54, 4, 1,75, 3, 2,16, 3, 2,12, 3, 3,24, 3, 3,22, + 0, 0, 0, 3, 4,76, 4, 3,49, 3, 4,75, 3, 4,81, 4, 3,52, 4, 3,57, 3, 4,82, + 4, 3,51, 3, 4,79, 3, 4,78, 3, 4,90, 0, 0, 0,15, 3,41, 3, 5, 5, 3, 7,90, + 3, 7,77, 4, 5,61, 3, 7,86, 5, 5,34, 6,10,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,11,50, 3,11,64, 3,11,63, 3,11,66, 3,11,58, 4, 8,57, 4, 8,60, 3,11,54, + 15, 9,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,12, 5, + 3,15,93, 4,11,94, 3,15,85, 3,15,92, 4,12, 1, 4,11,93, 6,21,93, 3,16, 4, + 5,12,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,20,61, + 3,20,69, 4,16,74, 5,22,80, 3,20,67, 3,20,60, 4,16,80, 3,20,58, 4,16,83, + 4,16,81, 4,16,77, 4,16,76,15,19,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,24,51, 4,16,79, 5,22,86, 3,26,18, + 4,22,71, 3,26,21, 3,26,12, 4,22,62, 4,22,57, 3,26,25, 3,26,30, 3,26,13, + 4,22,64, 3,26,29, 4,22,63, 3,26,23, 6,39,25, 5,22,89, 5,22,90, 3,26,16, + 4,22,56, 4,22,69, 4,22,67, 3,26,33, 5,22,78, 3,26,31, 0, 0, 0, 0, 0, 0, + 3,26,26, 0, 0, 0, 0, 0, 0, 5,30,25, 4,28,42, 4,28,38, 3,32,47, 5,30,29, + 4,28,39, 4,28,44, 3,32,45, 3,32,48, 6,49,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,34,50, 3,38,18, 3,38,15, 3,38,13, 4,34,47, 4,34,42, + 4,34,53, 3,38,11, 3,43,26, 4,34,51, 4,34,54, 4,34,49, 0, 0, 0, 0, 0, 0, + 5,37, 2, 4,41,16, 4,41,12, 3,43,34, 4,41,13, 3,43,22, 7, 1,46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,47,75, 4,47,76, 3,48,33, 4,47,71, 4,47,74, + /* plane 0, page 54 */ + 0, 254, /* first, last */ + 4,47,79, 3,48,28, 3,48,26, 0, 0, 0, 0, 0, 0, 7,23,23, 4,53,82, 3,52,38, + 4,53,83, 4,47,77, 5,65,32, 4,58,80, 3,55,54, 5,65,37, 0, 0, 0, 0, 0, 0, + 4,63,44, 5,71,57, 0, 0, 0, 5,75,83, 3,60,21, 3,62, 7, 4,70,18, 0, 0, 0, + 0, 0, 0, 3,64,14, 3,64,13, 4,76,76, 7,66,15, 3, 2,18, 3, 2, 1, 3, 3,29, + 5, 5,51, 3, 7,94, 3,11,68, 3,16, 6, 4,34,56, 4,67,18, 3, 2,19, 3, 5,14, + 4, 3,63, 3, 5,25, 3, 5,26, 4, 3,62, 3, 5,29, 3, 5,31, 0, 0, 0, 3, 5,27, + 3, 5,20, 3, 8, 7, 4, 5,77, 3, 8,11, 3, 8,12, 0, 0, 0, 3,11,86, 6,15,69, + 3,11,84, 3,11,85, 3,11,83, 3,11,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,16, 9, + 4,12,15, 4,12,17, 3,16,13, 3,16,12, 3,16,14, 3,16,17, 0, 0, 0, 3,20,76, + 3,20,77, 3,20,83, 3,20,74,15,19,55, 0, 0, 0, 4,17, 1, 4,22,75, 3,26,38, + 4,22,78, 3,26,49, 6,39,46, 3,26,40, 0, 0, 0, 3,26,45, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,28,57, 4,28,59, 3,32,51, 3,32,53, 4,28,54, 4,28,56, 0, 0, 0, + 4,34,62, 4,34,61, 4,34,59, 3,38,27, 4,34,63, 3,38,25, 0, 0, 0, 7, 1,74, + 3,43,50, 3,43,40, 4,41,19, 3,43,42, 3,43,46,15,46, 5,15,46,14, 4,41,10, + 3,48,36, 4,47,88, 3,48,39, 3,48,34, 3,48,35, 3,48,38, 3,48,37, 4,53,92, + 3,52,45, 3,52,42, 4,53,91, 7,31,16, 3,55,61, 0, 0, 0, 7,38,36, 0, 0, 0, + 5,75,86, 3,64,82, 4,76,78, 5,23,28, 3,45,33, 3,11,88, 0, 0, 0, 4, 8,65, + 0, 0, 0, 5, 5,56, 4,22,87, 4,34,64, 3,38,39, 4,58,90, 3, 2,26, 3, 3,38, + 3, 3,40, 0, 0, 0, 4, 3,69, 3, 5,42, 4, 5,81, 5, 5,57, 4, 5,87, 4, 5,83, + 4, 5,88, 0, 0, 0, 3,11,93, 0, 0, 0, 4,17, 5, 6,30,34, 3,20,90, 3,26,53, + 4,28,60, 3,48,30, 3, 1,84, 3, 3,44, 3, 3,42, 4, 2,54, 4, 2,57, 4, 2,53, + 3, 3,41, 3, 5,50, 3, 5,55, 3, 5,48, 3, 5,47, 3, 5,45, 3, 5,52, 0, 0, 0, + 3, 8,17, 3, 8,27, 4, 5,91, 3, 8,34, 3, 8,18, 3, 8,26, 3, 8,35, 3, 8,39, + 3, 8,20, 4, 6, 1, 3, 8,36, 3, 8,30, 3, 8,22, 3, 8,28, 5, 5,61, 3, 8,25, + 0, 0, 0, 3, 8,16, 4, 8,77, 4, 8,73, 3,11,94, 3,12, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,10,10, 4, 8,71, 0, 0, 0, 0, 0, 0, 3,16,31, 3,16,34, 3,16,29, + 3,16,41, 3,16,39, 4,12,27, 3,16,35, 3,16,48, 3,16,44, 3,16,36, 4,12,31, + 4,12,26, 3,16,25, 4,12,28, 3,16,49, 3,16,38, 3,16,33, 3,16,26, 0, 0, 0, + 0, 0, 0,15,14,75,15,14,88, 0, 0, 0, 0, 0, 0, 4,17, 9, 3,21, 6, 3,21,13, + 3,21, 1, 3,21,22, 4,17, 8, 3,21,12, 3,21, 3, 3,21, 5, 3,26,81, 3,26,71, + 3,26,84, 3,26,68, 3,26,86, 3,26,76, 3,26,74, 3,26,69, 5,23,46, 3,26,78, + 5,23,38, 4,22,94, 3,26,79, 3,26,63, 4,22,93, 3,26,80, 3,26,61, + /* plane 0, page 55 */ + 1, 255, /* first, last */ + 15,26,28, 3,26,77, 3,26,73, 3,26,72, 4,28,63, 3,32,66, 4,28,65, + 3,32,78, 3,32,77, 3,32,72, 3,32,67, 4,28,68, 3,32,69, 4,28,67, 3,32,80, + 3,32,75, 3,32,79, 3,32,76, 3,32,73, 0, 0, 0, 3,38,43, 4,34,71, 4,34,76, + 4,34,72, 4,34,70, 3,38,41, 3,38,50, 3,38,49, 4,34,75, 4,34,77, 0, 0, 0, + 3,38,45, 3,38,46, 4,34,73, 4,41,28, 4,41,26, 3,43,57, 3,43,55, 4,41,32, + 3,43,53, 3,48,50, 3,48,53, 4,48, 1,15,52,10, 0, 0, 0, 4,54, 2, 4,54, 4, + 3,55,63, 3,55,64, 4,63,52, 5,71,62, 3,58,16, 3,58,18, 3,60,23, 4,67,21, + 3,60,24, 4,70,23, 4,72,69, 3,65,66, 3,65,67, 3, 3,46, 6, 6,88, 4, 3,77, + 3, 8,41, 4, 8,80, 4,12,33, 3,16,52, 3,26,93, 4,28,71, 0, 0, 0, 7,13,13, + 3,65,29, 0, 0, 0, 3, 2,28, 0, 0, 0, 3, 3,47, 6, 6,89, 3, 5,57, 4, 3,80, + 3, 5,59, 6, 6,90, 3, 8,47, 5, 8,78, 3,12,16, 3,12,17, 3,12,19, 4,12,34, + 5,12,92, 6,22,61, 0, 0, 0, 3,21,34, 3,21,29, 3,21,30, 4,17,14, 6,30,58, + 3,21,32, 0, 0, 0, 3,27, 1, 4,23, 2, 4,28,74, 4,28,76, 4,28,79, 3,32,87, + 0, 0, 0, 4,34,84, 4,34,85, 3,43,64, 4,34,87, 4,41,35, 4,41,37, 4,41,38, + 4,58,93, 3,62,11, 7,66,21, 0, 0, 0, 4, 3,81, 4, 6, 6, 6,22,72, 3,27, 2, + 4,12,44, 6,30,68, 4,34,88, 5,44,67, 4, 2,61, 4, 3,84, 4, 6, 8, 4, 6, 7, + 4, 8,84, 4, 8,85, 4,12,45, 5,17,85, 4,17,19, 5,17,83, 4,17,18, 4,23, 8, + 4,23, 9, 4,28,81, 4,34,89, 3, 2,32, 3, 3,51, 0, 0, 0, 0, 0, 0, 4, 6,10, + 3, 8,50, 3, 8,51, 4, 8,89, 4, 8,88, 3,12,25, 3,12,24, 3,12,22, 4,12,46, + 6,30,75, 3,21,37, 4,23,11, 5,23,70, 4,34,93, 0, 0, 0, 0, 0, 0, 4,41,42, + 0, 0, 0, 3,58,23, 3, 1,66, 4, 3,87, 3, 2,34, 3, 2,35, 3, 2,33, 3, 2,36, + 3, 3,54, 4, 2,65, 5, 2,49, 4, 3,91, 5, 2,48, 3, 3,55, 0, 0, 0, 3, 3,56, + 4, 3,88, 4, 3,89, 3, 5,64, 5, 3,80, 5, 3,84, 3, 5,68, 3, 5,69, 4, 3,86, + 0, 0, 0, 3, 8,59, 6,10,91, 4, 6,17, 4, 6,18, 4, 6,14, 3, 8,54, 6,10,86, + 3, 8,57, 3, 8,58, 0, 0, 0, 5, 5,78, 3,12,26, 4, 8,91, 0, 0, 0, 4,12,59, + 4,12,51, 4,12,49, 3,16,64, 4,12,63, 4,12,53, 3,16,60, 4,12,58, 4,12,62, + 4,12,55, 3,16,61, 6,22,92, 5,13,14, 3,16,69, 0, 0, 0, 4,12,52, 3,21,54, + 3,21,41, 4,17,23, 3,21,44, 4,17,29, 6,30,85, 3,21,45, 4,17,25, 6,30,88, + 3,21,48, 0, 0, 0,15,20,31, 0, 0, 0, 0, 0, 0, 3,21,51, 3,27,15, 3,27,18, + 3,27, 9, 4,23,18, 4,23,20, 3,27,21, 4,28,82, 3,27,16, 0, 0, 0, 3,27,12, + 4,28,86, 4,28,83, 4,28,94, 5,30,77, 4,29, 1, 6,50,20, 3,32,91, 0, 0, 0, + 4,28,87, 4,35, 2, 6,60,36, 4,35,13, 4,35,10, 4,35, 1, 3,38,53, 4,35, 4, + /* plane 0, page 56 */ + 0, 255, /* first, last */ + 3,38,59, 3,38,56, 4,35,14, 0, 0, 0, 3,38,55, 4,41,48, 4,41,44, 5,44,76, + 3,43,66, 5,44,72, 4,41,43, 4,41,51, 3,43,68, 4,41,47, 4,41,45, 3,43,65, + 4,41,52, 4,48, 6, 4,48, 7, 4,54, 8, 4,48, 5, 5,52,22, 3,48,57, 7,13,44, + 3,52,58, 3,52,54, 5,59,28, 4,54, 7, 3,52,56, 7,31,36, 0, 0, 0, 0, 0, 0, + 4,63,58, 5,71,67, 5,71,68, 0, 0, 0, 0, 0, 0, 4,70,26, 3,62,12, 4,72,72, + 5,91,29, 3, 3,59, 6, 1,78, 0, 0, 0, 0, 0, 0, 3,27,24, 4,41,53, 3, 2,37, + 0, 0, 0, 4,17,34, 3, 2,38, 0, 0, 0, 4, 2,69, 4, 2,70, 3, 3,61, 4, 4, 2, + 4, 4, 4, 3, 5,73, 4, 4, 1, 3, 5,74,15, 4, 5, 4, 6,22, 4, 6,23, 4, 9, 5, + 4, 4, 5, 4, 9, 2, 4, 9, 4, 6,16,67, 3,12,39, 4, 9, 3, 4, 9, 1, 4,12,70, + 4,12,72, 4,17,39, 4,17,40, 4,17,37, 4,17,41, 0, 0, 0, 3,21,60, 4,23,27, + 4,23,22, 4,23,29, 4,23,26, 3,27,28, 4,23,28, 3,27,25, 4,23,25, 4,29, 8, + 4,29, 3, 4,29, 7, 4,29, 6, 4,29, 9, 4,35,19, 4,35,18, 4,35,17, 4,35,15, + 3,43,78, 0, 0, 0, 3,43,79, 4,48, 9, 0, 0, 0, 4,54,13, 4,54,11, 4,67,27, + 4,67,26, 3,63,36, 4,72,75, 6,40,36, 0, 0, 0, 3,38,62, 4,48,11, 3, 3,64, + 3, 3,63, 3, 3,62, 3, 5,76, 6, 7,39, 4, 6,24, 4, 6,29, 4, 6,27, 5, 6, 6, + 4, 6,28, 3, 8,68, 4, 6,26, 3, 8,70,15,15,24, 3,12,41, 3,12,42, 4, 9,10, + 5, 9, 6, 4, 9, 9, 4, 9, 8, 4,12,75, 4,12,77, 4,12,76, 3,16,77, 0, 0, 0, + 3,21,62, 4,17,46, 4,17,44, 4,17,47, 3,21,61, 5,24, 9, 4,23,32, 4,23,33, + 3,27,33, 5,31, 1, 4,35,22, 3,38,63, 4,35,25, 4,35,26, 4,41,59, 4,41,60, + 3,43,81, 3,48,61, 4,48,12, 4,48,14, 5,52,34, 4,63,62, 4,67,28, 4, 4, 9, + 3, 8,74, 3,38,66, 0, 0, 0, 7,13,59, 0, 0, 0, 4, 9,11, 4,29,13, 6, 1,89, + 4, 2,74, 3, 3,67, 3, 3,68, 0, 0, 0, 3, 5,80, 0, 0, 0, 3, 8,79, 4, 6,32, + 4, 6,33, 0, 0, 0, 3,12,46, 4, 9,13, 6,16,90, 4, 9,14, 3,12,47, 0, 0, 0, + 4,12,81, 0, 0, 0, 5,18,38, 4,17,49, 4,12,82, 3,27,38, 3,27,35, 0, 0, 0, + 5,31, 9, 4,29,15, 4,29,14, 6,50,45, 4,41,61, 4,41,63, 3,62,14, 4, 6,34, + 4,48,17, 6, 4,80, 0, 0, 0, 3, 8,83, 4, 6,35, 3, 8,82, 3,21,68, 3,27,40, + 3,27,41, 4,35,27, 4,41,65, 3,48,63, 3, 2,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,11,30, 3, 8,84, 4, 9,18, 4, 9,20, 3,12,50, 5, 9,15, 5, 9,19, 3,12,51, + 6,17, 5, 0, 0, 0, 5,13,39,15,15,30, 4,17,52, 3,21,70, 3,21,71, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,23,41, 3,27,42, 4,23,40, 0, 0, 0, 4,29,19, + 5,37,73, 4,35,29, 6,60,71, 0, 0, 0, 0, 0, 0, 3,48,64, 4,48,20, 4,54,15, + 0, 0, 0, 0, 0, 0, 6, 1,94, 3, 3,69, 3, 3,72, 4, 4,17, 5, 2,71, 4, 2,80, + /* plane 0, page 57 */ + 1, 255, /* first, last */ + 3, 8,91, 3, 8,93, 3, 5,89, 4, 4,14, 3, 8,92, 4, 4,16, 4, 4,19, + 3, 5,83, 4, 4,15, 4, 4,18, 3, 6, 4, 3, 8,89, 4, 9,21, 4, 9,23, 4, 6,45, + 3,12,57, 3, 9, 4, 4, 6,40, 3, 9, 3, 4, 6,46, 4, 6,44, 4, 6,38,15,10,30, + 0, 0, 0, 3,12,56, 4, 9,33, 3,12,66, 4, 9,28, 4, 6,41, 4, 9,25, 3,16,93, + 6,23,52, 4, 9,29, 5, 9,21, 4,13, 8, 4, 9,40, 4, 9,26, 4, 9,27, 4, 9,32, + 3,12,53, 6,23,58, 3,16,92, 0, 0, 0, 3,12,62, 0, 0, 0, 4,17,59, 5,13,58, + 3,21,83, 4,13, 2, 3,21,73, 3,16,85, 4,13, 3, 3,21,80, 4,13, 4, 3,16,87, + 6,23,62, 3,17, 4, 4,13,11, 4,17,58, 0, 0, 0, 0, 0, 0, 4,17,60, 4,17,66, + 3,21,75, 6,40,79, 4,17,67, 3,21,85, 4,17,64, 5,18,59, 4,17,61, 3,21,76, + 3,27,46, 4,17,76, 4,17,71, 3,27,44, 3,21,77, 3,21,87, 3,27,55, 4,17,68, + 6,40,85, 3,27,51, 4,17,70, 4,17,62, 5,13,55, 3,27,50, 5,24,34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,17,74, 5,24,40, 4,23,54, 4,23,48, 3,27,60, 4,23,57, + 3,27,63, 4,23,52, 4,23,46, 5,31,18, 3,33, 5, 4,23,53, 4,29,30, 3,27,64, + 4,29,23, 5,18,56, 0, 0, 0, 3,27,59, 3,33, 6, 3,33,13, 4,29,27, 4,35,35, + 5,31,34, 6,50,73, 3,38,71, 4,29,26, 4,29,28, 3,33,16, 3,38,69, 4,35,34, + 4,35,48, 3,38,70, 3,33,15, 0, 0, 0, 4,35,40, 4,35,39, 4,35,41, 3,43,93, + 4,35,45, 4,41,69, 3,44, 2, 3,38,73, 3,43,91, 4,35,42, 4,35,44, 4,35,38, + 0, 0, 0, 3,44, 7, 3,43,88, 4,35,43, 4,48,24, 3,44,10, 4,41,71, 4,41,73, + 4,41,72, 4,41,75, 7, 2,92, 4,41,77, 3,48,73, 4,41,76, 3,44, 6, 4,48,25, + 5,59,44, 0, 0, 0, 4,59, 3, 4,59, 9, 4,54,22, 4,59, 5, 3,55,71, 4,59, 4, + 15,58, 9, 3,55,70, 4,48,26, 5,71,88, 4,67,35, 4,63,68, 5,71,83, 7,39,12, + 3,62,16, 4,67,34, 4,67,32, 3,63,39, 4,72,76, 3,65,88, 3, 3,74, 3, 6, 6, + 4, 6,52, 0, 0, 0, 6,11,50, 0, 0, 0, 4,13,15, 4,13,16, 5,13,61, 3,21,90, + 3,27,69, 4,29,34, 4,35,52, 5,45,23, 3,44,11, 3,52,66, 6, 7,78, 4, 6,53, + 4, 6,54, 4, 9,45, 3,12,68, 4, 1,91, 4, 1,90, 3, 2,47, 4, 2,84, 4, 2,83, + 4, 2,85, 4, 4,26, 4, 4,22, 3, 6,12, 3, 6,13, 3, 6,16, 3, 6,11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 6,56, 3, 9,13, 5, 6,26, 3, 9,12, 3, 9,24, 4, 9,53, + 4,13,19, 4, 6,57, 3, 9,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,14, 0, 0, 0, + 0, 0, 0, 4, 9,46, 4, 9,52, 3,12,70, 3, 9, 7, 3,12,71, 3,12,73, 4,13,28, + 3,12,81, 4, 9,54, 3,12,72, 4, 9,50, 4,13,18, 4,13,17, 3,12,74, 3,12,69, + 0, 0, 0, 3,17,20, 3,17,10, 3,21,91, 3,17,17, 3,17,26, 4,13,27, 3,17,13, + 3,17,11, 4,17,92, 4,18, 1, 4,17,91, 3,22,12, 6,32,18, 4,18, 5, 3,22,15, + /* plane 0, page 58 */ + 0, 253, /* first, last */ + 3,22,16, 4,17,89, 3,21,94, 4,17,81, 3,22, 5, 4,17,94, 4,17,90, 3,27,75, + 3,22,10, 4,23,78, 4,23,66, 3,22, 1, 4,29,37, 3,33,17, 4,23,68, 3,27,74, + 4,23,75, 4,23,72, 4,23,69, 3,27,76, 3,27,73, 4,23,80, 4,23,65, 3,27,78, + 0, 0, 0, 4,29,48, 4,29,47, 3,33,23, 4,29,44, 4,29,42, 3,33,21, 3,33,27, + 4,29,40, 4,29,46, 3,33,28, 3,33,42, 3,33,35, 3,33,31, 3,33,39, 3,33,32, + 3,33,38, 3,33,33, 3,33,25, 0, 0, 0, 0, 0, 0, 4,35,56, 4,35,65, 6,61,18, + 3,38,89, 3,39,14, 3,39,13, 4,35,54, 3,38,92, 3,39, 7, 3,39,15, 4,35,60, + 3,38,87, 5,38, 5, 3,38,93, 4,41,85, 3,44,22, 4,35,68, 5,38, 3, 3,39,11, + 3,39,12, 0, 0, 0, 0, 0, 0, 4,42, 4, 3,44,19, 7, 3,26, 4,41,89, 4,41,90, + 4,41,86, 4,42, 8, 4,42, 2, 5,45,26, 4,41,94, 5,45,30, 3,44,28, 0, 0, 0, + 4,42, 3, 0, 0, 0, 3,48,84, 4,54,25, 4,48,37, 3,48,83, 3,48,78, 3,48,88, + 3,48,82, 3,48,81, 3,52,69, 3,52,74, 3,52,72, 3,52,67, 3,52,70, 0, 0, 0, + 4,59,13, 3,55,73, 4,59,18, 4,59,16, 4,59,14, 3,55,79, 3,55,81, 4,59,17, + 3,55,72, 4,59,15, 3,55,82,15,62,83, 3,58,29, 3,58,30, 0, 0, 0, 4,67,39, + 3,60,32, 4,67,38, 5,80, 4, 3,62,18, 4,70,32, 3,64,17, 4,74,41, 4,74,40, + 0, 0, 0, 5,89,10, 4, 6,59, 4,13,32, 4,13,31, 4,18, 7, 4,29,52, 4, 4,32, + 3, 6,26, 4, 6,62, 4, 6,63, 0, 0, 0, 4, 9,61, 3,12,85, 0, 0, 0, 3,17,30, + 4,13,34, 6,24,11, 0, 0, 0, 3,22,19, 4,18, 8, 3,22,21, 4,18,12, 4,23,89, + 0, 0, 0, 4,23,85, 4,23,88, 4,23,87, 0, 0, 0, 4,23,86, 5,24,92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,27,87, 0, 0, 0, 4,29,60, 4,29,57, 4,29,59, 3,33,44, + 4,35,70, 5,38,16, 5,38,14, 4,35,73, 4,42,11, 4,42,10, 4,42, 9, 0, 0, 0, + 4,48,41, 4,48,44, 0, 0, 0, 3,55,83, 4,59,26, 4,67,44, 4,70,35, 3, 6,27, + 6,24,12, 3,33,47, 0, 0, 0, 0, 0, 0, 3, 9,26, 4, 9,65, 3,17,33, 3,25,11, + 3,27,88, 4,42,14, 4,54,30, 4,74,43, 4, 9,66, 0, 0, 0, 4,13,41, 6,24,16, + 6,41,65, 6,61,49, 5,45,43, 3, 3,81, 6,11,80, 6,24,20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,22,27, 3,22,30, 0, 0, 0, 4,29,69, 4,42,16, 4,42,17, + 4, 2,88, 4, 2,89, 4, 4,35, 3, 6,28, 3, 6,31, 3, 6,30, 0, 0, 0, 3, 6,32, + 3, 9,31, 3, 9,29, 4, 6,67, 5, 9,47, 4, 9,67, 3,12,91, 4, 9,68, 4, 9,69, + 3,12,88, 3,13, 6, 0, 0, 0, 0, 0, 0, 6,17,71, 4,13,44, 4,18,27, 4,13,43, + 0, 0, 0, 3,17,39, 6,24,23, 3,17,42,15,15,78, 0, 0, 0, 4,13,45, 6,32,49, + 4,18,22, 4,18,26, 4,18,23, 3,22,35, 6,32,47, 3,28, 2, 4,23,94, 3,27,90, + 3,27,91, 4,24, 5, 3,28, 7, 4,24, 2, 6,41,83, 3,28, 1, + /* plane 0, page 59 */ + 1, 255, /* first, last */ + 6,51,29, 5,31,66, 3,33,50, 3,33,55, 3,33,58, 3,33,53, 3,33,51, + 3,33,60, 3,33,56, 4,29,72, 4,29,71, 3,33,52, 3,39,24, 4,35,78, 3,39,18, + 3,39,22, 0, 0, 0, 5,45,51, 4,42,18, 3,44,34, 3,44,37, 0, 0, 0, 4,48,50, + 4,48,49, 3,49, 1, 5,45,48, 3,48,91, 3,48,92, 4,48,51, 7,14,58, 0, 0, 0, + 3,52,83, 3,52,78, 4,54,32, 4,59,32, 0, 0, 0, 4,59,33, 4,59,31, 7,31,86, + 0, 0, 0, 3,58,32, 3,58,33, 3,60,36, 3,63,44, 3,63,45, 5,85,78, 5,85,77, + 3, 3,84, 4,48,54, 3,52,84, 3, 9,36, 3,17,46, 5,14, 5, 3,22,41, 0, 0, 0, + 3,28, 8, 4,26,35, 0, 0, 0, 5,38,37, 5,45,56, 0, 0, 0, 0, 0, 0, 3,49, 5, + 0, 0, 0, 3, 3,86, 3, 6,35, 4, 4,40, 3, 6,38, 0, 0, 0, 0, 0, 0, 3, 9,43, + 3, 9,38,15, 7,44, 3, 9,48, 3, 9,45, 5, 6,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,13, 8, 3,13,12, 4, 9,79, 4, 9,76, 3,13, 9, 0, 0, 0, 0, 0, 0, + 4,13,55, 4,13,49, 4,13,52, 4,13,56, 3,17,50, 5,14,11, 4,13,50, 4,13,59, + 3,17,53, 4,13,54, 3,17,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,22,57, 4,18,35, 3,22,42, 3,22,47, 5,18,89, 4,18,34, 4,18,38, 4,18,33, + 4,24,20, 3,22,56, 3,22,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,24,15, 3,28,14, 4,24,12, 3,28,31, 3,28,16, 4,24,10, 5,25,19, 4,24,13, + 3,28,12, 5,25,25, 4,24,21, 3,28,21, 4,24,23, 3,28,22, 3,28,35, 3,28,11, + 3,28,13, 0, 0, 0, 0, 0, 0, 4,29,88, 3,33,81, 3,33,70, 3,33,80, 4,29,75, + 4,29,78, 4,29,79, 3,33,76, 3,33,73, 3,33,68, 4,29,77, 3,33,62, 4,29,85, + 3,33,66, 3,33,67, 3,33,90, 3,33,65, 3,33,63, 4,36, 3, 4,29,86, 3,33,64, + 0, 0, 0, 3,34,58, 0, 0, 0, 3,33,71,15,40,53, 4,36, 4, 4,35,85, 4,36, 1, + 4,35,92, 3,39,31, 4,35,88, 4,35,83, 3,39,33, 4,35,84, 3,39,42, 4,35,93, + 4,35,94, 4,35,90, 4,36, 2, 3,39,47, 3,39,32, 4,36, 5, 4,35,81, 5,38,43, + 3,39,41, 4,29,82, 3,39,48, 0, 0, 0,15,40,50, 0, 0, 0, 0, 0, 0, 3,44,46, + 5,45,77, 4,42,26, 3,44,44, 5,45,65, 3,44,51, 4,42,23, 4,42,22, 3,44,61, + 3,44,56, 7, 3,79, 4,42,24, 4,42,34, 3,44,58, 3,44,60, 3,44,40, 3,44,53, + 3,49,35, 0, 0, 0, 0, 0, 0, 3,49,34, 4,48,64, 4,48,58, 3,49,23, 3,49,16, + 4,48,57, 4,42,25, 3,49,31, 3,49,10, 3,49,29, 4,54,41, 3,49,19, 3,49,25, + 3,44,43, 4,48,62, 3,49,13, 4,48,68, 3,49,21, 3,49,20, 3,49,22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,53, 2, 4,54,40, 3,52,94, 3,53, 5, 3,52,93, 4,54,43, + 7,24,53, 5,59,72, 3,52,87, 3,53, 6,15,63, 9, 3,52,89, 3,53, 8, 4,59,40, + 4,59,36, 3,55,92, 4,59,42, 4,59,41, 0, 0, 0, 0, 0, 0, 4,63,79, 4,63,83, + /* plane 0, page 60 */ + 0, 255, /* first, last */ + 3,58,41, 4,63,80, 4,63,78, 4,63,82, 4,63,85, 3,58,44, 3,58,43,15,66,51, + 3,58,42, 3,60,44, 3,60,38, 4,67,49, 4,67,47, 3,60,40, 3,60,45, 4,67,52, + 3,60,43, 3,60,37,15,69,30, 0, 0, 0, 5,80, 7, 3,62,22, 3,60,42, 3,63,48, + 4,72,78, 3,64,21, 3,64,19, 3,64,20, 0, 0, 0, 5, 4,40, 6, 8,16, 4, 6,77, + 5, 6,54, 4, 6,80, 4, 6,76, 4,13,64, 4, 9,80, 4, 9,81, 6,17,88, 4, 9,84, + 4, 9,83, 5,14,14, 4,13,61, 4,13,65, 4,13,66, 4,13,62, 3,22,65, 4,18,40, + 4,18,41, 6,32,78, 4,24,27, 4,24,25, 3,28,38, 5,25,35, 4,24,28, 6,24,68, + 0, 0, 0, 4,30, 1, 4,29,92, 4,29,91, 4,29,93, 4,29,94, 4,30, 2, 3,39,50, + 6,61,87, 4,36,10, 4,42,44, 3,44,72, 4,48,70, 4,48,71, 4,54,47, 4,54,46, + 3,53,10, 3,53,12, 4,63,87, 7,46, 2, 4,72,81, 5,85,87, 5,89,15, 6, 5, 5, + 0, 0, 0, 0, 0, 0, 3,13,30, 0, 0, 0, 3,11,91, 3,28,40, 4,24,31, 5,38,63, + 3,56, 4, 4, 2,92, 3, 9,55, 5, 6,66, 4, 6,85, 0, 0, 0, 3,13,31, 3,13,33, + 3,13,32, 3,17,73, 3,22,67, 4,18,42, 4,24,37, 4,24,36, 4,24,38, 4,24,34, + 3,28,42, 0, 0, 0, 3,34, 3, 4,30, 3, 4,30, 4, 3,34, 4, 0, 0, 0, 4,36,18, + 5,38,64, 4,36,19, 4,36,16, 4,42,48, 4,42,47, 4,48,75, 4,48,74, 0, 0, 0, + 4,54,49, 4,67,53, 3,60,46, 5,85,88, 5, 4,46, 4, 6,88, 4,13,68, 3,17,75, + 4,18,47, 4,24,41, 4,24,42, 4,24,43, 3,34, 5, 4,36,21, 3,49,39, 3,49,40, + 4,48,78, 4,54,51, 3,56, 5, 4, 9,91, 3, 3,91, 4, 6,89, 3, 9,59, 4, 6,90, + 0, 0, 0,15, 7,59, 3,13,35, 4,13,70, 4,18,50, 4,18,52, 4,18,51, 4,18,53, + 3,22,71, 4,13,71, 4,18,49, 5,25,59, 3,28,44, 4,24,47, 4,24,44, 4,30, 9, + 3,34, 7, 4,30, 8, 4,30, 7, 4,36,31, 4,36,24, 4,36,25, 4,36,26, 5,38,72, + 4,36,28, 0, 0, 0, 4,48,79, 4,48,81, 4,48,82, 3,49,41, 0, 0, 0, 4,59,48, + 4,59,47, 3,58,48, 4,77,55, 4,13,74, 3, 9,60, 3,22,72, 3,44,73, 3,49,42, + 4, 1,47, 3, 2,54, 3, 2,53, 3, 4, 2, 5, 1,84, 4, 3, 2, 3, 6,52, 0, 0, 0, + 3, 6,47, 4, 4,47, 3, 6,61, 6, 8,41, 3, 6,58, 4, 4,49, 3, 6,43, 6, 8,42, + 6, 8,36, 0, 0, 0, 3, 6,56, 3, 9,65, 3, 9,63, 3, 9,62, 3, 9,66, 3, 9,64, + 4, 6,94, 3, 9,72, 3, 9,70,15, 7,70, 0, 0, 0, 0, 0, 0, 3,13,36, 5,10, 4, + 4, 7, 2, 3,13,52, 5, 9,91, 5, 9,92, 4, 9,94, 3,13,54, 3,13,44,15,16,41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24,82, 3,17,80, 3,17,81, 4,13,75, + 6,25,19, 3,17,84, 4,13,76, 3,22,73, 3,18, 4, 3,18, 3, 3,17,94, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,17,85, 4,18,55, 3,22,81, 4,18,67, 4,18,68, + 3,22,78, 4,18,62, 3,23, 2, 3,22,77, 3,28,47, 3,22,94, 4,18,56, 4,18,72, + /* plane 0, page 61 */ + 0, 255, /* first, last */ + 5,25,62, 4,18,58, 4,18,60, 6,33,11, 5,19,29, 3,28,62, 3,22,91, 3,28,63, + 3,22,83, 6,33,33, 3,22,88, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,22,19, 4,24,49, + 4,24,54, 3,28,69, 4,24,50, 3,28,57, 4,24,57, 3,28,74, 3,28,71, 3,28,53, + 4,24,55, 4,24,58, 3,28,51, 3,28,55, 3,28,65, 3,34,11, 6,42,77, 0, 0, 0, + 15,28,35,15,28,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,30,23, 3,34,12, 3,34,23, + 3,34,21, 3,34,40, 3,34,24, 4,30,16, 4,30,25, 4,30,13, 3,34,34, 4,30,24, + 3,34,20, 3,34,28, 4,30,28, 3,34,15, 3,34,33, 5,32, 7, 4,30,15, 4,30,18, + 3,34,18, 0, 0, 0, 0, 0, 0, 3,34,35, 3,39,53, 4,36,41, 3,39,64, 6,62,27, + 3,39,57, 6,52,48, 3,39,56, 4,36,38, 4,36,45, 4,36,42, 6,62,32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,44,78, 4,42,63, 4,42,65, 3,44,79, 3,44,92, 4,42,72, + 4,42,61, 3,44,77, 4,42,57, 3,44,82, 5,38,88, 7, 4,65, 3,44,80, 4,48,84, + 3,49,43, 3,44,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,48,87, 4,48,93, 5,53,22, + 4,48,86, 3,49,47, 3,49,46, 4,48,90, 5,53,13, 3,49,51, 3,49,55, 4,48,91, + 4,54,54, 3,49,49, 3,49,44, 4,48,88, 3,49,50, 4,42,66, 5,53,14, 3,53,18, + 3,53,24, 4,54,62, 4,54,64, 3,53,20, 4,54,56, 3,53,14, 4,54,55, 4,54,60, + 3,53,27, 4,54,57, 4,54,59, 3,53,19, 0, 0, 0, 4,59,54, 4,59,52, 4,59,58, + 4,59,55, 4,59,64, 0, 0, 0, 0, 0, 0, 4,63,91, 4,63,93, 4,59,59, 4,63,89, + 3,58,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,60,48, 4,67,58, 4,67,62, 4,67,59, + 0, 0, 0, 3,60,50, 4,70,41, 5,80,30, 4,70,42, 4,70,44, 4,72,83, 3,62,25, + 3,62,24, 0, 0, 0, 3,63,49, 4,74,46, 3,64,24, 0, 0, 0, 4,75,77, 4,75,78, + 3,65,70, 3, 4,10, 0, 0, 0, 4, 4,50, 3, 6,65,15, 4,78, 3, 9,78, 4, 7, 7, + 3, 9,88,15, 7,78, 3, 9,83, 3,13,71, 3,13,57, 3,13,70, 3,13,65, 3,13,64, + 3,13,59, 0, 0, 0, 4,10, 7, 3,18,14, 4,13,83, 3,18,18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,23,11, 3,23,10, 3,23,20, 4,18,81, 0, 0, 0, 4,18,86, 4,18,80, + 4,18,87,15,22,40, 3,28,86, 4,24,69, 4,24,65, 3,28,85, 4,24,66, 4,24,68, + 4,24,64, 3,27, 3, 3,28,94, 3,28,80, 0, 0, 0, 3,28,88, 3,34,52, 3,34,45, + 3,34,54, 4,30,43, 3,34,42, 3,34,53, 4,30,40, 4,30,38, 4,30,41, 6,52,52, + 3,34,43, 3,34,48,15,34,88,15,35,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,36,57, + 3,39,83, 3,39,73, 6,52,71, 4,36,54, 4,36,58, 4,36,60, 3,39,81, 0, 0, 0, + 15,41,56, 0, 0, 0, 0, 0, 0, 3,45, 6, 3,45, 3, 3,45,11, 3,45, 1, 3,45, 7, + 4,42,74, 0, 0, 0, 0, 0, 0, 4,49, 5, 3,49,61, 3,49,59, 4,49,11, 3,49,63, + 3,49,65, 4,49, 4, 0, 0, 0, 3,49,68, 3,49,69, 0, 0, 0, 3,53,29, 4,54,66, + /* plane 0, page 62 */ + 0, 255, /* first, last */ + 3,53,31, 3,53,36, 7,25, 6, 3,55,49, 3,56,12, 4,54,68, 0, 0, 0, 0, 0, 0, + 3,60,58, 3,58,57, 3,60,52, 3,60,59, 4,67,63, 4,70,46, 5,83,55, 4,74,48, + 3,64,26, 3,65,90, 4, 7,12, 3, 9,90, 3,23,56, 3,39,84, 3,13,74, 4,13,86, + 3,23,22, 4,24,75, 3, 9,91, 4,10,12, 4,24,76, 3, 9,93, 3, 9,94, 5,14,51, + 6,25,32, 4,13,90, 4,36,63, 7,25,13, 4,59,68, 4,70,48, 3, 1,74, 3,18,19, + 4, 3, 6, 3, 6,69, 4, 4,53, 6,12,81, 4, 7,19, 5, 6,87, 4, 7,18, 4, 7,15, + 3,13,76, 3,13,79, 4,10,14, 3,13,78, 0, 0, 0, 3,18,20, 3,18,21, 4,13,93, + 4,13,92, 4,18,90, 5,19,45, 4,18,89, 4,18,94, 3,23,24, 6,33,70, 0, 0, 0, + 3,23,23, 4,24,80, 4,24,82, 4,24,83, 4,36,67, 6,52,88, 4,30,46, 3,34,62, + 0, 0, 0, 4,36,66, 4,36,64, 4,36,68, 4,42,79, 4,42,78, 4,42,82, 4,42,81, + 4,42,83, 4,49,14, 4,49,16, 4,49,15, 4,54,71, 3,53,38, 3,53,39, 4,59,70, + 4,59,69, 4,64, 4, 7,51,75, 4,74,49, 4, 7,20, 4, 4,57, 3, 6,77, 4, 4,54, + 3, 6,76, 6,12,85, 4, 7,25, 5, 7,14, 3,10, 9, 3,10, 4, 3,10, 5, 4, 7,26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,10,18, 4,10,20, 4,10,21, 3,13,82, 6,18,71, + 0, 0, 0, 3,18,23, 5,14,60, 4,14, 1, 4,13,94, 4,14, 2, 4,14, 6, 6,33,77, + 4,14, 7, 5,19,49, 4,19, 8, 6,33,85, 4,19, 9, 4,19, 5, 4,19,11, 4,19, 7, + 4,19,14, 4,24,89, 4,24,87, 3,29,12, 4,24,91, 6,43,35, 0, 0, 0, 4,36,69, + 4,30,52, 4,36,70, 4,30,51, 3,34,64, 4,30,50, 0, 0, 0, 4,36,74, 6,62,78, + 4,36,73, 4,36,72, 4,36,71, 3,39,86, 4,24,90, 4,42,91, 4,42,86, 4,42,90, + 4,42,92, 0, 0, 0, 7,15,84, 4,49,18, 4,49,20, 3,53,40, 4,54,74, 4,54,75, + 4,59,71, 5,72,27, 0, 0, 0, 4,67,69, 4,67,70, 4,67,71, 4,67,67, 4,75,79, + 3, 4,14, 4, 3, 9, 3, 4,16, 3, 4,17, 3, 6,81, 3, 6,79, 3, 6,80, 0, 0, 0, + 3,10,14, 3,13,86, 6,13, 1, 3,10,16, 4, 7,27, 3,10,17, 0, 0, 0, 3,13,93, + 3,18,26, 4,10,23, 4,10,24, 0, 0, 0, 0, 0, 0,15,12,18, 0, 0, 0, 4,19,15, + 3,18,35, 3,18,36, 3,18,27, 4,19,16, 3,18,37, 0, 0, 0, 0, 0, 0,15,17, 7, + 3,18,34, 3,23,31, 3,23,34, 3,23,33, 4,19,19, 3,23,30, 3,23,35, 0, 0, 0, + 0, 0, 0, 3,29,20, 4,24,93, 5,26,13, 3,34,67, 3,29,17, 3,29,16, 3,34,76, + 0, 0, 0,15,22,57,15,29,27, 0, 0, 0, 0, 0, 0, 4,30,57, 3,34,69, 3,34,73, + 5,32,46, 3,34,82,15,35,41,15,35,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,40, 4, + 7, 5,23, 0, 0, 0, 0, 0, 0, 4,43, 2, 4,43, 1, 3,45,23, 3,45,28, 3,45,19, + 3,45,24, 3,45,20, 3,45,18, 0, 0, 0, 0, 0, 0, 3,49,72, 5,53,61, 4,49,23, + 3,49,73, 3,53,42, 4,54,79,15,53,90,15,54, 2, 3,53,46, 4,59,73, 3,53,44, + /* plane 0, page 63 */ + 1, 255, /* first, last */ + 15,59,13, 3,56,17, 0, 0, 0, 4,64,10,15,66,88,15,66,91, 3,60,65, + 0, 0, 0, 4,10,25, 4,10,26, 5,14,66, 4,14,11, 4,19,21, 4,19,20, 4,24,94, + 4,36,80, 4,36,81, 4,36,79, 4,43, 3, 4,43, 4, 4,59,76, 4,77,58, 4, 4,62, + 5, 7,18, 3,10,20, 3,14, 3, 4,10,29, 3,18,42, 3,18,43, 4,14,13, 3,18,41, + 4,14,12, 4,19,27, 4,25, 1, 4,19,26, 4,19,24, 4,19,25, 4,19,23, 4,25, 3, + 4,25, 6, 4,19,28, 4,25, 4, 4,30,66, 4,30,65, 4,30,61, 4,30,64, 3,34,86, + 4,30,67, 5,39,40, 4,36,83, 4,36,86, 4,36,84, 4,36,88, 4,36,87, 4,36,85, + 4,43, 5, 4,43, 7, 4,43, 6, 4,49,31, 3,49,79, 4,49,34, 4,49,33, 4,54,82, + 4,54,83, 3,53,49, 4,54,85, 3,53,48, 4,54,81, 0, 0, 0, 4,59,79, 4,59,78, + 4,64,12, 4,64,11, 4,72,85, 4,75,80, 4,74,51, 3,18,44, 4,30,69, 0, 0, 0, + 3,45,31, 4,54,88, 3,29,32,15,48,46, 0, 0, 0, 5, 4,67, 6, 8,66, 3, 6,82, + 4,10,33, 3,14, 9, 4,10,35, 4,14,15, 4,14,17, 5,19,68, 3,23,40, 3,29,33, + 4,25, 8, 4,30,73, 3,34,89, 3,34,90, 4,30,72, 4,36,89, 3,45,32, 4,43,10, + 4,43, 9, 4,49,36, 5,60,15, 4,59,82, 4,59,83, 4,64,14, 4,67,73, 4,74,52, + 4,30,77, 4, 4,65, 4, 4,66, 0, 0, 0, 5, 7,23, 3,10,28, 0, 0, 0, 4,10,38, + 3,14,13, 4,10,41, 3,14,12, 3,14,14, 0, 0, 0, 3,18,54, 4,14,23, 4,14,27, + 4,14,21, 4,14,22, 3,18,52, 4,14,19, 4,14,31, 4,14,25, 6,25,75, 3,18,51, + 4,14,24, 4,14,26, 5,19,77, 4,19,34, 3,23,44, 4,19,32, 4,14,28, 4,19,31, + 4,19,37, 3,23,43, 4,19,35, 4,25,18, 4,25,19, 3,29,38, 3,29,43, 6,43,58, + 3,29,41, 4,25,22, 5,32,64, 4,25,15, 4,25,16, 3,29,40, 3,29,42, 5,26,27, + 4,25,21, 4,25,24, 4,30,84, 5,32,68, 4,30,79, 4,30,88, 4,30,78, 4,30,86, + 4,30,83, 4,30,90, 4,37, 4, 4,37, 8, 6,63,13, 3,40,10, 3,40,12, 4,37, 3, + 4,37, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,56, 4,43,24, + 3,45,34, 4,43,23, 4,43,21, 4,43,19, 4,43,15, 7, 5,60, 4,43,14, 5,39,57, + 0, 0, 0, 4,43,27, 7,16,22, 4,49,40, 4,49,41, 3,49,85, 4,49,46, 4,49,42, + 4,49,48, 4,55, 6, 4,55, 2, 4,59,91, 4,59,87, 7,32,75, 4,55, 5, 7,32,71, + 0, 0, 0, 4,64,18, 4,64,15, 4,64,16, 0, 0, 0, 4,70,56, 4,70,57, 3,62,32, + 5,83,60, 4,74,53, 4,75,82, 4,75,81, 3,66,13, 3, 6,85, 3,14,16, 3,18,56, + 0, 0, 0, 3,23,46, 3,35, 2, 3,40,13, 5,39,59, 5,46,57, 4,49,54, 4,64,23, + 4,70,59, 4,76,83, 4, 7,38, 4,10,46, 3,14,17, 4,14,38, 4,14,37, 4,19,39, + 4,19,40, 4,25,26, 6,53,50, 4,37,16, 4,37,18, 3,40,15, 3,45,35, 4,43,29, + 4,49,55, 4,59,94, 4,67,76, 4, 7,40, 4,10,49, 4,10,48, 4,14,39, 4,14,41, + /* plane 0, page 64 */ + 0, 255, /* first, last */ + 3,18,57, 4,19,43, 3,23,47, 3,29,46, 3,35, 3, 5,32,79, 3,40,18, 4,49,58, + 4,37,22, 4,55,12, 4,64,24, 3,63,24, 0, 0, 0, 4,78,40, 3, 6,89, 4, 4,69, + 4, 7,46, 4, 7,47, 4, 7,45, 4, 7,44, 4, 7,42, 4,10,51, 4,10,54, 4,10,55, + 4,10,52, 4,10,56, 5,10,77, 4,10,58, 6,19,24, 0, 0, 0, 3,14,20, 4,14,50, + 3,18,61, 3,18,70, 3,18,64, 4,14,45, 3,18,65, 0, 0, 0, 0, 0, 0, 5,19,86, + 4,19,48, 4,19,49, 3,23,54, 3,23,52, 4,19,50, 4,19,46, 4,19,45, 3,29,48, + 4,25,41, 3,29,52, 4,25,42, 3,29,53, 4,25,37, 4,25,40, 4,25,31, 4,25,33, + 4,25,43, 4,25,38, 4,25,45, 4,25,39, 4,25,35, 4,31, 2, 4,25,44, 4,25,34, + 0, 0, 0, 4,31,16, 4,31,13, 3,35, 4, 4,31, 5, 4,31, 6, 4,31, 7, 4,31,11, + 4,31,12, 6,53,65, 5,39,65, 4,37,25, 4,37,33, 4,37,28, 4,37,23, 3,40,23, + 4,37,35, 4,37,38, 4,37,31, 4,37,36, 3,40,26, 4,37,24, 0, 0, 0, 3,45,37, + 4,43,37, 4,43,34, 4,43,36, 4,43,39, 4,43,35, 4,43,45, 3,45,39, 5,46,64, + 4,43,31, 0, 0, 0, 3,49,87, 3,49,88, 4,49,60, 4,49,64, 3,49,92, 3,49,90, + 4,49,61, 4,49,68, 0, 0, 0, 4,55,18, 4,55,14, 4,55,17, 4,55,15, 3,53,58, + 4,55,16, 4,55,19, 4,55,20, 5,54, 2, 5,66,73, 4,60, 7, 4,60, 9, 4,60,10, + 4,60, 5, 3,56,23, 4,60, 6, 4,67,80, 4,67,78, 4,67,81, 4,67,79, 4,70,61, + 3,62,33, 4,72,88, 4,74,55, 4,72,90, 4,76,85, 4,78,45, 4, 7,49, 4,10,63, + 4,19,55, 4,37,42, 3,53,61, 0, 0, 0, 4,55,24, 4,67,84, 4,75,85, 4,14,55, + 4,14,56, 4,19,58, 4,19,57, 6,44,11, 4,31,19, 4,37,44, 3, 4,18, 3, 6,90, + 4, 7,51,15, 8,90, 4,10,68, 3,14,24, 4,10,66, 3,14,28, 3,13,27, 4,14,63, + 4,14,60, 4,14,66, 5,15,20, 3,23,59, 3,18,74, 3,18,75, 4,14,62, 4,14,65, + 0, 0, 0, 4,19,62, 4,19,65, 3,23,60, 4,19,63, 3,23,58, 4,19,64, 3,23,62, + 3,29,59, 5,26,57, 6,44,19, 4,25,56, 3,29,56, 0, 0, 0, 4,25,51, 4,31,32, + 4,31,25, 4,31,31, 3,35,15, 4,31,28, 3,35,18, 4,31,29, 3,35,12, 4,31,30, + 4,31,24, 4,31,26, 4,31,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,31,34, + 4,37,46, 3,40,35, 4,37,49, 3,40,33, 4,37,45, 4,37,53, 4,37,47, 5,39,86, + 0, 0, 0, 4,43,60, 4,43,56, 4,43,54, 4,43,53, 4,43,62, 7, 6, 4, 4,43,59, + 3,50, 3, 3,49,93, 4,49,76, 3,49,94, 7,16,57, 5,54,19, 4,49,80, 0, 0, 0, + 4,49,77, 4,55,27, 4,55,33, 3,40,34, 4,55,25, 3,53,62, 3,53,63, 4,55,31, + 0, 0, 0, 3,56,33, 4,60,13, 3,56,29, 4,60,17, 4,60,15, 4,60,14, 0, 0, 0, + 4,64,31, 7,46,60, 3,60,67, 4,67,86, 4,67,85, 4,70,63, 4,70,64, 4,70,65, + 4,72,92, 4,72,91, 3,64,85, 3,65,71, 0, 0, 0, 3,14,31, 4,10,71, 4,10,70, + /* plane 0, page 65 */ + 0, 254, /* first, last */ + 6,19,40, 3,18,78, 4,14,68, 3,18,81, 3,23,68, 4,19,67, 4,19,66, 3,29,65, + 3,29,64, 4,25,57, 0, 0, 0, 4,31,37, 4,31,36, 3,35,26, 3,35,27, 3,35,30, + 4,31,39, 3,35,28, 3,35,31, 3,40,38, 5,40, 4, 3,40,41, 0, 0, 0, 0, 0, 0, + 5,46,86, 3,45,46, 4,49,86, 3,50, 5, 4,49,84, 4,49,85, 0, 0, 0, 4,55,34, + 3,56,38, 3,56,39, 3,58,68, 0, 0, 0, 4,70,67, 3,66,20, 5, 4,78, 3, 6,93, + 5, 7,38, 6,13,41, 4, 7,54, 3,10,32, 3,10,33, 3,10,35, 4,10,74, 4,10,79, + 4,10,75, 4,10,73, 4,10,76,15,12,77, 0, 0, 0, 0, 0, 0, 4,14,69, 3,18,85, + 3,18,90, 0, 0, 0, 6,34,70, 4,19,71, 4,19,70, 3,23,77, 4,19,69, 5,20,27, + 5,20,25, 4,19,74, 4,19,73, 4,19,75, 3,23,72, 4,19,77, 5,20,24, 3,23,78, + 15,23,27, 0, 0, 0, 4,19,68, 5,26,69, 4,25,62, 4,25,66, 3,29,71, 4,25,68, + 3,29,74, 4,25,67, 3,29,75, 4,25,65, 4,31,47, 3,35,32, 4,31,45, 3,35,37, + 4,31,44, 3,35,34, 4,31,43, 3,35,35, 4,37,55, 4,31,41, 5,33,17, 0, 0, 0, + 3,40,49, 3,40,42, 4,37,59, 3,40,51, 3,40,46, 4,37,58, 3,40,44, 4,37,56, + 6,63,75, 4,37,57, 0, 0, 0, 0, 0, 0, 4,43,69, 4,43,65, 3,45,52, 4,43,66, + 3,45,50, 7, 6,18, 3,45,56, 4,43,72, 4,43,70, 4,43,68, 3,45,57, 4,49,93, + 4,49,92, 3,50,11, 4,49,89, 4,49,88, 4,49,90, 3,50,13, 4,55,37, 3,53,67, + 4,55,39, 3,56,40, 7,33,14, 4,60,23, 4,60,21, 4,60,22, 0, 0, 0, 0, 0, 0, + 3,62,38, 4,67,89, 4,70,69, 7,56,44, 0, 0, 0, 4,70,68, 4,72,94, 4,73, 1, + 3,66,25, 4, 4,73, 6,13,46, 3,14,38, 3,14,37, 4,10,81, 4,10,82, 3,19, 1, + 3,18,94, 3,18,93, 4,19,79, 4,19,80, 3,23,79, 5,20,37, 4,19,82, 4,19,81, + 6,34,79, 3,29,76, 4,25,71, 3,29,77, 6,44,51, 3,29,78, 5,33,25, 4,31,51, + 4,31,50, 6,54, 7, 4,37,64, 6,63,88, 4,43,76, 5,47, 3, 0, 0, 0, 5,52, 4, + 4,50, 5, 4,50, 2, 4,50, 4, 7,16,79, 0, 0, 0, 3,53,69, 3,53,70, 4,55,44, + 4,55,45, 4,55,43, 4,55,47, 3,53,71, 4,60,25, 4,60,26, 4,64,40, 4,64,41, + 4,67,92, 4,73, 2, 3, 4,20, 3,10,38, 0, 0, 0, 4,10,86, 3,14,42, 3,19, 5, + 4,14,77, 3,19, 2, 0, 0, 0, 5,20,38, 3,29,79, 4,25,74, 3,35,40, 4,31,52, + 4,31,53, 4,31,58, 4,37,67, 4,55,50, 4,60,27, 3,58,72, 5,11, 1, 4,14,85, + 4,14,80, 3,19, 8, 4,14,87, 3,19, 9, 4,14,83, 4,14,82, 4,19,86, 4,19,93, + 3,23,84, 5,20,40, 4,19,87, 4,19,91, 3,23,85, 6,34,86, 4,19,88, 4,25,77, + 4,25,84, 4,25,81, 3,29,84, 4,31,59, 4,25,82, 3,29,90, 4,25,85, 3,29,83, + 4,25,79, 6,44,59, 6,44,54, 0, 0, 0, 0, 0, 0, 3,35,48, 4,31,70, 4,31,66, + 4,31,65, 3,35,50, 3,35,51, 4,31,61, 3,35,46, 4,31,64, 3,35,43, + /* plane 0, page 66 */ + 0, 255, /* first, last */ + 4,31,67, 5,40,38, 4,25,86, 4,37,69, 3,40,59, 4,37,74, 4,37,73, 3,40,63, + 4,37,78, 4,37,72, 3,40,57, 4,37,77, 4,37,70, 5,40,22, 4,43,91, 4,43,85, + 4,43,80, 3,45,65, 3,45,62, 4,44, 2, 3,45,71, 4,43,94, 3,45,66, 4,44,14, + 5,47,27, 3,45,68, 4,44,16, 4,44, 5, 4,44,13, 4,43,89, 5,47,18, 3,45,63, + 5,47,37, 4,44,12, 4,44, 7, 4,43,87, 3,45,70, 3,45,72, 4,44, 8, 5,47,22, + 0, 0, 0, 0, 0, 0, 4,50,20, 4,50,26, 3,50,17, 4,50,23, 4,50,11, 4,50,24, + 3,50,21, 4,50,25, 4,50,27, 4,50,22, 4,50,15, 4,50,29, 4,50, 9, 3,50,18, + 4,55,59, 5,60,77, 4,55,62, 4,55,58, 4,55,66, 5,60,93, 4,55,69, 4,55,51, + 3,53,76, 4,55,54, 4,55,56, 4,55,57, 5,60,94, 4,55,53, 5,61,16, 0, 0, 0, + 4,60,36, 4,60,47, 4,60,43, 4,60,48, 4,60,35, 3,56,42, 4,60,42, 3,58,76, + 4,60,34, 4,60,44, 7,33,31, 4,60,38, 4,60,41, 4,60,32, 5,67,20, 4,60,40, + 3,56,45, 3,56,43, 5,67,33, 4,64,54, 5,72,78, 3,58,74, 4,64,51, 5,72,70, + 3,58,77, 3,58,73, 3,58,75, 4,60,49, 0, 0, 0, 4,67,94, 4,70,73, 4,70,76, + 4,70,78, 3,62,42, 4,70,74, 3,62,45, 4,70,72, 4,70,77, 3,63,54, 5,80,65, + 4,73, 6, 4,73, 8, 4,74,61, 4,74,65, 4,74,60, 3,64,63, 4,75,86, 4,77,60, + 4,77,86, 7,69,61, 4,10,87, 3,19,15, 3,19,19, 6,35, 2, 4,20, 5, 5,20,57, + 3,23,92, 6,44,64, 4,25,91, 4,25,92, 3,29,93, 3,29,92, 4,25,93, 3,35,58, + 3,35,54, 3,35,55, 3,35,57, 3,35,59, 0, 0, 0, 3,40,67, 4,37,82, 3,40,68, + 3,40,69, 6,64,12, 3,40,70, 3,45,75, 3,45,76, 3,45,73, 3,45,74, 4,44,23, + 7, 6,55, 4,44,21, 3,50,22, 4,55,77, 3,53,83, 3,53,82, 4,55,73, 4,55,74, + 3,45,84, 4,55,75, 0, 0, 0, 5,67,46, 4,60,54, 3,56,50, 4,60,53, 4,60,52, + 5,67,52, 3,56,51, 3,58,80, 4,64,59, 4,64,61, 4,68, 3, 3,60,72, 7,52,26, + 5,80,80, 4,74,69, 5,86,25, 4,76,90, 3,65,37, 4, 7,60, 6,19,68, 3,14,55, + 3,14,53, 3,14,56, 4,14,88, 4,14,94, 3,19,21, 3,19,20, 4,14,92, 3,19,25, + 4,15, 1, 3,19,24, 4,14,93, 3,19,22, 3,19,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,20,14, 4,20, 6, 3,24, 3, 3,24,10, 4,20, 7, 4,20,16, 3,24,12, 4,20,13, + 4,20,11, 4,20, 9, 3,24, 8, 3,24,13, 3,24, 5, 3,30,22, 5,27,12, 3,30,13, + 3,30,18, 3,30, 7, 3,30,16, 3,30, 5, 6,44,81, 0, 0, 0, 3,30,17, 4,31,74, + 3,35,69, 3,35,75, 4,31,78, 4,31,83, 4,31,79, 3,35,65, 3,35,61, 3,40,76, + 4,37,85, 4,37,94, 4,37,89, 4,38, 1, 3,40,71, 3,35,63, 3,40,82, 3,40,85, + 4,38, 3, 5,40,52, 3,40,79, 3,46,10, 5,47,51, 4,44,30, 4,44,28, 4,44,32, + 3,45,91, 3,46, 1, 3,46,13, 3,45,86, 3,45,89, 4,44,26, 4,44,29, 4,44,31, + /* plane 0, page 67 */ + 0, 255, /* first, last */ + 3,45,90, 4,44,36, 5,47,52, 3,46, 6, 3,46, 3, 3,50,26, 4,50,41, 3,50,28, + 4,50,39, 3,50,29, 3,50,30, 0, 0, 0, 4,55,83, 3,53,88, 5,61,31, 3,53,86, + 5,61,38, 3,53,87, 4,55,78, 3,53,92, 3,53,91, 7,26,25, 4,60,66, 4,60,64, + 4,55,82, 3,56,55, 3,56,54, 3,57, 9, 4,64,70, 4,64,67, 4,64,72, 4,64,66, + 7,39,42, 3,58,83, 3,58,81, 5,77, 2, 3,60,73, 4,68, 4, 3,60,74, 3,60,75, + 3,62,47, 3,62,46, 4,73,10, 7,56,56, 3,63,57, 4,73,11, 4,74,70, 4,75,89, + 4,75,88, 7,63,19, 3,64,88, 4,76,92, 4,76,91, 4,77,87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,10,89, 4,15, 9, 3,24,15, 3,24,18, 5,20,64, 4,20,20, + 3,24,16, 4,20,19, 4,26, 8, 4,38, 5, 3,40,86, 4,50,46, 4,74,75,15, 1,39, + 3,10,45, 3,14,60, 3,14,59, 3,14,57, 4,10,91, 4,15,10, 6,26,75, 4,15,13, + 4,20,21, 4,31,85, 4,26,10, 3,35,76, 3,35,77, 5,33,69, 3,40,90, 3,40,91, + 0, 0, 0, 4,50,47, 4,55,85, 4,60,69, 4,64,77, 4,70,91, 4,75,91, 6,26,84, + 4,15,14, 3,17,31, 4,20,24, 4,20,22, 4,20,23, 6,35,28, 4,26,13, 4,26,17, + 4,26,16, 4,31,86, 3,40,94, 4,38, 7, 3,40,93, 4,38, 8, 3,40,92, 4,44,41, + 4,50,51, 3,50,33, 4,55,87, 4,60,74, 4,60,75, 4,73,12, 3,19,32, 3,19,33, + 4,20,26, 3,24,19, 4,20,27, 4,20,30, 4,20,28, 3,24,21, 3,24,20, 4,26,20, + 4,26,21, 5,27,26, 4,26,19, 3,35,80, 4,31,88, 3,35,81, 4,31,87, 3,35,79, + 3,41, 1, 4,38,10, 4,38, 9, 4,38,11, 4,50,53, 4,50,54, 3,56,62, 3,56,64, + 3,56,63, 3,60,78, 4,70,93, 0, 0, 0, 3,30,25, 3,30,26, 0, 0, 0, 4,11, 7, + 4,11, 8, 4,15,24, 4,11, 9, 3,24,24, 4,31,90, 0, 0, 0, 4,38,14, 4,38,13, + 4,38,15, 4,38,18, 4,38,16, 4,44,47, 0, 0, 0, 4,55,93, 4,55,90, 4,55,91, + 4,60,80, 4,71, 1, 4, 4,77, 3,19,38, 3,19,37, 3,24,26, 4,20,33, 4,26,25, + 5,33,80, 3,35,84, 4,38,22, 4,38,20, 4,38,21, 4,38,23, 3,41, 4, 3,46,19, + 4,44,50, 4,50,58, 3,50,34, 4,50,59, 4,56, 1, 4,56, 4, 4,56, 3, 4,56, 2, + 3,56,68, 4,68, 8, 3,63,60, 6,54,77, 4, 3,13, 6, 5,41, 4, 4,79, 4, 4,78, + 3,10,49, 6,27, 8, 3,10,53, 3,10,48, 4, 7,70,15, 8,50, 4, 7,66, 4, 7,71, + 4, 7,67, 4, 7,69, 5, 7,56, 3,10,58, 3,10,51, 0, 0, 0, 5,11,19, 4,11,15, + 4,11,10, 4,11,12, 3,14,66, 3,14,63, 6,19,93, 5,11,25, 3,19,49, 4,15,33, + 4,15,38, 4,15,39, 4,15,31, 6,27,17, 5,15,77, 0, 0, 0, 0, 0, 0, 3,24,38, + 4,20,44, 4,20,40, 3,24,36, 4,20,43, 4,20,50, 4,20,49, 4,20,42, 4,20,51, + 6,35,56, 3,24,32, 3,24,31, 3,24,35, 4,26,41, 4,26,26, 3,30,31, 4,26,37, + /* plane 0, page 68 */ + 0, 255, /* first, last */ + 5,27,45, 4,26,42, 4,26,33, 4,26,32, 4,26,34, 4,26,29, 0, 0, 0, 3,30,38, + 4,26,31, 4,26,36, 4,26,43, 6,41,94, 6,45,52, 6,54,86, 4,32, 7, 3,35,88, + 4,32,10, 4,32, 3, 4,32, 6, 3,35,90, 4,31,93, 4,32, 8, 3,36, 1, 4,32,12, + 3,35,93, 3,35,89, 5,20,74, 4,32, 5, 4,38,37, 4,38,30, 4,38,28, 4,38,29, + 4,38,31, 3,50,40, 4,38,34, 4,38,32, 4,38,27, 3,41, 9, 3,41, 8, 4,38,24, + 4,38,39, 4,38,33, 0, 0, 0, 4,44,61, 4,44,56, 4,44,62, 4,44,53, 4,44,60, + 6,64,79, 4,44,52, 4,44,59, 4,44,63, 5,34, 8, 4,50,67, 4,50,68, 3,50,38, + 3,50,37, 4,50,62, 4,50,65, 4,50,66, 4,50,70,15,49,53, 5,61,59, 4,56,11, + 4,56, 8, 4,56,12, 4,60,84, 3,56,70, 4,60,86, 3,56,71, 3,58,86, 4,64,84, + 4,64,83, 5,77,12, 4,68,10, 4,71, 2, 4,71, 4, 4,71, 3, 4,71, 5, 4,73,16, + 6,35,68, 7,34, 4, 3,11,36, 3,36, 4, 4,15,42, 4,20,56, 0, 0, 0, 4,44,67, + 4,50,75, 3,19,51, 3,19,52, 3,24,42, 4,44,68, 6,65, 1, 3,50,43, 3,62,52, + 4, 7,79, 4,11,19, 4,11,18, 3,14,71, 3,19,54, 4,15,48, 3,24,43, 6,35,81, + 6,35,80, 0, 0, 0, 3,30,42, 4,26,46, 4,26,47, 6,45,67, 0, 0, 0, 5,34,13, + 4,32,15, 4,38,47, 4,38,49, 4,38,48, 3,41,12, 6,65, 4, 5,41,12, 0, 0, 0, + 0, 0, 0, 3,46,30, 4,44,72, 4,44,69, 4,50,76, 4,50,77, 0, 0, 0, 4,56,16, + 4,56,20, 4,56,19, 3,54, 5, 3,54, 6, 5,61,71, 5,60,45, 4,56,18, 0, 0, 0, + 4,60,92, 4,68,13, 4,15,51, 4,20,60, 4,50,79, 4,50,78, 4,56,21, 4,60,93, + 4,73,19, 0, 0, 0, 6, 5,47, 3, 4,23, 3, 4,25, 3, 7, 7, 4, 4,86, 4, 4,93, + 3, 7,12, 0, 0, 0, 3,10,67, 3,10,71, 3,10,68, 3,10,74, 4, 7,82, 3,10,66, + 4, 8, 1, 4, 7,83, 3,10,69, 3,10,73, 5, 7,67, 3,10,65, 3,14,77, 4,11,22, + 3,14,80, 3,14,81, 3,14,76, 3,14,83, 3,14,85, 6,20,26, 0, 0, 0, 0, 0, 0, + 4,15,53, 3,19,65, 4,15,65, 3,19,68, 3,19,59, 3,19,62, 6,27,54, 3,19,61, + 4,15,62, 3,19,60, 3,19,69, 5,16, 1, 4,15,57, 4,15,68, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,19,64, 4,20,62, 4,20,76, 4,20,81, 3,24,58, 4,20,73, 4,20,69, + 3,24,54, 4,20,70, 4,20,66, 4,20,61, 4,20,67, 6,36,12, 3,24,44, 6,36, 8, + 5,21,10, 3,24,57, 3,24,60, 5,21, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,26,76, + 4,26,64, 4,26,63, 4,26,68, 4,26,57, 5,27,54, 4,26,59, 4,26,54, 3,30,51, + 4,26,62, 3,30,52, 3,30,49, 4,26,60, 4,26,65, 3,30,53, 6,46, 7, 3,30,44, + 0, 0, 0, 0, 0, 0,15,30,75, 0, 0, 0, 0, 0, 0, 4,32,16, 4,32,18, 4,26,69, + 3,36,23, 4,38,73, 4,32,39, 4,32,41, 4,32,26, 3,36,11, 3,36, 9, 3,36,20, + 4,32,40, 3,36,29, 4,32,44, 0, 0, 0, 4,38,69, 3,41,15, 4,38,55, 6,65,36, + /* plane 0, page 69 */ + 0, 255, /* first, last */ + 4,38,68, 3,41,17, 4,38,51, 5,41,28, 4,38,65, 3,41,16, 4,38,77, 4,38,64, + 4,38,60, 3,41,20, 5,41,27, 6,65,56, 3,41,23, 3,41,32, 3,46,35, 4,44,82, + 3,46,31, 4,44,80, 4,45, 4, 4,44,75, 3,46,33, 4,44,81, 3,46,51, 4,44,77, + 4,44,83, 3,46,39, 3,46,37, 3,46,54, 4,44,93, 3,50,49, 4,44,76, 3,46,42, + 4,44,78, 3,46,40, 3,46,53, 3,46,41, 5,48,38, 3,46,48,15,49,69,15,49,83, + 15,49,86, 4,45, 1, 4,44,79, 3,46,49, 4,44,87, 4,50,87, 4,50,91, 4,50,89, + 4,51,12, 4,51, 1, 4,50,86, 3,50,51, 4,51, 5, 3,50,55, 4,50,94, 3,50,45, + 4,51, 3, 4,50,90, 4,50,92, 4,50,82, 5,68,13, 3,50,44, 4,51, 2, 4,50,83, + 3,50,46, 4,51, 7, 0, 0, 0, 4,51,17, 4,38,71, 4,56,36, 4,56,28, 4,56,24, + 4,56,34, 5,61,89, 4,56,22, 4,56,27, 3,54,14, 3,54, 7, 4,56,29, 3,54,10, + 0, 0, 0, 3,54,15, 3,56,73, 4,60,94, 4,61,11, 3,56,77, 3,56,80, 3,56,74, + 3,56,81, 4,61, 3, 7,34,24, 4,61, 1,15,64,46, 7,27,18, 4,64,87, 3,60,83, + 3,59, 3, 4,64,88, 3,59, 1, 0, 0, 0, 3,59, 4, 7,41,51, 4,68,15, 4,68,20, + 3,60,93, 4,68,19, 3,60,84, 7,52,72, 3,60,89, 4,68,18, 4,68,24, 3,60,90, + 4,68,16, 3,60,85, 4,68,22, 4,71, 7, 3,62,57, 4,71, 8, 0, 0, 0,15,72,25, + 3,63,61, 4,73,23, 7,56,82, 3,64,33, 3,64,34, 5,88, 5, 4,75,93, 4,77,62, + 4,76,93, 3,65,74, 4,77,89, 4,77,91,15,76,76, 4,78,23, 4,78,22, 5,92,30, + 3,10,77, 4,11,30, 4,15,71, 3,19,71, 3,19,70, 3,19,72, 5,21,21, 3,24,66, + 5,27,80, 3,30,64, 3,36,33, 5,34,52, 5,34,51, 3,36,34, 3,36,35, 4,45, 6, + 4,51,22, 4,61,18, 5,68,27, 5,68,26, 4,68,26, 3, 7,14, 3,14,93, 3,15, 1, + 3,15, 2, 4,15,73, 4,15,75, 6,27,73, 3,24,72, 3,24,71, 4,20,92, 3,24,69, + 4,20,91, 4,20,89, 5,28, 6, 6,36,40, 0, 0, 0, 4,26,82, 3,30,71, 4,26,84, + 3,30,69, 5,27,84, 4,26,80, 4,26,77, 3,30,68, 3,30,70, 4,32,54, 4,32,55, + 3,36,43, 3,36,39, 4,32,59, 4,26,78, 4,32,61, 3,36,42, 0, 0, 0, 4,38,88, + 3,41,38, 4,38,82, 4,38,83, 4,38,81, 4,38,85, 3,41,39, 4,38,80, 4,38,86, + 6,65,73, 3,41,40, 4,38,91, 3,46,58, 3,46,60, 7, 8,34, 3,46,55, 3,46,56, + 4,45,16, 3,46,59, 4,38,89, 4,45,22, 4,45,15, 3,41,45, 0, 0, 0, 4,51,30, + 3,50,60, 7,18,83, 4,51,29, 4,56,45, 3,50,64, 7,18,85, 3,50,65, 5,62,18, + 4,56,55, 4,56,50, 3,54,23, 4,56,56, 4,56,47, 4,56,54, 3,54,24, 4,56,46, + 3,54,18, 4,56,52, 4,56,63, 3,54,21, 3,54,28, 0, 0, 0, 3,54,17, 4,61,27, + 5,62,21, 4,61,25, 3,56,82, 0, 0, 0, 4,65, 4, 5,73,33, 3,59,10, 4,65, 1, + 4,65, 5,15,67,78, 5,77,43, 0, 0, 0, 4,68,27, 4,68,28, 4,68,32, 4,68,30, + /* plane 0, page 70 */ + 0, 255, /* first, last */ + 4,68,33, 3,61, 6, 3,62,62, 4,71,16, 4,68,29, 4,73,30, 3,63,62, 3,63,64, + 3,64,36, 7,57, 5, 7,60,62, 4,74,88, 7,60,67, 3,65,40, 4,78,25, 3,15, 5, + 6,27,83, 3,24,73, 3,36,44, 4,39, 3, 4,45,23, 4,15,79, 4,26,88, 3,46,62, + 4,51,42, 3,59,14, 3,10,78, 0, 0, 0, 3,15, 8, 4,11,38, 0, 0, 0, 5,16,29, + 4,15,82, 5,16,25, 4,21,10, 4,26,90, 4,21,13, 4,21,14, 4,21,12,15,18,49, + 4,26,89, 3,30,81, 4,21,16, 3,30,78, 3,30,76, 3,30,75, 3,15,42, 4,32,66, + 4,39, 5, 6,56,11, 0, 0, 0, 3,41,51, 4,39,13, 5,41,76, 5,41,77, 4,32,70, + 4,39,17, 4,39, 7, 3,41,53, 4,32,64, 4,39,10, 4,39,14, 4,39, 6, 4,39,11, + 3,41,58, 3,41,48, 3,41,59, 4,45,28, 4,45,31, 4,45,26, 4,45,25, 4,45,34, + 4,45,32, 4,45,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,51,50, 4,51,53, + 4,51,54, 3,46,67, 4,51,47, 0, 0, 0, 4,56,67, 4,56,71, 3,54,37, 3,54,35, + 4,56,68, 3,54,30, 7,27,57, 3,54,36, 4,56,69, 3,54,33, 5,68,54, 4,61,42, + 4,61,40, 4,61,41, 4,61,36, 4,61,38, 4,65,10, 7,35, 2, 4,68,35, 7,48, 5, + 3,61, 7, 4,68,36, 3,62,63, 0, 0, 0, 4,74,91, 7,57,18, 3,64,90, 4,76, 6, + 3,64,89, 4,77,93, 5,11,39, 4,15,83, 4,21,17, 4,27, 1, 0, 0, 0, 3,19,89, + 3,19,88, 4,21,19, 4,21,21, 0, 0, 0, 4,27, 3, 5,28,21, 4,27, 2, 3,30,83, + 3,36,48, 3,36,49, 4,39,22, 4,39,24, 4,45,42, 4,45,40, 4,51,58, 4,51,59, + 5,56,18, 4,51,60, 5,62,35, 4,56,72, 4,56,73, 4,61,46, 4,61,48, 4,65,13, + 4,65,14, 3,59,16, 4,65,12, 4,65,16, 3,62,64, 0, 0, 0, 3,66,28, 4,21,26, + 3,36,51, 4,32,71, 3,36,50, 4,39,26, 4,45,49, 4,45,44, 4,45,46, 4,45,51, + 4,45,47, 4,51,68, 4,51,65, 4,51,66, 0, 0, 0, 4,56,75, 4,56,74, 5,68,67, + 4,65,17, 4,65,20, 4,68,38, 4,68,39, 0, 0, 0, 4,77, 2, 3,15,11, 5,11,41, + 3,15,13, 4,15,94, 3,19,93, 4,21,33, 3,24,92, 3,24,88, 5,21,55, 4,21,36, + 5,21,62, 3,25, 4, 3,25, 8, 3,25, 1, 4,21,31, 3,24,93, 3,25, 7, 4,21,35, + 5,21,61, 6,36,77, 3,25, 6, 5,21,54, 4,27,19, 3,30,89, 3,30,90, 4,27,22, + 4,27,21, 3,30,86, 3,30,91, 3,30,87, 4,27,20, 4,27,10, 4,27, 9, 4,27,11, + 3,31, 6, 6,46,75, 3,31, 5, 0, 0, 0, 3,36,55, 6,56,33, 3,36,62, 4,32,78, + 4,32,77, 4,32,76, 3,36,58, 3,36,63, 3,36,66, 4,39,29, 4,39,32, 4,39,42, + 4,39,28, 3,41,74, 4,39,38, 4,39,34, 3,41,65, 4,39,35, 3,41,73, 3,41,71, + 3,41,61, 4,45,57, 4,45,54, 4,45,60, 4,45,62, 3,46,72, 4,45,65, 4,45,56, + 4,45,59, 3,46,77, 4,45,63, 4,45,58, 3,46,75, 4,45,64, 7, 8,89, 4,45,53, + 3,46,81, 4,51,74, 3,50,76, 3,50,77, 7,19,45, 4,51,75, 3,54,39, 4,56,80, + /* plane 0, page 71 */ + 0, 255, /* first, last */ + 3,54,43, 3,54,44, 5,62,53, 4,61,58, 7,42, 5, 4,61,55, 4,61,59, 3,57, 2, + 3,57, 5, 4,61,52, 3,57, 7, 4,65,32, 5,73,50, 3,59,19, 4,65,27, 4,65,29, + 4,65,37, 5,73,49, 4,68,46, 3,61,13, 7,48,17, 4,68,44, 3,61,15, 4,68,40, + 3,61,17, 4,71,29, 4,71,31, 7,53,18, 4,71,30, 4,71,32, 4,71,25, 7,57,24, + 3,63,67, 4,73,40, 5,86,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,11,41, 4,16, 3, 6,46,90, 3,31, 7, 4,39,44, 3,46,87, + 4,56,85, 4,61,65, 4,73,44, 0, 0, 0, 4,21,42, 3,31, 8, 4,32,84, 4,39,46, + 4,39,47, 3,41,76, 4,45,68, 3,50,80, 4,51,83, 3,50,79, 4,51,82, 3,50,81, + 4,56,86, 4,56,87, 3,54,46, 4,71,36, 4,77, 4, 4,16, 5, 4,21,43, 6,37, 2, + 4,21,44,15,36,84, 4,45,71, 4,45,69, 4,45,72, 4,51,85, 4,51,87, 4,61,68, + 4,65,40, 4,65,38, 4,71,37, 3,63,69, 3,65,44, 4,77, 5, 4,21,48, 6,37, 4, + 3,25,15, 0, 0, 0, 4,27,30, 0, 0, 0, 3,41,78, 3,46,89, 3,46,88, 3,50,82, + 3,54,48, 3,57,12, 3,57,13, 4,65,42, 7,42,33, 3,59,23, 4,61,72, 4,21,49, + 4,21,52, 5,28,44, 4,27,31, 4,27,33, 3,31,14, 4,27,34, 6,47, 9, 4,27,35, + 4,33, 1, 3,36,70, 3,36,72, 5,42, 9, 6,66,74, 3,41,79, 3,46,91, 3,46,92, + 4,45,78, 4,45,76, 7, 9,22, 4,45,77, 0, 0, 0, 5,49,25, 3,47, 1, 3,50,84, + 4,51,93, 4,51,89, 4,51,91, 4,51,90, 3,50,86, 7,28,19, 4,56,90,15,64,90, + 4,51,94, 3,61,21, 3,62,68, 4,75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,16,43, 5,35,20, 4,39,57, 4,39,56, 4,71,40, 5,16,44, 4,16, 7, + 4,16, 8, 4,21,53, 4,21,54, 3,25,20, 3,25,22, 3,31,17, 4,27,37, 3,31,22, + 3,31,18, 5,28,50, 3,31,21, 4,27,40, 4,27,39, 4,33, 6, 4,33, 7, 5,35,28, + 3,36,74, 4,33, 8, 5,35,24, 4,39,58, 6,66,85, 4,39,59, 3,41,86, 5,42,20, + 3,41,87, 5,42,18, 0, 0, 0, 3,47, 7, 4,45,83, 4,45,81, 3,47, 4, 4,45,84, + 7, 9,29, 4,52, 6, 5,56,60, 5,56,53, 3,50,88, 4,56,93, 4,57, 5, 4,56,92, + 5,62,77, 4,61,77, 3,57,15, 4,61,76, 4,61,74, 4,61,78, 3,57,16, 4,65,45, + 3,61,22, 4,68,53, 4,68,51, 4,68,54, 4,71,42, 4,73,46, 3,63,70, 4,73,47, + 4,75, 3, 4,76, 8, 4,77, 7, 4,11,44, 3,15,15, 4,16,10, 3,19,94, 4,21,62, + 4,21,57, 5,21,82, 3,25,27, 4,21,59, 4,21,60, 4,21,61, 3,25,28, 5,28,67, + 4,27,44, 4,27,48, 3,31,29, 4,27,45, 4,27,41, 6,47,22, 6,47,28, 5,28,60, + 4,27,42, 4,27,43, 4,27,47, 3,31,28, 5,28,63, 4,27,49, 4,33, 9, 5,35,43, + 3,36,76, 3,36,78, 0, 0, 0,15,37,56, 5,42,30, 4,39,62, 4,39,65, 4,39,63, + 4,39,66, 4,39,69, 3,41,88, 4,39,68, 3,47, 8, 3,36,79, 4,45,87, 4,46, 2, + /* plane 0, page 72 */ + 0, 255, /* first, last */ + 3,47,10, 7, 9,46, 3,47,14, 3,47, 9, 4,45,94, 4,46, 1, 4,45,93, 4,45,89, + 4,45,88, 4,45,86, 3,47,13, 4,46, 3, 0, 0, 0, 4,52,14, 3,50,93, 3,50,90, + 4,52,15, 4,52,13, 5,56,66, 4,52,16, 3,50,89, 5,62,91, 0, 0, 0, 4,57,11, + 4,57,12, 4,57, 6,15,60,88, 4,57,10, 4,57, 8, 3,54,51, 3,57,19, 4,61,84, + 4,61,88, 4,61,82, 4,61,85, 7,42,55, 4,65,48, 3,57,20, 4,65,49, 4,61,87, + 4,68,59, 4,68,58, 4,71,48, 4,71,44, 5,84,43, 4,75, 4, 7,60,87, 4,76, 9, + 3,65,47, 3,66,14, 3,31,34, 5,28,71, 4,27,50, 4,27,51, 3,31,33, 3,36,81, + 3,36,80, 3,36,82, 0, 0, 0, 4,46, 6, 4,52,18, 4,57,16, 3,54,54, 3,59,30, + 4,68,63, 3,64,44, 4,11,45, 4,11,46,15,13,51, 3,20, 2, 3,25,35, 3,25,36, + 3,25,40, 4,21,65, 4,21,66, 3,25,37, 3,25,38, 3,25,34, 6,37,37, 3,31,40, + 3,31,35, 4,27,52, 3,31,42, 3,36,85, 4,33,10, 3,36,84, 6,57, 4, 4,33,12, + 4,39,70, 4,39,73, 4,39,71, 3,41,94, 4,46, 8, 4,46, 7, 4,46,10, 4,46, 9, + 3,51, 3, 5,56,82, 4,52,19, 4,52,20, 5,49,65, 3,54,56, 4,57,18, 4,57,21, + 4,57,23, 3,54,55, 4,57,17, 4,61,92, 4,61,91, 4,61,90, 5,69,21, 4,61,93, + 4,61,94, 0, 0, 0, 4,65,57, 4,65,56, 4,65,55, 4,68,64, 4,68,65, 4,71,50, + 15,72,51, 3,63,72, 3,63,71, 0, 0, 0, 3,64,93, 4,77,65, 4,78, 1, 3,66,29, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,46,14, 3,61,25, 4,39,75,15,44,71, 3,47,24, + 4,68,67, 7,48,54, 3, 7,18, 4, 5, 2,15, 8,82, 3,10,79, 5, 7,73, 0, 0, 0, + 4,11,51, 4,11,48, 3,20, 3, 4,16,13, 4,16,16, 3,20, 4, 4,16,14, 0, 0, 0, + 0, 0, 0, 3,25,41, 4,21,73, 3,25,45, 3,31,51, 4,27,55, 3,31,46, 6,47,40, + 3,31,50, 4,33,15, 3,42, 5, 0, 0, 0, 4,39,76, 3,42, 3, 3,47,26, 4,46,17, + 4,46,21, 3,47,29, 3,51,10, 3,51, 8, 3,51, 9, 4,57,24, 4,57,25, 7,35,87, + 3,57,25, 4,65,62, 4,76,12, 3, 2,63, 4, 3,18, 3, 7,22, 3, 7,23, 3, 7,24, + 3,10,86, 4, 8, 9, 0, 0, 0, 3,15,22, 4,11,54, 3,37, 2, 3,15,29, 4,11,52, + 4,11,56, 3,15,25, 3,15,26, 6,20,77, 4,16,24, 4,16,20, 3,20, 8, 4,16,19, + 4,39,81, 0, 0, 0, 4,21,76, 4,21,78, 4,21,83, 4,21,75, 3,25,48, 4,21,80, + 4,27,62, 3,31,56, 0, 0, 0, 4,33,20, 4,33,22, 3,37, 1, 4,57,28, 4,33,24, + 4,39,77, 4,39,78, 3,42, 9, 3,42, 8, 5,42,64, 4,39,80, 3,47,30, 4,46,29, + 4,46,28, 5,56,94, 5,63,28, 3,64,45, 4,75, 6, 3,15,31, 0, 0, 0, 3,20,11, + 3,20,12, 4,21,88, 4,21,84, 3,25,51, 5,22,22, 4,21,85, 4,27,64, 3,31,58, + 3,31,59, 3,31,60, 4,27,68, 0, 0, 0, 6,57,44, 3,37, 6, 4,33,29, 4,33,28, + 4,33,31, 4,33,30, 4,39,83, 4,39,84, 4,46,31, 4,46,33, 4,46,30, 4,46,32, + /* plane 0, page 73 */ + 1, 255, /* first, last */ + 4,52,29, 4,52,28, 4,52,26, 3,51,14, 4,52,32, 4,52,27, 7,20,52, + 3,51,16, 4,57,29, 4,57,34, 7,28,80, 4,57,33, 5,69,37, 4,65,65, 4,65,68, + 4,65,67, 4,65,66, 4,65,69, 4,71,58, 4,71,59, 4,73,52, 4,73,51, 4,76,14, + 4,76,13, 4,78,29, 4,21,90, 6,28,67, 3,25,58, 3,31,63, 3,31,68, 3,31,65, + 3,31,71, 3,37,12, 5,35,77, 0, 0, 0, 3,42,14, 4,39,89, 3,42,22, 4,39,86, + 4,39,91, 0, 0, 0, 4,39,88, 3,47,47, 4,46,35, 3,47,39, 3,47,38, 7,10,24, + 3,47,42, 7,10,30, 0, 0, 0, 3,51,19, 3,51,20, 4,52,40, 4,52,38, 7,28,91, + 3,54,73, 7,28,87, 4,57,37, 4,57,36,15,61,44, 3,57,31, 3,57,33, 4,62,15, + 4,62,12, 7,36,25, 4,62, 7, 5,69,47, 4,62,11, 3,57,40, 3,57,39, 0, 0, 0, + 3,59,38, 4,65,70, 3,59,43, 3,59,32, 3,59,50, 4,65,73, 5,74,19, 4,65,72, + 3,59,49, 3,59,44, 3,59,41,15,68,20, 3,61,27, 4,65,76, 3,61,32, 4,68,70, + 4,68,76, 5,78,21, 3,61,40, 4,68,77, 0, 0, 0, 4,71,63, 3,62,75, 4,68,73, + 4,71,65, 3,62,76, 4,71,67, 7,53,72, 3,62,73, 3,62,78, 3,62,79, 3,63,79, + 3,64,49, 5,81,53, 7,57,71, 3,63,77, 7,57,72, 3,63,80, 5,84,53, 4,75,10, + 5,86,63, 4,75, 7, 3,64,46, 3,64,48, 3,65, 3, 3,65, 1, 4,76,16, 3,65, 4, + 3,65,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,69, + 4,27,71,15,31,86, 4,33,41, 4,62,18, 3,25,59, 4,21,92, 3,31,74, 4,27,75, + 3,31,78, 3,31,75, 3,37,27, 4,33,48, 4,33,46, 4,40, 3, 3,42,27, 3,42,31, + 3,42,26, 5,42,78, 3,42,28, 0, 0, 0, 7,10,38, 4,46,40, 3,47,52, 3,47,55, + 4,52,47, 4,52,43, 3,51,31, 4,52,44, 3,51,33, 3,51,35, 3,51,38, 3,51,37, + 7,20,83, 0, 0, 0, 4,57,46, 4,57,47, 4,57,52, 3,54,78, 3,54,76, 4,57,45, + 0, 0, 0, 4,57,50, 4,71,70, 4,68,81, 5,81,59, 4,73,53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 1,93, 3, 2,64, 3, 4,30, 5, 4,91, 6, 9,21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 8,17, 4, 8,18, 3,10,90, 5,11,68, 4,11,58, 3,15,33, 4,11,57, + 0, 0, 0, 4,16,32, 4,16,29, 3,20,21, 4,16,30, 3,20,23, 4,16,28, 0, 0, 0, + 3,25,67, 3,25,61, 4,21,93, 3,25,64, 3,25,66, 3,25,68, 3,25,63, 3,31,79, + 4,27,77, 3,31,84, 3,37,31, 3,37,30, 4,33,53, 4,33,52, 3,37,29, 3,37,33, + 3,42,33, 3,42,32, 3,42,35, 3,42,34, 3,47,57, 3,47,56, 7,10,52, 3,51,39, + 4,52,51, 0, 0, 0, 4,52,49, 0, 0, 0, 4,57,53, 0, 0, 0, 3,59,52, 4,68,83, + 4,71,71, 3,20,24, 4,22, 4, 3,31,90, 3,31,86, 3,31,89, 3,31,87, 4,33,54, + 3,37,36, 3,37,35, 3,37,37, 3,42,40, 3,47,61, 3,47,60, 3,51,43, 3,51,42, + /* plane 0, page 74 */ + 0, 255, /* first, last */ + 3,50,24, 4,57,56, 3,54,82, 3,57,44, 3,59,53, 3,61,42, 3,59,54, 3,61,43, + 4,73,54, 3,65,49, 3,66,32, 3,25,70, 3,31,93, 6,48,17, 3,37,40, 4,40,13, + 4,40,17, 4,40,14, 3,42,42, 4,40,20, 3,42,43, 4,40,19, 6,67,91, 3,47,62, + 3,47,65, 3,47,63, 0, 0, 0, 4,52,57, 3,51,47, 3,51,46, 4,57,64, 3,54,83, + 3,54,87, 4,52,56, 3,54,86, 4,57,61, 4,57,63, 4,62,21, 3,57,45, 3,57,46, + 4,62,22, 7,36,56, 7,36,64, 4,65,84, 4,65,83, 3,59,55, 3,59,56, 3,59,57, + 4,68,85, 3,61,45, 4,73,56, 4,73,58, 4,73,59, 3,64,56, 3,65,51, 3,65, 7, + 3,65,50, 3,66, 4, 3,66,36, 3,66,38, 4,73,60, 4,22, 8, 4,22,10, 4,27,84, + 4,46,44, 4,68,91, 4,33,58, 3,37,42, 0, 0, 0, 3,42,45, 4,40,24, 4,40,23, + 4,52,61, 4,52,60, 4,57,66, 4,68,92, 4,71,78, 5,81,67, 0, 0, 0, 4,76,19, + 4,27,89, 3,32, 3, 4,27,86, 3,37,45, 4,33,61, 4,33,63, 3,37,44,15,38,18, + 6,58, 8, 4,40,26, 4,40,32, 4,40,27, 3,42,47, 3,42,48, 4,40,29, 4,46,47, + 4,52,67, 4,52,65, 4,52,64, 4,52,68, 4,52,66, 4,57,67, 4,52,72, 3,51,50, + 3,54,92, 4,57,72, 4,57,68, 7,29,54, 3,54,89, 3,54,93, 3,54,94, 4,62,30, + 5,69,94, 4,62,34, 4,62,28, 5,69,83, 5,69,91, 4,62,27, 4,62,33, 3,59,60, + 3,59,59, 4,65,87, 4,65,91, 3,59,58, 4,69, 3, 4,68,94, 5,78,41, 7,54, 7, + 7,54, 5, 4,71,82, 4,71,80, 5,81,73, 7,54, 6, 3,63,84, 5,84,66, 4,75,12, + 3,64,58, 4,76,20, 4,77,13, 3,65,52, 4,77,69, 3,65,80, 4,78, 2, 4,33,65, + 4,40,35, 4,40,33, 4,40,34, 4,40,36, 3,51,52, 4,57,75, 7,36,87, 4,62,37, + 3,57,50, 4,65,93, 4,65,94, 4,71,83, 4,73,64, 3,64,59, 3,37,46, 0, 0, 0, + 3,55, 1, 3,59,67, 3,59,66, 3,61,50, 4,71,85, 4,75,13, 3,32, 5, 3,32, 6, + 3,32, 7, 3,37,49, 0, 0, 0, 4,52,74, 4,52,73, 3,57,51, 4,66, 2, 4,66, 3, + 3,63,85, 4,27,91,15,32,13, 4,33,69, 4,33,68, 5,36,20, 5,43,30, 4,40,45, + 3,42,49, 4,40,46, 3,42,51, 4,40,44, 4,40,43, 5,43,31, 4,40,39, 3,47,72, + 4,46,57, 4,46,60, 5,50,64, 4,52,77, 4,52,79, 3,51,54, 4,46,61, 3,51,64, + 3,51,55, 3,51,62, 7,21,49, 3,55, 5, 4,57,83, 7,29,73, 3,55, 2, 4,57,87, + 3,55, 3, 3,55, 4, 3,55, 7, 3,55, 9, 4,62,46, 3,57,52, 4,62,41, 4,62,39, + 4,62,43, 3,57,55, 3,57,53, 4,62,45, 4,62,44, 3,57,58, 4,66, 7, 4,66, 9, + 4,66,13, 4,66, 6, 4,66,12, 3,59,68, 4,66, 5, 4,66,15, 4,66, 8, 4,66,11, + 4,69,15, 4,69,17, 4,69,16, 3,61,52, 4,71,87, 4,71,89, 4,71,86, 4,71,92, + 4,71,91, 7,54,18, 4,73,67, 3,63,86, 4,73,66, 4,76,25, 5,88,40, 3,65,53, + 4,22,11, 4,27,94, 3,37,51, 4,33,77, 4,33,82, 4,33,78, 4,40,49, 4,40,54, + /* plane 0, page 75 */ + 0, 255, /* first, last */ + 4,40,57, 4,40,48, 4,40,52, 3,42,55, 4,46,64, 4,46,65, 4,52,86, 4,52,87, + 4,52,83, 4,52,84, 4,52,85, 4,57,93, 4,58, 2, 4,58, 1, 4,57,92, 4,57,90, + 4,57,94, 4,62,49, 7,36,94, 4,62,48, 4,62,50, 3,57,61, 3,57,62, 3,57,63, + 4,66,18, 3,59,71, 3,59,70, 4,69,22, 3,61,53, 4,71,94, 4,75,16, 4,76,26, + 3,55,11, 3,57,64, 3,20,26, 4,22,12, 3,32, 9, 3,32,10, 4,28, 4, 3,32, 8, + 4,28, 5, 3,37,61, 3,32,12, 4,33,87, 4,33,84, 3,42,60, 3,37,62, 4,33,85, + 3,37,54, 3,37,53, 3,37,58, 4,33,89, 4,33,90, 3,42,56, 3,42,57, 4,40,59, + 7,11,24, 3,42,58, 4,40,60, 6,68,32, 3,47,74, 4,46,69, 4,46,68, 4,46,71, + 4,46,70, 4,52,88, 4,46,73, 4,52,92, 4,52,93, 4,52,90, 4,58, 7, 4,53, 2, + 4,58, 8, 4,58,10, 5,64,17, 3,55,13, 3,57,68, 5,64,12, 3,55,12, 0, 0, 0, + 4,62,56, 4,62,55, 4,62,59, 4,62,57, 4,62,58, 4,69,25, 4,66,22, 3,59,72, + 4,69,28, 4,69,27, 3,61,55, 3,61,57, 0, 0, 0, 4,72, 4, 4,72, 3, 3,62,93, + 4,72, 2, 4,73,71, 4,73,69, 3,63,87, 4,73,72, 4,75,17, 3,65,54, 4,77,16, + 4,77,71, 4,78, 5, 0, 0, 0, 3,47,76, 3,51,71, 4,62,63, 4,66,28, 4,40,61, + 3,55,15, 4,53, 6, 3,55,14, 3,65,81, 3,32,13, 5,36,42, 3,37,64, 4,40,62, + 3,42,69, 4,40,63, 3,42,63, 3,42,71, 3,42,72, 3,42,75, 3,42,73, 4,46,79, + 3,47,81, 3,47,80, 4,46,78, 3,47,79, 4,46,77, 4,46,80, 3,51,79, 3,51,78, + 3,51,77, 5,58,12, 3,51,73, 4,53,13, 5,58,14, 7,22, 8, 4,58,14, 3,55,18, + 3,55,21, 4,58,13, 3,55,17, 4,62,71, 5,74,78, 4,62,66, 3,57,72, 4,62,72, + 3,57,73, 4,62,67, 4,62,69, 3,57,76, 4,66,33, 4,66,31, 3,59,74, 4,66,38, + 4,66,32, 4,66,36, 4,66,37, 4,69,33, 4,69,32, 3,61,61, 3,61,59, 4,69,39, + 5,78,70, 5,78,77, 3,61,60, 4,72, 9, 4,72,10, 4,72,11, 4,72,13, 3,63, 3, + 5,82,13, 4,72, 8, 7,58,30, 5,84,86, 4,73,75, 4,73,73, 3,63,90, 4,75,19, + 4,75,20, 4,75,18, 3,65,11, 7,64,14, 7,64,13, 3,65,55, 4,77,72, 3,66, 7, + 4,78,31, 3,66,23, 4,78,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,25,73, 3,32,14, + 4,40,66, 3,42,77, 3,47,85, 4,46,85, 4,46,83, 4,46,86, 3,47,88, 3,51,82, + 3,51,83, 4,53,16, 4,53,18, 4,53,15, 4,53,14, 3,55,25, 4,58,17, 4,58,21, + 4,58,16, 3,55,24, 4,58,19, 5,70,49, 4,62,78, 3,59,80, 4,66,40, 4,66,39, + 4,69,41, 3,61,63, 4,72,16, 4,73,78, 4,75,21, 4,76,30, 4,77,19, 3,32,16, + 4,34, 2, 0, 0, 0, 4,66,42, 5,84,90, 7,68,85, 3,32,17, 5,29,50, 6,68,62, + 4,40,74, 4,40,73, 4,40,71, 3,42,84, 5,43,57, 4,46,91, 3,47,90, 4,53,21, + 4,53,22, 4,58,24, 3,55,29, 0, 0, 0, 4,58,27, 4,62,80, 4,62,83, 3,57,78, + /* plane 0, page 76 */ + 0, 255, /* first, last */ + 4,62,84, 4,62,86, 4,62,85, 4,62,87, 4,66,46, 3,59,82, 4,66,44, 0, 0, 0, + 4,69,45, 4,69,47, 4,69,46, 7,49,89, 5,82,31, 3,63, 6, 4,73,82, 4,76,35, + 4,76,33, 3,65,13, 5,88,50, 4,77,21, 7,65,74, 4,77,73, 4,78,41, 7,49,93, + 5,82,33, 3,42,87, 3,42,86, 3,45,30, 3,51,86, 7,58,43, 3,65,56, 3,42,89, + 4,47, 4, 4,47, 5, 4,53,31, 3,51,87, 4,62,94, 3,57,80, 4,62,93, 4,62,92, + 3,59,83, 5,70,72, 3,61,69, 4,73,87, 4,73,86, 7,58,47, 0, 0, 0, 4,76,40, + 4,76,41, 4,78,56, 5,29,52, 0, 0, 0, 4,40,77, 5,43,68, 0, 0, 0, 4,47, 8, + 4,47,20, 3,48, 1, 7,11,74, 4,47,25, 4,47,18, 4,47,11, 4,47, 9, 3,52, 7, + 4,53,36, 4,53,34, 4,53,40, 3,51,94, 3,52, 8, 4,53,33, 3,52, 6, 3,52, 4, + 3,52, 2, 3,51,91, 4,58,32, 3,55,33, 4,63, 1, 7,30,41, 4,58,34, 3,57,82, + 4,63, 3, 5,70,78, 4,63, 7, 4,63, 5, 3,57,88, 4,63, 4, 3,57,87, 4,63, 9, + 4,63,11, 4,66,61, 5,75,21, 4,66,71, 4,66,55, 4,66,65, 4,66,57, 4,66,52, + 3,59,86, 5,75,17, 4,66,66, 5,75,11, 4,66,64, 4,66,68, 3,59,88, 3,59,91, + 3,59,92,15,68,82, 0, 0, 0, 3,61,87, 4,69,53, 7,50,17, 4,69,59, 3,61,76, + 7,50,19, 4,69,51, 3,61,75, 3,61,77, 0, 0, 0, 4,72,29, 3,63,13, 3,63,16, + 4,72,28, 3,63,14, 3,63,11, 4,72,26, 3,63, 9, 3,63,15, 4,73,93, 3,63,93, + 4,74, 1, 4,73,92, 3,63,92, 4,73,94, 3,64, 4, 4,73,91, 3,64, 1, 0, 0, 0, + 15,74,31, 4,75,28, 4,75,29, 4,75,32, 4,75,27, 7,62, 3, 3,64,71, 3,64,68, + 5,88,59, 5,88,54, 3,65,16, 4,76,45, 4,76,46, 5,87, 4, 3,65,58, 4,77,25, + 0, 0, 0, 3,65,17, 4,78,12, 4,78,13, 4,78,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,37,69, 3,42,90, 3,42,91, + 3,42,92, 3,42,94, 5,43,75, 3,42,93, 5,51,24, 4,47,31, 3,48, 3, 4,47,36, + 4,47,27, 7,11,77, 4,47,32, 3,48, 8, 3,48, 9, 3,48, 6, 0, 0, 0, 3,44,67, + 4,47,33, 4,53,46, 3,52,15, 4,53,45, 3,52,16, 4,53,47, 3,52,11, 4,53,52, + 7,22,42, 4,53,42, 3,52,14, 4,53,55, 3,55,43, 4,53,43, 3,52,17, 4,53,53, + 3,52,20, 4,53,48, 7,22,49, 3,54,19, 3,55,44, 4,58,49, 3,55,39, 3,55,41, + 3,55,38, 4,58,50, 3,55,46, 4,58,48, 4,63,15, 4,63,21, 4,63,12, 3,58, 1, + 3,57,92, 4,63,18, 4,63,17, 5,71, 6, 4,63,24, 4,66,74, 3,60, 1, 4,66,76, + 4,69,65, 3,60, 8, 4,66,79, 5,75,28, 4,63,22,15,68,85, 3,61,88, 4,69,76, + 3,61,93, 3,61,91, 4,69,74, 4,69,68, 3,61,92, 7,50,34, 4,69,66, 4,69,75, + 3,61,94, 3,63,20, 4,72,32, 4,72,34, 4,72,33, 5,82,67, 3,63,19, 4,74, 7, + 4,74,12, 0, 0, 0, 3,64, 8, 4,74, 6, 3,64, 6, 3,64, 7, 4,75,37, 3,64,75, + /* plane 0, page 77 */ + 0, 181, /* first, last */ + 5,87,12, 4,75,36, 5,87,20, 4,75,39, 3,64,74, 3,64,73, 4,75,40, 4,76,48, + 4,76,50, 4,76,49, 3,65,22, 4,76,52, 4,77,29, 3,65,60, 7,67,23, 3,66,10, + 3,66,30, 4,78,57, 3,66,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,47,39, 4,63,25, 7,55, 9, 4,75,45, 5,89,83, 5,43,77, + 4,47,41, 4,47,42, 3,48,13, 3,52,24, 4,53,56, 7,22,60, 3,58, 3, 4,66,82, + 0, 0, 0, 3,63,25, 3,65,23, 3,65,24, 4,40,83, 4,40,84, 3,43, 1, 4,47,45, + 4,47,43, 4,53,57, 4,53,60, 4,53,58, 4,53,61, 3,55,47, 4,63,28, 4,63,27, + 3,58, 7, 4,66,89, 4,66,86, 4,66,93, 4,66,87, 4,66,92, 4,72,41, 4,72,40, + 4,72,42, 5,85,45, 5,85,40, 4,75,46, 3,65,25, 7,58,93, 4,77,33, 7,12,17, + 4,69,81, 4,69,82, 7,22,69, 4,63,29, 4,67, 1, 4,69,86, 4,72,43, 4,75,50, + 4,76,58, 7,12,19, 4,53,62, 7,22,71, 5,79,50, 4,69,89, 5,79,52, 4,72,44, + 4,72,46, 4,72,45, 4,74,17, 4,75,53, 4,77,34, 4,34,12, 3,43, 3, 4,47,50, + 4,47,51, 4,53,63, 4,58,63, 5,65, 3, 5,71,32, 5,71,29, 4,63,31, 5,71,33, + 4,67, 3, 3,60,11, 4,69,92, 4,70, 1, 4,69,93, 5,79,56, 4,72,50, 3,63,27, + 4,75,54, 4,76,59, 4,77,36, 3,65,62, 4,77,35, 4,77,79, 4,63,32, 3,60,12, + 4,74,23, 3,65,26, 4,53,65, 4,76,65, 4,76,66, 4,63,35, 4,63,34, 4,63,36, + 4,67, 6, 4,72,57, 4,53,66, 4,58,67, 4,63,37, 4,67, 7, 4,72,58, 3,64,10, + 4,75,56, 4,75,59, 3,58,12, 4,63,38, 3,62, 3, 7,50,71, 5,79,65, 4,72,60, + 4,78,17, 5,91,90, 4,58,70, 5,65,13, 4,63,40, 4,67, 9, 4,67,11, 4,70, 7, + 4,70, 5, 4,70, 6, 3,63,29, 4,72,65, 4,74,29, 4,74,28, 3,64,78, 5,87,45, + 4,76,73, 4,76,70, 4,76,74, 4,77,44, 4,77,43, 4,77,80, 3,65,86, 3,66,11, + 3,66,18, 4,78,43, 4,78,44, 4,78,58, 5,85,65, 0, 0, 0, 0, 0, 0, 5,75,73, + 5,76,36, 4,72,66, 0, 0, 0, 4,72,67, 4,77,49, 3,66,12, + /* plane 0, page 78 */ + 0, 255, /* first, last */ + 1,36, 1, 1,36, 3, 4, 1, 6, 1,36, 4, 3, 1, 6, 3, 1, 5, 0, 0, 0, 2, 1, 6, + 1,36,23, 1,36,21, 1,36,24, 1,36,22, 2, 1, 7, 1,36,66, 2, 1,15, 2, 1,13, + 1,36,65, 1,36,64, 4, 1,25, 0, 0, 0, 1,37,66, 1,37,65, 1,37,64, 4, 1,53, + 1,37,67, 1,37,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,39, 2, 1,39, 3, + 3, 2,66, 3, 2,65, 3, 2,67, 4, 3,21, 3, 4,31, 0, 0, 0, 1,43,68, 0, 0, 0, + 3, 1, 1, 4, 1, 7, 3, 1,12, 1,36,25, 0, 0, 0, 1,36,67, 2, 1,16, 4, 1,26, + 1,36,68, 2, 1,35, 1,40,75, 2, 5,17, 0, 0, 0, 4,11,62, 3, 1, 2, 0, 0, 0, + 1,36,26, 1,36,69, 0, 0, 0, 1,37,68, 2, 1,36, 3, 7,32, 0, 0, 0, 3, 1, 3, + 4, 1, 2, 4, 1, 3, 2, 1, 1, 1,36, 5, 0, 0, 0, 1,36,28, 3, 1,16, 2, 1, 8, + 1,36,29, 3, 1,14, 0, 0, 0, 1,36,70, 0, 0, 0, 1,37,69, 1,37,71, 1,37,70, + 0, 0, 0, 4, 2, 7, 1,39, 4, 1,39, 5, 3, 3,37, 0, 0, 0, 1,43,69, 3,11, 2, + 1,51,93, 1,36, 2, 4, 1, 4, 0, 0, 0, 2, 1, 2, 1,36, 6, 1,36,31, 1,36,30, + 0, 0, 0, 0, 0, 0, 3, 1,38, 3, 1,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 2,68, 1,39, 6, 4, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4,32, 0, 0, 0, 1,43,70, 4, 5,17, 4, 5,16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,11, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,56,81, 2,19,46, + 3,25,76, 3,25,78, 1,67,10, 2,33,54, 2,33,55, 3, 1, 4, 1,36, 7, 3, 1,13, + 1,36,72, 3, 2,69, 0, 0, 0, 1,43,71, 1,36, 8, 2, 1, 9, 1,36,32, 3, 1,17, + 0, 0, 0, 1,36,73, 1,36,75, 2, 1,17, 1,36,76, 1,36,74, 4, 1,27, 3, 1,76, + 3, 2,70, 1,39, 7, 0, 0, 0, 1,43,72, 3, 4,34, 3, 7,34, 1,43,73, 1,47,71, + 1, 7, 8, 1,36,33, 1,36,77, 3, 1,39, 1,39, 8, 1,39,10, 1,39, 9, 0, 0, 0, + 1,40,76, 0, 0, 0, 0, 0, 0, 1,43,74, 1,43,75, 1,47,72, 1,47,73, 3,11, 6, + 3,11, 5, 3,11, 7, 3,11, 4, 1,51,94, 4,22,14, 0, 0, 0, 2,33,56, 3,32,19, + 0, 0, 0, 2,77,36, 1,36, 9, 0, 0, 0, 3, 1,18, 0, 0, 0, 3, 1,19, 0, 0, 0, + 1,36,79, 1,36,78, 2, 1,18, 1,36,80, 1,36,86, 3, 1,41, 1,36,81, 1,36,82, + 2, 1,20, 2, 1,19, 1,36,84, 1,36,85, 3, 1,44, 1,36,83, 3, 1,43, 3, 1,42, + 4, 1,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,37,74, 1,37,75, 1,37,76, 1,37,77, + 1,37,73, 1,37,80, 2, 1,42, 4, 1,59, 2, 1,38, 2, 1,41, 1,37,81, 1,38, 3, + 3, 1,77, 2, 1,40, 4, 1,58, 1,37,78, 1,37,79, 1,37,72, 3, 1,82, 3, 1,80, + 2, 1,37, 2, 1,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2,79, 3, 2,72, + 1,39,23, 2, 1,79, 1,39,20, 1,39,24, 2, 1,89, 2, 1,77, 1,39,21, 2, 1,81, + 3, 2,75, 3, 2,71, 3, 2,86, 1,39,22, 3, 2,78, 1,39,25, 4, 2,13, 1,39,11, + /* plane 0, page 79 */ + 0, 255, /* first, last */ + 2, 1,80, 1,39,26, 2, 1,84, 3, 2,77, 2, 1,88, 2, 1,85, 3, 2,76, 3, 2,84, + 2, 1,82, 1,39,12, 1,39,14, 1,39,27, 4, 2,10, 1,39,16, 2, 1,74, 1,39,19, + 1,39,17, 1,39,18, 2, 1,90, 2, 1,87, 2, 1,78, 1,39,15, 3, 2,80, 3, 2,87, + 2, 1,75, 1,39,13, 3, 2,85, 4, 2,14, 3, 2,83, 2, 1,83, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 1,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 2,82,15, 1,81, 0, 0, 0, 0, 0, 0, 2, 1,76, 2, 3, 8, 4, 3,25, 1,41, 4, + 1,40,85, 3, 4,48, 3, 4,40, 2, 3, 9, 1,40,82, 3, 4,47, 1,41, 6, 3, 4,38, + 1,40,90, 3, 4,37, 1,40,89, 2, 2,91, 1,40,93, 1,40,88, 2, 3, 2, 2, 3,10, + 3, 4,46, 2, 3, 6, 3, 4,41, 1,40,91, 3, 4,43, 3, 4,35, 1,40,94, 1,40,79, + 1,41, 9, 2, 2,93, 3, 4,36, 3, 4,44, 2, 5,29, 1,40,77, 1,41, 5, 1,40,78, + 1,40,86, 1,40,87, 2, 3, 4, 2, 2,94, 1,40,92, 1,40,84, 2, 2,90, 1,40,80, + 2, 3, 7, 1,41, 7, 1,41,10, 1,40,83, 1,41, 2, 1,41, 8, 1,40,81, 2, 3, 5, + 1,41, 3, 2, 3,11, 2, 2,92, 1,41, 1, 2, 3, 1, 0, 0, 0, 3,68,40, 2, 3, 3, + 3,68,41, 1,43,89, 2, 5,31, 2, 5,43, 1,43,81, 3, 7,39, 2, 5,44, 1,43,76, + 1,43,86, 4, 5,30, 3, 7,47, 1,43,79, 2, 5,25, 1,43,87, 2, 5,24, 2, 5,28, + 2, 5,35, 2, 5,33, 1,44, 1, 1,43,90, 2, 5,19, 2, 5,21, 1,43,92, 1,43,80, + 2, 5,22, 2, 5,34, 2, 5,41, 1,43,85, 2, 5,27, 2, 5,20, 1,43,84, 2, 5,23, + 1,43,88, 2, 5,26, 3, 7,36, 1,43,83, 3, 7,49, 1,43,78, 3, 7,40, 1,43,93, + 2, 5,36, 1,43,94, 2, 5,40, 3, 7,35, 2, 5,38, 2, 5,42, 1,43,91, 2, 5,30, + 2, 5,18, 4, 5,22, 2, 5,32, 1,43,82, 2, 5,37, 1,43,77, 2, 5,39, 3, 7,44, + 3, 7,41, 3, 7,43, 3, 7,42, 3, 7,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 5,36, 0, 0, 0, 0, 0, 0, 1,47,88, 1,47,76, + 3,11,13, 3,11,14, 2, 9, 2, 2, 9,10, 3,11,22, 1,47,75, 1,47,83, 1,48, 1, + 3,11,12, 2, 9,16, 2, 9,14, 2, 9, 9, 4, 8,24, 4, 8,30, 3,11,11, 1,47,77, + 2, 9,15, 2, 9, 5, 1,47,91, 1,47,82, 1,47,90, 2, 8,94, 3,11,18, 2, 9,12, + 3,11,15, 2, 9, 3, 1,47,86, 2, 9, 4, 3,11,19, 2, 8,93, 1,47,93, 1,47,80, + 1,47,89, 1,47,79, 3,11, 8, 2, 9, 1, 2, 9, 6, 3,11, 9, 2, 9,13, 1,47,87, + 1,47,84, 2, 9, 8, 1,47,92, 2, 9,11, 2, 9, 7, 1,47,81, 1,47,94, 1,47,85, + 1,47,78, 1,47,74, 4, 8,31, 3,11,21,15, 9,13, 3,11,20, 0, 0, 0, 3,68,42, + 0, 0, 0, 4, 8,29, 0, 0, 0, 0, 0, 0, 2, 9,17, 0, 0, 0, 1,52,26, 1,52, 4, + 3,15,40, 1,52,20, 3,15,45, 1,52,25, 2,13,81, 2,13,80, 2,13,85, 2,13,86, + 1,52, 7, 3,15,36, 1,52,16, 3,15,56, 3,15,44, 3,15,54, 1,52,29, 3,15,38, + /* plane 0, page 80 */ + 0, 255, /* first, last */ + 1,52,17, 4,11,66, 3,15,43, 3,15,41, 3,15,39, 2,13,74, 1,52,10, 2,13,75, + 3,15,47, 1,52,31, 4,11,68, 1,52,22, 1,52, 1, 1,52, 2, 2,13,94, 1,57, 4, + 3,15,51, 1,52,15, 1,52,14, 2,13,76, 1,52,18, 2,19,62, 1,52, 9, 2,13,87, + 1,52,24, 1,52,23, 1,52,13, 2,13,79, 2,13,88, 3,15,37, 2,13,73, 1,52,12, + 2,13,89, 1,52,21, 2,13,77, 1,52, 3, 3,15,46, 1,52, 6, 1,52, 5, 2,13,90, + 1,52,19, 1,52, 8, 1,52,28, 1,52,30, 2,13,84, 1,52,27, 3,15,49, 2,13,92, + 2,13,78, 2,13,93, 3,15,35, 2,13,82, 4,11,65, 2,13,91, 3,15,48, 2,13,83, + 3,15,52, 3,15,53, 0, 0, 0, 0, 0, 0, 1,52,11, 0, 0, 0, 0, 0, 0, 3,68,43, + 2,19,70, 2,19,58, 3,20,28, 1,56,86, 3,20,31, 2,19,63, 2,19,69, 1,56,85, + 2,19,56, 1,56,89, 2,19,60, 2,19,53, 1,56,87, 2,19,57, 1,56,92, 1,57, 3, + 3,20,36, 2,19,74, 3,20,33, 2,19,52, 3,20,34, 1,56,93, 3,15,55, 2,19,73, + 3,20,39, 3,20,29, 1,56,88, 2,19,59, 1,56,84, 2,19,54, 2,19,50, 2,19,64, + 2,19,51, 2,19,49, 2,19,61, 2,19,67, 2,19,68, 1,56,90, 3,20,32, 4,16,39, + 2,26,31, 2,19,65, 2,19,48, 2,19,66, 3,20,43, 1,57, 6, 2,19,71, 1,57, 5, + 2,19,47, 3,20,35, 2,19,55, 2,19,72, 1,57, 1, 1,56,94, 1,56,91, 1,57, 2, + 3,20,44, 3,20,42, 1,56,82, 3,20,37, 3,20,38, 1,56,83, 0, 0, 0, 0, 0, 0, + 1,62,14, 3,25,85, 2,26,34, 2,26,27, 4,22,20, 1,62,11, 4,22,19, 2,26,35, + 3,25,81, 3,25,82, 4,22,22, 2,26,25, 2,26,28, 1,62,10, 2,26,29, 3,25,79, + 4,22,17, 1,62,13, 2,26,33, 4,22,28, 2,26,23, 2,26,22, 1,62,15, 3,25,80, + 1,62,16, 1,62,12, 1,62,17, 2,26,21, 2,26,32, 2,26,30, 2,26,24, 4,22,25, + 4,22,16, 4,22,26, 1,62, 9, 2,26,26, 0, 0, 0, 0, 0, 0, 3,68,45, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,32,25, 3,32,28, 1,67,17, 1,67,11, 2,33,60, 1,67,20, + 2,33,66, 2,33,69, 1,67,13, 1,67,14, 2,33,63, 1,67,12, 2,33,72, 1,67,18, + 2,33,73, 3,32,26, 2,33,68, 1,67,19, 3,32,23, 2,33,57, 1,67,16, 2,33,58, + 4,28, 9, 2,33,67, 2,33,65, 3,32,29, 2,33,61, 1,67,15, 2,33,59, 1,67,21, + 2,33,64, 2,33,71, 2,33,62, 2,33,70, 3,32,22, 3,32,30, 1,71,92, 1,71,89, + 3,37,75, 1,71,90, 4,34,13, 2,41, 1, 2,40,87, 1,71,88, 1,71,85, 2,40,88, + 3,37,78, 3,37,76, 1,71,87, 2,40,91, 3,37,77, 2,40,93, 3,37,86, 4,34,21, + 2,41, 6, 3,37,80, 3,37,85, 2,41, 5, 2,40,94, 1,71,84, 2,40,86, 1,71,82, + 2,40,89, 1,71,93, 2,40,92, 3,37,81, 2,41, 2, 1,71,86, 1,71,83, 2,41, 4, + 2,41, 3, 1,71,91, 0, 0, 0, 2,40,90, 3,37,84, 1,76, 3, 2,47,52, 3,43, 9, + 2,47,49, 1,76, 4, 4,40,89, 1,76, 2, 3,43,11, 2,47,56, 2,47,53, 2,47,46, + /* plane 0, page 81 */ + 0, 254, /* first, last */ + 1,76, 1, 3,43,13, 1,76, 5, 2,47,47, 1,75,94, 1,76, 8, 2,47,50, 2,47,51, + 1,76, 6, 1,76, 7, 2,47,57, 2,47,54, 2,47,55, 3,43,12, 3,43, 7, 3,68,46, + 1,80,19, 2,54,35, 1,80,16, 2,54,32, 1,80,18, 1,80,20, 3,48,17, 2,54,33, + 1,80,17, 4,47,58, 2,54,34, 3,48,21, 2,54,31, 3,48,16, 3,48,20, 1,83,33, + 2,60,41, 1,83,34, 2,60,39, 4,53,69, 2,60,40, 2,60,38, 2,60,37, 3,52,33, + 3,52,32, 2,60,42, 1,83,32, 3,48,19, 4,53,73, 2,65,36, 2,65,37, 3,55,50, + 2,47,48, 2,65,35, 1,83,35, 1,88,11, 2,69,23, 2,69,24, 3,60,18, 1,90,66, + 1,90,67, 2,75,47, 2,75,46, 1,91,56, 1,91,55, 2,78,93, 3,64,79, 1,36,10, + 1,36,34, 1,36,88, 4, 1,29, 1,36,87, 1,37,83, 1,37,82, 1,39,30, 1,39,29, + 1,39,31, 1,39,28, 3, 2,88, 1,41,12, 1,41,11, 1,41,13, 3, 4,52, 4, 3,27, + 3, 4,51, 3, 4,49, 1,44, 3, 4, 5,31, 1,44, 2, 1,44, 4, 3, 7,50, 1,48, 2, + 4, 8,32, 1, 2,89, 2,14, 1, 1, 2,90, 1,57, 7, 1, 2,92, 1, 2,91, 2,26,36, + 3,25,86, 1, 2,93, 1,71,94, 1, 2,94, 3,62, 5, 1,36,11, 3, 1,20, 1,36,89, + 1,39,32, 1,44, 5, 3,11,23, 1,36,12, 1,36,92, 1,36,90, 1,36,91, 0, 0, 0, + 0, 0, 0, 1,39,33, 3, 2,90, 4, 2,20, 0, 0, 0, 1,41,14, 1,44, 7, 1,44, 6, + 1,44, 8, 3,14,91, 0, 0, 0, 0, 0, 0, 1,52,32, 0, 0, 0, 3,32,31, 3,68,51, + 1,80,21, 0, 0, 0, 3, 1, 7, 4, 1,30, 3, 1,45, 3, 1,40, 3, 1,46, 2, 1,14, + 4, 1,50, 1,37,84, 1,37,85, 3, 1,88, 3, 1,89, 1,39,34, 4, 2,22, 2, 3,12, + 3, 7,53, 1,48, 4, 1,48, 3, 2,14, 3, 2,14, 2, 1,57, 8, 3, 1, 8, 1,36,93, + 2, 1,21, 3, 1,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4,55, 2, 5,45, 3,11,25, + 1,48, 5, 3,15,59, 1,52,35, 3,15,57, 1,52,33, 1,52,34, 3,15,58, 0, 0, 0, + 3,20,45,15,38,60, 1,80,22, 1, 7,15, 1,37,86, 4, 1,62, 0, 0, 0, 0, 0, 0, + 1,39,35, 2, 1,91, 3, 2,94, 3, 2,93, 3, 2,92, 3, 4,57, 1,41,15, 1,41,16, + 3, 4,58, 2, 3,13, 4, 3,29, 0, 0, 0, 2, 5,46, 1,44, 9, 2, 5,47, 4, 5,32, + 4, 5,35, 3,11,27, 3,11,29, 3,11,30, 2,14, 5, 2,14, 6, 1,52,38, 3,15,62, + 2,14, 7, 3,15,63, 2,14, 4, 1,52,39, 1,52,37, 1,52,36, 2,14, 8, 3,20,47, + 2,19,75, 3,20,46, 3,25,93, 3,25,90, 2,26,37, 4,22,31, 3,25,94, 2,33,74, + 2,41, 7, 3,43,15, 3,43,14, 3,43,16, 1,76, 9, 1,80,23, 2,54,36, 3,52,34, + 1,36,13, 1,36,27, 3, 1,15, 3, 1,21, 3, 1,49, 3, 1,91, 0, 0, 0, 0, 0, 0, + 3, 3, 2, 0, 0, 0,15, 2,57, 0, 0, 0, 3, 4,59, 3, 7,57, 4, 5,37, 0, 0, 0, + 1,57, 9, 1,62,19, 6,38,69, 1,72, 1, 3,37,90, 2, 1, 3, 1,36,94, 4, 1,64, + 1,37,89, 1,37,87, 1,37,88, 0, 0, 0, 0, 0, 0, 1,44,10, 3, 7,58, + /* plane 0, page 82 */ + 0, 255, /* first, last */ + 1,36,14, 1,36,15, 4, 1,10, 1,36,35, 3, 1,22, 3, 1,50, 1,37, 1, 1,37, 2, + 1,37, 3, 2, 1,44, 1,37,90, 3, 1,93, 2, 1,43, 0, 0, 0, 1,39,39, 3, 3, 5, + 2, 1,93, 1,39,37, 1,39,38, 2, 1,92, 3, 3, 4, 3, 3, 6, 1,39,40, 1,39,36, + 3, 3, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,14, 1,47,47, 2, 3,15, 3, 4,63, + 3, 4,65, 2, 3,16, 4, 3,32, 3, 4,60, 1,41,18, 1,41,17, 3, 4,62, 3, 4,61, + 1,41,21, 1,41,19, 1,41,20, 3, 4,64, 0, 0, 0, 0, 0, 0, 1,44,16, 3, 7,59, + 1,44,15, 2, 5,52, 2, 5,49, 2, 5,50, 3, 7,62, 2, 5,48, 1,44,17, 1,44,13, + 1,44,12, 3, 7,63, 1,44,14, 1,44,11, 3, 7,61, 4, 5,46, 3,68,47, 0, 0, 0, + 0, 0, 0, 1,44,18, 0, 0, 0, 1,48, 7, 2, 9,18, 3,11,31, 2, 5,51, 1,48,12, + 3,11,32, 2, 9,19, 1,48, 8, 1,48,11, 1,48,10, 1,48, 9, 1,48, 6, 3,11,35, + 0, 0, 0, 0, 0, 0, 2,14,11, 3,15,72, 1,52,42, 2,14,14, 1,52,40, 3,15,69, + 4,11,78, 3,15,66, 2,14,10, 1,52,43, 1,52,41, 1,52,44, 2,14,12, 2,14,13, + 3,15,64, 2,14, 9, 2,14,15, 3,15,70, 3,15,65, 3,15,67,15,14,13, 3,15,68, + 3,20,48, 1,62,23, 1,57,10, 2,19,76, 2,19,78, 2,19,77, 2,19,79, 1,57,11, + 3,26, 3, 0, 0, 0, 1,62,20, 3,26, 1, 1,62,21, 1,62,22, 3,20,49, 1,67,23, + 2,33,76, 3,32,33, 2,33,75, 2,33,77, 2,33,78, 1,67,24, 3,32,32, 1,67,22, + 2,41, 8, 2,41, 9, 1,72, 3, 1,72, 2, 2,44,65, 4,41, 5, 3,43,17, 1,76,10, + 1,76,11, 1,76,12, 1,76,14, 2,47,58, 2,47,59, 1,76,13, 3,43,18, 0, 0, 0, + 3,48,22, 1,80,24, 4,47,68, 1,80,25, 3,48,23, 4,53,77, 2,69,25, 2,75,49, + 2,75,48, 2,78,94, 3,64,12, 1,36,16, 3, 1,23, 3, 1,52, 3, 1,51, 1,37,92, + 1,37,91, 0, 0, 0, 0, 0, 0, 1,39,41, 4, 2,34, 4, 2,31, 2, 1,94, 4, 2,33, + 3, 3, 8, 1,41,23, 1,41,24, 1,41,22, 1,41,25, 2, 3,17, 2, 3,18, 4, 3,38, + 4, 3,39, 4, 3,40, 0, 0, 0, 3, 4,67, 3, 4,66, 3, 7,65, 5, 5,26, 5, 5,23, + 5, 5,24, 3, 7,64, 5, 5,27, 1,44,20, 2, 5,53, 4, 5,48, 1,44,19, 3, 7,66, + 2, 9,20, 1,48,16, 2, 9,21, 1,48,15, 3,11,40, 3,11,38, 4, 8,41, 1,48,13, + 4, 8,43, 1,48,14, 3,11,39, 0, 0, 0, 3,15,79, 2,14,16, 3,15,76, 3,15,74, + 3,15,77, 3,15,78, 1,57,12, 2,19,81, 3,20,50, 1,57,15, 2,19,80, 1,59,11, + 1,57,14, 1,57,13, 0, 0, 0, 1,62,26, 5,22,74, 1,62,25, 1,62,24, 1,67,25, + 3,32,37, 3,32,36, 1,67,28, 1,67,29, 1,67,27, 4,28,28, 1,67,26, 3,32,38, + 5,36,71, 2,41,10, 3,38, 1, 2,41,11, 5,36,67, 3,37,94, 3,43,19, 2,47,61, + 1,76,15, 2,47,60, 3,45,12, 1,80,26, 2,60,43, 1,83,36, 5,51,66, 2,69,26, + 1,89,65, 1, 7,20, 1,36,36, 1,37, 4, 2, 1,22, 3, 1,53, 1,37, 5, 1,37, 6, + /* plane 0, page 83 */ + 0, 255, /* first, last */ + 3, 1,54,15, 1,16, 0, 0, 0, 3, 2, 3, 3, 2, 2, 1,37,93, 1,37,94, 3, 2, 4, + 1,39,42, 2, 3,19, 2, 5,54, 2, 5,55, 4, 5,49, 1,48,17, 2,14,17, 1,57,17, + 1,57,16, 2,26,39, 2,26,38, 6,48,84, 3,48,24, 1,36,17, 1,37, 7, 1,38, 1, + 4,16,62, 1,57,18, 2, 1, 4, 4, 1,69, 2, 1,45, 1,38, 2, 3, 2, 6, 2, 2, 2, + 1,39,44, 1,39,43, 2, 2, 1, 1,41,26, 3,68,48, 3, 4,69, 0, 0, 0, 3,11,41, + 4, 8,46, 4, 8,48, 1,52,45, 4,11,88, 4,16,63, 2,19,82, 0, 0, 0, 1,67,30, + 2,41,12, 1,72, 4, 3,38, 3, 3,43,20, 2,54,37, 3,52,36, 3,60,20, 2,72,74, + 3, 1, 9, 1,37, 8, 3, 1,55, 3, 4,70, 2, 5,56, 2, 9,22, 1,57,21, 1,57,19, + 1,57,20, 1,36,18, 4, 1,16, 1,36,37, 1, 4,31, 1,37,11, 3, 1,57, 1,37,10, + 1,37, 9, 1,38, 5, 1,38, 4, 3, 3,10, 2, 1,46, 2, 2, 3,15, 2,12, 3, 3,11, + 3, 3,13, 1,44,24, 1,44,21, 1,44,23, 1,44,22, 3, 7,67, 0, 0, 0, 1,48,18, + 3,11,42, 4,16,64, 1,62,27, 4,70,16, 1,36,19, 3, 1,58, 1,37,12, 3, 2, 7, + 1,38, 7, 1,38, 6, 0, 0, 0, 2, 3,20, 4, 3,45, 3,68,49, 1,44,25, 3,10,60, + 4,16,68, 3, 1,10, 4, 1,17, 0, 0, 0, 2, 1,23, 3, 2, 8, 1,38, 9, 1,38, 8, + 1,39,45, 1,39,46, 2, 3,21, 1,41,27, 3, 4,71, 1,41,28, 3, 7,69, 1,44,26, + 1,44,27, 1,44,28, 3, 7,70, 1,48,19, 2, 9,23, 3,11,43, 4,16,69, 1,52,46, + 3,32,39, 0, 0, 0, 2, 1, 5, 4, 1,36, 1,37,13, 0, 0, 0, 3, 1,59, 4, 1,71, + 4, 1,70, 3, 2, 9, 2, 2, 4, 3, 3,15, 0, 0, 0, 0, 0, 0, 2, 3,22, 2, 3,23, + 0, 0, 0, 0, 0, 0, 2, 5,57, 3, 7,71, 2, 5,58, 0, 0, 0, 2, 9,25, 2, 9,24, + 2, 9,27, 2, 9,26, 1,48,20, 3,68,50, 2,19,83, 1,52,48, 2,14,18, 1,52,47, + 3,20,52, 4,16,72, 0, 0, 0, 0, 0, 0, 2,26,40, 1,62,28, 3,26, 8, 2,26,41, + 3,26, 7, 3,32,42, 3,32,41, 3,32,40, 2,41,13, 1,72, 5, 3,38, 5, 4,28,32, + 3,38, 6, 3,43,21, 1,76,16, 3,52,37, 2,69,27,15,77,14, 3, 1,11, 3, 1,60, + 4, 1,37, 2, 1,24, 3, 2,10, 1,38,10, 0, 0, 0, 4, 2,40, 3, 3,17, 0, 0, 0, + 4, 5,57, 3, 7,73, 3, 7,74, 1,57,22, 3,20,53, 3,26, 9, 0, 0, 0, 0, 0, 0, + 1,36,20, 1,36,38, 1,37,15, 1,37,14, 3, 1,62, 1,37,16, 3, 1,64, 4, 1,73, + 3, 2,11, 0, 0, 0, 3, 3,19, 4, 3,47, 1,44,30, 3, 7,75, 1,44,29, 1,44,31, + 0, 0, 0, 3,11,48, 3,11,47, 1,48,21, 3,11,46, 3,11,45, 6,21,88, 1,52,49, + 3,32,43, 2,54,38, 1,86,27, 1,36,39, 1,38,12, 1,38,27, 1,38,22, 4, 1,76, + 1,38,17, 1,38,16, 1,38,23, 1,38,21, 1,38,14, 1,38,28, 1,38,15, 1,38,11, + 1,38,26, 1,38,25, 1,38,24, 1,38,13, 3, 2,17, 1,38,20, 3, 2,13, 3, 2,14, + 1,38,19, 3, 2,15,15, 1,48, 1,38,29, 1,38,18, 4, 1,74, 0, 0, 0, 3, 3,21, + /* plane 0, page 84 */ + 0, 255, /* first, last */ + 3, 3,23, 1,39,52, 4, 2,44, 1,39,58, 1,39,54, 3, 3,25, 1,39,60, 2, 2, 5, + 1,39,57, 1,39,47, 1,39,50, 1,39,53, 1,39,49, 1,39,56, 1,39,59, 1,39,48, + 1,39,51, 1,39,55, 1,39,61, 3, 3,26, 0, 0, 0, 3, 3,27, 3, 3,20, 0, 0, 0, + 2, 3,32, 2, 3,29, 3, 4,86, 1,41,41, 2, 3,30, 1,41,29, 1,41,31, 1,41,55, + 1,41,50, 3, 4,89, 3, 4,94, 3, 4,85, 2, 3,37, 2, 3,31, 1,41,33, 1,41,35, + 2, 3,36, 1,41,42, 2, 3,26, 1,41,54, 1,41,56, 1,41,30, 1,41,47, 3, 5, 4, + 2, 3,24, 1,41,53, 3, 4,87, 1,41,38, 3, 4,91, 1,41,48, 1,41,49, 2, 3,25, + 1,41,46, 1,41,44, 3, 4,80, 1,41,45, 1,41,51, 2, 3,33, 1,41,32, 3, 5, 1, + 1,41,52, 2, 3,35, 1,41,40, 1,41,37, 3, 4,83, 2, 3,28, 1,41,36, 2, 3,38, + 1,41,39, 3, 4,92, 1,41,43, 3, 4,88, 3, 4,84, 3, 4,77, 1,41,34, 2, 3,34, + 3, 4,93, 3, 5, 2, 0, 0, 0, 0, 0, 0, 2, 3,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 5, 3, 0, 0, 0, 0, 0, 0, 4, 5,68, 4, 5,67, 3, 7,78, + 2, 5,75, 2, 5,74, 1,44,49, 2, 5,77, 2, 5,79, 2, 5,68, 2, 5,71, 2, 5,78, + 1,44,50, 3, 7,84, 3, 7,88, 2, 5,65, 2, 5,69, 3, 7,85, 4, 5,63, 2, 5,73, + 2, 9,42, 1,44,45, 2, 9,46, 1,44,32, 2, 5,70, 1,44,33, 1,44,46, 1,44,39, + 1,44,35, 3, 7,81, 2, 5,66, 1,44,38, 1,44,43, 1,44,52, 2, 5,67, 2, 5,60, + 1,44,37, 2, 5,61, 2, 5,63, 4, 5,64, 1,44,40, 3, 7,76, 1,44,42, 2, 5,59, + 2, 5,64, 3, 7,80, 3, 7,89, 1,44,51, 1,44,47, 2, 5,72, 1,44,53, 3, 7,83, + 1,44,44, 2, 5,62, 1,44,41, 3, 7,79, 3, 7,87, 1,44,36, 1,44,34, 0, 0, 0, + 2, 5,76, 0, 0, 0, 1,44,48, 0, 0, 0,15, 5,81, 0, 0, 0, 3,11,60, 3,11,61, + 2, 9,41, 2, 9,29, 2, 9,44, 3,11,55, 3,11,57, 2, 9,31, 1,48,28, 1,48,42, + 1,48,24, 1,48,41, 1,48,33, 1,48,38, 1,48,22, 2, 9,30, 2, 9,36, 1,48,37, + 2, 9,48, 1,48,39, 3,11,59, 1,48,29, 3,11,52, 3,11,62, 2, 9,38, 2, 9,35, + 1,48,27, 3,11,49, 2, 9,28, 1,48,40, 2, 9,43, 1,48,32, 2, 9,45, 1,48,43, + 1,48,23, 1,48,34, 1,48,31, 2, 9,33, 1,48,35, 2, 9,39, 2, 9,40, 1,48,30, + 1,48,36, 1,48,26, 3,11,53, 3,68,52, 3,11,67, 3,11,65, 1,48,25, 2, 9,32, + 3,11,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9,37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,11,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9,47, 0, 0, 0, + 2,14,38, 1,52,62, 2,14,20, 4,12,13, 2,14,25, 1,52,55, 1,52,66, 2,14,23, + 1,52,50, 1,52,60, 1,52,65, 2,14,30, 4,12, 6, 1,52,61, 1,52,64, 3,15,87, + 3,16, 1, 2,14,33, 1,52,56, 2,14,24, 3,15,84, 3,15,88, 3,16, 2, 2,14,36, + 2,14,37, 3,15,89, 1,52,58, 2,14,35, 1,52,54, 1,52,69, 4,12, 9, 2,14,27, + /* plane 0, page 85 */ + 0, 255, /* first, last */ + 3,15,91, 1,52,52, 3,15,90, 2,14,40, 2,14,28, 2,14,32, 1,52,57, 1,52,68, + 2,14,29, 1,52,63, 2,14,34, 2,14,41, 2,20, 4, 3,15,83, 2,14,39, 1,52,70, + 1,52,51, 2,14,31, 2,14,22, 3,15,86, 1,52,59, 4,12, 8, 4,12,14, 2,14,21, + 3,15,94, 3,16, 5, 2,14,26,15, 9,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,14,34,15,14,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,14,19, 1,52,67, + 3,71, 1, 3,20,63, 2,19,90, 3,20,72, 1,57,41, 2,20,10, 1,57,39, 1,57,36, + 2,20, 1, 1,57,32, 2,20, 5, 1,57,43, 2,19,89, 2,19,94, 2,19,93, 1,52,53, + 1,57,38, 2,20, 8, 3,20,70, 2,20,11, 2,19,86, 4,16,87, 1,62,46, 3,20,71, + 2,20,12, 1,57,44, 4,16,82, 1,57,30, 1,57,27, 2,20, 3, 1,57,24, 4,16,84, + 2,20, 9, 3,20,59, 1,57,31, 2,20,13, 3,20,56, 2,19,87, 2,20, 7, 1,57,34, + 2,19,88, 2,19,91, 2,20, 2, 3,20,66, 3,20,65, 1,57,35, 1,57,33, 1,57,45, + 3,20,55, 3,26,22, 3,20,68, 4,16,75, 1,57,40, 3,20,62, 1,57,28, 1,58,86, + 4,16,90, 1,57,29, 2,19,92, 1,57,42, 1,57,37, 2,20, 6, 1,57,26, 0, 0, 0, + 3,20,57, 0, 0, 0, 1,57,25, 3,68,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,68,54, 3,71, 2, 3,68,53, 0, 0, 0, 2,19,84, 2,19,85, 2,26,46, + 0, 0, 0, 0, 0, 0, 3,26,28, 1,62,29, 1,62,32, 2,26,57, 1,62,52, 2,26,60, + 1,62,30, 2,26,53, 1,62,36, 1,62,42, 1,65,35, 3,26,17, 3,26,24, 1,62,40, + 2,26,50, 1,62,53, 1,62,33, 1,62,41, 2,26,58, 2,33,92, 2,26,63, 2,26,51, + 4,22,60, 2,26,42, 2,26,55, 2,26,49, 1,62,39, 2,26,61, 3,26,14, 3,26,10, + 1,62,35, 1,62,55, 1,62,48, 3,26,19, 1,62,37, 1,62,34, 3,26,32, 1,62,45, + 3,26,20, 2,26,62, 2,26,48, 2,26,54, 2,26,56, 2,26,44, 2,26,59, 1,62,31, + 2,26,43, 3,26,34, 1,62,38, 1,62,54, 1,62,50, 2,26,45, 1,62,44, 3,26,27, + 15,25,81, 1,62,51, 1,62,47, 1,62,43, 3,26,15, 2,26,52, 6,39, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,71, 3, 1,62,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,33,90, + 2,33,86, 3,32,49, 2,34, 7, 2,33,79, 2,33,88, 1,67,44, 1,67,45, 1,67,37, + 2,34, 3, 1,67,47, 2,33,84, 2,33,83, 2,33,81, 2,34, 5, 1,67,35, 2,33,93, + 2,33,82, 1,67,38, 2,33,91, 1,67,33, 2,33,87, 2,33,94, 2,34, 2, 3,32,46, + 4,28,43, 2,34, 6, 1,67,42, 2,33,80, 1,67,36, 2,33,85, 3,26,11, 1,67,31, + 6,49,35, 1,67,43, 2,34, 1, 1,67,39, 1,67,40, 1,67,46, 1,67,34, 1, 3, 1, + 1,67,32, 2,33,89, 3,32,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,71, 5, 1,67,41, + 3,71, 4,15,32,66, 2,34, 4, 0, 0, 0, 3,68,56, 0, 0, 0, 1,72,21, 1,72,16, + 3,38,14, 2,41,28, 2,41,24, 3,38, 8, 2,41,18, 1,72,10, 1,72, 6, 2,41,27, + /* plane 0, page 86 */ + 0, 255, /* first, last */ + 1,72, 7, 2,41,21, 2,41,23, 3,38, 9, 2,41,26, 3,38,22, 1,72,12, 3,38,12, + 1,72,19, 1,72,13, 4,34,55, 3,38,10, 2,41,16, 1,72,14, 1,72,15, 2,41,19, + 1,72,20, 3,38,20, 2,41,17, 2,41,22, 1,72,11, 2,41,15, 1,72,17, 1,72, 9, + 3,38,19, 4,34,43, 0, 0, 0, 1,72, 8, 2,41,20, 2,41,25, 3,38,17, 1,72,18, + 3,68,58, 0, 0, 0, 3,68,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,38,48, 2,41,14, + 3,38,16, 1,76,23, 2,47,78, 3,43,33, 2,47,75, 3,43,24, 1,76,17, 1,76,29, + 1,76,30, 3,43,29, 1,76,20, 2,47,73, 1,76,22, 2,47,65, 1,76,28, 3,43,36, + 2,47,77, 1,76,19, 2,47,79, 1,76,18, 4,41,17, 2,47,74, 2,47,76, 1,76,21, + 2,47,72, 2,47,66, 2,47,63, 4,41,14, 3,43,30, 2,26,47, 2,47,69, 3,43,23, + 2,47,62, 2,47,68, 2,47,67, 3,43,27, 2,47,64, 3,43,35, 1,76,25, 3,43,37, + 3,43,32, 3,38,21, 3,43,28, 1,76,24, 3,43,25, 7, 1,67, 3,43,31, 1,76,26, + 2,47,70, 1,80,27, 2,47,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,54,47, 3,48,31, + 2,54,40, 3,48,32, 1,80,39, 2,54,44, 1,80,31, 1,80,35, 2,54,43, 3,48,27, + 1,80,34, 1,80,30, 1,80,33, 1,80,28, 1,80,38, 2,54,45, 2,54,41, 1,80,37, + 2,54,39, 1,80,36, 2,54,46, 2,54,42, 1,76,27, 4,47,81, 1,80,40, 2,54,48, + 1,80,32, 1,80,29,15,51,61, 3,48,29, 0, 0, 0, 3,52,40, 2,60,50, 2,60,52, + 1,83,38, 2,60,53, 2,60,51, 2,60,49, 2,60,48, 1,83,40, 2,60,47, 1,83,41, + 4,53,84, 3,52,41, 3,52,39, 4,53,88, 2,60,45, 2,60,46, 1,83,37, 1,83,42, + 1,83,39, 3,68,61, 3,68,59, 2,60,44, 3,55,59, 1,86,28, 3,55,58, 2,65,40, + 2,65,38, 2,65,43, 2,65,41, 3,55,56, 2,65,39, 2,65,42, 3,55,57, 3,55,55, + 3,55,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,88,12, 2,69,30, 2,69,31, + 1,88,13, 4,63,45, 2,69,32, 2,69,28, 2,69,33, 2,69,29, 1,86,29, 3,58,13, + 3,68,62, 4,67,17, 2,72,75, 2,72,77, 1,89,68, 2,72,76, 1,89,67, 1,89,66, + 3,71, 6, 3,71, 7, 3,68,60, 3,62, 6, 1,89,69, 2,75,51, 2,75,52, 4,70,20, + 1,90,69, 1,90,68, 1,90,70, 2,75,50, 3,71, 8, 2,77,38, 2,77,37, 3,63,32, + 1,91,57, 1,91,59, 1,91,58, 2,77,39, 1,92,20, 2,80,20, 0, 0, 0, 4,74,36, + 4,74,35, 1,92,61, 3,64,81, 2,80,19, 2,80,92, 0, 0, 0, 0, 0, 0, 2, 1,10, + 3, 1,87, 4, 1,79, 1,38,31, 1,38,30, 4, 1,77, 1,39,64, 1,39,63, 2, 2, 7, + 1,39,62, 2, 2, 6, 0, 0, 0, 3, 3,30, 1,41,59, 2, 3,41, 3, 5,12, 2, 3,40, + 15, 3,48, 3, 5, 6, 1,41,57, 1,41,60, 3, 5,11, 3, 5,10, 2, 3,39, 3, 5, 9, + 1,41,58, 3, 5,40, 3, 5, 7, 3, 5, 8, 0, 0, 0, 0, 0, 0, 3, 8, 2, 2, 5,80, + 3, 7,93, 2, 5,81, 1,44,54, 3, 7,92, 3, 8, 1, 3, 7,91, 0, 0, 0, 1,48,44, + /* plane 0, page 87 */ + 0, 255, /* first, last */ + 3,11,69, 2,14,42, 2,14,43, 1,52,71, 1,52,72, 3,16, 7, 0, 0, 0, 2,20,15, + 1,57,46, 1,57,48, 2,20,14, 1,57,47, 2,26,64, 1,62,56, 3,26,36, 3,26,35, + 4,22,72, 4,28,50, 1,67,48, 1,67,49, 2,34, 8, 3,32,50, 1,72,23, 3,38,23, + 1,72,22, 0, 0, 0, 2,47,80, 2,54,50, 2,54,49, 3,63,33, 2,81,58, 1,36,40, + 2, 1,25, 3, 1,65, 2, 1,47, 2, 1,48, 3, 2,20, 4, 1,80, 0, 0, 0, 4, 1,81, + 1,39,67, 1,39,71, 2, 2, 9, 4, 2,49, 1,39,69, 1,39,68, 2, 2, 8, 1,39,70, + 1,39,66, 3, 3,33, 3, 3,34, 1,39,65, 2, 2,10, 3, 3,31, 3, 3,32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,41,70, 3, 5,17, 3, 5,30, 1,41,67, 3, 5,16, + 1,41,63, 2, 3,42, 3, 5,32, 3, 5,22, 3, 5,15, 2, 3,43, 3, 5,28, 1,41,65, + 3, 5,13, 2, 3,45, 1,41,61, 2, 3,46, 2, 3,44, 1,41,64, 1,41,66, 1,41,69, + 1,41,68, 1,41,62, 2, 3,47, 3, 5,18, 3, 5,33, 3, 5,34, 3, 5,19, 3, 5,24, + 3, 5,23, 3,68,63, 0, 0, 0,15, 3,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5,21, + 0, 0, 0, 1,44,59, 2, 5,94, 3, 8, 5, 1,44,61, 3, 8, 3, 1,44,60, 3, 8, 6, + 2, 6, 1, 1,44,58, 1,44,57, 2, 5,85, 4, 5,73, 2, 5,84, 3, 8, 8, 2, 5,82, + 2, 5,87, 2, 5,86, 2, 5,83, 2, 5,92, 2, 5,93, 2, 5,90, 2, 5,88, 1,44,56, + 3, 8, 9, 4, 5,70, 4, 5,72, 2, 5,91, 1,44,62, 2, 6, 2, 4, 5,69, 3, 8,10, + 2, 5,89, 3, 8, 4, 1,48,45, 1,44,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,78, + 15, 6,19, 0, 0, 0, 3,68,64, 1,48,46, 2, 9,53, 3,11,73, 3,11,72, 2, 9,59, + 3,11,76, 3,11,71, 3,11,74, 1,48,52, 2, 9,57, 2, 9,63, 3,11,81, 2, 9,54, + 2, 9,58, 2, 9,60, 2, 9,62, 2, 9,56, 3,11,80, 2, 9,55, 2, 9,50, 2, 9,51, + 1,48,47, 3,11,75, 1,48,49, 1,48,48, 2, 9,52, 2, 9,61, 3,11,77, 3,11,82, + 3,11,78, 4, 8,64,15, 9,74,15, 9,81, 3,11,70, 0, 0, 0, 1,48,51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,62, 2, 9,49, 2,14,53, 3,16,10, + 2,14,52, 2,14,57, 2,14,48, 3,16,16, 2,14,51, 2,14,50, 3,16,15, 2,14,54, + 3,16,24, 2,14,58, 1,52,73, 1,52,76, 3,16,20, 3,16,21, 2,14,49, 2,14,55, + 3,16,19, 3,16, 8, 3,16,23, 1,52,75, 2,14,44, 3,16,11, 1,48,50, 2,20,29, + 2,14,56, 3,16,22, 2,14,47, 4,12,19, 1,52,74, 2,14,46, 0, 0, 0,15,14,60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,16,18, 2,20,20, 3,20,78, 3,20,81, 1,57,49, + 1,57,53, 2,20,36, 2,20,18, 2,20,32, 1,57,54, 2,20,34, 3,20,82, 2,20,40, + 3,20,84, 2,20,44, 3,20,73, 4,16,91, 2,20,35, 2,20,23, 2,20,31, 3,20,75, + 2,20,45, 2,20,43, 2,20,33, 2,20,28, 2,20,21, 2,26,72, 2,20,19, 1,57,58, + 2,20,26, 1,57,59, 1,57,55, 2,20,16, 2,20,38, 2,20,24, 3,20,79, 3,20,85, + /* plane 0, page 88 */ + 0, 255, /* first, last */ + 2,20,22, 2,20,41, 1,57,56, 3,20,86, 2,20,47, 1,57,50, 1,57,52, 2,20,30, + 2,20,25, 1,52,77, 1,57,51, 2,20,27, 2,20,42, 2,20,46, 2,20,37, 3,68,65, + 2,20,39, 0, 0, 0, 3,68,66, 3,68,67, 2,20,17, 0, 0, 0, 0, 0, 0, 4,22,73, + 3,26,42, 2,26,67, 3,26,37, 2,26,76, 2,26,75, 1,62,64, 2,26,68, 3,26,39, + 1,62,65, 1,62,63, 3,26,48, 2,26,70, 1,62,60, 2,26,74, 3,26,44, 2,26,69, + 2,26,71, 2,26,65, 1,62,58, 4,22,79, 2,26,84, 2,26,83, 2,26,80, 1,62,57, + 1,62,61, 1,62,62, 2,14,45, 2,26,77, 1,62,59, 1,57,57, 2,26,79, 2,26,66, + 2,26,82, 2,26,81, 3,26,46, 2,26,85, 3,26,41, 2,34,22, 3,26,43, 2,26,78, + 15,25,93, 0, 0, 0,15,25,94, 4,28,55, 4,22,77, 4,22,81, 0, 0, 0, 3,68,68, + 2,26,73, 2,34,14, 1,67,59, 1,67,62, 1,67,57, 2,34,13, 2,34,17, 2,34,12, + 3,32,55, 1,67,51, 1,67,61, 2,34, 9, 1,67,55, 2,34,16, 3,32,59, 1,67,53, + 1,67,52, 2,34,19, 1,67,54, 2,34,21, 3,32,54, 2,34,18, 1,67,50, 3,32,62, + 3,32,60, 3,32,56, 1,67,60, 2,34,23, 2,34,11, 2,34,20, 3,32,61, 4,28,51, + 2,34,10, 3,32,58, 3,32,57, 1,67,56, 3,32,52, 1,67,58, 0, 0, 0, 2,34,15, + 0, 0, 0, 2,34,24, 3,38,35, 3,38,30, 2,41,36, 1,72,24, 2,41,42, 3,38,34, + 3,38,28, 1,72,29, 2,41,38, 2,41,45, 2,41,30, 1,72,31, 1,72,25, 2,41,35, + 1,76,31, 2,41,34, 2,41,43, 1,72,26, 3,38,29, 1,72,30, 2,41,33, 2,41,39, + 2,41,44, 2,41,29, 1,72,28, 2,41,37, 3,38,26, 3,38,37, 2,41,41, 2,41,47, + 2,41,31, 2,41,40, 3,38,24, 1,72,27, 2,41,46, 3,38,33, 3,38,36, 3,38,32, + 2,41,32, 0, 0, 0, 4,34,57, 3,68,69, 1,76,35, 2,47,82, 1,76,33, 1,76,32, + 2,47,84, 2,47,89, 3,43,38, 2,47,85, 3,43,48, 2,47,88, 1,76,38, 3,43,49, + 1,80,14, 1,76,37, 3,43,43, 2,47,81, 2,47,87, 3,38,31, 1,76,36, 2,47,86, + 3,43,45, 2,47,83, 3,43,41, 1,76,34, 3,43,47, 3,43,44, 0, 0, 0, 3,43,39, + 0, 0, 0, 0, 0, 0, 2,54,55, 3,48,42, 2,54,57, 2,54,52, 1,80,42, 2,54,54, + 3,48,43, 1,80,41, 2,54,56, 3,48,40, 3,48,44, 1,80,44, 2,54,58, 1,80,43, + 2,54,51, 2,54,53, 3,48,41, 0, 0, 0, 0, 0, 0, 3,52,43, 1,83,46, 2,60,56, + 3,52,44, 1,83,45, 2,60,57, 1,83,44, 2,60,55, 1,83,43, 2,60,54, 0, 0, 0, + 1,86,31, 1,86,30, 2,69,34, 2,69,36, 3,58,15, 2,69,35, 1,88,14, 1,88,15, + 3,58,14, 7,38,37, 1,88,16, 2,72,78, 1,89,70, 0, 0, 0, 3,62, 8, 2,79, 2, + 2,79, 1, 1,92,62, 0, 0, 0, 1,36,41, 1,37,17, 0, 0, 0, 3, 3,35, 1,41,71, + 3, 5,37, 3, 5,35, 3, 5,36, 3, 8,13, 2, 9,64, 3,11,87, 0, 0, 0, 3,20,87, + 0, 0, 0, 1,62,66, 1,62,67, 3,26,50, 2,34,25, 1,72,32, 2,41,48, 2,47,90, + /* plane 0, page 89 */ + 0, 255, /* first, last */ + 3,68,70, 3,48,45, 3, 1,25, 2, 1,26, 3, 2,21, 3, 3,36, 2, 3,48, 0, 0, 0, + 3,11,90, 3,11,89, 3, 1,26, 3, 5,38, 2, 6, 3, 2, 9,65, 2,14,59, 1,52,78, + 3,38,38, 3,69,64, 2,69,37, 4,63,50, 1,90,71, 1,36,42, 1,38,32, 2, 1,49, + 3, 2,22, 1,39,72, 1,39,73, 4, 2,50, 1,44,63, 4, 5,80, 0, 0, 0, 3,20,89, + 1,57,60, 5,23,29, 1,72,34, 3,32,63, 1,72,35, 1,72,33, 3,43,51, 1,36,43, + 4, 1,41, 1,37,18, 1,37,20, 1,37,19, 2, 1,27, 1,37,21, 1,38,33, 2, 1,50, + 3, 2,24, 1,38,34, 3, 2,23, 4, 1,82, 3, 2,25, 4, 2,51, 3, 3,39, 1,39,74, + 1,39,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,11, 3, 5,41, 1,41,72, 4, 3,66, + 2, 3,49, 0, 0, 0, 0, 0, 0, 4, 5,85, 1,44,67, 2, 6, 4, 4, 5,82, 1,44,65, + 1,44,66, 1,44,64, 2,14,60, 3, 8,14, 3, 8,15, 3,68,71, 1,48,56, 1,48,55, + 1,48,57, 1,48,54, 3,11,92, 2, 9,66, 1,44,68, 1,48,53, 0, 0, 0, 1,52,79, + 1,52,80, 4,12,24, 1,52,81, 3,20,91, 2,20,48, 3,20,92, 3,20,93, 4,17, 6, + 1,62,68, 2,26,86, 1,57,61, 3,26,51, 3,26,52, 4,22,89, 3,32,64, 1,67,63, + 3,32,65, 1,72,37, 1,72,36, 2,41,49, 3,38,40, 1,76,39, 1,80,45, 4,47,91, + 2,65,44, 2,77,40, 2,79, 3, 1,36,44, 1,38,35, 3, 2,27, 1,38,36, 2, 2,17, + 1,39,77, 1,39,80, 3, 3,43, 2, 2,15, 2, 2,13, 1,39,79, 2, 2,16, 2, 2,18, + 2, 2,12, 1,39,82, 1,39,81, 1,39,78, 1,39,76, 2, 2,14, 3, 3,45, 0, 0, 0, + 0, 0, 0, 3, 5,53, 1,41,83, 4, 3,71, 3, 5,44, 1,41,80, 2, 3,54, 2, 3,57, + 2, 3,56, 4, 3,73, 1,41,74, 1,41,82, 3, 5,43, 4, 3,74, 1,41,79, 2, 3,53, + 2, 3,51, 1,41,78, 3, 5,54, 3, 5,51, 3, 5,46, 1,41,73, 1,41,76, 3, 5,49, + 2, 3,52, 2, 3,59, 2, 3,55, 1,41,77, 1,41,81, 1,41,84, 2, 3,50, 2, 3,58, + 1,41,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8,33, 3, 8,19, 1,44,73, 1,44,81, + 3, 8,24, 2, 6,16, 2, 6, 9, 1,44,82, 2, 6,20, 2, 6, 5, 2, 6,12, 3, 8,37, + 3, 8,32, 1,44,72, 2, 6, 6, 1,44,70, 2, 6,13, 2, 6,17, 1,44,69, 3, 8,29, + 2, 6,18, 2, 6,11, 3, 8,23, 2, 6,14, 3, 8,21, 1,44,84, 1,44,75, 2, 6,21, + 2, 6,19, 3, 8,31, 1,44,80, 1,44,78, 2, 6,10, 1,44,77, 2, 6, 8, 2, 6, 7, + 1,44,76, 1,44,74, 1,44,83, 1,44,79, 1,44,71, 3,12, 6, 2, 6,15, 3, 8,38, + 1,48,59, 3,12,13, 1,48,66, 2, 9,80, 1,48,58, 2, 9,72, 2, 9,68, 3,12, 1, + 2, 9,84, 2, 9,67, 3,12,12, 1,48,61, 2, 9,77, 1,48,64, 1,48,67, 3,12,14, + 1,48,62, 2, 9,81, 1,48,65, 3,12, 3, 1,52,88, 2, 9,87, 2, 9,69, 3,12, 4, + 3,12, 5, 2, 9,71, 2, 9,78, 2, 9,82, 2, 9,86, 2, 9,83, 2, 9,76, 2, 9,79, + 3,12,11, 3,12, 9, 2, 9,73, 1,48,69, 2, 9,75, 2, 9,74, 2, 9,85, 1,48,60, + /* plane 0, page 90 */ + 0, 255, /* first, last */ + 2, 9,70, 1,48,68, 3,12,10, 1,48,63, 3,12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1,52,94, 2,14,68, 3,16,32, 1,52,93, 3,12, 7, 4,12,32, 2,14,66, + 4,12,30, 1,52,82, 3,16,47, 1,52,87, 3,16,42, 2,14,65, 2,14,62, 2,14,67, + 1,52,83, 2,14,61, 3,16,46, 1,52,86, 1,52,84, 3,16,30, 2,14,69, 1,52,85, + 1,52,89, 3,16,27, 3,16,37, 1,52,90, 3,16,40, 1,52,92, 3,16,50, 4,12,25, + 4,12,29, 1,52,91, 3,16,28, 3,21, 2, 3,21,24, 2,14,63, 2,14,64, 3,16,45, + 6,22,55, 3,16,43, 0, 0, 0, 2,14,70, 0, 0, 0, 2,20,55, 1,57,62, 2,27, 6, + 2,20,54, 2,20,73, 3,21, 8, 3,21, 4, 1,57,68, 3,21,17, 2,20,71, 3,21,19, + 1,57,67, 1,57,63, 2,20,80, 2,20,64, 2,20,67, 3,21,14, 1,57,71, 2,20,77, + 2,20,69, 1,57,64, 1,57,72, 3,21,10, 2,20,74, 2,20,72, 3,21,15, 3,21,27, + 2,20,57, 2,20,78, 2,20,66, 2,20,61, 3,21,26, 2,20,51, 2,20,79, 2,20,63, + 2,20,50, 3,21,25, 1,57,70, 2,20,68, 2,20,81, 2,20,65, 2,20,53, 2,20,58, + 2,20,49, 3,21, 7, 1,57,69, 3,21,28, 2,20,62, 2,20,59, 1,57,65, 2,20,52, + 3,21,16, 2,20,76, 1,57,66, 3,21,11, 2,20,60, 2,20,56, 3,21, 9, 3,21,20, + 2,20,75, 3,21,18,15,19,83, 3,21,23, 0, 0, 0, 3,21,21, 0, 0, 0, 1,62,69, + 2,26,93, 3,26,85, 2,26,90, 2,27,13, 2,27, 1, 2,27,14, 3,26,92, 1,62,71, + 3,26,67, 3,26,65, 3,26,56, 2,27,10, 2,27, 7, 3,26,59, 3,26,87, 3,26,82, + 3,26,57, 3,26,64, 2,27, 8, 2,27,11, 2,27,15, 3,26,91, 2,20,70, 2,27,17, + 2,34,45, 3,26,70, 1,62,72, 2,27,18, 2,26,88, 2,27, 4, 3,26,66, 2,27, 9, + 3,26,60, 3,26,62, 1,62,70, 1,62,73, 2,27,16, 2,27,19, 2,26,92, 2,26,89, + 3,26,83, 3,26,58, 2,26,91, 3,26,55, 3,26,90, 2,27, 2, 2,26,94, 1,62,74, + 3,26,54, 2,27,12, 3,26,89, 3,26,88, 2,27, 3, 0, 0, 0, 2,27, 5, 2,26,87, + 2,34,33, 2,34,31, 1,67,72, 1,67,70, 2,34,41, 2,34,32, 2,34,42, 2,34,38, + 2,34,30, 2,34,44, 2,34,29, 2,34,36, 1,67,69, 1,67,68, 1,67,67, 2,34,34, + 2,34,39, 1,67,64, 1,67,71, 3,32,71, 2,34,27, 3,32,70, 2,34,37, 2,34,26, + 2,34,35, 1,67,65, 2,34,40, 2,34,28, 1,67,66, 2,34,43, 3,32,68, 3,26,75, + 3,32,74, 3,68,72, 0, 0, 0, 3,68,73, 0, 0, 0, 2,41,53, 1,72,42, 1,72,41, + 1,72,43, 2,41,65, 2,41,55, 2,41,61, 2,41,50, 2,41,64, 2,41,63, 2,41,67, + 2,41,60, 1,72,38, 2,41,59, 1,72,44, 3,38,44, 2,41,52, 1,72,39, 3,38,42, + 2,41,66, 1,72,40, 2,41,54, 2,41,57, 2,41,62, 2,41,56, 2,41,51, 3,38,47, + 3,38,51, 0, 0, 0, 0, 0, 0, 2,41,58, 2,47,92, 1,76,43, 2,48, 1, 2,47,94, + 2,48, 3, 2,48, 5, 3,43,60, 1,76,41, 3,43,56, 2,47,93, 3,43,52, 2,47,91, + /* plane 0, page 91 */ + 0, 255, /* first, last */ + 3,43,62, 2,48, 6, 2,48, 4, 2,48, 2, 3,43,54, 2,48, 8, 3,43,58, 2,48, 7, + 1,76,45, 1,76,40, 3,43,59, 1,76,42, 1,76,44, 3,43,61, 3,43,63, 2,48, 9, + 2,54,65, 3,48,48, 3,48,51, 2,54,64, 2,54,63, 3,48,49, 2,54,66, 2,54,59, + 3,48,47, 2,54,60, 2,54,68, 2,54,61, 3,48,52, 1,80,46, 2,54,70, 3,48,46, + 2,54,69, 2,54,62, 3,48,54, 2,60,61, 1,83,49, 2,60,59, 2,60,64, 2,60,63, + 2,54,67, 3,52,48, 1,83,48, 3,52,46, 2,60,62, 2,60,58, 2,60,66, 2,60,65, + 1,83,47, 3,52,50, 2,60,60, 3,52,47, 1,80,47, 3,52,49, 0, 0, 0, 3,52,51, + 1,86,32, 3,58,17, 3,55,65, 3,55,62, 2,65,45, 2,69,38, 2,69,39, 2,69,40, + 1,89,71, 4,67,20, 3,60,22, 1,89,72, 3,60,25, 2,72,79, 3,60,26, 2,75,54, + 2,75,53, 3,62, 9, 3,63,34, 2,77,41, 2,77,42, 2,79, 4, 2,80,21, 3,64,83, + 1,36,45, 1,36,46, 4, 1,18, 1,36,47, 1,37,22, 1,38,37, 2, 2,19, 1,39,83, + 1,39,84, 0, 0, 0, 1,41,87, 1,41,88, 1,41,86, 1,41,85, 0, 0, 0, 1,44,85, + 3, 8,40, 4, 6, 2, 2, 6,22, 1,44,87, 1,44,86, 2, 6,23, 4, 6, 3, 3,68,74, + 4, 8,78, 1,48,70, 3,12,15, 1,53, 1, 2,14,71, 0, 0, 0, 2,20,83, 4,17,12, + 1,57,73, 1,62,76, 2,20,82, 1,62,75, 3,32,81, 1,72,45, 3,32,82, 2,41,68, + 1,80,48, 3,48,55, 1,83,50, 2,60,67, 3,58,20, 1,89,73, 3,60,27, 1,91,60, + 3, 1,27, 2, 1,51, 3, 2,29, 1,38,38, 2, 1,52, 1,39,87, 3, 3,48, 1,39,85, + 1,39,86, 1,39,88, 4, 3,79, 1,41,90, 1,41,89, 3, 5,58, 2, 3,60, 1,41,91, + 4, 6, 5, 0, 0, 0, 2, 3,61, 2, 6,24, 3, 8,44, 2, 6,25, 3, 8,42, 1,44,88, + 1,44,90, 1,44,92, 1,44,89, 1,44,93, 1,44,91, 3, 8,46, 3, 8,43, 3, 8,45, + 0, 0, 0, 0, 0, 0, 1,48,74, 1,48,71, 1,48,73, 1,48,75, 1,48,72, 2,14,72, + 2, 9,88,15,10,25, 0, 0, 0, 3,12,18, 2,14,74, 2,14,73, 1,53, 7, 4,12,38, + 1,53, 3, 4,12,41, 6,22,70, 1,53, 4, 1,53, 6, 1,53, 8, 1,53, 5, 3,16,55, + 1,53,10, 1,53, 9, 4,12,40, 3,16,54, 3,16,53, 0, 0, 0,15,14,94, 1,57,78, + 2,20,85, 2,20,84, 1,57,77, 3,21,33, 1,57,76, 1,57,75, 1,57,79, 1,57,74, + 3,21,31, 0, 0, 0, 2,27,25, 2,27,22, 1,62,78, 2,27,21, 2,27,26, 4,23, 4, + 1,62,80, 2,27,24, 1,62,77, 1,62,79, 2,27,23, 3,26,94, 2,34,46, 3,32,84, + 2,34,47, 2,34,48, 3,32,85, 3,32,86, 3,32,83, 4,28,78, 1,72,46, 1,72,54, + 2,41,69, 1,72,48, 1,72,52, 2,41,70, 1,72,53, 1,72,49, 1,72,50, 1,72,47, + 1,72,51, 1,76,48, 2,27,20, 1,76,49, 1,76,47, 4,41,36, 1,76,46, 2,54,71, + 1,80,49, 2,60,68, 2,60,69, 3,58,21, 4,63,53, 1,88,17, 1,89,74, 3,62,10, + 1,36,48, 3, 2,30, 1,39,89, 0, 0, 0, 0, 0, 0, 3, 5,62, 3, 5,60, 3, 5,61, + /* plane 0, page 92 */ + 0, 255, /* first, last */ + 3, 8,48, 1,48,76, 0, 0, 0, 2,14,75, 1,53,11, 3,16,56, 3,16,57, 1,57,82, + 1,57,81, 1,57,80, 1,62,81, 1,62,82, 2,27,27, 1,72,55, 1,80,50, 1,36,49, + 2, 1,28, 1,37,23, 2, 1,53, 4, 1,83, 3, 2,31, 2, 2,20, 1,39,90, 4, 2,60, + 3, 3,50, 3, 8,49, 1,44,94, 3,12,20, 0, 0, 0, 0, 0, 0, 3,27, 4, 2,34,49, + 3,32,88, 3,69, 5, 1,36,50, 4, 1,43, 1,37,24, 2, 2,21, 0, 0, 0, 0, 0, 0, + 2, 3,62, 4, 6, 9, 2, 3,63, 3, 5,63, 1,41,92,15, 5,52, 0, 0, 0, 3,12,21, + 2,27,28, 1,62,83, 0, 0, 0, 2,34,50, 0, 0, 0, 4,41,41, 3,52,52, 1,83,51, + 1,36,51, 1,36,71, 1,37,25, 2, 1,54, 1,38,39, 3, 3,52, 1,42, 2, 1,42, 1, + 1,41,93, 1,41,94, 0, 0, 0, 0, 0, 0, 2, 6,26, 1,45, 2, 1,45, 3, 2, 6,27, + 1,45, 1, 3, 8,52, 3, 8,53, 1,48,80, 2, 9,89, 1,48,79, 1,48,77, 1,48,78, + 1,53,14, 1,53,12, 3,16,58, 3,16,59, 2,14,77, 1,53,13, 2,14,76, 3,68,75, + 1,53, 2, 2,20,86, 4,17,21, 3,21,35, 1,57,84, 1,57,85, 3,27, 6, 3,27, 5, + 1,57,83, 3,21,36, 1,72,56, 2,41,71, 1,76,50, 1,76,51, 0, 0, 0, 2,48,10, + 1,83,52, 2,65,46, 2,65,47, 3,58,24, 1,90,72, 2,80,22, 2, 1,11, 1,37,26, + 4, 2,63, 1,36,52, 0, 0, 0, 2, 1,56, 2, 1,55, 4, 1,86, 0, 0, 0, 3,68,76, + 3, 3,53, 1,39,91, 2, 2,23, 2, 2,24, 2, 2,22, 4, 2,64, 2, 2,25, 0, 0, 0, + 3, 3,58,15, 2,39, 0, 0, 0, 0, 0, 0, 3, 5,65, 3, 5,70, 2, 3,71, 4, 3,90, + 2, 3,66, 2, 3,68, 2, 3,70, 2, 3,67, 1,42, 6, 2, 3,64, 3, 5,66, 2, 3,65, + 1,42, 3, 1,42, 4, 2, 3,69, 2, 3,72, 1,42, 5, 2, 3,73, 0, 0, 0,15, 3,92, + 0, 0, 0,15, 3,88, 0, 0, 0, 0, 0, 0, 3, 5,67, 2, 6,41, 3, 8,61, 2, 6,35, + 2, 6,30, 1,45, 5, 2, 6,38, 2, 6,36, 2, 6,29, 2, 6,42, 2, 6,45, 2, 6,40, + 2, 6,33, 1,45, 7, 2, 6,39, 1,45, 8, 2, 6,34, 2, 6,37, 2, 6,28, 2, 6,32, + 2, 6,44, 1,45, 9, 4, 6,15, 1,45,10, 3, 8,62, 2, 6,31, 2, 6,43, 1,45, 4, + 1,45, 6, 3, 8,60, 3, 8,63, 3, 8,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 6,20, 3, 8,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,10,12, 2,10, 5, + 2,10,11, 2,10, 4, 2,10, 6, 2, 9,94, 2, 9,92, 3,12,31, 2,10,13, 2,10,10, + 2, 9,90, 3,12,27, 1,48,82, 2,10, 8, 2,10, 9, 3,68,77, 2,10, 7, 2, 9,93, + 2, 9,91, 1,48,81, 2,10, 3, 2,10, 1, 3,12,28, 3,12,34, 2,10, 2, 2,10,14, + 0, 0, 0, 3,12,30, 3,12,33, 0, 0, 0, 0, 0, 0, 3,12,35, 3,12,29, 0, 0, 0, + 1,53,19, 3,16,67, 1,53,18, 3,16,63, 2,14,78, 1,53,15, 2,14,80, 3,16,68, + 1,53,20, 2,14,81, 4,12,64, 3,16,65, 1,53,23, 3,16,66, 1,53,21, 2,14,82, + 2,10,15, 2,14,84, 3,16,62, 1,53,17, 4,12,60, 1,53,16, 4,12,65, 2,14,79, + /* plane 0, page 93 */ + 0, 255, /* first, last */ + 2,14,83, 1,53,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,57,87, 1,57,86, + 3,21,43, 3,21,40, 3,21,39, 2,20,88, 2,20,92, 2,20,94, 1,57,88, 2,21, 3, + 3,21,49, 1,57,92, 2,21, 5, 3,21,50, 1,57,94, 3,21,47, 1,57,90, 1,58, 4, + 3,21,53, 1,58, 1, 2,20,90, 1,57,89, 3,27,11, 2,20,89, 2,20,87, 2,21, 7, + 2,20,91, 3,21,38, 1,57,91, 2,21, 6, 1,58, 2, 2,21, 2, 2,21, 1, 1,58, 3, + 2,20,93, 1,57,93, 3,21,46, 6,30,86, 3,21,42, 0, 0, 0, 2,21, 8, 3,21,52, + 2,21, 4, 2,27,43, 2,27,50, 2,27,39, 1,62,86, 2,27,35, 2,27,51, 2,27,29, + 2,27,48, 2,27,46, 2,27,40, 3,27,22, 2,27,49, 2,27,42, 3,27, 8, 2,27,34, + 2,27,52, 2,27,32, 2,27,45, 2,27,30, 3,27, 7, 2,27,53, 3,27,23, 1,62,87, + 3,27,10, 2,27,47, 2,34,53, 2,27,33, 1,62,84, 3,27,14, 2,27,37, 3,27,20, + 1,62,85, 2,27,36, 2,27,41, 3,27,19, 4,23,21, 2,27,38, 4,23,15, 3,27,17, + 0, 0, 0, 2,27,44, 0, 0, 0, 3,27,13, 0, 0, 0, 0, 0, 0, 2,34,57, 4,28,89, + 3,33, 1, 4,28,91, 2,34,60, 2,34,52, 3,32,92, 2,34,54, 3,32,90, 2,34,59, + 2,34,58, 1,67,73, 4,28,85, 2,27,31, 2,34,56, 3,32,89, 3,32,93, 1,67,74, + 4,28,84, 2,34,51, 2,34,55, 4,28,92, 4,28,88, 3,68,78, 0, 0, 0, 2,41,78, + 3,38,60, 2,41,85, 2,41,76, 3,38,52, 2,41,83, 2,41,74, 2,41,82, 2,41,86, + 2,41,73, 2,41,77, 2,41,72, 3,38,54, 1,72,57, 4,35,12, 2,41,75, 1,72,58, + 2,41,81, 2,41,80, 2,41,79, 3,38,57, 3,38,58, 2,41,84, 3,68,79, 3,43,69, + 3,43,70, 3,43,67, 2,48,14, 2,48,16, 1,76,53, 2,48,17, 3,43,75, 2,48,12, + 3,43,71, 2,48,11, 2,48,21, 3,43,73, 2,48,19, 1,76,52, 2,48,22, 2,48,13, + 2,48,18, 2,48,20, 2,48,15, 3,43,74, 3,43,72, 3,68,80, 3,48,56, 2,54,75, + 2,54,80, 2,54,74, 2,54,79, 3,48,59, 2,54,72, 2,54,82, 2,54,78, 2,54,83, + 2,54,77, 2,54,73, 2,54,81, 3,48,58, 2,54,84, 2,54,76, 3,68,81, 2,60,70, + 1,83,56, 3,52,55, 1,83,54, 3,52,57, 1,83,53, 1,83,55, 3,52,53, 3,68,82, + 2,65,48, 3,55,66, 2,68,30, 2,69,41, 3,58,25, 0, 0, 0, 2,72,80, 2,72,81, + 3,60,29, 1,89,75, 3,60,28, 2,75,55, 3,60,30, 1,90,73, 4,70,27, 2,75,56, + 3,62,13, 2,77,44, 1,91,62, 3,63,35, 1,91,61, 2,77,43, 1,92,21, 3,64,16, + 2,79, 5, 4,75,72, 4,74,38, 3, 1,28, 4, 1,12, 1,36,53, 1,39,92, 2, 2,26, + 2, 3,74, 1,43,54, 1,58, 5, 3,21,55, 3,43,76, 1,36,54, 1,38,42, 1,38,41, + 1,38,40, 4, 2,67, 0, 0, 0, 1,42, 7, 0, 0, 0, 0, 0, 0, 1,53,24, 0, 0, 0, + 2,34,61, 1,36,55, 1,36,56, 1,36,57, 1,37,27, 3, 5,71, 3, 8,64, 1,48,83, + 4,12,68, 2,10,16, 3,12,37, 3,12,36, 0, 0, 0, 1,62,88, 1,36,58, 2, 1,29, + /* plane 0, page 94 */ + 0, 255, /* first, last */ + 3, 1,67, 4, 1,44, 1,38,43, 1,38,44, 2, 1,57, 0, 0, 0, 1,39,93, 5, 2,60, + 3, 3,60, 3, 5,72, 2, 3,75, 3, 5,75, 1,42, 8, 4, 4, 3, 2, 3,76, 0, 0, 0, + 0, 0, 0, 1,45,16, 3, 8,66, 3, 8,65, 2, 6,47, 1,45,14, 1,45,13, 2, 6,46, + 1,45,11, 2, 6,48, 1,45,12, 1,45,15, 0, 0, 0, 1,48,84, 3,12,38, 1,48,86, + 2,10,20, 2,10,17, 2,10,18, 2,10,19, 2,10,21, 1,48,85, 0, 0, 0, 0, 0, 0, + 2,14,86, 2,14,85, 3,16,70, 1,53,26, 3,16,73, 1,53,25, 3,16,72, 3,16,74, + 3,16,71, 0, 0, 0, 3,21,59, 1,58, 8, 2,21,10, 3,21,57, 1,58, 7, 1,58, 9, + 1,58, 6, 3,21,56, 3,21,58, 0, 0, 0, 0, 0, 0, 1,62,90, 2,21, 9, 5,23,92, + 1,62,91, 2,27,55, 3,25,89, 1,62,92, 2,27,54, 1,62,89, 3,27,26, 3,27,27, + 3,27,29, 0, 0, 0, 2,34,64, 2,34,66, 1,67,75, 2,34,65, 2,34,63, 2,34,62, + 4,29,10, 4,35,21, 3,38,61, 2,41,89, 1,72,63, 1,72,61, 4,35,16, 1,72,62, + 2,41,87, 2,41,88, 3,43,77, 1,72,59, 2,48,26, 2,48,24, 3,43,80, 1,76,55, + 2,48,25, 1,76,56, 1,76,54, 1,72,60,15,46,62, 3,68,83, 2,54,87, 2,54,85, + 2,54,86, 2,48,23, 2,60,72, 1,83,57, 2,60,71, 2,65,49, 2,65,50, 2,54,88, + 2,69,42, 3,70,87, 1,36,59, 1,38,45, 1,40, 1, 2, 2,27, 1,39,94, 3, 8,67, + 1,45,17, 1,67,76, 3, 1,29, 1,37,28, 1,38,46, 1,48,87, 1,62,93, 3, 1,30, + 2, 1,58, 3, 2,39, 2, 1,59, 3, 2,40, 2, 2,28, 3,70,88, 0, 0, 0, 1,42,10, + 2, 3,80, 2, 3,78, 1,42,11, 2, 3,77, 2, 3,79, 2, 3,81, 4, 4, 8, 1,42, 9, + 3, 5,78, 0, 0, 0, 3, 5,77, 0, 0, 0, 0, 0, 0, 1,45,21, 1,45,22, 1,45,19, + 3, 8,69, 3, 8,71, 1,45,18, 2,10,25, 1,45,20, 3, 8,72, 0, 0, 0, 0, 0, 0, + 1,48,88, 3,12,40, 2,10,24, 2,10,26, 2,10,23, 2,10,27, 1,48,89, 1,53,29, + 2,14,87, 3,16,76, 2,14,89, 1,53,27, 2,14,90, 1,53,28, 2,14,88, 3,16,75, + 2,10,22, 2,21,11, 2,21,14, 2,21,15, 2,21,12, 1,58,13, 1,58,12, 1,58,10, + 1,58,11, 2,21,13, 3,21,65, 3,21,64, 0, 0, 0, 3,27,31, 1,58,14, 3,27,32, + 3,27,30, 1,63, 1, 1,63, 2, 6,40,37, 1,63, 3, 2,34,67, 2,34,69, 2,34,71, + 1,67,78, 1,67,77, 1,62,94, 2,34,70, 2,34,68, 3,68,84, 2,41,93, 3,38,65, + 3,38,64, 2,41,91, 2,42, 3, 1,72,64, 2,42, 4, 2,42, 1, 1,72,65, 2,41,92, + 2,41,90, 2,42, 2, 1,76,58, 2,48,28, 2,41,94, 1,76,60, 2,48,29, 1,76,59, + 1,76,62, 2,48,30, 1,76,57, 1,76,61, 0, 0, 0, 2,54,93, 2,54,91, 2,54,90, + 2,54,92, 2,54,89, 3,48,60, 4,59, 1, 1,88,19, 3,68,85, 2,72,82, 2,72,83, + 3,60,31, 2,75,57, 2,77,45, 1,93, 2, 3, 1,31, 3, 3,65, 1,45,23, 1,42,12, + 3, 8,73, 3, 8,75, 1,48,90, 3,12,44, 3,12,43, 3,16,78, 1,36,60, 1,37,29, + /* plane 0, page 95 */ + 0, 255, /* first, last */ + 4, 1,45, 1,38,47, 2, 2,29, 3, 5,79, 1,42,13, 2, 3,82, 3, 8,77, 2,10,28, + 1,48,91, 0, 0, 0, 1,72,66, 1,36,61, 3, 1,68, 3, 2,41, 3, 3,66, 1,40, 2, + 15, 2,46, 3,27,34, 1,67,79, 1,36,62, 1,37,30, 1,37,31, 0, 0, 0, 1,38,49, + 1,38,48, 4, 2,75, 2, 2,30, 1,40, 3, 4, 2,76, 2, 3,83, 3, 5,81, 1,42,14, + 0, 0, 0, 3, 8,78, 2, 6,50, 2, 6,51, 2, 6,52, 3, 8,80, 1,45,24, 1,45,25, + 2, 6,49, 1,45,26, 0, 0, 0, 4, 9,12, 4,12,80, 1,48,92, 2,10,29, 3,12,45, + 2,14,92, 1,53,30, 3,16,79, 2,14,91, 3,21,66, 1,58,15, 2,21,16, 1,58,16, + 2,21,17, 3,21,67, 3,27,39, 3,27,37, 1,63, 4, 4,23,37, 3,27,36, 4,29,16, + 2,34,72,15,33,31, 3,33, 2, 2,42, 6, 2,42, 5, 0, 0, 0, 1,72,67, 4,41,62, + 1,76,63, 2,48,31, 1,80,51, 2,54,94, 1,83,58, 3,55,67, 1,91,63, 2,79, 7, + 3, 1,32, 3, 1,33, 3, 2,42, 3, 3,49, 2, 6,53, 3, 8,81, 2,10,30, 1,58,17, + 2,27,56, 1,67,80, 3,33, 3, 3,48,62,15,52,35, 3,55,68, 1,86,33, 0, 0, 0, + 3,65,68, 3, 1,34, 1,42,16, 3, 5,82, 1,42,15, 1,48,93, 3,12,48, 2,14,93, + 0, 0, 0, 1,58,19, 1,61, 9, 1,58,20, 1,58,18, 1,63, 5, 3,33, 4, 2,42, 7, + 1,72,68, 1,76,64, 3,63,37, 2, 1,12, 2, 2,31, 4, 2,77, 2, 3,85, 1,42,17, + 2, 3,84, 1,42,18, 4, 4,12, 0, 0, 0, 1,45,30, 2, 6,56, 2, 6,55, 1,45,29, + 1,45,27, 1,45,28, 2, 6,54, 3, 8,86, 3, 8,85, 1,49, 1, 2,10,31, 1,49, 4, + 1,48,94, 1,49, 6, 1,49, 2, 1,49, 3, 1,49, 5, 4, 9,17, 3,16,80, 3,16,82, + 1,53,33, 1,53,32, 1,53,31, 3,16,81, 3,68,86, 0, 0, 0, 2,21,19, 1,58,21, + 1,58,24, 1,58,22, 3,68,87, 2,21,18, 1,58,27, 4,17,51, 1,58,23, 2,21,20, + 1,58,26, 1,58,25, 4,17,50, 4,17,55, 4,23,42, 2,27,58, 2,27,57, 3,27,43, + 1,63, 8, 1,63, 6, 1,63, 7, 2,27,59, 1,67,81, 2,34,74, 1,67,82, 2,34,73, + 4,29,20, 4,35,31, 2,48,32, 3,38,67, 3,38,68, 1,76,66, 2,42, 8, 1,76,65, + 3,43,82, 1,72,69, 3,68,88, 2,55, 2, 2,55, 1, 1,83,59, 2,60,73, 2,69,43, + 2,72,84, 2,72,85, 3,62,15, 1,37,32, 4, 1,22, 1,38,50, 0, 0, 0, 3, 2,45, + 4, 2,81, 2, 1,60, 3, 2,44, 5, 2,70, 1,42,20, 1,42,22, 3, 5,88, 2, 2,34, + 2, 3,88, 2, 3,87, 2, 3,86, 3, 3,70, 2, 2,33, 2, 2,32, 1,40, 5, 1,42,21, + 1,42,19, 1,40, 4, 3, 3,71, 3, 3,73, 3, 5,87, 1,45,31, 2, 6,57, 3, 5,91, + 1,45,32, 2, 3,93, 4, 6,48, 2, 4, 1, 2, 3,94, 2, 6,58, 3, 5,86, 3, 5,84, + 2, 3,90, 3, 8,94, 1,42,26, 1,42,24, 3, 5,92, 2, 3,89, 2, 3,91, 2, 4, 3, + 3, 6, 2, 1,42,23, 3, 6, 1, 2, 3,92, 2, 4, 7, 1,45,34, 3, 5,93, 2, 4, 4, + 1,42,25, 3, 6, 3, 2, 4, 2, 2, 4, 5, 3, 5,90, 1,45,33, 3, 5,85, 1,45,35, + /* plane 0, page 96 */ + 0, 255, /* first, last */ + 2, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 8,88, + 3, 9, 2, 2, 6,78, 2, 6,65, 2, 6,63, 2, 6,77, 2, 6,72, 1,49,11, 1,45,36, + 2, 6,73, 2, 6,76, 1,49, 7, 2, 6,75, 1,45,37, 1,45,42, 1,45,40, 2, 6,66, + 4, 9,22, 2, 6,61, 2, 6,68, 1,45,47, 2, 6,79, 1,49, 8, 2, 6,69, 4, 6,47, + 1,49, 9, 1,45,43, 2, 6,71, 3,12,58, 2,10,46, 1,49,10, 2, 6,60, 1,45,44, + 1,49,12, 1,45,45, 1,45,41, 1,45,46, 2, 6,70, 2, 6,59, 2, 6,74, 1,45,38, + 3, 8,87, 3,12,59, 2, 6,62, 2, 6,67, 2, 6,64, 1,45,39, 3, 8,90, 2,10,32, + 4, 9,37, 2,10,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 1, 0, 0, 0, 0, 0, 0, + 2,10,43, 2,15, 3, 2,10,44, 1,49,18, 2,10,47, 2,10,37, 1,49,17, 2,10,39, + 4, 9,31, 2,10,40, 3,12,64, 3,16,89, 2,10,42, 1,49,13, 3,12,54, 3,16,83, + 1,53,37, 3,12,55, 3,12,61, 2,10,38, 2,10,34, 1,53,38, 3,16,94, 4, 9,30, + 2,10,48, 1,53,34, 2,15, 1, 2,10,41, 3,12,52, 2,14,94, 2,10,36, 2,10,45, + 3,12,63, 3,12,65, 1,49,16, 1,53,35, 1,49,22, 1,53,36, 2,10,49, 2,15, 2, + 1,49,15, 1,53,40, 1,49,21, 1,49,20, 1,49,19, 1,53,39, 2,10,50, 1,53,41, + 1,49,14, 4, 9,43, 2,10,35, 3,16,90, 3,16,88, 3,16,91, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,12,60, 0, 0, 0, 3,16,86, 1,58,28, + 2,15, 6, 2,15, 8, 4,13, 5, 2,15,10, 1,53,42, 1,53,48, 2,21,23, 2,15,14, + 2,15, 5, 1,58,30, 2,21,21, 3,17, 2, 1,53,47, 1,53,45, 2,15,16, 4,13,13, + 2,21,22, 4,13,12, 2,15, 7, 3,17, 5, 1,53,46, 2,15,11, 1,53,49, 2,15,13, + 3,21,72, 3,16,84, 1,53,44, 2,15,12, 2,15,15, 2,15, 9, 3,17, 7, 1,53,43, + 1,58,31, 3,21,81, 2,15, 4, 1,58,29, 3,21,82, 4,17,75, 3,17, 3, 3,17, 8, + 1,58,32, 3,17, 1, 3,21,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,17, 6, 0, 0, 0, + 2,21,25, 2,21,34, 1,63,11, 3,27,52, 1,58,34, 1,58,39, 1,63,12, 2,21,36, + 1,58,46, 2,27,61, 2,21,26, 1,58,38, 1,58,41, 1,58,36, 2,21,24, 2,21,38, + 2,21,41, 2,27,76, 4,17,72, 2,21,39, 2,27,65, 1,58,37, 1,58,44, 1,58,48, + 2,21,33, 2,27,60, 2,21,37, 1,58,33, 2,27,62, 2,21,40, 2,27,64, 2,21,29, + 3,21,74, 1,63, 9, 3,27,54, 2,21,27, 2,21,28, 1,58,43, 3,27,53, 3,21,78, + 1,58,42, 2,21,31, 1,58,47, 2,21,35, 1,58,40, 2,21,32, 3,21,89, 1,58,45, + 1,63,13, 1,63,10, 2,27,63, 3,27,56, 2,21,30, 3,27,57, 1,58,35, 3,21,86, + 3,21,88, 3,27,58, 3,27,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,21,84, 0, 0, 0, + 1,63,18, 1,63,22, 2,27,67, 1,67,87, 1,63,20, 2,27,71, 1,63,24, 2,34,75, + 2,27,73, 1,67,89, 1,63,16, 1,63,19, 2,27,74, 3,27,62, 2,27,75, 2,27,81, + /* plane 0, page 97 */ + 0, 255, /* first, last */ + 1,63,26, 1,67,90, 4,29,29, 2,27,77, 2,27,82, 2,27,70, 1,68, 6, 3,27,47, + 1,67,91, 1,63,25, 2,27,68, 2,27,83, 3,27,49, 1,68, 5, 1,63,23, 1,67,84, + 2,27,80, 3,27,61, 1,63,27, 2,27,72, 2,27,66, 1,63,17, 2,27,69, 5,31,16, + 2,27,78, 3,33,11, 1,67,83, 1,67,88, 1,63,14, 2,27,79, 3,27,65, 1,67,86, + 3,27,66, 3,27,67, 3,27,48, 1,63,15, 0, 0, 0, 3,68,89, 0, 0, 0, 1,68, 4, + 2,42,10, 2,34,86, 3,33, 9, 2,34,78, 2,42, 9, 4,29,25, 2,34,82, 2,34,84, + 3,33, 7, 3,33,12, 2,34,81, 3,38,79, 1,68, 3, 4,29,24, 2,34,80, 1,68, 7, + 3,38,78, 6,50,68, 3,33, 8, 2,42,25, 3,38,76, 3,33,14, 1,68, 2, 1,72,71, + 2,34,87, 2,42,11, 3,38,77, 3,33,10, 1,67,94, 2,34,79, 2,34,83, 1,72,70, + 1,67,85, 2,34,76, 2,34,77, 1,72,72, 1,67,93, 1,68, 1, 1,67,92, 2,34,85, + 3,68,90, 0, 0, 0, 2,42,15, 2,42,16, 2,42,21, 1,76,71, 2,42,28, 3,43,83, + 1,72,78, 3,43,94, 1,72,77, 2,42,23, 3,43,84, 1,76,70, 2,42,12, 1,72,76, + 3,38,81, 2,42,27, 1,72,74, 1,72,75, 3,43,92, 2,42,24, 2,48,49, 1,76,68, + 1,63,21, 3,38,82, 2,42,26, 1,76,75, 2,42,18, 4,41,79, 1,76,69, 3,38,74, + 1,76,74, 2,42,13, 2,42,17, 2,42,14, 2,42,20, 1,72,79, 1,76,67, 1,72,73, + 3,44, 1, 2,48,35, 2,42,22, 3,38,72, 1,76,73, 3,38,83, 1,76,76, 7, 2,81, + 2,42,19, 3,38,75, 1,76,72, 2,48,34, 5,45,10, 3,44, 3, 3,38,84, 3,44, 4, + 3,43,87, 2,48,39, 1,80,55, 2,48,33, 2,55,14, 2,48,48, 1,76,80, 3,43,90, + 1,76,78, 1,80,53, 2,48,45, 2,48,41, 1,76,84, 3,43,86, 2,55, 5, 3,48,72, + 3,44, 8, 3,48,71, 1,76,82, 2,48,40, 3,44, 9, 2,55, 3, 3,44, 5, 2,48,44, + 4,48,27, 2,48,47, 2,48,38, 3,43,89, 1,76,83, 4,48,23, 3,43,85, 1,76,77, + 2,55, 4, 1,80,54, 2,48,46, 1,76,79, 1,76,81, 2,48,43, 1,76,85, 2,48,42, + 2,48,37, 2,48,36, 1,80,52, 2,48,50, 2,55, 7, 2,60,75, 1,80,57, 3,48,65, + 2,55,13, 3,48,67, 2,55,11, 3,48,74, 2,60,76, 3,48,68, 1,80,58, 2,55,12, + 3,48,70, 2,55, 9, 1,83,61, 2,60,74, 3,48,76, 2,55, 6, 2,55, 8, 1,83,62, + 1,80,60, 1,83,60, 1,80,59, 1,83,64, 2,55,10, 1,80,56, 3,48,66, 3,48,69, + 3,48,75, 0, 0, 0, 0, 0, 0, 3,70,89, 0, 0, 0, 4,59,11, 2,65,59, 4,54,19, + 2,65,51, 3,52,65, 3,52,63, 3,52,60, 3,52,62, 3,52,61, 2,60,82, 2,65,52, + 2,60,78, 4,54,18, 3,52,59, 1,86,34, 2,60,80, 2,60,79, 1,83,63, 2,60,77, + 2,60,81, 2,65,60, 2,65,56, 2,65,58, 4,63,64, 2,65,53, 2,65,54, 4,63,65, + 2,65,57, 2,65,55, 1,88,20, 3,55,69, 0, 0, 0, 1,88,23, 1,88,22, 1,88,21, + 1,89,76, 2,72,86, 1,89,77, 2,69,44, 1,90,74, 2,75,58, 1,90,75, 1,91,64, + /* plane 0, page 98 */ + 0, 255, /* first, last */ + 1,92,22, 2,79, 8, 3,63,38, 2,79, 9, 2,79,10, 3,65,30, 0, 0, 0, 2,82,10, + 1,37,33, 2, 1,61, 1,38,51, 0, 0, 0, 1,40, 7, 1,40, 8, 1,40, 6, 3, 3,75, + 1,40, 9, 1,42,28, 1,42,27, 3, 6, 5, 2, 6,80, 1,45,49, 1,45,48, 0, 0, 0, + 3,12,67, 2,15,17, 1,58,49, 1,58,50, 4,17,78, 4,17,80, 3,27,68, 1,63,28, + 2,34,88, 1,68, 8, 1,68, 9, 2,34,90, 2,34,92, 2,34,91, 4,29,35, 2,42,30, + 3,38,86, 2,42,29, 1,72,80, 2,42,31, 3,38,85, 2,48,51, 1,76,86, 3,44,12, + 1,80,61, 3,48,77, 1,83,65, 1,86,35, 1,83,66, 3,63,40, 1,37,34, 3, 1,69, + 3, 1,70, 3, 2,46, 2, 4, 8, 3, 6, 8, 3, 6, 9, 2, 6,81, 1,45,51, 1,45,50, + 1,45,52, 1,49,23, 2,10,51, 2,10,52, 0, 0, 0, 3,17, 9, 2,15,18, 1,53,50, + 1,58,51, 1,63,29, 2,27,84, 1,37,35, 4, 1,23, 1,36,63, 1,37,36, 3, 2,48, + 2, 1,62, 1,38,55, 1,38,54, 1,38,52, 1,38,53, 0, 0, 0, 0, 0, 0, 3, 3,79, + 1,40,12, 2, 2,41, 2, 2,43, 1,40,11, 2, 2,35, 3, 3,76, 2, 2,36, 3, 3,77, + 2, 2,42, 2, 2,38, 2, 2,40, 1,40,10, 2, 2,37, 2, 2,44, 2, 2,39, 3, 3,78, + 15, 2,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,42,35, 1,42,44, 1,42,42, + 2, 4,18, 2, 4,15, 2, 4,23, 1,42,40, 2, 4,24, 3, 6,25, 1,42,33, 2, 4,21, + 3, 6,14, 1,42,39, 2, 4,17, 2, 4,16, 1,42,37, 2, 4,22, 1,42,38, 1,45,53, + 1,42,32, 2, 4,19, 3, 6,10, 2, 4, 9, 1,42,29, 3, 6,23, 1,42,48, 2, 4,14, + 2, 4,20, 1,42,34, 1,42,36, 3, 6,15, 2, 4,10, 3, 6,22, 2, 4,11, 2, 4,12, + 4, 4,25, 1,42,47, 1,42,41, 1,42,46, 2, 4,13, 1,42,45, 1,42,31, 1,42,30, + 1,42,43, 3, 6,21, 4, 4,28, 3, 6,19, 3, 6,20, 3, 6,24, 3, 6,17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,68,91,15, 4,25, 3, 6,18, 3, 9,17, 3, 9,10, + 1,45,67, 2, 6,93, 2, 6,86, 1,45,62, 1,45,81, 2, 6,82, 2, 6,89, 2, 6,91, + 2, 6,94, 1,45,76, 3, 9, 6, 2, 6,90, 2, 6,83, 1,45,74, 2, 6,87, 3, 9, 8, + 2, 7, 1, 1,45,59, 3, 9, 5, 2, 6,92, 1,45,69, 1,45,68, 2, 6,85, 1,45,57, + 3, 9,20, 3, 9,18, 1,45,58,15, 7,16, 1,45,56, 3, 9,19, 1,45,80, 1,45,72, + 1,45,66, 1,45,54, 2, 6,88, 1,45,65, 1,45,55, 1,45,73, 1,45,82, 2,10,53, + 1,45,70, 2, 6,84, 1,45,60, 1,45,63, 1,45,64, 3, 9,14, 1,45,78, 1,45,79, + 1,45,77, 1,45,71, 1,45,75, 1,45,61, 1,49,24, 3, 9,16, 3, 9,23, 3, 9,21, + 3, 9,22, 3, 9,15, 0, 0, 0, 0, 0, 0, 3, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,12,77, 2,10,59, 1,49,36, 1,49,28, 1,49,30, 1,49,35, + 2,10,71, 1,49,33, 2,15,19, 1,53,51, 1,49,38, 2,10,56, 2,10,64, 1,49,34, + 2,10,63, 2,10,60, 2,10,68, 2,10,70, 1,49,27, 1,49,31, 1,49,37, 1,53,53, + /* plane 0, page 99 */ + 0, 254, /* first, last */ + 2,10,65, 1,49,29, 1,49,40, 2,10,58, 3,12,79, 3,12,80, 5, 9,37, 1,49,32, + 1,53,52, 1,49,26, 4, 9,57, 2,10,55, 2,10,62, 2,10,54, 2,10,57, 2,10,61, + 2,15,20, 1,49,39, 4, 9,49, 2,10,66, 2,10,67, 2,10,69, 1,49,25, 3,12,76, + 0, 0, 0, 3,17,18, 0, 0, 0, 3,17,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,12,75, + 0, 0, 0, 3,12,78, 0, 0, 0, 4, 9,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1,53,67, 2,15,32, 1,53,65, 1,53,66, 2,15,22, 2,15,38, 3,17,12, 1,53,56, + 3,17,15, 3,17,21, 2,21,42, 2,15,40, 2,15,34, 3,17,24, 2,15,25, 3,17,23, + 2,15,43, 2,15,28, 1,53,62, 2,21,65, 2,15,31, 1,53,64, 1,53,55, 3,17,28, + 2,15,45, 2,15,33, 1,53,58, 2,15,26, 2,15,23, 2,15,24, 1,53,59, 2,15,39, + 2,15,46, 1,53,61, 2,15,30, 2,15,29, 1,53,69, 1,53,68, 1,53,54, 1,53,60, + 1,53,63, 2,15,42, 3,17,14, 3,17,25, 2,15,36, 1,53,57, 2,15,21, 2,15,44, + 2,15,35, 2,15,37, 2,15,41, 3,17,16, 3,17,27, 3,17,22, 0, 0, 0, 0, 0, 0, + 3,68,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,68,93, 2,21,43, 3,22,17, 1,58,59, + 1,58,79, 1,58,78, 3,22, 7, 1,58,67, 3,22, 9, 2,21,61, 2,21,57, 2,21,54, + 2,21,72, 1,58,62, 1,58,54, 3,22, 6, 3,22,18, 2,21,59, 1,63,45, 1,58,58, + 2,21,67, 3,22, 2, 1,58,80, 1,58,77, 2,21,63, 2,21,46, 3,21,92, 3,22,11, + 1,58,76, 2,21,69, 2,21,45, 1,58,65, 1,58,69, 2,21,68, 3,22, 3, 2,21,55, + 1,58,70, 1,58,64, 2,21,44, 3,21,93, 1,63,31, 2,21,71, 2,21,53, 1,58,75, + 2,21,56, 2,21,70, 1,58,74, 3,22, 4, 2,27,85, 4,17,87, 1,58,55, 2,21,51, + 1,58,60, 1,58,71, 4,17,88, 1,58,66, 2,21,60, 2,21,50, 2,21,48, 2,21,66, + 1,58,52, 1,58,72, 1,58,56, 1,63,30, 2,21,64, 1,58,57, 4,18, 3, 1,58,53, + 1,58,68, 1,58,63, 1,58,61, 2,21,52, 1,58,73, 2,21,49, 2,21,62, 2,21,58, + 2,27,87, 2,27,86, 3,22,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,68,94, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,22,14, 0, 0, 0, 0, 0, 0, 2,21,47, 2,28, 9, 3,27,81, + 1,63,33, 3,27,80, 2,28,15, 2,27,92, 2,28,12, 2,34,93, 1,63,36, 2,28,16, + 2,28,19, 1,63,35, 2,28, 1, 2,28,18, 2,28,17, 1,63,37, 2,27,88, 1,63,32, + 1,63,40, 3,27,83, 1,63,38, 2,28,14, 4,23,81, 2,28, 4, 1,63,42, 2,28,21, + 2,28,13, 2,28,22, 1,63,50, 1,63,48, 2,28,11, 2,28,10, 3,27,71, 2,28, 8, + 2,28, 2, 1,63,41, 3,27,70, 1,63,39, 2,15,27, 2,27,89, 3,27,72, 2,35,29, + 2,27,90, 1,63,34, 1,63,47, 2,35, 1, 4,23,64, 1,63,43, 1,63,44, 2,27,91, + 2,28,20, 2,34,94, 2,28, 5, 2,27,94, 1,63,46, 2,28, 6, 2,28, 3, 3,27,82, + 3,27,77, 1,63,51, 4,23,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,27,79, + /* plane 0, page 100 */ + 3, 255, /* first, last */ + 3,69, 1, 0, 0, 0, 0, 0, 0, 1,68,24, 3,33,41, + 3,33,18, 2,35, 4, 2,35,23, 2,35,28, 2,35,16, 1,68,20, 2,35,33, 1,68,17, + 2,35, 2, 3,33,26, 2,35, 3, 1,68,10, 1,68,19, 2,35,10, 1,68,22, 1,68,23, + 2,35,11, 3,33,24, 2,35,24, 2,35,30, 1,68,18, 3,33,30, 1,68,12, 2,35, 9, + 2,35, 5, 2,35,32, 2,35,14, 2,35,15, 2,35, 6, 2,35,26, 2,35,17, 2,35,27, + 2,35,19, 3,33,29, 1,68,13, 2,42,32, 1,68,16, 1,68,14, 2,35,31, 2,35,22, + 2,35,18, 3,33,22, 3,33,19, 2,35, 7, 1,72,90, 2,35,21, 1,68,21, 2,35,13, + 3,33,20, 2,35,12, 3,33,40, 3,39, 5, 3,33,34, 1,68,15, 1,68,11, 2,42,53, + 2,35,25, 2,35,20, 0, 0, 0, 2,35, 8, 0, 0, 0, 0, 0, 0, 3,33,36, 3,33,37, + 0, 0, 0, 3,70,86, 0, 0, 0, 2,42,48, 3,38,88, 2,42,33, 2,42,44, 3,39, 8, + 2,42,51, 1,72,88, 1,63,49, 2,42,49, 1,72,83, 3,38,94, 3,39, 4, 3,38,90, + 1,72,82, 2,42,56, 4,35,61, 2,42,34, 2,42,47, 2,42,35, 2,42,46, 1,72,86, + 2,42,50, 2,28, 7, 3,39, 1, 4,35,62, 3,39,10, 2,42,57, 2,42,42, 1,72,89, + 2,48,65, 1,76,87, 3,39, 3, 2,42,55, 2,42,54, 1,72,91, 2,48,52, 1,76,88, + 2,48,53, 3,39, 2, 2,42,38, 2,42,39, 2,42,36, 2,42,41, 2,42,37, 2,42,58, + 1,72,85, 1,76,89, 1,72,87, 1,72,92, 3,38,91, 2,42,40, 3,39, 9, 2,42,52, + 3,44,13, 3,39, 6, 2,42,45, 3,44,21, 0, 0, 0, 2,48,56, 3,44,24, 1,72,81, + 1,76,92, 2,55,21, 2,48,61, 2,48,60, 2,48,62, 3,44,16, 3,44,15, 2,48,59, + 1,76,93, 3,44,27, 1,77, 5, 1,77, 2, 3,44,17, 1,77, 3, 2,48,54, 2,48,57, + 2,48,67, 1,77,11, 1,77, 9, 3,44,14, 2,48,58, 2,27,93, 1,76,90, 2,48,64, + 2,48,55, 3,44,30, 1,77,12, 2,48,63, 1,72,84, 1,77, 1, 2,42,43, 3,44,31, + 3,44,20, 1,77, 4, 3,44,29, 1,77, 8, 1,77,10, 1,77, 7, 1,77, 6, 3,44,26, + 1,76,94, 2,48,66, 1,76,91, 1,77,13, 3,44,25, 0, 0, 0, 3,69, 2, 0, 0, 0, + 0, 0, 0, 3,44,23, 0, 0, 0, 1,80,65, 1,80,66, 2,55,20, 1,80,75, 1,80,72, + 3,48,80, 1,80,63, 1,80,70, 2,55,22, 1,80,68, 1,80,62, 3,44,18, 1,80,69, + 3,48,87, 2,55,19, 1,83,68, 1,80,64, 5,52,62, 1,80,71, 1,83,67, 2,55,18, + 2,55,17, 3,48,86, 1,80,73, 3,48,79, 1,80,74, 3,48,89, 2,55,16, 2,55,15, + 1,83,69, 2,55,25, 1,80,67, 2,55,23, 3,48,85, 0, 0, 0, 0, 0, 0, 3,52,68, + 1,83,70, 3,52,71, 1,83,75, 2,60,85, 2,60,87, 3,55,75, 1,83,72, 3,55,77, + 2,60,88, 2,60,84, 3,55,76, 2,60,86, 1,83,73, 1,83,76, 3,52,73, 2,60,83, + 1,83,71, 1,83,74, 1,86,37, 2,55,24, 1,86,36, 7,31,66, 3,55,74, 1,86,42, + 2,65,64, 3,55,80, 1,86,40, 1,86,41, 2,65,67, 2,65,63, 1,86,38, 2,65,61, + /* plane 0, page 101 */ + 0, 255, /* first, last */ + 1,88,24, 2,65,65, 4,59,22, 2,65,66, 2,65,62, 3,55,78, 1,86,39, 2,69,45, + 3,58,27, 2,69,48, 3,58,28, 3,58,26, 2,69,49, 2,69,47, 2,69,50, 1,88,25, + 2,69,46, 3,62,17, 0, 0, 0, 2,72,90, 1,89,79, 2,72,89, 2,72,88, 2,72,87, + 1,89,78, 1,89,80, 3,69, 3, 2,75,59, 1,90,77, 1,90,76, 3,63,42, 3,63,43, + 2,77,47, 2,77,46, 2,77,49, 1,92,23, 1,91,65, 2,79,12, 2,77,48, 3,63,41, + 3,64,18, 2,79,11, 1,92,25, 1,92,24, 1,92,63, 2,80,23, 2,80,93, 1,37,37, + 6, 3,76, 3,12,82, 2,28,23, 2,55,26, 3, 1,71, 3, 1,72, 1,40,13, 2, 2,45, + 1,42,51, 1,42,49, 4, 4,31, 1,42,50, 4, 4,30, 2, 7, 2, 1,45,83, 1,49,41, + 3,12,84, 2,10,72, 3,12,86, 2,10,73, 3,12,83, 1,49,42, 2,15,48, 4,13,35, + 1,53,70, 1,53,71, 2,15,47, 3,17,29, 4,13,36, 3,22,23, 3,22,22, 1,58,87, + 4,18,11, 1,58,83, 4,18,15, 2,21,73, 1,58,90, 1,58,89, 1,58,82, 1,58,85, + 1,58,88, 1,58,84, 3,22,20, 0, 0, 0, 2,28,27, 1,58,81, 1,63,52, 3,27,84, + 3,27,85, 3,27,86, 1,63,54, 1,63,55, 2,28,26, 2,28,29, 1,63,53, 2,28,24, + 2,28,28, 0, 0, 0, 2,28,25, 3,33,43, 1,68,25, 3,33,46, 4,29,61, 2,35,34, + 3,33,45, 3,39,16, 1,72,93, 2,42,59, 1,80,76, 1,77,14, 2,48,68, 1,77,15, + 1,77,16, 2,48,70, 2,48,69, 2,48,71, 2,55,28, 0, 0, 0, 0, 0, 0, 2,55,27, + 2,60,90, 2,60,89, 1,83,77, 1,83,78, 2,69,51, 3,60,33, 0, 0, 0, 1,37,38, + 3, 5,56, 3, 9,25, 4,13,39, 3,17,32, 2,28,30, 3,22,24, 3,22,25, 0, 0, 0, + 1,63,57, 1,63,56, 2,35,35, 0, 0, 0, 2,65,68, 1,90,78, 2,79,13, 1,37,39, + 4, 4,33, 1,53,72, 3,17,34, 1,58,92, 1,58,91, 2,28,31, 2,28,32, 1,68,26, + 2,42,60, 1,72,94, 2,55,29, 4,54,31, 1,37,40, 1,38,56, 3, 9,27, 1,45,84, + 2, 7, 3, 0, 0, 0, 2,10,74, 1,49,43, 1,58,93, 3,22,26, 2,28,33, 1,63,58, + 1,68,27, 4,29,67, 2,48,72, 2,48,73, 4,48,46, 3,52,75, 2,60,91, 1,86,43, + 2,80,94, 1,37,41, 3, 9,28, 2, 7, 4, 1,45,85, 1,49,44, 3,12,87, 2,10,75, + 0, 0, 0, 1,53,73, 2,15,52, 2,15,50, 2,15,51, 1,53,74, 2,15,49, 3,22,28, + 4,18,20, 3,22,31, 3,22,29, 1,59, 1, 1,59, 2, 2,21,74, 1,59, 3, 1,58,94, + 2,28,34, 3,27,89, 2,28,35, 2,35,36, 4,29,68, 0, 0, 0, 1,73, 2, 1,73, 1, + 4,48,47,15,52,68, 2,60,92, 2,65,69, 3,58,31, 2,69,53, 2,69,52, 2,72,91, + 3, 1,73, 2, 1,30, 1,49,45, 3,22,33, 3,33,48, 1,37,42, 1,38,57, 3, 2,49, + 1,40,15, 1,40,14, 3, 3,83, 3, 3,82, 1,40,16, 1,40,17, 2, 2,47, 2, 2,46, + 2, 4,25, 1,42,52, 2, 4,28, 2, 4,27, 2, 4,26, 2, 4,29, 3, 6,29, 0, 0, 0, + 0, 0, 0, 4, 6,66, 1,45,86, 2, 7,10, 2, 7, 6, 2, 7,15, 3, 9,35, 3, 9,30, + /* plane 0, page 102 */ + 0, 255, /* first, last */ + 1,45,93, 3, 9,34, 1,45,91, 2, 7,11, 2, 7, 7, 2, 7,14, 1,45,90, 1,46, 3, + 2, 7, 9, 2, 7, 5, 1,46, 2, 2, 7,12, 1,45,89, 2, 7,13, 1,45,92, 1,45,94, + 2, 7,17, 2, 7,16, 2, 7, 8, 1,45,88, 1,45,87, 1,46, 1, 4, 6,65, 3, 9,32, + 3, 9,33,15, 7,30, 3,12,94, 3,12,90, 2,10,80, 2,10,86, 3,13, 3, 1,49,51, + 1,49,48, 2,10,77, 2,10,82, 3,12,92, 1,49,54, 1,49,46, 2,10,81, 1,49,49, + 1,49,52, 3,12,89, 4, 9,71, 2,10,84, 3,12,93, 1,49,47, 2,10,89, 1,49,50, + 3,13, 1, 1,49,53, 2,10,78, 2,10,83, 2,10,87, 2,10,79, 2,10,76, 3,13, 4, + 3,13, 5, 2,10,88, 2,10,85, 3,13, 2, 3,12,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,17,38, 1,53,82, 1,53,75, 1,53,78, 3,17,44, 1,53,81, 3,17,36, 2,15,55, + 3,17,41, 1,53,76, 2,15,53, 3,17,40, 1,53,80, 3,17,45, 3,17,37, 1,53,77, + 3,17,35, 2,15,56, 1,53,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,22,34, + 4,18,25, 2,21,78, 1,59, 5, 2,21,77, 2,21,79, 1,59, 4, 1,59, 9, 2,15,54, + 3,17,43, 2,21,76, 2,21,80, 3,22,36, 1,59, 6, 2,21,75, 1,59, 8, 3,22,37, + 1,59, 7, 3,28, 6, 2,28,42, 3,27,93, 2,28,37, 3,28, 5, 1,63,59, 1,63,63, + 1,63,60, 2,28,40, 2,28,43, 3,28, 3, 1,63,61, 4,24, 4, 1,63,62, 1,63,67, + 2,35,45, 2,28,41, 1,63,65, 2,28,38, 2,28,36, 3,27,92, 1,63,66, 3,27,94, + 2,28,39, 3,28, 4, 0, 0, 0, 0, 0, 0, 1,68,33, 4,29,73, 2,35,37, 1,68,30, + 1,68,31, 1,68,29, 2,35,42, 2,35,41, 2,35,38, 1,68,35, 3,33,59, 3,33,54, + 2,35,40, 1,63,64, 3,33,57, 3,33,49, 2,35,44, 2,35,39, 1,68,32, 1,68,28, + 1,68,34, 2,35,43, 3,39,20, 4,35,75, 3,39,21, 1,73, 5, 4,35,79, 2,42,63, + 2,42,62, 2,42,61, 1,73, 3, 4,35,77, 3,39,25, 3,39,19, 3,39,23, 0, 0, 0, + 1,73, 4, 2,48,76, 2,48,79, 1,77,18, 3,44,36, 3,44,38, 1,77,17, 2,48,80, + 2,48,75, 1,77,20, 2,48,77, 3,44,33, 1,77,19, 2,48,74, 3,44,32, 2,48,78, + 1,80,82, 1,80,79, 2,55,38, 2,55,37, 3,44,35, 2,55,36, 2,55,31, 3,48,93, + 2,55,32, 3,49, 3, 4,48,48, 3,48,90, 1,80,80, 3,48,94, 1,80,77, 1,80,81, + 2,55,30, 1,80,78, 2,55,33, 2,55,34, 2,55,39, 3,49, 2, 3,52,81, 2,55,35, + 3,52,79, 3,52,80, 2,60,93, 4,54,33, 3,52,76, 3,52,77, 1,83,80, 3,52,82, + 2,65,72, 1,83,79, 2,65,70, 2,65,71, 1,86,44, 1,88,27, 2,69,54, 3,58,35, + 1,88,26, 3,58,34, 3,69, 6, 2,72,93, 2,72,94, 3,60,34, 1,89,81, 3,60,35, + 2,72,92, 1,90,79, 4,74,44, 2,79,14, 1,92,26, 2,80,24, 2,80,25, 3,65,31, + 1,37,43, 4, 1,92, 1,40,18, 1,40,19, 1,42,53, 3, 6,33, 2, 7,18, 1,49,55, + 1,53,83, 1,59,10,15,18,83, 0, 0, 0, 1,57,23, 0, 0, 0, 1,63,68, 1,63,69, + /* plane 0, page 103 */ + 0, 255, /* first, last */ + 1,62,18, 2,28,44, 3,69, 7, 1,68,36, 2,42,65, 2,42,64, 3,49, 4, 7,51,39, + 1,37,44, 1,40,20, 2, 7,19, 1,46, 5, 3, 9,37, 1,46, 4, 3,13, 7, 2,10,90, + 2,10,91, 3,70,18, 2,15,57, 2,15,58, 1,53,84, 1,53,85, 3,22,40, 1,53,86, + 2,21,81, 3,22,39, 3,22,38, 1,59,12, 4,24, 9, 1,63,71, 3,28, 9, 1,63,70, + 2,35,46, 2,38,33, 2,42,66, 2,55,40, 3,49, 6, 3,70,19, 1,86,45, 1,89,82, + 1,37,45, 0, 0, 0, 1,38,60, 1,38,61, 1,38,59, 1,38,62, 1,38,58, 3, 2,50, + 0, 0, 0, 1,40,23, 3, 3,87, 2, 2,55, 1,40,22, 1,40,24, 3, 3,88, 3, 3,85, + 2, 2,50, 2, 2,49, 2, 2,52, 2, 2,51, 2, 2,54, 1,40,21, 2, 2,48, 2, 2,53, + 15, 2,56, 0, 0, 0,15, 2,55, 0, 0, 0, 3, 6,40, 2, 4,30, 1,42,63, 2, 4,31, + 2, 4,35, 1,42,62, 3, 6,41, 2, 4,39, 2, 4,34, 2, 4,37, 1,42,55, 1,42,56, + 1,42,57, 1,42,58, 3, 6,37, 1,42,65, 3, 6,36, 2, 4,33, 1,42,60, 1,42,66, + 3, 6,39, 2, 4,32, 2, 4,38, 3, 6,34, 1,42,59, 2, 4,36, 1,42,61, 1,42,54, + 1,42,64, 3, 6,42,15, 4, 2, 0, 0, 0, 0, 0, 0, 4, 4,38,15, 4,51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1,46,26, 3, 9,39, 2, 7,21, 1,46, 6, 4, 6,73, 1,46,16, + 1,46,17, 1,46, 9, 1,46,27, 1,46,11, 2, 7,29, 1,46,22, 2, 7,24, 1,46,12, + 2, 7,39, 2, 7,40, 2, 7,32, 2, 7,25, 1,46,25, 2, 7,37, 1,46,20, 1,46,18, + 3, 9,50, 2, 7,38, 3, 9,41, 2, 7,36, 2, 7,28, 2, 7,20, 2, 7,27, 1,46,13, + 4, 6,69, 1,46,19, 3, 9,42, 1,46, 7, 2, 7,31, 2, 7,30, 2, 7,22, 3, 9,47, + 1,46,21, 2, 7,34, 2, 7,23, 1,46,24, 2, 7,41, 1,46, 8, 3, 9,40, 1,46,15, + 2, 7,26, 2, 7,35, 1,46,23, 4, 6,71, 1,46,10, 1,46,14, 4, 6,74, 2, 7,33, + 0, 0, 0,15, 7,46, 3, 9,46, 3, 9,44, 3,69, 8, 0, 0, 0,15, 7,48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69, 9, 0, 0, 0, 2,11,29, 1,49,63, + 1,49,76, 3,13,22, 2,11,24, 2,11,14, 1,49,69, 2,11,12, 1,49,62, 2,11, 7, + 1,49,72, 2,11,20, 2,11, 1, 2,11, 3, 3,13,14, 4,13,57, 4, 9,78, 3,13,16, + 2,11, 6, 2,10,92, 2,11,19, 2,11,35, 1,49,67, 2,11, 8, 2,11,26, 3,13,13, + 2,10,94, 2,11,33, 2,11,34, 2,11,37, 2,11,28, 2,11,13, 2,11,21, 1,49,73, + 1,49,60, 1,49,68, 1,49,80, 1,49,57, 1,49,59, 3,13,17, 3,13,11, 3,13,26, + 2,11, 5, 1,49,77, 1,49,70, 2,11,31, 2,11, 2, 1,49,79, 1,49,74, 2,11,11, + 4, 9,77, 4,13,46, 1,49,78, 2,11,18, 2,11,10, 1,49,71, 2,11,30, 2,11,22, + 3,13,10, 1,49,65, 2,11,36, 2,11, 9, 1,49,61, 2,11,27, 2,11,17, 1,49,66, + 2,11,23, 1,49,58, 2,10,93, 1,49,75, 1,54, 7, 1,49,64, 2,11,16, 2,11,15, + 2,11, 4, 3, 9,49, 2,11,32, 3,13,20, 2,11,25, 0, 0, 0, 3,13,18, 1,49,56, + /* plane 0, page 104 */ + 0, 255, /* first, last */ + 3,13,25, 3,13,23, 0, 0, 0, 0, 0, 0, 6,17,82, 3,13,24, 3,69,11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,69,10,15,11,40, 2,15,78, 1,54,14, 2,15,79, 3,17,61, 2,15,67, 1,54, 3, + 1,54,15, 3,17,55, 2,15,60, 3,17,51, 2,15,69, 2,15,77, 3,17,59, 2,15,59, + 2,15,86, 1,53,87, 3,17,62, 3,17,68, 3,17,48, 2,15,85, 2,15,80, 3,17,63, + 2,15,81, 1,54, 1, 1,54,12, 2,15,71, 3,17,54, 2,15,72, 2,15,82, 2,15,73, + 3,17,67, 2,15,68, 2,15,62, 2,15,63, 2,15,76, 2,15,70, 3,17,52, 3,17,47, + 1,53,88, 1,53,92, 2,15,84, 2,15,64, 1,54,10, 1,54, 6, 3,17,58, 4,13,53, + 1,54, 9, 1,54,16, 1,53,93, 1,54,11, 2,15,75, 1,54,13, 1,53,90, 3,17,57, + 1,53,89, 2,15,61, 4,13,47, 2,15,65, 1,54, 4, 2,15,83, 2,15,74, 2,15,66, + 1,54, 8, 1,54, 5, 3,13,15, 1,53,91, 1,53,94, 3,17,66, 3,17,56,15,16, 4, + 3,17,65, 3,17,64, 3,69,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69,12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,22, 8, 3,22,53, 2,21,86, 2,21,87, 2,21,91, + 3,22,64, 2,22,12, 2,22, 9, 3,22,46, 2,22, 2, 2,22, 1, 1,59,19, 2,22, 5, + 2,22,20, 2,21,82, 3,22,59, 2,22,21, 2,22, 7, 2,22,25, 2,22,13, 1,59,18, + 2,22,11, 1,59,13, 1,59,34, 1,59,24, 3,22,55, 1,59,28, 1,59,27, 2,21,83, + 4,18,31, 2,22,18, 2,22,24, 2,22,16, 2,22,23, 0, 0, 0, 3,22,49, 2,22, 4, + 2,21,84, 2,22,22, 2,22, 6, 1,59,16, 1,59,29, 3,22,58, 2,22,15, 1,59,22, + 3,22,45, 3,22,60, 3,22,48, 2,22,14, 2,21,85, 1,59,30, 3,22,43, 1,59,32, + 2,22,17, 1,59,33, 1,59,15, 2,21,92, 2,22,19, 3,22,52, 3,20,88, 1,59,21, + 1,59,31, 2,21,94, 2,22,10, 2,21,89, 2,21,93, 1,59,26, 2,21,88, 1,59,14, + 1,59,23, 1,59,20, 2,22, 3, 1,54, 2, 2,28,67, 1,59,17, 3,22,44, 3,22,50, + 3,22,62, 3,22,63, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,22,54, 0, 0, 0, 3,28,37, 1,59,25, 3,28,33, 2,28,70, 2,28,92, + 2,28,81, 1,63,91, 3,28,24, 1,63,86, 2,28,64, 1,63,87, 2,28,80, 3,28,30, + 2,28,73, 2,28,86, 1,63,83, 2,28,46, 2,28,88, 1,63,73, 2,28,54, 1,63,76, + 1,63,75, 4,24,18, 1,63,92, 3,22,51, 2,28,48, 2,28,82, 2,28,83, 1,63,78, + 1,63,74, 2,28,62, 3,28,29, 1,63,85, 2,28,57, 3,28,18, 2,28,84, 1,63,81, + 2,28,76, 2,28,89, 2,28,51, 2,28,56, 2,28,50, 3,28,10, 1,63,80, 2,28,69, + 2,35,68, 2,28,52, 1,63,84, 2,28,61, 2,28,85, 1,63,79, 2,28,58, 2,28,55, + 2,28,72, 1,63,82, 1,63,72, 1,63,94, 2,28,75, 2,28,74, 3,28,17, 3,28,34, + /* plane 0, page 105 */ + 0, 255, /* first, last */ + 3,28,25, 3,28,27, 3,28,20, 3,28,15, 2,28,47, 1,63,77, 2,28,87, 2,28,63, + 2,28,65, 3,28,23, 2,28,78, 2,28,77, 2,28,45, 1,63,88, 1,63,90, 2,28,53, + 2,28,60, 2,28,68, 1,63,89, 2,28,59, 2,28,71, 2,28,90,15,27,80, 2,28,79, + 3,28,28, 0, 0, 0, 0, 0, 0,15,28, 1, 3,28,36, 0, 0, 0, 3,28,19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,28,91, 0, 0, 0,15,28, 9, + 0, 0, 0, 3,69,15, 2,28,49,15,27,78, 3,69,14, 0, 0, 0, 3,28,32, 2,35,88, + 1,68,44, 3,33,69, 2,35,86, 2,35,65, 2,35,70, 2,35,63, 3,33,87, 2,35,82, + 2,35,49, 2,35,56, 4,29,81, 2,35,80, 2,35,90, 2,35,66, 3,33,72, 2,35,53, + 2,35,72, 2,35,77, 2,35,57, 3,33,75, 2,35,74, 2,35,54, 3,33,61, 3,33,85, + 2,35,61, 2,35,62, 1,68,46, 2,35,81, 2,35,79, 3,33,83, 2,35,50, 2,35,84, + 3,33,84, 2,35,85, 2,35,87, 1,68,50, 1,68,42, 3,33,79, 2,21,90, 2,35,58, + 2,35,76, 2,35,59, 1,68,39, 1,68,55, 2,35,83, 1,68,53, 1,68,49, 2,35,48, + 1,68,41, 3,33,89, 2,35,51, 1,68,54, 3,33,88, 2,35,67, 2,35,47, 3,33,86, + 1,68,47, 2,35,71, 2,35,55, 1,68,48, 2,35,64, 1,68,38, 1,63,93, 2,35,73, + 2,28,66, 2,35,52, 4,29,76, 3,33,77, 2,35,78, 1,68,43, 2,35,75, 1,68,40, + 2,35,69, 1,68,51, 2,35,60, 2,35,89, 3,33,74, 3,33,91, 0, 0, 0,15,34,41, + 15,34,39, 0, 0, 0, 1,68,45, 2,37,12, 0, 0, 0, 3,33,82, 1,68,52, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,34, 8, 0, 0, 0,15,34,28, 2,42,80, 2,42,78, 3,39,26, + 2,43, 6, 2,42,76, 3,39,29, 2,42,94, 1,68,37, 1,73, 8, 2,42,72, 2,43, 5, + 3,39,49, 2,42,77, 2,42,91, 1,73,13, 1,73, 6, 3,39,46, 2,43, 3, 3,39,38, + 2,42,70, 2,43, 2, 3,39,39, 1,73,24, 2,42,87, 2,43, 9, 1,73,22, 2,42,79, + 1,73, 7, 2,42,81, 2,43, 1, 1,73,16, 2,42,74, 1,73,20, 1,73,10, 2,42,83, + 2,42,73, 2,42,67, 3,39,30, 2,42,93, 1,73,17, 2,43, 8, 2,42,68, 1,73,14, + 4,35,87, 2,42,89, 4,35,89, 1,73,15, 2,42,75, 2,42,86, 2,42,82, 2,42,84, + 3,39,35, 1,73, 9, 2,43, 7, 1,73,23, 2,42,85, 3,39,27, 2,43,10, 4,36, 7, + 3,39,28, 2,42,69, 2,42,90, 1,73,12, 1,73,21, 1,73,19, 2,42,71, 2,42,92, + 1,73,18, 3,39,37, 3,39,40, 1,73,11, 2,42,88, 3,39,45, 3,39,36, 4,36, 8, + 3,44,52, 2,43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,39,44, 2,48,92, 3,39,34, 2,48,88, 2,48,84, 2,49,10, 2,49, 7, + 1,77,23, 3,44,68, 3,44,64, 2,49,14, 2,48,91, 1,77,34, 2,49, 4, 3,44,47, + 3,44,49, 2,48,87, 2,49, 3, 1,77,31, 2,49,23, 4,42,29, 2,49,20, 2,49, 6, + 2,48,85, 3,44,63, 3,44,55, 2,49,11, 2,49,13, 1,77,27, 2,49, 1, 2,48,90, + /* plane 0, page 106 */ + 0, 255, /* first, last */ + 2,48,81, 1,77,24, 1,77,32, 4,42,40, 2,49,16, 1,77,33, 2,48,82, 2,49,22, + 2,49, 9, 2,49,15, 1,77,30, 3,44,45, 3,44,48, 2,49,12, 3,44,39, 2,49,19, + 3,44,59, 1,77,35, 3,44,54, 1,77,29, 2,49, 5, 2,48,86, 2,49,24, 2,48,83, + 2,49,17, 1,77,26, 3,44,42, 2,48,93, 3,44,41, 2,48,94, 1,77,25, 1,77,22, + 2,48,89, 1,77,28, 3,44,50, 1,77,21, 3,44,66, 2,49,18, 2,49,21, 2,49, 2, + 2,55,53, 3,44,62, 3,44,57,15,47,34, 3,44,65, 3,69,16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2,55,45, 3,49,12, 2,55,41, 1,81, 1, 3,49,28, 3,49,24, + 1,80,84, 1,80,89, 1,80,85, 2,55,55, 2,55,66, 1,80,83, 2,55,47, 2,55,56, + 2,49, 8, 2,55,57, 3,49, 8, 3,49,11, 1,80,90, 3,49,32, 2,55,72, 1,80,94, + 1,81, 3, 2,55,43, 3,49,27, 1,80,93, 3,49,17, 2,55,70, 2,55,71, 2,55,61, + 2,55,60, 2,55,52, 3,49, 9, 3,49,30, 2,55,62, 2,55,69, 2,55,68, 3,49,15, + 1,80,88, 1,80,86, 2,55,54, 2,55,51, 3,49,36, 2,55,48, 2,55,67, 1,81, 2, + 2,55,65, 1,80,92, 1,80,91, 3,49, 7, 2,55,59, 4,42,43, 2,55,42, 2,55,44, + 2,55,46, 2,55,64, 2,55,58, 1,80,87, 3,49,14, 2,55,49, 3,49,18, 2,55,63, + 3,49,33, 3,49,26,15,52,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,55,50, 3,69,17, + 15,53, 9, 0, 0, 0, 3,69,18, 0, 0, 0, 0, 0, 0, 3,52,85, 1,83,88, 2,61,17, + 1,83,81, 2,61, 2, 3,52,91, 2,61,13, 1,83,83, 2,61,20, 3,53, 1, 2,61, 9, + 3,52,92, 2,61, 4, 3,52,86, 4,54,37, 2,61,21, 2,60,94, 2,61,11, 3,53, 7, + 1,83,90, 2,61,16, 2,61,22, 2,61,10, 1,83,82, 2,61,12, 2,61, 1, 1,83,89, + 3,53, 3, 3,52,90, 2,61,19, 2,61, 6, 1,83,85, 3,53, 4, 2,61, 8, 2,61, 5, + 1,83,91, 2,61, 7, 1,83,84, 1,83,87, 2,61,15, 2,61, 3, 2,61,18, 3,52,88, + 2,61,14, 0, 0, 0, 3,53, 9, 3,55,84, 1,86,47, 2,65,83, 1,86,52, 1,86,53, + 3,55,87, 3,56, 1, 3,55,86, 1,86,46, 2,65,82, 3,55,88, 2,65,79, 2,65,80, + 1,86,50, 2,65,74, 2,65,78, 1,86,49, 3,55,94, 2,65,75, 3,55,89, 3,56, 3, + 3,55,93, 3,55,90, 1,86,51, 1,86,48, 3,56, 2, 2,65,73, 2,65,77, 2,65,81, + 3,55,91, 0, 0, 0, 3,69,19, 2,69,60, 2,69,57, 2,69,66, 3,58,36, 2,69,65, + 2,69,63, 2,69,58, 3,58,47, 1,88,31, 3,58,37, 3,58,46, 4,63,81, 3,58,39, + 3,58,45, 2,69,59, 1,88,30, 1,83,86, 2,69,62, 1,88,29, 2,69,67, 2,69,61, + 2,69,56, 2,65,76, 3,58,40, 3,58,38, 0, 0, 0, 1,88,28, 3,69,20, 2,69,55, + 2,73, 4, 3,60,41, 2,73, 3, 2,69,64, 1,89,83, 3,55,85, 2,73, 7, 2,73, 8, + 2,73, 2, 2,73, 6, 4,67,48, 2,73, 1, 3,60,39, 3,69,21, 4,67,46, 0, 0, 0, + 2,75,63, 2,73, 5, 1,90,82, 1,90,80, 2,75,61, 3,62,21, 3,62,20, 3,62,19, + /* plane 0, page 107 */ + 0, 255, /* first, last */ + 2,75,64, 3,62,23, 2,75,60, 2,75,62, 1,90,81, 0, 0, 0, 3,63,47, 3,63,46, + 2,77,51, 2,77,52, 1,91,66, 2,77,50,15,73,44, 3,69,22, 3,69,23, 2,79,17, + 1,92,27, 2,79,15, 2,79,16, 2,80,26, 3,64,84,15,75,49, 1,93, 3, 2,81, 3, + 2,81, 1, 2,81, 2, 2,81, 4, 3,65,32, 3,65,69, 3,65,33, 2,82,11, 0, 0, 0, + 1,37,46, 1,40,25, 3, 3,89, 1,46,28, 4, 6,81, 2, 7,42, 3, 9,51, 3, 9,52, + 2,11,38, 4, 9,82, 3,13,28, 3,17,70, 2,15,87, 2,15,89, 3,17,69, 2,15,88, + 3,17,71, 2,15,90, 1,59,35, 2,22,27, 2,15,91, 3,22,66, 2,22,26, 2,22,28, + 2,22,29, 2,28,93, 1,64, 2, 2,28,94, 2,29, 2, 1,64, 3, 1,64, 1, 2,29, 1, + 3,33,93, 2,36, 2, 2,35,94, 2,35,93, 3,33,92, 2,35,92, 2,35,91, 1,68,56, + 2,36, 1, 1,73,25, 2,43,11, 2,43,13, 1,73,26, 2,43,12, 1,77,37, 3,44,70, + 1,77,36, 2,49,25, 3,44,69, 3,44,71, 2,55,74, 2,55,73, 2,55,75, 3,49,38, + 3,49,37, 1,81, 4,15,53,25, 2,61,23, 1,83,92, 3,53,11, 2,65,84, 1,86,54, + 2,69,68, 1,91,67, 1,37,47, 1,38,63, 1,40,26, 1,42,67, 1,46,29, 1,46,30, + 3, 9,53, 3, 9,54, 1,49,81, 3,13,29, 3,17,72, 2,15,92, 3,28,41, 3,28,39, + 4,36,13, 3,33,94, 1,68,57, 3,34, 1, 3,39,51, 4,42,46, 2,50,57, 1,81, 5, + 1,86,55, 1,37,48, 3, 2,51, 1,40,27, 0, 0, 0, 4, 6,86, 2, 7,44, 1,46,31, + 2, 7,43, 3, 9,56, 2,11,39, 1,49,82, 2,11,40, 5, 9,73, 1,49,83, 0, 0, 0, + 2,15,94, 1,54,18, 1,54,17, 3,17,74, 2,22,34, 2,22,32, 2,22,33, 2,22,31, + 3,22,68, 2,22,30, 0, 0, 0, 0, 0, 0, 2,29, 3, 2,29, 6, 1,64, 5, 2,29, 4, + 1,64, 4, 2,29, 5, 0, 0, 0, 2,36, 3, 3,34, 2, 4,36,17, 2,43,14, 2,43,15, + 2,43,16, 3,39,52, 2,49,28, 2,49,27, 1,77,38, 2,49,26, 2,49,29, 2,55,76, + 4,48,77, 5,59,82, 2,55,77, 2,55,78, 4,54,50, 2,61,24, 1,83,93, 1,86,56, + 2,69,69, 0, 0, 0, 1,90,83, 2, 1,31, 3, 9,57, 1,49,84, 2,11,41, 1,54,19, + 4,18,46, 4,18,48, 1,59,36, 3,22,69, 1,64, 6, 2,29, 7, 3,28,43, 1,68,59, + 1,68,58, 3,34, 6, 0, 0, 0, 2,43,17, 2,43,18, 1,77,39, 1,77,40, 2,55,80, + 2,55,79, 2,65,85, 2,79,18, 1,37,49, 2, 1,32, 1,38,64, 3, 3,90, 1,42,68, + 2, 4,40, 3, 9,58, 1,49,85, 1,68,60, 1,37,50, 0, 0, 0, 2,11,42, 1,49,86, + 2,11,43, 0, 0, 0, 1,83,94, 1,37,51, 3,69,24, 3,69,25, 2, 7,45, 0, 0, 0, + 2,11,44, 3,13,34, 2,16, 5, 2,16, 4, 2,16, 2, 3,17,78, 2,16, 1, 2,16, 6, + 2,16, 3, 3,17,76, 3,17,77, 1,59,37, 1,59,38, 3,22,70, 0, 0, 0, 1,64, 7, + 2,29, 8, 4,24,46, 2,29, 9, 2,29,10, 3,28,45,15,28,28, 3,69,26, 2,36, 7, + 2,36, 8, 2,36, 6, 3,34, 8, 2,36, 4, 2,36, 5, 1,68,61, 2,43,19, 2,49,32, + /* plane 0, page 108 */ + 0, 255, /* first, last */ + 2,49,31, 2,49,30, 2,49,33, 2,55,82, 2,55,81, 1,81, 6, 2,55,83, 0, 0, 0, + 1,84, 1, 2,61,25, 3,53,13, 2,65,86, 2,69,70, 2,77,53, 0, 0, 0, 1,37,52, + 1,38,66, 1,38,65, 4, 3, 1, 1,46,32, 2, 1,33, 2, 1,63, 1,40,28, 0, 0, 0, + 2, 2,56, 2, 4,41, 2, 4,42, 1,46,33, 3, 9,61, 2, 7,46, 3,69,27, 1,49,87, + 2,11,45, 2,11,46, 0, 0, 0, 1,54,20, 1,54,24, 2,16, 7, 1,54,23, 1,54,21, + 1,54,22, 0, 0, 0, 2,22,35, 1,59,39, 1,64,10, 3,28,46, 1,64, 8, 1,64, 9, + 2,29,11, 3,34, 9, 3,34,10, 1,73,27, 1,37,53, 0, 0, 0, 2, 1,64, 3, 2,55, + 1,38,67, 3, 2,52, 0, 0, 0, 2, 1,67, 3, 4, 1, 0, 0, 0, 1,38,70, 2, 1,66, + 1,38,69, 1,38,68, 1,42,69, 2, 1,65, 3, 2,56, 3, 2,57, 2, 2,57, 0, 0, 0, + 0, 0, 0,15, 1,70, 2, 2,61, 2, 2,63, 2, 2,64, 1,40,38, 1,40,39, 2, 2,60, + 1,40,34, 3, 3,93, 2, 2,58, 3, 4, 5, 2, 2,62, 1,40,35, 3, 6,53, 1,40,30, + 3, 3,92, 1,40,31, 3, 4, 3, 1,40,37, 2, 2,59, 1,40,29, 1,42,70, 1,40,32, + 1,40,33, 1,40,36,15, 2,61, 3,69,28, 0, 0, 0, 2, 4,59, 2, 4,57, 2, 4,44, + 1,42,82, 2, 4,51, 1,42,77, 2, 4,45, 3, 9,68, 2, 4,53, 3, 6,48, 2, 4,50, + 1,42,80, 2, 4,49, 1,42,87, 2, 4,58, 1,42,89, 3, 6,51, 1,42,91, 3, 3,94, + 2, 4,43, 3, 6,55, 1,42,78, 2, 4,60, 3, 6,49, 1,42,85, 1,42,88, 3, 6,44, + 2, 7,69, 1,42,72, 1,43, 1, 1,42,86, 2, 4,46, 1,42,75, 1,42,90, 2, 4,54, + 1,42,73, 1,42,74, 2, 7,67, 2, 4,47, 1,42,81, 1,42,92, 2, 4,61, 2, 4,48, + 1,42,79, 3, 6,45, 1,42,84, 2, 7,47, 1,42,93, 2, 4,55, 1,42,83, 3, 9,67, + 1,42,94, 1,42,71, 2, 4,52, 1,42,76, 2, 4,56, 2, 7,68, 3, 6,46, 3, 6,50, + 3, 6,60, 3, 6,57, 3, 6,54,15, 4,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 6,59, 1,46,45, 1,46,61, 2, 7,54, 1,46,52, 3,13,46, + 2, 7,75, 1,46,37, 3, 9,75, 1,46,40, 2, 7,66, 4, 7, 6, 2, 7,52, 2, 7,56, + 1,46,48, 1,46,50, 2, 7,59, 1,46,57, 1,46,43, 1,46,41, 1,46,42, 1,46,56, + 2, 7,71, 1,46,51, 2, 7,58, 2, 7,60, 1,46,49, 1,46,54, 2, 7,61, 2, 7,74, + 3, 9,77, 1,49,88, 1,46,60, 4, 6,93, 1,46,38, 2, 7,73, 3, 9,76, 2, 7,77, + 2, 7,57, 2, 7,79, 2, 7,64, 1,46,47, 2, 7,53, 1,46,46, 1,46,64, 1,46,53, + 3, 9,74, 2, 7,51, 2,11,55, 1,46,59, 1,46,63, 2, 7,65, 2, 7,70, 3, 9,69, + 1,46,65, 1,46,58, 1,46,44, 1,46,34, 3, 9,73, 1,46,39, 4, 6,91, 2, 7,55, + 1,46,35, 2, 7,78, 3, 9,71, 2, 7,49, 2, 7,48, 2, 7,62, 2, 7,50, 1,46,62, + 1,54,25, 1,46,55, 2, 7,63, 1,46,36, 3,13,47, 1,50, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 7,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,13,38, + /* plane 0, page 109 */ + 0, 255, /* first, last */ + 2,11,62, 2,11,65, 3,13,48, 2,11,68, 2,11,57, 3,13,40, 3,13,42, 2,11,71, + 2,11,74, 2,11,76, 2,11,54, 1,49,89, 1,49,94, 2,16,12, 1,50,16, 2,11,69, + 2,11,77, 2,11,61, 2,11,53, 3,13,41, 3,13,39, 3,13,45, 2,16,39, 1,50, 3, + 2,11,66, 2,11,58, 2,11,60, 1,50, 8, 3,17,90, 2,11,63, 1,50, 2, 2,11,50, + 2,11,72, 3,13,43, 2,11,75, 3,13,37, 3,13,55, 1,49,93, 3,13,51, 1,50,11, + 2,11,47, 1,50,13, 1,49,91, 1,50,17, 2,11,73, 2,11,49, 1,50,14, 2,16,33, + 2, 7,72, 1,50, 1, 1,49,90, 2,11,56, 2,11,48, 1,50,15, 1,50, 7, 2,11,67, + 1,50,12, 1,50,10, 2,11,59, 1,50, 4, 2,11,51, 1,50, 5, 1,50, 6, 2,11,52, + 2,11,70, 1,49,92, 2,11,64, 4,10, 1, 3,13,53, 3,13,49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,17,87, 3,17,83, + 2,16,15, 1,54,33, 1,54,38, 3,17,89, 3,18, 6, 3,17,86, 2,16,24, 2,16,30, + 2,16,26, 2,16,13, 2,16,16, 2,16, 9, 2,16,10, 1,54,45, 1,54,30, 2,16,25, + 2,16,34, 1,54,40, 1,54,26, 3,17,79, 1,54,35, 2,16,17, 1,54,37, 2,16,18, + 2,16,28, 3,18, 2, 3,18, 5, 3,17,82, 1,54,39, 2,16,43, 2,16,11, 1,54,32, + 1,54,31, 1,54,43, 2,16, 8, 2,16,41, 2,16,29, 2,16,42, 2,16,36, 2,16,22, + 2,16,37, 3,18, 1, 2,16,31, 2,16,40, 2,16,38, 1,54,44, 2,16,23, 1,54,29, + 1,54,28, 1,54,36, 1,54,42, 2,16,35, 1,54,41, 2,16,20, 1,59,40, 3,17,88, + 2,16,44, 2,16,19, 2,16,14, 1,54,34, 1,54,46, 1,54,27, 3,18, 7, 2,16,27, + 2,16,32, 3,17,93, 3,17,91, 3,17,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69,29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1,59,74, 2,22,37, 2,22,41, 3,22,79, 1,59,55, 1,59,53, + 3,22,90, 3,23, 1, 1,59,44, 2,22,39, 2,22,38, 1,59,64, 3,28,48, 2,22,44, + 1,59,58, 3,22,82, 2,22,62, 2,22,74, 1,59,41, 2,22,59, 2,22,52, 1,59,76, + 2,22,36, 3,22,74, 2,22,64, 3,22,75, 1,59,73, 1,59,61, 1,59,72, 1,59,51, + 2,22,48, 2,22,66, 2,22,58, 1,59,52, 1,59,46, 2,22,72, 3,22,76, 2,22,65, + 2,22,67, 1,59,54, 1,59,62, 2,22,69, 2,22,46, 2,22,63, 2,22,51, 2,22,71, + 1,59,67, 1,59,43, 1,59,65, 2,22,56, 2,22,54, 2,22,55, 1,59,56, 2,22,50, + 2,22,49, 1,59,45, 2,22,43, 2,22,73, 1,59,47, 2,22,53, 1,59,77, 3,22,84, + 1,59,71, 2,22,42, 1,59,68, 1,59,66, 1,59,75, 2,22,60, 1,59,70, 2,16,21, + 2,22,61, 1,59,69, 2,22,68, 1,59,42, 2,22,57, 1,59,60, 2,22,45, 1,59,59, + 3,22,92, 1,59,57, 1,59,49, 1,59,48, 2,29,12, 2,22,70, 3,28,61, 3,23, 8, + /* plane 0, page 110 */ + 0, 255, /* first, last */ + 2,22,47, 3,23, 6, 3,23, 3, 2,29,33, 3,22,80, 1,59,50, 3,22,87, 3,23, 4, + 3,22,86, 3,23, 5, 3,22,89, 4,18,77, 3,22,93, 0, 0, 0, 0, 0, 0, 3,69,30, + 0, 0, 0, 0, 0, 0, 3,23, 9, 0, 0, 0, 0, 0, 0,15,22, 9, 0, 0, 0, 3,23, 7, + 3,28,52, 1,64,39, 1,59,63, 1,64,21, 2,29,27, 1,64,35, 3,28,50, 2,29,15, + 1,64,18, 1,64,14, 2,29,45, 1,64,20, 1,64,24, 1,64,19, 1,64,28, 2,29,49, + 2,29,40, 3,28,75, 3,28,77, 2,29,22, 1,64,33, 1,64,27, 2,29,34, 1,64,11, + 2,29,46, 2,29,39, 1,64,15, 2,29,28, 1,64,30, 2,29,57, 2,29,58, 4,24,59, + 1,64,12, 2,29,44, 1,64,32, 2,29,32, 2,29,18, 2,29,19, 1,64,36, 2,29,23, + 2,29,30, 2,29,24, 3,28,58, 1,64,34, 1,64,42, 2,29,20, 2,29,13, 2,29,14, + 3,28,54, 2,29,16, 1,64,17, 2,29,29, 3,28,78, 1,64,31, 1,64,40, 3,28,56, + 3,28,73, 2,29,31, 2,29,55, 2,29,47, 1,64,13, 2,29,53, 1,64,25, 3,28,70, + 1,64,23, 3,28,68, 2,29,59, 1,64,22, 2,29,37, 2,29,25, 2,29,35, 1,64,45, + 2,29,41, 2,29,38, 2,29,21, 1,64,41, 2,29,51, 2,29,48, 2,29,56, 1,64,16, + 2,29,36, 1,64,44, 3,28,59, 2,29,43, 3,34,26, 3,28,64, 1,64,26, 1,64,29, + 3,28,60, 2,29,42, 1,64,43, 2,29,26, 2,22,40, 3,28,49, 3,28,76, 2,29,52, + 2,29,50, 2,29,54,15,28,61, 3,28,66, 3,69,34, 4,24,62, 3,28,67, 0, 0, 0, + 3,28,72, 0, 0, 0,15,28,39, 0, 0, 0, 3,69,32, 0, 0, 0, 4,24,63, 0, 0, 0, + 2,29,17, 1,64,38, 3,69,31, 3,69,33, 0, 0, 0, 2,36,39, 2,36,38, 2,36,12, + 1,68,67, 3,34,16, 2,36,37, 2,36,15, 2,36,16, 4,30,31, 1,68,77, 2,36,46, + 1,68,72, 2,36,36, 3,34,19, 2,36, 9, 1,68,78, 1,68,68, 2,36,24, 2,36,14, + 2,36,17, 2,36,41, 1,68,62, 2,36,48, 2,36,40, 1,68,71, 2,36,29, 1,68,82, + 3,34,14, 3,34,22, 1,68,81, 1,68,75, 3,34,32, 4,30,22, 2,36,47, 1,68,63, + 2,36,27, 2,36,18, 2,36,31, 2,36,43, 1,68,83, 3,34,25, 1,68,65, 2,36,26, + 3,34,13, 2,36,19, 1,68,74, 3,34,17, 1,68,73, 2,36,22, 2,36,32, 2,36,42, + 2,36,13, 2,36,23, 1,68,66, 2,36,33, 1,68,79, 1,68,70, 2,36,20, 1,68,69, + 2,36,11, 2,36,25, 2,36,45, 1,64,37, 1,73,55, 2,36,28, 2,43,20, 2,36,30, + 2,36,44, 1,68,76, 2,36,21, 1,68,64, 1,68,80, 1,77,58, 2,36,10, 6,52,46, + 2,36,35, 3,34,36, 3,34,30, 3,34,39, 2,36,34, 3,34,29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,34,37, 0, 0, 0, 0, 0, 0, 3,34,31, 0, 0, 0, + 3,34,27, 3,34,38, 0, 0, 0, 2,43,48, 1,73,52, 2,43,37, 2,43,42, 1,73,41, + 3,39,54, 2,43,22, 1,73,54, 3,39,55, 1,73,32, 2,43,21, 2,43,54, 1,73,56, + 2,43,25, 2,43,41, 3,39,69, 2,43,27, 2,43,57, 2,43,53, 1,73,30, 1,73,40, + /* plane 0, page 111 */ + 0, 255, /* first, last */ + 2,49,59, 1,73,53, 1,73,38, 2,43,23, 3,39,67, 2,43,52, 1,73,42, 2,43,49, + 2,43,62, 2,43,29, 2,43,38, 3,44,88, 3,39,59, 2,43,60, 2,43,50, 1,73,37, + 3,44,74, 3,39,68, 2,43,36, 1,73,31, 1,73,29, 1,73,47, 4,36,35, 3,39,63, + 2,43,34, 2,43,31, 2,43,32, 3,39,58, 2,43,56, 3,39,60, 2,43,61, 2,43,59, + 1,73,35, 2,43,63, 1,73,39, 1,73,46, 4,36,36, 2,43,24, 2,49,35, 2,43,33, + 3,39,62, 1,73,33, 1,73,51, 1,73,48, 1,73,36, 2,43,43, 2,43,28, 1,73,49, + 2,43,45, 1,73,43, 1,73,45, 1,73,28, 3,39,61, 2,43,47, 2,43,39, 2,43,26, + 1,73,44, 2,43,55, 2,43,58, 2,43,35, 2,43,46, 3,44,84, 1,73,34, 1,77,41, + 2,43,44, 2,49,34, 3,39,66, 2,43,51, 3,39,65, 4,36,50,15,47,89, 0, 0, 0, + 3,69,36, 3,69,37, 3,39,70, 0, 0, 0, 3,69,35, 0, 0, 0, 2,43,30, 2,49,44, + 2,49,54, 1,77,44, 2,49,53, 2,49,65, 1,77,46, 2,49,51, 4,42,56, 2,49,55, + 1,77,57, 3,44,93, 2,49,46, 1,77,49, 3,44,83, 2,49,58, 2,55,91, 1,77,61, + 1,77,60, 2,49,60, 2,49,43, 2,49,70, 1,77,55, 3,44,75, 1,77,45, 2,49,63, + 4,42,73, 2,49,67, 2,49,72, 2,49,61, 2,49,49, 1,77,48, 1,77,51, 1,77,59, + 1,77,54, 3,44,85, 2,49,52, 2,43,40, 3,44,94, 3,44,76, 2,49,48, 2,49,71, + 1,77,50, 3,44,89, 1,77,53, 2,49,73, 1,77,42, 2,49,62, 2,49,36, 2,49,68, + 1,84,10, 3,44,90, 2,49,50, 4,48,85, 1,77,43, 2,49,45, 1,77,47, 2,49,37, + 1,73,50, 2,49,41, 4,42,55, 2,49,66, 2,49,42, 2,49,40, 1,77,52, 3,44,91, + 2,49,64, 3,44,87, 2,49,39, 2,49,57, 2,49,56, 2,49,69, 2,49,47, 1,77,56, + 4,42,68, 3,69,39,15,47,93, 0, 0, 0, 0, 0, 0, 3,69,38, 2,55,94, 3,49,54, + 1,81,19, 1,81, 9, 2,56,12, 2,55,86, 1,81,11, 2,56, 4, 1,81,18, 1,81,13, + 2,56, 2, 2,61,27, 2,56, 8, 2,56,14, 2,56, 7, 2,55,84, 2,56, 5, 2,56,16, + 2,56,18, 1,81, 8, 2,56,17, 1,81,14, 1,81,20, 3,49,52, 1,81,17, 3,49,56, + 2,56,11, 1,81,16, 2,56, 6, 3,49,45, 2,55,88, 2,55,93, 3,49,48, 2,56,10, + 1,81,15, 1,81,12, 1,81, 7, 1,81,10, 2,55,92, 4,49, 2, 2,49,38, 2,55,87, + 2,55,90, 2,56,13, 2,56, 1, 2,55,85, 2,61,26, 2,56,15, 2,55,89, 2,56, 9, + 3,44,81, 0, 0, 0, 0, 0, 0, 3,49,53, 2,61,29, 1,84,14, 3,53,16, 3,53,15, + 1,84, 2, 3,53,21, 3,53,22, 1,84, 6, 2,61,31, 2,61,37, 2,61,35, 1,84, 4, + 1,84, 5, 1,84,12, 2,61,38, 2,61,30, 1,84, 7, 3,53,17, 2,61,34, 2,61,33, + 2,61,39, 1,84,13, 3,53,23, 1,84, 8, 1,84,11, 2,61,32, 1,84,15, 1,84, 9, + 1,84,16, 1,84, 3, 2,61,36, 3,58,53, 2,61,28, 3,49,57, 3,53,25, 2,66, 5, + 3,69,40, 0, 0, 0, 1,86,61, 2,66, 2, 2,66, 4, 3,56, 8, 1,86,59, 2,65,94, + /* plane 0, page 112 */ + 0, 255, /* first, last */ + 2,66, 1, 2,65,90, 3,56,10, 3,56, 7, 2,56, 3, 2,65,91, 1,86,60, 2,65,87, + 3,56, 6, 1,86,57, 2,66, 6, 1,86,58, 2,65,88, 2,65,89, 2,65,93, 1,86,63, + 3,56, 9, 1,86,62, 4,59,62, 3,56,11, 2,65,92, 1,88,37, 2,69,74, 2,69,80, + 1,88,38, 2,69,71, 1,88,35, 1,88,32, 2,69,82, 1,88,36, 3,58,50, 1,88,33, + 2,69,73, 2,69,76, 2,69,77, 2,69,78, 2,69,81, 3,58,52, 2,66, 3, 2,69,72, + 1,88,34, 2,69,79, 2,73,20, 2,69,75, 3,58,51, 3,69,42, 3,69,41, 2,73,11, + 1,89,85, 2,73,14, 1,89,86, 2,73,23, 2,73,13, 2,73,10, 3,60,49, 2,73,12, + 2,73,16, 2,73,19, 2,73,18, 2,73,22, 2,73, 9, 3,60,47, 1,89,84, 2,73,17, + 2,73,21, 2,73,24, 2,73,15, 2,75,65, 2,75,66, 2,75,70, 2,75,71, 3,62,28, + 2,75,68, 2,75,69, 2,75,67, 3,62,26, 1,90,84, 3,62,27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1,91,68, 2,77,57, 3,64,22, 3,63,50, 2,77,54, 2,77,55, 2,77,56, + 1,91,69, 3,64,23, 2,79,20, 2,79,19, 3,69,43, 2,80,29, 1,92,64, 2,80,27, + 2,80,30, 2,80,28, 2,81, 5, 1,93, 4, 1,93,18, 2,81,81, 2,81,59, 3,65,89, + 2,81,80, 2,82,30, 2,82,31, 1,37,54, 4, 1,48, 0, 0, 0, 3, 4, 8, 3, 4, 6, + 1,40,40, 2, 2,65, 3, 4, 7, 3, 4,11, 2, 4,62, 3, 6,66, 1,43, 2, 3, 6,63, + 1,43, 5, 3, 6,62, 2, 4,63, 3, 6,67, 1,43, 3, 1,43, 4, 3, 6,64,15, 4,81, + 0, 0, 0, 3, 9,87, 2, 7,88, 2, 7,90, 2, 7,85, 2, 7,82, 2, 7,84, 3, 9,84, + 3, 9,80, 3, 9,85, 1,46,69, 3, 9,79, 3, 9,89, 3, 9,86, 1,46,67, 3, 9,82, + 3, 9,81, 2, 7,86, 1,46,68, 2, 7,83, 2, 7,80, 1,46,66, 2, 7,87, 4, 7, 9, + 2, 7,81, 1,46,70, 2, 7,89, 4, 7,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,11,79, + 3,13,62, 2,11,83, 3,13,60, 3,13,58, 1,50,26, 3,13,56, 4,10, 6, 3,13,69, + 3,13,66, 2,11,86, 3,13,63, 1,50,18, 1,50,21, 1,50,23, 1,50,25, 1,50,22, + 2,11,82, 2,11,81, 3,13,68, 1,50,20, 2,11,84, 2,11,85, 3,13,67, 2,11,78, + 1,50,24, 3,13,72, 1,50,19, 3,13,61, 0, 0, 0, 0, 0, 0, 2,11,80, 3,69,45, + 4,10, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,18, 8, 2,16,58, 2,16,59, 2,16,60, + 1,54,51, 4,13,85, 1,54,47, 2,16,49, 3,18,10, 2,16,57, 2,16,62, 1,54,52, + 3,18,11, 2,16,47, 2,16,53, 2,16,46, 2,16,56, 3,18,17, 3,18,15, 2,16,52, + 1,54,48, 1,54,50, 2,16,61, 3,18, 9, 2,16,45, 2,16,48, 2,16,54, 3,18,13, + 2,16,55, 2,16,63, 2,16,51, 3,18,12, 1,54,49, 3,69,47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,69,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,18,16, 1,59,82, + 2,22,81, 3,23,16, 3,23,18, 2,22,83, 2,22,79, 3,23,15, 2,22,91, 2,22,77, + 2,22,90, 1,59,78, 2,22,75, 2,29,63, 2,22,85, 1,59,81, 3,23,21, 2,22,86, + /* plane 0, page 113 */ + 0, 255, /* first, last */ + 2,22,89, 3,23,14, 2,22,93, 3,23,12, 2,22,82, 4,18,82, 2,22,87, 3,23,13, + 3,23,17, 1,59,79, 1,59,80, 2,22,92, 2,22,80, 2,22,76, 2,22,94, 3,23,19, + 2,22,84, 3,69,48, 3,69,49, 2,22,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,22,78, + 0, 0, 0, 1,64,46, 1,64,47, 2,29,73, 1,64,53, 3,28,84, 2,29,61, 2,29,70, + 2,29,60, 1,64,50, 2,29,68, 2,29,66, 3,28,93, 2,29,67, 1,64,48, 3,28,92, + 2,29,71,15,28,94, 3,28,79, 3,28,90, 3,28,82, 3,29, 1, 2,29,64, 2,29,62, + 1,64,49, 2,29,65, 2,29,69, 3,28,91, 3,28,89, 3,28,81, 1,64,51, 3,28,83, + 3,28,87, 3,69,51, 2,29,72, 3,69,52, 0, 0, 0, 3,69,53, 0, 0, 0, 3,69,50, + 0, 0, 0, 2,36,54, 2,36,61, 2,36,63, 2,36,69, 3,34,55, 1,69, 2, 2,36,49, + 3,34,44, 1,68,88, 3,34,46, 2,36,64, 1,68,93, 2,36,70, 1,68,84, 3,34,49, + 2,36,67, 3,34,56, 2,36,51, 2,36,68, 2,36,50, 0, 0, 0, 1,69, 4, 3,34,50, + 2,36,62, 1,68,85, 2,36,71, 3,40,28, 1,68,90, 2,36,55, 1,69, 1, 2,36,66, + 2,36,53, 2,36,60, 2,36,56, 2,36,52, 1,68,87, 1,68,94, 1,68,92, 1,68,89, + 1,69, 3, 1,68,86, 2,36,59, 3,34,47, 1,68,91, 3,34,57, 1,64,52, 3,34,41, + 2,36,65, 3,69,57, 2,36,57, 0, 0, 0, 3,34,51, 3,69,55, 3,69,56, 3,69,54, + 2,36,58, 4,36,55, 4,36,59, 2,43,71, 3,39,79, 1,73,59, 3,39,78, 3,39,76, + 2,43,67, 2,43,73, 2,43,69, 3,39,80, 1,73,61, 2,43,68, 2,43,72, 2,43,64, + 3,39,82, 2,43,66, 1,73,60, 3,39,74, 3,39,77, 3,39,75, 3,39,72, 2,43,70, + 2,43,65, 3,39,71, 1,73,62, 3,69,59, 1,73,57,15,41,43, 3,69,58, 2,43,74, + 15,41,63, 1,73,58, 2,49,79, 2,49,76, 2,49,88, 2,49,82, 2,49,84, 1,77,62, + 2,49,78, 2,49,86, 3,45,10, 3,45, 4, 2,49,85, 2,49,83, 3,45, 9, 2,49,89, + 1,77,65, 2,49,80, 2,49,87, 3,45, 8, 1,77,63, 3,45, 5, 3,45, 2, 2,49,75, + 2,49,77, 1,77,64, 2,49,74, 2,49,90, 3,69,60, 2,49,81, 3,49,66, 3,49,58, + 2,56,22, 1,81,27, 3,49,64, 3,49,60, 2,56,33, 2,56,31, 1,81,21, 2,56,21, + 2,56,24, 2,56,25, 2,56,20, 1,81,31, 1,81,32, 2,56,19, 2,56,34, 2,56,29, + 1,81,25, 1,81,22, 2,56,28, 2,56,26, 3,49,67, 4,49, 3, 1,81,28, 2,56,30, + 1,81,23, 3,49,62, 1,81,24, 3,49,70, 2,56,27, 1,81,26, 2,56,23, 7,15,47, + 2,56,32, 1,81,29, 2,56,35, 2,56,36, 1,81,30, 3,69,61, 3,69,62, 1,84,18, + 1,84,25, 2,61,40, 2,61,46, 3,53,28, 2,61,44, 1,84,21, 1,84,20, 1,84,17, + 2,61,42, 3,53,30, 3,53,35, 3,53,32, 1,84,23, 1,84,22, 1,84,19, 3,53,33, + 2,61,45, 2,61,41, 2,61,43, 3,53,34, 1,84,24,15,58,83, 0, 0, 0, 0, 0, 0, + 1,86,67, 2,66, 9, 3,56,13, 1,86,64, 1,86,65, 2,66,11, 1,86,66, 2,66, 8, + /* plane 0, page 114 */ + 0, 255, /* first, last */ + 3,56,14, 2,66, 7, 2,69,86, 2,66,10, 3,58,54, 2,69,87, 1,88,39, 2,69,85, + 3,58,55, 4,63,94, 2,69,84, 3,60,57, 2,69,83, 1,88,40, 3,69,63, 3,60,54, + 1,89,87, 3,60,56, 3,60,53, 2,73,25, 2,73,26, 3,58,56, 3,60,51, 3,60,55, + 3,69,65, 2,75,74, 2,75,73, 1,90,85, 3,63,51, 2,75,72, 2,77,58, 2,77,59, + 3,63,52, 3,64,25, 2,79,21, 2,80,31, 3,65,35, 3,65,34, 2,81, 6, 2,82,12, + 1,93,38, 2,82,32, 1,37,55, 4, 1,49, 1,46,71, 1,46,72, 3,13,73, 4,10,10, + 1,50,27, 0, 0, 0, 3,29, 2, 0, 0, 0, 4,42,76, 1,84,26, 1,37,56, 0, 0, 0, + 1,46,73, 1,54,53, 1,69, 5, 1,37,57, 3,13,75, 1,59,83, 1,73,63, 2, 1,34, + 3, 9,92, 2,11,87, 2,16,64, 4,30,44, 2,43,75, 4,42,77, 1,84,27, 1,37,58, + 1,46,74, 2,11,88, 2,11,89, 2,29,74, 1,64,54, 0, 0, 0, 3,34,61, 2,36,72, + 3,34,60, 3,34,59, 1,69, 6, 2,43,76, 4,36,62, 3,45,14, 1,77,66, 3,45,13, + 1,88,41, 1,37,59, 2,29,75, 1,37,60, 0, 0, 0, 1,40,42, 2, 2,66, 1,40,41, + 1,43, 8, 1,43, 7, 1,43, 6, 2, 4,64, 3, 6,68, 3,10, 1, 3,10, 2, 1,46,75, + 3,10, 3, 1,46,76, 2, 7,91, 4, 7,17, 2,11,90, 3,13,77, 2,11,93, 1,50,29, + 2,11,91, 4,10,15, 1,50,28, 2,11,92, 1,50,30, 0, 0, 0, 2,16,67, 2,16,66, + 2,16,65, 1,54,54, 3,18,22, 2,23, 2, 2,23, 3, 1,59,84, 2,23, 1, 2,23, 4, + 1,64,56, 1,59,85, 3,29, 4, 3,29, 3, 1,64,55, 2,29,79, 2,29,78, 3,29, 5, + 2,29,76, 2,29,77, 0, 0, 0, 2,29,80, 2,36,74, 2,36,73, 2,36,77, 4,30,47, + 2,36,76, 2,36,75, 1,73,64, 2,43,79, 3,39,85, 2,43,78, 1,73,65, 2,43,77, + 2,49,91, 3,45,15, 2,49,92, 1,77,67, 4,49,13, 2,56,37, 2,56,38, 5,46,23, + 0, 0, 0, 2,69,92, 1,88,42, 2,69,91, 2,69,90, 2,69,88, 2,69,89, 1,90,86, + 2,73,27, 2,77,60, 2,81, 7, 3,65,91, 1,37,61, 4, 1,24, 2, 1,68, 1,38,71, + 2, 1,69, 3, 4,12, 3, 4,13, 4, 3, 7, 2, 2,67, 2, 2,68, 3, 6,75, 0, 0, 0, + 0, 0, 0, 3, 6,73, 2, 4,70, 3, 6,70, 3, 6,71, 2, 4,66, 3, 6,74, 2, 4,65, + 1,46,77, 2, 4,69, 1,43,10, 2, 4,67, 1,43, 9, 2, 4,71, 2, 4,68, 3, 6,72, + 0, 0, 0, 2, 8, 1, 2,11,94, 2, 7,93, 2, 8, 6, 3,10, 6, 1,46,78, 3,10,10, + 1,46,81, 2, 8, 7, 2, 8, 3, 3,10, 7, 2, 8, 4, 4, 7,22, 2, 7,92, 1,46,80, + 2, 7,94, 1,46,79, 2, 8, 5, 3,10, 8, 2, 8, 2, 6,12,94, 0, 0, 0, 2,12, 4, + 1,50,32, 1,50,33, 3,13,85, 2,12, 7, 2,12, 1, 3,13,84, 2,12, 6, 3,13,80, + 2,12, 2, 1,50,31, 2,12, 5, 2,12, 3, 3,13,83, 3,13,81, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,16,73, 2,16,70, 3,18,24, 2,16,72, 1,54,59, + 1,54,58, 1,54,56, 2,16,69, 2,16,74, 1,54,55, 1,54,57, 2,16,71, 2,23,12, + /* plane 0, page 115 */ + 0, 255, /* first, last */ + 2,16,68, 2,16,75, 3,18,25, 0, 0, 0, 4,19, 3, 4,19,10, 3,29, 6, 2,23, 7, + 2,23,11, 5,19,52, 2,23,10, 2,29,82, 2,29,93, 4,19,13, 3,23,27, 2,23,13, + 3,23,26, 2,23, 8, 2,29,81, 1,59,89, 4,19, 2, 4,19,12, 1,59,88, 2,23, 6, + 2,23, 9, 1,59,90, 3,23,25, 1,59,87, 1,59,86, 2,23, 5, 2,23,14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2,29,84, 2,29,91, 3,29, 7, 1,64,58, 2,29,90, 2,29,87, + 3,29,14, 1,64,60, 3,29, 9, 3,29,11, 3,29,10, 2,29,89, 3,34,65, 3,29,13, + 2,29,83, 2,29,85, 2,29,88, 2,29,86, 1,64,59, 2,29,92, 1,64,57, 1,69, 7, + 3,29, 8, 0, 0, 0, 2,36,81, 2,36,80, 2,36,78, 6,52,92, 1,69,10, 1,69, 9, + 2,36,82, 3,34,63, 2,36,79, 2,43,80, 1,73,66, 1,69, 8, 3,34,66, 3,69,66, + 3,69,67, 2,36,84, 2,36,83, 3,45,16, 2,43,83, 2,43,81, 1,77,68, 3,39,89, + 1,73,67, 2,43,82, 2,49,94, 3,39,88, 3,39,90, 3,39,87, 4,42,87, 1,77,69, + 2,49,93, 2,50, 8, 2,50, 7, 2,50, 5, 4,42,85, 2,50, 4, 2,50, 1, 2,50, 2, + 2,50, 3, 2,50, 6, 2,50, 9, 0, 0, 0, 0, 0, 0, 2,56,43, 2,56,40, 2,56,41, + 1,81,33, 2,56,39, 2,56,45, 2,56,44, 2,56,42, 0, 0, 0, 2,61,48, 2,61,49, + 1,84,28, 3,53,41, 1,84,29, 2,61,47, 4,54,76, 1,86,69, 2,66,12, 1,86,68, + 1,88,43, 4,64, 5, 1,88,44, 1,89,88, 2,73,29, 2,73,28, 2,75,75, 2,77,61, + 1,91,70, 2,79,23, 2,79,22, 2,79,24, 1,38,72, 2,12, 8, 1,54,60, 1,59,91, + 2,23,15, 1,38,73, 2, 1,70, 1,37,62, 3, 2,58, 3, 1,75, 2, 2,69, 3, 4,15, + 4, 3,10,15, 2,70, 2, 4,76, 2, 4,74, 2, 4,75, 2, 4,72, 1,43,11, 2, 4,73, + 3, 6,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,10,19, 2, 8,15, 3,10,13, 1,46,84, + 2, 8,13, 2, 8, 9, 2, 8,12, 3,10,12, 2, 8, 8, 1,46,86, 2, 8,11, 3,10,11, + 1,46,83, 1,46,82, 3,10,18, 1,46,85, 2, 8,14, 2, 8,10, 0, 0, 0, 3,10,15, + 0, 0, 0, 0, 0, 0, 1,50,37, 1,50,40, 2,12,16, 2,12,15, 2,12,14, 1,50,34, + 2,12,23, 2,12,13, 4,14,10, 1,50,36, 2,16,80, 3,13,88, 2,12,20, 2,12,18, + 1,50,39, 3,13,91, 2,12,10, 2,12,21, 3,13,87, 2,12,12, 2,12,22, 2,12,19, + 2,12,11, 3,13,90, 1,50,35, 2,12,24, 2,12, 9, 1,50,38, 3,13,94, 3,13,89, + 3,13,92, 0, 0, 0, 2,16,85, 2,16,76, 2,16,87, 3,18,30, 2,16,79, 2,16,90, + 2,16,91, 2,16,77, 2,16,89, 2,16,86, 2,16,84, 2,16,88, 1,54,66, 3,18,32, + 1,54,64, 3,18,39, 3,18,28, 2,16,82, 3,18,38, 2,16,78, 3,18,33, 2,16,81, + 2,16,92, 2,16,83, 1,54,65, 2,12,17, 3,18,29, 1,54,61, 1,54,63, 3,69,68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,23,29, 2,23,29, 2,23,18, 2,23,16, 3,29,24, + 2,23,17, 3,18,31, 2,23,24, 3,23,32, 2,23,25, 2,23,21, 1,60, 2, 2,23,26, + /* plane 0, page 116 */ + 0, 255, /* first, last */ + 2,23,23, 2,23,20, 3,23,28, 1,59,94, 2,23,19, 1,59,92, 1,60, 1, 2,23,22, + 2,23,30, 1,54,62, 1,59,93, 2,23,28, 2,23,27, 1,60, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,69,69,15,22,55, 3,29,22, 3,29,26, 2,30, 4, 3,29,15, + 3,29,27, 3,29,18, 2,30, 5, 1,64,70, 3,29,25, 2,30,11, 3,34,77, 3,29,21, + 2,30,13, 2,30, 6, 1,64,64, 2,30,10, 2,30, 9, 1,64,65, 1,64,71, 3,34,68, + 1,64,72, 2,30,12, 1,64,62, 2,30, 3, 2,30, 1, 2,30, 7, 2,29,94, 1,64,69, + 2,30, 2, 2,30, 8, 2,30,14, 1,64,63, 1,64,68, 1,64,66, 1,64,67, 0, 0, 0, + 3,29,19, 3,29,28, 1,64,61, 3,69,70, 3,29,23, 3,34,72, 3,34,85, 1,69,17, + 2,36,91, 1,69,16, 2,37, 1, 3,34,79, 2,36,85, 3,34,84, 2,37, 2, 3,34,78, + 3,34,70, 3,34,81, 2,36,86, 2,36,87, 3,34,83, 2,37, 3, 2,36,94, 2,36,92, + 2,36,93, 2,36,89, 2,36,88, 3,34,71, 2,37, 4, 1,69,13, 3,34,75, 2,36,90, + 3,34,80, 1,69,18, 1,69,12, 1,69,19, 1,69,20, 3,34,74, 1,69,15, 1,69,14, + 3,40, 5, 3,39,94, 2,43,84, 1,73,69, 1,73,68, 3,39,92, 3,39,93, 2,43,89, + 3,40, 2, 1,77,70, 1,73,70, 3,40, 1, 3,39,91, 1,73,72, 2,43,90, 1,69,11, + 1,73,71, 2,43,86, 2,43,88, 2,43,85, 3,40, 7, 2,43,87, 3,40, 3, 0, 0, 0, + 15,41,86, 2,50,19, 3,45,17, 3,45,27, 2,50,18, 2,50,15, 1,77,73, 2,56,46, + 1,77,74, 2,50,14, 3,45,25, 1,77,72, 3,45,22, 2,50,16, 2,50,13, 2,50,10, + 2,50,17, 2,50,11, 2,50,12, 1,77,71, 3,45,21, 3,69,72, 0, 0, 0, 4,49,25, + 2,61,53, 4,49,26, 2,56,50, 3,45,26, 2,56,49, 2,56,51, 3,49,74, 2,61,50, + 1,81,36, 4,49,24, 2,56,47, 3,49,71, 1,81,34, 3,49,76, 1,81,38, 1,81,37, + 2,56,48, 2,56,52, 3,49,75, 1,81,35, 3,69,71, 2,61,57, 1,84,32, 1,86,70, + 1,84,33, 1,84,30, 2,61,54, 2,61,52, 3,53,47, 2,61,55, 3,53,43, 2,61,58, + 1,84,31, 2,61,56, 2,61,51, 3,53,45, 3,69,73, 2,66,15, 2,66,18, 2,70, 1, + 2,66,13, 3,56,15, 2,73,30, 2,66,19, 3,56,16, 1,88,45, 2,66,17, 1,86,71, + 2,66,14, 2,66,16, 2,66,20, 2,70, 2, 3,58,58, 2,69,94, 4,64, 7, 3,58,60, + 3,58,61, 3,58,59, 1,88,46, 2,69,93, 3,60,62, 3,60,60, 3,60,63, 1,89,89, + 3,60,61, 3,60,64, 0, 0, 0, 3,62,29, 1,90,88, 2,77,63, 1,90,87, 2,77,65, + 2,77,62, 2,77,64, 1,92,28, 2,80,32, 1,38,74, 2, 8,16, 2,16,93, 2,16,94, + 1,60, 4, 2,37, 5, 1,81,39, 1,88,47, 1,91,71, 2,80,33, 1,38,75, 0, 0, 0, + 2, 8,17, 1, 3, 2, 4,10,28, 3,14, 2, 2,12,25, 3,14, 1, 2,12,26, 3,14, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,18,40, 2,17, 1, 2,17, 2, 1,60, 5, 1,60, 6, + 15,22,71, 3,29,29, 4,25, 5, 2,30,15, 0, 0, 0, 2,37, 8, 2,37, 7, 2,37, 6, + /* plane 0, page 117 */ + 0, 255, /* first, last */ + 2,43,91, 3,34,87, 2,43,92, 2,43,93, 1,73,73, 0, 0, 0, 3,40, 8, 2,50,21, + 2,50,20, 3,45,29, 3,49,77, 2,56,53, 1,81,40, 1,81,41, 3,49,78, 2,61,62, + 2,61,59, 2,61,60, 2,61,61, 2,66,22, 2,66,21, 1,86,72, 2,70, 3, 2,75,76, + 1,38,76, 0, 0, 0, 1,50,41, 3,23,36, 1,60, 7, 2,37, 9, 3,34,88, 1,38,77, + 4,10,32, 2,17, 3, 1,60, 8, 3,23,37, 3,29,30, 1,64,73, 1,64,74, 5,39,41, + 1,38,78, 1,38,79, 2, 2,70, 1,43,13, 1,43,12, 1,50,42, 2,12,27, 2,30,16, + 1,38,80, 1,38,81, 1,38,82, 1,38,83, 0, 0, 0, 0, 0, 0, 4, 3,11, 1,43,14, + 1,43,15, 2, 4,78, 2, 4,77, 3,10,23, 0, 0, 0, 1,46,87, 2, 8,20, 2, 8,18, + 2, 8,19, 3,10,24, 3,10,21, 4, 7,32, 3,10,22, 0, 0, 0, 3,14, 7, 2,12,28, + 2,12,29, 3,14, 5, 3,14, 8, 1,50,46, 1,50,44, 3,14,10, 1,50,45, 1,50,43, + 3,14, 6,15,11,90, 0, 0, 0,15,12,42, 1,54,67, 3,18,46, 3,18,45, 3,18,48, + 3,18,47, 1,54,71, 1,54,70, 2,17, 4, 1,54,69, 1,54,68, 3,18,49, 2,17, 5, + 0, 0, 0, 3,23,38, 1,60,11, 2,23,32, 2,23,31, 1,60, 9, 1,60,10, 3,23,41, + 3,23,39, 0, 0, 0, 1,64,76, 1,64,75, 2,30,18, 3,29,35, 3,29,34, 2,30,17, + 1,60,12, 3,29,36, 4,25,12, 0, 0, 0, 0, 0, 0, 4,30,75, 1,69,21, 2,37,11, + 1,69,22, 2,37,10, 3,34,91, 4,36,92, 4,36,91, 2,43,94, 2,50,22, 1,77,75, + 2,56,54, 3,49,80, 0, 0, 0, 3,53,50, 2,61,63, 4,59,84, 1,88,49, 1,88,48, + 4,67,72, 3,60,66, 1,91,72, 1,38,84, 2, 8,21, 0, 0, 0, 3,29,37, 1,60,13, + 2,44, 1, 1,73,74, 3, 2,59, 3, 6,83, 2, 4,79, 2, 4,80, 0, 0, 0, 0, 0, 0, + 2, 8,22, 1,46,89, 1,46,90, 3,10,26, 4, 7,35, 1,46,88, 3,10,27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1,50,50, 1,50,51, 1,50,48, 1,50,49, 3,14,11, 2,12,30, + 3,14,15, 4,10,42, 2,12,31, 1,50,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2,17, 6, 3,18,55, 1,54,75, 1,54,76, 3,18,53, 1,60,16, 2,17,12, 4,14,32, + 1,54,81, 1,54,79, 2,17,13, 2,17, 8, 1,54,78, 1,54,77, 1,54,72, 2,17,11, + 2,17,10, 2,17, 7, 1,54,80, 3,18,50, 2,17, 9, 1,54,73, 4,14,20, 1,54,74, + 0, 0, 0, 0, 0, 0, 1,60,17, 2,23,36, 2,23,37, 1,60,18, 2,23,33, 2,23,35, + 2,23,39, 2,23,38, 2,23,34, 3,23,42, 1,60,14, 1,60,15, 0, 0, 0, 2,30,26, + 1,64,81, 1,64,80, 2,30,20, 1,64,78, 4,25,20, 2,30,23, 1,64,82, 2,30,24, + 1,64,83, 2,30,21, 1,64,77, 1,64,79, 2,30,25, 3,29,39, 2,30,22, 2,30,19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,30,87, 2,37,24, 3,34,92, 2,37,13, + 1,69,24, 1,69,27, 1,69,26, 1,69,31, 1,69,30, 2,37,25, 2,37,23, 2,37,16, + 2,37,20, 2,37,19, 1,69,28, 2,37,22, 2,37,18, 2,37,26, 2,37,17, 1,69,29, + /* plane 0, page 118 */ + 0, 255, /* first, last */ + 1,69,23, 1,69,25, 3,34,93, 2,37,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,40,11, + 2,44, 3, 1,73,78, 2,44, 7, 1,73,77, 2,44, 4, 1,73,76, 3,40, 9, 2,37,14, + 2,37,21, 2,44, 6, 4,36,94, 1,73,79, 2,44, 8, 2,44, 5, 2,44, 2, 0, 0, 0, + 0, 0, 0, 2,50,25, 2,50,29, 2,50,31, 2,50,27, 2,50,26, 2,50,24, 1,77,78, + 1,77,76, 1,77,81, 1,77,82, 2,50,28, 1,77,79, 2,50,23, 1,77,80, 1,73,75, + 2,50,30, 1,77,77, 0, 0, 0, 0, 0, 0, 3,49,81, 2,56,56, 4,49,47, 2,56,55, + 2,56,63, 2,56,57, 2,56,62, 2,56,59, 1,81,42, 2,56,61, 3,49,83, 3,49,82, + 1,81,43, 4,49,45, 1,81,44, 3,49,84, 2,56,60, 2,56,58, 0, 0, 0, 0, 0, 0, + 4,55, 1, 4,55, 4, 1,84,35, 2,61,64, 3,53,53, 3,53,51, 1,84,34, 2,61,67, + 2,61,65, 2,61,66, 5,53,73, 5,60,22, 1,84,36, 0, 0, 0, 3,53,52, 3,56,20, + 2,66,26, 3,56,19, 1,86,75, 2,66,27, 4,59,85, 4,59,89, 1,86,73, 2,66,28, + 1,86,74, 2,66,25, 2,66,29, 3,56,18, 2,66,23, 0, 0, 0, 0, 0, 0, 1,88,50, + 2,70, 4, 1,88,51, 1,89,90, 0, 0, 0, 2,66,24, 1,89,91, 0, 0, 0, 3,62,31, + 3,62,30, 1,90,89, 2,75,77, 0, 0, 0, 1,91,74, 2,77,66, 1,91,73, 3,64,27, + 2,79,25, 1,92,65, 1,92,66, 3,69,74, 7,68,50, 2,82,26, 3, 2,60, 3,69,75, + 1,50,52, 2,12,32, 0, 0, 0, 1,64,84, 1,64,85, 1,38,85, 1,40,43, 2, 2,71, + 3, 6,84, 2, 4,81, 1,43,16, 3, 6,86, 1,46,91, 4,10,44, 1,50,53, 1,50,54, + 1,50,55, 2,23,41, 2,17,14, 1,54,82, 4,14,33, 4,14,35, 1,60,19, 2,23,40, + 3,23,45, 0, 0, 0, 2,30,28, 1,64,87, 3,29,44, 2,30,27, 1,64,86, 3,34,94, + 3,35, 1, 2,37,27, 1,77,83, 2,50,35, 2,50,32, 2,50,33, 2,50,34, 4,49,52, + 4,49,53, 3,49,86, 5,60,35, 3,53,54, 2,61,68, 3,53,55, 2,66,30, 4,59,92, + 4,59,93, 3,58,62, 2,73,32, 2,73,31, 4,70,58, 2,77,67, 1,38,86, 2, 8,23, + 1,54,83, 0, 0, 0, 0, 0, 0, 3,29,45, 1,64,88, 2,37,28, 4,37,20, 3,40,16, + 2,44, 9, 3,40,14, 1,77,84, 2,56,64, 3,69,76, 2,66,31, 2,73,33, 1,38,87, + 3, 6,87, 3, 6,88, 1,46,92, 1,50,58, 2,12,33, 1,50,59, 1,50,57, 3,14,18, + 1,50,56, 2,17,15, 1,54,84, 3,18,58, 3,18,59, 1,54,85, 1,54,86, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1,60,21, 2,23,42, 1,60,20, 3,23,48, 3,23,50, 3,23,49, + 15,23, 3, 3,29,47, 2,30,29, 1,60,22, 1,64,89, 2,37,29, 1,69,32, 1,69,33, + 4,37,21, 1,73,80, 3,40,17, 1,73,81, 1,77,85, 1,81,46, 2,56,65, 1,81,45, + 4,55,13, 2,61,69, 1,84,37, 3,56,21, 2,66,32, 2,73,34, 1,38,88, 1,43,17, + 2, 8,26, 2, 8,25, 1,46,93, 2, 8,24, 1,46,94, 2, 8,27, 4,10,53, 2,12,39, + 1,50,62, 1,50,61, 2,12,41, 2,12,40, 1,50,66, 3,14,21, 1,50,65, 3,14,19, + /* plane 0, page 119 */ + 0, 254, /* first, last */ + 4,10,57, 1,50,60, 4,10,61, 2,12,35, 2,12,36, 2,12,37, 4,10,50, 1,50,67, + 2,12,34, 1,50,63, 2,12,38, 1,50,64, 0, 0, 0, 0, 0, 0, 3,18,68, 3,18,63, + 2,17,18, 2,17,22, 2,17,20, 2,17,19, 4,14,53, 2,17,23, 3,18,62, 4,14,47, + 3,18,72, 2,17,24, 2,17,25, 2,17,17, 4,14,49, 2,17,16, 3,23,57, 1,54,88, + 1,54,89, 3,18,71, 2,17,26, 2,17,21, 3,18,69, 2,23,51, 3,23,53, 2,17,27, + 1,54,90, 1,54,87, 3,18,60, 3,18,67, 0, 0, 0, 2,23,45, 4,19,47, 2,23,44, + 3,23,51, 2,23,46, 2,23,47, 2,23,49, 2,23,48, 2,23,53, 1,60,26, 1,60,23, + 1,60,27, 2,23,43, 1,60,28, 2,23,52, 1,60,25, 2,23,50, 1,60,24, 3,18,66, + 3,23,55, 4,19,54, 3,29,54, 3,29,51, 2,30,32, 2,30,34, 2,30,30, 2,30,31, + 3,29,49, 3,29,50, 2,30,35, 2,30,37, 2,30,38, 2,30,33, 2,30,36, 1,64,90, + 0, 0, 0, 0, 0, 0, 2,37,33, 3,35, 7, 2,37,38, 2,37,30, 2,37,34, 4,31, 9, + 3,35, 8, 2,37,39, 2,37,35, 1,69,34, 1,69,42, 3,35, 5, 1,69,37, 2,37,31, + 2,37,32, 1,73,85, 1,69,45, 1,69,38, 3,35, 6, 1,69,43, 1,69,36, 2,37,37, + 1,69,44, 2,37,36, 1,69,40, 1,69,35, 1,69,41, 2,37,40, 2,44,14, 2,44,16, + 4,37,34, 3,40,25, 4,37,32, 4,37,29, 3,40,19, 3,40,22, 3,40,21, 3,40,20, + 3,40,24, 1,69,39, 3,40,27, 3,40,29, 2,44,11, 1,73,83, 2,44,17, 1,73,84, + 2,44,15, 2,44,10, 2,44,13, 2,44,18, 1,73,82, 2,44,12, 0, 0, 0, 1,77,87, + 2,50,39, 2,50,38, 3,45,36, 1,77,90, 1,77,88, 2,50,36, 1,77,86, 2,50,37, + 3,45,38, 1,77,89, 0, 0, 0, 0, 0, 0, 4,49,63, 2,56,73, 3,49,91, 2,56,75, + 3,49,89, 2,56,74, 2,56,66, 2,56,70, 2,56,69, 2,56,67, 1,81,48, 1,81,49, + 1,81,47, 2,56,68, 2,56,71, 2,56,72, 3,53,57, 1,81,50, 3,53,56, 1,84,42, + 2,61,77, 3,53,59, 1,84,39, 2,61,71, 1,84,41, 1,84,43, 4,49,65, 3,53,60, + 1,84,40, 2,61,76, 2,61,72, 1,84,38, 2,61,75, 2,61,70, 2,61,74, 2,61,73, + 3,56,22, 3,56,24, 2,66,34, 1,86,78, 1,86,79, 1,86,76, 3,56,27, 1,86,77, + 3,56,26, 3,56,25, 2,66,33, 4,64,25, 2,70, 7, 3,58,64, 3,58,63, 1,88,52, + 0, 0, 0, 2,70, 5, 2,70, 6, 0, 0, 0, 2,73,35, 2,73,38, 2,73,36, 2,73,37, + 2,75,78, 3,62,34, 4,70,62, 1,90,90, 2,79,26, 2,80,34, 4,75,84, 1,92,67, + 2,81, 8, 2,81, 9, 1,93,19, 1,38,89, 1,50,68, 3,18,73, 2,30,39, 3,29,55, + 2,37,41, 4,76,86, 1,38,90, 1,43,18, 4, 7,50, 1,47, 1, 3,14,22, 2,12,42, + 2,12,43, 1,54,91, 4,19,59, 0, 0, 0, 2,30,40, 1,64,91, 1,69,46, 1,84,44, + 2,61,78, 2,70, 8, 2,73,39, 1,38,91, 3, 6,91, 3, 6,92,15, 5, 3, 2, 8,33, + 2, 8,28, 2, 8,30, 2, 8,32, 2, 8,31, 2, 8,29, 1,47, 2,15, 8,20, + /* plane 0, page 120 */ + 2, 255, /* first, last */ + 1,50,69, 2,12,52, 3,14,25, 2,12,47, 2,12,44, 3,14,27, + 3,14,30, 2,12,51, 3,14,23, 3,14,26, 1,50,71, 1,50,72, 2,12,50, 2,12,49, + 2,12,48, 2,12,45, 2,12,46, 2,12,53, 1,50,70, 3,14,29, 0, 0, 0, 0, 0, 0, + 15,12,60, 3,69,77, 0, 0, 0, 3,69,78, 0, 0, 0, 1,55, 1, 3,70,92, 1,55, 7, + 1,55, 6, 2,17,36, 2,17,30, 2,17,28, 3,18,76, 1,55, 4, 2,23,60, 1,54,93, + 2,17,33, 2,17,37, 2,17,39, 2,17,35, 2,17,29, 1,55, 5, 2,17,34, 2,17,32, + 1,54,92, 2,17,40, 1,55, 8, 2,17,38, 1,55, 2, 2,17,31, 3,18,77, 1,55, 3, + 1,54,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,69,79, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,23,66, 1,60,30, 4,19,61, 2,23,61, 3,23,67, 3,23,61, + 2,23,54, 2,23,56, 2,23,58, 3,23,63, 2,23,59, 2,23,57, 1,60,31, 3,23,65, + 2,23,62, 3,23,64, 2,23,55, 3,69,80, 3,69,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,69,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,30,44, 1,64,92, 2,30,52, 3,29,60, + 2,30,41, 6,44,15, 2,30,53, 3,29,57, 2,30,42, 2,30,43, 3,29,61, 4,25,52, + 2,30,51, 2,30,50, 2,30,47, 1,60,29, 1,64,93, 2,30,45, 2,30,48, 1,64,94, + 2,30,49, 2,30,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,29,58, 0, 0, 0, + 3,35,17, 2,37,52, 3,35,13, 2,37,56, 1,69,53, 3,35,14, 2,44,24, 1,69,56, + 2,37,54, 3,35,23, 3,35, 9, 2,37,51, 2,37,46, 2,37,48, 2,37,49, 2,37,42, + 3,35,21, 1,69,52, 3,35,11, 3,35,16, 1,69,51, 3,35,20, 1,69,47, 2,37,45, + 3,35,10, 1,69,54, 3,35,22, 1,69,55, 2,37,44, 2,37,47, 2,37,55, 1,69,49, + 1,69,50, 2,37,53, 2,37,43, 0, 0, 0,15,36, 5, 4,37,51, 2,44,26, 1,73,87, + 2,44,28, 2,37,50, 2,44,30, 1,73,91, 2,44,31, 2,44,27, 3,40,30, 1,73,88, + 2,44,23, 1,73,90, 2,44,20, 2,44,25, 2,44,29, 2,44,22, 3,40,31, 3,40,37, + 1,69,48, 3,40,36, 2,44,19, 1,73,89, 2,44,21, 0, 0, 0, 0, 0, 0, 3,69,83, + 3,40,32,15,42,31, 1,77,93, 2,50,41, 1,78, 3, 4,43,57, 1,78, 1, 4,43,55, + 3,45,42, 1,73,86, 3,45,45, 2,50,48, 2,50,49, 1,77,92, 3,45,40, 3,45,44, + 2,50,47, 2,50,50, 1,77,94, 1,77,91, 2,50,43, 2,50,40, 2,50,45, 2,50,42, + 1,78, 4, 2,50,44, 3,45,43, 3,45,41, 2,50,46, 1,78, 2, 3,50, 1, 0, 0, 0, + 3,69,84, 0, 0, 0, 1,81,52, 2,56,82, 3,50, 4, 2,56,76, 2,56,80, 2,56,86, + 2,56,87, 2,56,83, 2,56,84, 2,56,81, 4,43,61, 2,56,78, 4,49,78, 1,81,54, + 1,81,51, 2,56,77, 2,56,79, 3,50, 2, 1,81,53, 2,56,85, 3,69,85, 1,84,48, + 3,53,64, 3,53,66, 2,61,85, 2,61,79, 1,84,47, 0, 0, 0, 4,55,30, 1,84,45, + 3,53,65, 2,61,87, 1,84,46, 2,61,82, 2,61,83, 2,61,80, 2,61,88, 2,61,84, + /* plane 0, page 121 */ + 0, 255, /* first, last */ + 4,55,32, 1,84,49, 2,61,81, 0, 0, 0, 2,61,89, 2,61,86, 3,56,35, 3,56,30, + 3,56,32, 2,66,38, 3,56,31, 3,56,28, 2,66,35, 3,56,34, 1,86,80, 4,60,18, + 2,66,39, 2,66,41, 2,66,40, 2,66,36, 2,66,37, 3,56,36, 0, 0, 0, 2,70,13, + 3,58,65, 1,88,53, 3,58,66, 2,70,10, 2,70,12, 2,70, 9, 2,70,14, 4,64,34, + 3,58,67, 2,70,11, 3,69,86, 2,73,41, 2,73,44, 2,73,40, 1,89,92, 2,73,42, + 2,73,43, 2,73,45, 1,89,93, 1,90, 1, 1,89,94, 2,75,79, 3,62,37, 2,75,81, + 3,62,35, 2,75,80, 3,62,36, 0, 0, 0, 0, 0, 0, 2,77,68,15,74,70, 3,64,28, + 2,80,35, 2,81,10, 1,38,92, 0, 0, 0, 3, 4,19, 2, 4,82, 1,47, 3, 2, 8,35, + 1,47, 4, 1,47, 5, 2, 8,34, 0, 0, 0, 2,12,58, 2,12,57, 1,50,73, 1,50,76, + 1,50,75, 1,50,74, 2,12,54, 2,12,56, 2,12,55, 3,69,87, 0, 0, 0, 2,17,43, + 1,55,10, 2,17,47, 2,17,46, 2,17,45, 2,17,41, 1,55, 9, 1,55,13, 1,55,16, + 3,18,79, 3,18,80, 1,55,17, 2,17,42, 2,17,44, 1,55,15, 1,55,14, 1,55,12, + 1,55,11, 2,23,69, 3,18,82, 2,23,67, 2,23,63, 1,60,32, 3,29,62, 2,23,64, + 1,60,33, 2,23,65, 2,23,66, 2,23,68, 3,23,70, 1,60,34, 3,23,69, 0, 0, 0, + 2,30,57, 3,29,63, 2,30,56, 2,30,55, 2,30,54, 3,29,68, 3,29,66, 4,25,58, + 0, 0, 0, 2,37,60, 1,69,57, 4,31,38, 2,37,57, 2,37,59, 3,35,24, 1,69,58, + 3,35,29, 1,69,59, 2,37,58, 3,35,25, 3,29,67, 0, 0, 0, 3,69,88, 3,40,40, + 2,44,40, 3,40,39, 2,44,33, 2,44,34, 5,39,94, 1,73,94, 1,73,92, 1,73,93, + 2,44,42, 5,40, 2, 2,44,41, 2,44,38, 2,44,37, 2,44,36, 2,44,35, 2,44,39, + 2,44,32, 3,69,89, 2,50,51, 2,50,56, 2,50,54, 3,45,48, 3,45,49, 3,45,47, + 2,50,53, 2,50,52, 2,50,55, 3,69,90, 2,56,88, 3,50, 6, 1,81,55, 1,84,50, + 2,61,91, 3,50, 7, 1,84,51, 2,61,90, 2,66,43, 2,66,42, 1,86,81, 3,56,37, + 2,70,15, 1,88,54, 2,73,46, 1,91,75, 2,77,69, 3,64,29, 2,80,37, 2,80,36, + 2, 1,71, 1,50,77, 1,50,78, 2,23,70, 3,69,91, 1,69,61, 1,38,93, 1,43,21, + 1,43,20, 1,43,19, 4, 4,72, 3,10,30, 3,10,29, 2, 8,36, 3,10,31, 3,10,34, + 1,47, 7, 1,47, 6, 3,10,36, 1,50,81, 3,69,44, 2,12,60, 2,12,63, 2,12,61, + 3,14,34, 1,50,79, 1,50,80, 3,14,32, 3,14,33, 2,12,59, 2,12,62, 3,14,35, + 1,55,24, 3,18,84, 3,18,83, 3,18,89, 2,17,54, 2,17,56, 2,17,55, 1,55,21, + 2,17,50, 3,18,86, 3,18,91, 1,55,19, 1,55,18, 3,18,87, 1,55,22, 1,55,20, + 3,18,88, 1,55,23, 2,17,53, 2,17,48, 2,17,49, 2,17,52, 2,17,51, 0, 0, 0, + 3,18,92, 3,23,73, 3,23,71, 3,23,75, 0, 0, 0, 3,23,74, 2,23,73, 2,23,74, + 2,23,72, 3,23,76, 2,23,71, 1,60,35,15,23,31, 0, 0, 0, 0, 0, 0, 3,29,69, + /* plane 0, page 122 */ + 0, 255, /* first, last */ + 1,65, 5, 6,44,40, 2,30,58, 2,30,60, 2,30,62, 1,65, 4, 6,44,35, 3,29,70, + 1,65, 2, 3,29,73, 2,30,59, 1,65, 3, 2,30,61, 1,65, 1, 3,29,72, 3,35,33, + 2,37,70, 2,37,61, 2,37,64, 2,37,68, 1,69,65, 2,37,66, 4,31,48, 2,37,65, + 2,37,62, 2,37,63, 1,69,63, 2,37,69, 1,69,62, 3,35,36, 1,69,67, 1,69,66, + 1,69,64, 4,31,42, 2,37,67, 0, 0, 0, 0, 0, 0, 3,69, 4, 2,44,48, 4,37,61, + 2,44,47, 3,40,43, 3,40,45, 2,44,43, 3,40,48, 3,40,47, 1,74, 1, 2,44,46, + 2,44,45, 1,74, 2, 3,40,50,15,42,68, 4,43,67, 4,37,62, 4,43,75, 1,78, 9, + 3,45,53, 2,50,58, 3,45,54, 1,78,10, 1,78, 6, 1,78, 8, 3,45,58, 1,78, 5, + 1,78, 7, 3,45,51, 3,45,55, 0, 0, 0, 2,56,89, 3,50,10, 1,81,58, 2,56,91, + 2,56,90, 3,53,68, 2,44,44, 1,81,60, 1,81,59, 1,81,56, 1,81,57, 3,50,12, + 15,59,57, 0, 0, 0, 0, 0, 0, 3,50, 9, 2,62, 2, 4,55,41, 2,61,94, 1,84,52, + 2,62, 1, 4,55,40, 2,62, 3, 2,61,93, 2,61,92, 0, 0, 0, 0, 0, 0, 2,66,44, + 1,86,84, 1,86,82, 1,86,83, 0, 0, 0, 3,58,70, 4,64,37, 3,58,69, 2,70,16, + 2,70,17, 1,88,56, 3,58,71, 1,88,55, 2,73,48, 2,73,49, 2,73,47, 3,60,68, + 2,77,70, 2,77,71, 3,64,86, 3,64,87, 1,38,94, 2, 2,72, 1,43,22, 0, 0, 0, + 2, 8,37, 1,47, 9, 1,47, 8, 2, 8,38, 3,14,36, 3,14,39, 2,12,65, 1,50,82, + 2,12,64, 1,50,83, 3,14,41, 3,14,40, 1,55,25, 2,17,59, 2,17,57, 2,17,63, + 1,55,26, 2,17,58, 2,17,62, 2,17,60, 2,17,61, 0, 0, 0, 0, 0, 0, 2,23,75, + 2,23,77, 3,23,82, 1,60,36, 3,23,81, 2,23,76, 1,60,37, 1,65, 8, 1,65, 7, + 1,65, 6, 2,30,63, 3,23,80, 4,25,69, 0, 0, 0, 0, 0, 0, 2,37,73, 1,69,68, + 1,69,69, 3,35,38, 2,37,72, 2,37,71, 3,35,39, 0, 0, 0, 0, 0, 0, 3,69,92, + 2,44,49, 1,74, 4, 1,74, 3, 2,44,50, 2,44,51, 0, 0, 0, 1,78,12, 1,78,11, + 3,45,59, 2,57, 1, 2,50,59, 2,50,61, 2,50,60, 2,56,94, 2,56,92, 2,57, 2, + 2,56,93, 5,54,50, 1,81,61, 3,50,15, 4,50, 7, 3,50,14, 2,62, 4, 1,84,53, + 2,62, 5, 2,62, 6, 3,53,72, 0, 0, 0, 1,86,85, 1,86,86, 4,64,43, 1,90, 2, + 3,62,41, 3,62,40, 1,92,29, 1,39, 1, 3, 6,94, 3, 7, 1, 4, 7,59, 3,10,39, + 3,14,46, 2,12,66, 3,14,47, 3,14,45, 3,14,43, 3,14,44, 0, 0, 0,15,12,86, + 2,17,64, 1,55,27, 3,19, 3, 3,19, 6, 3,19, 7, 3,19, 4, 0, 0, 0, 1,61,94, + 1,61,93, 3,23,83, 3,29,81, 1,65,10, 2,30,65, 1,65, 9, 2,30,64, 3,29,80, + 4,31,55, 3,35,41, 3,35,42, 2,37,74, 3,40,52, 1,74, 5, 2,44,52, 1,74, 6, + 3,40,53, 3,50,16, 3,53,73, 3,53,74, 4,55,48, 3,56,41, 1,90, 3, 2,73,50, + 3,63,53, 1,40,44, 1,47,10, 2, 8,39, 3,14,49, 1,50,85, 3,14,48, 1,50,84, + /* plane 0, page 123 */ + 0, 255, /* first, last */ + 2,12,67, 2,12,68, 0, 0, 0, 0, 0, 0, 2,17,66, 2,17,68, 1,55,28, 0, 0, 0, + 2,17,70, 2,17,73, 2,17,71, 3,19,11, 4,14,81, 3,19,10, 2,17,72, 2,17,69, + 2,17,65, 1,55,29, 2,17,74, 2,17,67, 3,19,12, 0, 0, 0, 3,23,88, 3,23,89, + 2,23,86, 1,60,43, 2,24, 1, 1,60,40, 3,23,87, 2,23,88, 1,60,44, 3,23,91, + 1,60,38, 3,23,86, 2,23,83, 2,24, 2, 2,23,84, 2,23,81, 1,60,42, 4,19,92, + 1,60,39, 4,19,90, 2,23,87, 2,23,90, 1,60,41, 2,23,91, 1,60,45, 2,23,92, + 2,23,82, 2,23,89, 2,23,93, 2,23,85, 2,23,80, 2,23,78, 3,23,90, 3,69,93, + 2,23,94,15,23,45, 0, 0, 0, 2,23,79, 0, 0, 0,15,22,94, 0, 0, 0, 5,27, 4, + 2,30,72, 3,29,91, 3,29,88, 3,29,85, 2,30,68, 2,30,74, 1,65,13, 2,30,67, + 2,30,69, 1,65,11, 2,30,66, 1,65,18, 2,30,70, 1,65,17, 2,30,71, 1,65,19, + 1,65,14, 1,65,20, 1,65,15, 3,29,89, 1,65,16, 3,29,82, 1,65,12, 3,29,86, + 2,30,73, 3,69,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,35,47, 4,31,71, + 1,69,72, 2,37,85, 3,35,44, 2,37,88, 2,37,76, 2,37,81, 2,37,75, 1,69,74, + 3,35,53, 2,37,79, 4,31,62, 3,35,45, 3,29,87, 2,37,77, 1,69,73, 3,35,52, + 2,37,84, 2,37,83, 2,37,80, 2,37,82, 2,37,78, 1,74,10, 2,37,87, 1,69,70, + 2,37,86, 3,35,49, 0, 0, 0,15,36,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,40,54, 2,44,68, 3,40,56, 1,74,17, 2,44,63, 3,40,64, 1,74,16, + 2,44,53, 4,37,75, 2,44,55, 1,74, 9, 2,44,60, 2,44,59, 2,44,62, 1,74,14, + 2,44,57, 2,44,56, 3,40,58, 3,40,62, 1,74,13, 1,74, 8, 2,44,58, 1,74,11, + 2,44,64, 2,44,66, 0, 0, 0, 2,44,61, 2,44,54, 1,74,12, 3,40,55, 3,40,61, + 1,78,20, 1,74, 7, 4,37,68, 3,40,60, 2,44,67, 4,37,80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,50,65, 1,78,13, 3,45,60, 2,50,67, + 4,44,11, 1,78,14, 3,45,69, 3,45,61, 1,78,16, 2,50,70, 4,43,90, 2,50,62, + 1,74,15, 2,50,68, 4,43,83, 4,44,17, 4,43,84, 4,44,10, 2,50,64, 3,45,64, + 1,69,71, 1,78,19, 4,44, 1, 4,43,88, 1,78,15, 4,44, 6, 1,78,17, 1,78,18, + 4,43,86, 1,81,64, 2,50,69, 2,50,63, 1,78,21, 3,45,67, 2,50,66, 0, 0, 0, + 3,70, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,57,12, 2,57, 7, 4,50,13, 5,54,73, + 2,57,17, 1,81,62, 2,57, 9, 1,81,66, 2,57,15, 2,57, 6, 2,57, 3, 2,57,18, + 1,84,59, 1,81,67, 2,57,14, 2,57, 4, 1,81,65, 2,57, 8, 1,81,69, 2,57, 5, + 2,57,10, 1,81,68, 2,57,13, 2,57,16, 3,50,19, 3,50,20, 0, 0, 0, 0, 0, 0, + 2,62,24, 2,62,25, 2,62, 9, 2,62,16, 2,62,14, 4,55,63, 3,53,77, 1,84,57, + 2,62,21, 2,57,11, 3,53,75, 2,62,12, 3,53,78, 2,62,22, 1,84,56, 2,62,11, + /* plane 0, page 124 */ + 0, 255, /* first, last */ + 2,62,10, 2,62,20, 2,62,17, 2,62,19, 4,55,52, 2,62, 7, 2,62,23, 1,84,54, + 3,53,80, 2,62,18, 2,62,27, 2,62,15, 1,84,58, 1,84,55, 2,62,13, 2,62, 8, + 2,62,26, 1,81,63, 3,53,81, 0, 0, 0,15,59,63, 4,55,55, 0, 0, 0, 0, 0, 0, + 3,53,79, 2,66,47, 3,56,48, 3,56,46, 2,66,45, 2,66,51, 1,86,90, 2,66,49, + 2,66,48, 1,86,92, 2,66,54, 1,86,91, 3,56,49, 2,66,55, 2,66,52, 1,86,88, + 2,66,53, 2,66,46, 1,86,89, 1,86,87, 2,70,21, 2,66,50, 3,56,44, 3,70, 2, + 2,66,56, 0, 0, 0, 3,70, 3, 2,70,18, 3,58,79, 3,58,78, 4,64,46, 1,88,61, + 1,88,59, 2,70,20, 4,64,44, 2,70,22, 2,70,19, 1,88,60, 1,88,57, 1,88,58, + 1,88,62, 0, 0, 0, 3,70, 4, 1,90, 5, 3,60,70, 2,73,55, 5,76,89, 2,73,54, + 2,73,52, 2,73,51, 2,73,53, 3,60,69, 1,90, 4, 1,90, 6, 3,70, 5,15,69,71, + 1,90,91, 3,62,44, 4,70,79, 2,75,83, 2,75,82, 3,60,71, 3,62,43, 2,77,72, + 3,63,56, 2,77,74, 2,77,76, 2,77,75, 2,77,73, 3,63,55, 3,64,31, 1,91,77, + 1,91,76, 0, 0, 0, 3,64,30, 1,92,31, 1,92,30, 1,92,32, 2,79,28, 2,79,27, + 3,70, 6, 2,81,11, 2,80,38, 2,81,12, 1,93, 5, 3,65,36, 1,93, 6, 2,81,60, + 4,77,59, 3,66,26, 1,93,43, 1,40,45, 3,10,41, 2, 8,40, 3,10,40, 3,14,50, + 2,12,70, 2,12,71, 2,12,69, 3,14,52, 3,14,51, 1,50,86,15,13, 1, 2,12,72, + 2,12,73, 2,12,74, 0, 0, 0, 3,19,17, 2,17,75, 2,17,81, 3,19,14, 3,19,16, + 2,17,79, 1,55,30, 2,17,77, 3,19,18, 2,17,78, 2,17,80, 3,19,13, 0, 0, 0, + 0, 0, 0, 2,17,76, 1,60,46, 3,23,93, 2,24, 3, 1,60,48, 2,24, 5, 1,60,47, + 2,24, 4, 3,23,94, 3,24, 1, 3,24,30, 3,24, 2, 4,20, 2, 2,30,76, 1,65,21, + 3,30, 1, 2,30,78, 2,30,75, 2,24, 6, 3,30, 3, 1,65,22, 3,30, 2, 3,29,94, + 2,30,77, 3,70, 7, 0, 0, 0,15,30, 1,15,30, 3, 0, 0, 0, 3,35,56, 2,37,91, + 3,35,60, 1,69,75, 2,37,89, 1,69,76, 2,37,90, 1,69,77, 4,37,84, 3,40,66, + 3,40,65, 1,74,18, 2,44,72, 2,44,69, 2,44,71, 1,74,19, 1,74,20, 2,44,70, + 15,43, 7,15,43,11, 3,45,79, 3,45,81, 3,45,77, 2,50,71, 3,45,80, 3,45,83, + 2,50,72, 3,45,82, 1,78,22, 2,50,74, 2,50,73, 3,45,78, 1, 3, 3, 4,50,36, + 2,57,22, 2,57,23, 2,57,19, 3,50,23, 2,57,20, 1,81,70, 1,81,71, 2,57,21, + 0, 0, 0, 1,84,65, 3,53,85, 3,53,84, 1,84,61, 1,84,66, 1,84,62, 1,84,64, + 1,84,60, 3,50,25, 1,84,63, 3,56,53, 4,60,58, 4,60,59, 3,56,52, 1,86,93, + 2,62,28, 7,40,55, 2,70,24, 4,64,58, 2,70,23, 3,70, 8, 2,73,56, 1,90, 7, + 1,90, 8, 2,77,78, 2,75,84, 3,65,73, 2,77,77, 3,64,32, 2,81,13, 2,81,82, + 1,40,46, 0, 0, 0, 3, 7, 2, 1,43,23, 3,10,43, 2, 8,41, 1,47,11, 3,10,42, + /* plane 0, page 125 */ + 0, 255, /* first, last */ + 1,50,89, 2,12,77, 1,50,87, 2,12,75, 1,50,92, 1,50,88, 1,50,93, 1,50,91, + 2,12,76, 1,50,90, 1,55,34, 1,55,33, 2,17,92, 1,55,42, 2,17,85, 2,17,91, + 1,55,38, 2,17,84, 2,17,90, 2,17,88, 1,55,37, 1,55,39, 2,17,87, 1,55,32, + 2,17,86, 1,55,43, 1,55,40, 1,55,44, 1,55,41, 2,17,83, 2,17,82, 2,17,89, + 1,55,35, 1,55,31, 1,55,36, 4,15, 5, 3,19,23, 3,19,27, 0, 0, 0, 0, 0, 0, + 2,24,21, 2,24,14, 4,26, 6, 1,65,27, 2,24,13, 3,24, 9, 1,60,52, 1,60,59, + 1,60,56, 1,60,62, 1,60,61, 1,60,57, 3,24, 6, 2,24, 7, 2,24,10, 3,24, 7, + 2,24, 9, 1,60,53, 2,24,11, 2,24,20, 1,60,54, 2,24, 8, 2,24,17, 2,24,18, + 1,60,55, 2,24,15, 1,60,60, 1,60,50, 1,60,58, 2,24,12, 1,60,49, 2,24,16, + 3,24,14, 3,24, 4, 2,24,19,15,23,52, 3,24,11, 3,30,20, 2,31, 1, 2,30,86, + 1,65,24, 2,30,93, 2,30,90, 2,30,82, 2,30,91, 1,65,26, 2,30,83, 3,30, 9, + 2,30,79, 3,30, 6, 3,30,14, 1,69,83, 2,30,88, 3,30,15, 1,65,23, 2,30,94, + 3,30, 8, 1,65,30, 1,65,32, 2,30,81, 3,30,12, 4,26, 7, 1,65,31, 2,30,84, + 1,65,25, 2,30,92, 2,30,85, 2,30,89, 3,30,10, 2,30,87, 1,65,28, 2,30,80, + 1,65,33, 1,60,51, 1,65,29, 1,65,34, 3,30, 4, 3,30,21, 3,30,19, 0, 0, 0, + 3,35,71, 1,69,79, 2,38, 4, 2,38, 6, 2,38, 8, 2,38,12, 3,30,11, 2,38, 2, + 2,37,94, 1,69,81, 4,31,81, 2,38, 7, 2,38,11, 2,38, 3, 2,37,93, 3,35,70, + 2,37,92, 3,35,73, 3,35,64, 3,35,66, 2,38, 9, 2,38, 1, 2,38, 5, 1,69,82, + 3,35,62, 1,69,80, 2,38,13, 1,69,78, 2,38,10, 3,35,68, 2,44,89, 3,35,72, + 3,35,74, 3,35,67, 0, 0, 0, 0, 0, 0, 1,74,23, 2,44,81, 1,78,35, 2,44,91, + 1,74,26, 2,45, 1, 1,74,32, 2,44,76, 3,40,84, 4,37,91, 2,44,92, 2,44,73, + 3,40,77, 2,44,94, 2,44,77, 3,40,78, 1,74,39, 1,74,36, 2,44,93, 2,44,87, + 1,74,22, 1,74,30, 1,74,29, 3,40,80, 1,74,28, 1,74,34, 3,40,73, 2,44,74, + 1,74,35, 2,44,88, 1,74,31, 1,74,21, 2,44,90, 1,74,24, 1,74,25, 1,74,33, + 2,44,79, 2,44,78, 2,44,75, 4,37,92, 2,44,83, 2,44,80, 2,44,84, 1,74,38, + 3,40,72, 2,45, 2, 1,74,27, 2,44,85, 2,44,86, 3,40,81, 2,44,82, 3,40,83, + 3,70, 9, 3,40,75, 1,74,37, 3,70,11, 0, 0, 0, 0, 0, 0, 3,46, 2, 2,50,79, + 1,78,27, 1,78,36, 1,78,32, 2,50,76, 3,45,92, 1,78,29, 1,78,33, 2,50,88, + 1,78,23, 2,50,80, 3,45,88, 1,78,31, 3,46, 4, 3,46,15, 2,50,83, 2,50,78, + 1,78,30, 1,78,34, 2,50,77, 3,46,14, 1,78,28, 3,45,87, 2,50,87, 1,78,25, + 2,50,86, 2,50,85, 1,78,37, 2,48,27, 1,78,24, 3,46,11, 2,50,84, 2,50,75, + 3,45,85, 1,78,38, 2,50,82, 1,78,26, 3,46, 8, 3,46, 9, 3,46, 5, 3,46,12, + /* plane 0, page 126 */ + 0, 158, /* first, last */ + 3,46, 7, 3,45,94, 3,45,93, 2,50,81, 4,44,37, 0, 0, 0, 0, 0, 0, 3,70,10, + 1,81,74, 1,81,79, 1,81,72, 2,57,36, 2,57,27, 2,57,39, 2,57,31, 2,57,37, + 1,81,80, 1,81,73, 2,57,24, 2,57,30, 2,57,40, 2,57,33, 2,57,38, 2,57,26, + 4,50,44, 3,50,27, 2,57,34, 1,81,75, 2,57,32, 1,81,78, 1,81,77, 2,57,28, + 2,57,29, 2,57,25, 2,57,35, 1,81,76, 2,57,42, 2,57,41, 3,50,32, 3,50,31, + 0, 0, 0, 2,62,39, 2,62,35, 1,84,73, 3,53,89, 2,62,29, 1,84,67, 1,84,83, + 2,62,41, 1,84,75, 1,84,71, 2,62,32, 1,84,78, 1,84,81, 2,62,43, 1,84,70, + 2,62,34, 1,84,79, 2,62,45, 2,62,42, 2,62,30, 1,84,74, 1,84,68, 1,84,82, + 2,62,37, 1,84,77, 2,62,31, 1,84,72, 2,62,44, 1,84,76, 1,84,69, 2,62,38, + 1,84,80, 2,62,36, 0, 0, 0, 0, 0, 0, 2,62,40, 3,53,90, 4,60,63, 3,56,57, + 2,66,58, 2,66,64, 1,87, 5, 2,66,67, 1,86,94, 1,87, 1, 2,66,59, 2,66,66, + 2,66,61, 1,87, 6, 1,87, 3, 3,56,59, 2,66,57, 3,56,56, 1,87, 2, 2,66,63, + 2,66,65, 1,87, 4, 2,66,62, 2,66,60, 3,70,12, 4,60,62, 3,56,58, 0, 0, 0, + 2,70,34, 1,88,66, 1,88,67, 1,88,63, 3,58,82, 1,88,64, 3,58,84, 2,70,30, + 2,70,28, 3,58,85, 2,70,32, 1,88,68, 2,70,33, 2,70,26, 2,70,25, 2,70,29, + 2,70,27, 1,88,65, 2,70,31, 2,73,57, 1,90,11, 1,90,10, 2,73,58, 3,60,76, + 2,73,60, 2,73,59, 1,90,12, 0, 0, 0, 3,62,51, 3,62,48, 2,75,89, 2,75,86, + 2,75,87, 3,62,49, 2,75,85, 2,75,88, 1,90,93, 2,75,90, 3,62,50, 1,90,92, + 0, 0, 0, 2,77,79, 3,63,58, 1,92,33, 1,92,35, 2,79,29, 1,92,34, 2,80,39, + 2,81,15, 2,81,17, 2,81,14, 2,81,16, 1,93,25, 4,77,88, 3,66,21, + /* plane 0, page 127 */ + 54, 255, /* first, last */ + 1,40,47, 4, 5,55, + 1,50,94, 2,16,50, 1,55,45, 3,24,17,15,17,88, 1,60,63, 2,31, 2, 2,31, 3, + 3,70,13, 3,40,87, 0, 0, 0, 2,57,43, 1,84,84, 2,62,46, 3,53,93, 3,56,60, + 1,87, 7, 0, 0, 0, 2,70,36, 2,70,35, 1,90,13, 2,75,91, 3,63,59, 2,77,80, + 1,92,68, 2, 2,73, 4, 2, 1, 0, 0, 0, 1,47,12, 1,43,24, 0, 0, 0,15, 8,42, + 2,12,78, 3,10,46, 0, 0, 0, 2,18, 4, 2,17,93, 2,18, 3, 2,18, 1, 1,55,46, + 2,18, 2, 2,17,94, 3,19,28, 2,24,22, 4,26,11, 2,31, 4, 2,31, 5, 2,38,16, + 2,38,17, 1,69,85, 1,69,86, 2,38,15, 2,38,18, 2,38,14, 1,69,84, 3,40,88, + 1,74,40, 3,40,89, 1,69,87, 2,45, 3, 0, 0, 0, 1,78,39, 2,50,89, 1,78,40, + 3,46,16, 1,81,81, 2,57,46, 2,57,44, 2,57,45, 2,62,49, 2,62,48, 2,62,47, + 7,33,65, 0, 0, 0, 4,60,72, 2,70,37, 4,64,79, 1,88,69, 2,70,38, 2,77,81, + 1,92,69, 2,80,40, 1,40,48, 1,47,14, 1,47,13, 2,12,80, 1,51, 1, 3,14,61, + 4,15,16, 2,12,79, 2,18, 6, 3,19,29, 1,55,47, 2,24,23, 2,18, 5, 3,19,31, + 4,15,15, 3,19,30, 1,60,65, 2,24,26, 2,24,24, 2,24,25, 1,60,64, 0, 0, 0, + 2,31, 7, 2,31, 8, 2,31, 6, 3,35,78, 1,69,90, 2,38,20, 2,38,19, 2,38,21, + 1,69,89, 1,69,88, 0, 0, 0, 4,38, 6, 2,50,90, 2,50,92, 3,46,17, 1,78,41, + 2,50,91, 2,57,47, 1,81,82, 2,66,69, 3,56,61, 2,66,68, 1,88,70, 2,70,39, + 1,88,72, 1,88,71, 2,73,61, 2,75,92, 1,90,94, 1,40,49, 2,12,81, 1,51, 2, + 2,18, 9, 1,55,49, 2,18, 8, 2,18, 7, 3,19,34, 1,55,48, 3,19,35, 2,24,32, + 4,20,29, 2,24,34, 2,24,27, 2,24,28, 1,60,66, 2,24,29, 1,60,67, 2,24,33, + 2,24,30, 2,24,31, 1,60,68, 3,30,23, 1,65,36, 1,65,37, 3,30,24, 2,31, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,38,22, 2,38,23, 3,35,82, 2,45, 7, 1,74,43, + 1,74,41, 1,74,42, 2,45, 4, 2,45, 5, 6,64,56, 2,45, 6, 2,51, 3, 3,46,18, + 2,51, 4, 1,78,42, 2,51, 1, 2,50,94, 2,51, 2, 2,50,93, 1,81,85, 2,57,48, + 1,81,83, 1,81,84, 2,62,51, 1,84,85, 2,62,50, 2,65,20, 3,53,94, 2,66,70, + 2,66,71, 1,87, 8, 3,56,65, 1,87, 9, 1,84,86, 2,70,40, 2,70,41, 2,73,62, + /* plane 0, page 128 */ + 0, 255, /* first, last */ + 1,90,14, 1,40,50, 3,70,91, 1,40,51, 1,55,51, 1,47,15, 1,55,50, 2,12,82, + 3,24,22, 4,11, 5, 3,19,36, 1,65,38, 1,40,52, 1,51, 4, 2,12,83, 2,12,84, + 1,51, 3, 1,51, 5, 1,40,53, 4, 7,65, 2,12,85, 1,55,53, 2,18,10, 1,55,55, + 1,55,52, 1,55,54, 3,24,23, 2,24,37, 1,60,69, 3,24,25, 2,24,36, 2,24,35, + 4,26,24, 2,38,24, 0, 0, 0, 3,41, 2, 2,45, 8, 4,38,12, 1,78,43, 0, 0, 0, + 1,81,86, 2,57,50, 2,57,49, 3,54, 1, 2,62,52, 4,60,81, 3,56,66, 3,60,79, + 2,75,93, 4,73,14, 4,73,13, 1,40,54, 2, 4,83, 2, 8,42, 1,51, 6, 2,12,86, + 6,27, 1, 2,18,12, 4,15,26, 3,19,41, 3,19,40, 1,55,56, 2,18,11, 1,55,57, + 3,19,39, 3,70,15, 0, 0, 0, 2,24,39, 3,24,29, 3,24,28, 1,60,71, 2,24,38, + 2,24,40, 3,24,27, 1,60,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,30,28, 2,31,11, + 2,31,12, 2,31,10, 1,65,39, 3,71, 9, 0, 0, 0, 4,31,92, 1,69,91, 3,35,83, + 1,69,92, 4,38,19, 1,74,45, 3,41, 3, 2,45,10, 2,45, 9, 1,74,44, 3,41, 6, + 3,30,27, 3,41, 5, 0, 0, 0, 3,70,16, 2,51, 5, 3,46,20, 3,46,22, 2,51, 6, + 3,46,23, 0, 0, 0, 3,46,21, 3,46,24, 2,57,51, 4,50,60, 3,50,35, 1,84,90, + 1,84,89, 1,84,87, 1,84,88, 1,84,91, 3,54, 2, 2,66,72, 1,87,11, 1,87,10, + 2,70,42, 2,73,63, 3,60,80, 3,60,81, 3,60,82, 1,91,79, 1,91,78, 1,40,55, + 0, 0, 0, 6,27, 4, 2,15,93, 0, 0, 0, 1,69,94, 1,65,40, 1,69,93, 1,74,46, + 6,64,64, 1,40,56, 2, 1,72, 1,40,57, 1,40,58, 3, 4,21, 3, 4,22, 2, 8,43, + 2, 4,86, 3, 7, 4, 2, 4,87, 1,43,26, 3, 7, 6, 2, 4,84, 1,43,25, 3, 7, 5, + 1,43,28, 2, 4,85, 1,43,30, 1,43,29, 2, 4,88, 1,43,27, 4, 4,80, 3, 7, 3, + 0, 0, 0, 1,47,20, 1,47,18, 2, 8,45, 3,10,54, 1,47,17, 3,10,59, 3,10,56, + 3,10,47, 1,47,22, 1,47,24, 1,47,21, 3,10,57, 2, 8,48, 2, 8,44, 1,47,25, + 3,10,50, 1,47,19, 1,43,31, 3,10,52, 1,47,23, 2, 8,47, 3,10,55, 4, 7,68, + 2, 8,46, 4, 7,73, 1,47,16, 3,70,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2,12,92, 1,51,10, 1,51,11, 2,12,94, 3,14,70, 2,12,88, + 2,12,91, 2,13, 6, 2,13, 4, 3,14,64, 1,51,12, 2,13,10, 1,51,15, 2,13, 7, + 2,12,93, 2,12,90, 3,14,65, 3,14,62, 2,31,14, 2,13, 5, 1,51, 7, 2,13, 8, + 2,12,87, 2,13, 2, 1,51, 9, 1,51,14, 2,13, 3, 1,51,18, 1,51,16, 3,14,69, + 2,12,89, 1,51,13, 3,14,68, 2,13, 1, 1,51,17, 1,51, 8, 2,13, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,55,62, 3,19,44, 1,55,71, + 1,55,60, 1,55,58, 2,18,14, 1,55,66, 1,55,63, 2,18,16, 3,19,42, 3,19,50, + 1,55,65, 2,18,15, 2,18,13, 2,18,18, 1,55,70, 1,55,68, 2,31,13, 3,19,43, + /* plane 0, page 129 */ + 0, 255, /* first, last */ + 2,18,19, 2,18,17, 1,55,59, 3,19,46, 3,19,45, 1,55,61, 1,55,64, 3,19,47, + 1,55,67, 3,14,67, 1,55,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,30,36, 2,24,50, 1,60,73, 3,24,41, + 2,24,41, 2,24,43, 3,24,39, 2,24,44, 4,20,45, 2,24,52, 2,24,48, 2,24,46, + 4,26,27, 2,24,49, 2,24,53, 1,60,74, 1,60,78, 2,24,42, 4,20,39, 2,24,51, + 4,20,48, 1,60,76, 3,24,33, 1,60,75, 2,24,47, 2,24,45, 3,24,34, 1,60,72, + 1,60,77, 3,24,37, 0, 0, 0, 0, 0, 0, 3,24,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1,65,46, 2,31,22, 3,30,30, 4,26,30, 2,31,20, 1,65,48, 4,26,39, + 3,30,35, 3,30,37, 3,30,33, 2,31,15, 2,38,38, 3,30,29, 1,65,47, 2,31,19, + 3,30,32, 3,30,34, 2,31,16, 1,65,43, 1,65,49, 2,31,21, 1,65,45, 2,31,18, + 1,74,47, 1,65,44, 2,31,17, 1,65,50, 1,65,42, 1,65,41, 0, 0, 0, 0, 0, 0, + 6,35,58, 0, 0, 0, 0, 0, 0, 2,38,30, 2,38,28, 3,35,91, 2,38,34, 3,35,94, + 2,38,26, 2,38,39, 2,38,31, 3,35,85, 2,38,25, 1,70, 4, 1,70,10, 2,38,36, + 4,32, 9, 2,38,29, 3,35,86, 1,70, 7, 3,35,87, 3,36, 3, 1,70, 5, 2,38,37, + 1,70, 2, 1,70, 1, 2,38,32, 1,70, 6, 1,65,51, 3,35,92, 2,38,35, 2,38,27, + 1,70, 3, 1,70, 8, 1,70, 9, 0, 0, 0, 0, 0, 0, 3,36, 2, 0, 0, 0, 1,74,52, + 1,74,48, 3,41, 7, 1,74,53, 2,45,13, 3,41,10, 4,38,25, 2,45,12, 2,45,14, + 1,74,50, 2,45,11, 1,74,51, 2,45,17, 2,45,16, 2,45,15, 4,38,38, 1,74,49, + 4,50,71, 0, 0, 0, 3,46,27, 3,46,29, 3,46,25, 2,51,10, 3,46,28, 2,51,13, + 1,78,49, 2,51,12, 1,78,48, 1,78,44, 1,78,45, 1,78,46, 2,51, 9, 2,51, 8, + 1,78,47, 3,46,26, 2,51,11, 2,51, 7, 0, 0, 0, 0, 0, 0, 2,57,53, 2,57,63, + 1,81,89, 1,81,88, 3,50,41, 2,57,57, 2,57,59, 3,50,39, 2,57,54, 3,50,36, + 2,57,58, 2,57,52, 2,57,61, 1,81,87, 2,57,60, 2,57,56, 0, 0, 0, 2,57,62, + 3,54, 3, 2,57,55, 1,84,94, 2,62,53, 2,62,59, 1,85, 4, 1,85, 6, 1,85, 3, + 1,85, 2, 4,56, 7, 1,85, 1, 1,84,93, 2,62,54, 2,62,57, 1,84,92, 2,62,58, + 3,54, 4, 1,85, 5, 2,62,56, 7,40,92, 2,62,55, 1,87,12, 3,56,69, 1,87,13, + 2,66,75, 2,66,73, 2,66,74, 0, 0, 0, 3,58,87, 2,70,44, 3,58,88, 2,70,43, + 1,88,73, 2,73,65, 1,90,15, 2,73,64, 0, 0, 0, 2,75,94, 2,77,82, 1,91,80, + 2,81,18, 2,81,19, 1,92,36, 1,40,59, 4, 7,76, 1,47,26, 2,31,23, 1,74,54, + 1,85, 7, 2,62,60, 1,40,60, 4, 4,83, 1,55,73, 1,55,72, 2,31,24, 3,30,39, + 4,26,44, 4,44,66, 2,57,64, 1,40,61, 1,51,19, 4,26,45, 3,30,40, 2,31,25, + 2,31,26, 2,31,27, 1,74,55, 1,81,90, 1,40,62, 4, 7,77, 1,47,27, 2,13,11, + /* plane 0, page 130 */ + 0, 255, /* first, last */ + 1,55,74, 2,18,20, 1,60,79, 3,30,41, 2,31,28, 1,70,11, 0, 0, 0, 1,74,56, + 1,81,91, 1,85, 8, 1,87,14, 2,70,45, 1,40,63, 1,47,28, 3,10,61, 4, 7,78, + 1,55,75, 2,24,54, 1,65,52, 3,41,11, 1,74,57, 2,45,18, 2,51,14, 0, 0, 0, + 3,50,42, 3,56,72, 3,58,89, 1,40,64, 1,65,53, 2,38,40, 1,74,58, 1,40,65, + 2, 8,49, 2,13,12, 1,51,20, 0, 0, 0, 3,14,72, 2,18,22, 4,15,47, 3,19,55, + 1,55,78, 3,19,56, 1,55,76, 1,55,77, 1,55,79, 3,19,53, 0, 0, 0, 2,18,21, + 0, 0, 0, 0, 0, 0, 2,24,59, 2,24,56, 2,24,58, 1,60,80, 1,60,82, 1,60,81, + 2,24,55, 1,60,83, 2,24,57, 0, 0, 0, 2,31,29, 2,31,30, 0, 0, 0, 2,31,31, + 2,38,43, 3,36, 6, 2,38,44, 4,32,14, 2,38,42, 2,38,45, 4,32,13, 1,70,12, + 3,70,20, 2,38,41, 3,41,13, 1,74,59, 3,41,14, 0, 0, 0, 2,51,19, 2,51,15, + 2,51,18, 2,51,20, 2,51,17, 2,51,16, 0, 0, 0, 2,57,65, 2,57,66, 2,57,67, + 1,81,92, 1,81,93, 2,62,62, 2,62,61, 2,62,63, 0, 0, 0, 2,66,77, 2,66,76, + 0, 0, 0, 2,70,47, 3,58,90, 2,70,48, 2,70,46, 3,58,91, 1,90,16, 4,68,12, + 2,73,66, 2,73,67, 3,62,53, 2,77,83, 2,79,30, 2,80,41, 1,40,66, 1,43,32, + 0, 0, 0, 1,85, 9, 1,40,67,15,18,18, 2,24,60, 2,31,32, 3,58,92, 1,92,76, + 2, 2,74, 4, 1,51, 0, 0, 0, 3, 4,24, 2, 2,75, 2, 2,77, 1,40,68, 2, 2,78, + 2, 2,76, 4, 3,15, 0, 0, 0, 2, 5, 2, 2, 5, 3, 2, 4,91, 3, 7, 8, 4, 4,91, + 0, 0, 0, 4, 4,85, 2, 5, 1, 1,43,34, 3, 7, 9, 1,43,35, 2, 4,92, 2, 4,90, + 2, 4,89, 2, 4,93, 1,43,33, 2, 4,94, 2,13,13, 3, 7,11, 4, 4,89, 0, 0, 0, + 2, 8,54, 1,47,31, 2, 8,53, 2, 8,55, 3,10,64, 1,47,30, 2, 8,60, 1,47,34, + 2, 8,50, 2, 8,64, 2, 8,70, 1,47,41, 2, 8,67, 1,47,38, 3,10,75, 2, 8,57, + 2, 8,63, 2, 8,65, 3,10,70, 2, 8,52, 1,47,37, 1,47,32, 2, 8,58, 1,47,39, + 1,47,42, 1,47,36, 3,10,76, 1,47,29, 2, 8,62, 2, 8,56, 2, 8,69, 1,47,44, + 1,47,40, 1,47,35, 2, 8,61, 1,55,80, 2, 8,59, 1,47,33, 1,47,43, 4, 7,90, + 2, 8,51, 4, 7,94, 2, 8,66, 2, 8,68, 3,10,62,15, 8,67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,10,72, 4, 7,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3,14,86, 1,51,37, 1,51,31, 1,51,39, 1,51,36, 2,13,20, 2,13,23, 1,51,32, + 3,14,74, 2,13,14, 4,11,26, 1,51,25, 1,51,35, 3,14,75, 1,51,38, 1,51,40, + 2,13,35, 2,13,26, 3,14,88, 1,51,24, 2,13,34, 1,51,28, 1,51,26, 1,51,21, + 2,13,18, 3,14,82, 2,13,33, 2,13,22, 2,13,25, 2,13,38, 3,14,84, 1,51,41, + 2,13,32, 1,51,33, 2,13,27, 2,13,37, 2,13,24, 2,13,28, 2,13,31, 3,14,73, + 3,14,78, 2,13,16, 2,13,36, 2,13,30, 3,14,79, 3,14,90, 2,13,15, 6,20,28, + /* plane 0, page 131 */ + 0, 255, /* first, last */ + 2,13,19, 1,51,34, 1,51,29, 1,51,22, 1,51,27, 1,51,23, 1,51,42, 2,13,17, + 2,18,39, 1,51,30, 4,11,29, 3,14,89, 2,13,29, 2, 9,34, 3,14,87, 0, 0, 0, + 3,70,21, 0, 0, 0, 3,70,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,18,42, 1,55,94, + 3,19,66, 2,18,26, 4,15,61, 2,18,37, 2,18,33, 3,24,45, 2,18,52, 3,19,57, + 2,18,44, 3,19,63, 2,18,34, 3,24,59, 2,18,43, 2,18,28, 2,18,32, 2,18,55, + 1,56, 3, 2,18,47, 2,18,38, 1,55,81, 2,18,53, 2,18,24, 4,15,58, 2,18,46, + 4,15,67, 1,56, 2, 1,55,91, 2,18,23, 1,55,89, 1,55,88, 1,55,93, 2,18,45, + 1,55,85, 1,55,92, 2,13,21, 2,31,33, 2,18,40, 4,15,63, 3,10,63, 2,18,30, + 1,56, 1, 2,18,31, 2,18,35, 1,56, 4, 2,18,25, 2,18,49, 3,30,55, 2,18,48, + 2,18,56, 1,55,87, 1,55,84, 2,18,54, 2,18,50, 2,18,41, 2,18,36, 1,55,90, + 1,55,86, 2,18,27, 1,55,82, 2,18,51, 1,55,83, 4,15,60, 2,18,29, 3,19,58, + 3,19,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3,70,22, 3,13,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,20,71, 3,24,46, 3,24,49, 2,24,66, 2,24,68, 2,24,73, 2,24,93, 1,61, 3, + 1,60,87, 3,24,52, 2,24,65, 1,61, 4, 1,61, 5, 2,24,76, 2,24,83, 2,24,89, + 3,24,48, 2,24,70, 4,20,77, 2,24,77, 3,24,47, 3,24,61, 1,61, 6, 2,24,91, + 2,24,86, 1,61, 1, 1,60,93, 2,24,82, 2,24,78, 2,24,64, 1,60,84, 2,24,69, + 2,24,61, 3,24,53, 1,60,92, 1,60,94, 2,24,74, 2,24,71, 1,60,89, 2,24,87, + 1,60,86, 2,24,72, 2,31,74, 2,24,80, 3,24,62, 2,24,79, 1,60,85, 3,24,55, + 1,61, 2, 3,24,50, 1,60,88, 2,24,62, 2,24,67, 2,24,84, 2,24,90, 1,61, 7, + 2,24,63, 2,24,75, 2,24,81, 1,60,91, 4,20,79, 3,24,56, 2,24,92, 2,24,85, + 2,24,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,24,63, + 0, 0, 0,15,23,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,60,90, 4,26,72, 2,31,49, + 2,31,37, 1,65,61, 2,31,66, 2,31,75, 2,31,78, 1,65,59, 2,31,45, 2,31,70, + 2,31,46, 2,31,60, 1,65,72, 2,31,56, 1,65,69, 3,30,62, 2,31,57, 2,31,34, + 5,27,79, 2,31,71, 3,30,47, 3,30,57, 1,65,78, 2,31,68, 2,31,58, 2,31,80, + 2,31,53, 2,38,77, 3,30,45, 2,31,83, 1,65,76, 2,31,51, 2,31,63, 1,65,79, + 1,65,58, 2,31,55, 2,31,81, 2,31,48, 2,31,41, 2,31,52, 3,30,63, 2,31,40, + 2,31,38, 1,65,54, 2,31,72, 2,31,47, 2,31,76, 3,30,43, 2,31,77, 1,65,62, + 1,65,67, 1,65,63, 1,65,71, 2,31,67, 1,65,64, 2,31,59, 2,31,43,15,30,70, + 1,65,56, 2,31,35, 2,31,69, 2,31,79, 2,31,42, 1,65,70, 2,31,84, 2,31,54, + /* plane 0, page 132 */ + 0, 255, /* first, last */ + 3,30,50, 2,31,50, 3,30,60, 1,65,55, 1,65,75, 3,30,58, 2,31,65, 1,65,77, + 3,30,48, 2,31,61, 1,65,66, 1,65,60, 1,65,68, 1,65,57, 1,65,74, 2,31,62, + 2,31,44, 2,31,64, 2,31,39, 2,31,73, 3,30,56, 4,26,71, 3,30,61, 3,30,54, + 3,30,46, 0, 0, 0, 0, 0, 0, 2,31,82, 0, 0, 0, 0, 0, 0, 3,70,25, 3,30,59, + 0, 0, 0, 3,70,24, 0, 0, 0, 2,31,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2,38,76, 3,36,13, 2,39, 4, 1,69,60, 2,38,81, 3,36,17, 2,38,79, + 2,38,58, 1,70,16, 2,38,74, 2,38,94, 2,38,70, 1,70,24, 2,38,93, 2,38,68, + 1,65,73, 2,38,84, 2,38,69, 2,38,91, 1,70,23, 1,70,15, 3,36,26, 2,38,47, + 2,38,55, 3,36,21, 2,38,80, 2,38,72, 2,39, 3, 2,38,75, 1,70,29, 2,38,92, + 3,36,12, 1,70,20, 3,36,30, 2,38,78, 2,38,86, 2,38,59, 2,38,85, 3,36, 7, + 2,39, 8, 2,38,54, 2,38,87, 3,36,19, 2,39, 6, 3,36,31, 2,38,48, 1,65,65, + 3,36,32, 2,38,62, 2,38,61, 1,70,22, 3,36,18, 2,38,65, 2,38,67, 2,38,82, + 2,39, 5, 1,70,25, 3,36,24, 1,70,26, 3,36,16, 2,38,53, 1,70,18, 2,38,57, + 2,39, 1, 1,70,27, 4,32,36, 1,70,19, 1,70,21, 1,70,28, 2,39, 7, 2,38,88, + 2,38,83, 3,36,28, 3,36,15, 2,38,64, 2,38,63, 1,70,17, 2,38,49, 1,70,14, + 2,38,73, 2,38,50, 2,38,71, 3,36,14, 4,32,33, 2,38,60, 2,39, 2, 3,36,10, + 3,36,25, 4,32,22, 1,70,13, 3,36,27, 3,36, 8, 0, 0, 0, 2,38,56, 0, 0, 0, + 4,32,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,38,52, 2,38,90, 2,38,51, + 1,74,72, 2,45,58, 3,41,21, 3,41,36, 2,45,41, 3,41,19, 3,41,24, 2,45,19, + 2,45,49, 1,74,64, 2,45,34, 2,45,44, 1,74,67, 2,45,37, 1,74,65, 2,45,22, + 2,45,52, 2,45,21, 2,45,40, 3,41,28, 2,45,20, 3,41,25, 4,38,76, 2,45,38, + 2,45,47, 2,45,45, 2,45,33, 2,45,28, 2,45,26, 3,41,34, 2,45,27, 2,45,46, + 2,45,57, 2,45,35, 1,74,66, 3,41,27, 2,45,30, 3,41,26, 2,45,50, 3,41,33, + 1,74,69, 2,45,29, 2,45,23, 2,45,39, 1,74,73, 3,41,18, 4,38,56, 1,74,61, + 1,74,70, 2,45,31, 2,45,25, 3,41,22, 1,74,63, 2,38,89, 1,74,62, 2,45,42, + 3,36,22, 1,74,60, 1,74,75, 1,74,68, 2,45,43, 2,45,32, 2,45,24, 2,45,51, + 2,45,36, 1,74,74, 2,45,55, 1,74,71, 2,45,54, 3,41,31, 2,45,48, 2,45,53, + 3,41,30, 0, 0, 0, 3,41,35, 2,45,56, 0, 0, 0, 0, 0, 0, 3,70,27, 0, 0, 0, + 0, 0, 0, 3,70,28, 3,70,26, 0, 0, 0, 3,41,29, 0, 0, 0, 0, 0, 0, 2,51,60, + 2,51,61, 2,51,48, 2,51,47, 2,51,43, 1,78,61, 3,46,47, 1,78,53, 2,51,63, + 2,51,62, 2,38,46, 2,51,40, 2,51,44, 2,51,38, 3,46,36, 2,51,57, 2,51,42, + 3,46,34, 2,51,64, 2,51,35, 2,51,33, 2,51,45, 2,51,55, 2,51,50, 1,78,63, + /* plane 0, page 133 */ + 0, 255, /* first, last */ + 2,51,24, 3,46,32, 2,51,54, 3,46,44, 3,46,38, 3,46,52, 1,78,64, 2,38,66, + 2,51,36, 2,51,27, 2,51,30, 2,51,68, 2,51,37, 2,51,28, 2,51,26, 2,51,23, + 4,44,90, 1,78,57, 2,51,46, 1,78,56, 1,78,60, 2,51,41, 2,51,49, 1,78,50, + 2,51,65, 2,51,69, 1,78,52, 3,46,43, 2,51,32, 2,51,52, 2,51,56, 2,51,29, + 2,51,66, 1,78,59, 4,44,74, 1,78,58, 2,51,21, 1,78,62, 2,51,59, 2,51,31, + 2,51,51, 2,51,25, 2,51,39, 2,51,34, 1,78,54, 1,78,55, 2,51,53, 2,51,70, + 2,51,67, 2,51,58, 4,44,88, 3,46,45, 3,46,46, 3,46,50, 0, 0, 0, 0, 0, 0, + 4,44,84, 0, 0, 0, 0, 0, 0, 2,51,22, 0, 0, 0, 1,78,51, 2,57,84, 3,50,58, + 2,57,75, 2,57,78, 3,50,50, 1,82, 5, 2,57,80, 2,57,69, 2,57,76, 2,57,82, + 1,82, 2, 1,82, 6, 1,81,94, 3,50,57, 3,50,48, 2,57,71, 2,57,87, 4,45, 5, + 4,51,19, 2,57,81, 4,51, 4, 2,57,72, 2,58, 2, 2,57,90, 2,57,68, 2,62,82, + 2,57,74, 1,82, 1, 3,50,56, 2,57,85, 3,50,52, 2,58, 1, 1,82, 9, 3,50,54, + 2,57,92, 2,57,73, 2,57,79, 2,57,83, 2,57,77, 2,58, 3, 2,57,94, 2,57,91, + 1,82, 3, 1,82, 4, 1,82, 8, 2,57,70, 2,58, 4, 1,82, 7, 2,57,88, 3,50,47, + 3,50,53, 2,57,86, 0, 0, 0, 3,70,29, 0, 0, 0, 2,57,89, 2,63, 1, 2,62,76, + 2,62,81, 2,62,94, 2,62,80, 2,62,72, 2,62,77, 4,56,30, 1,85,12, 3,54,11, + 2,62,65, 2,62,89, 2,62,91, 2,62,64, 1,85,11, 2,62,93, 2,62,85, 1,85,18, + 2,62,92, 2,62,78, 1,85,20, 2,62,70, 2,57,93, 2,62,86, 2,62,83, 2,62,66, + 2,63, 3, 1,85,14, 3,54, 8, 3,54, 9, 1,85,15, 2,62,68, 2,62,84, 3,54,13, + 2,63, 2, 2,62,87, 2,62,74, 1,85,17, 1,85,13, 2,62,88, 2,62,75, 2,63, 4, + 2,62,69, 2,62,79, 2,62,90, 2,62,71, 2,62,73, 4,56,32, 1,85,21, 2,62,67, + 1,85,19, 1,87,16, 1,85,10, 3,54,12, 3,54,16, 0, 0, 0, 0, 0, 0, 1,85,16, + 1,87,20, 2,66,93, 3,56,76, 2,66,83, 2,66,78, 2,66,84, 2,66,94, 2,67, 4, + 2,67, 3, 1,87,22, 1,87,21, 3,56,78, 4,61,12, 2,66,85, 2,67, 5, 2,66,88, + 2,66,80, 3,56,79, 2,66,82, 2,66,81, 2,66,87, 2,66,92, 2,66,79, 2,66,86, + 2,66,91, 1,87,19, 4,61, 8, 2,66,89, 3,56,75, 1,87,17, 2,66,90, 1,87,15, + 1,87,18, 2,70,64, 2,67, 1, 0, 0, 0, 3,70,30, 1,88,77, 3,58,94, 2,70,56, + 2,70,60, 2,70,52, 2,70,55, 3,58,93, 2,70,63, 1,88,75, 2,70,68, 2,70,61, + 4,64,90, 2,70,53, 2,70,69, 2,70,62, 1,88,78, 1,88,79, 2,70,66, 3,59, 2, + 2,70,54, 1,88,74, 1,88,76, 2,70,49, 2,70,57, 2,70,51, 3,60,91, 2,70,67, + 2,70,65, 2,70,50, 2,70,58, 4,64,91, 3,59, 5, 3,70,31, 2,73,74, 1,88,80, + 2,70,59, 1,90,18, 1,90,20, 1,90,17, 3,60,86, 2,73,79, 2,73,71, 2,73,69, + /* plane 0, page 134 */ + 0, 255, /* first, last */ + 2,73,73, 2,73,70, 3,60,88, 3,60,92, 2,73,75, 2,73,77, 1,90,21, 1,90,23, + 3,61, 2, 2,73,76, 1,90,24, 1,90,22, 2,73,78, 3,60,94, 4,68,23, 3,61, 3, + 3,60,87, 1,90,19, 0, 0, 0, 3,61, 1, 0, 0, 0, 3,62,59, 3,62,58, 1,91, 1, + 2,76, 1, 2,76, 7, 1,91, 3, 2,73,72, 2,76, 6, 3,62,60, 2,76,13, 2,76, 4, + 2,76,11, 2,76,10, 2,73,68, 2,76, 5, 2,67, 2, 2,76,14, 2,76, 3, 2,76, 8, + 3,62,56, 2,76,12, 2,76, 2, 3,62,54, 2,77,87, 1,91, 2, 2,76, 9, 3,62,55, + 0, 0, 0, 2,79,35, 2,77,88, 2,77,86, 2,77,84, 2,77,85, 2,77,89, 3,70,32, + 1,92,37, 2,79,33, 2,79,31, 2,79,36, 2,79,34, 3,64,35, 2,79,37, 1,92,38, + 2,79,32, 3,64,15, 3,65,38, 2,80,42, 0, 0, 0, 3,70,33, 2,81,20, 2,81,21, + 2,81,22, 3,65,39, 3,65,92, 2,82,21, 2,82,13, 2, 2,79, 1,47,45, 0, 0, 0, + 1,51,43, 4,15,72, 2,18,58, 2,18,57, 1,56, 5, 1,61, 8, 2,25, 1, 3,24,67, + 3,24,64, 2,24,94, 3,24,65, 1,65,80, 1,70,31, 3,30,65, 1,70,30, 1,70,32, + 5,41,46, 2,45,59, 2,51,71, 2,58, 5, 2,58, 7, 2,58, 6, 7,18,65, 1,85,22, + 2,63, 5, 2,67, 6, 2,81,83, 1,40,69, 3, 7,13, 2, 8,73, 2, 8,74, 2, 8,72, + 2, 8,71, 1,47,46, 3,70,34, 2,13,42, 2,13,40, 3,15, 3, 3,14,92, 2,13,39, + 3,14,94, 1,51,44, 1,51,46, 1,51,45, 2,13,41, 3,15, 4,15,13,30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,19,73, 2,18,70, 2,18,67, 2,18,65, + 4,15,77, 3,19,76, 1,56, 6, 2,18,68, 1,56,11, 2,18,62, 2,18,77, 3,19,79, + 2,18,79, 2,18,63, 3,19,78, 1,56, 8, 2,18,80, 2,18,75, 2,18,61, 2,18,66, + 2,18,76, 2,18,72, 2,18,69, 3,19,75, 1,56,13, 2,18,78, 2,18,64, 3,19,74, + 3,19,80, 2,18,73, 2,18,59, 1,56,12, 1,56, 9, 2,18,71, 3,19,77, 2,18,74, + 2,18,60, 1,56,10, 1,56, 7, 0, 0, 0, 0, 0, 0, 4,20,90, 3,24,70, 1,61,18, + 2,25, 8, 1,61,17, 3,24,68, 2,25,11, 2,25,14, 1,61,14, 1,61,12, 2,25, 3, + 2,25,12, 2,25,10, 2,25, 7, 2,25,15, 2,25,16, 2,25,18, 2,25,19, 2,25, 2, + 1,61,11, 2,25, 5, 2,25, 4, 2,25,17, 1,61,13, 2,25, 6, 1,61,15, 1,61,10, + 2,25, 9, 1,61,19, 4,21, 6, 1,61,16, 2,25,13, 0, 0, 0, 0, 0, 0,15,24,26, + 1,65,87, 2,32, 5, 4,26,81, 2,31,88, 1,65,84, 3,30,66, 2,39,14, 2,32, 3, + 2,31,85, 1,65,82, 2,31,90, 1,65,85, 2,31,94, 2,31,92, 1,65,88, 1,65,81, + 4,26,86, 3,30,67, 2,31,86, 2,31,89, 1,65,86, 4,26,79, 2,31,87, 5,27,91, + 2,32, 4, 2,32, 2, 2,31,91, 2,31,93, 2,32, 1, 1,65,83, 3,30,72, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,39,15, 2,39,21, 2,39,11, + 2,39,17, 1,70,33, 2,39,13, 1,70,39, 3,36,36, 3,36,37, 1,70,38, 3,36,41, + /* plane 0, page 135 */ + 0, 255, /* first, last */ + 1,70,37, 2,39,20, 1,70,40, 1,70,41, 2,39,10, 2,39,23, 1,70,42, 1,70,36, + 1,70,35, 2,39,19, 1,70,43, 2,39, 9, 2,39,12, 2,39,22, 2,39,18, 4,32,57, + 4,32,50, 2,45,91, 2,45,80, 1,70,34, 5,34,61, 3,36,38, 3,36,40, 0, 0, 0, + 1,74,82, 2,45,68, 2,45,89, 2,45,69, 1,74,77, 3,41,47, 2,45,66, 4,32,53, + 2,45,75, 2,45,67, 1,74,79, 2,45,61, 2,45,88, 1,74,80, 2,45,85, 2,45,86, + 2,45,62, 1,74,85, 2,45,77, 3,41,42, 2,45,71, 2,45,78, 2,45,65, 4,38,94, + 2,45,90, 2,45,82, 2,45,76, 2,45,60, 1,74,81, 2,45,83, 3,41,37, 1,74,84, + 2,45,87, 3,41,44, 2,45,81, 1,74,78, 2,45,79, 3,41,41, 2,45,73, 1,74,76, + 2,45,64, 2,45,72, 2,45,84, 2,45,70,15,44,19, 3,41,46, 2,45,74, 3,41,43, + 0, 0, 0, 0, 0, 0, 3,70,35, 0, 0, 0, 1,78,74, 2,39,16, 2,51,89, 2,52, 4, + 2,51,88, 2,51,84, 2,51,81, 1,78,75, 2,51,79, 1,74,83, 2,51,72, 1,78,73, + 2,51,78, 1,78,72, 2,51,83, 2,51,80, 2,52, 2, 2,51,91, 2,51,85, 2,51,90, + 1,78,68, 2,51,82, 2,52, 7, 2,51,73, 2,51,74, 2,52, 3, 1,78,69, 2,52, 8, + 1,78,71, 2,52, 9, 2,51,87, 2,45,63, 2,51,93, 2,51,86, 2,52, 1, 2,51,92, + 5,48,53, 3,46,61, 4,45, 8, 2,51,77, 1,78,66, 2,52, 6, 1,78,67, 2,51,75, + 1,78,70, 2,58,18, 2,51,94, 2,52, 5, 4,45,17, 3,46,57, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2,58,15, 1,78,65, 1,82,10, 2,58,25, 2,58,21, 4,51,28, 2,58,19, + 2,58,14, 2,58,29, 3,50,59, 3,50,61, 4,51,36, 1,82,14, 3,50,63, 2,58,10, + 2,58,22, 2,58,23, 2,58,13, 2,58,12, 2,58,26, 4,51,33, 2,58,16, 2,58,11, + 2,58,17, 3,50,66, 2,58,28, 2,58, 9, 2,58,27, 2,58,24, 1,82,12, 1,82,11, + 4,51,25, 3,50,62, 1,82,13, 2,58,20, 2,58, 8, 3,70,37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3,70,36, 2,63, 7, 1,85,28, 2,63,11, 2,63, 8, 2,63,15, 2,63,21, + 2,63,10, 3,54,26, 2,63,30, 1,85,25, 2,63,24, 2,63,13, 2,63,25, 2,63,20, + 2,63,27, 2,63,12, 1,85,30, 1,85,29, 2,63,14, 2,63,28, 2,63, 6, 2,63,26, + 1,85,23, 3,54,25, 2,63,18, 2,63,17, 2,63,22, 2,63, 9, 1,85,27, 3,54,27, + 1,85,31, 2,63,16, 2,63,23, 1,85,32, 2,63,19, 3,54,22, 3,54,20, 0, 0, 0, + 0, 0, 0, 1,85,24, 1,85,26, 2,67,19, 2,67,17, 3,59, 8, 3,56,86, 2,67,23, + 2,67,21, 2,67,24, 3,56,88, 2,67,10, 2,67,18, 2,67,28, 2,63,29, 2,67,14, + 1,87,26, 2,51,76, 2,67, 9, 2,67,22, 2,67,16, 2,67,13, 2,67, 8, 2,67, 7, + 2,67,27, 3,56,83, 2,67,12, 2,67,11, 1,87,24, 2,67,20, 3,56,84, 1,87,23, + 3,56,85, 5,68,40, 1,87,25, 2,67,15, 2,67,26, 3,70,38, 2,70,73, 2,70,74, + 3,59,12, 1,88,84, 2,70,71, 1,88,81, 2,70,79, 3,59, 7, 1,88,85, 2,70,81, + /* plane 0, page 136 */ + 0, 255, /* first, last */ + 2,70,70, 2,67,25, 2,70,83, 2,70,72, 5,73,35, 1,88,82, 2,70,78, 3,59, 9, + 2,70,80, 2,70,75, 2,70,82, 2,70,77, 2,70,76, 1,88,83, 3,56,87, 3,59,11, + 2,73,81, 2,73,82, 3,61, 5, 2,73,84, 1,90,25, 1,90,26, 2,73,85, 2,73,83, + 3,61, 4, 2,73,80, 3,62,61, 2,76,17, 2,76,20, 2,76,16, 4,65, 6, 1,91, 7, + 2,76,18, 1,91, 6, 1,91, 5, 1,91, 4, 2,76,19, 2,77,94, 2,77,92, 3,63,63, + 2,77,91, 2,76,15, 2,77,93, 2,76,21, 2,77,90, 3,64,37, 2,79,40, 2,79, 6, + 2,79,38, 1,92,39, 2,79,39, 2,79,41, 3,70,39, 2,80,45, 1,92,70, 2,80,44, + 2,80,43, 1,92,71, 4,76, 3, 1,93, 7, 2,81,61, 2,81,85, 2,81,84, 2,81,86, + 1,40,70, 2,13,43, 3,15, 6, 2,18,81, 2,18,82, 3,24,74, 3,30,74, 3,30,73, + 2,32, 6, 6,46,47, 2,76,22, 2,80,46, 1,40,71, 1,51,47, 2,13,44, 3,19,81, + 3,70,40, 4,21, 7, 2,25,20, 1,61,20, 0, 0, 0, 2,32, 8, 2,32, 7, 1,65,89, + 3,36,45, 1,70,44, 2,52,10, 1,78,76, 3,46,63, 1,78,77, 3,50,67, 3,50,68, + 4,51,43, 1,82,15, 1,92,72, 1,40,72, 0, 0, 0, 0, 0, 0, 3,15, 7, 2,13,45, + 1,47,48, 2,13,47, 2,13,46, 1,51,48, 0, 0, 0, 2,18,83, 3,19,84, 2,18,90, + 1,56,14, 2,18,88, 2,18,86, 3,19,87, 2,18,93, 2,18,84, 2,18,85, 1,56,15, + 3,19,82, 1,56,19, 3,19,83, 3,19,85, 2,18,94, 1,56,18, 2,18,92, 2,18,89, + 2,18,87, 1,56,16, 1,56,17, 2,18,91, 3,19,86, 0, 0, 0, 0, 0, 0, 3,70,41, + 1,61,22, 2,25,21, 3,24,82, 1,61,27, 2,25,37, 1,61,26, 2,25,39, 3,24,78, + 3,24,84, 2,25,27, 1,61,24, 2,25,38, 3,24,76, 2,25,22, 1,61,25, 2,25,34, + 2,25,30, 2,25,32, 2,25,26, 2,25,33, 3,24,75, 4,21,15, 1,61,21, 2,25,29, + 3,24,83, 2,25,28, 2,25,24, 3,24,77, 2,25,35, 3,24,79, 3,24,81, 2,25,31, + 2,25,23, 3,24,80, 2,25,25, 1,61,23, 2,25,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1,65,92, 2,32,19, 4,26,91, 3,30,80, 3,30,82, 2,32,15, 2,32,17, + 2,32,12, 2,32,11, 2,32, 9, 3,30,77, 2,32,16, 2,32,18, 2,32,14, 3,30,79, + 2,32,13, 1,65,90, 1,65,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2,32,21, 1,70,52, 2,39,25, 2,39,31, 2,39,26, 2,39,27, 3,36,46, + 2,39,32, 5,34,76, 1,70,54, 4,32,65, 1,70,46, 1,70,53, 2,39,24, 2,32,10, + 1,70,49, 1,70,47, 2,39,30, 2,39,29, 1,70,48, 1,70,50, 2,39,28, 1,70,45, + 3,36,47, 1,70,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,46,64, 2,45,93, + 1,74,92, 3,41,57, 3,41,50, 2,46,10, 2,46, 9, 3,41,55, 2,46, 4, 1,74,94, + 2,46, 8, 2,45,94, 2,46, 1, 1,74,86, 1,74,88, 3,41,52, 2,46, 6, 2,45,92, + 1,74,90, 1,74,89, 2,46, 2, 2,46, 7, 2,46, 5, 1,74,91, 2,46, 3, 3,41,49, + /* plane 0, page 137 */ + 0, 255, /* first, last */ + 3,41,54, 2,32,20, 1,74,87, 3,41,56, 0, 0, 0, 2,52,11, 2,52,18, 1,78,79, + 4,45,38, 2,52,22, 1,78,83, 2,52,14, 2,52,12, 4,45,30, 2,52,21, 3,46,65, + 1,78,78, 2,52,20, 1,78,80, 1,78,81, 2,52,13, 1,78,82, 2,52,19, 2,52,15, + 2,52,16, 2,52,17, 1,74,93, 3,46,66, 0, 0, 0, 0, 0, 0, 2,58,30, 2,58,42, + 4,51,51, 1,82,20, 2,58,37, 2,58,39, 3,50,69, 1,82,18, 2,58,31, 2,58,35, + 4,51,48, 2,58,38, 1,82,16, 1,82,19, 2,58,41, 2,58,33, 2,58,34, 2,58,40, + 2,58,32, 2,58,36, 1,82,17, 2,63,32, 0, 0, 0, 2,63,31, 1,85,34, 2,63,37, + 1,85,36, 3,54,32, 4,56,66, 1,85,33, 2,63,33, 1,85,37, 2,63,34, 3,54,31, + 3,54,29, 2,63,35, 2,63,38, 3,54,34, 1,85,35, 0, 0, 0, 2,67,33, 0, 0, 0, + 3,56,89, 2,67,36, 3,56,90, 2,67,30, 2,67,32, 3,56,92, 3,56,91, 2,67,31, + 2,67,34, 2,67,35, 2,63,36, 2,67,29, 3,70,42, 0, 0, 0, 1,88,88, 2,70,87, + 2,70,90, 2,70,92, 2,70,85, 2,70,86, 2,70,89, 2,70,91, 1,88,89, 1,88,87, + 1,88,86, 2,70,88, 2,70,84, 2,73,86, 1,90,27, 3,61, 9, 2,73,87, 3,61, 8, + 0, 0, 0, 2,76,24, 1,91, 8, 2,76,26, 1,91, 9, 2,76,23, 2,76,25, 1,91,82, + 5,84,24, 2,78, 1, 1,91,81, 2,79,44, 2,79,43, 4,76, 5, 2,79,42,15,72,42, + 3,65,41, 2,81,23, 2,81,24, 2,81,26, 2,81,25, 3,65,93, 2, 2,80, 1,40,73, + 0, 0, 0, 1,51,49, 2,25,40, 1,65,93, 3,70,43, 2,39,33, 1,87,27, 3,59,15, + 2,70,93, 3,64,38, 3,65,42, 1,43,36, 3,15, 9, 4,15,86, 4,15,85, 1,61,29, + 4,21,20, 3,24,86, 3,24,85, 1,61,28, 3,24,87, 2,32,22, 1,65,94, 2,32,24, + 2,32,23, 6,46,64, 3,30,84, 2,39,34, 1,70,55, 2,46,11, 2,46,14, 2,46,13, + 4,39,21, 2,46,12, 2,52,23, 2,52,25, 2,52,24, 3,46,69, 1,82,22, 3,50,70, + 4,51,57, 3,46,68, 1,82,21, 3,54,38, 1,85,38, 2,63,39, 2,63,41, 2,63,40, + 3,56,94, 3,56,93, 1,87,28, 3,57, 1, 4,65,15, 3,59,17, 2,71, 1, 2,70,94, + 15,67,87, 2,73,88, 1,90,28, 3,61,10, 3,62,65, 1,91,10, 2,78, 3, 2,78, 2, + 1,93, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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,43,37, 2,13,48, 1,51,50, 2,25,43, 2,25,41, 4,21,25, + 4,21,24, 2,25,42, 2,32,26, 2,32,27, 2,39,41, 2,32,25, 0, 0, 0, 2,39,35, + 2,39,39, 2,39,38, 2,39,40, 1,70,56, 2,39,37, 2,39,36, 2,39,42, 3,36,52, + 2,46,17, 2,46,15, 3,41,60, 2,46,16, 2,52,28, 2,52,26, 3,46,70, 0, 0, 0, + 2,52,27, 2,58,43, 2,63,42, 2,63,43, 1,87,29, 3,59,18, 2,71, 2, 2,73,89, + 1,90,29, 4,65,23, 2,76,27, 2,78, 4, 1,91,83, 4,73,37, 2,79,45, 2,81,27, + /* plane 0, page 138 */ + 0, 255, /* first, last */ + 1,43,38, 0, 0, 0, 1,51,52, 1,51,53, 2,13,49, 3,15,10, 3,15,12, 2,13,50, + 1,51,51, 4,15,92, 1,56,25, 3,19,91, 1,56,23, 3,19,90, 1,56,22, 1,56,29, + 1,56,21, 1,56,30, 2,19, 1, 1,56,27, 4,15,93, 1,56,24, 1,56,28, 1,56,26, + 1,56,20, 3,19,92, 0, 0, 0, 1,61,37, 3,24,94, 1,61,31, 2,25,47, 1,61,36, + 3,25, 3, 3,25, 9, 1,61,38, 1,61,32, 6,36,80, 1,61,33, 3,24,89, 2,25,45, + 3,24,91, 3,25, 5, 1,61,30, 3,25, 2, 2,25,46, 1,61,35, 4,21,29, 5,21,59, + 2,25,44, 1,61,34, 3,24,90, 0, 0, 0, 1,66,11, 3,30,92, 1,66,13, 4,27,15, + 3,30,93, 2,32,30, 1,66,12, 1,66, 1, 1,66, 5, 3,31, 4, 1,70,75, 2,39,47, + 2,32,32, 1,66, 6, 3,30,94, 3,30,85, 2,32,35, 2,32,36, 1,66,10, 4,27,16, + 2,32,38, 3,31, 1, 2,32,40, 3,31, 3, 2,32,41, 2,32,29, 2,32,28, 2,32,42, + 1,66, 9, 2,32,39, 2,32,37, 4,27,12, 1,66, 7, 1,66, 3, 1,66,14, 2,32,33, + 2,32,34, 2,32,31, 3,30,88, 1,66, 8, 4,27,17, 3,31, 2, 1,66, 4, 0, 0, 0, + 1,66, 2, 2,39,46, 1,70,70, 1,70,65, 3,36,64, 3,36,57, 1,70,60, 3,36,67, + 1,70,76, 1,70,61, 3,36,53, 1,70,57, 1,70,72, 1,70,69, 1,70,71, 3,36,56, + 1,70,62, 1,70,67, 1,70,58, 1,70,59, 2,39,54, 2,39,51, 2,39,43, 2,39,48, + 3,36,59, 1,70,73, 2,39,55, 1,70,74, 1,70,64, 3,36,60, 3,36,65, 2,39,45, + 3,36,54, 2,39,53, 2,39,49, 2,39,52, 2,39,50, 1,70,68, 2,39,44, 1,70,63, + 3,36,61, 0, 0, 0, 0, 0, 0, 2,46,20, 1,75, 2, 1,75, 5, 3,41,63, 2,46,22, + 3,41,68, 1,75,13, 2,46,21, 1,75, 7, 3,41,67, 1,78,88, 2,46,23, 4,39,37, + 1,75,12, 2,46,19, 1,75,14, 3,41,62, 3,41,66, 3,41,75, 1,75, 3, 3,41,72, + 1,70,66, 1,75, 6, 3,41,64, 1,75, 4, 1,75, 8, 1,75,10, 1,75, 1, 1,75,15, + 1,75,11, 3,41,69, 1,75, 9, 2,46,18, 3,41,70,15,44,33, 0, 0, 0, 3,46,84, + 1,79, 1, 3,46,71, 1,78,91, 3,46,82, 3,46,80, 3,46,78, 1,79, 4, 3,46,76, + 2,52,31, 1,79, 5, 2,52,43, 2,52,36, 1,78,84, 2,52,44, 2,52,38, 1,78,94, + 2,52,39, 3,46,83, 1,78,93, 2,52,42, 1,78,87, 2,52,40, 2,52,30, 1,78,86, + 2,58,54, 1,78,92, 3,46,85, 1,78,89, 3,46,73, 1,79, 3, 3,46,74, 2,52,29, + 3,46,86, 2,52,33, 1,78,85, 2,52,32, 2,52,34, 2,52,35, 1,79, 2, 2,52,37, + 2,52,41, 2,52,45, 0, 0, 0, 1,79, 6, 1,82,28, 2,58,49, 2,58,55, 2,58,52, + 2,58,44, 2,58,56, 2,58,45, 3,50,74, 2,58,51, 3,50,75, 1,82,23, 1,82,29, + 2,58,57, 3,46,79, 3,50,71, 1,82,25, 3,50,78, 1,82,35, 1,82,30, 2,58,59, + 2,58,53, 1,82,26, 2,58,46, 1,82,36, 2,58,47, 2,58,48, 1,82,37, 1,82,34, + 1,78,90, 3,50,73, 1,82,24, 2,58,60, 1,82,38, 3,50,72, 1,82,31, 2,58,58, + /* plane 0, page 139 */ + 0, 159, /* first, last */ + 1,82,27, 1,82,32, 1,82,33, 3,70,44, 1,85,46, 2,63,48, 2,63,57, 2,63,54, + 2,63,56, 3,54,41, 1,85,43, 2,63,49, 3,54,42, 2,63,55, 1,85,39, 2,63,51, + 1,85,47, 2,63,47, 2,63,52, 2,63,59, 2,58,50, 2,63,53, 2,63,46, 1,85,40, + 2,63,45, 1,85,41, 2,63,60, 1,85,42, 2,63,58, 1,85,45, 2,63,44, 3,54,40, + 1,85,44, 0, 0, 0, 2,63,50, 2,67,39, 2,67,53, 2,67,48, 2,67,50, 2,67,38, + 1,87,30, 3,57,10, 2,67,37, 1,87,33, 1,87,32, 3,57, 6, 2,67,52, 2,67,44, + 2,67,41, 2,67,47, 3,57, 4, 2,67,40, 3,57, 8, 2,67,42, 2,67,51, 2,67,49, + 3,57, 3, 1,87,31, 2,67,56, 2,67,54, 2,67,45, 2,67,55, 2,67,46, 3,59,20, + 2,71, 6, 1,88,90, 2,71,13, 3,59,21, 4,65,26, 2,76,30, 1,89, 3, 2,67,43, + 2,71, 4, 1,88,93, 2,71, 5, 2,71,10, 3,59,22, 3,61,19, 1,89, 1, 1,89, 2, + 2,71, 3, 2,71,12, 2,71,14, 2,71, 7, 2,71, 9, 2,71,11, 2,71, 8, 2,71,15, + 1,88,92, 1,89, 4, 1,88,94, 0, 0, 0, 1,88,91, 2,73,92, 4,68,45, 1,90,34, + 2,73,90, 3,61,16, 3,61,12, 2,73,94, 3,61,18, 2,74, 1, 1,90,32, 2,74, 2, + 2,73,93, 3,61,11, 2,73,91, 1,90,35, 1,90,31, 2,74, 3, 3,61,14, 1,90,33, + 1,90,30, 3,60,77, 0, 0, 0, 4,71,27, 1,91,11, 3,62,66, 4,71,33, 1,91,12, + 2,76,29, 2,76,28, 2,76,31, 2,76,32, 3,62,67, 1,91,13, 2,78, 5, 2,78,10, + 1,91,84, 3,63,65, 2,78, 7, 3,63,66, 2,78, 6, 2,78, 9, 2,78, 8, 3,64,40, + 2,79,49, 4,74,92, 1,92,40, 2,79,48, 2,79,46, 3,64,39, 2,79,47, 0, 0, 0, + 3,64,41, 3,64,91, 1,92,74, 1,92,73, 2,80,47, 2,80,48, 1,92,75, 3,65,43, + 2,81,28, 2,81,29, 1,93,20, 3,65,75, 1,93,26, 3,65,94, 2,81,87, 2,82,22, + /* plane 0, page 140 */ + 55, 255, /* first, last */ + 1,43,39, + 5,16,38, 2,25,48, 3,25,10, 2,25,49, 2,39,56, 2,46,24, 2,52,46, 1,85,49, + 3,54,45, 1,85,48, 2,67,57, 2,71,16, 3,63,68, 2,79,50, 1,43,40, 2,19, 2, + 1,56,31, 1,61,39, 2,39,58, 2,39,57, 1,79, 7, 2,52,47, 1,79, 8, 2,63,61, + 1,87,34, 3,61,20, 3,70,45, 3,66, 1, 1,93,35, 1,43,41, 2, 8,75, 2,19, 3, + 3,25,13, 4,21,45, 1,61,40, 3,25,12, 2,25,50, 2,25,51, 3,31,10, 2,32,43, + 3,31, 9, 1,66,15, 1,70,77, 3,36,68, 2,39,60, 2,39,59, 2,39,61, 3,41,77, + 2,46,25, 2,46,26, 1,75,16, 1,82,39, 1,79, 9, 1,82,40, 0, 0, 0, 2,63,65, + 2,63,62, 2,63,64, 2,63,63, 1,85,50, 3,57,11, 2,67,58, 2,71,18, 2,71,17, + 2, 5, 4, 1,56,33, 1,56,32, 2,19, 4, 3,25,14, 2,25,52, 3,31,12, 3,31,11, + 2,32,45, 2,32,44, 1,66,16, 3,31,13, 2,39,63, 2,39,64, 2,39,62, 4,32,88, + 3,36,69, 1,70,79, 1,70,78, 4,39,52, 1,75,18, 1,75,17, 3,46,90, 2,52,48, + 2,58,63, 2,58,61, 2,58,62, 1,82,41, 2,63,67, 2,63,66, 3,54,47, 2,67,61, + 2,67,60, 2,67,59, 2,71,19, 3,65,45, 2,81,88, 1,43,42, 1,51,54, 3,15,14, + 1,51,55, 1,56,34, 1,56,35, 2,19, 6, 2,19, 5, 2,25,53, 3,25,16, 1,61,46, + 1,61,44, 1,61,41, 1,61,45, 1,61,43, 1,61,42, 3,25,18, 3,25,17, 1,66,17, + 2,32,48, 3,31,15, 1,70,84, 1,66,19, 1,66,24, 2,32,50, 1,66,26, 1,66,25, + 1,66,28, 2,32,49, 2,32,46, 1,66,22, 1,66,18, 1,66,20, 2,32,47, 1,66,27, + 1,66,23, 1,66,21, 1,70,86, 1,70,85, 1,70,83, 1,70,87, 4,32,94, 1,70,81, + 1,70,82, 3,36,73, 1,70,80, 5,35,13, 2,39,65, 3,36,71, 0, 0, 0, 2,46,28, + 3,41,80, 1,75,20, 1,75,21, 1,75,19, 3,41,82, 2,46,27, 3,41,81, 2,46,29, + 3,70,46, 2,52,51, 2,52,53, 3,46,94, 1,79,18, 2,52,54, 1,79,11, 2,52,50, + 1,79,10, 1,79,20, 1,79,16, 1,79,17, 1,79,13, 2,52,49, 1,79,12, 2,52,55, + 2,52,52, 3,46,93, 1,79,19, 3,47, 2, 1,79,14, 1,79,15, 2,58,65, 3,50,85, + 2,58,67, 2,58,66, 3,50,83, 2,58,68, 1,82,42, 2,58,64, 3,54,49, 3,54,50, + 1,85,54, 2,63,68, 1,85,51, 1,85,55, 1,85,53, 1,85,52, 2,67,62, 4,61,73, + /* plane 0, page 141 */ + 0, 255, /* first, last */ + 2,67,65, 7,35,50, 2,67,64, 3,57,14, 2,67,63, 1,87,35, 2,71,20, 2,71,21, + 1,89, 5, 2,71,22, 1,89, 6, 3,59,24, 3,70,47, 1,90,37, 4,68,47, 1,90,36, + 2,76,33, 3,62,69, 3,62,70, 1,91,14, 2,76,34, 2,78,11, 1,91,85, 1,91,86, + 3,70,48, 2,79,51, 3,64,42, 1,92,77, 3,65,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,43,43, 3,25,19, 1,61,48, 1,61,47, + 2,39,66, 2,39,67, 0, 0, 0, 1,75,22, 2,58,69, 1,79,21, 2,58,70, 2,63,69, + 1,43,44, 3, 4,26, 2,13,51, 1,51,57, 1,51,56, 0, 0, 0, 2,19, 7, 1,56,36, + 2,19, 8, 2,25,56, 3,25,25, 2,25,55, 3,25,23, 2,25,54, 3,25,21, 3,25,24, + 2,32,52, 1,66,31, 3,31,25, 3,31,20, 2,32,51, 1,66,30, 3,31,23, 3,31,16, + 3,31,19, 2,32,53, 1,66,29, 3,31,24, 2,39,69, 2,39,72, 2,39,70, 2,39,71, + 2,39,75, 2,39,68, 2,39,76, 2,39,73, 2,39,74, 1,75,24, 2,46,30, 3,41,85, + 3,41,83, 1,75,23, 3,41,84, 2,52,59, 2,52,57, 3,47, 6, 4,45,85, 1,79,22, + 2,52,56, 2,52,58, 3,47, 5, 1,79,23, 3,47, 3, 2,58,71, 3,50,87, 2,58,72, + 1,85,56, 3,57,17, 2,71,24, 2,71,26, 2,71,23, 2,71,25, 2,74, 4, 2,76,35, + 3,70,49, 0, 0, 0, 2,81,62, 1,43,45, 1,51,58, 2,19, 9, 2,19,11, 2,19,10, + 0, 0, 0, 2,25,59, 1,61,50, 3,25,30, 2,25,57, 3,25,26, 1,61,49, 2,25,60, + 3,25,29, 2,25,61, 2,25,58, 6,37,24, 0, 0, 0, 2,32,65, 1,66,39, 2,32,57, + 2,32,63, 3,31,31, 3,31,26, 1,66,34, 1,66,37, 2,32,56, 1,66,32, 2,32,60, + 2,39,82, 1,66,36, 3,31,27, 2,32,55, 3,31,30, 2,32,61, 2,32,58, 2,32,64, + 2,32,54, 2,32,62, 1,66,35, 1,66,38, 2,32,59, 1,66,33, 0, 0, 0, 1,70,89, + 2,39,78, 1,70,88, 2,39,85, 2,39,84, 1,71, 1, 0, 0, 0, 1,71, 2, 2,39,86, + 1,70,90, 2,39,83, 1,70,94, 2,39,88, 2,39,79, 3,36,75, 2,39,81, 1,70,91, + 2,39,77, 2,39,80, 2,39,87, 1,70,92, 2,39,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1,70,93, 0, 0, 0, 1,75,25, 2,46,35, 2,46,41, 2,46,33, + /* plane 0, page 142 */ + 0, 255, /* first, last */ + 2,46,42, 3,41,91, 2,46,32, 2,46,37, 2,46,43, 2,46,40, 2,46,39, 2,46,38, + 3,41,90, 2,46,31, 2,46,36, 3,41,89, 0, 0, 0, 2,46,34, 0, 0, 0, 1,79,28, + 1,79,25, 2,52,68, 2,52,73, 2,52,75, 2,52,72, 2,52,65, 2,52,67, 2,52,77, + 2,52,74, 2,52,69, 2,52,78, 2,52,66, 2,52,76, 1,79,26, 1,79,32, 1,79,30, + 2,52,60, 1,79,31, 1,79,27, 2,52,61, 2,52,63, 2,52,62, 2,52,70, 2,52,71, + 3,47,12, 1,79,29, 3,47,11, 1,79,24, 0, 0, 0, 0, 0, 0, 2,52,64, 0, 0, 0, + 2,58,82, 1,82,44, 3,50,94, 2,58,73, 1,82,45, 1,82,48, 2,58,78, 5,49,40, + 2,58,75, 1,82,47, 4,52, 9, 3,50,91, 2,58,79, 2,58,80, 2,58,74, 2,58,83, + 2,58,76, 2,58,81, 1,82,46, 3,50,92, 1,82,43, 2,58,77, 3,54,52, 2,63,75, + 1,85,59, 1,85,57, 1,85,60, 1,85,58, 2,63,74, 2,63,71, 2,63,70, 3,54,53, + 2,63,73, 4,57,13, 0, 0, 0, 2,63,72, 2,67,79, 1,87,41, 2,67,70, 2,67,69, + 3,57,18, 1,87,36, 2,67,75, 2,67,74, 2,67,66, 2,67,77, 2,67,71, 1,87,40, + 2,67,68, 2,67,76, 2,67,67, 1,87,37, 1,87,39, 2,67,72, 1,87,38, 2,67,73, + 3,59,26, 2,67,78, 2,71,30, 3,59,25, 1,89,11, 2,71,27, 4,65,50, 2,71,31, + 3,59,27, 4,65,47, 1,89, 8, 2,71,29, 1,89,13, 3,59,28, 1,89,10, 3,59,29, + 2,71,28, 4,65,52, 1,89,12, 2,71,32, 1,89, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1,90,39, 1,90,41, 3,61,23, 2,74, 7, 1,90,40, 2,74, 5, 1,89, 9, + 2,74, 6, 1,90,38, 1,91,15, 1,91,17, 2,76,37, 1,91,16, 2,76,36, 0, 0, 0, + 2,78,16, 1,91,87, 2,78,15, 1,91,88, 2,78,13, 2,78,12, 2,78,17, 2,78,18, + 2,79,52, 3,64,43, 2,78,14, 0, 0, 0, 0, 0, 0, 2,80,52, 2,80,49, 2,80,50, + 2,80,51, 1,93, 9, 3,65,48, 2,81,32, 2,81,31, 2,81,30, 2,81,63, 3,65,76, + 2,82,14, 2,81,89, 1,93,27, 1,43,46, 1,56,37, 3,25,31,15,24,76, 3,25,32, + 3,31,32, 3,36,83, 1,71, 3, 3,41,93, 3,41,92, 0, 0, 0, 3,47,16, 3,47,18, + 3,47,15, 3,47,17, 1,79,33, 0, 0, 0, 3,70,50, 2,58,84,15,56,19, 3,57,21, + 1,87,42, 3,57,22, 2,71,33, 3,59,31, 4,65,54, 0, 0, 0, 3,61,24, 4,71,49, + 0, 0, 0, 2,81,90, 1,43,47, 1,47,49, 1,51,60, 1,51,59, 5,16,53, 1,56,40, + 3,20, 1, 2,19,12, 1,56,38, 2,19,13, 1,56,39, 3,70,51, 3,25,33, 2,25,66, + 2,25,62, 3,25,39, 4,21,67, 1,61,51, 2,25,65, 2,25,64, 2,25,63, 1,61,52, + 2,25,67, 2,25,68, 0, 0, 0, 0, 0, 0, 3,31,37, 2,32,72, 2,32,70, 2,32,74, + 2,32,75, 2,32,81, 3,31,39, 2,32,77, 2,32,79, 5,35,48, 2,32,71, 2,32,66, + 4,27,53, 2,32,78, 3,31,36, 3,31,38, 2,32,80, 2,32,73, 2,32,76, 2,32,67, + 1,66,41, 2,32,69, 2,32,68, 1,66,40, 1,66,42, 3,31,41, 1,71, 6, 2,39,91, + /* plane 0, page 143 */ + 0, 255, /* first, last */ + 2,39,93, 2,39,92, 2,40, 3, 1,71, 4, 3,36,86, 2,39,94, 2,39,90, 2,40, 1, + 2,40, 2, 1,71, 5, 1,71, 7, 2,40, 4, 0, 0, 0, 2,46,47, 2,46,46, 4,39,74, + 2,46,44, 2,46,45, 1,75,27, 1,75,29, 1,75,26, 1,75,28, 2,52,85, 2,52,86, + 2,52,81, 3,47,22, 2,52,82, 1,79,35, 1,79,40, 1,79,34, 1,79,41, 1,79,36, + 2,52,83, 4,46,13, 3,47,19, 2,52,84, 2,52,80, 1,79,42, 1,79,38, 3,47,21, + 4,46,11, 1,79,37, 1,79,39, 3,47,20, 2,52,79, 3,51, 4, 2,58,86, 1,82,50, + 3,51, 2, 3,51, 1, 2,58,88, 1,82,52, 2,58,91, 2,58,87, 2,58,85, 2,58,90, + 1,82,51, 2,58,89, 7,20,18, 1,82,49, 3,51, 5, 3,54,57, 1,85,62, 1,85,65, + 2,63,77, 3,54,58, 1,85,63, 2,63,76, 1,85,61, 1,85,64, 2,67,80, 2,67,81, + 2,67,82, 1,87,43, 3,57,23, 2,67,83, 0, 0, 0, 1,87,44, 1,89,15, 2,71,36, + 2,71,37, 2,71,35, 2,71,34, 2,71,38, 1,89,14, 2,74,11, 2,74, 9, 2,74,10, + 2,74,12, 2,74, 8, 2,74,13, 2,76,39, 3,62,71, 2,76,40, 2,76,38, 1,91,18, + 2,78,19, 1,91,89, 2,78,20, 2,79,54, 2,79,53, 3,66, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,43,48, 1,66,43, 3,31,43, 3,36,87, 1,71, 8, + 3,36,88, 3,42, 1, 3,42, 2, 1,75,30, 3,47,23, 3,51, 7, 1,82,54, 3,51, 6, + 1,82,53, 0, 0, 0, 3,70,52, 0, 0, 0, 3,57,24, 1,89,16, 1,90, 9, 1,91,19, + 1,43,49, 1,56,41, 1,71, 9, 3,47,25, 2,71,39, 3, 7,15, 4, 1,52,15, 1,74, + 4, 3,16, 3, 4,27, 0, 0, 0,15, 2,81,15, 2,82, 0, 0, 0, 3, 7,16, 2, 5, 6, + 4, 5, 1, 3, 7,19, 1,43,50, 4, 5, 3, 1,43,53, 1,43,52, 1,43,51, 3, 7,17, + 15, 5,18, 2, 5, 5, 3,10,82, 2, 8,77, 3,10,80, 2, 8,79, 1,47,50, 3,10,84, + 4, 8, 6, 1,47,52, 2, 8,76, 2, 8,78, 1,47,51, 2, 8,81, 2, 8,80, 2, 8,82, + 3,10,83, 3,10,81, 0, 0, 0, 0, 0, 0,15, 8,81, 0, 0, 0, 0, 0, 0,15, 8,78, + 2,13,55, 2,13,53, 1,51,63, 2,13,52, 1,51,68, 1,51,65, 1,51,62, 3,15,17, + 1,51,69, 3,15,18, 1,51,64, 1,51,67, 6,20,64, 1,51,66, 2,13,54, 3,15,19, + 1,51,61, 3,15,16, 0, 0, 0, 0, 0, 0, 1,56,47, 2,19,15, 2,19,21, 1,56,44, + 1,56,51, 3,20, 5, 1,56,46, 2,19,18, 2,19,20, 1,56,49, 2,19,14, 2,19,17, + /* plane 0, page 144 */ + 0, 255, /* first, last */ + 1,56,45, 1,56,42, 2,19,16, 1,56,48, 2,19,19, 1,56,50, 1,56,43, 4,16,15, + 3,20, 7, 3,20, 6, 0, 0, 0, 2,25,70, 2,25,73, 1,61,54, 3,25,43, 1,61,64, + 1,61,60, 2,25,71, 3,25,42, 3,25,46, 1,61,68, 1,61,61, 1,61,66, 1,61,56, + 4,21,72, 1,61,53, 1,61,55, 1,61,67, 2,25,72, 1,61,59, 1,61,62, 1,61,58, + 1,61,63, 2,25,74, 1,61,65, 1,61,57, 2,25,69, 3,25,44, 0, 0, 0, 0, 0, 0, + 3,31,47, 3,31,48, 3,31,45, 3,31,44, 3,31,49, 2,32,82, 1,66,44, 2,32,84, + 3,31,53, 1,66,46, 1,66,48, 4,21,70, 2,32,83, 1,66,45, 1,66,49, 3,31,54, + 1,66,47, 0, 0, 0, 3,31,52, 3,31,55, 1,71,15, 2,40, 9, 1,71,23, 2,40, 6, + 3,36,93, 1,71,24, 1,71,13, 3,36,89, 2,40, 7, 3,36,92, 3,36,90, 1,71,18, + 3,36,91, 2,40, 8, 1,71,11, 1,71,10, 3,36,94, 1,71,21, 1,71,20, 1,71,19, + 1,71,17, 1,71,22, 2,40, 5, 1,71,12, 1,71,14, 1,71,16, 0, 0, 0, 0, 0, 0, + 1,75,32, 1,75,35, 3,42, 4, 1,75,39, 1,75,33, 1,75,38, 1,75,36, 3,42, 7, + 1,75,31, 3,42, 6, 1,75,37, 1,75,34,15,44,75, 0, 0, 0, 4,46,18, 2,52,90, + 1,79,45, 1,79,43, 3,47,28, 2,52,91, 4,46,19, 1,79,46, 1,79,44, 2,52,89, + 2,52,88, 3,47,27, 1,82,58, 2,52,87, 1,82,56, 1,82,55, 2,58,92, 1,79,47, + 1,82,57, 2,58,93, 1,82,60, 2,58,94, 1,82,59, 1,85,67, 2,63,79, 1,85,66, + 1,85,71, 1,85,69, 1,85,70, 1,87,46, 1,85,68, 2,63,78, 2,59, 1, 1,87,45, + 1,87,47, 3,57,26, 1,89,17, 1,89,18, 4,65,63, 2,74,14, 4,73,50, 1,92,42, + 1,92,41, 1,43,55, 3, 2,62, 3, 2,61, 2, 2,85, 1,56,52, 3, 4,28, 2, 2,82, + 2, 2,83, 2, 2,81, 3, 4,29, 2, 2,84, 3,70,53, 0, 0, 0, 2, 5,10, 2, 5, 7, + 2, 5,12, 2, 5, 8, 1,43,56, 1,43,59, 3, 7,21, 2, 5, 9, 1,43,58, 2, 5,11, + 3, 7,25, 3, 7,20, 1,43,57, 3,25,49, 0, 0, 0, 3,10,87, 4, 8,11, 2, 8,85, + 2, 8,87, 1,47,55, 2, 8,83, 2, 8,86, 2, 8,84, 1,47,53, 1,47,56, 3,10,85, + 1,47,54, 3,10,88, 0, 0, 0, 0, 0, 0, 3,15,21, 2,13,57, 2,13,61, 2,13,58, + 3,15,24, 1,51,72, 3,15,20, 1,51,73, 3,15,30, 2,13,60, 3,15,23, 2,13,62, + 2,13,64, 3,15,28, 1,51,70, 2,13,63, 4,33,25, 3,15,27, 1,51,71, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,37,77, 0, 0, 0, 2,25,81, 2,13,59, 2,19,22, 2,19,31, + 2,19,29, 2,19,24, 2,19,25, 2,19,30, 2,19,32, 1,56,54, 3,20, 9, 2,19,27, + 2,19,23, 1,56,53, 1,56,55, 2,19,26, 2,19,33, 2,19,28, 0, 0, 0, 0, 0, 0, + 1,61,69, 2,25,84, 2,25,76, 2,25,82, 2,25,83, 1,61,70, 3,25,47, 2,25,75, + 2,25,77, 2,13,56, 2,25,79, 2,25,80, 2,25,78, 1,66,51, 4,46,27, 3,25,50, + 0, 0, 0, 2,32,91, 2,59, 2, 2,32,92, 2,32,89, 1,61,71, 1,66,53, 2,32,88, + /* plane 0, page 145 */ + 0, 255, /* first, last */ + 2,32,94, 2,32,93, 1,66,50, 2,33, 3, 2,32,87, 2,33, 2, 2,32,85, 2,33, 1, + 2,32,90, 1,66,52, 3,31,57, 2,40,16, 3,37, 3, 2,40,11, 2,40,17, 2,40,12, + 2,40,10, 2,40,13, 1,71,25, 3,37, 4, 2,40,15, 3,37, 5, 2,40,14, 1,71,26, + 1,75,41, 1,75,40, 2,46,54, 2,46,57, 2,46,49, 2,46,53, 1,75,42, 2,46,52, + 2,46,50, 2,46,56, 2,46,51, 2,46,48, 2,46,55, 3,42,10, 2,53, 3, 1,79,50, + 2,67,84, 2,52,94, 2,53, 1, 2,52,93, 2,32,86, 1,79,49, 2,53, 4, 2,52,92, + 1,79,48, 1,79,51, 2,53, 2, 2,59, 3, 1,82,61, 2,59, 4, 2,59, 5, 3,51,11, + 2,63,80, 1,85,72, 2,67,85, 2,67,86, 3,57,28, 3,57,27, 2,67,87, 2,71,41, + 2,71,40, 2,74,16, 0, 0, 0, 2,74,15, 2,76,42, 2,76,43, 2,76,41, 2,78,21, + 1,91,90, 1,43,60, 1,51,75, 1,51,74, 1,56,58, 1,56,57, 2,19,35, 2,19,36, + 2,19,34, 3,20,10, 1,56,56, 2,25,88, 3,25,53, 2,25,89, 2,25,85, 1,61,72, + 2,25,86, 3,25,52, 2,25,87, 0, 0, 0, 3,70,55, 0, 0, 0, 0, 0, 0, 2,33, 6, + 2,33, 8, 2,33, 4, 2,33, 7, 1,66,54, 2,33, 5, 1,66,55, 0, 0, 0, 3,37, 8, + 2,34,89, 1,71,29, 1,71,28, 3,37, 7, 1,71,27, 4,33,26, 2,40,18, 2,40,19, + 4,33,27, 0, 0, 0, 2,46,59, 2,46,61, 1,75,46, 1,75,43, 3,42,12, 1,75,45, + 1,75,44, 2,46,60, 2,46,58, 3,42,11, 3,42,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2,53,11, 2,53, 8, 2,53, 9, 1,79,55, 2,53,10, 2,53, 5, 2,53, 6, 1,79,52, + 3,47,31, 1,79,53, 2,53, 7, 1,79,54, 3,47,32, 2,59, 9, 3,51,13, 2,59,10, + 2,59, 7, 2,59, 8, 1,82,62, 2,59, 6, 4,52,34, 3,51,12, 3,51,15, 0, 0, 0, + 4,57,31, 2,63,84, 2,63,81, 2,63,83, 1,85,75, 2,63,87, 1,85,74, 2,63,85, + 2,63,88, 2,63,86, 2,63,82, 1,85,73, 0, 0, 0, 2,67,89, 4,62, 4, 2,67,90, + 2,67,88, 3,57,29, 2,67,92, 1,87,48, 1,87,49, 2,71,43, 1,89,20, 2,67,91, + 2,71,42, 1,89,19, 2,74,19, 2,74,20, 1,90,42, 2,74,18, 4,68,69, 2,74,17, + 0, 0, 0, 2,76,44, 1,91,20, 3,62,72, 2,79,55, 2,80,54, 2,80,53, 3,64,94, + 1,92,78, 1,93,10, 2,80,55, 2,81,64, 3,65,77, 1,93,28, 1,43,61, 1,47,57, + 0, 0, 0, 1,71,30, 0, 0, 0, 1,90,43, 1,43,62, 1,51,76, 1,61,73, 1,66,56, + 1,87,50, 1,47,58, 0, 0, 0, 2,13,66, 2,13,65, 2,19,37, 3,20,16, 1,56,61, + 1,56,59, 1,56,63, 2,19,39, 3,20,13, 1,56,62, 1,56,60, 3,20,15, 3,20,14, + 3,20,17, 0, 0, 0, 2,19,38, 1,61,76, 2,26, 1, 3,25,56, 1,61,75, 1,61,77, + 2,26, 6, 1,61,79, 2,26, 3, 2,26, 4, 2,25,90, 1,61,78, 2,26, 7, 4,21,91, + 3,25,55, 2,25,92, 3,25,54, 2,25,93, 2,25,91, 1,61,74, 3,25,57, 2,26, 5, + 2,25,94, 2,26, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,33,20, 3,31,61, 2,33,19, + /* plane 0, page 146 */ + 0, 255, /* first, last */ + 2,33,17, 2,33, 9, 2,33,24, 2,33,12, 2,33,22, 2,33,29, 2,33,21, 1,66,64, + 3,31,70, 1,66,60, 2,33,10, 3,31,64, 2,33,16, 1,66,62, 3,31,72, 2,33,15, + 1,66,63, 1,66,65, 2,33,18, 3,31,73, 1,66,57, 1,66,58, 2,33,30, 2,33,28, + 3,31,66, 2,33,27, 2,33,13, 3,31,69, 2,33,25, 4,27,70, 1,66,61, 6,47,79, + 3,31,62, 3,70,57, 3,31,67, 1,66,59, 2,33,26, 2,33,11, 2,33,14, 2,33,23, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,70,56, 0, 0, 0, 2,47, 2, 2,40,29, 3,37,14, + 2,40,22, 2,40,41, 2,40,50, 2,40,25, 1,71,41, 3,37,11, 2,40,38, 1,71,31, + 1,71,33, 1,71,45, 2,40,23, 3,37,23, 3,37,15, 1,71,34, 1,71,36, 1,71,46, + 1,71,35, 3,37,25, 4,33,33, 4,33,38, 3,37,24, 1,71,44, 2,40,31, 4,33,40, + 2,40,20, 1,71,42, 2,40,30, 1,71,38, 2,40,48, 1,71,43, 2,40,46, 2,40,34, + 2,40,44, 1,71,40, 2,40,21, 2,40,47, 2,40,42, 3,37,10, 2,40,49, 1,71,32, + 4,33,32, 3,37,13, 1,71,47, 1,71,37, 3,37,17, 3,37, 9, 2,40,27, 3,37,20, + 2,40,35, 2,40,39, 3,37,19, 2,40,43, 1,71,39, 2,40,26, 2,40,24, 2,40,36, + 4,33,34, 4,33,35, 3,37,18, 3,37,21, 2,40,33, 2,40,32, 3,37,22, 2,40,37, + 2,40,40, 0, 0, 0, 2,40,45, 3,70,58,15,37,82, 4,39,85, 2,46,64,15,45, 2, + 1,75,47, 2,46,74, 2,46,66, 1,75,53, 1,75,57, 2,46,83, 2,46,91, 2,46,76, + 1,75,49, 3,42,20, 2,46,80, 2,40,28, 3,42,21, 1,75,50, 2,46,87, 2,46,92, + 2,46,84, 3,42,15, 2,46,86, 2,47, 1, 2,46,88, 2,46,70, 2,46,79, 3,37,16, + 3,42,24, 1,75,58, 3,42,19, 1,75,54, 2,46,68, 2,46,81, 1,75,52, 2,46,75, + 1,75,51, 2,46,89, 2,46,72, 2,46,65, 1,75,55, 2,46,94, 3,42,25, 4,39,87, + 2,46,67, 2,46,85, 2,46,82, 2,46,77, 2,46,63, 2,46,62, 2,46,71, 2,46,90, + 1,75,56, 2,46,93, 2,46,69, 2,46,73, 1,75,48, 3,42,18, 3,42,23,15,45, 7, + 3,71,10, 3,42,17, 1,79,67, 1,79,62, 2,53,45, 2,53,41, 2,53,17, 1,79,58, + 3,47,34, 3,47,48, 4,46,37, 1,79,57, 1,79,63, 4,46,39, 3,47,35, 3,47,33, + 2,53,15, 1,79,61, 2,53,27, 2,53,13, 2,53,14, 1,79,56, 2,53,44, 1,79,65, + 2,53,30, 2,53,35, 2,53,29, 2,59,28, 2,53,25, 2,53,33, 2,53,31, 2,53,18, + 2,53,12, 2,53,39, 1,79,64, 2,53,40, 3,47,40, 2,53,34, 3,47,41, 2,53,23, + 2,53,21, 2,53,16, 3,47,43, 3,47,46, 3,47,36, 2,53,24, 2,53,37, 2,53,20, + 2,53,36, 2,53,42, 3,47,49, 4,46,38, 1,79,60, 3,47,37, 2,53,32, 2,53,38, + 2,53,28, 2,53,22, 1,79,59, 3,47,50, 4,46,36, 3,47,44, 2,46,78, 2,53,26, + 1,79,66, 2,53,19,15,50,75, 3,47,45, 3,70,59, 3,70,60, 3,42,16, 2,59,33, + 1,82,65, 2,59,32, 2,59,30, 2,59,48, 1,82,69, 3,51,21, 2,59,45, 2,59,37, + /* plane 0, page 147 */ + 0, 255, /* first, last */ + 2,59,47, 2,59,23, 2,59,35, 3,51,29, 1,82,71, 3,51,30, 2,59,15, 3,51,24, + 2,59,13, 2,59,46, 3,51,18, 2,59,44, 2,59,43, 2,59,27, 2,59,26, 2,59,16, + 1,82,73, 4,52,35, 2,59,22, 2,59,31, 2,59,42, 1,82,76, 2,59,49, 3,51,22, + 1,85,83, 1,82,78, 1,82,72, 2,59,20, 3,51,23, 2,59,29, 2,59,12, 2,59,14, + 1,82,63, 1,82,75, 1,82,68, 2,59,21, 2,59,36, 2,53,43, 1,82,74, 2,59,11, + 1,85,78, 2,59,38, 2,59,41, 1,82,70, 3,51,27, 2,59,25, 1,82,77, 1,82,67, + 3,51,28, 3,51,25, 3,51,26, 1,82,66, 2,59,34, 2,59,40, 1,82,64, 4,52,37, + 2,59,18, 2,59,39,15,56,57,15,56,40, 2,59,19, 7,20,67, 0, 0, 0, 3,70,61, + 15,56,53, 0, 0, 0, 3,70,62, 4,52,41, 0, 0, 0, 3,51,17, 2,59,24, 2,63,94, + 3,54,69, 2,64, 5, 1,85,80, 1,85,82, 2,64,11, 1,85,76, 2,64,25, 2,64,17, + 2,64, 6, 2,64, 7, 2,64,16, 3,54,70, 1,85,89, 2,64,15, 2,63,93, 2,64,14, + 2,64, 2, 2,64,26, 1,85,88, 1,85,86, 2,64, 3, 3,54,61, 2,64,22, 3,54,71, + 2,64, 8, 2,64,21, 3,54,68, 2,64,23, 2,63,92, 1,85,81, 3,54,59, 2,64,24, + 3,54,72, 3,54,62, 2,64,12, 3,54,75, 1,85,85, 2,64, 9, 3,54,65, 4,57,41, + 1,85,87, 2,64,18, 3,54,66, 3,54,67, 3,54,63, 1,85,79, 2,64, 4, 2,64,19, + 3,54,60, 2,64,13, 2,59,17, 2,64,20, 2,64, 1, 3,54,64, 1,85,84, 3,54,74, + 2,68,15, 4,57,39, 1,85,77, 2,63,90, 4,57,38,15,61,33, 3,70,63,15,61,25, + 2,68,12, 2,68, 5, 1,87,52, 3,57,35, 2,67,94, 2,68,16, 2,68, 7, 2,64,10, + 3,57,32, 2,68,18, 2,68, 1, 3,57,34, 1,87,51, 2,68,11, 1,87,53, 1,87,61, + 1,87,59, 2,68,13, 1,87,60, 2,68, 3, 3,57,41, 2,68, 4, 2,68, 9, 2,68,14, + 3,57,30, 2,63,89, 1,87,54, 2,68,23, 2,68,20, 2,71,65, 2,68,10, 2,68, 6, + 2,68,21, 2,71,54, 2,68, 8, 4,62,17, 1,87,57, 3,57,36, 1,87,56, 2,63,91, + 1,87,58, 2,68,17, 2,68,19, 1,87,55, 2,68,22, 2,67,93, 4,62, 9, 2,68, 2, + 3,57,38,15,65,19, 0, 0, 0, 3,57,37, 3,70,65, 3,70,66, 3,70,64,15,65,35, + 2,71,63, 3,59,48, 2,71,47, 1,89,24, 2,71,61, 3,59,36, 3,59,37, 2,71,45, + 1,89,25, 4,65,71, 2,71,56, 3,59,35, 2,71,52, 1,89,30, 2,71,62, 2,71,46, + 2,71,49, 1,89,22, 2,71,64, 3,59,40, 2,71,57, 2,71,60, 1,89,28, 1,89,33, + 1,89,31, 2,71,53, 2,71,48, 3,59,45, 1,89,26, 1,89,27, 2,71,44, 1,89,23, + 3,59,47, 1,89,21, 1,89,29, 2,71,59, 1,89,32, 3,59,42, 2,71,55, 2,71,66, + 1,89,34, 3,59,33, 3,59,34, 3,59,46, 2,71,51, 3,59,39, 2,71,58, 3,70,69, + 0, 0, 0, 3,70,67, 3,70,68, 3,61,33, 3,62,74, 2,74,33, 2,74,48, 2,74,35, + 2,74,42, 2,71,50, 2,74,40, 2,74,23, 2,74,46, 1,90,46, 2,74,27, 2,74,45, + /* plane 0, page 148 */ + 0, 132, /* first, last */ + 2,74,34, 4,68,71, 3,61,35, 1,90,45, 3,61,28, 3,61,31, 2,74,50, 2,74,36, + 3,61,30, 2,74,41, 2,74,44, 2,74,21, 2,74,47, 2,74,32, 2,74,37, 2,74,25, + 2,74,29, 2,74,49, 2,74,39, 2,74,22, 2,74,26, 2,74,28, 2,74,38, 3,61,29, + 1,90,44, 2,74,31, 3,61,36, 3,61,37, 3,61,39, 4,68,75, 3,61,34, 3,61,26, + 2,74,24, 0, 0, 0, 3,70,70, 3,70,71, 3,70,72,15,70,55, 0, 0, 0, 3,61,38, + 2,74,30, 2,76,48, 2,76,52, 1,91,27, 2,76,54, 3,62,77, 1,91,21, 4,68,79, + 2,76,50, 2,76,56, 1,91,26, 1,91,22, 4,71,60, 1,91,23, 2,76,47, 2,76,53, + 1,91,25, 2,76,51, 1,91,24, 2,76,46, 2,74,43, 2,76,49, 4,71,66, 2,76,45, + 2,76,55, 0, 0, 0, 3,63,73, 3,63,78, 1,91,91, 2,78,28, 2,78,31, 2,78,27, + 2,78,29, 2,78,30, 2,78,24, 2,78,25, 2,78,22, 3,63,74, 3,63,76, 2,78,26, + 2,78,23, 1,91,92, 1,91,93, 0, 0, 0, 3,63,75, 2,79,57, 3,64,50, 2,79,59, + 4,75, 9, 5,86,61, 3,64,53, 3,64,52, 3,64,54, 2,79,58, 2,79,60, 3,64,47, + 1,92,44, 3,64,51, 2,79,56, 1,92,43, 1,92,45, 3,64,55, 3,70,74, 3,70,73, + 2,80,57, 2,80,58, 1,92,79, 2,80,56, 3,65, 2, 2,81,34, 2,81,33, 2,81,35, + 1,93,12, 2,81,36, 1,93,11, 2,81,37, 2,81,65, 2,81,68, 2,81,67, 1,93,21, + 2,81,66, 4,77,66, 3,65,79, 3,66, 3, 1,93,31, 1,93,29, 1,93,30, 1,93,36, + 2,82,16, 2,82,17, 2,82,15, 2,82,23, 3,66,22, + /* plane 0, page 149 */ + 119, 245, /* first, last */ + 1,47,59, + 4, 5,11, 4,16,26, 2,26, 8, 2,33,31, 2,53,46, 2,71,67, 5,81,54, 0, 0, 0, + 1,47,60, 3,15,32, 1,51,77, 1,56,64, 4,16,27, 3,20,18, 2,26, 9, 3,25,60, + 2,26,10, 1,61,80, 0, 0, 0, 1,66,68, 2,33,33, 2,33,32, 1,66,72, 1,66,67, + 2,33,34, 1,66,69, 1,66,71, 1,66,70, 1,66,66, 3,31,76,15,31,94, 3,70,75, + 1,71,48, 3,37,28, 3,37,26, 2,40,54, 2,40,52, 4,33,51, 2,40,53, 2,40,51, + 15,37,91, 1,75,59, 3,42,29, 1,75,62, 1,75,64, 1,75,63, 4,40, 2, 3,42,30, + 1,75,60, 1,75,61, 0, 0, 0, 2,53,48, 2,53,47, 1,79,68, 2,53,49, 3,47,51, + 2,53,50, 1,79,69, 3,47,53, 3,47,54, 4,46,42, 2,59,57, 2,59,55, 2,64,32, + 3,51,34, 2,59,53, 2,59,54, 1,82,79, 2,59,50, 2,59,58, 2,59,52, 2,59,56, + 2,64,28, 3,51,36, 3,51,32, 2,64,30, 3,54,77, 2,64,31, 1,85,94, 2,64,27, + 1,85,93, 2,64,29, 1,85,90, 1,85,91, 1,85,92, 2,59,51, 3,70,76, 0, 0, 0, + 1,87,64, 2,68,26, 2,68,24, 2,68,25, 1,87,62, 1,87,65, 1,87,63, 3,57,43, + 3,57,42, 7,43,32, 2,71,68, 2,71,69, 1,89,35, 3,59,51, 2,74,51, 2,74,53, + 2,74,52, 1,90,47, 1,91,28, 2,76,59, 2,76,58, 2,76,57,15,72,82, 3,70,77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 5,25, + /* plane 0, page 150 */ + 28, 255, /* first, last */ + 1,47,61, 3, 1,35, 2, 1,73, 0, 0, 0, + 2, 2,88, 1,40,74, 2, 2,86, 2, 2,89, 2, 2,87, 4, 5,14, 3, 7,27, 3, 7,26, + 2, 5,14, 3, 7,31, 1,43,66, 3, 7,28, 1,43,67, 2, 5,16, 1,43,64, 2, 5,15, + 2, 5,13, 1,43,65, 1,43,63, 3, 7,29, 3, 7,30, 0, 0, 0, 0, 0, 0, 3,10,89, + 4, 8,19, 2, 8,88, 2, 8,91, 1,47,64, 2, 8,90, 2, 8,89, 3,10,92, 1,47,63, + 1,47,62, 3,10,91, 1,47,66, 2, 8,92, 1,47,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2,13,71, 1,51,79, 1,51,80, 1,51,81, 2,13,72, 2,13,68, + 1,51,78, 2,13,69, 4,11,61, 2,13,70, 2,13,67, 4,11,59, 3,20,22, 4,16,31, + 1,56,71, 3,20,20, 3,25,62, 1,56,68, 2,19,40, 1,56,69, 1,56,72, 2,19,41, + 3,20,19, 1,56,67, 1,56,65, 1,56,66, 1,56,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1,61,81, 2,26,13, 1,61,89, 2,26,12, 3,25,65, 2,26,15, + 1,61,85, 2,26,14, 1,66,80, 1,61,83, 1,61,86, 1,61,82, 1,61,87, 1,61,88, + 1,61,84, 3,25,69, 0, 0, 0, 3,31,81, 2,26,11, 1,66,76, 2,33,36, 3,31,82, + 2,33,40, 3,31,83, 3,31,85, 2,33,39, 1,66,81, 1,66,77, 1,66,78, 2,33,35, + 2,33,37, 2,33,38, 1,66,73, 1,66,75, 3,31,80, 1,66,79, 1,66,74, 3,37,32, + 0, 0, 0, 2,40,57, 2,40,55, 2,40,56, 1,71,50, 1,71,51, 3,37,34, 2,40,58, + 1,71,49, 1,75,65, 4,40, 4, 1,75,67, 1,75,66, 3,42,37, 2,47, 3, 3,42,38, + 3,42,36, 2,47, 4, 2,53,52, 3,47,58, 2,53,51, 3,47,59, 4,52,50, 1,82,80, + 1,82,81, 2,59,59, 1,82,82, 3,51,40, 2,64,35, 3,54,80, 2,64,33, 3,54,79, + 2,64,34, 1,86, 1, 3,54,81, 2,68,27, 1,89,36, 3,61,41, 3,10,93, 3,51,41, + 1,86, 2, 1,47,67, 4,16,33, 1,56,73, 2,19,42, 3,20,25,15,18,79, 2,26,16, + 1,61,90, 1,66,82, 2,33,41, 2,33,43, 1,66,84, 1,66,83, 1,66,85, 1,66,86, + 2,33,42, 1,71,54, 1,71,55, 1,71,53, 1,75,68, 1,71,52, 2,40,59, 4,33,55, + 3,42,39, 3,42,41, 1,75,69, 2,53,53, 2,59,60, 1,82,83, 1,86, 3, 2,68,28, + 2,68,32, 1,87,68, 2,68,29, 1,87,69, 1,87,67, 2,68,33, 1,87,70, 2,68,31, + 0, 0, 0, 2,71,70, 1,87,66, 1,89,37, 3,62,80, 2,80,59, 3,65, 5, 3,66,15, + 1,47,68, 1,61,92, 1,61,91,15,25,10, 3,31,94, 3,31,92, 3,31,91, 1,66,87, + 2,33,45, 2,33,44, 1,66,88, 0, 0, 0, 3,37,38, 2,40,63, 1,71,59, 1,71,56, + 2,40,62, 1,71,58, 2,40,60, 1,71,57, 3,37,39, 2,40,61, 0, 0, 0, 2,47, 5, + /* plane 0, page 151 */ + 0, 255, /* first, last */ + 1,75,70, 0, 0, 0, 2,53,56, 5,50,27, 1,79,70, 2,53,54, 1,79,71, 1,79,72, + 2,53,55, 1,79,73, 3,47,64, 2,59,61, 3,51,48, 1,82,87, 1,82,84, 1,82,89, + 2,59,63, 1,82,85, 2,59,62, 1,82,88, 3,51,45, 3,51,44, 1,82,86, 3,51,49, + 2,64,38, 2,64,40, 3,54,84, 3,54,85, 1,86, 4, 2,64,39, 1,86, 5, 2,64,37, + 2,64,36, 4,62,24, 2,68,35, 2,68,34, 1,87,71, 2,68,36, 2,71,75, 1,89,39, + 2,71,74, 2,71,71, 1,89,38, 2,71,72, 2,71,73, 0, 0, 0, 2,74,54, 2,74,55, + 1,90,48, 3,61,47, 1,91,31, 3,61,44, 3,61,46, 2,76,60, 3,62,82, 3,62,81, + 1,91,29, 1,91,30, 2,76,61, 3,70,78, 3,63,81, 1,91,94, 1,92, 1, 2,78,32, + 3,63,82, 3,64,57, 1,92,80, 2,80,61, 1,92,82, 3,65, 6, 2,80,60, 2,80,62, + 1,92,81, 2,81,38, 4,77,68, 2,81,91, 0, 0, 0, 3,70,79, 0, 0, 0, 0, 0, 0, + 3,66,37, 3,10,94, 1,47,69, 0, 0, 0, 0, 0, 0, 3,37,41, 1,71,60, 4,40,21, + 2,47, 6, 3,42,44, 2,53,57, 1,82,90, 1,82,91, 3,57,47, 1,47,70, 3,32, 1, + 1,79,74, 1,89,40, 1,51,82, 3,11, 1, 3,42,46, 0, 0, 0, 1,82,92, 3,62,83, + 1,92,46, 1,51,83, 2,26,17, 4,27,87, 2,33,46, 3,32, 4, 2,33,48, 3,32, 2, + 2,33,47, 0, 0, 0, 2,40,67, 2,40,64, 1,71,61, 6,58, 4, 1,71,62, 2,40,65, + 2,40,66, 3,37,43, 2,47, 8, 2,47,13, 1,75,71, 2,47, 7, 2,47, 9, 2,47,16, + 2,47,11, 2,47,15, 2,47,12, 2,47,10, 2,47,14, 1,75,72, 0, 0, 0, 3,47,66, + 2,53,60, 3,47,67, 2,53,58, 1,79,76, 3,47,68, 1,79,75, 2,53,59, 1,79,77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,51,51, 2,59,66, 4,52,63, 4,52,71, 2,59,65, + 1,82,93, 2,59,64, 2,64,41, 3,54,90, 2,64,43, 2,64,45, 2,64,44, 3,54,91, + 1,86, 6, 2,64,42, 2,68,43, 1,87,72, 2,68,41, 2,68,44, 1,87,73, 4,62,35, + 2,68,39, 3,57,48, 2,68,42, 2,68,40, 2,68,37, 1,87,74, 2,68,38, 0, 0, 0, + 4,65,92, 3,59,63, 3,59,61, 2,71,76, 3,59,62, 3,59,64, 2,71,78, 2,71,77, + 3,61,48, 2,74,56, 3,61,49, 2,74,57, 4,71,81, 3,62,85, 3,62,84, 2,76,62, + 3,63,83, 1,92, 3, 4,73,62, 1,92, 2, 2,79,61, 2,79,62, 1,92,83, 2,80,63, + 3,65, 8, 1,93,22, 3,66,27, 1,51,84, 1,66,89, 2,47,18, 2,47,17, 2,53,62, + 2,53,61, 4,46,55, 3,51,53, 1,86, 7, 2,64,47, 2,64,46, 2,68,47, 2,68,45, + 2,68,48, 2,68,46, 3,57,49, 4,69, 9, 1,89,41, 2,71,79, 2,71,80, 2,71,81, + 4,69, 7, 2,76,63, 3,62,86, 2,78,33, 3,65, 9, 2,80,64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,51,85, 3,37,47, 3,47,69, + 2,59,67, 2,64,48, 3,59,65, 1,51,86, 4,33,67, 3,37,48, 1,75,73, 4,40,38, + 2,59,68, 1,87,75, 2,68,49, 1,89,42, 3,61,51, 2,74,58, 2,74,59, 1,91,32, + /* plane 0, page 152 */ + 0, 255, /* first, last */ + 2,79,63, 1,51,87, 1,62, 1, 1,62, 2, 2,26,18, 1,66,90, 1,66,91, 2,33,49, + 1,66,92, 4,33,72, 1,71,66, 3,37,50, 1,71,68, 2,40,69, 2,40,70, 2,40,68, + 1,71,63, 1,71,64, 1,71,67, 1,71,65, 3,42,52, 3,42,53, 2,47,19, 1,75,74, + 1,75,75, 3,42,50, 3,42,54, 2,53,69, 1,79,80, 2,53,64, 2,53,63, 3,47,73, + 2,53,68, 1,79,78, 3,47,71, 4,46,58, 1,83, 6, 4,52,80, 2,53,65, 2,53,70, + 2,53,67, 2,53,66, 3,47,70, 1,79,79, 0, 0, 0, 1,83, 4, 3,51,60, 2,59,70, + 1,82,94, 3,51,57, 2,59,71, 3,51,58, 3,50, 8, 2,59,69, 3,51,56, 1,83, 3, + 1,83, 1, 1,83, 5, 3,51,61, 1,83, 2, 3,51,59, 3,51,63, 4,62,47, 3,57,59, + 3,55, 6, 2,64,49, 4,57,80, 2,64,54, 2,64,50, 2,64,53, 1,86, 8, 3,55, 8, + 2,62,33, 2,64,52, 2,64,51, 3,57,57, 1,87,78, 1,87,76, 1,87,79, 1,87,77, + 2,68,50, 2,68,51, 2,68,52, 1,87,80, 3,57,54, 3,57,56, 3,59,69, 2,71,85, + 1,89,44, 2,71,83, 4,66,16, 1,89,45, 2,71,82, 2,71,84, 1,89,43, 2,74,63, + 2,74,60, 4,69,12, 2,74,61, 2,74,62, 2,76,64, 1,91,34, 3,62,88, 1,91,33, + 3,62,87, 2,78,35, 2,78,34, 1,92, 4, 3,64,61, 3,64,62, 3,64,60, 1,92,47, + 1,92,84, 1,93,13, 2,81,39, 2,81,92, 2,81,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,51,88, 2,33,50, 0, 0, 0, 4,33,81, 2,40,71, 2,47,20, 2,47,21, 1,75,76, + 4,40,55, 1,75,77, 2,53,71, 1,79,81, 0, 0, 0, 3,51,65, 1,86, 9, 3,55,10, + 2,68,53, 3,57,60, 1,87,81, 2,71,88, 1,89,46, 2,71,87, 2,71,89, 2,71,86, + 2,76,67, 2,74,64, 2,74,65, 3,61,54, 1,90,49, 0, 0, 0, 2,76,66, 3,62,91, + 3,62,89, 2,76,65, 3,62,90, 2,78,36, 2,81,94, 3,66, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,51,89, 3,62,92, 3,66, 6, 0, 0, 0, 1,51,90, + 0, 0, 0, 3,25,71, 1,56,74, 2,19,43, 3,70,80, 2,26,19, 3,25,72, 1,66,93, + 0, 0, 0, 1,67, 2, 1,66,94, 2,33,51, 3,37,59, 1,67, 4, 0, 0, 0, 1,67, 1, + 3,32,11, 3,37,60, 1,67, 3, 3,37,52, 1,71,70, 3,37,57, 2,40,72, 3,37,55, + 3,42,61, 2,40,73, 2,53,73, 4,33,91, 1,71,69, 1,71,71, 1,71,72, 3,37,56, + /* plane 0, page 153 */ + 0, 255, /* first, last */ + 2,47,23, 3,42,62, 2,47,22, 1,75,78, 5,43,44, 1,75,79, 3,42,59, 2,47,24, + 2,53,72, 1,75,81, 1,79,82, 4,46,67, 1,75,80, 0, 0, 0, 3,70,90, 0, 0, 0, + 1,83, 7, 2,53,74, 1,79,84, 1,79,83, 2,53,75, 2,53,78, 2,53,76, 2,53,77, + 1,79,85, 3,47,75, 1,83,12, 1,83,10, 3,51,69, 3,51,70, 1,83, 9, 2,59,73, + 3,51,68, 1,83,11, 3,51,66, 3,51,67, 2,59,72, 2,64,55, 4,52,94, 2,59,74, + 1,83, 8, 2,59,75, 2,64,58, 2,64,56, 2,64,57, 2,64,62, 1,87,85, 2,64,61, + 2,64,64, 2,64,63, 2,64,60, 2,64,59, 4,53, 1, 1,86,10, 3,57,66, 4,58, 9, + 3,57,65, 3,57,70, 2,68,56, 3,57,69, 2,68,55, 1,87,84, 1,87,82, 1,87,83, + 3,57,67, 2,68,54, 3,70,81, 2,71,92, 3,59,73, 1,89,47, 4,66,24, 2,71,91, + 2,71,90, 1,89,48, 4,69,26, 2,74,70, 2,74,69, 3,61,56, 2,74,67, 3,62,94, + 2,74,66, 1,90,51, 1,90,50, 2,74,71, 2,78,37, 1,92, 5, 2,76,69, 1,91,35, + 2,76,68, 2,74,68, 3,63,88, 2,78,38, 1,92,48, 3,65,10, 1,93,14, 2,81,40, + 4,78, 4, 2,82, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,51,91, 2,26,20, + 2,64,65, 1,51,92, 3,37,63, 5,43,46, 2,47,26, 2,47,25, 2,59,76, 5,58, 6, + 3,51,72, 2,64,67, 3,55,16, 2,64,66, 3,57,71, 1,87,86, 2,71,93, 2,71,94, + 1,90,52, 3,63, 1, 3,64,64, 2,82, 2, 1,56,75, 1,67, 6, 1,67, 5, 2,40,74, + 2,40,76, 1,71,74, 2,40,75, 1,71,73, 1,71,75, 2,40,77, 3,42,67, 3,42,66, + 3,42,70, 2,47,28, 2,47,30, 2,47,29, 3,42,65, 2,47,32, 3,42,64, 3,42,76, + 3,42,68, 1,75,82, 2,47,31, 2,47,27, 3,42,74, 0, 0, 0, 4,40,64, 2,47,33, + 3,47,83, 2,53,85, 3,47,77, 2,53,88, 2,53,90, 2,53,80, 2,53,84, 2,53,81, + 1,79,87, 1,79,90, 1,79,92, 2,53,82, 2,53,83, 1,79,91, 2,53,86, 2,53,89, + 2,53,87, 1,79,93, 3,47,78, 1,79,89, 2,53,79, 1,79,86, 3,47,82, 1,79,88, + 3,47,84, 3,51,80, 1,83,14, 2,59,82, 2,59,80, 2,59,79, 3,51,81, 2,59,85, + 3,51,75, 2,59,84, 2,59,83, 3,51,76, 2,59,78, 1,83,13, 2,59,77, 3,51,74, + 2,59,81, 1,83,15, 0, 0, 0, 3,55,20, 2,64,70, 3,55,23, 2,64,74, 2,64,71, + 2,64,73, 2,64,72, 2,64,69, 2,64,75, 2,64,78, 2,64,76, 2,64,77, 1,86,12, + /* plane 0, page 154 */ + 0, 255, /* first, last */ + 3,55,19, 1,86,11, 2,64,68, 2,64,79, 2,68,61, 2,68,64, 2,68,66, 2,68,65, + 3,57,74, 2,68,59, 2,68,63, 2,68,58, 3,57,75, 2,68,60, 1,87,87, 2,68,57, + 3,57,77, 2,68,62, 0, 0, 0, 0, 0, 0, 2,72,13, 2,72, 2, 1,89,49, 3,59,79, + 3,59,77, 1,89,50, 2,72, 1, 2,72, 6, 2,72,12, 2,72, 4, 2,72,11, 3,59,76, + 2,72, 8, 3,59,78, 2,72, 7, 2,72,10, 2,72, 5, 2,72, 3, 3,59,75, 2,72, 9, + 0, 0, 0, 2,74,78, 2,74,76, 1,90,53, 2,74,75, 2,74,81, 2,74,79, 3,61,58, + 1,90,54, 2,74,74, 2,74,72, 4,69,38, 2,74,73, 1,90,56, 2,74,77, 1,90,55, + 2,74,80, 2,76,70, 2,76,76, 3,63, 4, 3,63, 2, 2,76,71, 1,91,39, 2,76,77, + 1,91,38, 2,76,75, 2,76,74, 1,91,37, 2,76,73, 1,91,36, 2,76,72, 7,54,49, + 2,78,44, 2,78,46, 2,78,45, 4,73,74, 2,78,42, 1,92, 7, 2,78,39, 2,78,43, + 2,78,48, 3,63,89, 2,78,47, 2,78,40, 2,78,41, 1,92, 6, 2,79,64, 1,92,51, + 3,64,66, 2,79,65, 1,92,49, 1,92,50, 3,64,65, 4,76,29, 2,80,65, 1,92,85, + 2,81,69, 3,65,82, 1,93,23, 3,65,83, 2,82, 3, 1,93,24, 2,82, 4, 2,82, 5, + 2,82,19, 2,82,18, 1,93,39, 2,82,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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,56,76, 3,32,15, 4,34, 1, 2,40,79, 4,33,93, 2,40,78, 4,33,94, 1,75,83, + 1,75,84, 2,47,34, 4,46,84, 2,53,91, 2,59,88, 3,47,87, 3,47,86, 1,79,94, + 1,83,16, 2,59,86, 4,53,17, 2,59,89, 1,83,17, 3,55,26, 2,64,80, 2,59,87, + 2,68,67, 1,87,88, 2,72,14, 4,66,41, 3,61,65, 0, 0, 0, 2,74,84, 2,74,82, + 3,61,64, 3,61,62, 2,74,83, 0, 0, 0, 0, 0, 0, 2,76,78, 3,63, 5, 1,91,40, + 2,78,49, 1,92,54, 1,92, 8, 1,92,52, 1,92,53, 2,80,66, 1,93,15, 3,65,84, + 1,56,77, 4,22,13, 3,42,78, 4,46,89, 2,68,68, 3,63,91, 3,64,67, 2,19,44, + 3,32,18, 1,71,76, 3,37,65, 2,47,35, 3,42,79, 3,42,83, 1,75,85, 2,47,36, + 3,42,81, 3,42,80, 3,42,82, 2,53,93, 2,53,92, 1,83,19, 1,80, 1, 1,80, 2, + 4,47, 1, 2,54, 2, 2,54, 1, 2,53,94, 3,47,89, 3,51,85, 2,59,90, 2,59,93, + 3,51,84, 2,59,92, 2,59,91, 1,83,18, 2,64,84, 2,64,82, 2,64,81, 4,58,23, + /* plane 0, page 155 */ + 0, 255, /* first, last */ + 3,55,27, 2,64,83, 3,55,28, 1,87,89, 2,68,70, 2,68,71, 1,87,90, 3,57,79, + 2,68,69, 3,59,81, 2,72,16, 2,72,15, 2,72,18, 1,89,51, 2,72,17, 4,66,47, + 2,74,85, 2,74,87, 2,74,86, 0, 0, 0, 3,63, 7, 2,76,79, 2,76,82, 2,76,80, + 2,76,81, 2,78,50, 1,92, 9, 4,73,84, 4,73,81, 3,70,82, 2,79,66, 2,79,67, + 2,79,68, 3,65,12, 1,92,86, 1,93,16, 2,82, 6, 1,56,78, 3,42,85, 1,80, 3, + 1,83,20, 2,68,72, 3,61,66, 2,78,51, 3,65,14, 4,77,23, 2,81,70, 2,19,45, + 3,66, 8, 1,93,40, 1,56,79, 2,59,94, 3,55,30, 2,68,73, 0, 0, 0, 2,72,19, + 3,61,67, 4,72,22, 2,76,83, 2,78,52, 1,56,80, 3,37,66, 2,47,37, 2,47,38, + 3,42,88, 1,75,86, 1,75,87, 2,54, 4, 1,80, 5, 1,80, 4, 2,54, 3, 0, 0, 0, + 2,64,85, 3,55,31, 2,68,74, 2,68,76, 2,68,75, 1,87,93, 1,87,92, 1,87,91, + 3,61,68, 1,91,42, 2,76,84, 3,63, 8, 1,91,41, 2,78,54, 2,78,53, 3,65,15, + 1,92,87, 2,80,67, 1,62, 3, 2,40,80, 4,34, 9, 3,37,67, 0, 0, 0, 2,47,41, + 2,47,39, 2,47,40, 4,40,75, 3,47,94, 2,54,13, 4,47,16, 2,54, 8, 2,54, 5, + 2,54,12, 3,47,92, 4,47,21, 3,47,91, 2,54,14, 4,47,23, 4,47,12, 1,80, 7, + 2,54,11, 2,54, 7, 3,47,93, 4,47,10, 2,54, 6, 2,54,10, 2,54, 9, 1,80, 6, + 0, 0, 0,15,51,30, 2,60,11, 2,60, 6, 2,60, 4, 2,60,13, 2,60, 5, 4,53,39, + 2,60, 1, 4,53,35, 2,60, 7, 3,51,88, 3,51,90, 2,60, 2, 2,64,94, 2,60, 3, + 2,60,14, 3,52, 3, 4,53,37, 3,51,92, 3,52, 1, 5,58,42, 3,52, 5, 3,51,93, + 2,60,10, 1,83,21, 2,60, 9, 2,60, 8, 3,51,89, 2,60,12,15,57,24, 0, 0, 0, + 3,70,83, 3,55,36, 2,64,86, 2,64,89, 4,58,41, 3,55,37, 2,64,88, 3,55,32, + 2,65, 2, 2,64,91, 2,65, 1, 3,55,34, 2,64,93, 2,64,92, 2,64,90, 4,58,33, + 2,64,87, 4,58,31, 1,86,15, 1,86,14, 4,58,36, 1,86,16, 1,86,13, 2,65, 3, + 4,58,37,15,61,86, 0, 0, 0, 4,58,35, 0, 0, 0, 2,68,82, 2,68,85, 4,63, 6, + 2,68,83, 2,68,87, 5,70,89, 3,57,84, 4,63, 2, 2,68,88, 4,63,10, 2,68,80, + 1,88, 4, 2,68,81, 3,57,83, 2,68,79, 2,68,86, 3,59,84, 2,68,78, 2,68,77, + 1,88, 3, 1,88, 1, 1,87,94, 3,57,86, 3,57,85, 3,55,35, 0, 0, 0,15,65,82, + 0, 0, 0, 0, 0, 0, 3,57,81, 2,68,84, 2,72,28, 2,72,34, 1,89,54, 2,72,29, + 5,75,19, 2,72,32, 2,72,36, 1,89,55, 2,72,31, 4,66,60, 2,72,23, 3,59,85, + 2,72,22, 2,72,35, 2,72,26, 3,59,87, 2,72,24, 2,72,33, 2,72,25, 1,89,53, + 1,89,52, 3,59,89, 2,72,20, 2,72,21, 2,72,30, 4,66,70, 3,59,90, 4,66,72, + 2,72,27, 0, 0, 0, 0, 0, 0,15,68,75, 4,66,53, 0, 0, 0, 3,61,79, 2,74,90, + 2,74,93, 3,61,81, 4,66,54, 3,61,71, 3,61,73, 1,88, 2, 3,61,74, 3,61,84, + /* plane 0, page 156 */ + 0, 255, /* first, last */ + 3,61,85, 4,69,58, 3,61,78, 4,69,57, 3,61,72, 2,74,91, 2,75, 3, 2,75, 1, + 2,74,89, 2,75, 6, 3,61,70, 2,74,88, 3,61,86, 1,90,58, 2,75, 2, 4,69,52, + 3,61,83, 4,69,55, 2,74,92, 1,90,57, 2,75, 5, 3,61,82, 4,69,61, 2,75, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,61,80, 2,76,87, 2,76,86, 5,82,49, 3,63,12, + 5,82,43, 2,76,93, 5,82,46, 2,76,89, 2,76,92, 1,91,44, 4,72,27, 4,72,30, + 2,76,90, 2,76,91, 4,72,25, 2,76,85, 2,76,88, 1,91,43, 3,63,10,15,73,10, + 0, 0, 0, 1,92,11, 2,78,65, 2,78,60, 2,78,64, 3,64, 5, 2,78,67, 2,78,63, + 3,63,94, 2,78,59, 3,64, 3, 1,92,13, 2,78,62, 2,78,66, 1,92,12, 2,78,57, + 2,74,94, 2,78,61, 4,74, 3, 5,85,13, 2,78,58, 3,64, 2, 2,78,55,15,74,30, + 2,78,56, 1,92,10, 2,79,72, 2,79,74, 2,79,77, 2,79,73, 2,79,78, 3,64,69, + 2,79,71, 3,64,70, 2,79,69, 3,64,72, 1,92,55, 2,79,75, 1,92,57, 1,92,56, + 2,79,70, 2,79,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,65,18, 2,80,72, 1,92,88, + 2,80,73, 3,65,19, 2,80,71, 2,80,68, 4,76,42, 3,65,20, 2,80,70, 2,80,69, + 2,81,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,65,57, 2,81,43, 2,81,42, 3,65,59, + 0, 0, 0, 2,81,73, 5,90,51, 2,81,72, 2,81,71, 2,81,74, 3,65,85, 1,93,32, + 1,93,33, 2,82,24, 2,82,28, 3,66,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,62, 4, 2,33,52, 2,40,83, + 3,37,68, 1,71,77, 2,40,81, 3,37,70, 3,15,34, 2,40,82, 3,37,72, 3,37,71, + 0, 0, 0, 2,47,42, 2,47,43, 1,75,90, 1,75,88, 2,47,44, 1,75,89, 2,54,19, + 3,48, 7, 2,54,22, 2,54,16, 2,54,23, 2,54,15, 2,54,17, 3,48,10, 2,54,18, + /* plane 0, page 157 */ + 0, 255, /* first, last */ + 2,54,21, 3,48, 4, 3,48,11, 1,80,10, 2,54,26, 2,54,25, 1,80, 8, 2,54,20, + 2,54,24, 1,80, 9, 3,52,13, 4,47,34, 3,48, 5, 3,48, 2, 0, 0, 0, 3,52,10, + 2,60,24, 4,53,50, 1,83,26, 3,52,12, 2,60,19, 1,83,22, 3,52,22, 2,60,16, + 2,60,22, 2,60,25, 3,52,19, 1,83,27, 4,58,46, 2,60,21, 2,60,18, 2,60,26, + 2,60,17, 3,52,23, 2,60,23, 1,83,23, 3,52, 9, 2,60,15, 1,83,24, 3,52,21, + 1,83,25, 2,60,20, 3,52,18, 0, 0, 0, 0, 0, 0, 2,65,21, 2,65, 8, 2,65, 9, + 2,65,12, 2,65,10, 4,58,53, 2,65, 4, 4,58,54, 3,55,45, 2,65, 7, 2,65,17, + 2,65,11, 3,55,40, 4,58,47, 1,86,17, 4,58,45, 2,65,19, 2,65,16, 1,86,18, + 2,65,18, 2,65, 5, 2,65,14, 2,65,15, 3,55,42, 2,65,13, 0, 0, 0,15,62, 4, + 0, 0, 0, 3,70,85, 2,68,92, 2,68,94, 2,69, 3, 3,57,89, 3,57,91, 2,68,91, + 3,57,93, 1,88, 5, 2,69, 5, 2,68,90, 2,69, 6, 3,57,94, 2,69, 2, 2,69, 4, + 2,69, 8, 2,69, 1, 2,69, 9, 2,68,93, 2,68,89, 1,88, 6, 3,58, 2, 2,69, 7, + 1,88, 7, 1,89,57, 4,63,20, 3,57,90,15,65,87, 0, 0, 0, 3,59,93, 2,65, 6, + 2,72,62, 2,72,53, 1,89,59, 2,72,49, 1,89,60, 3,60, 7, 3,60, 2, 2,72,58, + 2,72,52, 2,72,42, 1,89,58, 2,72,55, 2,72,50, 2,72,51, 3,60, 5, 2,72,37, + 2,72,44, 2,72,59, 3,59,94, 2,72,56, 5,75,31, 2,72,48, 3,60, 6, 2,72,60, + 2,72,43, 2,72,38, 2,72,57, 3,60, 4, 2,72,40, 2,72,54, 2,72,45, 2,72,61, + 2,72,41, 1,89,56, 2,72,39, 2,72,46, 2,72,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2,75,13, 3,60, 3, 2,75,11, 4,69,73, 2,75,16, 3,61,89, 2,75,28, 2,75,19, + 2,75,12, 2,75, 8, 2,75,21, 2,75,14, 2,75,17, 2,75,10, 2,75,24, 2,75, 7, + 2,75,15, 2,75,20, 2,75,22, 2,75,25, 2,75, 9, 3,61,90, 2,75,29, 2,75,30, + 2,75,23, 2,75,27, 2,75,18, 0, 0, 0, 2,77,15, 2,77,18, 3,63,21, 1,91,45, + 3,63,17, 2,77,17, 2,77,22, 2,77,20, 1,91,46, 2,77,11, 2,77, 1, 2,76,94, + 1,91,48, 2,77,13, 2,77,14, 2,77,10, 2,77, 2, 3,63,18, 2,77, 7, 2,75,26, + 4,72,35, 2,77, 3, 1,91,47, 2,77, 9, 3,63,22, 2,77, 8, 0, 0, 0, 2,77, 4, + 2,77,16, 4,72,36, 2,77, 5, 2,78,72, 2,77,19, 2,77,21, 2,77,12, 2,77, 6, + 2,78,73, 2,78,75, 2,78,69, 1,92,14, 4,74, 5, 2,78,82, 2,78,80, 1,92,15, + 2,78,79, 2,78,78, 2,78,71, 2,78,68, 2,78,74, 2,78,83, 2,78,70, 2,78,76, + 5,85,37, 2,79,87, 2,79,92, 2,79,82, 2,79,85, 1,92,58, 2,79,89, 4,75,38, + 2,80, 2, 2,78,77, 4,75,42, 2,79,83, 2,79,93, 2,80, 3, 2,79,88, 2,79,81, + 2,79,91, 4,75,43, 2,79,90, 2,80, 1, 2,79,94, 2,78,81, 2,79,86, 2,79,80, + 2,79,84, 1,92,89, 1,92,90, 2,79,79, 3,64,76, 2,80,84, 2,80,75, 2,80,83, + /* plane 0, page 158 */ + 0, 255, /* first, last */ + 2,80,80, 2,80,81, 2,80,74, 2,80,77, 2,80,85, 2,80,79, 2,80,78, 2,80,76, + 3,65,21, 2,80,82, 4,76,54, 2,81,44, 4,77,26, 2,81,45, 3,65,61, 2,81,47, + 2,81,46, 2,81,49, 2,81,48, 2,81,76, 2,81,75, 2,82, 7, 3,66, 9, 2,82, 8, + 3,66,16, 2,82,20, 1,93,37, 1,93,41, 3,66,24, 2,82,29, 1,93,42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,62, 5, 4,47,40, 5,58,59, + 0, 0, 0, 1,90,59, 2,77,23, 3,63,23, 1,92,91, 1,92,92, 0, 0, 0, 1,62, 6, + 2,40,84, 3,37,73, 1,71,78, 2,54,27, 3,48,12, 3,52,25, 2,60,28, 2,60,29, + 2,60,27, 2,65,23, 2,65,22, 1,86,19, 2,69,11, 2,65,24, 2,69,10, 4,63,26, + 3,58, 4, 2,72,64, 1,89,61, 1,89,63, 2,72,63, 3,60, 9, 4,66,85, 1,89,62, + 3,62, 1, 2,75,31, 2,75,33, 2,75,32, 2,77,24, 1,91,49, 3,63,26, 1,92,59, + 2,80,86, 2,81,50, 3,66,17, 3,66,31, 2,82,33, 1,62, 7, 3, 5,39, 2,47,45, + 4,47,44, 1,80,11, 3,48,15, 3,48,14, 3,52,26, 2,60,31, 2,60,30, 3,55,48, + 2,65,25, 3,58, 6, 3,58, 5, 4,66,94, 1,89,64, 1,90,60, 2,78,84, 2,82,25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,62, 8, 1,75,91, 3,43, 2, 1,80,12,15,65,92, + 2,72,65, 3,62, 2, 2,80, 4, 1,67, 7, 3,25,74, 3,52,28, 3,52,27, 4,58,61, + 2,65,26, 0, 0, 0, 3,58, 8, 4,63,30, 1,93,17, 1,67, 8, 1,80,13, 1,86,20, + 2,80, 5, 1,67, 9, 3,25,75, 2,54,28, 1,83,29, 2,60,32, 2,60,33, 3,52,29, + 1,83,28, 4,53,64, 2,65,27, 1,86,24, 1,86,22, 1,86,23, 1,86,21, 2,69,12, + 1,88, 8, 0, 0, 0, 4,67, 4, 3,60,10, 2,75,35, 2,75,34, 2,75,37, 2,75,36, + 1,90,61, 0, 0, 0, 0, 0, 0, 2,77,25, 4,72,54, 2,77,27, 2,77,26, 1,91,50, + 2,78,85, 3,64, 9, 2,80, 6, 2,80, 7, 1,92,60, 2,81,51, 2,81,77, 1,93,34, + 4,78,35, 2,33,53, 2,60,34, 2,65,28, 2,72,66, 2,40,85, 3, 7,82, 2,65,29, + /* plane 0, page 159 */ + 0, 165, /* first, last */ + 2,69,14, 2,69,13, 3,58, 9, 3,60,13, 3,60,14, 3,63,28, 2,80, 8, 1,92,93, + 3,65,63, 2,81,52, 2,81,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,71,79, 2,54,29, + 2,54,30, 4,47,54, 2,60,35, 1,71,80, 3,37,74, 1,88, 9, 2,69,15, 3,60,16, + 2,77,29, 1,91,51, 2,77,30, 2,77,28, 2,80, 9, 3,65,64, 2,80,87, 4,77,40, + 1,71,81, 0, 0, 0, 2,65,32, 2,65,31, 2,65,30, 2,69,16, 3,58,11, 3,58,10, + 2,69,20, 2,69,19, 2,69,18, 2,69,17, 1,88,10, 2,72,67, 2,75,39, 1,90,62, + 2,75,38, 2,77,31, 2,78,88, 2,78,87, 1,92,16, 2,78,86, 2,80,12, 2,80,11, + 2,80,10, 3,64,77, 4,78,36, 1,75,92, 4,53,67, 2,60,36, 1,86,25, 4,58,68, + 2,72,68, 2,72,69, 2,78,89, 2,80,13, 4,75,60, 3,65,27, 2,80,88, 2,81,53, + 2,82, 9, 2,82,35, 1,75,93, 1,86,26, 2,69,21, 2,72,70, 2,77,32, 2,80,14, + 3, 3,80, 0, 0, 0, 1,80,15, 3,52,30, 2,65,33, 2,69,22, 2,72,71, 2,72,72, + 2,72,73, 2,75,44, 3,62, 4, 2,75,40, 1,91,52, 2,75,43, 2,75,42, 1,90,63, + 2,75,41, 1,90,65, 0, 0, 0, 1,90,64, 2,77,34, 2,77,33, 1,91,53, 1,91,54, + 4,72,64, 3,63,30, 1,92,18, 2,78,90, 1,92,17, 4,75,65, 2,80,17, 2,80,18, + 2,80,16, 2,80,15, 1,93, 1, 4,76,68, 2,80,89, 2,80,90, 2,80,91, 1,92,94, + 2,81,54, 2,81,57, 2,81,56, 2,81,55, 3,66,19, 4,78,37, 2,82,34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,83,30, 3,55,53, 4,67,13, + 1,88,18, 2,75,45, 2,77,35, 3,64,11, 1,92,19, 2,78,91, 4,78,53, 3,66,34, + 2,82,36,15, 1,57, 0, 0, 0, 0, 0, 0, 1,83,31, 3,62,39, 4,78,19, 0, 0, 0, + 2,65,34, 3,63,31, 2,78,92, 3,65,65, 2,81,79, 3,65,87, + /* plane 0, page 160: --- */ + /* plane 0, page 161: --- */ + /* plane 0, page 162: --- */ + /* plane 0, page 163: --- */ + /* plane 0, page 164: --- */ + /* plane 0, page 165: --- */ + /* plane 0, page 166: --- */ + /* plane 0, page 167: --- */ + /* plane 0, page 168: --- */ + /* plane 0, page 169: --- */ + /* plane 0, page 170: --- */ + /* plane 0, page 171: --- */ + /* plane 0, page 172: --- */ + /* plane 0, page 173: --- */ + /* plane 0, page 174: --- */ + /* plane 0, page 175: --- */ + /* plane 0, page 176: --- */ + /* plane 0, page 177: --- */ + /* plane 0, page 178: --- */ + /* plane 0, page 179: --- */ + /* plane 0, page 180: --- */ + /* plane 0, page 181: --- */ + /* plane 0, page 182: --- */ + /* plane 0, page 183: --- */ + /* plane 0, page 184: --- */ + /* plane 0, page 185: --- */ + /* plane 0, page 186: --- */ + /* plane 0, page 187: --- */ + /* plane 0, page 188: --- */ + /* plane 0, page 189: --- */ + /* plane 0, page 190: --- */ + /* plane 0, page 191: --- */ + /* plane 0, page 192: --- */ + /* plane 0, page 193: --- */ + /* plane 0, page 194: --- */ + /* plane 0, page 195: --- */ + /* plane 0, page 196: --- */ + /* plane 0, page 197: --- */ + /* plane 0, page 198: --- */ + /* plane 0, page 199: --- */ + /* plane 0, page 200: --- */ + /* plane 0, page 201: --- */ + /* plane 0, page 202: --- */ + /* plane 0, page 203: --- */ + /* plane 0, page 204: --- */ + /* plane 0, page 205: --- */ + /* plane 0, page 206: --- */ + /* plane 0, page 207: --- */ + /* plane 0, page 208: --- */ + /* plane 0, page 209: --- */ + /* plane 0, page 210: --- */ + /* plane 0, page 211: --- */ + /* plane 0, page 212: --- */ + /* plane 0, page 213: --- */ + /* plane 0, page 214: --- */ + /* plane 0, page 215: --- */ + /* plane 0, page 216: --- */ + /* plane 0, page 217: --- */ + /* plane 0, page 218: --- */ + /* plane 0, page 219: --- */ + /* plane 0, page 220: --- */ + /* plane 0, page 221: --- */ + /* plane 0, page 222: --- */ + /* plane 0, page 223: --- */ + /* plane 0, page 224: --- */ + /* plane 0, page 225: --- */ + /* plane 0, page 226: --- */ + /* plane 0, page 227: --- */ + /* plane 0, page 228: --- */ + /* plane 0, page 229: --- */ + /* plane 0, page 230: --- */ + /* plane 0, page 231: --- */ + /* plane 0, page 232: --- */ + /* plane 0, page 233: --- */ + /* plane 0, page 234: --- */ + /* plane 0, page 235: --- */ + /* plane 0, page 236: --- */ + /* plane 0, page 237: --- */ + /* plane 0, page 238: --- */ + /* plane 0, page 239: --- */ + /* plane 0, page 240: --- */ + /* plane 0, page 241: --- */ + /* plane 0, page 242: --- */ + /* plane 0, page 243: --- */ + /* plane 0, page 244: --- */ + /* plane 0, page 245: --- */ + /* plane 0, page 246: --- */ + /* plane 0, page 247: --- */ + /* plane 0, page 248: --- */ + /* plane 0, page 249: --- */ + /* plane 0, page 250 */ + 40, 40, /* first, last */ + 15,56,44, + /* plane 0, page 251: --- */ + /* plane 0, page 252: --- */ + /* plane 0, page 253: --- */ + /* plane 0, page 254 */ + 48, 107, /* first, last */ + 1, 1,11, 1, 1,22, 1, 1,24, 0, 0, 0, 0, 0, 0, 1, 1,32, 1, 1,33, 1, 1,36, + 1, 1,37, 1, 1,40, 1, 1,41, 1, 1,44, 1, 1,45, 1, 1,48, 1, 1,49, 1, 1,52, + 1, 1,53, 1, 1,56, 1, 1,57, 1, 1,60, 1, 1,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 7, 1, 2, 8, 1, 2,11, 1, 2,12, 1, 2, 9, 1, 2,10, 0, 0, 0, + 1, 1,14, 1, 1,15, 1, 1,16, 0, 0, 0, 1, 1,18, 1, 1,19, 1, 1,20, 1, 1,21, + 0, 0, 0, 1, 1,62, 1, 1,63, 1, 1,64, 1, 1,65, 1, 1,66, 1, 1,67, 1, 2,13, + 1, 2,14, 1, 2,15, 1, 2,31, 1, 2,32, 1, 2,33, 1, 2,35, 1, 2,34, 0, 0, 0, + 1, 2,66, 1, 2,76, 1, 2,77, 1, 2,78, + /* plane 0, page 255 */ + 1, 229, /* first, last */ + 1, 1,10, 0, 0, 0, 1, 1,76, 1, 2,67, 1, 2,72, 1, 1,77, 0, 0, 0, + 1, 1,30, 1, 1,31, 1, 1,78, 1, 2,16, 1, 1, 2, 1, 2,17, 1, 1, 5, 1, 2,63, + 1, 4, 1, 1, 4, 2, 1, 4, 3, 1, 4, 4, 1, 4, 5, 1, 4, 6, 1, 4, 7, 1, 4, 8, + 1, 4, 9, 1, 4,10, 1, 1, 8, 1, 1, 7, 1, 2,22, 1, 2,24, 1, 2,23, 1, 1, 9, + 1, 2,73, 1, 4,33, 1, 4,34, 1, 4,35, 1, 4,36, 1, 4,37, 1, 4,38, 1, 4,39, + 1, 4,40, 1, 4,41, 1, 4,42, 1, 4,43, 1, 4,44, 1, 4,45, 1, 4,46, 1, 4,47, + 1, 4,48, 1, 4,49, 1, 4,50, 1, 4,51, 1, 4,52, 1, 4,53, 1, 4,54, 1, 4,55, + 1, 4,56, 1, 4,57, 1, 4,58, 0, 0, 0, 1, 2,64, 0, 0, 0, 0, 0, 0, 1, 2, 5, + 0, 0, 0, 1, 4,59, 1, 4,60, 1, 4,61, 1, 4,62, 1, 4,63, 1, 4,64, 1, 4,65, + 1, 4,66, 1, 4,67, 1, 4,68, 1, 4,69, 1, 4,70, 1, 4,71, 1, 4,72, 1, 4,73, + 1, 4,74, 1, 4,75, 1, 4,76, 1, 4,77, 1, 4,78, 1, 4,79, 1, 4,80, 1, 4,81, + 1, 4,82, 1, 4,83, 1, 4,84, 1, 1,34, 1, 2,62, 1, 1,35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2,70, 1, 2,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,68, + /* plane 1: --- */ + /* plane 2, page 0 */ + 0, 254, /* first, last */ + 5, 1, 5, 0, 0, 0,15, 1, 1, 6, 1,15, 6, 1,13, 6, 1,14, 0, 0, 0, 6, 1,34, + 6, 1,35, 5, 1,19, 0, 0, 0, 3, 1,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1,30, + 15, 1,31, 0, 0, 0, 6, 2,11, 0, 0, 0, 5, 1,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 3,32, 6, 3,30, 6, 3,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 4,71, 6, 5,63, 5, 3,15,15, 2,84, 0, 0, 0, 6, 5,71, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 5,67, 0, 0, 0, 0, 0, 0, 6, 9,23, 6, 9,26, 6, 9,24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9, 2,15, 9, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,14,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,16,82, 0, 0, 0, 5,19, 3, 0, 0, 0, 0, 0, 0,15,25,18,15,25,19, + 6,39,13, 0, 0, 0, 0, 0, 0,15,27,83,15,32,21,15,32,85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,39,34,15,45,54, 0, 0, 0, 7, 1, 1,15,57,39, 4,47,92, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 1,12, 6, 1, 2, 0, 0, 0, 6, 2,63, 4, 1,54, 6, 3,33, 6, 5,64, + 0, 0, 0, 6, 9,27, 0, 0, 0, 5, 5, 1, 0, 0, 0, 5, 7,90, 6,14,42,15, 9,48, + 6,21, 5, 6,21, 6, 6,37,93, 0, 0, 0, 6,38,31, 0, 0, 0,15,38,32, 5,36,94, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1,18, 5, 1,13, 6, 2,13, + 0, 0, 0, 0, 0, 0, 6, 3,34,15,13,65, 6,48,48,15,51,36, 4, 1, 1, 5, 1, 6, + 6, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1, 2, 6, 1,19, 0, 0, 0, 6, 1,36, + 0, 0, 0, 0, 0, 0,15, 1, 5,15, 1, 6, 5, 1,46, 6, 2,16, 0, 0, 0,15, 1,37, + 6, 2,46, 6, 2,15,15, 1,32,15, 1,33, 6, 1,37, 0, 0, 0, 6, 2,17, 0, 0, 0, + 6, 2,14, 0, 0, 0, 4, 2, 6, 4, 2, 5, 5, 2, 4, 5, 2, 5, 0, 0, 0, 0, 0, 0, + 6, 3,35, 6, 9,30, 0, 0, 0, 0, 0, 0, 6, 4,61, 0, 0, 0, 6, 5,54, 6, 5,65, + 6, 5,66, 6,12,35, 6, 9,28, 6,26,69,15, 9, 5, 6,13,13, 6, 9,29, 6,14,43, + 0, 0, 0, 5,11,71, 6,21,10, 0, 0, 0, 6,21, 7, 6,25,68, 6,21, 9, 6,28,91, + 0, 0, 0, 0, 0, 0, 6,37,94, 6,38,32, 6,38,33, 0, 0, 0, 5,29,54, 0, 0, 0, + 0, 0, 0, 5, 1, 3, 0, 0, 0, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 6, + 6, 1, 5, 5, 1, 1, 5, 1,11, 0, 0, 0,15, 1, 3, 6, 1,38, 5, 1,20, 0, 0, 0, + 15, 1, 7,15, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2,19, 6, 2,18, + 6, 2,10, 5, 1,47, 0, 0, 0, 0, 0, 0, 6, 3,38, 6, 3,36,15, 1,78, 6, 3,37, + 0, 0, 0, 0, 0, 0,15, 2,85, 0, 0, 0, 0, 0, 0, 6, 9,31, 0, 0, 0, 0, 0, 0, + 6,13,12, 4, 6, 4, 6,14,45, 6,14,46,15, 5,32, 0, 0, 0, 6,14,44, 0, 0, 0, + 6,21,11, 0, 0, 0, 0, 0, 0,15,13,64, 6,28,94, 5,16,83, 6,28,93, + /* plane 2, page 1 */ + 2, 255, /* first, last */ + 15,25,20, 0, 0, 0, 6,48,49, 5,36,53,15,38,33, 6,58,67, + 6,58,66, 7,22,83, 7,38, 7, 7,45,26, 5, 1, 4, 5, 1, 7, 4, 1, 8, 5, 1, 8, + 0, 0, 0, 5, 1,12, 6, 1,39, 6, 1,40, 6, 1,41, 6, 3,39, 5, 3,16, 6, 5,68, + 0, 0, 0, 6, 9,32, 5,16,84, 6,38,34, 0, 0, 0, 7,12,28, 6, 1, 7, 6, 1, 8, + 6, 1, 9, 6, 1,42, 6, 5,69, 6, 3,40, 6, 3,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 5,72, 0, 0, 0,15, 2,86, 0, 0, 0, 4, 5,19, 5, 5, 2, 4, 5,18, 0, 0, 0, + 6,14,48, 5, 7,91,15, 9, 7, 0, 0, 0, 6,16,92, 6,21,13, 0, 0, 0, 6,21,12, + 15,13,66, 6,29, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,45,78, 0, 0, 0, 0, 0, 0, 6, 3,42,15, 1,79,15, 1,80, 0, 0, 0,15, 2,11, + 5, 3,17,15, 2,87,15, 2,88,15, 2,89, 5, 5, 3, 0, 0, 0, 0, 0, 0, 6, 9,33, + 0, 0, 0,15, 5,35, 0, 0, 0, 6,14,50, 6,14,49,15, 9, 8, 6,21,15, 5,12,70, + 4,11,63, 6,21,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,67, 6,21,17, 6,38,35, + 6,29, 3, 6,29, 2, 4,16,36, 5,16,85,15,18,84,15,18,85, 0, 0, 0,15,18,82, + 0, 0, 0, 6,38,37, 6,38,36, 6,38,38, 4,22,15,15,25,21,15,25,22,15,25,23, + 6,44,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,32,22,15,32,23,15,32,24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,34, 0, 0, 0, + 6,48,50, 5,43,81, 7, 1, 2,15,45,55,15,45,56,15,45,57, 7, 6,89, 7, 1, 4, + 0, 0, 0, 7, 1, 3, 7, 1,38, 0, 0, 0, 7,12,31, 0, 0, 0, 5,51,51, 7,12,30, + 0, 0, 0, 0, 0, 0, 7,12,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38, 3, 7,38, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1,20, 6, 1,21,15, 1, 4, 6, 1,44,15, 1, 9, + 6, 1,43, 3, 1,79, 0, 0, 0, 0, 0, 0,15, 1,35, 6, 2,21, 0, 0, 0, 6, 2,20, + 6, 2,22, 0, 0, 0, 4, 1,56, 0, 0, 0, 4, 2,12, 4, 2,11, 4, 2, 9, 6, 3,47, + 4, 2,16, 6, 3,48, 5, 2, 7, 6, 3,45, 6, 3,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 2,15, 6, 3,43,15, 1,83,15, 1,84,15, 1,85,15, 1,86, + 15, 1,87,15, 1,88,15, 1,89, 5, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3,49, + 5, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 3,18, 6, 5,74, 4, 3,26, 6, 5,75, 6, 5,84, 6, 5,80, 6, 5,76,15, 2,90, + 15, 2,91,15, 2,92,15, 2,93,15, 3, 1,15, 3, 2,15, 3, 3,15, 3, 5,15, 3, 8, + 15, 3, 9,15, 3,10,15, 3,11,15, 3,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 3,24, 6, 5,77, 0, 0, 0, 6, 5,79, 0, 0, 0, 0, 0, 0,15, 3, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5,78, 6, 5,73, + /* plane 2, page 2 */ + 0, 255, /* first, last */ + 5, 3,19, 6, 5,83, 0, 0, 0, 6, 9,35, 6, 9,37, 4, 5,26, 5, 5, 8, 6, 9,38, + 5, 5, 9, 3, 7,46, 5, 5,10, 4, 5,23, 4, 5,21, 6, 9,42, 6, 9,36, 6, 9,44, + 6, 9,39, 6, 9,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, 6, 9,34,15, 5,37, + 15, 5,38,15, 5,40,15, 5,41,15, 5,43,15, 5,44,15, 5,45,15, 5,46,15, 5,47, + 15, 5,48,15, 5,49, 6, 9,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9,40, + 6, 9,41, 6, 9,43, 5, 5, 4, 0, 0, 0, 5, 5, 7, 5, 7,92, 6,14,68, 6,14,57, + 5,11,82, 4, 8,22, 6,14,67, 6,14,55, 6,14,54, 5, 8, 3, 4, 8,27, 6,14,61, + 5, 7,94, 5, 7,93, 5, 8, 2, 6,14,66, 6,14,53, 6,14,52, 6,14,69, 6,14,60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9, 9,15, 9,10,15, 9,11,15, 9,12, + 15, 9,14,15, 9,15,15, 9,17,15, 9,18,15, 9,19,15, 9,20,15, 9,21,15, 9,22, + 15, 9,23,15, 9,24, 6,14,51, 0, 0, 0, 6,14,56, 6,14,59, 6,14,62, 0, 0, 0, + 6,14,64, 0, 0, 0, 0, 0, 0,15, 5,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,14,63, 5, 8, 4, 4,11,67, 5,11,80, 4,11,71, 6,21,22, 5,11,75, + 6,21,21, 5,11,84, 4,11,70, 4,11,72, 5,11,79, 6,21,18, 5,11,73, 0, 0, 0, + 0, 0, 0,15,13,68,15,13,78, 6,21,23, 0, 0, 0, 0, 0, 0, 5,11,78,15,13,70, + 15,13,71,15,13,74,15,13,75,15,13,76,15,13,77,15,13,79,15,13,81,15,13,82, + 15,13,83,15,13,84,15,13,85,15,13,86,15,13,88,15,13,89,15,13,90,15,13,91, + 15,13,92, 0, 0, 0, 6,21, 1, 6,21,26, 6,21,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,21,19, 6,21,20, 0, 0, 0, 5,11,72, 0, 0, 0, 6,21,25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,87, 0, 0, 0, + 15,13,80, 0, 0, 0, 5,11,74, 5,11,77, 5,11,85, 5,11,81, 5,11,83, 4,11,64, + 6,29,11, 6,29,13, 6,29,12, 4,16,41, 4,16,40, 6,29,16, 6,29, 8, 0, 0, 0, + 5,17, 1, 6,29,19, 5,16,87, 6,29,14, 6,29, 7, 5,17, 2, 5,16,86, 4,16,38, + 6,29,10, 6,29,17, 6,29,23, 6,29,18, 0, 0, 0, 0, 0, 0, 6,29, 9, 0, 0, 0, + 0, 0, 0, 4,16,43, 6,29,20,15,13,73,15,18,87,15,18,88,15,18,89,15,18,90, + 15,18,91,15,18,92,15,18,94,15,19, 1,15,19, 3,15,19, 4,15,19, 5,15,19, 6, + 15,19, 7, 6,38,23, 6,29,24, 6,30,69, 6,29,25, 6,29,15, 5,16,90, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,35,67, 0, 0, 0, 5,16,93, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,17, 3, 6,29, 4, 6,29, 6, 0, 0, 0,15,18,93, 0, 0, 0, 5,16,89, + 5,16,94, 5,16,88, 6,29, 5, 6,29,22, 5,16,92, 6,38,41, 6,38,47, 5,22,54, + 5,22,49, 6,38,44, 5,22,46, 5,22,50, 5,22,67, 5,22,51, 6,38,40, 5,22,53, + 5,22,48, 6,38,54, 4,22,21, 5,22,52, 6,38,50, 6,38,48, 6,38,43, 6,38,46, + /* plane 2, page 3 */ + 0, 251, /* first, last */ + 6,38,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,18,86, + 6,38,56, 5,22,47, 0, 0, 0, 5,22,55, 6,38,39,15,25,24,15,25,25,15,25,26, + 15,25,27,15,25,28,15,25,29,15,25,30,15,25,31, 0, 0, 0, 0, 0, 0, 6,38,45, + 4,22,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,38,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,38,52, 5,22,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,38,42, 5,20, 1, 6,48,58, 4,34,24, 5,29,58, 5,29,56, 6,48,51, + 5,16,91, 5,29,62, 5,29,60, 6,48,56, 5,29,59, 6,48,63, 6,48,61, 4,28,14, + 0, 0, 0, 6,48,60, 6,48,66, 6,48,53, 4,28,15, 0, 0, 0, 5,29,64, 6,48,52, + 5,29,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,48,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,48,62,15,32,25,15,32,26,15,32,27,15,32,28,15,32,29,15,32,30,15,32,31, + 15,32,32,15,32,33,15,32,34,15,32,35,15,32,36,15,32,37,15,32,38, 0, 0, 0, + 6,48,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,46, 6,48,57, + 0, 0, 0, 0, 0, 0, 6,48,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,38,55, + 5,29,57, 5,29,61, 5,29,63, 4,28,11, 6,48,64, 0, 0, 0, 6,58,81, 5,29,65, + 7, 1,14, 4,34,20, 5,36,54, 6,58,68, 6,58,73, 5,29,66, 6,58,75, 4,34,25, + 6,58,84, 4,34,17, 6,58,85, 6,58,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,58,71, 6,58,86,15,38,35,15,38,36,15,38,37,15,38,38, + 15,38,39,15,38,41,15,38,42,15,38,43,15,38,44,15,38,45,15,38,46,15,38,47, + 15,38,49,15,38,50,15,38,51,15,38,52,15,38,54,15,38,55,15,38,56,15,51,37, + 7, 6,13, 5,36,56, 6,58,87, 6,62,55, 0, 0, 0, 0, 0, 0, 6,58,77, 0, 0, 0, + 0, 0, 0, 6,58,79, 6,58,69,15,38,48, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,53, 0, 0, 0, 4,34,16, 6,58,70, + 6,58,74, 6,58,78, 6,58,80, 4,34,22, 0, 0, 0, 0, 0, 0, 5,31,38, 4,40,94, + 4,40,90, 6,58,76, 7, 1,15, 7, 1,17, 7, 1, 9, 7, 1, 6, 7, 1, 5, 5,43,87, + 4,40,92, 7, 1,11, 7, 1,12, 5,43,83, 7, 1,10, 0, 0, 0, 0, 0, 0, 5,43,89, + 5,43,88, 0, 0, 0, 7, 1, 7, 0, 0, 0,15,45,58,15,45,59,15,45,60,15,45,61, + 15,45,62,15,45,64,15,45,65, 0, 0, 0, 7, 1, 8, 0, 0, 0, 5,43,82, 7, 1,13, + 0, 0, 0, 0, 0, 0,15,45,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,41, 1, 5,43,85, 7, 1,16, 5,43,84, 0, 0, 0, 0, 0, 0, 5,44,37, + 5,51,52, 5,51,58, 7,12,32, 4,47,56, 4,47,63, 5,51,56, 4,47,60, 4,47,62, + 5,51,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,54, 0, 0, 0,15,51,38,15,51,39, + 15,51,40, 0, 0, 0,15,51,41,15,51,42, + /* plane 2, page 4 */ + 0, 253, /* first, last */ + 5,51,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,55, 0, 0, 0, + 7,22,88, 5,43,86, 5,58,79, 5,58,80, 4,53,71, 4,53,70, 7,22,86, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,57,40, 0, 0, 0, 0, 0, 0,15,57,42,15,57,43,15,57,44, + 15,57,46, 0, 0, 0, 7,22,85, 7,22,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,57,41, + 0, 0, 0, 4,53,72, 7,22,84, 7,30,86, 4,58,75, 4,58,73, 4,58,74, 7,30,88, + 7,30,87, 0, 0, 0,15,62,16,15,62,17, 0, 0, 0, 0, 0, 0,15,62,12,15,62,14, + 15,62,15, 7,30,85, 5,65,17, 4,58,76, 0, 0, 0, 5,65,15, 5,65,16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,65,18, 5,71,42, 5,71,46, 4,67,14, 5,71,45, 5,71,47, + 15,65,94,15,66, 1, 7,39,79, 0, 0, 0, 5,71,44, 5,71,43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,73,92, 7,50,85, 7,45,28,15,68,90, + 0, 0, 0, 5,75,75, 7,45,27, 7,45,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,70,15, + 4,70,14, 5,79,72, 7,55,46, 5,75,76,15,71,31,15,71,94, 0, 0, 0, 4,70,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,55,45, 0, 0, 0,15,73,24,15,73,26, + 15,73,25, 5,83,17, 4,74,32, 7,59,37, 0, 0, 0,15,74,43,15,75,33, 5,85,66, + 0, 0, 0, 0, 0, 0, 4,77,50,15,76,41, 0, 0, 0, 0, 0, 0, 6, 1,45, 4, 1,60, + 0, 0, 0, 4, 2,18, 6, 3,51, 6, 3,52, 0, 0, 0, 6, 5,85, 6, 5,87, 6, 5,88, + 5, 3,21, 6, 5,86, 0, 0, 0, 6, 9,49, 6, 9,48, 6, 9,47, 6, 9,51, 0, 0, 0, + 15, 5,51, 0, 0, 0, 6, 9,50,15, 5,50, 6,14,71, 6,14,72, 0, 0, 0, 0, 0, 0, + 5,11,86, 0, 0, 0, 0, 0, 0,15,13,93,15,13,94,15,14, 1, 6,21,28,15,19, 8, + 5,17, 4, 5,17, 5,15,19, 9,15,19,10, 0, 0, 0, 0, 0, 0, 6,38,57,15,25,32, + 15,25,33,15,25,34, 5,22,56,15,25,35,15,32,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,48,67,15,32,40,15,38,57,15,38,58, 0, 0, 0, 5,36,57, 0, 0, 0, 0, 0, 0, + 7, 1,20, 7, 1,18, 5,43,91,15,45,67,15,45,68, 5,43,90, 7, 1,19, 0, 0, 0, + 5,51,60, 7,12,33,15,51,43,15,51,44,15,51,45,15,51,46, 0, 0, 0, 5,58,81, + 0, 0, 0, 0, 0, 0,15,57,47,15,57,48,15,57,49, 0, 0, 0, 7,30,89, 0, 0, 0, + 5,65,19,15,62,18, 0, 0, 0, 7,38, 9, 5,71,48,15,68,91, 5,71,49, 5,75,77, + 0, 0, 0, 0, 0, 0,15,71,33,15,73,27, 0, 0, 0,15,74,44, 0, 0, 0, 5,87,51, + 15,75,34, 0, 0, 0, 0, 0, 0, 6, 1,22, 5, 1,22, 5, 1,21, 0, 0, 0, 6, 2,23, + 6, 3,54, 6, 3,53, 0, 0, 0, 0, 0, 0, 5, 3,22, 6, 5,89, 0, 0, 0, 5, 3,24, + 0, 0, 0, 0, 0, 0, 5, 8, 5, 5, 8, 6, 0, 0, 0, 4,11,74, 6,21,29,15,14, 2, + 15,14, 3, 6,29,26, 0, 0, 0, 6,38,58, 6,48,68, 0, 0, 0, 5,29,67, 4,28,17, + 6,58,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,58,82, + /* plane 2, page 5 */ + 0, 255, /* first, last */ + 6, 1,23, 6, 1,46, 5, 1,23, 6, 1,33, 6, 1,57, 0, 0, 0, 5, 1,48, 6, 3,27, + 4, 2,21, 6, 3,55, 6, 5,92, 6, 5,94, 5, 3,25, 0, 0, 0,15, 3,13, 6, 5,90, + 6, 9,52, 0, 0, 0, 6,14,75, 6,14,73, 0, 0, 0, 5, 8, 7, 6,14,74, 6,14,47, + 6,16,91, 6,21,32, 6,21,31, 6,21,33, 6,21,30, 6,29,27, 0, 0, 0, 6,38,61, + 5,29,68,15,25,36,15,25,37, 0, 0, 0, 0, 0, 0, 6,38,59, 0, 0, 0, 6,38,60, + 5,29,69, 6,48,69,15,32,41,15,32,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,34,26, + 0, 0, 0, 6,58,89, 0, 0, 0,15,52,38,15,51,47,15,51,48, 5,65,20,15,62,19, + 7,38,10, 7,38,11, 0, 0, 0, 0, 0, 0, 4, 1,13, 6, 1,47, 6, 1,49, 0, 0, 0, + 0, 0, 0, 6, 2,25, 4, 1,61, 6, 2,24, 5, 1,50, 0, 0, 0,15, 1,38, 0, 0, 0, + 6, 2,26, 0, 0, 0, 5, 1,49, 6, 3,58, 0, 0, 0, 6, 3,56, 6, 5,39, 0, 0, 0, + 6, 6, 3, 6, 6, 1, 6, 6, 2, 5, 3,26, 6, 8,90, 0, 0, 0, 5, 5,12, 0, 0, 0, + 6, 9,53, 0, 0, 0, 6, 9,54, 6,14,76, 0, 0, 0, 6,21,34, 6,21,35, 5,11,87, + 5,11,88, 0, 0, 0, 6,29,29, 6,38,63, 3,25,87, 6,38,62, 4,28,19, 5,29,70, + 6,58,91, 6,58,90, 0, 0, 0, 0, 0, 0, 7, 1,21, 5,51,61, 7,12,34,15,53,86, + 4,58,77,15,71,34, 7,55,47, 5, 1,24, 0, 0, 0, 6, 2,27,15, 1,40,15, 1,41, + 0, 0, 0, 6, 3,59, 4, 2,23, 5, 2, 9, 0, 0, 0,15, 1,91, 0, 0, 0, 0, 0, 0, + 15, 3,14,15, 3,15, 0, 0, 0, 0, 0, 0, 5, 5,13,15, 5,53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,14,77, 0, 0, 0, 6,29,30,15,14, 5, 0, 0, 0,15,14, 6, + 15,14, 7,15,14, 8,15,14, 9, 5,17, 7, 6,38,64,15,25,39,15,25,40, 6,38,65, + 0, 0, 0,15,26,61, 6,48,70, 0, 0, 0, 6,58,92, 0, 0, 0,15,38,59, 5,46,87, + 7,12,35,15,57,50,15,51,49, 7,30,90, 0, 0, 0, 0, 0, 0, 7,38,12, 7,45,31, + 0, 0, 0, 5,79,73, 0, 0, 0, 5,85,67, 0, 0, 0, 0, 0, 0,15, 1,42, 0, 0, 0, + 0, 0, 0, 6, 3,60,15, 1,93, 0, 0, 0,15, 1,94, 0, 0, 0, 4, 2,24, 5, 3,27, + 6, 6, 4, 4, 3,28,15, 3,16,15, 3,17,15, 3,18,15, 3,19, 0, 0, 0, 0, 0, 0, + 15, 3, 4,15, 2,94, 4, 5,33, 4, 5,34, 6, 9,56, 6, 9,57, 5, 5,15,15, 5,55, + 5, 8, 9, 4, 8,33, 4, 8,34, 5, 8,12, 5, 8, 8, 5, 8,10, 6,14,79, 0, 0, 0, + 0, 0, 0,15, 9,26,15, 9,28,15, 9,29,15, 9,30,15, 9,31, 0, 0, 0, 6,14,78, + 5,11,90, 4,11,75, 5,11,89, 5, 8,11, 6,21,37, 5,11,91,15,14,10, 0, 0, 0, + 0, 0, 0,15,14,11, 6,21,38, 0, 0, 0, 0, 0, 0, 5,17, 8, 6,29,31, 6,29,32, + 4,16,46, 0, 0, 0,15,19,11, 0, 0, 0,15,19,12,15,19,13,15,19,15,15,19,16, + 0, 0, 0, 6,38,66, 5,22,60, 5,22,58, 5,22,59, 5,22,57, 4,22,30,15,19,14, + 0, 0, 0, 0, 0, 0, 5,29,76, 5,29,71, 5,29,73, 5,29,74, 5,29,72, 5,29,75, + /* plane 2, page 6 */ + 0, 255, /* first, last */ + 6,48,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,58,93, 5,44, 1, 5,36,58, 7, 1,23, + 15,38,61,15,38,62, 5,43,94, 5,43,93, 5,43,92, 7, 1,22,15,45,71, 0, 0, 0, + 0, 0, 0,15,51,51, 7,12,37,15,45,70,15,51,50, 0, 0, 0, 4,53,74, 7,12,38, + 5,58,83, 0, 0, 0, 0, 0, 0,15,57,51,15,57,52, 5,65,22, 5,65,21, 5,65,23, + 15,62,20, 7,30,91, 5,71,50, 5,71,51, 7,50,86, 5,83,18, 0, 0, 0, 4, 1, 9, + 0, 0, 0, 6, 1,50, 0, 0, 0,15, 1,10,15, 1,11,15, 1,12,15, 1,14, 6, 1,60, + 15, 1,13, 5, 1,51, 6, 2,29, 4, 1,63, 0, 0, 0, 6, 3,62, 6, 3,61, 6, 3,63, + 6, 3,64, 0, 0, 0,15, 1,43, 0, 0, 0, 6, 6, 7, 6, 6, 5, 6, 6, 6,15, 3,20, + 15, 3,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5,38, 6, 9,58, + 4, 5,36, 6, 9,59, 6, 9,60, 6, 9,61,15, 5,56,15, 5,57, 0, 0, 0, 6,14,82, + 6,14,80, 6,14,81, 6,21,39,15,14,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23, 7, + 6,29,34, 6,29,35, 6,29,33,15,19,17,15,19,18,15,19,19, 0, 0, 0, 6,38,67, + 6,38,70,15,25,41, 6,38,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,42, + 15,38,63,15,38,64,15,38,65,15,45,72, 0, 0, 0, 7,12,39,15,51,52,15,51,53, + 15,51,35,15,57,53,15,62,21,15,71,35, 0, 0, 0, 4, 1,14, 5, 1,25, 6, 1,51, + 6, 1,52, 6, 2,31, 5, 1,52, 6, 2,30, 0, 0, 0,15, 1,44, 6, 3,69, 6, 3,65, + 6, 3,66, 6, 3,67,15, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2,10, 6, 6, 8, + 15, 3,22, 0, 0, 0, 0, 0, 0, 6, 9,64, 0, 0, 0, 6, 9,63, 6,14,83, 6,14,84, + 0, 0, 0, 6,20,90, 6,21,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,29,36, 6,29,37, + 5,22,61, 6,58,94,15,38,66, 7, 1,80, 0, 0, 0, 7,22,91, 5,58,86, 5,71,52, + 0, 0, 0, 7,46,30, 0, 0, 0, 6, 1,25, 0, 0, 0, 4, 1,32, 6, 1,53, 5, 1,26, + 5, 1,27, 6, 1,54, 4, 1,33,15, 1,15, 6, 1,55, 5, 1,53, 5, 1,54, 4, 1,66, + 6, 2,36, 5, 1,55, 6, 2,35, 6, 2,32, 6, 2,37, 0, 0, 0, 0, 0, 0, 4, 2,26, + 6, 3,74, 5, 2,14, 5, 2,12, 5, 2,11, 4, 2,27, 4, 2,25, 6, 3,72, 6, 3,71, + 5, 2,15, 6, 3,75, 6, 3,73, 5, 2,13, 4, 2,29, 0, 0, 0, 0, 0, 0,15, 2, 2, + 15, 2, 3, 4, 2,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3,70, 4, 3,33, 6, 6,11, + 4, 3,35, 5, 3,29, 4, 3,34, 5, 3,38, 5, 3,37, 5, 3,35, 5, 3,32, 6, 6, 9, + 5, 3,31, 5, 3,34, 5, 3,33, 6, 6,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 6,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3,30, 5, 3,36, 6, 9,73, + 5, 5,19, 5, 5,21, 4, 5,41, 4, 5,43, 3, 7,60, 6, 9,70, 4, 5,45, 6, 9,68, + 6, 9,69, 6, 9,76, 6,14,85, 0, 0, 0, 6, 9,74, 5, 5,16, 5, 5,22, 6, 9,75, + 5, 5,18, 6, 9,71, 0, 0, 0, 5, 5,20,15, 5,58,15, 5,59,15, 5,60,15, 5,61, + /* plane 2, page 7 */ + 2, 255, /* first, last */ + 6, 9,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9,66, 6, 9,65, + 0, 0, 0, 5, 5,17, 0, 0, 0, 0, 0, 0, 6, 9,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 8,39, 5, 8,13, 4, 8,37, 6,15, 4, 6,14,91, 6,15, 2, 4, 8,40, 6,15, 1, + 4, 8,36, 4, 8,38, 6,14,88, 6,14,94, 6,15, 3, 6,14,90, 0, 0, 0, 6,14,93, + 6,14,92,15, 9,32,15, 9,33,15, 9,34, 0, 0, 0, 6,14,89, 5, 8,14, 0, 0, 0, + 6,14,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,21,41, 4,11,80, 4,11,77, 5,12, 5, 5,12, 3, 4,11,79, 4,11,83, 6,21,46, + 6,21,50, 5,12, 2, 6,21,51, 4,11,76, 5,12, 6, 6,21,49, 4,11,81, 6,21,48, + 6,21,47, 6,21,44, 6,21,43, 4,11,82, 5,12, 4, 6,21,45, 0, 0, 0, 0, 0, 0, + 15,14,19, 6,21,52,15,14,14,15,14,15,15,14,16,15,14,18, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,14,17, 6,21,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,12, 7, 5,11,93, 5,12, 1, 5,11,94, 0, 0, 0, 4,16,48, 5,17,11, 4,16,49, + 5,17,10, 6,29,38, 4,16,54, 4,22,41, 4,16,53, 6,29,41, 0, 0, 0, 6,29,39, + 5,22,62, 4,16,47, 5,12, 8, 0, 0, 0, 0, 0, 0,15,19,20,15,19,21,15,19,23, + 0, 0, 0, 6,29,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,29,42, 6,29,43, 4,22,35, + 5,22,63, 6,38,77, 6,38,73, 4,22,38, 4,22,39, 5,22,64, 5,22,68, 4,22,42, + 4,22,36, 4,22,33, 4,22,32, 6,38,75, 6,38,72, 6,38,76, 5,22,65, 5,22,66, + 6,38,74,15,25,43,15,25,44,15,25,45,15,25,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,22,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44,38, 6,38,78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,22,69, 4,28,25, 6,48,79, 5,29,83, + 6,48,77, 4,28,21, 5,29,84, 6,48,78, 5,29,77, 4,28,23, 4,28,22, 5,29,78, + 4,28,26, 5,29,79, 6,48,75,15,32,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,48,74, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,48,72, 6,48,80, 6,48,73, 5,29,82, 5,29,81, + 0, 0, 0,15,32,44, 5,36,59, 4,34,27, 6,59, 4, 5,36,65, 6,59, 2, 6,59, 1, + 4,28,24, 4,34,32, 5,36,66, 5,36,60, 5,36,63, 4,34,29, 4,34,36, 6,59,11, + 6,59, 9, 6,59, 8, 5,36,62, 5,44, 2, 6,59, 6, 5,36,61, 6,59,10, 5,36,64, + 6,59, 5,15,38,67,15,38,68,15,38,69, 6,59, 3, 0, 0, 0, 0, 0, 0, 6,59, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44, 3, 5,44, 7, + 4,41, 4, 5,44, 4, 5,44, 6, 7, 1,28, 7, 1,29, 7, 1,26, 7, 1,30, 7, 1,27, + 5,44, 5, 7, 1,24, 0, 0, 0, 7, 2,58, 0, 0, 0, 7, 1,25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,47,64, 7,12,41, 5,58,87, 7,12,42, 7,12,46, 7,12,45, + /* plane 2, page 8 */ + 0, 255, /* first, last */ + 7,12,44, 5,51,63, 5,51,65, 5,51,64, 5,51,62, 7,12,40, 7,12,43, 7, 1,31, + 15,51,54, 0, 0, 0, 0, 0, 0, 5,56,49, 0, 0, 0, 5,58,90, 4,53,75, 5,58,89, + 5,58,88, 0, 0, 0, 7,22,92,15,57,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,53,78, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,30,92, 5,65,24, 5,65,25, 7,22,93,15,62,22, + 5,65,26, 7,38,15, 7,38,14, 7,38,13, 0, 0, 0, 0, 0, 0, 7,45,32, 7,45,33, + 0, 0, 0, 0, 0, 0, 5,79,74, 7,50,87,15,71,36, 0, 0, 0, 5,85,68, 4,75,69, + 7,66,13, 7,66,12, 6, 1,26, 5, 1,28, 6, 1,56, 0, 0, 0, 4, 1,67, 5, 1,57, + 5, 1,56, 5, 2,17, 0, 0, 0, 5, 2,18,15, 2, 5,15, 2, 6,15, 2, 7,15, 2, 8, + 0, 0, 0, 5, 2,19, 6, 6,14, 4, 3,37, 5, 3,39, 0, 0, 0,15, 3,24,15, 3,26, + 15, 3,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,13, 4, 3,41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 5,29, 5, 5,25, 6, 9,77, 5, 5,28, 6, 9,78,15, 5,64,15, 5,65, + 15, 5,66,15, 5,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,16, 4, 8,42, + 6,15, 6, 5, 8,17, 5, 8,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,15, 8, 0, 0, 0, + 15, 9,35,15, 9,36,15, 9,37, 6,21,53, 6,21,57, 4,11,84, 5,12,13, 5,12, 9, + 5,12,11, 5,12,12, 5,12,10, 0, 0, 0,15,14,20,15,14,21, 0, 0, 0, 0, 0, 0, + 6,21,54, 6,21,55, 0, 0, 0, 5,17,13, 6,29,46, 6,29,44, 6,29,47, 6,29,48, + 6,29,49,15,19,24,15,19,25, 0, 0, 0, 6,29,45, 5,22,73, 5,22,70, 5,22,72, + 5,22,75, 5,22,71,15,25,47,15,25,48, 0, 0, 0, 0, 0, 0, 6,38,79, 6,38,80, + 0, 0, 0, 0, 0, 0, 6,38,81, 5,29,86, 5,29,85, 4,28,27, 6,48,82, 6,48,81, + 15,32,45, 5,29,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,34,38, 5,36,70, 5,36,68, 5,36,69, 5,36,73, 4,34,37, 5,36,72, 6,59,14, + 15,38,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,12, 0, 0, 0, 6,59,13, + 5,44,11, 5,44, 8, 4,41, 6, 5,44, 9, 5,44,10, 0, 0, 0, 7,12,47, 5,58,92, + 15,51,55, 5,58,91, 5,58,93, 7,22,94, 7,23, 2, 0, 0, 0, 0, 0, 0, 7,23, 1, + 5,65,28, 7,30,94, 0, 0, 0, 7,31, 1, 5,71,54, 5,71,53, 7,45,34, 5,79,75, + 7,59,38, 5,85,69, 4,76,75, 7,70,27, 5, 1,29, 6, 2,39, 6, 2,40, 5, 2,21, + 0, 0, 0, 5, 2,20, 5, 2,22,15, 2,10, 6, 6,15, 0, 0, 0, 5, 3,40, 5, 3,41, + 4, 5,50, 6, 9,81, 6, 9,80, 0, 0, 0,15, 5,68,15, 5,69, 6,15,10, 4, 8,44, + 6,15,11, 6,15,12,15, 9,38, 6,15, 9, 4,11,86, 6,21,60, 6,21,59, 6,21,62, + 6,21,63, 6,21,58, 6,21,61, 5,12,15, 0, 0, 0, 0, 0, 0, 4,16,61, 6,29,50, + 5,12,14, 5,17,14, 0, 0, 0, 5,17,15, 6,29,51, 4,22,46, 0, 0, 0,15,25,49, + 6,48,83, 4,16,59, 5,29,89,15,32,46,15,32,47, 6,59,15, 4,34,39, 5,36,74, + /* plane 2, page 9 */ + 0, 253, /* first, last */ + 5,36,75,15,38,71, 0, 0, 0,15,45,73, 4,47,69, 7,12,48, 0, 0, 0, 7,12,49, + 7,23, 3, 7,23, 4, 5,58,94, 7,45,35, 0, 0, 0, 0, 0, 0, 6, 1,10, 4, 1,34, + 6, 2,42, 6, 6,16, 6, 6,19, 5, 3,42, 6, 6,17, 6, 6,18, 0, 0, 0, 4, 8,45, + 6,15,15, 6,15,17, 6,15,13, 6,15,14, 6,15,16, 0, 0, 0, 6,29,52, 6,21,64, + 15,14,22,15,14,23, 6,21, 4, 6,38,82,15,25,50, 4,28,29, 0, 0, 0, 0, 0, 0, + 15,38,72, 0, 0, 0, 7,31, 2, 5,77,18, 6, 1,11,15, 1,17, 5, 2,23, 6, 3,78, + 4, 2,35, 6, 3,77, 0, 0, 0, 6, 6,20, 4, 3,42, 6, 6,21,15, 3,28, 0, 0, 0, + 6, 9,83, 5, 5,30, 5, 5,31, 0, 0, 0, 4, 8,47, 0, 0, 0, 6,15,20, 5, 8,19, + 6,15,19, 5, 8,18, 6,15,18, 6,15,23, 6,15,21,15, 9,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,12,16, 6,21,66, 6,21,65, 5,12,17, 0, 0, 0, 6,29,53,15,19,26, + 4,22,47, 6,48,85, 6,38,83, 6,21,67, 0, 0, 0, 0, 0, 0, 5,29,90, 0, 0, 0, + 0, 0, 0, 4,34,40, 6,59,17, 6,59,16, 5,44,12, 5,44,13, 5,44,14, 0, 0, 0, + 0, 0, 0,15,45,74, 5,51,68, 7,23, 5, 0, 0, 0,15,62,23, 4,63,43, 0, 0, 0, + 0, 0, 0, 7,31, 3, 7,45,36, 7,64,73, 7,68,35,15, 1,18, 5, 2,24, 6, 3,79, + 5, 3,44, 6, 6,23,15, 3,29,15, 5,70, 6,15,22, 5, 8,20, 6,21,68,15,38,73, + 7,45,37, 0, 0, 0, 7,55,48, 6, 1,58, 0, 0, 0, 5, 1,58, 5, 1,59, 0, 0, 0, + 6, 2,43, 0, 0, 0, 6, 3,80, 4, 2,36, 0, 0, 0, 4, 2,37, 6, 3,83, 6, 3,82, + 5, 2,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2,25, 6, 3,84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 6,25, 5, 3,45, 6, 6,26, 6, 3,85, 6, 6,27,15, 3,30, 0, 0, 0, + 5, 5,32, 6, 9,84, 6, 9,87, 6, 9,88, 6, 9,86,15, 5,71,15, 5,73,15, 5,74, + 15, 5,75,15, 5,72, 6, 9,85, 6,21,69, 6,21,70,15,14,24,15,14,25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,16,67, 4,16,65, 4,16,66,15,19,27, 0, 0, 0, 0, 0, 0, + 15,25,51,15,25,52, 0, 0, 0, 0, 0, 0, 6,48,88, 6,48,87, 6,48,89, 6,48,91, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,32,48,15,38,74,15,38,75, 0, 0, 0, + 5,44,15,15,45,75,15,45,76, 0, 0, 0, 7, 1,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,23, 6, 0, 0, 0,15,62,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,16, 7,50,88, + 7,64,74, 7,66,14, 0, 0, 0, 6, 2,44, 6, 3,87, 0, 0, 0, 0, 0, 0, 6, 3,86, + 6, 3,88, 4, 3,44, 5, 3,47, 5, 3,46, 6, 6,28, 0, 0, 0, 4, 5,53, 4, 5,52, + 6, 9,92, 6, 9,91, 6, 9,93, 6, 9,90, 6, 9,94, 6, 9,89,15, 5,76, 0, 0, 0, + 6,10, 2, 4, 8,50, 4, 8,49, 5, 8,23,15, 9,40,15, 9,41,15, 9,42,15, 9,43, + 0, 0, 0, 0, 0, 0, 6,15,25, 6,21,72, 4,11,89, 5,12,18, 6,21,71, 6,21,74, + 6,28,90, 6,21,73, 6,29,55, 6,29,54, 6,21,75, 6,29,56, + /* plane 2, page 10 */ + 0, 255, /* first, last */ + 6,38,85, 6,38,86, 6,38,87, 5,23,31, 0, 0, 0, 6,48,92, 5,36,77, 6,59,18, + 7, 1,33,15,51,56, 0, 0, 0, 7,67,43, 0, 0, 0, 5, 1,30, 4, 1,35,15, 1,20, + 6, 1,59, 0, 0, 0, 4, 2,38, 6,10, 4, 6, 3,90, 0, 0, 0, 6, 3,89, 0, 0, 0, + 4, 3,46, 6,15,27, 5, 8,24, 6,15,26, 4, 8,51, 6,21,76, 6,15,28, 6,38,88, + 5,12,19, 0, 0, 0, 5,29,91, 6,48,93, 0, 0, 0, 5,36,78, 0, 0, 0, 7,31, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1,31, 5, 1,60, 6, 3,91, 6, 2,47, + 6, 2,45, 6, 2,48, 5, 1,61, 0, 0, 0, 4, 2,39, 5, 2,27, 6, 3,92, 6, 3,93, + 5, 2,31, 5, 2,32, 5, 2,29, 5, 2,30, 0, 0, 0,15, 2,13, 0, 0, 0, 0, 0, 0, + 6, 6,30, 5, 3,48, 6, 6,29, 5, 3,49, 6, 5,62, 0, 0, 0, 0, 0, 0,15, 3,31, + 0, 0, 0, 0, 0, 0, 6,10, 7, 6,10, 6, 6,10, 9, 6,10, 8, 5, 5,33, 4, 5,56, + 0, 0, 0,15, 5,77,15, 5,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10, 5, 5, 8,25, + 4, 8,52, 6,15,38, 6,15,33, 6,15,36, 6,15,37, 6,15,32, 6,15,30, 6,15,34, + 6,15,35, 0, 0, 0,15, 9,45,15, 9,46, 4, 8,53, 0, 0, 0, 6,15,31, 6,21,83, + 6,21,84, 4,11,91, 5,12,20, 4,11,92, 6,21,79, 6,21,77, 6,21,80, 6,21,82, + 6,21,81, 6,21,78, 5,12,21,15,14,26,15,14,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,29,64, 6,29,59, 4,16,71, 6,29,63, 6,29,60, 6,29,61,15,19,29, 5,17,16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,29,62, 0, 0, 0, 4,16,70, 4,22,50, + 6,38,92, 6,38,90, 4,22,51, 6,38,91, 6,38,89, 6,38,93,15,25,53, 6,38,94, + 0, 0, 0, 5,29,92, 5,29,93, 6,49, 4, 6,49, 3, 6,48,94,15,32,49, 0, 0, 0, + 6,49, 1, 4,28,31, 4,34,41, 6,59,20, 6,59,23, 6,59,19, 6,59,24, 5,36,79, + 15,38,77, 0, 0, 0,15,38,78, 0, 0, 0, 6,59,22, 6,59,25, 6,59,27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,59,26, 6,59,21, 0, 0, 0, 7, 1,35, 4,41, 8, 5,44,16, + 7, 1,36, 0, 0, 0, 0, 0, 0, 7, 1,34, 0, 0, 0,15,45,77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 5,40, 5,51,69, 7,12,51, 7,12,50,15,51,57,15,51,58, 7,27,45, + 15,62,25,15,62,26,15,62,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,92, + 7,46, 7, 7,50,89, 0, 0, 0, 0, 0, 0, 5,87,52, 0, 0, 0, 7,62,48, 0, 0, 0, + 7,69,19, 0, 0, 0, 7,70,19, 5, 1,14, 6, 1,28, 6, 1,29, 0, 0, 0, 6, 1,61, + 0, 0, 0, 6, 2,50, 6, 2,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,42, 6, 4, 3, + 6, 4, 1, 0, 0, 0,15, 2,14, 0, 0, 0, 4, 2,41, 6, 4, 2, 6, 6,32,15, 3,32, + 5, 3,28, 6,10,12, 6,10,11, 6,10,13, 6,10,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,15,39, 6,15,40, 0, 0, 0, 4, 8,54,15, 9,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,21,86, 6,21,85, 6,22,41, 6,21,14, 0, 0, 0, 0, 0, 0, 5,22,76, + /* plane 2, page 11 */ + 0, 246, /* first, last */ + 6,39, 2, 6,39, 4, 6,45,66, 0, 0, 0,15,25,54, 6,39, 3, 5,30, 1, 6,49, 5, + 5,29,94, 0, 0, 0,15,32,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,28,15,38,79, + 6,64,82, 7, 1,37, 0, 0, 0, 5,51,70, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,57,55, + 7,43,74, 0, 0, 0, 6, 1,64, 5, 1,32, 6, 1,62, 5, 1,34, 6, 1,66, 6, 1,63, + 0, 0, 0, 6, 2,53, 4, 1,72, 5, 1,62, 0, 0, 0, 6, 2,54, 5, 1,63, 6, 2,51, + 6, 2,52, 6, 4, 5, 4, 2,43, 6, 4, 4, 5, 2,34, 6, 4, 6, 5, 2,33, 6, 4, 7, + 0, 0, 0, 6, 6,36, 6, 6,34, 5, 3,50,15, 3,33,15, 3,34,15, 3,35,15, 3,36, + 4, 3,48, 6,10,17, 6,10,15, 6,10,18, 6,10,16,15, 5,79, 0, 0, 0, 6,15,45, + 6,15,42, 6,15,44, 6,15,43, 6,15,41,15, 9,49,15, 9,50, 0, 0, 0, 6,18,82, + 0, 0, 0, 5, 8,22, 6,21,91, 5,12,22, 6,21,92, 6,21,89, 6,21,87, 6,21,90, + 15,14,28,15,14,29,15,14,30,15,14,31, 6,28,71, 6,29,70, 6,29,72, 5,17,18, + 5,17,19, 6,29,69, 6,29,67, 6,29,75, 6,29,68, 5,12,23, 6,29,66, 6,29,73, + 6,29,74, 6,28,92, 0, 0, 0, 6,29,71, 0, 0, 0, 4,22,52, 5,22,77, 6,39, 7, + 6,39, 5,15,19,30,15,25,55,15,25,56,15,25,57,15,25,58, 6,39, 6, 4,28,35, + 4,28,34, 6,49, 7, 6,49, 8, 6,49, 6, 4,28,33, 6,39, 8, 6,49,59, 0, 0, 0, + 6,49, 9, 0, 0, 0, 0, 0, 0, 6,63, 1, 6,59,30, 0, 0, 0, 6,59,29, 5,36,80, + 0, 0, 0, 6,51,91,15,45,53, 5,44,19, 5,44,20,15,38,80, 5,44,18, 7,12,53, + 15,51,59, 3,48,25, 5,52,14, 7,12,52, 0, 0, 0, 7,23, 9, 7,23, 8,15,57,56, + 4,58,79, 7,38,18, 7,38,17, 4,70,17,15,71,37, 7,55,49, 5,85,70, 7,62,49, + 7,62,50, 5, 1,35, 6, 1,68, 4, 1,39, 4, 1,38,15, 1,22, 6, 1,67, 0, 0, 0, + 5, 1,65, 6, 2,57, 6, 2,56, 6, 2,62, 6, 2,58, 6, 2,61, 6, 2,55, 6, 2,34, + 15, 1,46, 0, 0, 0, 6, 2,60, 5, 2,39, 6, 4,13, 5, 2,37, 6, 4,14, 4, 2,45, + 5, 2,38, 4, 2,48, 6, 4,12, 4, 2,47, 4, 2,46, 5, 2,36, 0, 0, 0, 6, 4, 8, + 15, 2,15,15, 2,16,15, 2,18,15, 2,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 4,10,15, 2,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 2,19, 0, 0, 0, + 5, 2,35, 6, 4, 9, 6, 4,11, 4, 3,54, 6, 6,47, 6, 6,38, 6, 6,45, 6, 6,44, + 5, 3,54, 4, 3,58, 4, 3,61, 5, 3,59, 5, 3,52, 6, 6,40, 4, 3,55, 4, 3,50, + 4, 3,56, 5, 3,56, 6, 6,41, 5, 3,57, 4, 3,53, 5, 3,53, 6, 6,39, 0, 0, 0, + 0, 0, 0, 5, 3,60, 0, 0, 0,15, 3,37,15, 3,38,15, 3,39,15, 3,42,15, 3,43, + 15, 3,44, 0, 0, 0, 0, 0, 0,15, 3,40, 6, 6,43, 0, 0, 0, 6, 6,42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,48, 0, 0, 0, 6, 6,37, 5, 3,51, + /* plane 2, page 12 */ + 4, 255, /* first, last */ + 5, 3,55, 5, 3,58, 0, 0, 0, 0, 0, 0, + 4, 5,60, 4, 5,62, 6,10,22, 5, 5,44, 5, 5,36, 4, 5,59, 6,10,20, 5, 5,45, + 5, 5,37, 5, 5,39, 4, 5,65, 5, 5,48, 6,10,19, 5, 5,50, 5, 8,39, 6,10,27, + 5, 5,40, 5, 5,43, 5, 5,42, 5, 5,49, 5, 5,41, 5, 5,46, 6,10,29, 0, 0, 0, + 0, 0, 0, 5, 5,47,15, 5,80,15, 5,82,15, 5,83,15, 5,84,15, 5,85,15, 5,86, + 15, 5,87,15, 5,88,15, 5,89,15, 5,90,15, 5,93,15, 5,94,15, 6, 1,15, 6, 2, + 15, 6, 3, 0, 0, 0, 5, 5,38, 0, 0, 0, 0, 0, 0, 6,10,21, 5, 5,35, 0, 0, 0, + 6,10,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,23, + 15, 5,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,26, 0, 0, 0, + 5,12,24, 5, 8,38, 5, 8,50, 5, 8,45, 5, 8,28, 5, 8,49, 6,15,52, 6,15,46, + 5, 8,31, 4, 8,59, 4, 8,58, 5, 8,47, 5, 8,37, 5, 8,43, 5, 8,42, 5, 8,46, + 5, 8,40, 5, 8,41, 5, 8,29, 5, 8,33, 5, 8,44, 4, 5,66, 6,15,57, 6,15,58, + 5, 8,51, 6,15,47, 0, 0, 0, 5, 8,26, 6,15,55, 6,15,54, 5, 8,48, 6,15,48, + 6,15,56, 6,15,50, 5, 8,32, 5, 8,34, 0, 0, 0,15,11,19, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15, 9,51,15, 9,53,15, 9,54,15, 9,55,15, 9,56,15, 9,57,15, 9,58, + 15, 9,59,15, 9,62,15, 9,63,15, 9,64,15, 9,65,15, 9,66,15, 9,67,15, 9,68, + 15, 9,70,15, 9,71, 0, 0, 0, 5, 8,35, 5, 8,36, 0, 0, 0, 4, 8,61,15, 9,69, + 6,15,53, 0, 0, 0, 0, 0, 0, 6,15,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,56, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 8,27, 5, 8,30, 6,15,49, 0, 0, 0, 6,22, 9, 4,12, 4, 4,12,11, + 4,12,12, 4,12, 7, 6,22, 2, 5,12,46, 5,12,33, 5,12,31, 5,12,44, 5,12,29, + 5,12,38, 5,12,54, 5,12,41, 4,12,10, 5,12,45, 5,12,52, 5,12,50, 4,12, 2, + 6,22, 3, 6,22, 4, 5,12,49, 4,12, 3, 5,12,32, 6,22, 7, 6,22, 8, 5,12,55, + 6,22, 6, 5,12,51, 5,12,56, 5,12,39, 5,12,57, 5,12,36, 5,12,53, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,14,32,15,14,33,15,14,35,15,14,36,15,14,40, + 15,14,41,15,14,43,15,14,44,15,14,45,15,14,46,15,14,47,15,14,48,15,14,49, + 15,14,50,15,14,51,15,14,52, 6,25,62, 0, 0, 0, 0, 0, 0, 6,22, 1, 5,12,34, + 5,12,37, 5,12,40, 0, 0, 0, 0, 0, 0, 6,22, 5, 0, 0, 0, 0, 0, 0, 5,12,48, + 5,12,43, 5,12,25, 5,12,26, 5,12,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,14,37, + /* plane 2, page 13 */ + 3, 254, /* first, last */ + 5,12,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,12,47, 5,12,30, 5,12,28, 0, 0, 0, 0, 0, 0, 5,12,58, 5,17,38, + 4,16,73, 6,29,87, 6,29,84, 4,16,88, 6,29,79, 4,16,85, 5,17,49, 5,17,41, + 5,17,44, 4,16,78, 4,16,89, 5,17,36, 6,29,86, 5,17,22, 5,17,42, 5,17,37, + 5,17,46, 5,17,20, 5,17,45, 5,17,34, 5,17,27, 6,29,81, 6,29,85, 6,29,93, + 6,29,90, 6,29,94, 5,17,26, 5,17,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,29,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,17,24, 6,29,82, 6,29,91,15,19,31,15,19,32,15,19,33,15,19,34, + 15,19,36,15,19,37,15,19,38,15,19,39,15,19,40,15,19,41,15,19,44,15,19,45, + 5,17,23, 6,29,83, 5,17,25, 0, 0, 0, 0, 0, 0, 6,29,77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,17,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,17,40, 0, 0, 0, 6,30, 1, 0, 0, 0, 0, 0, 0, 5,17,50, 0, 0, 0, 6,29,80, + 0, 0, 0, 5,17,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,17,21, + 5,17,39, 5,17,30, 5,17,35, 5,17,29, 5,17,48, 6,29,89, 3,20,64, 0, 0, 0, + 5,17,51, 5,17,47, 6,29,88, 6,29,78, 5,17,31, 5,17,43, 0, 0, 0, 4,22,53, + 4,22,65, 0, 0, 0, 6,39,18, 5,23, 4, 6,39,23, 6,39,30, 5,22,87, 6,39,21, + 5,22,92, 4,22,54, 5,23, 8, 5,22,79, 5,22,81, 4,22,58, 5,22,88, 4,22,55, + 5,23, 9, 5,22,94, 4,22,66, 4,22,59, 5,23, 3, 5,23, 7, 4,22,70, 5,23,16, + 0, 0, 0, 4,22,61, 5,23,12, 5,23,14, 6,39,14, 6,39,28, 5,30, 2, 6,39,11, + 6,39,15, 6,39,24, 5,23, 2, 6,39,20, 6,39,31, 6,39,26, 4,22,68, 5,23, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,22,83, + 15,25,59,15,25,61,15,25,62,15,25,65,15,25,66,15,25,67,15,25,68,15,25,69, + 15,25,70,15,25,71,15,25,72,15,25,74,15,25,77,15,25,78,15,25,79,15,25,80, + 5,22,84, 0, 0, 0, 0, 0, 0, 5,22,85, 5,22,91, 5,23, 5, 5,23, 1, + /* plane 2, page 14 */ + 0, 255, /* first, last */ + 6,39,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,60,15,25,63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,25,76, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,23,11, 5,23,15, 0, 0, 0, + 6,39,29, 5,23,13, 5,23,10, 5,22,93, 0, 0, 0, 6,39,22, 6,49,25, 5,30, 3, + 4,28,41, 5,30, 7, 4,28,46, 5,22,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,33, + 4,28,40, 4,28,36, 6,59,34, 5,30,13, 6,49,19, 6,49,21, 5,30,10, 5,30,24, + 6,49,26, 6,49,16, 5,30,14, 5,30, 4, 5,30,21, 5,30,31, 6,49,31, 6,49,23, + 5,30,20, 5,30,23, 4,28,45, 5,30,26, 4,28,37, 5,30,19, 5,30,12, 4,28,47, + 5,30,15, 4,28,49, 5,30,17, 5,30,18, 6,49,27, 0, 0, 0, 6,49,32, 6,49,10, + 6,49,30, 6,49,29, 5,30,27, 6,49,24, 5,30, 8, 5,30,16, 5,30,11, 6,49,12, + 6,49,36, 6,49,14, 6,49,11, 6,49,13, 0, 0, 0, 0, 0, 0,15,39, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,30,30, + 6,49,17,15,32,54,15,32,55,15,32,56,15,32,57,15,32,58,15,32,59,15,32,60, + 15,32,61,15,32,62,15,32,63,15,32,64,15,32,65,15,32,67, 6,49,15, 6,49,20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,32,52, 0, 0, 0, 6,49,34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,30,28, 5,30,22, 5,30, 5, 5,30, 9, + 5,30, 6,15,32,68, 0, 0, 0, 0, 0, 0, 6,59,38, 6,59,32, 6,59,43, 4,34,45, + 6,59,47, 6,59,37, 6,59,49, 6,59,48, 4,34,46, 6,59,44, 5,36,83, 5,36,87, + 5,36,85, 5,36,92, 6,59,35, 6,59,39, 4,34,44, 4,34,52, 5,36,91, 4,34,48, + 5,36,86, 6,59,33, 5,36,81, 5,36,82, 5,36,89, 6,59,50, 6,59,31, 6,59,41, + 6,59,42, 5,36,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,45, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,81,15,38,82, + /* plane 2, page 15 */ + 0, 255, /* first, last */ + 15,38,83,15,38,84,15,38,86,15,38,87,15,38,88,15,38,89,15,38,90,15,38,91, + 15,38,92,15,38,94,15,39, 1,15,39, 2,15,39, 3,15,39, 7,15,39, 8,15,39, 9, + 15,39,10,15,39,11,15,39,12,15,39,13,15,39, 4, 6,59,40,15,38,85, 0, 0, 0, + 5,36,84, 0, 0, 0, 5,36,90, 0, 0, 0, 6,59,46, 0, 0, 0, 5,37, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,38,93, 6,59,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,39, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,21, 5,36,93, 0, 0, 0, 0, 0, 0, + 15,38,76, 0, 0, 0, 7, 1,49, 5,44,27, 7, 1,53, 7, 1,50, 5,44,25, 7, 1,56, + 7, 1,42, 5,44,32, 5,44,38, 5,44,29, 7, 1,47, 5,44,30, 7, 1,55, 7, 1,48, + 5,44,22, 7, 1,43, 5,44,31, 7, 1,54, 7, 1,57, 5,44,33, 4,41,15, 0, 0, 0, + 7, 1,59, 5,44,26, 7, 1,40, 5,44,24, 5,59, 7, 7, 1,58, 4,41,11, 7, 1,52, + 5,37, 3, 7, 1,51, 7, 1,41, 7, 1,39, 7, 1,66, 7, 1,60,15,45,90, 0, 0, 0, + 7, 1,62, 5,44,34, 7, 1,65, 7,12,65, 5,44,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,41,18, 5,44,39, + 15,45,79,15,45,80,15,45,81,15,45,82,15,45,83,15,45,84,15,45,85,15,45,86, + 15,45,88,15,45,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,36, 7, 1,63, 7, 6,11, + 0, 0, 0, 0, 0, 0, 7, 1,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1,45, + 7, 1,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,28, 5,44,35, 7,12,74, + 4,47,78, 5,51,84, 7,12,60, 5,51,82, 7,12,72, 4,47,82, 5,51,74, 5,51,88, + 7,12,64, 4,47,72, 4,47,83, 4,47,70, 5,51,81, 4,47,80, 5,51,79, 5,51,72, + 7,12,75, 7,12,59, 7,12,68, 5,51,78, 7,12,63, 5,51,76, 5,51,71, 5,51,85, + 5,51,80, 5,51,83, 7,12,57, 5,51,75, 5,51,73, 7,12,71, 7,12,56, 7,12,55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,45,87, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,47,73, 4,47,84, 5,51,87, 7,12,70,15,51,60,15,51,62, + /* plane 2, page 16 */ + 0, 247, /* first, last */ + 15,51,63,15,51,64,15,51,65,15,51,66,15,51,67,15,51,68,15,51,69,15,51,71, + 15,51,72,15,51,73,15,51,74,15,51,75,15,51,76,15,51,77,15,51,78,15,51,79, + 7,12,62, 0, 0, 0, 7,12,61, 7,12,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,12,73, 5,51,77,15,53,84, 5,51,86, 4,53,90, 0, 0, 0, 5,59, 6, + 0, 0, 0, 5,59, 1, 7,23,13, 7,23,10, 7,23,20, 7,23,21, 5,59, 3, 5,59,11, + 4,53,81, 4,53,86, 0, 0, 0, 5,59, 8, 4,53,87, 7,23,11, 5,59, 9, 4,53,89, + 7,23,17, 7,23,15, 7,23,14, 5,59, 4, 0, 0, 0, 4,53,85, 7,23,18, 7,23,25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,57,57, + 15,57,58,15,57,62,15,57,63,15,57,64,15,57,65,15,57,66, 0, 0, 0, 0, 0, 0, + 7,23,24, 7,23,16, 0, 0, 0, 7,23,22, 7,23,19, 7,23,12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,59,10, 5,59, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,84, + 7,31, 9, 7,31,15, 4,58,83, 5,65,30, 7,31,11, 4,58,81, 4,58,86, 5,65,38, + 4,58,87, 5,71,56, 5,65,29, 5,65,36, 5,65,35, 4,58,88, 7,31,10, 4,58,85, + 4,58,89, 4,58,82, 7,31,14, 5,65,33, 7,31, 7, 7,31,13, 7,31, 8, 7,31, 6, + 7,31,12, 5,65,34, 0, 0, 0, 0, 0, 0,15,57,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,31, 5,15,62,28, + 15,62,29,15,62,30,15,62,31,15,62,32,15,62,35,15,62,36,15,62,37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,31, 0, 0, 0,15,62,42, + 7,38,20, 4,63,46, 5,59, 5, 7,38,27, 7,38,25, 7,38,23, 5,71,58, 5,71,59, + 4,63,48, 5,71,55, 7,38,28, 7,38,26, 7,38,19, 7,38,21, 7,38,24, 4,63,47, + 0, 0, 0, 0, 0, 0,15,62,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,60, + /* plane 2, page 17 */ + 2, 255, /* first, last */ + 15,66, 2,15,66, 3,15,66, 4,15,66, 5,15,66, 6, 0, 0, 0, + 7,38,22, 7,39,78, 7,38,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,75,84, 5,75,85, 5,75,79, 5,75,81, 5,75,80, 7,45,39, 7,45,41, + 7,45,43, 7,45,40, 7,45,38, 7,45,42,15,68,93,15,68,94,15,69, 1, 0, 0, 0, + 7,45,44, 0, 0, 0, 0, 0, 0, 5,75,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,50,91, 5,79,81, 5,79,79, 4,70,21, 5,79,78, 7,50,90, 5,79,77, + 7,50,94, 5,79,80, 7,50,93, 4,70,19, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,39, + 15,71,40, 5,79,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,50,92, 0, 0, 0, 0, 0, 0, 7,55,57, + 7,55,58, 5,83,19, 7,55,53, 0, 0, 0, 7,55,54, 7,55,55, 7,55,52, 7,55,50, + 0, 0, 0, 7,55,51, 0, 0, 0,15,73,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,72,68, 7,55,56, 0, 0, 0, + 7,59,41, 7,59,42,15,74,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,59,40, 0, 0, 0, + 7,59,39, 5,87,53, 5,87,54, 4,75,70, 7,62,51, 7,62,53, 7,62,52, 7,62,54, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,35, 0, 0, 0, 5,85,71, 5,89, 3, 0, 0, 0, + 0, 0, 0, 4,76,77,15,76, 2,15,76, 3, 0, 0, 0, 0, 0, 0, 7,64,75, 7,66,18, + 7,66,17, 7,66,20, 7,66,16, 7,66,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,76,89,15,76,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 1,69, 6, 1,70,15, 1,23, 4, 1,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4,18, + 6, 4,16, 5, 2,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 2,21, 0, 0, 0, 0, 0, 0, + 6, 4,17, 0, 0, 0, 6, 4,15, 5, 2,40, 6, 6,52, 6,15,60, 6,10,30, 6, 6,56, + 6, 6,54,15, 3,47,15, 3,49, 6, 6,55, 6, 6,57, 0, 0, 0, 6, 6,60, 6, 6,58, + 0, 0, 0, 6, 6,49, 0, 0, 0, 6, 6,53, 6, 6,50, 0, 0, 0, 6, 6,51, 6, 6,59, + 5, 5,53, 6,10,35, 6,10,32, 6,10,33, 6,10,34, 6,13,20, 6,10,31, 0, 0, 0, + 15, 6, 4, 5, 5,52, 5, 8,52, 5, 8,54, 6,15,64, 6,15,63, 5, 8,53, 6,15,59, + 6,15,62, 0, 0, 0, 0, 0, 0, 6,15,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,12,60, 6,22,13, 6,22,10, 6,22,12, 5,12,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,22,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,12,61, 5,17,54, 6,30, 5, 5,17,55, 6,30, 4, 6,30, 3, 6,30, 2, 5,17,52, + 0, 0, 0, 6,30, 6, 0, 0, 0, 0, 0, 0, 5,23,19, 6,39,32, 6,39,33, 5,23,17, + /* plane 2, page 18 */ + 0, 248, /* first, last */ + 5,17,53, 0, 0, 0,15,25,82,15,25,83,15,25,84, 0, 0, 0, 0, 0, 0, 6,39,34, + 0, 0, 0, 5,23,18, 5,30,32, 6,49,37, 5,30,33, 6,49,39, 6,49,40, 5,30,34, + 0, 0, 0, 6,49,38, 0, 0, 0, 0, 0, 0,15,32,69, 6,59,52, 6,59,56, 5,37, 4, + 6,59,53, 6,59,58, 6,59,54,15,39,14,15,39,15,15,39,16, 0, 0, 0, 6,59,55, + 0, 0, 0, 0, 0, 0, 7, 1,69, 7, 1,70, 7, 1,68,15,45,91, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,47,85, 0, 0, 0,15,51,83, 7,23,28, 7,23,26, 0, 0, 0, + 0, 0, 0, 7,23,27, 0, 0, 0, 4,63,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,45, + 7,51, 2, 7,51, 1, 0, 0, 0, 0, 0, 0, 4, 1,40, 0, 0, 0, 5, 1,36, 6, 2,64, + 0, 0, 0,15, 1,49,15, 1,50, 0, 0, 0, 6, 2,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 4,21, 0, 0, 0,15, 2,22,15, 2,23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 4,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 6,74, 4, 3,64, 6, 6,70, 6, 6,66, 0, 0, 0, 6, 6,62, 0, 0, 0, 6, 6,73, + 6, 6,61, 6, 6,69, 6, 6,71,15, 3,51,15, 3,52,15, 3,54,15, 3,56,15, 3,58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,64, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 6,67, 6, 6,72, 6, 6,68, 0, 0, 0, 6, 6,65, 6, 6,63, 5, 3,62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 3,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 3,61, 5, 3,63, 5, 3,64, 5, 3,65, 4, 5,74, 6,10,47, 6,10,39, 6,10,44, + 6,10,38, 4, 5,71, 6,10,42, 4, 5,76, 6,10,40, 5, 5,54, 6,10,49, 6, 6,33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,41,15, 6, 6,15, 6, 7,15, 6, 8,15, 6, 9, + 15, 6,10,15, 6,16,15, 6,17,15, 6,12,15, 6,11, 0, 0, 0, 4, 5,75, 0, 0, 0, + 15, 6,15,15, 6,14, 0, 0, 0, 6,10,48, 6,10,43, 6,10,45, 6,10,46,15, 6,18, + 15, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,10,36, 5, 5,55, 5, 8,59, 6,15,66, + 5, 8,55, 6,15,68, 6,15,65, 5, 8,56, 4, 8,63, 6,15,75, 6,15,67, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9,90,15, 9,72,15, 9,73,15, 9,75, + 15, 9,76,15, 9,77,15, 9,78,15, 9,79,15, 9,80,15, 9,82,15, 9,83,15, 9,85, + 15, 9,86,15, 9,87,15, 9,88,15, 9,89,15, 9,91,15, 9,92,15, 9,93, 0, 0, 0, + 6,15,74, 0, 0, 0, 0, 0, 0, 6,15,76, 6,20,17, 6,15,71, 6,15,72, 0, 0, 0, + 6,15,70, 0, 0, 0, 0, 0, 0,15, 9,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,61, + 5, 8,58, 5, 8,62, 5, 8,60, 5, 8,57, 5,12,62, 4,12,18, 6,22,20, 4,12,16, + 4,12,20, 6,22,18, 6,22,28, 6,22,22, 6,22,29, 6,22,30, 6,22,17, 6,22,14, + 6,22,26, + /* plane 2, page 19 */ + 1, 255, /* first, last */ + 6,22,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,22,32,15,14,53, + 15,14,54,15,14,55,15,14,56,15,14,57,15,14,58,15,14,59,15,14,62,15,14,63, + 15,14,64, 0, 0, 0, 6,22,16, 6,22,31, 0, 0, 0, 6,22,23, 6,22,24, 6,22,25, + 5,12,64, 6,22,27,15,14,61, 0, 0, 0,15,14,65, 0, 0, 0, 0, 0, 0, 6,22,19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,12,63, 5,12,66, 4,16,93, 6,30, 7, + 0, 0, 0, 4,16,92, 5,17,61, 6,30,20, 6,30,13, 5,17,59, 6,30,10, 5,12,65, + 6,30,19, 6,30,16, 5,17,58, 4,17, 2, 4,17, 3, 0, 0, 0,15,19,47,15,19,59, + 6,30,14, 6,30,15, 0, 0, 0,15,19,46,15,19,48,15,19,49,15,19,50,15,19,51, + 15,19,52,15,19,53,15,19,54,15,19,56,15,19,57,15,19,58,15,19,62,15,19,63, + 15,19,64,15,19,65, 5,17,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,30,17, + 0, 0, 0, 6,30,21, 0, 0, 0, 4,16,94, 6,30, 8, 6,30, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,17,56, 5,17,57, 0, 0, 0, 0, 0, 0, 3,26,47, 6,49,46, 4,22,82, 6,39,39, + 4,22,74, 6,39,37, 4,22,80, 4,22,76, 6,39,43, 6,39,48, 4,22,85, 6,39,36, + 6,39,38, 6,39,45, 5,23,20, 6,30,18, 6,39,47, 4,28,58, 5,23,25, 4,22,83, + 0, 0, 0, 0, 0, 0, 6,47,77, 5,23,24,15,25,86,15,25,88,15,25,89,15,25,90, + 15,25,91,15,25,92,15,26, 1,15,26, 2,15,26, 3,15,26, 4,15,26, 5,15,26, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,49, 0, 0, 0, + 6,39,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,41, 4,22,84, 6,39,44, + 0, 0, 0, 0, 0, 0,15,25,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,23,23, + 5,23,26, 6,39,40, 5,23,21, 5,23,22, 5,23,27, 0, 0, 0, 5,30,38, 6,49,54, + 6,49,43, 6,49,53, 0, 0, 0, 5,30,45, 4,28,52, 6,59,66, 6,49,50, 5,30,44, + 6,49,49, 5,30,36, 5,30,43, 5,30,35, 6,49,52, 6,49,48, 5,30,41, 5,30,42, + 4,28,53, 5,30,39, 6,49,41, 6,49,44, 0, 0, 0,15,25,87, 0, 0, 0, 6,49,51, + 6,49,45,15,32,70,15,32,71,15,32,72,15,32,74,15,32,75,15,32,76,15,32,77, + 15,32,78,15,32,79,15,32,80,15,32,81,15,32,82,15,32,83, 0, 0, 0, 6,49,47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,30,46, 5,30,40, 5,30,37, 0, 0, 0, 5,37, 9, 5,37, 8, 5,37, 7, + 6,59,60, 4,34,60, 6,59,68, 6,59,70, 6,59,65, 5,37,10, 6,59,64, 5,37, 6, + 6,59,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,39,18, + /* plane 2, page 20 */ + 0, 255, /* first, last */ + 15,39,19,15,39,20,15,39,21,15,39,22,15,39,23,15,39,25,15,39,26,15,39,27, + 15,39,28, 6,59,61,15,39,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,75, 0, 0, 0, + 6,59,67, 6,59,51, 0, 0, 0,15,39,17, 4,34,58, 6,59,69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,59,62, 0, 0, 0, 5,37, 5, 5,37,11, 7, 1,82, + 4,41,20, 4,41,21, 7, 1,79, 4,41,22, 5,44,43, 5,44,44, 7, 1,75, 0, 0, 0, + 7, 1,88, 4,41,23, 7, 1,87, 7, 1,84, 0, 0, 0,15,46, 1, 0, 0, 0, 0, 0, 0, + 5,44,45, 5,44,47, 7, 1,71, 7, 1,85,15,45,92,15,45,93,15,46, 6,15,46, 7, + 15,46, 8,15,46, 9,15,46,10,15,46,11,15,46,13, 0, 0, 0, 7, 1,76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 1,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1,78, + 5,44,81, 7, 1,83, 7, 1,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1,73, + 0, 0, 0,15,45,94,15,46, 4, 0, 0, 0,15,46, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,44,46, 5,44,42, 5,44,40, 7, 1,72, 5,44,41, 0, 0, 0, 7,12,79, 7,12,81, + 7,12,76, 4,47,87, 4,47,90, 4,47,89, 7,12,77, 0, 0, 0, 7,12,80, 0, 0, 0, + 15,46,12, 0, 0, 0, 0, 0, 0,15,51,84,15,51,86,15,51,88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,90, 7,12,82, + 5,51,91, 5,51,89, 7,20,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,12,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,12,78,15,51,87, + 4,47,86, 7,23,35, 4,53,93, 7,23,29, 5,59,14, 7,23,31, 7,23,36, 0, 0, 0, + 7,23,34, 0, 0, 0, 7,23,37, 5,59,12, 0, 0, 0, 0, 0, 0, 7,12,84, 0, 0, 0, + 0, 0, 0,15,57,68,15,57,69,15,57,70,15,57,71,15,57,72,15,57,73,15,57,74, + 15,57,75, 7,30,76, 0, 0, 0, 7,23,32, 7,23,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,53,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,59,15, + 7,31,20, 5,65,39, 7,23,30, 5,65,41, 7,31,19,15,62,39, 0, 0, 0,15,62,40, + 15,62,41,15,62,43,15,62,45,15,62,46, 7,31,17, 7,31,18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,59,16, 5,65,40, 0, 0, 0,15,66, 8, 5,65,42, 0, 0, 0, 0, 0, 0, + 7,38,34, 7,38,31, 5,71,61, 7,38,39, 7,38,33,15,62,44, 0, 0, 0,15,66, 7, + 0, 0, 0, 7,38,35, 7,38,38, 7,42,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,32, 7,31,21, 0, 0, 0, 4,67,19,15,69, 2, + 0, 0, 0,15,69, 3,15,69, 4,15,69, 5, 7,45,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,75,87, 7,51, 8, 4,70,22, 7,51, 4, 7,51, 3, 7,51, 7, 7,51, 5, 0, 0, 0, + 5,79,84,15,71,41,15,71,42,15,71,44, 7,51, 6,15,71,43, 0, 0, 0, 5,79,82, + /* plane 2, page 21 */ + 1, 255, /* first, last */ + 5,79,83, 7,55,59, 0, 0, 0,15,73,29, 0, 0, 0, 0, 0, 0, 5,83,20, + 7,55,61, 5,83,21, 7,59,43, 7,55,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,87,55, 0, 0, 0, 5,91,63, + 7,69,58, 7,70,34, 7,70,47, 6, 2,66, 0, 0, 0, 6,15,77, 6, 6,75, 6,10,50, + 15, 9,94,15,10, 1, 5,12,68, 0, 0, 0, 6,22,34, 6,15,78, 6,22,33,15,14,66, + 5,12,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,30,22,15,19,66, 0, 0, 0, 6,39,50, + 6,49,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,56, 6,59,74, 6,68,90, + 0, 0, 0, 6,59,72,15,39,29, 6,59,73, 7, 1,90, 7, 1,89, 7,12,85, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,31,22, 7,35,31, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,62,47, 7,31,23, 7,38,40, 7,38,41, 7,40,27, 0, 0, 0, + 0, 0, 0, 7,55,62, 5, 1,15, 6, 2,67, 0, 0, 0, 6, 4,23, 6, 4,22, 0, 0, 0, + 6, 6,76,15, 3,60, 6,22,35, 6,30,23, 6,30,24, 6,49,58, 6, 4,25, 6, 4,24, + 5, 3,68, 5, 3,67, 4, 5,79, 6,10,51,15, 6,20, 0, 0, 0,15,14,67, 5,17,62, + 6,30,25, 6,30,28, 5,12,69, 6,30,27, 6,30,26, 0, 0, 0, 5,30,47, 6,49,60, + 0, 0, 0,15,32,84, 6,59,76,15,39,30, 6,59,77, 0, 0, 0, 5,44,48,15,46,15, + 15,51,89, 7,12,86, 7,12,87, 7,23,38, 7,38,42, 7,31,26, 7,31,24, 7,31,25, + 7,38,43, 7,45,47, 0, 0, 0, 0, 0, 0, 6, 2,68, 0, 0, 0, 6, 2,69, 0, 0, 0, + 6, 4,26, 0, 0, 0, 6, 6,78, 6, 6,77, 0, 0, 0, 6,10,52, 0, 0, 0,15, 5,34, + 0, 0, 0, 5, 8,63, 5,12,72, 4,12,21, 5,12,71, 6,22,38, 0, 0, 0, 6,22,37, + 15,14,68,15,14,69, 6,22,39, 0, 0, 0, 5,12,73, 4,17, 4, 5,17,65, 6,30,29, + 0, 0, 0, 0, 0, 0, 5,17,63, 5,17,64, 5,17,66,15,19,67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,39,52, 5,23,30, 5,23,34, 5,23,32, 5,23,33,15,26, 7, 5,30,48, + 6,49,61, 0, 0, 0, 5,30,50, 5,30,49, 6,49,63, 0, 0, 0, 4,34,65, 6,59,79, + 6,59,80, 6,59,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,37,12, 5,37,14, 7, 1,91, + 0, 0, 0, 5,44,49, 0, 0, 0, 7,31,27, 0, 0, 0, 0, 0, 0, 5,59,17, 0, 0, 0, + 5,59,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 1,71, 6, 1,72,15, 1,24, 6, 2,70, 0, 0, 0, 0, 0, 0, + 15, 1,51,15, 1,52, 0, 0, 0, 0, 0, 0, 5, 1,86, 6, 4,28, 4, 2,52, 6, 4,31, + 6, 4,32, 6, 4,30, 6, 4,29,15, 1,75, 0, 0, 0, 4, 3,67, 4, 3,68, 0, 0, 0, + 4, 3,70,15, 3,61,15, 3,62,15, 3,63,15, 3,64,15, 3,65,15, 3,66,15, 3,67, + 6, 6,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6,79, 0, 0, 0, 0, 0, 0, 4, 5,86, + 5, 5,58, 4, 5,84, 6,10,53, 6,10,54, 4, 8,67, 6,10,60, 6,10,56, 6,10,57, + /* plane 2, page 22 */ + 0, 254, /* first, last */ + 15, 6,22,15, 6,23, 6,10,58, 0, 0, 0, 6,10,59, 6,10,61, 4, 5,89, 0, 0, 0, + 0, 0, 0, 6,10,55, 0, 0, 0, 6, 9,25, 4, 8,68, 4, 8,66, 5, 8,65, 5, 8,66, + 5, 8,64, 0, 0, 0,15,10, 3, 0, 0, 0,15,10, 4,15,10, 5,15,10, 6,15,10, 8, + 15,10, 9,15,10, 7,15,10, 2, 0, 0, 0, 0, 0, 0, 5,12,76, 0, 0, 0, 6,22,40, + 6,22,43, 0, 0, 0, 5,12,74, 5,12,77,15,14,71,15,14,72,15,14,73, 0, 0, 0, + 0, 0, 0, 6,22,42, 0, 0, 0, 4,12,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,12,75, 0, 0, 0, 5,17,68,15,14,70, 4,12,22, 6,30,33, 6,30,36, 3,20,94, + 6,30,30, 6,30,35, 6,30,32, 6,30,37, 6,30,31,15,19,68, 0, 0, 0,15,19,69, + 0, 0, 0, 4,17, 7, 0, 0, 0, 0, 0, 0, 5,17,67, 0, 0, 0, 0, 0, 0, 4,28,62, + 6,39,56, 6,39,59, 6,39,61, 0, 0, 0, 6,39,58,15,26, 8, 6,39,53, 6,39,60, + 5,23,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,57, 4,22,90, 4,22,88, + 5,23,36, 0, 0, 0, 6,39,55, 0, 0, 0, 6,49,64, 6,49,65, 0, 0, 0, 0, 0, 0, + 4,28,61, 0, 0, 0,15,32,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,30,51, 5,30,52, 5,30,53, 6,59,82, 4,34,67, 5,37,15, 4,34,66,15,39,31, + 15,39,32,15,39,33, 6,59,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,37,16, 4,41,24, + 7, 2, 2, 7, 1,92, 7, 2, 1, 7,12,92, 7, 1,94, 5,44,51,15,46,17,15,46,18, + 7, 1,93, 4,34,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,50, 7,12,93, 5,51,92, + 7,12,88, 7,12,89, 4,54, 1,15,51,90, 7,12,90, 0, 0, 0, 0, 0, 0, 7,23,40, + 7,23,39, 5,59,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,14, 4,58,91, + 15,66, 9, 0, 0, 0, 0, 0, 0, 5,75,88, 7,51, 9, 0, 0, 0,15,73,30, 0, 0, 0, + 5,85,72, 0, 0, 0, 0, 0, 0,15,75,36, 7,62,56,15,76,63, 0, 0, 0, 0, 0, 0, + 5, 1,66, 0, 0, 0,15, 1,53,15, 1,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4,33, + 4, 2,56, 6, 4,34,15, 2,25,15, 2,26,15, 2,27,15, 2,28, 0, 0, 0, 0, 0, 0, + 4, 2,55, 5, 2,43, 6, 4,35, 5, 2,42, 6, 6,84, 4, 3,72, 4, 3,75,15, 3,68, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 3,70,15, 3,72,15, 3,73,15, 3,75,15, 3,76, + 15, 3,77,15, 3,78,15, 3,79,15, 3,69, 0, 0, 0, 6, 6,82, 6, 6,83, 0, 0, 0, + 6, 6,85, 0, 0, 0, 6, 6,81,15, 3,74, 0, 0, 0,15, 3,71, 5, 3,70, 5, 3,71, + 5, 3,69, 4, 5,92, 6,10,65, 6,10,64, 5, 5,64, 4, 5,90, 5, 5,62, 4, 5,93, + 5, 5,59, 5, 5,60, 4, 5,94, 0, 0, 0, 0, 0, 0,15, 6,26, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15, 6,27,15, 6,30,15, 6,31,15, 6,32,15, 6,33,15, 6,34,15, 6,35, + 15, 6,37,15, 6,38,15, 6,39,15, 6,40,15, 6,41, 0, 0, 0, 0, 0, 0, 6,10,63, + 0, 0, 0, 6,10,62,15, 6,36,15, 6,28,15, 6,29, 5, 5,66, 5, 5,63, + /* plane 2, page 23 */ + 0, 255, /* first, last */ + 5, 5,67, 5, 5,65, 4, 8,72, 5, 8,68, 6,15,86, 6,15,88, 6,15,89, 4, 8,69, + 4, 8,75, 5, 8,70, 4, 8,70, 5, 8,67, 6,15,80, 6,15,91, 6,15,84, 5, 8,75, + 0, 0, 0, 6,15,94,15,10,13,15,10,14,15,10,15,15,10,16,15,10,17,15,10,18, + 15,10,19,15,10,20, 0, 0, 0, 6,15,83, 6,15,87, 4, 8,76, 0, 0, 0, 6,15,85, + 6,15,90, 6,15,79, 0, 0, 0, 6,15,93, 0, 0, 0, 5, 8,73, 4, 8,74, 5, 8,74, + 5, 8,71, 6,15,81, 6,15,92, 5, 8,69, 5, 8,72, 6,15,82, 3,16,51, 5,12,80, + 6,22,47, 5,12,82, 5,12,85, 5,12,79, 6,22,53, 5,12,78, 6,22,54, 0, 0, 0, + 6,22,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,22,49,15,14,76,15,14,78, + 15,14,80,15,14,81,15,14,83,15,14,84,15,14,85,15,14,86,15,14,87,15,14,89, + 0, 0, 0, 0, 0, 0, 6,22,52, 0, 0, 0, 6,22,46, 5,12,81, 0, 0, 0, 6,22,51, + 0, 0, 0, 6,22,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,14,79, + 15,14,82, 5,12,87, 5,12,84, 5,12,83, 5,12,86, 5,12,88, 6,30,44, 6,30,50, + 6,30,38, 6,30,39, 5,17,74, 6,30,40, 6,30,41, 6,30,47, 5,17,73, 5,17,77, + 6,30,45, 4,17,11, 6,30,46, 5,17,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,30,51, 0, 0, 0, 0, 0, 0,15,19,72,15,19,73,15,19,74, + 15,19,75,15,19,76,15,19,77,15,19,78,15,19,79,15,19,81,15,19,82,15,19,84, + 15,19,85,15,19,86,15,19,87,15,19,88,15,19,89,15,19,90,15,19,91,15,19,92, + 15,19,93,15,19,94,15,20, 1,15,20, 2,15,20, 3, 0, 0, 0,15,19,80, 0, 0, 0, + 6,30,49, 4,17,10, 0, 0, 0, 6,30,43, 6,30,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,17,70, 5,17,71, 5,17,72, 5,17,69, 4,22,91, 6,39,66, 4,22,92, 5,23,58, + 6,39,63, 4,23, 1, 5,23,40, 5,23,57, 6,39,68, 0, 0, 0, 6,39,70, 5,23,47, + 6,39,69, 6,39,64, 5,23,48, 5,23,41, 5,23,55, 5,23,52, 5,23,39, 5,23,43, + 15,26, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,11,15,26,12, + 15,26,13,15,26,14,15,26,15,15,26,16,15,26,18,15,26,19,15,26,20,15,26,22, + 15,26,23,15,26,24,15,26,25,15,26,26,15,26,30,15,26,31,15,26,33,15,26,34, + 15,26,35,15,26,36,15,26,37, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,27, 0, 0, 0, + 0, 0, 0, 5,23,54, 0, 0, 0, 0, 0, 0, 6,39,67, 5,23,56, 6,39,62, 0, 0, 0, + 0, 0, 0,15,26,29,15,26,32,15,26,17,15,26,10, 5,23,37, 5,30,54, 5,23,51, + 5,23,44, 5,23,50, 5,23,49, 5,23,42, 5,23,45, 5,23,53, 6,39,71,15,19,71, + 5,30,63, 5,30,58, 5,30,61, 5,30,55, 4,28,69, 5,30,57, 6,49,67, 4,28,66, + 4,28,64, 6,49,71, 6,49,69, 6,59,92, 5,30,60, 0, 0, 0, 0, 0, 0, 5,30,59, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,49,70,15,32,88,15,32,89, + /* plane 2, page 24 */ + 0, 255, /* first, last */ + 15,32,90,15,32,92,15,32,93,15,32,94,15,33, 2,15,33, 3, 0, 0, 0, 0, 0, 0, + 6,49,66, 0, 0, 0, 0, 0, 0, 6,49,68, 0, 0, 0, 0, 0, 0,15,32,87, 0, 0, 0, + 6,49,72, 5,30,56, 5,30,62, 5,30,64, 6,49,74,15,33, 1, 0, 0, 0, 4,34,80, + 0, 0, 0, 5,37,18, 4,34,74, 6,59,91, 4,34,81, 6,59,83, 5,37,20, 7, 2, 9, + 4,34,83, 0, 0, 0, 6,59,85, 0, 0, 0,15,39,40, 4,34,79, 5,37,23, 4,34,78, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,39,39,15,39,41,15,39,42,15,39,43,15,39,44, + 15,39,45,15,39,46,15,39,47,15,39,48,15,39,49,15,39,50,15,39,52, 6,59,84, + 6,59,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,34,82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,34,69, 6,59,86, 0, 0, 0,15,39,51, 0, 0, 0, 0, 0, 0, + 5,37,19, 5,37,22, 5,37,21, 7, 2, 6, 5,37,17, 6,59,87, 0, 0, 0, 5,44,59, + 5,44,57, 4,41,25, 5,44,54, 7, 2,15, 5,44,55, 4,41,31, 4,41,27, 7, 2,12, + 0, 0, 0, 4,41,30, 7, 2, 5, 6,59,89, 7, 2, 4,15,46,26, 0, 0, 0, 7,23,49, + 15,39,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,52, 0, 0, 0, 0, 0, 0, + 5,44,60,15,46,19,15,46,20,15,46,21,15,46,22,15,46,23,15,46,24,15,46,25, + 15,46,27,15,46,29,15,46,30,15,46,31,15,46,32,15,46,33,15,46,34,15,46,36, + 0, 0, 0, 6,59,90, 0, 0, 0, 0, 0, 0, 7, 2, 7, 7, 2,14, 7, 2,13, 7, 2, 8, + 0, 0, 0, 0, 0, 0, 7, 2, 3,15,46,37,15,46,35,15,46,28, 5,44,58, 5,44,53, + 4,41,29, 7, 2,10, 5,44,56, 7, 2,11, 0, 0, 0,15,52, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,52, 8, 5,52, 3, 7,13, 5, 7,12,94, 5,52, 9, 5,52, 6, 7,13, 1, + 4,47,94, 7,13, 8, 5,52, 2, 7,13,11, 5,51,93, 7,13,10, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,13,12,15,51,91,15,51,92,15,51,93,15,51,94, + 15,52, 2,15,52, 3,15,52, 4,15,52, 6,15,52, 7,15,52,11,15,52,12, 0, 0, 0, + 0, 0, 0, 5,51,94, 7,13, 6, 0, 0, 0, 7,13, 7, 7,13, 3, 0, 0, 0, 7,13, 2, + 7,13, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52, 1,15,52, 8, + 5,52, 7, 5,52, 1, 5,52, 5, 7,13, 9, 0, 0, 0, 7,23,43, 7,23,52, 7,23,47, + 4,47,93, 7,23,45, 0, 0, 0, 4,54, 3, 7,23,51, 7,23,42, 5,59,22, 5,59,20, + 7,23,44, 7,23,46, 7,23,48, 0, 0, 0, 5,59,21, 4,54, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,57,76,15,57,77,15,57,78,15,57,79,15,57,80,15,57,81, + 0, 0, 0, 7,23,50, 0, 0, 0, 0, 0, 0, 7,23,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,23,41, 5,65,43, 4,58,92, 0, 0, 0, 7,31,31, 5,65,44, 5,65,45, + 7,31,30, 7,31,32,15,62,48,15,62,49,15,62,50,15,62,52, 0, 0, 0, 7,31,29, + 7,31,33, 0, 0, 0,15,62,51, 0, 0, 0, 7,31,28, 5,71,63, 4,63,51, 7,38,45, + /* plane 2, page 25 */ + 0, 251, /* first, last */ + 7,38,50, 7,38,48,15,62,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,66,10,15,66,11, + 7,38,46, 0, 0, 0, 0, 0, 0, 5,71,65, 5,71,64,15,63,83, 0, 0, 0, 7,45,49, + 0, 0, 0, 0, 0, 0, 5,75,89, 0, 0, 0, 0, 0, 0,15,69, 6, 5,75,90, 5,75,91, + 7,51,10, 5,79,86, 7,51,11, 5,79,85,15,71,45,15,71,46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,55,66, 5,83,22, 7,55,65, 7,55,67, 7,55,63,15,73,31, 0, 0, 0, + 7,55,64, 7,55,68,15,73,32, 5,85,73, 7,59,44, 0, 0, 0, 7,62,58, 7,62,59, + 15,75,37, 7,62,57, 7,62,60, 0, 0, 0,15,76, 4, 0, 0, 0, 5,89, 4,15,76,42, + 0, 0, 0, 7,67,45, 5,90,69, 0, 0, 0, 4, 1,19, 0, 0, 0, 6, 2,72, 5, 1,67, + 6, 2,73,15, 1,56,15, 1,55, 6, 4,37, 0, 0, 0, 6, 4,36, 6, 6,86, 6, 6,87, + 5, 3,74, 4, 3,76,15, 3,80, 0, 0, 0, 0, 0, 0, 5, 3,73, 4, 8,79, 6,16, 4, + 6,10,67, 6,10,66,15, 6,42,15, 6,43,15, 6,44,15, 6,45,15, 6,47, 6,10,68, + 15, 6,46, 0, 0, 0, 0, 0, 0, 6,16, 3, 6,16, 1, 6,16, 6, 6,16, 5, 0, 0, 0, + 0, 0, 0,15,10,21,15,10,22,15,10,23, 0, 0, 0, 0, 0, 0, 6,16, 2, 0, 0, 0, + 6,22,57, 5,12,89, 6,22,56,15,14,90,15,14,91, 5,12,90,15,19,70,15,20, 4, + 15,20, 5,15,20, 6,15,20, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,23,60, 6,39,73, + 0, 0, 0, 5,23,59, 6,39,74,15,26,39, 0, 0, 0, 6,39,72,15,26,38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,28,70, 4,28,72, 6,49,77, 5,30,66,15,33, 5, + 0, 0, 0,15,33, 6, 0, 0, 0, 6,49,75, 6,49,76, 0, 0, 0, 5,30,65, 4,28,73, + 0, 0, 0, 6,59,93,15,39,53,15,39,54, 0, 0, 0, 5,37,24, 0, 0, 0, 4,41,33, + 4,41,34, 0, 0, 0,15,46,38, 0, 0, 0, 0, 0, 0, 5,44,61, 7,13,15, 7,13,14, + 7,13,17, 7,13,18, 5,52,10, 7,13,16,15,52,13,15,52,14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,23,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,50, 0, 0, 0,15,66,12, + 15,66,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,75,92, 0, 0, 0, 0, 0, 0, + 15,76,64, 6, 1,73, 0, 0, 0, 0, 0, 0, 5, 1,68, 6, 4,38, 6, 4,41, 6, 4,42, + 0, 0, 0, 0, 0, 0, 4, 2,58,15, 2,29,15, 2,30,15, 2,31,15, 2,32,15, 2,33, + 6, 4,39, 0, 0, 0, 0, 0, 0, 6, 6,94, 6, 6,93, 4, 3,78, 6, 6,91, 6, 6,92, + 0, 0, 0,15, 3,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,69, 5, 5,68, + 6,10,70, 5, 5,70, 6,10,71, 0, 0, 0, 6,10,72,15, 6,49,15, 6,50,15, 6,52, + 15, 6,53, 0, 0, 0, 6,10,69,15, 6,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 8,76, 6,16, 8, 6,16,10, 5, 8,77, 4, 8,81, 4, 8,82, 4, 8,83, + 6,16,11, 6,16, 7, 0, 0, 0, 0, 0, 0, 6,16, 9,15,10,24,15,10,26,15,10,27, + 15,10,28, 0, 0, 0, 6,16,12, 6,16,13, + /* plane 2, page 26 */ + 0, 255, /* first, last */ + 4,12,42, 6,22,65, 4,12,37, 4,12,36, 4,12,35, 4,12,39, 6,22,68, 6,22,69, + 6,22,63, 6,22,62, 5,12,93, 0, 0, 0, 0, 0, 0, 5,13, 2, 6,22,59, 6,22,66, + 15,14,92,15,14,93, 0, 0, 0, 6,22,64, 6,22,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,22,58, 0, 0, 0, 6,22,60, 5,13, 1, + 5,12,94, 0, 0, 0, 4,17,13, 5,17,79, 6,30,55, 6,30,57, 6,30,56, 6,30,54, + 6,30,59, 5,17,80,15,20, 8,15,20, 9,15,20,10,15,20,11,15,20,12,15,20,13, + 15,20,14,15,20,15, 0, 0, 0, 0, 0, 0, 4,17,15, 0, 0, 0, 6,30,60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,17,78, 6,30,53, 5,23,62, 4,23, 6, 5,23,65, + 6,39,80, 6,39,75, 4,23, 3, 5,23,61, 5,23,64, 6,39,78, 4,23, 5, 5,23,63, + 6,39,79, 6,39,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,40,15,26,41, + 15,26,42,15,26,43,15,26,44,15,26,45,15,26,46,15,26,47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,39,77, 0, 0, 0, 5,23,66, 0, 0, 0, 0, 0, 0,15,29,76, 6,49,84, + 6,49,80, 4,28,75, 4,28,80, 5,30,67, 6,49,87, 5,30,68, 6,49,82, 6,49,81, + 6,49,86, 4,28,77, 6,49,83, 0, 0, 0, 6,49,79, 6,49,85,15,33, 7,15,33, 8, + 15,33, 9,15,33,10,15,33,12,15,33,13,15,33,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,49,78, 6,59,94, 6,60, 7, 5,37,28, 5,37,26, 6,60, 4, + 6,60,12, 4,34,86, 6,60,14, 6,60,11, 6,60, 6, 5,37,25, 7, 2,19, 0, 0, 0, + 15,39,55,15,39,56,15,39,57,15,39,58, 0, 0, 0, 0, 0, 0, 6,60, 8, 6,60, 5, + 6,60, 9, 0, 0, 0, 0, 0, 0, 6,60,13, 6,60, 1, 0, 0, 0, 6,60, 3, 5,37,27, + 6,60,10, 0, 0, 0,15,39,36, 6,66,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,16, + 5,44,62, 4,41,39, 7, 2,23, 4,41,40, 7, 2,21, 7, 2,18, 0, 0, 0,15,46,39, + 15,46,40,15,46,41,15,46,42,15,46,43,15,46,44,15,46,46,15,46,47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,24, 0, 0, 0, 7, 2,22,15,46,45, + 5,44,65, 0, 0, 0, 5,44,63, 0, 0, 0, 7, 2,17, 5,44,64, 7,13,21, 7,13,23, + 5,52,12, 4,48, 2, 5,52,13, 5,52,11, 7,13,22, 7,13,19, 7,13,20,15,52,15, + 15,52,16,15,52,17,15,52,19,15,52,20,15,52,21,15,52,22,15,52,23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,23,57, 7,23,55, 5,59,24,15,57,82,15,57,83,15,57,84, + 15,57,85, 0, 0, 0, 7,23,56, 7,23,58, 7, 2,20, 5,59,23, 7,38,56, 5,65,46, + 15,57,86, 0, 0, 0,15,62,54,15,62,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,31,34,15,66,14, 0, 0, 0, 4,63,55, 7,38,51, 7,38,53, 4,63,54, + 7,38,55, 7,38,54,15,66,15, 7,38,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,67,22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,51, 7,51,12, 4,70,24, 7,51,13,15,71,47, + /* plane 2, page 27 */ + 0, 252, /* first, last */ + 15,71,48, 0, 0, 0, 0, 0, 0, 7,51,14, 5,83,24, 4,72,70, 7,55,69, 5,83,23, + 0, 0, 0, 0, 0, 0, 7,55,70, 0, 0, 0, 4,74,37, 4,75,71, 0, 0, 0,15,75,38, + 0, 0, 0, 7,64,76, 7,68,37, 5,89, 5,15,76, 5, 0, 0, 0, 4,77,52, 0, 0, 0, + 5,90, 7, 4,77,81, 7,67,46, 7,69,20, 0, 0, 0, 6, 1,74, 0, 0, 0, 6,10,74, + 6,10,73, 0, 0, 0,15, 6,54,15, 6,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,79, + 6,16,14,15,10,29, 6,16,17, 0, 0, 0, 6,16,15, 0, 0, 0, 4,17,17, 6,35,71, + 6,30,62, 6,30,61, 0, 0, 0, 4,23, 7, 6,30,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,49,90, 6,49,88, 6,49,89, 0, 0, 0, 6,60,16, 4,36, 6,15,39,59, + 0, 0, 0, 6,60,17, 5,37,29, 0, 0, 0, 0, 0, 0,15,46,49, 7, 2,26, 0, 0, 0, + 7, 2,25, 0, 0, 0, 7,13,25, 5,51,50, 7,13,24, 7,23,59, 7,23,60, 0, 0, 0, + 5,65,47, 7,38,57, 7,45,52, 7,51,15, 0, 0, 0, 6, 1,75,15, 1,25, 0, 0, 0, + 0, 0, 0, 6, 4,44, 5, 2,44, 0, 0, 0, 0, 0, 0, 6, 7, 4, 4, 3,82, 6, 7, 3, + 6, 7, 2,15, 3,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,71, 0, 0, 0, 0, 0, 0, + 15, 6,56, 6,10,75, 6,16,18, 6,16,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,16,19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8,80, 4,12,43,15,15, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,22,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,30,65, 5,17,81, 5,23,67, + 6,30,67, 6,30,64, 6,30,66,15,20,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,81,15,26,48, + 6,39,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,39,82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,30,69, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,33,15, 5,37,30, 6,60,19, + 0, 0, 0, 6,60,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,66, 7, 2,27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,52,15, 7,13,26, 0, 0, 0, 0, 0, 0,15,57,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,79,87, + 0, 0, 0, 0, 0, 0, 4, 1,42,15, 1,26, 5, 1,69,15, 1,45,15, 1,58, 0, 0, 0, + 0, 0, 0, 6, 2,75, 6, 2,74, 0, 0, 0, 0, 0, 0, 5, 2,45,15, 2,35, 5, 3,76, + 4, 3,83, 0, 0, 0, 5, 5,72, 0, 0, 0, 6, 7, 5, 0, 0, 0, 5, 3,75, 0, 0, 0, + 5, 3,78, 5, 3,77, 0, 0, 0, 6,16,20, 5, 5,73, 6,10,76, 5, 5,75,15, 6,57, + 6,16,21, 5, 5,74, 5, 8,81, 6,16,23, 0, 0, 0, 6,16,24, 5, 8,82, 6,16,25, + 5,13, 3, 6,22,76, 6,22,74, 0, 0, 0, 5,13, 4, 6,22,75, 6,22,77,15,15, 2, + 0, 0, 0, 0, 0, 0, 6,30,70, 5,17,82, 4,17,20, 5,17,84, 6,39,86, 6,39,84, + 6,39,85, 0, 0, 0, 4,23,10, 6,39,87,15,26,49, + /* plane 2, page 28 */ + 2, 255, /* first, last */ + 6,49,91, 6,49,93, 6,49,92, 0, 0, 0, 0, 0, 0, 5,40, 6, + 0, 0, 0, 4,34,90, 6,60,20, 5,37,32, 5,37,31, 6,60,21, 5,37,33, 0, 0, 0, + 7,13,29, 7, 2,30, 7, 2,29, 0, 0, 0, 7, 2,28, 7,13,27, 5,52,16, 7,13,28, + 7,13,30,15,52,24, 0, 0, 0, 0, 0, 0, 7,23,61, 4,70,25, 0, 0, 0, 0, 0, 0, + 4,72,71, 0, 0, 0, 5,89, 6, 6, 1,30, 4, 1,85, 4, 1,84, 6, 2,76, 0, 0, 0, + 0, 0, 0, 6, 4,45, 4, 2,62, 5, 2,46, 6, 4,46, 6, 4,48, 6, 4,49, 6, 4,47, + 15, 2,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 9,15, 3,84, + 6, 7, 7, 0, 0, 0, 6, 7, 6, 0, 0, 0, 6, 7, 8, 5, 3,79, 4, 6,12, 4, 6,11, + 6,10,77, 6,10,78, 5, 5,76, 6,10,79,15, 6,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,77, 4, 8,87, 6,16,26, 6,16,31, 4, 8,90, + 4, 8,86, 5, 8,85, 6,16,30, 6,16,29, 6,16,28, 6,16,27, 0, 0, 0,15,10,32, + 15,10,33,15,10,34,15,10,35,15,10,36, 0, 0, 0,15,10,31, 0, 0, 0, 0, 0, 0, + 6,16,32, 5, 8,84, 6,22,82, 4,12,48, 6,22,79, 4,12,47, 6,30,71, 6,22,80, + 6,22,78, 0, 0, 0,15,15, 3,15,15, 4,15,15, 6,15,15, 7,15,15, 8, 0, 0, 0, + 5,13, 6, 5,13, 7, 6,22,81, 0, 0, 0, 6,22,83, 0, 0, 0, 0, 0, 0, 5,13, 5, + 0, 0, 0, 6,22,84, 6,30,77, 6,30,73, 5,17,88, 5,17,90, 5,17,87, 5,17,89, + 5,17,86, 5,17,91, 6,30,80, 6,30,74,15,20,17,15,20,18,15,20,21,15,20,22, + 15,20,23,15,20,24,15,20,25,15,20,26, 6,30,72, 0, 0, 0, 6,30,76, 0, 0, 0, + 0, 0, 0, 6,30,79, 6,30,78,15,20,19, 6,40, 3, 6,40, 4, 6,40, 2, 4,23,12, + 6,39,94, 6,39,90, 5,23,68, 4,23,13, 5,23,69, 6,39,89, 6,39,88, 6,40, 5, + 6,40, 1, 6,40, 6, 0, 0, 0, 6,39,92, 0, 0, 0, 0, 0, 0,15,26,50,15,26,51, + 15,26,52, 6,39,93, 4,23,14, 0, 0, 0, 6,50, 3, 5,30,73, 5,30,71, 6,50, 6, + 5,30,72, 6,50, 5, 6,50, 9, 6,50, 1, 6,49,94, 6,50, 7, 6,50, 4, 0, 0, 0, + 15,33,16,15,33,17,15,33,18, 6,50, 2, 0, 0, 0, 0, 0, 0, 6,50, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,30,70, 0, 0, 0, 4,34,92, 4,34,94, 4,34,91, 6,60,24, + 6,60,22, 6,60,23,15,39,61, 0, 0, 0, 0, 0, 0, 6,60,25, 0, 0, 0, 5,37,34, + 7, 2,32, 5,44,70, 0, 0, 0,15,46,50,15,46,51,15,46,52,15,46,53,15,46,54, + 5,44,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,44,68, 7,13,32, + 7,13,31, 7, 2,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52,25, 7,16,13, + 7,23,62, 0, 0, 0, 0, 0, 0, 7,31,35, 4,63,56, 5,71,66, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,69, 7,15,69, 8, 0, 0, 0, 5,75,93, 0, 0, 0, 0, 0, 0,15,71,49, + 5,83,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1,16, 6, 1,76, + /* plane 2, page 29 */ + 0, 255, /* first, last */ + 6, 2,77, 6, 4,52, 6, 4,51, 0, 0, 0, 6, 4,50, 5, 2,47, 4, 3,85, 0, 0, 0, + 6, 7,10, 0, 0, 0, 0, 0, 0, 4, 6,13, 6,10,81, 6,10,80, 5, 8,87, 6,16,34, + 0, 0, 0, 6,16,35, 5, 8,86, 6,16,36, 0, 0, 0, 6,22,87, 6,22,88, 6,22,86, + 6,21, 8, 6,22,85, 0, 0, 0, 6,30,81, 6,30,82, 6,40, 8, 5,23,71, 6,40, 9, + 0, 0, 0, 6,40, 7, 0, 0, 0,15,26,53, 6,50,10, 6,60,26, 7, 2,33, 7,13,33, + 7, 2,34, 7, 2,35, 0, 0, 0, 7,51,16, 7,62,61, 5, 1,37, 0, 0, 0, 5, 1,38, + 6, 2,80, 6, 2,78, 6, 2,82, 6, 2,81, 0, 0, 0,15, 1,60,15, 1,61,15, 1,62, + 6, 2,83, 0, 0, 0, 0, 0, 0, 5, 1,70, 6, 2,79, 0, 0, 0, 0, 0, 0, 6, 4,55, + 6, 4,53, 6, 4,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,57,15, 2,37, + 15, 2,38, 0, 0, 0, 6, 4,54, 5, 2,51, 0, 0, 0, 0, 0, 0, 6, 4,58, 6, 4,56, + 0, 0, 0, 5, 2,50, 0, 0, 0, 6, 7,14, 5, 3,81, 5, 3,88, 5, 3,89, 6, 7,16, + 5, 3,86, 5, 3,85, 5, 3,87, 5, 3,82, 5, 3,83, 6, 7,17, 6, 7,12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7,18,15, 3,86, 0, 0, 0,15, 3,87,15, 3,89, + 15, 3,90,15, 3,91,15, 3,94,15, 4, 1, 0, 0, 0, 0, 0, 0, 6, 7,13, 0, 0, 0, + 6, 7,15, 4, 3,93, 0, 0, 0,15, 3,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 7,20, 6, 7,19, 0, 0, 0, 4, 3,92, 0, 0, 0, 6, 7,11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 3,90, 4, 6,16, 5, 5,85, 6,10,85, 4, 6,19, 6,10,82, + 5, 5,83, 5, 5,84, 6,10,90, 5, 5,81, 6,10,87, 6,10,92, 5, 5,79, 6,10,89, + 5, 5,82, 5, 5,80, 6,10,84, 6, 7,21,15, 6,60,15, 6,61,15, 6,62,15, 6,63, + 15, 6,64,15, 6,65,15, 6,67,15, 6,68, 0, 0, 0,15, 6,69,15, 6,70,15, 6,71, + 15, 6,72, 0, 0, 0, 6,10,88, 0, 0, 0, 6,13,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,10,83, 5, 5,86, 6,16,48, 6,16,42, 5, 8,88, 6,16,43, 5, 8,89, + 4, 8,94, 5, 8,90, 0, 0, 0, 6,16,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,16,41, 6,16,50, 0, 0, 0,15,10,37,15,10,39,15,10,40,15,10,43,15,10,44, + 15,10,45,15,10,46,15,10,47,15,10,48,15,10,49, 6,16,45, 6,16,37, 6,16,39, + 0, 0, 0, 6,16,49, 0, 0, 0, 0, 0, 0, 6,16,47, 0, 0, 0, 0, 0, 0, 6,16,44, + 15,10,42,15,10,38, 6,16,40, 5, 8,91, 4, 8,92, 5,13,12, 5,13, 9, 4,12,50, + 4,12,57, 5,13,10, 6,23, 1, 4,12,56, 5,13,20, 5,13,16, 5,13,11, 6,22,93, + 5,13,17, 5,13,13, 5,13,15, 6,23, 4, 6,22,94, 4,12,66, 6,22,89, 4,12,67, + 4,12,54, 6,23, 5, 6,23, 2, 0, 0, 0, 0, 0, 0, 6,23, 3, 6,22,91,15,15, 9, + 15,15,10,15,15,11,15,15,12,15,15,13,15,15,14,15,15,15,15,15,17,15,15,19, + 5,13, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,15,16, + /* plane 2, page 30 */ + 2, 254, /* first, last */ + 15,15,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,13,19, 4,12,61, 5,13,21, 0, 0, 0, 5,13,22, 0, 0, 0, 5,13,18, 0, 0, 0, + 6,27,46, 4,17,26, 6,31,11, 6,31, 4, 6,31, 6, 4,17,28, 4,17,30, 5,17,94, + 6,30,89, 6,31, 2, 6,30,91, 5,18, 8, 4,17,24, 0, 0, 0, 6,31, 7, 6,31,12, + 6,31, 9, 6,30,84, 6,31,10, 4,17,32, 4,17,27, 5,17,92, 5,18, 6, 6,30,83, + 4,17,22, 5,17,93, 5,18, 4, 0, 0, 0, 6,31, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,31, 3,15,20,27, 0, 0, 0, + 15,20,28,15,20,29,15,20,30,15,20,32,15,20,33,15,20,34,15,20,35,15,20,36, + 15,20,38,15,20,39,15,20,40, 6,30,87, 0, 0, 0, 0, 0, 0, 6,18,10, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,30,93, 6,30,92, 0, 0, 0, 6,30,94, 0, 0, 0, 6,31, 1, + 0, 0, 0, 0, 0, 0, 6,31, 5, 0, 0, 0, 4,17,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,18, 9, 5,18, 1, 5,18, 7, 5,18, 3, 0, 0, 0, 5,18, 2, + 5,18, 5, 5,18,10, 5,23,73, 6,40,19, 5,23,78, 6,40,10, 6,40,20, 5,23,79, + 5,23,76, 0, 0, 0, 5,23,75, 4,23,16, 0, 0, 0, 5,23,80, 5,23,74, 5,23,81, + 5,23,82, 5,23,84, 6,40,14, 6,30,90, 4,23,17, 6,40,15, 5,23,77, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,23,19, 0, 0, 0, + 5,23,72, 0, 0, 0, 5,23,83,15,26,54,15,26,56,15,26,57,15,26,58,15,26,59, + 0, 0, 0, 0, 0, 0, 6,40,13, 0, 0, 0, 5,23,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,40,18, 6,40,12, 0, 0, 0, 0, 0, 0, 6,40,17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,40,16, 0, 0, 0, 0, 0, 0,15,26,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,30,80, 6,50,13, 5,30,76, 4,28,90, 5,30,81, + 6,50,14, 6,60,27, 4,28,93, 6,50,21, 5,30,74, 5,30,83, 6,50,11, 5,30,79, + 0, 0, 0, 6,50,12, 6,50,25, 6,50,16, 6,50,24, 5,30,78, 6,50,22, 6,60,32, + 15,33,23, 5,30,82,15,33,19,15,33,20,15,33,22,15,33,24,15,33,25, 6,50,26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,50,18, 0, 0, 0, 6,50,23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,30,75, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,33,21, 0, 0, 0, 6,50,15, + 5,37,35, 5,37,43, 5,37,41, 6,60,33, 6,60,28, 4,35,11, 4,35, 6, 4,35, 5, + 5,37,36, 5,37,40, 5,37,39, 5,37,42, 5,37,46, 6,60,30, 6,60,39, 5,37,45, + 5,37,37, 5,37,38, 6,60,34, 0, 0, 0, 4,35, 9, 6,60,38, 4,35, 7, 4,35, 3, + 5,37,44, 6,60,37, 6,60,35, 0, 0, 0, 6,60,31, 4,35, 8,15,39,62,15,39,63, + 15,39,64,15,39,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,50,17, + /* plane 2, page 31 */ + 10, 255, /* first, last */ + 4,41,46, 7, 2,41, 4,41,50, 7, 2,37, 5,44,73, 0, 0, 0, + 7, 2,48, 7, 2,42, 5,44,78, 5,44,71, 7, 2,39, 7, 2,49, 5,44,79, 7, 2,47, + 7, 2,44, 7, 2,45, 5,44,80, 5,44,74, 5,44,77, 7,13,36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,38,15,46,55,15,46,56, + 15,46,57,15,46,59,15,46,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,36, + 7, 2,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,44,75, 0, 0, 0, 7, 2,40, 4,41,49, 5,52,19, 4,48, 3, + 7,13,42, 4,48, 4, 5,52,21, 7,13,34, 5,52,24, 5,52,20, 5,52,17, 7,13,39, + 7,13,35, 5,59,25, 5,52,18, 0, 0, 0,15,52,26,15,52,27,15,52,28, 0, 0, 0, + 7,13,37, 0, 0, 0, 0, 0, 0, 7,13,41, 7,13,40, 7,13,43, 0, 0, 0, 0, 0, 0, + 7,13,38, 0, 0, 0, 7,13,45, 5,52,23, 4,54, 9, 5,59,27, 5,65,53, 7,23,64, + 5,59,31, 7,23,70, 0, 0, 0, 5,59,26, 7,23,66, 7,23,68, 7,23,65, 5,59,29, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,23,63, 7,23,69,15,57,89,15,57,90, + 15,57,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,10, 0, 0, 0, 0, 0, 0, + 7,23,67, 0, 0, 0, 7,23,71, 0, 0, 0, 0, 0, 0, 7,25, 7, 0, 0, 0, 0, 0, 0, + 5,59,32, 0, 0, 0, 7,38,58, 0, 0, 0, 0, 0, 0, 5,65,52, 7,31,39, 4,58,94, + 5,65,49, 5,65,50, 7,31,41,15,62,57, 5,65,51, 7,31,38,15,62,56, 0, 0, 0, + 7,31,37, 7,31,40, 0, 0, 0, 0, 0, 0, 5,65,54, 5,65,55, 0, 0, 0, 0, 0, 0, + 7,38,60, 4,63,59, 7,38,62, 5,71,69, 4,63,57, 7,38,61, 7,38,63, 7,38,64, + 0, 0, 0, 0, 0, 0,15,66,16,15,66,17,15,66,18, 0, 0, 0, 7,38,65, 7,38,66, + 0, 0, 0, 7,38,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,67,24, 7,45,53, + 4,67,23, 5,75,94, 7,45,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,69, 9, 7,45,54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,59,30, 5,79,88, 5,79,90, 5,79,89, 0, 0, 0, + 0, 0, 0, 7,51,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,17, 5,83,27, + 4,72,73, 4,72,74, 7,55,71, 7,55,73, 7,55,72, 0, 0, 0, 0, 0, 0, 7,55,74, + 0, 0, 0, 5,83,28, 0, 0, 0, 0, 0, 0, 7,62,62, 4,75,74, 4,75,73, 0, 0, 0, + 7,62,64, 0, 0, 0, 0, 0, 0, 5,87,56, 7,62,63, 5,89, 7, 0, 0, 0,15,76, 6, + 5,90, 8, 5,90,70, 5,91,28, 7,67,47, 0, 0, 0, 5,92,20, 0, 0, 0, 6, 1,77, + 4, 1, 5, 4, 2,66, 5, 2,52, 6, 4,59, 6, 4,60, 5, 2,53, 6, 3,94, 4, 3,94, + 5, 3,91, 6,10,93,15, 6,74,15, 6,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,16,53, + 6,16,52, 6,16,54, 0, 0, 0, 6,16,51, 0, 0, 0, 6,23, 6, 5,18,11, 4,17,33, + /* plane 2, page 32 */ + 0, 254, /* first, last */ + 6,31,13, 5,23,86, 6,60,40, 7, 2,50, 5,52,25,15,46,61,15,52,29, 7,23,72, + 7,31,42, 7,38,67, 5,71,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,65, 0, 0, 0, + 7,69,21, 6, 1,79, 6, 1,81, 6, 1,80,15, 1,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 1,72, 5, 1,71, 0, 0, 0, 0, 0, 0, 5, 3,92, 6, 7,23, 0, 0, 0,15, 6,75, + 6,16,55, 6,23, 8,15,15,20, 6,31,14,15,26,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 2,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,38,68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2,84, 0, 0, 0, 5, 2,54, 6,10,94, + 0, 0, 0, 6,16,57, 0, 0, 0, 6,16,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,12,69, + 6,31,15, 5,21,63, 5,18,13, 6,31,16, 5,18,12, 6,40,22,15,26,63,15,26,64, + 15,26,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,31,43, 0, 0, 0, 4, 1,87, 6, 2,85, 6, 2,86, 5, 2,57, 5, 2,56, 4, 2,68, + 5, 2,59, 6, 4,65, 6, 4,64, 6, 4,62,15, 2,40, 0, 0, 0, 0, 0, 0,15, 2,42, + 0, 0, 0, 0, 0, 0, 5, 2,55, 6, 4,63, 5, 2,58, 6, 7,33, 6, 7,27, 5, 4, 2, + 6, 7,24, 5, 3,94, 5, 3,93, 0, 0, 0, 5, 4, 3, 6, 7,32, 5, 4, 4, 6, 7,28, + 6, 7,31, 5, 4, 1,15, 4, 4, 6, 7,25, 6, 7,26, 6, 7,29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 4, 5, 6, 7,30, 5, 5,91, 4, 6,21, 5, 5,89, 5, 5,93, 5, 5,90, + 5, 5,92, 5, 6, 1, 6,11, 3, 5, 5,94, 0, 0, 0, 0, 0, 0, 5, 6, 2, 6,11, 2, + 15, 6,76, 0, 0, 0, 5, 6, 3, 6,11, 1, 0, 0, 0, 5, 5,87, 0, 0, 0, 5, 5,88, + 5, 8,94, 6,16,66, 5, 8,93, 5, 9, 2, 5, 8,92, 5, 9, 3, 6,16,63, 5, 9, 5, + 5, 9, 4, 0, 0, 0, 6,16,59, 0, 0, 0, 0, 0, 0, 5, 9, 1, 6,16,58, 6,16,69, + 6,16,71,15,10,51,15,10,52,15,10,53, 0, 0, 0, 4, 9, 6, 6,16,65, 0, 0, 0, + 0, 0, 0, 6,16,64, 6,16,60, 6,16,61, 6,16,70, 0, 0, 0, 6,16,68, 6,16,62, + 0, 0, 0, 5,13,24, 6,23,18, 0, 0, 0, 5,13,23, 6,23,14, 5,13,25, 5,18,14, + 6,23,10, 4,12,73, 4,12,74, 6,23,15, 5,13,26, 6,23,13, 6,23,17, 6,23,16, + 4,12,71, 6,23,19, 6,23,20,15,15,22,15,15,21, 0, 0, 0, 6,23, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,11, 6,31,21, 5,18,21, 4,17,38, 4,17,35, + 4,17,36, 5,18,19, 5,18,15, 6,31,26, 5,18,16, 5,18,20, 6,31,28, 5,18,17, + 5,18,22, 6,31,22, 6,31,27, 6,31,18, 5,18,18, 6,31,20,15,20,41,15,20,42, + 15,20,43,15,20,44, 0, 0, 0, 6,31,25, 6,31,17, 0, 0, 0, 0, 0, 0, 6,31,29, + 6,31,23, 0, 0, 0, 6,31,19, 6,40,25, 4,23,30, 6,40,30, 5,23,89, 5,23,90, + 4,23,24, 5,23,88, 6,40,26, 4,23,23, 5,24, 1, 5,24, 2, 6,31,24, 6,40,32, + 6,40,29, 6,40,27, 5,23,93, 6,40,24, 0, 0, 0,15,26,66,15,26,67, + /* plane 2, page 33 */ + 1, 255, /* first, last */ + 6,40,31, 0, 0, 0, 0, 0, 0, 5,23,91, 5,23,87, 6,40,33, 5,23,94, + 15,32,11, 0, 0, 0, 5,30,88, 4,29, 2, 5,37,50, 4,29, 5, 5,30,85, 5,30,84, + 4,29, 4, 0, 0, 0, 0, 0, 0, 5,30,87, 5,30,90, 6,50,30, 6,50,27, 6,50,29, + 6,60,43, 0, 0, 0, 5,30,91, 6,50,28, 5,30,86, 0, 0, 0, 5,30,89, 6,60,44, + 6,60,45, 5,37,56, 4,35,20, 5,37,47, 5,37,53, 6,60,42, 5,37,52, 5,37,55, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,39,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,37,57, 5,37,48, 5,37,54, 5,37,49, 7, 2,55, 7, 2,57, 5,44,84, 5,44,83, + 5,44,85, 4,41,55, 5,44,86, 0, 0, 0, 5,44,88, 4,41,54, 7, 2,54, 7, 2,53, + 0, 0, 0, 0, 0, 0, 7, 2,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,44,87, 5,44,89, 5,44,82, 0, 0, 0, 7,13,48, 5,52,30, 7,13,50, + 7,13,56, 5,52,29, 4,48, 8, 7,13,55, 7,13,54, 5,52,27, 7,13,49, 5,52,28, + 0, 0, 0, 7,13,52, 5,52,31, 7,13,47, 0, 0, 0, 0, 0, 0, 4,48,10, 5,59,33, + 5,59,34, 4,54,12, 7,23,75,15,57,92, 0, 0, 0, 0, 0, 0, 7,23,73, 0, 0, 0, + 7,23,74, 5,65,58, 5,65,57, 5,65,56, 0, 0, 0, 7,38,70, 4,63,61, 5,71,71, + 4,63,60, 7,38,69, 7,38,71, 0, 0, 0, 0, 0, 0, 5,71,72,15,66,19, 0, 0, 0, + 7,45,56, 5,76, 1, 0, 0, 0, 7,51,19, 7,55,76, 5,79,91, 5,83,29, 7,55,75, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,66, 7,62,67, 5,87,57, 0, 0, 0, 7,67,48, + 7,67,85, 4, 1,88, 6, 7,34, 5, 4, 6, 0, 0, 0, 4, 4, 6, 6,11, 4,15, 6,77, + 15, 6,78, 6,16,73, 6,16,72,15,10,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,23,21, 5,18,23, 6,40,34, 5,24, 3, 0, 0, 0, 0, 0, 0, 6,50,31, + 0, 0, 0, 0, 0, 0, 5,37,58, 0, 0, 0,15,39,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,57, 0, 0, 0,15,74,46, 6, 1,82, + 0, 0, 0, 6, 1,83, 6, 2,88, 5, 1,73, 6, 2,87,15, 1,66, 4, 2,71, 4, 4, 7, + 5, 4, 7,15, 4, 6, 0, 0, 0, 6, 9,62, 6,11, 5, 5, 6, 4, 5, 6, 5, 6,16,74, + 6,16,33, 4,15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,22, 4,17,42, + 0, 0, 0, 0, 0, 0, 6,40,35, 5,30,92, 5,37,59, 7, 2,59,15,39,69, 6,60,46, + 15,46,63, 7, 2,60, 7, 2,61, 0, 0, 0, 4,54, 6, 0, 0, 0, 7,55,77, 4, 2,72, + 5, 2,62, 6, 4,68, 5, 2,61, 6, 4,67, 6, 4,66, 6, 4,70, 4, 2,73, 0, 0, 0, + 6, 4,69, 0, 0, 0, 0, 0, 0, 6, 7,37, 5, 4,10, 5, 4,12, 5, 4,11, 5, 4, 8, + 5, 4, 9, 6, 7,36, 6, 7,40, 6,11, 8, 0, 0, 0, 6, 7,35, 0, 0, 0, 6, 7,38, + 5, 4,13, 0, 0, 0, 5, 6,12, 5, 6, 8, 5, 6, 7, 5, 6,11, 5, 6,10, 4, 6,25, + 6,11, 6, 6,11, 9, 6,11, 7, 4, 6,30, 6,11,10,15, 6,80,15, 6,81,15, 6,82, + /* plane 2, page 34 */ + 0, 255, /* first, last */ + 15, 6,83,15, 6,84, 5, 6, 9, 0, 0, 0, 5, 6,13, 6,11,11, 0, 0, 0, 5, 9, 8, + 5, 9,10, 4, 9, 7, 6,16,76, 5, 9, 9, 6,16,77,15,10,55,15,10,57,15,10,56, + 15,10,58,15,10,59,15,10,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,16,75, + 0, 0, 0, 5,13,29, 5,13,32, 5,13,30, 5,13,33, 5,13,27, 6,23,26, 6,23,27, + 4,12,78, 5,13,34, 5,13,31, 6,23,28, 5,13,28, 6,23,25, 0, 0, 0, 0, 0, 0, + 15,15,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,23, 6,23,24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,12,91, 5,18,36, 5,18,27, 5,18,25, 4,17,45, 6,31,35, + 5,18,34, 6,31,40, 6,31,30, 5,18,29, 5,18,28, 5,18,31, 5,18,30, 6,31,31, + 6,31,32, 5,18,33, 5,18,24, 4,17,48, 6,31,36, 5,18,35, 5,24, 8, 0, 0, 0, + 6,31,33, 0, 0, 0,15,20,45,15,20,46,15,20,47,15,20,48,15,20,49,15,20,50, + 15,20,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,31,39, 6,38,29, 0, 0, 0, + 5,18,26, 6,31,34, 5,18,32, 6,40,42, 4,17,43, 5,24,11, 5,24,12, 5,24,13, + 6,40,43, 6,40,46, 5,24, 7, 6,40,45, 4,23,34, 5,24,10, 5,24, 6, 6,40,41, + 4,23,35, 5,24, 5, 6,50,36, 6,40,38, 6,40,39, 5,24, 4,15,26,69,15,26,71, + 15,26,72,15,26,73,15,26,74, 0, 0, 0, 6,40,40, 0, 0, 0, 6,40,44, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,26,70, 0, 0, 0, 0, 0, 0, 4,29,11, + 5,31, 5, 4,29,12, 6,50,33, 6,50,34, 5,31, 2, 5,31, 3, 6,50,39, 5,30,93, + 0, 0, 0, 6,50,37,15,33,26,15,33,27,15,33,28, 0, 0, 0, 6,50,35, 0, 0, 0, + 6,50,40, 0, 0, 0, 5,31, 4, 5,30,94, 6,50,38, 4,35,24, 5,37,60, 4,35,23, + 5,37,62, 6,60,48, 0, 0, 0, 5,37,64, 5,37,63, 6,60,47,15,39,71,15,39,72, + 15,39,73,15,39,74,15,39,75,15,39,76,15,39,77,15,39,78,15,39,79, 0, 0, 0, + 6,60,49, 0, 0, 0, 6,64,17, 0, 0, 0,15,42,52, 7, 2,62, 4,41,58, 4,23,31, + 4,41,56, 5,44,90, 4,41,57, 7,13,57, 7, 2,66, 5,44,92, 5,44,94,15,46,64, + 15,46,66,15,46,67, 7, 2,63, 7, 2,65, 7, 2,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 2,64, 5,44,91, 5,52,33, 5,44,93, 5,52,35, 5,52,32, 4,48,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,36,15,52,31,15,52,32,15,52,33, + 15,52,34, 7,23,78, 5,59,36, 7,23,76, 7,23,77,15,57,94,15,58, 1,15,58, 2, + 15,58, 3, 0, 0, 0, 5,59,35, 0, 0, 0, 7,23,79, 5,59,37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,31,49, 7,31,46, 5,65,59,15,62,58,15,62,60, 7,31,45, 7,31,47, + 0, 0, 0, 0, 0, 0, 7,31,44,15,62,59, 0, 0, 0, 7,31,48, 0, 0, 0, 7,38,72, + 7,38,73, 5,65,60, 5,71,73, 0, 0, 0, 0, 0, 0,15,66,20,15,66,21,15,66,22, + 5,71,74, 0, 0, 0, 0, 0, 0, 5,76, 4, 5,76, 3, 7,45,61, 7,45,59, 5,76, 2, + /* plane 2, page 35 */ + 0, 254, /* first, last */ + 7,45,58, 0, 0, 0, 7,45,60, 7,45,62, 4,70,28, 0, 0, 0, 7,51,20, 7,51,65, + 5,83,30, 7,55,78, 0, 0, 0, 7,55,79, 0, 0, 0, 5,85,74, 0, 0, 0,15,74,47, + 0, 0, 0, 7,59,45, 7,62,68, 7,66,22, 5,90,72, 5,90,71,15,76,91,15, 1,67, + 15, 2,43,15, 2,44, 0, 0, 0, 6,11,12,15, 4, 7, 6,11,13, 6,11,14, 0, 0, 0, + 15,15,25, 0, 0, 0,15,15,27,15,15,28, 0, 0, 0,15,15,26, 5,18,37,15,20,52, + 6,40,47,15,26,75,15,26,76, 5,31, 6, 6, 1,31, 6, 1,85, 0, 0, 0, 6, 2,89, + 0, 0, 0, 6, 7,41, 0, 0, 0, 4, 4,10, 6,16,80, 6, 7,45,15, 4, 8, 0, 0, 0, + 6, 7,43, 0, 0, 0, 6, 7,46, 4, 6,31, 6,11,16, 5, 6,14, 6,11,17, 3,10,25, + 0, 0, 0, 4, 7,33, 6,21, 3, 6,16,82, 6,16,83, 6,16,81, 6,16,79, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,16,78, 0, 0, 0, 0, 0, 0, 6,23,31, 6,23,30, 4,12,79, + 6,23,29, 0, 0, 0, 6,23,32, 0, 0, 0, 6,31,41, 6,31,42, 6,31,43, 6,31,44, + 6,31,45, 6,31,46, 4,23,36, 6,40,48, 6,40,52, 6,40,51, 6,40,49,15,26,77, + 6,40,50, 0, 0, 0, 6,50,41, 5,31, 7,15,33,29, 0, 0, 0, 6,60,51, 6,60,52, + 6,60,50, 0, 0, 0, 0, 0, 0, 5,37,65, 7, 2,68, 0, 0, 0, 7,13,58, 7,13,60, + 4,48,15, 5,52,37, 7,23,81, 7,23,80, 0, 0, 0, 0, 0, 0, 7,55,80, 7,67,49, + 7,67,50, 7,69,22, 6, 1,32, 6, 1,86, 0, 0, 0, 0, 0, 0,15, 2,45, 4, 4,11, + 6, 7,48, 6, 7,47, 0, 0, 0, 5, 4,14, 6,11,18, 0, 0, 0, 6,16,86, 6,16,85, + 0, 0, 0, 0, 0, 0, 6,16,87, 0, 0, 0, 5,14,72, 6,31,47, 5,24,14, 0, 0, 0, + 6,50,42, 6,60,53, 7, 2,69, 7,13,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 1,10, 5, 1,39, 6, 1,88, 0, 0, 0, 6, 1,92, 6, 1,87, 0, 0, 0, 6, 1,90, + 6, 1,91, 0, 0, 0, 6, 3, 1, 6, 3, 2, 6, 2,92, 6, 2,90, 6, 3, 3, 6, 2,91, + 6, 2,93, 6, 2,94, 5, 1,74, 5, 2,64, 0, 0, 0, 5, 2,63, 0, 0, 0, 0, 0, 0, + 6, 4,72, 6, 4,73, 6, 4,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4,75, 5, 4,15, + 6, 7,49, 5, 4,17, 6, 7,51, 5, 4,16,15, 4, 9, 0, 0, 0,15, 4,10,15, 4,11, + 15, 4,12, 6, 7,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4,18, 5, 6,15, 6,11,22, + 6,11,19, 6,11,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,11,23, 6,11,21, 6,16,94, 5, 9,12, 6,16,93, 4, 9,16, + 6,16,89, 5, 9,11, 6,16,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,13,36, 0, 0, 0, 5,13,35, 5,13,37, + 6,23,35, 6,23,33, 5,13,38,15,15,29, 6,23,34, 0, 0, 0, 5,18,42, 5,18,40, + 5,18,41, 6,31,54, 6,31,48, 4, 9,15, 6,40,53, 6,31,50, 6,31,51, 5,18,39, + 6,31,49,15,20,53,15,20,54,15,20,55, 6,31,52, 6,31,55, 6,31,53, + /* plane 2, page 36 */ + 0, 254, /* first, last */ + 6,40,54, 6,40,57, 5,24,15, 5,24,18, 5,24,17, 6,40,58, 5,24,16, 6,40,56, + 6,40,55, 0, 0, 0, 5,31, 8, 4,29,17, 6,50,43,15,33,32, 0, 0, 0, 6,50,44, + 0, 0, 0, 0, 0, 0, 5,37,66, 6,60,54, 5,37,67, 6,60,55, 6,60,57, 0, 0, 0, + 15,39,80, 6,60,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,60,56, 5,45, 1, 5,45, 2, + 4,41,64, 7, 2,70,15,46,68,15,46,69, 7, 2,71, 7,13,63, 5,52,38, 4,48,16, + 7,13,64, 7,13,62, 0, 0, 0, 0, 0, 0, 7,23,83, 7,23,82, 0, 0, 0, 7,23,84, + 15,58, 4, 0, 0, 0, 4,59, 2, 5,65,62, 7,31,50,15,62,61, 0, 0, 0, 5,65,61, + 7,38,77, 7,38,75, 7,38,79, 7,38,74, 7,38,76, 0, 0, 0, 5,71,75, 5,76, 5, + 7,45,63, 4,63,63, 7,45,65, 7,45,64, 5,76, 6, 0, 0, 0, 5,79,92, 5,79,93, + 4,70,29, 7,51,21, 5,83,31, 7,64,28, 7,64,79, 7,68,38, 0, 0, 0, 0, 0, 0, + 6, 4,78, 6, 4,76, 6, 4,77, 5, 4,19, 6,17, 1, 6,11,24, 6,13,18, 6,17, 4, + 6,23,36, 6,17, 2, 6,17, 3, 6,23,38, 6,23,37, 0, 0, 0, 6,31,56, 0, 0, 0, + 0, 0, 0, 6,47, 1, 5,24,19, 6,40,60, 6,40,59, 0, 0, 0, 5,31,10, 0, 0, 0, + 6,60,60, 6,60,63, 6,60,61, 6,60,59, 0, 0, 0, 6,60,62, 0, 0, 0, 7,13,65, + 7,13,46, 4,48,18, 7,23,85, 7,31,53, 0, 0, 0, 7,31,52, 7,31,51, 7,38,82, + 7,38,80, 7,38,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,55,81, 7,59,46, 7,66,23, + 6, 3, 5, 6, 3, 4,15, 1,68, 6, 4,81, 6, 4,79, 0, 0, 0, 0, 0, 0,15, 4,13, + 6, 7,52, 5, 6,16, 6,11,27, 0, 0, 0, 6,11,26, 0, 0, 0, 0, 0, 0, 6,23,39, + 4,12,84, 4,12,83, 0, 0, 0, 0, 0, 0, 5,21,64, 6,31,61, 6,31,57, 6,31,58, + 15,20,56,15,20,57,15,20,58, 6,31,60, 6,31,59, 5,18,43, 6,40,61, 6,40,64, + 6,40,62, 6,40,63,15,26,78, 0, 0, 0, 6,50,49, 6,50,46, 6,50,48, 6,50,47, + 15,33,33, 4,35,28, 6,60,64, 7, 2,75, 7, 2,76, 7, 2,73, 7, 2,74, 5,45, 3, + 4,48,19, 0, 0, 0, 5,52,39, 7,13,68, 7,23,86, 7,31,54,15,71,52, 7,45,66, + 7,51,22, 5,83,33, 0, 0, 0,15,76, 7, 0, 0, 0, 6, 1,93, 5, 1,75, 4, 1,89, + 5, 2,65, 0, 0, 0, 4, 2,78, 5, 2,66, 5, 4,20, 6, 7,56, 5, 4,21, 6, 7,55, + 6, 7,57, 6, 7,59, 6, 7,54, 5, 4,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7,53, + 6, 7,58, 0, 0, 0, 5, 6,19, 6,11,29, 5, 6,17, 6,11,28, 5, 6,18, 5, 9,13, + 6,11,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 9,19, 6,17, 6, 5, 9,16, 5, 9,14, + 6,17, 8, 0, 0, 0, 5, 9,18, 5, 9,17, 0, 0, 0,15,10,62, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,17, 7, 6,23,45, 4,12,89, 4,12,87, 4,12,92, 4,12,85, 5,13,43, + 5,13,41, 4,12,88, 4,12,90, 4,12,86, 4,12,91, 5,13,42, 6,23,41, 6,23,47, + 6,23,44,15,15,31,15,15,32, 0, 0, 0, 6,23,43, 6,23,48, 6,23,46, + /* plane 2, page 37 */ + 0, 255, /* first, last */ + 6,23,42, 4,17,54, 5,18,47, 6,31,72, 6,31,65, 0, 0, 0, 5,18,44, 5,18,49, + 5,18,46, 6,31,64, 5,18,48, 4,17,56, 6,31,71, 6,31,69, 6,31,66, 4,17,57, + 6,31,70, 5,18,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,31,68, 0, 0, 0, 6,31,63, 0, 0, 0, 6,31,67, 6,40,68,15,20,60, 4,23,38, + 5,24,22, 5,24,21, 5,24,27, 5,24,26, 5,24,23, 4,23,39, 6,40,65, 5,24,20, + 6,40,67, 5,24,24, 4,17,53,15,26,80, 0, 0, 0, 6,40,66, 0, 0, 0, 0, 0, 0, + 15,26,79, 5,24,25, 0, 0, 0, 5,31,12, 5,31,11, 6,50,50, 6,50,52, 6,50,55, + 6,50,51, 0, 0, 0, 0, 0, 0,15,33,34,15,33,35,15,33,36,15,33,37,15,33,38, + 15,33,39, 0, 0, 0, 0, 0, 0, 6,50,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,50,54, + 6,54,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,31,13, 4,29,18, 6,60,70, + 6,60,67, 5,37,70, 6,60,66, 4,35,30, 5,37,69, 4,35,33, 4,35,32, 6,60,65, + 5,37,72, 5,37,74, 5,37,68, 6,60,72, 6,60,73, 6,60,74, 5,37,71, 6,60,68, + 15,39,81,15,39,82,15,39,83,15,39,84,15,39,85, 0, 0, 0, 0, 0, 0, 6,60,69, + 0, 0, 0, 0, 0, 0, 4,41,68, 5,45, 4, 5,59,40, 4,41,67, 4,41,66, 5,45, 5, + 7, 2,77, 7, 2,79, 0, 0, 0,15,46,70,15,46,71, 0, 0, 0, 7, 2,78, 7, 2,80, + 0, 0, 0, 7,13,69, 5,52,40, 5,52,42, 7,13,71, 0, 0, 0, 7,13,70, 0, 0, 0, + 0, 0, 0,15,52,36,15,52,37, 7,13,72, 5,52,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,59,39, 7,23,87, 4,54,16, 0, 0, 0, 0, 0, 0,15,60,63, 5,59,38, 5,65,64, + 7,31,55, 5,65,63, 7,31,56,15,62,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,65, + 7,38,83, 7,38,85, 7,38,86, 7,45, 2, 7,38,84, 5,76, 7, 4,67,30, 4,67,29, + 15,69,10, 0, 0, 0, 7,45,67, 7,51,23, 5,79,94, 7,55,82, 4,74,39, 5,89, 8, + 0, 0, 0, 5, 1,17, 6, 2, 1, 4, 2,79, 5, 1,76, 6, 3, 6, 0, 0, 0, 0, 0, 0, + 15, 2,47, 0, 0, 0, 6, 4,85, 5, 2,67, 6, 7,64, 5, 2,73, 6, 7,61, 5, 2,68, + 6, 4,83, 6, 4,84, 5, 2,69, 6, 7,60, 0, 0, 0, 6, 7,62, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 7,65, 0, 0, 0, 6, 4,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2,72, + 5, 4,23, 5, 4,25, 4, 6,37, 6, 7,70, 6, 7,68, 6,11,38, 6, 7,71, 0, 0, 0, + 6,11,32, 6, 7,66, 6, 7,67, 6,11,36, 6, 7,69, 6, 7,72, 0, 0, 0, 3, 5,94, + 6, 7,73, 0, 0, 0, 0, 0, 0, 5, 4,26,15, 4,14,15, 4,15,15, 4,17,15, 4,18, + 15, 4,20,15, 4,21,15, 4,22,15, 6,87,15, 6,88,15, 6,89,15, 6,90,15, 6,91, + 15, 6,93,15, 6,94,15, 7, 1,15, 6,92, 6,11,37, 0, 0, 0, 6,11,33, 0, 0, 0, + 0, 0, 0, 6,11,34, 4, 4,13, 0, 0, 0, 0, 0, 0,15, 4,16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 6,36, 5, 6,20, 6,11,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6,39, + /* plane 2, page 38 */ + 0, 255, /* first, last */ + 6,11,44, 4, 9,39, 6,17,15, 4, 6,43, 6,11,45, 6,17, 9, 5, 6,21, 6,17,12, + 6,11,47, 4, 6,42, 5, 6,23, 4, 9,24, 5, 6,22, 4, 9,35, 6,11,41, 5, 6,24, + 4, 6,49, 4, 9,36, 6,17,10, 6,17,11, 6,11,48, 6,11,39, 6,17,13, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15, 6,85, 0, 0, 0, 0, 0, 0,15, 7, 2,15,10,80, 0, 0, 0, + 4, 9,38, 0, 0, 0, 0, 0, 0, 6,17,14, 0, 0, 0, 0, 0, 0, 6,11,40, 6,11,42, + 6,11,46, 0, 0, 0, 6,11,43,15,10,68, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,10,63, + 15,10,66,15,10,69,15,10,72,15,10,76, 6,23,59, 6,23,57, 6,17,18, 4, 9,41, + 5, 9,23, 0, 0, 0, 4, 9,34, 4,13, 9, 5,13,46, 5, 9,22, 6,17,25, 6,23,55, + 6,17,19, 4,12,93, 5,13,44, 6,17,21, 6,23,51, 4,13, 1, 6,17,24, 5, 9,20, + 4,12,94, 6,17,26, 6,17,17, 6,17,23, 6,23,54, 6,23,53, 4,13,10, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,17,20,15,10,65, + 15,10,70,15,10,73,15,10,75,15,10,77,15,10,78,15,10,79,15,15,38,15,15,39, + 15,15,40,15,15,42, 6,23,50,15,15,36, 0, 0, 0, 0, 0, 0, 6,23,56, 0, 0, 0, + 15,10,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,13,45, 0, 0, 0, + 6,23,49, 5,13,50, 5,13,56, 5,13,59, 6,31,77, 6,23,67, 6,31,79, 6,31,75, + 6,31,80, 6,23,68, 5,13,53, 6,31,73, 4,13,14, 6,31,83, 5,13,54, 4,13, 6, + 5,18,61, 5,13,49, 5,13,60, 6,23,66, 6,23,61, 5,18,52, 6,23,63, 6,23,65, + 6,31,76, 6,23,64, 6,31,81, 4,13, 7, 5,13,48, 6,23,60, 5,18,51, 6,31,82, + 6,31,84, 5,18,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,13,47, + 0, 0, 0,15,15,33,15,15,34,15,15,35,15,15,41,15,15,43,15,20,61,15,20,63, + 15,20,64,15,20,68,15,20,69,15,20,70,15,20,71,15,20,72, 6,31,74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,23,69, + 6,23,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,13,52, 5,13,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,23,58, 6,40,81, 4,23,45, 5,18,57, 6,31,92, 4,23,43, 6,40,83, + 6,40,73, 5,24,53, 6,31,94, 6,40,82, 6,32, 2, 4,17,69, 5,13,51, 4,17,77, + 6,31,87, 6,40,78, 4,17,65, 5,24,31, 5,18,55, 5,18,58, 4,23,44, 6,31,89, + 5,18,60, 6,31,86, 6,31,78, 4,17,73, 5,24,28, 6,40,80, 5,18,62, 4,17,63, + 6,31,93, 6,31,91, 6,31,90, 6,40,70, 6,40,76, 5,24,30, 5,24,33, 6,40,84, + 5,18,53, 6,40,75, 6,40,86, 6,40,71, 6,40,69, 6,31,85, 5,24,32, 0, 0, 0, + 15,20,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,20,62, + 15,20,66,15,20,67,15,20,73,15,20,74,15,20,75,15,20,76,15,20,77,15,20,79, + /* plane 2, page 39 */ + 0, 255, /* first, last */ + 15,20,80,15,20,82,15,26,82,15,26,83,15,26,84,15,26,85,15,26,86,15,26,87, + 15,26,89,15,26,90,15,26,92,15,26,93,15,26,94,15,27, 1,15,27, 2,15,27, 5, + 15,27, 9,15,27,10,15,27,12,15,27,14, 0, 0, 0, 0, 0, 0, 6,40,72, 5,18,54, + 0, 0, 0, 0, 0, 0, 6,31,88,15,27, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,20,78, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,41, 4, 6,40,77, 6,32, 1, 0, 0, 0,15,27, 4, + 4,29,31, 5,24,42, 5,24,45, 5,24,50, 4,23,47, 4,23,55, 4,23,49, 6,50,61, + 6,41, 3, 5,24,48, 6,41, 2, 4,23,51, 5,24,54, 5,24,56, 5,24,35, 6,50,65, + 5,24,58, 5,31,19, 4,23,59, 5,24,51, 6,41, 1, 5,24,38, 6,40,91, 5,31,20, + 5,24,36, 5,24,52, 5,18,63, 6,50,56, 5,24,39, 4,29,22, 4,23,56, 5,24,57, + 5,24,49, 5,24,43, 5,31,17, 6,40,87, 5,24,47, 5,24,29, 6,40,94, 6,50,66, + 6,50,67, 6,50,58, 6,40,93, 5,24,55, 6,50,62, 6,50,64, 0, 0, 0, 5,31,15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,29,32, 4,23,50, 5,24,41, + 6,40,89,15,26,81,15,26,91,15,27, 3,15,27, 8,15,27,13,15,33,40,15,33,46, + 15,33,48,15,33,49,15,33,50, 0, 0, 0, 0, 0, 0, 6,50,60, 6,50,63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,50,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,40,90, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,27,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,24,46, + 0, 0, 0, 5,31,14, 5,24,44, 0, 0, 0,15,20,81,15,39,93, 5,31,28, 5,31,22, + 5,31,21, 6,50,75, 5,45, 6, 5,31,37, 6,60,79, 5,31,25, 5,31,31, 5,31,36, + 6,60,84, 6,50,79, 5,37,75, 0, 0, 0, 5,31,27, 6,60,76, 6,50,69, 5,31,24, + 5,31,29, 5,31,26, 6,50,57, 4,41,78, 6,60,86, 6,60,89, 5,31,35, 6,50,72, + 6,60,82, 4,35,47, 6,60,88, 6,60,87, 5,31,33, 5,37,77, 5,31,30, 6,60,81, + 6,60,78, 6,60,77, 5,31,23, 6,50,71, 0, 0, 0, 0, 0, 0, 6,50,77,15,33,42, + 15,33,43,15,33,44,15,33,45,15,33,47,15,33,51,15,39,86,15,39,87,15,39,89, + 15,39,90,15,40, 5,15,40, 8, 6,60,80, 6,60,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,31,32,15,33,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,60,83, 6,50,78, 0, 0, 0, 0, 0, 0, + 6,61, 3, 6,61, 7, 4,35,37, 4,35,36, 5,45, 7, 0, 0, 0, 6,60,92, 5,37,87, + 5,37,86, 5,37,83, 4,29,21, 6,60,91, 7, 2,82, 0, 0, 0, 7, 2,85, 5,45, 9, + 5,37,80, 5,37,79, 5,37,76, 5,37,81, 5,37,82, 5,37,89, 6,61, 5, 6,60,93, + 6,60,94, 6,50,74, 6,61, 2, 7, 2,84, 6,61, 1, 7, 2,87, 5,37,84, 5,37,88, + /* plane 2, page 40 */ + 0, 255, /* first, last */ + 7,13,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,35,51,15,39,88,15,39,92,15,39,94,15,40, 1,15,40, 3, + 15,40, 4,15,40, 6,15,46,73,15,46,74,15,46,75,15,46,76,15,46,77,15,46,78, + 15,46,79,15,46,83,15,46,85, 0, 0, 0, 7, 2,83, 0, 0, 0, 7, 2,88, 6,60,75, + 5,37,78, 6,60,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,45, 8, 0, 0, 0, 5,37,85, 0, 0, 0, + 0, 0, 0, 7,13,81, 4,41,70, 4,35,50, 7,13,75, 4,41,81, 7,13,77, 5,45,15, + 7,13,83, 4,41,74, 5,45,14, 7, 2,89, 5,45,19, 4,41,82, 7,13,85, 5,24,37, + 5,45,18, 5,45,21, 4,48,21, 4,48,22, 7, 3, 1, 5,45,20, 7,23,92, 5,45,16, + 5,52,46, 4,54,20, 7, 2,90, 7, 3, 2, 0, 0, 0, 0, 0, 0, 5,52,52, 5,45,11, + 5,45,13, 5,52,45, 5,45,12, 7,14, 2, 7,13,87, 7,13,86, 7, 2,94, 4,48,28, + 7,13,80, 7,13,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40, 2, 0, 0, 0, + 0, 0, 0,15,46,80, 7,13,82, 0, 0, 0, 5,45,17, 7,13,76,15,46,81,15,46,82, + 15,46,84,15,46,86,15,52,39,15,52,40,15,52,42,15,52,43,15,52,49,15,52,51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,13,84, 5,52,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,16,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2,93, 7, 5,81, 4,41,80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,44, 5,52,47, 0, 0, 0,15,46,72, + 0, 0, 0,15,52,47, 5,52,48, 5,52,50, 7,13,91, 7,13,88, 5,52,53, 5,52,54, + 5,52,49, 7,13,94, 7,13,92, 7,13,93, 5,52,55, 4,48,29, 5,59,41, 7,14, 1, + 7,23,91, 7,23,93, 7,23,90, 7,24, 1, 5,59,43, 7,13,90, 7,23,89, 7,13,78, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52,45, 0, 0, 0, + 5,52,51, 7,24, 2,15,52,41,15,52,46,15,52,50,15,58, 5,15,58, 6,15,58,14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,58, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,59,42, 5,52,56,15,58,10,15,52,44, 7,23,88, 5,59,49, 4,54,21, + 4,54,17, 4,59,10, 5,59,46, 5,65,68, 5,65,66, 7,31,59, 7,24, 6, 0, 0, 0, + 4,59, 6, 5,59,45, 5,59,47, 7,24, 3, 7,24, 5, 5,59,48, 5,65,67, 7,31,58, + 5,65,69, 7,31,57, 7, 2,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,58,11,15,58,13,15,62,63,15,62,64,15,62,66,15,62,67,15,62,69,15,62,70, + 15,62,71, 0, 0, 0, 7,31,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24, 4,15,58, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,59, 7, 5,59,50, 7,38,89, 7,31,61, 5,65,72, + /* plane 2, page 41 */ + 0, 255, /* first, last */ + 7,45,68, 4,63,67, 4,63,66, 7,38,92, 5,65,73, 7,45,71, 4,59, 8, 5,65,74, + 7,39, 5, 7,39, 1, 7,38,88, 5,65,71, 7,38,94, 0, 0, 0, 5,71,77, 7,38,90, + 5,71,80, 7,38,87, 7,39, 2, 7,31,62, 0, 0, 0, 7,38,93, 5,71,78,15,62,68, + 5,71,79, 7,38,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,76,15,66,25, 7,39,10, 4,67,36, + 7,39, 7, 5,71,84, 7,39, 4, 5,76,10, 7,39, 9, 7,39, 6, 7,31,63, 5,71,85, + 4,67,31, 5,71,81, 5,76, 8, 7,39,11, 7,39, 3, 7,45,69, 5,71,87, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,66,26,15,66,24,15,66,27,15,66,28,15,66,29, 0, 0, 0, + 0, 0, 0, 7,45,70, 0, 0, 0, 5,65,70, 5,71,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,69,11, 5,71,86, 5,76, 9, 7,51,25, 7,45,74, 4,67,33, + 7,45,73, 4,67,37, 7,51,24, 7,45,75,15,71,53, 0, 0, 0, 0, 0, 0, 7,59,47, + 4,70,30, 0, 0, 0, 5,76,11, 7,55,83, 7,55,84, 7,55,85, 7,51,27, 7,51,26, + 0, 0, 0, 7,51,28, 0, 0, 0, 0, 0, 0,15,73,34, 7,55,86, 7,59,48, 7,59,50, + 7,59,51, 7,59,49, 0, 0, 0,15,74,48,15,73,33,15,74,49,15,74,50, 7,59,53, + 5,87,58, 7,59,52, 7,62,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,74,51,15,75,39,15,75,40, 5,87,59, 7,62,70, 5,89, 9, 7,62,71,15,76, 8, + 0, 0, 0,15,76, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,77,82,15,76,92,15,76,93, + 5,91,30, 5,91,64, 0, 0, 0,15,77,20, 0, 0, 0, 0, 0, 0, 5, 2,74, 4, 2,82, + 6, 4,86, 0, 0, 0, 0, 0, 0, 6, 7,75, 5, 4,27, 6, 7,74, 6, 7,77, 0, 0, 0, + 0, 0, 0, 6, 7,76, 4, 6,50, 6,11,49, 6,11,56, 6,11,52, 6,11,54, 4, 6,51, + 6,11,53, 6,11,51, 6,11,55,15, 7, 4,15, 7, 3, 0, 0, 0, 6,17,29, 6,17,27, + 6,17,30, 6,17,32, 4, 9,44, 6,17,33, 6,17,31, 0, 0, 0,15,10,81,15,10,82, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,17,28, 6,23,71, + 5,13,63, 6,23,73, 5,13,62, 6,23,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,18,65, + 4,17,79, 6,32, 5,15,20,83,15,20,84, 0, 0, 0, 0, 0, 0, 6,32, 4, 5,18,64, + 6,41, 8, 6,41, 7, 6,41, 5, 6,41, 6, 4,23,60, 6,41, 9,15,27,15, 0, 0, 0, + 0, 0, 0, 5,24,59, 5,24,60,15,20,86, 4,29,36, 6,50,81, 5,31,39, 0, 0, 0, + 5,31,41, 0, 0, 0, 0, 0, 0,15,33,53, 4,29,33, 0, 0, 0, 0, 0, 0, 6,50,80, + 5,31,40, 0, 0, 0, 6,61, 9, 0, 0, 0, 6,61,10, 5,37,90, 5,37,92, 5,37,91, + 7, 3, 4, 5,37,93,15,40, 9,15,40,10, 6,61, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,45,22, 4,41,83, 4,41,84, 7, 3, 8, 7, 3, 7, + 7, 3, 5, 6,61,11, 7, 3, 3, 0, 0, 0, 0, 0, 0,15,46,91, 7, 3, 9, 7, 3, 6, + /* plane 2, page 42 */ + 4, 255, /* first, last */ + 15,46,87,15,46,88,15,46,90, 7, 3,10, + 7,14,10, 7,14, 5, 7,14, 4, 7,14, 7, 7,14, 6, 7,14, 9, 7,14, 8, 0, 0, 0, + 7,12,67, 7,17,80, 7,14, 3, 7,24, 7, 5,59,51,15,58,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,31,64, 7,39,13, 4,63,69, 0, 0, 0, 0, 0, 0, 7,39,14, 5,76,12, + 15,69,12, 5,80, 1, 0, 0, 0, 7,51,29, 6, 3, 7, 5, 1,77, 6, 4,87, 0, 0, 0, + 0, 0, 0, 6, 4,88, 4, 4,20, 0, 0, 0,15, 4,23,15, 4,24, 0, 0, 0, 5, 6,25, + 0, 0, 0, 0, 0, 0, 6,11,57, 0, 0, 0, 6,11,58, 0, 0, 0, 0, 0, 0, 6,17,35, + 6,17,34, 6,17,36, 5, 9,25,15,10,83,15,10,84,15,10,85, 6,17,38, 0, 0, 0, + 0, 0, 0, 6,17,37, 0, 0, 0, 0, 0, 0, 5, 9,24, 6,23,76, 6,23,74, 6,23,75, + 5,13,65, 0, 0, 0, 0, 0, 0, 5,13,64, 0, 0, 0, 6,32, 6,15,20,87, 0, 0, 0, + 0, 0, 0, 5,24,61, 5,24,63, 5,24,64, 0, 0, 0, 5,24,62, 5,31,42, 0, 0, 0, + 5,37,94, 4,35,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3,11, 0, 0, 0, 0, 0, 0, + 5,59,52, 0, 0, 0, 5,80, 2, 0, 0, 0, 0, 0, 0, 6, 3, 8, 5, 1,78, 0, 0, 0, + 6, 3, 9, 6, 3,10, 0, 0, 0, 5, 1,79, 5, 2,76, 4, 2,86, 6, 4,89, 0, 0, 0, + 5, 2,82, 5, 2,80, 5, 2,79, 5, 2,75, 5, 2,77,15, 2,48,15, 2,50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 2,81, 4, 4,23, 6, 7,83, 6, 7,86, 6, 7,85, 4, 6,55, + 5, 4,29, 6, 7,79, 4, 4,24, 4, 4,21, 6, 7,87, 5, 4,30, 4, 4,27, 6, 7,82, + 6,11,61, 6, 7,81, 6,11,69, 6,11,59, 6, 7,80, 5, 4,28, 6,11,60, 6, 7,84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 4,27,15, 4,28,15, 4,29,15, 4,30, + 15, 4,31,15, 4,32,15, 4,33,15, 4,35,15, 4,36, 0, 0, 0, 0, 0, 0,15, 4,37, + 0, 0, 0,15, 4,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,11,62, 6,11,63, 6,11,65, 5, 6,27, + 5, 9,26, 0, 0, 0, 6,11,68, 6,17,40, 5, 6,29, 6,17,42, 5, 6,28, 6,17,41, + 6,17,39, 0, 0, 0, 6,11,66, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7, 6,15, 7, 7, + 15, 7, 8,15, 7, 9,15, 7,10,15, 7,11,15, 7,12,15, 7,13,15, 7,15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 6,30, 0, 0, 0, 6,17,50, 6,17,52, 4, 9,56, 4, 9,47, + 4, 9,48, 6,17,51, 6,23,77, 5, 9,31, 5, 9,34, 5, 9,33, 6,17,45, 5, 9,39, + 4,13,20, 4, 9,60, 5, 9,30, 5, 9,29, 5,13,67, 4, 9,51, 6,23,78, 5, 9,40, + 4, 9,58, 6,17,48, 5, 9,32, 5, 9,36, 6,17,46, 6,17,54, 6,17,43, 5, 9,35, + /* plane 2, page 43 */ + 0, 255, /* first, last */ + 5, 9,28, 0, 0, 0, 0, 0, 0, 6,17,53, 0, 0, 0, 0, 0, 0, 6,17,49,15,10,86, + 15,10,87,15,10,88,15,10,89,15,10,90,15,10,91,15,10,92,15,10,93,15,10,94, + 15,11, 1,15,11, 3,15,11, 4,15,11, 5,15,11, 6,15,11, 7,15,11, 8,15,11, 9, + 15,11,10,15,15,51,15,15,60,15,15,65, 0, 0, 0, 0, 0, 0, 6,17,44, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,11, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 9,27, 5,13,66, 5,13,68, 0, 0, 0, 0, 0, 0, 4,13,29, + 6,23,85, 4,13,24, 5,13,77, 5,13,75, 4,13,25, 4, 9,55, 4,13,21, 5,13,74, + 6,23,91, 6,23,80, 6,23,93, 6,23,83, 5,13,73, 6,23,82, 6,23,87, 4,13,22, + 6,23,88, 5,13,76, 5,13,69, 4,13,23, 5,13,71, 5,13,72, 4,13,26, 6,23,90, + 5,13,70, 6,17,55, 6,23,86, 6,32, 7, 6,23,89, 6,23,84, 5, 9,38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,23,92, 6,23,94,15,15,44,15,15,45,15,15,46,15,15,47, + 15,15,48,15,15,49,15,15,50,15,15,53,15,15,54,15,15,55,15,15,58,15,15,59, + 15,15,61,15,15,62,15,15,64,15,15,66, 6,32, 8, 0, 0, 0,15,15,56, 0, 0, 0, + 6,23,79, 0, 0, 0,15,15,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,17,82, 4,17,83, 4,23,62, 5,18,73, 0, 0, 0, 6,32,17, 5,13,78, + 6,32,23, 5,18,67, 4,17,84, 4,18, 2, 4,17,86, 5,18,66, 4,17,93, 5,24,65, + 5,18,68, 6,32,20, 5,18,71, 6,32,21, 6,32,12, 6,32, 9, 4,18, 4, 6,41,15, + 6,41,10, 6,32,10, 5,18,69, 0, 0, 0, 6,41,13, 4,23,61, 6,32,15, 6,41,12, + 6,41,11, 5,18,72, 6,32,13, 6,41,14, 6,32,19, 0, 0, 0, 0, 0, 0, 6,32,16, + 4,17,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,32,14,15,20,88, + 15,20,89,15,20,90,15,20,91,15,20,92,15,20,94,15,21, 2,15,21, 3,15,21, 4, + 15,21, 5,15,21, 6,15,21, 7,15,21, 8,15,21, 9,15,21,10,15,21,11,15,21,12, + 15,21,14,15,21,13,15,21,15,15,21,16,15,27,17, 0, 0, 0,15,20,93, 0, 0, 0, + 5,18,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,24,75, 6,41,20, 4,23,73, 6,41,27, 6,41,22, 5,24,77, 6,41,33, + 5,24,84, 6,41,17, 4,29,49, 4,23,71, 5,24,66, 5,24,74, 4,23,63, 5,24,72, + 4,23,67, 5,24,73, 4,23,74, 5,24,70, 4,23,77, 5,24,79, 4,23,70, 6,41,34, + /* plane 2, page 44 */ + 0, 254, /* first, last */ + 6,41,35, 6,41,26, 5,24,81, 6,41,19, 6,41,38, 6,41,23, 5,24,80, 4,23,76, + 6,41,39, 6,41,18, 5,24,76, 5,24,78, 6,41,36, 5,24,68, 6,41,28, 6,41,37, + 6,41,32, 6,41,44, 6,41,31, 6,41,45, 6,41,40, 6,41,25, 5,24,82, 6,41,29, + 5,24,83, 5,24,71, 6,41,24, 6,41,43, 5,24,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,50,83,15,27,16,15,27,18,15,27,20,15,27,21,15,27,22,15,27,23,15,27,24, + 15,27,25,15,27,26,15,27,27,15,27,28,15,27,29,15,27,31,15,27,32,15,27,34, + 15,27,35,15,27,36,15,27,37,15,27,38,15,27,40,15,27,41,15,27,42, 0, 0, 0, + 6,50,84, 0, 0, 0, 6,41,30, 6,41,41, 0, 0, 0, 6,41,21, 0, 0, 0, 5,24,67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,31,50, + 6,50,91, 4,29,43, 4,29,41, 5,31,53, 4,29,38, 6,50,88, 4,29,45, 4,29,51, + 4,29,39, 4,29,50, 6,50,94, 5,31,49, 5,38, 1, 0, 0, 0, 5,31,43, 6,61,12, + 6,51, 5, 6,50,85, 6,51, 3, 6,51, 2, 5,31,45, 0, 0, 0, 5,31,51, 5,31,46, + 6,50,89, 6,51, 1, 5,31,48, 6,51, 4, 6,50,92, 0, 0, 0, 5,31,44, 6,50,90, + 5,31,47,15,33,54,15,33,55,15,33,56,15,33,57,15,33,58,15,33,59,15,33,60, + 15,33,61,15,33,62,15,33,64,15,33,65,15,33,67,15,33,68,15,33,69,15,33,70, + 15,33,71,15,33,73,15,40,16, 0, 0, 0, 0, 0, 0, 6,50,87, 6,50,93, 0, 0, 0, + 6,50,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,33,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,31,52, 0, 0, 0, 0, 0, 0, 6,61,22, 5,45,25, 5,38, 7, 5,38,10, 4,35,66, + 4,35,63, 6,61,28, 6,61,29, 6,61,14, 4,35,55, 6,61,31, 5,38, 6, 0, 0, 0, + 4,35,67, 5,45,24, 5,38, 9, 6,61,21, 4,35,57, 7, 3,15, 4,35,59, 4,35,58, + 7, 3,14, 7, 3,17, 0, 0, 0, 5,38, 4, 0, 0, 0, 4,35,69, 6,61,25, 6,61,30, + 6,61,26, 5,38, 8, 6,61,23, 5,38,11, 7, 3,12, 6,61,27, 6,61,19, 0, 0, 0, + 6,61,17, 5,38, 2, 4,35,64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,61,15, 6,61,20,15,40,11,15,40,12,15,40,13,15,40,14,15,40,15, + 15,40,19,15,40,20,15,40,21,15,40,23,15,40,24,15,40,26,15,40,27,15,40,25, + 15,40,28,15,40,29,15,40,30,15,40,31,15,40,32,15,40,33,15,40,34,15,40,35, + 15,40,36,15,40,37,15,40,39,15,40,40,15,40,41, 0, 0, 0,15,40,38, + /* plane 2, page 45 */ + 0, 255, /* first, last */ + 6,61,16,15,40,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 3,19, 7, 3,24, 5,45,28, 4,42, 5, 7, 3,29, 7, 3,23, 7, 3,25, 4,41,91, + 4,41,88, 5,45,29, 5,45,27, 7, 3,37, 4,41,93, 7,14,15, 4,42, 1, 0, 0, 0, + 5,45,33, 4,42, 6, 4,41,92, 5,52,57, 7,14,28, 7, 3,21, 7, 3,20, 7,14,13, + 7,14,11, 7, 3,36, 7,14,12, 7, 3,28, 5,45,32, 7,14,14, 5,45,31, 7, 3,27, + 7, 3,34, 7, 3,35, 0, 0, 0, 7, 3,30, 7, 3,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,41,87, 0, 0, 0,15,40,17, 0, 0, 0, 0, 0, 0, 7, 3,18, 7, 3,31, 7, 3,32, + 15,46,92,15,46,93,15,46,94,15,47, 1,15,47, 2,15,47, 3,15,47, 6,15,47, 7, + 15,47, 8,15,47, 9,15,47,10,15,47,11,15,47,13,15,47,14,15,47,15,15,47,16, + 15,52,63, 0, 0, 0, 0, 0, 0,15,47, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,24, + 4,48,33, 7,14,21, 7,14,16, 5,52,58, 5,52,59, 7,14,30, 7,14,26, 7,14,18, + 7, 3,22, 4,48,30, 4,48,35, 4,48,32, 5,52,61, 4,48,31, 7,14,29, 4,48,38, + 7,14,27, 4,48,40, 4,48,34, 4,48,39, 7,14,25, 7,14,17, 7,14,32, 7,24, 9, + 7,14,24, 5,52,63, 5,52,60, 7,14,23, 7,24, 8, 7,14,19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,31,15,52,53, + 15,52,54,15,52,55,15,52,56,15,52,57,15,52,58,15,52,59,15,52,60,15,52,61, + 15,52,62,15,52,64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,22, + 4,48,36,15,52,52, 0, 0, 0, 5,59,54, 7,24,17, 5,59,55, 7,24,22, 4,54,27, + 7,24,15, 7,24,21, 4,54,26, 7,24,20, 7,24,12, 5,59,56, 4,54,23, 5,59,53, + 7,24,10, 7,24,23, 7,24,16, 7,24,14, 7,24,18, 7,24,24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,11, 7,24,13,15,58,16,15,58,17, + 15,58,18,15,58,19,15,58,20,15,58,21, 0, 0, 0, 7,24,19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,59,19, 4,59,24, + 5,65,78, 5,65,75, 5,65,76, 5,65,77, 7,31,72, 7,31,71, 4,59,21, 4,59,23, + /* plane 2, page 46 */ + 0, 254, /* first, last */ + 5,71,90, 5,76,13, 7,31,73, 7,31,70, 4,59,20, 7,31,67, 7,31,69, 7,39,15, + 7,31,65, 7,31,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,62,72,15,62,73, + 15,62,74,15,62,77,15,62,78,15,62,79,15,62,81,15,62,82,15,62,84, 0, 0, 0, + 15,62,76,15,62,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,63,70, 4,63,72, 4,63,71, 4,63,73, 5,76,15, + 7,39,18, 7,39,20, 7,39,22, 5,71,91, 7,39,16, 5,76,14, 7,39,24, 4,63,75, + 7,39,21, 7,39,19, 7,39,17, 4,63,74, 5,71,89, 0, 0, 0, 0, 0, 0,15,66,30, + 15,66,31,15,66,32,15,66,33,15,66,34,15,66,35,15,66,36,15,66,37,15,66,38, + 15,66,41,15,69,15, 7,31,74, 0, 0, 0, 7,39,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,66,39, 0, 0, 0, 5,76,18, 0, 0, 0, 4,70,31, + 7,45,77, 4,67,40, 0, 0, 0, 7,45,76, 4,67,41, 7,45,80, 4,67,42, 7,45,78, + 5,76,19, 5,76,16, 5,76,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,45,79, + 15,69,13,15,69,14,15,69,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,36, 7,55,87, 4,70,33, 7,51,31, + 7,51,35, 7,51,34, 4,70,34, 5,83,37, 7,51,33, 7,51,32, 0, 0, 0,15,71,54, + 0, 0, 0,15,71,55,15,71,56,15,71,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,55,88, 7,55,89, 5,83,36, 5,83,39, 5,80, 3, 7,55,90, + 5,83,34, 5,83,38, 7,55,92, 7,59,55, 7,51,30, 0, 0, 0, 0, 0, 0,15,73,35, + 15,73,36, 5,83,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,55,91, 7,59,56, 0, 0, 0, + 15,74,52,15,74,53,15,74,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,74, 5,87,61, + 7,62,73, 4,75,75, 7,62,75, 0, 0, 0, 0, 0, 0, 5,87,60, 7,62,72,15,75,41, + 15,75,42,15,75,43,15,75,44, 0, 0, 0, 7,66,24,15,76,10,15,76,11, 0, 0, 0, + 4,77,83, 7,67,51,15,76,65, 0, 0, 0, 7,70, 6, 4, 2,87, 4, 4,29, 4, 6,58, + 15, 7,17,15, 7,18,15, 7,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,17,56, 0, 0, 0, + 0, 0, 0, 6,24, 2, 5,15,60, 4,13,30, 6,24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,22,36, 0, 0, 0, 6,32,25, 0, 0, 0, 0, 0, 0, 6,32,24, 6,41,47, 6,41,46, + 15,27,44,15,27,45, 0, 0, 0, 0, 0, 0, 5,24,85, 6,51, 6,15,33,74, 6,51, 7, + 0, 0, 0, 0, 0, 0, 5,38,13, 6,61,32, 0, 0, 0, 7, 3,38, 7, 3,39, 0, 0, 0, + 5,52,64,15,52,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,27, 7,24,26, 5,59,57, + 0, 0, 0, 7,24,28, 7,45,81, 0, 0, 0, 5, 4,31, 6, 7,89, 5, 4,32, 6, 7,90, + 0, 0, 0, 5, 4,33, 6, 7,88, 6,11,72, 4, 6,64, 0, 0, 0, 5, 6,34, 5, 6,32, + 0, 0, 0, 4, 6,61, 6,11,76, 6,11,70, 0, 0, 0, 6,11,74, 6,11,73, + /* plane 2, page 47 */ + 5, 255, /* first, last */ + 6,11,71, 5, 6,31, 5, 6,33, + 4, 6,60, 4, 9,64, 6,17,57, 5, 9,44, 5, 9,43, 6,17,60, 6,17,62, 6,17,61, + 5, 9,41, 5, 9,42, 0, 0, 0, 0, 0, 0, 4, 9,62, 4, 9,63, 0, 0, 0, 0, 0, 0, + 6,17,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24, 3, 6,24, 4, 6,24, 6, 5,13,82, + 6,17,63, 4,13,37, 6,24, 8, 5,13,80, 0, 0, 0, 6,24,10, 0, 0, 0, 5,13,79, + 5,13,84, 0, 0, 0, 6,24, 5, 0, 0, 0, 5,13,83, 5,13,81, 6,24, 9, 6,24, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,13,33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,18,77, 6,32,32, 0, 0, 0, 4,18,14, 0, 0, 0, 6,32,26, + 6,32,27, 6,32,29, 5,18,79, 5,18,80, 4,18,16, 6,32,30, 6,32,28, 5,18,75, + 6,32,33, 4,18,17, 4,18,10, 4,18,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18, 9, + 5,18,78,15,21,17,15,21,18,15,21,19,15,21,20,15,21,21, 0, 0, 0, 5,18,74, + 6,32,31, 0, 0, 0, 0, 0, 0, 6,41,56, 0, 0, 0, 5,25, 2, 6,41,53, 4,23,90, + 4,23,91, 6,41,57, 0, 0, 0, 0, 0, 0, 6,41,52, 6,41,58, 5,24,86, 5,24,94, + 5,25, 1, 5,24,93, 5,24,87, 0, 0, 0, 6,41,54, 5,24,91, 6,41,49, 6,41,48, + 6,41,51, 0, 0, 0, 4,23,82, 4,23,83, 4,23,84, 5,24,88, 5,24,89, 5,18,76, + 0, 0, 0, 0, 0, 0, 6,41,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,15, + 5,24,90, 0, 0, 0, 5,31,55, 5,31,58, 5,31,60, 4,29,55, 4,29,63, 6,51,11, + 6,51,14, 6,51, 9, 0, 0, 0, 5,31,59, 6,51,16, 6,51,13, 0, 0, 0, 6,51, 8, + 4,29,64, 0, 0, 0, 5,31,54, 6,51,17, 5,31,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,29,62, 4,29,53, 4,29,54, 4,29,56, 5,31,56, 6,51,10,15,33,75, + 6,51,12, 0, 0, 0, 0, 0, 0, 5,18,81, 4,29,58, 6,53,64, 0, 0, 0, 5,38,20, + 6,61,41, 5,38,18, 6,61,33, 4,35,72, 5,38,17, 6,61,34, 5,38,15, 6,61,38, + 0, 0, 0, 5,38,23, 0, 0, 0, 5,38,21, 6,61,39, 6,61,37, 6,61,36, 6,61,40, + 6,61,35, 6,61,42, 5,38,19, 0, 0, 0, 4,35,71, 5,38,22, 6,61,43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,40, 5, 5,45,34, + 5,45,39, 4,42,12, 7, 3,46, 7, 3,41, 0, 0, 0, 7, 3,40, 5,45,38, 0, 0, 0, + 7, 3,50, 7, 3,47, 7, 3,45, 5,45,37, 7, 3,48, 5,45,35, 5,45,36,15,47,17, + 7, 3,43, 7, 3,44, 0, 0, 0, 7, 3,42, 0, 0, 0, 0, 0, 0, 4,48,43, 7,14,34, + 7,14,38, 7,14,40, 0, 0, 0,15,52,66, 5,52,65, 7,14,43, 0, 0, 0, 0, 0, 0, + 7,14,39, 7,14,41, 7,14,33, 7,14,37, 7,14,44, 5,52,67, 7,14,42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,48,42, 5,52,68, 5,52,69, 5,52,70,15,52,67, 7,14,36, + 5,52,66, 7, 3,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,71, 7,24,30, 7,24,29, + /* plane 2, page 48 */ + 0, 255, /* first, last */ + 5,59,58, 5,59,62, 5,59,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,54,28, 0, 0, 0, + 0, 0, 0, 4,54,29, 5,59,59,15,58,23,15,58,24, 0, 0, 0, 7,24,31, 5,59,60, + 5,65,80, 7,31,76, 5,65,79, 0, 0, 0, 4,59,27, 7,31,77, 7,31,78, 0, 0, 0, + 4,59,25, 0, 0, 0, 7,31,75, 0, 0, 0, 0, 0, 0, 5,72, 1, 5,71,94, 0, 0, 0, + 5,71,92, 5,71,93,15,66,42, 5,76,20, 4,67,45, 5,76,21, 7,45,82, 4,67,43, + 7,45,85, 0, 0, 0, 7,45,84, 5,76,22, 7,45,86, 7,45,87, 4,70,36, 5,80, 5, + 0, 0, 0, 5,80, 6, 0, 0, 0, 5,83,40,15,73,37, 7,59,57, 5,85,75, 4,74,42, + 0, 0, 0, 0, 0, 0, 7,59,58, 0, 0, 0, 4,76,79,15,76,66, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15, 2,51,15, 4,38, 6,11,77, 0, 0, 0, 0, 0, 0,15,11,13,15,11,14, + 15,11,15, 0, 0, 0, 6,24,13, 6,24,14,15,15,69, 0, 0, 0, 6,32,34, 6,32,36, + 15,21,23,15,21,24, 6,32,35, 0, 0, 0, 0, 0, 0,15,27,46, 0, 0, 0, 5,31,61, + 15,33,76, 6,51,18,15,21,22, 0, 0, 0, 5,45,40, 7, 3,52, 7, 3,51, 5,45,41, + 15,47,19,15,47,20, 5,45,42, 7,14,45,15,58,25,15,62,85, 0, 0, 0,15,66,43, + 0, 0, 0,15,71,58, 0, 0, 0, 7,59,59, 6, 2, 2, 0, 0, 0,15, 7,20, 0, 0, 0, + 0, 0, 0, 6,17,64, 0, 0, 0, 4,13,40, 5,13,86, 5,13,85, 6,24,15, 5,18,82, + 15,21,25, 0, 0, 0, 6,32,38, 6,32,37, 6,41,61,15,32,18, 0, 0, 0, 6,41,59, + 6,41,60, 4,29,65, 6,61,44, 0, 0, 0, 5,31,62,15,33,77, 4,35,74, 0, 0, 0, + 0, 0, 0, 4,42,13, 7, 3,53, 0, 0, 0, 7,24,32, 0, 0, 0, 0, 0, 0, 4,63,76, + 0, 0, 0, 6, 2, 3, 0, 0, 0,15, 4,39, 6,11,79, 6,11,78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,17,65, 0, 0, 0,15,15,70, 0, 0, 0, 0, 0, 0, 4,18,18, 6,32,40, + 6,32,39, 6,41,64, 6,41,68, 6,41,67, 5,25, 3, 6,41,70, 6,41,63, 6,41,62, + 6,41,66, 0, 0, 0, 4,23,92, 6,44,30, 0, 0, 0, 6,41,69, 4,29,66, 6,51,22, + 0, 0, 0, 6,51,20, 6,51,23, 0, 0, 0, 0, 0, 0, 5,31,63, 6,61,47, 0, 0, 0, + 6,61,46, 6,61,48, 3,39,17, 4,42,15, 6,61,45, 5,45,44, 0, 0, 0, 5,45,45, + 7,14,49, 7,14,48, 7,14,47, 7,14,50, 0, 0, 0, 0, 0, 0, 7,14,46, 0, 0, 0, + 4,48,45, 0, 0, 0, 7,24,33, 7,24,34, 7,31,79, 4,59,28, 0, 0, 0, 7,31,80, + 7,31,81, 7,39,25, 0, 0, 0,15,66,44, 7,45,88, 0, 0, 0, 7,55,93, 0, 0, 0, + 4, 4,34, 6, 7,91, 0, 0, 0,15, 7,21,15, 7,22, 5, 9,45, 6,17,68, 6,17,67, + 0, 0, 0,15,11,16, 6,17,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,13,42, 5,13,87, + 6,24,17, 6,24,19, 6,24,21,15,15,71,15,15,72,15,15,73,15,15,74, 6,24,18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,19, 0, 0, 0, 4,18,21, 0, 0, 0, 6,32,42, + 15,21,26,15,21,27, 0, 0, 0, 6,32,41, 6,41,73, 5,25, 5, 5,25, 4, 6,41,72, + /* plane 2, page 49 */ + 0, 255, /* first, last */ + 6,41,74, 6,41,71,15,27,47, 0, 0, 0,15,27,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,51,24, 5,31,64, 6,51,25,15,33,78,15,33,79, 0, 0, 0, 5,38,24, 5,38,26, + 6,61,50, 5,38,25, 0, 0, 0, 0, 0, 0, 7, 3,54, 0, 0, 0, 0, 0, 0,15,47,21, + 7,14,51, 5,52,72, 7,24,35, 0, 0, 0, 0, 0, 0, 5,59,63, 7,31,83, 5,65,81, + 4,59,29, 7,31,84, 7,31,82, 0, 0, 0, 7,39,26, 0, 0, 0, 7,51,37, 4,72,77, + 7,55,94, 0, 0, 0, 7,62,76, 7,64,80, 0, 0, 0, 0, 0, 0, 5, 4,34, 0, 0, 0, + 5, 9,46, 5,13,89, 5,13,88, 0, 0, 0, 4,23,93, 6,41,75, 6,51,26, 6,51,27, + 4,29,70,15,47,22, 0, 0, 0, 6, 3,12, 6, 3,11, 0, 0, 0, 6, 4,91, 5, 2,83, + 6, 4,90, 6, 4,92,15, 2,52, 0, 0, 0,15, 4,43, 0, 0, 0, 6, 7,92, 6, 7,93, + 6, 8, 5, 5, 4,35, 6, 8, 2, 6, 7,94, 6, 8, 4, 0, 0, 0, 6, 8, 3, 0, 0, 0, + 6, 8, 1,15, 4,40,15, 4,42,15, 4,44, 0, 0, 0, 0, 0, 0, 4, 4,36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 6,40, 6,11,84, 6,11,83, 5, 6,41, 6,11,93, 5, 6,36, + 6,11,89, 5, 6,39, 6,11,90, 6,11,87, 5, 6,38, 5, 6,37, 6,11,85, 6,11,88, + 15, 7,23,15, 7,24,15, 7,25,15, 7,26,15, 7,27,15, 7,28,15, 7,29, 6,11,81, + 0, 0, 0, 6,11,91, 6,11,92, 6,11,82, 6,11,86, 0, 0, 0, 0, 0, 0, 5, 9,49, + 6,17,69, 6,17,70, 5, 9,48, 4, 9,70, 6,17,72, 6,17,73, 4, 9,72, 0, 0, 0, + 0, 0, 0,15,11,17, 0, 0, 0,15,11,18, 6,17,74,15,11,21,15,11,22, 0, 0, 0, + 0, 0, 0, 6,17,78, 6,17,76, 6,17,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,13,94, 6,24,26, 5,14, 1, 5,14, 2, 5,13,91, 5,14, 3, + 5,13,92, 5,13,90, 6,24,30, 6,24,24, 6,24,28, 5,13,93, 6,24,25, 0, 0, 0, + 6,24,29, 0, 0, 0, 0, 0, 0,15,15,75, 0, 0, 0, 0, 0, 0,15,15,77, 6,24,27, + 15,15,76, 6,24,33, 0, 0, 0, 6,24,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,18,83, 4,18,24, 4,24, 1, 6,32,51, 4,18,29, 6,32,46, + 6,32,43, 6,32,44, 6,32,48, 6,32,45, 6,32,53, 5,18,85, 6,24,32, 6,32,52, + 6,32,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,29,15,21,30,15,21,31,15,21,32,15,21,33, + 15,21,34,15,21,35,15,21,36,15,21,37,15,21,38,15,21,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,32,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,18,84, 6,41,81, 6,41,84, 4,18,28, 5,31,65, 5,25,10, + 6,41,79, 5,25, 7, 6,41,80, 5,25, 9, 5,25, 6, 0, 0, 0, 6,41,76, 6,41,77, + 4,24, 3, 6,41,86, 5,25,11, 4,24, 7, 0, 0, 0, 0, 0, 0, 6,41,78, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,41,85, 6,41,87,15,27,49,15,27,51,15,27,52,15,27,54, + /* plane 2, page 50 */ + 0, 255, /* first, last */ + 15,27,55,15,27,57,15,27,58,15,27,60,15,27,61, 0, 0, 0, 0, 0, 0,15,27,50, + 15,27,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,24, 6, 0, 0, 0, 4,24, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,41,82, + 5,25,12, 5,25, 8, 0, 0, 0, 0, 0, 0, 6,51,35, 5,31,67, 6,51,33, 6,61,51, + 6,51,34, 6,51,31, 6,51,36, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,38,25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,59, 6,51,30,15,33,80, + 15,33,81,15,33,83,15,33,84,15,33,85,15,33,86,15,33,87,15,33,88, 0, 0, 0, + 15,33,89,15,33,90,15,33,91,15,33,93, 5,29,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,51,37, 0, 0, 0, 6,51,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,31,68, 5,38,27, 5,38,31, 5,38,29, 5,38,30, 6,61,54, 5,38,32, + 5,38,35, 5,38,36, 4,35,76, 5,38,34, 5,45,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40,42,15,40,43,15,40,44,15,40,45,15,40,46, + 15,40,47, 6,61,52, 5,38,28, 6,61,55, 6,61,57, 6,61,58, 0, 0, 0, 0, 0, 0, + 6,61,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,61,56, 7, 3,65, 7, 3,60, 7, 3,59, 7, 3,62, 5,45,50, + 0, 0, 0, 5,45,53, 7, 3,58, 7, 3,55, 7, 3,56, 0, 0, 0, 7, 3,66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,47,23, + 15,47,25,15,47,26, 0, 0, 0, 0, 0, 0, 5,45,52, 7, 3,64,15,46,16, 0, 0, 0, + 0, 0, 0, 7, 3,61, 7, 3,63, 7, 3,57, 0, 0, 0, 5,45,49, 5,52,73, 5,52,75, + 7,14,55, 4,48,53, 0, 0, 0, 7,14,53, 7,14,59, 7,14,57, 7,14,61, 4,48,52, + 7,14,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,52,15,52,69, + 15,52,70,15,52,71,15,52,73,15,52,74, 7,14,56, 0, 0, 0, 5,45,47, 0, 0, 0, + 7,13,66, 0, 0, 0,15,52,72, 0, 0, 0, 0, 0, 0, 7,14,35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,74, 7,14,54, 0, 0, 0, 0, 0, 0, + 15,47,24, 7,24,39, 5,59,64, 5,59,65, 7,24,40, 5,59,66, 0, 0, 0, 7,24,37, + 7,24,38, 0, 0, 0, 0, 0, 0, 7,24,41,15,58,26,15,58,27,15,58,28, 7,24,36, + 15,58,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,59,30, 5,65,82, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,83, 0, 0, 0, 7,31,85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,62,86,15,62,87,15,62,88,15,62,89,15,62,91, 7,31,88, + 0, 0, 0, 0, 0, 0, 5,72, 3, 7,39,29, 7,39,28, 5,72, 2, 5,72, 4, 7,39,27, + 7,39,30, 0, 0, 0,15,66,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,76,23, + /* plane 2, page 51 */ + 3, 254, /* first, last */ + 15,69,17,15,69,18, 5,75,78, 0, 0, 0, 7,45,89, + 7,51,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,56, 1,15,73,38, 5,83,25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,83,41, 0, 0, 0, 0, 0, 0, 7,59,60, 5,87,62, + 7,62,77,15,75,45, 0, 0, 0, 0, 0, 0, 5,89,11, 0, 0, 0, 0, 0, 0, 7,68,39, + 0, 0, 0, 0, 0, 0,15, 4,45, 6,11,94,15, 7,31,15, 7,32, 6,12, 1, 5, 9,51, + 5, 9,50, 6,17,80,15,11,23,15,11,25, 6,17,79, 6,24,34, 0, 0, 0,15,15,79, + 15,15,80,15,15,81,15,15,82,15,15,83, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,41, + 15,21,42, 0, 0, 0, 0, 0, 0,15,27,63, 6,41,90, 6,41,89, 5,31,69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,35,80, 6,51,38, 0, 0, 0, 5,45,55, 5,45,54, + 7, 3,67, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,52,75, 0, 0, 0, 0, 0, 0, 5,59,67, + 0, 0, 0, 7,31,90, 5,65,84, 7,31,89, 7,31,87, 0, 0, 0, 4,63,77, 0, 0, 0, + 7,45,90, 7,45,91, 0, 0, 0, 5,91,31, 7,70,30, 6, 3,13, 6, 4,93, 5, 4,36, + 6, 8, 9, 6, 8, 7, 6, 8, 8, 6, 8, 6, 6,12, 2, 5, 9,52, 4, 9,73, 4, 9,74, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,11,26, 6,17,81, 0, 0, 0, 6,24,35, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,43, 5,18,86, 6,32,57, 6,32,59, 6,41,93, + 6,41,92, 6,32,58, 5,25,13, 0, 0, 0,15,25,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,27,65,15,27,66, 0, 0, 0, 6,51,39, 5,31,71, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,27,64,15,33,94,15,34, 1, 6,51,40, 6,61,61, 0, 0, 0, 0, 0, 0, + 6,61,62, 0, 0, 0, 7, 3,68, 4,42,20, 5,45,57, 0, 0, 0, 0, 0, 0, 4,42,19, + 15,47,27,15,47,28, 5,52,78, 5,52,76, 5,59,68, 0, 0, 0, 0, 0, 0, 5,52,77, + 15,52,77,15,52,78, 0, 0, 0, 7,24,43, 7,24,42,15,58,30, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,65,85, 0, 0, 0, 0, 0, 0,15,62,92, 7,31,91, 5,76,24, 0, 0, 0, + 0, 0, 0, 5,85,79, 5,87,63, 5, 1,40, 4, 1,46, 4, 1,93,15, 1,69, 0, 0, 0, + 5, 2,85, 6, 5, 2, 5, 2,84, 6, 4,94, 6, 5, 1,15, 2,54, 0, 0, 0, 4, 2,91, + 4, 2,90, 6, 8,12, 4, 4,41, 6, 8,10, 0, 0, 0, 6, 8,11,15, 4,46,15, 4,47, + 15, 4,52,15, 4,48,15, 4,50, 5, 4,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 8,13, 5, 4,37, 4, 4,37, 0, 0, 0, 4, 6,75, 5, 6,44, 4, 6,70, 5, 6,43, + 6,12,11, 5, 6,48, 5, 6,50, 6,12, 8, 6,12, 7, 6,12, 6, 5, 6,45, 5, 6,51, + 5, 6,47, 5, 6,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,35, 0, 0, 0,15, 7,37, + 15, 7,38,15, 7,39,15, 7,41,15, 7,42,15, 7,43,15, 7,45,15, 7,47,15, 7,49, + 15, 7,52,15, 7,53, 6,12, 4, 6,12, 9, 0, 0, 0, 0, 0, 0, 5, 6,52, 0, 0, 0, + 6,12,12,15, 7,36, 0, 0, 0, 6,12,13, 0, 0, 0, 6,12,10,15, 7,40, + /* plane 2, page 52 */ + 0, 255, /* first, last */ + 15, 7,34, 6,12, 5, 0, 0, 0, 5, 6,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,13,60, + 6,17,84, 6,17,83, 4, 9,75, 5, 9,54, 6,17,85, 6,17,86, 5, 9,53, 5, 9,57, + 6,17,87, 5,14, 6, 5, 9,58, 5, 9,56, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,51, + 15,11,27,15,11,28,15,11,29,15,11,31,15,11,32,15,11,33,15,11,34,15,11,35, + 15,11,36,15,11,37,15,11,38,15,11,39,15,11,41,15,11,42,15,11,43,15,11,44, + 15,11,45,15,11,46,15,11,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 9,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,32,60, 6,24,47, 6,24,51, + 6,24,43, 6,24,45, 6,24,38, 5,14, 7, 6,24,40, 6,24,37, 6,24,49, 4,13,48, + 6,32,61, 5, 9,55, 5,14, 9, 5,14,10, 6,24,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,15,84, + 0, 0, 0,15,15,85,15,15,86,15,15,88,15,15,89,15,15,90,15,15,91,15,15,92, + 15,15,93,15,15,94,15,16, 1,15,16, 2,15,16, 3,15,16, 5,15,16, 6,15,16, 7, + 15,16, 9,15,16,10,15,16,11,15,16,12,15,16,14, 6,24,44, 0, 0, 0, 0, 0, 0, + 6,24,39, 0, 0, 0, 6,24,41, 4,13,51, 0, 0, 0, 6,24,46,15,16,16,15,16, 8, + 0, 0, 0, 4,13,58,15,16,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,14,12, 5,14, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,15,87, 6,24,50, 6,32,72, + 6,32,73, 6,32,63, 5,18,87, 5,19, 1, 5,25,22, 4,18,37, 4,18,32, 5,18,93, + 6,32,71, 6,42,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,32,67, + 15,21,44,15,21,45,15,21,47,15,21,48,15,21,49,15,21,50,15,21,51,15,21,52, + 15,21,53,15,21,54,15,21,56,15,21,57,15,21,58,15,21,59,15,21,60,15,21,61, + 15,21,62,15,21,63,15,21,64,15,21,65,15,21,66,15,21,67,15,21,69,15,21,70, + 6,32,68, 6,32,70, 6,32,69, 4,18,39, 6,32,66, 6,32,64, 0, 0, 0, 6,32,65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,36, 5,19, 2, + 5,18,88, 5,18,91, 5,18,90, 5,18,92, 6,32,74, 0, 0, 0, 0, 0, 0,15,21,46, + 6,32,62, 4,24,22, 6,42,20, 5,25,21, 6,51,41, 4,24,14, 5,25,24, 6,42, 2, + 5,25,18, 4,24,11, 5,25,16, 5,25,20, 4,24,17, 6,42,13, 6,42,15, 5,25,26, + 6,42, 4, 6,42, 1, 5,25,23, 6,42,19, 5,25,28, 5,25,27, 6,42, 6, 4,24,16, + 6,42, 7, 6,42,10, 6,42,17, 5,25,32, 6,51,42, 5,25,29, 6,42,24, 6,42, 3, + 6,42, 5, 6,42,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,24,19, + 4,24,24, 6,42,22, 6,42,23,15,27,68,15,27,69,15,27,71,15,27,72,15,27,73, + 15,27,75,15,27,76,15,27,77,15,27,79,15,27,81,15,27,82,15,27,84,15,27,85, + 15,27,86,15,27,87,15,27,88,15,27,89,15,27,90,15,27,91,15,27,92,15,27,93, + /* plane 2, page 53 */ + 0, 251, /* first, last */ + 15,27,94,15,28, 2,15,28, 3,15,28, 4,15,28, 5,15,28, 6,15,28, 7,15,28, 8, + 15,28,10,15,28,11,15,28,12,15,28,13,15,28,14,15,28,15, 6,42, 9, 6,42,11, + 0, 0, 0, 6,42,12, 6,42,18, 5,25,34, 6,42,16, 6,42,25, 6,42, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,25,30, 5,25,33, 5,25,14, 5,25,15, 5,25,17, + 0, 0, 0, 6,51,46, 6,51,56, 4,29,87, 6,51,54, 4,29,84, 6,51,55, 5,31,79, + 5,31,74, 5,31,78, 5,31,75, 4,29,74, 6,51,59, 5,31,83, 6,51,65, 5,31,72, + 4,29,90, 5,31,84, 5,31,73, 6,51,53, 5,31,80, 5,31,77, 6,51,64, 4,29,83, + 6,51,57, 6,51,58, 6,51,61, 6,51,48, 4,29,80, 6,51,60, 5,31,76, 0, 0, 0, + 6,51,67, 6,51,47, 6,51,49, 6,51,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,34, 3, 0, 0, 0,15,34, 4,15,34, 5,15,34, 6,15,34, 7,15,34, 9, + 15,34,10,15,34,11,15,34,12,15,34,13,15,34,14,15,34,16,15,34,17,15,34,18, + 15,34,19,15,34,20,15,34,21,15,34,22,15,34,24,15,34,25,15,34,26,15,34,27, + 15,34,29,15,34,30,15,34,31,15,34,32,15,34,33,15,34,34,15,34,35,15,34,36, + 15,34,37,15,34,38,15,34,40,15,34,42,15,34,44, 0, 0, 0, 0, 0, 0, 6,51,45, + 6,51,50, 6,51,52, 4,29,89, 6,51,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,43, + 0, 0, 0, 0, 0, 0, 6,51,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,34, 2, 0, 0, 0, 0, 0, 0,15,34,15, 0, 0, 0,15,34,23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,25,31, 5,31,82, 6,51,51,15,35,84, 0, 0, 0, + 5,38,46,15,34,43, 5,38,48, 4,35,91, 4,35,82, 5,38,45, 5,38,47, 6,61,73, + 5,38,53, 5,38,50, 7, 3,69, 0, 0, 0, 6,51,68, 5,38,39, 6,61,63, 5,38,52, + 5,38,38, 5,38,56, 6,61,66, 5,38,42, 5,38,51, 6,61,67, 4,35,86, 5,38,40, + 0, 0, 0, 5,38,41, 6,61,69, 5,38,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,38,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40,55,15,40,56,15,40,57,15,40,58, + 15,40,59,15,40,60,15,40,61,15,40,62,15,40,63,15,40,64,15,40,65,15,40,66, + 15,40,67,15,40,68,15,40,69,15,40,70,15,40,71,15,40,72,15,40,73,15,40,74, + 15,40,75,15,40,76,15,40,77,15,40,78,15,40,79,15,40,81,15,40,82,15,40,83, + 15,40,85, 0, 0, 0, 0, 0, 0, 3,39,43, 6,61,74, 6,61,71, 0, 0, 0, 6,61,75, + 6,61,76, 0, 0, 0, 5,38,54, 5,38,55, + /* plane 2, page 54 */ + 0, 255, /* first, last */ + 15,40,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,61,68, 0, 0, 0, 6,61,70, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,40,48, 0, 0, 0,15,40,49,15,40,51,15,40,52, + 6,61,64, 6,61,77, 6,61,65, 0, 0, 0,15,40,54, 7, 3,72, 5,45,71, 5,45,62, + 4,42,27, 4,42,39, 5,45,59, 4,42,32, 7, 3,81, 7, 3,76, 7, 3,84, 5,45,75, + 5,45,69, 7, 3,80, 4,42,38, 5,45,63, 4,42,31, 5,45,68, 4,42,35, 4,42,30, + 4,42,21, 7, 3,83, 5,45,60, 4,42,42, 5,45,73, 7, 3,78, 5,45,67, 5,45,74, + 7, 3,73, 4,42,33, 5,45,61, 7, 3,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,42,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,42,37, + 0, 0, 0, 4,42,41, 7, 3,70, 7, 3,74,15,47,29,15,47,30,15,47,31,15,47,35, + 15,47,36,15,47,38,15,47,39,15,47,40,15,47,41,15,47,42,15,47,43,15,47,44, + 15,47,45,15,47,46,15,47,47,15,47,48,15,47,49,15,47,50,15,47,51, 0, 0, 0, + 0, 0, 0,15,47,32, 0, 0, 0, 7, 3,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,45,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,45,72, 5,45,70, 7, 3,71, 7, 3,77, 5,45,64, 5,45,58, 5,45,66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,48,59, 5,52,93, 7,14,73, 4,48,69, 4,48,56, + 5,59,69, 7,24,44, 7,14,64, 7,14,67, 5,52,91, 7,14,72, 7,14,82, 5,52,90, + 7,14,79, 7,14,66, 4,48,66, 4,54,44, 4,48,55, 7,14,63, 4,48,63, 5,52,89, + 7,14,71, 7,14,68, 5,52,81, 0, 0, 0, 5,52,87, 4,48,60, 7,14,78, 7,14,84, + 5,52,88, 4,48,61, 7,14,70, 7,14,75, 4,48,67, 5,52,80, 7,14,65, 5,65,91, + 5,52,85, 5,52,86, 5,52,82, 4,42,36, 7,14,83, 7,14,76, 7,14,69, 0, 0, 0, + 7,14,62, 5,52,92, 5,52,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,83, + 15,52,79,15,52,80,15,52,81,15,52,82,15,52,83,15,52,85,15,52,86,15,52,87, + 15,52,88,15,52,89,15,52,90,15,52,92,15,52,93,15,52,94,15,53, 1,15,53, 2, + 15,53, 4,15,53, 5,15,53, 6,15,53, 7,15,53, 8,15,53,11,15,53,12,15,53,13, + 15,53,14,15,53,15,15,53,16,15,53,18,15,53,19,15,53,20,15,53,21,15,53,22, + 15,53,23,15,53,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,80, 0, 0, 0, + 7,14,81, 0, 0, 0, 4,48,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,53, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,52,84,15,40,80, 0, 0, 0,15,47,33, 0, 0, 0, + 7,14,77, 4,54,35, 7,24,48, 7,24,46, 4,54,39, 7,24,50, 7,24,54, 5,59,74, + 5,59,75, 4,54,42, 4,54,38, 5,59,78, 7,24,51, 5,59,76, 0, 0, 0, 7,24,49, + /* plane 2, page 55 */ + 0, 254, /* first, last */ + 7,24,55, 5,65,92, 5,59,71, 4,54,45, 4,54,36, 7,24,57, 4,54,34, 5,59,73, + 7,24,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,59,70, 7,24,52,15,58,32, + 15,58,33,15,58,35,15,58,36,15,58,37,15,58,38,15,58,39,15,58,40,15,58,41, + 15,58,42,15,58,43,15,58,44,15,58,46,15,58,47,15,58,49,15,58,50,15,58,52, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,56, 5,59,77, 7,24,58, 7,24,45, 7,24,47, + 7,23, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,51, 0, 0, 0, 0, 0, 0,15,58,45, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,59,79, 5,59,80, 0, 0, 0,15,53,17, 0, 0, 0, 0, 0, 0,15,58,48, + 0, 0, 0, 4,59,39, 5,65,88, 7,32, 7, 7,32, 3, 4,59,34, 7,32,11, 5,66, 4, + 5,65,93, 5,66, 6, 7,32, 9, 4,59,37, 5,65,90, 5,66, 2, 5,66, 7, 5,65,94, + 7,24,60, 5,66,11, 5,65,89, 4,59,35, 4,59,44, 4,59,38, 7,32,13, 7,32, 8, + 5,66, 3, 7,39,38, 5,66, 9, 7,32, 6, 4,59,43, 5,66, 8, 5,66, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,65,86, 0, 0, 0, 7,31,92, + 7,31,93,15,62,94,15,63, 2,15,63, 3,15,63, 4,15,63, 5,15,63, 6,15,63, 7, + 15,63, 8,15,63,10,15,63,11,15,63,12,15,63,14,15,63,15,15,63,16, 7,32, 1, + 0, 0, 0, 7,32, 5, 0, 0, 0, 7,32,12, 7,32,10, 0, 0, 0, 5,66, 1, 0, 0, 0, + 0, 0, 0,15,63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,10, 5,65,87, + 0, 0, 0, 7,32, 2, 0, 0, 0, 7,32, 4,15,63,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,72, 5, 7,39,35, 5,72, 8, 5,72,11, 5,72, 9, 7,39,34, 7,39,32, 5,72,13, + 7,39,33, 4,63,84, 7,39,40, 7,39,41, 5,72, 7, 5,72, 6, 7,39,37, 5,72,15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,39, 7,31,94,15,66,50,15,66,54,15,66,56, + 15,66,57,15,66,58,15,66,59,15,66,60,15,66,61,15,66,63,15,66,64,15,66,65, + 5,72,14, 0, 0, 0, 7,39,36, 0, 0, 0, 0, 0, 0, 7,39,31,15,66,52, 5,72,12, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,66,55,15,66,47, 0, 0, 0, 0, 0, 0,15,66,62, + 0, 0, 0, 0, 0, 0,15,62,93, 0, 0, 0, 4,67,51, 7,45,92, 5,76,31, 7,45,94, + 5,76,34, 5,72,16, 5,76,26, 5,76,25, 5,76,29, 7,45,93, 5,76,28, 5,76,33, + 5,76,27, 5,72,10, 5,76,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,76,30,15,69,19,15,69,20,15,69,21,15,69,22,15,69,23,15,69,25,15,69,26, + 15,69,27,15,69,28,15,69,29,15,69,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,67,50, 0, 0, 0, 0, 0, 0, 7,51,41, + 7,51,40, 0, 0, 0, 5,80,11, 5,80,13, 4,70,38, 5,80, 9, 7,51,45, 0, 0, 0, + 5,80, 8, 5,80,10, 5,80,12, 7,51,42, 4,70,37, 5,80,15, 7,51,46, + /* plane 2, page 56 */ + 1, 255, /* first, last */ + 5,80,18,15,71,59,15,71,60,15,71,61,15,71,62,15,71,63,15,71,64, + 15,71,65,15,71,66,15,71,67,15,71,68, 7,51,44, 0, 0, 0, 5,80,17, 5,80,16, + 7,51,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,56, 6, 5,83,46, 5,83,47, 5,83,44, 5,83,42, 4,72,79, 5,83,43, + 5,83,45, 7,56, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73,39,15,73,40,15,73,41, + 15,73,43,15,73,46,15,73,47,15,73,48,15,73,49, 7,56, 4, 7,56, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,69, 0, 0, 0, 5,85,81, + 5,85,83, 5,87,64, 5,85,84, 7,59,64, 5,85,82, 7,59,65, 5,85,85, 7,59,63, + 5,87,65, 0, 0, 0, 0, 0, 0, 7,59,61,15,74,55,15,74,57, 7,59,62, 0, 0, 0, + 0, 0, 0, 5,85,86, 5,85,80, 0, 0, 0, 4,75,76, 7,62,78, 5,87,66, 7,64,81, + 15,75,46,15,75,47,15,75,48,15,75,51,15,75,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,62,79, 0, 0, 0, 0, 0, 0, 7,62,80,15,74,56, 0, 0, 0, 7,64,82, 0, 0, 0, + 5,89,13, 0, 0, 0,15,76,12, 7,64,83, 0, 0, 0, 5,89,12, 0, 0, 0, 5,89,14, + 15,75,50, 5,90, 9, 7,67,52, 7,64,84, 0, 0, 0, 4,77,53,15,76,13, 0, 0, 0, + 0, 0, 0,15,76,44,15,76,67, 7,67,44, 7,67,53, 0, 0, 0, 5,91,32, 7,68,40, + 7,68,41, 0, 0, 0, 7,69,59,15,77,15, 7,69,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 5, 4, 4, 4,43, 6, 8,15, 6,12,14, 6, 8,18, 5, 4,39, 6, 8,17, 4, 4,42, + 0, 0, 0, 5, 6,60, 5, 6,59, 5, 6,56, 6,12,15, 4, 6,79, 6,12,16, 5, 6,61, + 4, 6,78, 5, 6,57, 5, 6,58, 5, 6,55,15, 7,54, 0, 0, 0, 0, 0, 0, 5, 9,63, + 6,17,90, 6,24,52, 6,17,92, 5, 9,66, 4, 9,85, 5, 9,65, 5, 9,62, 6,17,89, + 5, 9,60, 5, 9,64, 6,17,91, 5, 9,61, 0, 0, 0, 0, 0, 0,15,12,87, 6,24,55, + 6,24,56, 6,24,53, 5,14,19, 0, 0, 0, 5,14,13, 6,24,54, 6,32,75, 5,14,18, + 4,13,63, 5,14,15, 5,14,20, 5,14,17, 5,14,16,15,16,17, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,19, 5, 6,32,76, 0, 0, 0, 6,32,77, 0, 0, 0,15,21,71, + 15,21,72,15,21,73,15,21,74,15,21,75,15,21,76,15,21,77,15,21,78, 0, 0, 0, + 4,24,29, 5,25,39, 5,31,87, 4,24,26, 5,25,37, 6,42,28, 5,19, 4, 5,25,40, + 6,42,29, 5,25,36, 5,25,41, 6,42,30, 0, 0, 0, 5,25,38, 6,42,27,15,28,16, + 15,28,17, 6,42,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,78, 5,31,86, 5,31,85, + 5,31,90, 6,51,75, 5,31,89, 6,51,71, 6,51,70, 6,51,72, 6,51,73, 6,51,74, + 6,51,77, 5,31,88, 0, 0, 0,15,34,46, 6,56,58, 0, 0, 0, 0, 0, 0, 6,51,76, + 6,51,69,15,34,45, 5,38,60, 4,36,11, 5,38,62, 6,61,79, 6,61,78, 4,36,12, + 5,38,61, 4,36, 9, 6,61,85, 6,61,80, 5,38,58, 6,61,86, 6,61,84, 5,38,59, + /* plane 2, page 57 */ + 0, 255, /* first, last */ + 6,61,82, 6,61,81, 6,61,83, 6,51,79,15,40,86,15,40,88, 0, 0, 0, 5,38,57, + 5,45,78, 7, 3,93, 5,45,80, 5,45,81, 4,42,45, 7, 3,89, 7, 3,87, 7, 3,94, + 7, 3,86, 7, 3,90, 7, 3,91, 0, 0, 0, 5,45,79,15,47,52, 0, 0, 0, 7, 3,92, + 5,52,94, 7,14,86, 4,48,72, 0, 0, 0, 7,14,85,15,53,26,15,53,27, 0, 0, 0, + 7,24,62, 7,24,64, 5,59,81, 7,24,63,15,58,53, 7,24,61, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,66,12, 0, 0, 0, 0, 0, 0, 5,72,18, 5,72,17,15,66,66, 0, 0, 0, + 0, 0, 0, 5,80,22, 7,46, 3, 0, 0, 0, 5,80,21, 5,80,20, 4,72,80, 5,80,19, + 0, 0, 0, 5,83,48, 7,56, 9, 7,56, 7, 7,56, 8, 0, 0, 0, 5,87,67, 7,64,85, + 4,76,80, 4,77,54, 5, 1,18, 5, 1,80, 6, 3,14, 6, 5, 6, 0, 0, 0, 5, 4,42, + 6, 8,20, 6,12,17, 5, 4,41, 5, 4,43, 6, 8,19, 6,12,28, 6,12,20, 6,12,27, + 6,12,26, 6,12,22, 6,12,19, 6,12,24, 6,12,18, 6,12,23, 5, 6,62, 6,12,25, + 6,12,21, 5, 6,63, 0, 0, 0,15, 7,55,15, 7,56,15, 7,57, 0, 0, 0, 0, 0, 0, + 4, 6,82, 0, 0, 0, 4, 9,86, 5, 9,67, 0, 0, 0, 5, 8,21, 6,24,57, 6,24,60, + 5,14,21, 6,24,58, 6,24,62, 6,24,61, 0, 0, 0, 6,24,59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,23,40, 5,19, 6, 6,32,80,15,21,79, 0, 0, 0, 0, 0, 0, + 6,32,79, 4,24,32, 4,24,30, 5,25,42, 5,25,43, 6,42,35, 4,24,33, 6,42,34, + 0, 0, 0, 6,42,36, 6,42,32, 6,42,37, 6,42,38, 6,42,33, 0, 0, 0, 5,31,92, + 6,51,80, 5,31,91,15,34,47, 6,58,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 2, 7, 4, 5, 7, 4, 3, 7, 4, 6, + 7, 4, 1, 7, 4, 4,15,47,53, 0, 0, 0, 7,14,90, 7,14,89, 7,14,87, 7,14,88, + 0, 0, 0, 7,24,65, 4,54,48, 0, 0, 0,15,58,54,15,58,55, 5,66,13, 5,66,14, + 7,32,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,83,49, + 0, 0, 0, 7,59,66, 7,59,67, 0, 0, 0, 0, 0, 0, 5, 1,81, 5, 1,41, 5, 2,86, + 6, 8,21, 4, 2,93, 6, 5, 7, 5, 4,44, 4, 4,45, 6, 5, 8, 0, 0, 0, 6, 8,22, + 6, 8,27, 6, 8,23, 4, 4,44, 6, 8,28, 5, 4,45, 6, 8,25, 6, 8,24, 6, 8,26, + 0, 0, 0, 6,12,31, 5, 6,64, 5, 6,70, 5, 6,65, 5, 6,68, 4, 6,83, 4, 6,84, + 5, 6,67, 4, 6,87, 6,12,29, 6,12,30, 6,12,32, 6,17,93, 5, 6,69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9,72, 4, 9,88, 4, 9,89, + 6,18, 6, 4, 9,87, 6,17,94, 5, 9,68, 5, 9,69, 5, 9,75, 5, 9,70, 5, 9,71, + 6,18, 5, 4, 9,90, 6,18, 2, 6,18, 3, 5, 9,74, 6,18, 4, 6,24,63,15,11,48, + 6,18, 1, 5, 9,76, 5,14,22, 4,13,67, 6,24,66, 5,14,27, 6,24,69, 5,14,28, + 5,14,24, 5,14,25, 0, 0, 0, 6,24,67, 6,24,70, 5,14,29, 5,14,23, 5,14,26, + /* plane 2, page 58 */ + 0, 255, /* first, last */ + 5,14,30, 6,24,64, 0, 0, 0, 6,24,65, 0, 0, 0, 5,19,11, 6,32,84, 5,19,10, + 6,32,83, 5,19, 7, 5,19, 8, 5,19, 9, 6,32,81, 4,18,43, 5,19,12, 6,42,41, + 6,32,85, 6,32,82,15,21,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,82, 6,42,42, + 5,25,51, 4,24,40, 6,42,43, 4,24,35, 5,25,46, 5,25,45, 5,25,47, 4,24,39, + 5,25,50, 5,25,52, 5,25,48, 5,25,44, 5,25,49, 6,42,44, 6,51,81, 0, 0, 0, + 6,42,40,15,28,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,84, + 0, 0, 0, 6,51,89, 5,31,93, 5,31,94, 6,51,86, 6,51,88, 4,30, 5, 6,61,88, + 6,51,90, 6,51,85, 0, 0, 0, 6,51,83, 0, 0, 0,15,34,48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,21,80, 4,36,20, 4,36,14, 6,61,91, 6,61,92, + 4,36,15, 6,61,89, 0, 0, 0, 6,61,90, 6,61,13, 7, 4, 9, 4,42,49, 5,45,82, + 7, 4, 7, 5,45,85, 7, 4, 8, 7, 4,11, 5,45,84, 4,48,73, 7, 4,12, 7, 4,10, + 15,47,54, 5,45,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,14,91, 7,14,92, 5,53, 1, + 4,48,76, 5,53, 3, 5,53, 2, 7,14,94,15,53,28,15,53,29, 0, 0, 0, 0, 0, 0, + 7,24,68, 7,24,66, 5,59,83, 7,24,69, 7,24,67, 5,59,84, 0, 0, 0, 5,66,16, + 5,66,15, 4,59,45, 7,32,16, 7,14,93, 5,59,85, 0, 0, 0, 7,32,15, 5,72,19, + 0, 0, 0, 0, 0, 0, 5,80,23, 5,80,24, 7,51,47, 0, 0, 0, 7,56,10, 5,85,90, + 5,85,89, 0, 0, 0, 5, 6,72, 5, 6,71, 0, 0, 0, 6,18, 7, 6,18, 8, 0, 0, 0, + 5,14,31, 0, 0, 0, 0, 0, 0, 4,18,44, 4,18,45, 6,32,88, 6,32,89, 6,32,86, + 6,32,87,15,21,83,15,21,85,15,21,86,15,21,87, 6,32,91, 6,32,90, 5,19,13, + 0, 0, 0, 6,42,47, 0, 0, 0, 6,42,46,15,28,19, 0, 0, 0, 0, 0, 0,15,21,82, + 6,52, 1, 6,52, 2, 0, 0, 0, 6,51,93, 6,51,94, 6,52, 4,15,34,49,15,34,50, + 0, 0, 0, 6,52, 3, 6,51,92, 0, 0, 0, 5,32, 1, 5,32,91, 5,38,65, 4,36,22, + 6,62, 1, 4,36,23, 6,61,94, 6,61,93, 0, 0, 0,15,40,90, 5,45,86, 6,62, 2, + 7, 4,13, 4,42,50, 0, 0, 0, 7,15, 5, 7,15, 3, 7,15, 6, 7,15, 1, 7,15, 4, + 5,53, 4, 7,15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,53,30,15,53,31,15,53,32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,70, 7,24,71, 0, 0, 0, 0, 0, 0, + 4,59,46, 7,32,19, 5,66,18, 5,66,17, 0, 0, 0, 0, 0, 0, 7,32,17, 0, 0, 0, + 7,32,18, 4,63,88, 7,39,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46, 5, 7,39,45, + 0, 0, 0, 7,51,48, 4,74,45, 5,85,91, 7,59,68, 5,83,50, 7,62,83, 5,87,69, + 5,87,68, 7,64,86, 0, 0, 0, 7,67,54, 5, 1,82, 6, 8,29, 0, 0, 0, 6,12,33, + 6,18, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,28,20, 5,32, 2, 4,42,51, 0, 0, 0,15,47,55,15,47,56,15,58,57,15,53,33, + /* plane 2, page 59 */ + 0, 255, /* first, last */ + 15,66,67,15,74,58, 5, 4,47, 6, 8,30, 6,12,37, 6,12,36, 5, 6,73, 0, 0, 0, + 6,24,72, 6,24,74, 6,24,73, 6,32,92, 6,32,93, 5,32, 3, 4,30, 6, 5,38,66, + 5,38,67, 6,62, 3, 7, 4,14, 7,15, 7, 7,15, 8, 5,53, 5, 7,39,46, 5,76,35, + 0, 0, 0, 0, 0, 0, 5,89,16, 5, 1,42, 4, 2,94, 0, 0, 0,15, 2,58,15, 2,59, + 0, 0, 0, 6, 8,32, 6, 8,31, 4, 4,46,15, 4,53,15, 4,54,15, 4,55,15, 4,57, + 15, 4,58, 5, 6,77, 5, 6,74, 5, 6,76, 5, 6,75, 6,12,39, 6,12,38,15, 7,58, + 15, 7,60,15, 7,61,15, 7,62,15, 7,63, 0, 0, 0, 5, 6,35, 0, 0, 0, 0, 0, 0, + 6,18,12, 5, 9,78, 5, 9,79, 5, 9,77, 5, 9,80, 5, 9,81, 6,18,13, 5, 9,83, + 6,18,15, 6,24,77, 6,18,14, 0, 0, 0, 5, 9,84, 6,18,11, 0, 0, 0, 5, 9,82, + 0, 0, 0,15,11,49,15,11,50,15,11,51,15,11,52,15,11,53,15,11,54,15,11,55, + 15,11,56,15,11,57,15,11,58,15,11,59,15,11,60,15,11,62, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,11,61, 0, 0, 0, 6,24,79, 5,14,33, 6,24,78, 4,13,73, + 5,14,35, 4,13,72, 6,24,76, 5,14,34, 0, 0, 0,15,16,18,15,16,19,15,16,20, + 15,16,21,15,16,22,15,16,23,15,16,24,15,16,25, 6,24,75, 5,14,32, 0, 0, 0, + 0, 0, 0, 6,33, 6, 4,18,54, 6,33, 1, 5,19,17, 6,33, 2, 6,33, 3, 5,19,14, + 6,33, 5, 5,19,18, 5,19,16, 5,19,15, 6,32,94, 6,33, 4,15,21,88,15,21,89, + 15,21,90,15,21,91,15,21,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,25,53, 4,24,45, 5,25,54, 4,24,48, 6,42,49, 6,42,51, 5,25,57, 5,25,56, + 5,25,58, 6,42,54, 6,42,48, 6,42,53, 5,25,55, 6,42,50, 0, 0, 0,15,28,26, + 15,28,21,15,28,23,15,28,24,15,28,25,15,28,27,15,28,29,15,28,31,15,28,32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,42,52,15,28,22, 0, 0, 0, 0, 0, 0, 5,25,60, + 6,52,14, 6,52,12, 4,30,11, 6,52, 7, 6,52,11, 4,30,10, 6,52, 8, 6,52, 5, + 6,52, 9, 6,52, 6, 6,52,13, 6,52,10, 6,52,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,32, 4,15,34,51,15,34,53,15,34,54,15,34,55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,52,16, 0, 0, 0, 0, 0, 0, 6,62, 9, 5,38,70, 5,38,69, + 6,62,10, 6,62,11, 6,62,13, 4,36,29, 6,62, 4, 4,36,30, 5,38,71, 4,36,27, + 0, 0, 0, 6,62,14, 6,62,15, 6,62, 6, 0, 0, 0, 6,62, 7,15,40,92,15,40,93, + 15,40,94,15,41, 1, 0, 0, 0, 6,62, 8, 5,38,73, 6,62,16, 0, 0, 0, 6,62, 5, + 0, 0, 0, 0, 0, 0, 6,62,12, 0, 0, 0, 4,42,54, 7, 4,19, 7, 4,23, 7, 4,21, + 4,42,53, 4,42,52, 5,45,89, 7, 4,20, 5,45,87, 5,45,88, 7, 4,17, 7, 4,18, + 7, 4,16, 7, 4,15, 7, 4,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4,24, + 7,15, 9, 5,53, 7, 7,15,10, 4,48,80, 5,53, 6, 4,48,83, 7,15,12,15,53,34, + /* plane 2, page 60 */ + 0, 247, /* first, last */ + 15,53,35,15,53,36,15,53,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,15,11, 0, 0, 0, + 0, 0, 0, 7, 4,25, 7,24,74, 4,54,53, 4,54,52, 7,24,73, 5,59,86, 0, 0, 0, + 7,24,72,15,58,58,15,58,59,15,58,60, 7,24,76, 0, 0, 0, 7,24,75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,66,21, 5,66,20, 5,66,22, 0, 0, 0, 7,32,23, 7,39,47, + 7,32,21, 5,66,23, 7,32,20, 7,32,22,15,63,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,66,19, 0, 0, 0,15,63,18, 7,39,50, 5,72,20, 7,39,48, 7,39,49, 0, 0, 0, + 0, 0, 0,15,69,33, 7,46, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,70,39, 5,80,25, + 7,51,49,15,71,71, 0, 0, 0, 7,56,11, 5,83,51, 0, 0, 0,15,73,50, 5,85,92, + 7,59,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,68,42, 6,12,40, 0, 0, 0, 6,18,16, + 5, 9,85, 5, 9,86, 6,19,44, 6,33, 7,15,21,93, 0, 0, 0, 6,33, 8, 6,52,17, + 4,36,32, 7,15,13, 7,24,77, 4,59,49,15,58,61, 6, 5,10, 6, 5, 9, 0, 0, 0, + 15, 4,60, 6,12,43, 6,12,42, 6,12,41, 6,18,17, 0, 0, 0, 6,18,18,15,11,63, + 5, 9,87, 5,14,36, 0, 0, 0,15,21,94, 5,25,61,15,28,33, 6,52,18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 4,27, 7, 4,26, 0, 0, 0, 0, 0, 0, 7,32,24, 7,51,50, + 0, 0, 0, 0, 0, 0,15, 1,71, 0, 0, 0, 6, 2, 4, 6, 5,11, 5, 1,83, 6, 5,12, + 15, 2,62,15, 4,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 3, 3, 6, 5,13, 5, 4,48, 6, 5,15, 6, 5,17, 0, 0, 0, 3, 4, 4,15, 2,60, + 15, 4,63,15, 4,64, 0, 0, 0, 6, 5,16, 0, 0, 0, 0, 0, 0, 6,12,45, 5, 4,50, + 6, 8,34, 5, 4,49, 5, 4,51, 4, 4,48, 6, 8,38, 6, 8,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,12,44, 6, 8,35, 6, 8,33, + 6, 8,37, 6, 8,40, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 4,65, 0, 0, 0,15, 4,62, + 15, 4,66,15, 4,67,15, 4,68,15, 4,69,15, 4,70,15, 4,71,15, 7,67,15, 7,68, + 15, 7,69, 0, 0, 0, 4, 7, 3, 5, 6,79, 6,18,19, 5, 6,82, 5, 6,83, 4, 7, 1, + 6,12,55, 4, 7, 5, 6,12,48, 4, 7, 4, 6,12,46, 5, 6,78, 5, 6,80, 6,12,56, + 5, 6,81, 6,12,58, 6,18,20, 0, 0, 0, 6,12,54, 6,12,60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 6,92, 6,12,51,15, 7,64,15, 7,65,15, 7,66,15, 7,71, + 15, 7,72,15, 7,73,15, 7,74,15, 7,75,15, 7,77,15,11,68,15,11,71,15,11,76, + 6,12,50, 6,12,52, 6,12,53, 6,12,57, 0, 0, 0, 6,12,47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 9,88, 4, 9,92, 6,18,22, 5,10, 2, 6,18,27, + 6,18,30, 5, 9,89, 4,10, 2, 4,13,81, 5,10, 1, 5, 9,94, 6,18,26, 6,18,32, + 5, 9,90, 6,18,33, 5, 9,93, 6,24,80, 6,18,29, 6,18,28, 4,10, 3, 4, 9,93, + /* plane 2, page 61 */ + 1, 255, /* first, last */ + 6,18,31,15,11,64,15,11,65,15,11,66,15,11,67,15,11,69,15,11,70, + 15,11,72,15,11,73,15,11,74,15,11,75,15,11,77,15,11,78,15,16,26,15,16,29, + 15,16,36, 6,18,24, 4,10, 4, 0, 0, 0, 6,18,21, 6,18,23, 5,10, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,55, 4,13,78, 5,14,41, + 6,25,16, 6,25,14, 5,14,40, 5,14,39, 6,24,92, 5,14,42, 6,24,81, 6,24,91, + 4,13,77, 4,13,79, 6,25, 5, 6,24,86, 6,25, 6, 6,25,10, 6,24,87, 6,25, 9, + 6,24,94, 6,25, 8, 6,33,10, 6,33, 9, 4,18,70, 6,25, 4, 6,25,12, 5,14,37, + 6,25, 3, 6,24,83, 6,25,11, 6,24,88, 6,25,15, 0, 0, 0, 6,25,18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,33,38,15,16,27,15,16,30,15,16,31,15,16,32,15,16,33, + 15,16,34,15,16,35,15,16,37,15,16,38,15,16,39,15,16,40,15,16,42,15,16,43, + 15,16,44,15,16,45,15,16,46,15,16,47,15,16,48,15,16,49,15,16,50,15,16,51, + 15,16,52,15,16,53,15,16,54,15,16,56,15,16,57,15,16,58, 6,24,89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,25, 2, 0, 0, 0, 6,25,17, 0, 0, 0, 4,13,82, 0, 0, 0, + 6,25, 7, 6,24,93, 0, 0, 0, 0, 0, 0, 6,24,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,14,38, 0, 0, 0,15,22,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,61, + 5,19,32, 4,18,59, 4,18,75, 6,33,20, 6,33,24, 6,33,28, 4,18,74, 6,33,35, + 4,18,65, 6,33,22, 4,18,69, 6,33,21, 6,33,37, 4,18,73, 5,19,19, 6,33,17, + 4,18,64, 4,18,71, 6,42,68, 5,19,31, 6,33,34, 5,19,30, 6,33,31, 4,18,57, + 4,18,63, 6,33,12, 4, 5,15, 6,33,27, 6,33,16, 6,42,70, 5,19,24, 0, 0, 0, + 5,19,33, 6,42,56, 6,42,57, 6,33,30, 6,33,36, 5,19,22, 4,18,66, 6,33,32, + 0, 0, 0, 5,19,27, 6,33,15, 6,33,18, 5,19,26, 5,19,21, 4,18,76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,18,78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,23, 6,33,29, + 15,22, 1,15,22, 2,15,22, 3,15,22, 5,15,22, 6,15,22, 7,15,22, 8,15,22,10, + 15,22,12,15,22,14,15,22,15,15,22,16,15,22,17,15,22,18,15,22,22,15,22,23, + 15,22,24,15,22,25,15,22,26,15,22,27,15,22,28,15,22,29,15,28,34,15,28,43, + 15,28,45,15,28,55,15,34,63, 6,42,55, 0, 0, 0, 6,33,19, 0, 0, 0, 6,33,23, + 0, 0, 0, 5,19,25, 6,33,26, 0, 0, 0, 6,33,25, 0, 0, 0, 6,33,39, 6,33,13, + 0, 0, 0, 6,33,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,20, 5,19,28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,24,90, 6,42,66, 6,42,80, 4,24,52, 5,25,67, + /* plane 2, page 62 */ + 0, 255, /* first, last */ + 4,24,53, 6,42,61, 6,42,63, 5,25,71, 5,25,74, 5,25,66, 6,52,40, 5,25,76, + 6,42,58, 4,24,51, 5,19,34, 4,24,56, 6,42,76, 6,42,60, 5,25,72, 6,42,81, + 6,52,21, 6,42,71, 6,42,72, 6,42,78, 5,25,64, 6,52,20, 6,42,79, 4,30,12, + 5,25,63, 5,25,70, 5,25,69, 5,25,68, 6,42,74, 5,25,65, 6,52,19, 6,42,82, + 5,25,77, 6,42,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,28,36,15,28,37,15,28,38,15,28,40,15,28,41,15,28,42, + 15,28,46,15,28,47,15,28,48,15,28,49,15,28,50,15,28,51,15,28,52,15,28,53, + 15,28,54,15,28,56,15,28,57,15,28,59,15,28,60, 0, 0, 0, 6,42,73, 5,25,73, + 0, 0, 0, 6,42,75, 4,24,61, 0, 0, 0, 6,42,59, 6,42,64, 6,42,62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,25,75,15,34,83, 0, 0, 0, 6,52,33, 5,32, 5, 4,30,33, + 6,52,24, 4,30,20, 6,52,27, 6,52,35, 4,30,27, 4,30,35, 4,30,30, 4,30,14, + 6,52,42, 5,32, 9, 5,32, 6, 4,30,32, 6,62,17, 6,52,34, 4,30,26, 5,32,15, + 0, 0, 0, 5,32,13, 4,30,17, 6,62,18, 4,30,34, 5,32,12, 5,32,14, 6,52,30, + 6,52,44, 7, 4,28, 6,52,39, 4,36,43, 6,52,31, 6,52,38, 6,52,23, 6,52,22, + 5,32,11, 5,32, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,30,29, 6,52,28, 6,52,29, 6,52,32, + 6,52,37,15,34,56,15,34,57,15,34,58,15,34,59,15,34,60,15,34,61,15,34,62, + 15,34,64,15,34,65,15,34,66,15,34,69,15,34,70,15,34,71,15,34,72,15,34,73, + 15,34,74,15,34,76,15,34,77,15,34,78,15,34,79,15,34,80,15,34,81,15,34,82, + 15,34,85,15,41, 2,15,41,30, 0, 0, 0, 5,32,10, 0, 0, 0, 0, 0, 0, 6,52,36, + 4,30,21, 6,52,45, 6,52,26, 0, 0, 0, 6,52,43, 0, 0, 0,15,41,15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,34,75, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,47,76, 0, 0, 0, 6,52,25, 7, 4,29, 0, 0, 0, 4,36,52, + 4,36,39, 4,36,40, 4,36,44, 5,38,75, 4,36,46, 5,38,74, 5,38,84, 5,38,86, + 4,36,37, 4,36,51, 6,62,36, 5,38,79, 6,62,33, 6,62,26, 4,36,49, 4,36,48, + 5,38,85, 5,38,82, 5,38,77, 7, 4,32, 7, 4,31, 5,38,87, 6,62,37, 4,36,47, + 6,62,25, 6,62,34, 5,38,80, 5,38,81, 4,36,33, 6,62,29, 5,45,90, 7, 4,30, + 6,62,20, 5,38,78, 6,62,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,38,83, + /* plane 2, page 63 */ + 0, 255, /* first, last */ + 15,41, 3,15,41, 4,15,41, 5,15,41, 6,15,41, 7,15,41, 8,15,41, 9,15,41,11, + 15,41,12,15,41,13,15,41,14,15,41,16,15,41,17,15,41,20,15,41,22,15,41,23, + 15,41,24,15,41,25,15,41,26,15,41,28,15,41,29,15,41,33,15,41,34,15,41,35, + 15,47,77, 7, 2,72, 4,36,34, 6,62,28, 0, 0, 0, 6,62,35, 0, 0, 0, 6,62,21, + 5,38,76, 6,62,19, 6,62,23, 6,62,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,62,22, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,10, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4,66, 7, 4,50, 7, 4,45, 4,42,64, 7, 4,58, + 7, 4,52, 7, 4,44, 4,42,69, 4,42,71, 5,46, 5, 0, 0, 0, 7, 4,67, 7, 4,46, + 7, 4,48, 7, 4,54, 4,42,60, 7, 4,55, 7, 4,41, 5,46, 1, 7, 4,69, 7, 4,39, + 7, 4,36, 4,42,70, 5,45,91, 5,46, 4, 7, 4,68, 4,42,59, 7, 4,59, 4,42,58, + 7, 4,57, 5,45,94, 7, 4,35, 7, 4,71, 5,46, 3, 5,45,93, 7, 4,51, 7, 4,34, + 7,26,73, 7, 4,37, 7, 4,72, 5,46, 2, 7, 4,33, 7, 4,62, 7, 4,70, 5,46, 6, + 5,46, 8, 0, 0, 0, 0, 0, 0, 5,45,92, 4,42,62, 7, 4,63, 7, 4,43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4,49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,46, 7, 7, 4,60,15,47,57,15,47,58, + 15,47,59,15,47,60,15,47,61,15,47,62,15,47,63,15,47,66,15,47,67,15,47,68, + 15,47,69,15,47,70,15,47,71,15,47,72,15,47,74,15,47,75,15,47,79,15,47,80, + 15,47,81,15,47,82,15,47,83,15,47,84,15,47,85,15,47,86,15,47,87,15,47,88, + 15,47,91,15,47,92,15,53,49, 7, 4,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 4,64, 7,15,16, 4,42,67, 7, 4,38, 7, 4,61, 7, 4,40, 7, 4,42, 0, 0, 0, + 15,53,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,47,94, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,41,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,48,92, 5,53,21, 5,53,20, + 5,53, 8, 5,53, 9, 5,53,11, 7,15,19, 5,53,16, 7,15,39, 7,15,32, 7,15,26, + 4,48,89, 7,15,25, 4,48,94, 5,53,19, 7,15,29, 7,15,17, 7,15,23, 7,15,38, + 7,15,27, 7,15,24, 7,15,35, 7,15,22, 7,15,18, 5,53,17, 5,53,10, 5,59,87, + 7,15,28, 7,15,41, 5,53,12, 5,59,89, 5,53,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,15,15, 7,15,20, 7,15,30, 7,15,33,15,53,38,15,53,40,15,53,41, + 15,53,43,15,53,44,15,53,47,15,53,48,15,53,50,15,53,51,15,53,52,15,53,53, + /* plane 2, page 64 */ + 0, 254, /* first, last */ + 15,53,55,15,58,77, 0, 0, 0, 0, 0, 0, 5,53,15, 7,15,31, 7,15,37, 7,15,40, + 7,15,42, 0, 0, 0, 0, 0, 0, 7,15,14, 0, 0, 0, 0, 0, 0, 7,15,36, 0, 0, 0, + 0, 0, 0, 4,49, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,47,65, + 15,58,70,15,58,63, 5,52,26, 5,59,92, 4,54,58, 4,54,63, 5,59,90, 7,24,90, + 7,24,78, 4,59,50, 5,59,91, 5,59,88, 7,24,80, 7,24,86, 7,24,79, 7,24,89, + 7,24,84, 7,24,83, 5,66,24, 7,24,85, 7,24,91, 5,59,93, 7,24,87, 5,53,23, + 0, 0, 0, 3,53,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,24,88,15,58,64, + 15,58,65,15,58,66,15,58,67,15,58,68,15,58,69,15,58,71,15,58,73,15,58,75, + 15,58,80, 7,24,82, 5,59,94, 0, 0, 0, 7,24,92, 7,24,81, 0, 0, 0, 0, 0, 0, + 15,53,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,76, + 0, 0, 0, 0, 0, 0,15,58,79, 0, 0, 0,15,53,39,15,53,45,15,58,62, 7,15,21, + 0, 0, 0, 5,66,31, 5,66,38, 5,66,37, 4,59,61, 5,66,29, 5,66,25, 5,66,34, + 7,32,32, 7,32,38, 4,59,57, 5,66,43, 5,66,36, 7,32,28, 5,66,33, 5,66,42, + 4,59,56, 5,66,35, 7,32,39, 5,66,27, 7,32,33, 5,66,32, 7,32,40, 7,32,26, + 4,59,63, 4,59,53, 7,32,37, 7,32,36, 7,32,30, 5,66,26, 4,59,51, 5,66,28, + 5,66,30, 5,66,41, 5,66,44, 5,66,39, 7,32,31, 4,59,60, 7,32,34, 7,39,63, + 0, 0, 0, 0, 0, 0, 5,66,45, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,63,19,15,63,21, + 15,63,22,15,63,23,15,63,25,15,63,26,15,63,27,15,63,28,15,63,29,15,63,30, + 15,63,31,15,63,32,15,63,33,15,63,34,15,63,35,15,66,68,15,66,69,15,66,76, + 0, 0, 0, 7,39,62, 7,32,29, 7,32,25, 0, 0, 0, 7,32,35, 7,32,27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,63,20, + 15,58,74,15,58,78, 5,66,40, 7,39,69, 7,39,60, 7,39,66, 4,63,92, 4,63,90, + 7,39,51, 5,72,22, 7,39,54, 7,39,52, 0, 0, 0, 7,39,59, 7,39,58, 7,39,53, + 5,72,21, 7,39,57, 7,39,61, 0, 0, 0, 5,76,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,39,65,15,66,70,15,66,71,15,66,72,15,66,73,15,66,74, + 15,66,77,15,66,78,15,66,79,15,66,80,15,66,81, 7,39,55, 0, 0, 0, 7,39,64, + 7,39,70, 7,39,68, 7,39,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,76,39, 5,76,42, 5,76,43, 7,46,11, 4,67,57, 0, 0, 0, 4,67,61, + 7,46,10, 7,46, 9, 5,76,40, 0, 0, 0, 4,67,60, 7,46,14, 4,67,55, 4,67,56, + 4,67,54, 7,46,13, 0, 0, 0, 5,80,27, 5,76,41, 5,76,44, 7,46,15, + /* plane 2, page 65 */ + 5, 255, /* first, last */ + 15,69,34,15,69,35,15,69,36, + 0, 0, 0, 7,46,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,70,40, 5,80,32, + 7,51,54, 5,80,31, 0, 0, 0, 5,80,29, 4,70,43, 7,51,52, 5,80,28, 7,51,57, + 7,51,51, 4,70,45, 7,51,63, 5,80,33, 7,51,53, 7,51,58,15,71,72,15,71,73, + 15,71,74,15,71,75,15,71,77,15,71,78,15,71,79, 0, 0, 0, 7,51,59, 0, 0, 0, + 7,51,60, 7,51,61, 7,51,62, 5,80,26,15,71,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73,53, 7,56,14, 7,51,55, 7,56,15, 5,83,52, + 5,80,34, 7,56,13, 5,83,53, 7,56,17, 0, 0, 0, 4,72,82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,56,18,15,73,51,15,73,52, 0, 0, 0, 7,56,19, 7,56,16, 7,56,12, + 0, 0, 0, 0, 0, 0, 5,86, 1, 5,86, 2, 7,59,73, 7,59,72, 5,85,94, 0, 0, 0, + 0, 0, 0, 7,59,71, 5,85,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,74,59,15,74,60,15,74,61, 7,59,74, 0, 0, 0, 7,59,70, 0, 0, 0, 0, 0, 0, + 7,62,86, 5,87,71, 7,62,87, 4,76,81, 7,62,84, 0, 0, 0, 5,87,70, 0, 0, 0, + 7,62,85, 4,76,82, 7,64,89, 7,64,88, 0, 0, 0, 7,64,87,15,76,15, 0, 0, 0, + 7,66,25, 4,77,56, 5,90,11, 5,90,10, 4,77,57, 0, 0, 0, 0, 0, 0, 4,77,84, + 5,90,73, 5,90,74, 0, 0, 0, 7,67,55, 7,68,43, 5,91,33,15,77, 6, 7,69,60, + 5,92,28, 0, 0, 0, 6, 3,15, 6, 5,19, 4, 3, 4, 4, 3, 5, 6, 5,18, 0, 0, 0, + 15, 2,63,15, 2,64,15, 2,65, 6, 5,20, 0, 0, 0, 4, 4,51, 4, 4,52, 5, 4,52, + 6, 8,44, 5, 4,53, 5, 4,55, 0, 0, 0,15, 4,75,15, 4,76,15, 4,77,15, 4,80, + 15, 4,82, 0, 0, 0, 6, 8,43, 0, 0, 0, 0, 0, 0, 5, 6,84, 4, 7, 8, 5, 6,85, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 7,79,15, 7,80, + 15, 7,81,15, 7,83,15, 7,84,15, 7,85,15, 7,86,15, 7,87, 0, 0, 0, 6,12,63, + 15, 7,82, 6,12,62, 4, 7,10, 0, 0, 0, 5, 4,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,10, 5, 6,18,44, 5,10, 6, 6,18,36, + 5,10, 7, 6,18,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,18,38, + 15,11,79,15,11,80,15,11,81,15,11,82,15,11,83,15,11,84,15,11,85,15,11,86, + 15,11,87,15,11,88,15,11,89,15,11,91,15,11,92,15,11,93,15,11,94,15,12, 1, + 15,12, 3, 4,10, 9, 6,18,37, 6,18,35, 0, 0, 0, 6,18,39, 0, 0, 0, 6,25,26, + 5,10, 8, 6,18,42,15,12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,18,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,47, + 5,14,46, 6,25,22, 6,25,25,15,16,74, 4,18,79, 6,25,23, 4,13,84, 6,25,20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,43,15,16,61,15,16,62, + /* plane 2, page 66 */ + 0, 250, /* first, last */ + 15,16,63,15,16,64,15,16,65,15,16,66,15,16,67,15,16,68,15,16,69,15,16,70, + 15,16,72,15,16,73,15,16,75,15,16,76,15,16,78,15,16,79,15,16,80,15,16,81, + 15,16,82, 5,14,44, 6,25,21, 0, 0, 0, 0, 0, 0, 6,25,27, 6,25,28, 0, 0, 0, + 15,16,71, 0, 0, 0, 0, 0, 0,15,16,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,25,24, 5,14,45, 0, 0, 0, 6,33,43, 4,18,84, 5,19,36, + 6,33,47, 4,18,83, 4,18,85, 6,33,46, 6,33,52, 6,33,49, 6,33,45, 6,33,44, + 6,42,83, 6,33,50, 6,33,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,33,51,15,22, 4,15,22,30,15,22,31,15,22,32,15,22,33,15,22,35, + 15,22,36,15,22,37,15,22,38,15,22,39,15,22,41,15,22,42,15,22,44,15,22,45, + 15,22,46,15,22,48, 6,33,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,33,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,22,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,35, 0, 0, 0, 5,19,37, + 0, 0, 0, 6,33,53, 4,24,73, 6,42,88, 6,33,42, 5,25,81, 5,25,79, 6,42,94, + 0, 0, 0, 6,43, 1, 5,25,78, 6,42,85, 4,24,70, 6,42,90, 6,42,84, 6,42,93, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,24,67, 5,25,80, 6,42,87,15,28,62,15,28,63,15,28,64,15,28,65, + 15,28,66,15,28,67,15,28,68,15,28,70,15,28,71,15,28,72,15,28,73,15,28,75, + 15,28,76,15,28,77,15,28,78,15,28,79,15,28,80,15,28,81,15,28,82,15,28,85, + 15,28,87,15,28,88,15,28,89,15,28,90,15,28,91,15,28,92,15,29, 1, 6,42,89, + 6,42,92, 4,24,71, 0, 0, 0, 6,42,86, 6,42,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,28,74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,25,82, + 0, 0, 0, 0, 0, 0, 5,32,20, 0, 0, 0, 6,52,58, 6,52,56, 5,32,16, 6,52,54, + 6,52,61, 4,30,39, 6,52,55, 4,30,36, 6,52,59, 6,52,62, 4,30,37, 5,32,18, + 6,52,51, 6,52,67, 6,52,63, 6,52,68, 5,32,21, 0, 0, 0, 6,52,60, 6,52,66, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,34,86,15,34,89,15,34,91,15,34,92,15,34,93, + 15,35, 1,15,35, 2,15,35, 3,15,35, 5,15,35, 6,15,35, 7,15,35, 8,15,35, 9, + 15,35,10,15,35,11,15,35,13,15,35,14,15,35,16,15,35,19,15,35,20,15,35,21, + 15,35,22,15,35,23,15,35,24,15,35,25,15,35,26,15,35,27,15,35,29,15,35,30, + 6,52,49, 6,52,50, 6,52,53, 0, 0, 0, 6,52,70, 0, 0, 0, 0, 0, 0, 4,30,42, + 6,52,65, 6,52,69, 0, 0, 0, 6,58,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,35,12, + /* plane 2, page 67 */ + 1, 255, /* first, last */ + 5,32,19, 0, 0, 0, 5,32,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,52, + 6,62,49, 6,62,48, 5,38,94, 6,62,42, 5,39, 2, 4,36,53, 5,38,92, 5,38,91, + 5,38,90, 7, 4,80, 7, 4,74, 6,62,38, 5,39, 1, 6,62,39, 6,62,40, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,38,89, 6,62,43, 6,62,47,15,41,36,15,41,37, + 15,41,38,15,41,39,15,41,41,15,41,42,15,41,44,15,41,45,15,41,46,15,41,47, + 15,41,48,15,41,49,15,41,50,15,41,51,15,41,53,15,41,54,15,41,55,15,41,58, + 15,41,59,15,41,61,15,41,62,15,41,64,15,41,66,15,41,67,15,41,68, 0, 0, 0, + 4,36,61, 5,38,93, 6,62,44, 6,62,50, 6,62,41, 6,62,45, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,41,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,52,64,15,34,94,15,34,90, + 4,42,75, 0, 0, 0, 0, 0, 0, 5,46,12, 7, 4,84, 7, 4,77, 7, 4,73, 5,46,10, + 7, 4,76, 7, 4,81, 7, 4,82, 7, 4,85, 7, 4,75, 5,46, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,46, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,46,11, 7, 4,83, + 15,48, 3,15,48, 4,15,48, 6,15,48, 7,15,48, 8,15,48, 9,15,48,10,15,48,11, + 15,48,14,15,48,15,15,48,17,15,48,18,15,48,19,15,48,20,15,48,21,15,48,23, + 15,48,24,15,48,25,15,48,26,15,48,27,15,48,28, 0, 0, 0, 7, 4,78,15,48,12, + 0, 0, 0, 0, 0, 0, 7,10,81, 0, 0, 0,15,48,13,15,48,16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48, 2, 5,46,14, + 5,46,13, 0, 0, 0, 6,62,46, 0, 0, 0, 0, 0, 0, 4,49,10, 7,15,50, 7,15,70, + 7,15,48, 7,15,64, 7,15,62, 5,53,27, 4,49, 7, 7,15,65, 7,15,67, 7,15,53, + 7, 4,79, 4,49, 8, 7,15,54, 7,15,68, 7,15,69, 4,49, 6, 7,15,56, 7,15,52, + 4,49, 9, 7,15,71, 5,53,26, 5,53,28, 7,15,66, 7,15,57, 0, 0, 0, 7,15,61, + 7,15,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,15,43, 7,15,51, + 7,15,60,15,53,57,15,53,58,15,53,59,15,53,60,15,53,61,15,53,62,15,53,63, + 15,53,64,15,53,65,15,53,66,15,53,67,15,53,70,15,53,71,15,53,72,15,53,74, + 15,53,75,15,53,77,15,53,78,15,53,80,15,53,81,15,53,82, 0, 0, 0,15,53,69, + 5,53,24, 7,15,45, 7,15,46, 7,15,59, 0, 0, 0, 7,15,63, 7,17,90, 7,15,49, + 7,12,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,53,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,53,29, 5,53,25, 7,15,44, + 7, 4,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,15,55, 7,25, 3, 4,54,65, 7,25, 5, + 5,53,30, 7,25, 9, 7,25, 8, 4,54,67, 7,15,72, 5,60, 1, 7,24,93, 5,60, 4, + /* plane 2, page 68 */ + 0, 254, /* first, last */ + 5,60, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,58,81,15,58,82,15,58,86,15,58,87, + 15,58,88,15,58,89,15,58,90,15,58,91,15,58,92,15,58,93,15,58,94,15,59, 1, + 15,59, 2,15,59, 3, 7,24,94, 0, 0, 0, 0, 0, 0, 7,25, 4, 0, 0, 0, 7,25, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,60, 3, 7,25, 1, + 0, 0, 0, 0, 0, 0,15,53,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,32,47, 4,59,66, + 7,32,46, 5,66,46, 7,32,43, 7,32,51, 7,32,49, 7,32,44, 0, 0, 0, 4,59,67, + 5,66,47, 5,66,48, 4,59,65, 7,32,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,32,42, + 7,32,50,15,63,36,15,63,38,15,63,37,15,63,39,15,63,40,15,63,41,15,63,42, + 15,63,44,15,63,45, 7,32,48, 7,34, 2, 0, 0, 0, 7,32,53, 7,32,45, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,32,41, 7,25,10, 0, 0, 0, 0, 0, 0,15,65,86,15,58,84, + 15,58,85, 0, 0, 0, 7,39,76, 5,72,23, 4,64, 1, 0, 0, 0, 7,39,77, 4,64, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,74,15,66,84,15,66,85,15,66,86, + 15,66,87, 0, 0, 0, 7,39,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,71, + 7,39,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,63,43, 7,39,72,15,69,37, 5,76,47, 7,46,16, 7,46,19, 7,46,27, 5,76,46, + 5,76,45, 5,76,49, 4,64, 3, 0, 0, 0, 7,46,18, 7,46,24, 4,67,66, 4,67,64, + 7,46,28, 7,46,17, 7,46,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,23, 0, 0, 0, + 15,69,40, 7,46,20,15,69,38,15,69,39,15,69,42,15,69,43,15,69,44,15,69,45, + 15,69,46, 0, 0, 0, 0, 0, 0, 7,46,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,26, 0, 0, 0, 5,76,48, 0, 0, 0, + 0, 0, 0, 7,51,68, 4,67,65, 7,51,70, 5,80,35, 0, 0, 0, 4,70,47, 7,51,71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,66, 7,51,67, 0, 0, 0, 7,51,69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,81, 0, 0, 0,15,71,82,15,71,83,15,71,84, + 15,71,85, 0, 0, 0, 7,56,22, 5,83,54, 4,74,47, 7,56,23, 7,56,24, 0, 0, 0, + 7,56,20,15,73,54,15,73,55,15,73,56, 7,56,21, 7,59, 4, 0, 0, 0, 0, 0, 0, + 7,59,78, 7,59,80, 7,59,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60,36, + 7,59,79, 0, 0, 0, 7,59,76, 0, 0, 0, 7,59,75, 5,86, 3,15,74,64, 7,62,88, + 0, 0, 0,15,74,63, 5,87,72, 0, 0, 0, 7,65, 1, 7,64,92, 7,64,94, 7,65,24, + 7,64,91, 7,64,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,66,26, 5,90,75,15,76,68, + 15,76,69, 0, 0, 0, 7,68,45, 7,68,44, 7,68,46, 7,69,23, 7,70,20, 5, 1,43, + 0, 0, 0, 6, 3,16, 6, 8,45, 6, 8,46, 5, 4,56, 0, 0, 0, 6,12,66, 6,12,65, + 6,12,67, 0, 0, 0, 0, 0, 0,15, 7,88,15, 7,89, 6,18,46, 5,10,11, + /* plane 2, page 69 */ + 0, 255, /* first, last */ + 5,10, 9, 6,18,47, 5,10,10, 6,18,49,15,12, 4,15,12, 5,15,12, 6, 6,18,45, + 0, 0, 0, 0, 0, 0, 6,18,48, 0, 0, 0, 5,14,49, 0, 0, 0, 5,14,48,15,16,83, + 6,33,55, 6,33,54, 6,33,56,15,22,49, 4,24,74, 6,43, 2, 0, 0, 0, 6,39,35, + 6,45,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,52,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,52,73, 0, 0, 0, 6,62,51, 5,39, 3, 6,62,54, 6,62,53, 6,62,52, 7, 4,90, + 5,46,15, 7, 4,87, 7, 4,89, 0, 0, 0, 7, 4,88, 0, 0, 0, 7,15,73, 0, 0, 0, + 7,15,74, 5,53,31, 4,54,69,15,59, 4,15,59, 5,15,59, 6, 0, 0, 0, 0, 0, 0, + 15,53,83, 7,32,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,72,24, 0, 0, 0,15,69,47,15,69,48, 0, 0, 0, 7,46,29, 0, 0, 0, 0, 0, 0, + 7,51,72, 7,59,81, 0, 0, 0, 7,62,89, 0, 0, 0, 7,65, 2,15, 4,83,15, 4,84, + 6,12,68, 6,12,69, 0, 0, 0, 6,33,57, 0, 0, 0, 6,33,58,15,29, 2,15,29, 3, + 6,52,74,15,41,69, 5,39, 4, 5,53,32,15, 1,72, 6,11,75, 5,10,12, 4,10,11, + 4,13,87,15,16,84, 5,17,76, 6,43, 3, 6,52,76, 6,52,75, 5,53,33, 7, 4,91, + 7, 4,92, 5,53,34, 6, 2, 5, 6, 3,17, 0, 0, 0, 6, 5,21, 6, 8,47, 4, 7,13, + 6,12,71, 6,12,70, 6,18,50, 4,10,13, 6,18,51, 6,18,52, 6,25,30, 4,13,88, + 0, 0, 0,15,16,85, 6,25,29, 6,33,59, 6,33,62, 6,33,61, 4,18,88, 0, 0, 0, + 0, 0, 0, 6,33,60,15,22,50,15,22,51, 0, 0, 0, 6,43, 8, 6,43, 4, 6,43, 6, + 6,43, 7, 6,43, 9, 6,43, 5, 6,45,56, 6,52,77, 6,52,78,15,35,31, 6,62,56, + 6,62,57,15,41,70, 0, 0, 0, 7, 4,93,15,48,30, 7, 4,94, 5,53,35, 5,66,49, + 4,49,12, 7,15,75, 7, 5, 1, 5,53,36, 7,25,11, 7,25,12, 5,60, 5, 0, 0, 0, + 7,39,80, 0, 0, 0, 5,76,50, 7,56,25, 7,59,82, 7,67,56, 5,91,34, 7,68,47, + 15, 1,73, 6, 8,49, 5, 4,57, 6, 8,48, 4, 7,14, 6,12,75, 6,12,74, 6,12,73, + 6,12,72, 6,18,54, 6,18,53, 5,10,13, 6,18,55, 0, 0, 0, 0, 0, 0, 5,10,14, + 0, 0, 0, 0, 0, 0, 5,14,50, 4,13,89, 4,13,91, 6,25,33, 6,25,31, 0, 0, 0, + 5,19,38, 5,19,39, 6,33,63, 0, 0, 0, 6,33,66, 6,33,64, 0, 0, 0, 6,43,11, + 4,24,77, 6,43,14, 6,43,10, 6,43,12, 6,43,13, 5,25,83, 5,25,86, 5,25,84, + 0, 0, 0, 5,25,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,24,78, + 5,32,24, 6,52,79, 4,30,45, 5,32,22, 5,32,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,52,80,15,29, 4, 5,39, 5, 6,62,59, 0, 0, 0, 6,62,60, 6,62,58,15,41,71, + 5,46,18, 7, 5, 5, 5,46,17, 5,46,16, 5,46,19, 7, 5, 4, 7, 5, 2, 5,46,20, + 0, 0, 0, 7, 5, 3, 0, 0, 0, 5,53,38, 5,53,39, 5,53,40, 7,15,77, 5,53,37, + 7,15,76, 0, 0, 0, 5,60, 6, 4,54,70,15,59, 7,15,59, 8, 0, 0, 0, 5,66,51, + /* plane 2, page 70 */ + 0, 255, /* first, last */ + 5,66,50, 0, 0, 0, 0, 0, 0, 5,76,51, 7,51,73, 5, 3,72, 0, 0, 0, 0, 0, 0, + 6,25,35, 6,25,34, 0, 0, 0, 0, 0, 0, 4,24,79, 6,43,15,15,29, 5,15,29, 6, + 6,52,81, 6,62,61, 0, 0, 0, 0, 0, 0, 5, 1,85,15, 2,67, 6, 5,22,15, 2,66, + 6, 8,51,15, 4,85, 6, 8,50, 6, 8,52, 5, 6,89, 5, 7, 2, 5, 6,88, 5, 6,91, + 5, 6,86, 5, 6,93, 6,12,78, 4, 7,16, 5, 7, 1, 6,12,76, 5, 6,94, 5, 7, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6,92, 6,12,77,15, 7,91,15, 7,92,15, 7,94, + 15, 8, 1, 0, 0, 0, 5, 6,90, 6,12,79, 6,12,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,10,18, 5,10,16, 5,10,15, 6,18,63, 6,18,60, 5,10,19, 5,10,17, 4,10,16, + 6,18,58, 0, 0, 0, 6,18,57,15,12, 8,15,12, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,18,59, 6,18,62, 0, 0, 0, 6,18,56, 6,18,61, 0, 0, 0, 5,10,20, + 15, 7,93, 5,14,56, 5,14,52, 5,14,54, 5,14,55, 5,14,53, 0, 0, 0, 6,25,36, + 5,14,57, 0, 0, 0, 0, 0, 0, 4,18,91, 6,33,71, 6,33,72, 5,19,41, 5,25,87, + 4,18,93, 4,18,92, 5,19,43, 0, 0, 0, 5,19,44, 0, 0, 0,15,22,52,15,22,53, + 6,33,69, 0, 0, 0, 6,33,73, 6,33,68, 0, 0, 0, 5,19,40, 0, 0, 0, 0, 0, 0, + 4,24,81, 4,24,84, 5,25,93, 6,43,20, 5,25,89, 5,25,91, 0, 0, 0, 5,25,88, + 6,43,18, 6,43,21,15,29, 7,15,29, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,43,19, 6,43,16, 6,43,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,25,90, 5,25,92, 5,19,42,15,29, 9, 6,43,22, 5,39,11, 5,32,30, 5,32,28, + 4,30,48, 6,62,68, 6,52,83, 5,39, 6, 6,52,82, 6,52,85, 6,52,84, 0, 0, 0, + 15,35,32,15,35,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,29, 0, 0, 0, + 6,52,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,32,27, 4,36,65, 5,39,13, 5,39, 8, 5,39,14, 5,39,12, 6,62,63, 6,62,67, + 5,39, 7, 5,39,10, 6,62,71, 6,62,66, 6,62,65, 5,32,26, 6,62,70, 0, 0, 0, + 15,41,72,15,41,73,15,41,74,15,41,75, 5,39,15, 5,39, 9, 6,62,64, 6,52,86, + 0, 0, 0, 0, 0, 0, 6,62,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,41,76, 5,39,16, 5,46,22, 7, 5, 6, 4,42,84, 5,46,25, 5,46,26, 5,46,24, + 4,42,80, 5,46,21, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48,31, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 7, + 0, 0, 0, 7,15,80, 5,53,41, 5,53,46, 7,15,81, 5,53,43, 5,53,45, 5,53,42, + 0, 0, 0, 5,53,44, 0, 0, 0, 7,15,79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,25,16, + 7,25,14, 5,60, 7, 4,54,72, 4,54,73, 7,15,78, 0, 0, 0, 7,25,15, 0, 0, 0, + 0, 0, 0, 7,32,55, 7,32,56, 5,72,26, 0, 0, 0, 7,51,74, 7,39,82, 7,39,83, + /* plane 2, page 71 */ + 0, 253, /* first, last */ + 7,39,81, 0, 0, 0, 5,72,25, 7,46,31, 5,76,52, 5,76,53, 0, 0, 0, 5,80,37, + 7,51,76, 5,80,36, 0, 0, 0, 5,80,38, 7,56,26, 5,83,57, 0, 0, 0, 7,59,84, + 5,83,56, 7,59,85, 7,59,83, 0, 0, 0, 5,87,73, 0, 0, 0, 7,65, 3,15,76,17, + 0, 0, 0, 7,68,48,15, 1,29, 6, 3,18, 5, 1,87, 5, 1,88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 2,88, 5, 2,91, 5, 2,87, 4, 3, 8, 0, 0, 0, 5, 2,90, 0, 0, 0, + 6, 5,23, 0, 0, 0, 0, 0, 0, 5, 2,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4,62, + 5, 4,63, 4, 4,59, 4, 7,23, 6, 8,56, 4, 4,58, 5, 4,58, 6, 8,62, 5, 4,59, + 6, 8,59, 5, 7,15, 6,12,82, 4, 4,55, 5, 4,61, 5, 4,60, 6, 8,58, 6, 8,57, + 6,12,83,15, 4,87, 6, 8,55, 6, 8,60, 0, 0, 0, 0, 0, 0, 6, 8,61, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8,54, 4, 4,56, 0, 0, 0, 6,12,90, + 5, 7, 8, 6,12,91, 5, 7,12, 6,12,89, 6,12,92, 5, 7, 7, 5, 7,10, 6,12,88, + 5, 7,13, 5, 7, 5, 5, 7, 9, 5, 7, 4, 6,12,87, 0, 0, 0, 4, 7,24, 5,10,22, + 6, 8,53, 6,18,64, 0, 0, 0, 5, 7,11, 6,12,86,15, 8, 2, 6,12,93, 0, 0, 0, + 6,12,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7,21, 0, 0, 0, 5,10,21, 5,10,30, + 6,18,72, 5,10,25, 6,25,43, 5,10,29, 6,18,65, 6,25,44, 6,33,76, 5,10,28, + 4,10,17, 5,10,27, 6,18,68, 5,10,26, 6,18,70, 4,10,19, 5,10,32, 6,18,67, + 5, 7, 6, 5,10,23, 5,10,24, 0, 0, 0,15,12,10,15,12,12,15,12,13, 0, 0, 0, + 6,18,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,11, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,10,31, + 0, 0, 0, 6,25,46, 5,14,62, 4,19, 1, 6,25,41, 6,25,45, 4,14, 5, 5,14,59, + 5,14,64, 5,14,61, 4,14, 3, 6,25,37, 0, 0, 0, 6,25,42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,87,15,16,88, 0, 0, 0, 6,25,40, + 5,14,58, 0, 0, 0, 4,14, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,25,39, 6,25,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,63, 6,25,38, + 5,19,46,15,16,86, 0, 0, 0, 4,19, 4, 6,33,78, 5,19,53, 5,25,94, 5,19,50, + 6,33,80, 6,33,83, 5,19,47, 6,33,79, 6,43,27, 4,19, 6, 5,19,51, 6,43,24, + 6,43,23, 5,19,48, 6,43,25, 0, 0, 0, 6,33,81, 6,33,82, 0, 0, 0, 6,33,84, + 0, 0, 0, 6,43,26, 5,26, 8, 0, 0, 0, 6,52,91, 5,26, 6, 5,32,31, 4,24,85, + 5,26, 2, 6,43,36, 5,32,32, 5,26, 7, 4,24,86, 5,26, 5, 5,26, 4, 4,24,88, + 6,43,31, 4,30,49, 5,26, 1, 6,43,28, 6,43,30, 4,30,55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,29,10,15,29,11, 6,52,89, 6,50,82, 6,52,90, 0, 0, 0, + 6,43,32, 0, 0, 0, 6,43,33, 6,43,37, 0, 0, 0, 6,43,29, + /* plane 2, page 72 */ + 7, 252, /* first, last */ + 5,26, 3, + 0, 0, 0, 0, 0, 0,15,35,35, 0, 0, 0, 0, 0, 0, 4,30,54, 5,32,40, 6,53, 2, + 5,32,39, 4,30,53, 6,53, 7, 5,32,43, 6,53, 4, 6,52,94, 6,52,93, 6,53, 6, + 5,32,38, 5,32,36, 5,32,35, 0, 0, 0, 6,53, 1, 5,32,34, 6,53, 8, 5,32,42, + 5,32,33, 4,30,56, 0, 0, 0, 0, 0, 0, 5,32,41, 6,53, 5,15,35,37,15,35,38, + 15,41,80,15,48,32, 0, 0, 0, 5,32,37, 6,53, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,44, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,62,77, 5,39,26, 6,62,73, 7, 5, 9, 5,39,23, 4,36,75, 5,39,21, + 5,39,19, 6,62,76, 5,39,27, 5,39,22, 5,39,20, 6,62,80, 4,36,76, 5,39,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,41,77, 7, 5,10, 0, 0, 0, + 15,41,79, 6,62,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,62,72, + 6,62,74, 6,62,79, 0, 0, 0, 0, 0, 0, 4,42,93, 5,39,29, 5,39,28, 5,39,25, + 5,39,24, 6,62,81, 5,39,18, 7, 5,17, 4,42,88, 4,42,89, 7, 5,16, 5,46,28, + 7, 5,20, 7,15,83, 5,46,33, 7, 5,15, 7, 5,11, 5,46,30, 5,46,37, 0, 0, 0, + 5,46,27, 5,46,36, 5,46,35, 5,46,29, 5,53,47, 7,15,82, 5,46,31, 0, 0, 0, + 0, 0, 0, 5,46,32, 5,46,38, 7, 5,12, 7, 5,13,15,53,85, 0, 0, 0, 5,53,48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,14, 0, 0, 0, 7, 5,19, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,41,78, 4,49,19, 5,46,34, 5,53,55, 4,49,21, 5,53,53, 5,53,49, + 5,53,50, 7,15,89, 4,49,17, 7,15,88, 7,15,87, 5,60, 8, 4,49,22, 5,53,51, + 5,53,54, 7,15,85, 7,25,18, 0, 0, 0, 4,54,77, 7,25,17, 7,15,86, 0, 0, 0, + 7, 5,18,15,53,87, 7, 5,21, 5,53,52, 0, 0, 0, 0, 0, 0, 5,60,10, 7,25,19, + 5,60, 9, 7,39,87, 7,25,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,25,20, + 15,59, 9,15,59,10,15,59,11,15,59,12, 7,32,61, 5,66,53, 5,66,52, 7,32,58, + 7,32,57, 7,32,60, 4,59,72, 7,32,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,63,46,15,63,47, 0, 0, 0, 5,66,54, 0, 0, 0, 4,67,68, 0, 0, 0, 0, 0, 0, + 7,39,88, 7,46,32, 7,39,86, 7,39,84, 0, 0, 0, 7,46,33, 5,76,54, 0, 0, 0, + 7,46,34, 5,80,40, 7,51,77, 5,80,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,72,84, + 5,80,41, 7,56,27, 0, 0, 0, 7,59,86, 7,59,88, 7,59,87, 0, 0, 0, 5,87,74, + 7,62,90, 0, 0, 0,15,75,53, 7,65, 4, 7,67,57, 0, 0, 0,15, 8, 3, 6,43,38, + 6,62,82, 5, 1,44, 6, 5,24, 6, 3,19, 0, 0, 0, 0, 0, 0, 6, 8,63, 5, 4,65, + 4, 4,61, 0, 0, 0, 4, 4,60, 0, 0, 0, 6, 8,65, 6, 8,64, 0, 0, 0,15, 4,89, + 5, 4,64, 5, 7,16, 6,13, 5, 4, 7,28, 5,10,33, + /* plane 2, page 73 */ + 2, 255, /* first, last */ + 15, 8, 5,15, 8, 6,15, 8, 7,15, 8, 8,15, 8, 9, 0, 0, 0, + 6,13, 3, 0, 0, 0, 0, 0, 0,15,12,32,15, 8, 4, 6,13, 2,15,12,28, 6,18,73, + 5,10,37, 5,10,34, 4,10,22, 6,18,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,15,73, 0, 0, 0,15,12,15,15,12,16,15,12,17,15,12,19,15,12,20,15,12,21, + 15,12,22,15,12,23,15,12,24,15,12,26,15,12,27,15,12,29, 0, 0, 0, 0, 0, 0, + 6,18,74, 0, 0, 0, 6,18,76,15,12,30,15,12,31, 0, 0, 0, 0, 0, 0,15,12,14, + 0, 0, 0, 5,10,36, 5,10,35, 0, 0, 0, 0, 0, 0, 6,25,51, 5,19,54, 5,14,65, + 4,14, 9, 6,25,49, 4,14, 8, 6,25,50, 6,25,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,89,15,16,90,15,16,91,15,16,92,15,16,93, + 15,16,94,15,17, 1,15,17, 3,15,17, 4,15,17, 5,15,17, 6, 6,25,48,15,22,67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,19,17, 6,25,53, 6,33,90, 5,19,55, + 6,33,91, 4,19,18, 6,33,87, 6,33,88, 6,33,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,17, 2,15,22,54,15,22,56,15,22,60, + 15,22,63,15,22,64,15,22,65,15,22,66,15,22,68,15,22,61, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,33,92, 0, 0, 0, 0, 0, 0,15,22,59,15,22,58,15,22,62, 5,19,56, + 6,33,86,15,29,30, 0, 0, 0,15,29,20, 6,43,43, 5,26,11, 5,26,10, 5,26,12, + 6,53, 9, 4,30,58, 0, 0, 0, 5,32,45, 0, 0, 0,15,29,24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,24,92, 6,43,41, 6,43,44,15,29,12,15,29,13,15,29,14,15,29,15,15,29,16, + 15,29,18,15,29,21,15,29,22,15,29,23,15,29,25,15,29,26,15,29,31,15,35,48, + 6,43,46, 6,53,18, 6,43,45, 0, 0, 0,15,29,32, 6,43,40, 6,43,42, 0, 0, 0, + 6,53,10, 0, 0, 0, 0, 0, 0,15,29,19,15,29,29,15,29,17, 5,26, 9, 6,53,11, + 6,53,16, 4,30,59, 6,53,17, 6,53,15, 6,53,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,39,30,15,35,39,15,35,42,15,35,44, + 15,35,45,15,35,46,15,35,47,15,35,49,15,35,50,15,35,51,15,35,52,15,35,53, + 15,35,55,15,35,56,15,35,58,15,35,59,15,35,60,15,35,61,15,35,62,15,35,63, + 15,35,64,15,35,65,15,35,66,15,35,67,15,35,69, 0, 0, 0, 6,53,12, 5,32,47, + 0, 0, 0, 5,26,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,35,43,15,35,40, + 5,39,31, 0, 0, 0, 6,53,13,15,35,57,15,41,90,15,41,91,15,42, 6, 7, 5,24, + 0, 0, 0, 0, 0, 0, 6,62,84, 5,39,33, 7, 5,22, 4,36,77, 5,39,32, 6,62,85, + 6,62,87, 0, 0, 0, 6,62,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,62,83,15,41,81,15,41,82,15,41,83,15,41,84,15,41,85, + /* plane 2, page 74 */ + 0, 254, /* first, last */ + 15,41,87,15,41,88,15,41,89,15,41,92,15,41,93,15,41,94,15,42, 1,15,42, 2, + 15,42, 4,15,42, 5,15,42, 7,15,42, 8,15,42, 9, 5,39,34, 0, 0, 0, 3,40, 6, + 7, 5,25, 0, 0, 0, 0, 0, 0,15,42, 3, 7, 5,32, 4,42,94, 5,46,39, 7,15,91, + 7, 5,26, 7,15,90, 7, 5,28, 7, 5,31, 7, 5,33, 7, 5,34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48,33,15,48,34,15,48,35,15,48,36,15,48,37, + 15,48,38,15,48,40,15,48,41,15,48,42,15,48,43,15,48,44, 0, 0, 0, 0, 0, 0, + 7, 5,29, 5,46,40, 7, 5,27, 5,46,41,15,53,92,15,54,14,15,48,39, 0, 0, 0, + 7,16, 2, 7, 5,30, 5,53,56, 5,53,59, 5,53,57, 4,49,27, 7,16, 4, 7,15,93, + 7,15,94, 7,15,92, 0, 0, 0, 4,49,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,16, 1,15,53,88,15,53,89,15,53,91,15,53,93,15,54, 3, + 15,54, 4,15,54, 5,15,54, 6,15,54, 7,15,54, 9,15,54,13,15,54,15, 7,16, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16, 3, 7,25,22,15,54,16,15,54, 1,15,54, 8, + 5,53,60, 5,53,58,15,54,12, 7,25,27, 7,25,29, 5,60,13, 5,60,11, 7,32,62, + 7,25,25, 4,59,74, 4,54,78, 0, 0, 0, 4,54,80, 7,25,24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,14,15,59,15,15,59,16,15,59,17,15,59,18, + 15,59,19,15,59,20,15,59,21, 5,60,12, 7,25,26, 7,25,28, 7,25,23, 7,32,63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,28, 4,59,75, 5,66,55, 4,64, 6, 7,32,64, + 4,64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,63,49, + 15,63,51,15,63,52,15,63,53,15,63,55,15,63,57,15,63,58,15,63,59,15,63,60, + 15,63,63, 0, 0, 0, 7,32,65, 7,32,66,15,63,48,15,63,50,15,63,56, 0, 0, 0, + 15,67, 3, 7,39,92, 7,39,91, 5,72,30, 7,39,90, 7,46,35, 5,72,29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,39,89,15,66,92,15,66,94,15,67, 1, + 15,67, 2, 4,64, 9,15,66,89, 0, 0, 0,15,66,90,15,66,93, 7,51,79, 5,76,55, + 4,70,50,15,69,50,15,69,51,15,69,52,15,69,53, 7,46,36, 7,51,78, 0, 0, 0, + 15,63,62, 4,70,49, 7,53,92, 0, 0, 0, 4,70,51, 7,56,28, 0, 0, 0, 0, 0, 0, + 15,71,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,59,89, 4,74,50,15,73,57,15,73,58, + 5,86, 4, 0, 0, 0,15,74,65,15,74,67,15,75,54, 0, 0, 0, 0, 0, 0,15,74,66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,17, 7,65, 6, 7,65, 5,15,76,18, 0, 0, 0, + 5,90,12, 4,78,20, 6,13, 6, 5,10,39, 5,10,38, 6,18,77,15,12,33, 6,18,78, + 6,25,54, 5,14,67, 5,14,68, 6,25,55, 6,25,56, 4,19,22, 5,19,57, 5,19,58, + 15,22,69, 0, 0, 0, 5,26,15, 5,26,16, 6,43,47,15,29,33, 6,43,48, + /* plane 2, page 75 */ + 1, 254, /* first, last */ + 4,30,60, 5,32,48, 5,32,49,15,35,70, 0, 0, 0, 0, 0, 0, 7, 5,37, + 6,62,88, 5,39,35, 0, 0, 0,15,42,10, 5,39,36, 7, 5,36, 7,16, 6, 4,49,29, + 5,46,42,15,48,45, 7, 5,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,49,30, 7,25,30, + 5,66,56,15,63,64, 4,59,77, 4,70,52, 7,51,80, 5,80,42, 0, 0, 0, 0, 0, 0, + 5,86, 5, 7,59,90, 7,62,91, 7,66,27, 7,66,28, 0, 0, 0, 5, 4,66, 0, 0, 0, + 5, 7,17, 4, 7,29, 6,13, 7, 0, 0, 0, 5,10,40, 5,10,41, 6,18,79, 4,10,27, + 4,10,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,69, 5,14,71, 6,25,60, 5,14,70, + 0, 0, 0,15,17, 9, 6,25,59, 6,25,57, 6,25,58, 0, 0, 0, 5,19,61, 6,34, 2, + 6,33,94, 6,34, 4, 5,19,62, 6,34, 3, 5,19,60,15,22,70,15,22,72, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25, 2, 5,26,17, 6,53,22, 4,25, 7, + 5,26,20, 5,26,19, 5,19,63, 6,43,50, 5,26,18, 5,19,59, 0, 0, 0, 6,43,49, + 6,43,51, 0, 0, 0, 0, 0, 0, 4,30,68, 5,32,50, 6,53,23, 4,30,62, 5,32,51, + 6,53,19, 6,53,21, 4,30,63, 6,53,24, 0, 0, 0,15,35,71, 6,53,20, 5,39,39, + 6,62,92, 5,39,37, 6,62,90, 0, 0, 0, 4,36,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,62,89, 0, 0, 0, 0, 0, 0, 6,62,91, 5,39,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,43, 8, 7, 5,42, 5,46,44, 5,46,45, 5,46,46, 7, 5,38, 7, 5,39, + 7, 5,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16, 7, 4,54,84, 7,16, 8, + 5,53,63, 5,53,65, 4,49,32, 5,53,64, 0, 0, 0, 5,53,62, 4,54,86, 5,60,14, + 4,54,87, 0, 0, 0, 0, 0, 0, 7,25,32, 7,25,31, 0, 0, 0, 5,46,43, 0, 0, 0, + 4,59,80, 5,66,59, 5,66,58, 7,32,68, 5,66,57, 7,32,69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,72,31, 7,46,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,51,81, 7,51,82, + 4,70,54, 5,80,43, 4,70,53, 7,51,83, 0, 0, 0, 4,72,86, 7,56,29, 5,83,58, + 5,86, 8, 5,86, 7, 7,59,91, 5,86, 6, 0, 0, 0, 7,60,75, 0, 0, 0, 0, 0, 0, + 5,90,76, 7,69,24, 6, 3,20, 6,13, 8, 5, 7,19, 4, 7,30, 0, 0, 0, 0, 0, 0, + 15, 8,11, 6,18,80, 0, 0, 0,15,12,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,52, + 6,62,93, 7,16,11, 0, 0, 0, 7,16, 9, 7,16,10, 4,54,89, 7,32,70, 0, 0, 0, + 5,80,44, 0, 0, 0, 0, 0, 0, 6, 3,21, 6, 5,25, 6,13, 9, 5, 7,20, 6,13,10, + 15,12,36,15,12,37, 5,10,42, 4,10,31, 0, 0, 0, 6,18,81, 6,20,89, 5,14,73, + 6,34, 6, 5,19,64, 6,34, 5, 6,34, 7,15,22,73, 0, 0, 0, 6,53,25, 6,43,52, + 0, 0, 0, 0, 0, 0,15,29,35,15,29,34, 6,53,27, 0, 0, 0,15,35,72, 6,53,26, + 0, 0, 0, 0, 0, 0, 6,62,94, 7, 5,43,15,42,11, 0, 0, 0, 0, 0, 0, 4,54,90, + 0, 0, 0,15,59,22, 0, 0, 0, 0, 0, 0,15,67, 6, 7,38,78,15,67, 5, + /* plane 2, page 76 */ + 0, 255, /* first, last */ + 7,51,84, 0, 0, 0, 0, 0, 0, 6, 5,26,15, 4,90, 5, 7,21, 6,13,14, 6,25,61, + 5,19,65, 0, 0, 0,15,42,12, 0, 0, 0, 0, 0, 0,15,63,65, 7,39,93, 0, 0, 0, + 15,76,19, 5,83,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,63, 0, 0, 0,15, 4,92, + 0, 0, 0,15, 4,91, 0, 0, 0, 6, 8,67, 0, 0, 0, 4, 7,34, 4, 5,51, 4, 7,31, + 5, 7,22, 6,13,17, 6,13,16, 6,13,19,15, 8,12,15, 8,13, 0, 0, 0, 0, 0, 0, + 6,13,15, 4,10,34, 5,10,45, 6,18,84, 5,10,44, 6,18,83, 5,10,43, 6,18,86, + 6,18,90, 6,18,87, 6,25,69, 5,10,46, 6,18,88, 6,18,85, 5,14,78, 0, 0, 0, + 15,12,38,15,12,39,15,12,40,15,12,41,15,12,43,15,12,44,15,12,45,15,12,46, + 15,12,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,10,47, 5,14,74, 4,14,14, 5,14,75, 6,25,65, + 6,25,64, 0, 0, 0, 6,25,66, 0, 0, 0, 0, 0, 0, 6,25,63, 6,25,67,15,17,10, + 15,17,11,15,17,12,15,17,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,14,16,15,17,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,14,77, 5,14,76, 4,19,30, 6,34, 8, 5,19,67, + 5,19,66, 4,19,29, 6,34,12, 6,34,15, 6,34,10, 6,34,13, 6,34,14,15,22,75, + 15,22,76, 6,34,11, 0, 0, 0, 6,34, 9, 0, 0, 0, 0, 0, 0, 6,33,75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25,11, 4,25, 9, 4,25,10, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,43,55, 6,43,57,15,22,74,15,29,38,15,29,39, + 15,29,40, 0, 0, 0, 0, 0, 0, 6,43,56, 0, 0, 0, 4,25,13, 6,43,53,15,29,36, + 15,29,37, 6,53,32, 4,30,74, 4,30,71, 6,53,30, 6,53,31, 4,30,70, 5,32,54, + 6,53,28, 6,53,34, 5,32,53, 6,53,35, 6,53,36, 6,53,33, 0, 0, 0, 0, 0, 0, + 15,35,73,15,35,74, 0, 0, 0, 5,32,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,29, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,63, 3, 4,36,90, 5,39,42, 6,63, 2, 6,63, 5, + 6,63, 8,15,42,13, 6,63, 6, 0, 0, 0, 0, 0, 0, 6,63, 4, 6,63, 7, 7, 5,48, + 4,43,12, 7, 5,44, 7, 5,46, 7, 5,45, 0, 0, 0, 7, 5,47, 5,46,47, 7, 5,49, + 15,48,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,43,11, 0, 0, 0, 0, 0, 0, + 4,49,37, 4,49,35, 4,49,38, 7,16,12, 5,53,66,15,54,18, 0, 0, 0, 7,12,27, + 0, 0, 0, 0, 0, 0, 7,25,33, 5,60,19, 7,25,35, 5,60,17, 4,54,91, 7,25,34, + 5,60,20, 0, 0, 0,15,59,23, 7,28,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,60,16, + 5,60,18,15,54,17, 0, 0, 0, 0, 0, 0, 4,59,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,39,94, 5,72,33, 7,40, 3, 7,46,38, 7,40, 1, 7,40, 4, 4,64,13, + 0, 0, 0, 0, 0, 0, 7,40, 2, 7,46,40, 0, 0, 0, 0, 0, 0, 7,46,39, 0, 0, 0, + 0, 0, 0, 7,51,87,15,71,87, 7,51,85, 7,51,86, 0, 0, 0,15,71,50, 7,56,30, + /* plane 2, page 77 */ + 0, 255, /* first, last */ + 4,72,87, 7,51,88, 7,59,93,15,74,68, 7,59,92, 7,62,92, 0, 0, 0, 7,66,30, + 7,66,29, 0, 0, 0, 0, 0, 0, 7,67,58, 7,67,60, 0, 0, 0, 7,67,59, 0, 0, 0, + 7,70, 9, 7,70,21, 7,70,38, 6, 3,22, 0, 0, 0, 6, 5,27,15, 8,14, 4,14,18, + 5,10,48, 4,25,14, 0, 0, 0, 0, 0, 0, 6,53,38, 6,53,37, 6,63, 9, 5,53,67, + 7,16,14, 7, 5,50, 0, 0, 0, 0, 0, 0, 7,56,31, 5, 2,92, 5, 4,68, 5, 4,69, + 4, 4,64, 6, 8,70, 6, 8,71, 6, 8,69, 0, 0, 0, 0, 0, 0, 6, 8,72, 4, 7,37, + 6,13,21, 4, 7,36,15, 8,15, 5, 7,24, 6,13,22, 0, 0, 0, 0, 0, 0, 6,18,93, + 4,10,43, 6,18,92, 6,18,91, 5,10,50, 5,10,54, 4,10,39, 4,10,40, 5,10,51, + 4,10,37, 5,10,52, 5,10,49, 5,10,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,19, 4, + 15,12,48, 0, 0, 0, 0, 0, 0, 6,18,94,15,12,49, 6,19, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,19, 3, 0, 0, 0, 0, 0, 0, 6,19, 1, 0, 0, 0, 0, 0, 0, 6,25,73, + 5,14,79, 5,14,83, 6,25,79, 5,14,81, 6,25,80, 6,25,74, 5,14,86, 5,14,82, + 5,14,85, 6,25,77, 6,25,81, 6,25,70, 4,14,29, 5,14,84, 6,25,72, 4,14,30, + 5,14,80, 6,25,78,15,17,15, 6,25,71, 0, 0, 0, 6,25,76, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,17, + 6,34,23, 5,19,72, 6,34,21, 5,19,75, 4,19,33, 5,19,74, 5,19,70, 6,34,19, + 4,19,36, 5,19,73,15,22,77,15,22,78,15,22,79, 6,34,22, 6,34,25, 0, 0, 0, + 0, 0, 0, 6,34,20, 6,34,24,15,22,80, 6,34,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,71, 5,19,76, 5,26,22, 5,26,31, 6,43,65, + 5,26,21, 6,43,69, 5,26,25, 5,26,26, 5,26,28, 5,26,23, 6,43,67, 6,43,63, + 5,26,32, 6,43,66, 6,43,59, 6,43,70, 5,26,30, 6,43,62, 0, 0, 0, 0, 0, 0, + 4,25,25, 6,43,61, 6,43,64, 6,43,68,15,29,41,15,29,42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25,23, 6,43,60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,25,17, 5,26,24, 6,53,44, 4,30,82, 4,30,80, 4,30,91, 5,32,57, 4,30,81, + 4,30,85, 4,36,93, 4,30,89, 6,53,41, 5,32,58, 5,32,60, 5,32,66, 4,30,92, + 6,53,39, 5,32,65, 0, 0, 0, 6,53,45, 5,32,69, 5,32,67, 5,32,59, 5,26,29, + 5,32,63, 5,32,62, 6,53,43, 6,53,42, 4,30,93,15,35,75,15,35,76, 0, 0, 0, + 6,53,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,56, + 5,32,70, 5,32,61, 0, 0, 0, 5,39,56, 5,39,48, 4,37, 5, 4,37,11, 5,39,43, + /* plane 2, page 78 */ + 0, 250, /* first, last */ + 5,39,47, 4,37, 6, 6,63,15, 6,63,10, 4,37,14, 4,37,10, 6,63,11, 6,63,20, + 5,39,45, 5,39,46, 5,39,51, 4,37,12, 6,63,23, 6,63,21, 5,39,58, 6,63,14, + 0, 0, 0, 4,37, 7, 4,37, 2, 5,39,49, 5,39,50, 6,63,19, 5,39,44, 5,39,54, + 6,63,17, 6,63,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,14, 6,63,24, 6,63,12, + 4,37,13, 0, 0, 0, 6,63,18, 0, 0, 0, 6,63,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,39,53, 4,43,26, 4,43,22, 4,43,13, 4,43,25, 5,46,51, 4,43,20, + 7, 5,61, 4,43,18, 5,46,53, 5,46,55, 5,46,52, 4,43,17, 7, 5,53, 4,43,16, + 5,46,49, 5,46,50, 7, 5,51, 5,39,55, 5,46,56, 7, 5,52, 7, 5,59, 7, 5,57, + 0, 0, 0, 0, 0, 0,15,48,48,15,48,49,15,48,50,15,48,51,15,48,52, 0, 0, 0, + 0, 0, 0, 7, 5,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,58, 0, 0, 0, 7, 5,62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,46,54, 5,46,48, 4,49,43, 5,53,69, 7,16,15, + 7,16,16, 5,53,76, 5,53,77, 4,49,44, 4,49,39, 5,53,72, 7,16,21, 5,53,70, + 5,53,71, 5,53,75, 7,16,17, 7,16,23, 5,53,78, 0, 0, 0, 0, 0, 0,15,54,20, + 15,54,21, 7,16,20, 0, 0, 0, 7,16,19, 5,53,74, 0, 0, 0, 7,16,18, 0, 0, 0, + 0, 0, 0, 7,16,24, 0, 0, 0, 7,16,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,53,68, 7, 5,55, 0, 0, 0, 0, 0, 0, 4,54,92, 5,60,25, 5,53,80, 7,25,48, + 4,49,49, 4,37, 9, 4,54,94, 7,25,39, 5,60,21, 7,25,40, 5,60,28, 5,60,26, + 5,60,29, 7,25,47, 7,32,74, 5,53,79, 5,60,23, 4,54,93, 5,60,24, 4,55, 3, + 7,25,41, 7,25,45, 7,25,49, 7,25,43, 7,25,38, 7,25,44, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,59,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,25,36, 7,25,37, + 7,25,46, 5,60,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,60, + 5,60,30, 7,25,42, 4,59,88, 5,60,32, 5,66,64, 7,32,72, 5,66,69, 7,32,73, + 5,66,65, 5,66,68, 4,59,86, 5,60,31, 5,66,61, 5,66,66, 5,66,62, 5,66,63, + 4,59,90, 7,32,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,40,11, 4,64,19, 7,40, 7, + 4,64,20, 5,72,36, 4,64,21, 7,40, 6, 5,72,35, 5,72,34, 4,64,22, 0, 0, 0, + 0, 0, 0,15,67, 7, 4,64,17, 7,40, 8, 0, 0, 0, 7,40, 9, 0, 0, 0, 0, 0, 0, + 7,40, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,40,10, 7,32,76, + 0, 0, 0, 4,67,74, 4,67,75, 7,46,41, 7,46,45, 7,46,44, 5,76,56, 5,76,57, + 7,46,46, 7,46,43, 7,46,42, + /* plane 2, page 79 */ + 0, 255, /* first, last */ + 5,80,49, 5,80,48, 5,80,46, 4,70,55, 7,51,90, 5,80,47, 7,51,89,15,71,88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,83,63, 5,83,62, 5,83,61, 0, 0, 0, 0, 0, 0, + 7,60, 2, 7,59,94, 4,74,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60, 1, 5,86, 9, + 5,87,75, 7,62,93, 7,62,94, 0, 0, 0, 7,65,34, 7,65, 7, 0, 0, 0, 7,66,31, + 7,66,32, 7,66,33, 5,90,77, 7,68,49, 7,69,25, 4, 4,67, 0, 0, 0, 6,19, 5, + 15,12,50, 6,25,83, 6,25,82,15,17,16, 6,34,26,15,22,81, 0, 0, 0, 6,43,73, + 6,43,71, 5,26,33, 6,43,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5,63, + 0, 0, 0, 4,49,51, 4,49,50, 0, 0, 0, 7,16,26, 6, 5,28, 6, 5,29, 0, 0, 0, + 0, 0, 0, 5, 4,70, 5, 7,26, 5, 7,27, 0, 0, 0, 0, 0, 0, 5, 7,25, 5, 7,28, + 4,10,45, 5,10,57, 5,10,56, 0, 0, 0, 5,10,55, 6,19, 7, 6,19, 8, 0, 0, 0, + 6,19, 6,15,12,51,15,12,52, 0, 0, 0, 6,19, 9, 0, 0, 0, 5,10,58, 0, 0, 0, + 6,25,84, 4,14,34, 6,25,85, 6,34,28, 0, 0, 0,15,17,17,15,17,18,15,17,19, + 15,17,21,15,17,22, 0, 0, 0, 0, 0, 0,15,22,85, 4,19,38, 5,19,78, 6,34,27, + 15,22,82,15,22,83,15,22,86, 0, 0, 0, 6,43,75, 0, 0, 0, 0, 0, 0, 6,43,76, + 6,43,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,22,84, + 0, 0, 0, 5,32,72, 5,32,71, 6,53,48, 4,30,94, 6,53,47, 0, 0, 0, 5,32,73, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,35,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,37,15, 6,63,25, 6,63,26,15,42,16,15,42,17,15,42,19,15,42,20,15,42,18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,43,28, 0, 0, 0, 0, 0, 0, + 7, 5,64, 7, 5,65, 0, 0, 0, 5,53,82, 7,16,28, 5,53,81, 7,16,27, 0, 0, 0, + 4,55, 7, 4,55, 8, 5,60,34, 5,60,36, 7,32,78, 5,60,33, 7,25,50, 5,66,70, + 7,32,79, 0, 0, 0, 7,32,80, 5,72,37, 5,72,38, 5,72,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,72,40, 7,40,12, 7,46,48, 0, 0, 0, 7,46,47, 0, 0, 0, + 5,66,71, 0, 0, 0, 0, 0, 0, 7,56,32, 7,56,33,15,71,89, 7,60, 3, 0, 0, 0, + 4,75,83, 0, 0, 0, 0, 0, 0, 7,63, 1, 0, 0, 0, 7,69,26, 5, 4,71, 5, 4,72, + 6,13,25, 6,13,23, 6,13,24, 5, 7,29, 0, 0, 0, 0, 0, 0, 6,19,11, 5,10,59, + 4,10,47, 6,16,22, 6,19,10, 0, 0, 0, 0, 0, 0, 5,14,87, 5,14,88, 6,25,86, + 6,25,90, 5,19,79, 4,14,36, 6,25,87, 6,25,88, 6,25,89, 0, 0, 0, 4,19,41, + 5,19,80, 6,34,30,15,22,89, 0, 0, 0, 0, 0, 0, 6,34,29, 0, 0, 0, 4,25,28, + 6,43,77, 5,26,34, 6,43,79, 4,25,27,15,29,43, 0, 0, 0, 6,43,78, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,22,88, 5,32,74, 5,32,77, 5,32,75, 5,32,76, 5,32,78, + 0, 0, 0, 6,53,51,15,35,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,49, + /* plane 2, page 80 */ + 1, 253, /* first, last */ + 4,31, 1, 4,37,17, 4,37,19, 6,63,30, 0, 0, 0,15,42,21, 6,63,29, + 5,39,60, 6,63,31, 6,63,27, 6,63,28, 0, 0, 0, 7, 5,67, 5,46,58, 5,46,59, + 5,46,60, 7, 5,66, 0, 0, 0, 0, 0, 0, 5,53,86, 5,53,88, 5,53,84, 4,49,56, + 5,53,87, 5,53,85,15,54,22, 5,53,83, 7,16,29, 0, 0, 0, 7,16,30, 7,25,51, + 0, 0, 0, 7,16,31, 4,55, 9, 5,66,72, 7,32,82, 7,32,83, 7,32,84, 0, 0, 0, + 7,32,81, 0, 0, 0, 0, 0, 0, 5,72,42, 5,72,41, 7,40,13, 0, 0, 0, 4,67,77, + 5,76,59, 5,76,58, 7,46,49, 0, 0, 0, 7,51,92, 4,70,60, 7,56,34, 0, 0, 0, + 0, 0, 0, 5,87,76, 5,87,77, 0, 0, 0, 7,67,36, 7,69,56, 0, 0, 0, 6, 8,73, + 15, 4,93, 4, 7,41, 5, 7,30, 4, 7,39, 6,13,27, 5, 7,31, 5,10,62, 5,10,60, + 5,10,61, 6,19,13, 0, 0, 0, 6,19,12,15,12,53, 0, 0, 0, 5,14,89, 6,26, 1, + 6,26, 3, 4,14,40, 5,14,90, 6,25,94, 6,25,91, 4,14,42, 6,26, 2, 0, 0, 0, + 15,17,23,15,17,24, 6,26, 4, 6,25,92, 6,25,93, 0, 0, 0, 4,19,44, 5,19,82, + 4,19,42, 6,34,31, 0, 0, 0,15,22,90,15,22,91,15,22,92,15,22,93,15,23, 1, + 15,23, 2, 6,34,32, 6,34,33, 6,26, 5, 6,43,84, 6,43,80, 5,26,35, 4,25,29, + 6,43,82, 6,43,83, 0, 0, 0,15,29,44,15,29,45, 0, 0, 0, 6,43,81, 6,53,52, + 6,53,54, 5,32,80, 6,53,56, 6,53,55, 6,53,53, 0, 0, 0, 0, 0, 0,15,35,79, + 15,35,80, 0, 0, 0, 0, 0, 0, 6,63,33, 6,63,32, 6,63,43,15,42,22, 5,46,61, + 7, 5,68, 0, 0, 0, 7, 5,69, 0, 0, 0,15,48,53,15,48,54,15,48,55,15,48,56, + 15,48,57,15,48,58, 0, 0, 0, 4,49,57, 7,16,36, 4,49,59, 7,16,32, 7,16,37, + 5,53,90, 5,53,89,15,54,23,15,54,24,15,54,25, 0, 0, 0,15,54,26,15,54,27, + 7,16,35, 7,16,33, 0, 0, 0, 0, 0, 0, 4,55,11, 4,60, 3, 4,55,10, 7,25,52, + 5,60,39, 7,32,85, 0, 0, 0, 0, 0, 0, 5,60,38,15,59,27,15,59,28, 0, 0, 0, + 0, 0, 0, 7,25,53, 7,25,54, 7,22,89, 0, 0, 0, 5,60,37, 7,16,34, 7,25,55, + 4,60, 2, 4,60, 1, 7,32,86, 0, 0, 0, 7,32,88, 0, 0, 0, 7,32,87,15,63,66, + 7,32,89, 7,40,14, 5,72,43, 7,40,15,15,67, 8,15,67, 9, 0, 0, 0, 5,76,61, + 7,46,51, 5,76,60, 7,46,53,15,69,54, 0, 0, 0, 7,46,50, 7,46,52, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,71,91, 7,56,36, 5,83,64, 7,56,35, 7,56,37,15,71,90, + 7,63, 2, 5,86,10, 0, 0, 0, 0, 0, 0, 7,63, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,66,34, 0, 0, 0, 0, 0, 0, 5, 2,93,15, 2,71, 6, 8,74, 4, 4,68, + 5, 4,74, 4, 4,70, 5, 4,75, 5, 4,73,15, 4,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 7,48, 6,13,28, 5, 7,33, 4, 7,43, 6,13,32, 6,13,34, + 6,13,30, 5, 7,34, 5, 7,35, 6,13,33, 6,13,31, 5, 7,32, + /* plane 2, page 81 */ + 0, 255, /* first, last */ + 6,13,35, 0, 0, 0, 6,13,36, 6,19,25, 6,19,21, 6,19,14, 6,19,18, 4,10,62, + 6,19,22, 4,10,60, 6,19,28, 5,10,69, 6,19,19, 5,10,73, 4,10,59, 6,19,15, + 6,19,27, 5,10,64, 5,10,71, 5,10,75, 5,10,65, 5,10,74, 5,10,72, 5,10,67, + 5,10,76, 6,19,16, 0, 0, 0, 5,10,63, 5,10,70, 5,10,66, 5,10,68, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,54,15,12,56, 6,19,23, 0, 0, 0, 6,19,26, + 0, 0, 0, 6,19,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,14,48, 5,15, 4, 3,14,58, 4,14,44, 5,14,91, 6,26, 6, 4,14,46, + 5,15, 2, 5,14,92, 6,26, 8, 4,14,43, 6,26, 9, 5,15, 3, 6,26,10, 4,14,51, + 6,26,12, 5,14,94, 0, 0, 0, 0, 0, 0, 5,15, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,26,11,15,17,25,15,17,26,15,17,27,15,17,28,15,17,29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,26, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15, 1, + 5,14,93, 4,14,52, 4,19,53, 6,34,51, 6,34,38, 6,34,45, 5,19,84, 5,19,83, + 5,19,93, 4,19,52, 6,34,39, 6,34,36, 0, 0, 0, 6,34,34, 5,19,90, 5,19,91, + 5,19,85, 6,34,42, 5,19,88, 6,34,52, 5,19,89, 6,34,35, 6,34,47, 0, 0, 0, + 6,34,43, 6,34,48,15,23, 5, 6,34,50, 0, 0, 0, 0, 0, 0, 6,34,44, 0, 0, 0, + 0, 0, 0, 6,34,41, 0, 0, 0, 0, 0, 0, 6,34,49,15,23, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,19,94, 6,34,37, 6,34,46, + 5,19,87, 5,19,92, 0, 0, 0, 5,26,41, 5,26,44, 6,43,89, 6,44, 3, 4,19,51, + 6,43,88, 5,26,43, 6,43,93, 6,44, 1, 5,26,38, 6,44, 6, 6,43,87, 4,25,47, + 5,26,42, 5,26,40, 5,26,36, 4,25,46, 5,32,81, 6,44, 5, 5,32,94, 4,25,32, + 6,43,94, 5,26,45, 6,43,91, 5,26,46, 6,44, 8, 5,26,37, 5,26,39, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,29,47,15,29,48,15,29,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,43,92, 0, 0, 0, 0, 0, 0, 6,44, 7, 0, 0, 0, 6,43,86, 6,44, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44, 2, 4,25,36, 4,25,48, 5,26,47, 4,25,30, + 0, 0, 0, 6,53,59, 6,53,62, 6,53,58, 4,31,10, 5,32,88, 6,53,60, 5,32,87, + 6,53,63, 5,32,85, 6,53,57, 4,31, 3, 4,31, 8, 4,31,17, 4,31,14, 0, 0, 0, + 5,32,90, 6,53,66, 5,32,86, 4,31,15, 4,31, 4, 6,53,68, 5,32,89, 5,32,82, + 5,32,92, 6,53,70, 0, 0, 0, 0, 0, 0, 6,53,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,35,81,15,35,82,15,35,83, 6,43,85, 0, 0, 0, 0, 0, 0, 6,53,67, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,51,21, 5,32,83, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,32,93, 5,32,84, + /* plane 2, page 82 */ + 0, 255, /* first, last */ + 6,53,69, 0, 0, 0, 5,39,64, 4,37,37, 0, 0, 0, 6,63,36, 4,37,30, 5,39,67, + 6,63,40, 5,39,69, 5,39,70, 6,63,41, 4,43,47, 6,63,46, 6,63,38, 6,63,47, + 7, 5,76, 6,63,39, 5,39,71, 5,39,68, 6,63,35, 6,63,42, 6,63,37, 5,39,66, + 6,63,34, 5,39,63, 5,39,62, 5,39,61, 7, 5,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,42,23,15,42,24,15,42,25,15,42,26,15,42,27,15,42,28, + 15,42,29, 4,37,26, 6,63,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,63,44, + 5,39,73, 0, 0, 0, 0, 0, 0, 4,37,27, 4,43,48, 4,43,44, 4,43,30, 5,46,66, + 5,46,71, 4,43,46, 7, 5,75, 5,46,76, 5,46,69, 4,43,33, 7, 5,80, 4,43,32, + 4,49,69, 7,16,45, 5,46,68, 5,54, 1, 5,46,70, 7, 5,77, 5,46,74, 7, 5,82, + 4,43,41, 4,43,43, 4,43,38, 5,46,63, 5,46,75, 7, 5,71, 7, 5,72, 7, 5,74, + 4,43,42, 5,46,67, 7, 5,78, 5,46,62, 5,46,65, 5,53,91, 5,46,73, 5,46,72, + 0, 0, 0, 0, 0, 0, 7, 5,73,15,48,59,15,48,60,15,48,61, 7, 5,79, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,43,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,10, 5,54,11, 4,49,62, 5,54, 5, + 5,54, 3, 5,54, 7, 5,53,93, 4,49,67, 5,54, 9, 5,53,94, 5,54, 6, 5,54, 4, + 4,49,66, 7,16,38, 7,16,46, 0, 0, 0, 7,16,47, 7,16,43, 7,16,39, 5,46,77, + 4,49,71, 5,53,92, 7,16,41, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,29, 0, 0, 0, + 7,16,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16,44, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,12, + 4,49,70, 0, 0, 0, 5,39,72, 5,54, 8, 4,60,11, 5,60,40, 5,60,43, 4,55,21, + 4,55,22, 7,16,50, 7,25,62, 7,25,57, 5,60,42, 7,25,58, 5,60,44, 7,25,68, + 5,60,41, 7,33, 2, 7,25,63, 7,25,64, 7,25,61, 4,55,23, 7,25,67, 5,60,47, + 7,16,40, 5,60,46, 7,25,65, 7,25,60, 7,25,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,59,30,15,59,31,15,59,32, 0, 0, 0, 0, 0, 0, 7,25,66, 0, 0, 0, 0, 0, 0, + 7,25,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,60, 8, 7,33, 3, 7,32,94, 5,66,78, 4,60,12, 5,66,75, 7,32,91, + 7,32,92, 5,66,80, 4,60, 4, 5,66,76, 5,66,79, 5,66,81, 0, 0, 0, 0, 0, 0, + 5,66,74,15,63,67,15,63,68, 7,33, 4, 7,33, 5, 7,32,93, 0, 0, 0, 5,66,77, + 7,32,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,47, + /* plane 2, page 83 */ + 0, 254, /* first, last */ + 5,72,44, 5,72,49, 4,64,30, 5,72,48, 4,64,27, 5,72,52, 5,72,46, 7,40,18, + 4,64,26, 7,40,20, 4,64,28, 4,64,29, 7,40,16, 5,72,45, 7,40,17, 5,72,51, + 5,72,50, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,67,10, 7,43,61, 7,40,21, 7,40,19, + 0, 0, 0, 0, 0, 0, 5,76,64, 5,76,66, 5,76,62, 7,46,56, 5,76,65, 5,76,67, + 0, 0, 0, 7,46,55,15,69,55, 4,67,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,76,63, 4,67,83, 7,46,54, 0, 0, 0, 0, 0, 0, 7,52, 2, 5,80,50, 5,80,52, + 5,80,51, 5,80,53, 7,51,94, 0, 0, 0, 0, 0, 0, 7,52, 3, 7,51,93, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,72,89, 5,83,67, 7,56,38, 5,83,65, 5,83,66, 7,56,39, + 5,83,69, 4,74,57, 7,52, 1, 5,83,68, 7,57,19, 0, 0, 0, 5,83,70, 0, 0, 0, + 0, 0, 0, 5,86,11, 7,60, 6, 4,74,56, 7,60, 5, 0, 0, 0, 0, 0, 0, 7,63, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,76,84, 7,66,35, 7,66,37, 0, 0, 0, 7,66,36, + 0, 0, 0,15,76,70, 5,91,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7,36, 4,10,64, + 4,10,65, 4,14,54, 5,15, 8, 5,15, 7, 6,26,15, 6,26,16, 0, 0, 0, 4,19,56, + 5,20, 2,15,23, 7, 5,26,50, 4,25,49, 5,26,51, 5,26,49, 5,26,53, 5,26,48, + 6,44, 9, 5,26,52, 5,33, 3, 5,33, 2, 0, 0, 0, 5,33, 1, 6,63,49, 6,63,50, + 4,37,39, 4,37,40, 5,39,76, 5,39,74, 5,39,75, 4,37,41, 6,63,48, 4,37,43, + 15,45,31, 0, 0, 0, 5,46,78, 4,43,50, 7, 5,85, 5,46,79, 4,43,49, 7, 5,84, + 0, 0, 0, 4,43,51, 4,49,73, 4,49,72, 4,49,74, 5,54,13, 5,66,85, 7,25,69, + 5,58,85, 0, 0, 0, 5,60,48, 5,66,84, 5,66,83, 5,66,82, 5,72,55, 5,72,54, + 5,72,53, 5,72,56, 7,40,22, 0, 0, 0, 7,40,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,74,58, 0, 0, 0, 0, 0, 0, 7,70,31, 7,70,41, 6, 6,31, 6, 8,75, + 6, 8,76, 6,19,33, 6,19,31, 6,19,32, 5,10,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,15,10, 5,15,11, 6,26,19,15,17,31,15,17,32, 6,26,17, 6,26,18, 0, 0, 0, + 5,15, 9, 5,20, 3, 5,20, 4, 4,19,60, 6,34,57, 6,34,55, 5,20, 5, 6,34,53, + 6,34,59, 6,34,54, 6,34,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,34,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,25,50, 6,44,12, + 0, 0, 0,15,29,50, 0, 0, 0, 0, 0, 0, 6,44,10, 0, 0, 0, 0, 0, 0,15,29,51, + 5,33, 4, 4,31,18, 6,53,73, 0, 0, 0, 4,31,21, 4,31,20, 6,53,71, 5,26,54, + 4,31,22,15,35,85, 6,53,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,39,77, 5,39,78, 6,63,51, 0, 0, 0, 0, 0, 0, 5,39,79, + 5,39,80,15,42,30, 7, 5,88, 4,43,52, 7, 5,86, 7, 5,87,15,48,65, 7, 5,89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,16,52, 4,49,75,15,54,31, 7,16,51, + /* plane 2, page 84 */ + 0, 255, /* first, last */ + 5,60,49, 5,60,50, 0, 0, 0, 7,25,70, 7,25,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,83,71, 0, 0, 0, 5,86,12, 0, 0, 0, 5, 2,94, 6, 5,30, 4, 4,71, + 6, 8,77, 5, 4,77, 5, 4,76,15, 5, 1,15, 5, 2, 5, 7,37, 4, 7,52, 0, 0, 0, + 15, 8,16,15, 8,17,15, 8,18,15, 8,19, 6,13,39,15, 8,21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,10,69, 4,10,67, 6,19,37, 5,10,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,12,57,15,12,58,15,12,59,15,12,61,15,12,62,15,12,63,15,12,65, + 15,12,67, 0, 0, 0, 6,19,35, 0, 0, 0, 6,19,36,15,12,68, 0, 0, 0, 0, 0, 0, + 15,12,64, 6,19,34, 0, 0, 0, 0, 0, 0, 5,10,79, 5,10,81, 4,14,64, 5,15,19, + 6,26,20, 6,19,38, 6,26,21, 5,15,15, 6,26,25, 5,15,12, 5,15,17, 5,15,16, + 4,14,59, 4,14,61, 5,15,22, 5,15,18, 5,15,21, 0, 0, 0, 0, 0, 0,15,17,30, + 4,14,57, 5,15,23, 6,26,24,15,17,34,15,17,35,15,17,37,15,17,38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,14,58, 5,15,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,26,23, 0, 0, 0, 0, 0, 0,15,17,40, 0, 0, 0,15,17,33, 5,20, 6, + 5,15,14, 0, 0, 0, 6,26,22, 5,20,12, 5,20, 8, 6,34,65, 6,34,63, 0, 0, 0, + 5,20,17, 5,20,16, 5,20,10, 6,34,64, 5,20,20, 5,20,18, 5,15,24, 5,20,14, + 5,20, 7, 5,20, 9, 5,20,13, 0, 0, 0,15,23, 8, 0, 0, 0,15,23, 9,15,23,10, + 15,23,11,15,23,14,15,23,15,15,23,17,15,23,18,15,23,19, 0, 0, 0, 6,34,62, + 0, 0, 0, 0, 0, 0, 6,34,60, 0, 0, 0, 6,44,14, 0, 0, 0,15,23,16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,20,11, 0, 0, 0,15,23,12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,66, 0, 0, 0, 0, 0, 0, 5,20,15, + 5,20,19, 6,34,61, 5,26,56, 5,26,62, 5,26,55, 5,26,59, 4,25,54, 6,44,21, + 4,25,55, 4,25,53, 5,26,60, 5,26,61, 6,44,17, 5,26,58, 5,26,63, 0, 0, 0, + 0, 0, 0,15,29,52,15,29,53,15,29,54,15,29,55, 6,44,20, 0, 0, 0, 0, 0, 0, + 6,44,16, 6,44,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,26,65, 5,26,64, + 0, 0, 0, 0, 0, 0, 5,33, 8, 6,53,81, 4,31,23, 5,33, 9, 6,53,74, 6,53,76, + 5,33, 5, 6,53,78, 4,31,33, 4,31,35, 6,53,79, 6,53,82, 5,33, 6, 5,33, 7, + 0, 0, 0, 0, 0, 0, 6,53,77,15,35,87,15,35,88,15,35,89,15,35,90,15,35,91, + 15,35,92,15,35,93,15,35,94,15,36, 1,15,36, 2,15,36, 3,15,36, 4,15,36, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,53,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,63,59, 5,39,88, 6,63,52, 7, 5,94, 5,39,90, 6,63,54, + /* plane 2, page 85 */ + 0, 255, /* first, last */ + 4,37,50, 5,39,83, 5,39,82, 6,63,55, 5,39,91, 6,63,57, 6,63,58, 5,39,85, + 6,63,53, 5,39,81, 5,39,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,63,56, 0, 0, 0,15,42,33,15,42,35,15,42,36,15,42,37,15,42,38,15,42,39, + 15,42,40,15,42,41,15,42,43,15,42,44,15,42,45,15,42,47,15,42,48,15,42,49, + 15,42,50, 0, 0, 0, 4,37,52,15,42,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,39,87, 5,39,92, 5,39,89, 5,39,84,15,48,68, 4,43,58, 5,46,82, 5,46,83, + 7, 6, 1, 5,46,80, 4,37,48, 7, 6, 5, 5,46,85, 7, 5,93,15,48,66,15,48,67, + 15,48,69,15,48,70,15,48,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 2, 0, 0, 0, 7, 5,90, 7, 6, 3, 5,46,81, + 5,46,84, 7, 5,92, 0, 0, 0,15,42,42, 7,16,56, 5,54,17, 5,54,14, 5,54,18, + 7,16,53, 4,49,81, 0, 0, 0, 4,49,83, 5,54,20, 4,49,82, 7,16,54, 7,16,58, + 4,49,79, 0, 0, 0, 7,16,55, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,33,15,54,34, + 15,54,35, 5,54,16, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,36, 5,54,15,15,54,37, + 15,54,38,15,54,39,15,54,41,15,54,43,15,54,44,15,54,45, 0, 0, 0, 0, 0, 0, + 5,60,54, 7,25,72, 5,60,52, 7,25,79, 7,25,74, 5,60,51, 4,55,26, 7,25,73, + 5,60,53, 4,55,29, 7,25,76, 4,55,28, 5,54,21, 5,60,56, 5,60,55, 5,60,57, + 0, 0, 0, 0, 0, 0,15,59,33,15,59,34,15,59,35,15,59,36,15,59,37,15,59,38, + 15,59,39,15,59,40,15,59,41, 7,25,75, 7,25,78, 0, 0, 0, 0, 0, 0,15,54,42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33, 9, + 5,66,86, 5,66,88, 7,33, 6, 7,33, 8, 5,66,87, 4,60,16, 5,66,90, 7,33, 7, + 5,66,89, 7,33,10,15,63,69,15,63,70,15,63,71,15,63,72,15,63,73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,64,32, 5,72,58, 5,72,57, 0, 0, 0,15,67,11,15,67,12, + 15,67,13,15,67,14, 0, 0, 0, 7,40,26, 7,40,24, 0, 0, 0, 0, 0, 0, 7,40,25, + 0, 0, 0,15,67,15, 0, 0, 0, 5,76,69, 5,76,70, 7,46,57, 7,46,58, 5,76,68, + 5,76,71, 4,64,33, 7,46,59,15,69,58,15,69,59,15,69,60,15,69,61, 0, 0, 0, + 0, 0, 0, 7,46,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,80,54, 5,80,55, 0, 0, 0, 0, 0, 0,15,71,93, 0, 0, 0, + 7,52, 4, 4,70,66, 0, 0, 0,15,71,92, 0, 0, 0, 5,83,72, 7,56,40, 5,83,73, + 0, 0, 0,15,73,59,15,73,60, 7,56,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,83,74, 5,86,14, 4,74,59, 5,86,13, 5,86,15,15,74,69, + 0, 0, 0, 7,60, 8, 7,60, 7, 0, 0, 0, 7,63, 6, 0, 0, 0, 0, 0, 0, 7,63, 5, + 7,63, 7, 0, 0, 0, 7,66,38, 5,90,13, 0, 0, 0, 0, 0, 0, 5,90,78, 4,77,85, + /* plane 2, page 86 */ + 1, 255, /* first, last */ + 7,68,51, 0, 0, 0, 7,69,27, 5,92,35, 6, 2, 7, 6, 5,32, 0, 0, 0, + 6, 8,78,15, 2,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,13,40,15, 5, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,19,39, 6,19,41, 0, 0, 0, + 0, 0, 0,15, 8,22,15, 8,24,15, 8,25,15, 8,26,15, 8,27,15, 8,29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 8,23, 0, 0, 0, 6,17,58, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15,25, 6,26,26, 4,14,67, 5,15,26, 0, 0, 0, + 6,26,27, 6,19,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,12,69,15,12,70,15,12,71,15,12,72,15,12,73,15,17,41,15,17,43,15,17,46, + 0, 0, 0, 0, 0, 0, 6,26,30, 0, 0, 0, 6,26,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,26,29, 6,26,32, 6,26,28,15,12,74, 4,10,72, 5,20,22, 6,26,33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,17,42,15,17,44,15,17,45,15,17,47, + 15,17,48,15,17,49,15,17,50,15,17,51,15,17,52,15,23,23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,20,21, 0, 0, 0, 0, 0, 0, 6,44,24, 5,26,66, 6,44,25, 6,44,26, 6,44,28, + 5,26,67, 6,44,29, 6,44,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44,22, + 6,44,23,15,23,20,15,23,22,15,23,24,15,29,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,23,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,53,85, 5,33,11, 5,33,10, 5,33,12, 6,44,31, 4,31,40,15,29,56,15,29,57, + 15,29,58,15,29,60,15,29,61,15,29,62,15,29,63,15,29,66,15,29,67,15,29,68, + 15,36, 8,15,36,10,15,29,65, 0, 0, 0, 6,53,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,40, 3, 6,63,63, + 6,63,64, 4,37,54, 6,63,67, 6,63,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,36, 7,15,36, 9,15,36,11,15,36,12,15,36,13,15,36,14,15,36,15,15,36,16, + 15,36,17,15,36,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,63,61, 6,63,66, 5,40, 1, 6,63,62, 0, 0, 0, 4,43,63, 7, 6, 6, 6,63,60, + 6,63,68, 0, 0, 0,15,42,51,15,42,53,15,42,54,15,42,55,15,42,56,15,42,58, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,54,24, 7,16,60, 5,54,22, 7,16,61, 4,49,87, 5,54,25, 5,54,23, 5,54,26, + 7, 6,10, 7,16,59,15,48,74,15,48,73,15,54,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,55,35, 5,60,58, + 7,25,83, 4,55,36, 7,25,86, 7,25,84, 7,16,62,15,48,75, 0, 0, 0,15,54,46, + 15,54,47,15,54,48,15,54,50, 7,25,81, 7,25,85, 7,25,82, 0, 0, 0, 7,25,80, + /* plane 2, page 87 */ + 1, 255, /* first, last */ + 15,59,45,15,59,47, 4,60,20, 5,66,91, 7,33,12, 0, 0, 0,15,59,43, + 15,59,44,15,59,46,15,59,48,15,59,49,15,59,50, 0, 0, 0, 0, 0, 0, 7,33,11, + 0, 0, 0, 4,60,19, 5,72,59, 7,40,28, 7,40,29,15,63,74, 0, 0, 0,15,63,75, + 0, 0, 0, 0, 0, 0, 5,76,72, 4,67,87, 0, 0, 0, 0, 0, 0,15,69,62, 7,46,62, + 7,52, 6, 0, 0, 0, 0, 0, 0, 7,52, 5, 0, 0, 0,15,69,63, 4,72,93, 7,56,42, + 0, 0, 0, 7,56,43, 7,60, 9,15,73,61, 7,60,10, 0, 0, 0, 0, 0, 0, 7,60,11, + 5,87,78, 7,60,12, 5,87,79,15,74,71, 5,89,18, 0, 0, 0, 0, 0, 0, 7,66,41, + 7,66,39, 7,67,61,15,76,71,15, 2,73, 6,19,45, 6,34,68, 4,25,59, 6,44,32, + 0, 0, 0, 6,53,86, 0, 0, 0, 6,63,69, 7, 6,12, 7,16,63, 0, 0, 0, 7,16,64, + 7,33,13, 0, 0, 0, 5,83,75, 7,65, 8, 4, 1,94, 6, 5,33, 0, 0, 0,15, 2,74, + 6, 8,79, 0, 0, 0,15, 5, 5, 6, 8,80, 4, 7,53, 5, 7,40, 4, 7,55, 0, 0, 0, + 5, 7,39, 0, 0, 0,15, 8,30,15, 8,31,15, 8,32,15, 8,33,15, 8,34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,13,42, 6,19,49, 6,19,52, 5,10,84, 5,10,82, 4,10,80, + 5,10,85, 6,19,54, 6,19,48, 6,19,50, 4,10,77, 6,19,47, 5,10,83, 6,19,55, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,75,15,12,76,15,12,78,15,12,79, 0, 0, 0, + 0, 0, 0,15,12,80, 6,19,53, 6,19,51, 6,19,46, 0, 0, 0, 5,15,28, 5,15,27, + 6,26,37, 5,15,29, 6,26,38, 5,15,30, 5,10,86, 5,20,28, 6,26,39, 0, 0, 0, + 15,17,53,15,17,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,26,34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,26,36, + 5,20,26, 6,34,73, 5,20,31, 4,19,72, 5,20,29, 6,34,72, 5,20,23,15,23,26, + 15,23,28,15,23,29,15,23,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,19,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,69, + 0, 0, 0, 6,34,74, 4,25,63, 5,26,68, 4,25,64, 4,25,60, 6,44,33, 6,44,34, + 6,44,37, 6,44,39, 4,25,61, 6,44,36, 4,31,49,15,29,69,15,29,71,15,29,73, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,20,30, 0, 0, 0,15,29,70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,22, 5,33,15, 6,53,89, + 6,53,87, 6,53,90, 5,33,16, 5,33,13, 5,33,18, 5,33,20, 5,33,24, 5,33,19, + 4,31,46, 6,54, 1, 5,33,14, 6,53,91, 6,53,94, 0, 0, 0, 6,53,92, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,36,19,15,36,20,15,36,21,15,36,22,15,36,23,15,36,24, + 15,36,25,15,36,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,53,88, + 6,53,93, 0, 0, 0, 5,33,23, 5,33,21, 0, 0, 0, 5,40, 8, 6,63,73, 5,37,13, + /* plane 2, page 88 */ + 0, 254, /* first, last */ + 5,40,13, 6,63,72, 6,63,70, 6,63,74, 4,37,60, 5,40,14, 5,40, 9, 6,63,78, + 6,63,79, 5,40,11, 5,40, 7, 5,40,12, 6,63,80, 5,40,10, 6,63,71,15,42,64, + 15,42,59,15,42,60,15,42,61,15,42,62,15,42,63,15,42,65,15,42,66,15,42,67, + 15,42,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,63,77, 6,63,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,46,91, 5,46,88, 5,46,90, 7, 6,19, 7, 6,16, 5,46,89, 4,43,73, + 0, 0, 0, 7, 6,20, 7, 6,17, 0, 0, 0, 7, 6,24, 5,40,15, 7, 6,15, 5,54,37, + 5,46,92, 5,46,93, 0, 0, 0, 4,43,71, 0, 0, 0, 4,43,74, 7, 6,21,15,48,76, + 15,48,78,15,48,79,15,48,80,15,48,81,15,48,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 6,22, 7, 6,23, 4,49,91, 7,16,77, 0, 0, 0, 5,54,29, + 5,54,32, 7,16,73, 5,54,28, 5,54,31, 5,54,30, 4,49,94, 5,54,27, 5,54,35, + 7,16,67, 7,16,68, 5,54,34, 7,16,66, 5,54,38, 5,60,59, 5,54,39, 7,16,75, + 7,16,74, 0, 0, 0, 0, 0, 0, 7,16,76, 7,16,65,15,54,52,15,54,53, 0, 0, 0, + 0, 0, 0, 7,16,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,16,71, 7,16,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,36, + 5,54,33, 0, 0, 0, 5,60,62, 5,60,65, 5,60,66, 5,60,63, 5,60,60, 5,60,61, + 0, 0, 0, 4,55,42, 7,25,87, 5,60,68, 4,55,38, 5,60,64, 7,25,90, 0, 0, 0, + 15,59,52,15,59,53,15,59,54,15,59,55,15,59,56,15,59,58, 7,25,88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,40, 7,25,89, 0, 0, 0, + 5,60,67,15,54,51, 0, 0, 0, 0, 0, 0, 5,66,93, 5,67, 6, 5,67, 4, 5,67, 1, + 5,67, 2, 5,67, 5, 7,33,16, 5,66,94, 7,33,15, 5,67, 3, 0, 0, 0,15,63,76, + 15,63,77,15,63,78,15,63,79,15,63,80,15,63,81,15,63,82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,66,92, 0, 0, 0, 0, 0, 0, 5,72,62, 4,64,35, + 5,72,60, 4,64,36, 4,64,39, 0, 0, 0, 7,40,31, 0, 0, 0, 4,64,38, 5,72,61, + 7,46,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,40,33, 7,40,30,15,67,16, + 7,40,32, 5,76,75, 4,67,90, 4,67,88, 5,76,74, 7,46,64, 4,60,24, 5,76,73, + 5,76,76, 7,46,63, 7,46,65,15,69,64,15,69,65,15,69,67, 0, 0, 0, 7,46,67, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,76,77, + /* plane 2, page 89 */ + 0, 255, /* first, last */ + 7,52, 8, 7,52, 7, 5,80,56, 7,52, 9, 0, 0, 0, 7,56,45, 5,83,76, 7,56,46, + 0, 0, 0, 0, 0, 0, 5,86,16, 5,86,17, 7,56,47, 0, 0, 0, 5,87,80, 0, 0, 0, + 0, 0, 0, 7,60,13, 7,60,14, 7,63, 8, 7,62,81,15,75,55,15,75,56, 4,76,87, + 5,89,19,15,76,20, 4,76,88, 0, 0, 0, 5,90,14, 0, 0, 0, 5,91,65, 5,91,66, + 0, 0, 0, 0, 0, 0, 6, 3,23, 5, 4,79, 5, 4,80, 0, 0, 0, 0, 0, 0, 4, 7,57, + 4, 7,58, 4, 7,56, 6,13,45, 6,13,44, 0, 0, 0, 6,13,47, 3,10,37, 0, 0, 0, + 6,13,43,15, 8,35, 0, 0, 0, 0, 0, 0, 4,10,84, 6,19,57, 6,19,59, 6,19,56, + 5,10,87, 4,10,83, 5,10,89, 5,10,88, 6,19,58, 6,19,60, 6,19,61, 5,10,90, + 0, 0, 0,15,12,81,15,12,82,15,12,83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15,31, + 4,14,70, 4,14,75, 4,14,72, 5,15,35, 5,15,34, 5,15,33, 6,26,44, 4,14,73, + 4,14,74, 4,14,71, 6,26,42, 6,26,40, 5,15,32, 0, 0, 0, 0, 0, 0, 5,15,36, + 15,17,56,15,17,57,15,17,58, 6,26,43, 0, 0, 0, 0, 0, 0, 6,26,41, 0, 0, 0, + 5,20,36, 5,20,35, 6,34,76, 6,34,75, 6,34,77, 5,20,33, 4,19,78, 5,20,34, + 5,20,32, 6,34,78,15,23,32,15,23,33,15,23,34,15,23,35,15,23,36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,26,82, 4,25,70, + 5,26,84, 6,44,46, 6,44,42, 4,25,73, 6,44,50, 5,26,73, 5,26,79, 5,26,81, + 6,44,48, 5,26,71, 6,44,49, 5,26,72, 6,44,43, 5,26,74, 4,25,72, 5,26,83, + 6,44,44, 0, 0, 0, 5,26,80, 6,44,41, 5,26,70, 5,26,77, 6,44,47, 5,26,78, + 5,26,75, 6,44,45, 0, 0, 0,15,29,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,26, 6,54, 9, 5,33,28, 5,33,27, 5,33,30, + 6,54, 2, 6,54, 4, 5,26,76, 0, 0, 0, 5,33,29, 5,33,31, 6,54, 8, 6,54,11, + 5,33,32, 6,54, 6, 6,54, 5, 0, 0, 0, 0, 0, 0,15,36,27,15,36,29,15,36,30, + 15,36,31,15,36,32, 6,54, 3, 0, 0, 0, 0, 0, 0, 6,54,10, 6,55, 6, 0, 0, 0, + 4,37,65, 6,63,87, 5,40,18, 6,63,86, 6,63,82, 6,63,84, 6,63,83, 5,40,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,63,89,15,42,70, 5,40,19, + 0, 0, 0, 0, 0, 0, 6,63,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,28, + 7, 6,27, 0, 0, 0, 5,47, 1, 5,47, 7, 5,47,10, 5,40,16, 7, 6,26, 5,47,11, + 5,47, 6, 5,47, 2, 5,47,12, 5,47, 5, 7, 6,25, 5,46,94, 5,47, 8, 5,47, 4, + 5,47, 9, 0, 0, 0, 7, 7,14, 0, 0, 0, 0, 0, 0, 4,43,77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,47, 5,54,49, 4,50, 3, 5,54,48, + 4,50, 6, 5,54,41, 4,50, 8, 7,16,80, 5,54,42, 5,54,44, 5,54,43, 5,54,51, + 5,54,45, 5,54,52, 7,16,78, 5,54,46, 5,60,69, 5,54,53, 0, 0, 0,15,54,54, + /* plane 2, page 90 */ + 0, 255, /* first, last */ + 15,54,55,15,54,56,15,54,57,15,54,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,16,81, 0, 0, 0, 0, 0, 0, 5,60,74, 5,60,71, 7,26, 1, + 4,55,46, 5,60,73, 7,25,92, 7,25,93, 7,25,91, 5,60,70, 7,25,94, 7,16,82, + 5,60,72, 0, 0, 0,15,59,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,67, 8, 5,67, 7,15,63,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,64,42, 7,40,36, 7,40,35, 5,72,63, 7,40,34, 0, 0, 0, + 7,46,68, 7,46,70, 5,72,64, 4,67,91, 5,76,78, 7,52,13, 7,46,71, 7,46,69, + 15,69,68, 0, 0, 0, 0, 0, 0, 5,80,59, 7,52,11, 4,70,71, 0, 0, 0, 4,70,70, + 5,80,57, 7,52,12, 5,80,58,15,72, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,69,69, 0, 0, 0, 5,86,18, 7,60,15, 5,87,81, 0, 0, 0, 7,65,10,15,75,57, + 7,63, 9, 0, 0, 0, 5,89,20, 7,66,42, 5,91,67, 6, 8,82, 6, 8,81, 5, 7,41, + 5, 7,42, 4,10,85, 0, 0, 0,15,12,84,15,12,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,14,79, 5,15,39, 5,15,40, 4,14,76, 5,15,38, 5,15,37, 4,14,78,15,17,60, + 15,17,61,15,17,62,15,17,63,15,17,65,15,17,66, 6,26,45, 6,26,46, 0, 0, 0, + 0, 0, 0, 6,34,82, 4,19,83, 6,34,81, 6,34,83, 6,34,80, 4,19,84, 0, 0, 0, + 15,23,37,15,23,39, 0, 0, 0, 5,20,39,15,23,40, 0, 0, 0, 4,25,75, 6,44,53, + 5,26,85, 5,26,87, 5,26,86, 5,26,88, 6,44,52, 0, 0, 0,15,29,77,15,29,78, + 15,29,79,15,29,80, 4,31,54, 4,31,56, 5,33,34, 4,31,57, 6,54,12, 5,33,33, + 6,54,13, 6,54,14,15,36,33,15,36,34,15,36,35, 5,33,35, 0, 0, 0, 0, 0, 0, + 5,40,20, 6,63,90, 5,40,21, 4,37,66, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,71, + 15,42,72,15,42,74, 0, 0, 0, 0, 0, 0,15,42,73, 7, 6,31, 4,43,78, 5,47,13, + 15,48,83,15,48,84,15,48,85, 0, 0, 0, 7, 6,29,15,54,60,15,54,59, 4,55,49, + 7,16,84, 5,54,54,15,59,60, 5,60,76, 0, 0, 0, 5,61,67, 7,26, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,60,75, 5,67,10, 7,26, 3,15,63,85, 7,33,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,67, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,46,72, 7,52,14,15,69,70, 0, 0, 0, 0, 0, 0, 7,40,37, 5,80,60,15,72, 2, + 7,56,48,15,73,62,15,74,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,11, 0, 0, 0, + 15, 5, 6, 5, 7,43, 6,13,48, 5, 7,45, 5, 7,44, 5,10,92, 5,10,93, 5,10,91, + 6,19,63, 6,19,62, 5,10,94, 0, 0, 0, 0, 0, 0,15,12,89,15,12,90,15,12,91, + 15,12,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,12,93,15, 9, 4, 5,15,46, + 5,15,41, 4,14,84, 0, 0, 0, 5,15,42, 5,15,44, 5,15,45, 6,26,48, 5,15,49, + 5,15,47, 5,15,43, 6,26,47, 6,26,49, 5,15,48, 5,15,50,15,17,67,15,17,68, + /* plane 2, page 91 */ + 0, 255, /* first, last */ + 15,17,69,15,17,70,15,17,71,15,17,72,15,17,73,15,17,74, 0, 0, 0, 4,14,86, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,34,84, 6,34,90, 5,20,42, 4,19,89, + 5,20,45, 6,34,87, 5,20,44, 6,34,92, 4,19,85, 5,20,46, 6,34,85, 5,15,51, + 0, 0, 0, 5,20,41, 6,34,89, 6,34,91, 0, 0, 0, 5,20,48, 5,20,49, 6,34,88, + 0, 0, 0,15,23,41,15,23,42,15,23,43,15,23,44,15,23,46,15,23,47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,26,92, 5,27, 2, 5,26,91, 5,26,94, 4,25,76, 4,25,78, + 6,44,58, 5,20,43, 4,25,83, 5,27, 1, 5,26,90, 4,25,89, 4,25,87, 4,25,80, + 6,44,61, 4,25,88, 0, 0, 0, 6,44,55, 5,27, 5, 6,44,57, 6,44,60, 5,20,47, + 5,26,93,15,29,81,15,29,82,15,29,83,15,29,84,15,29,85,15,29,86,15,29,88, + 15,29,89,15,29,90,15,29,87, 5,27, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,33,52, 5,33,40, 5,33,47, 4,31,60, 5,33,45, 5,33,37, 4,31,68, 4,31,69, + 5,33,48, 4,31,63, 5,26,89, 6,54,16, 5,33,38, 5,33,53, 5,33,43, 5,33,50, + 5,33,36, 5,33,41, 5,33,44, 6,54,20, 6,54,18, 6,54,23, 6,54,26, 6,54,19, + 6,54,22, 0, 0, 0, 6,54,24, 6,63,91, 5,33,51, 5,33,49, 5,33,46, 5,33,39, + 6,54,17, 6,44,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,21, + 6,54,25,15,36,36,15,36,38,15,36,39,15,36,40,15,36,41,15,36,42,15,36,43, + 15,36,44,15,36,45,15,36,46,15,36,47,15,36,48, 6,54,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,33,30, 5,40,37, 5,33,54, 4,37,76, + 5,40,35, 6,64, 7, 4,37,71, 6,63,92, 6,63,93, 5,40,28, 5,40,27, 5,40,34, + 4,37,79, 6,64, 8, 5,40,32, 6,64, 6, 5,40,24, 5,40,25, 6,64, 5, 0, 0, 0, + 6,64, 1, 0, 0, 0, 5,40,26, 5,40,33, 5,40,23, 5,40,29, 6,64, 2, 5,33,42, + 5,40,39, 6,63,94, 5,40,30, 6,64, 4, 0, 0, 0, 5,40,31, 4,37,81, 5,40,36, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,75,15,42,76,15,42,77, + 15,42,78,15,42,79,15,42,80,15,42,83,15,42,84,15,42,85,15,42,86,15,42,87, + 15,42,88,15,42,89,15,42,90, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,42,82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,42,81, 5,47,26, 7, 6,41, 7, 6,43, 5,47,36, 4,44,15, 5,47,19, 7, 6,49, + 7, 6,42, 5,47,30, 4,43,81, 4,43,79, 5,47,33, 5,47,15, 5,47,20, 5,47,35, + 7, 6,34, 5,47,32, 5,47,17, 4,50,32, 5,47,25, 5,47,34, 4,43,82, 4,44, 9, + 4,44, 3, 4,43,93, 5,47,24, 5,47,23, 5,47,28, 7, 6,46, 5,40,40, 5,47,21, + 7, 6,48, 7, 6,39, 7, 6,36, 5,47,31, 7, 6,32, 7, 6,51, 4,44, 4, 7, 6,47, + 4,43,92, 7, 6,44, 5,47,29, 0, 0, 0, 7, 6,37, 7, 6,35, 5,47,14, 7, 6,40, + /* plane 2, page 92 */ + 2, 255, /* first, last */ + 7, 6,38, 0, 0, 0, 0, 0, 0, 5,47,38,15,48,88, 0, 0, 0, + 0, 0, 0, 7, 6,50, 0, 0, 0,15,48,87,15,48,90,15,48,91,15,48,92,15,48,93, + 15,48,94,15,49, 2,15,49, 4,15,49, 9,15,49, 5,15,49, 6,15,49, 7,15,49,10, + 5,54,68, 4,50,33, 4,50,30, 5,54,56, 5,54,62, 5,54,70, 7,17,10, 5,54,60, + 4,50,14, 5,54,61, 4,50,12, 5,54,72, 7, 6,33, 7,17, 5, 4,50,18, 5,54,71, + 4,50,17, 7,17, 9, 4,50,28, 7,16,94, 7,17, 6, 4,50,16, 5,54,64, 7,16,91, + 4,50,31, 5,54,63, 5,54,57, 7,16,90, 7,17, 8, 4,50,10, 5,54,55, 7,17, 4, + 4,50,21, 5,54,69, 7,16,93, 5,54,66, 4,50,19, 7,17,11, 7,16,85, 7,17, 7, + 5,47,16, 5,54,67, 5,54,58, 0, 0, 0, 7,16,88, 7,17, 3, 7,16,86, 5,54,65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,54,82, 5,54,59, 7,16,92, 7,16,87, + 7,17, 2,15,54,61,15,54,62,15,54,64,15,54,65,15,54,66,15,54,67,15,54,68, + 15,54,69,15,54,70,15,54,71,15,54,72,15,54,73,15,54,74,15,54,75,15,54,76, + 15,54,77,15,54,78,15,54,79,15,54,80,15,54,81, 0, 0, 0,15,54,83, 0, 0, 0, + 0, 0, 0, 7,16,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,48,89, 0, 0, 0, 5,61, 4, 5,61, 1, 4,55,61, + 5,60,85, 5,61,13, 5,60,89, 4,55,60, 4,55,67, 4,55,71, 7,26,12, 5,61,11, + 4,55,64, 5,61, 2, 0, 0, 0, 0, 0, 0, 5,60,80, 5,61, 3, 5,60,82, 5,61,17, + 5,60,91, 5,61,10, 5,60,87, 5,61,20, 7,26, 4, 5,60,86, 5,60,92, 5,61, 6, + 4,55,68, 5,61, 7, 7,26, 9, 0, 0, 0, 0, 0, 0, 5,67,34, 5,61,12, 5,60,90, + 7,26,15, 7,26, 8, 5,60,79, 5,61,18, 5,61, 9, 5,60,83, 7,26,11, 5,61,14, + 5,60,81, 5,60,78, 5,61, 8, 4,55,70, 4,60,28, 5,61,19, 5,60,88, 5,61,15, + 5,61, 5, 7,17, 1, 5,60,84, 7,26, 7, 7,26, 6, 0, 0, 0, 7,26, 5, 7,26,13, + 15,59,61,15,59,62,15,59,64,15,59,65,15,59,66,15,59,67,15,59,68,15,59,70, + 15,59,71,15,59,72,15,59,73, 7,26,10, 7,26,14, 4,55,72, 0, 0, 0, 0, 0, 0, + 15,59,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,55,65, 5,67,43, + 5,67,39, 5,61,21, 4,60,50, 5,67,37, 5,67,24, 5,67,19, 4,60,39, 5,67,42, + 5,67,32, 3,56,47, 5,67,14, 4,60,46, 4,60,37, 5,67,35, 5,67,25, 5,67,44, + 4,60,29, 7,33,27, 5,67,38, 5,67,16, 5,67,23, 4,60,30, 4,60,31, 5,67,40, + 7,33,25, 5,67,21, 5,67,18, 5,67,31, 7,33,21, 5,67,12, 7,33,22, 4,60,33, + 7,33,19, 4,60,51, 5,67,30, 7,33,24, 5,67,29, 7,33,26, 7,33,30, 7,33,20, + 5,67,17, 4,60,45, 5,67,22, 5,67,26, 5,67,36, 5,67,41, 5,67,28, 5,67,13, + 7,33,34, 7,33,33, 5,67,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,67,11, + /* plane 2, page 93 */ + 0, 255, /* first, last */ + 5,67,15, 7,33,18, 7,33,23,15,63,86,15,63,87,15,63,88,15,63,89,15,63,90, + 15,63,91,15,63,92,15,63,93,15,63,94,15,64, 1,15,64, 3,15,64, 4,15,64, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33,32, 7,33,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,74,15,67,22,15,67,23, + 15,64, 2, 5,72,74, 5,72,79, 7,40,46, 4,64,57, 7,40,44, 5,72,67, 4,64,52, + 4,64,53, 4,64,49, 5,72,73, 4,64,47, 4,64,48, 7,40,40, 4,64,50, 5,72,66, + 4,64,56, 4,64,45, 7,40,39, 0, 0, 0, 5,72,77, 5,72,72, 5,72,80, 5,72,76, + 5,72,75, 5,72,69, 5,72,68, 5,72,71, 0, 0, 0, 7,40,38, 7,40,42, 5,72,65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,81, 7,40,41,15,67,17,15,67,19, + 15,67,20,15,67,21,15,67,24,15,67,25,15,67,26,15,67,27,15,67,28, 0, 0, 0, + 7,40,43, 0, 0, 0, 0, 0, 0, 7,40,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,76,92, 5,76,91, 5,76,86, 4,64,55, + 5,76,84, 7,46,76, 5,76,90, 4,67,93, 7,46,84, 4,68, 2, 5,76,88, 5,76,83, + 4,70,80, 7,46,74, 5,76,79, 5,76,85, 5,76,81, 7,46,73, 7,46,85, 5,76,87, + 7,46,77, 7,46,78, 5,76,82, 7,46,79, 7,52,24, 7,46,81, 7,46,80, 0, 0, 0, + 7,46,82, 7,46,83,15,69,72,15,69,73, 0, 0, 0, 7,46,75, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,68, 5,80,72, + 5,80,73, 0, 0, 0, 4,70,81, 4,70,75, 5,80,70, 5,80,75, 7,52,15, 5,80,62, + 5,80,67, 5,80,64, 4,68, 1, 5,80,71, 5,80,63, 5,76,80, 7,52,21, 5,80,74, + 5,80,61, 7,52,17, 5,80,69, 4,73, 7, 5,80,76, 7,52,22, 7,52,16, 7,52,20, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72, 3,15,72, 4,15,72, 5,15,72, 6,15,72, 7, + 15,72, 8,15,72, 9, 7,52,19, 7,52,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,52,18, 7,56,53, 4,73, 4, 4,73, 3, + 5,83,80, 5,83,78, 5,80,66, 5,83,81, 7,56,50, 5,80,77, 7,56,49, 5,83,84, + 4,73, 5, 5,83,77, 7,56,52, 7,52,23, 5,83,86, 5,83,83, 5,83,79, 5,83,85, + 5,83,82, 7,56,54, 0, 0, 0, 0, 0, 0,15,73,63,15,73,64,15,73,65,15,73,66, + 7,56,51, 7,57,20, 0, 0, 0, 0, 0, 0, 4,74,62, 5,86,19, 7,60,17, 5,86,20, + 4,74,63, 4,74,64, 4,74,66, 7,60,16, 5,86,22, 7,60,18, 5,86,21, 7,60,22, + 7,60,21,15,74,73, 7,60,19, 7,60,23, 7,60,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,87,82, 7,63,11, 7,63,14, 5,87,84, 5,87,85, 7,63,13, 5,86,23, 7,63,12, + 7,63,10, 5,87,83, 7,63,17, 0, 0, 0, 4,75,87,15,75,58,15,75,59,15,75,60, + 7,63,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,21, 7,65,12, 7,65,14, 7,65,17, + /* plane 2, page 94 */ + 0, 255, /* first, last */ + 4,76,89, 0, 0, 0, 0, 0, 0, 7,65,15, 0, 0, 0, 7,63,16, 0, 0, 0, 7,65,13, + 5,90,17, 5,90,15, 5,90,16, 7,65,16, 0, 0, 0, 0, 0, 0,15,76,47,15,76,45, + 7,67,62, 7,67,63, 0, 0, 0, 0, 0, 0,15,76,72, 0, 0, 0, 7,67,64, 5,91,36, + 5,91,68,15,77, 7, 0, 0, 0, 0, 0, 0, 7,68,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,78,46, 5,91,92, 5,92,11, 0, 0, 0, 5, 4,81,15, 5, 7, 5, 7,46, + 6,13,49,15, 8,37, 0, 0, 0, 6,19,65, 5,11, 2, 6,19,64, 0, 0, 0, 5,11, 3, + 15,12,94,15,13, 2, 0, 0, 0, 6,26,50, 5,15,52, 6,26,54, 5,15,53, 6,26,52, + 5,15,54,15,17,75,15,17,76,15,17,77,15,17,78, 6,26,51, 6,26,53, 0, 0, 0, + 0, 0, 0, 4,19,94, 5,20,53, 4,20, 4, 0, 0, 0, 5,20,52, 4,20, 1, 5,20,56, + 5,20,51, 5,20,54, 5,20,55, 4,20, 3, 5,20,58, 5,20,50, 6,34,93, 6,44,67, + 6,35, 1,15,23,48,15,23,49, 0, 0, 0, 0, 0, 0, 6,34,94,15,23,50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,27, 6, 0, 0, 0, 4,25,90, 6,44,65, 6,44,62, 6,44,69, + 5,27, 8, 4,26, 1, 6,44,68, 0, 0, 0, 6,44,63, 0, 0, 0,15,29,92,15,29,94, + 15,30, 2, 0, 0, 0, 0, 0, 0,15,29,91, 0, 0, 0, 6,44,66, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,33,55, 4,31,72, 6,54,29, 5,33,57, 5,33,58, 5,27, 7, + 5,33,56, 6,54,31, 6,54,30, 4,25,94, 5,33,59, 5,33,61, 5,33,60, 6,54,33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,50,15,36,51,15,36,53,15,36,54, + 6,54,27,15,36,52, 0, 0, 0, 6,54,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,49, + 6,64,13, 5,40,42, 6,64,11, 6,64,14, 5,40,44, 4,37,83, 6,54,28, 6,64,19, + 6,64,18, 5,40,43, 6,64,16, 5,40,41, 5,40,45, 0, 0, 0, 0, 0, 0,15,42,92, + 15,42,93,15,42,94,15,43, 1,15,43, 2,15,43, 3,15,43, 5,15,43, 6,15,43, 8, + 15,43, 9,15,43,10,15,43,13, 6,64,15,15,43,12, 0, 0, 0, 6,64, 9, 0, 0, 0, + 6,64,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,43, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 6,56, 7, 6,52, 4,44,22, 5,47,43, 7, 6,53, 7, 6,57, 4,44,19, + 5,47,42, 5,47,44, 5,47,48, 5,40,46, 5,47,47, 5,47,45, 7, 6,59, 7, 6,54, + 5,47,41, 4,44,20, 5,47,46, 4,44,18, 7, 6,58, 5,47,40, 5,47,39, 0, 0, 0, + 0, 0, 0,15,49,11,15,49,12,15,49,13,15,49,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,54,78, 5,54,76, 5,61,28, 4,50,35, + 5,54,75, 4,50,34, 7,17,15, 7,17,16, 5,54,79, 7,17,12, 5,54,74, 5,54,77, + 5,54,80,15,54,84,15,54,85, 7,17,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,61,22, + /* plane 2, page 95 */ + 0, 255, /* first, last */ + 5,61,24, 7,26,16, 5,61,25, 5,61,23, 5,61,26, 5,61,27, 7,26,18, 7,26,20, + 7,26,21, 7,26,17, 0, 0, 0, 0, 0, 0,15,59,75,15,59,76,15,59,77,15,59,79, + 15,59,80,15,59,81,15,59,82, 4,55,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,67,50, 7,33,37, 4,60,55, 5,67,51, 5,67,47, 7,40,54, 5,67,49, 5,61,29, + 7,33,38, 5,67,48, 7,46,88, 0, 0, 0, 5,67,45, 7,33,35,15,64, 7,15,64, 8, + 15,64, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,59,78, 5,72,84, 7,40,47, + 7,40,48, 4,64,62, 4,64,60, 5,72,83, 5,80,78, 7,40,50, 7,40,51, 7,33,40, + 4,64,63, 4,60,56, 5,72,85, 7,33,39, 0, 0, 0, 5,72,82,15,67,30, 7,40,49, + 0, 0, 0, 7,40,52, 7,40,53,15,67,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,46,87, + 5,76,94, 7,46,86, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,69,74,15,69,75, 4,70,83, + 4,70,82, 5,80,79, 7,52,29, 7,52,28, 0, 0, 0,15,72,10,15,72,11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,52,27, 0, 0, 0, 5,83,87, 7,56,55, 5,83,88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,74,67, 4,74,68, 7,60,24,15,74,74, + 5,86,24, 7,60,25, 7,63,18, 5,87,87, 5,87,86, 0, 0, 0, 5,89,24, 7,65,19, + 5,89,23, 5,89,22, 7,65,18, 7,66,44, 4,77,61, 5,90,18, 7,66,43, 5,90,19, + 7,67,66, 7,67,65, 5,91,93, 0, 0, 0, 7,70,22, 5, 7,47, 6,13,50, 5, 7,48, + 15, 8,39,15, 8,40, 5, 7,49, 0, 0, 0, 5,11, 6, 6,19,66, 6,19,69, 5,11, 4, + 5,11, 5, 6,19,71, 6,19,67, 5,11, 7,15,13, 3, 0, 0, 0, 6,19,72, 0, 0, 0, + 0, 0, 0, 6,26,59, 6,26,55, 4,14,89, 6,26,67, 4,14,91, 6,26,61, 0, 0, 0, + 6,26,60, 6,26,63, 5,15,58, 4,14,90, 4,15, 4, 6,26,68, 6,26,57, 4,15, 3, + 6,26,62, 4,15, 2, 6,26,64, 6,26,56, 5,15,57, 6,26,65, 5,15,56, 5,15,55, + 6,26,58, 0, 0, 0,15,17,81,15,17,82,15,17,83,15,17,84,15,17,85,15,17,86, + 15,17,87, 0, 0, 0, 4,15, 6, 6,26,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,20,63, 5,20,61, 4,20,18, 4,20, 8, 4,20,10, + 6,35, 8, 4,20,15, 5,20,62, 4,20,17, 6,35, 9, 5,20,59, 4,20,12, 6,35,11, + 6,35,10, 6,35, 5, 6,35, 3, 6,35, 4, 0, 0, 0, 5,20,60,15,23,56,15,23,57, + 15,23,58,15,23,59, 0, 0, 0, 0, 0, 0, 6,35, 7, 0, 0, 0, 0, 0, 0, 6,35,12, + 0, 0, 0,15,23,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,27,17, 5,27,16, + 5,27,14, 5,27,18, 6,44,77, 4,26, 3, 6,44,70, 6,44,76, 4,26, 2, 4,26, 4, + 6,44,78, 6,35, 6, 6,44,71, 6,44,80, 6,44,72, 5,27,13, 6,44,74, 6,44,73, + 6,44,79, 5,27,10, 5,27, 9, 0, 0, 0, 5,27,11,15,30, 5,15,30, 6,15,30, 7, + /* plane 2, page 96 */ + 0, 250, /* first, last */ + 15,30, 8,15,30, 9,15,30,10,15,30,11,15,30,12,15,30,13,15,30,14, 6,44,75, + 0, 0, 0, 5,27,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,54,43, 6,54,34, 5,33,63, 5,33,62, 4,31,76, 6,54,36, + 4,31,77, 6,54,40, 6,54,37, 4,31,73, 5,33,65, 5,33,64, 6,54,35, 6,54,41, + 4,26, 5, 4,31,75, 6,54,38, 5,33,66, 6,54,44, 6,54,45, 4,31,82, 6,54,42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,55,15,36,56,15,36,57,15,36,58, + 15,36,59,15,36,60,15,36,61,15,36,62,15,36,63,15,36,64,15,36,65,15,36,66, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,39, 4,31,80, 0, 0, 0, 4,37,88, 0, 0, 0, + 5,40,48, 4,37,86, 5,40,50, 6,64,31, 6,64,30, 5,40,54, 4,37,90, 5,40,53, + 4,37,87, 6,64,25, 6,64,35, 6,64,34, 6,64,22, 4,37,93, 5,40,47, 5,33,67, + 6,64,33, 5,40,49, 6,64,28, 6,64,20, 5,40,51, 5,40,55, 6,64,32, 0, 0, 0, + 0, 0, 0, 6,64,27, 0, 0, 0, 0, 0, 0, 4,38, 2, 6,64,24,15,43,14,15,43,15, + 15,43,16,15,43,17,15,43,18,15,43,19,15,43,20,15,43,21,15,43,22,15,43,23, + 6,64,21, 6,64,23, 0, 0, 0, 0, 0, 0, 6,64,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,44,24, 4,44,35, 7, 6,64, 4,44,34, 4,44,27, 5,47,59, 5,47,57, 4,50,40, + 5,47,56, 5,47,61, 0, 0, 0, 5,47,53, 4,44,38, 5,47,58, 7, 6,76, 7, 6,62, + 7, 6,68, 5,47,60, 5,47,50, 7, 6,65, 7, 6,70, 5,47,55, 0, 0, 0, 4,44,33, + 4,44,25, 7, 6,61, 7, 6,69, 7, 6,60, 7, 6,71, 6,64,26, 7, 6,77, 7, 6,75, + 5,47,49, 5,47,54, 5,47,62, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,49,16,15,49,17, + 15,49,18,15,49,19,15,49,20,15,49,21,15,49,24,15,49,25,15,49,26,15,49,29, + 15,49,30,15,49,31, 0, 0, 0, 0, 0, 0, 7, 6,66, 7, 6,72, 0, 0, 0, 7, 6,63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 6,67, 0, 0, 0, 7,17,38, 4,50,38, 7,17,35, 7,17,36, 4,50,42, + 7,17,32, 7,17,29, 5,54,84, 5,54,86, 7,17,17, 7,17,34, 7,17,18, 7,26,22, + 7,17,19, 7,17,22, 5,54,85, 5,54,87, 5,54,83, 5,61,37, 4,50,37, 5,54,81, + 5,54,82, 4,50,43, 0, 0, 0, 7,17,26, 7,17,23, 7,17,24, 7,17,33, 4,50,45, + 7,17,21, 0, 0, 0, 5,54,89, 7,17,20, 7,17,37, 7,17,27, 5,54,88, 7,17,31, + 7,17,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,17,25, 7,17,28,15,54,86,15,54,87,15,54,88,15,54,89,15,54,90,15,54,91, + 15,54,92,15,54,93,15,54,94, + /* plane 2, page 97 */ + 9, 255, /* first, last */ + 7,26,36, 7,26,35, 5,61,35, 5,61,32, 4,55,81, 7,26,23, 5,61,33, + 7,26,34, 4,55,79, 7,26,26, 5,61,36, 5,61,30, 7,26,30, 7,26,27, 7,26,28, + 7,26,32, 5,61,34, 7,26,33, 7,26,29, 5,61,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,59,83,15,59,84,15,59,85,15,59,87,15,59,88,15,59,89, + 15,59,90,15,59,91,15,59,92,15,59,93,15,59,94,15,60, 1,15,60, 2, 0, 0, 0, + 0, 0, 0, 7,26,31, 7,26,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,60,68, 4,60,60, 7,33,46, 4,60,67, + 4,60,61, 7,33,45, 7,33,52, 4,60,65, 4,55,80, 7,33,41, 5,67,53, 5,67,56, + 5,67,55, 7,33,43, 7,33,49, 5,67,54, 7,33,42, 7,33,47, 7,33,50, 7,33,44, + 7,33,55, 7,33,53, 7,33,48, 7,33,59, 5,67,58, 7,33,54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,64,10,15,64,11,15,64,12, + 15,64,13,15,64,14,15,64,15,15,64,16,15,64,17,15,64,18, 0, 0, 0, 5,67,57, + 7,33,60, 0, 0, 0, 7,33,58, 0, 0, 0, 7,33,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,33,51, 0, 0, 0, 4,64,68, 4,64,69, 7,40,63, + 4,64,73, 7,40,71, 5,72,86, 7,40,68, 4,64,71, 7,40,70, 4,64,75, 5,72,89, + 4,64,64, 5,72,90, 7,40,65, 7,39,43, 4,64,65, 7,40,61, 5,72,87, 0, 0, 0, + 7,40,67, 7,40,59, 7,40,66, 5,72,88, 7,40,57, 7,40,58, 7,40,64, 7,40,62, + 15,67,32,15,67,33,15,67,35,15,67,36,15,67,37, 7,42,83, 7,40,60, 7,40,69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,64,74, 7,46,93, 7,46,92, 5,77, 3, 5,77, 1, + 4,68, 5, 7,46,94, 7,47, 3, 7,46,91, 7,52,34, 7,40,56, 5,77, 4, 7,47, 4, + 0, 0, 0, 7,47, 6, 7,46,90, 4,70,89, 7,47, 2, 0, 0, 0, 0, 0, 0, 7,46,89, + 7,47, 5,15,69,76,15,69,77,15,69,78,15,69,80,15,69,81, 7,47, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,82, 4,70,85, 7,52,35, 5,80,83, 4,70,88, + 4,70,86, 4,70,87, 7,56,62, 7,47, 7, 7,52,31, 7,52,30, 0, 0, 0, 0, 0, 0, + 7,52,33,15,72,12,15,72,13,15,72,14,15,72,15, 0, 0, 0, 4,70,84, 7,52,32, + 0, 0, 0, 5,80,81, 0, 0, 0, 7,52,36, 5,83,91, 7,56,57, 5,83,92, 5,83,89, + 4,73, 9, 5,86,26, 7,56,61, 5,83,90, 7,56,59, 0, 0, 0,15,73,67,15,73,68, + 15,73,69,15,73,70, 7,56,58, 7,56,60, 0, 0, 0, 4,73,43, 0, 0, 0, 4,74,71, + 7,56,63, 7,60,26, 7,60,27, 4,74,72, 4,74,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,75,90, 5,87,88, 7,63,23, 7,63,21,15,75,61, 0, 0, 0, 7,63,22, 7,63,24, + 5,89,26, 7,63,20, 5,89,25, 7,65,20, 7,66,47, 7,66,46, 7,67,67,15,76,73, + /* plane 2, page 98 */ + 0, 255, /* first, last */ + 7,67,69, 7,67,68, 0, 0, 0, 7,68,53, 0, 0, 0, 5,91,69,15,77,16, 7,69,85, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 5,34, 4,10,88, 0, 0, 0, 5,11, 8, 4,15, 8, 6,26,70, + 5,15,59, 5,20,65, 0, 0, 0, 6,35,13, 5,27,20, 6,35,15, 6,35,14, 6,44,84, + 4,26, 9, 6,44,83, 5,27,19,15,30,15, 6,54,48, 6,54,47, 4,31,84, 0, 0, 0, + 4,38, 4, 6,64,37, 5,40,56, 6,64,36, 7, 6,78, 0, 0, 0,15,43,25,15,43,26, + 15,43,27, 7, 6,80, 4,44,39, 0, 0, 0,15,49,32,15,49,33, 0, 0, 0, 7, 6,79, + 5,54,91, 5,54,90, 0, 0, 0,15,55, 2,15,55, 1, 0, 0, 0, 5,61,41, 7,26,37, + 5,61,40,15,58,56,15,60, 3,15,60, 4, 0, 0, 0, 7,33,61, 7,33,62,15,64,19, + 0, 0, 0, 7,40,72, 4,64,76,15,67,38, 0, 0, 0, 5,80,84, 4,68, 7, 4,70,90, + 7,52,37, 0, 0, 0, 4,74,74, 7,60,28,15,74,75, 7,63,26, 7,63,25, 5,90,20, + 0, 0, 0, 7,70,10, 6, 2, 9, 6, 2, 8, 4, 4,74, 6, 5,36, 6, 5,37, 6, 8,83, + 0, 0, 0, 0, 0, 0,15, 1,92, 6, 5,35,15, 5, 8,15, 5,10, 0, 0, 0, 6,13,51, + 6,19,74, 4, 7,61, 0, 0, 0, 6,19,73, 6,13,52, 0, 0, 0, 4, 7,62, 6, 8,84, + 4, 4,75, 6,19,75, 4,10,90, 4,10,92, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 5,54, + 5,11, 9,15, 8,41, 0, 0, 0, 5, 7,50, 0, 0, 0, 6,26,71, 6,26,72, 6,26,73, + 5,15,63, 6,26,76, 6,26,74, 4,15,12, 4,15,11, 6,19,78, 6,19,76, 6,19,79, + 6,35,21,15, 9,25, 0, 0, 0, 0, 0, 0, 5,15,61, 6,35,16, 6,35,17, 6,35,18, + 6,35,20, 6,35,22,15,17,89, 6,19,77, 6,22,90, 0, 0, 0, 0, 0, 0, 5,11,10, + 4,10,93, 6,35,19, 6,44,87, 6,35,23, 0, 0, 0, 6,26,77, 6,44,86, 6,35,24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,15,62, 5,20,66,15,23,60, 6,44,85, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,27,22, 5,27,21, 4,26,12, 6,44,88, + 0, 0, 0, 0, 0, 0,15,30,16, 0, 0, 0, 6,54,50, 5,33,71, 6,54,52, 6,44,90, + 5,33,68, 5,33,70, 6,54,51, 6,54,53, 6,44,89, 6,54,54, 0, 0, 0, 0, 0, 0, + 15,30,17, 6,54,49,15,36,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,64,38, 6,64,40, + 6,64,41, 6,64,42, 6,64,43, 6,64,44, 6,64,45, 6,64,48, 5,40,59, 7, 6,85, + 6,64,46, 5,40,58, 6,54,55, 5,40,57, 6,64,47, 0, 0, 0, 0, 0, 0, 6,64,39, + 15,43,28, 0, 0, 0, 0, 0, 0, 7, 6,81, 7, 6,82, 7, 6,83, 7, 6,84, 5,47,66, + 5,47,63, 6,64,50, 7, 6,86, 5,47,64, 5,47,65, 6,64,49, 0, 0, 0,15,49,34, + 15,49,35, 7, 5,83, 0, 0, 0, 7,17,39, 7,17,40, 7,17,44, 7,17,41, 5,54,92, + /* plane 2, page 99 */ + 0, 254, /* first, last */ + 7,17,43, 4,50,49, 7,26,46, 7,17,42, 0, 0, 0, 7,17,45, 5,47,67, 0, 0, 0, + 0, 0, 0, 5,54,93, 4,50,48, 0, 0, 0, 0, 0, 0, 7, 6,87, 7, 6,88, 7,26,39, + 7,26,40, 7,26,43, 5,61,42, 7,17,46, 4,55,84, 5,67,59, 7,26,44, 7,26,45, + 0, 0, 0,15,60, 5, 0, 0, 0,15,55, 3, 7,33,63, 7,33,64, 7,33,66, 7,33,68, + 4,60,71, 4,60,70, 5,67,60, 7,33,67, 7,40,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,26,42, 5,67,62, 5,72,91, 7,40,76, 4,64,78, 7,40,74, 7,40,75, 0, 0, 0, + 0, 0, 0, 7,47, 8, 7,47, 9, 7,47,10, 7,47,11, 5,77, 5, 5,77, 7, 7,47,12, + 5,77, 6, 0, 0, 0, 5,77, 8, 7,52,38, 7,47,13, 0, 0, 0, 5,87,90, 4,75,92, + 7,63,27, 5,87,91, 5,87,89, 7,65,21, 0, 0, 0, 0, 0, 0, 7,66,48, 7,67,70, + 7,68,54, 0, 0, 0, 7,69,28, 4, 4,76, 4, 3,12,15, 1,64, 6,13,54, 5, 7,51, + 6,13,53,15,13, 4, 6,19,81, 0, 0, 0, 6,19,80, 4,10,94,15, 8,43, 6,26,78, + 6,26,79, 0, 0, 0, 6,35,27, 6,26,83, 6,26,82, 6,26,81, 6,26,80, 6,35,26, + 0, 0, 0,15,17,90,15,17,91, 0, 0, 0, 0, 0, 0, 6,35,29, 5,20,68, 4,26,14, + 6,35,30, 4,20,25, 5,20,69, 0, 0, 0,15,23,61, 5,20,67, 6,35,25,15,23,62, + 15,23,63, 0, 0, 0, 6,35,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,27,25, 5,27,23, 6,44,93, 4,26,15, 6,45, 1, 5,27,24, 6,44,94, + 6,44,92, 0, 0, 0, 0, 0, 0, 6,45, 2, 0, 0, 0, 6,39, 1, 6,54,58, 5,33,72, + 6,54,59, 6,54,56, 5,33,73, 6,54,57, 0, 0, 0, 6,54,60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,74,15,30,19,15,30,20, 5,40,60, + 6,64,51, 6,64,53, 5,40,61, 0, 0, 0, 0, 0, 0, 6,64,52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,47,68, 4,44,42, 7, 6,91, 7, 6,92, 4,44,43, 7,17,47, + 0, 0, 0, 7, 6,90, 0, 0, 0, 4,44,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,55, 1, + 5,54,94, 4,50,50, 0, 0, 0,15,55, 5, 7,17,48, 0, 0, 0, 0, 0, 0, 4,55,88, + 4,55,86, 5,61,43, 7,26,48, 7,26,47, 7,26,50, 0, 0, 0, 0, 0, 0,15,60, 6, + 0, 0, 0, 4,50,52, 0, 0, 0, 7,26,49, 0, 0, 0, 5,67,61, 4,60,73, 5,67,63, + 7,33,73, 7,33,74, 4,60,77, 7,33,71, 7,33,72, 7,33,70,15,55, 4,15,64,20, + 15,64,21, 4,60,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,72,92, 7,40,80, 5,86,27, + 7,40,79, 7,47,14, 7,40,78, 0, 0, 0, 5,77, 9, 7,47,15, 7,47,16, 7,47,17, + 7,47,18, 7,33,69, 5,80,85, 7,52,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,52,40, + 5,83,93, 7,56,64, 7,60,30, 7,60,29, 0, 0, 0, 7,65,22, 0, 0, 0, 7,67,71, + 7,69,62, 0, 0, 0, 6,13,55, 0, 0, 0, 6,19,85, 6,19,82, 6,19,86, 5,11,11, + 4,11, 2, 4,11, 1, 4,11, 4, 6,19,84, 4,11, 3,15,13, 5,15,13, 6, + /* plane 2, page 100 */ + 0, 254, /* first, last */ + 6,19,83, 0, 0, 0, 4,15,19, 6,26,86, 5,15,65, 5,15,67, 5,15,64, 4,15,17, + 4,15,22, 4,15,21, 6,26,85, 5,15,66, 4,15,20, 4,15,18, 6,26,87, 0, 0, 0, + 15,15,67,15,15,68, 0, 0, 0, 4,15,23,15,17,92, 5,20,70, 6,35,33, 6,35,32, + 6,35,34, 6,35,35, 6,35,36, 6,35,38, 6,35,39, 0, 0, 0, 4,20,31, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,35,37, 5,27,27, 4,26,18, 6,45, 6, 6,45, 7, 6,45,13, + 5,27,29, 4,26,22, 6,45,14, 0, 0, 0, 6,45, 8, 6,45, 5, 6,45,15, 6,45,16, + 5,27,28, 6,45,10, 6,45,12, 6,45,11, 0, 0, 0,15,30,21,15,30,22, 6,45, 9, + 5,33,78, 5,33,75, 4,31,89, 6,54,61, 6,54,62, 6,54,63, 5,33,77, 0, 0, 0, + 5,33,76, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,68, 0, 0, 0, 6,45, 4, 5,40,69, + 5,40,62, 6,64,55, 5,40,63, 5,40,67, 5,40,64, 5,40,68, 5,40,65, 5,40,66, + 6,64,54, 5,40,70,15,43,29,15,43,30,15,43,31,15,43,32, 0, 0, 0, 0, 0, 0, + 5,47,74, 5,47,75, 7, 6,94, 5,47,72, 4,44,44, 5,47,76, 5,47,69, 7, 6,93, + 5,47,71,15,49,38, 6,64,57, 5,47,70, 7, 7, 4, 7, 7, 5, 7, 7, 1, 4,44,46, + 7, 7, 2, 4,44,45, 7, 7, 3,15,49,36,15,49,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,17,49, 7,17,51, 5,55, 5, 7,17,54, 7,17,50, 7,17,52, 4,50,55, 0, 0, 0, + 5,55, 3, 5,55, 6, 5,55, 4, 5,47,73, 5,55, 2, 7,17,53, 5,55, 7,15,55, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,55,89, 7,26,52, 5,61,44, 7,26,53, 7,40,81, + 5,61,45, 0, 0, 0, 7,26,51,15,60, 7,15,60, 8, 5,67,64, 4,60,78, 7,33,81, + 5,61,46, 4,60,79, 7,33,77, 7,33,79, 7,33,76, 7,33,80, 7,33,78, 0, 0, 0, + 0, 0, 0,15,64,22,15,64,23, 7,33,75, 4,64,80, 5,72,94, 0, 0, 0, 5,72,93, + 7,40,82, 0, 0, 0, 7,47,21, 7,47,22,15,69,82, 7,47,19, 4,70,92, 0, 0, 0, + 7,52,41, 7,52,43, 7,47,20, 0, 0, 0, 7,52,42, 7,56,66, 7,56,67, 7,56,65, + 0, 0, 0, 6, 5,38, 6,13,56, 6, 8,85, 0, 0, 0, 0, 0, 0, 4, 7,63, 4, 7,64, + 6,26,88, 0, 0, 0, 4,20,32, 5,11,12,15,23,64,15,23,65, 6,35,40, 0, 0, 0, + 6,45,17, 7, 7, 6, 0, 0, 0, 7,17,56, 7,17,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,62, 0, 0, 0, 6,13,57, 6,13,58, + 5, 1,89,15, 8,44, 4,15,25, 5,20,71, 5,27,30, 0, 0, 0, 5,33,79, 6,64,58, + 7, 7, 7, 7, 7, 9, 5,40,71, 0, 0, 0, 0, 0, 0, 7,17,58, 7,17,57, 0, 0, 0, + 7,26,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 1, 6,13,59,15, 8,45, 0, 0, 0, + 6,19,87,15,13, 7, 6,19,88,15,17,94, 5,20,72,15,23,66, 6,35,41, 4,26,23, + 5,27,33, 5,27,32, 0, 0, 0, 0, 0, 0, 4,31,91, 6,54,64, 0, 0, 0, 6,64,60, + 5,40,76, 5,40,72, 5,40,77, 5,40,74, 5,40,73, 5,40,75, 4,38,17, + /* plane 2, page 101 */ + 0, 254, /* first, last */ + 15,36,69, 6,64,59, 5,47,79, 5,47,80, 5,47,81, 5,47,77, 5,47,78, 0, 0, 0, + 0, 0, 0, 7, 7,10, 0, 0, 0, 5,55, 9, 5,55, 8, 4,50,56, 4,50,57, 7,17,60, + 7,17,61, 7,17,59,15,49,39, 5,61,47, 4,55,92, 7,26,58, 0, 0, 0, 7,26,55, + 7,26,56, 0, 0, 0,15,55, 9, 5,67,65, 4,55,94, 7,33,82, 7,26,57, 7,40,85, + 5,67,66, 7,33,84, 7,33,83,15,60, 9,15,60,10, 7,40,84, 5,73, 1, 0, 0, 0, + 7,40,83, 4,70,94, 7,52,44, 4,74,76, 5,87,92, 5,89,27, 0, 0, 0, 5, 7,53, + 5, 7,52, 6,13,62,15, 8,46,15, 8,47, 0, 0, 0, 6,13,61, 0, 0, 0, 5,11,15, + 5,11,13, 5,11,14, 0, 0, 0, 0, 0, 0, 4,15,28, 6,26,94, 4,15,27, 6,26,90, + 5,15,68, 6,27, 2,15,18, 1,15,18, 4,15,18, 6,15,18, 7, 0, 0, 0, 6,26,91, + 15,18, 2, 0, 0, 0, 6,26,93, 6,26,92, 6,27, 3, 6,26,89,15,18, 5, 5,15,69, + 6,35,43, 4,20,35, 4,20,34, 4,20,36, 6,35,45, 5,20,73, 6,35,47, 6,35,46, + 6,35,44, 0, 0, 0, 6,35,42,15,23,67,15,23,68,15,23,69,15,23,70, 0, 0, 0, + 5,27,34, 6,45,19, 6,45,20, 0, 0, 0, 0, 0, 0, 5,27,35, 6,45,21,15,30,23, + 15,30,24,15,30,25,15,30,26,15,30,28,15,30,29,15,30,30,15,30,31,15,30,32, + 0, 0, 0, 6,45,18,15,30,27, 0, 0, 0, 0, 0, 0, 6,54,66, 6,54,70, 5,33,81, + 5,33,82, 6,54,65, 6,54,75, 6,54,73, 6,54,71, 5,33,83, 6,54,72, 6,54,68, + 6,54,74, 0, 0, 0, 6,54,67,15,36,70,15,36,71, 6,54,69, 0, 0, 0, 0, 0, 0, + 5,40,80, 5,40,81, 5,40,78, 4,44,48, 6,64,62, 5,40,82, 5,40,79, 0, 0, 0, + 5,40,83,15,43,33,15,43,34,15,43,35,15,43,36,15,43,37,15,43,38,15,43,39, + 15,43,40,15,43,42,15,43,43,15,43,44, 6,64,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,47,82, 7, 7,12, 5,47,85, 7, 7,15, 5,47,84, 5,47,83, + 4,44,49, 5,47,87, 7, 7,11, 7, 7,16, 5,47,86, 0, 0, 0, 0, 0, 0,15,49,40, + 15,49,41,15,49,42,15,49,43,15,49,44,15,49,45,15,49,46,15,49,47, 0, 0, 0, + 0, 0, 0, 7, 7,13, 0, 0, 0, 0, 0, 0, 5,55,12, 5,55,15, 5,55,11, 5,55,13, + 5,55,14, 7,17,65, 7,17,63, 7,17,62,15,55,10,15,55,11,15,55,12,15,55,13, + 15,55,14,15,55,15, 7,17,64, 0, 0, 0, 0, 0, 0, 5,55,10, 0, 0, 0, 0, 0, 0, + 5,61,48, 5,61,49, 5,61,50, 7,26,59, 4,56, 5, 4,56, 6, 5,61,52, 5,61,51, + 15,60,12, 7,26,61, 7,26,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,56,67, + 7,33,87, 5,67,70, 5,67,67, 4,60,82, 7,33,89, 5,61,53, 7,33,88, 5,67,68, + 5,67,69, 7,33,85,15,64,24,15,64,25,15,64,26, 0, 0, 0, 0, 0, 0, 7,33,86, + 0, 0, 0,15,60,11,15,67,39, 7,40,86, 5,73, 2, 5,73, 3, 7,40,88, 7,40,87, + 15,67,40,15,67,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,25, + /* plane 2, page 102 */ + 0, 249, /* first, last */ + 15,69,83,15,69,84,15,69,85, 7,47,24, 7,47,23, 5,80,86,15,72,16,15,72,17, + 7,52,45, 7,52,46, 5,83,94, 7,56,68, 0, 0, 0, 4,74,77,15,74,76,15,75,63, + 15,76,22,15,76,48, 5, 1,90, 6,13,63, 5,11,16, 6,35,48, 0, 0, 0, 0, 0, 0, + 6,45,22, 0, 0, 0, 0, 0, 0, 6,40,74, 0, 0, 0, 6,54,78, 6,64,66, 6,64,65, + 7, 7,17, 0, 0, 0,15,49,48, 7,17,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,47,26, 5, 3, 5, 5, 3, 3, 6,13,64, 6,13,65, 6, 5,40,15, 2,76,15, 2,77, + 0, 0, 0, 0, 0, 0, 5, 3, 4, 5, 3, 2, 5, 4,83, 5, 4,82, 6, 8,89, 6, 8,88, + 6, 8,87, 0, 0, 0, 6, 8,86, 6,19,91, 0, 0, 0, 6,19,90, 6,19,89, 5, 7,58, + 5, 7,62, 6,13,68, 4,15,35, 6,13,77, 6,13,78, 6,13,66, 5, 7,61, 6,13,70, + 5, 7,57, 5, 7,55, 6,13,75, 5, 7,59, 0, 0, 0, 4, 7,75, 0, 0, 0, 0, 0, 0, + 6,13,72, 6,13,79,15, 8,48,15, 8,49,15, 8,51,15, 8,52, 6,13,76, 4, 6,68, + 6,13,69, 0, 0, 0, 0, 0, 0, 6,13,71, 5, 7,60, 0, 0, 0, 0, 0, 0, 6,13,74, + 6,13,67, 6,27, 7, 6,27, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,15,29, + 5, 7,54, 6,27, 6, 6,20,13, 4,11,13, 5,11,20, 6,20, 8, 5,11,17, 5,11,24, + 6,20, 9, 4,11,14, 6,35,52, 6,20, 7, 4,11,11, 6,20,11, 4,11,16, 6,20, 5, + 5,11,22, 6,20, 6, 5,11,23, 5,11,18, 4,15,40, 0, 0, 0, 0, 0, 0, 5,11,21, + 6,19,92, 6,20, 1, 6,20, 2, 6,20, 4,15,13,10,15,13,15,15,23,71,15,23,72, + 6,19,94, 6,20,15, 0, 0, 0, 0, 0, 0, 6,20,12, 6,20,10, 6,20,16, 0, 0, 0, + 0, 0, 0, 6,20,14, 6,35,51, 6,35,50,15,13,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,35,53, 6,35,54, 6,27,16, 6,35,49,15,13,13, 5,15,71, 4,15,30, 4,20,37, + 4,15,37, 6,27,18, 5,15,76, 4,15,36, 6,27,14, 5,15,78, 6,27,10, 5,15,80, + 5,27,36, 5,15,79, 6,27, 9, 5,15,70, 6,27,11, 4,15,32, 6,45,27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,15,73,15,13, 9,15,18, 8,15,18, 9,15,18,13,15,30,44, + 5,15,72, 5,14, 4, 6,27,15, 6,27,13, 0, 0, 0, 6,27,12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,27,19, 6,45,26, 6,45,24, 6,45,25, 6,45,23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,20, 3, 5,15,75, + 5,15,81, 0, 0, 0, 5,15,74, 5,20,84, 6,35,59, 6,35,57, 5,20,75, 4,20,46, + 5,20,76, 4,15,34, 5,20,81, 4,20,38, 4,20,53, 5,33,84, 4,20,52, 6,35,55, + 5,20,78, 6,35,63, 0, 0, 0, 4,20,41, 5,20,85, 5,20,86, 6,35,64, 6,35,62, + 0, 0, 0, 4,20,47, 5,20,82, 6,35,65, 6,35,66,15,23,73,15,23,75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,35,60, 6,35,61, 0, 0, 0, 6,54,79, 6,54,80, + 0, 0, 0, 6,54,81, + /* plane 2, page 103 */ + 2, 244, /* first, last */ + 5,20,83, 5,20,79, 5,20,80, 0, 0, 0, 6,45,35, 5,27,40, + 6,45,29, 0, 0, 0, 5,27,37, 6,45,43, 6,45,34, 4,26,28, 5,27,42, 6,45,47, + 6,45,28, 6,64,69, 5,27,39, 6,45,48, 6,54,85, 4,26,40, 5,27,44, 6,45,53, + 6,45,46, 6,45,44, 6,45,51, 5,27,38, 5,40,85, 0, 0, 0, 0, 0, 0, 6,45,30, + 6,45,39, 6,45,42,15,30,33,15,30,36,15,30,38,15,30,39,15,30,40,15,30,41, + 15,30,42,15,30,43, 6,45,36, 0, 0, 0, 6,45,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,27,67, 0, 0, 0, 6,45,45, 6,45,33, 0, 0, 0, + 0, 0, 0, 6,45,50, 6,45,31, 6,45,32, 0, 0, 0, 6,64,67, 6,64,71, 6,64,68, + 0, 0, 0,15,30,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,27,41, + 6,45,38, 5,20,77, 5,27,43, 5,27,46, 5,27,47, 6,45,49, 5,27,49, 6,45,37, + 6,64,72, 6,64,70, 5,33,93, 4,32, 1, 5,34, 6, 5,34, 1, 5,33,85, 5,33,89, + 5,34, 7, 6,54,93, 4,31,94, 6,54,82, 4,26,38, 5,34, 2, 5,33,88, 6,54,87, + 4,32, 4, 6,54,89, 4,32, 2, 6,55, 1, 6,54,83, 5,34, 9, 6,54,84, 6,54,88, + 5,34, 3, 6,54,92, 5,33,91, 5,33,90, 5,34, 5, 5,34, 4, 6,54,90, 5,33,86, + 6,54,94, 0, 0, 0,15,36,73,15,36,74,15,36,75,15,36,76,15,36,77,15,36,79, + 15,36,81, 4,32,11, 0, 0, 0, 0, 0, 0, 6,55, 3, 6,55, 2, 0, 0, 0,15,36,80, + 0, 0, 0, 7, 7,18, 0, 0, 0, 7, 7,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,54,91, 5,33,94, 5,33,92, + 0, 0, 0, 4,38,36, 5,40,91, 4,38,44, 4,38,35, 5,41, 3, 6,64,74, 5,40,90, + 4,38,42, 5,41, 4, 5,41, 1, 4,38,41, 5,40,87, 5,40,93, 4,38,26, 4,38,43, + 5,40,88, 6,64,81, 6,64,76, 5,40,86, 6,64,78, 5,40,89, 0, 0, 0, 6,64,77, + 5,40,92, 7,17,67, 5,41, 2, 0, 0, 0, 0, 0, 0, 4,38,40, 6,64,75,15,43,45, + 15,43,46,15,43,47,15,43,49,15,43,50,15,43,53,15,43,51, 0, 0, 0, 0, 0, 0, + 6,64,80, 6,61,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,33,87, 5,40,94, 0, 0, 0, 0, 0, 0, + 4,44,51, 5,47,91, 0, 0, 0, 7, 7,20, 4,44,55, 7, 7,27, 0, 0, 0, 5,47,90, + 4,44,57, 7,26,64, 7, 7,23, 5,47,92, 7, 7,21, 4,44,58, 7,26,62, 5,47,88, + 0, 0, 0, 7, 7,24,15,49,49,15,49,50,15,49,51,15,49,52, 0, 0, 0, 7, 7,22, + 7, 7,25, 0, 0, 0, 0, 0, 0, 7, 7,26, 7,26,63, + /* plane 2, page 104 */ + 0, 255, /* first, last */ + 6,64,73, 5,47,89,15,60,21, 7,17,76, 5,55,23, 5,55,18, 4,50,72, 4,50,61, + 5,55,17, 4,50,63, 7,17,71, 7,17,78, 5,55,21, 5,55,22, 4,50,69, 5,47,93, + 5,55,20, 7,17,69, 7,17,77, 5,55,25, 7,17,74, 5,73, 4, 4,50,64, 7,17,79, + 0, 0, 0,15,55,17,15,55,19, 0, 0, 0,15,55,18, 0, 0, 0, 7, 7,28, 7,17,72, + 7,17,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,17,68, 7,17,70, 0, 0, 0, 0, 0, 0, + 7,17,75, 7,33,90, 0, 0, 0, 7,40,89, 7,33,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,55,26, + 5,55,16, 5,55,27, 5,55,24, 5,55,19, 7,34, 1, 0, 0, 0, 5,61,58, 5,61,57, + 7,26,66, 4,56,14, 4,56,10, 4,56, 9, 0, 0, 0, 5,61,56, 5,61,54, 4,64,81, + 7,40,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,61,62, 7,26,69,15,60,14,15,60,15, + 15,60,17,15,60,18,15,60,19,15,60,20,15,60,22,15,60,16, 0, 0, 0, 7,23,94, + 7,26,67, 0, 0, 0, 0, 0, 0, 7,40,90, 7,40,93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,61,61, 7,26,65, 5,61,60, 5,61,55, 7,26,68, 7,40,94, 0, 0, 0, 0, 0, 0, + 4,60,85, 5,67,74, 5,67,71, 0, 0, 0, 5,67,73, 5,67,76, 7,33,92, 5,67,78, + 7,33,94, 5,67,75, 7,34, 3, 5,67,72, 5,77,10, 5,67,79,15,64,27,15,64,28, + 15,64,29,15,64,32,15,64,33, 7,33,93, 0, 0, 0, 7,34,77, 0, 0, 0, 0, 0, 0, + 4,60,83, 0, 0, 0, 4,64,82, 0, 0, 0, 7,41, 3, 7,41, 9, 5,73, 5, 5,73, 6, + 5,67,77, 7,41, 4, 0, 0, 0, 0, 0, 0,15,67,42, 7,41, 8, 7,41,10,15,67,44, + 15,67,45, 7,41, 2, 7,41, 6, 7,41, 5, 7,41, 7, 7,41, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,67,43, 7,41,11, 7,47,29, 5,77,14, + 5,77,13, 4,68,11, 4,68, 9, 5,77,11,15,69,86, 7,47,28, 0, 0, 0, 7,47,27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,71, 6, 7,52,47, 5,80,87, 7,60,32, 7,53,26, 7,60,31, 0, 0, 0, 4,73,17, + 4,73,15, 7,56,69, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,19, 7,60,33, 5,86,29, + 7,60,35, 7,60,37, 7,60,38, 5,86,28, 7,60,34, 4,74,78, 0, 0, 0, 7,60,39, + 7,60,40, 7,63,29, 5,87,93, 7,63,30, 0, 0, 0, 0, 0, 0, 5,89,28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,68,55, 5,90,79, 5,91,37, 6, 8,92, 4, 4,81,15,10,41, + 6,27,20,15,18,15, 0, 0, 0, 0, 0, 0, 6,45,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,45,55, 0, 0, 0,15,43,56,15,43,57,15,49,54, 6,64,83, 0, 0, 0, + 0, 0, 0,15,60,23, 7,34, 5,15,64,34, 5,80,89,15,72,20,15,73,71, 7,69,29, + 5,92,12, 6, 5,42, 6, 8,94, 4, 4,82, 6, 8,93, 6,13,80, 5,11,26, 6,20,18, + /* plane 2, page 105 */ + 0, 255, /* first, last */ + 15,13,16, 0, 0, 0, 5,15,82, 6,27,22, 4,15,41,15,18,16, 6,27,23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,27,21, 0, 0, 0, 6,35,70, 6,35,69,15,23,77,15,23,78, + 6,45,57, 0, 0, 0, 6,45,58, 0, 0, 0, 6,55, 4, 5,41, 5,15,43,58, 0, 0, 0, + 4,44,64, 4,44,65, 5,47,94,15,49,55, 0, 0, 0, 7, 7,29, 4,50,73, 5,55,28, + 0, 0, 0, 7,26,70, 5,61,64, 5,61,63,15,60,24,15,64,35, 5,73, 7, 4,64,85, + 5,77,17,15,67,46, 7,41,12, 5,77,15, 5,77,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,66,49, 6, 9, 1, 6,13,81, 6,13,82, 6,27,26,15,13,17, + 0, 0, 0, 6,27,24, 6,27,25, 5,20,87, 4,20,54, 0, 0, 0, 0, 0, 0, 6,45,59, + 0, 0, 0, 5,34,10, 5,41, 6, 0, 0, 0,15,43,59, 5,48, 1, 7, 7,30,15,49,56, + 5,48, 2, 7,17,81, 4,50,74, 5,55,29,15,55,20, 0, 0, 0, 4,56,15, 5,67,80, + 5,67,81, 4, 4,84, 6, 5,43, 6, 3,68, 6,13,83, 6,13,84, 0, 0, 0,15,13,18, + 4,15,43, 6,20,19, 0, 0, 0, 6,27,27, 0, 0, 0, 6,27,33, 6,27,29, 6,27,28, + 4,15,44, 6,27,31, 6,27,32, 0, 0, 0, 0, 0, 0, 6,35,73, 5,20,88, 6,27,30, + 6,35,72, 6,35,75, 0, 0, 0, 6,35,74, 0, 0, 0, 5,27,50, 6,45,60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,27,51, 5,41, 7, 6,55, 8, 6,55, 7, 6,55, 5, 6,64,84, + 6,64,90, 6,64,85, 6,64,86, 5,48, 3, 7, 7,31, 6,64,87, 6,64,91, 6,64,88, + 7, 7,32, 7, 7,33, 7, 7,34, 6,64,89, 5,41, 8, 5,48, 4, 5,48, 5, 7, 7,35, + 7, 7,36, 7,17,82, 7, 7,37, 0, 0, 0, 7, 7,38, 0, 0, 0,15,55,21, 7,17,84, + 7,17,83, 5,61,66, 0, 0, 0, 7,17,87, 0, 0, 0, 7,17,86, 7,17,85, 5,61,65, + 5,61,68, 7,26,71, 7,34, 8, 7,34, 7, 5,61,69, 4,60,87, 7,34, 6,15,64,36, + 15,64,37, 7,41,13, 5,67,83, 5,67,82, 7,41,14, 7,47,31, 0, 0, 0, 5,73, 8, + 0, 0, 0, 5,77,19, 5,77,20, 5,77,21, 7,47,30, 7,41,15,15,67,47, 5,73, 9, + 7,47,32, 7,47,33, 5,80,90,15,69,88,15,72,21,15,72,23, 7,56,70, 0, 0, 0, + 15,72,22, 7,56,71, 7,60,41, 5,87,94, 7,65,23, 5,89,29, 5,89,31, 5,89,30, + 15,76,74, 7,69,30, 7,69,31, 0, 0, 0, 7,70,51, 5,92,48,15, 5,11, 6,20,20, + 4,15,46, 4,15,45, 6,27,34, 0, 0, 0, 6,27,35, 0, 0, 0, 6,27,36, 5,15,83, + 5,15,84, 6,35,76, 0, 0, 0, 6,35,77, 6,33,93, 6,45,64, 6,45,63, 6,45,65, + 0, 0, 0, 0, 0, 0,15,30,48, 0, 0, 0, 0, 0, 0, 5,41, 9, 0, 0, 0, 4,38,45, + 5,37,51, 4,38,46, 6,55, 9,15,43,60, 6,64,92, 6,64,94, 6,64,93, 7, 7,39, + 15,49,57, 0, 0, 0, 7, 7,41, 7, 7,40, 0, 0, 0, 7,17,88, 5,55,30, 0, 0, 0, + 7,17,89, 7,26,72, 0, 0, 0,15,64,38, 5,67,84, 7,34,10, 7,34, 9, 0, 0, 0, + 5,77,22, 5,80,91, 0, 0, 0, 7,60,42, 5,86,30, 0, 0, 0, 5,48, 6, 5,48, 7, + /* plane 2, page 106 */ + 0, 255, /* first, last */ + 15,64,39, 7,47,34, 0, 0, 0, 7,60,43, 7,63,31, 7,65,25, 5,90,80, 5, 4,84, + 4, 7,81, 4, 7,80, 6,13,87, 6,13,86, 6,13,85, 5, 7,63, 4,11,17, 4,11,21, + 4,11,20, 0, 0, 0, 6,20,21, 6,20,23, 6,20,22, 6,27,42, 5,15,85, 6,27,41, + 6,27,37, 5,15,86, 4,15,50, 0, 0, 0, 4,15,49, 6,27,38, 0, 0, 0, 6,27,39, + 6,27,40, 5,20,90, 4,20,57, 4,20,59, 6,35,82, 0, 0, 0, 5,20,91, 6,35,78, + 6,35,79, 0, 0, 0,15,23,81, 0, 0, 0, 5,20,89,15,23,80,15,23,82, 5,27,52, + 6,45,69, 6,45,68, 4,20,58, 0, 0, 0, 4,26,50, 4,26,48, 4,26,49, 4,26,51, + 0, 0, 0, 0, 0, 0, 6,45,70, 0, 0, 0, 5,34,11, 6,55,12, 5,34,12, 6,55,10, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,36,82, 6,55,11, 0, 0, 0, 0, 0, 0, 6,55,13, + 6,55,14, 5,34,14, 6,65, 7, 5,41,13, 5,41,11, 4,38,50, 6,65, 2, 6,65, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,43,62,15,43,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,43,61, 6,65, 3, 0, 0, 0, 0, 0, 0, 5,41,10, 5,48,15, 4,44,71, 4,44,70, + 5,48,14, 5,48,11, 5,48,12, 5,48,16, 5,48, 8, 7, 7,47, 7, 7,45, 5,48,17, + 7, 7,42, 7, 7,44, 7, 7,46, 7, 7,43, 5,48,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,48, 9, 5,48,10, 0, 0, 0, 5,55,34, 5,55,31, 5,55,35, 7,17,92, + 5,55,32, 7,18, 1, 7,17,93, 7,18, 3, 5,55,33, 7,18, 2,15,55,22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,17,94, 7,17,91, 7,26,74, 4,56,17, + 5,61,76, 5,61,70, 5,61,73, 5,61,72, 0, 0, 0, 5,61,74, 5,61,75, 0, 0, 0, + 0, 0, 0, 4,60,89, 5,67,91, 7,34,12, 5,67,85, 5,67,90, 5,67,93, 5,67,89, + 4,60,90, 4,60,91, 5,67,86, 5,67,87, 5,67,92, 4,60,88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,34,13, 7,34,11, 0, 0, 0, 5,67,88, + 0, 0, 0, 7,41,16, 5,73,13, 5,73,12, 5,73,11, 5,73,10, 7,41,17,15,67,48, + 7,41,18, 5,77,23, 7,47,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,80,93, 5,80,92, + 7,52,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84, 1, 5,84, 2, 4,73,18, + 7,56,72, 7,52,48, 7,52,49, 4,74,79, 7,60,44, 7,65,27, 7,65,26, 7,66,50, + 5,90,81, 0, 0, 0, 4,78,47, 6,20,24,15,23,83, 0, 0, 0, 5,27,31,15,30,49, + 15,49,58,15,60,25, 7,47,36, 0, 0, 0, 5,20,92, 5,20,93, 0, 0, 0, 6,35,83, + 0, 0, 0, 5,20,94,15,30,50, 6,55,15, 6,55,16, 6,55,17, 6,65, 9, 0, 0, 0, + 15,43,64, 0, 0, 0, 6,65,10, 6,65, 8, 7, 7,49, 7, 7,48, 7, 7,50,15,49,59, + 15,49,60,15,49,61, 5,55,36, 5,55,37, 7,18, 5, 7,18, 4, 0, 0, 0, 5,77,25, + 5,77,24, 7,47,37,15,76,23, 5, 1,91, 6, 3,24, 0, 0, 0, 4, 3,14, 6, 5,48, + 6, 5,49, 6,13,88, 6, 5,46, 5, 3, 6, 6, 5,45,15, 2,79,15, 2,80,15, 2,78, + /* plane 2, page 107 */ + 0, 255, /* first, last */ + 6, 5,44, 4, 4,87, 4, 4,88, 4, 4,92, 6, 9, 2, 4, 4,90, 6, 9, 5, 6, 9, 3, + 6, 9, 4, 6, 9, 6, 0, 0, 0,15, 5,12,15, 5,13,15, 5,14,15, 5,15,15, 5,16, + 15, 5,17, 0, 0, 0, 0, 0, 0, 6,13,91, 4, 7,92, 4, 7,87, 4, 7,89, 5, 7,66, + 4, 7,93, 4, 7,88, 4, 7,85, 5, 7,64, 6,13,92, 5, 7,65, 4, 7,84, 6,27,43, + 6, 7,44, 6,14, 1, 5, 7,68, 4, 7,86, 6,13,90, 6,13,94, 6,27,45, 6,27,44, + 0, 0, 0,15, 8,55,15, 8,56,15, 8,57,15, 8,58,15, 8,59,15, 8,61,15, 8,62, + 15, 8,63,15, 8,64,15, 8,65,15, 8,66,15, 8,68, 6,13,89, 0, 0, 0, 4,11,27, + 4,11,23, 4,11,24, 4,11,25, 5,11,31, 6,20,35, 6,20,27, 4,11,28, 6,20,33, + 6,20,29, 5,11,29, 6,20,25, 6,20,32, 6,20,30, 6,20,34, 6,20,37, 6,20,38, + 5,11,27, 5,11,30, 0, 0, 0, 5,11,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,19,15,13,21,15,13,23,15,13,24, + 15,13,25,15,13,26,15,13,27,15,13,28,15,13,22, 6,19,30, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,20,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,13,20, 6,13,93, 0, 0, 0, 6,45,72,15,10,50, 5,15,92, 4,15,54, 4,15,55, + 4,15,66, 5,15,88, 5,15,90, 5,15,94, 4,15,52, 5,15,87, 5,16, 3, 4,15,59, + 5,16, 7, 4,15,56, 4,15,69, 5,16, 4, 4,15,64, 6,27,62, 6,27,63, 5,16, 5, + 6,27,65, 5,16, 2, 4,15,70, 6,27,57, 6,27,56, 6,45,71, 6,36, 2, 6,27,53, + 5,15,93, 6,27,52, 6,27,49, 6,27,47, 6,27,58, 6,27,60, 5,15,91, 6,27,55, + 5,16, 6, 5,15,89, 6,27,51, 6,27,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,27,61, 6,27,66,15,18,19,15,18,21,15,18,22,15,18,23,15,18,24,15,18,25, + 15,18,27,15,18,28,15,18,29,15,18,31,15,18,32,15,18,34,15,18,35,15,18,36, + 15,18,37,15,18,39,15,18,40,15,18,41,15,18,42,15,18,43, 6,27,48,15,18,38, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,18,44, 0, 0, 0,15,18,30, 0, 0, 0, 5,21,11, + 5,21,14, 5,21, 7, 4,20,80, 5,21,12, 4,20,65, 4,20,78, 4,20,72, 6,36,18, + 4,20,82, 4,20,85, 6,36, 6, 6,35,91, 6,36, 3, 5,21, 3, 6,35,89, 6,35,85, + 4,20,64, 5,21,18, 6,35,84, 6,36, 1, 6,36,24, 4,20,68, 6,36,22, 6,46,26, + 0, 0, 0, 6,36,20, 6,27,64, 6,45,88, 4,20,63, 5,21, 1, 4,20,75, 0, 0, 0, + 6,35,87, 6,36, 4, 5,21,16, 6,36,15, 6,36,21, 6,36,14, 6,36, 9, 5,21,15, + 6,36,19, 6,35,88, 6,36, 7, 5,21,17, 5,34,15, 6,55,18, 6,55,19, 0, 0, 0, + 6,36,16, 6,36,17, 6,35,94, 5,21, 2, 5,21,19, 6,36,10, 5,21, 9, 5,21,13, + 5,21, 6, 6,46,23, 6,36,25, 6,36,26, 6,35,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,35,90,15,23,84,15,23,85,15,23,86,15,23,87,15,23,89,15,23,91,15,23,92, + /* plane 2, page 108 */ + 0, 255, /* first, last */ + 15,23,93,15,23,94,15,24, 1,15,24, 2,15,24, 4,15,24, 5,15,24, 6,15,24, 7, + 15,24, 8,15,24, 9,15,24,10,15,24,11,15,24,12,15,24,13,15,24,14,15,24,15, + 15,24,16,15,24,17,15,24,18,15,24,19,15,24,20,15,24,21, 5,27,61, 6,35,93, + 5,21, 8, 6,36, 5, 0, 0, 0,15,23,90, 0, 0, 0, 6,36,13, 6,36,23, 0, 0, 0, + 0, 0, 0,15,24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,21, 5, + 0, 0, 0, 0, 0, 0, 5,27,53, 4,26,53, 5,27,73, 5,27,74, 5,27,66, 5,27,76, + 5,27,77, 5,27,67, 4,26,61, 6,45,90, 6,45,82, 6,46,11, 6,45,80, 6,45,75, + 5,27,63, 5,27,71, 5,27,72, 6,45,91, 6,45,89, 5,27,62, 5,27,78, 5,27,75, + 4,20,74, 4,26,55, 4,26,58, 4,26,56, 4,26,66, 5,27,58, 0, 0, 0, 4,26,52, + 6,45,73, 6,46,21, 4,26,67, 6,45,74, 5,27,68, 6,45,92, 6,46,22, 6,45,93, + 6,46,15, 6,46,16, 4,26,75, 6,46, 6, 4,26,73, 6,46, 3, 5,27,60, 6,46, 8, + 6,45,85, 6,46,13, 6,45,84, 6,46, 2, 6,46,17, 0, 0, 0, 6,46, 9, 5,27,69, + 6,65,18, 6,65,13, 6,65,14, 5,27,55, 6,46, 4, 6,45,79, 6,46,14, 5,41,14, + 6,45,83, 6,46,12, 6,45,87, 6,46, 5, 6,45,77, 6,46,10, 4,26,74, 5,27,64, + 5,27,59, 0, 0, 0, 6,45,86, 6,46,24, 6,65,11, 5,27,70, 6,65,15, 5,27,65, + 6,46,20, 6,65,17, 6,65,16, 6,45,76, 6,45,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,44,91, 5,27,56, 6,45,78, 6,45,81, 6,46,19, + 6,46,25,15,30,51,15,30,53,15,30,54,15,30,56,15,30,58,15,30,59,15,30,60, + 15,30,61,15,30,62,15,30,63,15,30,64,15,30,65,15,30,67,15,30,68,15,30,69, + 15,30,72,15,30,73,15,30,74,15,30,77,15,30,79,15,30,80,15,30,81,15,30,82, + 15,30,84,15,30,85,15,30,86,15,30,87,15,30,88,15,30,89,15,30,90,15,30,91, + 15,30,92,15,30,93,15,30,94, 0, 0, 0, 6,65,12, 0, 0, 0, 0, 0, 0, 5,27,57, + 6,46, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,30,66,15,30,52, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,30,78, 0, 0, 0, 0, 0, 0, + 15,30,83, 4,32,35, 6,55,20, 6,55,38, 5,34,46, 6,55,26, 6,55,27, 5,34,20, + 4,32,29, 6,55,41, 6,55,58, 4,32,32, 4,32,34, 5,34,37, 6,55,62, 5,34,26, + 4,32,23, 4,32,20, 6,55,33, 6,55,67, 5,34,19, 6,55,49, 6,55,53, 5,34,35, + 6,55,42, 4,32,24, 4,32,27, 5,34,22, 6,55,35, 4,32,28, 4,32,37, 5,34,33, + 4,32,45, 5,34,47, 4,32,30, 5,34,38, 6,55,61, 5,34,31, 4,32,19, 4,32,17, + 6,55,69, 4,32,31, 6,55,34, 5,34,40, 5,34,34, 5,34,24, 5,34,30, 0, 0, 0, + 6,55,24, 6,55,51, 6,55,47, 6,55,32, 6,55,71, 5,34,29, 6,55,25, 6,55,68, + 6,55,23, 5,34,48, 6,55,46, 6,55,37, 6,55,28, 5,34,41, 5,34,45, 5,34,27, + /* plane 2, page 109 */ + 0, 255, /* first, last */ + 5,34,39, 6,55,50, 6,55,64, 0, 0, 0, 0, 0, 0, 6,55,60, 0, 0, 0, 6,55,40, + 6,55,54, 5,34,25, 4,32,25, 6,55,55, 5,34,16, 5,34,32, 5,34,18, 5,34,42, + 6,55,31, 4,32,21, 4,32,43, 6,55,44, 5,34,21, 5,34,17, 6,55,39, 6,55,56, + 7, 7,51, 6,55,65, 5,34,28, 6,55,36, 6,55,52, 6,55,22, 6,55,66, 6,55,70, + 6,55,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,32,46, 5,34,36, 5,34,43, 6,55,21, 6,55,30, + 6,55,43, 6,55,45, 6,55,59, 6,55,63,15,36,83,15,36,85,15,36,86,15,36,87, + 15,36,88,15,36,89,15,36,90,15,36,91,15,36,92,15,36,93,15,36,94,15,37, 1, + 15,37, 2,15,37, 3,15,37, 4,15,37, 5,15,37, 6,15,37, 7,15,37, 8,15,37, 9, + 15,37,10,15,37,11,15,37,12,15,37,14,15,37,15,15,37,16,15,37,17, 0, 0, 0, + 5,34,44, 4,32,42, 6,55,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,46,18,15,30,55, 5,34,23, + 0, 0, 0, 4,38,70, 6,65,64, 5,41,37, 6,65,19, 6,65,35, 5,41,43, 4,38,67, + 6,65,54, 4,38,54, 6,65,37, 4,38,57, 6,65,28, 5,41,33, 6,65,42, 4,38,53, + 6,65,50, 5,41,29, 6,65,32, 6,65,57, 5,41,41, 5,41,38, 6,65,44, 5,41,26, + 4,38,58, 6,65,25, 6,65,53, 6,65,45, 6,65,31, 5,41,36, 5,41,25, 5,41,16, + 4,38,66, 6,65,33, 4,38,62, 0, 0, 0, 6,65,22, 4,38,61, 4,38,75, 4,38,59, + 5,41,31, 7, 7,56, 6,65,23, 5,41,18, 5,41,23, 5,41,17, 5,41,40, 5,48,27, + 4,38,63, 5,41,35, 6,65,24, 4,38,72, 6,65,48, 5,41,24, 6,65,55, 6,65,38, + 6,65,27, 5,41,32, 5,41,22, 7,18, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,41,15, 5,41,20, 6,65,39, 6,65,41, 6,65,43, 6,65,46, 6,65,58, 6,65,61, + 6,65,62,15,43,65,15,43,66,15,43,67,15,43,70,15,43,72,15,43,73,15,43,74, + 15,43,75,15,43,76,15,43,77,15,43,78,15,43,79,15,43,80,15,43,81,15,43,82, + 15,43,83,15,43,84,15,43,85,15,43,86,15,43,88,15,43,89,15,43,90,15,43,92, + 15,43,93,15,43,94,15,44, 1,15,44, 2,15,44, 3,15,44, 5,15,44, 6,15,44, 7, + 15,44, 8,15,44, 9,15,44,10, 6,65,40, 5,41,34, 6,65,51, 0, 0, 0, 6,65,49, + 6,55,72, 5,41,42, 6,65,60, 6,65,63, 0, 0, 0, 6,65,59, 6,65,26, 6,65,21, + 6,65,34, 6,65,29, 0, 0, 0, 6,55,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,43,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,43,71, 6,65,52, 4,38,74, 4,38,52, 5,41,21, 5,41,45, 7,18, 6, 5,41,19, + 6,65,65, 5,41,39, 5,41,44, 5,55,38,15,43,91, 5,41,30, 0, 0, 0, 7, 7,76, + /* plane 2, page 110 */ + 0, 255, /* first, last */ + 4,44,94, 5,48,18, 4,44,73, 4,44,92, 7, 8, 1, 0, 0, 0, 5,48,21, 7, 8, 4, + 7, 7,87, 7, 7,60, 5,48,25, 7, 7,73, 7, 7,88, 7, 7,89, 7, 7,74, 7, 7,83, + 5,48,26, 7, 7,79, 4,44,85, 5,48,29, 5,48,34, 7, 7,64, 7, 8, 2, 5,48,32, + 5,48,31, 5,55,39, 5,48,33, 5,48,43, 7, 7,75, 7, 7,86, 7, 7,57, 7, 7,82, + 7, 7,69, 5,48,40, 5,48,23, 4,44,91, 7, 7,52, 0, 0, 0, 7, 7,59, 7, 7,68, + 7, 7,67, 7, 7,71, 5,48,19, 7, 7,70, 7, 7,93, 7, 7,62, 5,48,30, 7, 7,54, + 5,48,20, 5,48,42, 7, 7,92, 7, 7,66, 7, 7,61, 7, 7,78, 4,44,86, 5,48,41, + 5,48,37, 7, 7,84, 5,55,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,45, 2, 5,48,35, + 7, 7,53, 7, 7,58, 7, 7,63, 7, 7,80, 7, 7,81, 7, 8, 3,15,49,62,15,49,63, + 15,49,64,15,49,66,15,49,67,15,49,70,15,49,71,15,49,72,15,49,73,15,49,74, + 15,49,76,15,49,77,15,49,78,15,49,79,15,49,80,15,49,82,15,49,85,15,49,87, + 0, 0, 0, 4,45, 3, 7, 7,90, 5,48,36, 7, 7,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7,85, 0, 0, 0, 7, 7,72, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,49,81, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,49,65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,49,75, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,48,22, 7, 7,55, 5,48,39, + 5,48,28, 6,65,20, 7,34,14, 0, 0, 0,15,44, 4, 0, 0, 0, 7,18,49, 4,51,13, + 7,18,18, 4,51,10, 4,51,20, 7,18,51, 5,55,41, 4,51,11, 5,55,61, 7,18,35, + 5,55,52, 4,50,81, 4,51,16, 5,55,49, 5,55,59, 7,18,28, 4,50,85, 5,55,58, + 5,55,43, 5,55,63, 7,18,19, 5,55,65, 4,51,15, 7,18, 8, 5,55,45, 5,55,47, + 7,18,44, 5,55,53, 5,55,66, 7,18,29, 7,18,27, 5,48,44, 4,50,80, 5,55,40, + 5,55,62, 7,18,37, 7,18,43, 7,18,33, 5,55,68, 5,55,64, 7, 8, 5, 7, 7,91, + 7,18,50, 5,61,90, 4,51, 6, 7,18,14, 4,51, 9, 7,18,22, 5,55,51, 4,51, 8, + 4,50,84, 5,48,24, 7,18,15, 5,55,50, 7,18,24, 5,55,54, 5,55,44, 7,18,13, + 7,18,55, 7,18,46, 4,51,14, 5,55,60, 7,18,10, 4,50,88, 7,18,25, 7,34,15, + 7,18,11, 7,18,53, 4,51,18, 7,18,34, 7,18,21, 7,18,31, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,55,30,15,55,31,15,55,32,15,55,33, 5,55,42, 5,55,48, 5,55,55, 7,18,12, + 7,18,20, 7,18,23, 7,18,30, 7,18,32, 7,18,39, 7,18,41, 7,18,45, 7,18,47, + 7,18,52, 7,18,57, 7,18,58,15,55,23,15,55,24,15,55,25,15,55,26,15,55,27, + 15,55,28,15,55,29,15,55,34,15,55,35,15,55,36,15,55,41,15,55,44,15,55,45, + 15,55,46,15,55,47,15,55,48,15,55,49,15,55,50,15,55,51,15,55,52,15,55,54, + /* plane 2, page 111 */ + 0, 255, /* first, last */ + 15,55,55,15,55,56,15,55,57,15,55,58,15,55,59,15,55,60, 7,18,17,15,55,37, + 0, 0, 0, 0, 0, 0, 4,50,93, 7,18,26, 7,18,56, 7,18,48, 5,55,69, 5,55,46, + 7,18,16, 7,18, 9, 7,18,40, 0, 0, 0, 0, 0, 0,15,55,42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,18,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,55,67, 5,55,57, 0, 0, 0, 7,18,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,26,86, 4,56,26, 4,56,31, 7,26,78, 7,34,27, 7,26,88, 4,56,40, + 4,56,41, 5,55,70, 5,61,85, 5,61,93, 5,61,83, 7,27,11, 7,27,15, 5,61,79, + 4,56,42, 4,56,23, 7,26,91, 4,56,37, 5,62, 1, 7,26,92, 7,27, 3, 7,27,19, + 5,61,94, 5,62, 5, 7,27,17, 5,62, 2, 5,61,78, 5,61,88, 7,26,94, 5,61,92, + 7,26,83, 7,27, 4, 7,27,10, 5,61,91, 4,56,43, 0, 0, 0, 5,61,77, 5,62, 3, + 4,56,33, 7,27,16, 5,61,87, 4,56,38, 5,61,81, 5,62, 4, 7,27, 5, 5,61,86, + 7,26,80, 7,26,85, 7,34,25, 7,26,75, 7,26,76, 7,27,21, 7,26,93, 4,56,39, + 7,27,14, 7,26,82, 7,26,87, 7,41,20, 7,26,81, 7,27, 2, 7,27, 9, 7,18,42, + 7,26,89, 7,27, 1, 7,27,23, 5,61,84, 5,48,45, 0, 0, 0, 4,56,35, 0, 0, 0, + 0, 0, 0, 7,41,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,61,80, 5,61,82, 7,26,77, + 7,27, 7, 7,27, 8, 7,27,12, 7,27,20,15,60,26,15,60,27,15,60,28,15,60,29, + 15,60,30,15,60,32,15,60,33,15,60,34,15,60,35,15,60,36,15,60,37,15,60,38, + 15,60,39,15,60,41,15,60,42,15,60,43,15,60,44,15,60,47,15,60,48, 4,56,25, + 7,26,90, 0, 0, 0, 7,27,13, 0, 0, 0, 7,27,22, 0, 0, 0, 0, 0, 0, 7,26,84, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,40, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,31, + 0, 0, 0,15,60,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,55,53, + 0, 0, 0, 0, 0, 0,15,67,59, 0, 0, 0, 5,68,12, 7,34,43, 4,61, 4, 7,34,44, + 5,68, 2, 4,61, 5, 5,62, 6, 5,68,15, 7,34,40, 5,68, 5, 5,67,94, 7,34,16, + 5,68, 1, 5,68, 9, 5,68,22, 5,68,25, 7,34,22, 5,68,19, 7,34,38, 4,61, 2, + 5,62, 7, 5,68,24, 5,68, 6, 5,68,16, 7,34,29, 5,68, 4, 5,68,14, 0, 0, 0, + 7,34,45, 4,61,16, 5,68,17, 4,61,14, 4,61, 6, 4,61,10, 5,68,20, 5,68,18, + 7,34,30, 7,47,38, 7,34,26, 7,34,23, 4,61,15, 7,41,36, 5,68,11, 7,34,19, + 7,34,37, 7,34,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,61,13, 7,27, 6, 7,34,18, 7,34,20, 7,34,21, 7,34,31, 7,34,34, 7,34,36, + 7,34,42, 7,34,46, 7,34,47,15,64,40,15,64,41,15,64,42,15,64,43,15,64,44, + 15,64,47,15,64,48,15,64,49,15,64,50,15,64,51,15,64,52, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,64,53,15,64,54,15,64,55,15,64,56,15,64,57,15,64,58,15,64,59, + /* plane 2, page 112 */ + 0, 255, /* first, last */ + 15,64,60,15,64,62,15,64,63, 0, 0, 0, 4,61, 7, 7,34,32, 5,68, 7, 7,34,33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,41,19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,68,21, 5,68,10, 4,61, 9, 7,34,39, + 5,68, 3, 5,68, 8, 5,68,23, 7,34,35, 0, 0, 0, 7,34,17, 0, 0, 0, 0, 0, 0, + 5,73,30, 5,73,15, 7,47,61, 5,73,16, 5,73,26, 5,73,22, 4,64,93, 4,64,89, + 5,73,31, 5,73,23, 7,41,24, 7,41,37, 5,73,27, 5,73,21, 4,64,92, 5,73,14, + 5,77,34, 7,41,35, 5,73,24, 7,41,38, 5,73,25, 7,41,33, 0, 0, 0, 7,41,52, + 7,41,49, 7,41,28, 5,73,19, 5,73,29, 7,41,43, 7,41,46, 7,41,30, 7,41,29, + 7,41,34, 7,41,39, 7,47,52, 7,41,45, 7,41,25, 7,41,44, 7,41,42, 7,47,39, + 5,73,20, 5,73,18, 4,64,86, 5,73,28, 7,41,41, 7,41,32, 0, 0, 0, 7,41,31, + 0, 0, 0, 7,41,22, 0, 0, 0, 0, 0, 0, 7,41,23, 7,41,26, 7,41,40, 7,41,48, + 7,41,50,15,67,49,15,67,50,15,67,52,15,67,53,15,67,54,15,67,55,15,67,56, + 15,67,57,15,67,58,15,67,60,15,67,61,15,67,62,15,67,63,15,67,64,15,67,65, + 15,67,66,15,67,67,15,67,68,15,67,69,15,67,70,15,67,71,15,67,72,15,67,73, + 7,41,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,62, 7,47,53, 7,47,46, 5,77,32, 5,77,39, + 7,47,65, 5,77,33, 5,77,36, 4,68,25, 7,47,56, 5,77,38, 4,68,21, 0, 0, 0, + 5,77,31, 5,80,94, 7,47,63, 5,77,27, 7,47,49, 7,47,48, 7,47,44, 5,77,30, + 5,77,37, 7,47,45, 4,68,17, 7,47,71, 5,77,28, 7,47,43, 7,47,51, 7,47,66, + 7,47,59, 7,41,27, 7,47,69, 5,77,35, 4,68,14, 7,47,57, 5,77,29, 7,47,70, + 0, 0, 0, 7,47,58, 0, 0, 0, 5,73,17, 7,52,71, 7,56,73, 0, 0, 0, 7,47,41, + 5,77,26, 5,77,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,47,50, 7,47,54, 7,47,55, 7,47,60, 7,47,67, 7,47,68,15,69,89,15,69,90, + 15,69,91,15,69,92,15,69,93,15,69,94,15,70, 1,15,70, 2,15,70, 3,15,70, 4, + 15,70, 5,15,70, 6,15,70, 7,15,70, 8,15,70, 9,15,70,10,15,70,11,15,70,12, + 7,47,42, 7,47,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,64, 7,52,67, + 4,73,21, 5,81, 8, 7,52,70, 7,52,63, 5,81, 4, 4,71,12, 4,71,10, 7,52,57, + 4,71,14, 5,81, 2, 7,52,68, 5,81, 5, 7,52,69, 4,71, 9, 5,77,41, 5,81, 7, + 7,52,59, 7,52,51, 5,81, 6, 7,52,66, 7,52,55, 7,52,53, 7,52,64, 4,71,13, + 5,81, 3, 5,81, 9, 5,81,10, 7,52,52, 7,52,60, 0, 0, 0, 7,47,47, 7,52,58, + 7,56,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,81, 1, 7,52,54, 7,52,61, 7,52,65,15,72,24,15,72,26,15,72,27, + /* plane 2, page 113 */ + 0, 255, /* first, last */ + 15,72,28,15,72,29,15,72,30,15,72,31,15,72,33,15,72,34,15,72,35,15,72,36, + 0, 0, 0,15,72,32, 0, 0, 0, 7,52,56, 0, 0, 0, 5,84, 4, 4,73,22, 5,84, 5, + 5,84, 7, 5,84, 8, 7,56,80, 5,84, 9, 4,73,27, 4,73,26, 7,56,87, 7,56,85, + 7,56,77, 7,60,51, 5,84, 3, 5,84, 6, 7,56,79, 4,73,24, 4,73,25, 7,56,78, + 4,73,20, 7,56,83, 7,56,75, 7,56,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,56,74, 7,56,76, 7,56,81, 7,56,84,15,73,72,15,73,75,15,73,76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60,47, 7,60,58, + 4,74,85, 5,86,32, 4,74,84, 5,86,31, 4,74,81, 4,74,83, 4,74,82, 4,74,80, + 5,86,35, 7,60,49, 7,60,59, 5,86,34, 5,89,32, 7,60,53, 5,86,36, 7,60,55, + 7,60,56, 7,60,45, 7,60,48, 5,86,33, 7,60,54, 7,60,52, 7,60,50, 7,60,57, + 15,74,77,15,74,78,15,74,79, 7,60,46,15,73,74, 0, 0, 0, 5,88, 3, 5,88, 2, + 5,88, 1, 7,63,32, 5,88, 4, 7,63,34, 7,63,38, 7,63,35, 7,63,36, 7,63,41, + 7,63,33, 7,63,39, 5,89,34, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,64,15,75,65, + 15,75,67, 7,63,37, 7,63,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,35, 7,66,53, + 5,89,33, 7,66,51, 7,65,30, 7,65,29, 7,65,28, 0, 0, 0,15,76,24,15,76,25, + 7,65,31, 0, 0, 0, 5,90,21, 5,90,22, 7,66,57, 7,66,55, 7,66,54, 0, 0, 0, + 0, 0, 0, 7,66,56, 0, 0, 0, 7,66,52, 0, 0, 0,15,76,49, 7,66,40, 4,77,90, + 7,67,72, 5,90,82, 4,77,63, 4,77,92, 0, 0, 0,15,76,75,15,76,77, 5,91,38, + 4,78,21, 7,68,56, 7,68,57, 5,92,41, 7,69,32, 5,91,70, 7,69,64, 7,69,86, + 5,92,47, 5,92,29, 7,69,63,15, 8,69, 4,11,31, 6,20,41, 6,20,40, 0, 0, 0, + 15,18,46, 0, 0, 0, 0, 0, 0, 5,21,22, 5,21,20, 4,20,87, 4,20,86, 6,36,33, + 4,20,88, 6,36,34, 6,36,32, 6,36,31, 6,27,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,46,28, 5,27,81, 6,46,29,15,31, 2,15,31, 3,15,31, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,34,53, 5,34,49, 5,34,50, 6,55,75, 6,55,74, 6,55,73, + 0, 0, 0, 5,41,47, 6,65,66, 6,65,70, 4,38,79, 6,65,69, 6,65,71, 6,65,67, + 6,65,68, 5,41,48,15,44,11,15,44,12, 0, 0, 0, 4,38,78, 0, 0, 0, 0, 0, 0, + 7, 8, 9, 7, 8, 7, 7,18,63, 5,48,46, 7, 8, 6, 7, 8, 8, 0, 0, 0,15,49,89, + 7, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,55,74, 5,55,75, 5,55,72, 5,55,73, + 4,51,21, 5,55,71, 7,18,64, 7,18,60, 7,18,61, 4,51,24, 4,51,23, 5,55,77, + 7,18,62,15,55,61,15,55,62,15,55,63, 5,55,76, 7,18,59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,56,44, 7,27,25,15,60,49,15,60,50,15,60,51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,34,49, 5,68,29, 4,61,19, 7,34,48, 4,61,17, + /* plane 2, page 114 */ + 0, 243, /* first, last */ + 7,34,50, 5,68,28, 0, 0, 0,15,64,64, 0, 0, 0, 0, 0, 0, 7,41,54, 7,41,53, + 4,64,94, 7,41,55, 0, 0, 0, 7,47,73, 0, 0, 0, 5,77,42, 7,47,74, 0, 0, 0, + 7,44, 6, 5,81,12, 7,47,72, 5,81,11, 0, 0, 0, 5,80,45, 7,52,74, 7,52,73, + 5,84,10, 0, 0, 0, 7,60, 4, 0, 0, 0, 4,78,24, 5, 4,85, 6, 9, 9, 4, 8, 2, + 6,14, 5, 0, 0, 0, 0, 0, 0,15, 8,70,15, 8,71,15, 8,73, 0, 0, 0,15, 8,74, + 4,11,35, 6,20,43, 4,11,32, 4,11,34, 6,20,42, 5,11,32, 6,20,45, 6,20,44, + 6,20,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,29,15,13,31,15,13,34,15,13,35, + 15,13,36,15,13,33, 4,11,33, 5,16,16, 6,27,72, 5,16,12, 5,16,19, 6,27,71, + 5,16,13, 5,16,18, 6,27,70, 4,15,76, 4,15,74, 4,15,78, 5,16,14, 6,27,80, + 5,16, 9, 6,27,75, 5,16,17, 5,16, 8, 6,27,74, 5,16,15, 5,16,20, 6,27,78, + 6,27,68, 5,16,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,27,69,15,18,47, 6,27,76, + 6,27,77, 0, 0, 0, 0, 0, 0, 5,16,10, 6,27,79, 0, 0, 0, 5,21,23, 4,20,93, + 6,36,37, 5,21,24, 5,21,25, 5,21,26, 5,21,32, 4,21, 2,15,24,29, 4,21, 3, + 6,36,44, 5,21,28, 4,21, 1, 5,21,29, 6,36,38, 5,21,33, 6,36,41, 4,21, 4, + 4,20,94, 0, 0, 0, 0, 0, 0, 6,36,39, 6,36,42, 6,36,36, 6,36,43, 6,36,45, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,24,22,15,24,23,15,24,24,15,24,25,15,24,27, + 15,24,28,15,24,30,15,24,31,15,24,32, 0, 0, 0, 5,21,30, 6,36,46, 4,21, 5, + 6,36,35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,21,31, 5,21,27, 5,27,83, + 6,46,32,15,31, 8, 4,26,83, 6,46,40, 5,28, 8, 5,27,88, 5,27,85, 5,27,87, + 5,27,90, 5,28, 3, 5,27,93, 6,46,41, 6,46,30, 6,46,35, 5,27,86, 5,28, 7, + 6,46,34, 6,46,43, 6,46,42, 5,27,92, 6,46,31, 5,27,89, 5,28, 1, 6,46,45, + 6,46,36, 6,46,37, 0, 0, 0, 6,55,78, 5,28, 5, 5,27,94, 6,55,88, 5,28, 4, + 6,46,44, 6,46,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,28, 2, 5,27,82, + 6,46,33,15,31, 5,15,31, 6,15,31, 7,15,31, 9, 0, 0, 0, 0, 0, 0, 4,26,87, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,55,80, 6,55,79, 4,32,58, 4,32,60, 6,55,84, 4,32,52, 5,34,56, 5,34,59, + 5,34,54, 4,32,49, 4,32,51, 5,34,60, 5,34,62, 5,34,58, 5,34,55, 4,32,62, + 4,32,48, 6,55,82, 0, 0, 0, 6,55,83, 6,55,76, 6,55,77, 6,65,72, 6,55,81, + 6,55,85, 5,34,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,37,18, + 15,37,19,15,37,20,15,37,21,15,37,22,15,37,23,15,37,24,15,37,25, 6,55,86, + 7,41,75, 0, 0, 0, 0, 0, 0, 6,55,87, + /* plane 2, page 115 */ + 1, 255, /* first, last */ + 6,55,89, 0, 0, 0, 5,41,49, 5,41,54, 5,41,59, 5,41,55, 5,41,60, + 4,39, 1, 5,41,53, 4,38,93, 6,66, 3, 5,41,63, 4,38,87, 5,41,57, 4,38,84, + 6,65,86, 6,65,74, 6,65,85, 4,39, 2, 5,41,62, 6,65,75, 6,65,81, 5,41,52, + 6,65,92, 5,41,61, 5,41,56, 6,65,91, 6,66, 1, 5,41,64, 0, 0, 0, 6,65,84, + 6,65,93, 6,65,77, 5,41,65, 5,41,66, 6,65,82, 0, 0, 0, 6,66, 2, 5,41,58, + 6,65,76, 6,65,89, 6,65,90, 6,65,80, 5,41,50, 6,65,78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,41,51, 6,65,83,15,44,13,15,44,14, + 15,44,16,15,44,17,15,44,18, 6,65,88, 0, 0, 0, 4,32,56, 0, 0, 0, 6,65,94, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,65,79, 4,45,13, 7, 8,35, 5,48,51, 4,45,14, 4,45,11, 7, 8,24, + 4,45,20, 5,48,63, 7, 8,23, 7, 8,12, 5,48,49, 7, 8,11, 7, 8,21, 7, 8,31, + 5,48,55, 4,45,18, 4,45,10, 7, 8,32, 7, 8,20, 5,48,54, 7, 8,27, 7, 8,17, + 7, 8,30, 5,55,78, 4,45,12, 4,45, 9, 5,48,60, 5,48,58, 5,48,48, 5,48,57, + 5,48,56, 7, 8,10, 5,48,59, 4,38,90, 5,48,50, 5,48,62, 5,48,61, 4,45,21, + 7, 8,38, 7, 8,16, 7, 8,13, 7, 8,36, 7, 8,25, 7, 8,37, 7, 8,28, 7, 8,15, + 6,65,87, 7, 8,22, 7, 8,29, 5,48,52, 4,45, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,48,47,15,49,90,15,49,91,15,49,94,15,50, 1,15,50, 2,15,50, 3,15,50, 5, + 15,50, 8,15,50, 9,15,50,10,15,50,11, 7, 8,19, 0, 0, 0, 0, 0, 0, 7, 8,33, + 7, 8,26, 0, 0, 0,15,50, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,18,15,44,15, + 0, 0, 0, 5,55,80, 4,51,37, 5,55,86, 5,55,85, 4,51,26, 5,55,84, 0, 0, 0, + 5,55,81, 7,18,78, 7,18,93, 5,55,87, 4,51,40, 5,55,91, 4,51,41, 4,51,32, + 4,51,34, 5,55,92, 7,18,77, 4,51,27, 7,18,71, 4,51,31, 7,18,92, 5,55,89, + 5,55,79, 5,56, 1, 5,55,82, 7,27,26, 5,55,88, 7,18,73, 4,51,38, 5,55,90, + 7,18,80, 7,19, 2, 5,55,83, 7,18,68, 5,55,94, 7,18,84, 4,51,39, 5,48,64, + 7,18,75, 7,18,69, 5,55,93, 7,18,86, 4,51,35, 7,18,91, 7,19, 4, 7,18,66, + 7,18,87, 7,18,67, 7,18,88, 7,18,79, 7,18,94, 7,18,82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,18,72, 7,19, 3,15,55,64,15,55,65, + 15,55,67,15,55,68,15,55,69,15,55,70, 7,18,89, 0, 0, 0, 7,18,74, 0, 0, 0, + 7,18,90, 7,18,81, 7,18,70, 0, 0, 0, 7,18,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,56,57, 5,62, 9, 5,62,12, 4,56,53, 7,27,50, 7,27,36, 4,56,64, 4,56,60, + /* plane 2, page 116 */ + 0, 255, /* first, last */ + 7,27,40, 7,27,34, 7,27,53, 0, 0, 0, 4,56,62, 7,27,38, 7, 8,39, 4,56,48, + 5,62,17, 7,27,48, 7,27,31, 4,56,61, 7,27,47, 5,62,11, 5,62,15, 7,27,51, + 4,56,58, 7,27,39, 7,27,33, 5,62,19, 4,56,51, 7,27,32, 4,56,49, 7,27,30, + 7,27,52, 5,62,10, 7,27,28, 7,27,27, 7,27,41, 4,56,59, 5,62,13, 5,62,14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,37,15,60,52,15,60,53,15,60,54,15,60,55, + 15,60,56,15,60,57,15,60,58,15,60,60, 0, 0, 0, 7,27,35, 7,27,43, 7,27,46, + 0, 0, 0, 7,27,49, 0, 0, 0, 7,27,29, 5,62, 8, 7,27,42, 7,27,44, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,62,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,61,29, 4,61,23, 7,34,53, 7,34,65, + 7,34,56, 7,34,72, 5,68,35, 5,68,36, 5,62,20, 4,61,24, 5,68,48, 7,34,57, + 4,61,22, 5,68,37, 4,61,21, 4,61,26, 5,68,31, 5,68,34, 5,68,45, 4,61,20, + 5,68,42, 7,34,54, 5,68,30, 0, 0, 0, 5,68,33, 5,68,43, 7,34,55, 7,34,60, + 7,34,59, 5,68,32, 7,34,79, 7,34,75, 5,68,47, 7,34,78, 5,68,41, 5,68,44, + 7,34,73, 5,68,38, 7,34,76, 5,68,39, 7,34,69, 7,34,66, 7,34,61, 7,34,67, + 7,34,52, 7,34,58, 7,34,51, 7,34,62, 7,34,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,34,70,15,64,66,15,64,68,15,64,69,15,64,70,15,64,72,15,64,73,15,64,74, + 0, 0, 0, 7,34,68, 4,61,28, 7,34,71,15,64,71, 0, 0, 0,15,64,65, 0, 0, 0, + 5,68,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,65, 8, 7,41,74, + 7,41,57, 7,41,64, 7,41,76, 7,41,58, 7,41,73, 7,41,77, 4,65, 3, 5,73,34, + 5,73,32, 0, 0, 0, 7,41,66, 7,41,71, 7,41,69, 5,73,36, 7,41,61, 7,41,72, + 0, 0, 0, 7,41,68, 7,41,70, 7,47,75, 7,41,65, 7,41,78, 7,41,79, 7,41,67, + 5,73,37, 7,41,60, 7,41,63, 7,41,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,67,75,15,67,76,15,67,77,15,67,79,15,67,80,15,67,81, + 15,67,82,15,67,83,15,67,84,15,67,85, 7,41,59, 4,65, 2, 4,65, 7, 7,41,62, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,34,80, 7,47,85, 7,47,90, 5,77,45, 7,47,76, 0, 0, 0, 4,68,34, 5,77,44, + 5,77,49, 7,47,88, 7,47,80, 5,77,48, 7,47,84, 5,77,50, 5,77,51, 7,47,83, + 5,77,46, 7,47,82, 7,47,87, 7,47,81, 7,47,77, 5,77,47, 7,47,79, 7,52,87, + 0, 0, 0, 7,47,78, 7,47,91,15,70,13,15,70,14,15,70,15,15,70,16,15,70,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,86, 4,71,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4,71,20, 7,52,75, 7,52,80, 5,81,15, 7,52,85, 7,52,78, 7,52,81, + 5,81,14, 7,52,83, 5,81,13, 5,81,16, 7,52,76, 4,71,19, 7,52,79, 4,71,21, + /* plane 2, page 117 */ + 0, 255, /* first, last */ + 4,71,17, 7,52,82, 5,81,18, 7,52,88, 7,47,89, 0, 0, 0, 7,52,84, 4,71,18, + 7,52,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,81,17, 5,81,19, + 7,52,86,15,72,37,15,72,38,15,72,39,15,72,40,15,72,41, 0, 0, 0, 0, 0, 0, + 7,52,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,14, 4,73,28, 5,84,12, + 5,84,11, 7,57, 3, 7,56,92, 5,84,13, 5,84,17, 5,84,16, 7,56,90, 5,84,19, + 5,84,21, 0, 0, 0, 5,84,18, 7,56,89, 4,73,29, 0, 0, 0, 7,57, 6, 7,57, 8, + 7,57, 7, 7,56,94, 7,57, 1, 5,84,20, 5,84,22, 7,57, 4, 7,57, 9, 5,84,15, + 0, 0, 0, 0, 0, 0, 7,56,93, 0, 0, 0, 0, 0, 0, 7,56,91, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,73,77,15,73,78, 5,86,38, 4,74,86, 4,74,87, 7,60,61, 5,86,39, + 4,74,89, 7,60,63, 7,60,60, 5,86,40, 7,60,66, 5,86,37, 7,63,42, 7,60,64, + 4,74,90, 7,60,65, 5,86,42, 0, 0, 0, 7,57, 2, 5,86,41,15,74,80,15,74,81, + 15,74,82, 0, 0, 0, 0, 0, 0, 5,88,12, 7,63,43, 4,75,94, 5,88,11, 5,88, 9, + 7,63,44, 5,88, 6, 4,76, 2, 7,63,45, 5,88,10, 5,88, 8, 4,76, 4, 5,88,13, + 5,88, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,89,36, 4,76,94, + 5,89,40, 5,89,42, 4,76, 1, 7,65,32, 5,89,38, 7,65,36, 7,65,35, 7,65,37, + 5,89,39, 5,89,41, 7,65,33, 0, 0, 0, 5,89,37, 7,66,61, 7,66,59, 7,66,62, + 7,66,60, 0, 0, 0, 7,66,63, 0, 0, 0, 7,67,78, 7,67,76, 5,90,83, 7,67,75, + 7,67,79, 0, 0, 0, 7,66,58, 7,67,73, 7,67,81, 7,67,74, 7,67,80, 7,67,77, + 0, 0, 0, 7,68,60, 4,78,26, 7,68,61, 5,91,39, 5,91,40, 7,68,58, 7,68,59, + 5,91,71, 7,69,33, 7,69,34, 5,91,72, 4,78,48, 7,69,66, 7,69,65,15,77,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,70,11, 0, 0, 0, 0, 0, 0, 5, 7,69, + 6,14, 7, 6,14, 6, 4,11,36, 6,27,82, 5,16,21, 6,27,85, 0, 0, 0, 6,27,84, + 0, 0, 0, 0, 0, 0,15,24,33, 6,46,46, 6,46,48, 5,34,63, 6,55,92, 6,55,90, + 6,55,93, 6,55,91, 5,41,69, 5,41,67, 5,41,68, 6,66, 6, 6,66, 4, 0, 0, 0, + 7, 8,40, 5,48,65, 7, 8,41, 7, 8,42, 6,66, 5, 0, 0, 0, 5,56, 3, 5,56, 4, + 5,56, 2, 7,19, 5, 7,19, 6, 5,62,23, 5,62,22,15,60,61, 4,61,30, 4,61,31, + 7,34,81, 7,34,83, 4,61,32, 0, 0, 0, 7,34,82, 5,73,38, 5,77,52, 7,47,92, + 7,52,90, 7,57,11, 7,57,10, 7,63,46, 7,69,67, 4, 8, 3, 6,14, 8, 4, 8, 4, + 0, 0, 0, 6,20,47, 6,20,48, 5,11,33, 0, 0, 0,15,13,37, 5,16,22, 6,27,87, + 6,27,86, 5,16,23, 6,36,47, 5,28, 9, 6,46,51, 6,46,50,15,31,10,15,31,11, + 0, 0, 0, 6,46,49, 6,56, 3, 6,56, 1, 4,32,63, 6,56, 2, 6,55,94,15,37,26, + 4,39, 4, 5,48,66, 6,66, 7, 6,66, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,56,65, + /* plane 2, page 118 */ + 0, 255, /* first, last */ + 7,27,54,15,60,62, 4,61,33, 7,34,84, 7,41,80, 7,52,91, 7,60,68, 0, 0, 0, + 5, 7,70, 6,14, 9, 6,14,10, 6,14,11, 0, 0, 0, 5,11,35, 6,20,49, 4,11,37, + 4,11,39, 5,11,37, 6,20,51, 5,11,36, 0, 0, 0, 0, 0, 0,15, 8,75, 0, 0, 0, + 0, 0, 0, 6,20,50, 5,11,34, 0, 0, 0, 5,11,38, 6,27,93, 5,16,28, 4,15,81, + 6,28, 1, 6,28, 5, 5,16,31, 6,28, 6, 6,28, 7, 4,15,80, 6,27,89, 5,16,32, + 6,27,91, 5,16,24, 6,28, 2, 6,27,92, 6,28, 3, 6,27,94, 5,16,27, 6,27,90, + 6,27,88, 0, 0, 0, 0, 0, 0, 5,16,26,15,18,48, 6,28, 4, 6,28, 8, 6,28, 9, + 0, 0, 0, 0, 0, 0,15,13,40,15,13,41,15,18,50, 4,21, 8, 5,28,18, 0, 0, 0, + 4,21,11, 4,26,92, 5,21,38, 4,21, 9, 6,36,56, 5,21,39, 5,21,42, 5,21,36, + 5,21,37, 5,21,35, 6,36,57, 6,36,58, 5,21,34, 6,36,51, 6,36,53, 6,36,52, + 6,36,49, 6,36,48, 6,36,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,36,50,15,13,38,15,24,37, 5,21,40, 6,36,54, 5,21,41, 5,28,17, 6,46,59, + 6,46,57, 5,28,14, 6,46,55, 5,28,15, 5,28,19, 4,26,94, 0, 0, 0, 6,46,56, + 6,46,52, 4,26,93, 6,46,54, 5,28,16, 5,28,13, 5,28,11, 5,34,68, 5,28,10, + 0, 0, 0, 0, 0, 0,15,24,36,15,31,14, 0, 0, 0, 6,46,53, 0, 0, 0, 6,46,58, + 0, 0, 0, 6,46,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,28,12,15,24,35, + 5,34,74, 5,34,66, 5,34,70, 4,32,69, 5,34,75, 5,34,67, 5,34,71, 4,32,67, + 5,34,69, 5,34,73, 6,56,15, 4,32,68, 6,56,10, 6,56, 8, 6,56,16, 5,34,72, + 5,34,64, 6,56, 4, 6,56, 7, 0, 0, 0, 0, 0, 0, 6,56,13,15,31,12,15,31,13, + 15,31,15,15,31,16,15,37,27, 6,56, 6, 6,56,17, 6,56, 5, 6,56, 9, 0, 0, 0, + 0, 0, 0, 5,34,65, 0, 0, 0,15,37,30, 4,39,16, 4,39,12, 6,66,13, 6,66,19, + 4,39, 9, 5,41,70, 5,41,73, 4,39, 8, 5,41,72, 5,28,20, 6,66,20, 5,41,74, + 6,66,11, 6,66, 9, 6,66,10, 6,66,18, 6,66,17, 5,41,71, 6,66,15, 5,41,75, + 6,66,16, 6,66,12, 4,39,19, 0, 0, 0, 6,66,21, 6,66,14,15,44,20,15,44,22, + 15,44,23, 0, 0, 0, 0, 0, 0, 4,39,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,37,28,15,37,31, 5,48,70, + 7, 8,52, 4,45,33, 5,48,73, 7, 8,55, 4,39,18, 7, 8,54, 5,48,69, 4,45,24, + 7, 8,53, 7,19, 8, 5,48,71, 7, 8,58, 7, 8,43, 4,45,37, 4,45,27, 4,45,29, + 7, 8,51, 4,45,36, 4,45,35, 5,48,67, 7, 8,56, 7, 8,50, 7, 8,44, 5,48,68, + 7, 8,47, 5,48,72, 7, 8,49, 7, 8,48, 7, 8,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,44,21,15,50,13, 7, 8,46, 7, 8,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,56,12, 5,56,11, 7,19,11, 5,56, 7, 5,56,10, 7,19, 7, 4,51,49, 7,19, 9, + /* plane 2, page 119 */ + 0, 255, /* first, last */ + 4,51,52, 7,27,66, 5,56, 9, 5,56, 8, 7,19,10, 4,51,46, 7,19,12, 7,19,15, + 4,51,45, 0, 0, 0, 5,56, 5, 7,19,16, 0, 0, 0, 5,56, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,19,14,15,50,12, 0, 0, 0, 0, 0, 0, 7,19,13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,62,30, 5,62,31, 7,27,55, + 5,62,27, 7,27,61, 7,27,68, 4,56,70, 5,62,24, 5,62,25, 5,62,29, 5,62,28, + 0, 0, 0, 7,27,63, 0, 0, 0, 7,27,59, 7,27,67, 7,34,91, 7,27,60, 7, 8,59, + 7,27,62, 7,27,64, 5,62,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,56, + 7,27,58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,62,26,15,55,71,15,55,72, + 15,55,73,15,55,74, 7,34,85, 4,61,37, 7,34,92, 7,34,94, 5,68,59, 5,68,55, + 7,34,93, 4,61,43, 5,68,52, 5,68,53, 5,68,63, 4,61,45, 0, 0, 0, 4,61,34, + 7,34,90, 5,68,51, 4,61,39, 4,61,44, 5,68,61, 7,34,89, 7,34,87, 5,68,49, + 4,61,35, 5,62,34, 5,68,50, 7,34,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,35, 3, 7,34,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,68,57, 5,68,58, 5,62,33, 5,68,60, 5,68,62, 5,68,56, + 15,60,64, 7,41,86, 5,73,41, 5,73,42, 4,65, 9, 7,41,91, 7,41,92, 5,73,39, + 5,73,40, 7,41,82, 7,41,83, 7,41,85, 7,41,89, 7,41,90, 7,41,84, 7,41,88, + 4,65,11, 7,41,87, 7,35, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,64,75,15,64,76, + 15,67,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,47,93, 5,77,56, 7,48, 6, 5,77,59, + 5,81,20, 0, 0, 0, 5,77,53, 4,68,37, 7,48, 3, 5,77,54, 7,48, 2, 7,52,92, + 0, 0, 0, 7,47,94, 0, 0, 0, 5,77,57, 7,41,81, 5,77,58, 5,77,60, 7,48, 4, + 0, 0, 0,15,70,20, 7,48, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,77,61, 7,53, 2, + 7,53, 4, 5,81,22, 4,71,22, 7,53, 6, 7,53, 5, 5,81,21, 7,52,94, 7,53, 1, + 4,71,23, 7,53, 3, 7,57,17, 7,52,93, 0, 0, 0,15,70,19, 4,73,33, 7,57,14, + 4,73,32, 4,73,31, 5,84,23, 7,57,12, 7,57,13, 7,57,16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,57,15, 5,88,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73,79, + 7,63,49, 7,63,48, 7,63,47, 0, 0, 0, 5,89,43, 7,65,40, 7,65,39, 7,65,38, + 7,66,65, 5,90,23, 7,66,66, 0, 0, 0, 7,66,64, 7,68,63, 7,67,83, 7,67,82, + 7,68,62, 5,91,94, 7,69,68, 7,70,12, 0, 0, 0, 0, 0, 0, 5,92,43, 7,70,45, + 0, 0, 0, 5, 4,86, 0, 0, 0, 6,14,12, 0, 0, 0, 0, 0, 0, 4,11,40, 5,16,33, + 4,15,84, 6,28,10, 6,36,59,15,24,38, 0, 0, 0,15,31,17,15,31,18, 6,56,18, + 0, 0, 0, 4,39,20, 6,66,22, 6,66,23, 6,66,24, 0, 0, 0, 0, 0, 0,15,44,24, + 15,44,25, 7, 8,60,15,44,26,15,50,16, 7,19,17, 7,19,18,15,50,15, 7,27,69, + /* plane 2, page 120 */ + 0, 254, /* first, last */ + 15,64,77,15,64,78, 5,73,43, 7,48, 7, 7,53, 7, 0, 0, 0, 5, 7,71, 6,14,13, + 0, 0, 0, 4,15,87, 0, 0, 0, 5,16,34,15,18,51, 0, 0, 0, 5,21,45, 5,21,46, + 6,36,60, 6,36,61, 5,21,48, 5,21,43, 0, 0, 0,15,24,39,15,24,41,15,24,43, + 4,21,18, 4,21,22, 5,21,44, 5,21,47, 6,46,63, 4,27, 5, 6,46,66, 6,46,65, + 5,28,22, 6,46,62, 4,27, 4, 6,46,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,56,22, 5,34,77, 5,34,79, 5,34,78, 0, 0, 0, 6,56,19, 6,56,23, 0, 0, 0, + 5,34,80,15,37,32,15,37,33,15,37,34, 0, 0, 0, 6,56,21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,66,25, 5,41,81, 5,41,78, 5,41,82, 4,39,23, + 6,66,26, 0, 0, 0, 0, 0, 0,15,44,27,15,44,28, 5,41,79, 6,66,27, 0, 0, 0, + 5,41,80, 0, 0, 0, 0, 0, 0, 4,45,41, 7, 8,63, 5,48,76, 4,45,43, 5,48,75, + 7, 8,67, 5,48,77, 6,56,20, 7, 8,66, 0, 0, 0, 5,48,74, 5,48,78,15,50,17, + 7, 8,64, 0, 0, 0, 0, 0, 0, 7, 8,62, 0, 0, 0, 7, 8,61, 0, 0, 0, 0, 0, 0, + 7, 8,65, 5,56,16, 5,56,15, 5,56,14, 4,51,55, 7,19,20, 5,56,20, 7,27,71, + 4,51,56, 4,51,62, 4,51,61, 5,56,17, 5,56,21, 7,19,19, 5,56,13, 5,56,19, + 0, 0, 0,15,55,75,15,55,76,15,55,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,70, + 5,68,64, 5,62,37, 5,62,36, 7,27,74, 0, 0, 0, 7,27,73, 7,27,75, 7,27,72, + 15,60,65,15,60,66, 5,68,66, 4,61,49, 4,61,47, 7,35, 4, 5,68,65, 0, 0, 0, + 15,64,79,15,64,80,15,64,81, 0, 0, 0, 0, 0, 0, 7,35, 5, 7,41,93, 7,41,94, + 0, 0, 0, 0, 0, 0, 5,77,63, 7,48, 9, 7,48, 8,15,70,21, 5,77,62, 0, 0, 0, + 15,72,43,15,72,44, 7,53, 8, 0, 0, 0, 4,73,35, 5,84,25, 4,73,34, 0, 0, 0, + 15,73,80,15,73,81, 5,88,15, 7,63,51,15,75,68, 7,63,50, 5,89,45, 5,89,44, + 7,65,41, 0, 0, 0, 0, 0, 0, 4,77, 1, 0, 0, 0, 5,90,84, 4,78,27, 5,92,36, + 0, 0, 0, 7,70,52, 6,14,14, 6,14,15, 6,20,52, 5,11,40, 0, 0, 0, 4,15,88, + 6,28,12, 4,15,89, 6,28,11, 6,36,71, 4,21,27, 5,21,51, 5,21,50, 6,36,63, + 6,36,67, 4,21,23, 6,36,68, 5,21,49, 6,36,64,15,24,45,15,24,46,15,24,47, + 4,21,28, 6,36,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,36,62, 6,36,66, 6,36,69, + 6,36,65, 5,28,23, 4,27, 6, 6,46,68, 6,46,71, 5,28,24, 6,46,67, 6,46,70, + 6,46,73, 6,46,69, 4,27, 7, 4,27, 8, 6,46,72, 0, 0, 0,15,31,19, 0, 0, 0, + 0, 0, 0, 5,34,83, 5,34,81, 5,34,82, 0, 0, 0, 6,56,24, 0, 0, 0, 0, 0, 0, + 6,66,30, 5,41,85, 4,39,25, 6,66,32, 5,41,83, 5,41,84, 6,66,29, 6,66,33, + 6,66,28, 6,66,31, 0, 0, 0, 0, 0, 0, 7, 8,70, 5,48,85, 7, 8,71, 5,48,84, + 5,48,80, 5,48,79, 4,45,48, 4,45,50, 4,45,45, 7, 8,73, 4,45,52, + /* plane 2, page 121 */ + 3, 255, /* first, last */ + 5,48,82, 7, 8,72, 7, 8,74, 5,48,81, 7, 8,68, + 7, 8,69, 5,48,83, 0, 0, 0, 7,19,24, 7,19,23, 4,51,63, 5,56,22, 4,51,67, + 5,56,25, 5,56,27, 4,51,64, 7,19,22, 7,19,21, 5,56,23, 5,56,24, 5,56,26, + 7,19,25, 0, 0, 0, 0, 0, 0, 5,62,38, 7,27,77, 7,27,83, 7,27,76, 5,62,42, + 5,62,41, 7,27,78, 7,19,26, 5,62,40, 0, 0, 0, 0, 0, 0, 7,27,79, 7,27,80, + 0, 0, 0, 7,27,81, 4,56,76, 7,27,84, 7,27,82, 0, 0, 0, 5,62,39, 7,35, 7, + 0, 0, 0, 7,35, 8, 4,61,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,35, 6, 7,35, 9, + 0, 0, 0, 0, 0, 0, 4,65,21, 5,73,44, 4,65,18, 4,65,19, 7,42, 1, 7,42, 2, + 7,42, 3, 7,42, 4, 4,65,22, 0, 0, 0, 7,48,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,81,23, 0, 0, 0, 7,53, 9, 0, 0, 0, 5,84,26, 4,73,36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,60,69, 0, 0, 0, 5,88,16, 0, 0, 0, 7,66,67, 4,77,64, 7,68,64, + 7,68,65, 5,91,73, 7,69,35, 5, 3, 7, 5, 3, 8, 6,14,16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,28,19, 4,16, 1, 4,15,91, 4,15,90, 4,16, 2, 5,16,35, 0, 0, 0, + 6,28,16, 6,28,17, 6,28,15, 6,28,18, 0, 0, 0, 6,28,14, 4,21,32, 6,36,74, + 6,36,83, 4,21,30, 0, 0, 0, 6,36,79, 5,21,60, 5,21,57, 0, 0, 0, 6,36,81, + 4,21,34, 5,21,52, 4,21,38, 6,36,89, 5,21,53, 6,36,87, 6,36,75, 6,36,88, + 5,21,56, 6,36,84, 6,36,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,36,78, 6,36,90, + 15,24,48,15,24,49,15,24,51,15,24,52,15,24,53,15,24,54, 0, 0, 0, 6,36,82, + 0, 0, 0, 0, 0, 0, 6,36,73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,36,72, + 0, 0, 0, 6,36,86, 6,36,76, 5,21,58, 6,46,84, 4,27,18, 4,27,14, 5,28,27, + 6,46,79, 6,46,78, 6,46,81, 6,46,74, 4,27,13, 6,46,88, 4,27,24, 4,27,25, + 5,28,28, 6,46,77, 6,46,86, 6,46,80, 6,46,87, 4,27,23, 5,28,25, 5,28,26, + 15,31,20,15,31,21,15,31,22,15,31,23,15,31,24,15,31,25,15,31,26,15,31,28, + 0, 0, 0, 0, 0, 0, 6,46,82, 6,46,85, 0, 0, 0, 0, 0, 0, 6,46,76, 0, 0, 0, + 0, 0, 0, 6,46,89, 6,46,83, 0, 0, 0, 5,34,85, 4,32,72, 4,32,74, 0, 0, 0, + 6,56,38, 5,34,86, 5,28,29, 5,34,89, 4,32,81, 4,32,80, 6,56,32, 6,56,43, + 6,56,29, 6,56,41, 4,32,73, 4,32,75, 5,34,92, 5,34,84, 4,32,83, 6,56,35, + 6,56,28, 6,56,39, 6,56,34, 6,56,31, 4,32,82, 5,34,90, 6,56,40, 5,34,88, + 5,34,87, 6,56,36, 0, 0, 0, 0, 0, 0,15,37,35,15,37,37,15,37,38, 6,56,42, + 5,34,91, 0, 0, 0, 6,56,25, 6,56,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,32,79, 6,56,26, 6,56,37, 6,56,30, 6,66,46, 4,39,31, 5,41,90, 4,39,27, + 5,41,88, 5,41,91, 4,39,30, 4,39,40, 6,66,34, 6,66,44, 4,39,33, 6,66,51, + /* plane 2, page 122 */ + 0, 255, /* first, last */ + 4,39,36, 6,66,47, 4,39,39, 6,66,38, 5,41,89, 6,66,49, 6,66,37, 4,39,41, + 6,66,48, 6,66,36, 5,41,86, 5,41,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,44,29, + 15,44,30,15,44,31,15,44,32,15,44,34,15,44,35,15,44,36,15,44,37, 0, 0, 0, + 0, 0, 0, 6,66,40, 4,39,43, 6,66,42, 5,34,93, 6,66,43, 6,66,45, 0, 0, 0, + 6,66,35, 0, 0, 0, 0, 0, 0, 6,66,50, 6,66,41, 0, 0, 0, 7, 9, 1, 5,49,10, + 7, 8,75, 5,48,90, 5,49, 2, 7, 8,81, 7, 8,84, 7, 9, 2, 7, 8,92, 7, 8,80, + 5,49, 7, 4,45,55, 5,49, 9, 5,49, 3, 5,48,91, 5,48,94, 7, 8,88, 5,49, 4, + 4,45,61, 5,49, 6, 4,45,66, 7, 9, 4, 7, 8,87, 7, 8,79, 5,48,88, 5,48,92, + 7, 8,93, 0, 0, 0, 7, 8,77, 5,49, 5, 5,48,93, 5,48,87, 5,48,89, 5,48,86, + 0, 0, 0,15,50,18,15,50,19,15,50,20,15,50,21,15,50,23,15,50,25,15,50,26, + 7, 8,86, 7, 8,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,76, 0, 0, 0, + 7, 8,82,15,50,24, 5,49, 1, 7, 8,91, 7, 8,78, 5,49, 8, 7, 9, 3, 7, 8,94, + 7, 8,90, 7, 8,83, 7,19,38, 5,56,32, 4,51,81, 7,19,50, 4,51,72, 4,51,69, + 4,51,76, 7,19,41, 7,19,49, 7,19,35, 5,56,29, 7,19,34, 5,56,28, 7,19,28, + 0, 0, 0, 4,51,80, 4,51,71, 7,19,37, 4,51,79, 7,19,29, 4,51,78, 7,19,39, + 7,19,46, 4,51,70, 7,19,48, 7,19,30, 4,51,73, 7,19,27, 7,19,51, 7,19,32, + 7,19,31, 7,19,40, 7,19,42, 5,56,31, 7,19,44, 4,51,77, 7,19,36, 5,56,30, + 15,55,78,15,55,79,15,55,80,15,55,81,15,55,82,15,55,83,15,55,84,15,55,85, + 15,55,86,15,55,87,15,55,88, 0, 0, 0, 7,19,52, 0, 0, 0, 7,19,33, 7,19,43, + 4,56,78, 5,62,50, 5,62,49, 7,27,93, 4,56,79, 5,62,52, 4,56,81, 7,27,89, + 4,56,77, 5,62,45, 5,62,51, 5,62,46, 7,27,86, 7,28, 5, 4,56,82, 7,35,10, + 5,62,47, 7,28, 1, 7,27,87, 5,62,54, 7,28, 7, 7,27,92, 7,27,88, 5,62,48, + 4,56,84, 7,27,91, 7,27,94, 7,28, 2, 7,28, 3, 4,56,83, 5,62,43, 7,28, 6, + 0, 0, 0, 5,62,44, 7,28, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,27,85, + 15,60,67,15,60,68,15,60,69,15,60,70,15,60,71,15,60,72,15,60,73,15,60,74, + 15,60,75, 0, 0, 0, 0, 0, 0, 7,28, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28, 9, + 7,27,90, 0, 0, 0, 4,61,62, 4,61,54, 7,35,23, 4,61,56, 7,35,21, 5,68,72, + 7,35,26, 7,35,11, 4,61,64, 5,68,70, 5,56,33, 4,61,57, 5,68,71, 7,35,24, + 7,35,18, 5,68,68, 4,61,51, 7,35,27, 4,61,53, 5,68,69, 4,61,61, 7,35,25, + 7,35,15, 7,35,19, 7,42,10, 7,35,16, 4,61,60, 7,35,20, 7,35,17, 7,35,28, + 7,35,12, 0, 0, 0, 7,35,13, 0, 0, 0, 0, 0, 0,15,64,82,15,64,85, 0, 0, 0, + 7,35,22, 0, 0, 0, 4,61,63, 0, 0, 0, 0, 0, 0, 7,35,14, 5,73,45, 5,73,47, + /* plane 2, page 123 */ + 0, 255, /* first, last */ + 7,42,15, 0, 0, 0, 4,65,30, 7,42,12, 7,42,14, 4,65,35, 4,65,25, 5,73,48, + 4,65,33, 7,42,20, 4,65,34, 5,73,46, 4,65,31, 7,42, 6, 7,42, 9, 7,35,29, + 7,42, 8, 7,42,21, 7,48,19, 7,42,19, 0, 0, 0, 4,65,28, 5,77,64, 7,42, 7, + 0, 0, 0,15,67,88,15,67,89,15,67,90, 4,65,36, 7,42,11, 0, 0, 0, 7,48,21, + 7,42,16, 7,42,17, 7,42,13, 7,42,18, 4,65,24,15,64,84, 0, 0, 0, 4,68,42, + 4,68,43, 5,77,66, 5,77,65, 7,48,13, 5,77,67, 7,48,15, 4,68,41, 7,48,11, + 5,73,51, 7,48,18, 7,48,14, 7,48,20, 7,48,22, 7,48,12, 7,48,16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,22,15,70,23,15,70,24,15,70,25, 7,48,24, + 7,48,23, 7,48,25, 7,53,10, 4,71,34, 7,53,20, 7,53,13, 7,53,19, 0, 0, 0, + 4,71,24, 7,53,14, 5,81,29, 7,53,12, 7,53,15, 4,71,28, 5,81,26, 5,81,25, + 4,71,35, 7,57,27, 7,57,21, 4,71,26, 5,81,28, 5,81,27, 7,53,17, 0, 0, 0, + 7,53,11, 7,53,16, 5,81,24, 7,53,21, 5,84,27, 5,84,29, 5,84,32, 5,86,43, + 4,73,39, 7,57,25, 4,73,42, 5,84,31, 4,73,41, 5,84,30, 0, 0, 0, 7,57,23, + 7,57,32, 7,53,22, 5,84,28, 7,57,22, 7,57,26, 7,57,31, 4,73,38, 7,57,30, + 15,73,82,15,73,83,15,73,84, 0, 0, 0, 7,57,28, 0, 0, 0, 0, 0, 0, 7,57,29, + 4,74,93, 4,74,94, 7,60,70, 5,86,46, 5,86,45, 5,88,17, 7,60,72, 7,60,73, + 7,60,74,15,74,84,15,74,85, 7,60,71, 7,57,34, 7,63,55, 7,63,56, 7,63,53, + 4,76, 7, 7,63,54, 7,63,58,15,75,69,15,75,70, 0, 0, 0, 7,63,52, 7,63,57, + 7,63,59, 4,77, 3, 7,65,43, 5,89,46, 7,65,44,15,76,26,15,76,27, 0, 0, 0, + 7,65,42, 5,90,85, 7,66,69, 7,66,68, 0, 0, 0, 5,90,25, 4,77,94, 7,67,84, + 0, 0, 0, 0, 0, 0, 7,68,66, 4,78,28, 0, 0, 0, 7,68,36, 0, 0, 0, 0, 0, 0, + 7,69,36, 7,70,48, 0, 0, 0, 5, 4,87, 4,16, 4, 5,16,36, 5,16,37, 4,21,40, + 4,21,41, 4,21,39, 6,36,91, 4,27,26, 0, 0, 0, 5,34,94, 5,35, 1, 6,56,44, + 4,39,45, 0, 0, 0, 5,49,12, 4,45,67, 5,49,13, 5,49,11, 0, 0, 0, 0, 0, 0, + 5,56,34, 7,19,54, 7,19,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,10, 0, 0, 0, + 0, 0, 0, 5,62,55, 7,35,30, 7,42,22, 7,42,25, 5,73,52, 7,42,23, 5,73,53, + 7,42,24, 0, 0, 0, 0, 0, 0, 7,48,26, 7,42,26, 5,81,30, 0, 0, 0, 0, 0, 0, + 5,90,86, 7,69,87, 6,20,53, 6,28,21, 6,28,20, 0, 0, 0, 0, 0, 0,15,24,55, + 4,27,27, 5,28,30, 6,46,91,15,31,29, 0, 0, 0, 5,35, 2, 4,32,85, 6,59,63, + 0, 0, 0, 4,39,48, 6,66,52, 4,39,49, 0, 0, 0, 7, 9, 8, 7, 9, 7, 7, 9, 5, + 5,49,15, 5,49,14, 0, 0, 0, 7, 9, 6,15,50,27, 0, 0, 0, 0, 0, 0, 5,56,35, + 4,51,84, 7,19,55, 5,56,36, 7,12,54, 5,62,58, 7,28,13, 5,62,56, 7,28,12, + /* plane 2, page 124 */ + 0, 254, /* first, last */ + 5,62,57, 7,28,11, 0, 0, 0, 5,68,73, 4,61,67, 7,35,32, 4,61,66, 5,62,59, + 0, 0, 0, 7,42,28, 5,73,55, 7,42,29, 7,35,33, 7,35,34, 0, 0, 0, 0, 0, 0, + 5,73,54, 5,77,70, 5,77,69, 5,77,71,15,70,26, 5,77,68,15,67,91, 0, 0, 0, + 5,81,31, 5,84,33, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,74,86,15,74,87, 0, 0, 0, + 5,88,18, 5,89,47, 0, 0, 0, 5,90,87, 0, 0, 0, 7,69,37, 0, 0, 0, 6, 5,52, + 5, 3, 9, 5,11,42, 5,16,40, 5,16,39, 6,28,23, 6,28,22, 6,36,94, 6,36,92, + 5,21,65, 0, 0, 0, 6,37, 1, 0, 0, 0, 6,36,93, 4,27,28, 6,46,92, 4,27,29, + 5,28,32, 5,28,31, 6,46,94, 5,28,33, 6,47, 3, 6,46,93,15,18,53, 4,32,87, + 5,35, 5, 4,32,86, 6,56,46, 6,56,47, 5,35, 7, 5,35, 3, 5,35, 6, 6,56,45, + 6,47, 2, 5,35, 4, 5,35, 8, 0, 0, 0, 0, 0, 0, 6,66,53, 6,66,54, 4,39,51, + 4,39,50, 6,66,57, 5,41,93, 5,41,92, 6,66,59, 6,66,58, 6,66,55, 6,66,56, + 5,49,18, 4,45,70, 7, 9, 9, 7, 9,11, 5,49,17, 5,49,19, 7, 9,13, 7, 9,12, + 5,41,94, 5,49,16, 7, 9,10, 5,42, 1, 7, 9,14,15,50,28, 0, 0, 0, 0, 0, 0, + 5,56,39, 5,56,40, 5,56,38, 7,19,57, 4,51,86, 7,19,58, 7,19,60, 7,19,59, + 5,56,37, 7,19,56, 5,62,61, 5,62,62, 5,62,63, 5,62,60, 7,28,16, 7,28,14, + 7,28,15, 0, 0, 0, 0, 0, 0, 4,61,69, 5,68,74, 0, 0, 0, 5,68,75, 7,35,35, + 7,35,36, 7,35,37, 4,65,39, 5,73,56, 5,56,41, 7,42,30, 4,65,41, 5,77,75, + 5,77,72, 7,48,27, 5,77,74, 5,77,73, 4,71,38, 5,81,32, 7,53,23, 7,53,24, + 7,57,35, 7,60,76, 7,57,36, 7,57,37, 7,60,77, 7,60,78, 0, 0, 0, 5,84,34, + 7,63,60, 0, 0, 0, 7,65,45, 7,63,61, 5,89,48, 5,90,26, 7,69,38, 7,70,35, + 15, 8,76, 5,11,43, 6,28,24,15,18,54, 5,21,68, 5,21,67, 4,21,47, 5,21,66, + 4,21,46, 6,37, 5, 6,37, 3, 0, 0, 0, 6,47, 5, 5,28,34, 5,28,38, 5,28,36, + 5,28,40, 5,28,37, 6,47, 8, 6,47, 6, 5,28,39, 5,28,35, 6,47, 7, 6,47, 4, + 0, 0, 0,15,31,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,32,92, 4,32,93, + 4,32,90, 6,56,50, 5,35,11, 6,56,49, 5,35,10, 4,32,89, 4,32,91, 6,56,51, + 15,37,39, 5,35, 9, 6,66,65, 6,66,60, 5,42, 5, 5,42, 3, 5,42, 2, 6,66,63, + 5,42, 4, 6,66,62, 6,66,64,15,44,40, 6,66,61, 0, 0, 0, 6,66,66,15,44,41, + 0, 0, 0, 5,49,21, 5,49,20, 4,45,73, 5,49,23, 5,49,22, 5,49,24, 4,45,74, + 7, 9,15, 7, 9,16, 4,45,75, 0, 0, 0, 0, 0, 0, 7, 9,17, 7,19,68, 5,56,43, + 7,19,62, 7,19,64, 7,19,65, 4,51,88, 5,56,42, 7,19,66, 5,56,44, 7,19,63, + 0, 0, 0,15,55,90, 7,19,61, 7,19,67, 0, 0, 0, 4,56,89, 5,62,67, 7,28,17, + 5,62,66, 4,56,88, 5,62,64, 5,62,68, 5,62,65, 0, 0, 0,15,60,76, + /* plane 2, page 125 */ + 1, 255, /* first, last */ + 7,35,38, 4,61,71, 7,35,39, 4,61,70, 5,68,76, 7,42,31, 5,68,77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,73,59, 7,42,32, 5,73,58, 7,42,35, + 7,48,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,42,34, 5,73,57, 5,77,77, 5,77,76, + 7,48,28, 5,81,34, 5,77,78, 0, 0, 0, 0, 0, 0, 5,81,33, 7,53,25, 7,57,38, + 7,60,80, 7,60,79, 0, 0, 0, 5,90,88, 5,11,44, 4,11,42, 6,20,54, 0, 0, 0, + 15,13,42, 0, 0, 0, 4,16, 6, 6,28,25, 5,16,41, 5,16,42, 0, 0, 0, 0, 0, 0, + 15,18,55,15,18,56, 6,28,26, 6,37,10, 0, 0, 0, 6,37,12, 6,37, 7, 6,37, 8, + 6,37, 6, 6,37,11, 5,21,69,15,24,57,15,24,58,15,24,59,15,24,60,15,24,61, + 15,24,62,15,24,63,15,24,64, 0, 0, 0, 6,37,13, 4,21,51, 0, 0, 0, 6,37, 9, + 4,21,50, 6,47,11, 4,27,32, 5,28,41, 5,28,43, 6,47,14, 6,47,12, 6,47,13, + 6,56,55, 5,28,42, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,31,31,15,31,33,15,31,34, + 15,31,35,15,31,36,15,31,37, 0, 0, 0, 6,47,15, 6,47,10, 0, 0, 0, 0, 0, 0, + 5,28,45, 0, 0, 0, 0, 0, 0, 4,33, 2, 6,56,52, 6,56,57, 6,56,54, 5,35,16, + 5,35,12, 6,56,62, 6,56,53, 5,35,15, 5,35,17, 5,35,18, 6,56,56, 6,56,64, + 6,56,66, 5,35,19, 6,56,63, 0, 0, 0,15,37,40,15,37,41,15,37,42,15,37,43, + 15,37,44,15,37,45,15,37,46, 0, 0, 0, 0, 0, 0, 6,56,65,15,31,32, 6,56,59, + 0, 0, 0, 0, 0, 0, 5,35,14,15,38,20, 0, 0, 0, 6,66,69, 4,39,53, 5,42, 6, + 6,66,68, 6,66,70, 6,66,76, 6,66,67, 6,66,73, 5,42, 7, 4,39,55, 0, 0, 0, + 15,44,45,15,44,46,15,44,47,15,44,49, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,44,48, + 15,44,44, 6,66,75, 6,56,61, 7, 9,19, 7, 9,21, 5,42, 8, 4,45,79, 7, 9,20, + 5,49,26, 4,45,80, 5,49,27, 7, 9,25, 7, 9,24, 7, 9,18,15,50,29,15,50,30, + 15,50,31, 0, 0, 0, 7, 9,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,44,43, 7,19,74, 5,56,46, 7,19,71, 7,19,70, 5,56,47, 7,19,75, 7,19,78, + 4,51,92, 7,19,72, 5,56,45, 6,66,72,15,52,18, 0, 0, 0,15,55,91,15,55,92, + 15,55,93,15,55,94,15,56, 1,15,56, 2, 7,19,77, 0, 0, 0, 0, 0, 0, 7,19,76, + 0, 0, 0, 7,19,69, 7,19,73, 5,56,48, 7,28,18, 5,62,69, 5,59,13, 5,62,71, + 5,56,50, 5,62,70, 4,56,91, 7,28,24, 7,28,20, 7,28,22, 7,28,23, 7,28,21, + 0, 0, 0,15,60,78,15,60,80, 0, 0, 0,15,60,79, 0, 0, 0, 7,35,43, 5,68,83, + 7,35,46, 5,68,79, 7,35,41, 7,35,42, 7,35,49, 5,68,81, 5,68,78, 5,68,82, + 7,35,45, 7,35,44, 0, 0, 0,15,64,86,15,64,87,15,64,88,15,64,89,15,64,91, + 15,64,92, 0, 0, 0, 7,35,40, 0, 0, 0, 0, 0, 0, 7,35,48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,68,80, 7,42,39, 7,42,43, 5,73,61, 5,68,84, + /* plane 2, page 126 */ + 0, 255, /* first, last */ + 7,42,42, 7,35,47, 5,73,60, 4,65,43, 7,42,40, 5,73,62, 7,42,45, 7,42,44, + 5,73,64, 7,42,36, 7,42,41, 7,42,38,15,67,92,15,67,93,15,67,94,15,68, 1, + 0, 0, 0, 7,42,46, 0, 0, 0, 0, 0, 0, 7,42,37, 5,73,63, 4,68,49, 5,77,80, + 4,68,48, 5,77,79, 7,48,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,32, 0, 0, 0, + 15,70,27,15,70,28,15,70,29,15,70,30,15,70,31, 7,48,31, 5,81,35, 4,71,39, + 5,81,36, 0, 0, 0, 0, 0, 0, 5,81,37, 0, 0, 0,15,72,46,15,72,47, 7,53,27, + 0, 0, 0, 7,57,39, 5,84,37, 5,84,36,15,73,86,15,73,87,15,73,88, 7,57,42, + 7,57,40, 7,57,41, 0, 0, 0, 0, 0, 0,15,72,45, 7,60,81, 4,75, 2, 5,84,35, + 7,60,82, 0, 0, 0, 0, 0, 0,15,74,88, 0, 0, 0, 0, 0, 0, 7,60,83, 7,63,62, + 7,63,64, 7,63,63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,66,70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,14,17, 6,20,55, 6,20,56, 5,21,70,15,24,65, 6,47,16, 4,27,36, 0, 0, 0, + 6,56,67,15,37,47, 0, 0, 0, 5,42,10,15,44,50, 0, 0, 0, 0, 0, 0, 7, 9,26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,56,52, 5,56,51,15,56, 3, 7,19,79, + 0, 0, 0, 0, 0, 0, 5,62,73, 5,62,74, 5,62,72,15,60,81, 5,68,85, 7,35,51, + 7,42,48, 7,42,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,81,38, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,60,84, 0, 0, 0, 6,14,18, 6,14,19, + 6,20,57,15,13,43,15,13,45,15,13,46,15,13,47,15,13,48, 4,11,43, 5,16,45, + 6,28,30, 0, 0, 0, 6,28,29, 5,16,46, 6,28,28, 0, 0, 0, 4,16, 9,15,18,57, + 15,18,58,15,18,59,15,18,60,15,18,61, 0, 0, 0, 5,21,77, 6,37,16, 5,21,71, + 4,21,55, 5,21,74, 5,21,79, 5,21,78, 4,21,56, 6,37,14, 6,37,15, 5,21,75, + 5,21,72,15,24,67,15,24,68,15,24,69,15,24,70,15,24,72,15,24,73,15,24,66, + 0, 0, 0, 0, 0, 0, 5,21,76, 5,21,73, 0, 0, 0,15,24,71, 5,28,49, 5,28,48, + 5,28,52, 5,28,47, 6,47,20, 6,47,17, 5,35,25, 5,28,51, 5,28,46, 6,47,19, + 4,27,38, 5,28,53, 6,56,68, 6,47,21,15,31,39,15,31,40,15,31,41,15,31,42, + 15,31,43,15,31,44,15,31,47,15,31,48,15,31,49, 0, 0, 0, 6,47,18,15,31,46, + 0, 0, 0, 6,56,70, 5,35,22, 4,33, 3, 6,56,72, 4,33, 5, 5,35,27, 5,35,21, + 5,35,29, 5,35,23, 4,33, 4, 6,56,74, 6,56,73, 5,35,26, 0, 0, 0,15,37,48, + 15,37,49,15,37,50,15,37,51,15,37,52,15,37,53,15,37,54,15,37,55, 6,56,69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,56,71, 6,66,77, 0, 0, 0,15,31,45, 6,66,78, + 4,39,60, 5,42,12, 5,42,16, 6,66,82, 5,42,11, 5,42,14, 5,42,17, 0, 0, 0, + 6,66,81, 6,66,79, 5,42,19, 4,39,61, 5,42,15, 6,66,86, 0, 0, 0, 5,42,13, + /* plane 2, page 127 */ + 0, 255, /* first, last */ + 6,66,83,15,44,51,15,44,52,15,44,53,15,44,54,15,44,55,15,44,56,15,44,57, + 0, 0, 0, 6,66,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,49,34, 5,49,28, + 4,45,82, 5,49,31, 5,49,30, 5,49,29, 5,49,32, 7, 9,31, 5,49,38, 5,49,35, + 7, 9,33, 5,49,33, 7, 9,28, 7, 9,32, 7, 9,30, 6,66,84, 7, 9,34, 7,19,82, + 5,49,37, 5,49,36,15,50,32,15,50,33, 0, 0, 0, 7, 9,35, 7, 9,27,15,56,13, + 4,52, 3, 4,52, 4, 4,52, 8, 7,19,84, 5,56,57, 4,52, 1, 4,52, 2, 4,52, 7, + 7,19,85, 4,52, 5, 7,19,81, 7,19,80, 5,56,56, 5,56,58, 7,19,86,15,56, 4, + 15,56, 6,15,56, 7,15,56, 8,15,56, 9,15,56,10,15,56,11,15,56,12,15,56,14, + 0, 0, 0, 7,19,88, 7,19,87, 0, 0, 0, 5,56,59, 5,56,54, 5,56,55, 0, 0, 0, + 0, 0, 0, 5,62,79, 5,62,81, 4,57, 2, 5,62,80, 4,57, 4, 4,57, 1, 5,62,82, + 4,56,94, 5,62,76, 4,57, 3, 5,62,78, 5,62,75, 7,28,26, 5,62,83,15,56, 5, + 15,60,82,15,60,83,15,60,84,15,60,85,15,60,86, 7,28,25, 5,68,89, 5,68,92, + 4,61,75, 7,35,55, 7,35,54, 5,68,86, 5,68,90, 5,68,88, 5,68,87, 5,68,93, + 5,68,94, 7,35,59, 7,35,58, 5,68,91,15,64,93, 7,35,56, 0, 0, 0, 7,35,53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,35,57, 7,35,52, 0, 0, 0, 5,56,61, 5,73,66, + 5,73,70, 5,73,72, 4,65,46, 4,65,44, 5,73,67, 5,73,71, 5,73,69, 5,73,65, + 7,42,50, 5,73,73, 5,73,68,15,68, 3,15,68, 4,15,68, 5, 0, 0, 0, 0, 0, 0, + 7,42,49, 0, 0, 0, 0, 0, 0, 7,42,51, 0, 0, 0, 4,68,50, 4,68,52, 4,68,56, + 4,68,55, 5,77,81, 7,48,33, 7,48,35, 5,77,82, 7,48,34,15,70,32,15,70,33, + 15,70,34, 4,71,41, 5,81,40, 5,81,41, 7,53,31, 7,53,29, 7,53,28, 7,53,30, + 5,81,39, 5,84,38, 5,84,41, 4,73,45, 5,84,40, 5,84,39,15,73,89, 0, 0, 0, + 5,86,47, 5,86,48,15,74,89, 7,57,43, 7,60,85, 7,60,86, 5,88,19, 5,88,20, + 5,88,21, 4,77, 6, 0, 0, 0, 0, 0, 0, 7,65,46, 5,90,89, 5,91,41, 0, 0, 0, + 6,14,21, 6,14,20, 6,20,59, 5,11,45,15,13,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,20,58, 6,28,33, 4,16,11, 6,28,34, 6,28,32, 5,16,48, 5,16,47, 0, 0, 0, + 0, 0, 0, 6,28,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,21,63, 6,37,19, 4,21,58, 5,21,83, 6,37,23, 5,21,87, + 6,37,26, 5,21,81, 5,21,85, 6,37,28, 6,37,29, 5,21,84, 6,37,27, 6,37,18, + 6,37,22, 0, 0, 0,15,24,74, 6,37,17, 6,37,21, 0, 0, 0, 6,37,25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,21,86, 5,21,80, + 0, 0, 0, 6,37,20, 5,28,64, 5,28,55, 5,28,56, 5,28,59, 6,47,27, 5,28,54, + 6,47,24, 4,27,46, 5,28,61, 5,28,57, 5,28,65, 5,28,58, 6,47,25, 6,56,89, + /* plane 2, page 128 */ + 0, 255, /* first, last */ + 5,28,66, 0, 0, 0, 0, 0, 0,15,31,52, 0, 0, 0, 0, 0, 0, 6,47,23, 0, 0, 0, + 0, 0, 0,15,31,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,47,26, 5,28,62, 5,35,33, 5,35,31, 6,56,81, + 5,35,32, 5,35,34, 6,56,84, 6,56,80, 5,35,39, 5,35,37, 6,56,78, 6,56,77, + 5,35,30, 6,56,79, 6,56,82, 6,56,86, 5,35,42, 6,56,76, 6,56,87, 5,35,35, + 5,35,44, 5,35,40, 6,56,83, 5,35,41, 5,35,38, 6,56,85, 5,42,21, 0, 0, 0, + 0, 0, 0,15,37,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,56,88, 6,56,75, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,67, 2, 5,42,35, 4,39,64, 5,42,23, 5,42,31, 5,42,22, 5,49,46, 5,42,27, + 6,66,87, 6,66,91, 5,42,34, 5,42,28, 5,42,25, 5,42,32, 5,42,33, 5,42,29, + 5,35,36, 5,42,24, 5,42,36, 6,66,94, 5,42,38, 6,66,89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,42,39,15,44,58,15,44,59, 6,66,88, 0, 0, 0, 6,66,90, 0, 0, 0, + 6,66,93, 0, 0, 0, 6,67, 1, 6,66,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,42,26, 0, 0, 0, 7, 9,38, 4,45,90, 5,49,44, + 5,49,39, 5,49,42, 5,49,47, 7, 9,37, 7, 9,41, 4,45,92, 7, 9,45, 4,45,91, + 5,49,43, 5,49,45, 4,46, 4, 5,49,49, 5,49,50, 4,39,67, 7, 9,47, 5,49,41, + 7, 9,43, 0, 0, 0, 0, 0, 0,15,50,34,15,50,35,15,50,36,15,50,37, 7, 9,40, + 0, 0, 0, 7, 9,44, 0, 0, 0, 7, 9,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,42, 5,49,48, 5,49,52, 5,49,53, 5,42,37, + 7,20, 1, 5,56,64, 5,42,40, 5,56,73, 4,52,10, 7,19,90, 5,56,67, 7,19,94, + 7,20, 3, 7,19,92, 5,56,63, 7,19,91, 7,20, 5, 5,49,51, 7,20, 6, 5,56,71, + 5,56,72, 5,56,62, 5,56,65, 7,19,93, 5,56,69, 5,56,68, 7,20, 4, 4,52,11, + 5,56,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,52,12, + 15,56,17,15,56,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,20, 2, 5,62,90, 5,62,93, 5,62,85, 7,28,32, 5,62,86, + 5,62,92, 5,62,88, 4,57, 9, 7,28,30, 7,35,71, 7,28,35, 5,62,94, 4,57,14, + 7,28,27, 7,28,34, 7,28,36, 5,62,89, 4,57, 7, 7,28,33, 7,20, 7, 7,28,31, + 4,57,15, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,87, 0, 0, 0, 7,28,29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,60,89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,62,87, + /* plane 2, page 129 */ + 0, 253, /* first, last */ + 5,62,84, 0, 0, 0, 0, 0, 0, 7,35,66, 0, 0, 0, 4,61,80, 7,35,70, 4,61,79, + 5,69, 1, 5,69, 2, 5,69,13, 5,69, 6, 4,61,81, 5,69,12, 5,69, 8, 7,35,63, + 5,73,80, 7,35,69, 7,35,60, 5,69,14, 7,35,62, 5,69, 4, 7,35,65, 5,69, 3, + 5,69, 9, 4,63,19, 4,61,86, 5,69, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,64,94,15,65, 1,15,65, 2,15,65, 3,15,65, 4,15,65, 5, 7,35,75, + 5,69, 7, 7,35,64, 7,35,73, 7,35,72, 7,35,74, 7,35,61, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,69,11, 7,35,67, 0, 0, 0, + 7,28,28, 0, 0, 0, 5,69,15, 5,73,74, 7,42,69, 0, 0, 0, 5,73,79, 5,73,81, + 7,42,72, 5,73,84, 7,42,59, 5,69,10, 5,73,78, 7,42,56, 5,73,77, 5,73,82, + 4,65,53, 7,42,52, 4,61,83, 7,42,57, 7,35,68, 7,42,62, 5,73,83, 7,42,58, + 7,42,70, 7,42,53, 7,42,60, 5,73,75, 5,73,76, 7,42,65, 7,42,66, 7,42,67, + 7,42,63, 5,73,86, 5,73,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,42,64, 7,42,61, 0, 0, 0, 7,42,71, 7,42,54, 7,42,68, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,65,51, 4,68,57, 5,77,93, 5,77,87, 7,48,36, 5,77,91, 5,77,86, 5,77,89, + 7,48,40, 7,48,38, 4,68,60, 5,77,83, 4,68,61, 7,48,39, 5,77,88, 5,77,85, + 5,77,84, 7,48,41, 0, 0, 0, 0, 0, 0,15,70,35,15,70,36,15,70,37,15,70,38, + 15,70,39, 0, 0, 0, 7,48,37, 7,48,42, 7,48,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,77,92, 5,77,94, + 5,77,90, 0, 0, 0, 4,71,46, 7,53,34, 4,71,47, 5,81,43, 7,53,33, 7,53,36, + 4,71,45, 4,71,43, 5,81,44, 7,53,35, 7,53,32, 5,81,42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,49,15,72,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,84,42, 7,53,37, 7,57,44, 5,84,45, 5,84,47, 5,84,46, 5,84,44, + 7,57,45, 0, 0, 0, 5,84,49, 7,57,46,15,73,90, 0, 0, 0, 0, 0, 0, 7,57,47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,48, 0, 0, 0, 5,86,52, 5,86,50, + 5,86,53, 7,60,89, 7,60,88, 0, 0, 0, 0, 0, 0, 5,86,51, 5,86,49, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,76,11, 7,63,65, 5,88,23, 5,88,22, + 4,76,10, 5,88,24, 7,63,66, 7,65,47, 0, 0, 0, 7,63,67, 7,65,50, 4,77, 8, + 7,65,52, 7,66,71, 7,65,51, 7,65,49, 7,65,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,75,71, 5,90,28, 5,90,27, 5,90,29, + /* plane 2, page 130 */ + 3, 252, /* first, last */ + 7,67,86, 5,91,42, 7,68,67, 0, 0, 0, 0, 0, 0, + 5,91,74, 0, 0, 0,15,77, 8, 7,69,69, 0, 0, 0,15,77,19, 0, 0, 0, 6, 3,25, + 6, 3,26, 6, 5,53, 0, 0, 0, 5,16,50, 6,28,36, 5,16,49, 0, 0, 0, 0, 0, 0, + 5,21,90, 5,21,89, 5,21,88, 6,37,30, 6,37,33, 6,37,32, 6,37,34, 6,37,31, + 6,37,35, 6,37,36, 4,21,64, 0, 0, 0,15,24,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,28,69, 6,47,31, 5,28,68, 6,47,33, 6,47,30, 5,28,70,15,31,53, + 15,31,54,15,31,55,15,31,56, 0, 0, 0, 6,47,29, 6,47,32, 0, 0, 0, 0, 0, 0, + 6,56,93, 5,35,45, 6,56,90, 6,56,94, 6,57, 1,15,37,58,15,37,59,15,37,60, + 6,56,91, 0, 0, 0, 6,56,92, 6,57, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,42,42, 6,67, 3, 6,67, 4, 5,42,41, 6,67, 5, 6,67, 6,15,44,60,15,44,61, + 15,44,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,49, 5,49,54, 0, 0, 0, 4,46, 5, + 15,50,38,15,50,40, 0, 0, 0, 7, 9,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,56,74, 4,52,17, 5,56,75, 7,20, 8, 7,28,38,15,56,20, + 15,56,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,40, 7,28,39, + 7,28,37, 5,63, 1,15,60,90,15,60,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,69,16, 7,35,76,15,65, 6,15,65, 7, 0, 0, 0, 0, 0, 0, 7,42,76, + 7,42,77, 7,42,74, 0, 0, 0,15,68, 6,15,68, 7, 0, 0, 0, 7,42,75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,42,73, 0, 0, 0, 0, 0, 0, 4,68,62, 7,48,45,15,70,40, + 15,70,41, 0, 0, 0, 7,48,46, 7,53,38, 5,81,45, 7,53,39, 7,53,40, 7,53,41, + 7,57,48,15,73,92, 0, 0, 0, 5,86,54, 0, 0, 0, 5,89,49, 0, 0, 0, 0, 0, 0, + 6,20,60, 5,11,46, 6,20,62,15,13,50,15,13,52, 0, 0, 0, 0, 0, 0, 6,28,37, + 0, 0, 0, 5,16,52, 6,28,39,15,18,63,15,18,64, 0, 0, 0, 0, 0, 0, 6,28,38, + 0, 0, 0, 5,16,51,15,18,62, 5,21,91, 6,37,46, 6,37,45, 6,37,38, 4,21,68, + 5,22, 2, 5,22, 1, 6,37,42, 5,21,93, 6,37,39, 6,37,44, 6,37,43, 5,21,92, + 5,21,94, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,24,77, 0, 0, 0, 6,37,40, 6,37,41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,21,69, 0, 0, 0, 6,47,38, 6,47,39, + 5,28,80, 5,28,78, 6,47,37, 6,47,36, 6,47,34, 5,22, 3, 5,28,77, 5,28,72, + 5,28,75, 5,28,74, 6,47,35, 5,28,73, 5,28,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,28,76, 5,28,79, + 6,57, 3, 6,57, 8, 5,35,51, 6,57, 6, 6,57, 9, 5,35,49, 4,33,11, 5,35,50, + 5,35,47, 6,57, 7, 5,35,46, 0, 0, 0,15,37,61,15,37,62,15,37,63, 0, 0, 0, + 0, 0, 0, 6,57, 5, 0, 0, 0, 0, 0, 0, 4,33,13, + /* plane 2, page 131 */ + 1, 254, /* first, last */ + 5,35,52, 6,67,13, 6,67,15, 5,42,48, 4,39,72, 6,67, 8, 6,67,11, + 5,42,45, 6,67,12, 6,67, 7, 6,67,16, 0, 0, 0, 5,42,43, 5,42,46, 6,67,17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,67,14, 0, 0, 0, + 0, 0, 0,15,44,63,15,44,64,15,44,65,15,44,67, 5,42,47, 0, 0, 0, 5,42,44, + 7, 9,57, 6,67,10, 5,49,64, 7, 9,55, 7, 9,62, 7, 9,66, 7, 9,54, 5,49,57, + 7, 9,58, 7, 9,53, 7, 9,60, 5,49,56, 5,49,59, 5,49,62, 4,46,12, 6,67, 9, + 7, 9,56, 7, 9,61, 7, 9,59, 5,49,61, 5,49,63, 7, 9,50, 5,49,55, 7, 9,52, + 7, 9,67, 0, 0, 0, 0, 0, 0,15,50,41,15,50,42,15,50,43,15,50,44, 0, 0, 0, + 7, 9,51, 7, 9,63, 7, 9,64, 7, 9,65, 0, 0, 0, 5,49,60, 5,49,58, 7,20, 9, + 5,56,83, 7,20,15, 5,56,84, 7,20,13, 5,56,80, 7,20,11, 7,20,20, 5,56,78, + 5,56,81, 5,56,77, 7,20,21, 7,20,16, 7,20,22, 0, 0, 0, 5,56,76, 7,20,19, + 15,56,23,15,56,25,15,56,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,20,12, + 7,20,14, 0, 0, 0, 0, 0, 0, 7,20,10, 0, 0, 0,15,56,24, 0, 0, 0, 4,52,21, + 5,56,79, 7,28,42, 7,28,50, 5,63, 5, 7,28,45, 7,28,44, 7,28,43, 7,28,51, + 4,57,19, 7,28,48, 4,57,20, 7,28,49, 5,63, 2, 0, 0, 0, 5,63,11, 4,57,22, + 5,63, 8, 5,63, 7, 0, 0, 0, 7,28,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,63, 4, + 5,63,10, 7,28,41,15,60,92,15,60,93, 7,28,46, 7,28,47, 0, 0, 0, 5,63, 6, + 5,63, 3, 5,63, 9, 4,61,89, 7,35,80, 4,62, 1, 5,69,18, 0, 0, 0, 0, 0, 0, + 5,69,20,15,65, 8,15,65, 9,15,65,10, 0, 0, 0, 7,35,79, 7,35,82, 0, 0, 0, + 7,35,81, 7,35,78, 0, 0, 0, 0, 0, 0, 7,35,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,69,17, 5,69,19, 0, 0, 0, 5,73,88, 7,42,78, 7,42,81, 7,42,79, + 7,42,80, 5,73,90, 4,65,58, 4,65,59, 5,73,89, 5,73,87, 5,73,91, 7,42,82, + 15,68, 8, 7,42,84, 4,68,66, 5,78, 5, 5,78, 3, 7,48,51, 5,78, 4, 5,78, 2, + 7,48,49, 5,78, 1, 0, 0, 0, 0, 0, 0,15,70,42, 0, 0, 0, 7,48,50, 0, 0, 0, + 0, 0, 0, 7,48,48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,47, 5,78, 6, 7,48,52, + 4,71,51, 5,81,46, 4,71,52, 7,53,44, 0, 0, 0, 0, 0, 0, 7,53,43, 7,53,42, + 0, 0, 0, 7,57,54, 4,73,48, 7,57,50, 7,57,49, 4,73,49, 7,57,55, 0, 0, 0, + 7,57,51, 7,57,52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,57,53, 7,60,94, 7,61, 1, + 5,86,55, 7,60,91, 7,60,90, 7,60,92, 7,60,93, 0, 0, 0, 5,86,57, 0, 0, 0, + 5,86,56, 5,88,28, 5,88,27, 5,88,26, 7,63,71, 0, 0, 0, 0, 0, 0, 7,63,69, + 7,63,68, 5,88,25, 7,63,70, 5,89,51, 5,89,50, 5,90,30, 5,90,31, 0, 0, 0, + 7,66,72, 5,90,90, 7,68,68, 0, 0, 0, 0, 0, 0, 7,66,73, 7,67,87, + /* plane 2, page 132 */ + 1, 255, /* first, last */ + 5,91,75, 7,69,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9,11, 6,14,22, 6,28,40, 0, 0, 0, 6,37,47, + 5,22, 5, 5,22, 4, 0, 0, 0, 0, 0, 0, 4,33,14, 6,57,10, 0, 0, 0,15,37,65, + 5,42,49,15,44,69,15,44,70, 5,42,50, 7, 9,68, 7, 9,69, 7, 9,70, 5,49,66, + 7,20,23, 5,56,85, 7,20,24, 0, 0, 0,15,56,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,63,13, 5,63,12,15,60,94,15,61, 1,15,61, 2,15,61, 3, 0, 0, 0, 5,63,14, + 5,69,23, 5,69,22, 7,35,83, 0, 0, 0, 0, 0, 0, 7,42,85, 4,65,60, 0, 0, 0, + 0, 0, 0, 7,42,86, 0, 0, 0,15,70,43, 7,48,53,15,72,52, 7,57,56, 0, 0, 0, + 7,63,72, 7,69,39, 7,69,71, 6, 9,12, 6,14,23, 6,57,13, 6,57,12, 6,57,11, + 15,50,45, 7,19, 1, 4,65,61, 7,53,45, 0, 0, 0, 6, 5,57, 0, 0, 0, 6, 5,56, + 6, 5,55, 4, 4,94, 6, 9,13, 4, 5, 4, 6,28,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 9,14,15, 5,19,15, 5,20, 6,28,42, 0, 0, 0, 0, 0, 0, 6, 9,15, 0, 0, 0, + 5, 4,88, 6,28,43, 6,37,48, 5, 7,74, 5, 7,75, 5, 7,80, 6,14,24, 6,14,29, + 5, 7,79, 4, 8, 5, 5, 7,81, 5, 7,77, 4, 8, 8, 6,14,27, 0, 0, 0,15, 8,77, + 15, 8,79,15, 8,80,15, 8,83,15, 8,84,15, 8,85, 6,14,26, 0, 0, 0, 6,14,31, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7,78, 5, 7,72, 6,14,28, 5, 7,76, + 6,14,25, 6,14,30, 0, 0, 0, 5,11,47, 5,11,54, 5,11,50, 6,20,63, 5,11,49, + 6,20,66, 5,11,53, 5,11,51, 4,11,47, 4,11,49, 5,11,48, 6,20,68, 6,20,67, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,13,53,15,13,54,15,13,55,15,13,56,15,13,57, + 0, 0, 0, 0, 0, 0, 4,11,50, 6,20,69, 0, 0, 0, 6,20,65, 0, 0, 0, 0, 0, 0, + 6,42,39, 0, 0, 0, 5,11,55, 5,11,52, 6,28,52, 6,28,56, 5,16,59, 6,28,51, + 5,16,54, 5,16,58, 4,16,17, 5,16,55, 5,16,57, 6,28,50, 6,28,44, 6,28,54, + 4,16,18, 0, 0, 0, 6,28,55, 6,28,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,35,53, 6,28,53, 5,16,56, 6,28,48, + 6,28,46, 5,16,60, 5,22, 7, 5,22, 6, 6,28,47, 6,37,59, 0, 0, 0, 5,22,12, + 4,21,74, 6,37,60, 5,22,11, 6,28,49, 0, 0, 0, 5,22, 9, 6,37,55, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,37,58,15,24,80,15,24,81,15,24,82, 6,37,54, 6,37,52, + 6,37,53, 6,37,50, 0, 0, 0, 6,37,61, 0, 0, 0, 6,37,56, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,37,51, 5,22,10, 4,21,71, 6,37,57, + 5,22,13, 5,22, 8,15,24,79, 6,37,49, 5,28,86, 5,28,82, 5,28,88, 5,28,87, + 4,27,54, 6,47,51, 4,27,58, 4,27,56, 5,28,89, 6,47,50, 7, 9,71, 6,47,45, + 6,47,44, 6,47,48, 6,47,47, 4,27,59, 0, 0, 0, 6,47,41, 6,47,43,15,31,66, + /* plane 2, page 133 */ + 0, 253, /* first, last */ + 6,47,49, 0, 0, 0, 0, 0, 0, 6,47,52, 0, 0, 0, 6,47,53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,47,42, 0, 0, 0, 0, 0, 0,15,31,57,15,31,58, + 15,31,59,15,31,60,15,31,61,15,31,63,15,31,64,15,31,65, 5,28,85, 6,47,46, + 0, 0, 0, 5,28,84, 5,28,83, 4,27,57, 6,47,54, 6,57,32, 6,57,20, 6,57,29, + 0, 0, 0, 6,57,16, 4,33,17, 4,33,16, 6,57,14, 0, 0, 0, 5,35,57, 6,57,17, + 6,57,33, 6,57,27, 6,57,31, 6,57,23, 6,57,21, 6,57,35, 6,57,34, 5,28,90, + 4,33,18, 6,57,19, 6,57,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,37,66,15,37,67,15,37,68,15,37,69,15,37,70,15,37,71,15,37,72, + 15,37,73,15,37,74,15,37,75,15,37,76, 0, 0, 0, 6,57,18, 0, 0, 0, 6,57,22, + 6,57,28, 6,57,25, 0, 0, 0, 6,57,24, 6,57,26, 0, 0, 0, 6,57,15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,35,56, 5,35,55, 5,35,54, 6,67,21, 6,67,20, 6,67,23, + 6,67,18, 6,67,26, 5,42,52, 6,67,22, 6,67,24, 6,67,28, 5,42,51, 5,42,54, + 6,67,19, 6,67,27, 7,28,53, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,44,73,15,44,74, + 15,44,76,15,44,77,15,44,78,15,44,79,15,44,80,15,44,81,15,44,82, 0, 0, 0, + 6,67,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,54, 7,28,55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,28,56, 0, 0, 0, 5,42,53, 0, 0, 0, 0, 0, 0, 7, 9,78, 7, 9,76, + 7, 9,82, 7, 9,73, 7, 9,75, 4,46,15, 5,49,68, 4,46,16, 5,49,72, 5,49,69, + 4,46,20, 0, 0, 0, 0, 0, 0, 7, 9,80,15,50,46,15,50,47,15,50,48,15,50,49, + 15,50,50, 5,49,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,74, 7, 9,79, 7, 9,84, + 7, 9,85, 7, 9,81, 0, 0, 0, 7, 9,83, 7,35,84, 7, 9,72, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,35,85, 7, 9,77, 5,49,73, 5,49,71, 5,49,76, 5,49,70, + 5,49,74, 5,49,75, 0, 0, 0, 5,49,67, 7,20,38, 5,56,92, 5,56,91, 5,56,89, + 7,20,33, 5,56,87, 7,20,37, 7,20,30, 7,20,39, 0, 0, 0, 4,52,22, 7,20,34, + 7,20,36, 7,20,25, 7,20,42, 7,42,87, 7,20,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,20,32, 7,20,44,15,56,28,15,56,29,15,56,30, + 7,20,29, 0, 0, 0,15,56,31, 7,12,58, 7,20,40, 7,20,27, 0, 0, 0, 7,20,26, + 7,20,35, 7,20,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,56,88, 5,56,93, + 0, 0, 0, 5,56,90, 7,20,31, 5,56,86, 0, 0, 0, 5,63,15, 4,57,26, 7,28,64, + 5,63,19, 7,28,61, 5,63,20, 7,28,59, 7,48,55, 7,20,41, 7,28,66, 7,28,62, + 5,63,18, 5,63,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61, 4,15,61, 6, + 15,61, 7,15,61, 8, 7,28,57, 7,28,60, 7,28,63, 7,28,67, + /* plane 2, page 134 */ + 0, 255, /* first, last */ + 15,61, 5, 5,63,22, 5,63,23, 5,63,17, 5,63,16, 7,28,58, 0, 0, 0, 5,69,29, + 7,35,92, 4,62, 2, 7,35,90, 0, 0, 0, 5,69,26, 7,35,88,15,65,11,15,65,12, + 15,65,13, 7,36, 1, 0, 0, 0, 7,35,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,69,25, 7,35,93, 7,35,86, 7,35,89, 5,69,28, 5,69,27, 5,69,24, + 7,35,91, 7,43, 1, 7,43, 2, 7,42,94, 0, 0, 0, 0, 0, 0,15,68,10,15,68,11, + 15,68,13,15,68,14, 7,42,89, 7,42,90, 7,42,93, 7,42,91, 7,42,92, 0, 0, 0, + 7,42,88, 0, 0, 0, 5,74, 1, 0, 0, 0, 0, 0, 0, 5,73,94,15,68,12, 7,48,58, + 5,78, 9, 7,48,57, 0, 0, 0, 0, 0, 0, 5,78, 7,15,70,44, 0, 0, 0, 7,48,56, + 5,78, 8, 7,61, 2, 4,71,53, 7,53,47, 5,81,49, 7,53,48, 7,53,46,15,72,53, + 15,72,54,15,72,55,15,72,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,81,47, 5,81,48, + 5,73,93, 7,53,49, 5,81,50, 5,84,50, 4,75, 5, 7,57,59, 0, 0, 0, 7,57,58, + 7,57,57, 7,61, 3, 7,61, 5, 0, 0, 0, 7,61, 4, 0, 0, 0, 7,66,74, 7,63,74, + 7,63,73, 0, 0, 0, 0, 0, 0, 5,88,29, 7,65,53, 0, 0, 0, 7,66,75, 7,69,72, + 6, 9,16, 5, 1,92, 0, 0, 0, 5, 3,12, 0, 0, 0, 5, 3,11, 5, 3,13, 5, 3,10, + 4, 3,17, 6, 5,58, 6, 5,60, 0, 0, 0, 0, 0, 0, 4, 3,19, 4, 5, 7, 5, 4,89, + 4, 5, 6, 4, 5, 8, 4, 5, 5, 6, 9,19, 4, 5,10, 5, 4,90, 4,21,81, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 9,18,15, 5,21,15, 5,22,15, 5,23,15,24,83,15,24,85, + 0, 0, 0, 6,37,65, 6,37,63, 6,37,64, 0, 0, 0, 6, 9,17, 0, 0, 0, 4, 5, 9, + 0, 0, 0, 4, 8,14, 6,37,62, 4, 8,10, 4, 8,13, 4, 8,12, 6,20,73, 4, 8,15, + 5, 7,82, 5, 7,83, 6,47,56, 6,14,35,15, 8,86,15, 8,88,15, 8,89,15, 8,92, + 6,47,58, 0, 0, 0, 6,14,33, 0, 0, 0, 0, 0, 0, 6,14,34, 0, 0, 0, 0, 0, 0, + 6,14,32, 0, 0, 0,15, 8,87,15, 8,91, 6,47,55, 6,47,57, 5, 7,84, 5,11,58, + 5,11,57, 5,11,56, 4,11,55, 4,11,53, 5,11,63, 4,33,19, 5,11,59, 0, 0, 0, + 0, 0, 0,15,13,58,15,37,78, 6,57,37, 6,57,36, 6,57,38, 0, 0, 0, 6,20,76, + 0, 0, 0, 6,20,70, 0, 0, 0, 6,20,71, 6,20,72, 0, 0, 0, 6,20,75, 6,20,74, + 5,11,62, 5,11,60, 5,11,61, 5,16,65, 5,16,61, 4,16,22, 6,28,59, 5,16,69, + 5,16,70, 5,16,62, 5,16,67, 5,16,63, 4,16,21, 6,28,61, 4,16,23, 0, 0, 0, + 0, 0, 0, 6,28,63, 6,67,29, 6,67,31, 6,67,32, 0, 0, 0, 6,28,60, 6,28,62, + 6,28,58, 5,16,66, 0, 0, 0, 5,16,68, 5,16,64, 5,16,71, 6,67,30, 6,28,57, + 15,18,66,15,18,67,15,18,68, 5,49,78, 4,46,22, 4,21,79, 5,22,17, 5,22,16, + 5,22,21, 5,22,14, 0, 0, 0, 5,22,18, 4,21,77, 6,37,70, 5,22,20, 7, 9,90, + 7, 9,89, 0, 0, 0, 0, 0, 0, 6,37,72,15,18,65,15,24,86,15,50,52, 7, 9,86, + /* plane 2, page 135 */ + 0, 255, /* first, last */ + 7, 9,87, 7, 9,91, 7, 9,88, 6,37,67, 0, 0, 0, 6,37,69, 6,37,68, 0, 0, 0, + 6,37,66, 0, 0, 0,15,19,28, 6,37,71, 5,22,15, 5,22,19, 5,16,72, 4,27,63, + 5,29, 3, 5,28,94, 5,29, 2, 4,27,61, 5,29, 4, 6,47,68, 5,29, 1, 5,35,71, + 5,28,93, 5,28,92, 6,47,66, 6,47,59, 4,27,60, 0, 0, 0, 0, 0, 0,15,31,67, + 15,31,68,15,31,69,15,56,33, 7,20,46, 6,47,61, 6,47,60, 6,47,62, 6,47,63, + 6,47,64, 0, 0, 0, 6,47,65, 0, 0, 0, 0, 0, 0,15,31,70, 6,47,67, 7,20,45, + 5,28,91, 0, 0, 0, 7,28,68, 5,35,59, 5,35,64, 5,35,67, 5,35,62, 5,35,61, + 4,33,21, 6,67,33, 5,35,60, 5,35,66, 5,35,63, 5,35,68, 5,35,70, 4,33,23, + 5,35,69, 6,57,41, 0, 0, 0, 5,35,58,15,37,79, 0, 0, 0, 0, 0, 0, 6,57,40, + 0, 0, 0, 6,57,43, 5,35,65, 4,39,79, 5,42,61, 5,42,60, 5,42,57, 5,42,56, + 5,42,67, 5,42,63, 0, 0, 0, 5,42,59, 6,67,38, 6,67,35, 0, 0, 0, 6,67,34, + 5,42,65, 0, 0, 0, 0, 0, 0, 5,42,66, 0, 0, 0, 7,36, 2, 7,36, 4, 7,36, 3, + 7,36, 5, 6,67,37, 5,42,55, 4,39,82, 0, 0, 0, 6,67,36, 5,69,30, 5,42,58, + 5,42,62, 0, 0, 0, 5,42,68, 4,46,24, 7,43, 3, 5,49,82, 7,10, 1, 4,46,23, + 5,49,83, 4,46,25, 0, 0, 0, 5,57, 8, 5,49,79, 5,49,80, 7, 9,94, 7,10, 2, + 4,46,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,50,51,15,50,53,15,50,54, + 7,43, 6, 7,43, 4, 7,10, 3, 7,10, 5, 7,10, 6, 7,10, 4, 0, 0, 0, 7, 9,92, + 0, 0, 0, 7, 9,93, 0, 0, 0, 0, 0, 0, 5,49,84, 7,20,48, 5,49,81, 7,43, 5, + 0, 0, 0, 5,78,10, 5,57, 5, 5,57, 6, 7,48,60, 4,52,24, 7,20,47, 5,57, 1, + 5,57, 4, 7,20,50, 5,57, 2, 5,57, 3, 4,52,25, 0, 0, 0, 7,20,49,15,56,32, + 7,48,61, 7,48,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,11, 7,28,69, + 7,28,73, 5,63,24, 4,57,27, 5,63,25, 0, 0, 0, 0, 0, 0, 7,53,50, 7,53,51, + 7,53,52, 7,28,71, 0, 0, 0, 7,28,74, 0, 0, 0, 7,28,70, 5,63,27, 5,63,26, + 7,53,53, 7,28,72, 5,69,32, 7,36, 6, 7,36, 7, 5,69,33, 5,74, 5, 5,69,36, + 7,36, 9, 7,36, 8, 5,69,34, 5,69,35, 7,57,60, 5,69,31, 0, 0, 0, 0, 0, 0, + 7,36,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,43, 8, 7,36,11, 5,74, 4, + 7,43, 7, 5,74, 3, 0, 0, 0, 0, 0, 0, 7,43,10, 7,43, 9, 4,65,64, 5,57, 7, + 5,74, 2, 4,68,68, 5,78,12, 7,48,63, 7,48,65, 0, 0, 0, 7,48,62, 7,48,64, + 4,71,54,15,72,57, 7,53,54, 7,53,55, 7,57,61, 0, 0, 0, 7,53,56,15,72,58, + 7,61, 6, 0, 0, 0, 0, 0, 0, 7,63,75, 7,63,76, 0, 0, 0, 5,91,43, 7,67,88, + 4,16,25,15,18,69, 6,28,64, 0, 0, 0, 5,22,24, 5,22,23, 6,37,82, 6,37,78, + 5,22,25, 4,21,86, 6,37,76, 6,37,83, 6,37,73, 4,21,87, 5,22,26, 6,37,80, + /* plane 2, page 136 */ + 0, 255, /* first, last */ + 6,37,79, 6,37,74, 6,37,75, 0, 0, 0, 0, 0, 0,15,24,87, 6,37,81, 4,21,89, + 6,37,77, 0, 0, 0, 6,37,84, 6,47,75, 5,29, 5, 5,29, 6, 4,27,69, 6,47,73, + 5,35,74, 4,27,66, 4,27,67, 6,47,74, 6,47,70, 6,47,69, 4,27,65, 6,47,71, + 6,47,72, 0, 0, 0, 0, 0, 0,15,31,72,15,31,73,15,31,74,15,31,75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,47,76, 0, 0, 0, 5,35,73, 5,35,76, 5,35,72, 6,57,46, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,57,45, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,35,75, 6,67,42, + 5,42,70, 5,42,69,15,44,83,15,44,84,15,44,85,15,44,87, 6,67,41, 0, 0, 0, + 0, 0, 0, 6,67,40,15,44,88, 0, 0, 0, 0, 0, 0, 6,67,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 8, 5,49,88, 7,10,12, 5,49,89, 5,49,85, + 7,10,16, 5,49,86, 0, 0, 0, 7,10,15, 7,10,14, 7,10,13, 7,10, 9, 7,10, 7, + 5,49,87, 0, 0, 0,15,44,86,15,50,56,15,50,57, 7,10,10, 0, 0, 0, 0, 0, 0, + 7,10,11, 0, 0, 0, 7,10,18, 7,10,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,20,54, 7,20,53, 5,57, 9, 7,20,56, 5,57,12, 7,20,58, 4,52,33, + 7,20,63, 4,52,30, 4,52,31, 7,20,62, 5,57,10, 7,20,55, 7,20,61, 7,20,60, + 5,57,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,56,34,15,56,35, 0, 0, 0, + 7,20,57, 7,20,59, 0, 0, 0, 7,20,51, 7,20,64, 5,63,33, 5,63,31, 5,63,32, + 5,63,35, 4,57,32, 7,28,76, 5,63,34, 4,57,30, 7,28,78, 5,63,30, 7,28,84, + 5,63,36, 7,28,77, 7,28,83, 0, 0, 0,15,61,10,15,61,11,15,61,12, 0, 0, 0, + 0, 0, 0, 7,28,79, 7,28,81, 7,28,82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,63,29, 5,69,38, 5,69,39, 5,69,41, 7,36,19, 7,36,15, 4,62, 3, 7,36,12, + 5,69,40, 4,62, 6, 5,69,42, 7,28,85, 4,62, 5, 7,36,18, 0, 0, 0, 5,69,43, + 7,36,21, 7,36,22, 7,36,13,15,65,14, 0, 0, 0, 7,36,17, 7,36,14, 0, 0, 0, + 0, 0, 0, 5,69,44, 7,36,16, 0, 0, 0, 0, 0, 0, 7,43,15, 7,43,12, 5,74,14, + 5,74,11, 5,74, 7, 5,74,10, 5,74, 9, 5,74,15, 5,74,12, 5,74, 8, 5,74,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,43,13, 0, 0, 0, 0, 0, 0, 7,43,14, 0, 0, 0, + 7,43,16, 7,43,11, 0, 0, 0, 7,36,20, 5,74,16, 5,74, 6, 7,48,66, 5,78,17, + 5,78,14, 5,78,15, 5,78,13, 5,78,16, 7,48,67, 7,48,68, 0, 0, 0,15,70,46, + 7,48,69, 7,48,71, 0, 0, 0, 7,48,70, 0, 0, 0, 0, 0, 0, 4,71,57, 4,71,55, + 4,71,56, 5,81,51, 7,53,58,15,72,59, 0, 0, 0, 7,53,57, 7,57,62, 7,57,63, + 7,57,66, 5,84,51, 7,57,65, 7,57,64,15,73,93, 0, 0, 0, 7,61, 7, 7,61, 9, + 5,86,58, 7,61,11, 7,61,10, 5,86,59, 7,61, 8,15,74,90, 5,88,31, 4,76,15, + /* plane 2, page 137 */ + 0, 255, /* first, last */ + 7,63,77, 7,63,78, 5,88,30, 0, 0, 0, 0, 0, 0, 7,66,76, 0, 0, 0, 5,90,91, + 7,67,90, 7,67,89, 7,68,70, 0, 0, 0, 7,68,69, 7,69,88, 7,69,89, 6,20,78, + 5,29, 7, 5,22,27, 6,67,43, 6,67,44, 0, 0, 0, 5,49,90, 7,10,20, 7,10,19, + 5,57,13, 7,20,65, 5,63,37,15,61,13, 0, 0, 0, 7,36,23,15,70,47, 0, 0, 0, + 15,72,60, 5,84,52, 5,22,28, 6,28,65, 0, 0, 0, 6,37,85, 6,47,78, 0, 0, 0, + 5,29, 9, 5,29, 8,15,37,80, 0, 0, 0, 6,67,45, 7,10,21, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,63,38, 0, 0, 0,15,65,15, 5,69,45, + 15,72,61, 5,81,52, 7,53,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,68,15,18,70, + 6,28,66, 0, 0, 0, 5,22,29, 6,37,86, 6,37,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,24,88, 6,47,83, 6,47,84, 6,47,85, 6,47,81, 6,47,82, 6,47,88, + 6,47,86, 6,47,80, 6,47,89,15,31,76,15,31,77,15,31,78,15,31,79,15,31,82, + 15,31,84,15,31,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6,47,87, 0, 0, 0,15,31,80, 4,33,39, 5,35,78, 4,33,37, + 4,33,36, 6,57,51, 6,57,47, 0, 0, 0, 0, 0, 0,15,37,81,15,37,85,15,37,86, + 15,37,87,15,37,88, 6,57,53, 6,57,49, 0, 0, 0, 6,57,50,15,37,89, 0, 0, 0, + 0, 0, 0, 6,57,52, 0, 0, 0, 6,57,48, 0, 0, 0, 0, 0, 0,15,37,84, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,42,71, 0, 0, 0, 5,42,72, 6,67,50, 5,42,73, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,44,72,15,44,89,15,44,91,15,44,92,15,44,93,15,45, 1, + 15,45, 3,15,45, 4,15,45, 5,15,45, 8,15,45, 9, 0, 0, 0, 6,67,46, 0, 0, 0, + 0, 0, 0, 4,39,90, 0, 0, 0, 0, 0, 0, 6,67,48, 6,67,49,15,45,10, 6,67,52, + 15,44,90, 0, 0, 0, 0, 0, 0, 6,67,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,45,11, 0, 0, 0,15,45, 6,15,44,94, 7,10,26, 4,46,34, 5,49,94, 7,10,33, + 7,10,27, 7,10,32, 7,10,25, 5,49,93, 7,10,35, 0, 0, 0, 0, 0, 0, 7,10,36, + 7,10,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,49,91, 7,10,23, + 0, 0, 0,15,50,59,15,50,61,15,50,63,15,50,64,15,50,67,15,50,68,15,50,69, + 15,50,71,15,50,72,15,50,73,15,50,74,15,50,76,15,50,77, 7,10,34, 7,10,28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,31, 0, 0, 0, 7,10,37,15,50,62, 0, 0, 0, + 0, 0, 0, 7,10,22, 0, 0, 0, 5,49,92,15,50,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,50,70, 0, 0, 0, 0, 0, 0,15,50,58, 5,57,20, 5,57,23, 5,57,18, + 4,52,39, 5,57,14, 5,57,16, 7,20,69, 7,20,68, 7,20,75, 7,20,73, 7,20,71, + 5,57,22, 4,52,36, 7,20,66, 7,20,74, 7,20,72, 5,57,15, 7,20,70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,50,60, 5,57,19,15,56,36, + /* plane 2, page 138 */ + 0, 253, /* first, last */ + 15,56,38,15,56,39,15,56,41,15,56,42,15,56,43,15,56,45,15,56,46,15,56,47, + 15,56,49,15,56,51,15,56,52,15,56,54,15,56,55,15,56,58,15,56,60, 0, 0, 0, + 15,56,61,15,56,62,15,56,64,15,56,65,15,56,67,15,56,68,15,56,48,15,56,50, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,56,63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,56,37, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,56,56, 0, 0, 0, 0, 0, 0, 5,57,24, 0, 0, 0, 5,57,17, 5,63,40, + 5,63,41, 7,28,89, 4,57,35, 5,63,44, 5,63,43, 7,28,92, 5,57,21, 5,63,39, + 7,28,90, 5,63,42, 5,63,47, 7,28,94, 7,29, 4, 7,29, 1, 7,29, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61,15,15,61,16,15,61,20,15,61,21, + 15,61,22,15,61,23,15,61,26,15,61,27,15,61,28,15,61,29,15,61,31,15,61,32, + 15,61,34, 0, 0, 0, 0, 0, 0,15,61,35,15,61,36,15,61,37,15,61,38,15,61,39, + 15,61,40,15,61,41,15,61,43,15,61,46,15,61,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,28,93, 0, 0, 0, 0, 0, 0, 7,29, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,28,88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,29, 3, 4,57,40, 0, 0, 0,15,61,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,61,24,15,61,19,15,61,17, 5,63,46, 5,63,45,15,61,14, 5,69,49, + 4,62,13, 4,62,14, 5,69,50, 4,62, 8, 4,62,10, 7,36,24, 5,69,48, 5,69,46, + 5,74,17, 7,36,26, 5,69,51, 4,62,16, 7,36,32, 0, 0, 0, 7,36,31, 5,69,52, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,69,53, + 7,36,33,15,65,17,15,65,18,15,65,20,15,65,22,15,65,23,15,65,24,15,65,26, + 15,65,28,15,65,29,15,65,30,15,65,32,15,65,33,15,65,34,15,65,36,15,65,37, + 15,65,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,36,27, 7,36,28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,36,30, 7,36,29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,65,16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,65,25,15,65,21, 0, 0, 0,15,63,61, 4,65,75, + 7,43,19, 7,43,23, 5,74,18, 7,43,20, 5,74,20, 7,43,18, 7,43,26, 0, 0, 0, + 7,43,22, 7,43,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,43,27,15,68,17, + 15,68,18,15,68,19,15,68,21,15,68,22,15,68,24,15,68,25,15,68,26,15,68,27, + 15,68,28,15,68,29,15,68,31,15,68,32,15,68,33,15,68,34,15,68,35,15,68,36, + 15,68,37, 7,43,28, 0, 0, 0, 7,43,21, 0, 0, 0, 7,43,24, + /* plane 2, page 139 */ + 3, 254, /* first, last */ + 4,65,74, 7,43,17, 5,69,54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,30, 4,68,72, 7,48,77, 7,48,78, + 5,78,24, 7,48,82, 5,78,19, 4,68,74, 5,78,22, 0, 0, 0, 5,78,18, 7,48,80, + 7,48,72, 7,48,73, 5,78,23, 4,68,78, 0, 0, 0, 7,48,81, 0, 0, 0, 5,78,20, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,48,15,70,49,15,70,51,15,70,52,15,70,53, + 15,70,54,15,70,56,15,70,57, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,58,15,70,59, + 15,70,61,15,70,63,15,70,64,15,70,65,15,70,66,15,70,67,15,70,68,15,70,70, + 15,70,72,15,70,74,15,70,75,15,70,76,15,70,77,15,70,78,15,70,79, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,76, 0, 0, 0, 0, 0, 0, 7,48,79, + 0, 0, 0,15,70,50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,70,60, 0, 0, 0, + 15,70,71, 0, 0, 0, 0, 0, 0, 7,48,74, 0, 0, 0, 7,53,66, 4,71,62, 7,53,71, + 7,53,65, 7,53,60, 4,71,64, 4,71,61, 7,53,64, 7,53,67, 7,53,73, 7,53,62, + 0, 0, 0, 0, 0, 0,15,72,62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,63, + 15,72,64,15,72,65,15,72,66,15,72,67, 0, 0, 0,15,72,68,15,72,69,15,72,70, + 15,72,71,15,72,72,15,72,73,15,72,75,15,72,76,15,72,77,15,72,78,15,72,79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,53,63, 0, 0, 0, 7,53,68, 0, 0, 0, + 7,53,69, 0, 0, 0, 0, 0, 0, 7,53,70, 7,53,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,72,74, + 0, 0, 0, 0, 0, 0, 5,84,55, 7,57,75, 7,57,74, 7,61,16, 0, 0, 0, 7,57,70, + 0, 0, 0, 0, 0, 0, 7,57,68,15,73,94, 0, 0, 0, 0, 0, 0,15,74, 1,15,74, 2, + 15,74, 3,15,74, 4,15,74, 5,15,74, 6,15,74, 7,15,74, 8,15,74, 9,15,74,10, + 15,74,11, 0, 0, 0, 0, 0, 0, 7,57,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,57,69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,54, + 5,86,62, 4,75, 8, 0, 0, 0, 5,86,60,15,75,15, 7,61,15, 7,61,13, 7,57,73, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,12, 0, 0, 0,15,74,92,15,74,93, + 15,75, 3,15,75, 4,15,75, 5,15,75, 6,15,75, 9,15,75,10,15,75,11,15,75,12, + 15,75,13,15,75,14, 7,61,14, 0, 0, 0, 7,61,17, 0, 0, 0, 0, 0, 0,15,75, 1, + 0, 0, 0,15,74,94,15,75, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,88,32, 7,63,80, + 7,63,81, 7,63,82, 7,63,79, 7,63,83, 0, 0, 0, 0, 0, 0,15,75,72, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,73,15,75,74,15,75,75, + 15,75,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,77,67, 7,65,55, 7,65,56, 0, 0, 0,15,75,77, + /* plane 2, page 140 */ + 0, 255, /* first, last */ + 15,76,28,15,76,29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,66,82, 7,66,77, 7,66,78, 7,66,84, 7,66,80, 7,66,79, 5,90,32, + 7,66,83, 7,66,81, 7,66,85, 0, 0, 0,15,76,50,15,76,51,15,76,52,15,76,53, + 15,76,54,15,76,55,15,76,56, 0, 0, 0,15,76,32, 5,90,33, 5,90,92, 7,67,93, + 7,67,91, 0, 0, 0,15,76,79, 0, 0, 0, 7,67,92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,77, 3, 7,68,72, 0, 0, 0, 0, 0, 0,15,77, 1, 0, 0, 0, 7,68,71, 7,68,73, + 15,77, 2,15,76,30, 7,69,40, 7,69,41, 0, 0, 0, 0, 0, 0,15,77, 9, 0, 0, 0, + 5,92, 1, 0, 0, 0, 0, 0, 0,15,77,21,15,77,24,15,77,25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,14,36, + 6, 9,20, 5,11,64, 5,22,31, 6,37,91, 5,22,30, 5,22,32, 6,37,90,15,24,89, + 0, 0, 0, 0, 0, 0, 6,37,89, 0, 0, 0, 6,37,88, 5,29,10, 5,29,11, 4,27,72, + 6,47,90, 6,47,91, 0, 0, 0,15,31,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,57,57, 6,57,56, 4,33,42, 6,57,54, 6,57,55, + 0, 0, 0,15,37,90, 5,35,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,35,79, + 5,42,74, 4,39,92, 6,67,54, 6,67,55, 0, 0, 0, 0, 0, 0, 5,42,75, 5,50, 1, + 5,50, 3, 5,57,25, 5,50, 2, 5,50, 4, 5,50, 5,15,56,69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,27, 7,20,78, 5,57,26, 0, 0, 0, 7,29, 6, + 7,20,77, 0, 0, 0, 7,20,80, 7,20,76, 0, 0, 0, 7,29, 9, 4,57,42, 5,63,48, + 4,57,43, 7,29,10, 7,29, 8, 0, 0, 0, 0, 0, 0, 7,29, 7, 7,36,35, 5,69,56, + 7,36,34, 5,69,55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,74,24, 5,74,22, 5,74,21, + 0, 0, 0, 0, 0, 0, 5,74,23, 5,78,25, 7,48,83, 0, 0, 0, 7,48,84, 0, 0, 0, + 4,71,68, 0, 0, 0, 7,53,74, 7,57,77, 7,57,78, 0, 0, 0, 7,57,76, 0, 0, 0, + 5,86,65, 5,86,64, 5,88,33, 7,63,84, 7,66,86, 7,68,74, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,11,65, 5,16,74, 5,16,75, 5,16,73, 0, 0, 0,15,18,71, 6,28,70, + 5,22,34, 5,22,33, 0, 0, 0,15,24,90, 0, 0, 0,15,24,91, 6,37,92, 5,29,19, + 5,29,17, 5,29,15, 4,27,74, 5,29,16, 4,27,76, 3,31,77, 5,29,12, 5,29,13, + 5,29,14, 6,47,94, 6,48, 1, 5,29,18, 0, 0, 0, 6,47,92, 0, 0, 0,15,31,88, + 15,31,89,15,31,90,15,31,91,15,31,92,15,31,93,15,32, 1, 0, 0, 0, 0, 0, 0, + 6,47,93, 0, 0, 0, 4,27,73, 4,33,44, 6,57,62, 4,33,50, 4,33,45, 4,33,43, + 15,37,94, 6,57,61, 5,35,84, 5,35,81, 5,35,83, 5,35,82, 6,57,59, 4,33,49, + /* plane 2, page 141 */ + 0, 252, /* first, last */ + 4,33,47, 6,57,60, 6,57,58, 0, 0, 0,15,37,93,15,38, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,42,83, 5,42,79, 5,42,81, + 4,39,94, 5,42,77, 4,40, 1, 5,42,84, 6,67,58, 5,42,80, 5,42,85, 4,39,93, + 5,42,82, 5,42,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,67,57, 0, 0, 0, 6,67,59, + 6,67,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,42,76, 0, 0, 0, 0, 0, 0, + 7,10,40, 5,50,13, 5,50, 8, 7,10,45, 5,50,10, 5,50, 7, 7,10,46, 4,46,41, + 5,50,12, 5,50, 9, 0, 0, 0, 7,10,44, 0, 0, 0,15,50,78,15,50,79,15,50,81, + 7,10,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,41, + 7,10,42, 7,10,43, 0, 0, 0, 0, 0, 0, 5,50, 6, 5,50,11, 5,50,14,15,50,80, + 4,52,48, 4,52,45, 5,57,29, 5,57,32, 7,20,82, 5,57,28, 0, 0, 0, 5,57,30, + 5,57,31, 7,20,85, 7,20,87, 7,20,89,15,56,70,15,56,71,15,56,72, 7,20,84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,20,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,20,86, 0, 0, 0, 4,52,46, 4,57,51, 4,57,49, 5,63,52, + 7,29,11, 5,63,49, 5,63,51, 5,63,53, 5,63,50, 7,29,13, 4,57,48, 7,29,12, + 4,57,44, 0, 0, 0, 7,29,14,15,61,48, 0, 0, 0, 7,29,15, 0, 0, 0, 7,29,16, + 0, 0, 0, 7,29,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,69,63, 5,69,62, 5,69,58, 4,62,19, 7,36,36, 5,69,59, 5,69,65, 5,69,64, + 7,36,38, 5,69,61, 5,69,57, 5,69,60,15,65,39,15,65,40,15,65,41,15,65,44, + 0, 0, 0, 0, 0, 0,15,65,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,36,37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,36,39, 0, 0, 0, 5,74,25, 7,43,30, 7,43,31, 4,65,77, + 5,74,26, 7,43,29, 4,65,78,15,68,38,15,68,39,15,68,40,15,68,41,15,68,42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,68,80, 5,78,31, 5,78,26, 5,78,29, + 5,78,28, 5,78,30, 5,78,32, 4,68,82, 7,48,88, 0, 0, 0, 5,74,27, 7,48,85, + 15,70,80,15,70,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,48,86, 0, 0, 0, + 0, 0, 0, 5,78,27, 7,48,87, 5,81,58, 5,78,33, 4,71,69, 5,81,57, 5,81,55, + 0, 0, 0,15,72,80,15,72,81,15,72,83,15,72,84,15,72,85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,81,60, 5,81,56, 5,84,56, 7,53,75, 0, 0, 0,15,74,15, + 0, 0, 0, 7,57,79, 0, 0, 0,15,74,12,15,74,13,15,74,14,15,74,16,15,74,17, + 0, 0, 0,15,75,16,15,75,17,15,75,18, 7,61,18, 0, 0, 0, 5,88,34,15,75,78, + 15,75,79, 0, 0, 0, 7,63,86, 7,63,85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,89,52, 4,77, 9, 4,77,10, 7,65,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,66,87, + 7,66,88, 0, 0, 0, 0, 0, 0, 5,90,93,15,77,10, + /* plane 2, page 142 */ + 15, 255, /* first, last */ + 6,14,37, + 5, 2, 2, 5, 1,94, 4, 2, 3, 5, 2, 3, 4, 2, 2, 5, 2, 1, 5, 3,14, 4, 3,20, + 6, 5,61, 0, 0, 0, 5, 4,93, 4, 5,12, 4, 5,13, 5, 4,94, 5, 4,92, 0, 0, 0, + 15, 5,26,15, 5,27,15, 5,28,15, 5,29,15, 5,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15, 5,31, 0, 0, 0, 5, 7,85, 6,14,39, 5, 7,86, 5, 7,88, 5, 7,89, + 4, 8,16, 5, 7,87, 6,14,38, 6,14,40, 0, 0, 0,15, 8,93, 0, 0, 0, 0, 0, 0, + 15, 8,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,11,66, 6,20,80, 6,20,83, 4,11,60, 5,11,69, 6,20,81, 6,67,61, + 6,20,85, 6,20,86, 6,20,87, 6,20,82, 5,11,67, 0, 0, 0, 6,20,88,15,13,59, + 15,13,60,15,13,61, 0, 0, 0, 6,20,84, 0, 0, 0, 6,20,79, 0, 0, 0, 0, 0, 0, + 6,28,73, 5,16,79, 5,11,70, 6,28,72, 5,16,76, 5,16,78, 6,28,78, 6,28,75, + 6,28,79, 5,16,77, 6,28,74, 6,28,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,28,76, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,18,72,15,18,73,15,18,74, + 15,18,75,15,18,76,15,18,77,15,18,78, 0, 0, 0, 5,22,35, 6,38, 8, 6,38, 1, + 4,21,94, 4,22, 2, 4,22, 1, 5,22,36, 6,38, 3, 6,38, 4, 6,38,11, 6,38,10, + 6,67,62, 6,38, 6, 6,38, 2, 6,38, 9, 6,38, 7, 7,20,91, 6,38, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,24,92,15,24,93,15,24,94,15,25, 1,15,25, 2,15,25, 3, + 15,25, 4,15,25, 5,15,25, 6,15,25, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,29,24, + 5,29,29, 5,29,25, 5,29,26, 5,29,28, 6,48, 5, 6,48, 3, 5,29,20, 5,29,21, + 5,29,23, 6,48, 4, 6,48, 9, 7,29,20, 6,48, 7, 5,29,27, 6,48, 8, 6,48, 6, + 0, 0, 0,15,32, 2, 0, 0, 0, 0, 0, 0,15,32, 3, 7,29,18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,29,22, + 6,57,74, 5,35,91, 5,35,88, 6,57,66, 6,57,73, 6,57,71, 5,35,92, 5,35,89, + 5,35,87, 6,67,63, 6,57,67, 6,57,69, 5,35,93, 5,35,90, 6,57,70, 7,36,41, + 6,57,68, 7,36,40, 5,35,86, 6,57,63, 6,57,75, 6,57,64, 5,35,85, 0, 0, 0, + 6,57,65, 0, 0, 0,15,38, 2,15,38, 3,15,38, 4,15,38, 5,15,38, 6,15,38, 7, + 15,38, 8,15,38, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,57,72, 0, 0, 0, + 6,57,76, 0, 0, 0, 7,29,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,67,68, + 6,67,66, 6,67,70, 4,40, 7, 4,40, 6, 5,50,15, 4,40, 8, 4,40, 9, 5,42,88, + 6,67,67, 6,67,64, 4,40, 5, 5,42,89, 5,42,90, 6,67,69, 6,67,71, 7,43,33, + /* plane 2, page 143 */ + 0, 255, /* first, last */ + 15,45,14,15,45,15,15,45,16,15,45,17,15,45,18,15,45,19, 6,67,65, 0, 0, 0, + 5,42,87, 0, 0, 0, 5,50,22, 5,50,20, 5,50,21, 7,10,53, 5,50,24, 5,50,18, + 5,50,17, 7,10,47, 5,50,19, 5,50,23, 5,50,16, 7,48,90, 7,10,51, 7,10,49, + 7,10,48, 7,10,50, 0, 0, 0,15,50,82,15,50,83,15,50,84,15,50,85,15,50,86, + 15,50,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,57,33, 5,57,34, 4,52,52, 7,20,92, 5,57,36, 5,57,35, + 7,20,94, 7,48,89, 0, 0, 0,15,56,73,15,56,74,15,56,75,15,56,76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,74,28, 7,20,93, 5,63,54, + 5,63,55, 7,29,22, 7,29,23, 7,29,21, 5,84,57,15,61,49,15,61,50,15,61,51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61,52, 5,69,66, 7,36,44, 4,62,20, + 7,36,42, 7,36,43,15,65,45,15,65,46,15,65,47,15,65,48, 5,74,29, 7,43,35, + 7,53,76, 7,43,37, 0, 0, 0, 0, 0, 0,15,68,44, 5,88,35, 0, 0, 0, 7,43,34, + 7,43,36, 7,63,87,15,70,82,15,70,83, 0, 0, 0, 7,49,82, 5,81,61, 7,53,78, + 7,53,77, 0, 0, 0, 7,66,89, 7,66,90, 7,57,80, 0, 0, 0, 7,61,41, 0, 0, 0, + 0, 0, 0, 7,63,88, 5,90,94, 5,91, 1, 7,70,23, 7,70, 8, 6,57,77, 0, 0, 0, + 4,46,43, 7,10,55,15,50,89,15,50,88, 5,57,37, 7,21, 1, 0, 0, 0, 4,57,54, + 7,36,45, 7,36,46, 5,74,30, 7,48,91, 0, 0, 0, 6,28,80, 6,28,81, 6,28,82, + 6,38,12, 5,22,37, 4,22, 3, 6,38,14, 0, 0, 0, 6,38,13, 0, 0, 0, 6,38,16, + 0, 0, 0, 6,38,15, 4,27,80, 6,48,12, 4,27,78, 6,48,10, 6,57,83, 6,48,16, + 6,48,14, 6,48,11, 4,27,81, 4,27,79, 6,48,15, 6,48,13, 0, 0, 0, 0, 0, 0, + 6,57,91, 5,35,94, 6,57,78, 6,57,81, 6,57,87, 6,57,85, 6,57,90, 6,57,82, + 6,57,80, 6,57,84, 6,57,89, 6,57,88, 0, 0, 0, 0, 0, 0, 6,57,79, 6,57,86, + 0, 0, 0, 0, 0, 0, 6,67,84, 6,67,82, 5,42,91, 6,67,75, 6,67,76, 6,67,86, + 6,67,72, 6,67,87, 6,67,80, 4,40,10, 6,67,85, 6,67,79, 5,42,92, 6,67,81, + 6,67,73, 5,42,93, 4,40,11, 6,67,74,15,45,20,15,45,21, 6,67,83, 0, 0, 0, + 6,67,88, 6,67,77, 0, 0, 0, 7,10,61, 7,10,59, 7,10,68, 7,10,63, 7,10,60, + 5,50,26, 7,10,62, 7,10,70, 7,10,66, 7,10,64, 7,10,65, 7,10,67, 7,10,58, + 7,10,56, 5,50,25, 7,10,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,71, 0, 0, 0, + 4,57,55, 4,52,53, 5,57,39, 7,21, 9, 7,21, 4, 7,21,15, 7,21, 2, 7,21,13, + 7,21, 8, 7,21, 5, 7,21,12, 7,21,10, 7,21, 6, 5,57,38, 7,21,16, 4,52,54, + 7,21,11, 7,21,19, 7,21, 7, 7,10,57, 7,21,20, 7,21,17, 7,21, 3, 0, 0, 0, + 0, 0, 0, 7,21,18,15,56,77, 0, 0, 0, 0, 0, 0, 7,21,14,15,50,90, 4,57,57, + /* plane 2, page 144 */ + 0, 255, /* first, last */ + 7,29,29, 7,29,27, 7,29,37, 7,29,28, 7,29,30, 7,29,41, 7,29,26, 7,29,34, + 7,29,25, 7,29,24, 7,29,31, 5,63,56, 7,29,39, 7,29,33, 7,29,32, 7,29,35, + 7,29,40, 7,21,22,15,61,53,15,61,55, 7,29,36, 7,29,38, 0, 0, 0, 7,36,48, + 7,36,54, 7,36,50, 7,36,51, 7,36,47, 5,69,67, 7,36,55, 7,36,53, 5,69,68, + 7,36,49, 7,36,52, 0, 0, 0, 0, 0, 0, 7,43,42, 7,43,39, 7,43,43, 7,43,40, + 5,74,31, 7,43,46, 4,65,79, 5,74,32, 7,43,38, 7,43,44, 7,43,45, 4,65,80, + 7,43,41, 7,43,47, 0, 0, 0, 0, 0, 0, 7,49, 3, 7,49, 7, 7,48,93, 7,49,10, + 7,49, 4, 7,49,11, 7,49, 8, 7,48,92, 5,78,34, 7,49, 5, 7,49, 6, 5,78,35, + 7,49, 2,15,70,84, 7,48,94, 0, 0, 0, 0, 0, 0, 7,49,12, 7,49, 9, 7,53,84, + 4,71,72, 7,53,82, 7,53,79, 7,53,86, 7,53,80, 7,53,85, 7,53,83, 7,53,87, + 7,49, 1,15,72,86, 7,53,81, 7,57,81, 7,57,82, 4,73,55, 7,57,85, 7,57,86, + 7,57,84,15,74,18, 0, 0, 0, 7,57,83, 7,61,24, 7,61,25, 7,61,26, 4,75,11, + 7,61,23, 7,61,19, 7,61,20, 7,61,21, 7,61,22, 0, 0, 0, 0, 0, 0, 7,63,92, + 7,63,90, 7,63,91, 0, 0, 0, 7,63,89, 7,65,58,15,76,33, 0, 0, 0, 0, 0, 0, + 7,67,94, 0, 0, 0, 7,68,75, 0, 0, 0, 0, 0, 0, 7,70,32,15,13,62, 5,16,80, + 15,18,80, 6,38,18, 6,38,19, 4,22, 5, 6,38,17,15,25, 8,15,25, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,29,32, 5,29,30, 5,29,33, 5,29,31, 4,27,83, 6,48,19, + 4,27,82, 6,48,18,15,32, 5, 0, 0, 0,15,32, 7,15,32, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,33,56, 5,36, 5, 5,36, 2, 5,36, 1, 5,36, 4, 5,36, 3, + 6,57,92, 0, 0, 0,15,38,11,15,38,12,15,38,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,36, 6, 5,43, 2, 4,40,16, 5,43, 3, 5,43, 1, 5,42,94, 4,40,12, + 4,40,15, 6,67,93, 4,40,18, 0, 0, 0, 6,67,92, 6,67,94,15,45,23, 0, 0, 0, + 0, 0, 0, 0, 0, 0,15,45,24, 6,67,90, 0, 0, 0, 6,67,89, 0, 0, 0, 7,10,74, + 7,10,73, 5,50,37, 5,50,32, 5,50,33, 5,50,31, 5,50,30, 5,50,35, 5,50,29, + 4,52,55, 5,50,28, 7,10,75, 7,10,76, 0, 0, 0,15,38,10,15,50,91,15,50,92, + 15,50,93,15,50,94,15,51, 1, 0, 0, 0, 7,10,72, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,50,36, 5,50,34, 5,63,57, 7,21,27, 4,52,59, 5,57,46, 5,57,43, 4,52,58, + 7,21,24, 5,57,45, 5,57,42, 7,21,26, 5,57,41, 7,21,25, 7,21,23, 0, 0, 0, + 5,57,40, 7,21,28, 0, 0, 0,15,56,78, 0, 0, 0, 0, 0, 0,15,56,79,15,56,81, + 15,56,82,15,56,83,15,56,84,15,56,85, 0, 0, 0,15,56,80, 0, 0, 0,15,53,68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,44, 4,57,60, 4,57,58, 4,57,59, + 5,63,58, 4,57,65, 5,63,60, 0, 0, 0, 4,57,62, 7,29,42, 5,69,72, 7,29,43, + /* plane 2, page 145 */ + 0, 255, /* first, last */ + 7,29,45, 5,63,59, 0, 0, 0,15,61,57, 7,29,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,29,46, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,61,58, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,63,61, 5,69,76, + 5,69,79, 7,36,63, 7,36,67, 5,69,73, 7,36,62, 5,69,70, 7,36,69, 7,36,66, + 4,62,23, 5,69,69, 5,69,71, 7,36,65, 7,36,58, 7,36,61, 5,69,78, 7,36,59, + 0, 0, 0,15,65,49, 0, 0, 0, 7,36,68, 0, 0, 0, 7,36,57, 7,36,60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,69,75, + 5,69,77,15,61,56, 5,69,74, 5,74,39, 5,74,33, 5,74,37, 5,74,34, 5,74,35, + 4,65,82, 5,74,38, 5,74,36, 5,74,41, 4,65,81, 7,43,48, 7,43,53, 7,43,49, + 0, 0, 0, 5,74,40, 7,43,51,15,68,46, 0, 0, 0, 0, 0, 0, 7,43,55, 7,43,54, + 7,43,52, 0, 0, 0, 7,43,50, 7,43,56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,49,14, 4,68,84, 7,49,22, + 4,68,86, 5,78,36, 4,71,77, 4,68,88, 7,49,20, 7,49,19, 5,78,37, 4,68,90, + 4,68,87, 4,68,89, 7,49,15, 7,49,17, 7,49,18,15,70,85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,49,21, 7,49,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,49,16, 7,49,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,71,74, 4,71,73, 7,53,88, 5,81,62, + 5,81,63, 4,71,75, 4,71,76, 7,53,90, 5,81,64, 5,81,65, 7,53,93, 7,53,89, + 7,53,94, 7,53,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,84,60, 5,84,63, 4,73,57, 7,57,88, 5,84,61, 7,57,89, 7,57,90, + 5,84,58, 0, 0, 0, 5,84,62, 5,84,59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,57,87, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,86,66, 7,61,27, 7,61,28, 0, 0, 0, + 0, 0, 0,15,75,19, 0, 0, 0, 5,86,67, 0, 0, 0, 5,88,36, 4,76,18, 4,76,17, + 7,63,93, 7,63,94, 7,64, 1,15,75,80, 0, 0, 0, 4,77,12, 5,89,54, 4,77,11, + 5,89,53, 0, 0, 0, 7,65,59, 0, 0, 0, 0, 0, 0, 5,89,55, 0, 0, 0, 5,90,36, + 7,66,91, 5,90,35, 7,66,92,15,76,57, 7,67, 3, 0, 0, 0, 0, 0, 0, 5,90,34, + 7,68,76, 4,78,30, 7,69,43, 7,69,42, 7,69,44, 0, 0, 0, 5,91,76, 0, 0, 0, + 0, 0, 0, 7,70,13, 7,70,46, 7,70,49, 4,78,60, 4,22, 6, 0, 0, 0, 6,48,20, + 15,38,14,15,38,15,15,38,16, 6,57,93, 4,40,22, 7,12,36, 7,21,29, 5,58,84, + 7,36,70,15,68,47, 0, 0, 0, 5,81,66,15,75,81, 0, 0, 0, 6,28,84, 6,14,41, + 6,28,83, 4,22, 7, 6,38,20, 4,22, 9,15,25,13, 6,48,21, 5,29,34, 4,27,85, + 6,48,23, 6,48,22,15,32, 8,15,32, 9, 0, 0, 0, 6,58, 1, 6,57,94,15,45,27, + 4,46,45, 7,10,78, 7,10,77, 0, 0, 0, 7,21,30, 0, 0, 0, 7,49,24, 7,49,25, + /* plane 2, page 146 */ + 3, 255, /* first, last */ + 6,48,25, 6,48,26, 6,48,24, 4,33,57, 4,33,59, + 5,36, 8, 5,36, 7, 6,58, 3, 0, 0, 0, 6,58, 2, 6,68, 2, 5,43, 5, 4,40,25, + 0, 0, 0, 6,68, 1, 5,43, 4,15,45,28, 0, 0, 0, 0, 0, 0, 6,68, 3, 0, 0, 0, + 0, 0, 0, 4,46,46, 5,50,38, 5,50,40, 5,50,39, 7,10,80, 0, 0, 0, 7,10,79, + 15,56,87, 5,57,48, 5,57,47, 5,57,52, 5,57,49, 5,57,50, 5,57,51,15,56,86, + 7,21,31, 0, 0, 0, 0, 0, 0, 7,29,47, 5,63,63, 5,63,64, 5,63,66, 5,63,65, + 15,61,59, 7,29,49, 5,69,82, 7,36,71, 5,69,80, 5,69,81, 4,62,25, 0, 0, 0, + 5,74,43, 5,74,42, 0, 0, 0, 5,78,39, 5,78,38, 7,45,48, 7,49,26, 0, 0, 0, + 5,76,38, 5,81,68, 7,54, 2, 5,81,70, 5,81,69,15,72,89, 0, 0, 0, 7,54, 1, + 7,54, 4, 7,54, 3, 7,57,91, 7,57,92, 7,61,29, 5,86,68,15,75,20, 0, 0, 0, + 0, 0, 0, 7,64, 2, 0, 0, 0, 0, 0, 0, 5,90,37, 0, 0, 0, 7,68, 1, 0, 0, 0, + 0, 0, 0, 7,68,78, 7,68,77,15,25,14, 0, 0, 0, 5,29,35, 4,27,88, 6,48,27, + 0, 0, 0, 5,36,12, 5,36,11, 6,58, 6, 6,58, 9, 5,36,10, 6,58, 7, 5,36, 9, + 6,58, 5, 6,58,11, 6,58,10, 4,33,60, 4,33,62, 0, 0, 0,15,38,17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,43, 7, 4,40,28, 5,43, 6, 6,68, 7, 6,68, 5, 5,43, 8, 5,43, 9, 4,40,30, + 5,43,12, 5,43,10, 5,43,13, 5,43,11, 6,68, 9, 4,40,31, 0, 0, 0, 0, 0, 0, + 6,68, 8, 6,68, 4, 0, 0, 0, 6,68, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,10,83, 5,50,41, 7,10,87, 7,10,86, 4,46,49, 7,10,89, 5,50,42, 4,46,50, + 7,10,85, 4,46,51, 5,50,45, 4,46,48, 5,50,44, 5,50,46, 7,10,84, 5,50,43, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,88, 7,10,82, 0, 0, 0, + 0, 0, 0, 7,21,36, 5,57,53, 5,57,56, 4,52,70, 4,52,62, 4,52,69, 5,57,54, + 5,57,55, 0, 0, 0, 7,21,35, 7,21,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,21,32, + 7,21,33, 7,21,37, 0, 0, 0, 0, 0, 0, 7,21,38, 0, 0, 0, 0, 0, 0, 7,29,56, + 7,29,58, 5,63,67, 5,63,73, 4,57,70, 5,63,69, 7,29,51, 4,57,71, 7,21,34, + 5,63,77, 7,29,55, 4,57,69, 7,29,57, 5,63,71, 5,63,74, 7,29,53, 5,63,75, + 7,29,59, 7,21,40, 5,63,72, 7,29,52, 7,29,60,15,61,60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,29,50, 0, 0, 0, 5,63,76, 5,63,70, 4,62,36, + 5,69,92, 5,69,84, 4,62,26, 5,69,86, 5,70, 2, 7,36,74, 7,36,72, 4,62,31, + 5,69,87, 4,62,32, 7,36,77, 7,36,80, 5,70, 1, 7,36,79, 4,62,29, 5,70, 3, + 7,36,81, 7,36,82, 7,36,78,15,65,51,15,65,52, 5,63,68, 7,36,76, 0, 0, 0, + 7,36,75, 5,69,88, 5,70, 4, 0, 0, 0, 7,36,73, 5,69,85, 5,69,90, 5,69,89, + /* plane 2, page 147 */ + 0, 251, /* first, last */ + 5,69,93, 0, 0, 0, 0, 0, 0, 4,65,90, 5,74,49, 5,74,52, 5,74,47, 4,65,89, + 5,74,45, 7,43,58, 5,74,53, 7,43,67, 5,74,46, 4,65,88, 7,43,65, 4,65,86, + 7,43,62, 4,65,85, 7,43,66, 5,74,48, 7,43,64,15,68,48,15,68,50,15,68,51, + 0, 0, 0, 0, 0, 0, 7,43,59, 7,43,60, 0, 0, 0, 5,74,51, 0, 0, 0, 0, 0, 0, + 5,74,50, 7,43,57, 5,74,44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,69, 4, 5,78,46, + 4,68,93, 5,78,47, 5,78,42, 7,49,27, 5,78,40, 7,49,29, 4,69, 1, 5,78,44, + 4,69, 2, 4,69, 5, 5,78,45, 7,49,33, 0, 0, 0, 0, 0, 0, 7,49,28,15,70,88, + 0, 0, 0, 7,49,30, 7,49,35, 7,49,32, 0, 0, 0, 0, 0, 0, 5,78,43, 7,49,31, + 5,78,48, 4,69, 6, 7,49,34, 5,81,77, 7,54, 8, 4,71,79, 7,54,10, 7,54,11, + 0, 0, 0, 5,81,74, 5,81,75, 5,81,76, 0, 0, 0, 0, 0, 0, 5,81,71, 5,81,72, + 0, 0, 0, 7,54, 9,15,70,87, 5,84,64, 7,58, 6, 7,57,93, 4,73,61, 5,84,65, + 7,58, 5, 7,58, 3, 7,57,94, 7,58, 4, 5,84,67, 5,84,68, 7,58, 1, 7,58, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,84,69, 5,86,69, 5,86,72, 5,86,70, + 7,61,30, 5,86,73, 5,86,71, 7,61,33, 0, 0, 0, 0, 0, 0, 7,61,31, 7,61,34, + 0, 0, 0, 7,61,32, 5,88,38, 5,89,56, 7,64, 3, 5,88,37, 0, 0, 0, 5,88,39, + 7,65,62, 7,65,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,61, 5,90,38, + 7,66,94, 7,67, 2, 5,89,57, 0, 0, 0, 7,67, 1, 7,66,93, 0, 0, 0, 5,91, 2, + 7,68,80, 7,68,79, 5,91,44, 7,69,73, 5,92,21, 7,70,14, 7,70,25, 7,70,24, + 0, 0, 0, 5,92,44, 5,29,36, 4,33,64, 4,33,66, 6,58,12, 0, 0, 0, 5,36,13, + 6,68,11, 5,43,15, 5,43,17, 5,43,14, 5,43,16, 6,68,10,15,45,29, 0, 0, 0, + 0, 0, 0, 5,43,18, 0, 0, 0, 0, 0, 0, 4,46,53, 5,50,48, 4,46,52, 4,46,54, + 7,10,91, 7,10,90, 7,10,92, 7,10,93, 7,10,94, 5,50,47, 5,50,49, 5,57,57, + 7,21,41, 7,21,42, 5,57,60, 5,57,61, 0, 0, 0, 5,57,59, 7,21,43, 5,57,58, + 4,57,73, 7,29,62, 5,63,78, 7,29,63, 4,57,76, 4,57,74, 5,63,79, 5,63,80, + 15,61,61, 7,29,61, 0, 0, 0, 7,29,64, 0, 0, 0, 7,36,86, 7,36,83, 4,62,38, + 7,36,84, 7,29,65, 5,70, 5, 7,36,88, 0, 0, 0, 0, 0, 0, 7,36,85, 7,43,68, + 7,43,70, 7,43,73, 7,43,69, 7,43,72, 7,43,71, 7,49,36, 5,74,54, 5,74,55, + 7,49,37, 7,49,38, 4,69, 8,15,70,89, 0, 0, 0, 0, 0, 0, 5,78,50, 5,78,49, + 5,81,78, 5,81,80, 5,81,82, 4,71,84, 7,54,12, 5,81,79, 5,81,81, 0, 0, 0, + 7,58, 7, 4,73,63, 5,84,70, 7,58, 8, 7,58, 9, 5,84,71, 7,61,35, 7,61,38, + 7,61,37, 7,61,36, 4,76,21, 0, 0, 0, 7,65,63, 5,90,39, 7,68, 4, 7,68, 2, + 7,68, 3, 5,91,45, 5,91,77, 5,92, 2, + /* plane 2, page 148 */ + 1, 254, /* first, last */ + 5,36,14, 6,58,13, 5,50,50, 7,21,44, 4,57,77, 0, 0, 0, 7,29,66, + 0, 0, 0, 7,43,76, 7,49,40, 4,69,11, 5,81,83, 7,49,39, 0, 0, 0, 7,54,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,58,10, 7,61,40, 7,61,39, 7,65,64,15,32,12, + 5,36,16, 5,36,15, 5,43,19, 4,40,37, 5,43,20, 0, 0, 0, 5,50,58, 7,11, 1, + 5,50,52, 5,50,55, 7,11, 2, 5,50,53, 5,50,54, 5,50,57, 5,50,51, 4,52,75, + 5,50,56, 0, 0, 0,15,56,89, 5,57,62, 7,21,45, 7,29,67, 5,63,81, 0, 0, 0, + 5,63,82, 5,70, 6, 5,70, 7, 0, 0, 0, 5,70, 8, 4,66, 1, 5,74,56, 5,74,57, + 0, 0, 0, 7,49,41, 7,49,42, 5,78,52, 5,78,51, 0, 0, 0, 5,78,53, 7,54,14, + 5,81,84, 5,70, 9, 5,84,72, 5,84,73, 0, 0, 0, 4,73,65,15,74,19, 7,61,42, + 4,76,22, 5,91, 3, 5,92,31, 6,20,91, 6,38,21, 5,22,38, 0, 0, 0, 0, 0, 0, + 5,29,42, 5,29,40, 5,29,41, 5,29,38, 4,27,93, 5,29,37, 4,27,92, 6,48,28, + 4,27,90, 4,33,76, 5,36,26, 4,33,75, 5,36,17, 5,36,25, 6,58,15, 4,33,73, + 5,43,27, 5,36,23, 4,33,70, 4,33,71, 4,33,74, 6,58,18, 5,36,22, 5,36,18, + 6,58,16, 6,58,17, 6,58,14,15,38,19, 5,36,19, 0, 0, 0, 5,36,24, 0, 0, 0, + 5,43,29, 6,68,17, 6,68,18, 5,43,23, 5,43,36, 5,43,24, 4,40,41, 4,40,40, + 5,43,26, 5,43,22, 4,40,47, 5,43,34, 5,43,25, 7,11,11, 5,43,35, 0, 0, 0, + 6,68,21, 6,68,19, 6,68,14, 5,43,28, 5,43,33,15,45,30, 6,68,13, 5,43,32, + 6,68,12, 6,68,22, 5,43,21, 6,68,15, 6,68,20, 0, 0, 0, 0, 0, 0, 5,50,61, + 4,46,59, 7,11, 5, 7,11,16, 5,50,60, 5,50,59, 4,46,56, 7,11, 4, 7,11,10, + 4,40,42, 7,11,14, 5,50,62, 4,46,62, 7,11,13, 7,11, 9, 7,21,47, 7,11,12, + 15,51, 3,15,51, 4, 7,11, 7, 0, 0, 0, 7,11, 8, 0, 0, 0, 7,11,15, 7,11,17, + 0, 0, 0, 0, 0, 0, 7,11, 3, 7,11, 6, 0, 0, 0, 5,50,63, 4,52,76, 5,57,65, + 4,52,78, 5,57,73, 7,21,56, 5,57,72, 5,57,70, 7,21,57, 7,21,55, 5,57,69, + 5,57,67, 7,21,59, 7,21,48, 5,57,74, 5,57,66, 5,57,75, 5,57,68, 5,57,71, + 4,52,81, 7,21,46, 5,57,64, 7,21,58, 4,52,82, 7,21,54, 7,21,60, 0, 0, 0, + 15,45,32,15,56,90,15,56,92,15,56,93,15,57, 1,15,57, 2,15,57, 3, 0, 0, 0, + 0, 0, 0, 7,21,50, 0, 0, 0, 7,21,51, 7,21,52, 7,21,53, 5,57,76, 0, 0, 0, + 5,57,63,15,56,94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,77, 4,57,85, 4,57,81, + 4,57,78, 7,29,69, 5,63,87, 4,57,89, 5,63,88, 4,57,84, 5,63,86, 5,63,83, + 5,63,85, 4,57,79, 5,63,91, 7,29,74, 4,57,82, 7,29,76, 5,63,84, 7,29,71, + 4,57,88, 7,29,75,15,61,62,15,61,63,15,61,64,15,61,65,15,61,66,15,61,67, + 7,29,68, 0, 0, 0, 7,29,70, 5,63,89, 5,63,90, 7,29,72, 7,29,77, + /* plane 2, page 149 */ + 0, 251, /* first, last */ + 5,70,10, 4,62,42, 5,70,16, 5,70,14, 4,66, 4, 5,70,13, 5,70,11, 7,36,91, + 5,70,12, 4,62,40, 5,70,17, 5,70,15, 7,36,92,15,65,53,15,65,54,15,65,55, + 15,65,56, 0, 0, 0, 0, 0, 0, 7,36,89, 7,36,90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,43,86, 5,74,61, 7,43,80, 7,43,77, 5,74,62, 4,66,14, 7,43,82, + 5,74,60, 5,78,54, 5,74,59, 5,74,58, 7,43,84, 7,43,79, 4,66,10, 7,43,78, + 7,43,85, 7,43,81, 0, 0, 0, 0, 0, 0,15,68,52,15,68,53, 0, 0, 0, 7,43,87, + 7,43,83, 0, 0, 0, 0, 0, 0, 4,69,14, 4,69,13, 5,78,59, 5,78,57, 7,49,46, + 5,78,58, 4,69,18, 7,49,45, 4,69,19, 5,78,56, 7,49,43, 7,49,47,15,70,90, + 4,69,20, 0, 0, 0, 7,49,48, 0, 0, 0, 0, 0, 0, 7,49,44, 5,78,55, 0, 0, 0, + 7,48,44, 5,81,85, 5,81,86, 7,54,15, 5,81,88, 7,54,24, 7,58,17, 4,71,90, + 4,71,88, 7,54,19, 7,54,17, 7,54,22, 5,81,87, 5,81,89, 5,81,90, 7,54,16, + 7,54,20,15,72,90,15,72,91,15,72,92, 0, 0, 0, 7,54,23, 7,54,21, 7,58,16, + 5,84,76, 5,84,75, 7,58,13, 7,58,15, 5,84,74,15,74,20, 7,58,11, 0, 0, 0, + 0, 0, 0, 7,58,14, 0, 0, 0, 7,58,12, 7,61,50, 7,61,49, 7,61,47, 5,86,76, + 0, 0, 0, 5,86,77, 4,75,14, 5,86,74, 7,61,45, 4,75,15, 7,61,46,15,75,21, + 7,61,48, 0, 0, 0, 7,61,44, 0, 0, 0, 7,61,43, 0, 0, 0, 4,76,24, 7,64, 4, + 5,86,75, 4,76,23, 0, 0, 0,15,75,82, 7,64, 5, 0, 0, 0, 4,77,14, 5,89,58, + 0, 0, 0, 0, 0, 0, 5,90,40, 7,67, 4, 5,90,41, 7,67, 5, 7,67, 6, 4,78, 3, + 7,68, 5, 0, 0, 0, 0, 0, 0, 7,69,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,38,22, 6,48,31, 4,28, 1, 6,48,29, 5,29,43, 0, 0, 0,15,32,14, + 0, 0, 0, 6,48,30, 5,36,27, 5,36,32, 4,33,79, 5,36,29, 5,36,30, 6,58,20, + 6,58,22, 5,36,28, 0, 0, 0, 0, 0, 0, 4,33,80, 0, 0, 0, 6,58,21, 0, 0, 0, + 6,51,19, 0, 0, 0, 5,36,31, 6,58,23, 4,40,56, 5,43,40, 4,40,53, 5,43,39, + 5,43,38, 5,43,37, 4,40,51, 6,68,23, 4,40,50, 6,68,27, 6,68,25, 0, 0, 0, + 0, 0, 0, 6,68,24, 0, 0, 0, 0, 0, 0, 4,46,63, 5,50,66, 4,46,66, 7,11,20, + 7,11,19, 7,11,18, 5,50,65, 7,11,21,15,51, 5,15,51, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,57,79, 5,57,87, 5,57,80, 7,21,61, 7,21,64, + 5,57,78, 5,57,83, 5,57,86, 7,21,63, 0, 0, 0, 7,21,65, 5,57,84, 5,57,85, + 7,21,62,15,57, 5, 5,57,82, 5,57,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,29,81, 4,58, 5, 5,64, 5, 5,64, 6, 4,57,91, 5,63,92, 7,29,80, 4,58, 4, + 5,70,18, 5,64, 2, 4,58, 3, 5,63,94, 5,64, 1, 5,64, 4, 5,63,93, 5,64, 3, + 7,29,78, 0, 0, 0,15,61,68,15,61,69, + /* plane 2, page 150 */ + 1, 255, /* first, last */ + 7,29,82, 0, 0, 0, 7,29,79, 0, 0, 0, 4,62,51, 7,37, 2, 7,37, 4, + 5,70,23, 7,37, 6, 5,70,20, 5,70,24, 4,62,52, 5,70,26, 4,66,17, 5,70,21, + 7,37, 5, 5,70,22, 5,70,25, 5,70,19,15,65,57, 7,37, 8, 7,37, 3, 7,37, 1, + 0, 0, 0, 7,37, 7, 7,36,93, 0, 0, 0, 5,74,63, 4,66,19, 4,66,20, 4,66,21, + 5,74,64, 7,43,89,15,68,54,15,68,55, 7,43,88, 7,43,90, 7,43,91, 7,43,92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,62, 5,78,65, 5,78,64, + 4,69,21, 5,78,60, 4,69,23, 5,78,63,15,70,91, 5,78,66, 5,78,61, 4,69,24, + 7,54,32, 4,71,93, 4,72, 1, 5,81,91, 7,54,25, 5,81,92, 7,54,28, 7,54,26, + 15,72,93, 7,54,31, 7,54,33, 7,54,34, 7,54,29, 7,54,30, 7,54,27, 0, 0, 0, + 7,58,18,15,74,21, 7,58,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,51, 0, 0, 0, + 0, 0, 0, 5,88,41, 4,76,27, 7,64, 6, 7,64, 7, 0, 0, 0, 5,89,59, 7,65,65, + 0, 0, 0, 5,89,60, 4,77,15, 4,77,70, 5,90,42, 5,91, 4, 7,68, 6,15,77, 4, + 0, 0, 0, 5,92,39, 0, 0, 0, 0, 0, 0, 7,70,53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,28,85, 5,32,25, 0, 0, 0, 7,11,22, 0, 0, 0, 7,43,93, 5,74,65, + 0, 0, 0, 0, 0, 0, 7,54,35, 0, 0, 0, 4,73,68, 5,84,77, 0, 0, 0, 0, 0, 0, + 6,20,92, 6,20,93, 6,21, 2, 6,20,94, 5,16,81, 6,28,86, 6,28,88, 5,29,44, + 5,22,42, 5,22,39, 6,38,26, 6,38,24, 5,22,41, 6,38,25, 6,38,27, 6,48,32, + 0, 0, 0, 0, 0, 0, 5,22,40, 6,48,33, 0, 0, 0, 6,48,38, 4,28, 2, 5,29,45, + 6,48,36, 6,48,37, 4,28, 6, 5,29,46, 6,58,24, 5,29,47, 6,48,34, 0, 0, 0, + 15,32,15, 0, 0, 0, 0, 0, 0, 6,48,35, 4,28, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,58,34, 6,58,25, 5,36,34, 5,36,36, 5,36,33, 5,36,39, 4,33,86, 5,36,35, + 6,68,35, 5,36,37, 6,58,28, 6,58,27, 6,68,29, 4,33,83, 6,58,26, 6,68,30, + 6,58,30, 5,36,40, 6,58,33, 5,50,67, 0, 0, 0,15,38,23, 0, 0, 0, 6,58,32, + 6,58,31, 6,68,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,33,88, 5,36,38, 0, 0, 0, + 6,68,31, 7,11,23, 6,68,36, 5,43,45, 5,43,41, 6,68,37, 5,43,42, 4,40,58, + 6,68,34, 5,43,43, 7,11,25, 6,68,33, 0, 0, 0, 0, 0, 0,15,38,22,15,51, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,11,26, 0, 0, 0, 4,46,75, 7,11,32, 4,46,74, + 5,50,73, 5,50,68, 5,57,89, 4,46,72, 5,50,70, 5,50,75, 5,50,72, 4,46,76, + 5,50,74, 7,11,28, 5,50,69, 7,11,27, 7,29,83, 5,50,71, 7,11,30, 7,11,29, + 0, 0, 0,15,51, 7, 0, 0, 0, 5,57,88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,11,31, 5,58, 3, 4,58, 6, 5,58, 4, 4,52,91, 7,21,70, 7,21,74, + /* plane 2, page 151 */ + 0, 248, /* first, last */ + 5,64, 7, 5,57,91, 7,21,73, 5,57,94, 7,21,71, 5,57,92, 7,21,79, 4,52,89, + 7,21,75, 7,21,80, 5,58, 5, 7,21,72, 7,21,67, 5,57,90, 7,21,69, 7,21,68, + 7,21,76, 0, 0, 0, 5,64, 9, 7,21,78, 7,29,85, 7,21,66, 5,58, 2, 7,21,77, + 0, 0, 0, 0, 0, 0, 5,57,93,15,57, 6,15,57, 7,15,57, 8,15,57, 9, 5,58, 1, + 0, 0, 0, 0, 0, 0, 7,29,84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64, 8, 5,64,20, 0, 0, 0, 7,29,87, + 5,64,13, 5,64,15, 5,64,19, 5,64,11, 7,29,86, 5,64,18, 5,64,21, 4,58,11, + 5,64,22, 7,29,88, 7,29,93, 7,37,10, 7,29,90, 5,64,10, 7,37,11, 7,30, 1, + 5,64,14, 7,29,89, 7,29,94, 0, 0, 0, 0, 0, 0,15,61,70,15,61,71, 0, 0, 0, + 0, 0, 0, 7,29,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64,16, + 7,29,92, 7,37,15, 5,70,31, 5,70,27, 0, 0, 0, 4,62,54, 4,62,60, 5,64,24, + 4,62,61, 5,70,29, 5,64,23, 5,70,28, 7,37,14, 7,37,13, 7,43,94, 4,62,62, + 5,70,30, 7,44, 2, 0, 0, 0, 7,49,52, 7,37,12, 0, 0, 0, 7,37, 9, 0, 0, 0, + 7,37,17,15,65,58,15,65,59, 0, 0, 0, 7,44, 5, 7,44, 1, 0, 0, 0, 0, 0, 0, + 4,62,53, 7,37,18, 0, 0, 0, 0, 0, 0, 7,37,16, 5,74,68, 7,44, 3, 5,74,66, + 4,66,27, 4,69,29, 7,49,51, 5,74,73, 5,74,70, 5,74,72, 5,74,74, 7,49,49, + 4,66,23, 5,74,71, 5,64,25, 5,74,67, 7,49,50, 4,66,25, 7,49,56, 7,44, 4, + 7,49,55, 4,66,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,56,15,68,57, + 0, 0, 0, 5,74,69, 7,49,54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,74,75, 4,69,30, + 7,49,53, 7,49,57, 7,49,63, 7,54,36, 5,81,93, 7,49,64, 5,78,69, 4,69,31, + 5,81,94, 5,78,68, 7,49,62, 7,49,66, 5,78,67, 7,44, 7, 7,49,65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,49,59, 0, 0, 0, 0, 0, 0, 7,49,60, 0, 0, 0, 7,49,61, + 0, 0, 0, 0, 0, 0, 7,54,37, 0, 0, 0, 7,49,67, 7,49,58, 5,82, 8, 5,82, 2, + 7,54,38, 4,72, 5, 5,82, 4, 5,82, 1, 7,54,39, 5,82,11, 7,54,40, 5,82,10, + 5,82, 3, 5,82, 7, 5,82, 5, 7,54,41, 5,82, 6, 5,82, 9, 0, 0, 0,15,72,94, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,73,70, 5,84,78, 5,84,79, 7,58,23, 7,61,52, + 7,58,22, 5,84,80, 0, 0, 0, 7,58,21, 0, 0, 0,15,74,23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,58,20, 5,86,78, 7,61,54, 5,86,79, 5,86,80, + 5,88,42, 0, 0, 0, 7,61,53, 0, 0, 0, 0, 0, 0, 5,88,43, 5,88,44, 4,76,28, + 7,64, 8, 7,64,10, 0, 0, 0, 0, 0, 0, 7,64, 9, 0, 0, 0, 5,89,61, 7,68, 7, + 5,91, 5, + /* plane 2, page 152 */ + 16, 255, /* first, last */ + 6,28,89, 6,38,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,68,38, 7,11,33, 6,68,40, + 0, 0, 0, 6,68,39, 5,50,76, 4,53, 4, 4,53, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,30, 2, 7,30, 3, 7,21,81, 7,21,83, 7,21,82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,44, 9, 7,44, 8, 7,37,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,45,83, 0, 0, 0, 7,49,68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,64,11, + 0, 0, 0, 4,78, 6,15,18,81, 4,33,92, 6,58,35, 0, 0, 0, 5,39,52, 6,68,41, + 6,68,42,15,45,33,15,51, 9, 0, 0, 0, 6,68,43, 7,11,34,15,51,10,15,57,10, + 7,21,84,15,61,72, 7,30, 4, 0, 0, 0, 7,37,22, 5,70,33, 5,70,32, 0, 0, 0, + 5,70,34, 7,37,21, 7,37,20, 5,74,76, 4,66,29, 4,66,30, 0, 0, 0, 0, 0, 0, + 7,44,10, 0, 0, 0, 7,49,69,15,70,92, 0, 0, 0, 5,82,12,15,73, 1, 0, 0, 0, + 0, 0, 0, 7,54,42, 0, 0, 0, 0, 0, 0, 7,61,55, 5,90,43, 0, 0, 0, 5,22,43, + 5,22,44, 5,29,48, 6,48,40, 0, 0, 0, 0, 0, 0,15,32,17, 6,48,39, 0, 0, 0, + 5,36,41, 6,58,37, 6,58,36, 6,58,39, 0, 0, 0, 6,58,38, 0, 0, 0, 5,43,49, + 6,68,45, 6,68,46, 5,43,48, 4,40,65, 6,68,44, 6,68,50, 5,43,47, 7,11,35, + 0, 0, 0,15,45,34,15,45,35,15,45,36,15,45,37, 0, 0, 0, 7,11,38, 0, 0, 0, + 6,68,47, 6,68,49, 0, 0, 0, 0, 0, 0, 5,43,50, 7,11,42, 5,50,82, 7,11,46, + 7,11,39, 5,58,18, 5,50,84, 5,50,87, 5,50,77, 5,50,80, 5,50,78, 5,50,85, + 7,11,36, 5,50,86, 7,11,40, 5,50,83, 7,11,43, 7,11,41, 5,50,79, 7,11,37, + 7,11,44, 5,50,81, 0, 0, 0,15,51,11, 0, 0, 0,15,51,12,15,51,13, 7,11,45, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,21,90, 4,53,12, 7,21,89, + 5,58,15, 4,53,10, 4,53, 7, 4,53,11, 4,53, 8, 7,21,85, 5,58, 9, 4,53, 9, + 5,58,16, 5,58,13, 7,22, 4, 5,58,19, 5,58, 7, 5,58,17, 5,58,20, 5,58,11, + 7,21,92, 7,21,91, 7,22, 6, 7,22, 1, 7,21,88, 7,22, 3, 0, 0, 0, 5,58,10, + 7,22, 2,15,57,12, 5,58, 8, 0, 0, 0, 7,21,93, 7,21,94, 7,22, 7, 0, 0, 0, + 7,22, 5,15,57,11, 7,21,86, 0, 0, 0, 0, 0, 0, 7,21,87, 5,64,26, 7,30,12, + 5,64,27, 7,30, 6, 4,58,15, 7,30, 7, 7,30, 5, 5,64,28, 4,58,12, 7,30,10, + 7,30,11, 5,43,51, 7,30, 8, 5,64,30, 5,64,29, 0, 0, 0, 0, 0, 0,15,61,73, + 15,61,74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,37,28, 5,70,44, 5,70,43, + 5,70,39, 4,62,68, 5,70,41, 5,70,40, 4,62,65, 5,70,37, 5,70,46, 4,62,77, + 4,62,73, 4,62,74, 4,62,70, 5,70,47, 5,70,35, 4,62,76, 7,37,27, 7,37,26, + /* plane 2, page 153 */ + 0, 229, /* first, last */ + 7,37,23, 5,70,42, 0, 0, 0, 0, 0, 0,15,65,61, 0, 0, 0,15,65,62,15,65,64, + 0, 0, 0, 4,62,75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,65,60, + 7,37,24, 0, 0, 0, 5,70,36, 7,37,25, 0, 0, 0, 0, 0, 0, 5,70,45, 5,74,77, + 5,74,83, 5,74,79, 4,66,35, 7,44,17, 5,70,48, 7,44,12, 5,70,38, 5,74,81, + 5,74,80, 5,74,84, 7,44,11, 5,74,82, 5,74,86, 4,66,34, 5,74,87, 7,44,18, + 7,44,20, 5,74,85, 7,44,19, 7,44,13, 7,44,14, 7,44,15,15,68,59, 0, 0, 0, + 15,68,60,15,68,61, 0, 0, 0, 7,44,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,55,22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,21, 0, 0, 0, 4,69,37, 7,49,74, 7,49,73, + 5,78,78, 5,78,73, 5,78,75, 5,78,72, 4,69,34, 5,78,80,15,70,93, 4,69,35, + 4,69,36, 4,69,40, 5,78,81, 5,78,82, 5,78,71, 7,49,72, 4,72, 6, 5,78,74, + 5,78,79, 5,78,76, 7,49,75, 7,49,79, 7,49,80, 0, 0, 0, 7,49,81, 7,49,77, + 7,49,76, 0, 0, 0,15,70,94,15,71, 1, 7,49,71, 0, 0, 0, 7,49,78, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,50, 7, 0, 0, 0, 7,49,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,82,15, 5,82,14, 5,82,17, 4,72, 7, 5,82,18, + 5,82,16, 4,72,12, 7,54,45, 7,54,44, 7,54,46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,54,43,15,73, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,54,47, 7,54,48, 5,84,88, 7,58,29, 5,82,20, 7,58,33, 7,58,24, 5,84,81, + 7,58,27, 5,82,19, 5,84,84, 5,84,87, 5,84,83, 7,58,32, 4,73,76, 5,84,85, + 7,58,25, 7,58,26, 0, 0, 0, 0, 0, 0, 7,58,28,15,74,24,15,74,25,15,74,26, + 0, 0, 0, 5,84,82, 0, 0, 0, 5,84,89, 7,58,31, 0, 0, 0, 7,61,63, 7,61,61, + 5,86,81, 5,88,46, 7,61,60, 7,61,57, 5,86,82, 7,61,58, 7,61,62, 7,61,59, + 7,61,64, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,24,15,75,25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,56, 0, 0, 0, 0, 0, 0, 5,88,47, 7,64,17, + 7,64,20, 5,88,45, 7,64,19, 7,64,22, 7,64,21, 7,64,15, 7,64,16, 7,64,12, + 7,64,18, 0, 0, 0, 5,89,66, 7,65,67, 5,89,67, 5,89,63, 4,77,17, 5,89,64, + 7,65,66, 5,89,62, 5,89,65, 4,77,18, 0, 0, 0, 0, 0, 0, 7,65,68, 5,90,44, + 5,90,45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,78, 7, 7,68, 9, 7,68, 8, 0, 0, 0, + 4,78,32, 7,68,82, 7,68,83, 7,68,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,69,46, 5,92, 3, 7,69,74, 7,69,90, 7,69,91, 7,70,36, + /* plane 2, page 154 */ + 17, 255, /* first, last */ + 5,29,49, 4,28, 7, 0, 0, 0, 0, 0, 0, 6,58,41, 6,58,42, 6,58,40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,58,43, 4,40,67, 4,40,69, 5,43,53, 6,68,56, + 5,43,52, 4,40,68, 6,68,54, 6,68,51, 6,68,52, 0, 0, 0, 6,68,53, 6,68,55, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,46,82, 4,46,81, 5,50,90, 5,50,89, + 7,11,50, 7,22,12, 5,50,88, 5,50,91, 4,46,87, 7,11,48, 7,11,52, 7,11,49, + 4,46,88, 0, 0, 0, 7,11,51, 0, 0, 0, 0, 0, 0, 5,58,22, 5,58,21, 4,53,19, + 7,22,11, 7,11,47, 7,22,10, 7,22, 9, 0, 0, 0, 0, 0, 0, 7,30,14, 0, 0, 0, + 0, 0, 0, 4,58,20, 7,30,18, 4,58,18, 7,30,19, 5,64,31, 7,30,17, 7,30,13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,30,15, 0, 0, 0, 7,30,16, 0, 0, 0, 5,70,57, + 7,37,30, 4,62,79, 7,37,29, 5,70,55, 7,37,31, 5,70,50, 5,74,88, 5,70,53, + 5,70,51, 5,70,54, 5,70,56, 7,30,20, 0, 0, 0, 0, 0, 0, 5,70,52, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,27, 5,74,90, 5,74,89, + 7,44,26, 7,44,23, 5,74,92, 5,74,93, 5,74,91, 7,44,29, 7,44,30, 0, 0, 0, + 7,44,25, 7,44,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,28, 7,44,22, 0, 0, 0, + 4,69,42, 5,78,85, 5,78,84, 5,78,83, 7,49,83, 7,49,84, 7,49,85, 0, 0, 0, + 0, 0, 0, 4,72,15, 5,82,22, 7,54,55, 4,72,14, 5,82,21, 5,82,23, 7,54,51, + 7,54,52, 5,82,24, 7,54,53,15,73, 3, 7,54,54, 7,54,50, 0, 0, 0, 4,73,77, + 7,58,34, 4,73,80, 7,58,35, 4,73,79, 7,58,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,61,69, 7,61,70, 5,86,83, 4,75,22, 5,86,85, 4,75,23, 7,61,66, 5,86,84, + 7,61,71, 7,61,65, 7,61,67, 7,61,68, 0, 0, 0, 4,76,31, 5,88,48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,77,20, 7,65,69, 0, 0, 0, 0, 0, 0,15,75,26, 7,67, 7, + 5,90,46, 7,67, 8, 0, 0, 0, 7,68,10, 7,68,84, 0, 0, 0, 5,91,78, 4,34, 3, + 4,40,70, 5,38,68, 5,43,54, 6,68,58,15,45,38,15,45,39,15,45,40, 0, 0, 0, + 0, 0, 0, 6,68,57, 7,11,54,15,51,14,15,51,15, 0, 0, 0, 7,22,14, 7,22,13, + 15,57,13,15,57,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,22, 0, 0, 0, 5,64,32, + 15,61,75,15,61,76, 7,37,32, 0, 0, 0,15,65,65,15,65,66, 7,44,31,15,68,63, + 5,78,86,15,71, 2,15,71, 3,15,71, 4,15,71, 5, 4,72,17, 7,54,56, 7,58,37, + 7,61,72, 7,61,73, 7,61,74, 7,64,23,15,75,83, 7,65,70, 7,65,71, 7,67, 9, + 7,68,11, 4,78, 8, 0, 0, 0, 7,69,92, 6,48,41, 0, 0, 0, 0, 0, 0, 6,48,42, + 0, 0, 0, 6,58,45, 6,58,44, 0, 0, 0,15,38,26,15,32,73, 0, 0, 0, 4,40,72, + /* plane 2, page 155 */ + 0, 255, /* first, last */ + 5,43,56, 6,68,64, 0, 0, 0, 6,68,63, 6,68,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6,68,65, 6,68,59, 6,68,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,43,55, + 5,43,58, 5,50,94, 7,11,55, 7,11,58, 4,46,94, 7,11,56, 5,51, 4, 4,47, 2, + 7,11,59, 5,51, 3, 4,46,92, 4,46,93, 5,50,92, 4,46,90, 5,50,93, 5,51, 2, + 5,51, 1, 7,11,60, 7,11,57, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,51,16,15,51,17, + 15,51,18,15,51,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,22,15, 4,53,23, 7,22,17, 5,58,26, 7,22,16, 4,53,25, 4,53,20, 4,53,27, + 5,58,23, 5,58,25, 4,53,26, 4,53,24, 7,22,19, 5,58,24, 0, 0, 0,15,57,15, + 15,57,16,15,57,17,15,57,19, 7,22,18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,26, + 4,58,28, 7,30,26, 5,64,33, 5,64,36, 5,64,34, 7,30,24, 5,64,37, 5,64,38, + 5,64,35, 7,30,21, 4,58,25, 7,30,22, 0, 0, 0,15,61,77,15,61,78,15,61,79, + 7,30,23, 0, 0, 0, 7,30,25, 0, 0, 0, 0, 0, 0, 7,30,27, 7,37,34, 5,70,62, + 4,62,81, 5,70,60, 5,70,64, 5,70,63, 7,37,36, 5,70,65, 7,44,32, 7,37,35, + 4,62,82, 5,70,58, 4,62,88, 5,70,59, 0, 0, 0,15,65,67,15,65,69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,70,61, + 7,37,33,15,65,68, 4,66,45, 7,44,35, 7,44,39, 5,74,94, 5,75, 1, 5,75, 3, + 4,66,48, 7,44,40, 7,44,38, 7,44,33, 5,75, 4, 5,75, 2, 7,44,37, 7,44,34, + 4,66,43, 7,44,36, 0, 0, 0,15,68,64,15,68,65,15,68,67, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,92, 7,49,86, + 5,78,87, 5,78,91, 5,78,90, 5,78,89, 4,69,48, 4,69,44, 5,78,94, 5,78,88, + 4,69,43, 7,49,87, 7,49,88, 7,49,91, 0, 0, 0, 0, 0, 0, 7,49,92,15,71, 6, + 15,71, 7,15,71, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,78,93, 5,82,27, + 5,82,30, 5,82,26, 7,54,57, 4,72,18, 4,72,20, 5,82,25, 4,72,19, 5,82,29, + 7,54,58, 5,82,28, 7,54,62, 0, 0, 0,15,73, 4, 7,54,59, 7,54,60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85, 1, 5,84,92, 7,58,38, 5,85, 2, 5,84,94, + 5,84,91, 5,85, 5, 5,85, 4, 5,85, 3, 5,84,93, 5,85, 6, 7,54,61, 4,73,83, + 7,58,39, 7,58,40, 0, 0, 0, 0, 0, 0,15,74,27, 0, 0, 0,15,74,28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,86,87, 4,75,24, 4,75,25, 5,86,86, 7,61,76, + 7,61,77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,61,75,15,75,27, 4,76,32, 7,64,24, + 5,88,49, 4,76,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,76,34, 0, 0, 0, 0, 0, 0, + 5,89,69, 7,65,72, 5,89,68, 4,77,22,15,76,34,15,76,35, 0, 0, 0, 0, 0, 0, + 7,65,73, 0, 0, 0, 5,90,47, 7,67,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,11, + /* plane 2, page 156 */ + 1, 255, /* first, last */ + 7,68,12, 4,78, 9, 5,91, 6,15,76,82, 7,68,87, 7,68,86, 5,91,46, + 0, 0, 0, 4,78,52, 6, 3,29, 6, 3,28, 5,36,43, 5,43,59, 5,43,60, 6,68,66, + 7,11,61, 7,22,20, 7,30,28, 7,37,37, 4,62,89, 7,49,94, 7,54,63, 5,82,32, + 0, 0, 0, 7,58,41, 0, 0, 0, 0, 0, 0, 7,64,26, 7,64,25, 5,88,51, 5,91,47, + 7,11,62, 4,47, 3, 4,53,28, 7,37,38, 7,50, 1, 7,54,65, 7,54,64, 7,58,42, + 7,61,78,15,76,83, 5,91,48, 4,34, 4, 6,58,46, 6,68,68, 6,68,67, 7,11,63, + 0, 0, 0, 7,22,24, 4,53,30, 5,58,27, 7,22,22, 7,22,21, 4,53,29, 7,22,23, + 0, 0, 0, 5,64,39, 0, 0, 0, 0, 0, 0, 7,30,29, 0, 0, 0, 4,62,90, 7,37,40, + 7,37,41, 7,37,39, 0, 0, 0, 7,44,41, 5,75, 5, 7,44,42, 0, 0, 0, 4,69,49, + 7,50, 4, 7,50, 3, 7,50, 2, 7,50, 5, 7,54,66, 4,72,21, 7,54,68, 5,82,34, + 7,54,67, 7,54,69, 7,54,70, 5,85, 7, 7,58,44, 0, 0, 0, 7,61,81, 7,61,82, + 5,86,88, 4,73,85, 4,75,26, 7,61,80, 5,86,89, 7,61,79, 0, 0, 0, 7,61,83, + 4,76,38, 4,76,37, 7,61,84, 7,64,27, 7,65,75, 7,65,76, 5,90,48, 7,67,12, + 7,67,13, 7,67,14, 0, 0, 0, 4,78,10, 7,68,13, 7,68,89, 0, 0, 0, 7,68,88, + 7,68,90, 7,69,47, 5,92, 4, 4,78,49, 5,92,13, 7,69,93, 0, 0, 0, 7,70,42, + 7,70,43, 6,48,43, 5,29,51, 0, 0, 0, 0, 0, 0, 6,58,50, 5,36,46, 6,58,49, + 4,34, 6, 5,36,44, 6,58,48, 5,36,45, 4,34, 5, 6,58,47,15,25,16,15,25,15, + 6,58,51, 0, 0, 0, 5,43,63, 5,43,64, 5,43,65, 5,43,62, 5,43,61, 5,43,66, + 6,68,72, 6,68,69, 0, 0, 0, 0, 0, 0, 6,68,73,15,45,41,15,45,42,15,45,43, + 6,68,75, 6,68,70, 6,68,78, 6,68,76, 6,68,77, 6,68,74, 6,68,71, 0, 0, 0, + 0, 0, 0, 4,47, 7, 5,51, 9, 7,11,65, 0, 0, 0, 7,11,64, 5,51, 8, 5,51,11, + 5,58,33, 5,51,10, 4,47, 6, 7,11,67, 5,51, 5, 0, 0, 0,15,51,20,15,51,21, + 15,51,22, 0, 0, 0, 0, 0, 0, 5,51, 7, 0, 0, 0, 0, 0, 0, 7,11,66, 0, 0, 0, + 0, 0, 0, 5,51, 6, 0, 0, 0, 5,58,28, 7,22,26, 5,58,37, 5,58,35, 7,22,25, + 4,53,32, 5,58,36, 7,22,27, 0, 0, 0,15,57,20, 5,58,30, 5,58,29, 5,58,31, + 5,58,34, 7,22,28, 0, 0, 0, 5,58,32, 4,58,29, 5,64,41, 5,64,44, 5,64,48, + 4,58,30, 7,30,30, 5,64,40, 5,64,42, 5,64,47, 5,64,45, 7,30,32, 0, 0, 0, + 7,30,33, 7,30,35,15,61,80,15,61,81,15,61,82, 5,64,46, 0, 0, 0, 7,30,31, + 7,30,34, 5,64,43, 5,70,67, 7,37,43, 4,62,91, 5,70,73, 7,37,46, 5,70,71, + 5,70,69, 7,37,47, 7,37,44, 0, 0, 0,15,65,71, 7,37,42, 7,37,49, 5,70,66, + 7,37,45, 7,37,48, 5,70,70, 0, 0, 0, 0, 0, 0, 5,75, 6, 5,75, 9, 7,44,43, + 5,75, 7, 7,44,44, 7,44,45, 0, 0, 0,15,68,68,15,68,69,15,68,70,15,68,71, + /* plane 2, page 157 */ + 0, 255, /* first, last */ + 5,70,68, 0, 0, 0, 0, 0, 0, 5,75, 8, 0, 0, 0, 0, 0, 0, 7,50,11, 4,69,50, + 7,50,10, 5,79, 1, 7,50, 9, 7,50, 8, 0, 0, 0, 5,79, 2, 7,50, 6,15,71, 9, + 5,82,36, 5,82,38, 5,82,40, 4,72,23, 7,54,71, 7,54,72,15,73, 5, 0, 0, 0, + 5,82,37, 5,82,35, 0, 0, 0, 7,54,73, 5,82,39, 5,85,10, 4,66,49, 7,58,48, + 4,73,88, 5,85, 8, 7,58,46, 4,73,89, 5,85,11, 0, 0, 0,15,74,29, 0, 0, 0, + 5,85,12, 5,85, 9, 4,73,90,15,71,10, 0, 0, 0, 7,58,45, 5,86,91, 5,86,90, + 15,73, 6, 5,88,52, 5,88,53, 4,76,39, 7,64,31, 0, 0, 0, 7,64,30, 7,64,32, + 7,64,29, 0, 0, 0, 5,89,71, 5,89,70, 0, 0, 0,15,76,36, 0, 0, 0, 7,67,15, + 4,78,11, 7,68,14, 7,68,15, 0, 0, 0, 4,78,33, 5,91,49, 0, 0, 0, 5,91,79, + 5,92, 5, 0, 0, 0, 5,92,32, 4,16,35, 4,34,10, 4,34, 7, 6,58,53, 4,34, 8, + 6,58,54, 5,36,47, 0, 0, 0,15,38,27, 6,68,79, 5,43,69, 4,40,76, 5,43,67, + 15,45,44,15,45,45, 0, 0, 0, 5,43,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,47,15, 4,47,19, 4,47,17, 4,47,13, 7,11,72, 5,51,17, 5,51,16, 7,11,69, + 7,11,68, 5,51,14, 4,47,24, 5,51,19, 5,51,12, 5,51,13, 7,11,76, 7,11,70, + 4,47,22, 5,51,18, 0, 0, 0,15,51,23,15,51,26,15,51,29, 7,11,75, 7,11,71, + 7,11,73, 4,47,14, 0, 0, 0, 0, 0, 0,15,51,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,51,15, 5,58,40, 5,58,38, 7,22,29, 5,58,41, 4,53,38, 4,58,38, 5,58,46, + 5,58,45, 4,53,41, 7,22,35, 7,22,30, 7,22,33, 7,22,32, 5,58,44, 0, 0, 0, + 0, 0, 0, 7,22,36,15,57,22,15,57,23,15,57,25,15,57,26, 5,58,43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,22,34,15,57,21, 0, 0, 0, 0, 0, 0, 5,58,39, 0, 0, 0, + 7,22,31, 0, 0, 0, 5,64,54, 4,58,40, 5,64,55, 5,64,52, 5,64,50, 4,58,39, + 7,30,43, 5,64,53, 7,30,38, 7,30,45, 7,30,37, 4,58,43, 7,30,44, 5,64,58, + 5,64,56, 7,30,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,58,42,15,38,28, + 15,61,83,15,61,84,15,61,85,15,61,87,15,61,89, 7,30,40, 0, 0, 0, 5,64,59, + 0, 0, 0, 0, 0, 0, 5,64,51, 7,30,42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64,49, 5,64,57, 5,70,87, 5,70,84, 5,70,80, + 5,70,75, 7,37,51, 4,63, 8, 5,70,77, 7,37,50, 5,70,74, 5,70,81, 5,70,85, + 5,70,82, 5,70,79, 5,70,76, 0, 0, 0, 7,37,52,15,65,72,15,65,73,15,65,74, + 15,65,75,15,65,76,15,65,77,15,65,78,15,65,79,15,65,81,15,65,83, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,37,53, 0, 0, 0, 7,30,39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,70,86, 5,70,83, 0, 0, 0, 7,44,59, + 7,44,56, 4,66,62, 7,44,50, 5,75,13, 4,66,50, 5,75,15, 7,44,47, 7,44,49, + /* plane 2, page 158 */ + 0, 248, /* first, last */ + 4,66,63, 5,70,88, 4,66,67, 5,75,18, 4,66,59, 7,44,46, 4,66,58, 4,66,69, + 7,44,58, 7,44,51, 7,44,57, 4,66,56, 7,44,53, 5,75,22, 5,75,14, 7,44,48, + 5,75,20, 0, 0, 0,15,68,78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,72, + 15,68,74,15,68,76,15,68,79,15,68,80,15,68,81, 0, 0, 0, 0, 0, 0, 5,75,16, + 7,44,52, 0, 0, 0, 7,44,55, 0, 0, 0, 0, 0, 0, 4,66,51, 0, 0, 0, 5,75,23, + 5,75,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,68,73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,75,12,15,65,80, 0, 0, 0, 7,44,54, 0, 0, 0, 5,79, 7, 7,50,14, + 5,79, 6, 5,75,24, 5,79, 9, 7,50,12, 4,69,56, 5,79,11, 7,50,15, 7,50,13, + 5,79, 8, 4,69,54, 5,79, 4, 7,50,18, 4,69,62, 5,79, 5, 5,79, 3, 4,69,64, + 7,50,16, 5,79,12, 7,50,20, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,11,15,71,12, + 15,71,13,15,71,15,15,71,16,15,71,17,15,71,18, 0, 0, 0,15,71,14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,79,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,71,20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,82,42, 4,72,31, 5,82,47, 5,82,51, 5,87, 3, 5,82,41, 5,82,50, + 4,72,24, 7,54,81, 5,82,44, 7,54,82, 5,82,55, 7,54,77, 5,82,52, 5,82,45, + 7,54,83, 7,54,85, 7,54,74, 7,54,84, 5,82,54, 7,54,78, 7,54,79, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,73, 8,15,73, 9,15,73,11, + 15,73,12,15,73,13,15,73,14,15,73,15,15,73,16,15,73,17,15,73,18, 0, 0, 0, + 0, 0, 0, 7,54,75, 7,54,76, 5,82,53, 7,54,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,82,48, 0, 0, 0, 7,58,52, 7,58,50, 5,85,18, + 4,74, 2, 5,85,14, 5,85,15, 7,58,58, 7,58,55, 5,85,16, 7,58,60, 7,58,57, + 5,85,20, 7,58,54, 7,58,59, 7,58,51, 7,58,53, 7,58,49, 7,58,62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,74,33,15,74,34,15,74,35, + 15,74,32, 7,58,63, 5,85,19, 7,58,56, 0, 0, 0, 7,58,61, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85,17, 0, 0, 0, + 5,86,94, 7,61,88, 5,87, 2, 4,75,30, 4,75,31, 5,86,92, 7,61,87, 4,69,60, + 7,64,38, 7,61,85, 7,62, 2, 7,61,86, 5,86,93, 7,62, 1, 7,61,92, 5,87, 1, + 7,61,89, 0, 0, 0,15,75,29,15,75,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,61,90, 0, 0, 0, 7,61,93, 7,61,94, 7,61,91, 0, 0, 0, + 15,75,28, + /* plane 2, page 159 */ + 2, 252, /* first, last */ + 7,64,35, 5,88,60, 5,88,64, 5,88,58, 7,64,33, 4,76,47, + 4,76,44, 5,88,57, 5,88,65, 4,76,43, 5,88,63, 5,88,62, 5,88,55, 0, 0, 0, + 7,64,43, 7,64,39, 5,88,56, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,85,15,75,88, + 7,64,40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,64,34, 7,64,36, 7,64,37, 5,88,61, + 7,64,42, 7,64,41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,65,83, 5,89,72, 4,77,24, + 5,89,73, 7,65,78, 7,64,90, 7,65,81, 7,65,79, 5,89,75, 7,65,82, 0, 0, 0, + 0, 0, 0, 7,65,80,15,76,37,15,76,38, 5,89,74, 7,65,77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,21, 7,67,16, 7,67,18, 7,67,19, 7,67,20, + 5,90,49, 5,90,50,15,76,58,15,76,59,15,76,60, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,76,61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,17, 5,91, 8, 5,91, 7, 7,68,16, + 5,91, 9,15,76,84, 0, 0, 0, 7,68,17, 0, 0, 0, 5,91,10, 0, 0, 0, 0, 0, 0, + 7,68,18, 0, 0, 0, 7,68,94, 5,91,51, 5,91,50, 5,91,53, 7,68,92, 7,69, 1, + 7,68,91, 5,91,52, 0, 0, 0, 7,68,93, 0, 0, 0, 0, 0, 0,15,76,85, 5,91,83, + 5,91,82, 5,91,81, 5,91,80, 7,69,48, 5,92, 6,15,77,11,15,77,12, 0, 0, 0, + 5,92, 7, 7,69,75, 0, 0, 0, 5,92,14, 0, 0, 0, 5,92,23, 7,70,15, 5,92,22, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,51,28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15,61,88, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,75,30, 0, 0, 0, 6,48,44, + 15,32,19, 6,48,45, 4,34,11, 6,58,55, 5,36,49, 5,36,50, 6,58,60, 6,58,56, + 6,58,57, 5,36,48, 0, 0, 0, 6,58,58, 6,58,59, 6,68,80, 5,43,74, 6,68,81, + 5,43,73, 4,40,78, 4,40,79, 6,68,82, 6,68,83, 6,68,84, 4,40,80, 5,43,72, + 0, 0, 0,15,45,47,15,45,48,15,45,49, 5,43,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4,47,37, 7,11,82, 7,11,93, 7,11,79, 7,11,83, 7,11,89, 5,51,23, 5,51,27, + 5,51,29, 5,51,25, 7,11,86, 7,11,92, 5,51,31, 5,51,20, 4,47,29, 5,51,33, + 5,51,30, 5,51,21, 4,47,30, 5,51,34, 7,11,90, 4,47,28, 7,11,85, 4,47,35, + 4,47,26, 5,51,35, 4,47,38, 7,11,80, 7,11,91, 0, 0, 0, 0, 0, 0,15,51,32, + 7,11,78, 7,11,87, 7,11,88, 5,51,22, 5,51,26, 5,51,32, 7,11,81, 7,11,84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,51,28, 7,22,43, 5,58,52, 5,58,54, 5,58,49, + 5,58,47, 4,53,44, 5,58,51, 5,58,57, 5,58,50, 7,22,55, 7,22,50, 5,58,55, + 4,53,54, 7,22,52, 5,58,56, 7,22,48, 5,58,53, 7,22,51, 7,22,44, 0, 0, 0, + 0, 0, 0, 7,22,37, 7,22,46,15,57,29,15,57,30,15,57,31,15,57,32, 7,22,45, + 7,22,47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,22,56, + /* plane 2, page 160 */ + 0, 255, /* first, last */ + 7,22,54, 7,22,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,22,40, + 7,22,53, 4,53,51, 4,53,49, 6,48,46, 7,22,41, 5,58,48, 0, 0, 0, 7,22,38, + 0, 0, 0,15,54,19, 7,30,49, 4,58,44, 5,64,62, 5,64,73, 7,30,52, 4,58,51, + 5,64,71, 7,30,53, 5,64,61, 5,64,65, 0, 0, 0, 7,30,46, 5,64,68, 5,64,75, + 5,64,64, 5,64,66, 4,58,52, 7,30,55, 5,64,60, 5,64,67, 4,58,56, 7,30,47, + 4,58,59, 5,64,76, 7,30,56, 7,30,51, 5,64,72, 5,64,74, 0, 0, 0, 0, 0, 0, + 15,61,90,15,61,91,15,61,92,15,61,93,15,62, 1,15,62, 2,15,62, 3,15,62, 5, + 7,30,48, 0, 0, 0, 5,64,63, 0, 0, 0, 4,58,58, 7,30,54, 0, 0, 0, 5,64,69, + 5,64,70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,30,50, 4,58,55, 7,37,59, 5,64,77, 7,37,63, 5,70,93, 5,71, 5, 5,71, 7, + 4,63,14, 5,71,10, 5,70,90, 5,71, 1, 5,70,94, 5,70,91, 7,37,61, 7,37,56, + 4,63,13, 7,37,62, 5,70,92, 5,71,11, 4,63,16, 7,37,71, 5,71, 2, 7,37,68, + 7,37,60, 5,71, 8, 7,37,65, 7,37,66, 7,37,70, 5,71, 4, 7,37,57, 5,71, 3, + 7,37,72, 7,37,54, 7,37,64,15,65,84,15,65,85, 7,37,55, 5,71, 9, 0, 0, 0, + 7,37,67, 0, 0, 0, 5,75,25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,61, + 5,75,26, 7,44,66, 0, 0, 0, 5,75,30, 5,75,42, 5,75,32, 7,44,74, 7,44,68, + 5,75,27, 7,44,72, 7,44,75, 7,44,67, 5,75,44, 5,75,29, 5,75,43, 4,66,75, + 5,75,34, 5,75,37, 7,44,64, 7,44,62, 5,75,40, 5,75,36, 7,44,60, 7,44,70, + 7,44,76, 5,75,33, 0, 0, 0, 4,66,77, 7,44,73, 5,75,38, 0, 0, 0,15,68,84, + 15,68,86,15,68,87, 7,44,65, 5,75,39, 0, 0, 0, 7,44,79, 5,75,41, 7,37,73, + 0, 0, 0, 7,44,69, 0, 0, 0, 7,44,71, 0, 0, 0, 7,44,77, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,75,35, 0, 0, 0, 0, 0, 0, 7,44,78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,44,63, 4,66,73, 5,79,24, 5,79,16, + 7,50,26, 4,69,69, 5,79,30, 7,50,35, 5,79,18, 5,79,34, 4,66,80, 7,50,22, + 5,79,15, 4,69,67, 5,79,17, 4,69,78, 4,69,72, 5,79,19, 5,79,13, 5,79,23, + 5,79,36, 5,79,25, 4,69,77, 4,69,70, 5,79,26, 5,79,28, 5,79,32, 4,69,71, + 5,79,14, 5,79,27, 5,79,22, 5,79,31, 7,50,31, 7,50,27, 7,50,32, 7,50,21, + 7,50,23, 0, 0, 0, 5,79,29, 5,79,21, 5,79,20, 5,79,35, 0, 0, 0, 0, 0, 0, + 7,50,24, 0, 0, 0,15,71,23, 0, 0, 0, 7,50,30, 0, 0, 0, 7,50,29, 7,50,25, + 0, 0, 0, 7,50,36, 7,50,33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,50,28, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15,71,24, 0, 0, 0, 0, 0, 0, 5,79,33, 0, 0, 0, + 0, 0, 0, 7,37,58, 5,82,62, 7,54,89, 5,82,70, 7,54,94, 5,82,61, 5,82,64, + /* plane 2, page 161 */ + 0, 255, /* first, last */ + 5,82,59, 5,82,69, 5,82,68, 7,55, 1, 7,54,93, 7,54,90, 5,82,72, 7,55, 7, + 0, 0, 0, 7,55, 6, 7,55, 4, 5,82,60, 5,82,65, 5,79,37, 5,82,58, 5,82,66, + 7,55, 2, 7,54,92, 5,82,73, 5,82,74,15,73,20, 0, 0, 0, 0, 0, 0, 5,82,63, + 7,55, 3, 0, 0, 0, 0, 0, 0, 7,54,87, 7,55, 8, 0, 0, 0, 7,54,86, 0, 0, 0, + 7,54,91, 0, 0, 0, 0, 0, 0,15,73,19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,82,56, 7,54,88, 5,82,57,15,71,22, 5,85,34, 5,85,29, 4,74, 4, + 4,74,13, 5,85,28, 4,74, 8, 5,85,35, 5,85,25, 5,79,38, 5,85,36, 5,85,32, + 5,85,31, 4,74,11, 0, 0, 0, 7,58,66, 7,58,76, 7,58,74, 7,58,80, 4,74,10, + 7,58,75, 7,58,78, 5,85,27, 4,74, 9, 7,58,73, 5,85,23, 7,58,72, 5,85,24, + 5,85,38, 5,82,71, 7,58,81, 5,85,33, 7,58,79, 7,58,71, 7,55, 5, 0, 0, 0, + 0, 0, 0,15,74,36,15,74,37,15,74,38,15,74,39,15,74,40, 5,85,30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7,58,70, 0, 0, 0, 7,58,68, 0, 0, 0, 0, 0, 0, 7,58,65, + 0, 0, 0, 7,58,67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85,26, 7,62,11, + 7,62, 7, 7,62,17, 5,87,19, 7,62,15, 5,87,14, 5,87, 9, 4,75,35, 7,62,18, + 7,62,22, 5,87, 5, 5,87,16, 5,87,10, 5,87, 8, 5,87,15, 7,62,12, 5,87, 7, + 5,87, 6, 5,87,24, 5,87,11, 4,75,41, 4,75,34, 7,62,21, 5,87,17, 7,62,16, + 7,62,19, 5,87,13, 7,58,69, 5,87,21, 7,58,77, 7,62,20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,87,22, 0, 0, 0, 0, 0, 0, 7,62,13,15,75,32, 7,62, 4, 7,62, 6, + 0, 0, 0, 0, 0, 0, 7,62,14, 0, 0, 0, 0, 0, 0, 7,62, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,62, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,87,18, 7,62,10, 7,62, 5, 4,75,33,15,75,90, 7,62,23, 7,64,45, 5,88,71, + 5,88,73, 5,88,77, 5,88,69, 5,87,23, 5,88,72, 7,64,46, 5,88,74, 5,88,75, + 7,64,47, 7,64,48, 7,64,52, 5,88,76, 7,64,51, 7,64,44, 7,64,49, 5,88,67, + 0, 0, 0, 5,88,70, 5,88,66,15,75,89, 7,64,50, 0, 0, 0, 4,76,53, 0, 0, 0, + 0, 0, 0, 5,88,68, 4,76,51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5,89,81, 5,89,77, 5,89,80, 7,65,86, 4,77,27, 5,89,78, 5,89,76, + 4,77,28, 0, 0, 0, 7,65,84, 0, 0, 0, 5,89,79, 7,65,88, 0, 0, 0, 0, 0, 0, + 7,65,85, 7,65,87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,77,30, 5,90,56, 7,67,25, 5,90,54, + 4,77,75, 5,90,58, 5,90,57, 5,90,53, 5,90,55, 4,77,74, 7,67,24, 5,90,52, + 7,67,27, 5,90,59, 7,67,29,15,76,62, 7,67,26, 0, 0, 0, 0, 0, 0, 7,67,22, + /* plane 2, page 162 */ + 1, 255, /* first, last */ + 7,67,28, 0, 0, 0, 5,91,14, 7,68,20, 7,68,22, 5,91,15, 5,91,12, + 0, 0, 0, 5,91,11, 5,91,17, 5,91,16, 5,91,13, 7,68,23,15,76,86, 0, 0, 0, + 4,78,14, 0, 0, 0, 7,68,19, 7,68,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,91,54, 7,69, 2, 7,69,51, 7,69, 4, 7,69, 6, 7,69, 3, 7,69, 7, 5,91,55, + 0, 0, 0, 0, 0, 0, 7,69, 5, 0, 0, 0, 4,78,34, 5,91,84, 7,69,52, 7,69,53, + 5,91,85, 7,69,50, 7,69,54, 7,69,49, 0, 0, 0, 0, 0, 0, 7,69,77, 7,69,76, + 5,92, 9, 5,92, 8,15,77,18, 0, 0, 0, 5,92,15, 7,70, 1, 0, 0, 0, 7,69,94, + 5,92,24, 7,70,16, 5,92,25, 7,70,26, 5,92,33,15,77,23, 0, 0, 0, 5,92,40, + 7,70,37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,40,81, 4,40,82, + 5,51,36, 7,12, 2, 7,12, 1, 7,11,94, 5,58,58, 5,58,60, 7,22,58, 7,22,59, + 15,57,33, 7,22,57, 0, 0, 0, 5,71,12, 7,30,57, 0, 0, 0, 4,66,81, 7,44,80, + 5,75,45, 7,44,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,50,38, 5,79,40, 5,79,41, + 7,50,39, 5,79,39, 7,50,41, 7,50,40, 0, 0, 0, 4,72,37, 7,55,11, 7,55,10, + 5,82,75, 0, 0, 0, 7,58,83, 0, 0, 0, 7,58,82, 0, 0, 0, 0, 0, 0, 4,75,44, + 7,62,24, 7,62,25, 5,87,25, 7,64,53, 4,76,55, 0, 0, 0, 5,89,82, 4,77,31, + 7,67,30, 5,91,18, 0, 0, 0, 6,58,61,15,38,29, 5,43,76,15,45,50, 7,12, 8, + 5,51,37, 7,12, 7, 0, 0, 0, 7,12, 6, 7,12, 4, 5,51,38, 7,12, 5, 5,51,39, + 7,12, 9, 7,12, 3, 0, 0, 0, 7,22,61, 5,58,61, 0, 0, 0,15,57,34, 0, 0, 0, + 15,57,35,15,57,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,64,79, 5,64,82, 5,64,80, + 4,58,60, 0, 0, 0, 5,64,83, 5,64,81, 7,30,59, 7,30,58, 0, 0, 0, 7,30,62, + 0, 0, 0, 7,30,61,15,62, 6, 5,64,78, 7,37,78, 5,71,17, 5,71,14, 5,71,13, + 7,37,75, 7,37,77, 7,37,74, 5,71,16, 7,37,76,15,65,88,15,65,89,15,65,90, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,15, 5,75,47, 5,75,46, 5,75,49, 4,66,83, + 7,44,83, 5,75,48, 0, 0, 0, 7,44,82, 0, 0, 0, 5,72,32, 7,50,43, 4,66,84, + 4,69,79, 7,44,84,15,71,25, 0, 0, 0, 7,50,42, 7,50,44, 5,79,42, 4,72,39, + 7,55,12, 7,55,13, 4,72,38,15,73,21, 5,85,39, 4,74,14,15,74,41, 0, 0, 0, + 0, 0, 0, 5,87,26, 5,87,28, 5,87,27, 0, 0, 0, 7,62,26, 0, 0, 0, 7,62,27, + 0, 0, 0, 0, 0, 0, 7,64,54, 4,76,56, 7,64,55,15,75,91, 5,89,85, 5,89,84, + 5,88,78, 0, 0, 0, 4,77,32, 4,77,76,15,76,39, 0, 0, 0, 0, 0, 0, 7,69, 8, + 7,69,55, 0, 0, 0, 5,92,38, 7,70,39, 6,58,63, 6,58,62, 5,36,51,15,38,31, + /* plane 2, page 163 */ + 1, 255, /* first, last */ + 4,40,85, 6,68,85,15,45,51, 0, 0, 0, 5,51,43, 5,51,42, 4,47,47, + 5,51,41, 5,51,40, 7,12,11, 7,12,15, 7,12,10, 4,47,46, 7,12,12, 0, 0, 0, + 5,51,44, 7,12,14, 7,12,13, 0, 0, 0, 7,22,65, 7,22,63, 7,22,62, 7,22,67, + 4,53,59, 0, 0, 0, 7,22,66, 6,39,51,15,57,37, 5,58,62, 0, 0, 0, 0, 0, 0, + 7,22,64, 0, 0, 0, 5,64,84, 5,64,85, 7,30,64, 7,30,65,15,62, 8, 0, 0, 0, + 7,30,66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,30,63, 7,37,80, 5,71,18, 7,37,82, + 5,71,19, 5,71,21, 7,37,83, 5,71,20,15,65,91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7,37,81, 0, 0, 0, 0, 0, 0, 7,37,79, 4,66,90, 4,66,88, 7,44,89, 7,44,91, + 7,44,85, 5,75,52, 5,75,50, 7,44,90, 5,75,53, 5,75,51, 7,44,88, 4,66,91, + 0, 0, 0, 7,44,87, 0, 0, 0, 7,44,86, 5,79,43, 7,50,51, 7,50,50, 5,79,44, + 7,50,48, 4,69,80, 7,50,47, 5,79,46, 5,79,45, 7,50,49,15,71,26, 0, 0, 0, + 7,50,46, 0, 0, 0, 7,50,45, 5,82,76, 7,55,15, 5,82,79, 7,55,16, 5,82,78, + 7,55,17, 7,55,14, 5,82,77, 5,85,43, 5,85,44, 7,58,84, 5,85,41, 5,85,46, + 7,58,91, 7,58,86, 7,58,87, 7,58,92, 7,58,89, 5,85,42, 7,58,85, 7,58,88, + 7,58,90, 0, 0, 0, 5,87,31, 4,75,47, 5,87,30, 5,87,32, 5,87,29, 0, 0, 0, + 5,88,79, 5,88,81, 5,88,80, 7,64,57, 7,62,28, 4,76,57, 7,64,56, 4,77,77, + 7,67,31, 7,68,25, 7,68,24, 5,91,56, 7,69, 9, 0, 0, 0, 4,78,50, 5,92,16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 9, 1,15,38,30,15,51,34, + 15,62, 7, 0, 0, 0, 5,43,80, 5,43,78, 5,43,79, 5,51,46, 4,47,48, 5,51,45, + 0, 0, 0, 0, 0, 0, 7,12,16, 5,58,65, 7,22,68, 5,58,63, 5,58,64,15,57,38, + 5,64,88, 5,64,86,15,62, 9, 5,64,87, 5,71,22, 7,44,92, 5,75,54, 7,44,93, + 4,69,83, 0, 0, 0, 7,55,18, 5,82,80, 7,58,94, 4,75,48, 7,59,54, 7,62,29, + 4,75,49, 0, 0, 0, 5,92,17,15,45,52, 7,12,18, 5,58,66, 5,58,68, 0, 0, 0, + 0, 0, 0, 5,58,67, 5,64,90, 5,71,24, 0, 0, 0, 5,64,89, 5,71,25, 0, 0, 0, + 0, 0, 0, 5,71,23, 5,75,55, 4,67, 2,15,68,89, 0, 0, 0, 4,69,85, 4,69,84, + 5,79,48, 5,79,47, 4,69,87, 7,50,52, 7,50,53, 7,50,54,15,71,27, 0, 0, 0, + 0, 0, 0, 7,50,55, 0, 0, 0, 5,82,83, 5,82,82, 5,82,81, 7,55,19, 0, 0, 0, + 7,55,20, 5,85,47, 4,74,15, 4,74,16, 7,59, 3, 7,59, 2, 7,59, 1, 0, 0, 0, + 0, 0, 0, 7,62,30, 0, 0, 0, 0, 0, 0, 5,88,82, 7,64,58, 5,88,83, 7,65,89, + 5,89,86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,70, 7, 4,40,86, 5,51,47, 4,47,49, + 7,22,72, 7,22,70, 5,58,70, 5,58,69, 5,58,71, 0, 0, 0, 5,64,94, 7,30,68, + 5,64,92, 7,30,67, 5,64,91, 4,58,62, 5,64,93, 7,30,69, 7,30,70, 5,71,27, + /* plane 2, page 164 */ + 0, 255, /* first, last */ + 5,71,26, 0, 0, 0, 4,69,88, 5,79,49, 5,79,51, 0, 0, 0, 0, 0, 0, 5,82,84, + 7,55,22, 7,55,21,15,73,22, 5,85,48, 4,75,52, 5,87,34, 5,87,33, 4,75,51, + 0, 0, 0, 7,67,32, 7,65,90, 4,77,78, 5,91,58, 7,69,10, 5,91,57, 6,68,86, + 5,36,52, 6,68,88, 0, 0, 0, 6,68,87, 7,12,20, 4,47,53, 4,47,52, 5,51,48, + 7,12,21, 7,12,22, 0, 0, 0, 0, 0, 0, 7,22,74, 5,58,74, 5,58,72, 5,58,73, + 7,22,73, 0, 0, 0, 7,22,75, 7,22,76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,58,64, 7,30,72, 5,65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15,62,10, 7,30,71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,71,30, + 5,71,28, 7,37,84, 5,75,56, 5,65, 2, 5,71,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5,75,58, 5,75,57, 5,75,59, 5,75,61, 5,75,60, 7,45, 1, 7,44,94, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,79,54, 5,79,55, 7,50,59, 5,79,59, 5,79,57, 5,79,53, + 7,50,56, 4,69,94, 4,69,91, 7,50,60, 5,79,58, 4,69,90, 7,50,58, 0, 0, 0, + 0, 0, 0,15,71,28, 0, 0, 0, 7,50,57, 0, 0, 0, 7,55,24, 4,72,51, 4,72,49, + 5,82,88, 4,72,48, 5,82,91, 7,55,23, 5,82,85, 5,82,89, 5,82,87, 4,72,52, + 5,82,86, 4,72,53, 4,74,20, 7,55,25, 7,55,26, 0, 0, 0, 0, 0, 0, 5,82,90, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,85,49, 4,74,19, + 4,74,21, 7,59,10, 7,59, 7, 7,59, 6, 4,74,18, 7,59, 9, 0, 0, 0, 0, 0, 0, + 7,59, 8, 0, 0, 0, 0, 0, 0, 5,85,50, 7,59, 5, 0, 0, 0, 0, 0, 0, 5,87,39, + 7,62,33, 5,87,38, 5,87,36, 5,87,37, 5,87,35, 5,87,40, 7,62,31, 0, 0, 0, + 5,88,86, 5,88,87, 7,64,61, 4,76,60, 4,76,64, 5,88,85, 7,64,60, 5,88,84, + 4,76,63, 4,76,62, 4,76,61, 7,62,32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,64,59, + 0, 0, 0, 5,89,88, 5,89,89, 5,89,90, 5,89,87, 4,77,37, 7,65,91, 7,65,92, + 4,77,38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,90,60, 7,68,26, 0, 0, 0, 0, 0, 0, + 7,69,11, 4,78,16, 7,68,27, 5,91,19, 0, 0, 0, 0, 0, 0, 4,78,15, 5,91,59, + 5,91,60, 7,69,12, 0, 0, 0, 4,78,42, 5,91,86, 0, 0, 0, 7,69,78, 0, 0, 0, + 0, 0, 0, 5,92,42, 7,70,50, 7,37,85, 4,70, 2, 0, 0, 0, 5,82,92, 4,72,55, + 5,87,41, 6,68,89, 7,12,24, 7,12,23, 5,65, 4, 7,22,77, 4,58,65, 7,30,73, + 7,30,74, 0, 0, 0, 7,37,88, 5,71,34, 7,37,89, 7,37,87, 7,37,86, 4,63,33, + 0, 0, 0, 7,45, 4, 7,45, 5, 0, 0, 0, 7,30,75, 7,45, 3, 0, 0, 0, 7,50,62, + 7,50,63, 7,50,61, 0, 0, 0, 0, 0, 0, 5,82,93, 7,55,27, 4,74,22, 7,59,12, + 7,59,17, 7,59,18, 7,59,14, 7,59,16, 7,59,13, 7,59,11, 7,59,15, 5,87,42, + 7,62,34, 5,88,88, 0, 0, 0, 5,89,91, 5,90,61, 4,77,39, 7,67,33, 5,91,20, + /* plane 2, page 165 */ + 0, 255, /* first, last */ + 7,67,34, 7,69,13, 6,48,47, 0, 0, 0, 7,22,78, 7,22,79, 5,58,75, 0, 0, 0, + 7,38,47, 0, 0, 0, 7,69,14, 5,58,76, 0, 0, 0, 5,65, 5, 7,30,77, 5,71,35, + 7,37,90, 5,71,36,15,65,93, 0, 0, 0, 7,45, 7, 5,75,64, 7,45, 6, 5,75,62, + 5,75,63, 0, 0, 0, 0, 0, 0, 4,67, 5, 4,70, 3, 7,50,64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4,74,25, 4,72,56, 7,55,28, 7,55,29, 5,85,51, 7,59,20, + 7,59,21, 5,85,53, 4,74,24, 7,59,19, 5,85,52, 0, 0, 0, 7,62,35, 7,64,62, + 5,88,89, 7,64,63, 0, 0, 0, 5,89,92, 0, 0, 0, 7,67,35, 5,91,21, 5,91,87, + 7,12,25, 0, 0, 0, 5,58,77, 7,30,78, 5,58,78, 5,65, 8, 5,65,10, 5,65,11, + 5,65, 9, 5,65, 7, 7,30,80, 5,65, 6, 7,30,79, 0, 0, 0, 5,65,12, 0, 0, 0, + 4,58,66, 7,37,92, 7,45,12, 5,71,39, 5,71,40, 5,71,38, 5,71,37, 7,37,91, + 0, 0, 0, 7,45,10, 5,75,65, 5,75,67, 5,75,66, 0, 0, 0, 0, 0, 0, 7,45,13, + 7,45,14, 7,45, 9, 7,50,66, 7,50,68, 7,50,67, 5,79,61, 5,79,62, 7,45,11, + 0, 0, 0, 7,50,69, 0, 0, 0, 0, 0, 0, 5,79,60, 0, 0, 0, 0, 0, 0, 7,50,65, + 5,83, 1, 5,82,94, 7,55,30, 5,85,55, 7,59,22, 5,85,56, 5,85,57, 5,85,54, + 0, 0, 0, 4,74,26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,62,36, 5,87,43, 4,75,57, + 7,62,40, 4,75,55, 4,75,58, 7,62,39, 0, 0, 0, 7,62,38, 7,62,37, 5,88,93, + 4,76,67, 5,88,91, 5,88,90, 7,64,64, 0, 0, 0, 7,65,94, 7,65,93, 4,77,41, + 5,89,93, 0, 0, 0, 0, 0, 0, 5,91,22, 5,91,89, 5,91,88, 7,69,79, 7,70, 2, + 4,47,55, 7,22,80, 7,22,81, 7,30,82, 7,30,81, 5,71,41, 7,37,94, 7,38, 1, + 7,37,93, 0, 0, 0, 5,75,68, 5,75,69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7,50,70, 5,79,63, 5,79,64, 7,50,72, 4,72,59, 5,83, 2, 7,55,31, + 7,55,32, 5,83, 3, 5,83, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,59,23, 5,87,44, + 7,62,41, 0, 0, 0, 0, 0, 0, 5,88,92,15,75,94, 7,64,65, 5,89,94, 5,90, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,67,38, 5,90,62, 7,67,37, 7,68,28, 0, 0, 0, + 0, 0, 0, 4,78,51, 5,92,18, 0, 0, 0,15,32,20, 4,53,68, 4,58,69, 7,38, 2, + 0, 0, 0, 4,67, 8, 7,45,15, 5,77,55, 4,70, 4, 4,74,27,15,73,23, 5,90, 3, + 5,90, 2, 7,66, 1, 7,69,15, 0, 0, 0, 5,65,14, 7,30,83, 0, 0, 0, 0, 0, 0, + 7,38, 5, 4,63,39, 7,38, 4, 7,45,16, 5,75,70, 4,67,10, 7,45,17, 7,45,20, + 7,45,18, 7,45,19, 7,45,21, 7,45,22, 5,75,71, 7,50,75, 5,79,67, 5,79,66, + 4,70, 8, 7,50,73, 4,70,10, 7,50,77, 4,70, 9, 7,50,78, 0, 0, 0, 7,50,74, + 0, 0, 0, 0, 0, 0, 4,40,88, 0, 0, 0, 0, 0, 0, 7,50,76, 7,55,38, 5,83,10, + 5,83, 7, 7,55,35, 7,55,34, 4,72,62, 5,83, 8, 4,72,63, 4,72,61, 7,55,36, + /* plane 2, page 166 */ + 0, 214, /* first, last */ + 5,83, 5, 5,83,11, 0, 0, 0, 0, 0, 0, 7,55,37, 7,55,39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5,83, 9, 7,55,33, 0, 0, 0, 5,83, 6, 7,59,24, 4,74,30, + 5,85,60, 5,85,59, 5,85,62, 7,59,32, 7,59,31, 5,85,63, 7,59,26, 5,85,64, + 4,74,31, 0, 0, 0, 0, 0, 0, 7,59,25, 5,85,58, 0, 0, 0, 0, 0, 0, 7,59,27, + 7,59,29, 7,59,30, 7,59,28, 0, 0, 0, 5,85,61, 5,87,47, 5,87,46, 4,75,62, + 4,75,66, 4,75,67, 4,75,63, 0, 0, 0, 4,75,64, 5,87,48, 7,62,46, 0, 0, 0, + 7,62,44, 0, 0, 0, 4,75,61, 0, 0, 0, 7,62,42, 0, 0, 0, 7,62,43, 7,62,47, + 4,75,68, 4,76,71, 5,88,94, 7,64,71, 4,76,72, 7,64,69, 5,89, 1, 7,66, 3, + 4,76,69, 7,64,67, 7,64,70, 7,64,68, 0, 0, 0, 0, 0, 0, 7,64,66, 7,64,72, + 5,89, 2, 4,77,46, 4,77,42, 7,66, 5, 5,90, 6, 4,77,48, 4,77,45, 5,90, 4, + 7,66, 7, 4,77,47, 7,66, 4, 7,66, 6, 0, 0, 0, 0, 0, 0, 7,66, 8, 7,66, 9, + 7,66, 2, 5,90, 5, 7,67,40, 5,90,64, 7,67,39, 5,90,66, 5,90,63, 5,90,65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,68,30, 4,78,18, 7,68,29, 5,91,23, 5,91,25, + 0, 0, 0, 5,91,24, 7,68,32, 0, 0, 0, 7,68,33, 0, 0, 0, 7,68,31, 0, 0, 0, + 4,78,38, 0, 0, 0, 7,69,18, 5,91,61, 7,69,17, 7,69,16, 7,69,57, 7,69,81, + 7,69,82, 5,92,10, 0, 0, 0, 7,69,80, 7,69,83, 5,92,19, 0, 0, 0, 7,70, 4, + 7,70, 3, 5,92,27, 7,70,18, 5,92,26, 7,70,17, 0, 0, 0, 7,70,29, 0, 0, 0, + 7,70,28, 5,92,37, 0, 0, 0, 7,70,33, 7,70,40, 5,92,46, 5,92,45, 0, 0, 0, + 0, 0, 0, 5,75,72, 7,45,23, 4,67,12, 0, 0, 0, 7,50,80, 7,50,79, 7,46, 4, + 5,79,68, 7,55,40, 0, 0, 0,15,71,29, 7,59,34, 7,59,33, 7,59,35, 7,59,36, + 5,87,49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,92,49, 7,22,82, 7,30,84, + 7,38, 6, 0, 0, 0, 0, 0, 0, 7,55,41, 5,79,69, 4,70,11, 5,79,71, 5,79,70, + 4,70,12, 7,50,83, 0, 0, 0, 7,50,81,15,71,30, 7,50,82, 5,83,12, 5,83,14, + 7,55,43, 5,83,15, 5,75,74, 5,83,13, 7,52,10, 7,55,42, 7,45,25, 7,45,24, + 5,91,62, 7,65, 9, 5,91,26, 5,87,50, 7,68,34, 0, 0, 0,15,77,13, 0, 0, 0, + 5,92,34,15, 9, 6, 5,83,16, 7,66,11, 0, 0, 0, 7,66,10, 5,90,68, 5,90,67, + 7,67,42, 7,67,41, 5,91,27, 4,78,39, 7,70, 5, 4,78,54, 7,70,44, + /* plane 2, page 167: --- */ + /* plane 2, page 168: --- */ + /* plane 2, page 169: --- */ + /* plane 2, page 170: --- */ + /* plane 2, page 171: --- */ + /* plane 2, page 172: --- */ + /* plane 2, page 173: --- */ + /* plane 2, page 174: --- */ + /* plane 2, page 175: --- */ + /* plane 2, page 176: --- */ + /* plane 2, page 177: --- */ + /* plane 2, page 178: --- */ + /* plane 2, page 179: --- */ + /* plane 2, page 180: --- */ + /* plane 2, page 181: --- */ + /* plane 2, page 182: --- */ + /* plane 2, page 183: --- */ + /* plane 2, page 184: --- */ + /* plane 2, page 185: --- */ + /* plane 2, page 186: --- */ + /* plane 2, page 187: --- */ + /* plane 2, page 188: --- */ + /* plane 2, page 189: --- */ + /* plane 2, page 190: --- */ + /* plane 2, page 191: --- */ + /* plane 2, page 192: --- */ + /* plane 2, page 193: --- */ + /* plane 2, page 194: --- */ + /* plane 2, page 195: --- */ + /* plane 2, page 196: --- */ + /* plane 2, page 197: --- */ + /* plane 2, page 198: --- */ + /* plane 2, page 199: --- */ + /* plane 2, page 200: --- */ + /* plane 2, page 201: --- */ + /* plane 2, page 202: --- */ + /* plane 2, page 203: --- */ + /* plane 2, page 204: --- */ + /* plane 2, page 205: --- */ + /* plane 2, page 206: --- */ + /* plane 2, page 207: --- */ + /* plane 2, page 208: --- */ + /* plane 2, page 209: --- */ + /* plane 2, page 210: --- */ + /* plane 2, page 211: --- */ + /* plane 2, page 212: --- */ + /* plane 2, page 213: --- */ + /* plane 2, page 214: --- */ + /* plane 2, page 215: --- */ + /* plane 2, page 216: --- */ + /* plane 2, page 217: --- */ + /* plane 2, page 218: --- */ + /* plane 2, page 219: --- */ + /* plane 2, page 220: --- */ + /* plane 2, page 221: --- */ + /* plane 2, page 222: --- */ + /* plane 2, page 223: --- */ + /* plane 2, page 224: --- */ + /* plane 2, page 225: --- */ + /* plane 2, page 226: --- */ + /* plane 2, page 227: --- */ + /* plane 2, page 228: --- */ + /* plane 2, page 229: --- */ + /* plane 2, page 230: --- */ + /* plane 2, page 231: --- */ + /* plane 2, page 232: --- */ + /* plane 2, page 233: --- */ + /* plane 2, page 234: --- */ + /* plane 2, page 235: --- */ + /* plane 2, page 236: --- */ + /* plane 2, page 237: --- */ + /* plane 2, page 238: --- */ + /* plane 2, page 239: --- */ + /* plane 2, page 240: --- */ + /* plane 2, page 241: --- */ + /* plane 2, page 242: --- */ + /* plane 2, page 243: --- */ + /* plane 2, page 244: --- */ + /* plane 2, page 245: --- */ + /* plane 2, page 246: --- */ + /* plane 2, page 247: --- */ + /* plane 2, page 248 */ + 0, 255, /* first, last */ + 6, 9,22, 6, 1,17, 6, 1, 1, 6, 5,70, 6, 5,82, 4, 5,29, 6,14,65,15,13,72, + 6,29,21, 6,48,59, 4,28,16, 6,58,82,15,57,45, 6, 3,50, 3, 4,50, 3, 7,51, + 15,71,32, 3, 7,52, 6,29,28, 7,45,30, 6, 1,48, 3, 2,91, 6, 3,57, 3, 1,47, + 6,21,36, 4, 1,31, 6, 2,28, 3, 4,33, 7,22,90, 5, 1, 9, 6, 1,24,15, 3,23, + 6, 9,67, 6,14,86, 6,38,71, 3,32,35,15, 2, 9, 6,15, 5, 6,21,56, 4,22,44, + 4, 1,15, 6, 2,38, 3, 2, 5, 6, 2,41, 3, 3, 9, 6,15,24, 6,38,84, 6,10, 3, + 6,15,29, 6,29,57, 6,29,58, 3,26, 6,15, 1,19, 3, 4, 9, 6, 1,65, 6, 6,35, + 5,17,17, 6, 2,59, 5, 1,64, 3, 3,28, 4, 3,60, 6, 6,46, 4, 3,59, 6,10,28, + 0, 0, 0, 3,16, 3, 6,21,94, 4,16,86, 6,29,92, 6,39,10, 6,39,12, 6,39,16, + 6,39,17, 6,39,19, 4,28,48, 6,59,59, 6,49,22, 6,59,57, 7, 1,64, 7,12,69, + 3, 1,92, 6, 4,19, 6,22,21, 6,30,12, 6,30,11, 3,20,80, 4,22,86, 6,49,42, + 7, 1,86, 7,38,30,15, 3,59, 6,49,55, 5, 3,66, 6, 4,27, 6,49,62, 6,39,54, + 6, 2,71,15,10,11, 6,22,44, 6,22,45,15,14,77, 6,30,52, 6,30,48, 6,39,65, + 6,49,73,15,39,38, 3,58,19, 7,38,49, 6, 4,40, 4,17,16,15,33,11, 6,60, 2, + 3,58,22, 7,64,77, 6, 7, 1, 6,22,71, 6, 4,43, 4, 1,20, 5, 8,83, 6,39,91, + 4, 1,21,15, 6,66, 3,12,32, 6,16,46, 6,40,11, 6,40,21, 3,32,94, 6,50,19, + 6,60,29, 6, 7,22, 6,60,41,15, 1,63, 6,40,23, 6,23,12, 6,40,28, 7,13,51, + 7,13,53, 7,64,78, 5, 9, 7, 6,31,38, 6,31,37, 3,21,63, 6,50,32, 5,37,61, + 6, 1,84, 6, 7,42, 6,11,15, 6,16,84, 0, 0, 0,15,10,61, 6,11,25, 7,13,67, + 5,83,32, 3,12,49, 6,31,62, 5,13,40, 3,21,69, 6, 7,63,15, 4,19, 5, 4,24, + 6,17,22, 6,17,16,15,10,71, 4, 9,42, 6,40,92, 6,40,88, 3,38,80, 6,50,76, + 6,50,70, 6,61, 6, 6,61, 4, 4,35,49, 7,13,73, 7,13,89, 7, 2,91, 3,52,64, + 4,59,12, 7,39, 8, 3, 6, 7, 6,32, 3, 5, 2,78, 6,11,67, 6,11,64, 6,17,47, + 15,11,11, 6,23,81, 3,22, 8, 6,32,22, 6,32,11, 6,41,42, 6,41,16,15,33,63, + 7, 3,16, 6,61,24, 5,38,12, 7, 3,13,15,47, 5, 4,42, 7, 7,24,25,15,62,80, + 4,13,38, 6,41,55,15,58,22, 3,22,32, 6,24,22, 0, 0, 0,15,33,82, 6,51,28, + 5,38,33,15,11,24, 6,17,77, 6,32,55, 6,41,88, 6,61,59, 6,12, 3, 5, 6,42, + 4,18,30, 6,32,56, 5,31,70, 4, 4,39, 6, 8,14,15, 4,49, 4, 6,72, 3,13,21, + 6,24,42, 3,17,60, 4,13,60, 6,24,48, 5,18,94, 3,28,26, 6,51,62, 5,31,81, + 3,33,78, 6,61,72, 7, 3,82,15,52,84, 7,14,74, 4,63,86, 7,56, 3, 6, 5, 3, + 6,42,31, 7, 3,88, 7,62,82,15,40,89, 6,51,87, 4,13,69,15,21,84, 6,42,45, + 6,12,34,15,40,91, 6, 5,14,15, 4,61, 6,12,59, 6,12,49, 3,13,50, 6,18,25, + /* plane 2, page 249 */ + 0, 255, /* first, last */ + 6,18,34, 4,10, 5, 4,13,80, 6,25,13, 6,24,84, 6,25, 1,15,16,59, 3,22,85, + 6,42,69, 6,42,67, 4,30,19, 6,52,41, 6,52,47,15,34,84, 6,62,30, 7, 4,47, + 7, 4,56,15,47,73, 7,15,34,15,53,54, 4,54,61, 7,46, 8, 7,51,64, 7,51,56, + 6,12,64, 6,12,61, 6,18,40, 4,24,72,15,35,15, 6,52,57,15,48,29,15,53,56, + 5,91,91, 3,53,37, 6,33,65, 6,33,67, 6,33,74, 6,62,62, 6,18,66, 6,43,34, + 7,39,85, 6, 2, 6,15, 4,88, 6,13, 4,15,12,25,15,17, 8, 6,43,39,15,35,68, + 4,36,78, 7,32,67,15,67, 4, 6,34, 1, 3,29,31, 6,18,89, 4,10,36, 5,19,69, + 6,43,54, 4,30,76, 6,34,18,15,42,15, 7,51,91, 6,13,26, 5,19,81,15,54,28, + 6,13,37, 6,13,29, 6,19,29, 6,19,17, 5,15, 6,15,12,55, 6,26,13, 6,26,14, + 6,34,40, 6,43,90,15,48,63, 7,16,42, 6, 5,31, 6,13,38, 3,35,19, 6,53,75, + 7, 5,91, 7,25,77,15, 8,28, 6,19,42,15,29,64, 4,43,64, 7, 6, 7, 6,26,35, + 0, 0, 0, 4,37,63, 4,50, 1, 7,16,70, 6,63,85, 7, 6,30, 7, 6,28, 7,16,83, + 15,42,91, 6,64, 3,15,49, 3, 7, 6,45, 7,33,28, 5,76,93, 7,17,13, 7,26,19, + 4,60,57, 7,33,36, 3,14,54, 6,19,70, 3,40,74,15,49,23, 7, 6,74, 7, 6,73, + 4,68, 6, 7,66,45, 6,44,82, 7,26,38,15,30,18, 7,26,41, 7,40,77, 7,63,28, + 6,45, 3,15,55, 7, 4,11, 6, 7, 7, 8,15,55, 8, 6,64,61, 5,40,84,15,60,13, + 6, 8,91, 4, 7,72, 6,13,73, 3,19,48, 5,27,48, 6,45,40,15,36,72,15,43,55, + 15,43,54, 4,44,54, 4,56,13, 4,20,55, 6,45,62, 3,36, 5, 6,65, 5, 3, 7,10, + 6, 5,50, 6, 9, 7,15, 8,60, 6, 9, 8, 0, 0, 0, 6,14, 2, 6,14, 3, 6,20,36, + 6,14, 4, 6,27,50,15,18,26, 4,20,83, 6,36,11, 4,20,84, 6,35,86, 6,36,27, + 4,26,70, 6,36,30, 6,36,28, 6,36,29, 6,46,27, 6,65,30, 6,65,47,15,49,68, + 4,44,89, 7, 7,65, 7, 7,77, 7,18,36,15,55,39, 7,26,79,15,64,61, 7,34,28, + 7,52,62, 4,71,11, 0, 0, 0, 6,20,39, 4,32,47, 7,27,24, 3,59, 6, 6,27,81, + 4,26,85, 6,46,38, 4,38,92, 4,45,19,15,50, 4, 7, 8,14,15,49,93, 7,34,64, + 7,34,63, 3,59,13, 4,68,31, 4,51,44, 6, 5,51, 5,16,30, 6,56,14, 6,56,12, + 15,37,29, 7,27,65,15,24,42, 5,90,24, 6,28,13, 4,21,37,15,31,27, 6,66,39, + 7,19,47, 7,57,33, 6, 9,10, 6,56,48, 0, 0, 0, 6,56,60, 3,64,92, 6,28,27, + 7,19,89, 7,19,83,15,31,51, 3,36,77, 7, 9,36, 6,20,61, 4,16,12, 7,20,17, + 4,52,23, 7,28,65, 6, 5,59, 4,21,82, 6,57,39, 6,57,42, 7,28,75,15,37,83, + 6,67,51, 6,67,47, 4,52,42,15,70,62, 7,48,75,15,76,31, 6,67,56, 7,20,90, + 7,20,81,15,65,42, 6,48, 2, 6,67,78, 7,21,21, 3,54,88, 5,63,62, 7,29,48, + 15,56,88, 7,43,63, 4,69,10, 7,43,75, 5,29,39, 5,36,21, 6,58,19, 6,68,16, + /* plane 2, page 250 */ + 0, 29, /* first, last */ + 4,57,86, 6,68,26, 6,28,87, 6,58,29, 4,53, 3, 4,62,64, 6,68,48, 7,30, 9, + 7,11,53,15,57,18, 7,49,90, 7,58,64, 4,58,57, 7,37,69, 4,63,23, 4,66,78, + 7,50,37, 5,85,22, 5,85,21,15,76,87, 7,30,60, 6,38,30, 4,72,47, 6,58,64, + 4, 8,20, 3,60,15, 5,51,49, 7,45, 8, 4,40,87, 7,62,45, + /* plane 2, page 251: --- */ + /* plane 2, page 252: --- */ + /* plane 2, page 253: --- */ + /* plane 2, page 254: --- */ + /* plane 2, page 255: --- */ + /* plane 3: --- */ + /* plane 4: --- */ + /* plane 5: --- */ + /* plane 6: --- */ + /* plane 7: --- */ + /* plane 8: --- */ + /* plane 9: --- */ + /* plane 10: --- */ + /* plane 11: --- */ + /* plane 12: --- */ + /* plane 13: --- */ + /* plane 14: --- */ + /* plane 15: --- */ + /* plane 16: --- */ +}; + +sal_Int32 const aImplUnicodeToCns116431992PageOffsets[] = { + 0, /* plane 0, page 0; 20/245 bytes (8.2%) */ + -1, /* plane 0, page 1 */ + 245, /* plane 0, page 2; 17/59 bytes (28.8%) */ + 304, /* plane 0, page 3; 146/173 bytes (84.4%) */ + -1, /* plane 0, page 4 */ + -1, /* plane 0, page 5 */ + -1, /* plane 0, page 6 */ + -1, /* plane 0, page 7 */ + -1, /* plane 0, page 8 */ + -1, /* plane 0, page 9 */ + -1, /* plane 0, page 10 */ + -1, /* plane 0, page 11 */ + -1, /* plane 0, page 12 */ + -1, /* plane 0, page 13 */ + -1, /* plane 0, page 14 */ + -1, /* plane 0, page 15 */ + -1, /* plane 0, page 16 */ + -1, /* plane 0, page 17 */ + -1, /* plane 0, page 18 */ + -1, /* plane 0, page 19 */ + -1, /* plane 0, page 20 */ + -1, /* plane 0, page 21 */ + -1, /* plane 0, page 22 */ + -1, /* plane 0, page 23 */ + -1, /* plane 0, page 24 */ + -1, /* plane 0, page 25 */ + -1, /* plane 0, page 26 */ + -1, /* plane 0, page 27 */ + -1, /* plane 0, page 28 */ + -1, /* plane 0, page 29 */ + -1, /* plane 0, page 30 */ + -1, /* plane 0, page 31 */ + 477, /* plane 0, page 32; 41/134 bytes (30.6%) */ + 611, /* plane 0, page 33; 95/455 bytes (20.9%) */ + 1066, /* plane 0, page 34; 59/515 bytes (11.5%) */ + -1, /* plane 0, page 35 */ + 1581, /* plane 0, page 36; 161/380 bytes (42.4%) */ + 1961, /* plane 0, page 37; 164/692 bytes (23.7%) */ + 2653, /* plane 0, page 38; 20/188 bytes (10.6%) */ + -1, /* plane 0, page 39 */ + -1, /* plane 0, page 40 */ + -1, /* plane 0, page 41 */ + -1, /* plane 0, page 42 */ + -1, /* plane 0, page 43 */ + -1, /* plane 0, page 44 */ + -1, /* plane 0, page 45 */ + -1, /* plane 0, page 46 */ + -1, /* plane 0, page 47 */ + 2841, /* plane 0, page 48; 89/758 bytes (11.7%) */ + 3599, /* plane 0, page 49; 113/113 bytes (100.0%) */ + 3712, /* plane 0, page 50; 5/5 bytes (100.0%) */ + 3717, /* plane 0, page 51; 35/218 bytes (16.1%) */ + 3935, /* plane 0, page 52; 548/767 bytes (71.4%) */ + 4702, /* plane 0, page 53; 623/770 bytes (80.9%) */ + 5472, /* plane 0, page 54; 653/767 bytes (85.1%) */ + 6239, /* plane 0, page 55; 692/767 bytes (90.2%) */ + 7006, /* plane 0, page 56; 662/770 bytes (86.0%) */ + 7776, /* plane 0, page 57; 698/767 bytes (91.0%) */ + 8543, /* plane 0, page 58; 662/764 bytes (86.6%) */ + 9307, /* plane 0, page 59; 641/767 bytes (83.6%) */ + 10074, /* plane 0, page 60; 695/770 bytes (90.3%) */ + 10844, /* plane 0, page 61; 647/770 bytes (84.0%) */ + 11614, /* plane 0, page 62; 674/770 bytes (87.5%) */ + 12384, /* plane 0, page 63; 716/767 bytes (93.4%) */ + 13151, /* plane 0, page 64; 710/770 bytes (92.2%) */ + 13921, /* plane 0, page 65; 704/767 bytes (91.8%) */ + 14688, /* plane 0, page 66; 740/770 bytes (96.1%) */ + 15458, /* plane 0, page 67; 707/770 bytes (91.8%) */ + 16228, /* plane 0, page 68; 698/770 bytes (90.6%) */ + 16998, /* plane 0, page 69; 740/770 bytes (96.1%) */ + 17768, /* plane 0, page 70; 725/770 bytes (94.2%) */ + 18538, /* plane 0, page 71; 716/770 bytes (93.0%) */ + 19308, /* plane 0, page 72; 719/770 bytes (93.4%) */ + 20078, /* plane 0, page 73; 668/767 bytes (87.1%) */ + 20845, /* plane 0, page 74; 755/770 bytes (98.1%) */ + 21615, /* plane 0, page 75; 746/770 bytes (96.9%) */ + 22385, /* plane 0, page 76; 716/770 bytes (93.0%) */ + 23155, /* plane 0, page 77; 515/548 bytes (94.0%) */ + 23703, /* plane 0, page 78; 599/770 bytes (77.8%) */ + 24473, /* plane 0, page 79; 692/770 bytes (89.9%) */ + 25243, /* plane 0, page 80; 734/770 bytes (95.3%) */ + 26013, /* plane 0, page 81; 704/767 bytes (91.8%) */ + 26780, /* plane 0, page 82; 716/770 bytes (93.0%) */ + 27550, /* plane 0, page 83; 704/770 bytes (91.4%) */ + 28320, /* plane 0, page 84; 689/770 bytes (89.5%) */ + 29090, /* plane 0, page 85; 683/770 bytes (88.7%) */ + 29860, /* plane 0, page 86; 710/770 bytes (92.2%) */ + 30630, /* plane 0, page 87; 692/770 bytes (89.9%) */ + 31400, /* plane 0, page 88; 713/770 bytes (92.6%) */ + 32170, /* plane 0, page 89; 731/770 bytes (94.9%) */ + 32940, /* plane 0, page 90; 731/770 bytes (94.9%) */ + 33710, /* plane 0, page 91; 734/770 bytes (95.3%) */ + 34480, /* plane 0, page 92; 674/770 bytes (87.5%) */ + 35250, /* plane 0, page 93; 722/770 bytes (93.8%) */ + 36020, /* plane 0, page 94; 716/770 bytes (93.0%) */ + 36790, /* plane 0, page 95; 740/770 bytes (96.1%) */ + 37560, /* plane 0, page 96; 692/770 bytes (89.9%) */ + 38330, /* plane 0, page 97; 749/770 bytes (97.3%) */ + 39100, /* plane 0, page 98; 707/770 bytes (91.8%) */ + 39870, /* plane 0, page 99; 686/767 bytes (89.4%) */ + 40637, /* plane 0, page 100; 719/761 bytes (94.5%) */ + 41398, /* plane 0, page 101; 731/770 bytes (94.9%) */ + 42168, /* plane 0, page 102; 734/770 bytes (95.3%) */ + 42938, /* plane 0, page 103; 716/770 bytes (93.0%) */ + 43708, /* plane 0, page 104; 668/770 bytes (86.8%) */ + 44478, /* plane 0, page 105; 692/770 bytes (89.9%) */ + 45248, /* plane 0, page 106; 728/770 bytes (94.5%) */ + 46018, /* plane 0, page 107; 731/770 bytes (94.9%) */ + 46788, /* plane 0, page 108; 695/770 bytes (90.3%) */ + 47558, /* plane 0, page 109; 683/770 bytes (88.7%) */ + 48328, /* plane 0, page 110; 704/770 bytes (91.4%) */ + 49098, /* plane 0, page 111; 746/770 bytes (96.9%) */ + 49868, /* plane 0, page 112; 710/770 bytes (92.2%) */ + 50638, /* plane 0, page 113; 737/770 bytes (95.7%) */ + 51408, /* plane 0, page 114; 719/770 bytes (93.4%) */ + 52178, /* plane 0, page 115; 716/770 bytes (93.0%) */ + 52948, /* plane 0, page 116; 731/770 bytes (94.9%) */ + 53718, /* plane 0, page 117; 683/770 bytes (88.7%) */ + 54488, /* plane 0, page 118; 704/770 bytes (91.4%) */ + 55258, /* plane 0, page 119; 734/767 bytes (95.7%) */ + 56025, /* plane 0, page 120; 677/764 bytes (88.6%) */ + 56789, /* plane 0, page 121; 728/770 bytes (94.5%) */ + 57559, /* plane 0, page 122; 713/770 bytes (92.6%) */ + 58329, /* plane 0, page 123; 680/770 bytes (88.3%) */ + 59099, /* plane 0, page 124; 731/770 bytes (94.9%) */ + 59869, /* plane 0, page 125; 749/770 bytes (97.3%) */ + 60639, /* plane 0, page 126; 455/479 bytes (95.0%) */ + 61118, /* plane 0, page 127; 572/608 bytes (94.1%) */ + 61726, /* plane 0, page 128; 698/770 bytes (90.6%) */ + 62496, /* plane 0, page 129; 686/770 bytes (89.1%) */ + 63266, /* plane 0, page 130; 695/770 bytes (90.3%) */ + 64036, /* plane 0, page 131; 662/770 bytes (86.0%) */ + 64806, /* plane 0, page 132; 695/770 bytes (90.3%) */ + 65576, /* plane 0, page 133; 740/770 bytes (96.1%) */ + 66346, /* plane 0, page 134; 710/770 bytes (92.2%) */ + 67116, /* plane 0, page 135; 734/770 bytes (95.3%) */ + 67886, /* plane 0, page 136; 710/770 bytes (92.2%) */ + 68656, /* plane 0, page 137; 686/770 bytes (89.1%) */ + 69426, /* plane 0, page 138; 746/770 bytes (96.9%) */ + 70196, /* plane 0, page 139; 470/482 bytes (97.5%) */ + 70678, /* plane 0, page 140; 599/605 bytes (99.0%) */ + 71283, /* plane 0, page 141; 518/770 bytes (67.3%) */ + 72053, /* plane 0, page 142; 713/770 bytes (92.6%) */ + 72823, /* plane 0, page 143; 575/770 bytes (74.7%) */ + 73593, /* plane 0, page 144; 716/770 bytes (93.0%) */ + 74363, /* plane 0, page 145; 713/770 bytes (92.6%) */ + 75133, /* plane 0, page 146; 755/770 bytes (98.1%) */ + 75903, /* plane 0, page 147; 755/770 bytes (98.1%) */ + 76673, /* plane 0, page 148; 389/401 bytes (97.0%) */ + 77074, /* plane 0, page 149; 332/383 bytes (86.7%) */ + 77457, /* plane 0, page 150; 632/686 bytes (92.1%) */ + 78143, /* plane 0, page 151; 707/770 bytes (91.8%) */ + 78913, /* plane 0, page 152; 554/770 bytes (71.9%) */ + 79683, /* plane 0, page 153; 602/770 bytes (78.2%) */ + 80453, /* plane 0, page 154; 572/770 bytes (74.3%) */ + 81223, /* plane 0, page 155; 728/770 bytes (94.5%) */ + 81993, /* plane 0, page 156; 419/770 bytes (54.4%) */ + 82763, /* plane 0, page 157; 737/770 bytes (95.7%) */ + 83533, /* plane 0, page 158; 485/770 bytes (63.0%) */ + 84303, /* plane 0, page 159; 431/500 bytes (86.2%) */ + -1, /* plane 0, page 160 */ + -1, /* plane 0, page 161 */ + -1, /* plane 0, page 162 */ + -1, /* plane 0, page 163 */ + -1, /* plane 0, page 164 */ + -1, /* plane 0, page 165 */ + -1, /* plane 0, page 166 */ + -1, /* plane 0, page 167 */ + -1, /* plane 0, page 168 */ + -1, /* plane 0, page 169 */ + -1, /* plane 0, page 170 */ + -1, /* plane 0, page 171 */ + -1, /* plane 0, page 172 */ + -1, /* plane 0, page 173 */ + -1, /* plane 0, page 174 */ + -1, /* plane 0, page 175 */ + -1, /* plane 0, page 176 */ + -1, /* plane 0, page 177 */ + -1, /* plane 0, page 178 */ + -1, /* plane 0, page 179 */ + -1, /* plane 0, page 180 */ + -1, /* plane 0, page 181 */ + -1, /* plane 0, page 182 */ + -1, /* plane 0, page 183 */ + -1, /* plane 0, page 184 */ + -1, /* plane 0, page 185 */ + -1, /* plane 0, page 186 */ + -1, /* plane 0, page 187 */ + -1, /* plane 0, page 188 */ + -1, /* plane 0, page 189 */ + -1, /* plane 0, page 190 */ + -1, /* plane 0, page 191 */ + -1, /* plane 0, page 192 */ + -1, /* plane 0, page 193 */ + -1, /* plane 0, page 194 */ + -1, /* plane 0, page 195 */ + -1, /* plane 0, page 196 */ + -1, /* plane 0, page 197 */ + -1, /* plane 0, page 198 */ + -1, /* plane 0, page 199 */ + -1, /* plane 0, page 200 */ + -1, /* plane 0, page 201 */ + -1, /* plane 0, page 202 */ + -1, /* plane 0, page 203 */ + -1, /* plane 0, page 204 */ + -1, /* plane 0, page 205 */ + -1, /* plane 0, page 206 */ + -1, /* plane 0, page 207 */ + -1, /* plane 0, page 208 */ + -1, /* plane 0, page 209 */ + -1, /* plane 0, page 210 */ + -1, /* plane 0, page 211 */ + -1, /* plane 0, page 212 */ + -1, /* plane 0, page 213 */ + -1, /* plane 0, page 214 */ + -1, /* plane 0, page 215 */ + -1, /* plane 0, page 216 */ + -1, /* plane 0, page 217 */ + -1, /* plane 0, page 218 */ + -1, /* plane 0, page 219 */ + -1, /* plane 0, page 220 */ + -1, /* plane 0, page 221 */ + -1, /* plane 0, page 222 */ + -1, /* plane 0, page 223 */ + -1, /* plane 0, page 224 */ + -1, /* plane 0, page 225 */ + -1, /* plane 0, page 226 */ + -1, /* plane 0, page 227 */ + -1, /* plane 0, page 228 */ + -1, /* plane 0, page 229 */ + -1, /* plane 0, page 230 */ + -1, /* plane 0, page 231 */ + -1, /* plane 0, page 232 */ + -1, /* plane 0, page 233 */ + -1, /* plane 0, page 234 */ + -1, /* plane 0, page 235 */ + -1, /* plane 0, page 236 */ + -1, /* plane 0, page 237 */ + -1, /* plane 0, page 238 */ + -1, /* plane 0, page 239 */ + -1, /* plane 0, page 240 */ + -1, /* plane 0, page 241 */ + -1, /* plane 0, page 242 */ + -1, /* plane 0, page 243 */ + -1, /* plane 0, page 244 */ + -1, /* plane 0, page 245 */ + -1, /* plane 0, page 246 */ + -1, /* plane 0, page 247 */ + -1, /* plane 0, page 248 */ + -1, /* plane 0, page 249 */ + 84803, /* plane 0, page 250; 5/5 bytes (100.0%) */ + -1, /* plane 0, page 251 */ + -1, /* plane 0, page 252 */ + -1, /* plane 0, page 253 */ + 84808, /* plane 0, page 254; 152/182 bytes (83.5%) */ + 84990, /* plane 0, page 255; 272/689 bytes (39.5%) */ + /* plane 1: --- */ + 85679, /* plane 2, page 0; 431/767 bytes (56.2%) */ + 86446, /* plane 2, page 1; 485/764 bytes (63.5%) */ + 87210, /* plane 2, page 2; 599/770 bytes (77.8%) */ + 87980, /* plane 2, page 3; 506/758 bytes (66.8%) */ + 88738, /* plane 2, page 4; 500/764 bytes (65.4%) */ + 89502, /* plane 2, page 5; 563/770 bytes (73.1%) */ + 90272, /* plane 2, page 6; 584/770 bytes (75.8%) */ + 91042, /* plane 2, page 7; 530/764 bytes (69.4%) */ + 91806, /* plane 2, page 8; 578/770 bytes (75.1%) */ + 92576, /* plane 2, page 9; 569/764 bytes (74.5%) */ + 93340, /* plane 2, page 10; 545/770 bytes (70.8%) */ + 94110, /* plane 2, page 11; 602/743 bytes (81.0%) */ + 94853, /* plane 2, page 12; 521/758 bytes (68.7%) */ + 95611, /* plane 2, page 13; 407/758 bytes (53.7%) */ + 96369, /* plane 2, page 14; 371/770 bytes (48.2%) */ + 97139, /* plane 2, page 15; 404/770 bytes (52.5%) */ + 97909, /* plane 2, page 16; 353/746 bytes (47.3%) */ + 98655, /* plane 2, page 17; 422/764 bytes (55.2%) */ + 99419, /* plane 2, page 18; 482/749 bytes (64.4%) */ + 100168, /* plane 2, page 19; 497/767 bytes (64.8%) */ + 100935, /* plane 2, page 20; 464/770 bytes (60.3%) */ + 101705, /* plane 2, page 21; 515/767 bytes (67.1%) */ + 102472, /* plane 2, page 22; 527/767 bytes (68.7%) */ + 103239, /* plane 2, page 23; 602/770 bytes (78.2%) */ + 104009, /* plane 2, page 24; 545/770 bytes (70.8%) */ + 104779, /* plane 2, page 25; 512/758 bytes (67.5%) */ + 105537, /* plane 2, page 26; 557/770 bytes (72.3%) */ + 106307, /* plane 2, page 27; 428/761 bytes (56.2%) */ + 107068, /* plane 2, page 28; 539/764 bytes (70.5%) */ + 107832, /* plane 2, page 29; 560/770 bytes (72.7%) */ + 108602, /* plane 2, page 30; 485/761 bytes (63.7%) */ + 109363, /* plane 2, page 31; 476/740 bytes (64.3%) */ + 110103, /* plane 2, page 32; 563/767 bytes (73.4%) */ + 110870, /* plane 2, page 33; 545/767 bytes (71.1%) */ + 111637, /* plane 2, page 34; 587/770 bytes (76.2%) */ + 112407, /* plane 2, page 35; 545/767 bytes (71.1%) */ + 113174, /* plane 2, page 36; 608/767 bytes (79.3%) */ + 113941, /* plane 2, page 37; 560/770 bytes (72.7%) */ + 114711, /* plane 2, page 38; 572/770 bytes (74.3%) */ + 115481, /* plane 2, page 39; 560/770 bytes (72.7%) */ + 116251, /* plane 2, page 40; 491/770 bytes (63.8%) */ + 117021, /* plane 2, page 41; 542/770 bytes (70.4%) */ + 117791, /* plane 2, page 42; 488/758 bytes (64.4%) */ + 118549, /* plane 2, page 43; 509/770 bytes (66.1%) */ + 119319, /* plane 2, page 44; 533/767 bytes (69.5%) */ + 120086, /* plane 2, page 45; 437/770 bytes (56.8%) */ + 120856, /* plane 2, page 46; 506/767 bytes (66.0%) */ + 121623, /* plane 2, page 47; 533/755 bytes (70.6%) */ + 122378, /* plane 2, page 48; 536/770 bytes (69.6%) */ + 123148, /* plane 2, page 49; 527/770 bytes (68.4%) */ + 123918, /* plane 2, page 50; 416/770 bytes (54.0%) */ + 124688, /* plane 2, page 51; 503/758 bytes (66.4%) */ + 125446, /* plane 2, page 52; 593/770 bytes (77.0%) */ + 126216, /* plane 2, page 53; 521/758 bytes (68.7%) */ + 126974, /* plane 2, page 54; 539/770 bytes (70.0%) */ + 127744, /* plane 2, page 55; 539/767 bytes (70.3%) */ + 128511, /* plane 2, page 56; 584/767 bytes (76.1%) */ + 129278, /* plane 2, page 57; 593/770 bytes (77.0%) */ + 130048, /* plane 2, page 58; 563/770 bytes (73.1%) */ + 130818, /* plane 2, page 59; 617/770 bytes (80.1%) */ + 131588, /* plane 2, page 60; 533/746 bytes (71.4%) */ + 132334, /* plane 2, page 61; 551/767 bytes (71.8%) */ + 133101, /* plane 2, page 62; 533/770 bytes (69.2%) */ + 133871, /* plane 2, page 63; 530/770 bytes (68.8%) */ + 134641, /* plane 2, page 64; 533/767 bytes (69.5%) */ + 135408, /* plane 2, page 65; 506/755 bytes (67.0%) */ + 136163, /* plane 2, page 66; 512/755 bytes (67.8%) */ + 136918, /* plane 2, page 67; 539/767 bytes (70.3%) */ + 137685, /* plane 2, page 68; 491/767 bytes (64.0%) */ + 138452, /* plane 2, page 69; 590/770 bytes (76.6%) */ + 139222, /* plane 2, page 70; 521/770 bytes (67.7%) */ + 139992, /* plane 2, page 71; 530/764 bytes (69.4%) */ + 140756, /* plane 2, page 72; 521/740 bytes (70.4%) */ + 141496, /* plane 2, page 73; 527/764 bytes (69.0%) */ + 142260, /* plane 2, page 74; 566/767 bytes (73.8%) */ + 143027, /* plane 2, page 75; 536/764 bytes (70.2%) */ + 143791, /* plane 2, page 76; 506/770 bytes (65.7%) */ + 144561, /* plane 2, page 77; 512/770 bytes (66.5%) */ + 145331, /* plane 2, page 78; 506/755 bytes (67.0%) */ + 146086, /* plane 2, page 79; 509/770 bytes (66.1%) */ + 146856, /* plane 2, page 80; 590/761 bytes (77.5%) */ + 147617, /* plane 2, page 81; 509/770 bytes (66.1%) */ + 148387, /* plane 2, page 82; 491/770 bytes (63.8%) */ + 149157, /* plane 2, page 83; 545/767 bytes (71.1%) */ + 149924, /* plane 2, page 84; 494/770 bytes (64.2%) */ + 150694, /* plane 2, page 85; 530/770 bytes (68.8%) */ + 151464, /* plane 2, page 86; 449/767 bytes (58.5%) */ + 152231, /* plane 2, page 87; 500/767 bytes (65.2%) */ + 152998, /* plane 2, page 88; 461/767 bytes (60.1%) */ + 153765, /* plane 2, page 89; 563/770 bytes (73.1%) */ + 154535, /* plane 2, page 90; 545/770 bytes (70.8%) */ + 155305, /* plane 2, page 91; 623/770 bytes (80.9%) */ + 156075, /* plane 2, page 92; 647/764 bytes (84.7%) */ + 156839, /* plane 2, page 93; 587/770 bytes (76.2%) */ + 157609, /* plane 2, page 94; 518/770 bytes (67.3%) */ + 158379, /* plane 2, page 95; 578/770 bytes (75.1%) */ + 159149, /* plane 2, page 96; 545/755 bytes (72.2%) */ + 159904, /* plane 2, page 97; 575/743 bytes (77.4%) */ + 160647, /* plane 2, page 98; 536/770 bytes (69.6%) */ + 161417, /* plane 2, page 99; 557/767 bytes (72.6%) */ + 162184, /* plane 2, page 100; 602/767 bytes (78.5%) */ + 162951, /* plane 2, page 101; 617/767 bytes (80.4%) */ + 163718, /* plane 2, page 102; 575/752 bytes (76.5%) */ + 164470, /* plane 2, page 103; 503/731 bytes (68.8%) */ + 165201, /* plane 2, page 104; 524/770 bytes (68.1%) */ + 165971, /* plane 2, page 105; 608/770 bytes (79.0%) */ + 166741, /* plane 2, page 106; 587/770 bytes (76.2%) */ + 167511, /* plane 2, page 107; 653/770 bytes (84.8%) */ + 168281, /* plane 2, page 108; 662/770 bytes (86.0%) */ + 169051, /* plane 2, page 109; 611/770 bytes (79.4%) */ + 169821, /* plane 2, page 110; 635/770 bytes (82.5%) */ + 170591, /* plane 2, page 111; 605/770 bytes (78.6%) */ + 171361, /* plane 2, page 112; 611/770 bytes (79.4%) */ + 172131, /* plane 2, page 113; 608/770 bytes (79.0%) */ + 172901, /* plane 2, page 114; 572/734 bytes (77.9%) */ + 173635, /* plane 2, page 115; 590/767 bytes (76.9%) */ + 174402, /* plane 2, page 116; 602/770 bytes (78.2%) */ + 175172, /* plane 2, page 117; 614/770 bytes (79.7%) */ + 175942, /* plane 2, page 118; 617/770 bytes (80.1%) */ + 176712, /* plane 2, page 119; 560/770 bytes (72.7%) */ + 177482, /* plane 2, page 120; 596/767 bytes (77.7%) */ + 178249, /* plane 2, page 121; 590/761 bytes (77.5%) */ + 179010, /* plane 2, page 122; 659/770 bytes (85.6%) */ + 179780, /* plane 2, page 123; 635/770 bytes (82.5%) */ + 180550, /* plane 2, page 124; 659/767 bytes (85.9%) */ + 181317, /* plane 2, page 125; 596/767 bytes (77.7%) */ + 182084, /* plane 2, page 126; 575/770 bytes (74.7%) */ + 182854, /* plane 2, page 127; 632/770 bytes (82.1%) */ + 183624, /* plane 2, page 128; 461/770 bytes (59.9%) */ + 184394, /* plane 2, page 129; 485/764 bytes (63.5%) */ + 185158, /* plane 2, page 130; 497/752 bytes (66.1%) */ + 185910, /* plane 2, page 131; 578/764 bytes (75.7%) */ + 186674, /* plane 2, page 132; 557/767 bytes (72.6%) */ + 187441, /* plane 2, page 133; 533/764 bytes (69.8%) */ + 188205, /* plane 2, page 134; 602/770 bytes (78.2%) */ + 188975, /* plane 2, page 135; 611/770 bytes (79.4%) */ + 189745, /* plane 2, page 136; 551/770 bytes (71.6%) */ + 190515, /* plane 2, page 137; 506/770 bytes (65.7%) */ + 191285, /* plane 2, page 138; 461/764 bytes (60.3%) */ + 192049, /* plane 2, page 139; 440/758 bytes (58.0%) */ + 192807, /* plane 2, page 140; 485/770 bytes (63.0%) */ + 193577, /* plane 2, page 141; 494/761 bytes (64.9%) */ + 194338, /* plane 2, page 142; 515/725 bytes (71.0%) */ + 195063, /* plane 2, page 143; 614/770 bytes (79.7%) */ + 195833, /* plane 2, page 144; 617/770 bytes (80.1%) */ + 196603, /* plane 2, page 145; 515/770 bytes (66.9%) */ + 197373, /* plane 2, page 146; 575/761 bytes (75.6%) */ + 198134, /* plane 2, page 147; 614/758 bytes (81.0%) */ + 198892, /* plane 2, page 148; 662/764 bytes (86.6%) */ + 199656, /* plane 2, page 149; 590/758 bytes (77.8%) */ + 200414, /* plane 2, page 150; 566/767 bytes (73.8%) */ + 201181, /* plane 2, page 151; 524/749 bytes (70.0%) */ + 201930, /* plane 2, page 152; 536/722 bytes (74.2%) */ + 202652, /* plane 2, page 153; 485/692 bytes (70.1%) */ + 203344, /* plane 2, page 154; 530/719 bytes (73.7%) */ + 204063, /* plane 2, page 155; 545/770 bytes (70.8%) */ + 204833, /* plane 2, page 156; 647/767 bytes (84.4%) */ + 205600, /* plane 2, page 157; 575/770 bytes (74.7%) */ + 206370, /* plane 2, page 158; 461/749 bytes (61.5%) */ + 207119, /* plane 2, page 159; 548/755 bytes (72.6%) */ + 207874, /* plane 2, page 160; 581/770 bytes (75.5%) */ + 208644, /* plane 2, page 161; 530/770 bytes (68.8%) */ + 209414, /* plane 2, page 162; 542/767 bytes (70.7%) */ + 210181, /* plane 2, page 163; 614/767 bytes (80.1%) */ + 210948, /* plane 2, page 164; 560/770 bytes (72.7%) */ + 211718, /* plane 2, page 165; 593/770 bytes (77.0%) */ + 212488, /* plane 2, page 166; 503/647 bytes (77.7%) */ + -1, /* plane 2, page 167 */ + -1, /* plane 2, page 168 */ + -1, /* plane 2, page 169 */ + -1, /* plane 2, page 170 */ + -1, /* plane 2, page 171 */ + -1, /* plane 2, page 172 */ + -1, /* plane 2, page 173 */ + -1, /* plane 2, page 174 */ + -1, /* plane 2, page 175 */ + -1, /* plane 2, page 176 */ + -1, /* plane 2, page 177 */ + -1, /* plane 2, page 178 */ + -1, /* plane 2, page 179 */ + -1, /* plane 2, page 180 */ + -1, /* plane 2, page 181 */ + -1, /* plane 2, page 182 */ + -1, /* plane 2, page 183 */ + -1, /* plane 2, page 184 */ + -1, /* plane 2, page 185 */ + -1, /* plane 2, page 186 */ + -1, /* plane 2, page 187 */ + -1, /* plane 2, page 188 */ + -1, /* plane 2, page 189 */ + -1, /* plane 2, page 190 */ + -1, /* plane 2, page 191 */ + -1, /* plane 2, page 192 */ + -1, /* plane 2, page 193 */ + -1, /* plane 2, page 194 */ + -1, /* plane 2, page 195 */ + -1, /* plane 2, page 196 */ + -1, /* plane 2, page 197 */ + -1, /* plane 2, page 198 */ + -1, /* plane 2, page 199 */ + -1, /* plane 2, page 200 */ + -1, /* plane 2, page 201 */ + -1, /* plane 2, page 202 */ + -1, /* plane 2, page 203 */ + -1, /* plane 2, page 204 */ + -1, /* plane 2, page 205 */ + -1, /* plane 2, page 206 */ + -1, /* plane 2, page 207 */ + -1, /* plane 2, page 208 */ + -1, /* plane 2, page 209 */ + -1, /* plane 2, page 210 */ + -1, /* plane 2, page 211 */ + -1, /* plane 2, page 212 */ + -1, /* plane 2, page 213 */ + -1, /* plane 2, page 214 */ + -1, /* plane 2, page 215 */ + -1, /* plane 2, page 216 */ + -1, /* plane 2, page 217 */ + -1, /* plane 2, page 218 */ + -1, /* plane 2, page 219 */ + -1, /* plane 2, page 220 */ + -1, /* plane 2, page 221 */ + -1, /* plane 2, page 222 */ + -1, /* plane 2, page 223 */ + -1, /* plane 2, page 224 */ + -1, /* plane 2, page 225 */ + -1, /* plane 2, page 226 */ + -1, /* plane 2, page 227 */ + -1, /* plane 2, page 228 */ + -1, /* plane 2, page 229 */ + -1, /* plane 2, page 230 */ + -1, /* plane 2, page 231 */ + -1, /* plane 2, page 232 */ + -1, /* plane 2, page 233 */ + -1, /* plane 2, page 234 */ + -1, /* plane 2, page 235 */ + -1, /* plane 2, page 236 */ + -1, /* plane 2, page 237 */ + -1, /* plane 2, page 238 */ + -1, /* plane 2, page 239 */ + -1, /* plane 2, page 240 */ + -1, /* plane 2, page 241 */ + -1, /* plane 2, page 242 */ + -1, /* plane 2, page 243 */ + -1, /* plane 2, page 244 */ + -1, /* plane 2, page 245 */ + -1, /* plane 2, page 246 */ + -1, /* plane 2, page 247 */ + 213135, /* plane 2, page 248; 761/770 bytes (98.8%) */ + 213905, /* plane 2, page 249; 758/770 bytes (98.4%) */ + 214675, /* plane 2, page 250; 92/92 bytes (100.0%) */ + -1, /* plane 2, page 251 */ + -1, /* plane 2, page 252 */ + -1, /* plane 2, page 253 */ + -1, /* plane 2, page 254 */ + -1, /* plane 2, page 255 */ + /* plane 3: --- */ + /* plane 4: --- */ + /* plane 5: --- */ + /* plane 6: --- */ + /* plane 7: --- */ + /* plane 8: --- */ + /* plane 9: --- */ + /* plane 10: --- */ + /* plane 11: --- */ + /* plane 12: --- */ + /* plane 13: --- */ + /* plane 14: --- */ + /* plane 15: --- */ + /* plane 16: --- */ +}; + +sal_Int32 const aImplUnicodeToCns116431992PlaneOffsets[] = { + 0 * 256, /* plane 0; 496/1024 bytes (48.4%), 74432/85679 bytes (86.9%) */ + -1, /* plane 1 */ + 1 * 256, /* plane 2; 680/1024 bytes (66.4%), 92476/129088 bytes (71.6%) */ + -1, /* plane 3 */ + -1, /* plane 4 */ + -1, /* plane 5 */ + -1, /* plane 6 */ + -1, /* plane 7 */ + -1, /* plane 8 */ + -1, /* plane 9 */ + -1, /* plane 10 */ + -1, /* plane 11 */ + -1, /* plane 12 */ + -1, /* plane 13 */ + -1, /* plane 14 */ + -1, /* plane 15 */ + -1, /* plane 16 */ + /* 8/68 bytes (11.8%), 1176/2048 bytes (57.4%), 166908/214767 bytes (77.7%) */ +}; diff --git a/sal/textenc/generate/gb180302000.pl b/sal/textenc/generate/gb180302000.pl new file mode 100644 index 000000000..7543e7a69 --- /dev/null +++ b/sal/textenc/generate/gb180302000.pl @@ -0,0 +1,296 @@ +#!/usr/bin/env perl +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +# The following files must be available in a ./input subdir: + +# : +# "modified version="3" date="2001-02-21"" + +$id = "Gb180302000"; + +sub printUtf32 +{ + my $utf32 = $_[0]; + return sprintf("U+%04X", $utf32); +} + +sub printGb +{ + if (defined($_[2])) + { + return sprintf("%02X%02X%02X%02X", $_[0], $_[1], $_[2], $_[3]); + } + elsif (defined($_[1])) + { + return sprintf("%02X%02X", $_[0], $_[1]); + } + else + { + return sprintf("%02X", $_[0]); + } +} + +$gb_map_2_count = 0; +$gb_map_4_count = 0; +$gb_map_4_ranges = 0; +$gb_map_4_max = 0; +$uni_map_count = 0; + +$range_count = 0; + +if (1) +{ + $filename = "gb-18030-2000.xml"; + open IN, ("input/" . $filename) or die "Cannot read " . $filename; + while () + { + if (/^[ \t]*$/) + { + $utf32 = oct("0x" . $1); + $gb1 = oct("0x" . $2); + ($utf32 == $gb1) + or die "Bad " . printUtf32($utf32) . " to " . printGb($gb1); + } + elsif (/^[ \t]*$/) + { + $utf32 = oct("0x" . $1); + $gb1 = oct("0x" . $2); + $gb2 = oct("0x" . $3); + $gb_code = ($gb1 - 0x81) * 190 + + ($gb2 <= 0x7E ? $gb2 - 0x40 : $gb2 - 0x80 + 63); + !defined($gb_map_2[$gb_code]) + or die "Redefined " . printGb($gb1, $gb2); + $gb_map_2[$gb_code] = $utf32; + ++$gb_map_2_count; + + !defined($uni_map[$utf32]) or die "Double Unicode mapping"; + $uni_map[$utf32] = $gb1 << 8 | $gb2; + ++$uni_map_count; + } + elsif (/^[ \t]*$/) + { + $utf32 = oct("0x" . $1); + $gb1 = oct("0x" . $2); + $gb2 = oct("0x" . $3); + $gb3 = oct("0x" . $4); + $gb4 = oct("0x" . $5); + $gb_code = ($gb1 - 0x81) * 12600 + + ($gb2 - 0x30) * 1260 + + ($gb3 - 0x81) * 10 + + ($gb4 - 0x30); + !defined($gb_map_4[$gb_code]) + or die "Redefined " . printGb($gb1, $gb2, $gb3, $gb4); + $gb_map_4[$gb_code] = $utf32; + ++$gb_map_4_count; + $gb_map_4_max = $gb_code if ($gb_code > $gb_map_4_max); + + !defined($uni_map[$utf32]) or die "Double Unicode mapping"; + $uni_map[$utf32] = $gb1 << 24 | $gb2 << 16 | $gb3 << 8 | $gb4; + ++$uni_map_count; + } + elsif (/$/) + { + $utf32_first = oct("0x" . $1); + $utf32_last = oct("0x" . $2); + $gb1_first = oct("0x" . $3); + $gb2_first = oct("0x" . $4); + $gb3_first = oct("0x" . $5); + $gb4_first = oct("0x" . $6); + $gb1_last = oct("0x" . $7); + $gb2_last = oct("0x" . $8); + $gb3_last = oct("0x" . $9); + $gb4_last = oct("0x" . $10); + $linear_first + = ($gb1_first - 0x81) * 12600 + + ($gb2_first - 0x30) * 1260 + + ($gb3_first - 0x81) * 10 + + ($gb4_first - 0x30); + $linear_last + = ($gb1_last - 0x81) * 12600 + + ($gb2_last - 0x30) * 1260 + + ($gb3_last - 0x81) * 10 + + ($gb4_last - 0x30); + ($utf32_last - $utf32_first == $linear_last - $linear_first) + or die "Bad range"; + if ($linear_first != 189000 || $linear_last != 1237575) + { + $range_uni_first[$range_count] = $utf32_first; + $range_uni_last[$range_count] + = ($utf32_last == 0xD7FF ? 0xDFFF : $utf32_last); + $range_linear_first[$range_count] = $linear_first; + $range_linear_last[$range_count] = $linear_last; + ++$range_count; + $gb_map_4_ranges += $linear_last - $linear_first + 1; + $gb_map_4_max = $linear_last + if ($linear_last > $gb_map_4_max); + } + } + elsif (/ " . $filename) or die "Cannot write " . $filename; + +{ + $filename = lc($id). ".pl"; + open IN, $filename or die "Cannot read ". $filename; + $first = 1; + while () + { + if (/^\#!.*$/) + { + } + elsif (/^\#(\*.*)$/) + { + if ($first == 1) + { + print OUT "/", $1, "\n"; + $first = 0; + } + else + { + print OUT " ", substr($1, 0, length($1) - 1), "/\n"; + } + } + elsif (/^\# (.*)$/) + { + print OUT " *", $1, "\n"; + } + elsif (/^\#(.*)$/) + { + print OUT " *", $1, "\n"; + } + else + { + goto done; + } + } + done: +} + +print OUT "\n", + "#include \"convertgb18030.h\"\n", + "\n", + "#include \"sal/types.h\"\n", + "\n"; + +print OUT "static sal_Unicode const aImpl", $id, "ToUnicodeData[] = {\n "; +for ($gb_code = 0; $gb_code < $gb_map_2_count; ++$gb_code) +{ + printf OUT "0x%04X,", $gb_map_2[$gb_code]; + if ($gb_code % 8 == 7 && $gb_code != $gb_map_2_count - 1) + { + print OUT "\n "; + } +} +print OUT "\n};\n\n"; + +print OUT "static ImplGb180302000ToUnicodeRange const\n aImpl", + $id, + "ToUnicodeRanges[] = {\n"; +for ($range_index = 0; $range_index < $range_count; ++$range_index) +{ + printf OUT " { %d, %d, %d, 0x%04X },\n", + $gb_nonrangedataindex[$range_index], + $range_linear_first[$range_index], + $range_linear_last[$range_index] + 1, + $range_uni_first[$range_index]; +} +print OUT " { -1, 0, 0, 0 }\n};\n\n"; + +print OUT "static sal_uInt32 const aImplUnicodeTo", $id, "Data[] = {\n "; +$index = 0; +$range_index = 0; +$uni_nonrangedataindex[$range_index] = $index; +for ($utf32 = 0x80; $utf32 <= 0xFFFF; ++$utf32) +{ + if (defined($uni_map[$utf32])) + { + if ($index > 0 && ($index - 1) % 6 == 5) + { + print OUT "\n "; + } + $bytes = $uni_map[$utf32]; + printf OUT ($bytes <= 0xFFFF ? " 0x%04X," : "0x%08X,"), $bytes; + ++$index; + } + else + { + ($utf32 == $range_uni_first[$range_index]) or die "Bad input"; + $utf32 = $range_uni_last[$range_index]; + ++$range_index; + $uni_nonrangedataindex[$range_index] = $index; + } +} +($range_index == $range_count) or die "Bad input"; +print OUT "\n};\n\n"; + +print OUT "static ImplUnicodeToGb180302000Range const\n aImplUnicodeTo", + $id, + "Ranges[] = {\n"; +for ($range_index = 0; $range_index < $range_count; ++$range_index) +{ + printf OUT " { %d, 0x%04X, 0x%04X, %d },\n", + $uni_nonrangedataindex[$range_index], + $range_uni_first[$range_index], + $range_uni_last[$range_index], + $range_linear_first[$range_index]; +} +print OUT "};\n"; + +close OUT; diff --git a/sal/textenc/generate/gb180302000.tab b/sal/textenc/generate/gb180302000.tab new file mode 100644 index 000000000..5c0d469ad --- /dev/null +++ b/sal/textenc/generate/gb180302000.tab @@ -0,0 +1,9027 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "../convertgb18030.hxx" + +sal_Unicode const aImplGb180302000ToUnicodeData[] = { + 0x4E02,0x4E04,0x4E05,0x4E06,0x4E0F,0x4E12,0x4E17,0x4E1F, + 0x4E20,0x4E21,0x4E23,0x4E26,0x4E29,0x4E2E,0x4E2F,0x4E31, + 0x4E33,0x4E35,0x4E37,0x4E3C,0x4E40,0x4E41,0x4E42,0x4E44, + 0x4E46,0x4E4A,0x4E51,0x4E55,0x4E57,0x4E5A,0x4E5B,0x4E62, + 0x4E63,0x4E64,0x4E65,0x4E67,0x4E68,0x4E6A,0x4E6B,0x4E6C, + 0x4E6D,0x4E6E,0x4E6F,0x4E72,0x4E74,0x4E75,0x4E76,0x4E77, + 0x4E78,0x4E79,0x4E7A,0x4E7B,0x4E7C,0x4E7D,0x4E7F,0x4E80, + 0x4E81,0x4E82,0x4E83,0x4E84,0x4E85,0x4E87,0x4E8A,0x4E90, + 0x4E96,0x4E97,0x4E99,0x4E9C,0x4E9D,0x4E9E,0x4EA3,0x4EAA, + 0x4EAF,0x4EB0,0x4EB1,0x4EB4,0x4EB6,0x4EB7,0x4EB8,0x4EB9, + 0x4EBC,0x4EBD,0x4EBE,0x4EC8,0x4ECC,0x4ECF,0x4ED0,0x4ED2, + 0x4EDA,0x4EDB,0x4EDC,0x4EE0,0x4EE2,0x4EE6,0x4EE7,0x4EE9, + 0x4EED,0x4EEE,0x4EEF,0x4EF1,0x4EF4,0x4EF8,0x4EF9,0x4EFA, + 0x4EFC,0x4EFE,0x4F00,0x4F02,0x4F03,0x4F04,0x4F05,0x4F06, + 0x4F07,0x4F08,0x4F0B,0x4F0C,0x4F12,0x4F13,0x4F14,0x4F15, + 0x4F16,0x4F1C,0x4F1D,0x4F21,0x4F23,0x4F28,0x4F29,0x4F2C, + 0x4F2D,0x4F2E,0x4F31,0x4F33,0x4F35,0x4F37,0x4F39,0x4F3B, + 0x4F3E,0x4F3F,0x4F40,0x4F41,0x4F42,0x4F44,0x4F45,0x4F47, + 0x4F48,0x4F49,0x4F4A,0x4F4B,0x4F4C,0x4F52,0x4F54,0x4F56, + 0x4F61,0x4F62,0x4F66,0x4F68,0x4F6A,0x4F6B,0x4F6D,0x4F6E, + 0x4F71,0x4F72,0x4F75,0x4F77,0x4F78,0x4F79,0x4F7A,0x4F7D, + 0x4F80,0x4F81,0x4F82,0x4F85,0x4F86,0x4F87,0x4F8A,0x4F8C, + 0x4F8E,0x4F90,0x4F92,0x4F93,0x4F95,0x4F96,0x4F98,0x4F99, + 0x4F9A,0x4F9C,0x4F9E,0x4F9F,0x4FA1,0x4FA2,0x4FA4,0x4FAB, + 0x4FAD,0x4FB0,0x4FB1,0x4FB2,0x4FB3,0x4FB4,0x4FB6,0x4FB7, + 0x4FB8,0x4FB9,0x4FBA,0x4FBB,0x4FBC,0x4FBD,0x4FBE,0x4FC0, + 0x4FC1,0x4FC2,0x4FC6,0x4FC7,0x4FC8,0x4FC9,0x4FCB,0x4FCC, + 0x4FCD,0x4FD2,0x4FD3,0x4FD4,0x4FD5,0x4FD6,0x4FD9,0x4FDB, + 0x4FE0,0x4FE2,0x4FE4,0x4FE5,0x4FE7,0x4FEB,0x4FEC,0x4FF0, + 0x4FF2,0x4FF4,0x4FF5,0x4FF6,0x4FF7,0x4FF9,0x4FFB,0x4FFC, + 0x4FFD,0x4FFF,0x5000,0x5001,0x5002,0x5003,0x5004,0x5005, + 0x5006,0x5007,0x5008,0x5009,0x500A,0x500B,0x500E,0x5010, + 0x5011,0x5013,0x5015,0x5016,0x5017,0x501B,0x501D,0x501E, + 0x5020,0x5022,0x5023,0x5024,0x5027,0x502B,0x502F,0x5030, + 0x5031,0x5032,0x5033,0x5034,0x5035,0x5036,0x5037,0x5038, + 0x5039,0x503B,0x503D,0x503F,0x5040,0x5041,0x5042,0x5044, + 0x5045,0x5046,0x5049,0x504A,0x504B,0x504D,0x5050,0x5051, + 0x5052,0x5053,0x5054,0x5056,0x5057,0x5058,0x5059,0x505B, + 0x505D,0x505E,0x505F,0x5060,0x5061,0x5062,0x5063,0x5064, + 0x5066,0x5067,0x5068,0x5069,0x506A,0x506B,0x506D,0x506E, + 0x506F,0x5070,0x5071,0x5072,0x5073,0x5074,0x5075,0x5078, + 0x5079,0x507A,0x507C,0x507D,0x5081,0x5082,0x5083,0x5084, + 0x5086,0x5087,0x5089,0x508A,0x508B,0x508C,0x508E,0x508F, + 0x5090,0x5091,0x5092,0x5093,0x5094,0x5095,0x5096,0x5097, + 0x5098,0x5099,0x509A,0x509B,0x509C,0x509D,0x509E,0x509F, + 0x50A0,0x50A1,0x50A2,0x50A4,0x50A6,0x50AA,0x50AB,0x50AD, + 0x50AE,0x50AF,0x50B0,0x50B1,0x50B3,0x50B4,0x50B5,0x50B6, + 0x50B7,0x50B8,0x50B9,0x50BC,0x50BD,0x50BE,0x50BF,0x50C0, + 0x50C1,0x50C2,0x50C3,0x50C4,0x50C5,0x50C6,0x50C7,0x50C8, + 0x50C9,0x50CA,0x50CB,0x50CC,0x50CD,0x50CE,0x50D0,0x50D1, + 0x50D2,0x50D3,0x50D4,0x50D5,0x50D7,0x50D8,0x50D9,0x50DB, + 0x50DC,0x50DD,0x50DE,0x50DF,0x50E0,0x50E1,0x50E2,0x50E3, + 0x50E4,0x50E5,0x50E8,0x50E9,0x50EA,0x50EB,0x50EF,0x50F0, + 0x50F1,0x50F2,0x50F4,0x50F6,0x50F7,0x50F8,0x50F9,0x50FA, + 0x50FC,0x50FD,0x50FE,0x50FF,0x5100,0x5101,0x5102,0x5103, + 0x5104,0x5105,0x5108,0x5109,0x510A,0x510C,0x510D,0x510E, + 0x510F,0x5110,0x5111,0x5113,0x5114,0x5115,0x5116,0x5117, + 0x5118,0x5119,0x511A,0x511B,0x511C,0x511D,0x511E,0x511F, + 0x5120,0x5122,0x5123,0x5124,0x5125,0x5126,0x5127,0x5128, + 0x5129,0x512A,0x512B,0x512C,0x512D,0x512E,0x512F,0x5130, + 0x5131,0x5132,0x5133,0x5134,0x5135,0x5136,0x5137,0x5138, + 0x5139,0x513A,0x513B,0x513C,0x513D,0x513E,0x5142,0x5147, + 0x514A,0x514C,0x514E,0x514F,0x5150,0x5152,0x5153,0x5157, + 0x5158,0x5159,0x515B,0x515D,0x515E,0x515F,0x5160,0x5161, + 0x5163,0x5164,0x5166,0x5167,0x5169,0x516A,0x516F,0x5172, + 0x517A,0x517E,0x517F,0x5183,0x5184,0x5186,0x5187,0x518A, + 0x518B,0x518E,0x518F,0x5190,0x5191,0x5193,0x5194,0x5198, + 0x519A,0x519D,0x519E,0x519F,0x51A1,0x51A3,0x51A6,0x51A7, + 0x51A8,0x51A9,0x51AA,0x51AD,0x51AE,0x51B4,0x51B8,0x51B9, + 0x51BA,0x51BE,0x51BF,0x51C1,0x51C2,0x51C3,0x51C5,0x51C8, + 0x51CA,0x51CD,0x51CE,0x51D0,0x51D2,0x51D3,0x51D4,0x51D5, + 0x51D6,0x51D7,0x51D8,0x51D9,0x51DA,0x51DC,0x51DE,0x51DF, + 0x51E2,0x51E3,0x51E5,0x51E6,0x51E7,0x51E8,0x51E9,0x51EA, + 0x51EC,0x51EE,0x51F1,0x51F2,0x51F4,0x51F7,0x51FE,0x5204, + 0x5205,0x5209,0x520B,0x520C,0x520F,0x5210,0x5213,0x5214, + 0x5215,0x521C,0x521E,0x521F,0x5221,0x5222,0x5223,0x5225, + 0x5226,0x5227,0x522A,0x522C,0x522F,0x5231,0x5232,0x5234, + 0x5235,0x523C,0x523E,0x5244,0x5245,0x5246,0x5247,0x5248, + 0x5249,0x524B,0x524E,0x524F,0x5252,0x5253,0x5255,0x5257, + 0x5258,0x5259,0x525A,0x525B,0x525D,0x525F,0x5260,0x5262, + 0x5263,0x5264,0x5266,0x5268,0x526B,0x526C,0x526D,0x526E, + 0x5270,0x5271,0x5273,0x5274,0x5275,0x5276,0x5277,0x5278, + 0x5279,0x527A,0x527B,0x527C,0x527E,0x5280,0x5283,0x5284, + 0x5285,0x5286,0x5287,0x5289,0x528A,0x528B,0x528C,0x528D, + 0x528E,0x528F,0x5291,0x5292,0x5294,0x5295,0x5296,0x5297, + 0x5298,0x5299,0x529A,0x529C,0x52A4,0x52A5,0x52A6,0x52A7, + 0x52AE,0x52AF,0x52B0,0x52B4,0x52B5,0x52B6,0x52B7,0x52B8, + 0x52B9,0x52BA,0x52BB,0x52BC,0x52BD,0x52C0,0x52C1,0x52C2, + 0x52C4,0x52C5,0x52C6,0x52C8,0x52CA,0x52CC,0x52CD,0x52CE, + 0x52CF,0x52D1,0x52D3,0x52D4,0x52D5,0x52D7,0x52D9,0x52DA, + 0x52DB,0x52DC,0x52DD,0x52DE,0x52E0,0x52E1,0x52E2,0x52E3, + 0x52E5,0x52E6,0x52E7,0x52E8,0x52E9,0x52EA,0x52EB,0x52EC, + 0x52ED,0x52EE,0x52EF,0x52F1,0x52F2,0x52F3,0x52F4,0x52F5, + 0x52F6,0x52F7,0x52F8,0x52FB,0x52FC,0x52FD,0x5301,0x5302, + 0x5303,0x5304,0x5307,0x5309,0x530A,0x530B,0x530C,0x530E, + 0x5311,0x5312,0x5313,0x5314,0x5318,0x531B,0x531C,0x531E, + 0x531F,0x5322,0x5324,0x5325,0x5327,0x5328,0x5329,0x532B, + 0x532C,0x532D,0x532F,0x5330,0x5331,0x5332,0x5333,0x5334, + 0x5335,0x5336,0x5337,0x5338,0x533C,0x533D,0x5340,0x5342, + 0x5344,0x5346,0x534B,0x534C,0x534D,0x5350,0x5354,0x5358, + 0x5359,0x535B,0x535D,0x5365,0x5368,0x536A,0x536C,0x536D, + 0x5372,0x5376,0x5379,0x537B,0x537C,0x537D,0x537E,0x5380, + 0x5381,0x5383,0x5387,0x5388,0x538A,0x538E,0x538F,0x5390, + 0x5391,0x5392,0x5393,0x5394,0x5396,0x5397,0x5399,0x539B, + 0x539C,0x539E,0x53A0,0x53A1,0x53A4,0x53A7,0x53AA,0x53AB, + 0x53AC,0x53AD,0x53AF,0x53B0,0x53B1,0x53B2,0x53B3,0x53B4, + 0x53B5,0x53B7,0x53B8,0x53B9,0x53BA,0x53BC,0x53BD,0x53BE, + 0x53C0,0x53C3,0x53C4,0x53C5,0x53C6,0x53C7,0x53CE,0x53CF, + 0x53D0,0x53D2,0x53D3,0x53D5,0x53DA,0x53DC,0x53DD,0x53DE, + 0x53E1,0x53E2,0x53E7,0x53F4,0x53FA,0x53FE,0x53FF,0x5400, + 0x5402,0x5405,0x5407,0x540B,0x5414,0x5418,0x5419,0x541A, + 0x541C,0x5422,0x5424,0x5425,0x542A,0x5430,0x5433,0x5436, + 0x5437,0x543A,0x543D,0x543F,0x5441,0x5442,0x5444,0x5445, + 0x5447,0x5449,0x544C,0x544D,0x544E,0x544F,0x5451,0x545A, + 0x545D,0x545E,0x545F,0x5460,0x5461,0x5463,0x5465,0x5467, + 0x5469,0x546A,0x546B,0x546C,0x546D,0x546E,0x546F,0x5470, + 0x5474,0x5479,0x547A,0x547E,0x547F,0x5481,0x5483,0x5485, + 0x5487,0x5488,0x5489,0x548A,0x548D,0x5491,0x5493,0x5497, + 0x5498,0x549C,0x549E,0x549F,0x54A0,0x54A1,0x54A2,0x54A5, + 0x54AE,0x54B0,0x54B2,0x54B5,0x54B6,0x54B7,0x54B9,0x54BA, + 0x54BC,0x54BE,0x54C3,0x54C5,0x54CA,0x54CB,0x54D6,0x54D8, + 0x54DB,0x54E0,0x54E1,0x54E2,0x54E3,0x54E4,0x54EB,0x54EC, + 0x54EF,0x54F0,0x54F1,0x54F4,0x54F5,0x54F6,0x54F7,0x54F8, + 0x54F9,0x54FB,0x54FE,0x5500,0x5502,0x5503,0x5504,0x5505, + 0x5508,0x550A,0x550B,0x550C,0x550D,0x550E,0x5512,0x5513, + 0x5515,0x5516,0x5517,0x5518,0x5519,0x551A,0x551C,0x551D, + 0x551E,0x551F,0x5521,0x5525,0x5526,0x5528,0x5529,0x552B, + 0x552D,0x5532,0x5534,0x5535,0x5536,0x5538,0x5539,0x553A, + 0x553B,0x553D,0x5540,0x5542,0x5545,0x5547,0x5548,0x554B, + 0x554C,0x554D,0x554E,0x554F,0x5551,0x5552,0x5553,0x5554, + 0x5557,0x5558,0x5559,0x555A,0x555B,0x555D,0x555E,0x555F, + 0x5560,0x5562,0x5563,0x5568,0x5569,0x556B,0x556F,0x5570, + 0x5571,0x5572,0x5573,0x5574,0x5579,0x557A,0x557D,0x557F, + 0x5585,0x5586,0x558C,0x558D,0x558E,0x5590,0x5592,0x5593, + 0x5595,0x5596,0x5597,0x559A,0x559B,0x559E,0x55A0,0x55A1, + 0x55A2,0x55A3,0x55A4,0x55A5,0x55A6,0x55A8,0x55A9,0x55AA, + 0x55AB,0x55AC,0x55AD,0x55AE,0x55AF,0x55B0,0x55B2,0x55B4, + 0x55B6,0x55B8,0x55BA,0x55BC,0x55BF,0x55C0,0x55C1,0x55C2, + 0x55C3,0x55C6,0x55C7,0x55C8,0x55CA,0x55CB,0x55CE,0x55CF, + 0x55D0,0x55D5,0x55D7,0x55D8,0x55D9,0x55DA,0x55DB,0x55DE, + 0x55E0,0x55E2,0x55E7,0x55E9,0x55ED,0x55EE,0x55F0,0x55F1, + 0x55F4,0x55F6,0x55F8,0x55F9,0x55FA,0x55FB,0x55FC,0x55FF, + 0x5602,0x5603,0x5604,0x5605,0x5606,0x5607,0x560A,0x560B, + 0x560D,0x5610,0x5611,0x5612,0x5613,0x5614,0x5615,0x5616, + 0x5617,0x5619,0x561A,0x561C,0x561D,0x5620,0x5621,0x5622, + 0x5625,0x5626,0x5628,0x5629,0x562A,0x562B,0x562E,0x562F, + 0x5630,0x5633,0x5635,0x5637,0x5638,0x563A,0x563C,0x563D, + 0x563E,0x5640,0x5641,0x5642,0x5643,0x5644,0x5645,0x5646, + 0x5647,0x5648,0x5649,0x564A,0x564B,0x564F,0x5650,0x5651, + 0x5652,0x5653,0x5655,0x5656,0x565A,0x565B,0x565D,0x565E, + 0x565F,0x5660,0x5661,0x5663,0x5665,0x5666,0x5667,0x566D, + 0x566E,0x566F,0x5670,0x5672,0x5673,0x5674,0x5675,0x5677, + 0x5678,0x5679,0x567A,0x567D,0x567E,0x567F,0x5680,0x5681, + 0x5682,0x5683,0x5684,0x5687,0x5688,0x5689,0x568A,0x568B, + 0x568C,0x568D,0x5690,0x5691,0x5692,0x5694,0x5695,0x5696, + 0x5697,0x5698,0x5699,0x569A,0x569B,0x569C,0x569D,0x569E, + 0x569F,0x56A0,0x56A1,0x56A2,0x56A4,0x56A5,0x56A6,0x56A7, + 0x56A8,0x56A9,0x56AA,0x56AB,0x56AC,0x56AD,0x56AE,0x56B0, + 0x56B1,0x56B2,0x56B3,0x56B4,0x56B5,0x56B6,0x56B8,0x56B9, + 0x56BA,0x56BB,0x56BD,0x56BE,0x56BF,0x56C0,0x56C1,0x56C2, + 0x56C3,0x56C4,0x56C5,0x56C6,0x56C7,0x56C8,0x56C9,0x56CB, + 0x56CC,0x56CD,0x56CE,0x56CF,0x56D0,0x56D1,0x56D2,0x56D3, + 0x56D5,0x56D6,0x56D8,0x56D9,0x56DC,0x56E3,0x56E5,0x56E6, + 0x56E7,0x56E8,0x56E9,0x56EA,0x56EC,0x56EE,0x56EF,0x56F2, + 0x56F3,0x56F6,0x56F7,0x56F8,0x56FB,0x56FC,0x5700,0x5701, + 0x5702,0x5705,0x5707,0x570B,0x570C,0x570D,0x570E,0x570F, + 0x5710,0x5711,0x5712,0x5713,0x5714,0x5715,0x5716,0x5717, + 0x5718,0x5719,0x571A,0x571B,0x571D,0x571E,0x5720,0x5721, + 0x5722,0x5724,0x5725,0x5726,0x5727,0x572B,0x5731,0x5732, + 0x5734,0x5735,0x5736,0x5737,0x5738,0x573C,0x573D,0x573F, + 0x5741,0x5743,0x5744,0x5745,0x5746,0x5748,0x5749,0x574B, + 0x5752,0x5753,0x5754,0x5755,0x5756,0x5758,0x5759,0x5762, + 0x5763,0x5765,0x5767,0x576C,0x576E,0x5770,0x5771,0x5772, + 0x5774,0x5775,0x5778,0x5779,0x577A,0x577D,0x577E,0x577F, + 0x5780,0x5781,0x5787,0x5788,0x5789,0x578A,0x578D,0x578E, + 0x578F,0x5790,0x5791,0x5794,0x5795,0x5796,0x5797,0x5798, + 0x5799,0x579A,0x579C,0x579D,0x579E,0x579F,0x57A5,0x57A8, + 0x57AA,0x57AC,0x57AF,0x57B0,0x57B1,0x57B3,0x57B5,0x57B6, + 0x57B7,0x57B9,0x57BA,0x57BB,0x57BC,0x57BD,0x57BE,0x57BF, + 0x57C0,0x57C1,0x57C4,0x57C5,0x57C6,0x57C7,0x57C8,0x57C9, + 0x57CA,0x57CC,0x57CD,0x57D0,0x57D1,0x57D3,0x57D6,0x57D7, + 0x57DB,0x57DC,0x57DE,0x57E1,0x57E2,0x57E3,0x57E5,0x57E6, + 0x57E7,0x57E8,0x57E9,0x57EA,0x57EB,0x57EC,0x57EE,0x57F0, + 0x57F1,0x57F2,0x57F3,0x57F5,0x57F6,0x57F7,0x57FB,0x57FC, + 0x57FE,0x57FF,0x5801,0x5803,0x5804,0x5805,0x5808,0x5809, + 0x580A,0x580C,0x580E,0x580F,0x5810,0x5812,0x5813,0x5814, + 0x5816,0x5817,0x5818,0x581A,0x581B,0x581C,0x581D,0x581F, + 0x5822,0x5823,0x5825,0x5826,0x5827,0x5828,0x5829,0x582B, + 0x582C,0x582D,0x582E,0x582F,0x5831,0x5832,0x5833,0x5834, + 0x5836,0x5837,0x5838,0x5839,0x583A,0x583B,0x583C,0x583D, + 0x583E,0x583F,0x5840,0x5841,0x5842,0x5843,0x5845,0x5846, + 0x5847,0x5848,0x5849,0x584A,0x584B,0x584E,0x584F,0x5850, + 0x5852,0x5853,0x5855,0x5856,0x5857,0x5859,0x585A,0x585B, + 0x585C,0x585D,0x585F,0x5860,0x5861,0x5862,0x5863,0x5864, + 0x5866,0x5867,0x5868,0x5869,0x586A,0x586D,0x586E,0x586F, + 0x5870,0x5871,0x5872,0x5873,0x5874,0x5875,0x5876,0x5877, + 0x5878,0x5879,0x587A,0x587B,0x587C,0x587D,0x587F,0x5882, + 0x5884,0x5886,0x5887,0x5888,0x588A,0x588B,0x588C,0x588D, + 0x588E,0x588F,0x5890,0x5891,0x5894,0x5895,0x5896,0x5897, + 0x5898,0x589B,0x589C,0x589D,0x58A0,0x58A1,0x58A2,0x58A3, + 0x58A4,0x58A5,0x58A6,0x58A7,0x58AA,0x58AB,0x58AC,0x58AD, + 0x58AE,0x58AF,0x58B0,0x58B1,0x58B2,0x58B3,0x58B4,0x58B5, + 0x58B6,0x58B7,0x58B8,0x58B9,0x58BA,0x58BB,0x58BD,0x58BE, + 0x58BF,0x58C0,0x58C2,0x58C3,0x58C4,0x58C6,0x58C7,0x58C8, + 0x58C9,0x58CA,0x58CB,0x58CC,0x58CD,0x58CE,0x58CF,0x58D0, + 0x58D2,0x58D3,0x58D4,0x58D6,0x58D7,0x58D8,0x58D9,0x58DA, + 0x58DB,0x58DC,0x58DD,0x58DE,0x58DF,0x58E0,0x58E1,0x58E2, + 0x58E3,0x58E5,0x58E6,0x58E7,0x58E8,0x58E9,0x58EA,0x58ED, + 0x58EF,0x58F1,0x58F2,0x58F4,0x58F5,0x58F7,0x58F8,0x58FA, + 0x58FB,0x58FC,0x58FD,0x58FE,0x58FF,0x5900,0x5901,0x5903, + 0x5905,0x5906,0x5908,0x5909,0x590A,0x590B,0x590C,0x590E, + 0x5910,0x5911,0x5912,0x5913,0x5917,0x5918,0x591B,0x591D, + 0x591E,0x5920,0x5921,0x5922,0x5923,0x5926,0x5928,0x592C, + 0x5930,0x5932,0x5933,0x5935,0x5936,0x593B,0x593D,0x593E, + 0x593F,0x5940,0x5943,0x5945,0x5946,0x594A,0x594C,0x594D, + 0x5950,0x5952,0x5953,0x5959,0x595B,0x595C,0x595D,0x595E, + 0x595F,0x5961,0x5963,0x5964,0x5966,0x5967,0x5968,0x5969, + 0x596A,0x596B,0x596C,0x596D,0x596E,0x596F,0x5970,0x5971, + 0x5972,0x5975,0x5977,0x597A,0x597B,0x597C,0x597E,0x597F, + 0x5980,0x5985,0x5989,0x598B,0x598C,0x598E,0x598F,0x5990, + 0x5991,0x5994,0x5995,0x5998,0x599A,0x599B,0x599C,0x599D, + 0x599F,0x59A0,0x59A1,0x59A2,0x59A6,0x59A7,0x59AC,0x59AD, + 0x59B0,0x59B1,0x59B3,0x59B4,0x59B5,0x59B6,0x59B7,0x59B8, + 0x59BA,0x59BC,0x59BD,0x59BF,0x59C0,0x59C1,0x59C2,0x59C3, + 0x59C4,0x59C5,0x59C7,0x59C8,0x59C9,0x59CC,0x59CD,0x59CE, + 0x59CF,0x59D5,0x59D6,0x59D9,0x59DB,0x59DE,0x59DF,0x59E0, + 0x59E1,0x59E2,0x59E4,0x59E6,0x59E7,0x59E9,0x59EA,0x59EB, + 0x59ED,0x59EE,0x59EF,0x59F0,0x59F1,0x59F2,0x59F3,0x59F4, + 0x59F5,0x59F6,0x59F7,0x59F8,0x59FA,0x59FC,0x59FD,0x59FE, + 0x5A00,0x5A02,0x5A0A,0x5A0B,0x5A0D,0x5A0E,0x5A0F,0x5A10, + 0x5A12,0x5A14,0x5A15,0x5A16,0x5A17,0x5A19,0x5A1A,0x5A1B, + 0x5A1D,0x5A1E,0x5A21,0x5A22,0x5A24,0x5A26,0x5A27,0x5A28, + 0x5A2A,0x5A2B,0x5A2C,0x5A2D,0x5A2E,0x5A2F,0x5A30,0x5A33, + 0x5A35,0x5A37,0x5A38,0x5A39,0x5A3A,0x5A3B,0x5A3D,0x5A3E, + 0x5A3F,0x5A41,0x5A42,0x5A43,0x5A44,0x5A45,0x5A47,0x5A48, + 0x5A4B,0x5A4C,0x5A4D,0x5A4E,0x5A4F,0x5A50,0x5A51,0x5A52, + 0x5A53,0x5A54,0x5A56,0x5A57,0x5A58,0x5A59,0x5A5B,0x5A5C, + 0x5A5D,0x5A5E,0x5A5F,0x5A60,0x5A61,0x5A63,0x5A64,0x5A65, + 0x5A66,0x5A68,0x5A69,0x5A6B,0x5A6C,0x5A6D,0x5A6E,0x5A6F, + 0x5A70,0x5A71,0x5A72,0x5A73,0x5A78,0x5A79,0x5A7B,0x5A7C, + 0x5A7D,0x5A7E,0x5A80,0x5A81,0x5A82,0x5A83,0x5A84,0x5A85, + 0x5A86,0x5A87,0x5A88,0x5A89,0x5A8A,0x5A8B,0x5A8C,0x5A8D, + 0x5A8E,0x5A8F,0x5A90,0x5A91,0x5A93,0x5A94,0x5A95,0x5A96, + 0x5A97,0x5A98,0x5A99,0x5A9C,0x5A9D,0x5A9E,0x5A9F,0x5AA0, + 0x5AA1,0x5AA2,0x5AA3,0x5AA4,0x5AA5,0x5AA6,0x5AA7,0x5AA8, + 0x5AA9,0x5AAB,0x5AAC,0x5AAD,0x5AAE,0x5AAF,0x5AB0,0x5AB1, + 0x5AB4,0x5AB6,0x5AB7,0x5AB9,0x5ABA,0x5ABB,0x5ABC,0x5ABD, + 0x5ABF,0x5AC0,0x5AC3,0x5AC4,0x5AC5,0x5AC6,0x5AC7,0x5AC8, + 0x5ACA,0x5ACB,0x5ACD,0x5ACE,0x5ACF,0x5AD0,0x5AD1,0x5AD3, + 0x5AD5,0x5AD7,0x5AD9,0x5ADA,0x5ADB,0x5ADD,0x5ADE,0x5ADF, + 0x5AE2,0x5AE4,0x5AE5,0x5AE7,0x5AE8,0x5AEA,0x5AEC,0x5AED, + 0x5AEE,0x5AEF,0x5AF0,0x5AF2,0x5AF3,0x5AF4,0x5AF5,0x5AF6, + 0x5AF7,0x5AF8,0x5AF9,0x5AFA,0x5AFB,0x5AFC,0x5AFD,0x5AFE, + 0x5AFF,0x5B00,0x5B01,0x5B02,0x5B03,0x5B04,0x5B05,0x5B06, + 0x5B07,0x5B08,0x5B0A,0x5B0B,0x5B0C,0x5B0D,0x5B0E,0x5B0F, + 0x5B10,0x5B11,0x5B12,0x5B13,0x5B14,0x5B15,0x5B18,0x5B19, + 0x5B1A,0x5B1B,0x5B1C,0x5B1D,0x5B1E,0x5B1F,0x5B20,0x5B21, + 0x5B22,0x5B23,0x5B24,0x5B25,0x5B26,0x5B27,0x5B28,0x5B29, + 0x5B2A,0x5B2B,0x5B2C,0x5B2D,0x5B2E,0x5B2F,0x5B30,0x5B31, + 0x5B33,0x5B35,0x5B36,0x5B38,0x5B39,0x5B3A,0x5B3B,0x5B3C, + 0x5B3D,0x5B3E,0x5B3F,0x5B41,0x5B42,0x5B43,0x5B44,0x5B45, + 0x5B46,0x5B47,0x5B48,0x5B49,0x5B4A,0x5B4B,0x5B4C,0x5B4D, + 0x5B4E,0x5B4F,0x5B52,0x5B56,0x5B5E,0x5B60,0x5B61,0x5B67, + 0x5B68,0x5B6B,0x5B6D,0x5B6E,0x5B6F,0x5B72,0x5B74,0x5B76, + 0x5B77,0x5B78,0x5B79,0x5B7B,0x5B7C,0x5B7E,0x5B7F,0x5B82, + 0x5B86,0x5B8A,0x5B8D,0x5B8E,0x5B90,0x5B91,0x5B92,0x5B94, + 0x5B96,0x5B9F,0x5BA7,0x5BA8,0x5BA9,0x5BAC,0x5BAD,0x5BAE, + 0x5BAF,0x5BB1,0x5BB2,0x5BB7,0x5BBA,0x5BBB,0x5BBC,0x5BC0, + 0x5BC1,0x5BC3,0x5BC8,0x5BC9,0x5BCA,0x5BCB,0x5BCD,0x5BCE, + 0x5BCF,0x5BD1,0x5BD4,0x5BD5,0x5BD6,0x5BD7,0x5BD8,0x5BD9, + 0x5BDA,0x5BDB,0x5BDC,0x5BE0,0x5BE2,0x5BE3,0x5BE6,0x5BE7, + 0x5BE9,0x5BEA,0x5BEB,0x5BEC,0x5BED,0x5BEF,0x5BF1,0x5BF2, + 0x5BF3,0x5BF4,0x5BF5,0x5BF6,0x5BF7,0x5BFD,0x5BFE,0x5C00, + 0x5C02,0x5C03,0x5C05,0x5C07,0x5C08,0x5C0B,0x5C0C,0x5C0D, + 0x5C0E,0x5C10,0x5C12,0x5C13,0x5C17,0x5C19,0x5C1B,0x5C1E, + 0x5C1F,0x5C20,0x5C21,0x5C23,0x5C26,0x5C28,0x5C29,0x5C2A, + 0x5C2B,0x5C2D,0x5C2E,0x5C2F,0x5C30,0x5C32,0x5C33,0x5C35, + 0x5C36,0x5C37,0x5C43,0x5C44,0x5C46,0x5C47,0x5C4C,0x5C4D, + 0x5C52,0x5C53,0x5C54,0x5C56,0x5C57,0x5C58,0x5C5A,0x5C5B, + 0x5C5C,0x5C5D,0x5C5F,0x5C62,0x5C64,0x5C67,0x5C68,0x5C69, + 0x5C6A,0x5C6B,0x5C6C,0x5C6D,0x5C70,0x5C72,0x5C73,0x5C74, + 0x5C75,0x5C76,0x5C77,0x5C78,0x5C7B,0x5C7C,0x5C7D,0x5C7E, + 0x5C80,0x5C83,0x5C84,0x5C85,0x5C86,0x5C87,0x5C89,0x5C8A, + 0x5C8B,0x5C8E,0x5C8F,0x5C92,0x5C93,0x5C95,0x5C9D,0x5C9E, + 0x5C9F,0x5CA0,0x5CA1,0x5CA4,0x5CA5,0x5CA6,0x5CA7,0x5CA8, + 0x5CAA,0x5CAE,0x5CAF,0x5CB0,0x5CB2,0x5CB4,0x5CB6,0x5CB9, + 0x5CBA,0x5CBB,0x5CBC,0x5CBE,0x5CC0,0x5CC2,0x5CC3,0x5CC5, + 0x5CC6,0x5CC7,0x5CC8,0x5CC9,0x5CCA,0x5CCC,0x5CCD,0x5CCE, + 0x5CCF,0x5CD0,0x5CD1,0x5CD3,0x5CD4,0x5CD5,0x5CD6,0x5CD7, + 0x5CD8,0x5CDA,0x5CDB,0x5CDC,0x5CDD,0x5CDE,0x5CDF,0x5CE0, + 0x5CE2,0x5CE3,0x5CE7,0x5CE9,0x5CEB,0x5CEC,0x5CEE,0x5CEF, + 0x5CF1,0x5CF2,0x5CF3,0x5CF4,0x5CF5,0x5CF6,0x5CF7,0x5CF8, + 0x5CF9,0x5CFA,0x5CFC,0x5CFD,0x5CFE,0x5CFF,0x5D00,0x5D01, + 0x5D04,0x5D05,0x5D08,0x5D09,0x5D0A,0x5D0B,0x5D0C,0x5D0D, + 0x5D0F,0x5D10,0x5D11,0x5D12,0x5D13,0x5D15,0x5D17,0x5D18, + 0x5D19,0x5D1A,0x5D1C,0x5D1D,0x5D1F,0x5D20,0x5D21,0x5D22, + 0x5D23,0x5D25,0x5D28,0x5D2A,0x5D2B,0x5D2C,0x5D2F,0x5D30, + 0x5D31,0x5D32,0x5D33,0x5D35,0x5D36,0x5D37,0x5D38,0x5D39, + 0x5D3A,0x5D3B,0x5D3C,0x5D3F,0x5D40,0x5D41,0x5D42,0x5D43, + 0x5D44,0x5D45,0x5D46,0x5D48,0x5D49,0x5D4D,0x5D4E,0x5D4F, + 0x5D50,0x5D51,0x5D52,0x5D53,0x5D54,0x5D55,0x5D56,0x5D57, + 0x5D59,0x5D5A,0x5D5C,0x5D5E,0x5D5F,0x5D60,0x5D61,0x5D62, + 0x5D63,0x5D64,0x5D65,0x5D66,0x5D67,0x5D68,0x5D6A,0x5D6D, + 0x5D6E,0x5D70,0x5D71,0x5D72,0x5D73,0x5D75,0x5D76,0x5D77, + 0x5D78,0x5D79,0x5D7A,0x5D7B,0x5D7C,0x5D7D,0x5D7E,0x5D7F, + 0x5D80,0x5D81,0x5D83,0x5D84,0x5D85,0x5D86,0x5D87,0x5D88, + 0x5D89,0x5D8A,0x5D8B,0x5D8C,0x5D8D,0x5D8E,0x5D8F,0x5D90, + 0x5D91,0x5D92,0x5D93,0x5D94,0x5D95,0x5D96,0x5D97,0x5D98, + 0x5D9A,0x5D9B,0x5D9C,0x5D9E,0x5D9F,0x5DA0,0x5DA1,0x5DA2, + 0x5DA3,0x5DA4,0x5DA5,0x5DA6,0x5DA7,0x5DA8,0x5DA9,0x5DAA, + 0x5DAB,0x5DAC,0x5DAD,0x5DAE,0x5DAF,0x5DB0,0x5DB1,0x5DB2, + 0x5DB3,0x5DB4,0x5DB5,0x5DB6,0x5DB8,0x5DB9,0x5DBA,0x5DBB, + 0x5DBC,0x5DBD,0x5DBE,0x5DBF,0x5DC0,0x5DC1,0x5DC2,0x5DC3, + 0x5DC4,0x5DC6,0x5DC7,0x5DC8,0x5DC9,0x5DCA,0x5DCB,0x5DCC, + 0x5DCE,0x5DCF,0x5DD0,0x5DD1,0x5DD2,0x5DD3,0x5DD4,0x5DD5, + 0x5DD6,0x5DD7,0x5DD8,0x5DD9,0x5DDA,0x5DDC,0x5DDF,0x5DE0, + 0x5DE3,0x5DE4,0x5DEA,0x5DEC,0x5DED,0x5DF0,0x5DF5,0x5DF6, + 0x5DF8,0x5DF9,0x5DFA,0x5DFB,0x5DFC,0x5DFF,0x5E00,0x5E04, + 0x5E07,0x5E09,0x5E0A,0x5E0B,0x5E0D,0x5E0E,0x5E12,0x5E13, + 0x5E17,0x5E1E,0x5E1F,0x5E20,0x5E21,0x5E22,0x5E23,0x5E24, + 0x5E25,0x5E28,0x5E29,0x5E2A,0x5E2B,0x5E2C,0x5E2F,0x5E30, + 0x5E32,0x5E33,0x5E34,0x5E35,0x5E36,0x5E39,0x5E3A,0x5E3E, + 0x5E3F,0x5E40,0x5E41,0x5E43,0x5E46,0x5E47,0x5E48,0x5E49, + 0x5E4A,0x5E4B,0x5E4D,0x5E4E,0x5E4F,0x5E50,0x5E51,0x5E52, + 0x5E53,0x5E56,0x5E57,0x5E58,0x5E59,0x5E5A,0x5E5C,0x5E5D, + 0x5E5F,0x5E60,0x5E63,0x5E64,0x5E65,0x5E66,0x5E67,0x5E68, + 0x5E69,0x5E6A,0x5E6B,0x5E6C,0x5E6D,0x5E6E,0x5E6F,0x5E70, + 0x5E71,0x5E75,0x5E77,0x5E79,0x5E7E,0x5E81,0x5E82,0x5E83, + 0x5E85,0x5E88,0x5E89,0x5E8C,0x5E8D,0x5E8E,0x5E92,0x5E98, + 0x5E9B,0x5E9D,0x5EA1,0x5EA2,0x5EA3,0x5EA4,0x5EA8,0x5EA9, + 0x5EAA,0x5EAB,0x5EAC,0x5EAE,0x5EAF,0x5EB0,0x5EB1,0x5EB2, + 0x5EB4,0x5EBA,0x5EBB,0x5EBC,0x5EBD,0x5EBF,0x5EC0,0x5EC1, + 0x5EC2,0x5EC3,0x5EC4,0x5EC5,0x5EC6,0x5EC7,0x5EC8,0x5ECB, + 0x5ECC,0x5ECD,0x5ECE,0x5ECF,0x5ED0,0x5ED4,0x5ED5,0x5ED7, + 0x5ED8,0x5ED9,0x5EDA,0x5EDC,0x5EDD,0x5EDE,0x5EDF,0x5EE0, + 0x5EE1,0x5EE2,0x5EE3,0x5EE4,0x5EE5,0x5EE6,0x5EE7,0x5EE9, + 0x5EEB,0x5EEC,0x5EED,0x5EEE,0x5EEF,0x5EF0,0x5EF1,0x5EF2, + 0x5EF3,0x5EF5,0x5EF8,0x5EF9,0x5EFB,0x5EFC,0x5EFD,0x5F05, + 0x5F06,0x5F07,0x5F09,0x5F0C,0x5F0D,0x5F0E,0x5F10,0x5F12, + 0x5F14,0x5F16,0x5F19,0x5F1A,0x5F1C,0x5F1D,0x5F1E,0x5F21, + 0x5F22,0x5F23,0x5F24,0x5F28,0x5F2B,0x5F2C,0x5F2E,0x5F30, + 0x5F32,0x5F33,0x5F34,0x5F35,0x5F36,0x5F37,0x5F38,0x5F3B, + 0x5F3D,0x5F3E,0x5F3F,0x5F41,0x5F42,0x5F43,0x5F44,0x5F45, + 0x5F46,0x5F47,0x5F48,0x5F49,0x5F4A,0x5F4B,0x5F4C,0x5F4D, + 0x5F4E,0x5F4F,0x5F51,0x5F54,0x5F59,0x5F5A,0x5F5B,0x5F5C, + 0x5F5E,0x5F5F,0x5F60,0x5F63,0x5F65,0x5F67,0x5F68,0x5F6B, + 0x5F6E,0x5F6F,0x5F72,0x5F74,0x5F75,0x5F76,0x5F78,0x5F7A, + 0x5F7D,0x5F7E,0x5F7F,0x5F83,0x5F86,0x5F8D,0x5F8E,0x5F8F, + 0x5F91,0x5F93,0x5F94,0x5F96,0x5F9A,0x5F9B,0x5F9D,0x5F9E, + 0x5F9F,0x5FA0,0x5FA2,0x5FA3,0x5FA4,0x5FA5,0x5FA6,0x5FA7, + 0x5FA9,0x5FAB,0x5FAC,0x5FAF,0x5FB0,0x5FB1,0x5FB2,0x5FB3, + 0x5FB4,0x5FB6,0x5FB8,0x5FB9,0x5FBA,0x5FBB,0x5FBE,0x5FBF, + 0x5FC0,0x5FC1,0x5FC2,0x5FC7,0x5FC8,0x5FCA,0x5FCB,0x5FCE, + 0x5FD3,0x5FD4,0x5FD5,0x5FDA,0x5FDB,0x5FDC,0x5FDE,0x5FDF, + 0x5FE2,0x5FE3,0x5FE5,0x5FE6,0x5FE8,0x5FE9,0x5FEC,0x5FEF, + 0x5FF0,0x5FF2,0x5FF3,0x5FF4,0x5FF6,0x5FF7,0x5FF9,0x5FFA, + 0x5FFC,0x6007,0x6008,0x6009,0x600B,0x600C,0x6010,0x6011, + 0x6013,0x6017,0x6018,0x601A,0x601E,0x601F,0x6022,0x6023, + 0x6024,0x602C,0x602D,0x602E,0x6030,0x6031,0x6032,0x6033, + 0x6034,0x6036,0x6037,0x6038,0x6039,0x603A,0x603D,0x603E, + 0x6040,0x6044,0x6045,0x6046,0x6047,0x6048,0x6049,0x604A, + 0x604C,0x604E,0x604F,0x6051,0x6053,0x6054,0x6056,0x6057, + 0x6058,0x605B,0x605C,0x605E,0x605F,0x6060,0x6061,0x6065, + 0x6066,0x606E,0x6071,0x6072,0x6074,0x6075,0x6077,0x607E, + 0x6080,0x6081,0x6082,0x6085,0x6086,0x6087,0x6088,0x608A, + 0x608B,0x608E,0x608F,0x6090,0x6091,0x6093,0x6095,0x6097, + 0x6098,0x6099,0x609C,0x609E,0x60A1,0x60A2,0x60A4,0x60A5, + 0x60A7,0x60A9,0x60AA,0x60AE,0x60B0,0x60B3,0x60B5,0x60B6, + 0x60B7,0x60B9,0x60BA,0x60BD,0x60BE,0x60BF,0x60C0,0x60C1, + 0x60C2,0x60C3,0x60C4,0x60C7,0x60C8,0x60C9,0x60CC,0x60CD, + 0x60CE,0x60CF,0x60D0,0x60D2,0x60D3,0x60D4,0x60D6,0x60D7, + 0x60D9,0x60DB,0x60DE,0x60E1,0x60E2,0x60E3,0x60E4,0x60E5, + 0x60EA,0x60F1,0x60F2,0x60F5,0x60F7,0x60F8,0x60FB,0x60FC, + 0x60FD,0x60FE,0x60FF,0x6102,0x6103,0x6104,0x6105,0x6107, + 0x610A,0x610B,0x610C,0x6110,0x6111,0x6112,0x6113,0x6114, + 0x6116,0x6117,0x6118,0x6119,0x611B,0x611C,0x611D,0x611E, + 0x6121,0x6122,0x6125,0x6128,0x6129,0x612A,0x612C,0x612D, + 0x612E,0x612F,0x6130,0x6131,0x6132,0x6133,0x6134,0x6135, + 0x6136,0x6137,0x6138,0x6139,0x613A,0x613B,0x613C,0x613D, + 0x613E,0x6140,0x6141,0x6142,0x6143,0x6144,0x6145,0x6146, + 0x6147,0x6149,0x614B,0x614D,0x614F,0x6150,0x6152,0x6153, + 0x6154,0x6156,0x6157,0x6158,0x6159,0x615A,0x615B,0x615C, + 0x615E,0x615F,0x6160,0x6161,0x6163,0x6164,0x6165,0x6166, + 0x6169,0x616A,0x616B,0x616C,0x616D,0x616E,0x616F,0x6171, + 0x6172,0x6173,0x6174,0x6176,0x6178,0x6179,0x617A,0x617B, + 0x617C,0x617D,0x617E,0x617F,0x6180,0x6181,0x6182,0x6183, + 0x6184,0x6185,0x6186,0x6187,0x6188,0x6189,0x618A,0x618C, + 0x618D,0x618F,0x6190,0x6191,0x6192,0x6193,0x6195,0x6196, + 0x6197,0x6198,0x6199,0x619A,0x619B,0x619C,0x619E,0x619F, + 0x61A0,0x61A1,0x61A2,0x61A3,0x61A4,0x61A5,0x61A6,0x61AA, + 0x61AB,0x61AD,0x61AE,0x61AF,0x61B0,0x61B1,0x61B2,0x61B3, + 0x61B4,0x61B5,0x61B6,0x61B8,0x61B9,0x61BA,0x61BB,0x61BC, + 0x61BD,0x61BF,0x61C0,0x61C1,0x61C3,0x61C4,0x61C5,0x61C6, + 0x61C7,0x61C9,0x61CC,0x61CD,0x61CE,0x61CF,0x61D0,0x61D3, + 0x61D5,0x61D6,0x61D7,0x61D8,0x61D9,0x61DA,0x61DB,0x61DC, + 0x61DD,0x61DE,0x61DF,0x61E0,0x61E1,0x61E2,0x61E3,0x61E4, + 0x61E5,0x61E7,0x61E8,0x61E9,0x61EA,0x61EB,0x61EC,0x61ED, + 0x61EE,0x61EF,0x61F0,0x61F1,0x61F2,0x61F3,0x61F4,0x61F6, + 0x61F7,0x61F8,0x61F9,0x61FA,0x61FB,0x61FC,0x61FD,0x61FE, + 0x6200,0x6201,0x6202,0x6203,0x6204,0x6205,0x6207,0x6209, + 0x6213,0x6214,0x6219,0x621C,0x621D,0x621E,0x6220,0x6223, + 0x6226,0x6227,0x6228,0x6229,0x622B,0x622D,0x622F,0x6230, + 0x6231,0x6232,0x6235,0x6236,0x6238,0x6239,0x623A,0x623B, + 0x623C,0x6242,0x6244,0x6245,0x6246,0x624A,0x624F,0x6250, + 0x6255,0x6256,0x6257,0x6259,0x625A,0x625C,0x625D,0x625E, + 0x625F,0x6260,0x6261,0x6262,0x6264,0x6265,0x6268,0x6271, + 0x6272,0x6274,0x6275,0x6277,0x6278,0x627A,0x627B,0x627D, + 0x6281,0x6282,0x6283,0x6285,0x6286,0x6287,0x6288,0x628B, + 0x628C,0x628D,0x628E,0x628F,0x6290,0x6294,0x6299,0x629C, + 0x629D,0x629E,0x62A3,0x62A6,0x62A7,0x62A9,0x62AA,0x62AD, + 0x62AE,0x62AF,0x62B0,0x62B2,0x62B3,0x62B4,0x62B6,0x62B7, + 0x62B8,0x62BA,0x62BE,0x62C0,0x62C1,0x62C3,0x62CB,0x62CF, + 0x62D1,0x62D5,0x62DD,0x62DE,0x62E0,0x62E1,0x62E4,0x62EA, + 0x62EB,0x62F0,0x62F2,0x62F5,0x62F8,0x62F9,0x62FA,0x62FB, + 0x6300,0x6303,0x6304,0x6305,0x6306,0x630A,0x630B,0x630C, + 0x630D,0x630F,0x6310,0x6312,0x6313,0x6314,0x6315,0x6317, + 0x6318,0x6319,0x631C,0x6326,0x6327,0x6329,0x632C,0x632D, + 0x632E,0x6330,0x6331,0x6333,0x6334,0x6335,0x6336,0x6337, + 0x6338,0x633B,0x633C,0x633E,0x633F,0x6340,0x6341,0x6344, + 0x6347,0x6348,0x634A,0x6351,0x6352,0x6353,0x6354,0x6356, + 0x6357,0x6358,0x6359,0x635A,0x635B,0x635C,0x635D,0x6360, + 0x6364,0x6365,0x6366,0x6368,0x636A,0x636B,0x636C,0x636F, + 0x6370,0x6372,0x6373,0x6374,0x6375,0x6378,0x6379,0x637C, + 0x637D,0x637E,0x637F,0x6381,0x6383,0x6384,0x6385,0x6386, + 0x638B,0x638D,0x6391,0x6393,0x6394,0x6395,0x6397,0x6399, + 0x639A,0x639B,0x639C,0x639D,0x639E,0x639F,0x63A1,0x63A4, + 0x63A6,0x63AB,0x63AF,0x63B1,0x63B2,0x63B5,0x63B6,0x63B9, + 0x63BB,0x63BD,0x63BF,0x63C0,0x63C1,0x63C2,0x63C3,0x63C5, + 0x63C7,0x63C8,0x63CA,0x63CB,0x63CC,0x63D1,0x63D3,0x63D4, + 0x63D5,0x63D7,0x63D8,0x63D9,0x63DA,0x63DB,0x63DC,0x63DD, + 0x63DF,0x63E2,0x63E4,0x63E5,0x63E6,0x63E7,0x63E8,0x63EB, + 0x63EC,0x63EE,0x63EF,0x63F0,0x63F1,0x63F3,0x63F5,0x63F7, + 0x63F9,0x63FA,0x63FB,0x63FC,0x63FE,0x6403,0x6404,0x6406, + 0x6407,0x6408,0x6409,0x640A,0x640D,0x640E,0x6411,0x6412, + 0x6415,0x6416,0x6417,0x6418,0x6419,0x641A,0x641D,0x641F, + 0x6422,0x6423,0x6424,0x6425,0x6427,0x6428,0x6429,0x642B, + 0x642E,0x642F,0x6430,0x6431,0x6432,0x6433,0x6435,0x6436, + 0x6437,0x6438,0x6439,0x643B,0x643C,0x643E,0x6440,0x6442, + 0x6443,0x6449,0x644B,0x644C,0x644D,0x644E,0x644F,0x6450, + 0x6451,0x6453,0x6455,0x6456,0x6457,0x6459,0x645A,0x645B, + 0x645C,0x645D,0x645F,0x6460,0x6461,0x6462,0x6463,0x6464, + 0x6465,0x6466,0x6468,0x646A,0x646B,0x646C,0x646E,0x646F, + 0x6470,0x6471,0x6472,0x6473,0x6474,0x6475,0x6476,0x6477, + 0x647B,0x647C,0x647D,0x647E,0x647F,0x6480,0x6481,0x6483, + 0x6486,0x6488,0x6489,0x648A,0x648B,0x648C,0x648D,0x648E, + 0x648F,0x6490,0x6493,0x6494,0x6497,0x6498,0x649A,0x649B, + 0x649C,0x649D,0x649F,0x64A0,0x64A1,0x64A2,0x64A3,0x64A5, + 0x64A6,0x64A7,0x64A8,0x64AA,0x64AB,0x64AF,0x64B1,0x64B2, + 0x64B3,0x64B4,0x64B6,0x64B9,0x64BB,0x64BD,0x64BE,0x64BF, + 0x64C1,0x64C3,0x64C4,0x64C6,0x64C7,0x64C8,0x64C9,0x64CA, + 0x64CB,0x64CC,0x64CF,0x64D1,0x64D3,0x64D4,0x64D5,0x64D6, + 0x64D9,0x64DA,0x64DB,0x64DC,0x64DD,0x64DF,0x64E0,0x64E1, + 0x64E3,0x64E5,0x64E7,0x64E8,0x64E9,0x64EA,0x64EB,0x64EC, + 0x64ED,0x64EE,0x64EF,0x64F0,0x64F1,0x64F2,0x64F3,0x64F4, + 0x64F5,0x64F6,0x64F7,0x64F8,0x64F9,0x64FA,0x64FB,0x64FC, + 0x64FD,0x64FE,0x64FF,0x6501,0x6502,0x6503,0x6504,0x6505, + 0x6506,0x6507,0x6508,0x650A,0x650B,0x650C,0x650D,0x650E, + 0x650F,0x6510,0x6511,0x6513,0x6514,0x6515,0x6516,0x6517, + 0x6519,0x651A,0x651B,0x651C,0x651D,0x651E,0x651F,0x6520, + 0x6521,0x6522,0x6523,0x6524,0x6526,0x6527,0x6528,0x6529, + 0x652A,0x652C,0x652D,0x6530,0x6531,0x6532,0x6533,0x6537, + 0x653A,0x653C,0x653D,0x6540,0x6541,0x6542,0x6543,0x6544, + 0x6546,0x6547,0x654A,0x654B,0x654D,0x654E,0x6550,0x6552, + 0x6553,0x6554,0x6557,0x6558,0x655A,0x655C,0x655F,0x6560, + 0x6561,0x6564,0x6565,0x6567,0x6568,0x6569,0x656A,0x656D, + 0x656E,0x656F,0x6571,0x6573,0x6575,0x6576,0x6578,0x6579, + 0x657A,0x657B,0x657C,0x657D,0x657E,0x657F,0x6580,0x6581, + 0x6582,0x6583,0x6584,0x6585,0x6586,0x6588,0x6589,0x658A, + 0x658D,0x658E,0x658F,0x6592,0x6594,0x6595,0x6596,0x6598, + 0x659A,0x659D,0x659E,0x65A0,0x65A2,0x65A3,0x65A6,0x65A8, + 0x65AA,0x65AC,0x65AE,0x65B1,0x65B2,0x65B3,0x65B4,0x65B5, + 0x65B6,0x65B7,0x65B8,0x65BA,0x65BB,0x65BE,0x65BF,0x65C0, + 0x65C2,0x65C7,0x65C8,0x65C9,0x65CA,0x65CD,0x65D0,0x65D1, + 0x65D3,0x65D4,0x65D5,0x65D8,0x65D9,0x65DA,0x65DB,0x65DC, + 0x65DD,0x65DE,0x65DF,0x65E1,0x65E3,0x65E4,0x65EA,0x65EB, + 0x65F2,0x65F3,0x65F4,0x65F5,0x65F8,0x65F9,0x65FB,0x65FC, + 0x65FD,0x65FE,0x65FF,0x6601,0x6604,0x6605,0x6607,0x6608, + 0x6609,0x660B,0x660D,0x6610,0x6611,0x6612,0x6616,0x6617, + 0x6618,0x661A,0x661B,0x661C,0x661E,0x6621,0x6622,0x6623, + 0x6624,0x6626,0x6629,0x662A,0x662B,0x662C,0x662E,0x6630, + 0x6632,0x6633,0x6637,0x6638,0x6639,0x663A,0x663B,0x663D, + 0x663F,0x6640,0x6642,0x6644,0x6645,0x6646,0x6647,0x6648, + 0x6649,0x664A,0x664D,0x664E,0x6650,0x6651,0x6658,0x6659, + 0x665B,0x665C,0x665D,0x665E,0x6660,0x6662,0x6663,0x6665, + 0x6667,0x6669,0x666A,0x666B,0x666C,0x666D,0x6671,0x6672, + 0x6673,0x6675,0x6678,0x6679,0x667B,0x667C,0x667D,0x667F, + 0x6680,0x6681,0x6683,0x6685,0x6686,0x6688,0x6689,0x668A, + 0x668B,0x668D,0x668E,0x668F,0x6690,0x6692,0x6693,0x6694, + 0x6695,0x6698,0x6699,0x669A,0x669B,0x669C,0x669E,0x669F, + 0x66A0,0x66A1,0x66A2,0x66A3,0x66A4,0x66A5,0x66A6,0x66A9, + 0x66AA,0x66AB,0x66AC,0x66AD,0x66AF,0x66B0,0x66B1,0x66B2, + 0x66B3,0x66B5,0x66B6,0x66B7,0x66B8,0x66BA,0x66BB,0x66BC, + 0x66BD,0x66BF,0x66C0,0x66C1,0x66C2,0x66C3,0x66C4,0x66C5, + 0x66C6,0x66C7,0x66C8,0x66C9,0x66CA,0x66CB,0x66CC,0x66CD, + 0x66CE,0x66CF,0x66D0,0x66D1,0x66D2,0x66D3,0x66D4,0x66D5, + 0x66D6,0x66D7,0x66D8,0x66DA,0x66DE,0x66DF,0x66E0,0x66E1, + 0x66E2,0x66E3,0x66E4,0x66E5,0x66E7,0x66E8,0x66EA,0x66EB, + 0x66EC,0x66ED,0x66EE,0x66EF,0x66F1,0x66F5,0x66F6,0x66F8, + 0x66FA,0x66FB,0x66FD,0x6701,0x6702,0x6703,0x6704,0x6705, + 0x6706,0x6707,0x670C,0x670E,0x670F,0x6711,0x6712,0x6713, + 0x6716,0x6718,0x6719,0x671A,0x671C,0x671E,0x6720,0x6721, + 0x6722,0x6723,0x6724,0x6725,0x6727,0x6729,0x672E,0x6730, + 0x6732,0x6733,0x6736,0x6737,0x6738,0x6739,0x673B,0x673C, + 0x673E,0x673F,0x6741,0x6744,0x6745,0x6747,0x674A,0x674B, + 0x674D,0x6752,0x6754,0x6755,0x6757,0x6758,0x6759,0x675A, + 0x675B,0x675D,0x6762,0x6763,0x6764,0x6766,0x6767,0x676B, + 0x676C,0x676E,0x6771,0x6774,0x6776,0x6778,0x6779,0x677A, + 0x677B,0x677D,0x6780,0x6782,0x6783,0x6785,0x6786,0x6788, + 0x678A,0x678C,0x678D,0x678E,0x678F,0x6791,0x6792,0x6793, + 0x6794,0x6796,0x6799,0x679B,0x679F,0x67A0,0x67A1,0x67A4, + 0x67A6,0x67A9,0x67AC,0x67AE,0x67B1,0x67B2,0x67B4,0x67B9, + 0x67BA,0x67BB,0x67BC,0x67BD,0x67BE,0x67BF,0x67C0,0x67C2, + 0x67C5,0x67C6,0x67C7,0x67C8,0x67C9,0x67CA,0x67CB,0x67CC, + 0x67CD,0x67CE,0x67D5,0x67D6,0x67D7,0x67DB,0x67DF,0x67E1, + 0x67E3,0x67E4,0x67E6,0x67E7,0x67E8,0x67EA,0x67EB,0x67ED, + 0x67EE,0x67F2,0x67F5,0x67F6,0x67F7,0x67F8,0x67F9,0x67FA, + 0x67FB,0x67FC,0x67FE,0x6801,0x6802,0x6803,0x6804,0x6806, + 0x680D,0x6810,0x6812,0x6814,0x6815,0x6818,0x6819,0x681A, + 0x681B,0x681C,0x681E,0x681F,0x6820,0x6822,0x6823,0x6824, + 0x6825,0x6826,0x6827,0x6828,0x682B,0x682C,0x682D,0x682E, + 0x682F,0x6830,0x6831,0x6834,0x6835,0x6836,0x683A,0x683B, + 0x683F,0x6847,0x684B,0x684D,0x684F,0x6852,0x6856,0x6857, + 0x6858,0x6859,0x685A,0x685B,0x685C,0x685D,0x685E,0x685F, + 0x686A,0x686C,0x686D,0x686E,0x686F,0x6870,0x6871,0x6872, + 0x6873,0x6875,0x6878,0x6879,0x687A,0x687B,0x687C,0x687D, + 0x687E,0x687F,0x6880,0x6882,0x6884,0x6887,0x6888,0x6889, + 0x688A,0x688B,0x688C,0x688D,0x688E,0x6890,0x6891,0x6892, + 0x6894,0x6895,0x6896,0x6898,0x6899,0x689A,0x689B,0x689C, + 0x689D,0x689E,0x689F,0x68A0,0x68A1,0x68A3,0x68A4,0x68A5, + 0x68A9,0x68AA,0x68AB,0x68AC,0x68AE,0x68B1,0x68B2,0x68B4, + 0x68B6,0x68B7,0x68B8,0x68B9,0x68BA,0x68BB,0x68BC,0x68BD, + 0x68BE,0x68BF,0x68C1,0x68C3,0x68C4,0x68C5,0x68C6,0x68C7, + 0x68C8,0x68CA,0x68CC,0x68CE,0x68CF,0x68D0,0x68D1,0x68D3, + 0x68D4,0x68D6,0x68D7,0x68D9,0x68DB,0x68DC,0x68DD,0x68DE, + 0x68DF,0x68E1,0x68E2,0x68E4,0x68E5,0x68E6,0x68E7,0x68E8, + 0x68E9,0x68EA,0x68EB,0x68EC,0x68ED,0x68EF,0x68F2,0x68F3, + 0x68F4,0x68F6,0x68F7,0x68F8,0x68FB,0x68FD,0x68FE,0x68FF, + 0x6900,0x6902,0x6903,0x6904,0x6906,0x6907,0x6908,0x6909, + 0x690A,0x690C,0x690F,0x6911,0x6913,0x6914,0x6915,0x6916, + 0x6917,0x6918,0x6919,0x691A,0x691B,0x691C,0x691D,0x691E, + 0x6921,0x6922,0x6923,0x6925,0x6926,0x6927,0x6928,0x6929, + 0x692A,0x692B,0x692C,0x692E,0x692F,0x6931,0x6932,0x6933, + 0x6935,0x6936,0x6937,0x6938,0x693A,0x693B,0x693C,0x693E, + 0x6940,0x6941,0x6943,0x6944,0x6945,0x6946,0x6947,0x6948, + 0x6949,0x694A,0x694B,0x694C,0x694D,0x694E,0x694F,0x6950, + 0x6951,0x6952,0x6953,0x6955,0x6956,0x6958,0x6959,0x695B, + 0x695C,0x695F,0x6961,0x6962,0x6964,0x6965,0x6967,0x6968, + 0x6969,0x696A,0x696C,0x696D,0x696F,0x6970,0x6972,0x6973, + 0x6974,0x6975,0x6976,0x697A,0x697B,0x697D,0x697E,0x697F, + 0x6981,0x6983,0x6985,0x698A,0x698B,0x698C,0x698E,0x698F, + 0x6990,0x6991,0x6992,0x6993,0x6996,0x6997,0x6999,0x699A, + 0x699D,0x699E,0x699F,0x69A0,0x69A1,0x69A2,0x69A3,0x69A4, + 0x69A5,0x69A6,0x69A9,0x69AA,0x69AC,0x69AE,0x69AF,0x69B0, + 0x69B2,0x69B3,0x69B5,0x69B6,0x69B8,0x69B9,0x69BA,0x69BC, + 0x69BD,0x69BE,0x69BF,0x69C0,0x69C2,0x69C3,0x69C4,0x69C5, + 0x69C6,0x69C7,0x69C8,0x69C9,0x69CB,0x69CD,0x69CF,0x69D1, + 0x69D2,0x69D3,0x69D5,0x69D6,0x69D7,0x69D8,0x69D9,0x69DA, + 0x69DC,0x69DD,0x69DE,0x69E1,0x69E2,0x69E3,0x69E4,0x69E5, + 0x69E6,0x69E7,0x69E8,0x69E9,0x69EA,0x69EB,0x69EC,0x69EE, + 0x69EF,0x69F0,0x69F1,0x69F3,0x69F4,0x69F5,0x69F6,0x69F7, + 0x69F8,0x69F9,0x69FA,0x69FB,0x69FC,0x69FE,0x6A00,0x6A01, + 0x6A02,0x6A03,0x6A04,0x6A05,0x6A06,0x6A07,0x6A08,0x6A09, + 0x6A0B,0x6A0C,0x6A0D,0x6A0E,0x6A0F,0x6A10,0x6A11,0x6A12, + 0x6A13,0x6A14,0x6A15,0x6A16,0x6A19,0x6A1A,0x6A1B,0x6A1C, + 0x6A1D,0x6A1E,0x6A20,0x6A22,0x6A23,0x6A24,0x6A25,0x6A26, + 0x6A27,0x6A29,0x6A2B,0x6A2C,0x6A2D,0x6A2E,0x6A30,0x6A32, + 0x6A33,0x6A34,0x6A36,0x6A37,0x6A38,0x6A39,0x6A3A,0x6A3B, + 0x6A3C,0x6A3F,0x6A40,0x6A41,0x6A42,0x6A43,0x6A45,0x6A46, + 0x6A48,0x6A49,0x6A4A,0x6A4B,0x6A4C,0x6A4D,0x6A4E,0x6A4F, + 0x6A51,0x6A52,0x6A53,0x6A54,0x6A55,0x6A56,0x6A57,0x6A5A, + 0x6A5C,0x6A5D,0x6A5E,0x6A5F,0x6A60,0x6A62,0x6A63,0x6A64, + 0x6A66,0x6A67,0x6A68,0x6A69,0x6A6A,0x6A6B,0x6A6C,0x6A6D, + 0x6A6E,0x6A6F,0x6A70,0x6A72,0x6A73,0x6A74,0x6A75,0x6A76, + 0x6A77,0x6A78,0x6A7A,0x6A7B,0x6A7D,0x6A7E,0x6A7F,0x6A81, + 0x6A82,0x6A83,0x6A85,0x6A86,0x6A87,0x6A88,0x6A89,0x6A8A, + 0x6A8B,0x6A8C,0x6A8D,0x6A8F,0x6A92,0x6A93,0x6A94,0x6A95, + 0x6A96,0x6A98,0x6A99,0x6A9A,0x6A9B,0x6A9C,0x6A9D,0x6A9E, + 0x6A9F,0x6AA1,0x6AA2,0x6AA3,0x6AA4,0x6AA5,0x6AA6,0x6AA7, + 0x6AA8,0x6AAA,0x6AAD,0x6AAE,0x6AAF,0x6AB0,0x6AB1,0x6AB2, + 0x6AB3,0x6AB4,0x6AB5,0x6AB6,0x6AB7,0x6AB8,0x6AB9,0x6ABA, + 0x6ABB,0x6ABC,0x6ABD,0x6ABE,0x6ABF,0x6AC0,0x6AC1,0x6AC2, + 0x6AC3,0x6AC4,0x6AC5,0x6AC6,0x6AC7,0x6AC8,0x6AC9,0x6ACA, + 0x6ACB,0x6ACC,0x6ACD,0x6ACE,0x6ACF,0x6AD0,0x6AD1,0x6AD2, + 0x6AD3,0x6AD4,0x6AD5,0x6AD6,0x6AD7,0x6AD8,0x6AD9,0x6ADA, + 0x6ADB,0x6ADC,0x6ADD,0x6ADE,0x6ADF,0x6AE0,0x6AE1,0x6AE2, + 0x6AE3,0x6AE4,0x6AE5,0x6AE6,0x6AE7,0x6AE8,0x6AE9,0x6AEA, + 0x6AEB,0x6AEC,0x6AED,0x6AEE,0x6AEF,0x6AF0,0x6AF1,0x6AF2, + 0x6AF3,0x6AF4,0x6AF5,0x6AF6,0x6AF7,0x6AF8,0x6AF9,0x6AFA, + 0x6AFB,0x6AFC,0x6AFD,0x6AFE,0x6AFF,0x6B00,0x6B01,0x6B02, + 0x6B03,0x6B04,0x6B05,0x6B06,0x6B07,0x6B08,0x6B09,0x6B0A, + 0x6B0B,0x6B0C,0x6B0D,0x6B0E,0x6B0F,0x6B10,0x6B11,0x6B12, + 0x6B13,0x6B14,0x6B15,0x6B16,0x6B17,0x6B18,0x6B19,0x6B1A, + 0x6B1B,0x6B1C,0x6B1D,0x6B1E,0x6B1F,0x6B25,0x6B26,0x6B28, + 0x6B29,0x6B2A,0x6B2B,0x6B2C,0x6B2D,0x6B2E,0x6B2F,0x6B30, + 0x6B31,0x6B33,0x6B34,0x6B35,0x6B36,0x6B38,0x6B3B,0x6B3C, + 0x6B3D,0x6B3F,0x6B40,0x6B41,0x6B42,0x6B44,0x6B45,0x6B48, + 0x6B4A,0x6B4B,0x6B4D,0x6B4E,0x6B4F,0x6B50,0x6B51,0x6B52, + 0x6B53,0x6B54,0x6B55,0x6B56,0x6B57,0x6B58,0x6B5A,0x6B5B, + 0x6B5C,0x6B5D,0x6B5E,0x6B5F,0x6B60,0x6B61,0x6B68,0x6B69, + 0x6B6B,0x6B6C,0x6B6D,0x6B6E,0x6B6F,0x6B70,0x6B71,0x6B72, + 0x6B73,0x6B74,0x6B75,0x6B76,0x6B77,0x6B78,0x6B7A,0x6B7D, + 0x6B7E,0x6B7F,0x6B80,0x6B85,0x6B88,0x6B8C,0x6B8E,0x6B8F, + 0x6B90,0x6B91,0x6B94,0x6B95,0x6B97,0x6B98,0x6B99,0x6B9C, + 0x6B9D,0x6B9E,0x6B9F,0x6BA0,0x6BA2,0x6BA3,0x6BA4,0x6BA5, + 0x6BA6,0x6BA7,0x6BA8,0x6BA9,0x6BAB,0x6BAC,0x6BAD,0x6BAE, + 0x6BAF,0x6BB0,0x6BB1,0x6BB2,0x6BB6,0x6BB8,0x6BB9,0x6BBA, + 0x6BBB,0x6BBC,0x6BBD,0x6BBE,0x6BC0,0x6BC3,0x6BC4,0x6BC6, + 0x6BC7,0x6BC8,0x6BC9,0x6BCA,0x6BCC,0x6BCE,0x6BD0,0x6BD1, + 0x6BD8,0x6BDA,0x6BDC,0x6BDD,0x6BDE,0x6BDF,0x6BE0,0x6BE2, + 0x6BE3,0x6BE4,0x6BE5,0x6BE6,0x6BE7,0x6BE8,0x6BE9,0x6BEC, + 0x6BED,0x6BEE,0x6BF0,0x6BF1,0x6BF2,0x6BF4,0x6BF6,0x6BF7, + 0x6BF8,0x6BFA,0x6BFB,0x6BFC,0x6BFE,0x6BFF,0x6C00,0x6C01, + 0x6C02,0x6C03,0x6C04,0x6C08,0x6C09,0x6C0A,0x6C0B,0x6C0C, + 0x6C0E,0x6C12,0x6C17,0x6C1C,0x6C1D,0x6C1E,0x6C20,0x6C23, + 0x6C25,0x6C2B,0x6C2C,0x6C2D,0x6C31,0x6C33,0x6C36,0x6C37, + 0x6C39,0x6C3A,0x6C3B,0x6C3C,0x6C3E,0x6C3F,0x6C43,0x6C44, + 0x6C45,0x6C48,0x6C4B,0x6C4C,0x6C4D,0x6C4E,0x6C4F,0x6C51, + 0x6C52,0x6C53,0x6C56,0x6C58,0x6C59,0x6C5A,0x6C62,0x6C63, + 0x6C65,0x6C66,0x6C67,0x6C6B,0x6C6C,0x6C6D,0x6C6E,0x6C6F, + 0x6C71,0x6C73,0x6C75,0x6C77,0x6C78,0x6C7A,0x6C7B,0x6C7C, + 0x6C7F,0x6C80,0x6C84,0x6C87,0x6C8A,0x6C8B,0x6C8D,0x6C8E, + 0x6C91,0x6C92,0x6C95,0x6C96,0x6C97,0x6C98,0x6C9A,0x6C9C, + 0x6C9D,0x6C9E,0x6CA0,0x6CA2,0x6CA8,0x6CAC,0x6CAF,0x6CB0, + 0x6CB4,0x6CB5,0x6CB6,0x6CB7,0x6CBA,0x6CC0,0x6CC1,0x6CC2, + 0x6CC3,0x6CC6,0x6CC7,0x6CC8,0x6CCB,0x6CCD,0x6CCE,0x6CCF, + 0x6CD1,0x6CD2,0x6CD8,0x6CD9,0x6CDA,0x6CDC,0x6CDD,0x6CDF, + 0x6CE4,0x6CE6,0x6CE7,0x6CE9,0x6CEC,0x6CED,0x6CF2,0x6CF4, + 0x6CF9,0x6CFF,0x6D00,0x6D02,0x6D03,0x6D05,0x6D06,0x6D08, + 0x6D09,0x6D0A,0x6D0D,0x6D0F,0x6D10,0x6D11,0x6D13,0x6D14, + 0x6D15,0x6D16,0x6D18,0x6D1C,0x6D1D,0x6D1F,0x6D20,0x6D21, + 0x6D22,0x6D23,0x6D24,0x6D26,0x6D28,0x6D29,0x6D2C,0x6D2D, + 0x6D2F,0x6D30,0x6D34,0x6D36,0x6D37,0x6D38,0x6D3A,0x6D3F, + 0x6D40,0x6D42,0x6D44,0x6D49,0x6D4C,0x6D50,0x6D55,0x6D56, + 0x6D57,0x6D58,0x6D5B,0x6D5D,0x6D5F,0x6D61,0x6D62,0x6D64, + 0x6D65,0x6D67,0x6D68,0x6D6B,0x6D6C,0x6D6D,0x6D70,0x6D71, + 0x6D72,0x6D73,0x6D75,0x6D76,0x6D79,0x6D7A,0x6D7B,0x6D7D, + 0x6D7E,0x6D7F,0x6D80,0x6D81,0x6D83,0x6D84,0x6D86,0x6D87, + 0x6D8A,0x6D8B,0x6D8D,0x6D8F,0x6D90,0x6D92,0x6D96,0x6D97, + 0x6D98,0x6D99,0x6D9A,0x6D9C,0x6DA2,0x6DA5,0x6DAC,0x6DAD, + 0x6DB0,0x6DB1,0x6DB3,0x6DB4,0x6DB6,0x6DB7,0x6DB9,0x6DBA, + 0x6DBB,0x6DBC,0x6DBD,0x6DBE,0x6DC1,0x6DC2,0x6DC3,0x6DC8, + 0x6DC9,0x6DCA,0x6DCD,0x6DCE,0x6DCF,0x6DD0,0x6DD2,0x6DD3, + 0x6DD4,0x6DD5,0x6DD7,0x6DDA,0x6DDB,0x6DDC,0x6DDF,0x6DE2, + 0x6DE3,0x6DE5,0x6DE7,0x6DE8,0x6DE9,0x6DEA,0x6DED,0x6DEF, + 0x6DF0,0x6DF2,0x6DF4,0x6DF5,0x6DF6,0x6DF8,0x6DFA,0x6DFD, + 0x6DFE,0x6DFF,0x6E00,0x6E01,0x6E02,0x6E03,0x6E04,0x6E06, + 0x6E07,0x6E08,0x6E09,0x6E0B,0x6E0F,0x6E12,0x6E13,0x6E15, + 0x6E18,0x6E19,0x6E1B,0x6E1C,0x6E1E,0x6E1F,0x6E22,0x6E26, + 0x6E27,0x6E28,0x6E2A,0x6E2C,0x6E2E,0x6E30,0x6E31,0x6E33, + 0x6E35,0x6E36,0x6E37,0x6E39,0x6E3B,0x6E3C,0x6E3D,0x6E3E, + 0x6E3F,0x6E40,0x6E41,0x6E42,0x6E45,0x6E46,0x6E47,0x6E48, + 0x6E49,0x6E4A,0x6E4B,0x6E4C,0x6E4F,0x6E50,0x6E51,0x6E52, + 0x6E55,0x6E57,0x6E59,0x6E5A,0x6E5C,0x6E5D,0x6E5E,0x6E60, + 0x6E61,0x6E62,0x6E63,0x6E64,0x6E65,0x6E66,0x6E67,0x6E68, + 0x6E69,0x6E6A,0x6E6C,0x6E6D,0x6E6F,0x6E70,0x6E71,0x6E72, + 0x6E73,0x6E74,0x6E75,0x6E76,0x6E77,0x6E78,0x6E79,0x6E7A, + 0x6E7B,0x6E7C,0x6E7D,0x6E80,0x6E81,0x6E82,0x6E84,0x6E87, + 0x6E88,0x6E8A,0x6E8B,0x6E8C,0x6E8D,0x6E8E,0x6E91,0x6E92, + 0x6E93,0x6E94,0x6E95,0x6E96,0x6E97,0x6E99,0x6E9A,0x6E9B, + 0x6E9D,0x6E9E,0x6EA0,0x6EA1,0x6EA3,0x6EA4,0x6EA6,0x6EA8, + 0x6EA9,0x6EAB,0x6EAC,0x6EAD,0x6EAE,0x6EB0,0x6EB3,0x6EB5, + 0x6EB8,0x6EB9,0x6EBC,0x6EBE,0x6EBF,0x6EC0,0x6EC3,0x6EC4, + 0x6EC5,0x6EC6,0x6EC8,0x6EC9,0x6ECA,0x6ECC,0x6ECD,0x6ECE, + 0x6ED0,0x6ED2,0x6ED6,0x6ED8,0x6ED9,0x6EDB,0x6EDC,0x6EDD, + 0x6EE3,0x6EE7,0x6EEA,0x6EEB,0x6EEC,0x6EED,0x6EEE,0x6EEF, + 0x6EF0,0x6EF1,0x6EF2,0x6EF3,0x6EF5,0x6EF6,0x6EF7,0x6EF8, + 0x6EFA,0x6EFB,0x6EFC,0x6EFD,0x6EFE,0x6EFF,0x6F00,0x6F01, + 0x6F03,0x6F04,0x6F05,0x6F07,0x6F08,0x6F0A,0x6F0B,0x6F0C, + 0x6F0D,0x6F0E,0x6F10,0x6F11,0x6F12,0x6F16,0x6F17,0x6F18, + 0x6F19,0x6F1A,0x6F1B,0x6F1C,0x6F1D,0x6F1E,0x6F1F,0x6F21, + 0x6F22,0x6F23,0x6F25,0x6F26,0x6F27,0x6F28,0x6F2C,0x6F2E, + 0x6F30,0x6F32,0x6F34,0x6F35,0x6F37,0x6F38,0x6F39,0x6F3A, + 0x6F3B,0x6F3C,0x6F3D,0x6F3F,0x6F40,0x6F41,0x6F42,0x6F43, + 0x6F44,0x6F45,0x6F48,0x6F49,0x6F4A,0x6F4C,0x6F4E,0x6F4F, + 0x6F50,0x6F51,0x6F52,0x6F53,0x6F54,0x6F55,0x6F56,0x6F57, + 0x6F59,0x6F5A,0x6F5B,0x6F5D,0x6F5F,0x6F60,0x6F61,0x6F63, + 0x6F64,0x6F65,0x6F67,0x6F68,0x6F69,0x6F6A,0x6F6B,0x6F6C, + 0x6F6F,0x6F70,0x6F71,0x6F73,0x6F75,0x6F76,0x6F77,0x6F79, + 0x6F7B,0x6F7D,0x6F7E,0x6F7F,0x6F80,0x6F81,0x6F82,0x6F83, + 0x6F85,0x6F86,0x6F87,0x6F8A,0x6F8B,0x6F8F,0x6F90,0x6F91, + 0x6F92,0x6F93,0x6F94,0x6F95,0x6F96,0x6F97,0x6F98,0x6F99, + 0x6F9A,0x6F9B,0x6F9D,0x6F9E,0x6F9F,0x6FA0,0x6FA2,0x6FA3, + 0x6FA4,0x6FA5,0x6FA6,0x6FA8,0x6FA9,0x6FAA,0x6FAB,0x6FAC, + 0x6FAD,0x6FAE,0x6FAF,0x6FB0,0x6FB1,0x6FB2,0x6FB4,0x6FB5, + 0x6FB7,0x6FB8,0x6FBA,0x6FBB,0x6FBC,0x6FBD,0x6FBE,0x6FBF, + 0x6FC1,0x6FC3,0x6FC4,0x6FC5,0x6FC6,0x6FC7,0x6FC8,0x6FCA, + 0x6FCB,0x6FCC,0x6FCD,0x6FCE,0x6FCF,0x6FD0,0x6FD3,0x6FD4, + 0x6FD5,0x6FD6,0x6FD7,0x6FD8,0x6FD9,0x6FDA,0x6FDB,0x6FDC, + 0x6FDD,0x6FDF,0x6FE2,0x6FE3,0x6FE4,0x6FE5,0x6FE6,0x6FE7, + 0x6FE8,0x6FE9,0x6FEA,0x6FEB,0x6FEC,0x6FED,0x6FF0,0x6FF1, + 0x6FF2,0x6FF3,0x6FF4,0x6FF5,0x6FF6,0x6FF7,0x6FF8,0x6FF9, + 0x6FFA,0x6FFB,0x6FFC,0x6FFD,0x6FFE,0x6FFF,0x7000,0x7001, + 0x7002,0x7003,0x7004,0x7005,0x7006,0x7007,0x7008,0x7009, + 0x700A,0x700B,0x700C,0x700D,0x700E,0x700F,0x7010,0x7012, + 0x7013,0x7014,0x7015,0x7016,0x7017,0x7018,0x7019,0x701C, + 0x701D,0x701E,0x701F,0x7020,0x7021,0x7022,0x7024,0x7025, + 0x7026,0x7027,0x7028,0x7029,0x702A,0x702B,0x702C,0x702D, + 0x702E,0x702F,0x7030,0x7031,0x7032,0x7033,0x7034,0x7036, + 0x7037,0x7038,0x703A,0x703B,0x703C,0x703D,0x703E,0x703F, + 0x7040,0x7041,0x7042,0x7043,0x7044,0x7045,0x7046,0x7047, + 0x7048,0x7049,0x704A,0x704B,0x704D,0x704E,0x7050,0x7051, + 0x7052,0x7053,0x7054,0x7055,0x7056,0x7057,0x7058,0x7059, + 0x705A,0x705B,0x705C,0x705D,0x705F,0x7060,0x7061,0x7062, + 0x7063,0x7064,0x7065,0x7066,0x7067,0x7068,0x7069,0x706A, + 0x706E,0x7071,0x7072,0x7073,0x7074,0x7077,0x7079,0x707A, + 0x707B,0x707D,0x7081,0x7082,0x7083,0x7084,0x7086,0x7087, + 0x7088,0x708B,0x708C,0x708D,0x708F,0x7090,0x7091,0x7093, + 0x7097,0x7098,0x709A,0x709B,0x709E,0x709F,0x70A0,0x70A1, + 0x70A2,0x70A3,0x70A4,0x70A5,0x70A6,0x70A7,0x70A8,0x70A9, + 0x70AA,0x70B0,0x70B2,0x70B4,0x70B5,0x70B6,0x70BA,0x70BE, + 0x70BF,0x70C4,0x70C5,0x70C6,0x70C7,0x70C9,0x70CB,0x70CC, + 0x70CD,0x70CE,0x70CF,0x70D0,0x70D1,0x70D2,0x70D3,0x70D4, + 0x70D5,0x70D6,0x70D7,0x70DA,0x70DC,0x70DD,0x70DE,0x70E0, + 0x70E1,0x70E2,0x70E3,0x70E5,0x70EA,0x70EE,0x70F0,0x70F1, + 0x70F2,0x70F3,0x70F4,0x70F5,0x70F6,0x70F8,0x70FA,0x70FB, + 0x70FC,0x70FE,0x70FF,0x7100,0x7101,0x7102,0x7103,0x7104, + 0x7105,0x7106,0x7107,0x7108,0x710B,0x710C,0x710D,0x710E, + 0x710F,0x7111,0x7112,0x7114,0x7117,0x711B,0x711C,0x711D, + 0x711E,0x711F,0x7120,0x7121,0x7122,0x7123,0x7124,0x7125, + 0x7127,0x7128,0x7129,0x712A,0x712B,0x712C,0x712D,0x712E, + 0x7132,0x7133,0x7134,0x7135,0x7137,0x7138,0x7139,0x713A, + 0x713B,0x713C,0x713D,0x713E,0x713F,0x7140,0x7141,0x7142, + 0x7143,0x7144,0x7146,0x7147,0x7148,0x7149,0x714B,0x714D, + 0x714F,0x7150,0x7151,0x7152,0x7153,0x7154,0x7155,0x7156, + 0x7157,0x7158,0x7159,0x715A,0x715B,0x715D,0x715F,0x7160, + 0x7161,0x7162,0x7163,0x7165,0x7169,0x716A,0x716B,0x716C, + 0x716D,0x716F,0x7170,0x7171,0x7174,0x7175,0x7176,0x7177, + 0x7179,0x717B,0x717C,0x717E,0x717F,0x7180,0x7181,0x7182, + 0x7183,0x7185,0x7186,0x7187,0x7188,0x7189,0x718B,0x718C, + 0x718D,0x718E,0x7190,0x7191,0x7192,0x7193,0x7195,0x7196, + 0x7197,0x719A,0x719B,0x719C,0x719D,0x719E,0x71A1,0x71A2, + 0x71A3,0x71A4,0x71A5,0x71A6,0x71A7,0x71A9,0x71AA,0x71AB, + 0x71AD,0x71AE,0x71AF,0x71B0,0x71B1,0x71B2,0x71B4,0x71B6, + 0x71B7,0x71B8,0x71BA,0x71BB,0x71BC,0x71BD,0x71BE,0x71BF, + 0x71C0,0x71C1,0x71C2,0x71C4,0x71C5,0x71C6,0x71C7,0x71C8, + 0x71C9,0x71CA,0x71CB,0x71CC,0x71CD,0x71CF,0x71D0,0x71D1, + 0x71D2,0x71D3,0x71D6,0x71D7,0x71D8,0x71D9,0x71DA,0x71DB, + 0x71DC,0x71DD,0x71DE,0x71DF,0x71E1,0x71E2,0x71E3,0x71E4, + 0x71E6,0x71E8,0x71E9,0x71EA,0x71EB,0x71EC,0x71ED,0x71EF, + 0x71F0,0x71F1,0x71F2,0x71F3,0x71F4,0x71F5,0x71F6,0x71F7, + 0x71F8,0x71FA,0x71FB,0x71FC,0x71FD,0x71FE,0x71FF,0x7200, + 0x7201,0x7202,0x7203,0x7204,0x7205,0x7207,0x7208,0x7209, + 0x720A,0x720B,0x720C,0x720D,0x720E,0x720F,0x7210,0x7211, + 0x7212,0x7213,0x7214,0x7215,0x7216,0x7217,0x7218,0x7219, + 0x721A,0x721B,0x721C,0x721E,0x721F,0x7220,0x7221,0x7222, + 0x7223,0x7224,0x7225,0x7226,0x7227,0x7229,0x722B,0x722D, + 0x722E,0x722F,0x7232,0x7233,0x7234,0x723A,0x723C,0x723E, + 0x7240,0x7241,0x7242,0x7243,0x7244,0x7245,0x7246,0x7249, + 0x724A,0x724B,0x724E,0x724F,0x7250,0x7251,0x7253,0x7254, + 0x7255,0x7257,0x7258,0x725A,0x725C,0x725E,0x7260,0x7263, + 0x7264,0x7265,0x7268,0x726A,0x726B,0x726C,0x726D,0x7270, + 0x7271,0x7273,0x7274,0x7276,0x7277,0x7278,0x727B,0x727C, + 0x727D,0x7282,0x7283,0x7285,0x7286,0x7287,0x7288,0x7289, + 0x728C,0x728E,0x7290,0x7291,0x7293,0x7294,0x7295,0x7296, + 0x7297,0x7298,0x7299,0x729A,0x729B,0x729C,0x729D,0x729E, + 0x72A0,0x72A1,0x72A2,0x72A3,0x72A4,0x72A5,0x72A6,0x72A7, + 0x72A8,0x72A9,0x72AA,0x72AB,0x72AE,0x72B1,0x72B2,0x72B3, + 0x72B5,0x72BA,0x72BB,0x72BC,0x72BD,0x72BE,0x72BF,0x72C0, + 0x72C5,0x72C6,0x72C7,0x72C9,0x72CA,0x72CB,0x72CC,0x72CF, + 0x72D1,0x72D3,0x72D4,0x72D5,0x72D6,0x72D8,0x72DA,0x72DB, + 0xE4C6,0xE4C7,0xE4C8,0xE4C9,0xE4CA,0xE4CB,0xE4CC,0xE4CD, + 0xE4CE,0xE4CF,0xE4D0,0xE4D1,0xE4D2,0xE4D3,0xE4D4,0xE4D5, + 0xE4D6,0xE4D7,0xE4D8,0xE4D9,0xE4DA,0xE4DB,0xE4DC,0xE4DD, + 0xE4DE,0xE4DF,0xE4E0,0xE4E1,0xE4E2,0xE4E3,0xE4E4,0xE4E5, + 0xE4E6,0xE4E7,0xE4E8,0xE4E9,0xE4EA,0xE4EB,0xE4EC,0xE4ED, + 0xE4EE,0xE4EF,0xE4F0,0xE4F1,0xE4F2,0xE4F3,0xE4F4,0xE4F5, + 0xE4F6,0xE4F7,0xE4F8,0xE4F9,0xE4FA,0xE4FB,0xE4FC,0xE4FD, + 0xE4FE,0xE4FF,0xE500,0xE501,0xE502,0xE503,0xE504,0xE505, + 0xE506,0xE507,0xE508,0xE509,0xE50A,0xE50B,0xE50C,0xE50D, + 0xE50E,0xE50F,0xE510,0xE511,0xE512,0xE513,0xE514,0xE515, + 0xE516,0xE517,0xE518,0xE519,0xE51A,0xE51B,0xE51C,0xE51D, + 0xE51E,0xE51F,0xE520,0xE521,0xE522,0xE523,0xE524,0xE525, + 0x3000,0x3001,0x3002,0x00B7,0x02C9,0x02C7,0x00A8,0x3003, + 0x3005,0x2014,0xFF5E,0x2016,0x2026,0x2018,0x2019,0x201C, + 0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,0x300C, + 0x300D,0x300E,0x300F,0x3016,0x3017,0x3010,0x3011,0x00B1, + 0x00D7,0x00F7,0x2236,0x2227,0x2228,0x2211,0x220F,0x222A, + 0x2229,0x2208,0x2237,0x221A,0x22A5,0x2225,0x2220,0x2312, + 0x2299,0x222B,0x222E,0x2261,0x224C,0x2248,0x223D,0x221D, + 0x2260,0x226E,0x226F,0x2264,0x2265,0x221E,0x2235,0x2234, + 0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFF04,0x00A4, + 0xFFE0,0xFFE1,0x2030,0x00A7,0x2116,0x2606,0x2605,0x25CB, + 0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,0x25B2, + 0x203B,0x2192,0x2190,0x2191,0x2193,0x3013,0xE526,0xE527, + 0xE528,0xE529,0xE52A,0xE52B,0xE52C,0xE52D,0xE52E,0xE52F, + 0xE530,0xE531,0xE532,0xE533,0xE534,0xE535,0xE536,0xE537, + 0xE538,0xE539,0xE53A,0xE53B,0xE53C,0xE53D,0xE53E,0xE53F, + 0xE540,0xE541,0xE542,0xE543,0xE544,0xE545,0xE546,0xE547, + 0xE548,0xE549,0xE54A,0xE54B,0xE54C,0xE54D,0xE54E,0xE54F, + 0xE550,0xE551,0xE552,0xE553,0xE554,0xE555,0xE556,0xE557, + 0xE558,0xE559,0xE55A,0xE55B,0xE55C,0xE55D,0xE55E,0xE55F, + 0xE560,0xE561,0xE562,0xE563,0xE564,0xE565,0xE566,0xE567, + 0xE568,0xE569,0xE56A,0xE56B,0xE56C,0xE56D,0xE56E,0xE56F, + 0xE570,0xE571,0xE572,0xE573,0xE574,0xE575,0xE576,0xE577, + 0xE578,0xE579,0xE57A,0xE57B,0xE57C,0xE57D,0xE57E,0xE57F, + 0xE580,0xE581,0xE582,0xE583,0xE584,0xE585,0x2170,0x2171, + 0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179, + 0xE766,0xE767,0xE768,0xE769,0xE76A,0xE76B,0x2488,0x2489, + 0x248A,0x248B,0x248C,0x248D,0x248E,0x248F,0x2490,0x2491, + 0x2492,0x2493,0x2494,0x2495,0x2496,0x2497,0x2498,0x2499, + 0x249A,0x249B,0x2474,0x2475,0x2476,0x2477,0x2478,0x2479, + 0x247A,0x247B,0x247C,0x247D,0x247E,0x247F,0x2480,0x2481, + 0x2482,0x2483,0x2484,0x2485,0x2486,0x2487,0x2460,0x2461, + 0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469, + 0x20AC,0xE76D,0x3220,0x3221,0x3222,0x3223,0x3224,0x3225, + 0x3226,0x3227,0x3228,0x3229,0xE76E,0xE76F,0x2160,0x2161, + 0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169, + 0x216A,0x216B,0xE770,0xE771,0xE586,0xE587,0xE588,0xE589, + 0xE58A,0xE58B,0xE58C,0xE58D,0xE58E,0xE58F,0xE590,0xE591, + 0xE592,0xE593,0xE594,0xE595,0xE596,0xE597,0xE598,0xE599, + 0xE59A,0xE59B,0xE59C,0xE59D,0xE59E,0xE59F,0xE5A0,0xE5A1, + 0xE5A2,0xE5A3,0xE5A4,0xE5A5,0xE5A6,0xE5A7,0xE5A8,0xE5A9, + 0xE5AA,0xE5AB,0xE5AC,0xE5AD,0xE5AE,0xE5AF,0xE5B0,0xE5B1, + 0xE5B2,0xE5B3,0xE5B4,0xE5B5,0xE5B6,0xE5B7,0xE5B8,0xE5B9, + 0xE5BA,0xE5BB,0xE5BC,0xE5BD,0xE5BE,0xE5BF,0xE5C0,0xE5C1, + 0xE5C2,0xE5C3,0xE5C4,0xE5C5,0xE5C6,0xE5C7,0xE5C8,0xE5C9, + 0xE5CA,0xE5CB,0xE5CC,0xE5CD,0xE5CE,0xE5CF,0xE5D0,0xE5D1, + 0xE5D2,0xE5D3,0xE5D4,0xE5D5,0xE5D6,0xE5D7,0xE5D8,0xE5D9, + 0xE5DA,0xE5DB,0xE5DC,0xE5DD,0xE5DE,0xE5DF,0xE5E0,0xE5E1, + 0xE5E2,0xE5E3,0xE5E4,0xE5E5,0xFF01,0xFF02,0xFF03,0xFFE5, + 0xFF05,0xFF06,0xFF07,0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C, + 0xFF0D,0xFF0E,0xFF0F,0xFF10,0xFF11,0xFF12,0xFF13,0xFF14, + 0xFF15,0xFF16,0xFF17,0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C, + 0xFF1D,0xFF1E,0xFF1F,0xFF20,0xFF21,0xFF22,0xFF23,0xFF24, + 0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C, + 0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34, + 0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C, + 0xFF3D,0xFF3E,0xFF3F,0xFF40,0xFF41,0xFF42,0xFF43,0xFF44, + 0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C, + 0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54, + 0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A,0xFF5B,0xFF5C, + 0xFF5D,0xFFE3,0xE5E6,0xE5E7,0xE5E8,0xE5E9,0xE5EA,0xE5EB, + 0xE5EC,0xE5ED,0xE5EE,0xE5EF,0xE5F0,0xE5F1,0xE5F2,0xE5F3, + 0xE5F4,0xE5F5,0xE5F6,0xE5F7,0xE5F8,0xE5F9,0xE5FA,0xE5FB, + 0xE5FC,0xE5FD,0xE5FE,0xE5FF,0xE600,0xE601,0xE602,0xE603, + 0xE604,0xE605,0xE606,0xE607,0xE608,0xE609,0xE60A,0xE60B, + 0xE60C,0xE60D,0xE60E,0xE60F,0xE610,0xE611,0xE612,0xE613, + 0xE614,0xE615,0xE616,0xE617,0xE618,0xE619,0xE61A,0xE61B, + 0xE61C,0xE61D,0xE61E,0xE61F,0xE620,0xE621,0xE622,0xE623, + 0xE624,0xE625,0xE626,0xE627,0xE628,0xE629,0xE62A,0xE62B, + 0xE62C,0xE62D,0xE62E,0xE62F,0xE630,0xE631,0xE632,0xE633, + 0xE634,0xE635,0xE636,0xE637,0xE638,0xE639,0xE63A,0xE63B, + 0xE63C,0xE63D,0xE63E,0xE63F,0xE640,0xE641,0xE642,0xE643, + 0xE644,0xE645,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046, + 0x3047,0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E, + 0x304F,0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056, + 0x3057,0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E, + 0x305F,0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066, + 0x3067,0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E, + 0x306F,0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076, + 0x3077,0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E, + 0x307F,0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086, + 0x3087,0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E, + 0x308F,0x3090,0x3091,0x3092,0x3093,0xE772,0xE773,0xE774, + 0xE775,0xE776,0xE777,0xE778,0xE779,0xE77A,0xE77B,0xE77C, + 0xE646,0xE647,0xE648,0xE649,0xE64A,0xE64B,0xE64C,0xE64D, + 0xE64E,0xE64F,0xE650,0xE651,0xE652,0xE653,0xE654,0xE655, + 0xE656,0xE657,0xE658,0xE659,0xE65A,0xE65B,0xE65C,0xE65D, + 0xE65E,0xE65F,0xE660,0xE661,0xE662,0xE663,0xE664,0xE665, + 0xE666,0xE667,0xE668,0xE669,0xE66A,0xE66B,0xE66C,0xE66D, + 0xE66E,0xE66F,0xE670,0xE671,0xE672,0xE673,0xE674,0xE675, + 0xE676,0xE677,0xE678,0xE679,0xE67A,0xE67B,0xE67C,0xE67D, + 0xE67E,0xE67F,0xE680,0xE681,0xE682,0xE683,0xE684,0xE685, + 0xE686,0xE687,0xE688,0xE689,0xE68A,0xE68B,0xE68C,0xE68D, + 0xE68E,0xE68F,0xE690,0xE691,0xE692,0xE693,0xE694,0xE695, + 0xE696,0xE697,0xE698,0xE699,0xE69A,0xE69B,0xE69C,0xE69D, + 0xE69E,0xE69F,0xE6A0,0xE6A1,0xE6A2,0xE6A3,0xE6A4,0xE6A5, + 0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8, + 0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0, + 0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8, + 0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0, + 0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8, + 0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0, + 0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8, + 0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0, + 0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8, + 0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0, + 0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0xE77D,0xE77E, + 0xE77F,0xE780,0xE781,0xE782,0xE783,0xE784,0xE6A6,0xE6A7, + 0xE6A8,0xE6A9,0xE6AA,0xE6AB,0xE6AC,0xE6AD,0xE6AE,0xE6AF, + 0xE6B0,0xE6B1,0xE6B2,0xE6B3,0xE6B4,0xE6B5,0xE6B6,0xE6B7, + 0xE6B8,0xE6B9,0xE6BA,0xE6BB,0xE6BC,0xE6BD,0xE6BE,0xE6BF, + 0xE6C0,0xE6C1,0xE6C2,0xE6C3,0xE6C4,0xE6C5,0xE6C6,0xE6C7, + 0xE6C8,0xE6C9,0xE6CA,0xE6CB,0xE6CC,0xE6CD,0xE6CE,0xE6CF, + 0xE6D0,0xE6D1,0xE6D2,0xE6D3,0xE6D4,0xE6D5,0xE6D6,0xE6D7, + 0xE6D8,0xE6D9,0xE6DA,0xE6DB,0xE6DC,0xE6DD,0xE6DE,0xE6DF, + 0xE6E0,0xE6E1,0xE6E2,0xE6E3,0xE6E4,0xE6E5,0xE6E6,0xE6E7, + 0xE6E8,0xE6E9,0xE6EA,0xE6EB,0xE6EC,0xE6ED,0xE6EE,0xE6EF, + 0xE6F0,0xE6F1,0xE6F2,0xE6F3,0xE6F4,0xE6F5,0xE6F6,0xE6F7, + 0xE6F8,0xE6F9,0xE6FA,0xE6FB,0xE6FC,0xE6FD,0xE6FE,0xE6FF, + 0xE700,0xE701,0xE702,0xE703,0xE704,0xE705,0x0391,0x0392, + 0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039A, + 0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3, + 0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0xE785,0xE786, + 0xE787,0xE788,0xE789,0xE78A,0xE78B,0xE78C,0x03B1,0x03B2, + 0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA, + 0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,0x03C3, + 0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0xE78D,0xE78E, + 0xE78F,0xE790,0xE791,0xE792,0xE793,0xFE35,0xFE36,0xFE39, + 0xFE3A,0xFE3F,0xFE40,0xFE3D,0xFE3E,0xFE41,0xFE42,0xFE43, + 0xFE44,0xE794,0xE795,0xFE3B,0xFE3C,0xFE37,0xFE38,0xFE31, + 0xE796,0xFE33,0xFE34,0xE797,0xE798,0xE799,0xE79A,0xE79B, + 0xE79C,0xE79D,0xE79E,0xE79F,0xE706,0xE707,0xE708,0xE709, + 0xE70A,0xE70B,0xE70C,0xE70D,0xE70E,0xE70F,0xE710,0xE711, + 0xE712,0xE713,0xE714,0xE715,0xE716,0xE717,0xE718,0xE719, + 0xE71A,0xE71B,0xE71C,0xE71D,0xE71E,0xE71F,0xE720,0xE721, + 0xE722,0xE723,0xE724,0xE725,0xE726,0xE727,0xE728,0xE729, + 0xE72A,0xE72B,0xE72C,0xE72D,0xE72E,0xE72F,0xE730,0xE731, + 0xE732,0xE733,0xE734,0xE735,0xE736,0xE737,0xE738,0xE739, + 0xE73A,0xE73B,0xE73C,0xE73D,0xE73E,0xE73F,0xE740,0xE741, + 0xE742,0xE743,0xE744,0xE745,0xE746,0xE747,0xE748,0xE749, + 0xE74A,0xE74B,0xE74C,0xE74D,0xE74E,0xE74F,0xE750,0xE751, + 0xE752,0xE753,0xE754,0xE755,0xE756,0xE757,0xE758,0xE759, + 0xE75A,0xE75B,0xE75C,0xE75D,0xE75E,0xE75F,0xE760,0xE761, + 0xE762,0xE763,0xE764,0xE765,0x0410,0x0411,0x0412,0x0413, + 0x0414,0x0415,0x0401,0x0416,0x0417,0x0418,0x0419,0x041A, + 0x041B,0x041C,0x041D,0x041E,0x041F,0x0420,0x0421,0x0422, + 0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A, + 0x042B,0x042C,0x042D,0x042E,0x042F,0xE7A0,0xE7A1,0xE7A2, + 0xE7A3,0xE7A4,0xE7A5,0xE7A6,0xE7A7,0xE7A8,0xE7A9,0xE7AA, + 0xE7AB,0xE7AC,0xE7AD,0xE7AE,0x0430,0x0431,0x0432,0x0433, + 0x0434,0x0435,0x0451,0x0436,0x0437,0x0438,0x0439,0x043A, + 0x043B,0x043C,0x043D,0x043E,0x043F,0x0440,0x0441,0x0442, + 0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A, + 0x044B,0x044C,0x044D,0x044E,0x044F,0xE7AF,0xE7B0,0xE7B1, + 0xE7B2,0xE7B3,0xE7B4,0xE7B5,0xE7B6,0xE7B7,0xE7B8,0xE7B9, + 0xE7BA,0xE7BB,0x02CA,0x02CB,0x02D9,0x2013,0x2015,0x2025, + 0x2035,0x2105,0x2109,0x2196,0x2197,0x2198,0x2199,0x2215, + 0x221F,0x2223,0x2252,0x2266,0x2267,0x22BF,0x2550,0x2551, + 0x2552,0x2553,0x2554,0x2555,0x2556,0x2557,0x2558,0x2559, + 0x255A,0x255B,0x255C,0x255D,0x255E,0x255F,0x2560,0x2561, + 0x2562,0x2563,0x2564,0x2565,0x2566,0x2567,0x2568,0x2569, + 0x256A,0x256B,0x256C,0x256D,0x256E,0x256F,0x2570,0x2571, + 0x2572,0x2573,0x2581,0x2582,0x2583,0x2584,0x2585,0x2586, + 0x2587,0x2588,0x2589,0x258A,0x258B,0x258C,0x258D,0x258E, + 0x258F,0x2593,0x2594,0x2595,0x25BC,0x25BD,0x25E2,0x25E3, + 0x25E4,0x25E5,0x2609,0x2295,0x3012,0x301D,0x301E,0xE7BC, + 0xE7BD,0xE7BE,0xE7BF,0xE7C0,0xE7C1,0xE7C2,0xE7C3,0xE7C4, + 0xE7C5,0xE7C6,0x0101,0x00E1,0x01CE,0x00E0,0x0113,0x00E9, + 0x011B,0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3, + 0x01D2,0x00F2,0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8, + 0x01DA,0x01DC,0x00FC,0x00EA,0x0251,0xE7C7,0x0144,0x0148, + 0x01F9,0x0261,0xE7C9,0xE7CA,0xE7CB,0xE7CC,0x3105,0x3106, + 0x3107,0x3108,0x3109,0x310A,0x310B,0x310C,0x310D,0x310E, + 0x310F,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116, + 0x3117,0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E, + 0x311F,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126, + 0x3127,0x3128,0x3129,0xE7CD,0xE7CE,0xE7CF,0xE7D0,0xE7D1, + 0xE7D2,0xE7D3,0xE7D4,0xE7D5,0xE7D6,0xE7D7,0xE7D8,0xE7D9, + 0xE7DA,0xE7DB,0xE7DC,0xE7DD,0xE7DE,0xE7DF,0xE7E0,0xE7E1, + 0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028, + 0x3029,0x32A3,0x338E,0x338F,0x339C,0x339D,0x339E,0x33A1, + 0x33C4,0x33CE,0x33D1,0x33D2,0x33D5,0xFE30,0xFFE2,0xFFE4, + 0xE7E2,0x2121,0x3231,0xE7E3,0x2010,0xE7E4,0xE7E5,0xE7E6, + 0x30FC,0x309B,0x309C,0x30FD,0x30FE,0x3006,0x309D,0x309E, + 0xFE49,0xFE4A,0xFE4B,0xFE4C,0xFE4D,0xFE4E,0xFE4F,0xFE50, + 0xFE51,0xFE52,0xFE54,0xFE55,0xFE56,0xFE57,0xFE59,0xFE5A, + 0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFE5F,0xFE60,0xFE61,0xFE62, + 0xFE63,0xFE64,0xFE65,0xFE66,0xFE68,0xFE69,0xFE6A,0xFE6B, + 0x303E,0x2FF0,0x2FF1,0x2FF2,0x2FF3,0x2FF4,0x2FF5,0x2FF6, + 0x2FF7,0x2FF8,0x2FF9,0x2FFA,0x2FFB,0x3007,0xE7F4,0xE7F5, + 0xE7F6,0xE7F7,0xE7F8,0xE7F9,0xE7FA,0xE7FB,0xE7FC,0xE7FD, + 0xE7FE,0xE7FF,0xE800,0x2500,0x2501,0x2502,0x2503,0x2504, + 0x2505,0x2506,0x2507,0x2508,0x2509,0x250A,0x250B,0x250C, + 0x250D,0x250E,0x250F,0x2510,0x2511,0x2512,0x2513,0x2514, + 0x2515,0x2516,0x2517,0x2518,0x2519,0x251A,0x251B,0x251C, + 0x251D,0x251E,0x251F,0x2520,0x2521,0x2522,0x2523,0x2524, + 0x2525,0x2526,0x2527,0x2528,0x2529,0x252A,0x252B,0x252C, + 0x252D,0x252E,0x252F,0x2530,0x2531,0x2532,0x2533,0x2534, + 0x2535,0x2536,0x2537,0x2538,0x2539,0x253A,0x253B,0x253C, + 0x253D,0x253E,0x253F,0x2540,0x2541,0x2542,0x2543,0x2544, + 0x2545,0x2546,0x2547,0x2548,0x2549,0x254A,0x254B,0xE801, + 0xE802,0xE803,0xE804,0xE805,0xE806,0xE807,0xE808,0xE809, + 0xE80A,0xE80B,0xE80C,0xE80D,0xE80E,0xE80F,0x72DC,0x72DD, + 0x72DF,0x72E2,0x72E3,0x72E4,0x72E5,0x72E6,0x72E7,0x72EA, + 0x72EB,0x72F5,0x72F6,0x72F9,0x72FD,0x72FE,0x72FF,0x7300, + 0x7302,0x7304,0x7305,0x7306,0x7307,0x7308,0x7309,0x730B, + 0x730C,0x730D,0x730F,0x7310,0x7311,0x7312,0x7314,0x7318, + 0x7319,0x731A,0x731F,0x7320,0x7323,0x7324,0x7326,0x7327, + 0x7328,0x732D,0x732F,0x7330,0x7332,0x7333,0x7335,0x7336, + 0x733A,0x733B,0x733C,0x733D,0x7340,0x7341,0x7342,0x7343, + 0x7344,0x7345,0x7346,0x7347,0x7348,0x7349,0x734A,0x734B, + 0x734C,0x734E,0x734F,0x7351,0x7353,0x7354,0x7355,0x7356, + 0x7358,0x7359,0x735A,0x735B,0x735C,0x735D,0x735E,0x735F, + 0x7361,0x7362,0x7363,0x7364,0x7365,0x7366,0x7367,0x7368, + 0x7369,0x736A,0x736B,0x736E,0x7370,0x7371,0xE000,0xE001, + 0xE002,0xE003,0xE004,0xE005,0xE006,0xE007,0xE008,0xE009, + 0xE00A,0xE00B,0xE00C,0xE00D,0xE00E,0xE00F,0xE010,0xE011, + 0xE012,0xE013,0xE014,0xE015,0xE016,0xE017,0xE018,0xE019, + 0xE01A,0xE01B,0xE01C,0xE01D,0xE01E,0xE01F,0xE020,0xE021, + 0xE022,0xE023,0xE024,0xE025,0xE026,0xE027,0xE028,0xE029, + 0xE02A,0xE02B,0xE02C,0xE02D,0xE02E,0xE02F,0xE030,0xE031, + 0xE032,0xE033,0xE034,0xE035,0xE036,0xE037,0xE038,0xE039, + 0xE03A,0xE03B,0xE03C,0xE03D,0xE03E,0xE03F,0xE040,0xE041, + 0xE042,0xE043,0xE044,0xE045,0xE046,0xE047,0xE048,0xE049, + 0xE04A,0xE04B,0xE04C,0xE04D,0xE04E,0xE04F,0xE050,0xE051, + 0xE052,0xE053,0xE054,0xE055,0xE056,0xE057,0xE058,0xE059, + 0xE05A,0xE05B,0xE05C,0xE05D,0x7372,0x7373,0x7374,0x7375, + 0x7376,0x7377,0x7378,0x7379,0x737A,0x737B,0x737C,0x737D, + 0x737F,0x7380,0x7381,0x7382,0x7383,0x7385,0x7386,0x7388, + 0x738A,0x738C,0x738D,0x738F,0x7390,0x7392,0x7393,0x7394, + 0x7395,0x7397,0x7398,0x7399,0x739A,0x739C,0x739D,0x739E, + 0x73A0,0x73A1,0x73A3,0x73A4,0x73A5,0x73A6,0x73A7,0x73A8, + 0x73AA,0x73AC,0x73AD,0x73B1,0x73B4,0x73B5,0x73B6,0x73B8, + 0x73B9,0x73BC,0x73BD,0x73BE,0x73BF,0x73C1,0x73C3,0x73C4, + 0x73C5,0x73C6,0x73C7,0x73CB,0x73CC,0x73CE,0x73D2,0x73D3, + 0x73D4,0x73D5,0x73D6,0x73D7,0x73D8,0x73DA,0x73DB,0x73DC, + 0x73DD,0x73DF,0x73E1,0x73E2,0x73E3,0x73E4,0x73E6,0x73E8, + 0x73EA,0x73EB,0x73EC,0x73EE,0x73EF,0x73F0,0x73F1,0x73F3, + 0x73F4,0x73F5,0x73F6,0x73F7,0xE05E,0xE05F,0xE060,0xE061, + 0xE062,0xE063,0xE064,0xE065,0xE066,0xE067,0xE068,0xE069, + 0xE06A,0xE06B,0xE06C,0xE06D,0xE06E,0xE06F,0xE070,0xE071, + 0xE072,0xE073,0xE074,0xE075,0xE076,0xE077,0xE078,0xE079, + 0xE07A,0xE07B,0xE07C,0xE07D,0xE07E,0xE07F,0xE080,0xE081, + 0xE082,0xE083,0xE084,0xE085,0xE086,0xE087,0xE088,0xE089, + 0xE08A,0xE08B,0xE08C,0xE08D,0xE08E,0xE08F,0xE090,0xE091, + 0xE092,0xE093,0xE094,0xE095,0xE096,0xE097,0xE098,0xE099, + 0xE09A,0xE09B,0xE09C,0xE09D,0xE09E,0xE09F,0xE0A0,0xE0A1, + 0xE0A2,0xE0A3,0xE0A4,0xE0A5,0xE0A6,0xE0A7,0xE0A8,0xE0A9, + 0xE0AA,0xE0AB,0xE0AC,0xE0AD,0xE0AE,0xE0AF,0xE0B0,0xE0B1, + 0xE0B2,0xE0B3,0xE0B4,0xE0B5,0xE0B6,0xE0B7,0xE0B8,0xE0B9, + 0xE0BA,0xE0BB,0x73F8,0x73F9,0x73FA,0x73FB,0x73FC,0x73FD, + 0x73FE,0x73FF,0x7400,0x7401,0x7402,0x7404,0x7407,0x7408, + 0x740B,0x740C,0x740D,0x740E,0x7411,0x7412,0x7413,0x7414, + 0x7415,0x7416,0x7417,0x7418,0x7419,0x741C,0x741D,0x741E, + 0x741F,0x7420,0x7421,0x7423,0x7424,0x7427,0x7429,0x742B, + 0x742D,0x742F,0x7431,0x7432,0x7437,0x7438,0x7439,0x743A, + 0x743B,0x743D,0x743E,0x743F,0x7440,0x7442,0x7443,0x7444, + 0x7445,0x7446,0x7447,0x7448,0x7449,0x744A,0x744B,0x744C, + 0x744D,0x744E,0x744F,0x7450,0x7451,0x7452,0x7453,0x7454, + 0x7456,0x7458,0x745D,0x7460,0x7461,0x7462,0x7463,0x7464, + 0x7465,0x7466,0x7467,0x7468,0x7469,0x746A,0x746B,0x746C, + 0x746E,0x746F,0x7471,0x7472,0x7473,0x7474,0x7475,0x7478, + 0x7479,0x747A,0xE0BC,0xE0BD,0xE0BE,0xE0BF,0xE0C0,0xE0C1, + 0xE0C2,0xE0C3,0xE0C4,0xE0C5,0xE0C6,0xE0C7,0xE0C8,0xE0C9, + 0xE0CA,0xE0CB,0xE0CC,0xE0CD,0xE0CE,0xE0CF,0xE0D0,0xE0D1, + 0xE0D2,0xE0D3,0xE0D4,0xE0D5,0xE0D6,0xE0D7,0xE0D8,0xE0D9, + 0xE0DA,0xE0DB,0xE0DC,0xE0DD,0xE0DE,0xE0DF,0xE0E0,0xE0E1, + 0xE0E2,0xE0E3,0xE0E4,0xE0E5,0xE0E6,0xE0E7,0xE0E8,0xE0E9, + 0xE0EA,0xE0EB,0xE0EC,0xE0ED,0xE0EE,0xE0EF,0xE0F0,0xE0F1, + 0xE0F2,0xE0F3,0xE0F4,0xE0F5,0xE0F6,0xE0F7,0xE0F8,0xE0F9, + 0xE0FA,0xE0FB,0xE0FC,0xE0FD,0xE0FE,0xE0FF,0xE100,0xE101, + 0xE102,0xE103,0xE104,0xE105,0xE106,0xE107,0xE108,0xE109, + 0xE10A,0xE10B,0xE10C,0xE10D,0xE10E,0xE10F,0xE110,0xE111, + 0xE112,0xE113,0xE114,0xE115,0xE116,0xE117,0xE118,0xE119, + 0x747B,0x747C,0x747D,0x747F,0x7482,0x7484,0x7485,0x7486, + 0x7488,0x7489,0x748A,0x748C,0x748D,0x748F,0x7491,0x7492, + 0x7493,0x7494,0x7495,0x7496,0x7497,0x7498,0x7499,0x749A, + 0x749B,0x749D,0x749F,0x74A0,0x74A1,0x74A2,0x74A3,0x74A4, + 0x74A5,0x74A6,0x74AA,0x74AB,0x74AC,0x74AD,0x74AE,0x74AF, + 0x74B0,0x74B1,0x74B2,0x74B3,0x74B4,0x74B5,0x74B6,0x74B7, + 0x74B8,0x74B9,0x74BB,0x74BC,0x74BD,0x74BE,0x74BF,0x74C0, + 0x74C1,0x74C2,0x74C3,0x74C4,0x74C5,0x74C6,0x74C7,0x74C8, + 0x74C9,0x74CA,0x74CB,0x74CC,0x74CD,0x74CE,0x74CF,0x74D0, + 0x74D1,0x74D3,0x74D4,0x74D5,0x74D6,0x74D7,0x74D8,0x74D9, + 0x74DA,0x74DB,0x74DD,0x74DF,0x74E1,0x74E5,0x74E7,0x74E8, + 0x74E9,0x74EA,0x74EB,0x74EC,0x74ED,0x74F0,0x74F1,0x74F2, + 0xE11A,0xE11B,0xE11C,0xE11D,0xE11E,0xE11F,0xE120,0xE121, + 0xE122,0xE123,0xE124,0xE125,0xE126,0xE127,0xE128,0xE129, + 0xE12A,0xE12B,0xE12C,0xE12D,0xE12E,0xE12F,0xE130,0xE131, + 0xE132,0xE133,0xE134,0xE135,0xE136,0xE137,0xE138,0xE139, + 0xE13A,0xE13B,0xE13C,0xE13D,0xE13E,0xE13F,0xE140,0xE141, + 0xE142,0xE143,0xE144,0xE145,0xE146,0xE147,0xE148,0xE149, + 0xE14A,0xE14B,0xE14C,0xE14D,0xE14E,0xE14F,0xE150,0xE151, + 0xE152,0xE153,0xE154,0xE155,0xE156,0xE157,0xE158,0xE159, + 0xE15A,0xE15B,0xE15C,0xE15D,0xE15E,0xE15F,0xE160,0xE161, + 0xE162,0xE163,0xE164,0xE165,0xE166,0xE167,0xE168,0xE169, + 0xE16A,0xE16B,0xE16C,0xE16D,0xE16E,0xE16F,0xE170,0xE171, + 0xE172,0xE173,0xE174,0xE175,0xE176,0xE177,0x74F3,0x74F5, + 0x74F8,0x74F9,0x74FA,0x74FB,0x74FC,0x74FD,0x74FE,0x7500, + 0x7501,0x7502,0x7503,0x7505,0x7506,0x7507,0x7508,0x7509, + 0x750A,0x750B,0x750C,0x750E,0x7510,0x7512,0x7514,0x7515, + 0x7516,0x7517,0x751B,0x751D,0x751E,0x7520,0x7521,0x7522, + 0x7523,0x7524,0x7526,0x7527,0x752A,0x752E,0x7534,0x7536, + 0x7539,0x753C,0x753D,0x753F,0x7541,0x7542,0x7543,0x7544, + 0x7546,0x7547,0x7549,0x754A,0x754D,0x7550,0x7551,0x7552, + 0x7553,0x7555,0x7556,0x7557,0x7558,0x755D,0x755E,0x755F, + 0x7560,0x7561,0x7562,0x7563,0x7564,0x7567,0x7568,0x7569, + 0x756B,0x756C,0x756D,0x756E,0x756F,0x7570,0x7571,0x7573, + 0x7575,0x7576,0x7577,0x757A,0x757B,0x757C,0x757D,0x757E, + 0x7580,0x7581,0x7582,0x7584,0x7585,0x7587,0xE178,0xE179, + 0xE17A,0xE17B,0xE17C,0xE17D,0xE17E,0xE17F,0xE180,0xE181, + 0xE182,0xE183,0xE184,0xE185,0xE186,0xE187,0xE188,0xE189, + 0xE18A,0xE18B,0xE18C,0xE18D,0xE18E,0xE18F,0xE190,0xE191, + 0xE192,0xE193,0xE194,0xE195,0xE196,0xE197,0xE198,0xE199, + 0xE19A,0xE19B,0xE19C,0xE19D,0xE19E,0xE19F,0xE1A0,0xE1A1, + 0xE1A2,0xE1A3,0xE1A4,0xE1A5,0xE1A6,0xE1A7,0xE1A8,0xE1A9, + 0xE1AA,0xE1AB,0xE1AC,0xE1AD,0xE1AE,0xE1AF,0xE1B0,0xE1B1, + 0xE1B2,0xE1B3,0xE1B4,0xE1B5,0xE1B6,0xE1B7,0xE1B8,0xE1B9, + 0xE1BA,0xE1BB,0xE1BC,0xE1BD,0xE1BE,0xE1BF,0xE1C0,0xE1C1, + 0xE1C2,0xE1C3,0xE1C4,0xE1C5,0xE1C6,0xE1C7,0xE1C8,0xE1C9, + 0xE1CA,0xE1CB,0xE1CC,0xE1CD,0xE1CE,0xE1CF,0xE1D0,0xE1D1, + 0xE1D2,0xE1D3,0xE1D4,0xE1D5,0x7588,0x7589,0x758A,0x758C, + 0x758D,0x758E,0x7590,0x7593,0x7595,0x7598,0x759B,0x759C, + 0x759E,0x75A2,0x75A6,0x75A7,0x75A8,0x75A9,0x75AA,0x75AD, + 0x75B6,0x75B7,0x75BA,0x75BB,0x75BF,0x75C0,0x75C1,0x75C6, + 0x75CB,0x75CC,0x75CE,0x75CF,0x75D0,0x75D1,0x75D3,0x75D7, + 0x75D9,0x75DA,0x75DC,0x75DD,0x75DF,0x75E0,0x75E1,0x75E5, + 0x75E9,0x75EC,0x75ED,0x75EE,0x75EF,0x75F2,0x75F3,0x75F5, + 0x75F6,0x75F7,0x75F8,0x75FA,0x75FB,0x75FD,0x75FE,0x7602, + 0x7604,0x7606,0x7607,0x7608,0x7609,0x760B,0x760D,0x760E, + 0x760F,0x7611,0x7612,0x7613,0x7614,0x7616,0x761A,0x761C, + 0x761D,0x761E,0x7621,0x7623,0x7627,0x7628,0x762C,0x762E, + 0x762F,0x7631,0x7632,0x7636,0x7637,0x7639,0x763A,0x763B, + 0x763D,0x7641,0x7642,0x7644,0xE1D6,0xE1D7,0xE1D8,0xE1D9, + 0xE1DA,0xE1DB,0xE1DC,0xE1DD,0xE1DE,0xE1DF,0xE1E0,0xE1E1, + 0xE1E2,0xE1E3,0xE1E4,0xE1E5,0xE1E6,0xE1E7,0xE1E8,0xE1E9, + 0xE1EA,0xE1EB,0xE1EC,0xE1ED,0xE1EE,0xE1EF,0xE1F0,0xE1F1, + 0xE1F2,0xE1F3,0xE1F4,0xE1F5,0xE1F6,0xE1F7,0xE1F8,0xE1F9, + 0xE1FA,0xE1FB,0xE1FC,0xE1FD,0xE1FE,0xE1FF,0xE200,0xE201, + 0xE202,0xE203,0xE204,0xE205,0xE206,0xE207,0xE208,0xE209, + 0xE20A,0xE20B,0xE20C,0xE20D,0xE20E,0xE20F,0xE210,0xE211, + 0xE212,0xE213,0xE214,0xE215,0xE216,0xE217,0xE218,0xE219, + 0xE21A,0xE21B,0xE21C,0xE21D,0xE21E,0xE21F,0xE220,0xE221, + 0xE222,0xE223,0xE224,0xE225,0xE226,0xE227,0xE228,0xE229, + 0xE22A,0xE22B,0xE22C,0xE22D,0xE22E,0xE22F,0xE230,0xE231, + 0xE232,0xE233,0x7645,0x7646,0x7647,0x7648,0x7649,0x764A, + 0x764B,0x764E,0x764F,0x7650,0x7651,0x7652,0x7653,0x7655, + 0x7657,0x7658,0x7659,0x765A,0x765B,0x765D,0x765F,0x7660, + 0x7661,0x7662,0x7664,0x7665,0x7666,0x7667,0x7668,0x7669, + 0x766A,0x766C,0x766D,0x766E,0x7670,0x7671,0x7672,0x7673, + 0x7674,0x7675,0x7676,0x7677,0x7679,0x767A,0x767C,0x767F, + 0x7680,0x7681,0x7683,0x7685,0x7689,0x768A,0x768C,0x768D, + 0x768F,0x7690,0x7692,0x7694,0x7695,0x7697,0x7698,0x769A, + 0x769B,0x769C,0x769D,0x769E,0x769F,0x76A0,0x76A1,0x76A2, + 0x76A3,0x76A5,0x76A6,0x76A7,0x76A8,0x76A9,0x76AA,0x76AB, + 0x76AC,0x76AD,0x76AF,0x76B0,0x76B3,0x76B5,0x76B6,0x76B7, + 0x76B8,0x76B9,0x76BA,0x76BB,0x76BC,0x76BD,0x76BE,0x76C0, + 0x76C1,0x76C3,0x554A,0x963F,0x57C3,0x6328,0x54CE,0x5509, + 0x54C0,0x7691,0x764C,0x853C,0x77EE,0x827E,0x788D,0x7231, + 0x9698,0x978D,0x6C28,0x5B89,0x4FFA,0x6309,0x6697,0x5CB8, + 0x80FA,0x6848,0x80AE,0x6602,0x76CE,0x51F9,0x6556,0x71AC, + 0x7FF1,0x8884,0x50B2,0x5965,0x61CA,0x6FB3,0x82AD,0x634C, + 0x6252,0x53ED,0x5427,0x7B06,0x516B,0x75A4,0x5DF4,0x62D4, + 0x8DCB,0x9776,0x628A,0x8019,0x575D,0x9738,0x7F62,0x7238, + 0x767D,0x67CF,0x767E,0x6446,0x4F70,0x8D25,0x62DC,0x7A17, + 0x6591,0x73ED,0x642C,0x6273,0x822C,0x9881,0x677F,0x7248, + 0x626E,0x62CC,0x4F34,0x74E3,0x534A,0x529E,0x7ECA,0x90A6, + 0x5E2E,0x6886,0x699C,0x8180,0x7ED1,0x68D2,0x78C5,0x868C, + 0x9551,0x508D,0x8C24,0x82DE,0x80DE,0x5305,0x8912,0x5265, + 0x76C4,0x76C7,0x76C9,0x76CB,0x76CC,0x76D3,0x76D5,0x76D9, + 0x76DA,0x76DC,0x76DD,0x76DE,0x76E0,0x76E1,0x76E2,0x76E3, + 0x76E4,0x76E6,0x76E7,0x76E8,0x76E9,0x76EA,0x76EB,0x76EC, + 0x76ED,0x76F0,0x76F3,0x76F5,0x76F6,0x76F7,0x76FA,0x76FB, + 0x76FD,0x76FF,0x7700,0x7702,0x7703,0x7705,0x7706,0x770A, + 0x770C,0x770E,0x770F,0x7710,0x7711,0x7712,0x7713,0x7714, + 0x7715,0x7716,0x7717,0x7718,0x771B,0x771C,0x771D,0x771E, + 0x7721,0x7723,0x7724,0x7725,0x7727,0x772A,0x772B,0x772C, + 0x772E,0x7730,0x7731,0x7732,0x7733,0x7734,0x7739,0x773B, + 0x773D,0x773E,0x773F,0x7742,0x7744,0x7745,0x7746,0x7748, + 0x7749,0x774A,0x774B,0x774C,0x774D,0x774E,0x774F,0x7752, + 0x7753,0x7754,0x7755,0x7756,0x7757,0x7758,0x7759,0x775C, + 0x8584,0x96F9,0x4FDD,0x5821,0x9971,0x5B9D,0x62B1,0x62A5, + 0x66B4,0x8C79,0x9C8D,0x7206,0x676F,0x7891,0x60B2,0x5351, + 0x5317,0x8F88,0x80CC,0x8D1D,0x94A1,0x500D,0x72C8,0x5907, + 0x60EB,0x7119,0x88AB,0x5954,0x82EF,0x672C,0x7B28,0x5D29, + 0x7EF7,0x752D,0x6CF5,0x8E66,0x8FF8,0x903C,0x9F3B,0x6BD4, + 0x9119,0x7B14,0x5F7C,0x78A7,0x84D6,0x853D,0x6BD5,0x6BD9, + 0x6BD6,0x5E01,0x5E87,0x75F9,0x95ED,0x655D,0x5F0A,0x5FC5, + 0x8F9F,0x58C1,0x81C2,0x907F,0x965B,0x97AD,0x8FB9,0x7F16, + 0x8D2C,0x6241,0x4FBF,0x53D8,0x535E,0x8FA8,0x8FA9,0x8FAB, + 0x904D,0x6807,0x5F6A,0x8198,0x8868,0x9CD6,0x618B,0x522B, + 0x762A,0x5F6C,0x658C,0x6FD2,0x6EE8,0x5BBE,0x6448,0x5175, + 0x51B0,0x67C4,0x4E19,0x79C9,0x997C,0x70B3,0x775D,0x775E, + 0x775F,0x7760,0x7764,0x7767,0x7769,0x776A,0x776D,0x776E, + 0x776F,0x7770,0x7771,0x7772,0x7773,0x7774,0x7775,0x7776, + 0x7777,0x7778,0x777A,0x777B,0x777C,0x7781,0x7782,0x7783, + 0x7786,0x7787,0x7788,0x7789,0x778A,0x778B,0x778F,0x7790, + 0x7793,0x7794,0x7795,0x7796,0x7797,0x7798,0x7799,0x779A, + 0x779B,0x779C,0x779D,0x779E,0x77A1,0x77A3,0x77A4,0x77A6, + 0x77A8,0x77AB,0x77AD,0x77AE,0x77AF,0x77B1,0x77B2,0x77B4, + 0x77B6,0x77B7,0x77B8,0x77B9,0x77BA,0x77BC,0x77BE,0x77C0, + 0x77C1,0x77C2,0x77C3,0x77C4,0x77C5,0x77C6,0x77C7,0x77C8, + 0x77C9,0x77CA,0x77CB,0x77CC,0x77CE,0x77CF,0x77D0,0x77D1, + 0x77D2,0x77D3,0x77D4,0x77D5,0x77D6,0x77D8,0x77D9,0x77DA, + 0x77DD,0x77DE,0x77DF,0x77E0,0x77E1,0x77E4,0x75C5,0x5E76, + 0x73BB,0x83E0,0x64AD,0x62E8,0x94B5,0x6CE2,0x535A,0x52C3, + 0x640F,0x94C2,0x7B94,0x4F2F,0x5E1B,0x8236,0x8116,0x818A, + 0x6E24,0x6CCA,0x9A73,0x6355,0x535C,0x54FA,0x8865,0x57E0, + 0x4E0D,0x5E03,0x6B65,0x7C3F,0x90E8,0x6016,0x64E6,0x731C, + 0x88C1,0x6750,0x624D,0x8D22,0x776C,0x8E29,0x91C7,0x5F69, + 0x83DC,0x8521,0x9910,0x53C2,0x8695,0x6B8B,0x60ED,0x60E8, + 0x707F,0x82CD,0x8231,0x4ED3,0x6CA7,0x85CF,0x64CD,0x7CD9, + 0x69FD,0x66F9,0x8349,0x5395,0x7B56,0x4FA7,0x518C,0x6D4B, + 0x5C42,0x8E6D,0x63D2,0x53C9,0x832C,0x8336,0x67E5,0x78B4, + 0x643D,0x5BDF,0x5C94,0x5DEE,0x8BE7,0x62C6,0x67F4,0x8C7A, + 0x6400,0x63BA,0x8749,0x998B,0x8C17,0x7F20,0x94F2,0x4EA7, + 0x9610,0x98A4,0x660C,0x7316,0x77E6,0x77E8,0x77EA,0x77EF, + 0x77F0,0x77F1,0x77F2,0x77F4,0x77F5,0x77F7,0x77F9,0x77FA, + 0x77FB,0x77FC,0x7803,0x7804,0x7805,0x7806,0x7807,0x7808, + 0x780A,0x780B,0x780E,0x780F,0x7810,0x7813,0x7815,0x7819, + 0x781B,0x781E,0x7820,0x7821,0x7822,0x7824,0x7828,0x782A, + 0x782B,0x782E,0x782F,0x7831,0x7832,0x7833,0x7835,0x7836, + 0x783D,0x783F,0x7841,0x7842,0x7843,0x7844,0x7846,0x7848, + 0x7849,0x784A,0x784B,0x784D,0x784F,0x7851,0x7853,0x7854, + 0x7858,0x7859,0x785A,0x785B,0x785C,0x785E,0x785F,0x7860, + 0x7861,0x7862,0x7863,0x7864,0x7865,0x7866,0x7867,0x7868, + 0x7869,0x786F,0x7870,0x7871,0x7872,0x7873,0x7874,0x7875, + 0x7876,0x7878,0x7879,0x787A,0x787B,0x787D,0x787E,0x787F, + 0x7880,0x7881,0x7882,0x7883,0x573A,0x5C1D,0x5E38,0x957F, + 0x507F,0x80A0,0x5382,0x655E,0x7545,0x5531,0x5021,0x8D85, + 0x6284,0x949E,0x671D,0x5632,0x6F6E,0x5DE2,0x5435,0x7092, + 0x8F66,0x626F,0x64A4,0x63A3,0x5F7B,0x6F88,0x90F4,0x81E3, + 0x8FB0,0x5C18,0x6668,0x5FF1,0x6C89,0x9648,0x8D81,0x886C, + 0x6491,0x79F0,0x57CE,0x6A59,0x6210,0x5448,0x4E58,0x7A0B, + 0x60E9,0x6F84,0x8BDA,0x627F,0x901E,0x9A8B,0x79E4,0x5403, + 0x75F4,0x6301,0x5319,0x6C60,0x8FDF,0x5F1B,0x9A70,0x803B, + 0x9F7F,0x4F88,0x5C3A,0x8D64,0x7FC5,0x65A5,0x70BD,0x5145, + 0x51B2,0x866B,0x5D07,0x5BA0,0x62BD,0x916C,0x7574,0x8E0C, + 0x7A20,0x6101,0x7B79,0x4EC7,0x7EF8,0x7785,0x4E11,0x81ED, + 0x521D,0x51FA,0x6A71,0x53A8,0x8E87,0x9504,0x96CF,0x6EC1, + 0x9664,0x695A,0x7884,0x7885,0x7886,0x7888,0x788A,0x788B, + 0x788F,0x7890,0x7892,0x7894,0x7895,0x7896,0x7899,0x789D, + 0x789E,0x78A0,0x78A2,0x78A4,0x78A6,0x78A8,0x78A9,0x78AA, + 0x78AB,0x78AC,0x78AD,0x78AE,0x78AF,0x78B5,0x78B6,0x78B7, + 0x78B8,0x78BA,0x78BB,0x78BC,0x78BD,0x78BF,0x78C0,0x78C2, + 0x78C3,0x78C4,0x78C6,0x78C7,0x78C8,0x78CC,0x78CD,0x78CE, + 0x78CF,0x78D1,0x78D2,0x78D3,0x78D6,0x78D7,0x78D8,0x78DA, + 0x78DB,0x78DC,0x78DD,0x78DE,0x78DF,0x78E0,0x78E1,0x78E2, + 0x78E3,0x78E4,0x78E5,0x78E6,0x78E7,0x78E9,0x78EA,0x78EB, + 0x78ED,0x78EE,0x78EF,0x78F0,0x78F1,0x78F3,0x78F5,0x78F6, + 0x78F8,0x78F9,0x78FB,0x78FC,0x78FD,0x78FE,0x78FF,0x7900, + 0x7902,0x7903,0x7904,0x7906,0x7907,0x7908,0x7909,0x790A, + 0x790B,0x790C,0x7840,0x50A8,0x77D7,0x6410,0x89E6,0x5904, + 0x63E3,0x5DDD,0x7A7F,0x693D,0x4F20,0x8239,0x5598,0x4E32, + 0x75AE,0x7A97,0x5E62,0x5E8A,0x95EF,0x521B,0x5439,0x708A, + 0x6376,0x9524,0x5782,0x6625,0x693F,0x9187,0x5507,0x6DF3, + 0x7EAF,0x8822,0x6233,0x7EF0,0x75B5,0x8328,0x78C1,0x96CC, + 0x8F9E,0x6148,0x74F7,0x8BCD,0x6B64,0x523A,0x8D50,0x6B21, + 0x806A,0x8471,0x56F1,0x5306,0x4ECE,0x4E1B,0x51D1,0x7C97, + 0x918B,0x7C07,0x4FC3,0x8E7F,0x7BE1,0x7A9C,0x6467,0x5D14, + 0x50AC,0x8106,0x7601,0x7CB9,0x6DEC,0x7FE0,0x6751,0x5B58, + 0x5BF8,0x78CB,0x64AE,0x6413,0x63AA,0x632B,0x9519,0x642D, + 0x8FBE,0x7B54,0x7629,0x6253,0x5927,0x5446,0x6B79,0x50A3, + 0x6234,0x5E26,0x6B86,0x4EE3,0x8D37,0x888B,0x5F85,0x902E, + 0x790D,0x790E,0x790F,0x7910,0x7911,0x7912,0x7914,0x7915, + 0x7916,0x7917,0x7918,0x7919,0x791A,0x791B,0x791C,0x791D, + 0x791F,0x7920,0x7921,0x7922,0x7923,0x7925,0x7926,0x7927, + 0x7928,0x7929,0x792A,0x792B,0x792C,0x792D,0x792E,0x792F, + 0x7930,0x7931,0x7932,0x7933,0x7935,0x7936,0x7937,0x7938, + 0x7939,0x793D,0x793F,0x7942,0x7943,0x7944,0x7945,0x7947, + 0x794A,0x794B,0x794C,0x794D,0x794E,0x794F,0x7950,0x7951, + 0x7952,0x7954,0x7955,0x7958,0x7959,0x7961,0x7963,0x7964, + 0x7966,0x7969,0x796A,0x796B,0x796C,0x796E,0x7970,0x7971, + 0x7972,0x7973,0x7974,0x7975,0x7976,0x7979,0x797B,0x797C, + 0x797D,0x797E,0x797F,0x7982,0x7983,0x7986,0x7987,0x7988, + 0x7989,0x798B,0x798C,0x798D,0x798E,0x7990,0x7991,0x7992, + 0x6020,0x803D,0x62C5,0x4E39,0x5355,0x90F8,0x63B8,0x80C6, + 0x65E6,0x6C2E,0x4F46,0x60EE,0x6DE1,0x8BDE,0x5F39,0x86CB, + 0x5F53,0x6321,0x515A,0x8361,0x6863,0x5200,0x6363,0x8E48, + 0x5012,0x5C9B,0x7977,0x5BFC,0x5230,0x7A3B,0x60BC,0x9053, + 0x76D7,0x5FB7,0x5F97,0x7684,0x8E6C,0x706F,0x767B,0x7B49, + 0x77AA,0x51F3,0x9093,0x5824,0x4F4E,0x6EF4,0x8FEA,0x654C, + 0x7B1B,0x72C4,0x6DA4,0x7FDF,0x5AE1,0x62B5,0x5E95,0x5730, + 0x8482,0x7B2C,0x5E1D,0x5F1F,0x9012,0x7F14,0x98A0,0x6382, + 0x6EC7,0x7898,0x70B9,0x5178,0x975B,0x57AB,0x7535,0x4F43, + 0x7538,0x5E97,0x60E6,0x5960,0x6DC0,0x6BBF,0x7889,0x53FC, + 0x96D5,0x51CB,0x5201,0x6389,0x540A,0x9493,0x8C03,0x8DCC, + 0x7239,0x789F,0x8776,0x8FED,0x8C0D,0x53E0,0x7993,0x7994, + 0x7995,0x7996,0x7997,0x7998,0x7999,0x799B,0x799C,0x799D, + 0x799E,0x799F,0x79A0,0x79A1,0x79A2,0x79A3,0x79A4,0x79A5, + 0x79A6,0x79A8,0x79A9,0x79AA,0x79AB,0x79AC,0x79AD,0x79AE, + 0x79AF,0x79B0,0x79B1,0x79B2,0x79B4,0x79B5,0x79B6,0x79B7, + 0x79B8,0x79BC,0x79BF,0x79C2,0x79C4,0x79C5,0x79C7,0x79C8, + 0x79CA,0x79CC,0x79CE,0x79CF,0x79D0,0x79D3,0x79D4,0x79D6, + 0x79D7,0x79D9,0x79DA,0x79DB,0x79DC,0x79DD,0x79DE,0x79E0, + 0x79E1,0x79E2,0x79E5,0x79E8,0x79EA,0x79EC,0x79EE,0x79F1, + 0x79F2,0x79F3,0x79F4,0x79F5,0x79F6,0x79F7,0x79F9,0x79FA, + 0x79FC,0x79FE,0x79FF,0x7A01,0x7A04,0x7A05,0x7A07,0x7A08, + 0x7A09,0x7A0A,0x7A0C,0x7A0F,0x7A10,0x7A11,0x7A12,0x7A13, + 0x7A15,0x7A16,0x7A18,0x7A19,0x7A1B,0x7A1C,0x4E01,0x76EF, + 0x53EE,0x9489,0x9876,0x9F0E,0x952D,0x5B9A,0x8BA2,0x4E22, + 0x4E1C,0x51AC,0x8463,0x61C2,0x52A8,0x680B,0x4F97,0x606B, + 0x51BB,0x6D1E,0x515C,0x6296,0x6597,0x9661,0x8C46,0x9017, + 0x75D8,0x90FD,0x7763,0x6BD2,0x728A,0x72EC,0x8BFB,0x5835, + 0x7779,0x8D4C,0x675C,0x9540,0x809A,0x5EA6,0x6E21,0x5992, + 0x7AEF,0x77ED,0x953B,0x6BB5,0x65AD,0x7F0E,0x5806,0x5151, + 0x961F,0x5BF9,0x58A9,0x5428,0x8E72,0x6566,0x987F,0x56E4, + 0x949D,0x76FE,0x9041,0x6387,0x54C6,0x591A,0x593A,0x579B, + 0x8EB2,0x6735,0x8DFA,0x8235,0x5241,0x60F0,0x5815,0x86FE, + 0x5CE8,0x9E45,0x4FC4,0x989D,0x8BB9,0x5A25,0x6076,0x5384, + 0x627C,0x904F,0x9102,0x997F,0x6069,0x800C,0x513F,0x8033, + 0x5C14,0x9975,0x6D31,0x4E8C,0x7A1D,0x7A1F,0x7A21,0x7A22, + 0x7A24,0x7A25,0x7A26,0x7A27,0x7A28,0x7A29,0x7A2A,0x7A2B, + 0x7A2C,0x7A2D,0x7A2E,0x7A2F,0x7A30,0x7A31,0x7A32,0x7A34, + 0x7A35,0x7A36,0x7A38,0x7A3A,0x7A3E,0x7A40,0x7A41,0x7A42, + 0x7A43,0x7A44,0x7A45,0x7A47,0x7A48,0x7A49,0x7A4A,0x7A4B, + 0x7A4C,0x7A4D,0x7A4E,0x7A4F,0x7A50,0x7A52,0x7A53,0x7A54, + 0x7A55,0x7A56,0x7A58,0x7A59,0x7A5A,0x7A5B,0x7A5C,0x7A5D, + 0x7A5E,0x7A5F,0x7A60,0x7A61,0x7A62,0x7A63,0x7A64,0x7A65, + 0x7A66,0x7A67,0x7A68,0x7A69,0x7A6A,0x7A6B,0x7A6C,0x7A6D, + 0x7A6E,0x7A6F,0x7A71,0x7A72,0x7A73,0x7A75,0x7A7B,0x7A7C, + 0x7A7D,0x7A7E,0x7A82,0x7A85,0x7A87,0x7A89,0x7A8A,0x7A8B, + 0x7A8C,0x7A8E,0x7A8F,0x7A90,0x7A93,0x7A94,0x7A99,0x7A9A, + 0x7A9B,0x7A9E,0x7AA1,0x7AA2,0x8D30,0x53D1,0x7F5A,0x7B4F, + 0x4F10,0x4E4F,0x9600,0x6CD5,0x73D0,0x85E9,0x5E06,0x756A, + 0x7FFB,0x6A0A,0x77FE,0x9492,0x7E41,0x51E1,0x70E6,0x53CD, + 0x8FD4,0x8303,0x8D29,0x72AF,0x996D,0x6CDB,0x574A,0x82B3, + 0x65B9,0x80AA,0x623F,0x9632,0x59A8,0x4EFF,0x8BBF,0x7EBA, + 0x653E,0x83F2,0x975E,0x5561,0x98DE,0x80A5,0x532A,0x8BFD, + 0x5420,0x80BA,0x5E9F,0x6CB8,0x8D39,0x82AC,0x915A,0x5429, + 0x6C1B,0x5206,0x7EB7,0x575F,0x711A,0x6C7E,0x7C89,0x594B, + 0x4EFD,0x5FFF,0x6124,0x7CAA,0x4E30,0x5C01,0x67AB,0x8702, + 0x5CF0,0x950B,0x98CE,0x75AF,0x70FD,0x9022,0x51AF,0x7F1D, + 0x8BBD,0x5949,0x51E4,0x4F5B,0x5426,0x592B,0x6577,0x80A4, + 0x5B75,0x6276,0x62C2,0x8F90,0x5E45,0x6C1F,0x7B26,0x4F0F, + 0x4FD8,0x670D,0x7AA3,0x7AA4,0x7AA7,0x7AA9,0x7AAA,0x7AAB, + 0x7AAE,0x7AAF,0x7AB0,0x7AB1,0x7AB2,0x7AB4,0x7AB5,0x7AB6, + 0x7AB7,0x7AB8,0x7AB9,0x7ABA,0x7ABB,0x7ABC,0x7ABD,0x7ABE, + 0x7AC0,0x7AC1,0x7AC2,0x7AC3,0x7AC4,0x7AC5,0x7AC6,0x7AC7, + 0x7AC8,0x7AC9,0x7ACA,0x7ACC,0x7ACD,0x7ACE,0x7ACF,0x7AD0, + 0x7AD1,0x7AD2,0x7AD3,0x7AD4,0x7AD5,0x7AD7,0x7AD8,0x7ADA, + 0x7ADB,0x7ADC,0x7ADD,0x7AE1,0x7AE2,0x7AE4,0x7AE7,0x7AE8, + 0x7AE9,0x7AEA,0x7AEB,0x7AEC,0x7AEE,0x7AF0,0x7AF1,0x7AF2, + 0x7AF3,0x7AF4,0x7AF5,0x7AF6,0x7AF7,0x7AF8,0x7AFB,0x7AFC, + 0x7AFE,0x7B00,0x7B01,0x7B02,0x7B05,0x7B07,0x7B09,0x7B0C, + 0x7B0D,0x7B0E,0x7B10,0x7B12,0x7B13,0x7B16,0x7B17,0x7B18, + 0x7B1A,0x7B1C,0x7B1D,0x7B1F,0x7B21,0x7B22,0x7B23,0x7B27, + 0x7B29,0x7B2D,0x6D6E,0x6DAA,0x798F,0x88B1,0x5F17,0x752B, + 0x629A,0x8F85,0x4FEF,0x91DC,0x65A7,0x812F,0x8151,0x5E9C, + 0x8150,0x8D74,0x526F,0x8986,0x8D4B,0x590D,0x5085,0x4ED8, + 0x961C,0x7236,0x8179,0x8D1F,0x5BCC,0x8BA3,0x9644,0x5987, + 0x7F1A,0x5490,0x5676,0x560E,0x8BE5,0x6539,0x6982,0x9499, + 0x76D6,0x6E89,0x5E72,0x7518,0x6746,0x67D1,0x7AFF,0x809D, + 0x8D76,0x611F,0x79C6,0x6562,0x8D63,0x5188,0x521A,0x94A2, + 0x7F38,0x809B,0x7EB2,0x5C97,0x6E2F,0x6760,0x7BD9,0x768B, + 0x9AD8,0x818F,0x7F94,0x7CD5,0x641E,0x9550,0x7A3F,0x544A, + 0x54E5,0x6B4C,0x6401,0x6208,0x9E3D,0x80F3,0x7599,0x5272, + 0x9769,0x845B,0x683C,0x86E4,0x9601,0x9694,0x94EC,0x4E2A, + 0x5404,0x7ED9,0x6839,0x8DDF,0x8015,0x66F4,0x5E9A,0x7FB9, + 0x7B2F,0x7B30,0x7B32,0x7B34,0x7B35,0x7B36,0x7B37,0x7B39, + 0x7B3B,0x7B3D,0x7B3F,0x7B40,0x7B41,0x7B42,0x7B43,0x7B44, + 0x7B46,0x7B48,0x7B4A,0x7B4D,0x7B4E,0x7B53,0x7B55,0x7B57, + 0x7B59,0x7B5C,0x7B5E,0x7B5F,0x7B61,0x7B63,0x7B64,0x7B65, + 0x7B66,0x7B67,0x7B68,0x7B69,0x7B6A,0x7B6B,0x7B6C,0x7B6D, + 0x7B6F,0x7B70,0x7B73,0x7B74,0x7B76,0x7B78,0x7B7A,0x7B7C, + 0x7B7D,0x7B7F,0x7B81,0x7B82,0x7B83,0x7B84,0x7B86,0x7B87, + 0x7B88,0x7B89,0x7B8A,0x7B8B,0x7B8C,0x7B8E,0x7B8F,0x7B91, + 0x7B92,0x7B93,0x7B96,0x7B98,0x7B99,0x7B9A,0x7B9B,0x7B9E, + 0x7B9F,0x7BA0,0x7BA3,0x7BA4,0x7BA5,0x7BAE,0x7BAF,0x7BB0, + 0x7BB2,0x7BB3,0x7BB5,0x7BB6,0x7BB7,0x7BB9,0x7BBA,0x7BBB, + 0x7BBC,0x7BBD,0x7BBE,0x7BBF,0x7BC0,0x7BC2,0x7BC3,0x7BC4, + 0x57C2,0x803F,0x6897,0x5DE5,0x653B,0x529F,0x606D,0x9F9A, + 0x4F9B,0x8EAC,0x516C,0x5BAB,0x5F13,0x5DE9,0x6C5E,0x62F1, + 0x8D21,0x5171,0x94A9,0x52FE,0x6C9F,0x82DF,0x72D7,0x57A2, + 0x6784,0x8D2D,0x591F,0x8F9C,0x83C7,0x5495,0x7B8D,0x4F30, + 0x6CBD,0x5B64,0x59D1,0x9F13,0x53E4,0x86CA,0x9AA8,0x8C37, + 0x80A1,0x6545,0x987E,0x56FA,0x96C7,0x522E,0x74DC,0x5250, + 0x5BE1,0x6302,0x8902,0x4E56,0x62D0,0x602A,0x68FA,0x5173, + 0x5B98,0x51A0,0x89C2,0x7BA1,0x9986,0x7F50,0x60EF,0x704C, + 0x8D2F,0x5149,0x5E7F,0x901B,0x7470,0x89C4,0x572D,0x7845, + 0x5F52,0x9F9F,0x95FA,0x8F68,0x9B3C,0x8BE1,0x7678,0x6842, + 0x67DC,0x8DEA,0x8D35,0x523D,0x8F8A,0x6EDA,0x68CD,0x9505, + 0x90ED,0x56FD,0x679C,0x88F9,0x8FC7,0x54C8,0x7BC5,0x7BC8, + 0x7BC9,0x7BCA,0x7BCB,0x7BCD,0x7BCE,0x7BCF,0x7BD0,0x7BD2, + 0x7BD4,0x7BD5,0x7BD6,0x7BD7,0x7BD8,0x7BDB,0x7BDC,0x7BDE, + 0x7BDF,0x7BE0,0x7BE2,0x7BE3,0x7BE4,0x7BE7,0x7BE8,0x7BE9, + 0x7BEB,0x7BEC,0x7BED,0x7BEF,0x7BF0,0x7BF2,0x7BF3,0x7BF4, + 0x7BF5,0x7BF6,0x7BF8,0x7BF9,0x7BFA,0x7BFB,0x7BFD,0x7BFF, + 0x7C00,0x7C01,0x7C02,0x7C03,0x7C04,0x7C05,0x7C06,0x7C08, + 0x7C09,0x7C0A,0x7C0D,0x7C0E,0x7C10,0x7C11,0x7C12,0x7C13, + 0x7C14,0x7C15,0x7C17,0x7C18,0x7C19,0x7C1A,0x7C1B,0x7C1C, + 0x7C1D,0x7C1E,0x7C20,0x7C21,0x7C22,0x7C23,0x7C24,0x7C25, + 0x7C28,0x7C29,0x7C2B,0x7C2C,0x7C2D,0x7C2E,0x7C2F,0x7C30, + 0x7C31,0x7C32,0x7C33,0x7C34,0x7C35,0x7C36,0x7C37,0x7C39, + 0x7C3A,0x7C3B,0x7C3C,0x7C3D,0x7C3E,0x7C42,0x9AB8,0x5B69, + 0x6D77,0x6C26,0x4EA5,0x5BB3,0x9A87,0x9163,0x61A8,0x90AF, + 0x97E9,0x542B,0x6DB5,0x5BD2,0x51FD,0x558A,0x7F55,0x7FF0, + 0x64BC,0x634D,0x65F1,0x61BE,0x608D,0x710A,0x6C57,0x6C49, + 0x592F,0x676D,0x822A,0x58D5,0x568E,0x8C6A,0x6BEB,0x90DD, + 0x597D,0x8017,0x53F7,0x6D69,0x5475,0x559D,0x8377,0x83CF, + 0x6838,0x79BE,0x548C,0x4F55,0x5408,0x76D2,0x8C89,0x9602, + 0x6CB3,0x6DB8,0x8D6B,0x8910,0x9E64,0x8D3A,0x563F,0x9ED1, + 0x75D5,0x5F88,0x72E0,0x6068,0x54FC,0x4EA8,0x6A2A,0x8861, + 0x6052,0x8F70,0x54C4,0x70D8,0x8679,0x9E3F,0x6D2A,0x5B8F, + 0x5F18,0x7EA2,0x5589,0x4FAF,0x7334,0x543C,0x539A,0x5019, + 0x540E,0x547C,0x4E4E,0x5FFD,0x745A,0x58F6,0x846B,0x80E1, + 0x8774,0x72D0,0x7CCA,0x6E56,0x7C43,0x7C44,0x7C45,0x7C46, + 0x7C47,0x7C48,0x7C49,0x7C4A,0x7C4B,0x7C4C,0x7C4E,0x7C4F, + 0x7C50,0x7C51,0x7C52,0x7C53,0x7C54,0x7C55,0x7C56,0x7C57, + 0x7C58,0x7C59,0x7C5A,0x7C5B,0x7C5C,0x7C5D,0x7C5E,0x7C5F, + 0x7C60,0x7C61,0x7C62,0x7C63,0x7C64,0x7C65,0x7C66,0x7C67, + 0x7C68,0x7C69,0x7C6A,0x7C6B,0x7C6C,0x7C6D,0x7C6E,0x7C6F, + 0x7C70,0x7C71,0x7C72,0x7C75,0x7C76,0x7C77,0x7C78,0x7C79, + 0x7C7A,0x7C7E,0x7C7F,0x7C80,0x7C81,0x7C82,0x7C83,0x7C84, + 0x7C85,0x7C86,0x7C87,0x7C88,0x7C8A,0x7C8B,0x7C8C,0x7C8D, + 0x7C8E,0x7C8F,0x7C90,0x7C93,0x7C94,0x7C96,0x7C99,0x7C9A, + 0x7C9B,0x7CA0,0x7CA1,0x7CA3,0x7CA6,0x7CA7,0x7CA8,0x7CA9, + 0x7CAB,0x7CAC,0x7CAD,0x7CAF,0x7CB0,0x7CB4,0x7CB5,0x7CB6, + 0x7CB7,0x7CB8,0x7CBA,0x7CBB,0x5F27,0x864E,0x552C,0x62A4, + 0x4E92,0x6CAA,0x6237,0x82B1,0x54D7,0x534E,0x733E,0x6ED1, + 0x753B,0x5212,0x5316,0x8BDD,0x69D0,0x5F8A,0x6000,0x6DEE, + 0x574F,0x6B22,0x73AF,0x6853,0x8FD8,0x7F13,0x6362,0x60A3, + 0x5524,0x75EA,0x8C62,0x7115,0x6DA3,0x5BA6,0x5E7B,0x8352, + 0x614C,0x9EC4,0x78FA,0x8757,0x7C27,0x7687,0x51F0,0x60F6, + 0x714C,0x6643,0x5E4C,0x604D,0x8C0E,0x7070,0x6325,0x8F89, + 0x5FBD,0x6062,0x86D4,0x56DE,0x6BC1,0x6094,0x6167,0x5349, + 0x60E0,0x6666,0x8D3F,0x79FD,0x4F1A,0x70E9,0x6C47,0x8BB3, + 0x8BF2,0x7ED8,0x8364,0x660F,0x5A5A,0x9B42,0x6D51,0x6DF7, + 0x8C41,0x6D3B,0x4F19,0x706B,0x83B7,0x6216,0x60D1,0x970D, + 0x8D27,0x7978,0x51FB,0x573E,0x57FA,0x673A,0x7578,0x7A3D, + 0x79EF,0x7B95,0x7CBF,0x7CC0,0x7CC2,0x7CC3,0x7CC4,0x7CC6, + 0x7CC9,0x7CCB,0x7CCE,0x7CCF,0x7CD0,0x7CD1,0x7CD2,0x7CD3, + 0x7CD4,0x7CD8,0x7CDA,0x7CDB,0x7CDD,0x7CDE,0x7CE1,0x7CE2, + 0x7CE3,0x7CE4,0x7CE5,0x7CE6,0x7CE7,0x7CE9,0x7CEA,0x7CEB, + 0x7CEC,0x7CED,0x7CEE,0x7CF0,0x7CF1,0x7CF2,0x7CF3,0x7CF4, + 0x7CF5,0x7CF6,0x7CF7,0x7CF9,0x7CFA,0x7CFC,0x7CFD,0x7CFE, + 0x7CFF,0x7D00,0x7D01,0x7D02,0x7D03,0x7D04,0x7D05,0x7D06, + 0x7D07,0x7D08,0x7D09,0x7D0B,0x7D0C,0x7D0D,0x7D0E,0x7D0F, + 0x7D10,0x7D11,0x7D12,0x7D13,0x7D14,0x7D15,0x7D16,0x7D17, + 0x7D18,0x7D19,0x7D1A,0x7D1B,0x7D1C,0x7D1D,0x7D1E,0x7D1F, + 0x7D21,0x7D23,0x7D24,0x7D25,0x7D26,0x7D28,0x7D29,0x7D2A, + 0x7D2C,0x7D2D,0x7D2E,0x7D30,0x7D31,0x7D32,0x7D33,0x7D34, + 0x7D35,0x7D36,0x808C,0x9965,0x8FF9,0x6FC0,0x8BA5,0x9E21, + 0x59EC,0x7EE9,0x7F09,0x5409,0x6781,0x68D8,0x8F91,0x7C4D, + 0x96C6,0x53CA,0x6025,0x75BE,0x6C72,0x5373,0x5AC9,0x7EA7, + 0x6324,0x51E0,0x810A,0x5DF1,0x84DF,0x6280,0x5180,0x5B63, + 0x4F0E,0x796D,0x5242,0x60B8,0x6D4E,0x5BC4,0x5BC2,0x8BA1, + 0x8BB0,0x65E2,0x5FCC,0x9645,0x5993,0x7EE7,0x7EAA,0x5609, + 0x67B7,0x5939,0x4F73,0x5BB6,0x52A0,0x835A,0x988A,0x8D3E, + 0x7532,0x94BE,0x5047,0x7A3C,0x4EF7,0x67B6,0x9A7E,0x5AC1, + 0x6B7C,0x76D1,0x575A,0x5C16,0x7B3A,0x95F4,0x714E,0x517C, + 0x80A9,0x8270,0x5978,0x7F04,0x8327,0x68C0,0x67EC,0x78B1, + 0x7877,0x62E3,0x6361,0x7B80,0x4FED,0x526A,0x51CF,0x8350, + 0x69DB,0x9274,0x8DF5,0x8D31,0x89C1,0x952E,0x7BAD,0x4EF6, + 0x7D37,0x7D38,0x7D39,0x7D3A,0x7D3B,0x7D3C,0x7D3D,0x7D3E, + 0x7D3F,0x7D40,0x7D41,0x7D42,0x7D43,0x7D44,0x7D45,0x7D46, + 0x7D47,0x7D48,0x7D49,0x7D4A,0x7D4B,0x7D4C,0x7D4D,0x7D4E, + 0x7D4F,0x7D50,0x7D51,0x7D52,0x7D53,0x7D54,0x7D55,0x7D56, + 0x7D57,0x7D58,0x7D59,0x7D5A,0x7D5B,0x7D5C,0x7D5D,0x7D5E, + 0x7D5F,0x7D60,0x7D61,0x7D62,0x7D63,0x7D64,0x7D65,0x7D66, + 0x7D67,0x7D68,0x7D69,0x7D6A,0x7D6B,0x7D6C,0x7D6D,0x7D6F, + 0x7D70,0x7D71,0x7D72,0x7D73,0x7D74,0x7D75,0x7D76,0x7D78, + 0x7D79,0x7D7A,0x7D7B,0x7D7C,0x7D7D,0x7D7E,0x7D7F,0x7D80, + 0x7D81,0x7D82,0x7D83,0x7D84,0x7D85,0x7D86,0x7D87,0x7D88, + 0x7D89,0x7D8A,0x7D8B,0x7D8C,0x7D8D,0x7D8E,0x7D8F,0x7D90, + 0x7D91,0x7D92,0x7D93,0x7D94,0x7D95,0x7D96,0x7D97,0x7D98, + 0x5065,0x8230,0x5251,0x996F,0x6E10,0x6E85,0x6DA7,0x5EFA, + 0x50F5,0x59DC,0x5C06,0x6D46,0x6C5F,0x7586,0x848B,0x6868, + 0x5956,0x8BB2,0x5320,0x9171,0x964D,0x8549,0x6912,0x7901, + 0x7126,0x80F6,0x4EA4,0x90CA,0x6D47,0x9A84,0x5A07,0x56BC, + 0x6405,0x94F0,0x77EB,0x4FA5,0x811A,0x72E1,0x89D2,0x997A, + 0x7F34,0x7EDE,0x527F,0x6559,0x9175,0x8F7F,0x8F83,0x53EB, + 0x7A96,0x63ED,0x63A5,0x7686,0x79F8,0x8857,0x9636,0x622A, + 0x52AB,0x8282,0x6854,0x6770,0x6377,0x776B,0x7AED,0x6D01, + 0x7ED3,0x89E3,0x59D0,0x6212,0x85C9,0x82A5,0x754C,0x501F, + 0x4ECB,0x75A5,0x8BEB,0x5C4A,0x5DFE,0x7B4B,0x65A4,0x91D1, + 0x4ECA,0x6D25,0x895F,0x7D27,0x9526,0x4EC5,0x8C28,0x8FDB, + 0x9773,0x664B,0x7981,0x8FD1,0x70EC,0x6D78,0x7D99,0x7D9A, + 0x7D9B,0x7D9C,0x7D9D,0x7D9E,0x7D9F,0x7DA0,0x7DA1,0x7DA2, + 0x7DA3,0x7DA4,0x7DA5,0x7DA7,0x7DA8,0x7DA9,0x7DAA,0x7DAB, + 0x7DAC,0x7DAD,0x7DAF,0x7DB0,0x7DB1,0x7DB2,0x7DB3,0x7DB4, + 0x7DB5,0x7DB6,0x7DB7,0x7DB8,0x7DB9,0x7DBA,0x7DBB,0x7DBC, + 0x7DBD,0x7DBE,0x7DBF,0x7DC0,0x7DC1,0x7DC2,0x7DC3,0x7DC4, + 0x7DC5,0x7DC6,0x7DC7,0x7DC8,0x7DC9,0x7DCA,0x7DCB,0x7DCC, + 0x7DCD,0x7DCE,0x7DCF,0x7DD0,0x7DD1,0x7DD2,0x7DD3,0x7DD4, + 0x7DD5,0x7DD6,0x7DD7,0x7DD8,0x7DD9,0x7DDA,0x7DDB,0x7DDC, + 0x7DDD,0x7DDE,0x7DDF,0x7DE0,0x7DE1,0x7DE2,0x7DE3,0x7DE4, + 0x7DE5,0x7DE6,0x7DE7,0x7DE8,0x7DE9,0x7DEA,0x7DEB,0x7DEC, + 0x7DED,0x7DEE,0x7DEF,0x7DF0,0x7DF1,0x7DF2,0x7DF3,0x7DF4, + 0x7DF5,0x7DF6,0x7DF7,0x7DF8,0x7DF9,0x7DFA,0x5C3D,0x52B2, + 0x8346,0x5162,0x830E,0x775B,0x6676,0x9CB8,0x4EAC,0x60CA, + 0x7CBE,0x7CB3,0x7ECF,0x4E95,0x8B66,0x666F,0x9888,0x9759, + 0x5883,0x656C,0x955C,0x5F84,0x75C9,0x9756,0x7ADF,0x7ADE, + 0x51C0,0x70AF,0x7A98,0x63EA,0x7A76,0x7EA0,0x7396,0x97ED, + 0x4E45,0x7078,0x4E5D,0x9152,0x53A9,0x6551,0x65E7,0x81FC, + 0x8205,0x548E,0x5C31,0x759A,0x97A0,0x62D8,0x72D9,0x75BD, + 0x5C45,0x9A79,0x83CA,0x5C40,0x5480,0x77E9,0x4E3E,0x6CAE, + 0x805A,0x62D2,0x636E,0x5DE8,0x5177,0x8DDD,0x8E1E,0x952F, + 0x4FF1,0x53E5,0x60E7,0x70AC,0x5267,0x6350,0x9E43,0x5A1F, + 0x5026,0x7737,0x5377,0x7EE2,0x6485,0x652B,0x6289,0x6398, + 0x5014,0x7235,0x89C9,0x51B3,0x8BC0,0x7EDD,0x5747,0x83CC, + 0x94A7,0x519B,0x541B,0x5CFB,0x7DFB,0x7DFC,0x7DFD,0x7DFE, + 0x7DFF,0x7E00,0x7E01,0x7E02,0x7E03,0x7E04,0x7E05,0x7E06, + 0x7E07,0x7E08,0x7E09,0x7E0A,0x7E0B,0x7E0C,0x7E0D,0x7E0E, + 0x7E0F,0x7E10,0x7E11,0x7E12,0x7E13,0x7E14,0x7E15,0x7E16, + 0x7E17,0x7E18,0x7E19,0x7E1A,0x7E1B,0x7E1C,0x7E1D,0x7E1E, + 0x7E1F,0x7E20,0x7E21,0x7E22,0x7E23,0x7E24,0x7E25,0x7E26, + 0x7E27,0x7E28,0x7E29,0x7E2A,0x7E2B,0x7E2C,0x7E2D,0x7E2E, + 0x7E2F,0x7E30,0x7E31,0x7E32,0x7E33,0x7E34,0x7E35,0x7E36, + 0x7E37,0x7E38,0x7E39,0x7E3A,0x7E3C,0x7E3D,0x7E3E,0x7E3F, + 0x7E40,0x7E42,0x7E43,0x7E44,0x7E45,0x7E46,0x7E48,0x7E49, + 0x7E4A,0x7E4B,0x7E4C,0x7E4D,0x7E4E,0x7E4F,0x7E50,0x7E51, + 0x7E52,0x7E53,0x7E54,0x7E55,0x7E56,0x7E57,0x7E58,0x7E59, + 0x7E5A,0x7E5B,0x7E5C,0x7E5D,0x4FCA,0x7AE3,0x6D5A,0x90E1, + 0x9A8F,0x5580,0x5496,0x5361,0x54AF,0x5F00,0x63E9,0x6977, + 0x51EF,0x6168,0x520A,0x582A,0x52D8,0x574E,0x780D,0x770B, + 0x5EB7,0x6177,0x7CE0,0x625B,0x6297,0x4EA2,0x7095,0x8003, + 0x62F7,0x70E4,0x9760,0x5777,0x82DB,0x67EF,0x68F5,0x78D5, + 0x9897,0x79D1,0x58F3,0x54B3,0x53EF,0x6E34,0x514B,0x523B, + 0x5BA2,0x8BFE,0x80AF,0x5543,0x57A6,0x6073,0x5751,0x542D, + 0x7A7A,0x6050,0x5B54,0x63A7,0x62A0,0x53E3,0x6263,0x5BC7, + 0x67AF,0x54ED,0x7A9F,0x82E6,0x9177,0x5E93,0x88E4,0x5938, + 0x57AE,0x630E,0x8DE8,0x80EF,0x5757,0x7B77,0x4FA9,0x5FEB, + 0x5BBD,0x6B3E,0x5321,0x7B50,0x72C2,0x6846,0x77FF,0x7736, + 0x65F7,0x51B5,0x4E8F,0x76D4,0x5CBF,0x7AA5,0x8475,0x594E, + 0x9B41,0x5080,0x7E5E,0x7E5F,0x7E60,0x7E61,0x7E62,0x7E63, + 0x7E64,0x7E65,0x7E66,0x7E67,0x7E68,0x7E69,0x7E6A,0x7E6B, + 0x7E6C,0x7E6D,0x7E6E,0x7E6F,0x7E70,0x7E71,0x7E72,0x7E73, + 0x7E74,0x7E75,0x7E76,0x7E77,0x7E78,0x7E79,0x7E7A,0x7E7B, + 0x7E7C,0x7E7D,0x7E7E,0x7E7F,0x7E80,0x7E81,0x7E83,0x7E84, + 0x7E85,0x7E86,0x7E87,0x7E88,0x7E89,0x7E8A,0x7E8B,0x7E8C, + 0x7E8D,0x7E8E,0x7E8F,0x7E90,0x7E91,0x7E92,0x7E93,0x7E94, + 0x7E95,0x7E96,0x7E97,0x7E98,0x7E99,0x7E9A,0x7E9C,0x7E9D, + 0x7E9E,0x7EAE,0x7EB4,0x7EBB,0x7EBC,0x7ED6,0x7EE4,0x7EEC, + 0x7EF9,0x7F0A,0x7F10,0x7F1E,0x7F37,0x7F39,0x7F3B,0x7F3C, + 0x7F3D,0x7F3E,0x7F3F,0x7F40,0x7F41,0x7F43,0x7F46,0x7F47, + 0x7F48,0x7F49,0x7F4A,0x7F4B,0x7F4C,0x7F4D,0x7F4E,0x7F4F, + 0x7F52,0x7F53,0x9988,0x6127,0x6E83,0x5764,0x6606,0x6346, + 0x56F0,0x62EC,0x6269,0x5ED3,0x9614,0x5783,0x62C9,0x5587, + 0x8721,0x814A,0x8FA3,0x5566,0x83B1,0x6765,0x8D56,0x84DD, + 0x5A6A,0x680F,0x62E6,0x7BEE,0x9611,0x5170,0x6F9C,0x8C30, + 0x63FD,0x89C8,0x61D2,0x7F06,0x70C2,0x6EE5,0x7405,0x6994, + 0x72FC,0x5ECA,0x90CE,0x6717,0x6D6A,0x635E,0x52B3,0x7262, + 0x8001,0x4F6C,0x59E5,0x916A,0x70D9,0x6D9D,0x52D2,0x4E50, + 0x96F7,0x956D,0x857E,0x78CA,0x7D2F,0x5121,0x5792,0x64C2, + 0x808B,0x7C7B,0x6CEA,0x68F1,0x695E,0x51B7,0x5398,0x68A8, + 0x7281,0x9ECE,0x7BF1,0x72F8,0x79BB,0x6F13,0x7406,0x674E, + 0x91CC,0x9CA4,0x793C,0x8389,0x8354,0x540F,0x6817,0x4E3D, + 0x5389,0x52B1,0x783E,0x5386,0x5229,0x5088,0x4F8B,0x4FD0, + 0x7F56,0x7F59,0x7F5B,0x7F5C,0x7F5D,0x7F5E,0x7F60,0x7F63, + 0x7F64,0x7F65,0x7F66,0x7F67,0x7F6B,0x7F6C,0x7F6D,0x7F6F, + 0x7F70,0x7F73,0x7F75,0x7F76,0x7F77,0x7F78,0x7F7A,0x7F7B, + 0x7F7C,0x7F7D,0x7F7F,0x7F80,0x7F82,0x7F83,0x7F84,0x7F85, + 0x7F86,0x7F87,0x7F88,0x7F89,0x7F8B,0x7F8D,0x7F8F,0x7F90, + 0x7F91,0x7F92,0x7F93,0x7F95,0x7F96,0x7F97,0x7F98,0x7F99, + 0x7F9B,0x7F9C,0x7FA0,0x7FA2,0x7FA3,0x7FA5,0x7FA6,0x7FA8, + 0x7FA9,0x7FAA,0x7FAB,0x7FAC,0x7FAD,0x7FAE,0x7FB1,0x7FB3, + 0x7FB4,0x7FB5,0x7FB6,0x7FB7,0x7FBA,0x7FBB,0x7FBE,0x7FC0, + 0x7FC2,0x7FC3,0x7FC4,0x7FC6,0x7FC7,0x7FC8,0x7FC9,0x7FCB, + 0x7FCD,0x7FCF,0x7FD0,0x7FD1,0x7FD2,0x7FD3,0x7FD6,0x7FD7, + 0x7FD9,0x7FDA,0x7FDB,0x7FDC,0x7FDD,0x7FDE,0x7FE2,0x7FE3, + 0x75E2,0x7ACB,0x7C92,0x6CA5,0x96B6,0x529B,0x7483,0x54E9, + 0x4FE9,0x8054,0x83B2,0x8FDE,0x9570,0x5EC9,0x601C,0x6D9F, + 0x5E18,0x655B,0x8138,0x94FE,0x604B,0x70BC,0x7EC3,0x7CAE, + 0x51C9,0x6881,0x7CB1,0x826F,0x4E24,0x8F86,0x91CF,0x667E, + 0x4EAE,0x8C05,0x64A9,0x804A,0x50DA,0x7597,0x71CE,0x5BE5, + 0x8FBD,0x6F66,0x4E86,0x6482,0x9563,0x5ED6,0x6599,0x5217, + 0x88C2,0x70C8,0x52A3,0x730E,0x7433,0x6797,0x78F7,0x9716, + 0x4E34,0x90BB,0x9CDE,0x6DCB,0x51DB,0x8D41,0x541D,0x62CE, + 0x73B2,0x83F1,0x96F6,0x9F84,0x94C3,0x4F36,0x7F9A,0x51CC, + 0x7075,0x9675,0x5CAD,0x9886,0x53E6,0x4EE4,0x6E9C,0x7409, + 0x69B4,0x786B,0x998F,0x7559,0x5218,0x7624,0x6D41,0x67F3, + 0x516D,0x9F99,0x804B,0x5499,0x7B3C,0x7ABF,0x7FE4,0x7FE7, + 0x7FE8,0x7FEA,0x7FEB,0x7FEC,0x7FED,0x7FEF,0x7FF2,0x7FF4, + 0x7FF5,0x7FF6,0x7FF7,0x7FF8,0x7FF9,0x7FFA,0x7FFD,0x7FFE, + 0x7FFF,0x8002,0x8007,0x8008,0x8009,0x800A,0x800E,0x800F, + 0x8011,0x8013,0x801A,0x801B,0x801D,0x801E,0x801F,0x8021, + 0x8023,0x8024,0x802B,0x802C,0x802D,0x802E,0x802F,0x8030, + 0x8032,0x8034,0x8039,0x803A,0x803C,0x803E,0x8040,0x8041, + 0x8044,0x8045,0x8047,0x8048,0x8049,0x804E,0x804F,0x8050, + 0x8051,0x8053,0x8055,0x8056,0x8057,0x8059,0x805B,0x805C, + 0x805D,0x805E,0x805F,0x8060,0x8061,0x8062,0x8063,0x8064, + 0x8065,0x8066,0x8067,0x8068,0x806B,0x806C,0x806D,0x806E, + 0x806F,0x8070,0x8072,0x8073,0x8074,0x8075,0x8076,0x8077, + 0x8078,0x8079,0x807A,0x807B,0x807C,0x807D,0x9686,0x5784, + 0x62E2,0x9647,0x697C,0x5A04,0x6402,0x7BD3,0x6F0F,0x964B, + 0x82A6,0x5362,0x9885,0x5E90,0x7089,0x63B3,0x5364,0x864F, + 0x9C81,0x9E93,0x788C,0x9732,0x8DEF,0x8D42,0x9E7F,0x6F5E, + 0x7984,0x5F55,0x9646,0x622E,0x9A74,0x5415,0x94DD,0x4FA3, + 0x65C5,0x5C65,0x5C61,0x7F15,0x8651,0x6C2F,0x5F8B,0x7387, + 0x6EE4,0x7EFF,0x5CE6,0x631B,0x5B6A,0x6EE6,0x5375,0x4E71, + 0x63A0,0x7565,0x62A1,0x8F6E,0x4F26,0x4ED1,0x6CA6,0x7EB6, + 0x8BBA,0x841D,0x87BA,0x7F57,0x903B,0x9523,0x7BA9,0x9AA1, + 0x88F8,0x843D,0x6D1B,0x9A86,0x7EDC,0x5988,0x9EBB,0x739B, + 0x7801,0x8682,0x9A6C,0x9A82,0x561B,0x5417,0x57CB,0x4E70, + 0x9EA6,0x5356,0x8FC8,0x8109,0x7792,0x9992,0x86EE,0x6EE1, + 0x8513,0x66FC,0x6162,0x6F2B,0x807E,0x8081,0x8082,0x8085, + 0x8088,0x808A,0x808D,0x808E,0x808F,0x8090,0x8091,0x8092, + 0x8094,0x8095,0x8097,0x8099,0x809E,0x80A3,0x80A6,0x80A7, + 0x80A8,0x80AC,0x80B0,0x80B3,0x80B5,0x80B6,0x80B8,0x80B9, + 0x80BB,0x80C5,0x80C7,0x80C8,0x80C9,0x80CA,0x80CB,0x80CF, + 0x80D0,0x80D1,0x80D2,0x80D3,0x80D4,0x80D5,0x80D8,0x80DF, + 0x80E0,0x80E2,0x80E3,0x80E6,0x80EE,0x80F5,0x80F7,0x80F9, + 0x80FB,0x80FE,0x80FF,0x8100,0x8101,0x8103,0x8104,0x8105, + 0x8107,0x8108,0x810B,0x810C,0x8115,0x8117,0x8119,0x811B, + 0x811C,0x811D,0x811F,0x8120,0x8121,0x8122,0x8123,0x8124, + 0x8125,0x8126,0x8127,0x8128,0x8129,0x812A,0x812B,0x812D, + 0x812E,0x8130,0x8133,0x8134,0x8135,0x8137,0x8139,0x813A, + 0x813B,0x813C,0x813D,0x813F,0x8C29,0x8292,0x832B,0x76F2, + 0x6C13,0x5FD9,0x83BD,0x732B,0x8305,0x951A,0x6BDB,0x77DB, + 0x94C6,0x536F,0x8302,0x5192,0x5E3D,0x8C8C,0x8D38,0x4E48, + 0x73AB,0x679A,0x6885,0x9176,0x9709,0x7164,0x6CA1,0x7709, + 0x5A92,0x9541,0x6BCF,0x7F8E,0x6627,0x5BD0,0x59B9,0x5A9A, + 0x95E8,0x95F7,0x4EEC,0x840C,0x8499,0x6AAC,0x76DF,0x9530, + 0x731B,0x68A6,0x5B5F,0x772F,0x919A,0x9761,0x7CDC,0x8FF7, + 0x8C1C,0x5F25,0x7C73,0x79D8,0x89C5,0x6CCC,0x871C,0x5BC6, + 0x5E42,0x68C9,0x7720,0x7EF5,0x5195,0x514D,0x52C9,0x5A29, + 0x7F05,0x9762,0x82D7,0x63CF,0x7784,0x85D0,0x79D2,0x6E3A, + 0x5E99,0x5999,0x8511,0x706D,0x6C11,0x62BF,0x76BF,0x654F, + 0x60AF,0x95FD,0x660E,0x879F,0x9E23,0x94ED,0x540D,0x547D, + 0x8C2C,0x6478,0x8140,0x8141,0x8142,0x8143,0x8144,0x8145, + 0x8147,0x8149,0x814D,0x814E,0x814F,0x8152,0x8156,0x8157, + 0x8158,0x815B,0x815C,0x815D,0x815E,0x815F,0x8161,0x8162, + 0x8163,0x8164,0x8166,0x8168,0x816A,0x816B,0x816C,0x816F, + 0x8172,0x8173,0x8175,0x8176,0x8177,0x8178,0x8181,0x8183, + 0x8184,0x8185,0x8186,0x8187,0x8189,0x818B,0x818C,0x818D, + 0x818E,0x8190,0x8192,0x8193,0x8194,0x8195,0x8196,0x8197, + 0x8199,0x819A,0x819E,0x819F,0x81A0,0x81A1,0x81A2,0x81A4, + 0x81A5,0x81A7,0x81A9,0x81AB,0x81AC,0x81AD,0x81AE,0x81AF, + 0x81B0,0x81B1,0x81B2,0x81B4,0x81B5,0x81B6,0x81B7,0x81B8, + 0x81B9,0x81BC,0x81BD,0x81BE,0x81BF,0x81C4,0x81C5,0x81C7, + 0x81C8,0x81C9,0x81CB,0x81CD,0x81CE,0x81CF,0x81D0,0x81D1, + 0x81D2,0x81D3,0x6479,0x8611,0x6A21,0x819C,0x78E8,0x6469, + 0x9B54,0x62B9,0x672B,0x83AB,0x58A8,0x9ED8,0x6CAB,0x6F20, + 0x5BDE,0x964C,0x8C0B,0x725F,0x67D0,0x62C7,0x7261,0x4EA9, + 0x59C6,0x6BCD,0x5893,0x66AE,0x5E55,0x52DF,0x6155,0x6728, + 0x76EE,0x7766,0x7267,0x7A46,0x62FF,0x54EA,0x5450,0x94A0, + 0x90A3,0x5A1C,0x7EB3,0x6C16,0x4E43,0x5976,0x8010,0x5948, + 0x5357,0x7537,0x96BE,0x56CA,0x6320,0x8111,0x607C,0x95F9, + 0x6DD6,0x5462,0x9981,0x5185,0x5AE9,0x80FD,0x59AE,0x9713, + 0x502A,0x6CE5,0x5C3C,0x62DF,0x4F60,0x533F,0x817B,0x9006, + 0x6EBA,0x852B,0x62C8,0x5E74,0x78BE,0x64B5,0x637B,0x5FF5, + 0x5A18,0x917F,0x9E1F,0x5C3F,0x634F,0x8042,0x5B7D,0x556E, + 0x954A,0x954D,0x6D85,0x60A8,0x67E0,0x72DE,0x51DD,0x5B81, + 0x81D4,0x81D5,0x81D6,0x81D7,0x81D8,0x81D9,0x81DA,0x81DB, + 0x81DC,0x81DD,0x81DE,0x81DF,0x81E0,0x81E1,0x81E2,0x81E4, + 0x81E5,0x81E6,0x81E8,0x81E9,0x81EB,0x81EE,0x81EF,0x81F0, + 0x81F1,0x81F2,0x81F5,0x81F6,0x81F7,0x81F8,0x81F9,0x81FA, + 0x81FD,0x81FF,0x8203,0x8207,0x8208,0x8209,0x820A,0x820B, + 0x820E,0x820F,0x8211,0x8213,0x8215,0x8216,0x8217,0x8218, + 0x8219,0x821A,0x821D,0x8220,0x8224,0x8225,0x8226,0x8227, + 0x8229,0x822E,0x8232,0x823A,0x823C,0x823D,0x823F,0x8240, + 0x8241,0x8242,0x8243,0x8245,0x8246,0x8248,0x824A,0x824C, + 0x824D,0x824E,0x8250,0x8251,0x8252,0x8253,0x8254,0x8255, + 0x8256,0x8257,0x8259,0x825B,0x825C,0x825D,0x825E,0x8260, + 0x8261,0x8262,0x8263,0x8264,0x8265,0x8266,0x8267,0x8269, + 0x62E7,0x6CDE,0x725B,0x626D,0x94AE,0x7EBD,0x8113,0x6D53, + 0x519C,0x5F04,0x5974,0x52AA,0x6012,0x5973,0x6696,0x8650, + 0x759F,0x632A,0x61E6,0x7CEF,0x8BFA,0x54E6,0x6B27,0x9E25, + 0x6BB4,0x85D5,0x5455,0x5076,0x6CA4,0x556A,0x8DB4,0x722C, + 0x5E15,0x6015,0x7436,0x62CD,0x6392,0x724C,0x5F98,0x6E43, + 0x6D3E,0x6500,0x6F58,0x76D8,0x78D0,0x76FC,0x7554,0x5224, + 0x53DB,0x4E53,0x5E9E,0x65C1,0x802A,0x80D6,0x629B,0x5486, + 0x5228,0x70AE,0x888D,0x8DD1,0x6CE1,0x5478,0x80DA,0x57F9, + 0x88F4,0x8D54,0x966A,0x914D,0x4F69,0x6C9B,0x55B7,0x76C6, + 0x7830,0x62A8,0x70F9,0x6F8E,0x5F6D,0x84EC,0x68DA,0x787C, + 0x7BF7,0x81A8,0x670B,0x9E4F,0x6367,0x78B0,0x576F,0x7812, + 0x9739,0x6279,0x62AB,0x5288,0x7435,0x6BD7,0x826A,0x826B, + 0x826C,0x826D,0x8271,0x8275,0x8276,0x8277,0x8278,0x827B, + 0x827C,0x8280,0x8281,0x8283,0x8285,0x8286,0x8287,0x8289, + 0x828C,0x8290,0x8293,0x8294,0x8295,0x8296,0x829A,0x829B, + 0x829E,0x82A0,0x82A2,0x82A3,0x82A7,0x82B2,0x82B5,0x82B6, + 0x82BA,0x82BB,0x82BC,0x82BF,0x82C0,0x82C2,0x82C3,0x82C5, + 0x82C6,0x82C9,0x82D0,0x82D6,0x82D9,0x82DA,0x82DD,0x82E2, + 0x82E7,0x82E8,0x82E9,0x82EA,0x82EC,0x82ED,0x82EE,0x82F0, + 0x82F2,0x82F3,0x82F5,0x82F6,0x82F8,0x82FA,0x82FC,0x82FD, + 0x82FE,0x82FF,0x8300,0x830A,0x830B,0x830D,0x8310,0x8312, + 0x8313,0x8316,0x8318,0x8319,0x831D,0x831E,0x831F,0x8320, + 0x8321,0x8322,0x8323,0x8324,0x8325,0x8326,0x8329,0x832A, + 0x832E,0x8330,0x8332,0x8337,0x833B,0x833D,0x5564,0x813E, + 0x75B2,0x76AE,0x5339,0x75DE,0x50FB,0x5C41,0x8B6C,0x7BC7, + 0x504F,0x7247,0x9A97,0x98D8,0x6F02,0x74E2,0x7968,0x6487, + 0x77A5,0x62FC,0x9891,0x8D2B,0x54C1,0x8058,0x4E52,0x576A, + 0x82F9,0x840D,0x5E73,0x51ED,0x74F6,0x8BC4,0x5C4F,0x5761, + 0x6CFC,0x9887,0x5A46,0x7834,0x9B44,0x8FEB,0x7C95,0x5256, + 0x6251,0x94FA,0x4EC6,0x8386,0x8461,0x83E9,0x84B2,0x57D4, + 0x6734,0x5703,0x666E,0x6D66,0x8C31,0x66DD,0x7011,0x671F, + 0x6B3A,0x6816,0x621A,0x59BB,0x4E03,0x51C4,0x6F06,0x67D2, + 0x6C8F,0x5176,0x68CB,0x5947,0x6B67,0x7566,0x5D0E,0x8110, + 0x9F50,0x65D7,0x7948,0x7941,0x9A91,0x8D77,0x5C82,0x4E5E, + 0x4F01,0x542F,0x5951,0x780C,0x5668,0x6C14,0x8FC4,0x5F03, + 0x6C7D,0x6CE3,0x8BAB,0x6390,0x833E,0x833F,0x8341,0x8342, + 0x8344,0x8345,0x8348,0x834A,0x834B,0x834C,0x834D,0x834E, + 0x8353,0x8355,0x8356,0x8357,0x8358,0x8359,0x835D,0x8362, + 0x8370,0x8371,0x8372,0x8373,0x8374,0x8375,0x8376,0x8379, + 0x837A,0x837E,0x837F,0x8380,0x8381,0x8382,0x8383,0x8384, + 0x8387,0x8388,0x838A,0x838B,0x838C,0x838D,0x838F,0x8390, + 0x8391,0x8394,0x8395,0x8396,0x8397,0x8399,0x839A,0x839D, + 0x839F,0x83A1,0x83A2,0x83A3,0x83A4,0x83A5,0x83A6,0x83A7, + 0x83AC,0x83AD,0x83AE,0x83AF,0x83B5,0x83BB,0x83BE,0x83BF, + 0x83C2,0x83C3,0x83C4,0x83C6,0x83C8,0x83C9,0x83CB,0x83CD, + 0x83CE,0x83D0,0x83D1,0x83D2,0x83D3,0x83D5,0x83D7,0x83D9, + 0x83DA,0x83DB,0x83DE,0x83E2,0x83E3,0x83E4,0x83E6,0x83E7, + 0x83E8,0x83EB,0x83EC,0x83ED,0x6070,0x6D3D,0x7275,0x6266, + 0x948E,0x94C5,0x5343,0x8FC1,0x7B7E,0x4EDF,0x8C26,0x4E7E, + 0x9ED4,0x94B1,0x94B3,0x524D,0x6F5C,0x9063,0x6D45,0x8C34, + 0x5811,0x5D4C,0x6B20,0x6B49,0x67AA,0x545B,0x8154,0x7F8C, + 0x5899,0x8537,0x5F3A,0x62A2,0x6A47,0x9539,0x6572,0x6084, + 0x6865,0x77A7,0x4E54,0x4FA8,0x5DE7,0x9798,0x64AC,0x7FD8, + 0x5CED,0x4FCF,0x7A8D,0x5207,0x8304,0x4E14,0x602F,0x7A83, + 0x94A6,0x4FB5,0x4EB2,0x79E6,0x7434,0x52E4,0x82B9,0x64D2, + 0x79BD,0x5BDD,0x6C81,0x9752,0x8F7B,0x6C22,0x503E,0x537F, + 0x6E05,0x64CE,0x6674,0x6C30,0x60C5,0x9877,0x8BF7,0x5E86, + 0x743C,0x7A77,0x79CB,0x4E18,0x90B1,0x7403,0x6C42,0x56DA, + 0x914B,0x6CC5,0x8D8B,0x533A,0x86C6,0x66F2,0x8EAF,0x5C48, + 0x9A71,0x6E20,0x83EE,0x83EF,0x83F3,0x83F4,0x83F5,0x83F6, + 0x83F7,0x83FA,0x83FB,0x83FC,0x83FE,0x83FF,0x8400,0x8402, + 0x8405,0x8407,0x8408,0x8409,0x840A,0x8410,0x8412,0x8413, + 0x8414,0x8415,0x8416,0x8417,0x8419,0x841A,0x841B,0x841E, + 0x841F,0x8420,0x8421,0x8422,0x8423,0x8429,0x842A,0x842B, + 0x842C,0x842D,0x842E,0x842F,0x8430,0x8432,0x8433,0x8434, + 0x8435,0x8436,0x8437,0x8439,0x843A,0x843B,0x843E,0x843F, + 0x8440,0x8441,0x8442,0x8443,0x8444,0x8445,0x8447,0x8448, + 0x8449,0x844A,0x844B,0x844C,0x844D,0x844E,0x844F,0x8450, + 0x8452,0x8453,0x8454,0x8455,0x8456,0x8458,0x845D,0x845E, + 0x845F,0x8460,0x8462,0x8464,0x8465,0x8466,0x8467,0x8468, + 0x846A,0x846E,0x846F,0x8470,0x8472,0x8474,0x8477,0x8479, + 0x847B,0x847C,0x53D6,0x5A36,0x9F8B,0x8DA3,0x53BB,0x5708, + 0x98A7,0x6743,0x919B,0x6CC9,0x5168,0x75CA,0x62F3,0x72AC, + 0x5238,0x529D,0x7F3A,0x7094,0x7638,0x5374,0x9E4A,0x69B7, + 0x786E,0x96C0,0x88D9,0x7FA4,0x7136,0x71C3,0x5189,0x67D3, + 0x74E4,0x58E4,0x6518,0x56B7,0x8BA9,0x9976,0x6270,0x7ED5, + 0x60F9,0x70ED,0x58EC,0x4EC1,0x4EBA,0x5FCD,0x97E7,0x4EFB, + 0x8BA4,0x5203,0x598A,0x7EAB,0x6254,0x4ECD,0x65E5,0x620E, + 0x8338,0x84C9,0x8363,0x878D,0x7194,0x6EB6,0x5BB9,0x7ED2, + 0x5197,0x63C9,0x67D4,0x8089,0x8339,0x8815,0x5112,0x5B7A, + 0x5982,0x8FB1,0x4E73,0x6C5D,0x5165,0x8925,0x8F6F,0x962E, + 0x854A,0x745E,0x9510,0x95F0,0x6DA6,0x82E5,0x5F31,0x6492, + 0x6D12,0x8428,0x816E,0x9CC3,0x585E,0x8D5B,0x4E09,0x53C1, + 0x847D,0x847E,0x847F,0x8480,0x8481,0x8483,0x8484,0x8485, + 0x8486,0x848A,0x848D,0x848F,0x8490,0x8491,0x8492,0x8493, + 0x8494,0x8495,0x8496,0x8498,0x849A,0x849B,0x849D,0x849E, + 0x849F,0x84A0,0x84A2,0x84A3,0x84A4,0x84A5,0x84A6,0x84A7, + 0x84A8,0x84A9,0x84AA,0x84AB,0x84AC,0x84AD,0x84AE,0x84B0, + 0x84B1,0x84B3,0x84B5,0x84B6,0x84B7,0x84BB,0x84BC,0x84BE, + 0x84C0,0x84C2,0x84C3,0x84C5,0x84C6,0x84C7,0x84C8,0x84CB, + 0x84CC,0x84CE,0x84CF,0x84D2,0x84D4,0x84D5,0x84D7,0x84D8, + 0x84D9,0x84DA,0x84DB,0x84DC,0x84DE,0x84E1,0x84E2,0x84E4, + 0x84E7,0x84E8,0x84E9,0x84EA,0x84EB,0x84ED,0x84EE,0x84EF, + 0x84F1,0x84F2,0x84F3,0x84F4,0x84F5,0x84F6,0x84F7,0x84F8, + 0x84F9,0x84FA,0x84FB,0x84FD,0x84FE,0x8500,0x8501,0x8502, + 0x4F1E,0x6563,0x6851,0x55D3,0x4E27,0x6414,0x9A9A,0x626B, + 0x5AC2,0x745F,0x8272,0x6DA9,0x68EE,0x50E7,0x838E,0x7802, + 0x6740,0x5239,0x6C99,0x7EB1,0x50BB,0x5565,0x715E,0x7B5B, + 0x6652,0x73CA,0x82EB,0x6749,0x5C71,0x5220,0x717D,0x886B, + 0x95EA,0x9655,0x64C5,0x8D61,0x81B3,0x5584,0x6C55,0x6247, + 0x7F2E,0x5892,0x4F24,0x5546,0x8D4F,0x664C,0x4E0A,0x5C1A, + 0x88F3,0x68A2,0x634E,0x7A0D,0x70E7,0x828D,0x52FA,0x97F6, + 0x5C11,0x54E8,0x90B5,0x7ECD,0x5962,0x8D4A,0x86C7,0x820C, + 0x820D,0x8D66,0x6444,0x5C04,0x6151,0x6D89,0x793E,0x8BBE, + 0x7837,0x7533,0x547B,0x4F38,0x8EAB,0x6DF1,0x5A20,0x7EC5, + 0x795E,0x6C88,0x5BA1,0x5A76,0x751A,0x80BE,0x614E,0x6E17, + 0x58F0,0x751F,0x7525,0x7272,0x5347,0x7EF3,0x8503,0x8504, + 0x8505,0x8506,0x8507,0x8508,0x8509,0x850A,0x850B,0x850D, + 0x850E,0x850F,0x8510,0x8512,0x8514,0x8515,0x8516,0x8518, + 0x8519,0x851B,0x851C,0x851D,0x851E,0x8520,0x8522,0x8523, + 0x8524,0x8525,0x8526,0x8527,0x8528,0x8529,0x852A,0x852D, + 0x852E,0x852F,0x8530,0x8531,0x8532,0x8533,0x8534,0x8535, + 0x8536,0x853E,0x853F,0x8540,0x8541,0x8542,0x8544,0x8545, + 0x8546,0x8547,0x854B,0x854C,0x854D,0x854E,0x854F,0x8550, + 0x8551,0x8552,0x8553,0x8554,0x8555,0x8557,0x8558,0x855A, + 0x855B,0x855C,0x855D,0x855F,0x8560,0x8561,0x8562,0x8563, + 0x8565,0x8566,0x8567,0x8569,0x856A,0x856B,0x856C,0x856D, + 0x856E,0x856F,0x8570,0x8571,0x8573,0x8575,0x8576,0x8577, + 0x8578,0x857C,0x857D,0x857F,0x8580,0x8581,0x7701,0x76DB, + 0x5269,0x80DC,0x5723,0x5E08,0x5931,0x72EE,0x65BD,0x6E7F, + 0x8BD7,0x5C38,0x8671,0x5341,0x77F3,0x62FE,0x65F6,0x4EC0, + 0x98DF,0x8680,0x5B9E,0x8BC6,0x53F2,0x77E2,0x4F7F,0x5C4E, + 0x9A76,0x59CB,0x5F0F,0x793A,0x58EB,0x4E16,0x67FF,0x4E8B, + 0x62ED,0x8A93,0x901D,0x52BF,0x662F,0x55DC,0x566C,0x9002, + 0x4ED5,0x4F8D,0x91CA,0x9970,0x6C0F,0x5E02,0x6043,0x5BA4, + 0x89C6,0x8BD5,0x6536,0x624B,0x9996,0x5B88,0x5BFF,0x6388, + 0x552E,0x53D7,0x7626,0x517D,0x852C,0x67A2,0x68B3,0x6B8A, + 0x6292,0x8F93,0x53D4,0x8212,0x6DD1,0x758F,0x4E66,0x8D4E, + 0x5B70,0x719F,0x85AF,0x6691,0x66D9,0x7F72,0x8700,0x9ECD, + 0x9F20,0x5C5E,0x672F,0x8FF0,0x6811,0x675F,0x620D,0x7AD6, + 0x5885,0x5EB6,0x6570,0x6F31,0x8582,0x8583,0x8586,0x8588, + 0x8589,0x858A,0x858B,0x858C,0x858D,0x858E,0x8590,0x8591, + 0x8592,0x8593,0x8594,0x8595,0x8596,0x8597,0x8598,0x8599, + 0x859A,0x859D,0x859E,0x859F,0x85A0,0x85A1,0x85A2,0x85A3, + 0x85A5,0x85A6,0x85A7,0x85A9,0x85AB,0x85AC,0x85AD,0x85B1, + 0x85B2,0x85B3,0x85B4,0x85B5,0x85B6,0x85B8,0x85BA,0x85BB, + 0x85BC,0x85BD,0x85BE,0x85BF,0x85C0,0x85C2,0x85C3,0x85C4, + 0x85C5,0x85C6,0x85C7,0x85C8,0x85CA,0x85CB,0x85CC,0x85CD, + 0x85CE,0x85D1,0x85D2,0x85D4,0x85D6,0x85D7,0x85D8,0x85D9, + 0x85DA,0x85DB,0x85DD,0x85DE,0x85DF,0x85E0,0x85E1,0x85E2, + 0x85E3,0x85E5,0x85E6,0x85E7,0x85E8,0x85EA,0x85EB,0x85EC, + 0x85ED,0x85EE,0x85EF,0x85F0,0x85F1,0x85F2,0x85F3,0x85F4, + 0x85F5,0x85F6,0x85F7,0x85F8,0x6055,0x5237,0x800D,0x6454, + 0x8870,0x7529,0x5E05,0x6813,0x62F4,0x971C,0x53CC,0x723D, + 0x8C01,0x6C34,0x7761,0x7A0E,0x542E,0x77AC,0x987A,0x821C, + 0x8BF4,0x7855,0x6714,0x70C1,0x65AF,0x6495,0x5636,0x601D, + 0x79C1,0x53F8,0x4E1D,0x6B7B,0x8086,0x5BFA,0x55E3,0x56DB, + 0x4F3A,0x4F3C,0x9972,0x5DF3,0x677E,0x8038,0x6002,0x9882, + 0x9001,0x5B8B,0x8BBC,0x8BF5,0x641C,0x8258,0x64DE,0x55FD, + 0x82CF,0x9165,0x4FD7,0x7D20,0x901F,0x7C9F,0x50F3,0x5851, + 0x6EAF,0x5BBF,0x8BC9,0x8083,0x9178,0x849C,0x7B97,0x867D, + 0x968B,0x968F,0x7EE5,0x9AD3,0x788E,0x5C81,0x7A57,0x9042, + 0x96A7,0x795F,0x5B59,0x635F,0x7B0B,0x84D1,0x68AD,0x5506, + 0x7F29,0x7410,0x7D22,0x9501,0x6240,0x584C,0x4ED6,0x5B83, + 0x5979,0x5854,0x85F9,0x85FA,0x85FC,0x85FD,0x85FE,0x8600, + 0x8601,0x8602,0x8603,0x8604,0x8606,0x8607,0x8608,0x8609, + 0x860A,0x860B,0x860C,0x860D,0x860E,0x860F,0x8610,0x8612, + 0x8613,0x8614,0x8615,0x8617,0x8618,0x8619,0x861A,0x861B, + 0x861C,0x861D,0x861E,0x861F,0x8620,0x8621,0x8622,0x8623, + 0x8624,0x8625,0x8626,0x8628,0x862A,0x862B,0x862C,0x862D, + 0x862E,0x862F,0x8630,0x8631,0x8632,0x8633,0x8634,0x8635, + 0x8636,0x8637,0x8639,0x863A,0x863B,0x863D,0x863E,0x863F, + 0x8640,0x8641,0x8642,0x8643,0x8644,0x8645,0x8646,0x8647, + 0x8648,0x8649,0x864A,0x864B,0x864C,0x8652,0x8653,0x8655, + 0x8656,0x8657,0x8658,0x8659,0x865B,0x865C,0x865D,0x865F, + 0x8660,0x8661,0x8663,0x8664,0x8665,0x8666,0x8667,0x8668, + 0x8669,0x866A,0x736D,0x631E,0x8E4B,0x8E0F,0x80CE,0x82D4, + 0x62AC,0x53F0,0x6CF0,0x915E,0x592A,0x6001,0x6C70,0x574D, + 0x644A,0x8D2A,0x762B,0x6EE9,0x575B,0x6A80,0x75F0,0x6F6D, + 0x8C2D,0x8C08,0x5766,0x6BEF,0x8892,0x78B3,0x63A2,0x53F9, + 0x70AD,0x6C64,0x5858,0x642A,0x5802,0x68E0,0x819B,0x5510, + 0x7CD6,0x5018,0x8EBA,0x6DCC,0x8D9F,0x70EB,0x638F,0x6D9B, + 0x6ED4,0x7EE6,0x8404,0x6843,0x9003,0x6DD8,0x9676,0x8BA8, + 0x5957,0x7279,0x85E4,0x817E,0x75BC,0x8A8A,0x68AF,0x5254, + 0x8E22,0x9511,0x63D0,0x9898,0x8E44,0x557C,0x4F53,0x66FF, + 0x568F,0x60D5,0x6D95,0x5243,0x5C49,0x5929,0x6DFB,0x586B, + 0x7530,0x751C,0x606C,0x8214,0x8146,0x6311,0x6761,0x8FE2, + 0x773A,0x8DF3,0x8D34,0x94C1,0x5E16,0x5385,0x542C,0x70C3, + 0x866D,0x866F,0x8670,0x8672,0x8673,0x8674,0x8675,0x8676, + 0x8677,0x8678,0x8683,0x8684,0x8685,0x8686,0x8687,0x8688, + 0x8689,0x868E,0x868F,0x8690,0x8691,0x8692,0x8694,0x8696, + 0x8697,0x8698,0x8699,0x869A,0x869B,0x869E,0x869F,0x86A0, + 0x86A1,0x86A2,0x86A5,0x86A6,0x86AB,0x86AD,0x86AE,0x86B2, + 0x86B3,0x86B7,0x86B8,0x86B9,0x86BB,0x86BC,0x86BD,0x86BE, + 0x86BF,0x86C1,0x86C2,0x86C3,0x86C5,0x86C8,0x86CC,0x86CD, + 0x86D2,0x86D3,0x86D5,0x86D6,0x86D7,0x86DA,0x86DC,0x86DD, + 0x86E0,0x86E1,0x86E2,0x86E3,0x86E5,0x86E6,0x86E7,0x86E8, + 0x86EA,0x86EB,0x86EC,0x86EF,0x86F5,0x86F6,0x86F7,0x86FA, + 0x86FB,0x86FC,0x86FD,0x86FF,0x8701,0x8704,0x8705,0x8706, + 0x870B,0x870C,0x870E,0x870F,0x8710,0x8711,0x8714,0x8716, + 0x6C40,0x5EF7,0x505C,0x4EAD,0x5EAD,0x633A,0x8247,0x901A, + 0x6850,0x916E,0x77B3,0x540C,0x94DC,0x5F64,0x7AE5,0x6876, + 0x6345,0x7B52,0x7EDF,0x75DB,0x5077,0x6295,0x5934,0x900F, + 0x51F8,0x79C3,0x7A81,0x56FE,0x5F92,0x9014,0x6D82,0x5C60, + 0x571F,0x5410,0x5154,0x6E4D,0x56E2,0x63A8,0x9893,0x817F, + 0x8715,0x892A,0x9000,0x541E,0x5C6F,0x81C0,0x62D6,0x6258, + 0x8131,0x9E35,0x9640,0x9A6E,0x9A7C,0x692D,0x59A5,0x62D3, + 0x553E,0x6316,0x54C7,0x86D9,0x6D3C,0x5A03,0x74E6,0x889C, + 0x6B6A,0x5916,0x8C4C,0x5F2F,0x6E7E,0x73A9,0x987D,0x4E38, + 0x70F7,0x5B8C,0x7897,0x633D,0x665A,0x7696,0x60CB,0x5B9B, + 0x5A49,0x4E07,0x8155,0x6C6A,0x738B,0x4EA1,0x6789,0x7F51, + 0x5F80,0x65FA,0x671B,0x5FD8,0x5984,0x5A01,0x8719,0x871B, + 0x871D,0x871F,0x8720,0x8724,0x8726,0x8727,0x8728,0x872A, + 0x872B,0x872C,0x872D,0x872F,0x8730,0x8732,0x8733,0x8735, + 0x8736,0x8738,0x8739,0x873A,0x873C,0x873D,0x8740,0x8741, + 0x8742,0x8743,0x8744,0x8745,0x8746,0x874A,0x874B,0x874D, + 0x874F,0x8750,0x8751,0x8752,0x8754,0x8755,0x8756,0x8758, + 0x875A,0x875B,0x875C,0x875D,0x875E,0x875F,0x8761,0x8762, + 0x8766,0x8767,0x8768,0x8769,0x876A,0x876B,0x876C,0x876D, + 0x876F,0x8771,0x8772,0x8773,0x8775,0x8777,0x8778,0x8779, + 0x877A,0x877F,0x8780,0x8781,0x8784,0x8786,0x8787,0x8789, + 0x878A,0x878C,0x878E,0x878F,0x8790,0x8791,0x8792,0x8794, + 0x8795,0x8796,0x8798,0x8799,0x879A,0x879B,0x879C,0x879D, + 0x879E,0x87A0,0x87A1,0x87A2,0x87A3,0x87A4,0x5DCD,0x5FAE, + 0x5371,0x97E6,0x8FDD,0x6845,0x56F4,0x552F,0x60DF,0x4E3A, + 0x6F4D,0x7EF4,0x82C7,0x840E,0x59D4,0x4F1F,0x4F2A,0x5C3E, + 0x7EAC,0x672A,0x851A,0x5473,0x754F,0x80C3,0x5582,0x9B4F, + 0x4F4D,0x6E2D,0x8C13,0x5C09,0x6170,0x536B,0x761F,0x6E29, + 0x868A,0x6587,0x95FB,0x7EB9,0x543B,0x7A33,0x7D0A,0x95EE, + 0x55E1,0x7FC1,0x74EE,0x631D,0x8717,0x6DA1,0x7A9D,0x6211, + 0x65A1,0x5367,0x63E1,0x6C83,0x5DEB,0x545C,0x94A8,0x4E4C, + 0x6C61,0x8BEC,0x5C4B,0x65E0,0x829C,0x68A7,0x543E,0x5434, + 0x6BCB,0x6B66,0x4E94,0x6342,0x5348,0x821E,0x4F0D,0x4FAE, + 0x575E,0x620A,0x96FE,0x6664,0x7269,0x52FF,0x52A1,0x609F, + 0x8BEF,0x6614,0x7199,0x6790,0x897F,0x7852,0x77FD,0x6670, + 0x563B,0x5438,0x9521,0x727A,0x87A5,0x87A6,0x87A7,0x87A9, + 0x87AA,0x87AE,0x87B0,0x87B1,0x87B2,0x87B4,0x87B6,0x87B7, + 0x87B8,0x87B9,0x87BB,0x87BC,0x87BE,0x87BF,0x87C1,0x87C2, + 0x87C3,0x87C4,0x87C5,0x87C7,0x87C8,0x87C9,0x87CC,0x87CD, + 0x87CE,0x87CF,0x87D0,0x87D4,0x87D5,0x87D6,0x87D7,0x87D8, + 0x87D9,0x87DA,0x87DC,0x87DD,0x87DE,0x87DF,0x87E1,0x87E2, + 0x87E3,0x87E4,0x87E6,0x87E7,0x87E8,0x87E9,0x87EB,0x87EC, + 0x87ED,0x87EF,0x87F0,0x87F1,0x87F2,0x87F3,0x87F4,0x87F5, + 0x87F6,0x87F7,0x87F8,0x87FA,0x87FB,0x87FC,0x87FD,0x87FF, + 0x8800,0x8801,0x8802,0x8804,0x8805,0x8806,0x8807,0x8808, + 0x8809,0x880B,0x880C,0x880D,0x880E,0x880F,0x8810,0x8811, + 0x8812,0x8814,0x8817,0x8818,0x8819,0x881A,0x881C,0x881D, + 0x881E,0x881F,0x8820,0x8823,0x7A00,0x606F,0x5E0C,0x6089, + 0x819D,0x5915,0x60DC,0x7184,0x70EF,0x6EAA,0x6C50,0x7280, + 0x6A84,0x88AD,0x5E2D,0x4E60,0x5AB3,0x559C,0x94E3,0x6D17, + 0x7CFB,0x9699,0x620F,0x7EC6,0x778E,0x867E,0x5323,0x971E, + 0x8F96,0x6687,0x5CE1,0x4FA0,0x72ED,0x4E0B,0x53A6,0x590F, + 0x5413,0x6380,0x9528,0x5148,0x4ED9,0x9C9C,0x7EA4,0x54B8, + 0x8D24,0x8854,0x8237,0x95F2,0x6D8E,0x5F26,0x5ACC,0x663E, + 0x9669,0x73B0,0x732E,0x53BF,0x817A,0x9985,0x7FA1,0x5BAA, + 0x9677,0x9650,0x7EBF,0x76F8,0x53A2,0x9576,0x9999,0x7BB1, + 0x8944,0x6E58,0x4E61,0x7FD4,0x7965,0x8BE6,0x60F3,0x54CD, + 0x4EAB,0x9879,0x5DF7,0x6A61,0x50CF,0x5411,0x8C61,0x8427, + 0x785D,0x9704,0x524A,0x54EE,0x56A3,0x9500,0x6D88,0x5BB5, + 0x6DC6,0x6653,0x8824,0x8825,0x8826,0x8827,0x8828,0x8829, + 0x882A,0x882B,0x882C,0x882D,0x882E,0x882F,0x8830,0x8831, + 0x8833,0x8834,0x8835,0x8836,0x8837,0x8838,0x883A,0x883B, + 0x883D,0x883E,0x883F,0x8841,0x8842,0x8843,0x8846,0x8847, + 0x8848,0x8849,0x884A,0x884B,0x884E,0x884F,0x8850,0x8851, + 0x8852,0x8853,0x8855,0x8856,0x8858,0x885A,0x885B,0x885C, + 0x885D,0x885E,0x885F,0x8860,0x8866,0x8867,0x886A,0x886D, + 0x886F,0x8871,0x8873,0x8874,0x8875,0x8876,0x8878,0x8879, + 0x887A,0x887B,0x887C,0x8880,0x8883,0x8886,0x8887,0x8889, + 0x888A,0x888C,0x888E,0x888F,0x8890,0x8891,0x8893,0x8894, + 0x8895,0x8897,0x8898,0x8899,0x889A,0x889B,0x889D,0x889E, + 0x889F,0x88A0,0x88A1,0x88A3,0x88A5,0x88A6,0x88A7,0x88A8, + 0x88A9,0x88AA,0x5C0F,0x5B5D,0x6821,0x8096,0x5578,0x7B11, + 0x6548,0x6954,0x4E9B,0x6B47,0x874E,0x978B,0x534F,0x631F, + 0x643A,0x90AA,0x659C,0x80C1,0x8C10,0x5199,0x68B0,0x5378, + 0x87F9,0x61C8,0x6CC4,0x6CFB,0x8C22,0x5C51,0x85AA,0x82AF, + 0x950C,0x6B23,0x8F9B,0x65B0,0x5FFB,0x5FC3,0x4FE1,0x8845, + 0x661F,0x8165,0x7329,0x60FA,0x5174,0x5211,0x578B,0x5F62, + 0x90A2,0x884C,0x9192,0x5E78,0x674F,0x6027,0x59D3,0x5144, + 0x51F6,0x80F8,0x5308,0x6C79,0x96C4,0x718A,0x4F11,0x4FEE, + 0x7F9E,0x673D,0x55C5,0x9508,0x79C0,0x8896,0x7EE3,0x589F, + 0x620C,0x9700,0x865A,0x5618,0x987B,0x5F90,0x8BB8,0x84C4, + 0x9157,0x53D9,0x65ED,0x5E8F,0x755C,0x6064,0x7D6E,0x5A7F, + 0x7EEA,0x7EED,0x8F69,0x55A7,0x5BA3,0x60AC,0x65CB,0x7384, + 0x88AC,0x88AE,0x88AF,0x88B0,0x88B2,0x88B3,0x88B4,0x88B5, + 0x88B6,0x88B8,0x88B9,0x88BA,0x88BB,0x88BD,0x88BE,0x88BF, + 0x88C0,0x88C3,0x88C4,0x88C7,0x88C8,0x88CA,0x88CB,0x88CC, + 0x88CD,0x88CF,0x88D0,0x88D1,0x88D3,0x88D6,0x88D7,0x88DA, + 0x88DB,0x88DC,0x88DD,0x88DE,0x88E0,0x88E1,0x88E6,0x88E7, + 0x88E9,0x88EA,0x88EB,0x88EC,0x88ED,0x88EE,0x88EF,0x88F2, + 0x88F5,0x88F6,0x88F7,0x88FA,0x88FB,0x88FD,0x88FF,0x8900, + 0x8901,0x8903,0x8904,0x8905,0x8906,0x8907,0x8908,0x8909, + 0x890B,0x890C,0x890D,0x890E,0x890F,0x8911,0x8914,0x8915, + 0x8916,0x8917,0x8918,0x891C,0x891D,0x891E,0x891F,0x8920, + 0x8922,0x8923,0x8924,0x8926,0x8927,0x8928,0x8929,0x892C, + 0x892D,0x892E,0x892F,0x8931,0x8932,0x8933,0x8935,0x8937, + 0x9009,0x7663,0x7729,0x7EDA,0x9774,0x859B,0x5B66,0x7A74, + 0x96EA,0x8840,0x52CB,0x718F,0x5FAA,0x65EC,0x8BE2,0x5BFB, + 0x9A6F,0x5DE1,0x6B89,0x6C5B,0x8BAD,0x8BAF,0x900A,0x8FC5, + 0x538B,0x62BC,0x9E26,0x9E2D,0x5440,0x4E2B,0x82BD,0x7259, + 0x869C,0x5D16,0x8859,0x6DAF,0x96C5,0x54D1,0x4E9A,0x8BB6, + 0x7109,0x54BD,0x9609,0x70DF,0x6DF9,0x76D0,0x4E25,0x7814, + 0x8712,0x5CA9,0x5EF6,0x8A00,0x989C,0x960E,0x708E,0x6CBF, + 0x5944,0x63A9,0x773C,0x884D,0x6F14,0x8273,0x5830,0x71D5, + 0x538C,0x781A,0x96C1,0x5501,0x5F66,0x7130,0x5BB4,0x8C1A, + 0x9A8C,0x6B83,0x592E,0x9E2F,0x79E7,0x6768,0x626C,0x4F6F, + 0x75A1,0x7F8A,0x6D0B,0x9633,0x6C27,0x4EF0,0x75D2,0x517B, + 0x6837,0x6F3E,0x9080,0x8170,0x5996,0x7476,0x8938,0x8939, + 0x893A,0x893B,0x893C,0x893D,0x893E,0x893F,0x8940,0x8942, + 0x8943,0x8945,0x8946,0x8947,0x8948,0x8949,0x894A,0x894B, + 0x894C,0x894D,0x894E,0x894F,0x8950,0x8951,0x8952,0x8953, + 0x8954,0x8955,0x8956,0x8957,0x8958,0x8959,0x895A,0x895B, + 0x895C,0x895D,0x8960,0x8961,0x8962,0x8963,0x8964,0x8965, + 0x8967,0x8968,0x8969,0x896A,0x896B,0x896C,0x896D,0x896E, + 0x896F,0x8970,0x8971,0x8972,0x8973,0x8974,0x8975,0x8976, + 0x8977,0x8978,0x8979,0x897A,0x897C,0x897D,0x897E,0x8980, + 0x8982,0x8984,0x8985,0x8987,0x8988,0x8989,0x898A,0x898B, + 0x898C,0x898D,0x898E,0x898F,0x8990,0x8991,0x8992,0x8993, + 0x8994,0x8995,0x8996,0x8997,0x8998,0x8999,0x899A,0x899B, + 0x899C,0x899D,0x899E,0x899F,0x89A0,0x89A1,0x6447,0x5C27, + 0x9065,0x7A91,0x8C23,0x59DA,0x54AC,0x8200,0x836F,0x8981, + 0x8000,0x6930,0x564E,0x8036,0x7237,0x91CE,0x51B6,0x4E5F, + 0x9875,0x6396,0x4E1A,0x53F6,0x66F3,0x814B,0x591C,0x6DB2, + 0x4E00,0x58F9,0x533B,0x63D6,0x94F1,0x4F9D,0x4F0A,0x8863, + 0x9890,0x5937,0x9057,0x79FB,0x4EEA,0x80F0,0x7591,0x6C82, + 0x5B9C,0x59E8,0x5F5D,0x6905,0x8681,0x501A,0x5DF2,0x4E59, + 0x77E3,0x4EE5,0x827A,0x6291,0x6613,0x9091,0x5C79,0x4EBF, + 0x5F79,0x81C6,0x9038,0x8084,0x75AB,0x4EA6,0x88D4,0x610F, + 0x6BC5,0x5FC6,0x4E49,0x76CA,0x6EA2,0x8BE3,0x8BAE,0x8C0A, + 0x8BD1,0x5F02,0x7FFC,0x7FCC,0x7ECE,0x8335,0x836B,0x56E0, + 0x6BB7,0x97F3,0x9634,0x59FB,0x541F,0x94F6,0x6DEB,0x5BC5, + 0x996E,0x5C39,0x5F15,0x9690,0x89A2,0x89A3,0x89A4,0x89A5, + 0x89A6,0x89A7,0x89A8,0x89A9,0x89AA,0x89AB,0x89AC,0x89AD, + 0x89AE,0x89AF,0x89B0,0x89B1,0x89B2,0x89B3,0x89B4,0x89B5, + 0x89B6,0x89B7,0x89B8,0x89B9,0x89BA,0x89BB,0x89BC,0x89BD, + 0x89BE,0x89BF,0x89C0,0x89C3,0x89CD,0x89D3,0x89D4,0x89D5, + 0x89D7,0x89D8,0x89D9,0x89DB,0x89DD,0x89DF,0x89E0,0x89E1, + 0x89E2,0x89E4,0x89E7,0x89E8,0x89E9,0x89EA,0x89EC,0x89ED, + 0x89EE,0x89F0,0x89F1,0x89F2,0x89F4,0x89F5,0x89F6,0x89F7, + 0x89F8,0x89F9,0x89FA,0x89FB,0x89FC,0x89FD,0x89FE,0x89FF, + 0x8A01,0x8A02,0x8A03,0x8A04,0x8A05,0x8A06,0x8A08,0x8A09, + 0x8A0A,0x8A0B,0x8A0C,0x8A0D,0x8A0E,0x8A0F,0x8A10,0x8A11, + 0x8A12,0x8A13,0x8A14,0x8A15,0x8A16,0x8A17,0x8A18,0x8A19, + 0x8A1A,0x8A1B,0x8A1C,0x8A1D,0x5370,0x82F1,0x6A31,0x5A74, + 0x9E70,0x5E94,0x7F28,0x83B9,0x8424,0x8425,0x8367,0x8747, + 0x8FCE,0x8D62,0x76C8,0x5F71,0x9896,0x786C,0x6620,0x54DF, + 0x62E5,0x4F63,0x81C3,0x75C8,0x5EB8,0x96CD,0x8E0A,0x86F9, + 0x548F,0x6CF3,0x6D8C,0x6C38,0x607F,0x52C7,0x7528,0x5E7D, + 0x4F18,0x60A0,0x5FE7,0x5C24,0x7531,0x90AE,0x94C0,0x72B9, + 0x6CB9,0x6E38,0x9149,0x6709,0x53CB,0x53F3,0x4F51,0x91C9, + 0x8BF1,0x53C8,0x5E7C,0x8FC2,0x6DE4,0x4E8E,0x76C2,0x6986, + 0x865E,0x611A,0x8206,0x4F59,0x4FDE,0x903E,0x9C7C,0x6109, + 0x6E1D,0x6E14,0x9685,0x4E88,0x5A31,0x96E8,0x4E0E,0x5C7F, + 0x79B9,0x5B87,0x8BED,0x7FBD,0x7389,0x57DF,0x828B,0x90C1, + 0x5401,0x9047,0x55BB,0x5CEA,0x5FA1,0x6108,0x6B32,0x72F1, + 0x80B2,0x8A89,0x8A1E,0x8A1F,0x8A20,0x8A21,0x8A22,0x8A23, + 0x8A24,0x8A25,0x8A26,0x8A27,0x8A28,0x8A29,0x8A2A,0x8A2B, + 0x8A2C,0x8A2D,0x8A2E,0x8A2F,0x8A30,0x8A31,0x8A32,0x8A33, + 0x8A34,0x8A35,0x8A36,0x8A37,0x8A38,0x8A39,0x8A3A,0x8A3B, + 0x8A3C,0x8A3D,0x8A3F,0x8A40,0x8A41,0x8A42,0x8A43,0x8A44, + 0x8A45,0x8A46,0x8A47,0x8A49,0x8A4A,0x8A4B,0x8A4C,0x8A4D, + 0x8A4E,0x8A4F,0x8A50,0x8A51,0x8A52,0x8A53,0x8A54,0x8A55, + 0x8A56,0x8A57,0x8A58,0x8A59,0x8A5A,0x8A5B,0x8A5C,0x8A5D, + 0x8A5E,0x8A5F,0x8A60,0x8A61,0x8A62,0x8A63,0x8A64,0x8A65, + 0x8A66,0x8A67,0x8A68,0x8A69,0x8A6A,0x8A6B,0x8A6C,0x8A6D, + 0x8A6E,0x8A6F,0x8A70,0x8A71,0x8A72,0x8A73,0x8A74,0x8A75, + 0x8A76,0x8A77,0x8A78,0x8A7A,0x8A7B,0x8A7C,0x8A7D,0x8A7E, + 0x8A7F,0x8A80,0x6D74,0x5BD3,0x88D5,0x9884,0x8C6B,0x9A6D, + 0x9E33,0x6E0A,0x51A4,0x5143,0x57A3,0x8881,0x539F,0x63F4, + 0x8F95,0x56ED,0x5458,0x5706,0x733F,0x6E90,0x7F18,0x8FDC, + 0x82D1,0x613F,0x6028,0x9662,0x66F0,0x7EA6,0x8D8A,0x8DC3, + 0x94A5,0x5CB3,0x7CA4,0x6708,0x60A6,0x9605,0x8018,0x4E91, + 0x90E7,0x5300,0x9668,0x5141,0x8FD0,0x8574,0x915D,0x6655, + 0x97F5,0x5B55,0x531D,0x7838,0x6742,0x683D,0x54C9,0x707E, + 0x5BB0,0x8F7D,0x518D,0x5728,0x54B1,0x6512,0x6682,0x8D5E, + 0x8D43,0x810F,0x846C,0x906D,0x7CDF,0x51FF,0x85FB,0x67A3, + 0x65E9,0x6FA1,0x86A4,0x8E81,0x566A,0x9020,0x7682,0x7076, + 0x71E5,0x8D23,0x62E9,0x5219,0x6CFD,0x8D3C,0x600E,0x589E, + 0x618E,0x66FE,0x8D60,0x624E,0x55B3,0x6E23,0x672D,0x8F67, + 0x8A81,0x8A82,0x8A83,0x8A84,0x8A85,0x8A86,0x8A87,0x8A88, + 0x8A8B,0x8A8C,0x8A8D,0x8A8E,0x8A8F,0x8A90,0x8A91,0x8A92, + 0x8A94,0x8A95,0x8A96,0x8A97,0x8A98,0x8A99,0x8A9A,0x8A9B, + 0x8A9C,0x8A9D,0x8A9E,0x8A9F,0x8AA0,0x8AA1,0x8AA2,0x8AA3, + 0x8AA4,0x8AA5,0x8AA6,0x8AA7,0x8AA8,0x8AA9,0x8AAA,0x8AAB, + 0x8AAC,0x8AAD,0x8AAE,0x8AAF,0x8AB0,0x8AB1,0x8AB2,0x8AB3, + 0x8AB4,0x8AB5,0x8AB6,0x8AB7,0x8AB8,0x8AB9,0x8ABA,0x8ABB, + 0x8ABC,0x8ABD,0x8ABE,0x8ABF,0x8AC0,0x8AC1,0x8AC2,0x8AC3, + 0x8AC4,0x8AC5,0x8AC6,0x8AC7,0x8AC8,0x8AC9,0x8ACA,0x8ACB, + 0x8ACC,0x8ACD,0x8ACE,0x8ACF,0x8AD0,0x8AD1,0x8AD2,0x8AD3, + 0x8AD4,0x8AD5,0x8AD6,0x8AD7,0x8AD8,0x8AD9,0x8ADA,0x8ADB, + 0x8ADC,0x8ADD,0x8ADE,0x8ADF,0x8AE0,0x8AE1,0x8AE2,0x8AE3, + 0x94E1,0x95F8,0x7728,0x6805,0x69A8,0x548B,0x4E4D,0x70B8, + 0x8BC8,0x6458,0x658B,0x5B85,0x7A84,0x503A,0x5BE8,0x77BB, + 0x6BE1,0x8A79,0x7C98,0x6CBE,0x76CF,0x65A9,0x8F97,0x5D2D, + 0x5C55,0x8638,0x6808,0x5360,0x6218,0x7AD9,0x6E5B,0x7EFD, + 0x6A1F,0x7AE0,0x5F70,0x6F33,0x5F20,0x638C,0x6DA8,0x6756, + 0x4E08,0x5E10,0x8D26,0x4ED7,0x80C0,0x7634,0x969C,0x62DB, + 0x662D,0x627E,0x6CBC,0x8D75,0x7167,0x7F69,0x5146,0x8087, + 0x53EC,0x906E,0x6298,0x54F2,0x86F0,0x8F99,0x8005,0x9517, + 0x8517,0x8FD9,0x6D59,0x73CD,0x659F,0x771F,0x7504,0x7827, + 0x81FB,0x8D1E,0x9488,0x4FA6,0x6795,0x75B9,0x8BCA,0x9707, + 0x632F,0x9547,0x9635,0x84B8,0x6323,0x7741,0x5F81,0x72F0, + 0x4E89,0x6014,0x6574,0x62EF,0x6B63,0x653F,0x8AE4,0x8AE5, + 0x8AE6,0x8AE7,0x8AE8,0x8AE9,0x8AEA,0x8AEB,0x8AEC,0x8AED, + 0x8AEE,0x8AEF,0x8AF0,0x8AF1,0x8AF2,0x8AF3,0x8AF4,0x8AF5, + 0x8AF6,0x8AF7,0x8AF8,0x8AF9,0x8AFA,0x8AFB,0x8AFC,0x8AFD, + 0x8AFE,0x8AFF,0x8B00,0x8B01,0x8B02,0x8B03,0x8B04,0x8B05, + 0x8B06,0x8B08,0x8B09,0x8B0A,0x8B0B,0x8B0C,0x8B0D,0x8B0E, + 0x8B0F,0x8B10,0x8B11,0x8B12,0x8B13,0x8B14,0x8B15,0x8B16, + 0x8B17,0x8B18,0x8B19,0x8B1A,0x8B1B,0x8B1C,0x8B1D,0x8B1E, + 0x8B1F,0x8B20,0x8B21,0x8B22,0x8B23,0x8B24,0x8B25,0x8B27, + 0x8B28,0x8B29,0x8B2A,0x8B2B,0x8B2C,0x8B2D,0x8B2E,0x8B2F, + 0x8B30,0x8B31,0x8B32,0x8B33,0x8B34,0x8B35,0x8B36,0x8B37, + 0x8B38,0x8B39,0x8B3A,0x8B3B,0x8B3C,0x8B3D,0x8B3E,0x8B3F, + 0x8B40,0x8B41,0x8B42,0x8B43,0x8B44,0x8B45,0x5E27,0x75C7, + 0x90D1,0x8BC1,0x829D,0x679D,0x652F,0x5431,0x8718,0x77E5, + 0x80A2,0x8102,0x6C41,0x4E4B,0x7EC7,0x804C,0x76F4,0x690D, + 0x6B96,0x6267,0x503C,0x4F84,0x5740,0x6307,0x6B62,0x8DBE, + 0x53EA,0x65E8,0x7EB8,0x5FD7,0x631A,0x63B7,0x81F3,0x81F4, + 0x7F6E,0x5E1C,0x5CD9,0x5236,0x667A,0x79E9,0x7A1A,0x8D28, + 0x7099,0x75D4,0x6EDE,0x6CBB,0x7A92,0x4E2D,0x76C5,0x5FE0, + 0x949F,0x8877,0x7EC8,0x79CD,0x80BF,0x91CD,0x4EF2,0x4F17, + 0x821F,0x5468,0x5DDE,0x6D32,0x8BCC,0x7CA5,0x8F74,0x8098, + 0x5E1A,0x5492,0x76B1,0x5B99,0x663C,0x9AA4,0x73E0,0x682A, + 0x86DB,0x6731,0x732A,0x8BF8,0x8BDB,0x9010,0x7AF9,0x70DB, + 0x716E,0x62C4,0x77A9,0x5631,0x4E3B,0x8457,0x67F1,0x52A9, + 0x86C0,0x8D2E,0x94F8,0x7B51,0x8B46,0x8B47,0x8B48,0x8B49, + 0x8B4A,0x8B4B,0x8B4C,0x8B4D,0x8B4E,0x8B4F,0x8B50,0x8B51, + 0x8B52,0x8B53,0x8B54,0x8B55,0x8B56,0x8B57,0x8B58,0x8B59, + 0x8B5A,0x8B5B,0x8B5C,0x8B5D,0x8B5E,0x8B5F,0x8B60,0x8B61, + 0x8B62,0x8B63,0x8B64,0x8B65,0x8B67,0x8B68,0x8B69,0x8B6A, + 0x8B6B,0x8B6D,0x8B6E,0x8B6F,0x8B70,0x8B71,0x8B72,0x8B73, + 0x8B74,0x8B75,0x8B76,0x8B77,0x8B78,0x8B79,0x8B7A,0x8B7B, + 0x8B7C,0x8B7D,0x8B7E,0x8B7F,0x8B80,0x8B81,0x8B82,0x8B83, + 0x8B84,0x8B85,0x8B86,0x8B87,0x8B88,0x8B89,0x8B8A,0x8B8B, + 0x8B8C,0x8B8D,0x8B8E,0x8B8F,0x8B90,0x8B91,0x8B92,0x8B93, + 0x8B94,0x8B95,0x8B96,0x8B97,0x8B98,0x8B99,0x8B9A,0x8B9B, + 0x8B9C,0x8B9D,0x8B9E,0x8B9F,0x8BAC,0x8BB1,0x8BBB,0x8BC7, + 0x8BD0,0x8BEA,0x8C09,0x8C1E,0x4F4F,0x6CE8,0x795D,0x9A7B, + 0x6293,0x722A,0x62FD,0x4E13,0x7816,0x8F6C,0x64B0,0x8D5A, + 0x7BC6,0x6869,0x5E84,0x88C5,0x5986,0x649E,0x58EE,0x72B6, + 0x690E,0x9525,0x8FFD,0x8D58,0x5760,0x7F00,0x8C06,0x51C6, + 0x6349,0x62D9,0x5353,0x684C,0x7422,0x8301,0x914C,0x5544, + 0x7740,0x707C,0x6D4A,0x5179,0x54A8,0x8D44,0x59FF,0x6ECB, + 0x6DC4,0x5B5C,0x7D2B,0x4ED4,0x7C7D,0x6ED3,0x5B50,0x81EA, + 0x6E0D,0x5B57,0x9B03,0x68D5,0x8E2A,0x5B97,0x7EFC,0x603B, + 0x7EB5,0x90B9,0x8D70,0x594F,0x63CD,0x79DF,0x8DB3,0x5352, + 0x65CF,0x7956,0x8BC5,0x963B,0x7EC4,0x94BB,0x7E82,0x5634, + 0x9189,0x6700,0x7F6A,0x5C0A,0x9075,0x6628,0x5DE6,0x4F50, + 0x67DE,0x505A,0x4F5C,0x5750,0x5EA7,0xE810,0xE811,0xE812, + 0xE813,0xE814,0x8C38,0x8C39,0x8C3A,0x8C3B,0x8C3C,0x8C3D, + 0x8C3E,0x8C3F,0x8C40,0x8C42,0x8C43,0x8C44,0x8C45,0x8C48, + 0x8C4A,0x8C4B,0x8C4D,0x8C4E,0x8C4F,0x8C50,0x8C51,0x8C52, + 0x8C53,0x8C54,0x8C56,0x8C57,0x8C58,0x8C59,0x8C5B,0x8C5C, + 0x8C5D,0x8C5E,0x8C5F,0x8C60,0x8C63,0x8C64,0x8C65,0x8C66, + 0x8C67,0x8C68,0x8C69,0x8C6C,0x8C6D,0x8C6E,0x8C6F,0x8C70, + 0x8C71,0x8C72,0x8C74,0x8C75,0x8C76,0x8C77,0x8C7B,0x8C7C, + 0x8C7D,0x8C7E,0x8C7F,0x8C80,0x8C81,0x8C83,0x8C84,0x8C86, + 0x8C87,0x8C88,0x8C8B,0x8C8D,0x8C8E,0x8C8F,0x8C90,0x8C91, + 0x8C92,0x8C93,0x8C95,0x8C96,0x8C97,0x8C99,0x8C9A,0x8C9B, + 0x8C9C,0x8C9D,0x8C9E,0x8C9F,0x8CA0,0x8CA1,0x8CA2,0x8CA3, + 0x8CA4,0x8CA5,0x8CA6,0x8CA7,0x8CA8,0x8CA9,0x8CAA,0x8CAB, + 0x8CAC,0x8CAD,0x4E8D,0x4E0C,0x5140,0x4E10,0x5EFF,0x5345, + 0x4E15,0x4E98,0x4E1E,0x9B32,0x5B6C,0x5669,0x4E28,0x79BA, + 0x4E3F,0x5315,0x4E47,0x592D,0x723B,0x536E,0x6C10,0x56DF, + 0x80E4,0x9997,0x6BD3,0x777E,0x9F17,0x4E36,0x4E9F,0x9F10, + 0x4E5C,0x4E69,0x4E93,0x8288,0x5B5B,0x556C,0x560F,0x4EC4, + 0x538D,0x539D,0x53A3,0x53A5,0x53AE,0x9765,0x8D5D,0x531A, + 0x53F5,0x5326,0x532E,0x533E,0x8D5C,0x5366,0x5363,0x5202, + 0x5208,0x520E,0x522D,0x5233,0x523F,0x5240,0x524C,0x525E, + 0x5261,0x525C,0x84AF,0x527D,0x5282,0x5281,0x5290,0x5293, + 0x5182,0x7F54,0x4EBB,0x4EC3,0x4EC9,0x4EC2,0x4EE8,0x4EE1, + 0x4EEB,0x4EDE,0x4F1B,0x4EF3,0x4F22,0x4F64,0x4EF5,0x4F25, + 0x4F27,0x4F09,0x4F2B,0x4F5E,0x4F67,0x6538,0x4F5A,0x4F5D, + 0x8CAE,0x8CAF,0x8CB0,0x8CB1,0x8CB2,0x8CB3,0x8CB4,0x8CB5, + 0x8CB6,0x8CB7,0x8CB8,0x8CB9,0x8CBA,0x8CBB,0x8CBC,0x8CBD, + 0x8CBE,0x8CBF,0x8CC0,0x8CC1,0x8CC2,0x8CC3,0x8CC4,0x8CC5, + 0x8CC6,0x8CC7,0x8CC8,0x8CC9,0x8CCA,0x8CCB,0x8CCC,0x8CCD, + 0x8CCE,0x8CCF,0x8CD0,0x8CD1,0x8CD2,0x8CD3,0x8CD4,0x8CD5, + 0x8CD6,0x8CD7,0x8CD8,0x8CD9,0x8CDA,0x8CDB,0x8CDC,0x8CDD, + 0x8CDE,0x8CDF,0x8CE0,0x8CE1,0x8CE2,0x8CE3,0x8CE4,0x8CE5, + 0x8CE6,0x8CE7,0x8CE8,0x8CE9,0x8CEA,0x8CEB,0x8CEC,0x8CED, + 0x8CEE,0x8CEF,0x8CF0,0x8CF1,0x8CF2,0x8CF3,0x8CF4,0x8CF5, + 0x8CF6,0x8CF7,0x8CF8,0x8CF9,0x8CFA,0x8CFB,0x8CFC,0x8CFD, + 0x8CFE,0x8CFF,0x8D00,0x8D01,0x8D02,0x8D03,0x8D04,0x8D05, + 0x8D06,0x8D07,0x8D08,0x8D09,0x8D0A,0x8D0B,0x8D0C,0x8D0D, + 0x4F5F,0x4F57,0x4F32,0x4F3D,0x4F76,0x4F74,0x4F91,0x4F89, + 0x4F83,0x4F8F,0x4F7E,0x4F7B,0x4FAA,0x4F7C,0x4FAC,0x4F94, + 0x4FE6,0x4FE8,0x4FEA,0x4FC5,0x4FDA,0x4FE3,0x4FDC,0x4FD1, + 0x4FDF,0x4FF8,0x5029,0x504C,0x4FF3,0x502C,0x500F,0x502E, + 0x502D,0x4FFE,0x501C,0x500C,0x5025,0x5028,0x507E,0x5043, + 0x5055,0x5048,0x504E,0x506C,0x507B,0x50A5,0x50A7,0x50A9, + 0x50BA,0x50D6,0x5106,0x50ED,0x50EC,0x50E6,0x50EE,0x5107, + 0x510B,0x4EDD,0x6C3D,0x4F58,0x4F65,0x4FCE,0x9FA0,0x6C46, + 0x7C74,0x516E,0x5DFD,0x9EC9,0x9998,0x5181,0x5914,0x52F9, + 0x530D,0x8A07,0x5310,0x51EB,0x5919,0x5155,0x4EA0,0x5156, + 0x4EB3,0x886E,0x88A4,0x4EB5,0x8114,0x88D2,0x7980,0x5B34, + 0x8803,0x7FB8,0x51AB,0x51B1,0x51BD,0x51BC,0x8D0E,0x8D0F, + 0x8D10,0x8D11,0x8D12,0x8D13,0x8D14,0x8D15,0x8D16,0x8D17, + 0x8D18,0x8D19,0x8D1A,0x8D1B,0x8D1C,0x8D20,0x8D51,0x8D52, + 0x8D57,0x8D5F,0x8D65,0x8D68,0x8D69,0x8D6A,0x8D6C,0x8D6E, + 0x8D6F,0x8D71,0x8D72,0x8D78,0x8D79,0x8D7A,0x8D7B,0x8D7C, + 0x8D7D,0x8D7E,0x8D7F,0x8D80,0x8D82,0x8D83,0x8D86,0x8D87, + 0x8D88,0x8D89,0x8D8C,0x8D8D,0x8D8E,0x8D8F,0x8D90,0x8D92, + 0x8D93,0x8D95,0x8D96,0x8D97,0x8D98,0x8D99,0x8D9A,0x8D9B, + 0x8D9C,0x8D9D,0x8D9E,0x8DA0,0x8DA1,0x8DA2,0x8DA4,0x8DA5, + 0x8DA6,0x8DA7,0x8DA8,0x8DA9,0x8DAA,0x8DAB,0x8DAC,0x8DAD, + 0x8DAE,0x8DAF,0x8DB0,0x8DB2,0x8DB6,0x8DB7,0x8DB9,0x8DBB, + 0x8DBD,0x8DC0,0x8DC1,0x8DC2,0x8DC5,0x8DC7,0x8DC8,0x8DC9, + 0x8DCA,0x8DCD,0x8DD0,0x8DD2,0x8DD3,0x8DD4,0x51C7,0x5196, + 0x51A2,0x51A5,0x8BA0,0x8BA6,0x8BA7,0x8BAA,0x8BB4,0x8BB5, + 0x8BB7,0x8BC2,0x8BC3,0x8BCB,0x8BCF,0x8BCE,0x8BD2,0x8BD3, + 0x8BD4,0x8BD6,0x8BD8,0x8BD9,0x8BDC,0x8BDF,0x8BE0,0x8BE4, + 0x8BE8,0x8BE9,0x8BEE,0x8BF0,0x8BF3,0x8BF6,0x8BF9,0x8BFC, + 0x8BFF,0x8C00,0x8C02,0x8C04,0x8C07,0x8C0C,0x8C0F,0x8C11, + 0x8C12,0x8C14,0x8C15,0x8C16,0x8C19,0x8C1B,0x8C18,0x8C1D, + 0x8C1F,0x8C20,0x8C21,0x8C25,0x8C27,0x8C2A,0x8C2B,0x8C2E, + 0x8C2F,0x8C32,0x8C33,0x8C35,0x8C36,0x5369,0x537A,0x961D, + 0x9622,0x9621,0x9631,0x962A,0x963D,0x963C,0x9642,0x9649, + 0x9654,0x965F,0x9667,0x966C,0x9672,0x9674,0x9688,0x968D, + 0x9697,0x96B0,0x9097,0x909B,0x909D,0x9099,0x90AC,0x90A1, + 0x90B4,0x90B3,0x90B6,0x90BA,0x8DD5,0x8DD8,0x8DD9,0x8DDC, + 0x8DE0,0x8DE1,0x8DE2,0x8DE5,0x8DE6,0x8DE7,0x8DE9,0x8DED, + 0x8DEE,0x8DF0,0x8DF1,0x8DF2,0x8DF4,0x8DF6,0x8DFC,0x8DFE, + 0x8DFF,0x8E00,0x8E01,0x8E02,0x8E03,0x8E04,0x8E06,0x8E07, + 0x8E08,0x8E0B,0x8E0D,0x8E0E,0x8E10,0x8E11,0x8E12,0x8E13, + 0x8E15,0x8E16,0x8E17,0x8E18,0x8E19,0x8E1A,0x8E1B,0x8E1C, + 0x8E20,0x8E21,0x8E24,0x8E25,0x8E26,0x8E27,0x8E28,0x8E2B, + 0x8E2D,0x8E30,0x8E32,0x8E33,0x8E34,0x8E36,0x8E37,0x8E38, + 0x8E3B,0x8E3C,0x8E3E,0x8E3F,0x8E43,0x8E45,0x8E46,0x8E4C, + 0x8E4D,0x8E4E,0x8E4F,0x8E50,0x8E53,0x8E54,0x8E55,0x8E56, + 0x8E57,0x8E58,0x8E5A,0x8E5B,0x8E5C,0x8E5D,0x8E5E,0x8E5F, + 0x8E60,0x8E61,0x8E62,0x8E63,0x8E64,0x8E65,0x8E67,0x8E68, + 0x8E6A,0x8E6B,0x8E6E,0x8E71,0x90B8,0x90B0,0x90CF,0x90C5, + 0x90BE,0x90D0,0x90C4,0x90C7,0x90D3,0x90E6,0x90E2,0x90DC, + 0x90D7,0x90DB,0x90EB,0x90EF,0x90FE,0x9104,0x9122,0x911E, + 0x9123,0x9131,0x912F,0x9139,0x9143,0x9146,0x520D,0x5942, + 0x52A2,0x52AC,0x52AD,0x52BE,0x54FF,0x52D0,0x52D6,0x52F0, + 0x53DF,0x71EE,0x77CD,0x5EF4,0x51F5,0x51FC,0x9B2F,0x53B6, + 0x5F01,0x755A,0x5DEF,0x574C,0x57A9,0x57A1,0x587E,0x58BC, + 0x58C5,0x58D1,0x5729,0x572C,0x572A,0x5733,0x5739,0x572E, + 0x572F,0x575C,0x573B,0x5742,0x5769,0x5785,0x576B,0x5786, + 0x577C,0x577B,0x5768,0x576D,0x5776,0x5773,0x57AD,0x57A4, + 0x578C,0x57B2,0x57CF,0x57A7,0x57B4,0x5793,0x57A0,0x57D5, + 0x57D8,0x57DA,0x57D9,0x57D2,0x57B8,0x57F4,0x57EF,0x57F8, + 0x57E4,0x57DD,0x8E73,0x8E75,0x8E77,0x8E78,0x8E79,0x8E7A, + 0x8E7B,0x8E7D,0x8E7E,0x8E80,0x8E82,0x8E83,0x8E84,0x8E86, + 0x8E88,0x8E89,0x8E8A,0x8E8B,0x8E8C,0x8E8D,0x8E8E,0x8E91, + 0x8E92,0x8E93,0x8E95,0x8E96,0x8E97,0x8E98,0x8E99,0x8E9A, + 0x8E9B,0x8E9D,0x8E9F,0x8EA0,0x8EA1,0x8EA2,0x8EA3,0x8EA4, + 0x8EA5,0x8EA6,0x8EA7,0x8EA8,0x8EA9,0x8EAA,0x8EAD,0x8EAE, + 0x8EB0,0x8EB1,0x8EB3,0x8EB4,0x8EB5,0x8EB6,0x8EB7,0x8EB8, + 0x8EB9,0x8EBB,0x8EBC,0x8EBD,0x8EBE,0x8EBF,0x8EC0,0x8EC1, + 0x8EC2,0x8EC3,0x8EC4,0x8EC5,0x8EC6,0x8EC7,0x8EC8,0x8EC9, + 0x8ECA,0x8ECB,0x8ECC,0x8ECD,0x8ECF,0x8ED0,0x8ED1,0x8ED2, + 0x8ED3,0x8ED4,0x8ED5,0x8ED6,0x8ED7,0x8ED8,0x8ED9,0x8EDA, + 0x8EDB,0x8EDC,0x8EDD,0x8EDE,0x8EDF,0x8EE0,0x8EE1,0x8EE2, + 0x8EE3,0x8EE4,0x580B,0x580D,0x57FD,0x57ED,0x5800,0x581E, + 0x5819,0x5844,0x5820,0x5865,0x586C,0x5881,0x5889,0x589A, + 0x5880,0x99A8,0x9F19,0x61FF,0x8279,0x827D,0x827F,0x828F, + 0x828A,0x82A8,0x8284,0x828E,0x8291,0x8297,0x8299,0x82AB, + 0x82B8,0x82BE,0x82B0,0x82C8,0x82CA,0x82E3,0x8298,0x82B7, + 0x82AE,0x82CB,0x82CC,0x82C1,0x82A9,0x82B4,0x82A1,0x82AA, + 0x829F,0x82C4,0x82CE,0x82A4,0x82E1,0x8309,0x82F7,0x82E4, + 0x830F,0x8307,0x82DC,0x82F4,0x82D2,0x82D8,0x830C,0x82FB, + 0x82D3,0x8311,0x831A,0x8306,0x8314,0x8315,0x82E0,0x82D5, + 0x831C,0x8351,0x835B,0x835C,0x8308,0x8392,0x833C,0x8334, + 0x8331,0x839B,0x835E,0x832F,0x834F,0x8347,0x8343,0x835F, + 0x8340,0x8317,0x8360,0x832D,0x833A,0x8333,0x8366,0x8365, + 0x8EE5,0x8EE6,0x8EE7,0x8EE8,0x8EE9,0x8EEA,0x8EEB,0x8EEC, + 0x8EED,0x8EEE,0x8EEF,0x8EF0,0x8EF1,0x8EF2,0x8EF3,0x8EF4, + 0x8EF5,0x8EF6,0x8EF7,0x8EF8,0x8EF9,0x8EFA,0x8EFB,0x8EFC, + 0x8EFD,0x8EFE,0x8EFF,0x8F00,0x8F01,0x8F02,0x8F03,0x8F04, + 0x8F05,0x8F06,0x8F07,0x8F08,0x8F09,0x8F0A,0x8F0B,0x8F0C, + 0x8F0D,0x8F0E,0x8F0F,0x8F10,0x8F11,0x8F12,0x8F13,0x8F14, + 0x8F15,0x8F16,0x8F17,0x8F18,0x8F19,0x8F1A,0x8F1B,0x8F1C, + 0x8F1D,0x8F1E,0x8F1F,0x8F20,0x8F21,0x8F22,0x8F23,0x8F24, + 0x8F25,0x8F26,0x8F27,0x8F28,0x8F29,0x8F2A,0x8F2B,0x8F2C, + 0x8F2D,0x8F2E,0x8F2F,0x8F30,0x8F31,0x8F32,0x8F33,0x8F34, + 0x8F35,0x8F36,0x8F37,0x8F38,0x8F39,0x8F3A,0x8F3B,0x8F3C, + 0x8F3D,0x8F3E,0x8F3F,0x8F40,0x8F41,0x8F42,0x8F43,0x8F44, + 0x8368,0x831B,0x8369,0x836C,0x836A,0x836D,0x836E,0x83B0, + 0x8378,0x83B3,0x83B4,0x83A0,0x83AA,0x8393,0x839C,0x8385, + 0x837C,0x83B6,0x83A9,0x837D,0x83B8,0x837B,0x8398,0x839E, + 0x83A8,0x83BA,0x83BC,0x83C1,0x8401,0x83E5,0x83D8,0x5807, + 0x8418,0x840B,0x83DD,0x83FD,0x83D6,0x841C,0x8438,0x8411, + 0x8406,0x83D4,0x83DF,0x840F,0x8403,0x83F8,0x83F9,0x83EA, + 0x83C5,0x83C0,0x8426,0x83F0,0x83E1,0x845C,0x8451,0x845A, + 0x8459,0x8473,0x8487,0x8488,0x847A,0x8489,0x8478,0x843C, + 0x8446,0x8469,0x8476,0x848C,0x848E,0x8431,0x846D,0x84C1, + 0x84CD,0x84D0,0x84E6,0x84BD,0x84D3,0x84CA,0x84BF,0x84BA, + 0x84E0,0x84A1,0x84B9,0x84B4,0x8497,0x84E5,0x84E3,0x850C, + 0x750D,0x8538,0x84F0,0x8539,0x851F,0x853A,0x8F45,0x8F46, + 0x8F47,0x8F48,0x8F49,0x8F4A,0x8F4B,0x8F4C,0x8F4D,0x8F4E, + 0x8F4F,0x8F50,0x8F51,0x8F52,0x8F53,0x8F54,0x8F55,0x8F56, + 0x8F57,0x8F58,0x8F59,0x8F5A,0x8F5B,0x8F5C,0x8F5D,0x8F5E, + 0x8F5F,0x8F60,0x8F61,0x8F62,0x8F63,0x8F64,0x8F65,0x8F6A, + 0x8F80,0x8F8C,0x8F92,0x8F9D,0x8FA0,0x8FA1,0x8FA2,0x8FA4, + 0x8FA5,0x8FA6,0x8FA7,0x8FAA,0x8FAC,0x8FAD,0x8FAE,0x8FAF, + 0x8FB2,0x8FB3,0x8FB4,0x8FB5,0x8FB7,0x8FB8,0x8FBA,0x8FBB, + 0x8FBC,0x8FBF,0x8FC0,0x8FC3,0x8FC6,0x8FC9,0x8FCA,0x8FCB, + 0x8FCC,0x8FCD,0x8FCF,0x8FD2,0x8FD6,0x8FD7,0x8FDA,0x8FE0, + 0x8FE1,0x8FE3,0x8FE7,0x8FEC,0x8FEF,0x8FF1,0x8FF2,0x8FF4, + 0x8FF5,0x8FF6,0x8FFA,0x8FFB,0x8FFC,0x8FFE,0x8FFF,0x9007, + 0x9008,0x900C,0x900E,0x9013,0x9015,0x9018,0x8556,0x853B, + 0x84FF,0x84FC,0x8559,0x8548,0x8568,0x8564,0x855E,0x857A, + 0x77A2,0x8543,0x8572,0x857B,0x85A4,0x85A8,0x8587,0x858F, + 0x8579,0x85AE,0x859C,0x8585,0x85B9,0x85B7,0x85B0,0x85D3, + 0x85C1,0x85DC,0x85FF,0x8627,0x8605,0x8629,0x8616,0x863C, + 0x5EFE,0x5F08,0x593C,0x5941,0x8037,0x5955,0x595A,0x5958, + 0x530F,0x5C22,0x5C25,0x5C2C,0x5C34,0x624C,0x626A,0x629F, + 0x62BB,0x62CA,0x62DA,0x62D7,0x62EE,0x6322,0x62F6,0x6339, + 0x634B,0x6343,0x63AD,0x63F6,0x6371,0x637A,0x638E,0x63B4, + 0x636D,0x63AC,0x638A,0x6369,0x63AE,0x63BC,0x63F2,0x63F8, + 0x63E0,0x63FF,0x63C4,0x63DE,0x63CE,0x6452,0x63C6,0x63BE, + 0x6445,0x6441,0x640B,0x641B,0x6420,0x640C,0x6426,0x6421, + 0x645E,0x6484,0x646D,0x6496,0x9019,0x901C,0x9023,0x9024, + 0x9025,0x9027,0x9028,0x9029,0x902A,0x902B,0x902C,0x9030, + 0x9031,0x9032,0x9033,0x9034,0x9037,0x9039,0x903A,0x903D, + 0x903F,0x9040,0x9043,0x9045,0x9046,0x9048,0x9049,0x904A, + 0x904B,0x904C,0x904E,0x9054,0x9055,0x9056,0x9059,0x905A, + 0x905C,0x905D,0x905E,0x905F,0x9060,0x9061,0x9064,0x9066, + 0x9067,0x9069,0x906A,0x906B,0x906C,0x906F,0x9070,0x9071, + 0x9072,0x9073,0x9076,0x9077,0x9078,0x9079,0x907A,0x907B, + 0x907C,0x907E,0x9081,0x9084,0x9085,0x9086,0x9087,0x9089, + 0x908A,0x908C,0x908D,0x908E,0x908F,0x9090,0x9092,0x9094, + 0x9096,0x9098,0x909A,0x909C,0x909E,0x909F,0x90A0,0x90A4, + 0x90A5,0x90A7,0x90A8,0x90A9,0x90AB,0x90AD,0x90B2,0x90B7, + 0x90BC,0x90BD,0x90BF,0x90C0,0x647A,0x64B7,0x64B8,0x6499, + 0x64BA,0x64C0,0x64D0,0x64D7,0x64E4,0x64E2,0x6509,0x6525, + 0x652E,0x5F0B,0x5FD2,0x7519,0x5F11,0x535F,0x53F1,0x53FD, + 0x53E9,0x53E8,0x53FB,0x5412,0x5416,0x5406,0x544B,0x5452, + 0x5453,0x5454,0x5456,0x5443,0x5421,0x5457,0x5459,0x5423, + 0x5432,0x5482,0x5494,0x5477,0x5471,0x5464,0x549A,0x549B, + 0x5484,0x5476,0x5466,0x549D,0x54D0,0x54AD,0x54C2,0x54B4, + 0x54D2,0x54A7,0x54A6,0x54D3,0x54D4,0x5472,0x54A3,0x54D5, + 0x54BB,0x54BF,0x54CC,0x54D9,0x54DA,0x54DC,0x54A9,0x54AA, + 0x54A4,0x54DD,0x54CF,0x54DE,0x551B,0x54E7,0x5520,0x54FD, + 0x5514,0x54F3,0x5522,0x5523,0x550F,0x5511,0x5527,0x552A, + 0x5567,0x558F,0x55B5,0x5549,0x556D,0x5541,0x5555,0x553F, + 0x5550,0x553C,0x90C2,0x90C3,0x90C6,0x90C8,0x90C9,0x90CB, + 0x90CC,0x90CD,0x90D2,0x90D4,0x90D5,0x90D6,0x90D8,0x90D9, + 0x90DA,0x90DE,0x90DF,0x90E0,0x90E3,0x90E4,0x90E5,0x90E9, + 0x90EA,0x90EC,0x90EE,0x90F0,0x90F1,0x90F2,0x90F3,0x90F5, + 0x90F6,0x90F7,0x90F9,0x90FA,0x90FB,0x90FC,0x90FF,0x9100, + 0x9101,0x9103,0x9105,0x9106,0x9107,0x9108,0x9109,0x910A, + 0x910B,0x910C,0x910D,0x910E,0x910F,0x9110,0x9111,0x9112, + 0x9113,0x9114,0x9115,0x9116,0x9117,0x9118,0x911A,0x911B, + 0x911C,0x911D,0x911F,0x9120,0x9121,0x9124,0x9125,0x9126, + 0x9127,0x9128,0x9129,0x912A,0x912B,0x912C,0x912D,0x912E, + 0x9130,0x9132,0x9133,0x9134,0x9135,0x9136,0x9137,0x9138, + 0x913A,0x913B,0x913C,0x913D,0x913E,0x913F,0x9140,0x9141, + 0x9142,0x9144,0x5537,0x5556,0x5575,0x5576,0x5577,0x5533, + 0x5530,0x555C,0x558B,0x55D2,0x5583,0x55B1,0x55B9,0x5588, + 0x5581,0x559F,0x557E,0x55D6,0x5591,0x557B,0x55DF,0x55BD, + 0x55BE,0x5594,0x5599,0x55EA,0x55F7,0x55C9,0x561F,0x55D1, + 0x55EB,0x55EC,0x55D4,0x55E6,0x55DD,0x55C4,0x55EF,0x55E5, + 0x55F2,0x55F3,0x55CC,0x55CD,0x55E8,0x55F5,0x55E4,0x8F94, + 0x561E,0x5608,0x560C,0x5601,0x5624,0x5623,0x55FE,0x5600, + 0x5627,0x562D,0x5658,0x5639,0x5657,0x562C,0x564D,0x5662, + 0x5659,0x565C,0x564C,0x5654,0x5686,0x5664,0x5671,0x566B, + 0x567B,0x567C,0x5685,0x5693,0x56AF,0x56D4,0x56D7,0x56DD, + 0x56E1,0x56F5,0x56EB,0x56F9,0x56FF,0x5704,0x570A,0x5709, + 0x571C,0x5E0F,0x5E19,0x5E14,0x5E11,0x5E31,0x5E3B,0x5E3C, + 0x9145,0x9147,0x9148,0x9151,0x9153,0x9154,0x9155,0x9156, + 0x9158,0x9159,0x915B,0x915C,0x915F,0x9160,0x9166,0x9167, + 0x9168,0x916B,0x916D,0x9173,0x917A,0x917B,0x917C,0x9180, + 0x9181,0x9182,0x9183,0x9184,0x9186,0x9188,0x918A,0x918E, + 0x918F,0x9193,0x9194,0x9195,0x9196,0x9197,0x9198,0x9199, + 0x919C,0x919D,0x919E,0x919F,0x91A0,0x91A1,0x91A4,0x91A5, + 0x91A6,0x91A7,0x91A8,0x91A9,0x91AB,0x91AC,0x91B0,0x91B1, + 0x91B2,0x91B3,0x91B6,0x91B7,0x91B8,0x91B9,0x91BB,0x91BC, + 0x91BD,0x91BE,0x91BF,0x91C0,0x91C1,0x91C2,0x91C3,0x91C4, + 0x91C5,0x91C6,0x91C8,0x91CB,0x91D0,0x91D2,0x91D3,0x91D4, + 0x91D5,0x91D6,0x91D7,0x91D8,0x91D9,0x91DA,0x91DB,0x91DD, + 0x91DE,0x91DF,0x91E0,0x91E1,0x91E2,0x91E3,0x91E4,0x91E5, + 0x5E37,0x5E44,0x5E54,0x5E5B,0x5E5E,0x5E61,0x5C8C,0x5C7A, + 0x5C8D,0x5C90,0x5C96,0x5C88,0x5C98,0x5C99,0x5C91,0x5C9A, + 0x5C9C,0x5CB5,0x5CA2,0x5CBD,0x5CAC,0x5CAB,0x5CB1,0x5CA3, + 0x5CC1,0x5CB7,0x5CC4,0x5CD2,0x5CE4,0x5CCB,0x5CE5,0x5D02, + 0x5D03,0x5D27,0x5D26,0x5D2E,0x5D24,0x5D1E,0x5D06,0x5D1B, + 0x5D58,0x5D3E,0x5D34,0x5D3D,0x5D6C,0x5D5B,0x5D6F,0x5D5D, + 0x5D6B,0x5D4B,0x5D4A,0x5D69,0x5D74,0x5D82,0x5D99,0x5D9D, + 0x8C73,0x5DB7,0x5DC5,0x5F73,0x5F77,0x5F82,0x5F87,0x5F89, + 0x5F8C,0x5F95,0x5F99,0x5F9C,0x5FA8,0x5FAD,0x5FB5,0x5FBC, + 0x8862,0x5F61,0x72AD,0x72B0,0x72B4,0x72B7,0x72B8,0x72C3, + 0x72C1,0x72CE,0x72CD,0x72D2,0x72E8,0x72EF,0x72E9,0x72F2, + 0x72F4,0x72F7,0x7301,0x72F3,0x7303,0x72FA,0x91E6,0x91E7, + 0x91E8,0x91E9,0x91EA,0x91EB,0x91EC,0x91ED,0x91EE,0x91EF, + 0x91F0,0x91F1,0x91F2,0x91F3,0x91F4,0x91F5,0x91F6,0x91F7, + 0x91F8,0x91F9,0x91FA,0x91FB,0x91FC,0x91FD,0x91FE,0x91FF, + 0x9200,0x9201,0x9202,0x9203,0x9204,0x9205,0x9206,0x9207, + 0x9208,0x9209,0x920A,0x920B,0x920C,0x920D,0x920E,0x920F, + 0x9210,0x9211,0x9212,0x9213,0x9214,0x9215,0x9216,0x9217, + 0x9218,0x9219,0x921A,0x921B,0x921C,0x921D,0x921E,0x921F, + 0x9220,0x9221,0x9222,0x9223,0x9224,0x9225,0x9226,0x9227, + 0x9228,0x9229,0x922A,0x922B,0x922C,0x922D,0x922E,0x922F, + 0x9230,0x9231,0x9232,0x9233,0x9234,0x9235,0x9236,0x9237, + 0x9238,0x9239,0x923A,0x923B,0x923C,0x923D,0x923E,0x923F, + 0x9240,0x9241,0x9242,0x9243,0x9244,0x9245,0x72FB,0x7317, + 0x7313,0x7321,0x730A,0x731E,0x731D,0x7315,0x7322,0x7339, + 0x7325,0x732C,0x7338,0x7331,0x7350,0x734D,0x7357,0x7360, + 0x736C,0x736F,0x737E,0x821B,0x5925,0x98E7,0x5924,0x5902, + 0x9963,0x9967,0x9968,0x9969,0x996A,0x996B,0x996C,0x9974, + 0x9977,0x997D,0x9980,0x9984,0x9987,0x998A,0x998D,0x9990, + 0x9991,0x9993,0x9994,0x9995,0x5E80,0x5E91,0x5E8B,0x5E96, + 0x5EA5,0x5EA0,0x5EB9,0x5EB5,0x5EBE,0x5EB3,0x8D53,0x5ED2, + 0x5ED1,0x5EDB,0x5EE8,0x5EEA,0x81BA,0x5FC4,0x5FC9,0x5FD6, + 0x5FCF,0x6003,0x5FEE,0x6004,0x5FE1,0x5FE4,0x5FFE,0x6005, + 0x6006,0x5FEA,0x5FED,0x5FF8,0x6019,0x6035,0x6026,0x601B, + 0x600F,0x600D,0x6029,0x602B,0x600A,0x603F,0x6021,0x6078, + 0x6079,0x607B,0x607A,0x6042,0x9246,0x9247,0x9248,0x9249, + 0x924A,0x924B,0x924C,0x924D,0x924E,0x924F,0x9250,0x9251, + 0x9252,0x9253,0x9254,0x9255,0x9256,0x9257,0x9258,0x9259, + 0x925A,0x925B,0x925C,0x925D,0x925E,0x925F,0x9260,0x9261, + 0x9262,0x9263,0x9264,0x9265,0x9266,0x9267,0x9268,0x9269, + 0x926A,0x926B,0x926C,0x926D,0x926E,0x926F,0x9270,0x9271, + 0x9272,0x9273,0x9275,0x9276,0x9277,0x9278,0x9279,0x927A, + 0x927B,0x927C,0x927D,0x927E,0x927F,0x9280,0x9281,0x9282, + 0x9283,0x9284,0x9285,0x9286,0x9287,0x9288,0x9289,0x928A, + 0x928B,0x928C,0x928D,0x928F,0x9290,0x9291,0x9292,0x9293, + 0x9294,0x9295,0x9296,0x9297,0x9298,0x9299,0x929A,0x929B, + 0x929C,0x929D,0x929E,0x929F,0x92A0,0x92A1,0x92A2,0x92A3, + 0x92A4,0x92A5,0x92A6,0x92A7,0x606A,0x607D,0x6096,0x609A, + 0x60AD,0x609D,0x6083,0x6092,0x608C,0x609B,0x60EC,0x60BB, + 0x60B1,0x60DD,0x60D8,0x60C6,0x60DA,0x60B4,0x6120,0x6126, + 0x6115,0x6123,0x60F4,0x6100,0x610E,0x612B,0x614A,0x6175, + 0x61AC,0x6194,0x61A7,0x61B7,0x61D4,0x61F5,0x5FDD,0x96B3, + 0x95E9,0x95EB,0x95F1,0x95F3,0x95F5,0x95F6,0x95FC,0x95FE, + 0x9603,0x9604,0x9606,0x9608,0x960A,0x960B,0x960C,0x960D, + 0x960F,0x9612,0x9615,0x9616,0x9617,0x9619,0x961A,0x4E2C, + 0x723F,0x6215,0x6C35,0x6C54,0x6C5C,0x6C4A,0x6CA3,0x6C85, + 0x6C90,0x6C94,0x6C8C,0x6C68,0x6C69,0x6C74,0x6C76,0x6C86, + 0x6CA9,0x6CD0,0x6CD4,0x6CAD,0x6CF7,0x6CF8,0x6CF1,0x6CD7, + 0x6CB2,0x6CE0,0x6CD6,0x6CFA,0x6CEB,0x6CEE,0x6CB1,0x6CD3, + 0x6CEF,0x6CFE,0x92A8,0x92A9,0x92AA,0x92AB,0x92AC,0x92AD, + 0x92AF,0x92B0,0x92B1,0x92B2,0x92B3,0x92B4,0x92B5,0x92B6, + 0x92B7,0x92B8,0x92B9,0x92BA,0x92BB,0x92BC,0x92BD,0x92BE, + 0x92BF,0x92C0,0x92C1,0x92C2,0x92C3,0x92C4,0x92C5,0x92C6, + 0x92C7,0x92C9,0x92CA,0x92CB,0x92CC,0x92CD,0x92CE,0x92CF, + 0x92D0,0x92D1,0x92D2,0x92D3,0x92D4,0x92D5,0x92D6,0x92D7, + 0x92D8,0x92D9,0x92DA,0x92DB,0x92DC,0x92DD,0x92DE,0x92DF, + 0x92E0,0x92E1,0x92E2,0x92E3,0x92E4,0x92E5,0x92E6,0x92E7, + 0x92E8,0x92E9,0x92EA,0x92EB,0x92EC,0x92ED,0x92EE,0x92EF, + 0x92F0,0x92F1,0x92F2,0x92F3,0x92F4,0x92F5,0x92F6,0x92F7, + 0x92F8,0x92F9,0x92FA,0x92FB,0x92FC,0x92FD,0x92FE,0x92FF, + 0x9300,0x9301,0x9302,0x9303,0x9304,0x9305,0x9306,0x9307, + 0x9308,0x9309,0x6D39,0x6D27,0x6D0C,0x6D43,0x6D48,0x6D07, + 0x6D04,0x6D19,0x6D0E,0x6D2B,0x6D4D,0x6D2E,0x6D35,0x6D1A, + 0x6D4F,0x6D52,0x6D54,0x6D33,0x6D91,0x6D6F,0x6D9E,0x6DA0, + 0x6D5E,0x6D93,0x6D94,0x6D5C,0x6D60,0x6D7C,0x6D63,0x6E1A, + 0x6DC7,0x6DC5,0x6DDE,0x6E0E,0x6DBF,0x6DE0,0x6E11,0x6DE6, + 0x6DDD,0x6DD9,0x6E16,0x6DAB,0x6E0C,0x6DAE,0x6E2B,0x6E6E, + 0x6E4E,0x6E6B,0x6EB2,0x6E5F,0x6E86,0x6E53,0x6E54,0x6E32, + 0x6E25,0x6E44,0x6EDF,0x6EB1,0x6E98,0x6EE0,0x6F2D,0x6EE2, + 0x6EA5,0x6EA7,0x6EBD,0x6EBB,0x6EB7,0x6ED7,0x6EB4,0x6ECF, + 0x6E8F,0x6EC2,0x6E9F,0x6F62,0x6F46,0x6F47,0x6F24,0x6F15, + 0x6EF9,0x6F2F,0x6F36,0x6F4B,0x6F74,0x6F2A,0x6F09,0x6F29, + 0x6F89,0x6F8D,0x6F8C,0x6F78,0x6F72,0x6F7C,0x6F7A,0x6FD1, + 0x930A,0x930B,0x930C,0x930D,0x930E,0x930F,0x9310,0x9311, + 0x9312,0x9313,0x9314,0x9315,0x9316,0x9317,0x9318,0x9319, + 0x931A,0x931B,0x931C,0x931D,0x931E,0x931F,0x9320,0x9321, + 0x9322,0x9323,0x9324,0x9325,0x9326,0x9327,0x9328,0x9329, + 0x932A,0x932B,0x932C,0x932D,0x932E,0x932F,0x9330,0x9331, + 0x9332,0x9333,0x9334,0x9335,0x9336,0x9337,0x9338,0x9339, + 0x933A,0x933B,0x933C,0x933D,0x933F,0x9340,0x9341,0x9342, + 0x9343,0x9344,0x9345,0x9346,0x9347,0x9348,0x9349,0x934A, + 0x934B,0x934C,0x934D,0x934E,0x934F,0x9350,0x9351,0x9352, + 0x9353,0x9354,0x9355,0x9356,0x9357,0x9358,0x9359,0x935A, + 0x935B,0x935C,0x935D,0x935E,0x935F,0x9360,0x9361,0x9362, + 0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369,0x936B, + 0x6FC9,0x6FA7,0x6FB9,0x6FB6,0x6FC2,0x6FE1,0x6FEE,0x6FDE, + 0x6FE0,0x6FEF,0x701A,0x7023,0x701B,0x7039,0x7035,0x704F, + 0x705E,0x5B80,0x5B84,0x5B95,0x5B93,0x5BA5,0x5BB8,0x752F, + 0x9A9E,0x6434,0x5BE4,0x5BEE,0x8930,0x5BF0,0x8E47,0x8B07, + 0x8FB6,0x8FD3,0x8FD5,0x8FE5,0x8FEE,0x8FE4,0x8FE9,0x8FE6, + 0x8FF3,0x8FE8,0x9005,0x9004,0x900B,0x9026,0x9011,0x900D, + 0x9016,0x9021,0x9035,0x9036,0x902D,0x902F,0x9044,0x9051, + 0x9052,0x9050,0x9068,0x9058,0x9062,0x905B,0x66B9,0x9074, + 0x907D,0x9082,0x9088,0x9083,0x908B,0x5F50,0x5F57,0x5F56, + 0x5F58,0x5C3B,0x54AB,0x5C50,0x5C59,0x5B71,0x5C63,0x5C66, + 0x7FBC,0x5F2A,0x5F29,0x5F2D,0x8274,0x5F3C,0x9B3B,0x5C6E, + 0x5981,0x5983,0x598D,0x59A9,0x59AA,0x59A3,0x936C,0x936D, + 0x936E,0x936F,0x9370,0x9371,0x9372,0x9373,0x9374,0x9375, + 0x9376,0x9377,0x9378,0x9379,0x937A,0x937B,0x937C,0x937D, + 0x937E,0x937F,0x9380,0x9381,0x9382,0x9383,0x9384,0x9385, + 0x9386,0x9387,0x9388,0x9389,0x938A,0x938B,0x938C,0x938D, + 0x938E,0x9390,0x9391,0x9392,0x9393,0x9394,0x9395,0x9396, + 0x9397,0x9398,0x9399,0x939A,0x939B,0x939C,0x939D,0x939E, + 0x939F,0x93A0,0x93A1,0x93A2,0x93A3,0x93A4,0x93A5,0x93A6, + 0x93A7,0x93A8,0x93A9,0x93AA,0x93AB,0x93AC,0x93AD,0x93AE, + 0x93AF,0x93B0,0x93B1,0x93B2,0x93B3,0x93B4,0x93B5,0x93B6, + 0x93B7,0x93B8,0x93B9,0x93BA,0x93BB,0x93BC,0x93BD,0x93BE, + 0x93BF,0x93C0,0x93C1,0x93C2,0x93C3,0x93C4,0x93C5,0x93C6, + 0x93C7,0x93C8,0x93C9,0x93CB,0x93CC,0x93CD,0x5997,0x59CA, + 0x59AB,0x599E,0x59A4,0x59D2,0x59B2,0x59AF,0x59D7,0x59BE, + 0x5A05,0x5A06,0x59DD,0x5A08,0x59E3,0x59D8,0x59F9,0x5A0C, + 0x5A09,0x5A32,0x5A34,0x5A11,0x5A23,0x5A13,0x5A40,0x5A67, + 0x5A4A,0x5A55,0x5A3C,0x5A62,0x5A75,0x80EC,0x5AAA,0x5A9B, + 0x5A77,0x5A7A,0x5ABE,0x5AEB,0x5AB2,0x5AD2,0x5AD4,0x5AB8, + 0x5AE0,0x5AE3,0x5AF1,0x5AD6,0x5AE6,0x5AD8,0x5ADC,0x5B09, + 0x5B17,0x5B16,0x5B32,0x5B37,0x5B40,0x5C15,0x5C1C,0x5B5A, + 0x5B65,0x5B73,0x5B51,0x5B53,0x5B62,0x9A75,0x9A77,0x9A78, + 0x9A7A,0x9A7F,0x9A7D,0x9A80,0x9A81,0x9A85,0x9A88,0x9A8A, + 0x9A90,0x9A92,0x9A93,0x9A96,0x9A98,0x9A9B,0x9A9C,0x9A9D, + 0x9A9F,0x9AA0,0x9AA2,0x9AA3,0x9AA5,0x9AA7,0x7E9F,0x7EA1, + 0x7EA3,0x7EA5,0x7EA8,0x7EA9,0x93CE,0x93CF,0x93D0,0x93D1, + 0x93D2,0x93D3,0x93D4,0x93D5,0x93D7,0x93D8,0x93D9,0x93DA, + 0x93DB,0x93DC,0x93DD,0x93DE,0x93DF,0x93E0,0x93E1,0x93E2, + 0x93E3,0x93E4,0x93E5,0x93E6,0x93E7,0x93E8,0x93E9,0x93EA, + 0x93EB,0x93EC,0x93ED,0x93EE,0x93EF,0x93F0,0x93F1,0x93F2, + 0x93F3,0x93F4,0x93F5,0x93F6,0x93F7,0x93F8,0x93F9,0x93FA, + 0x93FB,0x93FC,0x93FD,0x93FE,0x93FF,0x9400,0x9401,0x9402, + 0x9403,0x9404,0x9405,0x9406,0x9407,0x9408,0x9409,0x940A, + 0x940B,0x940C,0x940D,0x940E,0x940F,0x9410,0x9411,0x9412, + 0x9413,0x9414,0x9415,0x9416,0x9417,0x9418,0x9419,0x941A, + 0x941B,0x941C,0x941D,0x941E,0x941F,0x9420,0x9421,0x9422, + 0x9423,0x9424,0x9425,0x9426,0x9427,0x9428,0x9429,0x942A, + 0x942B,0x942C,0x942D,0x942E,0x7EAD,0x7EB0,0x7EBE,0x7EC0, + 0x7EC1,0x7EC2,0x7EC9,0x7ECB,0x7ECC,0x7ED0,0x7ED4,0x7ED7, + 0x7EDB,0x7EE0,0x7EE1,0x7EE8,0x7EEB,0x7EEE,0x7EEF,0x7EF1, + 0x7EF2,0x7F0D,0x7EF6,0x7EFA,0x7EFB,0x7EFE,0x7F01,0x7F02, + 0x7F03,0x7F07,0x7F08,0x7F0B,0x7F0C,0x7F0F,0x7F11,0x7F12, + 0x7F17,0x7F19,0x7F1C,0x7F1B,0x7F1F,0x7F21,0x7F22,0x7F23, + 0x7F24,0x7F25,0x7F26,0x7F27,0x7F2A,0x7F2B,0x7F2C,0x7F2D, + 0x7F2F,0x7F30,0x7F31,0x7F32,0x7F33,0x7F35,0x5E7A,0x757F, + 0x5DDB,0x753E,0x9095,0x738E,0x7391,0x73AE,0x73A2,0x739F, + 0x73CF,0x73C2,0x73D1,0x73B7,0x73B3,0x73C0,0x73C9,0x73C8, + 0x73E5,0x73D9,0x987C,0x740A,0x73E9,0x73E7,0x73DE,0x73BA, + 0x73F2,0x740F,0x742A,0x745B,0x7426,0x7425,0x7428,0x7430, + 0x742E,0x742C,0x942F,0x9430,0x9431,0x9432,0x9433,0x9434, + 0x9435,0x9436,0x9437,0x9438,0x9439,0x943A,0x943B,0x943C, + 0x943D,0x943F,0x9440,0x9441,0x9442,0x9443,0x9444,0x9445, + 0x9446,0x9447,0x9448,0x9449,0x944A,0x944B,0x944C,0x944D, + 0x944E,0x944F,0x9450,0x9451,0x9452,0x9453,0x9454,0x9455, + 0x9456,0x9457,0x9458,0x9459,0x945A,0x945B,0x945C,0x945D, + 0x945E,0x945F,0x9460,0x9461,0x9462,0x9463,0x9464,0x9465, + 0x9466,0x9467,0x9468,0x9469,0x946A,0x946C,0x946D,0x946E, + 0x946F,0x9470,0x9471,0x9472,0x9473,0x9474,0x9475,0x9476, + 0x9477,0x9478,0x9479,0x947A,0x947B,0x947C,0x947D,0x947E, + 0x947F,0x9480,0x9481,0x9482,0x9483,0x9484,0x9491,0x9496, + 0x9498,0x94C7,0x94CF,0x94D3,0x94D4,0x94DA,0x94E6,0x94FB, + 0x951C,0x9520,0x741B,0x741A,0x7441,0x745C,0x7457,0x7455, + 0x7459,0x7477,0x746D,0x747E,0x749C,0x748E,0x7480,0x7481, + 0x7487,0x748B,0x749E,0x74A8,0x74A9,0x7490,0x74A7,0x74D2, + 0x74BA,0x97EA,0x97EB,0x97EC,0x674C,0x6753,0x675E,0x6748, + 0x6769,0x67A5,0x6787,0x676A,0x6773,0x6798,0x67A7,0x6775, + 0x67A8,0x679E,0x67AD,0x678B,0x6777,0x677C,0x67F0,0x6809, + 0x67D8,0x680A,0x67E9,0x67B0,0x680C,0x67D9,0x67B5,0x67DA, + 0x67B3,0x67DD,0x6800,0x67C3,0x67B8,0x67E2,0x680E,0x67C1, + 0x67FD,0x6832,0x6833,0x6860,0x6861,0x684E,0x6862,0x6844, + 0x6864,0x6883,0x681D,0x6855,0x6866,0x6841,0x6867,0x6840, + 0x683E,0x684A,0x6849,0x6829,0x68B5,0x688F,0x6874,0x6877, + 0x6893,0x686B,0x68C2,0x696E,0x68FC,0x691F,0x6920,0x68F9, + 0x9527,0x9533,0x953D,0x9543,0x9548,0x954B,0x9555,0x955A, + 0x9560,0x956E,0x9574,0x9575,0x9577,0x9578,0x9579,0x957A, + 0x957B,0x957C,0x957D,0x957E,0x9580,0x9581,0x9582,0x9583, + 0x9584,0x9585,0x9586,0x9587,0x9588,0x9589,0x958A,0x958B, + 0x958C,0x958D,0x958E,0x958F,0x9590,0x9591,0x9592,0x9593, + 0x9594,0x9595,0x9596,0x9597,0x9598,0x9599,0x959A,0x959B, + 0x959C,0x959D,0x959E,0x959F,0x95A0,0x95A1,0x95A2,0x95A3, + 0x95A4,0x95A5,0x95A6,0x95A7,0x95A8,0x95A9,0x95AA,0x95AB, + 0x95AC,0x95AD,0x95AE,0x95AF,0x95B0,0x95B1,0x95B2,0x95B3, + 0x95B4,0x95B5,0x95B6,0x95B7,0x95B8,0x95B9,0x95BA,0x95BB, + 0x95BC,0x95BD,0x95BE,0x95BF,0x95C0,0x95C1,0x95C2,0x95C3, + 0x95C4,0x95C5,0x95C6,0x95C7,0x95C8,0x95C9,0x95CA,0x95CB, + 0x6924,0x68F0,0x690B,0x6901,0x6957,0x68E3,0x6910,0x6971, + 0x6939,0x6960,0x6942,0x695D,0x6984,0x696B,0x6980,0x6998, + 0x6978,0x6934,0x69CC,0x6987,0x6988,0x69CE,0x6989,0x6966, + 0x6963,0x6979,0x699B,0x69A7,0x69BB,0x69AB,0x69AD,0x69D4, + 0x69B1,0x69C1,0x69CA,0x69DF,0x6995,0x69E0,0x698D,0x69FF, + 0x6A2F,0x69ED,0x6A17,0x6A18,0x6A65,0x69F2,0x6A44,0x6A3E, + 0x6AA0,0x6A50,0x6A5B,0x6A35,0x6A8E,0x6A79,0x6A3D,0x6A28, + 0x6A58,0x6A7C,0x6A91,0x6A90,0x6AA9,0x6A97,0x6AAB,0x7337, + 0x7352,0x6B81,0x6B82,0x6B87,0x6B84,0x6B92,0x6B93,0x6B8D, + 0x6B9A,0x6B9B,0x6BA1,0x6BAA,0x8F6B,0x8F6D,0x8F71,0x8F72, + 0x8F73,0x8F75,0x8F76,0x8F78,0x8F77,0x8F79,0x8F7A,0x8F7C, + 0x8F7E,0x8F81,0x8F82,0x8F84,0x8F87,0x8F8B,0x95CC,0x95CD, + 0x95CE,0x95CF,0x95D0,0x95D1,0x95D2,0x95D3,0x95D4,0x95D5, + 0x95D6,0x95D7,0x95D8,0x95D9,0x95DA,0x95DB,0x95DC,0x95DD, + 0x95DE,0x95DF,0x95E0,0x95E1,0x95E2,0x95E3,0x95E4,0x95E5, + 0x95E6,0x95E7,0x95EC,0x95FF,0x9607,0x9613,0x9618,0x961B, + 0x961E,0x9620,0x9623,0x9624,0x9625,0x9626,0x9627,0x9628, + 0x9629,0x962B,0x962C,0x962D,0x962F,0x9630,0x9637,0x9638, + 0x9639,0x963A,0x963E,0x9641,0x9643,0x964A,0x964E,0x964F, + 0x9651,0x9652,0x9653,0x9656,0x9657,0x9658,0x9659,0x965A, + 0x965C,0x965D,0x965E,0x9660,0x9663,0x9665,0x9666,0x966B, + 0x966D,0x966E,0x966F,0x9670,0x9671,0x9673,0x9678,0x9679, + 0x967A,0x967B,0x967C,0x967D,0x967E,0x967F,0x9680,0x9681, + 0x9682,0x9683,0x9684,0x9687,0x9689,0x968A,0x8F8D,0x8F8E, + 0x8F8F,0x8F98,0x8F9A,0x8ECE,0x620B,0x6217,0x621B,0x621F, + 0x6222,0x6221,0x6225,0x6224,0x622C,0x81E7,0x74EF,0x74F4, + 0x74FF,0x750F,0x7511,0x7513,0x6534,0x65EE,0x65EF,0x65F0, + 0x660A,0x6619,0x6772,0x6603,0x6615,0x6600,0x7085,0x66F7, + 0x661D,0x6634,0x6631,0x6636,0x6635,0x8006,0x665F,0x6654, + 0x6641,0x664F,0x6656,0x6661,0x6657,0x6677,0x6684,0x668C, + 0x66A7,0x669D,0x66BE,0x66DB,0x66DC,0x66E6,0x66E9,0x8D32, + 0x8D33,0x8D36,0x8D3B,0x8D3D,0x8D40,0x8D45,0x8D46,0x8D48, + 0x8D49,0x8D47,0x8D4D,0x8D55,0x8D59,0x89C7,0x89CA,0x89CB, + 0x89CC,0x89CE,0x89CF,0x89D0,0x89D1,0x726E,0x729F,0x725D, + 0x7266,0x726F,0x727E,0x727F,0x7284,0x728B,0x728D,0x728F, + 0x7292,0x6308,0x6332,0x63B0,0x968C,0x968E,0x9691,0x9692, + 0x9693,0x9695,0x9696,0x969A,0x969B,0x969D,0x969E,0x969F, + 0x96A0,0x96A1,0x96A2,0x96A3,0x96A4,0x96A5,0x96A6,0x96A8, + 0x96A9,0x96AA,0x96AB,0x96AC,0x96AD,0x96AE,0x96AF,0x96B1, + 0x96B2,0x96B4,0x96B5,0x96B7,0x96B8,0x96BA,0x96BB,0x96BF, + 0x96C2,0x96C3,0x96C8,0x96CA,0x96CB,0x96D0,0x96D1,0x96D3, + 0x96D4,0x96D6,0x96D7,0x96D8,0x96D9,0x96DA,0x96DB,0x96DC, + 0x96DD,0x96DE,0x96DF,0x96E1,0x96E2,0x96E3,0x96E4,0x96E5, + 0x96E6,0x96E7,0x96EB,0x96EC,0x96ED,0x96EE,0x96F0,0x96F1, + 0x96F2,0x96F4,0x96F5,0x96F8,0x96FA,0x96FB,0x96FC,0x96FD, + 0x96FF,0x9702,0x9703,0x9705,0x970A,0x970B,0x970C,0x9710, + 0x9711,0x9712,0x9714,0x9715,0x9717,0x9718,0x9719,0x971A, + 0x971B,0x971D,0x971F,0x9720,0x643F,0x64D8,0x8004,0x6BEA, + 0x6BF3,0x6BFD,0x6BF5,0x6BF9,0x6C05,0x6C07,0x6C06,0x6C0D, + 0x6C15,0x6C18,0x6C19,0x6C1A,0x6C21,0x6C29,0x6C24,0x6C2A, + 0x6C32,0x6535,0x6555,0x656B,0x724D,0x7252,0x7256,0x7230, + 0x8662,0x5216,0x809F,0x809C,0x8093,0x80BC,0x670A,0x80BD, + 0x80B1,0x80AB,0x80AD,0x80B4,0x80B7,0x80E7,0x80E8,0x80E9, + 0x80EA,0x80DB,0x80C2,0x80C4,0x80D9,0x80CD,0x80D7,0x6710, + 0x80DD,0x80EB,0x80F1,0x80F4,0x80ED,0x810D,0x810E,0x80F2, + 0x80FC,0x6715,0x8112,0x8C5A,0x8136,0x811E,0x812C,0x8118, + 0x8132,0x8148,0x814C,0x8153,0x8174,0x8159,0x815A,0x8171, + 0x8160,0x8169,0x817C,0x817D,0x816D,0x8167,0x584D,0x5AB5, + 0x8188,0x8182,0x8191,0x6ED5,0x81A3,0x81AA,0x81CC,0x6726, + 0x81CA,0x81BB,0x9721,0x9722,0x9723,0x9724,0x9725,0x9726, + 0x9727,0x9728,0x9729,0x972B,0x972C,0x972E,0x972F,0x9731, + 0x9733,0x9734,0x9735,0x9736,0x9737,0x973A,0x973B,0x973C, + 0x973D,0x973F,0x9740,0x9741,0x9742,0x9743,0x9744,0x9745, + 0x9746,0x9747,0x9748,0x9749,0x974A,0x974B,0x974C,0x974D, + 0x974E,0x974F,0x9750,0x9751,0x9754,0x9755,0x9757,0x9758, + 0x975A,0x975C,0x975D,0x975F,0x9763,0x9764,0x9766,0x9767, + 0x9768,0x976A,0x976B,0x976C,0x976D,0x976E,0x976F,0x9770, + 0x9771,0x9772,0x9775,0x9777,0x9778,0x9779,0x977A,0x977B, + 0x977D,0x977E,0x977F,0x9780,0x9781,0x9782,0x9783,0x9784, + 0x9786,0x9787,0x9788,0x9789,0x978A,0x978C,0x978E,0x978F, + 0x9790,0x9793,0x9795,0x9796,0x9797,0x9799,0x979A,0x979B, + 0x979C,0x979D,0x81C1,0x81A6,0x6B24,0x6B37,0x6B39,0x6B43, + 0x6B46,0x6B59,0x98D1,0x98D2,0x98D3,0x98D5,0x98D9,0x98DA, + 0x6BB3,0x5F40,0x6BC2,0x89F3,0x6590,0x9F51,0x6593,0x65BC, + 0x65C6,0x65C4,0x65C3,0x65CC,0x65CE,0x65D2,0x65D6,0x7080, + 0x709C,0x7096,0x709D,0x70BB,0x70C0,0x70B7,0x70AB,0x70B1, + 0x70E8,0x70CA,0x7110,0x7113,0x7116,0x712F,0x7131,0x7173, + 0x715C,0x7168,0x7145,0x7172,0x714A,0x7178,0x717A,0x7198, + 0x71B3,0x71B5,0x71A8,0x71A0,0x71E0,0x71D4,0x71E7,0x71F9, + 0x721D,0x7228,0x706C,0x7118,0x7166,0x71B9,0x623E,0x623D, + 0x6243,0x6248,0x6249,0x793B,0x7940,0x7946,0x7949,0x795B, + 0x795C,0x7953,0x795A,0x7962,0x7957,0x7960,0x796F,0x7967, + 0x797A,0x7985,0x798A,0x799A,0x79A7,0x79B3,0x5FD1,0x5FD0, + 0x979E,0x979F,0x97A1,0x97A2,0x97A4,0x97A5,0x97A6,0x97A7, + 0x97A8,0x97A9,0x97AA,0x97AC,0x97AE,0x97B0,0x97B1,0x97B3, + 0x97B5,0x97B6,0x97B7,0x97B8,0x97B9,0x97BA,0x97BB,0x97BC, + 0x97BD,0x97BE,0x97BF,0x97C0,0x97C1,0x97C2,0x97C3,0x97C4, + 0x97C5,0x97C6,0x97C7,0x97C8,0x97C9,0x97CA,0x97CB,0x97CC, + 0x97CD,0x97CE,0x97CF,0x97D0,0x97D1,0x97D2,0x97D3,0x97D4, + 0x97D5,0x97D6,0x97D7,0x97D8,0x97D9,0x97DA,0x97DB,0x97DC, + 0x97DD,0x97DE,0x97DF,0x97E0,0x97E1,0x97E2,0x97E3,0x97E4, + 0x97E5,0x97E8,0x97EE,0x97EF,0x97F0,0x97F1,0x97F2,0x97F4, + 0x97F7,0x97F8,0x97F9,0x97FA,0x97FB,0x97FC,0x97FD,0x97FE, + 0x97FF,0x9800,0x9801,0x9802,0x9803,0x9804,0x9805,0x9806, + 0x9807,0x9808,0x9809,0x980A,0x980B,0x980C,0x980D,0x980E, + 0x603C,0x605D,0x605A,0x6067,0x6041,0x6059,0x6063,0x60AB, + 0x6106,0x610D,0x615D,0x61A9,0x619D,0x61CB,0x61D1,0x6206, + 0x8080,0x807F,0x6C93,0x6CF6,0x6DFC,0x77F6,0x77F8,0x7800, + 0x7809,0x7817,0x7818,0x7811,0x65AB,0x782D,0x781C,0x781D, + 0x7839,0x783A,0x783B,0x781F,0x783C,0x7825,0x782C,0x7823, + 0x7829,0x784E,0x786D,0x7856,0x7857,0x7826,0x7850,0x7847, + 0x784C,0x786A,0x789B,0x7893,0x789A,0x7887,0x789C,0x78A1, + 0x78A3,0x78B2,0x78B9,0x78A5,0x78D4,0x78D9,0x78C9,0x78EC, + 0x78F2,0x7905,0x78F4,0x7913,0x7924,0x791E,0x7934,0x9F9B, + 0x9EF9,0x9EFB,0x9EFC,0x76F1,0x7704,0x770D,0x76F9,0x7707, + 0x7708,0x771A,0x7722,0x7719,0x772D,0x7726,0x7735,0x7738, + 0x7750,0x7751,0x7747,0x7743,0x775A,0x7768,0x980F,0x9810, + 0x9811,0x9812,0x9813,0x9814,0x9815,0x9816,0x9817,0x9818, + 0x9819,0x981A,0x981B,0x981C,0x981D,0x981E,0x981F,0x9820, + 0x9821,0x9822,0x9823,0x9824,0x9825,0x9826,0x9827,0x9828, + 0x9829,0x982A,0x982B,0x982C,0x982D,0x982E,0x982F,0x9830, + 0x9831,0x9832,0x9833,0x9834,0x9835,0x9836,0x9837,0x9838, + 0x9839,0x983A,0x983B,0x983C,0x983D,0x983E,0x983F,0x9840, + 0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,0x9847,0x9848, + 0x9849,0x984A,0x984B,0x984C,0x984D,0x984E,0x984F,0x9850, + 0x9851,0x9852,0x9853,0x9854,0x9855,0x9856,0x9857,0x9858, + 0x9859,0x985A,0x985B,0x985C,0x985D,0x985E,0x985F,0x9860, + 0x9861,0x9862,0x9863,0x9864,0x9865,0x9866,0x9867,0x9868, + 0x9869,0x986A,0x986B,0x986C,0x986D,0x986E,0x7762,0x7765, + 0x777F,0x778D,0x777D,0x7780,0x778C,0x7791,0x779F,0x77A0, + 0x77B0,0x77B5,0x77BD,0x753A,0x7540,0x754E,0x754B,0x7548, + 0x755B,0x7572,0x7579,0x7583,0x7F58,0x7F61,0x7F5F,0x8A48, + 0x7F68,0x7F74,0x7F71,0x7F79,0x7F81,0x7F7E,0x76CD,0x76E5, + 0x8832,0x9485,0x9486,0x9487,0x948B,0x948A,0x948C,0x948D, + 0x948F,0x9490,0x9494,0x9497,0x9495,0x949A,0x949B,0x949C, + 0x94A3,0x94A4,0x94AB,0x94AA,0x94AD,0x94AC,0x94AF,0x94B0, + 0x94B2,0x94B4,0x94B6,0x94B7,0x94B8,0x94B9,0x94BA,0x94BC, + 0x94BD,0x94BF,0x94C4,0x94C8,0x94C9,0x94CA,0x94CB,0x94CC, + 0x94CD,0x94CE,0x94D0,0x94D1,0x94D2,0x94D5,0x94D6,0x94D7, + 0x94D9,0x94D8,0x94DB,0x94DE,0x94DF,0x94E0,0x94E2,0x94E4, + 0x94E5,0x94E7,0x94E8,0x94EA,0x986F,0x9870,0x9871,0x9872, + 0x9873,0x9874,0x988B,0x988E,0x9892,0x9895,0x9899,0x98A3, + 0x98A8,0x98A9,0x98AA,0x98AB,0x98AC,0x98AD,0x98AE,0x98AF, + 0x98B0,0x98B1,0x98B2,0x98B3,0x98B4,0x98B5,0x98B6,0x98B7, + 0x98B8,0x98B9,0x98BA,0x98BB,0x98BC,0x98BD,0x98BE,0x98BF, + 0x98C0,0x98C1,0x98C2,0x98C3,0x98C4,0x98C5,0x98C6,0x98C7, + 0x98C8,0x98C9,0x98CA,0x98CB,0x98CC,0x98CD,0x98CF,0x98D0, + 0x98D4,0x98D6,0x98D7,0x98DB,0x98DC,0x98DD,0x98E0,0x98E1, + 0x98E2,0x98E3,0x98E4,0x98E5,0x98E6,0x98E9,0x98EA,0x98EB, + 0x98EC,0x98ED,0x98EE,0x98EF,0x98F0,0x98F1,0x98F2,0x98F3, + 0x98F4,0x98F5,0x98F6,0x98F7,0x98F8,0x98F9,0x98FA,0x98FB, + 0x98FC,0x98FD,0x98FE,0x98FF,0x9900,0x9901,0x9902,0x9903, + 0x9904,0x9905,0x9906,0x9907,0x94E9,0x94EB,0x94EE,0x94EF, + 0x94F3,0x94F4,0x94F5,0x94F7,0x94F9,0x94FC,0x94FD,0x94FF, + 0x9503,0x9502,0x9506,0x9507,0x9509,0x950A,0x950D,0x950E, + 0x950F,0x9512,0x9513,0x9514,0x9515,0x9516,0x9518,0x951B, + 0x951D,0x951E,0x951F,0x9522,0x952A,0x952B,0x9529,0x952C, + 0x9531,0x9532,0x9534,0x9536,0x9537,0x9538,0x953C,0x953E, + 0x953F,0x9542,0x9535,0x9544,0x9545,0x9546,0x9549,0x954C, + 0x954E,0x954F,0x9552,0x9553,0x9554,0x9556,0x9557,0x9558, + 0x9559,0x955B,0x955E,0x955F,0x955D,0x9561,0x9562,0x9564, + 0x9565,0x9566,0x9567,0x9568,0x9569,0x956A,0x956B,0x956C, + 0x956F,0x9571,0x9572,0x9573,0x953A,0x77E7,0x77EC,0x96C9, + 0x79D5,0x79ED,0x79E3,0x79EB,0x7A06,0x5D47,0x7A03,0x7A02, + 0x7A1E,0x7A14,0x9908,0x9909,0x990A,0x990B,0x990C,0x990E, + 0x990F,0x9911,0x9912,0x9913,0x9914,0x9915,0x9916,0x9917, + 0x9918,0x9919,0x991A,0x991B,0x991C,0x991D,0x991E,0x991F, + 0x9920,0x9921,0x9922,0x9923,0x9924,0x9925,0x9926,0x9927, + 0x9928,0x9929,0x992A,0x992B,0x992C,0x992D,0x992F,0x9930, + 0x9931,0x9932,0x9933,0x9934,0x9935,0x9936,0x9937,0x9938, + 0x9939,0x993A,0x993B,0x993C,0x993D,0x993E,0x993F,0x9940, + 0x9941,0x9942,0x9943,0x9944,0x9945,0x9946,0x9947,0x9948, + 0x9949,0x994A,0x994B,0x994C,0x994D,0x994E,0x994F,0x9950, + 0x9951,0x9952,0x9953,0x9956,0x9957,0x9958,0x9959,0x995A, + 0x995B,0x995C,0x995D,0x995E,0x995F,0x9960,0x9961,0x9962, + 0x9964,0x9966,0x9973,0x9978,0x9979,0x997B,0x997E,0x9982, + 0x9983,0x9989,0x7A39,0x7A37,0x7A51,0x9ECF,0x99A5,0x7A70, + 0x7688,0x768E,0x7693,0x7699,0x76A4,0x74DE,0x74E0,0x752C, + 0x9E20,0x9E22,0x9E28,0x9E29,0x9E2A,0x9E2B,0x9E2C,0x9E32, + 0x9E31,0x9E36,0x9E38,0x9E37,0x9E39,0x9E3A,0x9E3E,0x9E41, + 0x9E42,0x9E44,0x9E46,0x9E47,0x9E48,0x9E49,0x9E4B,0x9E4C, + 0x9E4E,0x9E51,0x9E55,0x9E57,0x9E5A,0x9E5B,0x9E5C,0x9E5E, + 0x9E63,0x9E66,0x9E67,0x9E68,0x9E69,0x9E6A,0x9E6B,0x9E6C, + 0x9E71,0x9E6D,0x9E73,0x7592,0x7594,0x7596,0x75A0,0x759D, + 0x75AC,0x75A3,0x75B3,0x75B4,0x75B8,0x75C4,0x75B1,0x75B0, + 0x75C3,0x75C2,0x75D6,0x75CD,0x75E3,0x75E8,0x75E6,0x75E4, + 0x75EB,0x75E7,0x7603,0x75F1,0x75FC,0x75FF,0x7610,0x7600, + 0x7605,0x760C,0x7617,0x760A,0x7625,0x7618,0x7615,0x7619, + 0x998C,0x998E,0x999A,0x999B,0x999C,0x999D,0x999E,0x999F, + 0x99A0,0x99A1,0x99A2,0x99A3,0x99A4,0x99A6,0x99A7,0x99A9, + 0x99AA,0x99AB,0x99AC,0x99AD,0x99AE,0x99AF,0x99B0,0x99B1, + 0x99B2,0x99B3,0x99B4,0x99B5,0x99B6,0x99B7,0x99B8,0x99B9, + 0x99BA,0x99BB,0x99BC,0x99BD,0x99BE,0x99BF,0x99C0,0x99C1, + 0x99C2,0x99C3,0x99C4,0x99C5,0x99C6,0x99C7,0x99C8,0x99C9, + 0x99CA,0x99CB,0x99CC,0x99CD,0x99CE,0x99CF,0x99D0,0x99D1, + 0x99D2,0x99D3,0x99D4,0x99D5,0x99D6,0x99D7,0x99D8,0x99D9, + 0x99DA,0x99DB,0x99DC,0x99DD,0x99DE,0x99DF,0x99E0,0x99E1, + 0x99E2,0x99E3,0x99E4,0x99E5,0x99E6,0x99E7,0x99E8,0x99E9, + 0x99EA,0x99EB,0x99EC,0x99ED,0x99EE,0x99EF,0x99F0,0x99F1, + 0x99F2,0x99F3,0x99F4,0x99F5,0x99F6,0x99F7,0x99F8,0x99F9, + 0x761B,0x763C,0x7622,0x7620,0x7640,0x762D,0x7630,0x763F, + 0x7635,0x7643,0x763E,0x7633,0x764D,0x765E,0x7654,0x765C, + 0x7656,0x766B,0x766F,0x7FCA,0x7AE6,0x7A78,0x7A79,0x7A80, + 0x7A86,0x7A88,0x7A95,0x7AA6,0x7AA0,0x7AAC,0x7AA8,0x7AAD, + 0x7AB3,0x8864,0x8869,0x8872,0x887D,0x887F,0x8882,0x88A2, + 0x88C6,0x88B7,0x88BC,0x88C9,0x88E2,0x88CE,0x88E3,0x88E5, + 0x88F1,0x891A,0x88FC,0x88E8,0x88FE,0x88F0,0x8921,0x8919, + 0x8913,0x891B,0x890A,0x8934,0x892B,0x8936,0x8941,0x8966, + 0x897B,0x758B,0x80E5,0x76B2,0x76B4,0x77DC,0x8012,0x8014, + 0x8016,0x801C,0x8020,0x8022,0x8025,0x8026,0x8027,0x8029, + 0x8028,0x8031,0x800B,0x8035,0x8043,0x8046,0x804D,0x8052, + 0x8069,0x8071,0x8983,0x9878,0x9880,0x9883,0x99FA,0x99FB, + 0x99FC,0x99FD,0x99FE,0x99FF,0x9A00,0x9A01,0x9A02,0x9A03, + 0x9A04,0x9A05,0x9A06,0x9A07,0x9A08,0x9A09,0x9A0A,0x9A0B, + 0x9A0C,0x9A0D,0x9A0E,0x9A0F,0x9A10,0x9A11,0x9A12,0x9A13, + 0x9A14,0x9A15,0x9A16,0x9A17,0x9A18,0x9A19,0x9A1A,0x9A1B, + 0x9A1C,0x9A1D,0x9A1E,0x9A1F,0x9A20,0x9A21,0x9A22,0x9A23, + 0x9A24,0x9A25,0x9A26,0x9A27,0x9A28,0x9A29,0x9A2A,0x9A2B, + 0x9A2C,0x9A2D,0x9A2E,0x9A2F,0x9A30,0x9A31,0x9A32,0x9A33, + 0x9A34,0x9A35,0x9A36,0x9A37,0x9A38,0x9A39,0x9A3A,0x9A3B, + 0x9A3C,0x9A3D,0x9A3E,0x9A3F,0x9A40,0x9A41,0x9A42,0x9A43, + 0x9A44,0x9A45,0x9A46,0x9A47,0x9A48,0x9A49,0x9A4A,0x9A4B, + 0x9A4C,0x9A4D,0x9A4E,0x9A4F,0x9A50,0x9A51,0x9A52,0x9A53, + 0x9A54,0x9A55,0x9A56,0x9A57,0x9A58,0x9A59,0x9889,0x988C, + 0x988D,0x988F,0x9894,0x989A,0x989B,0x989E,0x989F,0x98A1, + 0x98A2,0x98A5,0x98A6,0x864D,0x8654,0x866C,0x866E,0x867F, + 0x867A,0x867C,0x867B,0x86A8,0x868D,0x868B,0x86AC,0x869D, + 0x86A7,0x86A3,0x86AA,0x8693,0x86A9,0x86B6,0x86C4,0x86B5, + 0x86CE,0x86B0,0x86BA,0x86B1,0x86AF,0x86C9,0x86CF,0x86B4, + 0x86E9,0x86F1,0x86F2,0x86ED,0x86F3,0x86D0,0x8713,0x86DE, + 0x86F4,0x86DF,0x86D8,0x86D1,0x8703,0x8707,0x86F8,0x8708, + 0x870A,0x870D,0x8709,0x8723,0x873B,0x871E,0x8725,0x872E, + 0x871A,0x873E,0x8748,0x8734,0x8731,0x8729,0x8737,0x873F, + 0x8782,0x8722,0x877D,0x877E,0x877B,0x8760,0x8770,0x874C, + 0x876E,0x878B,0x8753,0x8763,0x877C,0x8764,0x8759,0x8765, + 0x8793,0x87AF,0x87A8,0x87D2,0x9A5A,0x9A5B,0x9A5C,0x9A5D, + 0x9A5E,0x9A5F,0x9A60,0x9A61,0x9A62,0x9A63,0x9A64,0x9A65, + 0x9A66,0x9A67,0x9A68,0x9A69,0x9A6A,0x9A6B,0x9A72,0x9A83, + 0x9A89,0x9A8D,0x9A8E,0x9A94,0x9A95,0x9A99,0x9AA6,0x9AA9, + 0x9AAA,0x9AAB,0x9AAC,0x9AAD,0x9AAE,0x9AAF,0x9AB2,0x9AB3, + 0x9AB4,0x9AB5,0x9AB9,0x9ABB,0x9ABD,0x9ABE,0x9ABF,0x9AC3, + 0x9AC4,0x9AC6,0x9AC7,0x9AC8,0x9AC9,0x9ACA,0x9ACD,0x9ACE, + 0x9ACF,0x9AD0,0x9AD2,0x9AD4,0x9AD5,0x9AD6,0x9AD7,0x9AD9, + 0x9ADA,0x9ADB,0x9ADC,0x9ADD,0x9ADE,0x9AE0,0x9AE2,0x9AE3, + 0x9AE4,0x9AE5,0x9AE7,0x9AE8,0x9AE9,0x9AEA,0x9AEC,0x9AEE, + 0x9AF0,0x9AF1,0x9AF2,0x9AF3,0x9AF4,0x9AF5,0x9AF6,0x9AF7, + 0x9AF8,0x9AFA,0x9AFC,0x9AFD,0x9AFE,0x9AFF,0x9B00,0x9B01, + 0x9B02,0x9B04,0x9B05,0x9B06,0x87C6,0x8788,0x8785,0x87AD, + 0x8797,0x8783,0x87AB,0x87E5,0x87AC,0x87B5,0x87B3,0x87CB, + 0x87D3,0x87BD,0x87D1,0x87C0,0x87CA,0x87DB,0x87EA,0x87E0, + 0x87EE,0x8816,0x8813,0x87FE,0x880A,0x881B,0x8821,0x8839, + 0x883C,0x7F36,0x7F42,0x7F44,0x7F45,0x8210,0x7AFA,0x7AFD, + 0x7B08,0x7B03,0x7B04,0x7B15,0x7B0A,0x7B2B,0x7B0F,0x7B47, + 0x7B38,0x7B2A,0x7B19,0x7B2E,0x7B31,0x7B20,0x7B25,0x7B24, + 0x7B33,0x7B3E,0x7B1E,0x7B58,0x7B5A,0x7B45,0x7B75,0x7B4C, + 0x7B5D,0x7B60,0x7B6E,0x7B7B,0x7B62,0x7B72,0x7B71,0x7B90, + 0x7BA6,0x7BA7,0x7BB8,0x7BAC,0x7B9D,0x7BA8,0x7B85,0x7BAA, + 0x7B9C,0x7BA2,0x7BAB,0x7BB4,0x7BD1,0x7BC1,0x7BCC,0x7BDD, + 0x7BDA,0x7BE5,0x7BE6,0x7BEA,0x7C0C,0x7BFE,0x7BFC,0x7C0F, + 0x7C16,0x7C0B,0x9B07,0x9B09,0x9B0A,0x9B0B,0x9B0C,0x9B0D, + 0x9B0E,0x9B10,0x9B11,0x9B12,0x9B14,0x9B15,0x9B16,0x9B17, + 0x9B18,0x9B19,0x9B1A,0x9B1B,0x9B1C,0x9B1D,0x9B1E,0x9B20, + 0x9B21,0x9B22,0x9B24,0x9B25,0x9B26,0x9B27,0x9B28,0x9B29, + 0x9B2A,0x9B2B,0x9B2C,0x9B2D,0x9B2E,0x9B30,0x9B31,0x9B33, + 0x9B34,0x9B35,0x9B36,0x9B37,0x9B38,0x9B39,0x9B3A,0x9B3D, + 0x9B3E,0x9B3F,0x9B40,0x9B46,0x9B4A,0x9B4B,0x9B4C,0x9B4E, + 0x9B50,0x9B52,0x9B53,0x9B55,0x9B56,0x9B57,0x9B58,0x9B59, + 0x9B5A,0x9B5B,0x9B5C,0x9B5D,0x9B5E,0x9B5F,0x9B60,0x9B61, + 0x9B62,0x9B63,0x9B64,0x9B65,0x9B66,0x9B67,0x9B68,0x9B69, + 0x9B6A,0x9B6B,0x9B6C,0x9B6D,0x9B6E,0x9B6F,0x9B70,0x9B71, + 0x9B72,0x9B73,0x9B74,0x9B75,0x9B76,0x9B77,0x9B78,0x9B79, + 0x9B7A,0x9B7B,0x7C1F,0x7C2A,0x7C26,0x7C38,0x7C41,0x7C40, + 0x81FE,0x8201,0x8202,0x8204,0x81EC,0x8844,0x8221,0x8222, + 0x8223,0x822D,0x822F,0x8228,0x822B,0x8238,0x823B,0x8233, + 0x8234,0x823E,0x8244,0x8249,0x824B,0x824F,0x825A,0x825F, + 0x8268,0x887E,0x8885,0x8888,0x88D8,0x88DF,0x895E,0x7F9D, + 0x7F9F,0x7FA7,0x7FAF,0x7FB0,0x7FB2,0x7C7C,0x6549,0x7C91, + 0x7C9D,0x7C9C,0x7C9E,0x7CA2,0x7CB2,0x7CBC,0x7CBD,0x7CC1, + 0x7CC7,0x7CCC,0x7CCD,0x7CC8,0x7CC5,0x7CD7,0x7CE8,0x826E, + 0x66A8,0x7FBF,0x7FCE,0x7FD5,0x7FE5,0x7FE1,0x7FE6,0x7FE9, + 0x7FEE,0x7FF3,0x7CF8,0x7D77,0x7DA6,0x7DAE,0x7E47,0x7E9B, + 0x9EB8,0x9EB4,0x8D73,0x8D84,0x8D94,0x8D91,0x8DB1,0x8D67, + 0x8D6D,0x8C47,0x8C49,0x914A,0x9150,0x914E,0x914F,0x9164, + 0x9B7C,0x9B7D,0x9B7E,0x9B7F,0x9B80,0x9B81,0x9B82,0x9B83, + 0x9B84,0x9B85,0x9B86,0x9B87,0x9B88,0x9B89,0x9B8A,0x9B8B, + 0x9B8C,0x9B8D,0x9B8E,0x9B8F,0x9B90,0x9B91,0x9B92,0x9B93, + 0x9B94,0x9B95,0x9B96,0x9B97,0x9B98,0x9B99,0x9B9A,0x9B9B, + 0x9B9C,0x9B9D,0x9B9E,0x9B9F,0x9BA0,0x9BA1,0x9BA2,0x9BA3, + 0x9BA4,0x9BA5,0x9BA6,0x9BA7,0x9BA8,0x9BA9,0x9BAA,0x9BAB, + 0x9BAC,0x9BAD,0x9BAE,0x9BAF,0x9BB0,0x9BB1,0x9BB2,0x9BB3, + 0x9BB4,0x9BB5,0x9BB6,0x9BB7,0x9BB8,0x9BB9,0x9BBA,0x9BBB, + 0x9BBC,0x9BBD,0x9BBE,0x9BBF,0x9BC0,0x9BC1,0x9BC2,0x9BC3, + 0x9BC4,0x9BC5,0x9BC6,0x9BC7,0x9BC8,0x9BC9,0x9BCA,0x9BCB, + 0x9BCC,0x9BCD,0x9BCE,0x9BCF,0x9BD0,0x9BD1,0x9BD2,0x9BD3, + 0x9BD4,0x9BD5,0x9BD6,0x9BD7,0x9BD8,0x9BD9,0x9BDA,0x9BDB, + 0x9162,0x9161,0x9170,0x9169,0x916F,0x917D,0x917E,0x9172, + 0x9174,0x9179,0x918C,0x9185,0x9190,0x918D,0x9191,0x91A2, + 0x91A3,0x91AA,0x91AD,0x91AE,0x91AF,0x91B5,0x91B4,0x91BA, + 0x8C55,0x9E7E,0x8DB8,0x8DEB,0x8E05,0x8E59,0x8E69,0x8DB5, + 0x8DBF,0x8DBC,0x8DBA,0x8DC4,0x8DD6,0x8DD7,0x8DDA,0x8DDE, + 0x8DCE,0x8DCF,0x8DDB,0x8DC6,0x8DEC,0x8DF7,0x8DF8,0x8DE3, + 0x8DF9,0x8DFB,0x8DE4,0x8E09,0x8DFD,0x8E14,0x8E1D,0x8E1F, + 0x8E2C,0x8E2E,0x8E23,0x8E2F,0x8E3A,0x8E40,0x8E39,0x8E35, + 0x8E3D,0x8E31,0x8E49,0x8E41,0x8E42,0x8E51,0x8E52,0x8E4A, + 0x8E70,0x8E76,0x8E7C,0x8E6F,0x8E74,0x8E85,0x8E8F,0x8E94, + 0x8E90,0x8E9C,0x8E9E,0x8C78,0x8C82,0x8C8A,0x8C85,0x8C98, + 0x8C94,0x659B,0x89D6,0x89DE,0x89DA,0x89DC,0x9BDC,0x9BDD, + 0x9BDE,0x9BDF,0x9BE0,0x9BE1,0x9BE2,0x9BE3,0x9BE4,0x9BE5, + 0x9BE6,0x9BE7,0x9BE8,0x9BE9,0x9BEA,0x9BEB,0x9BEC,0x9BED, + 0x9BEE,0x9BEF,0x9BF0,0x9BF1,0x9BF2,0x9BF3,0x9BF4,0x9BF5, + 0x9BF6,0x9BF7,0x9BF8,0x9BF9,0x9BFA,0x9BFB,0x9BFC,0x9BFD, + 0x9BFE,0x9BFF,0x9C00,0x9C01,0x9C02,0x9C03,0x9C04,0x9C05, + 0x9C06,0x9C07,0x9C08,0x9C09,0x9C0A,0x9C0B,0x9C0C,0x9C0D, + 0x9C0E,0x9C0F,0x9C10,0x9C11,0x9C12,0x9C13,0x9C14,0x9C15, + 0x9C16,0x9C17,0x9C18,0x9C19,0x9C1A,0x9C1B,0x9C1C,0x9C1D, + 0x9C1E,0x9C1F,0x9C20,0x9C21,0x9C22,0x9C23,0x9C24,0x9C25, + 0x9C26,0x9C27,0x9C28,0x9C29,0x9C2A,0x9C2B,0x9C2C,0x9C2D, + 0x9C2E,0x9C2F,0x9C30,0x9C31,0x9C32,0x9C33,0x9C34,0x9C35, + 0x9C36,0x9C37,0x9C38,0x9C39,0x9C3A,0x9C3B,0x89E5,0x89EB, + 0x89EF,0x8A3E,0x8B26,0x9753,0x96E9,0x96F3,0x96EF,0x9706, + 0x9701,0x9708,0x970F,0x970E,0x972A,0x972D,0x9730,0x973E, + 0x9F80,0x9F83,0x9F85,0x9F86,0x9F87,0x9F88,0x9F89,0x9F8A, + 0x9F8C,0x9EFE,0x9F0B,0x9F0D,0x96B9,0x96BC,0x96BD,0x96CE, + 0x96D2,0x77BF,0x96E0,0x928E,0x92AE,0x92C8,0x933E,0x936A, + 0x93CA,0x938F,0x943E,0x946B,0x9C7F,0x9C82,0x9C85,0x9C86, + 0x9C87,0x9C88,0x7A23,0x9C8B,0x9C8E,0x9C90,0x9C91,0x9C92, + 0x9C94,0x9C95,0x9C9A,0x9C9B,0x9C9E,0x9C9F,0x9CA0,0x9CA1, + 0x9CA2,0x9CA3,0x9CA5,0x9CA6,0x9CA7,0x9CA8,0x9CA9,0x9CAB, + 0x9CAD,0x9CAE,0x9CB0,0x9CB1,0x9CB2,0x9CB3,0x9CB4,0x9CB5, + 0x9CB6,0x9CB7,0x9CBA,0x9CBB,0x9CBC,0x9CBD,0x9CC4,0x9CC5, + 0x9CC6,0x9CC7,0x9CCA,0x9CCB,0x9C3C,0x9C3D,0x9C3E,0x9C3F, + 0x9C40,0x9C41,0x9C42,0x9C43,0x9C44,0x9C45,0x9C46,0x9C47, + 0x9C48,0x9C49,0x9C4A,0x9C4B,0x9C4C,0x9C4D,0x9C4E,0x9C4F, + 0x9C50,0x9C51,0x9C52,0x9C53,0x9C54,0x9C55,0x9C56,0x9C57, + 0x9C58,0x9C59,0x9C5A,0x9C5B,0x9C5C,0x9C5D,0x9C5E,0x9C5F, + 0x9C60,0x9C61,0x9C62,0x9C63,0x9C64,0x9C65,0x9C66,0x9C67, + 0x9C68,0x9C69,0x9C6A,0x9C6B,0x9C6C,0x9C6D,0x9C6E,0x9C6F, + 0x9C70,0x9C71,0x9C72,0x9C73,0x9C74,0x9C75,0x9C76,0x9C77, + 0x9C78,0x9C79,0x9C7A,0x9C7B,0x9C7D,0x9C7E,0x9C80,0x9C83, + 0x9C84,0x9C89,0x9C8A,0x9C8C,0x9C8F,0x9C93,0x9C96,0x9C97, + 0x9C98,0x9C99,0x9C9D,0x9CAA,0x9CAC,0x9CAF,0x9CB9,0x9CBE, + 0x9CBF,0x9CC0,0x9CC1,0x9CC2,0x9CC8,0x9CC9,0x9CD1,0x9CD2, + 0x9CDA,0x9CDB,0x9CE0,0x9CE1,0x9CCC,0x9CCD,0x9CCE,0x9CCF, + 0x9CD0,0x9CD3,0x9CD4,0x9CD5,0x9CD7,0x9CD8,0x9CD9,0x9CDC, + 0x9CDD,0x9CDF,0x9CE2,0x977C,0x9785,0x9791,0x9792,0x9794, + 0x97AF,0x97AB,0x97A3,0x97B2,0x97B4,0x9AB1,0x9AB0,0x9AB7, + 0x9E58,0x9AB6,0x9ABA,0x9ABC,0x9AC1,0x9AC0,0x9AC5,0x9AC2, + 0x9ACB,0x9ACC,0x9AD1,0x9B45,0x9B43,0x9B47,0x9B49,0x9B48, + 0x9B4D,0x9B51,0x98E8,0x990D,0x992E,0x9955,0x9954,0x9ADF, + 0x9AE1,0x9AE6,0x9AEF,0x9AEB,0x9AFB,0x9AED,0x9AF9,0x9B08, + 0x9B0F,0x9B13,0x9B1F,0x9B23,0x9EBD,0x9EBE,0x7E3B,0x9E82, + 0x9E87,0x9E88,0x9E8B,0x9E92,0x93D6,0x9E9D,0x9E9F,0x9EDB, + 0x9EDC,0x9EDD,0x9EE0,0x9EDF,0x9EE2,0x9EE9,0x9EE7,0x9EE5, + 0x9EEA,0x9EEF,0x9F22,0x9F2C,0x9F2F,0x9F39,0x9F37,0x9F3D, + 0x9F3E,0x9F44,0x9CE3,0x9CE4,0x9CE5,0x9CE6,0x9CE7,0x9CE8, + 0x9CE9,0x9CEA,0x9CEB,0x9CEC,0x9CED,0x9CEE,0x9CEF,0x9CF0, + 0x9CF1,0x9CF2,0x9CF3,0x9CF4,0x9CF5,0x9CF6,0x9CF7,0x9CF8, + 0x9CF9,0x9CFA,0x9CFB,0x9CFC,0x9CFD,0x9CFE,0x9CFF,0x9D00, + 0x9D01,0x9D02,0x9D03,0x9D04,0x9D05,0x9D06,0x9D07,0x9D08, + 0x9D09,0x9D0A,0x9D0B,0x9D0C,0x9D0D,0x9D0E,0x9D0F,0x9D10, + 0x9D11,0x9D12,0x9D13,0x9D14,0x9D15,0x9D16,0x9D17,0x9D18, + 0x9D19,0x9D1A,0x9D1B,0x9D1C,0x9D1D,0x9D1E,0x9D1F,0x9D20, + 0x9D21,0x9D22,0x9D23,0x9D24,0x9D25,0x9D26,0x9D27,0x9D28, + 0x9D29,0x9D2A,0x9D2B,0x9D2C,0x9D2D,0x9D2E,0x9D2F,0x9D30, + 0x9D31,0x9D32,0x9D33,0x9D34,0x9D35,0x9D36,0x9D37,0x9D38, + 0x9D39,0x9D3A,0x9D3B,0x9D3C,0x9D3D,0x9D3E,0x9D3F,0x9D40, + 0x9D41,0x9D42,0xE234,0xE235,0xE236,0xE237,0xE238,0xE239, + 0xE23A,0xE23B,0xE23C,0xE23D,0xE23E,0xE23F,0xE240,0xE241, + 0xE242,0xE243,0xE244,0xE245,0xE246,0xE247,0xE248,0xE249, + 0xE24A,0xE24B,0xE24C,0xE24D,0xE24E,0xE24F,0xE250,0xE251, + 0xE252,0xE253,0xE254,0xE255,0xE256,0xE257,0xE258,0xE259, + 0xE25A,0xE25B,0xE25C,0xE25D,0xE25E,0xE25F,0xE260,0xE261, + 0xE262,0xE263,0xE264,0xE265,0xE266,0xE267,0xE268,0xE269, + 0xE26A,0xE26B,0xE26C,0xE26D,0xE26E,0xE26F,0xE270,0xE271, + 0xE272,0xE273,0xE274,0xE275,0xE276,0xE277,0xE278,0xE279, + 0xE27A,0xE27B,0xE27C,0xE27D,0xE27E,0xE27F,0xE280,0xE281, + 0xE282,0xE283,0xE284,0xE285,0xE286,0xE287,0xE288,0xE289, + 0xE28A,0xE28B,0xE28C,0xE28D,0xE28E,0xE28F,0xE290,0xE291, + 0x9D43,0x9D44,0x9D45,0x9D46,0x9D47,0x9D48,0x9D49,0x9D4A, + 0x9D4B,0x9D4C,0x9D4D,0x9D4E,0x9D4F,0x9D50,0x9D51,0x9D52, + 0x9D53,0x9D54,0x9D55,0x9D56,0x9D57,0x9D58,0x9D59,0x9D5A, + 0x9D5B,0x9D5C,0x9D5D,0x9D5E,0x9D5F,0x9D60,0x9D61,0x9D62, + 0x9D63,0x9D64,0x9D65,0x9D66,0x9D67,0x9D68,0x9D69,0x9D6A, + 0x9D6B,0x9D6C,0x9D6D,0x9D6E,0x9D6F,0x9D70,0x9D71,0x9D72, + 0x9D73,0x9D74,0x9D75,0x9D76,0x9D77,0x9D78,0x9D79,0x9D7A, + 0x9D7B,0x9D7C,0x9D7D,0x9D7E,0x9D7F,0x9D80,0x9D81,0x9D82, + 0x9D83,0x9D84,0x9D85,0x9D86,0x9D87,0x9D88,0x9D89,0x9D8A, + 0x9D8B,0x9D8C,0x9D8D,0x9D8E,0x9D8F,0x9D90,0x9D91,0x9D92, + 0x9D93,0x9D94,0x9D95,0x9D96,0x9D97,0x9D98,0x9D99,0x9D9A, + 0x9D9B,0x9D9C,0x9D9D,0x9D9E,0x9D9F,0x9DA0,0x9DA1,0x9DA2, + 0xE292,0xE293,0xE294,0xE295,0xE296,0xE297,0xE298,0xE299, + 0xE29A,0xE29B,0xE29C,0xE29D,0xE29E,0xE29F,0xE2A0,0xE2A1, + 0xE2A2,0xE2A3,0xE2A4,0xE2A5,0xE2A6,0xE2A7,0xE2A8,0xE2A9, + 0xE2AA,0xE2AB,0xE2AC,0xE2AD,0xE2AE,0xE2AF,0xE2B0,0xE2B1, + 0xE2B2,0xE2B3,0xE2B4,0xE2B5,0xE2B6,0xE2B7,0xE2B8,0xE2B9, + 0xE2BA,0xE2BB,0xE2BC,0xE2BD,0xE2BE,0xE2BF,0xE2C0,0xE2C1, + 0xE2C2,0xE2C3,0xE2C4,0xE2C5,0xE2C6,0xE2C7,0xE2C8,0xE2C9, + 0xE2CA,0xE2CB,0xE2CC,0xE2CD,0xE2CE,0xE2CF,0xE2D0,0xE2D1, + 0xE2D2,0xE2D3,0xE2D4,0xE2D5,0xE2D6,0xE2D7,0xE2D8,0xE2D9, + 0xE2DA,0xE2DB,0xE2DC,0xE2DD,0xE2DE,0xE2DF,0xE2E0,0xE2E1, + 0xE2E2,0xE2E3,0xE2E4,0xE2E5,0xE2E6,0xE2E7,0xE2E8,0xE2E9, + 0xE2EA,0xE2EB,0xE2EC,0xE2ED,0xE2EE,0xE2EF,0x9DA3,0x9DA4, + 0x9DA5,0x9DA6,0x9DA7,0x9DA8,0x9DA9,0x9DAA,0x9DAB,0x9DAC, + 0x9DAD,0x9DAE,0x9DAF,0x9DB0,0x9DB1,0x9DB2,0x9DB3,0x9DB4, + 0x9DB5,0x9DB6,0x9DB7,0x9DB8,0x9DB9,0x9DBA,0x9DBB,0x9DBC, + 0x9DBD,0x9DBE,0x9DBF,0x9DC0,0x9DC1,0x9DC2,0x9DC3,0x9DC4, + 0x9DC5,0x9DC6,0x9DC7,0x9DC8,0x9DC9,0x9DCA,0x9DCB,0x9DCC, + 0x9DCD,0x9DCE,0x9DCF,0x9DD0,0x9DD1,0x9DD2,0x9DD3,0x9DD4, + 0x9DD5,0x9DD6,0x9DD7,0x9DD8,0x9DD9,0x9DDA,0x9DDB,0x9DDC, + 0x9DDD,0x9DDE,0x9DDF,0x9DE0,0x9DE1,0x9DE2,0x9DE3,0x9DE4, + 0x9DE5,0x9DE6,0x9DE7,0x9DE8,0x9DE9,0x9DEA,0x9DEB,0x9DEC, + 0x9DED,0x9DEE,0x9DEF,0x9DF0,0x9DF1,0x9DF2,0x9DF3,0x9DF4, + 0x9DF5,0x9DF6,0x9DF7,0x9DF8,0x9DF9,0x9DFA,0x9DFB,0x9DFC, + 0x9DFD,0x9DFE,0x9DFF,0x9E00,0x9E01,0x9E02,0xE2F0,0xE2F1, + 0xE2F2,0xE2F3,0xE2F4,0xE2F5,0xE2F6,0xE2F7,0xE2F8,0xE2F9, + 0xE2FA,0xE2FB,0xE2FC,0xE2FD,0xE2FE,0xE2FF,0xE300,0xE301, + 0xE302,0xE303,0xE304,0xE305,0xE306,0xE307,0xE308,0xE309, + 0xE30A,0xE30B,0xE30C,0xE30D,0xE30E,0xE30F,0xE310,0xE311, + 0xE312,0xE313,0xE314,0xE315,0xE316,0xE317,0xE318,0xE319, + 0xE31A,0xE31B,0xE31C,0xE31D,0xE31E,0xE31F,0xE320,0xE321, + 0xE322,0xE323,0xE324,0xE325,0xE326,0xE327,0xE328,0xE329, + 0xE32A,0xE32B,0xE32C,0xE32D,0xE32E,0xE32F,0xE330,0xE331, + 0xE332,0xE333,0xE334,0xE335,0xE336,0xE337,0xE338,0xE339, + 0xE33A,0xE33B,0xE33C,0xE33D,0xE33E,0xE33F,0xE340,0xE341, + 0xE342,0xE343,0xE344,0xE345,0xE346,0xE347,0xE348,0xE349, + 0xE34A,0xE34B,0xE34C,0xE34D,0x9E03,0x9E04,0x9E05,0x9E06, + 0x9E07,0x9E08,0x9E09,0x9E0A,0x9E0B,0x9E0C,0x9E0D,0x9E0E, + 0x9E0F,0x9E10,0x9E11,0x9E12,0x9E13,0x9E14,0x9E15,0x9E16, + 0x9E17,0x9E18,0x9E19,0x9E1A,0x9E1B,0x9E1C,0x9E1D,0x9E1E, + 0x9E24,0x9E27,0x9E2E,0x9E30,0x9E34,0x9E3B,0x9E3C,0x9E40, + 0x9E4D,0x9E50,0x9E52,0x9E53,0x9E54,0x9E56,0x9E59,0x9E5D, + 0x9E5F,0x9E60,0x9E61,0x9E62,0x9E65,0x9E6E,0x9E6F,0x9E72, + 0x9E74,0x9E75,0x9E76,0x9E77,0x9E78,0x9E79,0x9E7A,0x9E7B, + 0x9E7C,0x9E7D,0x9E80,0x9E81,0x9E83,0x9E84,0x9E85,0x9E86, + 0x9E89,0x9E8A,0x9E8C,0x9E8D,0x9E8E,0x9E8F,0x9E90,0x9E91, + 0x9E94,0x9E95,0x9E96,0x9E97,0x9E98,0x9E99,0x9E9A,0x9E9B, + 0x9E9C,0x9E9E,0x9EA0,0x9EA1,0x9EA2,0x9EA3,0x9EA4,0x9EA5, + 0x9EA7,0x9EA8,0x9EA9,0x9EAA,0xE34E,0xE34F,0xE350,0xE351, + 0xE352,0xE353,0xE354,0xE355,0xE356,0xE357,0xE358,0xE359, + 0xE35A,0xE35B,0xE35C,0xE35D,0xE35E,0xE35F,0xE360,0xE361, + 0xE362,0xE363,0xE364,0xE365,0xE366,0xE367,0xE368,0xE369, + 0xE36A,0xE36B,0xE36C,0xE36D,0xE36E,0xE36F,0xE370,0xE371, + 0xE372,0xE373,0xE374,0xE375,0xE376,0xE377,0xE378,0xE379, + 0xE37A,0xE37B,0xE37C,0xE37D,0xE37E,0xE37F,0xE380,0xE381, + 0xE382,0xE383,0xE384,0xE385,0xE386,0xE387,0xE388,0xE389, + 0xE38A,0xE38B,0xE38C,0xE38D,0xE38E,0xE38F,0xE390,0xE391, + 0xE392,0xE393,0xE394,0xE395,0xE396,0xE397,0xE398,0xE399, + 0xE39A,0xE39B,0xE39C,0xE39D,0xE39E,0xE39F,0xE3A0,0xE3A1, + 0xE3A2,0xE3A3,0xE3A4,0xE3A5,0xE3A6,0xE3A7,0xE3A8,0xE3A9, + 0xE3AA,0xE3AB,0x9EAB,0x9EAC,0x9EAD,0x9EAE,0x9EAF,0x9EB0, + 0x9EB1,0x9EB2,0x9EB3,0x9EB5,0x9EB6,0x9EB7,0x9EB9,0x9EBA, + 0x9EBC,0x9EBF,0x9EC0,0x9EC1,0x9EC2,0x9EC3,0x9EC5,0x9EC6, + 0x9EC7,0x9EC8,0x9ECA,0x9ECB,0x9ECC,0x9ED0,0x9ED2,0x9ED3, + 0x9ED5,0x9ED6,0x9ED7,0x9ED9,0x9EDA,0x9EDE,0x9EE1,0x9EE3, + 0x9EE4,0x9EE6,0x9EE8,0x9EEB,0x9EEC,0x9EED,0x9EEE,0x9EF0, + 0x9EF1,0x9EF2,0x9EF3,0x9EF4,0x9EF5,0x9EF6,0x9EF7,0x9EF8, + 0x9EFA,0x9EFD,0x9EFF,0x9F00,0x9F01,0x9F02,0x9F03,0x9F04, + 0x9F05,0x9F06,0x9F07,0x9F08,0x9F09,0x9F0A,0x9F0C,0x9F0F, + 0x9F11,0x9F12,0x9F14,0x9F15,0x9F16,0x9F18,0x9F1A,0x9F1B, + 0x9F1C,0x9F1D,0x9F1E,0x9F1F,0x9F21,0x9F23,0x9F24,0x9F25, + 0x9F26,0x9F27,0x9F28,0x9F29,0x9F2A,0x9F2B,0x9F2D,0x9F2E, + 0x9F30,0x9F31,0xE3AC,0xE3AD,0xE3AE,0xE3AF,0xE3B0,0xE3B1, + 0xE3B2,0xE3B3,0xE3B4,0xE3B5,0xE3B6,0xE3B7,0xE3B8,0xE3B9, + 0xE3BA,0xE3BB,0xE3BC,0xE3BD,0xE3BE,0xE3BF,0xE3C0,0xE3C1, + 0xE3C2,0xE3C3,0xE3C4,0xE3C5,0xE3C6,0xE3C7,0xE3C8,0xE3C9, + 0xE3CA,0xE3CB,0xE3CC,0xE3CD,0xE3CE,0xE3CF,0xE3D0,0xE3D1, + 0xE3D2,0xE3D3,0xE3D4,0xE3D5,0xE3D6,0xE3D7,0xE3D8,0xE3D9, + 0xE3DA,0xE3DB,0xE3DC,0xE3DD,0xE3DE,0xE3DF,0xE3E0,0xE3E1, + 0xE3E2,0xE3E3,0xE3E4,0xE3E5,0xE3E6,0xE3E7,0xE3E8,0xE3E9, + 0xE3EA,0xE3EB,0xE3EC,0xE3ED,0xE3EE,0xE3EF,0xE3F0,0xE3F1, + 0xE3F2,0xE3F3,0xE3F4,0xE3F5,0xE3F6,0xE3F7,0xE3F8,0xE3F9, + 0xE3FA,0xE3FB,0xE3FC,0xE3FD,0xE3FE,0xE3FF,0xE400,0xE401, + 0xE402,0xE403,0xE404,0xE405,0xE406,0xE407,0xE408,0xE409, + 0x9F32,0x9F33,0x9F34,0x9F35,0x9F36,0x9F38,0x9F3A,0x9F3C, + 0x9F3F,0x9F40,0x9F41,0x9F42,0x9F43,0x9F45,0x9F46,0x9F47, + 0x9F48,0x9F49,0x9F4A,0x9F4B,0x9F4C,0x9F4D,0x9F4E,0x9F4F, + 0x9F52,0x9F53,0x9F54,0x9F55,0x9F56,0x9F57,0x9F58,0x9F59, + 0x9F5A,0x9F5B,0x9F5C,0x9F5D,0x9F5E,0x9F5F,0x9F60,0x9F61, + 0x9F62,0x9F63,0x9F64,0x9F65,0x9F66,0x9F67,0x9F68,0x9F69, + 0x9F6A,0x9F6B,0x9F6C,0x9F6D,0x9F6E,0x9F6F,0x9F70,0x9F71, + 0x9F72,0x9F73,0x9F74,0x9F75,0x9F76,0x9F77,0x9F78,0x9F79, + 0x9F7A,0x9F7B,0x9F7C,0x9F7D,0x9F7E,0x9F81,0x9F82,0x9F8D, + 0x9F8E,0x9F8F,0x9F90,0x9F91,0x9F92,0x9F93,0x9F94,0x9F95, + 0x9F96,0x9F97,0x9F98,0x9F9C,0x9F9D,0x9F9E,0x9FA1,0x9FA2, + 0x9FA3,0x9FA4,0x9FA5,0xF92C,0xF979,0xF995,0xF9E7,0xF9F1, + 0xE40A,0xE40B,0xE40C,0xE40D,0xE40E,0xE40F,0xE410,0xE411, + 0xE412,0xE413,0xE414,0xE415,0xE416,0xE417,0xE418,0xE419, + 0xE41A,0xE41B,0xE41C,0xE41D,0xE41E,0xE41F,0xE420,0xE421, + 0xE422,0xE423,0xE424,0xE425,0xE426,0xE427,0xE428,0xE429, + 0xE42A,0xE42B,0xE42C,0xE42D,0xE42E,0xE42F,0xE430,0xE431, + 0xE432,0xE433,0xE434,0xE435,0xE436,0xE437,0xE438,0xE439, + 0xE43A,0xE43B,0xE43C,0xE43D,0xE43E,0xE43F,0xE440,0xE441, + 0xE442,0xE443,0xE444,0xE445,0xE446,0xE447,0xE448,0xE449, + 0xE44A,0xE44B,0xE44C,0xE44D,0xE44E,0xE44F,0xE450,0xE451, + 0xE452,0xE453,0xE454,0xE455,0xE456,0xE457,0xE458,0xE459, + 0xE45A,0xE45B,0xE45C,0xE45D,0xE45E,0xE45F,0xE460,0xE461, + 0xE462,0xE463,0xE464,0xE465,0xE466,0xE467,0xFA0C,0xFA0D, + 0xFA0E,0xFA0F,0xFA11,0xFA13,0xFA14,0xFA18,0xFA1F,0xFA20, + 0xFA21,0xFA23,0xFA24,0xFA27,0xFA28,0xFA29,0x2E81,0xE816, + 0xE817,0xE818,0x2E84,0x3473,0x3447,0x2E88,0x2E8B,0xE81E, + 0x359E,0x361A,0x360E,0x2E8C,0x2E97,0x396E,0x3918,0xE826, + 0x39CF,0x39DF,0x3A73,0x39D0,0xE82B,0xE82C,0x3B4E,0x3C6E, + 0x3CE0,0x2EA7,0xE831,0xE832,0x2EAA,0x4056,0x415F,0x2EAE, + 0x4337,0x2EB3,0x2EB6,0x2EB7,0xE83B,0x43B1,0x43AC,0x2EBB, + 0x43DD,0x44D6,0x4661,0x464C,0xE843,0x4723,0x4729,0x477C, + 0x478D,0x2ECA,0x4947,0x497A,0x497D,0x4982,0x4983,0x4985, + 0x4986,0x499F,0x499B,0x49B7,0x49B6,0xE854,0xE855,0x4CA3, + 0x4C9F,0x4CA0,0x4CA1,0x4C77,0x4CA2,0x4D13,0x4D14,0x4D15, + 0x4D16,0x4D17,0x4D18,0x4D19,0x4DAE,0xE864,0xE468,0xE469, + 0xE46A,0xE46B,0xE46C,0xE46D,0xE46E,0xE46F,0xE470,0xE471, + 0xE472,0xE473,0xE474,0xE475,0xE476,0xE477,0xE478,0xE479, + 0xE47A,0xE47B,0xE47C,0xE47D,0xE47E,0xE47F,0xE480,0xE481, + 0xE482,0xE483,0xE484,0xE485,0xE486,0xE487,0xE488,0xE489, + 0xE48A,0xE48B,0xE48C,0xE48D,0xE48E,0xE48F,0xE490,0xE491, + 0xE492,0xE493,0xE494,0xE495,0xE496,0xE497,0xE498,0xE499, + 0xE49A,0xE49B,0xE49C,0xE49D,0xE49E,0xE49F,0xE4A0,0xE4A1, + 0xE4A2,0xE4A3,0xE4A4,0xE4A5,0xE4A6,0xE4A7,0xE4A8,0xE4A9, + 0xE4AA,0xE4AB,0xE4AC,0xE4AD,0xE4AE,0xE4AF,0xE4B0,0xE4B1, + 0xE4B2,0xE4B3,0xE4B4,0xE4B5,0xE4B6,0xE4B7,0xE4B8,0xE4B9, + 0xE4BA,0xE4BB,0xE4BC,0xE4BD,0xE4BE,0xE4BF,0xE4C0,0xE4C1, + 0xE4C2,0xE4C3,0xE4C4,0xE4C5,0x0080,0x0081,0x0082,0x0083, + 0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B, + 0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,0x0093, + 0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B, + 0x009C,0x009D,0x009E,0x009F,0x00A0,0x00A1,0x00A2,0x00A3, + 0x00A5,0x00A6,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE, + 0x00AF,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B8,0x00B9, + 0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,0x00C0,0x00C1, + 0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9, + 0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,0x00D1, + 0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D8,0x00D9,0x00DA, + 0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,0x00E2,0x00E3,0x00E4, + 0x00E5,0x00E6,0x00E7,0x00EB,0x00EE,0x00EF,0x00F0,0x00F1, + 0x00F4,0x00F5,0x00F6,0x00F8,0x00FB,0x00FD,0x00FE,0x00FF, + 0x0100,0x0102,0x0103,0x0104,0x0105,0x0106,0x0107,0x0108, + 0x0109,0x010A,0x010B,0x010C,0x010D,0x010E,0x010F,0x0110, + 0x0111,0x0112,0x0114,0x0115,0x0116,0x0117,0x0118,0x0119, + 0x011A,0x011C,0x011D,0x011E,0x011F,0x0120,0x0121,0x0122, + 0x0123,0x0124,0x0125,0x0126,0x0127,0x0128,0x0129,0x012A, + 0x012C,0x012D,0x012E,0x012F,0x0130,0x0131,0x0132,0x0133, + 0x0134,0x0135,0x0136,0x0137,0x0138,0x0139,0x013A,0x013B, + 0x013C,0x013D,0x013E,0x013F,0x0140,0x0141,0x0142,0x0143, + 0x0145,0x0146,0x0147,0x0149,0x014A,0x014B,0x014C,0x014E, + 0x014F,0x0150,0x0151,0x0152,0x0153,0x0154,0x0155,0x0156, + 0x0157,0x0158,0x0159,0x015A,0x015B,0x015C,0x015D,0x015E, + 0x015F,0x0160,0x0161,0x0162,0x0163,0x0164,0x0165,0x0166, + 0x0167,0x0168,0x0169,0x016A,0x016C,0x016D,0x016E,0x016F, + 0x0170,0x0171,0x0172,0x0173,0x0174,0x0175,0x0176,0x0177, + 0x0178,0x0179,0x017A,0x017B,0x017C,0x017D,0x017E,0x017F, + 0x0180,0x0181,0x0182,0x0183,0x0184,0x0185,0x0186,0x0187, + 0x0188,0x0189,0x018A,0x018B,0x018C,0x018D,0x018E,0x018F, + 0x0190,0x0191,0x0192,0x0193,0x0194,0x0195,0x0196,0x0197, + 0x0198,0x0199,0x019A,0x019B,0x019C,0x019D,0x019E,0x019F, + 0x01A0,0x01A1,0x01A2,0x01A3,0x01A4,0x01A5,0x01A6,0x01A7, + 0x01A8,0x01A9,0x01AA,0x01AB,0x01AC,0x01AD,0x01AE,0x01AF, + 0x01B0,0x01B1,0x01B2,0x01B3,0x01B4,0x01B5,0x01B6,0x01B7, + 0x01B8,0x01B9,0x01BA,0x01BB,0x01BC,0x01BD,0x01BE,0x01BF, + 0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C6,0x01C7, + 0x01C8,0x01C9,0x01CA,0x01CB,0x01CC,0x01CD,0x01CF,0x01D1, + 0x01D3,0x01D5,0x01D7,0x01D9,0x01DB,0x01DD,0x01DE,0x01DF, + 0x01E0,0x01E1,0x01E2,0x01E3,0x01E4,0x01E5,0x01E6,0x01E7, + 0x01E8,0x01E9,0x01EA,0x01EB,0x01EC,0x01ED,0x01EE,0x01EF, + 0x01F0,0x01F1,0x01F2,0x01F3,0x01F4,0x01F5,0x01F6,0x01F7, + 0x01F8,0x01FA,0x01FB,0x01FC,0x01FD,0x01FE,0x01FF,0x0200, + 0x0201,0x0202,0x0203,0x0204,0x0205,0x0206,0x0207,0x0208, + 0x0209,0x020A,0x020B,0x020C,0x020D,0x020E,0x020F,0x0210, + 0x0211,0x0212,0x0213,0x0214,0x0215,0x0216,0x0217,0x0218, + 0x0219,0x021A,0x021B,0x021C,0x021D,0x021E,0x021F,0x0220, + 0x0221,0x0222,0x0223,0x0224,0x0225,0x0226,0x0227,0x0228, + 0x0229,0x022A,0x022B,0x022C,0x022D,0x022E,0x022F,0x0230, + 0x0231,0x0232,0x0233,0x0234,0x0235,0x0236,0x0237,0x0238, + 0x0239,0x023A,0x023B,0x023C,0x023D,0x023E,0x023F,0x0240, + 0x0241,0x0242,0x0243,0x0244,0x0245,0x0246,0x0247,0x0248, + 0x0249,0x024A,0x024B,0x024C,0x024D,0x024E,0x024F,0x0250, + 0x0252,0x0253,0x0254,0x0255,0x0256,0x0257,0x0258,0x0259, + 0x025A,0x025B,0x025C,0x025D,0x025E,0x025F,0x0260,0x0262, + 0x0263,0x0264,0x0265,0x0266,0x0267,0x0268,0x0269,0x026A, + 0x026B,0x026C,0x026D,0x026E,0x026F,0x0270,0x0271,0x0272, + 0x0273,0x0274,0x0275,0x0276,0x0277,0x0278,0x0279,0x027A, + 0x027B,0x027C,0x027D,0x027E,0x027F,0x0280,0x0281,0x0282, + 0x0283,0x0284,0x0285,0x0286,0x0287,0x0288,0x0289,0x028A, + 0x028B,0x028C,0x028D,0x028E,0x028F,0x0290,0x0291,0x0292, + 0x0293,0x0294,0x0295,0x0296,0x0297,0x0298,0x0299,0x029A, + 0x029B,0x029C,0x029D,0x029E,0x029F,0x02A0,0x02A1,0x02A2, + 0x02A3,0x02A4,0x02A5,0x02A6,0x02A7,0x02A8,0x02A9,0x02AA, + 0x02AB,0x02AC,0x02AD,0x02AE,0x02AF,0x02B0,0x02B1,0x02B2, + 0x02B3,0x02B4,0x02B5,0x02B6,0x02B7,0x02B8,0x02B9,0x02BA, + 0x02BB,0x02BC,0x02BD,0x02BE,0x02BF,0x02C0,0x02C1,0x02C2, + 0x02C3,0x02C4,0x02C5,0x02C6,0x02C8,0x02CC,0x02CD,0x02CE, + 0x02CF,0x02D0,0x02D1,0x02D2,0x02D3,0x02D4,0x02D5,0x02D6, + 0x02D7,0x02D8,0x02DA,0x02DB,0x02DC,0x02DD,0x02DE,0x02DF, + 0x02E0,0x02E1,0x02E2,0x02E3,0x02E4,0x02E5,0x02E6,0x02E7, + 0x02E8,0x02E9,0x02EA,0x02EB,0x02EC,0x02ED,0x02EE,0x02EF, + 0x02F0,0x02F1,0x02F2,0x02F3,0x02F4,0x02F5,0x02F6,0x02F7, + 0x02F8,0x02F9,0x02FA,0x02FB,0x02FC,0x02FD,0x02FE,0x02FF, + 0x0300,0x0301,0x0302,0x0303,0x0304,0x0305,0x0306,0x0307, + 0x0308,0x0309,0x030A,0x030B,0x030C,0x030D,0x030E,0x030F, + 0x0310,0x0311,0x0312,0x0313,0x0314,0x0315,0x0316,0x0317, + 0x0318,0x0319,0x031A,0x031B,0x031C,0x031D,0x031E,0x031F, + 0x0320,0x0321,0x0322,0x0323,0x0324,0x0325,0x0326,0x0327, + 0x0328,0x0329,0x032A,0x032B,0x032C,0x032D,0x032E,0x032F, + 0x0330,0x0331,0x0332,0x0333,0x0334,0x0335,0x0336,0x0337, + 0x0338,0x0339,0x033A,0x033B,0x033C,0x033D,0x033E,0x033F, + 0x0340,0x0341,0x0342,0x0343,0x0344,0x0345,0x0346,0x0347, + 0x0348,0x0349,0x034A,0x034B,0x034C,0x034D,0x034E,0x034F, + 0x0350,0x0351,0x0352,0x0353,0x0354,0x0355,0x0356,0x0357, + 0x0358,0x0359,0x035A,0x035B,0x035C,0x035D,0x035E,0x035F, + 0x0360,0x0361,0x0362,0x0363,0x0364,0x0365,0x0366,0x0367, + 0x0368,0x0369,0x036A,0x036B,0x036C,0x036D,0x036E,0x036F, + 0x0370,0x0371,0x0372,0x0373,0x0374,0x0375,0x0376,0x0377, + 0x0378,0x0379,0x037A,0x037B,0x037C,0x037D,0x037E,0x037F, + 0x0380,0x0381,0x0382,0x0383,0x0384,0x0385,0x0386,0x0387, + 0x0388,0x0389,0x038A,0x038B,0x038C,0x038D,0x038E,0x038F, + 0x0390,0x03A2,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF, + 0x03B0,0x03C2,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x03CF, + 0x03D0,0x03D1,0x03D2,0x03D3,0x03D4,0x03D5,0x03D6,0x03D7, + 0x03D8,0x03D9,0x03DA,0x03DB,0x03DC,0x03DD,0x03DE,0x03DF, + 0x03E0,0x03E1,0x03E2,0x03E3,0x03E4,0x03E5,0x03E6,0x03E7, + 0x03E8,0x03E9,0x03EA,0x03EB,0x03EC,0x03ED,0x03EE,0x03EF, + 0x03F0,0x03F1,0x03F2,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7, + 0x03F8,0x03F9,0x03FA,0x03FB,0x03FC,0x03FD,0x03FE,0x03FF, + 0x0400,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408, + 0x0409,0x040A,0x040B,0x040C,0x040D,0x040E,0x040F,0x0450, + 0x2011,0x2012,0x2017,0x201A,0x201B,0x201E,0x201F,0x2020, + 0x2021,0x2022,0x2023,0x2024,0x2027,0x2028,0x2029,0x202A, + 0x202B,0x202C,0x202D,0x202E,0x202F,0x2031,0x2034,0x2036, + 0x2037,0x2038,0x2039,0x203A,0x203C,0x203D,0x203E,0x203F, + 0x2040,0x2041,0x2042,0x2043,0x2044,0x2045,0x2046,0x2047, + 0x2048,0x2049,0x204A,0x204B,0x204C,0x204D,0x204E,0x204F, + 0x2050,0x2051,0x2052,0x2053,0x2054,0x2055,0x2056,0x2057, + 0x2058,0x2059,0x205A,0x205B,0x205C,0x205D,0x205E,0x205F, + 0x2060,0x2061,0x2062,0x2063,0x2064,0x2065,0x2066,0x2067, + 0x2068,0x2069,0x206A,0x206B,0x206C,0x206D,0x206E,0x206F, + 0x2070,0x2071,0x2072,0x2073,0x2074,0x2075,0x2076,0x2077, + 0x2078,0x2079,0x207A,0x207B,0x207C,0x207D,0x207E,0x207F, + 0x2080,0x2081,0x2082,0x2083,0x2084,0x2085,0x2086,0x2087, + 0x2088,0x2089,0x208A,0x208B,0x208C,0x208D,0x208E,0x208F, + 0x2090,0x2091,0x2092,0x2093,0x2094,0x2095,0x2096,0x2097, + 0x2098,0x2099,0x209A,0x209B,0x209C,0x209D,0x209E,0x209F, + 0x20A0,0x20A1,0x20A2,0x20A3,0x20A4,0x20A5,0x20A6,0x20A7, + 0x20A8,0x20A9,0x20AA,0x20AB,0x20AD,0x20AE,0x20AF,0x20B0, + 0x20B1,0x20B2,0x20B3,0x20B4,0x20B5,0x20B6,0x20B7,0x20B8, + 0x20B9,0x20BA,0x20BB,0x20BC,0x20BD,0x20BE,0x20BF,0x20C0, + 0x20C1,0x20C2,0x20C3,0x20C4,0x20C5,0x20C6,0x20C7,0x20C8, + 0x20C9,0x20CA,0x20CB,0x20CC,0x20CD,0x20CE,0x20CF,0x20D0, + 0x20D1,0x20D2,0x20D3,0x20D4,0x20D5,0x20D6,0x20D7,0x20D8, + 0x20D9,0x20DA,0x20DB,0x20DC,0x20DD,0x20DE,0x20DF,0x20E0, + 0x20E1,0x20E2,0x20E3,0x20E4,0x20E5,0x20E6,0x20E7,0x20E8, + 0x20E9,0x20EA,0x20EB,0x20EC,0x20ED,0x20EE,0x20EF,0x20F0, + 0x20F1,0x20F2,0x20F3,0x20F4,0x20F5,0x20F6,0x20F7,0x20F8, + 0x20F9,0x20FA,0x20FB,0x20FC,0x20FD,0x20FE,0x20FF,0x2100, + 0x2101,0x2102,0x2104,0x2106,0x2107,0x2108,0x210A,0x210B, + 0x210C,0x210D,0x210E,0x210F,0x2110,0x2111,0x2112,0x2113, + 0x2114,0x2115,0x2117,0x2118,0x2119,0x211A,0x211B,0x211C, + 0x211D,0x211E,0x211F,0x2120,0x2122,0x2123,0x2124,0x2125, + 0x2126,0x2127,0x2128,0x2129,0x212A,0x212B,0x212C,0x212D, + 0x212E,0x212F,0x2130,0x2131,0x2132,0x2133,0x2134,0x2135, + 0x2136,0x2137,0x2138,0x2139,0x213A,0x213B,0x213C,0x213D, + 0x213E,0x213F,0x2140,0x2141,0x2142,0x2143,0x2144,0x2145, + 0x2146,0x2147,0x2148,0x2149,0x214A,0x214B,0x214C,0x214D, + 0x214E,0x214F,0x2150,0x2151,0x2152,0x2153,0x2154,0x2155, + 0x2156,0x2157,0x2158,0x2159,0x215A,0x215B,0x215C,0x215D, + 0x215E,0x215F,0x216C,0x216D,0x216E,0x216F,0x217A,0x217B, + 0x217C,0x217D,0x217E,0x217F,0x2180,0x2181,0x2182,0x2183, + 0x2184,0x2185,0x2186,0x2187,0x2188,0x2189,0x218A,0x218B, + 0x218C,0x218D,0x218E,0x218F,0x2194,0x2195,0x219A,0x219B, + 0x219C,0x219D,0x219E,0x219F,0x21A0,0x21A1,0x21A2,0x21A3, + 0x21A4,0x21A5,0x21A6,0x21A7,0x21A8,0x21A9,0x21AA,0x21AB, + 0x21AC,0x21AD,0x21AE,0x21AF,0x21B0,0x21B1,0x21B2,0x21B3, + 0x21B4,0x21B5,0x21B6,0x21B7,0x21B8,0x21B9,0x21BA,0x21BB, + 0x21BC,0x21BD,0x21BE,0x21BF,0x21C0,0x21C1,0x21C2,0x21C3, + 0x21C4,0x21C5,0x21C6,0x21C7,0x21C8,0x21C9,0x21CA,0x21CB, + 0x21CC,0x21CD,0x21CE,0x21CF,0x21D0,0x21D1,0x21D2,0x21D3, + 0x21D4,0x21D5,0x21D6,0x21D7,0x21D8,0x21D9,0x21DA,0x21DB, + 0x21DC,0x21DD,0x21DE,0x21DF,0x21E0,0x21E1,0x21E2,0x21E3, + 0x21E4,0x21E5,0x21E6,0x21E7,0x21E8,0x21E9,0x21EA,0x21EB, + 0x21EC,0x21ED,0x21EE,0x21EF,0x21F0,0x21F1,0x21F2,0x21F3, + 0x21F4,0x21F5,0x21F6,0x21F7,0x21F8,0x21F9,0x21FA,0x21FB, + 0x21FC,0x21FD,0x21FE,0x21FF,0x2200,0x2201,0x2202,0x2203, + 0x2204,0x2205,0x2206,0x2207,0x2209,0x220A,0x220B,0x220C, + 0x220D,0x220E,0x2210,0x2212,0x2213,0x2214,0x2216,0x2217, + 0x2218,0x2219,0x221B,0x221C,0x2221,0x2222,0x2224,0x2226, + 0x222C,0x222D,0x222F,0x2230,0x2231,0x2232,0x2233,0x2238, + 0x2239,0x223A,0x223B,0x223C,0x223E,0x223F,0x2240,0x2241, + 0x2242,0x2243,0x2244,0x2245,0x2246,0x2247,0x2249,0x224A, + 0x224B,0x224D,0x224E,0x224F,0x2250,0x2251,0x2253,0x2254, + 0x2255,0x2256,0x2257,0x2258,0x2259,0x225A,0x225B,0x225C, + 0x225D,0x225E,0x225F,0x2262,0x2263,0x2268,0x2269,0x226A, + 0x226B,0x226C,0x226D,0x2270,0x2271,0x2272,0x2273,0x2274, + 0x2275,0x2276,0x2277,0x2278,0x2279,0x227A,0x227B,0x227C, + 0x227D,0x227E,0x227F,0x2280,0x2281,0x2282,0x2283,0x2284, + 0x2285,0x2286,0x2287,0x2288,0x2289,0x228A,0x228B,0x228C, + 0x228D,0x228E,0x228F,0x2290,0x2291,0x2292,0x2293,0x2294, + 0x2296,0x2297,0x2298,0x229A,0x229B,0x229C,0x229D,0x229E, + 0x229F,0x22A0,0x22A1,0x22A2,0x22A3,0x22A4,0x22A6,0x22A7, + 0x22A8,0x22A9,0x22AA,0x22AB,0x22AC,0x22AD,0x22AE,0x22AF, + 0x22B0,0x22B1,0x22B2,0x22B3,0x22B4,0x22B5,0x22B6,0x22B7, + 0x22B8,0x22B9,0x22BA,0x22BB,0x22BC,0x22BD,0x22BE,0x22C0, + 0x22C1,0x22C2,0x22C3,0x22C4,0x22C5,0x22C6,0x22C7,0x22C8, + 0x22C9,0x22CA,0x22CB,0x22CC,0x22CD,0x22CE,0x22CF,0x22D0, + 0x22D1,0x22D2,0x22D3,0x22D4,0x22D5,0x22D6,0x22D7,0x22D8, + 0x22D9,0x22DA,0x22DB,0x22DC,0x22DD,0x22DE,0x22DF,0x22E0, + 0x22E1,0x22E2,0x22E3,0x22E4,0x22E5,0x22E6,0x22E7,0x22E8, + 0x22E9,0x22EA,0x22EB,0x22EC,0x22ED,0x22EE,0x22EF,0x22F0, + 0x22F1,0x22F2,0x22F3,0x22F4,0x22F5,0x22F6,0x22F7,0x22F8, + 0x22F9,0x22FA,0x22FB,0x22FC,0x22FD,0x22FE,0x22FF,0x2300, + 0x2301,0x2302,0x2303,0x2304,0x2305,0x2306,0x2307,0x2308, + 0x2309,0x230A,0x230B,0x230C,0x230D,0x230E,0x230F,0x2310, + 0x2311,0x2313,0x2314,0x2315,0x2316,0x2317,0x2318,0x2319, + 0x231A,0x231B,0x231C,0x231D,0x231E,0x231F,0x2320,0x2321, + 0x2322,0x2323,0x2324,0x2325,0x2326,0x2327,0x2328,0x2329, + 0x232A,0x232B,0x232C,0x232D,0x232E,0x232F,0x2330,0x2331, + 0x2332,0x2333,0x2334,0x2335,0x2336,0x2337,0x2338,0x2339, + 0x233A,0x233B,0x233C,0x233D,0x233E,0x233F,0x2340,0x2341, + 0x2342,0x2343,0x2344,0x2345,0x2346,0x2347,0x2348,0x2349, + 0x234A,0x234B,0x234C,0x234D,0x234E,0x234F,0x2350,0x2351, + 0x2352,0x2353,0x2354,0x2355,0x2356,0x2357,0x2358,0x2359, + 0x235A,0x235B,0x235C,0x235D,0x235E,0x235F,0x2360,0x2361, + 0x2362,0x2363,0x2364,0x2365,0x2366,0x2367,0x2368,0x2369, + 0x236A,0x236B,0x236C,0x236D,0x236E,0x236F,0x2370,0x2371, + 0x2372,0x2373,0x2374,0x2375,0x2376,0x2377,0x2378,0x2379, + 0x237A,0x237B,0x237C,0x237D,0x237E,0x237F,0x2380,0x2381, + 0x2382,0x2383,0x2384,0x2385,0x2386,0x2387,0x2388,0x2389, + 0x238A,0x238B,0x238C,0x238D,0x238E,0x238F,0x2390,0x2391, + 0x2392,0x2393,0x2394,0x2395,0x2396,0x2397,0x2398,0x2399, + 0x239A,0x239B,0x239C,0x239D,0x239E,0x239F,0x23A0,0x23A1, + 0x23A2,0x23A3,0x23A4,0x23A5,0x23A6,0x23A7,0x23A8,0x23A9, + 0x23AA,0x23AB,0x23AC,0x23AD,0x23AE,0x23AF,0x23B0,0x23B1, + 0x23B2,0x23B3,0x23B4,0x23B5,0x23B6,0x23B7,0x23B8,0x23B9, + 0x23BA,0x23BB,0x23BC,0x23BD,0x23BE,0x23BF,0x23C0,0x23C1, + 0x23C2,0x23C3,0x23C4,0x23C5,0x23C6,0x23C7,0x23C8,0x23C9, + 0x23CA,0x23CB,0x23CC,0x23CD,0x23CE,0x23CF,0x23D0,0x23D1, + 0x23D2,0x23D3,0x23D4,0x23D5,0x23D6,0x23D7,0x23D8,0x23D9, + 0x23DA,0x23DB,0x23DC,0x23DD,0x23DE,0x23DF,0x23E0,0x23E1, + 0x23E2,0x23E3,0x23E4,0x23E5,0x23E6,0x23E7,0x23E8,0x23E9, + 0x23EA,0x23EB,0x23EC,0x23ED,0x23EE,0x23EF,0x23F0,0x23F1, + 0x23F2,0x23F3,0x23F4,0x23F5,0x23F6,0x23F7,0x23F8,0x23F9, + 0x23FA,0x23FB,0x23FC,0x23FD,0x23FE,0x23FF,0x2400,0x2401, + 0x2402,0x2403,0x2404,0x2405,0x2406,0x2407,0x2408,0x2409, + 0x240A,0x240B,0x240C,0x240D,0x240E,0x240F,0x2410,0x2411, + 0x2412,0x2413,0x2414,0x2415,0x2416,0x2417,0x2418,0x2419, + 0x241A,0x241B,0x241C,0x241D,0x241E,0x241F,0x2420,0x2421, + 0x2422,0x2423,0x2424,0x2425,0x2426,0x2427,0x2428,0x2429, + 0x242A,0x242B,0x242C,0x242D,0x242E,0x242F,0x2430,0x2431, + 0x2432,0x2433,0x2434,0x2435,0x2436,0x2437,0x2438,0x2439, + 0x243A,0x243B,0x243C,0x243D,0x243E,0x243F,0x2440,0x2441, + 0x2442,0x2443,0x2444,0x2445,0x2446,0x2447,0x2448,0x2449, + 0x244A,0x244B,0x244C,0x244D,0x244E,0x244F,0x2450,0x2451, + 0x2452,0x2453,0x2454,0x2455,0x2456,0x2457,0x2458,0x2459, + 0x245A,0x245B,0x245C,0x245D,0x245E,0x245F,0x246A,0x246B, + 0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,0x2472,0x2473, + 0x249C,0x249D,0x249E,0x249F,0x24A0,0x24A1,0x24A2,0x24A3, + 0x24A4,0x24A5,0x24A6,0x24A7,0x24A8,0x24A9,0x24AA,0x24AB, + 0x24AC,0x24AD,0x24AE,0x24AF,0x24B0,0x24B1,0x24B2,0x24B3, + 0x24B4,0x24B5,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB, + 0x24BC,0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3, + 0x24C4,0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB, + 0x24CC,0x24CD,0x24CE,0x24CF,0x24D0,0x24D1,0x24D2,0x24D3, + 0x24D4,0x24D5,0x24D6,0x24D7,0x24D8,0x24D9,0x24DA,0x24DB, + 0x24DC,0x24DD,0x24DE,0x24DF,0x24E0,0x24E1,0x24E2,0x24E3, + 0x24E4,0x24E5,0x24E6,0x24E7,0x24E8,0x24E9,0x24EA,0x24EB, + 0x24EC,0x24ED,0x24EE,0x24EF,0x24F0,0x24F1,0x24F2,0x24F3, + 0x24F4,0x24F5,0x24F6,0x24F7,0x24F8,0x24F9,0x24FA,0x24FB, + 0x24FC,0x24FD,0x24FE,0x24FF,0x254C,0x254D,0x254E,0x254F, + 0x2574,0x2575,0x2576,0x2577,0x2578,0x2579,0x257A,0x257B, + 0x257C,0x257D,0x257E,0x257F,0x2580,0x2590,0x2591,0x2592, + 0x2596,0x2597,0x2598,0x2599,0x259A,0x259B,0x259C,0x259D, + 0x259E,0x259F,0x25A2,0x25A3,0x25A4,0x25A5,0x25A6,0x25A7, + 0x25A8,0x25A9,0x25AA,0x25AB,0x25AC,0x25AD,0x25AE,0x25AF, + 0x25B0,0x25B1,0x25B4,0x25B5,0x25B6,0x25B7,0x25B8,0x25B9, + 0x25BA,0x25BB,0x25BE,0x25BF,0x25C0,0x25C1,0x25C2,0x25C3, + 0x25C4,0x25C5,0x25C8,0x25C9,0x25CA,0x25CC,0x25CD,0x25D0, + 0x25D1,0x25D2,0x25D3,0x25D4,0x25D5,0x25D6,0x25D7,0x25D8, + 0x25D9,0x25DA,0x25DB,0x25DC,0x25DD,0x25DE,0x25DF,0x25E0, + 0x25E1,0x25E6,0x25E7,0x25E8,0x25E9,0x25EA,0x25EB,0x25EC, + 0x25ED,0x25EE,0x25EF,0x25F0,0x25F1,0x25F2,0x25F3,0x25F4, + 0x25F5,0x25F6,0x25F7,0x25F8,0x25F9,0x25FA,0x25FB,0x25FC, + 0x25FD,0x25FE,0x25FF,0x2600,0x2601,0x2602,0x2603,0x2604, + 0x2607,0x2608,0x260A,0x260B,0x260C,0x260D,0x260E,0x260F, + 0x2610,0x2611,0x2612,0x2613,0x2614,0x2615,0x2616,0x2617, + 0x2618,0x2619,0x261A,0x261B,0x261C,0x261D,0x261E,0x261F, + 0x2620,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626,0x2627, + 0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E,0x262F, + 0x2630,0x2631,0x2632,0x2633,0x2634,0x2635,0x2636,0x2637, + 0x2638,0x2639,0x263A,0x263B,0x263C,0x263D,0x263E,0x263F, + 0x2641,0x2E82,0x2E83,0x2E85,0x2E86,0x2E87,0x2E89,0x2E8A, + 0x2E8D,0x2E8E,0x2E8F,0x2E90,0x2E91,0x2E92,0x2E93,0x2E94, + 0x2E95,0x2E96,0x2E98,0x2E99,0x2E9A,0x2E9B,0x2E9C,0x2E9D, + 0x2E9E,0x2E9F,0x2EA0,0x2EA1,0x2EA2,0x2EA3,0x2EA4,0x2EA5, + 0x2EA6,0x2EA8,0x2EA9,0x2EAB,0x2EAC,0x2EAD,0x2EAF,0x2EB0, + 0x2EB1,0x2EB2,0x2EB4,0x2EB5,0x2EB8,0x2EB9,0x2EBA,0x2EBC, + 0x2EBD,0x2EBE,0x2EBF,0x2EC0,0x2EC1,0x2EC2,0x2EC3,0x2EC4, + 0x2EC5,0x2EC6,0x2EC7,0x2EC8,0x2EC9,0x2ECB,0x2ECC,0x2ECD, + 0x2ECE,0x2ECF,0x2ED0,0x2ED1,0x2ED2,0x2ED3,0x2ED4,0x2ED5, + 0x2ED6,0x2ED7,0x2ED8,0x2ED9,0x2EDA,0x2EDB,0x2EDC,0x2EDD, + 0x2EDE,0x2EDF,0x2EE0,0x2EE1,0x2EE2,0x2EE3,0x2EE4,0x2EE5, + 0x2EE6,0x2EE7,0x2EE8,0x2EE9,0x2EEA,0x2EEB,0x2EEC,0x2EED, + 0x2EEE,0x2EEF,0x2EF0,0x2EF1,0x2EF2,0x2EF3,0x2EF4,0x2EF5, + 0x2EF6,0x2EF7,0x2EF8,0x2EF9,0x2EFA,0x2EFB,0x2EFC,0x2EFD, + 0x2EFE,0x2EFF,0x2F00,0x2F01,0x2F02,0x2F03,0x2F04,0x2F05, + 0x2F06,0x2F07,0x2F08,0x2F09,0x2F0A,0x2F0B,0x2F0C,0x2F0D, + 0x2F0E,0x2F0F,0x2F10,0x2F11,0x2F12,0x2F13,0x2F14,0x2F15, + 0x2F16,0x2F17,0x2F18,0x2F19,0x2F1A,0x2F1B,0x2F1C,0x2F1D, + 0x2F1E,0x2F1F,0x2F20,0x2F21,0x2F22,0x2F23,0x2F24,0x2F25, + 0x2F26,0x2F27,0x2F28,0x2F29,0x2F2A,0x2F2B,0x2F2C,0x2F2D, + 0x2F2E,0x2F2F,0x2F30,0x2F31,0x2F32,0x2F33,0x2F34,0x2F35, + 0x2F36,0x2F37,0x2F38,0x2F39,0x2F3A,0x2F3B,0x2F3C,0x2F3D, + 0x2F3E,0x2F3F,0x2F40,0x2F41,0x2F42,0x2F43,0x2F44,0x2F45, + 0x2F46,0x2F47,0x2F48,0x2F49,0x2F4A,0x2F4B,0x2F4C,0x2F4D, + 0x2F4E,0x2F4F,0x2F50,0x2F51,0x2F52,0x2F53,0x2F54,0x2F55, + 0x2F56,0x2F57,0x2F58,0x2F59,0x2F5A,0x2F5B,0x2F5C,0x2F5D, + 0x2F5E,0x2F5F,0x2F60,0x2F61,0x2F62,0x2F63,0x2F64,0x2F65, + 0x2F66,0x2F67,0x2F68,0x2F69,0x2F6A,0x2F6B,0x2F6C,0x2F6D, + 0x2F6E,0x2F6F,0x2F70,0x2F71,0x2F72,0x2F73,0x2F74,0x2F75, + 0x2F76,0x2F77,0x2F78,0x2F79,0x2F7A,0x2F7B,0x2F7C,0x2F7D, + 0x2F7E,0x2F7F,0x2F80,0x2F81,0x2F82,0x2F83,0x2F84,0x2F85, + 0x2F86,0x2F87,0x2F88,0x2F89,0x2F8A,0x2F8B,0x2F8C,0x2F8D, + 0x2F8E,0x2F8F,0x2F90,0x2F91,0x2F92,0x2F93,0x2F94,0x2F95, + 0x2F96,0x2F97,0x2F98,0x2F99,0x2F9A,0x2F9B,0x2F9C,0x2F9D, + 0x2F9E,0x2F9F,0x2FA0,0x2FA1,0x2FA2,0x2FA3,0x2FA4,0x2FA5, + 0x2FA6,0x2FA7,0x2FA8,0x2FA9,0x2FAA,0x2FAB,0x2FAC,0x2FAD, + 0x2FAE,0x2FAF,0x2FB0,0x2FB1,0x2FB2,0x2FB3,0x2FB4,0x2FB5, + 0x2FB6,0x2FB7,0x2FB8,0x2FB9,0x2FBA,0x2FBB,0x2FBC,0x2FBD, + 0x2FBE,0x2FBF,0x2FC0,0x2FC1,0x2FC2,0x2FC3,0x2FC4,0x2FC5, + 0x2FC6,0x2FC7,0x2FC8,0x2FC9,0x2FCA,0x2FCB,0x2FCC,0x2FCD, + 0x2FCE,0x2FCF,0x2FD0,0x2FD1,0x2FD2,0x2FD3,0x2FD4,0x2FD5, + 0x2FD6,0x2FD7,0x2FD8,0x2FD9,0x2FDA,0x2FDB,0x2FDC,0x2FDD, + 0x2FDE,0x2FDF,0x2FE0,0x2FE1,0x2FE2,0x2FE3,0x2FE4,0x2FE5, + 0x2FE6,0x2FE7,0x2FE8,0x2FE9,0x2FEA,0x2FEB,0x2FEC,0x2FED, + 0x2FEE,0x2FEF,0x2FFC,0x2FFD,0x2FFE,0x2FFF,0x3004,0x3018, + 0x3019,0x301A,0x301B,0x301C,0x301F,0x3020,0x302A,0x302B, + 0x302C,0x302D,0x302E,0x302F,0x3030,0x3031,0x3032,0x3033, + 0x3034,0x3035,0x3036,0x3037,0x3038,0x3039,0x303A,0x303B, + 0x303C,0x303D,0x303F,0x3040,0x3094,0x3095,0x3096,0x3097, + 0x3098,0x3099,0x309A,0x309F,0x30A0,0x30F7,0x30F8,0x30F9, + 0x30FA,0x30FB,0x30FF,0x3100,0x3101,0x3102,0x3103,0x3104, + 0x312A,0x312B,0x312C,0x312D,0x312E,0x312F,0x3130,0x3131, + 0x3132,0x3133,0x3134,0x3135,0x3136,0x3137,0x3138,0x3139, + 0x313A,0x313B,0x313C,0x313D,0x313E,0x313F,0x3140,0x3141, + 0x3142,0x3143,0x3144,0x3145,0x3146,0x3147,0x3148,0x3149, + 0x314A,0x314B,0x314C,0x314D,0x314E,0x314F,0x3150,0x3151, + 0x3152,0x3153,0x3154,0x3155,0x3156,0x3157,0x3158,0x3159, + 0x315A,0x315B,0x315C,0x315D,0x315E,0x315F,0x3160,0x3161, + 0x3162,0x3163,0x3164,0x3165,0x3166,0x3167,0x3168,0x3169, + 0x316A,0x316B,0x316C,0x316D,0x316E,0x316F,0x3170,0x3171, + 0x3172,0x3173,0x3174,0x3175,0x3176,0x3177,0x3178,0x3179, + 0x317A,0x317B,0x317C,0x317D,0x317E,0x317F,0x3180,0x3181, + 0x3182,0x3183,0x3184,0x3185,0x3186,0x3187,0x3188,0x3189, + 0x318A,0x318B,0x318C,0x318D,0x318E,0x318F,0x3190,0x3191, + 0x3192,0x3193,0x3194,0x3195,0x3196,0x3197,0x3198,0x3199, + 0x319A,0x319B,0x319C,0x319D,0x319E,0x319F,0x31A0,0x31A1, + 0x31A2,0x31A3,0x31A4,0x31A5,0x31A6,0x31A7,0x31A8,0x31A9, + 0x31AA,0x31AB,0x31AC,0x31AD,0x31AE,0x31AF,0x31B0,0x31B1, + 0x31B2,0x31B3,0x31B4,0x31B5,0x31B6,0x31B7,0x31B8,0x31B9, + 0x31BA,0x31BB,0x31BC,0x31BD,0x31BE,0x31BF,0x31C0,0x31C1, + 0x31C2,0x31C3,0x31C4,0x31C5,0x31C6,0x31C7,0x31C8,0x31C9, + 0x31CA,0x31CB,0x31CC,0x31CD,0x31CE,0x31CF,0x31D0,0x31D1, + 0x31D2,0x31D3,0x31D4,0x31D5,0x31D6,0x31D7,0x31D8,0x31D9, + 0x31DA,0x31DB,0x31DC,0x31DD,0x31DE,0x31DF,0x31E0,0x31E1, + 0x31E2,0x31E3,0x31E4,0x31E5,0x31E6,0x31E7,0x31E8,0x31E9, + 0x31EA,0x31EB,0x31EC,0x31ED,0x31EE,0x31EF,0x31F0,0x31F1, + 0x31F2,0x31F3,0x31F4,0x31F5,0x31F6,0x31F7,0x31F8,0x31F9, + 0x31FA,0x31FB,0x31FC,0x31FD,0x31FE,0x31FF,0x3200,0x3201, + 0x3202,0x3203,0x3204,0x3205,0x3206,0x3207,0x3208,0x3209, + 0x320A,0x320B,0x320C,0x320D,0x320E,0x320F,0x3210,0x3211, + 0x3212,0x3213,0x3214,0x3215,0x3216,0x3217,0x3218,0x3219, + 0x321A,0x321B,0x321C,0x321D,0x321E,0x321F,0x322A,0x322B, + 0x322C,0x322D,0x322E,0x322F,0x3230,0x3232,0x3233,0x3234, + 0x3235,0x3236,0x3237,0x3238,0x3239,0x323A,0x323B,0x323C, + 0x323D,0x323E,0x323F,0x3240,0x3241,0x3242,0x3243,0x3244, + 0x3245,0x3246,0x3247,0x3248,0x3249,0x324A,0x324B,0x324C, + 0x324D,0x324E,0x324F,0x3250,0x3251,0x3252,0x3253,0x3254, + 0x3255,0x3256,0x3257,0x3258,0x3259,0x325A,0x325B,0x325C, + 0x325D,0x325E,0x325F,0x3260,0x3261,0x3262,0x3263,0x3264, + 0x3265,0x3266,0x3267,0x3268,0x3269,0x326A,0x326B,0x326C, + 0x326D,0x326E,0x326F,0x3270,0x3271,0x3272,0x3273,0x3274, + 0x3275,0x3276,0x3277,0x3278,0x3279,0x327A,0x327B,0x327C, + 0x327D,0x327E,0x327F,0x3280,0x3281,0x3282,0x3283,0x3284, + 0x3285,0x3286,0x3287,0x3288,0x3289,0x328A,0x328B,0x328C, + 0x328D,0x328E,0x328F,0x3290,0x3291,0x3292,0x3293,0x3294, + 0x3295,0x3296,0x3297,0x3298,0x3299,0x329A,0x329B,0x329C, + 0x329D,0x329E,0x329F,0x32A0,0x32A1,0x32A2,0x32A4,0x32A5, + 0x32A6,0x32A7,0x32A8,0x32A9,0x32AA,0x32AB,0x32AC,0x32AD, + 0x32AE,0x32AF,0x32B0,0x32B1,0x32B2,0x32B3,0x32B4,0x32B5, + 0x32B6,0x32B7,0x32B8,0x32B9,0x32BA,0x32BB,0x32BC,0x32BD, + 0x32BE,0x32BF,0x32C0,0x32C1,0x32C2,0x32C3,0x32C4,0x32C5, + 0x32C6,0x32C7,0x32C8,0x32C9,0x32CA,0x32CB,0x32CC,0x32CD, + 0x32CE,0x32CF,0x32D0,0x32D1,0x32D2,0x32D3,0x32D4,0x32D5, + 0x32D6,0x32D7,0x32D8,0x32D9,0x32DA,0x32DB,0x32DC,0x32DD, + 0x32DE,0x32DF,0x32E0,0x32E1,0x32E2,0x32E3,0x32E4,0x32E5, + 0x32E6,0x32E7,0x32E8,0x32E9,0x32EA,0x32EB,0x32EC,0x32ED, + 0x32EE,0x32EF,0x32F0,0x32F1,0x32F2,0x32F3,0x32F4,0x32F5, + 0x32F6,0x32F7,0x32F8,0x32F9,0x32FA,0x32FB,0x32FC,0x32FD, + 0x32FE,0x32FF,0x3300,0x3301,0x3302,0x3303,0x3304,0x3305, + 0x3306,0x3307,0x3308,0x3309,0x330A,0x330B,0x330C,0x330D, + 0x330E,0x330F,0x3310,0x3311,0x3312,0x3313,0x3314,0x3315, + 0x3316,0x3317,0x3318,0x3319,0x331A,0x331B,0x331C,0x331D, + 0x331E,0x331F,0x3320,0x3321,0x3322,0x3323,0x3324,0x3325, + 0x3326,0x3327,0x3328,0x3329,0x332A,0x332B,0x332C,0x332D, + 0x332E,0x332F,0x3330,0x3331,0x3332,0x3333,0x3334,0x3335, + 0x3336,0x3337,0x3338,0x3339,0x333A,0x333B,0x333C,0x333D, + 0x333E,0x333F,0x3340,0x3341,0x3342,0x3343,0x3344,0x3345, + 0x3346,0x3347,0x3348,0x3349,0x334A,0x334B,0x334C,0x334D, + 0x334E,0x334F,0x3350,0x3351,0x3352,0x3353,0x3354,0x3355, + 0x3356,0x3357,0x3358,0x3359,0x335A,0x335B,0x335C,0x335D, + 0x335E,0x335F,0x3360,0x3361,0x3362,0x3363,0x3364,0x3365, + 0x3366,0x3367,0x3368,0x3369,0x336A,0x336B,0x336C,0x336D, + 0x336E,0x336F,0x3370,0x3371,0x3372,0x3373,0x3374,0x3375, + 0x3376,0x3377,0x3378,0x3379,0x337A,0x337B,0x337C,0x337D, + 0x337E,0x337F,0x3380,0x3381,0x3382,0x3383,0x3384,0x3385, + 0x3386,0x3387,0x3388,0x3389,0x338A,0x338B,0x338C,0x338D, + 0x3390,0x3391,0x3392,0x3393,0x3394,0x3395,0x3396,0x3397, + 0x3398,0x3399,0x339A,0x339B,0x339F,0x33A0,0x33A2,0x33A3, + 0x33A4,0x33A5,0x33A6,0x33A7,0x33A8,0x33A9,0x33AA,0x33AB, + 0x33AC,0x33AD,0x33AE,0x33AF,0x33B0,0x33B1,0x33B2,0x33B3, + 0x33B4,0x33B5,0x33B6,0x33B7,0x33B8,0x33B9,0x33BA,0x33BB, + 0x33BC,0x33BD,0x33BE,0x33BF,0x33C0,0x33C1,0x33C2,0x33C3, + 0x33C5,0x33C6,0x33C7,0x33C8,0x33C9,0x33CA,0x33CB,0x33CC, + 0x33CD,0x33CF,0x33D0,0x33D3,0x33D4,0x33D6,0x33D7,0x33D8, + 0x33D9,0x33DA,0x33DB,0x33DC,0x33DD,0x33DE,0x33DF,0x33E0, + 0x33E1,0x33E2,0x33E3,0x33E4,0x33E5,0x33E6,0x33E7,0x33E8, + 0x33E9,0x33EA,0x33EB,0x33EC,0x33ED,0x33EE,0x33EF,0x33F0, + 0x33F1,0x33F2,0x33F3,0x33F4,0x33F5,0x33F6,0x33F7,0x33F8, + 0x33F9,0x33FA,0x33FB,0x33FC,0x33FD,0x33FE,0x33FF,0x3400, + 0x3401,0x3402,0x3403,0x3404,0x3405,0x3406,0x3407,0x3408, + 0x3409,0x340A,0x340B,0x340C,0x340D,0x340E,0x340F,0x3410, + 0x3411,0x3412,0x3413,0x3414,0x3415,0x3416,0x3417,0x3418, + 0x3419,0x341A,0x341B,0x341C,0x341D,0x341E,0x341F,0x3420, + 0x3421,0x3422,0x3423,0x3424,0x3425,0x3426,0x3427,0x3428, + 0x3429,0x342A,0x342B,0x342C,0x342D,0x342E,0x342F,0x3430, + 0x3431,0x3432,0x3433,0x3434,0x3435,0x3436,0x3437,0x3438, + 0x3439,0x343A,0x343B,0x343C,0x343D,0x343E,0x343F,0x3440, + 0x3441,0x3442,0x3443,0x3444,0x3445,0x3446,0x3448,0x3449, + 0x344A,0x344B,0x344C,0x344D,0x344E,0x344F,0x3450,0x3451, + 0x3452,0x3453,0x3454,0x3455,0x3456,0x3457,0x3458,0x3459, + 0x345A,0x345B,0x345C,0x345D,0x345E,0x345F,0x3460,0x3461, + 0x3462,0x3463,0x3464,0x3465,0x3466,0x3467,0x3468,0x3469, + 0x346A,0x346B,0x346C,0x346D,0x346E,0x346F,0x3470,0x3471, + 0x3472,0x3474,0x3475,0x3476,0x3477,0x3478,0x3479,0x347A, + 0x347B,0x347C,0x347D,0x347E,0x347F,0x3480,0x3481,0x3482, + 0x3483,0x3484,0x3485,0x3486,0x3487,0x3488,0x3489,0x348A, + 0x348B,0x348C,0x348D,0x348E,0x348F,0x3490,0x3491,0x3492, + 0x3493,0x3494,0x3495,0x3496,0x3497,0x3498,0x3499,0x349A, + 0x349B,0x349C,0x349D,0x349E,0x349F,0x34A0,0x34A1,0x34A2, + 0x34A3,0x34A4,0x34A5,0x34A6,0x34A7,0x34A8,0x34A9,0x34AA, + 0x34AB,0x34AC,0x34AD,0x34AE,0x34AF,0x34B0,0x34B1,0x34B2, + 0x34B3,0x34B4,0x34B5,0x34B6,0x34B7,0x34B8,0x34B9,0x34BA, + 0x34BB,0x34BC,0x34BD,0x34BE,0x34BF,0x34C0,0x34C1,0x34C2, + 0x34C3,0x34C4,0x34C5,0x34C6,0x34C7,0x34C8,0x34C9,0x34CA, + 0x34CB,0x34CC,0x34CD,0x34CE,0x34CF,0x34D0,0x34D1,0x34D2, + 0x34D3,0x34D4,0x34D5,0x34D6,0x34D7,0x34D8,0x34D9,0x34DA, + 0x34DB,0x34DC,0x34DD,0x34DE,0x34DF,0x34E0,0x34E1,0x34E2, + 0x34E3,0x34E4,0x34E5,0x34E6,0x34E7,0x34E8,0x34E9,0x34EA, + 0x34EB,0x34EC,0x34ED,0x34EE,0x34EF,0x34F0,0x34F1,0x34F2, + 0x34F3,0x34F4,0x34F5,0x34F6,0x34F7,0x34F8,0x34F9,0x34FA, + 0x34FB,0x34FC,0x34FD,0x34FE,0x34FF,0x3500,0x3501,0x3502, + 0x3503,0x3504,0x3505,0x3506,0x3507,0x3508,0x3509,0x350A, + 0x350B,0x350C,0x350D,0x350E,0x350F,0x3510,0x3511,0x3512, + 0x3513,0x3514,0x3515,0x3516,0x3517,0x3518,0x3519,0x351A, + 0x351B,0x351C,0x351D,0x351E,0x351F,0x3520,0x3521,0x3522, + 0x3523,0x3524,0x3525,0x3526,0x3527,0x3528,0x3529,0x352A, + 0x352B,0x352C,0x352D,0x352E,0x352F,0x3530,0x3531,0x3532, + 0x3533,0x3534,0x3535,0x3536,0x3537,0x3538,0x3539,0x353A, + 0x353B,0x353C,0x353D,0x353E,0x353F,0x3540,0x3541,0x3542, + 0x3543,0x3544,0x3545,0x3546,0x3547,0x3548,0x3549,0x354A, + 0x354B,0x354C,0x354D,0x354E,0x354F,0x3550,0x3551,0x3552, + 0x3553,0x3554,0x3555,0x3556,0x3557,0x3558,0x3559,0x355A, + 0x355B,0x355C,0x355D,0x355E,0x355F,0x3560,0x3561,0x3562, + 0x3563,0x3564,0x3565,0x3566,0x3567,0x3568,0x3569,0x356A, + 0x356B,0x356C,0x356D,0x356E,0x356F,0x3570,0x3571,0x3572, + 0x3573,0x3574,0x3575,0x3576,0x3577,0x3578,0x3579,0x357A, + 0x357B,0x357C,0x357D,0x357E,0x357F,0x3580,0x3581,0x3582, + 0x3583,0x3584,0x3585,0x3586,0x3587,0x3588,0x3589,0x358A, + 0x358B,0x358C,0x358D,0x358E,0x358F,0x3590,0x3591,0x3592, + 0x3593,0x3594,0x3595,0x3596,0x3597,0x3598,0x3599,0x359A, + 0x359B,0x359C,0x359D,0x359F,0x35A0,0x35A1,0x35A2,0x35A3, + 0x35A4,0x35A5,0x35A6,0x35A7,0x35A8,0x35A9,0x35AA,0x35AB, + 0x35AC,0x35AD,0x35AE,0x35AF,0x35B0,0x35B1,0x35B2,0x35B3, + 0x35B4,0x35B5,0x35B6,0x35B7,0x35B8,0x35B9,0x35BA,0x35BB, + 0x35BC,0x35BD,0x35BE,0x35BF,0x35C0,0x35C1,0x35C2,0x35C3, + 0x35C4,0x35C5,0x35C6,0x35C7,0x35C8,0x35C9,0x35CA,0x35CB, + 0x35CC,0x35CD,0x35CE,0x35CF,0x35D0,0x35D1,0x35D2,0x35D3, + 0x35D4,0x35D5,0x35D6,0x35D7,0x35D8,0x35D9,0x35DA,0x35DB, + 0x35DC,0x35DD,0x35DE,0x35DF,0x35E0,0x35E1,0x35E2,0x35E3, + 0x35E4,0x35E5,0x35E6,0x35E7,0x35E8,0x35E9,0x35EA,0x35EB, + 0x35EC,0x35ED,0x35EE,0x35EF,0x35F0,0x35F1,0x35F2,0x35F3, + 0x35F4,0x35F5,0x35F6,0x35F7,0x35F8,0x35F9,0x35FA,0x35FB, + 0x35FC,0x35FD,0x35FE,0x35FF,0x3600,0x3601,0x3602,0x3603, + 0x3604,0x3605,0x3606,0x3607,0x3608,0x3609,0x360A,0x360B, + 0x360C,0x360D,0x360F,0x3610,0x3611,0x3612,0x3613,0x3614, + 0x3615,0x3616,0x3617,0x3618,0x3619,0x3919,0x391A,0x391B, + 0x391C,0x391D,0x391E,0x391F,0x3920,0x3921,0x3922,0x3923, + 0x3924,0x3925,0x3926,0x3927,0x3928,0x3929,0x392A,0x392B, + 0x392C,0x392D,0x392E,0x392F,0x3930,0x3931,0x3932,0x3933, + 0x3934,0x3935,0x3936,0x3937,0x3938,0x3939,0x393A,0x393B, + 0x393C,0x393D,0x393E,0x393F,0x3940,0x3941,0x3942,0x3943, + 0x3944,0x3945,0x3946,0x3947,0x3948,0x3949,0x394A,0x394B, + 0x394C,0x394D,0x394E,0x394F,0x3950,0x3951,0x3952,0x3953, + 0x3954,0x3955,0x3956,0x3957,0x3958,0x3959,0x395A,0x395B, + 0x395C,0x395D,0x395E,0x395F,0x3960,0x3961,0x3962,0x3963, + 0x3964,0x3965,0x3966,0x3967,0x3968,0x3969,0x396A,0x396B, + 0x396C,0x396D,0x396F,0x3970,0x3971,0x3972,0x3973,0x3974, + 0x3975,0x3976,0x3977,0x3978,0x3979,0x397A,0x397B,0x397C, + 0x397D,0x397E,0x397F,0x3980,0x3981,0x3982,0x3983,0x3984, + 0x3985,0x3986,0x3987,0x3988,0x3989,0x398A,0x398B,0x398C, + 0x398D,0x398E,0x398F,0x3990,0x3991,0x3992,0x3993,0x3994, + 0x3995,0x3996,0x3997,0x3998,0x3999,0x399A,0x399B,0x399C, + 0x399D,0x399E,0x399F,0x39A0,0x39A1,0x39A2,0x39A3,0x39A4, + 0x39A5,0x39A6,0x39A7,0x39A8,0x39A9,0x39AA,0x39AB,0x39AC, + 0x39AD,0x39AE,0x39AF,0x39B0,0x39B1,0x39B2,0x39B3,0x39B4, + 0x39B5,0x39B6,0x39B7,0x39B8,0x39B9,0x39BA,0x39BB,0x39BC, + 0x39BD,0x39BE,0x39BF,0x39C0,0x39C1,0x39C2,0x39C3,0x39C4, + 0x39C5,0x39C6,0x39C7,0x39C8,0x39C9,0x39CA,0x39CB,0x39CC, + 0x39CD,0x39CE,0x39D1,0x39D2,0x39D3,0x39D4,0x39D5,0x39D6, + 0x39D7,0x39D8,0x39D9,0x39DA,0x39DB,0x39DC,0x39DD,0x39DE, + 0x39E0,0x39E1,0x39E2,0x39E3,0x39E4,0x39E5,0x39E6,0x39E7, + 0x39E8,0x39E9,0x39EA,0x39EB,0x39EC,0x39ED,0x39EE,0x39EF, + 0x39F0,0x39F1,0x39F2,0x39F3,0x39F4,0x39F5,0x39F6,0x39F7, + 0x39F8,0x39F9,0x39FA,0x39FB,0x39FC,0x39FD,0x39FE,0x39FF, + 0x3A00,0x3A01,0x3A02,0x3A03,0x3A04,0x3A05,0x3A06,0x3A07, + 0x3A08,0x3A09,0x3A0A,0x3A0B,0x3A0C,0x3A0D,0x3A0E,0x3A0F, + 0x3A10,0x3A11,0x3A12,0x3A13,0x3A14,0x3A15,0x3A16,0x3A17, + 0x3A18,0x3A19,0x3A1A,0x3A1B,0x3A1C,0x3A1D,0x3A1E,0x3A1F, + 0x3A20,0x3A21,0x3A22,0x3A23,0x3A24,0x3A25,0x3A26,0x3A27, + 0x3A28,0x3A29,0x3A2A,0x3A2B,0x3A2C,0x3A2D,0x3A2E,0x3A2F, + 0x3A30,0x3A31,0x3A32,0x3A33,0x3A34,0x3A35,0x3A36,0x3A37, + 0x3A38,0x3A39,0x3A3A,0x3A3B,0x3A3C,0x3A3D,0x3A3E,0x3A3F, + 0x3A40,0x3A41,0x3A42,0x3A43,0x3A44,0x3A45,0x3A46,0x3A47, + 0x3A48,0x3A49,0x3A4A,0x3A4B,0x3A4C,0x3A4D,0x3A4E,0x3A4F, + 0x3A50,0x3A51,0x3A52,0x3A53,0x3A54,0x3A55,0x3A56,0x3A57, + 0x3A58,0x3A59,0x3A5A,0x3A5B,0x3A5C,0x3A5D,0x3A5E,0x3A5F, + 0x3A60,0x3A61,0x3A62,0x3A63,0x3A64,0x3A65,0x3A66,0x3A67, + 0x3A68,0x3A69,0x3A6A,0x3A6B,0x3A6C,0x3A6D,0x3A6E,0x3A6F, + 0x3A70,0x3A71,0x3A72,0x3A74,0x3A75,0x3A76,0x3A77,0x3A78, + 0x3A79,0x3A7A,0x3A7B,0x3A7C,0x3A7D,0x3A7E,0x3A7F,0x3A80, + 0x3A81,0x3A82,0x3A83,0x3A84,0x3A85,0x3A86,0x3A87,0x3A88, + 0x3A89,0x3A8A,0x3A8B,0x3A8C,0x3A8D,0x3A8E,0x3A8F,0x3A90, + 0x3A91,0x3A92,0x3A93,0x3A94,0x3A95,0x3A96,0x3A97,0x3A98, + 0x3A99,0x3A9A,0x3A9B,0x3A9C,0x3A9D,0x3A9E,0x3A9F,0x3AA0, + 0x3AA1,0x3AA2,0x3AA3,0x3AA4,0x3AA5,0x3AA6,0x3AA7,0x3AA8, + 0x3AA9,0x3AAA,0x3AAB,0x3AAC,0x3AAD,0x3AAE,0x3AAF,0x3AB0, + 0x3AB1,0x3AB2,0x3AB3,0x3AB4,0x3AB5,0x3AB6,0x3AB7,0x3AB8, + 0x3AB9,0x3ABA,0x3ABB,0x3ABC,0x3ABD,0x3ABE,0x3ABF,0x3AC0, + 0x3AC1,0x3AC2,0x3AC3,0x3AC4,0x3AC5,0x3AC6,0x3AC7,0x3AC8, + 0x3AC9,0x3ACA,0x3ACB,0x3ACC,0x3ACD,0x3ACE,0x3ACF,0x3AD0, + 0x3AD1,0x3AD2,0x3AD3,0x3AD4,0x3AD5,0x3AD6,0x3AD7,0x3AD8, + 0x3AD9,0x3ADA,0x3ADB,0x3ADC,0x3ADD,0x3ADE,0x3ADF,0x3AE0, + 0x3AE1,0x3AE2,0x3AE3,0x3AE4,0x3AE5,0x3AE6,0x3AE7,0x3AE8, + 0x3AE9,0x3AEA,0x3AEB,0x3AEC,0x3AED,0x3AEE,0x3AEF,0x3AF0, + 0x3AF1,0x3AF2,0x3AF3,0x3AF4,0x3AF5,0x3AF6,0x3AF7,0x3AF8, + 0x3AF9,0x3AFA,0x3AFB,0x3AFC,0x3AFD,0x3AFE,0x3AFF,0x3B00, + 0x3B01,0x3B02,0x3B03,0x3B04,0x3B05,0x3B06,0x3B07,0x3B08, + 0x3B09,0x3B0A,0x3B0B,0x3B0C,0x3B0D,0x3B0E,0x3B0F,0x3B10, + 0x3B11,0x3B12,0x3B13,0x3B14,0x3B15,0x3B16,0x3B17,0x3B18, + 0x3B19,0x3B1A,0x3B1B,0x3B1C,0x3B1D,0x3B1E,0x3B1F,0x3B20, + 0x3B21,0x3B22,0x3B23,0x3B24,0x3B25,0x3B26,0x3B27,0x3B28, + 0x3B29,0x3B2A,0x3B2B,0x3B2C,0x3B2D,0x3B2E,0x3B2F,0x3B30, + 0x3B31,0x3B32,0x3B33,0x3B34,0x3B35,0x3B36,0x3B37,0x3B38, + 0x3B39,0x3B3A,0x3B3B,0x3B3C,0x3B3D,0x3B3E,0x3B3F,0x3B40, + 0x3B41,0x3B42,0x3B43,0x3B44,0x3B45,0x3B46,0x3B47,0x3B48, + 0x3B49,0x3B4A,0x3B4B,0x3B4C,0x3B4D,0x3B4F,0x3B50,0x3B51, + 0x3B52,0x3B53,0x3B54,0x3B55,0x3B56,0x3B57,0x3B58,0x3B59, + 0x3B5A,0x3B5B,0x3B5C,0x3B5D,0x3B5E,0x3B5F,0x3B60,0x3B61, + 0x3B62,0x3B63,0x3B64,0x3B65,0x3B66,0x3B67,0x3B68,0x3B69, + 0x3B6A,0x3B6B,0x3B6C,0x3B6D,0x3B6E,0x3B6F,0x3B70,0x3B71, + 0x3B72,0x3B73,0x3B74,0x3B75,0x3B76,0x3B77,0x3B78,0x3B79, + 0x3B7A,0x3B7B,0x3B7C,0x3B7D,0x3B7E,0x3B7F,0x3B80,0x3B81, + 0x3B82,0x3B83,0x3B84,0x3B85,0x3B86,0x3B87,0x3B88,0x3B89, + 0x3B8A,0x3B8B,0x3B8C,0x3B8D,0x3B8E,0x3B8F,0x3B90,0x3B91, + 0x3B92,0x3B93,0x3B94,0x3B95,0x3B96,0x3B97,0x3B98,0x3B99, + 0x3B9A,0x3B9B,0x3B9C,0x3B9D,0x3B9E,0x3B9F,0x3BA0,0x3BA1, + 0x3BA2,0x3BA3,0x3BA4,0x3BA5,0x3BA6,0x3BA7,0x3BA8,0x3BA9, + 0x3BAA,0x3BAB,0x3BAC,0x3BAD,0x3BAE,0x3BAF,0x3BB0,0x3BB1, + 0x3BB2,0x3BB3,0x3BB4,0x3BB5,0x3BB6,0x3BB7,0x3BB8,0x3BB9, + 0x3BBA,0x3BBB,0x3BBC,0x3BBD,0x3BBE,0x3BBF,0x3BC0,0x3BC1, + 0x3BC2,0x3BC3,0x3BC4,0x3BC5,0x3BC6,0x3BC7,0x3BC8,0x3BC9, + 0x3BCA,0x3BCB,0x3BCC,0x3BCD,0x3BCE,0x3BCF,0x3BD0,0x3BD1, + 0x3BD2,0x3BD3,0x3BD4,0x3BD5,0x3BD6,0x3BD7,0x3BD8,0x3BD9, + 0x3BDA,0x3BDB,0x3BDC,0x3BDD,0x3BDE,0x3BDF,0x3BE0,0x3BE1, + 0x3BE2,0x3BE3,0x3BE4,0x3BE5,0x3BE6,0x3BE7,0x3BE8,0x3BE9, + 0x3BEA,0x3BEB,0x3BEC,0x3BED,0x3BEE,0x3BEF,0x3BF0,0x3BF1, + 0x3BF2,0x3BF3,0x3BF4,0x3BF5,0x3BF6,0x3BF7,0x3BF8,0x3BF9, + 0x3BFA,0x3BFB,0x3BFC,0x3BFD,0x3BFE,0x3BFF,0x3C00,0x3C01, + 0x3C02,0x3C03,0x3C04,0x3C05,0x3C06,0x3C07,0x3C08,0x3C09, + 0x3C0A,0x3C0B,0x3C0C,0x3C0D,0x3C0E,0x3C0F,0x3C10,0x3C11, + 0x3C12,0x3C13,0x3C14,0x3C15,0x3C16,0x3C17,0x3C18,0x3C19, + 0x3C1A,0x3C1B,0x3C1C,0x3C1D,0x3C1E,0x3C1F,0x3C20,0x3C21, + 0x3C22,0x3C23,0x3C24,0x3C25,0x3C26,0x3C27,0x3C28,0x3C29, + 0x3C2A,0x3C2B,0x3C2C,0x3C2D,0x3C2E,0x3C2F,0x3C30,0x3C31, + 0x3C32,0x3C33,0x3C34,0x3C35,0x3C36,0x3C37,0x3C38,0x3C39, + 0x3C3A,0x3C3B,0x3C3C,0x3C3D,0x3C3E,0x3C3F,0x3C40,0x3C41, + 0x3C42,0x3C43,0x3C44,0x3C45,0x3C46,0x3C47,0x3C48,0x3C49, + 0x3C4A,0x3C4B,0x3C4C,0x3C4D,0x3C4E,0x3C4F,0x3C50,0x3C51, + 0x3C52,0x3C53,0x3C54,0x3C55,0x3C56,0x3C57,0x3C58,0x3C59, + 0x3C5A,0x3C5B,0x3C5C,0x3C5D,0x3C5E,0x3C5F,0x3C60,0x3C61, + 0x3C62,0x3C63,0x3C64,0x3C65,0x3C66,0x3C67,0x3C68,0x3C69, + 0x3C6A,0x3C6B,0x3C6C,0x3C6D,0x3C6F,0x3C70,0x3C71,0x3C72, + 0x3C73,0x3C74,0x3C75,0x3C76,0x3C77,0x3C78,0x3C79,0x3C7A, + 0x3C7B,0x3C7C,0x3C7D,0x3C7E,0x3C7F,0x3C80,0x3C81,0x3C82, + 0x3C83,0x3C84,0x3C85,0x3C86,0x3C87,0x3C88,0x3C89,0x3C8A, + 0x3C8B,0x3C8C,0x3C8D,0x3C8E,0x3C8F,0x3C90,0x3C91,0x3C92, + 0x3C93,0x3C94,0x3C95,0x3C96,0x3C97,0x3C98,0x3C99,0x3C9A, + 0x3C9B,0x3C9C,0x3C9D,0x3C9E,0x3C9F,0x3CA0,0x3CA1,0x3CA2, + 0x3CA3,0x3CA4,0x3CA5,0x3CA6,0x3CA7,0x3CA8,0x3CA9,0x3CAA, + 0x3CAB,0x3CAC,0x3CAD,0x3CAE,0x3CAF,0x3CB0,0x3CB1,0x3CB2, + 0x3CB3,0x3CB4,0x3CB5,0x3CB6,0x3CB7,0x3CB8,0x3CB9,0x3CBA, + 0x3CBB,0x3CBC,0x3CBD,0x3CBE,0x3CBF,0x3CC0,0x3CC1,0x3CC2, + 0x3CC3,0x3CC4,0x3CC5,0x3CC6,0x3CC7,0x3CC8,0x3CC9,0x3CCA, + 0x3CCB,0x3CCC,0x3CCD,0x3CCE,0x3CCF,0x3CD0,0x3CD1,0x3CD2, + 0x3CD3,0x3CD4,0x3CD5,0x3CD6,0x3CD7,0x3CD8,0x3CD9,0x3CDA, + 0x3CDB,0x3CDC,0x3CDD,0x3CDE,0x3CDF,0x4057,0x4058,0x4059, + 0x405A,0x405B,0x405C,0x405D,0x405E,0x405F,0x4060,0x4061, + 0x4062,0x4063,0x4064,0x4065,0x4066,0x4067,0x4068,0x4069, + 0x406A,0x406B,0x406C,0x406D,0x406E,0x406F,0x4070,0x4071, + 0x4072,0x4073,0x4074,0x4075,0x4076,0x4077,0x4078,0x4079, + 0x407A,0x407B,0x407C,0x407D,0x407E,0x407F,0x4080,0x4081, + 0x4082,0x4083,0x4084,0x4085,0x4086,0x4087,0x4088,0x4089, + 0x408A,0x408B,0x408C,0x408D,0x408E,0x408F,0x4090,0x4091, + 0x4092,0x4093,0x4094,0x4095,0x4096,0x4097,0x4098,0x4099, + 0x409A,0x409B,0x409C,0x409D,0x409E,0x409F,0x40A0,0x40A1, + 0x40A2,0x40A3,0x40A4,0x40A5,0x40A6,0x40A7,0x40A8,0x40A9, + 0x40AA,0x40AB,0x40AC,0x40AD,0x40AE,0x40AF,0x40B0,0x40B1, + 0x40B2,0x40B3,0x40B4,0x40B5,0x40B6,0x40B7,0x40B8,0x40B9, + 0x40BA,0x40BB,0x40BC,0x40BD,0x40BE,0x40BF,0x40C0,0x40C1, + 0x40C2,0x40C3,0x40C4,0x40C5,0x40C6,0x40C7,0x40C8,0x40C9, + 0x40CA,0x40CB,0x40CC,0x40CD,0x40CE,0x40CF,0x40D0,0x40D1, + 0x40D2,0x40D3,0x40D4,0x40D5,0x40D6,0x40D7,0x40D8,0x40D9, + 0x40DA,0x40DB,0x40DC,0x40DD,0x40DE,0x40DF,0x40E0,0x40E1, + 0x40E2,0x40E3,0x40E4,0x40E5,0x40E6,0x40E7,0x40E8,0x40E9, + 0x40EA,0x40EB,0x40EC,0x40ED,0x40EE,0x40EF,0x40F0,0x40F1, + 0x40F2,0x40F3,0x40F4,0x40F5,0x40F6,0x40F7,0x40F8,0x40F9, + 0x40FA,0x40FB,0x40FC,0x40FD,0x40FE,0x40FF,0x4100,0x4101, + 0x4102,0x4103,0x4104,0x4105,0x4106,0x4107,0x4108,0x4109, + 0x410A,0x410B,0x410C,0x410D,0x410E,0x410F,0x4110,0x4111, + 0x4112,0x4113,0x4114,0x4115,0x4116,0x4117,0x4118,0x4119, + 0x411A,0x411B,0x411C,0x411D,0x411E,0x411F,0x4120,0x4121, + 0x4122,0x4123,0x4124,0x4125,0x4126,0x4127,0x4128,0x4129, + 0x412A,0x412B,0x412C,0x412D,0x412E,0x412F,0x4130,0x4131, + 0x4132,0x4133,0x4134,0x4135,0x4136,0x4137,0x4138,0x4139, + 0x413A,0x413B,0x413C,0x413D,0x413E,0x413F,0x4140,0x4141, + 0x4142,0x4143,0x4144,0x4145,0x4146,0x4147,0x4148,0x4149, + 0x414A,0x414B,0x414C,0x414D,0x414E,0x414F,0x4150,0x4151, + 0x4152,0x4153,0x4154,0x4155,0x4156,0x4157,0x4158,0x4159, + 0x415A,0x415B,0x415C,0x415D,0x415E,0x4338,0x4339,0x433A, + 0x433B,0x433C,0x433D,0x433E,0x433F,0x4340,0x4341,0x4342, + 0x4343,0x4344,0x4345,0x4346,0x4347,0x4348,0x4349,0x434A, + 0x434B,0x434C,0x434D,0x434E,0x434F,0x4350,0x4351,0x4352, + 0x4353,0x4354,0x4355,0x4356,0x4357,0x4358,0x4359,0x435A, + 0x435B,0x435C,0x435D,0x435E,0x435F,0x4360,0x4361,0x4362, + 0x4363,0x4364,0x4365,0x4366,0x4367,0x4368,0x4369,0x436A, + 0x436B,0x436C,0x436D,0x436E,0x436F,0x4370,0x4371,0x4372, + 0x4373,0x4374,0x4375,0x4376,0x4377,0x4378,0x4379,0x437A, + 0x437B,0x437C,0x437D,0x437E,0x437F,0x4380,0x4381,0x4382, + 0x4383,0x4384,0x4385,0x4386,0x4387,0x4388,0x4389,0x438A, + 0x438B,0x438C,0x438D,0x438E,0x438F,0x4390,0x4391,0x4392, + 0x4393,0x4394,0x4395,0x4396,0x4397,0x4398,0x4399,0x439A, + 0x439B,0x439C,0x439D,0x439E,0x439F,0x43A0,0x43A1,0x43A2, + 0x43A3,0x43A4,0x43A5,0x43A6,0x43A7,0x43A8,0x43A9,0x43AA, + 0x43AB,0x43AD,0x43AE,0x43AF,0x43B0,0x43B2,0x43B3,0x43B4, + 0x43B5,0x43B6,0x43B7,0x43B8,0x43B9,0x43BA,0x43BB,0x43BC, + 0x43BD,0x43BE,0x43BF,0x43C0,0x43C1,0x43C2,0x43C3,0x43C4, + 0x43C5,0x43C6,0x43C7,0x43C8,0x43C9,0x43CA,0x43CB,0x43CC, + 0x43CD,0x43CE,0x43CF,0x43D0,0x43D1,0x43D2,0x43D3,0x43D4, + 0x43D5,0x43D6,0x43D7,0x43D8,0x43D9,0x43DA,0x43DB,0x43DC, + 0x43DE,0x43DF,0x43E0,0x43E1,0x43E2,0x43E3,0x43E4,0x43E5, + 0x43E6,0x43E7,0x43E8,0x43E9,0x43EA,0x43EB,0x43EC,0x43ED, + 0x43EE,0x43EF,0x43F0,0x43F1,0x43F2,0x43F3,0x43F4,0x43F5, + 0x43F6,0x43F7,0x43F8,0x43F9,0x43FA,0x43FB,0x43FC,0x43FD, + 0x43FE,0x43FF,0x4400,0x4401,0x4402,0x4403,0x4404,0x4405, + 0x4406,0x4407,0x4408,0x4409,0x440A,0x440B,0x440C,0x440D, + 0x440E,0x440F,0x4410,0x4411,0x4412,0x4413,0x4414,0x4415, + 0x4416,0x4417,0x4418,0x4419,0x441A,0x441B,0x441C,0x441D, + 0x441E,0x441F,0x4420,0x4421,0x4422,0x4423,0x4424,0x4425, + 0x4426,0x4427,0x4428,0x4429,0x442A,0x442B,0x442C,0x442D, + 0x442E,0x442F,0x4430,0x4431,0x4432,0x4433,0x4434,0x4435, + 0x4436,0x4437,0x4438,0x4439,0x443A,0x443B,0x443C,0x443D, + 0x443E,0x443F,0x4440,0x4441,0x4442,0x4443,0x4444,0x4445, + 0x4446,0x4447,0x4448,0x4449,0x444A,0x444B,0x444C,0x444D, + 0x444E,0x444F,0x4450,0x4451,0x4452,0x4453,0x4454,0x4455, + 0x4456,0x4457,0x4458,0x4459,0x445A,0x445B,0x445C,0x445D, + 0x445E,0x445F,0x4460,0x4461,0x4462,0x4463,0x4464,0x4465, + 0x4466,0x4467,0x4468,0x4469,0x446A,0x446B,0x446C,0x446D, + 0x446E,0x446F,0x4470,0x4471,0x4472,0x4473,0x4474,0x4475, + 0x4476,0x4477,0x4478,0x4479,0x447A,0x447B,0x447C,0x447D, + 0x447E,0x447F,0x4480,0x4481,0x4482,0x4483,0x4484,0x4485, + 0x4486,0x4487,0x4488,0x4489,0x448A,0x448B,0x448C,0x448D, + 0x448E,0x448F,0x4490,0x4491,0x4492,0x4493,0x4494,0x4495, + 0x4496,0x4497,0x4498,0x4499,0x449A,0x449B,0x449C,0x449D, + 0x449E,0x449F,0x44A0,0x44A1,0x44A2,0x44A3,0x44A4,0x44A5, + 0x44A6,0x44A7,0x44A8,0x44A9,0x44AA,0x44AB,0x44AC,0x44AD, + 0x44AE,0x44AF,0x44B0,0x44B1,0x44B2,0x44B3,0x44B4,0x44B5, + 0x44B6,0x44B7,0x44B8,0x44B9,0x44BA,0x44BB,0x44BC,0x44BD, + 0x44BE,0x44BF,0x44C0,0x44C1,0x44C2,0x44C3,0x44C4,0x44C5, + 0x44C6,0x44C7,0x44C8,0x44C9,0x44CA,0x44CB,0x44CC,0x44CD, + 0x44CE,0x44CF,0x44D0,0x44D1,0x44D2,0x44D3,0x44D4,0x44D5, + 0x464D,0x464E,0x464F,0x4650,0x4651,0x4652,0x4653,0x4654, + 0x4655,0x4656,0x4657,0x4658,0x4659,0x465A,0x465B,0x465C, + 0x465D,0x465E,0x465F,0x4660,0x4662,0x4663,0x4664,0x4665, + 0x4666,0x4667,0x4668,0x4669,0x466A,0x466B,0x466C,0x466D, + 0x466E,0x466F,0x4670,0x4671,0x4672,0x4673,0x4674,0x4675, + 0x4676,0x4677,0x4678,0x4679,0x467A,0x467B,0x467C,0x467D, + 0x467E,0x467F,0x4680,0x4681,0x4682,0x4683,0x4684,0x4685, + 0x4686,0x4687,0x4688,0x4689,0x468A,0x468B,0x468C,0x468D, + 0x468E,0x468F,0x4690,0x4691,0x4692,0x4693,0x4694,0x4695, + 0x4696,0x4697,0x4698,0x4699,0x469A,0x469B,0x469C,0x469D, + 0x469E,0x469F,0x46A0,0x46A1,0x46A2,0x46A3,0x46A4,0x46A5, + 0x46A6,0x46A7,0x46A8,0x46A9,0x46AA,0x46AB,0x46AC,0x46AD, + 0x46AE,0x46AF,0x46B0,0x46B1,0x46B2,0x46B3,0x46B4,0x46B5, + 0x46B6,0x46B7,0x46B8,0x46B9,0x46BA,0x46BB,0x46BC,0x46BD, + 0x46BE,0x46BF,0x46C0,0x46C1,0x46C2,0x46C3,0x46C4,0x46C5, + 0x46C6,0x46C7,0x46C8,0x46C9,0x46CA,0x46CB,0x46CC,0x46CD, + 0x46CE,0x46CF,0x46D0,0x46D1,0x46D2,0x46D3,0x46D4,0x46D5, + 0x46D6,0x46D7,0x46D8,0x46D9,0x46DA,0x46DB,0x46DC,0x46DD, + 0x46DE,0x46DF,0x46E0,0x46E1,0x46E2,0x46E3,0x46E4,0x46E5, + 0x46E6,0x46E7,0x46E8,0x46E9,0x46EA,0x46EB,0x46EC,0x46ED, + 0x46EE,0x46EF,0x46F0,0x46F1,0x46F2,0x46F3,0x46F4,0x46F5, + 0x46F6,0x46F7,0x46F8,0x46F9,0x46FA,0x46FB,0x46FC,0x46FD, + 0x46FE,0x46FF,0x4700,0x4701,0x4702,0x4703,0x4704,0x4705, + 0x4706,0x4707,0x4708,0x4709,0x470A,0x470B,0x470C,0x470D, + 0x470E,0x470F,0x4710,0x4711,0x4712,0x4713,0x4714,0x4715, + 0x4716,0x4717,0x4718,0x4719,0x471A,0x471B,0x471C,0x471D, + 0x471E,0x471F,0x4720,0x4721,0x4722,0x4724,0x4725,0x4726, + 0x4727,0x4728,0x472A,0x472B,0x472C,0x472D,0x472E,0x472F, + 0x4730,0x4731,0x4732,0x4733,0x4734,0x4735,0x4736,0x4737, + 0x4738,0x4739,0x473A,0x473B,0x473C,0x473D,0x473E,0x473F, + 0x4740,0x4741,0x4742,0x4743,0x4744,0x4745,0x4746,0x4747, + 0x4748,0x4749,0x474A,0x474B,0x474C,0x474D,0x474E,0x474F, + 0x4750,0x4751,0x4752,0x4753,0x4754,0x4755,0x4756,0x4757, + 0x4758,0x4759,0x475A,0x475B,0x475C,0x475D,0x475E,0x475F, + 0x4760,0x4761,0x4762,0x4763,0x4764,0x4765,0x4766,0x4767, + 0x4768,0x4769,0x476A,0x476B,0x476C,0x476D,0x476E,0x476F, + 0x4770,0x4771,0x4772,0x4773,0x4774,0x4775,0x4776,0x4777, + 0x4778,0x4779,0x477A,0x477B,0x477D,0x477E,0x477F,0x4780, + 0x4781,0x4782,0x4783,0x4784,0x4785,0x4786,0x4787,0x4788, + 0x4789,0x478A,0x478B,0x478C,0x4948,0x4949,0x494A,0x494B, + 0x494C,0x494D,0x494E,0x494F,0x4950,0x4951,0x4952,0x4953, + 0x4954,0x4955,0x4956,0x4957,0x4958,0x4959,0x495A,0x495B, + 0x495C,0x495D,0x495E,0x495F,0x4960,0x4961,0x4962,0x4963, + 0x4964,0x4965,0x4966,0x4967,0x4968,0x4969,0x496A,0x496B, + 0x496C,0x496D,0x496E,0x496F,0x4970,0x4971,0x4972,0x4973, + 0x4974,0x4975,0x4976,0x4977,0x4978,0x4979,0x497B,0x497C, + 0x497E,0x497F,0x4980,0x4981,0x4984,0x4987,0x4988,0x4989, + 0x498A,0x498B,0x498C,0x498D,0x498E,0x498F,0x4990,0x4991, + 0x4992,0x4993,0x4994,0x4995,0x4996,0x4997,0x4998,0x4999, + 0x499A,0x499C,0x499D,0x499E,0x49A0,0x49A1,0x49A2,0x49A3, + 0x49A4,0x49A5,0x49A6,0x49A7,0x49A8,0x49A9,0x49AA,0x49AB, + 0x49AC,0x49AD,0x49AE,0x49AF,0x49B0,0x49B1,0x49B2,0x49B3, + 0x49B4,0x49B5,0x4C78,0x4C79,0x4C7A,0x4C7B,0x4C7C,0x4C7D, + 0x4C7E,0x4C7F,0x4C80,0x4C81,0x4C82,0x4C83,0x4C84,0x4C85, + 0x4C86,0x4C87,0x4C88,0x4C89,0x4C8A,0x4C8B,0x4C8C,0x4C8D, + 0x4C8E,0x4C8F,0x4C90,0x4C91,0x4C92,0x4C93,0x4C94,0x4C95, + 0x4C96,0x4C97,0x4C98,0x4C99,0x4C9A,0x4C9B,0x4C9C,0x4C9D, + 0x4C9E,0x4CA4,0x4CA5,0x4CA6,0x4CA7,0x4CA8,0x4CA9,0x4CAA, + 0x4CAB,0x4CAC,0x4CAD,0x4CAE,0x4CAF,0x4CB0,0x4CB1,0x4CB2, + 0x4CB3,0x4CB4,0x4CB5,0x4CB6,0x4CB7,0x4CB8,0x4CB9,0x4CBA, + 0x4CBB,0x4CBC,0x4CBD,0x4CBE,0x4CBF,0x4CC0,0x4CC1,0x4CC2, + 0x4CC3,0x4CC4,0x4CC5,0x4CC6,0x4CC7,0x4CC8,0x4CC9,0x4CCA, + 0x4CCB,0x4CCC,0x4CCD,0x4CCE,0x4CCF,0x4CD0,0x4CD1,0x4CD2, + 0x4CD3,0x4CD4,0x4CD5,0x4CD6,0x4CD7,0x4CD8,0x4CD9,0x4CDA, + 0x4CDB,0x4CDC,0x4CDD,0x4CDE,0x4CDF,0x4CE0,0x4CE1,0x4CE2, + 0x4CE3,0x4CE4,0x4CE5,0x4CE6,0x4CE7,0x4CE8,0x4CE9,0x4CEA, + 0x4CEB,0x4CEC,0x4CED,0x4CEE,0x4CEF,0x4CF0,0x4CF1,0x4CF2, + 0x4CF3,0x4CF4,0x4CF5,0x4CF6,0x4CF7,0x4CF8,0x4CF9,0x4CFA, + 0x4CFB,0x4CFC,0x4CFD,0x4CFE,0x4CFF,0x4D00,0x4D01,0x4D02, + 0x4D03,0x4D04,0x4D05,0x4D06,0x4D07,0x4D08,0x4D09,0x4D0A, + 0x4D0B,0x4D0C,0x4D0D,0x4D0E,0x4D0F,0x4D10,0x4D11,0x4D12, + 0x4D1A,0x4D1B,0x4D1C,0x4D1D,0x4D1E,0x4D1F,0x4D20,0x4D21, + 0x4D22,0x4D23,0x4D24,0x4D25,0x4D26,0x4D27,0x4D28,0x4D29, + 0x4D2A,0x4D2B,0x4D2C,0x4D2D,0x4D2E,0x4D2F,0x4D30,0x4D31, + 0x4D32,0x4D33,0x4D34,0x4D35,0x4D36,0x4D37,0x4D38,0x4D39, + 0x4D3A,0x4D3B,0x4D3C,0x4D3D,0x4D3E,0x4D3F,0x4D40,0x4D41, + 0x4D42,0x4D43,0x4D44,0x4D45,0x4D46,0x4D47,0x4D48,0x4D49, + 0x4D4A,0x4D4B,0x4D4C,0x4D4D,0x4D4E,0x4D4F,0x4D50,0x4D51, + 0x4D52,0x4D53,0x4D54,0x4D55,0x4D56,0x4D57,0x4D58,0x4D59, + 0x4D5A,0x4D5B,0x4D5C,0x4D5D,0x4D5E,0x4D5F,0x4D60,0x4D61, + 0x4D62,0x4D63,0x4D64,0x4D65,0x4D66,0x4D67,0x4D68,0x4D69, + 0x4D6A,0x4D6B,0x4D6C,0x4D6D,0x4D6E,0x4D6F,0x4D70,0x4D71, + 0x4D72,0x4D73,0x4D74,0x4D75,0x4D76,0x4D77,0x4D78,0x4D79, + 0x4D7A,0x4D7B,0x4D7C,0x4D7D,0x4D7E,0x4D7F,0x4D80,0x4D81, + 0x4D82,0x4D83,0x4D84,0x4D85,0x4D86,0x4D87,0x4D88,0x4D89, + 0x4D8A,0x4D8B,0x4D8C,0x4D8D,0x4D8E,0x4D8F,0x4D90,0x4D91, + 0x4D92,0x4D93,0x4D94,0x4D95,0x4D96,0x4D97,0x4D98,0x4D99, + 0x4D9A,0x4D9B,0x4D9C,0x4D9D,0x4D9E,0x4D9F,0x4DA0,0x4DA1, + 0x4DA2,0x4DA3,0x4DA4,0x4DA5,0x4DA6,0x4DA7,0x4DA8,0x4DA9, + 0x4DAA,0x4DAB,0x4DAC,0x4DAD,0x4DAF,0x4DB0,0x4DB1,0x4DB2, + 0x4DB3,0x4DB4,0x4DB5,0x4DB6,0x4DB7,0x4DB8,0x4DB9,0x4DBA, + 0x4DBB,0x4DBC,0x4DBD,0x4DBE,0x4DBF,0x4DC0,0x4DC1,0x4DC2, + 0x4DC3,0x4DC4,0x4DC5,0x4DC6,0x4DC7,0x4DC8,0x4DC9,0x4DCA, + 0x4DCB,0x4DCC,0x4DCD,0x4DCE,0x4DCF,0x4DD0,0x4DD1,0x4DD2, + 0x4DD3,0x4DD4,0x4DD5,0x4DD6,0x4DD7,0x4DD8,0x4DD9,0x4DDA, + 0x4DDB,0x4DDC,0x4DDD,0x4DDE,0x4DDF,0x4DE0,0x4DE1,0x4DE2, + 0x4DE3,0x4DE4,0x4DE5,0x4DE6,0x4DE7,0x4DE8,0x4DE9,0x4DEA, + 0x4DEB,0x4DEC,0x4DED,0x4DEE,0x4DEF,0x4DF0,0x4DF1,0x4DF2, + 0x4DF3,0x4DF4,0x4DF5,0x4DF6,0x4DF7,0x4DF8,0x4DF9,0x4DFA, + 0x4DFB,0x4DFC,0x4DFD,0x4DFE,0x4DFF,0xE76C,0xE7C8,0xE7E7, + 0xE7E8,0xE7E9,0xE7EA,0xE7EB,0xE7EC,0xE7ED,0xE7EE,0xE7EF, + 0xE7F0,0xE7F1,0xE7F2,0xE7F3,0xE815,0xE819,0xE81A,0xE81B, + 0xE81C,0xE81D,0xE81F,0xE820,0xE821,0xE822,0xE823,0xE824, + 0xE825,0xE827,0xE828,0xE829,0xE82A,0xE82D,0xE82E,0xE82F, + 0xE830,0xE833,0xE834,0xE835,0xE836,0xE837,0xE838,0xE839, + 0xE83A,0xE83C,0xE83D,0xE83E,0xE83F,0xE840,0xE841,0xE842, + 0xE844,0xE845,0xE846,0xE847,0xE848,0xE849,0xE84A,0xE84B, + 0xE84C,0xE84D,0xE84E,0xE84F,0xE850,0xE851,0xE852,0xE853, + 0xE856,0xE857,0xE858,0xE859,0xE85A,0xE85B,0xE85C,0xE85D, + 0xE85E,0xE85F,0xE860,0xE861,0xE862,0xE863,0xF92D,0xF92E, + 0xF92F,0xF930,0xF931,0xF932,0xF933,0xF934,0xF935,0xF936, + 0xF937,0xF938,0xF939,0xF93A,0xF93B,0xF93C,0xF93D,0xF93E, + 0xF93F,0xF940,0xF941,0xF942,0xF943,0xF944,0xF945,0xF946, + 0xF947,0xF948,0xF949,0xF94A,0xF94B,0xF94C,0xF94D,0xF94E, + 0xF94F,0xF950,0xF951,0xF952,0xF953,0xF954,0xF955,0xF956, + 0xF957,0xF958,0xF959,0xF95A,0xF95B,0xF95C,0xF95D,0xF95E, + 0xF95F,0xF960,0xF961,0xF962,0xF963,0xF964,0xF965,0xF966, + 0xF967,0xF968,0xF969,0xF96A,0xF96B,0xF96C,0xF96D,0xF96E, + 0xF96F,0xF970,0xF971,0xF972,0xF973,0xF974,0xF975,0xF976, + 0xF977,0xF978,0xF97A,0xF97B,0xF97C,0xF97D,0xF97E,0xF97F, + 0xF980,0xF981,0xF982,0xF983,0xF984,0xF985,0xF986,0xF987, + 0xF988,0xF989,0xF98A,0xF98B,0xF98C,0xF98D,0xF98E,0xF98F, + 0xF990,0xF991,0xF992,0xF993,0xF994,0xF996,0xF997,0xF998, + 0xF999,0xF99A,0xF99B,0xF99C,0xF99D,0xF99E,0xF99F,0xF9A0, + 0xF9A1,0xF9A2,0xF9A3,0xF9A4,0xF9A5,0xF9A6,0xF9A7,0xF9A8, + 0xF9A9,0xF9AA,0xF9AB,0xF9AC,0xF9AD,0xF9AE,0xF9AF,0xF9B0, + 0xF9B1,0xF9B2,0xF9B3,0xF9B4,0xF9B5,0xF9B6,0xF9B7,0xF9B8, + 0xF9B9,0xF9BA,0xF9BB,0xF9BC,0xF9BD,0xF9BE,0xF9BF,0xF9C0, + 0xF9C1,0xF9C2,0xF9C3,0xF9C4,0xF9C5,0xF9C6,0xF9C7,0xF9C8, + 0xF9C9,0xF9CA,0xF9CB,0xF9CC,0xF9CD,0xF9CE,0xF9CF,0xF9D0, + 0xF9D1,0xF9D2,0xF9D3,0xF9D4,0xF9D5,0xF9D6,0xF9D7,0xF9D8, + 0xF9D9,0xF9DA,0xF9DB,0xF9DC,0xF9DD,0xF9DE,0xF9DF,0xF9E0, + 0xF9E1,0xF9E2,0xF9E3,0xF9E4,0xF9E5,0xF9E6,0xF9E8,0xF9E9, + 0xF9EA,0xF9EB,0xF9EC,0xF9ED,0xF9EE,0xF9EF,0xF9F0,0xF9F2, + 0xF9F3,0xF9F4,0xF9F5,0xF9F6,0xF9F7,0xF9F8,0xF9F9,0xF9FA, + 0xF9FB,0xF9FC,0xF9FD,0xF9FE,0xF9FF,0xFA00,0xFA01,0xFA02, + 0xFA03,0xFA04,0xFA05,0xFA06,0xFA07,0xFA08,0xFA09,0xFA0A, + 0xFA0B,0xFA10,0xFA12,0xFA15,0xFA16,0xFA17,0xFA19,0xFA1A, + 0xFA1B,0xFA1C,0xFA1D,0xFA1E,0xFA22,0xFA25,0xFA26,0xFE32, + 0xFE45,0xFE46,0xFE47,0xFE48,0xFE53,0xFE58,0xFE67,0xFE6C, + 0xFE6D,0xFE6E,0xFE6F,0xFE70,0xFE71,0xFE72,0xFE73,0xFE74, + 0xFE75,0xFE76,0xFE77,0xFE78,0xFE79,0xFE7A,0xFE7B,0xFE7C, + 0xFE7D,0xFE7E,0xFE7F,0xFE80,0xFE81,0xFE82,0xFE83,0xFE84, + 0xFE85,0xFE86,0xFE87,0xFE88,0xFE89,0xFE8A,0xFE8B,0xFE8C, + 0xFE8D,0xFE8E,0xFE8F,0xFE90,0xFE91,0xFE92,0xFE93,0xFE94, + 0xFE95,0xFE96,0xFE97,0xFE98,0xFE99,0xFE9A,0xFE9B,0xFE9C, + 0xFE9D,0xFE9E,0xFE9F,0xFEA0,0xFEA1,0xFEA2,0xFEA3,0xFEA4, + 0xFEA5,0xFEA6,0xFEA7,0xFEA8,0xFEA9,0xFEAA,0xFEAB,0xFEAC, + 0xFEAD,0xFEAE,0xFEAF,0xFEB0,0xFEB1,0xFEB2,0xFEB3,0xFEB4, + 0xFEB5,0xFEB6,0xFEB7,0xFEB8,0xFEB9,0xFEBA,0xFEBB,0xFEBC, + 0xFEBD,0xFEBE,0xFEBF,0xFEC0,0xFEC1,0xFEC2,0xFEC3,0xFEC4, + 0xFEC5,0xFEC6,0xFEC7,0xFEC8,0xFEC9,0xFECA,0xFECB,0xFECC, + 0xFECD,0xFECE,0xFECF,0xFED0,0xFED1,0xFED2,0xFED3,0xFED4, + 0xFED5,0xFED6,0xFED7,0xFED8,0xFED9,0xFEDA,0xFEDB,0xFEDC, + 0xFEDD,0xFEDE,0xFEDF,0xFEE0,0xFEE1,0xFEE2,0xFEE3,0xFEE4, + 0xFEE5,0xFEE6,0xFEE7,0xFEE8,0xFEE9,0xFEEA,0xFEEB,0xFEEC, + 0xFEED,0xFEEE,0xFEEF,0xFEF0,0xFEF1,0xFEF2,0xFEF3,0xFEF4, + 0xFEF5,0xFEF6,0xFEF7,0xFEF8,0xFEF9,0xFEFA,0xFEFB,0xFEFC, + 0xFEFD,0xFEFE,0xFEFF,0xFF00,0xFF5F,0xFF60,0xFF61,0xFF62, + 0xFF63,0xFF64,0xFF65,0xFF66,0xFF67,0xFF68,0xFF69,0xFF6A, + 0xFF6B,0xFF6C,0xFF6D,0xFF6E,0xFF6F,0xFF70,0xFF71,0xFF72, + 0xFF73,0xFF74,0xFF75,0xFF76,0xFF77,0xFF78,0xFF79,0xFF7A, + 0xFF7B,0xFF7C,0xFF7D,0xFF7E,0xFF7F,0xFF80,0xFF81,0xFF82, + 0xFF83,0xFF84,0xFF85,0xFF86,0xFF87,0xFF88,0xFF89,0xFF8A, + 0xFF8B,0xFF8C,0xFF8D,0xFF8E,0xFF8F,0xFF90,0xFF91,0xFF92, + 0xFF93,0xFF94,0xFF95,0xFF96,0xFF97,0xFF98,0xFF99,0xFF9A, + 0xFF9B,0xFF9C,0xFF9D,0xFF9E,0xFF9F,0xFFA0,0xFFA1,0xFFA2, + 0xFFA3,0xFFA4,0xFFA5,0xFFA6,0xFFA7,0xFFA8,0xFFA9,0xFFAA, + 0xFFAB,0xFFAC,0xFFAD,0xFFAE,0xFFAF,0xFFB0,0xFFB1,0xFFB2, + 0xFFB3,0xFFB4,0xFFB5,0xFFB6,0xFFB7,0xFFB8,0xFFB9,0xFFBA, + 0xFFBB,0xFFBC,0xFFBD,0xFFBE,0xFFBF,0xFFC0,0xFFC1,0xFFC2, + 0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7,0xFFC8,0xFFC9,0xFFCA, + 0xFFCB,0xFFCC,0xFFCD,0xFFCE,0xFFCF,0xFFD0,0xFFD1,0xFFD2, + 0xFFD3,0xFFD4,0xFFD5,0xFFD6,0xFFD7,0xFFD8,0xFFD9,0xFFDA, + 0xFFDB,0xFFDC,0xFFDD,0xFFDE,0xFFDF, +}; + +ImplGb180302000ToUnicodeRange const + aImplGb180302000ToUnicodeRanges[] = { + { 23940, 820, 7922, 0x0452 }, + { 24760, 9219, 11329, 0x2643 }, + { 26057, 12973, 13738, 0x361B }, + { 27701, 14698, 15583, 0x3CE1 }, + { 28661, 15847, 16318, 0x4160 }, + { 28925, 16729, 17102, 0x44D7 }, + { 29336, 17418, 17859, 0x478E }, + { 29652, 17961, 18664, 0x49B8 }, + { 29754, 19043, 33469, 0x9FA6 }, + { 30133, 33550, 37845, 0xE865 }, + { 30214, 38078, 39108, 0xFA2A }, + { 30447, 39394, 39420, 0xFFE6 }, + { -1, 0, 0, 0 } +}; + +sal_uInt32 const aImplUnicodeToGb180302000Data[] = { + 0x81308130,0x81308131,0x81308132,0x81308133,0x81308134,0x81308135, + 0x81308136,0x81308137,0x81308138,0x81308139,0x81308230,0x81308231, + 0x81308232,0x81308233,0x81308234,0x81308235,0x81308236,0x81308237, + 0x81308238,0x81308239,0x81308330,0x81308331,0x81308332,0x81308333, + 0x81308334,0x81308335,0x81308336,0x81308337,0x81308338,0x81308339, + 0x81308430,0x81308431,0x81308432,0x81308433,0x81308434,0x81308435, + 0xA1E8,0x81308436,0x81308437, 0xA1EC, 0xA1A7,0x81308438, + 0x81308439,0x81308530,0x81308531,0x81308532,0x81308533,0x81308534, + 0xA1E3, 0xA1C0,0x81308535,0x81308536,0x81308537,0x81308538, + 0x81308539, 0xA1A4,0x81308630,0x81308631,0x81308632,0x81308633, + 0x81308634,0x81308635,0x81308636,0x81308637,0x81308638,0x81308639, + 0x81308730,0x81308731,0x81308732,0x81308733,0x81308734,0x81308735, + 0x81308736,0x81308737,0x81308738,0x81308739,0x81308830,0x81308831, + 0x81308832,0x81308833,0x81308834,0x81308835,0x81308836,0x81308837, + 0x81308838,0x81308839,0x81308930, 0xA1C1,0x81308931,0x81308932, + 0x81308933,0x81308934,0x81308935,0x81308936,0x81308937,0x81308938, + 0xA8A4, 0xA8A2,0x81308939,0x81308A30,0x81308A31,0x81308A32, + 0x81308A33,0x81308A34, 0xA8A8, 0xA8A6, 0xA8BA,0x81308A35, + 0xA8AC, 0xA8AA,0x81308A36,0x81308A37,0x81308A38,0x81308A39, + 0xA8B0, 0xA8AE,0x81308B30,0x81308B31,0x81308B32, 0xA1C2, + 0x81308B33, 0xA8B4, 0xA8B2,0x81308B34, 0xA8B9,0x81308B35, + 0x81308B36,0x81308B37,0x81308B38, 0xA8A1,0x81308B39,0x81308C30, + 0x81308C31,0x81308C32,0x81308C33,0x81308C34,0x81308C35,0x81308C36, + 0x81308C37,0x81308C38,0x81308C39,0x81308D30,0x81308D31,0x81308D32, + 0x81308D33,0x81308D34,0x81308D35, 0xA8A5,0x81308D36,0x81308D37, + 0x81308D38,0x81308D39,0x81308E30,0x81308E31,0x81308E32, 0xA8A7, + 0x81308E33,0x81308E34,0x81308E35,0x81308E36,0x81308E37,0x81308E38, + 0x81308E39,0x81308F30,0x81308F31,0x81308F32,0x81308F33,0x81308F34, + 0x81308F35,0x81308F36,0x81308F37, 0xA8A9,0x81308F38,0x81308F39, + 0x81309030,0x81309031,0x81309032,0x81309033,0x81309034,0x81309035, + 0x81309036,0x81309037,0x81309038,0x81309039,0x81309130,0x81309131, + 0x81309132,0x81309133,0x81309134,0x81309135,0x81309136,0x81309137, + 0x81309138,0x81309139,0x81309230,0x81309231, 0xA8BD,0x81309232, + 0x81309233,0x81309234, 0xA8BE,0x81309235,0x81309236,0x81309237, + 0x81309238, 0xA8AD,0x81309239,0x81309330,0x81309331,0x81309332, + 0x81309333,0x81309334,0x81309335,0x81309336,0x81309337,0x81309338, + 0x81309339,0x81309430,0x81309431,0x81309432,0x81309433,0x81309434, + 0x81309435,0x81309436,0x81309437,0x81309438,0x81309439,0x81309530, + 0x81309531,0x81309532,0x81309533,0x81309534,0x81309535,0x81309536, + 0x81309537, 0xA8B1,0x81309538,0x81309539,0x81309630,0x81309631, + 0x81309632,0x81309633,0x81309634,0x81309635,0x81309636,0x81309637, + 0x81309638,0x81309639,0x81309730,0x81309731,0x81309732,0x81309733, + 0x81309734,0x81309735,0x81309736,0x81309737,0x81309738,0x81309739, + 0x81309830,0x81309831,0x81309832,0x81309833,0x81309834,0x81309835, + 0x81309836,0x81309837,0x81309838,0x81309839,0x81309930,0x81309931, + 0x81309932,0x81309933,0x81309934,0x81309935,0x81309936,0x81309937, + 0x81309938,0x81309939,0x81309A30,0x81309A31,0x81309A32,0x81309A33, + 0x81309A34,0x81309A35,0x81309A36,0x81309A37,0x81309A38,0x81309A39, + 0x81309B30,0x81309B31,0x81309B32,0x81309B33,0x81309B34,0x81309B35, + 0x81309B36,0x81309B37,0x81309B38,0x81309B39,0x81309C30,0x81309C31, + 0x81309C32,0x81309C33,0x81309C34,0x81309C35,0x81309C36,0x81309C37, + 0x81309C38,0x81309C39,0x81309D30,0x81309D31,0x81309D32,0x81309D33, + 0x81309D34,0x81309D35,0x81309D36,0x81309D37,0x81309D38,0x81309D39, + 0x81309E30,0x81309E31,0x81309E32,0x81309E33,0x81309E34,0x81309E35, + 0x81309E36,0x81309E37,0x81309E38,0x81309E39,0x81309F30,0x81309F31, + 0x81309F32,0x81309F33,0x81309F34,0x81309F35, 0xA8A3,0x81309F36, + 0xA8AB,0x81309F37, 0xA8AF,0x81309F38, 0xA8B3,0x81309F39, + 0xA8B5,0x8130A030, 0xA8B6,0x8130A031, 0xA8B7,0x8130A032, + 0xA8B8,0x8130A033,0x8130A034,0x8130A035,0x8130A036,0x8130A037, + 0x8130A038,0x8130A039,0x8130A130,0x8130A131,0x8130A132,0x8130A133, + 0x8130A134,0x8130A135,0x8130A136,0x8130A137,0x8130A138,0x8130A139, + 0x8130A230,0x8130A231,0x8130A232,0x8130A233,0x8130A234,0x8130A235, + 0x8130A236,0x8130A237,0x8130A238,0x8130A239,0x8130A330, 0xA8BF, + 0x8130A331,0x8130A332,0x8130A333,0x8130A334,0x8130A335,0x8130A336, + 0x8130A337,0x8130A338,0x8130A339,0x8130A430,0x8130A431,0x8130A432, + 0x8130A433,0x8130A434,0x8130A435,0x8130A436,0x8130A437,0x8130A438, + 0x8130A439,0x8130A530,0x8130A531,0x8130A532,0x8130A533,0x8130A534, + 0x8130A535,0x8130A536,0x8130A537,0x8130A538,0x8130A539,0x8130A630, + 0x8130A631,0x8130A632,0x8130A633,0x8130A634,0x8130A635,0x8130A636, + 0x8130A637,0x8130A638,0x8130A639,0x8130A730,0x8130A731,0x8130A732, + 0x8130A733,0x8130A734,0x8130A735,0x8130A736,0x8130A737,0x8130A738, + 0x8130A739,0x8130A830,0x8130A831,0x8130A832,0x8130A833,0x8130A834, + 0x8130A835,0x8130A836,0x8130A837,0x8130A838,0x8130A839,0x8130A930, + 0x8130A931,0x8130A932,0x8130A933,0x8130A934,0x8130A935,0x8130A936, + 0x8130A937,0x8130A938,0x8130A939,0x8130AA30,0x8130AA31,0x8130AA32, + 0x8130AA33,0x8130AA34,0x8130AA35,0x8130AA36,0x8130AA37,0x8130AA38, + 0x8130AA39,0x8130AB30,0x8130AB31,0x8130AB32,0x8130AB33,0x8130AB34, + 0x8130AB35,0x8130AB36,0x8130AB37, 0xA8BB,0x8130AB38,0x8130AB39, + 0x8130AC30,0x8130AC31,0x8130AC32,0x8130AC33,0x8130AC34,0x8130AC35, + 0x8130AC36,0x8130AC37,0x8130AC38,0x8130AC39,0x8130AD30,0x8130AD31, + 0x8130AD32, 0xA8C0,0x8130AD33,0x8130AD34,0x8130AD35,0x8130AD36, + 0x8130AD37,0x8130AD38,0x8130AD39,0x8130AE30,0x8130AE31,0x8130AE32, + 0x8130AE33,0x8130AE34,0x8130AE35,0x8130AE36,0x8130AE37,0x8130AE38, + 0x8130AE39,0x8130AF30,0x8130AF31,0x8130AF32,0x8130AF33,0x8130AF34, + 0x8130AF35,0x8130AF36,0x8130AF37,0x8130AF38,0x8130AF39,0x8130B030, + 0x8130B031,0x8130B032,0x8130B033,0x8130B034,0x8130B035,0x8130B036, + 0x8130B037,0x8130B038,0x8130B039,0x8130B130,0x8130B131,0x8130B132, + 0x8130B133,0x8130B134,0x8130B135,0x8130B136,0x8130B137,0x8130B138, + 0x8130B139,0x8130B230,0x8130B231,0x8130B232,0x8130B233,0x8130B234, + 0x8130B235,0x8130B236,0x8130B237,0x8130B238,0x8130B239,0x8130B330, + 0x8130B331,0x8130B332,0x8130B333,0x8130B334,0x8130B335,0x8130B336, + 0x8130B337,0x8130B338,0x8130B339,0x8130B430,0x8130B431,0x8130B432, + 0x8130B433,0x8130B434,0x8130B435,0x8130B436,0x8130B437,0x8130B438, + 0x8130B439,0x8130B530,0x8130B531,0x8130B532,0x8130B533,0x8130B534, + 0x8130B535,0x8130B536,0x8130B537,0x8130B538,0x8130B539,0x8130B630, + 0x8130B631,0x8130B632,0x8130B633,0x8130B634,0x8130B635,0x8130B636, + 0x8130B637,0x8130B638,0x8130B639,0x8130B730,0x8130B731,0x8130B732, + 0x8130B733, 0xA1A6,0x8130B734, 0xA1A5, 0xA840, 0xA841, + 0x8130B735,0x8130B736,0x8130B737,0x8130B738,0x8130B739,0x8130B830, + 0x8130B831,0x8130B832,0x8130B833,0x8130B834,0x8130B835,0x8130B836, + 0x8130B837, 0xA842,0x8130B838,0x8130B839,0x8130B930,0x8130B931, + 0x8130B932,0x8130B933,0x8130B934,0x8130B935,0x8130B936,0x8130B937, + 0x8130B938,0x8130B939,0x8130BA30,0x8130BA31,0x8130BA32,0x8130BA33, + 0x8130BA34,0x8130BA35,0x8130BA36,0x8130BA37,0x8130BA38,0x8130BA39, + 0x8130BB30,0x8130BB31,0x8130BB32,0x8130BB33,0x8130BB34,0x8130BB35, + 0x8130BB36,0x8130BB37,0x8130BB38,0x8130BB39,0x8130BC30,0x8130BC31, + 0x8130BC32,0x8130BC33,0x8130BC34,0x8130BC35,0x8130BC36,0x8130BC37, + 0x8130BC38,0x8130BC39,0x8130BD30,0x8130BD31,0x8130BD32,0x8130BD33, + 0x8130BD34,0x8130BD35,0x8130BD36,0x8130BD37,0x8130BD38,0x8130BD39, + 0x8130BE30,0x8130BE31,0x8130BE32,0x8130BE33,0x8130BE34,0x8130BE35, + 0x8130BE36,0x8130BE37,0x8130BE38,0x8130BE39,0x8130BF30,0x8130BF31, + 0x8130BF32,0x8130BF33,0x8130BF34,0x8130BF35,0x8130BF36,0x8130BF37, + 0x8130BF38,0x8130BF39,0x8130C030,0x8130C031,0x8130C032,0x8130C033, + 0x8130C034,0x8130C035,0x8130C036,0x8130C037,0x8130C038,0x8130C039, + 0x8130C130,0x8130C131,0x8130C132,0x8130C133,0x8130C134,0x8130C135, + 0x8130C136,0x8130C137,0x8130C138,0x8130C139,0x8130C230,0x8130C231, + 0x8130C232,0x8130C233,0x8130C234,0x8130C235,0x8130C236,0x8130C237, + 0x8130C238,0x8130C239,0x8130C330,0x8130C331,0x8130C332,0x8130C333, + 0x8130C334,0x8130C335,0x8130C336,0x8130C337,0x8130C338,0x8130C339, + 0x8130C430,0x8130C431,0x8130C432,0x8130C433,0x8130C434,0x8130C435, + 0x8130C436,0x8130C437,0x8130C438,0x8130C439,0x8130C530,0x8130C531, + 0x8130C532,0x8130C533,0x8130C534,0x8130C535,0x8130C536,0x8130C537, + 0x8130C538,0x8130C539,0x8130C630,0x8130C631,0x8130C632,0x8130C633, + 0x8130C634,0x8130C635,0x8130C636,0x8130C637,0x8130C638,0x8130C639, + 0x8130C730,0x8130C731,0x8130C732,0x8130C733,0x8130C734,0x8130C735, + 0x8130C736,0x8130C737,0x8130C738,0x8130C739,0x8130C830,0x8130C831, + 0x8130C832,0x8130C833,0x8130C834,0x8130C835,0x8130C836,0x8130C837, + 0x8130C838,0x8130C839,0x8130C930,0x8130C931,0x8130C932,0x8130C933, + 0x8130C934,0x8130C935,0x8130C936,0x8130C937,0x8130C938,0x8130C939, + 0x8130CA30,0x8130CA31,0x8130CA32,0x8130CA33,0x8130CA34,0x8130CA35, + 0x8130CA36,0x8130CA37,0x8130CA38,0x8130CA39,0x8130CB30, 0xA6A1, + 0xA6A2, 0xA6A3, 0xA6A4, 0xA6A5, 0xA6A6, 0xA6A7, + 0xA6A8, 0xA6A9, 0xA6AA, 0xA6AB, 0xA6AC, 0xA6AD, + 0xA6AE, 0xA6AF, 0xA6B0, 0xA6B1,0x8130CB31, 0xA6B2, + 0xA6B3, 0xA6B4, 0xA6B5, 0xA6B6, 0xA6B7, 0xA6B8, + 0x8130CB32,0x8130CB33,0x8130CB34,0x8130CB35,0x8130CB36,0x8130CB37, + 0x8130CB38, 0xA6C1, 0xA6C2, 0xA6C3, 0xA6C4, 0xA6C5, + 0xA6C6, 0xA6C7, 0xA6C8, 0xA6C9, 0xA6CA, 0xA6CB, + 0xA6CC, 0xA6CD, 0xA6CE, 0xA6CF, 0xA6D0, 0xA6D1, + 0x8130CB39, 0xA6D2, 0xA6D3, 0xA6D4, 0xA6D5, 0xA6D6, + 0xA6D7, 0xA6D8,0x8130CC30,0x8130CC31,0x8130CC32,0x8130CC33, + 0x8130CC34,0x8130CC35,0x8130CC36,0x8130CC37,0x8130CC38,0x8130CC39, + 0x8130CD30,0x8130CD31,0x8130CD32,0x8130CD33,0x8130CD34,0x8130CD35, + 0x8130CD36,0x8130CD37,0x8130CD38,0x8130CD39,0x8130CE30,0x8130CE31, + 0x8130CE32,0x8130CE33,0x8130CE34,0x8130CE35,0x8130CE36,0x8130CE37, + 0x8130CE38,0x8130CE39,0x8130CF30,0x8130CF31,0x8130CF32,0x8130CF33, + 0x8130CF34,0x8130CF35,0x8130CF36,0x8130CF37,0x8130CF38,0x8130CF39, + 0x8130D030,0x8130D031,0x8130D032,0x8130D033,0x8130D034,0x8130D035, + 0x8130D036,0x8130D037,0x8130D038,0x8130D039,0x8130D130,0x8130D131, + 0x8130D132,0x8130D133,0x8130D134, 0xA7A7,0x8130D135,0x8130D136, + 0x8130D137,0x8130D138,0x8130D139,0x8130D230,0x8130D231,0x8130D232, + 0x8130D233,0x8130D234,0x8130D235,0x8130D236,0x8130D237,0x8130D238, + 0xA7A1, 0xA7A2, 0xA7A3, 0xA7A4, 0xA7A5, 0xA7A6, + 0xA7A8, 0xA7A9, 0xA7AA, 0xA7AB, 0xA7AC, 0xA7AD, + 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, 0xA7B2, 0xA7B3, + 0xA7B4, 0xA7B5, 0xA7B6, 0xA7B7, 0xA7B8, 0xA7B9, + 0xA7BA, 0xA7BB, 0xA7BC, 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, 0xA7C1, 0xA7D1, 0xA7D2, 0xA7D3, 0xA7D4, + 0xA7D5, 0xA7D6, 0xA7D8, 0xA7D9, 0xA7DA, 0xA7DB, + 0xA7DC, 0xA7DD, 0xA7DE, 0xA7DF, 0xA7E0, 0xA7E1, + 0xA7E2, 0xA7E3, 0xA7E4, 0xA7E5, 0xA7E6, 0xA7E7, + 0xA7E8, 0xA7E9, 0xA7EA, 0xA7EB, 0xA7EC, 0xA7ED, + 0xA7EE, 0xA7EF, 0xA7F0, 0xA7F1,0x8130D239, 0xA7D7, + 0xA95C,0x8136A532,0x8136A533, 0xA843, 0xA1AA, 0xA844, + 0xA1AC,0x8136A534, 0xA1AE, 0xA1AF,0x8136A535,0x8136A536, + 0xA1B0, 0xA1B1,0x8136A537,0x8136A538,0x8136A539,0x8136A630, + 0x8136A631,0x8136A632,0x8136A633, 0xA845, 0xA1AD,0x8136A634, + 0x8136A635,0x8136A636,0x8136A637,0x8136A638,0x8136A639,0x8136A730, + 0x8136A731,0x8136A732, 0xA1EB,0x8136A733, 0xA1E4, 0xA1E5, + 0x8136A734, 0xA846,0x8136A735,0x8136A736,0x8136A737,0x8136A738, + 0x8136A739, 0xA1F9,0x8136A830,0x8136A831,0x8136A832,0x8136A833, + 0x8136A834,0x8136A835,0x8136A836,0x8136A837,0x8136A838,0x8136A839, + 0x8136A930,0x8136A931,0x8136A932,0x8136A933,0x8136A934,0x8136A935, + 0x8136A936,0x8136A937,0x8136A938,0x8136A939,0x8136AA30,0x8136AA31, + 0x8136AA32,0x8136AA33,0x8136AA34,0x8136AA35,0x8136AA36,0x8136AA37, + 0x8136AA38,0x8136AA39,0x8136AB30,0x8136AB31,0x8136AB32,0x8136AB33, + 0x8136AB34,0x8136AB35,0x8136AB36,0x8136AB37,0x8136AB38,0x8136AB39, + 0x8136AC30,0x8136AC31,0x8136AC32,0x8136AC33,0x8136AC34,0x8136AC35, + 0x8136AC36,0x8136AC37,0x8136AC38,0x8136AC39,0x8136AD30,0x8136AD31, + 0x8136AD32,0x8136AD33,0x8136AD34,0x8136AD35,0x8136AD36,0x8136AD37, + 0x8136AD38,0x8136AD39,0x8136AE30,0x8136AE31,0x8136AE32,0x8136AE33, + 0x8136AE34,0x8136AE35,0x8136AE36,0x8136AE37,0x8136AE38,0x8136AE39, + 0x8136AF30,0x8136AF31,0x8136AF32,0x8136AF33,0x8136AF34,0x8136AF35, + 0x8136AF36,0x8136AF37,0x8136AF38,0x8136AF39,0x8136B030,0x8136B031, + 0x8136B032,0x8136B033,0x8136B034,0x8136B035,0x8136B036,0x8136B037, + 0x8136B038,0x8136B039,0x8136B130,0x8136B131,0x8136B132,0x8136B133, + 0x8136B134,0x8136B135,0x8136B136,0x8136B137,0x8136B138,0x8136B139, + 0x8136B230,0x8136B231,0x8136B232,0x8136B233,0x8136B234,0x8136B235, + 0x8136B236,0x8136B237,0x8136B238,0x8136B239,0x8136B330,0x8136B331, + 0xA2E3,0x8136B332,0x8136B333,0x8136B334,0x8136B335,0x8136B336, + 0x8136B337,0x8136B338,0x8136B339,0x8136B430,0x8136B431,0x8136B432, + 0x8136B433,0x8136B434,0x8136B435,0x8136B436,0x8136B437,0x8136B438, + 0x8136B439,0x8136B530,0x8136B531,0x8136B532,0x8136B533,0x8136B534, + 0x8136B535,0x8136B536,0x8136B537,0x8136B538,0x8136B539,0x8136B630, + 0x8136B631,0x8136B632,0x8136B633,0x8136B634,0x8136B635,0x8136B636, + 0x8136B637,0x8136B638,0x8136B639,0x8136B730,0x8136B731,0x8136B732, + 0x8136B733,0x8136B734,0x8136B735,0x8136B736,0x8136B737,0x8136B738, + 0x8136B739,0x8136B830,0x8136B831,0x8136B832,0x8136B833,0x8136B834, + 0x8136B835,0x8136B836,0x8136B837,0x8136B838,0x8136B839,0x8136B930, + 0x8136B931,0x8136B932,0x8136B933,0x8136B934,0x8136B935,0x8136B936, + 0x8136B937,0x8136B938,0x8136B939,0x8136BA30,0x8136BA31,0x8136BA32, + 0x8136BA33,0x8136BA34,0x8136BA35,0x8136BA36,0x8136BA37,0x8136BA38, + 0x8136BA39,0x8136BB30,0x8136BB31,0x8136BB32,0x8136BB33,0x8136BB34, + 0x8136BB35,0x8136BB36,0x8136BB37, 0xA1E6,0x8136BB38, 0xA847, + 0x8136BB39,0x8136BC30,0x8136BC31, 0xA848,0x8136BC32,0x8136BC33, + 0x8136BC34,0x8136BC35,0x8136BC36,0x8136BC37,0x8136BC38,0x8136BC39, + 0x8136BD30,0x8136BD31,0x8136BD32,0x8136BD33, 0xA1ED,0x8136BD34, + 0x8136BD35,0x8136BD36,0x8136BD37,0x8136BD38,0x8136BD39,0x8136BE30, + 0x8136BE31,0x8136BE32,0x8136BE33, 0xA959,0x8136BE34,0x8136BE35, + 0x8136BE36,0x8136BE37,0x8136BE38,0x8136BE39,0x8136BF30,0x8136BF31, + 0x8136BF32,0x8136BF33,0x8136BF34,0x8136BF35,0x8136BF36,0x8136BF37, + 0x8136BF38,0x8136BF39,0x8136C030,0x8136C031,0x8136C032,0x8136C033, + 0x8136C034,0x8136C035,0x8136C036,0x8136C037,0x8136C038,0x8136C039, + 0x8136C130,0x8136C131,0x8136C132,0x8136C133,0x8136C134,0x8136C135, + 0x8136C136,0x8136C137,0x8136C138,0x8136C139,0x8136C230,0x8136C231, + 0x8136C232,0x8136C233,0x8136C234,0x8136C235,0x8136C236,0x8136C237, + 0x8136C238,0x8136C239,0x8136C330,0x8136C331,0x8136C332,0x8136C333, + 0x8136C334,0x8136C335,0x8136C336,0x8136C337,0x8136C338,0x8136C339, + 0x8136C430,0x8136C431,0x8136C432,0x8136C433,0x8136C434,0x8136C435, + 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, + 0xA2F7, 0xA2F8, 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, + 0x8136C436,0x8136C437,0x8136C438,0x8136C439, 0xA2A1, 0xA2A2, + 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, + 0xA2A9, 0xA2AA,0x8136C530,0x8136C531,0x8136C532,0x8136C533, + 0x8136C534,0x8136C535,0x8136C536,0x8136C537,0x8136C538,0x8136C539, + 0x8136C630,0x8136C631,0x8136C632,0x8136C633,0x8136C634,0x8136C635, + 0x8136C636,0x8136C637,0x8136C638,0x8136C639,0x8136C730,0x8136C731, + 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD,0x8136C732,0x8136C733, + 0xA849, 0xA84A, 0xA84B, 0xA84C,0x8136C734,0x8136C735, + 0x8136C736,0x8136C737,0x8136C738,0x8136C739,0x8136C830,0x8136C831, + 0x8136C832,0x8136C833,0x8136C834,0x8136C835,0x8136C836,0x8136C837, + 0x8136C838,0x8136C839,0x8136C930,0x8136C931,0x8136C932,0x8136C933, + 0x8136C934,0x8136C935,0x8136C936,0x8136C937,0x8136C938,0x8136C939, + 0x8136CA30,0x8136CA31,0x8136CA32,0x8136CA33,0x8136CA34,0x8136CA35, + 0x8136CA36,0x8136CA37,0x8136CA38,0x8136CA39,0x8136CB30,0x8136CB31, + 0x8136CB32,0x8136CB33,0x8136CB34,0x8136CB35,0x8136CB36,0x8136CB37, + 0x8136CB38,0x8136CB39,0x8136CC30,0x8136CC31,0x8136CC32,0x8136CC33, + 0x8136CC34,0x8136CC35,0x8136CC36,0x8136CC37,0x8136CC38,0x8136CC39, + 0x8136CD30,0x8136CD31,0x8136CD32,0x8136CD33,0x8136CD34,0x8136CD35, + 0x8136CD36,0x8136CD37,0x8136CD38,0x8136CD39,0x8136CE30,0x8136CE31, + 0x8136CE32,0x8136CE33,0x8136CE34,0x8136CE35,0x8136CE36,0x8136CE37, + 0x8136CE38,0x8136CE39,0x8136CF30,0x8136CF31,0x8136CF32,0x8136CF33, + 0x8136CF34,0x8136CF35,0x8136CF36,0x8136CF37,0x8136CF38,0x8136CF39, + 0x8136D030,0x8136D031,0x8136D032,0x8136D033,0x8136D034,0x8136D035, + 0x8136D036,0x8136D037,0x8136D038,0x8136D039,0x8136D130,0x8136D131, + 0x8136D132,0x8136D133,0x8136D134,0x8136D135,0x8136D136,0x8136D137, + 0x8136D138,0x8136D139,0x8136D230,0x8136D231,0x8136D232,0x8136D233, + 0xA1CA,0x8136D234,0x8136D235,0x8136D236,0x8136D237,0x8136D238, + 0x8136D239, 0xA1C7,0x8136D330, 0xA1C6,0x8136D331,0x8136D332, + 0x8136D333, 0xA84D,0x8136D334,0x8136D335,0x8136D336,0x8136D337, + 0xA1CC,0x8136D338,0x8136D339, 0xA1D8, 0xA1DE, 0xA84E, + 0xA1CF,0x8136D430,0x8136D431, 0xA84F,0x8136D432, 0xA1CE, + 0x8136D433, 0xA1C4, 0xA1C5, 0xA1C9, 0xA1C8, 0xA1D2, + 0x8136D434,0x8136D435, 0xA1D3,0x8136D436,0x8136D437,0x8136D438, + 0x8136D439,0x8136D530, 0xA1E0, 0xA1DF, 0xA1C3, 0xA1CB, + 0x8136D531,0x8136D532,0x8136D533,0x8136D534,0x8136D535, 0xA1D7, + 0x8136D536,0x8136D537,0x8136D538,0x8136D539,0x8136D630,0x8136D631, + 0x8136D632,0x8136D633,0x8136D634,0x8136D635, 0xA1D6,0x8136D636, + 0x8136D637,0x8136D638, 0xA1D5,0x8136D639,0x8136D730,0x8136D731, + 0x8136D732,0x8136D733, 0xA850,0x8136D734,0x8136D735,0x8136D736, + 0x8136D737,0x8136D738,0x8136D739,0x8136D830,0x8136D831,0x8136D832, + 0x8136D833,0x8136D834,0x8136D835,0x8136D836, 0xA1D9, 0xA1D4, + 0x8136D837,0x8136D838, 0xA1DC, 0xA1DD, 0xA851, 0xA852, + 0x8136D839,0x8136D930,0x8136D931,0x8136D932,0x8136D933,0x8136D934, + 0xA1DA, 0xA1DB,0x8136D935,0x8136D936,0x8136D937,0x8136D938, + 0x8136D939,0x8136DA30,0x8136DA31,0x8136DA32,0x8136DA33,0x8136DA34, + 0x8136DA35,0x8136DA36,0x8136DA37,0x8136DA38,0x8136DA39,0x8136DB30, + 0x8136DB31,0x8136DB32,0x8136DB33,0x8136DB34,0x8136DB35,0x8136DB36, + 0x8136DB37,0x8136DB38,0x8136DB39,0x8136DC30,0x8136DC31,0x8136DC32, + 0x8136DC33,0x8136DC34,0x8136DC35,0x8136DC36,0x8136DC37,0x8136DC38, + 0x8136DC39,0x8136DD30,0x8136DD31, 0xA892,0x8136DD32,0x8136DD33, + 0x8136DD34, 0xA1D1,0x8136DD35,0x8136DD36,0x8136DD37,0x8136DD38, + 0x8136DD39,0x8136DE30,0x8136DE31,0x8136DE32,0x8136DE33,0x8136DE34, + 0x8136DE35, 0xA1CD,0x8136DE36,0x8136DE37,0x8136DE38,0x8136DE39, + 0x8136DF30,0x8136DF31,0x8136DF32,0x8136DF33,0x8136DF34,0x8136DF35, + 0x8136DF36,0x8136DF37,0x8136DF38,0x8136DF39,0x8136E030,0x8136E031, + 0x8136E032,0x8136E033,0x8136E034,0x8136E035,0x8136E036,0x8136E037, + 0x8136E038,0x8136E039,0x8136E130, 0xA853,0x8136E131,0x8136E132, + 0x8136E133,0x8136E134,0x8136E135,0x8136E136,0x8136E137,0x8136E138, + 0x8136E139,0x8136E230,0x8136E231,0x8136E232,0x8136E233,0x8136E234, + 0x8136E235,0x8136E236,0x8136E237,0x8136E238,0x8136E239,0x8136E330, + 0x8136E331,0x8136E332,0x8136E333,0x8136E334,0x8136E335,0x8136E336, + 0x8136E337,0x8136E338,0x8136E339,0x8136E430,0x8136E431,0x8136E432, + 0x8136E433,0x8136E434,0x8136E435,0x8136E436,0x8136E437,0x8136E438, + 0x8136E439,0x8136E530,0x8136E531,0x8136E532,0x8136E533,0x8136E534, + 0x8136E535,0x8136E536,0x8136E537,0x8136E538,0x8136E539,0x8136E630, + 0x8136E631,0x8136E632,0x8136E633,0x8136E634,0x8136E635,0x8136E636, + 0x8136E637,0x8136E638,0x8136E639,0x8136E730,0x8136E731,0x8136E732, + 0x8136E733,0x8136E734,0x8136E735,0x8136E736,0x8136E737,0x8136E738, + 0x8136E739,0x8136E830,0x8136E831,0x8136E832,0x8136E833,0x8136E834, + 0x8136E835,0x8136E836,0x8136E837,0x8136E838,0x8136E839,0x8136E930, + 0x8136E931,0x8136E932, 0xA1D0,0x8136E933,0x8136E934,0x8136E935, + 0x8136E936,0x8136E937,0x8136E938,0x8136E939,0x8136EA30,0x8136EA31, + 0x8136EA32,0x8136EA33,0x8136EA34,0x8136EA35,0x8136EA36,0x8136EA37, + 0x8136EA38,0x8136EA39,0x8136EB30,0x8136EB31,0x8136EB32,0x8136EB33, + 0x8136EB34,0x8136EB35,0x8136EB36,0x8136EB37,0x8136EB38,0x8136EB39, + 0x8136EC30,0x8136EC31,0x8136EC32,0x8136EC33,0x8136EC34,0x8136EC35, + 0x8136EC36,0x8136EC37,0x8136EC38,0x8136EC39,0x8136ED30,0x8136ED31, + 0x8136ED32,0x8136ED33,0x8136ED34,0x8136ED35,0x8136ED36,0x8136ED37, + 0x8136ED38,0x8136ED39,0x8136EE30,0x8136EE31,0x8136EE32,0x8136EE33, + 0x8136EE34,0x8136EE35,0x8136EE36,0x8136EE37,0x8136EE38,0x8136EE39, + 0x8136EF30,0x8136EF31,0x8136EF32,0x8136EF33,0x8136EF34,0x8136EF35, + 0x8136EF36,0x8136EF37,0x8136EF38,0x8136EF39,0x8136F030,0x8136F031, + 0x8136F032,0x8136F033,0x8136F034,0x8136F035,0x8136F036,0x8136F037, + 0x8136F038,0x8136F039,0x8136F130,0x8136F131,0x8136F132,0x8136F133, + 0x8136F134,0x8136F135,0x8136F136,0x8136F137,0x8136F138,0x8136F139, + 0x8136F230,0x8136F231,0x8136F232,0x8136F233,0x8136F234,0x8136F235, + 0x8136F236,0x8136F237,0x8136F238,0x8136F239,0x8136F330,0x8136F331, + 0x8136F332,0x8136F333,0x8136F334,0x8136F335,0x8136F336,0x8136F337, + 0x8136F338,0x8136F339,0x8136F430,0x8136F431,0x8136F432,0x8136F433, + 0x8136F434,0x8136F435,0x8136F436,0x8136F437,0x8136F438,0x8136F439, + 0x8136F530,0x8136F531,0x8136F532,0x8136F533,0x8136F534,0x8136F535, + 0x8136F536,0x8136F537,0x8136F538,0x8136F539,0x8136F630,0x8136F631, + 0x8136F632,0x8136F633,0x8136F634,0x8136F635,0x8136F636,0x8136F637, + 0x8136F638,0x8136F639,0x8136F730,0x8136F731,0x8136F732,0x8136F733, + 0x8136F734,0x8136F735,0x8136F736,0x8136F737,0x8136F738,0x8136F739, + 0x8136F830,0x8136F831,0x8136F832,0x8136F833,0x8136F834,0x8136F835, + 0x8136F836,0x8136F837,0x8136F838,0x8136F839,0x8136F930,0x8136F931, + 0x8136F932,0x8136F933,0x8136F934,0x8136F935,0x8136F936,0x8136F937, + 0x8136F938,0x8136F939,0x8136FA30,0x8136FA31,0x8136FA32,0x8136FA33, + 0x8136FA34,0x8136FA35,0x8136FA36,0x8136FA37,0x8136FA38,0x8136FA39, + 0x8136FB30,0x8136FB31,0x8136FB32,0x8136FB33,0x8136FB34,0x8136FB35, + 0x8136FB36,0x8136FB37,0x8136FB38,0x8136FB39,0x8136FC30,0x8136FC31, + 0x8136FC32,0x8136FC33,0x8136FC34,0x8136FC35,0x8136FC36,0x8136FC37, + 0x8136FC38,0x8136FC39,0x8136FD30,0x8136FD31,0x8136FD32,0x8136FD33, + 0x8136FD34,0x8136FD35,0x8136FD36,0x8136FD37,0x8136FD38,0x8136FD39, + 0x8136FE30,0x8136FE31,0x8136FE32,0x8136FE33,0x8136FE34,0x8136FE35, + 0x8136FE36,0x8136FE37,0x8136FE38,0x8136FE39,0x81378130,0x81378131, + 0x81378132,0x81378133,0x81378134,0x81378135,0x81378136,0x81378137, + 0x81378138,0x81378139,0x81378230,0x81378231,0x81378232,0x81378233, + 0x81378234,0x81378235,0x81378236,0x81378237,0x81378238,0x81378239, + 0x81378330,0x81378331,0x81378332,0x81378333,0x81378334,0x81378335, + 0x81378336,0x81378337,0x81378338,0x81378339,0x81378430,0x81378431, + 0x81378432,0x81378433,0x81378434,0x81378435,0x81378436,0x81378437, + 0x81378438,0x81378439,0x81378530,0x81378531,0x81378532,0x81378533, + 0x81378534,0x81378535,0x81378536,0x81378537,0x81378538,0x81378539, + 0x81378630,0x81378631,0x81378632,0x81378633,0x81378634,0x81378635, + 0x81378636,0x81378637,0x81378638,0x81378639,0x81378730,0x81378731, + 0x81378732,0x81378733,0x81378734,0x81378735,0x81378736,0x81378737, + 0x81378738,0x81378739,0x81378830,0x81378831,0x81378832,0x81378833, + 0x81378834,0x81378835,0x81378836,0x81378837,0x81378838,0x81378839, + 0x81378930,0x81378931,0x81378932,0x81378933,0x81378934,0x81378935, + 0x81378936,0x81378937,0x81378938,0x81378939,0x81378A30,0x81378A31, + 0x81378A32,0x81378A33,0x81378A34,0x81378A35,0x81378A36,0x81378A37, + 0x81378A38,0x81378A39,0x81378B30,0x81378B31,0x81378B32,0x81378B33, + 0x81378B34,0x81378B35,0x81378B36,0x81378B37,0x81378B38,0x81378B39, + 0x81378C30,0x81378C31,0x81378C32,0x81378C33,0x81378C34,0x81378C35, + 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, 0xA2DE, + 0xA2DF, 0xA2E0, 0xA2E1, 0xA2E2,0x81378C36,0x81378C37, + 0x81378C38,0x81378C39,0x81378D30,0x81378D31,0x81378D32,0x81378D33, + 0x81378D34,0x81378D35, 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, + 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC, 0xA2CD, 0xA2CE, + 0xA2CF, 0xA2D0, 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, + 0xA2D5, 0xA2D6, 0xA2D7, 0xA2D8, 0xA2B1, 0xA2B2, + 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7, 0xA2B8, + 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, + 0xA2BF, 0xA2C0, 0xA2C1, 0xA2C2, 0xA2C3, 0xA2C4, + 0x81378D36,0x81378D37,0x81378D38,0x81378D39,0x81378E30,0x81378E31, + 0x81378E32,0x81378E33,0x81378E34,0x81378E35,0x81378E36,0x81378E37, + 0x81378E38,0x81378E39,0x81378F30,0x81378F31,0x81378F32,0x81378F33, + 0x81378F34,0x81378F35,0x81378F36,0x81378F37,0x81378F38,0x81378F39, + 0x81379030,0x81379031,0x81379032,0x81379033,0x81379034,0x81379035, + 0x81379036,0x81379037,0x81379038,0x81379039,0x81379130,0x81379131, + 0x81379132,0x81379133,0x81379134,0x81379135,0x81379136,0x81379137, + 0x81379138,0x81379139,0x81379230,0x81379231,0x81379232,0x81379233, + 0x81379234,0x81379235,0x81379236,0x81379237,0x81379238,0x81379239, + 0x81379330,0x81379331,0x81379332,0x81379333,0x81379334,0x81379335, + 0x81379336,0x81379337,0x81379338,0x81379339,0x81379430,0x81379431, + 0x81379432,0x81379433,0x81379434,0x81379435,0x81379436,0x81379437, + 0x81379438,0x81379439,0x81379530,0x81379531,0x81379532,0x81379533, + 0x81379534,0x81379535,0x81379536,0x81379537,0x81379538,0x81379539, + 0x81379630,0x81379631,0x81379632,0x81379633,0x81379634,0x81379635, + 0x81379636,0x81379637,0x81379638,0x81379639,0x81379730,0x81379731, + 0x81379732,0x81379733,0x81379734,0x81379735, 0xA9A4, 0xA9A5, + 0xA9A6, 0xA9A7, 0xA9A8, 0xA9A9, 0xA9AA, 0xA9AB, + 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, 0xA9B1, + 0xA9B2, 0xA9B3, 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, + 0xA9B8, 0xA9B9, 0xA9BA, 0xA9BB, 0xA9BC, 0xA9BD, + 0xA9BE, 0xA9BF, 0xA9C0, 0xA9C1, 0xA9C2, 0xA9C3, + 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, + 0xA9CA, 0xA9CB, 0xA9CC, 0xA9CD, 0xA9CE, 0xA9CF, + 0xA9D0, 0xA9D1, 0xA9D2, 0xA9D3, 0xA9D4, 0xA9D5, + 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, + 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, 0xA9E1, + 0xA9E2, 0xA9E3, 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, + 0xA9E8, 0xA9E9, 0xA9EA, 0xA9EB, 0xA9EC, 0xA9ED, + 0xA9EE, 0xA9EF,0x81379736,0x81379737,0x81379738,0x81379739, + 0xA854, 0xA855, 0xA856, 0xA857, 0xA858, 0xA859, + 0xA85A, 0xA85B, 0xA85C, 0xA85D, 0xA85E, 0xA85F, + 0xA860, 0xA861, 0xA862, 0xA863, 0xA864, 0xA865, + 0xA866, 0xA867, 0xA868, 0xA869, 0xA86A, 0xA86B, + 0xA86C, 0xA86D, 0xA86E, 0xA86F, 0xA870, 0xA871, + 0xA872, 0xA873, 0xA874, 0xA875, 0xA876, 0xA877, + 0x81379830,0x81379831,0x81379832,0x81379833,0x81379834,0x81379835, + 0x81379836,0x81379837,0x81379838,0x81379839,0x81379930,0x81379931, + 0x81379932, 0xA878, 0xA879, 0xA87A, 0xA87B, 0xA87C, + 0xA87D, 0xA87E, 0xA880, 0xA881, 0xA882, 0xA883, + 0xA884, 0xA885, 0xA886, 0xA887,0x81379933,0x81379934, + 0x81379935, 0xA888, 0xA889, 0xA88A,0x81379936,0x81379937, + 0x81379938,0x81379939,0x81379A30,0x81379A31,0x81379A32,0x81379A33, + 0x81379A34,0x81379A35, 0xA1F6, 0xA1F5,0x81379A36,0x81379A37, + 0x81379A38,0x81379A39,0x81379B30,0x81379B31,0x81379B32,0x81379B33, + 0x81379B34,0x81379B35,0x81379B36,0x81379B37,0x81379B38,0x81379B39, + 0x81379C30,0x81379C31, 0xA1F8, 0xA1F7,0x81379C32,0x81379C33, + 0x81379C34,0x81379C35,0x81379C36,0x81379C37,0x81379C38,0x81379C39, + 0xA88B, 0xA88C,0x81379D30,0x81379D31,0x81379D32,0x81379D33, + 0x81379D34,0x81379D35,0x81379D36,0x81379D37, 0xA1F4, 0xA1F3, + 0x81379D38,0x81379D39,0x81379E30, 0xA1F0,0x81379E31,0x81379E32, + 0xA1F2, 0xA1F1,0x81379E33,0x81379E34,0x81379E35,0x81379E36, + 0x81379E37,0x81379E38,0x81379E39,0x81379F30,0x81379F31,0x81379F32, + 0x81379F33,0x81379F34,0x81379F35,0x81379F36,0x81379F37,0x81379F38, + 0x81379F39,0x8137A030, 0xA88D, 0xA88E, 0xA88F, 0xA890, + 0x8137A031,0x8137A032,0x8137A033,0x8137A034,0x8137A035,0x8137A036, + 0x8137A037,0x8137A038,0x8137A039,0x8137A130,0x8137A131,0x8137A132, + 0x8137A133,0x8137A134,0x8137A135,0x8137A136,0x8137A137,0x8137A138, + 0x8137A139,0x8137A230,0x8137A231,0x8137A232,0x8137A233,0x8137A234, + 0x8137A235,0x8137A236,0x8137A237,0x8137A238,0x8137A239,0x8137A330, + 0x8137A331, 0xA1EF, 0xA1EE,0x8137A332,0x8137A333, 0xA891, + 0x8137A334,0x8137A335,0x8137A336,0x8137A337,0x8137A338,0x8137A339, + 0x8137A430,0x8137A431,0x8137A432,0x8137A433,0x8137A434,0x8137A435, + 0x8137A436,0x8137A437,0x8137A438,0x8137A439,0x8137A530,0x8137A531, + 0x8137A532,0x8137A533,0x8137A534,0x8137A535,0x8137A536,0x8137A537, + 0x8137A538,0x8137A539,0x8137A630,0x8137A631,0x8137A632,0x8137A633, + 0x8137A634,0x8137A635,0x8137A636,0x8137A637,0x8137A638,0x8137A639, + 0x8137A730,0x8137A731,0x8137A732,0x8137A733,0x8137A734,0x8137A735, + 0x8137A736,0x8137A737,0x8137A738,0x8137A739,0x8137A830,0x8137A831, + 0x8137A832,0x8137A833,0x8137A834,0x8137A835,0x8137A836,0x8137A837, + 0xA1E2,0x8137A838, 0xA1E1, 0xFE50,0x8138FD39,0x8138FE30, + 0xFE54,0x8138FE31,0x8138FE32,0x8138FE33, 0xFE57,0x8138FE34, + 0x8138FE35, 0xFE58, 0xFE5D,0x8138FE36,0x8138FE37,0x8138FE38, + 0x8138FE39,0x81398130,0x81398131,0x81398132,0x81398133,0x81398134, + 0x81398135, 0xFE5E,0x81398136,0x81398137,0x81398138,0x81398139, + 0x81398230,0x81398231,0x81398232,0x81398233,0x81398234,0x81398235, + 0x81398236,0x81398237,0x81398238,0x81398239,0x81398330, 0xFE6B, + 0x81398331,0x81398332, 0xFE6E,0x81398333,0x81398334,0x81398335, + 0xFE71,0x81398336,0x81398337,0x81398338,0x81398339, 0xFE73, + 0x81398430,0x81398431, 0xFE74, 0xFE75,0x81398432,0x81398433, + 0x81398434, 0xFE79,0x81398435,0x81398436,0x81398437,0x81398438, + 0x81398439,0x81398530,0x81398531,0x81398532,0x81398533,0x81398534, + 0x81398535,0x81398536,0x81398537,0x81398538, 0xFE84,0x81398539, + 0x81398630,0x81398631,0x81398632,0x81398633,0x81398634,0x81398635, + 0x81398636,0x81398637,0x81398638,0x81398639,0x81398730,0x81398731, + 0x81398732,0x81398733,0x81398734,0x81398735,0x81398736,0x81398737, + 0x81398738,0x81398739,0x81398830,0x81398831,0x81398832,0x81398833, + 0x81398834,0x81398835,0x81398836,0x81398837,0x81398838,0x81398839, + 0x81398930,0x81398931,0x81398932,0x81398933,0x81398934,0x81398935, + 0x81398936,0x81398937,0x81398938,0x81398939,0x81398A30,0x81398A31, + 0x81398A32,0x81398A33,0x81398A34,0x81398A35,0x81398A36,0x81398A37, + 0x81398A38,0x81398A39,0x81398B30,0x81398B31,0x81398B32,0x81398B33, + 0x81398B34,0x81398B35,0x81398B36,0x81398B37,0x81398B38,0x81398B39, + 0x81398C30,0x81398C31,0x81398C32,0x81398C33,0x81398C34,0x81398C35, + 0x81398C36,0x81398C37,0x81398C38,0x81398C39,0x81398D30,0x81398D31, + 0x81398D32,0x81398D33,0x81398D34,0x81398D35,0x81398D36,0x81398D37, + 0x81398D38,0x81398D39,0x81398E30,0x81398E31,0x81398E32,0x81398E33, + 0x81398E34,0x81398E35,0x81398E36,0x81398E37,0x81398E38,0x81398E39, + 0x81398F30,0x81398F31,0x81398F32,0x81398F33,0x81398F34,0x81398F35, + 0x81398F36,0x81398F37,0x81398F38,0x81398F39,0x81399030,0x81399031, + 0x81399032,0x81399033,0x81399034,0x81399035,0x81399036,0x81399037, + 0x81399038,0x81399039,0x81399130,0x81399131,0x81399132,0x81399133, + 0x81399134,0x81399135,0x81399136,0x81399137,0x81399138,0x81399139, + 0x81399230,0x81399231,0x81399232,0x81399233,0x81399234,0x81399235, + 0x81399236,0x81399237,0x81399238,0x81399239,0x81399330,0x81399331, + 0x81399332,0x81399333,0x81399334,0x81399335,0x81399336,0x81399337, + 0x81399338,0x81399339,0x81399430,0x81399431,0x81399432,0x81399433, + 0x81399434,0x81399435,0x81399436,0x81399437,0x81399438,0x81399439, + 0x81399530,0x81399531,0x81399532,0x81399533,0x81399534,0x81399535, + 0x81399536,0x81399537,0x81399538,0x81399539,0x81399630,0x81399631, + 0x81399632,0x81399633,0x81399634,0x81399635,0x81399636,0x81399637, + 0x81399638,0x81399639,0x81399730,0x81399731,0x81399732,0x81399733, + 0x81399734,0x81399735,0x81399736,0x81399737,0x81399738,0x81399739, + 0x81399830,0x81399831,0x81399832,0x81399833,0x81399834,0x81399835, + 0x81399836,0x81399837,0x81399838,0x81399839,0x81399930,0x81399931, + 0x81399932,0x81399933,0x81399934,0x81399935,0x81399936,0x81399937, + 0x81399938,0x81399939,0x81399A30,0x81399A31,0x81399A32,0x81399A33, + 0x81399A34,0x81399A35,0x81399A36,0x81399A37,0x81399A38,0x81399A39, + 0x81399B30,0x81399B31,0x81399B32,0x81399B33,0x81399B34,0x81399B35, + 0x81399B36,0x81399B37,0x81399B38,0x81399B39,0x81399C30,0x81399C31, + 0x81399C32,0x81399C33,0x81399C34,0x81399C35,0x81399C36,0x81399C37, + 0x81399C38,0x81399C39,0x81399D30,0x81399D31,0x81399D32,0x81399D33, + 0x81399D34,0x81399D35,0x81399D36,0x81399D37,0x81399D38,0x81399D39, + 0x81399E30,0x81399E31,0x81399E32,0x81399E33,0x81399E34,0x81399E35, + 0x81399E36,0x81399E37,0x81399E38,0x81399E39,0x81399F30,0x81399F31, + 0x81399F32,0x81399F33,0x81399F34,0x81399F35,0x81399F36,0x81399F37, + 0x81399F38,0x81399F39,0x8139A030,0x8139A031,0x8139A032,0x8139A033, + 0x8139A034,0x8139A035,0x8139A036,0x8139A037,0x8139A038,0x8139A039, + 0x8139A130,0x8139A131,0x8139A132,0x8139A133,0x8139A134,0x8139A135, + 0x8139A136,0x8139A137,0x8139A138,0x8139A139,0x8139A230,0x8139A231, + 0x8139A232,0x8139A233,0x8139A234,0x8139A235,0x8139A236,0x8139A237, + 0x8139A238,0x8139A239,0x8139A330,0x8139A331, 0xA98A, 0xA98B, + 0xA98C, 0xA98D, 0xA98E, 0xA98F, 0xA990, 0xA991, + 0xA992, 0xA993, 0xA994, 0xA995,0x8139A332,0x8139A333, + 0x8139A334,0x8139A335, 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, + 0x8139A336, 0xA1A9, 0xA965, 0xA996, 0xA1B4, 0xA1B5, + 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, + 0xA1BE, 0xA1BF, 0xA893, 0xA1FE, 0xA1B2, 0xA1B3, + 0xA1BC, 0xA1BD,0x8139A337,0x8139A338,0x8139A339,0x8139A430, + 0x8139A431, 0xA894, 0xA895,0x8139A432,0x8139A433, 0xA940, + 0xA941, 0xA942, 0xA943, 0xA944, 0xA945, 0xA946, + 0xA947, 0xA948,0x8139A434,0x8139A435,0x8139A436,0x8139A437, + 0x8139A438,0x8139A439,0x8139A530,0x8139A531,0x8139A532,0x8139A533, + 0x8139A534,0x8139A535,0x8139A536,0x8139A537,0x8139A538,0x8139A539, + 0x8139A630,0x8139A631,0x8139A632,0x8139A633, 0xA989,0x8139A634, + 0x8139A635, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, + 0xA4A6, 0xA4A7, 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, + 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, 0xA4B0, 0xA4B1, + 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, + 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, + 0xA4BE, 0xA4BF, 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, + 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, 0xA4C8, 0xA4C9, + 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, + 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, + 0xA4D6, 0xA4D7, 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, + 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, 0xA4E0, 0xA4E1, + 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, + 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, + 0xA4EE, 0xA4EF, 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, + 0x8139A636,0x8139A637,0x8139A638,0x8139A639,0x8139A730,0x8139A731, + 0x8139A732, 0xA961, 0xA962, 0xA966, 0xA967,0x8139A733, + 0x8139A734, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, + 0xA5A6, 0xA5A7, 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, + 0xA5AC, 0xA5AD, 0xA5AE, 0xA5AF, 0xA5B0, 0xA5B1, + 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, + 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, + 0xA5BE, 0xA5BF, 0xA5C0, 0xA5C1, 0xA5C2, 0xA5C3, + 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, 0xA5C8, 0xA5C9, + 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, + 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, + 0xA5D6, 0xA5D7, 0xA5D8, 0xA5D9, 0xA5DA, 0xA5DB, + 0xA5DC, 0xA5DD, 0xA5DE, 0xA5DF, 0xA5E0, 0xA5E1, + 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, + 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, + 0xA5EE, 0xA5EF, 0xA5F0, 0xA5F1, 0xA5F2, 0xA5F3, + 0xA5F4, 0xA5F5, 0xA5F6,0x8139A735,0x8139A736,0x8139A737, + 0x8139A738,0x8139A739, 0xA960, 0xA963, 0xA964,0x8139A830, + 0x8139A831,0x8139A832,0x8139A833,0x8139A834,0x8139A835, 0xA8C5, + 0xA8C6, 0xA8C7, 0xA8C8, 0xA8C9, 0xA8CA, 0xA8CB, + 0xA8CC, 0xA8CD, 0xA8CE, 0xA8CF, 0xA8D0, 0xA8D1, + 0xA8D2, 0xA8D3, 0xA8D4, 0xA8D5, 0xA8D6, 0xA8D7, + 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, 0xA8DD, + 0xA8DE, 0xA8DF, 0xA8E0, 0xA8E1, 0xA8E2, 0xA8E3, + 0xA8E4, 0xA8E5, 0xA8E6, 0xA8E7, 0xA8E8, 0xA8E9, + 0x8139A836,0x8139A837,0x8139A838,0x8139A839,0x8139A930,0x8139A931, + 0x8139A932,0x8139A933,0x8139A934,0x8139A935,0x8139A936,0x8139A937, + 0x8139A938,0x8139A939,0x8139AA30,0x8139AA31,0x8139AA32,0x8139AA33, + 0x8139AA34,0x8139AA35,0x8139AA36,0x8139AA37,0x8139AA38,0x8139AA39, + 0x8139AB30,0x8139AB31,0x8139AB32,0x8139AB33,0x8139AB34,0x8139AB35, + 0x8139AB36,0x8139AB37,0x8139AB38,0x8139AB39,0x8139AC30,0x8139AC31, + 0x8139AC32,0x8139AC33,0x8139AC34,0x8139AC35,0x8139AC36,0x8139AC37, + 0x8139AC38,0x8139AC39,0x8139AD30,0x8139AD31,0x8139AD32,0x8139AD33, + 0x8139AD34,0x8139AD35,0x8139AD36,0x8139AD37,0x8139AD38,0x8139AD39, + 0x8139AE30,0x8139AE31,0x8139AE32,0x8139AE33,0x8139AE34,0x8139AE35, + 0x8139AE36,0x8139AE37,0x8139AE38,0x8139AE39,0x8139AF30,0x8139AF31, + 0x8139AF32,0x8139AF33,0x8139AF34,0x8139AF35,0x8139AF36,0x8139AF37, + 0x8139AF38,0x8139AF39,0x8139B030,0x8139B031,0x8139B032,0x8139B033, + 0x8139B034,0x8139B035,0x8139B036,0x8139B037,0x8139B038,0x8139B039, + 0x8139B130,0x8139B131,0x8139B132,0x8139B133,0x8139B134,0x8139B135, + 0x8139B136,0x8139B137,0x8139B138,0x8139B139,0x8139B230,0x8139B231, + 0x8139B232,0x8139B233,0x8139B234,0x8139B235,0x8139B236,0x8139B237, + 0x8139B238,0x8139B239,0x8139B330,0x8139B331,0x8139B332,0x8139B333, + 0x8139B334,0x8139B335,0x8139B336,0x8139B337,0x8139B338,0x8139B339, + 0x8139B430,0x8139B431,0x8139B432,0x8139B433,0x8139B434,0x8139B435, + 0x8139B436,0x8139B437,0x8139B438,0x8139B439,0x8139B530,0x8139B531, + 0x8139B532,0x8139B533,0x8139B534,0x8139B535,0x8139B536,0x8139B537, + 0x8139B538,0x8139B539,0x8139B630,0x8139B631,0x8139B632,0x8139B633, + 0x8139B634,0x8139B635,0x8139B636,0x8139B637,0x8139B638,0x8139B639, + 0x8139B730,0x8139B731,0x8139B732,0x8139B733,0x8139B734,0x8139B735, + 0x8139B736,0x8139B737,0x8139B738,0x8139B739,0x8139B830,0x8139B831, + 0x8139B832,0x8139B833,0x8139B834,0x8139B835,0x8139B836,0x8139B837, + 0x8139B838,0x8139B839,0x8139B930,0x8139B931,0x8139B932,0x8139B933, + 0x8139B934,0x8139B935,0x8139B936,0x8139B937,0x8139B938,0x8139B939, + 0x8139BA30,0x8139BA31,0x8139BA32,0x8139BA33,0x8139BA34,0x8139BA35, + 0x8139BA36,0x8139BA37,0x8139BA38,0x8139BA39,0x8139BB30,0x8139BB31, + 0x8139BB32,0x8139BB33,0x8139BB34,0x8139BB35,0x8139BB36,0x8139BB37, + 0x8139BB38,0x8139BB39,0x8139BC30,0x8139BC31,0x8139BC32,0x8139BC33, + 0x8139BC34,0x8139BC35,0x8139BC36,0x8139BC37,0x8139BC38,0x8139BC39, + 0x8139BD30,0x8139BD31,0x8139BD32,0x8139BD33,0x8139BD34,0x8139BD35, + 0x8139BD36,0x8139BD37,0x8139BD38,0x8139BD39,0x8139BE30,0x8139BE31, + 0x8139BE32,0x8139BE33,0x8139BE34,0x8139BE35,0x8139BE36,0x8139BE37, + 0x8139BE38,0x8139BE39,0x8139BF30,0x8139BF31,0x8139BF32,0x8139BF33, + 0x8139BF34,0x8139BF35,0x8139BF36,0x8139BF37,0x8139BF38,0x8139BF39, + 0x8139C030,0x8139C031,0x8139C032,0x8139C033,0x8139C034,0x8139C035, + 0x8139C036,0x8139C037,0x8139C038,0x8139C039,0x8139C130,0x8139C131, + 0xA2E5, 0xA2E6, 0xA2E7, 0xA2E8, 0xA2E9, 0xA2EA, + 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE,0x8139C132,0x8139C133, + 0x8139C134,0x8139C135,0x8139C136,0x8139C137,0x8139C138, 0xA95A, + 0x8139C139,0x8139C230,0x8139C231,0x8139C232,0x8139C233,0x8139C234, + 0x8139C235,0x8139C236,0x8139C237,0x8139C238,0x8139C239,0x8139C330, + 0x8139C331,0x8139C332,0x8139C333,0x8139C334,0x8139C335,0x8139C336, + 0x8139C337,0x8139C338,0x8139C339,0x8139C430,0x8139C431,0x8139C432, + 0x8139C433,0x8139C434,0x8139C435,0x8139C436,0x8139C437,0x8139C438, + 0x8139C439,0x8139C530,0x8139C531,0x8139C532,0x8139C533,0x8139C534, + 0x8139C535,0x8139C536,0x8139C537,0x8139C538,0x8139C539,0x8139C630, + 0x8139C631,0x8139C632,0x8139C633,0x8139C634,0x8139C635,0x8139C636, + 0x8139C637,0x8139C638,0x8139C639,0x8139C730,0x8139C731,0x8139C732, + 0x8139C733,0x8139C734,0x8139C735,0x8139C736,0x8139C737,0x8139C738, + 0x8139C739,0x8139C830,0x8139C831,0x8139C832,0x8139C833,0x8139C834, + 0x8139C835,0x8139C836,0x8139C837,0x8139C838,0x8139C839,0x8139C930, + 0x8139C931,0x8139C932,0x8139C933,0x8139C934,0x8139C935,0x8139C936, + 0x8139C937,0x8139C938,0x8139C939,0x8139CA30,0x8139CA31,0x8139CA32, + 0x8139CA33,0x8139CA34,0x8139CA35,0x8139CA36,0x8139CA37,0x8139CA38, + 0x8139CA39,0x8139CB30,0x8139CB31,0x8139CB32,0x8139CB33,0x8139CB34, + 0x8139CB35,0x8139CB36,0x8139CB37,0x8139CB38,0x8139CB39,0x8139CC30, + 0x8139CC31,0x8139CC32,0x8139CC33,0x8139CC34,0x8139CC35,0x8139CC36, + 0x8139CC37,0x8139CC38,0x8139CC39,0x8139CD30,0x8139CD31, 0xA949, + 0x8139CD32,0x8139CD33,0x8139CD34,0x8139CD35,0x8139CD36,0x8139CD37, + 0x8139CD38,0x8139CD39,0x8139CE30,0x8139CE31,0x8139CE32,0x8139CE33, + 0x8139CE34,0x8139CE35,0x8139CE36,0x8139CE37,0x8139CE38,0x8139CE39, + 0x8139CF30,0x8139CF31,0x8139CF32,0x8139CF33,0x8139CF34,0x8139CF35, + 0x8139CF36,0x8139CF37,0x8139CF38,0x8139CF39,0x8139D030,0x8139D031, + 0x8139D032,0x8139D033,0x8139D034,0x8139D035,0x8139D036,0x8139D037, + 0x8139D038,0x8139D039,0x8139D130,0x8139D131,0x8139D132,0x8139D133, + 0x8139D134,0x8139D135,0x8139D136,0x8139D137,0x8139D138,0x8139D139, + 0x8139D230,0x8139D231,0x8139D232,0x8139D233,0x8139D234,0x8139D235, + 0x8139D236,0x8139D237,0x8139D238,0x8139D239,0x8139D330,0x8139D331, + 0x8139D332,0x8139D333,0x8139D334,0x8139D335,0x8139D336,0x8139D337, + 0x8139D338,0x8139D339,0x8139D430,0x8139D431,0x8139D432,0x8139D433, + 0x8139D434,0x8139D435,0x8139D436,0x8139D437,0x8139D438,0x8139D439, + 0x8139D530,0x8139D531,0x8139D532,0x8139D533,0x8139D534,0x8139D535, + 0x8139D536,0x8139D537,0x8139D538,0x8139D539,0x8139D630,0x8139D631, + 0x8139D632,0x8139D633,0x8139D634,0x8139D635,0x8139D636,0x8139D637, + 0x8139D638,0x8139D639,0x8139D730,0x8139D731,0x8139D732,0x8139D733, + 0x8139D734,0x8139D735,0x8139D736,0x8139D737,0x8139D738,0x8139D739, + 0x8139D830,0x8139D831,0x8139D832,0x8139D833,0x8139D834,0x8139D835, + 0x8139D836,0x8139D837,0x8139D838,0x8139D839,0x8139D930,0x8139D931, + 0x8139D932,0x8139D933,0x8139D934,0x8139D935,0x8139D936,0x8139D937, + 0x8139D938,0x8139D939,0x8139DA30,0x8139DA31,0x8139DA32,0x8139DA33, + 0x8139DA34,0x8139DA35,0x8139DA36,0x8139DA37,0x8139DA38,0x8139DA39, + 0x8139DB30,0x8139DB31,0x8139DB32,0x8139DB33,0x8139DB34,0x8139DB35, + 0x8139DB36,0x8139DB37,0x8139DB38,0x8139DB39,0x8139DC30,0x8139DC31, + 0x8139DC32,0x8139DC33,0x8139DC34,0x8139DC35,0x8139DC36,0x8139DC37, + 0x8139DC38,0x8139DC39,0x8139DD30,0x8139DD31,0x8139DD32,0x8139DD33, + 0x8139DD34,0x8139DD35,0x8139DD36,0x8139DD37,0x8139DD38,0x8139DD39, + 0x8139DE30,0x8139DE31,0x8139DE32,0x8139DE33,0x8139DE34,0x8139DE35, + 0x8139DE36,0x8139DE37,0x8139DE38,0x8139DE39,0x8139DF30,0x8139DF31, + 0x8139DF32,0x8139DF33,0x8139DF34,0x8139DF35,0x8139DF36,0x8139DF37, + 0x8139DF38,0x8139DF39,0x8139E030,0x8139E031,0x8139E032,0x8139E033, + 0x8139E034,0x8139E035,0x8139E036,0x8139E037,0x8139E038,0x8139E039, + 0x8139E130,0x8139E131,0x8139E132,0x8139E133,0x8139E134,0x8139E135, + 0x8139E136,0x8139E137,0x8139E138,0x8139E139,0x8139E230,0x8139E231, + 0x8139E232,0x8139E233,0x8139E234,0x8139E235,0x8139E236,0x8139E237, + 0x8139E238,0x8139E239,0x8139E330,0x8139E331,0x8139E332,0x8139E333, + 0x8139E334,0x8139E335,0x8139E336,0x8139E337,0x8139E338,0x8139E339, + 0x8139E430,0x8139E431,0x8139E432,0x8139E433,0x8139E434,0x8139E435, + 0xA94A, 0xA94B,0x8139E436,0x8139E437,0x8139E438,0x8139E439, + 0x8139E530,0x8139E531,0x8139E532,0x8139E533,0x8139E534,0x8139E535, + 0x8139E536,0x8139E537, 0xA94C, 0xA94D, 0xA94E,0x8139E538, + 0x8139E539, 0xA94F,0x8139E630,0x8139E631,0x8139E632,0x8139E633, + 0x8139E634,0x8139E635,0x8139E636,0x8139E637,0x8139E638,0x8139E639, + 0x8139E730,0x8139E731,0x8139E732,0x8139E733,0x8139E734,0x8139E735, + 0x8139E736,0x8139E737,0x8139E738,0x8139E739,0x8139E830,0x8139E831, + 0x8139E832,0x8139E833,0x8139E834,0x8139E835,0x8139E836,0x8139E837, + 0x8139E838,0x8139E839,0x8139E930,0x8139E931,0x8139E932,0x8139E933, + 0xA950,0x8139E934,0x8139E935,0x8139E936,0x8139E937,0x8139E938, + 0x8139E939,0x8139EA30,0x8139EA31,0x8139EA32, 0xA951,0x8139EA33, + 0x8139EA34, 0xA952, 0xA953,0x8139EA35,0x8139EA36, 0xA954, + 0x8139EA37,0x8139EA38,0x8139EA39,0x8139EB30,0x8139EB31,0x8139EB32, + 0x8139EB33,0x8139EB34,0x8139EB35,0x8139EB36,0x8139EB37,0x8139EB38, + 0x8139EB39,0x8139EC30,0x8139EC31,0x8139EC32,0x8139EC33,0x8139EC34, + 0x8139EC35,0x8139EC36,0x8139EC37,0x8139EC38,0x8139EC39,0x8139ED30, + 0x8139ED31,0x8139ED32,0x8139ED33,0x8139ED34,0x8139ED35,0x8139ED36, + 0x8139ED37,0x8139ED38,0x8139ED39,0x8139EE30,0x8139EE31,0x8139EE32, + 0x8139EE33,0x8139EE34,0x8139EE35,0x8139EE36,0x8139EE37,0x8139EE38, + 0x8139EE39,0x8139EF30,0x8139EF31,0x8139EF32,0x8139EF33,0x8139EF34, + 0x8139EF35,0x8139EF36,0x8139EF37,0x8139EF38,0x8139EF39,0x8139F030, + 0x8139F031,0x8139F032,0x8139F033,0x8139F034,0x8139F035,0x8139F036, + 0x8139F037,0x8139F038,0x8139F039,0x8139F130,0x8139F131,0x8139F132, + 0x8139F133,0x8139F134,0x8139F135,0x8139F136,0x8139F137,0x8139F138, + 0x8139F139,0x8139F230,0x8139F231,0x8139F232,0x8139F233,0x8139F234, + 0x8139F235,0x8139F236,0x8139F237,0x8139F238,0x8139F239,0x8139F330, + 0x8139F331,0x8139F332,0x8139F333,0x8139F334,0x8139F335,0x8139F336, + 0x8139F337,0x8139F338,0x8139F339,0x8139F430,0x8139F431,0x8139F432, + 0x8139F433,0x8139F434,0x8139F435,0x8139F436,0x8139F437,0x8139F438, + 0x8139F439,0x8139F530,0x8139F531,0x8139F532,0x8139F533,0x8139F534, + 0x8139F535,0x8139F536,0x8139F537,0x8139F538,0x8139F539, 0xFE56, + 0x8139F630,0x8139F631,0x8139F632,0x8139F633,0x8139F634,0x8139F635, + 0x8139F636,0x8139F637,0x8139F638,0x8139F639,0x8139F730,0x8139F731, + 0x8139F732,0x8139F733,0x8139F734,0x8139F735,0x8139F736,0x8139F737, + 0x8139F738,0x8139F739,0x8139F830,0x8139F831,0x8139F832,0x8139F833, + 0x8139F834,0x8139F835,0x8139F836,0x8139F837,0x8139F838,0x8139F839, + 0x8139F930,0x8139F931,0x8139F932,0x8139F933,0x8139F934,0x8139F935, + 0x8139F936,0x8139F937,0x8139F938,0x8139F939,0x8139FA30,0x8139FA31, + 0x8139FA32, 0xFE55,0x8139FA33,0x8139FA34,0x8139FA35,0x8139FA36, + 0x8139FA37,0x8139FA38,0x8139FA39,0x8139FB30,0x8139FB31,0x8139FB32, + 0x8139FB33,0x8139FB34,0x8139FB35,0x8139FB36,0x8139FB37,0x8139FB38, + 0x8139FB39,0x8139FC30,0x8139FC31,0x8139FC32,0x8139FC33,0x8139FC34, + 0x8139FC35,0x8139FC36,0x8139FC37,0x8139FC38,0x8139FC39,0x8139FD30, + 0x8139FD31,0x8139FD32,0x8139FD33,0x8139FD34,0x8139FD35,0x8139FD36, + 0x8139FD37,0x8139FD38,0x8139FD39,0x8139FE30,0x8139FE31,0x8139FE32, + 0x8139FE33,0x8139FE34,0x8139FE35,0x8139FE36,0x8139FE37,0x8139FE38, + 0x8139FE39,0x82308130,0x82308131,0x82308132,0x82308133,0x82308134, + 0x82308135,0x82308136,0x82308137,0x82308138,0x82308139,0x82308230, + 0x82308231,0x82308232,0x82308233,0x82308234,0x82308235,0x82308236, + 0x82308237,0x82308238,0x82308239,0x82308330,0x82308331,0x82308332, + 0x82308333,0x82308334,0x82308335,0x82308336,0x82308337,0x82308338, + 0x82308339,0x82308430,0x82308431,0x82308432,0x82308433,0x82308434, + 0x82308435,0x82308436,0x82308437,0x82308438,0x82308439,0x82308530, + 0x82308531,0x82308532,0x82308533,0x82308534,0x82308535,0x82308536, + 0x82308537,0x82308538,0x82308539,0x82308630,0x82308631,0x82308632, + 0x82308633,0x82308634,0x82308635,0x82308636,0x82308637,0x82308638, + 0x82308639,0x82308730,0x82308731,0x82308732,0x82308733,0x82308734, + 0x82308735,0x82308736,0x82308737,0x82308738,0x82308739,0x82308830, + 0x82308831,0x82308832,0x82308833,0x82308834,0x82308835,0x82308836, + 0x82308837,0x82308838,0x82308839,0x82308930,0x82308931,0x82308932, + 0x82308933,0x82308934,0x82308935,0x82308936,0x82308937,0x82308938, + 0x82308939,0x82308A30,0x82308A31,0x82308A32,0x82308A33,0x82308A34, + 0x82308A35,0x82308A36,0x82308A37,0x82308A38,0x82308A39,0x82308B30, + 0x82308B31,0x82308B32,0x82308B33,0x82308B34,0x82308B35,0x82308B36, + 0x82308B37,0x82308B38,0x82308B39,0x82308C30,0x82308C31,0x82308C32, + 0x82308C33,0x82308C34,0x82308C35,0x82308C36,0x82308C37,0x82308C38, + 0x82308C39,0x82308D30,0x82308D31,0x82308D32,0x82308D33,0x82308D34, + 0x82308D35,0x82308D36,0x82308D37,0x82308D38,0x82308D39,0x82308E30, + 0x82308E31,0x82308E32,0x82308E33,0x82308E34,0x82308E35,0x82308E36, + 0x82308E37,0x82308E38,0x82308E39,0x82308F30,0x82308F31,0x82308F32, + 0x82308F33,0x82308F34,0x82308F35,0x82308F36,0x82308F37,0x82308F38, + 0x82308F39,0x82309030,0x82309031,0x82309032,0x82309033,0x82309034, + 0x82309035,0x82309036,0x82309037,0x82309038,0x82309039,0x82309130, + 0x82309131,0x82309132,0x82309133,0x82309134,0x82309135,0x82309136, + 0x82309137,0x82309138,0x82309139,0x82309230,0x82309231,0x82309232, + 0x82309233,0x82309234,0x82309235,0x82309236,0x82309237,0x82309238, + 0x82309239,0x82309330,0x82309331,0x82309332,0x82309333,0x82309334, + 0x82309335,0x82309336,0x82309337,0x82309338,0x82309339,0x82309430, + 0x82309431,0x82309432,0x82309433,0x82309434,0x82309435,0x82309436, + 0x82309437,0x82309438,0x82309439,0x82309530,0x82309531,0x82309532, + 0x82309533,0x82309534,0x82309535,0x82309536,0x82309537,0x82309538, + 0x82309539,0x82309630,0x82309631,0x82309632,0x82309633,0x82309634, + 0x82309635,0x82309636,0x82309637,0x82309638,0x82309639,0x82309730, + 0x82309731,0x82309732,0x82309733,0x82309734,0x82309735,0x82309736, + 0x82309737,0x82309738,0x82309739,0x82309830,0x82309831,0x82309832, + 0x82309833,0x82309834,0x82309835,0x82309836,0x82309837,0x82309838, + 0x82309839,0x82309930,0x82309931,0x82309932,0x82309933,0x82309934, + 0x82309935,0x82309936,0x82309937,0x82309938,0x82309939,0x82309A30, + 0xFE5A,0x82309A31,0x82309A32,0x82309A33,0x82309A34,0x82309A35, + 0x82309A36,0x82309A37,0x82309A38,0x82309A39,0x82309B30,0x82309B31, + 0x82309B32,0x82309B33,0x82309B34,0x82309B35,0x82309B36,0x82309B37, + 0x82309B38,0x82309B39,0x82309C30,0x82309C31,0x82309C32,0x82309C33, + 0x82309C34,0x82309C35,0x82309C36,0x82309C37,0x82309C38,0x82309C39, + 0x82309D30,0x82309D31,0x82309D32,0x82309D33,0x82309D34,0x82309D35, + 0x82309D36,0x82309D37,0x82309D38,0x82309D39,0x82309E30,0x82309E31, + 0x82309E32,0x82309E33,0x82309E34,0x82309E35,0x82309E36,0x82309E37, + 0x82309E38,0x82309E39,0x82309F30,0x82309F31,0x82309F32,0x82309F33, + 0x82309F34,0x82309F35,0x82309F36,0x82309F37,0x82309F38,0x82309F39, + 0x8230A030,0x8230A031,0x8230A032,0x8230A033,0x8230A034,0x8230A035, + 0x8230A036,0x8230A037,0x8230A038,0x8230A039,0x8230A130,0x8230A131, + 0x8230A132,0x8230A133,0x8230A134,0x8230A135,0x8230A136,0x8230A137, + 0x8230A138,0x8230A139,0x8230A230,0x8230A231,0x8230A232,0x8230A233, + 0x8230A234,0x8230A235,0x8230A236,0x8230A237,0x8230A238,0x8230A239, + 0x8230A330,0x8230A331,0x8230A332,0x8230A333,0x8230A334,0x8230A335, + 0x8230A336,0x8230A337,0x8230A338,0x8230A339,0x8230A430,0x8230A431, + 0x8230A432,0x8230A433,0x8230A434,0x8230A435,0x8230A436,0x8230A437, + 0x8230A438,0x8230A439,0x8230A530,0x8230A531, 0xFE5C,0x8230A532, + 0x8230A533,0x8230A534,0x8230A535,0x8230A536,0x8230A537,0x8230A538, + 0x8230A539,0x8230A630,0x8230A631,0x8230A632, 0xFE5B, 0xFE60, + 0x8230F238,0x8230F239,0x8230F330,0x8230F331,0x8230F332,0x8230F333, + 0x8230F334,0x8230F335,0x8230F336,0x8230F337,0x8230F338,0x8230F339, + 0x8230F430,0x8230F431,0x8230F432,0x8230F433,0x8230F434,0x8230F435, + 0x8230F436,0x8230F437,0x8230F438,0x8230F439,0x8230F530,0x8230F531, + 0x8230F532,0x8230F533,0x8230F534,0x8230F535,0x8230F536,0x8230F537, + 0x8230F538,0x8230F539,0x8230F630,0x8230F631,0x8230F632,0x8230F633, + 0x8230F634,0x8230F635,0x8230F636,0x8230F637,0x8230F638,0x8230F639, + 0x8230F730,0x8230F731,0x8230F732,0x8230F733,0x8230F734,0x8230F735, + 0x8230F736,0x8230F737,0x8230F738,0x8230F739,0x8230F830,0x8230F831, + 0x8230F832,0x8230F833,0x8230F834,0x8230F835,0x8230F836,0x8230F837, + 0x8230F838,0x8230F839,0x8230F930,0x8230F931,0x8230F932,0x8230F933, + 0x8230F934,0x8230F935,0x8230F936,0x8230F937,0x8230F938,0x8230F939, + 0x8230FA30,0x8230FA31,0x8230FA32,0x8230FA33,0x8230FA34,0x8230FA35, + 0x8230FA36,0x8230FA37,0x8230FA38,0x8230FA39,0x8230FB30,0x8230FB31, + 0x8230FB32, 0xFE5F,0x8230FB33,0x8230FB34,0x8230FB35,0x8230FB36, + 0x8230FB37,0x8230FB38,0x8230FB39,0x8230FC30,0x8230FC31,0x8230FC32, + 0x8230FC33,0x8230FC34,0x8230FC35,0x8230FC36,0x8230FC37,0x8230FC38, + 0x8230FC39,0x8230FD30,0x8230FD31,0x8230FD32,0x8230FD33,0x8230FD34, + 0x8230FD35,0x8230FD36,0x8230FD37,0x8230FD38,0x8230FD39,0x8230FE30, + 0x8230FE31,0x8230FE32,0x8230FE33,0x8230FE34,0x8230FE35,0x8230FE36, + 0x8230FE37,0x8230FE38,0x8230FE39,0x82318130,0x82318131,0x82318132, + 0x82318133,0x82318134,0x82318135,0x82318136,0x82318137,0x82318138, + 0x82318139,0x82318230,0x82318231,0x82318232,0x82318233,0x82318234, + 0x82318235,0x82318236,0x82318237,0x82318238,0x82318239,0x82318330, + 0x82318331,0x82318332,0x82318333,0x82318334,0x82318335,0x82318336, + 0x82318337,0x82318338,0x82318339,0x82318430,0x82318431,0x82318432, + 0x82318433,0x82318434,0x82318435,0x82318436,0x82318437,0x82318438, + 0x82318439,0x82318530,0x82318531,0x82318532,0x82318533,0x82318534, + 0x82318535,0x82318536,0x82318537,0x82318538,0x82318539,0x82318630, + 0x82318631,0x82318632,0x82318633,0x82318634,0x82318635,0x82318636, + 0x82318637,0x82318638, 0xFE62, 0xFE65,0x82318639,0x82318730, + 0x82318731,0x82318732,0x82318733,0x82318734,0x82318735,0x82318736, + 0x82318737,0x82318738,0x82318739,0x82318830,0x82318831,0x82318832, + 0xFE63,0x82318833,0x82318834,0x82318835,0x82318836,0x82318837, + 0x82318838,0x82318839,0x82318930,0x82318931,0x82318932,0x82318933, + 0x82318934,0x82318935,0x82318936,0x82318937,0x82318938,0x82318939, + 0x82318A30,0x82318A31,0x82318A32,0x82318A33,0x82318A34,0x82318A35, + 0x82318A36,0x82318A37,0x82318A38,0x82318A39,0x82318B30,0x82318B31, + 0x82318B32,0x82318B33,0x82318B34,0x82318B35,0x82318B36,0x82318B37, + 0x82318B38,0x82318B39,0x82318C30,0x82318C31,0x82318C32,0x82318C33, + 0x82318C34,0x82318C35,0x82318C36,0x82318C37,0x82318C38,0x82318C39, + 0x82318D30,0x82318D31,0x82318D32,0x82318D33,0x82318D34,0x82318D35, + 0x82318D36,0x82318D37,0x82318D38,0x82318D39,0x82318E30,0x82318E31, + 0x82318E32,0x82318E33,0x82318E34,0x82318E35,0x82318E36,0x82318E37, + 0x82318E38,0x82318E39,0x82318F30,0x82318F31,0x82318F32,0x82318F33, + 0x82318F34,0x82318F35,0x82318F36,0x82318F37,0x82318F38,0x82318F39, + 0x82319030,0x82319031,0x82319032,0x82319033,0x82319034,0x82319035, + 0x82319036,0x82319037,0x82319038,0x82319039,0x82319130,0x82319131, + 0x82319132,0x82319133,0x82319134,0x82319135,0x82319136,0x82319137, + 0x82319138,0x82319139,0x82319230,0x82319231,0x82319232,0x82319233, + 0x82319234,0x82319235,0x82319236,0x82319237,0x82319238,0x82319239, + 0x82319330,0x82319331,0x82319332,0x82319333,0x82319334,0x82319335, + 0x82319336,0x82319337,0x82319338,0x82319339,0x82319430,0x82319431, + 0x82319432,0x82319433,0x82319434,0x82319435,0x82319436,0x82319437, + 0x82319438,0x82319439,0x82319530,0x82319531,0x82319532,0x82319533, + 0x82319534,0x82319535,0x82319536,0x82319537,0x82319538,0x82319539, + 0x82319630,0x82319631,0x82319632,0x82319633,0x82319634,0x82319635, + 0x82319636,0x82319637,0x82319638,0x82319639, 0xFE64,0x82319730, + 0x82319731,0x82319732,0x82319733,0x82319734,0x82319735,0x82319736, + 0x82319737,0x82319738,0x82319739,0x82319830,0x82319831,0x82319832, + 0x82319833,0x82319834,0x82319835,0x82319836,0x82319837,0x82319838, + 0x82319839,0x82319930,0x82319931,0x82319932,0x82319933,0x82319934, + 0x82319935,0x82319936,0x82319937,0x82319938,0x82319939,0x82319A30, + 0x82319A31,0x82319A32,0x82319A33,0x82319A34,0x82319A35,0x82319A36, + 0x82319A37,0x82319A38,0x82319A39,0x82319B30,0x82319B31,0x82319B32, + 0x82319B33,0x82319B34,0x82319B35,0x82319B36,0x82319B37,0x82319B38, + 0x82319B39,0x82319C30,0x82319C31,0x82319C32,0x82319C33,0x82319C34, + 0x82319C35,0x82319C36,0x82319C37,0x82319C38,0x82319C39,0x82319D30, + 0x82319D31,0x82319D32,0x82319D33,0x82319D34,0x82319D35,0x82319D36, + 0x82319D37,0x82319D38,0x82319D39,0x82319E30,0x82319E31,0x82319E32, + 0x82319E33,0x82319E34,0x82319E35,0x82319E36,0x82319E37,0x82319E38, + 0x82319E39,0x82319F30,0x82319F31,0x82319F32,0x82319F33,0x82319F34, + 0x82319F35,0x82319F36,0x82319F37,0x82319F38,0x82319F39,0x8231A030, + 0x8231A031,0x8231A032,0x8231A033,0x8231A034,0x8231A035,0x8231A036, + 0x8231A037,0x8231A038,0x8231A039,0x8231A130,0x8231A131,0x8231A132, + 0x8231A133,0x8231A134,0x8231A135,0x8231A136,0x8231A137,0x8231A138, + 0x8231A139,0x8231A230,0x8231A231,0x8231A232,0x8231A233,0x8231A234, + 0x8231A235,0x8231A236,0x8231A237,0x8231A238,0x8231A239,0x8231A330, + 0x8231A331,0x8231A332,0x8231A333,0x8231A334,0x8231A335,0x8231A336, + 0x8231A337,0x8231A338,0x8231A339,0x8231A430,0x8231A431,0x8231A432, + 0x8231A433,0x8231A434,0x8231A435,0x8231A436,0x8231A437,0x8231A438, + 0x8231A439,0x8231A530,0x8231A531,0x8231A532,0x8231A533,0x8231A534, + 0x8231A535,0x8231A536,0x8231A537,0x8231A538,0x8231A539,0x8231A630, + 0x8231A631,0x8231A632,0x8231A633,0x8231A634,0x8231A635,0x8231A636, + 0x8231A637,0x8231A638,0x8231A639,0x8231A730,0x8231A731,0x8231A732, + 0x8231A733,0x8231A734,0x8231A735,0x8231A736,0x8231A737,0x8231A738, + 0x8231A739,0x8231A830,0x8231A831,0x8231A832,0x8231A833,0x8231A834, + 0x8231A835,0x8231A836,0x8231A837,0x8231A838,0x8231A839,0x8231A930, + 0x8231A931,0x8231A932,0x8231A933,0x8231A934,0x8231A935,0x8231A936, + 0x8231A937,0x8231A938,0x8231A939,0x8231AA30,0x8231AA31,0x8231AA32, + 0x8231AA33,0x8231AA34,0x8231AA35,0x8231AA36,0x8231AA37,0x8231AA38, + 0x8231AA39,0x8231AB30,0x8231AB31,0x8231AB32,0x8231AB33,0x8231AB34, + 0x8231AB35,0x8231AB36,0x8231AB37,0x8231AB38,0x8231AB39,0x8231AC30, + 0x8231AC31,0x8231AC32,0x8231AC33,0x8231AC34,0x8231AC35,0x8231AC36, + 0x8231AC37, 0xFE68,0x8231AC38,0x8231AC39,0x8231AD30,0x8231AD31, + 0x8231AD32,0x8231AD33,0x8231AD34,0x8231AD35,0x8231AD36,0x8231AD37, + 0x8231AD38,0x8231AD39,0x8231AE30,0x8231AE31,0x8231AE32,0x8231AE33, + 0x8231AE34,0x8231AE35,0x8231AE36,0x8231AE37,0x8231AE38,0x8231AE39, + 0x8231AF30,0x8231AF31,0x8231AF32,0x8231AF33,0x8231AF34,0x8231AF35, + 0x8231AF36,0x8231AF37,0x8231AF38,0x8231AF39,0x8231B030,0x8231B031, + 0x8231B032,0x8231B033,0x8231B034,0x8231B035,0x8231B036,0x8231B037, + 0x8231B038,0x8231B039,0x8231B130,0x8231B131,0x8231B132,0x8231B133, + 0x8231B134,0x8231B135,0x8231B136,0x8231B137,0x8231B138,0x8231B139, + 0x8231B230,0x8231B231,0x8231B232,0x8231B233,0x8231B234,0x8231B235, + 0x8231B236,0x8231B237,0x8231B238,0x8231B239,0x8231B330,0x8231B331, + 0x8231B332,0x8231B333,0x8231B334,0x8231B335,0x8231B336,0x8231B337, + 0x8231B338,0x8231B339,0x8231B430,0x8231B431,0x8231B432,0x8231B433, + 0x8231B434,0x8231B435,0x8231B436,0x8231B437,0x8231B438,0x8231B439, + 0x8231B530,0x8231B531,0x8231B532,0x8231B533,0x8231B534,0x8231B535, + 0x8231B536,0x8231B537,0x8231B538,0x8231B539,0x8231B630,0x8231B631, + 0x8231B632,0x8231B633,0x8231B634,0x8231B635,0x8231B636,0x8231B637, + 0x8231B638,0x8231B639,0x8231B730,0x8231B731,0x8231B732,0x8231B733, + 0x8231B734,0x8231B735,0x8231B736,0x8231B737,0x8231B738,0x8231B739, + 0x8231B830,0x8231B831,0x8231B832,0x8231B833,0x8231B834,0x8231B835, + 0x8231B836,0x8231B837,0x8231B838,0x8231B839,0x8231B930,0x8231B931, + 0x8231B932,0x8231B933,0x8231B934,0x8231B935,0x8231B936,0x8231B937, + 0x8231B938,0x8231B939,0x8231BA30,0x8231BA31,0x8231BA32,0x8231BA33, + 0x8231BA34,0x8231BA35,0x8231BA36,0x8231BA37,0x8231BA38,0x8231BA39, + 0x8231BB30,0x8231BB31,0x8231BB32,0x8231BB33,0x8231BB34,0x8231BB35, + 0x8231BB36,0x8231BB37,0x8231BB38,0x8231BB39,0x8231BC30,0x8231BC31, + 0x8231BC32,0x8231BC33,0x8231BC34,0x8231BC35,0x8231BC36,0x8231BC37, + 0x8231BC38,0x8231BC39,0x8231BD30,0x8231BD31,0x8231BD32,0x8231BD33, + 0x8231BD34,0x8231BD35,0x8231BD36,0x8231BD37,0x8231BD38,0x8231BD39, + 0x8231BE30,0x8231BE31,0x8231BE32,0x8231BE33,0x8231BE34,0x8231BE35, + 0x8231BE36,0x8231BE37,0x8231BE38,0x8231BE39,0x8231BF30,0x8231BF31, + 0x8231BF32,0x8231BF33,0x8231BF34,0x8231BF35,0x8231BF36,0x8231BF37, + 0x8231BF38,0x8231BF39,0x8231C030,0x8231C031,0x8231C032,0x8231C033, + 0x8231C034,0x8231C035,0x8231C036,0x8231C037,0x8231C038,0x8231C039, + 0x8231C130,0x8231C131,0x8231C132,0x8231C133,0x8231C134,0x8231C135, + 0x8231C136,0x8231C137,0x8231C138,0x8231C139,0x8231C230,0x8231C231, + 0x8231C232,0x8231C233,0x8231C234,0x8231C235,0x8231C236,0x8231C237, + 0x8231C238,0x8231C239,0x8231C330,0x8231C331,0x8231C332,0x8231C333, + 0x8231C334,0x8231C335,0x8231C336,0x8231C337,0x8231C338,0x8231C339, + 0x8231C430,0x8231C431,0x8231C432,0x8231C433,0x8231C434,0x8231C435, + 0x8231C436,0x8231C437,0x8231C438,0x8231C439,0x8231C530,0x8231C531, + 0x8231C532,0x8231C533,0x8231C534,0x8231C535,0x8231C536,0x8231C537, + 0x8231C538,0x8231C539,0x8231C630,0x8231C631,0x8231C632,0x8231C633, + 0x8231C634,0x8231C635,0x8231C636,0x8231C637,0x8231C638,0x8231C639, + 0x8231C730,0x8231C731,0x8231C732,0x8231C733,0x8231C734,0x8231C735, + 0x8231C736,0x8231C737,0x8231C738,0x8231C739,0x8231C830,0x8231C831, + 0x8231C832,0x8231C833,0x8231C834,0x8231C835,0x8231C836,0x8231C837, + 0x8231C838,0x8231C839,0x8231C930,0x8231C931,0x8231C932,0x8231C933, + 0x8231C934, 0xFE69,0x8231C935,0x8231C936,0x8231C937,0x8231C938, + 0x8231C939,0x8231CA30,0x8231CA31,0x8231CA32,0x8231CA33,0x8231CA34, + 0x8231CA35,0x8231CA36,0x8231CA37,0x8231CA38,0x8231CA39,0x8231CB30, + 0x8231CB31,0x8231CB32,0x8231CB33,0x8231CB34,0x8231CB35,0x8231CB36, + 0x8231CB37,0x8231CB38,0x8231CB39,0x8231CC30,0x8231CC31,0x8231CC32, + 0x8231CC33,0x8231CC34,0x8231CC35,0x8231CC36,0x8231CC37,0x8231CC38, + 0x8231CC39,0x8231CD30,0x8231CD31,0x8231CD32,0x8231CD33,0x8231CD34, + 0x8231CD35,0x8231CD36,0x8231CD37,0x8231CD38,0x8231CD39,0x8231CE30, + 0x8231CE31,0x8231CE32,0x8231CE33,0x8231CE34,0x8231CE35,0x8231CE36, + 0x8231CE37,0x8231CE38,0x8231CE39,0x8231CF30,0x8231CF31,0x8231CF32, + 0x8231CF33,0x8231CF34,0x8231CF35,0x8231CF36,0x8231CF37,0x8231CF38, + 0x8231CF39,0x8231D030,0x8231D031,0x8231D032,0x8231D033,0x8231D034, + 0x8231D035,0x8231D036,0x8231D037,0x8231D038,0x8231D039,0x8231D130, + 0x8231D131,0x8231D132,0x8231D133,0x8231D134,0x8231D135,0x8231D136, + 0x8231D137,0x8231D138,0x8231D139,0x8231D230,0x8231D231,0x8231D232, + 0x8231D233,0x8231D234,0x8231D235,0x8231D236,0x8231D237,0x8231D238, + 0x8231D239,0x8231D330,0x8231D331,0x8231D332,0x8231D333,0x8231D334, + 0x8231D335,0x8231D336,0x8231D337,0x8231D338,0x8231D339,0x8231D430, + 0x8231D431,0x8231D432,0x8231D433,0x8231D434,0x8231D435,0x8231D436, + 0x8231D437, 0xFE6A, 0xFE6F,0x8232AF33,0x8232AF34,0x8232AF35, + 0x8232AF36,0x8232AF37,0x8232AF38,0x8232AF39,0x8232B030,0x8232B031, + 0x8232B032,0x8232B033,0x8232B034,0x8232B035,0x8232B036,0x8232B037, + 0x8232B038,0x8232B039,0x8232B130,0x8232B131,0x8232B132,0x8232B133, + 0x8232B134,0x8232B135,0x8232B136,0x8232B137,0x8232B138,0x8232B139, + 0x8232B230,0x8232B231,0x8232B232,0x8232B233,0x8232B234,0x8232B235, + 0x8232B236,0x8232B237,0x8232B238,0x8232B239,0x8232B330,0x8232B331, + 0x8232B332,0x8232B333,0x8232B334,0x8232B335,0x8232B336,0x8232B337, + 0x8232B338,0x8232B339,0x8232B430,0x8232B431,0x8232B432,0x8232B433, + 0x8232B434,0x8232B435,0x8232B436,0x8232B437,0x8232B438,0x8232B439, + 0x8232B530,0x8232B531,0x8232B532,0x8232B533,0x8232B534,0x8232B535, + 0x8232B536,0x8232B537,0x8232B538,0x8232B539,0x8232B630,0x8232B631, + 0x8232B632,0x8232B633,0x8232B634,0x8232B635,0x8232B636,0x8232B637, + 0x8232B638,0x8232B639,0x8232B730,0x8232B731,0x8232B732,0x8232B733, + 0x8232B734,0x8232B735,0x8232B736,0x8232B737,0x8232B738,0x8232B739, + 0x8232B830,0x8232B831,0x8232B832,0x8232B833,0x8232B834,0x8232B835, + 0x8232B836,0x8232B837,0x8232B838,0x8232B839,0x8232B930,0x8232B931, + 0x8232B932,0x8232B933,0x8232B934,0x8232B935,0x8232B936,0x8232B937, + 0x8232B938,0x8232B939,0x8232BA30,0x8232BA31,0x8232BA32,0x8232BA33, + 0x8232BA34,0x8232BA35,0x8232BA36,0x8232BA37,0x8232BA38,0x8232BA39, + 0x8232BB30,0x8232BB31,0x8232BB32,0x8232BB33,0x8232BB34,0x8232BB35, + 0x8232BB36,0x8232BB37,0x8232BB38,0x8232BB39,0x8232BC30,0x8232BC31, + 0x8232BC32,0x8232BC33,0x8232BC34,0x8232BC35,0x8232BC36,0x8232BC37, + 0x8232BC38,0x8232BC39,0x8232BD30,0x8232BD31,0x8232BD32,0x8232BD33, + 0x8232BD34,0x8232BD35,0x8232BD36,0x8232BD37,0x8232BD38,0x8232BD39, + 0x8232BE30,0x8232BE31,0x8232BE32,0x8232BE33,0x8232BE34,0x8232BE35, + 0x8232BE36,0x8232BE37,0x8232BE38,0x8232BE39,0x8232BF30,0x8232BF31, + 0x8232BF32,0x8232BF33,0x8232BF34,0x8232BF35,0x8232BF36,0x8232BF37, + 0x8232BF38,0x8232BF39,0x8232C030,0x8232C031,0x8232C032,0x8232C033, + 0x8232C034,0x8232C035,0x8232C036,0x8232C037,0x8232C038,0x8232C039, + 0x8232C130,0x8232C131,0x8232C132,0x8232C133,0x8232C134,0x8232C135, + 0x8232C136,0x8232C137,0x8232C138,0x8232C139,0x8232C230,0x8232C231, + 0x8232C232,0x8232C233,0x8232C234,0x8232C235,0x8232C236,0x8232C237, + 0x8232C238,0x8232C239,0x8232C330,0x8232C331,0x8232C332,0x8232C333, + 0x8232C334,0x8232C335,0x8232C336,0x8232C337,0x8232C338,0x8232C339, + 0x8232C430,0x8232C431,0x8232C432,0x8232C433,0x8232C434,0x8232C435, + 0x8232C436,0x8232C437,0x8232C438,0x8232C439,0x8232C530,0x8232C531, + 0x8232C532,0x8232C533,0x8232C534,0x8232C535,0x8232C536,0x8232C537, + 0x8232C538,0x8232C539,0x8232C630,0x8232C631,0x8232C632,0x8232C633, + 0x8232C634,0x8232C635,0x8232C636,0x8232C637,0x8232C638,0x8232C639, + 0x8232C730,0x8232C731,0x8232C732,0x8232C733,0x8232C734,0x8232C735, + 0x8232C736,0x8232C737,0x8232C738,0x8232C739,0x8232C830,0x8232C831, + 0x8232C832,0x8232C833,0x8232C834,0x8232C835,0x8232C836,0x8232C837, + 0x8232C838,0x8232C839,0x8232C930,0x8232C931,0x8232C932,0x8232C933, + 0x8232C934,0x8232C935,0x8232C936, 0xFE70, 0xFE72,0x8232F838, + 0x8232F839,0x8232F930,0x8232F931,0x8232F932,0x8232F933,0x8232F934, + 0x8232F935,0x8232F936,0x8232F937,0x8232F938,0x8232F939,0x8232FA30, + 0x8232FA31,0x8232FA32,0x8232FA33,0x8232FA34,0x8232FA35,0x8232FA36, + 0x8232FA37,0x8232FA38,0x8232FA39,0x8232FB30,0x8232FB31,0x8232FB32, + 0x8232FB33,0x8232FB34,0x8232FB35,0x8232FB36,0x8232FB37,0x8232FB38, + 0x8232FB39,0x8232FC30,0x8232FC31,0x8232FC32,0x8232FC33,0x8232FC34, + 0x8232FC35,0x8232FC36,0x8232FC37,0x8232FC38,0x8232FC39,0x8232FD30, + 0x8232FD31,0x8232FD32,0x8232FD33,0x8232FD34,0x8232FD35,0x8232FD36, + 0x8232FD37,0x8232FD38,0x8232FD39,0x8232FE30,0x8232FE31,0x8232FE32, + 0x8232FE33,0x8232FE34,0x8232FE35,0x8232FE36,0x8232FE37,0x8232FE38, + 0x8232FE39,0x82338130,0x82338131,0x82338132,0x82338133,0x82338134, + 0x82338135,0x82338136,0x82338137,0x82338138,0x82338139,0x82338230, + 0x82338231,0x82338232,0x82338233,0x82338234,0x82338235,0x82338236, + 0x82338237,0x82338238,0x82338239,0x82338330,0x82338331,0x82338332, + 0x82338333,0x82338334,0x82338335,0x82338336,0x82338337,0x82338338, + 0x82338339,0x82338430,0x82338431,0x82338432,0x82338433,0x82338434, + 0x82338435,0x82338436,0x82338437,0x82338438,0x82338439,0x82338530, + 0x82338531,0x82338532,0x82338533,0x82338534,0x82338535,0x82338536, + 0x82338537,0x82338538,0x82338539,0x82338630,0x82338631,0x82338632, + 0x82338633, 0xFE78,0x82338634,0x82338635,0x82338636,0x82338637, + 0xFE77,0x82338638,0x82338639,0x82338730,0x82338731,0x82338732, + 0x82338733,0x82338734,0x82338735,0x82338736,0x82338737,0x82338738, + 0x82338739,0x82338830,0x82338831,0x82338832,0x82338833,0x82338834, + 0x82338835,0x82338836,0x82338837,0x82338838,0x82338839,0x82338930, + 0x82338931,0x82338932,0x82338933,0x82338934,0x82338935,0x82338936, + 0x82338937,0x82338938,0x82338939,0x82338A30,0x82338A31,0x82338A32, + 0x82338A33,0x82338A34,0x82338A35,0x82338A36,0x82338A37,0x82338A38, + 0x82338A39,0x82338B30, 0xFE7A,0x82338B31,0x82338B32,0x82338B33, + 0x82338B34,0x82338B35,0x82338B36,0x82338B37,0x82338B38,0x82338B39, + 0x82338C30,0x82338C31,0x82338C32,0x82338C33,0x82338C34,0x82338C35, + 0x82338C36,0x82338C37,0x82338C38,0x82338C39,0x82338D30,0x82338D31, + 0x82338D32,0x82338D33,0x82338D34,0x82338D35,0x82338D36,0x82338D37, + 0x82338D38,0x82338D39,0x82338E30,0x82338E31,0x82338E32,0x82338E33, + 0x82338E34,0x82338E35,0x82338E36,0x82338E37,0x82338E38,0x82338E39, + 0x82338F30,0x82338F31,0x82338F32,0x82338F33,0x82338F34,0x82338F35, + 0x82338F36,0x82338F37,0x82338F38,0x82338F39,0x82339030,0x82339031, + 0x82339032,0x82339033,0x82339034,0x82339035,0x82339036,0x82339037, + 0x82339038,0x82339039,0x82339130,0x82339131,0x82339132,0x82339133, + 0x82339134,0x82339135,0x82339136,0x82339137,0x82339138,0x82339139, + 0x82339230,0x82339231,0x82339232,0x82339233,0x82339234,0x82339235, + 0x82339236,0x82339237,0x82339238,0x82339239,0x82339330,0x82339331, + 0x82339332,0x82339333,0x82339334,0x82339335,0x82339336,0x82339337, + 0x82339338,0x82339339,0x82339430,0x82339431,0x82339432,0x82339433, + 0x82339434,0x82339435,0x82339436,0x82339437,0x82339438,0x82339439, + 0x82339530,0x82339531,0x82339532,0x82339533,0x82339534,0x82339535, + 0x82339536,0x82339537,0x82339538,0x82339539,0x82339630,0x82339631, + 0x82339632,0x82339633,0x82339634,0x82339635,0x82339636,0x82339637, + 0x82339638,0x82339639,0x82339730,0x82339731,0x82339732,0x82339733, + 0x82339734,0x82339735,0x82339736,0x82339737,0x82339738,0x82339739, + 0x82339830,0x82339831,0x82339832,0x82339833,0x82339834,0x82339835, + 0x82339836,0x82339837,0x82339838,0x82339839,0x82339930,0x82339931, + 0x82339932,0x82339933,0x82339934,0x82339935,0x82339936,0x82339937, + 0x82339938,0x82339939,0x82339A30,0x82339A31,0x82339A32,0x82339A33, + 0x82339A34,0x82339A35,0x82339A36,0x82339A37,0x82339A38,0x82339A39, + 0x82339B30,0x82339B31,0x82339B32,0x82339B33,0x82339B34,0x82339B35, + 0x82339B36,0x82339B37,0x82339B38,0x82339B39,0x82339C30,0x82339C31, + 0x82339C32,0x82339C33,0x82339C34,0x82339C35,0x82339C36,0x82339C37, + 0x82339C38,0x82339C39,0x82339D30,0x82339D31,0x82339D32,0x82339D33, + 0x82339D34,0x82339D35,0x82339D36,0x82339D37,0x82339D38,0x82339D39, + 0x82339E30,0x82339E31,0x82339E32,0x82339E33,0x82339E34,0x82339E35, + 0x82339E36,0x82339E37,0x82339E38,0x82339E39,0x82339F30,0x82339F31, + 0x82339F32,0x82339F33,0x82339F34,0x82339F35,0x82339F36,0x82339F37, + 0x82339F38,0x82339F39,0x8233A030,0x8233A031,0x8233A032,0x8233A033, + 0x8233A034,0x8233A035,0x8233A036,0x8233A037,0x8233A038,0x8233A039, + 0x8233A130,0x8233A131,0x8233A132,0x8233A133,0x8233A134,0x8233A135, + 0x8233A136,0x8233A137,0x8233A138,0x8233A139,0x8233A230,0x8233A231, + 0x8233A232,0x8233A233,0x8233A234,0x8233A235,0x8233A236,0x8233A237, + 0x8233A238,0x8233A239,0x8233A330,0x8233A331,0x8233A332,0x8233A333, + 0x8233A334,0x8233A335,0x8233A336,0x8233A337,0x8233A338, 0xFE7B, + 0xFE7D,0x8233C932,0x8233C933,0x8233C934,0x8233C935,0x8233C936, + 0x8233C937,0x8233C938,0x8233C939,0x8233CA30,0x8233CA31,0x8233CA32, + 0x8233CA33,0x8233CA34,0x8233CA35,0x8233CA36,0x8233CA37,0x8233CA38, + 0x8233CA39,0x8233CB30,0x8233CB31, 0xFE7C,0x8233CB32,0x8233CB33, + 0x8233CB34,0x8233CB35,0x8233CB36,0x8233CB37,0x8233CB38,0x8233CB39, + 0x8233CC30,0x8233CC31,0x8233CC32,0x8233CC33,0x8233CC34,0x8233CC35, + 0x8233CC36,0x8233CC37,0x8233CC38,0x8233CC39,0x8233CD30,0x8233CD31, + 0x8233CD32,0x8233CD33,0x8233CD34,0x8233CD35,0x8233CD36,0x8233CD37, + 0x8233CD38,0x8233CD39,0x8233CE30,0x8233CE31,0x8233CE32,0x8233CE33, + 0x8233CE34,0x8233CE35,0x8233CE36,0x8233CE37,0x8233CE38,0x8233CE39, + 0x8233CF30,0x8233CF31,0x8233CF32,0x8233CF33,0x8233CF34,0x8233CF35, + 0x8233CF36,0x8233CF37,0x8233CF38,0x8233CF39,0x8233D030,0x8233D031, + 0x8233D032,0x8233D033,0x8233D034,0x8233D035,0x8233D036,0x8233D037, + 0x8233D038,0x8233D039,0x8233D130,0x8233D131,0x8233D132,0x8233D133, + 0x8233D134,0x8233D135,0x8233D136,0x8233D137,0x8233D138,0x8233D139, + 0x8233D230,0x8233D231,0x8233D232,0x8233D233,0x8233D234,0x8233D235, + 0x8233D236,0x8233D237,0x8233D238,0x8233D239,0x8233D330,0x8233D331, + 0x8233D332,0x8233D333,0x8233D334,0x8233D335,0x8233D336,0x8233D337, + 0x8233D338,0x8233D339,0x8233D430,0x8233D431,0x8233D432,0x8233D433, + 0x8233D434,0x8233D435,0x8233D436,0x8233D437,0x8233D438,0x8233D439, + 0x8233D530,0x8233D531,0x8233D532,0x8233D533,0x8233D534,0x8233D535, + 0x8233D536,0x8233D537,0x8233D538,0x8233D539,0x8233D630,0x8233D631, + 0x8233D632,0x8233D633,0x8233D634,0x8233D635,0x8233D636,0x8233D637, + 0x8233D638,0x8233D639,0x8233D730,0x8233D731,0x8233D732,0x8233D733, + 0x8233D734,0x8233D735,0x8233D736,0x8233D737,0x8233D738,0x8233D739, + 0x8233D830,0x8233D831,0x8233D832,0x8233D833,0x8233D834,0x8233D835, + 0x8233D836,0x8233D837,0x8233D838,0x8233D839,0x8233D930,0x8233D931, + 0x8233D932,0x8233D933,0x8233D934,0x8233D935,0x8233D936,0x8233D937, + 0x8233D938,0x8233D939,0x8233DA30,0x8233DA31,0x8233DA32,0x8233DA33, + 0x8233DA34,0x8233DA35,0x8233DA36,0x8233DA37,0x8233DA38,0x8233DA39, + 0x8233DB30,0x8233DB31,0x8233DB32,0x8233DB33,0x8233DB34,0x8233DB35, + 0x8233DB36,0x8233DB37,0x8233DB38,0x8233DB39,0x8233DC30,0x8233DC31, + 0x8233DC32,0x8233DC33,0x8233DC34,0x8233DC35,0x8233DC36,0x8233DC37, + 0x8233DC38,0x8233DC39,0x8233DD30,0x8233DD31,0x8233DD32,0x8233DD33, + 0x8233DD34,0x8233DD35,0x8233DD36,0x8233DD37,0x8233DD38,0x8233DD39, + 0x8233DE30,0x8233DE31,0x8233DE32,0x8233DE33,0x8233DE34, 0xFE80, + 0x8233DE35,0x8233DE36,0x8233DE37,0x8233DE38,0x8233DE39, 0xFE81, + 0x8233DF30,0x8233DF31,0x8233DF32,0x8233DF33,0x8233DF34,0x8233DF35, + 0x8233DF36,0x8233DF37,0x8233DF38,0x8233DF39,0x8233E030,0x8233E031, + 0x8233E032,0x8233E033,0x8233E034,0x8233E035,0x8233E036,0x8233E037, + 0x8233E038,0x8233E039,0x8233E130,0x8233E131,0x8233E132,0x8233E133, + 0x8233E134,0x8233E135,0x8233E136,0x8233E137,0x8233E138,0x8233E139, + 0x8233E230,0x8233E231,0x8233E232,0x8233E233,0x8233E234,0x8233E235, + 0x8233E236,0x8233E237,0x8233E238,0x8233E239,0x8233E330,0x8233E331, + 0x8233E332,0x8233E333,0x8233E334,0x8233E335,0x8233E336,0x8233E337, + 0x8233E338,0x8233E339,0x8233E430,0x8233E431,0x8233E432,0x8233E433, + 0x8233E434,0x8233E435,0x8233E436,0x8233E437,0x8233E438,0x8233E439, + 0x8233E530,0x8233E531,0x8233E532,0x8233E533,0x8233E534,0x8233E535, + 0x8233E536,0x8233E537,0x8233E538,0x8233E539,0x8233E630,0x8233E631, + 0x8233E632,0x8233E633,0x8233E634,0x8233E635,0x8233E636,0x8233E637, + 0x8233E638,0x8233E639,0x8233E730,0x8233E731, 0xFE82,0x8233E732, + 0x8233E733,0x8233E734,0x8233E735,0x8233E736,0x8233E737,0x8233E738, + 0x8233E739,0x8233E830,0x8233E831,0x8233E832,0x8233E833,0x8233E834, + 0x8233E835,0x8233E836,0x8233E837, 0xFE83, 0xFE85,0x82349639, + 0x82349730,0x82349731,0x82349732,0x82349733,0x82349734,0x82349735, + 0x82349736,0x82349737,0x82349738,0x82349739,0x82349830,0x82349831, + 0x82349832,0x82349833,0x82349834,0x82349835,0x82349836,0x82349837, + 0x82349838,0x82349839,0x82349930,0x82349931,0x82349932,0x82349933, + 0x82349934,0x82349935,0x82349936,0x82349937,0x82349938,0x82349939, + 0x82349A30,0x82349A31,0x82349A32,0x82349A33,0x82349A34,0x82349A35, + 0x82349A36,0x82349A37,0x82349A38,0x82349A39,0x82349B30,0x82349B31, + 0x82349B32,0x82349B33,0x82349B34,0x82349B35,0x82349B36,0x82349B37, + 0x82349B38, 0xFE86,0x82349B39,0x82349C30, 0xFE87,0x82349C31, + 0x82349C32,0x82349C33,0x82349C34, 0xFE88, 0xFE89,0x82349C35, + 0xFE8A, 0xFE8B,0x82349C36,0x82349C37,0x82349C38,0x82349C39, + 0x82349D30,0x82349D31,0x82349D32,0x82349D33,0x82349D34,0x82349D35, + 0x82349D36,0x82349D37,0x82349D38,0x82349D39,0x82349E30,0x82349E31, + 0x82349E32,0x82349E33,0x82349E34,0x82349E35, 0xFE8D,0x82349E36, + 0x82349E37,0x82349E38, 0xFE8C,0x82349E39,0x82349F30,0x82349F31, + 0x82349F32,0x82349F33,0x82349F34,0x82349F35,0x82349F36,0x82349F37, + 0x82349F38,0x82349F39,0x8234A030,0x8234A031,0x8234A032,0x8234A033, + 0x8234A034,0x8234A035,0x8234A036,0x8234A037,0x8234A038,0x8234A039, + 0x8234A130, 0xFE8F, 0xFE8E, 0xFE96,0x8234E734,0x8234E735, + 0x8234E736,0x8234E737,0x8234E738,0x8234E739,0x8234E830,0x8234E831, + 0x8234E832,0x8234E833,0x8234E834,0x8234E835,0x8234E836,0x8234E837, + 0x8234E838,0x8234E839,0x8234E930,0x8234E931,0x8234E932,0x8234E933, + 0x8234E934,0x8234E935,0x8234E936,0x8234E937,0x8234E938,0x8234E939, + 0x8234EA30,0x8234EA31,0x8234EA32,0x8234EA33,0x8234EA34,0x8234EA35, + 0x8234EA36,0x8234EA37,0x8234EA38,0x8234EA39,0x8234EB30,0x8234EB31, + 0x8234EB32, 0xFE93, 0xFE94, 0xFE95, 0xFE97, 0xFE92, + 0x8234EB33,0x8234EB34,0x8234EB35,0x8234EB36,0x8234EB37,0x8234EB38, + 0x8234EB39,0x8234EC30,0x8234EC31,0x8234EC32,0x8234EC33,0x8234EC34, + 0x8234EC35,0x8234EC36,0x8234EC37,0x8234EC38,0x8234EC39,0x8234ED30, + 0x8234ED31,0x8234ED32,0x8234ED33,0x8234ED34,0x8234ED35,0x8234ED36, + 0x8234ED37,0x8234ED38,0x8234ED39,0x8234EE30,0x8234EE31,0x8234EE32, + 0x8234EE33,0x8234EE34,0x8234EE35,0x8234EE36,0x8234EE37,0x8234EE38, + 0x8234EE39,0x8234EF30,0x8234EF31,0x8234EF32,0x8234EF33,0x8234EF34, + 0x8234EF35,0x8234EF36,0x8234EF37,0x8234EF38,0x8234EF39,0x8234F030, + 0x8234F031,0x8234F032,0x8234F033,0x8234F034,0x8234F035,0x8234F036, + 0x8234F037,0x8234F038,0x8234F039,0x8234F130,0x8234F131,0x8234F132, + 0x8234F133,0x8234F134,0x8234F135,0x8234F136,0x8234F137,0x8234F138, + 0x8234F139,0x8234F230,0x8234F231,0x8234F232,0x8234F233,0x8234F234, + 0x8234F235,0x8234F236,0x8234F237,0x8234F238,0x8234F239,0x8234F330, + 0x8234F331,0x8234F332,0x8234F333,0x8234F334,0x8234F335,0x8234F336, + 0x8234F337,0x8234F338,0x8234F339,0x8234F430,0x8234F431,0x8234F432, + 0x8234F433,0x8234F434,0x8234F435,0x8234F436,0x8234F437,0x8234F438, + 0x8234F439,0x8234F530,0x8234F531,0x8234F532,0x8234F533,0x8234F534, + 0x8234F535,0x8234F536,0x8234F537,0x8234F538,0x8234F539,0x8234F630, + 0x8234F631,0x8234F632,0x8234F633, 0xFE98, 0xFE99, 0xFE9A, + 0xFE9B, 0xFE9C, 0xFE9D, 0xFE9E,0x8234F634,0x8234F635, + 0x8234F636,0x8234F637,0x8234F638,0x8234F639,0x8234F730,0x8234F731, + 0x8234F732,0x8234F733,0x8234F734,0x8234F735,0x8234F736,0x8234F737, + 0x8234F738,0x8234F739,0x8234F830,0x8234F831,0x8234F832,0x8234F833, + 0x8234F834,0x8234F835,0x8234F836,0x8234F837,0x8234F838,0x8234F839, + 0x8234F930,0x8234F931,0x8234F932,0x8234F933,0x8234F934,0x8234F935, + 0x8234F936,0x8234F937,0x8234F938,0x8234F939,0x8234FA30,0x8234FA31, + 0x8234FA32,0x8234FA33,0x8234FA34,0x8234FA35,0x8234FA36,0x8234FA37, + 0x8234FA38,0x8234FA39,0x8234FB30,0x8234FB31,0x8234FB32,0x8234FB33, + 0x8234FB34,0x8234FB35,0x8234FB36,0x8234FB37,0x8234FB38,0x8234FB39, + 0x8234FC30,0x8234FC31,0x8234FC32,0x8234FC33,0x8234FC34,0x8234FC35, + 0x8234FC36,0x8234FC37,0x8234FC38,0x8234FC39,0x8234FD30,0x8234FD31, + 0x8234FD32,0x8234FD33,0x8234FD34,0x8234FD35,0x8234FD36,0x8234FD37, + 0x8234FD38,0x8234FD39,0x8234FE30,0x8234FE31,0x8234FE32,0x8234FE33, + 0x8234FE34,0x8234FE35,0x8234FE36,0x8234FE37,0x8234FE38,0x8234FE39, + 0x82358130,0x82358131,0x82358132,0x82358133,0x82358134,0x82358135, + 0x82358136,0x82358137,0x82358138,0x82358139,0x82358230,0x82358231, + 0x82358232,0x82358233,0x82358234,0x82358235,0x82358236,0x82358237, + 0x82358238,0x82358239,0x82358330,0x82358331,0x82358332,0x82358333, + 0x82358334,0x82358335,0x82358336,0x82358337,0x82358338,0x82358339, + 0x82358430,0x82358431,0x82358432,0x82358433,0x82358434,0x82358435, + 0x82358436,0x82358437,0x82358438,0x82358439,0x82358530,0x82358531, + 0x82358532,0x82358533,0x82358534,0x82358535,0x82358536,0x82358537, + 0x82358538,0x82358539,0x82358630,0x82358631,0x82358632,0x82358633, + 0x82358634,0x82358635,0x82358636,0x82358637,0x82358638,0x82358639, + 0x82358730,0x82358731, 0xFE9F,0x82358732,0x82358733,0x82358734, + 0x82358735,0x82358736,0x82358737,0x82358738,0x82358739,0x82358830, + 0x82358831,0x82358832,0x82358833,0x82358834,0x82358835,0x82358836, + 0x82358837,0x82358838,0x82358839,0x82358930,0x82358931,0x82358932, + 0x82358933,0x82358934,0x82358935,0x82358936,0x82358937,0x82358938, + 0x82358939,0x82358A30,0x82358A31,0x82358A32,0x82358A33,0x82358A34, + 0x82358A35,0x82358A36,0x82358A37,0x82358A38,0x82358A39,0x82358B30, + 0x82358B31,0x82358B32,0x82358B33,0x82358B34,0x82358B35,0x82358B36, + 0x82358B37,0x82358B38,0x82358B39,0x82358C30,0x82358C31,0x82358C32, + 0x82358C33,0x82358C34,0x82358C35,0x82358C36,0x82358C37,0x82358C38, + 0x82358C39,0x82358D30,0x82358D31,0x82358D32,0x82358D33,0x82358D34, + 0x82358D35,0x82358D36,0x82358D37,0x82358D38,0x82358D39,0x82358E30, + 0x82358E31,0x82358E32,0x82358E33,0x82358E34,0x82358E35,0x82358E36, + 0x82358E37,0x82358E38,0x82358E39,0x82358F30,0x82358F31,0x82358F32, + 0xD2BB, 0xB6A1, 0x8140, 0xC6DF, 0x8141, 0x8142, + 0x8143, 0xCDF2, 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, + 0xD8A2, 0xB2BB, 0xD3EB, 0x8144, 0xD8A4, 0xB3F3, + 0x8145, 0xD7A8, 0xC7D2, 0xD8A7, 0xCAC0, 0x8146, + 0xC7F0, 0xB1FB, 0xD2B5, 0xB4D4, 0xB6AB, 0xCBBF, + 0xD8A9, 0x8147, 0x8148, 0x8149, 0xB6AA, 0x814A, + 0xC1BD, 0xD1CF, 0x814B, 0xC9A5, 0xD8AD, 0x814C, + 0xB8F6, 0xD1BE, 0xE3DC, 0xD6D0, 0x814D, 0x814E, + 0xB7E1, 0x814F, 0xB4AE, 0x8150, 0xC1D9, 0x8151, + 0xD8BC, 0x8152, 0xCDE8, 0xB5A4, 0xCEAA, 0xD6F7, + 0x8153, 0xC0F6, 0xBED9, 0xD8AF, 0x8154, 0x8155, + 0x8156, 0xC4CB, 0x8157, 0xBEC3, 0x8158, 0xD8B1, + 0xC3B4, 0xD2E5, 0x8159, 0xD6AE, 0xCEDA, 0xD5A7, + 0xBAF5, 0xB7A6, 0xC0D6, 0x815A, 0xC6B9, 0xC5D2, + 0xC7C7, 0x815B, 0xB9D4, 0x815C, 0xB3CB, 0xD2D2, + 0x815D, 0x815E, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, + 0xCFB0, 0xCFE7, 0x815F, 0x8160, 0x8161, 0x8162, + 0xCAE9, 0x8163, 0x8164, 0xD8C0, 0x8165, 0x8166, + 0x8167, 0x8168, 0x8169, 0x816A, 0xC2F2, 0xC2D2, + 0x816B, 0xC8E9, 0x816C, 0x816D, 0x816E, 0x816F, + 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, + 0xC7AC, 0x8176, 0x8177, 0x8178, 0x8179, 0x817A, + 0x817B, 0x817C, 0xC1CB, 0x817D, 0xD3E8, 0xD5F9, + 0x817E, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0xBFF7, + 0x8180, 0xD4C6, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, + 0x8181, 0x8182, 0xD8A8, 0x8183, 0xD1C7, 0xD0A9, + 0x8184, 0x8185, 0x8186, 0xD8BD, 0xD9EF, 0xCDF6, + 0xBFBA, 0x8187, 0xBDBB, 0xBAA5, 0xD2E0, 0xB2FA, + 0xBAE0, 0xC4B6, 0x8188, 0xCFED, 0xBEA9, 0xCDA4, + 0xC1C1, 0x8189, 0x818A, 0x818B, 0xC7D7, 0xD9F1, + 0x818C, 0xD9F4, 0x818D, 0x818E, 0x818F, 0x8190, + 0xC8CB, 0xD8E9, 0x8191, 0x8192, 0x8193, 0xD2DA, + 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0xBDF6, + 0xC6CD, 0xB3F0, 0x8194, 0xD8EB, 0xBDF1, 0xBDE9, + 0x8195, 0xC8D4, 0xB4D3, 0x8196, 0x8197, 0xC2D8, + 0x8198, 0xB2D6, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, + 0xB8B6, 0xCFC9, 0x8199, 0x819A, 0x819B, 0xD9DA, + 0xD8F0, 0xC7AA, 0x819C, 0xD8EE, 0x819D, 0xB4FA, + 0xC1EE, 0xD2D4, 0x819E, 0x819F, 0xD8ED, 0x81A0, + 0xD2C7, 0xD8EF, 0xC3C7, 0x81A1, 0x81A2, 0x81A3, + 0xD1F6, 0x81A4, 0xD6D9, 0xD8F2, 0x81A5, 0xD8F5, + 0xBCFE, 0xBCDB, 0x81A6, 0x81A7, 0x81A8, 0xC8CE, + 0x81A9, 0xB7DD, 0x81AA, 0xB7C2, 0x81AB, 0xC6F3, + 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, 0x81B1, + 0x81B2, 0xD8F8, 0xD2C1, 0x81B3, 0x81B4, 0xCEE9, + 0xBCBF, 0xB7FC, 0xB7A5, 0xD0DD, 0x81B5, 0x81B6, + 0x81B7, 0x81B8, 0x81B9, 0xD6DA, 0xD3C5, 0xBBEF, + 0xBBE1, 0xD8F1, 0x81BA, 0x81BB, 0xC9A1, 0xCEB0, + 0xB4AB, 0x81BC, 0xD8F3, 0x81BD, 0xC9CB, 0xD8F6, + 0xC2D7, 0xD8F7, 0x81BE, 0x81BF, 0xCEB1, 0xD8F9, + 0x81C0, 0x81C1, 0x81C2, 0xB2AE, 0xB9C0, 0x81C3, + 0xD9A3, 0x81C4, 0xB0E9, 0x81C5, 0xC1E6, 0x81C6, + 0xC9EC, 0x81C7, 0xCBC5, 0x81C8, 0xCBC6, 0xD9A4, + 0x81C9, 0x81CA, 0x81CB, 0x81CC, 0x81CD, 0xB5E8, + 0x81CE, 0x81CF, 0xB5AB, 0x81D0, 0x81D1, 0x81D2, + 0x81D3, 0x81D4, 0x81D5, 0xCEBB, 0xB5CD, 0xD7A1, + 0xD7F4, 0xD3D3, 0x81D6, 0xCCE5, 0x81D7, 0xBACE, + 0x81D8, 0xD9A2, 0xD9DC, 0xD3E0, 0xD8FD, 0xB7F0, + 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, 0xC4E3, 0x81D9, + 0x81DA, 0xD3B6, 0xD8F4, 0xD9DD, 0x81DB, 0xD8FB, + 0x81DC, 0xC5E5, 0x81DD, 0x81DE, 0xC0D0, 0x81DF, + 0x81E0, 0xD1F0, 0xB0DB, 0x81E1, 0x81E2, 0xBCD1, + 0xD9A6, 0x81E3, 0xD9A5, 0x81E4, 0x81E5, 0x81E6, + 0x81E7, 0xD9AC, 0xD9AE, 0x81E8, 0xD9AB, 0xCAB9, + 0x81E9, 0x81EA, 0x81EB, 0xD9A9, 0xD6B6, 0x81EC, + 0x81ED, 0x81EE, 0xB3DE, 0xD9A8, 0x81EF, 0xC0FD, + 0x81F0, 0xCACC, 0x81F1, 0xD9AA, 0x81F2, 0xD9A7, + 0x81F3, 0x81F4, 0xD9B0, 0x81F5, 0x81F6, 0xB6B1, + 0x81F7, 0x81F8, 0x81F9, 0xB9A9, 0x81FA, 0xD2C0, + 0x81FB, 0x81FC, 0xCFC0, 0x81FD, 0x81FE, 0xC2C2, + 0x8240, 0xBDC4, 0xD5EC, 0xB2E0, 0xC7C8, 0xBFEB, + 0xD9AD, 0x8241, 0xD9AF, 0x8242, 0xCEEA, 0xBAEE, + 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xC7D6, + 0x8248, 0x8249, 0x824A, 0x824B, 0x824C, 0x824D, + 0x824E, 0x824F, 0x8250, 0xB1E3, 0x8251, 0x8252, + 0x8253, 0xB4D9, 0xB6ED, 0xD9B4, 0x8254, 0x8255, + 0x8256, 0x8257, 0xBFA1, 0x8258, 0x8259, 0x825A, + 0xD9DE, 0xC7CE, 0xC0FE, 0xD9B8, 0x825B, 0x825C, + 0x825D, 0x825E, 0x825F, 0xCBD7, 0xB7FD, 0x8260, + 0xD9B5, 0x8261, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, + 0x8262, 0xD0C5, 0x8263, 0xD9B6, 0x8264, 0x8265, + 0xD9B1, 0x8266, 0xD9B2, 0xC1A9, 0xD9B3, 0x8267, + 0x8268, 0xBCF3, 0xD0DE, 0xB8A9, 0x8269, 0xBEE3, + 0x826A, 0xD9BD, 0x826B, 0x826C, 0x826D, 0x826E, + 0xD9BA, 0x826F, 0xB0B3, 0x8270, 0x8271, 0x8272, + 0xD9C2, 0x8273, 0x8274, 0x8275, 0x8276, 0x8277, + 0x8278, 0x8279, 0x827A, 0x827B, 0x827C, 0x827D, + 0x827E, 0x8280, 0xD9C4, 0xB1B6, 0x8281, 0xD9BF, + 0x8282, 0x8283, 0xB5B9, 0x8284, 0xBEF3, 0x8285, + 0x8286, 0x8287, 0xCCC8, 0xBAF2, 0xD2D0, 0x8288, + 0xD9C3, 0x8289, 0x828A, 0xBDE8, 0x828B, 0xB3AB, + 0x828C, 0x828D, 0x828E, 0xD9C5, 0xBEEB, 0x828F, + 0xD9C6, 0xD9BB, 0xC4DF, 0x8290, 0xD9BE, 0xD9C1, + 0xD9C0, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, + 0x8296, 0x8297, 0x8298, 0x8299, 0x829A, 0x829B, + 0xD5AE, 0x829C, 0xD6B5, 0x829D, 0xC7E3, 0x829E, + 0x829F, 0x82A0, 0x82A1, 0xD9C8, 0x82A2, 0x82A3, + 0x82A4, 0xBCD9, 0xD9CA, 0x82A5, 0x82A6, 0x82A7, + 0xD9BC, 0x82A8, 0xD9CB, 0xC6AB, 0x82A9, 0x82AA, + 0x82AB, 0x82AC, 0x82AD, 0xD9C9, 0x82AE, 0x82AF, + 0x82B0, 0x82B1, 0xD7F6, 0x82B2, 0xCDA3, 0x82B3, + 0x82B4, 0x82B5, 0x82B6, 0x82B7, 0x82B8, 0x82B9, + 0x82BA, 0xBDA1, 0x82BB, 0x82BC, 0x82BD, 0x82BE, + 0x82BF, 0x82C0, 0xD9CC, 0x82C1, 0x82C2, 0x82C3, + 0x82C4, 0x82C5, 0x82C6, 0x82C7, 0x82C8, 0x82C9, + 0xC5BC, 0xCDB5, 0x82CA, 0x82CB, 0x82CC, 0xD9CD, + 0x82CD, 0x82CE, 0xD9C7, 0xB3A5, 0xBFFE, 0x82CF, + 0x82D0, 0x82D1, 0x82D2, 0xB8B5, 0x82D3, 0x82D4, + 0xC0FC, 0x82D5, 0x82D6, 0x82D7, 0x82D8, 0xB0F8, + 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, 0x82DE, + 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, + 0x82E5, 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, + 0x82EB, 0x82EC, 0x82ED, 0xB4F6, 0x82EE, 0xD9CE, + 0x82EF, 0xD9CF, 0xB4A2, 0xD9D0, 0x82F0, 0x82F1, + 0xB4DF, 0x82F2, 0x82F3, 0x82F4, 0x82F5, 0x82F6, + 0xB0C1, 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, + 0x82FC, 0x82FD, 0xD9D1, 0xC9B5, 0x82FE, 0x8340, + 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, + 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C, + 0x834D, 0x834E, 0x834F, 0x8350, 0x8351, 0xCFF1, + 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, + 0xD9D2, 0x8358, 0x8359, 0x835A, 0xC1C5, 0x835B, + 0x835C, 0x835D, 0x835E, 0x835F, 0x8360, 0x8361, + 0x8362, 0x8363, 0x8364, 0x8365, 0xD9D6, 0xC9AE, + 0x8366, 0x8367, 0x8368, 0x8369, 0xD9D5, 0xD9D4, + 0xD9D7, 0x836A, 0x836B, 0x836C, 0x836D, 0xCBDB, + 0x836E, 0xBDA9, 0x836F, 0x8370, 0x8371, 0x8372, + 0x8373, 0xC6A7, 0x8374, 0x8375, 0x8376, 0x8377, + 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, + 0xD9D3, 0xD9D8, 0x837E, 0x8380, 0x8381, 0xD9D9, + 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, + 0xC8E5, 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, + 0x838D, 0x838E, 0x838F, 0x8390, 0x8391, 0x8392, + 0x8393, 0x8394, 0x8395, 0xC0DC, 0x8396, 0x8397, + 0x8398, 0x8399, 0x839A, 0x839B, 0x839C, 0x839D, + 0x839E, 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, + 0x83A4, 0x83A5, 0x83A6, 0x83A7, 0x83A8, 0x83A9, + 0x83AA, 0x83AB, 0x83AC, 0x83AD, 0x83AE, 0x83AF, + 0x83B0, 0x83B1, 0x83B2, 0xB6F9, 0xD8A3, 0xD4CA, + 0x83B3, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0x83B4, + 0xCFC8, 0xB9E2, 0x83B5, 0xBFCB, 0x83B6, 0xC3E2, + 0x83B7, 0x83B8, 0x83B9, 0xB6D2, 0x83BA, 0x83BB, + 0xCDC3, 0xD9EE, 0xD9F0, 0x83BC, 0x83BD, 0x83BE, + 0xB5B3, 0x83BF, 0xB6B5, 0x83C0, 0x83C1, 0x83C2, + 0x83C3, 0x83C4, 0xBEA4, 0x83C5, 0x83C6, 0xC8EB, + 0x83C7, 0x83C8, 0xC8AB, 0x83C9, 0x83CA, 0xB0CB, + 0xB9AB, 0xC1F9, 0xD9E2, 0x83CB, 0xC0BC, 0xB9B2, + 0x83CC, 0xB9D8, 0xD0CB, 0xB1F8, 0xC6E4, 0xBEDF, + 0xB5E4, 0xD7C8, 0x83CD, 0xD1F8, 0xBCE6, 0xCADE, + 0x83CE, 0x83CF, 0xBCBD, 0xD9E6, 0xD8E7, 0x83D0, + 0x83D1, 0xC4DA, 0x83D2, 0x83D3, 0xB8D4, 0xC8BD, + 0x83D4, 0x83D5, 0xB2E1, 0xD4D9, 0x83D6, 0x83D7, + 0x83D8, 0x83D9, 0xC3B0, 0x83DA, 0x83DB, 0xC3E1, + 0xDAA2, 0xC8DF, 0x83DC, 0xD0B4, 0x83DD, 0xBEFC, + 0xC5A9, 0x83DE, 0x83DF, 0x83E0, 0xB9DA, 0x83E1, + 0xDAA3, 0x83E2, 0xD4A9, 0xDAA4, 0x83E3, 0x83E4, + 0x83E5, 0x83E6, 0x83E7, 0xD9FB, 0xB6AC, 0x83E8, + 0x83E9, 0xB7EB, 0xB1F9, 0xD9FC, 0xB3E5, 0xBEF6, + 0x83EA, 0xBFF6, 0xD2B1, 0xC0E4, 0x83EB, 0x83EC, + 0x83ED, 0xB6B3, 0xD9FE, 0xD9FD, 0x83EE, 0x83EF, + 0xBEBB, 0x83F0, 0x83F1, 0x83F2, 0xC6E0, 0x83F3, + 0xD7BC, 0xDAA1, 0x83F4, 0xC1B9, 0x83F5, 0xB5F2, + 0xC1E8, 0x83F6, 0x83F7, 0xBCF5, 0x83F8, 0xB4D5, + 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, + 0x8440, 0x8441, 0x8442, 0xC1DD, 0x8443, 0xC4FD, + 0x8444, 0x8445, 0xBCB8, 0xB7B2, 0x8446, 0x8447, + 0xB7EF, 0x8448, 0x8449, 0x844A, 0x844B, 0x844C, + 0x844D, 0xD9EC, 0x844E, 0xC6BE, 0x844F, 0xBFAD, + 0xBBCB, 0x8450, 0x8451, 0xB5CA, 0x8452, 0xDBC9, + 0xD0D7, 0x8453, 0xCDB9, 0xB0BC, 0xB3F6, 0xBBF7, + 0xDBCA, 0xBAAF, 0x8454, 0xD4E4, 0xB5B6, 0xB5F3, + 0xD8D6, 0xC8D0, 0x8455, 0x8456, 0xB7D6, 0xC7D0, + 0xD8D7, 0x8457, 0xBFAF, 0x8458, 0x8459, 0xDBBB, + 0xD8D8, 0x845A, 0x845B, 0xD0CC, 0xBBAE, 0x845C, + 0x845D, 0x845E, 0xEBBE, 0xC1D0, 0xC1F5, 0xD4F2, + 0xB8D5, 0xB4B4, 0x845F, 0xB3F5, 0x8460, 0x8461, + 0xC9BE, 0x8462, 0x8463, 0x8464, 0xC5D0, 0x8465, + 0x8466, 0x8467, 0xC5D9, 0xC0FB, 0x8468, 0xB1F0, + 0x8469, 0xD8D9, 0xB9CE, 0x846A, 0xB5BD, 0x846B, + 0x846C, 0xD8DA, 0x846D, 0x846E, 0xD6C6, 0xCBA2, + 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0x846F, 0xB9F4, + 0x8470, 0xD8DB, 0xD8DC, 0xB6E7, 0xBCC1, 0xCCEA, + 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, + 0xCFF7, 0x8477, 0xD8DD, 0xC7B0, 0x8478, 0x8479, + 0xB9D0, 0xBDA3, 0x847A, 0x847B, 0xCCDE, 0x847C, + 0xC6CA, 0x847D, 0x847E, 0x8480, 0x8481, 0x8482, + 0xD8E0, 0x8483, 0xD8DE, 0x8484, 0x8485, 0xD8DF, + 0x8486, 0x8487, 0x8488, 0xB0FE, 0x8489, 0xBEE7, + 0x848A, 0xCAA3, 0xBCF4, 0x848B, 0x848C, 0x848D, + 0x848E, 0xB8B1, 0x848F, 0x8490, 0xB8EE, 0x8491, + 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8497, + 0x8498, 0x8499, 0x849A, 0xD8E2, 0x849B, 0xBDCB, + 0x849C, 0xD8E4, 0xD8E3, 0x849D, 0x849E, 0x849F, + 0x84A0, 0x84A1, 0xC5FC, 0x84A2, 0x84A3, 0x84A4, + 0x84A5, 0x84A6, 0x84A7, 0x84A8, 0xD8E5, 0x84A9, + 0x84AA, 0xD8E6, 0x84AB, 0x84AC, 0x84AD, 0x84AE, + 0x84AF, 0x84B0, 0x84B1, 0xC1A6, 0x84B2, 0xC8B0, + 0xB0EC, 0xB9A6, 0xBCD3, 0xCEF1, 0xDBBD, 0xC1D3, + 0x84B3, 0x84B4, 0x84B5, 0x84B6, 0xB6AF, 0xD6FA, + 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0x84B7, 0x84B8, + 0x84B9, 0xC0F8, 0xBEA2, 0xC0CD, 0x84BA, 0x84BB, + 0x84BC, 0x84BD, 0x84BE, 0x84BF, 0x84C0, 0x84C1, + 0x84C2, 0x84C3, 0xDBC0, 0xCAC6, 0x84C4, 0x84C5, + 0x84C6, 0xB2AA, 0x84C7, 0x84C8, 0x84C9, 0xD3C2, + 0x84CA, 0xC3E3, 0x84CB, 0xD1AB, 0x84CC, 0x84CD, + 0x84CE, 0x84CF, 0xDBC2, 0x84D0, 0xC0D5, 0x84D1, + 0x84D2, 0x84D3, 0xDBC3, 0x84D4, 0xBFB1, 0x84D5, + 0x84D6, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0xC4BC, + 0x84DB, 0x84DC, 0x84DD, 0x84DE, 0xC7DA, 0x84DF, + 0x84E0, 0x84E1, 0x84E2, 0x84E3, 0x84E4, 0x84E5, + 0x84E6, 0x84E7, 0x84E8, 0x84E9, 0xDBC4, 0x84EA, + 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x84F0, + 0x84F1, 0xD9E8, 0xC9D7, 0x84F2, 0x84F3, 0x84F4, + 0xB9B4, 0xCEF0, 0xD4C8, 0x84F5, 0x84F6, 0x84F7, + 0x84F8, 0xB0FC, 0xB4D2, 0x84F9, 0xD0D9, 0x84FA, + 0x84FB, 0x84FC, 0x84FD, 0xD9E9, 0x84FE, 0xDECB, + 0xD9EB, 0x8540, 0x8541, 0x8542, 0x8543, 0xD8B0, + 0xBBAF, 0xB1B1, 0x8544, 0xB3D7, 0xD8CE, 0x8545, + 0x8546, 0xD4D1, 0x8547, 0x8548, 0xBDB3, 0xBFEF, + 0x8549, 0xCFBB, 0x854A, 0x854B, 0xD8D0, 0x854C, + 0x854D, 0x854E, 0xB7CB, 0x854F, 0x8550, 0x8551, + 0xD8D1, 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, + 0x8557, 0x8558, 0x8559, 0x855A, 0x855B, 0xC6A5, + 0xC7F8, 0xD2BD, 0x855C, 0x855D, 0xD8D2, 0xC4E4, + 0x855E, 0xCAAE, 0x855F, 0xC7A7, 0x8560, 0xD8A6, + 0x8561, 0xC9FD, 0xCEE7, 0xBBDC, 0xB0EB, 0x8562, + 0x8563, 0x8564, 0xBBAA, 0xD0AD, 0x8565, 0xB1B0, + 0xD7E4, 0xD7BF, 0x8566, 0xB5A5, 0xC2F4, 0xC4CF, + 0x8567, 0x8568, 0xB2A9, 0x8569, 0xB2B7, 0x856A, + 0xB1E5, 0xDFB2, 0xD5BC, 0xBFA8, 0xC2AC, 0xD8D5, + 0xC2B1, 0x856B, 0xD8D4, 0xCED4, 0x856C, 0xDAE0, + 0x856D, 0xCEC0, 0x856E, 0x856F, 0xD8B4, 0xC3AE, + 0xD3A1, 0xCEA3, 0x8570, 0xBCB4, 0xC8B4, 0xC2D1, + 0x8571, 0xBEED, 0xD0B6, 0x8572, 0xDAE1, 0x8573, + 0x8574, 0x8575, 0x8576, 0xC7E4, 0x8577, 0x8578, + 0xB3A7, 0x8579, 0xB6F2, 0xCCFC, 0xC0FA, 0x857A, + 0x857B, 0xC0F7, 0x857C, 0xD1B9, 0xD1E1, 0xD8C7, + 0x857D, 0x857E, 0x8580, 0x8581, 0x8582, 0x8583, + 0x8584, 0xB2DE, 0x8585, 0x8586, 0xC0E5, 0x8587, + 0xBAF1, 0x8588, 0x8589, 0xD8C8, 0x858A, 0xD4AD, + 0x858B, 0x858C, 0xCFE1, 0xD8C9, 0x858D, 0xD8CA, + 0xCFC3, 0x858E, 0xB3F8, 0xBEC7, 0x858F, 0x8590, + 0x8591, 0x8592, 0xD8CB, 0x8593, 0x8594, 0x8595, + 0x8596, 0x8597, 0x8598, 0x8599, 0xDBCC, 0x859A, + 0x859B, 0x859C, 0x859D, 0xC8A5, 0x859E, 0x859F, + 0x85A0, 0xCFD8, 0x85A1, 0xC8FE, 0xB2CE, 0x85A2, + 0x85A3, 0x85A4, 0x85A5, 0x85A6, 0xD3D6, 0xB2E6, + 0xBCB0, 0xD3D1, 0xCBAB, 0xB7B4, 0x85A7, 0x85A8, + 0x85A9, 0xB7A2, 0x85AA, 0x85AB, 0xCAE5, 0x85AC, + 0xC8A1, 0xCADC, 0xB1E4, 0xD0F0, 0x85AD, 0xC5D1, + 0x85AE, 0x85AF, 0x85B0, 0xDBC5, 0xB5FE, 0x85B1, + 0x85B2, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0x85B3, + 0xDFB6, 0xDFB5, 0xD6BB, 0xBDD0, 0xD5D9, 0xB0C8, + 0xB6A3, 0xBFC9, 0xCCA8, 0xDFB3, 0xCAB7, 0xD3D2, + 0x85B4, 0xD8CF, 0xD2B6, 0xBAC5, 0xCBBE, 0xCCBE, + 0x85B5, 0xDFB7, 0xB5F0, 0xDFB4, 0x85B6, 0x85B7, + 0x85B8, 0xD3F5, 0x85B9, 0xB3D4, 0xB8F7, 0x85BA, + 0xDFBA, 0x85BB, 0xBACF, 0xBCAA, 0xB5F5, 0x85BC, + 0xCDAC, 0xC3FB, 0xBAF3, 0xC0F4, 0xCDC2, 0xCFF2, + 0xDFB8, 0xCFC5, 0x85BD, 0xC2C0, 0xDFB9, 0xC2F0, + 0x85BE, 0x85BF, 0x85C0, 0xBEFD, 0x85C1, 0xC1DF, + 0xCDCC, 0xD2F7, 0xB7CD, 0xDFC1, 0x85C2, 0xDFC4, + 0x85C3, 0x85C4, 0xB7F1, 0xB0C9, 0xB6D6, 0xB7D4, + 0x85C5, 0xBAAC, 0xCCFD, 0xBFD4, 0xCBB1, 0xC6F4, + 0x85C6, 0xD6A8, 0xDFC5, 0x85C7, 0xCEE2, 0xB3B3, + 0x85C8, 0x85C9, 0xCEFC, 0xB4B5, 0x85CA, 0xCEC7, + 0xBAF0, 0x85CB, 0xCEE1, 0x85CC, 0xD1BD, 0x85CD, + 0x85CE, 0xDFC0, 0x85CF, 0x85D0, 0xB4F4, 0x85D1, + 0xB3CA, 0x85D2, 0xB8E6, 0xDFBB, 0x85D3, 0x85D4, + 0x85D5, 0x85D6, 0xC4C5, 0x85D7, 0xDFBC, 0xDFBD, + 0xDFBE, 0xC5BB, 0xDFBF, 0xDFC2, 0xD4B1, 0xDFC3, + 0x85D8, 0xC7BA, 0xCED8, 0x85D9, 0x85DA, 0x85DB, + 0x85DC, 0x85DD, 0xC4D8, 0x85DE, 0xDFCA, 0x85DF, + 0xDFCF, 0x85E0, 0xD6DC, 0x85E1, 0x85E2, 0x85E3, + 0x85E4, 0x85E5, 0x85E6, 0x85E7, 0x85E8, 0xDFC9, + 0xDFDA, 0xCEB6, 0x85E9, 0xBAC7, 0xDFCE, 0xDFC8, + 0xC5DE, 0x85EA, 0x85EB, 0xC9EB, 0xBAF4, 0xC3FC, + 0x85EC, 0x85ED, 0xBED7, 0x85EE, 0xDFC6, 0x85EF, + 0xDFCD, 0x85F0, 0xC5D8, 0x85F1, 0x85F2, 0x85F3, + 0x85F4, 0xD5A6, 0xBACD, 0x85F5, 0xBECC, 0xD3BD, + 0xB8C0, 0x85F6, 0xD6E4, 0x85F7, 0xDFC7, 0xB9BE, + 0xBFA7, 0x85F8, 0x85F9, 0xC1FC, 0xDFCB, 0xDFCC, + 0x85FA, 0xDFD0, 0x85FB, 0x85FC, 0x85FD, 0x85FE, + 0x8640, 0xDFDB, 0xDFE5, 0x8641, 0xDFD7, 0xDFD6, + 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, + 0x8642, 0xBFA9, 0x8643, 0xD4DB, 0x8644, 0xBFC8, + 0xDFD4, 0x8645, 0x8646, 0x8647, 0xCFCC, 0x8648, + 0x8649, 0xDFDD, 0x864A, 0xD1CA, 0x864B, 0xDFDE, + 0xB0A7, 0xC6B7, 0xDFD3, 0x864C, 0xBAE5, 0x864D, + 0xB6DF, 0xCDDB, 0xB9FE, 0xD4D5, 0x864E, 0x864F, + 0xDFDF, 0xCFEC, 0xB0A5, 0xDFE7, 0xDFD1, 0xD1C6, + 0xDFD5, 0xDFD8, 0xDFD9, 0xDFDC, 0x8650, 0xBBA9, + 0x8651, 0xDFE0, 0xDFE1, 0x8652, 0xDFE2, 0xDFE6, + 0xDFE8, 0xD3B4, 0x8653, 0x8654, 0x8655, 0x8656, + 0x8657, 0xB8E7, 0xC5B6, 0xDFEA, 0xC9DA, 0xC1A8, + 0xC4C4, 0x8658, 0x8659, 0xBFDE, 0xCFF8, 0x865A, + 0x865B, 0x865C, 0xD5DC, 0xDFEE, 0x865D, 0x865E, + 0x865F, 0x8660, 0x8661, 0x8662, 0xB2B8, 0x8663, + 0xBADF, 0xDFEC, 0x8664, 0xDBC1, 0x8665, 0xD1E4, + 0x8666, 0x8667, 0x8668, 0x8669, 0xCBF4, 0xB4BD, + 0x866A, 0xB0A6, 0x866B, 0x866C, 0x866D, 0x866E, + 0x866F, 0xDFF1, 0xCCC6, 0xDFF2, 0x8670, 0x8671, + 0xDFED, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, + 0x8677, 0xDFE9, 0x8678, 0x8679, 0x867A, 0x867B, + 0xDFEB, 0x867C, 0xDFEF, 0xDFF0, 0xBBBD, 0x867D, + 0x867E, 0xDFF3, 0x8680, 0x8681, 0xDFF4, 0x8682, + 0xBBA3, 0x8683, 0xCADB, 0xCEA8, 0xE0A7, 0xB3AA, + 0x8684, 0xE0A6, 0x8685, 0x8686, 0x8687, 0xE0A1, + 0x8688, 0x8689, 0x868A, 0x868B, 0xDFFE, 0x868C, + 0xCDD9, 0xDFFC, 0x868D, 0xDFFA, 0x868E, 0xBFD0, + 0xD7C4, 0x868F, 0xC9CC, 0x8690, 0x8691, 0xDFF8, + 0xB0A1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, + 0xDFFD, 0x8697, 0x8698, 0x8699, 0x869A, 0xDFFB, + 0xE0A2, 0x869B, 0x869C, 0x869D, 0x869E, 0x869F, + 0xE0A8, 0x86A0, 0x86A1, 0x86A2, 0x86A3, 0xB7C8, + 0x86A4, 0x86A5, 0xC6A1, 0xC9B6, 0xC0B2, 0xDFF5, + 0x86A6, 0x86A7, 0xC5BE, 0x86A8, 0xD8C4, 0xDFF9, + 0xC4F6, 0x86A9, 0x86AA, 0x86AB, 0x86AC, 0x86AD, + 0x86AE, 0xE0A3, 0xE0A4, 0xE0A5, 0xD0A5, 0x86AF, + 0x86B0, 0xE0B4, 0xCCE4, 0x86B1, 0xE0B1, 0x86B2, + 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0x86B3, + 0x86B4, 0xC0AE, 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, + 0x86B5, 0x86B6, 0x86B7, 0xDFF6, 0x86B8, 0xE0B3, + 0x86B9, 0x86BA, 0xE0B8, 0x86BB, 0x86BC, 0x86BD, + 0xB4AD, 0xE0B9, 0x86BE, 0x86BF, 0xCFB2, 0xBAC8, + 0x86C0, 0xE0B0, 0x86C1, 0x86C2, 0x86C3, 0x86C4, + 0x86C5, 0x86C6, 0x86C7, 0xD0FA, 0x86C8, 0x86C9, + 0x86CA, 0x86CB, 0x86CC, 0x86CD, 0x86CE, 0x86CF, + 0x86D0, 0xE0AC, 0x86D1, 0xD4FB, 0x86D2, 0xDFF7, + 0x86D3, 0xC5E7, 0x86D4, 0xE0AD, 0x86D5, 0xD3F7, + 0x86D6, 0xE0B6, 0xE0B7, 0x86D7, 0x86D8, 0x86D9, + 0x86DA, 0x86DB, 0xE0C4, 0xD0E1, 0x86DC, 0x86DD, + 0x86DE, 0xE0BC, 0x86DF, 0x86E0, 0xE0C9, 0xE0CA, + 0x86E1, 0x86E2, 0x86E3, 0xE0BE, 0xE0AA, 0xC9A4, + 0xE0C1, 0x86E4, 0xE0B2, 0x86E5, 0x86E6, 0x86E7, + 0x86E8, 0x86E9, 0xCAC8, 0xE0C3, 0x86EA, 0xE0B5, + 0x86EB, 0xCECB, 0x86EC, 0xCBC3, 0xE0CD, 0xE0C6, + 0xE0C2, 0x86ED, 0xE0CB, 0x86EE, 0xE0BA, 0xE0BF, + 0xE0C0, 0x86EF, 0x86F0, 0xE0C5, 0x86F1, 0x86F2, + 0xE0C7, 0xE0C8, 0x86F3, 0xE0CC, 0x86F4, 0xE0BB, + 0x86F5, 0x86F6, 0x86F7, 0x86F8, 0x86F9, 0xCBD4, + 0xE0D5, 0x86FA, 0xE0D6, 0xE0D2, 0x86FB, 0x86FC, + 0x86FD, 0x86FE, 0x8740, 0x8741, 0xE0D0, 0xBCCE, + 0x8742, 0x8743, 0xE0D1, 0x8744, 0xB8C2, 0xD8C5, + 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, + 0x874B, 0x874C, 0xD0EA, 0x874D, 0x874E, 0xC2EF, + 0x874F, 0x8750, 0xE0CF, 0xE0BD, 0x8751, 0x8752, + 0x8753, 0xE0D4, 0xE0D3, 0x8754, 0x8755, 0xE0D7, + 0x8756, 0x8757, 0x8758, 0x8759, 0xE0DC, 0xE0D8, + 0x875A, 0x875B, 0x875C, 0xD6F6, 0xB3B0, 0x875D, + 0xD7EC, 0x875E, 0xCBBB, 0x875F, 0x8760, 0xE0DA, + 0x8761, 0xCEFB, 0x8762, 0x8763, 0x8764, 0xBAD9, + 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, + 0x876B, 0x876C, 0x876D, 0x876E, 0x876F, 0x8770, + 0xE0E1, 0xE0DD, 0xD2AD, 0x8771, 0x8772, 0x8773, + 0x8774, 0x8775, 0xE0E2, 0x8776, 0x8777, 0xE0DB, + 0xE0D9, 0xE0DF, 0x8778, 0x8779, 0xE0E0, 0x877A, + 0x877B, 0x877C, 0x877D, 0x877E, 0xE0DE, 0x8780, + 0xE0E4, 0x8781, 0x8782, 0x8783, 0xC6F7, 0xD8AC, + 0xD4EB, 0xE0E6, 0xCAC9, 0x8784, 0x8785, 0x8786, + 0x8787, 0xE0E5, 0x8788, 0x8789, 0x878A, 0x878B, + 0xB8C1, 0x878C, 0x878D, 0x878E, 0x878F, 0xE0E7, + 0xE0E8, 0x8790, 0x8791, 0x8792, 0x8793, 0x8794, + 0x8795, 0x8796, 0x8797, 0xE0E9, 0xE0E3, 0x8798, + 0x8799, 0x879A, 0x879B, 0x879C, 0x879D, 0x879E, + 0xBABF, 0xCCE7, 0x879F, 0x87A0, 0x87A1, 0xE0EA, + 0x87A2, 0x87A3, 0x87A4, 0x87A5, 0x87A6, 0x87A7, + 0x87A8, 0x87A9, 0x87AA, 0x87AB, 0x87AC, 0x87AD, + 0x87AE, 0x87AF, 0x87B0, 0xCFF9, 0x87B1, 0x87B2, + 0x87B3, 0x87B4, 0x87B5, 0x87B6, 0x87B7, 0x87B8, + 0x87B9, 0x87BA, 0x87BB, 0xE0EB, 0x87BC, 0x87BD, + 0x87BE, 0x87BF, 0x87C0, 0x87C1, 0x87C2, 0xC8C2, + 0x87C3, 0x87C4, 0x87C5, 0x87C6, 0xBDC0, 0x87C7, + 0x87C8, 0x87C9, 0x87CA, 0x87CB, 0x87CC, 0x87CD, + 0x87CE, 0x87CF, 0x87D0, 0x87D1, 0x87D2, 0x87D3, + 0xC4D2, 0x87D4, 0x87D5, 0x87D6, 0x87D7, 0x87D8, + 0x87D9, 0x87DA, 0x87DB, 0x87DC, 0xE0EC, 0x87DD, + 0x87DE, 0xE0ED, 0x87DF, 0x87E0, 0xC7F4, 0xCBC4, + 0x87E1, 0xE0EE, 0xBBD8, 0xD8B6, 0xD2F2, 0xE0EF, + 0xCDC5, 0x87E2, 0xB6DA, 0x87E3, 0x87E4, 0x87E5, + 0x87E6, 0x87E7, 0x87E8, 0xE0F1, 0x87E9, 0xD4B0, + 0x87EA, 0x87EB, 0xC0A7, 0xB4D1, 0x87EC, 0x87ED, + 0xCEA7, 0xE0F0, 0x87EE, 0x87EF, 0x87F0, 0xE0F2, + 0xB9CC, 0x87F1, 0x87F2, 0xB9FA, 0xCDBC, 0xE0F3, + 0x87F3, 0x87F4, 0x87F5, 0xC6D4, 0xE0F4, 0x87F6, + 0xD4B2, 0x87F7, 0xC8A6, 0xE0F6, 0xE0F5, 0x87F8, + 0x87F9, 0x87FA, 0x87FB, 0x87FC, 0x87FD, 0x87FE, + 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, + 0x8846, 0x8847, 0x8848, 0x8849, 0xE0F7, 0x884A, + 0x884B, 0xCDC1, 0x884C, 0x884D, 0x884E, 0xCAA5, + 0x884F, 0x8850, 0x8851, 0x8852, 0xD4DA, 0xDBD7, + 0xDBD9, 0x8853, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, + 0xB5D8, 0x8854, 0x8855, 0xDBDA, 0x8856, 0x8857, + 0x8858, 0x8859, 0x885A, 0xDBDB, 0xB3A1, 0xDBDF, + 0x885B, 0x885C, 0xBBF8, 0x885D, 0xD6B7, 0x885E, + 0xDBE0, 0x885F, 0x8860, 0x8861, 0x8862, 0xBEF9, + 0x8863, 0x8864, 0xB7BB, 0x8865, 0xDBD0, 0xCCAE, + 0xBFB2, 0xBBB5, 0xD7F8, 0xBFD3, 0x8866, 0x8867, + 0x8868, 0x8869, 0x886A, 0xBFE9, 0x886B, 0x886C, + 0xBCE1, 0xCCB3, 0xDBDE, 0xB0D3, 0xCEEB, 0xB7D8, + 0xD7B9, 0xC6C2, 0x886D, 0x886E, 0xC0A4, 0x886F, + 0xCCB9, 0x8870, 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, + 0x8871, 0xDBE8, 0x8872, 0xC5F7, 0x8873, 0x8874, + 0x8875, 0xDBEA, 0x8876, 0x8877, 0xDBE9, 0xBFC0, + 0x8878, 0x8879, 0x887A, 0xDBE6, 0xDBE5, 0x887B, + 0x887C, 0x887D, 0x887E, 0x8880, 0xB4B9, 0xC0AC, + 0xC2A2, 0xDBE2, 0xDBE4, 0x8881, 0x8882, 0x8883, + 0x8884, 0xD0CD, 0xDBED, 0x8885, 0x8886, 0x8887, + 0x8888, 0x8889, 0xC0DD, 0xDBF2, 0x888A, 0x888B, + 0x888C, 0x888D, 0x888E, 0x888F, 0x8890, 0xB6E2, + 0x8891, 0x8892, 0x8893, 0x8894, 0xDBF3, 0xDBD2, + 0xB9B8, 0xD4AB, 0xDBEC, 0x8895, 0xBFD1, 0xDBF0, + 0x8896, 0xDBD1, 0x8897, 0xB5E6, 0x8898, 0xDBEB, + 0xBFE5, 0x8899, 0x889A, 0x889B, 0xDBEE, 0x889C, + 0xDBF1, 0x889D, 0x889E, 0x889F, 0xDBF9, 0x88A0, + 0x88A1, 0x88A2, 0x88A3, 0x88A4, 0x88A5, 0x88A6, + 0x88A7, 0x88A8, 0xB9A1, 0xB0A3, 0x88A9, 0x88AA, + 0x88AB, 0x88AC, 0x88AD, 0x88AE, 0x88AF, 0xC2F1, + 0x88B0, 0x88B1, 0xB3C7, 0xDBEF, 0x88B2, 0x88B3, + 0xDBF8, 0x88B4, 0xC6D2, 0xDBF4, 0x88B5, 0x88B6, + 0xDBF5, 0xDBF7, 0xDBF6, 0x88B7, 0x88B8, 0xDBFE, + 0x88B9, 0xD3F2, 0xB2BA, 0x88BA, 0x88BB, 0x88BC, + 0xDBFD, 0x88BD, 0x88BE, 0x88BF, 0x88C0, 0x88C1, + 0x88C2, 0x88C3, 0x88C4, 0xDCA4, 0x88C5, 0xDBFB, + 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0xDBFA, 0x88CA, + 0x88CB, 0x88CC, 0xDBFC, 0xC5E0, 0xBBF9, 0x88CD, + 0x88CE, 0xDCA3, 0x88CF, 0x88D0, 0xDCA5, 0x88D1, + 0xCCC3, 0x88D2, 0x88D3, 0x88D4, 0xB6D1, 0xDDC0, + 0x88D5, 0x88D6, 0x88D7, 0xDCA1, 0x88D8, 0xDCA2, + 0x88D9, 0x88DA, 0x88DB, 0xC7B5, 0x88DC, 0x88DD, + 0x88DE, 0xB6E9, 0x88DF, 0x88E0, 0x88E1, 0xDCA7, + 0x88E2, 0x88E3, 0x88E4, 0x88E5, 0xDCA6, 0x88E6, + 0xDCA9, 0xB1A4, 0x88E7, 0x88E8, 0xB5CC, 0x88E9, + 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0xBFB0, 0x88EE, + 0x88EF, 0x88F0, 0x88F1, 0x88F2, 0xD1DF, 0x88F3, + 0x88F4, 0x88F5, 0x88F6, 0xB6C2, 0x88F7, 0x88F8, + 0x88F9, 0x88FA, 0x88FB, 0x88FC, 0x88FD, 0x88FE, + 0x8940, 0x8941, 0x8942, 0x8943, 0x8944, 0x8945, + 0xDCA8, 0x8946, 0x8947, 0x8948, 0x8949, 0x894A, + 0x894B, 0x894C, 0xCBFA, 0xEBF3, 0x894D, 0x894E, + 0x894F, 0xCBDC, 0x8950, 0x8951, 0xCBFE, 0x8952, + 0x8953, 0x8954, 0xCCC1, 0x8955, 0x8956, 0x8957, + 0x8958, 0x8959, 0xC8FB, 0x895A, 0x895B, 0x895C, + 0x895D, 0x895E, 0x895F, 0xDCAA, 0x8960, 0x8961, + 0x8962, 0x8963, 0x8964, 0xCCEE, 0xDCAB, 0x8965, + 0x8966, 0x8967, 0x8968, 0x8969, 0x896A, 0x896B, + 0x896C, 0x896D, 0x896E, 0x896F, 0x8970, 0x8971, + 0x8972, 0x8973, 0x8974, 0x8975, 0xDBD3, 0x8976, + 0xDCAF, 0xDCAC, 0x8977, 0xBEB3, 0x8978, 0xCAFB, + 0x8979, 0x897A, 0x897B, 0xDCAD, 0x897C, 0x897D, + 0x897E, 0x8980, 0x8981, 0x8982, 0x8983, 0x8984, + 0xC9CA, 0xC4B9, 0x8985, 0x8986, 0x8987, 0x8988, + 0x8989, 0xC7BD, 0xDCAE, 0x898A, 0x898B, 0x898C, + 0xD4F6, 0xD0E6, 0x898D, 0x898E, 0x898F, 0x8990, + 0x8991, 0x8992, 0x8993, 0x8994, 0xC4AB, 0xB6D5, + 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899A, + 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, + 0x89A1, 0x89A2, 0x89A3, 0x89A4, 0x89A5, 0x89A6, + 0xDBD4, 0x89A7, 0x89A8, 0x89A9, 0x89AA, 0xB1DA, + 0x89AB, 0x89AC, 0x89AD, 0xDBD5, 0x89AE, 0x89AF, + 0x89B0, 0x89B1, 0x89B2, 0x89B3, 0x89B4, 0x89B5, + 0x89B6, 0x89B7, 0x89B8, 0xDBD6, 0x89B9, 0x89BA, + 0x89BB, 0xBABE, 0x89BC, 0x89BD, 0x89BE, 0x89BF, + 0x89C0, 0x89C1, 0x89C2, 0x89C3, 0x89C4, 0x89C5, + 0x89C6, 0x89C7, 0x89C8, 0x89C9, 0xC8C0, 0x89CA, + 0x89CB, 0x89CC, 0x89CD, 0x89CE, 0x89CF, 0xCABF, + 0xC8C9, 0x89D0, 0xD7B3, 0x89D1, 0xC9F9, 0x89D2, + 0x89D3, 0xBFC7, 0x89D4, 0x89D5, 0xBAF8, 0x89D6, + 0x89D7, 0xD2BC, 0x89D8, 0x89D9, 0x89DA, 0x89DB, + 0x89DC, 0x89DD, 0x89DE, 0x89DF, 0xE2BA, 0x89E0, + 0xB4A6, 0x89E1, 0x89E2, 0xB1B8, 0x89E3, 0x89E4, + 0x89E5, 0x89E6, 0x89E7, 0xB8B4, 0x89E8, 0xCFC4, + 0x89E9, 0x89EA, 0x89EB, 0x89EC, 0xD9E7, 0xCFA6, + 0xCDE2, 0x89ED, 0x89EE, 0xD9ED, 0xB6E0, 0x89EF, + 0xD2B9, 0x89F0, 0x89F1, 0xB9BB, 0x89F2, 0x89F3, + 0x89F4, 0x89F5, 0xE2B9, 0xE2B7, 0x89F6, 0xB4F3, + 0x89F7, 0xCCEC, 0xCCAB, 0xB7F2, 0x89F8, 0xD8B2, + 0xD1EB, 0xBABB, 0x89F9, 0xCAA7, 0x89FA, 0x89FB, + 0xCDB7, 0x89FC, 0x89FD, 0xD2C4, 0xBFE4, 0xBCD0, + 0xB6E1, 0x89FE, 0xDEC5, 0x8A40, 0x8A41, 0x8A42, + 0x8A43, 0xDEC6, 0xDBBC, 0x8A44, 0xD1D9, 0x8A45, + 0x8A46, 0xC6E6, 0xC4CE, 0xB7EE, 0x8A47, 0xB7DC, + 0x8A48, 0x8A49, 0xBFFC, 0xD7E0, 0x8A4A, 0xC6F5, + 0x8A4B, 0x8A4C, 0xB1BC, 0xDEC8, 0xBDB1, 0xCCD7, + 0xDECA, 0x8A4D, 0xDEC9, 0x8A4E, 0x8A4F, 0x8A50, + 0x8A51, 0x8A52, 0xB5EC, 0x8A53, 0xC9DD, 0x8A54, + 0x8A55, 0xB0C2, 0x8A56, 0x8A57, 0x8A58, 0x8A59, + 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, 0x8A5E, 0x8A5F, + 0x8A60, 0x8A61, 0x8A62, 0xC5AE, 0xC5AB, 0x8A63, + 0xC4CC, 0x8A64, 0xBCE9, 0xCBFD, 0x8A65, 0x8A66, + 0x8A67, 0xBAC3, 0x8A68, 0x8A69, 0x8A6A, 0xE5F9, + 0xC8E7, 0xE5FA, 0xCDFD, 0x8A6B, 0xD7B1, 0xB8BE, + 0xC2E8, 0x8A6C, 0xC8D1, 0x8A6D, 0x8A6E, 0xE5FB, + 0x8A6F, 0x8A70, 0x8A71, 0x8A72, 0xB6CA, 0xBCCB, + 0x8A73, 0x8A74, 0xD1FD, 0xE6A1, 0x8A75, 0xC3EE, + 0x8A76, 0x8A77, 0x8A78, 0x8A79, 0xE6A4, 0x8A7A, + 0x8A7B, 0x8A7C, 0x8A7D, 0xE5FE, 0xE6A5, 0xCDD7, + 0x8A7E, 0x8A80, 0xB7C1, 0xE5FC, 0xE5FD, 0xE6A3, + 0x8A81, 0x8A82, 0xC4DD, 0xE6A8, 0x8A83, 0x8A84, + 0xE6A7, 0x8A85, 0x8A86, 0x8A87, 0x8A88, 0x8A89, + 0x8A8A, 0xC3C3, 0x8A8B, 0xC6DE, 0x8A8C, 0x8A8D, + 0xE6AA, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A92, + 0x8A93, 0x8A94, 0xC4B7, 0x8A95, 0x8A96, 0x8A97, + 0xE6A2, 0xCABC, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, + 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0x8A9C, + 0x8A9D, 0xE6A9, 0xE6B0, 0x8A9E, 0xD2A6, 0x8A9F, + 0xBDAA, 0xE6AD, 0x8AA0, 0x8AA1, 0x8AA2, 0x8AA3, + 0x8AA4, 0xE6AF, 0x8AA5, 0xC0D1, 0x8AA6, 0x8AA7, + 0xD2CC, 0x8AA8, 0x8AA9, 0x8AAA, 0xBCA7, 0x8AAB, + 0x8AAC, 0x8AAD, 0x8AAE, 0x8AAF, 0x8AB0, 0x8AB1, + 0x8AB2, 0x8AB3, 0x8AB4, 0x8AB5, 0x8AB6, 0xE6B1, + 0x8AB7, 0xD2F6, 0x8AB8, 0x8AB9, 0x8ABA, 0xD7CB, + 0x8ABB, 0xCDFE, 0x8ABC, 0xCDDE, 0xC2A6, 0xE6AB, + 0xE6AC, 0xBDBF, 0xE6AE, 0xE6B3, 0x8ABD, 0x8ABE, + 0xE6B2, 0x8ABF, 0x8AC0, 0x8AC1, 0x8AC2, 0xE6B6, + 0x8AC3, 0xE6B8, 0x8AC4, 0x8AC5, 0x8AC6, 0x8AC7, + 0xC4EF, 0x8AC8, 0x8AC9, 0x8ACA, 0xC4C8, 0x8ACB, + 0x8ACC, 0xBEEA, 0xC9EF, 0x8ACD, 0x8ACE, 0xE6B7, + 0x8ACF, 0xB6F0, 0x8AD0, 0x8AD1, 0x8AD2, 0xC3E4, + 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0x8AD7, 0x8AD8, + 0x8AD9, 0xD3E9, 0xE6B4, 0x8ADA, 0xE6B5, 0x8ADB, + 0xC8A2, 0x8ADC, 0x8ADD, 0x8ADE, 0x8ADF, 0x8AE0, + 0xE6BD, 0x8AE1, 0x8AE2, 0x8AE3, 0xE6B9, 0x8AE4, + 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, 0xC6C5, 0x8AE9, + 0x8AEA, 0xCDF1, 0xE6BB, 0x8AEB, 0x8AEC, 0x8AED, + 0x8AEE, 0x8AEF, 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, + 0x8AF4, 0xE6BC, 0x8AF5, 0x8AF6, 0x8AF7, 0x8AF8, + 0xBBE9, 0x8AF9, 0x8AFA, 0x8AFB, 0x8AFC, 0x8AFD, + 0x8AFE, 0x8B40, 0xE6BE, 0x8B41, 0x8B42, 0x8B43, + 0x8B44, 0xE6BA, 0x8B45, 0x8B46, 0xC0B7, 0x8B47, + 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, 0x8B4D, + 0x8B4E, 0x8B4F, 0xD3A4, 0xE6BF, 0xC9F4, 0xE6C3, + 0x8B50, 0x8B51, 0xE6C4, 0x8B52, 0x8B53, 0x8B54, + 0x8B55, 0xD0F6, 0x8B56, 0x8B57, 0x8B58, 0x8B59, + 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, 0x8B5E, 0x8B5F, + 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, + 0x8B66, 0x8B67, 0xC3BD, 0x8B68, 0x8B69, 0x8B6A, + 0x8B6B, 0x8B6C, 0x8B6D, 0x8B6E, 0xC3C4, 0xE6C2, + 0x8B6F, 0x8B70, 0x8B71, 0x8B72, 0x8B73, 0x8B74, + 0x8B75, 0x8B76, 0x8B77, 0x8B78, 0x8B79, 0x8B7A, + 0x8B7B, 0x8B7C, 0xE6C1, 0x8B7D, 0x8B7E, 0x8B80, + 0x8B81, 0x8B82, 0x8B83, 0x8B84, 0xE6C7, 0xCFB1, + 0x8B85, 0xEBF4, 0x8B86, 0x8B87, 0xE6CA, 0x8B88, + 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0xE6C5, 0x8B8D, + 0x8B8E, 0xBCDE, 0xC9A9, 0x8B8F, 0x8B90, 0x8B91, + 0x8B92, 0x8B93, 0x8B94, 0xBCB5, 0x8B95, 0x8B96, + 0xCFD3, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, + 0xE6C8, 0x8B9C, 0xE6C9, 0x8B9D, 0xE6CE, 0x8B9E, + 0xE6D0, 0x8B9F, 0x8BA0, 0x8BA1, 0xE6D1, 0x8BA2, + 0x8BA3, 0x8BA4, 0xE6CB, 0xB5D5, 0x8BA5, 0xE6CC, + 0x8BA6, 0x8BA7, 0xE6CF, 0x8BA8, 0x8BA9, 0xC4DB, + 0x8BAA, 0xE6C6, 0x8BAB, 0x8BAC, 0x8BAD, 0x8BAE, + 0x8BAF, 0xE6CD, 0x8BB0, 0x8BB1, 0x8BB2, 0x8BB3, + 0x8BB4, 0x8BB5, 0x8BB6, 0x8BB7, 0x8BB8, 0x8BB9, + 0x8BBA, 0x8BBB, 0x8BBC, 0x8BBD, 0x8BBE, 0x8BBF, + 0x8BC0, 0x8BC1, 0x8BC2, 0x8BC3, 0x8BC4, 0x8BC5, + 0x8BC6, 0xE6D2, 0x8BC7, 0x8BC8, 0x8BC9, 0x8BCA, + 0x8BCB, 0x8BCC, 0x8BCD, 0x8BCE, 0x8BCF, 0x8BD0, + 0x8BD1, 0x8BD2, 0xE6D4, 0xE6D3, 0x8BD3, 0x8BD4, + 0x8BD5, 0x8BD6, 0x8BD7, 0x8BD8, 0x8BD9, 0x8BDA, + 0x8BDB, 0x8BDC, 0x8BDD, 0x8BDE, 0x8BDF, 0x8BE0, + 0x8BE1, 0x8BE2, 0x8BE3, 0x8BE4, 0x8BE5, 0x8BE6, + 0x8BE7, 0x8BE8, 0x8BE9, 0x8BEA, 0x8BEB, 0x8BEC, + 0xE6D5, 0x8BED, 0xD9F8, 0x8BEE, 0x8BEF, 0xE6D6, + 0x8BF0, 0x8BF1, 0x8BF2, 0x8BF3, 0x8BF4, 0x8BF5, + 0x8BF6, 0x8BF7, 0xE6D7, 0x8BF8, 0x8BF9, 0x8BFA, + 0x8BFB, 0x8BFC, 0x8BFD, 0x8BFE, 0x8C40, 0x8C41, + 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C46, 0x8C47, + 0xD7D3, 0xE6DD, 0x8C48, 0xE6DE, 0xBFD7, 0xD4D0, + 0x8C49, 0xD7D6, 0xB4E6, 0xCBEF, 0xE6DA, 0xD8C3, + 0xD7CE, 0xD0A2, 0x8C4A, 0xC3CF, 0x8C4B, 0x8C4C, + 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0xD1A7, 0x8C4D, + 0x8C4E, 0xBAA2, 0xC2CF, 0x8C4F, 0xD8AB, 0x8C50, + 0x8C51, 0x8C52, 0xCAEB, 0xE5EE, 0x8C53, 0xE6DC, + 0x8C54, 0xB7F5, 0x8C55, 0x8C56, 0x8C57, 0x8C58, + 0xC8E6, 0x8C59, 0x8C5A, 0xC4F5, 0x8C5B, 0x8C5C, + 0xE5B2, 0xC4FE, 0x8C5D, 0xCBFC, 0xE5B3, 0xD5AC, + 0x8C5E, 0xD3EE, 0xCAD8, 0xB0B2, 0x8C5F, 0xCBCE, + 0xCDEA, 0x8C60, 0x8C61, 0xBAEA, 0x8C62, 0x8C63, + 0x8C64, 0xE5B5, 0x8C65, 0xE5B4, 0x8C66, 0xD7DA, + 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0xB1A6, + 0xCAB5, 0x8C67, 0xB3E8, 0xC9F3, 0xBFCD, 0xD0FB, + 0xCAD2, 0xE5B6, 0xBBC2, 0x8C68, 0x8C69, 0x8C6A, + 0xCFDC, 0xB9AC, 0x8C6B, 0x8C6C, 0x8C6D, 0x8C6E, + 0xD4D7, 0x8C6F, 0x8C70, 0xBAA6, 0xD1E7, 0xCFFC, + 0xBCD2, 0x8C71, 0xE5B7, 0xC8DD, 0x8C72, 0x8C73, + 0x8C74, 0xBFED, 0xB1F6, 0xCBDE, 0x8C75, 0x8C76, + 0xBCC5, 0x8C77, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, + 0x8C78, 0x8C79, 0x8C7A, 0x8C7B, 0xB8BB, 0x8C7C, + 0x8C7D, 0x8C7E, 0xC3C2, 0x8C80, 0xBAAE, 0xD4A2, + 0x8C81, 0x8C82, 0x8C83, 0x8C84, 0x8C85, 0x8C86, + 0x8C87, 0x8C88, 0x8C89, 0xC7DE, 0xC4AF, 0xB2EC, + 0x8C8A, 0xB9D1, 0x8C8B, 0x8C8C, 0xE5BB, 0xC1C8, + 0x8C8D, 0x8C8E, 0xD5AF, 0x8C8F, 0x8C90, 0x8C91, + 0x8C92, 0x8C93, 0xE5BC, 0x8C94, 0xE5BE, 0x8C95, + 0x8C96, 0x8C97, 0x8C98, 0x8C99, 0x8C9A, 0x8C9B, + 0xB4E7, 0xB6D4, 0xCBC2, 0xD1B0, 0xB5BC, 0x8C9C, + 0x8C9D, 0xCAD9, 0x8C9E, 0xB7E2, 0x8C9F, 0x8CA0, + 0xC9E4, 0x8CA1, 0xBDAB, 0x8CA2, 0x8CA3, 0xCEBE, + 0xD7F0, 0x8CA4, 0x8CA5, 0x8CA6, 0x8CA7, 0xD0A1, + 0x8CA8, 0xC9D9, 0x8CA9, 0x8CAA, 0xB6FB, 0xE6D8, + 0xBCE2, 0x8CAB, 0xB3BE, 0x8CAC, 0xC9D0, 0x8CAD, + 0xE6D9, 0xB3A2, 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, + 0xDECC, 0x8CB2, 0xD3C8, 0xDECD, 0x8CB3, 0xD2A2, + 0x8CB4, 0x8CB5, 0x8CB6, 0x8CB7, 0xDECE, 0x8CB8, + 0x8CB9, 0x8CBA, 0x8CBB, 0xBECD, 0x8CBC, 0x8CBD, + 0xDECF, 0x8CBE, 0x8CBF, 0x8CC0, 0xCAAC, 0xD2FC, + 0xB3DF, 0xE5EA, 0xC4E1, 0xBEA1, 0xCEB2, 0xC4F2, + 0xBED6, 0xC6A8, 0xB2E3, 0x8CC1, 0x8CC2, 0xBED3, + 0x8CC3, 0x8CC4, 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, + 0x8CC5, 0x8CC6, 0xCABA, 0xC6C1, 0xE5EC, 0xD0BC, + 0x8CC7, 0x8CC8, 0x8CC9, 0xD5B9, 0x8CCA, 0x8CCB, + 0x8CCC, 0xE5ED, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, + 0xCAF4, 0x8CD1, 0xCDC0, 0xC2C5, 0x8CD2, 0xE5EF, + 0x8CD3, 0xC2C4, 0xE5F0, 0x8CD4, 0x8CD5, 0x8CD6, + 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, 0xE5F8, 0xCDCD, + 0x8CDB, 0xC9BD, 0x8CDC, 0x8CDD, 0x8CDE, 0x8CDF, + 0x8CE0, 0x8CE1, 0x8CE2, 0xD2D9, 0xE1A8, 0x8CE3, + 0x8CE4, 0x8CE5, 0x8CE6, 0xD3EC, 0x8CE7, 0xCBEA, + 0xC6F1, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, + 0xE1AC, 0x8CED, 0x8CEE, 0x8CEF, 0xE1A7, 0xE1A9, + 0x8CF0, 0x8CF1, 0xE1AA, 0xE1AF, 0x8CF2, 0x8CF3, + 0xB2ED, 0x8CF4, 0xE1AB, 0xB8DA, 0xE1AD, 0xE1AE, + 0xE1B0, 0xB5BA, 0xE1B1, 0x8CF5, 0x8CF6, 0x8CF7, + 0x8CF8, 0x8CF9, 0xE1B3, 0xE1B8, 0x8CFA, 0x8CFB, + 0x8CFC, 0x8CFD, 0x8CFE, 0xD1D2, 0x8D40, 0xE1B6, + 0xE1B5, 0xC1EB, 0x8D41, 0x8D42, 0x8D43, 0xE1B7, + 0x8D44, 0xD4C0, 0x8D45, 0xE1B2, 0x8D46, 0xE1BA, + 0xB0B6, 0x8D47, 0x8D48, 0x8D49, 0x8D4A, 0xE1B4, + 0x8D4B, 0xBFF9, 0x8D4C, 0xE1B9, 0x8D4D, 0x8D4E, + 0xE1BB, 0x8D4F, 0x8D50, 0x8D51, 0x8D52, 0x8D53, + 0x8D54, 0xE1BE, 0x8D55, 0x8D56, 0x8D57, 0x8D58, + 0x8D59, 0x8D5A, 0xE1BC, 0x8D5B, 0x8D5C, 0x8D5D, + 0x8D5E, 0x8D5F, 0x8D60, 0xD6C5, 0x8D61, 0x8D62, + 0x8D63, 0x8D64, 0x8D65, 0x8D66, 0x8D67, 0xCFBF, + 0x8D68, 0x8D69, 0xE1BD, 0xE1BF, 0xC2CD, 0x8D6A, + 0xB6EB, 0x8D6B, 0xD3F8, 0x8D6C, 0x8D6D, 0xC7CD, + 0x8D6E, 0x8D6F, 0xB7E5, 0x8D70, 0x8D71, 0x8D72, + 0x8D73, 0x8D74, 0x8D75, 0x8D76, 0x8D77, 0x8D78, + 0x8D79, 0xBEFE, 0x8D7A, 0x8D7B, 0x8D7C, 0x8D7D, + 0x8D7E, 0x8D80, 0xE1C0, 0xE1C1, 0x8D81, 0x8D82, + 0xE1C7, 0xB3E7, 0x8D83, 0x8D84, 0x8D85, 0x8D86, + 0x8D87, 0x8D88, 0xC6E9, 0x8D89, 0x8D8A, 0x8D8B, + 0x8D8C, 0x8D8D, 0xB4DE, 0x8D8E, 0xD1C2, 0x8D8F, + 0x8D90, 0x8D91, 0x8D92, 0xE1C8, 0x8D93, 0x8D94, + 0xE1C6, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, + 0xE1C5, 0x8D9A, 0xE1C3, 0xE1C2, 0x8D9B, 0xB1C0, + 0x8D9C, 0x8D9D, 0x8D9E, 0xD5B8, 0xE1C4, 0x8D9F, + 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA3, 0xE1CB, 0x8DA4, + 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, + 0x8DAB, 0xE1CC, 0xE1CA, 0x8DAC, 0x8DAD, 0x8DAE, + 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB2, 0x8DB3, 0xEFFA, + 0x8DB4, 0x8DB5, 0xE1D3, 0xE1D2, 0xC7B6, 0x8DB6, + 0x8DB7, 0x8DB8, 0x8DB9, 0x8DBA, 0x8DBB, 0x8DBC, + 0x8DBD, 0x8DBE, 0x8DBF, 0x8DC0, 0xE1C9, 0x8DC1, + 0x8DC2, 0xE1CE, 0x8DC3, 0xE1D0, 0x8DC4, 0x8DC5, + 0x8DC6, 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCB, + 0x8DCC, 0x8DCD, 0x8DCE, 0xE1D4, 0x8DCF, 0xE1D1, + 0xE1CD, 0x8DD0, 0x8DD1, 0xE1CF, 0x8DD2, 0x8DD3, + 0x8DD4, 0x8DD5, 0xE1D5, 0x8DD6, 0x8DD7, 0x8DD8, + 0x8DD9, 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x8DDE, + 0x8DDF, 0x8DE0, 0x8DE1, 0x8DE2, 0xE1D6, 0x8DE3, + 0x8DE4, 0x8DE5, 0x8DE6, 0x8DE7, 0x8DE8, 0x8DE9, + 0x8DEA, 0x8DEB, 0x8DEC, 0x8DED, 0x8DEE, 0x8DEF, + 0x8DF0, 0x8DF1, 0x8DF2, 0x8DF3, 0x8DF4, 0x8DF5, + 0x8DF6, 0x8DF7, 0x8DF8, 0xE1D7, 0x8DF9, 0x8DFA, + 0x8DFB, 0xE1D8, 0x8DFC, 0x8DFD, 0x8DFE, 0x8E40, + 0x8E41, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, + 0x8E47, 0x8E48, 0x8E49, 0x8E4A, 0x8E4B, 0x8E4C, + 0x8E4D, 0x8E4E, 0x8E4F, 0x8E50, 0x8E51, 0x8E52, + 0x8E53, 0x8E54, 0x8E55, 0xE1DA, 0x8E56, 0x8E57, + 0x8E58, 0x8E59, 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, + 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, 0xE1DB, + 0x8E63, 0x8E64, 0x8E65, 0x8E66, 0x8E67, 0x8E68, + 0x8E69, 0xCEA1, 0x8E6A, 0x8E6B, 0x8E6C, 0x8E6D, + 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E72, 0x8E73, + 0x8E74, 0x8E75, 0x8E76, 0xE7DD, 0x8E77, 0xB4A8, + 0xD6DD, 0x8E78, 0x8E79, 0xD1B2, 0xB3B2, 0x8E7A, + 0x8E7B, 0xB9A4, 0xD7F3, 0xC7C9, 0xBEDE, 0xB9AE, + 0x8E7C, 0xCED7, 0x8E7D, 0x8E7E, 0xB2EE, 0xDBCF, + 0x8E80, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0x8E81, + 0x8E82, 0xCFEF, 0x8E83, 0x8E84, 0x8E85, 0x8E86, + 0x8E87, 0xD9E3, 0xBDED, 0x8E88, 0x8E89, 0xB1D2, + 0xCAD0, 0xB2BC, 0x8E8A, 0xCBA7, 0xB7AB, 0x8E8B, + 0xCAA6, 0x8E8C, 0x8E8D, 0x8E8E, 0xCFA3, 0x8E8F, + 0x8E90, 0xE0F8, 0xD5CA, 0xE0FB, 0x8E91, 0x8E92, + 0xE0FA, 0xC5C1, 0xCCFB, 0x8E93, 0xC1B1, 0xE0F9, + 0xD6E3, 0xB2AF, 0xD6C4, 0xB5DB, 0x8E94, 0x8E95, + 0x8E96, 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0x8E9B, + 0xB4F8, 0xD6A1, 0x8E9C, 0x8E9D, 0x8E9E, 0x8E9F, + 0x8EA0, 0xCFAF, 0xB0EF, 0x8EA1, 0x8EA2, 0xE0FC, + 0x8EA3, 0x8EA4, 0x8EA5, 0x8EA6, 0x8EA7, 0xE1A1, + 0xB3A3, 0x8EA8, 0x8EA9, 0xE0FD, 0xE0FE, 0xC3B1, + 0x8EAA, 0x8EAB, 0x8EAC, 0x8EAD, 0xC3DD, 0x8EAE, + 0xE1A2, 0xB7F9, 0x8EAF, 0x8EB0, 0x8EB1, 0x8EB2, + 0x8EB3, 0x8EB4, 0xBBCF, 0x8EB5, 0x8EB6, 0x8EB7, + 0x8EB8, 0x8EB9, 0x8EBA, 0x8EBB, 0xE1A3, 0xC4BB, + 0x8EBC, 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC0, 0xE1A4, + 0x8EC1, 0x8EC2, 0xE1A5, 0x8EC3, 0x8EC4, 0xE1A6, + 0xB4B1, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, + 0x8ECA, 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECE, 0x8ECF, + 0x8ED0, 0x8ED1, 0x8ED2, 0x8ED3, 0xB8C9, 0xC6BD, + 0xC4EA, 0x8ED4, 0xB2A2, 0x8ED5, 0xD0D2, 0x8ED6, + 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0x8ED7, 0xB9E3, + 0xE2CF, 0x8ED8, 0x8ED9, 0x8EDA, 0xD7AF, 0x8EDB, + 0xC7EC, 0xB1D3, 0x8EDC, 0x8EDD, 0xB4B2, 0xE2D1, + 0x8EDE, 0x8EDF, 0x8EE0, 0xD0F2, 0xC2AE, 0xE2D0, + 0x8EE1, 0xBFE2, 0xD3A6, 0xB5D7, 0xE2D2, 0xB5EA, + 0x8EE2, 0xC3ED, 0xB8FD, 0x8EE3, 0xB8AE, 0x8EE4, + 0xC5D3, 0xB7CF, 0xE2D4, 0x8EE5, 0x8EE6, 0x8EE7, + 0x8EE8, 0xE2D3, 0xB6C8, 0xD7F9, 0x8EE9, 0x8EEA, + 0x8EEB, 0x8EEC, 0x8EED, 0xCDA5, 0x8EEE, 0x8EEF, + 0x8EF0, 0x8EF1, 0x8EF2, 0xE2D8, 0x8EF3, 0xE2D6, + 0xCAFC, 0xBFB5, 0xD3B9, 0xE2D5, 0x8EF4, 0x8EF5, + 0x8EF6, 0x8EF7, 0xE2D7, 0x8EF8, 0x8EF9, 0x8EFA, + 0x8EFB, 0x8EFC, 0x8EFD, 0x8EFE, 0x8F40, 0x8F41, + 0x8F42, 0xC1AE, 0xC0C8, 0x8F43, 0x8F44, 0x8F45, + 0x8F46, 0x8F47, 0x8F48, 0xE2DB, 0xE2DA, 0xC0AA, + 0x8F49, 0x8F4A, 0xC1CE, 0x8F4B, 0x8F4C, 0x8F4D, + 0x8F4E, 0xE2DC, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, + 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, + 0x8F59, 0x8F5A, 0xE2DD, 0x8F5B, 0xE2DE, 0x8F5C, + 0x8F5D, 0x8F5E, 0x8F5F, 0x8F60, 0x8F61, 0x8F62, + 0x8F63, 0x8F64, 0xDBC8, 0x8F65, 0xD1D3, 0xCDA2, + 0x8F66, 0x8F67, 0xBDA8, 0x8F68, 0x8F69, 0x8F6A, + 0xDEC3, 0xD8A5, 0xBFAA, 0xDBCD, 0xD2EC, 0xC6FA, + 0xC5AA, 0x8F6B, 0x8F6C, 0x8F6D, 0xDEC4, 0x8F6E, + 0xB1D7, 0xDFAE, 0x8F6F, 0x8F70, 0x8F71, 0xCABD, + 0x8F72, 0xDFB1, 0x8F73, 0xB9AD, 0x8F74, 0xD2FD, + 0x8F75, 0xB8A5, 0xBAEB, 0x8F76, 0x8F77, 0xB3DA, + 0x8F78, 0x8F79, 0x8F7A, 0xB5DC, 0xD5C5, 0x8F7B, + 0x8F7C, 0x8F7D, 0x8F7E, 0xC3D6, 0xCFD2, 0xBBA1, + 0x8F80, 0xE5F3, 0xE5F2, 0x8F81, 0x8F82, 0xE5F4, + 0x8F83, 0xCDE4, 0x8F84, 0xC8F5, 0x8F85, 0x8F86, + 0x8F87, 0x8F88, 0x8F89, 0x8F8A, 0x8F8B, 0xB5AF, + 0xC7BF, 0x8F8C, 0xE5F6, 0x8F8D, 0x8F8E, 0x8F8F, + 0xECB0, 0x8F90, 0x8F91, 0x8F92, 0x8F93, 0x8F94, + 0x8F95, 0x8F96, 0x8F97, 0x8F98, 0x8F99, 0x8F9A, + 0x8F9B, 0x8F9C, 0x8F9D, 0x8F9E, 0xE5E6, 0x8F9F, + 0xB9E9, 0xB5B1, 0x8FA0, 0xC2BC, 0xE5E8, 0xE5E7, + 0xE5E9, 0x8FA1, 0x8FA2, 0x8FA3, 0x8FA4, 0xD2CD, + 0x8FA5, 0x8FA6, 0x8FA7, 0xE1EA, 0xD0CE, 0x8FA8, + 0xCDAE, 0x8FA9, 0xD1E5, 0x8FAA, 0x8FAB, 0xB2CA, + 0xB1EB, 0x8FAC, 0xB1F2, 0xC5ED, 0x8FAD, 0x8FAE, + 0xD5C3, 0xD3B0, 0x8FAF, 0xE1DC, 0x8FB0, 0x8FB1, + 0x8FB2, 0xE1DD, 0x8FB3, 0xD2DB, 0x8FB4, 0xB3B9, + 0xB1CB, 0x8FB5, 0x8FB6, 0x8FB7, 0xCDF9, 0xD5F7, + 0xE1DE, 0x8FB8, 0xBEB6, 0xB4FD, 0x8FB9, 0xE1DF, + 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xE1E1, 0x8FBA, + 0x8FBB, 0x8FBC, 0xD0EC, 0x8FBD, 0xCDBD, 0x8FBE, + 0x8FBF, 0xE1E2, 0x8FC0, 0xB5C3, 0xC5C7, 0xE1E3, + 0x8FC1, 0x8FC2, 0xE1E4, 0x8FC3, 0x8FC4, 0x8FC5, + 0x8FC6, 0xD3F9, 0x8FC7, 0x8FC8, 0x8FC9, 0x8FCA, + 0x8FCB, 0x8FCC, 0xE1E5, 0x8FCD, 0xD1AD, 0x8FCE, + 0x8FCF, 0xE1E6, 0xCEA2, 0x8FD0, 0x8FD1, 0x8FD2, + 0x8FD3, 0x8FD4, 0x8FD5, 0xE1E7, 0x8FD6, 0xB5C2, + 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA, 0xE1E8, 0xBBD5, + 0x8FDB, 0x8FDC, 0x8FDD, 0x8FDE, 0x8FDF, 0xD0C4, + 0xE2E0, 0xB1D8, 0xD2E4, 0x8FE0, 0x8FE1, 0xE2E1, + 0x8FE2, 0x8FE3, 0xBCC9, 0xC8CC, 0x8FE4, 0xE2E3, + 0xECFE, 0xECFD, 0xDFAF, 0x8FE5, 0x8FE6, 0x8FE7, + 0xE2E2, 0xD6BE, 0xCDFC, 0xC3A6, 0x8FE8, 0x8FE9, + 0x8FEA, 0xE3C3, 0x8FEB, 0x8FEC, 0xD6D2, 0xE2E7, + 0x8FED, 0x8FEE, 0xE2E8, 0x8FEF, 0x8FF0, 0xD3C7, + 0x8FF1, 0x8FF2, 0xE2EC, 0xBFEC, 0x8FF3, 0xE2ED, + 0xE2E5, 0x8FF4, 0x8FF5, 0xB3C0, 0x8FF6, 0x8FF7, + 0x8FF8, 0xC4EE, 0x8FF9, 0x8FFA, 0xE2EE, 0x8FFB, + 0x8FFC, 0xD0C3, 0x8FFD, 0xBAF6, 0xE2E9, 0xB7DE, + 0xBBB3, 0xCCAC, 0xCBCB, 0xE2E4, 0xE2E6, 0xE2EA, + 0xE2EB, 0x8FFE, 0x9040, 0x9041, 0xE2F7, 0x9042, + 0x9043, 0xE2F4, 0xD4F5, 0xE2F3, 0x9044, 0x9045, + 0xC5AD, 0x9046, 0xD5FA, 0xC5C2, 0xB2C0, 0x9047, + 0x9048, 0xE2EF, 0x9049, 0xE2F2, 0xC1AF, 0xCBBC, + 0x904A, 0x904B, 0xB5A1, 0xE2F9, 0x904C, 0x904D, + 0x904E, 0xBCB1, 0xE2F1, 0xD0D4, 0xD4B9, 0xE2F5, + 0xB9D6, 0xE2F6, 0x904F, 0x9050, 0x9051, 0xC7D3, + 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xE2F0, + 0x9057, 0x9058, 0x9059, 0x905A, 0x905B, 0xD7DC, + 0xEDA1, 0x905C, 0x905D, 0xE2F8, 0x905E, 0xEDA5, + 0xE2FE, 0xCAD1, 0x905F, 0x9060, 0x9061, 0x9062, + 0x9063, 0x9064, 0x9065, 0xC1B5, 0x9066, 0xBBD0, + 0x9067, 0x9068, 0xBFD6, 0x9069, 0xBAE3, 0x906A, + 0x906B, 0xCBA1, 0x906C, 0x906D, 0x906E, 0xEDA6, + 0xEDA3, 0x906F, 0x9070, 0xEDA2, 0x9071, 0x9072, + 0x9073, 0x9074, 0xBBD6, 0xEDA7, 0xD0F4, 0x9075, + 0x9076, 0xEDA4, 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, + 0xCCF1, 0xB9A7, 0x9077, 0xCFA2, 0xC7A1, 0x9078, + 0x9079, 0xBFD2, 0x907A, 0x907B, 0xB6F1, 0x907C, + 0xE2FA, 0xE2FB, 0xE2FD, 0xE2FC, 0xC4D5, 0xE3A2, + 0x907D, 0xD3C1, 0x907E, 0x9080, 0x9081, 0xE3A7, + 0xC7C4, 0x9082, 0x9083, 0x9084, 0x9085, 0xCFA4, + 0x9086, 0x9087, 0xE3A9, 0xBAB7, 0x9088, 0x9089, + 0x908A, 0x908B, 0xE3A8, 0x908C, 0xBBDA, 0x908D, + 0xE3A3, 0x908E, 0x908F, 0x9090, 0xE3A4, 0xE3AA, + 0x9091, 0xE3A6, 0x9092, 0xCEF2, 0xD3C6, 0x9093, + 0x9094, 0xBBBC, 0x9095, 0x9096, 0xD4C3, 0x9097, + 0xC4FA, 0x9098, 0x9099, 0xEDA8, 0xD0FC, 0xE3A5, + 0x909A, 0xC3F5, 0x909B, 0xE3AD, 0xB1AF, 0x909C, + 0xE3B2, 0x909D, 0x909E, 0x909F, 0xBCC2, 0x90A0, + 0x90A1, 0xE3AC, 0xB5BF, 0x90A2, 0x90A3, 0x90A4, + 0x90A5, 0x90A6, 0x90A7, 0x90A8, 0x90A9, 0xC7E9, + 0xE3B0, 0x90AA, 0x90AB, 0x90AC, 0xBEAA, 0xCDEF, + 0x90AD, 0x90AE, 0x90AF, 0x90B0, 0x90B1, 0xBBF3, + 0x90B2, 0x90B3, 0x90B4, 0xCCE8, 0x90B5, 0x90B6, + 0xE3AF, 0x90B7, 0xE3B1, 0x90B8, 0xCFA7, 0xE3AE, + 0x90B9, 0xCEA9, 0xBBDD, 0x90BA, 0x90BB, 0x90BC, + 0x90BD, 0x90BE, 0xB5EB, 0xBEE5, 0xB2D2, 0xB3CD, + 0x90BF, 0xB1B9, 0xE3AB, 0xB2D1, 0xB5AC, 0xB9DF, + 0xB6E8, 0x90C0, 0x90C1, 0xCFEB, 0xE3B7, 0x90C2, + 0xBBCC, 0x90C3, 0x90C4, 0xC8C7, 0xD0CA, 0x90C5, + 0x90C6, 0x90C7, 0x90C8, 0x90C9, 0xE3B8, 0xB3EE, + 0x90CA, 0x90CB, 0x90CC, 0x90CD, 0xEDA9, 0x90CE, + 0xD3FA, 0xD3E4, 0x90CF, 0x90D0, 0x90D1, 0xEDAA, + 0xE3B9, 0xD2E2, 0x90D2, 0x90D3, 0x90D4, 0x90D5, + 0x90D6, 0xE3B5, 0x90D7, 0x90D8, 0x90D9, 0x90DA, + 0xD3DE, 0x90DB, 0x90DC, 0x90DD, 0x90DE, 0xB8D0, + 0xE3B3, 0x90DF, 0x90E0, 0xE3B6, 0xB7DF, 0x90E1, + 0xE3B4, 0xC0A2, 0x90E2, 0x90E3, 0x90E4, 0xE3BA, + 0x90E5, 0x90E6, 0x90E7, 0x90E8, 0x90E9, 0x90EA, + 0x90EB, 0x90EC, 0x90ED, 0x90EE, 0x90EF, 0x90F0, + 0x90F1, 0x90F2, 0x90F3, 0x90F4, 0x90F5, 0x90F6, + 0x90F7, 0xD4B8, 0x90F8, 0x90F9, 0x90FA, 0x90FB, + 0x90FC, 0x90FD, 0x90FE, 0x9140, 0xB4C8, 0x9141, + 0xE3BB, 0x9142, 0xBBC5, 0x9143, 0xC9F7, 0x9144, + 0x9145, 0xC9E5, 0x9146, 0x9147, 0x9148, 0xC4BD, + 0x9149, 0x914A, 0x914B, 0x914C, 0x914D, 0x914E, + 0x914F, 0xEDAB, 0x9150, 0x9151, 0x9152, 0x9153, + 0xC2FD, 0x9154, 0x9155, 0x9156, 0x9157, 0xBBDB, + 0xBFAE, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, + 0x915D, 0x915E, 0xCEBF, 0x915F, 0x9160, 0x9161, + 0x9162, 0xE3BC, 0x9163, 0xBFB6, 0x9164, 0x9165, + 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, + 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, 0x9171, + 0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0xB1EF, + 0x9177, 0x9178, 0xD4F7, 0x9179, 0x917A, 0x917B, + 0x917C, 0x917D, 0xE3BE, 0x917E, 0x9180, 0x9181, + 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xEDAD, + 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, + 0x918D, 0x918E, 0x918F, 0xE3BF, 0xBAA9, 0xEDAC, + 0x9190, 0x9191, 0xE3BD, 0x9192, 0x9193, 0x9194, + 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, + 0x919B, 0xE3C0, 0x919C, 0x919D, 0x919E, 0x919F, + 0x91A0, 0x91A1, 0xBAB6, 0x91A2, 0x91A3, 0x91A4, + 0xB6AE, 0x91A5, 0x91A6, 0x91A7, 0x91A8, 0x91A9, + 0xD0B8, 0x91AA, 0xB0C3, 0xEDAE, 0x91AB, 0x91AC, + 0x91AD, 0x91AE, 0x91AF, 0xEDAF, 0xC0C1, 0x91B0, + 0xE3C1, 0x91B1, 0x91B2, 0x91B3, 0x91B4, 0x91B5, + 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BA, 0x91BB, + 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, + 0xC5B3, 0x91C2, 0x91C3, 0x91C4, 0x91C5, 0x91C6, + 0x91C7, 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, + 0x91CD, 0x91CE, 0x91CF, 0xE3C2, 0x91D0, 0x91D1, + 0x91D2, 0x91D3, 0x91D4, 0x91D5, 0x91D6, 0x91D7, + 0x91D8, 0xDCB2, 0x91D9, 0x91DA, 0x91DB, 0x91DC, + 0x91DD, 0x91DE, 0xEDB0, 0x91DF, 0xB8EA, 0x91E0, + 0xCEEC, 0xEAA7, 0xD0E7, 0xCAF9, 0xC8D6, 0xCFB7, + 0xB3C9, 0xCED2, 0xBDE4, 0x91E1, 0x91E2, 0xE3DE, + 0xBBF2, 0xEAA8, 0xD5BD, 0x91E3, 0xC6DD, 0xEAA9, + 0x91E4, 0x91E5, 0x91E6, 0xEAAA, 0x91E7, 0xEAAC, + 0xEAAB, 0x91E8, 0xEAAE, 0xEAAD, 0x91E9, 0x91EA, + 0x91EB, 0x91EC, 0xBDD8, 0x91ED, 0xEAAF, 0x91EE, + 0xC2BE, 0x91EF, 0x91F0, 0x91F1, 0x91F2, 0xB4C1, + 0xB4F7, 0x91F3, 0x91F4, 0xBBA7, 0x91F5, 0x91F6, + 0x91F7, 0x91F8, 0x91F9, 0xECE6, 0xECE5, 0xB7BF, + 0xCBF9, 0xB1E2, 0x91FA, 0xECE7, 0x91FB, 0x91FC, + 0x91FD, 0xC9C8, 0xECE8, 0xECE9, 0x91FE, 0xCAD6, + 0xDED0, 0xB2C5, 0xD4FA, 0x9240, 0x9241, 0xC6CB, + 0xB0C7, 0xB4F2, 0xC8D3, 0x9242, 0x9243, 0x9244, + 0xCDD0, 0x9245, 0x9246, 0xBFB8, 0x9247, 0x9248, + 0x9249, 0x924A, 0x924B, 0x924C, 0x924D, 0xBFDB, + 0x924E, 0x924F, 0xC7A4, 0xD6B4, 0x9250, 0xC0A9, + 0xDED1, 0xC9A8, 0xD1EF, 0xC5A4, 0xB0E7, 0xB3B6, + 0xC8C5, 0x9251, 0x9252, 0xB0E2, 0x9253, 0x9254, + 0xB7F6, 0x9255, 0x9256, 0xC5FA, 0x9257, 0x9258, + 0xB6F3, 0x9259, 0xD5D2, 0xB3D0, 0xBCBC, 0x925A, + 0x925B, 0x925C, 0xB3AD, 0x925D, 0x925E, 0x925F, + 0x9260, 0xBEF1, 0xB0D1, 0x9261, 0x9262, 0x9263, + 0x9264, 0x9265, 0x9266, 0xD2D6, 0xCAE3, 0xD7A5, + 0x9267, 0xCDB6, 0xB6B6, 0xBFB9, 0xD5DB, 0x9268, + 0xB8A7, 0xC5D7, 0x9269, 0x926A, 0x926B, 0xDED2, + 0xBFD9, 0xC2D5, 0xC7C0, 0x926C, 0xBBA4, 0xB1A8, + 0x926D, 0x926E, 0xC5EA, 0x926F, 0x9270, 0xC5FB, + 0xCCA7, 0x9271, 0x9272, 0x9273, 0x9274, 0xB1A7, + 0x9275, 0x9276, 0x9277, 0xB5D6, 0x9278, 0x9279, + 0x927A, 0xC4A8, 0x927B, 0xDED3, 0xD1BA, 0xB3E9, + 0x927C, 0xC3F2, 0x927D, 0x927E, 0xB7F7, 0x9280, + 0xD6F4, 0xB5A3, 0xB2F0, 0xC4B4, 0xC4E9, 0xC0AD, + 0xDED4, 0x9281, 0xB0E8, 0xC5C4, 0xC1E0, 0x9282, + 0xB9D5, 0x9283, 0xBEDC, 0xCDD8, 0xB0CE, 0x9284, + 0xCDCF, 0xDED6, 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, + 0xB0DD, 0x9285, 0x9286, 0xC4E2, 0x9287, 0x9288, + 0xC2A3, 0xBCF0, 0x9289, 0xD3B5, 0xC0B9, 0xC5A1, + 0xB2A6, 0xD4F1, 0x928A, 0x928B, 0xC0A8, 0xCAC3, + 0xDED7, 0xD5FC, 0x928C, 0xB9B0, 0x928D, 0xC8AD, + 0xCBA9, 0x928E, 0xDED9, 0xBFBD, 0x928F, 0x9290, + 0x9291, 0x9292, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3, + 0x9293, 0xB3D6, 0xB9D2, 0x9294, 0x9295, 0x9296, + 0x9297, 0xD6B8, 0xEAFC, 0xB0B4, 0x9298, 0x9299, + 0x929A, 0x929B, 0xBFE6, 0x929C, 0x929D, 0xCCF4, + 0x929E, 0x929F, 0x92A0, 0x92A1, 0xCDDA, 0x92A2, + 0x92A3, 0x92A4, 0xD6BF, 0xC2CE, 0x92A5, 0xCECE, + 0xCCA2, 0xD0AE, 0xC4D3, 0xB5B2, 0xDED8, 0xD5F5, + 0xBCB7, 0xBBD3, 0x92A6, 0x92A7, 0xB0A4, 0x92A8, + 0xC5B2, 0xB4EC, 0x92A9, 0x92AA, 0x92AB, 0xD5F1, + 0x92AC, 0x92AD, 0xEAFD, 0x92AE, 0x92AF, 0x92B0, + 0x92B1, 0x92B2, 0x92B3, 0xDEDA, 0xCDA6, 0x92B4, + 0x92B5, 0xCDEC, 0x92B6, 0x92B7, 0x92B8, 0x92B9, + 0xCEE6, 0xDEDC, 0x92BA, 0xCDB1, 0xC0A6, 0x92BB, + 0x92BC, 0xD7BD, 0x92BD, 0xDEDB, 0xB0C6, 0xBAB4, + 0xC9D3, 0xC4F3, 0xBEE8, 0x92BE, 0x92BF, 0x92C0, + 0x92C1, 0xB2B6, 0x92C2, 0x92C3, 0x92C4, 0x92C5, + 0x92C6, 0x92C7, 0x92C8, 0x92C9, 0xC0CC, 0xCBF0, + 0x92CA, 0xBCF1, 0xBBBB, 0xB5B7, 0x92CB, 0x92CC, + 0x92CD, 0xC5F5, 0x92CE, 0xDEE6, 0x92CF, 0x92D0, + 0x92D1, 0xDEE3, 0xBEDD, 0x92D2, 0x92D3, 0xDEDF, + 0x92D4, 0x92D5, 0x92D6, 0x92D7, 0xB4B7, 0xBDDD, + 0x92D8, 0x92D9, 0xDEE0, 0xC4ED, 0x92DA, 0x92DB, + 0x92DC, 0x92DD, 0xCFC6, 0x92DE, 0xB5E0, 0x92DF, + 0x92E0, 0x92E1, 0x92E2, 0xB6DE, 0xCADA, 0xB5F4, + 0xDEE5, 0x92E3, 0xD5C6, 0x92E4, 0xDEE1, 0xCCCD, + 0xC6FE, 0x92E5, 0xC5C5, 0x92E6, 0x92E7, 0x92E8, + 0xD2B4, 0x92E9, 0xBEF2, 0x92EA, 0x92EB, 0x92EC, + 0x92ED, 0x92EE, 0x92EF, 0x92F0, 0xC2D3, 0x92F1, + 0xCCBD, 0xB3B8, 0x92F2, 0xBDD3, 0x92F3, 0xBFD8, + 0xCDC6, 0xD1DA, 0xB4EB, 0x92F4, 0xDEE4, 0xDEDD, + 0xDEE7, 0x92F5, 0xEAFE, 0x92F6, 0x92F7, 0xC2B0, + 0xDEE2, 0x92F8, 0x92F9, 0xD6C0, 0xB5A7, 0x92FA, + 0xB2F4, 0x92FB, 0xDEE8, 0x92FC, 0xDEF2, 0x92FD, + 0x92FE, 0x9340, 0x9341, 0x9342, 0xDEED, 0x9343, + 0xDEF1, 0x9344, 0x9345, 0xC8E0, 0x9346, 0x9347, + 0x9348, 0xD7E1, 0xDEEF, 0xC3E8, 0xCCE1, 0x9349, + 0xB2E5, 0x934A, 0x934B, 0x934C, 0xD2BE, 0x934D, + 0x934E, 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, + 0xDEEE, 0x9354, 0xDEEB, 0xCED5, 0x9355, 0xB4A7, + 0x9356, 0x9357, 0x9358, 0x9359, 0x935A, 0xBFAB, + 0xBEBE, 0x935B, 0x935C, 0xBDD2, 0x935D, 0x935E, + 0x935F, 0x9360, 0xDEE9, 0x9361, 0xD4AE, 0x9362, + 0xDEDE, 0x9363, 0xDEEA, 0x9364, 0x9365, 0x9366, + 0x9367, 0xC0BF, 0x9368, 0xDEEC, 0xB2F3, 0xB8E9, + 0xC2A7, 0x9369, 0x936A, 0xBDC1, 0x936B, 0x936C, + 0x936D, 0x936E, 0x936F, 0xDEF5, 0xDEF8, 0x9370, + 0x9371, 0xB2AB, 0xB4A4, 0x9372, 0x9373, 0xB4EA, + 0xC9A6, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, + 0x9379, 0xDEF6, 0xCBD1, 0x937A, 0xB8E3, 0x937B, + 0xDEF7, 0xDEFA, 0x937C, 0x937D, 0x937E, 0x9380, + 0xDEF9, 0x9381, 0x9382, 0x9383, 0xCCC2, 0x9384, + 0xB0E1, 0xB4EE, 0x9385, 0x9386, 0x9387, 0x9388, + 0x9389, 0x938A, 0xE5BA, 0x938B, 0x938C, 0x938D, + 0x938E, 0x938F, 0xD0AF, 0x9390, 0x9391, 0xB2EB, + 0x9392, 0xEBA1, 0x9393, 0xDEF4, 0x9394, 0x9395, + 0xC9E3, 0xDEF3, 0xB0DA, 0xD2A1, 0xB1F7, 0x9396, + 0xCCAF, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, + 0x939C, 0x939D, 0xDEF0, 0x939E, 0xCBA4, 0x939F, + 0x93A0, 0x93A1, 0xD5AA, 0x93A2, 0x93A3, 0x93A4, + 0x93A5, 0x93A6, 0xDEFB, 0x93A7, 0x93A8, 0x93A9, + 0x93AA, 0x93AB, 0x93AC, 0x93AD, 0x93AE, 0xB4DD, + 0x93AF, 0xC4A6, 0x93B0, 0x93B1, 0x93B2, 0xDEFD, + 0x93B3, 0x93B4, 0x93B5, 0x93B6, 0x93B7, 0x93B8, + 0x93B9, 0x93BA, 0x93BB, 0x93BC, 0xC3FE, 0xC4A1, + 0xDFA1, 0x93BD, 0x93BE, 0x93BF, 0x93C0, 0x93C1, + 0x93C2, 0x93C3, 0xC1CC, 0x93C4, 0xDEFC, 0xBEEF, + 0x93C5, 0xC6B2, 0x93C6, 0x93C7, 0x93C8, 0x93C9, + 0x93CA, 0x93CB, 0x93CC, 0x93CD, 0x93CE, 0xB3C5, + 0xC8F6, 0x93CF, 0x93D0, 0xCBBA, 0xDEFE, 0x93D1, + 0x93D2, 0xDFA4, 0x93D3, 0x93D4, 0x93D5, 0x93D6, + 0xD7B2, 0x93D7, 0x93D8, 0x93D9, 0x93DA, 0x93DB, + 0xB3B7, 0x93DC, 0x93DD, 0x93DE, 0x93DF, 0xC1C3, + 0x93E0, 0x93E1, 0xC7CB, 0xB2A5, 0xB4E9, 0x93E2, + 0xD7AB, 0x93E3, 0x93E4, 0x93E5, 0x93E6, 0xC4EC, + 0x93E7, 0xDFA2, 0xDFA3, 0x93E8, 0xDFA5, 0x93E9, + 0xBAB3, 0x93EA, 0x93EB, 0x93EC, 0xDFA6, 0x93ED, + 0xC0DE, 0x93EE, 0x93EF, 0xC9C3, 0x93F0, 0x93F1, + 0x93F2, 0x93F3, 0x93F4, 0x93F5, 0x93F6, 0xB2D9, + 0xC7E6, 0x93F7, 0xDFA7, 0x93F8, 0xC7DC, 0x93F9, + 0x93FA, 0x93FB, 0x93FC, 0xDFA8, 0xEBA2, 0x93FD, + 0x93FE, 0x9440, 0x9441, 0x9442, 0xCBD3, 0x9443, + 0x9444, 0x9445, 0xDFAA, 0x9446, 0xDFA9, 0x9447, + 0xB2C1, 0x9448, 0x9449, 0x944A, 0x944B, 0x944C, + 0x944D, 0x944E, 0x944F, 0x9450, 0x9451, 0x9452, + 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, + 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E, + 0x945F, 0x9460, 0xC5CA, 0x9461, 0x9462, 0x9463, + 0x9464, 0x9465, 0x9466, 0x9467, 0x9468, 0xDFAB, + 0x9469, 0x946A, 0x946B, 0x946C, 0x946D, 0x946E, + 0x946F, 0x9470, 0xD4DC, 0x9471, 0x9472, 0x9473, + 0x9474, 0x9475, 0xC8C1, 0x9476, 0x9477, 0x9478, + 0x9479, 0x947A, 0x947B, 0x947C, 0x947D, 0x947E, + 0x9480, 0x9481, 0x9482, 0xDFAC, 0x9483, 0x9484, + 0x9485, 0x9486, 0x9487, 0xBEF0, 0x9488, 0x9489, + 0xDFAD, 0xD6A7, 0x948A, 0x948B, 0x948C, 0x948D, + 0xEAB7, 0xEBB6, 0xCAD5, 0x948E, 0xD8FC, 0xB8C4, + 0x948F, 0xB9A5, 0x9490, 0x9491, 0xB7C5, 0xD5FE, + 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xB9CA, + 0x9497, 0x9498, 0xD0A7, 0xF4CD, 0x9499, 0x949A, + 0xB5D0, 0x949B, 0x949C, 0xC3F4, 0x949D, 0xBEC8, + 0x949E, 0x949F, 0x94A0, 0xEBB7, 0xB0BD, 0x94A1, + 0x94A2, 0xBDCC, 0x94A3, 0xC1B2, 0x94A4, 0xB1D6, + 0xB3A8, 0x94A5, 0x94A6, 0x94A7, 0xB8D2, 0xC9A2, + 0x94A8, 0x94A9, 0xB6D8, 0x94AA, 0x94AB, 0x94AC, + 0x94AD, 0xEBB8, 0xBEB4, 0x94AE, 0x94AF, 0x94B0, + 0xCAFD, 0x94B1, 0xC7C3, 0x94B2, 0xD5FB, 0x94B3, + 0x94B4, 0xB7F3, 0x94B5, 0x94B6, 0x94B7, 0x94B8, + 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD, 0x94BE, + 0x94BF, 0x94C0, 0x94C1, 0x94C2, 0x94C3, 0xCEC4, + 0x94C4, 0x94C5, 0x94C6, 0xD5AB, 0xB1F3, 0x94C7, + 0x94C8, 0x94C9, 0xECB3, 0xB0DF, 0x94CA, 0xECB5, + 0x94CB, 0x94CC, 0x94CD, 0xB6B7, 0x94CE, 0xC1CF, + 0x94CF, 0xF5FA, 0xD0B1, 0x94D0, 0x94D1, 0xD5E5, + 0x94D2, 0xCED3, 0x94D3, 0x94D4, 0xBDEF, 0xB3E2, + 0x94D5, 0xB8AB, 0x94D6, 0xD5B6, 0x94D7, 0xEDBD, + 0x94D8, 0xB6CF, 0x94D9, 0xCBB9, 0xD0C2, 0x94DA, + 0x94DB, 0x94DC, 0x94DD, 0x94DE, 0x94DF, 0x94E0, + 0x94E1, 0xB7BD, 0x94E2, 0x94E3, 0xECB6, 0xCAA9, + 0x94E4, 0x94E5, 0x94E6, 0xC5D4, 0x94E7, 0xECB9, + 0xECB8, 0xC2C3, 0xECB7, 0x94E8, 0x94E9, 0x94EA, + 0x94EB, 0xD0FD, 0xECBA, 0x94EC, 0xECBB, 0xD7E5, + 0x94ED, 0x94EE, 0xECBC, 0x94EF, 0x94F0, 0x94F1, + 0xECBD, 0xC6EC, 0x94F2, 0x94F3, 0x94F4, 0x94F5, + 0x94F6, 0x94F7, 0x94F8, 0x94F9, 0xCEDE, 0x94FA, + 0xBCC8, 0x94FB, 0x94FC, 0xC8D5, 0xB5A9, 0xBEC9, + 0xD6BC, 0xD4E7, 0x94FD, 0x94FE, 0xD1AE, 0xD0F1, + 0xEAB8, 0xEAB9, 0xEABA, 0xBAB5, 0x9540, 0x9541, + 0x9542, 0x9543, 0xCAB1, 0xBFF5, 0x9544, 0x9545, + 0xCDFA, 0x9546, 0x9547, 0x9548, 0x9549, 0x954A, + 0xEAC0, 0x954B, 0xB0BA, 0xEABE, 0x954C, 0x954D, + 0xC0A5, 0x954E, 0x954F, 0x9550, 0xEABB, 0x9551, + 0xB2FD, 0x9552, 0xC3F7, 0xBBE8, 0x9553, 0x9554, + 0x9555, 0xD2D7, 0xCEF4, 0xEABF, 0x9556, 0x9557, + 0x9558, 0xEABC, 0x9559, 0x955A, 0x955B, 0xEAC3, + 0x955C, 0xD0C7, 0xD3B3, 0x955D, 0x955E, 0x955F, + 0x9560, 0xB4BA, 0x9561, 0xC3C1, 0xD7F2, 0x9562, + 0x9563, 0x9564, 0x9565, 0xD5D1, 0x9566, 0xCAC7, + 0x9567, 0xEAC5, 0x9568, 0x9569, 0xEAC4, 0xEAC7, + 0xEAC6, 0x956A, 0x956B, 0x956C, 0x956D, 0x956E, + 0xD6E7, 0x956F, 0xCFD4, 0x9570, 0x9571, 0xEACB, + 0x9572, 0xBBCE, 0x9573, 0x9574, 0x9575, 0x9576, + 0x9577, 0x9578, 0x9579, 0xBDFA, 0xC9CE, 0x957A, + 0x957B, 0xEACC, 0x957C, 0x957D, 0xC9B9, 0xCFFE, + 0xEACA, 0xD4CE, 0xEACD, 0xEACF, 0x957E, 0x9580, + 0xCDED, 0x9581, 0x9582, 0x9583, 0x9584, 0xEAC9, + 0x9585, 0xEACE, 0x9586, 0x9587, 0xCEEE, 0x9588, + 0xBBDE, 0x9589, 0xB3BF, 0x958A, 0x958B, 0x958C, + 0x958D, 0x958E, 0xC6D5, 0xBEB0, 0xCEFA, 0x958F, + 0x9590, 0x9591, 0xC7E7, 0x9592, 0xBEA7, 0xEAD0, + 0x9593, 0x9594, 0xD6C7, 0x9595, 0x9596, 0x9597, + 0xC1C0, 0x9598, 0x9599, 0x959A, 0xD4DD, 0x959B, + 0xEAD1, 0x959C, 0x959D, 0xCFBE, 0x959E, 0x959F, + 0x95A0, 0x95A1, 0xEAD2, 0x95A2, 0x95A3, 0x95A4, + 0x95A5, 0xCAEE, 0x95A6, 0x95A7, 0x95A8, 0x95A9, + 0xC5AF, 0xB0B5, 0x95AA, 0x95AB, 0x95AC, 0x95AD, + 0x95AE, 0xEAD4, 0x95AF, 0x95B0, 0x95B1, 0x95B2, + 0x95B3, 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0xEAD3, + 0xF4DF, 0x95B8, 0x95B9, 0x95BA, 0x95BB, 0x95BC, + 0xC4BA, 0x95BD, 0x95BE, 0x95BF, 0x95C0, 0x95C1, + 0xB1A9, 0x95C2, 0x95C3, 0x95C4, 0x95C5, 0xE5DF, + 0x95C6, 0x95C7, 0x95C8, 0x95C9, 0xEAD5, 0x95CA, + 0x95CB, 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, + 0x95D1, 0x95D2, 0x95D3, 0x95D4, 0x95D5, 0x95D6, + 0x95D7, 0x95D8, 0x95D9, 0x95DA, 0x95DB, 0x95DC, + 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, 0x95E2, + 0x95E3, 0xCAEF, 0x95E4, 0xEAD6, 0xEAD7, 0xC6D8, + 0x95E5, 0x95E6, 0x95E7, 0x95E8, 0x95E9, 0x95EA, + 0x95EB, 0x95EC, 0xEAD8, 0x95ED, 0x95EE, 0xEAD9, + 0x95EF, 0x95F0, 0x95F1, 0x95F2, 0x95F3, 0x95F4, + 0xD4BB, 0x95F5, 0xC7FA, 0xD2B7, 0xB8FC, 0x95F6, + 0x95F7, 0xEAC2, 0x95F8, 0xB2DC, 0x95F9, 0x95FA, + 0xC2FC, 0x95FB, 0xD4F8, 0xCCE6, 0xD7EE, 0x95FC, + 0x95FD, 0x95FE, 0x9640, 0x9641, 0x9642, 0x9643, + 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0x9644, 0xB7FE, + 0x9645, 0x9646, 0xEBD4, 0x9647, 0x9648, 0x9649, + 0xCBB7, 0xEBDE, 0x964A, 0xC0CA, 0x964B, 0x964C, + 0x964D, 0xCDFB, 0x964E, 0xB3AF, 0x964F, 0xC6DA, + 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, + 0xEBFC, 0x9656, 0xC4BE, 0x9657, 0xCEB4, 0xC4A9, + 0xB1BE, 0xD4FD, 0x9658, 0xCAF5, 0x9659, 0xD6EC, + 0x965A, 0x965B, 0xC6D3, 0xB6E4, 0x965C, 0x965D, + 0x965E, 0x965F, 0xBBFA, 0x9660, 0x9661, 0xD0E0, + 0x9662, 0x9663, 0xC9B1, 0x9664, 0xD4D3, 0xC8A8, + 0x9665, 0x9666, 0xB8CB, 0x9667, 0xE8BE, 0xC9BC, + 0x9668, 0x9669, 0xE8BB, 0x966A, 0xC0EE, 0xD0D3, + 0xB2C4, 0xB4E5, 0x966B, 0xE8BC, 0x966C, 0x966D, + 0xD5C8, 0x966E, 0x966F, 0x9670, 0x9671, 0x9672, + 0xB6C5, 0x9673, 0xE8BD, 0xCAF8, 0xB8DC, 0xCCF5, + 0x9674, 0x9675, 0x9676, 0xC0B4, 0x9677, 0x9678, + 0xD1EE, 0xE8BF, 0xE8C2, 0x9679, 0x967A, 0xBABC, + 0x967B, 0xB1AD, 0xBDDC, 0x967C, 0xEABD, 0xE8C3, + 0x967D, 0xE8C6, 0x967E, 0xE8CB, 0x9680, 0x9681, + 0x9682, 0x9683, 0xE8CC, 0x9684, 0xCBC9, 0xB0E5, + 0x9685, 0xBCAB, 0x9686, 0x9687, 0xB9B9, 0x9688, + 0x9689, 0xE8C1, 0x968A, 0xCDF7, 0x968B, 0xE8CA, + 0x968C, 0x968D, 0x968E, 0x968F, 0xCEF6, 0x9690, + 0x9691, 0x9692, 0x9693, 0xD5ED, 0x9694, 0xC1D6, + 0xE8C4, 0x9695, 0xC3B6, 0x9696, 0xB9FB, 0xD6A6, + 0xE8C8, 0x9697, 0x9698, 0x9699, 0xCAE0, 0xD4E6, + 0x969A, 0xE8C0, 0x969B, 0xE8C5, 0xE8C7, 0x969C, + 0xC7B9, 0xB7E3, 0x969D, 0xE8C9, 0x969E, 0xBFDD, + 0xE8D2, 0x969F, 0x96A0, 0xE8D7, 0x96A1, 0xE8D5, + 0xBCDC, 0xBCCF, 0xE8DB, 0x96A2, 0x96A3, 0x96A4, + 0x96A5, 0x96A6, 0x96A7, 0x96A8, 0x96A9, 0xE8DE, + 0x96AA, 0xE8DA, 0xB1FA, 0x96AB, 0x96AC, 0x96AD, + 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B2, 0x96B3, + 0x96B4, 0xB0D8, 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, + 0xC8E1, 0x96B5, 0x96B6, 0x96B7, 0xE8CF, 0xE8D4, + 0xE8D6, 0x96B8, 0xB9F1, 0xE8D8, 0xD7F5, 0x96B9, + 0xC4FB, 0x96BA, 0xE8DC, 0x96BB, 0x96BC, 0xB2E9, + 0x96BD, 0x96BE, 0x96BF, 0xE8D1, 0x96C0, 0x96C1, + 0xBCED, 0x96C2, 0x96C3, 0xBFC2, 0xE8CD, 0xD6F9, + 0x96C4, 0xC1F8, 0xB2F1, 0x96C5, 0x96C6, 0x96C7, + 0x96C8, 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0xE8DF, + 0x96CD, 0xCAC1, 0xE8D9, 0x96CE, 0x96CF, 0x96D0, + 0x96D1, 0xD5A4, 0x96D2, 0xB1EA, 0xD5BB, 0xE8CE, + 0xE8D0, 0xB6B0, 0xE8D3, 0x96D3, 0xE8DD, 0xC0B8, + 0x96D4, 0xCAF7, 0x96D5, 0xCBA8, 0x96D6, 0x96D7, + 0xC6DC, 0xC0F5, 0x96D8, 0x96D9, 0x96DA, 0x96DB, + 0x96DC, 0xE8E9, 0x96DD, 0x96DE, 0x96DF, 0xD0A3, + 0x96E0, 0x96E1, 0x96E2, 0x96E3, 0x96E4, 0x96E5, + 0x96E6, 0xE8F2, 0xD6EA, 0x96E7, 0x96E8, 0x96E9, + 0x96EA, 0x96EB, 0x96EC, 0x96ED, 0xE8E0, 0xE8E1, + 0x96EE, 0x96EF, 0x96F0, 0xD1F9, 0xBACB, 0xB8F9, + 0x96F1, 0x96F2, 0xB8F1, 0xD4D4, 0xE8EF, 0x96F3, + 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, + 0xBFF2, 0x96F4, 0xB0B8, 0xE8F1, 0xE8F0, 0x96F5, + 0xD7C0, 0x96F6, 0xE8E4, 0x96F7, 0xCDA9, 0xC9A3, + 0x96F8, 0xBBB8, 0xBDDB, 0xE8EA, 0x96F9, 0x96FA, + 0x96FB, 0x96FC, 0x96FD, 0x96FE, 0x9740, 0x9741, + 0x9742, 0x9743, 0xE8E2, 0xE8E3, 0xE8E5, 0xB5B5, + 0xE8E7, 0xC7C5, 0xE8EB, 0xE8ED, 0xBDB0, 0xD7AE, + 0x9744, 0xE8F8, 0x9745, 0x9746, 0x9747, 0x9748, + 0x9749, 0x974A, 0x974B, 0x974C, 0xE8F5, 0x974D, + 0xCDB0, 0xE8F6, 0x974E, 0x974F, 0x9750, 0x9751, + 0x9752, 0x9753, 0x9754, 0x9755, 0x9756, 0xC1BA, + 0x9757, 0xE8E8, 0x9758, 0xC3B7, 0xB0F0, 0x9759, + 0x975A, 0x975B, 0x975C, 0x975D, 0x975E, 0x975F, + 0x9760, 0xE8F4, 0x9761, 0x9762, 0x9763, 0xE8F7, + 0x9764, 0x9765, 0x9766, 0xB9A3, 0x9767, 0x9768, + 0x9769, 0x976A, 0x976B, 0x976C, 0x976D, 0x976E, + 0x976F, 0x9770, 0xC9D2, 0x9771, 0x9772, 0x9773, + 0xC3CE, 0xCEE0, 0xC0E6, 0x9774, 0x9775, 0x9776, + 0x9777, 0xCBF3, 0x9778, 0xCCDD, 0xD0B5, 0x9779, + 0x977A, 0xCAE1, 0x977B, 0xE8F3, 0x977C, 0x977D, + 0x977E, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, + 0x9785, 0x9786, 0xBCEC, 0x9787, 0xE8F9, 0x9788, + 0x9789, 0x978A, 0x978B, 0x978C, 0x978D, 0xC3DE, + 0x978E, 0xC6E5, 0x978F, 0xB9F7, 0x9790, 0x9791, + 0x9792, 0x9793, 0xB0F4, 0x9794, 0x9795, 0xD7D8, + 0x9796, 0x9797, 0xBCAC, 0x9798, 0xC5EF, 0x9799, + 0x979A, 0x979B, 0x979C, 0x979D, 0xCCC4, 0x979E, + 0x979F, 0xE9A6, 0x97A0, 0x97A1, 0x97A2, 0x97A3, + 0x97A4, 0x97A5, 0x97A6, 0x97A7, 0x97A8, 0x97A9, + 0xC9AD, 0x97AA, 0xE9A2, 0xC0E2, 0x97AB, 0x97AC, + 0x97AD, 0xBFC3, 0x97AE, 0x97AF, 0x97B0, 0xE8FE, + 0xB9D7, 0x97B1, 0xE8FB, 0x97B2, 0x97B3, 0x97B4, + 0x97B5, 0xE9A4, 0x97B6, 0x97B7, 0x97B8, 0xD2CE, + 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BD, 0xE9A3, + 0x97BE, 0xD6B2, 0xD7B5, 0x97BF, 0xE9A7, 0x97C0, + 0xBDB7, 0x97C1, 0x97C2, 0x97C3, 0x97C4, 0x97C5, + 0x97C6, 0x97C7, 0x97C8, 0x97C9, 0x97CA, 0x97CB, + 0x97CC, 0xE8FC, 0xE8FD, 0x97CD, 0x97CE, 0x97CF, + 0xE9A1, 0x97D0, 0x97D1, 0x97D2, 0x97D3, 0x97D4, + 0x97D5, 0x97D6, 0x97D7, 0xCDD6, 0x97D8, 0x97D9, + 0xD2AC, 0x97DA, 0x97DB, 0x97DC, 0xE9B2, 0x97DD, + 0x97DE, 0x97DF, 0x97E0, 0xE9A9, 0x97E1, 0x97E2, + 0x97E3, 0xB4AA, 0x97E4, 0xB4BB, 0x97E5, 0x97E6, + 0xE9AB, 0x97E7, 0x97E8, 0x97E9, 0x97EA, 0x97EB, + 0x97EC, 0x97ED, 0x97EE, 0x97EF, 0x97F0, 0x97F1, + 0x97F2, 0x97F3, 0x97F4, 0x97F5, 0x97F6, 0x97F7, + 0xD0A8, 0x97F8, 0x97F9, 0xE9A5, 0x97FA, 0x97FB, + 0xB3FE, 0x97FC, 0x97FD, 0xE9AC, 0xC0E3, 0x97FE, + 0xE9AA, 0x9840, 0x9841, 0xE9B9, 0x9842, 0x9843, + 0xE9B8, 0x9844, 0x9845, 0x9846, 0x9847, 0xE9AE, + 0x9848, 0x9849, 0xE8FA, 0x984A, 0x984B, 0xE9A8, + 0x984C, 0x984D, 0x984E, 0x984F, 0x9850, 0xBFAC, + 0xE9B1, 0xE9BA, 0x9851, 0x9852, 0xC2A5, 0x9853, + 0x9854, 0x9855, 0xE9AF, 0x9856, 0xB8C5, 0x9857, + 0xE9AD, 0x9858, 0xD3DC, 0xE9B4, 0xE9B5, 0xE9B7, + 0x9859, 0x985A, 0x985B, 0xE9C7, 0x985C, 0x985D, + 0x985E, 0x985F, 0x9860, 0x9861, 0xC0C6, 0xE9C5, + 0x9862, 0x9863, 0xE9B0, 0x9864, 0x9865, 0xE9BB, + 0xB0F1, 0x9866, 0x9867, 0x9868, 0x9869, 0x986A, + 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0xE9BC, + 0xD5A5, 0x9870, 0x9871, 0xE9BE, 0x9872, 0xE9BF, + 0x9873, 0x9874, 0x9875, 0xE9C1, 0x9876, 0x9877, + 0xC1F1, 0x9878, 0x9879, 0xC8B6, 0x987A, 0x987B, + 0x987C, 0xE9BD, 0x987D, 0x987E, 0x9880, 0x9881, + 0x9882, 0xE9C2, 0x9883, 0x9884, 0x9885, 0x9886, + 0x9887, 0x9888, 0x9889, 0x988A, 0xE9C3, 0x988B, + 0xE9B3, 0x988C, 0xE9B6, 0x988D, 0xBBB1, 0x988E, + 0x988F, 0x9890, 0xE9C0, 0x9891, 0x9892, 0x9893, + 0x9894, 0x9895, 0x9896, 0xBCF7, 0x9897, 0x9898, + 0x9899, 0xE9C4, 0xE9C6, 0x989A, 0x989B, 0x989C, + 0x989D, 0x989E, 0x989F, 0x98A0, 0x98A1, 0x98A2, + 0x98A3, 0x98A4, 0x98A5, 0xE9CA, 0x98A6, 0x98A7, + 0x98A8, 0x98A9, 0xE9CE, 0x98AA, 0x98AB, 0x98AC, + 0x98AD, 0x98AE, 0x98AF, 0x98B0, 0x98B1, 0x98B2, + 0x98B3, 0xB2DB, 0x98B4, 0xE9C8, 0x98B5, 0x98B6, + 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, 0x98BC, + 0x98BD, 0x98BE, 0xB7AE, 0x98BF, 0x98C0, 0x98C1, + 0x98C2, 0x98C3, 0x98C4, 0x98C5, 0x98C6, 0x98C7, + 0x98C8, 0x98C9, 0x98CA, 0xE9CB, 0xE9CC, 0x98CB, + 0x98CC, 0x98CD, 0x98CE, 0x98CF, 0x98D0, 0xD5C1, + 0x98D1, 0xC4A3, 0x98D2, 0x98D3, 0x98D4, 0x98D5, + 0x98D6, 0x98D7, 0xE9D8, 0x98D8, 0xBAE1, 0x98D9, + 0x98DA, 0x98DB, 0x98DC, 0xE9C9, 0x98DD, 0xD3A3, + 0x98DE, 0x98DF, 0x98E0, 0xE9D4, 0x98E1, 0x98E2, + 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98E7, 0xE9D7, + 0xE9D0, 0x98E8, 0x98E9, 0x98EA, 0x98EB, 0x98EC, + 0xE9CF, 0x98ED, 0x98EE, 0xC7C1, 0x98EF, 0x98F0, + 0x98F1, 0x98F2, 0x98F3, 0x98F4, 0x98F5, 0x98F6, + 0xE9D2, 0x98F7, 0x98F8, 0x98F9, 0x98FA, 0x98FB, + 0x98FC, 0x98FD, 0xE9D9, 0xB3C8, 0x98FE, 0xE9D3, + 0x9940, 0x9941, 0x9942, 0x9943, 0x9944, 0xCFF0, + 0x9945, 0x9946, 0x9947, 0xE9CD, 0x9948, 0x9949, + 0x994A, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, + 0x9950, 0x9951, 0x9952, 0xB3F7, 0x9953, 0x9954, + 0x9955, 0x9956, 0x9957, 0x9958, 0x9959, 0xE9D6, + 0x995A, 0x995B, 0xE9DA, 0x995C, 0x995D, 0x995E, + 0xCCB4, 0x995F, 0x9960, 0x9961, 0xCFAD, 0x9962, + 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, + 0x9969, 0x996A, 0xE9D5, 0x996B, 0xE9DC, 0xE9DB, + 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, 0xE9DE, + 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, + 0x9977, 0x9978, 0xE9D1, 0x9979, 0x997A, 0x997B, + 0x997C, 0x997D, 0x997E, 0x9980, 0x9981, 0xE9DD, + 0x9982, 0xE9DF, 0xC3CA, 0x9983, 0x9984, 0x9985, + 0x9986, 0x9987, 0x9988, 0x9989, 0x998A, 0x998B, + 0x998C, 0x998D, 0x998E, 0x998F, 0x9990, 0x9991, + 0x9992, 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, + 0x9998, 0x9999, 0x999A, 0x999B, 0x999C, 0x999D, + 0x999E, 0x999F, 0x99A0, 0x99A1, 0x99A2, 0x99A3, + 0x99A4, 0x99A5, 0x99A6, 0x99A7, 0x99A8, 0x99A9, + 0x99AA, 0x99AB, 0x99AC, 0x99AD, 0x99AE, 0x99AF, + 0x99B0, 0x99B1, 0x99B2, 0x99B3, 0x99B4, 0x99B5, + 0x99B6, 0x99B7, 0x99B8, 0x99B9, 0x99BA, 0x99BB, + 0x99BC, 0x99BD, 0x99BE, 0x99BF, 0x99C0, 0x99C1, + 0x99C2, 0x99C3, 0x99C4, 0x99C5, 0x99C6, 0x99C7, + 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, 0x99CD, + 0x99CE, 0x99CF, 0x99D0, 0x99D1, 0x99D2, 0x99D3, + 0x99D4, 0x99D5, 0x99D6, 0x99D7, 0x99D8, 0x99D9, + 0x99DA, 0x99DB, 0x99DC, 0x99DD, 0x99DE, 0x99DF, + 0x99E0, 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, + 0x99E6, 0x99E7, 0x99E8, 0x99E9, 0x99EA, 0x99EB, + 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0x99F0, 0x99F1, + 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0xC7B7, 0xB4CE, + 0xBBB6, 0xD0C0, 0xECA3, 0x99F6, 0x99F7, 0xC5B7, + 0x99F8, 0x99F9, 0x99FA, 0x99FB, 0x99FC, 0x99FD, + 0x99FE, 0x9A40, 0x9A41, 0x9A42, 0xD3FB, 0x9A43, + 0x9A44, 0x9A45, 0x9A46, 0xECA4, 0x9A47, 0xECA5, + 0xC6DB, 0x9A48, 0x9A49, 0x9A4A, 0xBFEE, 0x9A4B, + 0x9A4C, 0x9A4D, 0x9A4E, 0xECA6, 0x9A4F, 0x9A50, + 0xECA7, 0xD0AA, 0x9A51, 0xC7B8, 0x9A52, 0x9A53, + 0xB8E8, 0x9A54, 0x9A55, 0x9A56, 0x9A57, 0x9A58, + 0x9A59, 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, 0x9A5E, + 0x9A5F, 0xECA8, 0x9A60, 0x9A61, 0x9A62, 0x9A63, + 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0xD6B9, 0xD5FD, + 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, 0x9A68, 0x9A69, + 0xCDE1, 0x9A6A, 0x9A6B, 0x9A6C, 0x9A6D, 0x9A6E, + 0x9A6F, 0x9A70, 0x9A71, 0x9A72, 0x9A73, 0x9A74, + 0x9A75, 0x9A76, 0x9A77, 0xB4F5, 0x9A78, 0xCBC0, + 0xBCDF, 0x9A79, 0x9A7A, 0x9A7B, 0x9A7C, 0xE9E2, + 0xE9E3, 0xD1EA, 0xE9E5, 0x9A7D, 0xB4F9, 0xE9E4, + 0x9A7E, 0xD1B3, 0xCAE2, 0xB2D0, 0x9A80, 0xE9E8, + 0x9A81, 0x9A82, 0x9A83, 0x9A84, 0xE9E6, 0xE9E7, + 0x9A85, 0x9A86, 0xD6B3, 0x9A87, 0x9A88, 0x9A89, + 0xE9E9, 0xE9EA, 0x9A8A, 0x9A8B, 0x9A8C, 0x9A8D, + 0x9A8E, 0xE9EB, 0x9A8F, 0x9A90, 0x9A91, 0x9A92, + 0x9A93, 0x9A94, 0x9A95, 0x9A96, 0xE9EC, 0x9A97, + 0x9A98, 0x9A99, 0x9A9A, 0x9A9B, 0x9A9C, 0x9A9D, + 0x9A9E, 0xECAF, 0xC5B9, 0xB6CE, 0x9A9F, 0xD2F3, + 0x9AA0, 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, + 0x9AA6, 0xB5EE, 0x9AA7, 0xBBD9, 0xECB1, 0x9AA8, + 0x9AA9, 0xD2E3, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, + 0x9AAE, 0xCEE3, 0x9AAF, 0xC4B8, 0x9AB0, 0xC3BF, + 0x9AB1, 0x9AB2, 0xB6BE, 0xD8B9, 0xB1C8, 0xB1CF, + 0xB1D1, 0xC5FE, 0x9AB3, 0xB1D0, 0x9AB4, 0xC3AB, + 0x9AB5, 0x9AB6, 0x9AB7, 0x9AB8, 0x9AB9, 0xD5B1, + 0x9ABA, 0x9ABB, 0x9ABC, 0x9ABD, 0x9ABE, 0x9ABF, + 0x9AC0, 0x9AC1, 0xEBA4, 0xBAC1, 0x9AC2, 0x9AC3, + 0x9AC4, 0xCCBA, 0x9AC5, 0x9AC6, 0x9AC7, 0xEBA5, + 0x9AC8, 0xEBA7, 0x9AC9, 0x9ACA, 0x9ACB, 0xEBA8, + 0x9ACC, 0x9ACD, 0x9ACE, 0xEBA6, 0x9ACF, 0x9AD0, + 0x9AD1, 0x9AD2, 0x9AD3, 0x9AD4, 0x9AD5, 0xEBA9, + 0xEBAB, 0xEBAA, 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, + 0x9ADA, 0xEBAC, 0x9ADB, 0xCACF, 0xD8B5, 0xC3F1, + 0x9ADC, 0xC3A5, 0xC6F8, 0xEBAD, 0xC4CA, 0x9ADD, + 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0x9ADE, 0x9ADF, + 0x9AE0, 0xB7FA, 0x9AE1, 0xEBB1, 0xC7E2, 0x9AE2, + 0xEBB3, 0x9AE3, 0xBAA4, 0xD1F5, 0xB0B1, 0xEBB2, + 0xEBB4, 0x9AE4, 0x9AE5, 0x9AE6, 0xB5AA, 0xC2C8, + 0xC7E8, 0x9AE7, 0xEBB5, 0x9AE8, 0xCBAE, 0xE3DF, + 0x9AE9, 0x9AEA, 0xD3C0, 0x9AEB, 0x9AEC, 0x9AED, + 0x9AEE, 0xD9DB, 0x9AEF, 0x9AF0, 0xCDA1, 0xD6AD, + 0xC7F3, 0x9AF1, 0x9AF2, 0x9AF3, 0xD9E0, 0xBBE3, + 0x9AF4, 0xBABA, 0xE3E2, 0x9AF5, 0x9AF6, 0x9AF7, + 0x9AF8, 0x9AF9, 0xCFAB, 0x9AFA, 0x9AFB, 0x9AFC, + 0xE3E0, 0xC9C7, 0x9AFD, 0xBAB9, 0x9AFE, 0x9B40, + 0x9B41, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, + 0xB3D8, 0xCEDB, 0x9B42, 0x9B43, 0xCCC0, 0x9B44, + 0x9B45, 0x9B46, 0xE3E8, 0xE3E9, 0xCDF4, 0x9B47, + 0x9B48, 0x9B49, 0x9B4A, 0x9B4B, 0xCCAD, 0x9B4C, + 0xBCB3, 0x9B4D, 0xE3EA, 0x9B4E, 0xE3EB, 0x9B4F, + 0x9B50, 0xD0DA, 0x9B51, 0x9B52, 0x9B53, 0xC6FB, + 0xB7DA, 0x9B54, 0x9B55, 0xC7DF, 0xD2CA, 0xCED6, + 0x9B56, 0xE3E4, 0xE3EC, 0x9B57, 0xC9F2, 0xB3C1, + 0x9B58, 0x9B59, 0xE3E7, 0x9B5A, 0x9B5B, 0xC6E3, + 0xE3E5, 0x9B5C, 0x9B5D, 0xEDB3, 0xE3E6, 0x9B5E, + 0x9B5F, 0x9B60, 0x9B61, 0xC9B3, 0x9B62, 0xC5E6, + 0x9B63, 0x9B64, 0x9B65, 0xB9B5, 0x9B66, 0xC3BB, + 0x9B67, 0xE3E3, 0xC5BD, 0xC1A4, 0xC2D9, 0xB2D7, + 0x9B68, 0xE3ED, 0xBBA6, 0xC4AD, 0x9B69, 0xE3F0, + 0xBEDA, 0x9B6A, 0x9B6B, 0xE3FB, 0xE3F5, 0xBAD3, + 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, 0xB7D0, 0xD3CD, + 0x9B70, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, + 0x9B71, 0x9B72, 0x9B73, 0x9B74, 0xD0B9, 0xC7F6, + 0x9B75, 0x9B76, 0x9B77, 0xC8AA, 0xB2B4, 0x9B78, + 0xC3DA, 0x9B79, 0x9B7A, 0x9B7B, 0xE3EE, 0x9B7C, + 0x9B7D, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, + 0x9B7E, 0x9B80, 0x9B81, 0xB7BA, 0x9B82, 0x9B83, + 0xC5A2, 0x9B84, 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, + 0x9B85, 0xC4E0, 0x9B86, 0x9B87, 0xD7A2, 0x9B88, + 0xC0E1, 0xE3F9, 0x9B89, 0x9B8A, 0xE3FA, 0xE3FD, + 0xCCA9, 0xE3F3, 0x9B8B, 0xD3BE, 0x9B8C, 0xB1C3, + 0xEDB4, 0xE3F1, 0xE3F2, 0x9B8D, 0xE3F8, 0xD0BA, + 0xC6C3, 0xD4F3, 0xE3FE, 0x9B8E, 0x9B8F, 0xBDE0, + 0x9B90, 0x9B91, 0xE4A7, 0x9B92, 0x9B93, 0xE4A6, + 0x9B94, 0x9B95, 0x9B96, 0xD1F3, 0xE4A3, 0x9B97, + 0xE4A9, 0x9B98, 0x9B99, 0x9B9A, 0xC8F7, 0x9B9B, + 0x9B9C, 0x9B9D, 0x9B9E, 0xCFB4, 0x9B9F, 0xE4A8, + 0xE4AE, 0xC2E5, 0x9BA0, 0x9BA1, 0xB6B4, 0x9BA2, + 0x9BA3, 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0xBDF2, + 0x9BA8, 0xE4A2, 0x9BA9, 0x9BAA, 0xBAE9, 0xE4AA, + 0x9BAB, 0x9BAC, 0xE4AC, 0x9BAD, 0x9BAE, 0xB6FD, + 0xD6DE, 0xE4B2, 0x9BAF, 0xE4AD, 0x9BB0, 0x9BB1, + 0x9BB2, 0xE4A1, 0x9BB3, 0xBBEE, 0xCDDD, 0xC7A2, + 0xC5C9, 0x9BB4, 0x9BB5, 0xC1F7, 0x9BB6, 0xE4A4, + 0x9BB7, 0xC7B3, 0xBDAC, 0xBDBD, 0xE4A5, 0x9BB8, + 0xD7C7, 0xB2E2, 0x9BB9, 0xE4AB, 0xBCC3, 0xE4AF, + 0x9BBA, 0xBBEB, 0xE4B0, 0xC5A8, 0xE4B1, 0x9BBB, + 0x9BBC, 0x9BBD, 0x9BBE, 0xD5E3, 0xBFA3, 0x9BBF, + 0xE4BA, 0x9BC0, 0xE4B7, 0x9BC1, 0xE4BB, 0x9BC2, + 0x9BC3, 0xE4BD, 0x9BC4, 0x9BC5, 0xC6D6, 0x9BC6, + 0x9BC7, 0xBAC6, 0xC0CB, 0x9BC8, 0x9BC9, 0x9BCA, + 0xB8A1, 0xE4B4, 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, + 0xD4A1, 0x9BCF, 0x9BD0, 0xBAA3, 0xBDFE, 0x9BD1, + 0x9BD2, 0x9BD3, 0xE4BC, 0x9BD4, 0x9BD5, 0x9BD6, + 0x9BD7, 0x9BD8, 0xCDBF, 0x9BD9, 0x9BDA, 0xC4F9, + 0x9BDB, 0x9BDC, 0xCFFB, 0xC9E6, 0x9BDD, 0x9BDE, + 0xD3BF, 0x9BDF, 0xCFD1, 0x9BE0, 0x9BE1, 0xE4B3, + 0x9BE2, 0xE4B8, 0xE4B9, 0xCCE9, 0x9BE3, 0x9BE4, + 0x9BE5, 0x9BE6, 0x9BE7, 0xCCCE, 0x9BE8, 0xC0D4, + 0xE4B5, 0xC1B0, 0xE4B6, 0xCED0, 0x9BE9, 0xBBC1, + 0xB5D3, 0x9BEA, 0xC8F3, 0xBDA7, 0xD5C7, 0xC9AC, + 0xB8A2, 0xE4CA, 0x9BEB, 0x9BEC, 0xE4CC, 0xD1C4, + 0x9BED, 0x9BEE, 0xD2BA, 0x9BEF, 0x9BF0, 0xBAAD, + 0x9BF1, 0x9BF2, 0xBAD4, 0x9BF3, 0x9BF4, 0x9BF5, + 0x9BF6, 0x9BF7, 0x9BF8, 0xE4C3, 0xB5ED, 0x9BF9, + 0x9BFA, 0x9BFB, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, + 0x9BFC, 0x9BFD, 0x9BFE, 0xC1DC, 0xCCCA, 0x9C40, + 0x9C41, 0x9C42, 0x9C43, 0xCAE7, 0x9C44, 0x9C45, + 0x9C46, 0x9C47, 0xC4D7, 0x9C48, 0xCCD4, 0xE4C8, + 0x9C49, 0x9C4A, 0x9C4B, 0xE4C7, 0xE4C1, 0x9C4C, + 0xE4C4, 0xB5AD, 0x9C4D, 0x9C4E, 0xD3D9, 0x9C4F, + 0xE4C6, 0x9C50, 0x9C51, 0x9C52, 0x9C53, 0xD2F9, + 0xB4E3, 0x9C54, 0xBBB4, 0x9C55, 0x9C56, 0xC9EE, + 0x9C57, 0xB4BE, 0x9C58, 0x9C59, 0x9C5A, 0xBBEC, + 0x9C5B, 0xD1CD, 0x9C5C, 0xCCED, 0xEDB5, 0x9C5D, + 0x9C5E, 0x9C5F, 0x9C60, 0x9C61, 0x9C62, 0x9C63, + 0x9C64, 0xC7E5, 0x9C65, 0x9C66, 0x9C67, 0x9C68, + 0xD4A8, 0x9C69, 0xE4CB, 0xD7D5, 0xE4C2, 0x9C6A, + 0xBDA5, 0xE4C5, 0x9C6B, 0x9C6C, 0xD3E6, 0x9C6D, + 0xE4C9, 0xC9F8, 0x9C6E, 0x9C6F, 0xE4BE, 0x9C70, + 0x9C71, 0xD3E5, 0x9C72, 0x9C73, 0xC7FE, 0xB6C9, + 0x9C74, 0xD4FC, 0xB2B3, 0xE4D7, 0x9C75, 0x9C76, + 0x9C77, 0xCEC2, 0x9C78, 0xE4CD, 0x9C79, 0xCEBC, + 0x9C7A, 0xB8DB, 0x9C7B, 0x9C7C, 0xE4D6, 0x9C7D, + 0xBFCA, 0x9C7E, 0x9C80, 0x9C81, 0xD3CE, 0x9C82, + 0xC3EC, 0x9C83, 0x9C84, 0x9C85, 0x9C86, 0x9C87, + 0x9C88, 0x9C89, 0x9C8A, 0xC5C8, 0xE4D8, 0x9C8B, + 0x9C8C, 0x9C8D, 0x9C8E, 0x9C8F, 0x9C90, 0x9C91, + 0x9C92, 0xCDC4, 0xE4CF, 0x9C93, 0x9C94, 0x9C95, + 0x9C96, 0xE4D4, 0xE4D5, 0x9C97, 0xBAFE, 0x9C98, + 0xCFE6, 0x9C99, 0x9C9A, 0xD5BF, 0x9C9B, 0x9C9C, + 0x9C9D, 0xE4D2, 0x9C9E, 0x9C9F, 0x9CA0, 0x9CA1, + 0x9CA2, 0x9CA3, 0x9CA4, 0x9CA5, 0x9CA6, 0x9CA7, + 0x9CA8, 0xE4D0, 0x9CA9, 0x9CAA, 0xE4CE, 0x9CAB, + 0x9CAC, 0x9CAD, 0x9CAE, 0x9CAF, 0x9CB0, 0x9CB1, + 0x9CB2, 0x9CB3, 0x9CB4, 0x9CB5, 0x9CB6, 0x9CB7, + 0x9CB8, 0x9CB9, 0xCDE5, 0xCAAA, 0x9CBA, 0x9CBB, + 0x9CBC, 0xC0A3, 0x9CBD, 0xBDA6, 0xE4D3, 0x9CBE, + 0x9CBF, 0xB8C8, 0x9CC0, 0x9CC1, 0x9CC2, 0x9CC3, + 0x9CC4, 0xE4E7, 0xD4B4, 0x9CC5, 0x9CC6, 0x9CC7, + 0x9CC8, 0x9CC9, 0x9CCA, 0x9CCB, 0xE4DB, 0x9CCC, + 0x9CCD, 0x9CCE, 0xC1EF, 0x9CCF, 0x9CD0, 0xE4E9, + 0x9CD1, 0x9CD2, 0xD2E7, 0x9CD3, 0x9CD4, 0xE4DF, + 0x9CD5, 0xE4E0, 0x9CD6, 0x9CD7, 0xCFAA, 0x9CD8, + 0x9CD9, 0x9CDA, 0x9CDB, 0xCBDD, 0x9CDC, 0xE4DA, + 0xE4D1, 0x9CDD, 0xE4E5, 0x9CDE, 0xC8DC, 0xE4E3, + 0x9CDF, 0x9CE0, 0xC4E7, 0xE4E2, 0x9CE1, 0xE4E1, + 0x9CE2, 0x9CE3, 0x9CE4, 0xB3FC, 0xE4E8, 0x9CE5, + 0x9CE6, 0x9CE7, 0x9CE8, 0xB5E1, 0x9CE9, 0x9CEA, + 0x9CEB, 0xD7CC, 0x9CEC, 0x9CED, 0x9CEE, 0xE4E6, + 0x9CEF, 0xBBAC, 0x9CF0, 0xD7D2, 0xCCCF, 0xEBF8, + 0x9CF1, 0xE4E4, 0x9CF2, 0x9CF3, 0xB9F6, 0x9CF4, + 0x9CF5, 0x9CF6, 0xD6CD, 0xE4D9, 0xE4DC, 0xC2FA, + 0xE4DE, 0x9CF7, 0xC2CB, 0xC0C4, 0xC2D0, 0x9CF8, + 0xB1F5, 0xCCB2, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, + 0x9CFD, 0x9CFE, 0x9D40, 0x9D41, 0x9D42, 0x9D43, + 0xB5CE, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0xE4EF, + 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, + 0x9D4E, 0x9D4F, 0xC6AF, 0x9D50, 0x9D51, 0x9D52, + 0xC6E1, 0x9D53, 0x9D54, 0xE4F5, 0x9D55, 0x9D56, + 0x9D57, 0x9D58, 0x9D59, 0xC2A9, 0x9D5A, 0x9D5B, + 0x9D5C, 0xC0EC, 0xD1DD, 0xE4EE, 0x9D5D, 0x9D5E, + 0x9D5F, 0x9D60, 0x9D61, 0x9D62, 0x9D63, 0x9D64, + 0x9D65, 0x9D66, 0xC4AE, 0x9D67, 0x9D68, 0x9D69, + 0xE4ED, 0x9D6A, 0x9D6B, 0x9D6C, 0x9D6D, 0xE4F6, + 0xE4F4, 0xC2FE, 0x9D6E, 0xE4DD, 0x9D6F, 0xE4F0, + 0x9D70, 0xCAFE, 0x9D71, 0xD5C4, 0x9D72, 0x9D73, + 0xE4F1, 0x9D74, 0x9D75, 0x9D76, 0x9D77, 0x9D78, + 0x9D79, 0x9D7A, 0xD1FA, 0x9D7B, 0x9D7C, 0x9D7D, + 0x9D7E, 0x9D80, 0x9D81, 0x9D82, 0xE4EB, 0xE4EC, + 0x9D83, 0x9D84, 0x9D85, 0xE4F2, 0x9D86, 0xCEAB, + 0x9D87, 0x9D88, 0x9D89, 0x9D8A, 0x9D8B, 0x9D8C, + 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, 0xC5CB, 0x9D91, + 0x9D92, 0x9D93, 0xC7B1, 0x9D94, 0xC2BA, 0x9D95, + 0x9D96, 0x9D97, 0xE4EA, 0x9D98, 0x9D99, 0x9D9A, + 0xC1CA, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, + 0x9DA0, 0xCCB6, 0xB3B1, 0x9DA1, 0x9DA2, 0x9DA3, + 0xE4FB, 0x9DA4, 0xE4F3, 0x9DA5, 0x9DA6, 0x9DA7, + 0xE4FA, 0x9DA8, 0xE4FD, 0x9DA9, 0xE4FC, 0x9DAA, + 0x9DAB, 0x9DAC, 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, + 0xB3CE, 0x9DB1, 0x9DB2, 0x9DB3, 0xB3BA, 0xE4F7, + 0x9DB4, 0x9DB5, 0xE4F9, 0xE4F8, 0xC5EC, 0x9DB6, + 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, 0x9DBC, + 0x9DBD, 0x9DBE, 0x9DBF, 0x9DC0, 0x9DC1, 0x9DC2, + 0xC0BD, 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0xD4E8, + 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, 0x9DCB, 0xE5A2, + 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, + 0x9DD2, 0x9DD3, 0x9DD4, 0x9DD5, 0x9DD6, 0xB0C4, + 0x9DD7, 0x9DD8, 0xE5A4, 0x9DD9, 0x9DDA, 0xE5A3, + 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, + 0xBCA4, 0x9DE1, 0xE5A5, 0x9DE2, 0x9DE3, 0x9DE4, + 0x9DE5, 0x9DE6, 0x9DE7, 0xE5A1, 0x9DE8, 0x9DE9, + 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0xE4FE, + 0xB1F4, 0x9DEF, 0x9DF0, 0x9DF1, 0x9DF2, 0x9DF3, + 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, + 0xE5A8, 0x9DFA, 0xE5A9, 0xE5A6, 0x9DFB, 0x9DFC, + 0x9DFD, 0x9DFE, 0x9E40, 0x9E41, 0x9E42, 0x9E43, + 0x9E44, 0x9E45, 0x9E46, 0x9E47, 0xE5A7, 0xE5AA, + 0x9E48, 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, + 0x9E4E, 0x9E4F, 0x9E50, 0x9E51, 0x9E52, 0x9E53, + 0x9E54, 0x9E55, 0x9E56, 0x9E57, 0x9E58, 0x9E59, + 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5D, 0x9E5E, 0x9E5F, + 0x9E60, 0x9E61, 0x9E62, 0x9E63, 0x9E64, 0x9E65, + 0x9E66, 0x9E67, 0x9E68, 0xC6D9, 0x9E69, 0x9E6A, + 0x9E6B, 0x9E6C, 0x9E6D, 0x9E6E, 0x9E6F, 0x9E70, + 0xE5AB, 0xE5AD, 0x9E71, 0x9E72, 0x9E73, 0x9E74, + 0x9E75, 0x9E76, 0x9E77, 0xE5AC, 0x9E78, 0x9E79, + 0x9E7A, 0x9E7B, 0x9E7C, 0x9E7D, 0x9E7E, 0x9E80, + 0x9E81, 0x9E82, 0x9E83, 0x9E84, 0x9E85, 0x9E86, + 0x9E87, 0x9E88, 0x9E89, 0xE5AF, 0x9E8A, 0x9E8B, + 0x9E8C, 0xE5AE, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, + 0x9E91, 0x9E92, 0x9E93, 0x9E94, 0x9E95, 0x9E96, + 0x9E97, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, + 0x9E9D, 0x9E9E, 0xB9E0, 0x9E9F, 0x9EA0, 0xE5B0, + 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0x9EA6, + 0x9EA7, 0x9EA8, 0x9EA9, 0x9EAA, 0x9EAB, 0x9EAC, + 0x9EAD, 0x9EAE, 0xE5B1, 0x9EAF, 0x9EB0, 0x9EB1, + 0x9EB2, 0x9EB3, 0x9EB4, 0x9EB5, 0x9EB6, 0x9EB7, + 0x9EB8, 0x9EB9, 0x9EBA, 0xBBF0, 0xECE1, 0xC3F0, + 0x9EBB, 0xB5C6, 0xBBD2, 0x9EBC, 0x9EBD, 0x9EBE, + 0x9EBF, 0xC1E9, 0xD4EE, 0x9EC0, 0xBEC4, 0x9EC1, + 0x9EC2, 0x9EC3, 0xD7C6, 0x9EC4, 0xD4D6, 0xB2D3, + 0xECBE, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, 0xEAC1, + 0x9EC9, 0x9ECA, 0x9ECB, 0xC2AF, 0xB4B6, 0x9ECC, + 0x9ECD, 0x9ECE, 0xD1D7, 0x9ECF, 0x9ED0, 0x9ED1, + 0xB3B4, 0x9ED2, 0xC8B2, 0xBFBB, 0xECC0, 0x9ED3, + 0x9ED4, 0xD6CB, 0x9ED5, 0x9ED6, 0xECBF, 0xECC1, + 0x9ED7, 0x9ED8, 0x9ED9, 0x9EDA, 0x9EDB, 0x9EDC, + 0x9EDD, 0x9EDE, 0x9EDF, 0x9EE0, 0x9EE1, 0x9EE2, + 0x9EE3, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, + 0x9EE4, 0xECC6, 0x9EE5, 0xB1FE, 0x9EE6, 0x9EE7, + 0x9EE8, 0xECC4, 0xD5A8, 0xB5E3, 0x9EE9, 0xECC2, + 0xC1B6, 0xB3E3, 0x9EEA, 0x9EEB, 0xECC3, 0xCBB8, + 0xC0C3, 0xCCFE, 0x9EEC, 0x9EED, 0x9EEE, 0x9EEF, + 0xC1D2, 0x9EF0, 0xECC8, 0x9EF1, 0x9EF2, 0x9EF3, + 0x9EF4, 0x9EF5, 0x9EF6, 0x9EF7, 0x9EF8, 0x9EF9, + 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, 0xBAE6, 0xC0D3, + 0x9EFE, 0xD6F2, 0x9F40, 0x9F41, 0x9F42, 0xD1CC, + 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0xBFBE, 0x9F47, + 0xB7B3, 0xC9D5, 0xECC7, 0xBBE2, 0x9F48, 0xCCCC, + 0xBDFD, 0xC8C8, 0x9F49, 0xCFA9, 0x9F4A, 0x9F4B, + 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, 0xCDE9, + 0x9F51, 0xC5EB, 0x9F52, 0x9F53, 0x9F54, 0xB7E9, + 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F59, 0x9F5A, + 0x9F5B, 0x9F5C, 0x9F5D, 0x9F5E, 0x9F5F, 0xD1C9, + 0xBAB8, 0x9F60, 0x9F61, 0x9F62, 0x9F63, 0x9F64, + 0xECC9, 0x9F65, 0x9F66, 0xECCA, 0x9F67, 0xBBC0, + 0xECCB, 0x9F68, 0xECE2, 0xB1BA, 0xB7D9, 0x9F69, + 0x9F6A, 0x9F6B, 0x9F6C, 0x9F6D, 0x9F6E, 0x9F6F, + 0x9F70, 0x9F71, 0x9F72, 0x9F73, 0xBDB9, 0x9F74, + 0x9F75, 0x9F76, 0x9F77, 0x9F78, 0x9F79, 0x9F7A, + 0x9F7B, 0xECCC, 0xD1E6, 0xECCD, 0x9F7C, 0x9F7D, + 0x9F7E, 0x9F80, 0xC8BB, 0x9F81, 0x9F82, 0x9F83, + 0x9F84, 0x9F85, 0x9F86, 0x9F87, 0x9F88, 0x9F89, + 0x9F8A, 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0xECD1, + 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0xECD3, 0x9F93, + 0xBBCD, 0x9F94, 0xBCE5, 0x9F95, 0x9F96, 0x9F97, + 0x9F98, 0x9F99, 0x9F9A, 0x9F9B, 0x9F9C, 0x9F9D, + 0x9F9E, 0x9F9F, 0x9FA0, 0x9FA1, 0xECCF, 0x9FA2, + 0xC9B7, 0x9FA3, 0x9FA4, 0x9FA5, 0x9FA6, 0x9FA7, + 0xC3BA, 0x9FA8, 0xECE3, 0xD5D5, 0xECD0, 0x9FA9, + 0x9FAA, 0x9FAB, 0x9FAC, 0x9FAD, 0xD6F3, 0x9FAE, + 0x9FAF, 0x9FB0, 0xECD2, 0xECCE, 0x9FB1, 0x9FB2, + 0x9FB3, 0x9FB4, 0xECD4, 0x9FB5, 0xECD5, 0x9FB6, + 0x9FB7, 0xC9BF, 0x9FB8, 0x9FB9, 0x9FBA, 0x9FBB, + 0x9FBC, 0x9FBD, 0xCFA8, 0x9FBE, 0x9FBF, 0x9FC0, + 0x9FC1, 0x9FC2, 0xD0DC, 0x9FC3, 0x9FC4, 0x9FC5, + 0x9FC6, 0xD1AC, 0x9FC7, 0x9FC8, 0x9FC9, 0x9FCA, + 0xC8DB, 0x9FCB, 0x9FCC, 0x9FCD, 0xECD6, 0xCEF5, + 0x9FCE, 0x9FCF, 0x9FD0, 0x9FD1, 0x9FD2, 0xCAEC, + 0xECDA, 0x9FD3, 0x9FD4, 0x9FD5, 0x9FD6, 0x9FD7, + 0x9FD8, 0x9FD9, 0xECD9, 0x9FDA, 0x9FDB, 0x9FDC, + 0xB0BE, 0x9FDD, 0x9FDE, 0x9FDF, 0x9FE0, 0x9FE1, + 0x9FE2, 0xECD7, 0x9FE3, 0xECD8, 0x9FE4, 0x9FE5, + 0x9FE6, 0xECE4, 0x9FE7, 0x9FE8, 0x9FE9, 0x9FEA, + 0x9FEB, 0x9FEC, 0x9FED, 0x9FEE, 0x9FEF, 0xC8BC, + 0x9FF0, 0x9FF1, 0x9FF2, 0x9FF3, 0x9FF4, 0x9FF5, + 0x9FF6, 0x9FF7, 0x9FF8, 0x9FF9, 0xC1C7, 0x9FFA, + 0x9FFB, 0x9FFC, 0x9FFD, 0x9FFE, 0xECDC, 0xD1E0, + 0xA040, 0xA041, 0xA042, 0xA043, 0xA044, 0xA045, + 0xA046, 0xA047, 0xA048, 0xA049, 0xECDB, 0xA04A, + 0xA04B, 0xA04C, 0xA04D, 0xD4EF, 0xA04E, 0xECDD, + 0xA04F, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, + 0xDBC6, 0xA055, 0xA056, 0xA057, 0xA058, 0xA059, + 0xA05A, 0xA05B, 0xA05C, 0xA05D, 0xA05E, 0xECDE, + 0xA05F, 0xA060, 0xA061, 0xA062, 0xA063, 0xA064, + 0xA065, 0xA066, 0xA067, 0xA068, 0xA069, 0xA06A, + 0xB1AC, 0xA06B, 0xA06C, 0xA06D, 0xA06E, 0xA06F, + 0xA070, 0xA071, 0xA072, 0xA073, 0xA074, 0xA075, + 0xA076, 0xA077, 0xA078, 0xA079, 0xA07A, 0xA07B, + 0xA07C, 0xA07D, 0xA07E, 0xA080, 0xA081, 0xECDF, + 0xA082, 0xA083, 0xA084, 0xA085, 0xA086, 0xA087, + 0xA088, 0xA089, 0xA08A, 0xA08B, 0xECE0, 0xA08C, + 0xD7A6, 0xA08D, 0xC5C0, 0xA08E, 0xA08F, 0xA090, + 0xEBBC, 0xB0AE, 0xA091, 0xA092, 0xA093, 0xBEF4, + 0xB8B8, 0xD2AF, 0xB0D6, 0xB5F9, 0xA094, 0xD8B3, + 0xA095, 0xCBAC, 0xA096, 0xE3DD, 0xA097, 0xA098, + 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D, 0xC6AC, + 0xB0E6, 0xA09E, 0xA09F, 0xA0A0, 0xC5C6, 0xEBB9, + 0xA0A1, 0xA0A2, 0xA0A3, 0xA0A4, 0xEBBA, 0xA0A5, + 0xA0A6, 0xA0A7, 0xEBBB, 0xA0A8, 0xA0A9, 0xD1C0, + 0xA0AA, 0xC5A3, 0xA0AB, 0xEAF2, 0xA0AC, 0xC4B2, + 0xA0AD, 0xC4B5, 0xC0CE, 0xA0AE, 0xA0AF, 0xA0B0, + 0xEAF3, 0xC4C1, 0xA0B1, 0xCEEF, 0xA0B2, 0xA0B3, + 0xA0B4, 0xA0B5, 0xEAF0, 0xEAF4, 0xA0B6, 0xA0B7, + 0xC9FC, 0xA0B8, 0xA0B9, 0xC7A3, 0xA0BA, 0xA0BB, + 0xA0BC, 0xCCD8, 0xCEFE, 0xA0BD, 0xA0BE, 0xA0BF, + 0xEAF5, 0xEAF6, 0xCFAC, 0xC0E7, 0xA0C0, 0xA0C1, + 0xEAF7, 0xA0C2, 0xA0C3, 0xA0C4, 0xA0C5, 0xA0C6, + 0xB6BF, 0xEAF8, 0xA0C7, 0xEAF9, 0xA0C8, 0xEAFA, + 0xA0C9, 0xA0CA, 0xEAFB, 0xA0CB, 0xA0CC, 0xA0CD, + 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, + 0xA0D4, 0xA0D5, 0xA0D6, 0xEAF1, 0xA0D7, 0xA0D8, + 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, 0xA0DE, + 0xA0DF, 0xA0E0, 0xA0E1, 0xA0E2, 0xC8AE, 0xE1EB, + 0xA0E3, 0xB7B8, 0xE1EC, 0xA0E4, 0xA0E5, 0xA0E6, + 0xE1ED, 0xA0E7, 0xD7B4, 0xE1EE, 0xE1EF, 0xD3CC, + 0xA0E8, 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, + 0xA0EE, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0xA0EF, + 0xA0F0, 0xA0F1, 0xB1B7, 0xA0F2, 0xA0F3, 0xA0F4, + 0xA0F5, 0xE1F3, 0xE1F2, 0xA0F6, 0xBAFC, 0xA0F7, + 0xE1F4, 0xA0F8, 0xA0F9, 0xA0FA, 0xA0FB, 0xB9B7, + 0xA0FC, 0xBED1, 0xA0FD, 0xA0FE, 0xAA40, 0xAA41, + 0xC4FC, 0xAA42, 0xBADD, 0xBDC6, 0xAA43, 0xAA44, + 0xAA45, 0xAA46, 0xAA47, 0xAA48, 0xE1F5, 0xE1F7, + 0xAA49, 0xAA4A, 0xB6C0, 0xCFC1, 0xCAA8, 0xE1F6, + 0xD5F8, 0xD3FC, 0xE1F8, 0xE1FC, 0xE1F9, 0xAA4B, + 0xAA4C, 0xE1FA, 0xC0EA, 0xAA4D, 0xE1FE, 0xE2A1, + 0xC0C7, 0xAA4E, 0xAA4F, 0xAA50, 0xAA51, 0xE1FB, + 0xAA52, 0xE1FD, 0xAA53, 0xAA54, 0xAA55, 0xAA56, + 0xAA57, 0xAA58, 0xE2A5, 0xAA59, 0xAA5A, 0xAA5B, + 0xC1D4, 0xAA5C, 0xAA5D, 0xAA5E, 0xAA5F, 0xE2A3, + 0xAA60, 0xE2A8, 0xB2FE, 0xE2A2, 0xAA61, 0xAA62, + 0xAA63, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0xAA64, + 0xAA65, 0xE2A4, 0xE2A9, 0xAA66, 0xAA67, 0xE2AB, + 0xAA68, 0xAA69, 0xAA6A, 0xD0C9, 0xD6ED, 0xC3A8, + 0xE2AC, 0xAA6B, 0xCFD7, 0xAA6C, 0xAA6D, 0xE2AE, + 0xAA6E, 0xAA6F, 0xBAEF, 0xAA70, 0xAA71, 0xE9E0, + 0xE2AD, 0xE2AA, 0xAA72, 0xAA73, 0xAA74, 0xAA75, + 0xBBAB, 0xD4B3, 0xAA76, 0xAA77, 0xAA78, 0xAA79, + 0xAA7A, 0xAA7B, 0xAA7C, 0xAA7D, 0xAA7E, 0xAA80, + 0xAA81, 0xAA82, 0xAA83, 0xE2B0, 0xAA84, 0xAA85, + 0xE2AF, 0xAA86, 0xE9E1, 0xAA87, 0xAA88, 0xAA89, + 0xAA8A, 0xE2B1, 0xAA8B, 0xAA8C, 0xAA8D, 0xAA8E, + 0xAA8F, 0xAA90, 0xAA91, 0xAA92, 0xE2B2, 0xAA93, + 0xAA94, 0xAA95, 0xAA96, 0xAA97, 0xAA98, 0xAA99, + 0xAA9A, 0xAA9B, 0xAA9C, 0xAA9D, 0xE2B3, 0xCCA1, + 0xAA9E, 0xE2B4, 0xAA9F, 0xAAA0, 0xAB40, 0xAB41, + 0xAB42, 0xAB43, 0xAB44, 0xAB45, 0xAB46, 0xAB47, + 0xAB48, 0xAB49, 0xAB4A, 0xAB4B, 0xE2B5, 0xAB4C, + 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, 0xD0FE, 0xAB51, + 0xAB52, 0xC2CA, 0xAB53, 0xD3F1, 0xAB54, 0xCDF5, + 0xAB55, 0xAB56, 0xE7E0, 0xAB57, 0xAB58, 0xE7E1, + 0xAB59, 0xAB5A, 0xAB5B, 0xAB5C, 0xBEC1, 0xAB5D, + 0xAB5E, 0xAB5F, 0xAB60, 0xC2EA, 0xAB61, 0xAB62, + 0xAB63, 0xE7E4, 0xAB64, 0xAB65, 0xE7E3, 0xAB66, + 0xAB67, 0xAB68, 0xAB69, 0xAB6A, 0xAB6B, 0xCDE6, + 0xAB6C, 0xC3B5, 0xAB6D, 0xAB6E, 0xE7E2, 0xBBB7, + 0xCFD6, 0xAB6F, 0xC1E1, 0xE7E9, 0xAB70, 0xAB71, + 0xAB72, 0xE7E8, 0xAB73, 0xAB74, 0xE7F4, 0xB2A3, + 0xAB75, 0xAB76, 0xAB77, 0xAB78, 0xE7EA, 0xAB79, + 0xE7E6, 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB7E, + 0xE7EC, 0xE7EB, 0xC9BA, 0xAB80, 0xAB81, 0xD5E4, + 0xAB82, 0xE7E5, 0xB7A9, 0xE7E7, 0xAB83, 0xAB84, + 0xAB85, 0xAB86, 0xAB87, 0xAB88, 0xAB89, 0xE7EE, + 0xAB8A, 0xAB8B, 0xAB8C, 0xAB8D, 0xE7F3, 0xAB8E, + 0xD6E9, 0xAB8F, 0xAB90, 0xAB91, 0xAB92, 0xE7ED, + 0xAB93, 0xE7F2, 0xAB94, 0xE7F1, 0xAB95, 0xAB96, + 0xAB97, 0xB0E0, 0xAB98, 0xAB99, 0xAB9A, 0xAB9B, + 0xE7F5, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, + 0xAC40, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, + 0xAC46, 0xAC47, 0xAC48, 0xAC49, 0xAC4A, 0xC7F2, + 0xAC4B, 0xC0C5, 0xC0ED, 0xAC4C, 0xAC4D, 0xC1F0, + 0xE7F0, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xE7F6, + 0xCBF6, 0xAC52, 0xAC53, 0xAC54, 0xAC55, 0xAC56, + 0xAC57, 0xAC58, 0xAC59, 0xAC5A, 0xE8A2, 0xE8A1, + 0xAC5B, 0xAC5C, 0xAC5D, 0xAC5E, 0xAC5F, 0xAC60, + 0xD7C1, 0xAC61, 0xAC62, 0xE7FA, 0xE7F9, 0xAC63, + 0xE7FB, 0xAC64, 0xE7F7, 0xAC65, 0xE7FE, 0xAC66, + 0xE7FD, 0xAC67, 0xE7FC, 0xAC68, 0xAC69, 0xC1D5, + 0xC7D9, 0xC5FD, 0xC5C3, 0xAC6A, 0xAC6B, 0xAC6C, + 0xAC6D, 0xAC6E, 0xC7ED, 0xAC6F, 0xAC70, 0xAC71, + 0xAC72, 0xE8A3, 0xAC73, 0xAC74, 0xAC75, 0xAC76, + 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, + 0xAC7D, 0xAC7E, 0xAC80, 0xAC81, 0xAC82, 0xAC83, + 0xAC84, 0xAC85, 0xAC86, 0xE8A6, 0xAC87, 0xE8A5, + 0xAC88, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0xAC89, + 0xC8F0, 0xC9AA, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, + 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, 0xAC92, 0xAC93, + 0xAC94, 0xAC95, 0xAC96, 0xE8A9, 0xAC97, 0xAC98, + 0xB9E5, 0xAC99, 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, + 0xD1FE, 0xE8A8, 0xAC9E, 0xAC9F, 0xACA0, 0xAD40, + 0xAD41, 0xAD42, 0xE8AA, 0xAD43, 0xE8AD, 0xE8AE, + 0xAD44, 0xC1A7, 0xAD45, 0xAD46, 0xAD47, 0xE8AF, + 0xAD48, 0xAD49, 0xAD4A, 0xE8B0, 0xAD4B, 0xAD4C, + 0xE8AC, 0xAD4D, 0xE8B4, 0xAD4E, 0xAD4F, 0xAD50, + 0xAD51, 0xAD52, 0xAD53, 0xAD54, 0xAD55, 0xAD56, + 0xAD57, 0xAD58, 0xE8AB, 0xAD59, 0xE8B1, 0xAD5A, + 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, 0xAD60, + 0xAD61, 0xE8B5, 0xE8B2, 0xE8B3, 0xAD62, 0xAD63, + 0xAD64, 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, + 0xAD6A, 0xAD6B, 0xAD6C, 0xAD6D, 0xAD6E, 0xAD6F, + 0xAD70, 0xAD71, 0xE8B7, 0xAD72, 0xAD73, 0xAD74, + 0xAD75, 0xAD76, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, + 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7E, 0xAD80, 0xAD81, + 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, + 0xAD88, 0xAD89, 0xE8B6, 0xAD8A, 0xAD8B, 0xAD8C, + 0xAD8D, 0xAD8E, 0xAD8F, 0xAD90, 0xAD91, 0xAD92, + 0xB9CF, 0xAD93, 0xF0AC, 0xAD94, 0xF0AD, 0xAD95, + 0xC6B0, 0xB0EA, 0xC8BF, 0xAD96, 0xCDDF, 0xAD97, + 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, + 0xCECD, 0xEAB1, 0xAD9E, 0xAD9F, 0xADA0, 0xAE40, + 0xEAB2, 0xAE41, 0xC6BF, 0xB4C9, 0xAE42, 0xAE43, + 0xAE44, 0xAE45, 0xAE46, 0xAE47, 0xAE48, 0xEAB3, + 0xAE49, 0xAE4A, 0xAE4B, 0xAE4C, 0xD5E7, 0xAE4D, + 0xAE4E, 0xAE4F, 0xAE50, 0xAE51, 0xAE52, 0xAE53, + 0xAE54, 0xDDF9, 0xAE55, 0xEAB4, 0xAE56, 0xEAB5, + 0xAE57, 0xEAB6, 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, + 0xB8CA, 0xDFB0, 0xC9F5, 0xAE5C, 0xCCF0, 0xAE5D, + 0xAE5E, 0xC9FA, 0xAE5F, 0xAE60, 0xAE61, 0xAE62, + 0xAE63, 0xC9FB, 0xAE64, 0xAE65, 0xD3C3, 0xCBA6, + 0xAE66, 0xB8A6, 0xF0AE, 0xB1C2, 0xAE67, 0xE5B8, + 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0xAE68, 0xB5E7, + 0xAE69, 0xC4D0, 0xB5E9, 0xAE6A, 0xEEAE, 0xBBAD, + 0xAE6B, 0xAE6C, 0xE7DE, 0xAE6D, 0xEEAF, 0xAE6E, + 0xAE6F, 0xAE70, 0xAE71, 0xB3A9, 0xAE72, 0xAE73, + 0xEEB2, 0xAE74, 0xAE75, 0xEEB1, 0xBDE7, 0xAE76, + 0xEEB0, 0xCEB7, 0xAE77, 0xAE78, 0xAE79, 0xAE7A, + 0xC5CF, 0xAE7B, 0xAE7C, 0xAE7D, 0xAE7E, 0xC1F4, + 0xDBCE, 0xEEB3, 0xD0F3, 0xAE80, 0xAE81, 0xAE82, + 0xAE83, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xC2D4, + 0xC6E8, 0xAE88, 0xAE89, 0xAE8A, 0xB7AC, 0xAE8B, + 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, + 0xEEB4, 0xAE92, 0xB3EB, 0xAE93, 0xAE94, 0xAE95, + 0xBBFB, 0xEEB5, 0xAE96, 0xAE97, 0xAE98, 0xAE99, + 0xAE9A, 0xE7DC, 0xAE9B, 0xAE9C, 0xAE9D, 0xEEB6, + 0xAE9E, 0xAE9F, 0xBDAE, 0xAEA0, 0xAF40, 0xAF41, + 0xAF42, 0xF1E2, 0xAF43, 0xAF44, 0xAF45, 0xCAE8, + 0xAF46, 0xD2C9, 0xF0DA, 0xAF47, 0xF0DB, 0xAF48, + 0xF0DC, 0xC1C6, 0xAF49, 0xB8ED, 0xBECE, 0xAF4A, + 0xAF4B, 0xF0DE, 0xAF4C, 0xC5B1, 0xF0DD, 0xD1F1, + 0xAF4D, 0xF0E0, 0xB0CC, 0xBDEA, 0xAF4E, 0xAF4F, + 0xAF50, 0xAF51, 0xAF52, 0xD2DF, 0xF0DF, 0xAF53, + 0xB4AF, 0xB7E8, 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, + 0xF0E2, 0xB4C3, 0xAF54, 0xAF55, 0xF0E3, 0xD5EE, + 0xAF56, 0xAF57, 0xCCDB, 0xBED2, 0xBCB2, 0xAF58, + 0xAF59, 0xAF5A, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, + 0xAF5B, 0xD6A2, 0xD3B8, 0xBEB7, 0xC8AC, 0xAF5C, + 0xAF5D, 0xF0EA, 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, + 0xD1F7, 0xAF62, 0xD6CC, 0xBADB, 0xF0E9, 0xAF63, + 0xB6BB, 0xAF64, 0xAF65, 0xCDB4, 0xAF66, 0xAF67, + 0xC6A6, 0xAF68, 0xAF69, 0xAF6A, 0xC1A1, 0xF0EB, + 0xF0EE, 0xAF6B, 0xF0ED, 0xF0F0, 0xF0EC, 0xAF6C, + 0xBBBE, 0xF0EF, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, + 0xCCB5, 0xF0F2, 0xAF71, 0xAF72, 0xB3D5, 0xAF73, + 0xAF74, 0xAF75, 0xAF76, 0xB1D4, 0xAF77, 0xAF78, + 0xF0F3, 0xAF79, 0xAF7A, 0xF0F4, 0xF0F6, 0xB4E1, + 0xAF7B, 0xF0F1, 0xAF7C, 0xF0F7, 0xAF7D, 0xAF7E, + 0xAF80, 0xAF81, 0xF0FA, 0xAF82, 0xF0F8, 0xAF83, + 0xAF84, 0xAF85, 0xF0F5, 0xAF86, 0xAF87, 0xAF88, + 0xAF89, 0xF0FD, 0xAF8A, 0xF0F9, 0xF0FC, 0xF0FE, + 0xAF8B, 0xF1A1, 0xAF8C, 0xAF8D, 0xAF8E, 0xCEC1, + 0xF1A4, 0xAF8F, 0xF1A3, 0xAF90, 0xC1F6, 0xF0FB, + 0xCADD, 0xAF91, 0xAF92, 0xB4F1, 0xB1F1, 0xCCB1, + 0xAF93, 0xF1A6, 0xAF94, 0xAF95, 0xF1A7, 0xAF96, + 0xAF97, 0xF1AC, 0xD5CE, 0xF1A9, 0xAF98, 0xAF99, + 0xC8B3, 0xAF9A, 0xAF9B, 0xAF9C, 0xF1A2, 0xAF9D, + 0xF1AB, 0xF1A8, 0xF1A5, 0xAF9E, 0xAF9F, 0xF1AA, + 0xAFA0, 0xB040, 0xB041, 0xB042, 0xB043, 0xB044, + 0xB045, 0xB046, 0xB0A9, 0xF1AD, 0xB047, 0xB048, + 0xB049, 0xB04A, 0xB04B, 0xB04C, 0xF1AF, 0xB04D, + 0xF1B1, 0xB04E, 0xB04F, 0xB050, 0xB051, 0xB052, + 0xF1B0, 0xB053, 0xF1AE, 0xB054, 0xB055, 0xB056, + 0xB057, 0xD1A2, 0xB058, 0xB059, 0xB05A, 0xB05B, + 0xB05C, 0xB05D, 0xB05E, 0xF1B2, 0xB05F, 0xB060, + 0xB061, 0xF1B3, 0xB062, 0xB063, 0xB064, 0xB065, + 0xB066, 0xB067, 0xB068, 0xB069, 0xB9EF, 0xB06A, + 0xB06B, 0xB5C7, 0xB06C, 0xB0D7, 0xB0D9, 0xB06D, + 0xB06E, 0xB06F, 0xD4ED, 0xB070, 0xB5C4, 0xB071, + 0xBDD4, 0xBBCA, 0xF0A7, 0xB072, 0xB073, 0xB8DE, + 0xB074, 0xB075, 0xF0A8, 0xB076, 0xB077, 0xB0A8, + 0xB078, 0xF0A9, 0xB079, 0xB07A, 0xCDEE, 0xB07B, + 0xB07C, 0xF0AA, 0xB07D, 0xB07E, 0xB080, 0xB081, + 0xB082, 0xB083, 0xB084, 0xB085, 0xB086, 0xB087, + 0xF0AB, 0xB088, 0xB089, 0xB08A, 0xB08B, 0xB08C, + 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xC6A4, 0xB091, + 0xB092, 0xD6E5, 0xF1E4, 0xB093, 0xF1E5, 0xB094, + 0xB095, 0xB096, 0xB097, 0xB098, 0xB099, 0xB09A, + 0xB09B, 0xB09C, 0xB09D, 0xC3F3, 0xB09E, 0xB09F, + 0xD3DB, 0xB0A0, 0xB140, 0xD6D1, 0xC5E8, 0xB141, + 0xD3AF, 0xB142, 0xD2E6, 0xB143, 0xB144, 0xEEC1, + 0xB0BB, 0xD5B5, 0xD1CE, 0xBCE0, 0xBAD0, 0xB145, + 0xBFF8, 0xB146, 0xB8C7, 0xB5C1, 0xC5CC, 0xB147, + 0xB148, 0xCAA2, 0xB149, 0xB14A, 0xB14B, 0xC3CB, + 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB150, 0xEEC2, + 0xB151, 0xB152, 0xB153, 0xB154, 0xB155, 0xB156, + 0xB157, 0xB158, 0xC4BF, 0xB6A2, 0xB159, 0xEDEC, + 0xC3A4, 0xB15A, 0xD6B1, 0xB15B, 0xB15C, 0xB15D, + 0xCFE0, 0xEDEF, 0xB15E, 0xB15F, 0xC5CE, 0xB160, + 0xB6DC, 0xB161, 0xB162, 0xCAA1, 0xB163, 0xB164, + 0xEDED, 0xB165, 0xB166, 0xEDF0, 0xEDF1, 0xC3BC, + 0xB167, 0xBFB4, 0xB168, 0xEDEE, 0xB169, 0xB16A, + 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, + 0xB171, 0xB172, 0xB173, 0xEDF4, 0xEDF2, 0xB174, + 0xB175, 0xB176, 0xB177, 0xD5E6, 0xC3DF, 0xB178, + 0xEDF3, 0xB179, 0xB17A, 0xB17B, 0xEDF6, 0xB17C, + 0xD5A3, 0xD1A3, 0xB17D, 0xB17E, 0xB180, 0xEDF5, + 0xB181, 0xC3D0, 0xB182, 0xB183, 0xB184, 0xB185, + 0xB186, 0xEDF7, 0xBFF4, 0xBEEC, 0xEDF8, 0xB187, + 0xCCF7, 0xB188, 0xD1DB, 0xB189, 0xB18A, 0xB18B, + 0xD7C5, 0xD5F6, 0xB18C, 0xEDFC, 0xB18D, 0xB18E, + 0xB18F, 0xEDFB, 0xB190, 0xB191, 0xB192, 0xB193, + 0xB194, 0xB195, 0xB196, 0xB197, 0xEDF9, 0xEDFA, + 0xB198, 0xB199, 0xB19A, 0xB19B, 0xB19C, 0xB19D, + 0xB19E, 0xB19F, 0xEDFD, 0xBEA6, 0xB1A0, 0xB240, + 0xB241, 0xB242, 0xB243, 0xCBAF, 0xEEA1, 0xB6BD, + 0xB244, 0xEEA2, 0xC4C0, 0xB245, 0xEDFE, 0xB246, + 0xB247, 0xBDDE, 0xB2C7, 0xB248, 0xB249, 0xB24A, + 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, + 0xB251, 0xB252, 0xB253, 0xB6C3, 0xB254, 0xB255, + 0xB256, 0xEEA5, 0xD8BA, 0xEEA3, 0xEEA6, 0xB257, + 0xB258, 0xB259, 0xC3E9, 0xB3F2, 0xB25A, 0xB25B, + 0xB25C, 0xB25D, 0xB25E, 0xB25F, 0xEEA7, 0xEEA4, + 0xCFB9, 0xB260, 0xB261, 0xEEA8, 0xC2F7, 0xB262, + 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB268, + 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xEEA9, + 0xEEAA, 0xB26E, 0xDEAB, 0xB26F, 0xB270, 0xC6B3, + 0xB271, 0xC7C6, 0xB272, 0xD6F5, 0xB5C9, 0xB273, + 0xCBB2, 0xB274, 0xB275, 0xB276, 0xEEAB, 0xB277, + 0xB278, 0xCDAB, 0xB279, 0xEEAC, 0xB27A, 0xB27B, + 0xB27C, 0xB27D, 0xB27E, 0xD5B0, 0xB280, 0xEEAD, + 0xB281, 0xF6C4, 0xB282, 0xB283, 0xB284, 0xB285, + 0xB286, 0xB287, 0xB288, 0xB289, 0xB28A, 0xB28B, + 0xB28C, 0xB28D, 0xB28E, 0xDBC7, 0xB28F, 0xB290, + 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, 0xB296, + 0xB297, 0xB4A3, 0xB298, 0xB299, 0xB29A, 0xC3AC, + 0xF1E6, 0xB29B, 0xB29C, 0xB29D, 0xB29E, 0xB29F, + 0xCAB8, 0xD2D3, 0xB2A0, 0xD6AA, 0xB340, 0xEFF2, + 0xB341, 0xBED8, 0xB342, 0xBDC3, 0xEFF3, 0xB6CC, + 0xB0AB, 0xB343, 0xB344, 0xB345, 0xB346, 0xCAAF, + 0xB347, 0xB348, 0xEDB6, 0xB349, 0xEDB7, 0xB34A, + 0xB34B, 0xB34C, 0xB34D, 0xCEF9, 0xB7AF, 0xBFF3, + 0xEDB8, 0xC2EB, 0xC9B0, 0xB34E, 0xB34F, 0xB350, + 0xB351, 0xB352, 0xB353, 0xEDB9, 0xB354, 0xB355, + 0xC6F6, 0xBFB3, 0xB356, 0xB357, 0xB358, 0xEDBC, + 0xC5F8, 0xB359, 0xD1D0, 0xB35A, 0xD7A9, 0xEDBA, + 0xEDBB, 0xB35B, 0xD1E2, 0xB35C, 0xEDBF, 0xEDC0, + 0xB35D, 0xEDC4, 0xB35E, 0xB35F, 0xB360, 0xEDC8, + 0xB361, 0xEDC6, 0xEDCE, 0xD5E8, 0xB362, 0xEDC9, + 0xB363, 0xB364, 0xEDC7, 0xEDBE, 0xB365, 0xB366, + 0xC5E9, 0xB367, 0xB368, 0xB369, 0xC6C6, 0xB36A, + 0xB36B, 0xC9E9, 0xD4D2, 0xEDC1, 0xEDC2, 0xEDC3, + 0xEDC5, 0xB36C, 0xC0F9, 0xB36D, 0xB4A1, 0xB36E, + 0xB36F, 0xB370, 0xB371, 0xB9E8, 0xB372, 0xEDD0, + 0xB373, 0xB374, 0xB375, 0xB376, 0xEDD1, 0xB377, + 0xEDCA, 0xB378, 0xEDCF, 0xB379, 0xCEF8, 0xB37A, + 0xB37B, 0xCBB6, 0xEDCC, 0xEDCD, 0xB37C, 0xB37D, + 0xB37E, 0xB380, 0xB381, 0xCFF5, 0xB382, 0xB383, + 0xB384, 0xB385, 0xB386, 0xB387, 0xB388, 0xB389, + 0xB38A, 0xB38B, 0xB38C, 0xB38D, 0xEDD2, 0xC1F2, + 0xD3B2, 0xEDCB, 0xC8B7, 0xB38E, 0xB38F, 0xB390, + 0xB391, 0xB392, 0xB393, 0xB394, 0xB395, 0xBCEF, + 0xB396, 0xB397, 0xB398, 0xB399, 0xC5F0, 0xB39A, + 0xB39B, 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A0, + 0xB440, 0xB441, 0xB442, 0xEDD6, 0xB443, 0xB5EF, + 0xB444, 0xB445, 0xC2B5, 0xB0AD, 0xCBE9, 0xB446, + 0xB447, 0xB1AE, 0xB448, 0xEDD4, 0xB449, 0xB44A, + 0xB44B, 0xCDEB, 0xB5E2, 0xB44C, 0xEDD5, 0xEDD3, + 0xEDD7, 0xB44D, 0xB44E, 0xB5FA, 0xB44F, 0xEDD8, + 0xB450, 0xEDD9, 0xB451, 0xEDDC, 0xB452, 0xB1CC, + 0xB453, 0xB454, 0xB455, 0xB456, 0xB457, 0xB458, + 0xB459, 0xB45A, 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, + 0xB2EA, 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xEDDB, + 0xB45F, 0xB460, 0xB461, 0xB462, 0xC4EB, 0xB463, + 0xB464, 0xB4C5, 0xB465, 0xB466, 0xB467, 0xB0F5, + 0xB468, 0xB469, 0xB46A, 0xEDDF, 0xC0DA, 0xB4E8, + 0xB46B, 0xB46C, 0xB46D, 0xB46E, 0xC5CD, 0xB46F, + 0xB470, 0xB471, 0xEDDD, 0xBFC4, 0xB472, 0xB473, + 0xB474, 0xEDDE, 0xB475, 0xB476, 0xB477, 0xB478, + 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, 0xB47E, + 0xB480, 0xB481, 0xB482, 0xB483, 0xC4A5, 0xB484, + 0xB485, 0xB486, 0xEDE0, 0xB487, 0xB488, 0xB489, + 0xB48A, 0xB48B, 0xEDE1, 0xB48C, 0xEDE3, 0xB48D, + 0xB48E, 0xC1D7, 0xB48F, 0xB490, 0xBBC7, 0xB491, + 0xB492, 0xB493, 0xB494, 0xB495, 0xB496, 0xBDB8, + 0xB497, 0xB498, 0xB499, 0xEDE2, 0xB49A, 0xB49B, + 0xB49C, 0xB49D, 0xB49E, 0xB49F, 0xB4A0, 0xB540, + 0xB541, 0xB542, 0xB543, 0xB544, 0xB545, 0xEDE4, + 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54B, + 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xEDE6, 0xB550, + 0xB551, 0xB552, 0xB553, 0xB554, 0xEDE5, 0xB555, + 0xB556, 0xB557, 0xB558, 0xB559, 0xB55A, 0xB55B, + 0xB55C, 0xB55D, 0xB55E, 0xB55F, 0xB560, 0xB561, + 0xB562, 0xB563, 0xEDE7, 0xB564, 0xB565, 0xB566, + 0xB567, 0xB568, 0xCABE, 0xECEA, 0xC0F1, 0xB569, + 0xC9E7, 0xB56A, 0xECEB, 0xC6EE, 0xB56B, 0xB56C, + 0xB56D, 0xB56E, 0xECEC, 0xB56F, 0xC6ED, 0xECED, + 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, + 0xB576, 0xB577, 0xB578, 0xECF0, 0xB579, 0xB57A, + 0xD7E6, 0xECF3, 0xB57B, 0xB57C, 0xECF1, 0xECEE, + 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, 0xECF4, 0xB57D, + 0xECF2, 0xB57E, 0xB580, 0xCFE9, 0xB581, 0xECF6, + 0xC6B1, 0xB582, 0xB583, 0xB584, 0xB585, 0xBCC0, + 0xB586, 0xECF5, 0xB587, 0xB588, 0xB589, 0xB58A, + 0xB58B, 0xB58C, 0xB58D, 0xB5BB, 0xBBF6, 0xB58E, + 0xECF7, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, + 0xD9F7, 0xBDFB, 0xB594, 0xB595, 0xC2BB, 0xECF8, + 0xB596, 0xB597, 0xB598, 0xB599, 0xECF9, 0xB59A, + 0xB59B, 0xB59C, 0xB59D, 0xB8A3, 0xB59E, 0xB59F, + 0xB5A0, 0xB640, 0xB641, 0xB642, 0xB643, 0xB644, + 0xB645, 0xB646, 0xECFA, 0xB647, 0xB648, 0xB649, + 0xB64A, 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, + 0xB650, 0xB651, 0xB652, 0xECFB, 0xB653, 0xB654, + 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, + 0xB65B, 0xB65C, 0xB65D, 0xECFC, 0xB65E, 0xB65F, + 0xB660, 0xB661, 0xB662, 0xD3ED, 0xD8AE, 0xC0EB, + 0xB663, 0xC7DD, 0xBACC, 0xB664, 0xD0E3, 0xCBBD, + 0xB665, 0xCDBA, 0xB666, 0xB667, 0xB8D1, 0xB668, + 0xB669, 0xB1FC, 0xB66A, 0xC7EF, 0xB66B, 0xD6D6, + 0xB66C, 0xB66D, 0xB66E, 0xBFC6, 0xC3EB, 0xB66F, + 0xB670, 0xEFF5, 0xB671, 0xB672, 0xC3D8, 0xB673, + 0xB674, 0xB675, 0xB676, 0xB677, 0xB678, 0xD7E2, + 0xB679, 0xB67A, 0xB67B, 0xEFF7, 0xB3D3, 0xB67C, + 0xC7D8, 0xD1ED, 0xB67D, 0xD6C8, 0xB67E, 0xEFF8, + 0xB680, 0xEFF6, 0xB681, 0xBBFD, 0xB3C6, 0xB682, + 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, + 0xBDD5, 0xB689, 0xB68A, 0xD2C6, 0xB68B, 0xBBE0, + 0xB68C, 0xB68D, 0xCFA1, 0xB68E, 0xEFFC, 0xEFFB, + 0xB68F, 0xB690, 0xEFF9, 0xB691, 0xB692, 0xB693, + 0xB694, 0xB3CC, 0xB695, 0xC9D4, 0xCBB0, 0xB696, + 0xB697, 0xB698, 0xB699, 0xB69A, 0xEFFE, 0xB69B, + 0xB69C, 0xB0DE, 0xB69D, 0xB69E, 0xD6C9, 0xB69F, + 0xB6A0, 0xB740, 0xEFFD, 0xB741, 0xB3ED, 0xB742, + 0xB743, 0xF6D5, 0xB744, 0xB745, 0xB746, 0xB747, + 0xB748, 0xB749, 0xB74A, 0xB74B, 0xB74C, 0xB74D, + 0xB74E, 0xB74F, 0xB750, 0xB751, 0xB752, 0xCEC8, + 0xB753, 0xB754, 0xB755, 0xF0A2, 0xB756, 0xF0A1, + 0xB757, 0xB5BE, 0xBCDA, 0xBBFC, 0xB758, 0xB8E5, + 0xB759, 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, + 0xC4C2, 0xB75F, 0xB760, 0xB761, 0xB762, 0xB763, + 0xB764, 0xB765, 0xB766, 0xB767, 0xB768, 0xF0A3, + 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xCBEB, + 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB772, 0xB773, + 0xB774, 0xB775, 0xB776, 0xB777, 0xB778, 0xB779, + 0xB77A, 0xB77B, 0xB77C, 0xB77D, 0xB77E, 0xB780, + 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, + 0xF0A6, 0xB787, 0xB788, 0xB789, 0xD1A8, 0xB78A, + 0xBEBF, 0xC7EE, 0xF1B6, 0xF1B7, 0xBFD5, 0xB78B, + 0xB78C, 0xB78D, 0xB78E, 0xB4A9, 0xF1B8, 0xCDBB, + 0xB78F, 0xC7D4, 0xD5AD, 0xB790, 0xF1B9, 0xB791, + 0xF1BA, 0xB792, 0xB793, 0xB794, 0xB795, 0xC7CF, + 0xB796, 0xB797, 0xB798, 0xD2A4, 0xD6CF, 0xB799, + 0xB79A, 0xF1BB, 0xBDD1, 0xB4B0, 0xBEBD, 0xB79B, + 0xB79C, 0xB79D, 0xB4DC, 0xCED1, 0xB79E, 0xBFDF, + 0xF1BD, 0xB79F, 0xB7A0, 0xB840, 0xB841, 0xBFFA, + 0xF1BC, 0xB842, 0xF1BF, 0xB843, 0xB844, 0xB845, + 0xF1BE, 0xF1C0, 0xB846, 0xB847, 0xB848, 0xB849, + 0xB84A, 0xF1C1, 0xB84B, 0xB84C, 0xB84D, 0xB84E, + 0xB84F, 0xB850, 0xB851, 0xB852, 0xB853, 0xB854, + 0xB855, 0xC1FE, 0xB856, 0xB857, 0xB858, 0xB859, + 0xB85A, 0xB85B, 0xB85C, 0xB85D, 0xB85E, 0xB85F, + 0xB860, 0xC1A2, 0xB861, 0xB862, 0xB863, 0xB864, + 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, + 0xCAFA, 0xB86B, 0xB86C, 0xD5BE, 0xB86D, 0xB86E, + 0xB86F, 0xB870, 0xBEBA, 0xBEB9, 0xD5C2, 0xB871, + 0xB872, 0xBFA2, 0xB873, 0xCDAF, 0xF1B5, 0xB874, + 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, 0xBDDF, + 0xB87A, 0xB6CB, 0xB87B, 0xB87C, 0xB87D, 0xB87E, + 0xB880, 0xB881, 0xB882, 0xB883, 0xB884, 0xD6F1, + 0xF3C3, 0xB885, 0xB886, 0xF3C4, 0xB887, 0xB8CD, + 0xB888, 0xB889, 0xB88A, 0xF3C6, 0xF3C7, 0xB88B, + 0xB0CA, 0xB88C, 0xF3C5, 0xB88D, 0xF3C9, 0xCBF1, + 0xB88E, 0xB88F, 0xB890, 0xF3CB, 0xB891, 0xD0A6, + 0xB892, 0xB893, 0xB1CA, 0xF3C8, 0xB894, 0xB895, + 0xB896, 0xF3CF, 0xB897, 0xB5D1, 0xB898, 0xB899, + 0xF3D7, 0xB89A, 0xF3D2, 0xB89B, 0xB89C, 0xB89D, + 0xF3D4, 0xF3D3, 0xB7FB, 0xB89E, 0xB1BF, 0xB89F, + 0xF3CE, 0xF3CA, 0xB5DA, 0xB8A0, 0xF3D0, 0xB940, + 0xB941, 0xF3D1, 0xB942, 0xF3D5, 0xB943, 0xB944, + 0xB945, 0xB946, 0xF3CD, 0xB947, 0xBCE3, 0xB948, + 0xC1FD, 0xB949, 0xF3D6, 0xB94A, 0xB94B, 0xB94C, + 0xB94D, 0xB94E, 0xB94F, 0xF3DA, 0xB950, 0xF3CC, + 0xB951, 0xB5C8, 0xB952, 0xBDEE, 0xF3DC, 0xB953, + 0xB954, 0xB7A4, 0xBFF0, 0xD6FE, 0xCDB2, 0xB955, + 0xB4F0, 0xB956, 0xB2DF, 0xB957, 0xF3D8, 0xB958, + 0xF3D9, 0xC9B8, 0xB959, 0xF3DD, 0xB95A, 0xB95B, + 0xF3DE, 0xB95C, 0xF3E1, 0xB95D, 0xB95E, 0xB95F, + 0xB960, 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, + 0xB966, 0xB967, 0xF3DF, 0xB968, 0xB969, 0xF3E3, + 0xF3E2, 0xB96A, 0xB96B, 0xF3DB, 0xB96C, 0xBFEA, + 0xB96D, 0xB3EF, 0xB96E, 0xF3E0, 0xB96F, 0xB970, + 0xC7A9, 0xB971, 0xBCF2, 0xB972, 0xB973, 0xB974, + 0xB975, 0xF3EB, 0xB976, 0xB977, 0xB978, 0xB979, + 0xB97A, 0xB97B, 0xB97C, 0xB9BF, 0xB97D, 0xB97E, + 0xF3E4, 0xB980, 0xB981, 0xB982, 0xB2AD, 0xBBFE, + 0xB983, 0xCBE3, 0xB984, 0xB985, 0xB986, 0xB987, + 0xF3ED, 0xF3E9, 0xB988, 0xB989, 0xB98A, 0xB9DC, + 0xF3EE, 0xB98B, 0xB98C, 0xB98D, 0xF3E5, 0xF3E6, + 0xF3EA, 0xC2E1, 0xF3EC, 0xF3EF, 0xF3E8, 0xBCFD, + 0xB98E, 0xB98F, 0xB990, 0xCFE4, 0xB991, 0xB992, + 0xF3F0, 0xB993, 0xB994, 0xB995, 0xF3E7, 0xB996, + 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, + 0xB99D, 0xF3F2, 0xB99E, 0xB99F, 0xB9A0, 0xBA40, + 0xD7AD, 0xC6AA, 0xBA41, 0xBA42, 0xBA43, 0xBA44, + 0xF3F3, 0xBA45, 0xBA46, 0xBA47, 0xBA48, 0xF3F1, + 0xBA49, 0xC2A8, 0xBA4A, 0xBA4B, 0xBA4C, 0xBA4D, + 0xBA4E, 0xB8DD, 0xF3F5, 0xBA4F, 0xBA50, 0xF3F4, + 0xBA51, 0xBA52, 0xBA53, 0xB4DB, 0xBA54, 0xBA55, + 0xBA56, 0xF3F6, 0xF3F7, 0xBA57, 0xBA58, 0xBA59, + 0xF3F8, 0xBA5A, 0xBA5B, 0xBA5C, 0xC0BA, 0xBA5D, + 0xBA5E, 0xC0E9, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, + 0xBA63, 0xC5F1, 0xBA64, 0xBA65, 0xBA66, 0xBA67, + 0xF3FB, 0xBA68, 0xF3FA, 0xBA69, 0xBA6A, 0xBA6B, + 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA70, 0xB4D8, + 0xBA71, 0xBA72, 0xBA73, 0xF3FE, 0xF3F9, 0xBA74, + 0xBA75, 0xF3FC, 0xBA76, 0xBA77, 0xBA78, 0xBA79, + 0xBA7A, 0xBA7B, 0xF3FD, 0xBA7C, 0xBA7D, 0xBA7E, + 0xBA80, 0xBA81, 0xBA82, 0xBA83, 0xBA84, 0xF4A1, + 0xBA85, 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, + 0xF4A3, 0xBBC9, 0xBA8B, 0xBA8C, 0xF4A2, 0xBA8D, + 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA92, 0xBA93, + 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, + 0xF4A4, 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, + 0xBA9F, 0xB2BE, 0xF4A6, 0xF4A5, 0xBAA0, 0xBB40, + 0xBB41, 0xBB42, 0xBB43, 0xBB44, 0xBB45, 0xBB46, + 0xBB47, 0xBB48, 0xBB49, 0xBCAE, 0xBB4A, 0xBB4B, + 0xBB4C, 0xBB4D, 0xBB4E, 0xBB4F, 0xBB50, 0xBB51, + 0xBB52, 0xBB53, 0xBB54, 0xBB55, 0xBB56, 0xBB57, + 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, + 0xBB5E, 0xBB5F, 0xBB60, 0xBB61, 0xBB62, 0xBB63, + 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, 0xBB69, + 0xBB6A, 0xBB6B, 0xBB6C, 0xBB6D, 0xBB6E, 0xC3D7, + 0xD9E1, 0xBB6F, 0xBB70, 0xBB71, 0xBB72, 0xBB73, + 0xBB74, 0xC0E0, 0xF4CC, 0xD7D1, 0xBB75, 0xBB76, + 0xBB77, 0xBB78, 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, + 0xBB7D, 0xBB7E, 0xBB80, 0xB7DB, 0xBB81, 0xBB82, + 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0xF4CE, + 0xC1A3, 0xBB88, 0xBB89, 0xC6C9, 0xBB8A, 0xB4D6, + 0xD5B3, 0xBB8B, 0xBB8C, 0xBB8D, 0xF4D0, 0xF4CF, + 0xF4D1, 0xCBDA, 0xBB8E, 0xBB8F, 0xF4D2, 0xBB90, + 0xD4C1, 0xD6E0, 0xBB91, 0xBB92, 0xBB93, 0xBB94, + 0xB7E0, 0xBB95, 0xBB96, 0xBB97, 0xC1B8, 0xBB98, + 0xBB99, 0xC1BB, 0xF4D3, 0xBEAC, 0xBB9A, 0xBB9B, + 0xBB9C, 0xBB9D, 0xBB9E, 0xB4E2, 0xBB9F, 0xBBA0, + 0xF4D4, 0xF4D5, 0xBEAB, 0xBC40, 0xBC41, 0xF4D6, + 0xBC42, 0xBC43, 0xBC44, 0xF4DB, 0xBC45, 0xF4D7, + 0xF4DA, 0xBC46, 0xBAFD, 0xBC47, 0xF4D8, 0xF4D9, + 0xBC48, 0xBC49, 0xBC4A, 0xBC4B, 0xBC4C, 0xBC4D, + 0xBC4E, 0xB8E2, 0xCCC7, 0xF4DC, 0xBC4F, 0xB2DA, + 0xBC50, 0xBC51, 0xC3D3, 0xBC52, 0xBC53, 0xD4E3, + 0xBFB7, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, + 0xBC59, 0xBC5A, 0xF4DD, 0xBC5B, 0xBC5C, 0xBC5D, + 0xBC5E, 0xBC5F, 0xBC60, 0xC5B4, 0xBC61, 0xBC62, + 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, + 0xF4E9, 0xBC69, 0xBC6A, 0xCFB5, 0xBC6B, 0xBC6C, + 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, 0xBC72, + 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77, 0xBC78, + 0xCEC9, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, + 0xBC7E, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0xBC84, + 0xBC85, 0xBC86, 0xBC87, 0xBC88, 0xBC89, 0xBC8A, + 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, 0xCBD8, 0xBC8F, + 0xCBF7, 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBDF4, + 0xBC94, 0xBC95, 0xBC96, 0xD7CF, 0xBC97, 0xBC98, + 0xBC99, 0xC0DB, 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, + 0xBC9E, 0xBC9F, 0xBCA0, 0xBD40, 0xBD41, 0xBD42, + 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, + 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, + 0xBD4F, 0xBD50, 0xBD51, 0xBD52, 0xBD53, 0xBD54, + 0xBD55, 0xBD56, 0xBD57, 0xBD58, 0xBD59, 0xBD5A, + 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, 0xBD60, + 0xBD61, 0xBD62, 0xBD63, 0xBD64, 0xBD65, 0xBD66, + 0xBD67, 0xBD68, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, + 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, + 0xBD73, 0xBD74, 0xBD75, 0xBD76, 0xD0F5, 0xBD77, + 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, + 0xBD7E, 0xF4EA, 0xBD80, 0xBD81, 0xBD82, 0xBD83, + 0xBD84, 0xBD85, 0xBD86, 0xBD87, 0xBD88, 0xBD89, + 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, + 0xBD90, 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, + 0xBD96, 0xBD97, 0xBD98, 0xBD99, 0xBD9A, 0xBD9B, + 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, 0xBE40, + 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, + 0xBE47, 0xBE48, 0xBE49, 0xBE4A, 0xBE4B, 0xBE4C, + 0xF4EB, 0xBE4D, 0xBE4E, 0xBE4F, 0xBE50, 0xBE51, + 0xBE52, 0xBE53, 0xF4EC, 0xBE54, 0xBE55, 0xBE56, + 0xBE57, 0xBE58, 0xBE59, 0xBE5A, 0xBE5B, 0xBE5C, + 0xBE5D, 0xBE5E, 0xBE5F, 0xBE60, 0xBE61, 0xBE62, + 0xBE63, 0xBE64, 0xBE65, 0xBE66, 0xBE67, 0xBE68, + 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E, + 0xBE6F, 0xBE70, 0xBE71, 0xBE72, 0xBE73, 0xBE74, + 0xBE75, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, + 0xBE7B, 0xBE7C, 0xBE7D, 0xBE7E, 0xBE80, 0xBE81, + 0xBE82, 0xBE83, 0xBE84, 0xBE85, 0xBE86, 0xBE87, + 0xBE88, 0xBE89, 0xBE8A, 0xBE8B, 0xBE8C, 0xBE8D, + 0xBE8E, 0xBE8F, 0xBE90, 0xBE91, 0xBE92, 0xBE93, + 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0xBE98, 0xBE99, + 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, + 0xBEA0, 0xBF40, 0xBF41, 0xBF42, 0xBF43, 0xBF44, + 0xBF45, 0xBF46, 0xBF47, 0xBF48, 0xBF49, 0xBF4A, + 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, + 0xBF51, 0xBF52, 0xBF53, 0xBF54, 0xBF55, 0xBF56, + 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0xBF5C, + 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, + 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, + 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, + 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xBF74, + 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, + 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, 0xBF80, 0xF7E3, + 0xBF81, 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xB7B1, + 0xBF86, 0xBF87, 0xBF88, 0xBF89, 0xBF8A, 0xF4ED, + 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, + 0xBF91, 0xBF92, 0xBF93, 0xBF94, 0xBF95, 0xBF96, + 0xBF97, 0xBF98, 0xBF99, 0xBF9A, 0xBF9B, 0xBF9C, + 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xC040, 0xC041, + 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, + 0xC048, 0xC049, 0xC04A, 0xC04B, 0xC04C, 0xC04D, + 0xC04E, 0xC04F, 0xC050, 0xC051, 0xC052, 0xC053, + 0xC054, 0xC055, 0xC056, 0xC057, 0xC058, 0xC059, + 0xC05A, 0xC05B, 0xC05C, 0xC05D, 0xC05E, 0xC05F, + 0xC060, 0xC061, 0xC062, 0xC063, 0xD7EB, 0xC064, + 0xC065, 0xC066, 0xC067, 0xC068, 0xC069, 0xC06A, + 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, + 0xC071, 0xC072, 0xC073, 0xC074, 0xC075, 0xC076, + 0xC077, 0xC078, 0xC079, 0xC07A, 0xC07B, 0xF4EE, + 0xC07C, 0xC07D, 0xC07E, 0xE6F9, 0xBEC0, 0xE6FA, + 0xBAEC, 0xE6FB, 0xCFCB, 0xE6FC, 0xD4BC, 0xBCB6, + 0xE6FD, 0xE6FE, 0xBCCD, 0xC8D2, 0xCEB3, 0xE7A1, + 0xC080, 0xB4BF, 0xE7A2, 0xC9B4, 0xB8D9, 0xC4C9, + 0xC081, 0xD7DD, 0xC2DA, 0xB7D7, 0xD6BD, 0xCEC6, + 0xB7C4, 0xC082, 0xC083, 0xC5A6, 0xE7A3, 0xCFDF, + 0xE7A4, 0xE7A5, 0xE7A6, 0xC1B7, 0xD7E9, 0xC9F0, + 0xCFB8, 0xD6AF, 0xD6D5, 0xE7A7, 0xB0ED, 0xE7A8, + 0xE7A9, 0xC9DC, 0xD2EF, 0xBEAD, 0xE7AA, 0xB0F3, + 0xC8DE, 0xBDE1, 0xE7AB, 0xC8C6, 0xC084, 0xE7AC, + 0xBBE6, 0xB8F8, 0xD1A4, 0xE7AD, 0xC2E7, 0xBEF8, + 0xBDCA, 0xCDB3, 0xE7AE, 0xE7AF, 0xBEEE, 0xD0E5, + 0xC085, 0xCBE7, 0xCCD0, 0xBCCC, 0xE7B0, 0xBCA8, + 0xD0F7, 0xE7B1, 0xC086, 0xD0F8, 0xE7B2, 0xE7B3, + 0xB4C2, 0xE7B4, 0xE7B5, 0xC9FE, 0xCEAC, 0xC3E0, + 0xE7B7, 0xB1C1, 0xB3F1, 0xC087, 0xE7B8, 0xE7B9, + 0xD7DB, 0xD5C0, 0xE7BA, 0xC2CC, 0xD7BA, 0xE7BB, + 0xE7BC, 0xE7BD, 0xBCEA, 0xC3E5, 0xC0C2, 0xE7BE, + 0xE7BF, 0xBCA9, 0xC088, 0xE7C0, 0xE7C1, 0xE7B6, + 0xB6D0, 0xE7C2, 0xC089, 0xE7C3, 0xE7C4, 0xBBBA, + 0xB5DE, 0xC2C6, 0xB1E0, 0xE7C5, 0xD4B5, 0xE7C6, + 0xB8BF, 0xE7C8, 0xE7C7, 0xB7EC, 0xC08A, 0xE7C9, + 0xB2F8, 0xE7CA, 0xE7CB, 0xE7CC, 0xE7CD, 0xE7CE, + 0xE7CF, 0xE7D0, 0xD3A7, 0xCBF5, 0xE7D1, 0xE7D2, + 0xE7D3, 0xE7D4, 0xC9C9, 0xE7D5, 0xE7D6, 0xE7D7, + 0xE7D8, 0xE7D9, 0xBDC9, 0xE7DA, 0xF3BE, 0xC08B, + 0xB8D7, 0xC08C, 0xC8B1, 0xC08D, 0xC08E, 0xC08F, + 0xC090, 0xC091, 0xC092, 0xC093, 0xF3BF, 0xC094, + 0xF3C0, 0xF3C1, 0xC095, 0xC096, 0xC097, 0xC098, + 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, + 0xB9DE, 0xCDF8, 0xC09F, 0xC0A0, 0xD8E8, 0xBAB1, + 0xC140, 0xC2DE, 0xEEB7, 0xC141, 0xB7A3, 0xC142, + 0xC143, 0xC144, 0xC145, 0xEEB9, 0xC146, 0xEEB8, + 0xB0D5, 0xC147, 0xC148, 0xC149, 0xC14A, 0xC14B, + 0xEEBB, 0xD5D6, 0xD7EF, 0xC14C, 0xC14D, 0xC14E, + 0xD6C3, 0xC14F, 0xC150, 0xEEBD, 0xCAF0, 0xC151, + 0xEEBC, 0xC152, 0xC153, 0xC154, 0xC155, 0xEEBE, + 0xC156, 0xC157, 0xC158, 0xC159, 0xEEC0, 0xC15A, + 0xC15B, 0xEEBF, 0xC15C, 0xC15D, 0xC15E, 0xC15F, + 0xC160, 0xC161, 0xC162, 0xC163, 0xD1F2, 0xC164, + 0xC7BC, 0xC165, 0xC3C0, 0xC166, 0xC167, 0xC168, + 0xC169, 0xC16A, 0xB8E1, 0xC16B, 0xC16C, 0xC16D, + 0xC16E, 0xC16F, 0xC1E7, 0xC170, 0xC171, 0xF4C6, + 0xD0DF, 0xF4C7, 0xC172, 0xCFDB, 0xC173, 0xC174, + 0xC8BA, 0xC175, 0xC176, 0xF4C8, 0xC177, 0xC178, + 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xF4C9, + 0xF4CA, 0xC17E, 0xF4CB, 0xC180, 0xC181, 0xC182, + 0xC183, 0xC184, 0xD9FA, 0xB8FE, 0xC185, 0xC186, + 0xE5F1, 0xD3F0, 0xC187, 0xF4E0, 0xC188, 0xCECC, + 0xC189, 0xC18A, 0xC18B, 0xB3E1, 0xC18C, 0xC18D, + 0xC18E, 0xC18F, 0xF1B4, 0xC190, 0xD2EE, 0xC191, + 0xF4E1, 0xC192, 0xC193, 0xC194, 0xC195, 0xC196, + 0xCFE8, 0xF4E2, 0xC197, 0xC198, 0xC7CC, 0xC199, + 0xC19A, 0xC19B, 0xC19C, 0xC19D, 0xC19E, 0xB5D4, + 0xB4E4, 0xF4E4, 0xC19F, 0xC1A0, 0xC240, 0xF4E3, + 0xF4E5, 0xC241, 0xC242, 0xF4E6, 0xC243, 0xC244, + 0xC245, 0xC246, 0xF4E7, 0xC247, 0xBAB2, 0xB0BF, + 0xC248, 0xF4E8, 0xC249, 0xC24A, 0xC24B, 0xC24C, + 0xC24D, 0xC24E, 0xC24F, 0xB7AD, 0xD2ED, 0xC250, + 0xC251, 0xC252, 0xD2AB, 0xC0CF, 0xC253, 0xBFBC, + 0xEBA3, 0xD5DF, 0xEAC8, 0xC254, 0xC255, 0xC256, + 0xC257, 0xF1F3, 0xB6F8, 0xCBA3, 0xC258, 0xC259, + 0xC4CD, 0xC25A, 0xF1E7, 0xC25B, 0xF1E8, 0xB8FB, + 0xF1E9, 0xBAC4, 0xD4C5, 0xB0D2, 0xC25C, 0xC25D, + 0xF1EA, 0xC25E, 0xC25F, 0xC260, 0xF1EB, 0xC261, + 0xF1EC, 0xC262, 0xC263, 0xF1ED, 0xF1EE, 0xF1EF, + 0xF1F1, 0xF1F0, 0xC5D5, 0xC264, 0xC265, 0xC266, + 0xC267, 0xC268, 0xC269, 0xF1F2, 0xC26A, 0xB6FA, + 0xC26B, 0xF1F4, 0xD2AE, 0xDEC7, 0xCBCA, 0xC26C, + 0xC26D, 0xB3DC, 0xC26E, 0xB5A2, 0xC26F, 0xB9A2, + 0xC270, 0xC271, 0xC4F4, 0xF1F5, 0xC272, 0xC273, + 0xF1F6, 0xC274, 0xC275, 0xC276, 0xC1C4, 0xC1FB, + 0xD6B0, 0xF1F7, 0xC277, 0xC278, 0xC279, 0xC27A, + 0xF1F8, 0xC27B, 0xC1AA, 0xC27C, 0xC27D, 0xC27E, + 0xC6B8, 0xC280, 0xBEDB, 0xC281, 0xC282, 0xC283, + 0xC284, 0xC285, 0xC286, 0xC287, 0xC288, 0xC289, + 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, 0xF1F9, + 0xB4CF, 0xC28F, 0xC290, 0xC291, 0xC292, 0xC293, + 0xC294, 0xF1FA, 0xC295, 0xC296, 0xC297, 0xC298, + 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, 0xC29E, + 0xC29F, 0xC2A0, 0xC340, 0xEDB2, 0xEDB1, 0xC341, + 0xC342, 0xCBE0, 0xD2DE, 0xC343, 0xCBC1, 0xD5D8, + 0xC344, 0xC8E2, 0xC345, 0xC0DF, 0xBCA1, 0xC346, + 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0xEBC1, + 0xC34C, 0xC34D, 0xD0A4, 0xC34E, 0xD6E2, 0xC34F, + 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0xC350, 0xEBBF, + 0xB3A6, 0xB9C9, 0xD6AB, 0xC351, 0xB7F4, 0xB7CA, + 0xC352, 0xC353, 0xC354, 0xBCE7, 0xB7BE, 0xEBC6, + 0xC355, 0xEBC7, 0xB0B9, 0xBFCF, 0xC356, 0xEBC5, + 0xD3FD, 0xC357, 0xEBC8, 0xC358, 0xC359, 0xEBC9, + 0xC35A, 0xC35B, 0xB7CE, 0xC35C, 0xEBC2, 0xEBC4, + 0xC9F6, 0xD6D7, 0xD5CD, 0xD0B2, 0xEBCF, 0xCEB8, + 0xEBD0, 0xC35D, 0xB5A8, 0xC35E, 0xC35F, 0xC360, + 0xC361, 0xC362, 0xB1B3, 0xEBD2, 0xCCA5, 0xC363, + 0xC364, 0xC365, 0xC366, 0xC367, 0xC368, 0xC369, + 0xC5D6, 0xEBD3, 0xC36A, 0xEBD1, 0xC5DF, 0xEBCE, + 0xCAA4, 0xEBD5, 0xB0FB, 0xC36B, 0xC36C, 0xBAFA, + 0xC36D, 0xC36E, 0xD8B7, 0xF1E3, 0xC36F, 0xEBCA, + 0xEBCB, 0xEBCC, 0xEBCD, 0xEBD6, 0xE6C0, 0xEBD9, + 0xC370, 0xBFE8, 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, + 0xEBD8, 0xC371, 0xBDBA, 0xC372, 0xD0D8, 0xC373, + 0xB0B7, 0xC374, 0xEBDD, 0xC4DC, 0xC375, 0xC376, + 0xC377, 0xC378, 0xD6AC, 0xC379, 0xC37A, 0xC37B, + 0xB4E0, 0xC37C, 0xC37D, 0xC2F6, 0xBCB9, 0xC37E, + 0xC380, 0xEBDA, 0xEBDB, 0xD4E0, 0xC6EA, 0xC4D4, + 0xEBDF, 0xC5A7, 0xD9F5, 0xC381, 0xB2B1, 0xC382, + 0xEBE4, 0xC383, 0xBDC5, 0xC384, 0xC385, 0xC386, + 0xEBE2, 0xC387, 0xC388, 0xC389, 0xC38A, 0xC38B, + 0xC38C, 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, + 0xC392, 0xC393, 0xEBE3, 0xC394, 0xC395, 0xB8AC, + 0xC396, 0xCDD1, 0xEBE5, 0xC397, 0xC398, 0xC399, + 0xEBE1, 0xC39A, 0xC1B3, 0xC39B, 0xC39C, 0xC39D, + 0xC39E, 0xC39F, 0xC6A2, 0xC3A0, 0xC440, 0xC441, + 0xC442, 0xC443, 0xC444, 0xC445, 0xCCF3, 0xC446, + 0xEBE6, 0xC447, 0xC0B0, 0xD2B8, 0xEBE7, 0xC448, + 0xC449, 0xC44A, 0xB8AF, 0xB8AD, 0xC44B, 0xEBE8, + 0xC7BB, 0xCDF3, 0xC44C, 0xC44D, 0xC44E, 0xEBEA, + 0xEBEB, 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, + 0xEBED, 0xC454, 0xC455, 0xC456, 0xC457, 0xD0C8, + 0xC458, 0xEBF2, 0xC459, 0xEBEE, 0xC45A, 0xC45B, + 0xC45C, 0xEBF1, 0xC8F9, 0xC45D, 0xD1FC, 0xEBEC, + 0xC45E, 0xC45F, 0xEBE9, 0xC460, 0xC461, 0xC462, + 0xC463, 0xB8B9, 0xCFD9, 0xC4E5, 0xEBEF, 0xEBF0, + 0xCCDA, 0xCDC8, 0xB0F2, 0xC464, 0xEBF6, 0xC465, + 0xC466, 0xC467, 0xC468, 0xC469, 0xEBF5, 0xC46A, + 0xB2B2, 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xB8E0, + 0xC46F, 0xEBF7, 0xC470, 0xC471, 0xC472, 0xC473, + 0xC474, 0xC475, 0xB1EC, 0xC476, 0xC477, 0xCCC5, + 0xC4A4, 0xCFA5, 0xC478, 0xC479, 0xC47A, 0xC47B, + 0xC47C, 0xEBF9, 0xC47D, 0xC47E, 0xECA2, 0xC480, + 0xC5F2, 0xC481, 0xEBFA, 0xC482, 0xC483, 0xC484, + 0xC485, 0xC486, 0xC487, 0xC488, 0xC489, 0xC9C5, + 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, + 0xE2DF, 0xEBFE, 0xC490, 0xC491, 0xC492, 0xC493, + 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0xC494, 0xC495, + 0xD2DC, 0xC496, 0xC497, 0xC498, 0xEBFD, 0xC499, + 0xEBFB, 0xC49A, 0xC49B, 0xC49C, 0xC49D, 0xC49E, + 0xC49F, 0xC4A0, 0xC540, 0xC541, 0xC542, 0xC543, + 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, 0xC549, + 0xC54A, 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xB3BC, + 0xC54F, 0xC550, 0xC551, 0xEAB0, 0xC552, 0xC553, + 0xD7D4, 0xC554, 0xF4AB, 0xB3F4, 0xC555, 0xC556, + 0xC557, 0xC558, 0xC559, 0xD6C1, 0xD6C2, 0xC55A, + 0xC55B, 0xC55C, 0xC55D, 0xC55E, 0xC55F, 0xD5E9, + 0xBECA, 0xC560, 0xF4A7, 0xC561, 0xD2A8, 0xF4A8, + 0xF4A9, 0xC562, 0xF4AA, 0xBECB, 0xD3DF, 0xC563, + 0xC564, 0xC565, 0xC566, 0xC567, 0xC9E0, 0xC9E1, + 0xC568, 0xC569, 0xF3C2, 0xC56A, 0xCAE6, 0xC56B, + 0xCCF2, 0xC56C, 0xC56D, 0xC56E, 0xC56F, 0xC570, + 0xC571, 0xE2B6, 0xCBB4, 0xC572, 0xCEE8, 0xD6DB, + 0xC573, 0xF4AD, 0xF4AE, 0xF4AF, 0xC574, 0xC575, + 0xC576, 0xC577, 0xF4B2, 0xC578, 0xBABD, 0xF4B3, + 0xB0E3, 0xF4B0, 0xC579, 0xF4B1, 0xBDA2, 0xB2D5, + 0xC57A, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, + 0xF4B4, 0xB4AC, 0xC57B, 0xF4B5, 0xC57C, 0xC57D, + 0xF4B8, 0xC57E, 0xC580, 0xC581, 0xC582, 0xC583, + 0xF4B9, 0xC584, 0xC585, 0xCDA7, 0xC586, 0xF4BA, + 0xC587, 0xF4BB, 0xC588, 0xC589, 0xC58A, 0xF4BC, + 0xC58B, 0xC58C, 0xC58D, 0xC58E, 0xC58F, 0xC590, + 0xC591, 0xC592, 0xCBD2, 0xC593, 0xF4BD, 0xC594, + 0xC595, 0xC596, 0xC597, 0xF4BE, 0xC598, 0xC599, + 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, 0xC59F, + 0xF4BF, 0xC5A0, 0xC640, 0xC641, 0xC642, 0xC643, + 0xF4DE, 0xC1BC, 0xBCE8, 0xC644, 0xC9AB, 0xD1DE, + 0xE5F5, 0xC645, 0xC646, 0xC647, 0xC648, 0xDCB3, + 0xD2D5, 0xC649, 0xC64A, 0xDCB4, 0xB0AC, 0xDCB5, + 0xC64B, 0xC64C, 0xBDDA, 0xC64D, 0xDCB9, 0xC64E, + 0xC64F, 0xC650, 0xD8C2, 0xC651, 0xDCB7, 0xD3F3, + 0xC652, 0xC9D6, 0xDCBA, 0xDCB6, 0xC653, 0xDCBB, + 0xC3A2, 0xC654, 0xC655, 0xC656, 0xC657, 0xDCBC, + 0xDCC5, 0xDCBD, 0xC658, 0xC659, 0xCEDF, 0xD6A5, + 0xC65A, 0xDCCF, 0xC65B, 0xDCCD, 0xC65C, 0xC65D, + 0xDCD2, 0xBDE6, 0xC2AB, 0xC65E, 0xDCB8, 0xDCCB, + 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, + 0xDCC1, 0xBBA8, 0xC65F, 0xB7BC, 0xDCCC, 0xC660, + 0xC661, 0xDCC6, 0xDCBF, 0xC7DB, 0xC662, 0xC663, + 0xC664, 0xD1BF, 0xDCC0, 0xC665, 0xC666, 0xDCCA, + 0xC667, 0xC668, 0xDCD0, 0xC669, 0xC66A, 0xCEAD, + 0xDCC2, 0xC66B, 0xDCC3, 0xDCC8, 0xDCC9, 0xB2D4, + 0xDCD1, 0xCBD5, 0xC66C, 0xD4B7, 0xDCDB, 0xDCDF, + 0xCCA6, 0xDCE6, 0xC66D, 0xC3E7, 0xDCDC, 0xC66E, + 0xC66F, 0xBFC1, 0xDCD9, 0xC670, 0xB0FA, 0xB9B6, + 0xDCE5, 0xDCD3, 0xC671, 0xDCC4, 0xDCD6, 0xC8F4, + 0xBFE0, 0xC672, 0xC673, 0xC674, 0xC675, 0xC9BB, + 0xC676, 0xC677, 0xC678, 0xB1BD, 0xC679, 0xD3A2, + 0xC67A, 0xC67B, 0xDCDA, 0xC67C, 0xC67D, 0xDCD5, + 0xC67E, 0xC6BB, 0xC680, 0xDCDE, 0xC681, 0xC682, + 0xC683, 0xC684, 0xC685, 0xD7C2, 0xC3AF, 0xB7B6, + 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, 0xDCEB, 0xDCD4, + 0xC686, 0xC687, 0xDCDD, 0xC688, 0xBEA5, 0xDCD7, + 0xC689, 0xDCE0, 0xC68A, 0xC68B, 0xDCE3, 0xDCE4, + 0xC68C, 0xDCF8, 0xC68D, 0xC68E, 0xDCE1, 0xDDA2, + 0xDCE7, 0xC68F, 0xC690, 0xC691, 0xC692, 0xC693, + 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xBCEB, + 0xB4C4, 0xC699, 0xC69A, 0xC3A3, 0xB2E7, 0xDCFA, + 0xC69B, 0xDCF2, 0xC69C, 0xDCEF, 0xC69D, 0xDCFC, + 0xDCEE, 0xD2F0, 0xB2E8, 0xC69E, 0xC8D7, 0xC8E3, + 0xDCFB, 0xC69F, 0xDCED, 0xC6A0, 0xC740, 0xC741, + 0xDCF7, 0xC742, 0xC743, 0xDCF5, 0xC744, 0xC745, + 0xBEA3, 0xDCF4, 0xC746, 0xB2DD, 0xC747, 0xC748, + 0xC749, 0xC74A, 0xC74B, 0xDCF3, 0xBCF6, 0xDCE8, + 0xBBC4, 0xC74C, 0xC0F3, 0xC74D, 0xC74E, 0xC74F, + 0xC750, 0xC751, 0xBCD4, 0xDCE9, 0xDCEA, 0xC752, + 0xDCF1, 0xDCF6, 0xDCF9, 0xB5B4, 0xC753, 0xC8D9, + 0xBBE7, 0xDCFE, 0xDCFD, 0xD3AB, 0xDDA1, 0xDDA3, + 0xDDA5, 0xD2F1, 0xDDA4, 0xDDA6, 0xDDA7, 0xD2A9, + 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC759, + 0xC75A, 0xBAC9, 0xDDA9, 0xC75B, 0xC75C, 0xDDB6, + 0xDDB1, 0xDDB4, 0xC75D, 0xC75E, 0xC75F, 0xC760, + 0xC761, 0xC762, 0xC763, 0xDDB0, 0xC6CE, 0xC764, + 0xC765, 0xC0F2, 0xC766, 0xC767, 0xC768, 0xC769, + 0xC9AF, 0xC76A, 0xC76B, 0xC76C, 0xDCEC, 0xDDAE, + 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xDDB7, 0xC771, + 0xC772, 0xDCF0, 0xDDAF, 0xC773, 0xDDB8, 0xC774, + 0xDDAC, 0xC775, 0xC776, 0xC777, 0xC778, 0xC779, + 0xC77A, 0xC77B, 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, + 0xC77C, 0xC77D, 0xC77E, 0xC780, 0xDDA8, 0xC0B3, + 0xC1AB, 0xDDAA, 0xDDAB, 0xC781, 0xDDB2, 0xBBF1, + 0xDDB5, 0xD3A8, 0xDDBA, 0xC782, 0xDDBB, 0xC3A7, + 0xC783, 0xC784, 0xDDD2, 0xDDBC, 0xC785, 0xC786, + 0xC787, 0xDDD1, 0xC788, 0xB9BD, 0xC789, 0xC78A, + 0xBED5, 0xC78B, 0xBEFA, 0xC78C, 0xC78D, 0xBACA, + 0xC78E, 0xC78F, 0xC790, 0xC791, 0xDDCA, 0xC792, + 0xDDC5, 0xC793, 0xDDBF, 0xC794, 0xC795, 0xC796, + 0xB2CB, 0xDDC3, 0xC797, 0xDDCB, 0xB2A4, 0xDDD5, + 0xC798, 0xC799, 0xC79A, 0xDDBE, 0xC79B, 0xC79C, + 0xC79D, 0xC6D0, 0xDDD0, 0xC79E, 0xC79F, 0xC7A0, + 0xC840, 0xC841, 0xDDD4, 0xC1E2, 0xB7C6, 0xC842, + 0xC843, 0xC844, 0xC845, 0xC846, 0xDDCE, 0xDDCF, + 0xC847, 0xC848, 0xC849, 0xDDC4, 0xC84A, 0xC84B, + 0xC84C, 0xDDBD, 0xC84D, 0xDDCD, 0xCCD1, 0xC84E, + 0xDDC9, 0xC84F, 0xC850, 0xC851, 0xC852, 0xDDC2, + 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, 0xC853, 0xDDC8, + 0xC854, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, + 0xDDC1, 0xC85A, 0xC85B, 0xC85C, 0xDDC6, 0xC2DC, + 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, + 0xD3A9, 0xD3AA, 0xDDD3, 0xCFF4, 0xC8F8, 0xC863, + 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, + 0xC86A, 0xDDE6, 0xC86B, 0xC86C, 0xC86D, 0xC86E, + 0xC86F, 0xC870, 0xDDC7, 0xC871, 0xC872, 0xC873, + 0xDDE0, 0xC2E4, 0xC874, 0xC875, 0xC876, 0xC877, + 0xC878, 0xC879, 0xC87A, 0xC87B, 0xDDE1, 0xC87C, + 0xC87D, 0xC87E, 0xC880, 0xC881, 0xC882, 0xC883, + 0xC884, 0xC885, 0xC886, 0xDDD7, 0xC887, 0xC888, + 0xC889, 0xC88A, 0xC88B, 0xD6F8, 0xC88C, 0xDDD9, + 0xDDD8, 0xB8F0, 0xDDD6, 0xC88D, 0xC88E, 0xC88F, + 0xC890, 0xC6CF, 0xC891, 0xB6AD, 0xC892, 0xC893, + 0xC894, 0xC895, 0xC896, 0xDDE2, 0xC897, 0xBAF9, + 0xD4E1, 0xDDE7, 0xC898, 0xC899, 0xC89A, 0xB4D0, + 0xC89B, 0xDDDA, 0xC89C, 0xBFFB, 0xDDE3, 0xC89D, + 0xDDDF, 0xC89E, 0xDDDD, 0xC89F, 0xC8A0, 0xC940, + 0xC941, 0xC942, 0xC943, 0xC944, 0xB5D9, 0xC945, + 0xC946, 0xC947, 0xC948, 0xDDDB, 0xDDDC, 0xDDDE, + 0xC949, 0xBDAF, 0xDDE4, 0xC94A, 0xDDE5, 0xC94B, + 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0xC950, 0xC951, + 0xC952, 0xDDF5, 0xC953, 0xC3C9, 0xC954, 0xC955, + 0xCBE2, 0xC956, 0xC957, 0xC958, 0xC959, 0xDDF2, + 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E, 0xC95F, + 0xC960, 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, + 0xC966, 0xD8E1, 0xC967, 0xC968, 0xC6D1, 0xC969, + 0xDDF4, 0xC96A, 0xC96B, 0xC96C, 0xD5F4, 0xDDF3, + 0xDDF0, 0xC96D, 0xC96E, 0xDDEC, 0xC96F, 0xDDEF, + 0xC970, 0xDDE8, 0xC971, 0xC972, 0xD0EE, 0xC973, + 0xC974, 0xC975, 0xC976, 0xC8D8, 0xDDEE, 0xC977, + 0xC978, 0xDDE9, 0xC979, 0xC97A, 0xDDEA, 0xCBF2, + 0xC97B, 0xDDED, 0xC97C, 0xC97D, 0xB1CD, 0xC97E, + 0xC980, 0xC981, 0xC982, 0xC983, 0xC984, 0xC0B6, + 0xC985, 0xBCBB, 0xDDF1, 0xC986, 0xC987, 0xDDF7, + 0xC988, 0xDDF6, 0xDDEB, 0xC989, 0xC98A, 0xC98B, + 0xC98C, 0xC98D, 0xC5EE, 0xC98E, 0xC98F, 0xC990, + 0xDDFB, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, + 0xC996, 0xC997, 0xC998, 0xC999, 0xC99A, 0xC99B, + 0xDEA4, 0xC99C, 0xC99D, 0xDEA3, 0xC99E, 0xC99F, + 0xC9A0, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, + 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xDDF8, 0xCA49, + 0xCA4A, 0xCA4B, 0xCA4C, 0xC3EF, 0xCA4D, 0xC2FB, + 0xCA4E, 0xCA4F, 0xCA50, 0xD5E1, 0xCA51, 0xCA52, + 0xCEB5, 0xCA53, 0xCA54, 0xCA55, 0xCA56, 0xDDFD, + 0xCA57, 0xB2CC, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, + 0xCA5C, 0xCA5D, 0xCA5E, 0xCA5F, 0xCA60, 0xC4E8, + 0xCADF, 0xCA61, 0xCA62, 0xCA63, 0xCA64, 0xCA65, + 0xCA66, 0xCA67, 0xCA68, 0xCA69, 0xCA6A, 0xC7BE, + 0xDDFA, 0xDDFC, 0xDDFE, 0xDEA2, 0xB0AA, 0xB1CE, + 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xDEAC, + 0xCA70, 0xCA71, 0xCA72, 0xCA73, 0xDEA6, 0xBDB6, + 0xC8EF, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, + 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, 0xCA7E, + 0xDEA1, 0xCA80, 0xCA81, 0xDEA5, 0xCA82, 0xCA83, + 0xCA84, 0xCA85, 0xDEA9, 0xCA86, 0xCA87, 0xCA88, + 0xCA89, 0xCA8A, 0xDEA8, 0xCA8B, 0xCA8C, 0xCA8D, + 0xDEA7, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, + 0xCA93, 0xCA94, 0xCA95, 0xCA96, 0xDEAD, 0xCA97, + 0xD4CC, 0xCA98, 0xCA99, 0xCA9A, 0xCA9B, 0xDEB3, + 0xDEAA, 0xDEAE, 0xCA9C, 0xCA9D, 0xC0D9, 0xCA9E, + 0xCA9F, 0xCAA0, 0xCB40, 0xCB41, 0xB1A1, 0xDEB6, + 0xCB42, 0xDEB1, 0xCB43, 0xCB44, 0xCB45, 0xCB46, + 0xCB47, 0xCB48, 0xCB49, 0xDEB2, 0xCB4A, 0xCB4B, + 0xCB4C, 0xCB4D, 0xCB4E, 0xCB4F, 0xCB50, 0xCB51, + 0xCB52, 0xCB53, 0xCB54, 0xD1A6, 0xDEB5, 0xCB55, + 0xCB56, 0xCB57, 0xCB58, 0xCB59, 0xCB5A, 0xCB5B, + 0xDEAF, 0xCB5C, 0xCB5D, 0xCB5E, 0xDEB0, 0xCB5F, + 0xD0BD, 0xCB60, 0xCB61, 0xCB62, 0xDEB4, 0xCAED, + 0xDEB9, 0xCB63, 0xCB64, 0xCB65, 0xCB66, 0xCB67, + 0xCB68, 0xDEB8, 0xCB69, 0xDEB7, 0xCB6A, 0xCB6B, + 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xDEBB, + 0xCB71, 0xCB72, 0xCB73, 0xCB74, 0xCB75, 0xCB76, + 0xCB77, 0xBDE5, 0xCB78, 0xCB79, 0xCB7A, 0xCB7B, + 0xCB7C, 0xB2D8, 0xC3EA, 0xCB7D, 0xCB7E, 0xDEBA, + 0xCB80, 0xC5BA, 0xCB81, 0xCB82, 0xCB83, 0xCB84, + 0xCB85, 0xCB86, 0xDEBC, 0xCB87, 0xCB88, 0xCB89, + 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCCD9, 0xCB8E, + 0xCB8F, 0xCB90, 0xCB91, 0xB7AA, 0xCB92, 0xCB93, + 0xCB94, 0xCB95, 0xCB96, 0xCB97, 0xCB98, 0xCB99, + 0xCB9A, 0xCB9B, 0xCB9C, 0xCB9D, 0xCB9E, 0xCB9F, + 0xCBA0, 0xCC40, 0xCC41, 0xD4E5, 0xCC42, 0xCC43, + 0xCC44, 0xDEBD, 0xCC45, 0xCC46, 0xCC47, 0xCC48, + 0xCC49, 0xDEBF, 0xCC4A, 0xCC4B, 0xCC4C, 0xCC4D, + 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53, + 0xCC54, 0xC4A2, 0xCC55, 0xCC56, 0xCC57, 0xCC58, + 0xDEC1, 0xCC59, 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, + 0xCC5E, 0xCC5F, 0xCC60, 0xCC61, 0xCC62, 0xCC63, + 0xCC64, 0xCC65, 0xCC66, 0xCC67, 0xCC68, 0xDEBE, + 0xCC69, 0xDEC0, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, + 0xCC6E, 0xCC6F, 0xCC70, 0xCC71, 0xCC72, 0xCC73, + 0xCC74, 0xCC75, 0xCC76, 0xCC77, 0xD5BA, 0xCC78, + 0xCC79, 0xCC7A, 0xDEC2, 0xCC7B, 0xCC7C, 0xCC7D, + 0xCC7E, 0xCC80, 0xCC81, 0xCC82, 0xCC83, 0xCC84, + 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, + 0xCC8B, 0xF2AE, 0xBBA2, 0xC2B2, 0xC5B0, 0xC2C7, + 0xCC8C, 0xCC8D, 0xF2AF, 0xCC8E, 0xCC8F, 0xCC90, + 0xCC91, 0xCC92, 0xD0E9, 0xCC93, 0xCC94, 0xCC95, + 0xD3DD, 0xCC96, 0xCC97, 0xCC98, 0xEBBD, 0xCC99, + 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, 0xCC9E, 0xCC9F, + 0xCCA0, 0xB3E6, 0xF2B0, 0xCD40, 0xF2B1, 0xCD41, + 0xCD42, 0xCAAD, 0xCD43, 0xCD44, 0xCD45, 0xCD46, + 0xCD47, 0xCD48, 0xCD49, 0xBAE7, 0xF2B3, 0xF2B5, + 0xF2B4, 0xCBE4, 0xCFBA, 0xF2B2, 0xCAB4, 0xD2CF, + 0xC2EC, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, + 0xCD4F, 0xCD50, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, + 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, 0xF2BE, + 0xCD56, 0xB2CF, 0xCD57, 0xCD58, 0xCD59, 0xCD5A, + 0xCD5B, 0xCD5C, 0xD1C1, 0xF2BA, 0xCD5D, 0xCD5E, + 0xCD5F, 0xCD60, 0xCD61, 0xF2BC, 0xD4E9, 0xCD62, + 0xCD63, 0xF2BB, 0xF2B6, 0xF2BF, 0xF2BD, 0xCD64, + 0xF2B9, 0xCD65, 0xCD66, 0xF2C7, 0xF2C4, 0xF2C6, + 0xCD67, 0xCD68, 0xF2CA, 0xF2C2, 0xF2C0, 0xCD69, + 0xCD6A, 0xCD6B, 0xF2C5, 0xCD6C, 0xCD6D, 0xCD6E, + 0xCD6F, 0xCD70, 0xD6FB, 0xCD71, 0xCD72, 0xCD73, + 0xF2C1, 0xCD74, 0xC7F9, 0xC9DF, 0xCD75, 0xF2C8, + 0xB9C6, 0xB5B0, 0xCD76, 0xCD77, 0xF2C3, 0xF2C9, + 0xF2D0, 0xF2D6, 0xCD78, 0xCD79, 0xBBD7, 0xCD7A, + 0xCD7B, 0xCD7C, 0xF2D5, 0xCDDC, 0xCD7D, 0xD6EB, + 0xCD7E, 0xCD80, 0xF2D2, 0xF2D4, 0xCD81, 0xCD82, + 0xCD83, 0xCD84, 0xB8F2, 0xCD85, 0xCD86, 0xCD87, + 0xCD88, 0xF2CB, 0xCD89, 0xCD8A, 0xCD8B, 0xF2CE, + 0xC2F9, 0xCD8C, 0xD5DD, 0xF2CC, 0xF2CD, 0xF2CF, + 0xF2D3, 0xCD8D, 0xCD8E, 0xCD8F, 0xF2D9, 0xD3BC, + 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0xB6EA, 0xCD94, + 0xCAF1, 0xCD95, 0xB7E4, 0xF2D7, 0xCD96, 0xCD97, + 0xCD98, 0xF2D8, 0xF2DA, 0xF2DD, 0xF2DB, 0xCD99, + 0xCD9A, 0xF2DC, 0xCD9B, 0xCD9C, 0xCD9D, 0xCD9E, + 0xD1D1, 0xF2D1, 0xCD9F, 0xCDC9, 0xCDA0, 0xCECF, + 0xD6A9, 0xCE40, 0xF2E3, 0xCE41, 0xC3DB, 0xCE42, + 0xF2E0, 0xCE43, 0xCE44, 0xC0AF, 0xF2EC, 0xF2DE, + 0xCE45, 0xF2E1, 0xCE46, 0xCE47, 0xCE48, 0xF2E8, + 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xF2E2, 0xCE4D, + 0xCE4E, 0xF2E7, 0xCE4F, 0xCE50, 0xF2E6, 0xCE51, + 0xCE52, 0xF2E9, 0xCE53, 0xCE54, 0xCE55, 0xF2DF, + 0xCE56, 0xCE57, 0xF2E4, 0xF2EA, 0xCE58, 0xCE59, + 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE5E, 0xD3AC, + 0xF2E5, 0xB2F5, 0xCE5F, 0xCE60, 0xF2F2, 0xCE61, + 0xD0AB, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xF2F5, + 0xCE66, 0xCE67, 0xCE68, 0xBBC8, 0xCE69, 0xF2F9, + 0xCE6A, 0xCE6B, 0xCE6C, 0xCE6D, 0xCE6E, 0xCE6F, + 0xF2F0, 0xCE70, 0xCE71, 0xF2F6, 0xF2F8, 0xF2FA, + 0xCE72, 0xCE73, 0xCE74, 0xCE75, 0xCE76, 0xCE77, + 0xCE78, 0xCE79, 0xF2F3, 0xCE7A, 0xF2F1, 0xCE7B, + 0xCE7C, 0xCE7D, 0xBAFB, 0xCE7E, 0xB5FB, 0xCE80, + 0xCE81, 0xCE82, 0xCE83, 0xF2EF, 0xF2F7, 0xF2ED, + 0xF2EE, 0xCE84, 0xCE85, 0xCE86, 0xF2EB, 0xF3A6, + 0xCE87, 0xF3A3, 0xCE88, 0xCE89, 0xF3A2, 0xCE8A, + 0xCE8B, 0xF2F4, 0xCE8C, 0xC8DA, 0xCE8D, 0xCE8E, + 0xCE8F, 0xCE90, 0xCE91, 0xF2FB, 0xCE92, 0xCE93, + 0xCE94, 0xF3A5, 0xCE95, 0xCE96, 0xCE97, 0xCE98, + 0xCE99, 0xCE9A, 0xCE9B, 0xC3F8, 0xCE9C, 0xCE9D, + 0xCE9E, 0xCE9F, 0xCEA0, 0xCF40, 0xCF41, 0xCF42, + 0xF2FD, 0xCF43, 0xCF44, 0xF3A7, 0xF3A9, 0xF3A4, + 0xCF45, 0xF2FC, 0xCF46, 0xCF47, 0xCF48, 0xF3AB, + 0xCF49, 0xF3AA, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D, + 0xC2DD, 0xCF4E, 0xCF4F, 0xF3AE, 0xCF50, 0xCF51, + 0xF3B0, 0xCF52, 0xCF53, 0xCF54, 0xCF55, 0xCF56, + 0xF3A1, 0xCF57, 0xCF58, 0xCF59, 0xF3B1, 0xF3AC, + 0xCF5A, 0xCF5B, 0xCF5C, 0xCF5D, 0xCF5E, 0xF3AF, + 0xF2FE, 0xF3AD, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, + 0xCF63, 0xCF64, 0xCF65, 0xF3B2, 0xCF66, 0xCF67, + 0xCF68, 0xCF69, 0xF3B4, 0xCF6A, 0xCF6B, 0xCF6C, + 0xCF6D, 0xF3A8, 0xCF6E, 0xCF6F, 0xCF70, 0xCF71, + 0xF3B3, 0xCF72, 0xCF73, 0xCF74, 0xF3B5, 0xCF75, + 0xCF76, 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, + 0xCF7C, 0xCF7D, 0xCF7E, 0xD0B7, 0xCF80, 0xCF81, + 0xCF82, 0xCF83, 0xF3B8, 0xCF84, 0xCF85, 0xCF86, + 0xCF87, 0xD9F9, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, + 0xCF8C, 0xCF8D, 0xF3B9, 0xCF8E, 0xCF8F, 0xCF90, + 0xCF91, 0xCF92, 0xCF93, 0xCF94, 0xCF95, 0xF3B7, + 0xCF96, 0xC8E4, 0xF3B6, 0xCF97, 0xCF98, 0xCF99, + 0xCF9A, 0xF3BA, 0xCF9B, 0xCF9C, 0xCF9D, 0xCF9E, + 0xCF9F, 0xF3BB, 0xB4C0, 0xCFA0, 0xD040, 0xD041, + 0xD042, 0xD043, 0xD044, 0xD045, 0xD046, 0xD047, + 0xD048, 0xD049, 0xD04A, 0xD04B, 0xD04C, 0xD04D, + 0xEEC3, 0xD04E, 0xD04F, 0xD050, 0xD051, 0xD052, + 0xD053, 0xF3BC, 0xD054, 0xD055, 0xF3BD, 0xD056, + 0xD057, 0xD058, 0xD1AA, 0xD059, 0xD05A, 0xD05B, + 0xF4AC, 0xD0C6, 0xD05C, 0xD05D, 0xD05E, 0xD05F, + 0xD060, 0xD061, 0xD0D0, 0xD1DC, 0xD062, 0xD063, + 0xD064, 0xD065, 0xD066, 0xD067, 0xCFCE, 0xD068, + 0xD069, 0xBDD6, 0xD06A, 0xD1C3, 0xD06B, 0xD06C, + 0xD06D, 0xD06E, 0xD06F, 0xD070, 0xD071, 0xBAE2, + 0xE1E9, 0xD2C2, 0xF1C2, 0xB2B9, 0xD072, 0xD073, + 0xB1ED, 0xF1C3, 0xD074, 0xC9C0, 0xB3C4, 0xD075, + 0xD9F2, 0xD076, 0xCBA5, 0xD077, 0xF1C4, 0xD078, + 0xD079, 0xD07A, 0xD07B, 0xD6D4, 0xD07C, 0xD07D, + 0xD07E, 0xD080, 0xD081, 0xF1C5, 0xF4C0, 0xF1C6, + 0xD082, 0xD4AC, 0xF1C7, 0xD083, 0xB0C0, 0xF4C1, + 0xD084, 0xD085, 0xF4C2, 0xD086, 0xD087, 0xB4FC, + 0xD088, 0xC5DB, 0xD089, 0xD08A, 0xD08B, 0xD08C, + 0xCCBB, 0xD08D, 0xD08E, 0xD08F, 0xD0E4, 0xD090, + 0xD091, 0xD092, 0xD093, 0xD094, 0xCDE0, 0xD095, + 0xD096, 0xD097, 0xD098, 0xD099, 0xF1C8, 0xD09A, + 0xD9F3, 0xD09B, 0xD09C, 0xD09D, 0xD09E, 0xD09F, + 0xD0A0, 0xB1BB, 0xD140, 0xCFAE, 0xD141, 0xD142, + 0xD143, 0xB8A4, 0xD144, 0xD145, 0xD146, 0xD147, + 0xD148, 0xF1CA, 0xD149, 0xD14A, 0xD14B, 0xD14C, + 0xF1CB, 0xD14D, 0xD14E, 0xD14F, 0xD150, 0xB2C3, + 0xC1D1, 0xD151, 0xD152, 0xD7B0, 0xF1C9, 0xD153, + 0xD154, 0xF1CC, 0xD155, 0xD156, 0xD157, 0xD158, + 0xF1CE, 0xD159, 0xD15A, 0xD15B, 0xD9F6, 0xD15C, + 0xD2E1, 0xD4A3, 0xD15D, 0xD15E, 0xF4C3, 0xC8B9, + 0xD15F, 0xD160, 0xD161, 0xD162, 0xD163, 0xF4C4, + 0xD164, 0xD165, 0xF1CD, 0xF1CF, 0xBFE3, 0xF1D0, + 0xD166, 0xD167, 0xF1D4, 0xD168, 0xD169, 0xD16A, + 0xD16B, 0xD16C, 0xD16D, 0xD16E, 0xF1D6, 0xF1D1, + 0xD16F, 0xC9D1, 0xC5E1, 0xD170, 0xD171, 0xD172, + 0xC2E3, 0xB9FC, 0xD173, 0xD174, 0xF1D3, 0xD175, + 0xF1D5, 0xD176, 0xD177, 0xD178, 0xB9D3, 0xD179, + 0xD17A, 0xD17B, 0xD17C, 0xD17D, 0xD17E, 0xD180, + 0xF1DB, 0xD181, 0xD182, 0xD183, 0xD184, 0xD185, + 0xBAD6, 0xD186, 0xB0FD, 0xF1D9, 0xD187, 0xD188, + 0xD189, 0xD18A, 0xD18B, 0xF1D8, 0xF1D2, 0xF1DA, + 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xF1D7, + 0xD191, 0xD192, 0xD193, 0xC8EC, 0xD194, 0xD195, + 0xD196, 0xD197, 0xCDCA, 0xF1DD, 0xD198, 0xD199, + 0xD19A, 0xD19B, 0xE5BD, 0xD19C, 0xD19D, 0xD19E, + 0xF1DC, 0xD19F, 0xF1DE, 0xD1A0, 0xD240, 0xD241, + 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, + 0xD248, 0xF1DF, 0xD249, 0xD24A, 0xCFE5, 0xD24B, + 0xD24C, 0xD24D, 0xD24E, 0xD24F, 0xD250, 0xD251, + 0xD252, 0xD253, 0xD254, 0xD255, 0xD256, 0xD257, + 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, + 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, + 0xF4C5, 0xBDF3, 0xD264, 0xD265, 0xD266, 0xD267, + 0xD268, 0xD269, 0xF1E0, 0xD26A, 0xD26B, 0xD26C, + 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, + 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, + 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xF1E1, + 0xD27E, 0xD280, 0xD281, 0xCEF7, 0xD282, 0xD2AA, + 0xD283, 0xF1FB, 0xD284, 0xD285, 0xB8B2, 0xD286, + 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, + 0xD28D, 0xD28E, 0xD28F, 0xD290, 0xD291, 0xD292, + 0xD293, 0xD294, 0xD295, 0xD296, 0xD297, 0xD298, + 0xD299, 0xD29A, 0xD29B, 0xD29C, 0xD29D, 0xD29E, + 0xD29F, 0xD2A0, 0xD340, 0xD341, 0xD342, 0xD343, + 0xD344, 0xD345, 0xD346, 0xD347, 0xD348, 0xD349, + 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, + 0xD350, 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, + 0xD356, 0xD357, 0xD358, 0xD359, 0xD35A, 0xD35B, + 0xD35C, 0xD35D, 0xD35E, 0xBCFB, 0xB9DB, 0xD35F, + 0xB9E6, 0xC3D9, 0xCAD3, 0xEAE8, 0xC0C0, 0xBEF5, + 0xEAE9, 0xEAEA, 0xEAEB, 0xD360, 0xEAEC, 0xEAED, + 0xEAEE, 0xEAEF, 0xBDC7, 0xD361, 0xD362, 0xD363, + 0xF5FB, 0xD364, 0xD365, 0xD366, 0xF5FD, 0xD367, + 0xF5FE, 0xD368, 0xF5FC, 0xD369, 0xD36A, 0xD36B, + 0xD36C, 0xBDE2, 0xD36D, 0xF6A1, 0xB4A5, 0xD36E, + 0xD36F, 0xD370, 0xD371, 0xF6A2, 0xD372, 0xD373, + 0xD374, 0xF6A3, 0xD375, 0xD376, 0xD377, 0xECB2, + 0xD378, 0xD379, 0xD37A, 0xD37B, 0xD37C, 0xD37D, + 0xD37E, 0xD380, 0xD381, 0xD382, 0xD383, 0xD384, + 0xD1D4, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, + 0xD38A, 0xD9EA, 0xD38B, 0xD38C, 0xD38D, 0xD38E, + 0xD38F, 0xD390, 0xD391, 0xD392, 0xD393, 0xD394, + 0xD395, 0xD396, 0xD397, 0xD398, 0xD399, 0xD39A, + 0xD39B, 0xD39C, 0xD39D, 0xD39E, 0xD39F, 0xD3A0, + 0xD440, 0xD441, 0xD442, 0xD443, 0xD444, 0xD445, + 0xD446, 0xD447, 0xD448, 0xD449, 0xD44A, 0xD44B, + 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, 0xD451, + 0xD452, 0xD453, 0xD454, 0xD455, 0xD456, 0xD457, + 0xD458, 0xD459, 0xD45A, 0xD45B, 0xD45C, 0xD45D, + 0xD45E, 0xD45F, 0xF6A4, 0xD460, 0xD461, 0xD462, + 0xD463, 0xD464, 0xD465, 0xD466, 0xD467, 0xD468, + 0xEEBA, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46D, + 0xD46E, 0xD46F, 0xD470, 0xD471, 0xD472, 0xD473, + 0xD474, 0xD475, 0xD476, 0xD477, 0xD478, 0xD479, + 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0xD47E, 0xD480, + 0xD481, 0xD482, 0xD483, 0xD484, 0xD485, 0xD486, + 0xD487, 0xD488, 0xD489, 0xD48A, 0xD48B, 0xD48C, + 0xD48D, 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, + 0xD493, 0xD494, 0xD495, 0xD496, 0xD497, 0xD498, + 0xD499, 0xD5B2, 0xD49A, 0xD49B, 0xD49C, 0xD49D, + 0xD49E, 0xD49F, 0xD4A0, 0xD540, 0xD541, 0xD542, + 0xD543, 0xD544, 0xD545, 0xD546, 0xD547, 0xD3FE, + 0xCCDC, 0xD548, 0xD549, 0xD54A, 0xD54B, 0xD54C, + 0xD54D, 0xD54E, 0xD54F, 0xCAC4, 0xD550, 0xD551, + 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, 0xD557, + 0xD558, 0xD559, 0xD55A, 0xD55B, 0xD55C, 0xD55D, + 0xD55E, 0xD55F, 0xD560, 0xD561, 0xD562, 0xD563, + 0xD564, 0xD565, 0xD566, 0xD567, 0xD568, 0xD569, + 0xD56A, 0xD56B, 0xD56C, 0xD56D, 0xD56E, 0xD56F, + 0xD570, 0xD571, 0xD572, 0xD573, 0xD574, 0xD575, + 0xD576, 0xD577, 0xD578, 0xD579, 0xD57A, 0xD57B, + 0xD57C, 0xD57D, 0xD57E, 0xD580, 0xD581, 0xD582, + 0xD583, 0xD584, 0xD585, 0xD586, 0xD587, 0xD588, + 0xD589, 0xD58A, 0xD58B, 0xD58C, 0xD58D, 0xD58E, + 0xD58F, 0xD590, 0xD591, 0xD592, 0xD593, 0xD594, + 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, + 0xD59B, 0xD59C, 0xD59D, 0xD59E, 0xD59F, 0xD5A0, + 0xD640, 0xD641, 0xD642, 0xD643, 0xD644, 0xD645, + 0xD646, 0xD647, 0xD648, 0xD649, 0xD64A, 0xD64B, + 0xD64C, 0xD64D, 0xD64E, 0xD64F, 0xD650, 0xD651, + 0xD652, 0xD653, 0xD654, 0xD655, 0xD656, 0xD657, + 0xD658, 0xD659, 0xD65A, 0xD65B, 0xD65C, 0xD65D, + 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662, 0xE5C0, + 0xD663, 0xD664, 0xD665, 0xD666, 0xD667, 0xD668, + 0xD669, 0xD66A, 0xD66B, 0xD66C, 0xD66D, 0xD66E, + 0xD66F, 0xD670, 0xD671, 0xD672, 0xD673, 0xD674, + 0xD675, 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, + 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0xD680, 0xD681, + 0xF6A5, 0xD682, 0xD683, 0xD684, 0xD685, 0xD686, + 0xD687, 0xD688, 0xD689, 0xD68A, 0xD68B, 0xD68C, + 0xD68D, 0xD68E, 0xD68F, 0xD690, 0xD691, 0xD692, + 0xD693, 0xD694, 0xD695, 0xD696, 0xD697, 0xD698, + 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69D, 0xD69E, + 0xD69F, 0xD6A0, 0xD740, 0xD741, 0xD742, 0xD743, + 0xD744, 0xD745, 0xD746, 0xD747, 0xD748, 0xD749, + 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, + 0xD750, 0xD751, 0xD752, 0xD753, 0xD754, 0xD755, + 0xD756, 0xD757, 0xD758, 0xD759, 0xD75A, 0xD75B, + 0xD75C, 0xD75D, 0xD75E, 0xD75F, 0xBEAF, 0xD760, + 0xD761, 0xD762, 0xD763, 0xD764, 0xC6A9, 0xD765, + 0xD766, 0xD767, 0xD768, 0xD769, 0xD76A, 0xD76B, + 0xD76C, 0xD76D, 0xD76E, 0xD76F, 0xD770, 0xD771, + 0xD772, 0xD773, 0xD774, 0xD775, 0xD776, 0xD777, + 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77C, 0xD77D, + 0xD77E, 0xD780, 0xD781, 0xD782, 0xD783, 0xD784, + 0xD785, 0xD786, 0xD787, 0xD788, 0xD789, 0xD78A, + 0xD78B, 0xD78C, 0xD78D, 0xD78E, 0xD78F, 0xD790, + 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, 0xD796, + 0xD797, 0xD798, 0xDAA5, 0xBCC6, 0xB6A9, 0xB8BC, + 0xC8CF, 0xBCA5, 0xDAA6, 0xDAA7, 0xCCD6, 0xC8C3, + 0xDAA8, 0xC6FD, 0xD799, 0xD1B5, 0xD2E9, 0xD1B6, + 0xBCC7, 0xD79A, 0xBDB2, 0xBBE4, 0xDAA9, 0xDAAA, + 0xD1C8, 0xDAAB, 0xD0ED, 0xB6EF, 0xC2DB, 0xD79B, + 0xCBCF, 0xB7ED, 0xC9E8, 0xB7C3, 0xBEF7, 0xD6A4, + 0xDAAC, 0xDAAD, 0xC6C0, 0xD7E7, 0xCAB6, 0xD79C, + 0xD5A9, 0xCBDF, 0xD5EF, 0xDAAE, 0xD6DF, 0xB4CA, + 0xDAB0, 0xDAAF, 0xD79D, 0xD2EB, 0xDAB1, 0xDAB2, + 0xDAB3, 0xCAD4, 0xDAB4, 0xCAAB, 0xDAB5, 0xDAB6, + 0xB3CF, 0xD6EF, 0xDAB7, 0xBBB0, 0xB5AE, 0xDAB8, + 0xDAB9, 0xB9EE, 0xD1AF, 0xD2E8, 0xDABA, 0xB8C3, + 0xCFEA, 0xB2EF, 0xDABB, 0xDABC, 0xD79E, 0xBDEB, + 0xCEDC, 0xD3EF, 0xDABD, 0xCEF3, 0xDABE, 0xD3D5, + 0xBBE5, 0xDABF, 0xCBB5, 0xCBD0, 0xDAC0, 0xC7EB, + 0xD6EE, 0xDAC1, 0xC5B5, 0xB6C1, 0xDAC2, 0xB7CC, + 0xBFCE, 0xDAC3, 0xDAC4, 0xCBAD, 0xDAC5, 0xB5F7, + 0xDAC6, 0xC1C2, 0xD7BB, 0xDAC7, 0xCCB8, 0xD79F, + 0xD2EA, 0xC4B1, 0xDAC8, 0xB5FD, 0xBBD1, 0xDAC9, + 0xD0B3, 0xDACA, 0xDACB, 0xCEBD, 0xDACC, 0xDACD, + 0xDACE, 0xB2F7, 0xDAD1, 0xDACF, 0xD1E8, 0xDAD0, + 0xC3D5, 0xDAD2, 0xD7A0, 0xDAD3, 0xDAD4, 0xDAD5, + 0xD0BB, 0xD2A5, 0xB0F9, 0xDAD6, 0xC7AB, 0xDAD7, + 0xBDF7, 0xC3A1, 0xDAD8, 0xDAD9, 0xC3FD, 0xCCB7, + 0xDADA, 0xDADB, 0xC0BE, 0xC6D7, 0xDADC, 0xDADD, + 0xC7B4, 0xDADE, 0xDADF, 0xB9C8, 0xD840, 0xD841, + 0xD842, 0xD843, 0xD844, 0xD845, 0xD846, 0xD847, + 0xD848, 0xBBED, 0xD849, 0xD84A, 0xD84B, 0xD84C, + 0xB6B9, 0xF4F8, 0xD84D, 0xF4F9, 0xD84E, 0xD84F, + 0xCDE3, 0xD850, 0xD851, 0xD852, 0xD853, 0xD854, + 0xD855, 0xD856, 0xD857, 0xF5B9, 0xD858, 0xD859, + 0xD85A, 0xD85B, 0xEBE0, 0xD85C, 0xD85D, 0xD85E, + 0xD85F, 0xD860, 0xD861, 0xCFF3, 0xBBBF, 0xD862, + 0xD863, 0xD864, 0xD865, 0xD866, 0xD867, 0xD868, + 0xBAC0, 0xD4A5, 0xD869, 0xD86A, 0xD86B, 0xD86C, + 0xD86D, 0xD86E, 0xD86F, 0xE1D9, 0xD870, 0xD871, + 0xD872, 0xD873, 0xF5F4, 0xB1AA, 0xB2F2, 0xD874, + 0xD875, 0xD876, 0xD877, 0xD878, 0xD879, 0xD87A, + 0xF5F5, 0xD87B, 0xD87C, 0xF5F7, 0xD87D, 0xD87E, + 0xD880, 0xBAD1, 0xF5F6, 0xD881, 0xC3B2, 0xD882, + 0xD883, 0xD884, 0xD885, 0xD886, 0xD887, 0xD888, + 0xF5F9, 0xD889, 0xD88A, 0xD88B, 0xF5F8, 0xD88C, + 0xD88D, 0xD88E, 0xD88F, 0xD890, 0xD891, 0xD892, + 0xD893, 0xD894, 0xD895, 0xD896, 0xD897, 0xD898, + 0xD899, 0xD89A, 0xD89B, 0xD89C, 0xD89D, 0xD89E, + 0xD89F, 0xD8A0, 0xD940, 0xD941, 0xD942, 0xD943, + 0xD944, 0xD945, 0xD946, 0xD947, 0xD948, 0xD949, + 0xD94A, 0xD94B, 0xD94C, 0xD94D, 0xD94E, 0xD94F, + 0xD950, 0xD951, 0xD952, 0xD953, 0xD954, 0xD955, + 0xD956, 0xD957, 0xD958, 0xD959, 0xD95A, 0xD95B, + 0xD95C, 0xD95D, 0xD95E, 0xD95F, 0xD960, 0xD961, + 0xD962, 0xD963, 0xD964, 0xD965, 0xD966, 0xD967, + 0xD968, 0xD969, 0xD96A, 0xD96B, 0xD96C, 0xD96D, + 0xD96E, 0xD96F, 0xD970, 0xD971, 0xD972, 0xD973, + 0xD974, 0xD975, 0xD976, 0xD977, 0xD978, 0xD979, + 0xD97A, 0xD97B, 0xD97C, 0xD97D, 0xD97E, 0xD980, + 0xD981, 0xD982, 0xD983, 0xD984, 0xD985, 0xD986, + 0xD987, 0xD988, 0xD989, 0xD98A, 0xD98B, 0xD98C, + 0xD98D, 0xD98E, 0xD98F, 0xD990, 0xD991, 0xD992, + 0xD993, 0xD994, 0xD995, 0xD996, 0xD997, 0xD998, + 0xD999, 0xD99A, 0xD99B, 0xD99C, 0xD99D, 0xD99E, + 0xD99F, 0xD9A0, 0xDA40, 0xDA41, 0xDA42, 0xDA43, + 0xDA44, 0xDA45, 0xDA46, 0xDA47, 0xDA48, 0xDA49, + 0xDA4A, 0xDA4B, 0xDA4C, 0xDA4D, 0xDA4E, 0xB1B4, + 0xD5EA, 0xB8BA, 0xDA4F, 0xB9B1, 0xB2C6, 0xD4F0, + 0xCFCD, 0xB0DC, 0xD5CB, 0xBBF5, 0xD6CA, 0xB7B7, + 0xCCB0, 0xC6B6, 0xB1E1, 0xB9BA, 0xD6FC, 0xB9E1, + 0xB7A1, 0xBCFA, 0xEADA, 0xEADB, 0xCCF9, 0xB9F3, + 0xEADC, 0xB4FB, 0xC3B3, 0xB7D1, 0xBAD8, 0xEADD, + 0xD4F4, 0xEADE, 0xBCD6, 0xBBDF, 0xEADF, 0xC1DE, + 0xC2B8, 0xD4DF, 0xD7CA, 0xEAE0, 0xEAE1, 0xEAE4, + 0xEAE2, 0xEAE3, 0xC9DE, 0xB8B3, 0xB6C4, 0xEAE5, + 0xCAEA, 0xC9CD, 0xB4CD, 0xDA50, 0xDA51, 0xE2D9, + 0xC5E2, 0xEAE6, 0xC0B5, 0xDA52, 0xD7B8, 0xEAE7, + 0xD7AC, 0xC8FC, 0xD8D3, 0xD8CD, 0xD4DE, 0xDA53, + 0xD4F9, 0xC9C4, 0xD3AE, 0xB8D3, 0xB3E0, 0xDA54, + 0xC9E2, 0xF4F6, 0xDA55, 0xDA56, 0xDA57, 0xBAD5, + 0xDA58, 0xF4F7, 0xDA59, 0xDA5A, 0xD7DF, 0xDA5B, + 0xDA5C, 0xF4F1, 0xB8B0, 0xD5D4, 0xB8CF, 0xC6F0, + 0xDA5D, 0xDA5E, 0xDA5F, 0xDA60, 0xDA61, 0xDA62, + 0xDA63, 0xDA64, 0xDA65, 0xB3C3, 0xDA66, 0xDA67, + 0xF4F2, 0xB3AC, 0xDA68, 0xDA69, 0xDA6A, 0xDA6B, + 0xD4BD, 0xC7F7, 0xDA6C, 0xDA6D, 0xDA6E, 0xDA6F, + 0xDA70, 0xF4F4, 0xDA71, 0xDA72, 0xF4F3, 0xDA73, + 0xDA74, 0xDA75, 0xDA76, 0xDA77, 0xDA78, 0xDA79, + 0xDA7A, 0xDA7B, 0xDA7C, 0xCCCB, 0xDA7D, 0xDA7E, + 0xDA80, 0xC8A4, 0xDA81, 0xDA82, 0xDA83, 0xDA84, + 0xDA85, 0xDA86, 0xDA87, 0xDA88, 0xDA89, 0xDA8A, + 0xDA8B, 0xDA8C, 0xDA8D, 0xF4F5, 0xDA8E, 0xD7E3, + 0xC5BF, 0xF5C0, 0xDA8F, 0xDA90, 0xF5BB, 0xDA91, + 0xF5C3, 0xDA92, 0xF5C2, 0xDA93, 0xD6BA, 0xF5C1, + 0xDA94, 0xDA95, 0xDA96, 0xD4BE, 0xF5C4, 0xDA97, + 0xF5CC, 0xDA98, 0xDA99, 0xDA9A, 0xDA9B, 0xB0CF, + 0xB5F8, 0xDA9C, 0xF5C9, 0xF5CA, 0xDA9D, 0xC5DC, + 0xDA9E, 0xDA9F, 0xDAA0, 0xDB40, 0xF5C5, 0xF5C6, + 0xDB41, 0xDB42, 0xF5C7, 0xF5CB, 0xDB43, 0xBEE0, + 0xF5C8, 0xB8FA, 0xDB44, 0xDB45, 0xDB46, 0xF5D0, + 0xF5D3, 0xDB47, 0xDB48, 0xDB49, 0xBFE7, 0xDB4A, + 0xB9F2, 0xF5BC, 0xF5CD, 0xDB4B, 0xDB4C, 0xC2B7, + 0xDB4D, 0xDB4E, 0xDB4F, 0xCCF8, 0xDB50, 0xBCF9, + 0xDB51, 0xF5CE, 0xF5CF, 0xF5D1, 0xB6E5, 0xF5D2, + 0xDB52, 0xF5D5, 0xDB53, 0xDB54, 0xDB55, 0xDB56, + 0xDB57, 0xDB58, 0xDB59, 0xF5BD, 0xDB5A, 0xDB5B, + 0xDB5C, 0xF5D4, 0xD3BB, 0xDB5D, 0xB3EC, 0xDB5E, + 0xDB5F, 0xCCA4, 0xDB60, 0xDB61, 0xDB62, 0xDB63, + 0xF5D6, 0xDB64, 0xDB65, 0xDB66, 0xDB67, 0xDB68, + 0xDB69, 0xDB6A, 0xDB6B, 0xF5D7, 0xBEE1, 0xF5D8, + 0xDB6C, 0xDB6D, 0xCCDF, 0xF5DB, 0xDB6E, 0xDB6F, + 0xDB70, 0xDB71, 0xDB72, 0xB2C8, 0xD7D9, 0xDB73, + 0xF5D9, 0xDB74, 0xF5DA, 0xF5DC, 0xDB75, 0xF5E2, + 0xDB76, 0xDB77, 0xDB78, 0xF5E0, 0xDB79, 0xDB7A, + 0xDB7B, 0xF5DF, 0xF5DD, 0xDB7C, 0xDB7D, 0xF5E1, + 0xDB7E, 0xDB80, 0xF5DE, 0xF5E4, 0xF5E5, 0xDB81, + 0xCCE3, 0xDB82, 0xDB83, 0xE5BF, 0xB5B8, 0xF5E3, + 0xF5E8, 0xCCA3, 0xDB84, 0xDB85, 0xDB86, 0xDB87, + 0xDB88, 0xF5E6, 0xF5E7, 0xDB89, 0xDB8A, 0xDB8B, + 0xDB8C, 0xDB8D, 0xDB8E, 0xF5BE, 0xDB8F, 0xDB90, + 0xDB91, 0xDB92, 0xDB93, 0xDB94, 0xDB95, 0xDB96, + 0xDB97, 0xDB98, 0xDB99, 0xDB9A, 0xB1C4, 0xDB9B, + 0xDB9C, 0xF5BF, 0xDB9D, 0xDB9E, 0xB5C5, 0xB2E4, + 0xDB9F, 0xF5EC, 0xF5E9, 0xDBA0, 0xB6D7, 0xDC40, + 0xF5ED, 0xDC41, 0xF5EA, 0xDC42, 0xDC43, 0xDC44, + 0xDC45, 0xDC46, 0xF5EB, 0xDC47, 0xDC48, 0xB4DA, + 0xDC49, 0xD4EA, 0xDC4A, 0xDC4B, 0xDC4C, 0xF5EE, + 0xDC4D, 0xB3F9, 0xDC4E, 0xDC4F, 0xDC50, 0xDC51, + 0xDC52, 0xDC53, 0xDC54, 0xF5EF, 0xF5F1, 0xDC55, + 0xDC56, 0xDC57, 0xF5F0, 0xDC58, 0xDC59, 0xDC5A, + 0xDC5B, 0xDC5C, 0xDC5D, 0xDC5E, 0xF5F2, 0xDC5F, + 0xF5F3, 0xDC60, 0xDC61, 0xDC62, 0xDC63, 0xDC64, + 0xDC65, 0xDC66, 0xDC67, 0xDC68, 0xDC69, 0xDC6A, + 0xDC6B, 0xC9ED, 0xB9AA, 0xDC6C, 0xDC6D, 0xC7FB, + 0xDC6E, 0xDC6F, 0xB6E3, 0xDC70, 0xDC71, 0xDC72, + 0xDC73, 0xDC74, 0xDC75, 0xDC76, 0xCCC9, 0xDC77, + 0xDC78, 0xDC79, 0xDC7A, 0xDC7B, 0xDC7C, 0xDC7D, + 0xDC7E, 0xDC80, 0xDC81, 0xDC82, 0xDC83, 0xDC84, + 0xDC85, 0xDC86, 0xDC87, 0xDC88, 0xDC89, 0xDC8A, + 0xEAA6, 0xDC8B, 0xDC8C, 0xDC8D, 0xDC8E, 0xDC8F, + 0xDC90, 0xDC91, 0xDC92, 0xDC93, 0xDC94, 0xDC95, + 0xDC96, 0xDC97, 0xDC98, 0xDC99, 0xDC9A, 0xDC9B, + 0xDC9C, 0xDC9D, 0xDC9E, 0xDC9F, 0xDCA0, 0xDD40, + 0xDD41, 0xDD42, 0xDD43, 0xDD44, 0xDD45, 0xDD46, + 0xDD47, 0xDD48, 0xDD49, 0xDD4A, 0xDD4B, 0xDD4C, + 0xDD4D, 0xDD4E, 0xDD4F, 0xDD50, 0xDD51, 0xDD52, + 0xDD53, 0xDD54, 0xDD55, 0xDD56, 0xDD57, 0xDD58, + 0xDD59, 0xDD5A, 0xDD5B, 0xDD5C, 0xDD5D, 0xDD5E, + 0xDD5F, 0xDD60, 0xDD61, 0xDD62, 0xDD63, 0xDD64, + 0xDD65, 0xDD66, 0xDD67, 0xDD68, 0xDD69, 0xDD6A, + 0xDD6B, 0xDD6C, 0xDD6D, 0xDD6E, 0xDD6F, 0xDD70, + 0xDD71, 0xDD72, 0xDD73, 0xDD74, 0xDD75, 0xDD76, + 0xDD77, 0xDD78, 0xDD79, 0xDD7A, 0xDD7B, 0xDD7C, + 0xDD7D, 0xDD7E, 0xDD80, 0xDD81, 0xDD82, 0xDD83, + 0xDD84, 0xDD85, 0xDD86, 0xDD87, 0xDD88, 0xDD89, + 0xDD8A, 0xDD8B, 0xDD8C, 0xDD8D, 0xDD8E, 0xDD8F, + 0xDD90, 0xDD91, 0xDD92, 0xDD93, 0xDD94, 0xDD95, + 0xDD96, 0xDD97, 0xDD98, 0xDD99, 0xDD9A, 0xDD9B, + 0xDD9C, 0xDD9D, 0xDD9E, 0xDD9F, 0xDDA0, 0xDE40, + 0xDE41, 0xDE42, 0xDE43, 0xDE44, 0xDE45, 0xDE46, + 0xDE47, 0xDE48, 0xDE49, 0xDE4A, 0xDE4B, 0xDE4C, + 0xDE4D, 0xDE4E, 0xDE4F, 0xDE50, 0xDE51, 0xDE52, + 0xDE53, 0xDE54, 0xDE55, 0xDE56, 0xDE57, 0xDE58, + 0xDE59, 0xDE5A, 0xDE5B, 0xDE5C, 0xDE5D, 0xDE5E, + 0xDE5F, 0xDE60, 0xB3B5, 0xD4FE, 0xB9EC, 0xD0F9, + 0xDE61, 0xE9ED, 0xD7AA, 0xE9EE, 0xC2D6, 0xC8ED, + 0xBAE4, 0xE9EF, 0xE9F0, 0xE9F1, 0xD6E1, 0xE9F2, + 0xE9F3, 0xE9F5, 0xE9F4, 0xE9F6, 0xE9F7, 0xC7E1, + 0xE9F8, 0xD4D8, 0xE9F9, 0xBDCE, 0xDE62, 0xE9FA, + 0xE9FB, 0xBDCF, 0xE9FC, 0xB8A8, 0xC1BE, 0xE9FD, + 0xB1B2, 0xBBD4, 0xB9F5, 0xE9FE, 0xDE63, 0xEAA1, + 0xEAA2, 0xEAA3, 0xB7F8, 0xBCAD, 0xDE64, 0xCAE4, + 0xE0CE, 0xD4AF, 0xCFBD, 0xD5B7, 0xEAA4, 0xD5DE, + 0xEAA5, 0xD0C1, 0xB9BC, 0xDE65, 0xB4C7, 0xB1D9, + 0xDE66, 0xDE67, 0xDE68, 0xC0B1, 0xDE69, 0xDE6A, + 0xDE6B, 0xDE6C, 0xB1E6, 0xB1E7, 0xDE6D, 0xB1E8, + 0xDE6E, 0xDE6F, 0xDE70, 0xDE71, 0xB3BD, 0xC8E8, + 0xDE72, 0xDE73, 0xDE74, 0xDE75, 0xE5C1, 0xDE76, + 0xDE77, 0xB1DF, 0xDE78, 0xDE79, 0xDE7A, 0xC1C9, + 0xB4EF, 0xDE7B, 0xDE7C, 0xC7A8, 0xD3D8, 0xDE7D, + 0xC6F9, 0xD1B8, 0xDE7E, 0xB9FD, 0xC2F5, 0xDE80, + 0xDE81, 0xDE82, 0xDE83, 0xDE84, 0xD3AD, 0xDE85, + 0xD4CB, 0xBDFC, 0xDE86, 0xE5C2, 0xB7B5, 0xE5C3, + 0xDE87, 0xDE88, 0xBBB9, 0xD5E2, 0xDE89, 0xBDF8, + 0xD4B6, 0xCEA5, 0xC1AC, 0xB3D9, 0xDE8A, 0xDE8B, + 0xCCF6, 0xDE8C, 0xE5C6, 0xE5C4, 0xE5C8, 0xDE8D, + 0xE5CA, 0xE5C7, 0xB5CF, 0xC6C8, 0xDE8E, 0xB5FC, + 0xE5C5, 0xDE8F, 0xCAF6, 0xDE90, 0xDE91, 0xE5C9, + 0xDE92, 0xDE93, 0xDE94, 0xC3D4, 0xB1C5, 0xBCA3, + 0xDE95, 0xDE96, 0xDE97, 0xD7B7, 0xDE98, 0xDE99, + 0xCDCB, 0xCBCD, 0xCACA, 0xCCD3, 0xE5CC, 0xE5CB, + 0xC4E6, 0xDE9A, 0xDE9B, 0xD1A1, 0xD1B7, 0xE5CD, + 0xDE9C, 0xE5D0, 0xDE9D, 0xCDB8, 0xD6F0, 0xE5CF, + 0xB5DD, 0xDE9E, 0xCDBE, 0xDE9F, 0xE5D1, 0xB6BA, + 0xDEA0, 0xDF40, 0xCDA8, 0xB9E4, 0xDF41, 0xCAC5, + 0xB3D1, 0xCBD9, 0xD4EC, 0xE5D2, 0xB7EA, 0xDF42, + 0xDF43, 0xDF44, 0xE5CE, 0xDF45, 0xDF46, 0xDF47, + 0xDF48, 0xDF49, 0xDF4A, 0xE5D5, 0xB4FE, 0xE5D6, + 0xDF4B, 0xDF4C, 0xDF4D, 0xDF4E, 0xDF4F, 0xE5D3, + 0xE5D4, 0xDF50, 0xD2DD, 0xDF51, 0xDF52, 0xC2DF, + 0xB1C6, 0xDF53, 0xD3E2, 0xDF54, 0xDF55, 0xB6DD, + 0xCBEC, 0xDF56, 0xE5D7, 0xDF57, 0xDF58, 0xD3F6, + 0xDF59, 0xDF5A, 0xDF5B, 0xDF5C, 0xDF5D, 0xB1E9, + 0xDF5E, 0xB6F4, 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, + 0xDF5F, 0xDF60, 0xDF61, 0xD2C5, 0xE5DC, 0xDF62, + 0xDF63, 0xE5DE, 0xDF64, 0xDF65, 0xDF66, 0xDF67, + 0xDF68, 0xDF69, 0xE5DD, 0xC7B2, 0xDF6A, 0xD2A3, + 0xDF6B, 0xDF6C, 0xE5DB, 0xDF6D, 0xDF6E, 0xDF6F, + 0xDF70, 0xD4E2, 0xD5DA, 0xDF71, 0xDF72, 0xDF73, + 0xDF74, 0xDF75, 0xE5E0, 0xD7F1, 0xDF76, 0xDF77, + 0xDF78, 0xDF79, 0xDF7A, 0xDF7B, 0xDF7C, 0xE5E1, + 0xDF7D, 0xB1DC, 0xD1FB, 0xDF7E, 0xE5E2, 0xE5E4, + 0xDF80, 0xDF81, 0xDF82, 0xDF83, 0xE5E3, 0xDF84, + 0xDF85, 0xE5E5, 0xDF86, 0xDF87, 0xDF88, 0xDF89, + 0xDF8A, 0xD2D8, 0xDF8B, 0xB5CB, 0xDF8C, 0xE7DF, + 0xDF8D, 0xDAF5, 0xDF8E, 0xDAF8, 0xDF8F, 0xDAF6, + 0xDF90, 0xDAF7, 0xDF91, 0xDF92, 0xDF93, 0xDAFA, + 0xD0CF, 0xC4C7, 0xDF94, 0xDF95, 0xB0EE, 0xDF96, + 0xDF97, 0xDF98, 0xD0B0, 0xDF99, 0xDAF9, 0xDF9A, + 0xD3CA, 0xBAAA, 0xDBA2, 0xC7F1, 0xDF9B, 0xDAFC, + 0xDAFB, 0xC9DB, 0xDAFD, 0xDF9C, 0xDBA1, 0xD7DE, + 0xDAFE, 0xC1DA, 0xDF9D, 0xDF9E, 0xDBA5, 0xDF9F, + 0xDFA0, 0xD3F4, 0xE040, 0xE041, 0xDBA7, 0xDBA4, + 0xE042, 0xDBA8, 0xE043, 0xE044, 0xBDBC, 0xE045, + 0xE046, 0xE047, 0xC0C9, 0xDBA3, 0xDBA6, 0xD6A3, + 0xE048, 0xDBA9, 0xE049, 0xE04A, 0xE04B, 0xDBAD, + 0xE04C, 0xE04D, 0xE04E, 0xDBAE, 0xDBAC, 0xBAC2, + 0xE04F, 0xE050, 0xE051, 0xBFA4, 0xDBAB, 0xE052, + 0xE053, 0xE054, 0xDBAA, 0xD4C7, 0xB2BF, 0xE055, + 0xE056, 0xDBAF, 0xE057, 0xB9F9, 0xE058, 0xDBB0, + 0xE059, 0xE05A, 0xE05B, 0xE05C, 0xB3BB, 0xE05D, + 0xE05E, 0xE05F, 0xB5A6, 0xE060, 0xE061, 0xE062, + 0xE063, 0xB6BC, 0xDBB1, 0xE064, 0xE065, 0xE066, + 0xB6F5, 0xE067, 0xDBB2, 0xE068, 0xE069, 0xE06A, + 0xE06B, 0xE06C, 0xE06D, 0xE06E, 0xE06F, 0xE070, + 0xE071, 0xE072, 0xE073, 0xE074, 0xE075, 0xE076, + 0xE077, 0xE078, 0xE079, 0xE07A, 0xE07B, 0xB1C9, + 0xE07C, 0xE07D, 0xE07E, 0xE080, 0xDBB4, 0xE081, + 0xE082, 0xE083, 0xDBB3, 0xDBB5, 0xE084, 0xE085, + 0xE086, 0xE087, 0xE088, 0xE089, 0xE08A, 0xE08B, + 0xE08C, 0xE08D, 0xE08E, 0xDBB7, 0xE08F, 0xDBB6, + 0xE090, 0xE091, 0xE092, 0xE093, 0xE094, 0xE095, + 0xE096, 0xDBB8, 0xE097, 0xE098, 0xE099, 0xE09A, + 0xE09B, 0xE09C, 0xE09D, 0xE09E, 0xE09F, 0xDBB9, + 0xE0A0, 0xE140, 0xDBBA, 0xE141, 0xE142, 0xD3CF, + 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, + 0xF4FB, 0xE143, 0xBEC6, 0xE144, 0xE145, 0xE146, + 0xE147, 0xD0EF, 0xE148, 0xE149, 0xB7D3, 0xE14A, + 0xE14B, 0xD4CD, 0xCCAA, 0xE14C, 0xE14D, 0xF5A2, + 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0xE14E, 0xE14F, + 0xE150, 0xF5A4, 0xC0D2, 0xE151, 0xB3EA, 0xE152, + 0xCDAA, 0xF5A5, 0xF5A3, 0xBDB4, 0xF5A8, 0xE153, + 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, 0xCBE1, 0xF5AA, + 0xE154, 0xE155, 0xE156, 0xF5A6, 0xF5A7, 0xC4F0, + 0xE157, 0xE158, 0xE159, 0xE15A, 0xE15B, 0xF5AC, + 0xE15C, 0xB4BC, 0xE15D, 0xD7ED, 0xE15E, 0xB4D7, + 0xF5AB, 0xF5AE, 0xE15F, 0xE160, 0xF5AD, 0xF5AF, + 0xD0D1, 0xE161, 0xE162, 0xE163, 0xE164, 0xE165, + 0xE166, 0xE167, 0xC3D1, 0xC8A9, 0xE168, 0xE169, + 0xE16A, 0xE16B, 0xE16C, 0xE16D, 0xF5B0, 0xF5B1, + 0xE16E, 0xE16F, 0xE170, 0xE171, 0xE172, 0xE173, + 0xF5B2, 0xE174, 0xE175, 0xF5B3, 0xF5B4, 0xF5B5, + 0xE176, 0xE177, 0xE178, 0xE179, 0xF5B7, 0xF5B6, + 0xE17A, 0xE17B, 0xE17C, 0xE17D, 0xF5B8, 0xE17E, + 0xE180, 0xE181, 0xE182, 0xE183, 0xE184, 0xE185, + 0xE186, 0xE187, 0xE188, 0xE189, 0xE18A, 0xB2C9, + 0xE18B, 0xD3D4, 0xCACD, 0xE18C, 0xC0EF, 0xD6D8, + 0xD2B0, 0xC1BF, 0xE18D, 0xBDF0, 0xE18E, 0xE18F, + 0xE190, 0xE191, 0xE192, 0xE193, 0xE194, 0xE195, + 0xE196, 0xE197, 0xB8AA, 0xE198, 0xE199, 0xE19A, + 0xE19B, 0xE19C, 0xE19D, 0xE19E, 0xE19F, 0xE1A0, + 0xE240, 0xE241, 0xE242, 0xE243, 0xE244, 0xE245, + 0xE246, 0xE247, 0xE248, 0xE249, 0xE24A, 0xE24B, + 0xE24C, 0xE24D, 0xE24E, 0xE24F, 0xE250, 0xE251, + 0xE252, 0xE253, 0xE254, 0xE255, 0xE256, 0xE257, + 0xE258, 0xE259, 0xE25A, 0xE25B, 0xE25C, 0xE25D, + 0xE25E, 0xE25F, 0xE260, 0xE261, 0xE262, 0xE263, + 0xE264, 0xE265, 0xE266, 0xE267, 0xE268, 0xE269, + 0xE26A, 0xE26B, 0xE26C, 0xE26D, 0xE26E, 0xE26F, + 0xE270, 0xE271, 0xE272, 0xE273, 0xE274, 0xE275, + 0xE276, 0xE277, 0xE278, 0xE279, 0xE27A, 0xE27B, + 0xE27C, 0xE27D, 0xE27E, 0xE280, 0xE281, 0xE282, + 0xE283, 0xE284, 0xE285, 0xE286, 0xE287, 0xE288, + 0xE289, 0xE28A, 0xE28B, 0xE28C, 0xE28D, 0xE28E, + 0xE28F, 0xE290, 0xE291, 0xE292, 0xE293, 0xE294, + 0xE295, 0xE296, 0xE297, 0xE298, 0xE299, 0xE29A, + 0xE29B, 0xE29C, 0xE29D, 0xE29E, 0xE29F, 0xE2A0, + 0xE340, 0xE341, 0xE342, 0xE343, 0xE344, 0xE345, + 0xE346, 0xE347, 0xE348, 0xE349, 0xE34A, 0xE34B, + 0xE34C, 0xE34D, 0xE34E, 0xE34F, 0xE350, 0xE351, + 0xE352, 0xE353, 0xE354, 0xE355, 0xE356, 0xE357, + 0xE358, 0xE359, 0xE35A, 0xE35B, 0xE35C, 0xE35D, + 0xE35E, 0xE35F, 0xE360, 0xE361, 0xE362, 0xE363, + 0xE364, 0xE365, 0xE366, 0xE367, 0xE368, 0xE369, + 0xE36A, 0xE36B, 0xE36C, 0xE36D, 0xBCF8, 0xE36E, + 0xE36F, 0xE370, 0xE371, 0xE372, 0xE373, 0xE374, + 0xE375, 0xE376, 0xE377, 0xE378, 0xE379, 0xE37A, + 0xE37B, 0xE37C, 0xE37D, 0xE37E, 0xE380, 0xE381, + 0xE382, 0xE383, 0xE384, 0xE385, 0xE386, 0xE387, + 0xF6C6, 0xE388, 0xE389, 0xE38A, 0xE38B, 0xE38C, + 0xE38D, 0xE38E, 0xE38F, 0xE390, 0xE391, 0xE392, + 0xE393, 0xE394, 0xE395, 0xE396, 0xE397, 0xE398, + 0xE399, 0xE39A, 0xE39B, 0xE39C, 0xE39D, 0xE39E, + 0xE39F, 0xE3A0, 0xE440, 0xE441, 0xE442, 0xE443, + 0xE444, 0xE445, 0xF6C7, 0xE446, 0xE447, 0xE448, + 0xE449, 0xE44A, 0xE44B, 0xE44C, 0xE44D, 0xE44E, + 0xE44F, 0xE450, 0xE451, 0xE452, 0xE453, 0xE454, + 0xE455, 0xE456, 0xE457, 0xE458, 0xE459, 0xE45A, + 0xE45B, 0xE45C, 0xE45D, 0xE45E, 0xF6C8, 0xE45F, + 0xE460, 0xE461, 0xE462, 0xE463, 0xE464, 0xE465, + 0xE466, 0xE467, 0xE468, 0xE469, 0xE46A, 0xE46B, + 0xE46C, 0xE46D, 0xE46E, 0xE46F, 0xE470, 0xE471, + 0xE472, 0xE473, 0xE474, 0xE475, 0xE476, 0xE477, + 0xE478, 0xE479, 0xE47A, 0xE47B, 0xE47C, 0xE47D, + 0xE47E, 0xE480, 0xE481, 0xE482, 0xE483, 0xE484, + 0xE485, 0xE486, 0xE487, 0xE488, 0xE489, 0xE48A, + 0xE48B, 0xE48C, 0xE48D, 0xE48E, 0xE48F, 0xE490, + 0xE491, 0xE492, 0xE493, 0xE494, 0xE495, 0xE496, + 0xE497, 0xE498, 0xE499, 0xE49A, 0xE49B, 0xE49C, + 0xE49D, 0xE49E, 0xE49F, 0xE4A0, 0xE540, 0xE541, + 0xE542, 0xE543, 0xE544, 0xE545, 0xE546, 0xE547, + 0xE548, 0xE549, 0xE54A, 0xE54B, 0xE54C, 0xE54D, + 0xE54E, 0xE54F, 0xE550, 0xE551, 0xE552, 0xE553, + 0xE554, 0xE555, 0xE556, 0xE557, 0xE558, 0xE559, + 0xE55A, 0xE55B, 0xE55C, 0xE55D, 0xE55E, 0xE55F, + 0xE560, 0xE561, 0xE562, 0xE563, 0xE564, 0xE565, + 0xE566, 0xE567, 0xE568, 0xE569, 0xE56A, 0xE56B, + 0xE56C, 0xE56D, 0xE56E, 0xE56F, 0xE570, 0xE571, + 0xE572, 0xE573, 0xF6C9, 0xE574, 0xE575, 0xE576, + 0xE577, 0xE578, 0xE579, 0xE57A, 0xE57B, 0xE57C, + 0xE57D, 0xE57E, 0xE580, 0xE581, 0xE582, 0xE583, + 0xE584, 0xE585, 0xE586, 0xE587, 0xE588, 0xE589, + 0xE58A, 0xE58B, 0xE58C, 0xE58D, 0xE58E, 0xE58F, + 0xE590, 0xE591, 0xE592, 0xE593, 0xE594, 0xE595, + 0xE596, 0xE597, 0xE598, 0xE599, 0xE59A, 0xE59B, + 0xE59C, 0xE59D, 0xE59E, 0xE59F, 0xF6CA, 0xE5A0, + 0xE640, 0xE641, 0xE642, 0xE643, 0xE644, 0xE645, + 0xE646, 0xE647, 0xE648, 0xE649, 0xE64A, 0xE64B, + 0xE64C, 0xE64D, 0xE64E, 0xE64F, 0xE650, 0xE651, + 0xE652, 0xE653, 0xE654, 0xE655, 0xE656, 0xE657, + 0xE658, 0xE659, 0xE65A, 0xE65B, 0xE65C, 0xE65D, + 0xE65E, 0xE65F, 0xE660, 0xE661, 0xE662, 0xF6CC, + 0xE663, 0xE664, 0xE665, 0xE666, 0xE667, 0xE668, + 0xE669, 0xE66A, 0xE66B, 0xE66C, 0xE66D, 0xE66E, + 0xE66F, 0xE670, 0xE671, 0xE672, 0xE673, 0xE674, + 0xE675, 0xE676, 0xE677, 0xE678, 0xE679, 0xE67A, + 0xE67B, 0xE67C, 0xE67D, 0xE67E, 0xE680, 0xE681, + 0xE682, 0xE683, 0xE684, 0xE685, 0xE686, 0xE687, + 0xE688, 0xE689, 0xE68A, 0xE68B, 0xE68C, 0xE68D, + 0xE68E, 0xE68F, 0xE690, 0xE691, 0xE692, 0xE693, + 0xE694, 0xE695, 0xE696, 0xE697, 0xE698, 0xE699, + 0xE69A, 0xE69B, 0xE69C, 0xE69D, 0xF6CB, 0xE69E, + 0xE69F, 0xE6A0, 0xE740, 0xE741, 0xE742, 0xE743, + 0xE744, 0xE745, 0xE746, 0xE747, 0xF7E9, 0xE748, + 0xE749, 0xE74A, 0xE74B, 0xE74C, 0xE74D, 0xE74E, + 0xE74F, 0xE750, 0xE751, 0xE752, 0xE753, 0xE754, + 0xE755, 0xE756, 0xE757, 0xE758, 0xE759, 0xE75A, + 0xE75B, 0xE75C, 0xE75D, 0xE75E, 0xE75F, 0xE760, + 0xE761, 0xE762, 0xE763, 0xE764, 0xE765, 0xE766, + 0xE767, 0xE768, 0xE769, 0xE76A, 0xE76B, 0xE76C, + 0xE76D, 0xE76E, 0xE76F, 0xE770, 0xE771, 0xE772, + 0xE773, 0xE774, 0xE775, 0xE776, 0xE777, 0xE778, + 0xE779, 0xE77A, 0xE77B, 0xE77C, 0xE77D, 0xE77E, + 0xE780, 0xE781, 0xE782, 0xE783, 0xE784, 0xE785, + 0xE786, 0xE787, 0xE788, 0xE789, 0xE78A, 0xE78B, + 0xE78C, 0xE78D, 0xE78E, 0xE78F, 0xE790, 0xE791, + 0xE792, 0xE793, 0xE794, 0xE795, 0xE796, 0xE797, + 0xE798, 0xE799, 0xE79A, 0xE79B, 0xE79C, 0xE79D, + 0xE79E, 0xE79F, 0xE7A0, 0xE840, 0xE841, 0xE842, + 0xE843, 0xE844, 0xE845, 0xE846, 0xE847, 0xE848, + 0xE849, 0xE84A, 0xE84B, 0xE84C, 0xE84D, 0xE84E, + 0xF6CD, 0xE84F, 0xE850, 0xE851, 0xE852, 0xE853, + 0xE854, 0xE855, 0xE856, 0xE857, 0xE858, 0xE859, + 0xE85A, 0xE85B, 0xE85C, 0xE85D, 0xE85E, 0xE85F, + 0xE860, 0xE861, 0xE862, 0xE863, 0xE864, 0xE865, + 0xE866, 0xE867, 0xE868, 0xE869, 0xE86A, 0xE86B, + 0xE86C, 0xE86D, 0xE86E, 0xE86F, 0xE870, 0xE871, + 0xE872, 0xE873, 0xE874, 0xE875, 0xE876, 0xE877, + 0xE878, 0xE879, 0xE87A, 0xF6CE, 0xE87B, 0xE87C, + 0xE87D, 0xE87E, 0xE880, 0xE881, 0xE882, 0xE883, + 0xE884, 0xE885, 0xE886, 0xE887, 0xE888, 0xE889, + 0xE88A, 0xE88B, 0xE88C, 0xE88D, 0xE88E, 0xE88F, + 0xE890, 0xE891, 0xE892, 0xE893, 0xE894, 0xEEC4, + 0xEEC5, 0xEEC6, 0xD5EB, 0xB6A4, 0xEEC8, 0xEEC7, + 0xEEC9, 0xEECA, 0xC7A5, 0xEECB, 0xEECC, 0xE895, + 0xB7B0, 0xB5F6, 0xEECD, 0xEECF, 0xE896, 0xEECE, + 0xE897, 0xB8C6, 0xEED0, 0xEED1, 0xEED2, 0xB6DB, + 0xB3AE, 0xD6D3, 0xC4C6, 0xB1B5, 0xB8D6, 0xEED3, + 0xEED4, 0xD4BF, 0xC7D5, 0xBEFB, 0xCED9, 0xB9B3, + 0xEED6, 0xEED5, 0xEED8, 0xEED7, 0xC5A5, 0xEED9, + 0xEEDA, 0xC7AE, 0xEEDB, 0xC7AF, 0xEEDC, 0xB2A7, + 0xEEDD, 0xEEDE, 0xEEDF, 0xEEE0, 0xEEE1, 0xD7EA, + 0xEEE2, 0xEEE3, 0xBCD8, 0xEEE4, 0xD3CB, 0xCCFA, + 0xB2AC, 0xC1E5, 0xEEE5, 0xC7A6, 0xC3AD, 0xE898, + 0xEEE6, 0xEEE7, 0xEEE8, 0xEEE9, 0xEEEA, 0xEEEB, + 0xEEEC, 0xE899, 0xEEED, 0xEEEE, 0xEEEF, 0xE89A, + 0xE89B, 0xEEF0, 0xEEF1, 0xEEF2, 0xEEF4, 0xEEF3, + 0xE89C, 0xEEF5, 0xCDAD, 0xC2C1, 0xEEF6, 0xEEF7, + 0xEEF8, 0xD5A1, 0xEEF9, 0xCFB3, 0xEEFA, 0xEEFB, + 0xE89D, 0xEEFC, 0xEEFD, 0xEFA1, 0xEEFE, 0xEFA2, + 0xB8F5, 0xC3FA, 0xEFA3, 0xEFA4, 0xBDC2, 0xD2BF, + 0xB2F9, 0xEFA5, 0xEFA6, 0xEFA7, 0xD2F8, 0xEFA8, + 0xD6FD, 0xEFA9, 0xC6CC, 0xE89E, 0xEFAA, 0xEFAB, + 0xC1B4, 0xEFAC, 0xCFFA, 0xCBF8, 0xEFAE, 0xEFAD, + 0xB3FA, 0xB9F8, 0xEFAF, 0xEFB0, 0xD0E2, 0xEFB1, + 0xEFB2, 0xB7E6, 0xD0BF, 0xEFB3, 0xEFB4, 0xEFB5, + 0xC8F1, 0xCCE0, 0xEFB6, 0xEFB7, 0xEFB8, 0xEFB9, + 0xEFBA, 0xD5E0, 0xEFBB, 0xB4ED, 0xC3AA, 0xEFBC, + 0xE89F, 0xEFBD, 0xEFBE, 0xEFBF, 0xE8A0, 0xCEFD, + 0xEFC0, 0xC2E0, 0xB4B8, 0xD7B6, 0xBDF5, 0xE940, + 0xCFC7, 0xEFC3, 0xEFC1, 0xEFC2, 0xEFC4, 0xB6A7, + 0xBCFC, 0xBEE2, 0xC3CC, 0xEFC5, 0xEFC6, 0xE941, + 0xEFC7, 0xEFCF, 0xEFC8, 0xEFC9, 0xEFCA, 0xC7C2, + 0xEFF1, 0xB6CD, 0xEFCB, 0xE942, 0xEFCC, 0xEFCD, + 0xB6C6, 0xC3BE, 0xEFCE, 0xE943, 0xEFD0, 0xEFD1, + 0xEFD2, 0xD5F2, 0xE944, 0xEFD3, 0xC4F7, 0xE945, + 0xEFD4, 0xC4F8, 0xEFD5, 0xEFD6, 0xB8E4, 0xB0F7, + 0xEFD7, 0xEFD8, 0xEFD9, 0xE946, 0xEFDA, 0xEFDB, + 0xEFDC, 0xEFDD, 0xE947, 0xEFDE, 0xBEB5, 0xEFE1, + 0xEFDF, 0xEFE0, 0xE948, 0xEFE2, 0xEFE3, 0xC1CD, + 0xEFE4, 0xEFE5, 0xEFE6, 0xEFE7, 0xEFE8, 0xEFE9, + 0xEFEA, 0xEFEB, 0xEFEC, 0xC0D8, 0xE949, 0xEFED, + 0xC1AD, 0xEFEE, 0xEFEF, 0xEFF0, 0xE94A, 0xE94B, + 0xCFE2, 0xE94C, 0xE94D, 0xE94E, 0xE94F, 0xE950, + 0xE951, 0xE952, 0xE953, 0xB3A4, 0xE954, 0xE955, + 0xE956, 0xE957, 0xE958, 0xE959, 0xE95A, 0xE95B, + 0xE95C, 0xE95D, 0xE95E, 0xE95F, 0xE960, 0xE961, + 0xE962, 0xE963, 0xE964, 0xE965, 0xE966, 0xE967, + 0xE968, 0xE969, 0xE96A, 0xE96B, 0xE96C, 0xE96D, + 0xE96E, 0xE96F, 0xE970, 0xE971, 0xE972, 0xE973, + 0xE974, 0xE975, 0xE976, 0xE977, 0xE978, 0xE979, + 0xE97A, 0xE97B, 0xE97C, 0xE97D, 0xE97E, 0xE980, + 0xE981, 0xE982, 0xE983, 0xE984, 0xE985, 0xE986, + 0xE987, 0xE988, 0xE989, 0xE98A, 0xE98B, 0xE98C, + 0xE98D, 0xE98E, 0xE98F, 0xE990, 0xE991, 0xE992, + 0xE993, 0xE994, 0xE995, 0xE996, 0xE997, 0xE998, + 0xE999, 0xE99A, 0xE99B, 0xE99C, 0xE99D, 0xE99E, + 0xE99F, 0xE9A0, 0xEA40, 0xEA41, 0xEA42, 0xEA43, + 0xEA44, 0xEA45, 0xEA46, 0xEA47, 0xEA48, 0xEA49, + 0xEA4A, 0xEA4B, 0xEA4C, 0xEA4D, 0xEA4E, 0xEA4F, + 0xEA50, 0xEA51, 0xEA52, 0xEA53, 0xEA54, 0xEA55, + 0xEA56, 0xEA57, 0xEA58, 0xEA59, 0xEA5A, 0xEA5B, + 0xC3C5, 0xE3C5, 0xC9C1, 0xE3C6, 0xEA5C, 0xB1D5, + 0xCECA, 0xB4B3, 0xC8F2, 0xE3C7, 0xCFD0, 0xE3C8, + 0xBCE4, 0xE3C9, 0xE3CA, 0xC3C6, 0xD5A2, 0xC4D6, + 0xB9EB, 0xCEC5, 0xE3CB, 0xC3F6, 0xE3CC, 0xEA5D, + 0xB7A7, 0xB8F3, 0xBAD2, 0xE3CD, 0xE3CE, 0xD4C4, + 0xE3CF, 0xEA5E, 0xE3D0, 0xD1CB, 0xE3D1, 0xE3D2, + 0xE3D3, 0xE3D4, 0xD1D6, 0xE3D5, 0xB2FB, 0xC0BB, + 0xE3D6, 0xEA5F, 0xC0AB, 0xE3D7, 0xE3D8, 0xE3D9, + 0xEA60, 0xE3DA, 0xE3DB, 0xEA61, 0xB8B7, 0xDAE2, + 0xEA62, 0xB6D3, 0xEA63, 0xDAE4, 0xDAE3, 0xEA64, + 0xEA65, 0xEA66, 0xEA67, 0xEA68, 0xEA69, 0xEA6A, + 0xDAE6, 0xEA6B, 0xEA6C, 0xEA6D, 0xC8EE, 0xEA6E, + 0xEA6F, 0xDAE5, 0xB7C0, 0xD1F4, 0xD2F5, 0xD5F3, + 0xBDD7, 0xEA70, 0xEA71, 0xEA72, 0xEA73, 0xD7E8, + 0xDAE8, 0xDAE7, 0xEA74, 0xB0A2, 0xCDD3, 0xEA75, + 0xDAE9, 0xEA76, 0xB8BD, 0xBCCA, 0xC2BD, 0xC2A4, + 0xB3C2, 0xDAEA, 0xEA77, 0xC2AA, 0xC4B0, 0xBDB5, + 0xEA78, 0xEA79, 0xCFDE, 0xEA7A, 0xEA7B, 0xEA7C, + 0xDAEB, 0xC9C2, 0xEA7D, 0xEA7E, 0xEA80, 0xEA81, + 0xEA82, 0xB1DD, 0xEA83, 0xEA84, 0xEA85, 0xDAEC, + 0xEA86, 0xB6B8, 0xD4BA, 0xEA87, 0xB3FD, 0xEA88, + 0xEA89, 0xDAED, 0xD4C9, 0xCFD5, 0xC5E3, 0xEA8A, + 0xDAEE, 0xEA8B, 0xEA8C, 0xEA8D, 0xEA8E, 0xEA8F, + 0xDAEF, 0xEA90, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, + 0xEA91, 0xEA92, 0xEA93, 0xEA94, 0xEA95, 0xEA96, + 0xEA97, 0xEA98, 0xEA99, 0xEA9A, 0xEA9B, 0xEA9C, + 0xEA9D, 0xD3E7, 0xC2A1, 0xEA9E, 0xDAF1, 0xEA9F, + 0xEAA0, 0xCBE5, 0xEB40, 0xDAF2, 0xEB41, 0xCBE6, + 0xD2FE, 0xEB42, 0xEB43, 0xEB44, 0xB8F4, 0xEB45, + 0xEB46, 0xDAF3, 0xB0AF, 0xCFB6, 0xEB47, 0xEB48, + 0xD5CF, 0xEB49, 0xEB4A, 0xEB4B, 0xEB4C, 0xEB4D, + 0xEB4E, 0xEB4F, 0xEB50, 0xEB51, 0xEB52, 0xCBED, + 0xEB53, 0xEB54, 0xEB55, 0xEB56, 0xEB57, 0xEB58, + 0xEB59, 0xEB5A, 0xDAF4, 0xEB5B, 0xEB5C, 0xE3C4, + 0xEB5D, 0xEB5E, 0xC1A5, 0xEB5F, 0xEB60, 0xF6BF, + 0xEB61, 0xEB62, 0xF6C0, 0xF6C1, 0xC4D1, 0xEB63, + 0xC8B8, 0xD1E3, 0xEB64, 0xEB65, 0xD0DB, 0xD1C5, + 0xBCAF, 0xB9CD, 0xEB66, 0xEFF4, 0xEB67, 0xEB68, + 0xB4C6, 0xD3BA, 0xF6C2, 0xB3FB, 0xEB69, 0xEB6A, + 0xF6C3, 0xEB6B, 0xEB6C, 0xB5F1, 0xEB6D, 0xEB6E, + 0xEB6F, 0xEB70, 0xEB71, 0xEB72, 0xEB73, 0xEB74, + 0xEB75, 0xEB76, 0xF6C5, 0xEB77, 0xEB78, 0xEB79, + 0xEB7A, 0xEB7B, 0xEB7C, 0xEB7D, 0xD3EA, 0xF6A7, + 0xD1A9, 0xEB7E, 0xEB80, 0xEB81, 0xEB82, 0xF6A9, + 0xEB83, 0xEB84, 0xEB85, 0xF6A8, 0xEB86, 0xEB87, + 0xC1E3, 0xC0D7, 0xEB88, 0xB1A2, 0xEB89, 0xEB8A, + 0xEB8B, 0xEB8C, 0xCEED, 0xEB8D, 0xD0E8, 0xF6AB, + 0xEB8E, 0xEB8F, 0xCFF6, 0xEB90, 0xF6AA, 0xD5F0, + 0xF6AC, 0xC3B9, 0xEB91, 0xEB92, 0xEB93, 0xBBF4, + 0xF6AE, 0xF6AD, 0xEB94, 0xEB95, 0xEB96, 0xC4DE, + 0xEB97, 0xEB98, 0xC1D8, 0xEB99, 0xEB9A, 0xEB9B, + 0xEB9C, 0xEB9D, 0xCBAA, 0xEB9E, 0xCFBC, 0xEB9F, + 0xEBA0, 0xEC40, 0xEC41, 0xEC42, 0xEC43, 0xEC44, + 0xEC45, 0xEC46, 0xEC47, 0xEC48, 0xF6AF, 0xEC49, + 0xEC4A, 0xF6B0, 0xEC4B, 0xEC4C, 0xF6B1, 0xEC4D, + 0xC2B6, 0xEC4E, 0xEC4F, 0xEC50, 0xEC51, 0xEC52, + 0xB0D4, 0xC5F9, 0xEC53, 0xEC54, 0xEC55, 0xEC56, + 0xF6B2, 0xEC57, 0xEC58, 0xEC59, 0xEC5A, 0xEC5B, + 0xEC5C, 0xEC5D, 0xEC5E, 0xEC5F, 0xEC60, 0xEC61, + 0xEC62, 0xEC63, 0xEC64, 0xEC65, 0xEC66, 0xEC67, + 0xEC68, 0xEC69, 0xC7E0, 0xF6A6, 0xEC6A, 0xEC6B, + 0xBEB8, 0xEC6C, 0xEC6D, 0xBEB2, 0xEC6E, 0xB5E5, + 0xEC6F, 0xEC70, 0xB7C7, 0xEC71, 0xBFBF, 0xC3D2, + 0xC3E6, 0xEC72, 0xEC73, 0xD8CC, 0xEC74, 0xEC75, + 0xEC76, 0xB8EF, 0xEC77, 0xEC78, 0xEC79, 0xEC7A, + 0xEC7B, 0xEC7C, 0xEC7D, 0xEC7E, 0xEC80, 0xBDF9, + 0xD1A5, 0xEC81, 0xB0D0, 0xEC82, 0xEC83, 0xEC84, + 0xEC85, 0xEC86, 0xF7B0, 0xEC87, 0xEC88, 0xEC89, + 0xEC8A, 0xEC8B, 0xEC8C, 0xEC8D, 0xEC8E, 0xF7B1, + 0xEC8F, 0xEC90, 0xEC91, 0xEC92, 0xEC93, 0xD0AC, + 0xEC94, 0xB0B0, 0xEC95, 0xEC96, 0xEC97, 0xF7B2, + 0xF7B3, 0xEC98, 0xF7B4, 0xEC99, 0xEC9A, 0xEC9B, + 0xC7CA, 0xEC9C, 0xEC9D, 0xEC9E, 0xEC9F, 0xECA0, + 0xED40, 0xED41, 0xBECF, 0xED42, 0xED43, 0xF7B7, + 0xED44, 0xED45, 0xED46, 0xED47, 0xED48, 0xED49, + 0xED4A, 0xF7B6, 0xED4B, 0xB1DE, 0xED4C, 0xF7B5, + 0xED4D, 0xED4E, 0xF7B8, 0xED4F, 0xF7B9, 0xED50, + 0xED51, 0xED52, 0xED53, 0xED54, 0xED55, 0xED56, + 0xED57, 0xED58, 0xED59, 0xED5A, 0xED5B, 0xED5C, + 0xED5D, 0xED5E, 0xED5F, 0xED60, 0xED61, 0xED62, + 0xED63, 0xED64, 0xED65, 0xED66, 0xED67, 0xED68, + 0xED69, 0xED6A, 0xED6B, 0xED6C, 0xED6D, 0xED6E, + 0xED6F, 0xED70, 0xED71, 0xED72, 0xED73, 0xED74, + 0xED75, 0xED76, 0xED77, 0xED78, 0xED79, 0xED7A, + 0xED7B, 0xED7C, 0xED7D, 0xED7E, 0xED80, 0xED81, + 0xCEA4, 0xC8CD, 0xED82, 0xBAAB, 0xE8B8, 0xE8B9, + 0xE8BA, 0xBEC2, 0xED83, 0xED84, 0xED85, 0xED86, + 0xED87, 0xD2F4, 0xED88, 0xD4CF, 0xC9D8, 0xED89, + 0xED8A, 0xED8B, 0xED8C, 0xED8D, 0xED8E, 0xED8F, + 0xED90, 0xED91, 0xED92, 0xED93, 0xED94, 0xED95, + 0xED96, 0xED97, 0xED98, 0xED99, 0xED9A, 0xED9B, + 0xED9C, 0xED9D, 0xED9E, 0xED9F, 0xEDA0, 0xEE40, + 0xEE41, 0xEE42, 0xEE43, 0xEE44, 0xEE45, 0xEE46, + 0xEE47, 0xEE48, 0xEE49, 0xEE4A, 0xEE4B, 0xEE4C, + 0xEE4D, 0xEE4E, 0xEE4F, 0xEE50, 0xEE51, 0xEE52, + 0xEE53, 0xEE54, 0xEE55, 0xEE56, 0xEE57, 0xEE58, + 0xEE59, 0xEE5A, 0xEE5B, 0xEE5C, 0xEE5D, 0xEE5E, + 0xEE5F, 0xEE60, 0xEE61, 0xEE62, 0xEE63, 0xEE64, + 0xEE65, 0xEE66, 0xEE67, 0xEE68, 0xEE69, 0xEE6A, + 0xEE6B, 0xEE6C, 0xEE6D, 0xEE6E, 0xEE6F, 0xEE70, + 0xEE71, 0xEE72, 0xEE73, 0xEE74, 0xEE75, 0xEE76, + 0xEE77, 0xEE78, 0xEE79, 0xEE7A, 0xEE7B, 0xEE7C, + 0xEE7D, 0xEE7E, 0xEE80, 0xEE81, 0xEE82, 0xEE83, + 0xEE84, 0xEE85, 0xEE86, 0xEE87, 0xEE88, 0xEE89, + 0xEE8A, 0xEE8B, 0xEE8C, 0xEE8D, 0xEE8E, 0xEE8F, + 0xEE90, 0xEE91, 0xEE92, 0xEE93, 0xEE94, 0xEE95, + 0xEE96, 0xEE97, 0xEE98, 0xEE99, 0xEE9A, 0xEE9B, + 0xEE9C, 0xEE9D, 0xEE9E, 0xEE9F, 0xEEA0, 0xEF40, + 0xEF41, 0xEF42, 0xEF43, 0xEF44, 0xEF45, 0xD2B3, + 0xB6A5, 0xC7EA, 0xF1FC, 0xCFEE, 0xCBB3, 0xD0EB, + 0xE7EF, 0xCDE7, 0xB9CB, 0xB6D9, 0xF1FD, 0xB0E4, + 0xCBCC, 0xF1FE, 0xD4A4, 0xC2AD, 0xC1EC, 0xC6C4, + 0xBEB1, 0xF2A1, 0xBCD5, 0xEF46, 0xF2A2, 0xF2A3, + 0xEF47, 0xF2A4, 0xD2C3, 0xC6B5, 0xEF48, 0xCDC7, + 0xF2A5, 0xEF49, 0xD3B1, 0xBFC5, 0xCCE2, 0xEF4A, + 0xF2A6, 0xF2A7, 0xD1D5, 0xB6EE, 0xF2A8, 0xF2A9, + 0xB5DF, 0xF2AA, 0xF2AB, 0xEF4B, 0xB2FC, 0xF2AC, + 0xF2AD, 0xC8A7, 0xEF4C, 0xEF4D, 0xEF4E, 0xEF4F, + 0xEF50, 0xEF51, 0xEF52, 0xEF53, 0xEF54, 0xEF55, + 0xEF56, 0xEF57, 0xEF58, 0xEF59, 0xEF5A, 0xEF5B, + 0xEF5C, 0xEF5D, 0xEF5E, 0xEF5F, 0xEF60, 0xEF61, + 0xEF62, 0xEF63, 0xEF64, 0xEF65, 0xEF66, 0xEF67, + 0xEF68, 0xEF69, 0xEF6A, 0xEF6B, 0xEF6C, 0xEF6D, + 0xEF6E, 0xEF6F, 0xEF70, 0xEF71, 0xB7E7, 0xEF72, + 0xEF73, 0xECA9, 0xECAA, 0xECAB, 0xEF74, 0xECAC, + 0xEF75, 0xEF76, 0xC6AE, 0xECAD, 0xECAE, 0xEF77, + 0xEF78, 0xEF79, 0xB7C9, 0xCAB3, 0xEF7A, 0xEF7B, + 0xEF7C, 0xEF7D, 0xEF7E, 0xEF80, 0xEF81, 0xE2B8, + 0xF7CF, 0xEF82, 0xEF83, 0xEF84, 0xEF85, 0xEF86, + 0xEF87, 0xEF88, 0xEF89, 0xEF8A, 0xEF8B, 0xEF8C, + 0xEF8D, 0xEF8E, 0xEF8F, 0xEF90, 0xEF91, 0xEF92, + 0xEF93, 0xEF94, 0xEF95, 0xEF96, 0xEF97, 0xEF98, + 0xEF99, 0xEF9A, 0xEF9B, 0xEF9C, 0xEF9D, 0xEF9E, + 0xEF9F, 0xEFA0, 0xF040, 0xF041, 0xF042, 0xF043, + 0xF044, 0xF7D0, 0xF045, 0xF046, 0xB2CD, 0xF047, + 0xF048, 0xF049, 0xF04A, 0xF04B, 0xF04C, 0xF04D, + 0xF04E, 0xF04F, 0xF050, 0xF051, 0xF052, 0xF053, + 0xF054, 0xF055, 0xF056, 0xF057, 0xF058, 0xF059, + 0xF05A, 0xF05B, 0xF05C, 0xF05D, 0xF05E, 0xF05F, + 0xF060, 0xF061, 0xF062, 0xF063, 0xF7D1, 0xF064, + 0xF065, 0xF066, 0xF067, 0xF068, 0xF069, 0xF06A, + 0xF06B, 0xF06C, 0xF06D, 0xF06E, 0xF06F, 0xF070, + 0xF071, 0xF072, 0xF073, 0xF074, 0xF075, 0xF076, + 0xF077, 0xF078, 0xF079, 0xF07A, 0xF07B, 0xF07C, + 0xF07D, 0xF07E, 0xF080, 0xF081, 0xF082, 0xF083, + 0xF084, 0xF085, 0xF086, 0xF087, 0xF088, 0xF089, + 0xF7D3, 0xF7D2, 0xF08A, 0xF08B, 0xF08C, 0xF08D, + 0xF08E, 0xF08F, 0xF090, 0xF091, 0xF092, 0xF093, + 0xF094, 0xF095, 0xF096, 0xE2BB, 0xF097, 0xBCA2, + 0xF098, 0xE2BC, 0xE2BD, 0xE2BE, 0xE2BF, 0xE2C0, + 0xE2C1, 0xB7B9, 0xD2FB, 0xBDA4, 0xCACE, 0xB1A5, + 0xCBC7, 0xF099, 0xE2C2, 0xB6FC, 0xC8C4, 0xE2C3, + 0xF09A, 0xF09B, 0xBDC8, 0xF09C, 0xB1FD, 0xE2C4, + 0xF09D, 0xB6F6, 0xE2C5, 0xC4D9, 0xF09E, 0xF09F, + 0xE2C6, 0xCFDA, 0xB9DD, 0xE2C7, 0xC0A1, 0xF0A0, + 0xE2C8, 0xB2F6, 0xF140, 0xE2C9, 0xF141, 0xC1F3, + 0xE2CA, 0xE2CB, 0xC2F8, 0xE2CC, 0xE2CD, 0xE2CE, + 0xCAD7, 0xD8B8, 0xD9E5, 0xCFE3, 0xF142, 0xF143, + 0xF144, 0xF145, 0xF146, 0xF147, 0xF148, 0xF149, + 0xF14A, 0xF14B, 0xF14C, 0xF0A5, 0xF14D, 0xF14E, + 0xDCB0, 0xF14F, 0xF150, 0xF151, 0xF152, 0xF153, + 0xF154, 0xF155, 0xF156, 0xF157, 0xF158, 0xF159, + 0xF15A, 0xF15B, 0xF15C, 0xF15D, 0xF15E, 0xF15F, + 0xF160, 0xF161, 0xF162, 0xF163, 0xF164, 0xF165, + 0xF166, 0xF167, 0xF168, 0xF169, 0xF16A, 0xF16B, + 0xF16C, 0xF16D, 0xF16E, 0xF16F, 0xF170, 0xF171, + 0xF172, 0xF173, 0xF174, 0xF175, 0xF176, 0xF177, + 0xF178, 0xF179, 0xF17A, 0xF17B, 0xF17C, 0xF17D, + 0xF17E, 0xF180, 0xF181, 0xF182, 0xF183, 0xF184, + 0xF185, 0xF186, 0xF187, 0xF188, 0xF189, 0xF18A, + 0xF18B, 0xF18C, 0xF18D, 0xF18E, 0xF18F, 0xF190, + 0xF191, 0xF192, 0xF193, 0xF194, 0xF195, 0xF196, + 0xF197, 0xF198, 0xF199, 0xF19A, 0xF19B, 0xF19C, + 0xF19D, 0xF19E, 0xF19F, 0xF1A0, 0xF240, 0xF241, + 0xF242, 0xF243, 0xF244, 0xF245, 0xF246, 0xF247, + 0xF248, 0xF249, 0xF24A, 0xF24B, 0xF24C, 0xF24D, + 0xF24E, 0xF24F, 0xF250, 0xF251, 0xF252, 0xF253, + 0xF254, 0xF255, 0xF256, 0xF257, 0xF258, 0xF259, + 0xF25A, 0xF25B, 0xF25C, 0xF25D, 0xF25E, 0xF25F, + 0xF260, 0xF261, 0xF262, 0xF263, 0xF264, 0xF265, + 0xF266, 0xF267, 0xF268, 0xF269, 0xF26A, 0xF26B, + 0xF26C, 0xF26D, 0xF26E, 0xF26F, 0xF270, 0xF271, + 0xF272, 0xF273, 0xF274, 0xF275, 0xF276, 0xF277, + 0xF278, 0xF279, 0xF27A, 0xF27B, 0xF27C, 0xF27D, + 0xF27E, 0xF280, 0xF281, 0xF282, 0xF283, 0xF284, + 0xF285, 0xF286, 0xF287, 0xF288, 0xF289, 0xF28A, + 0xF28B, 0xF28C, 0xF28D, 0xF28E, 0xF28F, 0xF290, + 0xF291, 0xF292, 0xF293, 0xF294, 0xF295, 0xF296, + 0xF297, 0xF298, 0xF299, 0xF29A, 0xF29B, 0xF29C, + 0xF29D, 0xF29E, 0xF29F, 0xF2A0, 0xF340, 0xF341, + 0xF342, 0xF343, 0xF344, 0xF345, 0xF346, 0xF347, + 0xF348, 0xF349, 0xF34A, 0xF34B, 0xF34C, 0xF34D, + 0xF34E, 0xF34F, 0xF350, 0xF351, 0xC2ED, 0xD4A6, + 0xCDD4, 0xD1B1, 0xB3DB, 0xC7FD, 0xF352, 0xB2B5, + 0xC2BF, 0xE6E0, 0xCABB, 0xE6E1, 0xE6E2, 0xBED4, + 0xE6E3, 0xD7A4, 0xCDD5, 0xE6E5, 0xBCDD, 0xE6E4, + 0xE6E6, 0xE6E7, 0xC2EE, 0xF353, 0xBDBE, 0xE6E8, + 0xC2E6, 0xBAA7, 0xE6E9, 0xF354, 0xE6EA, 0xB3D2, + 0xD1E9, 0xF355, 0xF356, 0xBFA5, 0xE6EB, 0xC6EF, + 0xE6EC, 0xE6ED, 0xF357, 0xF358, 0xE6EE, 0xC6AD, + 0xE6EF, 0xF359, 0xC9A7, 0xE6F0, 0xE6F1, 0xE6F2, + 0xE5B9, 0xE6F3, 0xE6F4, 0xC2E2, 0xE6F5, 0xE6F6, + 0xD6E8, 0xE6F7, 0xF35A, 0xE6F8, 0xB9C7, 0xF35B, + 0xF35C, 0xF35D, 0xF35E, 0xF35F, 0xF360, 0xF361, + 0xF7BB, 0xF7BA, 0xF362, 0xF363, 0xF364, 0xF365, + 0xF7BE, 0xF7BC, 0xBAA1, 0xF366, 0xF7BF, 0xF367, + 0xF7C0, 0xF368, 0xF369, 0xF36A, 0xF7C2, 0xF7C1, + 0xF7C4, 0xF36B, 0xF36C, 0xF7C3, 0xF36D, 0xF36E, + 0xF36F, 0xF370, 0xF371, 0xF7C5, 0xF7C6, 0xF372, + 0xF373, 0xF374, 0xF375, 0xF7C7, 0xF376, 0xCBE8, + 0xF377, 0xF378, 0xF379, 0xF37A, 0xB8DF, 0xF37B, + 0xF37C, 0xF37D, 0xF37E, 0xF380, 0xF381, 0xF7D4, + 0xF382, 0xF7D5, 0xF383, 0xF384, 0xF385, 0xF386, + 0xF7D6, 0xF387, 0xF388, 0xF389, 0xF38A, 0xF7D8, + 0xF38B, 0xF7DA, 0xF38C, 0xF7D7, 0xF38D, 0xF38E, + 0xF38F, 0xF390, 0xF391, 0xF392, 0xF393, 0xF394, + 0xF395, 0xF7DB, 0xF396, 0xF7D9, 0xF397, 0xF398, + 0xF399, 0xF39A, 0xF39B, 0xF39C, 0xF39D, 0xD7D7, + 0xF39E, 0xF39F, 0xF3A0, 0xF440, 0xF7DC, 0xF441, + 0xF442, 0xF443, 0xF444, 0xF445, 0xF446, 0xF7DD, + 0xF447, 0xF448, 0xF449, 0xF7DE, 0xF44A, 0xF44B, + 0xF44C, 0xF44D, 0xF44E, 0xF44F, 0xF450, 0xF451, + 0xF452, 0xF453, 0xF454, 0xF7DF, 0xF455, 0xF456, + 0xF457, 0xF7E0, 0xF458, 0xF459, 0xF45A, 0xF45B, + 0xF45C, 0xF45D, 0xF45E, 0xF45F, 0xF460, 0xF461, + 0xF462, 0xDBCB, 0xF463, 0xF464, 0xD8AA, 0xF465, + 0xF466, 0xF467, 0xF468, 0xF469, 0xF46A, 0xF46B, + 0xF46C, 0xE5F7, 0xB9ED, 0xF46D, 0xF46E, 0xF46F, + 0xF470, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, + 0xF471, 0xF7CA, 0xF7CC, 0xF7CB, 0xF472, 0xF473, + 0xF474, 0xF7CD, 0xF475, 0xCEBA, 0xF476, 0xF7CE, + 0xF477, 0xF478, 0xC4A7, 0xF479, 0xF47A, 0xF47B, + 0xF47C, 0xF47D, 0xF47E, 0xF480, 0xF481, 0xF482, + 0xF483, 0xF484, 0xF485, 0xF486, 0xF487, 0xF488, + 0xF489, 0xF48A, 0xF48B, 0xF48C, 0xF48D, 0xF48E, + 0xF48F, 0xF490, 0xF491, 0xF492, 0xF493, 0xF494, + 0xF495, 0xF496, 0xF497, 0xF498, 0xF499, 0xF49A, + 0xF49B, 0xF49C, 0xF49D, 0xF49E, 0xF49F, 0xF4A0, + 0xF540, 0xF541, 0xF542, 0xF543, 0xF544, 0xF545, + 0xF546, 0xF547, 0xF548, 0xF549, 0xF54A, 0xF54B, + 0xF54C, 0xF54D, 0xF54E, 0xF54F, 0xF550, 0xF551, + 0xF552, 0xF553, 0xF554, 0xF555, 0xF556, 0xF557, + 0xF558, 0xF559, 0xF55A, 0xF55B, 0xF55C, 0xF55D, + 0xF55E, 0xF55F, 0xF560, 0xF561, 0xF562, 0xF563, + 0xF564, 0xF565, 0xF566, 0xF567, 0xF568, 0xF569, + 0xF56A, 0xF56B, 0xF56C, 0xF56D, 0xF56E, 0xF56F, + 0xF570, 0xF571, 0xF572, 0xF573, 0xF574, 0xF575, + 0xF576, 0xF577, 0xF578, 0xF579, 0xF57A, 0xF57B, + 0xF57C, 0xF57D, 0xF57E, 0xF580, 0xF581, 0xF582, + 0xF583, 0xF584, 0xF585, 0xF586, 0xF587, 0xF588, + 0xF589, 0xF58A, 0xF58B, 0xF58C, 0xF58D, 0xF58E, + 0xF58F, 0xF590, 0xF591, 0xF592, 0xF593, 0xF594, + 0xF595, 0xF596, 0xF597, 0xF598, 0xF599, 0xF59A, + 0xF59B, 0xF59C, 0xF59D, 0xF59E, 0xF59F, 0xF5A0, + 0xF640, 0xF641, 0xF642, 0xF643, 0xF644, 0xF645, + 0xF646, 0xF647, 0xF648, 0xF649, 0xF64A, 0xF64B, + 0xF64C, 0xF64D, 0xF64E, 0xF64F, 0xF650, 0xF651, + 0xF652, 0xF653, 0xF654, 0xF655, 0xF656, 0xF657, + 0xF658, 0xF659, 0xF65A, 0xF65B, 0xF65C, 0xF65D, + 0xF65E, 0xF65F, 0xF660, 0xF661, 0xF662, 0xF663, + 0xF664, 0xF665, 0xF666, 0xF667, 0xF668, 0xF669, + 0xF66A, 0xF66B, 0xF66C, 0xF66D, 0xF66E, 0xF66F, + 0xF670, 0xF671, 0xF672, 0xF673, 0xF674, 0xF675, + 0xF676, 0xF677, 0xF678, 0xF679, 0xF67A, 0xF67B, + 0xF67C, 0xF67D, 0xF67E, 0xF680, 0xF681, 0xF682, + 0xF683, 0xF684, 0xF685, 0xF686, 0xF687, 0xF688, + 0xF689, 0xF68A, 0xF68B, 0xF68C, 0xF68D, 0xF68E, + 0xF68F, 0xF690, 0xF691, 0xF692, 0xF693, 0xF694, + 0xF695, 0xF696, 0xF697, 0xF698, 0xF699, 0xF69A, + 0xF69B, 0xF69C, 0xF69D, 0xF69E, 0xF69F, 0xF6A0, + 0xF740, 0xF741, 0xF742, 0xF743, 0xF744, 0xF745, + 0xF746, 0xF747, 0xF748, 0xF749, 0xF74A, 0xF74B, + 0xF74C, 0xF74D, 0xF74E, 0xF74F, 0xF750, 0xF751, + 0xF752, 0xF753, 0xF754, 0xF755, 0xF756, 0xF757, + 0xF758, 0xF759, 0xF75A, 0xF75B, 0xF75C, 0xF75D, + 0xF75E, 0xF75F, 0xF760, 0xF761, 0xF762, 0xF763, + 0xF764, 0xF765, 0xF766, 0xF767, 0xF768, 0xF769, + 0xF76A, 0xF76B, 0xF76C, 0xF76D, 0xF76E, 0xF76F, + 0xF770, 0xF771, 0xF772, 0xF773, 0xF774, 0xF775, + 0xF776, 0xF777, 0xF778, 0xF779, 0xF77A, 0xF77B, + 0xF77C, 0xF77D, 0xF77E, 0xF780, 0xD3E3, 0xF781, + 0xF782, 0xF6CF, 0xF783, 0xC2B3, 0xF6D0, 0xF784, + 0xF785, 0xF6D1, 0xF6D2, 0xF6D3, 0xF6D4, 0xF786, + 0xF787, 0xF6D6, 0xF788, 0xB1AB, 0xF6D7, 0xF789, + 0xF6D8, 0xF6D9, 0xF6DA, 0xF78A, 0xF6DB, 0xF6DC, + 0xF78B, 0xF78C, 0xF78D, 0xF78E, 0xF6DD, 0xF6DE, + 0xCFCA, 0xF78F, 0xF6DF, 0xF6E0, 0xF6E1, 0xF6E2, + 0xF6E3, 0xF6E4, 0xC0F0, 0xF6E5, 0xF6E6, 0xF6E7, + 0xF6E8, 0xF6E9, 0xF790, 0xF6EA, 0xF791, 0xF6EB, + 0xF6EC, 0xF792, 0xF6ED, 0xF6EE, 0xF6EF, 0xF6F0, + 0xF6F1, 0xF6F2, 0xF6F3, 0xF6F4, 0xBEA8, 0xF793, + 0xF6F5, 0xF6F6, 0xF6F7, 0xF6F8, 0xF794, 0xF795, + 0xF796, 0xF797, 0xF798, 0xC8FA, 0xF6F9, 0xF6FA, + 0xF6FB, 0xF6FC, 0xF799, 0xF79A, 0xF6FD, 0xF6FE, + 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4, 0xF7A5, 0xF79B, + 0xF79C, 0xF7A6, 0xF7A7, 0xF7A8, 0xB1EE, 0xF7A9, + 0xF7AA, 0xF7AB, 0xF79D, 0xF79E, 0xF7AC, 0xF7AD, + 0xC1DB, 0xF7AE, 0xF79F, 0xF7A0, 0xF7AF, 0xF840, + 0xF841, 0xF842, 0xF843, 0xF844, 0xF845, 0xF846, + 0xF847, 0xF848, 0xF849, 0xF84A, 0xF84B, 0xF84C, + 0xF84D, 0xF84E, 0xF84F, 0xF850, 0xF851, 0xF852, + 0xF853, 0xF854, 0xF855, 0xF856, 0xF857, 0xF858, + 0xF859, 0xF85A, 0xF85B, 0xF85C, 0xF85D, 0xF85E, + 0xF85F, 0xF860, 0xF861, 0xF862, 0xF863, 0xF864, + 0xF865, 0xF866, 0xF867, 0xF868, 0xF869, 0xF86A, + 0xF86B, 0xF86C, 0xF86D, 0xF86E, 0xF86F, 0xF870, + 0xF871, 0xF872, 0xF873, 0xF874, 0xF875, 0xF876, + 0xF877, 0xF878, 0xF879, 0xF87A, 0xF87B, 0xF87C, + 0xF87D, 0xF87E, 0xF880, 0xF881, 0xF882, 0xF883, + 0xF884, 0xF885, 0xF886, 0xF887, 0xF888, 0xF889, + 0xF88A, 0xF88B, 0xF88C, 0xF88D, 0xF88E, 0xF88F, + 0xF890, 0xF891, 0xF892, 0xF893, 0xF894, 0xF895, + 0xF896, 0xF897, 0xF898, 0xF899, 0xF89A, 0xF89B, + 0xF89C, 0xF89D, 0xF89E, 0xF89F, 0xF8A0, 0xF940, + 0xF941, 0xF942, 0xF943, 0xF944, 0xF945, 0xF946, + 0xF947, 0xF948, 0xF949, 0xF94A, 0xF94B, 0xF94C, + 0xF94D, 0xF94E, 0xF94F, 0xF950, 0xF951, 0xF952, + 0xF953, 0xF954, 0xF955, 0xF956, 0xF957, 0xF958, + 0xF959, 0xF95A, 0xF95B, 0xF95C, 0xF95D, 0xF95E, + 0xF95F, 0xF960, 0xF961, 0xF962, 0xF963, 0xF964, + 0xF965, 0xF966, 0xF967, 0xF968, 0xF969, 0xF96A, + 0xF96B, 0xF96C, 0xF96D, 0xF96E, 0xF96F, 0xF970, + 0xF971, 0xF972, 0xF973, 0xF974, 0xF975, 0xF976, + 0xF977, 0xF978, 0xF979, 0xF97A, 0xF97B, 0xF97C, + 0xF97D, 0xF97E, 0xF980, 0xF981, 0xF982, 0xF983, + 0xF984, 0xF985, 0xF986, 0xF987, 0xF988, 0xF989, + 0xF98A, 0xF98B, 0xF98C, 0xF98D, 0xF98E, 0xF98F, + 0xF990, 0xF991, 0xF992, 0xF993, 0xF994, 0xF995, + 0xF996, 0xF997, 0xF998, 0xF999, 0xF99A, 0xF99B, + 0xF99C, 0xF99D, 0xF99E, 0xF99F, 0xF9A0, 0xFA40, + 0xFA41, 0xFA42, 0xFA43, 0xFA44, 0xFA45, 0xFA46, + 0xFA47, 0xFA48, 0xFA49, 0xFA4A, 0xFA4B, 0xFA4C, + 0xFA4D, 0xFA4E, 0xFA4F, 0xFA50, 0xFA51, 0xFA52, + 0xFA53, 0xFA54, 0xFA55, 0xFA56, 0xFA57, 0xFA58, + 0xFA59, 0xFA5A, 0xFA5B, 0xFA5C, 0xFA5D, 0xFA5E, + 0xFA5F, 0xFA60, 0xFA61, 0xFA62, 0xFA63, 0xFA64, + 0xFA65, 0xFA66, 0xFA67, 0xFA68, 0xFA69, 0xFA6A, + 0xFA6B, 0xFA6C, 0xFA6D, 0xFA6E, 0xFA6F, 0xFA70, + 0xFA71, 0xFA72, 0xFA73, 0xFA74, 0xFA75, 0xFA76, + 0xFA77, 0xFA78, 0xFA79, 0xFA7A, 0xFA7B, 0xFA7C, + 0xFA7D, 0xFA7E, 0xFA80, 0xFA81, 0xFA82, 0xFA83, + 0xFA84, 0xFA85, 0xFA86, 0xFA87, 0xFA88, 0xFA89, + 0xFA8A, 0xFA8B, 0xFA8C, 0xFA8D, 0xFA8E, 0xFA8F, + 0xFA90, 0xFA91, 0xFA92, 0xFA93, 0xFA94, 0xFA95, + 0xFA96, 0xFA97, 0xFA98, 0xFA99, 0xFA9A, 0xFA9B, + 0xFA9C, 0xFA9D, 0xFA9E, 0xFA9F, 0xFAA0, 0xFB40, + 0xFB41, 0xFB42, 0xFB43, 0xFB44, 0xFB45, 0xFB46, + 0xFB47, 0xFB48, 0xFB49, 0xFB4A, 0xFB4B, 0xFB4C, + 0xFB4D, 0xFB4E, 0xFB4F, 0xFB50, 0xFB51, 0xFB52, + 0xFB53, 0xFB54, 0xFB55, 0xFB56, 0xFB57, 0xFB58, + 0xFB59, 0xFB5A, 0xFB5B, 0xC4F1, 0xF0AF, 0xBCA6, + 0xF0B0, 0xC3F9, 0xFB5C, 0xC5B8, 0xD1BB, 0xFB5D, + 0xF0B1, 0xF0B2, 0xF0B3, 0xF0B4, 0xF0B5, 0xD1BC, + 0xFB5E, 0xD1EC, 0xFB5F, 0xF0B7, 0xF0B6, 0xD4A7, + 0xFB60, 0xCDD2, 0xF0B8, 0xF0BA, 0xF0B9, 0xF0BB, + 0xF0BC, 0xFB61, 0xFB62, 0xB8EB, 0xF0BD, 0xBAE8, + 0xFB63, 0xF0BE, 0xF0BF, 0xBEE9, 0xF0C0, 0xB6EC, + 0xF0C1, 0xF0C2, 0xF0C3, 0xF0C4, 0xC8B5, 0xF0C5, + 0xF0C6, 0xFB64, 0xF0C7, 0xC5F4, 0xFB65, 0xF0C8, + 0xFB66, 0xFB67, 0xFB68, 0xF0C9, 0xFB69, 0xF0CA, + 0xF7BD, 0xFB6A, 0xF0CB, 0xF0CC, 0xF0CD, 0xFB6B, + 0xF0CE, 0xFB6C, 0xFB6D, 0xFB6E, 0xFB6F, 0xF0CF, + 0xBAD7, 0xFB70, 0xF0D0, 0xF0D1, 0xF0D2, 0xF0D3, + 0xF0D4, 0xF0D5, 0xF0D6, 0xF0D8, 0xFB71, 0xFB72, + 0xD3A5, 0xF0D7, 0xFB73, 0xF0D9, 0xFB74, 0xFB75, + 0xFB76, 0xFB77, 0xFB78, 0xFB79, 0xFB7A, 0xFB7B, + 0xFB7C, 0xFB7D, 0xF5BA, 0xC2B9, 0xFB7E, 0xFB80, + 0xF7E4, 0xFB81, 0xFB82, 0xFB83, 0xFB84, 0xF7E5, + 0xF7E6, 0xFB85, 0xFB86, 0xF7E7, 0xFB87, 0xFB88, + 0xFB89, 0xFB8A, 0xFB8B, 0xFB8C, 0xF7E8, 0xC2B4, + 0xFB8D, 0xFB8E, 0xFB8F, 0xFB90, 0xFB91, 0xFB92, + 0xFB93, 0xFB94, 0xFB95, 0xF7EA, 0xFB96, 0xF7EB, + 0xFB97, 0xFB98, 0xFB99, 0xFB9A, 0xFB9B, 0xFB9C, + 0xC2F3, 0xFB9D, 0xFB9E, 0xFB9F, 0xFBA0, 0xFC40, + 0xFC41, 0xFC42, 0xFC43, 0xFC44, 0xFC45, 0xFC46, + 0xFC47, 0xFC48, 0xF4F0, 0xFC49, 0xFC4A, 0xFC4B, + 0xF4EF, 0xFC4C, 0xFC4D, 0xC2E9, 0xFC4E, 0xF7E1, + 0xF7E2, 0xFC4F, 0xFC50, 0xFC51, 0xFC52, 0xFC53, + 0xBBC6, 0xFC54, 0xFC55, 0xFC56, 0xFC57, 0xD9E4, + 0xFC58, 0xFC59, 0xFC5A, 0xCAF2, 0xC0E8, 0xF0A4, + 0xFC5B, 0xBADA, 0xFC5C, 0xFC5D, 0xC7AD, 0xFC5E, + 0xFC5F, 0xFC60, 0xC4AC, 0xFC61, 0xFC62, 0xF7EC, + 0xF7ED, 0xF7EE, 0xFC63, 0xF7F0, 0xF7EF, 0xFC64, + 0xF7F1, 0xFC65, 0xFC66, 0xF7F4, 0xFC67, 0xF7F3, + 0xFC68, 0xF7F2, 0xF7F5, 0xFC69, 0xFC6A, 0xFC6B, + 0xFC6C, 0xF7F6, 0xFC6D, 0xFC6E, 0xFC6F, 0xFC70, + 0xFC71, 0xFC72, 0xFC73, 0xFC74, 0xFC75, 0xEDE9, + 0xFC76, 0xEDEA, 0xEDEB, 0xFC77, 0xF6BC, 0xFC78, + 0xFC79, 0xFC7A, 0xFC7B, 0xFC7C, 0xFC7D, 0xFC7E, + 0xFC80, 0xFC81, 0xFC82, 0xFC83, 0xFC84, 0xF6BD, + 0xFC85, 0xF6BE, 0xB6A6, 0xFC86, 0xD8BE, 0xFC87, + 0xFC88, 0xB9C4, 0xFC89, 0xFC8A, 0xFC8B, 0xD8BB, + 0xFC8C, 0xDCB1, 0xFC8D, 0xFC8E, 0xFC8F, 0xFC90, + 0xFC91, 0xFC92, 0xCAF3, 0xFC93, 0xF7F7, 0xFC94, + 0xFC95, 0xFC96, 0xFC97, 0xFC98, 0xFC99, 0xFC9A, + 0xFC9B, 0xFC9C, 0xF7F8, 0xFC9D, 0xFC9E, 0xF7F9, + 0xFC9F, 0xFCA0, 0xFD40, 0xFD41, 0xFD42, 0xFD43, + 0xFD44, 0xF7FB, 0xFD45, 0xF7FA, 0xFD46, 0xB1C7, + 0xFD47, 0xF7FC, 0xF7FD, 0xFD48, 0xFD49, 0xFD4A, + 0xFD4B, 0xFD4C, 0xF7FE, 0xFD4D, 0xFD4E, 0xFD4F, + 0xFD50, 0xFD51, 0xFD52, 0xFD53, 0xFD54, 0xFD55, + 0xFD56, 0xFD57, 0xC6EB, 0xECB4, 0xFD58, 0xFD59, + 0xFD5A, 0xFD5B, 0xFD5C, 0xFD5D, 0xFD5E, 0xFD5F, + 0xFD60, 0xFD61, 0xFD62, 0xFD63, 0xFD64, 0xFD65, + 0xFD66, 0xFD67, 0xFD68, 0xFD69, 0xFD6A, 0xFD6B, + 0xFD6C, 0xFD6D, 0xFD6E, 0xFD6F, 0xFD70, 0xFD71, + 0xFD72, 0xFD73, 0xFD74, 0xFD75, 0xFD76, 0xFD77, + 0xFD78, 0xFD79, 0xFD7A, 0xFD7B, 0xFD7C, 0xFD7D, + 0xFD7E, 0xFD80, 0xFD81, 0xFD82, 0xFD83, 0xFD84, + 0xFD85, 0xB3DD, 0xF6B3, 0xFD86, 0xFD87, 0xF6B4, + 0xC1E4, 0xF6B5, 0xF6B6, 0xF6B7, 0xF6B8, 0xF6B9, + 0xF6BA, 0xC8A3, 0xF6BB, 0xFD88, 0xFD89, 0xFD8A, + 0xFD8B, 0xFD8C, 0xFD8D, 0xFD8E, 0xFD8F, 0xFD90, + 0xFD91, 0xFD92, 0xFD93, 0xC1FA, 0xB9A8, 0xEDE8, + 0xFD94, 0xFD95, 0xFD96, 0xB9EA, 0xD9DF, 0xFD97, + 0xFD98, 0xFD99, 0xFD9A, 0xFD9B, 0xAAA1, 0xAAA2, + 0xAAA3, 0xAAA4, 0xAAA5, 0xAAA6, 0xAAA7, 0xAAA8, + 0xAAA9, 0xAAAA, 0xAAAB, 0xAAAC, 0xAAAD, 0xAAAE, + 0xAAAF, 0xAAB0, 0xAAB1, 0xAAB2, 0xAAB3, 0xAAB4, + 0xAAB5, 0xAAB6, 0xAAB7, 0xAAB8, 0xAAB9, 0xAABA, + 0xAABB, 0xAABC, 0xAABD, 0xAABE, 0xAABF, 0xAAC0, + 0xAAC1, 0xAAC2, 0xAAC3, 0xAAC4, 0xAAC5, 0xAAC6, + 0xAAC7, 0xAAC8, 0xAAC9, 0xAACA, 0xAACB, 0xAACC, + 0xAACD, 0xAACE, 0xAACF, 0xAAD0, 0xAAD1, 0xAAD2, + 0xAAD3, 0xAAD4, 0xAAD5, 0xAAD6, 0xAAD7, 0xAAD8, + 0xAAD9, 0xAADA, 0xAADB, 0xAADC, 0xAADD, 0xAADE, + 0xAADF, 0xAAE0, 0xAAE1, 0xAAE2, 0xAAE3, 0xAAE4, + 0xAAE5, 0xAAE6, 0xAAE7, 0xAAE8, 0xAAE9, 0xAAEA, + 0xAAEB, 0xAAEC, 0xAAED, 0xAAEE, 0xAAEF, 0xAAF0, + 0xAAF1, 0xAAF2, 0xAAF3, 0xAAF4, 0xAAF5, 0xAAF6, + 0xAAF7, 0xAAF8, 0xAAF9, 0xAAFA, 0xAAFB, 0xAAFC, + 0xAAFD, 0xAAFE, 0xABA1, 0xABA2, 0xABA3, 0xABA4, + 0xABA5, 0xABA6, 0xABA7, 0xABA8, 0xABA9, 0xABAA, + 0xABAB, 0xABAC, 0xABAD, 0xABAE, 0xABAF, 0xABB0, + 0xABB1, 0xABB2, 0xABB3, 0xABB4, 0xABB5, 0xABB6, + 0xABB7, 0xABB8, 0xABB9, 0xABBA, 0xABBB, 0xABBC, + 0xABBD, 0xABBE, 0xABBF, 0xABC0, 0xABC1, 0xABC2, + 0xABC3, 0xABC4, 0xABC5, 0xABC6, 0xABC7, 0xABC8, + 0xABC9, 0xABCA, 0xABCB, 0xABCC, 0xABCD, 0xABCE, + 0xABCF, 0xABD0, 0xABD1, 0xABD2, 0xABD3, 0xABD4, + 0xABD5, 0xABD6, 0xABD7, 0xABD8, 0xABD9, 0xABDA, + 0xABDB, 0xABDC, 0xABDD, 0xABDE, 0xABDF, 0xABE0, + 0xABE1, 0xABE2, 0xABE3, 0xABE4, 0xABE5, 0xABE6, + 0xABE7, 0xABE8, 0xABE9, 0xABEA, 0xABEB, 0xABEC, + 0xABED, 0xABEE, 0xABEF, 0xABF0, 0xABF1, 0xABF2, + 0xABF3, 0xABF4, 0xABF5, 0xABF6, 0xABF7, 0xABF8, + 0xABF9, 0xABFA, 0xABFB, 0xABFC, 0xABFD, 0xABFE, + 0xACA1, 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6, + 0xACA7, 0xACA8, 0xACA9, 0xACAA, 0xACAB, 0xACAC, + 0xACAD, 0xACAE, 0xACAF, 0xACB0, 0xACB1, 0xACB2, + 0xACB3, 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACB8, + 0xACB9, 0xACBA, 0xACBB, 0xACBC, 0xACBD, 0xACBE, + 0xACBF, 0xACC0, 0xACC1, 0xACC2, 0xACC3, 0xACC4, + 0xACC5, 0xACC6, 0xACC7, 0xACC8, 0xACC9, 0xACCA, + 0xACCB, 0xACCC, 0xACCD, 0xACCE, 0xACCF, 0xACD0, + 0xACD1, 0xACD2, 0xACD3, 0xACD4, 0xACD5, 0xACD6, + 0xACD7, 0xACD8, 0xACD9, 0xACDA, 0xACDB, 0xACDC, + 0xACDD, 0xACDE, 0xACDF, 0xACE0, 0xACE1, 0xACE2, + 0xACE3, 0xACE4, 0xACE5, 0xACE6, 0xACE7, 0xACE8, + 0xACE9, 0xACEA, 0xACEB, 0xACEC, 0xACED, 0xACEE, + 0xACEF, 0xACF0, 0xACF1, 0xACF2, 0xACF3, 0xACF4, + 0xACF5, 0xACF6, 0xACF7, 0xACF8, 0xACF9, 0xACFA, + 0xACFB, 0xACFC, 0xACFD, 0xACFE, 0xADA1, 0xADA2, + 0xADA3, 0xADA4, 0xADA5, 0xADA6, 0xADA7, 0xADA8, + 0xADA9, 0xADAA, 0xADAB, 0xADAC, 0xADAD, 0xADAE, + 0xADAF, 0xADB0, 0xADB1, 0xADB2, 0xADB3, 0xADB4, + 0xADB5, 0xADB6, 0xADB7, 0xADB8, 0xADB9, 0xADBA, + 0xADBB, 0xADBC, 0xADBD, 0xADBE, 0xADBF, 0xADC0, + 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6, + 0xADC7, 0xADC8, 0xADC9, 0xADCA, 0xADCB, 0xADCC, + 0xADCD, 0xADCE, 0xADCF, 0xADD0, 0xADD1, 0xADD2, + 0xADD3, 0xADD4, 0xADD5, 0xADD6, 0xADD7, 0xADD8, + 0xADD9, 0xADDA, 0xADDB, 0xADDC, 0xADDD, 0xADDE, + 0xADDF, 0xADE0, 0xADE1, 0xADE2, 0xADE3, 0xADE4, + 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA, + 0xADEB, 0xADEC, 0xADED, 0xADEE, 0xADEF, 0xADF0, + 0xADF1, 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6, + 0xADF7, 0xADF8, 0xADF9, 0xADFA, 0xADFB, 0xADFC, + 0xADFD, 0xADFE, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, + 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, 0xAEAA, + 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, + 0xAEB1, 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5, 0xAEB6, + 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, 0xAEBC, + 0xAEBD, 0xAEBE, 0xAEBF, 0xAEC0, 0xAEC1, 0xAEC2, + 0xAEC3, 0xAEC4, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, + 0xAEC9, 0xAECA, 0xAECB, 0xAECC, 0xAECD, 0xAECE, + 0xAECF, 0xAED0, 0xAED1, 0xAED2, 0xAED3, 0xAED4, + 0xAED5, 0xAED6, 0xAED7, 0xAED8, 0xAED9, 0xAEDA, + 0xAEDB, 0xAEDC, 0xAEDD, 0xAEDE, 0xAEDF, 0xAEE0, + 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, 0xAEE5, 0xAEE6, + 0xAEE7, 0xAEE8, 0xAEE9, 0xAEEA, 0xAEEB, 0xAEEC, + 0xAEED, 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF2, + 0xAEF3, 0xAEF4, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF8, + 0xAEF9, 0xAEFA, 0xAEFB, 0xAEFC, 0xAEFD, 0xAEFE, + 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6, + 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, + 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB2, + 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6, 0xAFB7, 0xAFB8, + 0xAFB9, 0xAFBA, 0xAFBB, 0xAFBC, 0xAFBD, 0xAFBE, + 0xAFBF, 0xAFC0, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, + 0xAFC5, 0xAFC6, 0xAFC7, 0xAFC8, 0xAFC9, 0xAFCA, + 0xAFCB, 0xAFCC, 0xAFCD, 0xAFCE, 0xAFCF, 0xAFD0, + 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD4, 0xAFD5, 0xAFD6, + 0xAFD7, 0xAFD8, 0xAFD9, 0xAFDA, 0xAFDB, 0xAFDC, + 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1, 0xAFE2, + 0xAFE3, 0xAFE4, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFE8, + 0xAFE9, 0xAFEA, 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE, + 0xAFEF, 0xAFF0, 0xAFF1, 0xAFF2, 0xAFF3, 0xAFF4, + 0xAFF5, 0xAFF6, 0xAFF7, 0xAFF8, 0xAFF9, 0xAFFA, + 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, 0xF8A1, 0xF8A2, + 0xF8A3, 0xF8A4, 0xF8A5, 0xF8A6, 0xF8A7, 0xF8A8, + 0xF8A9, 0xF8AA, 0xF8AB, 0xF8AC, 0xF8AD, 0xF8AE, + 0xF8AF, 0xF8B0, 0xF8B1, 0xF8B2, 0xF8B3, 0xF8B4, + 0xF8B5, 0xF8B6, 0xF8B7, 0xF8B8, 0xF8B9, 0xF8BA, + 0xF8BB, 0xF8BC, 0xF8BD, 0xF8BE, 0xF8BF, 0xF8C0, + 0xF8C1, 0xF8C2, 0xF8C3, 0xF8C4, 0xF8C5, 0xF8C6, + 0xF8C7, 0xF8C8, 0xF8C9, 0xF8CA, 0xF8CB, 0xF8CC, + 0xF8CD, 0xF8CE, 0xF8CF, 0xF8D0, 0xF8D1, 0xF8D2, + 0xF8D3, 0xF8D4, 0xF8D5, 0xF8D6, 0xF8D7, 0xF8D8, + 0xF8D9, 0xF8DA, 0xF8DB, 0xF8DC, 0xF8DD, 0xF8DE, + 0xF8DF, 0xF8E0, 0xF8E1, 0xF8E2, 0xF8E3, 0xF8E4, + 0xF8E5, 0xF8E6, 0xF8E7, 0xF8E8, 0xF8E9, 0xF8EA, + 0xF8EB, 0xF8EC, 0xF8ED, 0xF8EE, 0xF8EF, 0xF8F0, + 0xF8F1, 0xF8F2, 0xF8F3, 0xF8F4, 0xF8F5, 0xF8F6, + 0xF8F7, 0xF8F8, 0xF8F9, 0xF8FA, 0xF8FB, 0xF8FC, + 0xF8FD, 0xF8FE, 0xF9A1, 0xF9A2, 0xF9A3, 0xF9A4, + 0xF9A5, 0xF9A6, 0xF9A7, 0xF9A8, 0xF9A9, 0xF9AA, + 0xF9AB, 0xF9AC, 0xF9AD, 0xF9AE, 0xF9AF, 0xF9B0, + 0xF9B1, 0xF9B2, 0xF9B3, 0xF9B4, 0xF9B5, 0xF9B6, + 0xF9B7, 0xF9B8, 0xF9B9, 0xF9BA, 0xF9BB, 0xF9BC, + 0xF9BD, 0xF9BE, 0xF9BF, 0xF9C0, 0xF9C1, 0xF9C2, + 0xF9C3, 0xF9C4, 0xF9C5, 0xF9C6, 0xF9C7, 0xF9C8, + 0xF9C9, 0xF9CA, 0xF9CB, 0xF9CC, 0xF9CD, 0xF9CE, + 0xF9CF, 0xF9D0, 0xF9D1, 0xF9D2, 0xF9D3, 0xF9D4, + 0xF9D5, 0xF9D6, 0xF9D7, 0xF9D8, 0xF9D9, 0xF9DA, + 0xF9DB, 0xF9DC, 0xF9DD, 0xF9DE, 0xF9DF, 0xF9E0, + 0xF9E1, 0xF9E2, 0xF9E3, 0xF9E4, 0xF9E5, 0xF9E6, + 0xF9E7, 0xF9E8, 0xF9E9, 0xF9EA, 0xF9EB, 0xF9EC, + 0xF9ED, 0xF9EE, 0xF9EF, 0xF9F0, 0xF9F1, 0xF9F2, + 0xF9F3, 0xF9F4, 0xF9F5, 0xF9F6, 0xF9F7, 0xF9F8, + 0xF9F9, 0xF9FA, 0xF9FB, 0xF9FC, 0xF9FD, 0xF9FE, + 0xFAA1, 0xFAA2, 0xFAA3, 0xFAA4, 0xFAA5, 0xFAA6, + 0xFAA7, 0xFAA8, 0xFAA9, 0xFAAA, 0xFAAB, 0xFAAC, + 0xFAAD, 0xFAAE, 0xFAAF, 0xFAB0, 0xFAB1, 0xFAB2, + 0xFAB3, 0xFAB4, 0xFAB5, 0xFAB6, 0xFAB7, 0xFAB8, + 0xFAB9, 0xFABA, 0xFABB, 0xFABC, 0xFABD, 0xFABE, + 0xFABF, 0xFAC0, 0xFAC1, 0xFAC2, 0xFAC3, 0xFAC4, + 0xFAC5, 0xFAC6, 0xFAC7, 0xFAC8, 0xFAC9, 0xFACA, + 0xFACB, 0xFACC, 0xFACD, 0xFACE, 0xFACF, 0xFAD0, + 0xFAD1, 0xFAD2, 0xFAD3, 0xFAD4, 0xFAD5, 0xFAD6, + 0xFAD7, 0xFAD8, 0xFAD9, 0xFADA, 0xFADB, 0xFADC, + 0xFADD, 0xFADE, 0xFADF, 0xFAE0, 0xFAE1, 0xFAE2, + 0xFAE3, 0xFAE4, 0xFAE5, 0xFAE6, 0xFAE7, 0xFAE8, + 0xFAE9, 0xFAEA, 0xFAEB, 0xFAEC, 0xFAED, 0xFAEE, + 0xFAEF, 0xFAF0, 0xFAF1, 0xFAF2, 0xFAF3, 0xFAF4, + 0xFAF5, 0xFAF6, 0xFAF7, 0xFAF8, 0xFAF9, 0xFAFA, + 0xFAFB, 0xFAFC, 0xFAFD, 0xFAFE, 0xFBA1, 0xFBA2, + 0xFBA3, 0xFBA4, 0xFBA5, 0xFBA6, 0xFBA7, 0xFBA8, + 0xFBA9, 0xFBAA, 0xFBAB, 0xFBAC, 0xFBAD, 0xFBAE, + 0xFBAF, 0xFBB0, 0xFBB1, 0xFBB2, 0xFBB3, 0xFBB4, + 0xFBB5, 0xFBB6, 0xFBB7, 0xFBB8, 0xFBB9, 0xFBBA, + 0xFBBB, 0xFBBC, 0xFBBD, 0xFBBE, 0xFBBF, 0xFBC0, + 0xFBC1, 0xFBC2, 0xFBC3, 0xFBC4, 0xFBC5, 0xFBC6, + 0xFBC7, 0xFBC8, 0xFBC9, 0xFBCA, 0xFBCB, 0xFBCC, + 0xFBCD, 0xFBCE, 0xFBCF, 0xFBD0, 0xFBD1, 0xFBD2, + 0xFBD3, 0xFBD4, 0xFBD5, 0xFBD6, 0xFBD7, 0xFBD8, + 0xFBD9, 0xFBDA, 0xFBDB, 0xFBDC, 0xFBDD, 0xFBDE, + 0xFBDF, 0xFBE0, 0xFBE1, 0xFBE2, 0xFBE3, 0xFBE4, + 0xFBE5, 0xFBE6, 0xFBE7, 0xFBE8, 0xFBE9, 0xFBEA, + 0xFBEB, 0xFBEC, 0xFBED, 0xFBEE, 0xFBEF, 0xFBF0, + 0xFBF1, 0xFBF2, 0xFBF3, 0xFBF4, 0xFBF5, 0xFBF6, + 0xFBF7, 0xFBF8, 0xFBF9, 0xFBFA, 0xFBFB, 0xFBFC, + 0xFBFD, 0xFBFE, 0xFCA1, 0xFCA2, 0xFCA3, 0xFCA4, + 0xFCA5, 0xFCA6, 0xFCA7, 0xFCA8, 0xFCA9, 0xFCAA, + 0xFCAB, 0xFCAC, 0xFCAD, 0xFCAE, 0xFCAF, 0xFCB0, + 0xFCB1, 0xFCB2, 0xFCB3, 0xFCB4, 0xFCB5, 0xFCB6, + 0xFCB7, 0xFCB8, 0xFCB9, 0xFCBA, 0xFCBB, 0xFCBC, + 0xFCBD, 0xFCBE, 0xFCBF, 0xFCC0, 0xFCC1, 0xFCC2, + 0xFCC3, 0xFCC4, 0xFCC5, 0xFCC6, 0xFCC7, 0xFCC8, + 0xFCC9, 0xFCCA, 0xFCCB, 0xFCCC, 0xFCCD, 0xFCCE, + 0xFCCF, 0xFCD0, 0xFCD1, 0xFCD2, 0xFCD3, 0xFCD4, + 0xFCD5, 0xFCD6, 0xFCD7, 0xFCD8, 0xFCD9, 0xFCDA, + 0xFCDB, 0xFCDC, 0xFCDD, 0xFCDE, 0xFCDF, 0xFCE0, + 0xFCE1, 0xFCE2, 0xFCE3, 0xFCE4, 0xFCE5, 0xFCE6, + 0xFCE7, 0xFCE8, 0xFCE9, 0xFCEA, 0xFCEB, 0xFCEC, + 0xFCED, 0xFCEE, 0xFCEF, 0xFCF0, 0xFCF1, 0xFCF2, + 0xFCF3, 0xFCF4, 0xFCF5, 0xFCF6, 0xFCF7, 0xFCF8, + 0xFCF9, 0xFCFA, 0xFCFB, 0xFCFC, 0xFCFD, 0xFCFE, + 0xFDA1, 0xFDA2, 0xFDA3, 0xFDA4, 0xFDA5, 0xFDA6, + 0xFDA7, 0xFDA8, 0xFDA9, 0xFDAA, 0xFDAB, 0xFDAC, + 0xFDAD, 0xFDAE, 0xFDAF, 0xFDB0, 0xFDB1, 0xFDB2, + 0xFDB3, 0xFDB4, 0xFDB5, 0xFDB6, 0xFDB7, 0xFDB8, + 0xFDB9, 0xFDBA, 0xFDBB, 0xFDBC, 0xFDBD, 0xFDBE, + 0xFDBF, 0xFDC0, 0xFDC1, 0xFDC2, 0xFDC3, 0xFDC4, + 0xFDC5, 0xFDC6, 0xFDC7, 0xFDC8, 0xFDC9, 0xFDCA, + 0xFDCB, 0xFDCC, 0xFDCD, 0xFDCE, 0xFDCF, 0xFDD0, + 0xFDD1, 0xFDD2, 0xFDD3, 0xFDD4, 0xFDD5, 0xFDD6, + 0xFDD7, 0xFDD8, 0xFDD9, 0xFDDA, 0xFDDB, 0xFDDC, + 0xFDDD, 0xFDDE, 0xFDDF, 0xFDE0, 0xFDE1, 0xFDE2, + 0xFDE3, 0xFDE4, 0xFDE5, 0xFDE6, 0xFDE7, 0xFDE8, + 0xFDE9, 0xFDEA, 0xFDEB, 0xFDEC, 0xFDED, 0xFDEE, + 0xFDEF, 0xFDF0, 0xFDF1, 0xFDF2, 0xFDF3, 0xFDF4, + 0xFDF5, 0xFDF6, 0xFDF7, 0xFDF8, 0xFDF9, 0xFDFA, + 0xFDFB, 0xFDFC, 0xFDFD, 0xFDFE, 0xFEA1, 0xFEA2, + 0xFEA3, 0xFEA4, 0xFEA5, 0xFEA6, 0xFEA7, 0xFEA8, + 0xFEA9, 0xFEAA, 0xFEAB, 0xFEAC, 0xFEAD, 0xFEAE, + 0xFEAF, 0xFEB0, 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4, + 0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8, 0xFEB9, 0xFEBA, + 0xFEBB, 0xFEBC, 0xFEBD, 0xFEBE, 0xFEBF, 0xFEC0, + 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4, 0xFEC5, 0xFEC6, + 0xFEC7, 0xFEC8, 0xFEC9, 0xFECA, 0xFECB, 0xFECC, + 0xFECD, 0xFECE, 0xFECF, 0xFED0, 0xFED1, 0xFED2, + 0xFED3, 0xFED4, 0xFED5, 0xFED6, 0xFED7, 0xFED8, + 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, 0xFEDD, 0xFEDE, + 0xFEDF, 0xFEE0, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4, + 0xFEE5, 0xFEE6, 0xFEE7, 0xFEE8, 0xFEE9, 0xFEEA, + 0xFEEB, 0xFEEC, 0xFEED, 0xFEEE, 0xFEEF, 0xFEF0, + 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, 0xFEF5, 0xFEF6, + 0xFEF7, 0xFEF8, 0xFEF9, 0xFEFA, 0xFEFB, 0xFEFC, + 0xFEFD, 0xFEFE, 0xA140, 0xA141, 0xA142, 0xA143, + 0xA144, 0xA145, 0xA146, 0xA147, 0xA148, 0xA149, + 0xA14A, 0xA14B, 0xA14C, 0xA14D, 0xA14E, 0xA14F, + 0xA150, 0xA151, 0xA152, 0xA153, 0xA154, 0xA155, + 0xA156, 0xA157, 0xA158, 0xA159, 0xA15A, 0xA15B, + 0xA15C, 0xA15D, 0xA15E, 0xA15F, 0xA160, 0xA161, + 0xA162, 0xA163, 0xA164, 0xA165, 0xA166, 0xA167, + 0xA168, 0xA169, 0xA16A, 0xA16B, 0xA16C, 0xA16D, + 0xA16E, 0xA16F, 0xA170, 0xA171, 0xA172, 0xA173, + 0xA174, 0xA175, 0xA176, 0xA177, 0xA178, 0xA179, + 0xA17A, 0xA17B, 0xA17C, 0xA17D, 0xA17E, 0xA180, + 0xA181, 0xA182, 0xA183, 0xA184, 0xA185, 0xA186, + 0xA187, 0xA188, 0xA189, 0xA18A, 0xA18B, 0xA18C, + 0xA18D, 0xA18E, 0xA18F, 0xA190, 0xA191, 0xA192, + 0xA193, 0xA194, 0xA195, 0xA196, 0xA197, 0xA198, + 0xA199, 0xA19A, 0xA19B, 0xA19C, 0xA19D, 0xA19E, + 0xA19F, 0xA1A0, 0xA240, 0xA241, 0xA242, 0xA243, + 0xA244, 0xA245, 0xA246, 0xA247, 0xA248, 0xA249, + 0xA24A, 0xA24B, 0xA24C, 0xA24D, 0xA24E, 0xA24F, + 0xA250, 0xA251, 0xA252, 0xA253, 0xA254, 0xA255, + 0xA256, 0xA257, 0xA258, 0xA259, 0xA25A, 0xA25B, + 0xA25C, 0xA25D, 0xA25E, 0xA25F, 0xA260, 0xA261, + 0xA262, 0xA263, 0xA264, 0xA265, 0xA266, 0xA267, + 0xA268, 0xA269, 0xA26A, 0xA26B, 0xA26C, 0xA26D, + 0xA26E, 0xA26F, 0xA270, 0xA271, 0xA272, 0xA273, + 0xA274, 0xA275, 0xA276, 0xA277, 0xA278, 0xA279, + 0xA27A, 0xA27B, 0xA27C, 0xA27D, 0xA27E, 0xA280, + 0xA281, 0xA282, 0xA283, 0xA284, 0xA285, 0xA286, + 0xA287, 0xA288, 0xA289, 0xA28A, 0xA28B, 0xA28C, + 0xA28D, 0xA28E, 0xA28F, 0xA290, 0xA291, 0xA292, + 0xA293, 0xA294, 0xA295, 0xA296, 0xA297, 0xA298, + 0xA299, 0xA29A, 0xA29B, 0xA29C, 0xA29D, 0xA29E, + 0xA29F, 0xA2A0, 0xA340, 0xA341, 0xA342, 0xA343, + 0xA344, 0xA345, 0xA346, 0xA347, 0xA348, 0xA349, + 0xA34A, 0xA34B, 0xA34C, 0xA34D, 0xA34E, 0xA34F, + 0xA350, 0xA351, 0xA352, 0xA353, 0xA354, 0xA355, + 0xA356, 0xA357, 0xA358, 0xA359, 0xA35A, 0xA35B, + 0xA35C, 0xA35D, 0xA35E, 0xA35F, 0xA360, 0xA361, + 0xA362, 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, + 0xA368, 0xA369, 0xA36A, 0xA36B, 0xA36C, 0xA36D, + 0xA36E, 0xA36F, 0xA370, 0xA371, 0xA372, 0xA373, + 0xA374, 0xA375, 0xA376, 0xA377, 0xA378, 0xA379, + 0xA37A, 0xA37B, 0xA37C, 0xA37D, 0xA37E, 0xA380, + 0xA381, 0xA382, 0xA383, 0xA384, 0xA385, 0xA386, + 0xA387, 0xA388, 0xA389, 0xA38A, 0xA38B, 0xA38C, + 0xA38D, 0xA38E, 0xA38F, 0xA390, 0xA391, 0xA392, + 0xA393, 0xA394, 0xA395, 0xA396, 0xA397, 0xA398, + 0xA399, 0xA39A, 0xA39B, 0xA39C, 0xA39D, 0xA39E, + 0xA39F, 0xA3A0, 0xA440, 0xA441, 0xA442, 0xA443, + 0xA444, 0xA445, 0xA446, 0xA447, 0xA448, 0xA449, + 0xA44A, 0xA44B, 0xA44C, 0xA44D, 0xA44E, 0xA44F, + 0xA450, 0xA451, 0xA452, 0xA453, 0xA454, 0xA455, + 0xA456, 0xA457, 0xA458, 0xA459, 0xA45A, 0xA45B, + 0xA45C, 0xA45D, 0xA45E, 0xA45F, 0xA460, 0xA461, + 0xA462, 0xA463, 0xA464, 0xA465, 0xA466, 0xA467, + 0xA468, 0xA469, 0xA46A, 0xA46B, 0xA46C, 0xA46D, + 0xA46E, 0xA46F, 0xA470, 0xA471, 0xA472, 0xA473, + 0xA474, 0xA475, 0xA476, 0xA477, 0xA478, 0xA479, + 0xA47A, 0xA47B, 0xA47C, 0xA47D, 0xA47E, 0xA480, + 0xA481, 0xA482, 0xA483, 0xA484, 0xA485, 0xA486, + 0xA487, 0xA488, 0xA489, 0xA48A, 0xA48B, 0xA48C, + 0xA48D, 0xA48E, 0xA48F, 0xA490, 0xA491, 0xA492, + 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, + 0xA499, 0xA49A, 0xA49B, 0xA49C, 0xA49D, 0xA49E, + 0xA49F, 0xA4A0, 0xA540, 0xA541, 0xA542, 0xA543, + 0xA544, 0xA545, 0xA546, 0xA547, 0xA548, 0xA549, + 0xA54A, 0xA54B, 0xA54C, 0xA54D, 0xA54E, 0xA54F, + 0xA550, 0xA551, 0xA552, 0xA553, 0xA554, 0xA555, + 0xA556, 0xA557, 0xA558, 0xA559, 0xA55A, 0xA55B, + 0xA55C, 0xA55D, 0xA55E, 0xA55F, 0xA560, 0xA561, + 0xA562, 0xA563, 0xA564, 0xA565, 0xA566, 0xA567, + 0xA568, 0xA569, 0xA56A, 0xA56B, 0xA56C, 0xA56D, + 0xA56E, 0xA56F, 0xA570, 0xA571, 0xA572, 0xA573, + 0xA574, 0xA575, 0xA576, 0xA577, 0xA578, 0xA579, + 0xA57A, 0xA57B, 0xA57C, 0xA57D, 0xA57E, 0xA580, + 0xA581, 0xA582, 0xA583, 0xA584, 0xA585, 0xA586, + 0xA587, 0xA588, 0xA589, 0xA58A, 0xA58B, 0xA58C, + 0xA58D, 0xA58E, 0xA58F, 0xA590, 0xA591, 0xA592, + 0xA593, 0xA594, 0xA595, 0xA596, 0xA597, 0xA598, + 0xA599, 0xA59A, 0xA59B, 0xA59C, 0xA59D, 0xA59E, + 0xA59F, 0xA5A0, 0xA640, 0xA641, 0xA642, 0xA643, + 0xA644, 0xA645, 0xA646, 0xA647, 0xA648, 0xA649, + 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F, + 0xA650, 0xA651, 0xA652, 0xA653, 0xA654, 0xA655, + 0xA656, 0xA657, 0xA658, 0xA659, 0xA65A, 0xA65B, + 0xA65C, 0xA65D, 0xA65E, 0xA65F, 0xA660, 0xA661, + 0xA662, 0xA663, 0xA664, 0xA665, 0xA666, 0xA667, + 0xA668, 0xA669, 0xA66A, 0xA66B, 0xA66C, 0xA66D, + 0xA66E, 0xA66F, 0xA670, 0xA671, 0xA672, 0xA673, + 0xA674, 0xA675, 0xA676, 0xA677, 0xA678, 0xA679, + 0xA67A, 0xA67B, 0xA67C, 0xA67D, 0xA67E, 0xA680, + 0xA681, 0xA682, 0xA683, 0xA684, 0xA685, 0xA686, + 0xA687, 0xA688, 0xA689, 0xA68A, 0xA68B, 0xA68C, + 0xA68D, 0xA68E, 0xA68F, 0xA690, 0xA691, 0xA692, + 0xA693, 0xA694, 0xA695, 0xA696, 0xA697, 0xA698, + 0xA699, 0xA69A, 0xA69B, 0xA69C, 0xA69D, 0xA69E, + 0xA69F, 0xA6A0, 0xA740, 0xA741, 0xA742, 0xA743, + 0xA744, 0xA745, 0xA746, 0xA747, 0xA748, 0xA749, + 0xA74A, 0xA74B, 0xA74C, 0xA74D, 0xA74E, 0xA74F, + 0xA750, 0xA751, 0xA752, 0xA753, 0xA754, 0xA755, + 0xA756, 0xA757, 0xA758, 0xA759, 0xA75A, 0xA75B, + 0xA75C, 0xA75D, 0xA75E, 0xA75F, 0xA760, 0xA761, + 0xA762, 0xA763, 0xA764, 0xA765, 0xA766, 0xA767, + 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, 0xA76D, + 0xA76E, 0xA76F, 0xA770, 0xA771, 0xA772, 0xA773, + 0xA774, 0xA775, 0xA776, 0xA777, 0xA778, 0xA779, + 0xA77A, 0xA77B, 0xA77C, 0xA77D, 0xA77E, 0xA780, + 0xA781, 0xA782, 0xA783, 0xA784, 0xA785, 0xA786, + 0xA787, 0xA788, 0xA789, 0xA78A, 0xA78B, 0xA78C, + 0xA78D, 0xA78E, 0xA78F, 0xA790, 0xA791, 0xA792, + 0xA793, 0xA794, 0xA795, 0xA796, 0xA797, 0xA798, + 0xA799, 0xA79A, 0xA79B, 0xA79C, 0xA79D, 0xA79E, + 0xA79F, 0xA7A0, 0xA2AB, 0xA2AC, 0xA2AD, 0xA2AE, + 0xA2AF, 0xA2B0,0x8336C739, 0xA2E4, 0xA2EF, 0xA2F0, + 0xA2FD, 0xA2FE, 0xA4F4, 0xA4F5, 0xA4F6, 0xA4F7, + 0xA4F8, 0xA4F9, 0xA4FA, 0xA4FB, 0xA4FC, 0xA4FD, + 0xA4FE, 0xA5F7, 0xA5F8, 0xA5F9, 0xA5FA, 0xA5FB, + 0xA5FC, 0xA5FD, 0xA5FE, 0xA6B9, 0xA6BA, 0xA6BB, + 0xA6BC, 0xA6BD, 0xA6BE, 0xA6BF, 0xA6C0, 0xA6D9, + 0xA6DA, 0xA6DB, 0xA6DC, 0xA6DD, 0xA6DE, 0xA6DF, + 0xA6EC, 0xA6ED, 0xA6F3, 0xA6F6, 0xA6F7, 0xA6F8, + 0xA6F9, 0xA6FA, 0xA6FB, 0xA6FC, 0xA6FD, 0xA6FE, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C5, 0xA7C6, 0xA7C7, + 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, 0xA7CC, 0xA7CD, + 0xA7CE, 0xA7CF, 0xA7D0, 0xA7F2, 0xA7F3, 0xA7F4, + 0xA7F5, 0xA7F6, 0xA7F7, 0xA7F8, 0xA7F9, 0xA7FA, + 0xA7FB, 0xA7FC, 0xA7FD, 0xA7FE, 0xA896, 0xA897, + 0xA898, 0xA899, 0xA89A, 0xA89B, 0xA89C, 0xA89D, + 0xA89E, 0xA89F, 0xA8A0, 0xA8BC,0x8336C830, 0xA8C1, + 0xA8C2, 0xA8C3, 0xA8C4, 0xA8EA, 0xA8EB, 0xA8EC, + 0xA8ED, 0xA8EE, 0xA8EF, 0xA8F0, 0xA8F1, 0xA8F2, + 0xA8F3, 0xA8F4, 0xA8F5, 0xA8F6, 0xA8F7, 0xA8F8, + 0xA8F9, 0xA8FA, 0xA8FB, 0xA8FC, 0xA8FD, 0xA8FE, + 0xA958, 0xA95B, 0xA95D, 0xA95E, 0xA95F,0x8336C831, + 0x8336C832,0x8336C833,0x8336C834,0x8336C835,0x8336C836,0x8336C837, + 0x8336C838,0x8336C839,0x8336C930,0x8336C931,0x8336C932,0x8336C933, + 0xA997, 0xA998, 0xA999, 0xA99A, 0xA99B, 0xA99C, + 0xA99D, 0xA99E, 0xA99F, 0xA9A0, 0xA9A1, 0xA9A2, + 0xA9A3, 0xA9F0, 0xA9F1, 0xA9F2, 0xA9F3, 0xA9F4, + 0xA9F5, 0xA9F6, 0xA9F7, 0xA9F8, 0xA9F9, 0xA9FA, + 0xA9FB, 0xA9FC, 0xA9FD, 0xA9FE, 0xD7FA, 0xD7FB, + 0xD7FC, 0xD7FD, 0xD7FE,0x8336C934, 0xFE51, 0xFE52, + 0xFE53,0x8336C935,0x8336C936,0x8336C937,0x8336C938,0x8336C939, + 0xFE59,0x8336CA30,0x8336CA31,0x8336CA32,0x8336CA33,0x8336CA34, + 0x8336CA35,0x8336CA36, 0xFE61,0x8336CA37,0x8336CA38,0x8336CA39, + 0x8336CB30, 0xFE66, 0xFE67,0x8336CB31,0x8336CB32,0x8336CB33, + 0x8336CB34, 0xFE6C, 0xFE6D,0x8336CB35,0x8336CB36,0x8336CB37, + 0x8336CB38,0x8336CB39,0x8336CC30,0x8336CC31,0x8336CC32, 0xFE76, + 0x8336CC33,0x8336CC34,0x8336CC35,0x8336CC36,0x8336CC37,0x8336CC38, + 0x8336CC39, 0xFE7E,0x8336CD30,0x8336CD31,0x8336CD32,0x8336CD33, + 0x8336CD34,0x8336CD35,0x8336CD36,0x8336CD37,0x8336CD38,0x8336CD39, + 0x8336CE30,0x8336CE31,0x8336CE32,0x8336CE33,0x8336CE34,0x8336CE35, + 0xFE90, 0xFE91,0x8336CE36,0x8336CE37,0x8336CE38,0x8336CE39, + 0x8336CF30,0x8336CF31,0x8336CF32,0x8336CF33,0x8336CF34,0x8336CF35, + 0x8336CF36,0x8336CF37,0x8336CF38,0x8336CF39, 0xFEA0, 0xFD9C, + 0x84308535,0x84308536,0x84308537,0x84308538,0x84308539,0x84308630, + 0x84308631,0x84308632,0x84308633,0x84308634,0x84308635,0x84308636, + 0x84308637,0x84308638,0x84308639,0x84308730,0x84308731,0x84308732, + 0x84308733,0x84308734,0x84308735,0x84308736,0x84308737,0x84308738, + 0x84308739,0x84308830,0x84308831,0x84308832,0x84308833,0x84308834, + 0x84308835,0x84308836,0x84308837,0x84308838,0x84308839,0x84308930, + 0x84308931,0x84308932,0x84308933,0x84308934,0x84308935,0x84308936, + 0x84308937,0x84308938,0x84308939,0x84308A30,0x84308A31,0x84308A32, + 0x84308A33,0x84308A34,0x84308A35,0x84308A36,0x84308A37,0x84308A38, + 0x84308A39,0x84308B30,0x84308B31,0x84308B32,0x84308B33,0x84308B34, + 0x84308B35,0x84308B36,0x84308B37,0x84308B38,0x84308B39,0x84308C30, + 0x84308C31,0x84308C32,0x84308C33,0x84308C34,0x84308C35,0x84308C36, + 0x84308C37,0x84308C38,0x84308C39,0x84308D30, 0xFD9D,0x84308D31, + 0x84308D32,0x84308D33,0x84308D34,0x84308D35,0x84308D36,0x84308D37, + 0x84308D38,0x84308D39,0x84308E30,0x84308E31,0x84308E32,0x84308E33, + 0x84308E34,0x84308E35,0x84308E36,0x84308E37,0x84308E38,0x84308E39, + 0x84308F30,0x84308F31,0x84308F32,0x84308F33,0x84308F34,0x84308F35, + 0x84308F36,0x84308F37, 0xFD9E,0x84308F38,0x84308F39,0x84309030, + 0x84309031,0x84309032,0x84309033,0x84309034,0x84309035,0x84309036, + 0x84309037,0x84309038,0x84309039,0x84309130,0x84309131,0x84309132, + 0x84309133,0x84309134,0x84309135,0x84309136,0x84309137,0x84309138, + 0x84309139,0x84309230,0x84309231,0x84309232,0x84309233,0x84309234, + 0x84309235,0x84309236,0x84309237,0x84309238,0x84309239,0x84309330, + 0x84309331,0x84309332,0x84309333,0x84309334,0x84309335,0x84309336, + 0x84309337,0x84309338,0x84309339,0x84309430,0x84309431,0x84309432, + 0x84309433,0x84309434,0x84309435,0x84309436,0x84309437,0x84309438, + 0x84309439,0x84309530,0x84309531,0x84309532,0x84309533,0x84309534, + 0x84309535,0x84309536,0x84309537,0x84309538,0x84309539,0x84309630, + 0x84309631,0x84309632,0x84309633,0x84309634,0x84309635,0x84309636, + 0x84309637,0x84309638,0x84309639,0x84309730,0x84309731,0x84309732, + 0x84309733,0x84309734,0x84309735,0x84309736,0x84309737,0x84309738, + 0xFD9F,0x84309739,0x84309830,0x84309831,0x84309832,0x84309833, + 0x84309834,0x84309835,0x84309836,0x84309837, 0xFDA0,0x84309838, + 0x84309839,0x84309930,0x84309931,0x84309932,0x84309933,0x84309934, + 0x84309935,0x84309936,0x84309937,0x84309938,0x84309939,0x84309A30, + 0x84309A31,0x84309A32,0x84309A33,0x84309A34,0x84309A35,0x84309A36, + 0x84309A37,0x84309A38,0x84309A39,0x84309B30,0x84309B31,0x84309B32, + 0x84309B33, 0xFE40, 0xFE41, 0xFE42, 0xFE43,0x84309B34, + 0xFE44,0x84309B35, 0xFE45, 0xFE46,0x84309B36,0x84309B37, + 0x84309B38, 0xFE47,0x84309B39,0x84309C30,0x84309C31,0x84309C32, + 0x84309C33,0x84309C34, 0xFE48, 0xFE49, 0xFE4A,0x84309C35, + 0xFE4B, 0xFE4C,0x84309C36,0x84309C37, 0xFE4D, 0xFE4E, + 0xFE4F, 0xA955, 0xA6F2,0x84318538, 0xA6F4, 0xA6F5, + 0xA6E0, 0xA6E1, 0xA6F0, 0xA6F1, 0xA6E2, 0xA6E3, + 0xA6EE, 0xA6EF, 0xA6E6, 0xA6E7, 0xA6E4, 0xA6E5, + 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB,0x84318539,0x84318630, + 0x84318631,0x84318632, 0xA968, 0xA969, 0xA96A, 0xA96B, + 0xA96C, 0xA96D, 0xA96E, 0xA96F, 0xA970, 0xA971, + 0x84318633, 0xA972, 0xA973, 0xA974, 0xA975,0x84318634, + 0xA976, 0xA977, 0xA978, 0xA979, 0xA97A, 0xA97B, + 0xA97C, 0xA97D, 0xA97E, 0xA980, 0xA981, 0xA982, + 0xA983, 0xA984,0x84318635, 0xA985, 0xA986, 0xA987, + 0xA988,0x84318636,0x84318637,0x84318638,0x84318639,0x84318730, + 0x84318731,0x84318732,0x84318733,0x84318734,0x84318735,0x84318736, + 0x84318737,0x84318738,0x84318739,0x84318830,0x84318831,0x84318832, + 0x84318833,0x84318834,0x84318835,0x84318836,0x84318837,0x84318838, + 0x84318839,0x84318930,0x84318931,0x84318932,0x84318933,0x84318934, + 0x84318935,0x84318936,0x84318937,0x84318938,0x84318939,0x84318A30, + 0x84318A31,0x84318A32,0x84318A33,0x84318A34,0x84318A35,0x84318A36, + 0x84318A37,0x84318A38,0x84318A39,0x84318B30,0x84318B31,0x84318B32, + 0x84318B33,0x84318B34,0x84318B35,0x84318B36,0x84318B37,0x84318B38, + 0x84318B39,0x84318C30,0x84318C31,0x84318C32,0x84318C33,0x84318C34, + 0x84318C35,0x84318C36,0x84318C37,0x84318C38,0x84318C39,0x84318D30, + 0x84318D31,0x84318D32,0x84318D33,0x84318D34,0x84318D35,0x84318D36, + 0x84318D37,0x84318D38,0x84318D39,0x84318E30,0x84318E31,0x84318E32, + 0x84318E33,0x84318E34,0x84318E35,0x84318E36,0x84318E37,0x84318E38, + 0x84318E39,0x84318F30,0x84318F31,0x84318F32,0x84318F33,0x84318F34, + 0x84318F35,0x84318F36,0x84318F37,0x84318F38,0x84318F39,0x84319030, + 0x84319031,0x84319032,0x84319033,0x84319034,0x84319035,0x84319036, + 0x84319037,0x84319038,0x84319039,0x84319130,0x84319131,0x84319132, + 0x84319133,0x84319134,0x84319135,0x84319136,0x84319137,0x84319138, + 0x84319139,0x84319230,0x84319231,0x84319232,0x84319233,0x84319234, + 0x84319235,0x84319236,0x84319237,0x84319238,0x84319239,0x84319330, + 0x84319331,0x84319332,0x84319333,0x84319334,0x84319335,0x84319336, + 0x84319337,0x84319338,0x84319339,0x84319430,0x84319431,0x84319432, + 0x84319433,0x84319434,0x84319435,0x84319436,0x84319437,0x84319438, + 0x84319439,0x84319530,0x84319531,0x84319532,0x84319533,0x84319534, + 0xA3A1, 0xA3A2, 0xA3A3, 0xA1E7, 0xA3A5, 0xA3A6, + 0xA3A7, 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, + 0xA3AD, 0xA3AE, 0xA3AF, 0xA3B0, 0xA3B1, 0xA3B2, + 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, 0xA3B8, + 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, + 0xA3BF, 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, + 0xA3C5, 0xA3C6, 0xA3C7, 0xA3C8, 0xA3C9, 0xA3CA, + 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, 0xA3D0, + 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, + 0xA3D7, 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA3DC, + 0xA3DD, 0xA3DE, 0xA3DF, 0xA3E0, 0xA3E1, 0xA3E2, + 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, 0xA3E8, + 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, + 0xA3EF, 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, + 0xA3F5, 0xA3F6, 0xA3F7, 0xA3F8, 0xA3F9, 0xA3FA, + 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AB,0x84319535,0x84319536, + 0x84319537,0x84319538,0x84319539,0x84319630,0x84319631,0x84319632, + 0x84319633,0x84319634,0x84319635,0x84319636,0x84319637,0x84319638, + 0x84319639,0x84319730,0x84319731,0x84319732,0x84319733,0x84319734, + 0x84319735,0x84319736,0x84319737,0x84319738,0x84319739,0x84319830, + 0x84319831,0x84319832,0x84319833,0x84319834,0x84319835,0x84319836, + 0x84319837,0x84319838,0x84319839,0x84319930,0x84319931,0x84319932, + 0x84319933,0x84319934,0x84319935,0x84319936,0x84319937,0x84319938, + 0x84319939,0x84319A30,0x84319A31,0x84319A32,0x84319A33,0x84319A34, + 0x84319A35,0x84319A36,0x84319A37,0x84319A38,0x84319A39,0x84319B30, + 0x84319B31,0x84319B32,0x84319B33,0x84319B34,0x84319B35,0x84319B36, + 0x84319B37,0x84319B38,0x84319B39,0x84319C30,0x84319C31,0x84319C32, + 0x84319C33,0x84319C34,0x84319C35,0x84319C36,0x84319C37,0x84319C38, + 0x84319C39,0x84319D30,0x84319D31,0x84319D32,0x84319D33,0x84319D34, + 0x84319D35,0x84319D36,0x84319D37,0x84319D38,0x84319D39,0x84319E30, + 0x84319E31,0x84319E32,0x84319E33,0x84319E34,0x84319E35,0x84319E36, + 0x84319E37,0x84319E38,0x84319E39,0x84319F30,0x84319F31,0x84319F32, + 0x84319F33,0x84319F34,0x84319F35,0x84319F36,0x84319F37,0x84319F38, + 0x84319F39,0x8431A030,0x8431A031,0x8431A032,0x8431A033,0x8431A034, + 0x8431A035,0x8431A036,0x8431A037,0x8431A038,0x8431A039,0x8431A130, + 0x8431A131,0x8431A132,0x8431A133,0x8431A134,0x8431A135,0x8431A136, + 0x8431A137,0x8431A138,0x8431A139,0x8431A230,0x8431A231,0x8431A232, + 0x8431A233, 0xA1E9, 0xA1EA, 0xA956, 0xA3FE, 0xA957, + 0xA3A4, +}; + +ImplUnicodeToGb180302000Range const + aImplUnicodeToGb180302000Ranges[] = { + { 0, 0x0452, 0x200F, 820 }, + { 978, 0x2643, 0x2E80, 9219 }, + { 2565, 0x361B, 0x3917, 12973 }, + { 4511, 0x3CE1, 0x4055, 14698 }, + { 5480, 0x4160, 0x4336, 15847 }, + { 5746, 0x44D7, 0x464B, 16729 }, + { 6162, 0x478E, 0x4946, 17418 }, + { 6484, 0x49B8, 0x4C76, 17961 }, + { 6597, 0x9FA6, 0xDFFF, 19043 }, + { 27892, 0xE865, 0xF92B, 33550 }, + { 30041, 0xFA2A, 0xFE2F, 38078 }, + { 30295, 0xFFE6, 0xFFFF, 39394 }, +}; diff --git a/sal/textenc/gettextencodingdata.hxx b/sal/textenc/gettextencodingdata.hxx new file mode 100644 index 000000000..8dbab7c08 --- /dev/null +++ b/sal/textenc/gettextencodingdata.hxx @@ -0,0 +1,30 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include + +#include + +#include "tenchelp.hxx" + +ImplTextEncodingData const* Impl_getTextEncodingData(rtl_TextEncoding nEncoding); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/handleundefinedunicodetotextchar.cxx b/sal/textenc/handleundefinedunicodetotextchar.cxx new file mode 100644 index 000000000..76aed03e1 --- /dev/null +++ b/sal/textenc/handleundefinedunicodetotextchar.cxx @@ -0,0 +1,171 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include + +#include +#include + +#include "handleundefinedunicodetotextchar.hxx" +#include "tenchelp.hxx" + +namespace { + +bool ImplIsUnicodeIgnoreChar(sal_Unicode c, sal_uInt32 nFlags) +{ + return + ((nFlags & RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE) != 0 + && ImplIsZeroWidth(c)) + || ((nFlags & RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE) != 0 + && ImplIsControlOrFormat(c)) + || ((nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE) != 0 + && ImplIsPrivateUse(c)); +} + +bool ImplGetUndefinedAsciiMultiByte(sal_uInt32 nFlags, + char * pBuf, + sal_Size nMaxLen) +{ + if (nMaxLen == 0) + return false; + switch (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) + { + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_0: + *pBuf = 0x00; + break; + + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK: + default: /* RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT */ + *pBuf = 0x3F; + break; + + case RTL_UNICODETOTEXT_FLAGS_UNDEFINED_UNDERLINE: + *pBuf = 0x5F; + break; + } + return true; +} + +bool ImplGetInvalidAsciiMultiByte(sal_uInt32 nFlags, + char * pBuf, + sal_Size nMaxLen) +{ + if (nMaxLen == 0) + return false; + switch (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK) + { + case RTL_UNICODETOTEXT_FLAGS_INVALID_0: + *pBuf = 0x00; + break; + + case RTL_UNICODETOTEXT_FLAGS_INVALID_QUESTIONMARK: + default: /* RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT */ + *pBuf = 0x3F; + break; + + case RTL_UNICODETOTEXT_FLAGS_INVALID_UNDERLINE: + *pBuf = 0x5F; + break; + } + return true; +} + +} + +bool sal::detail::textenc::handleUndefinedUnicodeToTextChar( + sal_Unicode const ** ppSrcBuf, sal_Unicode const * pEndSrcBuf, + char ** ppDestBuf, char const * pEndDestBuf, sal_uInt32 nFlags, + sal_uInt32 * pInfo) +{ + sal_Unicode c = **ppSrcBuf; + + /* Should the private character map to one byte */ + if ( (c >= RTL_TEXTCVT_BYTE_PRIVATE_START) && (c <= RTL_TEXTCVT_BYTE_PRIVATE_END) ) + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 ) + { + **ppDestBuf = static_cast(static_cast(c-RTL_TEXTCVT_BYTE_PRIVATE_START)); + (*ppDestBuf)++; + (*ppSrcBuf)++; + return true; + } + } + + /* Should this character ignored (Private, Non Spacing, Control) */ + if ( ImplIsUnicodeIgnoreChar( c, nFlags ) ) + { + (*ppSrcBuf)++; + return true; + } + + /* Surrogates Characters should result in */ + /* one replacement character */ + if (rtl::isHighSurrogate(c)) + { + if ( ((*ppSrcBuf) + 1) == pEndSrcBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + return false; + } + + c = *((*ppSrcBuf)+1); + if (rtl::isLowSurrogate(c)) + (*ppSrcBuf)++; + else + { + *pInfo |= RTL_UNICODETOTEXT_INFO_INVALID; + if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK) == RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR; + return false; + } + if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK) == RTL_UNICODETOTEXT_FLAGS_INVALID_IGNORE ) + { + (*ppSrcBuf)++; + return true; + } + if (ImplGetInvalidAsciiMultiByte(nFlags, + *ppDestBuf, + pEndDestBuf - *ppDestBuf)) + { + ++*ppSrcBuf; + ++*ppDestBuf; + return true; + } + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + return false; + } + } + + *pInfo |= RTL_UNICODETOTEXT_INFO_UNDEFINED; + if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) == RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR; + return false; + } + if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) == RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE ) + (*ppSrcBuf)++; + else if (ImplGetUndefinedAsciiMultiByte(nFlags, + *ppDestBuf, + pEndDestBuf - *ppDestBuf)) + { + ++*ppSrcBuf; + ++*ppDestBuf; + } + else + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + return false; + } + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/handleundefinedunicodetotextchar.hxx b/sal/textenc/handleundefinedunicodetotextchar.hxx new file mode 100644 index 000000000..106ad8a43 --- /dev/null +++ b/sal/textenc/handleundefinedunicodetotextchar.hxx @@ -0,0 +1,30 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_TEXTENC_HANDLEUNDEFINEDUNICODETOTEXTCHAR_HXX +#define INCLUDED_SAL_TEXTENC_HANDLEUNDEFINEDUNICODETOTEXTCHAR_HXX + +#include + +#include +#include + +// Internal, non-stable ABI + +namespace sal::detail::textenc { + +// True means "continue," false means "break:" +bool SAL_DLLPUBLIC handleUndefinedUnicodeToTextChar( + sal_Unicode const ** ppSrcBuf, sal_Unicode const * pEndSrcBuf, + char ** ppDestBuf, char const * pEndDestBuf, sal_uInt32 nFlags, + sal_uInt32 * pInfo); + +} + +#endif diff --git a/sal/textenc/tables.cxx b/sal/textenc/tables.cxx new file mode 100644 index 000000000..075f1d56f --- /dev/null +++ b/sal/textenc/tables.cxx @@ -0,0 +1,270 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include + +#include +#include + +#define NOTABUNI_START 0xFF +#define NOTABUNI_END 0x00 + +#define NOTABCHAR_START 0xFFFF +#define NOTABCHAR_END 0x0000 + +#define SAME8090UNI_START 0x80 +#define SAME8090UNI_END 0x9F +sal_uInt16 const aImpl8090SameToUniTab[SAME8090UNI_END + - SAME8090UNI_START + + 1] += { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, /* 0x80 */ + 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, /* 0x90 */ + 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F }; + +#define SAME8090CHAR_START 0x0080 +#define SAME8090CHAR_END 0x009F +unsigned char const aImpl8090SameToCharTab[SAME8090CHAR_END + - SAME8090CHAR_START + + 1] + = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0080 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0090 */ + 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F }; + +sal_uInt16 const aImplDoubleByteIdentifierTab[1] = { 0 }; + +#include "tcvtarb1.tab" +#include "tcvteas1.tab" +#include "tcvtest1.tab" +#include "tcvtjp1.tab" +#include "tcvtjp2.tab" +#include "tcvtjp3.tab" +#include "tcvtjp4.tab" +#include "tcvtjp5.tab" +#include "tcvtjp6.tab" +#include "tcvtkr1.tab" +#include "tcvtkr2.tab" +#include "tcvtkr4.tab" +#include "tcvtkr5.tab" +#include "tcvtkr6.tab" +#include "tcvtlat1.tab" +#include "tcvtscn1.tab" +#include "tcvtscn2.tab" +#include "tcvtscn3.tab" +#include "tcvtscn4.tab" +#include "tcvtscn5.tab" +#include "tcvtscn6.tab" +#include "tcvtsym1.tab" +#include "tcvttcn1.tab" +#include "tcvttcn2.tab" +#include "tcvttcn6.tab" +#include "tcvtuni1.tab" + +#include "convertadobe.tab" +#include "convertbig5hkscs.tab" +#include "converteuctw.tab" +#include "convertgb18030.tab" +#include "convertisciidevangari.tab" +#include "convertiso2022cn.tab" +#include "convertiso2022jp.tab" +#include "convertiso2022kr.tab" + +extern "C" SAL_DLLPUBLIC_EXPORT ImplTextEncodingData const * + sal_getFullTextEncodingData( rtl_TextEncoding nEncoding ) +{ + assert( + nEncoding != RTL_TEXTENCODING_ASCII_US && + nEncoding != RTL_TEXTENCODING_ISO_8859_1 && + nEncoding != RTL_TEXTENCODING_JAVA_UTF8 && + nEncoding != RTL_TEXTENCODING_MS_1252 && + nEncoding != RTL_TEXTENCODING_UTF8); + // handled by Impl_getTextEncodingData + static ImplTextEncodingData const * const aData[] + = { nullptr, /* DONTKNOW */ + nullptr, /* MS_1252, see above */ + &aImplAPPLEROMANTextEncodingData, /* APPLE_ROMAN */ + &aImplIBM437TextEncodingData, /* IBM_437 */ + &aImplIBM850TextEncodingData, /* IBM_850 */ + &aImplIBM860TextEncodingData, /* IBM_860 */ + &aImplIBM861TextEncodingData, /* IBM_861 */ + &aImplIBM863TextEncodingData, /* IBM_863 */ + &aImplIBM865TextEncodingData, /* IBM_865 */ + nullptr, /* reserved (SYSTEM) */ + &aImplSYMBOLTextEncodingData, /* SYMBOL */ + nullptr, /* ASCII_US, see above */ + nullptr, /* ISO_8859_1, see above */ + &aImplISO88592TextEncodingData, /* ISO_8859_2 */ + &aImplISO88593TextEncodingData, /* ISO_8859_3 */ + &aImplISO88594TextEncodingData, /* ISO_8859_4 */ + &aImplISO88595TextEncodingData, /* ISO_8859_5 */ + &aImplISO88596TextEncodingData, /* ISO_8859_6 */ + &aImplISO88597TextEncodingData, /* ISO_8859_7 */ + &aImplISO88598TextEncodingData, /* ISO_8859_8 */ + &aImplISO88599TextEncodingData, /* ISO_8859_9 */ + &aImplISO885914TextEncodingData, /* ISO_8859_14 */ + &aImplISO885915TextEncodingData, /* ISO_8859_15 */ + &aImplIBM737TextEncodingData, /* IBM_737 */ + &aImplIBM775TextEncodingData, /* IBM_775 */ + &aImplIBM852TextEncodingData, /* IBM_852 */ + &aImplIBM855TextEncodingData, /* IBM_855 */ + &aImplIBM857TextEncodingData, /* IBM_857 */ + &aImplIBM862TextEncodingData, /* IBM_862 */ + &aImplIBM864TextEncodingData, /* IBM_864 */ + &aImplIBM866TextEncodingData, /* IBM_866 */ + &aImplIBM869TextEncodingData, /* IBM_869 */ + &aImplMS874TextEncodingData, /* MS_874 */ + &aImplMS1250TextEncodingData, /* MS_1250 */ + &aImplMS1251TextEncodingData, /* MS_1251 */ + &aImplMS1253TextEncodingData, /* MS_1253 */ + &aImplMS1254TextEncodingData, /* MS_1254 */ + &aImplMS1255TextEncodingData, /* MS_1255 */ + &aImplMS1256TextEncodingData, /* MS_1256 */ + &aImplMS1257TextEncodingData, /* MS_1257 */ + &aImplMS1258TextEncodingData, /* MS_1258 */ + nullptr, /* TODO! APPLE_ARABIC */ + &aImplAPPLECENTEUROTextEncodingData, /* APPLE_CENTEURO */ + &aImplAPPLECROATIANTextEncodingData, /* APPLE_CROATIAN */ + &aImplAPPLECYRILLICTextEncodingData, /* APPLE_CYRILLIC */ + nullptr, /* TODO! APPLE_DEVANAGARI */ + nullptr, /* TODO! APPLE_FARSI */ + &aImplAPPLEGREEKTextEncodingData, /* APPLE_GREEK */ + nullptr, /* TODO! APPLE_GUJARATI */ + nullptr, /* TODO! APPLE_GURMUKHI */ + nullptr, /* TODO! APPLE_HEBREW */ + &aImplAPPLEICELANDTextEncodingData, /* APPLE_ICELAND */ + &aImplAPPLEROMANIANTextEncodingData, /* APPLE_ROMANIAN */ + nullptr, /* TODO! APPLE_THAI */ + &aImplAPPLETURKISHTextEncodingData, /* APPLE_TURKISH */ + &aImplAPPLEUKRAINIANTextEncodingData, /* APPLE_UKRAINIAN */ +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + &aImplAPPLECHINSIMPTextEncodingData, /* APPLE_CHINSIMP */ + &aImplAPPLECHINTRADTextEncodingData, /* APPLE_CHINTRAD */ +#else + NULL, + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + &aImplAPPLEJAPANESETextEncodingData, /* APPLE_JAPANESE */ +#else + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + &aImplAPPLEKOREANTextEncodingData, /* APPLE_KOREAN */ +#else + NULL, +#endif + &aImplMS932TextEncodingData, /* MS_932 */ + &aImplMS936TextEncodingData, /* MS_936 */ + &aImplMS949TextEncodingData, /* MS_949 */ + &aImplMS950TextEncodingData, /* MS_950 */ +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + &aImplSJISTextEncodingData, /* SHIFT_JIS */ +#else + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + &aImplGB2312TextEncodingData, /* GB_2312 */ + &aImplGBT12345TextEncodingData, /* GBT_12345 */ + &aImplGBKTextEncodingData, /* GBK */ + &aImplBIG5TextEncodingData, /* BIG5 */ +#else + NULL, + NULL, + NULL, + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + &aImplEUCJPTextEncodingData, /* EUC_JP */ +#else + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + &aImplEUCCNTextEncodingData, /* EUC_CN */ + &aImplEucTwTextEncodingData, /* EUC_TW */ +#else + NULL, + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + &aImplIso2022JpTextEncodingData, /* ISO_2022_JP */ +#else + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + &aImplIso2022CnTextEncodingData, /* ISO_2022_CN */ +#else + NULL, +#endif + &aImplKOI8RTextEncodingData, /* KOI8_R */ + &aImplUTF7TextEncodingData, /* UTF7 */ + nullptr, /* UTF8, see above */ + &aImplISO885910TextEncodingData, /* ISO_8859_10 */ + &aImplISO885913TextEncodingData, /* ISO_8859_13 */ +#if WITH_LOCALE_ALL || WITH_LOCALE_ko + &aImplEUCKRTextEncodingData, /* EUC_KR */ + &aImplIso2022KrTextEncodingData, /* ISO_2022_KR */ +#else + NULL, + NULL, +#endif +#if WITH_LOCALE_ALL || WITH_LOCALE_ja + &aImplJISX0201TextEncodingData, /* JIS_X_0201 */ + &aImplJISX0208TextEncodingData, /* JIS_X_0208 */ + &aImplJISX0212TextEncodingData, /* JIS_X_0212 */ +#else + NULL, + NULL, + NULL, +#endif + &aImplMS1361TextEncodingData, /* MS_1361 */ +#if WITH_LOCALE_ALL || WITH_LOCALE_zh + &aImplGb18030TextEncodingData, /* GB_18030 */ + &aImplBig5HkscsTextEncodingData, /* BIG5_HKSCS */ +#else + NULL, + NULL, +#endif + &aImplTis620TextEncodingData, /* TIS_620 */ + &aImplKoi8UTextEncodingData, /* KOI8_U */ +#if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva + &aImplIsciiDevanagariTextEncodingData, /* ISCII_DEVANAGARI */ +#else + NULL, +#endif + nullptr, /* JAVA_UTF8, see above */ + &adobeStandardEncodingData, /* ADOBE_STANDARD */ + &adobeSymbolEncodingData, /* ADOBE_SYMBOL */ + &aImplPT154TextEncodingData, /* PT154 */ + &adobeDingbatsEncodingData }; /* ADOBE_DINGBATS */ + + static_assert( + SAL_N_ELEMENTS(aData) == RTL_TEXTENCODING_ADOBE_DINGBATS + 1, + "update table above if a new encoding is added"); + + return + nEncoding < SAL_N_ELEMENTS(aData) ? aData[nEncoding] : nullptr; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tcvtarb1.tab b/sal/textenc/tcvtarb1.tab new file mode 100644 index 000000000..17edab61e --- /dev/null +++ b/sal/textenc/tcvtarb1.tab @@ -0,0 +1,932 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "convertsimple.hxx" +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the tables for all 1 byte charsets, for the */ +/* following scripts: arabic, hebrew and other scripts in the arabic region */ + +/* ======================================================================= */ + +/* IBM-862 */ +/* Dos Standard CharSet for Hebrew */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp862.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM862UNI_START 0x80 +#define IBM862UNI_END 0xFF +sal_uInt16 const aImplIBM862ToUniTab[IBM862UNI_END - IBM862UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, /* 0x80 */ + 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, /* 0x80 */ + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, /* 0x90 */ + 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */ + 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */ + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */ + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM862CHAR_START 0x05D0 +#define IBM862CHAR_END 0x05EA +unsigned char const aImplIBM862ToCharTab[IBM862CHAR_END - IBM862CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x05D0 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x05D0 */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x05E0 */ + 0x98, 0x99, 0x9A /* 0x05E0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM862TOCHARTABEX_COUNT 101 +ImplUniCharTabData const aImplIBM862ToCharTabEx[IBM862TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00A1, 0xAD, 0 }, + { 0x00A2, 0x9B, 0 }, + { 0x00A3, 0x9C, 0 }, + { 0x00A5, 0x9D, 0 }, + { 0x00AA, 0xA6, 0 }, + { 0x00AB, 0xAE, 0 }, + { 0x00AC, 0xAA, 0 }, + { 0x00B0, 0xF8, 0 }, + { 0x00B1, 0xF1, 0 }, + { 0x00B2, 0xFD, 0 }, + { 0x00B5, 0xE6, 0 }, + { 0x00B7, 0xFA, 0 }, + { 0x00BA, 0xA7, 0 }, + { 0x00BB, 0xAF, 0 }, + { 0x00BC, 0xAC, 0 }, + { 0x00BD, 0xAB, 0 }, + { 0x00BF, 0xA8, 0 }, + { 0x00D1, 0xA5, 0 }, + { 0x00DF, 0xE1, 0 }, + { 0x00E1, 0xA0, 0 }, + { 0x00ED, 0xA1, 0 }, + { 0x00F1, 0xA4, 0 }, + { 0x00F3, 0xA2, 0 }, + { 0x00F7, 0xF6, 0 }, + { 0x00FA, 0xA3, 0 }, + { 0x0192, 0x9F, 0 }, + { 0x0393, 0xE2, 0 }, + { 0x0398, 0xE9, 0 }, + { 0x03A3, 0xE4, 0 }, + { 0x03A6, 0xE8, 0 }, + { 0x03A9, 0xEA, 0 }, + { 0x03B1, 0xE0, 0 }, + { 0x03B4, 0xEB, 0 }, + { 0x03B5, 0xEE, 0 }, + { 0x03C0, 0xE3, 0 }, + { 0x03C3, 0xE5, 0 }, + { 0x03C4, 0xE7, 0 }, + { 0x03C6, 0xED, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x20A7, 0x9E, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x221E, 0xEC, 0 }, + { 0x2229, 0xEF, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2261, 0xF0, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2310, 0xA9, 0 }, + { 0x2320, 0xF4, 0 }, + { 0x2321, 0xF5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM862ByteCvtData = +{ + aImplIBM862ToUniTab, + nullptr, + aImplIBM862ToCharTab, + nullptr, + aImplIBM862ToCharTabEx, + IBM862UNI_START, IBM862UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM862CHAR_START, IBM862CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM862TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM862TextEncodingData + = { { &aImplIBM862ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-8", + "IBM862", + 1, + 1, + 1, + 177, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MIME + | RTL_TEXTENCODING_INFO_R2L }; + /* DOS/OS2, SCRIPT_HEBREW, pc code page 862, mac encoding 5 */ + +/* ======================================================================= */ + +/* IBM-864 */ +/* Dos Standard CharSet for Arabic */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp864.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM864UNI_START 0x80 +#define IBM864UNI_END 0xFE +sal_uInt16 const aImplIBM864ToUniTab[IBM864UNI_END - IBM864UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, /* 0x80 */ + 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518, /* 0x80 */ + 0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, /* 0x90 */ + 0x00BB, 0xFEF7, 0xFEF8, 0, 0, 0xFEFB, 0xFEFC, 0, /* 0x90 */ + 0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0, 0, /* 0xA0 */ + 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5, /* 0xA0 */ + 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, /* 0xB0 */ + 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F, /* 0xB0 */ + 0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, /* 0xC0 */ + 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9, /* 0xC0 */ + 0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, /* 0xD0 */ + 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9, /* 0xD0 */ + 0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, /* 0xE0 */ + 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1, /* 0xE0 */ + 0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, /* 0xF0 */ + 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM864CHAR_START 0xFE7D +#define IBM864CHAR_END 0xFEFC +unsigned char const aImplIBM864ToCharTab[IBM864CHAR_END - IBM864CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0, 0, 0, /* 0xFE70 */ + 0xC1, 0xC2, 0xA2, 0xC3, 0xA5, 0xC4, 0, 0, /* 0xFE80 */ + 0, 0, 0, 0xC6, 0, 0xC7, 0xA8, 0xA9, /* 0xFE80 */ + 0, 0xC8, 0, 0xC9, 0, 0xAA, 0, 0xCA, /* 0xFE90 */ + 0, 0xAB, 0, 0xCB, 0, 0xAD, 0, 0xCC, /* 0xFE90 */ + 0, 0xAE, 0, 0xCD, 0, 0xAF, 0, 0xCE, /* 0xFEA0 */ + 0, 0xCF, 0, 0xD0, 0, 0xD1, 0, 0xD2, /* 0xFEA0 */ + 0, 0xBC, 0, 0xD3, 0, 0xBD, 0, 0xD4, /* 0xFEB0 */ + 0, 0xBE, 0, 0xD5, 0, 0xEB, 0, 0xD6, /* 0xFEB0 */ + 0, 0xD7, 0, 0, 0, 0xD8, 0, 0, /* 0xFEC0 */ + 0, 0xDF, 0xC5, 0xD9, 0xEC, 0xEE, 0xED, 0xDA, /* 0xFEC0 */ + 0xF7, 0xBA, 0, 0xE1, 0, 0xF8, 0, 0xE2, /* 0xFED0 */ + 0, 0xFC, 0, 0xE3, 0, 0xFB, 0, 0xE4, /* 0xFED0 */ + 0, 0xEF, 0, 0xE5, 0, 0xF2, 0, 0xE6, /* 0xFEE0 */ + 0, 0xF3, 0, 0xE7, 0xF4, 0xE8, 0, 0xE9, /* 0xFEE0 */ + 0xF5, 0xFD, 0xF6, 0xEA, 0, 0xF9, 0xFA, 0x99, /* 0xFEF0 */ + 0x9A, 0, 0, 0x9D, 0x9E /* 0xFEF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM864TOCHARTABEX_COUNT 51 +ImplUniCharTabData const aImplIBM864ToCharTabEx[IBM864TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A2, 0xC0, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A6, 0xDB, 0 }, + { 0x00AB, 0x97, 0 }, + { 0x00AC, 0xDC, 0 }, + { 0x00AD, 0xA1, 0 }, + { 0x00B0, 0x80, 0 }, + { 0x00B1, 0x93, 0 }, + { 0x00B7, 0x81, 0 }, + { 0x00BB, 0x98, 0 }, + { 0x00BC, 0x95, 0 }, + { 0x00BD, 0x94, 0 }, + { 0x00D7, 0xDE, 0 }, + { 0x00F7, 0xDD, 0 }, + { 0x03B2, 0x90, 0 }, + { 0x03C6, 0x92, 0 }, + { 0x060C, 0xAC, 0 }, + { 0x061B, 0xBB, 0 }, + { 0x061F, 0xBF, 0 }, + { 0x0640, 0xE0, 0 }, + { 0x0651, 0xF1, 0 }, + { 0x0660, 0xB0, 0 }, + { 0x0661, 0xB1, 0 }, + { 0x0662, 0xB2, 0 }, + { 0x0663, 0xB3, 0 }, + { 0x0664, 0xB4, 0 }, + { 0x0665, 0xB5, 0 }, + { 0x0666, 0xB6, 0 }, + { 0x0667, 0xB7, 0 }, + { 0x0668, 0xB8, 0 }, + { 0x0669, 0xB9, 0 }, + { 0x066A, 0x25, 0 }, + { 0x2219, 0x82, 0 }, + { 0x221A, 0x83, 0 }, + { 0x221E, 0x91, 0 }, + { 0x2248, 0x96, 0 }, + { 0x2500, 0x85, 0 }, + { 0x2502, 0x86, 0 }, + { 0x250C, 0x8D, 0 }, + { 0x2510, 0x8C, 0 }, + { 0x2514, 0x8E, 0 }, + { 0x2518, 0x8F, 0 }, + { 0x251C, 0x8A, 0 }, + { 0x2524, 0x88, 0 }, + { 0x252C, 0x89, 0 }, + { 0x2534, 0x8B, 0 }, + { 0x253C, 0x87, 0 }, + { 0x2592, 0x84, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM864ByteCvtData = +{ + aImplIBM864ToUniTab, + nullptr, + aImplIBM864ToCharTab, + nullptr, + aImplIBM864ToCharTabEx, + IBM864UNI_START, IBM864UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM864CHAR_START, IBM864CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM864TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM864TextEncodingData + = { { &aImplIBM864ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-6", + "IBM864", + 1, + 1, + 1, + 178, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MIME + | RTL_TEXTENCODING_INFO_R2L }; + /* DOS/OS2, SCRIPT_ARABIC, pc code page 864, mac encoding 4 */ + +/* ======================================================================= */ + +/* MS-1255 */ +/* Windows Standard CharSet for Hebrew */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1255.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1255UNI_START 0x80 +#define MS1255UNI_END 0xFF +sal_uInt16 const aImplMS1255ToUniTab[MS1255UNI_END - MS1255UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0x02C6, 0x2030, 0, 0x2039, 0, 0, 0, 0, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0x02DC, 0x2122, 0, 0x203A, 0, 0, 0, 0, /* 0x90 */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */ + 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, /* 0xC0 */ + 0x05B8, 0x05B9, 0, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, /* 0xC0 */ + 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, /* 0xD0 */ + 0x05F4, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, /* 0xE0 */ + 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, /* 0xE0 */ + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, /* 0xF0 */ + 0x05E8, 0x05E9, 0x05EA, 0, 0, 0x200E, 0x200F, 0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1255CHAR_START 0x05B0 +#define MS1255CHAR_END 0x05F4 +unsigned char const aImplMS1255ToCharTab[MS1255CHAR_END - MS1255CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x05B0 */ + 0xC8, 0xC9, 0, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x05B0 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0, 0, 0, 0, /* 0x05C0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x05C0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x05D0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x05D0 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x05E0 */ + 0xF8, 0xF9, 0xFA, 0, 0, 0, 0, 0, /* 0x05E0 */ + 0xD4, 0xD5, 0xD6, 0xD7, 0xD8 /* 0x05F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1255TOCHARTABEX_COUNT 54 +ImplUniCharTabData const aImplMS1255ToCharTabEx[MS1255TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A1, 0xA1, 0 }, + { 0x00A2, 0xA2, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A5, 0xA5, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00AF, 0xAF, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00B9, 0xB9, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00BC, 0xBC, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x00BE, 0xBE, 0 }, + { 0x00BF, 0xBF, 0 }, + { 0x00D7, 0xAA, 0 }, + { 0x00F7, 0xBA, 0 }, + { 0x0192, 0x83, 0 }, + { 0x02C6, 0x88, 0 }, + { 0x02DC, 0x98, 0 }, + { 0x200E, 0xFD, 0 }, + { 0x200F, 0xFE, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AA, 0xA4, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1255ByteCvtData = +{ + aImplMS1255ToUniTab, + nullptr, + aImplMS1255ToCharTab, + nullptr, + aImplMS1255ToCharTabEx, + MS1255UNI_START, MS1255UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1255CHAR_START, MS1255CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1255TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1255TextEncodingData + = { { &aImplMS1255ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-8", + "windows-1255", + 1, + 1, + 1, + 177, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MIME + | RTL_TEXTENCODING_INFO_R2L }; + /* WIN, SCRIPT_HEBREW, pc code page 862, mac encoding 5 */ + +/* ======================================================================= */ + +/* MS-1256 */ +/* Windows Standard CharSet for Arabic */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1256.txt from 01/5/99 Version 2.01 */ + +/* ----------------------------------------------------------------------- */ + +#define MS1256UNI_START 0x80 +#define MS1256UNI_END 0xFF +sal_uInt16 const aImplMS1256ToUniTab[MS1256UNI_END - MS1256UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, /* 0x80 */ + 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, /* 0x90 */ + 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F, /* 0xB0 */ + 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0xC0 */ + 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, /* 0xC0 */ + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, /* 0xD0 */ + 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, /* 0xD0 */ + 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF, /* 0xE0 */ + 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, /* 0xF0 */ + 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1256CHAR_START 0x061B +#define MS1256CHAR_END 0x0652 +unsigned char const aImplMS1256ToCharTab[MS1256CHAR_END - MS1256CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBA, 0, 0, 0, 0xBF, /* 0x0610 */ + 0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0620 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0620 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD8, /* 0x0630 */ + 0xD9, 0xDA, 0xDB, 0, 0, 0, 0, 0, /* 0x0630 */ + 0xDC, 0xDD, 0xDE, 0xDF, 0xE1, 0xE3, 0xE4, 0xE5, /* 0x0640 */ + 0xE6, 0xEC, 0xED, 0xF0, 0xF1, 0xF2, 0xF3, 0xF5, /* 0x0640 */ + 0xF6, 0xF8, 0xFA /* 0x0650 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1256TOCHARTABEX_COUNT 81 +ImplUniCharTabData const aImplMS1256ToCharTabEx[MS1256TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A2, 0xA2, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A5, 0xA5, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00AF, 0xAF, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00B9, 0xB9, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00BC, 0xBC, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x00BE, 0xBE, 0 }, + { 0x00D7, 0xD7, 0 }, + { 0x00E0, 0xE0, 0 }, + { 0x00E2, 0xE2, 0 }, + { 0x00E7, 0xE7, 0 }, + { 0x00E8, 0xE8, 0 }, + { 0x00E9, 0xE9, 0 }, + { 0x00EA, 0xEA, 0 }, + { 0x00EB, 0xEB, 0 }, + { 0x00EE, 0xEE, 0 }, + { 0x00EF, 0xEF, 0 }, + { 0x00F4, 0xF4, 0 }, + { 0x00F7, 0xF7, 0 }, + { 0x00F9, 0xF9, 0 }, + { 0x00FB, 0xFB, 0 }, + { 0x00FC, 0xFC, 0 }, + { 0x0152, 0x8C, 0 }, + { 0x0153, 0x9C, 0 }, + { 0x0192, 0x83, 0 }, + { 0x02C6, 0x88, 0 }, + { 0x060C, 0xA1, 0 }, + { 0x0679, 0x8A, 0 }, + { 0x067E, 0x81, 0 }, + { 0x0686, 0x8D, 0 }, + { 0x0688, 0x8F, 0 }, + { 0x0691, 0x9A, 0 }, + { 0x0698, 0x8E, 0 }, + { 0x06A9, 0x98, 0 }, + { 0x06AF, 0x90, 0 }, + { 0x06BA, 0x9F, 0 }, + { 0x06BE, 0xAA, 0 }, + { 0x06C1, 0xC0, 0 }, + { 0x06D2, 0xFF, 0 }, + { 0x200C, 0x9D, 0 }, + { 0x200D, 0x9E, 0 }, + { 0x200E, 0xFD, 0 }, + { 0x200F, 0xFE, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1256ByteCvtData = +{ + aImplMS1256ToUniTab, + nullptr, + aImplMS1256ToCharTab, + nullptr, + aImplMS1256ToCharTabEx, + MS1256UNI_START, MS1256UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1256CHAR_START, MS1256CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1256TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1256TextEncodingData + = { { &aImplMS1256ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-6", + "windows-1256", + 1, + 1, + 1, + 178, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MIME + | RTL_TEXTENCODING_INFO_R2L }; + /* WIN, SCRIPT_ARABIC, pc code page 864, mac encoding 4 */ + +/* ======================================================================= */ + +/* ISO-8859-6 */ +/* Unix Standard for Arabic */ +/* 1-Byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-6.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ +/* !!! 0x30-0x39 are Arabic numbers and should normally be mapped to 0x0660-0x0669 !!! */ + +#define ISO88596UNI_START 0xA0 +#define ISO88596UNI_END 0xF2 +sal_uInt16 const aImplISO88596ToUniTab[ISO88596UNI_END - ISO88596UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0, 0, 0, 0x00A4, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x060C, 0x00AD, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x061B, 0, 0, 0, 0x061F, /* 0xB0 */ + 0, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0xC0 */ + 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, /* 0xC0 */ + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, /* 0xD0 */ + 0x0638, 0x0639, 0x063A, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, /* 0xE0 */ + 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, /* 0xE0 */ + 0x0650, 0x0651, 0x0652 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88596CHAR_START 0x061B +#define ISO88596CHAR_END 0x0669 +unsigned char const aImplISO88596ToCharTab[ISO88596CHAR_END - ISO88596CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBB, 0, 0, 0, 0xBF, /* 0x0610 */ + 0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0620 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0620 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0630 */ + 0xD8, 0xD9, 0xDA, 0, 0, 0, 0, 0, /* 0x0630 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0640 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0640 */ + 0xF0, 0xF1, 0xF2, 0, 0, 0, 0, 0, /* 0x0650 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0650 */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x0660 */ + 0x38, 0x39 /* 0x0660 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88596TOCHARTABEX_COUNT 4 +ImplUniCharTabData const aImplISO88596ToCharTabEx[ISO88596TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x060C, 0xAC, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88596ByteCvtData = +{ + aImplISO88596ToUniTab, + aImpl8090SameToUniTab, + aImplISO88596ToCharTab, + aImpl8090SameToCharTab, + aImplISO88596ToCharTabEx, + ISO88596UNI_START, ISO88596UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO88596CHAR_START, ISO88596CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO88596TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88596TextEncodingData + = { { &aImplISO88596ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-6", + "ISO-8859-6", + 1, + 1, + 1, + 178, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_R2L + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_ARABIC, pc code page 864, mac encoding 4 */ + + +/* ======================================================================= */ + +/* ISO-8859-8 */ +/* Unix Standard for Hebrew */ +/* 1-Byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-8.txt from 2000-Jan-03 Version 1.1 (based on Unicode 3.0) */ + +#define ISO88598UNI_START 0xA0 +#define ISO88598UNI_END 0xFE +sal_uInt16 const aImplISO88598ToUniTab[ISO88598UNI_END - ISO88598UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x2017, /* 0xD0 */ + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, /* 0xE0 */ + 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, /* 0xE0 */ + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, /* 0xF0 */ + 0x05E8, 0x05E9, 0x05EA, 0, 0, 0x200E, 0x200F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88598CHAR_START 0x05D0 +#define ISO88598CHAR_END 0x05EA +unsigned char const aImplISO88598ToCharTab[ISO88598CHAR_END - ISO88598CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x05D0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x05D0 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x05E0 */ + 0xF8, 0xF9, 0xFA /* 0x05E0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88598TOCHARTABEX_COUNT 33 +ImplUniCharTabData const aImplISO88598ToCharTabEx[ISO88598TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A2, 0xA2, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A5, 0xA5, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00AF, 0xAF, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00B9, 0xB9, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00BC, 0xBC, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x00BE, 0xBE, 0 }, + { 0x00D7, 0xAA, 0 }, + { 0x00F7, 0xBA, 0 }, + { 0x200E, 0xFD, 0 }, + { 0x200F, 0xFE, 0 }, + { 0x2017, 0xDF, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88598ByteCvtData = +{ + aImplISO88598ToUniTab, + aImpl8090SameToUniTab, + aImplISO88598ToCharTab, + aImpl8090SameToCharTab, + aImplISO88598ToCharTabEx, + ISO88598UNI_START, ISO88598UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO88598CHAR_START, ISO88598CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO88598TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88598TextEncodingData + = { { &aImplISO88598ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-8", + "ISO-8859-8", + 1, + 1, + 1, + 177, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_R2L + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_HEBREW, pc code page 862, mac encoding 5 */ diff --git a/sal/textenc/tcvtbyte.cxx b/sal/textenc/tcvtbyte.cxx new file mode 100644 index 000000000..ee727d9f9 --- /dev/null +++ b/sal/textenc/tcvtbyte.cxx @@ -0,0 +1,161 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "handleundefinedunicodetotextchar.hxx" +#include "tcvtbyte.hxx" +#include "tenchelp.hxx" + +sal_Size ImplSymbolToUnicode( SAL_UNUSED_PARAMETER const void*, + SAL_UNUSED_PARAMETER void*, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + SAL_UNUSED_PARAMETER sal_uInt32, + sal_uInt32* pInfo, sal_Size* pSrcCvtBytes ) +{ + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + while ( pSrcBuf < pEndSrcBuf ) + { + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + /* 0-31 (all Control-Character get the same Unicode value) */ + unsigned char c = static_cast(*pSrcBuf); + if ( c <= 0x1F ) + *pDestBuf = static_cast(c); + else + *pDestBuf = static_cast(c)+0xF000; + pDestBuf++; + pSrcBuf++; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +sal_Size ImplUnicodeToSymbol( SAL_UNUSED_PARAMETER const void*, + SAL_UNUSED_PARAMETER void*, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ) +{ + sal_Unicode c; + char* pEndDestBuf; + const sal_Unicode* pEndSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestBytes; + pEndSrcBuf = pSrcBuf+nSrcChars; + while ( pSrcBuf < pEndSrcBuf ) + { + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + c = *pSrcBuf; + if ( (c >= 0xF000) && (c <= 0xF0FF) ) + { + *pDestBuf = static_cast< char >(static_cast< unsigned char >(c-0xF000)); + pDestBuf++; + pSrcBuf++; + } + // Normally 0x001F, but in many cases also symbol characters + // are stored in the first 256 bytes, so that we don't change + // these values + else if ( c <= 0x00FF ) + { + *pDestBuf = static_cast< char >(static_cast< unsigned char >(c)); + pDestBuf++; + pSrcBuf++; + } + else + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE ) + { + /* !!! */ + /* Only ascii characters < 0x1F */ + } + + /* Handle undefined and surrogates characters */ + /* (all surrogates characters are undefined) */ + if (!sal::detail::textenc::handleUndefinedUnicodeToTextChar( + &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf, nFlags, + pInfo)) + break; + } + } + + *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf); + return (nDestBytes - (pEndDestBuf-pDestBuf)); +} + +sal_Size ImplUpperCharToUnicode( const void* pData, + SAL_UNUSED_PARAMETER void*, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + SAL_UNUSED_PARAMETER sal_uInt32, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ) +{ + sal_Unicode cConv; + const ImplByteConvertData* pConvertData = static_cast(pData); + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + *pSrcCvtBytes = 0; + return 0; + } + while ( pSrcBuf < pEndSrcBuf ) + { + unsigned char c = static_cast(*pSrcBuf); + if (c < 0x80) + cConv = c; + else + // c <= 0xFF is implied. + cConv = pConvertData->mpToUniTab1[c - 0x80]; + + *pDestBuf = cConv; + pDestBuf++; + pSrcBuf++; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tcvtbyte.hxx b/sal/textenc/tcvtbyte.hxx new file mode 100644 index 000000000..04df860cd --- /dev/null +++ b/sal/textenc/tcvtbyte.hxx @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_TEXTENC_TCVTBYTE_HXX +#define INCLUDED_SAL_TEXTENC_TCVTBYTE_HXX + +#include + +#include + +sal_Size ImplSymbolToUnicode( + void const * pData, void * pContext, char const * pSrcBuf, + sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes); + +sal_Size ImplUnicodeToSymbol( + void const * pData, void * pContext, sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtChars); + +/** For those encodings only with unicode range of 0x80 to 0xFF. */ +sal_Size ImplUpperCharToUnicode( + void const * pData, void * pContext, char const * pSrcBuf, + sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tcvteas1.tab b/sal/textenc/tcvteas1.tab new file mode 100644 index 000000000..636852991 --- /dev/null +++ b/sal/textenc/tcvteas1.tab @@ -0,0 +1,432 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "convertsimple.hxx" +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the tables for all 1 byte charsets, for the */ +/* following scripts: asia (Thai, Vietnamese) and other exotic scripts */ + +/* ======================================================================= */ + +/* MS-874 */ +/* Windows/Dos Standard CharSet for Thai */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp874.txt from 04/15/98 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS874UNI_START 0x80 +#define MS874UNI_END 0xFB +sal_uInt16 const aImplMS874ToUniTab[MS874UNI_END - MS874UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0, 0, 0, 0x2026, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, /* 0xA0 */ + 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, /* 0xA0 */ + 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, /* 0xB0 */ + 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, /* 0xB0 */ + 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, /* 0xC0 */ + 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, /* 0xC0 */ + 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, /* 0xD0 */ + 0x0E38, 0x0E39, 0x0E3A, 0, 0, 0, 0, 0x0E3F, /* 0xD0 */ + 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, /* 0xE0 */ + 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, /* 0xE0 */ + 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, /* 0xF0 */ + 0x0E58, 0x0E59, 0x0E5A, 0x0E5B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS874CHAR_START 0x0E01 +#define MS874CHAR_END 0x0E5B +unsigned char const aImplMS874ToCharTab[MS874CHAR_END - MS874CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0E00 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x0E00 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x0E10 */ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x0E10 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0E20 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0E20 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0E30 */ + 0xD8, 0xD9, 0xDA, 0, 0, 0, 0, 0xDF, /* 0x0E30 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0E40 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0E40 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0E50 */ + 0xF8, 0xF9, 0xFA, 0xFB /* 0x0E50 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS874TOCHARTABEX_COUNT 10 +ImplUniCharTabData const aImplMS874ToCharTabEx[MS874TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x20AC, 0x80, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS874ByteCvtData = +{ + aImplMS874ToUniTab, + nullptr, + aImplMS874ToCharTab, + nullptr, + aImplMS874ToCharTabEx, + MS874UNI_START, MS874UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS874CHAR_START, MS874CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS874TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS874TextEncodingData + = { { &aImplMS874ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", /* TODO! correct? */ + "windows-874", + 1, + 1, + 1, + 222, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN/DOS/OS2, SCRIPT_THAI, pc code page 874, mac encoding 21 */ + +/* ======================================================================= */ + +/* TIS 620-2533 + * + * A good source of information is as of 18 Mar 2002. + * + * Single byte encoding, from which MS874 is derived (although it is the other + * way around in this implementation): + * + * 0x00--9F map to U+0000--009F + * 0xA0 is questionable (unassigned or U+00A0 NO BREAK SPACE), to ease + * implementation, it maps to U+00A0 + * 0xA1--DA map to U+0E01--0E3A (TIS 620, same for MS874) + * 0xDB--DE are unassigned (TIS 620, same for MS874) + * 0xDF--FB map to U+0E3F--0E5B (TIS 620, same for MS874) + * 0xFC--FF are unassigned (TIS 620, same for MS874) + */ + +ImplByteConvertData const aImplTis620ByteCvtData = +{ + aImplMS874ToUniTab + (0xA0 - MS874UNI_START), + aImpl8090SameToUniTab, + aImplMS874ToCharTab, + aImpl8090SameToCharTab, + aImplMS874ToCharTabEx, + 0xA0, MS874UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + MS874CHAR_START, MS874CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + 1 +}; + +ImplTextEncodingData const aImplTis620TextEncodingData + = { { &aImplTis620ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", /* TODO! correct? */ + "TIS-620", + 1, + 1, + 1, + 222, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + +/* ======================================================================= */ + +/* MS-1258 */ +/* Windows Standard CharSet for Vietnamease */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1258.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1258UNI_START 0x80 +#define MS1258UNI_END 0xFF +sal_uInt16 const aImplMS1258ToUniTab[MS1258UNI_END - MS1258UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0x02C6, 0x2030, 0, 0x2039, 0x0152, 0, 0, 0, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0x02DC, 0x2122, 0, 0x203A, 0x0153, 0, 0, 0x0178, /* 0x90 */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1258CHAR_START 0x00A0 +#define MS1258CHAR_END 0x00FF +unsigned char const aImplMS1258ToCharTab[MS1258CHAR_END - MS1258CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */ + 0xC0, 0xC1, 0xC2, 0, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0, 0xCD, 0xCE, 0xCF, /* 0x00C0 */ + 0, 0xD1, 0, 0xD3, 0xD4, 0, 0xD6, 0xD7, /* 0x00D0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */ + 0xE0, 0xE1, 0xE2, 0, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0, 0xED, 0xEE, 0xEF, /* 0x00E0 */ + 0, 0xF1, 0, 0xF3, 0xF4, 0, 0xF6, 0xF7, /* 0x00F0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* The list of Vietnamese-relevant precomposed Unicode characters that map to + MS1258 base + combining modifier are derived from the information present at + : */ +#define MS1258TOCHARTABEX_COUNT 141 +ImplUniCharTabData const aImplMS1258ToCharTabEx[MS1258TOCHARTABEX_COUNT] = +{ + { 0x00C3, 0x41, 0xDE }, + { 0x00CC, 0x49, 0xCC }, + { 0x00D2, 0x4F, 0xCC }, + { 0x00D5, 0x4F, 0xDE }, + { 0x00DD, 0x59, 0xEC }, + { 0x00E3, 0x61, 0xDE }, + { 0x00EC, 0x69, 0xCC }, + { 0x00F2, 0x6F, 0xCC }, + { 0x00F5, 0x6F, 0xDE }, + { 0x00FD, 0x79, 0xCC }, + { 0x0102, 0xC3, 0 }, + { 0x0103, 0xE3, 0 }, + { 0x0110, 0xD0, 0 }, + { 0x0111, 0xF0, 0 }, + { 0x0128, 0x49, 0xDE }, + { 0x0129, 0x69, 0xDE }, + { 0x0152, 0x8C, 0 }, + { 0x0153, 0x9C, 0 }, + { 0x0168, 0x55, 0xDE }, + { 0x0169, 0x75, 0xDE }, + { 0x0178, 0x9F, 0 }, + { 0x0192, 0x83, 0 }, + { 0x01A0, 0xD5, 0 }, + { 0x01A1, 0xF5, 0 }, + { 0x01AF, 0xDD, 0 }, + { 0x01B0, 0xFD, 0 }, + { 0x02C6, 0x88, 0 }, + { 0x02DC, 0x98, 0 }, + { 0x0300, 0xCC, 0 }, + { 0x0301, 0xEC, 0 }, + { 0x0303, 0xDE, 0 }, + { 0x0309, 0xD2, 0 }, + { 0x0323, 0xF2, 0 }, + { 0x1EA0, 0x41, 0xF2 }, + { 0x1EA1, 0x61, 0xF2 }, + { 0x1EA2, 0x41, 0xD2 }, + { 0x1EA3, 0x61, 0xD2 }, + { 0x1EA4, 0xC2, 0xEC }, + { 0x1EA5, 0xE2, 0xEC }, + { 0x1EA6, 0xC2, 0xCC }, + { 0x1EA7, 0xE2, 0xCC }, + { 0x1EA8, 0xC2, 0xD2 }, + { 0x1EA9, 0xE2, 0xD2 }, + { 0x1EAA, 0xC2, 0xDE }, + { 0x1EAB, 0xE2, 0xDE }, + { 0x1EAC, 0xC2, 0xF2 }, + { 0x1EAD, 0xE2, 0xF2 }, + { 0x1EAE, 0xC3, 0xEC }, + { 0x1EAF, 0xE3, 0xEC }, + { 0x1EB0, 0xC3, 0xCC }, + { 0x1EB1, 0xE3, 0xCC }, + { 0x1EB2, 0xC3, 0xD2 }, + { 0x1EB3, 0xE3, 0xD2 }, + { 0x1EB4, 0xC3, 0xDE }, + { 0x1EB5, 0xE3, 0xDE }, + { 0x1EB6, 0xC3, 0xF2 }, + { 0x1EB7, 0xE3, 0xF2 }, + { 0x1EB8, 0x45, 0xF2 }, + { 0x1EB9, 0x65, 0xF2 }, + { 0x1EBA, 0x45, 0xD2 }, + { 0x1EBB, 0x65, 0xD2 }, + { 0x1EBC, 0x45, 0xDE }, + { 0x1EBD, 0x65, 0xDE }, + { 0x1EBE, 0xCA, 0xEC }, + { 0x1EBF, 0xEA, 0xEC }, + { 0x1EC0, 0xCA, 0xCC }, + { 0x1EC1, 0xEA, 0xCC }, + { 0x1EC2, 0xCA, 0xD2 }, + { 0x1EC3, 0xEA, 0xD2 }, + { 0x1EC4, 0xCA, 0xDE }, + { 0x1EC5, 0xEA, 0xDE }, + { 0x1EC6, 0xCA, 0xF2 }, + { 0x1EC7, 0xEA, 0xF2 }, + { 0x1EC8, 0x49, 0xD2 }, + { 0x1EC9, 0x69, 0xD2 }, + { 0x1ECA, 0x49, 0xF2 }, + { 0x1ECB, 0x69, 0xF2 }, + { 0x1ECC, 0x4F, 0xF2 }, + { 0x1ECD, 0x6F, 0xF2 }, + { 0x1ECE, 0x4F, 0xD2 }, + { 0x1ECF, 0x6F, 0xD2 }, + { 0x1ED0, 0xD4, 0xEC }, + { 0x1ED1, 0xF4, 0xEC }, + { 0x1ED2, 0xD4, 0xCC }, + { 0x1ED3, 0xF4, 0xCC }, + { 0x1ED4, 0xD4, 0xD2 }, + { 0x1ED5, 0xF4, 0xD2 }, + { 0x1ED6, 0xD4, 0xDE }, + { 0x1ED7, 0xF4, 0xDE }, + { 0x1ED8, 0xD4, 0xF2 }, + { 0x1ED9, 0xF4, 0xF2 }, + { 0x1EDA, 0xD5, 0xEC }, + { 0x1EDB, 0xF5, 0xEC }, + { 0x1EDC, 0xD5, 0xCC }, + { 0x1EDD, 0xF5, 0xCC }, + { 0x1EDE, 0xD5, 0xD2 }, + { 0x1EDF, 0xF5, 0xD2 }, + { 0x1EE0, 0xD5, 0xDE }, + { 0x1EE1, 0xF5, 0xDE }, + { 0x1EE2, 0xD5, 0xF2 }, + { 0x1EE3, 0xF5, 0xF2 }, + { 0x1EE4, 0x55, 0xF2 }, + { 0x1EE5, 0x75, 0xF2 }, + { 0x1EE6, 0x55, 0xD2 }, + { 0x1EE7, 0x75, 0xD2 }, + { 0x1EE8, 0xDD, 0xEC }, + { 0x1EE9, 0xFD, 0xEC }, + { 0x1EEA, 0xDD, 0xCC }, + { 0x1EEB, 0xFD, 0xCC }, + { 0x1EEC, 0xDD, 0xD2 }, + { 0x1EED, 0xFD, 0xD2 }, + { 0x1EEE, 0xDD, 0xDE }, + { 0x1EEF, 0xFD, 0xDE }, + { 0x1EF0, 0xDD, 0xF2 }, + { 0x1EF1, 0xFD, 0xF2 }, + { 0x1EF2, 0x59, 0xCC }, + { 0x1EF3, 0x79, 0xCC }, + { 0x1EF4, 0x59, 0xF2 }, + { 0x1EF5, 0x79, 0xF2 }, + { 0x1EF6, 0x59, 0xD2 }, + { 0x1EF7, 0x79, 0xD2 }, + { 0x1EF8, 0x59, 0xDE }, + { 0x1EF9, 0x79, 0xDE }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AB, 0xFE, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1258ByteCvtData = +{ + aImplMS1258ToUniTab, + nullptr, + aImplMS1258ToCharTab, + nullptr, + aImplMS1258ToCharTabEx, + MS1258UNI_START, MS1258UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1258CHAR_START, MS1258CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1258TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1258TextEncodingData + = { { &aImplMS1258ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", /* TODO! correct? */ + "windows-1258", + 1, + 2, + 1, + 163, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_VIETNAMESE, mac encoding 30 */ diff --git a/sal/textenc/tcvtest1.tab b/sal/textenc/tcvtest1.tab new file mode 100644 index 000000000..b8661ab9c --- /dev/null +++ b/sal/textenc/tcvtest1.tab @@ -0,0 +1,4580 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "convertsimple.hxx" +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the tables for all 1 byte charsets, for the */ +/* following scripts: easteurope, cyrillic, greek, turkish */ + +/* ======================================================================= */ + +/* IBM-737 */ +/* Dos Standard CharSet for Greek */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp737.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM737UNI_START 0x80 +#define IBM737UNI_END 0xFF +sal_uInt16 const aImplIBM737ToUniTab[IBM737UNI_END - IBM737UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, /* 0x80 */ + 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, /* 0x80 */ + 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, /* 0x90 */ + 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, /* 0x90 */ + 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, /* 0xA0 */ + 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, /* 0xE0 */ + 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E, /* 0xE0 */ + 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM737CHAR_START 0x0386 +#define IBM737CHAR_END 0x03CE +unsigned char const aImplIBM737ToCharTab[IBM737CHAR_END - IBM737CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEA, 0, /* 0x0380 */ + 0xEB, 0xEC, 0xED, 0, 0xEE, 0, 0xEF, 0xF0, /* 0x0380 */ + 0, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, /* 0x0390 */ + 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, /* 0x0390 */ + 0x8F, 0x90, 0, 0x91, 0x92, 0x93, 0x94, 0x95, /* 0x03A0 */ + 0x96, 0x97, 0xF4, 0xF5, 0xE1, 0xE2, 0xE3, 0xE5, /* 0x03A0 */ + 0, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, /* 0x03B0 */ + 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 0x03B0 */ + 0xA7, 0xA8, 0xAA, 0xA9, 0xAB, 0xAC, 0xAD, 0xAE, /* 0x03C0 */ + 0xAF, 0xE0, 0xE4, 0xE8, 0xE6, 0xE7, 0xE9 /* 0x03C0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM737TOCHARTABEX_COUNT 61 +ImplUniCharTabData const aImplIBM737ToCharTabEx[IBM737TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00B0, 0xF8, 0 }, + { 0x00B1, 0xF1, 0 }, + { 0x00B2, 0xFD, 0 }, + { 0x00B7, 0xFA, 0 }, + { 0x00F7, 0xF6, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM737ByteCvtData = +{ + aImplIBM737ToUniTab, + nullptr, + aImplIBM737ToCharTab, + nullptr, + aImplIBM737ToCharTabEx, + IBM737UNI_START, IBM737UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM737CHAR_START, IBM737CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM737TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM737TextEncodingData + = { { &aImplIBM737ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-7", + "iso-8859-7", + 1, + 1, + 1, + 161, + RTL_TEXTENCODING_INFO_ASCII }; + /* DOS/OS2, SCRIPT_GREEK, pc code page 737, mac encoding 6 */ + +/* ======================================================================= */ + +/* IBM-775 */ +/* Dos Standard CharSet for BalticRim */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp775.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM775UNI_START 0x80 +#define IBM775UNI_END 0xFF +sal_uInt16 const aImplIBM775ToUniTab[IBM775UNI_END - IBM775UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, /* 0x80 */ + 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5, /* 0x80 */ + 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, /* 0x90 */ + 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4, /* 0x90 */ + 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, /* 0xA0 */ + 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, /* 0xB0 */ + 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D, /* 0xC0 */ + 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, /* 0xD0 */ + 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, /* 0xE0 */ + 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019, /* 0xE0 */ + 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM775TOCHARTABEX_COUNT 128 +ImplUniCharTabData const aImplIBM775ToCharTabEx[IBM775TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00A2, 0x96, 0 }, + { 0x00A3, 0x9C, 0 }, + { 0x00A4, 0x9F, 0 }, + { 0x00A6, 0xA7, 0 }, + { 0x00A7, 0xF5, 0 }, + { 0x00A9, 0xA8, 0 }, + { 0x00AB, 0xAE, 0 }, + { 0x00AC, 0xAA, 0 }, + { 0x00AD, 0xF0, 0 }, + { 0x00AE, 0xA9, 0 }, + { 0x00B0, 0xF8, 0 }, + { 0x00B1, 0xF1, 0 }, + { 0x00B2, 0xFD, 0 }, + { 0x00B3, 0xFC, 0 }, + { 0x00B5, 0xE6, 0 }, + { 0x00B6, 0xF4, 0 }, + { 0x00B7, 0xFA, 0 }, + { 0x00B9, 0xFB, 0 }, + { 0x00BB, 0xAF, 0 }, + { 0x00BC, 0xAC, 0 }, + { 0x00BD, 0xAB, 0 }, + { 0x00BE, 0xF3, 0 }, + { 0x00C4, 0x8E, 0 }, + { 0x00C5, 0x8F, 0 }, + { 0x00C6, 0x92, 0 }, + { 0x00C9, 0x90, 0 }, + { 0x00D3, 0xE0, 0 }, + { 0x00D5, 0xE5, 0 }, + { 0x00D6, 0x99, 0 }, + { 0x00D7, 0x9E, 0 }, + { 0x00D8, 0x9D, 0 }, + { 0x00DC, 0x9A, 0 }, + { 0x00DF, 0xE1, 0 }, + { 0x00E4, 0x84, 0 }, + { 0x00E5, 0x86, 0 }, + { 0x00E6, 0x91, 0 }, + { 0x00E9, 0x82, 0 }, + { 0x00F3, 0xA2, 0 }, + { 0x00F5, 0xE4, 0 }, + { 0x00F6, 0x94, 0 }, + { 0x00F7, 0xF6, 0 }, + { 0x00F8, 0x9B, 0 }, + { 0x00FC, 0x81, 0 }, + { 0x0100, 0xA0, 0 }, + { 0x0101, 0x83, 0 }, + { 0x0104, 0xB5, 0 }, + { 0x0105, 0xD0, 0 }, + { 0x0106, 0x80, 0 }, + { 0x0107, 0x87, 0 }, + { 0x010C, 0xB6, 0 }, + { 0x010D, 0xD1, 0 }, + { 0x0112, 0xED, 0 }, + { 0x0113, 0x89, 0 }, + { 0x0116, 0xB8, 0 }, + { 0x0117, 0xD3, 0 }, + { 0x0118, 0xB7, 0 }, + { 0x0119, 0xD2, 0 }, + { 0x0122, 0x95, 0 }, + { 0x0123, 0x85, 0 }, + { 0x012A, 0xA1, 0 }, + { 0x012B, 0x8C, 0 }, + { 0x012E, 0xBD, 0 }, + { 0x012F, 0xD4, 0 }, + { 0x0136, 0xE8, 0 }, + { 0x0137, 0xE9, 0 }, + { 0x013B, 0xEA, 0 }, + { 0x013C, 0xEB, 0 }, + { 0x0141, 0xAD, 0 }, + { 0x0142, 0x88, 0 }, + { 0x0143, 0xE3, 0 }, + { 0x0144, 0xE7, 0 }, + { 0x0145, 0xEE, 0 }, + { 0x0146, 0xEC, 0 }, + { 0x014C, 0xE2, 0 }, + { 0x014D, 0x93, 0 }, + { 0x0156, 0x8A, 0 }, + { 0x0157, 0x8B, 0 }, + { 0x015A, 0x97, 0 }, + { 0x015B, 0x98, 0 }, + { 0x0160, 0xBE, 0 }, + { 0x0161, 0xD5, 0 }, + { 0x016A, 0xC7, 0 }, + { 0x016B, 0xD7, 0 }, + { 0x0172, 0xC6, 0 }, + { 0x0173, 0xD6, 0 }, + { 0x0179, 0x8D, 0 }, + { 0x017A, 0xA5, 0 }, + { 0x017B, 0xA3, 0 }, + { 0x017C, 0xA4, 0 }, + { 0x017D, 0xCF, 0 }, + { 0x017E, 0xD8, 0 }, + { 0x2019, 0xEF, 0 }, + { 0x201C, 0xF2, 0 }, + { 0x201D, 0xA6, 0 }, + { 0x201E, 0xF7, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM775ByteCvtData = +{ + aImplIBM775ToUniTab, + nullptr, + nullptr, + nullptr, + aImplIBM775ToCharTabEx, + IBM775UNI_START, IBM775UNI_END, + NOTABUNI_START, NOTABUNI_END, + NOTABCHAR_START, NOTABCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM775TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM775TextEncodingData + = { { &aImplIBM775ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-4", + "iso-8859-4", + 1, + 1, + 1, + 186, + RTL_TEXTENCODING_INFO_ASCII }; + /* DOS/OS2, SCRIPT_BALTIC, pc code page 775, mac encoding 29 (?) */ + +/* ======================================================================= */ + +/* IBM-852 */ +/* Dos Standard CharSet for Central Europa (Jug., Pol., Tsch., Ung., ...) */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp852.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM852UNI_START 0x80 +#define IBM852UNI_END 0xFF +sal_uInt16 const aImplIBM852ToUniTab[IBM852UNI_END - IBM852UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, /* 0x80 */ + 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106, /* 0x80 */ + 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, /* 0x90 */ + 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, /* 0xA0 */ + 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, /* 0xB0 */ + 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */ + 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, /* 0xD0 */ + 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580, /* 0xD0 */ + 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, /* 0xE0 */ + 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4, /* 0xE0 */ + 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, /* 0xF0 */ + 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM852TOCHARTABEX_COUNT 128 +ImplUniCharTabData const aImplIBM852ToCharTabEx[IBM852TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00A4, 0xCF, 0 }, + { 0x00A7, 0xF5, 0 }, + { 0x00A8, 0xF9, 0 }, + { 0x00AB, 0xAE, 0 }, + { 0x00AC, 0xAA, 0 }, + { 0x00AD, 0xF0, 0 }, + { 0x00B0, 0xF8, 0 }, + { 0x00B4, 0xEF, 0 }, + { 0x00B8, 0xF7, 0 }, + { 0x00BB, 0xAF, 0 }, + { 0x00C1, 0xB5, 0 }, + { 0x00C2, 0xB6, 0 }, + { 0x00C4, 0x8E, 0 }, + { 0x00C7, 0x80, 0 }, + { 0x00C9, 0x90, 0 }, + { 0x00CB, 0xD3, 0 }, + { 0x00CD, 0xD6, 0 }, + { 0x00CE, 0xD7, 0 }, + { 0x00D3, 0xE0, 0 }, + { 0x00D4, 0xE2, 0 }, + { 0x00D6, 0x99, 0 }, + { 0x00D7, 0x9E, 0 }, + { 0x00DA, 0xE9, 0 }, + { 0x00DC, 0x9A, 0 }, + { 0x00DD, 0xED, 0 }, + { 0x00DF, 0xE1, 0 }, + { 0x00E1, 0xA0, 0 }, + { 0x00E2, 0x83, 0 }, + { 0x00E4, 0x84, 0 }, + { 0x00E7, 0x87, 0 }, + { 0x00E9, 0x82, 0 }, + { 0x00EB, 0x89, 0 }, + { 0x00ED, 0xA1, 0 }, + { 0x00EE, 0x8C, 0 }, + { 0x00F3, 0xA2, 0 }, + { 0x00F4, 0x93, 0 }, + { 0x00F6, 0x94, 0 }, + { 0x00F7, 0xF6, 0 }, + { 0x00FA, 0xA3, 0 }, + { 0x00FC, 0x81, 0 }, + { 0x00FD, 0xEC, 0 }, + { 0x0102, 0xC6, 0 }, + { 0x0103, 0xC7, 0 }, + { 0x0104, 0xA4, 0 }, + { 0x0105, 0xA5, 0 }, + { 0x0106, 0x8F, 0 }, + { 0x0107, 0x86, 0 }, + { 0x010C, 0xAC, 0 }, + { 0x010D, 0x9F, 0 }, + { 0x010E, 0xD2, 0 }, + { 0x010F, 0xD4, 0 }, + { 0x0110, 0xD1, 0 }, + { 0x0111, 0xD0, 0 }, + { 0x0118, 0xA8, 0 }, + { 0x0119, 0xA9, 0 }, + { 0x011A, 0xB7, 0 }, + { 0x011B, 0xD8, 0 }, + { 0x0139, 0x91, 0 }, + { 0x013A, 0x92, 0 }, + { 0x013D, 0x95, 0 }, + { 0x013E, 0x96, 0 }, + { 0x0141, 0x9D, 0 }, + { 0x0142, 0x88, 0 }, + { 0x0143, 0xE3, 0 }, + { 0x0144, 0xE4, 0 }, + { 0x0147, 0xD5, 0 }, + { 0x0148, 0xE5, 0 }, + { 0x0150, 0x8A, 0 }, + { 0x0151, 0x8B, 0 }, + { 0x0154, 0xE8, 0 }, + { 0x0155, 0xEA, 0 }, + { 0x0158, 0xFC, 0 }, + { 0x0159, 0xFD, 0 }, + { 0x015A, 0x97, 0 }, + { 0x015B, 0x98, 0 }, + { 0x015E, 0xB8, 0 }, + { 0x015F, 0xAD, 0 }, + { 0x0160, 0xE6, 0 }, + { 0x0161, 0xE7, 0 }, + { 0x0162, 0xDD, 0 }, + { 0x0163, 0xEE, 0 }, + { 0x0164, 0x9B, 0 }, + { 0x0165, 0x9C, 0 }, + { 0x016E, 0xDE, 0 }, + { 0x016F, 0x85, 0 }, + { 0x0170, 0xEB, 0 }, + { 0x0171, 0xFB, 0 }, + { 0x0179, 0x8D, 0 }, + { 0x017A, 0xAB, 0 }, + { 0x017B, 0xBD, 0 }, + { 0x017C, 0xBE, 0 }, + { 0x017D, 0xA6, 0 }, + { 0x017E, 0xA7, 0 }, + { 0x02C7, 0xF3, 0 }, + { 0x02D8, 0xF4, 0 }, + { 0x02D9, 0xFA, 0 }, + { 0x02DB, 0xF2, 0 }, + { 0x02DD, 0xF1, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM852ByteCvtData = +{ + aImplIBM852ToUniTab, + nullptr, + nullptr, + nullptr, + aImplIBM852ToCharTabEx, + IBM852UNI_START, IBM852UNI_END, + NOTABUNI_START, NOTABUNI_END, + NOTABCHAR_START, NOTABCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM852TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM852TextEncodingData + = { { &aImplIBM852ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-2", + "ibm852", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */ + +/* ======================================================================= */ + +/* IBM-855 */ +/* Dos Standard CharSet for Cyrillic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp855.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM855UNI_START 0x80 +#define IBM855UNI_END 0xFF +sal_uInt16 const aImplIBM855ToUniTab[IBM855UNI_END - IBM855UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, /* 0x80 */ + 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, /* 0x80 */ + 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, /* 0x90 */ + 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A, /* 0x90 */ + 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, /* 0xA0 */ + 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, /* 0xB0 */ + 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */ + 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, /* 0xD0 */ + 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580, /* 0xD0 */ + 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, /* 0xE0 */ + 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116, /* 0xE0 */ + 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, /* 0xF0 */ + 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM855CHAR_START 0x0401 +#define IBM855CHAR_END 0x045F +unsigned char const aImplIBM855ToCharTab[IBM855CHAR_END - IBM855CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x85, 0x81, 0x83, 0x87, 0x89, 0x8B, 0x8D, /* 0x0400 */ + 0x8F, 0x91, 0x93, 0x95, 0x97, 0, 0x99, 0x9B, /* 0x0400 */ + 0xA1, 0xA3, 0xEC, 0xAD, 0xA7, 0xA9, 0xEA, 0xF4, /* 0x0410 */ + 0xB8, 0xBE, 0xC7, 0xD1, 0xD3, 0xD5, 0xD7, 0xDD, /* 0x0410 */ + 0xE2, 0xE4, 0xE6, 0xE8, 0xAB, 0xB6, 0xA5, 0xFC, /* 0x0420 */ + 0xF6, 0xFA, 0x9F, 0xF2, 0xEE, 0xF8, 0x9D, 0xE0, /* 0x0420 */ + 0xA0, 0xA2, 0xEB, 0xAC, 0xA6, 0xA8, 0xE9, 0xF3, /* 0x0430 */ + 0xB7, 0xBD, 0xC6, 0xD0, 0xD2, 0xD4, 0xD6, 0xD8, /* 0x0430 */ + 0xE1, 0xE3, 0xE5, 0xE7, 0xAA, 0xB5, 0xA4, 0xFB, /* 0x0440 */ + 0xF5, 0xF9, 0x9E, 0xF1, 0xED, 0xF7, 0x9C, 0xDE, /* 0x0440 */ + 0, 0x84, 0x80, 0x82, 0x86, 0x88, 0x8A, 0x8C, /* 0x0450 */ + 0x8E, 0x90, 0x92, 0x94, 0x96, 0, 0x98, 0x9A, /* 0x0450 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM855TOCHARTABEX_COUNT 36 +ImplUniCharTabData const aImplIBM855ToCharTabEx[IBM855TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00A4, 0xCF, 0 }, + { 0x00A7, 0xFD, 0 }, + { 0x00AB, 0xAE, 0 }, + { 0x00AD, 0xF0, 0 }, + { 0x00BB, 0xAF, 0 }, + { 0x2116, 0xEF, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM855ByteCvtData = +{ + aImplIBM855ToUniTab, + nullptr, + aImplIBM855ToCharTab, + nullptr, + aImplIBM855ToCharTabEx, + IBM855UNI_START, IBM855UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM855CHAR_START, IBM855CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM855TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM855TextEncodingData + = { { &aImplIBM855ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "iso-8859-5", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII }; + /* DOS/OS2, SCRIPT_CYRILLIC, pc code page 855, mac encoding 7 */ + +/* ======================================================================= */ + +/* IBM-857 */ +/* Dos Standard CharSet for Turkish */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp857.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM857UNI_START 0x80 +#define IBM857UNI_END 0xFF +sal_uInt16 const aImplIBM857ToUniTab[IBM857UNI_END - IBM857UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */ + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, /* 0x80 */ + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */ + 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, /* 0xA0 */ + 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, /* 0xB0 */ + 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */ + 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0, 0x00CD, 0x00CE, /* 0xD0 */ + 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, /* 0xD0 */ + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0, /* 0xE0 */ + 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, /* 0xE0 */ + 0x00AD, 0x00B1, 0, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, /* 0xF0 */ + 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM857CHAR_START 0x00A0 +#define IBM857CHAR_END 0x00FF +unsigned char const aImplIBM857ToCharTab[IBM857CHAR_END - IBM857CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* 0x00A0 */ + 0xF9, 0xB8, 0xD1, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* 0x00B0 */ + 0xF7, 0xFB, 0xD0, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* 0x00B0 */ + 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */ + 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* 0x00C0 */ + 0, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0xE8, /* 0x00D0 */ + 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0, 0, 0xE1, /* 0x00D0 */ + 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0x89, 0xEC, 0xA1, 0x8C, 0x8B, /* 0x00E0 */ + 0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* 0x00F0 */ + 0x9B, 0x97, 0xA3, 0x96, 0x81, 0, 0, 0xED /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM857TOCHARTABEX_COUNT 35 +ImplUniCharTabData const aImplIBM857ToCharTabEx[IBM857TOCHARTABEX_COUNT] = +{ + { 0x011E, 0xA6, 0 }, + { 0x011F, 0xA7, 0 }, + { 0x0130, 0x98, 0 }, + { 0x0131, 0x8D, 0 }, + { 0x015E, 0x9E, 0 }, + { 0x015F, 0x9F, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM857ByteCvtData = +{ + aImplIBM857ToUniTab, + nullptr, + aImplIBM857ToCharTab, + nullptr, + aImplIBM857ToCharTabEx, + IBM857UNI_START, IBM857UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM857CHAR_START, IBM857CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM857TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM857TextEncodingData + = { { &aImplIBM857ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-9", + "iso-8859-9", + 1, + 1, + 1, + 162, + RTL_TEXTENCODING_INFO_ASCII }; + /* DOS/OS2, SCRIPT_TURKISH, pc code page 857, mac encoding 35 */ + +/* ======================================================================= */ + +/* IBM-866 */ +/* Dos Standard CharSet for CyrillicRussian */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp866.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM866UNI_START 0x80 +#define IBM866UNI_END 0xFF +sal_uInt16 const aImplIBM866ToUniTab[IBM866UNI_END - IBM866UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0x80 */ + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0x80 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0x90 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0x90 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xA0 */ + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xE0 */ + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, /* 0xE0 */ + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM866CHAR_START 0x0401 +#define IBM866CHAR_END 0x045E +unsigned char const aImplIBM866ToCharTab[IBM866CHAR_END - IBM866CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0, 0, 0, 0xF2, 0, 0, 0xF4, /* 0x0400 */ + 0, 0, 0, 0, 0, 0, 0xF6, 0, /* 0x0400 */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0410 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x0410 */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0420 */ + 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, /* 0x0420 */ + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0430 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x0430 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0440 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0440 */ + 0, 0xF1, 0, 0, 0xF3, 0, 0, 0xF5, /* 0x0450 */ + 0, 0, 0, 0, 0, 0, 0xF7 /* 0x0450 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM866TOCHARTABEX_COUNT 56 +ImplUniCharTabData const aImplIBM866ToCharTabEx[IBM866TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00A4, 0xFD, 0 }, + { 0x00B0, 0xF8, 0 }, + { 0x00B7, 0xFA, 0 }, + { 0x2116, 0xFC, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM866ByteCvtData = +{ + aImplIBM866ToUniTab, + nullptr, + aImplIBM866ToCharTab, + nullptr, + aImplIBM866ToCharTabEx, + IBM866UNI_START, IBM866UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM866CHAR_START, IBM866CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM866TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM866TextEncodingData + = { { &aImplIBM866ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "cp866", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 866, mac encoding 7 */ + +/* ======================================================================= */ + +/* IBM-869 */ +/* Dos Standard CharSet for Greek2 */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp869.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM869UNI_START 0x86 +#define IBM869UNI_END 0xFF +sal_uInt16 const aImplIBM869ToUniTab[IBM869UNI_END - IBM869UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0386, 0, /* 0x80 */ + 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, /* 0x80 */ + 0x038A, 0x03AA, 0x038C, 0, 0, 0x038E, 0x03AB, 0x00A9, /* 0x90 */ + 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF, /* 0x90 */ + 0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, /* 0xA0 */ + 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, /* 0xB0 */ + 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x03A0, 0x03A1, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3, /* 0xC0 */ + 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, /* 0xD0 */ + 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580, /* 0xD0 */ + 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, /* 0xE0 */ + 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384, /* 0xE0 */ + 0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, /* 0xF0 */ + 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM869CHAR_START 0x0384 +#define IBM869CHAR_END 0x03CE +unsigned char const aImplIBM869ToCharTab[IBM869CHAR_END - IBM869CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEF, 0xF7, 0x86, 0, /* 0x0380 */ + 0x8D, 0x8F, 0x90, 0, 0x92, 0, 0x95, 0x98, /* 0x0380 */ + 0xA1, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, /* 0x0390 */ + 0xAC, 0xAD, 0xB5, 0xB6, 0xB7, 0xB8, 0xBD, 0xBE, /* 0x0390 */ + 0xC6, 0xC7, 0, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, /* 0x03A0 */ + 0xD4, 0xD5, 0x91, 0x96, 0x9B, 0x9D, 0x9E, 0x9F, /* 0x03A0 */ + 0xFC, 0xD6, 0xD7, 0xD8, 0xDD, 0xDE, 0xE0, 0xE1, /* 0x03B0 */ + 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, /* 0x03B0 */ + 0xEA, 0xEB, 0xED, 0xEC, 0xEE, 0xF2, 0xF3, 0xF4, /* 0x03C0 */ + 0xF6, 0xFA, 0xA0, 0xFB, 0xA2, 0xA3, 0xFD /* 0x03C0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM869TOCHARTABEX_COUNT 48 +ImplUniCharTabData const aImplIBM869ToCharTabEx[IBM869TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xFF, 0 }, + { 0x00A3, 0x9C, 0 }, + { 0x00A6, 0x8A, 0 }, + { 0x00A7, 0xF5, 0 }, + { 0x00A8, 0xF9, 0 }, + { 0x00A9, 0x97, 0 }, + { 0x00AB, 0xAE, 0 }, + { 0x00AC, 0x89, 0 }, + { 0x00AD, 0xF0, 0 }, + { 0x00B0, 0xF8, 0 }, + { 0x00B1, 0xF1, 0 }, + { 0x00B2, 0x99, 0 }, + { 0x00B3, 0x9A, 0 }, + { 0x00B7, 0x88, 0 }, + { 0x00BB, 0xAF, 0 }, + { 0x00BD, 0xAB, 0 }, + { 0x2015, 0x8E, 0 }, + { 0x2018, 0x8B, 0 }, + { 0x2019, 0x8C, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM869ByteCvtData = +{ + aImplIBM869ToUniTab, + nullptr, + aImplIBM869ToCharTab, + nullptr, + aImplIBM869ToCharTabEx, + IBM869UNI_START, IBM869UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM869CHAR_START, IBM869CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM869TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM869TextEncodingData + = { { &aImplIBM869ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-7", + "iso-8859-7", + 1, + 1, + 1, + 161, + RTL_TEXTENCODING_INFO_ASCII }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 869, mac encoding 6 */ + +/* ======================================================================= */ + +/* MS-1250 */ +/* Windows CodePage for Eastern European (WinLatin2) */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1250.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1250UNI_START 0x80 +#define MS1250UNI_END 0xFF +sal_uInt16 const aImplMS1250ToUniTab[MS1250UNI_END - MS1250UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A, /* 0x90 */ + 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B, /* 0xA0 */ + 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C, /* 0xB0 */ + 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, /* 0xC0 */ + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, /* 0xC0 */ + 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, /* 0xD0 */ + 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, /* 0xD0 */ + 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, /* 0xE0 */ + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, /* 0xE0 */ + 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, /* 0xF0 */ + 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1250TOCHARTABEX_COUNT 123 +ImplUniCharTabData const aImplMS1250ToCharTabEx[MS1250TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00C1, 0xC1, 0 }, + { 0x00C2, 0xC2, 0 }, + { 0x00C4, 0xC4, 0 }, + { 0x00C7, 0xC7, 0 }, + { 0x00C9, 0xC9, 0 }, + { 0x00CB, 0xCB, 0 }, + { 0x00CD, 0xCD, 0 }, + { 0x00CE, 0xCE, 0 }, + { 0x00D3, 0xD3, 0 }, + { 0x00D4, 0xD4, 0 }, + { 0x00D6, 0xD6, 0 }, + { 0x00D7, 0xD7, 0 }, + { 0x00DA, 0xDA, 0 }, + { 0x00DC, 0xDC, 0 }, + { 0x00DD, 0xDD, 0 }, + { 0x00DF, 0xDF, 0 }, + { 0x00E1, 0xE1, 0 }, + { 0x00E2, 0xE2, 0 }, + { 0x00E4, 0xE4, 0 }, + { 0x00E7, 0xE7, 0 }, + { 0x00E9, 0xE9, 0 }, + { 0x00EB, 0xEB, 0 }, + { 0x00ED, 0xED, 0 }, + { 0x00EE, 0xEE, 0 }, + { 0x00F3, 0xF3, 0 }, + { 0x00F4, 0xF4, 0 }, + { 0x00F6, 0xF6, 0 }, + { 0x00F7, 0xF7, 0 }, + { 0x00FA, 0xFA, 0 }, + { 0x00FC, 0xFC, 0 }, + { 0x00FD, 0xFD, 0 }, + { 0x0102, 0xC3, 0 }, + { 0x0103, 0xE3, 0 }, + { 0x0104, 0xA5, 0 }, + { 0x0105, 0xB9, 0 }, + { 0x0106, 0xC6, 0 }, + { 0x0107, 0xE6, 0 }, + { 0x010C, 0xC8, 0 }, + { 0x010D, 0xE8, 0 }, + { 0x010E, 0xCF, 0 }, + { 0x010F, 0xEF, 0 }, + { 0x0110, 0xD0, 0 }, + { 0x0111, 0xF0, 0 }, + { 0x0118, 0xCA, 0 }, + { 0x0119, 0xEA, 0 }, + { 0x011A, 0xCC, 0 }, + { 0x011B, 0xEC, 0 }, + { 0x0139, 0xC5, 0 }, + { 0x013A, 0xE5, 0 }, + { 0x013D, 0xBC, 0 }, + { 0x013E, 0xBE, 0 }, + { 0x0141, 0xA3, 0 }, + { 0x0142, 0xB3, 0 }, + { 0x0143, 0xD1, 0 }, + { 0x0144, 0xF1, 0 }, + { 0x0147, 0xD2, 0 }, + { 0x0148, 0xF2, 0 }, + { 0x0150, 0xD5, 0 }, + { 0x0151, 0xF5, 0 }, + { 0x0154, 0xC0, 0 }, + { 0x0155, 0xE0, 0 }, + { 0x0158, 0xD8, 0 }, + { 0x0159, 0xF8, 0 }, + { 0x015A, 0x8C, 0 }, + { 0x015B, 0x9C, 0 }, + { 0x015E, 0xAA, 0 }, + { 0x015F, 0xBA, 0 }, + { 0x0160, 0x8A, 0 }, + { 0x0161, 0x9A, 0 }, + { 0x0162, 0xDE, 0 }, + { 0x0163, 0xFE, 0 }, + { 0x0164, 0x8D, 0 }, + { 0x0165, 0x9D, 0 }, + { 0x016E, 0xD9, 0 }, + { 0x016F, 0xF9, 0 }, + { 0x0170, 0xDB, 0 }, + { 0x0171, 0xFB, 0 }, + { 0x0179, 0x8F, 0 }, + { 0x017A, 0x9F, 0 }, + { 0x017B, 0xAF, 0 }, + { 0x017C, 0xBF, 0 }, + { 0x017D, 0x8E, 0 }, + { 0x017E, 0x9E, 0 }, + { 0x02C7, 0xA1, 0 }, + { 0x02D8, 0xA2, 0 }, + { 0x02D9, 0xFF, 0 }, + { 0x02DB, 0xB2, 0 }, + { 0x02DD, 0xBD, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1250ByteCvtData = +{ + aImplMS1250ToUniTab, + nullptr, + nullptr, + nullptr, + aImplMS1250ToCharTabEx, + MS1250UNI_START, MS1250UNI_END, + NOTABUNI_START, NOTABUNI_END, + NOTABCHAR_START, NOTABCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1250TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1250TextEncodingData + = { { &aImplMS1250ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-2", + "windows-1250", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */ + +/* ======================================================================= */ + +/* MS-1251 */ +/* Windows CodePage for Cyrillic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1251.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1251UNI_START 0x80 +#define MS1251UNI_END 0xFF +sal_uInt16 const aImplMS1251ToUniTab[MS1251UNI_END - MS1251UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, /* 0x80 */ + 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, /* 0x90 */ + 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, /* 0xA0 */ + 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, /* 0xA0 */ + 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, /* 0xB0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0xC0 */ + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0xC0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xD0 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xD0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */ + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */ + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1251CHAR_START 0x0401 +#define MS1251CHAR_END 0x045F +unsigned char const aImplMS1251ToCharTab[MS1251CHAR_END - MS1251CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8, 0x80, 0x81, 0xAA, 0xBD, 0xB2, 0xAF, /* 0x0400 */ + 0xA3, 0x8A, 0x8C, 0x8E, 0x8D, 0, 0xA1, 0x8F, /* 0x0400 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0410 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0410 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0420 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x0420 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0430 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0430 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0440 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, /* 0x0440 */ + 0, 0xB8, 0x90, 0x83, 0xBA, 0xBE, 0xB3, 0xBF, /* 0x0450 */ + 0xBC, 0x9A, 0x9C, 0x9E, 0x9D, 0, 0xA2, 0x9F /* 0x0450 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1251TOCHARTABEX_COUNT 35 +ImplUniCharTabData const aImplMS1251ToCharTabEx[MS1251TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x0490, 0xA5, 0 }, + { 0x0491, 0xB4, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x88, 0 }, + { 0x2116, 0xB9, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1251ByteCvtData = +{ + aImplMS1251ToUniTab, + nullptr, + aImplMS1251ToCharTab, + nullptr, + aImplMS1251ToCharTabEx, + MS1251UNI_START, MS1251UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1251CHAR_START, MS1251CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1251TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1251TextEncodingData + = { { &aImplMS1251ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "windows-1251", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */ + +/* ======================================================================= */ + +/* MS-1253 */ +/* Windows Standard CharSet for Greek */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1253.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1253UNI_START 0x80 +#define MS1253UNI_END 0xFF +sal_uInt16 const aImplMS1253ToUniTab[MS1253UNI_END - MS1253UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0, 0x2030, 0, 0x2039, 0, 0, 0, 0, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0, 0x2122, 0, 0x203A, 0, 0, 0, 0, /* 0x90 */ + 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, /* 0xB0 */ + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xC0 */ + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xC0 */ + 0x03A0, 0x03A1, 0, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, /* 0xD0 */ + 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, /* 0xD0 */ + 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xE0 */ + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xE0 */ + 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, /* 0xF0 */ + 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1253CHAR_START 0x0384 +#define MS1253CHAR_END 0x03CE +unsigned char const aImplMS1253ToCharTab[MS1253CHAR_END - MS1253CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB4, 0xA1, 0xA2, 0, /* 0x0380 */ + 0xB8, 0xB9, 0xBA, 0, 0xBC, 0, 0xBE, 0xBF, /* 0x0380 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0390 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0390 */ + 0xD0, 0xD1, 0, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x03A0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x03A0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x03B0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x03B0 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x03C0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE /* 0x03C0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1253TOCHARTABEX_COUNT 40 +ImplUniCharTabData const aImplMS1253ToCharTabEx[MS1253TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A5, 0xA5, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x0192, 0x83, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2015, 0xAF, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1253ByteCvtData = +{ + aImplMS1253ToUniTab, + nullptr, + aImplMS1253ToCharTab, + nullptr, + aImplMS1253ToCharTabEx, + MS1253UNI_START, MS1253UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1253CHAR_START, MS1253CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1253TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1253TextEncodingData + = { { &aImplMS1253ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-7", + "windows-1253", + 1, + 1, + 1, + 161, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_GREEK, pc code page 869, mac encoding 6 */ + +/* ======================================================================= */ + +/* MS-1254 */ +/* Windows Standard CharSet for Turkish */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1254.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1254UNI_START 0x80 +#define MS1254UNI_END 0xFF +sal_uInt16 const aImplMS1254ToUniTab[MS1254UNI_END - MS1254UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0, 0, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0, 0x0178, /* 0x90 */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1254CHAR_START 0x00A0 +#define MS1254CHAR_END 0x00FF +unsigned char const aImplMS1254ToCharTab[MS1254CHAR_END - MS1254CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */ + 0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */ + 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1254TOCHARTABEX_COUNT 31 +ImplUniCharTabData const aImplMS1254ToCharTabEx[MS1254TOCHARTABEX_COUNT] = +{ + { 0x011E, 0xD0, 0 }, + { 0x011F, 0xF0, 0 }, + { 0x0130, 0xDD, 0 }, + { 0x0131, 0xFD, 0 }, + { 0x0152, 0x8C, 0 }, + { 0x0153, 0x9C, 0 }, + { 0x015E, 0xDE, 0 }, + { 0x015F, 0xFE, 0 }, + { 0x0160, 0x8A, 0 }, + { 0x0161, 0x9A, 0 }, + { 0x0178, 0x9F, 0 }, + { 0x0192, 0x83, 0 }, + { 0x02C6, 0x88, 0 }, + { 0x02DC, 0x98, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1254ByteCvtData = +{ + aImplMS1254ToUniTab, + nullptr, + aImplMS1254ToCharTab, + nullptr, + aImplMS1254ToCharTabEx, + MS1254UNI_START, MS1254UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1254CHAR_START, MS1254CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1254TOCHARTABEX_COUNT, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1254TextEncodingData + = { { &aImplMS1254ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-9", + "windows-1254", + 1, + 1, + 1, + 162, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_TURKISH, pc code page 857, mac encoding 35 */ + +/* ======================================================================= */ + +/* MS-1257 */ +/* Windows Standard CharSet for Baltic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1257.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1257UNI_START 0x80 +#define MS1257UNI_END 0xFF +sal_uInt16 const aImplMS1257ToUniTab[MS1257UNI_END - MS1257UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0, 0x2030, 0, 0x2039, 0, 0x00A8, 0x02C7, 0x00B8, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0, 0x2122, 0, 0x203A, 0, 0x00AF, 0x02DB, 0, /* 0x90 */ + 0x00A0, 0, 0x00A2, 0x00A3, 0x00A4, 0, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, /* 0xB0 */ + 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, /* 0xC0 */ + 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, /* 0xC0 */ + 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, /* 0xD0 */ + 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, /* 0xE0 */ + 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, /* 0xE0 */ + 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1257CHAR_START 0x00A0 +#define MS1257CHAR_END 0x017E +unsigned char const aImplMS1257ToCharTab[MS1257CHAR_END - MS1257CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA0, 0, 0xA2, 0xA3, 0xA4, 0, 0xA6, 0xA7, /* 0x00A0 */ + 0x8D, 0xA9, 0, 0xAB, 0xAC, 0xAD, 0xAE, 0x9D, /* 0x00A0 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */ + 0x8F, 0xB9, 0, 0xBB, 0xBC, 0xBD, 0xBE, 0, /* 0x00B0 */ + 0, 0, 0, 0, 0xC4, 0xC5, 0xAF, 0, /* 0x00C0 */ + 0, 0xC9, 0, 0, 0, 0, 0, 0, /* 0x00C0 */ + 0, 0, 0, 0xD3, 0, 0xD5, 0xD6, 0xD7, /* 0x00D0 */ + 0xA8, 0, 0, 0, 0xDC, 0, 0, 0xDF, /* 0x00D0 */ + 0, 0, 0, 0, 0xE4, 0xE5, 0xBF, 0, /* 0x00E0 */ + 0, 0xE9, 0, 0, 0, 0, 0, 0, /* 0x00E0 */ + 0, 0, 0, 0xF3, 0, 0xF5, 0xF6, 0xF7, /* 0x00F0 */ + 0xB8, 0, 0, 0, 0xFC, 0, 0, 0, /* 0x00F0 */ + 0xC2, 0xE2, 0, 0, 0xC0, 0xE0, 0xC3, 0xE3, /* 0x0100 */ + 0, 0, 0, 0, 0xC8, 0xE8, 0, 0, /* 0x0100 */ + 0, 0, 0xC7, 0xE7, 0, 0, 0xCB, 0xEB, /* 0x0110 */ + 0xC6, 0xE6, 0, 0, 0, 0, 0, 0, /* 0x0110 */ + 0, 0, 0xCC, 0xEC, 0, 0, 0, 0, /* 0x0120 */ + 0, 0, 0xCE, 0xEE, 0, 0, 0xC1, 0xE1, /* 0x0120 */ + 0, 0, 0, 0, 0, 0, 0xCD, 0xED, /* 0x0130 */ + 0, 0, 0, 0xCF, 0xEF, 0, 0, 0, /* 0x0130 */ + 0, 0xD9, 0xF9, 0xD1, 0xF1, 0xD2, 0xF2, 0, /* 0x0140 */ + 0, 0, 0, 0, 0xD4, 0xF4, 0, 0, /* 0x0140 */ + 0, 0, 0, 0, 0, 0, 0xAA, 0xBA, /* 0x0150 */ + 0, 0, 0xDA, 0xFA, 0, 0, 0, 0, /* 0x0150 */ + 0xD0, 0xF0, 0, 0, 0, 0, 0, 0, /* 0x0160 */ + 0, 0, 0xDB, 0xFB, 0, 0, 0, 0, /* 0x0160 */ + 0, 0, 0xD8, 0xF8, 0, 0, 0, 0, /* 0x0170 */ + 0, 0xCA, 0xEA, 0xDD, 0xFD, 0xDE, 0xFE /* 0x0170 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1257TOCHARTABEX_COUNT 20 +ImplUniCharTabData const aImplMS1257ToCharTabEx[MS1257TOCHARTABEX_COUNT] = +{ + { 0x02C7, 0x8E, 0 }, + { 0x02D9, 0xFF, 0 }, + { 0x02DB, 0x9E, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1257ByteCvtData = +{ + aImplMS1257ToUniTab, + nullptr, + aImplMS1257ToCharTab, + nullptr, + aImplMS1257ToCharTabEx, + MS1257UNI_START, MS1257UNI_END, + NOTABUNI_START, NOTABUNI_END, + MS1257CHAR_START, MS1257CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1257TOCHARTABEX_COUNT, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1257TextEncodingData + = { { &aImplMS1257ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-4", + "windows-1257", + 1, + 1, + 1, + 186, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_BALTIC, pc code page 775, mac encoding 29 */ + +/* ======================================================================= */ + +/* ISO-8859-2 */ +/* Unix Standard for Eastern European (Latin2) */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-2.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88592UNI_START 0xA0 +#define ISO88592UNI_END 0xFF +sal_uInt16 const aImplISO88592ToUniTab[ISO88592UNI_END - ISO88592UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, /* 0xA0 */ + 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, /* 0xA0 */ + 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, /* 0xB0 */ + 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, /* 0xB0 */ + 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, /* 0xC0 */ + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, /* 0xC0 */ + 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, /* 0xD0 */ + 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, /* 0xD0 */ + 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, /* 0xE0 */ + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, /* 0xE0 */ + 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, /* 0xF0 */ + 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88592TOCHARTABEX_COUNT 96 +ImplUniCharTabData const aImplISO88592ToCharTabEx[ISO88592TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00C1, 0xC1, 0 }, + { 0x00C2, 0xC2, 0 }, + { 0x00C4, 0xC4, 0 }, + { 0x00C7, 0xC7, 0 }, + { 0x00C9, 0xC9, 0 }, + { 0x00CB, 0xCB, 0 }, + { 0x00CD, 0xCD, 0 }, + { 0x00CE, 0xCE, 0 }, + { 0x00D3, 0xD3, 0 }, + { 0x00D4, 0xD4, 0 }, + { 0x00D6, 0xD6, 0 }, + { 0x00D7, 0xD7, 0 }, + { 0x00DA, 0xDA, 0 }, + { 0x00DC, 0xDC, 0 }, + { 0x00DD, 0xDD, 0 }, + { 0x00DF, 0xDF, 0 }, + { 0x00E1, 0xE1, 0 }, + { 0x00E2, 0xE2, 0 }, + { 0x00E4, 0xE4, 0 }, + { 0x00E7, 0xE7, 0 }, + { 0x00E9, 0xE9, 0 }, + { 0x00EB, 0xEB, 0 }, + { 0x00ED, 0xED, 0 }, + { 0x00EE, 0xEE, 0 }, + { 0x00F3, 0xF3, 0 }, + { 0x00F4, 0xF4, 0 }, + { 0x00F6, 0xF6, 0 }, + { 0x00F7, 0xF7, 0 }, + { 0x00FA, 0xFA, 0 }, + { 0x00FC, 0xFC, 0 }, + { 0x00FD, 0xFD, 0 }, + { 0x0102, 0xC3, 0 }, + { 0x0103, 0xE3, 0 }, + { 0x0104, 0xA1, 0 }, + { 0x0105, 0xB1, 0 }, + { 0x0106, 0xC6, 0 }, + { 0x0107, 0xE6, 0 }, + { 0x010C, 0xC8, 0 }, + { 0x010D, 0xE8, 0 }, + { 0x010E, 0xCF, 0 }, + { 0x010F, 0xEF, 0 }, + { 0x0110, 0xD0, 0 }, + { 0x0111, 0xF0, 0 }, + { 0x0118, 0xCA, 0 }, + { 0x0119, 0xEA, 0 }, + { 0x011A, 0xCC, 0 }, + { 0x011B, 0xEC, 0 }, + { 0x0139, 0xC5, 0 }, + { 0x013A, 0xE5, 0 }, + { 0x013D, 0xA5, 0 }, + { 0x013E, 0xB5, 0 }, + { 0x0141, 0xA3, 0 }, + { 0x0142, 0xB3, 0 }, + { 0x0143, 0xD1, 0 }, + { 0x0144, 0xF1, 0 }, + { 0x0147, 0xD2, 0 }, + { 0x0148, 0xF2, 0 }, + { 0x0150, 0xD5, 0 }, + { 0x0151, 0xF5, 0 }, + { 0x0154, 0xC0, 0 }, + { 0x0155, 0xE0, 0 }, + { 0x0158, 0xD8, 0 }, + { 0x0159, 0xF8, 0 }, + { 0x015A, 0xA6, 0 }, + { 0x015B, 0xB6, 0 }, + { 0x015E, 0xAA, 0 }, + { 0x015F, 0xBA, 0 }, + { 0x0160, 0xA9, 0 }, + { 0x0161, 0xB9, 0 }, + { 0x0162, 0xDE, 0 }, + { 0x0163, 0xFE, 0 }, + { 0x0164, 0xAB, 0 }, + { 0x0165, 0xBB, 0 }, + { 0x016E, 0xD9, 0 }, + { 0x016F, 0xF9, 0 }, + { 0x0170, 0xDB, 0 }, + { 0x0171, 0xFB, 0 }, + { 0x0179, 0xAC, 0 }, + { 0x017A, 0xBC, 0 }, + { 0x017B, 0xAF, 0 }, + { 0x017C, 0xBF, 0 }, + { 0x017D, 0xAE, 0 }, + { 0x017E, 0xBE, 0 }, + { 0x02C7, 0xB7, 0 }, + { 0x02D8, 0xA2, 0 }, + { 0x02D9, 0xFF, 0 }, + { 0x02DB, 0xB2, 0 }, + { 0x02DD, 0xBD, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88592ByteCvtData = +{ + aImplISO88592ToUniTab, + aImpl8090SameToUniTab, + aImpl8090SameToCharTab, + nullptr, + aImplISO88592ToCharTabEx, + ISO88592UNI_START, ISO88592UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + SAME8090CHAR_START, SAME8090CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + ISO88592TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88592TextEncodingData + = { { &aImplISO88592ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-2", + "iso-8859-2", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */ + +/* ======================================================================= */ + +/* ISO-8859-3 */ +/* Latin3 (Esperanto, Maltese, Turkish) */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-3.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88593UNI_START 0xA0 +#define ISO88593UNI_END 0xFF +sal_uInt16 const aImplISO88593ToUniTab[ISO88593UNI_END - ISO88593UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0, 0x0124, 0x00A7, /* 0xA0 */ + 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0, 0x017B, /* 0xA0 */ + 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, /* 0xB0 */ + 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0, 0x017C, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0, 0x00C4, 0x010A, 0x0108, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, /* 0xD0 */ + 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0, 0x00E4, 0x010B, 0x0109, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, /* 0xF0 */ + 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88593TOCHARTABEX_COUNT 89 +ImplUniCharTabData const aImplISO88593ToCharTabEx[ISO88593TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x00C0, 0xC0, 0 }, + { 0x00C1, 0xC1, 0 }, + { 0x00C2, 0xC2, 0 }, + { 0x00C4, 0xC4, 0 }, + { 0x00C7, 0xC7, 0 }, + { 0x00C8, 0xC8, 0 }, + { 0x00C9, 0xC9, 0 }, + { 0x00CA, 0xCA, 0 }, + { 0x00CB, 0xCB, 0 }, + { 0x00CC, 0xCC, 0 }, + { 0x00CD, 0xCD, 0 }, + { 0x00CE, 0xCE, 0 }, + { 0x00CF, 0xCF, 0 }, + { 0x00D1, 0xD1, 0 }, + { 0x00D2, 0xD2, 0 }, + { 0x00D3, 0xD3, 0 }, + { 0x00D4, 0xD4, 0 }, + { 0x00D6, 0xD6, 0 }, + { 0x00D7, 0xD7, 0 }, + { 0x00D9, 0xD9, 0 }, + { 0x00DA, 0xDA, 0 }, + { 0x00DB, 0xDB, 0 }, + { 0x00DC, 0xDC, 0 }, + { 0x00DF, 0xDF, 0 }, + { 0x00E0, 0xE0, 0 }, + { 0x00E1, 0xE1, 0 }, + { 0x00E2, 0xE2, 0 }, + { 0x00E4, 0xE4, 0 }, + { 0x00E7, 0xE7, 0 }, + { 0x00E8, 0xE8, 0 }, + { 0x00E9, 0xE9, 0 }, + { 0x00EA, 0xEA, 0 }, + { 0x00EB, 0xEB, 0 }, + { 0x00EC, 0xEC, 0 }, + { 0x00ED, 0xED, 0 }, + { 0x00EE, 0xEE, 0 }, + { 0x00EF, 0xEF, 0 }, + { 0x00F1, 0xF1, 0 }, + { 0x00F2, 0xF2, 0 }, + { 0x00F3, 0xF3, 0 }, + { 0x00F4, 0xF4, 0 }, + { 0x00F6, 0xF6, 0 }, + { 0x00F7, 0xF7, 0 }, + { 0x00F9, 0xF9, 0 }, + { 0x00FA, 0xFA, 0 }, + { 0x00FB, 0xFB, 0 }, + { 0x00FC, 0xFC, 0 }, + { 0x0108, 0xC6, 0 }, + { 0x0109, 0xE6, 0 }, + { 0x010A, 0xC5, 0 }, + { 0x010B, 0xE5, 0 }, + { 0x011C, 0xD8, 0 }, + { 0x011D, 0xF8, 0 }, + { 0x011E, 0xAB, 0 }, + { 0x011F, 0xBB, 0 }, + { 0x0120, 0xD5, 0 }, + { 0x0121, 0xF5, 0 }, + { 0x0124, 0xA6, 0 }, + { 0x0125, 0xB6, 0 }, + { 0x0126, 0xA1, 0 }, + { 0x0127, 0xB1, 0 }, + { 0x0130, 0xA9, 0 }, + { 0x0131, 0xB9, 0 }, + { 0x0134, 0xAC, 0 }, + { 0x0135, 0xBC, 0 }, + { 0x015C, 0xDE, 0 }, + { 0x015D, 0xFE, 0 }, + { 0x015E, 0xAA, 0 }, + { 0x015F, 0xBA, 0 }, + { 0x016C, 0xDD, 0 }, + { 0x016D, 0xFD, 0 }, + { 0x017B, 0xAF, 0 }, + { 0x017C, 0xBF, 0 }, + { 0x02D8, 0xA2, 0 }, + { 0x02D9, 0xFF, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88593ByteCvtData = +{ + aImplISO88593ToUniTab, + aImpl8090SameToUniTab, + aImpl8090SameToCharTab, + nullptr, + aImplISO88593ToCharTabEx, + ISO88593UNI_START, ISO88593UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + SAME8090CHAR_START, SAME8090CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + ISO88593TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88593TextEncodingData + = { { &aImplISO88593ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-3", + "iso-8859-3", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_LATIN, pc code page 850 */ + +/* ======================================================================= */ + +/* ISO-8859-4 */ +/* Latin4 (Estonian, Latvian, Lithuanian) */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-4.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88594UNI_START 0xA0 +#define ISO88594UNI_END 0xFF +sal_uInt16 const aImplISO88594ToUniTab[ISO88594UNI_END - ISO88594UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, /* 0xA0 */ + 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, /* 0xA0 */ + 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, /* 0xB0 */ + 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, /* 0xB0 */ + 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, /* 0xC0 */ + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A, /* 0xC0 */ + 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF, /* 0xD0 */ + 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, /* 0xE0 */ + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, /* 0xE0 */ + 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88594TOCHARTABEX_COUNT 96 +ImplUniCharTabData const aImplISO88594ToCharTabEx[ISO88594TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AF, 0xAF, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B4, 0xB4, 0 }, + { 0x00B8, 0xB8, 0 }, + { 0x00C1, 0xC1, 0 }, + { 0x00C2, 0xC2, 0 }, + { 0x00C3, 0xC3, 0 }, + { 0x00C4, 0xC4, 0 }, + { 0x00C5, 0xC5, 0 }, + { 0x00C6, 0xC6, 0 }, + { 0x00C9, 0xC9, 0 }, + { 0x00CB, 0xCB, 0 }, + { 0x00CD, 0xCD, 0 }, + { 0x00CE, 0xCE, 0 }, + { 0x00D4, 0xD4, 0 }, + { 0x00D5, 0xD5, 0 }, + { 0x00D6, 0xD6, 0 }, + { 0x00D7, 0xD7, 0 }, + { 0x00D8, 0xD8, 0 }, + { 0x00DA, 0xDA, 0 }, + { 0x00DB, 0xDB, 0 }, + { 0x00DC, 0xDC, 0 }, + { 0x00DF, 0xDF, 0 }, + { 0x00E1, 0xE1, 0 }, + { 0x00E2, 0xE2, 0 }, + { 0x00E3, 0xE3, 0 }, + { 0x00E4, 0xE4, 0 }, + { 0x00E5, 0xE5, 0 }, + { 0x00E6, 0xE6, 0 }, + { 0x00E9, 0xE9, 0 }, + { 0x00EB, 0xEB, 0 }, + { 0x00ED, 0xED, 0 }, + { 0x00EE, 0xEE, 0 }, + { 0x00F4, 0xF4, 0 }, + { 0x00F5, 0xF5, 0 }, + { 0x00F6, 0xF6, 0 }, + { 0x00F7, 0xF7, 0 }, + { 0x00F8, 0xF8, 0 }, + { 0x00FA, 0xFA, 0 }, + { 0x00FB, 0xFB, 0 }, + { 0x00FC, 0xFC, 0 }, + { 0x0100, 0xC0, 0 }, + { 0x0101, 0xE0, 0 }, + { 0x0104, 0xA1, 0 }, + { 0x0105, 0xB1, 0 }, + { 0x010C, 0xC8, 0 }, + { 0x010D, 0xE8, 0 }, + { 0x0110, 0xD0, 0 }, + { 0x0111, 0xF0, 0 }, + { 0x0112, 0xAA, 0 }, + { 0x0113, 0xBA, 0 }, + { 0x0116, 0xCC, 0 }, + { 0x0117, 0xEC, 0 }, + { 0x0118, 0xCA, 0 }, + { 0x0119, 0xEA, 0 }, + { 0x0122, 0xAB, 0 }, + { 0x0123, 0xBB, 0 }, + { 0x0128, 0xA5, 0 }, + { 0x0129, 0xB5, 0 }, + { 0x012A, 0xCF, 0 }, + { 0x012B, 0xEF, 0 }, + { 0x012E, 0xC7, 0 }, + { 0x012F, 0xE7, 0 }, + { 0x0136, 0xD3, 0 }, + { 0x0137, 0xF3, 0 }, + { 0x0138, 0xA2, 0 }, + { 0x013B, 0xA6, 0 }, + { 0x013C, 0xB6, 0 }, + { 0x0145, 0xD1, 0 }, + { 0x0146, 0xF1, 0 }, + { 0x014A, 0xBD, 0 }, + { 0x014B, 0xBF, 0 }, + { 0x014C, 0xD2, 0 }, + { 0x014D, 0xF2, 0 }, + { 0x0156, 0xA3, 0 }, + { 0x0157, 0xB3, 0 }, + { 0x0160, 0xA9, 0 }, + { 0x0161, 0xB9, 0 }, + { 0x0166, 0xAC, 0 }, + { 0x0167, 0xBC, 0 }, + { 0x0168, 0xDD, 0 }, + { 0x0169, 0xFD, 0 }, + { 0x016A, 0xDE, 0 }, + { 0x016B, 0xFE, 0 }, + { 0x0172, 0xD9, 0 }, + { 0x0173, 0xF9, 0 }, + { 0x017D, 0xAE, 0 }, + { 0x017E, 0xBE, 0 }, + { 0x02C7, 0xB7, 0 }, + { 0x02D9, 0xFF, 0 }, + { 0x02DB, 0xB2, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88594ByteCvtData = +{ + aImplISO88594ToUniTab, + aImpl8090SameToUniTab, + aImpl8090SameToCharTab, + nullptr, + aImplISO88594ToCharTabEx, + ISO88594UNI_START, ISO88594UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + SAME8090CHAR_START, SAME8090CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + ISO88594TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88594TextEncodingData + = { { &aImplISO88594ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-4", + "iso-8859-4", + 1, + 1, + 1, + 186, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_BALTIC, pc code page 775, mac encoding 29 (?) */ + +/* ======================================================================= */ + +/* ISO-8859-5 */ +/* Unix Standard for Cyrillic */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-5.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88595UNI_START 0xA0 +#define ISO88595UNI_END 0xFF +sal_uInt16 const aImplISO88595ToUniTab[ISO88595UNI_END - ISO88595UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, /* 0xA0 */ + 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, /* 0xA0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0xB0 */ + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0xB0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xC0 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xC0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xD0 */ + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xD0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xE0 */ + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, /* 0xE0 */ + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, /* 0xF0 */ + 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88595CHAR_START 0x0401 +#define ISO88595CHAR_END 0x045F +unsigned char const aImplISO88595ToCharTab[ISO88595CHAR_END - ISO88595CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0400 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0, 0xAE, 0xAF, /* 0x0400 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x0410 */ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x0410 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0420 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0420 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0430 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x0430 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0440 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0440 */ + 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0450 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0xFE, 0xFF, /* 0x0450 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88595TOCHARTABEX_COUNT 4 +ImplUniCharTabData const aImplISO88595ToCharTabEx[ISO88595TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A7, 0xFD, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x2116, 0xF0, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88595ByteCvtData = +{ + aImplISO88595ToUniTab, + aImpl8090SameToUniTab, + aImplISO88595ToCharTab, + aImpl8090SameToCharTab, + aImplISO88595ToCharTabEx, + ISO88595UNI_START, ISO88595UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO88595CHAR_START, ISO88595CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO88595TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88595TextEncodingData + = { { &aImplISO88595ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "iso-8859-5", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */ + +/* ======================================================================= */ + +/* ISO-8859-7 */ +/* Unix Standard for Greek */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-7.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88597UNI_START 0xA0 +#define ISO88597UNI_END 0xFF +sal_uInt16 const aImplISO88597ToUniTab[ISO88597UNI_END - ISO88597UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x2018, 0x2019, 0x00A3, 0, 0, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0, 0x00AB, 0x00AC, 0x00AD, 0, 0x2015, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, /* 0xB0 */ + 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, /* 0xB0 */ + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xC0 */ + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xC0 */ + 0x03A0, 0x03A1, 0, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, /* 0xD0 */ + 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, /* 0xD0 */ + 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xE0 */ + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xE0 */ + 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, /* 0xF0 */ + 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88597CHAR_START 0x0384 +#define ISO88597CHAR_END 0x03CE +unsigned char const aImplISO88597ToCharTab[ISO88597CHAR_END - ISO88597CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB4, 0xB5, 0xB6, 0, /* 0x0380 */ + 0xB8, 0xB9, 0xBA, 0, 0xBC, 0, 0xBE, 0xBF, /* 0x0380 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0390 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0390 */ + 0xD0, 0xD1, 0, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x03A0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x03A0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x03B0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x03B0 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x03C0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE /* 0x03C0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88597TOCHARTABEX_COUNT 19 +ImplUniCharTabData const aImplISO88597ToCharTabEx[ISO88597TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A8, 0xA8, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x2015, 0xAF, 0 }, + { 0x2018, 0xA1, 0 }, + { 0x2019, 0xA2, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88597ByteCvtData = +{ + aImplISO88597ToUniTab, + aImpl8090SameToUniTab, + aImplISO88597ToCharTab, + aImpl8090SameToCharTab, + aImplISO88597ToCharTabEx, + ISO88597UNI_START, ISO88597UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO88597CHAR_START, ISO88597CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO88597TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88597TextEncodingData + = { { &aImplISO88597ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-7", + "iso-8859-7", + 1, + 1, + 1, + 161, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_GREEK, pc code page 869, mac encoding 6 */ + +/* ======================================================================= */ + +/* ISO-8859-9 */ +/* Latin5 (Turkish) */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-9.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88599UNI_START 0xA0 +#define ISO88599UNI_END 0xFF +sal_uInt16 const aImplISO88599ToUniTab[ISO88599UNI_END - ISO88599UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88599CHAR_START 0x00A0 +#define ISO88599CHAR_END 0x00FF +unsigned char const aImplISO88599ToCharTab[ISO88599CHAR_END - ISO88599CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */ + 0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */ + 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO88599TOCHARTABEX_COUNT 6 +ImplUniCharTabData const aImplISO88599ToCharTabEx[ISO88599TOCHARTABEX_COUNT] = +{ + { 0x011E, 0xD0, 0 }, + { 0x011F, 0xF0, 0 }, + { 0x0130, 0xDD, 0 }, + { 0x0131, 0xFD, 0 }, + { 0x015E, 0xDE, 0 }, + { 0x015F, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88599ByteCvtData = +{ + aImplISO88599ToUniTab, + aImpl8090SameToUniTab, + aImplISO88599ToCharTab, + aImpl8090SameToCharTab, + aImplISO88599ToCharTabEx, + ISO88599UNI_START, ISO88599UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO88599CHAR_START, ISO88599CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO88599TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88599TextEncodingData + = { { &aImplISO88599ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-9", + "iso-8859-9", + 1, + 1, + 1, + 162, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_TURKISH, pc code page 857, mac encoding 35 */ + +/* ======================================================================= */ + +/* ISO-8859-10 */ +/* East European */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-10.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO885910UNI_START 0xA0 +#define ISO885910UNI_END 0xFF +sal_uInt16 const aImplISO885910ToUniTab[ISO885910UNI_END - ISO885910UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, /* 0xA0 */ + 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A, /* 0xA0 */ + 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, /* 0xB0 */ + 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B, /* 0xB0 */ + 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, /* 0xC0 */ + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, /* 0xD0 */ + 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */ + 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, /* 0xE0 */ + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169, /* 0xF0 */ + 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885910CHAR_START 0x00C1 +#define ISO885910CHAR_END 0x00FE +unsigned char const aImplISO885910ToCharTab[ISO885910CHAR_END - ISO885910CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0, /* 0x00C0 */ + 0, 0xC9, 0, 0xCB, 0, 0xCD, 0xCE, 0xCF, /* 0x00C0 */ + 0xD0, 0, 0, 0xD3, 0xD4, 0xD5, 0xD6, 0, /* 0x00D0 */ + 0xD8, 0, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x00D0 */ + 0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0, /* 0x00E0 */ + 0, 0xE9, 0, 0xEB, 0, 0xED, 0xEE, 0xEF, /* 0x00E0 */ + 0xF0, 0, 0, 0xF3, 0xF4, 0xF5, 0xF6, 0, /* 0x00F0 */ + 0xF8, 0, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885910TOCHARTABEX_COUNT 51 +ImplUniCharTabData const aImplISO885910ToCharTabEx[ISO885910TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x0100, 0xC0, 0 }, + { 0x0101, 0xE0, 0 }, + { 0x0104, 0xA1, 0 }, + { 0x0105, 0xB1, 0 }, + { 0x010C, 0xC8, 0 }, + { 0x010D, 0xE8, 0 }, + { 0x0110, 0xA9, 0 }, + { 0x0111, 0xB9, 0 }, + { 0x0112, 0xA2, 0 }, + { 0x0113, 0xB2, 0 }, + { 0x0116, 0xCC, 0 }, + { 0x0117, 0xEC, 0 }, + { 0x0118, 0xCA, 0 }, + { 0x0119, 0xEA, 0 }, + { 0x0122, 0xA3, 0 }, + { 0x0123, 0xB3, 0 }, + { 0x0128, 0xA5, 0 }, + { 0x0129, 0xB5, 0 }, + { 0x012A, 0xA4, 0 }, + { 0x012B, 0xB4, 0 }, + { 0x012E, 0xC7, 0 }, + { 0x012F, 0xE7, 0 }, + { 0x0136, 0xA6, 0 }, + { 0x0137, 0xB6, 0 }, + { 0x0138, 0xFF, 0 }, + { 0x013B, 0xA8, 0 }, + { 0x013C, 0xB8, 0 }, + { 0x0145, 0xD1, 0 }, + { 0x0146, 0xF1, 0 }, + { 0x014A, 0xAF, 0 }, + { 0x014B, 0xBF, 0 }, + { 0x014C, 0xD2, 0 }, + { 0x014D, 0xF2, 0 }, + { 0x0160, 0xAA, 0 }, + { 0x0161, 0xBA, 0 }, + { 0x0166, 0xAB, 0 }, + { 0x0167, 0xBB, 0 }, + { 0x0168, 0xD7, 0 }, + { 0x0169, 0xF7, 0 }, + { 0x016A, 0xAE, 0 }, + { 0x016B, 0xBE, 0 }, + { 0x0172, 0xD9, 0 }, + { 0x0173, 0xF9, 0 }, + { 0x017D, 0xAC, 0 }, + { 0x017E, 0xBC, 0 }, + { 0x2015, 0xBD, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO885910ByteCvtData = +{ + aImplISO885910ToUniTab, + aImpl8090SameToUniTab, + aImplISO885910ToCharTab, + aImpl8090SameToCharTab, + aImplISO885910ToCharTabEx, + ISO885910UNI_START, ISO885910UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO885910CHAR_START, ISO885910CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO885910TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO885910TextEncodingData + = { { &aImplISO885910ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-10", + "iso-8859-10", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */ + +/* ======================================================================= */ + +/* ISO-8859-13 */ +/* East European */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-13.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO885913UNI_START 0xA0 +#define ISO885913UNI_END 0xFF +sal_uInt16 const aImplISO885913ToUniTab[ISO885913UNI_END - ISO885913UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, /* 0xB0 */ + 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, /* 0xC0 */ + 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, /* 0xC0 */ + 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, /* 0xD0 */ + 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, /* 0xE0 */ + 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, /* 0xE0 */ + 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885913TOCHARTABEX_COUNT 96 +ImplUniCharTabData const aImplISO885913ToCharTabEx[ISO885913TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A2, 0xA2, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xA4, 0 }, + { 0x00A6, 0xA6, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xAB, 0 }, + { 0x00AC, 0xAC, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00B0, 0xB0, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0xB2, 0 }, + { 0x00B3, 0xB3, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x00B7, 0xB7, 0 }, + { 0x00B9, 0xB9, 0 }, + { 0x00BB, 0xBB, 0 }, + { 0x00BC, 0xBC, 0 }, + { 0x00BD, 0xBD, 0 }, + { 0x00BE, 0xBE, 0 }, + { 0x00C4, 0xC4, 0 }, + { 0x00C5, 0xC5, 0 }, + { 0x00C6, 0xAF, 0 }, + { 0x00C9, 0xC9, 0 }, + { 0x00D3, 0xD3, 0 }, + { 0x00D5, 0xD5, 0 }, + { 0x00D6, 0xD6, 0 }, + { 0x00D7, 0xD7, 0 }, + { 0x00D8, 0xA8, 0 }, + { 0x00DC, 0xDC, 0 }, + { 0x00DF, 0xDF, 0 }, + { 0x00E4, 0xE4, 0 }, + { 0x00E5, 0xE5, 0 }, + { 0x00E6, 0xBF, 0 }, + { 0x00E9, 0xE9, 0 }, + { 0x00F3, 0xF3, 0 }, + { 0x00F5, 0xF5, 0 }, + { 0x00F6, 0xF6, 0 }, + { 0x00F7, 0xF7, 0 }, + { 0x00F8, 0xB8, 0 }, + { 0x00FC, 0xFC, 0 }, + { 0x0100, 0xC2, 0 }, + { 0x0101, 0xE2, 0 }, + { 0x0104, 0xC0, 0 }, + { 0x0105, 0xE0, 0 }, + { 0x0106, 0xC3, 0 }, + { 0x0107, 0xE3, 0 }, + { 0x010C, 0xC8, 0 }, + { 0x010D, 0xE8, 0 }, + { 0x0112, 0xC7, 0 }, + { 0x0113, 0xE7, 0 }, + { 0x0116, 0xCB, 0 }, + { 0x0117, 0xEB, 0 }, + { 0x0118, 0xC6, 0 }, + { 0x0119, 0xE6, 0 }, + { 0x0122, 0xCC, 0 }, + { 0x0123, 0xEC, 0 }, + { 0x012A, 0xCE, 0 }, + { 0x012B, 0xEE, 0 }, + { 0x012E, 0xC1, 0 }, + { 0x012F, 0xE1, 0 }, + { 0x0136, 0xCD, 0 }, + { 0x0137, 0xED, 0 }, + { 0x013B, 0xCF, 0 }, + { 0x013C, 0xEF, 0 }, + { 0x0141, 0xD9, 0 }, + { 0x0142, 0xF9, 0 }, + { 0x0143, 0xD1, 0 }, + { 0x0144, 0xF1, 0 }, + { 0x0145, 0xD2, 0 }, + { 0x0146, 0xF2, 0 }, + { 0x014C, 0xD4, 0 }, + { 0x014D, 0xF4, 0 }, + { 0x0156, 0xAA, 0 }, + { 0x0157, 0xBA, 0 }, + { 0x015A, 0xDA, 0 }, + { 0x015B, 0xFA, 0 }, + { 0x0160, 0xD0, 0 }, + { 0x0161, 0xF0, 0 }, + { 0x016A, 0xDB, 0 }, + { 0x016B, 0xFB, 0 }, + { 0x0172, 0xD8, 0 }, + { 0x0173, 0xF8, 0 }, + { 0x0179, 0xCA, 0 }, + { 0x017A, 0xEA, 0 }, + { 0x017B, 0xDD, 0 }, + { 0x017C, 0xFD, 0 }, + { 0x017D, 0xDE, 0 }, + { 0x017E, 0xFE, 0 }, + { 0x2019, 0xFF, 0 }, + { 0x201C, 0xB4, 0 }, + { 0x201D, 0xA1, 0 }, + { 0x201E, 0xA5, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO885913ByteCvtData = +{ + aImplISO885913ToUniTab, + aImpl8090SameToUniTab, + aImpl8090SameToCharTab, + nullptr, + aImplISO885913ToCharTabEx, + ISO885913UNI_START, ISO885913UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + SAME8090CHAR_START, SAME8090CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + ISO885913TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO885913TextEncodingData + = { { &aImplISO885913ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-13", + "iso-8859-13", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */ + +/* ======================================================================= */ + +/* APPLE-CentEuro */ +/* Apple CharSet for Eastern Europa (Polish, Czech, Slovak, Hungarian, Estonian, Latvian, Lithuanian) */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/centeuro.txt from 02/05/98 */ +/* Last-Changes from us: */ + +#define APPLECENTEUROUNI_START 0x80 +#define APPLECENTEUROUNI_END 0xFF +sal_uInt16 const aImplAPPLECENTEUROToUniTab[APPLECENTEUROUNI_END - APPLECENTEUROUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x0100, 0x0101, 0x00C9, 0x0104, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */ + 0x0105, 0x010C, 0x00E4, 0x010D, 0x0106, 0x0107, 0x00E9, 0x0179, /* 0x80 */ + 0x017A, 0x010E, 0x00ED, 0x010F, 0x0112, 0x0113, 0x0116, 0x00F3, /* 0x90 */ + 0x0117, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x011A, 0x011B, 0x00FC, /* 0x90 */ + 0x2020, 0x00B0, 0x0118, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x0119, 0x00A8, 0x2260, 0x0123, 0x012E, /* 0xA0 */ + 0x012F, 0x012A, 0x2264, 0x2265, 0x012B, 0x0136, 0x2202, 0x2211, /* 0xB0 */ + 0x0142, 0x013B, 0x013C, 0x013D, 0x013E, 0x0139, 0x013A, 0x0145, /* 0xB0 */ + 0x0146, 0x0143, 0x00AC, 0x221A, 0x0144, 0x0147, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x0148, 0x0150, 0x00D5, 0x0151, 0x014C, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */ + 0x014D, 0x0154, 0x0155, 0x0158, 0x2039, 0x203A, 0x0159, 0x0156, /* 0xD0 */ + 0x0157, 0x0160, 0x201A, 0x201E, 0x0161, 0x015A, 0x015B, 0x00C1, /* 0xE0 */ + 0x0164, 0x0165, 0x00CD, 0x017D, 0x017E, 0x016A, 0x00D3, 0x00D4, /* 0xE0 */ + 0x016B, 0x016E, 0x00DA, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, /* 0xF0 */ + 0x00DD, 0x00FD, 0x0137, 0x017B, 0x0141, 0x017C, 0x0122, 0x02C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLECENTEUROTOCHARTABEX_COUNT 128 +ImplUniCharTabData const aImplAPPLECENTEUROToCharTabEx[APPLECENTEUROTOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xCA, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A7, 0xA4, 0 }, + { 0x00A8, 0xAC, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xC7, 0 }, + { 0x00AC, 0xC2, 0 }, + { 0x00AE, 0xA8, 0 }, + { 0x00B0, 0xA1, 0 }, + { 0x00B6, 0xA6, 0 }, + { 0x00BB, 0xC8, 0 }, + { 0x00C1, 0xE7, 0 }, + { 0x00C4, 0x80, 0 }, + { 0x00C9, 0x83, 0 }, + { 0x00CD, 0xEA, 0 }, + { 0x00D3, 0xEE, 0 }, + { 0x00D4, 0xEF, 0 }, + { 0x00D5, 0xCD, 0 }, + { 0x00D6, 0x85, 0 }, + { 0x00DA, 0xF2, 0 }, + { 0x00DC, 0x86, 0 }, + { 0x00DD, 0xF8, 0 }, + { 0x00DF, 0xA7, 0 }, + { 0x00E1, 0x87, 0 }, + { 0x00E4, 0x8A, 0 }, + { 0x00E9, 0x8E, 0 }, + { 0x00ED, 0x92, 0 }, + { 0x00F3, 0x97, 0 }, + { 0x00F4, 0x99, 0 }, + { 0x00F5, 0x9B, 0 }, + { 0x00F6, 0x9A, 0 }, + { 0x00F7, 0xD6, 0 }, + { 0x00FA, 0x9C, 0 }, + { 0x00FC, 0x9F, 0 }, + { 0x00FD, 0xF9, 0 }, + { 0x0100, 0x81, 0 }, + { 0x0101, 0x82, 0 }, + { 0x0104, 0x84, 0 }, + { 0x0105, 0x88, 0 }, + { 0x0106, 0x8C, 0 }, + { 0x0107, 0x8D, 0 }, + { 0x010C, 0x89, 0 }, + { 0x010D, 0x8B, 0 }, + { 0x010E, 0x91, 0 }, + { 0x010F, 0x93, 0 }, + { 0x0112, 0x94, 0 }, + { 0x0113, 0x95, 0 }, + { 0x0116, 0x96, 0 }, + { 0x0117, 0x98, 0 }, + { 0x0118, 0xA2, 0 }, + { 0x0119, 0xAB, 0 }, + { 0x011A, 0x9D, 0 }, + { 0x011B, 0x9E, 0 }, + { 0x0122, 0xFE, 0 }, + { 0x0123, 0xAE, 0 }, + { 0x012A, 0xB1, 0 }, + { 0x012B, 0xB4, 0 }, + { 0x012E, 0xAF, 0 }, + { 0x012F, 0xB0, 0 }, + { 0x0136, 0xB5, 0 }, + { 0x0137, 0xFA, 0 }, + { 0x0139, 0xBD, 0 }, + { 0x013A, 0xBE, 0 }, + { 0x013B, 0xB9, 0 }, + { 0x013C, 0xBA, 0 }, + { 0x013D, 0xBB, 0 }, + { 0x013E, 0xBC, 0 }, + { 0x0141, 0xFC, 0 }, + { 0x0142, 0xB8, 0 }, + { 0x0143, 0xC1, 0 }, + { 0x0144, 0xC4, 0 }, + { 0x0145, 0xBF, 0 }, + { 0x0146, 0xC0, 0 }, + { 0x0147, 0xC5, 0 }, + { 0x0148, 0xCB, 0 }, + { 0x014C, 0xCF, 0 }, + { 0x014D, 0xD8, 0 }, + { 0x0150, 0xCC, 0 }, + { 0x0151, 0xCE, 0 }, + { 0x0154, 0xD9, 0 }, + { 0x0155, 0xDA, 0 }, + { 0x0156, 0xDF, 0 }, + { 0x0157, 0xE0, 0 }, + { 0x0158, 0xDB, 0 }, + { 0x0159, 0xDE, 0 }, + { 0x015A, 0xE5, 0 }, + { 0x015B, 0xE6, 0 }, + { 0x0160, 0xE1, 0 }, + { 0x0161, 0xE4, 0 }, + { 0x0164, 0xE8, 0 }, + { 0x0165, 0xE9, 0 }, + { 0x016A, 0xED, 0 }, + { 0x016B, 0xF0, 0 }, + { 0x016E, 0xF1, 0 }, + { 0x016F, 0xF3, 0 }, + { 0x0170, 0xF4, 0 }, + { 0x0171, 0xF5, 0 }, + { 0x0172, 0xF6, 0 }, + { 0x0173, 0xF7, 0 }, + { 0x0179, 0x8F, 0 }, + { 0x017A, 0x90, 0 }, + { 0x017B, 0xFB, 0 }, + { 0x017C, 0xFD, 0 }, + { 0x017D, 0xEB, 0 }, + { 0x017E, 0xEC, 0 }, + { 0x02C7, 0xFF, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201A, 0xE2, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xE3, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2039, 0xDC, 0 }, + { 0x203A, 0xDD, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x2211, 0xB7, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0x25CA, 0xD7, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLECENTEUROByteCvtData = +{ + aImplAPPLECENTEUROToUniTab, + nullptr, + nullptr, + nullptr, + aImplAPPLECENTEUROToCharTabEx, + APPLECENTEUROUNI_START, APPLECENTEUROUNI_END, + NOTABUNI_START, NOTABUNI_END, + NOTABCHAR_START, NOTABCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLECENTEUROTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLECENTEUROTextEncodingData + = { { &aImplAPPLECENTEUROByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-2", + "iso-8859-2", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 29 */ + +/* ======================================================================= */ + +/* APPLE-Croatian */ +/* Standard Apple CharSet for Croatian */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/croatien.txt from 02/05/98 */ +/* Last-Changes from us: */ + +#define APPLECROATIANUNI_START 0x80 +#define APPLECROATIANUNI_END 0xFF +sal_uInt16 const aImplAPPLECROATIANToUniTab[APPLECROATIANUNI_END - APPLECROATIANUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */ + 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */ + 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */ + 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */ + 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */ + 0x00AE, 0x0160, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x017D, 0x00D8, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x2206, 0x00B5, 0x2202, 0x2211, /* 0xB0 */ + 0x220F, 0x0161, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x017E, 0x00F8, /* 0xB0 */ + 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x0106, 0x00AB, /* 0xC0 */ + 0x010C, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */ + 0x0110, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */ + 0xF8FF, 0x00A9, 0x2044, 0x00A4, 0x2039, 0x203A, 0x00C6, 0x00BB, /* 0xD0 */ + 0x2013, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x0107, 0x00C1, /* 0xE0 */ + 0x010D, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */ + 0x0111, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */ + 0x00AF, 0x03C0, 0x00CB, 0x02DA, 0x00B8, 0x00CA, 0x00E6, 0x02C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLECROATIANCHAR_START 0x00A0 +#define APPLECROATIANCHAR_END 0x00FC +unsigned char const aImplAPPLECROATIANToCharTab[APPLECROATIANCHAR_END - APPLECROATIANCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0, 0, 0xA4, /* 0x00A0 */ + 0xAC, 0xD9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */ + 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */ + 0xFC, 0, 0xBC, 0xDF, 0, 0, 0, 0xC0, /* 0x00B0 */ + 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xDE, 0x82, /* 0x00C0 */ + 0xE9, 0x83, 0xFD, 0xFA, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */ + 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */ + 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */ + 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xFE, 0x8D, /* 0x00E0 */ + 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */ + 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */ + 0xBF, 0x9D, 0x9C, 0x9E, 0x9F /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLECROATIANTOCHARTABEX_COUNT 49 +ImplUniCharTabData const aImplAPPLECROATIANToCharTabEx[APPLECROATIANTOCHARTABEX_COUNT] = +{ + { 0x0106, 0xC6, 0 }, + { 0x0107, 0xE6, 0 }, + { 0x010C, 0xC8, 0 }, + { 0x010D, 0xE8, 0 }, + { 0x0110, 0xD0, 0 }, + { 0x0111, 0xF0, 0 }, + { 0x0131, 0xF5, 0 }, + { 0x0152, 0xCE, 0 }, + { 0x0153, 0xCF, 0 }, + { 0x0160, 0xA9, 0 }, + { 0x0161, 0xB9, 0 }, + { 0x017D, 0xAE, 0 }, + { 0x017E, 0xBE, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x02C6, 0xF6, 0 }, + { 0x02C7, 0xFF, 0 }, + { 0x02DA, 0xFB, 0 }, + { 0x02DC, 0xF7, 0 }, + { 0x03A9, 0xBD, 0 }, + { 0x03C0, 0xF9, 0 }, + { 0x2013, 0xE0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201A, 0xE2, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xE3, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2030, 0xE4, 0 }, + { 0x2039, 0xDC, 0 }, + { 0x203A, 0xDD, 0 }, + { 0x2044, 0xDA, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xB4, 0 }, + { 0x220F, 0xB8, 0 }, + { 0x2211, 0xB7, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x222B, 0xBA, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0x25CA, 0xD7, 0 }, + { 0xF8FF, 0xD8, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLECROATIANByteCvtData = +{ + aImplAPPLECROATIANToUniTab, + nullptr, + aImplAPPLECROATIANToCharTab, + nullptr, + aImplAPPLECROATIANToCharTabEx, + APPLECROATIANUNI_START, APPLECROATIANUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLECROATIANCHAR_START, APPLECROATIANCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLECROATIANTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLECROATIANTextEncodingData + = { { &aImplAPPLECROATIANByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-2", + "iso-8859-2", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 36 */ + +/* ======================================================================= */ + +/* APPLE-Cyrillic */ +/* Apple CharSet for Cyrillic */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/cyrillic.txt from 02/15/98 */ +/* Last-Changes from us: */ + +#define APPLECYRILLICUNI_START 0x80 +#define APPLECYRILLICUNI_END 0xFF +sal_uInt16 const aImplAPPLECYRILLICToUniTab[APPLECYRILLICUNI_END - APPLECYRILLICUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0x80 */ + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0x80 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0x90 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0x90 */ + 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x0406, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x0456, 0x00B5, 0x2202, 0x0408, /* 0xB0 */ + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040A, 0x045A, /* 0xB0 */ + 0x0458, 0x0405, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x040B, 0x045B, 0x040C, 0x045C, 0x0455, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x201E, /* 0xD0 */ + 0x040E, 0x045E, 0x040F, 0x045F, 0x2116, 0x0401, 0x0451, 0x044F, /* 0xD0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */ + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */ + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x00A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLECYRILLICCHAR_START 0x0401 +#define APPLECYRILLICCHAR_END 0x045F +unsigned char const aImplAPPLECYRILLICToCharTab[APPLECYRILLICCHAR_END - APPLECYRILLICCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDD, 0xAB, 0xAE, 0xB8, 0xC1, 0xA7, 0xBA, /* 0x0400 */ + 0xB7, 0xBC, 0xBE, 0xCB, 0xCD, 0, 0xD8, 0xDA, /* 0x0400 */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0410 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x0410 */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0420 */ + 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, /* 0x0420 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0430 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0430 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0440 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, /* 0x0440 */ + 0, 0xDE, 0xAC, 0xAF, 0xB9, 0xCF, 0xB4, 0xBB, /* 0x0450 */ + 0xC0, 0xBD, 0xBF, 0xCC, 0xCE, 0, 0xD9, 0xDB, /* 0x0450 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLECYRILLICTOCHARTABEX_COUNT 36 +ImplUniCharTabData const aImplAPPLECYRILLICToCharTabEx[APPLECYRILLICTOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xCA, 0 }, + { 0x00A2, 0xA2, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xFF, 0 }, + { 0x00A7, 0xA4, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xC7, 0 }, + { 0x00AC, 0xC2, 0 }, + { 0x00AE, 0xA8, 0 }, + { 0x00B0, 0xA1, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xA6, 0 }, + { 0x00BB, 0xC8, 0 }, + { 0x00F7, 0xD6, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xD7, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2116, 0xDC, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLECYRILLICByteCvtData = +{ + aImplAPPLECYRILLICToUniTab, + nullptr, + aImplAPPLECYRILLICToCharTab, + nullptr, + aImplAPPLECYRILLICToCharTabEx, + APPLECYRILLICUNI_START, APPLECYRILLICUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLECYRILLICCHAR_START, APPLECYRILLICCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLECYRILLICTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLECYRILLICTextEncodingData + = { { &aImplAPPLECYRILLICByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "iso-8859-5", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */ + +/* ======================================================================= */ + +/* APPLE-Greek */ +/* Apple CharSet for Greek */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/roman.txt from 08/18/98 */ +/* Last-Changes from us: */ + +#define APPLEGREEKUNI_START 0x80 +#define APPLEGREEKUNI_END 0xFF +sal_uInt16 const aImplAPPLEGREEKToUniTab[APPLEGREEKUNI_END - APPLEGREEKUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x00B9, 0x00B2, 0x00C9, 0x00B3, 0x00D6, 0x00DC, 0x0385, /* 0x80 */ + 0x00E0, 0x00E2, 0x00E4, 0x0384, 0x00A8, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */ + 0x00EA, 0x00EB, 0x00A3, 0x2122, 0x00EE, 0x00EF, 0x2022, 0x00BD, /* 0x90 */ + 0x2030, 0x00F4, 0x00F6, 0x00A6, 0x00AD, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */ + 0x2020, 0x0393, 0x0394, 0x0398, 0x039B, 0x039E, 0x03A0, 0x00DF, /* 0xA0 */ + 0x00AE, 0x00A9, 0x03A3, 0x03AA, 0x00A7, 0x2260, 0x00B0, 0x00B7, /* 0xA0 */ + 0x0391, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x0392, 0x0395, 0x0396, /* 0xB0 */ + 0x0397, 0x0399, 0x039A, 0x039C, 0x03A6, 0x03AB, 0x03A8, 0x03A9, /* 0xB0 */ + 0x03AC, 0x039D, 0x00AC, 0x039F, 0x03A1, 0x2248, 0x03A4, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x03A5, 0x03A7, 0x0386, 0x0388, 0x0153, /* 0xC0 */ + 0x2013, 0x2015, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x0389, /* 0xD0 */ + 0x038A, 0x038C, 0x038E, 0x03AD, 0x03AE, 0x03AF, 0x03CC, 0x038F, /* 0xD0 */ + 0x03CD, 0x03B1, 0x03B2, 0x03C8, 0x03B4, 0x03B5, 0x03C6, 0x03B3, /* 0xE0 */ + 0x03B7, 0x03B9, 0x03BE, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BF, /* 0xE0 */ + 0x03C0, 0x03CE, 0x03C1, 0x03C3, 0x03C4, 0x03B8, 0x03C9, 0x03C2, /* 0xF0 */ + 0x03C7, 0x03C5, 0x03B6, 0x03CA, 0x03CB, 0x0390, 0x03B0, 0xF8A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEGREEKCHAR_START 0x0384 +#define APPLEGREEKCHAR_END 0x03CE +unsigned char const aImplAPPLEGREEKToCharTab[APPLEGREEKCHAR_END - APPLEGREEKCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B, 0x87, 0xCD, 0, /* 0x0380 */ + 0xCE, 0xD7, 0xD8, 0, 0xD9, 0, 0xDA, 0xDF, /* 0x0380 */ + 0xFD, 0xB0, 0xB5, 0xA1, 0xA2, 0xB6, 0xB7, 0xB8, /* 0x0390 */ + 0xA3, 0xB9, 0xBA, 0xA4, 0xBB, 0xC1, 0xA5, 0xC3, /* 0x0390 */ + 0xA6, 0xC4, 0, 0xAA, 0xC6, 0xCB, 0xBC, 0xCC, /* 0x03A0 */ + 0xBE, 0xBF, 0xAB, 0xBD, 0xC0, 0xDB, 0xDC, 0xDD, /* 0x03A0 */ + 0xFE, 0xE1, 0xE2, 0xE7, 0xE4, 0xE5, 0xFA, 0xE8, /* 0x03B0 */ + 0xF5, 0xE9, 0xEB, 0xEC, 0xED, 0xEE, 0xEA, 0xEF, /* 0x03B0 */ + 0xF0, 0xF2, 0xF7, 0xF3, 0xF4, 0xF9, 0xE6, 0xF8, /* 0x03C0 */ + 0xE3, 0xF6, 0xFB, 0xFC, 0xDE, 0xE0, 0xF1 /* 0x03C0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEGREEKTOCHARTABEX_COUNT 57 +ImplUniCharTabData const aImplAPPLEGREEKToCharTabEx[APPLEGREEKTOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xCA, 0 }, + { 0x00A3, 0x92, 0 }, + { 0x00A5, 0xB4, 0 }, + { 0x00A6, 0x9B, 0 }, + { 0x00A7, 0xAC, 0 }, + { 0x00A8, 0x8C, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xC7, 0 }, + { 0x00AC, 0xC2, 0 }, + { 0x00AD, 0x9C, 0 }, + { 0x00AE, 0xA8, 0 }, + { 0x00B0, 0xAE, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B2, 0x82, 0 }, + { 0x00B3, 0x84, 0 }, + { 0x00B7, 0xAF, 0 }, + { 0x00B9, 0x81, 0 }, + { 0x00BB, 0xC8, 0 }, + { 0x00BD, 0x97, 0 }, + { 0x00C4, 0x80, 0 }, + { 0x00C9, 0x83, 0 }, + { 0x00D6, 0x85, 0 }, + { 0x00DC, 0x86, 0 }, + { 0x00DF, 0xA7, 0 }, + { 0x00E0, 0x88, 0 }, + { 0x00E2, 0x89, 0 }, + { 0x00E4, 0x8A, 0 }, + { 0x00E7, 0x8D, 0 }, + { 0x00E8, 0x8F, 0 }, + { 0x00E9, 0x8E, 0 }, + { 0x00EA, 0x90, 0 }, + { 0x00EB, 0x91, 0 }, + { 0x00EE, 0x94, 0 }, + { 0x00EF, 0x95, 0 }, + { 0x00F4, 0x99, 0 }, + { 0x00F6, 0x9A, 0 }, + { 0x00F7, 0xD6, 0 }, + { 0x00F9, 0x9D, 0 }, + { 0x00FB, 0x9E, 0 }, + { 0x00FC, 0x9F, 0 }, + { 0x0153, 0xCF, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2015, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2022, 0x96, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2030, 0x98, 0 }, + { 0x2122, 0x93, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0xF8A0, 0xFF, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLEGREEKByteCvtData = +{ + aImplAPPLEGREEKToUniTab, + nullptr, + aImplAPPLEGREEKToCharTab, + nullptr, + aImplAPPLEGREEKToCharTabEx, + APPLEGREEKUNI_START, APPLEGREEKUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLEGREEKCHAR_START, APPLEGREEKCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLEGREEKTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLEGREEKTextEncodingData + = { { &aImplAPPLEGREEKByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-7", + "iso-8859-7", + 1, + 1, + 1, + 161, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_GREEK, pc code page 869, mac encoding 6 */ + +/* ======================================================================= */ + +/* APPLE-Romanian */ +/* Standard Apple CharSet for Romanian */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/romanian.txt from 02/05/98 */ +/* Last-Changes from us: */ +/* 0xAF --> 0x015E (like Java), Apple Definition: 0x0053+0x0326 # LATIN CAPITAL LETTER S + COMBINING COMMA BELOW */ +/* 0xBF --> 0x015F (like Java), Apple Definition: 0x0073+0x0326 # LATIN SMALL LETTER S + COMBINING COMMA BELOW */ +/* 0xDE --> 0x0162 (like Java), Apple Definition: 0x0054+0x0326 # LATIN CAPITAL LETTER T + COMBINING COMMA BELOW */ +/* 0xDF --> 0x0163 (like Java), Apple Definition: 0x0074+0x0326 # LATIN SMALL LETTER T + COMBINING COMMA BELOW */ + +#define APPLEROMANIANUNI_START 0x80 +#define APPLEROMANIANUNI_END 0xFF +sal_uInt16 const aImplAPPLEROMANIANToUniTab[APPLEROMANIANUNI_END - APPLEROMANIANUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */ + 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */ + 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */ + 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */ + 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x0102, 0x015E, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */ + 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x0103, 0x015F, /* 0xB0 */ + 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */ + 0x00FF, 0x0178, 0x2044, 0x00A4, 0x2039, 0x203A, 0x0162, 0x0163, /* 0xD0 */ + 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */ + 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */ + 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */ + 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEROMANIANCHAR_START 0x00A0 +#define APPLEROMANIANCHAR_END 0x00FF +unsigned char const aImplAPPLEROMANIANToCharTab[APPLEROMANIANCHAR_END - APPLEROMANIANCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0xB4, 0, 0xA4, /* 0x00A0 */ + 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */ + 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */ + 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */ + 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0, 0x82, /* 0x00C0 */ + 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */ + 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */ + 0, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */ + 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0, 0x8D, /* 0x00E0 */ + 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */ + 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */ + 0, 0x9D, 0x9C, 0x9E, 0x9F, 0, 0, 0xD8 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEROMANIANTOCHARTABEX_COUNT 51 +ImplUniCharTabData const aImplAPPLEROMANIANToCharTabEx[APPLEROMANIANTOCHARTABEX_COUNT] = +{ + { 0x0102, 0xAE, 0 }, + { 0x0103, 0xBE, 0 }, + { 0x0131, 0xF5, 0 }, + { 0x0152, 0xCE, 0 }, + { 0x0153, 0xCF, 0 }, + { 0x015E, 0xAF, 0 }, + { 0x015F, 0xBF, 0 }, + { 0x0162, 0xDE, 0 }, + { 0x0163, 0xDF, 0 }, + { 0x0178, 0xD9, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x02C6, 0xF6, 0 }, + { 0x02C7, 0xFF, 0 }, + { 0x02D8, 0xF9, 0 }, + { 0x02D9, 0xFA, 0 }, + { 0x02DA, 0xFB, 0 }, + { 0x02DB, 0xFE, 0 }, + { 0x02DC, 0xF7, 0 }, + { 0x02DD, 0xFD, 0 }, + { 0x03A9, 0xBD, 0 }, + { 0x03C0, 0xB9, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201A, 0xE2, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xE3, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2021, 0xE0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2030, 0xE4, 0 }, + { 0x2039, 0xDC, 0 }, + { 0x203A, 0xDD, 0 }, + { 0x2044, 0xDA, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x220F, 0xB8, 0 }, + { 0x2211, 0xB7, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x222B, 0xBA, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0x25CA, 0xD7, 0 }, + { 0xF8FF, 0xF0, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLEROMANIANByteCvtData = +{ + aImplAPPLEROMANIANToUniTab, + nullptr, + aImplAPPLEROMANIANToCharTab, + nullptr, + aImplAPPLEROMANIANToCharTabEx, + APPLEROMANIANUNI_START, APPLEROMANIANUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLEROMANIANCHAR_START, APPLEROMANIANCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLEROMANIANTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLEROMANIANTextEncodingData + = { { &aImplAPPLEROMANIANByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-2", + "iso-8859-2", + 1, + 1, + 1, + 238, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_EASTEUROPE, pc code page 852, mac encoding 38 */ + +/* ======================================================================= */ + +/* APPLE-Turkish */ +/* Apple CharSet for Turkish */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/turkish.txt from 02/05/98 */ +/* Last-Changes from us: */ + +#define APPLETURKISHUNI_START 0x80 +#define APPLETURKISHUNI_END 0xFF +sal_uInt16 const aImplAPPLETURKISHToUniTab[APPLETURKISHUNI_END - APPLETURKISHUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */ + 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */ + 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */ + 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */ + 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */ + 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, /* 0xB0 */ + 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */ + 0x00FF, 0x0178, 0x011E, 0x011F, 0x0130, 0x0131, 0x015E, 0x015F, /* 0xD0 */ + 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */ + 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */ + 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0xF8A0, 0x02C6, 0x02DC, /* 0xF0 */ + 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLETURKISHCHAR_START 0x00A0 +#define APPLETURKISHCHAR_END 0x00FF +unsigned char const aImplAPPLETURKISHToCharTab[APPLETURKISHCHAR_END - APPLETURKISHCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA, 0xC1, 0xA2, 0xA3, 0, 0xB4, 0, 0xA4, /* 0x00A0 */ + 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */ + 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */ + 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */ + 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82, /* 0x00C0 */ + 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */ + 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */ + 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */ + 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D, /* 0x00E0 */ + 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */ + 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */ + 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0, 0, 0xD8 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLETURKISHTOCHARTABEX_COUNT 48 +ImplUniCharTabData const aImplAPPLETURKISHToCharTabEx[APPLETURKISHTOCHARTABEX_COUNT] = +{ + { 0x011E, 0xDA, 0 }, + { 0x011F, 0xDB, 0 }, + { 0x0130, 0xDC, 0 }, + { 0x0131, 0xDD, 0 }, + { 0x0152, 0xCE, 0 }, + { 0x0153, 0xCF, 0 }, + { 0x015E, 0xDE, 0 }, + { 0x015F, 0xDF, 0 }, + { 0x0178, 0xD9, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x02C6, 0xF6, 0 }, + { 0x02C7, 0xFF, 0 }, + { 0x02D8, 0xF9, 0 }, + { 0x02D9, 0xFA, 0 }, + { 0x02DA, 0xFB, 0 }, + { 0x02DB, 0xFE, 0 }, + { 0x02DC, 0xF7, 0 }, + { 0x02DD, 0xFD, 0 }, + { 0x03A9, 0xBD, 0 }, + { 0x03C0, 0xB9, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201A, 0xE2, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xE3, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2021, 0xE0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2030, 0xE4, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x220F, 0xB8, 0 }, + { 0x2211, 0xB7, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x222B, 0xBA, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0x25CA, 0xD7, 0 }, + { 0xF8A0, 0xF5, 0 }, + { 0xF8FF, 0xF0, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLETURKISHByteCvtData = +{ + aImplAPPLETURKISHToUniTab, + nullptr, + aImplAPPLETURKISHToCharTab, + nullptr, + aImplAPPLETURKISHToCharTabEx, + APPLETURKISHUNI_START, APPLETURKISHUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLETURKISHCHAR_START, APPLETURKISHCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLETURKISHTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLETURKISHTextEncodingData + = { { &aImplAPPLETURKISHByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-9", + "iso-8859-9", + 1, + 1, + 1, + 162, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_TURKISH, pc code page 857, mac encoding 35 */ + +/* ======================================================================= */ + +/* APPLE-Ukrainian */ +/* Apple CharSet for Ukrainian */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/ukraine.txt from 02/05/98 */ +/* Last-Changes from us: */ + +#define APPLEUKRAINIANUNI_START 0x80 +#define APPLEUKRAINIANUNI_END 0xFF +sal_uInt16 const aImplAPPLEUKRAINIANToUniTab[APPLEUKRAINIANUNI_END - APPLEUKRAINIANUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0x80 */ + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0x80 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0x90 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0x90 */ + 0x2020, 0x00B0, 0x0490, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x0406, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x0456, 0x00B5, 0x0491, 0x0408, /* 0xB0 */ + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040A, 0x045A, /* 0xB0 */ + 0x0458, 0x0405, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x040B, 0x045B, 0x040C, 0x045C, 0x0455, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x201E, /* 0xD0 */ + 0x040E, 0x045E, 0x040F, 0x045F, 0x2116, 0x0401, 0x0451, 0x044F, /* 0xD0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */ + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */ + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x00A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEUKRAINIANCHAR_START 0x0401 +#define APPLEUKRAINIANCHAR_END 0x045F +unsigned char const aImplAPPLEUKRAINIANToCharTab[APPLEUKRAINIANCHAR_END - APPLEUKRAINIANCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDD, 0xAB, 0xAE, 0xB8, 0xC1, 0xA7, 0xBA, /* 0x0400 */ + 0xB7, 0xBC, 0xBE, 0xCB, 0xCD, 0, 0xD8, 0xDA, /* 0x0400 */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0410 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, /* 0x0410 */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0420 */ + 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, /* 0x0420 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0430 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0430 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0440 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, /* 0x0440 */ + 0, 0xDE, 0xAC, 0xAF, 0xB9, 0xCF, 0xB4, 0xBB, /* 0x0450 */ + 0xC0, 0xBD, 0xBF, 0xCC, 0xCE, 0, 0xD9, 0xDB, /* 0x0450 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEUKRAINIANTOCHARTABEX_COUNT 36 +ImplUniCharTabData const aImplAPPLEUKRAINIANToCharTabEx[APPLEUKRAINIANTOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xCA, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A4, 0xFF, 0 }, + { 0x00A7, 0xA4, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AB, 0xC7, 0 }, + { 0x00AC, 0xC2, 0 }, + { 0x00AE, 0xA8, 0 }, + { 0x00B0, 0xA1, 0 }, + { 0x00B1, 0xB1, 0 }, + { 0x00B5, 0xB5, 0 }, + { 0x00B6, 0xA6, 0 }, + { 0x00BB, 0xC8, 0 }, + { 0x00F7, 0xD6, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x0490, 0xA2, 0 }, + { 0x0491, 0xB6, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xD7, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2116, 0xDC, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLEUKRAINIANByteCvtData = +{ + aImplAPPLEUKRAINIANToUniTab, + nullptr, + aImplAPPLEUKRAINIANToCharTab, + nullptr, + aImplAPPLEUKRAINIANToCharTabEx, + APPLEUKRAINIANUNI_START, APPLEUKRAINIANUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLEUKRAINIANCHAR_START, APPLEUKRAINIANCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLEUKRAINIANTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLEUKRAINIANTextEncodingData + = { { &aImplAPPLEUKRAINIANByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "iso-8859-5", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 0x98 + (MAC 8.5 and above) */ + +/* ======================================================================= */ + +/* KOI8_R */ +/* Standard Charset for Cyrillic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: typed per hand */ +/* Last-Changes from us: */ + +#define KOI8RUNI_START 0x80 +#define KOI8RUNI_END 0xFF +sal_uInt16 const aImplKOI8RToUniTab[KOI8RUNI_END - KOI8RUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, /* 0x80 */ + 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, /* 0x80 */ + 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, /* 0x90 */ + 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, /* 0x90 */ + 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, /* 0xA0 */ + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, /* 0xA0 */ + 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, /* 0xB0 */ + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, /* 0xB0 */ + 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0xC0 */ + 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, /* 0xC0 */ + 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0xD0 */ + 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, /* 0xD0 */ + 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0xE0 */ + 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, /* 0xE0 */ + 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0xF0 */ + 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define KOI8RCHAR_START 0x0410 +#define KOI8RCHAR_END 0x044F +unsigned char const aImplKOI8RToCharTab[KOI8RCHAR_END - KOI8RCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA, /* 0x0410 */ + 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, /* 0x0410 */ + 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE, /* 0x0420 */ + 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1, /* 0x0420 */ + 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA, /* 0x0430 */ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, /* 0x0430 */ + 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE, /* 0x0440 */ + 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1 /* 0x0440 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define KOI8RTOCHARTABEX_COUNT 64 +ImplUniCharTabData const aImplKOI8RToCharTabEx[KOI8RTOCHARTABEX_COUNT] = +{ + { 0x00A0, 0x9A, 0 }, + { 0x00A9, 0xBF, 0 }, + { 0x00B0, 0x9C, 0 }, + { 0x00B2, 0x9D, 0 }, + { 0x00B7, 0x9E, 0 }, + { 0x00F7, 0x9F, 0 }, + { 0x0401, 0xB3, 0 }, + { 0x0451, 0xA3, 0 }, + { 0x2219, 0x95, 0 }, + { 0x221A, 0x96, 0 }, + { 0x2248, 0x97, 0 }, + { 0x2264, 0x98, 0 }, + { 0x2265, 0x99, 0 }, + { 0x2320, 0x93, 0 }, + { 0x2321, 0x9B, 0 }, + { 0x2500, 0x80, 0 }, + { 0x2502, 0x81, 0 }, + { 0x250C, 0x82, 0 }, + { 0x2510, 0x83, 0 }, + { 0x2514, 0x84, 0 }, + { 0x2518, 0x85, 0 }, + { 0x251C, 0x86, 0 }, + { 0x2524, 0x87, 0 }, + { 0x252C, 0x88, 0 }, + { 0x2534, 0x89, 0 }, + { 0x253C, 0x8A, 0 }, + { 0x2550, 0xA0, 0 }, + { 0x2551, 0xA1, 0 }, + { 0x2552, 0xA2, 0 }, + { 0x2553, 0xA4, 0 }, + { 0x2554, 0xA5, 0 }, + { 0x2555, 0xA6, 0 }, + { 0x2556, 0xA7, 0 }, + { 0x2557, 0xA8, 0 }, + { 0x2558, 0xA9, 0 }, + { 0x2559, 0xAA, 0 }, + { 0x255A, 0xAB, 0 }, + { 0x255B, 0xAC, 0 }, + { 0x255C, 0xAD, 0 }, + { 0x255D, 0xAE, 0 }, + { 0x255E, 0xAF, 0 }, + { 0x255F, 0xB0, 0 }, + { 0x2560, 0xB1, 0 }, + { 0x2561, 0xB2, 0 }, + { 0x2562, 0xB4, 0 }, + { 0x2563, 0xB5, 0 }, + { 0x2564, 0xB6, 0 }, + { 0x2565, 0xB7, 0 }, + { 0x2566, 0xB8, 0 }, + { 0x2567, 0xB9, 0 }, + { 0x2568, 0xBA, 0 }, + { 0x2569, 0xBB, 0 }, + { 0x256A, 0xBC, 0 }, + { 0x256B, 0xBD, 0 }, + { 0x256C, 0xBE, 0 }, + { 0x2580, 0x8B, 0 }, + { 0x2584, 0x8C, 0 }, + { 0x2588, 0x8D, 0 }, + { 0x258C, 0x8E, 0 }, + { 0x2590, 0x8F, 0 }, + { 0x2591, 0x90, 0 }, + { 0x2592, 0x91, 0 }, + { 0x2593, 0x92, 0 }, + { 0x25A0, 0x94, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplKOI8RByteCvtData = +{ + aImplKOI8RToUniTab, + nullptr, + aImplKOI8RToCharTab, + nullptr, + aImplKOI8RToCharTabEx, + KOI8RUNI_START, KOI8RUNI_END, + NOTABUNI_START, NOTABUNI_END, + KOI8RCHAR_START, KOI8RCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + KOI8RTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplKOI8RTextEncodingData + = { { &aImplKOI8RByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "koi8-r", + "koi8-r", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CYRILLIC, pc code page 866 (855?), mac encoding 7 */ + +/* ======================================================================= */ + +/* KOI8_U */ +/* Standard Charset for Ukrainian Cyrillic */ +/* Single Byte, 0x00-0x7F equals ASCII */ +/* Conversion Tables: hand made */ + +#define KOI8UUNI_START 0x80 +#define KOI8UUNI_END 0xFF +sal_uInt16 const aImplKOI8UToUniTab[KOI8UUNI_END - KOI8UUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, /* 0x80 */ + 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, /* 0x80 */ + 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, /* 0x90 */ + 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, /* 0x90 */ + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, /* 0xA0 */ + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E, /* 0xA0 */ + 0x255F, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, /* 0xB0 */ + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 0x256C, 0x00A9, /* 0xB0 */ + 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0xC0 */ + 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, /* 0xC0 */ + 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0xD0 */ + 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, /* 0xD0 */ + 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0xE0 */ + 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, /* 0xE0 */ + 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0xF0 */ + 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A /* 0xF0 */ +}; + +#define KOI8UCHAR_START 0x0410 +#define KOI8UCHAR_END 0x044F +unsigned char const +aImplKOI8UToCharTab[KOI8UCHAR_END - KOI8UCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1, 0xE2, 0xF7, 0xE7, 0xE4, 0xE5, 0xF6, 0xFA, /* 0x0410 */ + 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, /* 0x0410 */ + 0xF2, 0xF3, 0xF4, 0xF5, 0xE6, 0xE8, 0xE3, 0xFE, /* 0x0420 */ + 0xFB, 0xFD, 0xFF, 0xF9, 0xF8, 0xFC, 0xE0, 0xF1, /* 0x0420 */ + 0xC1, 0xC2, 0xD7, 0xC7, 0xC4, 0xC5, 0xD6, 0xDA, /* 0x0430 */ + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, /* 0x0430 */ + 0xD2, 0xD3, 0xD4, 0xD5, 0xC6, 0xC8, 0xC3, 0xDE, /* 0x0440 */ + 0xDB, 0xDD, 0xDF, 0xD9, 0xD8, 0xDC, 0xC0, 0xD1 /* 0x0440 */ +}; + +#define KOI8UTOCHARTABEX_COUNT 72 +ImplUniCharTabData const aImplKOI8UToCharTabEx[KOI8UTOCHARTABEX_COUNT] = +{ + { 0x00A0, 0x9A, 0 }, + { 0x00A9, 0xBF, 0 }, + { 0x00B0, 0x9C, 0 }, + { 0x00B2, 0x9D, 0 }, + { 0x00B7, 0x9E, 0 }, + { 0x00F7, 0x9F, 0 }, + { 0x0401, 0xB3, 0 }, + { 0x0404, 0xB4, 0 }, + { 0x0406, 0xB6, 0 }, + { 0x0407, 0xB7, 0 }, + { 0x0451, 0xA3, 0 }, + { 0x0454, 0xA4, 0 }, + { 0x0456, 0xA6, 0 }, + { 0x0457, 0xA7, 0 }, + { 0x0490, 0xBD, 0 }, + { 0x0491, 0xAD, 0 }, + { 0x2219, 0x95, 0 }, + { 0x221A, 0x96, 0 }, + { 0x2248, 0x97, 0 }, + { 0x2264, 0x98, 0 }, + { 0x2265, 0x99, 0 }, + { 0x2320, 0x93, 0 }, + { 0x2321, 0x9B, 0 }, + { 0x2500, 0x80, 0 }, + { 0x2502, 0x81, 0 }, + { 0x250C, 0x82, 0 }, + { 0x2510, 0x83, 0 }, + { 0x2514, 0x84, 0 }, + { 0x2518, 0x85, 0 }, + { 0x251C, 0x86, 0 }, + { 0x2524, 0x87, 0 }, + { 0x252C, 0x88, 0 }, + { 0x2534, 0x89, 0 }, + { 0x253C, 0x8A, 0 }, + { 0x2550, 0xA0, 0 }, + { 0x2551, 0xA1, 0 }, + { 0x2552, 0xA2, 0 }, + { 0x2553, 0xA4, 0 }, + { 0x2554, 0xA5, 0 }, + { 0x2555, 0xA6, 0 }, + { 0x2556, 0xA7, 0 }, + { 0x2557, 0xA8, 0 }, + { 0x2558, 0xA9, 0 }, + { 0x2559, 0xAA, 0 }, + { 0x255A, 0xAB, 0 }, + { 0x255B, 0xAC, 0 }, + { 0x255C, 0xAD, 0 }, + { 0x255D, 0xAE, 0 }, + { 0x255E, 0xAF, 0 }, + { 0x255F, 0xB0, 0 }, + { 0x2560, 0xB1, 0 }, + { 0x2561, 0xB2, 0 }, + { 0x2562, 0xB4, 0 }, + { 0x2563, 0xB5, 0 }, + { 0x2564, 0xB6, 0 }, + { 0x2565, 0xB7, 0 }, + { 0x2566, 0xB8, 0 }, + { 0x2567, 0xB9, 0 }, + { 0x2568, 0xBA, 0 }, + { 0x2569, 0xBB, 0 }, + { 0x256A, 0xBC, 0 }, + { 0x256B, 0xBD, 0 }, + { 0x256C, 0xBE, 0 }, + { 0x2580, 0x8B, 0 }, + { 0x2584, 0x8C, 0 }, + { 0x2588, 0x8D, 0 }, + { 0x258C, 0x8E, 0 }, + { 0x2590, 0x8F, 0 }, + { 0x2591, 0x90, 0 }, + { 0x2592, 0x91, 0 }, + { 0x2593, 0x92, 0 }, + { 0x25A0, 0x94, 0 } +}; + +ImplByteConvertData const aImplKOI8UByteCvtData = +{ + aImplKOI8UToUniTab, + nullptr, + aImplKOI8UToCharTab, + nullptr, + aImplKOI8UToCharTabEx, + KOI8UUNI_START, KOI8UUNI_END, + NOTABUNI_START, NOTABUNI_END, + KOI8UCHAR_START, KOI8UCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + KOI8UTOCHARTABEX_COUNT +}; + +ImplTextEncodingData const aImplKoi8UTextEncodingData + = { { &aImplKOI8UByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "koi8-u", + "KOI8-U", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CYRILLIC */ + +/* ======================================================================= */ + +/* PT154 */ +/* Asian Cyrillic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: typed per hand */ +/* Last-Changes from us: */ + +#define PT154UNI_START 0x80 +#define PT154UNI_END 0xFF +sal_uInt16 const aImplPT154ToUniTab[PT154UNI_END - PT154UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0496, 0x0492, 0x04EE, 0x0493, 0x201E, 0x2026, 0x04B6, 0x04AE, /* 0x80 */ + 0x04B2, 0x04AF, 0x04A0, 0x04E2, 0x04A2, 0x049A, 0x04BA, 0x04B8, /* 0x80 */ + 0x0497, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0x04B3, 0x04B7, 0x04A1, 0x04E3, 0x04A3, 0x049B, 0x04BB, 0x04B9, /* 0x90 */ + 0x00A0, 0x040E, 0x045E, 0x0408, 0x04E8, 0x0498, 0x04B0, 0x00A7, /* 0xA0 */ + 0x0401, 0x00A9, 0x04D8, 0x00AB, 0x00AC, 0x04EF, 0x00AE, 0x049C, /* 0xA0 */ + 0x00B0, 0x04B1, 0x0406, 0x0456, 0x0499, 0x04E9, 0x00B6, 0x00B7, /* 0xB0 */ + 0x0451, 0x2116, 0x04D9, 0x00BB, 0x0458, 0x04AA, 0x04AB, 0x049D, /* 0xB0 */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, /* 0xC0 */ + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, /* 0xC0 */ + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xD0 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xD0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, /* 0xE0 */ + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, /* 0xE0 */ + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0xF0 */ + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define PT154CHAR_START 0x0410 +#define PT154CHAR_END 0x044F +unsigned char const aImplPT154ToCharTab[PT154CHAR_END - PT154CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x0410 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x0410 */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x0420 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x0420 */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x0430 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x0430 */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x0440 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff /* 0x0440 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define PT154TOCHARTABEX_COUNT 64 +ImplUniCharTabData const aImplPT154ToCharTabEx[PT154TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xa0, 0 }, + { 0x00A7, 0xa7, 0 }, + { 0x00A9, 0xa9, 0 }, + { 0x00AB, 0xab, 0 }, + { 0x00AC, 0xac, 0 }, + { 0x00AE, 0xae, 0 }, + { 0x00B0, 0xb0, 0 }, + { 0x00B6, 0xb6, 0 }, + { 0x00B7, 0xb7, 0 }, + { 0x00BB, 0xbb, 0 }, + { 0x0401, 0xa8, 0 }, + { 0x0406, 0xb2, 0 }, + { 0x0408, 0xa3, 0 }, + { 0x040E, 0xa1, 0 }, + { 0x0451, 0xb8, 0 }, + { 0x0456, 0xb3, 0 }, + { 0x0458, 0xbc, 0 }, + { 0x045E, 0xa2, 0 }, + { 0x0492, 0x81, 0 }, + { 0x0493, 0x83, 0 }, + { 0x0496, 0x80, 0 }, + { 0x0497, 0x90, 0 }, + { 0x0498, 0xa5, 0 }, + { 0x0499, 0xb4, 0 }, + { 0x049A, 0x8d, 0 }, + { 0x049B, 0x9d, 0 }, + { 0x049C, 0xaf, 0 }, + { 0x049D, 0xbf, 0 }, + { 0x04A0, 0x8a, 0 }, + { 0x04A1, 0x9a, 0 }, + { 0x04A2, 0x8c, 0 }, + { 0x04A3, 0x9c, 0 }, + { 0x04AA, 0xbd, 0 }, + { 0x04AB, 0xbe, 0 }, + { 0x04AE, 0x87, 0 }, + { 0x04AF, 0x89, 0 }, + { 0x04B0, 0xa6, 0 }, + { 0x04B1, 0xb1, 0 }, + { 0x04B2, 0x88, 0 }, + { 0x04B3, 0x98, 0 }, + { 0x04B6, 0x86, 0 }, + { 0x04B7, 0x99, 0 }, + { 0x04B8, 0x8f, 0 }, + { 0x04B9, 0x9f, 0 }, + { 0x04BA, 0x8e, 0 }, + { 0x04BB, 0x9e, 0 }, + { 0x04D8, 0xaa, 0 }, + { 0x04D9, 0xba, 0 }, + { 0x04E2, 0x8b, 0 }, + { 0x04E3, 0x9b, 0 }, + { 0x04E8, 0xa4, 0 }, + { 0x04E9, 0xb5, 0 }, + { 0x04EE, 0x82, 0 }, + { 0x04EF, 0xad, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2116, 0xb9, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplPT154ByteCvtData = +{ + aImplPT154ToUniTab, + nullptr, + aImplPT154ToCharTab, + nullptr, + aImplPT154ToCharTabEx, + PT154UNI_START, PT154UNI_END, + NOTABUNI_START, NOTABUNI_END, + PT154CHAR_START, PT154CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + PT154TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplPT154TextEncodingData + = { { &aImplPT154ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-5", + "PTCP154", + 1, + 1, + 1, + 204, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CYRILLIC */ diff --git a/sal/textenc/tcvtjp1.tab b/sal/textenc/tcvtjp1.tab new file mode 100644 index 000000000..bedae368c --- /dev/null +++ b/sal/textenc/tcvtjp1.tab @@ -0,0 +1,1547 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* japanese charsets: SJIS, MS932, APPLE_JAPANESE */ + +/* ======================================================================= */ + +/* Changes: */ +/* 81_50: SJIS == 0xFFE3, MS932 == 0xFFE3, APPLE_JAPANESE == 0x0203 - we use in all systems 0xFFE3 for better MS compatibility */ +/* 81_5C: SJIS == 0x2015, MS932 == 0x2015, APPLE_JAPANESE == 0x2014 - we use in all systems 0x2015 for better MS compatibility */ +/* 81_5F: SJIS == 0x005C, MS932 == 0xFF3C, APPLE_JAPANESE == 0xFF3C - we use in all systems 0xFF3C for better MS compatibility */ +/* 81_60: SJIS == 0x301C, MS932 == 0xFF5E, APPLE_JAPANESE == 0x301C - we use in all systems 0xFF5E for better MS compatibility */ +/* 81_61: SJIS == 0x2016, MS932 == 0x2225, APPLE_JAPANESE == 0x2016 - we use in all systems 0x2225 for better MS compatibility */ +/* 81_63: SJIS == 0x2026, MS932 == 0x2026, APPLE_JAPANESE == 0x22EF - we use in all systems 0x2026 for better MS compatibility */ +/* 81_7C: SJIS == 0x2212, MS932 == 0xFF0D, APPLE_JAPANESE == 0x2212 - we use in all systems 0xFF0D for better MS compatibility */ +/* 81_91: SJIS == 0x00A2, MS932 == 0xFFE0, APPLE_JAPANESE == 0x00A2 - we use in all systems 0xFFE0 for better MS compatibility */ +/* 81_92: SJIS == 0x00A3, MS932 == 0xFFE1, APPLE_JAPANESE == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */ +/* 81_CA: SJIS == 0x00AC, MS932 == 0xFFE2, APPLE_JAPANESE == 0x00AC - we use in all systems 0xFFE1 for better MS compatibility */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, /* 0x40 */ + 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E, /* 0x40 */ + 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, /* 0x50 */ + 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C, /* 0x50 */ + 0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C, /* 0x60 */ + 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, /* 0x60 */ + 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, /* 0x70 */ + 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0, /* 0x70 */ + 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, /* 0x80 */ + 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, /* 0x80 */ + 0xFF04, 0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, /* 0x90 */ + 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, /* 0x90 */ + 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, /* 0xA0 */ + 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, /* 0xD0 */ + 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, /* 0xE0 */ + 0x222C, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, 0x00B6, /* 0xF0 */ + 0, 0, 0, 0, 0x25EF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x40 */ + 0xFF10, /* 0x40 */ + 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, /* 0x50 */ + 0xFF19, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, /* 0x60 */ + 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, /* 0x60 */ + 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, /* 0x70 */ + 0xFF39, 0xFF3A, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0x80 */ + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0x80 */ + 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0x90 */ + 0xFF58, 0xFF59, 0xFF5A, 0, 0, 0, 0, 0x3041, /* 0x90 */ + 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, /* 0xA0 */ + 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, /* 0xA0 */ + 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, /* 0xB0 */ + 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, /* 0xB0 */ + 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, /* 0xC0 */ + 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, /* 0xC0 */ + 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, /* 0xD0 */ + 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, /* 0xD0 */ + 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, /* 0xE0 */ + 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, /* 0xE0 */ + 0x3092, 0x3093 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, /* 0x40 */ + 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, /* 0x40 */ + 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, /* 0x50 */ + 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, /* 0x50 */ + 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, /* 0x60 */ + 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, /* 0x60 */ + 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, /* 0x70 */ + 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0, /* 0x70 */ + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0x80 */ + 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0x80 */ + 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x0391, /* 0x90 */ + 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, /* 0xA0 */ + 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, /* 0xA0 */ + 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x03B1, /* 0xB0 */ + 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, /* 0xC0 */ + 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, /* 0xC0 */ + 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9 /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, /* 0x40 */ + 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, /* 0x40 */ + 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, /* 0x50 */ + 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, /* 0x50 */ + 0x042F, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, /* 0x70 */ + 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0, /* 0x70 */ + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0x80 */ + 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0x80 */ + 0x044E, 0x044F, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x2500, /* 0x90 */ + 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, /* 0xA0 */ + 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, /* 0xA0 */ + 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, /* 0xB0 */ + 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, /* 0x40 */ + 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, /* 0x40 */ + 0x2470, 0x2471, 0x2472, 0x2473, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x2474, 0x2475, /* 0x50 */ + 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, /* 0x60 */ + 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, /* 0x60 */ + 0x2486, 0x2487, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x2776, 0x2777, 0x2778, 0, /* 0x70 */ + 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, /* 0x90 */ + 0x248E, 0x248F, 0x2490, 0, 0, 0, 0, 0x2160, /* 0x90 */ + 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, /* 0xA0 */ + 0x2169, 0x216A, 0x216B, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, /* 0xB0 */ + 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x249C, 0x249D, 0x249E, 0x249F, 0x24A0, /* 0xD0 */ + 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, 0x24A8, /* 0xE0 */ + 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF, 0x24B0, /* 0xE0 */ + 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x339C, 0x339F, 0x339D, 0x33A0, 0x33A4, 0, 0x33A1, 0x33A5, /* 0x40 */ + 0x339E, 0x33A2, 0x338E, 0, 0x338F, 0x33C4, 0x3396, 0x3397, /* 0x40 */ + 0x2113, 0x3398, 0x33B3, 0x33B2, 0x33B1, 0x33B0, 0x2109, 0x33D4, /* 0x50 */ + 0x33CB, 0x3390, 0x3385, 0x3386, 0x3387, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x2116, 0x33CD, 0x2121, 0, 0x2664, /* 0x90 */ + 0x2667, 0x2661, 0x2662, 0x2660, 0x2663, 0x2665, 0x2666, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x3020, 0x260E, 0x3004, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x261E, /* 0xC0 */ + 0x261C, 0x261D, 0x261F, 0x21C6, 0x21C4, 0x21C5, 0, 0x21E8, /* 0xC0 */ + 0x21E6, 0x21E7, 0x21E9 /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, /* 0x40 */ + 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, /* 0x40 */ + 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, 0x2163, /* 0x50 */ + 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0, 0x3349, /* 0x50 */ + 0x3314, 0x3322, 0x334D, 0x3318, 0x3327, 0x3303, 0x3336, 0x3351, /* 0x60 */ + 0x3357, 0x330D, 0x3326, 0x3323, 0x332B, 0x334A, 0x333B, 0x339C, /* 0x60 */ + 0x339D, 0x339E, 0x338E, 0x338F, 0x33C4, 0x33A1, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x337B, 0, /* 0x70 */ + 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4, 0x32A5, 0x32A6, /* 0x80 */ + 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D, 0x337C, /* 0x80 */ + 0x2252, 0x2261, 0x222B, 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220, /* 0x90 */ + 0x221F, 0x22BF, 0x2235, 0x2229, 0x222A /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3230, 0x322A, 0x322B, 0x322C, 0x322D, 0x322E, 0x322F, 0x3240, /* 0x40 */ + 0x3237, 0x3242, 0x3243, 0x3239, 0x323A, 0x3231, 0x323E, 0x3234, /* 0x40 */ + 0x3232, 0x323B, 0x3236, 0x3233, 0x3235, 0x323C, 0x323D, 0x323F, /* 0x50 */ + 0x3238, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x32A4, 0x32A5, 0x32A6, 0x32A7, 0x32A8, /* 0x90 */ + 0x32A9, 0x3296, 0x329D, 0x3298, 0x329E, 0, 0x3299, 0x3349, /* 0x90 */ + 0x3322, 0x334D, 0x3314, 0x3316, 0x3305, 0x3333, 0x334E, 0x3303, /* 0xA0 */ + 0x3336, 0x3318, 0x3315, 0x3327, 0x3351, 0x334A, 0x3339, 0x3357, /* 0xA0 */ + 0x330D, 0x3342, 0x3323, 0x3326, 0x333B, 0x332B, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x3300, 0x331E, 0x332A, /* 0xB0 */ + 0x3331, 0x3347, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x337E, 0x337D, 0x337C, /* 0xE0 */ + 0x337B, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x337F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x90 */ + 0x4E9C, /* 0x90 */ + 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, /* 0xA0 */ + 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, /* 0xA0 */ + 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, /* 0xB0 */ + 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, /* 0xB0 */ + 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, /* 0xC0 */ + 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, /* 0xC0 */ + 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, /* 0xD0 */ + 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, 0x8863, /* 0xD0 */ + 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, /* 0xE0 */ + 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, /* 0xE0 */ + 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, /* 0xF0 */ + 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x222E, 0x221F, 0x22BF, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x301D, 0x301F, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x3094, 0, 0x30F7, 0x30F8, 0x30F9, 0x30FA, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x4E9C, /* 0x90 */ + 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, /* 0xA0 */ + 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, /* 0xA0 */ + 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, /* 0xB0 */ + 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, /* 0xB0 */ + 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, /* 0xC0 */ + 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, /* 0xC0 */ + 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, /* 0xD0 */ + 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, 0x8863, /* 0xD0 */ + 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, /* 0xE0 */ + 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, /* 0xE0 */ + 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, /* 0xF0 */ + 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, /* 0x40 */ + 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, /* 0x40 */ + 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, /* 0x50 */ + 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, /* 0x50 */ + 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, /* 0x60 */ + 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, /* 0x60 */ + 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, /* 0x70 */ + 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0, /* 0x70 */ + 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, /* 0x80 */ + 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, /* 0x80 */ + 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, /* 0x90 */ + 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC, 0x62BC, /* 0x90 */ + 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, /* 0xA0 */ + 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, /* 0xA0 */ + 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, /* 0xB0 */ + 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, 0x4FA1, /* 0xB0 */ + 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, /* 0xC0 */ + 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B, 0x73C2, /* 0xC0 */ + 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304, 0x8377, /* 0xD0 */ + 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6, 0x904E, /* 0xD0 */ + 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, 0x81E5, /* 0xE0 */ + 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, /* 0xE0 */ + 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, /* 0xF0 */ + 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, /* 0x40 */ + 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, /* 0x40 */ + 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, /* 0x50 */ + 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, /* 0x50 */ + 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, /* 0x60 */ + 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, /* 0x60 */ + 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, /* 0x70 */ + 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0, /* 0x70 */ + 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, /* 0x80 */ + 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, /* 0x80 */ + 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, /* 0x90 */ + 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431, 0x7CA5, /* 0x90 */ + 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, /* 0xA0 */ + 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, /* 0xA0 */ + 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, /* 0xB0 */ + 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, 0x6F22, /* 0xB0 */ + 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, /* 0xC0 */ + 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, 0x89B3, /* 0xC0 */ + 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, 0x9665, /* 0xD0 */ + 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, 0x73A9, /* 0xD0 */ + 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, /* 0xE0 */ + 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, /* 0xE0 */ + 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, /* 0xF0 */ + 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, /* 0x40 */ + 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, /* 0x40 */ + 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, /* 0x50 */ + 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, /* 0x50 */ + 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, /* 0x60 */ + 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, /* 0x60 */ + 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7, /* 0x70 */ + 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0, /* 0x70 */ + 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, /* 0x80 */ + 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, /* 0x80 */ + 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, /* 0x90 */ + 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC, 0x4F9B, /* 0x90 */ + 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, /* 0xA0 */ + 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, /* 0xA0 */ + 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, /* 0xB0 */ + 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, 0x97FF, /* 0xB0 */ + 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D, 0x5C40, /* 0xC0 */ + 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4, 0x5747, /* 0xC0 */ + 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, 0x79BD, /* 0xD0 */ + 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, 0x8FD1, /* 0xD0 */ + 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, 0x72D7, /* 0xE0 */ + 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, /* 0xE0 */ + 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, /* 0xF0 */ + 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, /* 0x40 */ + 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, /* 0x40 */ + 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, /* 0x50 */ + 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, /* 0x50 */ + 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, /* 0x60 */ + 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, /* 0x60 */ + 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, /* 0x70 */ + 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0, /* 0x70 */ + 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, /* 0x80 */ + 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, /* 0x80 */ + 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, /* 0x90 */ + 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372, 0x691C, /* 0x90 */ + 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, /* 0xA0 */ + 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, /* 0xA0 */ + 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, /* 0xB0 */ + 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, 0x8AFA, /* 0xB0 */ + 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, /* 0xC0 */ + 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0, /* 0xC0 */ + 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, /* 0xD0 */ + 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, 0x5348, /* 0xD0 */ + 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, /* 0xE0 */ + 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, /* 0xE0 */ + 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, /* 0xF0 */ + 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, /* 0x40 */ + 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, /* 0x40 */ + 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, /* 0x50 */ + 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, /* 0x50 */ + 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05, /* 0x60 */ + 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154, /* 0x60 */ + 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, /* 0x70 */ + 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0, /* 0x70 */ + 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, /* 0x80 */ + 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, /* 0x80 */ + 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, /* 0x90 */ + 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC, 0x6B64, /* 0x90 */ + 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, 0x61C7, /* 0xA0 */ + 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, 0x826E, /* 0xA0 */ + 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, /* 0xB0 */ + 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, 0x5750, /* 0xB0 */ + 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E, /* 0xC0 */ + 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, 0x6E08, /* 0xC0 */ + 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, 0x7D30, /* 0xD0 */ + 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, 0x7F6A, /* 0xD0 */ + 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, 0x54B2, /* 0xE0 */ + 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, 0x643E, /* 0xE0 */ + 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, 0x685C, /* 0xF0 */ + 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, /* 0x40 */ + 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, /* 0x40 */ + 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, /* 0x50 */ + 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, /* 0x50 */ + 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, /* 0x60 */ + 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, /* 0x60 */ + 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, /* 0x70 */ + 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0, /* 0x70 */ + 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, /* 0x80 */ + 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, /* 0x80 */ + 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, /* 0x90 */ + 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642, 0x6B21, /* 0x90 */ + 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, /* 0xA0 */ + 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, /* 0xA0 */ + 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, /* 0xB0 */ + 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, 0x8CEA, /* 0xB0 */ + 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, /* 0xC0 */ + 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, /* 0xC0 */ + 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, /* 0xD0 */ + 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, 0x91C8, /* 0xD0 */ + 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, 0x5B88, /* 0xE0 */ + 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, /* 0xE0 */ + 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, /* 0xF0 */ + 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, /* 0x40 */ + 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, /* 0x40 */ + 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, /* 0x50 */ + 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, /* 0x50 */ + 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919, /* 0x60 */ + 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA, /* 0x60 */ + 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C, /* 0x70 */ + 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0, /* 0x70 */ + 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, /* 0x80 */ + 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, /* 0x80 */ + 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, /* 0x90 */ + 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F, 0x52DD, /* 0x90 */ + 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, 0x5968, /* 0xA0 */ + 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, /* 0xA0 */ + 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377, /* 0xB0 */ + 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, 0x6A35, /* 0xB0 */ + 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, /* 0xC0 */ + 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, /* 0xC0 */ + 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3, 0x8A1F, /* 0xD0 */ + 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266, 0x937E, /* 0xD0 */ + 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, 0x5197, /* 0xE0 */ + 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, 0x64FE, /* 0xE0 */ + 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, 0x8B72, /* 0xF0 */ + 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, /* 0x40 */ + 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, /* 0x40 */ + 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, /* 0x50 */ + 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, /* 0x50 */ + 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, /* 0x60 */ + 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, /* 0x60 */ + 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, /* 0x70 */ + 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0, /* 0x70 */ + 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, /* 0x80 */ + 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, /* 0x80 */ + 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, /* 0x90 */ + 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE, 0x6F84, /* 0x90 */ + 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, /* 0xA0 */ + 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, /* 0xA0 */ + 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, /* 0xB0 */ + 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, 0x8ACB, /* 0xB0 */ + 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, /* 0xC0 */ + 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, /* 0xC0 */ + 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, /* 0xD0 */ + 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, 0x7BC0, /* 0xD0 */ + 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, 0x5343, /* 0xE0 */ + 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, /* 0xE0 */ + 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, /* 0xF0 */ + 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, /* 0x40 */ + 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, /* 0x40 */ + 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, /* 0x50 */ + 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, /* 0x50 */ + 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44, /* 0x60 */ + 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, /* 0x60 */ + 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, /* 0x70 */ + 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0, /* 0x70 */ + 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, /* 0x80 */ + 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, /* 0x80 */ + 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, /* 0x90 */ + 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E, 0x81D3, /* 0x90 */ + 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F, /* 0xA0 */ + 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, /* 0xA0 */ + 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, /* 0xB0 */ + 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, 0x6C70, /* 0xB0 */ + 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, /* 0xC0 */ + 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE, 0x8010, /* 0xC0 */ + 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF, 0x6CF0, /* 0xD0 */ + 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000, 0x902E, /* 0xD0 */ + 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, 0x918D, /* 0xE0 */ + 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258, /* 0xE0 */ + 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, /* 0xF0 */ + 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, /* 0x40 */ + 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, /* 0x40 */ + 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, /* 0x50 */ + 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, /* 0x50 */ + 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, /* 0x60 */ + 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, /* 0x60 */ + 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, /* 0x70 */ + 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0, /* 0x70 */ + 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, /* 0x80 */ + 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, /* 0x80 */ + 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, /* 0x90 */ + 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5, 0x5E16, /* 0x90 */ + 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, /* 0xA0 */ + 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, /* 0xA0 */ + 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, /* 0xB0 */ + 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, 0x73CD, /* 0xB0 */ + 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, /* 0xC0 */ + 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, 0x4F43, /* 0xC0 */ + 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, 0x6F70, /* 0xD0 */ + 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, 0x9DB4, /* 0xD0 */ + 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824, /* 0xE0 */ + 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, /* 0xE0 */ + 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, /* 0xF0 */ + 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, /* 0x40 */ + 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, /* 0x40 */ + 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, /* 0x50 */ + 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, /* 0x50 */ + 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, /* 0x60 */ + 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, /* 0x60 */ + 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, /* 0x70 */ + 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0, /* 0x70 */ + 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, /* 0x80 */ + 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, /* 0x80 */ + 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, /* 0x90 */ + 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230, 0x8463, /* 0x90 */ + 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, /* 0xA0 */ + 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, /* 0xA0 */ + 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, /* 0xB0 */ + 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, 0x5FB3, /* 0xB0 */ + 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, /* 0xC0 */ + 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6, 0x82EB, /* 0xC0 */ + 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566, 0x6C8C, /* 0xD0 */ + 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, 0x90A3, /* 0xD0 */ + 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, 0x934B, /* 0xE0 */ + 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, /* 0xE0 */ + 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, /* 0xF0 */ + 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, /* 0x40 */ + 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, /* 0x40 */ + 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, /* 0x50 */ + 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, /* 0x50 */ + 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, /* 0x60 */ + 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, /* 0x60 */ + 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, /* 0x70 */ + 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0, /* 0x70 */ + 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, /* 0x80 */ + 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, /* 0x80 */ + 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, /* 0x90 */ + 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6, 0x51FD, /* 0x90 */ + 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, /* 0xA0 */ + 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, /* 0xA0 */ + 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, /* 0xB0 */ + 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, 0x5E06, /* 0xB0 */ + 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, /* 0xC0 */ + 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, 0x7169, /* 0xC0 */ + 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543, /* 0xD0 */ + 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, 0x60B2, /* 0xD0 */ + 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, /* 0xE0 */ + 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, /* 0xE0 */ + 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, /* 0xF0 */ + 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, /* 0x40 */ + 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, /* 0x40 */ + 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, /* 0x50 */ + 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, /* 0x50 */ + 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, /* 0x60 */ + 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, /* 0x60 */ + 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66, /* 0x70 */ + 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0, /* 0x70 */ + 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, /* 0x80 */ + 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, /* 0x80 */ + 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, /* 0x90 */ + 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D, 0x798F, /* 0x90 */ + 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, /* 0xA0 */ + 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, 0x626E, /* 0xA0 */ + 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, 0x805E, /* 0xB0 */ + 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, 0x67C4, /* 0xB0 */ + 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB, 0x58C1, /* 0xC0 */ + 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, 0x5909, /* 0xC0 */ + 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, 0x52C9, /* 0xD0 */ + 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, 0x6355, /* 0xD0 */ + 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, 0x6155, /* 0xE0 */ + 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, /* 0xE0 */ + 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, /* 0xF0 */ + 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, /* 0x40 */ + 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, /* 0x40 */ + 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, /* 0x50 */ + 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, /* 0x50 */ + 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, /* 0x60 */ + 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, /* 0x60 */ + 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, /* 0x70 */ + 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0, /* 0x70 */ + 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, /* 0x80 */ + 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, /* 0x80 */ + 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, /* 0x90 */ + 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80, 0x6F2B, /* 0x90 */ + 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, /* 0xA0 */ + 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, /* 0xA0 */ + 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, /* 0xB0 */ + 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, 0x76DF, /* 0xB0 */ + 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, /* 0xC0 */ + 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, /* 0xC0 */ + 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, /* 0xD0 */ + 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, 0x623B, /* 0xD0 */ + 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, /* 0xE0 */ + 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, /* 0xE0 */ + 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, /* 0xF0 */ + 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, /* 0x40 */ + 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, /* 0x40 */ + 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, /* 0x50 */ + 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, /* 0x50 */ + 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA, /* 0x60 */ + 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194, /* 0x60 */ + 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21, /* 0x70 */ + 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0, /* 0x70 */ + 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, /* 0x80 */ + 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, /* 0x80 */ + 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, /* 0x90 */ + 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483, 0x75E2, /* 0x90 */ + 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, 0x7ACB, /* 0xA0 */ + 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, 0x7559, /* 0xA0 */ + 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, 0x65C5, /* 0xB0 */ + 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, 0x6599, /* 0xB0 */ + 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, /* 0xC0 */ + 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, 0x502B, /* 0xC0 */ + 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, 0x96A3, /* 0xD0 */ + 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E, 0x4EE4, /* 0xD0 */ + 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, 0x793C, /* 0xE0 */ + 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, 0x66A6, /* 0xE0 */ + 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, 0x6190, /* 0xF0 */ + 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, /* 0x40 */ + 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, /* 0x40 */ + 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, /* 0x50 */ + 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, /* 0x50 */ + 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, /* 0x60 */ + 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, /* 0x60 */ + 0x6E7E, 0x7897, 0x8155, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x5F0C, /* 0x90 */ + 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, /* 0xA0 */ + 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, /* 0xA0 */ + 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, /* 0xB0 */ + 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, 0x4EED, /* 0xB0 */ + 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, /* 0xC0 */ + 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, 0x4F70, /* 0xC0 */ + 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, /* 0xD0 */ + 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, 0x501A, /* 0xD0 */ + 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, 0x5021, /* 0xE0 */ + 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, 0x5047, /* 0xE0 */ + 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, 0x5078, /* 0xF0 */ + 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, /* 0x40 */ + 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, /* 0x40 */ + 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, /* 0x50 */ + 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, /* 0x50 */ + 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F, /* 0x60 */ + 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9, /* 0x60 */ + 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD, /* 0x70 */ + 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0, /* 0x70 */ + 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, /* 0x80 */ + 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, /* 0x80 */ + 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, /* 0x90 */ + 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8, 0x8FA7, /* 0x90 */ + 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, /* 0xA0 */ + 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, /* 0xA0 */ + 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, /* 0xB0 */ + 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, /* 0xB0 */ + 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, /* 0xC0 */ + 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, /* 0xC0 */ + 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, /* 0xD0 */ + 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, 0x542C, /* 0xD0 */ + 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, 0x548F, /* 0xE0 */ + 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, /* 0xE0 */ + 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, /* 0xF0 */ + 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, /* 0x40 */ + 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, /* 0x40 */ + 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, /* 0x50 */ + 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, /* 0x50 */ + 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9, /* 0x60 */ + 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4, /* 0x60 */ + 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9, /* 0x70 */ + 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0, /* 0x70 */ + 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, /* 0x80 */ + 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, /* 0x80 */ + 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, /* 0x90 */ + 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709, 0x5708, /* 0x90 */ + 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, 0x5726, /* 0xA0 */ + 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, 0x57C0, /* 0xA0 */ + 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4, /* 0xB0 */ + 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, 0x580A, /* 0xB0 */ + 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, /* 0xC0 */ + 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, 0x58B9, /* 0xC0 */ + 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE, 0x58C5, /* 0xD0 */ + 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC, 0x58E4, /* 0xD0 */ + 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, 0x5902, /* 0xE0 */ + 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, 0x5932, /* 0xE0 */ + 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, 0x5958, /* 0xF0 */ + 0x5962, 0x5960, 0x5967, 0x596C, 0x5969 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, /* 0x40 */ + 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, /* 0x40 */ + 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, /* 0x50 */ + 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, /* 0x50 */ + 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, /* 0x60 */ + 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, /* 0x60 */ + 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, /* 0x70 */ + 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0, /* 0x70 */ + 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, /* 0x80 */ + 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, /* 0x80 */ + 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, /* 0x90 */ + 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53, 0x5C50, /* 0x90 */ + 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, /* 0xA0 */ + 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, /* 0xA0 */ + 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, /* 0xB0 */ + 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, /* 0xB0 */ + 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, /* 0xC0 */ + 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, /* 0xC0 */ + 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, /* 0xD0 */ + 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, 0x5DF2, /* 0xD0 */ + 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, 0x5E37, /* 0xE0 */ + 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, /* 0xE0 */ + 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, /* 0xF0 */ + 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, /* 0x40 */ + 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, /* 0x40 */ + 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, /* 0x50 */ + 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, /* 0x50 */ + 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83, /* 0x60 */ + 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, /* 0x60 */ + 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, /* 0x70 */ + 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0, /* 0x70 */ + 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, /* 0x80 */ + 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, /* 0x80 */ + 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, /* 0x90 */ + 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A, 0x6084, /* 0x90 */ + 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8, /* 0xA0 */ + 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, /* 0xA0 */ + 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, /* 0xB0 */ + 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, 0x613E, /* 0xB0 */ + 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, /* 0xC0 */ + 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A, 0x616B, /* 0xC0 */ + 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153, 0x6175, /* 0xD0 */ + 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A, 0x6191, /* 0xD0 */ + 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, 0x61C3, /* 0xE0 */ + 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6, /* 0xE0 */ + 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, /* 0xF0 */ + 0x6209, 0x620D, 0x620C, 0x6214, 0x621B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, /* 0x40 */ + 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, /* 0x40 */ + 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, /* 0x50 */ + 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, /* 0x50 */ + 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, /* 0x60 */ + 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, /* 0x60 */ + 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, /* 0x70 */ + 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0, /* 0x70 */ + 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, /* 0x80 */ + 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, /* 0x80 */ + 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, /* 0x90 */ + 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC, 0x64DA, /* 0x90 */ + 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, /* 0xA0 */ + 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, /* 0xA0 */ + 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, /* 0xB0 */ + 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, /* 0xB0 */ + 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, /* 0xC0 */ + 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, 0x65AB, /* 0xC0 */ + 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, 0x65DB, /* 0xD0 */ + 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, 0x65FB, /* 0xD0 */ + 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649, /* 0xE0 */ + 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, /* 0xE0 */ + 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, /* 0xF0 */ + 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, /* 0x40 */ + 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, /* 0x40 */ + 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, /* 0x50 */ + 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, /* 0x50 */ + 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, /* 0x60 */ + 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, /* 0x60 */ + 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, /* 0x70 */ + 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0, /* 0x70 */ + 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, /* 0x80 */ + 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, /* 0x80 */ + 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, /* 0x90 */ + 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD, 0x68D4, /* 0x90 */ + 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, /* 0xA0 */ + 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, /* 0xA0 */ + 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, /* 0xB0 */ + 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, 0x695E, /* 0xB0 */ + 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF, 0x69C1, /* 0xC0 */ + 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB, 0x69C3, /* 0xC0 */ + 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4, 0x69DE, /* 0xD0 */ + 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, 0x69E7, /* 0xD0 */ + 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, 0x6A12, /* 0xE0 */ + 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, /* 0xE0 */ + 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, /* 0xF0 */ + 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, /* 0x40 */ + 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, /* 0x40 */ + 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, /* 0x50 */ + 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, /* 0x50 */ + 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, /* 0x60 */ + 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, /* 0x60 */ + 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, /* 0x70 */ + 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0, /* 0x70 */ + 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, /* 0x80 */ + 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, /* 0x80 */ + 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, /* 0x90 */ + 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE, 0x6CBA, /* 0x90 */ + 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, /* 0xA0 */ + 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, /* 0xA0 */ + 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, /* 0xB0 */ + 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, 0x6DB8, /* 0xB0 */ + 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, /* 0xC0 */ + 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, /* 0xC0 */ + 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, /* 0xD0 */ + 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, 0x6E1D, /* 0xD0 */ + 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, /* 0xE0 */ + 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, /* 0xE0 */ + 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, /* 0xF0 */ + 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, /* 0x40 */ + 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, /* 0x40 */ + 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, /* 0x50 */ + 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, /* 0x50 */ + 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, /* 0x60 */ + 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030, /* 0x60 */ + 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1, /* 0x70 */ + 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0, /* 0x70 */ + 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, /* 0x80 */ + 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, /* 0x80 */ + 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, /* 0x90 */ + 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC, 0x71F9, /* 0x90 */ + 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, /* 0xA0 */ + 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, 0x7258, /* 0xA0 */ + 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72A2, /* 0xB0 */ + 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, 0x72D2, /* 0xB0 */ + 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317, 0x730A, /* 0xC0 */ + 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, 0x733E, /* 0xC0 */ + 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, 0x7378, /* 0xD0 */ + 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, 0x73C0, /* 0xD0 */ + 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, 0x73F8, /* 0xE0 */ + 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, /* 0xE0 */ + 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, 0x749E, /* 0xF0 */ + 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, /* 0x40 */ + 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, /* 0x40 */ + 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, /* 0x50 */ + 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, /* 0x50 */ + 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A, /* 0x60 */ + 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2, /* 0x60 */ + 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD, /* 0x70 */ + 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0, /* 0x70 */ + 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, /* 0x80 */ + 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, /* 0x80 */ + 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, /* 0x90 */ + 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670, 0x7672, /* 0x90 */ + 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, /* 0xA0 */ + 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, /* 0xA0 */ + 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, /* 0xB0 */ + 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, 0x7729, /* 0xB0 */ + 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, /* 0xC0 */ + 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, /* 0xC0 */ + 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, /* 0xD0 */ + 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, 0x77DA, /* 0xD0 */ + 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, /* 0xE0 */ + 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, /* 0xE0 */ + 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, /* 0xF0 */ + 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, /* 0x40 */ + 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, /* 0x40 */ + 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, /* 0x50 */ + 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, /* 0x50 */ + 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F, /* 0x60 */ + 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49, /* 0x60 */ + 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88, /* 0x70 */ + 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0, /* 0x70 */ + 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, /* 0x80 */ + 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, /* 0x80 */ + 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, /* 0x90 */ + 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50, 0x7B7A, /* 0x90 */ + 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, 0x7B74, /* 0xA0 */ + 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, /* 0xA0 */ + 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, /* 0xB0 */ + 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, 0x7BE9, /* 0xB0 */ + 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, /* 0xC0 */ + 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, /* 0xC0 */ + 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, /* 0xD0 */ + 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65, 0x7C6C, /* 0xD0 */ + 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, /* 0xE0 */ + 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, /* 0xE0 */ + 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, /* 0xF0 */ + 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, /* 0x40 */ + 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, /* 0x40 */ + 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, /* 0x50 */ + 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, /* 0x50 */ + 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, /* 0x60 */ + 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, /* 0x60 */ + 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, /* 0x70 */ + 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0, /* 0x70 */ + 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, /* 0x80 */ + 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, /* 0x80 */ + 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, /* 0x90 */ + 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A, 0x7F45, /* 0x90 */ + 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, /* 0xA0 */ + 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, /* 0xA0 */ + 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, /* 0xB0 */ + 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, /* 0xB0 */ + 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, /* 0xC0 */ + 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, /* 0xC0 */ + 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, /* 0xD0 */ + 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, 0x8072, /* 0xD0 */ + 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, 0x8085, /* 0xE0 */ + 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, /* 0xE0 */ + 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, /* 0xF0 */ + 0x811B, 0x8129, 0x8123, 0x812F, 0x814B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, /* 0x40 */ + 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, /* 0x40 */ + 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, /* 0x50 */ + 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, /* 0x50 */ + 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0, /* 0x60 */ + 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207, /* 0x60 */ + 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, /* 0x70 */ + 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0, /* 0x70 */ + 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, /* 0x80 */ + 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, /* 0x80 */ + 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, /* 0x90 */ + 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9, 0x8335, /* 0x90 */ + 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, /* 0xA0 */ + 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F, /* 0xA0 */ + 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, /* 0xB0 */ + 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, 0x83EB, /* 0xB0 */ + 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, /* 0xC0 */ + 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438, 0x8506, /* 0xC0 */ + 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477, 0x846B, /* 0xD0 */ + 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F, 0x8479, /* 0xD0 */ + 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, 0x84CD, /* 0xE0 */ + 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, 0x8521, /* 0xE0 */ + 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514, /* 0xF0 */ + 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, /* 0x40 */ + 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, /* 0x40 */ + 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, /* 0x50 */ + 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, /* 0x50 */ + 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D, /* 0x60 */ + 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, /* 0x60 */ + 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, /* 0x70 */ + 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0, /* 0x70 */ + 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, /* 0x80 */ + 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, /* 0x80 */ + 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, /* 0x90 */ + 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759, 0x8753, /* 0x90 */ + 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, /* 0xA0 */ + 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, /* 0xA0 */ + 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, /* 0xB0 */ + 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, 0x8822, /* 0xB0 */ + 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, /* 0xC0 */ + 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, 0x889E, /* 0xC0 */ + 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88AE, /* 0xD0 */ + 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, 0x88C3, /* 0xD0 */ + 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, 0x88FC, /* 0xE0 */ + 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, /* 0xE0 */ + 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, /* 0xF0 */ + 0x8938, 0x894C, 0x891D, 0x8960, 0x895E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, /* 0x40 */ + 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, /* 0x40 */ + 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, /* 0x50 */ + 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, /* 0x50 */ + 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, /* 0x60 */ + 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, /* 0x60 */ + 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, /* 0x70 */ + 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0, /* 0x70 */ + 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, /* 0x80 */ + 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, /* 0x80 */ + 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, /* 0x90 */ + 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B, 0x8B5F, /* 0x90 */ + 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, /* 0xA0 */ + 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, /* 0xA0 */ + 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, /* 0xB0 */ + 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, 0x8C7C, /* 0xB0 */ + 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, /* 0xC0 */ + 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, /* 0xC0 */ + 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D, 0x8D10, /* 0xD0 */ + 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D, 0x8D71, /* 0xD0 */ + 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA, /* 0xE0 */ + 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, /* 0xE0 */ + 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, /* 0xF0 */ + 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, /* 0x40 */ + 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, /* 0x40 */ + 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, /* 0x50 */ + 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, /* 0x50 */ + 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, /* 0x60 */ + 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, /* 0x60 */ + 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, /* 0x70 */ + 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0, /* 0x70 */ + 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, /* 0x80 */ + 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, /* 0x80 */ + 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, /* 0x90 */ + 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8, 0x904F, /* 0x90 */ + 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, /* 0xA0 */ + 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, /* 0xA0 */ + 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, /* 0xB0 */ + 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, 0x9119, /* 0xB0 */ + 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, /* 0xC0 */ + 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, 0x91AF, /* 0xC0 */ + 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, 0x91CB, /* 0xD0 */ + 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, 0x91F6, /* 0xD0 */ + 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, /* 0xE0 */ + 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, /* 0xE0 */ + 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, /* 0xF0 */ + 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, /* 0x40 */ + 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, /* 0x40 */ + 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, /* 0x50 */ + 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, /* 0x50 */ + 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, /* 0x60 */ + 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, /* 0x60 */ + 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F, /* 0x70 */ + 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0, /* 0x70 */ + 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, /* 0x80 */ + 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, /* 0x80 */ + 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, /* 0x90 */ + 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E, 0x965D, /* 0x90 */ + 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, /* 0xA0 */ + 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, /* 0xA0 */ + 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, 0x970D, /* 0xB0 */ + 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, 0x9711, /* 0xB0 */ + 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739, 0x973D, /* 0xC0 */ + 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C, 0x9760, /* 0xC0 */ + 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, 0x9785, /* 0xD0 */ + 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, 0x979C, /* 0xD0 */ + 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, 0x97C8, /* 0xE0 */ + 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, /* 0xE0 */ + 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, /* 0xF0 */ + 0x984F, 0x984B, 0x986B, 0x986F, 0x9870 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_E9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, /* 0x40 */ + 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, /* 0x40 */ + 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, /* 0x50 */ + 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, /* 0x50 */ + 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, /* 0x60 */ + 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE, /* 0x60 */ + 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2, /* 0x70 */ + 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0, /* 0x70 */ + 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, /* 0x80 */ + 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, /* 0x80 */ + 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, /* 0x90 */ + 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7, 0x9AFB, /* 0x90 */ + 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, /* 0xA0 */ + 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, /* 0xA0 */ + 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, /* 0xB0 */ + 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, 0x9BC0, /* 0xB0 */ + 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, /* 0xC0 */ + 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, /* 0xC0 */ + 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, /* 0xD0 */ + 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, 0x9C47, /* 0xD0 */ + 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, /* 0xE0 */ + 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, /* 0xE0 */ + 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, /* 0xF0 */ + 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_SJIS_EA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, /* 0x40 */ + 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, /* 0x40 */ + 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, /* 0x50 */ + 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, /* 0x50 */ + 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, /* 0x60 */ + 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, /* 0x60 */ + 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, /* 0x70 */ + 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0, /* 0x70 */ + 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, /* 0x80 */ + 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, /* 0x80 */ + 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, /* 0x90 */ + 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0, 0x582F, /* 0x90 */ + 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_APPLEJAPANESE_EB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE33, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xFE31, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xFE30, 0, 0, 0, /* 0x60 */ + 0, 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0, 0, 0xFE37, /* 0x60 */ + 0xFE38, 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, /* 0x70 */ + 0xFE44, 0xFE3B, 0xFE3C /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_ED[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631, /* 0x40 */ + 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, /* 0x40 */ + 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, /* 0x50 */ + 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094, /* 0x50 */ + 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, /* 0x60 */ + 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, /* 0x60 */ + 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, /* 0x70 */ + 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0, /* 0x70 */ + 0xFA10, 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, /* 0x80 */ + 0x59A4, 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, /* 0x80 */ + 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, /* 0x90 */ + 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, /* 0x90 */ + 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2, 0x6111, /* 0xA0 */ + 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460, 0x649D, /* 0xA0 */ + 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E, 0x661E, /* 0xB0 */ + 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699, 0x66A0, /* 0xB0 */ + 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB, 0x6852, /* 0xC0 */ + 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14, 0x6998, /* 0xC0 */ + 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, /* 0xD0 */ + 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, /* 0xD0 */ + 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, /* 0xE0 */ + 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, 0x7005, /* 0xE0 */ + 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146, /* 0xF0 */ + 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_EE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3, /* 0x40 */ + 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462, /* 0x40 */ + 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B, /* 0x50 */ + 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A, /* 0x50 */ + 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1, /* 0x60 */ + 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, /* 0x60 */ + 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, /* 0x70 */ + 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0, /* 0x70 */ + 0x856B, 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, /* 0x80 */ + 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, /* 0x80 */ + 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, /* 0x90 */ + 0xFA25, 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA, 0x91D7, /* 0x90 */ + 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210, 0x920A, /* 0xA0 */ + 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239, 0x9267, /* 0xA0 */ + 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0, 0xFA27, /* 0xB0 */ + 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28, 0x931E, /* 0xB0 */ + 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6, 0x93DE, /* 0xC0 */ + 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29, 0x969D, /* 0xC0 */ + 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751, 0x9755, /* 0xD0 */ + 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E, 0x9A4E, /* 0xD0 */ + 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB, 0x9C00, /* 0xE0 */ + 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0, 0, 0x2170, /* 0xE0 */ + 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, /* 0xF0 */ + 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, /* 0x40 */ + 0x2178, 0x2179, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, /* 0x40 */ + 0x2166, 0x2167, 0x2168, 0x2169, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02, /* 0x50 */ + 0x3231, 0x2116, 0x2121, 0x2235, 0x7E8A, 0x891C, 0x9348, 0x9288, /* 0x50 */ + 0x84DC, 0x4FC9, 0x70BB, 0x6631, 0x68C8, 0x92F9, 0x66FB, 0x5F45, /* 0x60 */ + 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, 0x4F03, 0x4F39, 0x4F56, 0x4F92, /* 0x60 */ + 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, 0x5040, 0x5022, 0x4FFF, 0x501E, /* 0x70 */ + 0x5046, 0x5070, 0x5042, 0x5094, 0x50F4, 0x50D8, 0x514A, 0, /* 0x70 */ + 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, 0x529C, 0x52A6, 0x52C0, /* 0x80 */ + 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, 0x5393, 0x53B2, 0x53DD, /* 0x80 */ + 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, 0x5586, 0x5759, 0x5765, /* 0x90 */ + 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10, 0x589E, 0x58B2, 0x590B, /* 0x90 */ + 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4, 0x59BA, 0x5B56, 0x5BC0, /* 0xA0 */ + 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, /* 0xA0 */ + 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, /* 0xB0 */ + 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, /* 0xB0 */ + 0x60D5, 0x6120, 0x60F2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, /* 0xC0 */ + 0x62A6, 0x63F5, 0x6460, 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, /* 0xC0 */ + 0x663B, 0x6609, 0x662E, 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, /* 0xD0 */ + 0xFA12, 0x6673, 0x6699, 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, /* 0xD0 */ + 0xF929, 0x6766, 0x67BB, 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, /* 0xE0 */ + 0xFA13, 0x6968, 0xFA14, 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, /* 0xE0 */ + 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, /* 0xF0 */ + 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, 0x6D6F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_FB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, 0x6E5C, /* 0x40 */ + 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, 0x7005, 0x7007, /* 0x40 */ + 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146, 0x7147, /* 0x50 */ + 0xFA15, 0x71C1, 0x71FE, 0x72B1, 0x72BE, 0x7324, 0xFA16, 0x7377, /* 0x50 */ + 0x73BD, 0x73C9, 0x73D6, 0x73E3, 0x73D2, 0x7407, 0x73F5, 0x7426, /* 0x60 */ + 0x742A, 0x7429, 0x742E, 0x7462, 0x7489, 0x749F, 0x7501, 0x756F, /* 0x60 */ + 0x7682, 0x769C, 0x769E, 0x769B, 0x76A6, 0xFA17, 0x7746, 0x52AF, /* 0x70 */ + 0x7821, 0x784E, 0x7864, 0x787A, 0x7930, 0xFA18, 0xFA19, 0, /* 0x70 */ + 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1, 0x7AE7, 0xFA1C, 0x7AEB, /* 0x80 */ + 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, 0x7DA0, 0x7DD6, 0x7E52, /* 0x80 */ + 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, 0x837F, 0x83C7, 0x83F6, /* 0x90 */ + 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B, 0xFA1F, 0x85B0, 0xFA20, /* 0x90 */ + 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, /* 0xA0 */ + 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, /* 0xA0 */ + 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25, 0x9067, 0x90DE, 0xFA26, /* 0xB0 */ + 0x9115, 0x9127, 0x91DA, 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, /* 0xB0 */ + 0x91E5, 0x9206, 0x9210, 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, /* 0xC0 */ + 0x9259, 0x9251, 0x9239, 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, /* 0xC0 */ + 0x92D7, 0x92D9, 0x92D0, 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, /* 0xD0 */ + 0x9321, 0x92FB, 0xFA28, 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, /* 0xD0 */ + 0x9357, 0x93A4, 0x93C6, 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, /* 0xE0 */ + 0x9592, 0xF9DC, 0xFA29, 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, /* 0xE0 */ + 0x974D, 0x974F, 0x9751, 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, /* 0xF0 */ + 0x9927, 0xFA2C, 0x999E, 0x9A4E, 0x9AD9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_MS932_FC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB, 0x9C00, 0x9D70, /* 0x40 */ + 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1 /* 0x40 */ +}; + diff --git a/sal/textenc/tcvtjp2.tab b/sal/textenc/tcvtjp2.tab new file mode 100644 index 000000000..093d556b4 --- /dev/null +++ b/sal/textenc/tcvtjp2.tab @@ -0,0 +1,3955 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* japanese charsets: SJIS, MS932, APPLE_JAPANESE */ + +/* ======================================================================= */ + +/* 0x00A2 --> 0x8191 - APPLE_JAPANESE, but I think, this extension is better than the replacement char */ +/* 0x00A3 --> 0x8192 - APPLE_JAPANESE, but I think, this extension is better than the replacement char */ +/* 0x00A5 --> 0x005C - APPLE_JAPANESE, but I think, this extension is better than the replacement char */ +/* 0x00AC --> 0x81CA - APPLE_JAPANESE/SJIS, but I think, this extension is better than the replacement char */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x8191, 0x8192, 0, 0x005C, 0, 0x8198, /* 0xA0 */ + 0x814E, 0, 0, 0, 0x81CA, 0, 0, 0, /* 0xA0 */ + 0x818B, 0x817D, 0, 0, 0x814C, 0, 0x81F7, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x817E, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x8180 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x00A0, 0, 0x8191, 0x8192, 0, 0x005C, 0, 0x8198, /* 0xA0 */ + 0x814E, 0x00FD, 0, 0, 0x81CA, 0, 0, 0, /* 0xA0 */ + 0x818B, 0x817D, 0, 0, 0x814C, 0, 0x81F7, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x817E, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x8180 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, 0x83A4, 0x83A5, /* 0x90 */ + 0x83A6, 0x83A7, 0x83A8, 0x83A9, 0x83AA, 0x83AB, 0x83AC, 0x83AD, /* 0x90 */ + 0x83AE, 0x83AF, 0, 0x83B0, 0x83B1, 0x83B2, 0x83B3, 0x83B4, /* 0xA0 */ + 0x83B5, 0x83B6, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x83BF, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0x83C5, /* 0xB0 */ + 0x83C6, 0x83C7, 0x83C8, 0x83C9, 0x83CA, 0x83CB, 0x83CC, 0x83CD, /* 0xB0 */ + 0x83CE, 0x83CF, 0, 0x83D0, 0x83D1, 0x83D2, 0x83D3, 0x83D4, /* 0xC0 */ + 0x83D5, 0x83D6 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8446, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, /* 0x10 */ + 0x8449, 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, 0x8450, /* 0x10 */ + 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457, 0x8458, /* 0x20 */ + 0x8459, 0x845A, 0x845B, 0x845C, 0x845D, 0x845E, 0x845F, 0x8460, /* 0x20 */ + 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8477, 0x8478, /* 0x30 */ + 0x8479, 0x847A, 0x847B, 0x847C, 0x847D, 0x847E, 0x8480, 0x8481, /* 0x30 */ + 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488, 0x8489, /* 0x40 */ + 0x848A, 0x848B, 0x848C, 0x848D, 0x848E, 0x848F, 0x8490, 0x8491, /* 0x40 */ + 0, 0x8476 /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* 0x2014 --> 0x815C - APPLE_JAPANESE/SJIS, but I think, this extension is better than the replacement char */ +/* 0x2015 --> 0x815C - MS932, but I think, this extension is better than the replacement char */ +/* 0x2016 --> 0x8161 - APPLE_JAPANESE/SJIS, but I think, this extension is better than the replacement char */ +/* 0x2026 --> 0x8163 - APPLE_JAPANESE is normally 0x00FF (HORIZONTAL ELLIPSIS), because in the APPLE import table 0x8183 is this 0x22EF (MIDLINE HORIZONTAL ELLIPSIS) */ +/* but we import this code as 0x2026 */ +/* 0x203E --> 0x8150 - APPLE_JAPANESE, but I think, this extension is better than the replacement char */ +/* in SJIS this is 0x7E, but we import 0x7E as 0x7E, so this would be the better way */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x815D, 0, 0, 0, 0x815C, 0x815C, 0x8161, 0, /* 0x10 */ + 0x8165, 0x8166, 0, 0, 0x8167, 0x8168, 0, 0, /* 0x10 */ + 0x81F5, 0x81F6, 0, 0, 0, 0x8164, 0x8163, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x81F1, 0, 0x818C, 0x818D, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x81A6, 0, 0, 0x8150 /* 0x30 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* In this table we have some MS932 extensions, but we use this table also for SJIS, for better MS compatibility */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x818E, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x8782, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x8784, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x81F0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, 0x875A, 0x875B, /* 0x60 */ + 0x875C, 0x875D, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xFA40, 0xFA41, 0xFA42, 0xFa43, 0xFA44, 0xFA45, 0xFA46, 0xFA47, /* 0x70 */ + 0xFA48, 0xFA49, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x81A9, 0x81AA, 0x81A8, 0x81AB, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x81CB, 0, 0x81CC /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x818E, 0, 0, 0, 0, /* 0x00 */ + 0, 0x8656, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x8650, 0, 0, 0x869B, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x869D, 0x00FE, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x81F0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x859F, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x85A6, /* 0x60 */ + 0x85A7, 0x85A8, 0x85A9, 0x85AA, 0, 0, 0, 0, /* 0x60 */ + 0x85B3, 0x85B4, 0x85B5, 0x85B6, 0x85B7, 0x85B8, 0x85B9, 0x85BA, /* 0x70 */ + 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x81A9, 0x81AA, 0x81A8, 0x81AB, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x86CC, 0x86CD, 0x86CB, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x81CB, 0, 0x81CC, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0x86D0, 0x86D1, /* 0xE0 */ + 0x86CF, 0x86D2 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* In this table we have some MS932 extensions, but we use this table also for SJIS, for better MS compatibility */ +/* 0x2210 --> 0x817C - come from SJIS */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81CD, 0, 0x81DD, 0x81CE, 0, 0, 0, 0x81DE, /* 0x00 */ + 0x81B8, 0, 0, 0x81B9, 0, 0, 0, 0, /* 0x00 */ + 0, 0x8794, 0x817C, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x81E3, 0, 0, 0x81E5, 0x8187, 0x8798, /* 0x10 */ + 0x81DA, 0, 0, 0, 0, 0x8161, 0, 0x81C8, /* 0x20 */ + 0x81C9, 0x81BF, 0x81BE, 0x81E7, 0x81E8, 0, 0x8793, 0, /* 0x20 */ + 0, 0, 0, 0, 0x8188, 0x81E6, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x81E4, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x81E0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x8182, 0x81DF, 0, 0, 0, 0, 0x8185, 0x8186, /* 0x60 */ + 0, 0, 0x81E1, 0x81E2, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x81BC, 0x81BD, 0, 0, 0x81BA, 0x81BB, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x81DB, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x8799 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81CD, 0, 0x81DD, 0x81CE, 0, 0, 0, 0x81DE, /* 0x00 */ + 0x81B8, 0, 0, 0x81B9, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x817C, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x81E3, 0, 0, 0x81E5, 0x8187, 0x8841, /* 0x10 */ + 0x81DA, 0, 0, 0, 0, 0, 0, 0x81C8, /* 0x20 */ + 0x81C9, 0x81BF, 0x81BE, 0x81E7, 0x81E8, 0, 0x8840, 0, /* 0x20 */ + 0, 0, 0, 0, 0x8188, 0x81E6, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x81E4, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x81E0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x8182, 0x81DF, 0, 0, 0, 0, 0x8185, 0x8186, /* 0x60 */ + 0, 0, 0x81E1, 0x81E2, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x81BC, 0x81BD, 0, 0, 0x81BA, 0x81BB, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x81DB, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x8842, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x8163 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_23[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81DC /* 0x10 */ + /* 0x10 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, /* 0x60 */ + 0x8748, 0x8749, 0x874A, 0x874B, 0x874C, 0x874D, 0x874E, 0x874F, /* 0x60 */ + 0x8750, 0x8751, 0x8752, 0x8753 /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8540, 0x8541, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, /* 0x60 */ + 0x8548, 0x8549, 0x854A, 0x854B, 0x854C, 0x854D, 0x854E, 0x854F, /* 0x60 */ + 0x8550, 0x8551, 0x8552, 0x8553, 0x855E, 0x855F, 0x8560, 0x8561, /* 0x70 */ + 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569, /* 0x70 */ + 0x856A, 0x856B, 0x856C, 0x856D, 0x856E, 0x856F, 0x8570, 0x8571, /* 0x80 */ + 0x8592, 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, /* 0x80 */ + 0x859A, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x85DB, 0x85DC, 0x85DD, 0x85DE, /* 0x90 */ + 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, /* 0xA0 */ + 0x85E7, 0x85E8, 0x85E9, 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, /* 0xA0 */ + 0x85EF, 0x85F0, 0x85F1, 0x85F2, 0x85F3, 0x85F4 /* 0xB0 */ + /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x849F, 0x84AA, 0x84A0, 0x84AB, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x84A1, 0, 0, 0x84AC, /* 0x00 */ + 0x84A2, 0, 0, 0x84AD, 0x84A4, 0, 0, 0x84AF, /* 0x10 */ + 0x84A3, 0, 0, 0x84AE, 0x84A5, 0x84BA, 0, 0, /* 0x10 */ + 0x84B5, 0, 0, 0x84B0, 0x84A7, 0x84BC, 0, 0, /* 0x20 */ + 0x84B7, 0, 0, 0x84B2, 0x84A6, 0, 0, 0x84B6, /* 0x20 */ + 0x84BB, 0, 0, 0x84B1, 0x84A8, 0, 0, 0x84B8, /* 0x30 */ + 0x84BD, 0, 0, 0x84B3, 0x84A9, 0, 0, 0x84B9, /* 0x30 */ + 0, 0, 0x84BE, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x84B4, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x81A1, 0x81A0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x81A3, 0x81A2, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x81A5, 0x81A4, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x819F, 0x819E, /* 0xC0 */ + 0, 0, 0, 0x819B, 0, 0, 0x819D, 0x819C, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x81FC /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x819A, 0x8199, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x818A, 0, 0x8189, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x81F4, 0, 0, 0x81F3, 0, 0x81F2 /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x819A, 0x8199, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x86B4, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x86C8, 0x86C9, 0x86C7, 0x86CA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x818A, 0, 0x8189, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x86A3, 0x86A1, 0x86A2, 0x86A4, 0x869F, 0x86A5, 0x86A6, 0x86A0, /* 0x60 */ + 0, 0, 0x81F4, 0, 0, 0x81F3, 0, 0x81F2 /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_27[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x857C, 0x857D, /* 0x70 */ + 0x857E, 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0x8585 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* 0x3014 --> 0x8160 - come from SJIS */ +/* 0x301D --> 0x8780 - MS932, but I think, this extension is better than the replacement char */ +/* 0x301F --> 0x8781 - MS932, but I think, this extension is better than the replacement char */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8140, 0x8141, 0x8142, 0x8156, 0, 0x8158, 0x8159, 0x815A, /* 0x00 */ + 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, /* 0x00 */ + 0x8179, 0x817A, 0x81A7, 0x81AC, 0x816B, 0x816C, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x8160, 0x8780, 0, 0x8781, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x829F, 0x82A0, 0x82A1, 0x82A2, 0x82A3, 0x82A4, 0x82A5, /* 0x40 */ + 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, /* 0x40 */ + 0x82AE, 0x82AF, 0x82B0, 0x82B1, 0x82B2, 0x82B3, 0x82B4, 0x82B5, /* 0x50 */ + 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0x82BB, 0x82BC, 0x82BD, /* 0x50 */ + 0x82BE, 0x82BF, 0x82C0, 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, /* 0x60 */ + 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, /* 0x60 */ + 0x82CE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0x82D3, 0x82D4, 0x82D5, /* 0x70 */ + 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, /* 0x70 */ + 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, 0x82E5, /* 0x80 */ + 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EB, 0x82EC, 0x82ED, /* 0x80 */ + 0x82EE, 0x82EF, 0x82F0, 0x82F1, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x814A, 0x814B, 0x8154, 0x8155, 0, /* 0x90 */ + 0, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, /* 0xA0 */ + 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C, 0x834D, 0x834E, /* 0xA0 */ + 0x834F, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, /* 0xB0 */ + 0x8357, 0x8358, 0x8359, 0x835A, 0x835B, 0x835C, 0x835D, 0x835E, /* 0xB0 */ + 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, /* 0xC0 */ + 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, 0x836C, 0x836D, 0x836E, /* 0xC0 */ + 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, /* 0xD0 */ + 0x8377, 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0x837E, /* 0xD0 */ + 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, /* 0xE0 */ + 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, /* 0xE0 */ + 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, 0, /* 0xF0 */ + 0, 0, 0, 0x8145, 0x815B, 0x8152, 0x8153 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8140, 0x8141, 0x8142, 0x8156, 0x86B5, 0x8158, 0x8159, 0x815A, /* 0x00 */ + 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, /* 0x00 */ + 0x8179, 0x817A, 0x81A7, 0x81AC, 0x816B, 0x816C, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x8160, 0x8854, 0, 0x8855, /* 0x10 */ + 0x86B3, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x829F, 0x82A0, 0x82A1, 0x82A2, 0x82A3, 0x82A4, 0x82A5, /* 0x40 */ + 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, /* 0x40 */ + 0x82AE, 0x82AF, 0x82B0, 0x82B1, 0x82B2, 0x82B3, 0x82B4, 0x82B5, /* 0x50 */ + 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0x82BB, 0x82BC, 0x82BD, /* 0x50 */ + 0x82BE, 0x82BF, 0x82C0, 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, /* 0x60 */ + 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, /* 0x60 */ + 0x82CE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0x82D3, 0x82D4, 0x82D5, /* 0x70 */ + 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, /* 0x70 */ + 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, 0x82E5, /* 0x80 */ + 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EB, 0x82EC, 0x82ED, /* 0x80 */ + 0x82EE, 0x82EF, 0x82F0, 0x82F1, 0x8868, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x814A, 0x814B, 0x8154, 0x8155, 0, /* 0x90 */ + 0, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, /* 0xA0 */ + 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C, 0x834D, 0x834E, /* 0xA0 */ + 0x834F, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, /* 0xB0 */ + 0x8357, 0x8358, 0x8359, 0x835A, 0x835B, 0x835C, 0x835D, 0x835E, /* 0xB0 */ + 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, /* 0xC0 */ + 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, 0x836C, 0x836D, 0x836E, /* 0xC0 */ + 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, /* 0xD0 */ + 0x8377, 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0x837E, /* 0xD0 */ + 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, /* 0xE0 */ + 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, /* 0xE0 */ + 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, 0x886A, /* 0xF0 */ + 0x886B, 0x886C, 0x886D, 0x8145, 0x815B, 0x8152, 0x8153 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x878A, 0x878B, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x878C, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x8785, 0x8786, 0x8787, 0x8788, /* 0xA0 */ + 0x8789 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x20 */ + 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, /* 0x20 */ + 0x8740, 0x874D, 0x8750, 0x8753, 0x874F, 0x8754, 0x8752, 0x8748, /* 0x30 */ + 0x8758, 0x874B, 0x874C, 0x8751, 0x8755, 0x8756, 0x874E, 0x8757, /* 0x30 */ + 0x8747, 0, 0x8749, 0x874A, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x8799, 0, /* 0x90 */ + 0x879B, 0x879E, 0, 0, 0, 0x879A, 0x879C, 0, /* 0x90 */ + 0, 0, 0, 0, 0x8793, 0x8794, 0x8795, 0x8796, /* 0xA0 */ + 0x8797, 0x8798 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8765, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x8769, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x8760, 0, 0, 0, /* 0x10 */ + 0x8763, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x8761, 0x876B, 0, 0, 0x876A, 0x8764, /* 0x20 */ + 0, 0, 0, 0x876C, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x8766, 0, /* 0x30 */ + 0, 0, 0, 0x876E, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x875F, 0x876D, 0, 0, 0x8762, 0, 0, /* 0x40 */ + 0, 0x8767, 0, 0, 0, 0, 0, 0x8768, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x877E, 0x878F, 0x878E, 0x878D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x8772, 0x8773, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x876F, 0x8770, 0x8771, 0, /* 0x90 */ + 0, 0x8775, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x8774, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x8783 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x87BD, 0, 0, 0x87A7, 0, 0x87A4, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x87B0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x87A2, 0x87AA, 0x87A3, 0, /* 0x10 */ + 0x87A9, 0, 0, 0, 0, 0, 0x87BE, 0, /* 0x10 */ + 0, 0, 0x87A0, 0x87B2, 0, 0, 0x87B3, 0x87AB, /* 0x20 */ + 0, 0, 0x87BF, 0x87B5, 0, 0, 0, 0, /* 0x20 */ + 0, 0x87C0, 0, 0x87A5, 0, 0, 0x87A8, 0, /* 0x30 */ + 0, 0x87AE, 0, 0x87B4, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x87B1, 0, 0, 0, 0, 0x87C1, /* 0x40 */ + 0, 0x879F, 0x87AD, 0, 0, 0x87A1, 0x87A6, 0, /* 0x40 */ + 0, 0x87AC, 0, 0, 0, 0, 0, 0x87AF, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x87E8, 0x87E7, 0x87E6, 0x87E5, 0x87FA, /* 0x70 */ + 0, 0, 0, 0, 0, 0x865A, 0x865B, 0x865C, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x864A, 0x864C, /* 0x80 */ + 0x8659, 0, 0, 0, 0, 0, 0x864E, 0x864F, /* 0x90 */ + 0x8651, 0, 0, 0, 0x8640, 0x8642, 0x8648, 0x8641, /* 0x90 */ + 0x8643, 0x8646, 0x8649, 0, 0x8644, 0x8647, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x8655, 0x8654, 0x8653, 0x8652, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x864D, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x8658, 0, 0x869C, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x8657 /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* Table _4E to _9F includes the 360 IBM Kanji's we export to all */ +/* formats (SJIS/APPLE_JAPANESE) for better compatibility. These */ +/* characters are also imported from us in all formats. So this */ +/* extension should give better results than the export to the */ +/* replacement character. */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x88EA, 0x929A, 0, 0x8EB5, 0, 0, 0, 0x969C, /* 0x00 */ + 0x8FE4, 0x8E4F, 0x8FE3, 0x89BA, 0, 0x9573, 0x975E, 0, /* 0x00 */ + 0x98A0, 0x894E, 0, 0, 0x8A8E, 0x98A1, 0x90A2, 0x99C0, /* 0x10 */ + 0x8B75, 0x95B8, 0, 0, 0, 0, 0x8FE5, 0, /* 0x10 */ + 0, 0x97BC, 0, 0, 0, 0, 0x95C0, 0, /* 0x20 */ + 0xFA68, 0, 0x98A2, 0, 0, 0x9286, 0, 0, /* 0x20 */ + 0, 0x98A3, 0x8BF8, 0, 0, 0, 0x98A4, 0, /* 0x30 */ + 0x8ADB, 0x924F, 0, 0x8EE5, 0x98A5, 0, 0, 0x98A6, /* 0x30 */ + 0, 0, 0x98A7, 0x9454, 0, 0x8B76, 0, 0, /* 0x40 */ + 0, 0, 0, 0x9456, 0, 0x93E1, 0x8CC1, 0x9652, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE568, 0x98A8, 0x8FE6, /* 0x50 */ + 0x98A9, 0x89B3, 0, 0, 0, 0x8BE3, 0x8CEE, 0x96E7, /* 0x50 */ + 0, 0, 0x9BA4, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x9790, 0, 0x93FB, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x8AA3, 0, /* 0x70 */ + 0x8B54, 0, 0x98AA, 0, 0, 0x98AB, 0x97B9, 0, /* 0x80 */ + 0x975C, 0x9188, 0x98AD, 0x8E96, 0x93F1, 0, 0x98B0, 0, /* 0x80 */ + 0, 0x895D, 0x8CDD, 0, 0x8CDC, 0x88E4, 0, 0, /* 0x90 */ + 0x986A, 0x9869, 0, 0x8DB1, 0x889F, 0, 0x98B1, 0x98B2, /* 0x90 */ + 0x98B3, 0x9653, 0x98B4, 0, 0x8CF0, 0x88E5, 0x9692, 0, /* 0xA0 */ + 0x8B9C, 0, 0, 0x8B9D, 0x8B9E, 0x92E0, 0x97BA, 0, /* 0xA0 */ + 0x98B5, 0, 0, 0x98B6, 0, 0, 0x98B7, 0, /* 0xB0 */ + 0, 0, 0x906C, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x8F59, 0x906D, 0x98BC, 0, 0x98BA, 0, 0x98BB, 0x8B77, /* 0xC0 */ + 0, 0, 0x8DA1, 0x89EE, 0, 0x98B9, 0x98B8, 0x95A7, /* 0xC0 */ + 0, 0, 0, 0, 0x8E65, 0x8E64, 0x91BC, 0x98BD, /* 0xD0 */ + 0x9574, 0x90E5, 0, 0, 0, 0x8157, 0x98BE, 0x98C0, /* 0xD0 */ + 0, 0xFA69, 0, 0x91E3, 0x97DF, 0x88C8, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x98BF, 0x89BC, 0, /* 0xE0 */ + 0x8BC2, 0, 0x9287, 0, 0, 0, 0x8C8F, 0x98C1, /* 0xF0 */ + 0, 0, 0, 0x9443, 0xFA6A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFA6B, 0x8AE9, 0, 0xFA6C, 0, 0, 0, 0, /* 0x00 */ + 0, 0x98C2, 0x88C9, 0, 0, 0x8CDE, 0x8AEA, 0x959A, /* 0x00 */ + 0x94B0, 0x8B78, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x89EF, 0, 0x98E5, 0x9360, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x948C, /* 0x20 */ + 0x98C4, 0, 0, 0, 0x94BA, 0, 0x97E0, 0, /* 0x30 */ + 0x904C, 0xFA6D, 0x8E66, 0, 0x8E97, 0x89BE, 0, 0, /* 0x30 */ + 0, 0, 0, 0x92CF, 0, 0, 0x9241, 0x98C8, /* 0x40 */ + 0, 0, 0, 0, 0, 0x88CA, 0x92E1, 0x8F5A, /* 0x40 */ + 0x8DB2, 0x9743, 0, 0x91CC, 0, 0x89BD, 0xFA6E, 0x98C7, /* 0x50 */ + 0, 0x975D, 0x98C3, 0x98C5, 0x8DEC, 0x98C6, 0x9B43, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x98CE, 0, 0, 0, 0, 0, 0x98D1, /* 0x60 */ + 0x98CF, 0, 0, 0x89C0, 0, 0x95B9, 0x98C9, 0, /* 0x70 */ + 0, 0, 0, 0x98CD, 0x8CF1, 0, 0, 0x8E67, /* 0x70 */ + 0, 0, 0, 0x8AA4, 0, 0, 0x98D2, 0, /* 0x80 */ + 0x98CA, 0, 0xFA70, 0x97E1, 0, 0x8E98, 0, 0x98CB, /* 0x80 */ + 0, 0x98D0, 0xFA6F, 0, 0xFA72, 0, 0x98D3, 0, /* 0x90 */ + 0x98CC, 0, 0xFA71, 0x8B9F, 0, 0x88CB, 0, 0, /* 0x90 */ + 0x8BA0, 0x89BF, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x9B44, 0, 0x9699, 0x958E, 0x8CF2, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x904E, 0x97B5, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x95D6, /* 0xB0 */ + 0, 0, 0x8C57, 0x91A3, 0x89E2, 0, 0, 0, /* 0xC0 */ + 0, 0xFA61, 0x8F72, 0, 0, 0xFA73, 0x98D7, 0, /* 0xC0 */ + 0x98DC, 0x98DA, 0, 0, 0x98D5, 0, 0, 0x91AD, /* 0xD0 */ + 0x98D8, 0, 0x98DB, 0x98D9, 0, 0x95DB, 0, 0x98D6, /* 0xD0 */ + 0, 0x904D, 0, 0x9693, 0x98DD, 0x98DE, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x8F43, 0x98EB, /* 0xE0 */ + 0, 0, 0, 0x946F, 0, 0x9555, 0x98E6, 0, /* 0xF0 */ + 0x95EE, 0, 0x89B4, 0, 0, 0, 0x98EA, 0xFA76 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x98E4, 0x98ED, 0, /* 0x00 */ + 0, 0x9171, 0, 0x8CC2, 0, 0x947B, 0, 0xE0C5, /* 0x00 */ + 0, 0x98EC, 0x937C, 0, 0x98E1, 0, 0x8CF4, 0, /* 0x10 */ + 0, 0x8CF3, 0x98DF, 0, 0, 0, 0xFA77, 0x8ED8, /* 0x10 */ + 0, 0x98E7, 0xFA75, 0x95ED, 0x926C, 0x98E3, 0x8C91, 0, /* 0x20 */ + 0x98E0, 0x98E8, 0x98E2, 0x97CF, 0x98E9, 0x9860, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x8BE4, 0, /* 0x30 */ + 0, 0x8C90, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xFA74, 0, 0xFA7A, 0x98EE, 0, 0, 0xFA78, 0x98EF, /* 0x40 */ + 0x98F3, 0x88CC, 0, 0, 0, 0, 0, 0x95CE, /* 0x40 */ + 0x98F2, 0, 0, 0, 0, 0x98F1, 0x98F5, 0, /* 0x50 */ + 0, 0, 0x98F4, 0, 0x92E2, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x8C92, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x98F6, 0, 0, 0, /* 0x60 */ + 0xFA79, 0, 0x8EC3, 0, 0x91A4, 0x92E3, 0x8BF4, 0, /* 0x70 */ + 0x98F7, 0, 0, 0, 0, 0x8B55, 0, 0, /* 0x70 */ + 0x98F8, 0, 0, 0, 0, 0x98FA, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x9654, 0, 0, /* 0x80 */ + 0, 0x8C86, 0, 0, 0xFA7B, 0, 0, 0, /* 0x90 */ + 0x8E50, 0x94F5, 0x98F9, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x8DC3, 0x9762, 0, 0, /* 0xA0 */ + 0, 0, 0x98FC, 0x9942, 0x98FB, 0x8DC2, 0, 0x8F9D, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x8C58, 0, /* 0xB0 */ + 0, 0, 0x9943, 0, 0, 0x8BCD, 0, 0, /* 0xC0 */ + 0, 0x9940, 0x9941, 0, 0, 0x93AD, 0, 0x919C, /* 0xC0 */ + 0, 0x8BA1, 0, 0, 0, 0x966C, 0x9944, 0, /* 0xD0 */ + 0xFA7D, 0, 0x97BB, 0, 0, 0, 0x9945, 0, /* 0xD0 */ + 0, 0, 0, 0x9948, 0, 0x9946, 0, 0x916D, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x9947, 0x9949, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xFA7C, 0x994B, 0, 0, /* 0xF0 */ + 0, 0x994A, 0, 0x95C6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B56, 0x994D, 0x994E, 0, 0x89AD, 0, 0, 0, /* 0x00 */ + 0, 0x994C, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x8EF2, 0, 0x9951, 0x9950, 0x994F, 0, /* 0x10 */ + 0x98D4, 0, 0x9952, 0, 0, 0, 0, 0x8F9E, /* 0x10 */ + 0, 0x9953, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x9744, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x96D7, 0, 0, 0, 0, 0x9955, /* 0x30 */ + 0, 0, 0x9954, 0x9957, 0x9956, 0, 0, 0x9958, /* 0x30 */ + 0x9959, 0x88F2, 0, 0x8CB3, 0x8C5A, 0x8F5B, 0x929B, 0x8BA2, /* 0x40 */ + 0x90E6, 0x8CF5, 0xFA7E, 0x8D8E, 0x995B, 0x96C6, 0x9365, 0, /* 0x40 */ + 0x8E99, 0, 0x995A, 0, 0x995C, 0, 0, 0, /* 0x50 */ + 0, 0, 0x937D, 0, 0x8A95, 0, 0, 0, /* 0x50 */ + 0, 0, 0x995D, 0, 0xFA80, 0x93FC, 0, 0, /* 0x60 */ + 0x9153, 0x995F, 0x9960, 0x94AA, 0x8CF6, 0x985A, 0x9961, 0, /* 0x60 */ + 0, 0x8BA4, 0, 0, 0, 0x95BA, 0x91B4, 0x8BEF, /* 0x70 */ + 0x9354, 0, 0, 0, 0x8C93, 0, 0, 0, /* 0x70 */ + 0x9962, 0, 0x9963, 0, 0, 0x93E0, 0x897E, 0, /* 0x80 */ + 0, 0x9966, 0x8DFB, 0, 0x9965, 0x8DC4, 0, 0x9967, /* 0x80 */ + 0xE3EC, 0x9968, 0x9660, 0x9969, 0, 0x996A, 0x996B, 0x8FE7, /* 0x90 */ + 0, 0x8ECA, 0, 0, 0, 0xFA81, 0, 0, /* 0x90 */ + 0x8AA5, 0, 0x996E, 0, 0x996C, 0x96BB, 0x996D, 0, /* 0xA0 */ + 0x9579, 0x996F, 0x9970, 0x9971, 0x937E, 0, 0, 0, /* 0xA0 */ + 0x9975, 0x9973, 0x9974, 0x9972, 0x8DE1, 0x9976, 0x96E8, 0x97E2, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x9977, 0xFA82, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x90A6, 0x9978, 0x8F79, 0, /* 0xC0 */ + 0, 0x9979, 0, 0x929C, 0x97BD, 0x9380, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x99C3, 0, /* 0xD0 */ + 0, 0, 0, 0x997A, 0xEAA3, 0x8BC3, 0, 0, /* 0xD0 */ + 0x997B, 0x967D, 0, 0, 0, 0, 0x8F88, 0x91FA, /* 0xE0 */ + 0, 0x997D, 0x93E2, 0, 0xFA83, 0x997E, 0, 0, /* 0xE0 */ + 0x9980, 0x8A4D, 0, 0, 0, 0x9981, 0x8BA5, 0, /* 0xF0 */ + 0x93CA, 0x899A, 0x8F6F, 0, 0, 0x949F, 0x9982 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9381, 0, 0, 0x906E, 0x9983, 0, 0x95AA, 0x90D8, /* 0x00 */ + 0x8AA0, 0, 0x8AA7, 0x9984, 0, 0, 0x9986, 0, /* 0x00 */ + 0, 0x8C59, 0, 0, 0x9985, 0xFA84, 0, 0x97F1, /* 0x10 */ + 0, 0, 0, 0, 0, 0x8F89, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x94BB, 0x95CA, 0, 0x9987, /* 0x20 */ + 0, 0x9798, 0x9988, 0, 0, 0, 0x9989, 0, /* 0x20 */ + 0x939E, 0, 0, 0x998A, 0, 0, 0x90A7, 0x8DFC, /* 0x30 */ + 0x8C94, 0x998B, 0x8E68, 0x8D8F, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x92E4, 0x998D, 0, 0, 0x91A5, /* 0x40 */ + 0, 0, 0x8DED, 0x998E, 0x998F, 0x914F, 0, 0x998C, /* 0x40 */ + 0, 0, 0, 0, 0x9991, 0, 0x9655, 0, /* 0x50 */ + 0, 0, 0, 0x8D84, 0, 0, 0x9990, 0, /* 0x50 */ + 0, 0, 0, 0x8C95, 0x8DDC, 0x948D, 0, 0, /* 0x60 */ + 0, 0x9994, 0x9992, 0, 0, 0, 0, 0x959B, /* 0x60 */ + 0x8FE8, 0x999B, 0x8A84, 0x9995, 0x9993, 0x916E, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x9997, 0, 0x9996, /* 0x70 */ + 0, 0, 0, 0x8A63, 0, 0, 0, 0x8C80, /* 0x80 */ + 0x999C, 0x97AB, 0, 0, 0, 0x9998, 0, 0, /* 0x80 */ + 0, 0x999D, 0x999A, 0, 0x9999, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x97CD, 0xFA85, 0, 0, 0x8CF7, /* 0x90 */ + 0x89C1, 0, 0, 0x97F2, 0, 0, 0xFA86, 0, /* 0xA0 */ + 0, 0x8F95, 0x9377, 0x8D85, 0x99A0, 0x99A1, 0, 0xFB77, /* 0xA0 */ + 0, 0x97E3, 0, 0, 0x984A, 0x99A3, 0, 0, /* 0xB0 */ + 0, 0x8CF8, 0, 0, 0x99A2, 0, 0x8A4E, 0, /* 0xB0 */ + 0xFA87, 0x99A4, 0, 0x9675, 0, 0x92BA, 0, 0x9745, /* 0xC0 */ + 0, 0x95D7, 0, 0, 0, 0x99A5, 0, 0, /* 0xC0 */ + 0, 0, 0xE8D3, 0, 0, 0x93AE, 0, 0x99A6, /* 0xD0 */ + 0x8AA8, 0x96B1, 0, 0xFA88, 0, 0x8F9F, 0x99A7, 0x95E5, /* 0xD0 */ + 0x99AB, 0, 0x90A8, 0x99A8, 0x8BCE, 0, 0x99A9, 0x8AA9, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x8C4D, 0x99AC, 0, 0x99AD, 0, 0, /* 0xF0 */ + 0x99AE, 0x99AF, 0x8ED9, 0, 0, 0, 0x8CF9, 0x96DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFA89, 0x96E6, 0x93F5, 0, 0, 0x95EF, 0x99B0, 0xFA8A, /* 0x00 */ + 0x99B1, 0, 0, 0, 0, 0x99B3, 0, 0x99B5, /* 0x00 */ + 0x99B4, 0, 0, 0, 0, 0x99B6, 0x89BB, 0x966B, /* 0x10 */ + 0, 0x8DFA, 0x99B7, 0, 0, 0x9178, 0, 0, /* 0x10 */ + 0x8FA0, 0x8BA7, 0, 0x99B8, 0xFA8B, 0, 0, 0, /* 0x20 */ + 0, 0, 0x94D9, 0, 0, 0, 0, 0x99B9, /* 0x20 */ + 0, 0x99BA, 0, 0x99BB, 0, 0, 0, 0, /* 0x30 */ + 0x99BC, 0x9543, 0x8BE6, 0x88E3, 0, 0, 0, 0x93BD, /* 0x30 */ + 0x99BD, 0x8F5C, 0, 0x90E7, 0, 0x99BF, 0x99BE, 0x8FA1, /* 0x40 */ + 0x8CDF, 0x99C1, 0x94BC, 0, 0, 0x99C2, 0, 0, /* 0x40 */ + 0, 0x94DA, 0x91B2, 0x91EC, 0x8BA6, 0, 0, 0x93EC, /* 0x50 */ + 0x9250, 0, 0x948E, 0, 0x966D, 0, 0x99C4, 0, /* 0x50 */ + 0x90E8, 0, 0, 0, 0, 0, 0x8C54, 0, /* 0x60 */ + 0, 0x99C5, 0, 0, 0, 0, 0x99C6, 0x894B, /* 0x60 */ + 0x88F3, 0x8AEB, 0xFA8C, 0x91A6, 0x8B70, 0x9791, 0, 0x99C9, /* 0x70 */ + 0x89B5, 0, 0, 0x99C8, 0, 0, 0, 0x8BA8, /* 0x70 */ + 0, 0, 0x99CA, 0, 0x96EF, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xFA8D, 0, 0, 0x99CB, 0, /* 0x90 */ + 0x97D0, 0, 0x8CFA, 0, 0, 0, 0, 0x8CB4, /* 0x90 */ + 0x99CC, 0, 0, 0, 0, 0x99CE, 0x99CD, 0, /* 0xA0 */ + 0x907E, 0x8958, 0, 0, 0, 0x897D, 0x99CF, 0, /* 0xA0 */ + 0x99D0, 0, 0xFA8E, 0x8CB5, 0, 0, 0x99D1, 0, /* 0xB0 */ + 0, 0, 0, 0x8B8E, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x8E51, 0x99D2, 0, 0, 0, 0, /* 0xC0 */ + 0x9694, 0x8DB3, 0x8B79, 0x9746, 0x916F, 0x94BD, 0x8EFB, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x8F66, 0, 0x8EE6, 0x8EF3, /* 0xD0 */ + 0, 0x8F96, 0, 0x94BE, 0, 0xFA8F, 0, 0x99D5, /* 0xD0 */ + 0, 0x8962, 0x9170, 0x8CFB, 0x8CC3, 0x8BE5, 0, 0, /* 0xE0 */ + 0x99D9, 0x9240, 0x91FC, 0x8BA9, 0x8FA2, 0x99DA, 0x99D8, 0x89C2, /* 0xE0 */ + 0x91E4, 0x8EB6, 0x8E6A, 0x8945, 0, 0, 0x8A90, 0x8D86, /* 0xF0 */ + 0x8E69, 0, 0x99DB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x99DC, 0, 0x8B68, 0x8A65, 0, 0, 0, /* 0x00 */ + 0x8D87, 0x8B67, 0x92DD, 0x8944, 0x93AF, 0x96BC, 0x8D40, 0x9799, /* 0x00 */ + 0x9366, 0x8CFC, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x8C4E, 0, 0x99E5, 0, 0x8BE1, /* 0x10 */ + 0x9669, 0, 0, 0, 0, 0, 0x94DB, 0, /* 0x20 */ + 0, 0x99E4, 0, 0x8ADC, 0x99DF, 0x99E0, 0x99E2, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x99E3, 0, /* 0x30 */ + 0x8B7A, 0x9081, 0, 0x95AB, 0x99E1, 0x99DD, 0x8CE1, 0, /* 0x30 */ + 0x99DE, 0, 0x9843, 0, 0, 0, 0x95F0, 0, /* 0x40 */ + 0x92E6, 0x8CE0, 0x8D90, 0, 0, 0, 0x99E6, 0, /* 0x40 */ + 0, 0x93DB, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x99EA, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x8EFC, 0, 0x8EF4, 0, 0, 0, 0, 0, /* 0x60 */ + 0x99ED, 0x99EB, 0, 0x96A1, 0, 0x99E8, 0x99F1, 0x99EC, /* 0x70 */ + 0, 0, 0, 0x99EF, 0x8CC4, 0x96BD, 0, 0, /* 0x70 */ + 0x99F0, 0, 0, 0, 0x99F2, 0, 0x99F4, 0, /* 0x80 */ + 0, 0, 0xFA92, 0x8DEE, 0x9861, 0, 0x99E9, 0x99E7, /* 0x80 */ + 0x99F3, 0, 0x99EE, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xFA91, 0, 0, 0, /* 0x90 */ + 0, 0, 0x99F6, 0, 0x9A42, 0x99F8, 0, 0, /* 0xA0 */ + 0x99FC, 0xFA93, 0, 0x9A40, 0x99F9, 0, 0, 0x9A5D, /* 0xA0 */ + 0, 0, 0x8DE7, 0x8A50, 0, 0, 0, 0, /* 0xB0 */ + 0x99F7, 0, 0, 0, 0x9A44, 0x88F4, 0x9A43, 0, /* 0xB0 */ + 0x88A3, 0x9569, 0x9A41, 0, 0x99FA, 0, 0, 0x99F5, /* 0xC0 */ + 0x99FB, 0x8DC6, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x9A45, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x88F5, 0x9A4E, 0, 0, 0x9A46, 0x9A47, 0, /* 0xE0 */ + 0x8FA3, 0x9689, 0, 0, 0, 0x9A4C, 0x9A4B, 0, /* 0xE0 */ + 0, 0, 0x934E, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x9A4D, 0, 0, 0x9A4A, 0, 0xFA94 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8953, 0, 0x8DB4, 0x904F, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x9A48, /* 0x00 */ + 0x9382, 0, 0, 0, 0x9A49, 0, 0x88A0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x9A53, 0x9742, /* 0x20 */ + 0, 0x8FA5, 0, 0x9A59, 0, 0, 0, 0, /* 0x30 */ + 0x9A58, 0x9A4F, 0, 0, 0, 0, 0x91C1, 0, /* 0x30 */ + 0x9A50, 0, 0, 0, 0x91ED, 0x9A55, 0x8FA4, 0, /* 0x40 */ + 0, 0, 0, 0, 0x9A52, 0, 0, 0x96E2, /* 0x40 */ + 0, 0, 0, 0x8C5B, 0, 0, 0x9A56, 0x9A57, /* 0x50 */ + 0, 0, 0, 0, 0x9A54, 0x9A5A, 0, 0, /* 0x50 */ + 0, 0, 0, 0x9A51, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x9A60, 0x9A65, 0, 0x9A61, 0, /* 0x70 */ + 0x9A5C, 0, 0, 0x9A66, 0x9150, 0, 0xFA95, 0x9A68, /* 0x80 */ + 0, 0x8D41, 0x9A5E, 0x929D, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x9A62, 0x9A5B, 0x8AAB, 0, 0x8AEC, 0x8A85, 0x9A63, 0x9A5F, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x8C96, /* 0xA0 */ + 0x9A69, 0x9A67, 0x9172, 0x8B69, 0x8BAA, 0, 0x9A64, 0, /* 0xA0 */ + 0x8BF2, 0, 0, 0, 0, 0, 0x8963, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x9A6D, 0x9A6B, 0, 0x9AA5, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x9A70, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x9A6A, 0, 0x9A6E, 0, 0, 0x9A6C, /* 0xD0 */ + 0, 0, 0, 0x8E6B, 0x9A6F, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x9A72, /* 0xF0 */ + 0, 0x9A77, 0, 0, 0, 0x9A75, 0x9A74 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9251, 0, /* 0x00 */ + 0, 0x89C3, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x9A71, 0, 0x9A73, 0x8FA6, /* 0x10 */ + 0x8952, 0, 0, 0x9A76, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x89DC, 0, 0, 0, 0, 0, 0x9A82, /* 0x20 */ + 0, 0x8FFA, 0x9A7D, 0, 0x9A7B, 0, 0x9A7C, 0, /* 0x30 */ + 0x9A7E, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x895C, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x9158, 0, 0x9A78, 0, /* 0x40 */ + 0x9A79, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x8A9A, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x9A81, 0, 0, 0, /* 0x60 */ + 0x8AED, 0, 0x9A84, 0x9A80, 0x9A83, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x95AC, 0, 0, 0, /* 0x70 */ + 0x93D3, 0, 0x94B6, 0, 0, 0, 0, 0, /* 0x70 */ + 0x9A86, 0, 0, 0, 0, 0, 0x9A85, 0x8A64, /* 0x80 */ + 0, 0, 0x9A87, 0, 0, 0, 0, 0x9A8A, /* 0x80 */ + 0, 0, 0, 0, 0x9A89, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x9A88, 0, 0x9458, 0, 0, 0x9A8B, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x9A8C, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x9A8E, 0, 0x9A8D, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x9A90, 0, 0, 0, /* 0xB0 */ + 0x9A93, 0x9A91, 0x9A8F, 0x9A92, 0, 0, 0, 0, /* 0xC0 */ + 0x9A94, 0, 0, 0, 0, 0, 0x9A95, 0, /* 0xC0 */ + 0, 0x9A96, 0, 0x9A97, 0, 0, 0, 0x9A98, /* 0xD0 */ + 0x9964, 0, 0x8EFA, 0x8E6C, 0, 0, 0x89F1, 0, /* 0xD0 */ + 0x88F6, 0, 0, 0x9263, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x9A99, 0, /* 0xE0 */ + 0x8DA2, 0, 0x88CD, 0x907D, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x9A9A, 0x8CC5, 0, 0, 0x8D91, 0, 0x9A9C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9A9B, 0, 0, 0x95DE, 0x9A9D, 0, 0, 0, /* 0x00 */ + 0x9A9F, 0x9A9E, 0, 0x9AA0, 0, 0x9AA1, 0, 0x8C97, /* 0x00 */ + 0, 0, 0x8980, 0x9AA2, 0, 0, 0x9AA4, 0, /* 0x10 */ + 0x9AA3, 0, 0, 0, 0x9AA6, 0, 0, 0x9379, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x9AA7, 0x88B3, /* 0x20 */ + 0x8DDD, 0, 0, 0, 0, 0x8C5C, 0, 0, /* 0x20 */ + 0x926E, 0, 0, 0, 0, 0, 0, 0x9AA8, /* 0x30 */ + 0x9AA9, 0, 0, 0x9AAB, 0, 0, 0, 0, /* 0x30 */ + 0x9AAC, 0, 0x8DE2, 0, 0, 0, 0, 0x8BCF, /* 0x40 */ + 0, 0, 0x9656, 0, 0, 0, 0x9AAA, 0x9AAD, /* 0x40 */ + 0x8DBF, 0x8D42, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xFA96, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x9AB1, 0, 0, 0x8DA3, 0xFA97, 0x9252, 0, /* 0x60 */ + 0, 0x9AAE, 0x92D8, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x9AB2, /* 0x70 */ + 0, 0, 0x9082, 0, 0, 0, 0, 0, /* 0x80 */ + 0x9AB0, 0x9AB3, 0, 0x8C5E, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x9AB4, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x9AB5, 0, 0x8D43, 0x8A5F, 0x9AB7, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x9AB8, 0, 0xFA98, 0, 0, 0, /* 0xA0 */ + 0x9AB9, 0, 0, 0x9AB6, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x9AAF, 0, 0, 0x9ABA, 0, 0, 0x9ABB, 0xFA9A, /* 0xC0 */ + 0xFA99, 0, 0, 0x9684, 0, 0, 0x8FE9, 0, /* 0xC0 */ + 0, 0, 0x9ABD, 0x9ABE, 0x9ABC, 0, 0x9AC0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x9457, 0, 0, 0x88E6, /* 0xD0 */ + 0x9575, 0, 0, 0x9AC1, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x8FFB, 0, 0, 0x8EB7, /* 0xF0 */ + 0, 0x947C, 0x8AEE, 0, 0x8DE9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9678, 0, 0x93B0, 0, 0, 0x8C98, 0x91CD, 0, /* 0x00 */ + 0, 0, 0x9ABF, 0x9AC2, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x91C2, 0, 0, /* 0x10 */ + 0, 0x9AC3, 0, 0, 0, 0x9AC4, 0, 0, /* 0x10 */ + 0, 0x9AC6, 0, 0, 0x92E7, 0, 0, 0, /* 0x20 */ + 0, 0, 0x8AAC, 0, 0, 0, 0, 0xEA9F, /* 0x20 */ + 0x8981, 0x95F1, 0, 0, 0x8FEA, 0x9367, 0, 0, /* 0x30 */ + 0, 0, 0x8DE4, 0, 0, 0x9ACC, 0, 0, /* 0x30 */ + 0x95BB, 0x97DB, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x89F2, 0x9AC8, 0, 0, 0, 0, /* 0x40 */ + 0, 0x9159, 0x9ACB, 0, 0x9383, 0, 0, 0x9368, /* 0x50 */ + 0x9384, 0x94B7, 0x92CB, 0, 0, 0, 0x8DC7, 0, /* 0x50 */ + 0, 0, 0x9AC7, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x8996, 0, 0x9355, 0, 0, 0, 0, /* 0x60 */ + 0x9AC9, 0, 0x9AC5, 0, 0, 0x906F, 0, 0, /* 0x70 */ + 0, 0x9ACD, 0, 0, 0, 0, 0x8F6D, 0, /* 0x70 */ + 0, 0, 0, 0x8BAB, 0, 0x9ACE, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x95E6, 0, 0, 0, 0x919D, /* 0x90 */ + 0, 0, 0, 0, 0x92C4, 0, 0xFA9D, 0x9AD0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x966E, 0, 0, 0x9AD1, 0, 0, 0x9AD6, 0, /* 0xA0 */ + 0, 0, 0xFA9E, 0x95AD, 0, 0, 0, 0, /* 0xB0 */ + 0x9AD5, 0x9ACF, 0x9AD2, 0x9AD4, 0, 0, 0x8DA4, 0, /* 0xB0 */ + 0, 0x95C7, 0, 0, 0, 0x9AD7, 0, 0x9264, /* 0xC0 */ + 0, 0, 0x89F3, 0, 0x8FEB, 0, 0, 0, /* 0xC0 */ + 0, 0x9AD9, 0, 0x9AD8, 0, 0x8D88, 0, 0x9ADA, /* 0xD0 */ + 0x9ADC, 0x9ADB, 0, 0, 0x9ADE, 0, 0x9AD3, 0x9AE0, /* 0xD0 */ + 0, 0, 0, 0, 0x9ADF, 0x9ADD, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x8E6D, 0x9070, 0, 0x9173, 0x9AE1, /* 0xE0 */ + 0x90BA, 0x88EB, 0x9484, 0, 0, 0, 0, 0x92D9, /* 0xF0 */ + 0, 0x9AE3, 0x9AE2, 0x9AE4, 0x9AE5, 0x9AE6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9AE7, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x95CF, 0x9AE8, 0xFA9F, 0, 0, 0, 0x89C4, /* 0x00 */ + 0x9AE9, 0, 0, 0, 0, 0x975B, 0x8A4F, 0, /* 0x10 */ + 0x99C7, 0x8F67, 0x91BD, 0x9AEA, 0x96E9, 0, 0, 0, /* 0x10 */ + 0, 0, 0x96B2, 0, 0, 0x9AEC, 0, 0x91E5, /* 0x20 */ + 0, 0x9356, 0x91BE, 0x9576, 0x9AED, 0x9AEE, 0x899B, 0, /* 0x20 */ + 0, 0x8EB8, 0x9AEF, 0, 0, 0, 0, 0x88CE, /* 0x30 */ + 0x9AF0, 0, 0, 0, 0, 0, 0x9AF1, 0, /* 0x30 */ + 0, 0, 0, 0, 0x8982, 0, 0, 0x8AEF, /* 0x40 */ + 0x93DE, 0x95F2, 0, 0, 0, 0, 0x9AF5, 0x9174, /* 0x40 */ + 0x9AF4, 0x8C5F, 0, 0xFAA0, 0x967A, 0x9AF3, 0, 0x9385, /* 0x50 */ + 0x9AF7, 0, 0x9AF6, 0xFAA1, 0, 0xFAA2, 0, 0, /* 0x50 */ + 0x9AF9, 0, 0x9AF8, 0xFAA3, 0, 0x899C, 0, 0x9AFA, /* 0x60 */ + 0x8FA7, 0x9AFC, 0x9244, 0, 0x9AFB, 0, 0x95B1, 0, /* 0x60 */ + 0, 0, 0, 0x8F97, 0x937A, 0, 0, 0, /* 0x70 */ + 0x9B40, 0, 0, 0, 0, 0x8D44, 0, 0, /* 0x70 */ + 0, 0x9B41, 0x9440, 0x94DC, 0x96CF, 0, 0, 0, /* 0x80 */ + 0, 0, 0x9444, 0, 0, 0x9B4A, 0, 0, /* 0x80 */ + 0, 0, 0, 0x8B57, 0, 0, 0x9764, 0, /* 0x90 */ + 0, 0x96AD, 0, 0x9BAA, 0, 0x9B42, 0, 0, /* 0x90 */ + 0, 0, 0, 0x9B45, 0xFAA4, 0x91C3, 0, 0, /* 0xA0 */ + 0x9657, 0, 0, 0, 0x9369, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x9B46, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x9685, 0xFAA5, 0x8DC8, 0, 0, 0x8FA8, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x9B47, 0, /* 0xC0 */ + 0, 0x8E6F, 0, 0x8E6E, 0, 0, 0, 0, /* 0xC0 */ + 0x88B7, 0x8CC6, 0, 0x90A9, 0x88CF, 0, 0, 0, /* 0xD0 */ + 0, 0x9B4B, 0x9B4C, 0, 0x9B49, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x8957, 0x8AAD, 0, /* 0xE0 */ + 0x9B48, 0, 0x96C3, 0x9550, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x88A6, 0, /* 0xF0 */ + 0, 0, 0, 0x88F7, 0, 0, 0, 0x8E70 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x88D0, 0, 0x88A1, 0, 0, 0, 0, /* 0x00 */ + 0, 0x9B51, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x9B4F, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x96BA, 0, 0x9B52, 0, 0x9B50, 0, 0, 0x9B4E, /* 0x10 */ + 0x9050, 0, 0, 0, 0, 0x9B4D, 0, 0, /* 0x20 */ + 0, 0x95D8, 0, 0, 0, 0, 0, 0x8CE2, /* 0x20 */ + 0, 0, 0, 0, 0, 0x9B56, 0x9B57, 0, /* 0x30 */ + 0, 0, 0, 0, 0x8FA9, 0, 0, 0, /* 0x30 */ + 0x9B53, 0x984B, 0, 0, 0, 0, 0x946B, 0, /* 0x40 */ + 0, 0x9B55, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x8DA5, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x9B58, 0, 0, 0, 0x9577, 0, /* 0x60 */ + 0, 0, 0x9B59, 0, 0x9B54, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x96B9, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x947D, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x9B5A, 0x9551, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x9B5B, 0x9B5F, 0x9B5C, 0, /* 0xB0 */ + 0, 0x89C5, 0x9B5E, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x8EB9, 0, 0x9B5D, 0x8C99, 0, 0, 0, /* 0xC0 */ + 0x9B6B, 0, 0, 0, 0, 0, 0x9B64, 0x9B61, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x9284, 0, 0x9B60, 0, 0, 0x9B62, 0, /* 0xE0 */ + 0, 0x9B63, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x9B65, 0x9B66 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x8AF0, 0, 0x9B68, 0x9B67, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x9B69, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x8FEC, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x9B6C, 0, 0x92DA, 0, 0, 0, /* 0x20 */ + 0x8964, 0, 0x9B6A, 0, 0, 0, 0x9B6D, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x9B6E, 0, /* 0x30 */ + 0x9B71, 0, 0, 0x9B6F, 0, 0x9B70, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x8E71, 0x9B72, 0, 0, 0x8D45, 0x9B73, 0xFAA6, 0x8E9A, /* 0x50 */ + 0x91B6, 0, 0x9B74, 0x9B75, 0x8E79, 0x8D46, 0, 0x96D0, /* 0x50 */ + 0, 0, 0, 0x8B47, 0x8CC7, 0x9B76, 0x8A77, 0, /* 0x60 */ + 0, 0x9B77, 0, 0x91B7, 0, 0, 0, 0, /* 0x60 */ + 0x9B78, 0x9BA1, 0, 0x9B79, 0, 0x9B7A, 0, 0, /* 0x70 */ + 0x9B7B, 0, 0x9B7D, 0, 0, 0, 0, 0, /* 0x70 */ + 0x9B7E, 0, 0, 0x9B80, 0, 0x91EE, 0, 0x8946, /* 0x80 */ + 0x8EE7, 0x88C0, 0, 0x9176, 0x8AAE, 0x8EB3, 0, 0x8D47, /* 0x80 */ + 0, 0, 0, 0, 0, 0x9386, 0, 0x8F40, /* 0x90 */ + 0x8AAF, 0x9288, 0x92E8, 0x88B6, 0x8B58, 0x95F3, 0, 0x8EC0, /* 0x90 */ + 0, 0, 0x8B71, 0x90E9, 0x8EBA, 0x9747, 0x9B81, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x8B7B, 0, /* 0xA0 */ + 0x8DC9, 0, 0, 0x8A51, 0x8983, 0x8FAA, 0x89C6, 0, /* 0xB0 */ + 0x9B82, 0x9765, 0, 0, 0, 0, 0, 0x8F68, /* 0xB0 */ + 0xFAA7, 0, 0x8EE2, 0x9B83, 0x8AF1, 0x93D0, 0x96A7, 0x9B84, /* 0xC0 */ + 0, 0x9B85, 0, 0, 0x9578, 0, 0, 0, /* 0xC0 */ + 0x9B87, 0, 0x8AA6, 0x8BF5, 0x9B86, 0, 0, 0, /* 0xD0 */ + 0xFAA9, 0, 0, 0x8AB0, 0, 0x9051, 0x9B8B, 0x8E40, /* 0xD0 */ + 0, 0x89C7, 0x9B8A, 0, 0x9B88, 0x9B8C, 0x9B89, 0x944A, /* 0xE0 */ + 0x9ECB, 0x9052, 0, 0x9B8D, 0xFAAA, 0, 0x97BE, 0, /* 0xE0 */ + 0x9B8E, 0, 0, 0x9B90, 0, 0x929E, 0x9B8F, 0, /* 0xF0 */ + 0x90A1, 0, 0x8E9B, 0, 0, 0, 0x91CE, 0x8EF5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9595, 0x90EA, 0, 0x8ECB, 0x9B91, 0x8FAB, 0x9B92, /* 0x00 */ + 0x9B93, 0x88D1, 0x91B8, 0x9071, 0, 0x9B94, 0x93B1, 0x8FAC, /* 0x00 */ + 0, 0x8FAD, 0, 0x9B95, 0, 0, 0x90EB, 0, /* 0x10 */ + 0, 0, 0x8FAE, 0, 0, 0, 0xFAAB, 0, /* 0x10 */ + 0x9B96, 0, 0x9B97, 0, 0x96DE, 0, 0, 0, /* 0x20 */ + 0x9B98, 0, 0, 0, 0, 0x8BC4, 0, 0, /* 0x20 */ + 0, 0x8F41, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x9B99, 0x9B9A, 0x8EDA, 0x904B, 0x93F2, 0x9073, 0x94F6, 0x9441, /* 0x30 */ + 0x8BC7, 0x9B9B, 0, 0, 0, 0x8B8F, 0x9B9C, 0, /* 0x40 */ + 0x8BFC, 0, 0x93CD, 0x89AE, 0, 0x8E72, 0x9B9D, 0x9BA0, /* 0x40 */ + 0x9B9F, 0x8BFB, 0, 0x9B9E, 0, 0x9357, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x91AE, 0, /* 0x50 */ + 0x936A, 0x8EC6, 0, 0, 0x9177, 0x979A, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x9BA2, 0, 0x9BA3, 0x93D4, /* 0x60 */ + 0, 0x8E52, 0, 0, 0, 0, 0x9BA5, 0, /* 0x70 */ + 0, 0x9BA6, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x9BA7, 0, 0, 0, /* 0x80 */ + 0x8AF2, 0x9BA8, 0, 0, 0x9BA9, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x89AA, 0, 0, 0, 0, 0xFAAC, 0, /* 0xA0 */ + 0x915A, 0x8AE2, 0, 0x9BAB, 0x96A6, 0, 0, 0, /* 0xA0 */ + 0, 0x91D0, 0, 0x8A78, 0, 0, 0x9BAD, 0x9BAF, /* 0xB0 */ + 0x8ADD, 0, 0xFAAD, 0x9BAC, 0x9BAE, 0, 0x9BB1, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x9BB0, 0, 0x9BB2, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x9BB3, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x93BB, 0x8BAC, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x89E3, 0x9BB4, 0x9BB9, 0, 0, 0x9BB7, 0, 0x95F5, /* 0xE0 */ + 0x95F4, 0, 0, 0, 0, 0xFAAE, 0x9387, 0, /* 0xF0 */ + 0, 0, 0x9BB6, 0x8F73, 0, 0x9BB5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9092, /* 0x00 */ + 0, 0, 0, 0x9BBA, 0, 0, 0x8DE8, 0, /* 0x00 */ + 0, 0x9BC0, 0, 0, 0x9BC1, 0x9BBB, 0x8A52, 0x9BBC, /* 0x10 */ + 0x9BC5, 0x9BC4, 0x9BC3, 0x9BBF, 0, 0, 0, 0x9BBE, /* 0x10 */ + 0, 0, 0x9BC2, 0, 0, 0, 0, 0xFAAF, /* 0x20 */ + 0, 0x95F6, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xFAB2, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x9BC9, 0x9BC6, 0, 0x9BC8, 0, /* 0x40 */ + 0x9792, 0, 0x9BC7, 0xFAB0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x9BBD, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x9093, 0, 0, 0x9BCA, 0xFAB3, 0, 0x8DB5, /* 0x60 */ + 0, 0, 0, 0x9BCB, 0, 0, 0x9BCC, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x9BCF, 0, 0x9BCE, 0, 0, 0x9BCD, /* 0x80 */ + 0, 0, 0, 0x9388, 0x9BB8, 0, 0, 0, /* 0x80 */ + 0x9BD5, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x9BD1, 0, 0, /* 0x90 */ + 0, 0, 0x9BD0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x9BD2, 0, 0x9BD3, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x9BD6, /* 0xB0 */ + 0xFAB4, 0xFAB5, 0x97E4, 0, 0x9BD7, 0x9BD4, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x9BD8, 0, 0, 0x8ADE, 0x9BD9, 0, 0, /* 0xC0 */ + 0xFAB6, 0, 0x9BDB, 0x9BDA, 0, 0, 0x9BDC, 0, /* 0xD0 */ + 0, 0, 0, 0x9BDD, 0, 0x90EC, 0x8F42, 0, /* 0xD0 */ + 0, 0x8F84, 0, 0x9183, 0, 0x8D48, 0x8DB6, 0x8D49, /* 0xE0 */ + 0x8B90, 0, 0, 0x9BDE, 0, 0, 0x8DB7, 0, /* 0xE0 */ + 0, 0x8CC8, 0x9BDF, 0x96A4, 0x9462, 0x9BE0, 0, 0x8D4A, /* 0xF0 */ + 0, 0, 0, 0x8AAA, 0, 0x9246, 0x8BD0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E73, 0x957A, 0, 0, 0x94BF, 0, /* 0x00 */ + 0, 0, 0, 0x9BE1, 0x8AF3, 0, 0, 0, /* 0x00 */ + 0, 0x9BE4, 0, 0, 0, 0, 0x929F, 0, /* 0x10 */ + 0, 0x9BE3, 0x9BE2, 0x9BE5, 0, 0x92E9, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x9083, 0, 0, /* 0x20 */ + 0, 0, 0, 0x8E74, 0, 0x90C8, 0, 0x91D1, /* 0x20 */ + 0x8B41, 0, 0, 0x92A0, 0, 0, 0x9BE6, 0x9BE7, /* 0x30 */ + 0x8FED, 0, 0, 0, 0, 0x9658, 0, 0, /* 0x30 */ + 0x9BEA, 0, 0, 0x9BE9, 0x9BE8, 0x959D, 0, 0x9BF1, /* 0x40 */ + 0, 0, 0, 0, 0x9679, 0, 0x9BEB, 0, /* 0x40 */ + 0, 0, 0, 0, 0x9BED, 0x968B, 0, 0x9BEC, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x9BEE, /* 0x50 */ + 0, 0x94A6, 0x9BEF, 0x95BC, 0x9BF0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x8AB1, 0x95BD, 0x944E, 0x9BF2, 0x9BF3, 0, /* 0x70 */ + 0x8D4B, 0x8AB2, 0x9BF4, 0x8CB6, 0x9763, 0x9748, 0x8AF4, 0x9BF6, /* 0x70 */ + 0, 0x92A1, 0, 0x8D4C, 0x8FAF, 0, 0, 0x94DD, /* 0x80 */ + 0, 0, 0x8FB0, 0, 0, 0, 0, 0x8F98, /* 0x80 */ + 0, 0, 0, 0, 0, 0x92EA, 0x95F7, 0x9358, /* 0x90 */ + 0, 0, 0x8D4D, 0, 0x957B, 0, 0, 0, /* 0x90 */ + 0x9BF7, 0, 0, 0, 0, 0, 0x9378, 0x8DC0, /* 0xA0 */ + 0, 0, 0, 0x8CC9, 0, 0x92EB, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x88C1, 0x8F8E, 0x8D4E, /* 0xB0 */ + 0x9766, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x9BF8, 0x9BF9, 0x9470, 0, 0, 0, 0, /* 0xC0 */ + 0x9BFA, 0x97F5, 0x984C, 0, 0, 0, 0, 0x9BFC, /* 0xC0 */ + 0x9BFB, 0, 0, 0x8A66, 0, 0, 0x9C40, 0, /* 0xD0 */ + 0, 0, 0x9C43, 0x9C44, 0, 0x9C42, 0, 0x955F, /* 0xD0 */ + 0x8FB1, 0x9C46, 0x9C45, 0x9C41, 0, 0, 0, 0, /* 0xE0 */ + 0x9C47, 0x9C48, 0, 0, 0x9C49, 0, 0, 0, /* 0xE0 */ + 0x9C4C, 0x9C4A, 0, 0x9C4B, 0x9C4D, 0, 0x8984, 0x92EC, /* 0xF0 */ + 0x9C4E, 0, 0x8C9A, 0x89F4, 0x9455, 0, 0x9C4F, 0x93F9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x95D9, 0, 0x9C50, 0x984D, 0, 0, 0, /* 0x00 */ + 0, 0x9C51, 0x95BE, 0x9C54, 0x989F, 0x98AF, 0, 0x8EAE, /* 0x00 */ + 0x93F3, 0x9C55, 0, 0x8B7C, 0x92A2, 0x88F8, 0x9C56, 0x95A4, /* 0x10 */ + 0x8D4F, 0, 0, 0x926F, 0, 0, 0, 0x92ED, /* 0x10 */ + 0, 0xFAB7, 0, 0, 0, 0x96ED, 0x8CB7, 0x8CCA, /* 0x20 */ + 0, 0x9C57, 0, 0, 0, 0x9C58, 0, 0x9C5E, /* 0x20 */ + 0, 0x8EE3, 0, 0, 0xFAB8, 0x92A3, 0, 0x8BAD, /* 0x30 */ + 0x9C59, 0, 0, 0, 0x954A, 0, 0x9265, 0, /* 0x30 */ + 0, 0x9C5A, 0, 0, 0, 0xFA67, 0, 0, /* 0x40 */ + 0x9C5B, 0, 0x8BAE, 0, 0x9C5C, 0, 0x9C5D, 0, /* 0x40 */ + 0, 0x9C5F, 0, 0x9396, 0, 0, 0x9C60, 0x9C61, /* 0x50 */ + 0, 0x9C62, 0, 0, 0x9C53, 0x9C52, 0, 0, /* 0x50 */ + 0, 0x9C63, 0x8C60, 0, 0, 0, 0x9546, 0xFAB9, /* 0x60 */ + 0, 0x8DCA, 0x9556, 0x92A4, 0x956A, 0x9C64, 0, 0, /* 0x60 */ + 0x8FB2, 0x8965, 0, 0x9C65, 0, 0, 0, 0x9C66, /* 0x70 */ + 0, 0x96F0, 0, 0, 0x94DE, 0, 0, 0x9C69, /* 0x70 */ + 0x899D, 0x90AA, 0x9C68, 0x9C67, 0x8C61, 0x91D2, 0, 0x9C6D, /* 0x80 */ + 0x9C6B, 0, 0x9C6A, 0x97A5, 0x8CE3, 0, 0, 0, /* 0x80 */ + 0x8F99, 0x9C6C, 0x936B, 0x8F5D, 0, 0, 0, 0x93BE, /* 0x90 */ + 0x9C70, 0x9C6F, 0, 0, 0, 0, 0x9C6E, 0, /* 0x90 */ + 0x9C71, 0x8CE4, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x9C72, 0x959C, 0x8F7A, 0, 0, 0x9C73, 0x94F7, 0, /* 0xA0 */ + 0, 0, 0, 0x93BF, 0x92A5, 0, 0, 0xFABA, /* 0xB0 */ + 0, 0x934F, 0, 0, 0x9C74, 0x8B4A, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x9053, 0, 0x954B, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x8AF5, 0x9445, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x9C75, 0x8E75, /* 0xD0 */ + 0x9659, 0x965A, 0, 0, 0x899E, 0x9C7A, 0xFABB, 0, /* 0xD0 */ + 0x9289, 0, 0, 0, 0x9C77, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x89F5, 0, 0, 0, 0, /* 0xE0 */ + 0x9CAB, 0x9C79, 0, 0, 0, 0x944F, 0, 0, /* 0xF0 */ + 0x9C78, 0, 0, 0x9C76, 0, 0x8D9A, 0, 0x9C7C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x9C83, 0x9C89, /* 0x00 */ + 0x9C81, 0, 0x937B, 0, 0, 0x9C86, 0x957C, 0, /* 0x10 */ + 0, 0x9C80, 0, 0x9C85, 0x97E5, 0x8E76, 0, 0, /* 0x10 */ + 0x91D3, 0x9C7D, 0, 0, 0, 0x8B7D, 0x9C88, 0x90AB, /* 0x20 */ + 0x8985, 0x9C82, 0x89F6, 0x9C87, 0, 0, 0, 0x8BAF, /* 0x20 */ + 0, 0x9C84, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x9C8A, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x9C8C, 0x9C96, 0x9C94, 0, 0, 0x9C91, 0, /* 0x40 */ + 0, 0, 0x9C90, 0x97F6, 0, 0x9C92, 0, 0, /* 0x40 */ + 0x8BB0, 0, 0x8D50, 0, 0, 0x8F9A, 0, 0, /* 0x50 */ + 0, 0x9C99, 0x9C8B, 0, 0, 0xFABC, 0, 0x9C8F, /* 0x50 */ + 0x9C7E, 0, 0x89F8, 0x9C93, 0x9C95, 0x9270, 0, 0, /* 0x60 */ + 0x8DA6, 0x89B6, 0x9C8D, 0x9C98, 0x9C97, 0x8BB1, 0, 0x91A7, /* 0x60 */ + 0x8A86, 0, 0, 0, 0, 0x8C62, 0, 0x9C8E, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x9C9A, 0, 0x9C9D, 0x9C9F, 0xFABD, 0, 0, /* 0x80 */ + 0, 0x8EBB, 0xFABE, 0x9CA5, 0x92EE, 0x9C9B, 0, 0, /* 0x80 */ + 0, 0, 0x9CA3, 0, 0x89F7, 0, 0x9CA1, 0x9CA2, /* 0x90 */ + 0, 0, 0x9C9E, 0x9CA0, 0, 0, 0, 0x8CE5, /* 0x90 */ + 0x9749, 0, 0, 0x8AB3, 0, 0, 0x8978, 0x9CA4, /* 0xA0 */ + 0, 0x9459, 0x88AB, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x94DF, 0x9C7B, 0x9CAA, 0x9CAE, 0x96E3, 0, /* 0xB0 */ + 0x9CA7, 0, 0, 0, 0x9389, 0x9CAC, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x8FEE, 0x9CAD, 0x93D5, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x9866, 0, 0x9CA9, 0, 0xFAC0, 0, 0, /* 0xD0 */ + 0x9CAF, 0, 0x8D9B, 0, 0x90C9, 0, 0xFABF, 0x88D2, /* 0xD0 */ + 0x9CA8, 0x9CA6, 0, 0x9179, 0, 0, 0, 0x9C9C, /* 0xE0 */ + 0x8E53, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x91C4, 0x9CBB, 0xFAC2, 0x917A, 0x9CB6, 0, 0x9CB3, 0x9CB4, /* 0xF0 */ + 0, 0x8EE4, 0x9CB7, 0x9CBA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9CB5, 0x8F44, 0, 0x9CB8, 0, 0, 0x9CB2, 0, /* 0x00 */ + 0x96FA, 0x96F9, 0, 0, 0, 0x9CBC, 0x9CBD, 0x88D3, /* 0x00 */ + 0, 0xFAC3, 0, 0, 0, 0x9CB1, 0, 0, /* 0x10 */ + 0, 0, 0x8BF0, 0x88A4, 0, 0, 0, 0x8AB4, /* 0x10 */ + 0xFAC1, 0x9CB9, 0, 0, 0, 0, 0, 0x9CC1, /* 0x20 */ + 0x9CC0, 0, 0, 0, 0x9CC5, 0, 0, 0, /* 0x20 */ + 0xFAC5, 0, 0, 0, 0x9CC6, 0, 0, 0xFAC4, /* 0x30 */ + 0, 0, 0, 0, 0x9CC4, 0x9CC7, 0x9CBF, 0x9CC3, /* 0x30 */ + 0, 0, 0x9CC8, 0, 0x9CC9, 0, 0, 0x9CBE, /* 0x40 */ + 0x8E9C, 0, 0x9CC2, 0x91D4, 0x8D51, 0x9CB0, 0x9054, 0, /* 0x40 */ + 0, 0, 0, 0x9CD6, 0, 0x95E7, 0, 0, /* 0x50 */ + 0x9CCC, 0x9CCD, 0x9CCE, 0, 0, 0x9CD5, 0, 0x9CD4, /* 0x50 */ + 0, 0, 0x969D, 0x8AB5, 0, 0x9CD2, 0, 0x8C64, /* 0x60 */ + 0x8A53, 0, 0, 0x9CCF, 0, 0, 0x97B6, 0x9CD1, /* 0x60 */ + 0x88D4, 0x9CD3, 0, 0x9CCA, 0x9CD0, 0x9CD7, 0x8C63, 0x9CCB, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x977C, 0, /* 0x70 */ + 0, 0, 0x974A, 0, 0, 0, 0, 0x9CDA, /* 0x80 */ + 0, 0, 0x9CDE, 0, 0, 0, 0x919E, 0, /* 0x80 */ + 0x97F7, 0x9CDF, 0, 0, 0x9CDC, 0, 0x9CD9, 0, /* 0x90 */ + 0xFAC6, 0x9CD8, 0x9CDD, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x95AE, 0, 0, 0x93B2, /* 0xA0 */ + 0, 0x8C65, 0, 0x9CE0, 0x9CDB, 0, 0x9CE1, 0, /* 0xA0 */ + 0, 0, 0x8C9B, 0, 0, 0, 0x89AF, 0, /* 0xB0 */ + 0, 0, 0x9CE9, 0, 0, 0, 0x8AB6, 0, /* 0xB0 */ + 0, 0, 0, 0x9CE7, 0, 0, 0x9CE8, 0x8DA7, /* 0xC0 */ + 0x9CE6, 0x9CE4, 0x9CE3, 0x9CEA, 0x9CE2, 0x9CEC, 0, 0, /* 0xC0 */ + 0x89F9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x9CEE, 0, 0, 0x9CED, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x92A6, 0, 0x9CF1, 0, 0x9CEF, 0x9CE5, /* 0xF0 */ + 0x8C9C, 0, 0x9CF0, 0, 0x9CF4, 0x9CF3, 0x9CF5, 0x9CF2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9CF6, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x9CF7, 0x9CF8, 0x95E8, 0, 0x9CFA, 0x9CF9, 0x8F5E, 0, /* 0x00 */ + 0x90AC, 0x89E4, 0x89FA, 0xFAC7, 0x9CFB, 0, 0x88BD, 0, /* 0x10 */ + 0, 0, 0x90CA, 0x9CFC, 0, 0xE6C1, 0x9D40, 0x8C81, /* 0x10 */ + 0, 0x9D41, 0, 0, 0, 0, 0x90ED, 0, /* 0x20 */ + 0, 0, 0x9D42, 0, 0, 0, 0x9D43, 0x8B59, /* 0x20 */ + 0x9D44, 0, 0x9D45, 0x9D46, 0x91D5, 0, 0, 0, /* 0x30 */ + 0x8CCB, 0, 0, 0x96DF, 0, 0, 0, 0x965B, /* 0x30 */ + 0x8F8A, 0x9D47, 0, 0, 0, 0, 0, 0x90EE, /* 0x40 */ + 0xE7BB, 0x94E0, 0, 0x8EE8, 0, 0x8DCB, 0x9D48, 0, /* 0x40 */ + 0, 0, 0, 0x91C5, 0, 0x95A5, 0, 0, /* 0x50 */ + 0x91EF, 0, 0, 0x9D4B, 0, 0, 0x9D49, 0, /* 0x50 */ + 0x9D4C, 0, 0, 0x9D4A, 0, 0, 0, 0, /* 0x60 */ + 0x9D4D, 0, 0, 0, 0, 0, 0x95AF, 0, /* 0x60 */ + 0, 0x88B5, 0, 0, 0, 0, 0x957D, 0, /* 0x70 */ + 0, 0x94E1, 0, 0, 0x9D4E, 0, 0x9D51, 0x8FB3, /* 0x70 */ + 0x8B5A, 0, 0x9D4F, 0x9D56, 0x8FB4, 0, 0, 0, /* 0x80 */ + 0, 0x9D50, 0x9463, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x977D, 0x9D52, 0x9D53, 0x9D57, 0x938A, 0x9D54, 0x8D52, /* 0x90 */ + 0x90DC, 0, 0, 0x9D65, 0x94B2, 0, 0x91F0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xFAC8, 0, /* 0xA0 */ + 0, 0, 0, 0x94E2, 0x9DAB, 0, 0, 0, /* 0xA0 */ + 0, 0x95F8, 0, 0, 0, 0x92EF, 0, 0, /* 0xB0 */ + 0, 0x9695, 0, 0x9D5A, 0x899F, 0x928A, 0, 0, /* 0xB0 */ + 0, 0, 0x9D63, 0, 0, 0x9253, 0x9D5D, 0x9D64, /* 0xC0 */ + 0x9D5F, 0x9D66, 0x9D62, 0, 0x9D61, 0x948F, 0, 0x9D5B, /* 0xC0 */ + 0x89FB, 0x9D59, 0x8B91, 0x91F1, 0x9D55, 0, 0, 0x9D58, /* 0xD0 */ + 0x8D53, 0x90D9, 0, 0x8FB5, 0x9D60, 0x9471, 0, 0, /* 0xD0 */ + 0x8B92, 0x8A67, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x8A87, 0x9040, 0x9D68, 0x9D6D, /* 0xE0 */ + 0, 0x9D69, 0, 0x8C9D, 0, 0x9D6E, 0x8E41, 0x8D89, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0x8F45, 0x9D5C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E9D, 0x9D6B, 0, 0, 0, 0, 0x8E77, /* 0x00 */ + 0x9D6C, 0x88C2, 0, 0, 0x9D67, 0, 0, 0, /* 0x00 */ + 0, 0x92A7, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x8B93, 0, 0, 0, 0, 0, 0x8BB2, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x9D6A, /* 0x20 */ + 0x88A5, 0, 0, 0x8DC1, 0, 0, 0, 0x9055, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x92F0, 0, 0, 0x94D2, 0x9D70, 0x917D, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x91A8, 0, 0, 0x8E4A, 0x9D71, 0, 0x9D73, /* 0x40 */ + 0x9D6F, 0, 0, 0, 0, 0x95DF, 0, 0x92BB, /* 0x50 */ + 0, 0, 0, 0, 0x917B, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x95F9, /* 0x60 */ + 0x8ECC, 0x9D80, 0, 0x9D7E, 0, 0, 0x9098, 0, /* 0x60 */ + 0, 0, 0x8C9E, 0, 0, 0, 0x9D78, 0x8FB7, /* 0x70 */ + 0, 0, 0x93E6, 0x9450, 0, 0, 0, 0, /* 0x70 */ + 0x9D76, 0, 0, 0x917C, 0, 0, 0, 0, /* 0x80 */ + 0x8EF6, 0x9D7B, 0, 0, 0x8FB6, 0, 0x9D75, 0x9D7A, /* 0x80 */ + 0, 0, 0x9472, 0, 0, 0, 0x9D74, 0, /* 0x90 */ + 0x8C40, 0, 0, 0x8A7C, 0, 0, 0, 0x9D7C, /* 0x90 */ + 0x97A9, 0x8DCC, 0x9254, 0x9D79, 0, 0x90DA, 0, 0x8D54, /* 0xA0 */ + 0x9084, 0x8986, 0x915B, 0x9D77, 0x8B64, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x8C66, 0, 0x92CD, 0x9D7D, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x917E, 0, 0, 0x9D81, 0, /* 0xB0 */ + 0x9D83, 0, 0, 0x91B5, 0x9D89, 0, 0x9D84, 0, /* 0xC0 */ + 0, 0x9D86, 0, 0, 0, 0, 0, 0x9560, /* 0xC0 */ + 0x92F1, 0, 0x9D87, 0, 0, 0, 0x974B, 0, /* 0xD0 */ + 0, 0, 0x9767, 0x8AB7, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x88AC, 0, 0x9D85, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x9D82, 0, 0, 0, 0, 0x8AF6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x8987, 0xFAC9, 0x9D88, 0, /* 0xF0 */ + 0, 0, 0x9768 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9D8C, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x91B9, 0, 0x9D93, /* 0x00 */ + 0, 0, 0, 0x9D8D, 0, 0, 0x9D8A, 0x9D91, /* 0x10 */ + 0, 0, 0, 0, 0x9D72, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x9D8E, 0, /* 0x20 */ + 0x9D92, 0, 0, 0, 0x94C0, 0x938B, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x9D8B, 0, 0x9D8F, 0, /* 0x30 */ + 0, 0, 0x8C67, 0, 0, 0, 0x8DEF, 0, /* 0x30 */ + 0, 0, 0x90DB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x9D97, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x9345, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xFACA, 0, 0, 0, 0, 0, 0, 0x9D94, /* 0x60 */ + 0, 0x9680, 0, 0, 0, 0, 0, 0x9D95, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0x9D96, 0, /* 0x70 */ + 0x96CC, 0, 0x90A0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x8C82, 0, 0, 0, 0, /* 0x80 */ + 0x9D9D, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x8E54, 0x9D9A, 0, 0x9D99, 0, 0, /* 0x90 */ + 0, 0, 0x9451, 0, 0, 0xFACB, 0x93B3, 0, /* 0x90 */ + 0, 0, 0, 0, 0x9350, 0x9D9B, 0, 0, /* 0xA0 */ + 0, 0x9D9C, 0, 0x958F, 0, 0x9464, 0x8E42, 0, /* 0xA0 */ + 0x90EF, 0, 0x966F, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x8A68, 0, 0x9DA3, 0x9D9E, 0, 0, 0, /* 0xB0 */ + 0, 0x9769, 0x9DA5, 0, 0, 0x9DA1, 0, 0x9DA2, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x9180, 0xFACC, 0, /* 0xC0 */ + 0, 0, 0x9DA0, 0, 0x9D5E, 0, 0, 0, /* 0xD0 */ + 0x9DA4, 0, 0x9D9F, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x9DA9, 0x9DAA, 0x9346, 0x9DAC, 0, 0, 0x8E43, 0x9DA7, /* 0xE0 */ + 0, 0, 0, 0, 0x8B5B, 0, 0, 0x9DAD, /* 0xE0 */ + 0, 0x9DA6, 0x9DB1, 0, 0x9DB0, 0, 0x9DAF, 0, /* 0xF0 */ + 0, 0, 0x9DB2, 0, 0, 0x9DB4, 0x8FEF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9DB3, 0, 0, 0, 0, 0x9DB7, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x9DB5, 0, 0, 0, 0x9DB6, 0x9D90, 0, 0, /* 0x10 */ + 0, 0, 0, 0x9DB9, 0x9DB8, 0, 0, 0, /* 0x20 */ + 0, 0, 0x9D98, 0x9DBA, 0x9DAE, 0, 0, 0x8E78, /* 0x20 */ + 0, 0, 0, 0, 0x9DBB, 0x9DBC, 0x9DBE, 0x9DBD, /* 0x30 */ + 0x9DBF, 0x89FC, 0, 0x8D55, 0, 0, 0x95FA, 0x90AD, /* 0x30 */ + 0, 0, 0, 0, 0, 0x8CCC, 0, 0, /* 0x40 */ + 0x9DC1, 0, 0, 0, 0, 0x9DC4, 0xFACD, 0x9571, /* 0x40 */ + 0, 0x8B7E, 0, 0, 0, 0x9DC3, 0x9DC2, 0x9473, /* 0x50 */ + 0x9DC5, 0x8BB3, 0, 0, 0, 0x9DC7, 0x9DC6, 0, /* 0x50 */ + 0, 0, 0x8AB8, 0x8E55, 0, 0, 0x93D6, 0, /* 0x60 */ + 0, 0, 0, 0, 0x8C68, 0, 0, 0, /* 0x60 */ + 0x9094, 0, 0x9DC8, 0, 0x90AE, 0x9347, 0, 0x957E, /* 0x70 */ + 0x9DC9, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x9DCA, 0x9DCB, 0, 0, 0, 0x95B6, /* 0x80 */ + 0x9B7C, 0x90C4, 0, 0, 0x956B, 0, 0x8DD6, 0, /* 0x80 */ + 0x94E3, 0x94C1, 0, 0, 0, 0, 0, 0x936C, /* 0x90 */ + 0, 0x97BF, 0, 0x9DCD, 0x8ECE, 0, 0, 0x9DCE, /* 0x90 */ + 0, 0x88B4, 0, 0, 0x8BD2, 0x90CB, 0, 0x9580, /* 0xA0 */ + 0, 0, 0, 0x9DCF, 0x8E61, 0x9266, 0, 0x8E7A, /* 0xA0 */ + 0x9056, 0, 0, 0, 0, 0, 0, 0x9DD0, /* 0xB0 */ + 0, 0x95FB, 0, 0, 0x8997, 0x8E7B, 0, 0, /* 0xB0 */ + 0, 0x9DD3, 0, 0x9DD1, 0x9DD4, 0x97B7, 0x9DD2, 0, /* 0xC0 */ + 0, 0, 0, 0x90F9, 0x9DD5, 0, 0, 0x91B0, /* 0xC0 */ + 0, 0, 0x9DD6, 0, 0, 0, 0, 0x8AF8, /* 0xD0 */ + 0, 0x9DD8, 0, 0x9DD7, 0, 0, 0, 0, /* 0xD0 */ + 0x9DD9, 0x9DDA, 0x8AF9, 0, 0, 0x93FA, 0x9255, 0x8B8C, /* 0xE0 */ + 0x8E7C, 0x9181, 0, 0, 0x8F7B, 0x88AE, 0, 0, /* 0xE0 */ + 0, 0x9DDB, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x89A0, 0x9DDF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFACE, 0, 0x8D56, 0x9DDE, 0, 0, 0x8DA9, 0x8FB8, /* 0x00 */ + 0, 0xFAD1, 0x9DDD, 0, 0x8FB9, 0, 0x96BE, 0x8DA8, /* 0x00 */ + 0, 0, 0, 0x88D5, 0x90CC, 0xFACF, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x9DE4, 0, 0xFAD3, 0x90AF, /* 0x10 */ + 0x8966, 0, 0, 0, 0xFAD4, 0x8F74, 0, 0x9686, /* 0x20 */ + 0x8DF0, 0, 0, 0, 0, 0x8FBA, 0xFAD2, 0x90A5, /* 0x20 */ + 0, 0xFA63, 0, 0, 0x9DE3, 0x9DE1, 0x9DE2, 0, /* 0x30 */ + 0, 0, 0, 0xFAD0, 0x928B, 0, 0, 0x9E45, /* 0x30 */ + 0, 0x9DE8, 0x8E9E, 0x8D57, 0x9DE6, 0, 0, 0, /* 0x40 */ + 0, 0x9DE7, 0, 0x9057, 0, 0, 0, 0x9DE5, /* 0x40 */ + 0, 0, 0x8E4E, 0, 0, 0, 0, 0xFAD6, /* 0x50 */ + 0, 0xFAD7, 0, 0, 0, 0x9DEA, 0x9DE9, 0x9DEE, /* 0x50 */ + 0, 0, 0x9DEF, 0, 0x9DEB, 0xFAD5, 0x8A41, 0x9DEC, /* 0x60 */ + 0x9DED, 0x94D3, 0, 0, 0, 0, 0x9581, 0x8C69, /* 0x60 */ + 0x9DF0, 0, 0, 0xFAD9, 0x90B0, 0, 0x8FBB, 0, /* 0x70 */ + 0, 0, 0x9271, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x8BC5, 0, 0x9DF1, 0x9DF5, 0, 0, 0x89C9, /* 0x80 */ + 0x9DF2, 0x9DF4, 0, 0, 0, 0, 0x9DF3, 0, /* 0x80 */ + 0, 0x8F8B, 0, 0, 0, 0, 0x9267, 0x88C3, /* 0x90 */ + 0x9DF6, 0xFADA, 0, 0, 0, 0x9DF7, 0, 0, /* 0x90 */ + 0xFADB, 0, 0x92A8, 0, 0, 0, 0x97EF, 0, /* 0xA0 */ + 0, 0, 0, 0x8E62, 0, 0, 0x95E9, 0, /* 0xA0 */ + 0, 0, 0xFADC, 0, 0x965C, 0, 0, 0, /* 0xB0 */ + 0x9E41, 0x9DF9, 0, 0, 0x9DFC, 0, 0x9DFB, 0xFADD, /* 0xB0 */ + 0, 0x9DF8, 0, 0, 0x9E40, 0, 0, 0x93DC, /* 0xC0 */ + 0, 0x9DFA, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x9E42, 0, /* 0xD0 */ + 0, 0x8F8C, 0x9E43, 0, 0x976A, 0x9498, 0, 0, /* 0xD0 */ + 0x9E44, 0, 0, 0, 0, 0, 0x9E46, 0, /* 0xE0 */ + 0, 0x9E47, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x9E48, 0, 0x8BC8, 0x8967, 0x8D58, 0x9E49, 0, 0x9E4A, /* 0xF0 */ + 0x8F91, 0x9182, 0xFADE, 0xFA66, 0x99D6, 0x915D, 0x915C, 0x91D6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8DC5, 0, 0, 0x98F0, 0, 0, 0, 0, /* 0x00 */ + 0x8C8E, 0x974C, 0, 0x95FC, 0, 0x959E, 0xFADF, 0x9E4B, /* 0x00 */ + 0, 0, 0, 0, 0x8DF1, 0x92BD, 0x9E4C, 0x984E, /* 0x10 */ + 0, 0, 0, 0x965D, 0, 0x92A9, 0x9E4D, 0x8AFA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x9E4E, 0x9E4F, /* 0x20 */ + 0x96D8, 0, 0x96A2, 0x9696, 0x967B, 0x8E44, 0x9E51, 0, /* 0x20 */ + 0, 0x8EE9, 0, 0, 0x9670, 0, 0x9E53, 0x9E56, /* 0x30 */ + 0x9E55, 0, 0x8AF7, 0, 0, 0x8B80, 0, 0x9E52, /* 0x30 */ + 0, 0x9E54, 0, 0, 0, 0, 0x9E57, 0, /* 0x40 */ + 0, 0x9099, 0, 0, 0, 0, 0x979B, 0x88C7, /* 0x40 */ + 0x8DDE, 0x91BA, 0, 0x8EDB, 0, 0, 0x8FF1, 0, /* 0x50 */ + 0, 0x9E5A, 0, 0, 0x936D, 0, 0x9E58, 0x91A9, /* 0x50 */ + 0x9E59, 0x8FF0, 0x96DB, 0x9E5B, 0x9E5C, 0x9788, 0xFAE1, 0, /* 0x60 */ + 0, 0, 0x9E61, 0, 0, 0x8D59, 0, 0x9474, /* 0x60 */ + 0x9E5E, 0x938C, 0x9DDC, 0x9DE0, 0, 0x8B6E, 0, 0x9466, /* 0x70 */ + 0, 0, 0, 0, 0x9E60, 0, 0x8FBC, 0x94C2, /* 0x70 */ + 0, 0, 0, 0, 0, 0x9E66, 0, 0x94F8, /* 0x80 */ + 0, 0x9E5D, 0, 0x9E63, 0x9E62, 0, 0, 0, /* 0x80 */ + 0x90CD, 0, 0, 0, 0, 0x968D, 0, 0x97D1, /* 0x90 */ + 0, 0, 0x9687, 0, 0x89CA, 0x8E7D, 0, 0, /* 0x90 */ + 0x9867, 0x9E65, 0x9095, 0, 0, 0, 0x9E64, 0, /* 0xA0 */ + 0, 0x9E5F, 0, 0, 0, 0, 0, 0x8CCD, /* 0xA0 */ + 0, 0, 0, 0x9E6B, 0x9E69, 0, 0x89CB, 0x9E67, /* 0xB0 */ + 0x9E6D, 0x9E73, 0, 0xFAE2, 0, 0, 0, 0, /* 0xB0 */ + 0xFAE4, 0x91C6, 0, 0, 0x95BF, 0, 0x9E75, 0, /* 0xC0 */ + 0, 0, 0x9541, 0, 0, 0, 0x9E74, 0x9490, /* 0xC0 */ + 0x965E, 0x8AB9, 0, 0x90F5, 0x8F5F, 0, 0, 0, /* 0xD0 */ + 0x92D1, 0, 0x974D, 0, 0, 0x9E70, 0x9E6F, 0, /* 0xD0 */ + 0, 0, 0x9E71, 0, 0x9E6E, 0, 0, 0x9E76, /* 0xE0 */ + 0, 0x9E6C, 0, 0, 0x9E6A, 0, 0x9E72, 0x9E68, /* 0xE0 */ + 0, 0x928C, 0, 0x96F6, 0x8EC4, 0x8DF2, 0, 0, /* 0xF0 */ + 0, 0, 0, 0x8DB8, 0, 0, 0x968F, 0x8A60 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFAE5, 0x92CC, 0x93C8, 0x8968, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x90F0, 0, 0, 0x90B2, 0x8C49, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x9E78, 0, /* 0x10 */ + 0, 0x8D5A, 0x8A9C, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x9E7A, 0x8A94, 0x9E81, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x9E7D, 0, 0x90F1, 0, 0, 0, /* 0x30 */ + 0x8A6A, 0x8DAA, 0, 0, 0x8A69, 0x8DCD, 0, 0, /* 0x30 */ + 0x9E7B, 0x8C85, 0x8C6A, 0x938D, 0xFAE6, 0, 0x9E79, 0, /* 0x40 */ + 0x88C4, 0, 0, 0, 0, 0x9E7C, 0x9E7E, 0, /* 0x40 */ + 0x8BCB, 0x8C4B, 0xFAE3, 0x8ABA, 0x8B6A, 0, 0, 0, /* 0x50 */ + 0, 0x9E82, 0, 0, 0x8DF7, 0x9691, 0, 0x8E56, /* 0x50 */ + 0, 0, 0, 0x9E83, 0, 0, 0, 0x954F, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x9E8F, 0, 0x89B1, 0x9E84, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x9E95, 0x9E85, /* 0x70 */ + 0, 0x97C0, 0, 0x9E8C, 0, 0x947E, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x9E94, 0, 0x9E87, /* 0x80 */ + 0, 0, 0, 0x88B2, 0x9E89, 0, 0, 0x8D5B, /* 0x90 */ + 0, 0, 0, 0x9E8B, 0, 0x9E8A, 0, 0x9E86, /* 0x90 */ + 0x9E91, 0, 0x8FBD, 0, 0, 0, 0x9AEB, 0x8CE6, /* 0xA0 */ + 0x979C, 0, 0, 0, 0, 0x9E88, 0, 0x92F2, /* 0xA0 */ + 0x8A42, 0x8DAB, 0, 0x9E80, 0, 0x9E90, 0x8A81, 0, /* 0xB0 */ + 0, 0x9E8E, 0x9E92, 0, 0x938E, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x8AFC, 0, 0x9EB0, 0, /* 0xC0 */ + 0xFA64, 0x96C7, 0x9E97, 0x8AFB, 0, 0x9E9E, 0, 0xFAE7, /* 0xC0 */ + 0, 0, 0x965F, 0, 0x9E9F, 0x9EA1, 0, 0x9EA5, /* 0xD0 */ + 0x9E99, 0, 0x9249, 0, 0, 0, 0, 0x938F, /* 0xD0 */ + 0x9EA9, 0x9E9C, 0, 0x9EA6, 0, 0, 0, 0x9EA0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x9058, 0x9EAA, /* 0xE0 */ + 0, 0, 0x90B1, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x9EA8, 0x8ABB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x986F, 0x9E96, 0, 0, 0x9EA4, 0x88D6, 0, 0, /* 0x00 */ + 0x9E98, 0, 0, 0x96B8, 0x9E9D, 0x9041, 0x92C5, 0x9E93, /* 0x00 */ + 0, 0, 0x9EA3, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x909A, 0x9EAD, 0x8A91, 0x8C9F, 0, 0, 0, /* 0x10 */ + 0, 0x9EAF, 0x9E9A, 0x9EAE, 0, 0x9EA7, 0x9E9B, 0, /* 0x20 */ + 0x9EAB, 0, 0x9EAC, 0, 0, 0, 0, 0, /* 0x20 */ + 0x9EBD, 0, 0, 0, 0x93CC, 0, 0x9EA2, 0, /* 0x30 */ + 0, 0x9EB9, 0, 0, 0, 0x9EBB, 0, 0x92D6, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x976B, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x9596, 0x9EB6, 0x91C8, 0, 0, /* 0x50 */ + 0, 0x9EBC, 0x915E, 0, 0x9EB3, 0x9EC0, 0x9EBF, 0, /* 0x50 */ + 0x93ED, 0x9EBE, 0x93E8, 0, 0, 0, 0, 0, /* 0x60 */ + 0xFAE9, 0, 0x9EC2, 0x9EB5, 0, 0x8BC6, 0x9EB8, 0x8F7C, /* 0x60 */ + 0, 0, 0, 0x9480, 0x9EBA, 0x8BC9, 0, 0x9EB2, /* 0x70 */ + 0x9EB4, 0x9EB1, 0, 0, 0x984F, 0x8A79, 0x9EB7, 0, /* 0x70 */ + 0, 0x9EC1, 0x8A54, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x8DE5, 0, 0, 0, 0x897C, 0, /* 0x80 */ + 0, 0x9ED2, 0, 0, 0x9850, 0x9ED5, 0, 0, /* 0x90 */ + 0xFAEB, 0, 0, 0x9059, 0x9ED4, 0, 0, 0, /* 0x90 */ + 0x9ED3, 0, 0, 0, 0, 0, 0, 0x9ED0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x9EC4, 0, /* 0xA0 */ + 0, 0x9EE1, 0x9EC3, 0, 0x9ED6, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x9ECE, 0, 0, 0x9EC9, 0x9EC6, /* 0xB0 */ + 0, 0x9EC7, 0, 0x9ECF, 0, 0, 0, 0xEAA0, /* 0xC0 */ + 0, 0, 0x9ECC, 0x8D5C, 0x92C6, 0x9184, 0x9ECA, 0, /* 0xC0 */ + 0x9EC5, 0, 0, 0x9EC8, 0, 0, 0, 0, /* 0xD0 */ + 0x976C, 0x968A, 0, 0, 0, 0x9ECD, 0x9ED7, 0, /* 0xD0 */ + 0, 0, 0xFAEC, 0, 0, 0, 0, 0x9EDF, /* 0xE0 */ + 0x9ED8, 0, 0, 0x9EE5, 0, 0x9EE3, 0, 0, /* 0xE0 */ + 0, 0, 0x9EDE, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x9EDD, 0, 0x92CE, 0, 0x9185, 0, 0x9EDB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9ED9, 0, 0, 0x9EE0, 0, 0, /* 0x00 */ + 0, 0, 0x9EE6, 0x94F3, 0x9EEC, 0, 0, 0, /* 0x00 */ + 0, 0, 0x9EE7, 0x9EEA, 0x9EE4, 0, 0, 0x9294, /* 0x10 */ + 0, 0x9557, 0, 0x9EDA, 0, 0, 0x9EE2, 0x8FBE, /* 0x10 */ + 0, 0x96CD, 0x9EF6, 0x9EE9, 0, 0, 0, 0, /* 0x20 */ + 0, 0x8CA0, 0x89A1, 0x8A7E, 0, 0, 0x9ED1, 0, /* 0x20 */ + 0xFAED, 0, 0, 0, 0, 0x8FBF, 0x9EEE, 0, /* 0x30 */ + 0x9EF5, 0x8EF7, 0x8A92, 0, 0, 0x924D, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x9EEB, 0, 0xFAEF, 0x9EF0, /* 0x40 */ + 0x9EF4, 0, 0, 0x8BB4, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x8B6B, 0x9EF2, 0, 0, 0, 0, 0, 0x8B40, /* 0x50 */ + 0, 0x93C9, 0x9EF1, 0, 0, 0, 0x9EF3, 0, /* 0x60 */ + 0, 0, 0, 0xFAEE, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x9EED, 0xFAF0, 0, 0, 0, 0, /* 0x70 */ + 0x9EEF, 0, 0, 0, 0, 0, 0xFAF1, 0x8A80, /* 0x70 */ + 0x9268, 0, 0, 0, 0x9EFA, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x9EF8, 0x8CE7, 0, /* 0x80 */ + 0x9EF7, 0, 0, 0, 0, 0, 0, 0x9F40, /* 0x90 */ + 0, 0, 0, 0, 0x9E77, 0, 0, 0, /* 0x90 */ + 0x9EF9, 0, 0x9EFB, 0x9EFC, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x9F4B, 0, 0x9F47, 0, 0x9E8D, 0, /* 0xA0 */ + 0, 0, 0, 0x9F46, 0, 0, 0, 0, /* 0xB0 */ + 0x9F45, 0, 0, 0x9F42, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x9EE8, 0x9F44, 0x9F43, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x9F49, 0, 0x9845, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x9F4C, 0x8BF9, 0, 0, 0x9F48, 0x9F4A, /* 0xD0 */ + 0, 0, 0xFAF2, 0, 0xFAF3, 0, 0, 0, /* 0xE0 */ + 0x94A5, 0, 0x9F4D, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x9F51, 0x9F4E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9793, 0x9F4F, 0, 0, /* 0x00 */ + 0, 0, 0x9EDC, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x9F52, 0, 0, 0, 0x9F53, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x8954, 0, 0x9F55, /* 0x10 */ + 0x8C87, 0x8E9F, 0, 0x8BD3, 0, 0, 0, 0x89A2, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x977E, 0, 0, 0, 0, 0x9F57, /* 0x30 */ + 0x9F56, 0x9F59, 0x8B5C, 0, 0, 0x8BD4, 0x8ABC, 0, /* 0x30 */ + 0, 0, 0, 0x9F5C, 0, 0, 0, 0x9F5B, /* 0x40 */ + 0, 0x9F5D, 0, 0, 0x89CC, 0, 0x9256, 0, /* 0x40 */ + 0x9F5E, 0, 0, 0x8ABD, 0x9F60, 0, 0, 0, /* 0x50 */ + 0, 0x9F5F, 0, 0x9F61, 0, 0, 0, 0x9F62, /* 0x50 */ + 0, 0x9F63, 0x8E7E, 0x90B3, 0x8D9F, 0, 0x9590, 0, /* 0x60 */ + 0, 0x95E0, 0x9863, 0, 0, 0, 0, 0x8E95, /* 0x60 */ + 0, 0, 0, 0x8DCE, 0x97F0, 0, 0, 0, /* 0x70 */ + 0x9F64, 0x9F65, 0, 0x8E80, 0, 0, 0, 0x9F66, /* 0x70 */ + 0x9F67, 0, 0, 0x9F69, 0x9F68, 0, 0x9677, 0, /* 0x80 */ + 0, 0x8F7D, 0x8EEA, 0x8E63, 0, 0x9F6A, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x9F6C, 0x9042, 0, /* 0x90 */ + 0x9F6B, 0, 0, 0, 0, 0, 0x9F6D, 0, /* 0x90 */ + 0, 0, 0, 0, 0x9F6E, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x9F6F, 0x9F70, 0, 0, 0, 0x9F71, /* 0xA0 */ + 0, 0x9F73, 0x9F72, 0x9F74, 0x89A3, 0x9269, 0, 0x9F75, /* 0xB0 */ + 0, 0, 0x8E45, 0x8A6B, 0x9F76, 0, 0, 0x9361, /* 0xB0 */ + 0x9ACA, 0, 0, 0, 0, 0x8B42, 0x9F77, 0, /* 0xC0 */ + 0, 0, 0, 0x9F78, 0, 0x95EA, 0x9688, 0, /* 0xC0 */ + 0, 0, 0x93C5, 0x9F79, 0x94E4, 0, 0xFAF4, 0, /* 0xD0 */ + 0x94F9, 0, 0, 0x96D1, 0, 0, 0, 0x9F7A, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x9F7C, 0x9F7B, 0, 0, 0x9F7E, /* 0xE0 */ + 0, 0, 0, 0x9F7D /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x9F81, 0, 0, 0, 0, 0, 0, 0x8E81, /* 0x00 */ + 0, 0x96AF, 0, 0x9F82, 0x9F83, 0, 0, 0x8B43, /* 0x10 */ + 0, 0, 0, 0x9F84, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x9F86, 0x9F85, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x9085, 0, 0, 0x9558, /* 0x30 */ + 0x8969, 0, 0, 0, 0, 0, 0x94C3, 0xFAF5, /* 0x30 */ + 0x92F3, 0x8F60, 0x8B81, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x94C4, 0, /* 0x40 */ + 0x8EAC, 0, 0, 0, 0, 0x9F88, 0, 0x8ABE, /* 0x50 */ + 0, 0, 0x8998, 0, 0xFAF6, 0x93F0, 0x9F87, 0x8D5D, /* 0x50 */ + 0x9272, 0, 0x9F89, 0, 0, 0, 0, 0, /* 0x60 */ + 0x9F91, 0, 0x9F8A, 0, 0, 0, 0, 0xFAF8, /* 0x60 */ + 0x91BF, 0, 0x8B82, 0x9F92, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x8C88, 0, 0, 0x8B44, 0x9F90, 0, /* 0x70 */ + 0, 0x9F8E, 0x9F8B, 0x9780, 0, 0, 0xFAF7, 0, /* 0x80 */ + 0x92BE, 0, 0, 0, 0x93D7, 0x9F8C, 0, 0, /* 0x80 */ + 0x9F94, 0, 0x9F93, 0x8C42, 0, 0, 0x89AB, 0, /* 0x90 */ + 0, 0x8DB9, 0x9F8D, 0x9F8F, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9676, 0x91F2, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x9697, 0, 0, 0x9F9C, 0, /* 0xA0 */ + 0, 0x9F9D, 0, 0x89CD, 0, 0, 0, 0, /* 0xB0 */ + 0x95A6, 0x96FB, 0x9F9F, 0x8EA1, 0x8FC0, 0x9F98, 0x9F9E, 0x8988, /* 0xB0 */ + 0, 0x8BB5, 0, 0, 0x9F95, 0x9F9A, 0, 0, /* 0xC0 */ + 0, 0x90F2, 0x9491, 0, 0x94E5, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x9F97, 0, 0x9640, 0, 0x9F99, /* 0xD0 */ + 0, 0x9FA2, 0xFAF9, 0x9FA0, 0, 0x9F9B, 0, 0, /* 0xD0 */ + 0, 0x9641, 0x9467, 0x8B83, 0, 0x9344, 0, 0, /* 0xE0 */ + 0x928D, 0, 0x9FA3, 0, 0, 0, 0, 0x9FA1, /* 0xE0 */ + 0x91D7, 0x9F96, 0, 0x896A /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFAFA, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x976D, 0x9FAE, 0, 0, 0, /* 0x00 */ + 0, 0, 0x9FAD, 0, 0, 0, 0, 0x90F4, /* 0x10 */ + 0, 0x9FAA, 0, 0x978C, 0, 0, 0x93B4, 0x9FA4, /* 0x10 */ + 0, 0, 0, 0, 0, 0x92C3, 0, 0, /* 0x20 */ + 0, 0x896B, 0x8D5E, 0x9FA7, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x8F46, 0x9FAC, 0, 0x9FAB, 0x9FA6, 0, /* 0x30 */ + 0x9FA9, 0, 0, 0x8A88, 0, 0x9FA8, 0x9468, 0, /* 0x30 */ + 0, 0x97AC, 0, 0, 0x8FF2, 0x90F3, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x9FB4, 0x9FB2, 0, 0x956C, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x9FAF, 0x9FB1, 0, 0x8959, 0, /* 0x60 */ + 0, 0x8D5F, 0x9851, 0, 0x8A5C, 0, 0x9582, 0xFAFC, /* 0x60 */ + 0, 0, 0, 0, 0x9781, 0, 0, 0x8A43, /* 0x70 */ + 0x905A, 0x9FB3, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x9FB8, 0, 0xFAFB, /* 0x80 */ + 0x8FC1, 0, 0, 0, 0x974F, 0, 0x9FB5, 0, /* 0x80 */ + 0, 0, 0, 0x9FB0, 0, 0x9FB6, 0xFB40, 0, /* 0x90 */ + 0, 0x97DC, 0, 0x9393, 0x93C0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xFB41, 0, 0, 0x8A55, /* 0xA0 */ + 0, 0, 0x8974, 0, 0, 0x9FBC, 0, 0, /* 0xB0 */ + 0x9FBF, 0, 0, 0, 0x97C1, 0, 0, 0, /* 0xB0 */ + 0x9784, 0, 0, 0, 0, 0x9FC6, 0x9FC0, 0x9FBD, /* 0xC0 */ + 0, 0, 0, 0x97D2, 0x9FC3, 0, 0, 0xFB42, /* 0xC0 */ + 0, 0x8F69, 0x9FC5, 0, 0, 0x9FCA, 0, 0, /* 0xD0 */ + 0x9391, 0x9FC8, 0, 0, 0, 0, 0x9FC2, 0, /* 0xD0 */ + 0, 0x9257, 0, 0, 0x9FC9, 0, 0x9FBE, 0, /* 0xE0 */ + 0x9FC4, 0, 0x9FCB, 0x88FA, 0x9FC1, 0, 0x9FCC, 0, /* 0xE0 */ + 0, 0x905B, 0xFB44, 0x8F7E, 0, 0x95A3, 0, 0x8DAC, /* 0xF0 */ + 0xFB43, 0x9FB9, 0x9FC7, 0x9359, 0xFB45 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90B4, 0, 0x8A89, /* 0x00 */ + 0x8DCF, 0x8FC2, 0x9FBB, 0x8F61, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x8C6B, 0, 0x9FBA, 0, 0, /* 0x10 */ + 0, 0x9FD0, 0x8F8D, 0x8CB8, 0, 0x9FDF, 0, 0x9FD9, /* 0x10 */ + 0x8B94, 0x936E, 0, 0x9FD4, 0x9FDD, 0x88AD, 0x8951, 0xFB48, /* 0x20 */ + 0, 0x89B7, 0, 0x9FD6, 0x91AA, 0x9FCD, 0x9FCF, 0x8D60, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x9FE0, 0xFB46, 0x9FDB, 0, 0xFB49, 0, 0x9FD3, 0, /* 0x30 */ + 0, 0, 0, 0x9FDA, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x96A9, 0, 0, 0x9FD8, 0x9FDC, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x8CCE, 0, /* 0x50 */ + 0x8FC3, 0, 0, 0x9258, 0xFB47, 0, 0, 0x9FD2, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x974E, /* 0x60 */ + 0, 0, 0, 0x9FD5, 0, 0, 0x9FCE, 0x9392, /* 0x60 */ + 0, 0, 0x9FD1, 0, 0, 0, 0x9FD7, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x9870, 0x8EBC, /* 0x70 */ + 0x969E, 0, 0x9FE1, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x94AC, 0, 0, 0x9FED, /* 0x80 */ + 0x8CB9, 0, 0, 0, 0, 0, 0x8F80, 0, /* 0x90 */ + 0x9FE3, 0, 0, 0, 0x97AD, 0x8D61, 0, 0x9FF0, /* 0x90 */ + 0, 0, 0x88EC, 0, 0, 0x9FEE, 0, 0, /* 0xA0 */ + 0, 0, 0x9FE2, 0, 0, 0, 0, 0x9FE8, /* 0xA0 */ + 0, 0, 0x9FEA, 0, 0, 0, 0x976E, 0x9FE5, /* 0xB0 */ + 0, 0, 0x934D, 0, 0, 0x9FE7, 0, 0xFB4A, /* 0xB0 */ + 0, 0, 0x9FEF, 0, 0x9FE9, 0x96C5, 0, 0, /* 0xC0 */ + 0, 0x9FE4, 0, 0x8EA0, 0x9FFC, 0, 0, 0, /* 0xC0 */ + 0, 0x8A8A, 0, 0x9FE6, 0x9FEB, 0x9FEC, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x91EA, 0x91D8, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x9FF4, 0, 0, 0x9FFA, /* 0xE0 */ + 0, 0, 0x9FF8, 0, 0x9348, 0, 0, 0xE042, /* 0xF0 */ + 0x9FF5, 0, 0, 0, 0, 0, 0x9FF6, 0x9FDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B99, 0x9559, 0, 0, 0, 0x8EBD, 0, /* 0x00 */ + 0, 0x8D97, 0, 0, 0, 0, 0, 0x9852, /* 0x00 */ + 0, 0x9FF2, 0, 0xE041, 0x8989, 0x9186, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x9499, 0, 0x8ABF, 0x97F8, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x969F, 0x92D0, 0, 0, 0, /* 0x20 */ + 0, 0x9FF9, 0x9FFB, 0, 0, 0, 0, 0, /* 0x30 */ + 0x9151, 0, 0, 0, 0, 0, 0xE040, 0x9FF7, /* 0x30 */ + 0, 0x9FF1, 0, 0, 0, 0x8AC1, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x8C89, 0, 0, 0, /* 0x50 */ + 0xE04E, 0, 0, 0xE049, 0x90F6, 0, 0, 0x8A83, /* 0x50 */ + 0, 0, 0, 0, 0x8F81, 0, 0xE052, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE04B, 0x92AA, 0xE048, /* 0x60 */ + 0x92D7, 0, 0, 0, 0xE06B, 0, 0, 0, /* 0x70 */ + 0xE045, 0, 0xE044, 0, 0xE04D, 0, 0, 0, /* 0x70 */ + 0xE047, 0xE046, 0xE04C, 0, 0x909F, 0, 0xE043, 0, /* 0x80 */ + 0xFB4B, 0, 0, 0, 0, 0, 0xE04F, 0, /* 0x80 */ + 0, 0xE050, 0, 0, 0, 0, 0, 0x8AC0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE055, 0, 0xE054, 0xE056, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE059, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x9362, 0, 0xE053, 0, 0xFB4C, 0, 0, /* 0xB0 */ + 0, 0xE057, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x8C83, 0x91F7, 0xE051, 0x945A, 0, 0, 0xE058, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE05D, 0xE05B, 0, 0, /* 0xD0 */ + 0xE05E, 0, 0, 0xE061, 0, 0, 0, 0xE05A, /* 0xD0 */ + 0x8D8A, 0x9447, 0, 0, 0x9FB7, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x9794, 0xE05C, 0, 0xE060, 0x91F3, /* 0xE0 */ + 0, 0xE05F, 0, 0xE04A, 0, 0xFB4D, 0xE889, 0, /* 0xF0 */ + 0, 0, 0xE064, 0, 0, 0, 0xE068 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE066, 0, 0, 0, 0xFB4E, 0, 0xFB4F, /* 0x00 */ + 0, 0xE062, 0, 0xE063, 0, 0, 0, 0xE067, /* 0x00 */ + 0, 0xE065, 0, 0, 0, 0x956D, 0, 0, /* 0x10 */ + 0xE06D, 0, 0xE06A, 0xE069, 0, 0xE06C, 0x93D2, 0xE06E, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x9295, 0x91EB, /* 0x20 */ + 0xFB50, 0, 0, 0, 0x90A3, 0, 0, 0, /* 0x20 */ + 0xE06F, 0, 0xE071, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE070, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x9FF3, 0, 0, 0, /* 0x40 */ + 0, 0xE072, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x93E5, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE073, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x89CE, 0, 0, 0, 0x9394, /* 0x60 */ + 0x8A44, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x8B84, 0, 0, 0, 0x8EDC, 0x8DD0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xFB51, 0, 0, /* 0x80 */ + 0, 0x9846, 0x9086, 0, 0, 0, 0x898A, 0, /* 0x80 */ + 0, 0, 0xE075, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE074, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xFB52, 0xE078, 0x9259, 0xE07B, 0xE076, /* 0xA0 */ + 0, 0, 0, 0xE07A, 0, 0, 0, 0, /* 0xB0 */ + 0xE079, 0x935F, 0x88D7, 0xFA62, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x97F3, 0, 0, 0xE07D, 0, 0, 0, 0x8947, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE080, 0, 0, 0, 0xE07E, 0, 0xE07C, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE077, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x9642, 0, 0, 0, 0xE082 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFB54, 0, 0, 0, /* 0x00 */ + 0, 0xE081, 0, 0, 0, 0, 0, 0xFB53, /* 0x00 */ + 0, 0, 0, 0, 0x898B, 0, 0, 0, /* 0x10 */ + 0, 0xE084, 0x95B0, 0, 0xE083, 0, 0, 0, /* 0x10 */ + 0, 0x96B3, 0, 0, 0, 0, 0x8FC5, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x9152, 0, /* 0x30 */ + 0, 0, 0, 0, 0x8FC4, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xFB56, 0xFB57, /* 0x40 */ + 0, 0x97F9, 0, 0, 0xE08A, 0, 0x90F7, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE086, 0xE08B, 0, /* 0x50 */ + 0, 0x898C, 0, 0, 0xFB55, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE089, 0, 0x9481, 0xE085, 0xE088, 0x8FC6, /* 0x60 */ + 0, 0x94CF, 0, 0, 0xE08C, 0, 0x8ECF, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x90F8, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xE08F, 0, 0, 0, /* 0x80 */ + 0xE087, 0, 0x8C46, 0, 0, 0, 0, 0xE08D, /* 0x80 */ + 0, 0, 0, 0, 0x976F, 0xE090, 0, 0, /* 0x90 */ + 0, 0xEAA4, 0, 0, 0, 0, 0, 0x8F6E, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE091, 0, 0, 0, 0xE092, 0, 0, 0, /* 0xA0 */ + 0, 0x944D, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE094, 0, 0, 0, 0, 0xE095, 0, /* 0xB0 */ + 0, 0xFB59, 0, 0x9452, 0, 0, 0, 0, /* 0xC0 */ + 0x9395, 0xE097, 0, 0, 0, 0, 0xE099, 0, /* 0xC0 */ + 0x97D3, 0, 0xE096, 0, 0xE098, 0x898D, 0, 0xE093, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x9A7A, /* 0xD0 */ + 0xE09A, 0, 0, 0, 0, 0x9187, 0x8E57, 0xE09C, /* 0xE0 */ + 0, 0, 0, 0, 0xE09B, 0x9043, 0x99D7, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE09D, 0, 0, /* 0xF0 */ + 0, 0xE09F, 0, 0xE08E, 0xE09E, 0, 0xFB5A, 0xE0A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x949A, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE0A1, 0, 0, /* 0x00 */ + 0xE0A2, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE0A3, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE0A4, 0, 0x92DC, 0, 0xE0A6, 0xE0A5, 0, 0, /* 0x20 */ + 0xE0A7, 0, 0xE0A8, 0, 0, 0x8EDD, 0x9583, 0, /* 0x30 */ + 0, 0, 0x96EA, 0xE0A9, 0xE0AA, 0x9175, 0x8EA2, 0xE0AB, /* 0x30 */ + 0xE0AC, 0, 0, 0, 0, 0, 0xE0AD, 0x95D0, /* 0x40 */ + 0x94C5, 0, 0, 0xE0AE, 0x9476, 0, 0, 0, /* 0x40 */ + 0, 0, 0x92AB, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE0AF, 0x89E5, 0, 0x8B8D, 0, 0x96C4, 0, 0x96B4, /* 0x50 */ + 0, 0x89B2, 0x9853, 0, 0, 0, 0, 0x9671, /* 0x60 */ + 0, 0x95A8, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x90B5, 0, 0xE0B0, 0, 0, 0, /* 0x70 */ + 0, 0x93C1, 0, 0, 0, 0x8CA1, 0xE0B1, 0, /* 0x70 */ + 0x8DD2, 0xE0B3, 0xE0B2, 0, 0, 0, 0, 0xE0B4, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE0B5, 0, 0, 0, 0xE0B6, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x8B5D, 0, 0xE0B7, 0, 0, 0, 0, 0xE0B8, /* 0xA0 */ + 0, 0, 0, 0, 0x8CA2, 0, 0, 0x94C6, /* 0xA0 */ + 0, 0xFB5B, 0xE0BA, 0, 0, 0, 0x8FF3, 0, /* 0xB0 */ + 0, 0xE0B9, 0, 0, 0, 0, 0xFB5C, 0, /* 0xB0 */ + 0, 0, 0x8BB6, 0xE0BB, 0xE0BD, 0, 0xE0BC, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE0BE, 0, /* 0xC0 */ + 0x8CCF, 0, 0xE0BF, 0, 0, 0, 0, 0x8BE7, /* 0xD0 */ + 0, 0x915F, 0, 0x8D9D, 0, 0, 0, 0, /* 0xD0 */ + 0xE0C1, 0xE0C2, 0xE0C0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x8EEB, 0, 0, 0x93C6, 0x8BB7, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE0C4, /* 0xF0 */ + 0x924B, 0xE0C3, 0, 0, 0x9854, 0x9482 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xE0C7, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE0C9, 0xE0C6, /* 0x10 */ + 0, 0, 0, 0x96D2, 0xE0C8, 0xE0CA, 0, 0x97C2, /* 0x10 */ + 0, 0, 0, 0, 0xFB5D, 0xE0CE, 0, 0, /* 0x20 */ + 0, 0xE0CD, 0x9296, 0x944C, 0, 0, 0x8CA3, 0xE0CC, /* 0x20 */ + 0, 0, 0, 0, 0xE0CB, 0, 0x9750, 0x9751, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE0CF, 0x898E, /* 0x30 */ + 0, 0, 0, 0, 0x8D96, 0x8E82, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE0D0, 0xE0D1, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE0D3, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x8F62, 0, 0, 0, 0, /* 0x60 */ + 0xE0D5, 0, 0xE0D4, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE0D6, 0, 0x8A6C, 0, 0, 0xE0D8, 0, 0xFB5F, /* 0x70 */ + 0xE0D7, 0, 0xE0DA, 0xE0D9, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x8CBA, 0, 0, 0x97A6, /* 0x80 */ + 0, 0x8BCA, 0, 0x89A4, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x8BE8, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x8ADF, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x97E6, 0xE0DC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE0DE, 0, 0xFB60, 0, 0, /* 0xB0 */ + 0xE0DF, 0, 0x89CF, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xE0DB, 0xFB61, 0x8E58, 0, 0, 0x92BF, 0xE0DD, 0, /* 0xC0 */ + 0, 0, 0xFB64, 0, 0, 0, 0xFB62, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE0E2, 0, /* 0xD0 */ + 0x8EEC, 0, 0, 0xFB63, 0, 0xE0E0, 0, 0, /* 0xE0 */ + 0, 0, 0x8C5D, 0, 0, 0x94C7, 0xE0E1, 0, /* 0xE0 */ + 0, 0xE0FC, 0, 0, 0, 0xFB66, 0, 0, /* 0xF0 */ + 0xE0E7, 0, 0, 0, 0, 0, 0x8CBB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B85, 0, 0xE0E4, 0x979D, 0xFB65, /* 0x00 */ + 0, 0x97AE, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x91F4, 0, 0, 0xE0E6, 0xFB67, 0, /* 0x20 */ + 0, 0xFB69, 0xFB68, 0, 0, 0, 0xFB6A, 0, /* 0x20 */ + 0, 0, 0xE0E8, 0x97D4, 0x8BD5, 0x94FA, 0x9469, 0, /* 0x30 */ + 0, 0, 0xE0E9, 0, 0, 0, 0, 0xE0EB, /* 0x30 */ + 0, 0xE0EE, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE0EA, 0, 0, /* 0x50 */ + 0, 0xE0ED, 0x8CE8, 0x896C, 0xE0EF, 0, 0x9090, 0xE0EC, /* 0x50 */ + 0x97DA, 0, 0xFB6B, 0xE0F2, 0xEAA2, 0, 0, 0, /* 0x60 */ + 0, 0xE0F0, 0xE0F3, 0, 0, 0, 0, 0xE0E5, /* 0x60 */ + 0xE0F1, 0, 0, 0x8DBA, 0, 0, 0xE0F4, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE0F5, 0, /* 0x70 */ + 0, 0, 0, 0x979E, 0, 0, 0, 0, /* 0x80 */ + 0, 0xFB6C, 0, 0xE0F6, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xE0F7, 0xFB6D, /* 0x90 */ + 0, 0, 0xE0E3, 0, 0, 0, 0, 0xE0F8, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x8AC2, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x8EA3, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE0F9, 0, 0, 0, 0, 0xE0FA, /* 0xC0 */ + 0, 0, 0, 0, 0xE0FB, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x895A, 0, 0, 0, /* 0xD0 */ + 0xE140, 0, 0x955A, 0xE141, 0, 0, 0x8AA2, 0xE142, /* 0xE0 */ + 0, 0xE143, 0, 0, 0, 0, 0xE144, 0, /* 0xE0 */ + 0xE146, 0xE147, 0xE145, 0, 0, 0, 0x9572, 0xE149, /* 0xF0 */ + 0xE148 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFB6E, 0, 0xE14B, 0xE14A, 0xE14C, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xE14D, 0xE14F, 0xE14E, 0, /* 0x00 */ + 0, 0x8D99, 0, 0xE151, 0, 0xE150, 0, 0, /* 0x10 */ + 0x8AC3, 0, 0x9072, 0, 0x935B, 0, 0xE152, 0x90B6, /* 0x10 */ + 0, 0, 0, 0x8E59, 0, 0x8999, 0xE153, 0, /* 0x20 */ + 0x9770, 0, 0, 0x95E1, 0xE154, 0, 0, 0xFAA8, /* 0x20 */ + 0x9363, 0x9752, 0x8D62, 0x905C, 0, 0, 0, 0x926A, /* 0x30 */ + 0x99B2, 0, 0x92AC, 0x89E6, 0xE155, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE156, 0, 0xE15B, 0, /* 0x40 */ + 0, 0xE159, 0xE158, 0x9DC0, 0x8A45, 0xE157, 0, 0x88D8, /* 0x40 */ + 0, 0x94A8, 0, 0, 0x94C8, 0, 0, 0, /* 0x50 */ + 0, 0x97AF, 0xE15C, 0xE15A, 0x927B, 0x90A4, 0, 0, /* 0x50 */ + 0x94A9, 0, 0x954C, 0, 0xE15E, 0x97AA, 0x8C6C, 0xE15F, /* 0x60 */ + 0, 0xE15D, 0x94D4, 0xE160, 0, 0xE161, 0, 0xFB6F, /* 0x60 */ + 0x88D9, 0, 0, 0x8FF4, 0xE166, 0, 0xE163, 0x93EB, /* 0x70 */ + 0xE162, 0, 0, 0, 0, 0, 0, 0x8B45, /* 0x70 */ + 0, 0, 0xE169, 0, 0, 0, 0xE164, 0xE165, /* 0x80 */ + 0, 0xE168, 0xE167, 0x9544, 0, 0, 0x9161, 0x9160, /* 0x80 */ + 0, 0x8B5E, 0, 0, 0xE16A, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE16B, 0, 0, 0xE16C, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE16E, 0, 0xE16D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x8975, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE176, 0x94E6, 0xE170, 0, 0xE172, 0, 0, /* 0xB0 */ + 0xE174, 0x905D, 0, 0, 0xE175, 0xE173, 0x8EBE, 0, /* 0xB0 */ + 0, 0, 0xE16F, 0xE171, 0, 0x9561, 0, 0x8FC7, /* 0xC0 */ + 0, 0, 0xE178, 0, 0, 0xE177, 0, 0, /* 0xC0 */ + 0, 0, 0xE179, 0, 0x8EA4, 0x8DAD, 0, 0, /* 0xD0 */ + 0x9397, 0xE17A, 0, 0x92C9, 0, 0, 0xE17C, 0, /* 0xD0 */ + 0, 0, 0x979F, 0xE17B, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x9189, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE182, 0, 0xE184, 0xE185, 0x9273, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xE183, 0, 0xE180, 0, 0xE17D, 0xE17E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE181, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xE188, 0, 0xE186, 0, 0xE187, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE189, /* 0x10 */ + 0xE18B, 0xE18C, 0xE18D, 0, 0xE18E, 0, 0, 0xE18A, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE190, 0, 0, 0, 0xE18F, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE191, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x97C3, 0, 0, 0, 0xE194, 0xE192, /* 0x40 */ + 0xE193, 0, 0, 0, 0x8AE0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x96FC, 0, 0, 0, 0x95C8, 0, /* 0x50 */ + 0xE196, 0, 0, 0, 0xE195, 0, 0, 0, /* 0x50 */ + 0, 0xE197, 0xE198, 0, 0, 0, 0, 0xE19C, /* 0x60 */ + 0xE199, 0xE19A, 0xE19B, 0, 0xE19D, 0, 0, 0, /* 0x60 */ + 0xE19E, 0, 0xE19F, 0, 0, 0, 0xE1A0, 0, /* 0x70 */ + 0xE1A1, 0, 0x94AD, 0x936F, 0xE1A2, 0x9492, 0x9553, 0, /* 0x70 */ + 0xE1A3, 0, 0xFB70, 0xE1A4, 0x9349, 0, 0x8A46, 0x8D63, /* 0x80 */ + 0xE1A5, 0, 0, 0xE1A6, 0, 0, 0xE1A7, 0, /* 0x80 */ + 0x8E48, 0, 0, 0xE1A9, 0, 0, 0xE1A8, 0, /* 0x90 */ + 0, 0xE1AA, 0xE1AB, 0xFB73, 0xFB71, 0, 0xFB72, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xFB74, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x94E7, 0, /* 0xA0 */ + 0xE1AC, 0, 0, 0, 0xE1AD, 0, 0, 0xEA89, /* 0xB0 */ + 0xE1AE, 0xE1AF, 0xE1B0, 0, 0, 0, 0, 0x8E4D, /* 0xB0 */ + 0, 0, 0xE1B1, 0x9475, 0, 0, 0x967E, 0, /* 0xC0 */ + 0x896D, 0, 0x8976, 0, 0, 0xE1B2, 0, 0, /* 0xC0 */ + 0, 0, 0xE1B4, 0, 0, 0, 0xE1B3, 0x9390, /* 0xD0 */ + 0, 0, 0, 0x90B7, 0x9F58, 0, 0xE1B5, 0x96BF, /* 0xD0 */ + 0, 0xE1B6, 0, 0x8AC4, 0x94D5, 0xE1B7, 0, 0xE1B8, /* 0xE0 */ + 0, 0, 0xE1B9, 0, 0, 0, 0x96DA, 0, /* 0xE0 */ + 0, 0, 0x96D3, 0, 0x92BC, 0, 0, 0, /* 0xF0 */ + 0x918A, 0, 0, 0xE1BB, 0, 0, 0x8F82 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8FC8, 0, 0, 0xE1BE, 0, 0, 0xE1BD, /* 0x00 */ + 0xE1BC, 0x94FB, 0, 0x8AC5, 0x8CA7, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE1C4, 0, 0, 0xE1C1, 0x905E, /* 0x10 */ + 0x96B0, 0, 0, 0, 0xE1C0, 0xE1C2, 0xE1C3, 0, /* 0x20 */ + 0, 0xE1BF, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1C5, /* 0x30 */ + 0xE1C6, 0, 0x92AD, 0, 0x8AE1, 0, 0, 0, /* 0x30 */ + 0x9285, 0, 0, 0, 0, 0, 0xFB76, 0xE1C7, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE1C8, 0xE1CB, 0, 0, 0, 0, /* 0x50 */ + 0, 0x9087, 0, 0x93C2, 0, 0xE1CC, 0x9672, 0, /* 0x60 */ + 0xE1C9, 0, 0, 0xE1CA, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE1CF, 0, 0, 0, 0, 0xE1CE, 0xE1CD, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE1D1, 0, 0, 0xE1D0, 0, /* 0x80 */ + 0, 0xE1D2, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xE1D4, 0, /* 0x90 */ + 0xE1D3, 0, 0, 0, 0, 0x95CB, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x8F75, 0x97C4, 0, 0, /* 0xA0 */ + 0xE1D5, 0, 0, 0x93B5, 0, 0, 0xE1D6, 0, /* 0xB0 */ + 0, 0xE1D7, 0, 0xE1DB, 0xE1D9, 0xE1DA, 0, 0xE1D8, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1DC, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE1DD, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1DE, /* 0xD0 */ + 0, 0, 0xE1DF, 0x96B5, 0xE1E0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x96EE, 0xE1E1, 0, 0x926D, 0, 0x948A, /* 0xE0 */ + 0, 0x8BE9, 0, 0, 0, 0x925A, 0xE1E2, 0x8BB8, /* 0xE0 */ + 0, 0, 0, 0x90CE, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xE1E3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8DBB, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xE1E4, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE1E5, 0, 0x8CA4, 0x8DD3, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE1E7, 0xFB78, 0, 0, 0, 0x9375, 0x8DD4, 0x8B6D, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x9643, 0, 0x946A, 0, 0, 0, /* 0x30 */ + 0, 0, 0x9376, 0, 0, 0, 0, 0x8D7B, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE1E9, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xFB79, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x8FC9, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xFB7A, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x97B0, 0x8D64, 0, 0, 0x8CA5, /* 0x60 */ + 0, 0, 0x94A1, 0, 0xE1EB, 0, 0, 0, /* 0x70 */ + 0, 0, 0xFB7B, 0, 0xE1ED, 0, 0, 0, /* 0x70 */ + 0, 0x8CE9, 0, 0, 0, 0, 0xE1EC, 0x92F4, /* 0x80 */ + 0, 0, 0, 0, 0xE1EF, 0x8A56, 0xE1EA, 0, /* 0x80 */ + 0, 0x94E8, 0, 0x894F, 0, 0x8DEA, 0, 0x9871, /* 0x90 */ + 0, 0, 0xE1EE, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE1F0, 0, 0, 0, 0x95C9, /* 0xA0 */ + 0, 0x90D7, 0xE1F2, 0, 0, 0, 0, 0xE1F3, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xE1F1, 0, 0, /* 0xB0 */ + 0, 0, 0x8A6D, 0, 0xE1F9, 0, 0xE1F8, 0, /* 0xB0 */ + 0, 0x8EA5, 0, 0, 0, 0xE1FA, 0xE1F5, 0, /* 0xC0 */ + 0, 0, 0xE1FB, 0xE1F6, 0, 0, 0, 0, /* 0xC0 */ + 0x94D6, 0xE1F4, 0, 0, 0xE1F7, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE241, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE240, /* 0xE0 */ + 0x9681, 0, 0, 0, 0xE1FC, 0, 0, 0x88E9, /* 0xE0 */ + 0, 0, 0, 0, 0xE243, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xE242 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8FCA, 0, 0, 0, 0, 0, 0xE244, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x9162, 0, /* 0x00 */ + 0, 0xE246, 0xE245, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE247, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE1E6, 0, /* 0x20 */ + 0, 0, 0xE1E8, 0xE249, 0xE248, 0, 0, 0, /* 0x20 */ + 0xFB7C, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x8EA6, 0, 0x97E7, 0, 0x8ED0, 0, /* 0x30 */ + 0xE24A, 0x8C56, 0, 0, 0, 0, 0, 0x8B5F, /* 0x40 */ + 0x8B46, 0x8E83, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x9753, 0, 0, 0xE250, 0, 0xE24F, 0x9163, 0xE24C, /* 0x50 */ + 0, 0, 0xE24E, 0, 0, 0x8F6A, 0x905F, 0xE24D, /* 0x50 */ + 0xE24B, 0, 0x9449, 0, 0, 0x8FCB, 0, 0, /* 0x60 */ + 0x955B, 0, 0, 0, 0, 0x8DD5, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x9398, /* 0x70 */ + 0, 0, 0xE251, 0, 0, 0, 0, 0xE252, /* 0x70 */ + 0xE268, 0x8BD6, 0, 0, 0x985C, 0x9154, 0, 0, /* 0x80 */ + 0, 0, 0xE253, 0, 0, 0x89D0, 0x92F5, 0x959F, /* 0x80 */ + 0, 0, 0, 0, 0xFB81, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xFB83, 0, 0xE254, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x8B9A, 0xE255, /* 0xA0 */ + 0, 0, 0xE257, 0, 0, 0, 0xE258, 0, /* 0xA0 */ + 0x9448, 0, 0, 0xE259, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE25A, 0xE25B, 0, 0, 0x8BD7, 0x89D1, 0x93C3, /* 0xB0 */ + 0x8F47, 0x8E84, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE25C, 0, 0x8F48, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x89C8, 0x9562, 0, 0, 0xE25D, 0, 0, /* 0xD0 */ + 0x94E9, 0, 0, 0, 0, 0, 0, 0x9164, /* 0xD0 */ + 0, 0xE260, 0, 0xE261, 0x9489, 0, 0x9060, 0xE25E, /* 0xE0 */ + 0, 0x9281, 0, 0, 0xE25F, 0, 0, 0, /* 0xE0 */ + 0x8FCC, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0x88DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B48, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE262, 0, 0, 0x92F6, 0, 0xE263, 0x90C5, 0, /* 0x00 */ + 0, 0, 0, 0, 0x96AB, 0, 0, 0x9542, /* 0x10 */ + 0xE264, 0xE265, 0x9274, 0, 0x97C5, 0, 0, 0xE267, /* 0x10 */ + 0xE266, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x8EED, 0, /* 0x20 */ + 0, 0xE269, 0x88EE, 0, 0, 0, 0, 0xE26C, /* 0x30 */ + 0, 0, 0, 0xE26A, 0x89D2, 0x8C6D, 0xE26B, 0x8D65, /* 0x30 */ + 0x8D92, 0, 0x95E4, 0xE26D, 0, 0, 0x9673, 0, /* 0x40 */ + 0, 0xE26F, 0, 0, 0, 0x90CF, 0x896E, 0x89B8, /* 0x40 */ + 0x88AA, 0, 0, 0, 0, 0, 0, 0xE26E, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xE270, 0xE271, 0x8FF5, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE272, 0, 0x8A6E, 0, 0, 0, 0, /* 0x60 */ + 0xE274, 0, 0, 0, 0x8C8A, 0, 0x8B86, 0, /* 0x70 */ + 0, 0xE275, 0x8BF3, 0, 0, 0xE276, 0, 0x90FA, /* 0x70 */ + 0, 0x93CB, 0, 0x90DE, 0x8DF3, 0, 0, 0, /* 0x80 */ + 0xE277, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x9282, 0x918B, 0, 0xE279, 0xE27B, 0xE278, /* 0x90 */ + 0xE27A, 0, 0, 0, 0, 0, 0, 0x8C41, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE27C, 0x8C45, 0, 0, 0, 0x8B87, 0x9771, /* 0xA0 */ + 0xE27E, 0, 0, 0, 0, 0, 0xE280, 0, /* 0xB0 */ + 0, 0, 0x894D, 0, 0, 0, 0, 0xE283, /* 0xB0 */ + 0, 0, 0, 0x8A96, 0xE282, 0xE281, 0, 0xE285, /* 0xC0 */ + 0xE27D, 0, 0xE286, 0x97A7, 0, 0xE287, 0, 0xE288, /* 0xC0 */ + 0, 0xFB84, 0x9AF2, 0xE28A, 0, 0xE289, 0, 0, /* 0xD0 */ + 0, 0xE28B, 0xE28C, 0, 0x97B3, 0xE28D, 0, 0xE8ED, /* 0xD0 */ + 0x8FCD, 0xE28E, 0xE28F, 0x8F76, 0, 0x93B6, 0xE290, 0xFB85, /* 0xE0 */ + 0, 0, 0x9247, 0xFB87, 0, 0xE291, 0, 0x925B, /* 0xE0 */ + 0xE292, 0, 0, 0, 0, 0, 0x8BA3, 0, /* 0xF0 */ + 0x995E, 0x927C, 0x8EB1, 0, 0, 0, 0, 0x8AC6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE293, 0, 0xE2A0, 0, 0xE296, 0, /* 0x00 */ + 0x8B88, 0, 0xE295, 0xE2A2, 0, 0, 0, 0xE294, /* 0x00 */ + 0, 0x8FCE, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE298, 0xE299, 0, 0x934A, 0, 0, 0xE29A, 0, /* 0x10 */ + 0x8A7D, 0, 0, 0, 0, 0x9079, 0x9584, 0, /* 0x20 */ + 0xE29C, 0, 0, 0, 0x91E6, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE297, 0, 0xE29B, 0xE29D, 0, /* 0x30 */ + 0, 0x8DF9, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE2A4, 0x954D, 0, /* 0x40 */ + 0x94A4, 0x9399, 0, 0x8BD8, 0xE2A3, 0xE2A1, 0, 0x94B3, /* 0x40 */ + 0xE29E, 0x927D, 0x939B, 0, 0x939A, 0, 0x8DF4, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE2B6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE2A6, 0, 0xE2A8, /* 0x60 */ + 0, 0, 0, 0, 0xE2AB, 0, 0xE2AC, 0, /* 0x60 */ + 0xE2A9, 0xE2AA, 0, 0, 0xE2A7, 0xE2A5, 0, 0, /* 0x70 */ + 0, 0, 0xE29F, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x95CD, 0x89D3, /* 0x80 */ + 0, 0, 0, 0xE2B3, 0, 0xE2B0, 0, 0xE2B5, /* 0x80 */ + 0, 0, 0xE2B4, 0, 0x9493, 0x96A5, 0, 0x8E5A, /* 0x90 */ + 0xE2AE, 0xE2B7, 0xE2B2, 0, 0xE2B1, 0xE2AD, 0xFB88, 0xE2AF, /* 0x90 */ + 0, 0x8AC7, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x925C, 0, 0, 0x90FB, 0, 0, /* 0xA0 */ + 0, 0x94A0, 0, 0, 0xE2BC, 0, 0, 0, /* 0xB0 */ + 0x94A2, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x90DF, 0xE2B9, 0, 0, 0x94CD, 0, 0xE2BD, 0x95D1, /* 0xC0 */ + 0, 0x927A, 0, 0xE2B8, 0xE2BA, 0, 0, 0xE2BB, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xE2BE, 0, 0, /* 0xD0 */ + 0x8EC2, 0, 0, 0, 0x93C4, 0xE2C3, 0xE2C2, 0, /* 0xE0 */ + 0, 0xE2BF, 0, 0, 0, 0x9855, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE2C8, 0, 0, 0xE2CC, 0xE2C9, /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2C5, 0, 0, 0, 0, 0, 0, 0xE2C6, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE2CB, 0, 0, /* 0x00 */ + 0, 0xE2C0, 0x99D3, 0xE2C7, 0xE2C1, 0, 0, 0xE2CA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2D0, /* 0x10 */ + 0, 0x8AC8, 0, 0xE2CD, 0, 0, 0, 0xE2CE, /* 0x20 */ + 0, 0, 0xE2CF, 0xE2D2, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2D1, /* 0x30 */ + 0x94F4, 0, 0, 0, 0, 0xE2D3, 0x97FA, 0x95EB, /* 0x30 */ + 0xE2D8, 0, 0, 0xE2D5, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE2D4, 0x90D0, 0, 0xE2D7, /* 0x40 */ + 0xE2D9, 0, 0, 0, 0xE2D6, 0, 0xE2DD, 0, /* 0x50 */ + 0xE2DA, 0, 0, 0, 0, 0, 0, 0xE2DB, /* 0x50 */ + 0xE2C4, 0, 0, 0, 0xE2DC, 0xE2DE, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE2DF, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x95C4, 0, 0xE2E0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x96E0, 0, /* 0x70 */ + 0, 0x8BCC, 0x8C48, 0xE2E1, 0, 0, 0, 0, /* 0x80 */ + 0, 0x95B2, 0, 0x9088, 0, 0x96AE, 0, 0, /* 0x80 */ + 0xE2E2, 0, 0x97B1, 0, 0, 0x9494, 0, 0x9165, /* 0x90 */ + 0x9453, 0, 0, 0x8F6C, 0, 0, 0, 0x88BE, /* 0x90 */ + 0, 0xE2E7, 0xE2E5, 0, 0xE2E3, 0x8A9F, 0, 0x8FCF, /* 0xA0 */ + 0xE2E8, 0, 0, 0xE2E6, 0, 0xE2E4, 0xE2EC, 0, /* 0xA0 */ + 0, 0xE2EB, 0xE2EA, 0xE2E9, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE2ED, 0, 0, 0, 0xE2EE, 0x90B8, 0, /* 0xB0 */ + 0xE2EF, 0, 0xE2F1, 0, 0, 0xE2F0, 0, 0, /* 0xC0 */ + 0, 0, 0x8CD0, 0, 0, 0, 0x9157, 0, /* 0xC0 */ + 0, 0, 0xE2F3, 0, 0, 0, 0x939C, 0, /* 0xD0 */ + 0xE2F2, 0, 0, 0, 0xE2F4, 0, 0x95B3, 0x918C, /* 0xD0 */ + 0x8D66, 0, 0xE2F5, 0, 0, 0, 0, 0x97C6, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2F7, /* 0xE0 */ + 0, 0, 0xE2F8, 0, 0xE2F9, 0, 0xE2FA, 0, /* 0xF0 */ + 0x8E85, 0, 0xE2FB, 0x8C6E, 0, 0, 0x8B8A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B49, 0, 0xE340, 0, 0x96F1, 0x8D67, 0xE2FC, 0, /* 0x00 */ + 0, 0, 0xE343, 0x96E4, 0, 0x945B, 0, 0, /* 0x00 */ + 0x9552, 0, 0, 0, 0x8F83, 0xE342, 0, 0x8ED1, /* 0x10 */ + 0x8D68, 0x8E86, 0x8B89, 0x95B4, 0xE341, 0, 0, 0, /* 0x10 */ + 0x9166, 0x9661, 0x8DF5, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x8E87, 0x92DB, 0, 0xE346, 0x97DD, /* 0x20 */ + 0x8DD7, 0, 0xE347, 0x9061, 0, 0xE349, 0, 0, /* 0x30 */ + 0, 0x8FD0, 0x8DAE, 0, 0, 0, 0, 0xE348, /* 0x30 */ + 0, 0, 0x8F49, 0x8CBC, 0x9167, 0xE344, 0xE34A, 0, /* 0x40 */ + 0xFB8A, 0, 0, 0xE345, 0x8C6F, 0, 0xE34D, 0xE351, /* 0x40 */ + 0x8C8B, 0, 0, 0, 0, 0, 0xE34C, 0, /* 0x50 */ + 0, 0, 0, 0xE355, 0xFB8B, 0, 0x8D69, 0, /* 0x50 */ + 0, 0x978D, 0x88BA, 0xE352, 0, 0, 0x8B8B, 0, /* 0x60 */ + 0xE34F, 0, 0, 0, 0, 0, 0xE350, 0, /* 0x60 */ + 0, 0x939D, 0xE34E, 0xE34B, 0, 0x8A47, 0x90E2, 0, /* 0x70 */ + 0, 0x8CA6, 0, 0, 0, 0xE357, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE354, 0, 0, 0, 0, 0, 0xE356, /* 0x80 */ + 0, 0, 0, 0xE353, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8C70, 0x91B1, 0xE358, 0x918E, 0, 0, 0xE365, /* 0x90 */ + 0xFB8D, 0, 0xE361, 0xE35B, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE35F, 0x8EF8, 0x88DB, 0xE35A, 0xE362, /* 0xA0 */ + 0xE366, 0x8D6A, 0x96D4, 0, 0x92D4, 0xE35C, 0, 0xFB8C, /* 0xB0 */ + 0xE364, 0, 0xE359, 0x925D, 0, 0xE35E, 0x88BB, 0x96C8, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE35D, /* 0xC0 */ + 0, 0, 0x8BD9, 0x94EA, 0, 0, 0, 0x918D, /* 0xC0 */ + 0, 0x97CE, 0x8F8F, 0, 0, 0xE38E, 0xFB8E, 0, /* 0xD0 */ + 0xE367, 0, 0x90FC, 0, 0xE363, 0xE368, 0xE36A, 0, /* 0xD0 */ + 0x92F7, 0xE36D, 0, 0, 0xE369, 0, 0, 0, /* 0xE0 */ + 0x95D2, 0x8AC9, 0, 0, 0x96C9, 0, 0, 0x88DC, /* 0xE0 */ + 0, 0, 0xE36C, 0, 0x97FB, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xE36B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x898F, 0, 0, 0x93EA, 0xE36E, 0, 0, /* 0x00 */ + 0, 0xE375, 0xE36F, 0xE376, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE372, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x949B, 0, 0, 0x8EC8, 0xE374, /* 0x10 */ + 0, 0xE371, 0xE377, 0xE370, 0, 0, 0x8F63, 0, /* 0x20 */ + 0, 0, 0, 0x9644, 0, 0, 0x8F6B, 0, /* 0x20 */ + 0, 0xE373, 0xE380, 0, 0, 0xE37B, 0, 0xE37E, /* 0x30 */ + 0, 0xE37C, 0xE381, 0xE37A, 0, 0xE360, 0x90D1, 0, /* 0x30 */ + 0, 0x94C9, 0, 0xE37D, 0, 0, 0xE378, 0, /* 0x40 */ + 0, 0, 0x9140, 0x8C71, 0, 0x8F4A, 0, 0, /* 0x40 */ + 0, 0, 0xFB8F, 0, 0x9044, 0x9155, 0xE384, 0, /* 0x50 */ + 0, 0xE386, 0xE387, 0, 0, 0xE383, 0xE385, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE379, 0xE382, /* 0x60 */ + 0, 0xE38A, 0xE389, 0, 0, 0x969A, 0, 0, /* 0x60 */ + 0x8C4A, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE388, 0, 0xE38C, 0xE38B, 0xE38F, 0, 0xE391, /* 0x70 */ + 0, 0, 0x8E5B, 0xE38D, 0, 0, 0, 0, /* 0x80 */ + 0xE392, 0xE393, 0xFA5C, 0, 0xE394, 0, 0xE39A, 0x935A, /* 0x80 */ + 0xE396, 0, 0xE395, 0xE397, 0xE398, 0, 0xE399, 0, /* 0x90 */ + 0, 0, 0, 0xE39B, 0xE39C /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8ACA, 0, /* 0x30 */ + 0xE39D, 0, 0xE39E, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE39F, 0, 0xFB90, /* 0x40 */ + 0, 0, 0, 0, 0xE3A0, 0xE3A1, 0xE3A2, 0, /* 0x40 */ + 0xE3A3, 0xE3A4, 0, 0, 0xE3A6, 0xE3A5, 0, 0, /* 0x50 */ + 0xE3A7, 0, 0, 0, 0, 0, 0, 0xE3A8, /* 0x50 */ + 0xE3A9, 0, 0, 0, 0, 0, 0, 0xE3AC, /* 0x60 */ + 0xE3AA, 0xE3AB, 0x8DDF, 0x8C72, 0, 0, 0x9275, 0, /* 0x60 */ + 0x94B1, 0, 0x8F90, 0, 0, 0x946C, 0, 0x94EB, /* 0x70 */ + 0xE3AD, 0x9CEB, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE3AE, 0xE3B0, 0, 0x9785, 0xE3AF, 0xE3B2, /* 0x80 */ + 0xE3B1, 0, 0x9772, 0, 0xE3B3, 0, 0x94FC, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE3B4, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE3B7, 0, 0, 0xE3B6, 0xE3B5, 0, /* 0x90 */ + 0, 0xFB91, 0, 0xE3B8, 0x8C51, 0, 0, 0, /* 0xA0 */ + 0x9141, 0x8B60, 0, 0, 0, 0, 0xE3BC, 0xE3B9, /* 0xA0 */ + 0, 0, 0xE3BA, 0, 0, 0, 0xE3BD, 0, /* 0xB0 */ + 0xE3BE, 0xE3BB, 0, 0, 0, 0x8948, 0, 0, /* 0xB0 */ + 0, 0x89A5, 0, 0, 0, 0xE3C0, 0xE3C1, 0, /* 0xC0 */ + 0, 0, 0xE3C2, 0, 0x9782, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x8F4B, 0, 0xE3C4, 0xE3C3, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x9089, 0xE3C5, 0, 0, 0, 0, 0xE3C6, 0, /* 0xE0 */ + 0, 0xE3C7, 0, 0x8AE3, 0, 0, 0, 0, /* 0xE0 */ + 0x8ACB, 0, 0, 0xE3C8, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE3C9, 0, 0x967C, 0x9783 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9773, 0x9856, 0, 0x8D6C, 0xE3CC, 0x8ED2, 0xE3CB, 0, /* 0x00 */ + 0, 0, 0, 0xE3CD, 0x8EA7, 0, 0, 0, /* 0x00 */ + 0x91CF, 0, 0xE3CE, 0, 0, 0x8D6B, 0, 0x96D5, /* 0x10 */ + 0xE3CF, 0xE3D0, 0, 0, 0xE3D1, 0, 0, 0, /* 0x10 */ + 0, 0xE3D2, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE3D3, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x8EA8, 0, 0, 0x96EB, 0, /* 0x30 */ + 0, 0, 0, 0xE3D5, 0, 0x925E, 0, 0xE3D4, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE3D7, 0, /* 0x40 */ + 0, 0, 0xE3D6, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xE3D8, 0, 0, 0, 0x90B9, 0, /* 0x50 */ + 0xE3D9, 0, 0xE3DA, 0, 0, 0, 0x95B7, 0xE3DB, /* 0x50 */ + 0, 0x918F, 0xE3DC, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE3DD, 0, 0, 0, 0, 0, 0, 0x97FC, /* 0x60 */ + 0xE3E0, 0, 0xE3DF, 0xE3DE, 0x92AE, 0, 0xE3E1, 0x9045, /* 0x70 */ + 0, 0xE3E2, 0, 0, 0, 0xE3E3, 0x9857, 0xE3E4, /* 0x70 */ + 0, 0, 0, 0, 0xE3E5, 0xE3E7, 0xE3E6, 0x94A3, /* 0x80 */ + 0, 0x93F7, 0, 0x985D, 0x94A7, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE3E9, 0, 0, 0x8FD1, 0, /* 0x90 */ + 0x9549, 0, 0xE3EA, 0xE3E8, 0, 0x8ACC, 0, 0, /* 0x90 */ + 0, 0x8CD2, 0x8E88, 0, 0, 0x94EC, 0, 0, /* 0xA0 */ + 0, 0x8CA8, 0x9662, 0, 0xE3ED, 0xE3EB, 0, 0x8D6D, /* 0xA0 */ + 0, 0x8D6E, 0x88E7, 0, 0x8DE6, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x9478, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x88DD, 0xE3F2, 0, 0x925F, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x9477, 0, 0x91D9, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE3F4, 0, /* 0xD0 */ + 0, 0xE3F0, 0xE3F3, 0xE3EE, 0, 0xE3F1, 0x9645, 0, /* 0xD0 */ + 0, 0x8CD3, 0, 0, 0x88FB, 0xE3EF, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE3F6, /* 0xE0 */ + 0, 0xE3F7, 0, 0, 0x93B7, 0, 0, 0, /* 0xF0 */ + 0x8BB9, 0, 0, 0, 0xE445, 0x945C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E89, 0, 0, 0x8BBA, 0x90C6, 0x9865, /* 0x00 */ + 0x96AC, 0xE3F5, 0x90D2, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x8B72, 0xE3F8, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE3FA, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE3F9, 0, 0, 0, 0, 0, 0xE3FB, /* 0x20 */ + 0, 0x9245, 0, 0x945D, 0, 0, 0, 0, /* 0x30 */ + 0, 0x92AF, 0, 0, 0, 0, 0xE442, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE441, 0, /* 0x40 */ + 0, 0, 0, 0xE3FC, 0, 0, 0x9074, 0, /* 0x40 */ + 0x9585, 0xE444, 0, 0xE443, 0x8D6F, 0x9872, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xE454, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE448, 0xE449, 0, /* 0x60 */ + 0, 0, 0, 0x8EEE, 0, 0, 0xE447, 0, /* 0x60 */ + 0x8D98, 0xE446, 0, 0, 0xE44A, 0, 0, 0, /* 0x70 */ + 0x92B0, 0x95A0, 0x9142, 0, 0, 0, 0, 0x91DA, /* 0x70 */ + 0xE44E, 0, 0xE44F, 0xE44B, 0, 0, 0, 0, /* 0x80 */ + 0xE44C, 0, 0xE44D, 0, 0, 0, 0, 0x8D70, /* 0x80 */ + 0, 0, 0, 0xE455, 0, 0xE451, 0, 0, /* 0x90 */ + 0, 0, 0x9586, 0, 0x968C, 0x9547, 0, 0, /* 0x90 */ + 0xE450, 0, 0, 0xE453, 0xE452, 0, 0, 0, /* 0xA0 */ + 0x9663, 0xE456, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE457, 0, 0, 0x9156, 0, 0xE458, 0, 0, /* 0xB0 */ + 0xE45A, 0, 0xE45E, 0, 0, 0xE45B, 0xE459, 0x945E, /* 0xB0 */ + 0xE45C, 0, 0xE45D, 0, 0, 0, 0x89B0, 0, /* 0xC0 */ + 0xE464, 0xE45F, 0, 0, 0, 0xE460, 0, 0, /* 0xC0 */ + 0, 0xE461, 0, 0x919F, 0, 0, 0, 0, /* 0xD0 */ + 0xE463, 0xE462, 0xE465, 0, 0, 0, 0, 0xE466, /* 0xD0 */ + 0xE467, 0, 0, 0x9062, 0, 0x89E7, 0, 0xE468, /* 0xE0 */ + 0x97D5, 0, 0x8EA9, 0, 0, 0x8F4C, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x8E8A, 0x9276, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xE469, 0xE46A, 0x8950, 0, 0xE46B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE46C, 0xE46D, 0, 0, 0xE46E, 0, 0xE46F, /* 0x00 */ + 0x8BBB, 0x9DA8, 0xE470, 0, 0x90E3, 0xE471, 0x8EC9, 0, /* 0x00 */ + 0xE472, 0, 0x98AE, 0, 0, 0, 0xE473, 0x95DC, /* 0x10 */ + 0x8ADA, 0, 0, 0x9143, 0x8F77, 0, 0x9591, 0x8F4D, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE474, 0x8D71, 0xE475, 0x94CA, 0, 0xE484, 0, /* 0x20 */ + 0, 0, 0, 0xE477, 0, 0x91C7, 0x9495, 0x8CBD, /* 0x30 */ + 0xE476, 0x9144, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE478, 0, 0, 0, 0, 0, 0, 0x92F8, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE47A, 0xE479, 0xE47C, 0, 0, 0xE47B, 0, 0xE47D, /* 0x50 */ + 0, 0, 0xE480, 0, 0xE47E, 0, 0x8ACD, 0, /* 0x60 */ + 0xE481, 0, 0xE482, 0xE483, 0, 0, 0x8DAF, 0x97C7, /* 0x60 */ + 0, 0xE485, 0x9046, 0, 0, 0, 0x8990, 0xE486, /* 0x70 */ + 0xE487, 0, 0, 0, 0, 0, 0xE488, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x88F0, 0, 0xE489, 0, 0, /* 0x80 */ + 0, 0, 0xE48A, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9587, 0, 0, 0, 0x8EC5, 0, 0xE48C, /* 0x90 */ + 0, 0, 0, 0, 0, 0x8A48, 0x88B0, 0, /* 0xA0 */ + 0, 0, 0, 0xE48B, 0xE48E, 0x946D, 0, 0x9063, /* 0xA0 */ + 0, 0x89D4, 0, 0x9646, 0, 0, 0, 0, /* 0xB0 */ + 0x8C7C, 0x8BDA, 0, 0xE48D, 0, 0x89E8, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x8AA1, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x8991, 0xE492, 0x97E8, 0x91DB, 0, 0, 0x9563, /* 0xD0 */ + 0, 0xE49E, 0, 0x89D5, 0xE49C, 0, 0xE49A, 0xE491, /* 0xD0 */ + 0, 0xE48F, 0, 0xE490, 0, 0x8EE1, 0x8BEA, 0x9297, /* 0xE0 */ + 0, 0, 0, 0x93CF, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x8970, 0, 0xE494, 0xE493, 0, 0, 0, /* 0xF0 */ + 0, 0xE499, 0xE495, 0xE498 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFB93, 0x96CE, 0xE497, 0x89D6, 0x8A9D, 0xE49B, 0, /* 0x00 */ + 0, 0xE49D, 0, 0, 0, 0, 0x8C73, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE4A1, 0xE4AA, /* 0x10 */ + 0xE4AB, 0, 0, 0, 0x88A9, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE4B2, 0, 0, 0, 0, /* 0x20 */ + 0x88EF, 0, 0, 0xE4A9, 0, 0, 0, 0xE4A8, /* 0x20 */ + 0, 0xE4A3, 0xE4A2, 0, 0xE4A0, 0xE49F, 0x9283, 0, /* 0x30 */ + 0x91F9, 0xE4A5, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE4A4, 0, 0, 0, 0, 0xE4A7, 0, 0, /* 0x40 */ + 0, 0x9190, 0x8C74, 0, 0, 0, 0, 0x8960, /* 0x40 */ + 0xE4A6, 0, 0x8D72, 0, 0, 0, 0, 0, /* 0x50 */ + 0x9191, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xFB94, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE4B8, 0, 0xE4B9, 0, 0x89D7, /* 0x70 */ + 0, 0, 0, 0x89AC, 0xE4B6, 0, 0, 0xFB95, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE4AC, 0, 0xE4B4, /* 0x80 */ + 0, 0xE4BB, 0xE4B5, 0, 0, 0, 0xE4B3, 0, /* 0x80 */ + 0, 0, 0, 0xE496, 0, 0, 0xE4B1, 0, /* 0x90 */ + 0, 0, 0xE4AD, 0, 0, 0, 0x8ACE, 0xE4AF, /* 0x90 */ + 0xE4BA, 0, 0xE4B0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE4BC, 0, 0xE4AE, 0x949C, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x9789, 0, 0, 0, 0xE4B7, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE4CD, 0, 0, /* 0xB0 */ + 0, 0xE4C5, 0, 0, 0, 0x909B, 0, 0xFB96, /* 0xC0 */ + 0, 0, 0x8B65, 0, 0x8BDB, 0, 0xE4C0, 0, /* 0xC0 */ + 0, 0, 0, 0x89D9, 0, 0, 0x8FD2, 0, /* 0xD0 */ + 0xE4C3, 0, 0, 0, 0x8DD8, 0, 0, 0x9370, /* 0xD0 */ + 0xE4C8, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x95EC, 0, 0xE4BF, 0, 0, 0, 0x89D8, /* 0xE0 */ + 0x8CD4, 0x9548, 0xE4C9, 0, 0xE4BD, 0, 0xFB97, 0xE4C6, /* 0xF0 */ + 0, 0, 0, 0xE4D0, 0, 0xE4C1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4C2, 0x93B8, 0, 0, 0xE4C7, /* 0x00 */ + 0, 0, 0, 0xE4C4, 0x9647, 0xE4CA, 0x88DE, 0, /* 0x00 */ + 0, 0, 0, 0xE4BE, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE4CC, 0, 0xE4CB, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x948B, 0xE4D2, 0, 0xE4DD, 0, 0, 0, /* 0x20 */ + 0, 0x8A9E, 0, 0, 0, 0xE4E0, 0, 0, /* 0x30 */ + 0xE4CE, 0, 0, 0, 0xE4D3, 0x978E, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE4DC, 0, /* 0x40 */ + 0xFB98, 0x9774, 0, 0, 0, 0, 0x97A8, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x9298, /* 0x50 */ + 0, 0, 0, 0x8A8B, 0, 0, 0, 0, /* 0x50 */ + 0, 0x9592, 0xE4E2, 0x939F, 0, 0, 0x88AF, 0, /* 0x60 */ + 0, 0xE4DB, 0, 0xE4D7, 0x9192, 0xE4D1, 0xE4D9, 0xE4DE, /* 0x60 */ + 0, 0x944B, 0, 0, 0, 0x88A8, 0, 0xE4D6, /* 0x70 */ + 0, 0xE4DF, 0x9598, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE4DA, 0, 0xE4D5, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x8FD3, 0, 0, 0, 0, /* 0x80 */ + 0x8F4E, 0, 0, 0, 0x8EAA, 0, 0, 0, /* 0x90 */ + 0, 0x96D6, 0, 0, 0x9566, 0, 0, 0xE4E5, /* 0x90 */ + 0, 0xE4EE, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xE4D8, 0, 0, /* 0xA0 */ + 0, 0, 0x8A97, 0, 0xFB99, 0, 0, 0, /* 0xB0 */ + 0x8FF6, 0xE4E3, 0, 0xE4E8, 0x9193, 0, 0, 0xE4E4, /* 0xB0 */ + 0, 0xE4EB, 0, 0, 0x927E, 0, 0xE4EC, 0, /* 0xC0 */ + 0, 0x9775, 0xE4E1, 0x8A57, 0, 0xE4E7, 0, 0, /* 0xC0 */ + 0xE4EA, 0x96AA, 0, 0, 0, 0, 0xE4ED, 0, /* 0xD0 */ + 0, 0xE4E6, 0xE4E9, 0, 0xFA60, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x9648, 0, 0x9840, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE4F1, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xE4F8, 0, 0, 0xE4F0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8EC1, 0, 0, 0, 0, 0, 0xE4CF, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x95CC, 0, 0x96A0, 0xE4F7, 0xE4F6, 0, 0xE4F2, /* 0x10 */ + 0xE4F3, 0, 0x8955, 0, 0, 0, 0, 0xE4F5, /* 0x10 */ + 0, 0xE4EF, 0, 0, 0, 0, 0x92D3, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE4F4, 0x88FC, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x91A0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x95C1, 0, 0, /* 0x30 */ + 0xE4F9, 0xE540, 0, 0x94D7, 0, 0, 0, 0, /* 0x40 */ + 0xE4FC, 0x8FD4, 0x8EC7, 0xE542, 0, 0, 0x8BBC, 0, /* 0x40 */ + 0, 0, 0, 0xFB9A, 0, 0xE543, 0, 0x9599, /* 0x50 */ + 0xE4FB, 0xFB9B, 0xE4D4, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE4FA, 0, 0, 0, 0, /* 0x60 */ + 0x986E, 0x93A0, 0x9593, 0xFB9C, 0, 0xE54A, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xE550, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE551, 0, /* 0x70 */ + 0xE544, 0, 0, 0, 0x9496, 0, 0, 0xE54E, /* 0x80 */ + 0xE546, 0, 0xE548, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE552, 0xE547, 0, 0, 0xE54B, 0, 0, 0x8992, /* 0x90 */ + 0, 0x93E3, 0, 0xE54C, 0xE54F, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE545, 0, 0x9145, 0, /* 0xA0 */ + 0xE549, 0x8E46, 0x9064, 0x8C4F, 0x96F2, 0, 0x96F7, 0x8F92, /* 0xA0 */ + 0xFB9E, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE556, 0xE554, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x986D, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE553, 0, 0, 0, 0x9795, 0, 0xE555, /* 0xC0 */ + 0xE557, 0, 0, 0, 0, 0xE558, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE55B, 0xE559, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x93A1, 0xE55A, 0, 0, /* 0xE0 */ + 0, 0x94CB, 0xE54D, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x8F93, /* 0xF0 */ + 0, 0xE55C, 0xE561, 0x9194, 0, 0, 0xE560 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE541, 0, 0, 0, 0xE562, 0x9168, /* 0x00 */ + 0, 0, 0xE55D, 0xE55F, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xE55E, 0, 0, 0x9F50, 0x9F41, /* 0x10 */ + 0, 0, 0xE564, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xE563, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x9796, 0, 0xE1BA, /* 0x20 */ + 0xE565, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xE566, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE567, 0x8CD5, 0, /* 0x40 */ + 0x8B73, 0, 0, 0, 0xE569, 0x997C, 0, 0, /* 0x50 */ + 0, 0, 0x8B95, 0, 0x97B8, 0, 0x8BF1, 0xE56A, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xE56B, /* 0x60 */ + 0, 0, 0, 0x928E, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE56C, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x93F8, 0, 0x88B8, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x89E1, 0xE571, 0xE572, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE56D, 0, 0x8E5C, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE56E, 0x9461, 0, 0, 0, /* 0xA0 */ + 0, 0xE56F, 0xE570, 0xE57A, 0, 0, 0, 0xE574, /* 0xA0 */ + 0xE577, 0, 0, 0, 0, 0, 0xE573, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE575, 0, 0xE576, 0x8ED6, /* 0xC0 */ + 0, 0xE578, 0, 0x9260, 0, 0x8C75, 0x8A61, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE57B, 0, 0, 0, /* 0xD0 */ + 0, 0x8A5E, 0, 0xE581, 0, 0, 0xE57C, 0xE580, /* 0xD0 */ + 0, 0, 0, 0, 0x94B8, 0, 0, 0, /* 0xE0 */ + 0, 0xE57D, 0, 0, 0xE57E, 0x9567, 0x94D8, 0xE582, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x91FB, 0xE58C, 0, 0xE588, 0, 0, 0x89E9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE586, 0, 0x9649, 0xE587, 0, 0, 0xE584, 0, /* 0x00 */ + 0xE585, 0xE58A, 0xE58D, 0, 0, 0xE58B, 0, 0, /* 0x00 */ + 0, 0xE589, 0xE583, 0, 0, 0, 0, 0, /* 0x10 */ + 0x9277, 0, 0xE594, 0, 0x96A8, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE592, 0, 0, /* 0x20 */ + 0, 0xE593, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE58E, 0, 0, 0xE590, /* 0x30 */ + 0, 0, 0, 0xE591, 0, 0, 0, 0xE58F, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x90E4, 0, 0x9858, 0xE598, 0, 0xE599, 0, /* 0x40 */ + 0, 0, 0, 0xE59F, 0, 0x9049, 0, 0xE59B, /* 0x50 */ + 0, 0xE59E, 0, 0, 0, 0, 0, 0xE596, /* 0x50 */ + 0xE595, 0, 0, 0xE5A0, 0, 0, 0x89DA, 0, /* 0x60 */ + 0xE59C, 0, 0xE5A1, 0, 0, 0, 0xE59D, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE59A, 0, 0x92B1, 0, /* 0x70 */ + 0xE597, 0, 0, 0, 0, 0, 0, 0x9488, /* 0x70 */ + 0, 0, 0xE5A5, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x975A, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE5A4, /* 0x90 */ + 0, 0, 0xE5A3, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE5AC, 0, 0, 0, 0xE5A6, /* 0xA0 */ + 0, 0, 0, 0xE5AE, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x9786, 0xE5B1, 0, 0xE5A8, 0, 0, /* 0xB0 */ + 0xE5A9, 0, 0, 0, 0xE5AD, 0, 0xE5B0, 0xE5AF, /* 0xC0 */ + 0, 0, 0, 0xE5A7, 0, 0, 0, 0, /* 0xC0 */ + 0xE5AA, 0, 0xE5BB, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xE5B4, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE5B2, /* 0xE0 */ + 0, 0, 0xE5B3, 0, 0, 0, 0xE5B8, 0xE5B9, /* 0xF0 */ + 0, 0x8A49, 0, 0x8B61, 0, 0, 0xE5B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5A2, 0, 0xFBA1, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE5B6, 0xE5BA, 0xE5B5, /* 0x00 */ + 0, 0xE5BC, 0, 0, 0, 0xE5BE, 0xE5BD, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE5C0, 0xE5BF, 0xE579, 0, 0, 0, 0xE5C4, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE5C1, 0, 0, 0, 0, 0xE5C2, 0, /* 0x30 */ + 0, 0xE5C3, 0, 0xE5C5, 0, 0, 0, 0, /* 0x30 */ + 0x8C8C, 0, 0xE5C7, 0, 0xE5C6, 0, 0x8F4F, 0, /* 0x40 */ + 0, 0, 0, 0, 0x8D73, 0x9FA5, 0, 0, /* 0x40 */ + 0, 0, 0xE5C8, 0x8F70, 0, 0, 0, 0x8A58, /* 0x50 */ + 0, 0xE5C9, 0, 0x8971, 0, 0x8FD5, 0xE5CA, 0, /* 0x50 */ + 0, 0x8D74, 0xE5CB, 0x88DF, 0, 0, 0, 0, /* 0x60 */ + 0x955C, 0, 0, 0xE5CC, 0, 0, 0, 0, /* 0x60 */ + 0x908A, 0, 0xE5D3, 0, 0, 0xE5D0, 0, 0x928F, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE5D1, 0xE5CE, 0x8BDC, /* 0x70 */ + 0, 0xE5CD, 0xE5D4, 0, 0, 0, 0, 0, /* 0x80 */ + 0x8C55, 0, 0, 0x91DC, 0, 0xE5DA, 0, 0, /* 0x80 */ + 0, 0, 0xE5D6, 0, 0, 0, 0x91B3, 0xE5D5, /* 0x90 */ + 0, 0xE5D8, 0, 0, 0, 0, 0xE5CF, 0, /* 0x90 */ + 0, 0, 0xE5D9, 0, 0xE5DB, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x94ED, 0, 0, 0xE5D7, 0, /* 0xA0 */ + 0xE5DC, 0xE5DE, 0, 0, 0x8CD1, 0xE5D2, 0, 0x88BF, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE5DD, /* 0xB0 */ + 0, 0x8DD9, 0x97F4, 0xE5DF, 0xE5E0, 0x9195, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x97A0, /* 0xC0 */ + 0, 0, 0, 0, 0xE5E1, 0x9754, 0, 0, /* 0xD0 */ + 0xE5E2, 0xE5E3, 0, 0, 0x95E2, 0xE5E4, 0, 0x8DBE, /* 0xD0 */ + 0, 0x97A1, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE5E9, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xE5EA, 0x8FD6, 0xE5E8, 0xFBA2, 0, 0, /* 0xF0 */ + 0x9787, 0xE5E5, 0, 0, 0xE5E7, 0x90BB, 0x909E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5E6, 0, 0xE5EB, 0, 0, 0x95A1, /* 0x00 */ + 0, 0, 0xE5ED, 0, 0xE5EC, 0, 0, 0, /* 0x00 */ + 0x8A8C, 0, 0x964A, 0xE5EE, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xFA5D, 0xE5FA, 0xE5F0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE5F1, 0, 0, /* 0x20 */ + 0, 0, 0xE5F2, 0xE5F3, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xE5F7, 0, /* 0x30 */ + 0xE5F8, 0, 0, 0xE5F6, 0, 0, 0, 0, /* 0x30 */ + 0, 0xE5F4, 0, 0xE5EF, 0xE5F5, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE5F9, 0xE8B5, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x89A6, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE5FC, 0x8BDD, /* 0x50 */ + 0xE5FB, 0, 0, 0, 0xE641, 0, 0xE640, 0, /* 0x60 */ + 0, 0, 0xE643, 0, 0, 0xE642, 0, 0xE644, /* 0x60 */ + 0, 0, 0x8F50, 0, 0xE645, 0, 0, 0xE646, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE647, 0x90BC, /* 0x70 */ + 0, 0x9776, 0, 0xE648, 0, 0, 0x95A2, 0x9465, /* 0x80 */ + 0xE649, 0, 0xE64A, 0x8CA9, 0, 0, 0, 0x8B4B, /* 0x80 */ + 0, 0, 0, 0xE64B, 0, 0, 0x8E8B, 0x9460, /* 0x90 */ + 0xE64C, 0, 0x8A6F, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE64D, 0, 0, 0, 0, 0xE64F, 0x9797, /* 0xA0 */ + 0, 0xE64E, 0x9065, 0, 0xE650, 0, 0, 0xE651, /* 0xA0 */ + 0, 0, 0xE652, 0x8ACF, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE653, 0, 0, 0xE654, 0, 0xE655, /* 0xB0 */ + 0xE656, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x8A70, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE657, 0, 0xE658, 0xE659, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x89F0, 0, 0, 0x9047, 0xE65A, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE65B, 0, 0, 0, /* 0xF0 */ + 0xE65C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8CBE, 0, 0x92F9, 0xE65D, 0, 0, 0, 0, /* 0x00 */ + 0x8C76, 0, 0x9075, 0, 0xE660, 0, 0x93A2, 0, /* 0x00 */ + 0xE65F, 0, 0xFBA3, 0x8C50, 0, 0, 0xE65E, 0x91F5, /* 0x10 */ + 0x8B4C, 0, 0, 0xE661, 0, 0xE662, 0, 0x8FD7, /* 0x10 */ + 0, 0, 0, 0x8C8D, 0, 0xE663, 0, 0, /* 0x20 */ + 0, 0, 0x964B, 0, 0, 0x90DD, 0, 0, /* 0x20 */ + 0, 0x8B96, 0, 0x96F3, 0x9169, 0, 0xE664, 0xFBA4, /* 0x30 */ + 0, 0, 0x9066, 0x9290, 0x8FD8, 0, 0, 0, /* 0x30 */ + 0, 0xE665, 0, 0, 0, 0, 0xE668, 0, /* 0x40 */ + 0xE669, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x8DBC, 0x91C0, 0xE667, 0, 0x8FD9, 0x955D, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE666, 0, 0, 0x8E8C, 0, /* 0x50 */ + 0x8972, 0, 0xE66D, 0x8C77, 0, 0, 0x8E8E, 0, /* 0x60 */ + 0, 0x8E8D, 0, 0x986C, 0xE66C, 0xE66B, 0x9146, 0, /* 0x60 */ + 0x8B6C, 0x9862, 0x8A59, 0x8FDA, 0, 0, 0, 0, /* 0x70 */ + 0, 0xFBA5, 0, 0, 0xE66A, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE66F, 0, 0xE670, 0xE66E, 0, 0x8CD6, /* 0x80 */ + 0, 0x975F, 0, 0, 0x8E8F, 0x9446, 0, 0, /* 0x80 */ + 0, 0xE673, 0, 0x90BE, 0, 0x9261, 0, 0, /* 0x90 */ + 0x9755, 0, 0xE676, 0, 0, 0, 0x8CEA, 0, /* 0x90 */ + 0x90BD, 0xE672, 0, 0xE677, 0x8CEB, 0xE674, 0xE675, 0xFBA6, /* 0xA0 */ + 0xE671, 0, 0, 0, 0x90E0, 0x93C7, 0, 0, /* 0xA0 */ + 0x924E, 0, 0x89DB, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x94EE, 0, 0, 0x8B62, 0, 0xFBA7, 0x92B2, /* 0xB0 */ + 0, 0, 0xE67A, 0, 0xE678, 0, 0, 0x926B, /* 0xC0 */ + 0, 0, 0, 0x90BF, 0x8AD0, 0xE679, 0, 0x907A, /* 0xC0 */ + 0, 0, 0x97C8, 0, 0, 0, 0x985F, 0, /* 0xD0 */ + 0, 0, 0xE67B, 0xE687, 0x92B3, 0, 0xE686, 0xFBA8, /* 0xD0 */ + 0xE683, 0xE68B, 0xE684, 0, 0xE680, 0, 0x92FA, 0xE67E, /* 0xE0 */ + 0, 0, 0, 0xE67C, 0, 0x9740, 0x8E90, 0, /* 0xE0 */ + 0, 0xE681, 0, 0xE67D, 0, 0, 0xFBAA, 0xE685, /* 0xF0 */ + 0x8F94, 0, 0x8CBF, 0, 0, 0, 0x91F8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9664, 0x8979, 0x88E0, 0, 0x93A3, 0, 0, 0xE689, /* 0x00 */ + 0, 0, 0, 0, 0xE688, 0, 0x93E4, 0, /* 0x00 */ + 0xE68D, 0, 0, 0, 0xE682, 0, 0xE68C, 0xE68E, /* 0x10 */ + 0, 0x8CAA, 0xE68A, 0x8D75, 0, 0x8ED3, 0, 0, /* 0x10 */ + 0xE68F, 0x9777, 0, 0, 0, 0, 0xE692, 0, /* 0x20 */ + 0xE695, 0, 0, 0xE693, 0x9554, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE690, 0, 0, 0, 0, /* 0x30 */ + 0, 0x8BDE, 0, 0, 0, 0, 0xE694, 0, /* 0x30 */ + 0, 0xE696, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xE69A, 0, 0, 0xE697, 0, 0xE699, 0xE698, /* 0x40 */ + 0, 0, 0, 0xFBAB, 0, 0, 0xE69B, 0, /* 0x50 */ + 0x8EAF, 0, 0xE69D, 0xE69C, 0x9588, 0, 0, 0xE69F, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x8C78, 0, /* 0x60 */ + 0, 0, 0, 0xE69E, 0xE6A0, 0, 0, 0xE6A1, /* 0x60 */ + 0x8B63, 0xE3BF, 0x8FF7, 0, 0xE6A2, 0, 0, 0x8CEC, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE6A3, 0, 0xFBAC, /* 0x70 */ + 0xE6A4, 0, 0, 0x8E5D, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x9DCC, 0, 0xE6A5, 0, 0xE6A6, 0, /* 0x80 */ + 0x8F51, 0, 0xE6A7, 0xE6A8, 0, 0, 0xE6A9, 0, /* 0x90 */ + 0, 0xE6AA, 0xE6AB /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x924A, /* 0x30 */ + 0, 0, 0xE6AC, 0, 0, 0, 0, 0xE6AE, /* 0x30 */ + 0, 0xE6AD, 0, 0, 0, 0, 0x93A4, 0, /* 0x40 */ + 0xE6AF, 0, 0x964C, 0, 0xE6B0, 0, 0xE6B1, 0, /* 0x40 */ + 0xE6B2, 0, 0, 0, 0, 0xE6B3, 0, 0, /* 0x50 */ + 0, 0, 0x93D8, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x8FDB, 0xE6B4, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x8D8B, 0x98AC, 0xE6B5, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE6B6, 0x955E, 0xE6B7, 0, 0xE6BF, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE6B8, 0, 0, 0xE6BA, 0, 0, /* 0x80 */ + 0, 0xE6B9, 0xE6BB, 0, 0x9665, 0xE6BC, 0xE6BD, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE6BE, 0, 0, 0, /* 0x90 */ + 0xE6C0, 0, 0, 0, 0, 0x8A4C, 0x92E5, 0, /* 0x90 */ + 0x9589, 0x8DE0, 0x8D76, 0, 0, 0, 0, 0x956E, /* 0xA0 */ + 0x89DD, 0x94CC, 0xE6C3, 0x8AD1, 0x90D3, 0xE6C2, 0xE6C7, 0x9299, /* 0xA0 */ + 0x96E1, 0, 0xE6C5, 0xE6C6, 0x8B4D, 0, 0xE6C8, 0x9483, /* 0xB0 */ + 0x91DD, 0, 0, 0x94EF, 0x935C, 0xE6C4, 0, 0x9666, /* 0xB0 */ + 0x89EA, 0xE6CA, 0x9847, 0x92C0, 0x9864, 0, 0, 0x8E91, /* 0xC0 */ + 0xE6C9, 0, 0x91AF, 0, 0, 0xE6DA, 0x9147, 0, /* 0xC0 */ + 0, 0x93F6, 0, 0x956F, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE6CD, 0x8E5E, 0x8E92, 0, 0x8FDC, 0, /* 0xD0 */ + 0x9485, 0, 0x8CAB, 0xE6CC, 0xE6CB, 0, 0x958A, 0, /* 0xE0 */ + 0, 0, 0x8EBF, 0, 0, 0x9371, 0, 0, /* 0xE0 */ + 0xFBAD, 0, 0, 0, 0xFBAE, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xE6CF, 0xE6D0, 0x8D77, 0xE6CE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE6D1, 0xE6D2, 0, 0xE6D4, /* 0x00 */ + 0x91A1, 0, 0xE6D3, 0x8AE4, 0, 0xE6D6, 0, 0xE6D5, /* 0x00 */ + 0xE6D7, 0, 0xFBAF, 0xE6D9, 0xE6DB, 0, 0xE6DC, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x90D4, 0, 0x8ECD, 0xE6DD, /* 0x60 */ + 0, 0, 0, 0x8A71, 0, 0xE6DE, 0, 0, /* 0x60 */ + 0x9196, 0xE6DF, 0, 0xE6E0, 0x958B, 0, 0xFBB0, 0x8B4E, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE6E1, 0, 0, 0, 0x92B4, 0, 0, /* 0x80 */ + 0, 0, 0x897A, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE6E2, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x8EEF, 0, 0, 0, 0, /* 0xA0 */ + 0x9096, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x91AB, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE6E5, 0, 0, 0, 0xE6E4, 0, /* 0xB0 */ + 0, 0, 0xE6E3, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE6EB, 0xE6E9, 0, 0, 0xE6E6, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE6E8, 0, /* 0xD0 */ + 0, 0, 0xE6E7, 0xE6EA, 0, 0x8B97, 0, 0xE6EE, /* 0xD0 */ + 0, 0x90D5, 0, 0xE6EF, 0, 0, 0, 0, /* 0xE0 */ + 0x8CD7, 0, 0xE6EC, 0xE6ED, 0, 0, 0, 0x9848, /* 0xE0 */ + 0, 0, 0, 0x92B5, 0, 0x9148, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xE6F0, 0, 0, 0xE6F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xE6F1, 0xE6F2, 0x9778, 0, 0, 0, 0, 0x93A5, /* 0x00 */ + 0xE6F6, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE6F4, 0xE6F5, 0xE6F7, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE748, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE6FA, 0, 0, 0, 0xE6FB, 0xE6F9, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xE6F8, 0, 0x92FB, 0, 0, 0xE740, /* 0x40 */ + 0xE744, 0xE741, 0xE6FC, 0, 0xE742, 0, 0, 0, /* 0x40 */ + 0xE743, 0, 0, 0, 0, 0xE74A, 0, 0, /* 0x50 */ + 0, 0xE745, 0, 0, 0, 0, 0, 0x90D6, /* 0x50 */ + 0xE747, 0, 0, 0xE749, 0xE746, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE74C, 0, 0x8F52, 0, 0xE74B, 0, /* 0x70 */ + 0, 0, 0, 0, 0xE74D, 0, 0, 0, /* 0x70 */ + 0, 0xE74E, 0, 0, 0xE751, 0xE750, 0, 0xE74F, /* 0x80 */ + 0, 0, 0xE753, 0xE752, 0, 0x96F4, 0, 0, /* 0x80 */ + 0, 0xE755, 0, 0xE754, 0xE756, 0, 0, 0, /* 0x90 */ + 0, 0xE757, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE759, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE758, 0x9067, 0xE75A, 0, 0, 0x8BEB, /* 0xA0 */ + 0xE75B, 0xE75D, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xE75E, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE75F, 0xE75C, 0, /* 0xC0 */ + 0xE760, 0, 0x8ED4, 0xE761, 0x8B4F, 0x8C52, 0, 0xFBB2, /* 0xC0 */ + 0, 0, 0x8CAC, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE762, 0, 0, 0, 0x93EE, /* 0xD0 */ + 0, 0, 0x935D, 0xE763, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE766, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x8EB2, 0, 0, 0xE765, 0xE764, 0x8C79, 0xE767 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8A72, 0, 0xE769, 0, 0, /* 0x00 */ + 0, 0x8DDA, 0xE768, 0, 0xE771, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE76B, 0xE76D, 0x95E3, 0xE76A, 0, 0, /* 0x10 */ + 0, 0xE76C, 0, 0xE770, 0xE76E, 0x8B50, 0, 0xE76F, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE772, 0, /* 0x20 */ + 0, 0x9479, 0x97D6, 0, 0, 0, 0, 0x8F53, /* 0x20 */ + 0, 0, 0, 0xE773, 0, 0, 0, 0, /* 0x30 */ + 0x9741, 0xE775, 0, 0xE774, 0, 0, 0xE778, 0x9760, /* 0x30 */ + 0, 0, 0xE777, 0, 0x8A8D, 0xE776, 0xE77B, 0, /* 0x40 */ + 0, 0xE77A, 0, 0, 0xE779, 0x9351, 0xE77C, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE77D, /* 0x50 */ + 0, 0, 0, 0, 0xE77E, 0, 0, 0x8D8C, /* 0x50 */ + 0, 0x8C44, 0xE780, 0xE781, 0xE782, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x9068, 0xE783, 0, 0x8EAB, 0xE784, /* 0x90 */ + 0, 0, 0, 0xE785, 0, 0, 0, 0x999F, /* 0xA0 */ + 0x999E, 0, 0, 0, 0, 0xE786, 0xE390, 0xE787, /* 0xA0 */ + 0x9243, 0x904A, 0x945F, 0, 0, 0, 0, 0xE788, /* 0xB0 */ + 0, 0, 0x95D3, 0x92D2, 0x8D9E, 0, 0, 0x9248, /* 0xB0 */ + 0, 0, 0x8949, 0, 0x9698, 0x9076, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x8C7D, 0, /* 0xC0 */ + 0, 0x8BDF, 0, 0, 0x95D4, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE789, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE78B, 0, 0, 0xE78A, 0x89DE, 0, /* 0xE0 */ + 0, 0x93F4, 0xE78C, 0x9497, 0, 0x9352, 0, 0xE78D, /* 0xE0 */ + 0x8F71, 0, 0, 0, 0xE78F, 0, 0, 0x96C0, /* 0xF0 */ + 0xE79E, 0xE791, 0xE792, 0, 0, 0x92C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x91DE, 0x9197, 0, 0x93A6, 0, 0xE790, 0x8B74, 0, /* 0x00 */ + 0, 0, 0, 0xE799, 0, 0xE796, 0xE7A3, 0x93A7, /* 0x00 */ + 0x9280, 0xE793, 0, 0x92FC, 0x9372, 0xE794, 0xE798, 0x9080, /* 0x10 */ + 0, 0x9487, 0x92CA, 0, 0, 0x90C0, 0xE797, 0x91AC, /* 0x10 */ + 0x91A2, 0xE795, 0x88A7, 0x9841, 0, 0, 0, 0xE79A, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x91DF, 0, /* 0x20 */ + 0, 0x8F54, 0x9069, 0, 0, 0xE79C, 0xE79B, 0, /* 0x30 */ + 0x88ED, 0xE79D, 0, 0, 0x954E, 0, 0xE7A5, 0, /* 0x30 */ + 0, 0x93D9, 0x908B, 0, 0, 0x9278, 0, 0x8BF6, /* 0x40 */ + 0, 0xE7A4, 0x9756, 0x895E, 0, 0x95D5, 0x89DF, 0xE79F, /* 0x40 */ + 0xE7A0, 0xE7A1, 0xE7A2, 0x93B9, 0x9242, 0x88E1, 0xE7A6, 0, /* 0x50 */ + 0xE7A7, 0xEAA1, 0, 0, 0x91BB, 0, 0xE7A8, 0, /* 0x50 */ + 0x8993, 0x916B, 0, 0x8CAD, 0, 0x9779, 0, 0xFBB5, /* 0x60 */ + 0xE7A9, 0x934B, 0, 0, 0, 0x9198, 0x8ED5, 0xE7AA, /* 0x60 */ + 0, 0, 0xE7AD, 0, 0, 0x8F85, 0xE7AB, 0x914A, /* 0x70 */ + 0x9149, 0, 0x88E2, 0, 0x97C9, 0xE7AF, 0, 0x94F0, /* 0x70 */ + 0xE7B1, 0xE7B0, 0xE7AE, 0xE284, 0x8AD2, 0, 0, 0xE78E, /* 0x80 */ + 0, 0xE7B3, 0xE7B2, 0, 0, 0, 0, 0xE7B4, /* 0x80 */ + 0, 0x9757, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x93DF, 0, 0, 0x964D, 0, /* 0xA0 */ + 0xE7B5, 0, 0x8ED7, 0, 0, 0, 0, 0xE7B6, /* 0xA0 */ + 0, 0xE7B7, 0, 0, 0, 0xE7B8, 0, 0, /* 0xB0 */ + 0x9340, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x88E8, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x8D78, 0, 0, 0, 0x9859, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE7BC, 0, 0, 0xFBB6, 0, /* 0xD0 */ + 0, 0x8C53, 0xE7B9, 0, 0xE7BA, 0, 0, 0, /* 0xE0 */ + 0x9594, 0, 0, 0, 0, 0x8A73, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x9758, 0, 0x8BBD, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x9373 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE7BD, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE7BE, 0, 0, 0xFBB8, 0, 0, /* 0x10 */ + 0, 0xE7BF, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xFBB9, /* 0x20 */ + 0, 0, 0, 0, 0, 0x9341, 0, 0, /* 0x20 */ + 0xE7C1, 0, 0xE7C0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x93D1, 0xE7C2, 0x8F55, 0x8EDE, 0x947A, 0x9291, 0, /* 0x40 */ + 0, 0, 0x8EF0, 0, 0x908C, 0, 0xE7C3, 0, /* 0x50 */ + 0xE7C4, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x907C, 0xE7C5, 0, 0xE7C6, 0, 0, /* 0x60 */ + 0, 0xE7C7, 0x978F, 0, 0x8F56, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE7C9, 0xE7C8, 0, 0x8D79, 0, 0x8D93, /* 0x70 */ + 0x8E5F, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE7CC, 0, 0, 0, 0, 0x8F86, /* 0x80 */ + 0, 0xE7CB, 0, 0xE7CA, 0, 0x91E7, 0, 0, /* 0x80 */ + 0x8CED, 0, 0x90C1, 0, 0, 0, 0, 0x94AE, /* 0x90 */ + 0, 0, 0, 0, 0x8F58, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE7CD, 0, 0x8FDD, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE7D0, 0xE7CE, 0, 0, 0, 0xE7CF, /* 0xA0 */ + 0, 0, 0, 0, 0xE7D2, 0xE7D1, 0, 0, /* 0xB0 */ + 0x8FF8, 0, 0xE7D3, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE7D4, 0xE7D5, 0, 0, 0, 0, 0x94CE, 0x8DD1, /* 0xC0 */ + 0x8EDF, 0xE7D6, 0, 0xE7D7, 0x97A2, 0x8F64, 0x96EC, 0x97CA, /* 0xC0 */ + 0xE7D8, 0x8BE0, 0, 0, 0, 0, 0xE7D9, 0xFBBB, /* 0xD0 */ + 0x9342, 0, 0xFBBA, 0xE7DC, 0x8A98, 0x906A, 0xFBBC, 0xE7DA, /* 0xD0 */ + 0, 0xE7DB, 0, 0x92DE, 0xFBBF, 0xFBC0, 0x9674, 0x8BFA, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xFBBD, 0xFBBE, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE7DE, 0xE7DF, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xE7DD, 0, 0, 0xE7E1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFBC1, 0, /* 0x00 */ + 0, 0, 0xFBC3, 0, 0, 0x93DD, 0x8A62, 0, /* 0x00 */ + 0xFBC2, 0xE7E5, 0, 0, 0xE7E2, 0xE7E4, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE7E0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE86E, 0, 0, 0xE7E3, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x97E9, 0, 0, 0x8CD8, /* 0x30 */ + 0, 0xFBCA, 0xFBC4, 0, 0xFBC6, 0, 0, 0xE7ED, /* 0x30 */ + 0xFBC5, 0, 0, 0, 0x9353, 0xE7E8, 0, 0, /* 0x40 */ + 0xE7EB, 0xE7E9, 0, 0xE7EE, 0, 0, 0xFBC7, 0, /* 0x40 */ + 0xE7EF, 0xFBC9, 0, 0, 0, 0, 0, 0xE7E7, /* 0x50 */ + 0, 0xFBC8, 0xE7F4, 0x8994, 0, 0, 0xE7E6, 0, /* 0x50 */ + 0, 0, 0x94AB, 0, 0xE7EA, 0, 0x8FDE, 0xFBCB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x8D7A, 0, 0, 0, 0, 0, 0xFBCD, /* 0x70 */ + 0xFBCE, 0, 0, 0, 0, 0, 0x9667, 0, /* 0x70 */ + 0x8BE2, 0, 0, 0x8F65, 0, 0x93BA, 0, 0, /* 0x80 */ + 0xFA5F, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x914C, 0, 0xE7F2, 0, 0xE7EC, 0xE7F1, 0, /* 0x90 */ + 0x96C1, 0, 0x92B6, 0xE7F3, 0xE7F0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xFBCC, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x914B, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7F7, /* 0xB0 */ + 0, 0xE7F6, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7F5, /* 0xC0 */ + 0xFBD2, 0, 0x964E, 0xFBD6, 0, 0xFBD4, 0, 0xFBD0, /* 0xD0 */ + 0, 0xFBD1, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xFBD5, 0, 0, 0, 0x8F9B, 0, 0, 0xFBCF, /* 0xE0 */ + 0, 0xE7F8, 0x95DD, 0, 0, 0x8973, 0, 0, /* 0xE0 */ + 0, 0, 0x9565, 0x9292, 0, 0, 0, 0, /* 0xF0 */ + 0x8B98, 0xFA65, 0xE7FA, 0xFBD9, 0x8D7C, 0, 0, 0xFBDC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFBDE, 0, 0, 0, 0x8E4B, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7F9, /* 0x00 */ + 0x908D, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x908E, 0xE840, 0xE842, 0, 0, 0xFBDD, 0xFBDB, 0, /* 0x10 */ + 0x8FF9, 0xFBD8, 0xE841, 0xE843, 0, 0xFBD7, 0x8BD1, 0, /* 0x20 */ + 0x9564, 0, 0, 0x8EE0, 0x9842, 0, 0xE7FC, 0x8DF6, /* 0x20 */ + 0, 0, 0x985E, 0, 0, 0xE845, 0, 0, /* 0x30 */ + 0, 0, 0xE844, 0xE846, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE7FB, 0, 0, 0, /* 0x40 */ + 0xFA5E, 0, 0, 0x93E7, 0, 0x9374, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x92D5, 0, 0xE84B, 0xFBE0, /* 0x50 */ + 0, 0, 0, 0x9262, 0xE847, 0, 0, 0, /* 0x50 */ + 0xE848, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x8C4C, 0, 0xE84A, 0, /* 0x60 */ + 0xFBDF, 0, 0, 0, 0, 0x8CAE, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xE849, 0, 0x8FDF, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x8A99, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE84F, 0, 0x8DBD, 0x9199, /* 0x90 */ + 0, 0, 0x92C8, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xFBE1, 0, 0, 0x8A5A, /* 0xA0 */ + 0, 0, 0, 0, 0xE84D, 0xE84E, 0x92C1, 0, /* 0xA0 */ + 0xE84C, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE850, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE856, 0, 0, 0xFBE2, 0, /* 0xC0 */ + 0xE859, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xE858, 0x934C, 0, 0, 0, 0, 0xE851, 0xE852, /* 0xD0 */ + 0xE855, 0, 0, 0, 0, 0xE857, 0xFBE3, 0, /* 0xD0 */ + 0, 0x8BBE, 0, 0, 0xE85A, 0xE854, 0, 0, /* 0xE0 */ + 0xE853, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xFBE4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE85E, 0, 0, 0, 0xE85F, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE860, 0, 0, 0xE85D, 0xE85C, 0, 0, 0, /* 0x10 */ + 0x8FE0, 0x93A8, 0xE85B, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE864, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE862, 0, 0, 0, 0, /* 0x20 */ + 0, 0xFBE5, 0, 0, 0, 0xE863, 0xE861, 0, /* 0x30 */ + 0x91F6, 0, 0xE865, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xE866, 0, 0, 0xE868, 0xFBE6, 0, 0, /* 0x40 */ + 0xFBE7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x8AD3, 0xE867, 0x96F8, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE873, 0xE869, 0, 0, 0xE86C, 0, /* 0x50 */ + 0xE86A, 0, 0xE86B, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE86D, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE86F, 0, 0, 0, 0, 0xE870, 0, 0xE871, /* 0x70 */ + 0, 0, 0, 0, 0xE874, 0xE872, 0xE875, 0xE877, /* 0x70 */ + 0, 0xE876 /* 0x80 */ + /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x92B7, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x96E5, 0, 0xE878, 0x914D, 0, 0, 0, 0xE879, /* 0x80 */ + 0, 0x95C2, 0xE87A, 0x8A4A, 0, 0, 0, 0x895B, /* 0x80 */ + 0, 0x8AD5, 0xFBE8, 0x8AD4, 0xE87B, 0, 0xE87C, 0, /* 0x90 */ + 0xE87D, 0xE87E, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE880, 0, 0x8AD6, 0x8A74, 0x8D7D, 0x94B4, 0, 0xE882, /* 0xA0 */ + 0xE881, 0, 0, 0, 0, 0xE883, 0, 0, /* 0xA0 */ + 0, 0, 0x897B, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE886, 0, 0xE885, 0xE884, 0, 0xE887, 0, /* 0xB0 */ + 0, 0, 0, 0xE88A, 0, 0, 0, 0x88C5, /* 0xC0 */ + 0, 0, 0xE888, 0, 0xE88C, 0xE88B, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE88E, 0xE88D, 0xE88F, 0, /* 0xD0 */ + 0x93AC, 0, 0, 0, 0xE890, 0, 0, 0, /* 0xD0 */ + 0, 0xE891, 0xE893, 0, 0, 0xE892 /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0x958C, 0, 0, 0, /* 0x10 */ + 0, 0xE894, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE895, 0, 0x8DE3, 0, 0, 0, 0xE896, 0xE897, /* 0x20 */ + 0, 0, 0x9668, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x916A, 0, 0, 0, 0x88A2, /* 0x30 */ + 0x91C9, 0, 0xE898, 0, 0x958D, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xE89B, 0xE899, 0x8D7E, 0, 0xE89A, /* 0x40 */ + 0x8CC0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x95C3, 0xE89D, 0xE89F, 0xE89E, 0xE8A0, /* 0x50 */ + 0, 0, 0x8940, 0x9077, 0x8F9C, 0x8AD7, 0xE8A1, 0, /* 0x60 */ + 0, 0, 0x9486, 0, 0xE8A3, 0, 0, 0, /* 0x60 */ + 0x8941, 0, 0xE8A2, 0x92C2, 0, 0x97CB, 0x93A9, 0xE89C, /* 0x70 */ + 0x97A4, 0, 0x8CAF, 0, 0, 0x977A, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x8BF7, 0x97B2, 0, /* 0x80 */ + 0x8C47, 0, 0x91E0, 0xE440, 0, 0xE8A4, 0x8A4B, 0x908F, /* 0x80 */ + 0, 0, 0, 0, 0x8A75, 0xE8A6, 0, 0xE8A7, /* 0x90 */ + 0xE8A5, 0x8C84, 0, 0x8DDB, 0x8FE1, 0xFBEB, 0, 0, /* 0x90 */ + 0x8942, 0, 0, 0x97D7, 0, 0, 0, 0xE8A9, /* 0xA0 */ + 0xE7AC, 0, 0xE8A8, 0, 0, 0, 0, 0xFBEC, /* 0xA0 */ + 0xE8AC, 0xE8AA, 0xE8AB, 0, 0xE8AD, 0, 0xE8AE, 0x97EA, /* 0xB0 */ + 0xE8AF, 0xE8B0, 0, 0x90C7, 0x94B9, 0, 0, 0, /* 0xB0 */ + 0x909D, 0x8AE5, 0, 0, 0x9759, 0x89EB, 0x8F57, 0x8CD9, /* 0xC0 */ + 0, 0xE8B3, 0, 0xE8B2, 0x8E93, 0xE8B4, 0xE8B1, 0, /* 0xC0 */ + 0, 0x8E47, 0, 0, 0, 0xE8B8, 0xE5AB, 0, /* 0xD0 */ + 0, 0x99D4, 0, 0x9097, 0xE8B6, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x97A3, 0x93EF, 0, 0, 0, 0, /* 0xE0 */ + 0x894A, 0, 0x90E1, 0x8EB4, 0, 0, 0, 0, /* 0xE0 */ + 0x95B5, 0, 0x895F, 0, 0, 0, 0x97EB, 0x978B, /* 0xF0 */ + 0, 0xE8B9, 0, 0x9364 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8EF9, 0, 0, 0, 0xE8BA, 0, 0xE8BB, 0x906B, /* 0x00 */ + 0xE8BC, 0, 0x97EC, 0, 0, 0xE8B7, 0xE8BE, 0xE8C0, /* 0x00 */ + 0, 0xE8BF, 0, 0xE8BD, 0, 0, 0xE8C1, 0, /* 0x10 */ + 0, 0xE8C2, 0, 0, 0x919A, 0, 0x89E0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xE8C3, 0, 0, 0x96B6, /* 0x20 */ + 0, 0, 0xE8C4, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE8C5, 0, 0x9849, 0xFBED, 0, 0, 0, 0, /* 0x30 */ + 0x9E50, 0xE8C6, 0, 0xFBEE, 0, 0xE8C7, 0xE8C8, 0, /* 0x30 */ + 0, 0, 0xE8CC, 0xFBEF, 0xE8C9, 0, 0xE8CA, 0, /* 0x40 */ + 0xE8CB, 0xE8CD, 0, 0, 0, 0xFBF0, 0, 0xFBF1, /* 0x40 */ + 0, 0xFBF2, 0x90C2, 0, 0, 0xFBF3, 0x96F5, 0, /* 0x50 */ + 0, 0x90C3, 0, 0, 0xE8CE, 0, 0x94F1, 0, /* 0x50 */ + 0xE8CF, 0xEA72, 0x96CA, 0, 0xE8D0, 0, 0xE8D1, 0, /* 0x60 */ + 0xE8D2, 0x8A76, 0, 0xE8D4, 0, 0x9078, 0, 0, /* 0x60 */ + 0, 0xE8D5, 0, 0, 0x8C43, 0, 0, 0, /* 0x70 */ + 0, 0xE8D6, 0xE8DA, 0, 0xE8D8, 0, 0, 0, /* 0x70 */ + 0, 0xE8D9, 0, 0, 0x8A93, 0xE8D7, 0xE8DB, 0, /* 0x80 */ + 0, 0, 0, 0xE8DC, 0, 0x88C6, 0, 0xE8DD, /* 0x80 */ + 0xE8DE, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x8FE2, 0, 0, 0, 0xE8DF, 0, 0, 0, /* 0x90 */ + 0x8B66, 0, 0, 0xE8E2, 0, 0, 0xE8E1, 0, /* 0xA0 */ + 0xE8E0, 0, 0, 0xE691, 0, 0x95DA, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE8E3, 0xE8E4, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE8E5, 0, 0, 0xE8E6, 0, /* 0xC0 */ + 0xE8E7, 0, 0, 0xE8E8, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x8AD8, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE8E9, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE8EA, 0x9442, 0, /* 0xE0 */ + 0, 0, 0xE8EC, 0x89B9, 0, 0xE8EF, 0xE8EE, 0, /* 0xF0 */ + 0, 0, 0, 0x8943, 0, 0, 0, 0x8BBF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x95C5, 0x92B8, 0x8DA0, 0, 0x8D80, 0x8F87, 0, /* 0x00 */ + 0x907B, 0, 0, 0, 0xE8F1, 0, 0, 0xE8F0, /* 0x00 */ + 0x9761, 0x8AE6, 0x94D0, 0x93DA, 0, 0, 0, 0x909C, /* 0x10 */ + 0x97CC, 0, 0x8C7A, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE8F4, 0, 0, 0xE8F3, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x966A, 0x93AA, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x896F, 0, 0, 0xE8F5, /* 0x30 */ + 0xE8F2, 0, 0, 0x9570, 0x978A, 0xE8F6, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE8F7, 0, /* 0x40 */ + 0, 0, 0, 0xE8F9, 0x91E8, 0x8A7A, 0x8A7B, 0xE8F8, /* 0x40 */ + 0, 0, 0, 0, 0x8AE7, 0x8CB0, 0, 0xFBF4, /* 0x50 */ + 0x8AE8, 0, 0, 0x935E, 0, 0, 0x97DE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xFBF5, 0, 0x8CDA, /* 0x60 */ + 0, 0, 0, 0xE8FA, 0, 0, 0, 0xE8FB, /* 0x60 */ + 0xE8FC, 0xE940, 0, 0xE942, 0xE941, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x9597, 0, 0xE943, 0, 0, 0, 0, 0xE944, /* 0xA0 */ + 0, 0xE945, 0, 0, 0, 0, 0xE946, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE948, 0xE947, 0, 0xE949, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x94F2, 0xE3CA, 0, 0, 0x9048, /* 0xD0 */ + 0, 0, 0x8B51, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE94A, 0, 0xE94B, 0, 0x99AA, 0x9F5A, 0x94D1, /* 0xE0 */ + 0, 0, 0x88F9, 0, 0x88B9, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x8E94, 0x964F, 0x8FFC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE94C, 0, 0x96DD, 0, 0, /* 0x00 */ + 0, 0xE94D, 0x977B, 0, 0x8961, 0, 0, 0, /* 0x00 */ + 0x8E60, 0, 0xE94E, 0x89EC, 0xE94F, 0, 0, 0, /* 0x10 */ + 0xE950, 0, 0, 0, 0, 0xE952, 0xE953, 0, /* 0x10 */ + 0xE955, 0xE951, 0, 0, 0xE954, 0, 0, 0xFBF8, /* 0x20 */ + 0x8AD9, 0, 0, 0, 0xE956, 0, 0xE957, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE958, 0xE959, 0, /* 0x30 */ + 0, 0, 0xE95A, 0, 0, 0xE95C, 0, 0, /* 0x40 */ + 0, 0xE95B, 0, 0xE95E, 0xE961, 0, 0, 0, /* 0x40 */ + 0xE95D, 0xE95F, 0xE960, 0, 0, 0xE962, 0, 0x8BC0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x8EF1, 0xE963, /* 0x90 */ + 0xE964, 0x8D81, 0, 0, 0, 0, 0xFBFA, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE965, 0, 0, /* 0xA0 */ + 0x8A5D, 0, 0, 0, 0x946E, 0xE966, 0xE967, 0, /* 0xA0 */ + 0, 0, 0, 0x9279, 0x93E9, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE968, 0, 0, 0, /* 0xB0 */ + 0, 0x949D, 0, 0, 0x91CA, 0x8977, 0x8BEC, 0, /* 0xC0 */ + 0x8BED, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x9293, 0xE96D, 0x8BEE, 0, 0, 0x89ED, 0, 0, /* 0xD0 */ + 0xE96C, 0, 0, 0xE96A, 0, 0xE96B, 0, 0xE969, /* 0xD0 */ + 0, 0, 0xE977, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE96E, 0xE96F, 0, /* 0xE0 */ + 0, 0xE970, 0xE971, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xE973, 0, 0, 0xE972, 0, 0, 0, 0x8F78 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE974, 0, 0, 0, 0xE976, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x8B52, 0xE975, /* 0x00 */ + 0, 0, 0x919B, 0x8CB1, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE978, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x91CB, 0, 0, 0xE979, 0, 0, 0, 0, /* 0x20 */ + 0x93AB, 0, 0, 0, 0, 0, 0, 0xE97A, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE980, 0, /* 0x30 */ + 0xE97D, 0, 0xE97C, 0xE97E, 0, 0xE97B, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE982, 0xFBFB, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE981, 0, 0xE984, /* 0x50 */ + 0, 0, 0x8BC1, 0xE983, 0, 0, 0, 0xE985, /* 0x50 */ + 0, 0, 0xE986, 0, 0xE988, 0xE987, 0, 0, /* 0x60 */ + 0, 0xE989, 0xE98B, 0xE98A, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x8D9C, 0, 0, 0, 0, 0xE98C, 0, 0, /* 0xA0 */ + 0xE98D, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x8A5B, 0, 0, 0, 0xE98E, 0, 0, 0, /* 0xB0 */ + 0xE98F, 0, 0, 0, 0x9091, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE990, /* 0xC0 */ + 0, 0xE991, 0, 0xE992, 0xE993, 0, 0, 0, /* 0xD0 */ + 0x8D82, 0xFBFC, 0, 0, 0xFC40, 0, 0xE994, 0xE995, /* 0xD0 */ + 0, 0, 0xE996, 0xE997, 0, 0, 0xE998, 0, /* 0xE0 */ + 0, 0, 0x94AF, 0xE99A, 0, 0x9545, 0xE99B, 0xE999, /* 0xE0 */ + 0, 0xE99D, 0, 0, 0xE99C, 0, 0, 0xE99E, /* 0xF0 */ + 0, 0, 0, 0xE99F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9A0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE9A1, 0, 0xE9A2, 0, 0, 0, 0, 0xE9A3, /* 0x10 */ + 0, 0, 0xE9A4, 0xE9A5, 0, 0xE9A6, 0, 0xE9A7, /* 0x20 */ + 0xE9A8, 0xE9A9, 0xE9AA, 0, 0, 0, 0xE9AB, 0xE9AC, /* 0x20 */ + 0, 0x9F54, 0xE9AD, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE2F6, 0x8B53, 0, 0, 0, /* 0x30 */ + 0, 0x8A40, 0x8DB0, 0xE9AF, 0xE9AE, 0x96A3, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE9B1, 0xE9B2, 0xE9B0, /* 0x40 */ + 0, 0xE9B3, 0, 0, 0x9682, 0, 0, 0, /* 0x50 */ + 0xE9B4, 0, 0x8B9B, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x9844, /* 0x60 */ + 0, 0, 0xFC42, 0, 0xE9B5, 0xFC41, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0xE9B7, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x88BC, 0xFC43, /* 0x80 */ + 0, 0xE9B8, 0x95A9, 0xE9B6, 0, 0, 0xE9B9, 0xE9BA, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9BB, /* 0x90 */ + 0xE9BC, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE9BD, 0, 0x968E, 0x8E4C, 0, 0x8DF8, 0x914E, 0, /* 0xA0 */ + 0, 0xFC44, 0, 0, 0xE9BE, 0, 0, 0, /* 0xB0 */ + 0, 0xE9C1, 0, 0xFC45, 0, 0, 0, 0, /* 0xB0 */ + 0xE9BF, 0, 0, 0, 0, 0, 0xE9C2, 0, /* 0xC0 */ + 0, 0x8CEF, 0xE9C0, 0, 0, 0, 0, 0xE9C3, /* 0xC0 */ + 0, 0xE9C4, 0xE9C5, 0, 0xE9C9, 0, 0x8E49, 0, /* 0xD0 */ + 0, 0, 0, 0x91E2, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE9CA, 0xE9C7, 0xE9C6, 0xE9C8, 0, 0, 0, /* 0xE0 */ + 0x8C7E, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE9CE, 0xE9CD, 0xE9CC, 0, 0, 0x88B1 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFC46, 0, 0, 0, 0xE9D8, 0, 0xE9D4, 0, /* 0x00 */ + 0xE9D5, 0xE9D1, 0xE9D7, 0, 0xE9D3, 0x8A82, 0, 0, /* 0x00 */ + 0x986B, 0, 0xE9D6, 0xE9D2, 0xE9D0, 0xE9CF, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE9DA, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE9DD, 0, 0, 0xE9DC, 0xE9DB, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x9568, 0xE9D9, 0x88F1, /* 0x20 */ + 0xE9DE, 0, 0xE9E0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x8A8F, 0xE9CB, 0x8956, 0, 0, 0xE9E2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE9E1, 0xE9DF, /* 0x40 */ + 0x924C, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x9690, 0, 0, 0, 0, 0x97D8, /* 0x50 */ + 0, 0, 0xE9E3, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE9E4, 0, 0, 0, 0, 0, 0, 0xE9E5, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xE9E6, 0, /* 0x70 */ + 0xE9E7, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x92B9, 0, 0xE9E8, /* 0xE0 */ + 0, 0x94B5, 0, 0xE9ED, 0xE9E9, 0, 0, 0, /* 0xE0 */ + 0xE9EA, 0, 0, 0x9650, 0x96C2, 0, 0x93CE /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9EE, 0, 0, 0xE9EF, 0x93BC, /* 0x00 */ + 0xE9EC, 0xE9EB, 0, 0, 0, 0, 0x89A8, 0, /* 0x00 */ + 0, 0, 0xE9F7, 0, 0, 0xE9F6, 0, 0, /* 0x10 */ + 0, 0, 0, 0x8995, 0, 0, 0, 0xE9F4, /* 0x10 */ + 0, 0, 0, 0xE9F3, 0, 0, 0xE9F1, 0, /* 0x20 */ + 0x8A9B, 0, 0xE9F0, 0x8EB0, 0x89A7, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x8D83, 0, 0, 0xE9FA, 0xE9F9, /* 0x30 */ + 0, 0xE9F8, 0, 0, 0xE9F5, 0, 0xE9FB, 0, /* 0x40 */ + 0xE9FC, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEA44, 0xEA43, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xEA45, 0, 0, 0x894C, 0xEA40, 0xEA41, 0, /* 0x50 */ + 0x8D94, 0x96B7, 0, 0, 0xEA42, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xFC48, 0x9651, 0, 0, 0xEA4A, /* 0x60 */ + 0xFC47, 0, 0xEA46, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xEA4B, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xEA48, /* 0x80 */ + 0, 0xEA47, 0, 0, 0, 0, 0, 0x8C7B, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xEA4C, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xEA4D, 0, 0, 0, /* 0xA0 */ + 0, 0xEA4E, 0, 0xEA49, 0, 0, 0, 0xE9F2, /* 0xA0 */ + 0, 0, 0xEA4F, 0, 0x92DF, 0, 0, 0, /* 0xB0 */ + 0xEA53, 0, 0xEA54, 0xEA52, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEA51, 0xEA57, 0, 0xEA50, 0, 0xEA55, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEA56, /* 0xC0 */ + 0, 0, 0, 0xEA59, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xEA58, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xEA5B, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xEA5C, 0, 0xEA5D, /* 0xE0 */ + 0, 0, 0x9868, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xEA5A, 0x91E9, 0x8DEB, 0, 0, 0xEA5E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0xFC4A, 0xEA5F, 0xEA60, 0, 0, 0xEA61, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xEA62, 0, 0, /* 0x70 */ + 0x8CB2, 0xEA63, 0, 0, 0, 0xEA64, 0, 0x8EAD, /* 0x70 */ + 0, 0xEA65, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEA66, 0, 0, 0xEA67, 0xEA68, 0, 0, 0, /* 0x80 */ + 0, 0xEA6B, 0xEA69, 0x985B, 0, 0xEA6A, 0, 0x97ED, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEA6C, 0, 0x97D9, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEA6D, 0x949E, 0, /* 0xA0 */ + 0, 0xEA6E, 0xEA70, 0, 0, 0xEA71, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xEA6F, 0x8D8D, 0x96CB, 0x9683, 0x9BF5, 0, 0x9F80, 0x969B, /* 0xB0 */ + 0, 0, 0, 0, 0x89A9, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xEA73, 0x8B6F, 0xEA74, 0xEA75, /* 0xC0 */ + 0xEA76, 0xFC4B, 0x8D95, 0, 0xEA77, 0, 0, 0, /* 0xD0 */ + 0xE0D2, 0x96D9, 0, 0x91E1, 0xEA78, 0xEA7A, 0xEA79, 0, /* 0xD0 */ + 0xEA7B, 0, 0, 0, 0, 0xEA7C, 0, 0, /* 0xE0 */ + 0xEA7D, 0, 0, 0, 0, 0, 0, 0xEA7E, /* 0xE0 */ + 0, 0, 0, 0, 0xEA80, 0, 0xEA81, 0xEA82, /* 0xF0 */ + 0, 0xEA83, 0, 0xEA84, 0xEA85, 0xEA86 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEA87, /* 0x00 */ + 0xEA88, 0, 0, 0, 0, 0, 0x9343, 0, /* 0x00 */ + 0, 0, 0, 0x8CDB, 0, 0xEA8A, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x916C, 0xEA8B, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xEA8C, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x9540, 0, 0, 0xEA8D, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xEA8E, 0xE256, 0, 0, 0xE6D8, 0xE8EB, /* 0x40 */ + 0, 0, 0xEA8F, 0, 0xEA90, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xEA92, /* 0x50 */ + 0xEA93, 0xEA94, 0x97EE, 0xEA91, 0, 0, 0xEA95, 0xEA96, /* 0x60 */ + 0, 0, 0xEA98, 0, 0xEA97, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEA9A, 0, 0, 0, 0xEA9B, 0xEA99, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x97B4, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xEA9C, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xEA9D, 0xE273, 0, 0, /* 0x90 */ + 0xEA9E /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* this table includes some IBM Kanji's */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x20 */ + 0xFAE0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xFBE9 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* this table includes some IBM Kanji's */ + +sal_uInt16 const aImplUniToDBCSTab_MS932_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xFA90, 0xFA9B, /* 0x00 */ + 0xFA9C, 0xFAB1, 0xFAD8, 0xFAE8, 0xFAEA, 0xFB58, 0xFB5E, 0xFB75, /* 0x10 */ + 0xFB7D, 0xFB7E, 0xFB80, 0xFB82, 0xFB86, 0xFB89, 0xFB92, 0xFB9D, /* 0x10 */ + 0xFB9F, 0xFBA0, 0xFBA9, 0xFBB1, 0xFBB3, 0xFBB4, 0xFBB7, 0xFBD3, /* 0x20 */ + 0xFBDA, 0xFBEA, 0xFBF6, 0xFBF7, 0xFBF9, 0xFC49 /* 0x20 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLEJAPANESE_FE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEB64, 0xEB5C, 0, 0xEB51, 0, 0xEB69, 0xEB6A, 0xEB6F, /* 0x30 */ + 0xEB70, 0xEB6B, 0xEB6C, 0xEB79, 0xEB7A, 0xEB73, 0xEB74, 0xEB71, /* 0x30 */ + 0xEB72, 0xEB75, 0xEB76, 0xEB77, 0xEB78 /* 0x40 */ + /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_SJIS_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8149, 0xFA57, 0x8194, 0x8190, 0x8193, 0x8195, 0xFA56, /* 0x00 */ + 0x8169, 0x816A, 0x8196, 0x817B, 0x8143, 0x817C, 0x8144, 0x815E, /* 0x00 */ + 0x824F, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, /* 0x10 */ + 0x8257, 0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148, /* 0x10 */ + 0x8197, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, /* 0x20 */ + 0x8267, 0x8268, 0x8269, 0x826A, 0x826B, 0x826C, 0x826D, 0x826E, /* 0x20 */ + 0x826F, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, /* 0x30 */ + 0x8277, 0x8278, 0x8279, 0x816D, 0x815F, 0x816E, 0x814F, 0x8151, /* 0x30 */ + 0x814D, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, /* 0x40 */ + 0x8288, 0x8289, 0x828A, 0x828B, 0x828C, 0x828D, 0x828E, 0x828F, /* 0x40 */ + 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, /* 0x50 */ + 0x8298, 0x8299, 0x829A, 0x816F, 0x8162, 0x8170, 0x8160, 0, /* 0x50 */ + 0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0x60 */ + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0x60 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0x70 */ + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0x70 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0x80 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0x80 */ + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0x90 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x8191, 0x8192, 0x81CA, 0x8150, 0xFA55, 0x818F /* 0xE0 */ + /* 0xE0 */ +}; + diff --git a/sal/textenc/tcvtjp3.tab b/sal/textenc/tcvtjp3.tab new file mode 100644 index 000000000..d1c53d0c4 --- /dev/null +++ b/sal/textenc/tcvtjp3.tab @@ -0,0 +1,2905 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* japanese charsets: JIS201, JIS208, JIS212 */ + +/* For compatibility reasons, the Shift-JIS row 8740--879E as defined in + http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT + ("Table version: 2.01," "Date: 04/15/98") is used as the 13th row (i.e., + ISO-2022-JP 2D21--2D7E) of JIS X 0208 (officially, that 13th row contains no + characters). + */ + +/* ======================================================================= */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, /* 0x20 */ + 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, /* 0x20 */ + 0xFF3E, 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, /* 0x30 */ + 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, /* 0x30 */ + 0x005C, 0x301C, 0x2016, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, /* 0x40 */ + 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, /* 0x40 */ + 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, /* 0x50 */ + 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0x2212, 0x00B1, 0x00D7, /* 0x50 */ + 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, /* 0x60 */ + 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, /* 0x60 */ + 0xFF04, 0x00A2, 0x00A3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, /* 0x70 */ + 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, /* 0x20 */ + 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, /* 0x30 */ + 0x222A, 0x2229, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x2227, 0x2228, 0x00AC, 0x21D2, 0x21D4, 0x2200, /* 0x40 */ + 0x2203, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x2220, 0x22A5, 0x2312, 0x2202, /* 0x50 */ + 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, /* 0x60 */ + 0x2235, 0x222B, 0x222C, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, /* 0x70 */ + 0x2021, 0x00B6, 0, 0, 0, 0, 0x25EF /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_23[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0x30 */ + 0xFF18, 0xFF19, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0x40 */ + 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0x40 */ + 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0x50 */ + 0xFF38, 0xFF39, 0xFF3A, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0x60 */ + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0x60 */ + 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0x70 */ + 0xFF58, 0xFF59, 0xFF5A /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0x20 */ + 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0x20 */ + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0x30 */ + 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0x30 */ + 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0x40 */ + 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0x40 */ + 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0x50 */ + 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0x50 */ + 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0x60 */ + 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0x60 */ + 0x3090, 0x3091, 0x3092, 0x3093 /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0x20 */ + 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0x20 */ + 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0x30 */ + 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0x30 */ + 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0x40 */ + 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0x40 */ + 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0x50 */ + 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0x50 */ + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0x60 */ + 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0x60 */ + 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6 /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x20 */ + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0x20 */ + 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0x30 */ + 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0x40 */ + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0x40 */ + 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0x50 */ + 0x03C9 /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_27[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0x20 */ + 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0x20 */ + 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0x30 */ + 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0x30 */ + 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0x50 */ + 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0x50 */ + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0x60 */ + 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0x60 */ + 0x044E, 0x044F /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_28[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, /* 0x20 */ + 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, /* 0x20 */ + 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, /* 0x30 */ + 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, /* 0x30 */ + 0x2542 /* 0x40 */ + /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_2D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, /* 0x20 */ + 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, /* 0x20 */ + 0x246F, 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162, /* 0x30 */ + 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0, /* 0x30 */ + 0x3349, 0x3314, 0x3322, 0x334D, 0x3318, 0x3327, 0x3303, 0x3336, /* 0x40 */ + 0x3351, 0x3357, 0x330D, 0x3326, 0x3323, 0x332B, 0x334A, 0x333B, /* 0x40 */ + 0x339C, 0x339D, 0x339E, 0x338E, 0x338F, 0x33C4, 0x33A1, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x337B, /* 0x50 */ + 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4, 0x32A5, 0x32A6, /* 0x60 */ + 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D, 0x337C, /* 0x60 */ + 0x2252, 0x2261, 0x222B, 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220, /* 0x70 */ + 0x221F, 0x22BF, 0x2235, 0x2229, 0x222A /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, /* 0x20 */ + 0x59F6, 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, /* 0x20 */ + 0x65ED, 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, /* 0x30 */ + 0x5B9B, 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, /* 0x30 */ + 0x7C9F, 0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, /* 0x40 */ + 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, /* 0x40 */ + 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, /* 0x50 */ + 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, /* 0x50 */ + 0x840E, 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, /* 0x60 */ + 0x57DF, 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, /* 0x60 */ + 0x7A32, 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, /* 0x70 */ + 0x56E0, 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_31[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, /* 0x20 */ + 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, /* 0x20 */ + 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, /* 0x30 */ + 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, /* 0x30 */ + 0x96F2, 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, /* 0x40 */ + 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, /* 0x40 */ + 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, /* 0x50 */ + 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, /* 0x50 */ + 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, /* 0x60 */ + 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, /* 0x60 */ + 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, /* 0x70 */ + 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, /* 0x20 */ + 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, /* 0x20 */ + 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, /* 0x30 */ + 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, /* 0x30 */ + 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, /* 0x40 */ + 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, /* 0x40 */ + 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, /* 0x50 */ + 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, /* 0x50 */ + 0x8FE6, 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, /* 0x60 */ + 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, /* 0x60 */ + 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, /* 0x70 */ + 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, /* 0x20 */ + 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, /* 0x20 */ + 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, /* 0x30 */ + 0x84CB, 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, /* 0x30 */ + 0x57A3, 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, /* 0x40 */ + 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, /* 0x40 */ + 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, /* 0x50 */ + 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, /* 0x50 */ + 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, /* 0x60 */ + 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, /* 0x60 */ + 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, /* 0x70 */ + 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_34[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, /* 0x20 */ + 0x5BD2, 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, /* 0x20 */ + 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, /* 0x30 */ + 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, /* 0x30 */ + 0x6C57, 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, /* 0x40 */ + 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, /* 0x40 */ + 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, /* 0x50 */ + 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, /* 0x50 */ + 0x5DCC, 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, /* 0x60 */ + 0x9811, 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, /* 0x60 */ + 0x57FA, 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, /* 0x70 */ + 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_35[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, /* 0x20 */ + 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, /* 0x20 */ + 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, /* 0x30 */ + 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, /* 0x30 */ + 0x7947, 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, /* 0x40 */ + 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, /* 0x40 */ + 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, /* 0x50 */ + 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, /* 0x50 */ + 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, /* 0x60 */ + 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, /* 0x60 */ + 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, /* 0x70 */ + 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_36[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, /* 0x20 */ + 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, /* 0x20 */ + 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, /* 0x30 */ + 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, /* 0x30 */ + 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, /* 0x40 */ + 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, /* 0x40 */ + 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, /* 0x50 */ + 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, /* 0x50 */ + 0x8B39, 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, /* 0x60 */ + 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, /* 0x60 */ + 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, /* 0x70 */ + 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_37[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, /* 0x20 */ + 0x9688, 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, /* 0x20 */ + 0x85AB, 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, /* 0x30 */ + 0x4FC2, 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, /* 0x30 */ + 0x5951, 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, /* 0x40 */ + 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, /* 0x40 */ + 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, /* 0x50 */ + 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, /* 0x50 */ + 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, /* 0x60 */ + 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, /* 0x60 */ + 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, /* 0x70 */ + 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_38[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, /* 0x20 */ + 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, /* 0x20 */ + 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, /* 0x30 */ + 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, /* 0x30 */ + 0x8A00, 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, /* 0x40 */ + 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, /* 0x40 */ + 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, /* 0x50 */ + 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, /* 0x50 */ + 0x4F0D, 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, /* 0x60 */ + 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, /* 0x60 */ + 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, /* 0x70 */ + 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_39[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, /* 0x20 */ + 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, /* 0x20 */ + 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, /* 0x30 */ + 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, /* 0x30 */ + 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, /* 0x40 */ + 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, /* 0x40 */ + 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, /* 0x50 */ + 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, /* 0x50 */ + 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, /* 0x60 */ + 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, /* 0x60 */ + 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, /* 0x70 */ + 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_3A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, /* 0x20 */ + 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, /* 0x20 */ + 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, /* 0x30 */ + 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, /* 0x30 */ + 0x88DF, 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, /* 0x40 */ + 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, /* 0x40 */ + 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, /* 0x50 */ + 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, /* 0x50 */ + 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, /* 0x60 */ + 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, /* 0x60 */ + 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, /* 0x70 */ + 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_3B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, /* 0x20 */ + 0x96D1, 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, /* 0x20 */ + 0x4E09, 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, /* 0x30 */ + 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, /* 0x30 */ + 0x9178, 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, /* 0x40 */ + 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, /* 0x40 */ + 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, /* 0x50 */ + 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, /* 0x50 */ + 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, /* 0x60 */ + 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, /* 0x60 */ + 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, /* 0x70 */ + 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_3C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, /* 0x20 */ + 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, /* 0x20 */ + 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, /* 0x30 */ + 0x53F1, 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, /* 0x30 */ + 0x75BE, 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, /* 0x40 */ + 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, /* 0x40 */ + 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, /* 0x50 */ + 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, /* 0x50 */ + 0x914C, 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, /* 0x60 */ + 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, /* 0x60 */ + 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, /* 0x70 */ + 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_3D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, /* 0x20 */ + 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, /* 0x20 */ + 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, /* 0x30 */ + 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, /* 0x30 */ + 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, /* 0x40 */ + 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, /* 0x40 */ + 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, /* 0x50 */ + 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, /* 0x50 */ + 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, /* 0x60 */ + 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, /* 0x60 */ + 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, /* 0x70 */ + 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_3E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, /* 0x20 */ + 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, /* 0x20 */ + 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, /* 0x30 */ + 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, /* 0x30 */ + 0x6A1F, 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, /* 0x40 */ + 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, /* 0x40 */ + 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, /* 0x50 */ + 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, /* 0x50 */ + 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, /* 0x60 */ + 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, /* 0x60 */ + 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, /* 0x70 */ + 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_3F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, /* 0x20 */ + 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, /* 0x20 */ + 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, /* 0x30 */ + 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, /* 0x30 */ + 0x795E, 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, /* 0x40 */ + 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, /* 0x40 */ + 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, /* 0x50 */ + 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, /* 0x50 */ + 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, /* 0x60 */ + 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, /* 0x60 */ + 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, /* 0x70 */ + 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_40[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, /* 0x20 */ + 0x51C4, 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, /* 0x20 */ + 0x6574, 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, /* 0x30 */ + 0x751F, 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, /* 0x30 */ + 0x8A93, 0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, /* 0x40 */ + 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, /* 0x40 */ + 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, /* 0x50 */ + 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, /* 0x50 */ + 0x7A83, 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, /* 0x60 */ + 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, /* 0x60 */ + 0x6247, 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, /* 0x70 */ + 0x6F5C, 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_41[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, /* 0x20 */ + 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, /* 0x20 */ + 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, /* 0x30 */ + 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, /* 0x30 */ + 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, /* 0x40 */ + 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, /* 0x40 */ + 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, /* 0x50 */ + 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, /* 0x50 */ + 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, /* 0x60 */ + 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, /* 0x60 */ + 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, /* 0x70 */ + 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_42[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, /* 0x20 */ + 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, /* 0x20 */ + 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, /* 0x30 */ + 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, /* 0x30 */ + 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, /* 0x40 */ + 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, /* 0x40 */ + 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, /* 0x50 */ + 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, /* 0x50 */ + 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, /* 0x60 */ + 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, /* 0x60 */ + 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, /* 0x70 */ + 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_43[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, /* 0x20 */ + 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, /* 0x20 */ + 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, /* 0x30 */ + 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, /* 0x30 */ + 0x80C6, 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, /* 0x40 */ + 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, /* 0x40 */ + 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, /* 0x50 */ + 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, /* 0x50 */ + 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, /* 0x60 */ + 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, /* 0x60 */ + 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, /* 0x70 */ + 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_44[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, /* 0x20 */ + 0x61F2, 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, /* 0x20 */ + 0x8074, 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, /* 0x30 */ + 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, /* 0x30 */ + 0x6C88, 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, /* 0x40 */ + 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, /* 0x40 */ + 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, /* 0x50 */ + 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, /* 0x50 */ + 0x91E3, 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, /* 0x60 */ + 0x5448, 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, /* 0x60 */ + 0x608C, 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, /* 0x70 */ + 0x7A0B, 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_45[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, /* 0x20 */ + 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, /* 0x20 */ + 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, /* 0x30 */ + 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, /* 0x30 */ + 0x70B9, 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, /* 0x40 */ + 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, /* 0x40 */ + 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, /* 0x50 */ + 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, /* 0x50 */ + 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, /* 0x60 */ + 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, /* 0x60 */ + 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, /* 0x70 */ + 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_46[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, /* 0x20 */ + 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, /* 0x20 */ + 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, /* 0x30 */ + 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, /* 0x30 */ + 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, /* 0x40 */ + 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, /* 0x40 */ + 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, /* 0x50 */ + 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, /* 0x50 */ + 0x5948, 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, /* 0x60 */ + 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, /* 0x60 */ + 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, /* 0x70 */ + 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_47[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, /* 0x20 */ + 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, /* 0x20 */ + 0x5FF5, 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, /* 0x30 */ + 0x57DC, 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, /* 0x30 */ + 0x8FB2, 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, /* 0x40 */ + 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, /* 0x40 */ + 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, /* 0x50 */ + 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, /* 0x50 */ + 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, /* 0x60 */ + 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, /* 0x60 */ + 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, /* 0x70 */ + 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_48[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, /* 0x20 */ + 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, /* 0x20 */ + 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, /* 0x30 */ + 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, /* 0x30 */ + 0x53DB, 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, /* 0x40 */ + 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, /* 0x40 */ + 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, /* 0x50 */ + 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, /* 0x50 */ + 0x5F7C, 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, /* 0x60 */ + 0x75B2, 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, /* 0x60 */ + 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, /* 0x70 */ + 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_49[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, /* 0x20 */ + 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, /* 0x20 */ + 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, /* 0x30 */ + 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, /* 0x30 */ + 0x5EDF, 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, /* 0x40 */ + 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, /* 0x40 */ + 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, /* 0x50 */ + 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, /* 0x50 */ + 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, /* 0x60 */ + 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, /* 0x60 */ + 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, /* 0x70 */ + 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_4A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, /* 0x20 */ + 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, /* 0x20 */ + 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, /* 0x30 */ + 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, /* 0x30 */ + 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, /* 0x40 */ + 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, /* 0x40 */ + 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, /* 0x50 */ + 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, /* 0x50 */ + 0x5703, 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, /* 0x60 */ + 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, /* 0x60 */ + 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, /* 0x70 */ + 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_4B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, /* 0x20 */ + 0x840C, 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, /* 0x20 */ + 0x98FD, 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, /* 0x30 */ + 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, /* 0x30 */ + 0x68D2, 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, /* 0x40 */ + 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, /* 0x40 */ + 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, /* 0x50 */ + 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, /* 0x50 */ + 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, /* 0x60 */ + 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, /* 0x60 */ + 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, /* 0x70 */ + 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_4C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, /* 0x20 */ + 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, /* 0x20 */ + 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, /* 0x30 */ + 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, /* 0x30 */ + 0x660E, 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, /* 0x40 */ + 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, /* 0x40 */ + 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, /* 0x50 */ + 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, /* 0x50 */ + 0x5C24, 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, /* 0x60 */ + 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, /* 0x60 */ + 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, /* 0x70 */ + 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_4D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, /* 0x20 */ + 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, /* 0x20 */ + 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, /* 0x30 */ + 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, /* 0x30 */ + 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, /* 0x40 */ + 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, /* 0x40 */ + 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, /* 0x50 */ + 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, /* 0x50 */ + 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, /* 0x60 */ + 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, /* 0x60 */ + 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, /* 0x70 */ + 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, /* 0x20 */ + 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, /* 0x20 */ + 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, /* 0x30 */ + 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, /* 0x30 */ + 0x5BEE, 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, /* 0x40 */ + 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, /* 0x40 */ + 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, /* 0x50 */ + 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, /* 0x50 */ + 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, /* 0x60 */ + 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, /* 0x60 */ + 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, /* 0x70 */ + 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, /* 0x20 */ + 0x8CC2, 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, /* 0x20 */ + 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, /* 0x30 */ + 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, /* 0x30 */ + 0x8AD6, 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, /* 0x40 */ + 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, /* 0x40 */ + 0x6900, 0x6E7E, 0x7897, 0x8155 /* 0x50 */ + /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, /* 0x20 */ + 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, /* 0x20 */ + 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, /* 0x30 */ + 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, /* 0x30 */ + 0x4EDE, 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, /* 0x40 */ + 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, /* 0x40 */ + 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, /* 0x50 */ + 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, /* 0x50 */ + 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, /* 0x60 */ + 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, /* 0x60 */ + 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, /* 0x70 */ + 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, /* 0x20 */ + 0x50ED, 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, /* 0x20 */ + 0x5116, 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, /* 0x30 */ + 0x513B, 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, /* 0x30 */ + 0x5169, 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, /* 0x40 */ + 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, /* 0x40 */ + 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, /* 0x50 */ + 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, /* 0x50 */ + 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, /* 0x60 */ + 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, /* 0x60 */ + 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, /* 0x70 */ + 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, /* 0x20 */ + 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, /* 0x20 */ + 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, /* 0x30 */ + 0x5315, 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, /* 0x30 */ + 0x5346, 0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, /* 0x40 */ + 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, /* 0x40 */ + 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, /* 0x50 */ + 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, /* 0x50 */ + 0x5440, 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, /* 0x60 */ + 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, /* 0x60 */ + 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, /* 0x70 */ + 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, /* 0x20 */ + 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, /* 0x20 */ + 0x5539, 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, /* 0x30 */ + 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, /* 0x30 */ + 0x559F, 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, /* 0x40 */ + 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, /* 0x40 */ + 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, /* 0x50 */ + 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, /* 0x50 */ + 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, /* 0x60 */ + 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, /* 0x60 */ + 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, /* 0x70 */ + 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, /* 0x20 */ + 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, /* 0x20 */ + 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, /* 0x30 */ + 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, /* 0x30 */ + 0x57D3, 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, /* 0x40 */ + 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, /* 0x40 */ + 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, /* 0x50 */ + 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, /* 0x50 */ + 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, /* 0x60 */ + 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, /* 0x60 */ + 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, /* 0x70 */ + 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, /* 0x20 */ + 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, /* 0x20 */ + 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, /* 0x30 */ + 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, /* 0x30 */ + 0x5ABD, 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, /* 0x40 */ + 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, /* 0x40 */ + 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, /* 0x50 */ + 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, /* 0x50 */ + 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, /* 0x60 */ + 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, /* 0x60 */ + 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, /* 0x70 */ + 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, /* 0x20 */ + 0x5C79, 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, /* 0x20 */ + 0x5CBC, 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, /* 0x30 */ + 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, /* 0x30 */ + 0x5D1F, 0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, /* 0x40 */ + 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, /* 0x40 */ + 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, /* 0x50 */ + 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, /* 0x50 */ + 0x5DEB, 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, /* 0x60 */ + 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, /* 0x60 */ + 0x5E5F, 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, /* 0x70 */ + 0x5E7F, 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, /* 0x20 */ + 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, /* 0x20 */ + 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, /* 0x30 */ + 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, /* 0x30 */ + 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, /* 0x40 */ + 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, /* 0x40 */ + 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, /* 0x50 */ + 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, /* 0x50 */ + 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, /* 0x60 */ + 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, /* 0x60 */ + 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, /* 0x70 */ + 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, /* 0x20 */ + 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, /* 0x20 */ + 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, /* 0x30 */ + 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, /* 0x30 */ + 0x6147, 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, /* 0x40 */ + 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, /* 0x40 */ + 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, /* 0x50 */ + 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, /* 0x50 */ + 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, /* 0x60 */ + 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, /* 0x60 */ + 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, /* 0x70 */ + 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, /* 0x20 */ + 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, /* 0x20 */ + 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, /* 0x30 */ + 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, /* 0x30 */ + 0x62C8, 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, /* 0x40 */ + 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, /* 0x40 */ + 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, /* 0x50 */ + 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, /* 0x50 */ + 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, /* 0x60 */ + 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, /* 0x60 */ + 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, /* 0x70 */ + 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, /* 0x20 */ + 0x64F1, 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, /* 0x20 */ + 0x652C, 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, /* 0x30 */ + 0x651C, 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, /* 0x30 */ + 0x6536, 0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, /* 0x40 */ + 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, /* 0x40 */ + 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, /* 0x50 */ + 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, /* 0x50 */ + 0x6603, 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, /* 0x60 */ + 0x6644, 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, /* 0x60 */ + 0x665F, 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, /* 0x70 */ + 0x6698, 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, /* 0x20 */ + 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, /* 0x20 */ + 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, /* 0x30 */ + 0x6746, 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, /* 0x30 */ + 0x67A9, 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, /* 0x40 */ + 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, /* 0x40 */ + 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, /* 0x50 */ + 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, /* 0x50 */ + 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, /* 0x60 */ + 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, /* 0x60 */ + 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, /* 0x70 */ + 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, /* 0x20 */ + 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, /* 0x20 */ + 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, /* 0x30 */ + 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, /* 0x30 */ + 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, /* 0x40 */ + 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, /* 0x40 */ + 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, /* 0x50 */ + 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, /* 0x50 */ + 0x69F2, 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, /* 0x60 */ + 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, /* 0x60 */ + 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, /* 0x70 */ + 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, /* 0x20 */ + 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, /* 0x20 */ + 0x6B05, 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, /* 0x30 */ + 0x6B37, 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, /* 0x30 */ + 0x6B59, 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, /* 0x40 */ + 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, /* 0x40 */ + 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, /* 0x50 */ + 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, /* 0x50 */ + 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, /* 0x60 */ + 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, /* 0x60 */ + 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, /* 0x70 */ + 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, /* 0x20 */ + 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, /* 0x20 */ + 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, /* 0x30 */ + 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, /* 0x30 */ + 0x6DE6, 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, /* 0x40 */ + 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, /* 0x40 */ + 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, /* 0x50 */ + 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, /* 0x50 */ + 0x6EFF, 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, /* 0x60 */ + 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, /* 0x60 */ + 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, /* 0x70 */ + 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, /* 0x20 */ + 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, /* 0x20 */ + 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, /* 0x30 */ + 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, /* 0x30 */ + 0x6FF1, 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, /* 0x40 */ + 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, /* 0x40 */ + 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, /* 0x50 */ + 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, /* 0x50 */ + 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, /* 0x60 */ + 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, /* 0x60 */ + 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, /* 0x70 */ + 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, /* 0x20 */ + 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, /* 0x20 */ + 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, /* 0x30 */ + 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, /* 0x30 */ + 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, /* 0x40 */ + 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, /* 0x40 */ + 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, /* 0x50 */ + 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, /* 0x50 */ + 0x73BB, 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, /* 0x60 */ + 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, /* 0x60 */ + 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, /* 0x70 */ + 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, /* 0x20 */ + 0x74F1, 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, /* 0x20 */ + 0x750D, 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, /* 0x30 */ + 0x754D, 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, /* 0x30 */ + 0x7567, 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, /* 0x40 */ + 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, /* 0x40 */ + 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, /* 0x50 */ + 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, /* 0x50 */ + 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, /* 0x60 */ + 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, /* 0x60 */ + 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, /* 0x70 */ + 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, /* 0x20 */ + 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, /* 0x20 */ + 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, /* 0x30 */ + 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, /* 0x30 */ + 0x7704, 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, /* 0x40 */ + 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, /* 0x40 */ + 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, /* 0x50 */ + 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, /* 0x50 */ + 0x77D7, 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, /* 0x60 */ + 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, /* 0x60 */ + 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, /* 0x70 */ + 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, /* 0x20 */ + 0x7919, 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, /* 0x20 */ + 0x7955, 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, /* 0x30 */ + 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, /* 0x30 */ + 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, /* 0x40 */ + 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, /* 0x40 */ + 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, /* 0x50 */ + 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, /* 0x50 */ + 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, /* 0x60 */ + 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, /* 0x60 */ + 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, /* 0x70 */ + 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, /* 0x20 */ + 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, /* 0x20 */ + 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, /* 0x30 */ + 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, /* 0x30 */ + 0x7BDD, 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, /* 0x40 */ + 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, /* 0x40 */ + 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, /* 0x50 */ + 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, /* 0x50 */ + 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, /* 0x60 */ + 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, /* 0x60 */ + 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, /* 0x70 */ + 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, /* 0x20 */ + 0x7D32, 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, /* 0x20 */ + 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, /* 0x30 */ + 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, /* 0x30 */ + 0x7DAB, 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, /* 0x40 */ + 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, /* 0x40 */ + 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, /* 0x50 */ + 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, /* 0x50 */ + 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, /* 0x60 */ + 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, /* 0x60 */ + 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, /* 0x70 */ + 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, /* 0x20 */ + 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, /* 0x20 */ + 0x7F82, 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, /* 0x30 */ + 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, /* 0x30 */ + 0x7FB8, 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, /* 0x40 */ + 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, /* 0x40 */ + 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, /* 0x50 */ + 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, /* 0x50 */ + 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, /* 0x60 */ + 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, /* 0x60 */ + 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, /* 0x70 */ + 0x80EF, 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, /* 0x20 */ + 0x816E, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, /* 0x20 */ + 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, /* 0x30 */ + 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, /* 0x30 */ + 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, /* 0x40 */ + 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, /* 0x40 */ + 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, /* 0x50 */ + 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, /* 0x50 */ + 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, /* 0x60 */ + 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, /* 0x60 */ + 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, /* 0x70 */ + 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, /* 0x20 */ + 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, /* 0x20 */ + 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, /* 0x30 */ + 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, /* 0x30 */ + 0x8413, 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, /* 0x40 */ + 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, /* 0x40 */ + 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, /* 0x50 */ + 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, /* 0x50 */ + 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, /* 0x60 */ + 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, /* 0x60 */ + 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, /* 0x70 */ + 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, /* 0x20 */ + 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, /* 0x20 */ + 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, /* 0x30 */ + 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, /* 0x30 */ + 0x860B, 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, /* 0x40 */ + 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, /* 0x40 */ + 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, /* 0x50 */ + 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, /* 0x50 */ + 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, /* 0x60 */ + 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, /* 0x60 */ + 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, /* 0x70 */ + 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, /* 0x20 */ + 0x87AF, 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, /* 0x20 */ + 0x87B3, 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, /* 0x30 */ + 0x880D, 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, /* 0x30 */ + 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, /* 0x40 */ + 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, /* 0x40 */ + 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, /* 0x50 */ + 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, /* 0x50 */ + 0x88B1, 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, /* 0x60 */ + 0x8902, 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, /* 0x60 */ + 0x8913, 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, /* 0x70 */ + 0x893B, 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, /* 0x20 */ + 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, /* 0x20 */ + 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, /* 0x30 */ + 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, /* 0x30 */ + 0x8A10, 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, /* 0x40 */ + 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, /* 0x40 */ + 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, /* 0x50 */ + 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, /* 0x50 */ + 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, /* 0x60 */ + 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, /* 0x60 */ + 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, /* 0x70 */ + 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, /* 0x20 */ + 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, /* 0x20 */ + 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, /* 0x30 */ + 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, /* 0x30 */ + 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, /* 0x40 */ + 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, /* 0x40 */ + 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, /* 0x50 */ + 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, /* 0x50 */ + 0x8D6D, 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, /* 0x60 */ + 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, /* 0x60 */ + 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, /* 0x70 */ + 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, /* 0x20 */ + 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, /* 0x20 */ + 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, /* 0x30 */ + 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, /* 0x30 */ + 0x8EC5, 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, /* 0x40 */ + 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, /* 0x40 */ + 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, /* 0x50 */ + 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, /* 0x50 */ + 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, /* 0x60 */ + 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, /* 0x60 */ + 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, /* 0x70 */ + 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, /* 0x20 */ + 0x9056, 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, /* 0x20 */ + 0x9082, 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, /* 0x30 */ + 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, /* 0x30 */ + 0x9112, 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, /* 0x40 */ + 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, /* 0x40 */ + 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, /* 0x50 */ + 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, /* 0x50 */ + 0x91F5, 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, /* 0x60 */ + 0x925E, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, /* 0x60 */ + 0x924B, 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, /* 0x70 */ + 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, /* 0x20 */ + 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, /* 0x20 */ + 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, /* 0x30 */ + 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, /* 0x30 */ + 0x9407, 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, /* 0x40 */ + 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, /* 0x40 */ + 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, /* 0x50 */ + 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, /* 0x50 */ + 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, /* 0x60 */ + 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, /* 0x60 */ + 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, /* 0x70 */ + 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, /* 0x20 */ + 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, /* 0x20 */ + 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, /* 0x30 */ + 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, /* 0x30 */ + 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, /* 0x40 */ + 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, /* 0x40 */ + 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, /* 0x50 */ + 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, /* 0x50 */ + 0x9790, 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, /* 0x60 */ + 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, /* 0x60 */ + 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, /* 0x70 */ + 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, /* 0x20 */ + 0x98C4, 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, /* 0x20 */ + 0x9914, 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, /* 0x30 */ + 0x992E, 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, /* 0x30 */ + 0x9951, 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, /* 0x40 */ + 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, /* 0x40 */ + 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, /* 0x50 */ + 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, /* 0x50 */ + 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, /* 0x60 */ + 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, /* 0x60 */ + 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, /* 0x70 */ + 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, /* 0x20 */ + 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, /* 0x20 */ + 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, /* 0x30 */ + 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, /* 0x30 */ + 0x9BB4, 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, /* 0x40 */ + 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, /* 0x40 */ + 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, /* 0x50 */ + 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, /* 0x50 */ + 0x9C30, 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, /* 0x60 */ + 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, /* 0x60 */ + 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, /* 0x70 */ + 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, /* 0x20 */ + 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, /* 0x20 */ + 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, /* 0x30 */ + 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, /* 0x30 */ + 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, /* 0x40 */ + 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, /* 0x40 */ + 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, /* 0x50 */ + 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, /* 0x50 */ + 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, /* 0x60 */ + 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, /* 0x60 */ + 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, /* 0x70 */ + 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0208_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199 /* 0x20 */ + /* 0x20 */ +}; + +/* ======================================================================= */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x20 */ + 0x02D8, /* 0x20 */ + 0x02C7, 0x00B8, 0x02D9, 0x02DD, 0x00AF, 0x02DB, 0x02DA, 0x007E, /* 0x30 */ + 0x0384, 0x0385, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x00A1, 0x00A6, 0x00BF, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x00BA, 0x00AA, 0x00A9, 0x00AE, 0x2122, /* 0x60 */ + 0x00A4, 0x2116 /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0386, 0x0388, 0x0389, 0x038A, 0x03AA, 0, 0x038C, /* 0x60 */ + 0, 0x038E, 0x03AB, 0, 0x038F, 0, 0, 0, /* 0x60 */ + 0, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03CA, 0x0390, 0x03CC, /* 0x70 */ + 0x03C2, 0x03CD, 0x03CB, 0x03B0, 0x03CE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_27[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, /* 0x40 */ + 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040E, 0x040F, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, /* 0x70 */ + 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x045E, 0x045F /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_29[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C6, 0x0110, 0, 0x0126, 0, 0x0132, 0, /* 0x20 */ + 0x0141, 0x013F, 0, 0x014A, 0x00D8, 0x0152, 0, 0x0166, /* 0x20 */ + 0x00DE, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, /* 0x40 */ + 0x0142, 0x0140, 0x0149, 0x014B, 0x00F8, 0x0153, 0x00DF, 0x0167, /* 0x40 */ + 0x00FE /* 0x50 */ + /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_2A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C1, 0x00C0, 0x00C4, 0x00C2, 0x0102, 0x01CD, 0x0100, /* 0x20 */ + 0x0104, 0x00C5, 0x00C3, 0x0106, 0x0108, 0x010C, 0x00C7, 0x010A, /* 0x20 */ + 0x010E, 0x00C9, 0x00C8, 0x00CB, 0x00CA, 0x011A, 0x0116, 0x0112, /* 0x30 */ + 0x0118, 0, 0x011C, 0x011E, 0x0122, 0x0120, 0x0124, 0x00CD, /* 0x30 */ + 0x00CC, 0x00CF, 0x00CE, 0x01CF, 0x0130, 0x012A, 0x012E, 0x0128, /* 0x40 */ + 0x0134, 0x0136, 0x0139, 0x013D, 0x013B, 0x0143, 0x0147, 0x0145, /* 0x40 */ + 0x00D1, 0x00D3, 0x00D2, 0x00D6, 0x00D4, 0x01D1, 0x0150, 0x014C, /* 0x50 */ + 0x00D5, 0x0154, 0x0158, 0x0156, 0x015A, 0x015C, 0x0160, 0x015E, /* 0x50 */ + 0x0164, 0x0162, 0x00DA, 0x00D9, 0x00DC, 0x00DB, 0x016C, 0x01D3, /* 0x60 */ + 0x0170, 0x016A, 0x0172, 0x016E, 0x0168, 0x01D7, 0x01DB, 0x01D9, /* 0x60 */ + 0x01D5, 0x0174, 0x00DD, 0x0178, 0x0176, 0x0179, 0x017D, 0x017B, /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_2B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00E1, 0x00E0, 0x00E4, 0x00E2, 0x0103, 0x01CE, 0x0101, /* 0x20 */ + 0x0105, 0x00E5, 0x00E3, 0x0107, 0x0109, 0x010D, 0x00E7, 0x010B, /* 0x20 */ + 0x010F, 0x00E9, 0x00E8, 0x00EB, 0x00EA, 0x011B, 0x0117, 0x0113, /* 0x30 */ + 0x0119, 0x01F5, 0x011D, 0x011F, 0, 0x0121, 0x0125, 0x00ED, /* 0x30 */ + 0x00EC, 0x00EF, 0x00EE, 0x01D0, 0, 0x012B, 0x012F, 0x0129, /* 0x40 */ + 0x0135, 0x0137, 0x013A, 0x013E, 0x013C, 0x0144, 0x0148, 0x0146, /* 0x40 */ + 0x00F1, 0x00F3, 0x00F2, 0x00F6, 0x00F4, 0x01D2, 0x0151, 0x014D, /* 0x50 */ + 0x00F5, 0x0155, 0x0159, 0x0157, 0x015B, 0x015D, 0x0161, 0x015F, /* 0x50 */ + 0x0165, 0x0163, 0x00FA, 0x00F9, 0x00FC, 0x00FB, 0x016D, 0x01D4, /* 0x60 */ + 0x0171, 0x016B, 0x0173, 0x016F, 0x0169, 0x01D8, 0x01DC, 0x01DA, /* 0x60 */ + 0x01D6, 0x0175, 0x00FD, 0x00FF, 0x0177, 0x017A, 0x017E, 0x017C /* 0x70 */ + /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E02, 0x4E04, 0x4E05, 0x4E0C, 0x4E12, 0x4E1F, 0x4E23, /* 0x20 */ + 0x4E24, 0x4E28, 0x4E2B, 0x4E2E, 0x4E2F, 0x4E30, 0x4E35, 0x4E40, /* 0x20 */ + 0x4E41, 0x4E44, 0x4E47, 0x4E51, 0x4E5A, 0x4E5C, 0x4E63, 0x4E68, /* 0x30 */ + 0x4E69, 0x4E74, 0x4E75, 0x4E79, 0x4E7F, 0x4E8D, 0x4E96, 0x4E97, /* 0x30 */ + 0x4E9D, 0x4EAF, 0x4EB9, 0x4EC3, 0x4ED0, 0x4EDA, 0x4EDB, 0x4EE0, /* 0x40 */ + 0x4EE1, 0x4EE2, 0x4EE8, 0x4EEF, 0x4EF1, 0x4EF3, 0x4EF5, 0x4EFD, /* 0x40 */ + 0x4EFE, 0x4EFF, 0x4F00, 0x4F02, 0x4F03, 0x4F08, 0x4F0B, 0x4F0C, /* 0x50 */ + 0x4F12, 0x4F15, 0x4F16, 0x4F17, 0x4F19, 0x4F2E, 0x4F31, 0x4F60, /* 0x50 */ + 0x4F33, 0x4F35, 0x4F37, 0x4F39, 0x4F3B, 0x4F3E, 0x4F40, 0x4F42, /* 0x60 */ + 0x4F48, 0x4F49, 0x4F4B, 0x4F4C, 0x4F52, 0x4F54, 0x4F56, 0x4F58, /* 0x60 */ + 0x4F5F, 0x4F63, 0x4F6A, 0x4F6C, 0x4F6E, 0x4F71, 0x4F77, 0x4F78, /* 0x70 */ + 0x4F79, 0x4F7A, 0x4F7D, 0x4F7E, 0x4F81, 0x4F82, 0x4F84 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_31[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F85, 0x4F89, 0x4F8A, 0x4F8C, 0x4F8E, 0x4F90, 0x4F92, /* 0x20 */ + 0x4F93, 0x4F94, 0x4F97, 0x4F99, 0x4F9A, 0x4F9E, 0x4F9F, 0x4FB2, /* 0x20 */ + 0x4FB7, 0x4FB9, 0x4FBB, 0x4FBC, 0x4FBD, 0x4FBE, 0x4FC0, 0x4FC1, /* 0x30 */ + 0x4FC5, 0x4FC6, 0x4FC8, 0x4FC9, 0x4FCB, 0x4FCC, 0x4FCD, 0x4FCF, /* 0x30 */ + 0x4FD2, 0x4FDC, 0x4FE0, 0x4FE2, 0x4FF0, 0x4FF2, 0x4FFC, 0x4FFD, /* 0x40 */ + 0x4FFF, 0x5000, 0x5001, 0x5004, 0x5007, 0x500A, 0x500C, 0x500E, /* 0x40 */ + 0x5010, 0x5013, 0x5017, 0x5018, 0x501B, 0x501C, 0x501D, 0x501E, /* 0x50 */ + 0x5022, 0x5027, 0x502E, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, /* 0x50 */ + 0x5041, 0x5042, 0x5045, 0x5046, 0x504A, 0x504C, 0x504E, 0x5051, /* 0x60 */ + 0x5052, 0x5053, 0x5057, 0x5059, 0x505F, 0x5060, 0x5062, 0x5063, /* 0x60 */ + 0x5066, 0x5067, 0x506A, 0x506D, 0x5070, 0x5071, 0x503B, 0x5081, /* 0x70 */ + 0x5083, 0x5084, 0x5086, 0x508A, 0x508E, 0x508F, 0x5090 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5092, 0x5093, 0x5094, 0x5096, 0x509B, 0x509C, 0x509E, /* 0x20 */ + 0x509F, 0x50A0, 0x50A1, 0x50A2, 0x50AA, 0x50AF, 0x50B0, 0x50B9, /* 0x20 */ + 0x50BA, 0x50BD, 0x50C0, 0x50C3, 0x50C4, 0x50C7, 0x50CC, 0x50CE, /* 0x30 */ + 0x50D0, 0x50D3, 0x50D4, 0x50D8, 0x50DC, 0x50DD, 0x50DF, 0x50E2, /* 0x30 */ + 0x50E4, 0x50E6, 0x50E8, 0x50E9, 0x50EF, 0x50F1, 0x50F6, 0x50FA, /* 0x40 */ + 0x50FE, 0x5103, 0x5106, 0x5107, 0x5108, 0x510B, 0x510C, 0x510D, /* 0x40 */ + 0x510E, 0x50F2, 0x5110, 0x5117, 0x5119, 0x511B, 0x511C, 0x511D, /* 0x50 */ + 0x511E, 0x5123, 0x5127, 0x5128, 0x512C, 0x512D, 0x512F, 0x5131, /* 0x50 */ + 0x5133, 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514A, 0x514F, /* 0x60 */ + 0x5153, 0x5155, 0x5157, 0x5158, 0x515F, 0x5164, 0x5166, 0x517E, /* 0x60 */ + 0x5183, 0x5184, 0x518B, 0x518E, 0x5198, 0x519D, 0x51A1, 0x51A3, /* 0x70 */ + 0x51AD, 0x51B8, 0x51BA, 0x51BC, 0x51BE, 0x51BF, 0x51C2 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x51C8, 0x51CF, 0x51D1, 0x51D2, 0x51D3, 0x51D5, 0x51D8, /* 0x20 */ + 0x51DE, 0x51E2, 0x51E5, 0x51EE, 0x51F2, 0x51F3, 0x51F4, 0x51F7, /* 0x20 */ + 0x5201, 0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, /* 0x30 */ + 0x5222, 0x5228, 0x5231, 0x5232, 0x5235, 0x523C, 0x5245, 0x5249, /* 0x30 */ + 0x5255, 0x5257, 0x5258, 0x525A, 0x525C, 0x525F, 0x5260, 0x5261, /* 0x40 */ + 0x5266, 0x526E, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, /* 0x40 */ + 0x528A, 0x528C, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529A, /* 0x50 */ + 0x529C, 0x52A4, 0x52A5, 0x52A6, 0x52A7, 0x52AF, 0x52B0, 0x52B6, /* 0x50 */ + 0x52B7, 0x52B8, 0x52BA, 0x52BB, 0x52BD, 0x52C0, 0x52C4, 0x52C6, /* 0x60 */ + 0x52C8, 0x52CC, 0x52CF, 0x52D1, 0x52D4, 0x52D6, 0x52DB, 0x52DC, /* 0x60 */ + 0x52E1, 0x52E5, 0x52E8, 0x52E9, 0x52EA, 0x52EC, 0x52F0, 0x52F1, /* 0x70 */ + 0x52F4, 0x52F6, 0x52F7, 0x5300, 0x5303, 0x530A, 0x530B /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_34[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x530C, 0x5311, 0x5313, 0x5318, 0x531B, 0x531C, 0x531E, /* 0x20 */ + 0x531F, 0x5325, 0x5327, 0x5328, 0x5329, 0x532B, 0x532C, 0x532D, /* 0x20 */ + 0x5330, 0x5332, 0x5335, 0x533C, 0x533D, 0x533E, 0x5342, 0x534C, /* 0x30 */ + 0x534B, 0x5359, 0x535B, 0x5361, 0x5363, 0x5365, 0x536C, 0x536D, /* 0x30 */ + 0x5372, 0x5379, 0x537E, 0x5383, 0x5387, 0x5388, 0x538E, 0x5393, /* 0x40 */ + 0x5394, 0x5399, 0x539D, 0x53A1, 0x53A4, 0x53AA, 0x53AB, 0x53AF, /* 0x40 */ + 0x53B2, 0x53B4, 0x53B5, 0x53B7, 0x53B8, 0x53BA, 0x53BD, 0x53C0, /* 0x50 */ + 0x53C5, 0x53CF, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DD, 0x53DE, /* 0x50 */ + 0x53E0, 0x53E6, 0x53E7, 0x53F5, 0x5402, 0x5413, 0x541A, 0x5421, /* 0x60 */ + 0x5427, 0x5428, 0x542A, 0x542F, 0x5431, 0x5434, 0x5435, 0x5443, /* 0x60 */ + 0x5444, 0x5447, 0x544D, 0x544F, 0x545E, 0x5462, 0x5464, 0x5466, /* 0x70 */ + 0x5467, 0x5469, 0x546B, 0x546D, 0x546E, 0x5474, 0x547F /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_35[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548D, 0x5491, /* 0x20 */ + 0x5495, 0x5496, 0x549C, 0x549F, 0x54A1, 0x54A6, 0x54A7, 0x54A9, /* 0x20 */ + 0x54AA, 0x54AD, 0x54AE, 0x54B1, 0x54B7, 0x54B9, 0x54BA, 0x54BB, /* 0x30 */ + 0x54BF, 0x54C6, 0x54CA, 0x54CD, 0x54CE, 0x54E0, 0x54EA, 0x54EC, /* 0x30 */ + 0x54EF, 0x54F6, 0x54FC, 0x54FE, 0x54FF, 0x5500, 0x5501, 0x5505, /* 0x40 */ + 0x5508, 0x5509, 0x550C, 0x550D, 0x550E, 0x5515, 0x552A, 0x552B, /* 0x40 */ + 0x5532, 0x5535, 0x5536, 0x553B, 0x553C, 0x553D, 0x5541, 0x5547, /* 0x50 */ + 0x5549, 0x554A, 0x554D, 0x5550, 0x5551, 0x5558, 0x555A, 0x555B, /* 0x50 */ + 0x555E, 0x5560, 0x5561, 0x5564, 0x5566, 0x557F, 0x5581, 0x5582, /* 0x60 */ + 0x5586, 0x5588, 0x558E, 0x558F, 0x5591, 0x5592, 0x5593, 0x5594, /* 0x60 */ + 0x5597, 0x55A3, 0x55A4, 0x55AD, 0x55B2, 0x55BF, 0x55C1, 0x55C3, /* 0x70 */ + 0x55C6, 0x55C9, 0x55CB, 0x55CC, 0x55CE, 0x55D1, 0x55D2 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_36[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x55D3, 0x55D7, 0x55D8, 0x55DB, 0x55DE, 0x55E2, 0x55E9, /* 0x20 */ + 0x55F6, 0x55FF, 0x5605, 0x5608, 0x560A, 0x560D, 0x560E, 0x560F, /* 0x20 */ + 0x5610, 0x5611, 0x5612, 0x5619, 0x562C, 0x5630, 0x5633, 0x5635, /* 0x30 */ + 0x5637, 0x5639, 0x563B, 0x563C, 0x563D, 0x563F, 0x5640, 0x5641, /* 0x30 */ + 0x5643, 0x5644, 0x5646, 0x5649, 0x564B, 0x564D, 0x564F, 0x5654, /* 0x40 */ + 0x565E, 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566D, /* 0x40 */ + 0x566F, 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568B, /* 0x50 */ + 0x568C, 0x5695, 0x5699, 0x569A, 0x569D, 0x569E, 0x569F, 0x56A6, /* 0x50 */ + 0x56A7, 0x56A8, 0x56A9, 0x56AB, 0x56AC, 0x56AD, 0x56B1, 0x56B3, /* 0x60 */ + 0x56B7, 0x56BE, 0x56C5, 0x56C9, 0x56CA, 0x56CB, 0x56CF, 0x56D0, /* 0x60 */ + 0x56CC, 0x56CD, 0x56D9, 0x56DC, 0x56DD, 0x56DF, 0x56E1, 0x56E4, /* 0x70 */ + 0x56E5, 0x56E6, 0x56E7, 0x56E8, 0x56F1, 0x56EB, 0x56ED /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_37[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x56F6, 0x56F7, 0x5701, 0x5702, 0x5707, 0x570A, 0x570C, /* 0x20 */ + 0x5711, 0x5715, 0x571A, 0x571B, 0x571D, 0x5720, 0x5722, 0x5723, /* 0x20 */ + 0x5724, 0x5725, 0x5729, 0x572A, 0x572C, 0x572E, 0x572F, 0x5733, /* 0x30 */ + 0x5734, 0x573D, 0x573E, 0x573F, 0x5745, 0x5746, 0x574C, 0x574D, /* 0x30 */ + 0x5752, 0x5762, 0x5765, 0x5767, 0x5768, 0x576B, 0x576D, 0x576E, /* 0x40 */ + 0x576F, 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, /* 0x40 */ + 0x577A, 0x577B, 0x577C, 0x577E, 0x5781, 0x5783, 0x578C, 0x5794, /* 0x50 */ + 0x5797, 0x5799, 0x579A, 0x579C, 0x579D, 0x579E, 0x579F, 0x57A1, /* 0x50 */ + 0x5795, 0x57A7, 0x57A8, 0x57A9, 0x57AC, 0x57B8, 0x57BD, 0x57C7, /* 0x60 */ + 0x57C8, 0x57CC, 0x57CF, 0x57D5, 0x57DD, 0x57DE, 0x57E4, 0x57E6, /* 0x60 */ + 0x57E7, 0x57E9, 0x57ED, 0x57F0, 0x57F5, 0x57F6, 0x57F8, 0x57FD, /* 0x70 */ + 0x57FE, 0x57FF, 0x5803, 0x5804, 0x5808, 0x5809, 0x57E1 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_38[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x580C, 0x580D, 0x581B, 0x581E, 0x581F, 0x5820, 0x5826, /* 0x20 */ + 0x5827, 0x582D, 0x5832, 0x5839, 0x583F, 0x5849, 0x584C, 0x584D, /* 0x20 */ + 0x584F, 0x5850, 0x5855, 0x585F, 0x5861, 0x5864, 0x5867, 0x5868, /* 0x30 */ + 0x5878, 0x587C, 0x587F, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, /* 0x30 */ + 0x588A, 0x588C, 0x588D, 0x588F, 0x5890, 0x5894, 0x5896, 0x589D, /* 0x40 */ + 0x58A0, 0x58A1, 0x58A2, 0x58A6, 0x58A9, 0x58B1, 0x58B2, 0x58C4, /* 0x40 */ + 0x58BC, 0x58C2, 0x58C8, 0x58CD, 0x58CE, 0x58D0, 0x58D2, 0x58D4, /* 0x50 */ + 0x58D6, 0x58DA, 0x58DD, 0x58E1, 0x58E2, 0x58E9, 0x58F3, 0x5905, /* 0x50 */ + 0x5906, 0x590B, 0x590C, 0x5912, 0x5913, 0x5914, 0x8641, 0x591D, /* 0x60 */ + 0x5921, 0x5923, 0x5924, 0x5928, 0x592F, 0x5930, 0x5933, 0x5935, /* 0x60 */ + 0x5936, 0x593F, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595B, /* 0x70 */ + 0x595D, 0x595E, 0x595F, 0x5961, 0x5963, 0x596B, 0x596D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_39[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x596F, 0x5972, 0x5975, 0x5976, 0x5979, 0x597B, 0x597C, /* 0x20 */ + 0x598B, 0x598C, 0x598E, 0x5992, 0x5995, 0x5997, 0x599F, 0x59A4, /* 0x20 */ + 0x59A7, 0x59AD, 0x59AE, 0x59AF, 0x59B0, 0x59B3, 0x59B7, 0x59BA, /* 0x30 */ + 0x59BC, 0x59C1, 0x59C3, 0x59C4, 0x59C8, 0x59CA, 0x59CD, 0x59D2, /* 0x30 */ + 0x59DD, 0x59DE, 0x59DF, 0x59E3, 0x59E4, 0x59E7, 0x59EE, 0x59EF, /* 0x40 */ + 0x59F1, 0x59F2, 0x59F4, 0x59F7, 0x5A00, 0x5A04, 0x5A0C, 0x5A0D, /* 0x40 */ + 0x5A0E, 0x5A12, 0x5A13, 0x5A1E, 0x5A23, 0x5A24, 0x5A27, 0x5A28, /* 0x50 */ + 0x5A2A, 0x5A2D, 0x5A30, 0x5A44, 0x5A45, 0x5A47, 0x5A48, 0x5A4C, /* 0x50 */ + 0x5A50, 0x5A55, 0x5A5E, 0x5A63, 0x5A65, 0x5A67, 0x5A6D, 0x5A77, /* 0x60 */ + 0x5A7A, 0x5A7B, 0x5A7E, 0x5A8B, 0x5A90, 0x5A93, 0x5A96, 0x5A99, /* 0x60 */ + 0x5A9C, 0x5A9E, 0x5A9F, 0x5AA0, 0x5AA2, 0x5AA7, 0x5AAC, 0x5AB1, /* 0x70 */ + 0x5AB2, 0x5AB3, 0x5AB5, 0x5AB8, 0x5ABA, 0x5ABB, 0x5ABF /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_3A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5AC4, 0x5AC6, 0x5AC8, 0x5ACF, 0x5ADA, 0x5ADC, 0x5AE0, /* 0x20 */ + 0x5AE5, 0x5AEA, 0x5AEE, 0x5AF5, 0x5AF6, 0x5AFD, 0x5B00, 0x5B01, /* 0x20 */ + 0x5B08, 0x5B17, 0x5B34, 0x5B19, 0x5B1B, 0x5B1D, 0x5B21, 0x5B25, /* 0x30 */ + 0x5B2D, 0x5B38, 0x5B41, 0x5B4B, 0x5B4C, 0x5B52, 0x5B56, 0x5B5E, /* 0x30 */ + 0x5B68, 0x5B6E, 0x5B6F, 0x5B7C, 0x5B7D, 0x5B7E, 0x5B7F, 0x5B81, /* 0x40 */ + 0x5B84, 0x5B86, 0x5B8A, 0x5B8E, 0x5B90, 0x5B91, 0x5B93, 0x5B94, /* 0x40 */ + 0x5B96, 0x5BA8, 0x5BA9, 0x5BAC, 0x5BAD, 0x5BAF, 0x5BB1, 0x5BB2, /* 0x50 */ + 0x5BB7, 0x5BBA, 0x5BBC, 0x5BC0, 0x5BC1, 0x5BCD, 0x5BCF, 0x5BD6, /* 0x50 */ + 0x5BD7, 0x5BD8, 0x5BD9, 0x5BDA, 0x5BE0, 0x5BEF, 0x5BF1, 0x5BF4, /* 0x60 */ + 0x5BFD, 0x5C0C, 0x5C17, 0x5C1E, 0x5C1F, 0x5C23, 0x5C26, 0x5C29, /* 0x60 */ + 0x5C2B, 0x5C2C, 0x5C2E, 0x5C30, 0x5C32, 0x5C35, 0x5C36, 0x5C59, /* 0x70 */ + 0x5C5A, 0x5C5C, 0x5C62, 0x5C63, 0x5C67, 0x5C68, 0x5C69 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_3B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5C6D, 0x5C70, 0x5C74, 0x5C75, 0x5C7A, 0x5C7B, 0x5C7C, /* 0x20 */ + 0x5C7D, 0x5C87, 0x5C88, 0x5C8A, 0x5C8F, 0x5C92, 0x5C9D, 0x5C9F, /* 0x20 */ + 0x5CA0, 0x5CA2, 0x5CA3, 0x5CA6, 0x5CAA, 0x5CB2, 0x5CB4, 0x5CB5, /* 0x30 */ + 0x5CBA, 0x5CC9, 0x5CCB, 0x5CD2, 0x5CDD, 0x5CD7, 0x5CEE, 0x5CF1, /* 0x30 */ + 0x5CF2, 0x5CF4, 0x5D01, 0x5D06, 0x5D0D, 0x5D12, 0x5D2B, 0x5D23, /* 0x40 */ + 0x5D24, 0x5D26, 0x5D27, 0x5D31, 0x5D34, 0x5D39, 0x5D3D, 0x5D3F, /* 0x40 */ + 0x5D42, 0x5D43, 0x5D46, 0x5D48, 0x5D55, 0x5D51, 0x5D59, 0x5D4A, /* 0x50 */ + 0x5D5F, 0x5D60, 0x5D61, 0x5D62, 0x5D64, 0x5D6A, 0x5D6D, 0x5D70, /* 0x50 */ + 0x5D79, 0x5D7A, 0x5D7E, 0x5D7F, 0x5D81, 0x5D83, 0x5D88, 0x5D8A, /* 0x60 */ + 0x5D92, 0x5D93, 0x5D94, 0x5D95, 0x5D99, 0x5D9B, 0x5D9F, 0x5DA0, /* 0x60 */ + 0x5DA7, 0x5DAB, 0x5DB0, 0x5DB4, 0x5DB8, 0x5DB9, 0x5DC3, 0x5DC7, /* 0x70 */ + 0x5DCB, 0x5DD0, 0x5DCE, 0x5DD8, 0x5DD9, 0x5DE0, 0x5DE4 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_3C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5DE9, 0x5DF8, 0x5DF9, 0x5E00, 0x5E07, 0x5E0D, 0x5E12, /* 0x20 */ + 0x5E14, 0x5E15, 0x5E18, 0x5E1F, 0x5E20, 0x5E2E, 0x5E28, 0x5E32, /* 0x20 */ + 0x5E35, 0x5E3E, 0x5E4B, 0x5E50, 0x5E49, 0x5E51, 0x5E56, 0x5E58, /* 0x30 */ + 0x5E5B, 0x5E5C, 0x5E5E, 0x5E68, 0x5E6A, 0x5E6B, 0x5E6C, 0x5E6D, /* 0x30 */ + 0x5E6E, 0x5E70, 0x5E80, 0x5E8B, 0x5E8E, 0x5EA2, 0x5EA4, 0x5EA5, /* 0x40 */ + 0x5EA8, 0x5EAA, 0x5EAC, 0x5EB1, 0x5EB3, 0x5EBD, 0x5EBE, 0x5EBF, /* 0x40 */ + 0x5EC6, 0x5ECC, 0x5ECB, 0x5ECE, 0x5ED1, 0x5ED2, 0x5ED4, 0x5ED5, /* 0x50 */ + 0x5EDC, 0x5EDE, 0x5EE5, 0x5EEB, 0x5F02, 0x5F06, 0x5F07, 0x5F08, /* 0x50 */ + 0x5F0E, 0x5F19, 0x5F1C, 0x5F1D, 0x5F21, 0x5F22, 0x5F23, 0x5F24, /* 0x60 */ + 0x5F28, 0x5F2B, 0x5F2C, 0x5F2E, 0x5F30, 0x5F34, 0x5F36, 0x5F3B, /* 0x60 */ + 0x5F3D, 0x5F3F, 0x5F40, 0x5F44, 0x5F45, 0x5F47, 0x5F4D, 0x5F50, /* 0x70 */ + 0x5F54, 0x5F58, 0x5F5B, 0x5F60, 0x5F63, 0x5F64, 0x5F67 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_3D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F6F, 0x5F72, 0x5F74, 0x5F75, 0x5F78, 0x5F7A, 0x5F7D, /* 0x20 */ + 0x5F7E, 0x5F89, 0x5F8D, 0x5F8F, 0x5F96, 0x5F9C, 0x5F9D, 0x5FA2, /* 0x20 */ + 0x5FA7, 0x5FAB, 0x5FA4, 0x5FAC, 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB8, /* 0x30 */ + 0x5FC4, 0x5FC7, 0x5FC8, 0x5FC9, 0x5FCB, 0x5FD0, 0x5FD1, 0x5FD2, /* 0x30 */ + 0x5FD3, 0x5FD4, 0x5FDE, 0x5FE1, 0x5FE2, 0x5FE8, 0x5FE9, 0x5FEA, /* 0x40 */ + 0x5FEC, 0x5FED, 0x5FEE, 0x5FEF, 0x5FF2, 0x5FF3, 0x5FF6, 0x5FFA, /* 0x40 */ + 0x5FFC, 0x6007, 0x600A, 0x600D, 0x6013, 0x6014, 0x6017, 0x6018, /* 0x50 */ + 0x601A, 0x601F, 0x6024, 0x602D, 0x6033, 0x6035, 0x6040, 0x6047, /* 0x50 */ + 0x6048, 0x6049, 0x604C, 0x6051, 0x6054, 0x6056, 0x6057, 0x605D, /* 0x60 */ + 0x6061, 0x6067, 0x6071, 0x607E, 0x607F, 0x6082, 0x6086, 0x6088, /* 0x60 */ + 0x608A, 0x608E, 0x6091, 0x6093, 0x6095, 0x6098, 0x609D, 0x609E, /* 0x70 */ + 0x60A2, 0x60A4, 0x60A5, 0x60A8, 0x60B0, 0x60B1, 0x60B7 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_3E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x60BB, 0x60BE, 0x60C2, 0x60C4, 0x60C8, 0x60C9, 0x60CA, /* 0x20 */ + 0x60CB, 0x60CE, 0x60CF, 0x60D4, 0x60D5, 0x60D9, 0x60DB, 0x60DD, /* 0x20 */ + 0x60DE, 0x60E2, 0x60E5, 0x60F2, 0x60F5, 0x60F8, 0x60FC, 0x60FD, /* 0x30 */ + 0x6102, 0x6107, 0x610A, 0x610C, 0x6110, 0x6111, 0x6112, 0x6113, /* 0x30 */ + 0x6114, 0x6116, 0x6117, 0x6119, 0x611C, 0x611E, 0x6122, 0x612A, /* 0x40 */ + 0x612B, 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, /* 0x40 */ + 0x6145, 0x6146, 0x6149, 0x615E, 0x6160, 0x616C, 0x6172, 0x6178, /* 0x50 */ + 0x617B, 0x617C, 0x617F, 0x6180, 0x6181, 0x6183, 0x6184, 0x618B, /* 0x50 */ + 0x618D, 0x6192, 0x6193, 0x6197, 0x6198, 0x619C, 0x619D, 0x619F, /* 0x60 */ + 0x61A0, 0x61A5, 0x61A8, 0x61AA, 0x61AD, 0x61B8, 0x61B9, 0x61BC, /* 0x60 */ + 0x61C0, 0x61C1, 0x61C2, 0x61CE, 0x61CF, 0x61D5, 0x61DC, 0x61DD, /* 0x70 */ + 0x61DE, 0x61DF, 0x61E1, 0x61E2, 0x61E7, 0x61E9, 0x61E5 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_3F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x61EC, 0x61ED, 0x61EF, 0x6201, 0x6203, 0x6204, 0x6207, /* 0x20 */ + 0x6213, 0x6215, 0x621C, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, /* 0x20 */ + 0x622B, 0x6239, 0x623D, 0x6242, 0x6243, 0x6244, 0x6246, 0x624C, /* 0x30 */ + 0x6250, 0x6251, 0x6252, 0x6254, 0x6256, 0x625A, 0x625C, 0x6264, /* 0x30 */ + 0x626D, 0x626F, 0x6273, 0x627A, 0x627D, 0x628D, 0x628E, 0x628F, /* 0x40 */ + 0x6290, 0x62A6, 0x62A8, 0x62B3, 0x62B6, 0x62B7, 0x62BA, 0x62BE, /* 0x40 */ + 0x62BF, 0x62C4, 0x62CE, 0x62D5, 0x62D6, 0x62DA, 0x62EA, 0x62F2, /* 0x50 */ + 0x62F4, 0x62FC, 0x62FD, 0x6303, 0x6304, 0x630A, 0x630B, 0x630D, /* 0x50 */ + 0x6310, 0x6313, 0x6316, 0x6318, 0x6329, 0x632A, 0x632D, 0x6335, /* 0x60 */ + 0x6336, 0x6339, 0x633C, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, /* 0x60 */ + 0x634A, 0x634B, 0x634E, 0x6352, 0x6353, 0x6354, 0x6358, 0x635B, /* 0x70 */ + 0x6365, 0x6366, 0x636C, 0x636D, 0x6371, 0x6374, 0x6375 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_40[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6378, 0x637C, 0x637D, 0x637F, 0x6382, 0x6384, 0x6387, /* 0x20 */ + 0x638A, 0x6390, 0x6394, 0x6395, 0x6399, 0x639A, 0x639E, 0x63A4, /* 0x20 */ + 0x63A6, 0x63AD, 0x63AE, 0x63AF, 0x63BD, 0x63C1, 0x63C5, 0x63C8, /* 0x30 */ + 0x63CE, 0x63D1, 0x63D3, 0x63D4, 0x63D5, 0x63DC, 0x63E0, 0x63E5, /* 0x30 */ + 0x63EA, 0x63EC, 0x63F2, 0x63F3, 0x63F5, 0x63F8, 0x63F9, 0x6409, /* 0x40 */ + 0x640A, 0x6410, 0x6412, 0x6414, 0x6418, 0x641E, 0x6420, 0x6422, /* 0x40 */ + 0x6424, 0x6425, 0x6429, 0x642A, 0x642F, 0x6430, 0x6435, 0x643D, /* 0x50 */ + 0x643F, 0x644B, 0x644F, 0x6451, 0x6452, 0x6453, 0x6454, 0x645A, /* 0x50 */ + 0x645B, 0x645C, 0x645D, 0x645F, 0x6460, 0x6461, 0x6463, 0x646D, /* 0x60 */ + 0x6473, 0x6474, 0x647B, 0x647D, 0x6485, 0x6487, 0x648F, 0x6490, /* 0x60 */ + 0x6491, 0x6498, 0x6499, 0x649B, 0x649D, 0x649F, 0x64A1, 0x64A3, /* 0x70 */ + 0x64A6, 0x64A8, 0x64AC, 0x64B3, 0x64BD, 0x64BE, 0x64BF /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_41[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x64C4, 0x64C9, 0x64CA, 0x64CB, 0x64CC, 0x64CE, 0x64D0, /* 0x20 */ + 0x64D1, 0x64D5, 0x64D7, 0x64E4, 0x64E5, 0x64E9, 0x64EA, 0x64ED, /* 0x20 */ + 0x64F0, 0x64F5, 0x64F7, 0x64FB, 0x64FF, 0x6501, 0x6504, 0x6508, /* 0x30 */ + 0x6509, 0x650A, 0x650F, 0x6513, 0x6514, 0x6516, 0x6519, 0x651B, /* 0x30 */ + 0x651E, 0x651F, 0x6522, 0x6526, 0x6529, 0x652E, 0x6531, 0x653A, /* 0x40 */ + 0x653C, 0x653D, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, /* 0x40 */ + 0x655F, 0x6560, 0x6567, 0x656B, 0x657A, 0x657D, 0x6581, 0x6585, /* 0x50 */ + 0x658A, 0x6592, 0x6595, 0x6598, 0x659D, 0x65A0, 0x65A3, 0x65A6, /* 0x50 */ + 0x65AE, 0x65B2, 0x65B3, 0x65B4, 0x65BF, 0x65C2, 0x65C8, 0x65C9, /* 0x60 */ + 0x65CE, 0x65D0, 0x65D4, 0x65D6, 0x65D8, 0x65DF, 0x65F0, 0x65F2, /* 0x60 */ + 0x65F4, 0x65F5, 0x65F9, 0x65FE, 0x65FF, 0x6600, 0x6604, 0x6608, /* 0x70 */ + 0x6609, 0x660D, 0x6611, 0x6612, 0x6615, 0x6616, 0x661D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_42[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x661E, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, /* 0x20 */ + 0x662A, 0x662B, 0x662C, 0x662E, 0x6630, 0x6631, 0x6633, 0x6639, /* 0x20 */ + 0x6637, 0x6640, 0x6645, 0x6646, 0x664A, 0x664C, 0x6651, 0x664E, /* 0x30 */ + 0x6657, 0x6658, 0x6659, 0x665B, 0x665C, 0x6660, 0x6661, 0x66FB, /* 0x30 */ + 0x666A, 0x666B, 0x666C, 0x667E, 0x6673, 0x6675, 0x667F, 0x6677, /* 0x40 */ + 0x6678, 0x6679, 0x667B, 0x6680, 0x667C, 0x668B, 0x668C, 0x668D, /* 0x40 */ + 0x6690, 0x6692, 0x6699, 0x669A, 0x669B, 0x669C, 0x669F, 0x66A0, /* 0x50 */ + 0x66A4, 0x66AD, 0x66B1, 0x66B2, 0x66B5, 0x66BB, 0x66BF, 0x66C0, /* 0x50 */ + 0x66C2, 0x66C3, 0x66C8, 0x66CC, 0x66CE, 0x66CF, 0x66D4, 0x66DB, /* 0x60 */ + 0x66DF, 0x66E8, 0x66EB, 0x66EC, 0x66EE, 0x66FA, 0x6705, 0x6707, /* 0x60 */ + 0x670E, 0x6713, 0x6719, 0x671C, 0x6720, 0x6722, 0x6733, 0x673E, /* 0x70 */ + 0x6745, 0x6747, 0x6748, 0x674C, 0x6754, 0x6755, 0x675D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_43[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6766, 0x676C, 0x676E, 0x6774, 0x6776, 0x677B, 0x6781, /* 0x20 */ + 0x6784, 0x678E, 0x678F, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, /* 0x20 */ + 0x679B, 0x67B0, 0x67B1, 0x67B2, 0x67B5, 0x67BB, 0x67BC, 0x67BD, /* 0x30 */ + 0x67F9, 0x67C0, 0x67C2, 0x67C3, 0x67C5, 0x67C8, 0x67C9, 0x67D2, /* 0x30 */ + 0x67D7, 0x67D9, 0x67DC, 0x67E1, 0x67E6, 0x67F0, 0x67F2, 0x67F6, /* 0x40 */ + 0x67F7, 0x6852, 0x6814, 0x6819, 0x681D, 0x681F, 0x6828, 0x6827, /* 0x40 */ + 0x682C, 0x682D, 0x682F, 0x6830, 0x6831, 0x6833, 0x683B, 0x683F, /* 0x50 */ + 0x6844, 0x6845, 0x684A, 0x684C, 0x6855, 0x6857, 0x6858, 0x685B, /* 0x50 */ + 0x686B, 0x686E, 0x686F, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, /* 0x60 */ + 0x687A, 0x687B, 0x687C, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, /* 0x60 */ + 0x6898, 0x689A, 0x689C, 0x68A1, 0x68A3, 0x68A5, 0x68A9, 0x68AA, /* 0x70 */ + 0x68AE, 0x68B2, 0x68BB, 0x68C5, 0x68C8, 0x68CC, 0x68CF /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_44[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x68D0, 0x68D1, 0x68D3, 0x68D6, 0x68D9, 0x68DC, 0x68DD, /* 0x20 */ + 0x68E5, 0x68E8, 0x68EA, 0x68EB, 0x68EC, 0x68ED, 0x68F0, 0x68F1, /* 0x20 */ + 0x68F5, 0x68F6, 0x68FB, 0x68FC, 0x68FD, 0x6906, 0x6909, 0x690A, /* 0x30 */ + 0x6910, 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, /* 0x30 */ + 0x6938, 0x693B, 0x6942, 0x6945, 0x6949, 0x694E, 0x6957, 0x695B, /* 0x40 */ + 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696C, 0x6970, /* 0x40 */ + 0x6971, 0x6972, 0x697A, 0x697B, 0x697F, 0x6980, 0x698D, 0x6992, /* 0x50 */ + 0x6996, 0x6998, 0x69A1, 0x69A5, 0x69A6, 0x69A8, 0x69AB, 0x69AD, /* 0x50 */ + 0x69AF, 0x69B7, 0x69B8, 0x69BA, 0x69BC, 0x69C5, 0x69C8, 0x69D1, /* 0x60 */ + 0x69D6, 0x69D7, 0x69E2, 0x69E5, 0x69EE, 0x69EF, 0x69F1, 0x69F3, /* 0x60 */ + 0x69F5, 0x69FE, 0x6A00, 0x6A01, 0x6A03, 0x6A0F, 0x6A11, 0x6A15, /* 0x70 */ + 0x6A1A, 0x6A1D, 0x6A20, 0x6A24, 0x6A28, 0x6A30, 0x6A32 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_45[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A34, 0x6A37, 0x6A3B, 0x6A3E, 0x6A3F, 0x6A45, 0x6A46, /* 0x20 */ + 0x6A49, 0x6A4A, 0x6A4E, 0x6A50, 0x6A51, 0x6A52, 0x6A55, 0x6A56, /* 0x20 */ + 0x6A5B, 0x6A64, 0x6A67, 0x6A6A, 0x6A71, 0x6A73, 0x6A7E, 0x6A81, /* 0x30 */ + 0x6A83, 0x6A86, 0x6A87, 0x6A89, 0x6A8B, 0x6A91, 0x6A9B, 0x6A9D, /* 0x30 */ + 0x6A9E, 0x6A9F, 0x6AA5, 0x6AAB, 0x6AAF, 0x6AB0, 0x6AB1, 0x6AB4, /* 0x40 */ + 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC6, 0x6AC9, 0x6AC8, 0x6ACC, 0x6AD0, /* 0x40 */ + 0x6AD4, 0x6AD5, 0x6AD6, 0x6ADC, 0x6ADD, 0x6AE4, 0x6AE7, 0x6AEC, /* 0x50 */ + 0x6AF0, 0x6AF1, 0x6AF2, 0x6AFC, 0x6AFD, 0x6B02, 0x6B03, 0x6B06, /* 0x50 */ + 0x6B07, 0x6B09, 0x6B0F, 0x6B10, 0x6B11, 0x6B17, 0x6B1B, 0x6B1E, /* 0x60 */ + 0x6B24, 0x6B28, 0x6B2B, 0x6B2C, 0x6B2F, 0x6B35, 0x6B36, 0x6B3B, /* 0x60 */ + 0x6B3F, 0x6B46, 0x6B4A, 0x6B4D, 0x6B52, 0x6B56, 0x6B58, 0x6B5D, /* 0x70 */ + 0x6B60, 0x6B67, 0x6B6B, 0x6B6E, 0x6B70, 0x6B75, 0x6B7D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_46[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B7E, 0x6B82, 0x6B85, 0x6B97, 0x6B9B, 0x6B9F, 0x6BA0, /* 0x20 */ + 0x6BA2, 0x6BA3, 0x6BA8, 0x6BA9, 0x6BAC, 0x6BAD, 0x6BAE, 0x6BB0, /* 0x20 */ + 0x6BB8, 0x6BB9, 0x6BBD, 0x6BBE, 0x6BC3, 0x6BC4, 0x6BC9, 0x6BCC, /* 0x30 */ + 0x6BD6, 0x6BDA, 0x6BE1, 0x6BE3, 0x6BE6, 0x6BE7, 0x6BEE, 0x6BF1, /* 0x30 */ + 0x6BF7, 0x6BF9, 0x6BFF, 0x6C02, 0x6C04, 0x6C05, 0x6C09, 0x6C0D, /* 0x40 */ + 0x6C0E, 0x6C10, 0x6C12, 0x6C19, 0x6C1F, 0x6C26, 0x6C27, 0x6C28, /* 0x40 */ + 0x6C2C, 0x6C2E, 0x6C33, 0x6C35, 0x6C36, 0x6C3A, 0x6C3B, 0x6C3F, /* 0x50 */ + 0x6C4A, 0x6C4B, 0x6C4D, 0x6C4F, 0x6C52, 0x6C54, 0x6C59, 0x6C5B, /* 0x50 */ + 0x6C5C, 0x6C6B, 0x6C6D, 0x6C6F, 0x6C74, 0x6C76, 0x6C78, 0x6C79, /* 0x60 */ + 0x6C7B, 0x6C85, 0x6C86, 0x6C87, 0x6C89, 0x6C94, 0x6C95, 0x6C97, /* 0x60 */ + 0x6C98, 0x6C9C, 0x6C9F, 0x6CB0, 0x6CB2, 0x6CB4, 0x6CC2, 0x6CC6, /* 0x70 */ + 0x6CCD, 0x6CCF, 0x6CD0, 0x6CD1, 0x6CD2, 0x6CD4, 0x6CD6 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_47[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6CDA, 0x6CDC, 0x6CE0, 0x6CE7, 0x6CE9, 0x6CEB, 0x6CEC, /* 0x20 */ + 0x6CEE, 0x6CF2, 0x6CF4, 0x6D04, 0x6D07, 0x6D0A, 0x6D0E, 0x6D0F, /* 0x20 */ + 0x6D11, 0x6D13, 0x6D1A, 0x6D26, 0x6D27, 0x6D28, 0x6C67, 0x6D2E, /* 0x30 */ + 0x6D2F, 0x6D31, 0x6D39, 0x6D3C, 0x6D3F, 0x6D57, 0x6D5E, 0x6D5F, /* 0x30 */ + 0x6D61, 0x6D65, 0x6D67, 0x6D6F, 0x6D70, 0x6D7C, 0x6D82, 0x6D87, /* 0x40 */ + 0x6D91, 0x6D92, 0x6D94, 0x6D96, 0x6D97, 0x6D98, 0x6DAA, 0x6DAC, /* 0x40 */ + 0x6DB4, 0x6DB7, 0x6DB9, 0x6DBD, 0x6DBF, 0x6DC4, 0x6DC8, 0x6DCA, /* 0x50 */ + 0x6DCE, 0x6DCF, 0x6DD6, 0x6DDB, 0x6DDD, 0x6DDF, 0x6DE0, 0x6DE2, /* 0x50 */ + 0x6DE5, 0x6DE9, 0x6DEF, 0x6DF0, 0x6DF4, 0x6DF6, 0x6DFC, 0x6E00, /* 0x60 */ + 0x6E04, 0x6E1E, 0x6E22, 0x6E27, 0x6E32, 0x6E36, 0x6E39, 0x6E3B, /* 0x60 */ + 0x6E3C, 0x6E44, 0x6E45, 0x6E48, 0x6E49, 0x6E4B, 0x6E4F, 0x6E51, /* 0x70 */ + 0x6E52, 0x6E53, 0x6E54, 0x6E57, 0x6E5C, 0x6E5D, 0x6E5E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_48[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6E62, 0x6E63, 0x6E68, 0x6E73, 0x6E7B, 0x6E7D, 0x6E8D, /* 0x20 */ + 0x6E93, 0x6E99, 0x6EA0, 0x6EA7, 0x6EAD, 0x6EAE, 0x6EB1, 0x6EB3, /* 0x20 */ + 0x6EBB, 0x6EBF, 0x6EC0, 0x6EC1, 0x6EC3, 0x6EC7, 0x6EC8, 0x6ECA, /* 0x30 */ + 0x6ECD, 0x6ECE, 0x6ECF, 0x6EEB, 0x6EED, 0x6EEE, 0x6EF9, 0x6EFB, /* 0x30 */ + 0x6EFD, 0x6F04, 0x6F08, 0x6F0A, 0x6F0C, 0x6F0D, 0x6F16, 0x6F18, /* 0x40 */ + 0x6F1A, 0x6F1B, 0x6F26, 0x6F29, 0x6F2A, 0x6F2F, 0x6F30, 0x6F33, /* 0x40 */ + 0x6F36, 0x6F3B, 0x6F3C, 0x6F2D, 0x6F4F, 0x6F51, 0x6F52, 0x6F53, /* 0x50 */ + 0x6F57, 0x6F59, 0x6F5A, 0x6F5D, 0x6F5E, 0x6F61, 0x6F62, 0x6F68, /* 0x50 */ + 0x6F6C, 0x6F7D, 0x6F7E, 0x6F83, 0x6F87, 0x6F88, 0x6F8B, 0x6F8C, /* 0x60 */ + 0x6F8D, 0x6F90, 0x6F92, 0x6F93, 0x6F94, 0x6F96, 0x6F9A, 0x6F9F, /* 0x60 */ + 0x6FA0, 0x6FA5, 0x6FA6, 0x6FA7, 0x6FA8, 0x6FAE, 0x6FAF, 0x6FB0, /* 0x70 */ + 0x6FB5, 0x6FB6, 0x6FBC, 0x6FC5, 0x6FC7, 0x6FC8, 0x6FCA /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_49[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6FDA, 0x6FDE, 0x6FE8, 0x6FE9, 0x6FF0, 0x6FF5, 0x6FF9, /* 0x20 */ + 0x6FFC, 0x6FFD, 0x7000, 0x7005, 0x7006, 0x7007, 0x700D, 0x7017, /* 0x20 */ + 0x7020, 0x7023, 0x702F, 0x7034, 0x7037, 0x7039, 0x703C, 0x7043, /* 0x30 */ + 0x7044, 0x7048, 0x7049, 0x704A, 0x704B, 0x7054, 0x7055, 0x705D, /* 0x30 */ + 0x705E, 0x704E, 0x7064, 0x7065, 0x706C, 0x706E, 0x7075, 0x7076, /* 0x40 */ + 0x707E, 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, /* 0x40 */ + 0x7098, 0x709B, 0x70A4, 0x70AB, 0x70B0, 0x70B1, 0x70B4, 0x70B7, /* 0x50 */ + 0x70CA, 0x70D1, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D8, 0x70DC, /* 0x50 */ + 0x70E4, 0x70FA, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710B, /* 0x60 */ + 0x710C, 0x710F, 0x711E, 0x7120, 0x712B, 0x712D, 0x712F, 0x7130, /* 0x60 */ + 0x7131, 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714A, 0x714B, /* 0x70 */ + 0x7150, 0x7152, 0x7157, 0x715A, 0x715C, 0x715E, 0x7160 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_4A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718C, 0x7192, /* 0x20 */ + 0x719A, 0x719B, 0x71A0, 0x71A2, 0x71AF, 0x71B0, 0x71B2, 0x71B3, /* 0x20 */ + 0x71BA, 0x71BF, 0x71C0, 0x71C1, 0x71C4, 0x71CB, 0x71CC, 0x71D3, /* 0x30 */ + 0x71D6, 0x71D9, 0x71DA, 0x71DC, 0x71F8, 0x71FE, 0x7200, 0x7207, /* 0x30 */ + 0x7208, 0x7209, 0x7213, 0x7217, 0x721A, 0x721D, 0x721F, 0x7224, /* 0x40 */ + 0x722B, 0x722F, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, /* 0x40 */ + 0x7245, 0x724E, 0x724F, 0x7250, 0x7253, 0x7255, 0x7256, 0x725A, /* 0x50 */ + 0x725C, 0x725E, 0x7260, 0x7263, 0x7268, 0x726B, 0x726E, 0x726F, /* 0x50 */ + 0x7271, 0x7277, 0x7278, 0x727B, 0x727C, 0x727F, 0x7284, 0x7289, /* 0x60 */ + 0x728D, 0x728E, 0x7293, 0x729B, 0x72A8, 0x72AD, 0x72AE, 0x72B1, /* 0x60 */ + 0x72B4, 0x72BE, 0x72C1, 0x72C7, 0x72C9, 0x72CC, 0x72D5, 0x72D6, /* 0x70 */ + 0x72D8, 0x72DF, 0x72E5, 0x72F3, 0x72F4, 0x72FA, 0x72FB /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_4B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x72FE, 0x7302, 0x7304, 0x7305, 0x7307, 0x730B, 0x730D, /* 0x20 */ + 0x7312, 0x7313, 0x7318, 0x7319, 0x731E, 0x7322, 0x7324, 0x7327, /* 0x20 */ + 0x7328, 0x732C, 0x7331, 0x7332, 0x7335, 0x733A, 0x733B, 0x733D, /* 0x30 */ + 0x7343, 0x734D, 0x7350, 0x7352, 0x7356, 0x7358, 0x735D, 0x735E, /* 0x30 */ + 0x735F, 0x7360, 0x7366, 0x7367, 0x7369, 0x736B, 0x736C, 0x736E, /* 0x40 */ + 0x736F, 0x7371, 0x7377, 0x7379, 0x737C, 0x7380, 0x7381, 0x7383, /* 0x40 */ + 0x7385, 0x7386, 0x738E, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, /* 0x50 */ + 0x739C, 0x739E, 0x739F, 0x73A0, 0x73A2, 0x73A5, 0x73A6, 0x73AA, /* 0x50 */ + 0x73AB, 0x73AD, 0x73B5, 0x73B7, 0x73B9, 0x73BC, 0x73BD, 0x73BF, /* 0x60 */ + 0x73C5, 0x73C6, 0x73C9, 0x73CB, 0x73CC, 0x73CF, 0x73D2, 0x73D3, /* 0x60 */ + 0x73D6, 0x73D9, 0x73DD, 0x73E1, 0x73E3, 0x73E6, 0x73E7, 0x73E9, /* 0x70 */ + 0x73F4, 0x73F5, 0x73F7, 0x73F9, 0x73FA, 0x73FB, 0x73FD /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_4C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x73FF, 0x7400, 0x7401, 0x7404, 0x7407, 0x740A, 0x7411, /* 0x20 */ + 0x741A, 0x741B, 0x7424, 0x7426, 0x7428, 0x7429, 0x742A, 0x742B, /* 0x20 */ + 0x742C, 0x742D, 0x742E, 0x742F, 0x7430, 0x7431, 0x7439, 0x7440, /* 0x30 */ + 0x7443, 0x7444, 0x7446, 0x7447, 0x744B, 0x744D, 0x7451, 0x7452, /* 0x30 */ + 0x7457, 0x745D, 0x7462, 0x7466, 0x7467, 0x7468, 0x746B, 0x746D, /* 0x40 */ + 0x746E, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, /* 0x40 */ + 0x7489, 0x748F, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749A, /* 0x50 */ + 0x749C, 0x749F, 0x74A0, 0x74A1, 0x74A3, 0x74A6, 0x74A8, 0x74A9, /* 0x50 */ + 0x74AA, 0x74AB, 0x74AE, 0x74AF, 0x74B1, 0x74B2, 0x74B5, 0x74B9, /* 0x60 */ + 0x74BB, 0x74BF, 0x74C8, 0x74C9, 0x74CC, 0x74D0, 0x74D3, 0x74D8, /* 0x60 */ + 0x74DA, 0x74DB, 0x74DE, 0x74DF, 0x74E4, 0x74E8, 0x74EA, 0x74EB, /* 0x70 */ + 0x74EF, 0x74F4, 0x74FA, 0x74FB, 0x74FC, 0x74FF, 0x7506 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_4D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, /* 0x20 */ + 0x7529, 0x752A, 0x752F, 0x7536, 0x7539, 0x753D, 0x753E, 0x753F, /* 0x20 */ + 0x7540, 0x7543, 0x7547, 0x7548, 0x754E, 0x7550, 0x7552, 0x7557, /* 0x30 */ + 0x755E, 0x755F, 0x7561, 0x756F, 0x7571, 0x7579, 0x757A, 0x757B, /* 0x30 */ + 0x757C, 0x757D, 0x757E, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, /* 0x40 */ + 0x7595, 0x7599, 0x759C, 0x75A2, 0x75A4, 0x75B4, 0x75BA, 0x75BF, /* 0x40 */ + 0x75C0, 0x75C1, 0x75C4, 0x75C6, 0x75CC, 0x75CE, 0x75CF, 0x75D7, /* 0x50 */ + 0x75DC, 0x75DF, 0x75E0, 0x75E1, 0x75E4, 0x75E7, 0x75EC, 0x75EE, /* 0x50 */ + 0x75EF, 0x75F1, 0x75F9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, /* 0x60 */ + 0x7608, 0x760A, 0x760C, 0x760F, 0x7612, 0x7613, 0x7615, 0x7616, /* 0x60 */ + 0x7619, 0x761B, 0x761C, 0x761D, 0x761E, 0x7623, 0x7625, 0x7626, /* 0x70 */ + 0x7629, 0x762D, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x763A, 0x763C, 0x764A, 0x7640, 0x7641, 0x7643, 0x7644, /* 0x20 */ + 0x7645, 0x7649, 0x764B, 0x7655, 0x7659, 0x765F, 0x7664, 0x7665, /* 0x20 */ + 0x766D, 0x766E, 0x766F, 0x7671, 0x7674, 0x7681, 0x7685, 0x768C, /* 0x30 */ + 0x768D, 0x7695, 0x769B, 0x769C, 0x769D, 0x769F, 0x76A0, 0x76A2, /* 0x30 */ + 0x76A3, 0x76A4, 0x76A5, 0x76A6, 0x76A7, 0x76A8, 0x76AA, 0x76AD, /* 0x40 */ + 0x76BD, 0x76C1, 0x76C5, 0x76C9, 0x76CB, 0x76CC, 0x76CE, 0x76D4, /* 0x40 */ + 0x76D9, 0x76E0, 0x76E6, 0x76E8, 0x76EC, 0x76F0, 0x76F1, 0x76F6, /* 0x50 */ + 0x76F9, 0x76FC, 0x7700, 0x7706, 0x770A, 0x770E, 0x7712, 0x7714, /* 0x50 */ + 0x7715, 0x7717, 0x7719, 0x771A, 0x771C, 0x7722, 0x7728, 0x772D, /* 0x60 */ + 0x772E, 0x772F, 0x7734, 0x7735, 0x7736, 0x7739, 0x773D, 0x773E, /* 0x60 */ + 0x7742, 0x7745, 0x7746, 0x774A, 0x774D, 0x774E, 0x774F, 0x7752, /* 0x70 */ + 0x7756, 0x7757, 0x775C, 0x775E, 0x775F, 0x7760, 0x7762 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7764, 0x7767, 0x776A, 0x776C, 0x7770, 0x7772, 0x7773, /* 0x20 */ + 0x7774, 0x777A, 0x777D, 0x7780, 0x7784, 0x778C, 0x778D, 0x7794, /* 0x20 */ + 0x7795, 0x7796, 0x779A, 0x779F, 0x77A2, 0x77A7, 0x77AA, 0x77AE, /* 0x30 */ + 0x77AF, 0x77B1, 0x77B5, 0x77BE, 0x77C3, 0x77C9, 0x77D1, 0x77D2, /* 0x30 */ + 0x77D5, 0x77D9, 0x77DE, 0x77DF, 0x77E0, 0x77E4, 0x77E6, 0x77EA, /* 0x40 */ + 0x77EC, 0x77F0, 0x77F1, 0x77F4, 0x77F8, 0x77FB, 0x7805, 0x7806, /* 0x40 */ + 0x7809, 0x780D, 0x780E, 0x7811, 0x781D, 0x7821, 0x7822, 0x7823, /* 0x50 */ + 0x782D, 0x782E, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, /* 0x50 */ + 0x7848, 0x784C, 0x784E, 0x7852, 0x785C, 0x785E, 0x7860, 0x7861, /* 0x60 */ + 0x7863, 0x7864, 0x7868, 0x786A, 0x786E, 0x787A, 0x787E, 0x788A, /* 0x60 */ + 0x788F, 0x7894, 0x7898, 0x78A1, 0x789D, 0x789E, 0x789F, 0x78A4, /* 0x70 */ + 0x78A8, 0x78AC, 0x78AD, 0x78B0, 0x78B1, 0x78B2, 0x78B3 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x78BB, 0x78BD, 0x78BF, 0x78C7, 0x78C8, 0x78C9, 0x78CC, /* 0x20 */ + 0x78CE, 0x78D2, 0x78D3, 0x78D5, 0x78D6, 0x78E4, 0x78DB, 0x78DF, /* 0x20 */ + 0x78E0, 0x78E1, 0x78E6, 0x78EA, 0x78F2, 0x78F3, 0x7900, 0x78F6, /* 0x30 */ + 0x78F7, 0x78FA, 0x78FB, 0x78FF, 0x7906, 0x790C, 0x7910, 0x791A, /* 0x30 */ + 0x791C, 0x791E, 0x791F, 0x7920, 0x7925, 0x7927, 0x7929, 0x792D, /* 0x40 */ + 0x7931, 0x7934, 0x7935, 0x793B, 0x793D, 0x793F, 0x7944, 0x7945, /* 0x40 */ + 0x7946, 0x794A, 0x794B, 0x794F, 0x7951, 0x7954, 0x7958, 0x795B, /* 0x50 */ + 0x795C, 0x7967, 0x7969, 0x796B, 0x7972, 0x7979, 0x797B, 0x797C, /* 0x50 */ + 0x797E, 0x798B, 0x798C, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, /* 0x60 */ + 0x7998, 0x799B, 0x799C, 0x79A1, 0x79A8, 0x79A9, 0x79AB, 0x79AF, /* 0x60 */ + 0x79B1, 0x79B4, 0x79B8, 0x79BB, 0x79C2, 0x79C4, 0x79C7, 0x79C8, /* 0x70 */ + 0x79CA, 0x79CF, 0x79D4, 0x79D6, 0x79DA, 0x79DD, 0x79DE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x79E0, 0x79E2, 0x79E5, 0x79EA, 0x79EB, 0x79ED, 0x79F1, /* 0x20 */ + 0x79F8, 0x79FC, 0x7A02, 0x7A03, 0x7A07, 0x7A09, 0x7A0A, 0x7A0C, /* 0x20 */ + 0x7A11, 0x7A15, 0x7A1B, 0x7A1E, 0x7A21, 0x7A27, 0x7A2B, 0x7A2D, /* 0x30 */ + 0x7A2F, 0x7A30, 0x7A34, 0x7A35, 0x7A38, 0x7A39, 0x7A3A, 0x7A44, /* 0x30 */ + 0x7A45, 0x7A47, 0x7A48, 0x7A4C, 0x7A55, 0x7A56, 0x7A59, 0x7A5C, /* 0x40 */ + 0x7A5D, 0x7A5F, 0x7A60, 0x7A65, 0x7A67, 0x7A6A, 0x7A6D, 0x7A75, /* 0x40 */ + 0x7A78, 0x7A7E, 0x7A80, 0x7A82, 0x7A85, 0x7A86, 0x7A8A, 0x7A8B, /* 0x50 */ + 0x7A90, 0x7A91, 0x7A94, 0x7A9E, 0x7AA0, 0x7AA3, 0x7AAC, 0x7AB3, /* 0x50 */ + 0x7AB5, 0x7AB9, 0x7ABB, 0x7ABC, 0x7AC6, 0x7AC9, 0x7ACC, 0x7ACE, /* 0x60 */ + 0x7AD1, 0x7ADB, 0x7AE8, 0x7AE9, 0x7AEB, 0x7AEC, 0x7AF1, 0x7AF4, /* 0x60 */ + 0x7AFB, 0x7AFD, 0x7AFE, 0x7B07, 0x7B14, 0x7B1F, 0x7B23, 0x7B27, /* 0x70 */ + 0x7B29, 0x7B2A, 0x7B2B, 0x7B2D, 0x7B2E, 0x7B2F, 0x7B30 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7B31, 0x7B34, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41, 0x7B47, /* 0x20 */ + 0x7B4E, 0x7B55, 0x7B60, 0x7B64, 0x7B66, 0x7B69, 0x7B6A, 0x7B6D, /* 0x20 */ + 0x7B6F, 0x7B72, 0x7B73, 0x7B77, 0x7B84, 0x7B89, 0x7B8E, 0x7B90, /* 0x30 */ + 0x7B91, 0x7B96, 0x7B9B, 0x7B9E, 0x7BA0, 0x7BA5, 0x7BAC, 0x7BAF, /* 0x30 */ + 0x7BB0, 0x7BB2, 0x7BB5, 0x7BB6, 0x7BBA, 0x7BBB, 0x7BBC, 0x7BBD, /* 0x40 */ + 0x7BC2, 0x7BC5, 0x7BC8, 0x7BCA, 0x7BD4, 0x7BD6, 0x7BD7, 0x7BD9, /* 0x40 */ + 0x7BDA, 0x7BDB, 0x7BE8, 0x7BEA, 0x7BF2, 0x7BF4, 0x7BF5, 0x7BF8, /* 0x50 */ + 0x7BF9, 0x7BFA, 0x7BFC, 0x7BFE, 0x7C01, 0x7C02, 0x7C03, 0x7C04, /* 0x50 */ + 0x7C06, 0x7C09, 0x7C0B, 0x7C0C, 0x7C0E, 0x7C0F, 0x7C19, 0x7C1B, /* 0x60 */ + 0x7C20, 0x7C25, 0x7C26, 0x7C28, 0x7C2C, 0x7C31, 0x7C33, 0x7C34, /* 0x60 */ + 0x7C36, 0x7C39, 0x7C3A, 0x7C46, 0x7C4A, 0x7C55, 0x7C51, 0x7C52, /* 0x70 */ + 0x7C53, 0x7C59, 0x7C5A, 0x7C5B, 0x7C5C, 0x7C5D, 0x7C5E /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7C61, 0x7C63, 0x7C67, 0x7C69, 0x7C6D, 0x7C6E, 0x7C70, /* 0x20 */ + 0x7C72, 0x7C79, 0x7C7C, 0x7C7D, 0x7C86, 0x7C87, 0x7C8F, 0x7C94, /* 0x20 */ + 0x7C9E, 0x7CA0, 0x7CA6, 0x7CB0, 0x7CB6, 0x7CB7, 0x7CBA, 0x7CBB, /* 0x30 */ + 0x7CBC, 0x7CBF, 0x7CC4, 0x7CC7, 0x7CC8, 0x7CC9, 0x7CCD, 0x7CCF, /* 0x30 */ + 0x7CD3, 0x7CD4, 0x7CD5, 0x7CD7, 0x7CD9, 0x7CDA, 0x7CDD, 0x7CE6, /* 0x40 */ + 0x7CE9, 0x7CEB, 0x7CF5, 0x7D03, 0x7D07, 0x7D08, 0x7D09, 0x7D0F, /* 0x40 */ + 0x7D11, 0x7D12, 0x7D13, 0x7D16, 0x7D1D, 0x7D1E, 0x7D23, 0x7D26, /* 0x50 */ + 0x7D2A, 0x7D2D, 0x7D31, 0x7D3C, 0x7D3D, 0x7D3E, 0x7D40, 0x7D41, /* 0x50 */ + 0x7D47, 0x7D48, 0x7D4D, 0x7D51, 0x7D53, 0x7D57, 0x7D59, 0x7D5A, /* 0x60 */ + 0x7D5C, 0x7D5D, 0x7D65, 0x7D67, 0x7D6A, 0x7D70, 0x7D78, 0x7D7A, /* 0x60 */ + 0x7D7B, 0x7D7F, 0x7D81, 0x7D82, 0x7D83, 0x7D85, 0x7D86, 0x7D88, /* 0x70 */ + 0x7D8B, 0x7D8C, 0x7D8D, 0x7D91, 0x7D96, 0x7D97, 0x7D9D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D9E, 0x7DA6, 0x7DA7, 0x7DAA, 0x7DB3, 0x7DB6, 0x7DB7, /* 0x20 */ + 0x7DB9, 0x7DC2, 0x7DC3, 0x7DC4, 0x7DC5, 0x7DC6, 0x7DCC, 0x7DCD, /* 0x20 */ + 0x7DCE, 0x7DD7, 0x7DD9, 0x7E00, 0x7DE2, 0x7DE5, 0x7DE6, 0x7DEA, /* 0x30 */ + 0x7DEB, 0x7DED, 0x7DF1, 0x7DF5, 0x7DF6, 0x7DF9, 0x7DFA, 0x7E08, /* 0x30 */ + 0x7E10, 0x7E11, 0x7E15, 0x7E17, 0x7E1C, 0x7E1D, 0x7E20, 0x7E27, /* 0x40 */ + 0x7E28, 0x7E2C, 0x7E2D, 0x7E2F, 0x7E33, 0x7E36, 0x7E3F, 0x7E44, /* 0x40 */ + 0x7E45, 0x7E47, 0x7E4E, 0x7E50, 0x7E52, 0x7E58, 0x7E5F, 0x7E61, /* 0x50 */ + 0x7E62, 0x7E65, 0x7E6B, 0x7E6E, 0x7E6F, 0x7E73, 0x7E78, 0x7E7E, /* 0x50 */ + 0x7E81, 0x7E86, 0x7E87, 0x7E8A, 0x7E8D, 0x7E91, 0x7E95, 0x7E98, /* 0x60 */ + 0x7E9A, 0x7E9D, 0x7E9E, 0x7F3C, 0x7F3B, 0x7F3D, 0x7F3E, 0x7F3F, /* 0x60 */ + 0x7F43, 0x7F44, 0x7F47, 0x7F4F, 0x7F52, 0x7F53, 0x7F5B, 0x7F5C, /* 0x70 */ + 0x7F5D, 0x7F61, 0x7F63, 0x7F64, 0x7F65, 0x7F66, 0x7F6D /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7F71, 0x7F7D, 0x7F7E, 0x7F7F, 0x7F80, 0x7F8B, 0x7F8D, /* 0x20 */ + 0x7F8F, 0x7F90, 0x7F91, 0x7F96, 0x7F97, 0x7F9C, 0x7FA1, 0x7FA2, /* 0x20 */ + 0x7FA6, 0x7FAA, 0x7FAD, 0x7FB4, 0x7FBC, 0x7FBF, 0x7FC0, 0x7FC3, /* 0x30 */ + 0x7FC8, 0x7FCE, 0x7FCF, 0x7FDB, 0x7FDF, 0x7FE3, 0x7FE5, 0x7FE8, /* 0x30 */ + 0x7FEC, 0x7FEE, 0x7FEF, 0x7FF2, 0x7FFA, 0x7FFD, 0x7FFE, 0x7FFF, /* 0x40 */ + 0x8007, 0x8008, 0x800A, 0x800D, 0x800E, 0x800F, 0x8011, 0x8013, /* 0x40 */ + 0x8014, 0x8016, 0x801D, 0x801E, 0x801F, 0x8020, 0x8024, 0x8026, /* 0x50 */ + 0x802C, 0x802E, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803A, /* 0x50 */ + 0x803C, 0x803E, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806D, /* 0x60 */ + 0x8071, 0x8075, 0x8081, 0x8088, 0x808E, 0x809C, 0x809E, 0x80A6, /* 0x60 */ + 0x80A7, 0x80AB, 0x80B8, 0x80B9, 0x80C8, 0x80CD, 0x80CF, 0x80D2, /* 0x70 */ + 0x80D4, 0x80D5, 0x80D7, 0x80D8, 0x80E0, 0x80ED, 0x80EE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x80F0, 0x80F2, 0x80F3, 0x80F6, 0x80F9, 0x80FA, 0x80FE, /* 0x20 */ + 0x8103, 0x810B, 0x8116, 0x8117, 0x8118, 0x811C, 0x811E, 0x8120, /* 0x20 */ + 0x8124, 0x8127, 0x812C, 0x8130, 0x8135, 0x813A, 0x813C, 0x8145, /* 0x30 */ + 0x8147, 0x814A, 0x814C, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, /* 0x30 */ + 0x8168, 0x8169, 0x816D, 0x816F, 0x8177, 0x8181, 0x8190, 0x8184, /* 0x40 */ + 0x8185, 0x8186, 0x818B, 0x818E, 0x8196, 0x8198, 0x819B, 0x819E, /* 0x40 */ + 0x81A2, 0x81AE, 0x81B2, 0x81B4, 0x81BB, 0x81CB, 0x81C3, 0x81C5, /* 0x50 */ + 0x81CA, 0x81CE, 0x81CF, 0x81D5, 0x81D7, 0x81DB, 0x81DD, 0x81DE, /* 0x50 */ + 0x81E1, 0x81E4, 0x81EB, 0x81EC, 0x81F0, 0x81F1, 0x81F2, 0x81F5, /* 0x60 */ + 0x81F6, 0x81F8, 0x81F9, 0x81FD, 0x81FF, 0x8200, 0x8203, 0x820F, /* 0x60 */ + 0x8213, 0x8214, 0x8219, 0x821A, 0x821D, 0x8221, 0x8222, 0x8228, /* 0x70 */ + 0x8232, 0x8234, 0x823A, 0x8243, 0x8244, 0x8245, 0x8246 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x824B, 0x824E, 0x824F, 0x8251, 0x8256, 0x825C, 0x8260, /* 0x20 */ + 0x8263, 0x8267, 0x826D, 0x8274, 0x827B, 0x827D, 0x827F, 0x8280, /* 0x20 */ + 0x8281, 0x8283, 0x8284, 0x8287, 0x8289, 0x828A, 0x828E, 0x8291, /* 0x30 */ + 0x8294, 0x8296, 0x8298, 0x829A, 0x829B, 0x82A0, 0x82A1, 0x82A3, /* 0x30 */ + 0x82A4, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AE, 0x82B0, 0x82B2, /* 0x40 */ + 0x82B4, 0x82B7, 0x82BA, 0x82BC, 0x82BE, 0x82BF, 0x82C6, 0x82D0, /* 0x40 */ + 0x82D5, 0x82DA, 0x82E0, 0x82E2, 0x82E4, 0x82E8, 0x82EA, 0x82ED, /* 0x50 */ + 0x82EF, 0x82F6, 0x82F7, 0x82FD, 0x82FE, 0x8300, 0x8301, 0x8307, /* 0x50 */ + 0x8308, 0x830A, 0x830B, 0x8354, 0x831B, 0x831D, 0x831E, 0x831F, /* 0x60 */ + 0x8321, 0x8322, 0x832C, 0x832D, 0x832E, 0x8330, 0x8333, 0x8337, /* 0x60 */ + 0x833A, 0x833C, 0x833D, 0x8342, 0x8343, 0x8344, 0x8347, 0x834D, /* 0x70 */ + 0x834E, 0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x837D, 0x837F, 0x8380, 0x8382, 0x8384, 0x8386, 0x838D, /* 0x20 */ + 0x8392, 0x8394, 0x8395, 0x8398, 0x8399, 0x839B, 0x839C, 0x839D, /* 0x20 */ + 0x83A6, 0x83A7, 0x83A9, 0x83AC, 0x83BE, 0x83BF, 0x83C0, 0x83C7, /* 0x30 */ + 0x83C9, 0x83CF, 0x83D0, 0x83D1, 0x83D4, 0x83DD, 0x8353, 0x83E8, /* 0x30 */ + 0x83EA, 0x83F6, 0x83F8, 0x83F9, 0x83FC, 0x8401, 0x8406, 0x840A, /* 0x40 */ + 0x840F, 0x8411, 0x8415, 0x8419, 0x83AD, 0x842F, 0x8439, 0x8445, /* 0x40 */ + 0x8447, 0x8448, 0x844A, 0x844D, 0x844F, 0x8451, 0x8452, 0x8456, /* 0x50 */ + 0x8458, 0x8459, 0x845A, 0x845C, 0x8460, 0x8464, 0x8465, 0x8467, /* 0x50 */ + 0x846A, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847C, 0x847D, /* 0x60 */ + 0x8481, 0x8485, 0x8492, 0x8493, 0x8495, 0x849E, 0x84A6, 0x84A8, /* 0x60 */ + 0x84A9, 0x84AA, 0x84AF, 0x84B1, 0x84B4, 0x84BA, 0x84BD, 0x84BE, /* 0x70 */ + 0x84C0, 0x84C2, 0x84C7, 0x84C8, 0x84CC, 0x84CF, 0x84D3 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x84DC, 0x84E7, 0x84EA, 0x84EF, 0x84F0, 0x84F1, 0x84F2, /* 0x20 */ + 0x84F7, 0x8532, 0x84FA, 0x84FB, 0x84FD, 0x8502, 0x8503, 0x8507, /* 0x20 */ + 0x850C, 0x850E, 0x8510, 0x851C, 0x851E, 0x8522, 0x8523, 0x8524, /* 0x30 */ + 0x8525, 0x8527, 0x852A, 0x852B, 0x852F, 0x8533, 0x8534, 0x8536, /* 0x30 */ + 0x853F, 0x8546, 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, /* 0x40 */ + 0x8559, 0x855C, 0x855D, 0x855E, 0x855F, 0x8560, 0x8561, 0x8562, /* 0x40 */ + 0x8564, 0x856B, 0x856F, 0x8579, 0x857A, 0x857B, 0x857D, 0x857F, /* 0x50 */ + 0x8581, 0x8585, 0x8586, 0x8589, 0x858B, 0x858C, 0x858F, 0x8593, /* 0x50 */ + 0x8598, 0x859D, 0x859F, 0x85A0, 0x85A2, 0x85A5, 0x85A7, 0x85B4, /* 0x60 */ + 0x85B6, 0x85B7, 0x85B8, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C2, /* 0x60 */ + 0x85C7, 0x85CA, 0x85CB, 0x85CE, 0x85AD, 0x85D8, 0x85DA, 0x85DF, /* 0x70 */ + 0x85E0, 0x85E6, 0x85E8, 0x85ED, 0x85F3, 0x85F6, 0x85FC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x85FF, 0x8600, 0x8604, 0x8605, 0x860D, 0x860E, 0x8610, /* 0x20 */ + 0x8611, 0x8612, 0x8618, 0x8619, 0x861B, 0x861E, 0x8621, 0x8627, /* 0x20 */ + 0x8629, 0x8636, 0x8638, 0x863A, 0x863C, 0x863D, 0x8640, 0x8642, /* 0x30 */ + 0x8646, 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865D, /* 0x30 */ + 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866C, 0x866F, /* 0x40 */ + 0x8675, 0x8676, 0x8677, 0x867A, 0x868D, 0x8691, 0x8696, 0x8698, /* 0x40 */ + 0x869A, 0x869C, 0x86A1, 0x86A6, 0x86A7, 0x86A8, 0x86AD, 0x86B1, /* 0x50 */ + 0x86B3, 0x86B4, 0x86B5, 0x86B7, 0x86B8, 0x86B9, 0x86BF, 0x86C0, /* 0x50 */ + 0x86C1, 0x86C3, 0x86C5, 0x86D1, 0x86D2, 0x86D5, 0x86D7, 0x86DA, /* 0x60 */ + 0x86DC, 0x86E0, 0x86E3, 0x86E5, 0x86E7, 0x8688, 0x86FA, 0x86FC, /* 0x60 */ + 0x86FD, 0x8704, 0x8705, 0x8707, 0x870B, 0x870E, 0x870F, 0x8710, /* 0x70 */ + 0x8713, 0x8714, 0x8719, 0x871E, 0x871F, 0x8721, 0x8723 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8728, 0x872E, 0x872F, 0x8731, 0x8732, 0x8739, 0x873A, /* 0x20 */ + 0x873C, 0x873D, 0x873E, 0x8740, 0x8743, 0x8745, 0x874D, 0x8758, /* 0x20 */ + 0x875D, 0x8761, 0x8764, 0x8765, 0x876F, 0x8771, 0x8772, 0x877B, /* 0x30 */ + 0x8783, 0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878B, /* 0x30 */ + 0x878C, 0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879E, /* 0x40 */ + 0x87A0, 0x87A3, 0x87A7, 0x87AC, 0x87AD, 0x87AE, 0x87B1, 0x87B5, /* 0x40 */ + 0x87BE, 0x87BF, 0x87C1, 0x87C8, 0x87C9, 0x87CA, 0x87CE, 0x87D5, /* 0x50 */ + 0x87D6, 0x87D9, 0x87DA, 0x87DC, 0x87DF, 0x87E2, 0x87E3, 0x87E4, /* 0x50 */ + 0x87EA, 0x87EB, 0x87ED, 0x87F1, 0x87F3, 0x87F8, 0x87FA, 0x87FF, /* 0x60 */ + 0x8801, 0x8803, 0x8806, 0x8809, 0x880A, 0x880B, 0x8810, 0x8819, /* 0x60 */ + 0x8812, 0x8813, 0x8814, 0x8818, 0x881A, 0x881B, 0x881C, 0x881E, /* 0x70 */ + 0x881F, 0x8828, 0x882D, 0x882E, 0x8830, 0x8832, 0x8835 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x883A, 0x883C, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, /* 0x20 */ + 0x884A, 0x884B, 0x884E, 0x8851, 0x8855, 0x8856, 0x8858, 0x885A, /* 0x20 */ + 0x885C, 0x885F, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887B, /* 0x30 */ + 0x8880, 0x8898, 0x889A, 0x889B, 0x889C, 0x889F, 0x88A0, 0x88A8, /* 0x30 */ + 0x88AA, 0x88BA, 0x88BD, 0x88BE, 0x88C0, 0x88CA, 0x88CB, 0x88CC, /* 0x40 */ + 0x88CD, 0x88CE, 0x88D1, 0x88D2, 0x88D3, 0x88DB, 0x88DE, 0x88E7, /* 0x40 */ + 0x88EF, 0x88F0, 0x88F1, 0x88F5, 0x88F7, 0x8901, 0x8906, 0x890D, /* 0x50 */ + 0x890E, 0x890F, 0x8915, 0x8916, 0x8918, 0x8919, 0x891A, 0x891C, /* 0x50 */ + 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, /* 0x60 */ + 0x8939, 0x893A, 0x893E, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, /* 0x60 */ + 0x894F, 0x8952, 0x8957, 0x895A, 0x895B, 0x895C, 0x8961, 0x8962, /* 0x70 */ + 0x8963, 0x896B, 0x896E, 0x8970, 0x8973, 0x8975, 0x897A /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x897B, 0x897C, 0x897D, 0x8989, 0x898D, 0x8990, 0x8994, /* 0x20 */ + 0x8995, 0x899B, 0x899C, 0x899F, 0x89A0, 0x89A5, 0x89B0, 0x89B4, /* 0x20 */ + 0x89B5, 0x89B6, 0x89B7, 0x89BC, 0x89D4, 0x89D5, 0x89D6, 0x89D7, /* 0x30 */ + 0x89D8, 0x89E5, 0x89E9, 0x89EB, 0x89ED, 0x89F1, 0x89F3, 0x89F6, /* 0x30 */ + 0x89F9, 0x89FD, 0x89FF, 0x8A04, 0x8A05, 0x8A07, 0x8A0F, 0x8A11, /* 0x40 */ + 0x8A12, 0x8A14, 0x8A15, 0x8A1E, 0x8A20, 0x8A22, 0x8A24, 0x8A26, /* 0x40 */ + 0x8A2B, 0x8A2C, 0x8A2F, 0x8A35, 0x8A37, 0x8A3D, 0x8A3E, 0x8A40, /* 0x50 */ + 0x8A43, 0x8A45, 0x8A47, 0x8A49, 0x8A4D, 0x8A4E, 0x8A53, 0x8A56, /* 0x50 */ + 0x8A57, 0x8A58, 0x8A5C, 0x8A5D, 0x8A61, 0x8A65, 0x8A67, 0x8A75, /* 0x60 */ + 0x8A76, 0x8A77, 0x8A79, 0x8A7A, 0x8A7B, 0x8A7E, 0x8A7F, 0x8A80, /* 0x60 */ + 0x8A83, 0x8A86, 0x8A8B, 0x8A8F, 0x8A90, 0x8A92, 0x8A96, 0x8A97, /* 0x70 */ + 0x8A99, 0x8A9F, 0x8AA7, 0x8AA9, 0x8AAE, 0x8AAF, 0x8AB3 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8AB6, 0x8AB7, 0x8ABB, 0x8ABE, 0x8AC3, 0x8AC6, 0x8AC8, /* 0x20 */ + 0x8AC9, 0x8ACA, 0x8AD1, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD7, 0x8ADD, /* 0x20 */ + 0x8ADF, 0x8AEC, 0x8AF0, 0x8AF4, 0x8AF5, 0x8AF6, 0x8AFC, 0x8AFF, /* 0x30 */ + 0x8B05, 0x8B06, 0x8B0B, 0x8B11, 0x8B1C, 0x8B1E, 0x8B1F, 0x8B0A, /* 0x30 */ + 0x8B2D, 0x8B30, 0x8B37, 0x8B3C, 0x8B42, 0x8B43, 0x8B44, 0x8B45, /* 0x40 */ + 0x8B46, 0x8B48, 0x8B52, 0x8B53, 0x8B54, 0x8B59, 0x8B4D, 0x8B5E, /* 0x40 */ + 0x8B63, 0x8B6D, 0x8B76, 0x8B78, 0x8B79, 0x8B7C, 0x8B7E, 0x8B81, /* 0x50 */ + 0x8B84, 0x8B85, 0x8B8B, 0x8B8D, 0x8B8F, 0x8B94, 0x8B95, 0x8B9C, /* 0x50 */ + 0x8B9E, 0x8B9F, 0x8C38, 0x8C39, 0x8C3D, 0x8C3E, 0x8C45, 0x8C47, /* 0x60 */ + 0x8C49, 0x8C4B, 0x8C4F, 0x8C51, 0x8C53, 0x8C54, 0x8C57, 0x8C58, /* 0x60 */ + 0x8C5B, 0x8C5D, 0x8C59, 0x8C63, 0x8C64, 0x8C66, 0x8C68, 0x8C69, /* 0x70 */ + 0x8C6D, 0x8C73, 0x8C75, 0x8C76, 0x8C7B, 0x8C7E, 0x8C86 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8C87, 0x8C8B, 0x8C90, 0x8C92, 0x8C93, 0x8C99, 0x8C9B, /* 0x20 */ + 0x8C9C, 0x8CA4, 0x8CB9, 0x8CBA, 0x8CC5, 0x8CC6, 0x8CC9, 0x8CCB, /* 0x20 */ + 0x8CCF, 0x8CD6, 0x8CD5, 0x8CD9, 0x8CDD, 0x8CE1, 0x8CE8, 0x8CEC, /* 0x30 */ + 0x8CEF, 0x8CF0, 0x8CF2, 0x8CF5, 0x8CF7, 0x8CF8, 0x8CFE, 0x8CFF, /* 0x30 */ + 0x8D01, 0x8D03, 0x8D09, 0x8D12, 0x8D17, 0x8D1B, 0x8D65, 0x8D69, /* 0x40 */ + 0x8D6C, 0x8D6E, 0x8D7F, 0x8D82, 0x8D84, 0x8D88, 0x8D8D, 0x8D90, /* 0x40 */ + 0x8D91, 0x8D95, 0x8D9E, 0x8D9F, 0x8DA0, 0x8DA6, 0x8DAB, 0x8DAC, /* 0x50 */ + 0x8DAF, 0x8DB2, 0x8DB5, 0x8DB7, 0x8DB9, 0x8DBB, 0x8DC0, 0x8DC5, /* 0x50 */ + 0x8DC6, 0x8DC7, 0x8DC8, 0x8DCA, 0x8DCE, 0x8DD1, 0x8DD4, 0x8DD5, /* 0x60 */ + 0x8DD7, 0x8DD9, 0x8DE4, 0x8DE5, 0x8DE7, 0x8DEC, 0x8DF0, 0x8DBC, /* 0x60 */ + 0x8DF1, 0x8DF2, 0x8DF4, 0x8DFD, 0x8E01, 0x8E04, 0x8E05, 0x8E06, /* 0x70 */ + 0x8E0B, 0x8E11, 0x8E14, 0x8E16, 0x8E20, 0x8E21, 0x8E22 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E23, 0x8E26, 0x8E27, 0x8E31, 0x8E33, 0x8E36, 0x8E37, /* 0x20 */ + 0x8E38, 0x8E39, 0x8E3D, 0x8E40, 0x8E41, 0x8E4B, 0x8E4D, 0x8E4E, /* 0x20 */ + 0x8E4F, 0x8E54, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E61, 0x8E62, /* 0x30 */ + 0x8E69, 0x8E6C, 0x8E6D, 0x8E6F, 0x8E70, 0x8E71, 0x8E79, 0x8E7A, /* 0x30 */ + 0x8E7B, 0x8E82, 0x8E83, 0x8E89, 0x8E90, 0x8E92, 0x8E95, 0x8E9A, /* 0x40 */ + 0x8E9B, 0x8E9D, 0x8E9E, 0x8EA2, 0x8EA7, 0x8EA9, 0x8EAD, 0x8EAE, /* 0x40 */ + 0x8EB3, 0x8EB5, 0x8EBA, 0x8EBB, 0x8EC0, 0x8EC1, 0x8EC3, 0x8EC4, /* 0x50 */ + 0x8EC7, 0x8ECF, 0x8ED1, 0x8ED4, 0x8EDC, 0x8EE8, 0x8EEE, 0x8EF0, /* 0x50 */ + 0x8EF1, 0x8EF7, 0x8EF9, 0x8EFA, 0x8EED, 0x8F00, 0x8F02, 0x8F07, /* 0x60 */ + 0x8F08, 0x8F0F, 0x8F10, 0x8F16, 0x8F17, 0x8F18, 0x8F1E, 0x8F20, /* 0x60 */ + 0x8F21, 0x8F23, 0x8F25, 0x8F27, 0x8F28, 0x8F2C, 0x8F2D, 0x8F2E, /* 0x70 */ + 0x8F34, 0x8F35, 0x8F36, 0x8F37, 0x8F3A, 0x8F40, 0x8F41 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8F43, 0x8F47, 0x8F4F, 0x8F51, 0x8F52, 0x8F53, 0x8F54, /* 0x20 */ + 0x8F55, 0x8F58, 0x8F5D, 0x8F5E, 0x8F65, 0x8F9D, 0x8FA0, 0x8FA1, /* 0x20 */ + 0x8FA4, 0x8FA5, 0x8FA6, 0x8FB5, 0x8FB6, 0x8FB8, 0x8FBE, 0x8FC0, /* 0x30 */ + 0x8FC1, 0x8FC6, 0x8FCA, 0x8FCB, 0x8FCD, 0x8FD0, 0x8FD2, 0x8FD3, /* 0x30 */ + 0x8FD5, 0x8FE0, 0x8FE3, 0x8FE4, 0x8FE8, 0x8FEE, 0x8FF1, 0x8FF5, /* 0x40 */ + 0x8FF6, 0x8FFB, 0x8FFE, 0x9002, 0x9004, 0x9008, 0x900C, 0x9018, /* 0x40 */ + 0x901B, 0x9028, 0x9029, 0x902F, 0x902A, 0x902C, 0x902D, 0x9033, /* 0x50 */ + 0x9034, 0x9037, 0x903F, 0x9043, 0x9044, 0x904C, 0x905B, 0x905D, /* 0x50 */ + 0x9062, 0x9066, 0x9067, 0x906C, 0x9070, 0x9074, 0x9079, 0x9085, /* 0x60 */ + 0x9088, 0x908B, 0x908C, 0x908E, 0x9090, 0x9095, 0x9097, 0x9098, /* 0x60 */ + 0x9099, 0x909B, 0x90A0, 0x90A1, 0x90A2, 0x90A5, 0x90B0, 0x90B2, /* 0x70 */ + 0x90B3, 0x90B4, 0x90B6, 0x90BD, 0x90CC, 0x90BE, 0x90C3 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90C4, 0x90C5, 0x90C7, 0x90C8, 0x90D5, 0x90D7, 0x90D8, /* 0x20 */ + 0x90D9, 0x90DC, 0x90DD, 0x90DF, 0x90E5, 0x90D2, 0x90F6, 0x90EB, /* 0x20 */ + 0x90EF, 0x90F0, 0x90F4, 0x90FE, 0x90FF, 0x9100, 0x9104, 0x9105, /* 0x30 */ + 0x9106, 0x9108, 0x910D, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, /* 0x30 */ + 0x911A, 0x911C, 0x911E, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, /* 0x40 */ + 0x9129, 0x912E, 0x912F, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, /* 0x40 */ + 0x913A, 0x913C, 0x913D, 0x9143, 0x9147, 0x9148, 0x914F, 0x9153, /* 0x50 */ + 0x9157, 0x9159, 0x915A, 0x915B, 0x9161, 0x9164, 0x9167, 0x916D, /* 0x50 */ + 0x9174, 0x9179, 0x917A, 0x917B, 0x9181, 0x9183, 0x9185, 0x9186, /* 0x60 */ + 0x918A, 0x918E, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919E, /* 0x60 */ + 0x91A1, 0x91A6, 0x91A8, 0x91AC, 0x91AD, 0x91AE, 0x91B0, 0x91B1, /* 0x70 */ + 0x91B2, 0x91B3, 0x91B6, 0x91BB, 0x91BC, 0x91BD, 0x91BF /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x91C2, 0x91C3, 0x91C5, 0x91D3, 0x91D4, 0x91D7, 0x91D9, /* 0x20 */ + 0x91DA, 0x91DE, 0x91E4, 0x91E5, 0x91E9, 0x91EA, 0x91EC, 0x91ED, /* 0x20 */ + 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F7, 0x91F9, 0x91FB, 0x91FD, /* 0x30 */ + 0x9200, 0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920A, /* 0x30 */ + 0x920C, 0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921C, 0x921D, /* 0x40 */ + 0x9223, 0x9224, 0x9225, 0x9226, 0x9228, 0x922E, 0x922F, 0x9230, /* 0x40 */ + 0x9233, 0x9235, 0x9236, 0x9238, 0x9239, 0x923A, 0x923C, 0x923E, /* 0x50 */ + 0x9240, 0x9242, 0x9243, 0x9246, 0x9247, 0x924A, 0x924D, 0x924E, /* 0x50 */ + 0x924F, 0x9251, 0x9258, 0x9259, 0x925C, 0x925D, 0x9260, 0x9261, /* 0x60 */ + 0x9265, 0x9267, 0x9268, 0x9269, 0x926E, 0x926F, 0x9270, 0x9275, /* 0x60 */ + 0x9276, 0x9277, 0x9278, 0x9279, 0x927B, 0x927C, 0x927D, 0x927F, /* 0x70 */ + 0x9288, 0x9289, 0x928A, 0x928D, 0x928E, 0x9292, 0x9297 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9299, 0x929F, 0x92A0, 0x92A4, 0x92A5, 0x92A7, 0x92A8, /* 0x20 */ + 0x92AB, 0x92AF, 0x92B2, 0x92B6, 0x92B8, 0x92BA, 0x92BB, 0x92BC, /* 0x20 */ + 0x92BD, 0x92BF, 0x92C0, 0x92C1, 0x92C2, 0x92C3, 0x92C5, 0x92C6, /* 0x30 */ + 0x92C7, 0x92C8, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92D0, 0x92D3, /* 0x30 */ + 0x92D5, 0x92D7, 0x92D8, 0x92D9, 0x92DC, 0x92DD, 0x92DF, 0x92E0, /* 0x40 */ + 0x92E1, 0x92E3, 0x92E5, 0x92E7, 0x92E8, 0x92EC, 0x92EE, 0x92F0, /* 0x40 */ + 0x92F9, 0x92FB, 0x92FF, 0x9300, 0x9302, 0x9308, 0x930D, 0x9311, /* 0x50 */ + 0x9314, 0x9315, 0x931C, 0x931D, 0x931E, 0x931F, 0x9321, 0x9324, /* 0x50 */ + 0x9325, 0x9327, 0x9329, 0x932A, 0x9333, 0x9334, 0x9336, 0x9337, /* 0x60 */ + 0x9347, 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, /* 0x60 */ + 0x9358, 0x935A, 0x935E, 0x9364, 0x9365, 0x9367, 0x9369, 0x936A, /* 0x70 */ + 0x936D, 0x936F, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x937A, 0x937D, 0x937F, 0x9380, 0x9381, 0x9382, 0x9388, /* 0x20 */ + 0x938A, 0x938B, 0x938D, 0x938F, 0x9392, 0x9395, 0x9398, 0x939B, /* 0x20 */ + 0x939E, 0x93A1, 0x93A3, 0x93A4, 0x93A6, 0x93A8, 0x93AB, 0x93B4, /* 0x30 */ + 0x93B5, 0x93B6, 0x93BA, 0x93A9, 0x93C1, 0x93C4, 0x93C5, 0x93C6, /* 0x30 */ + 0x93C7, 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0x93CD, 0x93D3, 0x93D9, /* 0x40 */ + 0x93DC, 0x93DE, 0x93DF, 0x93E2, 0x93E6, 0x93E7, 0x93F9, 0x93F7, /* 0x40 */ + 0x93F8, 0x93FA, 0x93FB, 0x93FD, 0x9401, 0x9402, 0x9404, 0x9408, /* 0x50 */ + 0x9409, 0x940D, 0x940E, 0x940F, 0x9415, 0x9416, 0x9417, 0x941F, /* 0x50 */ + 0x942E, 0x942F, 0x9431, 0x9432, 0x9433, 0x9434, 0x943B, 0x943F, /* 0x60 */ + 0x943D, 0x9443, 0x9445, 0x9448, 0x944A, 0x944C, 0x9455, 0x9459, /* 0x60 */ + 0x945C, 0x945F, 0x9461, 0x9463, 0x9468, 0x946B, 0x946D, 0x946E, /* 0x70 */ + 0x946F, 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x957E, 0x9584, 0x9588, 0x958C, 0x958D, 0x958E, 0x959D, /* 0x20 */ + 0x959E, 0x959F, 0x95A1, 0x95A6, 0x95A9, 0x95AB, 0x95AC, 0x95B4, /* 0x20 */ + 0x95B6, 0x95BA, 0x95BD, 0x95BF, 0x95C6, 0x95C8, 0x95C9, 0x95CB, /* 0x30 */ + 0x95D0, 0x95D1, 0x95D2, 0x95D3, 0x95D9, 0x95DA, 0x95DD, 0x95DE, /* 0x30 */ + 0x95DF, 0x95E0, 0x95E4, 0x95E6, 0x961D, 0x961E, 0x9622, 0x9624, /* 0x40 */ + 0x9625, 0x9626, 0x962C, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, /* 0x40 */ + 0x963A, 0x963C, 0x963D, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, /* 0x50 */ + 0x9658, 0x9661, 0x966E, 0x9674, 0x967B, 0x967C, 0x967E, 0x967F, /* 0x50 */ + 0x9681, 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969A, /* 0x60 */ + 0x969D, 0x969F, 0x96A4, 0x96A5, 0x96A6, 0x96A9, 0x96AE, 0x96AF, /* 0x60 */ + 0x96B3, 0x96BA, 0x96CA, 0x96D2, 0x5DB2, 0x96D8, 0x96DA, 0x96DD, /* 0x70 */ + 0x96DE, 0x96DF, 0x96E9, 0x96EF, 0x96F1, 0x96FA, 0x9702 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9703, 0x9705, 0x9709, 0x971A, 0x971B, 0x971D, 0x9721, /* 0x20 */ + 0x9722, 0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974A, /* 0x20 */ + 0x974E, 0x974F, 0x9755, 0x9757, 0x9758, 0x975A, 0x975B, 0x9763, /* 0x30 */ + 0x9767, 0x976A, 0x976E, 0x9773, 0x9776, 0x9777, 0x9778, 0x977B, /* 0x30 */ + 0x977D, 0x977F, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, /* 0x40 */ + 0x979A, 0x979E, 0x979F, 0x97A2, 0x97AC, 0x97AE, 0x97B1, 0x97B2, /* 0x40 */ + 0x97B5, 0x97B6, 0x97B8, 0x97B9, 0x97BA, 0x97BC, 0x97BE, 0x97BF, /* 0x50 */ + 0x97C1, 0x97C4, 0x97C5, 0x97C7, 0x97C9, 0x97CA, 0x97CC, 0x97CD, /* 0x50 */ + 0x97CE, 0x97D0, 0x97D1, 0x97D4, 0x97D7, 0x97D8, 0x97D9, 0x97DD, /* 0x60 */ + 0x97DE, 0x97E0, 0x97DB, 0x97E1, 0x97E4, 0x97EF, 0x97F1, 0x97F4, /* 0x60 */ + 0x97F7, 0x97F8, 0x97FA, 0x9807, 0x980A, 0x9819, 0x980D, 0x980E, /* 0x70 */ + 0x9814, 0x9816, 0x981C, 0x981E, 0x9820, 0x9823, 0x9826 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x982B, 0x982E, 0x982F, 0x9830, 0x9832, 0x9833, 0x9835, /* 0x20 */ + 0x9825, 0x983E, 0x9844, 0x9847, 0x984A, 0x9851, 0x9852, 0x9853, /* 0x20 */ + 0x9856, 0x9857, 0x9859, 0x985A, 0x9862, 0x9863, 0x9865, 0x9866, /* 0x30 */ + 0x986A, 0x986C, 0x98AB, 0x98AD, 0x98AE, 0x98B0, 0x98B4, 0x98B7, /* 0x30 */ + 0x98B8, 0x98BA, 0x98BB, 0x98BF, 0x98C2, 0x98C5, 0x98C8, 0x98CC, /* 0x40 */ + 0x98E1, 0x98E3, 0x98E5, 0x98E6, 0x98E7, 0x98EA, 0x98F3, 0x98F6, /* 0x40 */ + 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991A, /* 0x50 */ + 0x991B, 0x991C, 0x991F, 0x9922, 0x9926, 0x9927, 0x992B, 0x9931, /* 0x50 */ + 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993A, 0x993B, 0x993C, /* 0x60 */ + 0x9940, 0x9941, 0x9946, 0x9947, 0x9948, 0x994D, 0x994E, 0x9954, /* 0x60 */ + 0x9958, 0x9959, 0x995B, 0x995C, 0x995E, 0x995F, 0x9960, 0x999B, /* 0x70 */ + 0x999D, 0x999F, 0x99A6, 0x99B0, 0x99B1, 0x99B2, 0x99B5 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x99B9, 0x99BA, 0x99BD, 0x99BF, 0x99C3, 0x99C9, 0x99D3, /* 0x20 */ + 0x99D4, 0x99D9, 0x99DA, 0x99DC, 0x99DE, 0x99E7, 0x99EA, 0x99EB, /* 0x20 */ + 0x99EC, 0x99F0, 0x99F4, 0x99F5, 0x99F9, 0x99FD, 0x99FE, 0x9A02, /* 0x30 */ + 0x9A03, 0x9A04, 0x9A0B, 0x9A0C, 0x9A10, 0x9A11, 0x9A16, 0x9A1E, /* 0x30 */ + 0x9A20, 0x9A22, 0x9A23, 0x9A24, 0x9A27, 0x9A2D, 0x9A2E, 0x9A33, /* 0x40 */ + 0x9A35, 0x9A36, 0x9A38, 0x9A47, 0x9A41, 0x9A44, 0x9A4A, 0x9A4B, /* 0x40 */ + 0x9A4C, 0x9A4E, 0x9A51, 0x9A54, 0x9A56, 0x9A5D, 0x9AAA, 0x9AAC, /* 0x50 */ + 0x9AAE, 0x9AAF, 0x9AB2, 0x9AB4, 0x9AB5, 0x9AB6, 0x9AB9, 0x9ABB, /* 0x50 */ + 0x9ABE, 0x9ABF, 0x9AC1, 0x9AC3, 0x9AC6, 0x9AC8, 0x9ACE, 0x9AD0, /* 0x60 */ + 0x9AD2, 0x9AD5, 0x9AD6, 0x9AD7, 0x9ADB, 0x9ADC, 0x9AE0, 0x9AE4, /* 0x60 */ + 0x9AE5, 0x9AE7, 0x9AE9, 0x9AEC, 0x9AF2, 0x9AF3, 0x9AF5, 0x9AF9, /* 0x70 */ + 0x9AFA, 0x9AFD, 0x9AFF, 0x9B00, 0x9B01, 0x9B02, 0x9B03 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B04, 0x9B05, 0x9B08, 0x9B09, 0x9B0B, 0x9B0C, 0x9B0D, /* 0x20 */ + 0x9B0E, 0x9B10, 0x9B12, 0x9B16, 0x9B19, 0x9B1B, 0x9B1C, 0x9B20, /* 0x20 */ + 0x9B26, 0x9B2B, 0x9B2D, 0x9B33, 0x9B34, 0x9B35, 0x9B37, 0x9B39, /* 0x30 */ + 0x9B3A, 0x9B3D, 0x9B48, 0x9B4B, 0x9B4C, 0x9B55, 0x9B56, 0x9B57, /* 0x30 */ + 0x9B5B, 0x9B5E, 0x9B61, 0x9B63, 0x9B65, 0x9B66, 0x9B68, 0x9B6A, /* 0x40 */ + 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B73, 0x9B75, 0x9B77, 0x9B78, /* 0x40 */ + 0x9B79, 0x9B7F, 0x9B80, 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B89, /* 0x50 */ + 0x9B8A, 0x9B8B, 0x9B8D, 0x9B8F, 0x9B90, 0x9B94, 0x9B9A, 0x9B9D, /* 0x50 */ + 0x9B9E, 0x9BA6, 0x9BA7, 0x9BA9, 0x9BAC, 0x9BB0, 0x9BB1, 0x9BB2, /* 0x60 */ + 0x9BB7, 0x9BB8, 0x9BBB, 0x9BBC, 0x9BBE, 0x9BBF, 0x9BC1, 0x9BC7, /* 0x60 */ + 0x9BC8, 0x9BCE, 0x9BD0, 0x9BD7, 0x9BD8, 0x9BDD, 0x9BDF, 0x9BE5, /* 0x70 */ + 0x9BE7, 0x9BEA, 0x9BEB, 0x9BEF, 0x9BF3, 0x9BF7, 0x9BF8 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9BF9, 0x9BFA, 0x9BFD, 0x9BFF, 0x9C00, 0x9C02, 0x9C0B, /* 0x20 */ + 0x9C0F, 0x9C11, 0x9C16, 0x9C18, 0x9C19, 0x9C1A, 0x9C1C, 0x9C1E, /* 0x20 */ + 0x9C22, 0x9C23, 0x9C26, 0x9C27, 0x9C28, 0x9C29, 0x9C2A, 0x9C31, /* 0x30 */ + 0x9C35, 0x9C36, 0x9C37, 0x9C3D, 0x9C41, 0x9C43, 0x9C44, 0x9C45, /* 0x30 */ + 0x9C49, 0x9C4A, 0x9C4E, 0x9C4F, 0x9C50, 0x9C53, 0x9C54, 0x9C56, /* 0x40 */ + 0x9C58, 0x9C5B, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C63, 0x9C69, 0x9C6A, /* 0x40 */ + 0x9C5C, 0x9C6B, 0x9C68, 0x9C6E, 0x9C70, 0x9C72, 0x9C75, 0x9C77, /* 0x50 */ + 0x9C7B, 0x9CE6, 0x9CF2, 0x9CF7, 0x9CF9, 0x9D0B, 0x9D02, 0x9D11, /* 0x50 */ + 0x9D17, 0x9D18, 0x9D1C, 0x9D1D, 0x9D1E, 0x9D2F, 0x9D30, 0x9D32, /* 0x60 */ + 0x9D33, 0x9D34, 0x9D3A, 0x9D3C, 0x9D45, 0x9D3D, 0x9D42, 0x9D43, /* 0x60 */ + 0x9D47, 0x9D4A, 0x9D53, 0x9D54, 0x9D5F, 0x9D63, 0x9D62, 0x9D65, /* 0x70 */ + 0x9D69, 0x9D6A, 0x9D6B, 0x9D70, 0x9D76, 0x9D77, 0x9D7B /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9D7C, 0x9D7E, 0x9D83, 0x9D84, 0x9D86, 0x9D8A, 0x9D8D, /* 0x20 */ + 0x9D8E, 0x9D92, 0x9D93, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9DA1, /* 0x20 */ + 0x9DAA, 0x9DAC, 0x9DAE, 0x9DB1, 0x9DB5, 0x9DB9, 0x9DBC, 0x9DBF, /* 0x30 */ + 0x9DC3, 0x9DC7, 0x9DC9, 0x9DCA, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, /* 0x30 */ + 0x9DDA, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE5, 0x9DE7, 0x9DE9, 0x9DEB, /* 0x40 */ + 0x9DEE, 0x9DF0, 0x9DF3, 0x9DF4, 0x9DFE, 0x9E0A, 0x9E02, 0x9E07, /* 0x40 */ + 0x9E0E, 0x9E10, 0x9E11, 0x9E12, 0x9E15, 0x9E16, 0x9E19, 0x9E1C, /* 0x50 */ + 0x9E1D, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E80, 0x9E82, 0x9E83, 0x9E84, /* 0x50 */ + 0x9E85, 0x9E87, 0x9E8E, 0x9E8F, 0x9E96, 0x9E98, 0x9E9B, 0x9E9E, /* 0x60 */ + 0x9EA4, 0x9EA8, 0x9EAC, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB3, 0x9EB4, /* 0x60 */ + 0x9EB5, 0x9EC6, 0x9EC8, 0x9ECB, 0x9ED5, 0x9EDF, 0x9EE4, 0x9EE7, /* 0x70 */ + 0x9EEC, 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF2, 0x9EF5 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JIS0212_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9EF8, 0x9EFF, 0x9F02, 0x9F03, 0x9F09, 0x9F0F, 0x9F10, /* 0x20 */ + 0x9F11, 0x9F12, 0x9F14, 0x9F16, 0x9F17, 0x9F19, 0x9F1A, 0x9F1B, /* 0x20 */ + 0x9F1F, 0x9F22, 0x9F26, 0x9F2A, 0x9F2B, 0x9F2F, 0x9F31, 0x9F32, /* 0x30 */ + 0x9F34, 0x9F37, 0x9F39, 0x9F3A, 0x9F3C, 0x9F3D, 0x9F3F, 0x9F41, /* 0x30 */ + 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, 0x9F53, 0x9F55, 0x9F56, /* 0x40 */ + 0x9F57, 0x9F58, 0x9F5A, 0x9F5D, 0x9F5E, 0x9F68, 0x9F69, 0x9F6D, /* 0x40 */ + 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F75, 0x9F7A, 0x9F7D, /* 0x50 */ + 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0x9F94, 0x9F96, 0x9F97, 0x9F9E, /* 0x50 */ + 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA5 /* 0x60 */ + /* 0x60 */ +}; diff --git a/sal/textenc/tcvtjp4.tab b/sal/textenc/tcvtjp4.tab new file mode 100644 index 000000000..ba9af14b1 --- /dev/null +++ b/sal/textenc/tcvtjp4.tab @@ -0,0 +1,3576 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* japanese charsets: JIS201, JIS208 */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2171, 0x2172, 0, 0, 0, 0x2178, /* 0xA0 */ + 0x212F, 0, 0, 0, 0x224C, 0, 0, 0, /* 0xA0 */ + 0x216B, 0x215E, 0, 0, 0x212D, 0, 0x2279, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x215F, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x2160, /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, /* 0x90 */ + 0x2628, 0x2629, 0x262A, 0x262B, 0x262C, 0x262D, 0x262E, 0x262F, /* 0x90 */ + 0x2630, 0x2631, 0, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, /* 0xA0 */ + 0x2637, 0x2638, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, /* 0xB0 */ + 0x2648, 0x2649, 0x264A, 0x264B, 0x264C, 0x264D, 0x264E, 0x264F, /* 0xB0 */ + 0x2650, 0x2651, 0, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, /* 0xC0 */ + 0x2657, 0x2658 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2727, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729, /* 0x10 */ + 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731, /* 0x10 */ + 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, /* 0x20 */ + 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, /* 0x20 */ + 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759, /* 0x30 */ + 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x275F, 0x2760, 0x2761, /* 0x30 */ + 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, /* 0x40 */ + 0x276A, 0x276B, 0x276C, 0x276D, 0x276E, 0x276F, 0x2770, 0x2771, /* 0x40 */ + 0, 0x2757 /* 0x50 */ + /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x213E, 0, 0, 0, 0, 0x213D, 0x2142, 0, /* 0x10 */ + 0x2146, 0x2147, 0, 0, 0x2148, 0x2149, 0, 0, /* 0x10 */ + 0x2277, 0x2278, 0, 0, 0, 0x2145, 0x2144, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x2273, 0, 0x216C, 0x216D, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x2228 /* 0x30 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x216E, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x2D62, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x2D64, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x2272, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x2D35, 0x2D36, 0x2D37, 0x2D38, 0x2D39, 0x2D3A, 0x2D3B, 0x2D3C, /* 0x60 */ + 0x2D3D, 0x2D3E, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x222B, 0x222C, 0x222A, 0x222D, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x224D, 0, 0x224E /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x224F, 0, 0x225F, 0x2250, 0, 0, 0, 0x2260, /* 0x00 */ + 0x223A, 0, 0, 0x223B, 0, 0, 0, 0, /* 0x00 */ + 0, 0x2D74, 0x215D, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x2265, 0, 0, 0x2267, 0x2167, 0x2D78, /* 0x10 */ + 0x225C, 0, 0, 0, 0, 0, 0, 0x224A, /* 0x20 */ + 0x224B, 0x2241, 0x2240, 0x2269, 0x226A, 0, 0x2D73, 0, /* 0x20 */ + 0, 0, 0, 0, 0x2168, 0x2268, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x2266, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x2262, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x2162, 0x2261, 0, 0, 0, 0, 0x2165, 0x2166, /* 0x60 */ + 0, 0, 0x2263, 0x2264, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x223E, 0x223F, 0, 0, 0x223C, 0x223D, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x225D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x2D79 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_23[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x225E /* 0x10 */ + /* 0x10 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2D21, 0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D26, 0x2D27, 0x2D28, /* 0x60 */ + 0x2D29, 0x2D2A, 0x2D2B, 0x2D2C, 0x2D2D, 0x2D2E, 0x2D2F, 0x2D30, /* 0x60 */ + 0x2D31, 0x2D32, 0x2D33, 0x2D34 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2821, 0x282C, 0x2822, 0x282D, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x2823, 0, 0, 0x282E, /* 0x00 */ + 0x2824, 0, 0, 0x282F, 0x2826, 0, 0, 0x2831, /* 0x10 */ + 0x2825, 0, 0, 0x2830, 0x2827, 0x283C, 0, 0, /* 0x10 */ + 0x2837, 0, 0, 0x2832, 0x2829, 0x283E, 0, 0, /* 0x20 */ + 0x2839, 0, 0, 0x2834, 0x2828, 0, 0, 0x2838, /* 0x20 */ + 0x283D, 0, 0, 0x2833, 0x282A, 0, 0, 0x283A, /* 0x30 */ + 0x283F, 0, 0, 0x2835, 0x282B, 0, 0, 0x283B, /* 0x30 */ + 0, 0, 0x2840, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x2836, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x2223, 0x2222, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x2225, 0x2224, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x2227, 0x2226, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x2221, 0x217E, /* 0xC0 */ + 0, 0, 0, 0x217B, 0, 0, 0x217D, 0x217C, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x227E /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x217A, 0x2179, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x216A, 0, 0x2169, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x2276, 0, 0, 0x2275, 0, 0x2274 /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2121, 0x2122, 0x2123, 0x2137, 0, 0x2139, 0x213A, 0x213B, /* 0x00 */ + 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, /* 0x00 */ + 0x215A, 0x215B, 0x2229, 0x222E, 0x214C, 0x214D, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x2141, 0x2D60, 0, 0x2D61, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, /* 0x40 */ + 0x2428, 0x2429, 0x242A, 0x242B, 0x242C, 0x242D, 0x242E, 0x242F, /* 0x40 */ + 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, /* 0x50 */ + 0x2438, 0x2439, 0x243A, 0x243B, 0x243C, 0x243D, 0x243E, 0x243F, /* 0x50 */ + 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, /* 0x60 */ + 0x2448, 0x2449, 0x244A, 0x244B, 0x244C, 0x244D, 0x244E, 0x244F, /* 0x60 */ + 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, /* 0x70 */ + 0x2458, 0x2459, 0x245A, 0x245B, 0x245C, 0x245D, 0x245E, 0x245F, /* 0x70 */ + 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, /* 0x80 */ + 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, /* 0x80 */ + 0x2470, 0x2471, 0x2472, 0x2473, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x212B, 0x212C, 0x2135, 0x2136, 0, /* 0x90 */ + 0, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, /* 0xA0 */ + 0x2528, 0x2529, 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F, /* 0xA0 */ + 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, /* 0xB0 */ + 0x2538, 0x2539, 0x253A, 0x253B, 0x253C, 0x253D, 0x253E, 0x253F, /* 0xB0 */ + 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, /* 0xC0 */ + 0x2548, 0x2549, 0x254A, 0x254B, 0x254C, 0x254D, 0x254E, 0x254F, /* 0xC0 */ + 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, /* 0xD0 */ + 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F, /* 0xD0 */ + 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, /* 0xE0 */ + 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x256D, 0x256E, 0x256F, /* 0xE0 */ + 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0, /* 0xF0 */ + 0, 0, 0, 0x2126, 0x213C, 0x2133, 0x2134 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2D6A, 0x2D6B, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x2D6C, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x2D65, 0x2D66, 0x2D67, 0x2D68, /* 0xA0 */ + 0x2D69 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2D46, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x2D4A, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x2D41, 0, 0, 0, /* 0x10 */ + 0x2D44, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x2D42, 0x2D4C, 0, 0, 0x2D4B, 0x2D45, /* 0x20 */ + 0, 0, 0, 0x2D4D, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x2D47, 0, /* 0x30 */ + 0, 0, 0, 0x2D4F, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x2D40, 0x2D4E, 0, 0, 0x2D43, 0, 0, /* 0x40 */ + 0, 0x2D48, 0, 0, 0, 0, 0, 0x2D49, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x2D5F, 0x2D6F, 0x2D6E, 0x2D6D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x2D53, 0x2D54, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x2D50, 0x2D51, 0x2D52, 0, /* 0x90 */ + 0, 0x2D56, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x2D55, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x2D63 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x306C, 0x437A, 0, 0x3C37, 0, 0, 0, 0x4B7C, /* 0x00 */ + 0x3E66, 0x3B30, 0x3E65, 0x323C, 0, 0x4954, 0x4D3F, 0, /* 0x00 */ + 0x5022, 0x312F, 0, 0, 0x336E, 0x5023, 0x4024, 0x5242, /* 0x10 */ + 0x3556, 0x4A3A, 0, 0, 0, 0, 0x3E67, 0, /* 0x10 */ + 0, 0x4E3E, 0, 0, 0, 0, 0x4A42, 0, /* 0x20 */ + 0, 0, 0x5024, 0, 0, 0x4366, 0, 0, /* 0x20 */ + 0, 0x5025, 0x367A, 0, 0, 0, 0x5026, 0, /* 0x30 */ + 0x345D, 0x4330, 0, 0x3C67, 0x5027, 0, 0, 0x5028, /* 0x30 */ + 0, 0, 0x5029, 0x4735, 0, 0x3557, 0, 0, /* 0x40 */ + 0, 0, 0, 0x4737, 0, 0x4663, 0x3843, 0x4B33, /* 0x40 */ + 0, 0, 0, 0, 0, 0x6949, 0x502A, 0x3E68, /* 0x50 */ + 0x502B, 0x3235, 0, 0, 0, 0x3665, 0x3870, 0x4C69, /* 0x50 */ + 0, 0, 0x5626, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x4D70, 0, 0x467D, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x3425, 0, /* 0x70 */ + 0x3535, 0, 0x502C, 0, 0, 0x502D, 0x4E3B, 0, /* 0x80 */ + 0x4D3D, 0x4168, 0x502F, 0x3B76, 0x4673, 0, 0x5032, 0, /* 0x80 */ + 0, 0x313E, 0x385F, 0, 0x385E, 0x3066, 0, 0, /* 0x90 */ + 0x4F4B, 0x4F4A, 0, 0x3A33, 0x3021, 0, 0x5033, 0x5034, /* 0x90 */ + 0x5035, 0x4B34, 0x5036, 0, 0x3872, 0x3067, 0x4B72, 0, /* 0xA0 */ + 0x357C, 0, 0, 0x357D, 0x357E, 0x4462, 0x4E3C, 0, /* 0xA0 */ + 0x5037, 0, 0, 0x5038, 0, 0, 0x5039, 0, /* 0xB0 */ + 0, 0, 0x3F4D, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3D3A, 0x3F4E, 0x503E, 0, 0x503C, 0, 0x503D, 0x3558, /* 0xC0 */ + 0, 0, 0x3A23, 0x3270, 0, 0x503B, 0x503A, 0x4A29, /* 0xC0 */ + 0, 0, 0, 0, 0x3B46, 0x3B45, 0x423E, 0x503F, /* 0xD0 */ + 0x4955, 0x4067, 0, 0, 0, 0x2138, 0x5040, 0x5042, /* 0xD0 */ + 0, 0, 0, 0x4265, 0x4E61, 0x304A, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x5041, 0x323E, 0, /* 0xE0 */ + 0x3644, 0, 0x4367, 0, 0, 0, 0x376F, 0x5043, /* 0xF0 */ + 0, 0, 0, 0x4724 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x346B, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5044, 0x304B, 0, 0, 0x3860, 0x346C, 0x497A, /* 0x00 */ + 0x4832, 0x3559, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x3271, 0, 0x5067, 0x4541, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x476C, /* 0x20 */ + 0x5046, 0, 0, 0, 0x483C, 0, 0x4E62, 0, /* 0x30 */ + 0x3F2D, 0, 0x3B47, 0, 0x3B77, 0x3240, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4451, 0, 0, 0x4322, 0x504A, /* 0x40 */ + 0, 0, 0, 0, 0, 0x304C, 0x4463, 0x3D3B, /* 0x40 */ + 0x3A34, 0x4D24, 0, 0x424E, 0, 0x323F, 0, 0x5049, /* 0x50 */ + 0, 0x4D3E, 0x5045, 0x5047, 0x3A6E, 0x5048, 0x5524, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x5050, 0, 0, 0, 0, 0, 0x5053, /* 0x60 */ + 0x5051, 0, 0, 0x3242, 0, 0x4A3B, 0x504B, 0, /* 0x70 */ + 0, 0, 0, 0x504F, 0x3873, 0, 0, 0x3B48, /* 0x70 */ + 0, 0, 0, 0x3426, 0, 0, 0x5054, 0, /* 0x80 */ + 0x504C, 0, 0, 0x4E63, 0, 0x3B78, 0, 0x504D, /* 0x80 */ + 0, 0x5052, 0, 0, 0, 0, 0x5055, 0, /* 0x90 */ + 0x504E, 0, 0, 0x3621, 0, 0x304D, 0, 0, /* 0x90 */ + 0x3622, 0x3241, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x5525, 0, 0x4B79, 0x496E, 0x3874, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x3F2F, 0x4E37, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x4A58, /* 0xB0 */ + 0, 0, 0x3738, 0x4225, 0x3264, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x3D53, 0, 0, 0, 0x5059, 0, /* 0xC0 */ + 0x505E, 0x505C, 0, 0, 0x5057, 0, 0, 0x422F, /* 0xD0 */ + 0x505A, 0, 0x505D, 0x505B, 0, 0x4A5D, 0, 0x5058, /* 0xD0 */ + 0, 0x3F2E, 0, 0x4B73, 0x505F, 0x5060, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3D24, 0x506D, /* 0xE0 */ + 0, 0, 0, 0x4750, 0, 0x4936, 0x5068, 0, /* 0xF0 */ + 0x4A70, 0, 0x3236, 0, 0, 0, 0x506C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5066, 0x506F, 0, /* 0x00 */ + 0, 0x4152, 0, 0x3844, 0, 0x475C, 0, 0x6047, /* 0x00 */ + 0, 0x506E, 0x455D, 0, 0x5063, 0, 0x3876, 0, /* 0x10 */ + 0, 0x3875, 0x5061, 0, 0, 0, 0, 0x3C5A, /* 0x10 */ + 0, 0x5069, 0, 0x4A6F, 0x434D, 0x5065, 0x3771, 0, /* 0x20 */ + 0x5062, 0x506A, 0x5064, 0x4E51, 0x506B, 0x4F41, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x3666, 0, /* 0x30 */ + 0, 0x3770, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x5070, 0, 0, 0, 0x5071, /* 0x40 */ + 0x5075, 0x304E, 0, 0, 0, 0, 0, 0x4A50, /* 0x40 */ + 0x5074, 0, 0, 0, 0, 0x5073, 0x5077, 0, /* 0x50 */ + 0, 0, 0x5076, 0, 0x4464, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x3772, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x5078, 0, 0, 0, /* 0x60 */ + 0, 0, 0x3C45, 0, 0x4226, 0x4465, 0x3676, 0, /* 0x70 */ + 0x5079, 0, 0, 0, 0, 0x3536, 0, 0, /* 0x70 */ + 0x507A, 0, 0, 0, 0, 0x507C, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4B35, 0, 0, /* 0x80 */ + 0, 0x3766, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x3B31, 0x4877, 0x507B, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x3A45, 0x4D43, 0, 0, /* 0xA0 */ + 0, 0, 0x507E, 0x5123, 0x507D, 0x3A44, 0, 0x3D7D, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x3739, 0, /* 0xB0 */ + 0, 0, 0x5124, 0, 0, 0x364F, 0, 0, /* 0xC0 */ + 0, 0x5121, 0x5122, 0, 0, 0x462F, 0, 0x417C, /* 0xC0 */ + 0, 0x3623, 0, 0, 0, 0x4B4D, 0x5125, 0, /* 0xD0 */ + 0, 0, 0x4E3D, 0, 0, 0, 0x5126, 0, /* 0xD0 */ + 0, 0, 0, 0x5129, 0, 0x5127, 0, 0x414E, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x5128, 0x512A, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x512C, 0, 0, /* 0xF0 */ + 0, 0x512B, 0, 0x4A48 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3537, 0x512E, 0x512F, 0, 0x322F, 0, 0, 0, /* 0x00 */ + 0, 0x512D, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x3C74, 0, 0x5132, 0x5131, 0x5130, 0, /* 0x10 */ + 0x5056, 0, 0x5133, 0, 0, 0, 0, 0x3D7E, /* 0x10 */ + 0, 0x5134, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x4D25, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x4C59, 0, 0, 0, 0, 0x5136, /* 0x30 */ + 0, 0, 0x5135, 0x5138, 0x5137, 0, 0, 0x5139, /* 0x30 */ + 0x513A, 0x3074, 0, 0x3835, 0x373B, 0x3D3C, 0x437B, 0x3624, /* 0x40 */ + 0x4068, 0x3877, 0, 0x396E, 0x513C, 0x4C48, 0x4546, 0, /* 0x40 */ + 0x3B79, 0, 0x513B, 0, 0x513D, 0, 0, 0, /* 0x50 */ + 0, 0, 0x455E, 0, 0x3375, 0, 0, 0, /* 0x50 */ + 0, 0, 0x513E, 0, 0, 0x467E, 0, 0, /* 0x60 */ + 0x4134, 0x5140, 0x5141, 0x482C, 0x3878, 0x4F3B, 0x5142, 0, /* 0x60 */ + 0, 0x3626, 0, 0, 0, 0x4A3C, 0x4236, 0x3671, /* 0x70 */ + 0x4535, 0, 0, 0, 0x3773, 0, 0, 0, /* 0x70 */ + 0x5143, 0, 0x5144, 0, 0, 0x4662, 0x315F, 0, /* 0x80 */ + 0, 0x5147, 0x3A7D, 0, 0x5146, 0x3A46, 0, 0x5148, /* 0x80 */ + 0x666E, 0x5149, 0x4B41, 0x514A, 0, 0x514B, 0x514C, 0x3E69, /* 0x90 */ + 0, 0x3C4C, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x3427, 0, 0x514F, 0, 0x514D, 0x4C3D, 0x514E, 0, /* 0xA0 */ + 0x495A, 0x5150, 0x5151, 0x5152, 0x455F, 0, 0, 0, /* 0xA0 */ + 0x5156, 0x5154, 0x5155, 0x5153, 0x3A63, 0x5157, 0x4C6A, 0x4E64, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x5158, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x4028, 0x5159, 0x3D5A, 0, /* 0xC0 */ + 0, 0x515A, 0, 0x437C, 0x4E3F, 0x4560, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x5245, 0, /* 0xD0 */ + 0, 0, 0, 0x515B, 0x7425, 0x3645, 0, 0, /* 0xD0 */ + 0x515C, 0x4B5E, 0, 0, 0, 0, 0x3D68, 0x427C, /* 0xE0 */ + 0, 0x515E, 0x4664, 0, 0, 0x515F, 0, 0, /* 0xE0 */ + 0x5160, 0x332E, 0, 0, 0, 0x5161, 0x3627, 0, /* 0xF0 */ + 0x464C, 0x317A, 0x3D50, 0, 0, 0x4821, 0x5162 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4561, 0, 0, 0x3F4F, 0x5163, 0, 0x4A2C, 0x405A, /* 0x00 */ + 0x3422, 0, 0x3429, 0x5164, 0, 0, 0x5166, 0, /* 0x00 */ + 0, 0x373A, 0, 0, 0x5165, 0, 0, 0x4E73, /* 0x10 */ + 0, 0, 0, 0, 0, 0x3D69, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x483D, 0x4A4C, 0, 0x5167, /* 0x20 */ + 0, 0x4D78, 0x5168, 0, 0, 0, 0x5169, 0, /* 0x20 */ + 0x457E, 0, 0, 0x516A, 0, 0, 0x4029, 0x3A7E, /* 0x30 */ + 0x3774, 0x516B, 0x3B49, 0x396F, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4466, 0x516D, 0, 0, 0x4227, /* 0x40 */ + 0, 0, 0x3A6F, 0x516E, 0x516F, 0x4130, 0, 0x516C, /* 0x40 */ + 0, 0, 0, 0, 0x5171, 0, 0x4B36, 0, /* 0x50 */ + 0, 0, 0, 0x3964, 0, 0, 0x5170, 0, /* 0x50 */ + 0, 0, 0, 0x3775, 0x3A5E, 0x476D, 0, 0, /* 0x60 */ + 0, 0x5174, 0x5172, 0, 0, 0, 0, 0x497B, /* 0x60 */ + 0x3E6A, 0x517B, 0x3364, 0x5175, 0x5173, 0x414F, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x5177, 0, 0x5176, /* 0x70 */ + 0, 0, 0, 0x3344, 0, 0, 0, 0x3760, /* 0x80 */ + 0x517C, 0x4E2D, 0, 0, 0, 0x5178, 0, 0, /* 0x80 */ + 0, 0x517D, 0x517A, 0, 0x5179, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x4E4F, 0, 0, 0, 0x3879, /* 0x90 */ + 0x3243, 0, 0, 0x4E74, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x3D75, 0x4558, 0x3965, 0x5222, 0x5223, 0, 0, /* 0xA0 */ + 0, 0x4E65, 0, 0, 0x4F2B, 0x5225, 0, 0, /* 0xB0 */ + 0, 0x387A, 0, 0, 0x5224, 0, 0x332F, 0, /* 0xB0 */ + 0, 0x5226, 0, 0x4B56, 0, 0x443C, 0, 0x4D26, /* 0xC0 */ + 0, 0x4A59, 0, 0, 0, 0x5227, 0, 0, /* 0xC0 */ + 0, 0, 0x7055, 0, 0, 0x4630, 0, 0x5228, /* 0xD0 */ + 0x342A, 0x4C33, 0, 0, 0, 0x3E21, 0x5229, 0x4A67, /* 0xD0 */ + 0x522D, 0, 0x402A, 0x522A, 0x3650, 0, 0x522B, 0x342B, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x372E, 0x522E, 0, 0x522F, 0, 0, /* 0xF0 */ + 0x5230, 0x5231, 0x3C5B, 0, 0, 0, 0x387B, 0x4C5E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4C68, 0x4677, 0, 0, 0x4A71, 0x5232, 0, /* 0x00 */ + 0x5233, 0, 0, 0, 0, 0x5235, 0, 0x5237, /* 0x00 */ + 0x5236, 0, 0, 0, 0, 0x5238, 0x323D, 0x4B4C, /* 0x10 */ + 0, 0x3A7C, 0x5239, 0, 0, 0x4159, 0, 0, /* 0x10 */ + 0x3E22, 0x3629, 0, 0x523A, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x485B, 0, 0, 0, 0, 0x523B, /* 0x20 */ + 0, 0x523C, 0, 0x523D, 0, 0, 0, 0, /* 0x30 */ + 0x523E, 0x4924, 0x3668, 0x3065, 0, 0, 0, 0x463F, /* 0x30 */ + 0x523F, 0x3D3D, 0, 0x4069, 0, 0x5241, 0x5240, 0x3E23, /* 0x40 */ + 0x3861, 0x5243, 0x483E, 0, 0, 0x5244, 0, 0, /* 0x40 */ + 0, 0x485C, 0x4234, 0x426E, 0x3628, 0, 0, 0x466E, /* 0x50 */ + 0x4331, 0, 0x476E, 0, 0x4B4E, 0, 0x5246, 0, /* 0x50 */ + 0x406A, 0, 0, 0, 0, 0, 0x3735, 0, /* 0x60 */ + 0, 0x5247, 0, 0, 0, 0, 0x5248, 0x312C, /* 0x60 */ + 0x3075, 0x346D, 0, 0x4228, 0x3551, 0x4D71, 0, 0x524B, /* 0x70 */ + 0x3237, 0, 0, 0x524A, 0, 0, 0, 0x362A, /* 0x70 */ + 0, 0, 0x524C, 0, 0x4C71, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x524D, 0, /* 0x90 */ + 0x4E52, 0, 0x387C, 0, 0, 0, 0, 0x3836, /* 0x90 */ + 0x524E, 0, 0, 0, 0, 0x5250, 0x524F, 0, /* 0xA0 */ + 0x3F5F, 0x3139, 0, 0, 0, 0x315E, 0x5251, 0, /* 0xA0 */ + 0x5252, 0, 0, 0x3837, 0, 0, 0x5253, 0, /* 0xB0 */ + 0, 0, 0, 0x356E, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x3B32, 0x5254, 0, 0, 0, 0, /* 0xC0 */ + 0x4B74, 0x3A35, 0x355A, 0x4D27, 0x4150, 0x483F, 0x3C7D, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x3D47, 0, 0x3C68, 0x3C75, /* 0xD0 */ + 0, 0x3D76, 0, 0x4840, 0, 0, 0, 0x5257, /* 0xD0 */ + 0, 0x3143, 0x4151, 0x387D, 0x3845, 0x3667, 0, 0, /* 0xE0 */ + 0x525B, 0x4321, 0x427E, 0x362B, 0x3E24, 0x525C, 0x525A, 0x3244, /* 0xE0 */ + 0x4266, 0x3C38, 0x3B4B, 0x3126, 0, 0, 0x3370, 0x3966, /* 0xF0 */ + 0x3B4A, 0, 0x525D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x525E, 0, 0x3549, 0x3346, 0, 0, 0, /* 0x00 */ + 0x3967, 0x3548, 0x445F, 0x3125, 0x4631, 0x4C3E, 0x3921, 0x4D79, /* 0x00 */ + 0x4547, 0x387E, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x372F, 0, 0x5267, 0, 0x3663, /* 0x10 */ + 0x4B4A, 0, 0, 0, 0, 0, 0x485D, 0, /* 0x20 */ + 0, 0x5266, 0, 0x345E, 0x5261, 0x5262, 0x5264, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x5265, 0, /* 0x30 */ + 0x355B, 0x3F61, 0, 0x4A2D, 0x5263, 0x525F, 0x3863, 0, /* 0x30 */ + 0x5260, 0, 0x4F24, 0, 0, 0, 0x4A72, 0, /* 0x40 */ + 0x4468, 0x3862, 0x3970, 0, 0, 0, 0x5268, 0, /* 0x40 */ + 0, 0x465D, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x526C, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x3C7E, 0, 0x3C76, 0, 0, 0, 0, 0, /* 0x60 */ + 0x526F, 0x526D, 0, 0x4C23, 0, 0x526A, 0x5273, 0x526E, /* 0x70 */ + 0, 0, 0, 0x5271, 0x3846, 0x4C3F, 0, 0, /* 0x70 */ + 0x5272, 0, 0, 0, 0x5274, 0, 0x5276, 0, /* 0x80 */ + 0, 0, 0, 0x3A70, 0x4F42, 0, 0x526B, 0x5269, /* 0x80 */ + 0x5275, 0, 0x5270, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x5278, 0, 0x5323, 0x527A, 0, 0, /* 0xA0 */ + 0x527E, 0, 0, 0x5321, 0x527B, 0, 0, 0x533E, /* 0xA0 */ + 0, 0, 0x3A69, 0x3331, 0, 0, 0, 0, /* 0xB0 */ + 0x5279, 0, 0, 0, 0x5325, 0x3076, 0x5324, 0, /* 0xB0 */ + 0x3025, 0x494A, 0x5322, 0, 0x527C, 0, 0, 0x5277, /* 0xC0 */ + 0x527D, 0x3A48, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x5326, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x3077, 0x532F, 0, 0, 0x5327, 0x5328, 0, /* 0xE0 */ + 0x3E25, 0x4B69, 0, 0, 0, 0x532D, 0x532C, 0, /* 0xE0 */ + 0, 0, 0x452F, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x532E, 0, 0, 0x532B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3134, 0, 0x3A36, 0x3F30, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x5329, /* 0x00 */ + 0x4562, 0, 0, 0, 0x532A, 0, 0x3022, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x5334, 0x4D23, /* 0x20 */ + 0, 0x3E27, 0, 0x533A, 0, 0, 0, 0, /* 0x30 */ + 0x5339, 0x5330, 0, 0, 0, 0, 0x4243, 0, /* 0x30 */ + 0x5331, 0, 0, 0, 0x426F, 0x5336, 0x3E26, 0, /* 0x40 */ + 0, 0, 0, 0, 0x5333, 0, 0, 0x4C64, /* 0x40 */ + 0, 0, 0, 0x373C, 0, 0, 0x5337, 0x5338, /* 0x50 */ + 0, 0, 0, 0, 0x5335, 0x533B, 0, 0, /* 0x50 */ + 0, 0, 0, 0x5332, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x5341, 0x5346, 0, 0x5342, 0, /* 0x70 */ + 0x533D, 0, 0, 0x5347, 0x4131, 0, 0, 0x5349, /* 0x80 */ + 0, 0x3922, 0x533F, 0x437D, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x5343, 0x533C, 0x342D, 0, 0x346E, 0x3365, 0x5344, 0x5340, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x3776, /* 0xA0 */ + 0x534A, 0x5348, 0x4153, 0x354A, 0x362C, 0, 0x5345, 0, /* 0xA0 */ + 0x3674, 0, 0, 0, 0, 0, 0x3144, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x534E, 0x534C, 0, 0x5427, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x5351, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x534B, 0, 0x534F, 0, 0, 0x534D, /* 0xD0 */ + 0, 0, 0, 0x3B4C, 0x5350, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5353, /* 0xF0 */ + 0, 0x5358, 0, 0, 0, 0x5356, 0x5355 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4332, 0, /* 0x00 */ + 0, 0x3245, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x5352, 0, 0x5354, 0x3E28, /* 0x10 */ + 0x3133, 0, 0, 0x5357, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x325E, 0, 0, 0, 0, 0, 0x5362, /* 0x20 */ + 0, 0x3E7C, 0x535E, 0, 0x535C, 0, 0x535D, 0, /* 0x30 */ + 0x535F, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x313D, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x4139, 0, 0x5359, 0, /* 0x40 */ + 0x535A, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x337A, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x5361, 0, 0, 0, /* 0x60 */ + 0x346F, 0, 0x5364, 0x5360, 0x5363, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x4A2E, 0, 0, 0, /* 0x70 */ + 0x4655, 0, 0x4838, 0, 0, 0, 0, 0, /* 0x70 */ + 0x5366, 0, 0, 0, 0, 0, 0x5365, 0x3345, /* 0x80 */ + 0, 0, 0x5367, 0, 0, 0, 0, 0x536A, /* 0x80 */ + 0, 0, 0, 0, 0x5369, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x5368, 0, 0x4739, 0, 0, 0x536B, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x536C, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x536E, 0, 0x536D, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x5370, 0, 0, 0, /* 0xB0 */ + 0x5373, 0x5371, 0x536F, 0x5372, 0, 0, 0, 0, /* 0xC0 */ + 0x5374, 0, 0, 0, 0, 0, 0x5375, 0, /* 0xC0 */ + 0, 0x5376, 0, 0x5377, 0, 0, 0, 0x5378, /* 0xD0 */ + 0x5145, 0, 0x3C7C, 0x3B4D, 0, 0, 0x3273, 0, /* 0xD0 */ + 0x3078, 0, 0, 0x4344, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x5379, 0, /* 0xE0 */ + 0x3A24, 0, 0x304F, 0x3F5E, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x537A, 0x3847, 0, 0, 0x3971, 0, 0x537C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x537B, 0, 0, 0x4A60, 0x537D, 0, 0, 0, /* 0x00 */ + 0x5421, 0x537E, 0, 0x5422, 0, 0x5423, 0, 0x3777, /* 0x00 */ + 0, 0, 0x3160, 0x5424, 0, 0, 0x5426, 0, /* 0x10 */ + 0x5425, 0, 0, 0, 0x5428, 0, 0, 0x455A, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x5429, 0x3035, /* 0x20 */ + 0x3A5F, 0, 0, 0, 0, 0x373D, 0, 0, /* 0x20 */ + 0x434F, 0, 0, 0, 0, 0, 0, 0x542A, /* 0x30 */ + 0x542B, 0, 0, 0x542D, 0, 0, 0, 0, /* 0x30 */ + 0x542E, 0, 0x3A64, 0, 0, 0, 0, 0x3651, /* 0x40 */ + 0, 0, 0x4B37, 0, 0, 0, 0x542C, 0x542F, /* 0x40 */ + 0x3A41, 0x3923, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x5433, 0, 0, 0x3A25, 0, 0x4333, 0, /* 0x60 */ + 0, 0x5430, 0x445A, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x5434, /* 0x70 */ + 0, 0, 0x3F62, 0, 0, 0, 0, 0, /* 0x80 */ + 0x5432, 0x5435, 0, 0x373F, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x5436, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x5437, 0, 0x3924, 0x3340, 0x5439, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x543A, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x543B, 0, 0, 0x5438, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x5431, 0, 0, 0x543C, 0, 0, 0x543D, 0, /* 0xC0 */ + 0, 0, 0, 0x4B64, 0, 0, 0x3E6B, 0, /* 0xC0 */ + 0, 0, 0x543F, 0x5440, 0x543E, 0, 0x5442, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x4738, 0, 0, 0x3068, /* 0xD0 */ + 0x4956, 0, 0, 0x5443, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x3E7D, 0, 0, 0x3C39, /* 0xF0 */ + 0, 0x475D, 0x3470, 0, 0x3A6B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4B59, 0, 0x4632, 0, 0, 0x3778, 0x424F, 0, /* 0x00 */ + 0, 0, 0x5441, 0x5444, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x4244, 0, 0, /* 0x10 */ + 0, 0x5445, 0, 0, 0, 0x5446, 0, 0, /* 0x10 */ + 0, 0x5448, 0, 0, 0x4469, 0, 0, 0, /* 0x20 */ + 0, 0, 0x342E, 0, 0, 0, 0, 0x7421, /* 0x20 */ + 0x3161, 0x4A73, 0, 0, 0x3E6C, 0x4548, 0, 0, /* 0x30 */ + 0, 0, 0x3A66, 0, 0, 0x544E, 0, 0, /* 0x30 */ + 0x4A3D, 0x4E5D, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x3274, 0x544A, 0, 0, 0, 0, /* 0x40 */ + 0, 0x413A, 0x544D, 0, 0x4563, 0, 0, 0x4549, /* 0x50 */ + 0x4564, 0x4839, 0x444D, 0, 0, 0, 0x3A49, 0, /* 0x50 */ + 0, 0, 0x5449, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x3176, 0, 0x4536, 0, 0, 0, 0, /* 0x60 */ + 0x544B, 0, 0x5447, 0, 0, 0x3F50, 0, 0, /* 0x70 */ + 0, 0x544F, 0, 0, 0, 0, 0x3D4E, 0, /* 0x70 */ + 0, 0, 0, 0x362D, 0, 0x5450, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x4A68, 0, 0, 0, 0x417D, /* 0x90 */ + 0, 0, 0, 0, 0x4446, 0, 0, 0x5452, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x4B4F, 0, 0, 0x5453, 0, 0, 0x5458, 0, /* 0xA0 */ + 0, 0, 0, 0x4A2F, 0, 0, 0, 0, /* 0xB0 */ + 0x5457, 0x5451, 0x5454, 0x5456, 0, 0, 0x3A26, 0, /* 0xB0 */ + 0, 0x4A49, 0, 0, 0, 0x5459, 0, 0x4345, /* 0xC0 */ + 0, 0, 0x3275, 0, 0x3E6D, 0, 0, 0, /* 0xC0 */ + 0, 0x545B, 0, 0x545A, 0, 0x3968, 0, 0x545C, /* 0xD0 */ + 0x545E, 0x545D, 0, 0, 0x5460, 0, 0x5455, 0x5462, /* 0xD0 */ + 0, 0, 0, 0, 0x5461, 0x545F, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x3B4E, 0x3F51, 0, 0x4154, 0x5463, /* 0xE0 */ + 0x403C, 0x306D, 0x4764, 0, 0, 0, 0, 0x445B, /* 0xF0 */ + 0, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5469, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x4A51, 0x546A, 0, 0, 0, 0, 0x3246, /* 0x00 */ + 0x546B, 0, 0, 0, 0, 0x4D3C, 0x3330, 0, /* 0x10 */ + 0x5249, 0x3D48, 0x423F, 0x546C, 0x4C6B, 0, 0, 0, /* 0x10 */ + 0, 0, 0x4C34, 0, 0, 0x546E, 0, 0x4267, /* 0x20 */ + 0, 0x4537, 0x4240, 0x4957, 0x546F, 0x5470, 0x317B, 0, /* 0x20 */ + 0, 0x3C3A, 0x5471, 0, 0, 0, 0, 0x3050, /* 0x30 */ + 0x5472, 0, 0, 0, 0, 0, 0x5473, 0, /* 0x30 */ + 0, 0, 0, 0, 0x3162, 0, 0, 0x3471, /* 0x40 */ + 0x4660, 0x4A74, 0, 0, 0, 0, 0x5477, 0x4155, /* 0x40 */ + 0x5476, 0x3740, 0, 0, 0x4B5B, 0x5475, 0, 0x4565, /* 0x50 */ + 0x5479, 0, 0x5478, 0, 0, 0, 0, 0, /* 0x50 */ + 0x547B, 0, 0x547A, 0, 0, 0x317C, 0, 0x547C, /* 0x60 */ + 0x3E29, 0x547E, 0x4325, 0, 0x547D, 0, 0x4A33, 0, /* 0x60 */ + 0, 0, 0, 0x3D77, 0x455B, 0, 0, 0, /* 0x70 */ + 0x5521, 0, 0, 0, 0, 0x3925, 0, 0, /* 0x70 */ + 0, 0x5522, 0x4721, 0x485E, 0x4C51, 0, 0, 0, /* 0x80 */ + 0, 0, 0x4725, 0, 0, 0x552B, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3538, 0, 0, 0x4D45, 0, /* 0x90 */ + 0, 0x4C2F, 0, 0x562C, 0, 0x5523, 0, 0, /* 0x90 */ + 0, 0, 0, 0x5526, 0, 0x4245, 0, 0, /* 0xA0 */ + 0x4B38, 0, 0, 0, 0x454A, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x5527, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x4B65, 0, 0x3A4A, 0, 0, 0x3E2A, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x5528, 0, /* 0xC0 */ + 0, 0x3B50, 0, 0x3B4F, 0, 0, 0, 0, /* 0xC0 */ + 0x3039, 0x3848, 0, 0x402B, 0x3051, 0, 0, 0, /* 0xD0 */ + 0, 0x552C, 0x552D, 0, 0x552A, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x3138, 0x342F, 0, /* 0xE0 */ + 0x5529, 0, 0x4C45, 0x4931, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3028, 0, /* 0xF0 */ + 0, 0, 0, 0x3079, 0, 0, 0, 0x3B51 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3052, 0, 0x3023, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5532, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5530, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x4C3C, 0, 0x5533, 0, 0x5531, 0, 0, 0x552F, /* 0x10 */ + 0x3F31, 0, 0, 0, 0, 0x552E, 0, 0, /* 0x20 */ + 0, 0x4A5A, 0, 0, 0, 0, 0, 0x3864, /* 0x20 */ + 0, 0, 0, 0, 0, 0x5537, 0x5538, 0, /* 0x30 */ + 0, 0, 0, 0, 0x3E2B, 0, 0, 0, /* 0x30 */ + 0x5534, 0x4F2C, 0, 0, 0, 0, 0x474C, 0, /* 0x40 */ + 0, 0x5536, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x3A27, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x5539, 0, 0, 0, 0x4958, 0, /* 0x60 */ + 0, 0, 0x553A, 0, 0x5535, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x4C3B, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x475E, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x553B, 0x4932, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x553C, 0x5540, 0x553D, 0, /* 0xB0 */ + 0, 0x3247, 0x553F, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x3C3B, 0, 0x553E, 0x3779, 0, 0, 0, /* 0xC0 */ + 0x554C, 0, 0, 0, 0, 0, 0x5545, 0x5542, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x4364, 0, 0x5541, 0, 0, 0x5543, 0, /* 0xE0 */ + 0, 0x5544, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x5546, 0x5547 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x3472, 0, 0x5549, 0x5548, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x554A, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x3E6E, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x554D, 0, 0x445C, 0, 0, 0, /* 0x20 */ + 0x3145, 0, 0x554B, 0, 0, 0, 0x554E, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x554F, 0, /* 0x30 */ + 0x5552, 0, 0, 0x5550, 0, 0x5551, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x3B52, 0x5553, 0, 0, 0x3926, 0x5554, 0, 0x3B7A, /* 0x50 */ + 0x4238, 0, 0x5555, 0x5556, 0x3B5A, 0x3927, 0, 0x4C52, /* 0x50 */ + 0, 0, 0, 0x3528, 0x3849, 0x5557, 0x3358, 0, /* 0x60 */ + 0, 0x5558, 0, 0x4239, 0, 0, 0, 0, /* 0x60 */ + 0x5559, 0x5623, 0, 0x555A, 0, 0x555B, 0, 0, /* 0x70 */ + 0x555C, 0, 0x555E, 0, 0, 0, 0, 0, /* 0x70 */ + 0x555F, 0, 0, 0x5560, 0, 0x4270, 0, 0x3127, /* 0x80 */ + 0x3C69, 0x3042, 0, 0x4157, 0x3430, 0x3C35, 0, 0x3928, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4566, 0, 0x3D21, /* 0x90 */ + 0x3431, 0x4368, 0x446A, 0x3038, 0x3539, 0x4A75, 0, 0x3C42, /* 0x90 */ + 0, 0, 0x3552, 0x406B, 0x3C3C, 0x4D28, 0x5561, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x355C, 0, /* 0xA0 */ + 0x3A4B, 0, 0, 0x3332, 0x3163, 0x3E2C, 0x3248, 0, /* 0xB0 */ + 0x5562, 0x4D46, 0, 0, 0, 0, 0, 0x3D49, /* 0xB0 */ + 0, 0, 0x3C64, 0x5563, 0x3473, 0x4652, 0x4C29, 0x5564, /* 0xC0 */ + 0, 0x5565, 0, 0, 0x4959, 0, 0, 0, /* 0xC0 */ + 0x5567, 0, 0x3428, 0x3677, 0x5566, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x3432, 0, 0x3F32, 0x556B, 0x3B21, /* 0xD0 */ + 0, 0x3249, 0x556A, 0, 0x5568, 0x556C, 0x5569, 0x472B, /* 0xE0 */ + 0x5C4D, 0x3F33, 0, 0x556D, 0, 0, 0x4E40, 0, /* 0xE0 */ + 0x556E, 0, 0, 0x5570, 0, 0x437E, 0x556F, 0, /* 0xF0 */ + 0x4023, 0, 0x3B7B, 0, 0, 0, 0x4250, 0x3C77 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4975, 0x406C, 0, 0x3C4D, 0x5571, 0x3E2D, 0x5572, /* 0x00 */ + 0x5573, 0x3053, 0x423A, 0x3F52, 0, 0x5574, 0x4633, 0x3E2E, /* 0x00 */ + 0, 0x3E2F, 0, 0x5575, 0, 0, 0x406D, 0, /* 0x10 */ + 0, 0, 0x3E30, 0, 0, 0, 0, 0, /* 0x10 */ + 0x5576, 0, 0x5577, 0, 0x4C60, 0, 0, 0, /* 0x20 */ + 0x5578, 0, 0, 0, 0, 0x3646, 0, 0, /* 0x20 */ + 0, 0x3D22, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x5579, 0x557A, 0x3C5C, 0x3F2C, 0x4674, 0x3F54, 0x4878, 0x4722, /* 0x30 */ + 0x3649, 0x557B, 0, 0, 0, 0x356F, 0x557C, 0, /* 0x40 */ + 0x367E, 0, 0x464F, 0x3230, 0, 0x3B53, 0x557D, 0x5622, /* 0x40 */ + 0x5621, 0x367D, 0, 0x557E, 0, 0x4538, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x4230, 0, /* 0x50 */ + 0x454B, 0x3C48, 0, 0, 0x4158, 0x4D7A, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x5624, 0, 0x5625, 0x4656, /* 0x60 */ + 0, 0x3B33, 0, 0, 0, 0, 0x5627, 0, /* 0x70 */ + 0, 0x5628, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x5629, 0, 0, 0, /* 0x80 */ + 0x3474, 0x562A, 0, 0, 0x562B, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x322C, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x413B, 0x3464, 0, 0x562D, 0x4C28, 0, 0, 0, /* 0xA0 */ + 0, 0x4252, 0, 0x3359, 0, 0, 0x562F, 0x5631, /* 0xB0 */ + 0x345F, 0, 0, 0x562E, 0x5630, 0, 0x5633, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x5632, 0, 0x5634, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x5635, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x463D, 0x362E, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x3265, 0x5636, 0x563B, 0, 0, 0x5639, 0, 0x4A77, /* 0xE0 */ + 0x4A76, 0, 0, 0, 0, 0, 0x4567, 0, /* 0xF0 */ + 0, 0, 0x5638, 0x3D54, 0, 0x5637 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3F72, /* 0x00 */ + 0, 0, 0, 0x563C, 0, 0, 0x3A6A, 0, /* 0x00 */ + 0, 0x5642, 0, 0, 0x5643, 0x563D, 0x3333, 0x563E, /* 0x10 */ + 0x5647, 0x5646, 0x5645, 0x5641, 0, 0, 0, 0x5640, /* 0x10 */ + 0, 0, 0x5644, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x4A78, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x564B, 0x5648, 0, 0x564A, 0, /* 0x40 */ + 0x4D72, 0, 0x5649, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x563F, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x3F73, 0, 0, 0x564C, 0, 0, 0x3A37, /* 0x60 */ + 0, 0, 0, 0x564D, 0, 0, 0x564E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x5651, 0, 0x5650, 0, 0, 0x564F, /* 0x80 */ + 0, 0, 0, 0x4568, 0x563A, 0, 0, 0, /* 0x80 */ + 0x5657, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x5653, 0, 0, /* 0x90 */ + 0, 0, 0x5652, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x5654, 0, 0x5655, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5658, /* 0xB0 */ + 0, 0, 0x4E66, 0, 0x5659, 0x5656, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x565A, 0, 0, 0x3460, 0x565B, 0, 0, /* 0xC0 */ + 0, 0, 0x565D, 0x565C, 0, 0, 0x565E, 0, /* 0xD0 */ + 0, 0, 0, 0x565F, 0, 0x406E, 0x3D23, 0, /* 0xD0 */ + 0, 0x3D64, 0, 0x4163, 0, 0x3929, 0x3A38, 0x392A, /* 0xE0 */ + 0x3570, 0, 0, 0x5660, 0, 0, 0x3A39, 0, /* 0xE0 */ + 0, 0x384A, 0x5661, 0x4C26, 0x4743, 0x5662, 0, 0x392B, /* 0xF0 */ + 0, 0, 0, 0x342C, 0, 0x4327, 0x3652 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3B54, 0x495B, 0, 0, 0x4841, 0, /* 0x00 */ + 0, 0, 0, 0x5663, 0x3475, 0, 0, 0, /* 0x00 */ + 0, 0x5666, 0, 0, 0, 0, 0x4421, 0, /* 0x10 */ + 0, 0x5665, 0x5664, 0x5667, 0, 0x446B, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x3F63, 0, 0, /* 0x20 */ + 0, 0, 0, 0x3B55, 0, 0x404A, 0, 0x4253, /* 0x20 */ + 0x3522, 0, 0, 0x4422, 0, 0, 0x5668, 0x5669, /* 0x30 */ + 0x3E6F, 0, 0, 0, 0, 0x4B39, 0, 0, /* 0x30 */ + 0x566C, 0, 0, 0x566B, 0x566A, 0x497D, 0, 0x5673, /* 0x40 */ + 0, 0, 0, 0, 0x4B5A, 0, 0x566D, 0, /* 0x40 */ + 0, 0, 0, 0, 0x566F, 0x4B6B, 0, 0x566E, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x5670, /* 0x50 */ + 0, 0x4828, 0x5671, 0x4A3E, 0x5672, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x3433, 0x4A3F, 0x472F, 0x5674, 0x5675, 0, /* 0x70 */ + 0x392C, 0x3434, 0x5676, 0x3838, 0x4D44, 0x4D29, 0x3476, 0x5678, /* 0x70 */ + 0, 0x4423, 0, 0x392D, 0x3E31, 0, 0, 0x485F, /* 0x80 */ + 0, 0, 0x3E32, 0, 0, 0, 0, 0x3D78, /* 0x80 */ + 0, 0, 0, 0, 0, 0x446C, 0x4A79, 0x4539, /* 0x90 */ + 0, 0, 0x392E, 0, 0x495C, 0, 0, 0, /* 0x90 */ + 0x5679, 0, 0, 0, 0, 0, 0x4559, 0x3A42, /* 0xA0 */ + 0, 0, 0, 0x384B, 0, 0x446D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x3043, 0x3D6E, 0x392F, /* 0xB0 */ + 0x4D47, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x567A, 0x567B, 0x4751, 0, 0, 0, 0, /* 0xC0 */ + 0x567C, 0x4E77, 0x4F2D, 0, 0, 0, 0, 0x567E, /* 0xC0 */ + 0x567D, 0, 0, 0x3347, 0, 0, 0x5721, 0, /* 0xD0 */ + 0, 0, 0x5724, 0x5725, 0, 0x5723, 0, 0x4940, /* 0xD0 */ + 0x3E33, 0x5727, 0x5726, 0x5722, 0, 0, 0, 0, /* 0xE0 */ + 0x5728, 0x5729, 0, 0, 0x572A, 0, 0, 0, /* 0xE0 */ + 0x572D, 0x572B, 0, 0x572C, 0x572E, 0, 0x3164, 0x446E, /* 0xF0 */ + 0x572F, 0, 0x377A, 0x3276, 0x4736, 0, 0x5730, 0x467B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4A5B, 0, 0x5731, 0x4F2E, 0, 0, 0, /* 0x00 */ + 0, 0x5732, 0x4A40, 0x5735, 0x5021, 0x5031, 0, 0x3C30, /* 0x00 */ + 0x4675, 0x5736, 0, 0x355D, 0x4424, 0x307A, 0x5737, 0x4A26, /* 0x10 */ + 0x3930, 0, 0, 0x4350, 0, 0, 0, 0x446F, /* 0x10 */ + 0, 0, 0, 0, 0, 0x4C6F, 0x3839, 0x384C, /* 0x20 */ + 0, 0x5738, 0, 0, 0, 0x5739, 0, 0x573F, /* 0x20 */ + 0, 0x3C65, 0, 0, 0, 0x4425, 0, 0x362F, /* 0x30 */ + 0x573A, 0, 0, 0, 0x492B, 0, 0x4346, 0, /* 0x30 */ + 0, 0x573B, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x573C, 0, 0x3630, 0, 0x573D, 0, 0x573E, 0, /* 0x40 */ + 0, 0x5740, 0, 0x4576, 0, 0, 0x5741, 0x5742, /* 0x50 */ + 0, 0x5743, 0, 0, 0x5734, 0x5733, 0, 0, /* 0x50 */ + 0, 0x5744, 0x3741, 0, 0, 0, 0x4927, 0, /* 0x60 */ + 0, 0x3A4C, 0x4937, 0x4426, 0x494B, 0x5745, 0, 0, /* 0x60 */ + 0x3E34, 0x3146, 0, 0x5746, 0, 0, 0, 0x5747, /* 0x70 */ + 0, 0x4C72, 0, 0, 0x4860, 0, 0, 0x574A, /* 0x70 */ + 0x317D, 0x402C, 0x5749, 0x5748, 0x3742, 0x4254, 0, 0x574E, /* 0x80 */ + 0x574C, 0, 0x574B, 0x4E27, 0x3865, 0, 0, 0, /* 0x80 */ + 0x3D79, 0x574D, 0x454C, 0x3D3E, 0, 0, 0, 0x4640, /* 0x90 */ + 0x5751, 0x5750, 0, 0, 0, 0, 0x574F, 0, /* 0x90 */ + 0x5752, 0x3866, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x5753, 0x497C, 0x3D5B, 0, 0, 0x5754, 0x4879, 0, /* 0xA0 */ + 0, 0, 0, 0x4641, 0x4427, 0, 0, 0, /* 0xB0 */ + 0, 0x4530, 0, 0, 0x5755, 0x352B, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x3F34, 0, 0x492C, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x3477, 0x4726, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x5756, 0x3B56, /* 0xD0 */ + 0x4B3A, 0x4B3B, 0, 0, 0x317E, 0x575B, 0, 0, /* 0xD0 */ + 0x4369, 0, 0, 0, 0x5758, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x3277, 0, 0, 0, 0, /* 0xE0 */ + 0x582D, 0x575A, 0, 0, 0, 0x4730, 0, 0, /* 0xF0 */ + 0x5759, 0, 0, 0x5757, 0, 0x397A, 0, 0x575D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x5763, 0x5769, /* 0x00 */ + 0x5761, 0, 0x455C, 0, 0, 0x5766, 0x495D, 0, /* 0x10 */ + 0, 0x5760, 0, 0x5765, 0x4E67, 0x3B57, 0, 0, /* 0x10 */ + 0x4255, 0x575E, 0, 0, 0, 0x355E, 0x5768, 0x402D, /* 0x20 */ + 0x3165, 0x5762, 0x3278, 0x5767, 0, 0, 0, 0x3631, /* 0x20 */ + 0, 0x5764, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x576A, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x576C, 0x5776, 0x5774, 0, 0, 0x5771, 0, /* 0x40 */ + 0, 0, 0x5770, 0x4E78, 0, 0x5772, 0, 0, /* 0x40 */ + 0x3632, 0, 0x3931, 0, 0, 0x3D7A, 0, 0, /* 0x50 */ + 0, 0x5779, 0x576B, 0, 0, 0, 0, 0x576F, /* 0x50 */ + 0x575F, 0, 0x327A, 0x5773, 0x5775, 0x4351, 0, 0, /* 0x60 */ + 0x3A28, 0x3238, 0x576D, 0x5778, 0x5777, 0x3633, 0, 0x4229, /* 0x60 */ + 0x3366, 0, 0, 0, 0, 0x3743, 0, 0x576E, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x577A, 0, 0x577D, 0x5821, 0, 0, 0, /* 0x80 */ + 0, 0x3C3D, 0, 0x5827, 0x4470, 0x577B, 0, 0, /* 0x80 */ + 0, 0, 0x5825, 0, 0x3279, 0, 0x5823, 0x5824, /* 0x90 */ + 0, 0, 0x577E, 0x5822, 0, 0, 0, 0x3867, /* 0x90 */ + 0x4D2A, 0, 0, 0x3435, 0, 0, 0x3159, 0x5826, /* 0xA0 */ + 0, 0x473A, 0x302D, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x4861, 0x575C, 0x582C, 0x5830, 0x4C65, 0, /* 0xB0 */ + 0x5829, 0, 0, 0, 0x4569, 0x582E, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x3E70, 0x582F, 0x4657, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x4F47, 0, 0x582B, 0, 0, 0, 0, /* 0xD0 */ + 0x5831, 0, 0x397B, 0, 0x404B, 0, 0, 0x3054, /* 0xD0 */ + 0x582A, 0x5828, 0, 0x415A, 0, 0, 0, 0x577C, /* 0xE0 */ + 0x3B34, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x4246, 0x583D, 0, 0x415B, 0x5838, 0, 0x5835, 0x5836, /* 0xF0 */ + 0, 0x3C66, 0x5839, 0x583C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5837, 0x3D25, 0, 0x583A, 0, 0, 0x5834, 0, /* 0x00 */ + 0x4C7C, 0x4C7B, 0, 0, 0, 0x583E, 0x583F, 0x3055, /* 0x00 */ + 0, 0, 0, 0, 0, 0x5833, 0, 0, /* 0x10 */ + 0, 0, 0x3672, 0x3026, 0, 0, 0, 0x3436, /* 0x10 */ + 0, 0x583B, 0, 0, 0, 0, 0, 0x5843, /* 0x20 */ + 0x5842, 0, 0, 0, 0x5847, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x5848, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x5846, 0x5849, 0x5841, 0x5845, /* 0x30 */ + 0, 0, 0x584A, 0, 0x584B, 0, 0, 0x5840, /* 0x40 */ + 0x3B7C, 0, 0x5844, 0x4256, 0x3932, 0x5832, 0x3F35, 0, /* 0x40 */ + 0, 0, 0, 0x5858, 0, 0x4A69, 0, 0, /* 0x50 */ + 0x584E, 0x584F, 0x5850, 0, 0, 0x5857, 0, 0x5856, /* 0x50 */ + 0, 0, 0x4B7D, 0x3437, 0, 0x5854, 0, 0x3745, /* 0x60 */ + 0x3334, 0, 0, 0x5851, 0, 0, 0x4E38, 0x5853, /* 0x60 */ + 0x3056, 0x5855, 0, 0x584C, 0x5852, 0x5859, 0x3744, 0x584D, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4D5D, 0, /* 0x70 */ + 0, 0, 0x4D2B, 0, 0, 0, 0, 0x585C, /* 0x80 */ + 0, 0, 0x5860, 0, 0, 0, 0x417E, 0, /* 0x80 */ + 0x4E79, 0x5861, 0, 0, 0x585E, 0, 0x585B, 0, /* 0x90 */ + 0, 0x585A, 0x585F, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x4A30, 0, 0, 0x4634, /* 0xA0 */ + 0, 0x3746, 0, 0x5862, 0x585D, 0, 0x5863, 0, /* 0xA0 */ + 0, 0, 0x377B, 0, 0, 0, 0x3231, 0, /* 0xB0 */ + 0, 0, 0x586B, 0, 0, 0, 0x3438, 0, /* 0xB0 */ + 0, 0, 0, 0x5869, 0, 0, 0x586A, 0x3A29, /* 0xC0 */ + 0x5868, 0x5866, 0x5865, 0x586C, 0x5864, 0x586E, 0, 0, /* 0xC0 */ + 0x327B, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x5870, 0, 0, 0x586F, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x4428, 0, 0x5873, 0, 0x5871, 0x5867, /* 0xF0 */ + 0x377C, 0, 0x5872, 0, 0x5876, 0x5875, 0x5877, 0x5874 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5878, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x5879, 0x587A, 0x4A6A, 0, 0x587C, 0x587B, 0x3D3F, 0, /* 0x00 */ + 0x402E, 0x3266, 0x327C, 0, 0x587D, 0, 0x303F, 0, /* 0x10 */ + 0, 0, 0x404C, 0x587E, 0, 0x6C43, 0x5921, 0x3761, /* 0x10 */ + 0, 0x5922, 0, 0, 0, 0, 0x406F, 0, /* 0x20 */ + 0, 0, 0x5923, 0, 0, 0, 0x5924, 0x353A, /* 0x20 */ + 0x5925, 0, 0x5926, 0x5927, 0x4257, 0, 0, 0, /* 0x30 */ + 0x384D, 0, 0, 0x4C61, 0, 0, 0, 0x4B3C, /* 0x30 */ + 0x3D6A, 0x5928, 0, 0, 0, 0, 0, 0x4070, /* 0x40 */ + 0x6E3D, 0x4862, 0, 0x3C6A, 0, 0x3A4D, 0x5929, 0, /* 0x40 */ + 0, 0, 0, 0x4247, 0, 0x4A27, 0, 0, /* 0x50 */ + 0x4271, 0, 0, 0x592C, 0, 0, 0x592A, 0, /* 0x50 */ + 0x592D, 0, 0, 0x592B, 0, 0, 0, 0, /* 0x60 */ + 0x592E, 0, 0, 0, 0, 0, 0x4A31, 0, /* 0x60 */ + 0, 0x3037, 0, 0, 0, 0, 0x495E, 0, /* 0x70 */ + 0, 0x4863, 0, 0, 0x592F, 0, 0x5932, 0x3E35, /* 0x70 */ + 0x353B, 0, 0x5930, 0x5937, 0x3E36, 0, 0, 0, /* 0x80 */ + 0, 0x5931, 0x4744, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x4D5E, 0x5933, 0x5934, 0x5938, 0x456A, 0x5935, 0x3933, /* 0x90 */ + 0x405E, 0, 0, 0x5946, 0x4834, 0, 0x4272, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x4864, 0x5A2D, 0, 0, 0, /* 0xA0 */ + 0, 0x4A7A, 0, 0, 0, 0x4471, 0, 0, /* 0xB0 */ + 0, 0x4B75, 0, 0x593B, 0x3221, 0x436A, 0, 0, /* 0xB0 */ + 0, 0, 0x5944, 0, 0, 0x4334, 0x593E, 0x5945, /* 0xC0 */ + 0x5940, 0x5947, 0x5943, 0, 0x5942, 0x476F, 0, 0x593C, /* 0xC0 */ + 0x327D, 0x593A, 0x3571, 0x4273, 0x5936, 0, 0, 0x5939, /* 0xD0 */ + 0x3934, 0x405B, 0, 0x3E37, 0x5941, 0x4752, 0, 0, /* 0xD0 */ + 0x3572, 0x3348, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x3367, 0x3F21, 0x5949, 0x594E, /* 0xE0 */ + 0, 0x594A, 0, 0x377D, 0, 0x594F, 0x3B22, 0x3969, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0x3D26, 0x593D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3B7D, 0x594C, 0, 0, 0, 0, 0x3B58, /* 0x00 */ + 0x594D, 0x3044, 0, 0, 0x5948, 0, 0, 0, /* 0x00 */ + 0, 0x4429, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x3573, 0, 0, 0, 0, 0, 0x3634, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x594B, /* 0x20 */ + 0x3027, 0, 0, 0x3A43, 0, 0, 0, 0x3F36, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x4472, 0, 0, 0x4854, 0x5951, 0x415E, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x422A, 0, 0, 0x3B2B, 0x5952, 0, 0x5954, /* 0x40 */ + 0x5950, 0, 0, 0, 0, 0x4A61, 0, 0x443D, /* 0x50 */ + 0, 0, 0, 0, 0x415C, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x4A7B, /* 0x60 */ + 0x3C4E, 0x5960, 0, 0x595F, 0, 0, 0x3F78, 0, /* 0x60 */ + 0, 0, 0x377E, 0, 0, 0, 0x5959, 0x3E39, /* 0x70 */ + 0, 0, 0x4668, 0x4731, 0, 0, 0, 0, /* 0x70 */ + 0x5957, 0, 0, 0x415D, 0, 0, 0, 0, /* 0x80 */ + 0x3C78, 0x595C, 0, 0, 0x3E38, 0, 0x5956, 0x595B, /* 0x80 */ + 0, 0, 0x4753, 0, 0, 0, 0x5955, 0, /* 0x90 */ + 0x3721, 0, 0, 0x335D, 0, 0, 0, 0x595D, /* 0x90 */ + 0x4E2B, 0x3A4E, 0x4335, 0x595A, 0, 0x405C, 0, 0x3935, /* 0xA0 */ + 0x3F64, 0x3166, 0x413C, 0x5958, 0x3545, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x3747, 0, 0x444F, 0x595E, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x415F, 0, 0, 0x5961, 0, /* 0xB0 */ + 0x5963, 0, 0, 0x4237, 0x5969, 0, 0x5964, 0, /* 0xC0 */ + 0, 0x5966, 0, 0, 0, 0, 0, 0x4941, /* 0xC0 */ + 0x4473, 0, 0x5967, 0, 0, 0, 0x4D2C, 0, /* 0xD0 */ + 0, 0, 0x4D48, 0x3439, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x302E, 0, 0x5965, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x5962, 0, 0, 0, 0, 0x3478, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x3167, 0, 0x5968, 0, /* 0xF0 */ + 0, 0, 0x4D49 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x596C, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x423B, 0, 0x5973, /* 0x00 */ + 0, 0, 0, 0x596D, 0, 0, 0x596A, 0x5971, /* 0x10 */ + 0, 0, 0, 0, 0x5953, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x596E, 0, /* 0x20 */ + 0x5972, 0, 0, 0, 0x4842, 0x456B, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x596B, 0, 0x596F, 0, /* 0x30 */ + 0, 0, 0x3748, 0, 0, 0, 0x3A71, 0, /* 0x30 */ + 0, 0, 0x405D, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x5977, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x4526, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x5974, /* 0x60 */ + 0, 0x4B60, 0, 0, 0, 0, 0, 0x5975, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0x5976, 0, /* 0x70 */ + 0x4C4E, 0, 0x4022, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x3762, 0, 0, 0, 0, /* 0x80 */ + 0x597D, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x3B35, 0x597A, 0, 0x5979, 0, 0, /* 0x90 */ + 0, 0, 0x4732, 0, 0, 0, 0x4635, 0, /* 0x90 */ + 0, 0, 0, 0, 0x4531, 0x597B, 0, 0, /* 0xA0 */ + 0, 0x597C, 0, 0x496F, 0, 0x4745, 0x3B23, 0, /* 0xA0 */ + 0x4071, 0, 0x4B50, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x3349, 0, 0x5A25, 0x597E, 0, 0, 0, /* 0xB0 */ + 0, 0x4D4A, 0x5A27, 0, 0, 0x5A23, 0, 0x5A24, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x4160, 0, 0, /* 0xC0 */ + 0, 0, 0x5A22, 0, 0x593F, 0, 0, 0, /* 0xD0 */ + 0x5A26, 0, 0x5A21, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x5A2B, 0x5A2C, 0x4527, 0x5A2E, 0, 0, 0x3B24, 0x5A29, /* 0xE0 */ + 0, 0, 0, 0, 0x353C, 0, 0, 0x5A2F, /* 0xE0 */ + 0, 0x5A28, 0x5A33, 0, 0x5A32, 0, 0x5A31, 0, /* 0xF0 */ + 0, 0, 0x5A34, 0, 0, 0x5A36, 0x3E71 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5A35, 0, 0, 0, 0, 0x5A39, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x5A37, 0, 0, 0, 0x5A38, 0x5970, 0, 0, /* 0x10 */ + 0, 0, 0, 0x5A3B, 0x5A3A, 0, 0, 0, /* 0x20 */ + 0, 0, 0x5978, 0x5A3C, 0x5A30, 0, 0, 0x3B59, /* 0x20 */ + 0, 0, 0, 0, 0x5A3D, 0x5A3E, 0x5A40, 0x5A3F, /* 0x30 */ + 0x5A41, 0x327E, 0, 0x3936, 0, 0, 0x4A7C, 0x402F, /* 0x30 */ + 0, 0, 0, 0, 0, 0x384E, 0, 0, /* 0x40 */ + 0x5A43, 0, 0, 0, 0, 0x5A46, 0, 0x4952, /* 0x40 */ + 0, 0x355F, 0, 0, 0, 0x5A45, 0x5A44, 0x4754, /* 0x50 */ + 0x5A47, 0x3635, 0, 0, 0, 0x5A49, 0x5A48, 0, /* 0x50 */ + 0, 0, 0x343A, 0x3B36, 0, 0, 0x4658, 0, /* 0x60 */ + 0, 0, 0, 0, 0x3749, 0, 0, 0, /* 0x60 */ + 0x3F74, 0, 0x5A4A, 0, 0x4030, 0x4528, 0, 0x495F, /* 0x70 */ + 0x5A4B, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x5A4C, 0x5A4D, 0, 0, 0, 0x4A38, /* 0x80 */ + 0x555D, 0x4046, 0, 0, 0x494C, 0, 0x3A58, 0, /* 0x80 */ + 0x4865, 0x4843, 0, 0, 0, 0, 0, 0x454D, /* 0x90 */ + 0, 0x4E41, 0, 0x5A4F, 0x3C50, 0, 0, 0x5A50, /* 0x90 */ + 0, 0x3036, 0, 0, 0x3654, 0x404D, 0, 0x4960, /* 0xA0 */ + 0, 0, 0, 0x5A51, 0x3B42, 0x4347, 0, 0x3B5B, /* 0xA0 */ + 0x3F37, 0, 0, 0, 0, 0, 0, 0x5A52, /* 0xB0 */ + 0, 0x4A7D, 0, 0, 0x3177, 0x3B5C, 0, 0, /* 0xB0 */ + 0, 0x5A55, 0, 0x5A53, 0x5A56, 0x4E39, 0x5A54, 0, /* 0xC0 */ + 0, 0, 0, 0x407B, 0x5A57, 0, 0, 0x4232, /* 0xC0 */ + 0, 0, 0x5A58, 0, 0, 0, 0, 0x347A, /* 0xD0 */ + 0, 0x5A5A, 0, 0x5A59, 0, 0, 0, 0, /* 0xD0 */ + 0x5A5B, 0x5A5C, 0x347B, 0, 0, 0x467C, 0x4336, 0x356C, /* 0xE0 */ + 0x3B5D, 0x4161, 0, 0, 0x3D5C, 0x3030, 0, 0, /* 0xE0 */ + 0, 0x5A5D, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x3222, 0x5A61 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3937, 0x5A60, 0, 0, 0x3A2B, 0x3E3A, /* 0x00 */ + 0, 0, 0x5A5F, 0, 0x3E3B, 0, 0x4C40, 0x3A2A, /* 0x00 */ + 0, 0, 0, 0x3057, 0x404E, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x5A66, 0, 0, 0x4031, /* 0x10 */ + 0x3147, 0, 0, 0, 0, 0x3D55, 0, 0x4B66, /* 0x20 */ + 0x3A72, 0, 0, 0, 0, 0x3E3C, 0, 0x4027, /* 0x20 */ + 0, 0, 0, 0, 0x5A65, 0x5A63, 0x5A64, 0, /* 0x30 */ + 0, 0, 0, 0, 0x436B, 0, 0, 0x5B26, /* 0x30 */ + 0, 0x5A6A, 0x3B7E, 0x3938, 0x5A68, 0, 0, 0, /* 0x40 */ + 0, 0x5A69, 0, 0x3F38, 0, 0, 0, 0x5A67, /* 0x40 */ + 0, 0, 0x3B2F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x5A6C, 0x5A6B, 0x5A70, /* 0x50 */ + 0, 0, 0x5A71, 0, 0x5A6D, 0, 0x3322, 0x5A6E, /* 0x60 */ + 0x5A6F, 0x4855, 0, 0, 0, 0, 0x4961, 0x374A, /* 0x60 */ + 0x5A72, 0, 0, 0, 0x4032, 0, 0x3E3D, 0, /* 0x70 */ + 0, 0, 0x4352, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3647, 0, 0x5A73, 0x5A77, 0, 0, 0x324B, /* 0x80 */ + 0x5A74, 0x5A76, 0, 0, 0, 0, 0x5A75, 0, /* 0x80 */ + 0, 0x3D6B, 0, 0, 0, 0, 0x4348, 0x3045, /* 0x90 */ + 0x5A78, 0, 0, 0, 0, 0x5A79, 0, 0, /* 0x90 */ + 0, 0, 0x442A, 0, 0, 0, 0x4E71, 0, /* 0xA0 */ + 0, 0, 0, 0x3B43, 0, 0, 0x4A6B, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x4B3D, 0, 0, 0, /* 0xB0 */ + 0x5B22, 0x5A7B, 0, 0, 0x5A7E, 0, 0x5A7D, 0, /* 0xB0 */ + 0, 0x5A7A, 0, 0, 0x5B21, 0, 0, 0x465E, /* 0xC0 */ + 0, 0x5A7C, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x5B23, 0, /* 0xD0 */ + 0, 0x3D6C, 0x5B24, 0, 0x4D4B, 0x4778, 0, 0, /* 0xD0 */ + 0x5B25, 0, 0, 0, 0, 0, 0x5B27, 0, /* 0xE0 */ + 0, 0x5B28, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x5B29, 0, 0x364A, 0x3148, 0x3939, 0x5B2A, 0, 0x5B2B, /* 0xF0 */ + 0x3D71, 0x4162, 0, 0, 0x5258, 0x413E, 0x413D, 0x4258 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3A47, 0, 0, 0x5072, 0, 0, 0, 0, /* 0x00 */ + 0x376E, 0x4D2D, 0, 0x4A7E, 0, 0x497E, 0, 0x5B2C, /* 0x00 */ + 0, 0, 0, 0, 0x3A73, 0x443F, 0x5B2D, 0x4F2F, /* 0x10 */ + 0, 0, 0, 0x4B3E, 0, 0x442B, 0x5B2E, 0x347C, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x5B2F, 0x5B30, /* 0x20 */ + 0x4C5A, 0, 0x4C24, 0x4B76, 0x4B5C, 0x3B25, 0x5B32, 0, /* 0x20 */ + 0, 0x3C6B, 0, 0, 0x4B51, 0, 0x5B34, 0x5B37, /* 0x30 */ + 0x5B36, 0, 0x3479, 0, 0, 0x3560, 0, 0x5B33, /* 0x30 */ + 0, 0x5B35, 0, 0, 0, 0, 0x5B38, 0, /* 0x40 */ + 0, 0x3F79, 0, 0, 0, 0, 0x4D7B, 0x3049, /* 0x40 */ + 0x3A60, 0x423C, 0, 0x3C5D, 0, 0, 0x3E73, 0, /* 0x50 */ + 0, 0x5B3B, 0, 0, 0x454E, 0, 0x5B39, 0x422B, /* 0x50 */ + 0x5B3A, 0x3E72, 0x4C5D, 0x5B3C, 0x5B3D, 0x4D68, 0, 0, /* 0x60 */ + 0, 0, 0x5B42, 0, 0, 0x393A, 0, 0x4755, /* 0x60 */ + 0x5B3F, 0x456C, 0x5A5E, 0x5A62, 0, 0x354F, 0, 0x4747, /* 0x70 */ + 0, 0, 0, 0, 0x5B41, 0, 0x3E3E, 0x4844, /* 0x70 */ + 0, 0, 0, 0, 0, 0x5B47, 0, 0x487A, /* 0x80 */ + 0, 0x5B3E, 0, 0x5B44, 0x5B43, 0, 0, 0, /* 0x80 */ + 0x404F, 0, 0, 0, 0, 0x4B6D, 0, 0x4E53, /* 0x90 */ + 0, 0, 0x4B67, 0, 0x324C, 0x3B5E, 0, 0, /* 0x90 */ + 0x4F48, 0x5B46, 0x3F75, 0, 0, 0, 0x5B45, 0, /* 0xA0 */ + 0, 0x5B40, 0, 0, 0, 0, 0, 0x384F, /* 0xA0 */ + 0, 0, 0, 0x5B4C, 0x5B4A, 0, 0x324D, 0x5B48, /* 0xB0 */ + 0x5B4E, 0x5B54, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x4248, 0, 0, 0x4A41, 0, 0x5B56, 0, /* 0xC0 */ + 0, 0, 0x4922, 0, 0, 0, 0x5B55, 0x4770, /* 0xC0 */ + 0x4B3F, 0x343B, 0, 0x4077, 0x3D40, 0, 0, 0, /* 0xD0 */ + 0x4453, 0, 0x4D2E, 0, 0, 0x5B51, 0x5B50, 0, /* 0xD0 */ + 0, 0, 0x5B52, 0, 0x5B4F, 0, 0, 0x5B57, /* 0xE0 */ + 0, 0x5B4D, 0, 0, 0x5B4B, 0, 0x5B53, 0x5B49, /* 0xE0 */ + 0, 0x436C, 0, 0x4C78, 0x3C46, 0x3A74, 0, 0, /* 0xF0 */ + 0, 0, 0, 0x3A3A, 0, 0, 0x4B6F, 0x3341 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x444E, 0x464A, 0x3149, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x4072, 0, 0, 0x4034, 0x372A, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x5B59, 0, /* 0x10 */ + 0, 0x393B, 0x337C, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x5B5B, 0x3374, 0x5B61, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x5B5E, 0, 0x4073, 0, 0, 0, /* 0x30 */ + 0x334B, 0x3A2C, 0, 0, 0x334A, 0x3A4F, 0, 0, /* 0x30 */ + 0x5B5C, 0x3765, 0x374B, 0x456D, 0, 0, 0x5B5A, 0, /* 0x40 */ + 0x3046, 0, 0, 0, 0, 0x5B5D, 0x5B5F, 0, /* 0x40 */ + 0x364D, 0x372C, 0, 0x343C, 0x354B, 0, 0, 0, /* 0x50 */ + 0, 0x5B62, 0, 0, 0x3A79, 0x4B71, 0, 0x3B37, /* 0x50 */ + 0, 0, 0, 0x5B63, 0, 0, 0, 0x4930, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x5B6F, 0, 0x3233, 0x5B64, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x5B75, 0x5B65, /* 0x70 */ + 0, 0x4E42, 0, 0x5B6C, 0, 0x475F, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x5B74, 0, 0x5B67, /* 0x80 */ + 0, 0, 0, 0x3034, 0x5B69, 0, 0, 0x393C, /* 0x90 */ + 0, 0, 0, 0x5B6B, 0, 0x5B6A, 0, 0x5B66, /* 0x90 */ + 0x5B71, 0, 0x3E3F, 0, 0, 0, 0x546D, 0x3868, /* 0xA0 */ + 0x4D7C, 0, 0, 0, 0, 0x5B68, 0, 0x4474, /* 0xA0 */ + 0x3323, 0x3A2D, 0, 0x5B60, 0, 0x5B70, 0x3361, 0, /* 0xB0 */ + 0, 0x5B6E, 0x5B72, 0, 0x456E, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x347E, 0, 0x5C32, 0, /* 0xC0 */ + 0, 0x4C49, 0x5B77, 0x347D, 0, 0x5B7E, 0, 0, /* 0xC0 */ + 0, 0, 0x4B40, 0, 0x5C21, 0x5C23, 0, 0x5C27, /* 0xD0 */ + 0x5B79, 0, 0x432A, 0, 0, 0, 0, 0x456F, /* 0xD0 */ + 0x5C2B, 0x5B7C, 0, 0x5C28, 0, 0, 0, 0x5C22, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3F39, 0x5C2C, /* 0xE0 */ + 0, 0, 0x4033, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x5C2A, 0x343D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F50, 0x5B76, 0, 0, 0x5C26, 0x3058, 0, 0, /* 0x00 */ + 0x5B78, 0, 0, 0x4C3A, 0x5B7D, 0x3F22, 0x4447, 0x5B73, /* 0x00 */ + 0, 0, 0x5C25, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x3F7A, 0x5C2F, 0x3371, 0x3821, 0, 0, 0, /* 0x10 */ + 0, 0x5C31, 0x5B7A, 0x5C30, 0, 0x5C29, 0x5B7B, 0, /* 0x20 */ + 0x5C2D, 0, 0x5C2E, 0, 0, 0, 0, 0, /* 0x20 */ + 0x5C3F, 0, 0, 0, 0x464E, 0, 0x5C24, 0, /* 0x30 */ + 0, 0x5C3B, 0, 0, 0, 0x5C3D, 0, 0x4458, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4D4C, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x4976, 0x5C38, 0x424A, 0, 0, /* 0x50 */ + 0, 0x5C3E, 0x413F, 0, 0x5C35, 0x5C42, 0x5C41, 0, /* 0x50 */ + 0x466F, 0x5C40, 0x466A, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x5C44, 0x5C37, 0, 0x3648, 0x5C3A, 0x3D5D, /* 0x60 */ + 0, 0, 0, 0x4760, 0x5C3C, 0x364B, 0, 0x5C34, /* 0x70 */ + 0x5C36, 0x5C33, 0, 0, 0x4F30, 0x335A, 0x5C39, 0, /* 0x70 */ + 0, 0x5C43, 0x3335, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x3A67, 0, 0, 0, 0x315D, 0, /* 0x80 */ + 0, 0x5C54, 0, 0, 0x4F31, 0x5C57, 0, 0, /* 0x90 */ + 0, 0, 0, 0x3F3A, 0x5C56, 0, 0, 0, /* 0x90 */ + 0x5C55, 0, 0, 0, 0, 0, 0, 0x5C52, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x5C46, 0, /* 0xA0 */ + 0, 0x5C63, 0x5C45, 0, 0x5C58, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x5C50, 0, 0, 0x5C4B, 0x5C48, /* 0xB0 */ + 0, 0x5C49, 0, 0x5C51, 0, 0, 0, 0x7422, /* 0xC0 */ + 0, 0, 0x5C4E, 0x393D, 0x4448, 0x4164, 0x5C4C, 0, /* 0xC0 */ + 0x5C47, 0, 0, 0x5C4A, 0, 0, 0, 0, /* 0xD0 */ + 0x4D4D, 0x4B6A, 0, 0, 0, 0x5C4F, 0x5C59, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5C61, /* 0xE0 */ + 0x5C5A, 0, 0, 0x5C67, 0, 0x5C65, 0, 0, /* 0xE0 */ + 0, 0, 0x5C60, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x5C5F, 0, 0x4450, 0, 0x4165, 0, 0x5C5D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5C5B, 0, 0, 0x5C62, 0, 0, /* 0x00 */ + 0, 0, 0x5C68, 0x4875, 0x5C6E, 0, 0, 0, /* 0x00 */ + 0, 0, 0x5C69, 0x5C6C, 0x5C66, 0, 0, 0x4374, /* 0x10 */ + 0, 0x4938, 0, 0x5C5C, 0, 0, 0x5C64, 0x3E40, /* 0x10 */ + 0, 0x4C4F, 0x5C78, 0x5C6B, 0, 0, 0, 0, /* 0x20 */ + 0, 0x3822, 0x3223, 0x335F, 0, 0, 0x5C53, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x3E41, 0x5C70, 0, /* 0x30 */ + 0x5C77, 0x3C79, 0x3372, 0, 0, 0x432E, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x5C6D, 0, 0, 0x5C72, /* 0x40 */ + 0x5C76, 0, 0, 0x3636, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x354C, 0x5C74, 0, 0, 0, 0, 0, 0x3521, /* 0x50 */ + 0, 0x464B, 0x5C73, 0, 0, 0, 0x5C75, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x5C6F, 0, 0, 0, 0, 0, /* 0x70 */ + 0x5C71, 0, 0, 0, 0, 0, 0, 0x3360, /* 0x70 */ + 0x4349, 0, 0, 0, 0x5C7C, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x5C7A, 0x3869, 0, /* 0x80 */ + 0x5C79, 0, 0, 0, 0, 0, 0, 0x5D21, /* 0x90 */ + 0, 0, 0, 0, 0x5B58, 0, 0, 0, /* 0x90 */ + 0x5C7B, 0, 0x5C7D, 0x5C7E, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x5D2C, 0, 0x5D28, 0, 0x5B6D, 0, /* 0xA0 */ + 0, 0, 0, 0x5D27, 0, 0, 0, 0, /* 0xB0 */ + 0x5D26, 0, 0, 0x5D23, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x5C6A, 0x5D25, 0x5D24, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x5D2A, 0, 0x4F26, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x5D2D, 0x367B, 0, 0, 0x5D29, 0x5D2B, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x4827, 0, 0x5D2E, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x5D32, 0x5D2F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4D73, 0x5D30, 0, 0, /* 0x00 */ + 0, 0, 0x5C5E, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x5D33, 0, 0, 0, 0x5D34, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x3135, 0, 0x5D36, /* 0x10 */ + 0x3767, 0x3C21, 0, 0x3655, 0, 0, 0, 0x3224, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x4D5F, 0, 0, 0, 0, 0x5D38, /* 0x30 */ + 0x5D37, 0x5D3A, 0x353D, 0, 0, 0x3656, 0x343E, 0, /* 0x30 */ + 0, 0, 0, 0x5D3D, 0, 0, 0, 0x5D3C, /* 0x40 */ + 0, 0x5D3E, 0, 0, 0x324E, 0, 0x4337, 0, /* 0x40 */ + 0x5D3F, 0, 0, 0x343F, 0x5D41, 0, 0, 0, /* 0x50 */ + 0, 0x5D40, 0, 0x5D42, 0, 0, 0, 0x5D43, /* 0x50 */ + 0, 0x5D44, 0x3B5F, 0x4035, 0x3A21, 0, 0x4970, 0, /* 0x60 */ + 0, 0x4A62, 0x4F44, 0, 0, 0, 0, 0x3B75, /* 0x60 */ + 0, 0, 0, 0x3A50, 0x4E72, 0, 0, 0, /* 0x70 */ + 0x5D45, 0x5D46, 0, 0x3B60, 0, 0, 0, 0x5D47, /* 0x70 */ + 0x5D48, 0, 0, 0x5D4A, 0x5D49, 0, 0x4B58, 0, /* 0x80 */ + 0, 0x3D5E, 0x3C6C, 0x3B44, 0, 0x5D4B, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x5D4D, 0x3F23, 0, /* 0x90 */ + 0x5D4C, 0, 0, 0, 0, 0, 0x5D4E, 0, /* 0x90 */ + 0, 0, 0, 0, 0x5D4F, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x5D50, 0x5D51, 0, 0, 0, 0x5D52, /* 0xA0 */ + 0, 0x5D54, 0x5D53, 0x5D55, 0x3225, 0x434A, 0, 0x5D56, /* 0xB0 */ + 0, 0, 0x3B26, 0x334C, 0x5D57, 0, 0, 0x4542, /* 0xB0 */ + 0x544C, 0, 0, 0, 0, 0x3523, 0x5D58, 0, /* 0xC0 */ + 0, 0, 0, 0x5D59, 0, 0x4A6C, 0x4B68, 0, /* 0xC0 */ + 0, 0, 0x4647, 0x5D5A, 0x4866, 0, 0, 0, /* 0xD0 */ + 0x487B, 0, 0, 0x4C53, 0, 0, 0, 0x5D5B, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x5D5D, 0x5D5C, 0, 0, 0x5D5F, /* 0xE0 */ + 0, 0, 0, 0x5D5E /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x5D61, 0, 0, 0, 0, 0, 0, 0x3B61, /* 0x00 */ + 0, 0x4C31, 0, 0x5D62, 0x5D63, 0, 0, 0x3524, /* 0x10 */ + 0, 0, 0, 0x5D64, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x5D66, 0x5D65, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x3F65, 0, 0, 0x4939, /* 0x30 */ + 0x314A, 0, 0, 0, 0, 0, 0x4845, 0, /* 0x30 */ + 0x4475, 0x3D41, 0x3561, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x4846, 0, /* 0x40 */ + 0x3C2E, 0, 0, 0, 0, 0x5D68, 0, 0x3440, /* 0x50 */ + 0, 0, 0x3178, 0, 0, 0x4672, 0x5D67, 0x393E, /* 0x50 */ + 0x4353, 0, 0x5D69, 0, 0, 0, 0, 0, /* 0x60 */ + 0x5D71, 0, 0x5D6A, 0, 0, 0, 0, 0, /* 0x60 */ + 0x4241, 0, 0x3562, 0x5D72, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x3768, 0, 0, 0x3525, 0x5D70, 0, /* 0x70 */ + 0, 0x5D6E, 0x5D6B, 0x4D60, 0, 0, 0, 0, /* 0x80 */ + 0x4440, 0, 0, 0, 0x4659, 0x5D6C, 0, 0, /* 0x80 */ + 0x5D74, 0, 0x5D73, 0x3723, 0, 0, 0x322D, 0, /* 0x90 */ + 0, 0x3A3B, 0x5D6D, 0x5D6F, 0, 0, 0, 0, /* 0x90 */ + 0, 0x4B57, 0x4274, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x4B77, 0, 0, 0x5D7C, 0, /* 0xA0 */ + 0, 0x5D7D, 0, 0x324F, 0, 0, 0, 0, /* 0xB0 */ + 0x4A28, 0x4C7D, 0x5E21, 0x3C23, 0x3E42, 0x5D78, 0x5D7E, 0x3168, /* 0xB0 */ + 0, 0x3637, 0, 0, 0x5D75, 0x5D7A, 0, 0, /* 0xC0 */ + 0, 0x4074, 0x4771, 0, 0x4867, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x5D77, 0, 0x4B21, 0, 0x5D79, /* 0xD0 */ + 0, 0x5E24, 0, 0x5E22, 0, 0x5D7B, 0, 0, /* 0xD0 */ + 0, 0x4B22, 0x4748, 0x3563, 0, 0x4525, 0, 0, /* 0xE0 */ + 0x436D, 0, 0x5E25, 0, 0, 0, 0, 0x5E23, /* 0xE0 */ + 0x4259, 0x5D76, 0, 0x314B /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x4D4E, 0x5E30, 0, 0, 0, /* 0x00 */ + 0, 0, 0x5E2F, 0, 0, 0, 0, 0x4076, /* 0x10 */ + 0, 0x5E2C, 0, 0x4D6C, 0, 0, 0x4636, 0x5E26, /* 0x10 */ + 0, 0, 0, 0, 0, 0x4445, 0, 0, /* 0x20 */ + 0, 0x314C, 0x393F, 0x5E29, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x3D27, 0x5E2E, 0, 0x5E2D, 0x5E28, 0, /* 0x30 */ + 0x5E2B, 0, 0, 0x3368, 0, 0x5E2A, 0x4749, 0, /* 0x30 */ + 0, 0x4E2E, 0, 0, 0x3E74, 0x4075, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x5E36, 0x5E34, 0, 0x494D, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x5E31, 0x5E33, 0, 0x313A, 0, /* 0x60 */ + 0, 0x3940, 0x4F32, 0, 0x333D, 0, 0x4962, 0, /* 0x60 */ + 0, 0, 0, 0, 0x4D61, 0, 0, 0x3324, /* 0x70 */ + 0x3F3B, 0x5E35, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x5E3A, 0, 0, /* 0x80 */ + 0x3E43, 0, 0, 0, 0x4D30, 0, 0x5E37, 0, /* 0x80 */ + 0, 0, 0, 0x5E32, 0, 0x5E38, 0, 0, /* 0x90 */ + 0, 0x4E5E, 0, 0x4573, 0x4642, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3336, /* 0xA0 */ + 0, 0, 0x3155, 0, 0, 0x5E3E, 0, 0, /* 0xB0 */ + 0x5E41, 0, 0, 0, 0x4E43, 0, 0, 0, /* 0xB0 */ + 0x4D64, 0, 0, 0, 0, 0x5E48, 0x5E42, 0x5E3F, /* 0xC0 */ + 0, 0, 0, 0x4E54, 0x5E45, 0, 0, 0, /* 0xC0 */ + 0, 0x3D4A, 0x5E47, 0, 0, 0x5E4C, 0, 0, /* 0xD0 */ + 0x4571, 0x5E4A, 0, 0, 0, 0, 0x5E44, 0, /* 0xD0 */ + 0, 0x4338, 0, 0, 0x5E4B, 0, 0x5E40, 0, /* 0xE0 */ + 0x5E46, 0, 0x5E4D, 0x307C, 0x5E43, 0, 0x5E4E, 0, /* 0xE0 */ + 0, 0x3F3C, 0, 0x3D5F, 0, 0x4A25, 0, 0x3A2E, /* 0xF0 */ + 0, 0x5E3B, 0x5E49, 0x453A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4036, 0, 0x3369, /* 0x00 */ + 0x3A51, 0x3E44, 0x5E3D, 0x3D42, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x374C, 0, 0x5E3C, 0, 0, /* 0x10 */ + 0, 0x5E52, 0x3D6D, 0x383A, 0, 0x5E61, 0, 0x5E5B, /* 0x10 */ + 0x3574, 0x454F, 0, 0x5E56, 0x5E5F, 0x302F, 0x3132, 0, /* 0x20 */ + 0, 0x3239, 0, 0x5E58, 0x422C, 0x5E4F, 0x5E51, 0x3941, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x5E62, 0, 0x5E5D, 0, 0, 0, 0x5E55, 0, /* 0x30 */ + 0, 0, 0, 0x5E5C, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4C2B, 0, 0, 0x5E5A, 0x5E5E, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x3850, 0, /* 0x50 */ + 0x3E45, 0, 0, 0x4339, 0, 0, 0, 0x5E54, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x4D2F, /* 0x60 */ + 0, 0, 0, 0x5E57, 0, 0, 0x5E50, 0x4572, /* 0x60 */ + 0, 0, 0x5E53, 0, 0, 0, 0x5E59, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4F51, 0x3C3E, /* 0x70 */ + 0x4B7E, 0, 0x5E63, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x482E, 0, 0, 0x5E6F, /* 0x80 */ + 0x383B, 0, 0, 0, 0, 0, 0x3D60, 0, /* 0x90 */ + 0x5E65, 0, 0, 0, 0x4E2F, 0x3942, 0, 0x5E72, /* 0x90 */ + 0, 0, 0x306E, 0, 0, 0x5E70, 0, 0, /* 0xA0 */ + 0, 0, 0x5E64, 0, 0, 0, 0, 0x5E6A, /* 0xA0 */ + 0, 0, 0x5E6C, 0, 0, 0, 0x4D4F, 0x5E67, /* 0xB0 */ + 0, 0, 0x452E, 0, 0, 0x5E69, 0, 0, /* 0xB0 */ + 0, 0, 0x5E71, 0, 0x5E6B, 0x4C47, 0, 0, /* 0xC0 */ + 0, 0x5E66, 0, 0x3C22, 0x5E7E, 0, 0, 0, /* 0xC0 */ + 0, 0x336A, 0, 0x5E68, 0x5E6D, 0x5E6E, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x426C, 0x425A, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x5E76, 0, 0, 0x5E7C, /* 0xE0 */ + 0, 0, 0x5E7A, 0, 0x4529, 0, 0, 0x5F23, /* 0xF0 */ + 0x5E77, 0, 0, 0, 0, 0, 0x5E78, 0x5E60 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3579, 0x493A, 0, 0, 0, 0x3C3F, 0, /* 0x00 */ + 0, 0x3977, 0, 0, 0, 0, 0, 0x4F33, /* 0x00 */ + 0, 0x5E74, 0, 0x5F22, 0x3169, 0x4166, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x4779, 0, 0x3441, 0x4E7A, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x4C21, 0x4452, 0, 0, 0, /* 0x20 */ + 0, 0x5E7B, 0x5E7D, 0, 0, 0, 0, 0, /* 0x30 */ + 0x4132, 0, 0, 0, 0, 0, 0x5F21, 0x5E79, /* 0x30 */ + 0, 0x5E73, 0, 0, 0, 0x3443, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x3769, 0, 0, 0, /* 0x50 */ + 0x5F2F, 0, 0, 0x5F2A, 0x4078, 0, 0, 0x3363, /* 0x50 */ + 0, 0, 0, 0, 0x3D61, 0, 0x5F33, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x5F2C, 0x442C, 0x5F29, /* 0x60 */ + 0x4459, 0, 0, 0, 0x5F4C, 0, 0, 0, /* 0x70 */ + 0x5F26, 0, 0x5F25, 0, 0x5F2E, 0, 0, 0, /* 0x70 */ + 0x5F28, 0x5F27, 0x5F2D, 0, 0x4021, 0, 0x5F24, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x5F30, 0, /* 0x80 */ + 0, 0x5F31, 0, 0, 0, 0, 0, 0x3442, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5F36, 0, 0x5F35, 0x5F37, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x5F3A, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x4543, 0, 0x5F34, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x5F38, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3763, 0x4279, 0x5F32, 0x473B, 0, 0, 0x5F39, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x5F3E, 0x5F3C, 0, 0, /* 0xD0 */ + 0x5F3F, 0, 0, 0x5F42, 0, 0, 0, 0x5F3B, /* 0xD0 */ + 0x396A, 0x4728, 0, 0, 0x5E39, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x4D74, 0x5F3D, 0, 0x5F41, 0x4275, /* 0xE0 */ + 0, 0x5F40, 0, 0x5F2B, 0, 0, 0x6F69, 0, /* 0xF0 */ + 0, 0, 0x5F45, 0, 0, 0, 0x5F49 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F47, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5F43, 0, 0x5F44, 0, 0, 0, 0x5F48, /* 0x00 */ + 0, 0x5F46, 0, 0, 0, 0x494E, 0, 0, /* 0x10 */ + 0x5F4E, 0, 0x5F4B, 0x5F4A, 0, 0x5F4D, 0x4654, 0x5F4F, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x4375, 0x426D, /* 0x20 */ + 0, 0, 0, 0, 0x4025, 0, 0, 0, /* 0x20 */ + 0x5F50, 0, 0x5F52, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x5F51, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x5E75, 0, 0, 0, /* 0x40 */ + 0, 0x5F53, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x4667, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x5F54, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x3250, 0, 0, 0, 0x4574, /* 0x60 */ + 0x3325, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x3564, 0, 0, 0, 0x3C5E, 0x3A52, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x4F27, 0x3F66, 0, 0, 0, 0x316A, 0, /* 0x80 */ + 0, 0, 0x5F56, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5F55, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x5F59, 0x433A, 0x5F5C, 0x5F57, /* 0xA0 */ + 0, 0, 0, 0x5F5B, 0, 0, 0, 0, /* 0xB0 */ + 0x5F5A, 0x4540, 0x3059, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x4E75, 0, 0, 0x5F5E, 0, 0, 0, 0x3128, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x5F60, 0, 0, 0, 0x5F5F, 0, 0x5F5D, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x5F58, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x4B23, 0, 0, 0, 0x5F62 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x5F61, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x316B, 0, 0, 0, /* 0x10 */ + 0, 0x5F64, 0x4A32, 0, 0x5F63, 0, 0, 0, /* 0x10 */ + 0, 0x4C35, 0, 0, 0, 0, 0x3E47, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x4133, 0, /* 0x30 */ + 0, 0, 0, 0, 0x3E46, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x4E7B, 0, 0, 0x5F6A, 0, 0x4079, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x5F66, 0x5F6B, 0, /* 0x50 */ + 0, 0x316C, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x5F69, 0, 0x4761, 0x5F65, 0x5F68, 0x3E48, /* 0x60 */ + 0, 0x4851, 0, 0, 0x5F6C, 0, 0x3C51, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x407A, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x5F6F, 0, 0, 0, /* 0x80 */ + 0x5F67, 0, 0x3727, 0, 0, 0, 0, 0x5F6D, /* 0x80 */ + 0, 0, 0, 0, 0x4D50, 0x5F70, 0, 0, /* 0x90 */ + 0, 0x7426, 0, 0, 0, 0, 0, 0x3D4F, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x5F71, 0, 0, 0, 0x5F72, 0, 0, 0, /* 0xA0 */ + 0, 0x472E, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x5F74, 0, 0, 0, 0, 0x5F75, 0, /* 0xB0 */ + 0, 0, 0, 0x4733, 0, 0, 0, 0, /* 0xC0 */ + 0x4575, 0x5F77, 0, 0, 0, 0, 0x5F79, 0, /* 0xC0 */ + 0x4E55, 0, 0x5F76, 0, 0x5F78, 0x316D, 0, 0x5F73, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x535B, /* 0xD0 */ + 0x5F7A, 0, 0, 0, 0, 0x4167, 0x3B38, 0x5F7C, /* 0xE0 */ + 0, 0, 0, 0, 0x5F7B, 0x3F24, 0x5259, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x5F7D, 0, 0, /* 0xF0 */ + 0, 0x6021, 0, 0x5F6E, 0x5F7E, 0, 0, 0x6022 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x477A, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x6023, 0, 0, /* 0x00 */ + 0x6024, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x6025, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x6026, 0, 0x445E, 0, 0x6028, 0x6027, 0, 0, /* 0x20 */ + 0x6029, 0, 0x602A, 0, 0, 0x3C5F, 0x4963, 0, /* 0x30 */ + 0, 0, 0x4C6C, 0x602B, 0x602C, 0x4156, 0x3C24, 0x602D, /* 0x30 */ + 0x602E, 0, 0, 0, 0, 0, 0x602F, 0x4A52, /* 0x40 */ + 0x4847, 0, 0, 0x6030, 0x4757, 0, 0, 0, /* 0x40 */ + 0, 0, 0x442D, 0, 0, 0, 0, 0, /* 0x50 */ + 0x6031, 0x3267, 0, 0x356D, 0, 0x4C46, 0, 0x4C36, /* 0x50 */ + 0, 0x3234, 0x4F34, 0, 0, 0, 0, 0x4B52, /* 0x60 */ + 0, 0x4A2A, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x4037, 0, 0x6032, 0, 0, 0, /* 0x70 */ + 0, 0x4643, 0, 0, 0, 0x3823, 0x6033, 0, /* 0x70 */ + 0x3A54, 0x6035, 0x6034, 0, 0, 0, 0, 0x6036, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x6037, 0, 0, 0, 0x6038, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x353E, 0, 0x6039, 0, 0, 0, 0, 0x603A, /* 0xA0 */ + 0, 0, 0, 0, 0x3824, 0, 0, 0x4848, /* 0xA0 */ + 0, 0, 0x603C, 0, 0, 0, 0x3E75, 0, /* 0xB0 */ + 0, 0x603B, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x3638, 0x603D, 0x603F, 0, 0x603E, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x6040, 0, /* 0xC0 */ + 0x3851, 0, 0x6041, 0, 0, 0, 0, 0x3669, /* 0xD0 */ + 0, 0x4140, 0, 0x397D, 0, 0, 0, 0, /* 0xD0 */ + 0x6043, 0x6044, 0x6042, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x3C6D, 0, 0, 0x4648, 0x3639, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6046, /* 0xF0 */ + 0x432C, 0x6045, 0, 0, 0x4F35, 0x4762 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x6049, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x604B, 0x6048, /* 0x10 */ + 0, 0, 0, 0x4C54, 0x604A, 0x604C, 0, 0x4E44, /* 0x10 */ + 0, 0, 0, 0, 0, 0x6050, 0, 0, /* 0x20 */ + 0, 0x604F, 0x4376, 0x472D, 0, 0, 0x3825, 0x604E, /* 0x20 */ + 0, 0, 0, 0, 0x604D, 0, 0x4D31, 0x4D32, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x6051, 0x316E, /* 0x30 */ + 0, 0, 0, 0, 0x3976, 0x3B62, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x6052, 0x6053, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x6055, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x3D43, 0, 0, 0, 0, /* 0x60 */ + 0x6057, 0, 0x6056, 0, 0, 0, 0, 0, /* 0x60 */ + 0x6058, 0, 0x334D, 0, 0, 0x605A, 0, 0, /* 0x70 */ + 0x6059, 0, 0x605C, 0x605B, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x383C, 0, 0, 0x4E28, /* 0x80 */ + 0, 0x364C, 0, 0x3226, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x366A, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x3461, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x4E68, 0x605E, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x6060, 0, 0, 0, 0, /* 0xB0 */ + 0x6061, 0, 0x3251, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x605D, 0, 0x3B39, 0, 0, 0x4441, 0x605F, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0x6064, 0, /* 0xD0 */ + 0x3C6E, 0, 0, 0, 0, 0x6062, 0, 0, /* 0xE0 */ + 0, 0, 0x373E, 0, 0, 0x4849, 0x6063, 0, /* 0xE0 */ + 0, 0x607E, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x6069, 0, 0, 0, 0, 0, 0x383D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3565, 0, 0x6066, 0x4D7D, 0, /* 0x00 */ + 0, 0x4E30, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x4276, 0, 0, 0x6068, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x606A, 0x4E56, 0x3657, 0x487C, 0x474A, 0, /* 0x30 */ + 0, 0, 0x606B, 0, 0, 0, 0, 0x606D, /* 0x30 */ + 0, 0x6070, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x606C, 0, 0, /* 0x50 */ + 0, 0x606F, 0x386A, 0x314D, 0x6071, 0, 0x3F70, 0x606E, /* 0x50 */ + 0x4E5C, 0, 0, 0x6074, 0x7424, 0, 0, 0, /* 0x60 */ + 0, 0x6072, 0x6075, 0, 0, 0, 0, 0x6067, /* 0x60 */ + 0x6073, 0, 0, 0x3A3C, 0, 0, 0x6076, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x6077, 0, /* 0x70 */ + 0, 0, 0, 0x4D7E, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x6078, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x6079, 0, /* 0x90 */ + 0, 0, 0x6065, 0, 0, 0, 0, 0x607A, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x3444, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x3C25, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x607B, 0, 0, 0, 0, 0x607C, /* 0xC0 */ + 0, 0, 0, 0, 0x607D, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x313B, 0, 0, 0, /* 0xD0 */ + 0x6121, 0, 0x493B, 0x6122, 0, 0, 0x3424, 0x6123, /* 0xE0 */ + 0, 0x6124, 0, 0, 0, 0, 0x6125, 0, /* 0xE0 */ + 0x6127, 0x6128, 0x6126, 0, 0, 0, 0x4953, 0x612A, /* 0xF0 */ + 0x6129 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x612C, 0x612B, 0x612D, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x612E, 0x6130, 0x612F, 0, /* 0x00 */ + 0, 0x3979, 0, 0x6132, 0, 0x6131, 0, 0, /* 0x10 */ + 0x3445, 0, 0x3F53, 0, 0x453C, 0, 0x6133, 0x4038, /* 0x10 */ + 0, 0, 0, 0x3B3A, 0, 0x3179, 0x6134, 0, /* 0x20 */ + 0x4D51, 0, 0, 0x4A63, 0x6135, 0, 0, 0, /* 0x20 */ + 0x4544, 0x4D33, 0x3943, 0x3F3D, 0, 0, 0, 0x434B, /* 0x30 */ + 0x5234, 0, 0x442E, 0x3268, 0x6136, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x6137, 0, 0x613C, 0, /* 0x40 */ + 0, 0x613A, 0x6139, 0x5A42, 0x3326, 0x6138, 0, 0x305A, /* 0x40 */ + 0, 0x482A, 0, 0, 0x484A, 0, 0, 0, /* 0x50 */ + 0, 0x4E31, 0x613D, 0x613B, 0x435C, 0x4026, 0, 0, /* 0x50 */ + 0x482B, 0, 0x492D, 0, 0x613F, 0x4E2C, 0x374D, 0x6140, /* 0x60 */ + 0, 0x613E, 0x4856, 0x6141, 0, 0x6142, 0, 0, /* 0x60 */ + 0x305B, 0, 0, 0x3E76, 0x6147, 0, 0x6144, 0x466D, /* 0x70 */ + 0x6143, 0, 0, 0, 0, 0, 0, 0x3526, /* 0x70 */ + 0, 0, 0x614A, 0, 0, 0, 0x6145, 0x6146, /* 0x80 */ + 0, 0x6149, 0x6148, 0x4925, 0, 0, 0x4142, 0x4141, /* 0x80 */ + 0, 0x353F, 0, 0, 0x614B, 0, 0, 0, /* 0x90 */ + 0, 0, 0x614C, 0, 0, 0x614D, 0, 0, /* 0x90 */ + 0, 0, 0, 0x614F, 0, 0x614E, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x3156, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x6157, 0x4868, 0x6151, 0, 0x6153, 0, 0, /* 0xB0 */ + 0x6155, 0x3F3E, 0, 0, 0x6156, 0x6154, 0x3C40, 0, /* 0xB0 */ + 0, 0, 0x6150, 0x6152, 0, 0x4942, 0, 0x3E49, /* 0xC0 */ + 0, 0, 0x6159, 0, 0, 0x6158, 0, 0, /* 0xC0 */ + 0, 0, 0x615A, 0, 0x3C26, 0x3A2F, 0, 0, /* 0xD0 */ + 0x4577, 0x615B, 0, 0x444B, 0, 0, 0x615D, 0, /* 0xD0 */ + 0, 0, 0x4E21, 0x615C, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x4169, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x6162, 0, 0x6164, 0x6165, 0x4354, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x6163, 0, 0x6160, 0, 0x615E, 0x615F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6161, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x6168, 0, 0x6166, 0, 0x6167, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x6169, /* 0x10 */ + 0x616B, 0x616C, 0x616D, 0, 0x616E, 0, 0, 0x616A, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x6170, 0, 0, 0, 0x616F, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x6171, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x4E45, 0, 0, 0, 0x6174, 0x6172, /* 0x40 */ + 0x6173, 0, 0, 0, 0x3462, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4C7E, 0, 0, 0, 0x4A4A, 0, /* 0x50 */ + 0x6176, 0, 0, 0, 0x6175, 0, 0, 0, /* 0x50 */ + 0, 0x6177, 0x6178, 0, 0, 0, 0, 0x617C, /* 0x60 */ + 0x6179, 0x617A, 0x617B, 0, 0x617D, 0, 0, 0, /* 0x60 */ + 0x617E, 0, 0x6221, 0, 0, 0, 0x6222, 0, /* 0x70 */ + 0x6223, 0, 0x482F, 0x4550, 0x6224, 0x4772, 0x4934, 0, /* 0x70 */ + 0x6225, 0, 0, 0x6226, 0x452A, 0, 0x3327, 0x3944, /* 0x80 */ + 0x6227, 0, 0, 0x6228, 0, 0, 0x6229, 0, /* 0x80 */ + 0x3B29, 0, 0, 0x622B, 0, 0, 0x622A, 0, /* 0x90 */ + 0, 0x622C, 0x622D, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x4869, 0, /* 0xA0 */ + 0x622E, 0, 0, 0, 0x622F, 0, 0, 0x7369, /* 0xB0 */ + 0x6230, 0x6231, 0x6232, 0, 0, 0, 0, 0x3B2E, /* 0xB0 */ + 0, 0, 0x6233, 0x4756, 0, 0, 0x4B5F, 0, /* 0xC0 */ + 0x314E, 0, 0x3157, 0, 0, 0x6234, 0, 0, /* 0xC0 */ + 0, 0, 0x6236, 0, 0, 0, 0x6235, 0x4570, /* 0xD0 */ + 0, 0, 0, 0x4039, 0x5D39, 0, 0x6237, 0x4C41, /* 0xD0 */ + 0, 0x6238, 0, 0x3446, 0x4857, 0x6239, 0, 0x623A, /* 0xE0 */ + 0, 0, 0x623B, 0, 0, 0, 0x4C5C, 0, /* 0xE0 */ + 0, 0, 0x4C55, 0, 0x443E, 0, 0, 0, /* 0xF0 */ + 0x416A, 0, 0, 0x623D, 0, 0, 0x3D62 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3E4A, 0, 0, 0x6240, 0, 0, 0x623F, /* 0x00 */ + 0x623E, 0x487D, 0, 0x3447, 0x3829, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x6246, 0, 0, 0x6243, 0x3F3F, /* 0x10 */ + 0x4C32, 0, 0, 0, 0x6242, 0x6244, 0x6245, 0, /* 0x20 */ + 0, 0x6241, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x6247, /* 0x30 */ + 0x6248, 0, 0x442F, 0, 0x3463, 0, 0, 0, /* 0x30 */ + 0x4365, 0, 0, 0, 0, 0, 0, 0x6249, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x624A, 0x624D, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3F67, 0, 0x4644, 0, 0x624E, 0x4B53, 0, /* 0x60 */ + 0x624B, 0, 0, 0x624C, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x6251, 0, 0, 0, 0, 0x6250, 0x624F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x6253, 0, 0, 0x6252, 0, /* 0x80 */ + 0, 0x6254, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x6256, 0, /* 0x90 */ + 0x6255, 0, 0, 0, 0, 0x4A4D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x3D56, 0x4E46, 0, 0, /* 0xA0 */ + 0x6257, 0, 0, 0x4637, 0, 0, 0x6258, 0, /* 0xB0 */ + 0, 0x6259, 0, 0x625D, 0x625B, 0x625C, 0, 0x625A, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x625E, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x625F, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6260, /* 0xD0 */ + 0, 0, 0x6261, 0x4C37, 0x6262, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x4C70, 0x6263, 0, 0x434E, 0, 0x476A, /* 0xE0 */ + 0, 0x366B, 0, 0, 0, 0x433B, 0x6264, 0x363A, /* 0xE0 */ + 0, 0, 0, 0x4050, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x6265 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3A3D, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x6266, 0, 0, 0, /* 0x00 */ + 0, 0, 0x6267, 0, 0x3826, 0x3A55, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x6269, 0, 0, 0, 0, 0x4556, 0x3A56, 0x354E, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x4B24, 0, 0x474B, 0, 0, 0, /* 0x30 */ + 0, 0, 0x4557, 0, 0, 0, 0, 0x395C, /* 0x30 */ + 0, 0, 0, 0, 0, 0x626B, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x3E4B, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x4E32, 0x3945, 0, 0, 0x3827, /* 0x60 */ + 0, 0, 0x4823, 0, 0x626D, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x626F, 0, 0, 0, /* 0x70 */ + 0, 0x386B, 0, 0, 0, 0, 0x626E, 0x4476, /* 0x80 */ + 0, 0, 0, 0, 0x6271, 0x3337, 0x626C, 0, /* 0x80 */ + 0, 0x486A, 0, 0x3130, 0, 0x3A6C, 0, 0x4F52, /* 0x90 */ + 0, 0, 0x6270, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x6272, 0, 0, 0, 0x4A4B, /* 0xA0 */ + 0, 0x4059, 0x6274, 0, 0, 0, 0, 0x6275, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x6273, 0, 0, /* 0xB0 */ + 0, 0, 0x334E, 0, 0x627B, 0, 0x627A, 0, /* 0xB0 */ + 0, 0x3C27, 0, 0, 0, 0x627C, 0x6277, 0, /* 0xC0 */ + 0, 0, 0x627D, 0x6278, 0, 0, 0, 0, /* 0xC0 */ + 0x4858, 0x6276, 0, 0, 0x6279, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x6322, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6321, /* 0xE0 */ + 0x4B61, 0, 0, 0, 0x627E, 0, 0, 0x306B, /* 0xE0 */ + 0, 0, 0, 0, 0x6324, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x6323 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3E4C, 0, 0, 0, 0, 0, 0x6325, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x4143, 0, /* 0x00 */ + 0, 0x6327, 0x6326, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x6328, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x6268, 0, /* 0x20 */ + 0, 0, 0x626A, 0x632A, 0x6329, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x3C28, 0, 0x4E69, 0, 0x3C52, 0, /* 0x30 */ + 0x632B, 0x3737, 0, 0, 0, 0, 0, 0x3540, /* 0x40 */ + 0x3527, 0x3B63, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x4D34, 0, 0, 0x6331, 0, 0x6330, 0x4144, 0x632D, /* 0x50 */ + 0, 0, 0x632F, 0, 0, 0x3D4B, 0x3F40, 0x632E, /* 0x50 */ + 0x632C, 0, 0x472A, 0, 0, 0x3E4D, 0, 0, /* 0x60 */ + 0x493C, 0, 0, 0, 0, 0x3A57, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x4578, /* 0x70 */ + 0, 0, 0x6332, 0, 0, 0, 0, 0x6333, /* 0x70 */ + 0x6349, 0x3658, 0, 0, 0x4F3D, 0x4135, 0, 0, /* 0x80 */ + 0, 0, 0x6334, 0, 0, 0x3252, 0x4477, 0x4A21, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x6335, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x357A, 0x6336, /* 0xA0 */ + 0, 0, 0x6338, 0, 0, 0, 0x6339, 0, /* 0xA0 */ + 0x4729, 0, 0, 0x633A, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x633B, 0x633C, 0, 0, 0x3659, 0x3253, 0x4645, /* 0xB0 */ + 0x3D28, 0x3B64, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x633D, 0, 0x3D29, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x324A, 0x4943, 0, 0, 0x633E, 0, 0, /* 0xD0 */ + 0x486B, 0, 0, 0, 0, 0, 0, 0x4145, /* 0xD0 */ + 0, 0x6341, 0, 0x6342, 0x4769, 0, 0x3F41, 0x633F, /* 0xE0 */ + 0, 0x4361, 0, 0, 0x6340, 0, 0, 0, /* 0xE0 */ + 0x3E4E, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0x305C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3529, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x6343, 0, 0, 0x4478, 0, 0x6344, 0x4047, 0, /* 0x00 */ + 0, 0, 0, 0, 0x4C2D, 0, 0, 0x4923, /* 0x10 */ + 0x6345, 0x6346, 0x4355, 0, 0x4E47, 0, 0, 0x6348, /* 0x10 */ + 0x6347, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x3C6F, 0, /* 0x20 */ + 0, 0x634A, 0x3070, 0, 0, 0, 0, 0x634D, /* 0x30 */ + 0, 0, 0, 0x634B, 0x3254, 0x374E, 0x634C, 0x3946, /* 0x30 */ + 0x3972, 0, 0x4A66, 0x634E, 0, 0, 0x4B54, 0, /* 0x40 */ + 0, 0x6350, 0, 0, 0, 0x4051, 0x314F, 0x323A, /* 0x40 */ + 0x302C, 0, 0, 0, 0, 0, 0, 0x634F, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x6351, 0x6352, 0x3E77, 0, 0, 0, 0, /* 0x60 */ + 0, 0x6353, 0, 0x334F, 0, 0, 0, 0, /* 0x60 */ + 0x6355, 0, 0, 0, 0x376A, 0, 0x3566, 0, /* 0x70 */ + 0, 0x6356, 0x3675, 0, 0, 0x6357, 0, 0x407C, /* 0x70 */ + 0, 0x464D, 0, 0x4060, 0x3A75, 0, 0, 0, /* 0x80 */ + 0x6358, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x4362, 0x416B, 0, 0x635A, 0x635C, 0x6359, /* 0x90 */ + 0x635B, 0, 0, 0, 0, 0, 0, 0x3722, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x635D, 0x3726, 0, 0, 0, 0x3567, 0x4D52, /* 0xA0 */ + 0x635F, 0, 0, 0, 0, 0, 0x6360, 0, /* 0xB0 */ + 0, 0, 0x312E, 0, 0, 0, 0, 0x6363, /* 0xB0 */ + 0, 0, 0, 0x3376, 0x6362, 0x6361, 0, 0x6365, /* 0xC0 */ + 0x635E, 0, 0x6366, 0x4E29, 0, 0x6367, 0, 0x6368, /* 0xC0 */ + 0, 0, 0x5474, 0x636A, 0, 0x6369, 0, 0, /* 0xD0 */ + 0, 0x636B, 0x636C, 0, 0x4E35, 0x636D, 0, 0x706F, /* 0xD0 */ + 0x3E4F, 0x636E, 0x636F, 0x3D57, 0, 0x4638, 0x6370, 0, /* 0xE0 */ + 0, 0, 0x4328, 0, 0, 0x6371, 0, 0x433C, /* 0xE0 */ + 0x6372, 0, 0, 0, 0, 0, 0x3625, 0, /* 0xF0 */ + 0x513F, 0x435D, 0x3C33, 0, 0, 0, 0, 0x3448 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6373, 0, 0x6422, 0, 0x6376, 0, /* 0x00 */ + 0x3568, 0, 0x6375, 0x6424, 0, 0, 0, 0x6374, /* 0x00 */ + 0, 0x3E50, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x6378, 0x6379, 0, 0x452B, 0, 0, 0x637A, 0, /* 0x10 */ + 0x335E, 0, 0, 0, 0, 0x3F5A, 0x4964, 0, /* 0x20 */ + 0x637C, 0, 0, 0, 0x4268, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x6377, 0, 0x637B, 0x637D, 0, /* 0x30 */ + 0, 0x3A7B, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x6426, 0x492E, 0, /* 0x40 */ + 0x4826, 0x4579, 0, 0x365A, 0x6425, 0x6423, 0, 0x4835, /* 0x40 */ + 0x637E, 0x435E, 0x457B, 0, 0x457A, 0, 0x3A76, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x6438, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x6428, 0, 0x642A, /* 0x60 */ + 0, 0, 0, 0, 0x642D, 0, 0x642E, 0, /* 0x60 */ + 0x642B, 0x642C, 0, 0, 0x6429, 0x6427, 0, 0, /* 0x70 */ + 0, 0, 0x6421, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4A4F, 0x3255, /* 0x80 */ + 0, 0, 0, 0x6435, 0, 0x6432, 0, 0x6437, /* 0x80 */ + 0, 0, 0x6436, 0, 0x4773, 0x4C27, 0, 0x3B3B, /* 0x90 */ + 0x6430, 0x6439, 0x6434, 0, 0x6433, 0x642F, 0, 0x6431, /* 0x90 */ + 0, 0x3449, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x433D, 0, 0, 0x407D, 0, 0, /* 0xA0 */ + 0, 0x4822, 0, 0, 0x643E, 0, 0, 0, /* 0xB0 */ + 0x4824, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x4061, 0x643B, 0, 0, 0x484F, 0, 0x643F, 0x4A53, /* 0xC0 */ + 0, 0x435B, 0, 0x643A, 0x643C, 0, 0, 0x643D, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x6440, 0, 0, /* 0xD0 */ + 0x3C44, 0, 0, 0, 0x4646, 0x6445, 0x6444, 0, /* 0xE0 */ + 0, 0x6441, 0, 0, 0, 0x4F36, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x644A, 0, 0, 0x644E, 0x644B /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6447, 0, 0, 0, 0, 0, 0, 0x6448, /* 0x00 */ + 0, 0, 0, 0, 0, 0x644D, 0, 0, /* 0x00 */ + 0, 0x6442, 0x5255, 0x6449, 0x6443, 0, 0, 0x644C, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x6452, /* 0x10 */ + 0, 0x344A, 0, 0x644F, 0, 0, 0, 0x6450, /* 0x20 */ + 0, 0, 0x6451, 0x6454, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x6453, /* 0x30 */ + 0x4876, 0, 0, 0, 0, 0x6455, 0x4E7C, 0x4A6D, /* 0x30 */ + 0x645A, 0, 0, 0x6457, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x6456, 0x4052, 0, 0x6459, /* 0x40 */ + 0x645B, 0, 0, 0, 0x6458, 0, 0x645F, 0, /* 0x50 */ + 0x645C, 0, 0, 0, 0, 0, 0, 0x645D, /* 0x50 */ + 0x6446, 0, 0, 0, 0x645E, 0x6460, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x6461, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x4A46, 0, 0x6462, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4C62, 0, /* 0x70 */ + 0, 0x364E, 0x3729, 0x6463, 0, 0, 0, 0, /* 0x80 */ + 0, 0x4A34, 0, 0x3F68, 0, 0x4C30, 0, 0, /* 0x80 */ + 0x6464, 0, 0x4E33, 0, 0, 0x4774, 0, 0x4146, /* 0x90 */ + 0x4734, 0, 0, 0x3D4D, 0, 0, 0, 0x3040, /* 0x90 */ + 0, 0x6469, 0x6467, 0, 0x6465, 0x3421, 0, 0x3E51, /* 0xA0 */ + 0x646A, 0, 0, 0x6468, 0, 0x6466, 0x646E, 0, /* 0xA0 */ + 0, 0x646D, 0x646C, 0x646B, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x646F, 0, 0, 0, 0x6470, 0x403A, 0, /* 0xB0 */ + 0x6471, 0, 0x6473, 0, 0, 0x6472, 0, 0, /* 0xC0 */ + 0, 0, 0x3852, 0, 0, 0, 0x4138, 0, /* 0xC0 */ + 0, 0, 0x6475, 0, 0, 0, 0x457C, 0, /* 0xD0 */ + 0x6474, 0, 0, 0, 0x6476, 0, 0x4A35, 0x416C, /* 0xD0 */ + 0x3947, 0, 0x6477, 0, 0, 0, 0, 0x4E48, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6479, /* 0xE0 */ + 0, 0, 0x647A, 0, 0x647B, 0, 0x647C, 0, /* 0xF0 */ + 0x3B65, 0, 0x647D, 0x374F, 0, 0, 0x356A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x352A, 0, 0x6521, 0, 0x4C73, 0x3948, 0x647E, 0, /* 0x00 */ + 0, 0, 0x6524, 0x4C66, 0, 0x473C, 0, 0, /* 0x00 */ + 0x4933, 0, 0, 0, 0x3D63, 0x6523, 0, 0x3C53, /* 0x10 */ + 0x3949, 0x3B66, 0x3569, 0x4A36, 0x6522, 0, 0, 0, /* 0x10 */ + 0x4147, 0x4B42, 0x3A77, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x3B67, 0x445D, 0, 0x6527, 0x4E5F, /* 0x20 */ + 0x3A59, 0, 0x6528, 0x3F42, 0, 0x652A, 0, 0, /* 0x30 */ + 0, 0x3E52, 0x3A30, 0, 0, 0, 0, 0x6529, /* 0x30 */ + 0, 0, 0x3D2A, 0x383E, 0x4148, 0x6525, 0x652B, 0, /* 0x40 */ + 0, 0, 0, 0x6526, 0x3750, 0, 0x652E, 0x6532, /* 0x40 */ + 0x376B, 0, 0, 0, 0, 0, 0x652D, 0, /* 0x50 */ + 0, 0, 0, 0x6536, 0, 0, 0x394A, 0, /* 0x50 */ + 0, 0x4D6D, 0x303C, 0x6533, 0, 0, 0x356B, 0, /* 0x60 */ + 0x6530, 0, 0, 0, 0, 0, 0x6531, 0, /* 0x60 */ + 0, 0x457D, 0x652F, 0x652C, 0, 0x3328, 0x4064, 0, /* 0x70 */ + 0, 0x3828, 0, 0, 0, 0x6538, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x6535, 0, 0, 0, 0, 0, 0x6537, /* 0x80 */ + 0, 0, 0, 0x6534, 0, 0, 0, 0, /* 0x90 */ + 0, 0x3751, 0x4233, 0x6539, 0x416E, 0, 0, 0x6546, /* 0x90 */ + 0, 0, 0x6542, 0x653C, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x6540, 0x3C7A, 0x305D, 0x653B, 0x6543, /* 0xA0 */ + 0x6547, 0x394B, 0x4C56, 0, 0x4456, 0x653D, 0, 0, /* 0xB0 */ + 0x6545, 0, 0x653A, 0x433E, 0, 0x653F, 0x303D, 0x4C4A, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x653E, /* 0xC0 */ + 0, 0, 0x365B, 0x486C, 0, 0, 0, 0x416D, /* 0xC0 */ + 0, 0x4E50, 0x3D6F, 0, 0, 0x656E, 0, 0, /* 0xD0 */ + 0x6548, 0, 0x407E, 0, 0x6544, 0x6549, 0x654B, 0, /* 0xD0 */ + 0x4479, 0x654E, 0, 0, 0x654A, 0, 0, 0, /* 0xE0 */ + 0x4A54, 0x344B, 0, 0, 0x4C4B, 0, 0, 0x305E, /* 0xE0 */ + 0, 0, 0x654D, 0, 0x4E7D, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0x654C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x316F, 0, 0, 0x466C, 0x654F, 0, 0, /* 0x00 */ + 0, 0x6556, 0x6550, 0x6557, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x6553, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x477B, 0, 0, 0x3C4A, 0x6555, /* 0x10 */ + 0, 0x6552, 0x6558, 0x6551, 0, 0, 0x3D44, 0, /* 0x20 */ + 0, 0, 0, 0x4B25, 0, 0, 0x3D4C, 0, /* 0x20 */ + 0, 0x6554, 0x6560, 0, 0, 0x655C, 0, 0x655F, /* 0x30 */ + 0, 0x655D, 0x6561, 0x655B, 0, 0x6541, 0x4053, 0, /* 0x30 */ + 0, 0x484B, 0, 0x655E, 0, 0, 0x6559, 0, /* 0x40 */ + 0, 0, 0x4121, 0x3752, 0, 0x3D2B, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x3F25, 0x4136, 0x6564, 0, /* 0x50 */ + 0, 0x6566, 0x6567, 0, 0, 0x6563, 0x6565, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x655A, 0x6562, /* 0x60 */ + 0, 0x656A, 0x6569, 0, 0, 0x4B7A, 0, 0, /* 0x60 */ + 0x372B, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x6568, 0, 0x656C, 0x656B, 0x656F, 0, 0x6571, /* 0x70 */ + 0, 0, 0x3B3C, 0x656D, 0, 0, 0, 0, /* 0x80 */ + 0x6572, 0x6573, 0, 0, 0x6574, 0, 0x657A, 0x453B, /* 0x80 */ + 0x6576, 0, 0x6575, 0x6577, 0x6578, 0, 0x6579, 0, /* 0x90 */ + 0, 0, 0, 0x657B, 0x657C /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x344C, 0, /* 0x30 */ + 0x657D, 0, 0x657E, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x6621, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x6622, 0x6623, 0x6624, 0, /* 0x40 */ + 0x6625, 0x6626, 0, 0, 0x6628, 0x6627, 0, 0, /* 0x50 */ + 0x6629, 0, 0, 0, 0, 0, 0, 0x662A, /* 0x50 */ + 0x662B, 0, 0, 0, 0, 0, 0, 0x662E, /* 0x60 */ + 0x662C, 0x662D, 0x3A61, 0x3753, 0, 0, 0x4356, 0, /* 0x60 */ + 0x4833, 0, 0x3D70, 0, 0, 0x474D, 0, 0x486D, /* 0x70 */ + 0x662F, 0x586D, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x6630, 0x6632, 0, 0x4D65, 0x6631, 0x6634, /* 0x80 */ + 0x6633, 0, 0x4D53, 0, 0x6635, 0, 0x487E, 0, /* 0x80 */ + 0, 0, 0, 0, 0x6636, 0, 0, 0, /* 0x90 */ + 0, 0, 0x6639, 0, 0, 0x6638, 0x6637, 0, /* 0x90 */ + 0, 0, 0, 0x663A, 0x3732, 0, 0, 0, /* 0xA0 */ + 0x4122, 0x3541, 0, 0, 0, 0, 0x663E, 0x663B, /* 0xA0 */ + 0, 0, 0x663C, 0, 0, 0, 0x663F, 0, /* 0xB0 */ + 0x6640, 0x663D, 0, 0, 0, 0x3129, 0, 0, /* 0xB0 */ + 0, 0x3227, 0, 0, 0, 0x6642, 0x6643, 0, /* 0xC0 */ + 0, 0, 0x6644, 0, 0x4D62, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x3D2C, 0, 0x6646, 0x6645, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x3F69, 0x6647, 0, 0, 0, 0, 0x6648, 0, /* 0xE0 */ + 0, 0x6649, 0, 0x3465, 0, 0, 0, 0, /* 0xE0 */ + 0x344D, 0, 0, 0x664A, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x664B, 0, 0x4B5D, 0x4D63 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4D54, 0x4F37, 0, 0x394D, 0x664E, 0x3C54, 0x664D, 0, /* 0x00 */ + 0, 0, 0, 0x664F, 0x3C29, 0, 0, 0, /* 0x00 */ + 0x4251, 0, 0x6650, 0, 0, 0x394C, 0, 0x4C57, /* 0x10 */ + 0x6651, 0x6652, 0, 0, 0x6653, 0, 0, 0, /* 0x10 */ + 0, 0x6654, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x6655, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x3C2A, 0, 0, 0x4C6D, 0, /* 0x30 */ + 0, 0, 0, 0x6657, 0, 0x433F, 0, 0x6656, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x6659, 0, /* 0x40 */ + 0, 0, 0x6658, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x665A, 0, 0, 0, 0x403B, 0, /* 0x50 */ + 0x665B, 0, 0x665C, 0, 0, 0, 0x4A39, 0x665D, /* 0x50 */ + 0, 0x416F, 0x665E, 0, 0, 0, 0, 0, /* 0x60 */ + 0x665F, 0, 0, 0, 0, 0, 0, 0x4E7E, /* 0x60 */ + 0x6662, 0, 0x6661, 0x6660, 0x4430, 0, 0x6663, 0x3F26, /* 0x70 */ + 0, 0x6664, 0, 0, 0, 0x6665, 0x4F38, 0x6666, /* 0x70 */ + 0, 0, 0, 0, 0x6667, 0x6669, 0x6668, 0x4825, /* 0x80 */ + 0, 0x4679, 0, 0x4F3E, 0x4829, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x666B, 0, 0, 0x3E53, 0, /* 0x90 */ + 0x492A, 0, 0x666C, 0x666A, 0, 0x344E, 0, 0, /* 0x90 */ + 0, 0x3854, 0x3B68, 0, 0, 0x486E, 0, 0, /* 0xA0 */ + 0, 0x382A, 0x4B43, 0, 0x666F, 0x666D, 0, 0x394E, /* 0xA0 */ + 0, 0x394F, 0x3069, 0, 0x3A68, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x4759, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x305F, 0x6674, 0, 0x4340, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x4758, 0, 0x425B, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x6676, 0, /* 0xD0 */ + 0, 0x6672, 0x6675, 0x6670, 0, 0x6673, 0x4B26, 0, /* 0xD0 */ + 0, 0x3855, 0, 0, 0x307D, 0x6671, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6678, /* 0xE0 */ + 0, 0x6679, 0, 0, 0x4639, 0, 0, 0, /* 0xF0 */ + 0x363B, 0, 0, 0, 0x6726, 0x473D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3B69, 0, 0, 0x363C, 0x4048, 0x4F46, /* 0x00 */ + 0x4C2E, 0x6677, 0x4054, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x3553, 0x667A, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x667C, 0, 0, 0, 0, /* 0x20 */ + 0, 0x667B, 0, 0, 0, 0, 0, 0x667D, /* 0x20 */ + 0, 0x4326, 0, 0x473E, 0, 0, 0, 0, /* 0x30 */ + 0, 0x4431, 0, 0, 0, 0, 0x6723, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x6722, 0, /* 0x40 */ + 0, 0, 0, 0x667E, 0, 0, 0x3F55, 0, /* 0x40 */ + 0x4965, 0x6725, 0, 0x6724, 0x3950, 0x4F53, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x6735, /* 0x50 */ + 0, 0, 0, 0, 0, 0x6729, 0x672A, 0, /* 0x60 */ + 0, 0, 0, 0x3C70, 0, 0, 0x6728, 0, /* 0x60 */ + 0x3978, 0x6727, 0, 0, 0x672B, 0, 0, 0, /* 0x70 */ + 0x4432, 0x4A22, 0x4123, 0, 0, 0, 0, 0x425C, /* 0x70 */ + 0x672F, 0, 0x6730, 0x672C, 0, 0, 0, 0, /* 0x80 */ + 0x672D, 0, 0x672E, 0, 0, 0, 0, 0x3951, /* 0x80 */ + 0, 0, 0, 0x6736, 0, 0x6732, 0, 0, /* 0x90 */ + 0, 0, 0x4966, 0, 0x4B6C, 0x4928, 0, 0, /* 0x90 */ + 0x6731, 0, 0, 0x6734, 0x6733, 0, 0, 0, /* 0xA0 */ + 0x4B44, 0x6737, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x6738, 0, 0, 0x4137, 0, 0x6739, 0, 0, /* 0xB0 */ + 0x673B, 0, 0x673F, 0, 0, 0x673C, 0x673A, 0x473F, /* 0xB0 */ + 0x673D, 0, 0x673E, 0, 0, 0, 0x3232, 0, /* 0xC0 */ + 0x6745, 0x6740, 0, 0, 0, 0x6741, 0, 0, /* 0xC0 */ + 0, 0x6742, 0, 0x4221, 0, 0, 0, 0, /* 0xD0 */ + 0x6744, 0x6743, 0x6746, 0, 0, 0, 0, 0x6747, /* 0xD0 */ + 0x6748, 0, 0, 0x3F43, 0, 0x3269, 0, 0x6749, /* 0xE0 */ + 0x4E57, 0, 0x3C2B, 0, 0, 0x3D2D, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x3B6A, 0x4357, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x674A, 0x674B, 0x3131, 0, 0x674C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x674D, 0x674E, 0, 0, 0x674F, 0, 0x6750, /* 0x00 */ + 0x363D, 0x5A2A, 0x6751, 0, 0x4065, 0x6752, 0x3C4B, 0, /* 0x00 */ + 0x6753, 0, 0x5030, 0, 0, 0, 0x6754, 0x4A5E, /* 0x10 */ + 0x345C, 0, 0, 0x4124, 0x3D58, 0, 0x4971, 0x3D2E, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x6755, 0x3952, 0x6756, 0x484C, 0, 0x6764, 0, /* 0x20 */ + 0, 0, 0, 0x6758, 0, 0x4249, 0x4775, 0x383F, /* 0x30 */ + 0x6757, 0x4125, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x6759, 0, 0, 0, 0, 0, 0, 0x447A, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x675B, 0x675A, 0x675D, 0, 0, 0x675C, 0, 0x675E, /* 0x50 */ + 0, 0, 0x6760, 0, 0x675F, 0, 0x344F, 0, /* 0x60 */ + 0x6761, 0, 0x6762, 0x6763, 0, 0, 0x3A31, 0x4E49, /* 0x60 */ + 0, 0x6765, 0x3F27, 0, 0, 0, 0x3170, 0x6766, /* 0x70 */ + 0x6767, 0, 0, 0, 0, 0, 0x6768, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3072, 0, 0x6769, 0, 0, /* 0x80 */ + 0, 0, 0x676A, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x4967, 0, 0, 0, 0x3C47, 0, 0x676C, /* 0x90 */ + 0, 0, 0, 0, 0, 0x3329, 0x3032, 0, /* 0xA0 */ + 0, 0, 0, 0x676B, 0x676E, 0x474E, 0, 0x3F44, /* 0xA0 */ + 0, 0x3256, 0, 0x4B27, 0, 0, 0, 0, /* 0xB0 */ + 0x375D, 0x365C, 0, 0x676D, 0, 0x326A, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x3423, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x3171, 0x6772, 0x4E6A, 0x425D, 0, 0, 0x4944, /* 0xD0 */ + 0, 0x677E, 0, 0x3257, 0x677C, 0, 0x677A, 0x6771, /* 0xD0 */ + 0, 0x676F, 0, 0x6770, 0, 0x3C63, 0x366C, 0x4377, /* 0xE0 */ + 0, 0, 0, 0x4651, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x3151, 0, 0x6774, 0x6773, 0, 0, 0, /* 0xF0 */ + 0, 0x6779, 0x6775, 0x6778 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4C50, 0x6777, 0x3258, 0x337D, 0x677B, 0, /* 0x00 */ + 0, 0x677D, 0, 0, 0, 0, 0x3754, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x6823, 0x682C, /* 0x10 */ + 0x682D, 0, 0, 0, 0x302B, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x6834, 0, 0, 0, 0, /* 0x20 */ + 0x3071, 0, 0, 0x682B, 0, 0, 0, 0x682A, /* 0x20 */ + 0, 0x6825, 0x6824, 0, 0x6822, 0x6821, 0x4363, 0, /* 0x30 */ + 0x427B, 0x6827, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x6826, 0, 0, 0, 0, 0x6829, 0, 0, /* 0x40 */ + 0, 0x4170, 0x3755, 0, 0, 0, 0, 0x3141, /* 0x40 */ + 0x6828, 0, 0x3953, 0, 0, 0, 0, 0, /* 0x50 */ + 0x4171, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x683A, 0, 0x683B, 0, 0x3259, /* 0x70 */ + 0, 0, 0, 0x322E, 0x6838, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x682E, 0, 0x6836, /* 0x80 */ + 0, 0x683D, 0x6837, 0, 0, 0, 0x6835, 0, /* 0x80 */ + 0, 0, 0, 0x6776, 0, 0, 0x6833, 0, /* 0x90 */ + 0, 0, 0x682F, 0, 0, 0, 0x3450, 0x6831, /* 0x90 */ + 0x683C, 0, 0x6832, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x683E, 0, 0x6830, 0x477C, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x4D69, 0, 0, 0, 0x6839, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x684F, 0, 0, /* 0xB0 */ + 0, 0x6847, 0, 0, 0, 0x3F7B, 0, 0, /* 0xC0 */ + 0, 0, 0x3546, 0, 0x365D, 0, 0x6842, 0, /* 0xC0 */ + 0, 0, 0, 0x325B, 0, 0, 0x3E54, 0, /* 0xD0 */ + 0x6845, 0, 0, 0, 0x3A5A, 0, 0, 0x4551, /* 0xD0 */ + 0x684A, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x4A6E, 0, 0x6841, 0, 0, 0, 0x325A, /* 0xE0 */ + 0x3856, 0x4929, 0x684B, 0, 0x683F, 0, 0, 0x6848, /* 0xF0 */ + 0, 0, 0, 0x6852, 0, 0x6843 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6844, 0x463A, 0, 0, 0x6849, /* 0x00 */ + 0, 0, 0, 0x6846, 0x4B28, 0x684C, 0x3060, 0, /* 0x00 */ + 0, 0, 0, 0x6840, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x684E, 0, 0x684D, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x476B, 0x6854, 0, 0x685F, 0, 0, 0, /* 0x20 */ + 0, 0x337E, 0, 0, 0, 0x6862, 0, 0, /* 0x30 */ + 0x6850, 0, 0, 0, 0x6855, 0x4D6E, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x685E, 0, /* 0x40 */ + 0, 0x4D55, 0, 0, 0, 0, 0x4E2A, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x4378, /* 0x50 */ + 0, 0, 0, 0x336B, 0, 0, 0, 0, /* 0x50 */ + 0, 0x4972, 0x6864, 0x4621, 0, 0, 0x3031, 0, /* 0x60 */ + 0, 0x685D, 0, 0x6859, 0x4172, 0x6853, 0x685B, 0x6860, /* 0x60 */ + 0, 0x472C, 0, 0, 0, 0x302A, 0, 0x6858, /* 0x70 */ + 0, 0x6861, 0x4978, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x685C, 0, 0x6857, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3E55, 0, 0, 0, 0, /* 0x80 */ + 0x3D2F, 0, 0, 0, 0x3C2C, 0, 0, 0, /* 0x90 */ + 0, 0x4C58, 0, 0, 0x4947, 0, 0, 0x6867, /* 0x90 */ + 0, 0x6870, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x685A, 0, 0, /* 0xA0 */ + 0, 0, 0x3377, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3E78, 0x6865, 0, 0x686A, 0x4173, 0, 0, 0x6866, /* 0xB0 */ + 0, 0x686D, 0, 0, 0x435F, 0, 0x686E, 0, /* 0xC0 */ + 0, 0x4D56, 0x6863, 0x3338, 0, 0x6869, 0, 0, /* 0xC0 */ + 0x686C, 0x4C2C, 0, 0, 0, 0, 0x686F, 0, /* 0xD0 */ + 0, 0x6868, 0x686B, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x4B29, 0, 0x4F21, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x6873, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x687A, 0, 0, 0x6872 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3C43, 0, 0, 0, 0, 0, 0x6851, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x4A4E, 0, 0x4C22, 0x6879, 0x6878, 0, 0x6874, /* 0x10 */ + 0x6875, 0, 0x3136, 0, 0, 0, 0, 0x6877, /* 0x10 */ + 0, 0x6871, 0, 0, 0, 0, 0x4455, 0, /* 0x20 */ + 0, 0, 0, 0, 0x6876, 0x307E, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x4222, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x4A43, 0, 0, /* 0x30 */ + 0x687B, 0x6921, 0, 0x4859, 0, 0, 0, 0, /* 0x40 */ + 0x687E, 0x3E56, 0x3C49, 0x6923, 0, 0, 0x363E, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x6924, 0, 0x4979, /* 0x50 */ + 0x687D, 0, 0x6856, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x687C, 0, 0, 0, 0, /* 0x60 */ + 0x4F4F, 0x4622, 0x4973, 0, 0, 0x692B, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x6931, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x6932, 0, /* 0x70 */ + 0x6925, 0, 0, 0, 0x4776, 0, 0, 0x692F, /* 0x80 */ + 0x6927, 0, 0x6929, 0, 0, 0, 0, 0, /* 0x80 */ + 0x6933, 0x6928, 0, 0, 0x692C, 0, 0, 0x3172, /* 0x90 */ + 0, 0x4665, 0, 0x692D, 0x6930, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x6926, 0, 0x4126, 0, /* 0xA0 */ + 0x692A, 0x3B27, 0x3F45, 0x3730, 0x4C74, 0, 0x4C79, 0x3D72, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x6937, 0x6935, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x4F4E, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x6934, 0, 0, 0, 0x4D75, 0, 0x6936, /* 0xC0 */ + 0x6938, 0, 0, 0, 0, 0x6939, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x693C, 0x693A, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x4623, 0x693B, 0, 0, /* 0xE0 */ + 0, 0x484D, 0x692E, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3D73, /* 0xF0 */ + 0, 0x693D, 0x6942, 0x4174, 0, 0, 0x6941 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6922, 0, 0, 0, 0x6943, 0x4149, /* 0x00 */ + 0, 0, 0x693E, 0x6940, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x693F, 0, 0, 0x5D31, 0x5D22, /* 0x10 */ + 0, 0, 0x6945, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x6944, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x4D76, 0, 0x623C, /* 0x20 */ + 0x6946, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x6947, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x6948, 0x3857, 0, /* 0x40 */ + 0x3554, 0, 0, 0, 0x694A, 0x515D, 0, 0, /* 0x50 */ + 0, 0, 0x3575, 0, 0x4E3A, 0, 0x3673, 0x694B, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x694C, /* 0x60 */ + 0, 0, 0, 0x436E, 0, 0, 0, 0, /* 0x60 */ + 0, 0x694D, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x467A, 0, 0x303A, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x3263, 0x6952, 0x6953, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x694E, 0, 0x3B3D, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x694F, 0x4742, 0, 0, 0, /* 0xA0 */ + 0, 0x6950, 0x6951, 0x695B, 0, 0, 0, 0x6955, /* 0xA0 */ + 0x6958, 0, 0, 0, 0, 0, 0x6954, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x6956, 0, 0x6957, 0x3C58, /* 0xC0 */ + 0, 0x6959, 0, 0x4341, 0, 0x3756, 0x3342, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x695C, 0, 0, 0, /* 0xD0 */ + 0, 0x333F, 0, 0x6961, 0, 0, 0x695D, 0x6960, /* 0xD0 */ + 0, 0, 0, 0, 0x483A, 0, 0, 0, /* 0xE0 */ + 0, 0x695E, 0, 0, 0x695F, 0x4948, 0x485A, 0x6962, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x427D, 0x696C, 0, 0x6968, 0, 0, 0x326B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6966, 0, 0x4B2A, 0x6967, 0, 0, 0x6964, 0, /* 0x00 */ + 0x6965, 0x696A, 0x696D, 0, 0, 0x696B, 0, 0, /* 0x00 */ + 0, 0x6969, 0x6963, 0, 0, 0, 0, 0, /* 0x10 */ + 0x4358, 0, 0x6974, 0, 0x4C2A, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x6972, 0, 0, /* 0x20 */ + 0, 0x6973, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x696E, 0, 0, 0x6970, /* 0x30 */ + 0, 0, 0, 0x6971, 0, 0, 0, 0x696F, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x4066, 0, 0x4F39, 0x6978, 0, 0x6979, 0, /* 0x40 */ + 0, 0, 0, 0x6A21, 0, 0x3F2A, 0, 0x697B, /* 0x50 */ + 0, 0x697E, 0, 0, 0, 0, 0, 0x6976, /* 0x50 */ + 0x6975, 0, 0, 0x6A22, 0, 0, 0x325C, 0, /* 0x60 */ + 0x697C, 0, 0x6A23, 0, 0, 0, 0x697D, 0, /* 0x60 */ + 0, 0, 0, 0, 0x697A, 0, 0x4433, 0, /* 0x70 */ + 0x6977, 0, 0, 0, 0, 0, 0, 0x4768, /* 0x70 */ + 0, 0, 0x6A27, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4D3B, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x6A26, /* 0x90 */ + 0, 0, 0x6A25, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x6A2E, 0, 0, 0, 0x6A28, /* 0xA0 */ + 0, 0, 0, 0x6A30, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x4D66, 0x6A33, 0, 0x6A2A, 0, 0, /* 0xB0 */ + 0x6A2B, 0, 0, 0, 0x6A2F, 0, 0x6A32, 0x6A31, /* 0xC0 */ + 0, 0, 0, 0x6A29, 0, 0, 0, 0, /* 0xC0 */ + 0x6A2C, 0, 0x6A3D, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x6A36, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6A34, /* 0xE0 */ + 0, 0, 0x6A35, 0, 0, 0, 0x6A3A, 0x6A3B, /* 0xF0 */ + 0, 0x332A, 0, 0x3542, 0, 0, 0x6A39 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A24, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x6A38, 0x6A3C, 0x6A37, /* 0x00 */ + 0, 0x6A3E, 0, 0, 0, 0x6A40, 0x6A3F, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x6A42, 0x6A41, 0x695A, 0, 0, 0, 0x6A46, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x6A43, 0, 0, 0, 0, 0x6A44, 0, /* 0x30 */ + 0, 0x6A45, 0, 0x6A47, 0, 0, 0, 0, /* 0x30 */ + 0x376C, 0, 0x6A49, 0, 0x6A48, 0, 0x3D30, 0, /* 0x40 */ + 0, 0, 0, 0, 0x3954, 0x5E27, 0, 0, /* 0x40 */ + 0, 0, 0x6A4A, 0x3D51, 0, 0, 0, 0x3339, /* 0x50 */ + 0, 0x6A4B, 0, 0x3152, 0, 0x3E57, 0x6A4C, 0, /* 0x50 */ + 0, 0x3955, 0x6A4D, 0x3061, 0, 0, 0, 0, /* 0x60 */ + 0x493D, 0, 0, 0x6A4E, 0, 0, 0, 0, /* 0x60 */ + 0x3F6A, 0, 0x6A55, 0, 0, 0x6A52, 0, 0x436F, /* 0x70 */ + 0, 0, 0, 0, 0, 0x6A53, 0x6A50, 0x365E, /* 0x70 */ + 0, 0x6A4F, 0x6A56, 0, 0, 0, 0, 0, /* 0x80 */ + 0x3736, 0, 0, 0x425E, 0, 0x6A5C, 0, 0, /* 0x80 */ + 0, 0, 0x6A58, 0, 0, 0, 0x4235, 0x6A57, /* 0x90 */ + 0, 0x6A5A, 0, 0, 0, 0, 0x6A51, 0, /* 0x90 */ + 0, 0, 0x6A5B, 0, 0x6A5D, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x486F, 0, 0, 0x6A59, 0, /* 0xA0 */ + 0x6A5E, 0x6A60, 0, 0, 0x3853, 0x6A54, 0, 0x3041, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6A5F, /* 0xB0 */ + 0, 0x3A5B, 0x4E76, 0x6A61, 0x6A62, 0x4175, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x4E22, /* 0xC0 */ + 0, 0, 0, 0, 0x6A63, 0x4D35, 0, 0, /* 0xD0 */ + 0x6A64, 0x6A65, 0, 0, 0x4A64, 0x6A66, 0, 0x3A40, /* 0xD0 */ + 0, 0x4E23, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x6A6B, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x6A6C, 0x3E58, 0x6A6A, 0, 0, 0, /* 0xF0 */ + 0x4D67, 0x6A67, 0, 0, 0x6A69, 0x403D, 0x3F7E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A68, 0, 0x6A6D, 0, 0, 0x4A23, /* 0x00 */ + 0, 0, 0x6A6F, 0, 0x6A6E, 0, 0, 0, /* 0x00 */ + 0x336C, 0, 0x4B2B, 0x6A70, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x6A7C, 0x6A72, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x6A73, 0, 0, /* 0x20 */ + 0, 0, 0x6A74, 0x6A75, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x6A79, 0, /* 0x30 */ + 0x6A7A, 0, 0, 0x6A78, 0, 0, 0, 0, /* 0x30 */ + 0, 0x6A76, 0, 0x6A71, 0x6A77, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x6A7B, 0x7037, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x3228, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x6A7E, 0x365F, /* 0x50 */ + 0x6A7D, 0, 0, 0, 0x6B22, 0, 0x6B21, 0, /* 0x60 */ + 0, 0, 0x6B24, 0, 0, 0x6B23, 0, 0x6B25, /* 0x60 */ + 0, 0, 0x3D31, 0, 0x6B26, 0, 0, 0x6B27, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x6B28, 0x403E, /* 0x70 */ + 0, 0x4D57, 0, 0x6B29, 0, 0, 0x4A24, 0x4746, /* 0x80 */ + 0x6B2A, 0, 0x6B2B, 0x382B, 0, 0, 0, 0x352C, /* 0x80 */ + 0, 0, 0, 0x6B2C, 0, 0, 0x3B6B, 0x4741, /* 0x90 */ + 0x6B2D, 0, 0x3350, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6B2E, 0, 0, 0, 0, 0x6B30, 0x4D77, /* 0xA0 */ + 0, 0x6B2F, 0x3F46, 0, 0x6B31, 0, 0, 0x6B32, /* 0xA0 */ + 0, 0, 0x6B33, 0x3451, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x6B34, 0, 0, 0x6B35, 0, 0x6B36, /* 0xB0 */ + 0x6B37, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x3351, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x6B38, 0, 0x6B39, 0x6B3A, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x3272, 0, 0, 0x3F28, 0x6B3B, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x6B3C, 0, 0, 0, /* 0xF0 */ + 0x6B3D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3840, 0, 0x447B, 0x6B3E, 0, 0, 0, 0, /* 0x00 */ + 0x3757, 0, 0x3F56, 0, 0x6B41, 0, 0x4624, 0, /* 0x00 */ + 0x6B40, 0, 0, 0x3731, 0, 0, 0x6B3F, 0x4277, /* 0x10 */ + 0x352D, 0, 0, 0x6B42, 0, 0x6B43, 0, 0x3E59, /* 0x10 */ + 0, 0, 0, 0x376D, 0, 0x6B44, 0, 0, /* 0x20 */ + 0, 0, 0x4B2C, 0, 0, 0x405F, 0, 0, /* 0x20 */ + 0, 0x3576, 0, 0x4C75, 0x414A, 0, 0x6B45, 0, /* 0x30 */ + 0, 0, 0x3F47, 0x4370, 0x3E5A, 0, 0, 0, /* 0x30 */ + 0, 0x6B46, 0, 0, 0, 0, 0x6B49, 0, /* 0x40 */ + 0x6B4A, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x3A3E, 0x4242, 0x6B48, 0, 0x3E5B, 0x493E, 0, 0, /* 0x50 */ + 0, 0, 0, 0x6B47, 0, 0, 0x3B6C, 0, /* 0x50 */ + 0x3153, 0, 0x6B4E, 0x3758, 0, 0, 0x3B6E, 0, /* 0x60 */ + 0, 0x3B6D, 0, 0x4F4D, 0x6B4D, 0x6B4C, 0x4127, 0, /* 0x60 */ + 0x354D, 0x4F43, 0x333A, 0x3E5C, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x6B4B, 0, 0, 0, /* 0x70 */ + 0, 0, 0x6B50, 0, 0x6B51, 0x6B4F, 0, 0x3858, /* 0x80 */ + 0, 0x4D40, 0, 0, 0x3B6F, 0x4727, 0, 0, /* 0x80 */ + 0, 0x6B54, 0, 0x4040, 0, 0x4342, 0, 0, /* 0x90 */ + 0x4D36, 0, 0x6B57, 0, 0, 0, 0x386C, 0, /* 0x90 */ + 0x403F, 0x6B53, 0, 0x6B58, 0x386D, 0x6B55, 0x6B56, 0, /* 0xA0 */ + 0x6B52, 0, 0, 0, 0x4062, 0x4649, 0, 0, /* 0xA0 */ + 0x432F, 0, 0x325D, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x4870, 0, 0, 0x3543, 0, 0, 0x4434, /* 0xB0 */ + 0, 0, 0x6B5B, 0, 0x6B59, 0, 0, 0x434C, /* 0xC0 */ + 0, 0, 0, 0x4041, 0x3452, 0x6B5A, 0, 0x3F5B, /* 0xC0 */ + 0, 0, 0x4E4A, 0, 0, 0, 0x4F40, 0, /* 0xD0 */ + 0, 0, 0x6B5C, 0x6B67, 0x4435, 0, 0x6B66, 0, /* 0xD0 */ + 0x6B63, 0x6B6B, 0x6B64, 0, 0x6B60, 0, 0x447C, 0x6B5F, /* 0xE0 */ + 0, 0, 0, 0x6B5D, 0, 0x4D21, 0x3B70, 0, /* 0xE0 */ + 0, 0x6B61, 0, 0x6B5E, 0, 0, 0, 0x6B65, /* 0xF0 */ + 0x3D74, 0, 0x3841, 0, 0, 0, 0x427A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4B45, 0x315A, 0x3062, 0, 0x4625, 0, 0, 0x6B69, /* 0x00 */ + 0, 0, 0, 0, 0x6B68, 0, 0x4666, 0, /* 0x00 */ + 0x6B6D, 0, 0, 0, 0x6B62, 0, 0x6B6C, 0x6B6E, /* 0x10 */ + 0, 0x382C, 0x6B6A, 0x3956, 0, 0x3C55, 0, 0, /* 0x10 */ + 0x6B6F, 0x4D58, 0, 0, 0, 0, 0x6B72, 0, /* 0x20 */ + 0x6B75, 0, 0, 0x6B73, 0x4935, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x6B70, 0, 0, 0, 0, /* 0x30 */ + 0, 0x3660, 0, 0, 0, 0, 0x6B74, 0, /* 0x30 */ + 0, 0x6B76, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x6B7A, 0, 0, 0x6B77, 0, 0x6B79, 0x6B78, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x6B7B, 0, /* 0x50 */ + 0x3C31, 0, 0x6B7D, 0x6B7C, 0x4968, 0, 0, 0x6C21, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x3759, 0, /* 0x60 */ + 0, 0, 0, 0x6B7E, 0x6C22, 0, 0, 0x6C23, /* 0x60 */ + 0x3544, 0x6641, 0x3E79, 0, 0x6C24, 0, 0, 0x386E, /* 0x70 */ + 0, 0, 0, 0, 0, 0x6C25, 0, 0, /* 0x70 */ + 0x6C26, 0, 0, 0x3B3E, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x5A4E, 0, 0x6C27, 0, 0x6C28, 0, /* 0x80 */ + 0x3D32, 0, 0x6C29, 0x6C2A, 0, 0, 0x6C2B, 0, /* 0x90 */ + 0, 0x6C2C, 0x6C2D /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x432B, /* 0x30 */ + 0, 0, 0x6C2E, 0, 0, 0, 0, 0x6C30, /* 0x30 */ + 0, 0x6C2F, 0, 0, 0, 0, 0x4626, 0, /* 0x40 */ + 0x6C31, 0, 0x4B2D, 0, 0x6C32, 0, 0x6C33, 0, /* 0x40 */ + 0x6C34, 0, 0, 0, 0, 0x6C35, 0, 0, /* 0x50 */ + 0, 0, 0x465A, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3E5D, 0x6C36, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x396B, 0x502E, 0x6C37, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x6C38, 0x493F, 0x6C39, 0, 0x6C41, 0, 0, 0, /* 0x70 */ + 0, 0, 0x6C3A, 0, 0, 0x6C3C, 0, 0, /* 0x80 */ + 0, 0x6C3B, 0x6C3D, 0, 0x4B46, 0x6C3E, 0x6C3F, 0, /* 0x80 */ + 0, 0, 0, 0, 0x6C40, 0, 0, 0, /* 0x90 */ + 0x6C42, 0, 0, 0, 0, 0x332D, 0x4467, 0, /* 0x90 */ + 0x4969, 0x3A62, 0x3957, 0, 0, 0, 0, 0x494F, /* 0xA0 */ + 0x325F, 0x484E, 0x6C45, 0x3453, 0x4055, 0x6C44, 0x6C49, 0x4379, /* 0xA0 */ + 0x4C63, 0, 0x6C47, 0x6C48, 0x352E, 0, 0x6C4A, 0x4763, /* 0xB0 */ + 0x425F, 0, 0, 0x4871, 0x453D, 0x6C46, 0, 0x4B47, /* 0xB0 */ + 0x326C, 0x6C4C, 0x4F28, 0x4442, 0x4F45, 0, 0, 0x3B71, /* 0xC0 */ + 0x6C4B, 0, 0x4231, 0, 0, 0x6C5C, 0x4128, 0, /* 0xC0 */ + 0, 0x4678, 0, 0x4950, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x6C4F, 0x3B3F, 0x3B72, 0, 0x3E5E, 0, /* 0xD0 */ + 0x4765, 0, 0x382D, 0x6C4E, 0x6C4D, 0, 0x496A, 0, /* 0xE0 */ + 0, 0, 0x3C41, 0, 0, 0x4552, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x6C51, 0x6C52, 0x3958, 0x6C50 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C53, 0x6C54, 0, 0x6C56, /* 0x00 */ + 0x4223, 0, 0x6C55, 0x3466, 0, 0x6C58, 0, 0x6C57, /* 0x00 */ + 0x6C59, 0, 0, 0x6C5B, 0x6C5D, 0, 0x6C5E, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x4056, 0, 0x3C4F, 0x6C5F, /* 0x60 */ + 0, 0, 0, 0x3352, 0, 0x6C60, 0, 0, /* 0x60 */ + 0x4176, 0x6C61, 0, 0x6C62, 0x496B, 0, 0, 0x352F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x6C63, 0, 0, 0, 0x4436, 0, 0, /* 0x80 */ + 0, 0, 0x315B, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6C64, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x3C71, 0, 0, 0, 0, /* 0xA0 */ + 0x3F76, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x422D, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x6C67, 0, 0, 0, 0x6C66, 0, /* 0xB0 */ + 0, 0, 0x6C65, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x6C6D, 0x6C6B, 0, 0, 0x6C68, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x6C6A, 0, /* 0xD0 */ + 0, 0, 0x6C69, 0x6C6C, 0, 0x3577, 0, 0x6C70, /* 0xD0 */ + 0, 0x4057, 0, 0x6C71, 0, 0, 0, 0, /* 0xE0 */ + 0x3859, 0, 0x6C6E, 0x6C6F, 0, 0, 0, 0x4F29, /* 0xE0 */ + 0, 0, 0, 0x4437, 0, 0x4129, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x6C72, 0, 0, 0x6C75 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x6C73, 0x6C74, 0x4D59, 0, 0, 0, 0, 0x4627, /* 0x00 */ + 0x6C78, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x6C76, 0x6C77, 0x6C79, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x6D29, 0, 0, 0, 0, 0, /* 0x20 */ + 0x6C7C, 0, 0, 0, 0x6C7D, 0x6C7B, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x6C7A, 0, 0x447D, 0, 0, 0x6D21, /* 0x40 */ + 0x6D25, 0x6D22, 0x6C7E, 0, 0x6D23, 0, 0, 0, /* 0x40 */ + 0x6D24, 0, 0, 0, 0, 0x6D2B, 0, 0, /* 0x50 */ + 0, 0x6D26, 0, 0, 0, 0, 0, 0x4058, /* 0x50 */ + 0x6D28, 0, 0, 0x6D2A, 0x6D27, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x6D2D, 0, 0x3D33, 0, 0x6D2C, 0, /* 0x70 */ + 0, 0, 0, 0, 0x6D2E, 0, 0, 0, /* 0x70 */ + 0, 0x6D2F, 0, 0, 0x6D32, 0x6D31, 0, 0x6D30, /* 0x80 */ + 0, 0, 0x6D34, 0x6D33, 0, 0x4C76, 0, 0, /* 0x80 */ + 0, 0x6D36, 0, 0x6D35, 0x6D37, 0, 0, 0, /* 0x90 */ + 0, 0x6D38, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6D3A, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x6D39, 0x3F48, 0x6D3B, 0, 0, 0x366D, /* 0xA0 */ + 0x6D3C, 0x6D3E, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x6D3F, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x6D40, 0x6D3D, 0, /* 0xC0 */ + 0x6D41, 0, 0x3C56, 0x6D42, 0x3530, 0x3733, 0, 0, /* 0xC0 */ + 0, 0, 0x382E, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x6D43, 0, 0, 0, 0x4670, /* 0xD0 */ + 0, 0, 0x453E, 0x6D44, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x6D47, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x3C34, 0, 0, 0x6D46, 0x6D45, 0x375A, 0x6D48 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3353, 0, 0x6D4A, 0, 0, /* 0x00 */ + 0, 0x3A5C, 0x6D49, 0, 0x6D52, 0, 0, 0, /* 0x00 */ + 0, 0, 0x6D4C, 0x6D4E, 0x4A65, 0x6D4B, 0, 0, /* 0x10 */ + 0, 0x6D4D, 0, 0x6D51, 0x6D4F, 0x3531, 0, 0x6D50, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x6D53, 0, /* 0x20 */ + 0, 0x475A, 0x4E58, 0, 0, 0, 0, 0x3D34, /* 0x20 */ + 0, 0, 0, 0x6D54, 0, 0, 0, 0, /* 0x30 */ + 0x4D22, 0x6D56, 0, 0x6D55, 0, 0, 0x6D59, 0x4D41, /* 0x30 */ + 0, 0, 0x6D58, 0, 0x336D, 0x6D57, 0x6D5C, 0, /* 0x40 */ + 0, 0x6D5B, 0, 0, 0x6D5A, 0x4532, 0x6D5D, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x6D5E, /* 0x50 */ + 0, 0, 0, 0, 0x6D5F, 0, 0, 0x396C, /* 0x50 */ + 0, 0x3725, 0x6D60, 0x6D61, 0x6D62, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x3F49, 0x6D63, 0, 0x3C2D, 0x6D64, /* 0x90 */ + 0, 0, 0, 0x6D65, 0, 0, 0, 0x5221, /* 0xA0 */ + 0x517E, 0, 0, 0, 0, 0x6D66, 0x6570, 0x6D67, /* 0xA0 */ + 0x4324, 0x3F2B, 0x4740, 0, 0, 0, 0, 0x6D68, /* 0xB0 */ + 0, 0, 0x4A55, 0x4454, 0x397E, 0, 0, 0x4329, /* 0xB0 */ + 0, 0, 0x312A, 0, 0x4B78, 0x3F57, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x375E, 0, /* 0xC0 */ + 0, 0x3661, 0, 0, 0x4A56, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x6D69, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x6D6B, 0, 0, 0x6D6A, 0x3260, 0, /* 0xE0 */ + 0, 0x4676, 0x6D6C, 0x4777, 0, 0x4533, 0, 0x6D6D, /* 0xE0 */ + 0x3D52, 0, 0, 0, 0x6D6F, 0, 0, 0x4C42, /* 0xF0 */ + 0x6D7E, 0x6D71, 0x6D72, 0, 0, 0x4449 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4260, 0x4177, 0, 0x4628, 0, 0x6D70, 0x3555, 0, /* 0x00 */ + 0, 0, 0, 0x6D79, 0, 0x6D76, 0x6E25, 0x4629, /* 0x00 */ + 0x4360, 0x6D73, 0, 0x447E, 0x4553, 0x6D74, 0x6D78, 0x3F60, /* 0x10 */ + 0, 0x4767, 0x444C, 0, 0, 0x4042, 0x6D77, 0x422E, /* 0x10 */ + 0x4224, 0x6D75, 0x3029, 0x4F22, 0, 0, 0, 0x6D7A, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x4261, 0, /* 0x20 */ + 0, 0x3D35, 0x3F4A, 0, 0, 0x6D7C, 0x6D7B, 0, /* 0x30 */ + 0x306F, 0x6D7D, 0, 0, 0x492F, 0, 0x6E27, 0, /* 0x30 */ + 0, 0x465B, 0x3F6B, 0, 0, 0x4359, 0, 0x3678, /* 0x40 */ + 0, 0x6E26, 0x4D37, 0x313F, 0, 0x4A57, 0x3261, 0x6E21, /* 0x40 */ + 0x6E22, 0x6E23, 0x6E24, 0x463B, 0x4323, 0x3063, 0x6E28, 0, /* 0x50 */ + 0x6E29, 0x7423, 0, 0, 0x423D, 0, 0x6E2A, 0, /* 0x50 */ + 0x3173, 0x414C, 0, 0x382F, 0, 0x4D5A, 0, 0, /* 0x60 */ + 0x6E2B, 0x452C, 0, 0, 0, 0x4178, 0x3C57, 0x6E2C, /* 0x60 */ + 0, 0, 0x6E2F, 0, 0, 0x3D65, 0x6E2D, 0x412B, /* 0x70 */ + 0x412A, 0, 0x3064, 0, 0x4E4B, 0x6E31, 0, 0x4872, /* 0x70 */ + 0x6E33, 0x6E32, 0x6E30, 0x6364, 0x3454, 0, 0, 0x6D6E, /* 0x80 */ + 0, 0x6E35, 0x6E34, 0, 0, 0, 0, 0x6E36, /* 0x80 */ + 0, 0x4D38, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x4661, 0, 0, 0x4B2E, 0, /* 0xA0 */ + 0x6E37, 0, 0x3C59, 0, 0, 0, 0, 0x6E38, /* 0xA0 */ + 0, 0x6E39, 0, 0, 0, 0x6E3A, 0, 0, /* 0xB0 */ + 0x4521, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x306A, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x3959, 0, 0, 0, 0x4F3A, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x6E3E, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x3734, 0x6E3B, 0, 0x6E3C, 0, 0, 0, /* 0xE0 */ + 0x4974, 0, 0, 0, 0, 0x3354, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x4D39, 0, 0x363F, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x4554 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6E3F, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x6E40, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x6E41, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x4522, 0, 0, /* 0x20 */ + 0x6E43, 0, 0x6E42, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x4653, 0x6E44, 0x3D36, 0x3C60, 0x475B, 0x4371, 0, /* 0x40 */ + 0, 0, 0x3C72, 0, 0x3F6C, 0, 0x6E45, 0, /* 0x50 */ + 0x6E46, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x3F5D, 0x6E47, 0, 0x6E48, 0, 0, /* 0x60 */ + 0, 0x6E49, 0x4D6F, 0, 0x3D37, 0, 0, 0, /* 0x60 */ + 0, 0, 0x6E4B, 0x6E4A, 0, 0x395A, 0, 0x3973, /* 0x70 */ + 0x3B40, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x6E4E, 0, 0, 0, 0, 0x3D66, /* 0x80 */ + 0, 0x6E4D, 0, 0x6E4C, 0, 0x4269, 0, 0, /* 0x80 */ + 0x386F, 0, 0x4043, 0, 0, 0, 0, 0x4830, /* 0x90 */ + 0, 0, 0, 0, 0x3D39, 0, 0, 0, /* 0x90 */ + 0, 0, 0x6E4F, 0, 0x3E5F, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x6E52, 0x6E50, 0, 0, 0, 0x6E51, /* 0xA0 */ + 0, 0, 0, 0, 0x6E54, 0x6E53, 0, 0, /* 0xB0 */ + 0x3E7A, 0, 0x6E55, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x6E56, 0x6E57, 0, 0, 0, 0, 0x4850, 0x3A53, /* 0xC0 */ + 0x3C61, 0x6E58, 0, 0x6E59, 0x4E24, 0x3D45, 0x4C6E, 0x4E4C, /* 0xC0 */ + 0x6E5A, 0x3662, 0, 0, 0, 0, 0x6E5B, 0, /* 0xD0 */ + 0x4523, 0, 0, 0x6E5E, 0x3378, 0x3F4B, 0, 0x6E5C, /* 0xD0 */ + 0, 0x6E5D, 0, 0x4460, 0, 0, 0x4B55, 0x367C, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x6E60, 0x6E61, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x6E5F, 0, 0, 0x6E63 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x465F, 0x3343, 0, /* 0x00 */ + 0, 0x6E67, 0, 0, 0x6E64, 0x6E66, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x6E62, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x6F4F, 0, 0, 0x6E65, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x4E6B, 0, 0, 0x385A, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x6E6F, /* 0x30 */ + 0, 0, 0, 0, 0x4534, 0x6E6A, 0, 0, /* 0x40 */ + 0x6E6D, 0x6E6B, 0, 0x6E70, 0, 0, 0, 0, /* 0x40 */ + 0x6E71, 0, 0, 0, 0, 0, 0, 0x6E69, /* 0x50 */ + 0, 0, 0x6E76, 0x3174, 0, 0, 0x6E68, 0, /* 0x50 */ + 0, 0, 0x482D, 0, 0x6E6C, 0, 0x3E60, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x395B, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4B48, 0, /* 0x70 */ + 0x3664, 0, 0, 0x3D46, 0, 0x463C, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x412D, 0, 0x6E74, 0, 0x6E6E, 0x6E73, 0, /* 0x90 */ + 0x4C43, 0, 0x4438, 0x6E75, 0x6E72, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x412C, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6E79, /* 0xB0 */ + 0, 0x6E78, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6E77, /* 0xC0 */ + 0, 0, 0x4B2F, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x3D7B, 0, 0, 0, /* 0xE0 */ + 0, 0x6E7A, 0x4A5F, 0, 0, 0x3154, 0, 0, /* 0xE0 */ + 0, 0, 0x4946, 0x4372, 0, 0, 0, 0, /* 0xF0 */ + 0x3578, 0, 0x6E7C, 0, 0x395D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3B2C, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x6E7B, /* 0x00 */ + 0x3F6D, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x3F6E, 0x6F21, 0x6F23, 0, 0, 0, 0, 0, /* 0x10 */ + 0x3E7B, 0, 0x6F22, 0x6F24, 0, 0, 0x3653, 0, /* 0x20 */ + 0x4945, 0, 0, 0x3C62, 0x4F23, 0, 0x6E7E, 0x3A78, /* 0x20 */ + 0, 0, 0x4F3F, 0, 0, 0x6F26, 0, 0, /* 0x30 */ + 0, 0, 0x6F25, 0x6F27, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x6E7D, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x4669, 0, 0x4555, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x4457, 0, 0x6F2C, 0, /* 0x50 */ + 0, 0, 0, 0x4343, 0x6F28, 0, 0, 0, /* 0x50 */ + 0x6F29, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x372D, 0, 0x6F2B, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x3830, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x6F2A, 0, 0x3E61, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x3379, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x6F30, 0, 0x3A3F, 0x4179, /* 0x90 */ + 0, 0, 0x444A, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x333B, /* 0xA0 */ + 0, 0, 0, 0, 0x6F2E, 0x6F2F, 0x4443, 0, /* 0xA0 */ + 0x6F2D, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x6F31, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x6F37, 0, 0, 0, 0, /* 0xC0 */ + 0x6F3A, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x6F39, 0x452D, 0, 0, 0, 0, 0x6F32, 0x6F33, /* 0xD0 */ + 0x6F36, 0, 0, 0, 0, 0x6F38, 0, 0, /* 0xD0 */ + 0, 0x3640, 0, 0, 0x6F3B, 0x6F35, 0, 0, /* 0xE0 */ + 0x6F34 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6F3F, 0, 0, 0, 0x6F40, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x6F41, 0, 0, 0x6F3E, 0x6F3D, 0, 0, 0, /* 0x10 */ + 0x3E62, 0x462A, 0x6F3C, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x6F45, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x6F43, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x6F44, 0x6F42, 0, /* 0x30 */ + 0x4278, 0, 0x6F46, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x6F47, 0, 0, 0x6F49, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x3455, 0x6F48, 0x4C7A, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x6F54, 0x6F4A, 0, 0, 0x6F4D, 0, /* 0x50 */ + 0x6F4B, 0, 0x6F4C, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x6F4E, 0, 0, 0, 0, 0, /* 0x60 */ + 0x6F50, 0, 0, 0, 0, 0x6F51, 0, 0x6F52, /* 0x70 */ + 0, 0, 0, 0, 0x6F55, 0x6F53, 0x6F56, 0x6F58, /* 0x70 */ + 0, 0x6F57 /* 0x80 */ + /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4439, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x4C67, 0, 0x6F59, 0x412E, 0, 0, 0, 0x6F5A, /* 0x80 */ + 0, 0x4A44, 0x6F5B, 0x332B, 0, 0, 0, 0x313C, /* 0x80 */ + 0, 0x3457, 0, 0x3456, 0x6F5C, 0, 0x6F5D, 0, /* 0x90 */ + 0x6F5E, 0x6F5F, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x6F60, 0, 0x3458, 0x3355, 0x395E, 0x4836, 0, 0x6F62, /* 0xA0 */ + 0x6F61, 0, 0, 0, 0, 0x6F63, 0, 0, /* 0xA0 */ + 0, 0, 0x315C, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x6F66, 0, 0x6F65, 0x6F64, 0, 0x6F67, 0, /* 0xB0 */ + 0, 0, 0, 0x6F6A, 0, 0, 0, 0x3047, /* 0xC0 */ + 0, 0, 0x6F68, 0, 0x6F6C, 0x6F6B, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x6F6E, 0x6F6D, 0x6F6F, 0, /* 0xD0 */ + 0x462E, 0, 0, 0, 0x6F70, 0, 0, 0, /* 0xD0 */ + 0, 0x6F71, 0x6F73, 0, 0, 0x6F72 /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0x496C, 0, 0, 0, /* 0x10 */ + 0, 0x6F74, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x6F75, 0, 0x3A65, 0, 0, 0, 0x6F76, 0x6F77, /* 0x20 */ + 0, 0, 0x4B49, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x414B, 0, 0, 0, 0x3024, /* 0x30 */ + 0x424B, 0, 0x6F78, 0, 0x496D, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x6F7B, 0x6F79, 0x395F, 0, 0x6F7A, /* 0x40 */ + 0x3842, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x4A45, 0x6F7D, 0x7021, 0x6F7E, 0x7022, /* 0x50 */ + 0, 0, 0x3121, 0x3F58, 0x3D7C, 0x3459, 0x7023, 0, /* 0x60 */ + 0, 0, 0x4766, 0, 0x7025, 0, 0, 0, /* 0x60 */ + 0x3122, 0, 0x7024, 0x4444, 0, 0x4E4D, 0x462B, 0x6F7C, /* 0x70 */ + 0x4E26, 0, 0x3831, 0, 0, 0x4D5B, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x3679, 0x4E34, 0, /* 0x80 */ + 0x3728, 0, 0x4262, 0x6721, 0, 0x7026, 0x332C, 0x3F6F, /* 0x80 */ + 0, 0, 0, 0, 0x3356, 0x7028, 0, 0x7029, /* 0x90 */ + 0x7027, 0x3764, 0, 0x3A5D, 0x3E63, 0, 0, 0, /* 0x90 */ + 0x3123, 0, 0, 0x4E59, 0, 0, 0, 0x702B, /* 0xA0 */ + 0x6E2E, 0, 0x702A, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x702E, 0x702C, 0x702D, 0, 0x702F, 0, 0x7030, 0x4E6C, /* 0xB0 */ + 0x7031, 0x7032, 0, 0x4049, 0x483B, 0, 0, 0, /* 0xB0 */ + 0x3F7D, 0x3467, 0, 0, 0x4D3A, 0x326D, 0x3D38, 0x385B, /* 0xC0 */ + 0, 0x7035, 0, 0x7034, 0x3B73, 0x7036, 0x7033, 0, /* 0xC0 */ + 0, 0x3B28, 0, 0, 0, 0x703A, 0x6A2D, 0, /* 0xD0 */ + 0, 0x5256, 0, 0x3F77, 0x7038, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x4E25, 0x4671, 0, 0, 0, 0, /* 0xE0 */ + 0x312B, 0, 0x4063, 0x3C36, 0, 0, 0, 0, /* 0xE0 */ + 0x4A37, 0, 0x3140, 0, 0, 0, 0x4E6D, 0x4D6B, /* 0xF0 */ + 0, 0x703B, 0, 0x4545 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3C7B, 0, 0, 0, 0x703C, 0, 0x703D, 0x3F4C, /* 0x00 */ + 0x703E, 0, 0x4E6E, 0, 0, 0x7039, 0x7040, 0x7042, /* 0x00 */ + 0, 0x7041, 0, 0x703F, 0, 0, 0x7043, 0, /* 0x10 */ + 0, 0x7044, 0, 0, 0x417A, 0, 0x3262, 0, /* 0x10 */ + 0, 0, 0, 0, 0x7045, 0, 0, 0x4C38, /* 0x20 */ + 0, 0, 0x7046, 0, 0, 0, 0, 0, /* 0x20 */ + 0x7047, 0, 0x4F2A, 0, 0, 0, 0, 0, /* 0x30 */ + 0x5B31, 0x7048, 0, 0, 0, 0x7049, 0x704A, 0, /* 0x30 */ + 0, 0, 0x704E, 0, 0x704B, 0, 0x704C, 0, /* 0x40 */ + 0x704D, 0x704F, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4044, 0, 0, 0, 0x4C77, 0, /* 0x50 */ + 0, 0x4045, 0, 0, 0x7050, 0, 0x4873, 0, /* 0x50 */ + 0x7051, 0x7353, 0x4C4C, 0, 0x7052, 0, 0x7053, 0, /* 0x60 */ + 0x7054, 0x3357, 0, 0x7056, 0, 0x3F59, 0, 0, /* 0x60 */ + 0, 0x7057, 0, 0, 0x3724, 0, 0, 0, /* 0x70 */ + 0, 0x7058, 0x705C, 0, 0x705A, 0, 0, 0, /* 0x70 */ + 0, 0x705B, 0, 0, 0x3373, 0x7059, 0x705D, 0, /* 0x80 */ + 0, 0, 0, 0x705E, 0, 0x3048, 0, 0x705F, /* 0x80 */ + 0x7060, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x3E64, 0, 0, 0, 0x7061, 0, 0, 0, /* 0x90 */ + 0x3547, 0, 0, 0x7064, 0, 0, 0x7063, 0, /* 0xA0 */ + 0x7062, 0, 0, 0x6B71, 0, 0x4A5C, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x7065, 0x7066, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x7067, 0, 0, 0x7068, 0, /* 0xC0 */ + 0x7069, 0, 0, 0x706A, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x345A, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x706B, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x706C, 0x4723, 0, /* 0xE0 */ + 0, 0, 0x706E, 0x323B, 0, 0x7071, 0x7070, 0, /* 0xF0 */ + 0, 0, 0, 0x3124, 0, 0, 0, 0x3641 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4A47, 0x443A, 0x3A22, 0, 0x3960, 0x3D67, 0, /* 0x00 */ + 0x3F5C, 0, 0, 0, 0x7073, 0, 0, 0x7072, /* 0x00 */ + 0x4D42, 0x3468, 0x4852, 0x465C, 0, 0, 0, 0x3F7C, /* 0x10 */ + 0x4E4E, 0, 0x375B, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x7076, 0, 0, 0x7075, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x4B4B, 0x462C, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x3150, 0, 0, 0x7077, /* 0x30 */ + 0x7074, 0, 0, 0x4951, 0x4D6A, 0x7078, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x7079, 0, /* 0x40 */ + 0, 0, 0, 0x707B, 0x426A, 0x335B, 0x335C, 0x707A, /* 0x40 */ + 0, 0, 0, 0, 0x3469, 0x3832, 0, 0, /* 0x50 */ + 0x346A, 0, 0, 0x453F, 0, 0, 0x4E60, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x385C, /* 0x60 */ + 0, 0, 0, 0x707C, 0, 0, 0, 0x707D, /* 0x60 */ + 0x707E, 0x7121, 0, 0x7123, 0x7122, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x4977, 0, 0x7124, 0, 0, 0, 0, 0x7125, /* 0xA0 */ + 0, 0x7126, 0, 0, 0, 0, 0x7127, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x7129, 0x7128, 0, 0x712A, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x4874, 0x664C, 0, 0, 0x3F29, /* 0xD0 */ + 0, 0, 0x3532, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x712B, 0, 0x712C, 0, 0x522C, 0x5D3B, 0x4853, /* 0xE0 */ + 0, 0, 0x307B, 0, 0x303B, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x3B74, 0x4B30, 0x3E7E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x712D, 0, 0x4C5F, 0, 0, /* 0x00 */ + 0, 0x712E, 0x4D5C, 0, 0x3142, 0, 0, 0, /* 0x00 */ + 0x3B41, 0, 0x712F, 0x326E, 0x7130, 0, 0, 0, /* 0x10 */ + 0x7131, 0, 0, 0, 0, 0x7133, 0x7134, 0, /* 0x10 */ + 0x7136, 0x7132, 0, 0, 0x7135, 0, 0, 0, /* 0x20 */ + 0x345B, 0, 0, 0, 0x7137, 0, 0x7138, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x7139, 0x713A, 0, /* 0x30 */ + 0, 0, 0x713B, 0, 0, 0x713D, 0, 0, /* 0x40 */ + 0, 0x713C, 0, 0x713F, 0x7142, 0, 0, 0, /* 0x40 */ + 0x713E, 0x7140, 0x7141, 0, 0, 0x7143, 0, 0x3642, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x3C73, 0x7144, /* 0x90 */ + 0x7145, 0x3961, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x7146, 0, 0, /* 0xA0 */ + 0x333E, 0, 0, 0, 0x474F, 0x7147, 0x7148, 0, /* 0xA0 */ + 0, 0, 0, 0x435A, 0x466B, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x7149, 0, 0, 0, /* 0xB0 */ + 0, 0x477D, 0, 0, 0x424C, 0x3158, 0x366E, 0, /* 0xC0 */ + 0x366F, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x4373, 0x714E, 0x3670, 0, 0, 0x326F, 0, 0, /* 0xD0 */ + 0x714D, 0, 0, 0x714B, 0, 0x714C, 0, 0x714A, /* 0xD0 */ + 0, 0, 0x7158, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x714F, 0x7150, 0, /* 0xE0 */ + 0, 0x7151, 0x7152, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x7154, 0, 0, 0x7153, 0, 0, 0, 0x3D59 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7155, 0, 0, 0, 0x7157, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x3533, 0x7156, /* 0x00 */ + 0, 0, 0x417B, 0x3833, 0, 0, 0, 0, /* 0x10 */ + 0, 0x7159, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x424D, 0, 0, 0x715A, 0, 0, 0, 0, /* 0x20 */ + 0x462D, 0, 0, 0, 0, 0, 0, 0x715B, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x7160, 0, /* 0x30 */ + 0x715E, 0, 0x715D, 0x715F, 0, 0x715C, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x7162, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x7161, 0, 0x7164, /* 0x50 */ + 0, 0, 0x3643, 0x7163, 0, 0, 0, 0x7165, /* 0x50 */ + 0, 0, 0x7166, 0, 0x7168, 0x7167, 0, 0, /* 0x60 */ + 0, 0x7169, 0x716B, 0x716A, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x397C, 0, 0, 0, 0, 0x716C, 0, 0, /* 0xA0 */ + 0x716D, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x333C, 0, 0, 0, 0x716E, 0, 0, 0, /* 0xB0 */ + 0x716F, 0, 0, 0, 0x3F71, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x7170, /* 0xC0 */ + 0, 0x7171, 0, 0x7172, 0x7173, 0, 0, 0, /* 0xD0 */ + 0x3962, 0, 0, 0, 0, 0, 0x7174, 0x7175, /* 0xD0 */ + 0, 0, 0x7176, 0x7177, 0, 0, 0x7178, 0, /* 0xE0 */ + 0, 0, 0x4831, 0x717A, 0, 0x4926, 0x717B, 0x7179, /* 0xE0 */ + 0, 0x717D, 0, 0, 0x717C, 0, 0, 0x717E, /* 0xF0 */ + 0, 0, 0, 0x7221 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7222, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x7223, 0, 0x7224, 0, 0, 0, 0, 0x7225, /* 0x10 */ + 0, 0, 0x7226, 0x7227, 0, 0x7228, 0, 0x7229, /* 0x20 */ + 0x722A, 0x722B, 0x722C, 0, 0, 0, 0x722D, 0x722E, /* 0x20 */ + 0, 0x5D35, 0x722F, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x6478, 0x3534, 0, 0, 0, /* 0x30 */ + 0, 0x3321, 0x3A32, 0x7231, 0x7230, 0x4C25, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x7233, 0x7234, 0x7232, /* 0x40 */ + 0, 0x7235, 0, 0, 0x4B62, 0, 0, 0, /* 0x50 */ + 0x7236, 0, 0x357B, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x4F25, /* 0x60 */ + 0, 0, 0, 0, 0x7237, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x7239, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x303E, 0, /* 0x80 */ + 0, 0x723A, 0x4A2B, 0x7238, 0, 0, 0x723B, 0x723C, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x723D, /* 0x90 */ + 0x723E, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x723F, 0, 0x4B6E, 0x3B2D, 0, 0x3A7A, 0x412F, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x7240, 0, 0, 0, /* 0xB0 */ + 0, 0x7243, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x7241, 0, 0, 0, 0, 0, 0x7244, 0, /* 0xC0 */ + 0, 0x3871, 0x7242, 0, 0, 0, 0, 0x7245, /* 0xC0 */ + 0, 0x7246, 0x7247, 0, 0x724B, 0, 0x3B2A, 0, /* 0xD0 */ + 0, 0, 0, 0x4264, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x724C, 0x7249, 0x7248, 0x724A, 0, 0, 0, /* 0xE0 */ + 0x375F, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x7250, 0x724F, 0x724E, 0, 0, 0x3033 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x725A, 0, 0x7256, 0, /* 0x00 */ + 0x7257, 0x7253, 0x7259, 0, 0x7255, 0x3362, 0, 0, /* 0x00 */ + 0x4F4C, 0, 0x7258, 0x7254, 0x7252, 0x7251, 0, 0, /* 0x10 */ + 0, 0, 0, 0x725C, 0, 0, 0, 0, /* 0x10 */ + 0, 0x725F, 0, 0, 0x725E, 0x725D, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x4949, 0x725B, 0x3073, /* 0x20 */ + 0x7260, 0, 0x7262, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x336F, 0x724D, 0x3137, 0, 0, 0x7264, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x7263, 0x7261, /* 0x40 */ + 0x432D, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4B70, 0, 0, 0, 0, 0x4E5A, /* 0x50 */ + 0, 0, 0x7265, 0, 0, 0, 0, 0, /* 0x50 */ + 0x7266, 0, 0, 0, 0, 0, 0, 0x7267, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0x7268, 0, /* 0x70 */ + 0x7269, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x443B, 0, 0x726A, /* 0xE0 */ + 0, 0x4837, 0, 0x726F, 0x726B, 0, 0, 0, /* 0xE0 */ + 0x726C, 0, 0, 0x4B31, 0x4C44, 0, 0x4650 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7270, 0, 0, 0x7271, 0x463E, /* 0x00 */ + 0x726E, 0x726D, 0, 0, 0, 0, 0x322A, 0, /* 0x00 */ + 0, 0, 0x7279, 0, 0, 0x7278, 0, 0, /* 0x10 */ + 0, 0, 0, 0x3175, 0, 0, 0, 0x7276, /* 0x10 */ + 0, 0, 0, 0x7275, 0, 0, 0x7273, 0, /* 0x20 */ + 0x337B, 0, 0x7272, 0x3C32, 0x3229, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x3963, 0, 0, 0x727C, 0x727B, /* 0x30 */ + 0, 0x727A, 0, 0, 0x7277, 0, 0x727D, 0, /* 0x40 */ + 0x727E, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x7325, 0x7324, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x7326, 0, 0, 0x312D, 0x7321, 0x7322, 0, /* 0x50 */ + 0x3974, 0x4C39, 0, 0, 0x7323, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x4B32, 0, 0, 0x732B, /* 0x60 */ + 0, 0, 0x7327, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x732C, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x7329, /* 0x80 */ + 0, 0x7328, 0, 0, 0, 0, 0, 0x375C, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x732D, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x732E, 0, 0, 0, /* 0xA0 */ + 0, 0x732F, 0, 0x732A, 0, 0, 0, 0x7274, /* 0xA0 */ + 0, 0, 0x7330, 0, 0x4461, 0, 0, 0, /* 0xB0 */ + 0x7334, 0, 0x7335, 0x7333, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x7332, 0x7338, 0, 0x7331, 0, 0x7336, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x7337, /* 0xC0 */ + 0, 0, 0, 0x733A, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x7339, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0x733C, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x733D, 0, 0x733E, /* 0xE0 */ + 0, 0, 0x4F49, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x733B, 0x426B, 0x3A6D, 0, 0, 0x733F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0x7340, 0x7341, 0, 0, 0x7342, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x7343, 0, 0, /* 0x70 */ + 0x3834, 0x7344, 0, 0, 0, 0x7345, 0, 0x3C2F, /* 0x70 */ + 0, 0x7346, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x7347, 0, 0, 0x7348, 0x7349, 0, 0, 0, /* 0x80 */ + 0, 0x734C, 0x734A, 0x4F3C, 0, 0x734B, 0, 0x4E6F, /* 0x90 */ + 0, 0, 0, 0, 0, 0x734D, 0, 0x4E5B, /* 0x90 */ + 0, 0, 0, 0, 0, 0x734E, 0x477E, 0, /* 0xA0 */ + 0, 0x734F, 0x7351, 0, 0, 0x7352, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x7350, 0x396D, 0x4C4D, 0x4B63, 0x5677, 0, 0x5D60, 0x4B7B, /* 0xB0 */ + 0, 0, 0, 0, 0x322B, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x7354, 0x3550, 0x7355, 0x7356, /* 0xC0 */ + 0x7357, 0, 0x3975, 0, 0x7358, 0, 0, 0, /* 0xD0 */ + 0x6054, 0x4C5B, 0, 0x4263, 0x7359, 0x735B, 0x735A, 0, /* 0xD0 */ + 0x735C, 0, 0, 0, 0, 0x735D, 0, 0, /* 0xE0 */ + 0x735E, 0, 0, 0, 0, 0, 0, 0x735F, /* 0xE0 */ + 0, 0, 0, 0, 0x7360, 0, 0x7361, 0x7362, /* 0xF0 */ + 0, 0x7363, 0, 0x7364, 0x7365, 0x7366 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7367, /* 0x00 */ + 0x7368, 0, 0, 0, 0, 0, 0x4524, 0, /* 0x00 */ + 0, 0, 0, 0x385D, 0, 0x736A, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x414D, 0x736B, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x736C, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4921, 0, 0, 0x736D, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x736E, 0x6337, 0, 0, 0x6C5A, 0x706D, /* 0x40 */ + 0, 0, 0x736F, 0, 0x7370, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x7372, /* 0x50 */ + 0x7373, 0x7374, 0x4E70, 0x7371, 0, 0, 0x7375, 0x7376, /* 0x60 */ + 0, 0, 0x7378, 0, 0x7377, 0, 0, 0, /* 0x60 */ + 0, 0, 0x737A, 0, 0, 0, 0x737B, 0x7379, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4E36, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x737C, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x737D, 0x6354, 0, 0, /* 0x90 */ + 0x737E /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0208_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x212A, 0, 0x2174, 0x2170, 0x2173, 0x2175, 0, /* 0x00 */ + 0x214A, 0x214B, 0x2176, 0x215C, 0x2124, 0, 0x2125, 0x213F, /* 0x00 */ + 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, /* 0x10 */ + 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, /* 0x10 */ + 0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, /* 0x20 */ + 0x2348, 0x2349, 0x234A, 0x234B, 0x234C, 0x234D, 0x234E, 0x234F, /* 0x20 */ + 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, /* 0x30 */ + 0x2358, 0x2359, 0x235A, 0x214E, 0, 0x214F, 0x2130, 0x2132, /* 0x30 */ + 0x212E, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, /* 0x40 */ + 0x2368, 0x2369, 0x236A, 0x236B, 0x236C, 0x236D, 0x236E, 0x236F, /* 0x40 */ + 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, /* 0x50 */ + 0x2378, 0x2379, 0x237A, 0x2150, 0x2143, 0x2151, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x2131, 0, 0x216F /* 0xE0 */ + /* 0xE0 */ +}; + diff --git a/sal/textenc/tcvtjp5.tab b/sal/textenc/tcvtjp5.tab new file mode 100644 index 000000000..9fb0f1436 --- /dev/null +++ b/sal/textenc/tcvtjp5.tab @@ -0,0 +1,3341 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* japanese charsets: JIS212 */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2242, 0, 0, 0x2270, 0, 0x2243, 0, /* 0xA0 */ + 0, 0x226D, 0x226C, 0, 0, 0, 0x226E, 0x2234, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x2231, 0, 0x226B, 0, 0, 0, 0, 0x2244, /* 0xB0 */ + 0x2A22, 0x2A21, 0x2A24, 0x2A2A, 0x2A23, 0x2A29, 0x2921, 0x2A2E, /* 0xC0 */ + 0x2A32, 0x2A31, 0x2A34, 0x2A33, 0x2A40, 0x2A3F, 0x2A42, 0x2A41, /* 0xC0 */ + 0, 0x2A50, 0x2A52, 0x2A51, 0x2A54, 0x2A58, 0x2A53, 0, /* 0xD0 */ + 0x292C, 0x2A63, 0x2A62, 0x2A65, 0x2A64, 0x2A72, 0x2930, 0x294E, /* 0xD0 */ + 0x2B22, 0x2B21, 0x2B24, 0x2B2A, 0x2B23, 0x2B29, 0x2941, 0x2B2E, /* 0xE0 */ + 0x2B32, 0x2B31, 0x2B34, 0x2B33, 0x2B40, 0x2B3F, 0x2B42, 0x2B41, /* 0xE0 */ + 0x2943, 0x2B50, 0x2B52, 0x2B51, 0x2B54, 0x2B58, 0x2B53, 0, /* 0xF0 */ + 0x294C, 0x2B63, 0x2B62, 0x2B65, 0x2B64, 0x2B72, 0x2950, 0x2B73 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_01[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2A27, 0x2B27, 0x2A25, 0x2B25, 0x2A28, 0x2B28, 0x2A2B, 0x2B2B, /* 0x00 */ + 0x2A2C, 0x2B2C, 0x2A2F, 0x2B2F, 0x2A2D, 0x2B2D, 0x2A30, 0x2B30, /* 0x00 */ + 0x2922, 0x2942, 0x2A37, 0x2B37, 0, 0, 0x2A36, 0x2B36, /* 0x10 */ + 0x2A38, 0x2B38, 0x2A35, 0x2B35, 0x2A3A, 0x2B3A, 0x2A3B, 0x2B3B, /* 0x10 */ + 0x2A3D, 0x2B3D, 0x2A3C, 0, 0x2A3E, 0x2B3E, 0x2924, 0x2944, /* 0x20 */ + 0x2A47, 0x2B47, 0x2A45, 0x2B45, 0, 0, 0x2A46, 0x2B46, /* 0x20 */ + 0x2A44, 0x2945, 0x2926, 0x2946, 0x2A48, 0x2B48, 0x2A49, 0x2B49, /* 0x30 */ + 0x2947, 0x2A4A, 0x2B4A, 0x2A4C, 0x2B4C, 0x2A4B, 0x2B4B, 0x2929, /* 0x30 */ + 0x2949, 0x2928, 0x2948, 0x2A4D, 0x2B4D, 0x2A4F, 0x2B4F, 0x2A4E, /* 0x40 */ + 0x2B4E, 0x294A, 0x292B, 0x294B, 0x2A57, 0x2B57, 0, 0, /* 0x40 */ + 0x2A56, 0x2B56, 0x292D, 0x294D, 0x2A59, 0x2B59, 0x2A5B, 0x2B5B, /* 0x50 */ + 0x2A5A, 0x2B5A, 0x2A5C, 0x2B5C, 0x2A5D, 0x2B5D, 0x2A5F, 0x2B5F, /* 0x50 */ + 0x2A5E, 0x2B5E, 0x2A61, 0x2B61, 0x2A60, 0x2B60, 0x292F, 0x294F, /* 0x60 */ + 0x2A6C, 0x2B6C, 0x2A69, 0x2B69, 0x2A66, 0x2B66, 0x2A6B, 0x2B6B, /* 0x60 */ + 0x2A68, 0x2B68, 0x2A6A, 0x2B6A, 0x2A71, 0x2B71, 0x2A74, 0x2B74, /* 0x70 */ + 0x2A73, 0x2A75, 0x2B75, 0x2A77, 0x2B77, 0x2A76, 0x2B76, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x2A26, 0x2B26, 0x2A43, /* 0xC0 */ + 0x2B43, 0x2A55, 0x2B55, 0x2A67, 0x2B67, 0x2A70, 0x2B70, 0x2A6D, /* 0xD0 */ + 0x2B6D, 0x2A6F, 0x2B6F, 0x2A6E, 0x2B6E, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x2B39 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_02[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2230, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x222F, 0x2232, 0x2236, 0x2235, 0, 0x2233 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2238, 0x2239, 0x2661, 0, /* 0x80 */ + 0x2662, 0x2663, 0x2664, 0, 0x2667, 0, 0x2669, 0x266C, /* 0x80 */ + 0x2676, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x2665, 0x266A, 0x2671, 0x2672, 0x2673, 0x2674, /* 0xA0 */ + 0x267B, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x2678, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x2675, 0x267A, 0x2677, 0x2679, 0x267C /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, /* 0x00 */ + 0x2748, 0x2749, 0x274A, 0x274B, 0x274C, 0, 0x274D, 0x274E, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776, 0x2777, /* 0x50 */ + 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0, 0x277D, 0x277E /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2271, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x226F /* 0x20 */ + /* 0x20 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3021, 0, 0x3022, 0x3023, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x3024, 0, 0, 0, /* 0x00 */ + 0, 0, 0x3025, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x3026, /* 0x10 */ + 0, 0, 0, 0x3027, 0x3028, 0, 0, 0, /* 0x20 */ + 0x3029, 0, 0, 0x302A, 0, 0, 0x302B, 0x302C, /* 0x20 */ + 0x302D, 0, 0, 0, 0, 0x302E, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x302F, 0x3030, 0, 0, 0x3031, 0, 0, 0x3032, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x3033, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x3034, 0, 0x3035, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x3036, 0, 0, 0, 0, /* 0x60 */ + 0x3037, 0x3038, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x3039, 0x303A, 0, 0, /* 0x70 */ + 0, 0x303B, 0, 0, 0, 0, 0, 0x303C, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x303D, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x303E, 0x303F, /* 0x90 */ + 0, 0, 0, 0, 0, 0x3040, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3041, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x3042, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x3043, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x3044, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x3045, 0x3046, 0, 0, 0, 0, /* 0xD0 */ + 0x3047, 0x3048, 0x3049, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x304A, 0, 0, 0, 0, 0, 0, 0x304B, /* 0xE0 */ + 0, 0x304C, 0, 0x304D, 0, 0x304E, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x304F, 0x3050, 0x3051 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3052, 0, 0x3053, 0x3054, 0, 0, 0, 0, /* 0x00 */ + 0x3055, 0, 0, 0x3056, 0x3057, 0, 0, 0, /* 0x00 */ + 0, 0, 0x3058, 0, 0, 0x3059, 0x305A, 0x305B, /* 0x10 */ + 0, 0x305C, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x305D, 0, /* 0x20 */ + 0, 0x305E, 0, 0x3060, 0, 0x3061, 0, 0x3062, /* 0x30 */ + 0, 0x3063, 0, 0x3064, 0, 0, 0x3065, 0, /* 0x30 */ + 0x3066, 0, 0x3067, 0, 0, 0, 0, 0, /* 0x40 */ + 0x3068, 0x3069, 0, 0x306A, 0x306B, 0, 0, 0, /* 0x40 */ + 0, 0, 0x306C, 0, 0x306D, 0, 0x306E, 0, /* 0x50 */ + 0x306F, 0, 0, 0, 0, 0, 0, 0x3070, /* 0x50 */ + 0x305F, 0, 0, 0x3071, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x3072, 0, 0x3073, 0, 0x3074, 0, /* 0x60 */ + 0, 0x3075, 0, 0, 0, 0, 0, 0x3076, /* 0x70 */ + 0x3077, 0x3078, 0x3079, 0, 0, 0x307A, 0x307B, 0, /* 0x70 */ + 0, 0x307C, 0x307D, 0, 0x307E, 0x3121, 0, 0, /* 0x80 */ + 0, 0x3122, 0x3123, 0, 0x3124, 0, 0x3125, 0, /* 0x80 */ + 0x3126, 0, 0x3127, 0x3128, 0x3129, 0, 0, 0x312A, /* 0x90 */ + 0, 0x312B, 0x312C, 0, 0, 0, 0x312D, 0x312E, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x312F, 0, 0, 0, 0, 0x3130, /* 0xB0 */ + 0, 0x3131, 0, 0x3132, 0x3133, 0x3134, 0x3135, 0, /* 0xB0 */ + 0x3136, 0x3137, 0, 0, 0, 0x3138, 0x3139, 0, /* 0xC0 */ + 0x313A, 0x313B, 0, 0x313C, 0x313D, 0x313E, 0, 0x313F, /* 0xC0 */ + 0, 0, 0x3140, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x3141, 0, 0, 0, /* 0xD0 */ + 0x3142, 0, 0x3143, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x3144, 0, 0x3145, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x3146, 0x3147, 0, 0x3148 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3149, 0x314A, 0, 0, 0x314B, 0, 0, 0x314C, /* 0x00 */ + 0, 0, 0x314D, 0, 0x314E, 0, 0x314F, 0, /* 0x00 */ + 0x3150, 0, 0, 0x3151, 0, 0, 0, 0x3152, /* 0x10 */ + 0x3153, 0, 0, 0x3154, 0x3155, 0x3156, 0x3157, 0, /* 0x10 */ + 0, 0, 0x3158, 0, 0, 0, 0, 0x3159, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x315A, 0, /* 0x20 */ + 0x315B, 0, 0x315C, 0x315D, 0, 0x315E, 0, 0, /* 0x30 */ + 0, 0, 0, 0x3176, 0, 0, 0, 0, /* 0x30 */ + 0x315F, 0x3160, 0x3161, 0, 0, 0x3162, 0x3163, 0, /* 0x40 */ + 0, 0, 0x3164, 0, 0x3165, 0, 0x3166, 0, /* 0x40 */ + 0, 0x3167, 0x3168, 0x3169, 0, 0, 0, 0x316A, /* 0x50 */ + 0, 0x316B, 0, 0, 0, 0, 0, 0x316C, /* 0x50 */ + 0x316D, 0, 0x316E, 0x316F, 0, 0, 0x3170, 0x3171, /* 0x60 */ + 0, 0, 0x3172, 0, 0, 0x3173, 0, 0, /* 0x60 */ + 0x3174, 0x3175, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3177, 0, 0x3178, 0x3179, 0, 0x317A, 0, /* 0x80 */ + 0, 0, 0x317B, 0, 0, 0, 0x317C, 0x317D, /* 0x80 */ + 0x317E, 0, 0x3221, 0x3222, 0x3223, 0, 0x3224, 0, /* 0x90 */ + 0, 0, 0, 0x3225, 0x3226, 0, 0x3227, 0x3228, /* 0x90 */ + 0x3229, 0x322A, 0x322B, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x322C, 0, 0, 0, 0, 0x322D, /* 0xA0 */ + 0x322E, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x322F, 0x3230, 0, 0, 0x3231, 0, 0, /* 0xB0 */ + 0x3232, 0, 0, 0x3233, 0x3234, 0, 0, 0x3235, /* 0xC0 */ + 0, 0, 0, 0, 0x3236, 0, 0x3237, 0, /* 0xC0 */ + 0x3238, 0, 0, 0x3239, 0x323A, 0, 0, 0, /* 0xD0 */ + 0x323B, 0, 0, 0, 0x323C, 0x323D, 0, 0x323E, /* 0xD0 */ + 0, 0, 0x323F, 0, 0x3240, 0, 0x3241, 0, /* 0xE0 */ + 0x3242, 0x3243, 0, 0, 0, 0, 0, 0x3244, /* 0xE0 */ + 0, 0x3245, 0x3251, 0, 0, 0, 0x3246, 0, /* 0xF0 */ + 0, 0, 0x3247, 0, 0, 0, 0x3248 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3249, 0, 0, 0x324A, 0x324B, /* 0x00 */ + 0x324C, 0, 0, 0x324D, 0x324E, 0x324F, 0x3250, 0, /* 0x00 */ + 0x3252, 0, 0, 0, 0, 0, 0, 0x3253, /* 0x10 */ + 0, 0x3254, 0, 0x3255, 0x3256, 0x3257, 0x3258, 0, /* 0x10 */ + 0, 0, 0, 0x3259, 0, 0, 0, 0x325A, /* 0x20 */ + 0x325B, 0, 0, 0, 0x325C, 0x325D, 0, 0x325E, /* 0x20 */ + 0, 0x325F, 0, 0x3260, 0x3261, 0x3262, 0, 0, /* 0x30 */ + 0x3263, 0x3264, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x3265, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x3266, 0, 0, 0, 0, 0x3267, /* 0x40 */ + 0, 0, 0, 0x3268, 0, 0x3269, 0, 0x326A, /* 0x50 */ + 0x326B, 0, 0, 0, 0, 0, 0, 0x326C, /* 0x50 */ + 0, 0, 0, 0, 0x326D, 0, 0x326E, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x326F, 0, /* 0x70 */ + 0, 0, 0, 0x3270, 0x3271, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3272, 0, 0, 0x3273, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x3274, 0, 0, 0, 0, 0x3275, 0, 0, /* 0x90 */ + 0, 0x3276, 0, 0x3277, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x3278, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3279, 0, 0x327A, 0, 0x327B, 0, 0x327C, 0x327D, /* 0xB0 */ + 0, 0, 0x327E, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x3321, 0, 0, 0, 0, 0, 0, 0x3322, /* 0xC0 */ + 0, 0x3323, 0x3324, 0x3325, 0, 0x3326, 0, 0, /* 0xD0 */ + 0x3327, 0, 0, 0, 0, 0, 0x3328, 0, /* 0xD0 */ + 0, 0, 0x3329, 0, 0, 0x332A, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x332B, 0, /* 0xE0 */ + 0, 0, 0x332C, 0x332D, 0x332E, 0, 0, 0x332F /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3330, 0x3331, 0, 0, 0x3332, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x3333, 0x3334, 0, 0x3335, 0x3336, 0, /* 0x10 */ + 0x3337, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x3338, 0, 0, 0, 0, 0, /* 0x20 */ + 0x3339, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x333A, 0x333B, 0, 0, 0x333C, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x333D, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x333E, 0, 0, /* 0x40 */ + 0, 0x333F, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x3340, 0, 0x3341, /* 0x50 */ + 0x3342, 0, 0x3343, 0, 0x3344, 0, 0, 0x3345, /* 0x50 */ + 0x3346, 0x3347, 0, 0, 0, 0, 0x3348, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0x3349, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x334A, /* 0x70 */ + 0x334B, 0x334C, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x334D, 0, 0x334E, 0, 0, 0x334F, 0, 0, /* 0x80 */ + 0, 0, 0x3350, 0, 0x3351, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3352, 0, 0x3353, 0x3354, 0x3355, /* 0x90 */ + 0x3356, 0, 0x3357, 0, 0x3358, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x3359, 0x335A, 0x335B, 0x335C, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x335D, /* 0xA0 */ + 0x335E, 0, 0, 0, 0, 0, 0x335F, 0x3360, /* 0xB0 */ + 0x3361, 0, 0x3362, 0x3363, 0, 0x3364, 0, 0, /* 0xB0 */ + 0x3365, 0, 0, 0, 0x3366, 0, 0x3367, 0, /* 0xC0 */ + 0x3368, 0, 0, 0, 0x3369, 0, 0, 0x336A, /* 0xC0 */ + 0, 0x336B, 0, 0, 0x336C, 0, 0x336D, 0, /* 0xD0 */ + 0, 0, 0, 0x336E, 0x336F, 0, 0, 0, /* 0xD0 */ + 0, 0x3370, 0, 0, 0, 0x3371, 0, 0, /* 0xE0 */ + 0x3372, 0x3373, 0x3374, 0, 0x3375, 0, 0, 0, /* 0xE0 */ + 0x3376, 0x3377, 0, 0, 0x3378, 0, 0x3379, 0x337A /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x337B, 0, 0, 0x337C, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x337D, 0x337E, 0x3421, 0, 0, 0, /* 0x00 */ + 0, 0x3422, 0, 0x3423, 0, 0, 0, 0, /* 0x10 */ + 0x3424, 0, 0, 0x3425, 0x3426, 0, 0x3427, 0x3428, /* 0x10 */ + 0, 0, 0, 0, 0, 0x3429, 0, 0x342A, /* 0x20 */ + 0x342B, 0x342C, 0, 0x342D, 0x342E, 0x342F, 0, 0, /* 0x20 */ + 0x3430, 0, 0x3431, 0, 0, 0x3432, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x3433, 0x3434, 0x3435, 0, /* 0x30 */ + 0, 0, 0x3436, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x3438, 0x3437, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3439, 0, 0x343A, 0, 0, 0, 0, /* 0x50 */ + 0, 0x343B, 0, 0x343C, 0, 0x343D, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x343E, 0x343F, 0, 0, /* 0x60 */ + 0, 0, 0x3440, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3441, 0, 0, 0, 0, 0x3442, 0, /* 0x70 */ + 0, 0, 0, 0x3443, 0, 0, 0, 0x3444, /* 0x80 */ + 0x3445, 0, 0, 0, 0, 0, 0x3446, 0, /* 0x80 */ + 0, 0, 0, 0x3447, 0x3448, 0, 0, 0, /* 0x90 */ + 0, 0x3449, 0, 0, 0, 0x344A, 0, 0, /* 0x90 */ + 0, 0x344B, 0, 0, 0x344C, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x344D, 0x344E, 0, 0, 0, 0x344F, /* 0xA0 */ + 0, 0, 0x3450, 0, 0x3451, 0x3452, 0, 0x3453, /* 0xB0 */ + 0x3454, 0, 0x3455, 0, 0, 0x3456, 0, 0, /* 0xB0 */ + 0x3457, 0, 0, 0, 0, 0x3458, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3459, /* 0xC0 */ + 0, 0, 0x345A, 0x345B, 0, 0x345C, 0, 0, /* 0xD0 */ + 0, 0, 0x345D, 0, 0, 0x345E, 0x345F, 0, /* 0xD0 */ + 0x3460, 0, 0, 0, 0, 0, 0x3461, 0x3462, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x3463 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3464, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x3465, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x3466, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x3467, 0, 0, 0, 0, 0, 0x3468, /* 0x20 */ + 0x3469, 0, 0x346A, 0, 0, 0, 0, 0x346B, /* 0x20 */ + 0, 0x346C, 0, 0, 0x346D, 0x346E, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x346F, 0x3470, 0, 0, 0x3471, /* 0x40 */ + 0, 0, 0, 0, 0, 0x3472, 0, 0x3473, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x3474, 0, /* 0x50 */ + 0, 0, 0x3475, 0, 0x3476, 0, 0x3477, 0x3478, /* 0x60 */ + 0, 0x3479, 0, 0x347A, 0, 0x347B, 0x347C, 0, /* 0x60 */ + 0, 0, 0, 0, 0x347D, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x347E, /* 0x70 */ + 0, 0x3521, 0, 0x3522, 0, 0x3523, 0, 0, /* 0x80 */ + 0x3524, 0x3525, 0, 0, 0, 0x3526, 0, 0, /* 0x80 */ + 0, 0x3527, 0, 0, 0, 0x3528, 0x3529, 0, /* 0x90 */ + 0, 0, 0, 0, 0x352A, 0, 0, 0x352B, /* 0x90 */ + 0, 0x352C, 0, 0, 0, 0, 0x352D, 0x352E, /* 0xA0 */ + 0, 0x352F, 0x3530, 0, 0, 0x3531, 0x3532, 0, /* 0xA0 */ + 0, 0x3533, 0, 0, 0, 0, 0, 0x3534, /* 0xB0 */ + 0, 0x3535, 0x3536, 0x3537, 0, 0, 0, 0x3538, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x3539, 0, /* 0xC0 */ + 0, 0, 0x353A, 0, 0, 0x353B, 0x353C, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x353D, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x353E, 0, 0x353F, 0, 0, 0x3540, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3541, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x3542, 0, 0x3543, 0x3544 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3545, 0x3546, 0, 0, 0, 0x3547, 0, 0, /* 0x00 */ + 0x3548, 0x3549, 0, 0, 0x354A, 0x354B, 0x354C, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x354D, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x354E, 0x354F, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x3550, 0, 0, 0x3551, 0x3552, 0, /* 0x30 */ + 0, 0, 0, 0x3553, 0x3554, 0x3555, 0, 0, /* 0x30 */ + 0, 0x3556, 0, 0, 0, 0, 0, 0x3557, /* 0x40 */ + 0, 0x3558, 0x3559, 0, 0, 0x355A, 0, 0, /* 0x40 */ + 0x355B, 0x355C, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x355D, 0, 0x355E, 0x355F, 0, 0, 0x3560, 0, /* 0x50 */ + 0x3561, 0x3562, 0, 0, 0x3563, 0, 0x3564, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x3565, /* 0x70 */ + 0, 0x3566, 0x3567, 0, 0, 0, 0x3568, 0, /* 0x80 */ + 0x3569, 0, 0, 0, 0, 0, 0x356A, 0x356B, /* 0x80 */ + 0, 0x356C, 0x356D, 0x356E, 0x356F, 0, 0, 0x3570, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x3571, 0x3572, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x3573, 0, 0, /* 0xA0 */ + 0, 0, 0x3574, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3575, /* 0xB0 */ + 0, 0x3576, 0, 0x3577, 0, 0, 0x3578, 0, /* 0xC0 */ + 0, 0x3579, 0, 0x357A, 0x357B, 0, 0x357C, 0, /* 0xC0 */ + 0, 0x357D, 0x357E, 0x3621, 0, 0, 0, 0x3622, /* 0xD0 */ + 0x3623, 0, 0, 0x3624, 0, 0, 0x3625, 0, /* 0xD0 */ + 0, 0, 0x3626, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x3627, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3628, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3629 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x362A, 0, 0, /* 0x00 */ + 0x362B, 0, 0x362C, 0, 0, 0x362D, 0x362E, 0x362F, /* 0x00 */ + 0x3630, 0x3631, 0x3632, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x3633, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x3634, 0, 0, 0, /* 0x20 */ + 0x3635, 0, 0, 0x3636, 0, 0x3637, 0, 0x3638, /* 0x30 */ + 0, 0x3639, 0, 0x363A, 0x363B, 0x363C, 0, 0x363D, /* 0x30 */ + 0x363E, 0x363F, 0, 0x3640, 0x3641, 0, 0x3642, 0, /* 0x40 */ + 0, 0x3643, 0, 0x3644, 0, 0x3645, 0, 0x3646, /* 0x40 */ + 0, 0, 0, 0, 0x3647, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x3648, 0, /* 0x50 */ + 0x3649, 0x364A, 0x364B, 0x364C, 0, 0, 0x364D, 0, /* 0x60 */ + 0, 0x364E, 0, 0, 0, 0x364F, 0, 0x3650, /* 0x60 */ + 0, 0x3651, 0x3652, 0, 0, 0x3653, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x3654, 0x3655, 0, 0, /* 0x80 */ + 0x3656, 0, 0, 0x3657, 0x3658, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x3659, 0, 0, /* 0x90 */ + 0, 0x365A, 0x365B, 0, 0, 0x365C, 0x365D, 0x365E, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x365F, 0x3660, /* 0xA0 */ + 0x3661, 0x3662, 0, 0x3663, 0x3664, 0x3665, 0, 0, /* 0xA0 */ + 0, 0x3666, 0, 0x3667, 0, 0, 0, 0x3668, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x3669, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x366A, 0, 0, /* 0xC0 */ + 0, 0x366B, 0x366C, 0x366D, 0x3670, 0x3671, 0, 0x366E, /* 0xC0 */ + 0x366F, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x3672, 0, 0, 0x3673, 0x3674, 0, 0x3675, /* 0xD0 */ + 0, 0x3676, 0, 0, 0x3677, 0x3678, 0x3679, 0x367A, /* 0xE0 */ + 0x367B, 0, 0, 0x367D, 0, 0x367E, 0, 0, /* 0xE0 */ + 0, 0x367C, 0, 0, 0, 0, 0x3721, 0x3722 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3723, 0x3724, 0, 0, 0, 0, 0x3725, /* 0x00 */ + 0, 0, 0x3726, 0, 0x3727, 0, 0, 0, /* 0x00 */ + 0, 0x3728, 0, 0, 0, 0x3729, 0, 0, /* 0x10 */ + 0, 0, 0x372A, 0x372B, 0, 0x372C, 0, 0, /* 0x10 */ + 0x372D, 0, 0x372E, 0x372F, 0x3730, 0x3731, 0, 0, /* 0x20 */ + 0, 0x3732, 0x3733, 0, 0x3734, 0, 0x3735, 0x3736, /* 0x20 */ + 0, 0, 0, 0x3737, 0x3738, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x3739, 0x373A, 0x373B, /* 0x30 */ + 0, 0, 0, 0, 0, 0x373C, 0x373D, 0, /* 0x40 */ + 0, 0, 0, 0, 0x373E, 0x373F, 0, 0, /* 0x40 */ + 0, 0, 0x3740, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x3741, 0, 0, 0x3742, 0, 0x3743, /* 0x60 */ + 0x3744, 0, 0, 0x3745, 0, 0x3746, 0x3747, 0x3748, /* 0x60 */ + 0x3749, 0x374A, 0, 0x374B, 0x374C, 0x374D, 0, 0x374E, /* 0x70 */ + 0, 0x374F, 0x3750, 0x3751, 0x3752, 0, 0x3753, 0, /* 0x70 */ + 0, 0x3754, 0, 0x3755, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x3756, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x3757, 0x3760, 0, 0x3758, /* 0x90 */ + 0, 0x3759, 0x375A, 0, 0x375B, 0x375C, 0x375D, 0x375E, /* 0x90 */ + 0, 0x375F, 0, 0, 0, 0, 0, 0x3761, /* 0xA0 */ + 0x3762, 0x3763, 0, 0, 0x3764, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3765, 0, 0, 0, 0, 0x3766, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3767, /* 0xC0 */ + 0x3768, 0, 0, 0, 0x3769, 0, 0, 0x376A, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x376B, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x376C, 0x376D, 0, /* 0xD0 */ + 0, 0x377E, 0, 0, 0x376E, 0, 0x376F, 0x3770, /* 0xE0 */ + 0, 0x3771, 0, 0, 0, 0x3772, 0, 0, /* 0xE0 */ + 0x3773, 0, 0, 0, 0, 0x3774, 0x3775, 0, /* 0xF0 */ + 0x3776, 0, 0, 0, 0, 0x3777, 0x3778, 0x3779 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x377A, 0x377B, 0, 0, 0, /* 0x00 */ + 0x377C, 0x377D, 0, 0, 0x3821, 0x3822, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x3823, 0, 0, 0x3824, 0x3825, /* 0x10 */ + 0x3826, 0, 0, 0, 0, 0, 0x3827, 0x3828, /* 0x20 */ + 0, 0, 0, 0, 0, 0x3829, 0, 0, /* 0x20 */ + 0, 0, 0x382A, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x382B, 0, 0, 0, 0, 0, 0x382C, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x382D, 0, 0, 0x382E, 0x382F, 0, 0x3830, /* 0x40 */ + 0x3831, 0, 0, 0, 0, 0x3832, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x3833, /* 0x50 */ + 0, 0x3834, 0, 0, 0x3835, 0, 0, 0x3836, /* 0x60 */ + 0x3837, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x3838, 0, 0, 0, 0x3839, 0, 0, 0x383A, /* 0x70 */ + 0x383B, 0x383C, 0, 0, 0, 0, 0, 0x383D, /* 0x80 */ + 0x383E, 0x383F, 0x3840, 0, 0x3841, 0x3842, 0, 0x3843, /* 0x80 */ + 0x3844, 0, 0, 0, 0x3845, 0, 0x3846, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x3847, 0, 0, /* 0x90 */ + 0x3848, 0x3849, 0x384A, 0, 0, 0, 0x384B, 0, /* 0xA0 */ + 0, 0x384C, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x384D, 0x384E, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x3850, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x3851, 0, 0x384F, 0, 0, 0, /* 0xC0 */ + 0x3852, 0, 0, 0, 0, 0x3853, 0x3854, 0, /* 0xC0 */ + 0x3855, 0, 0x3856, 0, 0x3857, 0, 0x3858, 0, /* 0xD0 */ + 0, 0, 0x3859, 0, 0, 0x385A, 0, 0, /* 0xD0 */ + 0, 0x385B, 0x385C, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x385D, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x385E /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x385F, 0x3860, 0, /* 0x00 */ + 0, 0, 0, 0x3861, 0x3862, 0, 0, 0, /* 0x00 */ + 0, 0, 0x3863, 0x3864, 0x3865, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x3867, 0, 0, /* 0x10 */ + 0, 0x3868, 0, 0x3869, 0x386A, 0, 0, 0, /* 0x20 */ + 0x386B, 0, 0, 0, 0, 0, 0, 0x386C, /* 0x20 */ + 0x386D, 0, 0, 0x386E, 0, 0x386F, 0x3870, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x3871, /* 0x30 */ + 0, 0, 0, 0x3872, 0, 0, 0x3873, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x3874, 0x3875, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3876, 0, 0x3877, 0, 0x3878, 0x3879, 0x387A, /* 0x50 */ + 0, 0x387B, 0, 0x387C, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x387D, 0, 0x387E, 0, 0x3921, /* 0x60 */ + 0, 0, 0x3922, 0, 0, 0x3923, 0x3924, 0, /* 0x70 */ + 0, 0x3925, 0, 0x3926, 0x3927, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3928, 0x3929, 0, 0x392A, 0, /* 0x80 */ + 0, 0, 0x392B, 0, 0, 0x392C, 0, 0x392D, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x392E, /* 0x90 */ + 0, 0, 0, 0, 0x392F, 0, 0, 0x3930, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x3931, 0x3932, 0x3933, /* 0xA0 */ + 0x3934, 0, 0, 0x3935, 0, 0, 0, 0x3936, /* 0xB0 */ + 0, 0, 0x3937, 0, 0x3938, 0, 0, 0, /* 0xB0 */ + 0, 0x3939, 0, 0x393A, 0x393B, 0, 0, 0, /* 0xC0 */ + 0x393C, 0, 0x393D, 0, 0, 0x393E, 0, 0, /* 0xC0 */ + 0, 0, 0x393F, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x3940, 0x3941, 0x3942, /* 0xD0 */ + 0, 0, 0, 0x3943, 0x3944, 0, 0, 0x3945, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3946, 0x3947, /* 0xE0 */ + 0, 0x3948, 0x3949, 0, 0x394A, 0, 0, 0x394B /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x394C, 0, 0, 0, 0x394D, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x394E, 0x394F, 0x3950, 0, /* 0x00 */ + 0, 0, 0x3951, 0x3952, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x3953, 0, /* 0x10 */ + 0, 0, 0, 0x3954, 0x3955, 0, 0, 0x3956, /* 0x20 */ + 0x3957, 0, 0x3958, 0, 0, 0x3959, 0, 0, /* 0x20 */ + 0x395A, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x395B, 0x395C, 0, 0x395D, /* 0x40 */ + 0x395E, 0, 0, 0, 0x395F, 0, 0, 0, /* 0x40 */ + 0x3960, 0, 0, 0, 0, 0x3961, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x3962, 0, /* 0x50 */ + 0, 0, 0, 0x3963, 0, 0x3964, 0, 0x3965, /* 0x60 */ + 0, 0, 0, 0, 0, 0x3966, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x3967, /* 0x70 */ + 0, 0, 0x3968, 0x3969, 0, 0, 0x396A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x396B, 0, 0, 0, 0, /* 0x80 */ + 0x396C, 0, 0, 0x396D, 0, 0, 0x396E, 0, /* 0x90 */ + 0, 0x396F, 0, 0, 0x3970, 0, 0x3971, 0x3972, /* 0x90 */ + 0x3973, 0, 0x3974, 0, 0, 0, 0, 0x3975, /* 0xA0 */ + 0, 0, 0, 0, 0x3976, 0, 0, 0, /* 0xA0 */ + 0, 0x3977, 0x3978, 0x3979, 0, 0x397A, 0, 0, /* 0xB0 */ + 0x397B, 0, 0x397C, 0x397D, 0, 0, 0, 0x397E, /* 0xB0 */ + 0, 0, 0, 0, 0x3A21, 0, 0x3A22, 0, /* 0xC0 */ + 0x3A23, 0, 0, 0, 0, 0, 0, 0x3A24, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x3A25, 0, 0x3A26, 0, 0, 0, /* 0xD0 */ + 0x3A27, 0, 0, 0, 0, 0x3A28, 0, 0, /* 0xE0 */ + 0, 0, 0x3A29, 0, 0, 0, 0x3A2A, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x3A2B, 0x3A2C, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x3A2D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3A2E, 0x3A2F, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x3A30, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x3A31, /* 0x10 */ + 0, 0x3A33, 0, 0x3A34, 0, 0x3A35, 0, 0, /* 0x10 */ + 0, 0x3A36, 0, 0, 0, 0x3A37, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x3A38, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x3A32, 0, 0, 0, /* 0x30 */ + 0x3A39, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x3A3A, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x3A3B, 0x3A3C, 0, 0, 0, /* 0x40 */ + 0, 0, 0x3A3D, 0, 0, 0, 0x3A3E, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x3A3F, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x3A40, 0, 0, 0, 0, 0, 0x3A41, 0x3A42, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x3A43, 0x3A44, 0x3A45, 0x3A46, /* 0x70 */ + 0, 0x3A47, 0, 0, 0x3A48, 0, 0x3A49, 0, /* 0x80 */ + 0, 0, 0x3A4A, 0, 0, 0, 0x3A4B, 0, /* 0x80 */ + 0x3A4C, 0x3A4D, 0, 0x3A4E, 0x3A4F, 0, 0x3A50, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x3A51, 0x3A52, 0, 0, 0x3A53, 0x3A54, 0, 0x3A55, /* 0xA0 */ + 0, 0x3A56, 0x3A57, 0, 0, 0, 0, 0x3A58, /* 0xB0 */ + 0, 0, 0x3A59, 0, 0x3A5A, 0, 0, 0, /* 0xB0 */ + 0x3A5B, 0x3A5C, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x3A5D, 0, 0x3A5E, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x3A5F, 0x3A60, /* 0xD0 */ + 0x3A61, 0x3A62, 0x3A63, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x3A64, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x3A65, /* 0xE0 */ + 0, 0x3A66, 0, 0, 0x3A67, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x3A68 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x3A69, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x3A6A, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x3A6B, 0x3A6C, /* 0x10 */ + 0, 0, 0, 0x3A6D, 0, 0, 0x3A6E, 0, /* 0x20 */ + 0, 0x3A6F, 0, 0x3A70, 0x3A71, 0, 0x3A72, 0, /* 0x20 */ + 0x3A73, 0, 0x3A74, 0, 0, 0x3A75, 0x3A76, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3A77, 0x3A78, 0, 0x3A79, 0, 0, 0, /* 0x50 */ + 0, 0, 0x3A7A, 0x3A7B, 0, 0, 0, 0x3A7C, /* 0x60 */ + 0x3A7D, 0x3A7E, 0, 0, 0, 0x3B21, 0, 0, /* 0x60 */ + 0x3B22, 0, 0, 0, 0x3B23, 0x3B24, 0, 0, /* 0x70 */ + 0, 0, 0x3B25, 0x3B26, 0x3B27, 0x3B28, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x3B29, /* 0x80 */ + 0x3B2A, 0, 0x3B2B, 0, 0, 0, 0, 0x3B2C, /* 0x80 */ + 0, 0, 0x3B2D, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x3B2E, 0, 0x3B2F, /* 0x90 */ + 0x3B30, 0, 0x3B31, 0x3B32, 0, 0, 0x3B33, 0, /* 0xA0 */ + 0, 0, 0x3B34, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x3B35, 0, 0x3B36, 0x3B37, 0, 0, /* 0xB0 */ + 0, 0, 0x3B38, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x3B39, 0, 0x3B3A, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x3B3B, 0, 0, 0, 0, 0x3B3D, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x3B3C, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x3B3E, 0, /* 0xE0 */ + 0, 0x3B3F, 0x3B40, 0, 0x3B41 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3B42, 0, 0, 0, 0, 0x3B43, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x3B44, 0, 0, /* 0x00 */ + 0, 0, 0x3B45, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x3B47, 0x3B48, 0, 0x3B49, 0x3B4A, /* 0x20 */ + 0, 0, 0, 0x3B46, 0, 0, 0, 0, /* 0x20 */ + 0, 0x3B4B, 0, 0, 0x3B4C, 0, 0, 0, /* 0x30 */ + 0, 0x3B4D, 0, 0, 0, 0x3B4E, 0, 0x3B4F, /* 0x30 */ + 0, 0, 0x3B50, 0x3B51, 0, 0, 0x3B52, 0, /* 0x40 */ + 0x3B53, 0, 0x3B57, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x3B55, 0, 0, 0, 0x3B54, 0, 0, /* 0x50 */ + 0, 0x3B56, 0, 0, 0, 0, 0, 0x3B58, /* 0x50 */ + 0x3B59, 0x3B5A, 0x3B5B, 0, 0x3B5C, 0, 0, 0, /* 0x60 */ + 0, 0, 0x3B5D, 0, 0, 0x3B5E, 0, 0, /* 0x60 */ + 0x3B5F, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3B60, 0x3B61, 0, 0, 0, 0x3B62, 0x3B63, /* 0x70 */ + 0, 0x3B64, 0, 0x3B65, 0, 0, 0, 0, /* 0x80 */ + 0x3B66, 0, 0x3B67, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x3B68, 0x3B69, 0x3B6A, 0x3B6B, 0, 0, /* 0x90 */ + 0, 0x3B6C, 0, 0x3B6D, 0, 0, 0, 0x3B6E, /* 0x90 */ + 0x3B6F, 0, 0, 0, 0, 0, 0, 0x3B70, /* 0xA0 */ + 0, 0, 0, 0x3B71, 0, 0, 0, 0, /* 0xA0 */ + 0x3B72, 0, 0x6674, 0, 0x3B73, 0, 0, 0, /* 0xB0 */ + 0x3B74, 0x3B75, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x3B76, 0, 0, 0, 0x3B77, /* 0xC0 */ + 0, 0, 0, 0x3B78, 0, 0, 0x3B7A, 0, /* 0xC0 */ + 0x3B79, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x3B7B, 0x3B7C, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x3B7D, 0, 0, 0, 0x3B7E, 0, 0, 0, /* 0xE0 */ + 0, 0x3C21, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x3C22, 0x3C23 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3C24, 0, 0, 0, 0, 0, 0, 0x3C25, /* 0x00 */ + 0, 0, 0, 0, 0, 0x3C26, 0, 0, /* 0x00 */ + 0, 0, 0x3C27, 0, 0x3C28, 0x3C29, 0, 0, /* 0x10 */ + 0x3C2A, 0, 0, 0, 0, 0, 0, 0x3C2B, /* 0x10 */ + 0x3C2C, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x3C2E, 0, 0, 0, 0, 0, 0x3C2D, 0, /* 0x20 */ + 0, 0, 0x3C2F, 0, 0, 0x3C30, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x3C31, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x3C34, 0, 0x3C32, 0, 0, 0, 0, /* 0x40 */ + 0x3C33, 0x3C35, 0, 0, 0, 0, 0x3C36, 0, /* 0x50 */ + 0x3C37, 0, 0, 0x3C38, 0x3C39, 0, 0x3C3A, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x3C3B, 0, 0x3C3C, 0x3C3D, 0x3C3E, 0x3C3F, 0x3C40, 0, /* 0x60 */ + 0x3C41, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x3C42, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3C43, 0, 0, 0x3C44, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x3C45, 0, 0x3C46, 0x3C47, 0, 0, /* 0xA0 */ + 0x3C48, 0, 0x3C49, 0, 0x3C4A, 0, 0, 0, /* 0xA0 */ + 0, 0x3C4B, 0, 0x3C4C, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x3C4D, 0x3C4E, 0x3C4F, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x3C50, 0, /* 0xC0 */ + 0, 0, 0, 0x3C52, 0x3C51, 0, 0x3C53, 0, /* 0xC0 */ + 0, 0x3C54, 0x3C55, 0, 0x3C56, 0x3C57, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x3C58, 0, 0x3C59, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x3C5A, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x3C5B /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3C5C, 0, 0, 0, 0x3C5D, 0x3C5E, /* 0x00 */ + 0x3C5F, 0, 0, 0, 0, 0, 0x3C60, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x3C61, 0, 0, 0x3C62, 0x3C63, 0, 0, /* 0x10 */ + 0, 0x3C64, 0x3C65, 0x3C66, 0x3C67, 0, 0, 0, /* 0x20 */ + 0x3C68, 0, 0, 0x3C69, 0x3C6A, 0, 0x3C6B, 0, /* 0x20 */ + 0x3C6C, 0, 0, 0, 0x3C6D, 0, 0x3C6E, 0, /* 0x30 */ + 0, 0, 0, 0x3C6F, 0, 0x3C70, 0, 0x3C71, /* 0x30 */ + 0x3C72, 0, 0, 0, 0x3C73, 0x3C74, 0, 0x3C75, /* 0x40 */ + 0, 0, 0, 0, 0, 0x3C76, 0, 0, /* 0x40 */ + 0x3C77, 0, 0, 0, 0x3C78, 0, 0, 0, /* 0x50 */ + 0x3C79, 0, 0, 0x3C7A, 0, 0, 0, 0, /* 0x50 */ + 0x3C7B, 0, 0, 0x3C7C, 0x3C7D, 0, 0, 0x3C7E, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x3D21, /* 0x60 */ + 0, 0, 0x3D22, 0, 0x3D23, 0x3D24, 0, 0, /* 0x70 */ + 0x3D25, 0, 0x3D26, 0, 0, 0x3D27, 0x3D28, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x3D29, 0, 0, 0, 0x3D2A, 0, 0x3D2B, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x3D2C, 0, /* 0x90 */ + 0, 0, 0, 0, 0x3D2D, 0x3D2E, 0, 0, /* 0x90 */ + 0, 0, 0x3D2F, 0, 0x3D32, 0, 0, 0x3D30, /* 0xA0 */ + 0, 0, 0, 0x3D31, 0x3D33, 0, 0, 0x3D34, /* 0xA0 */ + 0x3D35, 0x3D36, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3D37, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x3D38, 0, 0, 0x3D39, /* 0xC0 */ + 0x3D3A, 0x3D3B, 0, 0x3D3C, 0, 0, 0, 0, /* 0xC0 */ + 0x3D3D, 0x3D3E, 0x3D3F, 0x3D40, 0x3D41, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0x3D42, 0, /* 0xD0 */ + 0, 0x3D43, 0x3D44, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x3D45, 0x3D46, 0x3D47, 0, 0x3D48, 0x3D49, 0x3D4A, 0x3D4B, /* 0xE0 */ + 0, 0, 0x3D4C, 0x3D4D, 0, 0, 0x3D4E, 0, /* 0xF0 */ + 0, 0, 0x3D4F, 0, 0x3D50 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3D51, /* 0x00 */ + 0, 0, 0x3D52, 0, 0, 0x3D53, 0, 0, /* 0x00 */ + 0, 0, 0, 0x3D54, 0x3D55, 0, 0, 0x3D56, /* 0x10 */ + 0x3D57, 0, 0x3D58, 0, 0, 0, 0, 0x3D59, /* 0x10 */ + 0, 0, 0, 0, 0x3D5A, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x3D5B, 0, 0, /* 0x20 */ + 0, 0, 0, 0x3D5C, 0, 0x3D5D, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x3D5E, 0, 0, 0, 0, 0, 0, 0x3D5F, /* 0x40 */ + 0x3D60, 0x3D61, 0, 0, 0x3D62, 0, 0, 0, /* 0x40 */ + 0, 0x3D63, 0, 0, 0x3D64, 0, 0x3D65, 0x3D66, /* 0x50 */ + 0, 0, 0, 0, 0, 0x3D67, 0, 0, /* 0x50 */ + 0, 0x3D68, 0, 0, 0, 0, 0, 0x3D69, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x3D6A, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x3D6B, 0x3D6C, /* 0x70 */ + 0, 0, 0x3D6D, 0, 0, 0, 0x3D6E, 0, /* 0x80 */ + 0x3D6F, 0, 0x3D70, 0, 0, 0, 0x3D71, 0, /* 0x80 */ + 0, 0x3D72, 0, 0x3D73, 0, 0x3D74, 0, 0, /* 0x90 */ + 0x3D75, 0, 0, 0, 0, 0x3D76, 0x3D77, 0, /* 0x90 */ + 0, 0, 0x3D78, 0, 0x3D79, 0x3D7A, 0, 0, /* 0xA0 */ + 0x3D7B, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x3D7C, 0x3D7D, 0, 0, 0, 0, 0, 0x3D7E, /* 0xB0 */ + 0, 0, 0, 0x3E21, 0, 0, 0x3E22, 0, /* 0xB0 */ + 0, 0, 0x3E23, 0, 0x3E24, 0, 0, 0, /* 0xC0 */ + 0x3E25, 0x3E26, 0x3E27, 0x3E28, 0, 0, 0x3E29, 0x3E2A, /* 0xC0 */ + 0, 0, 0, 0, 0x3E2B, 0x3E2C, 0, 0, /* 0xD0 */ + 0, 0x3E2D, 0, 0x3E2E, 0, 0x3E2F, 0x3E30, 0, /* 0xD0 */ + 0, 0, 0x3E31, 0, 0, 0x3E32, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x3E33, 0, 0, 0x3E34, 0, 0, /* 0xF0 */ + 0x3E35, 0, 0, 0, 0x3E36, 0x3E37 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3E38, 0, 0, 0, 0, 0x3E39, /* 0x00 */ + 0, 0, 0x3E3A, 0, 0x3E3B, 0, 0, 0, /* 0x00 */ + 0x3E3C, 0x3E3D, 0x3E3E, 0x3E3F, 0x3E40, 0, 0x3E41, 0x3E42, /* 0x10 */ + 0, 0x3E43, 0, 0, 0x3E44, 0, 0x3E45, 0, /* 0x10 */ + 0, 0, 0x3E46, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x3E47, 0x3E48, 0, 0, 0, 0, /* 0x20 */ + 0x3E49, 0x3E4A, 0, 0, 0, 0x3E4B, 0x3E4C, 0x3E4D, /* 0x30 */ + 0, 0x3E4E, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x3E4F, 0, 0, 0, 0x3E50, 0x3E51, 0, /* 0x40 */ + 0, 0x3E52, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x3E53, 0, /* 0x50 */ + 0x3E54, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x3E55, 0, 0, 0, /* 0x60 */ + 0, 0, 0x3E56, 0, 0, 0, 0, 0, /* 0x70 */ + 0x3E57, 0, 0, 0x3E58, 0x3E59, 0, 0, 0x3E5A, /* 0x70 */ + 0x3E5B, 0x3E5C, 0, 0x3E5D, 0x3E5E, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x3E5F, 0, 0x3E60, 0, 0, /* 0x80 */ + 0, 0, 0x3E61, 0x3E62, 0, 0, 0, 0x3E63, /* 0x90 */ + 0x3E64, 0, 0, 0, 0x3E65, 0x3E66, 0, 0x3E67, /* 0x90 */ + 0x3E68, 0, 0, 0, 0, 0x3E69, 0, 0, /* 0xA0 */ + 0x3E6A, 0, 0x3E6B, 0, 0, 0x3E6C, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x3E6D, 0x3E6E, 0, 0, 0x3E6F, 0, 0, 0, /* 0xB0 */ + 0x3E70, 0x3E71, 0x3E72, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x3E73, 0x3E74, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x3E75, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x3E76, 0x3E77, 0x3E78, 0x3E79, /* 0xD0 */ + 0, 0x3E7A, 0x3E7B, 0, 0, 0x3E7E, 0, 0x3E7C, /* 0xE0 */ + 0, 0x3E7D, 0, 0, 0x3F21, 0x3F22, 0, 0x3F23 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3F24, 0, 0x3F25, 0x3F26, 0, 0, 0x3F27, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x3F28, 0, 0x3F29, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x3F2A, 0, 0, 0, /* 0x10 */ + 0x3F2B, 0, 0x3F2C, 0x3F2D, 0, 0, 0, 0x3F2E, /* 0x20 */ + 0, 0x3F2F, 0, 0x3F30, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x3F31, 0, 0, 0, 0x3F32, 0, 0, /* 0x30 */ + 0, 0, 0x3F33, 0x3F34, 0x3F35, 0, 0x3F36, 0, /* 0x40 */ + 0, 0, 0, 0, 0x3F37, 0, 0, 0, /* 0x40 */ + 0x3F38, 0x3F39, 0x3F3A, 0, 0x3F3B, 0, 0x3F3C, 0, /* 0x50 */ + 0, 0, 0x3F3D, 0, 0x3F3E, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x3F3F, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x3F40, 0, 0x3F41, /* 0x60 */ + 0, 0, 0, 0x3F42, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x3F43, 0, 0, 0x3F44, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x3F45, 0x3F46, 0x3F47, /* 0x80 */ + 0x3F48, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x3F49, 0, /* 0xA0 */ + 0x3F4A, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x3F4B, 0, 0, 0x3F4C, 0x3F4D, /* 0xB0 */ + 0, 0, 0x3F4E, 0, 0, 0, 0x3F4F, 0x3F50, /* 0xB0 */ + 0, 0, 0, 0, 0x3F51, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x3F52, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x3F53, 0x3F54, 0, /* 0xD0 */ + 0, 0, 0x3F55, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x3F56, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x3F57, 0, 0x3F58, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x3F59, 0x3F5A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3F5B, 0x3F5C, 0, 0, 0, /* 0x00 */ + 0, 0, 0x3F5D, 0x3F5E, 0, 0x3F5F, 0, 0, /* 0x00 */ + 0x3F60, 0, 0, 0x3F61, 0, 0, 0x3F62, 0, /* 0x10 */ + 0x3F63, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x3F64, 0x3F65, 0, 0, 0x3F66, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x3F67, 0x3F68, 0, /* 0x30 */ + 0, 0x3F69, 0, 0, 0x3F6A, 0, 0, 0, /* 0x30 */ + 0, 0x3F6B, 0x3F6C, 0x3F6D, 0x3F6E, 0, 0x3F6F, 0, /* 0x40 */ + 0, 0, 0x3F70, 0x3F71, 0, 0, 0x3F72, 0, /* 0x40 */ + 0, 0, 0x3F73, 0x3F74, 0x3F75, 0, 0, 0, /* 0x50 */ + 0x3F76, 0, 0, 0x3F77, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x3F78, 0x3F79, 0, /* 0x60 */ + 0, 0, 0, 0, 0x3F7A, 0x3F7B, 0, 0, /* 0x60 */ + 0, 0x3F7C, 0, 0, 0x3F7D, 0x3F7E, 0, 0, /* 0x70 */ + 0x4021, 0, 0, 0, 0x4022, 0x4023, 0, 0x4024, /* 0x70 */ + 0, 0, 0x4025, 0, 0x4026, 0, 0, 0x4027, /* 0x80 */ + 0, 0, 0x4028, 0, 0, 0, 0, 0, /* 0x80 */ + 0x4029, 0, 0, 0, 0x402A, 0x402B, 0, 0, /* 0x90 */ + 0, 0x402C, 0x402D, 0, 0, 0, 0x402E, 0, /* 0x90 */ + 0, 0, 0, 0, 0x402F, 0, 0x4030, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x4031, 0x4032, 0x4033, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x4034, 0, 0, /* 0xB0 */ + 0, 0x4035, 0, 0, 0, 0x4036, 0, 0, /* 0xC0 */ + 0x4037, 0, 0, 0, 0, 0, 0x4038, 0, /* 0xC0 */ + 0, 0x4039, 0, 0x403A, 0x403B, 0x403C, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x403D, 0, 0, 0, /* 0xD0 */ + 0x403E, 0, 0, 0, 0, 0x403F, 0, 0, /* 0xE0 */ + 0, 0, 0x4040, 0, 0x4041, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x4042, 0x4043, 0, 0x4044, 0, 0, /* 0xF0 */ + 0x4045, 0x4046 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0x4047, 0x4048, 0, 0, 0, 0, 0, /* 0x00 */ + 0x4049, 0, 0x404A, 0, 0x404B, 0, 0, 0, /* 0x10 */ + 0x404C, 0, 0, 0, 0, 0, 0x404D, 0, /* 0x10 */ + 0x404E, 0, 0x404F, 0, 0x4050, 0x4051, 0, 0, /* 0x20 */ + 0, 0x4052, 0x4053, 0, 0, 0, 0, 0x4054, /* 0x20 */ + 0x4055, 0, 0, 0, 0, 0x4056, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x4057, 0, 0x4058, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x4059, 0, 0, 0, 0x405A, /* 0x40 */ + 0, 0x405B, 0x405C, 0x405D, 0x405E, 0, 0, 0, /* 0x50 */ + 0, 0, 0x405F, 0x4060, 0x4061, 0x4062, 0, 0x4063, /* 0x50 */ + 0x4064, 0x4065, 0, 0x4066, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x4067, 0, 0, /* 0x60 */ + 0, 0, 0, 0x4068, 0x4069, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x406A, 0, 0x406B, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x406C, 0, 0x406D, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0x406E, /* 0x80 */ + 0x406F, 0x4070, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x4071, 0x4072, 0, 0x4073, 0, 0x4074, 0, 0x4075, /* 0x90 */ + 0, 0x4076, 0, 0x4077, 0, 0, 0x4078, 0, /* 0xA0 */ + 0x4079, 0, 0, 0, 0x407A, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x407B, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x407C, 0x407D, 0x407E, /* 0xB0 */ + 0, 0, 0, 0, 0x4121, 0, 0, 0, /* 0xC0 */ + 0, 0x4122, 0x4123, 0x4124, 0x4125, 0, 0x4126, 0, /* 0xC0 */ + 0x4127, 0x4128, 0, 0, 0, 0x4129, 0, 0x412A, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x412B, 0x412C, 0, 0, /* 0xE0 */ + 0, 0x412D, 0x412E, 0, 0, 0x412F, 0, 0, /* 0xE0 */ + 0x4130, 0, 0, 0, 0, 0x4131, 0, 0x4132, /* 0xF0 */ + 0, 0, 0, 0x4133, 0, 0, 0, 0x4134 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4135, 0, 0, 0x4136, 0, 0, 0, /* 0x00 */ + 0x4137, 0x4138, 0x4139, 0, 0, 0, 0, 0x413A, /* 0x00 */ + 0, 0, 0, 0x413B, 0x413C, 0, 0x413D, 0, /* 0x10 */ + 0, 0x413E, 0, 0x413F, 0, 0, 0x4140, 0x4141, /* 0x10 */ + 0, 0, 0x4142, 0, 0, 0, 0x4143, 0, /* 0x20 */ + 0, 0x4144, 0, 0, 0, 0, 0x4145, 0, /* 0x20 */ + 0, 0x4146, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x4147, 0, 0x4148, 0x4149, 0, 0, /* 0x30 */ + 0, 0, 0, 0x414A, 0, 0, 0, 0x414B, /* 0x40 */ + 0, 0x414C, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x414D, 0, 0x414E, 0, 0x414F, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x4150, /* 0x50 */ + 0x4151, 0, 0, 0, 0, 0, 0, 0x4152, /* 0x60 */ + 0, 0, 0, 0x4153, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x4154, 0, 0, 0x4155, 0, 0, /* 0x70 */ + 0, 0x4156, 0, 0, 0, 0x4157, 0, 0, /* 0x80 */ + 0, 0, 0x4158, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x4159, 0, 0, 0x415A, 0, 0, /* 0x90 */ + 0x415B, 0, 0, 0, 0, 0x415C, 0, 0, /* 0x90 */ + 0x415D, 0, 0, 0x415E, 0, 0, 0x415F, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x4160, 0, /* 0xA0 */ + 0, 0, 0x4161, 0x4162, 0x4163, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x4164, /* 0xB0 */ + 0, 0, 0x4165, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x4166, 0x4167, 0, 0, 0, 0, 0x4168, 0, /* 0xC0 */ + 0x4169, 0, 0, 0, 0x416A, 0, 0x416B, 0, /* 0xD0 */ + 0x416C, 0, 0, 0, 0, 0, 0, 0x416D, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x416E, 0, 0x416F, 0, 0x4170, 0x4171, 0, 0, /* 0xF0 */ + 0, 0x4172, 0, 0, 0, 0, 0x4173, 0x4174 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4175, 0, 0, 0, 0x4176, 0, 0, 0, /* 0x00 */ + 0x4177, 0x4178, 0, 0, 0, 0x4179, 0, 0, /* 0x00 */ + 0, 0x417A, 0x417B, 0, 0, 0x417C, 0x417D, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x417E, 0x4221, 0, /* 0x10 */ + 0, 0x4222, 0x4223, 0x4224, 0x4225, 0, 0x4226, 0, /* 0x20 */ + 0, 0x4227, 0x4228, 0x4229, 0x422A, 0, 0x422B, 0, /* 0x20 */ + 0x422C, 0x422D, 0, 0x422E, 0, 0, 0, 0x4230, /* 0x30 */ + 0, 0x422F, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x4231, 0, 0, 0, 0, 0x4232, 0x4233, 0, /* 0x40 */ + 0, 0, 0x4234, 0, 0x4235, 0, 0x4237, 0, /* 0x40 */ + 0, 0x4236, 0, 0, 0, 0, 0, 0x4238, /* 0x50 */ + 0x4239, 0x423A, 0, 0x423B, 0x423C, 0, 0, 0, /* 0x50 */ + 0x423D, 0x423E, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x4240, 0x4241, 0x4242, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x4244, 0, 0x4245, 0, 0x4247, /* 0x70 */ + 0x4248, 0x4249, 0, 0x424A, 0x424C, 0, 0x4243, 0x4246, /* 0x70 */ + 0x424B, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x424D, 0x424E, 0x424F, 0, 0, /* 0x80 */ + 0x4250, 0, 0x4251, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x4252, 0x4253, 0x4254, 0x4255, 0, 0, 0x4256, /* 0x90 */ + 0x4257, 0, 0, 0, 0x4258, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x4259, 0, 0, /* 0xA0 */ + 0, 0x425A, 0x425B, 0, 0, 0x425C, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x425D, 0, 0, 0, 0x425E, /* 0xB0 */ + 0x425F, 0, 0x4260, 0x4261, 0, 0, 0, 0, /* 0xC0 */ + 0x4262, 0, 0, 0, 0x4263, 0, 0x4264, 0x4265, /* 0xC0 */ + 0, 0, 0, 0, 0x4266, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x4267, 0, 0, 0, 0x4268, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x4269, 0, 0, 0x426A, 0x426B, 0, 0x426C, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x426D, 0x423F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x426E, 0, 0x426F, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x4270, 0, /* 0x00 */ + 0, 0, 0, 0x4271, 0, 0, 0, 0, /* 0x10 */ + 0, 0x4272, 0, 0, 0x4273, 0, 0, 0, /* 0x10 */ + 0x4274, 0, 0x4275, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x4276, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x4277, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x4278, 0, 0x4279, /* 0x40 */ + 0x427A, 0, 0, 0, 0x427B, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x427C, 0x427D, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x427E, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x4321, 0, /* 0x60 */ + 0, 0, 0, 0, 0x4322, 0, 0x4323, 0, /* 0x60 */ + 0, 0, 0, 0, 0x4324, 0, 0x4325, 0, /* 0x70 */ + 0, 0, 0, 0x4326, 0, 0, 0, 0, /* 0x70 */ + 0, 0x4327, 0, 0, 0x4328, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x4329, 0x432A, /* 0x80 */ + 0, 0x432B, 0, 0x432C, 0, 0, 0x432D, 0, /* 0x90 */ + 0x432E, 0x432F, 0, 0x4330, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x4331, 0x4332, 0x4333, 0, 0, 0x4334, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x4335, 0x4336, 0x4337, 0, 0, /* 0xB0 */ + 0x4339, 0, 0x433A, 0x433B, 0, 0x433C, 0, 0, /* 0xC0 */ + 0x433D, 0x433E, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x433F, 0, 0, 0, 0, 0x4340, /* 0xD0 */ + 0, 0x4341, 0, 0, 0x4342, 0, 0, 0, /* 0xD0 */ + 0, 0x4343, 0, 0, 0, 0, 0x4344, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x4345, 0, 0x4346, 0, 0, 0, 0x4347, 0x4348, /* 0xF0 */ + 0, 0x4338 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x434A, 0, 0, 0, /* 0x10 */ + 0, 0x434B, 0, 0, 0, 0x434C, 0, 0x434D, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x434F, /* 0x20 */ + 0x434E, 0, 0, 0, 0x4350, 0x4351, 0, 0x4352, /* 0x20 */ + 0x4353, 0x4354, 0, 0x4355, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4356, 0, 0, 0, 0x4357, /* 0x30 */ + 0, 0, 0, 0, 0x4358, 0x4359, 0, 0, /* 0x40 */ + 0, 0, 0x435A, 0, 0x435B, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4349, 0, 0, 0x435C, 0, 0x435D, /* 0x50 */ + 0x435E, 0, 0, 0x435F, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x4360, 0, 0, 0x4361, 0x4362, /* 0x60 */ + 0x4363, 0x4364, 0x4365, 0, 0, 0x4366, 0, 0, /* 0x70 */ + 0, 0x4367, 0x4368, 0x4369, 0x436A, 0, 0, 0, /* 0x70 */ + 0, 0, 0x436B, 0, 0x436C, 0, 0x436D, 0, /* 0x80 */ + 0x436E, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x436F, 0, /* 0x90 */ + 0x4370, 0, 0x4371, 0, 0x4372, 0, 0, 0, /* 0x90 */ + 0, 0x4373, 0, 0x4374, 0, 0x4375, 0, 0, /* 0xA0 */ + 0, 0x4376, 0x4377, 0, 0, 0, 0x4378, 0, /* 0xA0 */ + 0, 0, 0x4379, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x437A, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x437B, 0, 0, /* 0xC0 */ + 0x437C, 0, 0, 0, 0x437D, 0, 0, 0x437E, /* 0xC0 */ + 0x4421, 0x4422, 0, 0x4423, 0, 0, 0x4424, 0, /* 0xD0 */ + 0, 0x4425, 0, 0, 0x4426, 0x4427, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x4428, 0, 0, /* 0xE0 */ + 0x4429, 0, 0x442A, 0x442B, 0x442C, 0x442D, 0, 0, /* 0xE0 */ + 0x442E, 0x442F, 0, 0, 0, 0x4430, 0x4431, 0, /* 0xF0 */ + 0, 0, 0, 0x4432, 0x4433, 0x4434 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4435, 0, /* 0x00 */ + 0, 0x4436, 0x4437, 0, 0, 0, 0, 0, /* 0x00 */ + 0x4438, 0x4439, 0, 0x443A, 0, 0, 0x443B, 0x443C, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x443D, 0, 0x443E, 0, 0x443F, 0, 0, /* 0x30 */ + 0x4440, 0, 0, 0x4441, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0x4442, 0, 0, 0x4443, 0, 0, /* 0x40 */ + 0, 0x4444, 0, 0, 0, 0, 0x4445, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x4446, /* 0x50 */ + 0, 0, 0, 0x4447, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x4448, 0x4449, 0x444A, 0x444B, 0, /* 0x60 */ + 0x444C, 0x444D, 0, 0, 0x444E, 0, 0, 0, /* 0x60 */ + 0x444F, 0x4450, 0x4451, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x4452, 0x4453, 0, 0, 0, 0x4454, /* 0x70 */ + 0x4455, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4456, 0, 0, /* 0x80 */ + 0, 0, 0x4457, 0, 0, 0, 0x4458, 0, /* 0x90 */ + 0x4459, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x445A, 0, 0, 0, 0x445B, 0x445C, 0, /* 0xA0 */ + 0x445D, 0, 0, 0x445E, 0, 0x445F, 0, 0x4460, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x4461, /* 0xB0 */ + 0x4462, 0, 0x4463, 0, 0x4464, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x4465, 0, 0, /* 0xC0 */ + 0x4466, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x4467, 0, 0, 0, 0, 0x4468, 0x4469, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x446A, 0, 0, 0x446B, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x446C, 0x446D, /* 0xE0 */ + 0, 0x446E, 0, 0x446F, 0, 0x4470, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0x4471 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4472, 0x4473, 0, 0x4474, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x4475, /* 0x00 */ + 0, 0x4476, 0, 0, 0, 0x4477, 0, 0, /* 0x10 */ + 0, 0, 0x4478, 0, 0, 0x4479, 0, 0, /* 0x10 */ + 0x447A, 0, 0, 0, 0x447B, 0, 0, 0, /* 0x20 */ + 0x447C, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x447D, 0, 0x447E, 0, 0x4521, 0, 0, 0x4522, /* 0x30 */ + 0, 0, 0, 0x4523, 0, 0, 0x4524, 0x4525, /* 0x30 */ + 0, 0, 0, 0, 0, 0x4526, 0x4527, 0, /* 0x40 */ + 0, 0x4528, 0x4529, 0, 0, 0, 0x452A, 0, /* 0x40 */ + 0x452B, 0x452C, 0x452D, 0, 0, 0x452E, 0x452F, 0, /* 0x50 */ + 0, 0, 0, 0x4530, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x4531, 0, 0, 0x4532, /* 0x60 */ + 0, 0, 0x4533, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x4534, 0, 0x4535, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4536, 0, /* 0x70 */ + 0, 0x4537, 0, 0x4538, 0, 0, 0x4539, 0x453A, /* 0x80 */ + 0, 0x453B, 0, 0x453C, 0, 0, 0, 0, /* 0x80 */ + 0, 0x453D, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x453E, 0, 0x453F, 0x4540, 0x4541, /* 0x90 */ + 0, 0, 0, 0, 0, 0x4542, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x4543, 0, 0, 0, 0x4544, /* 0xA0 */ + 0x4545, 0x4546, 0, 0, 0x4547, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x4548, 0x4549, 0x454A, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x454B, 0, /* 0xC0 */ + 0x454D, 0x454C, 0, 0, 0x454E, 0, 0, 0, /* 0xC0 */ + 0x454F, 0, 0, 0, 0x4550, 0x4551, 0x4552, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x4553, 0x4554, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x4555, 0, 0, 0x4556, /* 0xE0 */ + 0, 0, 0, 0, 0x4557, 0, 0, 0, /* 0xE0 */ + 0x4558, 0x4559, 0x455A, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x455B, 0x455C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x455D, 0x455E, 0, 0, 0x455F, 0x4560, /* 0x00 */ + 0, 0x4561, 0, 0, 0, 0, 0, 0x4562, /* 0x00 */ + 0x4563, 0x4564, 0, 0, 0, 0, 0, 0x4565, /* 0x10 */ + 0, 0, 0, 0x4566, 0, 0, 0x4567, 0, /* 0x10 */ + 0, 0, 0, 0, 0x4568, 0, 0, 0, /* 0x20 */ + 0x4569, 0, 0, 0x456A, 0x456B, 0, 0, 0x456C, /* 0x20 */ + 0, 0, 0, 0, 0, 0x456D, 0x456E, 0, /* 0x30 */ + 0, 0, 0, 0x456F, 0, 0, 0, 0x4570, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x4571, 0, /* 0x40 */ + 0, 0, 0x4572, 0, 0, 0x4573, 0, 0, /* 0x40 */ + 0, 0, 0x4574, 0, 0, 0, 0x4575, 0, /* 0x50 */ + 0x4576, 0, 0, 0, 0, 0x4577, 0, 0, /* 0x50 */ + 0x4578, 0, 0, 0, 0, 0, 0, 0x4579, /* 0x60 */ + 0, 0, 0, 0x457A, 0, 0, 0x457B, 0, /* 0x60 */ + 0x457C, 0, 0, 0, 0, 0x457D, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x457E, 0x4621, 0, /* 0x70 */ + 0, 0, 0x4622, 0, 0, 0x4623, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0x4624, /* 0x90 */ + 0, 0, 0, 0x4625, 0, 0, 0, 0x4626, /* 0x90 */ + 0x4627, 0, 0x4628, 0x4629, 0, 0, 0, 0, /* 0xA0 */ + 0x462A, 0x462B, 0, 0, 0x462C, 0x462D, 0x462E, 0, /* 0xA0 */ + 0x462F, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x4630, 0x4631, 0, 0, 0, 0x4632, 0x4633, 0, /* 0xB0 */ + 0, 0, 0, 0x4634, 0x4635, 0, 0, 0, /* 0xC0 */ + 0, 0x4636, 0, 0, 0x4637, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x4638, 0, /* 0xD0 */ + 0, 0, 0x4639, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x463A, 0, 0x463B, 0, 0, 0x463C, 0x463D, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x463E, 0, /* 0xE0 */ + 0, 0x463F, 0, 0, 0, 0, 0, 0x4640, /* 0xF0 */ + 0, 0x4641, 0, 0, 0, 0, 0, 0x4642 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4643, 0, 0x4644, 0x4645, 0, 0, /* 0x00 */ + 0, 0x4646, 0, 0, 0, 0x4647, 0x4648, 0, /* 0x00 */ + 0x4649, 0, 0x464A, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x464B, 0, 0, 0, 0, 0, 0x464C, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x464D, 0x464E, /* 0x20 */ + 0x464F, 0, 0, 0, 0x4650, 0, 0x4651, 0, /* 0x20 */ + 0, 0, 0, 0x4652, 0, 0x4653, 0x4654, 0, /* 0x30 */ + 0, 0, 0x4655, 0x4656, 0, 0, 0, 0x4657, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x4658, 0x4659, 0, 0x465A, 0, 0x465B, /* 0x40 */ + 0, 0, 0x465C, 0, 0x465D, 0, 0, 0, /* 0x50 */ + 0, 0x465E, 0, 0x465F, 0x4660, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x4736, /* 0x60 */ + 0, 0, 0, 0x4661, 0, 0x4662, 0, 0x4663, /* 0x60 */ + 0, 0, 0, 0, 0x4664, 0, 0x4665, 0, /* 0x70 */ + 0x4666, 0x4667, 0, 0x4668, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x4669, 0x466A, 0x466B, /* 0x80 */ + 0, 0x466C, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x466D, 0x466E, 0, 0x466F, /* 0x90 */ + 0x4670, 0, 0, 0, 0x4671, 0, 0, 0x4672, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x4673, 0, 0x4674, 0, 0x4675, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x4676, 0, 0, 0, 0x4677, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x4678, 0, 0x4679, /* 0xC0 */ + 0x467A, 0x467B, 0x467C, 0, 0x467D, 0, 0x467E, 0, /* 0xD0 */ + 0, 0, 0x4721, 0, 0x4722, 0, 0, 0, /* 0xD0 */ + 0x4723, 0, 0, 0, 0, 0, 0, 0x4724, /* 0xE0 */ + 0, 0x4725, 0, 0x4726, 0x4727, 0, 0x4728, 0, /* 0xE0 */ + 0, 0, 0x4729, 0, 0x472A /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x472B, 0, 0, 0x472C, /* 0x00 */ + 0, 0, 0x472D, 0, 0, 0, 0x472E, 0x472F, /* 0x00 */ + 0, 0x4730, 0, 0x4731, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x4732, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x4733, 0x4734, /* 0x20 */ + 0x4735, 0, 0, 0, 0, 0, 0x4737, 0x4738, /* 0x20 */ + 0, 0x4739, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x473A, 0, 0, 0x473B, 0, 0, 0x473C, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x473D, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x473E, 0x473F, /* 0x50 */ + 0, 0x4740, 0, 0, 0, 0x4741, 0, 0x4742, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x4743, /* 0x60 */ + 0x4744, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x4745, 0, 0, 0, /* 0x70 */ + 0, 0, 0x4746, 0, 0, 0, 0, 0x4747, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x4748, 0x4749, 0, 0x474A, 0, 0x474B, 0x474C, /* 0x90 */ + 0x474D, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x474E, 0, 0x474F, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x4750, 0, 0, 0x4751, /* 0xB0 */ + 0, 0x4752, 0, 0, 0, 0x4753, 0, 0x4754, /* 0xB0 */ + 0, 0, 0, 0, 0x4755, 0, 0, 0, /* 0xC0 */ + 0x4756, 0, 0x4757, 0, 0, 0, 0x4758, 0x4759, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0x475A, 0, /* 0xD0 */ + 0, 0, 0, 0x475B, 0, 0x475C, 0, 0x475D, /* 0xD0 */ + 0x475E, 0, 0x475F, 0, 0, 0x4760, 0, 0, /* 0xE0 */ + 0, 0x4761, 0, 0, 0, 0, 0, 0x4762, /* 0xE0 */ + 0x4763, 0, 0, 0, 0x4764, 0, 0x4765, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x4766 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4767, 0, 0, 0, 0x4768, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x4769, 0, /* 0x10 */ + 0, 0, 0x476A, 0, 0, 0, 0, 0x476B, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x476C, 0, 0, 0, 0x476D, 0, /* 0x30 */ + 0, 0x476E, 0, 0x476F, 0x4770, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x4771, 0x4772, 0, 0, /* 0x40 */ + 0x4773, 0x4774, 0, 0x4775, 0, 0, 0, 0x4776, /* 0x40 */ + 0, 0x4777, 0x4778, 0x4779, 0x477A, 0, 0, 0x477B, /* 0x50 */ + 0, 0, 0, 0, 0x477C, 0x477D, 0x477E, 0, /* 0x50 */ + 0, 0, 0x4821, 0x4822, 0, 0, 0, 0, /* 0x60 */ + 0x4823, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x4824, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x4825, 0, 0x4826, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4827, 0, 0, /* 0x80 */ + 0, 0, 0, 0x4828, 0, 0, 0, 0, /* 0x90 */ + 0, 0x4829, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x482A, 0, 0, 0, 0, 0, 0, 0x482B, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x482C, 0x482D, 0, /* 0xA0 */ + 0, 0x482E, 0, 0x482F, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x4830, 0, 0, 0, 0x4831, /* 0xB0 */ + 0x4832, 0x4833, 0, 0x4834, 0, 0, 0, 0x4835, /* 0xC0 */ + 0x4836, 0, 0x4837, 0, 0, 0x4838, 0x4839, 0x483A, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x483B, 0, 0x483C, 0x483D, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x483E, 0, 0x483F, 0, 0x4840 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4841, 0, 0, 0, /* 0x00 */ + 0x4842, 0, 0x4843, 0, 0x4844, 0x4845, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x4846, 0, /* 0x10 */ + 0x4847, 0, 0x4848, 0x4849, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x484A, 0, /* 0x20 */ + 0, 0x484B, 0x484C, 0, 0, 0x4853, 0, 0x484D, /* 0x20 */ + 0x484E, 0, 0, 0x484F, 0, 0, 0x4850, 0, /* 0x30 */ + 0, 0, 0, 0x4851, 0x4852, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x4854, /* 0x40 */ + 0, 0x4855, 0x4856, 0x4857, 0, 0, 0, 0x4858, /* 0x50 */ + 0, 0x4859, 0x485A, 0, 0, 0x485B, 0x485C, 0, /* 0x50 */ + 0, 0x485D, 0x485E, 0, 0, 0, 0, 0, /* 0x60 */ + 0x485F, 0, 0, 0, 0x4860, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x4861, 0x4862, 0, /* 0x70 */ + 0, 0, 0, 0x4863, 0, 0, 0, 0x4864, /* 0x80 */ + 0x4865, 0, 0, 0x4866, 0x4867, 0x4868, 0, 0, /* 0x80 */ + 0x4869, 0, 0x486A, 0x486B, 0x486C, 0, 0x486D, 0, /* 0x90 */ + 0, 0, 0x486E, 0, 0, 0, 0, 0x486F, /* 0x90 */ + 0x4870, 0, 0, 0, 0, 0x4871, 0x4872, 0x4873, /* 0xA0 */ + 0x4874, 0, 0, 0, 0, 0, 0x4875, 0x4876, /* 0xA0 */ + 0x4877, 0, 0, 0, 0, 0x4878, 0x4879, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x487A, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x487B, 0, 0x487C, /* 0xC0 */ + 0x487D, 0, 0x487E, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x4921, 0, 0, 0, 0x4922, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x4923, 0x4924, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x4925, 0, 0, 0, 0, 0x4926, 0, 0, /* 0xF0 */ + 0, 0x4927, 0, 0, 0x4928, 0x4929 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x492A, 0, 0, 0, 0, 0x492B, 0x492C, 0x492D, /* 0x00 */ + 0, 0, 0, 0, 0, 0x492E, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x492F, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x4930, 0, 0, 0x4931, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x4932, /* 0x20 */ + 0, 0, 0, 0, 0x4933, 0, 0, 0x4934, /* 0x30 */ + 0, 0x4935, 0, 0, 0x4936, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4937, 0x4938, 0, 0, 0, /* 0x40 */ + 0x4939, 0x493A, 0x493B, 0x493C, 0, 0, 0x4941, 0, /* 0x40 */ + 0, 0, 0, 0, 0x493D, 0x493E, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x493F, 0x4940, 0, /* 0x50 */ + 0, 0, 0, 0, 0x4942, 0x4943, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x4944, 0, 0x4945, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x4946, 0x4947, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x4948, 0, /* 0x70 */ + 0, 0x4949, 0, 0, 0, 0x494A, 0x494B, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x494C, 0x494D, 0x494E, 0x494F, /* 0x90 */ + 0x4950, 0, 0, 0x4951, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x4952, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x4953, 0, 0, 0, 0, /* 0xA0 */ + 0x4954, 0x4955, 0, 0, 0x4956, 0, 0, 0x4957, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x4958, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x4959, 0, 0x495A, 0x495B, 0x495C, 0x495D, 0, /* 0xD0 */ + 0x495E, 0, 0, 0, 0x495F, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x4960, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x4961 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, /* 0x00 */ + 0, 0, 0, 0x4967, 0x4968, 0, 0, 0x4969, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x496A, 0, /* 0x10 */ + 0x496B, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x496C, 0, 0x496D, 0, 0x496E, /* 0x20 */ + 0x496F, 0x4970, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x4971, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x4972, 0, 0, 0, 0x4973, 0x4974, 0x4975, /* 0x40 */ + 0, 0, 0x4976, 0x4977, 0, 0, 0, 0, /* 0x40 */ + 0x4978, 0, 0x4979, 0, 0, 0, 0, 0x497A, /* 0x50 */ + 0, 0, 0x497B, 0, 0x497C, 0, 0x497D, 0, /* 0x50 */ + 0x497E, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x4A21, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x4A22, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x4A23, 0, 0, 0, 0, 0x4A24, 0, 0x4A25, /* 0x80 */ + 0, 0, 0, 0, 0x4A26, 0, 0, 0, /* 0x80 */ + 0, 0, 0x4A27, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0x4A28, 0x4A29, 0, 0, 0, 0, /* 0x90 */ + 0x4A2A, 0, 0x4A2B, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0x4A2C, /* 0xA0 */ + 0x4A2D, 0, 0x4A2E, 0x4A2F, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x4A30, 0, 0, 0, 0, 0x4A31, /* 0xB0 */ + 0x4A32, 0x4A33, 0, 0, 0x4A34, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x4A35, 0x4A36, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x4A37, 0, 0, 0x4A38, 0, /* 0xD0 */ + 0, 0x4A39, 0x4A3A, 0, 0x4A3B, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x4A3C, 0, 0, 0, 0, 0, 0x4A3D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4A3E, 0, 0, 0, 0, 0, 0, 0x4A3F, /* 0x00 */ + 0x4A40, 0x4A41, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x4A42, 0, 0, 0, 0x4A43, /* 0x10 */ + 0, 0, 0x4A44, 0, 0, 0x4A45, 0, 0x4A46, /* 0x10 */ + 0, 0, 0, 0, 0x4A47, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x4A48, 0, 0, 0, 0x4A49, /* 0x20 */ + 0, 0, 0, 0, 0x4A4A, 0, 0, 0, /* 0x30 */ + 0x4A4B, 0x4A4C, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x4A4D, 0x4A4E, 0x4A4F, 0, 0x4A50, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x4A51, 0x4A52, /* 0x40 */ + 0x4A53, 0, 0, 0x4A54, 0, 0x4A55, 0x4A56, 0, /* 0x50 */ + 0, 0, 0x4A57, 0, 0x4A58, 0, 0x4A59, 0, /* 0x50 */ + 0x4A5A, 0, 0, 0x4A5B, 0, 0, 0, 0, /* 0x60 */ + 0x4A5C, 0, 0, 0x4A5D, 0, 0, 0x4A5E, 0x4A5F, /* 0x60 */ + 0, 0x4A60, 0, 0, 0, 0, 0, 0x4A61, /* 0x70 */ + 0x4A62, 0, 0, 0x4A63, 0x4A64, 0, 0, 0x4A65, /* 0x70 */ + 0, 0, 0, 0, 0x4A66, 0, 0, 0, /* 0x80 */ + 0, 0x4A67, 0, 0, 0, 0x4A68, 0x4A69, 0, /* 0x80 */ + 0, 0, 0, 0x4A6A, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x4A6B, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x4A6C, 0, 0, 0, 0, 0x4A6D, 0x4A6E, 0, /* 0xA0 */ + 0, 0x4A6F, 0, 0, 0x4A70, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x4A71, 0, /* 0xB0 */ + 0, 0x4A72, 0, 0, 0, 0, 0, 0x4A73, /* 0xC0 */ + 0, 0x4A74, 0, 0, 0x4A75, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x4A76, 0x4A77, 0, /* 0xD0 */ + 0x4A78, 0, 0, 0, 0, 0, 0, 0x4A79, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x4A7A, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x4A7B, 0x4A7C, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x4A7D, 0x4A7E, 0, 0, 0x4B21 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4B22, 0, 0x4B23, 0x4B24, 0, 0x4B25, /* 0x00 */ + 0, 0, 0, 0x4B26, 0, 0x4B27, 0, 0, /* 0x00 */ + 0, 0, 0x4B28, 0x4B29, 0, 0, 0, 0, /* 0x10 */ + 0x4B2A, 0x4B2B, 0, 0, 0, 0, 0x4B2C, 0, /* 0x10 */ + 0, 0, 0x4B2D, 0, 0x4B2E, 0, 0, 0x4B2F, /* 0x20 */ + 0x4B30, 0, 0, 0, 0x4B31, 0, 0, 0, /* 0x20 */ + 0, 0x4B32, 0x4B33, 0, 0, 0x4B34, 0, 0, /* 0x30 */ + 0, 0, 0x4B35, 0x4B36, 0, 0x4B37, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4B38, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x4B39, 0, 0, /* 0x40 */ + 0x4B3A, 0, 0x4B3B, 0, 0, 0, 0x4B3C, 0, /* 0x50 */ + 0x4B3D, 0, 0, 0, 0, 0x4B3E, 0x4B3F, 0x4B40, /* 0x50 */ + 0x4B41, 0, 0, 0, 0, 0, 0x4B42, 0x4B43, /* 0x60 */ + 0, 0x4B44, 0, 0x4B45, 0x4B46, 0, 0x4B47, 0x4B48, /* 0x60 */ + 0, 0x4B49, 0, 0, 0, 0, 0, 0x4B4A, /* 0x70 */ + 0, 0x4B4B, 0, 0, 0x4B4C, 0, 0, 0, /* 0x70 */ + 0x4B4D, 0x4B4E, 0, 0x4B4F, 0, 0x4B50, 0x4B51, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x4B52, 0, /* 0x80 */ + 0x4B53, 0, 0, 0x4B54, 0, 0x4B55, 0, 0x4B56, /* 0x90 */ + 0x4B57, 0, 0, 0, 0x4B58, 0, 0x4B59, 0x4B5A, /* 0x90 */ + 0x4B5B, 0, 0x4B5C, 0, 0, 0x4B5D, 0x4B5E, 0, /* 0xA0 */ + 0, 0, 0x4B5F, 0x4B60, 0, 0x4B61, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x4B62, 0, 0x4B63, /* 0xB0 */ + 0, 0x4B64, 0, 0, 0x4B65, 0x4B66, 0, 0x4B67, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x4B68, 0x4B69, 0, /* 0xC0 */ + 0, 0x4B6A, 0, 0x4B6B, 0x4B6C, 0, 0, 0x4B6D, /* 0xC0 */ + 0, 0, 0x4B6E, 0x4B6F, 0, 0, 0x4B70, 0, /* 0xD0 */ + 0, 0x4B71, 0, 0, 0, 0x4B72, 0, 0, /* 0xD0 */ + 0, 0x4B73, 0, 0x4B74, 0, 0, 0x4B75, 0x4B76, /* 0xE0 */ + 0, 0x4B77, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x4B78, 0x4B79, 0, 0x4B7A, /* 0xF0 */ + 0, 0x4B7B, 0x4B7C, 0x4B7D, 0, 0x4B7E, 0, 0x4C21 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4C22, 0x4C23, 0, 0, 0x4C24, 0, 0, 0x4C25, /* 0x00 */ + 0, 0, 0x4C26, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x4C27, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x4C28, 0x4C29, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x4C2A, 0, 0x4C2B, 0, /* 0x20 */ + 0x4C2C, 0x4C2D, 0x4C2E, 0x4C2F, 0x4C30, 0x4C31, 0x4C32, 0x4C33, /* 0x20 */ + 0x4C34, 0x4C35, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x4C36, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0x4C37, 0, 0, 0x4C38, 0x4C39, 0, 0x4C3A, 0x4C3B, /* 0x40 */ + 0, 0, 0, 0x4C3C, 0, 0x4C3D, 0, 0, /* 0x40 */ + 0, 0x4C3E, 0x4C3F, 0, 0, 0, 0, 0x4C40, /* 0x50 */ + 0, 0, 0, 0, 0, 0x4C41, 0, 0, /* 0x50 */ + 0, 0, 0x4C42, 0, 0, 0, 0x4C43, 0x4C44, /* 0x60 */ + 0x4C45, 0, 0, 0x4C46, 0, 0x4C47, 0x4C48, 0, /* 0x60 */ + 0, 0x4C49, 0x4C4A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x4C4B, 0x4C4C, 0, 0, 0, 0x4C4D, 0x4C4E, 0x4C4F, /* 0x80 */ + 0, 0x4C50, 0, 0, 0, 0, 0, 0x4C51, /* 0x80 */ + 0x4C52, 0x4C53, 0x4C54, 0, 0, 0, 0, 0, /* 0x90 */ + 0x4C55, 0x4C56, 0x4C57, 0, 0x4C58, 0, 0, 0x4C59, /* 0x90 */ + 0x4C5A, 0x4C5B, 0, 0x4C5C, 0, 0, 0x4C5D, 0, /* 0xA0 */ + 0x4C5E, 0x4C5F, 0x4C60, 0x4C61, 0, 0, 0x4C62, 0x4C63, /* 0xA0 */ + 0, 0x4C64, 0x4C65, 0, 0, 0x4C66, 0, 0, /* 0xB0 */ + 0, 0x4C67, 0, 0x4C68, 0, 0, 0, 0x4C69, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x4C6A, 0x4C6B, 0, 0, 0x4C6C, 0, 0, 0, /* 0xC0 */ + 0x4C6D, 0, 0, 0x4C6E, 0, 0, 0, 0, /* 0xD0 */ + 0x4C6F, 0, 0x4C70, 0x4C71, 0, 0, 0x4C72, 0x4C73, /* 0xD0 */ + 0, 0, 0, 0, 0x4C74, 0, 0, 0, /* 0xE0 */ + 0x4C75, 0, 0x4C76, 0x4C77, 0, 0, 0, 0x4C78, /* 0xE0 */ + 0, 0, 0, 0, 0x4C79, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x4C7A, 0x4C7B, 0x4C7C, 0, 0, 0x4C7D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4C7E, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x4D21, 0, 0, 0, 0x4D22, 0x4D23, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x4D24, 0x4D25, 0, 0, 0x4D26, 0, 0, 0x4D27, /* 0x20 */ + 0, 0x4D28, 0x4D29, 0, 0, 0, 0, 0x4D2A, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x4D2B, 0, /* 0x30 */ + 0, 0x4D2C, 0, 0, 0, 0x4D2D, 0x4D2E, 0x4D2F, /* 0x30 */ + 0x4D30, 0, 0, 0x4D31, 0, 0, 0, 0x4D32, /* 0x40 */ + 0x4D33, 0, 0, 0, 0, 0, 0x4D34, 0, /* 0x40 */ + 0x4D35, 0, 0x4D36, 0, 0, 0, 0, 0x4D37, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0x4D38, 0x4D39, /* 0x50 */ + 0, 0x4D3A, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x4D3B, /* 0x60 */ + 0, 0x4D3C, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x4D3D, 0x4D3E, 0x4D3F, 0x4D40, 0x4D41, 0x4D42, 0, /* 0x70 */ + 0, 0x4D43, 0, 0, 0, 0x4D44, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x4D45, 0, 0x4D46, 0x4D47, 0, 0x4D48, 0, 0, /* 0x90 */ + 0, 0x4D49, 0, 0, 0x4D4A, 0, 0, 0, /* 0x90 */ + 0, 0, 0x4D4B, 0, 0x4D4C, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x4D4D, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x4D4E, 0, 0, 0, 0, 0x4D4F, /* 0xB0 */ + 0x4D50, 0x4D51, 0, 0, 0x4D52, 0, 0x4D53, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x4D54, 0, 0x4D55, 0x4D56, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x4D57, /* 0xD0 */ + 0, 0, 0, 0, 0x4D58, 0, 0, 0x4D59, /* 0xD0 */ + 0x4D5A, 0x4D5B, 0, 0, 0x4D5C, 0, 0, 0x4D5D, /* 0xE0 */ + 0, 0, 0, 0, 0x4D5E, 0, 0x4D5F, 0x4D60, /* 0xE0 */ + 0, 0x4D61, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x4D62 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4D63, 0, 0x4D64, 0x4D65, 0x4D66, 0, 0, 0x4D67, /* 0x00 */ + 0x4D68, 0, 0x4D69, 0, 0x4D6A, 0, 0, 0x4D6B, /* 0x00 */ + 0, 0, 0x4D6C, 0x4D6D, 0, 0x4D6E, 0x4D6F, 0, /* 0x10 */ + 0, 0x4D70, 0, 0x4D71, 0x4D72, 0x4D73, 0x4D74, 0, /* 0x10 */ + 0, 0, 0, 0x4D75, 0, 0x4D76, 0x4D77, 0, /* 0x20 */ + 0, 0x4D78, 0, 0, 0, 0x4D79, 0, 0, /* 0x20 */ + 0, 0, 0x4D7A, 0x4D7B, 0, 0x4D7C, 0, 0, /* 0x30 */ + 0x4D7D, 0x4D7E, 0x4E21, 0, 0x4E22, 0, 0, 0, /* 0x30 */ + 0x4E24, 0x4E25, 0, 0x4E26, 0x4E27, 0x4E28, 0, 0, /* 0x40 */ + 0, 0x4E29, 0x4E23, 0x4E2A, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x4E2B, 0, 0, /* 0x50 */ + 0, 0x4E2C, 0, 0, 0, 0, 0, 0x4E2D, /* 0x50 */ + 0, 0, 0, 0, 0x4E2E, 0x4E2F, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x4E30, 0x4E31, 0x4E32, /* 0x60 */ + 0, 0x4E33, 0, 0, 0x4E34, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x4E35, 0, 0, 0, 0x4E36, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x4E37, 0x4E38, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x4E39, 0, 0, /* 0x90 */ + 0, 0, 0, 0x4E3A, 0x4E3B, 0x4E3C, 0, 0x4E3D, /* 0x90 */ + 0x4E3E, 0, 0x4E3F, 0x4E40, 0x4E41, 0x4E42, 0x4E43, 0x4E44, /* 0xA0 */ + 0x4E45, 0, 0x4E46, 0, 0, 0x4E47, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x4E48, 0, 0, /* 0xB0 */ + 0, 0x4E49, 0, 0, 0, 0x4E4A, 0, 0, /* 0xC0 */ + 0, 0x4E4B, 0, 0x4E4C, 0x4E4D, 0, 0x4E4E, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x4E4F, 0, 0, 0, /* 0xD0 */ + 0, 0x4E50, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x4E51, 0, 0, 0, 0, 0, 0x4E52, 0, /* 0xE0 */ + 0x4E53, 0, 0, 0, 0x4E54, 0, 0, 0, /* 0xE0 */ + 0x4E55, 0x4E56, 0, 0, 0, 0, 0x4E57, 0, /* 0xF0 */ + 0, 0x4E58, 0, 0, 0x4E59 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E5A, 0, 0, 0, 0, 0, 0x4E5B, 0, /* 0x00 */ + 0, 0, 0x4E5C, 0, 0, 0, 0x4E5D, 0, /* 0x00 */ + 0, 0, 0x4E5E, 0, 0x4E5F, 0x4E60, 0, 0x4E61, /* 0x10 */ + 0, 0x4E62, 0x4E63, 0, 0x4E64, 0, 0, 0, /* 0x10 */ + 0, 0, 0x4E65, 0, 0, 0, 0, 0, /* 0x20 */ + 0x4E66, 0, 0, 0, 0, 0x4E67, 0x4E68, 0x4E69, /* 0x20 */ + 0, 0, 0, 0, 0x4E6A, 0x4E6B, 0x4E6C, 0, /* 0x30 */ + 0, 0x4E6D, 0, 0, 0, 0x4E6E, 0x4E6F, 0, /* 0x30 */ + 0, 0, 0x4E70, 0, 0, 0x4E71, 0x4E72, 0, /* 0x40 */ + 0, 0, 0x4E73, 0, 0, 0x4E74, 0x4E75, 0x4E76, /* 0x40 */ + 0, 0, 0x4E77, 0, 0, 0, 0x4E78, 0x4E79, /* 0x50 */ + 0, 0, 0, 0, 0x4E7A, 0, 0x4E7B, 0x4E7C, /* 0x50 */ + 0x4E7D, 0, 0x4E7E, 0, 0x4F21, 0, 0, 0x4F22, /* 0x60 */ + 0, 0, 0x4F23, 0, 0x4F24, 0, 0, 0, /* 0x60 */ + 0x4F25, 0, 0x4F26, 0x4F27, 0x4F28, 0, 0, 0, /* 0x70 */ + 0, 0, 0x4F29, 0, 0, 0x4F2A, 0, 0, /* 0x70 */ + 0x4F2B, 0, 0, 0, 0x4F2C, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x4F2D, 0x4F2E, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0x4F2F, 0x4F30, 0x4F31, 0, /* 0x90 */ + 0, 0, 0x4F32, 0, 0, 0, 0, 0x4F33, /* 0x90 */ + 0, 0, 0x4F34, 0, 0, 0, 0, 0x4F35, /* 0xA0 */ + 0, 0, 0x4F36, 0, 0, 0, 0x4F37, 0x4F38, /* 0xA0 */ + 0, 0x4F39, 0, 0, 0, 0x4F3A, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x4F3B, 0, /* 0xB0 */ + 0, 0, 0, 0x4F3C, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x4F3D, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x4F3E, 0x4F3F, 0, 0, 0x4F40, 0, 0, /* 0xD0 */ + 0, 0x4F41, 0, 0, 0, 0, 0x4F42, 0x4F43, /* 0xD0 */ + 0x4F44, 0, 0, 0, 0x4F45, 0, 0x4F46, 0, /* 0xE0 */ + 0, 0, 0x4F47, 0, 0x4F48, 0, 0, 0, /* 0xE0 */ + 0x4F49, 0x4F4A, 0, 0, 0x4F4B, 0, 0, 0, /* 0xF0 */ + 0x4F4C, 0, 0, 0x4F4D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F4E, 0x4F4F, 0, /* 0x00 */ + 0, 0x4F50, 0, 0, 0, 0x4F51, 0x4F52, 0, /* 0x00 */ + 0, 0x4F53, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x4F54, 0, 0, /* 0x10 */ + 0, 0x4F55, 0x4F56, 0x4F57, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x4F58, 0x4F59, 0, /* 0x20 */ + 0x4F5A, 0, 0, 0, 0, 0x4F5B, 0, 0x4F5C, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x4F5D, 0x4F5E, 0, 0, 0x4F5F, /* 0x40 */ + 0x4F60, 0, 0, 0, 0x4F61, 0, 0x4F62, 0, /* 0x40 */ + 0, 0, 0x4F63, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0x4F64, 0, 0x4F65, 0, /* 0x50 */ + 0x4F66, 0x4F67, 0, 0x4F68, 0x4F69, 0, 0, 0, /* 0x60 */ + 0x4F6A, 0, 0x4F6B, 0, 0, 0, 0x4F6C, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x4F6D, 0, 0, 0, 0x4F6E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x4F6F, 0, 0, 0, 0, 0x4F70, /* 0x80 */ + 0, 0, 0, 0, 0x4F71, 0, 0, 0, /* 0x90 */ + 0x4F72, 0, 0, 0, 0, 0x4F74, 0x4F75, 0x4F76, /* 0x90 */ + 0, 0x4F73, 0, 0, 0x4F77, 0, 0, 0, /* 0xA0 */ + 0x4F78, 0, 0, 0, 0x4F79, 0x4F7A, 0, 0, /* 0xA0 */ + 0x4F7B, 0x4F7C, 0x4F7D, 0x4F7E, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x5021, 0, 0x5022, 0, 0x5023, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5024, /* 0xC0 */ + 0x5025, 0x5026, 0, 0, 0x5027, 0, 0x5028, 0, /* 0xC0 */ + 0, 0, 0x5029, 0x502A, 0, 0x502B, 0x502C, 0, /* 0xD0 */ + 0, 0, 0, 0x502E, 0, 0, 0, 0x502F, /* 0xD0 */ + 0x5030, 0x5031, 0, 0, 0x502D, 0, 0x5032, 0, /* 0xE0 */ + 0, 0, 0x5033, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x5034, 0x5035, 0, 0, 0x5037, 0x5038, /* 0xF0 */ + 0, 0, 0x5039, 0x503A, 0, 0, 0, 0x503B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5036, 0, 0, 0, 0, 0, 0x503C, 0, /* 0x00 */ + 0, 0, 0, 0, 0x503D, 0, 0, 0, /* 0x00 */ + 0x503E, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x503F, 0, 0x5040, 0, 0x5041, 0x5042, /* 0x10 */ + 0x5043, 0, 0, 0, 0, 0x5044, 0, 0x5045, /* 0x20 */ + 0, 0x5046, 0, 0, 0, 0x5047, 0, 0, /* 0x20 */ + 0, 0x5048, 0, 0, 0x5049, 0x504A, 0, 0, /* 0x30 */ + 0, 0, 0, 0x504B, 0, 0x504C, 0, 0x504D, /* 0x30 */ + 0, 0, 0, 0, 0x504E, 0x504F, 0x5050, 0, /* 0x40 */ + 0, 0, 0x5051, 0x5052, 0, 0, 0, 0x5053, /* 0x40 */ + 0, 0x5054, 0, 0, 0x5055, 0, 0, 0, /* 0x50 */ + 0x5056, 0, 0, 0x5057, 0x5058, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x5059, /* 0x60 */ + 0, 0x505A, 0, 0x505B, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0x505C, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x505D, 0, 0x505E, 0x505F, 0, 0x5060, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x5061, 0x5062, 0, 0, 0, /* 0x80 */ + 0, 0x5063, 0, 0x5064, 0x5065, 0x5066, 0x5067, 0, /* 0x90 */ + 0x5068, 0, 0, 0x5069, 0x506A, 0, 0, 0, /* 0x90 */ + 0, 0x506B, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x506C, 0x506D, 0, 0x506E, 0, 0, 0, 0x506F, /* 0xA0 */ + 0, 0x5070, 0, 0, 0x5071, 0, 0, 0, /* 0xB0 */ + 0x5072, 0, 0, 0x5073, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x5074, 0, 0x5075, 0, 0, 0x5076, /* 0xC0 */ + 0x5077, 0, 0x5078, 0, 0, 0, 0, 0x5079, /* 0xC0 */ + 0, 0, 0, 0, 0x507A, 0, 0x507B, 0, /* 0xD0 */ + 0, 0, 0x507C, 0, 0, 0x507D, 0x507E, 0, /* 0xD0 */ + 0x5121, 0, 0x5122, 0, 0, 0x5123, 0, 0, /* 0xE0 */ + 0, 0, 0x5124, 0x5125, 0, 0x5126, 0, 0, /* 0xE0 */ + 0, 0x5127, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0x5128, 0, 0, 0, 0x5129 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x512A, 0x512B, 0, 0, 0, 0x512C, /* 0x00 */ + 0, 0x512D, 0x512E, 0, 0x512F, 0, 0, 0, /* 0x00 */ + 0, 0x5130, 0, 0, 0, 0x5131, 0, 0, /* 0x10 */ + 0, 0, 0, 0x5132, 0, 0, 0x5133, 0, /* 0x10 */ + 0, 0x5134, 0, 0, 0, 0, 0, 0x5135, /* 0x20 */ + 0, 0, 0, 0x5136, 0, 0x5137, 0, 0x5138, /* 0x20 */ + 0x5139, 0, 0, 0, 0x513A, 0x513B, 0, 0, /* 0x30 */ + 0x513C, 0x513D, 0x513E, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x513F, 0x5140, 0, 0x5141, /* 0x40 */ + 0x5142, 0, 0, 0, 0x5143, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x5144, 0x5145, 0, /* 0x50 */ + 0, 0x5146, 0, 0, 0x5147, 0x5148, 0, 0x5149, /* 0x50 */ + 0x514A, 0, 0, 0, 0, 0x514B, 0, 0x514C, /* 0x60 */ + 0, 0, 0x514D, 0, 0, 0x514E, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x514F, 0, 0, /* 0x70 */ + 0x5150, 0, 0, 0, 0, 0, 0x5151, 0, /* 0x70 */ + 0x5152, 0, 0x5153, 0, 0, 0x5154, 0x5155, 0, /* 0x80 */ + 0, 0, 0x5156, 0x5157, 0, 0, 0, 0, /* 0x80 */ + 0x5158, 0x5159, 0, 0, 0x515A, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x515B, 0, /* 0x90 */ + 0x515C, 0, 0, 0x515D, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x515E, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x515F, 0, 0x5160, 0, 0, /* 0xB0 */ + 0, 0x5161, 0, 0x5162, 0x5163, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x5164, 0, /* 0xC0 */ + 0, 0x5165, 0, 0, 0x5166, 0, 0x5167, 0, /* 0xC0 */ + 0, 0x5168, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x5169, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x516A, 0x516B, 0, 0x516C, 0x516D, 0, 0, 0, /* 0xE0 */ + 0, 0x516E, 0, 0, 0x516F, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0x5170, 0, 0x5171, 0x5172 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5173, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0x5174, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x5175, /* 0x10 */ + 0, 0, 0, 0x5176, 0, 0, 0, 0x5177, /* 0x20 */ + 0, 0x5178, 0x5179, 0x517A, 0, 0x517B, 0x517C, 0x517D, /* 0x20 */ + 0x517E, 0x5221, 0, 0, 0x5222, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x5223, 0, 0x5224, /* 0x30 */ + 0x5225, 0x5226, 0, 0, 0, 0, 0, 0x5227, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x5228, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x5229, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x522A, 0, 0, 0, 0x522B, 0, 0x522C, 0, /* 0x60 */ + 0, 0x522D, 0x522E, 0, 0, 0x522F, 0, 0x5230, /* 0x60 */ + 0, 0, 0x5231, 0x5232, 0, 0, 0, 0x5233, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0x5234, 0, 0, 0, /* 0x80 */ + 0, 0x5235, 0, 0, 0, 0, 0x5236, 0, /* 0x80 */ + 0x5237, 0x5238, 0, 0, 0, 0, 0x5239, 0, /* 0x90 */ + 0, 0, 0, 0x523A, 0, 0, 0x523B, 0, /* 0x90 */ + 0x523C, 0, 0, 0, 0, 0x523D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x523E, 0, 0, 0x523F, /* 0xA0 */ + 0x5240, 0, 0x5241, 0, 0, 0x5242, 0x5243, 0, /* 0xB0 */ + 0, 0, 0x5244, 0x5245, 0x5246, 0x5247, 0, 0, /* 0xB0 */ + 0, 0, 0x5248, 0, 0, 0x5249, 0, 0, /* 0xC0 */ + 0x524A, 0, 0x524B, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x524C, 0, 0x524D, 0x524E, /* 0xD0 */ + 0, 0x524F, 0x5250, 0x5251, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x5252, 0, 0x5253, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x5254, 0, 0x5255, 0x5256, 0, 0, /* 0xF0 */ + 0x5257, 0x5258, 0x5259, 0, 0x525A, 0, 0x525B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x525C, 0x525D, 0x525E, 0x525F, 0, 0x5260, 0, /* 0x00 */ + 0, 0x5261, 0, 0x5262, 0x5263, 0, 0x5264, 0x5265, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0x5266, 0, 0x5267, 0, 0, 0, 0, /* 0x10 */ + 0x5268, 0, 0, 0, 0, 0x5269, 0x526A, 0, /* 0x20 */ + 0x526B, 0, 0, 0, 0x526C, 0, 0, 0, /* 0x20 */ + 0, 0x526D, 0, 0x526E, 0x526F, 0, 0x5270, 0, /* 0x30 */ + 0, 0x5271, 0x5272, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x5273, 0, /* 0x40 */ + 0, 0, 0x5274, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x5276, 0x5277, 0x5278, 0, 0x5275, 0, 0, /* 0x50 */ + 0, 0x5279, 0x527A, 0x527B, 0x527C, 0x527D, 0x527E, 0, /* 0x50 */ + 0, 0x5321, 0, 0x5322, 0, 0, 0, 0x5323, /* 0x60 */ + 0, 0x5324, 0, 0, 0, 0x5325, 0x5326, 0, /* 0x60 */ + 0x5327, 0, 0x5328, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x5329, 0, 0, 0x532A, 0x532B, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x532C, 0x532D, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0x532E, /* 0x80 */ + 0, 0, 0, 0, 0x532F, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x5330, 0, /* 0x90 */ + 0x5331, 0, 0, 0, 0, 0, 0x5332, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x5333, 0, 0, 0, 0, 0, 0x5334, 0x5335, /* 0xB0 */ + 0, 0, 0x5336, 0x5337, 0x5338, 0, 0, 0x5339, /* 0xB0 */ + 0, 0, 0, 0, 0x533A, 0, 0, 0x533B, /* 0xC0 */ + 0x533C, 0x533D, 0, 0, 0, 0x533E, 0, 0x533F, /* 0xC0 */ + 0, 0, 0, 0x5340, 0x5341, 0x5342, 0, 0x5343, /* 0xD0 */ + 0, 0x5344, 0x5345, 0, 0, 0x5346, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0x5347, 0, /* 0xE0 */ + 0, 0x5348, 0, 0x5349, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x534A /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x534B, 0, 0, 0, 0x534C, /* 0x00 */ + 0x534D, 0x534E, 0, 0, 0, 0, 0, 0x534F, /* 0x00 */ + 0, 0x5350, 0x5351, 0x5352, 0, 0, 0x5353, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x5354, 0x5355, 0, /* 0x10 */ + 0, 0, 0, 0x5356, 0, 0, 0x5357, 0, /* 0x20 */ + 0, 0, 0x5358, 0, 0, 0x5359, 0, 0, /* 0x20 */ + 0, 0x535A, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0x535B, 0x535C, 0x535D, 0, /* 0x30 */ + 0x535E, 0x535F, 0, 0, 0, 0, 0, 0x5360, /* 0x40 */ + 0x5361, 0, 0, 0, 0, 0x5362, 0, 0, /* 0x40 */ + 0, 0x5363, 0, 0x5364, 0, 0, 0, 0x5365, /* 0x50 */ + 0, 0x5366, 0x5367, 0, 0x5368, 0x5369, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x536A, 0, 0x536B, /* 0x60 */ + 0, 0, 0x536C, 0, 0, 0, 0, 0, /* 0x60 */ + 0x536D, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x536E, 0, 0x536F, 0x5370, 0, 0, 0, 0x5371, /* 0x70 */ + 0, 0x5372, 0x5373, 0x5374, 0, 0x5375, 0x5376, 0, /* 0x80 */ + 0x5377, 0, 0, 0x5378, 0x5379, 0x537A, 0, 0, /* 0x80 */ + 0, 0x537B, 0, 0, 0, 0, 0x537C, 0x537D, /* 0x90 */ + 0, 0, 0, 0, 0, 0x537E, 0x5421, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x5422, 0x5423, /* 0xA0 */ + 0, 0, 0x5424, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x5425, 0, 0, 0x5426, 0x5427, /* 0xB0 */ + 0, 0x5428, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x5429, 0x542A, 0x542B, 0x542C, 0x542D, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x542E, 0x542F, 0x5430, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5431, /* 0xD0 */ + 0, 0x5432, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0x5434, 0, 0, 0x5435, 0x5436, 0, /* 0xE0 */ + 0, 0, 0x5437, 0x5438, 0, 0x5439, 0, 0, /* 0xE0 */ + 0, 0x543A, 0, 0, 0, 0x543B, 0x543C, 0, /* 0xF0 */ + 0, 0x543D, 0x543E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5433, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x543F, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0x5440, 0x5441, 0, 0, 0, 0x5442, 0, 0x5443, /* 0x10 */ + 0, 0, 0, 0, 0x5444, 0x5445, 0, 0, /* 0x10 */ + 0x5446, 0, 0, 0, 0, 0, 0, 0x5447, /* 0x20 */ + 0x5448, 0, 0, 0, 0x5449, 0x544A, 0, 0x544B, /* 0x20 */ + 0, 0, 0, 0x544C, 0, 0, 0x544D, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x544E, /* 0x30 */ + 0, 0, 0, 0, 0x544F, 0x5450, 0, 0x5451, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0x5452, 0, /* 0x40 */ + 0x5453, 0, 0x5454, 0, 0, 0, 0, 0, /* 0x50 */ + 0x5455, 0, 0, 0, 0, 0, 0, 0x5456, /* 0x50 */ + 0, 0x5457, 0x5458, 0, 0, 0x5459, 0, 0, /* 0x60 */ + 0, 0, 0, 0x545A, 0, 0, 0x545B, 0x545C, /* 0x60 */ + 0, 0, 0, 0x545D, 0, 0, 0, 0, /* 0x70 */ + 0x545E, 0, 0, 0, 0, 0, 0x545F, 0, /* 0x70 */ + 0, 0x5460, 0, 0, 0, 0, 0x5461, 0x5462, /* 0x80 */ + 0, 0, 0x5463, 0, 0, 0x5464, 0, 0, /* 0x80 */ + 0, 0x5465, 0, 0, 0, 0x5466, 0, 0, /* 0x90 */ + 0x5467, 0, 0x5468, 0, 0, 0x5469, 0x546A /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x30 */ + 0x546C, 0x546B, 0x546D, 0x546E, 0x546F, /* 0x30 */ + 0, 0, 0, 0x5470, 0x5471, 0, 0, 0x5472, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x5473, /* 0x40 */ + 0, 0, 0x5474, 0x5475, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x5476, 0x5477, 0x5478, 0, 0, /* 0x50 */ + 0, 0x5479, 0, 0x547A, 0x547B, 0x547C, 0x547D, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x547E, 0, 0, /* 0x60 */ + 0, 0x5521, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x5522, 0x5523, 0x5524, /* 0x70 */ + 0x5525, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0x5526, 0, 0x5527, 0, 0x5528, /* 0x80 */ + 0x5529, 0x552A, 0, 0, 0, 0, 0x552B, 0x552C, /* 0x90 */ + 0, 0, 0, 0, 0x552D, 0, 0, 0, /* 0x90 */ + 0, 0x552E, 0x552F, 0, 0, 0, 0x5530, 0, /* 0xA0 */ + 0, 0, 0x5531, 0, 0, 0x5532, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x5533, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0x5534, 0, 0, 0x5535, /* 0xB0 */ + 0x5536, 0, 0, 0x5537, 0, 0, 0, 0, /* 0xC0 */ + 0x5538, 0, 0, 0, 0, 0, 0x5539, 0x553A, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x553B, 0, 0, 0, 0x553C, /* 0xD0 */ + 0, 0, 0, 0x553D, 0, 0x553E, 0, 0, /* 0xE0 */ + 0x553F, 0, 0, 0, 0x5540, 0, 0x5541, 0x5542, /* 0xE0 */ + 0, 0, 0x5543, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x5544, 0, 0, 0x5545, 0x5546, 0x5547 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5548, /* 0x00 */ + 0x5549, 0, 0x554A, 0, 0, 0x554B, 0x554C, 0x554D, /* 0x00 */ + 0, 0x554E, 0, 0x554F, 0x5550, 0, 0x5551, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0x5552, 0x5553, 0x5554, /* 0x10 */ + 0x5555, 0, 0, 0, 0x5556, 0, 0x5557, 0, /* 0x20 */ + 0, 0, 0, 0, 0x5558, 0, 0x5559, 0, /* 0x20 */ + 0x555A, 0, 0, 0, 0x555B, 0x555C, 0, 0x555D, /* 0x30 */ + 0, 0x555E, 0x555F, 0, 0x5560, 0, 0x5561, 0, /* 0x30 */ + 0x5562, 0, 0, 0, 0x5563, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x5564, 0, 0, 0, 0x5565, 0, 0x5566, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x5567, 0, 0, /* 0x60 */ + 0, 0x5568, 0, 0, 0, 0x5569, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x556A, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x556B, 0, 0, 0, 0, 0, 0x556C, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x556D, 0, 0x556E, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x556F, 0x5570, /* 0xA0 */ + 0, 0, 0, 0x5571, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0x5572, 0x5573, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x5574, 0, 0, 0, 0, 0x5575, 0, 0x5576, /* 0xC0 */ + 0, 0, 0x5577, 0, 0x5578, 0x5579, 0, 0x557A, /* 0xD0 */ + 0x557B, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x557C, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0x557D, 0x557E, 0, /* 0xE0 */ + 0x5621, 0, 0x5622, 0x5623, 0, 0, 0x5624, 0, /* 0xF0 */ + 0, 0x5625, 0x5626, 0, 0, 0, 0x5627 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5628, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x5629, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0x562A, 0x562B, /* 0x10 */ + 0x562C, 0, 0, 0, 0x562D, 0, 0x562E, 0, /* 0x10 */ + 0x562F, 0, 0, 0, 0x5630, 0, 0, 0x5631, /* 0x20 */ + 0, 0, 0, 0, 0x5632, 0, 0, 0, /* 0x20 */ + 0x5633, 0, 0, 0, 0, 0x5634, 0, 0, /* 0x30 */ + 0, 0, 0x5635, 0, 0x5636, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x5637, 0, 0x5638, /* 0x40 */ + 0, 0, 0x5639, 0, 0x563A, 0, 0, 0, /* 0x40 */ + 0, 0, 0x563B, 0, 0, 0, 0, 0x563C, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x563D, 0x563E, 0, 0, 0, 0, 0, 0x563F, /* 0x60 */ + 0x5640, 0x5641, 0, 0, 0, 0x5642, 0, 0x5643, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x5644, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x5645, 0, 0, 0x5647, 0x5648, 0x5649, 0, /* 0x80 */ + 0, 0, 0, 0x564A, 0, 0, 0x564B, 0, /* 0x80 */ + 0x5646, 0, 0, 0, 0, 0, 0x564C, 0, /* 0x90 */ + 0x564D, 0, 0, 0x564E, 0, 0, 0x564F, 0, /* 0x90 */ + 0, 0, 0x5650, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0x5651, 0, /* 0xA0 */ + 0, 0, 0x5652, 0, 0x5653, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x5654, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0x5656, 0, 0x5657, 0, 0, /* 0xC0 */ + 0, 0, 0x5658, 0x5655, 0, 0, 0x5659, 0x565A, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x565B, 0, 0x565C, /* 0xD0 */ + 0, 0, 0, 0x565D, 0, 0x565E, 0x565F, 0, /* 0xD0 */ + 0, 0x5660, 0, 0, 0x5661, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x5662, 0x5663, 0, 0, 0, /* 0xE0 */ + 0x5664, 0x5665, 0x5666, 0, 0, 0x5667, 0x5668, 0, /* 0xF0 */ + 0x5669, 0x566A, 0, 0, 0, 0x566B, 0, 0x566C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x566D, 0, 0, 0x566E, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x566F, /* 0x00 */ + 0, 0, 0, 0x5670, 0x5671, 0, 0, 0, /* 0x10 */ + 0, 0x5672, 0x5673, 0, 0, 0x5674, 0, 0, /* 0x10 */ + 0, 0x5675, 0x5676, 0, 0, 0, 0, 0, /* 0x20 */ + 0x5677, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0x5678, 0, 0x5679, 0, 0, 0, /* 0x30 */ + 0, 0, 0x567A, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x567B, 0x567C, 0x567D, 0x567E, 0, /* 0x40 */ + 0, 0, 0, 0x5721, 0, 0, 0x5722, 0x5723, /* 0x40 */ + 0, 0x5724, 0, 0, 0, 0, 0x5725, 0, /* 0x50 */ + 0, 0, 0, 0, 0x5726, 0, 0, 0, /* 0x50 */ + 0x5727, 0, 0, 0x5728, 0, 0, 0, 0x5729, /* 0x60 */ + 0, 0, 0, 0, 0, 0x572A, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x572B, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x572C, 0, 0x572D, 0, 0x572E, /* 0x70 */ + 0x572F, 0x5730, 0, 0x5731, 0x5732, 0, 0, 0x5733, /* 0x80 */ + 0, 0x5734, 0x5735, 0, 0, 0, 0x5736, 0, /* 0x80 */ + 0, 0x5737, 0, 0, 0x5738, 0, 0x5739, 0, /* 0x90 */ + 0x573A, 0, 0x573B, 0x573C, 0, 0, 0, 0, /* 0x90 */ + 0x573D, 0x573E, 0, 0x573F, 0x5740, 0, 0, 0x5741, /* 0xA0 */ + 0x5742, 0x5743, 0x5744, 0, 0, 0, 0x5745, 0, /* 0xA0 */ + 0x5746, 0, 0x5747, 0, 0x5748, 0, 0, 0x5749, /* 0xB0 */ + 0, 0, 0x574A, 0, 0x574B, 0, 0x574C, 0x574D, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x574E, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x574F, 0, 0, 0, 0, 0x5750, 0, 0, /* 0xD0 */ + 0, 0, 0x5751, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x5752, 0, 0x5753, 0, 0x5754, 0, 0, 0, /* 0xE0 */ + 0x5755, 0, 0x5756, 0, 0, 0x5757, 0, 0x5758, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x5759, 0x575A, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x575B, 0x575C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x575D, 0x575E, 0, 0, 0, 0, 0, 0x575F, /* 0x00 */ + 0x5760, 0, 0x5761, 0x5762, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0x5764, 0, 0x5765, 0x5766, 0x5767, /* 0x10 */ + 0, 0x5768, 0x5769, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0x576A, 0x576B, 0x576C, 0, /* 0x20 */ + 0x576D, 0, 0, 0x576E, 0, 0, 0, 0x576F, /* 0x30 */ + 0, 0, 0x5770, 0, 0x5771, 0x5772, 0, 0, /* 0x30 */ + 0, 0, 0x5773, 0x5774, 0x5775, 0, 0, 0x5776, /* 0x40 */ + 0, 0, 0, 0, 0, 0x5777, 0x5778, 0, /* 0x40 */ + 0, 0x5779, 0, 0x583E, 0x5763, 0x577A, 0x577B, 0x577C, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x577D, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0x577E, 0, 0, 0, 0, 0x5821, 0, 0x5822, /* 0x70 */ + 0x5823, 0, 0x5824, 0, 0x5825, 0, 0x5826, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x5827, 0, 0, /* 0x80 */ + 0, 0, 0x5828, 0, 0x5829, 0x582A, 0, 0, /* 0x90 */ + 0x582B, 0x582C, 0, 0x582D, 0x582E, 0x582F, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x5830, 0x5831, /* 0xA0 */ + 0, 0x5832, 0, 0, 0x5833, 0x584C, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x5834, 0x5835, /* 0xB0 */ + 0x5836, 0, 0, 0, 0, 0, 0, 0x5837, /* 0xC0 */ + 0, 0x5838, 0, 0, 0, 0, 0, 0x5839, /* 0xC0 */ + 0x583A, 0x583B, 0, 0, 0x583C, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x583D, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x583F, 0, 0x5840, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0x5841, 0, /* 0xF0 */ + 0x5842, 0x5843, 0, 0, 0x5844 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5845, 0, 0, 0, 0, 0x5846, 0, /* 0x00 */ + 0, 0, 0x5847, 0, 0, 0, 0, 0x5848, /* 0x00 */ + 0, 0x5849, 0, 0, 0, 0x584A, 0, 0, /* 0x10 */ + 0, 0x584B, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x584D, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x584E, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x584F, 0, 0x5850, /* 0x40 */ + 0x5851, 0, 0x5852, 0, 0, 0x5853, 0, 0x5854, /* 0x40 */ + 0, 0x5855, 0x5856, 0, 0, 0, 0x5857, 0, /* 0x50 */ + 0x5858, 0x5859, 0x585A, 0, 0x585B, 0, 0, 0, /* 0x50 */ + 0x585C, 0, 0, 0, 0x585D, 0x585E, 0, 0x585F, /* 0x60 */ + 0, 0, 0x5860, 0, 0, 0, 0, 0, /* 0x60 */ + 0x5861, 0, 0, 0x5862, 0x5863, 0, 0x5864, 0, /* 0x70 */ + 0x5865, 0, 0, 0, 0x5866, 0x5867, 0, 0, /* 0x70 */ + 0, 0x5868, 0, 0, 0, 0x5869, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0x586A, 0x586B, 0, 0x586C, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x586D, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x586E, 0, /* 0xA0 */ + 0x586F, 0x5870, 0x5871, 0, 0, 0, 0, 0x5872, /* 0xA0 */ + 0, 0x5873, 0, 0, 0x5874, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x5875, 0, 0, 0x5876, 0x5877, 0, /* 0xB0 */ + 0x5878, 0, 0x5879, 0, 0, 0, 0, 0x587A, /* 0xC0 */ + 0x587B, 0, 0, 0, 0x587C, 0, 0, 0x587D, /* 0xC0 */ + 0, 0, 0, 0x587E, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x5921, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5922, /* 0xE0 */ + 0, 0, 0x5923, 0, 0, 0, 0, 0x5924, /* 0xE0 */ + 0x5925, 0x5926, 0x5927, 0, 0, 0, 0, 0x5928, /* 0xF0 */ + 0, 0, 0x592A, 0x592B, 0, 0x592C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x592D, 0x592E, 0, 0, 0, 0x592F, /* 0x00 */ + 0, 0, 0, 0, 0x5930, 0, 0x5931, 0, /* 0x00 */ + 0x5932, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x5933, 0, 0x5934, 0, /* 0x10 */ + 0, 0, 0x5935, 0x5936, 0x5937, 0x5938, 0, 0x5939, /* 0x20 */ + 0, 0, 0x593A, 0x593B, 0, 0, 0, 0x593C, /* 0x20 */ + 0, 0, 0x5929, 0x593D, 0x593E, 0, 0x593F, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x5940, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x5941, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x5942, /* 0x40 */ + 0x5943, 0x5944, 0x5945, 0x5946, 0, 0, 0x5947, 0, /* 0x50 */ + 0, 0x5948, 0, 0, 0x5949, 0x594A, 0x594B, 0x594C, /* 0x50 */ + 0x594D, 0x594E, 0x594F, 0, 0x5950, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x5951, 0, 0, 0, 0x5952, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x5953, 0x5954, 0x5955, 0, 0x5956, 0, 0x5957, /* 0x70 */ + 0, 0x5958, 0, 0, 0, 0x5959, 0x595A, 0, /* 0x80 */ + 0, 0x595B, 0, 0x595C, 0x595D, 0, 0, 0x595E, /* 0x80 */ + 0, 0, 0, 0x595F, 0, 0, 0, 0, /* 0x90 */ + 0x5960, 0, 0, 0, 0, 0x5961, 0, 0x5962, /* 0x90 */ + 0x5963, 0, 0x5964, 0, 0, 0x5965, 0, 0x5966, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x5974, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x5967, 0, 0x5968, 0x5969, /* 0xB0 */ + 0x596A, 0, 0, 0, 0x596B, 0x596C, 0x596D, 0x596E, /* 0xB0 */ + 0, 0, 0x596F, 0, 0, 0, 0, 0x5970, /* 0xC0 */ + 0, 0, 0x5971, 0x5972, 0, 0, 0x5973, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x5975, 0, 0x5976, 0, 0, 0, 0, 0x5977, /* 0xD0 */ + 0x5978, 0, 0, 0, 0, 0, 0x5979, 0, /* 0xE0 */ + 0x597A, 0, 0, 0, 0, 0x597B, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x597C, 0, 0, 0x597D, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x597E, 0, 0, 0x5A21 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5A22, 0, 0, 0, 0x5A23, 0x5A24, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x5A25, 0x5A26, 0, /* 0x00 */ + 0x5A27, 0x5A28, 0x5A29, 0, 0, 0, 0, 0, /* 0x10 */ + 0x5A2A, 0x5A2B, 0, 0x5A2C, 0, 0, 0x5A2D, 0, /* 0x10 */ + 0, 0x5A2E, 0, 0, 0, 0, 0, 0x5A2F, /* 0x20 */ + 0, 0x5A30, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x5A31, 0, /* 0x30 */ + 0x5A32, 0, 0x5A33, 0, 0x5A34, 0x5A35, 0, 0, /* 0x30 */ + 0x5A36, 0x3866, 0x5A37, 0, 0, 0, 0x5A38, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x5A39, 0x5A3A, 0, 0, 0x5A3B, 0x5A3C, /* 0x50 */ + 0x5A3D, 0x5A3E, 0, 0, 0, 0x5A3F, 0, 0, /* 0x50 */ + 0x5A40, 0x5A41, 0x5A42, 0x5A43, 0x5A44, 0, 0, 0, /* 0x60 */ + 0, 0x5A45, 0, 0, 0x5A46, 0, 0, 0x5A47, /* 0x60 */ + 0, 0, 0, 0, 0, 0x5A48, 0x5A49, 0x5A4A, /* 0x70 */ + 0, 0, 0x5A4B, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x5A6D, 0, 0, 0, 0, 0x5A4C, 0, 0, /* 0x80 */ + 0, 0x5A4D, 0, 0, 0, 0, 0x5A4E, 0, /* 0x90 */ + 0x5A4F, 0, 0x5A50, 0, 0x5A51, 0, 0, 0, /* 0x90 */ + 0, 0x5A52, 0, 0, 0, 0, 0x5A53, 0x5A54, /* 0xA0 */ + 0x5A55, 0, 0, 0, 0, 0x5A56, 0, 0, /* 0xA0 */ + 0, 0x5A57, 0, 0x5A58, 0x5A59, 0x5A5A, 0, 0x5A5B, /* 0xB0 */ + 0x5A5C, 0x5A5D, 0, 0, 0, 0, 0, 0x5A5E, /* 0xB0 */ + 0x5A5F, 0x5A60, 0, 0x5A61, 0, 0x5A62, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x5A63, 0x5A64, 0, 0, 0x5A65, 0, 0x5A66, /* 0xD0 */ + 0, 0, 0x5A67, 0, 0x5A68, 0, 0, 0, /* 0xD0 */ + 0x5A69, 0, 0, 0x5A6A, 0, 0x5A6B, 0, 0x5A6C, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x5A6E, 0, 0x5A6F, 0x5A70 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5A71, 0x5A72, 0, 0x5A73, /* 0x00 */ + 0, 0, 0, 0x5A74, 0, 0, 0x5A75, 0x5A76, /* 0x00 */ + 0x5A77, 0, 0, 0x5A78, 0x5A79, 0, 0, 0, /* 0x10 */ + 0, 0x5A7A, 0, 0, 0, 0, 0x5A7B, 0x5A7C, /* 0x10 */ + 0, 0x5A7D, 0, 0x5A7E, 0, 0, 0, 0, /* 0x20 */ + 0x5B21, 0, 0, 0, 0, 0, 0x5B22, 0x5B23, /* 0x20 */ + 0, 0x5B24, 0x5B25, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x5B26, 0x5B27, 0, 0x5B28, 0x5B29, 0x5B2A, 0, /* 0x30 */ + 0x5B2B, 0, 0, 0x5B2C, 0, 0x5B2D, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x5B2E, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x5B2F, 0, 0, 0, 0, 0x5B30, 0, 0, /* 0x50 */ + 0, 0x5B31, 0, 0, 0x5B32, 0x5B33, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0x5B34, /* 0x60 */ + 0, 0x5B35, 0x5B36, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x5B37, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x5B38, 0x5B39, 0x5B3A, 0x5B3B, 0x5B3C, /* 0x80 */ + 0x5B3D, 0x5B3E, 0, 0x5B3F, 0x5B40, 0, 0, 0, /* 0x80 */ + 0x5B41, 0, 0, 0x5B42, 0, 0x5B43, 0, 0x5B44, /* 0x90 */ + 0x5B45, 0x5B46, 0, 0, 0, 0, 0x5B47, 0, /* 0x90 */ + 0x5B48, 0, 0, 0x5B49, 0, 0, 0, 0x5B4A, /* 0xA0 */ + 0, 0, 0, 0, 0x5B4B, 0x5B4C, 0x5B4D, 0, /* 0xA0 */ + 0, 0x5B4E, 0, 0, 0, 0x5B4F, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x5B50, 0x5B51, /* 0xB0 */ + 0, 0x5B52, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0x5B53, 0x5B54, 0x5B55, 0, 0, 0, 0x5B56, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x5B57, 0x5B58, 0, /* 0xD0 */ + 0, 0x5B59, 0x5B5A, 0, 0x5B5B, 0, 0, 0x5B5C, /* 0xD0 */ + 0, 0, 0x5B5D, 0x5B5E, 0x5B5F, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x5B60, 0x5B61, 0, 0x5B62, 0, 0, /* 0xE0 */ + 0, 0x5B63, 0, 0x5B64, 0, 0, 0, 0, /* 0xF0 */ + 0x5B65, 0, 0x5B66, 0, 0, 0, 0, 0x5B67 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5B68, 0, 0x5B69, 0, 0, 0x5B6A, 0, /* 0x00 */ + 0, 0x5B6B, 0x5B6C, 0x5B6D, 0, 0, 0, 0, /* 0x00 */ + 0x5B6E, 0, 0x5B70, 0x5B71, 0x5B72, 0, 0, 0, /* 0x10 */ + 0x5B73, 0x5B6F, 0x5B74, 0x5B75, 0x5B76, 0, 0x5B77, 0x5B78, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x5B79, 0, 0, 0, 0, 0x5B7A, 0x5B7B, 0, /* 0x20 */ + 0x5B7C, 0, 0x5B7D, 0, 0, 0x5B7E, 0, 0, /* 0x30 */ + 0, 0, 0x5C21, 0, 0x5C22, 0, 0, 0, /* 0x30 */ + 0, 0x5C23, 0, 0x5C24, 0, 0x5C25, 0, 0, /* 0x40 */ + 0x5C26, 0x5C27, 0x5C28, 0x5C29, 0, 0, 0x5C2A, 0, /* 0x40 */ + 0, 0x5C2B, 0, 0, 0, 0x5C2C, 0x5C2D, 0, /* 0x50 */ + 0x5C2E, 0, 0x5C2F, 0, 0x5C30, 0, 0, 0x5C31, /* 0x50 */ + 0x5C32, 0, 0, 0, 0x5C33, 0, 0, 0, /* 0x60 */ + 0, 0x5C34, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x5C35, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x5C36, 0, 0x5C37, 0, 0, 0, 0, /* 0x70 */ + 0x5C38, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x5C39, 0, 0x5C3A, 0x5C3B, 0x5C3C, 0, 0, 0x5C3D, /* 0x90 */ + 0x5C3E, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x5C3F, 0, 0x5C40, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x5C41, 0, 0, 0x5C42, 0x5C43, 0, /* 0xB0 */ + 0x5C44, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x5C45, 0x5C46, 0x5C47, 0x5C48, 0x5C49, 0, /* 0xC0 */ + 0, 0x5C4A, 0x5C4B, 0x5C4C, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0x5C4D, 0, 0, 0x5C4E, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5C4F, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x5C50, /* 0xE0 */ + 0x5C51, 0x5C52, 0, 0, 0, 0x5C53, 0, 0x5C54 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5C55, 0, 0, 0, 0, 0x5C56, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0x5C57, 0x5C58, 0x5C59, /* 0x00 */ + 0, 0, 0, 0, 0, 0x5C5A, 0x5C5B, 0, /* 0x10 */ + 0x5C5C, 0x5C5D, 0x5C5E, 0, 0x5C5F, 0, 0, 0, /* 0x10 */ + 0x5C60, 0, 0, 0, 0, 0, 0x5C61, 0x5C62, /* 0x20 */ + 0x5C63, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x5C64, 0x5C65, 0x5C66, 0, 0, 0x5C67, 0, 0, /* 0x30 */ + 0, 0x5C68, 0x5C69, 0, 0, 0, 0x5C6A, 0, /* 0x30 */ + 0x5C6B, 0, 0x5C6C, 0, 0, 0x5C6D, 0x5C6E, 0, /* 0x40 */ + 0, 0x5C6F, 0, 0, 0, 0, 0, 0x5C70, /* 0x40 */ + 0, 0, 0x5C71, 0, 0, 0, 0, 0x5C72, /* 0x50 */ + 0, 0, 0x5C73, 0x5C74, 0x5C75, 0, 0, 0, /* 0x50 */ + 0, 0x5C76, 0x5C77, 0x5C78, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0x5C79, 0, 0, 0x5C7A, 0, /* 0x60 */ + 0x5C7B, 0, 0, 0x5C7C, 0, 0x5C7D, 0, 0, /* 0x70 */ + 0, 0, 0x5C7E, 0x5D21, 0x5D22, 0x5D23, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x5D24, 0, 0, 0, 0x5D25, 0, 0, /* 0x80 */ + 0x5D26, 0, 0, 0, 0x5D27, 0x5D28, 0, 0, /* 0x90 */ + 0, 0, 0, 0x5D29, 0x5D2A, 0, 0, 0x5D2B, /* 0x90 */ + 0x5D2C, 0, 0, 0, 0, 0x5D2D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x5D2E, 0, 0, 0, 0x5D2F, 0x5D30, 0x5D31, 0x5D32, /* 0xB0 */ + 0, 0, 0, 0, 0x5D33, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x5D34, 0x5D35, 0x5D36, 0x5D37, /* 0xD0 */ + 0x5D38, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x5D39, 0, 0, /* 0xE0 */ + 0, 0x5D3A, 0, 0x5D3B, 0, 0x5D3C, 0, 0, /* 0xE0 */ + 0, 0x5D3D, 0, 0x5D3E, 0, 0, 0x5D3F, 0, /* 0xF0 */ + 0, 0x5D40, 0, 0, 0, 0x5D41, 0, 0x5D42 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5D43, 0x5D44, 0, 0x5D45, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0x5D46, /* 0x00 */ + 0, 0x5D47, 0x5D48, 0, 0x5D49, 0x5D4A, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x5D4B, 0, /* 0x10 */ + 0x5D4C, 0, 0x5D4D, 0, 0x5D4E, 0, 0x5D4F, 0, /* 0x20 */ + 0, 0, 0, 0x5D50, 0x5D51, 0, 0, 0x5D52, /* 0x20 */ + 0, 0, 0, 0, 0, 0x5D53, 0, 0x5D54, /* 0x30 */ + 0, 0, 0, 0, 0, 0x5D55, 0x5D56, 0, /* 0x30 */ + 0x5D57, 0, 0, 0x5D58, 0, 0x5D59, 0, 0x5D5A, /* 0x40 */ + 0, 0x5D5B, 0, 0, 0, 0x5D5C, 0x5D5D, 0, /* 0x40 */ + 0, 0, 0, 0x5D5E, 0, 0, 0x5D5F, 0x5D60, /* 0x50 */ + 0x5D61, 0, 0, 0, 0x5D62, 0x5D63, 0, 0, /* 0x50 */ + 0, 0x5D64, 0, 0, 0, 0x5D65, 0, 0x5D66, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x5D67, 0x5D68, 0x5D69, /* 0x70 */ + 0, 0x5D6A, 0x5D6B, 0x5D6C, 0, 0, 0x5D6D, 0x5D6E, /* 0x70 */ + 0x5D6F, 0, 0, 0x5D70, 0, 0, 0x5D71, 0, /* 0x80 */ + 0, 0, 0, 0x5D72, 0, 0, 0, 0x5D73, /* 0x80 */ + 0x5D74, 0, 0x5D75, 0, 0, 0, 0x5D76, 0x5D77, /* 0x90 */ + 0, 0x5D78, 0, 0, 0, 0, 0, 0x5D79, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0x5D7A, /* 0xA0 */ + 0, 0x5D7B, 0, 0, 0, 0, 0x5D7C, 0x5D7D, /* 0xA0 */ + 0, 0, 0, 0x5D7E, 0, 0, 0x5E21, 0x5E22, /* 0xB0 */ + 0, 0, 0, 0x5E23, 0, 0, 0x5E24, 0, /* 0xB0 */ + 0, 0, 0, 0x5E25, 0, 0, 0x5E26, 0, /* 0xC0 */ + 0x5E27, 0x5E28, 0x5E29, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x5E2A, 0, 0x5E2B, 0x5E2C, 0x5E2D, 0, 0x5E2E, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x5E2F, 0, 0x5E30, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0x5E31, 0, 0, 0, /* 0xE0 */ + 0x5E32, 0, 0, 0, 0x5E33, 0x5E34, 0x5E35, 0, /* 0xF0 */ + 0, 0, 0, 0, 0x5E36, 0, 0, 0x5E37 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5E38, 0x5E39, 0, /* 0x00 */ + 0, 0, 0x5E3F, 0x5E3A, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5E3B, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x5E3C, 0, 0x5E3D, 0x5E3E, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0x5E40, 0, 0, /* 0x20 */ + 0x5E41, 0, 0, 0, 0, 0, 0, 0x5E42, /* 0x30 */ + 0, 0, 0, 0, 0x5E43, 0, 0, 0, /* 0x30 */ + 0, 0, 0x5E44, 0x5E45, 0x5E46, 0x5E47, 0x5E48, 0, /* 0x40 */ + 0x5E49, 0, 0, 0, 0, 0x5E4E, 0, 0, /* 0x40 */ + 0, 0, 0x5E4A, 0x5E4B, 0x5E4C, 0, 0, 0, /* 0x50 */ + 0, 0x5E4D, 0, 0, 0, 0, 0x5E4F, 0, /* 0x50 */ + 0, 0, 0, 0x5E50, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0x5E51, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0x5E52, 0, /* 0x70 */ + 0x5E53, 0x5E54, 0, 0, 0x5E55, 0, 0x5E56, 0, /* 0x70 */ + 0, 0x5E57, 0, 0, 0x5E58, 0x5E59, 0, 0, /* 0x80 */ + 0, 0, 0, 0x5E5A, 0, 0x5E5B, 0, 0x5E5C, /* 0x80 */ + 0, 0, 0, 0, 0x5E5D, 0x5E5E, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x5E5F, 0, 0x5E60, 0x5E61 /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x30 */ + 0x5E62, 0x5E63, 0, 0, 0, 0x5E64, 0x5E65, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0x5E66, 0, 0x5E67, /* 0x40 */ + 0, 0x5E68, 0, 0x5E69, 0, 0, 0, 0x5E6A, /* 0x40 */ + 0, 0x5E6B, 0, 0x5E6C, 0x5E6D, 0, 0, 0x5E6E, /* 0x50 */ + 0x5E6F, 0x5E72, 0, 0x5E70, 0, 0x5E71, 0, 0, /* 0x50 */ + 0, 0, 0, 0x5E73, 0x5E74, 0, 0x5E75, 0, /* 0x60 */ + 0x5E76, 0x5E77, 0, 0, 0, 0x5E78, 0, 0, /* 0x60 */ + 0, 0, 0, 0x5E79, 0, 0x5E7A, 0x5E7B, 0, /* 0x70 */ + 0, 0, 0, 0x5E7C, 0, 0, 0x5E7D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0x5E7E, 0x5F21, /* 0x80 */ + 0, 0, 0, 0x5F22, 0, 0, 0, 0, /* 0x80 */ + 0x5F23, 0, 0x5F24, 0x5F25, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5F26, 0, 0x5F27, 0x5F28, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x5F29, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x5F2A, 0x5F2B, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x5F2C, 0x5F2D, 0, /* 0xC0 */ + 0, 0x5F2E, 0, 0x5F2F, 0, 0, 0, 0x5F30, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x5F32, 0x5F31, 0, /* 0xD0 */ + 0, 0x5F33, 0, 0, 0, 0x5F34, 0, 0, /* 0xD0 */ + 0, 0x5F35, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x5F36, 0, 0, 0, 0x5F37, 0, 0, 0x5F38, /* 0xE0 */ + 0x5F39, 0, 0x5F3A, 0, 0, 0x5F3B, 0, 0x5F3C, /* 0xF0 */ + 0x5F3D, 0, 0, 0, 0, 0, 0x5F3E, 0x5F3F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F40, 0, 0x5F41, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5F42, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0x5F43, 0, 0, 0, 0, 0x5F44, /* 0x10 */ + 0, 0, 0, 0x5F45, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x5F46, 0, 0, /* 0x60 */ + 0, 0x5F47, 0, 0, 0x5F48, 0, 0x5F49, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0x5F4A, /* 0x70 */ + 0, 0, 0x5F4B, 0, 0x5F4C, 0, 0, 0, /* 0x80 */ + 0x5F4D, 0, 0, 0, 0, 0x5F4E, 0, 0, /* 0x80 */ + 0x5F4F, 0x5F50, 0, 0, 0, 0x5F51, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x5F52, 0x5F53, /* 0x90 */ + 0x5F54, 0, 0, 0, 0, 0, 0x5F55, 0, /* 0xA0 */ + 0, 0, 0, 0x5F56, 0x5F57, 0, 0, 0x5F58, /* 0xA0 */ + 0, 0, 0x5F59, 0, 0, 0x5F5A, 0, 0x5F5B, /* 0xB0 */ + 0, 0x5F5C, 0, 0x5F5D, 0x5F6F, 0, 0, 0, /* 0xB0 */ + 0x5F5E, 0, 0, 0, 0, 0x5F5F, 0x5F60, 0x5F61, /* 0xC0 */ + 0x5F62, 0, 0x5F63, 0, 0, 0, 0x5F64, 0, /* 0xC0 */ + 0, 0x5F65, 0, 0, 0x5F66, 0x5F67, 0, 0x5F68, /* 0xD0 */ + 0, 0x5F69, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x5F6A, 0x5F6B, 0, 0x5F6C, /* 0xE0 */ + 0, 0, 0, 0, 0x5F6D, 0, 0, 0, /* 0xE0 */ + 0x5F6E, 0x5F70, 0x5F71, 0, 0x5F72, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0x5F73 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F74, 0, 0, 0x5F75, 0x5F76, 0x5F77, 0, /* 0x00 */ + 0, 0, 0, 0x5F78, 0, 0, 0, 0, /* 0x00 */ + 0, 0x5F79, 0, 0, 0x5F7A, 0, 0x5F7B, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x5F7C, 0x5F7D, 0x5F7E, 0x6021, 0, 0, 0x6022, 0x6023, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x6024, 0, 0x6025, 0, 0, 0x6026, 0x6027, /* 0x30 */ + 0x6028, 0x6029, 0, 0, 0, 0x602A, 0, 0, /* 0x30 */ + 0x602B, 0x602C, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x602D, 0, 0x602E, 0x602F, 0x6030, /* 0x40 */ + 0, 0, 0, 0, 0x6031, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x6032, 0x6033, 0x6034, 0x6035, 0, /* 0x50 */ + 0, 0x6036, 0x6037, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x6038, 0, 0, 0x6039, 0x603A, 0, 0x603B, /* 0x60 */ + 0x603C, 0x603D, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x603E, 0x603F, 0x6040, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x6041, 0x6042, 0, 0, 0, 0, /* 0x80 */ + 0, 0x6043, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x6044, 0, 0x6045, 0, 0, 0x6046, 0, 0, /* 0x90 */ + 0, 0, 0x6047, 0x6048, 0, 0x6049, 0x604A, 0, /* 0x90 */ + 0, 0, 0x604B, 0, 0, 0, 0, 0x604C, /* 0xA0 */ + 0, 0x604D, 0, 0, 0, 0x604E, 0x604F, 0, /* 0xA0 */ + 0, 0, 0, 0x6050, 0, 0x6051, 0, 0, /* 0xB0 */ + 0, 0, 0x6052, 0x6053, 0, 0, 0, 0, /* 0xB0 */ + 0x6054, 0x6055, 0, 0x6056, 0x6057, 0, 0, 0x6058, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6059, /* 0xC0 */ + 0, 0x605A, 0, 0, 0x605B, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x605C, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0x605D, 0, 0, 0, 0, 0x6064, 0x605E, 0, /* 0xE0 */ + 0x605F, 0x6060, 0, 0, 0, 0, 0, 0x6061, /* 0xF0 */ + 0, 0x6062, 0x6063 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6065, 0, 0x6066, 0, 0, 0, 0, 0x6067, /* 0x00 */ + 0x6068, 0, 0, 0, 0, 0, 0, 0x6069, /* 0x00 */ + 0x606A, 0, 0, 0, 0, 0, 0x606B, 0x606C, /* 0x10 */ + 0x606D, 0, 0, 0, 0, 0, 0x606E, 0, /* 0x10 */ + 0x606F, 0x6070, 0, 0x6071, 0, 0x6072, 0, 0x6073, /* 0x20 */ + 0x6074, 0, 0, 0, 0x6075, 0x6076, 0x6077, 0, /* 0x20 */ + 0, 0, 0, 0, 0x6078, 0x6079, 0x607A, 0x607B, /* 0x30 */ + 0, 0, 0x607C, 0, 0, 0, 0, 0, /* 0x30 */ + 0x607D, 0x607E, 0, 0x6121, 0, 0, 0, 0x6122, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0x6123, /* 0x40 */ + 0, 0x6124, 0x6125, 0x6126, 0x6127, 0x6128, 0, 0, /* 0x50 */ + 0x6129, 0, 0, 0, 0, 0x612A, 0x612B, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x612C, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x612D, 0, 0, /* 0x90 */ + 0x612E, 0x612F, 0, 0, 0x6130, 0x6131, 0x6132, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0x6133, 0x6134, 0, /* 0xB0 */ + 0x6135, 0, 0, 0, 0, 0, 0x6136, 0, /* 0xB0 */ + 0x6137, 0x6138, 0, 0, 0, 0, 0x6139, 0, /* 0xC0 */ + 0, 0, 0x613A, 0x613B, 0, 0x613C, 0, 0, /* 0xC0 */ + 0x613D, 0, 0x613E, 0x613F, 0, 0x6140, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x6141, 0, 0, 0x6142, 0x6143, 0, 0, 0, /* 0xE0 */ + 0x6144, 0, 0, 0, 0, 0, 0x6145, 0, /* 0xE0 */ + 0, 0x6146, 0, 0, 0, 0x6147, 0x6148, 0, /* 0xF0 */ + 0, 0, 0, 0x6149, 0, 0, 0x614A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x614B, 0, 0x614C, 0, 0, 0, /* 0x00 */ + 0x614D, 0, 0, 0, 0x614E, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0x614F, 0, 0, 0x6150, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0x6151, 0x6152, 0x6154, 0, 0x6155, 0x6156, 0, 0x6153, /* 0x20 */ + 0, 0, 0, 0x6157, 0x6158, 0, 0, 0x6159, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x615A, /* 0x30 */ + 0, 0, 0, 0x615B, 0x615C, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0x615D, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x615E, 0, 0x615F, 0, 0, /* 0x50 */ + 0, 0, 0x6160, 0, 0, 0, 0x6161, 0x6162, /* 0x60 */ + 0, 0, 0, 0, 0x6163, 0, 0, 0, /* 0x60 */ + 0x6164, 0, 0, 0, 0x6165, 0, 0, 0, /* 0x70 */ + 0, 0x6166, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0x6167, 0, 0, /* 0x80 */ + 0x6168, 0, 0, 0x6169, 0x616A, 0, 0x616B, 0, /* 0x80 */ + 0x616C, 0, 0, 0, 0, 0x616D, 0, 0x616E, /* 0x90 */ + 0x616F, 0x6170, 0, 0x6171, 0, 0, 0, 0, /* 0x90 */ + 0x6172, 0x6173, 0x6174, 0, 0, 0x6175, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x6176, 0, 0x6177, 0x6178, 0x6179, 0, 0x617A, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0x617B, 0x617D, 0, /* 0xB0 */ + 0, 0, 0, 0x617E, 0x6221, 0x6222, 0, 0x6223, /* 0xC0 */ + 0x6224, 0, 0, 0, 0x617C, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x622D, 0, 0, 0x6225, 0, 0x6226, /* 0xD0 */ + 0x6227, 0x6228, 0, 0, 0x6229, 0x622A, 0, 0x622B, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x622C, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x622F, 0, 0, 0, 0x6230, /* 0xE0 */ + 0x6231, 0, 0, 0, 0x6232, 0, 0x622E, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0x6233, 0x6234 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6235, 0, 0, 0, 0x6236, 0x6237, 0x6238, 0, /* 0x00 */ + 0x6239, 0, 0, 0, 0, 0x623A, 0, 0, /* 0x00 */ + 0x623B, 0, 0, 0, 0x623C, 0, 0x623D, 0x623E, /* 0x10 */ + 0x623F, 0, 0x6240, 0, 0x6241, 0, 0x6242, 0, /* 0x10 */ + 0x6243, 0, 0x6245, 0x6246, 0, 0x6244, 0, 0x6247, /* 0x20 */ + 0, 0x6248, 0, 0, 0, 0, 0x6249, 0x624A, /* 0x20 */ + 0, 0x624B, 0, 0, 0x624C, 0, 0x624D, 0x624E, /* 0x30 */ + 0, 0x624F, 0x6250, 0, 0x6251, 0x6252, 0, 0, /* 0x30 */ + 0, 0, 0, 0x6253, 0, 0, 0, 0x6254, /* 0x40 */ + 0x6255, 0, 0, 0, 0, 0, 0, 0x6256, /* 0x40 */ + 0, 0, 0, 0x6257, 0, 0, 0, 0x6258, /* 0x50 */ + 0, 0x6259, 0x625A, 0x625B, 0, 0, 0, 0, /* 0x50 */ + 0, 0x625C, 0, 0, 0x625D, 0, 0, 0x625E, /* 0x60 */ + 0, 0, 0, 0, 0, 0x625F, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0x6260, 0, 0, 0, /* 0x70 */ + 0, 0x6261, 0x6262, 0x6263, 0, 0, 0, 0, /* 0x70 */ + 0, 0x6264, 0, 0x6265, 0, 0x6266, 0x6267, 0, /* 0x80 */ + 0, 0, 0x6268, 0, 0, 0, 0x6269, 0, /* 0x80 */ + 0, 0x626A, 0, 0x626B, 0x626C, 0x626D, 0, 0, /* 0x90 */ + 0x626E, 0, 0, 0, 0, 0, 0x626F, 0, /* 0x90 */ + 0, 0x6270, 0, 0, 0, 0, 0x6271, 0, /* 0xA0 */ + 0x6272, 0, 0, 0, 0x6273, 0x6274, 0x6275, 0, /* 0xA0 */ + 0x6276, 0x6277, 0x6278, 0x6279, 0, 0, 0x627A, 0, /* 0xB0 */ + 0, 0, 0, 0x627B, 0x627C, 0x627D, 0, 0x627E, /* 0xB0 */ + 0, 0, 0x6321, 0x6322, 0, 0x6323, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x6324, 0x6325, 0, 0, 0x6326, /* 0xD0 */ + 0, 0x6327, 0x6328, 0, 0, 0, 0x6329, 0, /* 0xD0 */ + 0, 0, 0, 0, 0x632A, 0x632B, 0, 0, /* 0xE0 */ + 0, 0x632C, 0x632D, 0, 0x632E, 0x632F, 0x6330, 0x6331, /* 0xE0 */ + 0x6332, 0x6333, 0, 0, 0, 0, 0, 0x6334, /* 0xF0 */ + 0, 0x6335, 0, 0x6336, 0, 0x6337 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6338, 0x6339, 0, 0, 0x633A, 0x633B, 0x633C, 0x633D, /* 0x00 */ + 0, 0x633E, 0x633F, 0, 0x6340, 0, 0, 0, /* 0x00 */ + 0x6341, 0, 0x6342, 0x6343, 0, 0, 0x6344, 0, /* 0x10 */ + 0x6345, 0, 0, 0, 0x6346, 0x6347, 0, 0, /* 0x10 */ + 0, 0, 0, 0x6348, 0x6349, 0x634A, 0x634B, 0, /* 0x20 */ + 0x634C, 0, 0, 0, 0, 0, 0x634D, 0x634E, /* 0x20 */ + 0x634F, 0, 0, 0x6350, 0, 0x6351, 0x6352, 0, /* 0x30 */ + 0x6353, 0x6354, 0x6355, 0, 0x6356, 0, 0x6357, 0, /* 0x30 */ + 0x6358, 0, 0x6359, 0x635A, 0, 0, 0x635B, 0x635C, /* 0x40 */ + 0, 0, 0x635D, 0, 0, 0x635E, 0x635F, 0x6360, /* 0x40 */ + 0, 0x6361, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0x6362, 0x6363, 0, 0, 0x6364, 0x6365, 0, 0, /* 0x50 */ + 0x6366, 0x6367, 0, 0, 0, 0x6368, 0, 0x6369, /* 0x60 */ + 0x636A, 0x636B, 0, 0, 0, 0, 0x636C, 0x636D, /* 0x60 */ + 0x636E, 0, 0, 0, 0, 0x636F, 0x6370, 0x6371, /* 0x70 */ + 0x6372, 0x6373, 0, 0x6374, 0x6375, 0x6376, 0, 0x6377, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0x6378, 0x6379, 0x637A, 0, 0, 0x637B, 0x637C, 0, /* 0x80 */ + 0, 0, 0x637D, 0, 0, 0, 0, 0x637E, /* 0x90 */ + 0, 0x6421, 0, 0, 0, 0, 0, 0x6422, /* 0x90 */ + 0x6423, 0, 0, 0, 0x6424, 0x6425, 0, 0x6426, /* 0xA0 */ + 0x6427, 0, 0, 0x6428, 0, 0, 0, 0x6429, /* 0xA0 */ + 0, 0, 0x642A, 0, 0, 0, 0x642B, 0, /* 0xB0 */ + 0x642C, 0, 0x642D, 0x642E, 0x642F, 0x6430, 0, 0x6431, /* 0xB0 */ + 0x6432, 0x6433, 0x6434, 0x6435, 0, 0x6436, 0x6437, 0x6438, /* 0xC0 */ + 0x6439, 0, 0, 0x643A, 0x643B, 0x643C, 0x643D, 0, /* 0xC0 */ + 0x643E, 0, 0, 0x643F, 0, 0x6440, 0, 0x6441, /* 0xD0 */ + 0x6442, 0x6443, 0, 0, 0x6444, 0x6445, 0, 0x6446, /* 0xD0 */ + 0x6447, 0x6448, 0, 0x6449, 0, 0x644A, 0, 0x644B, /* 0xE0 */ + 0x644C, 0, 0, 0, 0x644D, 0, 0x644E, 0, /* 0xE0 */ + 0x644F, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0x6450, 0, 0x6451, 0, 0, 0, 0x6452 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6453, 0, 0x6454, 0, 0, 0, 0, 0, /* 0x00 */ + 0x6455, 0, 0, 0, 0, 0x6456, 0, 0, /* 0x00 */ + 0, 0x6457, 0, 0, 0x6458, 0x6459, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0x645A, 0x645B, 0x645C, 0x645D, /* 0x10 */ + 0, 0x645E, 0, 0, 0x645F, 0x6460, 0, 0x6461, /* 0x20 */ + 0, 0x6462, 0x6463, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0x6464, 0x6465, 0, 0x6466, 0x6467, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0x6468, /* 0x40 */ + 0x6469, 0x646A, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x646B, 0x646C, 0x646D, 0, 0, 0x646E, 0, 0x646F, /* 0x50 */ + 0x6470, 0, 0x6471, 0, 0, 0, 0x6472, 0, /* 0x50 */ + 0, 0, 0, 0, 0x6473, 0x6474, 0, 0x6475, /* 0x60 */ + 0, 0x6476, 0x6477, 0, 0, 0x6478, 0, 0x6479, /* 0x60 */ + 0x647A, 0x647B, 0, 0x647C, 0x647D, 0, 0x647E, 0, /* 0x70 */ + 0, 0, 0x6521, 0, 0, 0x6522, 0, 0x6523, /* 0x70 */ + 0x6524, 0x6525, 0x6526, 0, 0, 0, 0, 0, /* 0x80 */ + 0x6527, 0, 0x6528, 0x6529, 0, 0x652A, 0, 0x652B, /* 0x80 */ + 0, 0, 0x652C, 0, 0, 0x652D, 0, 0, /* 0x90 */ + 0x652E, 0, 0, 0x652F, 0, 0, 0x6530, 0, /* 0x90 */ + 0, 0x6531, 0, 0x6532, 0x6533, 0, 0x6534, 0, /* 0xA0 */ + 0x6535, 0x653B, 0, 0x6536, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x6537, 0x6538, 0x6539, 0, /* 0xB0 */ + 0, 0, 0x653A, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x653C, 0, 0, 0x653D, 0x653E, 0x653F, 0x6540, /* 0xC0 */ + 0, 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x6546, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x6547, 0, 0, 0x6548, 0, 0x6549, 0x654A, /* 0xD0 */ + 0, 0, 0x654B, 0, 0, 0, 0x654C, 0x654D, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x654F, /* 0xF0 */ + 0x6550, 0x654E, 0x6551, 0x6552, 0, 0x6553 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6554, 0x6555, 0, 0x6556, 0, 0, 0, /* 0x00 */ + 0x6557, 0x6558, 0, 0, 0, 0x6559, 0x655A, 0x655B, /* 0x00 */ + 0, 0, 0, 0, 0, 0x655C, 0x655D, 0x655E, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0x655F, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0x6560, 0x6561, /* 0x20 */ + 0, 0x6562, 0x6563, 0x6564, 0x6565, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0x6566, 0, 0x6568, 0, 0x6567, /* 0x30 */ + 0, 0, 0, 0x6569, 0, 0x656A, 0, 0, /* 0x40 */ + 0x656B, 0, 0x656C, 0, 0x656D, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x656E, 0, 0, /* 0x50 */ + 0, 0x656F, 0, 0, 0x6570, 0, 0, 0x6571, /* 0x50 */ + 0, 0x6572, 0, 0x6573, 0, 0, 0, 0, /* 0x60 */ + 0x6574, 0, 0, 0x6575, 0, 0x6576, 0x6577, 0x6578, /* 0x60 */ + 0, 0x6579, 0x657A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x657C, 0x657B /* 0x80 */ + /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x70 */ + 0x657D, 0x657E, 0, 0, 0, 0, 0x6621, 0, /* 0x70 */ + 0, 0, 0, 0, 0x6622, 0, 0, 0, /* 0x80 */ + 0x6623, 0, 0, 0, 0x6624, 0x6625, 0x6626, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0x6627, 0x6628, 0x6629, /* 0x90 */ + 0, 0x662A, 0, 0, 0, 0, 0x662B, 0, /* 0xA0 */ + 0, 0x662C, 0, 0x662D, 0x662E, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x662F, 0, 0x6630, 0, /* 0xB0 */ + 0, 0, 0x6631, 0, 0, 0x6632, 0, 0x6633, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x6634, 0, /* 0xC0 */ + 0x6635, 0x6636, 0, 0x6637, 0, 0, 0, 0, /* 0xC0 */ + 0x6638, 0x6639, 0x663A, 0x663B, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x663C, 0x663D, 0, 0, 0x663E, 0x663F, 0x6640, /* 0xD0 */ + 0x6641, 0, 0, 0, 0x6642, 0, 0x6643 /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0x6644, 0x6645, 0, /* 0x10 */ + 0, 0, 0x6646, 0, 0x6647, 0x6648, 0x6649, 0, /* 0x20 */ + 0, 0, 0, 0, 0x664A, 0, 0, 0, /* 0x20 */ + 0, 0x664B, 0, 0x664C, 0, 0, 0, 0x664D, /* 0x30 */ + 0x664E, 0x664F, 0x6650, 0, 0x6651, 0x6652, 0, 0, /* 0x30 */ + 0, 0x6653, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x6654, 0, 0x6655, 0, 0x6656, 0x6657, /* 0x50 */ + 0x6658, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x6659, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0x665A, 0, /* 0x60 */ + 0, 0, 0, 0, 0x665B, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0x665C, 0x665D, 0, 0x665E, 0x665F, /* 0x70 */ + 0, 0x6660, 0x6661, 0x6662, 0x6663, 0, 0, 0, /* 0x80 */ + 0, 0x6664, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x6665, 0, 0, 0, 0, 0x6666, 0, /* 0x90 */ + 0, 0, 0x6667, 0, 0, 0x6668, 0, 0x6669, /* 0x90 */ + 0, 0, 0, 0, 0x666A, 0x666B, 0x666C, 0, /* 0xA0 */ + 0, 0x666D, 0, 0, 0, 0, 0x666E, 0x666F, /* 0xA0 */ + 0, 0, 0, 0x6670, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0x6671, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x6672, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0x6673, 0, 0, 0, 0, 0, /* 0xD0 */ + 0x6675, 0, 0x6676, 0, 0, 0x6677, 0x6678, 0x6679, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0x667A, 0, 0, 0, 0, 0, 0x667B, /* 0xE0 */ + 0, 0x667C, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0x667D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x667E, 0x6721, 0, 0x6722, 0, 0, /* 0x00 */ + 0, 0x6723, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x6724, 0x6725, 0, 0x6726, 0, 0, /* 0x10 */ + 0, 0x6727, 0x6728, 0x6729, 0, 0, 0, 0, /* 0x20 */ + 0x672A, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x672B, 0, 0x672C, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x672D, 0, 0x672E, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0x672F, 0, 0, 0, 0x6730, 0x6731, /* 0x40 */ + 0, 0, 0, 0, 0, 0x6732, 0, 0x6733, /* 0x50 */ + 0x6734, 0, 0x6735, 0x6736, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0x6737, 0, 0, 0, 0x6738, /* 0x60 */ + 0, 0, 0x6739, 0, 0, 0, 0x673A, 0, /* 0x60 */ + 0, 0, 0, 0x673B, 0, 0, 0x673C, 0x673D, /* 0x70 */ + 0x673E, 0, 0, 0x673F, 0, 0x6740, 0, 0x6741, /* 0x70 */ + 0x6742, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x6743, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0x6744, 0x6745, 0x6746, /* 0x90 */ + 0, 0x6747, 0x6748, 0, 0, 0, 0x6749, 0x674A, /* 0x90 */ + 0, 0, 0x674B, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x674C, 0, 0x674D, 0, /* 0xA0 */ + 0, 0x674E, 0x674F, 0, 0, 0x6750, 0x6751, 0, /* 0xB0 */ + 0x6752, 0x6753, 0x6754, 0, 0x6755, 0, 0x6756, 0x6757, /* 0xB0 */ + 0, 0x6758, 0, 0, 0x6759, 0x675A, 0, 0x675B, /* 0xC0 */ + 0, 0x675C, 0x675D, 0, 0x675E, 0x675F, 0x6760, 0, /* 0xC0 */ + 0x6761, 0x6762, 0, 0, 0x6763, 0, 0, 0x6764, /* 0xD0 */ + 0x6765, 0x6766, 0, 0x676A, 0, 0x6767, 0x6768, 0, /* 0xD0 */ + 0x6769, 0x676B, 0, 0, 0x676C, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0x676D, /* 0xE0 */ + 0, 0x676E, 0, 0, 0x676F, 0, 0, 0x6770, /* 0xF0 */ + 0x6771, 0, 0x6772 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6773, /* 0x00 */ + 0, 0, 0x6774, 0, 0, 0x6776, 0x6777, 0, /* 0x00 */ + 0, 0, 0, 0, 0x6778, 0, 0x6779, 0, /* 0x10 */ + 0, 0x6775, 0, 0, 0x677A, 0, 0x677B, 0, /* 0x10 */ + 0x677C, 0, 0, 0x677D, 0, 0x6828, 0x677E, 0, /* 0x20 */ + 0, 0, 0, 0x6821, 0, 0, 0x6822, 0x6823, /* 0x20 */ + 0x6824, 0, 0x6825, 0x6826, 0, 0x6827, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0x6829, 0, /* 0x30 */ + 0, 0, 0, 0, 0x682A, 0, 0, 0x682B, /* 0x40 */ + 0, 0, 0x682C, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x682D, 0x682E, 0x682F, 0, 0, 0x6830, 0x6831, /* 0x50 */ + 0, 0x6832, 0x6833, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0x6834, 0x6835, 0, 0x6836, 0x6837, 0, /* 0x60 */ + 0, 0, 0x6838, 0, 0x6839, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0x683A, 0, 0x683B, 0x683C, 0, /* 0xA0 */ + 0x683D, 0, 0, 0, 0x683E, 0, 0, 0x683F, /* 0xB0 */ + 0x6840, 0, 0x6841, 0x6842, 0, 0, 0, 0x6843, /* 0xB0 */ + 0, 0, 0x6844, 0, 0, 0x6845, 0, 0, /* 0xC0 */ + 0x6846, 0, 0, 0, 0x6847, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x6848, 0, 0x6849, 0, 0x684A, 0x684B, 0x684C, /* 0xE0 */ + 0, 0, 0x684D, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0x684E, 0, 0, 0x684F /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6850, 0, 0, 0, 0, 0x6851, /* 0x00 */ + 0x6852, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0x6853, 0, 0, 0, 0x6854, 0x6855, 0x6856, /* 0x10 */ + 0, 0, 0x6857, 0x6858, 0x6859, 0, 0, 0x685A, /* 0x10 */ + 0, 0, 0x685B, 0, 0, 0, 0x685C, 0x685D, /* 0x20 */ + 0, 0, 0, 0x685E, 0, 0, 0, 0, /* 0x20 */ + 0, 0x685F, 0x6860, 0x6861, 0x6862, 0x6863, 0, 0, /* 0x30 */ + 0, 0x6864, 0x6865, 0x6866, 0x6867, 0, 0, 0, /* 0x30 */ + 0x6868, 0x6869, 0, 0, 0, 0, 0x686A, 0x686B, /* 0x40 */ + 0x686C, 0, 0, 0, 0, 0x686D, 0x686E, 0, /* 0x40 */ + 0, 0, 0, 0, 0x686F, 0, 0, 0, /* 0x50 */ + 0x6870, 0x6871, 0, 0x6872, 0x6873, 0, 0x6874, 0x6875, /* 0x50 */ + 0x6876, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0x6877, 0, 0x6878, 0, 0x6879, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x687A, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x687B, 0x687C, 0x687D, 0, 0, 0x687E, 0, 0, /* 0xB0 */ + 0, 0x6921, 0x6922, 0, 0, 0x6923, 0, 0x6924, /* 0xB0 */ + 0, 0, 0, 0x6925, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x6926, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0x6927, 0x6928, 0, 0, 0, /* 0xD0 */ + 0, 0x6929, 0x692A, 0, 0x692B, 0, 0x692C, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x692D, /* 0xE0 */ + 0, 0, 0x692E, 0x692F, 0x6930, 0, 0, 0, /* 0xE0 */ + 0x6931, 0, 0, 0, 0x6932, 0x6933, 0, 0, /* 0xF0 */ + 0, 0x6934, 0, 0, 0, 0x6935, 0x6936 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6937, 0x6938, 0x6939, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x693A, 0x693B, 0, 0, 0, /* 0x00 */ + 0x693C, 0x693D, 0, 0, 0, 0, 0x693E, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0x693F, 0, /* 0x10 */ + 0x6940, 0, 0x6941, 0x6942, 0x6943, 0, 0, 0x6944, /* 0x20 */ + 0, 0, 0, 0, 0, 0x6945, 0x6946, 0, /* 0x20 */ + 0, 0, 0, 0x6947, 0, 0x6948, 0x6949, 0, /* 0x30 */ + 0x694A, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0x694C, 0, 0, 0x694D, 0, 0, 0x694B, /* 0x40 */ + 0, 0, 0x694E, 0x694F, 0x6950, 0, 0x6951, 0, /* 0x40 */ + 0, 0x6952, 0, 0, 0x6953, 0, 0x6954, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0x6955, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x6956, 0, 0x6957, 0, 0x6958, 0x6959, /* 0xA0 */ + 0, 0, 0x695A, 0, 0x695B, 0x695C, 0x695D, 0, /* 0xB0 */ + 0, 0x695E, 0, 0x695F, 0, 0, 0x6960, 0x6961, /* 0xB0 */ + 0, 0x6962, 0, 0x6963, 0, 0, 0x6964, 0, /* 0xC0 */ + 0x6965, 0, 0, 0, 0, 0, 0x6966, 0, /* 0xC0 */ + 0x6967, 0, 0x6968, 0, 0, 0x6969, 0x696A, 0x696B, /* 0xD0 */ + 0, 0, 0, 0x696C, 0x696D, 0, 0, 0, /* 0xD0 */ + 0x696E, 0, 0, 0, 0x696F, 0x6970, 0, 0x6971, /* 0xE0 */ + 0, 0x6972, 0, 0, 0x6973, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x6974, 0x6975, 0, 0x6976, 0, 0, /* 0xF0 */ + 0, 0x6977, 0x6978, 0, 0, 0x6979, 0, 0x697A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x697B, 0x697C, 0x697D, 0x697E, 0x6A21, 0x6A22, 0, 0, /* 0x00 */ + 0x6A23, 0x6A24, 0, 0x6A25, 0x6A26, 0x6A27, 0x6A28, 0, /* 0x00 */ + 0x6A29, 0, 0x6A2A, 0, 0, 0, 0x6A2B, 0, /* 0x10 */ + 0, 0x6A2C, 0, 0x6A2D, 0x6A2E, 0, 0, 0, /* 0x10 */ + 0x6A2F, 0, 0, 0, 0, 0, 0x6A30, 0, /* 0x20 */ + 0, 0, 0, 0x6A31, 0, 0x6A32, 0, 0, /* 0x20 */ + 0, 0, 0, 0x6A33, 0x6A34, 0x6A35, 0, 0x6A36, /* 0x30 */ + 0, 0x6A37, 0x6A38, 0, 0, 0x6A39, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0x6A3A, 0, 0, 0x6A3B, 0x6A3C, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0x6A3D, 0x6A3E, 0x6A3F, /* 0x50 */ + 0, 0, 0, 0x6A40, 0, 0, 0x6A41, 0, /* 0x50 */ + 0, 0x6A42, 0, 0x6A43, 0, 0x6A44, 0x6A45, 0, /* 0x60 */ + 0x6A46, 0, 0x6A47, 0x6A48, 0x6A49, 0x6A4A, 0x6A4B, 0, /* 0x60 */ + 0, 0, 0, 0x6A4C, 0, 0x6A4D, 0, 0x6A4E, /* 0x70 */ + 0x6A4F, 0x6A50, 0, 0, 0, 0, 0, 0x6A51, /* 0x70 */ + 0x6A52, 0, 0, 0, 0x6A53, 0x6A54, 0x6A55, 0x6A56, /* 0x80 */ + 0, 0x6A57, 0x6A58, 0x6A59, 0, 0x6A5A, 0, 0x6A5B, /* 0x80 */ + 0x6A5C, 0, 0, 0, 0x6A5D, 0, 0, 0, /* 0x90 */ + 0, 0, 0x6A5E, 0, 0, 0x6A5F, 0x6A60, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x6A61, 0x6A62, /* 0xA0 */ + 0, 0x6A63, 0, 0, 0x6A64, 0, 0, 0, /* 0xA0 */ + 0x6A65, 0x6A66, 0x6A67, 0, 0, 0, 0, 0x6A68, /* 0xB0 */ + 0x6A69, 0, 0, 0x6A6A, 0x6A6B, 0, 0x6A6C, 0x6A6D, /* 0xB0 */ + 0, 0x6A6E, 0, 0, 0, 0, 0, 0x6A6F, /* 0xC0 */ + 0x6A70, 0, 0, 0, 0, 0, 0x6A71, 0, /* 0xC0 */ + 0x6A72, 0, 0, 0, 0, 0, 0, 0x6A73, /* 0xD0 */ + 0x6A74, 0, 0, 0, 0, 0x6A75, 0, 0x6A76, /* 0xD0 */ + 0, 0, 0, 0, 0, 0x6A77, 0, 0x6A78, /* 0xE0 */ + 0, 0, 0x6A79, 0x6A7A, 0, 0, 0, 0x6A7B, /* 0xE0 */ + 0, 0, 0, 0x6A7C, 0, 0, 0, 0x6A7D, /* 0xF0 */ + 0x6A7E, 0x6B21, 0x6B22, 0, 0, 0x6B23, 0, 0x6B24 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B25, 0, 0x6B26, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x6B27, 0, 0, 0, 0x6B28, /* 0x00 */ + 0, 0x6B29, 0, 0, 0, 0, 0x6B2A, 0, /* 0x10 */ + 0x6B2B, 0x6B2C, 0x6B2D, 0, 0x6B2E, 0, 0x6B2F, 0, /* 0x10 */ + 0, 0, 0x6B30, 0x6B31, 0, 0, 0x6B32, 0x6B33, /* 0x20 */ + 0x6B34, 0x6B35, 0x6B36, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0x6B37, 0, 0, 0, 0x6B38, 0x6B39, 0x6B3A, /* 0x30 */ + 0, 0, 0, 0, 0, 0x6B3B, 0, 0, /* 0x30 */ + 0, 0x6B3C, 0, 0x6B3D, 0x6B3E, 0x6B3F, 0, 0, /* 0x40 */ + 0, 0x6B40, 0x6B41, 0, 0, 0, 0x6B42, 0x6B43, /* 0x40 */ + 0x6B44, 0, 0, 0x6B45, 0x6B46, 0, 0x6B47, 0, /* 0x50 */ + 0x6B48, 0, 0, 0x6B49, 0x6B50, 0x6B4A, 0x6B4B, 0x6B4C, /* 0x50 */ + 0, 0, 0, 0x6B4D, 0, 0, 0, 0, /* 0x60 */ + 0x6B52, 0x6B4E, 0x6B4F, 0x6B51, 0, 0, 0x6B53, 0, /* 0x60 */ + 0x6B54, 0, 0x6B55, 0, 0, 0x6B56, 0, 0x6B57, /* 0x70 */ + 0, 0, 0, 0x6B58, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0x6B59, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0x6B5A, 0, 0, 0, 0, 0x6B5B, /* 0xF0 */ + 0, 0x6B5C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B5E, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0x6B5D, 0, 0, 0, 0, /* 0x00 */ + 0, 0x6B5F, 0, 0, 0, 0, 0, 0x6B60, /* 0x10 */ + 0x6B61, 0, 0, 0, 0x6B62, 0x6B63, 0x6B64, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0x6B65, /* 0x20 */ + 0x6B66, 0, 0x6B67, 0x6B68, 0x6B69, 0, 0, 0, /* 0x30 */ + 0, 0, 0x6B6A, 0, 0x6B6B, 0x6B6D, 0, 0, /* 0x30 */ + 0, 0, 0x6B6E, 0x6B6F, 0, 0x6B6C, 0, 0x6B70, /* 0x40 */ + 0, 0, 0x6B71, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x6B72, 0x6B73, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0x6B74, /* 0x50 */ + 0, 0, 0x6B76, 0x6B75, 0, 0x6B77, 0, 0, /* 0x60 */ + 0, 0x6B78, 0x6B79, 0x6B7A, 0, 0, 0, 0, /* 0x60 */ + 0x6B7B, 0, 0, 0, 0, 0, 0x6B7C, 0x6B7D, /* 0x70 */ + 0, 0, 0, 0x6B7E, 0x6C21, 0, 0x6C22, 0, /* 0x70 */ + 0, 0, 0, 0x6C23, 0x6C24, 0, 0x6C25, 0, /* 0x80 */ + 0, 0, 0x6C26, 0, 0, 0x6C27, 0x6C28, 0, /* 0x80 */ + 0, 0, 0x6C29, 0x6C2A, 0, 0x6C2B, 0x6C2C, 0x6C2D, /* 0x90 */ + 0x6C2E, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6C2F, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0x6C30, 0, 0x6C31, 0, 0x6C32, 0, /* 0xA0 */ + 0, 0x6C33, 0, 0, 0, 0x6C34, 0, 0, /* 0xB0 */ + 0, 0x6C35, 0, 0, 0x6C36, 0, 0, 0x6C37, /* 0xB0 */ + 0, 0, 0, 0x6C38, 0, 0, 0, 0x6C39, /* 0xC0 */ + 0, 0x6C3A, 0x6C3B, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0x6C3C, 0x6C3D, 0x6C3E, 0x6C3F, /* 0xD0 */ + 0, 0, 0x6C40, 0, 0, 0, 0x6C41, 0x6C42, /* 0xD0 */ + 0x6C43, 0, 0, 0, 0, 0x6C44, 0, 0x6C45, /* 0xE0 */ + 0, 0x6C46, 0, 0x6C47, 0, 0, 0x6C48, 0, /* 0xE0 */ + 0x6C49, 0, 0, 0x6C4A, 0x6C4B, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0x6C4C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C4E, 0, 0, 0, 0, 0x6C4F, /* 0x00 */ + 0, 0, 0x6C4D, 0, 0, 0, 0x6C50, 0, /* 0x00 */ + 0x6C51, 0x6C52, 0x6C53, 0, 0, 0x6C54, 0x6C55, 0, /* 0x10 */ + 0, 0x6C56, 0, 0, 0x6C57, 0x6C58, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0x6C59, 0x6C5A, 0x6C5B, 0, 0, 0, /* 0x70 */ + 0x6C5C, 0, 0x6C5D, 0x6C5E, 0x6C5F, 0x6C60, 0, 0x6C61, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x6C62, 0x6C63, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x6C64, 0, /* 0x90 */ + 0x6C65, 0, 0, 0x6C66, 0, 0, 0x6C67, 0, /* 0x90 */ + 0, 0, 0, 0, 0x6C68, 0, 0, 0, /* 0xA0 */ + 0x6C69, 0, 0, 0, 0x6C6A, 0, 0x6C6B, 0x6C6C, /* 0xA0 */ + 0x6C6D, 0, 0, 0x6C6E, 0x6C6F, 0x6C70, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0x6C71, 0, /* 0xC0 */ + 0x6C72, 0, 0, 0x6C73, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0x6C74, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0x6C75, /* 0xD0 */ + 0, 0, 0, 0, 0x6C76, 0, 0, 0x6C77, /* 0xE0 */ + 0, 0, 0, 0, 0x6C78, 0x6C79, 0x6C7A, 0, /* 0xE0 */ + 0x6C7B, 0x6C7C, 0x6C7D, 0, 0, 0x6C7E, 0, 0, /* 0xF0 */ + 0x6D21, 0, 0, 0, 0, 0, 0, 0x6D22 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JIS0212_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6D23, 0x6D24, 0, 0, 0, 0, /* 0x00 */ + 0, 0x6D25, 0, 0, 0, 0, 0, 0x6D26, /* 0x00 */ + 0x6D27, 0x6D28, 0x6D29, 0, 0x6D2A, 0, 0x6D2B, 0x6D2C, /* 0x10 */ + 0, 0x6D2D, 0x6D2E, 0x6D2F, 0, 0, 0, 0x6D30, /* 0x10 */ + 0, 0, 0x6D31, 0, 0, 0, 0x6D32, 0, /* 0x20 */ + 0, 0, 0x6D33, 0x6D34, 0, 0, 0, 0x6D35, /* 0x20 */ + 0, 0x6D36, 0x6D37, 0, 0x6D38, 0, 0, 0x6D39, /* 0x30 */ + 0, 0x6D3A, 0x6D3B, 0, 0x6D3C, 0x6D3D, 0, 0x6D3E, /* 0x30 */ + 0, 0x6D3F, 0, 0x6D40, 0x6D41, 0x6D42, 0x6D43, 0x6D44, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0x6D45, 0, 0x6D46, 0x6D47, 0x6D48, /* 0x50 */ + 0x6D49, 0, 0x6D4A, 0, 0, 0x6D4B, 0x6D4C, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0x6D4D, 0x6D4E, 0, 0, 0, 0x6D4F, 0x6D50, 0x6D51, /* 0x60 */ + 0x6D52, 0x6D53, 0, 0x6D54, 0, 0x6D55, 0, 0, /* 0x70 */ + 0, 0, 0x6D56, 0, 0, 0x6D57, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0x6D58, /* 0x80 */ + 0x6D59, 0x6D5A, 0x6D5B, 0, 0x6D5C, 0, 0x6D5D, 0x6D5E, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0x6D5F, 0, /* 0x90 */ + 0, 0x6D60, 0x6D61, 0x6D62, 0, 0x6D63 /* 0xA0 */ + /* 0xA0 */ +}; + diff --git a/sal/textenc/tcvtjp6.tab b/sal/textenc/tcvtjp6.tab new file mode 100644 index 000000000..0cb02992d --- /dev/null +++ b/sal/textenc/tcvtjp6.tab @@ -0,0 +1,2656 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "convertsimple.hxx" +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the information tables for all japanese charsets: */ +/* SJIS, MS932, APPLE_JAPANESE, EUC_JP, JIS-X-201, JIS-X-208, JIS-X-212 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aSJISUniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ /* is A5 (YEN SIGN), but for compatibility with ASCII, we use 0x5C (SLASH) like MS CP392 */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ /* is 0x0203E (SPACING OVERSCORE), but for compatibility with ASCII, we use 0x7E (TILDE) like MS CP392 */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x005C, 0, 0, nullptr }, /* 0x80 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 }, /* 0x81 */ + { 0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 }, /* 0x82 */ + { 0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 }, /* 0x83 */ + { 0, 0x40, 0xBE, aImplDBCSToUniTab_SJIS_84 }, /* 0x84 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 0x40, 0x9C, aImplDBCSToUniTab_MS932_87 }, /* 0x87 */ /* We use the MS table for better MS compatibility */ + { 0, 0x9F, 0xFC, aImplDBCSToUniTab_SJIS_88 }, /* 0x88 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 }, /* 0x89 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A }, /* 0x8A */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B }, /* 0x8B */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C }, /* 0x8C */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D }, /* 0x8D */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E }, /* 0x8E */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F }, /* 0x8F */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 }, /* 0x90 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 }, /* 0x91 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 }, /* 0x92 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 }, /* 0x93 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 }, /* 0x94 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 }, /* 0x95 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 }, /* 0x96 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 }, /* 0x97 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 }, /* 0x98 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 }, /* 0x99 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A }, /* 0x9A */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B }, /* 0x9B */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C }, /* 0x9C */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D }, /* 0x9D */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E }, /* 0x9E */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F }, /* 0x9F */ + { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0xFF61, 0, 0, nullptr }, /* 0xA1 */ + { 0xFF62, 0, 0, nullptr }, /* 0xA2 */ + { 0xFF63, 0, 0, nullptr }, /* 0xA3 */ + { 0xFF64, 0, 0, nullptr }, /* 0xA4 */ + { 0xFF65, 0, 0, nullptr }, /* 0xA5 */ + { 0xFF66, 0, 0, nullptr }, /* 0xA6 */ + { 0xFF67, 0, 0, nullptr }, /* 0xA7 */ + { 0xFF68, 0, 0, nullptr }, /* 0xA8 */ + { 0xFF69, 0, 0, nullptr }, /* 0xA9 */ + { 0xFF6A, 0, 0, nullptr }, /* 0xAA */ + { 0xFF6B, 0, 0, nullptr }, /* 0xAB */ + { 0xFF6C, 0, 0, nullptr }, /* 0xAC */ + { 0xFF6D, 0, 0, nullptr }, /* 0xAD */ + { 0xFF6E, 0, 0, nullptr }, /* 0xAE */ + { 0xFF6F, 0, 0, nullptr }, /* 0xAF */ + { 0xFF70, 0, 0, nullptr }, /* 0xB0 */ + { 0xFF71, 0, 0, nullptr }, /* 0xB1 */ + { 0xFF72, 0, 0, nullptr }, /* 0xB2 */ + { 0xFF73, 0, 0, nullptr }, /* 0xB3 */ + { 0xFF74, 0, 0, nullptr }, /* 0xB4 */ + { 0xFF75, 0, 0, nullptr }, /* 0xB5 */ + { 0xFF76, 0, 0, nullptr }, /* 0xB6 */ + { 0xFF77, 0, 0, nullptr }, /* 0xB7 */ + { 0xFF78, 0, 0, nullptr }, /* 0xB8 */ + { 0xFF79, 0, 0, nullptr }, /* 0xB9 */ + { 0xFF7A, 0, 0, nullptr }, /* 0xBA */ + { 0xFF7B, 0, 0, nullptr }, /* 0xBB */ + { 0xFF7C, 0, 0, nullptr }, /* 0xBC */ + { 0xFF7D, 0, 0, nullptr }, /* 0xBD */ + { 0xFF7E, 0, 0, nullptr }, /* 0xBE */ + { 0xFF7F, 0, 0, nullptr }, /* 0xBF */ + { 0xFF80, 0, 0, nullptr }, /* 0xC0 */ + { 0xFF81, 0, 0, nullptr }, /* 0xC1 */ + { 0xFF82, 0, 0, nullptr }, /* 0xC2 */ + { 0xFF83, 0, 0, nullptr }, /* 0xC3 */ + { 0xFF84, 0, 0, nullptr }, /* 0xC4 */ + { 0xFF85, 0, 0, nullptr }, /* 0xC5 */ + { 0xFF86, 0, 0, nullptr }, /* 0xC6 */ + { 0xFF87, 0, 0, nullptr }, /* 0xC7 */ + { 0xFF88, 0, 0, nullptr }, /* 0xC8 */ + { 0xFF89, 0, 0, nullptr }, /* 0xC9 */ + { 0xFF8A, 0, 0, nullptr }, /* 0xCA */ + { 0xFF8B, 0, 0, nullptr }, /* 0xCB */ + { 0xFF8C, 0, 0, nullptr }, /* 0xCC */ + { 0xFF8D, 0, 0, nullptr }, /* 0xCD */ + { 0xFF8E, 0, 0, nullptr }, /* 0xCE */ + { 0xFF8F, 0, 0, nullptr }, /* 0xCF */ + { 0xFF90, 0, 0, nullptr }, /* 0xD0 */ + { 0xFF91, 0, 0, nullptr }, /* 0xD1 */ + { 0xFF92, 0, 0, nullptr }, /* 0xD2 */ + { 0xFF93, 0, 0, nullptr }, /* 0xD3 */ + { 0xFF94, 0, 0, nullptr }, /* 0xD4 */ + { 0xFF95, 0, 0, nullptr }, /* 0xD5 */ + { 0xFF96, 0, 0, nullptr }, /* 0xD6 */ + { 0xFF97, 0, 0, nullptr }, /* 0xD7 */ + { 0xFF98, 0, 0, nullptr }, /* 0xD8 */ + { 0xFF99, 0, 0, nullptr }, /* 0xD9 */ + { 0xFF9A, 0, 0, nullptr }, /* 0xDA */ + { 0xFF9B, 0, 0, nullptr }, /* 0xDB */ + { 0xFF9C, 0, 0, nullptr }, /* 0xDC */ + { 0xFF9D, 0, 0, nullptr }, /* 0xDD */ + { 0xFF9E, 0, 0, nullptr }, /* 0xDE */ + { 0xFF9F, 0, 0, nullptr }, /* 0xDF */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 }, /* 0xE9 */ + { 0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA }, /* 0xEA */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEC */ /* We convert this as double byte */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_ED }, /* 0xED */ /* We use the MS table for better MS compatibility */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_EE }, /* 0xEE */ /* We use the MS table for better MS compatibility */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEF */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF0 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF1 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF2 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF3 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF4 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF5 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF6 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF7 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* EUDC Range */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA }, /* 0xFA */ /* We use the MS table for better MS compatibility */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB }, /* 0xFB */ /* We use the MS table for better MS compatibility */ + { 0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC }, /* 0xFC */ /* We use the MS table for better MS compatibility */ + { 0x00A9, 0, 0, nullptr }, /* 0xFD */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0x2122, 0, 0, nullptr }, /* 0xFE */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0x2026, 0, 0, nullptr } /* 0xFF */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ +}; + +/* ----------------------------------------------------------------------- */ + +/* MS932-Tables are used for better microsoft compatibility */ + +ImplUniToDBCSHighTab const aSJISDBCSHighTab[256] = +{ + { 0x00, 0xF7, aImplUniToDBCSTab_SJIS_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 1, 0, nullptr }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 }, /* 0x20 */ + { 0x03, 0xD4, aImplUniToDBCSTab_MS932_21 }, /* 0x21 */ + { 0x00, 0xBF, aImplUniToDBCSTab_MS932_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 }, /* 0x23 */ + { 0x60, 0x73, aImplUniToDBCSTab_MS932_24 }, /* 0x24 */ + { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 }, /* 0x25 */ + { 0x05, 0x6F, aImplUniToDBCSTab_SJIS_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_30 }, /* 0x30 */ + { 1, 0, nullptr }, /* 0x31 */ + { 0x31, 0xA8, aImplUniToDBCSTab_MS932_32 }, /* 0x32 */ + { 0x03, 0xCD, aImplUniToDBCSTab_MS932_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E }, /* 0x4E */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F }, /* 0x4F */ + { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 }, /* 0x50 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 }, /* 0x52 */ + { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 }, /* 0x54 */ + { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 }, /* 0x55 */ + { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 }, /* 0x56 */ + { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 }, /* 0x59 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A }, /* 0x5A */ + { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C }, /* 0x5C */ + { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F }, /* 0x5F */ + { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 }, /* 0x62 */ + { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 }, /* 0x63 */ + { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 }, /* 0x64 */ + { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 }, /* 0x67 */ + { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 }, /* 0x69 */ + { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A }, /* 0x6A */ + { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B }, /* 0x6B */ + { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C }, /* 0x6C */ + { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D }, /* 0x6D */ + { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F }, /* 0x6F */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 }, /* 0x70 */ + { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 }, /* 0x71 */ + { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 }, /* 0x72 */ + { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 }, /* 0x73 */ + { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 }, /* 0x74 */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 }, /* 0x75 */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 }, /* 0x76 */ + { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 }, /* 0x77 */ + { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A }, /* 0x7A */ + { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D }, /* 0x7D */ + { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 }, /* 0x81 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 }, /* 0x83 */ + { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 }, /* 0x84 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 }, /* 0x85 */ + { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 }, /* 0x87 */ + { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 }, /* 0x88 */ + { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A }, /* 0x8A */ + { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B }, /* 0x8B */ + { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C }, /* 0x8C */ + { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D }, /* 0x8D */ + { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F }, /* 0x8F */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 }, /* 0x90 */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 }, /* 0x91 */ + { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 }, /* 0x92 */ + { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 }, /* 0x93 */ + { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 }, /* 0x97 */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 }, /* 0x99 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A }, /* 0x9A */ + { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B }, /* 0x9B */ + { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C }, /* 0x9C */ + { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D }, /* 0x9D */ + { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E }, /* 0x9E */ + { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 }, /* 0xF9 */ + { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 1, 0, nullptr }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +/* F040-F9FC --> E000-E757 */ + +#define DBCS_EUDC_SJIS_COUNT 1 +ImplDBCSEUDCData const aImplSJISDBCSEUDCTab[DBCS_EUDC_SJIS_COUNT] = +{ + /* EUDC-Range */ + /* Lead: F0-F9 */ + /* Trail: 40-7E, 80-FC */ + { 0xF0, 0xF9, 0x40, 0x7E, 0x80, 0xFC, 0, 0, 2, 0xBC, 0xE000, 0xE757 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplSJISDBCSCvtData = +{ + aSJISUniLeadTab, + aSJISDBCSHighTab, + aImplSJISDBCSEUDCTab, + DBCS_EUDC_SJIS_COUNT, + 0x00, 0xFF, + 0x40, 0xFC, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplSJISTextEncodingData + = { { &aImplSJISDBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "shift_jis", + 1, + 2, + 2, + 128, + RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aMS932UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ /* in SJIS this is A5 (YEN SIGN), but for compatibility with ASCII, we use 0x5C like MS CP392 */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ /* in SJIS this is 0x0203E (SPACING OVERSCORE), but for compatibility with ASCII, we use 0x7E (TILDE) like MS CP392 */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x005C, 0, 0, nullptr }, /* 0x80 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 }, /* 0x81 */ + { 0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 }, /* 0x82 */ + { 0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 }, /* 0x83 */ + { 0, 0x40, 0xBE, aImplDBCSToUniTab_SJIS_84 }, /* 0x84 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 0x40, 0x9C, aImplDBCSToUniTab_MS932_87 }, /* 0x87 */ + { 0, 0x9F, 0xFC, aImplDBCSToUniTab_SJIS_88 }, /* 0x88 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 }, /* 0x89 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A }, /* 0x8A */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B }, /* 0x8B */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C }, /* 0x8C */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D }, /* 0x8D */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E }, /* 0x8E */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F }, /* 0x8F */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 }, /* 0x90 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 }, /* 0x91 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 }, /* 0x92 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 }, /* 0x93 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 }, /* 0x94 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 }, /* 0x95 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 }, /* 0x96 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 }, /* 0x97 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 }, /* 0x98 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 }, /* 0x99 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A }, /* 0x9A */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B }, /* 0x9B */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C }, /* 0x9C */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D }, /* 0x9D */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E }, /* 0x9E */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F }, /* 0x9F */ + { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0xFF61, 0, 0, nullptr }, /* 0xA1 */ + { 0xFF62, 0, 0, nullptr }, /* 0xA2 */ + { 0xFF63, 0, 0, nullptr }, /* 0xA3 */ + { 0xFF64, 0, 0, nullptr }, /* 0xA4 */ + { 0xFF65, 0, 0, nullptr }, /* 0xA5 */ + { 0xFF66, 0, 0, nullptr }, /* 0xA6 */ + { 0xFF67, 0, 0, nullptr }, /* 0xA7 */ + { 0xFF68, 0, 0, nullptr }, /* 0xA8 */ + { 0xFF69, 0, 0, nullptr }, /* 0xA9 */ + { 0xFF6A, 0, 0, nullptr }, /* 0xAA */ + { 0xFF6B, 0, 0, nullptr }, /* 0xAB */ + { 0xFF6C, 0, 0, nullptr }, /* 0xAC */ + { 0xFF6D, 0, 0, nullptr }, /* 0xAD */ + { 0xFF6E, 0, 0, nullptr }, /* 0xAE */ + { 0xFF6F, 0, 0, nullptr }, /* 0xAF */ + { 0xFF70, 0, 0, nullptr }, /* 0xB0 */ + { 0xFF71, 0, 0, nullptr }, /* 0xB1 */ + { 0xFF72, 0, 0, nullptr }, /* 0xB2 */ + { 0xFF73, 0, 0, nullptr }, /* 0xB3 */ + { 0xFF74, 0, 0, nullptr }, /* 0xB4 */ + { 0xFF75, 0, 0, nullptr }, /* 0xB5 */ + { 0xFF76, 0, 0, nullptr }, /* 0xB6 */ + { 0xFF77, 0, 0, nullptr }, /* 0xB7 */ + { 0xFF78, 0, 0, nullptr }, /* 0xB8 */ + { 0xFF79, 0, 0, nullptr }, /* 0xB9 */ + { 0xFF7A, 0, 0, nullptr }, /* 0xBA */ + { 0xFF7B, 0, 0, nullptr }, /* 0xBB */ + { 0xFF7C, 0, 0, nullptr }, /* 0xBC */ + { 0xFF7D, 0, 0, nullptr }, /* 0xBD */ + { 0xFF7E, 0, 0, nullptr }, /* 0xBE */ + { 0xFF7F, 0, 0, nullptr }, /* 0xBF */ + { 0xFF80, 0, 0, nullptr }, /* 0xC0 */ + { 0xFF81, 0, 0, nullptr }, /* 0xC1 */ + { 0xFF82, 0, 0, nullptr }, /* 0xC2 */ + { 0xFF83, 0, 0, nullptr }, /* 0xC3 */ + { 0xFF84, 0, 0, nullptr }, /* 0xC4 */ + { 0xFF85, 0, 0, nullptr }, /* 0xC5 */ + { 0xFF86, 0, 0, nullptr }, /* 0xC6 */ + { 0xFF87, 0, 0, nullptr }, /* 0xC7 */ + { 0xFF88, 0, 0, nullptr }, /* 0xC8 */ + { 0xFF89, 0, 0, nullptr }, /* 0xC9 */ + { 0xFF8A, 0, 0, nullptr }, /* 0xCA */ + { 0xFF8B, 0, 0, nullptr }, /* 0xCB */ + { 0xFF8C, 0, 0, nullptr }, /* 0xCC */ + { 0xFF8D, 0, 0, nullptr }, /* 0xCD */ + { 0xFF8E, 0, 0, nullptr }, /* 0xCE */ + { 0xFF8F, 0, 0, nullptr }, /* 0xCF */ + { 0xFF90, 0, 0, nullptr }, /* 0xD0 */ + { 0xFF91, 0, 0, nullptr }, /* 0xD1 */ + { 0xFF92, 0, 0, nullptr }, /* 0xD2 */ + { 0xFF93, 0, 0, nullptr }, /* 0xD3 */ + { 0xFF94, 0, 0, nullptr }, /* 0xD4 */ + { 0xFF95, 0, 0, nullptr }, /* 0xD5 */ + { 0xFF96, 0, 0, nullptr }, /* 0xD6 */ + { 0xFF97, 0, 0, nullptr }, /* 0xD7 */ + { 0xFF98, 0, 0, nullptr }, /* 0xD8 */ + { 0xFF99, 0, 0, nullptr }, /* 0xD9 */ + { 0xFF9A, 0, 0, nullptr }, /* 0xDA */ + { 0xFF9B, 0, 0, nullptr }, /* 0xDB */ + { 0xFF9C, 0, 0, nullptr }, /* 0xDC */ + { 0xFF9D, 0, 0, nullptr }, /* 0xDD */ + { 0xFF9E, 0, 0, nullptr }, /* 0xDE */ + { 0xFF9F, 0, 0, nullptr }, /* 0xDF */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 }, /* 0xE9 */ + { 0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA }, /* 0xEA */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEC */ /* We convert this as double byte */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_ED }, /* 0xED */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_EE }, /* 0xEE */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEF */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF0 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF1 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF2 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF3 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF4 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF5 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF6 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF7 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* EUDC Range */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA }, /* 0xFA */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB }, /* 0xFB */ + { 0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC }, /* 0xFC */ + { 0x00A9, 0, 0, nullptr }, /* 0xFD */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0x2122, 0, 0, nullptr }, /* 0xFE */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ + { 0x2026, 0, 0, nullptr } /* 0xFF */ /* APPLE additions over SJIS, we convert this like Apple, because I think, this gives better result, then we take a replacement char */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aMS932DBCSHighTab[256] = +{ + { 0x00, 0xF7, aImplUniToDBCSTab_SJIS_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 1, 0, nullptr }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 }, /* 0x20 */ + { 0x03, 0xD4, aImplUniToDBCSTab_MS932_21 }, /* 0x21 */ + { 0x00, 0xBF, aImplUniToDBCSTab_MS932_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 }, /* 0x23 */ + { 0x60, 0x73, aImplUniToDBCSTab_MS932_24 }, /* 0x24 */ + { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 }, /* 0x25 */ + { 0x05, 0x6F, aImplUniToDBCSTab_SJIS_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_30 }, /* 0x30 */ + { 1, 0, nullptr }, /* 0x31 */ + { 0x31, 0xA8, aImplUniToDBCSTab_MS932_32 }, /* 0x32 */ + { 0x03, 0xCD, aImplUniToDBCSTab_MS932_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E }, /* 0x4E */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F }, /* 0x4F */ + { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 }, /* 0x50 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 }, /* 0x52 */ + { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 }, /* 0x54 */ + { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 }, /* 0x55 */ + { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 }, /* 0x56 */ + { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 }, /* 0x59 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A }, /* 0x5A */ + { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C }, /* 0x5C */ + { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F }, /* 0x5F */ + { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 }, /* 0x62 */ + { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 }, /* 0x63 */ + { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 }, /* 0x64 */ + { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 }, /* 0x67 */ + { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 }, /* 0x69 */ + { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A }, /* 0x6A */ + { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B }, /* 0x6B */ + { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C }, /* 0x6C */ + { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D }, /* 0x6D */ + { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F }, /* 0x6F */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 }, /* 0x70 */ + { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 }, /* 0x71 */ + { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 }, /* 0x72 */ + { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 }, /* 0x73 */ + { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 }, /* 0x74 */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 }, /* 0x75 */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 }, /* 0x76 */ + { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 }, /* 0x77 */ + { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A }, /* 0x7A */ + { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D }, /* 0x7D */ + { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 }, /* 0x81 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 }, /* 0x83 */ + { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 }, /* 0x84 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 }, /* 0x85 */ + { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 }, /* 0x87 */ + { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 }, /* 0x88 */ + { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A }, /* 0x8A */ + { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B }, /* 0x8B */ + { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C }, /* 0x8C */ + { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D }, /* 0x8D */ + { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F }, /* 0x8F */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 }, /* 0x90 */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 }, /* 0x91 */ + { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 }, /* 0x92 */ + { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 }, /* 0x93 */ + { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 }, /* 0x97 */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 }, /* 0x99 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A }, /* 0x9A */ + { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B }, /* 0x9B */ + { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C }, /* 0x9C */ + { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D }, /* 0x9D */ + { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E }, /* 0x9E */ + { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 }, /* 0xF9 */ + { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 1, 0, nullptr }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplMS932DBCSCvtData = +{ + aMS932UniLeadTab, + aMS932DBCSHighTab, + aImplSJISDBCSEUDCTab, + DBCS_EUDC_SJIS_COUNT, + 0x00, 0xFF, + 0x40, 0xFC, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS932TextEncodingData + = { { &aImplMS932DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "shift_jis", + 1, + 2, + 2, + 128, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* WIN/DOS/OS2, SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aAPPLEJAPANESEUniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ /* is A5 (YEN SIGN), but for compatibility with ASCII, we use 0x5C like MS CP392 */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ /* in SJIS this is 0x0203E (SPACING OVERSCORE), but for compatibility with ASCII, we use 0x7E (TILDE) like MS CP392 */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x005C, 0, 0, nullptr }, /* 0x80 */ /* APPLE additions over SJIS */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 }, /* 0x81 */ + { 0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 }, /* 0x82 */ + { 0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 }, /* 0x83 */ + { 0, 0x40, 0xBE, aImplDBCSToUniTab_SJIS_84 }, /* 0x84 */ + { 0, 0x40, 0xF4, aImplDBCSToUniTab_APPLEJAPANESE_85 }, /* 0x85 */ + { 0, 0x40, 0xD2, aImplDBCSToUniTab_APPLEJAPANESE_86 }, /* 0x86 */ + { 0, 0x40, 0xFA, aImplDBCSToUniTab_APPLEJAPANESE_87 }, /* 0x87 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_APPLEJAPANESE_88 }, /* 0x88 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 }, /* 0x89 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A }, /* 0x8A */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B }, /* 0x8B */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C }, /* 0x8C */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D }, /* 0x8D */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E }, /* 0x8E */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F }, /* 0x8F */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 }, /* 0x90 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 }, /* 0x91 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 }, /* 0x92 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 }, /* 0x93 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 }, /* 0x94 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 }, /* 0x95 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 }, /* 0x96 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 }, /* 0x97 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 }, /* 0x98 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 }, /* 0x99 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A }, /* 0x9A */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B }, /* 0x9B */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C }, /* 0x9C */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D }, /* 0x9D */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E }, /* 0x9E */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F }, /* 0x9F */ + { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ /* APPLE additions over SJIS */ + { 0xFF61, 0, 0, nullptr }, /* 0xA1 */ + { 0xFF62, 0, 0, nullptr }, /* 0xA2 */ + { 0xFF63, 0, 0, nullptr }, /* 0xA3 */ + { 0xFF64, 0, 0, nullptr }, /* 0xA4 */ + { 0xFF65, 0, 0, nullptr }, /* 0xA5 */ + { 0xFF66, 0, 0, nullptr }, /* 0xA6 */ + { 0xFF67, 0, 0, nullptr }, /* 0xA7 */ + { 0xFF68, 0, 0, nullptr }, /* 0xA8 */ + { 0xFF69, 0, 0, nullptr }, /* 0xA9 */ + { 0xFF6A, 0, 0, nullptr }, /* 0xAA */ + { 0xFF6B, 0, 0, nullptr }, /* 0xAB */ + { 0xFF6C, 0, 0, nullptr }, /* 0xAC */ + { 0xFF6D, 0, 0, nullptr }, /* 0xAD */ + { 0xFF6E, 0, 0, nullptr }, /* 0xAE */ + { 0xFF6F, 0, 0, nullptr }, /* 0xAF */ + { 0xFF70, 0, 0, nullptr }, /* 0xB0 */ + { 0xFF71, 0, 0, nullptr }, /* 0xB1 */ + { 0xFF72, 0, 0, nullptr }, /* 0xB2 */ + { 0xFF73, 0, 0, nullptr }, /* 0xB3 */ + { 0xFF74, 0, 0, nullptr }, /* 0xB4 */ + { 0xFF75, 0, 0, nullptr }, /* 0xB5 */ + { 0xFF76, 0, 0, nullptr }, /* 0xB6 */ + { 0xFF77, 0, 0, nullptr }, /* 0xB7 */ + { 0xFF78, 0, 0, nullptr }, /* 0xB8 */ + { 0xFF79, 0, 0, nullptr }, /* 0xB9 */ + { 0xFF7A, 0, 0, nullptr }, /* 0xBA */ + { 0xFF7B, 0, 0, nullptr }, /* 0xBB */ + { 0xFF7C, 0, 0, nullptr }, /* 0xBC */ + { 0xFF7D, 0, 0, nullptr }, /* 0xBD */ + { 0xFF7E, 0, 0, nullptr }, /* 0xBE */ + { 0xFF7F, 0, 0, nullptr }, /* 0xBF */ + { 0xFF80, 0, 0, nullptr }, /* 0xC0 */ + { 0xFF81, 0, 0, nullptr }, /* 0xC1 */ + { 0xFF82, 0, 0, nullptr }, /* 0xC2 */ + { 0xFF83, 0, 0, nullptr }, /* 0xC3 */ + { 0xFF84, 0, 0, nullptr }, /* 0xC4 */ + { 0xFF85, 0, 0, nullptr }, /* 0xC5 */ + { 0xFF86, 0, 0, nullptr }, /* 0xC6 */ + { 0xFF87, 0, 0, nullptr }, /* 0xC7 */ + { 0xFF88, 0, 0, nullptr }, /* 0xC8 */ + { 0xFF89, 0, 0, nullptr }, /* 0xC9 */ + { 0xFF8A, 0, 0, nullptr }, /* 0xCA */ + { 0xFF8B, 0, 0, nullptr }, /* 0xCB */ + { 0xFF8C, 0, 0, nullptr }, /* 0xCC */ + { 0xFF8D, 0, 0, nullptr }, /* 0xCD */ + { 0xFF8E, 0, 0, nullptr }, /* 0xCE */ + { 0xFF8F, 0, 0, nullptr }, /* 0xCF */ + { 0xFF90, 0, 0, nullptr }, /* 0xD0 */ + { 0xFF91, 0, 0, nullptr }, /* 0xD1 */ + { 0xFF92, 0, 0, nullptr }, /* 0xD2 */ + { 0xFF93, 0, 0, nullptr }, /* 0xD3 */ + { 0xFF94, 0, 0, nullptr }, /* 0xD4 */ + { 0xFF95, 0, 0, nullptr }, /* 0xD5 */ + { 0xFF96, 0, 0, nullptr }, /* 0xD6 */ + { 0xFF97, 0, 0, nullptr }, /* 0xD7 */ + { 0xFF98, 0, 0, nullptr }, /* 0xD8 */ + { 0xFF99, 0, 0, nullptr }, /* 0xD9 */ + { 0xFF9A, 0, 0, nullptr }, /* 0xDA */ + { 0xFF9B, 0, 0, nullptr }, /* 0xDB */ + { 0xFF9C, 0, 0, nullptr }, /* 0xDC */ + { 0xFF9D, 0, 0, nullptr }, /* 0xDD */ + { 0xFF9E, 0, 0, nullptr }, /* 0xDE */ + { 0xFF9F, 0, 0, nullptr }, /* 0xDF */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 }, /* 0xE9 */ + { 0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA }, /* 0xEA */ + { 0, 0x51, 0x7A, aImplDBCSToUniTab_APPLEJAPANESE_EB }, /* 0xEB */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xED */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEE */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xEF */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF0 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF1 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF2 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF3 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF4 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF5 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF6 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF7 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* EUDC Range */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* EUDC Range */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA }, /* 0xFA */ /* We use the MS table for better MS compatibility */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB }, /* 0xFB */ /* We use the MS table for better MS compatibility */ + { 0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC }, /* 0xFC */ /* We use the MS table for better MS compatibility */ + { 0x00A9, 0, 0, nullptr }, /* 0xFD */ /* APPLE additions over SJIS */ + { 0x2122, 0, 0, nullptr }, /* 0xFE */ /* APPLE additions over SJIS */ + { 0x2026, 0, 0, nullptr } /* 0xFF */ /* APPLE additions over SJIS */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aAPPLEJAPANESEDBCSHighTab[256] = +{ + { 0x00, 0xF7, aImplUniToDBCSTab_APPLEJAPANESE_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 1, 0, nullptr }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 }, /* 0x20 */ + { 0x03, 0xE9, aImplUniToDBCSTab_APPLEJAPANESE_21 }, /* 0x21 */ + { 0x00, 0xEF, aImplUniToDBCSTab_APPLEJAPANESE_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 }, /* 0x23 */ + { 0x60, 0xB5, aImplUniToDBCSTab_APPLEJAPANESE_24 }, /* 0x24 */ + { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 }, /* 0x25 */ + { 0x05, 0x6F, aImplUniToDBCSTab_APPLEJAPANESE_26 }, /* 0x26 */ + { 0x76, 0x7E, aImplUniToDBCSTab_APPLEJAPANESE_27 }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_APPLEJAPANESE_30 }, /* 0x30 */ + { 1, 0, nullptr }, /* 0x31 */ + { 0x2A, 0xA9, aImplUniToDBCSTab_APPLEJAPANESE_32 }, /* 0x32 */ + { 0x00, 0xD4, aImplUniToDBCSTab_APPLEJAPANESE_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E }, /* 0x4E */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F }, /* 0x4F */ + { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 }, /* 0x50 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 }, /* 0x52 */ + { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 }, /* 0x54 */ + { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 }, /* 0x55 */ + { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 }, /* 0x56 */ + { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 }, /* 0x59 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A }, /* 0x5A */ + { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C }, /* 0x5C */ + { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F }, /* 0x5F */ + { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 }, /* 0x62 */ + { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 }, /* 0x63 */ + { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 }, /* 0x64 */ + { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 }, /* 0x67 */ + { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 }, /* 0x69 */ + { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A }, /* 0x6A */ + { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B }, /* 0x6B */ + { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C }, /* 0x6C */ + { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D }, /* 0x6D */ + { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F }, /* 0x6F */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 }, /* 0x70 */ + { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 }, /* 0x71 */ + { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 }, /* 0x72 */ + { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 }, /* 0x73 */ + { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 }, /* 0x74 */ + { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 }, /* 0x75 */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 }, /* 0x76 */ + { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 }, /* 0x77 */ + { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A }, /* 0x7A */ + { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D }, /* 0x7D */ + { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 }, /* 0x81 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 }, /* 0x83 */ + { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 }, /* 0x84 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 }, /* 0x85 */ + { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 }, /* 0x87 */ + { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 }, /* 0x88 */ + { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A }, /* 0x8A */ + { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B }, /* 0x8B */ + { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C }, /* 0x8C */ + { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D }, /* 0x8D */ + { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F }, /* 0x8F */ + { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 }, /* 0x90 */ + { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 }, /* 0x91 */ + { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 }, /* 0x92 */ + { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 }, /* 0x93 */ + { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 }, /* 0x97 */ + { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 }, /* 0x99 */ + { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A }, /* 0x9A */ + { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B }, /* 0x9B */ + { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C }, /* 0x9C */ + { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D }, /* 0x9D */ + { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E }, /* 0x9E */ + { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 }, /* 0xF9 */ + { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x30, 0x44, aImplUniToDBCSTab_APPLEJAPANESE_FE }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplAPPLEJAPANESEDBCSCvtData = +{ + aAPPLEJAPANESEUniLeadTab, + aAPPLEJAPANESEDBCSHighTab, + aImplSJISDBCSEUDCTab, + DBCS_EUDC_SJIS_COUNT, + 0x00, 0xFF, + 0x40, 0xFC, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLEJAPANESETextEncodingData + = { { &aImplAPPLEJAPANESEDBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "shift_jis", + 1, + 2, + 2, + 128, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* MAC, SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aJIS0208UniLeadTab[128] = +{ + { 0, 1, 0, nullptr }, /* 0x00 */ + { 0, 1, 0, nullptr }, /* 0x01 */ + { 0, 1, 0, nullptr }, /* 0x02 */ + { 0, 1, 0, nullptr }, /* 0x03 */ + { 0, 1, 0, nullptr }, /* 0x04 */ + { 0, 1, 0, nullptr }, /* 0x05 */ + { 0, 1, 0, nullptr }, /* 0x06 */ + { 0, 1, 0, nullptr }, /* 0x07 */ + { 0, 1, 0, nullptr }, /* 0x08 */ + { 0, 1, 0, nullptr }, /* 0x09 */ + { 0, 1, 0, nullptr }, /* 0x0A */ + { 0, 1, 0, nullptr }, /* 0x0B */ + { 0, 1, 0, nullptr }, /* 0x0C */ + { 0, 1, 0, nullptr }, /* 0x0D */ + { 0, 1, 0, nullptr }, /* 0x0E */ + { 0, 1, 0, nullptr }, /* 0x0F */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x10 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x11 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x12 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x13 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x14 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x15 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x16 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x17 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x18 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x19 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x20 */ /* We convert this as double byte */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_21 }, /* 0x21 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_22 }, /* 0x22 */ + { 0, 0x30, 0x7A, aImplDBCSToUniTab_JIS0208_23 }, /* 0x23 */ + { 0, 0x21, 0x73, aImplDBCSToUniTab_JIS0208_24 }, /* 0x24 */ + { 0, 0x21, 0x76, aImplDBCSToUniTab_JIS0208_25 }, /* 0x25 */ + { 0, 0x21, 0x58, aImplDBCSToUniTab_JIS0208_26 }, /* 0x26 */ + { 0, 0x21, 0x71, aImplDBCSToUniTab_JIS0208_27 }, /* 0x27 */ + { 0, 0x21, 0x40, aImplDBCSToUniTab_JIS0208_28 }, /* 0x28 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x29 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2C */ /* We convert this as double byte */ + { 0, 0x21, 0x7C, aImplDBCSToUniTab_JIS0208_2D }, /* 0x2D */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2F */ /* We convert this as double byte */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_30 }, /* 0x30 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_31 }, /* 0x31 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_32 }, /* 0x32 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_33 }, /* 0x33 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_34 }, /* 0x34 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_35 }, /* 0x35 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_36 }, /* 0x36 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_37 }, /* 0x37 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_38 }, /* 0x38 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_39 }, /* 0x39 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3A }, /* 0x3A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3B }, /* 0x3B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3C }, /* 0x3C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3D }, /* 0x3D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3E }, /* 0x3E */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3F }, /* 0x3F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_40 }, /* 0x40 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_41 }, /* 0x41 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_42 }, /* 0x42 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_43 }, /* 0x43 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_44 }, /* 0x44 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_45 }, /* 0x45 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_46 }, /* 0x46 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_47 }, /* 0x47 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_48 }, /* 0x48 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_49 }, /* 0x49 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4A }, /* 0x4A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4B }, /* 0x4B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4C }, /* 0x4C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4D }, /* 0x4D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4E }, /* 0x4E */ + { 0, 0x21, 0x53, aImplDBCSToUniTab_JIS0208_4F }, /* 0x4F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_50 }, /* 0x50 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_51 }, /* 0x51 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_52 }, /* 0x52 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_53 }, /* 0x53 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_54 }, /* 0x54 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_55 }, /* 0x55 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_56 }, /* 0x56 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_57 }, /* 0x57 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_58 }, /* 0x58 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_59 }, /* 0x59 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5A }, /* 0x5A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5B }, /* 0x5B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5C }, /* 0x5C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5D }, /* 0x5D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5E }, /* 0x5E */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5F }, /* 0x5F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_60 }, /* 0x60 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_61 }, /* 0x61 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_62 }, /* 0x62 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_63 }, /* 0x63 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_64 }, /* 0x64 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_65 }, /* 0x65 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_66 }, /* 0x66 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_67 }, /* 0x67 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_68 }, /* 0x68 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_69 }, /* 0x69 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6A }, /* 0x6A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6B }, /* 0x6B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6C }, /* 0x6C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6D }, /* 0x6D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6E }, /* 0x6E */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6F }, /* 0x6F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_70 }, /* 0x70 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_71 }, /* 0x71 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_72 }, /* 0x72 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_73 }, /* 0x73 */ + { 0, 0x21, 0x26, aImplDBCSToUniTab_JIS0208_74 }, /* 0x74 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x75 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x76 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x77 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x78 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x79 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7E */ /* We convert this as double byte */ + { 0, 1, 0, nullptr } /* 0x7F */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aJIS0208DBCSHighTab[256] = +{ + { 0xA2, 0xF7, aImplUniToDBCSTab_JIS0208_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 1, 0, nullptr }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_JIS0208_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_JIS0208_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x10, 0x3B, aImplUniToDBCSTab_JIS0208_20 }, /* 0x20 */ + { 0x03, 0xD4, aImplUniToDBCSTab_JIS0208_21 }, /* 0x21 */ + { 0x00, 0xBF, aImplUniToDBCSTab_JIS0208_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_JIS0208_23 }, /* 0x23 */ + { 0x60, 0x73, aImplUniToDBCSTab_JIS0208_24 }, /* 0x24 */ + { 0x00, 0xEF, aImplUniToDBCSTab_JIS0208_25 }, /* 0x25 */ + { 0x05, 0x6F, aImplUniToDBCSTab_JIS0208_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_30 }, /* 0x30 */ + { 1, 0, nullptr }, /* 0x31 */ + { 0x31, 0xA8, aImplUniToDBCSTab_JIS0208_32 }, /* 0x32 */ + { 0x03, 0xCD, aImplUniToDBCSTab_JIS0208_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_4E }, /* 0x4E */ + { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_4F }, /* 0x4F */ + { 0x05, 0xFB, aImplUniToDBCSTab_JIS0208_50 }, /* 0x50 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_52 }, /* 0x52 */ + { 0x01, 0xFA, aImplUniToDBCSTab_JIS0208_53 }, /* 0x53 */ + { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_54 }, /* 0x54 */ + { 0x04, 0xFE, aImplUniToDBCSTab_JIS0208_55 }, /* 0x55 */ + { 0x06, 0xFF, aImplUniToDBCSTab_JIS0208_56 }, /* 0x56 */ + { 0x00, 0xFC, aImplUniToDBCSTab_JIS0208_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_59 }, /* 0x59 */ + { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_5A }, /* 0x5A */ + { 0x09, 0xFF, aImplUniToDBCSTab_JIS0208_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_5C }, /* 0x5C */ + { 0x07, 0xFE, aImplUniToDBCSTab_JIS0208_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_JIS0208_5F }, /* 0x5F */ + { 0x0E, 0xFB, aImplUniToDBCSTab_JIS0208_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_62 }, /* 0x62 */ + { 0x01, 0xFA, aImplUniToDBCSTab_JIS0208_63 }, /* 0x63 */ + { 0x06, 0xFE, aImplUniToDBCSTab_JIS0208_64 }, /* 0x64 */ + { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_65 }, /* 0x65 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_67 }, /* 0x67 */ + { 0x02, 0xFA, aImplUniToDBCSTab_JIS0208_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_69 }, /* 0x69 */ + { 0x02, 0xFB, aImplUniToDBCSTab_JIS0208_6A }, /* 0x6A */ + { 0x04, 0xF3, aImplUniToDBCSTab_JIS0208_6B }, /* 0x6B */ + { 0x08, 0xF3, aImplUniToDBCSTab_JIS0208_6C }, /* 0x6C */ + { 0x0B, 0xFB, aImplUniToDBCSTab_JIS0208_6D }, /* 0x6D */ + { 0x05, 0xFF, aImplUniToDBCSTab_JIS0208_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_6F }, /* 0x6F */ + { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_70 }, /* 0x70 */ + { 0x09, 0xFF, aImplUniToDBCSTab_JIS0208_71 }, /* 0x71 */ + { 0x06, 0xFD, aImplUniToDBCSTab_JIS0208_72 }, /* 0x72 */ + { 0x0A, 0xFE, aImplUniToDBCSTab_JIS0208_73 }, /* 0x73 */ + { 0x03, 0xF8, aImplUniToDBCSTab_JIS0208_74 }, /* 0x74 */ + { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_75 }, /* 0x75 */ + { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_76 }, /* 0x76 */ + { 0x01, 0xFC, aImplUniToDBCSTab_JIS0208_77 }, /* 0x77 */ + { 0x02, 0xFD, aImplUniToDBCSTab_JIS0208_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_7A }, /* 0x7A */ + { 0x02, 0xF7, aImplUniToDBCSTab_JIS0208_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_7D }, /* 0x7D */ + { 0x01, 0x9C, aImplUniToDBCSTab_JIS0208_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_JIS0208_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_JIS0208_81 }, /* 0x81 */ + { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_82 }, /* 0x82 */ + { 0x02, 0xFD, aImplUniToDBCSTab_JIS0208_83 }, /* 0x83 */ + { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_84 }, /* 0x84 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_85 }, /* 0x85 */ + { 0x02, 0xFE, aImplUniToDBCSTab_JIS0208_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_87 }, /* 0x87 */ + { 0x05, 0xFE, aImplUniToDBCSTab_JIS0208_88 }, /* 0x88 */ + { 0x02, 0xF8, aImplUniToDBCSTab_JIS0208_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_8A }, /* 0x8A */ + { 0x00, 0x9A, aImplUniToDBCSTab_JIS0208_8B }, /* 0x8B */ + { 0x37, 0xFD, aImplUniToDBCSTab_JIS0208_8C }, /* 0x8C */ + { 0x04, 0xFF, aImplUniToDBCSTab_JIS0208_8D }, /* 0x8D */ + { 0x08, 0xFE, aImplUniToDBCSTab_JIS0208_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_JIS0208_8F }, /* 0x8F */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_90 }, /* 0x90 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_91 }, /* 0x91 */ + { 0x0D, 0xFC, aImplUniToDBCSTab_JIS0208_92 }, /* 0x92 */ + { 0x06, 0xE8, aImplUniToDBCSTab_JIS0208_93 }, /* 0x93 */ + { 0x03, 0x81, aImplUniToDBCSTab_JIS0208_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_JIS0208_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_JIS0208_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_97 }, /* 0x97 */ + { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_99 }, /* 0x99 */ + { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_9A }, /* 0x9A */ + { 0x06, 0xF5, aImplUniToDBCSTab_JIS0208_9B }, /* 0x9B */ + { 0x04, 0xF6, aImplUniToDBCSTab_JIS0208_9C }, /* 0x9C */ + { 0x03, 0xFD, aImplUniToDBCSTab_JIS0208_9D }, /* 0x9D */ + { 0x1A, 0xFD, aImplUniToDBCSTab_JIS0208_9E }, /* 0x9E */ + { 0x07, 0xA0, aImplUniToDBCSTab_JIS0208_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 1, 0, nullptr }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 1, 0, nullptr }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_JIS0208_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSToUniLeadTab const aJIS0212UniLeadTab[128] = +{ + { 0, 1, 0, nullptr }, /* 0x00 */ + { 0, 1, 0, nullptr }, /* 0x01 */ + { 0, 1, 0, nullptr }, /* 0x02 */ + { 0, 1, 0, nullptr }, /* 0x03 */ + { 0, 1, 0, nullptr }, /* 0x04 */ + { 0, 1, 0, nullptr }, /* 0x05 */ + { 0, 1, 0, nullptr }, /* 0x06 */ + { 0, 1, 0, nullptr }, /* 0x07 */ + { 0, 1, 0, nullptr }, /* 0x08 */ + { 0, 1, 0, nullptr }, /* 0x09 */ + { 0, 1, 0, nullptr }, /* 0x0A */ + { 0, 1, 0, nullptr }, /* 0x0B */ + { 0, 1, 0, nullptr }, /* 0x0C */ + { 0, 1, 0, nullptr }, /* 0x0D */ + { 0, 1, 0, nullptr }, /* 0x0E */ + { 0, 1, 0, nullptr }, /* 0x0F */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x10 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x11 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x12 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x13 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x14 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x15 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x16 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x17 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x18 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x19 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x1F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x20 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x21 */ /* We convert this as double byte */ + { 0, 0x2F, 0x71, aImplDBCSToUniTab_JIS0212_22 }, /* 0x22 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x23 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x24 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x25 */ /* We convert this as double byte */ + { 0, 0x61, 0x7C, aImplDBCSToUniTab_JIS0212_26 }, /* 0x26 */ + { 0, 0x42, 0x7E, aImplDBCSToUniTab_JIS0212_27 }, /* 0x27 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x28 */ /* We convert this as double byte */ + { 0, 0x21, 0x50, aImplDBCSToUniTab_JIS0212_29 }, /* 0x29 */ + { 0, 0x21, 0x77, aImplDBCSToUniTab_JIS0212_2A }, /* 0x2A */ + { 0, 0x21, 0x77, aImplDBCSToUniTab_JIS0212_2B }, /* 0x2B */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x2F */ /* We convert this as double byte */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_30 }, /* 0x30 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_31 }, /* 0x31 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_32 }, /* 0x32 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_33 }, /* 0x33 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_34 }, /* 0x34 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_35 }, /* 0x35 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_36 }, /* 0x36 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_37 }, /* 0x37 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_38 }, /* 0x38 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_39 }, /* 0x39 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3A }, /* 0x3A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3B }, /* 0x3B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3C }, /* 0x3C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3D }, /* 0x3D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3E }, /* 0x3E */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3F }, /* 0x3F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_40 }, /* 0x40 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_41 }, /* 0x41 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_42 }, /* 0x42 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_43 }, /* 0x43 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_44 }, /* 0x44 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_45 }, /* 0x45 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_46 }, /* 0x46 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_47 }, /* 0x47 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_48 }, /* 0x48 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_49 }, /* 0x49 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4A }, /* 0x4A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4B }, /* 0x4B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4C }, /* 0x4C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4D }, /* 0x4D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4E }, /* 0x4E */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4F }, /* 0x4F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_50 }, /* 0x50 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_51 }, /* 0x51 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_52 }, /* 0x52 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_53 }, /* 0x53 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_54 }, /* 0x54 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_55 }, /* 0x55 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_56 }, /* 0x56 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_57 }, /* 0x57 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_58 }, /* 0x58 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_59 }, /* 0x59 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5A }, /* 0x5A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5B }, /* 0x5B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5C }, /* 0x5C */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5D }, /* 0x5D */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5E }, /* 0x5E */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5F }, /* 0x5F */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_60 }, /* 0x60 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_61 }, /* 0x61 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_62 }, /* 0x62 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_63 }, /* 0x63 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_64 }, /* 0x64 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_65 }, /* 0x65 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_66 }, /* 0x66 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_67 }, /* 0x67 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_68 }, /* 0x68 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_69 }, /* 0x69 */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6A }, /* 0x6A */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6B }, /* 0x6B */ + { 0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6C }, /* 0x6C */ + { 0, 0x21, 0x63, aImplDBCSToUniTab_JIS0212_6D }, /* 0x6D */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x6E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x6F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x70 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x71 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x72 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x73 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x74 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x75 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x76 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x77 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x78 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x79 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x7E */ /* We convert this as double byte */ + { 0, 1, 0, nullptr } /* 0x7F */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aJIS0212DBCSHighTab[256] = +{ + { 0xA1, 0xFF, aImplUniToDBCSTab_JIS0212_00 }, /* 0x00 */ + { 0x00, 0xF5, aImplUniToDBCSTab_JIS0212_01 }, /* 0x01 */ + { 0xC7, 0xDD, aImplUniToDBCSTab_JIS0212_02 }, /* 0x02 */ + { 0x84, 0xCE, aImplUniToDBCSTab_JIS0212_03 }, /* 0x03 */ + { 0x02, 0x5F, aImplUniToDBCSTab_JIS0212_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 1, 0, nullptr }, /* 0x20 */ + { 0x16, 0x22, aImplUniToDBCSTab_JIS0212_21 }, /* 0x21 */ + { 1, 0, nullptr }, /* 0x22 */ + { 1, 0, nullptr }, /* 0x23 */ + { 1, 0, nullptr }, /* 0x24 */ + { 1, 0, nullptr }, /* 0x25 */ + { 1, 0, nullptr }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 1, 0, nullptr }, /* 0x30 */ + { 1, 0, nullptr }, /* 0x31 */ + { 1, 0, nullptr }, /* 0x32 */ + { 1, 0, nullptr }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_4E }, /* 0x4E */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_4F }, /* 0x4F */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_50 }, /* 0x50 */ + { 0x03, 0xF7, aImplUniToDBCSTab_JIS0212_51 }, /* 0x51 */ + { 0x01, 0xF7, aImplUniToDBCSTab_JIS0212_52 }, /* 0x52 */ + { 0x00, 0xF5, aImplUniToDBCSTab_JIS0212_53 }, /* 0x53 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_54 }, /* 0x54 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_55 }, /* 0x55 */ + { 0x05, 0xF7, aImplUniToDBCSTab_JIS0212_56 }, /* 0x56 */ + { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_57 }, /* 0x57 */ + { 0x03, 0xF3, aImplUniToDBCSTab_JIS0212_58 }, /* 0x58 */ + { 0x05, 0xF7, aImplUniToDBCSTab_JIS0212_59 }, /* 0x59 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_5A }, /* 0x5A */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_5B }, /* 0x5B */ + { 0x0C, 0xF4, aImplUniToDBCSTab_JIS0212_5C }, /* 0x5C */ + { 0x01, 0xF9, aImplUniToDBCSTab_JIS0212_5D }, /* 0x5D */ + { 0x00, 0xEB, aImplUniToDBCSTab_JIS0212_5E }, /* 0x5E */ + { 0x02, 0xFC, aImplUniToDBCSTab_JIS0212_5F }, /* 0x5F */ + { 0x07, 0xFD, aImplUniToDBCSTab_JIS0212_60 }, /* 0x60 */ + { 0x02, 0xEF, aImplUniToDBCSTab_JIS0212_61 }, /* 0x61 */ + { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_62 }, /* 0x62 */ + { 0x03, 0xF9, aImplUniToDBCSTab_JIS0212_63 }, /* 0x63 */ + { 0x09, 0xFF, aImplUniToDBCSTab_JIS0212_64 }, /* 0x64 */ + { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_65 }, /* 0x65 */ + { 0x00, 0xFB, aImplUniToDBCSTab_JIS0212_66 }, /* 0x66 */ + { 0x05, 0xF9, aImplUniToDBCSTab_JIS0212_67 }, /* 0x67 */ + { 0x04, 0xFD, aImplUniToDBCSTab_JIS0212_68 }, /* 0x68 */ + { 0x06, 0xFE, aImplUniToDBCSTab_JIS0212_69 }, /* 0x69 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_6A }, /* 0x6A */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_6B }, /* 0x6B */ + { 0x02, 0xF4, aImplUniToDBCSTab_JIS0212_6C }, /* 0x6C */ + { 0x04, 0xFC, aImplUniToDBCSTab_JIS0212_6D }, /* 0x6D */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_6E }, /* 0x6E */ + { 0x04, 0xFD, aImplUniToDBCSTab_JIS0212_6F }, /* 0x6F */ + { 0x00, 0xFA, aImplUniToDBCSTab_JIS0212_70 }, /* 0x70 */ + { 0x03, 0xFE, aImplUniToDBCSTab_JIS0212_71 }, /* 0x71 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_72 }, /* 0x72 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_73 }, /* 0x73 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_74 }, /* 0x74 */ + { 0x06, 0xF9, aImplUniToDBCSTab_JIS0212_75 }, /* 0x75 */ + { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_76 }, /* 0x76 */ + { 0x00, 0xFB, aImplUniToDBCSTab_JIS0212_77 }, /* 0x77 */ + { 0x05, 0xFF, aImplUniToDBCSTab_JIS0212_78 }, /* 0x78 */ + { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_79 }, /* 0x79 */ + { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_7A }, /* 0x7A */ + { 0x07, 0xFE, aImplUniToDBCSTab_JIS0212_7B }, /* 0x7B */ + { 0x01, 0xF5, aImplUniToDBCSTab_JIS0212_7C }, /* 0x7C */ + { 0x03, 0xFA, aImplUniToDBCSTab_JIS0212_7D }, /* 0x7D */ + { 0x00, 0x9E, aImplUniToDBCSTab_JIS0212_7E }, /* 0x7E */ + { 0x3B, 0xFF, aImplUniToDBCSTab_JIS0212_7F }, /* 0x7F */ + { 0x07, 0xFE, aImplUniToDBCSTab_JIS0212_80 }, /* 0x80 */ + { 0x03, 0xFF, aImplUniToDBCSTab_JIS0212_81 }, /* 0x81 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_82 }, /* 0x82 */ + { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_83 }, /* 0x83 */ + { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_84 }, /* 0x84 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_85 }, /* 0x85 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_86 }, /* 0x86 */ + { 0x04, 0xFF, aImplUniToDBCSTab_JIS0212_87 }, /* 0x87 */ + { 0x01, 0xF7, aImplUniToDBCSTab_JIS0212_88 }, /* 0x88 */ + { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_89 }, /* 0x89 */ + { 0x04, 0xFF, aImplUniToDBCSTab_JIS0212_8A }, /* 0x8A */ + { 0x05, 0x9F, aImplUniToDBCSTab_JIS0212_8B }, /* 0x8B */ + { 0x38, 0xFF, aImplUniToDBCSTab_JIS0212_8C }, /* 0x8C */ + { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_8D }, /* 0x8D */ + { 0x01, 0xFA, aImplUniToDBCSTab_JIS0212_8E }, /* 0x8E */ + { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_8F }, /* 0x8F */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_90 }, /* 0x90 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_91 }, /* 0x91 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_92 }, /* 0x92 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_93 }, /* 0x93 */ + { 0x01, 0x84, aImplUniToDBCSTab_JIS0212_94 }, /* 0x94 */ + { 0x78, 0xE6, aImplUniToDBCSTab_JIS0212_95 }, /* 0x95 */ + { 0x1D, 0xFA, aImplUniToDBCSTab_JIS0212_96 }, /* 0x96 */ + { 0x02, 0xFA, aImplUniToDBCSTab_JIS0212_97 }, /* 0x97 */ + { 0x07, 0xF6, aImplUniToDBCSTab_JIS0212_98 }, /* 0x98 */ + { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_99 }, /* 0x99 */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_9A }, /* 0x9A */ + { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_9B }, /* 0x9B */ + { 0x00, 0xF9, aImplUniToDBCSTab_JIS0212_9C }, /* 0x9C */ + { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_9D }, /* 0x9D */ + { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_9E }, /* 0x9E */ + { 0x02, 0xA5, aImplUniToDBCSTab_JIS0212_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 1, 0, nullptr }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 1, 0, nullptr }, /* 0xFE */ + { 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplEUCJPConvertData const aImplEUCJPCvtData = +{ + aJIS0208UniLeadTab, + aJIS0212UniLeadTab, + aJIS0208DBCSHighTab, + aJIS0212DBCSHighTab +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplEUCJPTextEncodingData + = { { &aImplEUCJPCvtData, + ImplEUCJPToUnicode, + ImplUnicodeToEUCJP, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "euc-jp", + 1, + 3, + 2, + 128, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ + +/* ======================================================================= */ + +/* !!! JIS - X Encodings not complete !!! */ + +#define HALFWIDTHKANA_START 0xFF61 +#define HALFWIDTHKANA_END 0xFF9F + +unsigned char const aImplJISX0201Tab[HALFWIDTHKANA_END - HALFWIDTHKANA_START + 1] = +{ + 0xA1, 0xA2, 0xA3, 0xA4, 0x5A, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplJISX0201ByteCvtData = +{ + nullptr, + nullptr, + aImplJISX0201Tab, + nullptr, + nullptr, + 0, 0, + 0, 0, + HALFWIDTHKANA_START, HALFWIDTHKANA_END, + 0, 0, + 0 +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplJISX0201TextEncodingData + = { { &aImplJISX0201ByteCvtData, + nullptr, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "euc-jp", + 1, + 1, + 1, + 128, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ + +/* ======================================================================= */ + +ImplDBCSConvertData const aImplJISX0208DBCSCvtData = +{ + nullptr, + aJIS0208DBCSHighTab, + nullptr, + 0, + 0x00, 0xFF, + 0x21, 0x7E, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplJISX0208TextEncodingData + = { { &aImplJISX0208DBCSCvtData, + nullptr, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "euc-jp", + 2, + 2, + 2, + 128, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ + +/* ======================================================================= */ + +ImplDBCSConvertData const aImplJISX0212DBCSCvtData = +{ + nullptr, + aJIS0212DBCSHighTab, + nullptr, + 0, + 0x00, 0xFF, + 0x21, 0x7E, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplJISX0212TextEncodingData + = { { &aImplJISX0212DBCSCvtData, + nullptr, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-jp", + "euc-jp", + 2, + 2, + 2, + 128, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */ diff --git a/sal/textenc/tcvtkr1.tab b/sal/textenc/tcvtkr1.tab new file mode 100644 index 000000000..9160f5048 --- /dev/null +++ b/sal/textenc/tcvtkr1.tab @@ -0,0 +1,3314 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* Mapping tables from KS X 1001:1992 (formerly known as KS C 5601-1992) to + Unicode. + + The mappings are suitable for the EUC-KR encoding (first and second byte + each ranging from 0xA1 to 0xFE), and for ISO-2022-KR if you subtract + accordingly. But note that the tables are too "large" for both EUC-KR and + ISO-2022-KR (and map undefined input to Unicode code points), because they + also support UHC. + + The mappings also include UHC encoding (Unified Hangul Code, also known as + Microsoft Code Page 949), which is a superset of EUC-KR (extra first byte + range 0x81 to 0xA0, extra second byte ranges 0x41 to 0x5A, 0x61 to 0x7A, + and 0x81 to 0xA0, even within the original EUC-KR area). + + The mappings are also used for the HangulTalk encoding (Macintosh), although + this contains some other EUC-KR extensions (that are thus not supported): + special single byte characters 0x81, 0x82, 0x83, 0xFE, and 0xFF; extra + double byte characters within first byte range 0xA1 to 0xAD and second byte + range 0x41 to 0xFE, even within the original EUC-KR area). + */ + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAC02, 0xAC03, 0xAC05, 0xAC06, 0xAC0B, 0xAC0C, 0xAC0D, /* 0x40 */ + 0xAC0E, 0xAC0F, 0xAC18, 0xAC1E, 0xAC1F, 0xAC21, 0xAC22, 0xAC23, /* 0x40 */ + 0xAC25, 0xAC26, 0xAC27, 0xAC28, 0xAC29, 0xAC2A, 0xAC2B, 0xAC2E, /* 0x50 */ + 0xAC32, 0xAC33, 0xAC34, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAC35, 0xAC36, 0xAC37, 0xAC3A, 0xAC3B, 0xAC3D, 0xAC3E, /* 0x60 */ + 0xAC3F, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47, /* 0x60 */ + 0xAC48, 0xAC49, 0xAC4A, 0xAC4C, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, /* 0x70 */ + 0xAC52, 0xAC53, 0xAC55, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xAC56, 0xAC57, 0xAC59, 0xAC5A, 0xAC5B, 0xAC5D, 0xAC5E, /* 0x80 */ + 0xAC5F, 0xAC60, 0xAC61, 0xAC62, 0xAC63, 0xAC64, 0xAC65, 0xAC66, /* 0x80 */ + 0xAC67, 0xAC68, 0xAC69, 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, /* 0x90 */ + 0xAC6F, 0xAC72, 0xAC73, 0xAC75, 0xAC76, 0xAC79, 0xAC7B, 0xAC7C, /* 0x90 */ + 0xAC7D, 0xAC7E, 0xAC7F, 0xAC82, 0xAC87, 0xAC88, 0xAC8D, 0xAC8E, /* 0xA0 */ + 0xAC8F, 0xAC91, 0xAC92, 0xAC93, 0xAC95, 0xAC96, 0xAC97, 0xAC98, /* 0xA0 */ + 0xAC99, 0xAC9A, 0xAC9B, 0xAC9E, 0xACA2, 0xACA3, 0xACA4, 0xACA5, /* 0xB0 */ + 0xACA6, 0xACA7, 0xACAB, 0xACAD, 0xACAE, 0xACB1, 0xACB2, 0xACB3, /* 0xB0 */ + 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACBA, 0xACBE, 0xACBF, 0xACC0, /* 0xC0 */ + 0xACC2, 0xACC3, 0xACC5, 0xACC6, 0xACC7, 0xACC9, 0xACCA, 0xACCB, /* 0xC0 */ + 0xACCD, 0xACCE, 0xACCF, 0xACD0, 0xACD1, 0xACD2, 0xACD3, 0xACD4, /* 0xD0 */ + 0xACD6, 0xACD8, 0xACD9, 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, /* 0xD0 */ + 0xACDF, 0xACE2, 0xACE3, 0xACE5, 0xACE6, 0xACE9, 0xACEB, 0xACED, /* 0xE0 */ + 0xACEE, 0xACF2, 0xACF4, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, /* 0xE0 */ + 0xACFE, 0xACFF, 0xAD01, 0xAD02, 0xAD03, 0xAD05, 0xAD07, 0xAD08, /* 0xF0 */ + 0xAD09, 0xAD0A, 0xAD0B, 0xAD0E, 0xAD10, 0xAD12, 0xAD13 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAD14, 0xAD15, 0xAD16, 0xAD17, 0xAD19, 0xAD1A, 0xAD1B, /* 0x40 */ + 0xAD1D, 0xAD1E, 0xAD1F, 0xAD21, 0xAD22, 0xAD23, 0xAD24, 0xAD25, /* 0x40 */ + 0xAD26, 0xAD27, 0xAD28, 0xAD2A, 0xAD2B, 0xAD2E, 0xAD2F, 0xAD30, /* 0x50 */ + 0xAD31, 0xAD32, 0xAD33, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAD36, 0xAD37, 0xAD39, 0xAD3A, 0xAD3B, 0xAD3D, 0xAD3E, /* 0x60 */ + 0xAD3F, 0xAD40, 0xAD41, 0xAD42, 0xAD43, 0xAD46, 0xAD48, 0xAD4A, /* 0x60 */ + 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD51, 0xAD52, 0xAD53, /* 0x70 */ + 0xAD55, 0xAD56, 0xAD57, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, /* 0x80 */ + 0xAD60, 0xAD62, 0xAD64, 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, /* 0x80 */ + 0xAD6A, 0xAD6B, 0xAD6E, 0xAD6F, 0xAD71, 0xAD72, 0xAD77, 0xAD78, /* 0x90 */ + 0xAD79, 0xAD7A, 0xAD7E, 0xAD80, 0xAD83, 0xAD84, 0xAD85, 0xAD86, /* 0x90 */ + 0xAD87, 0xAD8A, 0xAD8B, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD91, 0xAD92, /* 0xA0 */ + 0xAD93, 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, 0xAD9A, /* 0xA0 */ + 0xAD9B, 0xAD9E, 0xAD9F, 0xADA0, 0xADA1, 0xADA2, 0xADA3, 0xADA5, /* 0xB0 */ + 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, 0xADAB, 0xADAC, 0xADAD, /* 0xB0 */ + 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB2, 0xADB3, 0xADB4, 0xADB5, /* 0xC0 */ + 0xADB6, 0xADB8, 0xADB9, 0xADBA, 0xADBB, 0xADBC, 0xADBD, 0xADBE, /* 0xC0 */ + 0xADBF, 0xADC2, 0xADC3, 0xADC5, 0xADC6, 0xADC7, 0xADC9, 0xADCA, /* 0xD0 */ + 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD2, 0xADD4, 0xADD5, /* 0xD0 */ + 0xADD6, 0xADD7, 0xADD8, 0xADD9, 0xADDA, 0xADDB, 0xADDD, 0xADDE, /* 0xE0 */ + 0xADDF, 0xADE1, 0xADE2, 0xADE3, 0xADE5, 0xADE6, 0xADE7, 0xADE8, /* 0xE0 */ + 0xADE9, 0xADEA, 0xADEB, 0xADEC, 0xADED, 0xADEE, 0xADEF, 0xADF0, /* 0xF0 */ + 0xADF1, 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6, 0xADF7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xADFA, 0xADFB, 0xADFD, 0xADFE, 0xAE02, 0xAE03, 0xAE04, /* 0x40 */ + 0xAE05, 0xAE06, 0xAE07, 0xAE0A, 0xAE0C, 0xAE0E, 0xAE0F, 0xAE10, /* 0x40 */ + 0xAE11, 0xAE12, 0xAE13, 0xAE15, 0xAE16, 0xAE17, 0xAE18, 0xAE19, /* 0x50 */ + 0xAE1A, 0xAE1B, 0xAE1C, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAE1D, 0xAE1E, 0xAE1F, 0xAE20, 0xAE21, 0xAE22, 0xAE23, /* 0x60 */ + 0xAE24, 0xAE25, 0xAE26, 0xAE27, 0xAE28, 0xAE29, 0xAE2A, 0xAE2B, /* 0x60 */ + 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0xAE32, 0xAE33, 0xAE35, 0xAE36, /* 0x70 */ + 0xAE39, 0xAE3B, 0xAE3C, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xAE3D, 0xAE3E, 0xAE3F, 0xAE42, 0xAE44, 0xAE47, 0xAE48, /* 0x80 */ + 0xAE49, 0xAE4B, 0xAE4F, 0xAE51, 0xAE52, 0xAE53, 0xAE55, 0xAE57, /* 0x80 */ + 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, 0xAE5E, 0xAE62, 0xAE63, 0xAE64, /* 0x90 */ + 0xAE66, 0xAE67, 0xAE6A, 0xAE6B, 0xAE6D, 0xAE6E, 0xAE6F, 0xAE71, /* 0x90 */ + 0xAE72, 0xAE73, 0xAE74, 0xAE75, 0xAE76, 0xAE77, 0xAE7A, 0xAE7E, /* 0xA0 */ + 0xAE7F, 0xAE80, 0xAE81, 0xAE82, 0xAE83, 0xAE86, 0xAE87, 0xAE88, /* 0xA0 */ + 0xAE89, 0xAE8A, 0xAE8B, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, /* 0xB0 */ + 0xAE92, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, 0xAE98, 0xAE99, /* 0xB0 */ + 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAE9E, 0xAE9F, 0xAEA0, 0xAEA1, /* 0xC0 */ + 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, /* 0xC0 */ + 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1, /* 0xD0 */ + 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5, 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, /* 0xD0 */ + 0xAEBA, 0xAEBB, 0xAEBF, 0xAEC1, 0xAEC2, 0xAEC3, 0xAEC5, 0xAEC6, /* 0xE0 */ + 0xAEC7, 0xAEC8, 0xAEC9, 0xAECA, 0xAECB, 0xAECE, 0xAED2, 0xAED3, /* 0xE0 */ + 0xAED4, 0xAED5, 0xAED6, 0xAED7, 0xAEDA, 0xAEDB, 0xAEDD, 0xAEDE, /* 0xF0 */ + 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, 0xAEE5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAEE6, 0xAEE7, 0xAEE9, 0xAEEA, 0xAEEC, 0xAEEE, 0xAEEF, /* 0x40 */ + 0xAEF0, 0xAEF1, 0xAEF2, 0xAEF3, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF9, /* 0x40 */ + 0xAEFA, 0xAEFB, 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00, 0xAF01, 0xAF02, /* 0x50 */ + 0xAF03, 0xAF04, 0xAF05, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAF06, 0xAF09, 0xAF0A, 0xAF0B, 0xAF0C, 0xAF0E, 0xAF0F, /* 0x60 */ + 0xAF11, 0xAF12, 0xAF13, 0xAF14, 0xAF15, 0xAF16, 0xAF17, 0xAF18, /* 0x60 */ + 0xAF19, 0xAF1A, 0xAF1B, 0xAF1C, 0xAF1D, 0xAF1E, 0xAF1F, 0xAF20, /* 0x70 */ + 0xAF21, 0xAF22, 0xAF23, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xAF24, 0xAF25, 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, /* 0x80 */ + 0xAF2B, 0xAF2E, 0xAF2F, 0xAF31, 0xAF33, 0xAF35, 0xAF36, 0xAF37, /* 0x80 */ + 0xAF38, 0xAF39, 0xAF3A, 0xAF3B, 0xAF3E, 0xAF40, 0xAF44, 0xAF45, /* 0x90 */ + 0xAF46, 0xAF47, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, /* 0x90 */ + 0xAF51, 0xAF52, 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, /* 0xA0 */ + 0xAF59, 0xAF5A, 0xAF5B, 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, 0xAF62, /* 0xA0 */ + 0xAF63, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, /* 0xB0 */ + 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF72, 0xAF73, 0xAF74, /* 0xB0 */ + 0xAF75, 0xAF76, 0xAF77, 0xAF78, 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, /* 0xC0 */ + 0xAF7E, 0xAF7F, 0xAF81, 0xAF82, 0xAF83, 0xAF85, 0xAF86, 0xAF87, /* 0xC0 */ + 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF92, /* 0xD0 */ + 0xAF93, 0xAF94, 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, /* 0xD0 */ + 0xAF9D, 0xAF9E, 0xAF9F, 0xAFA0, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, /* 0xE0 */ + 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, /* 0xE0 */ + 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB2, 0xAFB3, 0xAFB4, /* 0xF0 */ + 0xAFB5, 0xAFB6, 0xAFB7, 0xAFBA, 0xAFBB, 0xAFBD, 0xAFBE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAFBF, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, /* 0x40 */ + 0xAFCA, 0xAFCC, 0xAFCF, 0xAFD0, 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD5, /* 0x40 */ + 0xAFD6, 0xAFD7, 0xAFD8, 0xAFD9, 0xAFDA, 0xAFDB, 0xAFDD, 0xAFDE, /* 0x50 */ + 0xAFDF, 0xAFE0, 0xAFE1, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAFE2, 0xAFE3, 0xAFE4, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFEA, /* 0x60 */ + 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE, 0xAFEF, 0xAFF2, 0xAFF3, 0xAFF5, /* 0x60 */ + 0xAFF6, 0xAFF7, 0xAFF9, 0xAFFA, 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, /* 0x70 */ + 0xAFFF, 0xB002, 0xB003, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB005, 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B, /* 0x80 */ + 0xB00D, 0xB00E, 0xB00F, 0xB011, 0xB012, 0xB013, 0xB015, 0xB016, /* 0x80 */ + 0xB017, 0xB018, 0xB019, 0xB01A, 0xB01B, 0xB01E, 0xB01F, 0xB020, /* 0x90 */ + 0xB021, 0xB022, 0xB023, 0xB024, 0xB025, 0xB026, 0xB027, 0xB029, /* 0x90 */ + 0xB02A, 0xB02B, 0xB02C, 0xB02D, 0xB02E, 0xB02F, 0xB030, 0xB031, /* 0xA0 */ + 0xB032, 0xB033, 0xB034, 0xB035, 0xB036, 0xB037, 0xB038, 0xB039, /* 0xA0 */ + 0xB03A, 0xB03B, 0xB03C, 0xB03D, 0xB03E, 0xB03F, 0xB040, 0xB041, /* 0xB0 */ + 0xB042, 0xB043, 0xB046, 0xB047, 0xB049, 0xB04B, 0xB04D, 0xB04F, /* 0xB0 */ + 0xB050, 0xB051, 0xB052, 0xB056, 0xB058, 0xB05A, 0xB05B, 0xB05C, /* 0xC0 */ + 0xB05E, 0xB05F, 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, /* 0xC0 */ + 0xB066, 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, /* 0xD0 */ + 0xB06E, 0xB06F, 0xB070, 0xB071, 0xB072, 0xB073, 0xB074, 0xB075, /* 0xD0 */ + 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB07B, 0xB07E, 0xB07F, /* 0xE0 */ + 0xB081, 0xB082, 0xB083, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, /* 0xE0 */ + 0xB08A, 0xB08B, 0xB08E, 0xB090, 0xB092, 0xB093, 0xB094, 0xB095, /* 0xF0 */ + 0xB096, 0xB097, 0xB09B, 0xB09D, 0xB09E, 0xB0A3, 0xB0A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB0A5, 0xB0A6, 0xB0A7, 0xB0AA, 0xB0B0, 0xB0B2, 0xB0B6, /* 0x40 */ + 0xB0B7, 0xB0B9, 0xB0BA, 0xB0BB, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, /* 0x40 */ + 0xB0C1, 0xB0C2, 0xB0C3, 0xB0C6, 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, /* 0x50 */ + 0xB0CE, 0xB0CF, 0xB0D2, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB0D3, 0xB0D5, 0xB0D6, 0xB0D7, 0xB0D9, 0xB0DA, 0xB0DB, /* 0x60 */ + 0xB0DC, 0xB0DD, 0xB0DE, 0xB0DF, 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, /* 0x60 */ + 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA, 0xB0EB, 0xB0EC, 0xB0ED, /* 0x70 */ + 0xB0EE, 0xB0EF, 0xB0F0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB0F1, 0xB0F2, 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, /* 0x80 */ + 0xB0F8, 0xB0F9, 0xB0FA, 0xB0FB, 0xB0FC, 0xB0FD, 0xB0FE, 0xB0FF, /* 0x80 */ + 0xB100, 0xB101, 0xB102, 0xB103, 0xB104, 0xB105, 0xB106, 0xB107, /* 0x90 */ + 0xB10A, 0xB10D, 0xB10E, 0xB10F, 0xB111, 0xB114, 0xB115, 0xB116, /* 0x90 */ + 0xB117, 0xB11A, 0xB11E, 0xB11F, 0xB120, 0xB121, 0xB122, 0xB126, /* 0xA0 */ + 0xB127, 0xB129, 0xB12A, 0xB12B, 0xB12D, 0xB12E, 0xB12F, 0xB130, /* 0xA0 */ + 0xB131, 0xB132, 0xB133, 0xB136, 0xB13A, 0xB13B, 0xB13C, 0xB13D, /* 0xB0 */ + 0xB13E, 0xB13F, 0xB142, 0xB143, 0xB145, 0xB146, 0xB147, 0xB149, /* 0xB0 */ + 0xB14A, 0xB14B, 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB152, 0xB153, /* 0xC0 */ + 0xB156, 0xB157, 0xB159, 0xB15A, 0xB15B, 0xB15D, 0xB15E, 0xB15F, /* 0xC0 */ + 0xB161, 0xB162, 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, /* 0xD0 */ + 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, /* 0xD0 */ + 0xB171, 0xB172, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0xB17A, /* 0xE0 */ + 0xB17B, 0xB17D, 0xB17E, 0xB17F, 0xB181, 0xB183, 0xB184, 0xB185, /* 0xE0 */ + 0xB186, 0xB187, 0xB18A, 0xB18C, 0xB18E, 0xB18F, 0xB190, 0xB191, /* 0xF0 */ + 0xB195, 0xB196, 0xB197, 0xB199, 0xB19A, 0xB19B, 0xB19D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB19E, 0xB19F, 0xB1A0, 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4, /* 0x40 */ + 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A9, 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, /* 0x40 */ + 0xB1AE, 0xB1AF, 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3, 0xB1B4, 0xB1B5, /* 0x50 */ + 0xB1B6, 0xB1B7, 0xB1B8, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB1B9, 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1BE, 0xB1BF, /* 0x60 */ + 0xB1C0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, 0xB1C5, 0xB1C6, 0xB1C7, /* 0x60 */ + 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CD, 0xB1CE, 0xB1CF, 0xB1D1, /* 0x70 */ + 0xB1D2, 0xB1D3, 0xB1D5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, 0xB1DB, 0xB1DE, /* 0x80 */ + 0xB1E0, 0xB1E1, 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, /* 0x80 */ + 0xB1EA, 0xB1EB, 0xB1ED, 0xB1EE, 0xB1EF, 0xB1F1, 0xB1F2, 0xB1F3, /* 0x90 */ + 0xB1F4, 0xB1F5, 0xB1F6, 0xB1F7, 0xB1F8, 0xB1FA, 0xB1FC, 0xB1FE, /* 0x90 */ + 0xB1FF, 0xB200, 0xB201, 0xB202, 0xB203, 0xB206, 0xB207, 0xB209, /* 0xA0 */ + 0xB20A, 0xB20D, 0xB20E, 0xB20F, 0xB210, 0xB211, 0xB212, 0xB213, /* 0xA0 */ + 0xB216, 0xB218, 0xB21A, 0xB21B, 0xB21C, 0xB21D, 0xB21E, 0xB21F, /* 0xB0 */ + 0xB221, 0xB222, 0xB223, 0xB224, 0xB225, 0xB226, 0xB227, 0xB228, /* 0xB0 */ + 0xB229, 0xB22A, 0xB22B, 0xB22C, 0xB22D, 0xB22E, 0xB22F, 0xB230, /* 0xC0 */ + 0xB231, 0xB232, 0xB233, 0xB235, 0xB236, 0xB237, 0xB238, 0xB239, /* 0xC0 */ + 0xB23A, 0xB23B, 0xB23D, 0xB23E, 0xB23F, 0xB240, 0xB241, 0xB242, /* 0xD0 */ + 0xB243, 0xB244, 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, /* 0xD0 */ + 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, /* 0xE0 */ + 0xB253, 0xB254, 0xB255, 0xB256, 0xB257, 0xB259, 0xB25A, 0xB25B, /* 0xE0 */ + 0xB25D, 0xB25E, 0xB25F, 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, /* 0xF0 */ + 0xB266, 0xB267, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xB26E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273, 0xB276, 0xB277, /* 0x40 */ + 0xB278, 0xB279, 0xB27A, 0xB27B, 0xB27D, 0xB27E, 0xB27F, 0xB280, /* 0x40 */ + 0xB281, 0xB282, 0xB283, 0xB286, 0xB287, 0xB288, 0xB28A, 0xB28B, /* 0x50 */ + 0xB28C, 0xB28D, 0xB28E, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB28F, 0xB292, 0xB293, 0xB295, 0xB296, 0xB297, 0xB29B, /* 0x60 */ + 0xB29C, 0xB29D, 0xB29E, 0xB29F, 0xB2A2, 0xB2A4, 0xB2A7, 0xB2A8, /* 0x60 */ + 0xB2A9, 0xB2AB, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B1, 0xB2B2, 0xB2B3, /* 0x70 */ + 0xB2B5, 0xB2B6, 0xB2B7, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB2B8, 0xB2B9, 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2BE, /* 0x80 */ + 0xB2BF, 0xB2C0, 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, /* 0x80 */ + 0xB2C7, 0xB2CA, 0xB2CB, 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D1, 0xB2D3, /* 0x90 */ + 0xB2D4, 0xB2D5, 0xB2D6, 0xB2D7, 0xB2DA, 0xB2DC, 0xB2DE, 0xB2DF, /* 0x90 */ + 0xB2E0, 0xB2E1, 0xB2E3, 0xB2E7, 0xB2E9, 0xB2EA, 0xB2F0, 0xB2F1, /* 0xA0 */ + 0xB2F2, 0xB2F6, 0xB2FC, 0xB2FD, 0xB2FE, 0xB302, 0xB303, 0xB305, /* 0xA0 */ + 0xB306, 0xB307, 0xB309, 0xB30A, 0xB30B, 0xB30C, 0xB30D, 0xB30E, /* 0xB0 */ + 0xB30F, 0xB312, 0xB316, 0xB317, 0xB318, 0xB319, 0xB31A, 0xB31B, /* 0xB0 */ + 0xB31D, 0xB31E, 0xB31F, 0xB320, 0xB321, 0xB322, 0xB323, 0xB324, /* 0xC0 */ + 0xB325, 0xB326, 0xB327, 0xB328, 0xB329, 0xB32A, 0xB32B, 0xB32C, /* 0xC0 */ + 0xB32D, 0xB32E, 0xB32F, 0xB330, 0xB331, 0xB332, 0xB333, 0xB334, /* 0xD0 */ + 0xB335, 0xB336, 0xB337, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, /* 0xD0 */ + 0xB33D, 0xB33E, 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, /* 0xE0 */ + 0xB345, 0xB346, 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, /* 0xE0 */ + 0xB34D, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0xB357, /* 0xF0 */ + 0xB359, 0xB35A, 0xB35D, 0xB360, 0xB361, 0xB362, 0xB363 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB366, 0xB368, 0xB36A, 0xB36C, 0xB36D, 0xB36F, 0xB372, /* 0x40 */ + 0xB373, 0xB375, 0xB376, 0xB377, 0xB379, 0xB37A, 0xB37B, 0xB37C, /* 0x40 */ + 0xB37D, 0xB37E, 0xB37F, 0xB382, 0xB386, 0xB387, 0xB388, 0xB389, /* 0x50 */ + 0xB38A, 0xB38B, 0xB38D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB38E, 0xB38F, 0xB391, 0xB392, 0xB393, 0xB395, 0xB396, /* 0x60 */ + 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, 0xB39C, 0xB39D, 0xB39E, /* 0x60 */ + 0xB39F, 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0xB3A9, /* 0x70 */ + 0xB3AA, 0xB3AB, 0xB3AD, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB3AE, 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4, /* 0x80 */ + 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC, /* 0x80 */ + 0xB3BD, 0xB3BE, 0xB3BF, 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0xB3C6, /* 0x90 */ + 0xB3C7, 0xB3C9, 0xB3CA, 0xB3CD, 0xB3CF, 0xB3D1, 0xB3D2, 0xB3D3, /* 0x90 */ + 0xB3D6, 0xB3D8, 0xB3DA, 0xB3DC, 0xB3DE, 0xB3DF, 0xB3E1, 0xB3E2, /* 0xA0 */ + 0xB3E3, 0xB3E5, 0xB3E6, 0xB3E7, 0xB3E9, 0xB3EA, 0xB3EB, 0xB3EC, /* 0xA0 */ + 0xB3ED, 0xB3EE, 0xB3EF, 0xB3F0, 0xB3F1, 0xB3F2, 0xB3F3, 0xB3F4, /* 0xB0 */ + 0xB3F5, 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, 0xB3FB, 0xB3FD, /* 0xB0 */ + 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, 0xB403, 0xB404, 0xB405, /* 0xC0 */ + 0xB406, 0xB407, 0xB408, 0xB409, 0xB40A, 0xB40B, 0xB40C, 0xB40D, /* 0xC0 */ + 0xB40E, 0xB40F, 0xB411, 0xB412, 0xB413, 0xB414, 0xB415, 0xB416, /* 0xD0 */ + 0xB417, 0xB419, 0xB41A, 0xB41B, 0xB41D, 0xB41E, 0xB41F, 0xB421, /* 0xD0 */ + 0xB422, 0xB423, 0xB424, 0xB425, 0xB426, 0xB427, 0xB42A, 0xB42C, /* 0xE0 */ + 0xB42D, 0xB42E, 0xB42F, 0xB430, 0xB431, 0xB432, 0xB433, 0xB435, /* 0xE0 */ + 0xB436, 0xB437, 0xB438, 0xB439, 0xB43A, 0xB43B, 0xB43C, 0xB43D, /* 0xF0 */ + 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, 0xB443, 0xB444 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB445, 0xB446, 0xB447, 0xB448, 0xB449, 0xB44A, 0xB44B, /* 0x40 */ + 0xB44C, 0xB44D, 0xB44E, 0xB44F, 0xB452, 0xB453, 0xB455, 0xB456, /* 0x40 */ + 0xB457, 0xB459, 0xB45A, 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xB45F, /* 0x50 */ + 0xB462, 0xB464, 0xB466, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46D, 0xB46E, /* 0x60 */ + 0xB46F, 0xB470, 0xB471, 0xB472, 0xB473, 0xB474, 0xB475, 0xB476, /* 0x60 */ + 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, 0xB47E, /* 0x70 */ + 0xB47F, 0xB481, 0xB482, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0xB489, 0xB48A, /* 0x80 */ + 0xB48B, 0xB48C, 0xB48D, 0xB48E, 0xB48F, 0xB490, 0xB491, 0xB492, /* 0x80 */ + 0xB493, 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, 0xB49A, /* 0x90 */ + 0xB49B, 0xB49C, 0xB49E, 0xB49F, 0xB4A0, 0xB4A1, 0xB4A2, 0xB4A3, /* 0x90 */ + 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A9, 0xB4AA, 0xB4AB, 0xB4AD, 0xB4AE, /* 0xA0 */ + 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, 0xB4B3, 0xB4B4, 0xB4B6, 0xB4B8, /* 0xA0 */ + 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, 0xB4BF, 0xB4C1, 0xB4C2, /* 0xB0 */ + 0xB4C3, 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, /* 0xB0 */ + 0xB4CD, 0xB4CE, 0xB4CF, 0xB4D1, 0xB4D2, 0xB4D3, 0xB4D4, 0xB4D6, /* 0xC0 */ + 0xB4D7, 0xB4D8, 0xB4D9, 0xB4DA, 0xB4DB, 0xB4DE, 0xB4DF, 0xB4E1, /* 0xC0 */ + 0xB4E2, 0xB4E5, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, 0xB4EB, 0xB4EE, /* 0xD0 */ + 0xB4F0, 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5, 0xB4F6, 0xB4F7, 0xB4F9, /* 0xD0 */ + 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, 0xB4FE, 0xB4FF, 0xB500, 0xB501, /* 0xE0 */ + 0xB502, 0xB503, 0xB504, 0xB505, 0xB506, 0xB507, 0xB508, 0xB509, /* 0xE0 */ + 0xB50A, 0xB50B, 0xB50C, 0xB50D, 0xB50E, 0xB50F, 0xB510, 0xB511, /* 0xF0 */ + 0xB512, 0xB513, 0xB516, 0xB517, 0xB519, 0xB51A, 0xB51D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB51E, 0xB51F, 0xB520, 0xB521, 0xB522, 0xB523, 0xB526, /* 0x40 */ + 0xB52B, 0xB52C, 0xB52D, 0xB52E, 0xB52F, 0xB532, 0xB533, 0xB535, /* 0x40 */ + 0xB536, 0xB537, 0xB539, 0xB53A, 0xB53B, 0xB53C, 0xB53D, 0xB53E, /* 0x50 */ + 0xB53F, 0xB542, 0xB546, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54E, 0xB54F, 0xB551, /* 0x60 */ + 0xB552, 0xB553, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, 0xB55A, /* 0x60 */ + 0xB55B, 0xB55E, 0xB562, 0xB563, 0xB564, 0xB565, 0xB566, 0xB567, /* 0x70 */ + 0xB568, 0xB569, 0xB56A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB56B, 0xB56C, 0xB56D, 0xB56E, 0xB56F, 0xB570, 0xB571, /* 0x80 */ + 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, 0xB577, 0xB578, 0xB579, /* 0x80 */ + 0xB57A, 0xB57B, 0xB57C, 0xB57D, 0xB57E, 0xB57F, 0xB580, 0xB581, /* 0x90 */ + 0xB582, 0xB583, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, 0xB589, /* 0x90 */ + 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, 0xB591, /* 0xA0 */ + 0xB592, 0xB593, 0xB594, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, /* 0xA0 */ + 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0xB5A2, 0xB5A3, /* 0xB0 */ + 0xB5A5, 0xB5A6, 0xB5A7, 0xB5A9, 0xB5AC, 0xB5AD, 0xB5AE, 0xB5AF, /* 0xB0 */ + 0xB5B2, 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BE, 0xB5BF, /* 0xC0 */ + 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, 0xB5C9, /* 0xC0 */ + 0xB5CA, 0xB5CB, 0xB5CE, 0xB5D2, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, /* 0xD0 */ + 0xB5D7, 0xB5D9, 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5DE, 0xB5DF, /* 0xD0 */ + 0xB5E0, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, 0xB5E5, 0xB5E6, 0xB5E7, /* 0xE0 */ + 0xB5E8, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, /* 0xE0 */ + 0xB5F1, 0xB5F2, 0xB5F3, 0xB5F4, 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, /* 0xF0 */ + 0xB5F9, 0xB5FA, 0xB5FB, 0xB5FC, 0xB5FD, 0xB5FE, 0xB5FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB600, 0xB601, 0xB602, 0xB603, 0xB604, 0xB605, 0xB606, /* 0x40 */ + 0xB607, 0xB608, 0xB609, 0xB60A, 0xB60B, 0xB60C, 0xB60D, 0xB60E, /* 0x40 */ + 0xB60F, 0xB612, 0xB613, 0xB615, 0xB616, 0xB617, 0xB619, 0xB61A, /* 0x50 */ + 0xB61B, 0xB61C, 0xB61D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB61E, 0xB61F, 0xB620, 0xB621, 0xB622, 0xB623, 0xB624, /* 0x60 */ + 0xB626, 0xB627, 0xB628, 0xB629, 0xB62A, 0xB62B, 0xB62D, 0xB62E, /* 0x60 */ + 0xB62F, 0xB630, 0xB631, 0xB632, 0xB633, 0xB635, 0xB636, 0xB637, /* 0x70 */ + 0xB638, 0xB639, 0xB63A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB63B, 0xB63C, 0xB63D, 0xB63E, 0xB63F, 0xB640, 0xB641, /* 0x80 */ + 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0xB649, 0xB64A, /* 0x80 */ + 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, /* 0x90 */ + 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, /* 0x90 */ + 0xB65B, 0xB65C, 0xB65D, 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, /* 0xA0 */ + 0xB663, 0xB665, 0xB666, 0xB667, 0xB669, 0xB66A, 0xB66B, 0xB66C, /* 0xA0 */ + 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, 0xB672, 0xB673, 0xB674, /* 0xB0 */ + 0xB675, 0xB676, 0xB677, 0xB678, 0xB679, 0xB67A, 0xB67B, 0xB67C, /* 0xB0 */ + 0xB67D, 0xB67E, 0xB67F, 0xB680, 0xB681, 0xB682, 0xB683, 0xB684, /* 0xC0 */ + 0xB685, 0xB686, 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B, 0xB68C, /* 0xC0 */ + 0xB68D, 0xB68E, 0xB68F, 0xB690, 0xB691, 0xB692, 0xB693, 0xB694, /* 0xD0 */ + 0xB695, 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69E, /* 0xD0 */ + 0xB69F, 0xB6A1, 0xB6A2, 0xB6A3, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, /* 0xE0 */ + 0xB6A9, 0xB6AA, 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B2, 0xB6B3, /* 0xE0 */ + 0xB6B4, 0xB6B5, 0xB6B6, 0xB6B7, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, /* 0xF0 */ + 0xB6BC, 0xB6BD, 0xB6BE, 0xB6BF, 0xB6C0, 0xB6C1, 0xB6C2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, 0xB6C7, 0xB6C8, 0xB6C9, /* 0x40 */ + 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1, /* 0x40 */ + 0xB6D2, 0xB6D3, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, /* 0x50 */ + 0xB6DB, 0xB6DC, 0xB6DD, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB6DE, 0xB6DF, 0xB6E0, 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4, /* 0x60 */ + 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, 0xB6EA, 0xB6EB, 0xB6EC, /* 0x60 */ + 0xB6ED, 0xB6EE, 0xB6EF, 0xB6F1, 0xB6F2, 0xB6F3, 0xB6F5, 0xB6F6, /* 0x70 */ + 0xB6F7, 0xB6F9, 0xB6FA, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, 0xB6FF, 0xB702, 0xB703, /* 0x80 */ + 0xB704, 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B, 0xB70C, /* 0x80 */ + 0xB70D, 0xB70E, 0xB70F, 0xB710, 0xB711, 0xB712, 0xB713, 0xB714, /* 0x90 */ + 0xB715, 0xB716, 0xB717, 0xB718, 0xB719, 0xB71A, 0xB71B, 0xB71C, /* 0x90 */ + 0xB71D, 0xB71E, 0xB71F, 0xB720, 0xB721, 0xB722, 0xB723, 0xB724, /* 0xA0 */ + 0xB725, 0xB726, 0xB727, 0xB72A, 0xB72B, 0xB72D, 0xB72E, 0xB731, /* 0xA0 */ + 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, 0xB737, 0xB73A, 0xB73C, /* 0xB0 */ + 0xB73D, 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, 0xB743, 0xB745, /* 0xB0 */ + 0xB746, 0xB747, 0xB749, 0xB74A, 0xB74B, 0xB74D, 0xB74E, 0xB74F, /* 0xC0 */ + 0xB750, 0xB751, 0xB752, 0xB753, 0xB756, 0xB757, 0xB758, 0xB759, /* 0xC0 */ + 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0xB761, 0xB762, /* 0xD0 */ + 0xB763, 0xB765, 0xB766, 0xB767, 0xB769, 0xB76A, 0xB76B, 0xB76C, /* 0xD0 */ + 0xB76D, 0xB76E, 0xB76F, 0xB772, 0xB774, 0xB776, 0xB777, 0xB778, /* 0xE0 */ + 0xB779, 0xB77A, 0xB77B, 0xB77E, 0xB77F, 0xB781, 0xB782, 0xB783, /* 0xE0 */ + 0xB785, 0xB786, 0xB787, 0xB788, 0xB789, 0xB78A, 0xB78B, 0xB78E, /* 0xF0 */ + 0xB793, 0xB794, 0xB795, 0xB79A, 0xB79B, 0xB79D, 0xB79E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB79F, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, /* 0x40 */ + 0xB7A7, 0xB7AA, 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, /* 0x40 */ + 0xB7B6, 0xB7B7, 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, /* 0x50 */ + 0xB7BF, 0xB7C0, 0xB7C1, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB7C2, 0xB7C3, 0xB7C4, 0xB7C5, 0xB7C6, 0xB7C8, 0xB7CA, /* 0x60 */ + 0xB7CB, 0xB7CC, 0xB7CD, 0xB7CE, 0xB7CF, 0xB7D0, 0xB7D1, 0xB7D2, /* 0x60 */ + 0xB7D3, 0xB7D4, 0xB7D5, 0xB7D6, 0xB7D7, 0xB7D8, 0xB7D9, 0xB7DA, /* 0x70 */ + 0xB7DB, 0xB7DC, 0xB7DD, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB7DE, 0xB7DF, 0xB7E0, 0xB7E1, 0xB7E2, 0xB7E3, 0xB7E4, /* 0x80 */ + 0xB7E5, 0xB7E6, 0xB7E7, 0xB7E8, 0xB7E9, 0xB7EA, 0xB7EB, 0xB7EE, /* 0x80 */ + 0xB7EF, 0xB7F1, 0xB7F2, 0xB7F3, 0xB7F5, 0xB7F6, 0xB7F7, 0xB7F8, /* 0x90 */ + 0xB7F9, 0xB7FA, 0xB7FB, 0xB7FE, 0xB802, 0xB803, 0xB804, 0xB805, /* 0x90 */ + 0xB806, 0xB80A, 0xB80B, 0xB80D, 0xB80E, 0xB80F, 0xB811, 0xB812, /* 0xA0 */ + 0xB813, 0xB814, 0xB815, 0xB816, 0xB817, 0xB81A, 0xB81C, 0xB81E, /* 0xA0 */ + 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, 0xB826, 0xB827, 0xB829, /* 0xB0 */ + 0xB82A, 0xB82B, 0xB82D, 0xB82E, 0xB82F, 0xB830, 0xB831, 0xB832, /* 0xB0 */ + 0xB833, 0xB836, 0xB83A, 0xB83B, 0xB83C, 0xB83D, 0xB83E, 0xB83F, /* 0xC0 */ + 0xB841, 0xB842, 0xB843, 0xB845, 0xB846, 0xB847, 0xB848, 0xB849, /* 0xC0 */ + 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F, 0xB850, 0xB852, /* 0xD0 */ + 0xB854, 0xB855, 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, /* 0xD0 */ + 0xB85E, 0xB85F, 0xB861, 0xB862, 0xB863, 0xB865, 0xB866, 0xB867, /* 0xE0 */ + 0xB868, 0xB869, 0xB86A, 0xB86B, 0xB86E, 0xB870, 0xB872, 0xB873, /* 0xE0 */ + 0xB874, 0xB875, 0xB876, 0xB877, 0xB879, 0xB87A, 0xB87B, 0xB87D, /* 0xF0 */ + 0xB87E, 0xB87F, 0xB880, 0xB881, 0xB882, 0xB883, 0xB884 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB885, 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B, /* 0x40 */ + 0xB88C, 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0xB894, /* 0x40 */ + 0xB895, 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, /* 0x50 */ + 0xB89D, 0xB89E, 0xB89F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB8A0, 0xB8A1, 0xB8A2, 0xB8A3, 0xB8A4, 0xB8A5, 0xB8A6, /* 0x60 */ + 0xB8A7, 0xB8A9, 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF, /* 0x60 */ + 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B5, 0xB8B6, 0xB8B7, 0xB8B9, 0xB8BA, /* 0x70 */ + 0xB8BB, 0xB8BC, 0xB8BD, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB8BE, 0xB8BF, 0xB8C2, 0xB8C4, 0xB8C6, 0xB8C7, 0xB8C8, /* 0x80 */ + 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D1, 0xB8D2, /* 0x80 */ + 0xB8D3, 0xB8D5, 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, 0xB8DB, /* 0x90 */ + 0xB8DC, 0xB8DE, 0xB8E0, 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, /* 0x90 */ + 0xB8E7, 0xB8EA, 0xB8EB, 0xB8ED, 0xB8EE, 0xB8EF, 0xB8F1, 0xB8F2, /* 0xA0 */ + 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, 0xB8F7, 0xB8FA, 0xB8FC, 0xB8FE, /* 0xA0 */ + 0xB8FF, 0xB900, 0xB901, 0xB902, 0xB903, 0xB905, 0xB906, 0xB907, /* 0xB0 */ + 0xB908, 0xB909, 0xB90A, 0xB90B, 0xB90C, 0xB90D, 0xB90E, 0xB90F, /* 0xB0 */ + 0xB910, 0xB911, 0xB912, 0xB913, 0xB914, 0xB915, 0xB916, 0xB917, /* 0xC0 */ + 0xB919, 0xB91A, 0xB91B, 0xB91C, 0xB91D, 0xB91E, 0xB91F, 0xB921, /* 0xC0 */ + 0xB922, 0xB923, 0xB924, 0xB925, 0xB926, 0xB927, 0xB928, 0xB929, /* 0xD0 */ + 0xB92A, 0xB92B, 0xB92C, 0xB92D, 0xB92E, 0xB92F, 0xB930, 0xB931, /* 0xD0 */ + 0xB932, 0xB933, 0xB934, 0xB935, 0xB936, 0xB937, 0xB938, 0xB939, /* 0xE0 */ + 0xB93A, 0xB93B, 0xB93E, 0xB93F, 0xB941, 0xB942, 0xB943, 0xB945, /* 0xE0 */ + 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, 0xB94B, 0xB94D, 0xB94E, /* 0xF0 */ + 0xB950, 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, 0xB957 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB95A, 0xB95B, 0xB95D, 0xB95E, 0xB95F, 0xB961, 0xB962, /* 0x40 */ + 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xB96A, 0xB96C, 0xB96E, /* 0x40 */ + 0xB96F, 0xB970, 0xB971, 0xB972, 0xB973, 0xB976, 0xB977, 0xB979, /* 0x50 */ + 0xB97A, 0xB97B, 0xB97D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB97E, 0xB97F, 0xB980, 0xB981, 0xB982, 0xB983, 0xB986, /* 0x60 */ + 0xB988, 0xB98B, 0xB98C, 0xB98F, 0xB990, 0xB991, 0xB992, 0xB993, /* 0x60 */ + 0xB994, 0xB995, 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, /* 0x70 */ + 0xB99C, 0xB99D, 0xB99E, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB99F, 0xB9A0, 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, /* 0x80 */ + 0xB9A6, 0xB9A7, 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AE, 0xB9AF, /* 0x80 */ + 0xB9B1, 0xB9B2, 0xB9B3, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, /* 0x90 */ + 0xB9BA, 0xB9BB, 0xB9BE, 0xB9C0, 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, /* 0x90 */ + 0xB9C6, 0xB9C7, 0xB9CA, 0xB9CB, 0xB9CD, 0xB9D3, 0xB9D4, 0xB9D5, /* 0xA0 */ + 0xB9D6, 0xB9D7, 0xB9DA, 0xB9DC, 0xB9DF, 0xB9E0, 0xB9E2, 0xB9E6, /* 0xA0 */ + 0xB9E7, 0xB9E9, 0xB9EA, 0xB9EB, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, /* 0xB0 */ + 0xB9F1, 0xB9F2, 0xB9F3, 0xB9F6, 0xB9FB, 0xB9FC, 0xB9FD, 0xB9FE, /* 0xB0 */ + 0xB9FF, 0xBA02, 0xBA03, 0xBA04, 0xBA05, 0xBA06, 0xBA07, 0xBA09, /* 0xC0 */ + 0xBA0A, 0xBA0B, 0xBA0C, 0xBA0D, 0xBA0E, 0xBA0F, 0xBA10, 0xBA11, /* 0xC0 */ + 0xBA12, 0xBA13, 0xBA14, 0xBA16, 0xBA17, 0xBA18, 0xBA19, 0xBA1A, /* 0xD0 */ + 0xBA1B, 0xBA1C, 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22, /* 0xD0 */ + 0xBA23, 0xBA24, 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, /* 0xE0 */ + 0xBA2B, 0xBA2C, 0xBA2D, 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, 0xBA32, /* 0xE0 */ + 0xBA33, 0xBA34, 0xBA35, 0xBA36, 0xBA37, 0xBA3A, 0xBA3B, 0xBA3D, /* 0xF0 */ + 0xBA3E, 0xBA3F, 0xBA41, 0xBA43, 0xBA44, 0xBA45, 0xBA46 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBA47, 0xBA4A, 0xBA4C, 0xBA4F, 0xBA50, 0xBA51, 0xBA52, /* 0x40 */ + 0xBA56, 0xBA57, 0xBA59, 0xBA5A, 0xBA5B, 0xBA5D, 0xBA5E, 0xBA5F, /* 0x40 */ + 0xBA60, 0xBA61, 0xBA62, 0xBA63, 0xBA66, 0xBA6A, 0xBA6B, 0xBA6C, /* 0x50 */ + 0xBA6D, 0xBA6E, 0xBA6F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBA72, 0xBA73, 0xBA75, 0xBA76, 0xBA77, 0xBA79, 0xBA7A, /* 0x60 */ + 0xBA7B, 0xBA7C, 0xBA7D, 0xBA7E, 0xBA7F, 0xBA80, 0xBA81, 0xBA82, /* 0x60 */ + 0xBA86, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0xBA8D, 0xBA8E, 0xBA8F, /* 0x70 */ + 0xBA90, 0xBA91, 0xBA92, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, /* 0x80 */ + 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1, /* 0x80 */ + 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAAA, 0xBAAD, /* 0x90 */ + 0xBAAE, 0xBAAF, 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7, /* 0x90 */ + 0xBABA, 0xBABC, 0xBABE, 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3, /* 0xA0 */ + 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC9, 0xBACA, 0xBACB, 0xBACC, 0xBACD, /* 0xA0 */ + 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2, 0xBAD3, 0xBAD4, 0xBAD5, /* 0xB0 */ + 0xBAD6, 0xBAD7, 0xBADA, 0xBADB, 0xBADC, 0xBADD, 0xBADE, 0xBADF, /* 0xB0 */ + 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, 0xBAE7, /* 0xC0 */ + 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF, /* 0xC0 */ + 0xBAF0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7, /* 0xD0 */ + 0xBAF8, 0xBAF9, 0xBAFA, 0xBAFB, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB01, /* 0xD0 */ + 0xBB02, 0xBB03, 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A, /* 0xE0 */ + 0xBB0B, 0xBB0C, 0xBB0E, 0xBB10, 0xBB12, 0xBB13, 0xBB14, 0xBB15, /* 0xE0 */ + 0xBB16, 0xBB17, 0xBB19, 0xBB1A, 0xBB1B, 0xBB1D, 0xBB1E, 0xBB1F, /* 0xF0 */ + 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25, 0xBB26, 0xBB27 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBB28, 0xBB2A, 0xBB2C, 0xBB2D, 0xBB2E, 0xBB2F, 0xBB30, /* 0x40 */ + 0xBB31, 0xBB32, 0xBB33, 0xBB37, 0xBB39, 0xBB3A, 0xBB3F, 0xBB40, /* 0x40 */ + 0xBB41, 0xBB42, 0xBB43, 0xBB46, 0xBB48, 0xBB4A, 0xBB4B, 0xBB4C, /* 0x50 */ + 0xBB4E, 0xBB51, 0xBB52, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBB53, 0xBB55, 0xBB56, 0xBB57, 0xBB59, 0xBB5A, 0xBB5B, /* 0x60 */ + 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB62, 0xBB64, 0xBB65, /* 0x60 */ + 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6D, 0xBB6E, /* 0x70 */ + 0xBB6F, 0xBB70, 0xBB71, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBB72, 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, /* 0x80 */ + 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, 0xBB7F, 0xBB80, /* 0x80 */ + 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0xBB89, /* 0x90 */ + 0xBB8A, 0xBB8B, 0xBB8D, 0xBB8E, 0xBB8F, 0xBB91, 0xBB92, 0xBB93, /* 0x90 */ + 0xBB94, 0xBB95, 0xBB96, 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, /* 0xA0 */ + 0xBB9C, 0xBB9D, 0xBB9E, 0xBB9F, 0xBBA0, 0xBBA1, 0xBBA2, 0xBBA3, /* 0xA0 */ + 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA9, 0xBBAA, 0xBBAB, 0xBBAD, 0xBBAE, /* 0xB0 */ + 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, 0xBBB3, 0xBBB5, 0xBBB6, 0xBBB8, /* 0xB0 */ + 0xBBB9, 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE, 0xBBBF, 0xBBC1, /* 0xC0 */ + 0xBBC2, 0xBBC3, 0xBBC5, 0xBBC6, 0xBBC7, 0xBBC9, 0xBBCA, 0xBBCB, /* 0xC0 */ + 0xBBCC, 0xBBCD, 0xBBCE, 0xBBCF, 0xBBD1, 0xBBD2, 0xBBD4, 0xBBD5, /* 0xD0 */ + 0xBBD6, 0xBBD7, 0xBBD8, 0xBBD9, 0xBBDA, 0xBBDB, 0xBBDC, 0xBBDD, /* 0xD0 */ + 0xBBDE, 0xBBDF, 0xBBE0, 0xBBE1, 0xBBE2, 0xBBE3, 0xBBE4, 0xBBE5, /* 0xE0 */ + 0xBBE6, 0xBBE7, 0xBBE8, 0xBBE9, 0xBBEA, 0xBBEB, 0xBBEC, 0xBBED, /* 0xE0 */ + 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, 0xBBF2, 0xBBF3, 0xBBF4, 0xBBF5, /* 0xF0 */ + 0xBBF6, 0xBBF7, 0xBBFA, 0xBBFB, 0xBBFD, 0xBBFE, 0xBC01 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBC03, 0xBC04, 0xBC05, 0xBC06, 0xBC07, 0xBC0A, 0xBC0E, /* 0x40 */ + 0xBC10, 0xBC12, 0xBC13, 0xBC19, 0xBC1A, 0xBC20, 0xBC21, 0xBC22, /* 0x40 */ + 0xBC23, 0xBC26, 0xBC28, 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2E, 0xBC2F, /* 0x50 */ + 0xBC32, 0xBC33, 0xBC35, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBC36, 0xBC37, 0xBC39, 0xBC3A, 0xBC3B, 0xBC3C, 0xBC3D, /* 0x60 */ + 0xBC3E, 0xBC3F, 0xBC42, 0xBC46, 0xBC47, 0xBC48, 0xBC4A, 0xBC4B, /* 0x60 */ + 0xBC4E, 0xBC4F, 0xBC51, 0xBC52, 0xBC53, 0xBC54, 0xBC55, 0xBC56, /* 0x70 */ + 0xBC57, 0xBC58, 0xBC59, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBC5A, 0xBC5B, 0xBC5C, 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, /* 0x80 */ + 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, 0xBC69, /* 0x80 */ + 0xBC6A, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, /* 0x90 */ + 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77, 0xBC78, 0xBC79, /* 0x90 */ + 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, 0xBC7E, 0xBC7F, 0xBC80, 0xBC81, /* 0xA0 */ + 0xBC82, 0xBC83, 0xBC86, 0xBC87, 0xBC89, 0xBC8A, 0xBC8D, 0xBC8F, /* 0xA0 */ + 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBC96, 0xBC98, 0xBC9B, 0xBC9C, /* 0xB0 */ + 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA2, 0xBCA3, 0xBCA5, 0xBCA6, 0xBCA9, /* 0xB0 */ + 0xBCAA, 0xBCAB, 0xBCAC, 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB2, 0xBCB6, /* 0xC0 */ + 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0xBCBE, 0xBCBF, 0xBCC1, /* 0xC0 */ + 0xBCC2, 0xBCC3, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, /* 0xD0 */ + 0xBCCB, 0xBCCC, 0xBCCE, 0xBCD2, 0xBCD3, 0xBCD4, 0xBCD6, 0xBCD7, /* 0xD0 */ + 0xBCD9, 0xBCDA, 0xBCDB, 0xBCDD, 0xBCDE, 0xBCDF, 0xBCE0, 0xBCE1, /* 0xE0 */ + 0xBCE2, 0xBCE3, 0xBCE4, 0xBCE5, 0xBCE6, 0xBCE7, 0xBCE8, 0xBCE9, /* 0xE0 */ + 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED, 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, /* 0xF0 */ + 0xBCF2, 0xBCF3, 0xBCF7, 0xBCF9, 0xBCFA, 0xBCFB, 0xBCFD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBCFE, 0xBCFF, 0xBD00, 0xBD01, 0xBD02, 0xBD03, 0xBD06, /* 0x40 */ + 0xBD08, 0xBD0A, 0xBD0B, 0xBD0C, 0xBD0D, 0xBD0E, 0xBD0F, 0xBD11, /* 0x40 */ + 0xBD12, 0xBD13, 0xBD15, 0xBD16, 0xBD17, 0xBD18, 0xBD19, 0xBD1A, /* 0x50 */ + 0xBD1B, 0xBD1C, 0xBD1D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBD1E, 0xBD1F, 0xBD20, 0xBD21, 0xBD22, 0xBD23, 0xBD25, /* 0x60 */ + 0xBD26, 0xBD27, 0xBD28, 0xBD29, 0xBD2A, 0xBD2B, 0xBD2D, 0xBD2E, /* 0x60 */ + 0xBD2F, 0xBD30, 0xBD31, 0xBD32, 0xBD33, 0xBD34, 0xBD35, 0xBD36, /* 0x70 */ + 0xBD37, 0xBD38, 0xBD39, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBD3A, 0xBD3B, 0xBD3C, 0xBD3D, 0xBD3E, 0xBD3F, 0xBD41, /* 0x80 */ + 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD4A, 0xBD4B, /* 0x80 */ + 0xBD4D, 0xBD4E, 0xBD4F, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, /* 0x90 */ + 0xBD56, 0xBD57, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, /* 0x90 */ + 0xBD60, 0xBD61, 0xBD62, 0xBD63, 0xBD65, 0xBD66, 0xBD67, 0xBD69, /* 0xA0 */ + 0xBD6A, 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, /* 0xA0 */ + 0xBD72, 0xBD73, 0xBD74, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, /* 0xB0 */ + 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xBD7F, 0xBD82, 0xBD83, /* 0xB0 */ + 0xBD85, 0xBD86, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD92, /* 0xC0 */ + 0xBD94, 0xBD96, 0xBD97, 0xBD98, 0xBD9B, 0xBD9D, 0xBD9E, 0xBD9F, /* 0xC0 */ + 0xBDA0, 0xBDA1, 0xBDA2, 0xBDA3, 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, /* 0xD0 */ + 0xBDA9, 0xBDAA, 0xBDAB, 0xBDAC, 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB1, /* 0xD0 */ + 0xBDB2, 0xBDB3, 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0xBDB9, 0xBDBA, /* 0xE0 */ + 0xBDBB, 0xBDBC, 0xBDBD, 0xBDBE, 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, /* 0xE0 */ + 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, 0xBDC7, 0xBDC8, 0xBDC9, 0xBDCA, /* 0xF0 */ + 0xBDCB, 0xBDCC, 0xBDCD, 0xBDCE, 0xBDCF, 0xBDD0, 0xBDD1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDD2, 0xBDD3, 0xBDD6, 0xBDD7, 0xBDD9, 0xBDDA, 0xBDDB, /* 0x40 */ + 0xBDDD, 0xBDDE, 0xBDDF, 0xBDE0, 0xBDE1, 0xBDE2, 0xBDE3, 0xBDE4, /* 0x40 */ + 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDEA, 0xBDEB, 0xBDEC, 0xBDED, /* 0x50 */ + 0xBDEE, 0xBDEF, 0xBDF1, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBDF2, 0xBDF3, 0xBDF5, 0xBDF6, 0xBDF7, 0xBDF9, 0xBDFA, /* 0x60 */ + 0xBDFB, 0xBDFC, 0xBDFD, 0xBDFE, 0xBDFF, 0xBE01, 0xBE02, 0xBE04, /* 0x60 */ + 0xBE06, 0xBE07, 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, 0xBE0E, 0xBE0F, /* 0x70 */ + 0xBE11, 0xBE12, 0xBE13, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A, 0xBE1B, /* 0x80 */ + 0xBE1E, 0xBE20, 0xBE21, 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26, /* 0x80 */ + 0xBE27, 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E, /* 0x90 */ + 0xBE2F, 0xBE30, 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36, /* 0x90 */ + 0xBE37, 0xBE38, 0xBE39, 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, 0xBE3E, /* 0xA0 */ + 0xBE3F, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0xBE46, 0xBE47, 0xBE49, /* 0xA0 */ + 0xBE4A, 0xBE4B, 0xBE4D, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, /* 0xB0 */ + 0xBE56, 0xBE58, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F, 0xBE62, 0xBE63, /* 0xB0 */ + 0xBE65, 0xBE66, 0xBE67, 0xBE69, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E, /* 0xC0 */ + 0xBE6F, 0xBE72, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7E, /* 0xC0 */ + 0xBE7F, 0xBE81, 0xBE82, 0xBE83, 0xBE85, 0xBE86, 0xBE87, 0xBE88, /* 0xD0 */ + 0xBE89, 0xBE8A, 0xBE8B, 0xBE8E, 0xBE92, 0xBE93, 0xBE94, 0xBE95, /* 0xD0 */ + 0xBE96, 0xBE97, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, /* 0xE0 */ + 0xBEA0, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, 0xBEA7, /* 0xE0 */ + 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0, /* 0xF0 */ + 0xBEB1, 0xBEB2, 0xBEB3, 0xBEB4, 0xBEB5, 0xBEB6, 0xBEB7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBEB8, 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD, 0xBEBE, /* 0x40 */ + 0xBEBF, 0xBEC0, 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6, /* 0x40 */ + 0xBEC7, 0xBEC8, 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, /* 0x50 */ + 0xBECF, 0xBED2, 0xBED3, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBED5, 0xBED6, 0xBED9, 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, /* 0x60 */ + 0xBEDE, 0xBEDF, 0xBEE1, 0xBEE2, 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, /* 0x60 */ + 0xBEEA, 0xBEEB, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF2, /* 0x70 */ + 0xBEF3, 0xBEF4, 0xBEF5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, 0xBEFB, 0xBEFC, /* 0x80 */ + 0xBEFD, 0xBEFE, 0xBEFF, 0xBF00, 0xBF02, 0xBF03, 0xBF04, 0xBF05, /* 0x80 */ + 0xBF06, 0xBF07, 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D, 0xBF0E, 0xBF0F, /* 0x90 */ + 0xBF10, 0xBF11, 0xBF12, 0xBF13, 0xBF14, 0xBF15, 0xBF16, 0xBF17, /* 0x90 */ + 0xBF1A, 0xBF1E, 0xBF1F, 0xBF20, 0xBF21, 0xBF22, 0xBF23, 0xBF24, /* 0xA0 */ + 0xBF25, 0xBF26, 0xBF27, 0xBF28, 0xBF29, 0xBF2A, 0xBF2B, 0xBF2C, /* 0xA0 */ + 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, 0xBF32, 0xBF33, 0xBF34, /* 0xB0 */ + 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, 0xBF3A, 0xBF3B, 0xBF3C, /* 0xB0 */ + 0xBF3D, 0xBF3E, 0xBF3F, 0xBF42, 0xBF43, 0xBF45, 0xBF46, 0xBF47, /* 0xC0 */ + 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF52, /* 0xC0 */ + 0xBF53, 0xBF54, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, /* 0xD0 */ + 0xBF5C, 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, /* 0xD0 */ + 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, /* 0xE0 */ + 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, /* 0xE0 */ + 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, /* 0xF0 */ + 0xBF7C, 0xBF7D, 0xBF7E, 0xBF7F, 0xBF80, 0xBF81, 0xBF82 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, 0xBF89, /* 0x40 */ + 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, /* 0x40 */ + 0xBF92, 0xBF93, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, /* 0x50 */ + 0xBF9B, 0xBF9C, 0xBF9D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBF9E, 0xBF9F, 0xBFA0, 0xBFA1, 0xBFA2, 0xBFA3, 0xBFA4, /* 0x60 */ + 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, 0xBFAA, 0xBFAB, 0xBFAC, /* 0x60 */ + 0xBFAD, 0xBFAE, 0xBFAF, 0xBFB1, 0xBFB2, 0xBFB3, 0xBFB4, 0xBFB5, /* 0x70 */ + 0xBFB6, 0xBFB7, 0xBFB8, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, 0xBFBE, 0xBFBF, /* 0x80 */ + 0xBFC0, 0xBFC1, 0xBFC2, 0xBFC3, 0xBFC4, 0xBFC6, 0xBFC7, 0xBFC8, /* 0x80 */ + 0xBFC9, 0xBFCA, 0xBFCB, 0xBFCE, 0xBFCF, 0xBFD1, 0xBFD2, 0xBFD3, /* 0x90 */ + 0xBFD5, 0xBFD6, 0xBFD7, 0xBFD8, 0xBFD9, 0xBFDA, 0xBFDB, 0xBFDD, /* 0x90 */ + 0xBFDE, 0xBFE0, 0xBFE2, 0xBFE3, 0xBFE4, 0xBFE5, 0xBFE6, 0xBFE7, /* 0xA0 */ + 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB, 0xBFEC, 0xBFED, 0xBFEE, 0xBFEF, /* 0xA0 */ + 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3, 0xBFF4, 0xBFF5, 0xBFF6, 0xBFF7, /* 0xB0 */ + 0xBFF8, 0xBFF9, 0xBFFA, 0xBFFB, 0xBFFC, 0xBFFD, 0xBFFE, 0xBFFF, /* 0xB0 */ + 0xC000, 0xC001, 0xC002, 0xC003, 0xC004, 0xC005, 0xC006, 0xC007, /* 0xC0 */ + 0xC008, 0xC009, 0xC00A, 0xC00B, 0xC00C, 0xC00D, 0xC00E, 0xC00F, /* 0xC0 */ + 0xC010, 0xC011, 0xC012, 0xC013, 0xC014, 0xC015, 0xC016, 0xC017, /* 0xD0 */ + 0xC018, 0xC019, 0xC01A, 0xC01B, 0xC01C, 0xC01D, 0xC01E, 0xC01F, /* 0xD0 */ + 0xC020, 0xC021, 0xC022, 0xC023, 0xC024, 0xC025, 0xC026, 0xC027, /* 0xE0 */ + 0xC028, 0xC029, 0xC02A, 0xC02B, 0xC02C, 0xC02D, 0xC02E, 0xC02F, /* 0xE0 */ + 0xC030, 0xC031, 0xC032, 0xC033, 0xC034, 0xC035, 0xC036, 0xC037, /* 0xF0 */ + 0xC038, 0xC039, 0xC03A, 0xC03B, 0xC03D, 0xC03E, 0xC03F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC040, 0xC041, 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, /* 0x40 */ + 0xC047, 0xC048, 0xC049, 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, /* 0x40 */ + 0xC04F, 0xC050, 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, /* 0x50 */ + 0xC059, 0xC05A, 0xC05B, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC05D, 0xC05E, 0xC05F, 0xC061, 0xC062, 0xC063, 0xC064, /* 0x60 */ + 0xC065, 0xC066, 0xC067, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, /* 0x60 */ + 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073, 0xC074, 0xC075, 0xC076, /* 0x70 */ + 0xC077, 0xC078, 0xC079, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC07A, 0xC07B, 0xC07C, 0xC07D, 0xC07E, 0xC07F, 0xC080, /* 0x80 */ + 0xC081, 0xC082, 0xC083, 0xC084, 0xC085, 0xC086, 0xC087, 0xC088, /* 0x80 */ + 0xC089, 0xC08A, 0xC08B, 0xC08C, 0xC08D, 0xC08E, 0xC08F, 0xC092, /* 0x90 */ + 0xC093, 0xC095, 0xC096, 0xC097, 0xC099, 0xC09A, 0xC09B, 0xC09C, /* 0x90 */ + 0xC09D, 0xC09E, 0xC09F, 0xC0A2, 0xC0A4, 0xC0A6, 0xC0A7, 0xC0A8, /* 0xA0 */ + 0xC0A9, 0xC0AA, 0xC0AB, 0xC0AE, 0xC0B1, 0xC0B2, 0xC0B7, 0xC0B8, /* 0xA0 */ + 0xC0B9, 0xC0BA, 0xC0BB, 0xC0BE, 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C6, /* 0xB0 */ + 0xC0C7, 0xC0CA, 0xC0CB, 0xC0CD, 0xC0CE, 0xC0CF, 0xC0D1, 0xC0D2, /* 0xB0 */ + 0xC0D3, 0xC0D4, 0xC0D5, 0xC0D6, 0xC0D7, 0xC0DA, 0xC0DE, 0xC0DF, /* 0xC0 */ + 0xC0E0, 0xC0E1, 0xC0E2, 0xC0E3, 0xC0E6, 0xC0E7, 0xC0E9, 0xC0EA, /* 0xC0 */ + 0xC0EB, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, 0xC0F1, 0xC0F2, 0xC0F3, /* 0xD0 */ + 0xC0F6, 0xC0F8, 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC0FE, 0xC0FF, /* 0xD0 */ + 0xC101, 0xC102, 0xC103, 0xC105, 0xC106, 0xC107, 0xC109, 0xC10A, /* 0xE0 */ + 0xC10B, 0xC10C, 0xC10D, 0xC10E, 0xC10F, 0xC111, 0xC112, 0xC113, /* 0xE0 */ + 0xC114, 0xC116, 0xC117, 0xC118, 0xC119, 0xC11A, 0xC11B, 0xC121, /* 0xF0 */ + 0xC122, 0xC125, 0xC128, 0xC129, 0xC12A, 0xC12B, 0xC12E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC132, 0xC133, 0xC134, 0xC135, 0xC137, 0xC13A, 0xC13B, /* 0x40 */ + 0xC13D, 0xC13E, 0xC13F, 0xC141, 0xC142, 0xC143, 0xC144, 0xC145, /* 0x40 */ + 0xC146, 0xC147, 0xC14A, 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC152, /* 0x50 */ + 0xC153, 0xC156, 0xC157, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC159, 0xC15A, 0xC15B, 0xC15D, 0xC15E, 0xC15F, 0xC160, /* 0x60 */ + 0xC161, 0xC162, 0xC163, 0xC166, 0xC16A, 0xC16B, 0xC16C, 0xC16D, /* 0x60 */ + 0xC16E, 0xC16F, 0xC171, 0xC172, 0xC173, 0xC175, 0xC176, 0xC177, /* 0x70 */ + 0xC179, 0xC17A, 0xC17B, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC17C, 0xC17D, 0xC17E, 0xC17F, 0xC180, 0xC181, 0xC182, /* 0x80 */ + 0xC183, 0xC184, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, /* 0x80 */ + 0xC18F, 0xC191, 0xC192, 0xC193, 0xC195, 0xC197, 0xC198, 0xC199, /* 0x90 */ + 0xC19A, 0xC19B, 0xC19E, 0xC1A0, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A6, /* 0x90 */ + 0xC1A7, 0xC1AA, 0xC1AB, 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B1, 0xC1B2, /* 0xA0 */ + 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, 0xC1B7, 0xC1B8, 0xC1B9, 0xC1BA, /* 0xA0 */ + 0xC1BB, 0xC1BC, 0xC1BE, 0xC1BF, 0xC1C0, 0xC1C1, 0xC1C2, 0xC1C3, /* 0xB0 */ + 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C9, 0xC1CA, 0xC1CB, 0xC1CD, 0xC1CE, /* 0xB0 */ + 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, 0xC1D3, 0xC1D5, 0xC1D6, 0xC1D9, /* 0xC0 */ + 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF, 0xC1E1, 0xC1E2, /* 0xC0 */ + 0xC1E3, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, /* 0xD0 */ + 0xC1ED, 0xC1EE, 0xC1EF, 0xC1F2, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7, /* 0xD0 */ + 0xC1F8, 0xC1F9, 0xC1FA, 0xC1FB, 0xC1FE, 0xC1FF, 0xC201, 0xC202, /* 0xE0 */ + 0xC203, 0xC205, 0xC206, 0xC207, 0xC208, 0xC209, 0xC20A, 0xC20B, /* 0xE0 */ + 0xC20E, 0xC210, 0xC212, 0xC213, 0xC214, 0xC215, 0xC216, 0xC217, /* 0xF0 */ + 0xC21A, 0xC21B, 0xC21D, 0xC21E, 0xC221, 0xC222, 0xC223 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC224, 0xC225, 0xC226, 0xC227, 0xC22A, 0xC22C, 0xC22E, /* 0x40 */ + 0xC230, 0xC233, 0xC235, 0xC236, 0xC237, 0xC238, 0xC239, 0xC23A, /* 0x40 */ + 0xC23B, 0xC23C, 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242, /* 0x50 */ + 0xC243, 0xC244, 0xC245, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC246, 0xC247, 0xC249, 0xC24A, 0xC24B, 0xC24C, 0xC24D, /* 0x60 */ + 0xC24E, 0xC24F, 0xC252, 0xC253, 0xC255, 0xC256, 0xC257, 0xC259, /* 0x60 */ + 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, 0xC25F, 0xC261, 0xC262, /* 0x70 */ + 0xC263, 0xC264, 0xC266, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B, 0xC26E, 0xC26F, /* 0x80 */ + 0xC271, 0xC272, 0xC273, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, /* 0x80 */ + 0xC27A, 0xC27B, 0xC27E, 0xC280, 0xC282, 0xC283, 0xC284, 0xC285, /* 0x90 */ + 0xC286, 0xC287, 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, 0xC28F, /* 0x90 */ + 0xC291, 0xC292, 0xC293, 0xC294, 0xC295, 0xC296, 0xC297, 0xC299, /* 0xA0 */ + 0xC29A, 0xC29C, 0xC29E, 0xC29F, 0xC2A0, 0xC2A1, 0xC2A2, 0xC2A3, /* 0xA0 */ + 0xC2A6, 0xC2A7, 0xC2A9, 0xC2AA, 0xC2AB, 0xC2AE, 0xC2AF, 0xC2B0, /* 0xB0 */ + 0xC2B1, 0xC2B2, 0xC2B3, 0xC2B6, 0xC2B8, 0xC2BA, 0xC2BB, 0xC2BC, /* 0xB0 */ + 0xC2BD, 0xC2BE, 0xC2BF, 0xC2C0, 0xC2C1, 0xC2C2, 0xC2C3, 0xC2C4, /* 0xC0 */ + 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, /* 0xC0 */ + 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D2, 0xC2D3, 0xC2D4, /* 0xD0 */ + 0xC2D5, 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0xC2DE, /* 0xD0 */ + 0xC2DF, 0xC2E1, 0xC2E2, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, 0xC2E9, /* 0xE0 */ + 0xC2EA, 0xC2EE, 0xC2F0, 0xC2F2, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F7, /* 0xE0 */ + 0xC2FA, 0xC2FD, 0xC2FE, 0xC2FF, 0xC301, 0xC302, 0xC303, 0xC304, /* 0xF0 */ + 0xC305, 0xC306, 0xC307, 0xC30A, 0xC30B, 0xC30E, 0xC30F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC310, 0xC311, 0xC312, 0xC316, 0xC317, 0xC319, 0xC31A, /* 0x40 */ + 0xC31B, 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, 0xC323, /* 0x40 */ + 0xC326, 0xC327, 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F, /* 0x50 */ + 0xC330, 0xC331, 0xC332, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC333, 0xC334, 0xC335, 0xC336, 0xC337, 0xC338, 0xC339, /* 0x60 */ + 0xC33A, 0xC33B, 0xC33C, 0xC33D, 0xC33E, 0xC33F, 0xC340, 0xC341, /* 0x60 */ + 0xC342, 0xC343, 0xC344, 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, /* 0x70 */ + 0xC34B, 0xC34C, 0xC34D, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC352, 0xC353, 0xC354, /* 0x80 */ + 0xC355, 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, 0xC35B, 0xC35C, /* 0x80 */ + 0xC35D, 0xC35E, 0xC35F, 0xC360, 0xC361, 0xC362, 0xC363, 0xC364, /* 0x90 */ + 0xC365, 0xC366, 0xC367, 0xC36A, 0xC36B, 0xC36D, 0xC36E, 0xC36F, /* 0x90 */ + 0xC371, 0xC373, 0xC374, 0xC375, 0xC376, 0xC377, 0xC37A, 0xC37B, /* 0xA0 */ + 0xC37E, 0xC37F, 0xC380, 0xC381, 0xC382, 0xC383, 0xC385, 0xC386, /* 0xA0 */ + 0xC387, 0xC389, 0xC38A, 0xC38B, 0xC38D, 0xC38E, 0xC38F, 0xC390, /* 0xB0 */ + 0xC391, 0xC392, 0xC393, 0xC394, 0xC395, 0xC396, 0xC397, 0xC398, /* 0xB0 */ + 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0xC3A0, /* 0xC0 */ + 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, /* 0xC0 */ + 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, /* 0xD0 */ + 0xC3B1, 0xC3B2, 0xC3B3, 0xC3B4, 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, /* 0xD0 */ + 0xC3B9, 0xC3BA, 0xC3BB, 0xC3BC, 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C1, /* 0xE0 */ + 0xC3C2, 0xC3C3, 0xC3C4, 0xC3C5, 0xC3C6, 0xC3C7, 0xC3C8, 0xC3C9, /* 0xE0 */ + 0xC3CA, 0xC3CB, 0xC3CC, 0xC3CD, 0xC3CE, 0xC3CF, 0xC3D0, 0xC3D1, /* 0xF0 */ + 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5, 0xC3D6, 0xC3D7, 0xC3DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC3DB, 0xC3DD, 0xC3DE, 0xC3E1, 0xC3E3, 0xC3E4, 0xC3E5, /* 0x40 */ + 0xC3E6, 0xC3E7, 0xC3EA, 0xC3EB, 0xC3EC, 0xC3EE, 0xC3EF, 0xC3F0, /* 0x40 */ + 0xC3F1, 0xC3F2, 0xC3F3, 0xC3F6, 0xC3F7, 0xC3F9, 0xC3FA, 0xC3FB, /* 0x50 */ + 0xC3FC, 0xC3FD, 0xC3FE, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC3FF, 0xC400, 0xC401, 0xC402, 0xC403, 0xC404, 0xC405, /* 0x60 */ + 0xC406, 0xC407, 0xC409, 0xC40A, 0xC40B, 0xC40C, 0xC40D, 0xC40E, /* 0x60 */ + 0xC40F, 0xC411, 0xC412, 0xC413, 0xC414, 0xC415, 0xC416, 0xC417, /* 0x70 */ + 0xC418, 0xC419, 0xC41A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC41B, 0xC41C, 0xC41D, 0xC41E, 0xC41F, 0xC420, 0xC421, /* 0x80 */ + 0xC422, 0xC423, 0xC425, 0xC426, 0xC427, 0xC428, 0xC429, 0xC42A, /* 0x80 */ + 0xC42B, 0xC42D, 0xC42E, 0xC42F, 0xC431, 0xC432, 0xC433, 0xC435, /* 0x90 */ + 0xC436, 0xC437, 0xC438, 0xC439, 0xC43A, 0xC43B, 0xC43E, 0xC43F, /* 0x90 */ + 0xC440, 0xC441, 0xC442, 0xC443, 0xC444, 0xC445, 0xC446, 0xC447, /* 0xA0 */ + 0xC449, 0xC44A, 0xC44B, 0xC44C, 0xC44D, 0xC44E, 0xC44F, 0xC450, /* 0xA0 */ + 0xC451, 0xC452, 0xC453, 0xC454, 0xC455, 0xC456, 0xC457, 0xC458, /* 0xB0 */ + 0xC459, 0xC45A, 0xC45B, 0xC45C, 0xC45D, 0xC45E, 0xC45F, 0xC460, /* 0xB0 */ + 0xC461, 0xC462, 0xC463, 0xC466, 0xC467, 0xC469, 0xC46A, 0xC46B, /* 0xC0 */ + 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC472, 0xC473, 0xC476, /* 0xC0 */ + 0xC477, 0xC478, 0xC47A, 0xC47B, 0xC47C, 0xC47D, 0xC47E, 0xC47F, /* 0xD0 */ + 0xC481, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, /* 0xD0 */ + 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xC490, /* 0xE0 */ + 0xC491, 0xC492, 0xC493, 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, /* 0xE0 */ + 0xC49A, 0xC49B, 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2, /* 0xF0 */ + 0xC4A3, 0xC4A4, 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC4AA, 0xC4AB, 0xC4AC, 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, /* 0x40 */ + 0xC4B1, 0xC4B2, 0xC4B3, 0xC4B4, 0xC4B5, 0xC4B6, 0xC4B7, 0xC4B9, /* 0x40 */ + 0xC4BA, 0xC4BB, 0xC4BD, 0xC4BE, 0xC4BF, 0xC4C0, 0xC4C1, 0xC4C2, /* 0x50 */ + 0xC4C3, 0xC4C4, 0xC4C5, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC4C6, 0xC4C7, 0xC4C8, 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, /* 0x60 */ + 0xC4CD, 0xC4CE, 0xC4CF, 0xC4D0, 0xC4D1, 0xC4D2, 0xC4D3, 0xC4D4, /* 0x60 */ + 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA, 0xC4DB, 0xC4DC, /* 0x70 */ + 0xC4DD, 0xC4DE, 0xC4DF, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC4E0, 0xC4E1, 0xC4E2, 0xC4E3, 0xC4E4, 0xC4E5, 0xC4E6, /* 0x80 */ + 0xC4E7, 0xC4E8, 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED, 0xC4EE, 0xC4EF, /* 0x80 */ + 0xC4F2, 0xC4F3, 0xC4F5, 0xC4F6, 0xC4F7, 0xC4F9, 0xC4FB, 0xC4FC, /* 0x90 */ + 0xC4FD, 0xC4FE, 0xC502, 0xC503, 0xC504, 0xC505, 0xC506, 0xC507, /* 0x90 */ + 0xC508, 0xC509, 0xC50A, 0xC50B, 0xC50D, 0xC50E, 0xC50F, 0xC511, /* 0xA0 */ + 0xC512, 0xC513, 0xC515, 0xC516, 0xC517, 0xC518, 0xC519, 0xC51A, /* 0xA0 */ + 0xC51B, 0xC51D, 0xC51E, 0xC51F, 0xC520, 0xC521, 0xC522, 0xC523, /* 0xB0 */ + 0xC524, 0xC525, 0xC526, 0xC527, 0xC52A, 0xC52B, 0xC52D, 0xC52E, /* 0xB0 */ + 0xC52F, 0xC531, 0xC532, 0xC533, 0xC534, 0xC535, 0xC536, 0xC537, /* 0xC0 */ + 0xC53A, 0xC53C, 0xC53E, 0xC53F, 0xC540, 0xC541, 0xC542, 0xC543, /* 0xC0 */ + 0xC546, 0xC547, 0xC54B, 0xC54F, 0xC550, 0xC551, 0xC552, 0xC556, /* 0xD0 */ + 0xC55A, 0xC55B, 0xC55C, 0xC55F, 0xC562, 0xC563, 0xC565, 0xC566, /* 0xD0 */ + 0xC567, 0xC569, 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, 0xC56F, /* 0xE0 */ + 0xC572, 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57E, /* 0xE0 */ + 0xC57F, 0xC581, 0xC582, 0xC583, 0xC585, 0xC586, 0xC588, 0xC589, /* 0xF0 */ + 0xC58A, 0xC58B, 0xC58E, 0xC590, 0xC592, 0xC593, 0xC594 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC596, 0xC599, 0xC59A, 0xC59B, 0xC59D, 0xC59E, 0xC59F, /* 0x40 */ + 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6, 0xC5A7, 0xC5A8, /* 0x40 */ + 0xC5AA, 0xC5AB, 0xC5AC, 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, /* 0x50 */ + 0xC5B2, 0xC5B3, 0xC5B6, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC5B7, 0xC5BA, 0xC5BF, 0xC5C0, 0xC5C1, 0xC5C2, 0xC5C3, /* 0x60 */ + 0xC5CB, 0xC5CD, 0xC5CF, 0xC5D2, 0xC5D3, 0xC5D5, 0xC5D6, 0xC5D7, /* 0x60 */ + 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, 0xC5DF, 0xC5E2, /* 0x70 */ + 0xC5E4, 0xC5E6, 0xC5E7, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EF, 0xC5F1, 0xC5F2, /* 0x80 */ + 0xC5F3, 0xC5F5, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB, 0xC602, 0xC603, /* 0x80 */ + 0xC604, 0xC609, 0xC60A, 0xC60B, 0xC60D, 0xC60E, 0xC60F, 0xC611, /* 0x90 */ + 0xC612, 0xC613, 0xC614, 0xC615, 0xC616, 0xC617, 0xC61A, 0xC61D, /* 0x90 */ + 0xC61E, 0xC61F, 0xC620, 0xC621, 0xC622, 0xC623, 0xC626, 0xC627, /* 0xA0 */ + 0xC629, 0xC62A, 0xC62B, 0xC62F, 0xC631, 0xC632, 0xC636, 0xC638, /* 0xA0 */ + 0xC63A, 0xC63C, 0xC63D, 0xC63E, 0xC63F, 0xC642, 0xC643, 0xC645, /* 0xB0 */ + 0xC646, 0xC647, 0xC649, 0xC64A, 0xC64B, 0xC64C, 0xC64D, 0xC64E, /* 0xB0 */ + 0xC64F, 0xC652, 0xC656, 0xC657, 0xC658, 0xC659, 0xC65A, 0xC65B, /* 0xC0 */ + 0xC65E, 0xC65F, 0xC661, 0xC662, 0xC663, 0xC664, 0xC665, 0xC666, /* 0xC0 */ + 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66D, 0xC66E, 0xC670, /* 0xD0 */ + 0xC672, 0xC673, 0xC674, 0xC675, 0xC676, 0xC677, 0xC67A, 0xC67B, /* 0xD0 */ + 0xC67D, 0xC67E, 0xC67F, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, /* 0xE0 */ + 0xC686, 0xC687, 0xC68A, 0xC68C, 0xC68E, 0xC68F, 0xC690, 0xC691, /* 0xE0 */ + 0xC692, 0xC693, 0xC696, 0xC697, 0xC699, 0xC69A, 0xC69B, 0xC69D, /* 0xF0 */ + 0xC69E, 0xC69F, 0xC6A0, 0xC6A1, 0xC6A2, 0xC6A3, 0xC6A6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6A8, 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, /* 0x40 */ + 0xC6B2, 0xC6B3, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6BB, 0xC6BC, 0xC6BD, /* 0x40 */ + 0xC6BE, 0xC6BF, 0xC6C2, 0xC6C4, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, /* 0x50 */ + 0xC6CA, 0xC6CB, 0xC6CE, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC6CF, 0xC6D1, 0xC6D2, 0xC6D3, 0xC6D5, 0xC6D6, 0xC6D7, /* 0x60 */ + 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, 0xC6DE, 0xC6DF, 0xC6E2, 0xC6E3, /* 0x60 */ + 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0xC6EA, 0xC6EB, 0xC6ED, 0xC6EE, /* 0x70 */ + 0xC6EF, 0xC6F1, 0xC6F2, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC6F3, 0xC6F4, 0xC6F5, 0xC6F6, 0xC6F7, 0xC6FA, 0xC6FB, /* 0x80 */ + 0xC6FC, 0xC6FE, 0xC6FF, 0xC700, 0xC701, 0xC702, 0xC703, 0xC706, /* 0x80 */ + 0xC707, 0xC709, 0xC70A, 0xC70B, 0xC70D, 0xC70E, 0xC70F, 0xC710, /* 0x90 */ + 0xC711, 0xC712, 0xC713, 0xC716, 0xC718, 0xC71A, 0xC71B, 0xC71C, /* 0x90 */ + 0xC71D, 0xC71E, 0xC71F, 0xC722, 0xC723, 0xC725, 0xC726, 0xC727, /* 0xA0 */ + 0xC729, 0xC72A, 0xC72B, 0xC72C, 0xC72D, 0xC72E, 0xC72F, 0xC732, /* 0xA0 */ + 0xC734, 0xC736, 0xC738, 0xC739, 0xC73A, 0xC73B, 0xC73E, 0xC73F, /* 0xB0 */ + 0xC741, 0xC742, 0xC743, 0xC745, 0xC746, 0xC747, 0xC748, 0xC749, /* 0xB0 */ + 0xC74B, 0xC74E, 0xC750, 0xC759, 0xC75A, 0xC75B, 0xC75D, 0xC75E, /* 0xC0 */ + 0xC75F, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, 0xC767, /* 0xC0 */ + 0xC769, 0xC76A, 0xC76C, 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xC771, /* 0xD0 */ + 0xC772, 0xC773, 0xC776, 0xC777, 0xC779, 0xC77A, 0xC77B, 0xC77F, /* 0xD0 */ + 0xC780, 0xC781, 0xC782, 0xC786, 0xC78B, 0xC78C, 0xC78D, 0xC78F, /* 0xE0 */ + 0xC792, 0xC793, 0xC795, 0xC799, 0xC79B, 0xC79C, 0xC79D, 0xC79E, /* 0xE0 */ + 0xC79F, 0xC7A2, 0xC7A7, 0xC7A8, 0xC7A9, 0xC7AA, 0xC7AB, 0xC7AE, /* 0xF0 */ + 0xC7AF, 0xC7B1, 0xC7B2, 0xC7B3, 0xC7B5, 0xC7B6, 0xC7B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BE, 0xC7C2, 0xC7C3, /* 0x40 */ + 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, 0xC7CA, 0xC7CB, 0xC7CD, 0xC7CF, /* 0x40 */ + 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, 0xC7D7, 0xC7D9, /* 0x50 */ + 0xC7DA, 0xC7DB, 0xC7DC, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC7DE, 0xC7DF, 0xC7E0, 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E5, /* 0x60 */ + 0xC7E6, 0xC7E7, 0xC7E9, 0xC7EA, 0xC7EB, 0xC7ED, 0xC7EE, 0xC7EF, /* 0x60 */ + 0xC7F0, 0xC7F1, 0xC7F2, 0xC7F3, 0xC7F4, 0xC7F5, 0xC7F6, 0xC7F7, /* 0x70 */ + 0xC7F8, 0xC7F9, 0xC7FA, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC7FB, 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0xC802, 0xC803, /* 0x80 */ + 0xC805, 0xC806, 0xC807, 0xC809, 0xC80B, 0xC80C, 0xC80D, 0xC80E, /* 0x80 */ + 0xC80F, 0xC812, 0xC814, 0xC817, 0xC818, 0xC819, 0xC81A, 0xC81B, /* 0x90 */ + 0xC81E, 0xC81F, 0xC821, 0xC822, 0xC823, 0xC825, 0xC826, 0xC827, /* 0x90 */ + 0xC828, 0xC829, 0xC82A, 0xC82B, 0xC82E, 0xC830, 0xC832, 0xC833, /* 0xA0 */ + 0xC834, 0xC835, 0xC836, 0xC837, 0xC839, 0xC83A, 0xC83B, 0xC83D, /* 0xA0 */ + 0xC83E, 0xC83F, 0xC841, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, /* 0xB0 */ + 0xC847, 0xC84A, 0xC84B, 0xC84E, 0xC84F, 0xC850, 0xC851, 0xC852, /* 0xB0 */ + 0xC853, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, 0xC85B, /* 0xC0 */ + 0xC85C, 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, 0xC863, /* 0xC0 */ + 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, 0xC86A, 0xC86B, /* 0xD0 */ + 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC872, 0xC873, 0xC875, 0xC876, /* 0xD0 */ + 0xC877, 0xC879, 0xC87B, 0xC87C, 0xC87D, 0xC87E, 0xC87F, 0xC882, /* 0xE0 */ + 0xC884, 0xC888, 0xC889, 0xC88A, 0xC88E, 0xC88F, 0xC890, 0xC891, /* 0xE0 */ + 0xC892, 0xC893, 0xC895, 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, /* 0xF0 */ + 0xC89B, 0xC89C, 0xC89E, 0xC8A0, 0xC8A2, 0xC8A3, 0xC8A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC8A5, 0xC8A6, 0xC8A7, 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, /* 0x40 */ + 0xC8AD, 0xC8AE, 0xC8AF, 0xC8B0, 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, /* 0x40 */ + 0xC8B5, 0xC8B6, 0xC8B7, 0xC8B8, 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BE, /* 0x50 */ + 0xC8BF, 0xC8C0, 0xC8C1, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC8C2, 0xC8C3, 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C9, 0xC8CA, /* 0x60 */ + 0xC8CB, 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D2, 0xC8D3, /* 0x60 */ + 0xC8D6, 0xC8D8, 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, 0xC8DE, 0xC8DF, /* 0x70 */ + 0xC8E2, 0xC8E3, 0xC8E5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC8E6, 0xC8E7, 0xC8E8, 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, /* 0x80 */ + 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, 0xC8F1, 0xC8F2, 0xC8F3, 0xC8F4, /* 0x80 */ + 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB, 0xC8FE, 0xC8FF, /* 0x90 */ + 0xC901, 0xC902, 0xC903, 0xC907, 0xC908, 0xC909, 0xC90A, 0xC90B, /* 0x90 */ + 0xC90E, 0x3000, 0x3001, 0x3002, 0x00B7, 0x2025, 0x2026, 0x00A8, /* 0xA0 */ + 0x3003, 0x00AD, 0x2015, 0x2225, 0xFF3C, 0x223C, 0x2018, 0x2019, /* 0xA0 */ + 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, /* 0xB0 */ + 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0x00B1, 0x00D7, /* 0xB0 */ + 0x00F7, 0x2260, 0x2264, 0x2265, 0x221E, 0x2234, 0x00B0, 0x2032, /* 0xC0 */ + 0x2033, 0x2103, 0x212B, 0xFFE0, 0xFFE1, 0xFFE5, 0x2642, 0x2640, /* 0xC0 */ + 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00A7, /* 0xD0 */ + 0x203B, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, /* 0xD0 */ + 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x2192, 0x2190, /* 0xE0 */ + 0x2191, 0x2193, 0x2194, 0x3013, 0x226A, 0x226B, 0x221A, 0x223D, /* 0xE0 */ + 0x221D, 0x2235, 0x222B, 0x222C, 0x2208, 0x220B, 0x2286, 0x2287, /* 0xF0 */ + 0x2282, 0x2283, 0x222A, 0x2229, 0x2227, 0x2228, 0xFFE2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC910, 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917, /* 0x40 */ + 0xC919, 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, 0xC91F, 0xC920, /* 0x40 */ + 0xC921, 0xC922, 0xC923, 0xC924, 0xC925, 0xC926, 0xC927, 0xC928, /* 0x50 */ + 0xC929, 0xC92A, 0xC92B, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC92D, 0xC92E, 0xC92F, 0xC930, 0xC931, 0xC932, 0xC933, /* 0x60 */ + 0xC935, 0xC936, 0xC937, 0xC938, 0xC939, 0xC93A, 0xC93B, 0xC93C, /* 0x60 */ + 0xC93D, 0xC93E, 0xC93F, 0xC940, 0xC941, 0xC942, 0xC943, 0xC944, /* 0x70 */ + 0xC945, 0xC946, 0xC947, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC948, 0xC949, 0xC94A, 0xC94B, 0xC94C, 0xC94D, 0xC94E, /* 0x80 */ + 0xC94F, 0xC952, 0xC953, 0xC955, 0xC956, 0xC957, 0xC959, 0xC95A, /* 0x80 */ + 0xC95B, 0xC95C, 0xC95D, 0xC95E, 0xC95F, 0xC962, 0xC964, 0xC965, /* 0x90 */ + 0xC966, 0xC967, 0xC968, 0xC969, 0xC96A, 0xC96B, 0xC96D, 0xC96E, /* 0x90 */ + 0xC96F, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x00B4, 0xFF5E, 0x02C7, /* 0xA0 */ + 0x02D8, 0x02DD, 0x02DA, 0x02D9, 0x00B8, 0x02DB, 0x00A1, 0x00BF, /* 0xA0 */ + 0x02D0, 0x222E, 0x2211, 0x220F, 0x00A4, 0x2109, 0x2030, 0x25C1, /* 0xB0 */ + 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, /* 0xB0 */ + 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1, 0x2592, 0x25A4, /* 0xC0 */ + 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668, 0x260F, 0x260E, /* 0xC0 */ + 0x261C, 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, /* 0xD0 */ + 0x2196, 0x2198, 0x266D, 0x2669, 0x266A, 0x266C, 0x327F, 0x321C, /* 0xD0 */ + 0x2116, 0x33C7, 0x2122, 0x33C2, 0x33D8, 0x2121, 0x20AC, 0x00AE /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC971, 0xC972, 0xC973, 0xC975, 0xC976, 0xC977, 0xC978, /* 0x40 */ + 0xC979, 0xC97A, 0xC97B, 0xC97D, 0xC97E, 0xC97F, 0xC980, 0xC981, /* 0x40 */ + 0xC982, 0xC983, 0xC984, 0xC985, 0xC986, 0xC987, 0xC98A, 0xC98B, /* 0x50 */ + 0xC98D, 0xC98E, 0xC98F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, 0xC997, /* 0x60 */ + 0xC99A, 0xC99C, 0xC99E, 0xC99F, 0xC9A0, 0xC9A1, 0xC9A2, 0xC9A3, /* 0x60 */ + 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, 0xC9AA, 0xC9AB, /* 0x70 */ + 0xC9AC, 0xC9AD, 0xC9AE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, 0xC9B3, 0xC9B4, 0xC9B5, /* 0x80 */ + 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, /* 0x80 */ + 0xC9BE, 0xC9BF, 0xC9C2, 0xC9C3, 0xC9C5, 0xC9C6, 0xC9C9, 0xC9CB, /* 0x90 */ + 0xC9CC, 0xC9CD, 0xC9CE, 0xC9CF, 0xC9D2, 0xC9D4, 0xC9D7, 0xC9D8, /* 0x90 */ + 0xC9DB, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, /* 0xA0 */ + 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, /* 0xA0 */ + 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0xB0 */ + 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, /* 0xB0 */ + 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0xC0 */ + 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0xC0 */ + 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0xD0 */ + 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6, 0xFF3D, 0xFF3E, 0xFF3F, /* 0xD0 */ + 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0xE0 */ + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0xE0 */ + 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0xF0 */ + 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC9DE, 0xC9DF, 0xC9E1, 0xC9E3, 0xC9E5, 0xC9E6, 0xC9E8, /* 0x40 */ + 0xC9E9, 0xC9EA, 0xC9EB, 0xC9EE, 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5, /* 0x40 */ + 0xC9F6, 0xC9F7, 0xC9FA, 0xC9FB, 0xC9FD, 0xC9FE, 0xC9FF, 0xCA01, /* 0x50 */ + 0xCA02, 0xCA03, 0xCA04, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCA05, 0xCA06, 0xCA07, 0xCA0A, 0xCA0E, 0xCA0F, 0xCA10, /* 0x60 */ + 0xCA11, 0xCA12, 0xCA13, 0xCA15, 0xCA16, 0xCA17, 0xCA19, 0xCA1A, /* 0x60 */ + 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F, 0xCA20, 0xCA21, 0xCA22, /* 0x70 */ + 0xCA23, 0xCA24, 0xCA25, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCA26, 0xCA27, 0xCA28, 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, /* 0x80 */ + 0xCA2E, 0xCA2F, 0xCA30, 0xCA31, 0xCA32, 0xCA33, 0xCA34, 0xCA35, /* 0x80 */ + 0xCA36, 0xCA37, 0xCA38, 0xCA39, 0xCA3A, 0xCA3B, 0xCA3C, 0xCA3D, /* 0x90 */ + 0xCA3E, 0xCA3F, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, 0xCA45, /* 0x90 */ + 0xCA46, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, /* 0xA0 */ + 0x3138, 0x3139, 0x313A, 0x313B, 0x313C, 0x313D, 0x313E, 0x313F, /* 0xA0 */ + 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, /* 0xB0 */ + 0x3148, 0x3149, 0x314A, 0x314B, 0x314C, 0x314D, 0x314E, 0x314F, /* 0xB0 */ + 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, /* 0xC0 */ + 0x3158, 0x3159, 0x315A, 0x315B, 0x315C, 0x315D, 0x315E, 0x315F, /* 0xC0 */ + 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, /* 0xD0 */ + 0x3168, 0x3169, 0x316A, 0x316B, 0x316C, 0x316D, 0x316E, 0x316F, /* 0xD0 */ + 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, /* 0xE0 */ + 0x3178, 0x3179, 0x317A, 0x317B, 0x317C, 0x317D, 0x317E, 0x317F, /* 0xE0 */ + 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, /* 0xF0 */ + 0x3188, 0x3189, 0x318A, 0x318B, 0x318C, 0x318D, 0x318E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4E, 0xCA4F, /* 0x40 */ + 0xCA51, 0xCA52, 0xCA53, 0xCA55, 0xCA56, 0xCA57, 0xCA58, 0xCA59, /* 0x40 */ + 0xCA5A, 0xCA5B, 0xCA5E, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, /* 0x50 */ + 0xCA67, 0xCA69, 0xCA6A, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xCA70, 0xCA71, /* 0x60 */ + 0xCA72, 0xCA73, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, /* 0x60 */ + 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7E, 0xCA7F, 0xCA80, 0xCA81, 0xCA82, /* 0x70 */ + 0xCA83, 0xCA85, 0xCA86, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, 0xCA8D, /* 0x80 */ + 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, 0xCA95, /* 0x80 */ + 0xCA96, 0xCA97, 0xCA99, 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E, /* 0x90 */ + 0xCA9F, 0xCAA0, 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, /* 0x90 */ + 0xCAA7, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, /* 0xA0 */ + 0x2177, 0x2178, 0x2179, 0, 0, 0, 0, 0, /* 0xA0 */ + 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, /* 0xB0 */ + 0x2168, 0x2169, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xC0 */ + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xC0 */ + 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0xD0 */ + 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xE0 */ + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xE0 */ + 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0xF0 */ + 0x03C9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, /* 0x40 */ + 0xCAAF, 0xCAB0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, /* 0x40 */ + 0xCAB7, 0xCAB8, 0xCAB9, 0xCABA, 0xCABB, 0xCABE, 0xCABF, 0xCAC1, /* 0x50 */ + 0xCAC2, 0xCAC3, 0xCAC5, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA, 0xCACB, 0xCACE, /* 0x60 */ + 0xCAD0, 0xCAD2, 0xCAD4, 0xCAD5, 0xCAD6, 0xCAD7, 0xCADA, 0xCADB, /* 0x60 */ + 0xCADC, 0xCADD, 0xCADE, 0xCADF, 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4, /* 0x70 */ + 0xCAE5, 0xCAE6, 0xCAE7, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCAE8, 0xCAE9, 0xCAEA, 0xCAEB, 0xCAED, 0xCAEE, 0xCAEF, /* 0x80 */ + 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, /* 0x80 */ + 0xCAF9, 0xCAFA, 0xCAFB, 0xCAFC, 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, /* 0x90 */ + 0xCB01, 0xCB02, 0xCB03, 0xCB04, 0xCB05, 0xCB06, 0xCB07, 0xCB09, /* 0x90 */ + 0xCB0A, 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, /* 0xA0 */ + 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, /* 0xA0 */ + 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, /* 0xB0 */ + 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, /* 0xB0 */ + 0x2542, 0x2512, 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, 0x250E, /* 0xC0 */ + 0x250D, 0x251E, 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, /* 0xC0 */ + 0x252A, 0x252D, 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, /* 0xD0 */ + 0x253A, 0x253D, 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, /* 0xD0 */ + 0x2546, 0x2547, 0x2548, 0x2549, 0x254A /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCB0B, 0xCB0C, 0xCB0D, 0xCB0E, 0xCB0F, 0xCB11, 0xCB12, /* 0x40 */ + 0xCB13, 0xCB15, 0xCB16, 0xCB17, 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, /* 0x40 */ + 0xCB1D, 0xCB1E, 0xCB1F, 0xCB22, 0xCB23, 0xCB24, 0xCB25, 0xCB26, /* 0x50 */ + 0xCB27, 0xCB28, 0xCB29, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCB2A, 0xCB2B, 0xCB2C, 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, /* 0x60 */ + 0xCB31, 0xCB32, 0xCB33, 0xCB34, 0xCB35, 0xCB36, 0xCB37, 0xCB38, /* 0x60 */ + 0xCB39, 0xCB3A, 0xCB3B, 0xCB3C, 0xCB3D, 0xCB3E, 0xCB3F, 0xCB40, /* 0x70 */ + 0xCB42, 0xCB43, 0xCB44, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCB45, 0xCB46, 0xCB47, 0xCB4A, 0xCB4B, 0xCB4D, 0xCB4E, /* 0x80 */ + 0xCB4F, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xCB55, 0xCB56, 0xCB57, /* 0x80 */ + 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5E, 0xCB5F, 0xCB60, 0xCB61, 0xCB62, /* 0x90 */ + 0xCB63, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A, 0xCB6B, /* 0x90 */ + 0xCB6C, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33C4, 0x33A3, /* 0xA0 */ + 0x33A4, 0x33A5, 0x33A6, 0x3399, 0x339A, 0x339B, 0x339C, 0x339D, /* 0xA0 */ + 0x339E, 0x339F, 0x33A0, 0x33A1, 0x33A2, 0x33CA, 0x338D, 0x338E, /* 0xB0 */ + 0x338F, 0x33CF, 0x3388, 0x3389, 0x33C8, 0x33A7, 0x33A8, 0x33B0, /* 0xB0 */ + 0x33B1, 0x33B2, 0x33B3, 0x33B4, 0x33B5, 0x33B6, 0x33B7, 0x33B8, /* 0xC0 */ + 0x33B9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33BA, 0x33BB, /* 0xC0 */ + 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390, 0x3391, 0x3392, 0x3393, /* 0xD0 */ + 0x3394, 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B, 0x338C, 0x33D6, /* 0xD0 */ + 0x33C5, 0x33AD, 0x33AE, 0x33AF, 0x33DB, 0x33A9, 0x33AA, 0x33AB, /* 0xE0 */ + 0x33AC, 0x33DD, 0x33D0, 0x33D3, 0x33C3, 0x33C9, 0x33DC, 0x33C6 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, 0xCB73, /* 0x40 */ + 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, /* 0x40 */ + 0xCB7E, 0xCB7F, 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, /* 0x50 */ + 0xCB86, 0xCB87, 0xCB88, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCB8E, 0xCB8F, /* 0x60 */ + 0xCB90, 0xCB91, 0xCB92, 0xCB93, 0xCB94, 0xCB95, 0xCB96, 0xCB97, /* 0x60 */ + 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9D, 0xCB9E, 0xCB9F, 0xCBA0, /* 0x70 */ + 0xCBA1, 0xCBA2, 0xCBA3, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, /* 0x80 */ + 0xCBAB, 0xCBAC, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0, 0xCBB1, 0xCBB2, /* 0x80 */ + 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7, 0xCBB9, 0xCBBA, 0xCBBB, /* 0x90 */ + 0xCBBC, 0xCBBD, 0xCBBE, 0xCBBF, 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, /* 0x90 */ + 0xCBC4, 0x00C6, 0x00D0, 0x00AA, 0x0126, 0, 0x0132, 0, /* 0xA0 */ + 0x013F, 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00DE, 0x0166, 0x014A, /* 0xA0 */ + 0, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, /* 0xB0 */ + 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, 0x326D, 0x326E, /* 0xB0 */ + 0x326F, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, /* 0xC0 */ + 0x3277, 0x3278, 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, /* 0xC0 */ + 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, /* 0xD0 */ + 0x24DB, 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, /* 0xD0 */ + 0x24E3, 0x24E4, 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, /* 0xE0 */ + 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, /* 0xE0 */ + 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x00BD, 0x2153, /* 0xF0 */ + 0x2154, 0x00BC, 0x00BE, 0x215B, 0x215C, 0x215D, 0x215E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_A9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCBC5, 0xCBC6, 0xCBC7, 0xCBC8, 0xCBC9, 0xCBCA, 0xCBCB, /* 0x40 */ + 0xCBCC, 0xCBCD, 0xCBCE, 0xCBCF, 0xCBD0, 0xCBD1, 0xCBD2, 0xCBD3, /* 0x40 */ + 0xCBD5, 0xCBD6, 0xCBD7, 0xCBD8, 0xCBD9, 0xCBDA, 0xCBDB, 0xCBDC, /* 0x50 */ + 0xCBDD, 0xCBDE, 0xCBDF, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCBE0, 0xCBE1, 0xCBE2, 0xCBE3, 0xCBE5, 0xCBE6, 0xCBE8, /* 0x60 */ + 0xCBEA, 0xCBEB, 0xCBEC, 0xCBED, 0xCBEE, 0xCBEF, 0xCBF0, 0xCBF1, /* 0x60 */ + 0xCBF2, 0xCBF3, 0xCBF4, 0xCBF5, 0xCBF6, 0xCBF7, 0xCBF8, 0xCBF9, /* 0x70 */ + 0xCBFA, 0xCBFB, 0xCBFC, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCBFD, 0xCBFE, 0xCBFF, 0xCC00, 0xCC01, 0xCC02, 0xCC03, /* 0x80 */ + 0xCC04, 0xCC05, 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B, /* 0x80 */ + 0xCC0E, 0xCC0F, 0xCC11, 0xCC12, 0xCC13, 0xCC15, 0xCC16, 0xCC17, /* 0x90 */ + 0xCC18, 0xCC19, 0xCC1A, 0xCC1B, 0xCC1E, 0xCC1F, 0xCC20, 0xCC23, /* 0x90 */ + 0xCC24, 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, /* 0xA0 */ + 0x0140, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x0167, 0x014B, /* 0xA0 */ + 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, /* 0xB0 */ + 0x3207, 0x3208, 0x3209, 0x320A, 0x320B, 0x320C, 0x320D, 0x320E, /* 0xB0 */ + 0x320F, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, /* 0xC0 */ + 0x3217, 0x3218, 0x3219, 0x321A, 0x321B, 0x249C, 0x249D, 0x249E, /* 0xC0 */ + 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, /* 0xD0 */ + 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, /* 0xD0 */ + 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x2474, /* 0xE0 */ + 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, /* 0xE0 */ + 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x00B9, 0x00B2, /* 0xF0 */ + 0x00B3, 0x2074, 0x207F, 0x2081, 0x2082, 0x2083, 0x2084 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_AA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCC25, 0xCC26, 0xCC2A, 0xCC2B, 0xCC2D, 0xCC2F, 0xCC31, /* 0x40 */ + 0xCC32, 0xCC33, 0xCC34, 0xCC35, 0xCC36, 0xCC37, 0xCC3A, 0xCC3F, /* 0x40 */ + 0xCC40, 0xCC41, 0xCC42, 0xCC43, 0xCC46, 0xCC47, 0xCC49, 0xCC4A, /* 0x50 */ + 0xCC4B, 0xCC4D, 0xCC4E, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53, 0xCC56, 0xCC5A, /* 0x60 */ + 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0xCC61, 0xCC62, 0xCC63, /* 0x60 */ + 0xCC65, 0xCC67, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, /* 0x70 */ + 0xCC6F, 0xCC71, 0xCC72, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCC73, 0xCC74, 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, /* 0x80 */ + 0xCC7B, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC7F, 0xCC80, 0xCC81, 0xCC82, /* 0x80 */ + 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, /* 0x90 */ + 0xCC8B, 0xCC8C, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91, 0xCC92, /* 0x90 */ + 0xCC93, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0xA0 */ + 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0xA0 */ + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0xB0 */ + 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0xB0 */ + 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0xC0 */ + 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0xC0 */ + 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0xD0 */ + 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0xD0 */ + 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0xE0 */ + 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0xE0 */ + 0x3090, 0x3091, 0x3092, 0x3093 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_AB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0xCC9A, 0xCC9B, 0xCC9D, /* 0x40 */ + 0xCC9E, 0xCC9F, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, /* 0x40 */ + 0xCCA7, 0xCCAA, 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3, /* 0x50 */ + 0xCCB6, 0xCCB7, 0xCCB9, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCCBA, 0xCCBB, 0xCCBD, 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, /* 0x60 */ + 0xCCC2, 0xCCC3, 0xCCC6, 0xCCC8, 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, /* 0x60 */ + 0xCCCE, 0xCCCF, 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD5, 0xCCD6, 0xCCD7, /* 0x70 */ + 0xCCD8, 0xCCD9, 0xCCDA, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, 0xCCDF, 0xCCE0, 0xCCE1, /* 0x80 */ + 0xCCE2, 0xCCE3, 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, /* 0x80 */ + 0xCCEB, 0xCCED, 0xCCEE, 0xCCEF, 0xCCF1, 0xCCF2, 0xCCF3, 0xCCF4, /* 0x90 */ + 0xCCF5, 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC, /* 0x90 */ + 0xCCFD, 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0xA0 */ + 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0xA0 */ + 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0xB0 */ + 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0xB0 */ + 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0xC0 */ + 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0xC0 */ + 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0xD0 */ + 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0xD0 */ + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0xE0 */ + 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0xE0 */ + 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_AC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCCFE, 0xCCFF, 0xCD00, 0xCD02, 0xCD03, 0xCD04, 0xCD05, /* 0x40 */ + 0xCD06, 0xCD07, 0xCD0A, 0xCD0B, 0xCD0D, 0xCD0E, 0xCD0F, 0xCD11, /* 0x40 */ + 0xCD12, 0xCD13, 0xCD14, 0xCD15, 0xCD16, 0xCD17, 0xCD1A, 0xCD1C, /* 0x50 */ + 0xCD1E, 0xCD1F, 0xCD20, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCD21, 0xCD22, 0xCD23, 0xCD25, 0xCD26, 0xCD27, 0xCD29, /* 0x60 */ + 0xCD2A, 0xCD2B, 0xCD2D, 0xCD2E, 0xCD2F, 0xCD30, 0xCD31, 0xCD32, /* 0x60 */ + 0xCD33, 0xCD34, 0xCD35, 0xCD36, 0xCD37, 0xCD38, 0xCD3A, 0xCD3B, /* 0x70 */ + 0xCD3C, 0xCD3D, 0xCD3E, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCD3F, 0xCD40, 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, /* 0x80 */ + 0xCD46, 0xCD47, 0xCD48, 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, /* 0x80 */ + 0xCD4E, 0xCD4F, 0xCD50, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, /* 0x90 */ + 0xCD56, 0xCD57, 0xCD58, 0xCD59, 0xCD5A, 0xCD5B, 0xCD5D, 0xCD5E, /* 0x90 */ + 0xCD5F, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0xA0 */ + 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0xA0 */ + 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0xB0 */ + 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0xB0 */ + 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0xD0 */ + 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0xD0 */ + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0xE0 */ + 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0xE0 */ + 0x044E, 0x044F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_AD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCD61, 0xCD62, 0xCD63, 0xCD65, 0xCD66, 0xCD67, 0xCD68, /* 0x40 */ + 0xCD69, 0xCD6A, 0xCD6B, 0xCD6E, 0xCD70, 0xCD72, 0xCD73, 0xCD74, /* 0x40 */ + 0xCD75, 0xCD76, 0xCD77, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, /* 0x50 */ + 0xCD7E, 0xCD7F, 0xCD80, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, 0xCD87, /* 0x60 */ + 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, 0xCD8E, 0xCD8F, 0xCD90, /* 0x60 */ + 0xCD91, 0xCD92, 0xCD93, 0xCD96, 0xCD97, 0xCD99, 0xCD9A, 0xCD9B, /* 0x70 */ + 0xCD9D, 0xCD9E, 0xCD9F, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCDA0, 0xCDA1, 0xCDA2, 0xCDA3, 0xCDA6, 0xCDA8, 0xCDAA, /* 0x80 */ + 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF, 0xCDB1, 0xCDB2, 0xCDB3, /* 0x80 */ + 0xCDB4, 0xCDB5, 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, /* 0x90 */ + 0xCDBC, 0xCDBD, 0xCDBE, 0xCDBF, 0xCDC0, 0xCDC1, 0xCDC2, 0xCDC3, /* 0x90 */ + 0xCDC5 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_AE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCD, /* 0x40 */ + 0xCDCE, 0xCDCF, 0xCDD1, 0xCDD2, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, /* 0x40 */ + 0xCDD7, 0xCDD8, 0xCDD9, 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDDE, /* 0x50 */ + 0xCDDF, 0xCDE0, 0xCDE1, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCDE2, 0xCDE3, 0xCDE4, 0xCDE5, 0xCDE6, 0xCDE7, 0xCDE9, /* 0x60 */ + 0xCDEA, 0xCDEB, 0xCDED, 0xCDEE, 0xCDEF, 0xCDF1, 0xCDF2, 0xCDF3, /* 0x60 */ + 0xCDF4, 0xCDF5, 0xCDF6, 0xCDF7, 0xCDFA, 0xCDFC, 0xCDFE, 0xCDFF, /* 0x70 */ + 0xCE00, 0xCE01, 0xCE02, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCE03, 0xCE05, 0xCE06, 0xCE07, 0xCE09, 0xCE0A, 0xCE0B, /* 0x80 */ + 0xCE0D, 0xCE0E, 0xCE0F, 0xCE10, 0xCE11, 0xCE12, 0xCE13, 0xCE15, /* 0x80 */ + 0xCE16, 0xCE17, 0xCE18, 0xCE1A, 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, /* 0x90 */ + 0xCE1F, 0xCE22, 0xCE23, 0xCE25, 0xCE26, 0xCE27, 0xCE29, 0xCE2A, /* 0x90 */ + 0xCE2B /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_AF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCE2C, 0xCE2D, 0xCE2E, 0xCE2F, 0xCE32, 0xCE34, 0xCE36, /* 0x40 */ + 0xCE37, 0xCE38, 0xCE39, 0xCE3A, 0xCE3B, 0xCE3C, 0xCE3D, 0xCE3E, /* 0x40 */ + 0xCE3F, 0xCE40, 0xCE41, 0xCE42, 0xCE43, 0xCE44, 0xCE45, 0xCE46, /* 0x50 */ + 0xCE47, 0xCE48, 0xCE49, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCE4A, 0xCE4B, 0xCE4C, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, /* 0x60 */ + 0xCE51, 0xCE52, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0xCE5A, /* 0x60 */ + 0xCE5B, 0xCE5D, 0xCE5E, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xCE66, /* 0x70 */ + 0xCE67, 0xCE6A, 0xCE6C, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73, 0xCE76, /* 0x80 */ + 0xCE77, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80, /* 0x80 */ + 0xCE81, 0xCE82, 0xCE83, 0xCE86, 0xCE88, 0xCE8A, 0xCE8B, 0xCE8C, /* 0x90 */ + 0xCE8D, 0xCE8E, 0xCE8F, 0xCE92, 0xCE93, 0xCE95, 0xCE96, 0xCE97, /* 0x90 */ + 0xCE99 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA2, /* 0x40 */ + 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAE, 0xCEAF, /* 0x40 */ + 0xCEB0, 0xCEB1, 0xCEB2, 0xCEB3, 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7, /* 0x50 */ + 0xCEB8, 0xCEB9, 0xCEBA, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCEBB, 0xCEBC, 0xCEBD, 0xCEBE, 0xCEBF, 0xCEC0, 0xCEC2, /* 0x60 */ + 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0xCEC8, 0xCEC9, 0xCECA, /* 0x60 */ + 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF, 0xCED0, 0xCED1, 0xCED2, /* 0x70 */ + 0xCED3, 0xCED4, 0xCED5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCED6, 0xCED7, 0xCED8, 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, /* 0x80 */ + 0xCEDD, 0xCEDE, 0xCEDF, 0xCEE0, 0xCEE1, 0xCEE2, 0xCEE3, 0xCEE6, /* 0x80 */ + 0xCEE7, 0xCEE9, 0xCEEA, 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, /* 0x90 */ + 0xCEF2, 0xCEF3, 0xCEF6, 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, 0xCEFE, /* 0x90 */ + 0xCEFF, 0xAC00, 0xAC01, 0xAC04, 0xAC07, 0xAC08, 0xAC09, 0xAC0A, /* 0xA0 */ + 0xAC10, 0xAC11, 0xAC12, 0xAC13, 0xAC14, 0xAC15, 0xAC16, 0xAC17, /* 0xA0 */ + 0xAC19, 0xAC1A, 0xAC1B, 0xAC1C, 0xAC1D, 0xAC20, 0xAC24, 0xAC2C, /* 0xB0 */ + 0xAC2D, 0xAC2F, 0xAC30, 0xAC31, 0xAC38, 0xAC39, 0xAC3C, 0xAC40, /* 0xB0 */ + 0xAC4B, 0xAC4D, 0xAC54, 0xAC58, 0xAC5C, 0xAC70, 0xAC71, 0xAC74, /* 0xC0 */ + 0xAC77, 0xAC78, 0xAC7A, 0xAC80, 0xAC81, 0xAC83, 0xAC84, 0xAC85, /* 0xC0 */ + 0xAC86, 0xAC89, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC90, 0xAC94, 0xAC9C, /* 0xD0 */ + 0xAC9D, 0xAC9F, 0xACA0, 0xACA1, 0xACA8, 0xACA9, 0xACAA, 0xACAC, /* 0xD0 */ + 0xACAF, 0xACB0, 0xACB8, 0xACB9, 0xACBB, 0xACBC, 0xACBD, 0xACC1, /* 0xE0 */ + 0xACC4, 0xACC8, 0xACCC, 0xACD5, 0xACD7, 0xACE0, 0xACE1, 0xACE4, /* 0xE0 */ + 0xACE7, 0xACE8, 0xACEA, 0xACEC, 0xACEF, 0xACF0, 0xACF1, 0xACF3, /* 0xF0 */ + 0xACF5, 0xACF6, 0xACFC, 0xACFD, 0xAD00, 0xAD04, 0xAD06 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCF02, 0xCF03, 0xCF05, 0xCF06, 0xCF07, 0xCF09, 0xCF0A, /* 0x40 */ + 0xCF0B, 0xCF0C, 0xCF0D, 0xCF0E, 0xCF0F, 0xCF12, 0xCF14, 0xCF16, /* 0x40 */ + 0xCF17, 0xCF18, 0xCF19, 0xCF1A, 0xCF1B, 0xCF1D, 0xCF1E, 0xCF1F, /* 0x50 */ + 0xCF21, 0xCF22, 0xCF23, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCF25, 0xCF26, 0xCF27, 0xCF28, 0xCF29, 0xCF2A, 0xCF2B, /* 0x60 */ + 0xCF2E, 0xCF32, 0xCF33, 0xCF34, 0xCF35, 0xCF36, 0xCF37, 0xCF39, /* 0x60 */ + 0xCF3A, 0xCF3B, 0xCF3C, 0xCF3D, 0xCF3E, 0xCF3F, 0xCF40, 0xCF41, /* 0x70 */ + 0xCF42, 0xCF43, 0xCF44, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCF45, 0xCF46, 0xCF47, 0xCF48, 0xCF49, 0xCF4A, 0xCF4B, /* 0x80 */ + 0xCF4C, 0xCF4D, 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53, /* 0x80 */ + 0xCF56, 0xCF57, 0xCF59, 0xCF5A, 0xCF5B, 0xCF5D, 0xCF5E, 0xCF5F, /* 0x90 */ + 0xCF60, 0xCF61, 0xCF62, 0xCF63, 0xCF66, 0xCF68, 0xCF6A, 0xCF6B, /* 0x90 */ + 0xCF6C, 0xAD0C, 0xAD0D, 0xAD0F, 0xAD11, 0xAD18, 0xAD1C, 0xAD20, /* 0xA0 */ + 0xAD29, 0xAD2C, 0xAD2D, 0xAD34, 0xAD35, 0xAD38, 0xAD3C, 0xAD44, /* 0xA0 */ + 0xAD45, 0xAD47, 0xAD49, 0xAD50, 0xAD54, 0xAD58, 0xAD61, 0xAD63, /* 0xB0 */ + 0xAD6C, 0xAD6D, 0xAD70, 0xAD73, 0xAD74, 0xAD75, 0xAD76, 0xAD7B, /* 0xB0 */ + 0xAD7C, 0xAD7D, 0xAD7F, 0xAD81, 0xAD82, 0xAD88, 0xAD89, 0xAD8C, /* 0xC0 */ + 0xAD90, 0xAD9C, 0xAD9D, 0xADA4, 0xADB7, 0xADC0, 0xADC1, 0xADC4, /* 0xC0 */ + 0xADC8, 0xADD0, 0xADD1, 0xADD3, 0xADDC, 0xADE0, 0xADE4, 0xADF8, /* 0xD0 */ + 0xADF9, 0xADFC, 0xADFF, 0xAE00, 0xAE01, 0xAE08, 0xAE09, 0xAE0B, /* 0xD0 */ + 0xAE0D, 0xAE14, 0xAE30, 0xAE31, 0xAE34, 0xAE37, 0xAE38, 0xAE3A, /* 0xE0 */ + 0xAE40, 0xAE41, 0xAE43, 0xAE45, 0xAE46, 0xAE4A, 0xAE4C, 0xAE4D, /* 0xE0 */ + 0xAE4E, 0xAE50, 0xAE54, 0xAE56, 0xAE5C, 0xAE5D, 0xAE5F, 0xAE60, /* 0xF0 */ + 0xAE61, 0xAE65, 0xAE68, 0xAE69, 0xAE6C, 0xAE70, 0xAE78 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCF6D, 0xCF6E, 0xCF6F, 0xCF72, 0xCF73, 0xCF75, 0xCF76, /* 0x40 */ + 0xCF77, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, 0xCF7F, /* 0x40 */ + 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF86, 0xCF87, 0xCF88, 0xCF89, /* 0x50 */ + 0xCF8A, 0xCF8B, 0xCF8D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, 0xCF93, 0xCF94, /* 0x60 */ + 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, 0xCF9A, 0xCF9B, 0xCF9C, /* 0x60 */ + 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA2, 0xCFA3, 0xCFA4, 0xCFA5, /* 0x70 */ + 0xCFA6, 0xCFA7, 0xCFA9, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCFAA, 0xCFAB, 0xCFAC, 0xCFAD, 0xCFAE, 0xCFAF, 0xCFB1, /* 0x80 */ + 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5, 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9, /* 0x80 */ + 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, /* 0x90 */ + 0xCFC2, 0xCFC3, 0xCFC5, 0xCFC6, 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, /* 0x90 */ + 0xCFCB, 0xAE79, 0xAE7B, 0xAE7C, 0xAE7D, 0xAE84, 0xAE85, 0xAE8C, /* 0xA0 */ + 0xAEBC, 0xAEBD, 0xAEBE, 0xAEC0, 0xAEC4, 0xAECC, 0xAECD, 0xAECF, /* 0xA0 */ + 0xAED0, 0xAED1, 0xAED8, 0xAED9, 0xAEDC, 0xAEE8, 0xAEEB, 0xAEED, /* 0xB0 */ + 0xAEF4, 0xAEF8, 0xAEFC, 0xAF07, 0xAF08, 0xAF0D, 0xAF10, 0xAF2C, /* 0xB0 */ + 0xAF2D, 0xAF30, 0xAF32, 0xAF34, 0xAF3C, 0xAF3D, 0xAF3F, 0xAF41, /* 0xC0 */ + 0xAF42, 0xAF43, 0xAF48, 0xAF49, 0xAF50, 0xAF5C, 0xAF5D, 0xAF64, /* 0xC0 */ + 0xAF65, 0xAF79, 0xAF80, 0xAF84, 0xAF88, 0xAF90, 0xAF91, 0xAF95, /* 0xD0 */ + 0xAF9C, 0xAFB8, 0xAFB9, 0xAFBC, 0xAFC0, 0xAFC7, 0xAFC8, 0xAFC9, /* 0xD0 */ + 0xAFCB, 0xAFCD, 0xAFCE, 0xAFD4, 0xAFDC, 0xAFE8, 0xAFE9, 0xAFF0, /* 0xE0 */ + 0xAFF1, 0xAFF4, 0xAFF8, 0xB000, 0xB001, 0xB004, 0xB00C, 0xB010, /* 0xE0 */ + 0xB014, 0xB01C, 0xB01D, 0xB028, 0xB044, 0xB045, 0xB048, 0xB04A, /* 0xF0 */ + 0xB04C, 0xB04E, 0xB053, 0xB054, 0xB055, 0xB057, 0xB059 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFCC, 0xCFCD, 0xCFCE, 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, /* 0x40 */ + 0xCFD3, 0xCFD4, 0xCFD5, 0xCFD6, 0xCFD7, 0xCFD8, 0xCFD9, 0xCFDA, /* 0x40 */ + 0xCFDB, 0xCFDC, 0xCFDD, 0xCFDE, 0xCFDF, 0xCFE2, 0xCFE3, 0xCFE5, /* 0x50 */ + 0xCFE6, 0xCFE7, 0xCFE9, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCFEA, 0xCFEB, 0xCFEC, 0xCFED, 0xCFEE, 0xCFEF, 0xCFF2, /* 0x60 */ + 0xCFF4, 0xCFF6, 0xCFF7, 0xCFF8, 0xCFF9, 0xCFFA, 0xCFFB, 0xCFFD, /* 0x60 */ + 0xCFFE, 0xCFFF, 0xD001, 0xD002, 0xD003, 0xD005, 0xD006, 0xD007, /* 0x70 */ + 0xD008, 0xD009, 0xD00A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD00B, 0xD00C, 0xD00D, 0xD00E, 0xD00F, 0xD010, 0xD012, /* 0x80 */ + 0xD013, 0xD014, 0xD015, 0xD016, 0xD017, 0xD019, 0xD01A, 0xD01B, /* 0x80 */ + 0xD01C, 0xD01D, 0xD01E, 0xD01F, 0xD020, 0xD021, 0xD022, 0xD023, /* 0x90 */ + 0xD024, 0xD025, 0xD026, 0xD027, 0xD028, 0xD029, 0xD02A, 0xD02B, /* 0x90 */ + 0xD02C, 0xB05D, 0xB07C, 0xB07D, 0xB080, 0xB084, 0xB08C, 0xB08D, /* 0xA0 */ + 0xB08F, 0xB091, 0xB098, 0xB099, 0xB09A, 0xB09C, 0xB09F, 0xB0A0, /* 0xA0 */ + 0xB0A1, 0xB0A2, 0xB0A8, 0xB0A9, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, /* 0xB0 */ + 0xB0AF, 0xB0B1, 0xB0B3, 0xB0B4, 0xB0B5, 0xB0B8, 0xB0BC, 0xB0C4, /* 0xB0 */ + 0xB0C5, 0xB0C7, 0xB0C8, 0xB0C9, 0xB0D0, 0xB0D1, 0xB0D4, 0xB0D8, /* 0xC0 */ + 0xB0E0, 0xB0E5, 0xB108, 0xB109, 0xB10B, 0xB10C, 0xB110, 0xB112, /* 0xC0 */ + 0xB113, 0xB118, 0xB119, 0xB11B, 0xB11C, 0xB11D, 0xB123, 0xB124, /* 0xD0 */ + 0xB125, 0xB128, 0xB12C, 0xB134, 0xB135, 0xB137, 0xB138, 0xB139, /* 0xD0 */ + 0xB140, 0xB141, 0xB144, 0xB148, 0xB150, 0xB151, 0xB154, 0xB155, /* 0xE0 */ + 0xB158, 0xB15C, 0xB160, 0xB178, 0xB179, 0xB17C, 0xB180, 0xB182, /* 0xE0 */ + 0xB188, 0xB189, 0xB18B, 0xB18D, 0xB192, 0xB193, 0xB194, 0xB198, /* 0xF0 */ + 0xB19C, 0xB1A8, 0xB1CC, 0xB1D0, 0xB1D4, 0xB1DC, 0xB1DD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0xD036, /* 0x40 */ + 0xD037, 0xD039, 0xD03A, 0xD03B, 0xD03D, 0xD03E, 0xD03F, 0xD040, /* 0x40 */ + 0xD041, 0xD042, 0xD043, 0xD046, 0xD048, 0xD04A, 0xD04B, 0xD04C, /* 0x50 */ + 0xD04D, 0xD04E, 0xD04F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD051, 0xD052, 0xD053, 0xD055, 0xD056, 0xD057, 0xD059, /* 0x60 */ + 0xD05A, 0xD05B, 0xD05C, 0xD05D, 0xD05E, 0xD05F, 0xD061, 0xD062, /* 0x60 */ + 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xD068, 0xD069, 0xD06A, /* 0x70 */ + 0xD06B, 0xD06E, 0xD06F, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD071, 0xD072, 0xD073, 0xD075, 0xD076, 0xD077, 0xD078, /* 0x80 */ + 0xD079, 0xD07A, 0xD07B, 0xD07E, 0xD07F, 0xD080, 0xD082, 0xD083, /* 0x80 */ + 0xD084, 0xD085, 0xD086, 0xD087, 0xD088, 0xD089, 0xD08A, 0xD08B, /* 0x90 */ + 0xD08C, 0xD08D, 0xD08E, 0xD08F, 0xD090, 0xD091, 0xD092, 0xD093, /* 0x90 */ + 0xD094, 0xB1DF, 0xB1E8, 0xB1E9, 0xB1EC, 0xB1F0, 0xB1F9, 0xB1FB, /* 0xA0 */ + 0xB1FD, 0xB204, 0xB205, 0xB208, 0xB20B, 0xB20C, 0xB214, 0xB215, /* 0xA0 */ + 0xB217, 0xB219, 0xB220, 0xB234, 0xB23C, 0xB258, 0xB25C, 0xB260, /* 0xB0 */ + 0xB268, 0xB269, 0xB274, 0xB275, 0xB27C, 0xB284, 0xB285, 0xB289, /* 0xB0 */ + 0xB290, 0xB291, 0xB294, 0xB298, 0xB299, 0xB29A, 0xB2A0, 0xB2A1, /* 0xC0 */ + 0xB2A3, 0xB2A5, 0xB2A6, 0xB2AA, 0xB2AC, 0xB2B0, 0xB2B4, 0xB2C8, /* 0xC0 */ + 0xB2C9, 0xB2CC, 0xB2D0, 0xB2D2, 0xB2D8, 0xB2D9, 0xB2DB, 0xB2DD, /* 0xD0 */ + 0xB2E2, 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E8, 0xB2EB, 0xB2EC, 0xB2ED, /* 0xD0 */ + 0xB2EE, 0xB2EF, 0xB2F3, 0xB2F4, 0xB2F5, 0xB2F7, 0xB2F8, 0xB2F9, /* 0xE0 */ + 0xB2FA, 0xB2FB, 0xB2FF, 0xB300, 0xB301, 0xB304, 0xB308, 0xB310, /* 0xE0 */ + 0xB311, 0xB313, 0xB314, 0xB315, 0xB31C, 0xB354, 0xB355, 0xB356, /* 0xF0 */ + 0xB358, 0xB35B, 0xB35C, 0xB35E, 0xB35F, 0xB364, 0xB365 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD095, 0xD096, 0xD097, 0xD098, 0xD099, 0xD09A, 0xD09B, /* 0x40 */ + 0xD09C, 0xD09D, 0xD09E, 0xD09F, 0xD0A0, 0xD0A1, 0xD0A2, 0xD0A3, /* 0x40 */ + 0xD0A6, 0xD0A7, 0xD0A9, 0xD0AA, 0xD0AB, 0xD0AD, 0xD0AE, 0xD0AF, /* 0x50 */ + 0xD0B0, 0xD0B1, 0xD0B2, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD0B3, 0xD0B6, 0xD0B8, 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, /* 0x60 */ + 0xD0BE, 0xD0BF, 0xD0C2, 0xD0C3, 0xD0C5, 0xD0C6, 0xD0C7, 0xD0CA, /* 0x60 */ + 0xD0CB, 0xD0CC, 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D2, 0xD0D6, 0xD0D7, /* 0x70 */ + 0xD0D8, 0xD0D9, 0xD0DA, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD0DB, 0xD0DE, 0xD0DF, 0xD0E1, 0xD0E2, 0xD0E3, 0xD0E5, /* 0x80 */ + 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EE, 0xD0F2, /* 0x80 */ + 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F9, 0xD0FA, 0xD0FB, /* 0x90 */ + 0xD0FC, 0xD0FD, 0xD0FE, 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103, /* 0x90 */ + 0xD104, 0xB367, 0xB369, 0xB36B, 0xB36E, 0xB370, 0xB371, 0xB374, /* 0xA0 */ + 0xB378, 0xB380, 0xB381, 0xB383, 0xB384, 0xB385, 0xB38C, 0xB390, /* 0xA0 */ + 0xB394, 0xB3A0, 0xB3A1, 0xB3A8, 0xB3AC, 0xB3C4, 0xB3C5, 0xB3C8, /* 0xB0 */ + 0xB3CB, 0xB3CC, 0xB3CE, 0xB3D0, 0xB3D4, 0xB3D5, 0xB3D7, 0xB3D9, /* 0xB0 */ + 0xB3DB, 0xB3DD, 0xB3E0, 0xB3E4, 0xB3E8, 0xB3FC, 0xB410, 0xB418, /* 0xC0 */ + 0xB41C, 0xB420, 0xB428, 0xB429, 0xB42B, 0xB434, 0xB450, 0xB451, /* 0xC0 */ + 0xB454, 0xB458, 0xB460, 0xB461, 0xB463, 0xB465, 0xB46C, 0xB480, /* 0xD0 */ + 0xB488, 0xB49D, 0xB4A4, 0xB4A8, 0xB4AC, 0xB4B5, 0xB4B7, 0xB4B9, /* 0xD0 */ + 0xB4C0, 0xB4C4, 0xB4C8, 0xB4D0, 0xB4D5, 0xB4DC, 0xB4DD, 0xB4E0, /* 0xE0 */ + 0xB4E3, 0xB4E4, 0xB4E6, 0xB4EC, 0xB4ED, 0xB4EF, 0xB4F1, 0xB4F8, /* 0xE0 */ + 0xB514, 0xB515, 0xB518, 0xB51B, 0xB51C, 0xB524, 0xB525, 0xB527, /* 0xF0 */ + 0xB528, 0xB529, 0xB52A, 0xB530, 0xB531, 0xB534, 0xB538 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD105, 0xD106, 0xD107, 0xD108, 0xD109, 0xD10A, 0xD10B, /* 0x40 */ + 0xD10C, 0xD10E, 0xD10F, 0xD110, 0xD111, 0xD112, 0xD113, 0xD114, /* 0x40 */ + 0xD115, 0xD116, 0xD117, 0xD118, 0xD119, 0xD11A, 0xD11B, 0xD11C, /* 0x50 */ + 0xD11D, 0xD11E, 0xD11F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD120, 0xD121, 0xD122, 0xD123, 0xD124, 0xD125, 0xD126, /* 0x60 */ + 0xD127, 0xD128, 0xD129, 0xD12A, 0xD12B, 0xD12C, 0xD12D, 0xD12E, /* 0x60 */ + 0xD12F, 0xD132, 0xD133, 0xD135, 0xD136, 0xD137, 0xD139, 0xD13B, /* 0x70 */ + 0xD13C, 0xD13D, 0xD13E, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD13F, 0xD142, 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, /* 0x80 */ + 0xD14B, 0xD14E, 0xD14F, 0xD151, 0xD152, 0xD153, 0xD155, 0xD156, /* 0x80 */ + 0xD157, 0xD158, 0xD159, 0xD15A, 0xD15B, 0xD15E, 0xD160, 0xD162, /* 0x90 */ + 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0xD169, 0xD16A, 0xD16B, /* 0x90 */ + 0xD16D, 0xB540, 0xB541, 0xB543, 0xB544, 0xB545, 0xB54B, 0xB54C, /* 0xA0 */ + 0xB54D, 0xB550, 0xB554, 0xB55C, 0xB55D, 0xB55F, 0xB560, 0xB561, /* 0xA0 */ + 0xB5A0, 0xB5A1, 0xB5A4, 0xB5A8, 0xB5AA, 0xB5AB, 0xB5B0, 0xB5B1, /* 0xB0 */ + 0xB5B3, 0xB5B4, 0xB5B5, 0xB5BB, 0xB5BC, 0xB5BD, 0xB5C0, 0xB5C4, /* 0xB0 */ + 0xB5CC, 0xB5CD, 0xB5CF, 0xB5D0, 0xB5D1, 0xB5D8, 0xB5EC, 0xB610, /* 0xC0 */ + 0xB611, 0xB614, 0xB618, 0xB625, 0xB62C, 0xB634, 0xB648, 0xB664, /* 0xC0 */ + 0xB668, 0xB69C, 0xB69D, 0xB6A0, 0xB6A4, 0xB6AB, 0xB6AC, 0xB6B1, /* 0xD0 */ + 0xB6D4, 0xB6F0, 0xB6F4, 0xB6F8, 0xB700, 0xB701, 0xB705, 0xB728, /* 0xD0 */ + 0xB729, 0xB72C, 0xB72F, 0xB730, 0xB738, 0xB739, 0xB73B, 0xB744, /* 0xE0 */ + 0xB748, 0xB74C, 0xB754, 0xB755, 0xB760, 0xB764, 0xB768, 0xB770, /* 0xE0 */ + 0xB771, 0xB773, 0xB775, 0xB77C, 0xB77D, 0xB780, 0xB784, 0xB78C, /* 0xF0 */ + 0xB78D, 0xB78F, 0xB790, 0xB791, 0xB792, 0xB796, 0xB797 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD16E, 0xD16F, 0xD170, 0xD171, 0xD172, 0xD173, 0xD174, /* 0x40 */ + 0xD175, 0xD176, 0xD177, 0xD178, 0xD179, 0xD17A, 0xD17B, 0xD17D, /* 0x40 */ + 0xD17E, 0xD17F, 0xD180, 0xD181, 0xD182, 0xD183, 0xD185, 0xD186, /* 0x50 */ + 0xD187, 0xD189, 0xD18A, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD18B, 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, /* 0x60 */ + 0xD192, 0xD193, 0xD194, 0xD195, 0xD196, 0xD197, 0xD198, 0xD199, /* 0x60 */ + 0xD19A, 0xD19B, 0xD19C, 0xD19D, 0xD19E, 0xD19F, 0xD1A2, 0xD1A3, /* 0x70 */ + 0xD1A5, 0xD1A6, 0xD1A7, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF, /* 0x80 */ + 0xD1B2, 0xD1B4, 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BB, 0xD1BD, /* 0x80 */ + 0xD1BE, 0xD1BF, 0xD1C1, 0xD1C2, 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6, /* 0x90 */ + 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, 0xD1CB, 0xD1CC, 0xD1CD, 0xD1CE, /* 0x90 */ + 0xD1CF, 0xB798, 0xB799, 0xB79C, 0xB7A0, 0xB7A8, 0xB7A9, 0xB7AB, /* 0xA0 */ + 0xB7AC, 0xB7AD, 0xB7B4, 0xB7B5, 0xB7B8, 0xB7C7, 0xB7C9, 0xB7EC, /* 0xA0 */ + 0xB7ED, 0xB7F0, 0xB7F4, 0xB7FC, 0xB7FD, 0xB7FF, 0xB800, 0xB801, /* 0xB0 */ + 0xB807, 0xB808, 0xB809, 0xB80C, 0xB810, 0xB818, 0xB819, 0xB81B, /* 0xB0 */ + 0xB81D, 0xB824, 0xB825, 0xB828, 0xB82C, 0xB834, 0xB835, 0xB837, /* 0xC0 */ + 0xB838, 0xB839, 0xB840, 0xB844, 0xB851, 0xB853, 0xB85C, 0xB85D, /* 0xC0 */ + 0xB860, 0xB864, 0xB86C, 0xB86D, 0xB86F, 0xB871, 0xB878, 0xB87C, /* 0xD0 */ + 0xB88D, 0xB8A8, 0xB8B0, 0xB8B4, 0xB8B8, 0xB8C0, 0xB8C1, 0xB8C3, /* 0xD0 */ + 0xB8C5, 0xB8CC, 0xB8D0, 0xB8D4, 0xB8DD, 0xB8DF, 0xB8E1, 0xB8E8, /* 0xE0 */ + 0xB8E9, 0xB8EC, 0xB8F0, 0xB8F8, 0xB8F9, 0xB8FB, 0xB8FD, 0xB904, /* 0xE0 */ + 0xB918, 0xB920, 0xB93C, 0xB93D, 0xB940, 0xB944, 0xB94C, 0xB94F, /* 0xF0 */ + 0xB951, 0xB958, 0xB959, 0xB95C, 0xB960, 0xB968, 0xB969 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1D0, 0xD1D1, 0xD1D2, 0xD1D3, 0xD1D4, 0xD1D5, 0xD1D6, /* 0x40 */ + 0xD1D7, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, 0xD1DE, 0xD1DF, /* 0x40 */ + 0xD1E0, 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, 0xD1E7, /* 0x50 */ + 0xD1E8, 0xD1E9, 0xD1EA, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD1EB, 0xD1EC, 0xD1ED, 0xD1EE, 0xD1EF, 0xD1F0, 0xD1F1, /* 0x60 */ + 0xD1F2, 0xD1F3, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F9, 0xD1FA, 0xD1FB, /* 0x60 */ + 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201, 0xD202, 0xD203, /* 0x70 */ + 0xD204, 0xD205, 0xD206, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD208, 0xD20A, 0xD20B, 0xD20C, 0xD20D, 0xD20E, 0xD20F, /* 0x80 */ + 0xD211, 0xD212, 0xD213, 0xD214, 0xD215, 0xD216, 0xD217, 0xD218, /* 0x80 */ + 0xD219, 0xD21A, 0xD21B, 0xD21C, 0xD21D, 0xD21E, 0xD21F, 0xD220, /* 0x90 */ + 0xD221, 0xD222, 0xD223, 0xD224, 0xD225, 0xD226, 0xD227, 0xD228, /* 0x90 */ + 0xD229, 0xB96B, 0xB96D, 0xB974, 0xB975, 0xB978, 0xB97C, 0xB984, /* 0xA0 */ + 0xB985, 0xB987, 0xB989, 0xB98A, 0xB98D, 0xB98E, 0xB9AC, 0xB9AD, /* 0xA0 */ + 0xB9B0, 0xB9B4, 0xB9BC, 0xB9BD, 0xB9BF, 0xB9C1, 0xB9C8, 0xB9C9, /* 0xB0 */ + 0xB9CC, 0xB9CE, 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D2, 0xB9D8, 0xB9D9, /* 0xB0 */ + 0xB9DB, 0xB9DD, 0xB9DE, 0xB9E1, 0xB9E3, 0xB9E4, 0xB9E5, 0xB9E8, /* 0xC0 */ + 0xB9EC, 0xB9F4, 0xB9F5, 0xB9F7, 0xB9F8, 0xB9F9, 0xB9FA, 0xBA00, /* 0xC0 */ + 0xBA01, 0xBA08, 0xBA15, 0xBA38, 0xBA39, 0xBA3C, 0xBA40, 0xBA42, /* 0xD0 */ + 0xBA48, 0xBA49, 0xBA4B, 0xBA4D, 0xBA4E, 0xBA53, 0xBA54, 0xBA55, /* 0xD0 */ + 0xBA58, 0xBA5C, 0xBA64, 0xBA65, 0xBA67, 0xBA68, 0xBA69, 0xBA70, /* 0xE0 */ + 0xBA71, 0xBA74, 0xBA78, 0xBA83, 0xBA84, 0xBA85, 0xBA87, 0xBA8C, /* 0xE0 */ + 0xBAA8, 0xBAA9, 0xBAAB, 0xBAAC, 0xBAB0, 0xBAB2, 0xBAB8, 0xBAB9, /* 0xF0 */ + 0xBABB, 0xBABD, 0xBAC4, 0xBAC8, 0xBAD8, 0xBAD9, 0xBAFC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD22A, 0xD22B, 0xD22E, 0xD22F, 0xD231, 0xD232, 0xD233, /* 0x40 */ + 0xD235, 0xD236, 0xD237, 0xD238, 0xD239, 0xD23A, 0xD23B, 0xD23E, /* 0x40 */ + 0xD240, 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, 0xD249, /* 0x50 */ + 0xD24A, 0xD24B, 0xD24C, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD24D, 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, /* 0x60 */ + 0xD254, 0xD255, 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, /* 0x60 */ + 0xD25D, 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0xD265, /* 0x70 */ + 0xD266, 0xD267, 0xD268, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD269, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, /* 0x80 */ + 0xD270, 0xD271, 0xD272, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, /* 0x80 */ + 0xD278, 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0xD27F, /* 0x90 */ + 0xD282, 0xD283, 0xD285, 0xD286, 0xD287, 0xD289, 0xD28A, 0xD28B, /* 0x90 */ + 0xD28C, 0xBB00, 0xBB04, 0xBB0D, 0xBB0F, 0xBB11, 0xBB18, 0xBB1C, /* 0xA0 */ + 0xBB20, 0xBB29, 0xBB2B, 0xBB34, 0xBB35, 0xBB36, 0xBB38, 0xBB3B, /* 0xA0 */ + 0xBB3C, 0xBB3D, 0xBB3E, 0xBB44, 0xBB45, 0xBB47, 0xBB49, 0xBB4D, /* 0xB0 */ + 0xBB4F, 0xBB50, 0xBB54, 0xBB58, 0xBB61, 0xBB63, 0xBB6C, 0xBB88, /* 0xB0 */ + 0xBB8C, 0xBB90, 0xBBA4, 0xBBA8, 0xBBAC, 0xBBB4, 0xBBB7, 0xBBC0, /* 0xC0 */ + 0xBBC4, 0xBBC8, 0xBBD0, 0xBBD3, 0xBBF8, 0xBBF9, 0xBBFC, 0xBBFF, /* 0xC0 */ + 0xBC00, 0xBC02, 0xBC08, 0xBC09, 0xBC0B, 0xBC0C, 0xBC0D, 0xBC0F, /* 0xD0 */ + 0xBC11, 0xBC14, 0xBC15, 0xBC16, 0xBC17, 0xBC18, 0xBC1B, 0xBC1C, /* 0xD0 */ + 0xBC1D, 0xBC1E, 0xBC1F, 0xBC24, 0xBC25, 0xBC27, 0xBC29, 0xBC2D, /* 0xE0 */ + 0xBC30, 0xBC31, 0xBC34, 0xBC38, 0xBC40, 0xBC41, 0xBC43, 0xBC44, /* 0xE0 */ + 0xBC45, 0xBC49, 0xBC4C, 0xBC4D, 0xBC50, 0xBC5D, 0xBC84, 0xBC85, /* 0xF0 */ + 0xBC88, 0xBC8B, 0xBC8C, 0xBC8E, 0xBC94, 0xBC95, 0xBC97 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD28D, 0xD28E, 0xD28F, 0xD292, 0xD293, 0xD294, 0xD296, /* 0x40 */ + 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29D, 0xD29E, 0xD29F, /* 0x40 */ + 0xD2A1, 0xD2A2, 0xD2A3, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9, /* 0x50 */ + 0xD2AA, 0xD2AB, 0xD2AD, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD2AE, 0xD2AF, 0xD2B0, 0xD2B2, 0xD2B3, 0xD2B4, 0xD2B5, /* 0x60 */ + 0xD2B6, 0xD2B7, 0xD2BA, 0xD2BB, 0xD2BD, 0xD2BE, 0xD2C1, 0xD2C3, /* 0x60 */ + 0xD2C4, 0xD2C5, 0xD2C6, 0xD2C7, 0xD2CA, 0xD2CC, 0xD2CD, 0xD2CE, /* 0x70 */ + 0xD2CF, 0xD2D0, 0xD2D1, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD2D2, 0xD2D3, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, /* 0x80 */ + 0xD2DB, 0xD2DD, 0xD2DE, 0xD2DF, 0xD2E0, 0xD2E1, 0xD2E2, 0xD2E3, /* 0x80 */ + 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9, 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, /* 0x90 */ + 0xD2EE, 0xD2EF, 0xD2F2, 0xD2F3, 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F9, /* 0x90 */ + 0xD2FA, 0xBC99, 0xBC9A, 0xBCA0, 0xBCA1, 0xBCA4, 0xBCA7, 0xBCA8, /* 0xA0 */ + 0xBCB0, 0xBCB1, 0xBCB3, 0xBCB4, 0xBCB5, 0xBCBC, 0xBCBD, 0xBCC0, /* 0xA0 */ + 0xBCC4, 0xBCCD, 0xBCCF, 0xBCD0, 0xBCD1, 0xBCD5, 0xBCD8, 0xBCDC, /* 0xB0 */ + 0xBCF4, 0xBCF5, 0xBCF6, 0xBCF8, 0xBCFC, 0xBD04, 0xBD05, 0xBD07, /* 0xB0 */ + 0xBD09, 0xBD10, 0xBD14, 0xBD24, 0xBD2C, 0xBD40, 0xBD48, 0xBD49, /* 0xC0 */ + 0xBD4C, 0xBD50, 0xBD58, 0xBD59, 0xBD64, 0xBD68, 0xBD80, 0xBD81, /* 0xC0 */ + 0xBD84, 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD90, 0xBD91, 0xBD93, /* 0xD0 */ + 0xBD95, 0xBD99, 0xBD9A, 0xBD9C, 0xBDA4, 0xBDB0, 0xBDB8, 0xBDD4, /* 0xD0 */ + 0xBDD5, 0xBDD8, 0xBDDC, 0xBDE9, 0xBDF0, 0xBDF4, 0xBDF8, 0xBE00, /* 0xE0 */ + 0xBE03, 0xBE05, 0xBE0C, 0xBE0D, 0xBE10, 0xBE14, 0xBE1C, 0xBE1D, /* 0xE0 */ + 0xBE1F, 0xBE44, 0xBE45, 0xBE48, 0xBE4C, 0xBE4E, 0xBE54, 0xBE55, /* 0xF0 */ + 0xBE57, 0xBE59, 0xBE5A, 0xBE5B, 0xBE60, 0xBE61, 0xBE64 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2FB, 0xD2FC, 0xD2FD, 0xD2FE, 0xD2FF, 0xD302, 0xD304, /* 0x40 */ + 0xD306, 0xD307, 0xD308, 0xD309, 0xD30A, 0xD30B, 0xD30F, 0xD311, /* 0x40 */ + 0xD312, 0xD313, 0xD315, 0xD317, 0xD318, 0xD319, 0xD31A, 0xD31B, /* 0x50 */ + 0xD31E, 0xD322, 0xD323, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD324, 0xD326, 0xD327, 0xD32A, 0xD32B, 0xD32D, 0xD32E, /* 0x60 */ + 0xD32F, 0xD331, 0xD332, 0xD333, 0xD334, 0xD335, 0xD336, 0xD337, /* 0x60 */ + 0xD33A, 0xD33E, 0xD33F, 0xD340, 0xD341, 0xD342, 0xD343, 0xD346, /* 0x70 */ + 0xD347, 0xD348, 0xD349, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350, /* 0x80 */ + 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, 0xD356, 0xD357, 0xD358, /* 0x80 */ + 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0xD360, /* 0x90 */ + 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368, /* 0x90 */ + 0xD369, 0xBE68, 0xBE6A, 0xBE70, 0xBE71, 0xBE73, 0xBE74, 0xBE75, /* 0xA0 */ + 0xBE7B, 0xBE7C, 0xBE7D, 0xBE80, 0xBE84, 0xBE8C, 0xBE8D, 0xBE8F, /* 0xA0 */ + 0xBE90, 0xBE91, 0xBE98, 0xBE99, 0xBEA8, 0xBED0, 0xBED1, 0xBED4, /* 0xB0 */ + 0xBED7, 0xBED8, 0xBEE0, 0xBEE3, 0xBEE4, 0xBEE5, 0xBEEC, 0xBF01, /* 0xB0 */ + 0xBF08, 0xBF09, 0xBF18, 0xBF19, 0xBF1B, 0xBF1C, 0xBF1D, 0xBF40, /* 0xC0 */ + 0xBF41, 0xBF44, 0xBF48, 0xBF50, 0xBF51, 0xBF55, 0xBF94, 0xBFB0, /* 0xC0 */ + 0xBFC5, 0xBFCC, 0xBFCD, 0xBFD0, 0xBFD4, 0xBFDC, 0xBFDF, 0xBFE1, /* 0xD0 */ + 0xC03C, 0xC051, 0xC058, 0xC05C, 0xC060, 0xC068, 0xC069, 0xC090, /* 0xD0 */ + 0xC091, 0xC094, 0xC098, 0xC0A0, 0xC0A1, 0xC0A3, 0xC0A5, 0xC0AC, /* 0xE0 */ + 0xC0AD, 0xC0AF, 0xC0B0, 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0BC, /* 0xE0 */ + 0xC0BD, 0xC0BF, 0xC0C0, 0xC0C1, 0xC0C5, 0xC0C8, 0xC0C9, 0xC0CC, /* 0xF0 */ + 0xC0D0, 0xC0D8, 0xC0D9, 0xC0DB, 0xC0DC, 0xC0DD, 0xC0E4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370, /* 0x40 */ + 0xD371, 0xD372, 0xD373, 0xD374, 0xD375, 0xD376, 0xD377, 0xD378, /* 0x40 */ + 0xD379, 0xD37A, 0xD37B, 0xD37E, 0xD37F, 0xD381, 0xD382, 0xD383, /* 0x50 */ + 0xD385, 0xD386, 0xD387, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD388, 0xD389, 0xD38A, 0xD38B, 0xD38E, 0xD392, 0xD393, /* 0x60 */ + 0xD394, 0xD395, 0xD396, 0xD397, 0xD39A, 0xD39B, 0xD39D, 0xD39E, /* 0x60 */ + 0xD39F, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, 0xD3A6, 0xD3A7, /* 0x70 */ + 0xD3AA, 0xD3AC, 0xD3AE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD3AF, 0xD3B0, 0xD3B1, 0xD3B2, 0xD3B3, 0xD3B5, 0xD3B6, /* 0x80 */ + 0xD3B7, 0xD3B9, 0xD3BA, 0xD3BB, 0xD3BD, 0xD3BE, 0xD3BF, 0xD3C0, /* 0x80 */ + 0xD3C1, 0xD3C2, 0xD3C3, 0xD3C6, 0xD3C7, 0xD3CA, 0xD3CB, 0xD3CC, /* 0x90 */ + 0xD3CD, 0xD3CE, 0xD3CF, 0xD3D1, 0xD3D2, 0xD3D3, 0xD3D4, 0xD3D5, /* 0x90 */ + 0xD3D6, 0xC0E5, 0xC0E8, 0xC0EC, 0xC0F4, 0xC0F5, 0xC0F7, 0xC0F9, /* 0xA0 */ + 0xC100, 0xC104, 0xC108, 0xC110, 0xC115, 0xC11C, 0xC11D, 0xC11E, /* 0xA0 */ + 0xC11F, 0xC120, 0xC123, 0xC124, 0xC126, 0xC127, 0xC12C, 0xC12D, /* 0xB0 */ + 0xC12F, 0xC130, 0xC131, 0xC136, 0xC138, 0xC139, 0xC13C, 0xC140, /* 0xB0 */ + 0xC148, 0xC149, 0xC14B, 0xC14C, 0xC14D, 0xC154, 0xC155, 0xC158, /* 0xC0 */ + 0xC15C, 0xC164, 0xC165, 0xC167, 0xC168, 0xC169, 0xC170, 0xC174, /* 0xC0 */ + 0xC178, 0xC185, 0xC18C, 0xC18D, 0xC18E, 0xC190, 0xC194, 0xC196, /* 0xD0 */ + 0xC19C, 0xC19D, 0xC19F, 0xC1A1, 0xC1A5, 0xC1A8, 0xC1A9, 0xC1AC, /* 0xD0 */ + 0xC1B0, 0xC1BD, 0xC1C4, 0xC1C8, 0xC1CC, 0xC1D4, 0xC1D7, 0xC1D8, /* 0xE0 */ + 0xC1E0, 0xC1E4, 0xC1E8, 0xC1F0, 0xC1F1, 0xC1F3, 0xC1FC, 0xC1FD, /* 0xE0 */ + 0xC200, 0xC204, 0xC20C, 0xC20D, 0xC20F, 0xC211, 0xC218, 0xC219, /* 0xF0 */ + 0xC21C, 0xC21F, 0xC220, 0xC228, 0xC229, 0xC22B, 0xC22D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD3D7, 0xD3D9, 0xD3DA, 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE, /* 0x40 */ + 0xD3DF, 0xD3E0, 0xD3E2, 0xD3E4, 0xD3E5, 0xD3E6, 0xD3E7, 0xD3E8, /* 0x40 */ + 0xD3E9, 0xD3EA, 0xD3EB, 0xD3EE, 0xD3EF, 0xD3F1, 0xD3F2, 0xD3F3, /* 0x50 */ + 0xD3F5, 0xD3F6, 0xD3F7, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD3F8, 0xD3F9, 0xD3FA, 0xD3FB, 0xD3FE, 0xD400, 0xD402, /* 0x60 */ + 0xD403, 0xD404, 0xD405, 0xD406, 0xD407, 0xD409, 0xD40A, 0xD40B, /* 0x60 */ + 0xD40C, 0xD40D, 0xD40E, 0xD40F, 0xD410, 0xD411, 0xD412, 0xD413, /* 0x70 */ + 0xD414, 0xD415, 0xD416, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD417, 0xD418, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41E, /* 0x80 */ + 0xD41F, 0xD420, 0xD421, 0xD422, 0xD423, 0xD424, 0xD425, 0xD426, /* 0x80 */ + 0xD427, 0xD428, 0xD429, 0xD42A, 0xD42B, 0xD42C, 0xD42D, 0xD42E, /* 0x90 */ + 0xD42F, 0xD430, 0xD431, 0xD432, 0xD433, 0xD434, 0xD435, 0xD436, /* 0x90 */ + 0xD437, 0xC22F, 0xC231, 0xC232, 0xC234, 0xC248, 0xC250, 0xC251, /* 0xA0 */ + 0xC254, 0xC258, 0xC260, 0xC265, 0xC26C, 0xC26D, 0xC270, 0xC274, /* 0xA0 */ + 0xC27C, 0xC27D, 0xC27F, 0xC281, 0xC288, 0xC289, 0xC290, 0xC298, /* 0xB0 */ + 0xC29B, 0xC29D, 0xC2A4, 0xC2A5, 0xC2A8, 0xC2AC, 0xC2AD, 0xC2B4, /* 0xB0 */ + 0xC2B5, 0xC2B7, 0xC2B9, 0xC2DC, 0xC2DD, 0xC2E0, 0xC2E3, 0xC2E4, /* 0xC0 */ + 0xC2EB, 0xC2EC, 0xC2ED, 0xC2EF, 0xC2F1, 0xC2F6, 0xC2F8, 0xC2F9, /* 0xC0 */ + 0xC2FB, 0xC2FC, 0xC300, 0xC308, 0xC309, 0xC30C, 0xC30D, 0xC313, /* 0xD0 */ + 0xC314, 0xC315, 0xC318, 0xC31C, 0xC324, 0xC325, 0xC328, 0xC329, /* 0xD0 */ + 0xC345, 0xC368, 0xC369, 0xC36C, 0xC370, 0xC372, 0xC378, 0xC379, /* 0xE0 */ + 0xC37C, 0xC37D, 0xC384, 0xC388, 0xC38C, 0xC3C0, 0xC3D8, 0xC3D9, /* 0xE0 */ + 0xC3DC, 0xC3DF, 0xC3E0, 0xC3E2, 0xC3E8, 0xC3E9, 0xC3ED, 0xC3F4, /* 0xF0 */ + 0xC3F5, 0xC3F8, 0xC408, 0xC410, 0xC424, 0xC42C, 0xC430 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD438, 0xD439, 0xD43A, 0xD43B, 0xD43C, 0xD43D, 0xD43E, /* 0x40 */ + 0xD43F, 0xD441, 0xD442, 0xD443, 0xD445, 0xD446, 0xD447, 0xD448, /* 0x40 */ + 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, /* 0x50 */ + 0xD451, 0xD452, 0xD453, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458, 0xD459, 0xD45A, /* 0x60 */ + 0xD45B, 0xD45D, 0xD45E, 0xD45F, 0xD461, 0xD462, 0xD463, 0xD465, /* 0x60 */ + 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46E, /* 0x70 */ + 0xD470, 0xD471, 0xD472, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0xD47A, 0xD47B, /* 0x80 */ + 0xD47D, 0xD47E, 0xD481, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487, /* 0x80 */ + 0xD48A, 0xD48C, 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, /* 0x90 */ + 0xD495, 0xD496, 0xD497, 0xD498, 0xD499, 0xD49A, 0xD49B, 0xD49C, /* 0x90 */ + 0xD49D, 0xC434, 0xC43C, 0xC43D, 0xC448, 0xC464, 0xC465, 0xC468, /* 0xA0 */ + 0xC46C, 0xC474, 0xC475, 0xC479, 0xC480, 0xC494, 0xC49C, 0xC4B8, /* 0xA0 */ + 0xC4BC, 0xC4E9, 0xC4F0, 0xC4F1, 0xC4F4, 0xC4F8, 0xC4FA, 0xC4FF, /* 0xB0 */ + 0xC500, 0xC501, 0xC50C, 0xC510, 0xC514, 0xC51C, 0xC528, 0xC529, /* 0xB0 */ + 0xC52C, 0xC530, 0xC538, 0xC539, 0xC53B, 0xC53D, 0xC544, 0xC545, /* 0xC0 */ + 0xC548, 0xC549, 0xC54A, 0xC54C, 0xC54D, 0xC54E, 0xC553, 0xC554, /* 0xC0 */ + 0xC555, 0xC557, 0xC558, 0xC559, 0xC55D, 0xC55E, 0xC560, 0xC561, /* 0xD0 */ + 0xC564, 0xC568, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575, 0xC57C, /* 0xD0 */ + 0xC57D, 0xC580, 0xC584, 0xC587, 0xC58C, 0xC58D, 0xC58F, 0xC591, /* 0xE0 */ + 0xC595, 0xC597, 0xC598, 0xC59C, 0xC5A0, 0xC5A9, 0xC5B4, 0xC5B5, /* 0xE0 */ + 0xC5B8, 0xC5B9, 0xC5BB, 0xC5BC, 0xC5BD, 0xC5BE, 0xC5C4, 0xC5C5, /* 0xF0 */ + 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9, 0xC5CA, 0xC5CC, 0xC5CE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD49E, 0xD49F, 0xD4A0, 0xD4A1, 0xD4A2, 0xD4A3, 0xD4A4, /* 0x40 */ + 0xD4A5, 0xD4A6, 0xD4A7, 0xD4A8, 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, /* 0x40 */ + 0xD4AE, 0xD4AF, 0xD4B0, 0xD4B1, 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, /* 0x50 */ + 0xD4B6, 0xD4B7, 0xD4B8, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD4B9, 0xD4BA, 0xD4BB, 0xD4BC, 0xD4BD, 0xD4BE, 0xD4BF, /* 0x60 */ + 0xD4C0, 0xD4C1, 0xD4C2, 0xD4C3, 0xD4C4, 0xD4C5, 0xD4C6, 0xD4C7, /* 0x60 */ + 0xD4C8, 0xD4C9, 0xD4CA, 0xD4CB, 0xD4CD, 0xD4CE, 0xD4CF, 0xD4D1, /* 0x70 */ + 0xD4D2, 0xD4D3, 0xD4D5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD4D6, 0xD4D7, 0xD4D8, 0xD4D9, 0xD4DA, 0xD4DB, 0xD4DD, /* 0x80 */ + 0xD4DE, 0xD4E0, 0xD4E1, 0xD4E2, 0xD4E3, 0xD4E4, 0xD4E5, 0xD4E6, /* 0x80 */ + 0xD4E7, 0xD4E9, 0xD4EA, 0xD4EB, 0xD4ED, 0xD4EE, 0xD4EF, 0xD4F1, /* 0x90 */ + 0xD4F2, 0xD4F3, 0xD4F4, 0xD4F5, 0xD4F6, 0xD4F7, 0xD4F9, 0xD4FA, /* 0x90 */ + 0xD4FC, 0xC5D0, 0xC5D1, 0xC5D4, 0xC5D8, 0xC5E0, 0xC5E1, 0xC5E3, /* 0xA0 */ + 0xC5E5, 0xC5EC, 0xC5ED, 0xC5EE, 0xC5F0, 0xC5F4, 0xC5F6, 0xC5F7, /* 0xA0 */ + 0xC5FC, 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, 0xC601, 0xC605, 0xC606, /* 0xB0 */ + 0xC607, 0xC608, 0xC60C, 0xC610, 0xC618, 0xC619, 0xC61B, 0xC61C, /* 0xB0 */ + 0xC624, 0xC625, 0xC628, 0xC62C, 0xC62D, 0xC62E, 0xC630, 0xC633, /* 0xC0 */ + 0xC634, 0xC635, 0xC637, 0xC639, 0xC63B, 0xC640, 0xC641, 0xC644, /* 0xC0 */ + 0xC648, 0xC650, 0xC651, 0xC653, 0xC654, 0xC655, 0xC65C, 0xC65D, /* 0xD0 */ + 0xC660, 0xC66C, 0xC66F, 0xC671, 0xC678, 0xC679, 0xC67C, 0xC680, /* 0xD0 */ + 0xC688, 0xC689, 0xC68B, 0xC68D, 0xC694, 0xC695, 0xC698, 0xC69C, /* 0xE0 */ + 0xC6A4, 0xC6A5, 0xC6A7, 0xC6A9, 0xC6B0, 0xC6B1, 0xC6B4, 0xC6B8, /* 0xE0 */ + 0xC6B9, 0xC6BA, 0xC6C0, 0xC6C1, 0xC6C3, 0xC6C5, 0xC6CC, 0xC6CD, /* 0xF0 */ + 0xC6D0, 0xC6D4, 0xC6DC, 0xC6DD, 0xC6E0, 0xC6E1, 0xC6E8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0xD505, /* 0x40 */ + 0xD506, 0xD507, 0xD509, 0xD50A, 0xD50B, 0xD50D, 0xD50E, 0xD50F, /* 0x40 */ + 0xD510, 0xD511, 0xD512, 0xD513, 0xD516, 0xD518, 0xD519, 0xD51A, /* 0x50 */ + 0xD51B, 0xD51C, 0xD51D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD51E, 0xD51F, 0xD520, 0xD521, 0xD522, 0xD523, 0xD524, /* 0x60 */ + 0xD525, 0xD526, 0xD527, 0xD528, 0xD529, 0xD52A, 0xD52B, 0xD52C, /* 0x60 */ + 0xD52D, 0xD52E, 0xD52F, 0xD530, 0xD531, 0xD532, 0xD533, 0xD534, /* 0x70 */ + 0xD535, 0xD536, 0xD537, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD538, 0xD539, 0xD53A, 0xD53B, 0xD53E, 0xD53F, 0xD541, /* 0x80 */ + 0xD542, 0xD543, 0xD545, 0xD546, 0xD547, 0xD548, 0xD549, 0xD54A, /* 0x80 */ + 0xD54B, 0xD54E, 0xD550, 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, /* 0x90 */ + 0xD557, 0xD55A, 0xD55B, 0xD55D, 0xD55E, 0xD55F, 0xD561, 0xD562, /* 0x90 */ + 0xD563, 0xC6E9, 0xC6EC, 0xC6F0, 0xC6F8, 0xC6F9, 0xC6FD, 0xC704, /* 0xA0 */ + 0xC705, 0xC708, 0xC70C, 0xC714, 0xC715, 0xC717, 0xC719, 0xC720, /* 0xA0 */ + 0xC721, 0xC724, 0xC728, 0xC730, 0xC731, 0xC733, 0xC735, 0xC737, /* 0xB0 */ + 0xC73C, 0xC73D, 0xC740, 0xC744, 0xC74A, 0xC74C, 0xC74D, 0xC74F, /* 0xB0 */ + 0xC751, 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, /* 0xC0 */ + 0xC75C, 0xC760, 0xC768, 0xC76B, 0xC774, 0xC775, 0xC778, 0xC77C, /* 0xC0 */ + 0xC77D, 0xC77E, 0xC783, 0xC784, 0xC785, 0xC787, 0xC788, 0xC789, /* 0xD0 */ + 0xC78A, 0xC78E, 0xC790, 0xC791, 0xC794, 0xC796, 0xC797, 0xC798, /* 0xD0 */ + 0xC79A, 0xC7A0, 0xC7A1, 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7AC, /* 0xE0 */ + 0xC7AD, 0xC7B0, 0xC7B4, 0xC7BC, 0xC7BD, 0xC7BF, 0xC7C0, 0xC7C1, /* 0xE0 */ + 0xC7C8, 0xC7C9, 0xC7CC, 0xC7CE, 0xC7D0, 0xC7D8, 0xC7DD, 0xC7E4, /* 0xF0 */ + 0xC7E8, 0xC7EC, 0xC800, 0xC801, 0xC804, 0xC808, 0xC80A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD564, 0xD566, 0xD567, 0xD56A, 0xD56C, 0xD56E, 0xD56F, /* 0x40 */ + 0xD570, 0xD571, 0xD572, 0xD573, 0xD576, 0xD577, 0xD579, 0xD57A, /* 0x40 */ + 0xD57B, 0xD57D, 0xD57E, 0xD57F, 0xD580, 0xD581, 0xD582, 0xD583, /* 0x50 */ + 0xD586, 0xD58A, 0xD58B, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD58C, 0xD58D, 0xD58E, 0xD58F, 0xD591, 0xD592, 0xD593, /* 0x60 */ + 0xD594, 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, /* 0x60 */ + 0xD59C, 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD5A1, 0xD5A2, 0xD5A3, /* 0x70 */ + 0xD5A4, 0xD5A6, 0xD5A7, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0xD5AC, 0xD5AD, 0xD5AE, /* 0x80 */ + 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6, /* 0x80 */ + 0xD5B7, 0xD5B8, 0xD5B9, 0xD5BA, 0xD5BB, 0xD5BC, 0xD5BD, 0xD5BE, /* 0x90 */ + 0xD5BF, 0xD5C0, 0xD5C1, 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6, /* 0x90 */ + 0xD5C7, 0xC810, 0xC811, 0xC813, 0xC815, 0xC816, 0xC81C, 0xC81D, /* 0xA0 */ + 0xC820, 0xC824, 0xC82C, 0xC82D, 0xC82F, 0xC831, 0xC838, 0xC83C, /* 0xA0 */ + 0xC840, 0xC848, 0xC849, 0xC84C, 0xC84D, 0xC854, 0xC870, 0xC871, /* 0xB0 */ + 0xC874, 0xC878, 0xC87A, 0xC880, 0xC881, 0xC883, 0xC885, 0xC886, /* 0xB0 */ + 0xC887, 0xC88B, 0xC88C, 0xC88D, 0xC894, 0xC89D, 0xC89F, 0xC8A1, /* 0xC0 */ + 0xC8A8, 0xC8BC, 0xC8BD, 0xC8C4, 0xC8C8, 0xC8CC, 0xC8D4, 0xC8D5, /* 0xC0 */ + 0xC8D7, 0xC8D9, 0xC8E0, 0xC8E1, 0xC8E4, 0xC8F5, 0xC8FC, 0xC8FD, /* 0xD0 */ + 0xC900, 0xC904, 0xC905, 0xC906, 0xC90C, 0xC90D, 0xC90F, 0xC911, /* 0xD0 */ + 0xC918, 0xC92C, 0xC934, 0xC950, 0xC951, 0xC954, 0xC958, 0xC960, /* 0xE0 */ + 0xC961, 0xC963, 0xC96C, 0xC970, 0xC974, 0xC97C, 0xC988, 0xC989, /* 0xE0 */ + 0xC98C, 0xC990, 0xC998, 0xC999, 0xC99B, 0xC99D, 0xC9C0, 0xC9C1, /* 0xF0 */ + 0xC9C4, 0xC9C7, 0xC9C8, 0xC9CA, 0xC9D0, 0xC9D1, 0xC9D3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5CA, 0xD5CB, 0xD5CD, 0xD5CE, 0xD5CF, 0xD5D1, 0xD5D3, /* 0x40 */ + 0xD5D4, 0xD5D5, 0xD5D6, 0xD5D7, 0xD5DA, 0xD5DC, 0xD5DE, 0xD5DF, /* 0x40 */ + 0xD5E0, 0xD5E1, 0xD5E2, 0xD5E3, 0xD5E6, 0xD5E7, 0xD5E9, 0xD5EA, /* 0x50 */ + 0xD5EB, 0xD5ED, 0xD5EE, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD5EF, 0xD5F0, 0xD5F1, 0xD5F2, 0xD5F3, 0xD5F6, 0xD5F8, /* 0x60 */ + 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD, 0xD5FE, 0xD5FF, 0xD602, 0xD603, /* 0x60 */ + 0xD605, 0xD606, 0xD607, 0xD609, 0xD60A, 0xD60B, 0xD60C, 0xD60D, /* 0x70 */ + 0xD60E, 0xD60F, 0xD612, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD616, 0xD617, 0xD618, 0xD619, 0xD61A, 0xD61B, 0xD61D, /* 0x80 */ + 0xD61E, 0xD61F, 0xD621, 0xD622, 0xD623, 0xD625, 0xD626, 0xD627, /* 0x80 */ + 0xD628, 0xD629, 0xD62A, 0xD62B, 0xD62C, 0xD62E, 0xD62F, 0xD630, /* 0x90 */ + 0xD631, 0xD632, 0xD633, 0xD634, 0xD635, 0xD636, 0xD637, 0xD63A, /* 0x90 */ + 0xD63B, 0xC9D5, 0xC9D6, 0xC9D9, 0xC9DA, 0xC9DC, 0xC9DD, 0xC9E0, /* 0xA0 */ + 0xC9E2, 0xC9E4, 0xC9E7, 0xC9EC, 0xC9ED, 0xC9EF, 0xC9F0, 0xC9F1, /* 0xA0 */ + 0xC9F8, 0xC9F9, 0xC9FC, 0xCA00, 0xCA08, 0xCA09, 0xCA0B, 0xCA0C, /* 0xB0 */ + 0xCA0D, 0xCA14, 0xCA18, 0xCA29, 0xCA4C, 0xCA4D, 0xCA50, 0xCA54, /* 0xB0 */ + 0xCA5C, 0xCA5D, 0xCA5F, 0xCA60, 0xCA61, 0xCA68, 0xCA7D, 0xCA84, /* 0xC0 */ + 0xCA98, 0xCABC, 0xCABD, 0xCAC0, 0xCAC4, 0xCACC, 0xCACD, 0xCACF, /* 0xC0 */ + 0xCAD1, 0xCAD3, 0xCAD8, 0xCAD9, 0xCAE0, 0xCAEC, 0xCAF4, 0xCB08, /* 0xD0 */ + 0xCB10, 0xCB14, 0xCB18, 0xCB20, 0xCB21, 0xCB41, 0xCB48, 0xCB49, /* 0xD0 */ + 0xCB4C, 0xCB50, 0xCB58, 0xCB59, 0xCB5D, 0xCB64, 0xCB78, 0xCB79, /* 0xE0 */ + 0xCB9C, 0xCBB8, 0xCBD4, 0xCBE4, 0xCBE7, 0xCBE9, 0xCC0C, 0xCC0D, /* 0xE0 */ + 0xCC10, 0xCC14, 0xCC1C, 0xCC1D, 0xCC21, 0xCC22, 0xCC27, 0xCC28, /* 0xF0 */ + 0xCC29, 0xCC2C, 0xCC2E, 0xCC30, 0xCC38, 0xCC39, 0xCC3B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD63D, 0xD63E, 0xD63F, 0xD641, 0xD642, 0xD643, 0xD644, /* 0x40 */ + 0xD646, 0xD647, 0xD64A, 0xD64C, 0xD64E, 0xD64F, 0xD650, 0xD652, /* 0x40 */ + 0xD653, 0xD656, 0xD657, 0xD659, 0xD65A, 0xD65B, 0xD65D, 0xD65E, /* 0x50 */ + 0xD65F, 0xD660, 0xD661, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD662, 0xD663, 0xD664, 0xD665, 0xD666, 0xD668, 0xD66A, /* 0x60 */ + 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0xD672, 0xD673, 0xD675, /* 0x60 */ + 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, /* 0x70 */ + 0xD67E, 0xD67F, 0xD680, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD681, 0xD682, 0xD684, 0xD686, 0xD687, 0xD688, 0xD689, /* 0x80 */ + 0xD68A, 0xD68B, 0xD68E, 0xD68F, 0xD691, 0xD692, 0xD693, 0xD695, /* 0x80 */ + 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69E, /* 0x90 */ + 0xD6A0, 0xD6A2, 0xD6A3, 0xD6A4, 0xD6A5, 0xD6A6, 0xD6A7, 0xD6A9, /* 0x90 */ + 0xD6AA, 0xCC3C, 0xCC3D, 0xCC3E, 0xCC44, 0xCC45, 0xCC48, 0xCC4C, /* 0xA0 */ + 0xCC54, 0xCC55, 0xCC57, 0xCC58, 0xCC59, 0xCC60, 0xCC64, 0xCC66, /* 0xA0 */ + 0xCC68, 0xCC70, 0xCC75, 0xCC98, 0xCC99, 0xCC9C, 0xCCA0, 0xCCA8, /* 0xB0 */ + 0xCCA9, 0xCCAB, 0xCCAC, 0xCCAD, 0xCCB4, 0xCCB5, 0xCCB8, 0xCCBC, /* 0xB0 */ + 0xCCC4, 0xCCC5, 0xCCC7, 0xCCC9, 0xCCD0, 0xCCD4, 0xCCE4, 0xCCEC, /* 0xC0 */ + 0xCCF0, 0xCD01, 0xCD08, 0xCD09, 0xCD0C, 0xCD10, 0xCD18, 0xCD19, /* 0xC0 */ + 0xCD1B, 0xCD1D, 0xCD24, 0xCD28, 0xCD2C, 0xCD39, 0xCD5C, 0xCD60, /* 0xD0 */ + 0xCD64, 0xCD6C, 0xCD6D, 0xCD6F, 0xCD71, 0xCD78, 0xCD88, 0xCD94, /* 0xD0 */ + 0xCD95, 0xCD98, 0xCD9C, 0xCDA4, 0xCDA5, 0xCDA7, 0xCDA9, 0xCDB0, /* 0xE0 */ + 0xCDC4, 0xCDCC, 0xCDD0, 0xCDE8, 0xCDEC, 0xCDF0, 0xCDF8, 0xCDF9, /* 0xE0 */ + 0xCDFB, 0xCDFD, 0xCE04, 0xCE08, 0xCE0C, 0xCE14, 0xCE19, 0xCE20, /* 0xF0 */ + 0xCE21, 0xCE24, 0xCE28, 0xCE30, 0xCE31, 0xCE33, 0xCE35 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD6AB, 0xD6AD, 0xD6AE, 0xD6AF, 0xD6B1, 0xD6B2, 0xD6B3, /* 0x40 */ + 0xD6B4, 0xD6B5, 0xD6B6, 0xD6B7, 0xD6B8, 0xD6BA, 0xD6BC, 0xD6BD, /* 0x40 */ + 0xD6BE, 0xD6BF, 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0xD6C6, 0xD6C7, /* 0x50 */ + 0xD6C9, 0xD6CA, 0xD6CB, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD6CD, 0xD6CE, 0xD6CF, 0xD6D0, 0xD6D2, 0xD6D3, 0xD6D5, /* 0x60 */ + 0xD6D6, 0xD6D8, 0xD6DA, 0xD6DB, 0xD6DC, 0xD6DD, 0xD6DE, 0xD6DF, /* 0x60 */ + 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E5, 0xD6E6, 0xD6E7, 0xD6E9, 0xD6EA, /* 0x70 */ + 0xD6EB, 0xD6EC, 0xD6ED, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD6EE, 0xD6EF, 0xD6F1, 0xD6F2, 0xD6F3, 0xD6F4, 0xD6F6, /* 0x80 */ + 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA, 0xD6FB, 0xD6FE, 0xD6FF, 0xD701, /* 0x80 */ + 0xD702, 0xD703, 0xD705, 0xD706, 0xD707, 0xD708, 0xD709, 0xD70A, /* 0x90 */ + 0xD70B, 0xD70C, 0xD70D, 0xD70E, 0xD70F, 0xD710, 0xD712, 0xD713, /* 0x90 */ + 0xD714, 0xCE58, 0xCE59, 0xCE5C, 0xCE5F, 0xCE60, 0xCE61, 0xCE68, /* 0xA0 */ + 0xCE69, 0xCE6B, 0xCE6D, 0xCE74, 0xCE75, 0xCE78, 0xCE7C, 0xCE84, /* 0xA0 */ + 0xCE85, 0xCE87, 0xCE89, 0xCE90, 0xCE91, 0xCE94, 0xCE98, 0xCEA0, /* 0xB0 */ + 0xCEA1, 0xCEA3, 0xCEA4, 0xCEA5, 0xCEAC, 0xCEAD, 0xCEC1, 0xCEE4, /* 0xB0 */ + 0xCEE5, 0xCEE8, 0xCEEB, 0xCEEC, 0xCEF4, 0xCEF5, 0xCEF7, 0xCEF8, /* 0xC0 */ + 0xCEF9, 0xCF00, 0xCF01, 0xCF04, 0xCF08, 0xCF10, 0xCF11, 0xCF13, /* 0xC0 */ + 0xCF15, 0xCF1C, 0xCF20, 0xCF24, 0xCF2C, 0xCF2D, 0xCF2F, 0xCF30, /* 0xD0 */ + 0xCF31, 0xCF38, 0xCF54, 0xCF55, 0xCF58, 0xCF5C, 0xCF64, 0xCF65, /* 0xD0 */ + 0xCF67, 0xCF69, 0xCF70, 0xCF71, 0xCF74, 0xCF78, 0xCF80, 0xCF85, /* 0xE0 */ + 0xCF8C, 0xCFA1, 0xCFA8, 0xCFB0, 0xCFC4, 0xCFE0, 0xCFE1, 0xCFE4, /* 0xE0 */ + 0xCFE8, 0xCFF0, 0xCFF1, 0xCFF3, 0xCFF5, 0xCFFC, 0xD000, 0xD004, /* 0xF0 */ + 0xD011, 0xD018, 0xD02D, 0xD034, 0xD035, 0xD038, 0xD03C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD715, 0xD716, 0xD717, 0xD71A, 0xD71B, 0xD71D, 0xD71E, /* 0x40 */ + 0xD71F, 0xD721, 0xD722, 0xD723, 0xD724, 0xD725, 0xD726, 0xD727, /* 0x40 */ + 0xD72A, 0xD72C, 0xD72E, 0xD72F, 0xD730, 0xD731, 0xD732, 0xD733, /* 0x50 */ + 0xD736, 0xD737, 0xD739, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD73A, 0xD73B, 0xD73D, 0xD73E, 0xD73F, 0xD740, 0xD741, /* 0x60 */ + 0xD742, 0xD743, 0xD745, 0xD746, 0xD748, 0xD74A, 0xD74B, 0xD74C, /* 0x60 */ + 0xD74D, 0xD74E, 0xD74F, 0xD752, 0xD753, 0xD755, 0xD75A, 0xD75B, /* 0x70 */ + 0xD75C, 0xD75D, 0xD75E, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD75F, 0xD762, 0xD764, 0xD766, 0xD767, 0xD768, 0xD76A, /* 0x80 */ + 0xD76B, 0xD76D, 0xD76E, 0xD76F, 0xD771, 0xD772, 0xD773, 0xD775, /* 0x80 */ + 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77E, 0xD77F, /* 0x90 */ + 0xD780, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD78A, /* 0x90 */ + 0xD78B, 0xD044, 0xD045, 0xD047, 0xD049, 0xD050, 0xD054, 0xD058, /* 0xA0 */ + 0xD060, 0xD06C, 0xD06D, 0xD070, 0xD074, 0xD07C, 0xD07D, 0xD081, /* 0xA0 */ + 0xD0A4, 0xD0A5, 0xD0A8, 0xD0AC, 0xD0B4, 0xD0B5, 0xD0B7, 0xD0B9, /* 0xB0 */ + 0xD0C0, 0xD0C1, 0xD0C4, 0xD0C8, 0xD0C9, 0xD0D0, 0xD0D1, 0xD0D3, /* 0xB0 */ + 0xD0D4, 0xD0D5, 0xD0DC, 0xD0DD, 0xD0E0, 0xD0E4, 0xD0EC, 0xD0ED, /* 0xC0 */ + 0xD0EF, 0xD0F0, 0xD0F1, 0xD0F8, 0xD10D, 0xD130, 0xD131, 0xD134, /* 0xC0 */ + 0xD138, 0xD13A, 0xD140, 0xD141, 0xD143, 0xD144, 0xD145, 0xD14C, /* 0xD0 */ + 0xD14D, 0xD150, 0xD154, 0xD15C, 0xD15D, 0xD15F, 0xD161, 0xD168, /* 0xD0 */ + 0xD16C, 0xD17C, 0xD184, 0xD188, 0xD1A0, 0xD1A1, 0xD1A4, 0xD1A8, /* 0xE0 */ + 0xD1B0, 0xD1B1, 0xD1B3, 0xD1B5, 0xD1BA, 0xD1BC, 0xD1C0, 0xD1D8, /* 0xE0 */ + 0xD1F4, 0xD1F8, 0xD207, 0xD209, 0xD210, 0xD22C, 0xD22D, 0xD230, /* 0xF0 */ + 0xD234, 0xD23C, 0xD23D, 0xD23F, 0xD241, 0xD248, 0xD25C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD78D, 0xD78E, 0xD78F, 0xD791, 0xD792, 0xD793, 0xD794, /* 0x40 */ + 0xD795, 0xD796, 0xD797, 0xD79A, 0xD79C, 0xD79E, 0xD79F, 0xD7A0, /* 0x40 */ + 0xD7A1, 0xD7A2, 0xD7A3, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xD264, 0xD280, 0xD281, 0xD284, 0xD288, 0xD290, 0xD291, /* 0xA0 */ + 0xD295, 0xD29C, 0xD2A0, 0xD2A4, 0xD2AC, 0xD2B1, 0xD2B8, 0xD2B9, /* 0xA0 */ + 0xD2BC, 0xD2BF, 0xD2C0, 0xD2C2, 0xD2C8, 0xD2C9, 0xD2CB, 0xD2D4, /* 0xB0 */ + 0xD2D8, 0xD2DC, 0xD2E4, 0xD2E5, 0xD2F0, 0xD2F1, 0xD2F4, 0xD2F8, /* 0xB0 */ + 0xD300, 0xD301, 0xD303, 0xD305, 0xD30C, 0xD30D, 0xD30E, 0xD310, /* 0xC0 */ + 0xD314, 0xD316, 0xD31C, 0xD31D, 0xD31F, 0xD320, 0xD321, 0xD325, /* 0xC0 */ + 0xD328, 0xD329, 0xD32C, 0xD330, 0xD338, 0xD339, 0xD33B, 0xD33C, /* 0xD0 */ + 0xD33D, 0xD344, 0xD345, 0xD37C, 0xD37D, 0xD380, 0xD384, 0xD38C, /* 0xD0 */ + 0xD38D, 0xD38F, 0xD390, 0xD391, 0xD398, 0xD399, 0xD39C, 0xD3A0, /* 0xE0 */ + 0xD3A8, 0xD3A9, 0xD3AB, 0xD3AD, 0xD3B4, 0xD3B8, 0xD3BC, 0xD3C4, /* 0xE0 */ + 0xD3C5, 0xD3C8, 0xD3C9, 0xD3D0, 0xD3D8, 0xD3E1, 0xD3E3, 0xD3EC, /* 0xF0 */ + 0xD3ED, 0xD3F0, 0xD3F4, 0xD3FC, 0xD3FD, 0xD3FF, 0xD401 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD408, 0xD41D, 0xD440, 0xD444, 0xD45C, 0xD460, 0xD464, /* 0xA0 */ + 0xD46D, 0xD46F, 0xD478, 0xD479, 0xD47C, 0xD47F, 0xD480, 0xD482, /* 0xA0 */ + 0xD488, 0xD489, 0xD48B, 0xD48D, 0xD494, 0xD4A9, 0xD4CC, 0xD4D0, /* 0xB0 */ + 0xD4D4, 0xD4DC, 0xD4DF, 0xD4E8, 0xD4EC, 0xD4F0, 0xD4F8, 0xD4FB, /* 0xB0 */ + 0xD4FD, 0xD504, 0xD508, 0xD50C, 0xD514, 0xD515, 0xD517, 0xD53C, /* 0xC0 */ + 0xD53D, 0xD540, 0xD544, 0xD54C, 0xD54D, 0xD54F, 0xD551, 0xD558, /* 0xC0 */ + 0xD559, 0xD55C, 0xD560, 0xD565, 0xD568, 0xD569, 0xD56B, 0xD56D, /* 0xD0 */ + 0xD574, 0xD575, 0xD578, 0xD57C, 0xD584, 0xD585, 0xD587, 0xD588, /* 0xD0 */ + 0xD589, 0xD590, 0xD5A5, 0xD5C8, 0xD5C9, 0xD5CC, 0xD5D0, 0xD5D2, /* 0xE0 */ + 0xD5D8, 0xD5D9, 0xD5DB, 0xD5DD, 0xD5E4, 0xD5E5, 0xD5E8, 0xD5EC, /* 0xE0 */ + 0xD5F4, 0xD5F5, 0xD5F7, 0xD5F9, 0xD600, 0xD601, 0xD604, 0xD608, /* 0xF0 */ + 0xD610, 0xD611, 0xD613, 0xD614, 0xD615, 0xD61C, 0xD620 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_C8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD624, 0xD62D, 0xD638, 0xD639, 0xD63C, 0xD640, 0xD645, /* 0xA0 */ + 0xD648, 0xD649, 0xD64B, 0xD64D, 0xD651, 0xD654, 0xD655, 0xD658, /* 0xA0 */ + 0xD65C, 0xD667, 0xD669, 0xD670, 0xD671, 0xD674, 0xD683, 0xD685, /* 0xB0 */ + 0xD68C, 0xD68D, 0xD690, 0xD694, 0xD69D, 0xD69F, 0xD6A1, 0xD6A8, /* 0xB0 */ + 0xD6AC, 0xD6B0, 0xD6B9, 0xD6BB, 0xD6C4, 0xD6C5, 0xD6C8, 0xD6CC, /* 0xC0 */ + 0xD6D1, 0xD6D4, 0xD6D7, 0xD6D9, 0xD6E0, 0xD6E4, 0xD6E8, 0xD6F0, /* 0xC0 */ + 0xD6F5, 0xD6FC, 0xD6FD, 0xD700, 0xD704, 0xD711, 0xD718, 0xD719, /* 0xD0 */ + 0xD71C, 0xD720, 0xD728, 0xD729, 0xD72B, 0xD72D, 0xD734, 0xD735, /* 0xD0 */ + 0xD738, 0xD73C, 0xD744, 0xD747, 0xD749, 0xD750, 0xD751, 0xD754, /* 0xE0 */ + 0xD756, 0xD757, 0xD758, 0xD759, 0xD760, 0xD761, 0xD763, 0xD765, /* 0xE0 */ + 0xD769, 0xD76C, 0xD770, 0xD774, 0xD77C, 0xD77D, 0xD781, 0xD788, /* 0xF0 */ + 0xD789, 0xD78C, 0xD790, 0xD798, 0xD799, 0xD79B, 0xD79D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F3D, 0x4F73, 0x5047, 0x50F9, 0x52A0, 0x53EF, 0x5475, /* 0xA0 */ + 0x54E5, 0x5609, 0x5AC1, 0x5BB6, 0x6687, 0x67B6, 0x67B7, 0x67EF, /* 0xA0 */ + 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB, 0x8304, 0x8857, 0x8888, /* 0xB0 */ + 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6, 0x99D5, 0x523B, 0x5374, /* 0xB0 */ + 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF, 0x811A, 0x89BA, 0x89D2, /* 0xC0 */ + 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978, 0x59E6, 0x5E72, 0x5E79, /* 0xC0 */ + 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F, 0x6F97, 0x764E, 0x770B, /* 0xD0 */ + 0x78F5, 0x7A08, 0x7AFF, 0x7C21, 0x809D, 0x826E, 0x8271, 0x8AEB, /* 0xD0 */ + 0x9593, 0x4E6B, 0x559D, 0x66F7, 0x6E34, 0x78A3, 0x7AED, 0x845B, /* 0xE0 */ + 0x8910, 0x874E, 0x97A8, 0x52D8, 0x574E, 0x582A, 0x5D4C, 0x611F, /* 0xE0 */ + 0x61BE, 0x6221, 0x6562, 0x67D1, 0x6A44, 0x6E1B, 0x7518, 0x75B3, /* 0xF0 */ + 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451, 0x9452, 0x9F95 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5323, 0x5CAC, 0x7532, 0x80DB, 0x9240, 0x9598, 0x525B, /* 0xA0 */ + 0x5808, 0x59DC, 0x5CA1, 0x5D17, 0x5EB7, 0x5F3A, 0x5F4A, 0x6177, /* 0xA0 */ + 0x6C5F, 0x757A, 0x7586, 0x7CE0, 0x7D73, 0x7DB1, 0x7F8C, 0x8154, /* 0xB0 */ + 0x8221, 0x8591, 0x8941, 0x8B1B, 0x92FC, 0x964D, 0x9C47, 0x4ECB, /* 0xB0 */ + 0x4EF7, 0x500B, 0x51F1, 0x584F, 0x6137, 0x613E, 0x6168, 0x6539, /* 0xC0 */ + 0x69EA, 0x6F11, 0x75A5, 0x7686, 0x76D6, 0x7B87, 0x82A5, 0x84CB, /* 0xC0 */ + 0xF900, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751, 0xF901, 0x7CB3, /* 0xD0 */ + 0x7FB9, 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E, /* 0xD0 */ + 0x64DA, 0x64E7, 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0xF902, /* 0xE0 */ + 0x907D, 0x9245, 0x92F8, 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, /* 0xE0 */ + 0x6106, 0x6957, 0x8171, 0x8654, 0x8E47, 0x9375, 0x9A2B, 0x4E5E, /* 0xF0 */ + 0x5091, 0x6770, 0x6840, 0x5109, 0x528D, 0x5292, 0x6AA2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x77BC, 0x9210, 0x9ED4, 0x52AB, 0x602F, 0x8FF2, 0x5048, /* 0xA0 */ + 0x61A9, 0x63ED, 0x64CA, 0x683C, 0x6A84, 0x6FC0, 0x8188, 0x89A1, /* 0xA0 */ + 0x9694, 0x5805, 0x727D, 0x72AC, 0x7504, 0x7D79, 0x7E6D, 0x80A9, /* 0xB0 */ + 0x898B, 0x8B74, 0x9063, 0x9D51, 0x6289, 0x6C7A, 0x6F54, 0x7D50, /* 0xB0 */ + 0x7F3A, 0x8A23, 0x517C, 0x614A, 0x7B9D, 0x8B19, 0x9257, 0x938C, /* 0xC0 */ + 0x4EAC, 0x4FD3, 0x501E, 0x50BE, 0x5106, 0x52C1, 0x52CD, 0x537F, /* 0xC0 */ + 0x5770, 0x5883, 0x5E9A, 0x5F91, 0x6176, 0x61AC, 0x64CE, 0x656C, /* 0xD0 */ + 0x666F, 0x66BB, 0x66F4, 0x6897, 0x6D87, 0x7085, 0x70F1, 0x749F, /* 0xD0 */ + 0x74A5, 0x74CA, 0x75D9, 0x786C, 0x78EC, 0x7ADF, 0x7AF6, 0x7D45, /* 0xE0 */ + 0x7D93, 0x8015, 0x803F, 0x811B, 0x8396, 0x8B66, 0x8F15, 0x9015, /* 0xE0 */ + 0x93E1, 0x9803, 0x9838, 0x9A5A, 0x9BE8, 0x4FC2, 0x5553, 0x583A, /* 0xF0 */ + 0x5951, 0x5B63, 0x5C46, 0x60B8, 0x6212, 0x6842, 0x68B0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x68E8, 0x6EAA, 0x754C, 0x7678, 0x78CE, 0x7A3D, 0x7CFB, /* 0xA0 */ + 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1, 0x8C3F, 0x968E, 0x9DC4, 0x53E4, /* 0xA0 */ + 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1, 0x5B64, 0x5C3B, 0x5EAB, /* 0xB0 */ + 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF, 0x69C1, 0x6CBD, /* 0xB0 */ + 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003, 0x80A1, 0x818F, /* 0xC0 */ + 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4, 0x8AA5, 0xF903, /* 0xC0 */ + 0x8F9C, 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED, 0x659B, /* 0xD0 */ + 0x66F2, 0x688F, 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764, 0x5D11, /* 0xD0 */ + 0x6606, 0x68B1, 0x68CD, 0x6EFE, 0x7428, 0x889E, 0x9BE4, 0x6C68, /* 0xE0 */ + 0xF904, 0x9AA8, 0x4F9B, 0x516C, 0x5171, 0x529F, 0x5B54, 0x5DE5, /* 0xE0 */ + 0x6050, 0x606D, 0x62F1, 0x63A7, 0x653B, 0x73D9, 0x7A7A, 0x86A3, /* 0xF0 */ + 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, 0x679C, 0x74DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x79D1, 0x83D3, 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, /* 0xA0 */ + 0x9846, 0x5ED3, 0x69E8, 0x85FF, 0x90ED, 0xF905, 0x51A0, 0x5B98, /* 0xA0 */ + 0x5BEC, 0x6163, 0x68FA, 0x6B3E, 0x704C, 0x742F, 0x74D8, 0x7BA1, /* 0xB0 */ + 0x7F50, 0x83C5, 0x89C0, 0x8CAB, 0x95DC, 0x9928, 0x522E, 0x605D, /* 0xB0 */ + 0x62EC, 0x9002, 0x4F8A, 0x5149, 0x5321, 0x58D9, 0x5EE3, 0x66E0, /* 0xC0 */ + 0x6D38, 0x709A, 0x72C2, 0x73D6, 0x7B50, 0x80F1, 0x945B, 0x5366, /* 0xC0 */ + 0x639B, 0x7F6B, 0x4E56, 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127, /* 0xD0 */ + 0x62D0, 0x69D0, 0x9B41, 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, /* 0xD0 */ + 0x50D1, 0x54AC, 0x55AC, 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, /* 0xE0 */ + 0x6821, 0x6A4B, 0x72E1, 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0x81A0, /* 0xE0 */ + 0x854E, 0x86DF, 0x8F03, 0x8F4E, 0x90CA, 0x9903, 0x9A55, 0x9BAB, /* 0xF0 */ + 0x4E18, 0x4E45, 0x4E5D, 0x4EC7, 0x4FF1, 0x5177, 0x52FE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5340, 0x53E3, 0x53E5, 0x548E, 0x5614, 0x5775, 0x57A2, /* 0xA0 */ + 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, 0x62D8, 0x6551, 0x67B8, 0x67E9, /* 0xA0 */ + 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42, 0x6E9D, 0x7078, 0x72D7, /* 0xB0 */ + 0x7396, 0x7403, 0x77BF, 0x77E9, 0x7A76, 0x7D7F, 0x8009, 0x81FC, /* 0xB0 */ + 0x8205, 0x820A, 0x82DF, 0x8862, 0x8B33, 0x8CFC, 0x8EC0, 0x9011, /* 0xC0 */ + 0x90B1, 0x9264, 0x92B6, 0x99D2, 0x9A45, 0x9CE9, 0x9DD7, 0x9F9C, /* 0xC0 */ + 0x570B, 0x5C40, 0x83CA, 0x97A0, 0x97AB, 0x9EB4, 0x541B, 0x7A98, /* 0xD0 */ + 0x7FA4, 0x88D9, 0x8ECD, 0x90E1, 0x5800, 0x5C48, 0x6398, 0x7A9F, /* 0xD0 */ + 0x5BAE, 0x5F13, 0x7A79, 0x7AAE, 0x828E, 0x8EAC, 0x5026, 0x5238, /* 0xE0 */ + 0x52F8, 0x5377, 0x5708, 0x62F3, 0x6372, 0x6B0A, 0x6DC3, 0x7737, /* 0xE0 */ + 0x53A5, 0x7357, 0x8568, 0x8E76, 0x95D5, 0x673A, 0x6AC3, 0x6F70, /* 0xF0 */ + 0x8A6D, 0x8ECC, 0x994B, 0xF906, 0x6677, 0x6B78, 0x8CB4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B3C, 0xF907, 0x53EB, 0x572D, 0x594E, 0x63C6, 0x69FB, /* 0xA0 */ + 0x73EA, 0x7845, 0x7ABA, 0x7AC5, 0x7CFE, 0x8475, 0x898F, 0x8D73, /* 0xA0 */ + 0x9035, 0x95A8, 0x52FB, 0x5747, 0x7547, 0x7B60, 0x83CC, 0x921E, /* 0xB0 */ + 0xF908, 0x6A58, 0x514B, 0x524B, 0x5287, 0x621F, 0x68D8, 0x6975, /* 0xB0 */ + 0x9699, 0x50C5, 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, 0x69FF, /* 0xC0 */ + 0x747E, 0x7B4B, 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, /* 0xC0 */ + 0xF909, 0x4ECA, 0x5997, 0x64D2, 0x6611, 0x6A8E, 0x7434, 0x7981, /* 0xD0 */ + 0x79BD, 0x82A9, 0x887E, 0x887F, 0x895F, 0xF90A, 0x9326, 0x4F0B, /* 0xD0 */ + 0x53CA, 0x6025, 0x6271, 0x6C72, 0x7D1A, 0x7D66, 0x4E98, 0x5162, /* 0xE0 */ + 0x77DC, 0x80AF, 0x4F01, 0x4F0E, 0x5176, 0x5180, 0x55DC, 0x5668, /* 0xE0 */ + 0x573B, 0x57FA, 0x57FC, 0x5914, 0x5947, 0x5993, 0x5BC4, 0x5C90, /* 0xF0 */ + 0x5D0E, 0x5DF1, 0x5E7E, 0x5FCC, 0x6280, 0x65D7, 0x65E3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x671E, 0x671F, 0x675E, 0x68CB, 0x68C4, 0x6A5F, 0x6B3A, /* 0xA0 */ + 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, 0x7398, 0x7426, 0x742A, 0x7482, /* 0xA0 */ + 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, 0x7941, 0x7947, 0x7948, /* 0xB0 */ + 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006, 0x802D, 0x808C, /* 0xB0 */ + 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324, 0x98E2, 0x9951, /* 0xC0 */ + 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76, 0x5409, 0x62EE, /* 0xC0 */ + 0x6854, 0x91D1, 0x55AB, 0x513A, 0xF90B, 0xF90C, 0x5A1C, 0x61E6, /* 0xD0 */ + 0xF90D, 0x62CF, 0x62FF, 0xF90E, 0xF90F, 0xF910, 0xF911, 0xF912, /* 0xD0 */ + 0xF913, 0x90A3, 0xF914, 0xF915, 0xF916, 0xF917, 0xF918, 0x8AFE, /* 0xE0 */ + 0xF919, 0xF91A, 0xF91B, 0xF91C, 0x6696, 0xF91D, 0x7156, 0xF91E, /* 0xE0 */ + 0xF91F, 0x96E3, 0xF920, 0x634F, 0x637A, 0x5357, 0xF921, 0x678F, /* 0xF0 */ + 0x6960, 0x6E73, 0xF922, 0x7537, 0xF923, 0xF924, 0xF925 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D0D, 0xF926, 0xF927, 0x8872, 0x56CA, 0x5A18, 0xF928, /* 0xA0 */ + 0xF929, 0xF92A, 0xF92B, 0xF92C, 0x4E43, 0xF92D, 0x5167, 0x5948, /* 0xA0 */ + 0x67F0, 0x8010, 0xF92E, 0x5973, 0x5E74, 0x649A, 0x79CA, 0x5FF5, /* 0xB0 */ + 0x606C, 0x62C8, 0x637B, 0x5BE7, 0x5BD7, 0x52AA, 0xF92F, 0x5974, /* 0xB0 */ + 0x5F29, 0x6012, 0xF930, 0xF931, 0xF932, 0x7459, 0xF933, 0xF934, /* 0xC0 */ + 0xF935, 0xF936, 0xF937, 0xF938, 0x99D1, 0xF939, 0xF93A, 0xF93B, /* 0xC0 */ + 0xF93C, 0xF93D, 0xF93E, 0xF93F, 0xF940, 0xF941, 0xF942, 0xF943, /* 0xD0 */ + 0x6FC3, 0xF944, 0xF945, 0x81BF, 0x8FB2, 0x60F1, 0xF946, 0xF947, /* 0xD0 */ + 0x8166, 0xF948, 0xF949, 0x5C3F, 0xF94A, 0xF94B, 0xF94C, 0xF94D, /* 0xE0 */ + 0xF94E, 0xF94F, 0xF950, 0xF951, 0x5AE9, 0x8A25, 0x677B, 0x7D10, /* 0xE0 */ + 0xF952, 0xF953, 0xF954, 0xF955, 0xF956, 0xF957, 0x80FD, 0xF958, /* 0xF0 */ + 0xF959, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, 0x591A, 0x8336 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E39, 0x4EB6, 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, /* 0xA0 */ + 0x65B7, 0x65E6, 0x6A80, 0x6BB5, 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, /* 0xA0 */ + 0x7DDE, 0x86CB, 0x8892, 0x9132, 0x935B, 0x64BB, 0x6FBE, 0x737A, /* 0xB0 */ + 0x75B8, 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4, 0x66C7, 0x6DE1, /* 0xB0 */ + 0x6E5B, 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541, 0x8983, /* 0xC0 */ + 0x8AC7, 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D, /* 0xC0 */ + 0x5510, 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, /* 0xD0 */ + 0x7CD6, 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, /* 0xD0 */ + 0x5CB1, 0x5E36, 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, /* 0xE0 */ + 0x8CB8, 0x968A, 0x9EDB, 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, /* 0xE0 */ + 0x5230, 0x5716, 0x5835, 0x5857, 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, /* 0xF0 */ + 0x5EA6, 0x5F92, 0x60BC, 0x6311, 0x6389, 0x6417, 0x6843 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x68F9, 0x6AC2, 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE, /* 0xA0 */ + 0x76DC, 0x7779, 0x79B1, 0x7A3B, 0x8404, 0x89A9, 0x8CED, 0x8DF3, /* 0xA0 */ + 0x8E48, 0x9003, 0x9014, 0x9053, 0x90FD, 0x934D, 0x9676, 0x97DC, /* 0xB0 */ + 0x6BD2, 0x7006, 0x7258, 0x72A2, 0x7368, 0x7763, 0x79BF, 0x7BE4, /* 0xB0 */ + 0x7E9B, 0x8B80, 0x58A9, 0x60C7, 0x6566, 0x65FD, 0x66BE, 0x6C8C, /* 0xC0 */ + 0x711E, 0x71C9, 0x8C5A, 0x9813, 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, /* 0xC0 */ + 0x51CD, 0x52D5, 0x540C, 0x61A7, 0x6771, 0x6850, 0x68DF, 0x6D1E, /* 0xD0 */ + 0x6F7C, 0x75BC, 0x77B3, 0x7AE5, 0x80F4, 0x8463, 0x9285, 0x515C, /* 0xD0 */ + 0x6597, 0x675C, 0x6793, 0x75D8, 0x7AC7, 0x8373, 0xF95A, 0x8C46, /* 0xE0 */ + 0x9017, 0x982D, 0x5C6F, 0x81C0, 0x829A, 0x9041, 0x906F, 0x920D, /* 0xE0 */ + 0x5F97, 0x5D9D, 0x6A59, 0x71C8, 0x767B, 0x7B49, 0x85E4, 0x8B04, /* 0xF0 */ + 0x9127, 0x9A30, 0x5587, 0x61F6, 0xF95B, 0x7669, 0x7F85 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x863F, 0x87BA, 0x88F8, 0x908F, 0xF95C, 0x6D1B, 0x70D9, /* 0xA0 */ + 0x73DE, 0x7D61, 0x843D, 0xF95D, 0x916A, 0x99F1, 0xF95E, 0x4E82, /* 0xA0 */ + 0x5375, 0x6B04, 0x6B12, 0x703E, 0x721B, 0x862D, 0x9E1E, 0x524C, /* 0xB0 */ + 0x8FA3, 0x5D50, 0x64E5, 0x652C, 0x6B16, 0x6FEB, 0x7C43, 0x7E9C, /* 0xB0 */ + 0x85CD, 0x8964, 0x89BD, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, /* 0xC0 */ + 0x6D6A, 0x72FC, 0x7405, 0x746F, 0x8782, 0x90DE, 0x4F86, 0x5D0D, /* 0xC0 */ + 0x5FA0, 0x840A, 0x51B7, 0x63A0, 0x7565, 0x4EAE, 0x5006, 0x5169, /* 0xD0 */ + 0x51C9, 0x6881, 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F, 0x8AD2, /* 0xD0 */ + 0x8F1B, 0x91CF, 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E, /* 0xE0 */ + 0x623E, 0x65C5, 0x6ADA, 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, /* 0xE0 */ + 0x9A62, 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x701D, /* 0xF0 */ + 0x792B, 0x8F62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6F23 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7149, 0x7489, 0x7DF4, 0x806F, 0x84EE, 0x8F26, 0x9023, /* 0xA0 */ + 0x934A, 0x51BD, 0x5217, 0x52A3, 0x6D0C, 0x70C8, 0x88C2, 0x5EC9, /* 0xA0 */ + 0x6582, 0x6BAE, 0x6FC2, 0x7C3E, 0x7375, 0x4EE4, 0x4F36, 0x56F9, /* 0xB0 */ + 0xF95F, 0x5CBA, 0x5DBA, 0x601C, 0x73B2, 0x7B2D, 0x7F9A, 0x7FCE, /* 0xB0 */ + 0x8046, 0x901E, 0x9234, 0x96F6, 0x9748, 0x9818, 0x9F61, 0x4F8B, /* 0xC0 */ + 0x6FA7, 0x79AE, 0x91B4, 0x96B7, 0x52DE, 0xF960, 0x6488, 0x64C4, /* 0xC0 */ + 0x6AD3, 0x6F5E, 0x7018, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C, /* 0xD0 */ + 0x8DEF, 0x8F05, 0x9732, 0x9B6F, 0x9DFA, 0x9E75, 0x788C, 0x797F, /* 0xD0 */ + 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x9E93, 0x8AD6, 0x58DF, 0x5F04, /* 0xE0 */ + 0x6727, 0x7027, 0x74CF, 0x7C60, 0x807E, 0x5121, 0x7028, 0x7262, /* 0xE0 */ + 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, 0x96F7, 0x4E86, 0x50DA, 0x5BEE, /* 0xF0 */ + 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, 0x804A, 0x84FC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x907C, 0x9B27, 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13, /* 0xA0 */ + 0x6DDA, 0x6F0F, 0x763B, 0x7D2F, 0x7E37, 0x851E, 0x8938, 0x93E4, /* 0xA0 */ + 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4, 0x6D41, 0x6E9C, 0x700F, /* 0xB0 */ + 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C, 0x985E, 0x516D, /* 0xB0 */ + 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8, 0x8F2A, /* 0xC0 */ + 0x5F8B, 0x6144, 0x6817, 0xF961, 0x9686, 0x52D2, 0x808B, 0x51DC, /* 0xC0 */ + 0x51CC, 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, /* 0xD0 */ + 0x5398, 0x540F, 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, /* 0xD0 */ + 0x7281, 0x72F8, 0x7406, 0x7483, 0xF962, 0x75E2, 0x7C6C, 0x7F79, /* 0xE0 */ + 0x7FB8, 0x8389, 0x88CF, 0x88E1, 0x91CC, 0x91D0, 0x96E2, 0x9BC9, /* 0xE0 */ + 0x541D, 0x6F7E, 0x71D0, 0x7498, 0x85FA, 0x8EAA, 0x96A3, 0x9C57, /* 0xF0 */ + 0x9E9F, 0x6797, 0x6DCB, 0x7433, 0x81E8, 0x9716, 0x782C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7ACB, 0x7B20, 0x7C92, 0x6469, 0x746A, 0x75F2, 0x78BC, /* 0xA0 */ + 0x78E8, 0x99AC, 0x9B54, 0x9EBB, 0x5BDE, 0x5E55, 0x6F20, 0x819C, /* 0xA0 */ + 0x83AB, 0x9088, 0x4E07, 0x534D, 0x5A29, 0x5DD2, 0x5F4E, 0x6162, /* 0xB0 */ + 0x633D, 0x6669, 0x66FC, 0x6EFF, 0x6F2B, 0x7063, 0x779E, 0x842C, /* 0xB0 */ + 0x8513, 0x883B, 0x8F13, 0x9945, 0x9C3B, 0x551C, 0x62B9, 0x672B, /* 0xC0 */ + 0x6CAB, 0x8309, 0x896A, 0x977A, 0x4EA1, 0x5984, 0x5FD8, 0x5FD9, /* 0xC0 */ + 0x671B, 0x7DB2, 0x7F54, 0x8292, 0x832B, 0x83BD, 0x8F1E, 0x9099, /* 0xD0 */ + 0x57CB, 0x59B9, 0x5A92, 0x5BD0, 0x6627, 0x679A, 0x6885, 0x6BCF, /* 0xD0 */ + 0x7164, 0x7F75, 0x8CB7, 0x8CE3, 0x9081, 0x9B45, 0x8108, 0x8C8A, /* 0xE0 */ + 0x964C, 0x9A40, 0x9EA5, 0x5B5F, 0x6C13, 0x731B, 0x76F2, 0x76DF, /* 0xE0 */ + 0x840C, 0x51AA, 0x8993, 0x514D, 0x5195, 0x52C9, 0x68C9, 0x6C94, /* 0xF0 */ + 0x7704, 0x7720, 0x7DBF, 0x7DEC, 0x9762, 0x9EB5, 0x6EC5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_D9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8511, 0x51A5, 0x540D, 0x547D, 0x660E, 0x669D, 0x6927, /* 0xA0 */ + 0x6E9F, 0x76BF, 0x7791, 0x8317, 0x84C2, 0x879F, 0x9169, 0x9298, /* 0xA0 */ + 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, 0x59C6, 0x5E3D, 0x6155, /* 0xB0 */ + 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD, 0x6BDB, 0x725F, /* 0xB0 */ + 0x7261, 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC, 0x8305, 0x8B00, /* 0xC0 */ + 0x8B28, 0x8C8C, 0x6728, 0x6C90, 0x7267, 0x76EE, 0x7766, 0x7A46, /* 0xC0 */ + 0x9DA9, 0x6B7F, 0x6C92, 0x5922, 0x6726, 0x8499, 0x536F, 0x5893, /* 0xD0 */ + 0x5999, 0x5EDF, 0x63CF, 0x6634, 0x6773, 0x6E3A, 0x732B, 0x7AD7, /* 0xD0 */ + 0x82D7, 0x9328, 0x52D9, 0x5DEB, 0x61AE, 0x61CB, 0x620A, 0x62C7, /* 0xE0 */ + 0x64AB, 0x65E0, 0x6959, 0x6B66, 0x6BCB, 0x7121, 0x73F7, 0x755D, /* 0xE0 */ + 0x7E46, 0x821E, 0x8302, 0x856A, 0x8AA3, 0x8CBF, 0x9727, 0x9D61, /* 0xF0 */ + 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, 0x554F, 0x6587 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_DA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C76, 0x7D0A, 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF, /* 0xA0 */ + 0x52FF, 0x6C95, 0x7269, 0x5473, 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C, /* 0xA0 */ + 0x5FAE, 0x672A, 0x68B6, 0x6963, 0x6E3C, 0x6E44, 0x7709, 0x7C73, /* 0xB0 */ + 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761, 0x9EF4, 0x5CB7, 0x60B6, /* 0xB0 */ + 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11, 0x6CEF, 0x739F, /* 0xC0 */ + 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D, 0x535A, /* 0xC0 */ + 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E, /* 0xD0 */ + 0x7B94, 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9, /* 0xD0 */ + 0x99C1, 0x4F34, 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500, /* 0xE0 */ + 0x6591, 0x69C3, 0x6CEE, 0x6F58, 0x73ED, 0x7554, 0x7622, 0x76E4, /* 0xE0 */ + 0x76FC, 0x78D0, 0x78FB, 0x792C, 0x7D46, 0x822C, 0x87E0, 0x8FD4, /* 0xF0 */ + 0x9812, 0x98EF, 0x52C3, 0x62D4, 0x64A5, 0x6E24, 0x6F51 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_DB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x767C, 0x8DCB, 0x91B1, 0x9262, 0x9AEE, 0x9B43, 0x5023, /* 0xA0 */ + 0x508D, 0x574A, 0x59A8, 0x5C28, 0x5E47, 0x5F77, 0x623F, 0x653E, /* 0xA0 */ + 0x65B9, 0x65C1, 0x6609, 0x678B, 0x699C, 0x6EC2, 0x78C5, 0x7D21, /* 0xB0 */ + 0x80AA, 0x8180, 0x822B, 0x82B3, 0x84A1, 0x868C, 0x8A2A, 0x8B17, /* 0xB0 */ + 0x90A6, 0x9632, 0x9F90, 0x500D, 0x4FF3, 0xF963, 0x57F9, 0x5F98, /* 0xC0 */ + 0x62DC, 0x6392, 0x676F, 0x6E43, 0x7119, 0x76C3, 0x80CC, 0x80DA, /* 0xC0 */ + 0x88F4, 0x88F5, 0x8919, 0x8CE0, 0x8F29, 0x914D, 0x966A, 0x4F2F, /* 0xD0 */ + 0x4F70, 0x5E1B, 0x67CF, 0x6822, 0x767D, 0x767E, 0x9B44, 0x5E61, /* 0xD0 */ + 0x6A0A, 0x7169, 0x71D4, 0x756A, 0xF964, 0x7E41, 0x8543, 0x85E9, /* 0xE0 */ + 0x98DC, 0x4F10, 0x7B4F, 0x7F70, 0x95A5, 0x51E1, 0x5E06, 0x68B5, /* 0xE0 */ + 0x6C3E, 0x6C4E, 0x6CDB, 0x72AF, 0x7BC4, 0x8303, 0x6CD5, 0x743A, /* 0xF0 */ + 0x50FB, 0x5288, 0x58C1, 0x64D8, 0x6A97, 0x74A7, 0x7656 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_DC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x78A7, 0x8617, 0x95E2, 0x9739, 0xF965, 0x535E, 0x5F01, /* 0xA0 */ + 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, 0x5225, 0x77A5, 0x9C49, 0x9F08, /* 0xA0 */ + 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, 0x661E, 0x663A, 0x67C4, /* 0xB0 */ + 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, 0x8F27, 0x9920, /* 0xB0 */ + 0x9A08, 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65, 0x6D11, /* 0xC0 */ + 0x6E7A, 0x6F7D, 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913, 0x8B5C, /* 0xC0 */ + 0x8F14, 0x4F0F, 0x50D5, 0x5310, 0x535C, 0x5B93, 0x5FA9, 0x670D, /* 0xD0 */ + 0x798F, 0x8179, 0x832F, 0x8514, 0x8907, 0x8986, 0x8F39, 0x8F3B, /* 0xD0 */ + 0x99A5, 0x9C12, 0x672C, 0x4E76, 0x4FF8, 0x5949, 0x5C01, 0x5CEF, /* 0xE0 */ + 0x5CF0, 0x6367, 0x68D2, 0x70FD, 0x71A2, 0x742B, 0x7E2B, 0x84EC, /* 0xE0 */ + 0x8702, 0x9022, 0x92D2, 0x9CF3, 0x4E0D, 0x4ED8, 0x4FEF, 0x5085, /* 0xF0 */ + 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, 0x592B, 0x5A66 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_DD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5B5A, 0x5B75, 0x5BCC, 0x5E9C, 0xF966, 0x6276, 0x6577, /* 0xA0 */ + 0x65A7, 0x6D6E, 0x6EA5, 0x7236, 0x7B26, 0x7C3F, 0x7F36, 0x8150, /* 0xA0 */ + 0x8151, 0x819A, 0x8240, 0x8299, 0x83A9, 0x8A03, 0x8CA0, 0x8CE6, /* 0xB0 */ + 0x8CFB, 0x8D74, 0x8DBA, 0x90E8, 0x91DC, 0x961C, 0x9644, 0x99D9, /* 0xB0 */ + 0x9CE7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954, 0x596E, /* 0xC0 */ + 0x5FFF, 0x61A4, 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89, /* 0xC0 */ + 0x7CDE, 0x7D1B, 0x82AC, 0x8CC1, 0x96F0, 0xF967, 0x4F5B, 0x5F17, /* 0xD0 */ + 0x5F7F, 0x62C2, 0x5D29, 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, /* 0xD0 */ + 0x4E15, 0x5099, 0x5315, 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, /* 0xE0 */ + 0x60B2, 0x618A, 0x6249, 0x6279, 0x6590, 0x6787, 0x69A7, 0x6BD4, /* 0xE0 */ + 0x6BD6, 0x6BD7, 0x6BD8, 0x6CB8, 0xF968, 0x7435, 0x75FA, 0x7812, /* 0xF0 */ + 0x7891, 0x79D5, 0x79D8, 0x7C83, 0x7DCB, 0x7FE1, 0x80A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_DE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x813E, 0x81C2, 0x83F2, 0x871A, 0x88E8, 0x8AB9, 0x8B6C, /* 0xA0 */ + 0x8CBB, 0x9119, 0x975E, 0x98DB, 0x9F3B, 0x56AC, 0x5B2A, 0x5F6C, /* 0xA0 */ + 0x658C, 0x6AB3, 0x6BAF, 0x6D5C, 0x6FF1, 0x7015, 0x725D, 0x73AD, /* 0xB0 */ + 0x8CA7, 0x8CD3, 0x983B, 0x6191, 0x6C37, 0x8058, 0x9A01, 0x4E4D, /* 0xB0 */ + 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C, 0x4F7F, 0x4FDF, 0x50FF, /* 0xC0 */ + 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB, 0x5962, 0x5A11, /* 0xC0 */ + 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99, 0x601D, 0x6368, /* 0xD0 */ + 0x659C, 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B, 0x6C99, 0x6CD7, /* 0xD0 */ + 0x6E23, 0x7009, 0x7345, 0x7802, 0x793E, 0x7940, 0x7960, 0x79C1, /* 0xE0 */ + 0x7BE9, 0x7D17, 0x7D72, 0x8086, 0x820D, 0x838E, 0x84D1, 0x86C7, /* 0xE0 */ + 0x88DF, 0x8A50, 0x8A5E, 0x8B1D, 0x8CDC, 0x8D66, 0x8FAD, 0x90AA, /* 0xF0 */ + 0x98FC, 0x99DF, 0x9E9D, 0x524A, 0xF969, 0x6714, 0xF96A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_DF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5098, 0x522A, 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523, /* 0xA0 */ + 0x759D, 0x7B97, 0x849C, 0x9178, 0x9730, 0x4E77, 0x6492, 0x6BBA, /* 0xA0 */ + 0x715E, 0x85A9, 0x4E09, 0xF96B, 0x6749, 0x68EE, 0x6E17, 0x829F, /* 0xB0 */ + 0x8518, 0x886B, 0x63F7, 0x6F81, 0x9212, 0x98AF, 0x4E0A, 0x50B7, /* 0xB0 */ + 0x50CF, 0x511F, 0x5546, 0x55AA, 0x5617, 0x5B40, 0x5C19, 0x5CE0, /* 0xC0 */ + 0x5E38, 0x5E8A, 0x5EA0, 0x5EC2, 0x60F3, 0x6851, 0x6A61, 0x6E58, /* 0xC0 */ + 0x723D, 0x7240, 0x72C0, 0x76F8, 0x7965, 0x7BB1, 0x7FD4, 0x88F3, /* 0xD0 */ + 0x89F4, 0x8A73, 0x8C61, 0x8CDE, 0x971C, 0x585E, 0x74BD, 0x8CFD, /* 0xD0 */ + 0x55C7, 0xF96C, 0x7A61, 0x7D22, 0x8272, 0x7272, 0x751F, 0x7525, /* 0xE0 */ + 0xF96D, 0x7B19, 0x5885, 0x58FB, 0x5DBC, 0x5E8F, 0x5EB6, 0x5F90, /* 0xE0 */ + 0x6055, 0x6292, 0x637F, 0x654D, 0x6691, 0x66D9, 0x66F8, 0x6816, /* 0xF0 */ + 0x68F2, 0x7280, 0x745E, 0x7B6E, 0x7D6E, 0x7DD6, 0x7F72 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x80E5, 0x8212, 0x85AF, 0x897F, 0x8A93, 0x901D, 0x92E4, /* 0xA0 */ + 0x9ECD, 0x9F20, 0x5915, 0x596D, 0x5E2D, 0x60DC, 0x6614, 0x6673, /* 0xA0 */ + 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, 0x78A9, 0x84C6, 0x91CB, /* 0xB0 */ + 0x932B, 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, 0x5BA3, 0x6247, /* 0xB0 */ + 0x657E, 0x65CB, 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487, 0x74BF, /* 0xC0 */ + 0x766C, 0x79AA, 0x7DDA, 0x7E55, 0x7FA8, 0x817A, 0x81B3, 0x8239, /* 0xC0 */ + 0x861A, 0x87EC, 0x8A75, 0x8DE3, 0x9078, 0x9291, 0x9425, 0x994D, /* 0xD0 */ + 0x9BAE, 0x5368, 0x5C51, 0x6954, 0x6CC4, 0x6D29, 0x6E2B, 0x820C, /* 0xD0 */ + 0x859B, 0x893B, 0x8A2D, 0x8AAA, 0x96EA, 0x9F67, 0x5261, 0x66B9, /* 0xE0 */ + 0x6BB2, 0x7E96, 0x87FE, 0x8D0D, 0x9583, 0x965D, 0x651D, 0x6D89, /* 0xE0 */ + 0x71EE, 0xF96E, 0x57CE, 0x59D3, 0x5BAC, 0x6027, 0x60FA, 0x6210, /* 0xF0 */ + 0x661F, 0x665F, 0x7329, 0x73F9, 0x76DB, 0x7701, 0x7B6C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8056, 0x8072, 0x8165, 0x8AA0, 0x9192, 0x4E16, 0x52E2, /* 0xA0 */ + 0x6B72, 0x6D17, 0x7A05, 0x7B39, 0x7D30, 0xF96F, 0x8CB0, 0x53EC, /* 0xA0 */ + 0x562F, 0x5851, 0x5BB5, 0x5C0F, 0x5C11, 0x5DE2, 0x6240, 0x6383, /* 0xB0 */ + 0x6414, 0x662D, 0x68B3, 0x6CBC, 0x6D88, 0x6EAF, 0x701F, 0x70A4, /* 0xB0 */ + 0x71D2, 0x7526, 0x758F, 0x758E, 0x7619, 0x7B11, 0x7BE0, 0x7C2B, /* 0xC0 */ + 0x7D20, 0x7D39, 0x852C, 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, /* 0xC0 */ + 0x90B5, 0x92B7, 0x97F6, 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, /* 0xD0 */ + 0x7C9F, 0x7E8C, 0x8B16, 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, /* 0xD0 */ + 0x84C0, 0x905C, 0x98E1, 0x7387, 0x5B8B, 0x609A, 0x677E, 0x6DDE, /* 0xE0 */ + 0x8A1F, 0x8AA6, 0x9001, 0x980C, 0x5237, 0xF970, 0x7051, 0x788E, /* 0xE0 */ + 0x9396, 0x8870, 0x91D7, 0x4FEE, 0x53D7, 0x55FD, 0x56DA, 0x5782, /* 0xF0 */ + 0x58FD, 0x5AC2, 0x5B88, 0x5CAB, 0x5CC0, 0x5E25, 0x6101 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x620D, 0x624B, 0x6388, 0x641C, 0x6536, 0x6578, 0x6A39, /* 0xA0 */ + 0x6B8A, 0x6C34, 0x6D19, 0x6F31, 0x71E7, 0x72E9, 0x7378, 0x7407, /* 0xA0 */ + 0x74B2, 0x7626, 0x7761, 0x79C0, 0x7A57, 0x7AEA, 0x7CB9, 0x7D8F, /* 0xB0 */ + 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331, 0x8490, 0x84DA, 0x85EA, /* 0xB0 */ + 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083, 0x916C, 0x9296, /* 0xC0 */ + 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700, 0x9808, 0x9996, /* 0xC0 */ + 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70, 0x5BBF, 0x6DD1, /* 0xD0 */ + 0x6F5A, 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD, 0x5DE1, 0x5F87, /* 0xD0 */ + 0x5FAA, 0x6042, 0x65EC, 0x6812, 0x696F, 0x6A53, 0x6B89, 0x6D35, /* 0xE0 */ + 0x6DF3, 0x73E3, 0x76FE, 0x77AC, 0x7B4D, 0x7D14, 0x8123, 0x821C, /* 0xE0 */ + 0x8340, 0x84F4, 0x8563, 0x8A62, 0x8AC4, 0x9187, 0x931E, 0x9806, /* 0xF0 */ + 0x99B4, 0x620C, 0x8853, 0x8FF0, 0x9265, 0x5D07, 0x5D27 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5D69, 0x745F, 0x819D, 0x8768, 0x6FD5, 0x62FE, 0x7FD2, /* 0xA0 */ + 0x8936, 0x8972, 0x4E1E, 0x4E58, 0x50E7, 0x52DD, 0x5347, 0x627F, /* 0xA0 */ + 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, 0x5319, 0x5636, 0x59CB, /* 0xB0 */ + 0x5AA4, 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, 0x6043, 0x65BD, /* 0xB0 */ + 0x662F, 0x6642, 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, 0x7FC5, /* 0xC0 */ + 0x8494, 0x84CD, 0x8996, 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A, /* 0xC0 */ + 0x57F4, 0x5BD4, 0x5F0F, 0x606F, 0x62ED, 0x690D, 0x6B96, 0x6E5C, /* 0xD0 */ + 0x7184, 0x7BD2, 0x8755, 0x8B58, 0x8EFE, 0x98DF, 0x98FE, 0x4F38, /* 0xD0 */ + 0x4F81, 0x4FE1, 0x547B, 0x5A20, 0x5BB8, 0x613C, 0x65B0, 0x6668, /* 0xE0 */ + 0x71FC, 0x7533, 0x795E, 0x7D33, 0x814E, 0x81E3, 0x8398, 0x85AA, /* 0xE0 */ + 0x85CE, 0x8703, 0x8A0A, 0x8EAB, 0x8F9B, 0xF971, 0x8FC5, 0x5931, /* 0xF0 */ + 0x5BA4, 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, 0x5FC3, 0x6C81 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF972, 0x6DF1, 0x700B, 0x751A, 0x82AF, 0x8AF6, 0x4EC0, /* 0xA0 */ + 0x5341, 0xF973, 0x96D9, 0x6C0F, 0x4E9E, 0x4FC4, 0x5152, 0x555E, /* 0xA0 */ + 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD, 0x83AA, 0x86FE, 0x8859, /* 0xB0 */ + 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09, 0x9D5D, 0x580A, 0x5CB3, /* 0xB0 */ + 0x5DBD, 0x5E44, 0x60E1, 0x6115, 0x63E1, 0x6A02, 0x6E25, 0x9102, /* 0xC0 */ + 0x9354, 0x984E, 0x9C10, 0x9F77, 0x5B89, 0x5CB8, 0x6309, 0x664F, /* 0xC0 */ + 0x6848, 0x773C, 0x96C1, 0x978D, 0x9854, 0x9B9F, 0x65A1, 0x8B01, /* 0xD0 */ + 0x8ECB, 0x95BC, 0x5535, 0x5CA9, 0x5DD6, 0x5EB5, 0x6697, 0x764C, /* 0xD0 */ + 0x83F4, 0x95C7, 0x58D3, 0x62BC, 0x72CE, 0x9D28, 0x4EF0, 0x592E, /* 0xE0 */ + 0x600F, 0x663B, 0x6B83, 0x79E7, 0x9D26, 0x5393, 0x54C0, 0x57C3, /* 0xE0 */ + 0x5D16, 0x611B, 0x66D6, 0x6DAF, 0x788D, 0x827E, 0x9698, 0x9744, /* 0xF0 */ + 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A, 0x814B, 0x984D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6AFB, 0x7F4C, 0x9DAF, 0x9E1A, 0x4E5F, 0x503B, 0x51B6, /* 0xA0 */ + 0x591C, 0x60F9, 0x63F6, 0x6930, 0x723A, 0x8036, 0xF974, 0x91CE, /* 0xA0 */ + 0x5F31, 0xF975, 0xF976, 0x7D04, 0x82E5, 0x846F, 0x84BB, 0x85E5, /* 0xB0 */ + 0x8E8D, 0xF977, 0x4F6F, 0xF978, 0xF979, 0x58E4, 0x5B43, 0x6059, /* 0xB0 */ + 0x63DA, 0x6518, 0x656D, 0x6698, 0xF97A, 0x694A, 0x6A23, 0x6D0B, /* 0xC0 */ + 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3, 0x7A70, 0xF97B, 0x7F8A, /* 0xC0 */ + 0xF97C, 0x8944, 0xF97D, 0x8B93, 0x91C0, 0x967D, 0xF97E, 0x990A, /* 0xD0 */ + 0x5704, 0x5FA1, 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, /* 0xD0 */ + 0x9B5A, 0x9F6C, 0x5104, 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, /* 0xE0 */ + 0x5830, 0x5F66, 0x7109, 0x8A00, 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, /* 0xE0 */ + 0x513C, 0x56B4, 0x5944, 0x63A9, 0x6DF9, 0x5DAA, 0x696D, 0x5186, /* 0xF0 */ + 0x4E88, 0x4F59, 0xF97F, 0xF980, 0xF981, 0x5982, 0xF982 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF983, 0x6B5F, 0x6C5D, 0xF984, 0x74B5, 0x7916, 0xF985, /* 0xA0 */ + 0x8207, 0x8245, 0x8339, 0x8F3F, 0x8F5D, 0xF986, 0x9918, 0xF987, /* 0xA0 */ + 0xF988, 0xF989, 0x4EA6, 0xF98A, 0x57DF, 0x5F79, 0x6613, 0xF98B, /* 0xB0 */ + 0xF98C, 0x75AB, 0x7E79, 0x8B6F, 0xF98D, 0x9006, 0x9A5B, 0x56A5, /* 0xB0 */ + 0x5827, 0x59F8, 0x5A1F, 0x5BB4, 0xF98E, 0x5EF6, 0xF98F, 0xF990, /* 0xC0 */ + 0x6350, 0x633B, 0xF991, 0x693D, 0x6C87, 0x6CBF, 0x6D8E, 0x6D93, /* 0xC0 */ + 0x6DF5, 0x6F14, 0xF992, 0x70DF, 0x7136, 0x7159, 0xF993, 0x71C3, /* 0xD0 */ + 0x71D5, 0xF994, 0x784F, 0x786F, 0xF995, 0x7B75, 0x7DE3, 0xF996, /* 0xD0 */ + 0x7E2F, 0xF997, 0x884D, 0x8EDF, 0xF998, 0xF999, 0xF99A, 0x925B, /* 0xE0 */ + 0xF99B, 0x9CF6, 0xF99C, 0xF99D, 0xF99E, 0x6085, 0x6D85, 0xF99F, /* 0xE0 */ + 0x71B1, 0xF9A0, 0xF9A1, 0x95B1, 0x53AD, 0xF9A2, 0xF9A3, 0xF9A4, /* 0xF0 */ + 0x67D3, 0xF9A5, 0x708E, 0x7130, 0x7430, 0x8276, 0x82D2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF9A6, 0x95BB, 0x9AE5, 0x9E7D, 0x66C4, 0xF9A7, 0x71C1, /* 0xA0 */ + 0x8449, 0xF9A8, 0xF9A9, 0x584B, 0xF9AA, 0xF9AB, 0x5DB8, 0x5F71, /* 0xA0 */ + 0xF9AC, 0x6620, 0x668E, 0x6979, 0x69AE, 0x6C38, 0x6CF3, 0x6E36, /* 0xB0 */ + 0x6F41, 0x6FDA, 0x701B, 0x702F, 0x7150, 0x71DF, 0x7370, 0xF9AD, /* 0xB0 */ + 0x745B, 0xF9AE, 0x74D4, 0x76C8, 0x7A4E, 0x7E93, 0xF9AF, 0xF9B0, /* 0xC0 */ + 0x82F1, 0x8A60, 0x8FCE, 0xF9B1, 0x9348, 0xF9B2, 0x9719, 0xF9B3, /* 0xC0 */ + 0xF9B4, 0x4E42, 0x502A, 0xF9B5, 0x5208, 0x53E1, 0x66F3, 0x6C6D, /* 0xD0 */ + 0x6FCA, 0x730A, 0x777F, 0x7A62, 0x82AE, 0x85DD, 0x8602, 0xF9B6, /* 0xD0 */ + 0x88D4, 0x8A63, 0x8B7D, 0x8C6B, 0xF9B7, 0x92B3, 0xF9B8, 0x9713, /* 0xE0 */ + 0x9810, 0x4E94, 0x4F0D, 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433, /* 0xE0 */ + 0x55DA, 0x5862, 0x58BA, 0x5967, 0x5A1B, 0x5BE4, 0x609F, 0xF9B9, /* 0xF0 */ + 0x61CA, 0x6556, 0x65FF, 0x6664, 0x68A7, 0x6C5A, 0x6FB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x70CF, 0x71AC, 0x7352, 0x7B7D, 0x8708, 0x8AA4, 0x9C32, /* 0xA0 */ + 0x9F07, 0x5C4B, 0x6C83, 0x7344, 0x7389, 0x923A, 0x6EAB, 0x7465, /* 0xA0 */ + 0x761F, 0x7A69, 0x7E15, 0x860A, 0x5140, 0x58C5, 0x64C1, 0x74EE, /* 0xB0 */ + 0x7515, 0x7670, 0x7FC1, 0x9095, 0x96CD, 0x9954, 0x6E26, 0x74E6, /* 0xB0 */ + 0x7AA9, 0x7AAA, 0x81E5, 0x86D9, 0x8778, 0x8A1B, 0x5A49, 0x5B8C, /* 0xC0 */ + 0x5B9B, 0x68A1, 0x6900, 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, /* 0xC0 */ + 0x7DE9, 0x7FEB, 0x8118, 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, /* 0xD0 */ + 0x66F0, 0x5F80, 0x65FA, 0x6789, 0x6C6A, 0x738B, 0x502D, 0x5A03, /* 0xD0 */ + 0x6B6A, 0x77EE, 0x5916, 0x5D6C, 0x5DCD, 0x7325, 0x754F, 0xF9BA, /* 0xE0 */ + 0xF9BB, 0x50E5, 0x51F9, 0x582F, 0x592D, 0x5996, 0x59DA, 0x5BE5, /* 0xE0 */ + 0xF9BC, 0xF9BD, 0x5DA2, 0x62D7, 0x6416, 0x6493, 0x64FE, 0xF9BE, /* 0xF0 */ + 0x66DC, 0xF9BF, 0x6A48, 0xF9C0, 0x71FF, 0x7464, 0xF9C1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_E9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7A88, 0x7AAF, 0x7E47, 0x7E5E, 0x8000, 0x8170, 0xF9C2, /* 0xA0 */ + 0x87EF, 0x8981, 0x8B20, 0x9059, 0xF9C3, 0x9080, 0x9952, 0x617E, /* 0xA0 */ + 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1, 0x4FD1, 0x50AD, 0x5197, /* 0xB0 */ + 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142, 0x6995, 0x6D8C, /* 0xB0 */ + 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073, 0x8338, /* 0xC0 */ + 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0xF9C4, 0x4E8E, 0x4F51, 0x5076, /* 0xC0 */ + 0x512A, 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A, /* 0xD0 */ + 0x6182, 0x65F4, 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991, /* 0xD0 */ + 0x79B9, 0x7D06, 0x7FBD, 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047, /* 0xE0 */ + 0x90F5, 0x91EA, 0x9685, 0x96E8, 0x96E9, 0x52D6, 0x5F67, 0x65ED, /* 0xE0 */ + 0x6631, 0x682F, 0x715C, 0x7A36, 0x90C1, 0x980A, 0x4E91, 0xF9C5, /* 0xF0 */ + 0x6A52, 0x6B9E, 0x6F90, 0x7189, 0x8018, 0x82B8, 0x8553 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_EA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x904B, 0x9695, 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, /* 0xA0 */ + 0x718A, 0x96C4, 0x5143, 0x539F, 0x54E1, 0x5713, 0x5712, 0x57A3, /* 0xA0 */ + 0x5A9B, 0x5AC4, 0x5BC3, 0x6028, 0x613F, 0x63F4, 0x6C85, 0x6D39, /* 0xB0 */ + 0x6E72, 0x6E90, 0x7230, 0x733F, 0x7457, 0x82D1, 0x8881, 0x8F45, /* 0xB0 */ + 0x9060, 0xF9C6, 0x9662, 0x9858, 0x9D1B, 0x6708, 0x8D8A, 0x925E, /* 0xC0 */ + 0x4F4D, 0x5049, 0x50DE, 0x5371, 0x570D, 0x59D4, 0x5A01, 0x5C09, /* 0xC0 */ + 0x6170, 0x6690, 0x6E2D, 0x7232, 0x744B, 0x7DEF, 0x80C3, 0x840E, /* 0xD0 */ + 0x8466, 0x853F, 0x875F, 0x885B, 0x8918, 0x8B02, 0x9055, 0x97CB, /* 0xD0 */ + 0x9B4F, 0x4E73, 0x4F91, 0x5112, 0x516A, 0xF9C7, 0x552F, 0x55A9, /* 0xE0 */ + 0x5B7A, 0x5BA5, 0x5E7C, 0x5E7D, 0x5EBE, 0x60A0, 0x60DF, 0x6108, /* 0xE0 */ + 0x6109, 0x63C4, 0x6538, 0x6709, 0xF9C8, 0x67D4, 0x67DA, 0xF9C9, /* 0xF0 */ + 0x6961, 0x6962, 0x6CB9, 0x6D27, 0xF9CA, 0x6E38, 0xF9CB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_EB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6FE1, 0x7336, 0x7337, 0xF9CC, 0x745C, 0x7531, 0xF9CD, /* 0xA0 */ + 0x7652, 0xF9CE, 0xF9CF, 0x7DAD, 0x81FE, 0x8438, 0x88D5, 0x8A98, /* 0xA0 */ + 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, 0x903E, 0x907A, 0x9149, /* 0xB0 */ + 0x91C9, 0x936E, 0xF9D0, 0xF9D1, 0x5809, 0xF9D2, 0x6BD3, 0x8089, /* 0xB0 */ + 0x80B2, 0xF9D3, 0xF9D4, 0x5141, 0x596B, 0x5C39, 0xF9D5, 0xF9D6, /* 0xC0 */ + 0x6F64, 0x73A7, 0x80E4, 0x8D07, 0xF9D7, 0x9217, 0x958F, 0xF9D8, /* 0xC0 */ + 0xF9D9, 0xF9DA, 0xF9DB, 0x807F, 0x620E, 0x701C, 0x7D68, 0x878D, /* 0xD0 */ + 0xF9DC, 0x57A0, 0x6069, 0x6147, 0x6BB7, 0x8ABE, 0x9280, 0x96B1, /* 0xD0 */ + 0x4E59, 0x541F, 0x6DEB, 0x852D, 0x9670, 0x97F3, 0x98EE, 0x63D6, /* 0xE0 */ + 0x6CE3, 0x9091, 0x51DD, 0x61C9, 0x81BA, 0x9DF9, 0x4F9D, 0x501A, /* 0xE0 */ + 0x5100, 0x5B9C, 0x610F, 0x61FF, 0x64EC, 0x6905, 0x6BC5, 0x7591, /* 0xF0 */ + 0x77E3, 0x7FA9, 0x8264, 0x858F, 0x87FB, 0x8863, 0x8ABC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_EC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B70, 0x91AB, 0x4E8C, 0x4EE5, 0x4F0A, 0xF9DD, 0xF9DE, /* 0xA0 */ + 0x5937, 0x59E8, 0xF9DF, 0x5DF2, 0x5F1B, 0x5F5B, 0x6021, 0xF9E0, /* 0xA0 */ + 0xF9E1, 0xF9E2, 0xF9E3, 0x723E, 0x73E5, 0xF9E4, 0x7570, 0x75CD, /* 0xB0 */ + 0xF9E5, 0x79FB, 0xF9E6, 0x800C, 0x8033, 0x8084, 0x82E1, 0x8351, /* 0xB0 */ + 0xF9E7, 0xF9E8, 0x8CBD, 0x8CB3, 0x9087, 0xF9E9, 0xF9EA, 0x98F4, /* 0xC0 */ + 0x990C, 0xF9EB, 0xF9EC, 0x7037, 0x76CA, 0x7FCA, 0x7FCC, 0x7FFC, /* 0xC0 */ + 0x8B1A, 0x4EBA, 0x4EC1, 0x5203, 0x5370, 0xF9ED, 0x54BD, 0x56E0, /* 0xD0 */ + 0x59FB, 0x5BC5, 0x5F15, 0x5FCD, 0x6E6E, 0xF9EE, 0xF9EF, 0x7D6A, /* 0xD0 */ + 0x8335, 0xF9F0, 0x8693, 0x8A8D, 0xF9F1, 0x976D, 0x9777, 0xF9F2, /* 0xE0 */ + 0xF9F3, 0x4E00, 0x4F5A, 0x4F7E, 0x58F9, 0x65E5, 0x6EA2, 0x9038, /* 0xE0 */ + 0x93B0, 0x99B9, 0x4EFB, 0x58EC, 0x598A, 0x59D9, 0x6041, 0xF9F4, /* 0xF0 */ + 0xF9F5, 0x7A14, 0xF9F6, 0x834F, 0x8CC3, 0x5165, 0x5344 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_ED[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF9F7, 0xF9F8, 0xF9F9, 0x4ECD, 0x5269, 0x5B55, 0x82BF, /* 0xA0 */ + 0x4ED4, 0x523A, 0x54A8, 0x59C9, 0x59FF, 0x5B50, 0x5B57, 0x5B5C, /* 0xA0 */ + 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E, 0x7386, 0x74F7, 0x75B5, /* 0xB0 */ + 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328, 0x8517, 0x85C9, 0x8AEE, /* 0xB0 */ + 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC, 0x65AB, 0x6628, 0x707C, /* 0xC0 */ + 0x70B8, 0x7235, 0x7DBD, 0x828D, 0x914C, 0x96C0, 0x9D72, 0x5B71, /* 0xC0 */ + 0x68E7, 0x6B98, 0x6F7A, 0x76DE, 0x5C91, 0x66AB, 0x6F5B, 0x7BB4, /* 0xD0 */ + 0x7C2A, 0x8836, 0x96DC, 0x4E08, 0x4ED7, 0x5320, 0x5834, 0x58BB, /* 0xD0 */ + 0x58EF, 0x596C, 0x5C07, 0x5E33, 0x5E84, 0x5F35, 0x638C, 0x66B2, /* 0xE0 */ + 0x6756, 0x6A1F, 0x6AA3, 0x6B0C, 0x6F3F, 0x7246, 0xF9FA, 0x7350, /* 0xE0 */ + 0x748B, 0x7AE0, 0x7CA7, 0x8178, 0x81DF, 0x81E7, 0x838A, 0x846C, /* 0xF0 */ + 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, 0x91AC, 0x9577 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_EE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x969C, 0x518D, 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750, /* 0xA0 */ + 0x683D, 0x6893, 0x6E3D, 0x6ED3, 0x707D, 0x7E21, 0x88C1, 0x8CA1, /* 0xA0 */ + 0x8F09, 0x9F4B, 0x9F4E, 0x722D, 0x7B8F, 0x8ACD, 0x931A, 0x4F47, /* 0xB0 */ + 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95, 0x62B5, 0x6775, 0x696E, /* 0xB0 */ + 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD, 0x7BB8, 0x7D35, /* 0xC0 */ + 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87, 0x9019, /* 0xC0 */ + 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458, /* 0xD0 */ + 0x6575, 0x6EF4, 0x72C4, 0xF9FB, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, /* 0xD0 */ + 0x7E3E, 0x7FDF, 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, /* 0xE0 */ + 0x8FEA, 0x8FF9, 0x9069, 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0x5168, /* 0xE0 */ + 0x5178, 0x524D, 0x526A, 0x5861, 0x587C, 0x5960, 0x5C08, 0x5C55, /* 0xF0 */ + 0x5EDB, 0x609B, 0x6230, 0x6813, 0x6BBF, 0x6C08, 0x6FB1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_EF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x714E, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C, /* 0xA0 */ + 0x7B8B, 0x7BAD, 0x7BC6, 0x7E8F, 0x8A6E, 0x8F3E, 0x8F49, 0x923F, /* 0xA0 */ + 0x9293, 0x9322, 0x942B, 0x96FB, 0x985A, 0x986B, 0x991E, 0x5207, /* 0xB0 */ + 0x622A, 0x6298, 0x6D59, 0x7664, 0x7ACA, 0x7BC0, 0x7D76, 0x5360, /* 0xB0 */ + 0x5CBE, 0x5E97, 0x6F38, 0x70B9, 0x7C98, 0x9711, 0x9B8E, 0x9EDE, /* 0xC0 */ + 0x63A5, 0x647A, 0x8776, 0x4E01, 0x4E95, 0x4EAD, 0x505C, 0x5075, /* 0xC0 */ + 0x5448, 0x59C3, 0x5B9A, 0x5E40, 0x5EAD, 0x5EF7, 0x5F81, 0x60C5, /* 0xD0 */ + 0x633A, 0x653F, 0x6574, 0x65CC, 0x6676, 0x6678, 0x67FE, 0x6968, /* 0xD0 */ + 0x6A89, 0x6B63, 0x6C40, 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E, 0x701E, /* 0xE0 */ + 0x70A1, 0x738E, 0x73FD, 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B, /* 0xE0 */ + 0x7A7D, 0x7CBE, 0x7D8E, 0x8247, 0x8A02, 0x8AEA, 0x8C9E, 0x912D, /* 0xF0 */ + 0x914A, 0x91D8, 0x9266, 0x92CC, 0x9320, 0x9706, 0x9756 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x975C, 0x9802, 0x9F0E, 0x5236, 0x5291, 0x557C, 0x5824, /* 0xA0 */ + 0x5E1D, 0x5F1F, 0x608C, 0x63D0, 0x68AF, 0x6FDF, 0x796D, 0x7B2C, /* 0xA0 */ + 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44, 0x918D, 0x9664, 0x969B, /* 0xB0 */ + 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146, 0x51CB, 0x52A9, 0x5632, /* 0xB0 */ + 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9, 0x6641, 0x66FA, 0x66F9, /* 0xC0 */ + 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15, 0x6F6E, 0x7167, 0x71E5, /* 0xC0 */ + 0x722A, 0x74AA, 0x773A, 0x7956, 0x795A, 0x79DF, 0x7A20, 0x7A95, /* 0xD0 */ + 0x7C97, 0x7CDF, 0x7D44, 0x7E70, 0x8087, 0x85FB, 0x86A4, 0x8A54, /* 0xD0 */ + 0x8ABF, 0x8D99, 0x8E81, 0x9020, 0x906D, 0x91E3, 0x963B, 0x96D5, /* 0xE0 */ + 0x9CE5, 0x65CF, 0x7C07, 0x8DB3, 0x93C3, 0x5B58, 0x5C0A, 0x5352, /* 0xE0 */ + 0x62D9, 0x731D, 0x5027, 0x5B97, 0x5F9E, 0x60B0, 0x616B, 0x68D5, /* 0xF0 */ + 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C, 0x7E31, 0x816B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E2A, 0x8E35, 0x937E, 0x9418, 0x4F50, 0x5750, 0x5DE6, /* 0xA0 */ + 0x5EA7, 0x632B, 0x7F6A, 0x4E3B, 0x4F4F, 0x4F8F, 0x505A, 0x59DD, /* 0xA0 */ + 0x80C4, 0x546A, 0x5468, 0x55FE, 0x594F, 0x5B99, 0x5DDE, 0x5EDA, /* 0xB0 */ + 0x665D, 0x6731, 0x67F1, 0x682A, 0x6CE8, 0x6D32, 0x6E4A, 0x6F8D, /* 0xB0 */ + 0x70B7, 0x73E0, 0x7587, 0x7C4C, 0x7D02, 0x7D2C, 0x7DA2, 0x821F, /* 0xC0 */ + 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A, 0x8F33, 0x9031, 0x914E, /* 0xC0 */ + 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA, 0x5101, 0x51C6, /* 0xD0 */ + 0x57C8, 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96, 0x6FEC, /* 0xD0 */ + 0x710C, 0x756F, 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB, 0x99FF, /* 0xE0 */ + 0x8301, 0x4E2D, 0x4EF2, 0x8846, 0x91CD, 0x537D, 0x6ADB, 0x696B, /* 0xE0 */ + 0x6C41, 0x847A, 0x589E, 0x618E, 0x66FE, 0x62EF, 0x70DD, 0x7511, /* 0xF0 */ + 0x75C7, 0x7E52, 0x84B8, 0x8B49, 0x8D08, 0x4E4B, 0x53EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54AB, 0x5730, 0x5740, 0x5FD7, 0x6301, 0x6307, 0x646F, /* 0xA0 */ + 0x652F, 0x65E8, 0x667A, 0x679D, 0x67B3, 0x6B62, 0x6C60, 0x6C9A, /* 0xA0 */ + 0x6F2C, 0x77E5, 0x7825, 0x7949, 0x7957, 0x7D19, 0x80A2, 0x8102, /* 0xB0 */ + 0x81F3, 0x829D, 0x82B7, 0x8718, 0x8A8C, 0xF9FC, 0x8D04, 0x8DBE, /* 0xB0 */ + 0x9072, 0x76F4, 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, 0x55D4, /* 0xC0 */ + 0x5875, 0x632F, 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, /* 0xC0 */ + 0x6D25, 0x6EB1, 0x73CD, 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, /* 0xD0 */ + 0x771E, 0x778B, 0x79E6, 0x7E09, 0x7E1D, 0x81FB, 0x852F, 0x8897, /* 0xD0 */ + 0x8A3A, 0x8CD1, 0x8EEB, 0x8FB0, 0x9032, 0x93AD, 0x9663, 0x9673, /* 0xE0 */ + 0x9707, 0x4F84, 0x53F1, 0x59EA, 0x5AC9, 0x5E19, 0x684E, 0x74C6, /* 0xE0 */ + 0x75BE, 0x79E9, 0x7A92, 0x81A3, 0x86ED, 0x8CEA, 0x8DCC, 0x8FED, /* 0xF0 */ + 0x659F, 0x6715, 0xF9FD, 0x57F7, 0x6F57, 0x7DDD, 0x8F2F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x93F6, 0x96C6, 0x5FB5, 0x61F2, 0x6F84, 0x4E14, 0x4F98, /* 0xA0 */ + 0x501F, 0x53C9, 0x55DF, 0x5D6F, 0x5DEE, 0x6B21, 0x6B64, 0x78CB, /* 0xA0 */ + 0x7B9A, 0xF9FE, 0x8E49, 0x8ECA, 0x906E, 0x6349, 0x643E, 0x7740, /* 0xB0 */ + 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF, 0x71E6, 0x74A8, /* 0xB0 */ + 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98, 0x8B9A, 0x8D0A, /* 0xC0 */ + 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6, 0x672D, 0x7D2E, /* 0xC0 */ + 0x50ED, 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA, 0x65AC, 0x7AD9, /* 0xD0 */ + 0x8B92, 0x8B96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5A3C, 0x5EE0, /* 0xD0 */ + 0x5F70, 0x6134, 0x655E, 0x660C, 0x6636, 0x66A2, 0x69CD, 0x6EC4, /* 0xE0 */ + 0x6F32, 0x7316, 0x7621, 0x7A93, 0x8139, 0x8259, 0x83D6, 0x84BC, /* 0xE0 */ + 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, 0x5F69, 0x63A1, 0x7826, 0x7DB5, /* 0xF0 */ + 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, 0x67F5, 0x7B56 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8CAC, 0x51C4, 0x59BB, 0x60BD, 0x8655, 0x501C, 0xF9FF, /* 0xA0 */ + 0x5254, 0x5C3A, 0x617D, 0x621A, 0x62D3, 0x64F2, 0x65A5, 0x6ECC, /* 0xA0 */ + 0x7620, 0x810A, 0x8E60, 0x965F, 0x96BB, 0x4EDF, 0x5343, 0x5598, /* 0xB0 */ + 0x5929, 0x5DDD, 0x64C5, 0x6CC9, 0x6DFA, 0x7394, 0x7A7F, 0x821B, /* 0xB0 */ + 0x85A6, 0x8CE4, 0x8E10, 0x9077, 0x91E7, 0x95E1, 0x9621, 0x97C6, /* 0xC0 */ + 0x51F8, 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88, 0x7DB4, 0x8F1F, /* 0xC0 */ + 0x8F4D, 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B, 0x77BB, /* 0xD0 */ + 0x7C3D, 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377, /* 0xD0 */ + 0x7252, 0x758A, 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, /* 0xE0 */ + 0x6DF8, 0x807D, 0x83C1, 0x8ACB, 0x9751, 0x9BD6, 0xFA00, 0x5243, /* 0xE0 */ + 0x66FF, 0x6D95, 0x6EEF, 0x7DE0, 0x8AE6, 0x902E, 0x905E, 0x9AD4, /* 0xF0 */ + 0x521D, 0x527F, 0x54E8, 0x6194, 0x6284, 0x62DB, 0x68A2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6912, 0x695A, 0x6A35, 0x7092, 0x7126, 0x785D, 0x7901, /* 0xA0 */ + 0x790E, 0x79D2, 0x7A0D, 0x8096, 0x8278, 0x82D5, 0x8349, 0x8549, /* 0xA0 */ + 0x8C82, 0x8D85, 0x9162, 0x918B, 0x91AE, 0x4FC3, 0x56D1, 0x71ED, /* 0xB0 */ + 0x77D7, 0x8700, 0x89F8, 0x5BF8, 0x5FD6, 0x6751, 0x90A8, 0x53E2, /* 0xB0 */ + 0x585A, 0x5BF5, 0x60A4, 0x6181, 0x6460, 0x7E3D, 0x8070, 0x8525, /* 0xC0 */ + 0x9283, 0x64AE, 0x50AC, 0x5D14, 0x6700, 0x589C, 0x62BD, 0x63A8, /* 0xC0 */ + 0x690E, 0x6978, 0x6A1E, 0x6E6B, 0x76BA, 0x79CB, 0x82BB, 0x8429, /* 0xD0 */ + 0x8ACF, 0x8DA8, 0x8FFD, 0x9112, 0x914B, 0x919C, 0x9310, 0x9318, /* 0xD0 */ + 0x939A, 0x96DB, 0x9A36, 0x9C0D, 0x4E11, 0x755C, 0x795D, 0x7AFA, /* 0xE0 */ + 0x7B51, 0x7BC9, 0x7E2E, 0x84C4, 0x8E59, 0x8E74, 0x8EF8, 0x9010, /* 0xE0 */ + 0x6625, 0x693F, 0x7443, 0x51FA, 0x672E, 0x9EDC, 0x5145, 0x5FE0, /* 0xF0 */ + 0x6C96, 0x87F2, 0x885D, 0x8877, 0x60B4, 0x81B5, 0x8403 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8D05, 0x53D6, 0x5439, 0x5634, 0x5A36, 0x5C31, 0x708A, /* 0xA0 */ + 0x7FE0, 0x805A, 0x8106, 0x81ED, 0x8DA3, 0x9189, 0x9A5F, 0x9DF2, /* 0xA0 */ + 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C, 0x5C64, 0x4F88, 0x5024, /* 0xB0 */ + 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB, 0x6DC4, 0x71BE, /* 0xB0 */ + 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7, 0x7DFB, 0x7F6E, /* 0xC0 */ + 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52, 0x5247, 0x52C5, /* 0xC0 */ + 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5, 0x5BE2, 0x6795, /* 0xD0 */ + 0x6C88, 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C, 0x87C4, 0x79E4, /* 0xD0 */ + 0x7A31, 0x5FEB, 0x4ED6, 0x54A4, 0x553E, 0x58AE, 0x59A5, 0x60F0, /* 0xE0 */ + 0x6253, 0x62D6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99B1, 0x99DD, /* 0xE0 */ + 0x502C, 0x5353, 0x5544, 0x577C, 0xFA01, 0x6258, 0xFA02, 0x64E2, /* 0xF0 */ + 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, 0x7438, 0x8A17 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9438, 0x5451, 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, /* 0xA0 */ + 0x7058, 0x70AD, 0x7DBB, 0x8A95, 0x596A, 0x812B, 0x63A2, 0x7708, /* 0xA0 */ + 0x803D, 0x8CAA, 0x5854, 0x642D, 0x69BB, 0x5B95, 0x5E11, 0x6E6F, /* 0xB0 */ + 0xFA03, 0x8569, 0x514C, 0x53F0, 0x592A, 0x6020, 0x614B, 0x6B86, /* 0xB0 */ + 0x6C70, 0x6CF0, 0x7B1E, 0x80CE, 0x82D4, 0x8DC6, 0x90B0, 0x98B1, /* 0xC0 */ + 0xFA04, 0x64C7, 0x6FA4, 0x6491, 0x6504, 0x514E, 0x5410, 0x571F, /* 0xC0 */ + 0x8A0E, 0x615F, 0x6876, 0xFA05, 0x75DB, 0x7B52, 0x7D71, 0x901A, /* 0xD0 */ + 0x5806, 0x69CC, 0x817F, 0x892A, 0x9000, 0x9839, 0x5078, 0x5957, /* 0xD0 */ + 0x59AC, 0x6295, 0x900F, 0x9B2A, 0x615D, 0x7279, 0x95D6, 0x5761, /* 0xE0 */ + 0x5A46, 0x5DF4, 0x628A, 0x64AD, 0x64FA, 0x6777, 0x6CE2, 0x6D3E, /* 0xE0 */ + 0x722C, 0x7436, 0x7834, 0x7F77, 0x82AD, 0x8DDB, 0x9817, 0x5224, /* 0xF0 */ + 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9, 0x8FA6, 0x9211 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x962A, 0x516B, 0x53ED, 0x634C, 0x4F69, 0x5504, 0x6096, /* 0xA0 */ + 0x6557, 0x6C9B, 0x6D7F, 0x724C, 0x72FD, 0x7A17, 0x8987, 0x8C9D, /* 0xA0 */ + 0x5F6D, 0x6F8E, 0x70F9, 0x81A8, 0x610E, 0x4FBF, 0x504F, 0x6241, /* 0xB0 */ + 0x7247, 0x7BC7, 0x7DE8, 0x7FE9, 0x904D, 0x97AD, 0x9A19, 0x8CB6, /* 0xB0 */ + 0x576A, 0x5E73, 0x67B0, 0x840D, 0x8A55, 0x5420, 0x5B16, 0x5E63, /* 0xC0 */ + 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D, 0x9589, 0x965B, 0x4F48, /* 0xC0 */ + 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703, 0x5E03, 0x6016, /* 0xD0 */ + 0x629B, 0x62B1, 0x6355, 0xFA06, 0x6CE1, 0x6D66, 0x75B1, 0x7832, /* 0xD0 */ + 0x80DE, 0x812F, 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B, /* 0xE0 */ + 0x92EA, 0x98FD, 0x9B91, 0x5E45, 0x66B4, 0x66DD, 0x7011, 0x7206, /* 0xE0 */ + 0xFA07, 0x4FF5, 0x527D, 0x5F6A, 0x6153, 0x6753, 0x6A19, 0x6F02, /* 0xF0 */ + 0x74E2, 0x7968, 0x8868, 0x8C79, 0x98C7, 0x98C4, 0x9A43 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54C1, 0x7A1F, 0x6953, 0x8AF7, 0x8C4A, 0x98A8, 0x99AE, /* 0xA0 */ + 0x5F7C, 0x62AB, 0x75B2, 0x76AE, 0x88AB, 0x907F, 0x9642, 0x5339, /* 0xA0 */ + 0x5F3C, 0x5FC5, 0x6CCC, 0x73CC, 0x7562, 0x758B, 0x7B46, 0x82FE, /* 0xB0 */ + 0x999D, 0x4E4F, 0x903C, 0x4E0B, 0x4F55, 0x53A6, 0x590F, 0x5EC8, /* 0xB0 */ + 0x6630, 0x6CB3, 0x7455, 0x8377, 0x8766, 0x8CC0, 0x9050, 0x971E, /* 0xC0 */ + 0x9C15, 0x58D1, 0x5B78, 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, /* 0xC0 */ + 0x608D, 0x65F1, 0x6C57, 0x6F22, 0x6FA3, 0x701A, 0x7F55, 0x7FF0, /* 0xD0 */ + 0x9591, 0x9592, 0x9650, 0x97D3, 0x5272, 0x8F44, 0x51FD, 0x542B, /* 0xD0 */ + 0x54B8, 0x5563, 0x558A, 0x6ABB, 0x6DB5, 0x7DD8, 0x8266, 0x929C, /* 0xE0 */ + 0x9677, 0x9E79, 0x5408, 0x54C8, 0x76D2, 0x86E4, 0x95A4, 0x95D4, /* 0xE0 */ + 0x965C, 0x4EA2, 0x4F09, 0x59EE, 0x5AE6, 0x5DF7, 0x6052, 0x6297, /* 0xF0 */ + 0x676D, 0x6841, 0x6C86, 0x6E2F, 0x7F38, 0x809B, 0x822A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFA08, 0xFA09, 0x9805, 0x4EA5, 0x5055, 0x54B3, 0x5793, /* 0xA0 */ + 0x595A, 0x5B69, 0x5BB3, 0x61C8, 0x6977, 0x6D77, 0x7023, 0x87F9, /* 0xA0 */ + 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, 0x9AB8, 0x52BE, 0x6838, /* 0xB0 */ + 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, 0x5411, 0x56AE, /* 0xB0 */ + 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653, 0x589F, /* 0xC0 */ + 0x865B, 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47, 0x96AA, /* 0xC0 */ + 0x9A57, 0x5955, 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4, 0x5F26, /* 0xD0 */ + 0x61F8, 0x665B, 0x6CEB, 0x70AB, 0x7384, 0x73B9, 0x73FE, 0x7729, /* 0xD0 */ + 0x774D, 0x7D43, 0x7D62, 0x7E23, 0x8237, 0x8852, 0xFA0A, 0x8CE2, /* 0xE0 */ + 0x9249, 0x986F, 0x5B51, 0x7A74, 0x8840, 0x9801, 0x5ACC, 0x4FE0, /* 0xE0 */ + 0x5354, 0x593E, 0x5CFD, 0x633E, 0x6D79, 0x72F9, 0x8105, 0x8107, /* 0xF0 */ + 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, 0x5211, 0x578B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_FB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F62, 0x6CC2, 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, /* 0xA0 */ + 0x73E9, 0x7469, 0x834A, 0x87A2, 0x8861, 0x9008, 0x90A2, 0x93A3, /* 0xA0 */ + 0x99A8, 0x516E, 0x5F57, 0x60E0, 0x6167, 0x66B3, 0x8559, 0x8E4A, /* 0xB0 */ + 0x91AF, 0x978B, 0x4E4E, 0x4E92, 0x547C, 0x58D5, 0x58FA, 0x597D, /* 0xB0 */ + 0x5CB5, 0x5F27, 0x6236, 0x6248, 0x660A, 0x6667, 0x6BEB, 0x6D69, /* 0xC0 */ + 0x6DCF, 0x6E56, 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D, 0x72D0, /* 0xC0 */ + 0x7425, 0x745A, 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1, /* 0xD0 */ + 0x82A6, 0x846B, 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, /* 0xD0 */ + 0x93AC, 0x9800, 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, /* 0xE0 */ + 0x6DF7, 0x6E3E, 0x743F, 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, /* 0xE0 */ + 0x5F18, 0x6C5E, 0x6CD3, 0x6D2A, 0x70D8, 0x7D05, 0x8679, 0x8A0C, /* 0xF0 */ + 0x9D3B, 0x5316, 0x548C, 0x5B05, 0x6A3A, 0x706B, 0x7575 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_FC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x798D, 0x79BE, 0x82B1, 0x83EF, 0x8A71, 0x8B41, 0x8CA8, /* 0xA0 */ + 0x9774, 0xFA0B, 0x64F4, 0x652B, 0x78BA, 0x78BB, 0x7A6B, 0x4E38, /* 0xA0 */ + 0x559A, 0x5950, 0x5BA6, 0x5E7B, 0x60A3, 0x63DB, 0x6B61, 0x6665, /* 0xB0 */ + 0x6853, 0x6E19, 0x7165, 0x74B0, 0x7D08, 0x9084, 0x9A69, 0x9C25, /* 0xB0 */ + 0x6D3B, 0x6ED1, 0x733E, 0x8C41, 0x95CA, 0x51F0, 0x5E4C, 0x5FA8, /* 0xC0 */ + 0x604D, 0x60F6, 0x6130, 0x614C, 0x6643, 0x6644, 0x69A5, 0x6CC1, /* 0xC0 */ + 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C, 0x7687, 0x7BC1, 0x7C27, /* 0xD0 */ + 0x8352, 0x8757, 0x9051, 0x968D, 0x9EC3, 0x532F, 0x56DE, 0x5EFB, /* 0xD0 */ + 0x5F8A, 0x6062, 0x6094, 0x61F7, 0x6666, 0x6703, 0x6A9C, 0x6DEE, /* 0xE0 */ + 0x6FAE, 0x7070, 0x736A, 0x7E6A, 0x81BE, 0x8334, 0x86D4, 0x8AA8, /* 0xE0 */ + 0x8CC4, 0x5283, 0x7372, 0x5B96, 0x6A6B, 0x9404, 0x54EE, 0x5686, /* 0xF0 */ + 0x5B5D, 0x6548, 0x6585, 0x66C9, 0x689F, 0x6D8D, 0x6DC6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_KSC5601_FD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x723B, 0x80B4, 0x9175, 0x9A4D, 0x4FAF, 0x5019, 0x539A, /* 0xA0 */ + 0x540E, 0x543C, 0x5589, 0x55C5, 0x5E3F, 0x5F8C, 0x673D, 0x7166, /* 0xA0 */ + 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, 0x58CE, 0x7104, 0x718F, /* 0xB0 */ + 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, 0x6684, 0x714A, /* 0xB0 */ + 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE, 0x6689, /* 0xC0 */ + 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB, 0x7566, /* 0xC0 */ + 0x8667, 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308, 0x6D36, /* 0xD0 */ + 0x80F8, 0x9ED1, 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403, 0x5C79, /* 0xD0 */ + 0x7D07, 0x8A16, 0x6B20, 0x6B3D, 0x6B46, 0x5438, 0x6070, 0x6D3D, /* 0xE0 */ + 0x7FD5, 0x8208, 0x50D6, 0x51DE, 0x559C, 0x566B, 0x56CD, 0x59EC, /* 0xE0 */ + 0x5B09, 0x5E0C, 0x6199, 0x6198, 0x6231, 0x665E, 0x66E6, 0x7199, /* 0xF0 */ + 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, 0x7FB2, 0x8A70 /* 0xF0 */ +}; diff --git a/sal/textenc/tcvtkr2.tab b/sal/textenc/tcvtkr2.tab new file mode 100644 index 000000000..ee8ab9a52 --- /dev/null +++ b/sal/textenc/tcvtkr2.tab @@ -0,0 +1,5406 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* korean charsets: */ +/* KSC_5601, EUC-KR, MS_949, APPLE_KOREAN */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xA2AE, 0, 0, 0xA2B4, 0, 0, 0xA1D7, /* 0xA0 */ + 0xA1A7, 0, 0xA8A3, 0, 0, 0xA1A9, 0xA2E7, 0, /* 0xA0 */ + 0xA1C6, 0xA1BE, 0xA9F7, 0xA9F8, 0xA2A5, 0, 0xA2D2, 0xA1A4, /* 0xB0 */ + 0xA2AC, 0xA9F6, 0xA8AC, 0, 0xA8F9, 0xA8F6, 0xA8FA, 0xA2AF, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xA8A1, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xA8A2, 0, 0, 0, 0, 0, 0, 0xA1BF, /* 0xD0 */ + 0xA8AA, 0, 0, 0, 0, 0, 0xA8AD, 0xA9AC, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xA9A1, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xA9A3, 0, 0, 0, 0, 0, 0, 0xA1C0, /* 0xF0 */ + 0xA9AA, 0, 0, 0, 0, 0, 0xA9AD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_01[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA9A2, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xA8A4, 0xA9A4, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xA9A5, 0xA8A6, 0xA9A6, 0, 0, 0, 0, /* 0x30 */ + 0xA9A7, 0, 0, 0, 0, 0, 0, 0xA8A8, /* 0x30 */ + 0xA9A8, 0xA8A9, 0xA9A9, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xA9B0, 0xA8AF, 0xA9AF, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xA8AB, 0xA9AB, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xA8AE, 0xA9AE /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_02[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA2A7, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xA2B0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA2A8, 0xA2AB, 0xA2AA, 0xA2AD, 0, 0xA2A9 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, /* 0x90 */ + 0xA5C8, 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, /* 0x90 */ + 0xA5D0, 0xA5D1, 0, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, /* 0xA0 */ + 0xA5D7, 0xA5D8, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, /* 0xB0 */ + 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, 0xA5EE, 0xA5EF, /* 0xB0 */ + 0xA5F0, 0xA5F1, 0, 0xA5F2, 0xA5F3, 0xA5F4, 0xA5F5, 0xA5F6, /* 0xC0 */ + 0xA5F7, 0xA5F8 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xACA7, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xACA1, 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6, 0xACA8, 0xACA9, /* 0x10 */ + 0xACAA, 0xACAB, 0xACAC, 0xACAD, 0xACAE, 0xACAF, 0xACB0, 0xACB1, /* 0x10 */ + 0xACB2, 0xACB3, 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACB8, 0xACB9, /* 0x20 */ + 0xACBA, 0xACBB, 0xACBC, 0xACBD, 0xACBE, 0xACBF, 0xACC0, 0xACC1, /* 0x20 */ + 0xACD1, 0xACD2, 0xACD3, 0xACD4, 0xACD5, 0xACD6, 0xACD8, 0xACD9, /* 0x30 */ + 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, 0xACDF, 0xACE0, 0xACE1, /* 0x30 */ + 0xACE2, 0xACE3, 0xACE4, 0xACE5, 0xACE6, 0xACE7, 0xACE8, 0xACE9, /* 0x40 */ + 0xACEA, 0xACEB, 0xACEC, 0xACED, 0xACEE, 0xACEF, 0xACF0, 0xACF1, /* 0x40 */ + 0, 0xACD7 /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1AA, 0, 0, /* 0x10 */ + 0xA1AE, 0xA1AF, 0, 0, 0xA1B0, 0xA1B1, 0, 0, /* 0x10 */ + 0xA2D3, 0xA2D4, 0, 0, 0, 0xA1A5, 0xA1A6, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xA2B6, 0, 0xA1C7, 0xA1C8, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xA1D8, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xA9F9, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xA9FA, /* 0x70 */ + 0, 0xA9FB, 0xA9FC, 0xA9FD, 0xA9FE, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xA2E6 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1C9, 0, 0, 0, 0, /* 0x00 */ + 0, 0xA2B5, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xA7A4, 0, 0, 0xA2E0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xA2E5, 0xA2E2, 0, 0, 0, 0xA7D9, 0, /* 0x20 */ + 0, 0, 0, 0xA1CA, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xA8F7, 0xA8F8, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xA8FB, 0xA8FC, 0xA8FD, 0xA8FE, 0, /* 0x50 */ + 0xA5B0, 0xA5B1, 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, /* 0x60 */ + 0xA5B8, 0xA5B9, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, 0xA5A6, 0xA5A7, 0xA5A8, /* 0x70 */ + 0xA5A9, 0xA5AA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xA1E7, 0xA1E8, 0xA1E6, 0xA1E9, 0xA1EA, 0xA2D5, 0xA2D8, 0xA2D6, /* 0x90 */ + 0xA2D9, 0xA2D7, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xA2A1, 0, 0xA2A2 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA2A3, 0, 0xA1D3, 0xA2A4, 0, 0, 0, 0xA1D4, /* 0x00 */ + 0xA1F4, 0, 0, 0xA1F5, 0, 0, 0, 0xA2B3, /* 0x00 */ + 0, 0xA2B2, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xA1EE, 0, 0, 0xA1F0, 0xA1C4, 0, /* 0x10 */ + 0xA1D0, 0, 0, 0, 0, 0xA1AB, 0, 0xA1FC, /* 0x20 */ + 0xA1FD, 0xA1FB, 0xA1FA, 0xA1F2, 0xA1F3, 0, 0xA2B1, 0, /* 0x20 */ + 0, 0, 0, 0, 0xA1C5, 0xA1F1, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xA1AD, 0xA1EF, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xA1D6, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA1C1, 0xA1D5, 0, 0, 0xA1C2, 0xA1C3, 0, 0, /* 0x60 */ + 0, 0, 0xA1EC, 0xA1ED, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xA1F8, 0xA1F9, 0, 0, 0xA1F6, 0xA1F7, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xA2C1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xA1D1 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_23[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1D2 /* 0x10 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8E7, 0xA8E8, 0xA8E9, 0xA8EA, 0xA8EB, 0xA8EC, 0xA8ED, 0xA8EE, /* 0x60 */ + 0xA8EF, 0xA8F0, 0xA8F1, 0xA8F2, 0xA8F3, 0xA8F4, 0xA8F5, 0, /* 0x60 */ + 0, 0, 0, 0, 0xA9E7, 0xA9E8, 0xA9E9, 0xA9EA, /* 0x70 */ + 0xA9EB, 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0xA9F0, 0xA9F1, 0xA9F2, /* 0x70 */ + 0xA9F3, 0xA9F4, 0xA9F5, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, /* 0x90 */ + 0xA9D1, 0xA9D2, 0xA9D3, 0xA9D4, 0xA9D5, 0xA9D6, 0xA9D7, 0xA9D8, /* 0xA0 */ + 0xA9D9, 0xA9DA, 0xA9DB, 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, /* 0xA0 */ + 0xA9E1, 0xA9E2, 0xA9E3, 0xA9E4, 0xA9E5, 0xA9E6, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xA8CD, 0xA8CE, 0xA8CF, 0xA8D0, 0xA8D1, 0xA8D2, 0xA8D3, 0xA8D4, /* 0xD0 */ + 0xA8D5, 0xA8D6, 0xA8D7, 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, /* 0xD0 */ + 0xA8DD, 0xA8DE, 0xA8DF, 0xA8E0, 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, /* 0xE0 */ + 0xA8E5, 0xA8E6 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA6A1, 0xA6AC, 0xA6A2, 0xA6AD, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xA6A3, 0xA6C8, 0xA6C7, 0xA6AE, /* 0x00 */ + 0xA6A4, 0xA6C2, 0xA6C1, 0xA6AF, 0xA6A6, 0xA6C6, 0xA6C5, 0xA6B1, /* 0x10 */ + 0xA6A5, 0xA6C4, 0xA6C3, 0xA6B0, 0xA6A7, 0xA6BC, 0xA6C9, 0xA6CA, /* 0x10 */ + 0xA6B7, 0xA6CB, 0xA6CC, 0xA6B2, 0xA6A9, 0xA6BE, 0xA6CD, 0xA6CE, /* 0x20 */ + 0xA6B9, 0xA6CF, 0xA6D0, 0xA6B4, 0xA6A8, 0xA6D1, 0xA6D2, 0xA6B8, /* 0x20 */ + 0xA6BD, 0xA6D3, 0xA6D4, 0xA6B3, 0xA6AA, 0xA6D5, 0xA6D6, 0xA6BA, /* 0x30 */ + 0xA6BF, 0xA6D7, 0xA6D8, 0xA6B5, 0xA6AB, 0xA6D9, 0xA6DA, 0xA6BB, /* 0x30 */ + 0xA6DB, 0xA6DC, 0xA6C0, 0xA6DD, 0xA6DE, 0xA6DF, 0xA6E0, 0xA6E1, /* 0x40 */ + 0xA6E2, 0xA6E3, 0xA6E4, 0xA6B6, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xA2C6, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xA1E1, 0xA1E0, 0, 0xA2C3, 0xA2C7, 0xA2C8, 0xA2CB, 0xA2CA, /* 0xA0 */ + 0xA2C9, 0xA2CC, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xA1E3, 0xA1E2, 0, 0, 0xA2BA, 0xA2B9, /* 0xB0 */ + 0, 0, 0, 0, 0xA1E5, 0xA1E4, 0, 0, /* 0xB0 */ + 0xA2B8, 0xA2B7, 0, 0, 0, 0, 0xA1DF, 0xA1DE, /* 0xC0 */ + 0xA2C2, 0, 0, 0xA1DB, 0, 0, 0xA1DD, 0xA1DC, /* 0xC0 */ + 0xA2C4, 0xA2C5 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1DA, 0xA1D9, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xA2CF, 0xA2CE, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xA2D0, 0, 0xA2D1, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xA1CF, 0, 0xA1CE, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA2BC, 0xA2BD, 0, 0xA2C0, 0xA2BB, 0xA2BE, 0, 0xA2BF, /* 0x60 */ + 0xA2CD, 0xA2DB, 0xA2DC, 0, 0xA2DD, 0xA2DA /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, 0, 0, 0, 0, /* 0x00 */ + 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, /* 0x00 */ + 0xA1BC, 0xA1BD, 0, 0xA1EB, 0xA1B2, 0xA1B3, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xAAA1, 0xAAA2, 0xAAA3, 0xAAA4, 0xAAA5, 0xAAA6, 0xAAA7, /* 0x40 */ + 0xAAA8, 0xAAA9, 0xAAAA, 0xAAAB, 0xAAAC, 0xAAAD, 0xAAAE, 0xAAAF, /* 0x40 */ + 0xAAB0, 0xAAB1, 0xAAB2, 0xAAB3, 0xAAB4, 0xAAB5, 0xAAB6, 0xAAB7, /* 0x50 */ + 0xAAB8, 0xAAB9, 0xAABA, 0xAABB, 0xAABC, 0xAABD, 0xAABE, 0xAABF, /* 0x50 */ + 0xAAC0, 0xAAC1, 0xAAC2, 0xAAC3, 0xAAC4, 0xAAC5, 0xAAC6, 0xAAC7, /* 0x60 */ + 0xAAC8, 0xAAC9, 0xAACA, 0xAACB, 0xAACC, 0xAACD, 0xAACE, 0xAACF, /* 0x60 */ + 0xAAD0, 0xAAD1, 0xAAD2, 0xAAD3, 0xAAD4, 0xAAD5, 0xAAD6, 0xAAD7, /* 0x70 */ + 0xAAD8, 0xAAD9, 0xAADA, 0xAADB, 0xAADC, 0xAADD, 0xAADE, 0xAADF, /* 0x70 */ + 0xAAE0, 0xAAE1, 0xAAE2, 0xAAE3, 0xAAE4, 0xAAE5, 0xAAE6, 0xAAE7, /* 0x80 */ + 0xAAE8, 0xAAE9, 0xAAEA, 0xAAEB, 0xAAEC, 0xAAED, 0xAAEE, 0xAAEF, /* 0x80 */ + 0xAAF0, 0xAAF1, 0xAAF2, 0xAAF3, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xABA1, 0xABA2, 0xABA3, 0xABA4, 0xABA5, 0xABA6, 0xABA7, /* 0xA0 */ + 0xABA8, 0xABA9, 0xABAA, 0xABAB, 0xABAC, 0xABAD, 0xABAE, 0xABAF, /* 0xA0 */ + 0xABB0, 0xABB1, 0xABB2, 0xABB3, 0xABB4, 0xABB5, 0xABB6, 0xABB7, /* 0xB0 */ + 0xABB8, 0xABB9, 0xABBA, 0xABBB, 0xABBC, 0xABBD, 0xABBE, 0xABBF, /* 0xB0 */ + 0xABC0, 0xABC1, 0xABC2, 0xABC3, 0xABC4, 0xABC5, 0xABC6, 0xABC7, /* 0xC0 */ + 0xABC8, 0xABC9, 0xABCA, 0xABCB, 0xABCC, 0xABCD, 0xABCE, 0xABCF, /* 0xC0 */ + 0xABD0, 0xABD1, 0xABD2, 0xABD3, 0xABD4, 0xABD5, 0xABD6, 0xABD7, /* 0xD0 */ + 0xABD8, 0xABD9, 0xABDA, 0xABDB, 0xABDC, 0xABDD, 0xABDE, 0xABDF, /* 0xD0 */ + 0xABE0, 0xABE1, 0xABE2, 0xABE3, 0xABE4, 0xABE5, 0xABE6, 0xABE7, /* 0xE0 */ + 0xABE8, 0xABE9, 0xABEA, 0xABEB, 0xABEC, 0xABED, 0xABEE, 0xABEF, /* 0xE0 */ + 0xABF0, 0xABF1, 0xABF2, 0xABF3, 0xABF4, 0xABF5, 0xABF6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_31[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, 0xA4A6, 0xA4A7, /* 0x30 */ + 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, /* 0x30 */ + 0xA4B0, 0xA4B1, 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, /* 0x40 */ + 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE, 0xA4BF, /* 0x40 */ + 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, /* 0x50 */ + 0xA4C8, 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, /* 0x50 */ + 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, /* 0x60 */ + 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, /* 0x60 */ + 0xA4E0, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, /* 0x70 */ + 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, 0xA4EE, 0xA4EF, /* 0x70 */ + 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, 0xA4F4, 0xA4F5, 0xA4F6, 0xA4F7, /* 0x80 */ + 0xA4F8, 0xA4F9, 0xA4FA, 0xA4FB, 0xA4FC, 0xA4FD, 0xA4FE /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA9B1, 0xA9B2, 0xA9B3, 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, /* 0x00 */ + 0xA9B9, 0xA9BA, 0xA9BB, 0xA9BC, 0xA9BD, 0xA9BE, 0xA9BF, 0xA9C0, /* 0x00 */ + 0xA9C1, 0xA9C2, 0xA9C3, 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, /* 0x10 */ + 0xA9C9, 0xA9CA, 0xA9CB, 0xA9CC, 0xA2DF, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA8B1, 0xA8B2, 0xA8B3, 0xA8B4, 0xA8B5, 0xA8B6, 0xA8B7, 0xA8B8, /* 0x60 */ + 0xA8B9, 0xA8BA, 0xA8BB, 0xA8BC, 0xA8BD, 0xA8BE, 0xA8BF, 0xA8C0, /* 0x60 */ + 0xA8C1, 0xA8C2, 0xA8C3, 0xA8C4, 0xA8C5, 0xA8C6, 0xA8C7, 0xA8C8, /* 0x70 */ + 0xA8C9, 0xA8CA, 0xA8CB, 0xA8CC, 0, 0, 0, 0xA2DE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA7C9, 0xA7CA, 0xA7CB, 0xA7CC, 0xA7CD, 0, 0, 0, /* 0x80 */ + 0xA7BA, 0xA7BB, 0xA7DC, 0xA7DD, 0xA7DE, 0xA7B6, 0xA7B7, 0xA7B8, /* 0x80 */ + 0xA7D4, 0xA7D5, 0xA7D6, 0xA7D7, 0xA7D8, 0xA7A1, 0xA7A2, 0xA7A3, /* 0x90 */ + 0xA7A5, 0xA7AB, 0xA7AC, 0xA7AD, 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, /* 0x90 */ + 0xA7B2, 0xA7B3, 0xA7B4, 0xA7A7, 0xA7A8, 0xA7A9, 0xA7AA, 0xA7BD, /* 0xA0 */ + 0xA7BE, 0xA7E5, 0xA7E6, 0xA7E7, 0xA7E8, 0xA7E1, 0xA7E2, 0xA7E3, /* 0xA0 */ + 0xA7BF, 0xA7C0, 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C5, 0xA7C6, /* 0xB0 */ + 0xA7C7, 0xA7C8, 0xA7CE, 0xA7CF, 0xA7D0, 0xA7D1, 0xA7D2, 0xA7D3, /* 0xB0 */ + 0xA7DA, 0xA7DB, 0xA2E3, 0xA7EC, 0xA7A6, 0xA7E0, 0xA7EF, 0xA2E1, /* 0xC0 */ + 0xA7BC, 0xA7ED, 0xA7B5, 0, 0, 0, 0, 0xA7B9, /* 0xC0 */ + 0xA7EA, 0, 0, 0xA7EB, 0, 0, 0xA7DF, 0, /* 0xD0 */ + 0xA2E4, 0, 0, 0xA7E4, 0xA7EE, 0xA7E9 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xECE9, 0xEFCB, 0, 0xF6D2, 0, 0, 0, 0xD8B2, /* 0x00 */ + 0xEDDB, 0xDFB2, 0xDFBE, 0xF9BB, 0, 0xDCF4, 0, 0, /* 0x00 */ + 0, 0xF5E4, 0, 0, 0xF3A6, 0xDDE0, 0xE1A6, 0, /* 0x10 */ + 0xCEF8, 0xDCB0, 0, 0, 0, 0, 0xE3AA, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF1E9, 0, 0, /* 0x20 */ + 0, 0, 0xCDFA, 0, 0, 0, 0, 0, /* 0x30 */ + 0xFCAF, 0xD3A1, 0, 0xF1AB, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xE7D1, 0xD2AC, 0, 0xCEF9, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF1FD, 0, 0xDEBF, 0xFBBA, 0xF9B9, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xCED2, 0, /* 0x50 */ + 0xE3AB, 0xEBE0, 0, 0, 0, 0xCEFA, 0xCBF7, 0xE5A5, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xCAE1, 0, 0xD4CC, 0, 0, /* 0x60 */ + 0, 0, 0, 0xEAE1, 0, 0, 0xDCE3, 0xDFAD, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xCBEB, 0, /* 0x70 */ + 0, 0, 0xD5AF, 0, 0, 0, 0xD6F5, 0, /* 0x80 */ + 0xE5F8, 0, 0, 0xDEC0, 0xECA3, 0, 0xE9CD, 0, /* 0x80 */ + 0xEAA7, 0xE9F6, 0xFBBB, 0, 0xE7E9, 0xEFCC, 0, 0, /* 0x90 */ + 0xD0E6, 0, 0, 0xDEC1, 0, 0, 0xE4AC, 0, /* 0x90 */ + 0, 0xD8CC, 0xF9F1, 0, 0xCEDF, 0xFAA4, 0xE6B2, 0, /* 0xA0 */ + 0xFAFB, 0, 0, 0xFABD, 0xCCC8, 0xEFCD, 0xD5D5, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xD3A2, 0, /* 0xB0 */ + 0, 0, 0xECD1, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE4A7, 0xECD2, 0, 0, 0xF6B1, 0, 0, 0xCEFB, /* 0xC0 */ + 0, 0, 0xD0D1, 0xCBBF, 0, 0xEDA4, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xEDA8, 0xDEC2, 0xF6E2, 0xEDDC, /* 0xD0 */ + 0xDCF5, 0xE0B9, 0, 0, 0, 0xD4CE, 0, 0xF4B5, /* 0xD0 */ + 0, 0, 0, 0xD3DB, 0xD6B5, 0xECA4, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE4E6, 0, 0xF1EA, 0, 0, 0, 0xCBEC, 0xCBC0, /* 0xF0 */ + 0, 0, 0, 0xECF2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD0EA, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xF9F2, 0xECA5, 0xD0DF, 0, 0xE7EA, 0xD0EB, 0xDCD1, /* 0x00 */ + 0xDBE9, 0xFDCC, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xDBD7, /* 0x20 */ + 0, 0, 0, 0, 0xDAE1, 0, 0xD6B6, 0, /* 0x30 */ + 0xE3DF, 0, 0xDEC3, 0, 0xDEC4, 0xCAA1, 0, 0, /* 0x30 */ + 0, 0, 0, 0xEEEC, 0, 0, 0xD3A3, 0xEEB7, /* 0x40 */ + 0xF8CF, 0, 0, 0, 0, 0xEAC8, 0xEEB8, 0xF1AC, /* 0x40 */ + 0xF1A5, 0xE9CE, 0, 0, 0, 0xF9BC, 0, 0, /* 0x50 */ + 0, 0xE5F9, 0xECEA, 0xDDD6, 0xEDC2, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF8A5, 0, 0, 0, 0, 0, 0xE5BA, /* 0x60 */ + 0xDBD8, 0, 0, 0xCAA2, 0, 0, 0xD1CD, 0, /* 0x70 */ + 0, 0, 0xEEED, 0, 0, 0, 0xECEB, 0xDEC5, /* 0x70 */ + 0, 0xE3E0, 0, 0xCAC9, 0xF2E9, 0, 0xD5CE, 0, /* 0x80 */ + 0xF6B6, 0, 0xCEC2, 0xD6C7, 0, 0xE3B4, 0, 0xF1AD, /* 0x80 */ + 0, 0xEAE2, 0, 0, 0, 0, 0xD7C2, 0, /* 0x90 */ + 0xF3A7, 0, 0, 0xCDEA, 0, 0xEBEE, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xD9B2, 0xFDA5, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xF6D5, 0xD5E2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF8B5, /* 0xB0 */ + 0, 0, 0xCCF5, 0xF5B5, 0xE4AD, 0, 0, 0, /* 0xC0 */ + 0, 0xE7EB, 0xF1D5, 0, 0, 0, 0xF0BB, 0, /* 0xC0 */ + 0, 0xE9B5, 0, 0xCCC9, 0xFAD5, 0, 0, 0xE1D4, /* 0xD0 */ + 0, 0, 0xD7D6, 0, 0, 0xDCC1, 0, 0xDEC6, /* 0xD0 */ + 0xFAEF, 0xE3E1, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xE1F3, 0xDCF6, /* 0xE0 */ + 0, 0xCEFC, 0, 0xDBC4, 0, 0xF8F1, 0, 0, /* 0xF0 */ + 0xDCE4, 0, 0xE5EF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCB1, 0, 0, 0, 0xD5D6, 0, /* 0x00 */ + 0, 0xF3DA, 0, 0xCBC1, 0, 0xDBC3, 0, 0, /* 0x00 */ + 0, 0xD9FA, 0xD3EE, 0, 0, 0, 0xFAB8, 0, /* 0x10 */ + 0, 0xFDA6, 0xEBEF, 0, 0xF4A6, 0, 0xCCCA, 0xF3A8, /* 0x10 */ + 0, 0xF3DB, 0, 0xDBA7, 0xF6B7, 0, 0xCFE6, 0xF0F2, /* 0x20 */ + 0xCBDA, 0, 0xE7D2, 0xD7C3, 0xF6F0, 0xE8DE, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE5A6, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE5E7, 0, 0, 0, 0xCAA3, /* 0x40 */ + 0xCCA7, 0xEAC9, 0, 0, 0, 0, 0, 0xF8B6, /* 0x40 */ + 0, 0, 0, 0, 0, 0xFAA5, 0, 0, /* 0x50 */ + 0, 0, 0xF1AE, 0, 0xEFCE, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xCBED, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xF6B0, 0xEFCF, 0xE9CF, 0, /* 0x70 */ + 0xF7DE, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xCED3, 0, 0, 0, 0, 0xDCF7, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xDBA8, 0, 0, /* 0x80 */ + 0, 0xCBF8, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xDFA1, 0xDDE1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xF5CA, 0xE9B6, 0, 0, /* 0xA0 */ + 0, 0, 0xE7EC, 0xEEEE, 0, 0xF3F0, 0, 0xDFBF, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xCCCB, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xD0C1, 0, 0, /* 0xC0 */ + 0, 0xF4D2, 0xE0BA, 0, 0, 0, 0, 0xDFC0, /* 0xC0 */ + 0, 0xCEE0, 0, 0, 0, 0xDCD2, 0xFDEA, 0, /* 0xD0 */ + 0, 0, 0xD6F6, 0, 0, 0, 0xEACA, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xE8E9, 0, 0xE3AC, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF3D0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xCAA4, 0, 0xDBF8, 0, 0, 0, 0xDEC7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEBF0, 0xF1D6, 0, 0, 0xE5E2, 0, 0xCCCC, 0, /* 0x00 */ + 0, 0xCBFB, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xEAE3, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xDFC1, /* 0x10 */ + 0, 0xD6ED, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE9D0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEEB9, 0, 0, 0, 0, 0xD5E3, /* 0x30 */ + 0, 0, 0xD1D3, 0, 0xE5F0, 0, 0, 0, /* 0x30 */ + 0xE8B4, 0xEBC3, 0, 0xEAAA, 0xFAFC, 0xF5F6, 0xF0BC, 0xFDD4, /* 0x40 */ + 0xE0BB, 0xCEC3, 0, 0xD0BA, 0xF7BA, 0xD8F3, 0xF7CD, 0, /* 0x40 */ + 0, 0, 0xE4AE, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xD4DF, 0, 0, 0, /* 0x50 */ + 0, 0, 0xD0E7, 0, 0, 0xECFD, 0, 0xD2AE, /* 0x60 */ + 0xEEEF, 0xD5D7, 0xEAE4, 0xF8A2, 0xCDEB, 0xD7BF, 0xFBB1, 0, /* 0x60 */ + 0, 0xCDEC, 0, 0, 0, 0xDCB2, 0xD0EC, 0xCEFD, /* 0x70 */ + 0xEEF0, 0, 0, 0, 0xCCC2, 0, 0, 0, /* 0x70 */ + 0xD0ED, 0, 0, 0, 0, 0, 0xE5F7, 0, /* 0x80 */ + 0, 0, 0xF3FC, 0, 0, 0xEEA2, 0, 0, /* 0x80 */ + 0, 0, 0xD9B3, 0, 0, 0xD8F4, 0, 0xE9B7, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xCEAE, 0, 0, 0, 0, 0xD9A2, 0, 0, /* 0xA0 */ + 0, 0, 0xD8F1, 0, 0xD4CF, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xE5A7, 0xD5D2, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xD6A9, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF4A2, 0, 0xF1D7, 0, /* 0xC0 */ + 0, 0xD5D8, 0, 0xF0BD, 0xD7D0, 0xD4D0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xD7CF, 0xEBEA, 0xFDEB, 0, /* 0xD0 */ + 0, 0xDBED, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xFCC5, 0xCBC2, 0, 0, 0, 0, 0xFDD5, 0, /* 0xF0 */ + 0xF4C8, 0xE8EA, 0xF5F3, 0, 0, 0xF9DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD3EF, 0, 0, 0xECD3, 0, 0, 0xDDC2, 0xEFB7, /* 0x00 */ + 0xE7D4, 0, 0xCACA, 0, 0, 0, 0xD9FB, 0, /* 0x00 */ + 0, 0xFAFD, 0, 0, 0, 0, 0, 0xD6AA, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF4F8, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xF7F7, 0xDCAC, 0, 0, /* 0x20 */ + 0, 0xD7D7, 0xDFA2, 0, 0, 0, 0xCEBE, 0, /* 0x20 */ + 0xD3F0, 0, 0, 0, 0, 0, 0xF0A4, 0xE1EC, /* 0x30 */ + 0xCFE7, 0xF3CB, 0xEDA9, 0xCABE, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF4EF, 0, 0, 0, 0xF6CE, /* 0x40 */ + 0, 0, 0xDEFB, 0xD0BB, 0xD5B7, 0xEEF1, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF4A8, 0, 0xDCF8, 0, /* 0x50 */ + 0, 0, 0, 0xCBA7, 0, 0xDACE, 0, 0, /* 0x50 */ + 0, 0xE0E6, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xEDA5, 0xEEF2, 0, 0, 0, 0, 0xDCF9, /* 0x60 */ + 0, 0, 0xF9DC, 0, 0, 0xF3DC, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF8F2, 0, 0xF4F9, /* 0x70 */ + 0, 0, 0, 0xFCF1, 0, 0, 0, 0xD0BC, /* 0x80 */ + 0xDBF9, 0xD7B1, 0, 0, 0, 0xCBFC, 0, 0, /* 0x80 */ + 0, 0xF0A5, 0xCBFD, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xD5F4, 0, 0, 0, 0xCDED, /* 0x90 */ + 0xCAA5, 0, 0, 0xD6AB, 0xD0C2, 0, 0, 0, /* 0xA0 */ + 0, 0xF0BE, 0xD2BD, 0xCCA4, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xFAB6, 0, /* 0xB0 */ + 0, 0xCCCD, 0, 0xDAFA, 0, 0xF6CF, 0, 0xE9B8, /* 0xC0 */ + 0, 0xD8F5, 0, 0, 0, 0xCCCE, 0, 0, /* 0xC0 */ + 0, 0, 0xD7CD, 0, 0, 0xD4D1, 0xE9ED, 0, /* 0xD0 */ + 0xCAEB, 0xD9E2, 0, 0xFDB2, 0, 0xE3AD, 0xD6CC, 0xD9B4, /* 0xD0 */ + 0, 0, 0xE1A7, 0xEED3, 0xD0C3, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xFDB3, 0, 0xD5E4, 0, 0, /* 0xF0 */ + 0xCFE8, 0, 0xEDC3, 0xD0B2, 0, 0, 0xCEFE, 0xDAA8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8D0, 0, 0, /* 0x00 */ + 0xFDD6, 0, 0, 0, 0, 0xF8D1, 0, 0xF8D2, /* 0x00 */ + 0xDCD3, 0, 0, 0, 0, 0xDDE2, 0xFBF9, 0xDDC1, /* 0x10 */ + 0, 0xE3B5, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xEDDD, 0xCEC4, 0, 0xCBA1, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xDDE3, 0, 0, 0, 0, 0xFCDD, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF9AF, 0, 0, 0, 0, 0, 0xD2FB, /* 0x30 */ + 0xCFA1, 0xE4A8, 0, 0xF4B6, 0xECFE, 0, 0, 0xE3AE, /* 0x40 */ + 0xE7ED, 0xFDC1, 0xDAE2, 0, 0, 0xD8B3, 0, 0, /* 0x40 */ + 0, 0xDDE4, 0xF0EF, 0xF6F1, 0xFAF0, 0, 0, 0xD1F5, /* 0x50 */ + 0, 0, 0xDACF, 0, 0xDCD4, 0, 0xDCA6, 0, /* 0x50 */ + 0xEFBF, 0, 0, 0, 0, 0, 0xCECF, 0, /* 0x60 */ + 0xE0D9, 0, 0, 0, 0, 0, 0, 0xD9D6, /* 0x60 */ + 0xECD4, 0xEACB, 0, 0, 0xCABF, 0xD5B0, 0, 0xCFE9, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF1ED, 0, 0xCCCF, /* 0x70 */ + 0, 0, 0, 0, 0xE4F8, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE4ED, 0, 0, 0, 0, /* 0x90 */ + 0xD7D8, 0, 0xFDA7, 0, 0, 0, 0, 0xEAAB, /* 0x90 */ + 0xF6B2, 0, 0, 0, 0, 0xCFF0, 0xF9BD, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xE6F4, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xCBDB, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF3D1, 0, 0, 0, 0, /* 0xC0 */ + 0xE9D1, 0xF3A9, 0xD0E0, 0xE9D2, 0, 0xDAE3, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE2D2, 0, 0xF6A2, 0xE1F4, /* 0xD0 */ + 0, 0, 0, 0xDAE4, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE7D5, 0xF5BF, 0xCFA2, 0xCDAF, 0xCFA3, 0, 0, /* 0xE0 */ + 0, 0xCDB0, 0xF1FE, 0xD0A3, 0xE1AF, 0xF8A3, 0, 0xCAA6, /* 0xE0 */ + 0xF7BB, 0xF2EA, 0xDEC8, 0xE9D3, 0, 0, 0, 0, /* 0xF0 */ + 0xDEC9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFDDE, 0xCAC0, 0, 0, 0, /* 0x00 */ + 0xF9EA, 0xD1CE, 0xEED4, 0, 0xD4D2, 0xD9A3, 0xFDA8, 0xD7D9, /* 0x00 */ + 0xF7CE, 0xFABE, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xCFD6, 0, 0xD7F0, 0, 0xEBE1, /* 0x10 */ + 0xF8C5, 0, 0, 0, 0, 0, 0xDCFA, 0, /* 0x20 */ + 0, 0xDDC3, 0, 0xF9DF, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE7EF, 0, 0, 0, 0, /* 0x30 */ + 0xFDE5, 0xF6A3, 0, 0xD9FC, 0xFDA9, 0, 0xE7EE, 0, /* 0x30 */ + 0, 0, 0xD5E5, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEFD0, 0, 0xCDB1, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF7A2, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xF1B2, 0, 0xF1B1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xCDB2, 0, 0xDAAB, 0, 0xCAA7, 0, 0, /* 0x70 */ + 0, 0, 0, 0xE3E2, 0xFBBC, 0xD9A4, 0, 0, /* 0x70 */ + 0xEEBA, 0, 0, 0, 0, 0, 0xF8D3, 0, /* 0x80 */ + 0, 0, 0, 0, 0xFBFA, 0, 0xCFA4, 0, /* 0x80 */ + 0xDCFB, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF6E3, 0, 0, 0, /* 0xA0 */ + 0xEDAA, 0, 0, 0xF2A1, 0xCEE1, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xFAA6, 0, 0, 0, 0, /* 0xB0 */ + 0xF9E0, 0, 0, 0, 0, 0xECD6, 0, 0, /* 0xB0 */ + 0xE4EE, 0xF9A1, 0, 0, 0xFBEF, 0, 0, 0, /* 0xC0 */ + 0xF9EB, 0xEEA3, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xEAAC, 0, 0, 0, 0xCAA8, 0, 0, /* 0xE0 */ + 0xF4FA, 0, 0, 0, 0, 0xCDD6, 0xFCF6, 0, /* 0xE0 */ + 0, 0, 0xF4C9, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xF8D4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8A6, 0, 0xDECA, 0xF2C6, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xD7DA, 0, /* 0x00 */ + 0xD3D0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xD8C5, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAE6, /* 0x20 */ + 0, 0xF3DD, 0, 0, 0, 0xE4DA, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF6E4, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF6F2, 0, 0xDFC2, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9FD, /* 0x40 */ + 0, 0, 0, 0xCCF6, 0, 0, 0xD3BA, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE4AF, 0, /* 0x50 */ + 0, 0, 0, 0xF9E1, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF0A6, 0, 0, 0, /* 0x70 */ + 0xCBD3, 0, 0, 0, 0xE0BC, 0, 0xF4CA, 0xD4FA, /* 0x80 */ + 0, 0xFDAA, 0xF9E2, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xF4B7, 0xFDC2, 0xFCB0, 0, 0xFDEC, 0xCAE2, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xFDBD, /* 0xA0 */ + 0, 0xEAE7, 0xDFC3, 0xD1D2, 0xCEE2, 0, 0xD3A4, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xFDAB, 0, 0xDFE0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF2C7, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE7F0, 0, 0xD0EE, 0, 0, 0xF3AA, /* 0xD0 */ + 0, 0, 0, 0xDECB, 0xF6B8, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xE1F5, 0xF1B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF7A3, 0, /* 0x00 */ + 0, 0xCAA9, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xCFA5, 0, 0, 0xDFC4, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1B0, /* 0x20 */ + 0, 0, 0xF0BF, 0, 0xF6A4, 0, 0xE3B6, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xFAC6, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xD0EF, 0, 0, 0xFDED, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xDDC4, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xFCF7, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE6BF, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xDEAD, 0, 0xFABF, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE5F1, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xEDC4, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xD2A5, 0, 0, 0xFDEE, 0, 0, /* 0xC0 */ + 0, 0xF5B6, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE1F6, 0xDECC, 0, 0, 0xFCDE, 0, /* 0xD0 */ + 0xECD7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xCDDD, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xD6B7, 0xCDB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8D5, 0xE5D8, 0, 0, 0, /* 0x00 */ + 0xCFEA, 0, 0, 0xCFD0, 0, 0xEACC, 0, 0, /* 0x00 */ + 0, 0, 0xEAAE, 0xEAAD, 0, 0, 0xD3F1, 0, /* 0x10 */ + 0xD3A5, 0, 0, 0, 0, 0, 0, 0xF7CF, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xEEA4, 0, 0, 0, 0, 0xD0A4, 0, 0, /* 0x20 */ + 0xF2A2, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD0F0, 0, 0, 0, 0, /* 0x30 */ + 0xF2A3, 0, 0xF7F8, 0, 0, 0, 0, 0xD0B3, /* 0x40 */ + 0, 0, 0xDBA9, 0, 0, 0xD3BB, 0xCAEC, 0, /* 0x40 */ + 0xF1A6, 0xCBD5, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF7E7, 0, 0, 0xCDDE, 0, 0xF7A4, 0, /* 0x60 */ + 0, 0, 0xF8C0, 0, 0, 0, 0xD3DD, 0, /* 0x60 */ + 0xCCD0, 0, 0, 0, 0, 0xCFA6, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF6F3, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE1F7, 0, 0, 0, 0, 0, /* 0x80 */ + 0xD3DC, 0, 0, 0xFAFE, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xFAA7, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xEBD9, 0, 0xCFA7, 0xEAAF, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE4EF, 0, 0, 0, 0xE9B9, /* 0xC0 */ + 0xF1D8, 0, 0, 0xD8D8, 0, 0, 0xE0F2, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6B4, /* 0xD0 */ + 0xDCFC, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF3F1, 0, 0, 0, 0xE3D0, 0, 0, 0xF2FB, /* 0xF0 */ + 0, 0xDBC6, 0xD0F1, 0, 0xD0F2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFDC, 0, 0xD3D1, 0, 0, 0xCCB1, 0xF7D8, 0, /* 0x00 */ + 0xCBA8, 0xEBBC, 0xE4BE, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF4DC, 0, /* 0x10 */ + 0, 0xDCC2, 0, 0, 0xF0A7, 0, 0, 0xE6C0, /* 0x20 */ + 0, 0, 0xCAED, 0, 0, 0, 0, 0xE8EB, /* 0x20 */ + 0xE5E8, 0xDCC3, 0, 0, 0xEDDE, 0xD3F2, 0, 0, /* 0x30 */ + 0, 0, 0xCCF7, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xCED4, 0xE7AB, 0, 0, 0, 0xCBC3, /* 0x40 */ + 0, 0xE1B1, 0, 0, 0xF7B2, 0, 0, 0xD3F3, /* 0x50 */ + 0xD3D2, 0, 0xF5C0, 0, 0, 0, 0xDFDD, 0, /* 0x50 */ + 0, 0xEEF3, 0xE7F1, 0, 0xFDB4, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF2C8, 0, 0, /* 0x70 */ + 0, 0xF3D2, 0, 0, 0xEEF4, 0, 0xE2D3, 0, /* 0x70 */ + 0, 0, 0, 0xCCD1, 0, 0xDFEA, 0, 0, /* 0x80 */ + 0, 0xE9BA, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xD9D7, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF5CD, 0, 0xF1F2, 0xFAC7, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xD9F8, 0xD4C2, 0, 0, 0, 0, 0xF6E5, 0, /* 0xA0 */ + 0, 0, 0, 0xDDC5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE7F2, 0xEDDF, 0, 0, 0xCACB, 0, /* 0xB0 */ + 0, 0xDBFA, 0, 0, 0, 0xE8B5, 0, 0xD3A6, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xFDB5, 0, /* 0xC0 */ + 0, 0xF9C9, 0, 0xE4E2, 0, 0xFBBD, 0, 0, /* 0xD0 */ + 0xD7A4, 0xCEC5, 0, 0, 0, 0, 0xCED5, 0xD6E6, /* 0xD0 */ + 0, 0, 0, 0, 0xE5BD, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xDECD, 0xECF3, 0, 0, 0xEDE0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xECEC, 0xFBBE, 0xDFEB, 0, 0xE1F8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF9BE, /* 0x00 */ + 0, 0, 0, 0, 0xD0F3, 0xE0AA, 0xE8E2, 0, /* 0x10 */ + 0, 0xE2D4, 0xD2FD, 0, 0xE5A8, 0, 0, 0, /* 0x10 */ + 0, 0, 0xD9D3, 0, 0, 0, 0, 0xD3DE, /* 0x20 */ + 0, 0xF4B8, 0xF7BC, 0xDCFD, 0, 0xE8EC, 0xE4E7, 0, /* 0x20 */ + 0, 0xE3F7, 0, 0, 0, 0, 0, 0xECA8, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xFAF1, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE5F2, 0, 0, 0xD0F4, /* 0x40 */ + 0xD2AF, 0xDCE5, 0, 0, 0, 0, 0xD0A5, 0xF1B4, /* 0x40 */ + 0xFCB1, 0xCCF8, 0, 0, 0xDDC6, 0xFAD1, 0, 0xF7DF, /* 0x50 */ + 0, 0, 0xFAA8, 0, 0, 0, 0, 0, /* 0x50 */ + 0xEEF5, 0, 0xDECE, 0, 0, 0, 0, 0xE7F3, /* 0x60 */ + 0, 0, 0xF7AC, 0xEBC4, 0xEDE1, 0xE0AB, 0xDDC7, 0, /* 0x60 */ + 0, 0, 0, 0xD2B3, 0xD2BF, 0, 0, 0, /* 0x70 */ + 0xCACC, 0, 0, 0, 0, 0xFBBF, 0, 0, /* 0x70 */ + 0, 0, 0xE5FD, 0xDDE5, 0xD8CD, 0, 0, 0, /* 0x80 */ + 0, 0, 0xECF4, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xD0F5, 0, 0, 0xE8ED, 0xD0D2, /* 0x90 */ + 0, 0xD9D8, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF6E6, 0, 0, /* 0xA0 */ + 0xDBAA, 0, 0, 0, 0xF7E0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xD8D9, 0, 0xF4A3, 0, 0, 0xF4DD, 0, /* 0xB0 */ + 0, 0, 0, 0xEFD1, 0, 0, 0xD9B5, 0, /* 0xC0 */ + 0, 0xEDAB, 0, 0xE3B7, 0, 0, 0, 0, /* 0xC0 */ + 0xEEBB, 0xCDB4, 0, 0xE0F3, 0xEACD, 0, 0, 0, /* 0xD0 */ + 0, 0xECF5, 0xE8EE, 0, 0xCBA9, 0xF1AF, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xCACD, 0, /* 0xE0 */ + 0xECA9, 0, 0xF2EB, 0, 0xFDEF, 0, 0xF9F3, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xE6C1, 0, 0, 0xECD8, 0, 0, 0, 0xEDAC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEACE, 0, 0xE8DF, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xDECF, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xD2A6, 0, 0, 0xE7F4, 0xD1D6, 0, 0, 0xE6C2, /* 0x10 */ + 0xE3E3, 0, 0, 0, 0, 0xE4B0, 0, 0, /* 0x20 */ + 0, 0xD8B4, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF6A5, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF3DE, 0, 0, 0, /* 0x30 */ + 0, 0xD7A5, 0, 0, 0, 0, 0xF7E8, 0, /* 0x40 */ + 0, 0xE8C6, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xFBE6, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xDDE6, 0, 0, 0, 0xDCFE, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD8DA, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xDAAC, 0xEAB0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE3B8, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xCAAA, 0xE1F9, 0, 0xEAB1, 0, 0, 0, /* 0xC0 */ + 0, 0xF2EC, 0, 0, 0xFAEE, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xEED5, 0, 0, 0, 0, 0xF9F4, 0, /* 0xE0 */ + 0, 0xD2EC /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFBFB, 0, 0, /* 0x00 */ + 0, 0xFDF0, 0, 0xE0BD, 0xCEE3, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF8C6, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xDEAE, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xDFC5, 0, 0, 0xE5BE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEDAD, 0xFAEA, 0, 0, 0xCDEE, 0xEDA6, 0, 0xEDAE, /* 0x50 */ + 0xF0ED, 0, 0xDDA1, 0, 0xEDAF, 0xFCF8, 0, 0xD8EB, /* 0x50 */ + 0, 0, 0, 0xCCF9, 0xCDB5, 0, 0, 0, /* 0x60 */ + 0, 0xFAA9, 0, 0xE1DD, 0, 0, 0, 0, /* 0x60 */ + 0xE2D5, 0xEDCF, 0, 0, 0, 0xDDA2, 0, 0, /* 0x70 */ + 0xF9CA, 0, 0xEAE8, 0, 0xE5ED, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD3EB, 0, 0xE9D4, /* 0x80 */ + 0xE1FA, 0xE4CC, 0, 0xE1E4, 0xE8C7, 0, 0, 0xCEDB, /* 0x80 */ + 0, 0, 0, 0xDCD5, 0, 0xF7B5, 0xFCF3, 0xF0F3, /* 0x90 */ + 0xCEAF, 0xF1B5, 0xEFD2, 0xE8C8, 0xEBF1, 0, 0, 0, /* 0x90 */ + 0, 0, 0xCBD4, 0xE0BE, 0xE3F8, 0xEAE9, 0xFCB2, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE0F4, 0, 0xCFE0, 0, /* 0xA0 */ + 0xEEA5, 0, 0, 0xFAAA, 0xE6C3, 0xE1B2, 0xCAAB, 0, /* 0xB0 */ + 0xE3E4, 0xE9BB, 0, 0, 0, 0, 0, 0xE2D6, /* 0xB0 */ + 0xF3F2, 0, 0xEED6, 0xEAB2, 0xD0F6, 0xECD9, 0xDACB, 0xCFA8, /* 0xC0 */ + 0, 0, 0, 0, 0xDDA3, 0, 0, 0, /* 0xC0 */ + 0xD8DB, 0, 0xF9CE, 0xE9D5, 0xE3D1, 0, 0, 0xD2BC, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xD8AC, 0xF3CC, /* 0xD0 */ + 0, 0xCDFB, 0xF6D6, 0, 0xE7F5, 0xE8EF, 0xE3F9, 0xD2BB, /* 0xE0 */ + 0xF3F3, 0xE3FB, 0, 0xDED0, 0xCEB0, 0, 0xD6F7, 0xF1D9, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF5C1, 0xDCC4, 0, /* 0xF0 */ + 0xF5BB, 0, 0xDED1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCE6, 0, 0, 0xDED2, 0, 0, 0xEDE2, /* 0x00 */ + 0xEEF6, 0xEACF, 0xF0EE, 0xE3FC, 0, 0xD3DF, 0xD3F4, 0xE1B3, /* 0x00 */ + 0, 0xE1B4, 0, 0, 0, 0, 0xF4D3, 0, /* 0x10 */ + 0, 0xDFC6, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xE9D6, 0, 0, 0, /* 0x20 */ + 0xDBAB, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF6A6, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE3B9, 0xEBC5, 0xF4A9, 0xCDB6, 0xD2F9, 0, 0xDAAD, 0xD2E3, /* 0x30 */ + 0xCFD1, 0, 0, 0, 0, 0xCBDC, 0xCCFA, 0, /* 0x40 */ + 0xCFDD, 0, 0, 0xE8A9, 0, 0xE3BB, 0xE3BA, 0, /* 0x40 */ + 0, 0xE0DA, 0, 0, 0, 0xEEF7, 0, 0, /* 0x50 */ + 0, 0, 0, 0xDCB3, 0, 0, 0, 0, /* 0x50 */ + 0xD3F5, 0, 0xD7A6, 0, 0xF6B5, 0xD7DB, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE1D5, 0, 0, 0xD4EA, /* 0x60 */ + 0, 0xDFA3, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xFDDF, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xD0F7, 0xEDD4, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xCBAA, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE4DB, 0, 0xE1FB, 0xCBA2, 0, 0, 0, /* 0xA0 */ + 0, 0xD3E0, 0, 0xE4BF, 0, 0xFBC0, 0, 0xDABE, /* 0xB0 */ + 0xE4CD, 0, 0xD6B9, 0, 0, 0, 0xEFC0, 0, /* 0xB0 */ + 0xE1FC, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF6B9, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xDFC7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE4B1, 0, 0, 0, 0, 0, 0, 0xDCE7, /* 0xE0 */ + 0xDCE8, 0, 0, 0, 0xFAD6, 0, 0xD3F6, 0, /* 0xF0 */ + 0, 0, 0, 0xF1DA, 0, 0xFAF2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2FD, /* 0x00 */ + 0, 0, 0, 0, 0, 0xD5CF, 0xD0F8, 0, /* 0x00 */ + 0, 0xCDDF, 0, 0, 0xF5CB, 0, 0xE4F0, 0xCBAB, /* 0x10 */ + 0, 0xD7C4, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2FE, /* 0x20 */ + 0, 0xDDDA, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xDAAE, 0xCAEE, 0, 0, 0, /* 0x40 */ + 0xD5B9, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE3A1, 0, 0, 0xE8E3, 0, 0, 0xF3AB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFA9, /* 0x80 */ + 0, 0, 0, 0xD3F7, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xD4F1, 0, 0, /* 0x90 */ + 0xCEE4, 0, 0xE8F2, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE5F5, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE7AE, 0, 0xD6BA, 0, 0xDFEC, 0xE4C0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE8E4, 0, 0, /* 0xC0 */ + 0, 0, 0xD8B5, 0, 0, 0, 0xE4DC, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF4B9, 0xF1B6, 0, /* 0xD0 */ + 0, 0xE2DE, 0xE1B5, 0, 0, 0xCDEF, 0xF1A7, 0xCEE5, /* 0xE0 */ + 0xCBDD, 0, 0, 0xD9E3, 0, 0, 0xF3AC, 0, /* 0xE0 */ + 0, 0xD0F9, 0xECAB, 0xDED3, 0xF7E9, 0, 0, 0xF9F5, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xE1DE, 0xCBEE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE3BC, 0xF8D6, 0, 0, 0xDBEE, 0, /* 0x00 */ + 0, 0, 0, 0, 0xFDF1, 0, 0, 0, /* 0x00 */ + 0, 0xF7B6, 0, 0, 0, 0, 0xF4DE, 0, /* 0x10 */ + 0, 0xF2ED, 0, 0xDBD9, 0, 0xF0A8, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE1FD, 0, 0, /* 0x20 */ + 0, 0, 0, 0xDED4, 0, 0xE0AC, 0, 0, /* 0x20 */ + 0, 0, 0, 0xEDE3, 0, 0, 0xD3E1, 0, /* 0x30 */ + 0xDFC8, 0, 0, 0, 0, 0xD9B6, 0, 0xFDAC, /* 0x30 */ + 0xEFD3, 0, 0, 0, 0xE4C1, 0xF8EB, 0, 0xDBAC, /* 0x40 */ + 0, 0, 0, 0, 0xFCC6, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xD8AD, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xF6BA, /* 0x50 */ + 0, 0xDBDF, 0xD3D3, 0xF8C7, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xCACE, 0xF8C1, 0xD2B4, 0, 0, 0xDCB4, /* 0x70 */ + 0xFAB9, 0xCACF, 0, 0xFCB3, 0xEAEA, 0xEAEB, 0xD0FA, 0, /* 0x70 */ + 0, 0, 0, 0, 0xEDE4, 0, 0, 0xDDE7, /* 0x80 */ + 0, 0, 0xDFC9, 0, 0, 0, 0, 0xDFED, /* 0x80 */ + 0, 0, 0, 0, 0, 0xEEBC, 0, 0xEFC1, /* 0x90 */ + 0, 0, 0xCCD2, 0, 0xDDA4, 0, 0, 0, /* 0x90 */ + 0xDFCA, 0, 0, 0, 0, 0, 0xD3F8, 0xF1A8, /* 0xA0 */ + 0, 0, 0, 0xCDB7, 0, 0xEFD4, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xE4DD, 0xDFEE, 0xCBAC, /* 0xB0 */ + 0xE9BC, 0, 0, 0, 0, 0, 0xEAEC, 0, /* 0xB0 */ + 0, 0, 0xDFCB, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xF9BF, 0xD6AF, 0xD5C6, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xCFAA, 0, 0, 0xCEA9, 0, 0, 0xD6F8, 0, /* 0xD0 */ + 0, 0, 0xF1B7, 0xEEF8, 0, 0, 0, 0xD9D9, /* 0xD0 */ + 0xF3DF, 0, 0xF8C8, 0xCEC6, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xD5E6, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF4E6, 0, 0, 0xE6C5, 0xEFD5, /* 0xF0 */ + 0, 0, 0xCBEF, 0xFCDF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCA7, 0, 0, 0xD6E7, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF8C9, 0, 0, 0, 0, 0xE3D2, /* 0x00 */ + 0, 0xE3BD, 0, 0xCFE1, 0xF0C0, 0xECDA, 0, 0xDDD7, /* 0x10 */ + 0xFBF0, 0, 0, 0xECAC, 0, 0, 0, 0xF0A9, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xFAD7, 0xFBC1, /* 0x20 */ + 0, 0xD2C0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE5B0, 0, 0, 0, 0xEDE5, 0, 0, /* 0x30 */ + 0, 0, 0xCBAD, 0, 0xF9B0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xF7A5, 0, 0xCBAE, 0, 0xDAAF, 0, 0xD8B6, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xD3A7, 0xFBB2, /* 0x50 */ + 0, 0xFDC4, 0, 0xECAD, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xFBA1, 0, 0, 0, 0xE5E9, 0xE9EE, /* 0x60 */ + 0, 0xF3F4, 0xF8F3, 0xF0C1, 0xDEAF, 0xF8B0, 0, 0, /* 0x60 */ + 0xF3E0, 0xE7AF, 0, 0, 0, 0, 0, 0xDBAD, /* 0x70 */ + 0, 0xE6B5, 0, 0, 0xF9A8, 0, 0, 0xDDD8, /* 0x70 */ + 0xE8D9, 0xEFD6, 0, 0, 0, 0xD3E2, 0, 0xE2DF, /* 0x80 */ + 0, 0, 0xFCE0, 0xD7C8, 0xFDAD, 0, 0, 0, /* 0x80 */ + 0xDFEF, 0xCCD3, 0xD3F9, 0, 0, 0, 0, 0xD4F0, /* 0x90 */ + 0xDBC7, 0xDED5, 0, 0, 0, 0, 0xF0F4, 0, /* 0x90 */ + 0xD5D0, 0xE5D9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xFCC7, 0xDCD6, 0xE2E0, 0, 0, 0, 0xDAB0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xF3A3, 0, 0xD3EC, /* 0xB0 */ + 0, 0xF4CB, 0, 0, 0, 0xFDC5, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE3FD, 0, 0xF9B1, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xD0FB, 0xECDB, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xF5BC, 0xF2A4, /* 0xD0 */ + 0xD8CE, 0xD8CF, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xF5F7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF6E1, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xD2B7, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xFBEC, 0, 0xDDC8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4E8, /* 0x00 */ + 0, 0, 0xD2C1, 0, 0, 0, 0xF8D7, 0, /* 0x10 */ + 0, 0, 0, 0, 0xD6BB, 0xDED6, 0, 0, /* 0x10 */ + 0xF7BD, 0xECAE, 0, 0, 0, 0xD0E1, 0, 0xE0F5, /* 0x20 */ + 0xEAB3, 0, 0xCED6, 0, 0, 0, 0, 0xCCA5, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xECF6, 0xE2E1, 0xE3BE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xFCC8, 0, 0, /* 0x40 */ + 0xCDF0, 0, 0xF9F6, 0, 0, 0xDFF0, 0, 0, /* 0x50 */ + 0, 0xE5BF, 0, 0, 0, 0xCEBF, 0, 0, /* 0x50 */ + 0, 0, 0xFCE1, 0xEDB0, 0xFDD1, 0xF6BB, 0, 0, /* 0x60 */ + 0xF9CF, 0xEBDA, 0xCAC1, 0, 0xD2B8, 0xCDF1, 0, 0xE3D3, /* 0x60 */ + 0xFDE6, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE6ED, 0, 0, /* 0x80 */ + 0, 0xE3FA, 0, 0, 0xF0AA, 0xF9D0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xFCE2, 0, 0xF8A7, 0, /* 0x90 */ + 0, 0, 0xE1E5, 0xEEF9, 0, 0, 0, 0xE7F6, /* 0x90 */ + 0xEAED, 0, 0, 0xFCB4, 0xF5C2, 0, 0, 0xD7DC, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF0F5, 0, 0xDDE8, 0xD3ED, 0xF5FC, 0, 0xDABF, 0, /* 0xB0 */ + 0xCCFB, 0, 0, 0, 0xD3FA, 0xF4A4, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xEFD7, 0, 0xD4C3, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xFBE3, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xFBED, 0, 0xE0AD, 0, 0, 0xEAEE, /* 0xD0 */ + 0xFBB3, 0xE4C2, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF6E7, 0xD2DD, 0, 0xDFCC, 0, 0, 0xFCC9, 0, /* 0xF0 */ + 0, 0xE5A9, 0xE0F6, 0xF6B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1FE, 0, 0, 0, 0, 0xCBF0, 0, /* 0x00 */ + 0xEAEF, 0xEAF0, 0, 0, 0, 0xDAC0, 0xF8B4, 0xEBF2, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE4C3, 0, 0, /* 0x10 */ + 0, 0, 0xE9D7, 0xE4F1, 0, 0, 0, 0xCAEF, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xCED7, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xFCCA, 0, 0, 0, 0xF3E1, 0, 0, 0xCBC4, /* 0x30 */ + 0, 0, 0, 0, 0xE3E5, 0, 0xCBC5, 0xEAB4, /* 0x30 */ + 0, 0, 0xE9BD, 0, 0xD7C9, 0, 0, 0xEBDB, /* 0x40 */ + 0xEDB1, 0, 0xCCC3, 0xF7BE, 0xFCCB, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF8F4, 0, 0xD9B7, 0, 0, /* 0x50 */ + 0xF3D3, 0xF3D4, 0, 0, 0, 0xF7E4, 0, 0xF7D1, /* 0x50 */ + 0, 0, 0xD8B7, 0xCEB1, 0xCAC2, 0, 0, 0xFBB4, /* 0x60 */ + 0xCBC6, 0, 0, 0xF0F6, 0, 0, 0xD5E7, 0, /* 0x60 */ + 0xEAD0, 0, 0, 0, 0, 0, 0xCCD4, 0xCBAF, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF4AA, 0xE9AF, 0, /* 0x70 */ + 0, 0xF5C3, 0xE9D8, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xDDE9, 0, 0, 0, 0xF1F3, 0, /* 0x80 */ + 0xD5FB, 0xDEBB, 0, 0, 0xF4FB, 0, 0, 0, /* 0x90 */ + 0xFDF3, 0xFDF2, 0xF7A6, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xDDC9, 0, 0, 0xD4D3, /* 0xA0 */ + 0, 0xCCA8, 0, 0xDAC1, 0xCCD5, 0, 0xD9E4, 0, /* 0xA0 */ + 0, 0, 0xFACA, 0, 0, 0, 0xE5E3, 0, /* 0xB0 */ + 0, 0, 0xD3BC, 0, 0, 0, 0xCAF0, 0, /* 0xB0 */ + 0, 0, 0, 0xD0C4, 0, 0, 0, 0xCAD0, /* 0xC0 */ + 0xFAAB, 0xEBEB, 0xE7F8, 0xD9E5, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xD1D7, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF3A4, 0, 0, 0, 0xD4FB, 0xFCE3, /* 0xF0 */ + 0xFAD8, 0, 0xF3D5, 0, 0xCFAB, 0, 0, 0xEBF3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5FC, 0, 0, 0, 0, 0, 0, 0xD3D4, /* 0x00 */ + 0xCDFC, 0, 0xD9E6, 0, 0xE2F9, 0xE2A1, 0xEBD4, 0, /* 0x00 */ + 0xE0F7, 0xE4B2, 0xCCFC, 0, 0, 0, 0xFBE4, 0, /* 0x10 */ + 0, 0, 0xF4AB, 0, 0, 0, 0, 0xD0BD, /* 0x10 */ + 0, 0xCAF1, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEFB8, 0, 0, 0, 0xD7C0, 0, /* 0x20 */ + 0xEEFA, 0xFDF4, 0, 0, 0xD3E3, 0, 0xFBC2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xD5E8, 0xDBAE, /* 0x30 */ + 0xE1B6, 0xF8B7, 0, 0, 0, 0, 0, 0xE0BF, /* 0x40 */ + 0xFBC3, 0xDDEA, 0, 0xE2A2, 0, 0xEEA6, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF6E8, 0, 0, 0, 0, /* 0x50 */ + 0xF6F5, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xDDCA, 0, /* 0x60 */ + 0, 0xD0E2, 0, 0, 0, 0, 0xDDA6, 0, /* 0x70 */ + 0, 0xDDEB, 0, 0, 0xE4F9, 0, 0, 0xE3AF, /* 0x70 */ + 0xD0FC, 0, 0, 0, 0xF4FC, 0, 0, 0, /* 0x80 */ + 0, 0xCCBC, 0xF7EA, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE5E4, 0xDFF1, 0, 0, 0xF7E1, 0, 0xF9F7, /* 0x90 */ + 0xEFB9, 0, 0, 0xF8D8, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF9A9, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xF8D9, 0, 0, 0, 0xEEBD, 0, 0, /* 0xB0 */ + 0, 0xD8C6, 0, 0, 0xE4E3, 0xF5CE, 0, 0, /* 0xB0 */ + 0, 0, 0xDDD9, 0, 0, 0, 0, 0xD9E7, /* 0xC0 */ + 0xD2B9, 0xD5C3, 0, 0, 0xDAE5, 0xDAD0, 0, 0xD1D9, /* 0xC0 */ + 0xCED8, 0, 0xCBDE, 0xF4AC, 0xDAFB, 0, 0xF6E9, 0xE8F3, /* 0xD0 */ + 0xCFAC, 0xF0F0, 0, 0xF4FD, 0xDBC8, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xCEC0, 0xE3D4, 0xD1CF, 0xF1F5, /* 0xE0 */ + 0, 0xCDF2, 0, 0xCFEB, 0, 0, 0, 0xCDB8, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xE3A6, 0xD1DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF2A5, 0, 0, 0, 0, 0, 0xF2A6, /* 0x00 */ + 0, 0xE4CE, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xD3FB, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xF1A9, 0, 0, 0, 0xF2C9, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xEFD8, 0xE6C9, 0, 0xD8B8, 0xFAF3, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF3B5, 0, 0, 0xF8A4, 0, 0, 0xD1F3, /* 0x40 */ + 0xE6C8, 0, 0, 0, 0, 0xF8DA, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xDCE9, /* 0x60 */ + 0xDED7, 0, 0, 0, 0, 0, 0xCBDF, 0, /* 0x60 */ + 0, 0, 0xCFEC, 0, 0, 0, 0, 0xF4DF, /* 0x70 */ + 0, 0, 0xD1F4, 0xD2BA, 0, 0, 0, 0xDFF2, /* 0x70 */ + 0, 0, 0, 0xE1B7, 0, 0, 0, 0, /* 0x80 */ + 0xE2A3, 0xD3FC, 0, 0, 0xEDE6, 0, 0, 0, /* 0x80 */ + 0, 0, 0xDBC9, 0, 0, 0, 0xE4FA, 0, /* 0x90 */ + 0xCFDE, 0, 0, 0xCED0, 0, 0, 0, 0, /* 0x90 */ + 0xD5D3, 0xF3F5, 0xF7AE, 0, 0, 0xEFC8, 0, 0xCDF3, /* 0xA0 */ + 0xF5CF, 0xE5F3, 0xF0C2, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xCAD1, 0, 0, 0, 0xEAF1, 0, 0xD0A6, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9DA, /* 0xC0 */ + 0xF0AB, 0, 0, 0, 0, 0, 0xEBE7, 0, /* 0xD0 */ + 0, 0, 0xE5C0, 0xFCB5, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE4C4, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xCCA9, 0xFDC6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xEAB5, 0, 0xE5AA, 0xDFBA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1DF, 0, 0xDAD1, /* 0x00 */ + 0, 0, 0, 0, 0xE1B8, 0, 0xE8F4, 0xD3FD, /* 0x10 */ + 0, 0, 0, 0, 0xE2A4, 0, 0, 0, /* 0x10 */ + 0, 0, 0xF2CA, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xDAE6, 0xF7B3, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xFDCD, 0, 0, 0, 0xF3B6, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xEED7, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF5C4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xD8A4, 0, 0, 0, 0, 0, 0xF2A7, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xD9B8, 0xD9B9, 0xEFC9, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xD6CE, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF7CB, 0xDFAE, 0xE8F5, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xD2B5, 0, 0, 0, 0xD3D5, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF4CC, 0xDAFC, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD9E8, 0, 0xF7EB, 0xF5C9, 0, /* 0xA0 */ + 0xF3BC, 0, 0xDAD2, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xD3B5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE8B6, 0, 0, 0xD6CF, 0xF4BA, 0, 0xF7C9, /* 0xC0 */ + 0, 0, 0xCCAA, 0, 0, 0xF0C3, 0xCCD6, 0, /* 0xC0 */ + 0, 0, 0xD0D3, 0, 0xD3BD, 0, 0, 0, /* 0xD0 */ + 0xDBFB, 0, 0xCBE0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xD3E4, 0xF6F7, 0, 0, 0xD5BA, 0xF3CD, 0xCBE1, /* 0xE0 */ + 0, 0, 0, 0, 0xEBF4, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF4AD, 0, 0xFCAA, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xF7EC, 0, 0, 0, 0xE8F6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDAE7, 0, 0, 0, 0xF7CC, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE5C1, 0, 0, 0, 0, 0xE0EE, 0, 0, /* 0x10 */ + 0, 0, 0, 0xD5FD, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xCEE6, 0xFCAB, 0xD5BB, 0, 0, 0xF2A8, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xE2A5, 0xCDB9, /* 0x30 */ + 0xEAF2, 0xCBC7, 0, 0xCDF4, 0, 0, 0xDBAF, 0xEFD9, /* 0x30 */ + 0, 0, 0, 0, 0, 0xCDBA, 0, 0, /* 0x40 */ + 0xFCF9, 0, 0, 0, 0, 0xDFF3, 0xCEE7, 0xDAC2, /* 0x40 */ + 0, 0xCFAD, 0, 0, 0, 0, 0xE7F9, 0xF8A8, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xF3E2, 0, /* 0x50 */ + 0, 0, 0xCAF2, 0xDFA4, 0, 0, 0xD4C4, 0, /* 0x60 */ + 0, 0, 0, 0, 0xCCD7, 0xE5C2, 0, 0, /* 0x60 */ + 0, 0, 0xCDBB, 0, 0xEFDA, 0xEED8, 0, 0xDDA7, /* 0x70 */ + 0xE2A6, 0, 0, 0, 0, 0, 0xE0C0, 0, /* 0x70 */ + 0, 0, 0xD6B0, 0xF8CA, 0, 0xFCFA, 0, 0xD9FE, /* 0x80 */ + 0, 0, 0, 0, 0xDEB0, 0, 0, 0, /* 0x80 */ + 0xDDEC, 0xDAE8, 0, 0, 0, 0, 0, 0xD4E0, /* 0x90 */ + 0, 0xD6F9, 0, 0xCDD7, 0xDED8, 0, 0, 0xF2F8, /* 0x90 */ + 0, 0xE4D6, 0, 0, 0xD0C5, 0xF4AE, 0, 0xDDA8, /* 0xA0 */ + 0, 0, 0, 0xEDC5, 0xF3D6, 0, 0, 0xDED9, /* 0xA0 */ + 0xE3E6, 0, 0, 0, 0, 0, 0, 0xD3A8, /* 0xB0 */ + 0, 0xDBB0, 0, 0, 0xE5DA, 0xE3BF, 0, 0, /* 0xB0 */ + 0, 0xDBB1, 0, 0, 0, 0xD5E9, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE0C1, 0xEFDB, 0, 0, 0xF0E9, /* 0xC0 */ + 0, 0, 0xD7B2, 0, 0, 0, 0, 0xD0FD, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD9E9, 0, 0, 0xD0FE, 0, 0xECED, 0xD3A9, 0, /* 0xE0 */ + 0xF2A9, 0xF0C4, 0, 0, 0xE2E2, 0xE9EF, 0, 0, /* 0xE0 */ + 0, 0xF9D1, 0, 0, 0xE9D9, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xE8DA, 0xDAC3, 0xDAC4, 0xD4C5, 0, 0xE7FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDE0, 0xE3B0, /* 0x00 */ + 0, 0xDBB2, 0xFBC4, 0, 0xF3E3, 0, 0xD9A5, 0xFBE7, /* 0x00 */ + 0xDDCB, 0xD0D4, 0, 0xE6B6, 0xE0AE, 0xFDDA, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xDCB5, 0xE0F8, /* 0x10 */ + 0xE7B1, 0, 0, 0, 0, 0xF5F0, 0, 0xD8DC, /* 0x20 */ + 0xEDC6, 0, 0, 0, 0, 0xE1B9, 0, 0xE3C0, /* 0x20 */ + 0xF9C0, 0xE9F0, 0, 0, 0xD9DB, 0, 0xF3E4, 0, /* 0x30 */ + 0, 0, 0xDCB6, 0xE4E9, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF0C5, 0xE3C1, 0xFCCC, 0xFCCD, 0, 0, 0, /* 0x40 */ + 0, 0xF2CB, 0, 0xF2CC, 0, 0, 0, 0xE4CF, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF1DB, 0, 0xFAD9, 0, 0xF1B8, 0xFDF5, 0xE0F9, /* 0x50 */ + 0, 0, 0, 0, 0xE7FB, 0xFCB7, 0xFCE4, 0xFBC5, /* 0x60 */ + 0xE3E7, 0xD8B9, 0, 0xF6F8, 0, 0, 0xDCC5, 0xCCD8, /* 0x60 */ + 0, 0, 0, 0xE0AF, 0xF4E7, 0, 0xEFDC, 0xCFFC, /* 0x70 */ + 0xEFDD, 0, 0xF2AA, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xFDBE, 0, 0, 0xCAAC, /* 0x80 */ + 0xFDBB, 0xFDC7, 0, 0, 0, 0, 0xE7B2, 0, /* 0x80 */ + 0xEAD1, 0xDFF4, 0, 0, 0, 0, 0xD1EC, 0xE4DE, /* 0x90 */ + 0xE5C3, 0, 0, 0, 0, 0xD9A6, 0, 0, /* 0x90 */ + 0xCDBC, 0, 0xF3E5, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xEDD5, 0, 0, 0xD9BA, 0, /* 0xA0 */ + 0, 0, 0xEDE7, 0xFBB5, 0xF8EC, 0, 0, 0, /* 0xB0 */ + 0, 0xE0E7, 0, 0xCCD9, 0, 0, 0xD4C6, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE7A5, 0, 0xD5F5, 0xD3BE, /* 0xC0 */ + 0, 0xFCFB, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE4F2, 0, /* 0xD0 */ + 0, 0xDFF5, 0, 0, 0xE8F8, 0xF8ED, 0, 0, /* 0xD0 */ + 0xCEC7, 0, 0, 0, 0, 0, 0xFDF6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE8D8, 0, 0xCDD8, 0xE7D6, 0xCCDA, 0, 0, 0xCAE3, /* 0xF0 */ + 0xDFF6, 0xF0C7, 0xF0C6, 0, 0xD8BA, 0, 0xF1F4, 0xF4F0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5CC, 0, 0, 0xFCE5, 0, 0, 0, 0, /* 0x00 */ + 0xEAC5, 0xEAF3, 0, 0xDDDB, 0, 0xDCD7, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xDEFD, 0xF2F9, 0, 0xD5C7, /* 0x10 */ + 0, 0, 0, 0xD8D0, 0, 0xF0C8, 0xD1A1, 0xD1A2, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xD9D4, 0xD6E8, /* 0x20 */ + 0xD9CA, 0, 0xDAB1, 0xD8C7, 0xDCE2, 0xF3CE, 0xF5F4, 0, /* 0x20 */ + 0, 0xF1B9, 0, 0, 0xDAD3, 0, 0xF6EA, 0, /* 0x30 */ + 0, 0, 0xCFF5, 0, 0, 0xFDAE, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xCAD2, 0, /* 0x40 */ + 0, 0xDFB4, 0, 0, 0, 0, 0xD7DD, 0xFABA, /* 0x40 */ + 0xEEA7, 0xF5BD, 0, 0xF8F5, 0, 0, 0xEDE8, 0, /* 0x50 */ + 0, 0, 0, 0, 0xD4E1, 0, 0xD1A3, 0xE1D6, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF9F8, 0, 0xDBCA, /* 0x60 */ + 0xCBF9, 0xD4D4, 0, 0xD9DC, 0, 0xEEBE, 0, 0xF7ED, /* 0x70 */ + 0, 0, 0, 0xD2EE, 0, 0, 0xE1E6, 0xF7F9, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xDDED, /* 0x80 */ + 0, 0xE8DB, 0, 0xDBB3, 0, 0, 0, 0xD1F7, /* 0x80 */ + 0xE0B0, 0, 0, 0xD4E2, 0, 0xF6D7, 0, 0xD7F9, /* 0x90 */ + 0, 0, 0xD8DD, 0, 0xCDFD, 0xF2AB, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCDBD, /* 0xA0 */ + 0xF8C2, 0, 0, 0xF2AC, 0, 0, 0xCAAD, 0xCAAE, /* 0xB0 */ + 0xCFAE, 0, 0, 0, 0, 0, 0xE3C2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xDCB7, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xDBDA, /* 0xC0 */ + 0xD9BB, 0xCAF3, 0xF6D3, 0xE6F8, 0xEAF5, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xEAF6, 0, 0, 0xF6F9, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xCFAF, 0, 0, 0xCAD3, 0, 0, 0xCAAF, /* 0xE0 */ + 0xD2B0, 0xF1BA, 0, 0xD7B3, 0xE3C3, 0xF3FD, 0xDEDA, 0, /* 0xF0 */ + 0, 0, 0, 0xDEDB, 0, 0, 0xEFDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2E3, 0xEEFB, 0, 0, 0xDFF7, 0xD7CA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xCEE8, 0xDBDB, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF1BB, 0, 0, 0, 0, 0xE9F1, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xFAB7, 0xD0C6, 0, 0, 0xCCAB, 0xEEA8, 0, 0, /* 0x30 */ + 0xCBFA, 0xF9F9, 0xCCFD, 0xD3FE, 0, 0, 0, 0, /* 0x40 */ + 0xE4D0, 0, 0, 0, 0, 0, 0xF2EE, 0, /* 0x40 */ + 0xD4D5, 0xDFCD, 0, 0xFCB8, 0xD1D0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF2CD, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF7D2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xCAD4, /* 0x70 */ + 0, 0xD5D9, 0, 0, 0, 0xD8DE, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xCDD9, /* 0x80 */ + 0, 0, 0, 0xEEA9, 0xF6BC, 0, 0, 0xCCDB, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF0C9, 0, 0xFCFC, /* 0x90 */ + 0, 0xE8C9, 0xF4FE, 0, 0, 0, 0, 0xE7FC, /* 0xA0 */ + 0xD7DE, 0, 0, 0, 0, 0xDEDC, 0, 0xF0AC, /* 0xA0 */ + 0xCCFE, 0xCDE1, 0, 0xE1BA, 0, 0xDBEF, 0xDAB2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xD1A5, 0xDCB8, 0, 0, /* 0xC0 */ + 0, 0xD8F6, 0, 0xD1A4, 0, 0xCDE2, 0, 0, /* 0xC0 */ + 0, 0, 0xDCEA, 0, 0, 0xF0F7, 0, 0xF0CA, /* 0xD0 */ + 0xD0BE, 0, 0xDDDC, 0, 0, 0, 0, 0xD4D6, /* 0xD0 */ + 0xD3D6, 0, 0, 0, 0, 0, 0, 0xEDD0, /* 0xE0 */ + 0xCDA1, 0, 0, 0, 0, 0, 0xDFB5, 0, /* 0xE0 */ + 0, 0, 0xDFF8, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xD4A1, 0xCEB2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE8CA, 0, 0, 0, 0, 0xEBF5, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE3D5, 0xF5D0, 0, /* 0x00 */ + 0, 0, 0xF5A1, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9A7, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE5AB, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE6CB, 0, 0xF5F1, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xE5C5, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF9A3, 0xE0DB, 0xF6EB, 0, 0xCBF1, /* 0x50 */ + 0, 0xD9EA, 0xF5A2, 0, 0, 0, 0xD7D1, 0, /* 0x50 */ + 0xD1F8, 0xEAF8, 0xEAF9, 0xDAB3, 0, 0, 0, 0, /* 0x60 */ + 0xEFDF, 0, 0, 0xF1EF, 0, 0xE5F6, 0xEEBF, 0xE2E4, /* 0x60 */ + 0, 0, 0, 0, 0, 0xD0BF, 0, 0xFAAC, /* 0x70 */ + 0xF5D1, 0xE7B3, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xE9BE, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF2CE, 0xDBB4, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xFCCE, 0, 0xDDEE, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xE7B4, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xD7B4, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF7B4, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xCDBE, 0, 0xDAE9, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xCFB0, 0xF7D9, 0xF3E6, 0, 0, /* 0xC0 */ + 0xCED9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xCEAA, 0, 0xCBC8, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xD0A7, 0, 0xF0CB, 0, 0xD0C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4C5, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xDBE0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xD5DA, 0, 0xD7A7, 0, 0, 0, 0xEEC0, /* 0x10 */ + 0, 0xF8F6, 0, 0, 0, 0, 0xF5D2, 0xEDE9, /* 0x10 */ + 0, 0xD9BC, 0, 0xE5C6, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF5A3, 0, 0, /* 0x30 */ + 0xDAD4, 0xE2A7, 0xFBFC, 0, 0, 0xF1DC, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xCAF4, 0, 0, 0, /* 0x40 */ + 0xE8FA, 0, 0, 0xCEE9, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xE9F8, 0xE2E5, 0, 0, 0, 0, /* 0x50 */ + 0xD0B9, 0xD4F2, 0, 0, 0, 0, 0, 0xD1A6, /* 0x50 */ + 0, 0xDFCE, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xFCF4, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xD3AA, 0, 0, 0, 0xCCAC, 0, 0, 0, /* 0x80 */ + 0, 0xEFE0, 0, 0, 0, 0xE5E5, 0xD0D5, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xDBFC, /* 0x90 */ + 0, 0, 0, 0, 0xFCE6, 0, 0, 0, /* 0x90 */ + 0, 0, 0xCBFE, 0xEDEA, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xDEB1, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF9E3, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xD4A2, 0xCFF6, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xD6D0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xD5EA, 0xF1EE, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xFACB, 0, /* 0xF0 */ + 0, 0, 0, 0xE5A1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5B1, 0, 0, 0, /* 0x00 */ + 0, 0, 0xCFED, 0, 0xEDEB, 0, 0, 0, /* 0x00 */ + 0, 0, 0xD5B2, 0, 0, 0, 0xD5BC, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xFDE2, 0xF3AD, 0, 0xFDDB, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE9B0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xD1A7, 0, 0, 0xFDE3, 0xCEB3, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xFDE4, 0xFACE, /* 0x40 */ + 0, 0, 0, 0, 0xCAB0, 0, 0xF7A7, 0, /* 0x40 */ + 0xCFB1, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6A2, /* 0x50 */ + 0, 0xFCB6, 0xF2AD, 0xEFE1, 0xF3AE, 0xDCC6, 0xD9EB, 0, /* 0x60 */ + 0, 0, 0xE8E0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE1A8, 0, 0, 0, 0, 0xD5F6, /* 0x70 */ + 0xCFFD, 0, 0, 0xDEDD, 0, 0, 0, 0xD9D1, /* 0x70 */ + 0, 0, 0, 0xE4EA, 0xF2CF, 0, 0xF7BF, 0, /* 0x80 */ + 0, 0xE2E6, 0xE2A8, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xE3D6, 0, /* 0x90 */ + 0xEDD1, 0, 0, 0, 0, 0, 0xE9F9, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xD6B1, 0xDEB2, /* 0xA0 */ + 0, 0, 0xE0E8, 0, 0, 0xD3AB, 0, 0xEBDC, /* 0xB0 */ + 0, 0, 0xDFAF, 0, 0xCAC3, 0, 0, 0xEEFC, /* 0xB0 */ + 0, 0xFDC3, 0, 0, 0, 0xEBF6, 0xCFB2, 0, /* 0xC0 */ + 0, 0, 0, 0xD9EC, 0, 0xD9BD, 0, 0xD8DF, /* 0xC0 */ + 0, 0, 0xD4B8, 0xEBBE, 0xDDEF, 0, 0xDDF0, 0xDDF1, /* 0xD0 */ + 0xDDF2, 0, 0, 0xD9BE, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xFBC6, 0xCFB3 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEEFD, 0, 0, 0, 0, 0, 0, 0xE4AB, /* 0x00 */ + 0, 0xDAC5, 0, 0xD8EC, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xD1A8, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE2A9, 0, 0, 0xDEBC, /* 0x30 */ + 0xE7B5, 0, 0, 0, 0, 0, 0xDBF0, 0, /* 0x30 */ + 0xEFE2, 0xF1F0, 0xCFB4, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xDBF1, 0, /* 0x40 */ + 0xE0B1, 0, 0, 0, 0, 0xDFA5, 0, 0xF9D2, /* 0x50 */ + 0, 0, 0xE7FD, 0, 0, 0xE6A3, 0xFBF1, 0xCBB0, /* 0x50 */ + 0xF2AE, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xCDE7, 0, 0xE8DC, 0, 0, 0xE7D7, 0, 0, /* 0x60 */ + 0xF7C0, 0, 0xD0E3, 0, 0, 0, 0xDAA1, 0, /* 0x70 */ + 0, 0, 0xCCBD, 0, 0, 0xD1A9, 0xDDCC, 0, /* 0x70 */ + 0, 0xE3FE, 0xD1AA, 0xE8AA, 0, 0xEAB6, 0xF9FA, 0xE6CC, /* 0x80 */ + 0xF6D8, 0, 0, 0, 0xD4C7, 0, 0, 0, /* 0x80 */ + 0xD9CB, 0, 0xD9D2, 0xD3CB, 0xD8F7, 0xDAA9, 0xF5F8, 0, /* 0x90 */ + 0, 0xDEDE, 0xF2AF, 0xF8A9, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD8C8, 0, 0, 0xEEC1, 0, /* 0xA0 */ + 0, 0, 0, 0xF9C1, 0, 0, 0, 0, /* 0xB0 */ + 0xDDF3, 0xEAFA, 0, 0xF6BD, 0xE1BB, 0xCDBF, 0xF4D4, 0xE6CD, /* 0xB0 */ + 0, 0xFCCF, 0xFBA2, 0, 0xE0DC, 0, 0, 0, /* 0xC0 */ + 0, 0xF4BB, 0xDAD5, 0, 0xF9B2, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xFBF2, 0, 0xDBF6, 0, 0xDEDF, /* 0xD0 */ + 0, 0, 0, 0xDBF2, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF8DC, 0xF7EE, 0xEBE8, 0, 0xD2FA, 0, 0, /* 0xE0 */ + 0xF1BC, 0, 0, 0xFADA, 0, 0, 0xDAEA, 0xDAC6, /* 0xE0 */ + 0xF7C1, 0, 0, 0xE7B6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5C7, 0xD6AC, 0, 0, 0, /* 0x00 */ + 0, 0xDCC7, 0, 0, 0, 0, 0, 0xE1A9, /* 0x10 */ + 0, 0xE2AA, 0, 0xD5A6, 0, 0, 0xD4D7, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF2D0, 0, 0xEAFB, /* 0x20 */ + 0, 0xE0DD, 0xFBF3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF1BD, 0, 0, 0xE2E7, 0xFDD7, 0, /* 0x30 */ + 0xCEC8, 0xEAB7, 0, 0xFCC0, 0, 0xFDE7, 0xF7EF, 0, /* 0x30 */ + 0, 0xD7B5, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xEFBA, 0xF1DD, 0, 0xDEB3, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE8CB, 0, 0, 0xF8DD, 0, /* 0x60 */ + 0, 0xFBC7, 0xD5C8, 0, 0xD7DF, 0, 0xDDA9, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE9B1, 0, 0, 0xFAAD, /* 0x70 */ + 0xF6D9, 0xFAF4, 0, 0, 0, 0, 0, 0xF8AA, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE6EE, 0, 0xCCDC, /* 0x80 */ + 0xE1BC, 0xE0EF, 0, 0, 0xE9BF, 0xFCFD, 0xE6CE, 0, /* 0x80 */ + 0, 0xE1D7, 0, 0xE6CF, 0, 0xF4F1, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE4F3, /* 0xA0 */ + 0, 0, 0xE4FB, 0, 0, 0xF9E4, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xEFE3, 0, 0, 0xCFEE, 0xF6BE, 0xE0B2, 0xFCFE, 0xD1AB, /* 0xC0 */ + 0, 0, 0, 0xD7FA, 0, 0, 0, 0xFBC8, /* 0xC0 */ + 0, 0xE2D7, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD4A3, 0xF0F8, 0xD7A8, 0, 0, 0, 0xE1E7, 0, /* 0xD0 */ + 0, 0xD3BF, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xEFE4, 0, 0xD7C5, 0xEBE2, 0, 0, 0xFCE7, 0, /* 0xE0 */ + 0, 0xE4A2, 0, 0xE2E8, 0, 0xE6D0, 0, 0xFBE8, /* 0xF0 */ + 0xF4E8, 0xE5F4, 0xF4BC, 0xF4D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDFB6, /* 0x10 */ + 0, 0xFCB9, 0xEEC2, 0xCAF5, 0, 0, 0, 0xEFE5, /* 0x10 */ + 0xCBE2, 0xD4A4, 0, 0xDEE0, 0xDAFD, 0xE4C6, 0xE8BE, 0, /* 0x20 */ + 0, 0, 0, 0xE0DE, 0xF6B4, 0xEAD2, 0, 0xF9FB, /* 0x20 */ + 0, 0, 0xE0C2, 0, 0xCAE4, 0, 0xE7B7, 0, /* 0x30 */ + 0xEAFD, 0, 0xD9DD, 0, 0xDAB4, 0xEEAA, 0xFBE9, 0, /* 0x30 */ + 0, 0, 0, 0xDBCB, 0xDAB5, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF1BE, 0, 0, 0xD3AC, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xFBC9, 0, /* 0x50 */ + 0xDFCF, 0, 0, 0xD3C0, 0xE3D7, 0, 0xEFE6, 0xFCD0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9C0, /* 0x60 */ + 0, 0, 0, 0xF5D3, 0, 0, 0xECDC, 0xF7B7, /* 0x60 */ + 0, 0, 0xEAB8, 0xD1F9, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xDCC8, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEAB9, 0, 0, 0, 0, 0, 0xF1DE, 0, /* 0x90 */ + 0, 0, 0, 0, 0xD7B6, 0xCFB5, 0, 0xD9A8, /* 0x90 */ + 0, 0, 0xECEE, 0, 0, 0xDDAA, 0, 0, /* 0xA0 */ + 0, 0, 0xCDA2, 0xE8AE, 0, 0, 0, 0xE1BD, /* 0xA0 */ + 0, 0xF2D1, 0, 0, 0, 0, 0xE9C1, 0, /* 0xB0 */ + 0, 0, 0xD2FC, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xDBB5, 0, 0xF3E7, 0xD8FE, 0, 0, /* 0xC0 */ + 0, 0xFCD1, 0, 0xEDB2, 0xF4AF, 0, 0xFBA3, 0, /* 0xC0 */ + 0, 0xFCC1, 0, 0xEEAB, 0xD4A5, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF4F2, /* 0xE0 */ + 0, 0, 0, 0, 0xEED9, 0, 0, 0, /* 0xF0 */ + 0xFBCA, 0, 0, 0, 0, 0, 0xCDE3, 0xD8BB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5DB, 0xF8F7, 0, 0, 0, 0xF6D4, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xD7A9, /* 0x00 */ + 0, 0xCBC9, 0, 0, 0xE6D1, 0xF0CC, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xD8AE, 0, 0xF9D3, 0xD5FE, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xD8BC, 0xF2B0, 0, 0, 0, /* 0x20 */ + 0, 0xE2AB, 0xF3E8, 0, 0, 0, 0, 0, /* 0x30 */ + 0xEFC2, 0, 0, 0, 0, 0, 0, 0xEDEC, /* 0x30 */ + 0, 0xE7B8, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xDAFE, 0, 0, 0xCCBE, 0, 0, 0xF2FC, /* 0x50 */ + 0xDAEB, 0, 0xE2D8, 0xEDD6, 0, 0, 0xD6D1, 0xE0B3, /* 0x50 */ + 0, 0, 0xFCD2, 0, 0xEBC8, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xD3C1, 0xF0CD, 0, /* 0x60 */ + 0xCFF7, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xEDD2, 0, 0xD4D8, 0xDCC9, 0xD7F1, 0, /* 0x70 */ + 0, 0xDFBB, 0, 0, 0xF3A5, 0, 0, 0, /* 0x80 */ + 0xF4CD, 0, 0, 0, 0, 0xF1BF, 0xF8B1, 0, /* 0x80 */ + 0xE9FA, 0, 0, 0, 0xFBCB, 0, 0, 0xCAD5, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF9D4, 0xF7CA, 0, 0, 0xD6C8, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xFCE8, 0xF3BD, /* 0xA0 */ + 0, 0xEEFE, 0, 0xE7FE, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xD3C2, 0, 0, 0, 0, 0xD3B6, 0, /* 0xB0 */ + 0xCCAD, 0xF6FA, 0xD6B2, 0xD2D8, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE7D8, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE3A5, 0, 0, /* 0xD0 */ + 0, 0, 0xE7B9, 0, 0, 0, 0, 0xF0AD, /* 0xD0 */ + 0xFBCC, 0xEBA1, 0, 0, 0xD4A6, 0, 0, 0, /* 0xE0 */ + 0, 0xFBCD, 0, 0xD5BD, 0xF1DF, 0, 0, 0xF6FB, /* 0xE0 */ + 0, 0xDEB4, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xD5EB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5C8, 0, 0, 0, 0xFBA4, 0xD4B9, 0, /* 0x00 */ + 0, 0xDEE1, 0, 0xE4A3, 0, 0, 0, 0xD7B7, /* 0x00 */ + 0, 0xF8EE, 0, 0, 0, 0xDEB5, 0, 0, /* 0x10 */ + 0xD6D2, 0, 0xF9D5, 0xE7BA, 0xEBD5, 0xD5F7, 0xEFE7, 0xE1BE, /* 0x10 */ + 0, 0, 0, 0xFAAE, 0, 0, 0, 0xD6E9, /* 0x20 */ + 0xD6EE, 0, 0, 0, 0, 0, 0, 0xE7BB, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xECCB, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xD5B3, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xCEB4, 0, 0, 0, /* 0x40 */ + 0xFBA5, 0xE1EE, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF7A8, 0, 0, 0, 0, 0xFBCE, 0, 0, /* 0x50 */ + 0, 0, 0, 0xD8BD, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xFBFD, 0, 0, 0, 0, /* 0x60 */ + 0xFCE9, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xCFB6, 0, 0, 0, 0xEDC7, 0xEEAC, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xCCDD, 0, 0, /* 0x80 */ + 0, 0, 0xF6A7, 0, 0, 0, 0xE6FA, 0, /* 0x80 */ + 0, 0, 0xF5A4, 0, 0, 0, 0, 0, /* 0x90 */ + 0xFDDC, 0xEDB3, 0xCEC9, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xEFE8, 0, 0, 0xE1BF, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xFADB, 0xCBE3, 0xF7A9, 0, 0xFBA6, /* 0xA0 */ + 0, 0, 0, 0xDCB9, 0, 0, 0, 0xF1C0, /* 0xB0 */ + 0xEDC8, 0xEFC3, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xD6AD, 0, 0, 0xFDCE, 0, 0, 0, 0xE8A1, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xFBF4, 0xD5A7, 0, 0, 0, 0xF1F6, 0, 0xE6D3, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xCCDE, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xF8B2, 0, 0, 0, 0xDCEB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFDB6, 0, 0, 0, /* 0x00 */ + 0, 0xE5EA, 0, 0, 0xF1E0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xDBCC, 0xDDCD, 0, 0, 0, 0xD4C8, 0, /* 0x10 */ + 0, 0xD9ED, 0, 0, 0, 0, 0xF5A5, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE6FB, 0, 0, 0, 0, 0, 0xE6D4, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xFDC8, /* 0x40 */ + 0, 0xD6A1, 0xFDBF, 0, 0xFCD3, 0, 0xEFA1, 0, /* 0x40 */ + 0xE7BC, 0, 0, 0, 0, 0, 0xD1EE, 0, /* 0x50 */ + 0, 0xE6D5, 0, 0, 0xE9F2, 0, 0xDFB0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xD8E0, 0xFCBA, 0xFDAF, 0xF0CE, /* 0x60 */ + 0, 0xDBE1, 0, 0, 0xE5C9, 0, 0xEDB4, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE0C3, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xE3D8, 0, 0, 0, /* 0x80 */ + 0, 0xE9FB, 0xEAA8, 0, 0, 0, 0, 0xFDB7, /* 0x80 */ + 0, 0, 0xFBA7, 0, 0xE9C2, 0, 0, 0, /* 0x90 */ + 0, 0xFDF7, 0, 0, 0, 0, 0, 0xE2D9, /* 0x90 */ + 0, 0, 0xDCEC, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE8A2, 0, 0, 0, /* 0xA0 */ + 0, 0xE6F0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xFDF8, 0xFDF9, 0, 0, 0, 0xF6BF, 0, /* 0xB0 */ + 0, 0xE7A7, 0, 0xE6D7, 0, 0, 0, 0, /* 0xC0 */ + 0xD4F3, 0xD4C9, 0, 0, 0, 0, 0xD6FA, 0, /* 0xC0 */ + 0xD7F2, 0, 0xE1C0, 0, 0xDBE2, 0xE6D8, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7BD, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF0CF, 0xF3BE, 0xE2AC, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF5B7, 0xE0F0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xFDB8, 0xE3E8, 0, 0xD4A7, 0xE8FC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFAD2, 0, 0, 0, 0, 0, 0xF8EF, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xD6D3, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xD5B4, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF0D0, 0, 0xF7F0, 0xEEB3, 0, 0, /* 0x20 */ + 0xEABA, 0, 0xEAD3, 0, 0, 0xEDC9, 0xDDAB, 0, /* 0x30 */ + 0, 0, 0xE5AC, 0xFDA1, 0, 0xDFD0, 0xECB3, 0, /* 0x30 */ + 0xDFD1, 0, 0, 0, 0, 0, 0xEDED, 0xF8B8, /* 0x40 */ + 0xF7FA, 0, 0, 0, 0xF8AB, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF4E0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xD4BA, 0xE4B3, 0, 0xE9DA, 0, 0xDEB6, 0, 0xD9BF, /* 0x50 */ + 0, 0xD9C0, 0xD6EF, 0, 0, 0, 0, 0xD9CC, /* 0x60 */ + 0, 0xDAAA, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xDFE5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF7E5, 0, 0, 0, 0xCCB2, 0, 0, /* 0x70 */ + 0xDFF9, 0xD7E0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xD4BB, 0, 0, 0, 0, 0xFDFA, /* 0xA0 */ + 0, 0, 0, 0, 0xCCB3, 0, 0, 0xDBF3, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xDFD2, 0, 0xCECA, 0, 0xEEDA, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE4E4, 0, /* 0xC0 */ + 0xFBCF, 0, 0, 0, 0, 0, 0, 0xCFB7, /* 0xD0 */ + 0, 0xEEC3, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xCEEA, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE2AD, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xD7E1, 0xFAF5, 0, 0, 0xD5C9, 0xF8AC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE7D9, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF3E9, 0, /* 0x10 */ + 0, 0, 0, 0xD8ED, 0xE3C4, 0xF0F1, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE8E5, 0, 0, /* 0x20 */ + 0, 0xE0FA, 0xEEC4, 0xD9DE, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xEBA2, 0xEBA3, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xFCC2, 0xEABB, /* 0x30 */ + 0, 0, 0, 0, 0xE8AB, 0xDEE2, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEDEF, 0, 0xE8A3, 0, 0, 0, 0, 0xCFF1, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xD4BC, 0, 0xFCEA, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE7BE, 0, 0xFCF2, 0, 0, 0xD6B4, 0, 0, /* 0x70 */ + 0xE2AE, 0, 0xD3B7, 0xFACC, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xFADC, 0, 0xEDB5, 0xE1E3, /* 0x80 */ + 0, 0xE8AC, 0, 0xE8DD, 0, 0, 0xEFE9, 0, /* 0x80 */ + 0, 0, 0, 0, 0xF4BD, 0, 0xCFB8, 0xE9DB, /* 0x90 */ + 0xD1AC, 0, 0, 0, 0, 0, 0, 0xDAC7, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xEBC9, /* 0xA0 */ + 0, 0xE8CC, 0, 0, 0, 0xDEB7, 0, 0, /* 0xA0 */ + 0, 0, 0xD6BC, 0xD3E5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xFADD, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xDAD6, 0, 0xCAB1, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xDAC8, 0xDFA6, 0, 0xF9B3, 0xF2D2, 0, 0xCAC4, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xCECB, 0, /* 0xD0 */ + 0, 0xCDF5, 0, 0, 0, 0xFDB0, 0xD5A8, 0, /* 0xD0 */ + 0xF1C1, 0, 0, 0xE2E9, 0xDCCA, 0xECB4, 0xFAC0, 0, /* 0xE0 */ + 0, 0xFBA8, 0xD0A8, 0, 0, 0xDAEC, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9EE, /* 0xF0 */ + 0, 0xE0FB, 0, 0, 0, 0xEFEA, 0xFADE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0C4, 0, 0xCFB9, 0, 0xD5CA, 0xD7E2, 0xE2AF, /* 0x00 */ + 0, 0xD7B8, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xE8CD, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xF6DA, 0, 0, 0, 0, /* 0x10 */ + 0xEFA2, 0xE2DA, 0xF6FC, 0, 0, 0xFBD0, 0xD1AD, 0, /* 0x20 */ + 0xCDE4, 0, 0xD1AE, 0xDCED, 0xE8CE, 0, 0xF0F9, 0xCEB5, /* 0x20 */ + 0xE6FC, 0, 0, 0xD7FB, 0xD0D6, 0xDDF5, 0xF7F1, 0, /* 0x30 */ + 0xF6FD, 0, 0xDBF7, 0, 0, 0, 0, 0xFBEA, /* 0x30 */ + 0xE9DC, 0xD9C1, 0, 0xF5F2, 0xE0C5, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xEAD4, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF9C2, 0, 0xEABC, /* 0x50 */ + 0, 0xD2C5, 0xFBD1, 0xE7C0, 0xEBA5, 0, 0xDFFA, 0xE3A2, /* 0x50 */ + 0xD7B9, 0, 0xE9C3, 0, 0xE8FD, 0xE8AF, 0, 0, /* 0x60 */ + 0xF2D3, 0xFBA9, 0xD8A5, 0, 0, 0, 0, 0xD5CB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xD0C8, 0, /* 0x70 */ + 0, 0, 0xD1AF, 0xD7E3, 0, 0, 0, 0xE0C6, /* 0x80 */ + 0, 0xD6A2, 0, 0xEDF0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xD7F3, 0, 0, 0, 0xFCD4, 0, 0xDAD7, 0xCCDF, /* 0x90 */ + 0, 0xF2D4, 0, 0xD1B0, 0, 0xCCE0, 0, 0xDBFD, /* 0xA0 */ + 0xF3BF, 0, 0xF0D1, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xFCBB, 0, 0xE2B0, 0, 0, 0xE6A5, 0, 0, /* 0xB0 */ + 0, 0xE2DB, 0, 0, 0, 0xDFDE, 0, 0xE0C7, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF2EF, 0, /* 0xC0 */ + 0, 0, 0xCCE1, 0, 0, 0, 0, 0xD6EA, /* 0xC0 */ + 0, 0, 0, 0, 0xE7C2, 0, 0, 0, /* 0xD0 */ + 0xCEB6, 0, 0xF3C0, 0, 0xCDFE, 0, 0, 0, /* 0xD0 */ + 0xFBD2, 0, 0xF8F8, 0xF7FB, 0, 0, 0xE8BF, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xE8B7, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEDB6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCBA, 0, 0, 0xCCB4, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xF1F7, 0, 0, 0, 0xE8B8, 0, 0, /* 0x10 */ + 0xCAF6, 0, 0xE4A4, 0xF4D6, 0, 0, 0, 0xDFE6, /* 0x10 */ + 0, 0, 0, 0xDFA7, 0, 0xDFE7, 0xE1C1, 0, /* 0x20 */ + 0xE9C4, 0, 0, 0xDCCB, 0xE9C5, 0, 0, 0, /* 0x20 */ + 0xEFA3, 0xEBA6, 0xCBA3, 0xE3E9, 0, 0, 0, 0xD1FB, /* 0x30 */ + 0xEFA4, 0, 0xEFEB, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xD0B4, /* 0x40 */ + 0, 0, 0, 0, 0xCDA3, 0, 0, 0xE8E6, /* 0x40 */ + 0, 0xEFA5, 0, 0xD3CC, 0xDAED, 0, 0, 0, /* 0x50 */ + 0, 0xD7BA, 0, 0xF2D5, 0xF5E5, 0xD9EF, 0, 0, /* 0x50 */ + 0, 0, 0xF9B4, 0, 0, 0xD5D4, 0xFDCF, 0, /* 0x60 */ + 0, 0, 0xDBE3, 0, 0, 0, 0, 0xF1E1, /* 0x60 */ + 0xECB6, 0, 0, 0, 0, 0xFBFE, 0xD3D7, 0, /* 0x70 */ + 0xD1B1, 0, 0xCBB1, 0, 0, 0, 0, 0xD1B2, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xCBB2, 0xF1C2, /* 0x80 */ + 0, 0, 0xF4E1, 0xF9B5, 0, 0, 0xE1C3, 0xE1C2, /* 0x80 */ + 0, 0xEBF7, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xDFA8, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xCBCA, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE6B9, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xF8DE, 0xF9AA, 0xCAF7, 0, 0xEDB7, 0, 0, /* 0xB0 */ + 0xD3B8, 0xF2D6, 0, 0, 0xD4D9, 0xEEC5, 0xF2F0, 0, /* 0xB0 */ + 0, 0, 0xCAB2, 0, 0, 0xDCBB, 0, 0xF1F8, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xECB7, 0, 0, /* 0xC0 */ + 0, 0, 0xE5CA, 0, 0xF6C0, 0xFDDD, 0, 0, /* 0xD0 */ + 0xD4E3, 0xCCE2, 0, 0xF7D4, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xD7E5, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xD3C3, 0, 0xD8A6, 0, 0xF6C1, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xDDF6, 0, 0xCDC0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5DC, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE5CB, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE1C4, 0, 0, 0, 0, 0, 0xE8B0, /* 0x10 */ + 0xF4B0, 0xF3EA, 0xDAEE, 0, 0xD7BB, 0, 0xE2B1, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD7AA, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xD6FB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE4DF, 0, 0xCAD6, 0, /* 0x40 */ + 0, 0, 0xEBA8, 0, 0, 0, 0xDBFE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF6C2, 0, 0, 0xEFBB, 0, 0, 0, /* 0x60 */ + 0, 0xD4FD, 0, 0, 0xE0C8, 0, 0, 0, /* 0x60 */ + 0xE8B9, 0, 0xEFA6, 0, 0, 0, 0, 0, /* 0x70 */ + 0xCDA4, 0, 0, 0xD4F4, 0xDBA1, 0xDBDC, 0xDBDD, 0, /* 0x70 */ + 0, 0, 0, 0, 0xEEDC, 0, 0xCBCB, 0xFCD5, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xCEEB, 0, /* 0x80 */ + 0xCDC1, 0, 0, 0xFBD3, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xF9AB, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF5D4, 0, 0, 0, 0, 0xD9A9, /* 0xB0 */ + 0, 0, 0xE9DD, 0xDBCD, 0, 0, 0xDDCE, 0, /* 0xC0 */ + 0xE7C3, 0, 0xECCC, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xF9EC, 0, 0, 0, 0xCBCC, 0, /* 0xD0 */ + 0, 0, 0, 0xE0FC, 0xD4A8, 0, 0xEDD3, 0xD8EF, /* 0xD0 */ + 0, 0xF2D7, 0, 0xCAF8, 0xDAEF, 0, 0, 0xD6D4, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xD9CD, 0, /* 0xE0 */ + 0, 0, 0xD8EE, 0, 0xF2C1, 0, 0, 0, /* 0xF0 */ + 0xDFD3, 0, 0, 0, 0xDAF0, 0, 0xE2EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0FD, 0, 0, 0xD8F8, 0, 0, 0, /* 0x00 */ + 0xF7AF, 0xDAB6, 0, 0xCAD7, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF2D8, 0, /* 0x10 */ + 0xD8F9, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xFADF, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFEF, /* 0x30 */ + 0xD9C2, 0, 0xF0D2, 0, 0xE4D1, 0, 0, 0, /* 0x30 */ + 0xF3B7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xFAE0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xEFEC, 0, 0, 0, 0, /* 0x50 */ + 0, 0xE2B2, 0, 0xD4BD, 0, 0, 0xD9CE, 0, /* 0x60 */ + 0, 0, 0, 0xF4E2, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD4A9, 0, 0, 0, 0, 0xCDC2, 0xE7DA, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF2D9, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD9AA, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xD8BE, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xDCAD, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE2EB, 0xD6FC, 0, 0, /* 0xA0 */ + 0xCAF9, 0, 0, 0xD4DA, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF4D7, 0xCCA1, 0, 0, 0xCFBA, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF5B8, /* 0xD0 */ + 0, 0, 0, 0xD9C3, 0xD0E8, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE3C5, 0xEBF8, 0, 0xF2B1, 0, 0, /* 0xE0 */ + 0, 0xCFBB, 0, 0, 0, 0xD3AD, 0xE8E1, 0xCEEC, /* 0xE0 */ + 0, 0, 0, 0xE0B4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDEE3, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xDDF7, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF2B2, 0xF3F6, 0xF6DB, /* 0x20 */ + 0, 0, 0, 0, 0xD7FE, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF8DF, 0, 0xF7F2, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xD0A9, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6DA, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xF5A6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xD7BC, 0xCCE3, 0, 0, 0xE6DB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xDDDD, 0, 0, 0, /* 0x70 */ + 0, 0xD1B3, 0, 0, 0, 0, 0, 0xEFED, /* 0x80 */ + 0, 0, 0, 0, 0xD6DE, 0xE4F4, 0xE1EF, 0, /* 0x80 */ + 0, 0xDDF8, 0, 0, 0, 0, 0, 0xE8CF, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xCAE5, 0, 0, 0, 0xDCA1, /* 0xA0 */ + 0, 0xE0B5, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xFCAC, 0xFCAD, 0xD8A7, 0, 0, 0, /* 0xB0 */ + 0, 0xEDB8, 0, 0, 0, 0xDBB6, 0, 0, /* 0xC0 */ + 0, 0, 0xD6F0, 0xF3AF, 0, 0, 0xCDA5, 0, /* 0xC0 */ + 0xDAF1, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xD8A8, 0, 0, 0, 0xCCE4, 0, 0, 0xD1B4, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xCAD8, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xDAF2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5A7, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF5A8, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE6A6, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xD5EC, 0xD5F8, 0xDAF3, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xE3C6, 0, 0, 0, 0xDEE4, 0, /* 0x30 */ + 0xDEE5, 0xD1B5, 0, 0, 0, 0, 0, 0xD1B6, /* 0x40 */ + 0xD1B7, 0xF2B3, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xE9DE, 0, 0, 0, 0, 0, 0xF0D3, 0xF2B4, /* 0x50 */ + 0, 0, 0xF0D4, 0xCBE4, 0xFBD4, 0xF5E6, 0xE3EA, 0, /* 0x50 */ + 0xDEE6, 0, 0, 0, 0, 0xDFD4, 0, 0, /* 0x60 */ + 0xF8F9, 0, 0, 0, 0, 0xF0AE, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xD1B8, 0, 0, 0, 0, 0xD6DF, /* 0x70 */ + 0, 0xD0D7, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xFCA1, 0xEFEE, 0xDCD8, /* 0x80 */ + 0, 0xE9DF, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xE5DD, 0xFDFB, /* 0xA0 */ + 0, 0, 0xE0C9, 0, 0, 0, 0xD6C9, 0, /* 0xA0 */ + 0, 0xD4AA, 0, 0xE5CC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE9E0, 0, 0, 0, 0xD0D8, 0xFCA2, 0xD4BE, /* 0xB0 */ + 0xE2B3, 0xDEE7, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xDCBC, 0xD2B6, 0xF5D5, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xCEA1, 0xF5A9, 0, 0, 0xDDF9, 0, 0, /* 0xD0 */ + 0xDDFA, 0, 0, 0, 0, 0, 0, 0xF0D5, /* 0xD0 */ + 0, 0, 0, 0, 0xF6DF, 0, 0xF2DA, 0xE4EB, /* 0xE0 */ + 0, 0xF2F1, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xECB9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFDFC, 0, 0, 0, 0, 0xE1AA, 0, 0, /* 0x00 */ + 0xCAD9, 0, 0, 0xEFEF, 0, 0xF5AA, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xECF9, 0, 0, 0xF8AD, /* 0x10 */ + 0, 0xF2C2, 0xF6C3, 0, 0xD7D2, 0, 0, 0xF9A2, /* 0x10 */ + 0xF0D6, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF0FA, 0, /* 0x20 */ + 0, 0xF6E0, 0, 0, 0, 0, 0xE9F3, 0xF2C3, /* 0x30 */ + 0, 0, 0, 0xD4AB, 0xCAB3, 0xCDA6, 0, 0xCDC3, /* 0x30 */ + 0xCDDA, 0, 0, 0, 0, 0, 0xD9CF, 0, /* 0x40 */ + 0, 0xF6C4, 0, 0, 0, 0xEEDD, 0xE7C4, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2B4, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xDFE2, 0xE7DB, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE8B1, 0, 0xFCAE, 0, 0, 0, 0, /* 0x60 */ + 0xE5CD, 0, 0, 0, 0xFAEB, 0, 0xCFBC, 0, /* 0x70 */ + 0, 0xCFE2, 0xCDF6, 0, 0, 0xEFF0, 0, 0xF4BE, /* 0x70 */ + 0, 0xD4CD, 0, 0, 0xF3B8, 0, 0, 0, /* 0x80 */ + 0xE9A1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xF2F2, 0xF3EB, 0, 0xF0D7, 0, 0, /* 0x90 */ + 0xCFD7, 0, 0, 0, 0, 0, 0, 0xCFDF, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE8C0, 0xE8C1, 0, 0, 0, 0xCFE3, 0xE9A2, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xD0AA, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF3C1, 0xD0AB, 0, 0xD4E4, /* 0xC0 */ + 0, 0, 0xEFBC, 0xD8A1, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9DF, /* 0xD0 */ + 0, 0xF3D7, 0, 0, 0, 0xDCBD, 0, 0xCCE5, /* 0xD0 */ + 0xEDF1, 0, 0, 0xF1E2, 0, 0xD4DB, 0, 0, /* 0xE0 */ + 0, 0, 0xE2B5, 0, 0, 0xCAE6, 0, 0xD3AE, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xCCE6, 0, /* 0xF0 */ + 0, 0xF1D3, 0xF5E7, 0, 0, 0, 0, 0xCADA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFBEE, /* 0x00 */ + 0, 0xE1C5, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xDFE9, 0, 0xEEDE, 0, 0, 0xF7C2, 0, /* 0x10 */ + 0xD8A2, 0, 0, 0, 0, 0, 0xDDAC, 0, /* 0x20 */ + 0, 0, 0, 0, 0xF0AF, 0xD6BD, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xE1AB, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF9B6, 0, /* 0x40 */ + 0, 0xD4F5, 0, 0xD0C9, 0xEFA7, 0xE2EC, 0, 0xDBEA, /* 0x40 */ + 0xCECC, 0xF5E8, 0xF7D5, 0, 0xD3CD, 0, 0xF3FE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xD0B5, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE0FE, 0, 0xDFFB, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE6DD, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE8A4, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xCBCD, /* 0x80 */ + 0, 0, 0, 0xEFA8, 0, 0, 0, 0xEEB4, /* 0x80 */ + 0, 0, 0, 0, 0xDAD8, 0xD1B9, 0, 0xDFA9, /* 0x90 */ + 0, 0, 0xF3B0, 0, 0, 0xCCC4, 0, 0, /* 0x90 */ + 0, 0xCEB7, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xEFA9, 0, 0, /* 0xA0 */ + 0, 0xDFD5, 0, 0, 0xEDD7, 0, 0, 0, /* 0xB0 */ + 0xEEC6, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xEFBD, 0xFCD6, 0, 0, 0xDBF4, 0, 0xEFAA, 0xF8B9, /* 0xC0 */ + 0, 0xF5E9, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE3D9, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xE1C6, 0, 0, 0, 0xD4BF, 0, 0, 0, /* 0xE0 */ + 0, 0xDEE8 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0EA, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF3C2, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xD3AF, 0, /* 0x10 */ + 0, 0xCADB, 0, 0, 0, 0, 0, 0xFCD7, /* 0x20 */ + 0, 0, 0xEDD8, 0xE1C7, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF4D8, 0xD6B3, 0xDDAD, /* 0x30 */ + 0, 0, 0, 0xD5BE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF1C3, 0xEEDF, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xD6EB, 0, 0, 0, 0xF4D9, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xD7E6, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xDAB7, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0xDDFB, 0, 0, 0, 0, /* 0x80 */ + 0, 0xDDCF, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD8A3, 0, 0, 0xDAD9, 0, 0xF0D8, /* 0x90 */ + 0xEFC4, 0, 0, 0, 0, 0, 0, 0xE1D8, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF1D4, 0, 0xEDF2, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xD5DB, 0, /* 0xA0 */ + 0, 0xD5DC, 0xF3C4, 0xCBD7, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE2B6, 0, 0, 0, 0, 0xEFF1, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xFBD5, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xD3D8, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xDDD0, 0xF0D9, /* 0xD0 */ + 0xCBB3, 0, 0, 0, 0, 0, 0, 0xD5DD, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xCDA7, 0, 0, 0xD0AC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1BA, 0, 0xF1C4, 0, 0xE5B3, 0xFBF5, 0xE9E1, 0xFDE0, /* 0x00 */ + 0xFCBC, 0, 0xDAA2, 0xDAA3, 0, 0xD2A1, 0, 0, /* 0x00 */ + 0xD2EF, 0, 0, 0, 0xE2ED, 0, 0, 0xDEE9, /* 0x10 */ + 0xCEDC, 0xF2B5, 0xD0E4, 0xDDD1, 0, 0, 0, 0, /* 0x10 */ + 0xE1C8, 0xDBB7, 0xDFE3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xEDB9, 0xF1C5, 0, 0xF3CF, 0xD7AB, /* 0x20 */ + 0xE1AC, 0, 0, 0xE3EB, 0, 0xEEC7, 0, 0, /* 0x30 */ + 0, 0xE1C9, 0xCAFA, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xF0FB, 0xFAE1, 0xF0DA, 0xCCE7, 0xDAF4, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xCCBF, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xCEED, 0, /* 0x50 */ + 0, 0xD5A9, 0xFAE2, 0, 0, 0, 0xD0E5, 0, /* 0x60 */ + 0xEBD6, 0, 0xECDF, 0, 0, 0, 0xDFFC, 0, /* 0x60 */ + 0, 0xF7D6, 0xDEEA, 0xCBB4, 0, 0, 0xEFBE, 0, /* 0x70 */ + 0, 0xCCB5, 0, 0, 0, 0, 0, 0xCFBD, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xEFF2, 0xE2B7, /* 0x80 */ + 0, 0, 0, 0xCCE8, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF0FC, 0, 0, 0, /* 0x90 */ + 0xD6E0, 0, 0xF1C6, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE2B8, 0xEBAB, 0, 0, /* 0xA0 */ + 0, 0xCBB5, 0xD8D1, 0, 0xF4CE, 0xF3F7, 0, 0, /* 0xB0 */ + 0xD7C6, 0, 0xD1BB, 0xF7AA, 0, 0xEDCA, 0xD7D3, 0xD8FA, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF6C5, /* 0xC0 */ + 0, 0, 0xD1CC, 0xDDFC, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xDFFD, 0, /* 0xD0 */ + 0xF9E5, 0, 0xE0CA, 0, 0, 0xF2FD, 0xD3B0, 0, /* 0xD0 */ + 0xF4F3, 0xDAC9, 0, 0xE6DE, 0, 0, 0, 0, /* 0xE0 */ + 0xF8BA, 0xE8D0, 0, 0, 0xD8FB, 0, 0, 0xEAD5, /* 0xE0 */ + 0, 0, 0, 0, 0xD6A3, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xF6C6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF2DB, 0xE4FC, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE8B2, 0, 0, /* 0x10 */ + 0, 0, 0, 0xDADA, 0, 0xF2DC, 0xFBD6, 0xE9B2, /* 0x10 */ + 0, 0xEEAD, 0, 0xFAE3, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xDCEE, 0, 0, 0xF5EA, 0xE6E0, /* 0x20 */ + 0, 0xF0FD, 0, 0, 0, 0, 0, 0xD7AC, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF5C5, 0xEEE0, 0, /* 0x30 */ + 0, 0xDBE5, 0, 0xDDDE, 0, 0, 0xD9F0, 0xE9A3, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF1F9, 0, 0xF2C4, 0xE0CB, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE9A4, 0, /* 0x50 */ + 0, 0xE2B9, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE3B1, 0xFCEB, 0xCDA8, 0, 0xCCB6, 0, 0, /* 0x60 */ + 0xF0DB, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE6BA, 0, 0, 0xCDA9, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF3C3, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE1D9, 0, 0, 0xEFAB, /* 0x80 */ + 0, 0, 0, 0xE7C5, 0, 0, 0xE0E9, 0, /* 0x90 */ + 0xF3C5, 0, 0, 0xD4C0, 0xD5BF /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDDAE, 0, /* 0x30 */ + 0xF9FC, 0, 0xCCC0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE5A2, 0, 0, 0, /* 0x40 */ + 0xCEB8, 0, 0, 0, 0xD8D2, 0xF9D6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF1AA, 0xCED1, 0, 0, 0xF6C7, 0, /* 0x60 */ + 0xDBEB, 0, 0xDFFE, 0, 0, 0xD8E1, 0, 0xF7F3, /* 0x70 */ + 0, 0xD7E7, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD4FE, 0, 0, /* 0x80 */ + 0xD1BC, 0, 0xE5CF, 0, 0xCBB6, 0, 0xDAB8, 0, /* 0x80 */ + 0, 0, 0, 0, 0xCDC4, 0, 0, 0, /* 0x90 */ + 0, 0, 0xD6BE, 0, 0, 0, 0xE2BA, 0, /* 0x90 */ + 0, 0, 0, 0, 0xCFD8, 0, 0, 0, /* 0xA0 */ + 0xE0CC, 0xEBF9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xFDFD, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xD7E8, 0xCBD8, 0, 0, 0, 0xE9E2, 0, 0, /* 0xB0 */ + 0, 0xE8BA, 0, 0, 0, 0xE3C7, 0, 0, /* 0xC0 */ + 0, 0, 0xECCD, 0, 0xECCE, 0, 0xD6BF, 0, /* 0xC0 */ + 0, 0, 0xE3A7, 0, 0xDFD6, 0xFDE8, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEEE1, /* 0xD0 */ + 0xF6A8, 0xDDFD, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xF8BB, 0, 0xE8D1, 0, 0, 0, 0, /* 0xE0 */ + 0xF9D7, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xCEEE, 0, 0, 0xECCF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9A5, 0xD6D5, 0, 0xCDC5, 0, 0xEDBA, 0xD1BD, 0, /* 0x00 */ + 0, 0xCFBE, 0, 0, 0xECBB, 0, 0, 0, /* 0x00 */ + 0xD2B1, 0, 0, 0, 0, 0xCCE9, 0, 0xD9C4, /* 0x10 */ + 0xE9FC, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xD1BE, 0, 0, /* 0x20 */ + 0, 0, 0, 0xECBC, 0, 0, 0xE5AD, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF7B0, 0, 0xCCEA, /* 0x30 */ + 0, 0, 0, 0xD3C4, 0, 0, 0xD6C0, 0, /* 0x40 */ + 0, 0, 0xD6FD, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE1A1, 0, /* 0x50 */ + 0xDEBD, 0, 0xF6A9, 0, 0, 0, 0xDAA4, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xD6A4, /* 0x60 */ + 0xF5C6, 0, 0xE1A2, 0xE9C6, 0, 0, 0, 0xF2C5, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF4E9, 0xD6EC, 0xEBD3, /* 0x70 */ + 0, 0, 0, 0, 0xECBD, 0xE2DC, 0xDEEB, 0xF0DC, /* 0x80 */ + 0, 0xEBBF, 0, 0xD7CE, 0xD1BF, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF5AB, 0, /* 0x90 */ + 0, 0, 0, 0xF9FD, 0, 0xCADC, 0, 0, /* 0x90 */ + 0, 0xCDC6, 0xF2B6, 0, 0, 0xDDFE, 0, 0, /* 0xA0 */ + 0, 0xCCB7, 0xDBB8, 0, 0, 0, 0, 0xD0E9, /* 0xA0 */ + 0, 0xCEDD, 0xEBC0, 0, 0xFDA2, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF8CB, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xEAD6, 0xF1B0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xDBCE, 0, 0xF7C3, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xDBCF, 0xCBA4, 0, 0, 0xF8E0, 0, /* 0xD0 */ + 0, 0xFBD7, 0, 0, 0xEBCA, 0xE0A1, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xCECD, 0, 0, 0xD4DC, 0, 0, 0, /* 0xF0 */ + 0xFDD8, 0, 0, 0, 0, 0xD2F6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF2B7, 0, 0, 0xFAF6, 0xF6AA, 0xFAF7, /* 0x00 */ + 0xD8E6, 0, 0xF4B1, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE8D2, 0, 0xCAC5, 0xCCEB, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE2EE, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE2BB, 0, 0xF7AD, 0, 0, 0, 0xF8E1, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF3EC, 0, 0, 0, 0, 0xDEA1, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xE4FD, 0, 0, 0xE3EC, 0, /* 0x40 */ + 0xDDAF, 0xDDB0, 0, 0, 0xCBB7, 0xE8D3, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE1A3, 0xD2E0, 0, /* 0x60 */ + 0, 0, 0, 0xF0FE, 0, 0, 0, 0, /* 0x60 */ + 0xE9A6, 0xCBF2, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xEDF3, 0xDCD9, 0xE0CD, 0, 0, 0, 0, 0xF7DA, /* 0x70 */ + 0xDBB9, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xCCAE, 0, 0xDADB, 0, 0, 0, 0, 0xCDC7, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xDDB1, 0, 0xD8AF, 0xE3A3, 0, 0, /* 0x90 */ + 0xCEEF, 0, 0, 0xF2F3, 0, 0, 0, 0, /* 0xA0 */ + 0xF8B3, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE0CE, 0, 0xF5FD, 0, 0, /* 0xB0 */ + 0, 0, 0xEBEC, 0, 0, 0xD3C5, 0xFCEC, 0xD2DB, /* 0xB0 */ + 0xD4EB, 0, 0xDEA2, 0, 0, 0, 0xE5E6, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xF0B0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD5C4, 0, 0, 0, 0, 0, 0, 0xEDF4, /* 0xD0 */ + 0, 0, 0, 0xE3ED, 0, 0xE8C2, 0, 0xEDF5, /* 0xE0 */ + 0xD7FC, 0, 0xEDBB, 0, 0, 0xF6AB, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF2B8, 0xF6C8, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xD3E6, 0xF2DD, 0xCFBF, 0, 0xEBAC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFC0, 0, 0xE6A8, /* 0x00 */ + 0xFDE9, 0, 0xCFC1, 0, 0xE0DF, 0xDEEC, 0, 0, /* 0x00 */ + 0, 0, 0xE0A2, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xF4BF, 0xE2EF, 0, 0xD9F1, 0xF1C7, /* 0x10 */ + 0, 0xCBB8, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF9FE, 0xDBBA, 0xDAF5, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF6EC, 0xDADC, 0xFAE4, /* 0x30 */ + 0, 0xE0CF, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xDDB2, 0, 0, 0, 0, 0xE6A9, 0, 0xEFF3, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF3ED, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xEBFA, 0, 0xF9E6, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xCADD, 0xD5DE, /* 0x60 */ + 0, 0xCADE, 0xDFE4, 0, 0, 0, 0xE6FD, 0, /* 0x70 */ + 0xF5AC, 0, 0, 0, 0, 0, 0xE4F5, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE9E3, 0, 0xEDCB, 0xCFE4, 0, /* 0x80 */ + 0, 0, 0xD8D3, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xDDB3, 0xD4EC, 0, 0, 0xF2B9, 0, 0xDFB7, /* 0x90 */ + 0, 0, 0, 0, 0, 0xCBCE, 0xFBD8, 0, /* 0xA0 */ + 0, 0xD0D9, 0, 0, 0xDDD2, 0xF7F4, 0xE7DC, 0xE4A5, /* 0xA0 */ + 0, 0xFCA3, 0, 0xDBBB, 0, 0, 0, 0xF2BA, /* 0xB0 */ + 0xE9FD, 0xD0CA, 0, 0xF5D6, 0xD9C5, 0xE4B4, 0, 0xEDA7, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xEABD, 0xE6FE, 0, 0xF7C4, 0xF5AD, 0, 0xD9E0, /* 0xD0 */ + 0, 0, 0, 0xCAB4, 0, 0, 0xF8E2, 0xCFC2, /* 0xD0 */ + 0, 0xECBE, 0, 0, 0, 0xE5B4, 0xCDC8, 0xEEC8, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE7C8, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xCDC9, 0xF9B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF1E8, 0xD9F2, 0xDBF5, 0xCAB5, 0xD9C6, 0, 0, /* 0x00 */ + 0, 0xD8C9, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9AB, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xEDBC, 0, 0, 0xD8D4, 0, 0, 0, 0xDCDA, /* 0x20 */ + 0, 0xE2BC, 0, 0, 0xFCED, 0xECE0, 0xD2FE, 0, /* 0x30 */ + 0xE9C7, 0xE6AA, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE2F0, 0, 0, 0, 0, 0, 0, 0xFABB, /* 0x40 */ + 0, 0xF5AE, 0xFBAA, 0, 0, 0, 0, 0xECFB, /* 0x40 */ + 0, 0xECBF, 0xFCD8, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xD4E5, 0, 0, 0, 0xF9C3, /* 0x70 */ + 0, 0, 0, 0xEEE2, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD7E9, 0xEDF6, 0, 0, 0, 0xDEED, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xCCEC, 0, /* 0x90 */ + 0xE3EE, 0, 0, 0, 0, 0, 0xE8D4, 0, /* 0x90 */ + 0, 0, 0xFAF8, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xDDB4, 0xE4B5, 0xD8B0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xD8D5, 0, 0, /* 0xB0 */ + 0, 0xF4EA, 0, 0, 0, 0xCEB9, 0, 0, /* 0xC0 */ + 0, 0xD6E1, 0xCFD2, 0, 0xD0B6, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xCEA2, 0, 0, 0xF3EE, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xF3F8, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xDCCC, 0, 0xD0CB, 0, 0, 0, 0xFCA4, /* 0xE0 */ + 0xCDCA, 0xD7D4, 0xDEA3, 0, 0xE4E0, 0, 0, 0, /* 0xF0 */ + 0, 0xEEC9, 0, 0, 0, 0xE2DD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5FE, 0xD4AC, 0, 0, 0, /* 0x00 */ + 0, 0, 0xD5D1, 0, 0xD8F0, 0xF8C3, 0xEAD7, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF5D7, 0, 0, 0xD8BF, 0, 0, 0, /* 0x20 */ + 0, 0xFDC0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xEBAD, 0, 0, 0, 0, 0xD5AA, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xE7A8, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xEECA, /* 0x50 */ + 0, 0, 0, 0xCAE7, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF8E3, 0, 0xD4DD, 0, 0, 0xEAD8, 0, /* 0x60 */ + 0, 0, 0, 0xFBD9, 0xEDF7, 0, 0, 0xE5B5, /* 0x60 */ + 0, 0, 0, 0, 0, 0xD0AD, 0, 0, /* 0x70 */ + 0, 0, 0xF1F1, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE2BD, 0, 0, 0, 0xE3C8, 0, 0, 0, /* 0x90 */ + 0, 0xD9D5, 0, 0, 0xDFAA, 0, 0, 0, /* 0x90 */ + 0, 0xDBBC, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF8E4, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF1FA, 0, 0, 0xE5B6, 0xF3EF, 0, 0, 0xFBDA, /* 0xB0 */ + 0xE1E0, 0, 0xD9AC, 0, 0xF5EB, 0, 0xE0B6, 0, /* 0xC0 */ + 0, 0xE9C8, 0, 0xCBCF, 0, 0xE3C9, 0, 0, /* 0xC0 */ + 0, 0xDEEE, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE2BE, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xDCEF, 0, 0xD6A5, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE2F1, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xD6FE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9A1, 0, 0xD8C0, 0xDCDB, 0, 0, 0xEDBD, /* 0x10 */ + 0xDFB8, 0, 0xEAA5, 0, 0, 0, 0xD7AD, 0, /* 0x10 */ + 0, 0xF3F9, 0, 0xEDF8, 0, 0xF5C7, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE1CA, 0xEBE3, 0, 0xF2DE, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF8CC, 0, 0xEAD9, /* 0x30 */ + 0, 0xD3C6, 0, 0xDBE6, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF5AF, 0, 0, 0, 0, 0xCEF0, 0, /* 0x40 */ + 0, 0, 0, 0xE9FE, 0, 0, 0, 0, /* 0x50 */ + 0, 0xFBB6, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE2F2, 0, 0, 0, 0, /* 0x60 */ + 0xCFF2, 0xF7B9, 0xD9F3, 0, 0, 0xE1CB, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xDADD, 0, 0, 0xDAB9, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xEBFB, /* 0x80 */ + 0, 0xCBB9, 0, 0, 0xEDF9, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE0E0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xF4C0, 0, /* 0xA0 */ + 0xFDBC, 0xDFB1, 0xE3EF, 0, 0, 0, 0, 0xE0A3, /* 0xA0 */ + 0xFDB9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF0B1, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xCDCB, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xEDBE, 0, 0, 0, 0xD5C0, 0xE3F0, 0xEDFA, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE9E4, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xD5ED, 0xE7DD, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xD4F6, 0xE5B7, 0, 0, /* 0xE0 */ + 0, 0xDBE7, 0xE2BF, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEECB, /* 0xF0 */ + 0, 0, 0xD7F4, 0xF0DD, 0, 0, 0, 0xCEAB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE7DE, 0, 0, 0, 0xD6D6, 0xE1CC, /* 0x00 */ + 0, 0, 0xE8B3, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE5EE, 0xDCA2, /* 0x10 */ + 0, 0, 0xE0D0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xD5B5, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xD5A1, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xFBDB, 0, /* 0x40 */ + 0xF9CB, 0, 0, 0, 0xCBF3, 0xF4A5, 0, 0, /* 0x50 */ + 0, 0, 0, 0xFAC8, 0xD6D7, 0, 0xE9E5, 0xFBDC, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xFDD0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xFBF6, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xDAA5, 0, 0xDBBD, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xECE2, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xCDF7, 0xF0DE, 0, 0, 0, /* 0xA0 */ + 0, 0xF6C9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xDEEF, /* 0xC0 */ + 0, 0, 0, 0xD3B1, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xFCEE, 0, 0, 0, /* 0xD0 */ + 0, 0xE8C3, 0, 0xF1C8, 0, 0, 0, 0xCEF1, /* 0xD0 */ + 0, 0, 0, 0, 0xF9ED, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF2F4, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xE4B6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5B9, 0, 0xDCF0, 0xE3F1, 0, 0, 0, 0, /* 0x00 */ + 0xE8A5, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF2BB, 0, 0xDEA4, 0, 0xDACC, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xCAE9, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE3DA, 0, 0xFCD9, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xEADA, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xF9C4, 0, /* 0x60 */ + 0xE3A4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xFBDD, 0, 0xEFCA, 0, /* 0x70 */ + 0xE8C4, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xD5CC, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xEBD7, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9AD, /* 0x90 */ + 0, 0, 0xFBAB, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD3D9, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xD5A2, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF6DE, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xDAF6, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE0D1, 0, 0, 0xE9A8, /* 0xE0 */ + 0, 0, 0xF5F9, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xFAAF, 0, 0xEBFC, 0, 0, 0xE0EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE3B2, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xD5C5, /* 0x10 */ + 0, 0, 0xF1E3, 0xD5EE, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xCDCC, 0, 0, 0, 0, 0xEDD9, 0, /* 0x30 */ + 0, 0, 0, 0xD8C1, 0, 0, 0, 0, /* 0x30 */ + 0xFAEC, 0, 0, 0, 0, 0, 0xF1EB, 0, /* 0x40 */ + 0, 0, 0, 0, 0xFABC, 0xE6E2, 0, 0, /* 0x40 */ + 0, 0, 0xFAE5, 0xE2FA, 0, 0, 0, 0xCAB6, /* 0x50 */ + 0, 0xE4B7, 0, 0xEADB, 0, 0xF5FA, 0, 0, /* 0x50 */ + 0, 0xFBAC, 0xCFC3, 0xEBFD, 0, 0, 0, 0, /* 0x60 */ + 0xF8FA, 0, 0, 0xDFB9, 0, 0, 0, 0, /* 0x60 */ + 0xE1F1, 0, 0xD2A4, 0, 0, 0, 0, 0xF5FB, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xD0DA, 0xD0DB, /* 0x70 */ + 0, 0xEABE, 0xD9B1, 0, 0, 0, 0, 0, /* 0x80 */ + 0xCAB7, 0, 0, 0xD3E7, 0, 0xF8E5, 0, 0, /* 0x80 */ + 0, 0, 0xD3B2, 0, 0, 0, 0xE2C0, 0xF2DF, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xCDE5, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF9AC, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xCDCD, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEEAE, 0xD6AE, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xD7EA, /* 0xC0 */ + 0, 0, 0, 0, 0xE7E0, 0xEBAE, 0, 0, /* 0xD0 */ + 0, 0xCFD9, 0, 0, 0xDCCD, 0xEDFB, 0, 0xDEF0, /* 0xD0 */ + 0, 0xD7EB, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xDEA5, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xDFD7, 0xDBD0, 0xDBD1, 0, 0, /* 0xF0 */ + 0xD5A3, 0, 0, 0, 0, 0xF0B2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCDC, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xCAE8, 0, 0xF8E6, 0xDCCE, 0, 0, 0, 0, /* 0x10 */ + 0xEADC, 0xDBD2, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE9B3, 0, 0, /* 0x20 */ + 0, 0, 0xF7DB, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xE3A8, 0, /* 0x30 */ + 0xD7AE, 0, 0, 0xE0E1, 0, 0, 0, 0, /* 0x30 */ + 0, 0xCBBA, 0, 0, 0xE5D1, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xD0DC, /* 0x50 */ + 0, 0, 0, 0, 0xD5C1, 0, 0, 0, /* 0x60 */ + 0, 0, 0xD8CA, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE3A9, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE0A4, /* 0x70 */ + 0, 0xE9A9, 0, 0xD3C7, 0, 0, 0xDCDD, 0xF8AE, /* 0x80 */ + 0, 0, 0, 0xCCB8, 0, 0, 0, 0xD0AE, /* 0x80 */ + 0, 0, 0, 0xD8F2, 0, 0, 0xE3CA, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xCCAF, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xD4AD, 0xF6D1, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xD0CC, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xCAC6, 0, 0, 0xD5C2, 0, 0, /* 0xB0 */ + 0xCEBA, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xCAC7, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xFAB0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xDFD8, 0, 0, 0, /* 0xF0 */ + 0xF5BA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5EB, 0, 0xEFF4, 0xDDB5, 0, 0, 0, 0, /* 0x00 */ + 0xCDAA, 0, 0xE3F2, 0, 0xFBF7, 0, 0xF7D0, 0, /* 0x00 */ + 0, 0, 0, 0xFDBA, 0, 0, 0xFDE1, 0xF6FE, /* 0x10 */ + 0xD1C0, 0, 0, 0xE8C5, 0, 0xE4B8, 0, 0xE1E8, /* 0x10 */ + 0, 0, 0, 0xCCC1, 0, 0xD2ED, 0, 0, /* 0x20 */ + 0, 0, 0xDBBE, 0, 0, 0xE0E2, 0, 0, /* 0x20 */ + 0, 0xFAC9, 0, 0, 0xE1CD, 0, 0xCAB8, 0, /* 0x30 */ + 0, 0, 0xF2E0, 0xF1C9, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xDEF1, 0, 0, 0, 0xF0DF, 0xF8C4, 0, 0, /* 0x50 */ + 0, 0, 0, 0xEECC, 0, 0, 0xDEF2, 0, /* 0x50 */ + 0xE7C9, 0, 0xE2F3, 0xE7E1, 0, 0, 0xE3CB, 0, /* 0x60 */ + 0, 0xE3CC, 0, 0, 0, 0xCFF8, 0xEFAC, 0, /* 0x60 */ + 0xFDFE, 0xFCA5, 0xFAB1, 0xDFD9, 0, 0xE0D2, 0, 0, /* 0x70 */ + 0, 0xF4DA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF1CA, 0, 0xCEA3, /* 0x80 */ + 0, 0, 0, 0, 0xF2BC, 0xECE3, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE0A5, 0, 0xF7AB, 0, 0, /* 0x90 */ + 0xEBAF, 0, 0, 0, 0, 0, 0xE5DE, 0, /* 0x90 */ + 0xE1A4, 0xCDAB, 0, 0xD9F4, 0xE8A6, 0xCDCE, 0xE1E9, 0, /* 0xA0 */ + 0xFCEF, 0, 0xE0E3, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE2C1, 0, 0xCEA4, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xDEA6, 0, 0, 0xEBFE, 0, 0xEBDD, 0xF0E0, /* 0xB0 */ + 0, 0, 0xF4DB, 0, 0xE2F4, 0, 0, 0xD3C8, /* 0xC0 */ + 0, 0, 0, 0xF4EB, 0, 0xEEB5, 0, 0xF5D8, /* 0xC0 */ + 0, 0, 0xD5DF, 0, 0, 0, 0xD6E5, 0, /* 0xD0 */ + 0, 0, 0, 0xEBB0, 0xF4E3, 0, 0, 0, /* 0xD0 */ + 0, 0xE3CD, 0, 0, 0, 0, 0xF4F4, 0xFAB2, /* 0xE0 */ + 0, 0, 0xEFF5, 0xCADF, 0, 0xEBB1, 0xEDBF, 0, /* 0xE0 */ + 0, 0xFDC9, 0, 0, 0, 0, 0xE4A6, 0xF9A4, /* 0xF0 */ + 0xF0B3, 0, 0xE5EC, 0, 0, 0, 0xD1E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9C7, 0xE4D7, 0xEADD, 0, 0xD4F7, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xDABA, 0, /* 0x00 */ + 0xDACD, 0, 0, 0, 0xF9CC, 0, 0xE1DA, 0xDBBF, /* 0x10 */ + 0, 0xCCC5, 0xECD0, 0xCBBB, 0, 0xDEF3, 0, 0, /* 0x10 */ + 0xE9AA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD9C8, 0, 0, 0xEEE3, 0xD7BD, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xCFC4, 0, 0, 0, 0, /* 0x30 */ + 0, 0xD0CD, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xFCA6, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF1FB, 0, 0, 0, 0, 0xFDD2, 0xD1C1, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE3DB, 0, 0xD3C9, 0, 0xDCCF, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xCCED, 0, /* 0x60 */ + 0, 0, 0, 0, 0xDEA7, 0, 0, 0xE6BB, /* 0x60 */ + 0xECA1, 0, 0, 0, 0xCCB9, 0, 0, 0xFBDE, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE7E2, 0, 0, /* 0x70 */ + 0xD4C1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xDCA8, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE2C2, 0, 0xF3D8, 0xE5D3, 0, 0, 0xF3D9, 0, /* 0x90 */ + 0, 0, 0xF3C6 /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDDB, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xCDAC, /* 0x30 */ + 0, 0xFCC3, 0, 0, 0, 0, 0xD4E7, 0, /* 0x40 */ + 0xD1C2, 0, 0xF9A5, 0, 0xE8D5, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE3CE, 0, 0, /* 0x50 */ + 0, 0, 0xD4CA, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xDFDA, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xFBDF, 0xE7E3, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF8FB, 0xE3CF, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF5B0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD8E7, 0, 0xD9C9, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF8AF, 0xEFF6, 0, /* 0x90 */ + 0xDDB6, 0xEEAF, 0xCDF8, 0, 0, 0, 0, 0xDEB8, /* 0xA0 */ + 0xFCA7, 0xF7FC, 0xF7B1, 0xCEBB, 0xF4A1, 0, 0, 0xEECD, /* 0xA0 */ + 0xE1AE, 0, 0, 0xECC3, 0xCFFE, 0, 0xF8BF, 0xD8E2, /* 0xB0 */ + 0xD3E8, 0, 0, 0xDEA8, 0xF4E4, 0xECC2, 0, 0xD9F5, /* 0xB0 */ + 0xF9C5, 0xDDD3, 0xD6F1, 0xECFC, 0xFCF0, 0, 0, 0xEDC0, /* 0xC0 */ + 0xCAB9, 0, 0xEEE4, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF2E1, 0, 0xDEB9, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xD6F2, 0, 0xDEF4, 0, 0xDFDB, 0, /* 0xD0 */ + 0xDBD3, 0, 0xFAE7, 0xD8E3, 0xF4C1, 0, 0xDDB7, 0, /* 0xE0 */ + 0, 0, 0xF2F5, 0, 0, 0xD4AE, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xD6F3, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xDDB8, 0xCFC5, 0xDFDF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF2BE, 0xF6A1, 0, 0xEBCB, /* 0x00 */ + 0xF1FC, 0, 0xF3C7, 0, 0, 0xE0EB, 0, 0, /* 0x00 */ + 0, 0, 0, 0xEDFC, 0, 0, 0xE1DB, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xEEE5, 0, 0xDEF5, 0, /* 0x60 */ + 0, 0, 0, 0xFAD3, 0, 0, 0, 0, /* 0x60 */ + 0xF1CB, 0, 0, 0xD0AF, 0xDDB9, 0, 0, 0xD1C3, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF5B1, 0, 0, /* 0x80 */ + 0, 0, 0xEAC6, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xF0E1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF6AC, 0, 0, 0, 0, /* 0xA0 */ + 0xF5D9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF0EB, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xDDBA, 0, 0, 0, 0xF2BF, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF7C5, 0, /* 0xC0 */ + 0, 0, 0, 0xDBA2, 0xF2F6, 0, 0, 0xCABA, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF7F5, 0, 0xCBE5, 0, 0, /* 0xD0 */ + 0, 0xEEE6, 0, 0xE0D3, 0, 0, 0, 0, /* 0xE0 */ + 0xCEA5, 0, 0, 0, 0, 0, 0, 0xD6D8, /* 0xE0 */ + 0, 0, 0, 0xD4AF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9C9, 0, 0, 0, 0, 0xD3CE, /* 0x00 */ + 0xF4C2, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xCBE6, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF1A1, 0, 0, 0, 0, 0, /* 0x20 */ + 0xEBB2, 0, 0, 0, 0, 0xF1A2, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xEBB3, 0, 0xF0B4, 0, 0, 0xCBF4, /* 0x40 */ + 0xD4B0, 0xF3B2, 0xFBB7, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF5EC, 0, 0, 0, 0, 0, 0xEEE7, /* 0x50 */ + 0xF4B2, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xF5ED, 0, 0xCFF3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF0E2, 0, 0, 0, 0, 0, 0xEECE, /* 0x80 */ + 0, 0, 0xF1CC, 0, 0, 0xE5B8, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xD7F5, 0xE3F3, 0xCFE5, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xCFC6, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xF3B3, 0xE4D8, 0xCFF9, 0xCFDA, 0, 0, /* 0xC0 */ + 0, 0, 0xFACD, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6E3, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF2E2, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xF5EE, 0, 0, 0xCABB, 0, 0, 0xE3DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCEF2, 0, 0xD6D9, 0, 0, /* 0x00 */ + 0, 0xEEB0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF4E5, 0xD8C2, 0xDCD0, 0xCCEE, 0, 0, /* 0x10 */ + 0, 0, 0, 0xD5E0, 0xF6CA, 0xFDCA, 0xD8D6, 0xF4CF, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xD6A6, 0xDCBE, /* 0x20 */ + 0, 0xDBD4, 0xD7C7, 0, 0, 0, 0, 0xF2FE, /* 0x20 */ + 0, 0, 0, 0xF1CD, 0, 0, 0, 0, /* 0x30 */ + 0xE2C3, 0xDCDE, 0, 0xDCDF, 0, 0, 0xEFAD, 0xE6AB, /* 0x30 */ + 0, 0, 0, 0, 0xF9DD, 0xEABF, 0, 0, /* 0x40 */ + 0, 0xEFAE, 0, 0, 0, 0xF4D0, 0xCEF3, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE6AC, 0, 0xCEDE, /* 0x50 */ + 0, 0, 0xD5F9, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE3F4, 0xCDD0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xD5B8, 0, 0, 0xF7FD, 0, /* 0xA0 */ + 0xDCA9, 0, 0, 0, 0, 0xDEF6, 0, 0xDCAA, /* 0xA0 */ + 0xF2E3, 0xE9B4, 0xD2DC, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE9E6, 0, 0, 0xE3F6, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE7CA, 0, /* 0xC0 */ + 0, 0xD0CE, 0, 0, 0xDAF7, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xCABC, 0, /* 0xE0 */ + 0, 0, 0xEEE8, 0xDADE, 0, 0xF2F7, 0, 0, /* 0xE0 */ + 0xE2FB, 0, 0xCCA6, 0, 0, 0, 0, 0xDABB, /* 0xF0 */ + 0, 0xEEE9, 0, 0, 0, 0xF5DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF7DC, 0xE1EA, 0xCEC1, 0xD4B1, 0, 0xFDB1, 0xE6BD, 0, /* 0x00 */ + 0xFBAD, 0, 0, 0xF8E7, 0, 0xE1CE, 0, 0xF7E2, /* 0x00 */ + 0xF5EF, 0xCFC7, 0, 0, 0xD4B2, 0xCCEF, 0, 0xD4E8, /* 0x10 */ + 0, 0xEECF, 0xF7D7, 0, 0, 0xE0A6, 0xD6C1, 0xE1DC, /* 0x10 */ + 0xF0E3, 0xF1E4, 0xDCF1, 0xD6A7, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF4F5, 0, /* 0x20 */ + 0, 0xF1CE, 0xF2E4, 0, 0, 0xD0B0, 0, 0, /* 0x30 */ + 0xECEF, 0, 0, 0, 0xF9BA, 0, 0xEBB5, 0, /* 0x30 */ + 0, 0xD4ED, 0xE2C4, 0, 0, 0, 0, 0xE9E7, /* 0x40 */ + 0, 0, 0xEBB4, 0xEAA1, 0, 0xF8BC, 0xCEA6, 0, /* 0x40 */ + 0xF9C6, 0xFCDA, 0, 0xD4B3, 0xD3B9, 0xEADE, 0, 0, /* 0x50 */ + 0, 0xE9AB, 0, 0, 0xE1E1, 0xD3CF, 0xF4F6, 0, /* 0x50 */ + 0xEAC0, 0xE1CF, 0, 0xCCBA, 0, 0, 0, 0, /* 0x60 */ + 0, 0xEEEA, 0, 0, 0, 0xF0E4, 0xF3B4, 0xD4EE, /* 0x60 */ + 0, 0, 0xF2C0, 0, 0, 0xF1E5, 0, 0xF4C3, /* 0x70 */ + 0xE0D4, 0, 0xEBB6, 0, 0xD7A1, 0xCBE8, 0, 0xF9AD, /* 0x70 */ + 0xE9AD, 0xD8E4, 0xFAB3, 0xE2C5, 0xFCBD, 0, 0, 0xECC4, /* 0x80 */ + 0xD8B1, 0, 0xDCAB, 0, 0, 0, 0, 0xD5A4, /* 0x80 */ + 0, 0xEBE9, 0, 0, 0, 0xE8BB, 0, 0, /* 0x90 */ + 0, 0xD8D7, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xFBAE, 0xD1E1, 0, 0, 0xDBC0, 0, /* 0xA0 */ + 0xF5BE, 0, 0xDEF7, 0, 0, 0, 0, 0xCAFB, /* 0xA0 */ + 0xF7C6, 0xCFC8, 0, 0, 0, 0xE1D0, 0, 0, /* 0xB0 */ + 0xEED0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE9F4, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xCEF4, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xD5CD, 0, /* 0xD0 */ + 0, 0xCFDB, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xDDBB, 0, 0, 0, 0, 0xCEAC, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE9E8, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xD4B4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4C7, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF5DB, 0, 0, 0xFAC1, 0, 0, /* 0x10 */ + 0, 0xDEA9, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xD4F8, /* 0x20 */ + 0, 0, 0, 0, 0, 0xEFF7, 0, 0, /* 0x20 */ + 0, 0, 0xD3B3, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xEBB7, 0xEFF8, 0xF5DC, 0xEDCC, 0xDBD5, 0xF1CF, 0, /* 0x40 */ + 0, 0, 0xF1D0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xF5B2, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xD9AE, 0xD5AC, 0, 0xE2C6, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xFDA3, 0, 0xFBE5, /* 0x70 */ + 0xDFAB, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2F5, /* 0x80 */ + 0, 0xF6AD, 0, 0xF5B3, 0, 0xF0B5, 0, 0, /* 0x80 */ + 0, 0, 0xE1A5, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF5DD, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xECA2, 0xEDFD, 0, 0xF5B4, 0xFBB8, /* 0xA0 */ + 0, 0xDBA3, 0, 0, 0xD6CA, 0xCBD9, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE5D4, 0, 0, 0, 0, 0, 0, 0xF3FA, /* 0xC0 */ + 0, 0xEBB8, 0, 0xE0B7, 0xD7EC, 0xF1EC, 0xE5AF, 0xD5E1, /* 0xC0 */ + 0xD7ED, 0xD1D1, 0, 0, 0, 0, 0, 0xE1F2, /* 0xD0 */ + 0xEFF9, 0, 0, 0, 0xDDBC, 0xF6DC, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF0E5, 0, 0, 0, 0xF4C4, /* 0xE0 */ + 0, 0, 0xE9E9, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF3FB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4EF, 0, 0, /* 0x00 */ + 0xCCA2, 0xF7FE, 0xDFBC, 0, 0, 0, 0, 0xEBCD, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xD0B7, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xD6C2, 0, 0, 0, /* 0x30 */ + 0, 0, 0xE8AD, 0, 0, 0, 0, 0xEFAF, /* 0x30 */ + 0xCBA5, 0, 0, 0, 0, 0xCBE9, 0, 0, /* 0x40 */ + 0, 0xFAE8, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xCCC6, /* 0x50 */ + 0, 0, 0, 0xE6E7, 0, 0, 0xEAC7, 0, /* 0x50 */ + 0, 0, 0xDBA4, 0, 0xCFC9, 0xE2FC, 0xEFFA, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xEBDE, 0, 0, 0xF5C8, 0, 0xD4DE, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE0D5, 0, 0xEFB0, 0, 0, 0xE2C7, 0, /* 0x90 */ + 0xD9AF, 0, 0, 0, 0xF9E7, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE7E5, 0, 0, 0xCFCA, 0xE1D1, /* 0xB0 */ + 0, 0xE2C8, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xEFFB, 0, 0, 0xFAF9, /* 0xC0 */ + 0, 0, 0xDCF2, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE0A7, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF8E8, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xCBEA, 0, 0, 0, 0xCBBC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD6E2, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xF5DE, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF5DF, 0, 0xEEB6, 0, 0, 0, 0xE2F6, 0xD3CA, /* 0x10 */ + 0xEFFC, 0xD1C4, 0xEFB1, 0, 0xD1C5, 0, 0xD0DE, 0, /* 0x20 */ + 0xD9E1, 0, 0, 0xE0B8, 0, 0, 0xCDD1, 0xF3B9, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xE7CC, 0, 0xD6A8, 0xCEA7, 0, 0xD4B5, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE4C8, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xD3B4, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xEBB9, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xCBF5, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF6DD, 0, 0xF1A3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xCCC7, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE9CA, 0, 0xE1F0, 0, /* 0x90 */ + 0, 0, 0xF5E0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xFBAF, 0, 0, 0, 0xCBD1, /* 0xA0 */ + 0, 0, 0, 0, 0xFBE0, 0xF2E5, 0, 0, /* 0xA0 */ + 0xECF0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF0EC, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xEEEB, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE9CB, 0, /* 0xD0 */ + 0, 0xCCF0, 0, 0, 0xD7AF, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xF3A1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFCF5, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF1A4, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE0D6, 0, 0, /* 0x20 */ + 0, 0, 0, 0xEFB2, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF4D1, 0, 0, /* 0x30 */ + 0xF7A1, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF1D1, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xCAFC, 0xCAFD, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xCECE, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF3C8, 0, 0xF3BA /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDFE, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xDAA6, 0, 0, 0xE0EC, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF8CD, 0, 0xCBD2, 0, 0, 0, 0xEBCE, /* 0x80 */ + 0, 0xF9D8, 0xF9D9, 0xCAE0, 0xDACA, 0, 0, 0, /* 0x90 */ + 0xCBA6, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xCAC8, 0xF9EE, 0xDBEC, 0, 0, /* 0xA0 */ + 0xD0B1, 0, 0, 0, 0, 0xD5EF, 0, 0, /* 0xA0 */ + 0, 0xE6F3, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE7A2, 0xE4D9, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE4E1, /* 0xC0 */ + 0, 0, 0xFCC4, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF9EF, 0xCFF4, 0xF7E6, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xCEBC, 0, 0, 0, /* 0xD0 */ + 0, 0xF4C5, 0xDCA3 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDDBD, 0, 0, 0, /* 0x10 */ + 0, 0xF4C6, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF8A1, 0, 0, 0, 0xE8D6, 0, /* 0x20 */ + 0, 0, 0xDBC1, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF0E6, 0, 0, 0, 0xE4B9, /* 0x30 */ + 0xF6ED, 0, 0xF9AE, 0, 0xDDBE, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xD7B0, 0xD8E8, 0xCBBD, 0, 0, /* 0x40 */ + 0xF9DA, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xF8CE, 0xF9F0, 0xE0ED, 0xE3B3, 0xF4B3, /* 0x50 */ + 0, 0, 0xEAC2, 0xF2E6, 0xF0B6, 0, 0, 0, /* 0x60 */ + 0, 0, 0xDBD6, 0, 0, 0, 0, 0, /* 0x60 */ + 0xEBE4, 0, 0, 0xF2E7, 0, 0xD7D5, 0xD4B6, 0xF9E8, /* 0x70 */ + 0xD7C1, 0, 0, 0, 0, 0xE5D5, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE9EA, 0xD7CC, 0, /* 0x80 */ + 0, 0, 0xD3E9, 0xE2C9, 0, 0xFCDB, 0xCDAD, 0, /* 0x80 */ + 0, 0, 0, 0, 0xCCB0, 0xEAA2, 0, 0, /* 0x90 */ + 0xE4F6, 0xD0C0, 0, 0xF0B7, 0xEEA1, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xD7F6, 0, 0, 0, 0xE2CA, /* 0xA0 */ + 0xE2CB, 0, 0xFACF, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xEBDF, 0, 0, 0, 0, 0, 0xD6CB, /* 0xB0 */ + 0, 0, 0, 0xF4B4, 0, 0, 0, 0, /* 0xB0 */ + 0xEDCD, 0xE4D2, 0, 0, 0xEAA9, 0xE4BA, 0xF3A2, 0xCDD2, /* 0xC0 */ + 0, 0xF6CB, 0, 0xF1E6, 0xEDC1, 0xE8BC, 0xEED1, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xF0E7, 0xE2CC, 0, /* 0xD0 */ + 0, 0xE4AA, 0, 0xF5E1, 0xEDDA, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xD7EE, 0xD1F1, 0, 0, 0, 0, /* 0xE0 */ + 0xE9EB, 0xE9EC, 0xE0E4, 0, 0, 0, 0, 0xDAA7, /* 0xE0 */ + 0xDDD4, 0, 0xEAA3, 0, 0, 0, 0xD6C3, 0xD6F4, /* 0xF0 */ + 0, 0xDADF, 0, 0xEFB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2CD, 0, 0, 0, 0, 0, 0xEFFD, 0xF2E8, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xEFC5, 0, 0xE7E7, 0, 0, 0xD7FD, 0, /* 0x10 */ + 0, 0xE7CE, 0, 0, 0xDFDC, 0, 0xF9C7, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xD9F6, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xDFAC, 0, 0xD6DA, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDCA4, 0, 0, 0, 0xF0B8, 0, 0, /* 0x30 */ + 0, 0, 0xD5FA, 0, 0xE4F7, 0, 0, 0, /* 0x40 */ + 0xD6C4, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF4EC, 0, 0, 0, 0, 0xEFFE, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF0A1, 0, 0xDEAA, 0, /* 0x50 */ + 0, 0xDABC, 0xD8FC, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xFAD4, 0, 0, 0, 0xECE5, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xFCA8, 0, 0, 0xECE6, /* 0x70 */ + 0, 0, 0xD8CB, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xFBB9, 0, 0xE4D3, 0, 0xCDF9, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xCFD3, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xCAEA, 0, 0, 0xCFD4, 0, 0xF8BD, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF4C7, 0, /* 0xC0 */ + 0, 0, 0, 0xEADF, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xF9DB, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xD4B7, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xEBE5, 0, 0, 0xE1D2, 0, /* 0xF0 */ + 0, 0, 0, 0xEAA4, 0, 0, 0, 0xFAC2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFBE1, 0xFAED, 0xF0A2, 0xCCF1, 0, 0xFAA3, 0xE2F7, 0, /* 0x00 */ + 0xE2CE, 0, 0xE9F5, 0, 0xE1EB, 0, 0, 0, /* 0x00 */ + 0xE7E8, 0xE8D7, 0xDAF8, 0xD4CB, 0, 0, 0, 0xF7F6, /* 0x10 */ + 0xD6C5, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xD4E9, 0, 0, /* 0x20 */ + 0xFAFA, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xCCF2, 0xF7DD, 0, 0xDEBA, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xCEA8, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF0B9, 0xE4FE, 0xE4C9, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE4D4, 0, 0, 0, /* 0x50 */ + 0xEAC3, 0, 0xEFB4, 0, 0, 0, 0xD7BE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xFBE2, 0, 0xCDD3, /* 0x60 */ + 0, 0, 0, 0xEFB5, 0, 0, 0, 0xFAE9, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF9A6, 0, 0, 0, 0, 0, 0, 0xDFBD, /* 0xA0 */ + 0, 0xF7C7, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF8FD, 0, 0, 0xF8FC, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xDEAB, 0xDBE8, 0, 0, 0xE3DD, /* 0xD0 */ + 0, 0xE1E2, 0xD1C6, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF6D0, 0xEBE6, 0xDAF9, /* 0xE0 */ + 0, 0, 0, 0, 0xECC7, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xDEF8, 0xF8E9, 0xE3DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCEF5, 0, 0, 0, 0, /* 0x00 */ + 0, 0xFAC3, 0xE5D7, 0, 0xECC8, 0, 0, 0, /* 0x00 */ + 0xF3C9, 0, 0, 0xE4BB, 0, 0, 0, 0, /* 0x10 */ + 0xE6AE, 0, 0, 0, 0, 0, 0xEFB6, 0, /* 0x10 */ + 0xDCBF, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xCEBD, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xD8C3, 0, 0, /* 0x40 */ + 0, 0xD0CF, 0, 0xCFFA, 0xF3CA, 0xE0D7, 0, 0, /* 0x40 */ + 0, 0xD1C7, 0xE9AE, 0, 0xE8BD, 0, 0, 0xFAC4, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xE2CF, 0, /* 0x90 */ + 0, 0xFAC5, 0, 0, 0, 0xF9B8, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xDCE0, 0, 0, /* 0xA0 */ + 0xFBB0, 0, 0, 0, 0xD8A9, 0xE5DF, 0xF9A7, 0, /* 0xA0 */ + 0, 0xF6EE, 0, 0xF6CC, 0xE2F8, 0, 0, 0, /* 0xB0 */ + 0, 0xECF1, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xDAE0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xF1D2, 0xD2CC, 0xCFCB, 0, 0, 0xCABD, 0, 0, /* 0xD0 */ + 0, 0xDDBF, 0, 0, 0, 0xF6EF, 0, 0xDEF9, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xFAB4, 0, 0, /* 0xE0 */ + 0, 0xD5AD, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF1E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDEBE, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xDCC0, 0, 0, 0, 0, 0, 0xD1C8, 0xD1C9, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF8BE, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xCBF6, 0, 0, 0, 0, /* 0x20 */ + 0xD4F9, 0, 0, 0, 0, 0, 0xF5E2, 0xE1D3, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xD8E9, 0, 0, 0xF8FE, 0, 0xCFCC, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xFDA4, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xCEF6, 0, 0xFAD0, /* 0x50 */ + 0, 0, 0xCCF3, 0xE6BE, 0, 0, 0, 0xF6AE, /* 0x50 */ + 0, 0, 0xD5F0, 0, 0, 0xD1CA, 0, 0, /* 0x60 */ + 0, 0xFCBE, 0xD5F1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xCDE9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xFAB5, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE2D0, 0xF4F7, 0, 0, 0, /* 0xD0 */ + 0xCDD4, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xE7A3, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xDBA5 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2D1, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xD7A2, /* 0x20 */ + 0, 0, 0xF7E3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xEAA6, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xD0A1, 0, 0, 0, /* 0x30 */ + 0, 0xCEDA, 0xFBEB, 0xDBA6, 0xDBDE, 0xD8E5, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAE0, /* 0x40 */ + 0, 0, 0, 0, 0xD8AA, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE5E0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xD6DB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xEFC6, 0, /* 0x80 */ + 0, 0xF8EA, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE4D5, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xCEF7, 0, 0, 0xE0D8, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xD7EF, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xF4ED, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xCDE6, 0, 0, 0, /* 0xE0 */ + 0xCCF4 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5E3, 0, 0, /* 0x00 */ + 0xE4CA, 0, 0xDCE1, 0, 0, 0xF9C8, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xFCBF, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE8A7, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD8C4, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xCBBE, /* 0x40 */ + 0, 0xDCAE, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xD7F7, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF0E8, 0, 0xDDC0, /* 0xE0 */ + 0, 0xCFCD, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xDCF3, 0xD9B0, 0, 0xE6E9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4BC, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xEAC4, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE4EC, 0, /* 0x20 */ + 0xE4E5, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xFBF8, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xCCBB, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE4BD, 0, 0, /* 0x50 */ + 0xCDDC, 0xD9F7, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xDDDF, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEDCE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xD9D0, 0, 0, 0, 0, 0, 0xE5A3, /* 0xA0 */ + 0, 0, 0, 0, 0xF9CD, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xCDAE, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFCE, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF6AF, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xFDD3, 0xEBED, 0xD6DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5A4, 0, 0, 0, 0xD5B6, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xD6DD, 0, 0, /* 0x70 */ + 0, 0xF9E9, 0, 0, 0, 0xE7A4, 0, 0xD6E3, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD1CB, 0xD6E4, 0, 0, 0, 0xD5F2, /* 0x90 */ + 0, 0, 0, 0, 0, 0xDEFA, 0, 0xD7F8, /* 0x90 */ + 0, 0, 0, 0, 0, 0xD8EA, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xCFD5, 0xD8FD, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xD8AB, 0, 0, 0xFDCB, 0, /* 0xB0 */ + 0, 0, 0, 0xFCDC, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE0A8, 0xD5F3, 0, /* 0xC0 */ + 0, 0xFDD9, 0, 0, 0xCCA3, 0, 0, 0, /* 0xD0 */ + 0xD9F9, 0, 0, 0xD3EA, 0xF5F5, 0, 0xEFC7, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xD3DA, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xDABD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE8A8, /* 0x00 */ + 0xDCAF, 0, 0, 0, 0, 0, 0xF0A3, 0, /* 0x00 */ + 0, 0, 0, 0xCDD5, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE0A9, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xDEAC, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF0BA, 0xEEB1, 0, 0, 0xEEB2, 0, /* 0x40 */ + 0, 0, 0xF6CD, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xEED2, /* 0x50 */ + 0, 0xD6C6, 0, 0, 0, 0, 0, 0xE0E5, /* 0x60 */ + 0, 0, 0xF3BB, 0, 0xE5E1, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xE4CB, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xD7A3, 0, 0, /* 0x80 */ + 0xDBC2, 0, 0, 0, 0, 0xCAFE, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xCFCF /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_AC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB0A1, 0xB0A2, 0x8141, 0x8142, 0xB0A3, 0x8143, 0x8144, 0xB0A4, /* 0x00 */ + 0xB0A5, 0xB0A6, 0xB0A7, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, /* 0x00 */ + 0xB0A8, 0xB0A9, 0xB0AA, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF, /* 0x10 */ + 0x814A, 0xB0B0, 0xB0B1, 0xB0B2, 0xB0B3, 0xB0B4, 0x814B, 0x814C, /* 0x10 */ + 0xB0B5, 0x814D, 0x814E, 0x814F, 0xB0B6, 0x8150, 0x8151, 0x8152, /* 0x20 */ + 0x8153, 0x8154, 0x8155, 0x8156, 0xB0B7, 0xB0B8, 0x8157, 0xB0B9, /* 0x20 */ + 0xB0BA, 0xB0BB, 0x8158, 0x8159, 0x815A, 0x8161, 0x8162, 0x8163, /* 0x30 */ + 0xB0BC, 0xB0BD, 0x8164, 0x8165, 0xB0BE, 0x8166, 0x8167, 0x8168, /* 0x30 */ + 0xB0BF, 0x8169, 0x816A, 0x816B, 0x816C, 0x816D, 0x816E, 0x816F, /* 0x40 */ + 0x8170, 0x8171, 0x8172, 0xB0C0, 0x8173, 0xB0C1, 0x8174, 0x8175, /* 0x40 */ + 0x8176, 0x8177, 0x8178, 0x8179, 0xB0C2, 0x817A, 0x8181, 0x8182, /* 0x50 */ + 0xB0C3, 0x8183, 0x8184, 0x8185, 0xB0C4, 0x8186, 0x8187, 0x8188, /* 0x50 */ + 0x8189, 0x818A, 0x818B, 0x818C, 0x818D, 0x818E, 0x818F, 0x8190, /* 0x60 */ + 0x8191, 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8198, /* 0x60 */ + 0xB0C5, 0xB0C6, 0x8199, 0x819A, 0xB0C7, 0x819B, 0x819C, 0xB0C8, /* 0x70 */ + 0xB0C9, 0x819D, 0xB0CA, 0x819E, 0x819F, 0x81A0, 0x81A1, 0x81A2, /* 0x70 */ + 0xB0CB, 0xB0CC, 0x81A3, 0xB0CD, 0xB0CE, 0xB0CF, 0xB0D0, 0x81A4, /* 0x80 */ + 0x81A5, 0xB0D1, 0xB0D2, 0xB0D3, 0xB0D4, 0x81A6, 0x81A7, 0x81A8, /* 0x80 */ + 0xB0D5, 0x81A9, 0x81AA, 0x81AB, 0xB0D6, 0x81AC, 0x81AD, 0x81AE, /* 0x90 */ + 0x81AF, 0x81B0, 0x81B1, 0x81B2, 0xB0D7, 0xB0D8, 0x81B3, 0xB0D9, /* 0x90 */ + 0xB0DA, 0xB0DB, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, /* 0xA0 */ + 0xB0DC, 0xB0DD, 0xB0DE, 0x81BA, 0xB0DF, 0x81BB, 0x81BC, 0xB0E0, /* 0xA0 */ + 0xB0E1, 0x81BD, 0x81BE, 0x81BF, 0x81C0, 0x81C1, 0x81C2, 0x81C3, /* 0xB0 */ + 0xB0E2, 0xB0E3, 0x81C4, 0xB0E4, 0xB0E5, 0xB0E6, 0x81C5, 0x81C6, /* 0xB0 */ + 0x81C7, 0xB0E7, 0x81C8, 0x81C9, 0xB0E8, 0x81CA, 0x81CB, 0x81CC, /* 0xC0 */ + 0xB0E9, 0x81CD, 0x81CE, 0x81CF, 0xB0EA, 0x81D0, 0x81D1, 0x81D2, /* 0xC0 */ + 0x81D3, 0x81D4, 0x81D5, 0x81D6, 0x81D7, 0xB0EB, 0x81D8, 0xB0EC, /* 0xD0 */ + 0x81D9, 0x81DA, 0x81DB, 0x81DC, 0x81DD, 0x81DE, 0x81DF, 0x81E0, /* 0xD0 */ + 0xB0ED, 0xB0EE, 0x81E1, 0x81E2, 0xB0EF, 0x81E3, 0x81E4, 0xB0F0, /* 0xE0 */ + 0xB0F1, 0x81E5, 0xB0F2, 0x81E6, 0xB0F3, 0x81E7, 0x81E8, 0xB0F4, /* 0xE0 */ + 0xB0F5, 0xB0F6, 0x81E9, 0xB0F7, 0x81EA, 0xB0F8, 0xB0F9, 0x81EB, /* 0xF0 */ + 0x81EC, 0x81ED, 0x81EE, 0x81EF, 0xB0FA, 0xB0FB, 0x81F0, 0x81F1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_AD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB0FC, 0x81F2, 0x81F3, 0x81F4, 0xB0FD, 0x81F5, 0xB0FE, 0x81F6, /* 0x00 */ + 0x81F7, 0x81F8, 0x81F9, 0x81FA, 0xB1A1, 0xB1A2, 0x81FB, 0xB1A3, /* 0x00 */ + 0x81FC, 0xB1A4, 0x81FD, 0x81FE, 0x8241, 0x8242, 0x8243, 0x8244, /* 0x10 */ + 0xB1A5, 0x8245, 0x8246, 0x8247, 0xB1A6, 0x8248, 0x8249, 0x824A, /* 0x10 */ + 0xB1A7, 0x824B, 0x824C, 0x824D, 0x824E, 0x824F, 0x8250, 0x8251, /* 0x20 */ + 0x8252, 0xB1A8, 0x8253, 0x8254, 0xB1A9, 0xB1AA, 0x8255, 0x8256, /* 0x20 */ + 0x8257, 0x8258, 0x8259, 0x825A, 0xB1AB, 0xB1AC, 0x8261, 0x8262, /* 0x30 */ + 0xB1AD, 0x8263, 0x8264, 0x8265, 0xB1AE, 0x8266, 0x8267, 0x8268, /* 0x30 */ + 0x8269, 0x826A, 0x826B, 0x826C, 0xB1AF, 0xB1B0, 0x826D, 0xB1B1, /* 0x40 */ + 0x826E, 0xB1B2, 0x826F, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, /* 0x40 */ + 0xB1B3, 0x8275, 0x8276, 0x8277, 0xB1B4, 0x8278, 0x8279, 0x827A, /* 0x50 */ + 0xB1B5, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, /* 0x50 */ + 0x8288, 0xB1B6, 0x8289, 0xB1B7, 0x828A, 0x828B, 0x828C, 0x828D, /* 0x60 */ + 0x828E, 0x828F, 0x8290, 0x8291, 0xB1B8, 0xB1B9, 0x8292, 0x8293, /* 0x60 */ + 0xB1BA, 0x8294, 0x8295, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1BE, 0x8296, /* 0x70 */ + 0x8297, 0x8298, 0x8299, 0xB1BF, 0xB1C0, 0xB1C1, 0x829A, 0xB1C2, /* 0x70 */ + 0x829B, 0xB1C3, 0xB1C4, 0x829C, 0x829D, 0x829E, 0x829F, 0x82A0, /* 0x80 */ + 0xB1C5, 0xB1C6, 0x82A1, 0x82A2, 0xB1C7, 0x82A3, 0x82A4, 0x82A5, /* 0x80 */ + 0xB1C8, 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x82AC, /* 0x90 */ + 0x82AD, 0x82AE, 0x82AF, 0x82B0, 0xB1C9, 0xB1CA, 0x82B1, 0x82B2, /* 0x90 */ + 0x82B3, 0x82B4, 0x82B5, 0x82B6, 0xB1CB, 0x82B7, 0x82B8, 0x82B9, /* 0xA0 */ + 0x82BA, 0x82BB, 0x82BC, 0x82BD, 0x82BE, 0x82BF, 0x82C0, 0x82C1, /* 0xA0 */ + 0x82C2, 0x82C3, 0x82C4, 0x82C5, 0x82C6, 0x82C7, 0x82C8, 0xB1CC, /* 0xB0 */ + 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, 0x82CE, 0x82CF, 0x82D0, /* 0xB0 */ + 0xB1CD, 0xB1CE, 0x82D1, 0x82D2, 0xB1CF, 0x82D3, 0x82D4, 0x82D5, /* 0xC0 */ + 0xB1D0, 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC, /* 0xC0 */ + 0xB1D1, 0xB1D2, 0x82DD, 0xB1D3, 0x82DE, 0x82DF, 0x82E0, 0x82E1, /* 0xD0 */ + 0x82E2, 0x82E3, 0x82E4, 0x82E5, 0xB1D4, 0x82E6, 0x82E7, 0x82E8, /* 0xD0 */ + 0xB1D5, 0x82E9, 0x82EA, 0x82EB, 0xB1D6, 0x82EC, 0x82ED, 0x82EE, /* 0xE0 */ + 0x82EF, 0x82F0, 0x82F1, 0x82F2, 0x82F3, 0x82F4, 0x82F5, 0x82F6, /* 0xE0 */ + 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, 0x82FC, 0x82FD, 0x82FE, /* 0xF0 */ + 0xB1D7, 0xB1D8, 0x8341, 0x8342, 0xB1D9, 0x8343, 0x8344, 0xB1DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_AE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB1DB, 0xB1DC, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, /* 0x00 */ + 0xB1DD, 0xB1DE, 0x834B, 0xB1DF, 0x834C, 0xB1E0, 0x834D, 0x834E, /* 0x00 */ + 0x834F, 0x8350, 0x8351, 0x8352, 0xB1E1, 0x8353, 0x8354, 0x8355, /* 0x10 */ + 0x8356, 0x8357, 0x8358, 0x8359, 0x835A, 0x8361, 0x8362, 0x8363, /* 0x10 */ + 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, /* 0x20 */ + 0x836C, 0x836D, 0x836E, 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, /* 0x20 */ + 0xB1E2, 0xB1E3, 0x8374, 0x8375, 0xB1E4, 0x8376, 0x8377, 0xB1E5, /* 0x30 */ + 0xB1E6, 0x8378, 0xB1E7, 0x8379, 0x837A, 0x8381, 0x8382, 0x8383, /* 0x30 */ + 0xB1E8, 0xB1E9, 0x8384, 0xB1EA, 0x8385, 0xB1EB, 0xB1EC, 0x8386, /* 0x40 */ + 0x8387, 0x8388, 0xB1ED, 0x8389, 0xB1EE, 0xB1EF, 0xB1F0, 0x838A, /* 0x40 */ + 0xB1F1, 0x838B, 0x838C, 0x838D, 0xB1F2, 0x838E, 0xB1F3, 0x838F, /* 0x50 */ + 0x8390, 0x8391, 0x8392, 0x8393, 0xB1F4, 0xB1F5, 0x8394, 0xB1F6, /* 0x50 */ + 0xB1F7, 0xB1F8, 0x8395, 0x8396, 0x8397, 0xB1F9, 0x8398, 0x8399, /* 0x60 */ + 0xB1FA, 0xB1FB, 0x839A, 0x839B, 0xB1FC, 0x839C, 0x839D, 0x839E, /* 0x60 */ + 0xB1FD, 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, 0x83A4, 0x83A5, /* 0x70 */ + 0xB1FE, 0xB2A1, 0x83A6, 0xB2A2, 0xB2A3, 0xB2A4, 0x83A7, 0x83A8, /* 0x70 */ + 0x83A9, 0x83AA, 0x83AB, 0x83AC, 0xB2A5, 0xB2A6, 0x83AD, 0x83AE, /* 0x80 */ + 0x83AF, 0x83B0, 0x83B1, 0x83B2, 0xB2A7, 0x83B3, 0x83B4, 0x83B5, /* 0x80 */ + 0x83B6, 0x83B7, 0x83B8, 0x83B9, 0x83BA, 0x83BB, 0x83BC, 0x83BD, /* 0x90 */ + 0x83BE, 0x83BF, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0x83C5, /* 0x90 */ + 0x83C6, 0x83C7, 0x83C8, 0x83C9, 0x83CA, 0x83CB, 0x83CC, 0x83CD, /* 0xA0 */ + 0x83CE, 0x83CF, 0x83D0, 0x83D1, 0x83D2, 0x83D3, 0x83D4, 0x83D5, /* 0xA0 */ + 0x83D6, 0x83D7, 0x83D8, 0x83D9, 0x83DA, 0x83DB, 0x83DC, 0x83DD, /* 0xB0 */ + 0x83DE, 0x83DF, 0x83E0, 0x83E1, 0xB2A8, 0xB2A9, 0xB2AA, 0x83E2, /* 0xB0 */ + 0xB2AB, 0x83E3, 0x83E4, 0x83E5, 0xB2AC, 0x83E6, 0x83E7, 0x83E8, /* 0xC0 */ + 0x83E9, 0x83EA, 0x83EB, 0x83EC, 0xB2AD, 0xB2AE, 0x83ED, 0xB2AF, /* 0xC0 */ + 0xB2B0, 0xB2B1, 0x83EE, 0x83EF, 0x83F0, 0x83F1, 0x83F2, 0x83F3, /* 0xD0 */ + 0xB2B2, 0xB2B3, 0x83F4, 0x83F5, 0xB2B4, 0x83F6, 0x83F7, 0x83F8, /* 0xD0 */ + 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, 0x8441, 0x8442, /* 0xE0 */ + 0xB2B5, 0x8443, 0x8444, 0xB2B6, 0x8445, 0xB2B7, 0x8446, 0x8447, /* 0xE0 */ + 0x8448, 0x8449, 0x844A, 0x844B, 0xB2B8, 0x844C, 0x844D, 0x844E, /* 0xF0 */ + 0xB2B9, 0x844F, 0x8450, 0x8451, 0xB2BA, 0x8452, 0x8453, 0x8454 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_AF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845A, 0x8461, 0xB2BB, /* 0x00 */ + 0xB2BC, 0x8462, 0x8463, 0x8464, 0x8465, 0xB2BD, 0x8466, 0x8467, /* 0x00 */ + 0xB2BE, 0x8468, 0x8469, 0x846A, 0x846B, 0x846C, 0x846D, 0x846E, /* 0x10 */ + 0x846F, 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, /* 0x10 */ + 0x8477, 0x8478, 0x8479, 0x847A, 0x8481, 0x8482, 0x8483, 0x8484, /* 0x20 */ + 0x8485, 0x8486, 0x8487, 0x8488, 0xB2BF, 0xB2C0, 0x8489, 0x848A, /* 0x20 */ + 0xB2C1, 0x848B, 0xB2C2, 0x848C, 0xB2C3, 0x848D, 0x848E, 0x848F, /* 0x30 */ + 0x8490, 0x8491, 0x8492, 0x8493, 0xB2C4, 0xB2C5, 0x8494, 0xB2C6, /* 0x30 */ + 0x8495, 0xB2C7, 0xB2C8, 0xB2C9, 0x8496, 0x8497, 0x8498, 0x8499, /* 0x40 */ + 0xB2CA, 0xB2CB, 0x849A, 0x849B, 0x849C, 0x849D, 0x849E, 0x849F, /* 0x40 */ + 0xB2CC, 0x84A0, 0x84A1, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, /* 0x50 */ + 0x84A7, 0x84A8, 0x84A9, 0x84AA, 0xB2CD, 0xB2CE, 0x84AB, 0x84AC, /* 0x50 */ + 0x84AD, 0x84AE, 0x84AF, 0x84B0, 0xB2CF, 0xB2D0, 0x84B1, 0x84B2, /* 0x60 */ + 0x84B3, 0x84B4, 0x84B5, 0x84B6, 0x84B7, 0x84B8, 0x84B9, 0x84BA, /* 0x60 */ + 0x84BB, 0x84BC, 0x84BD, 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, /* 0x70 */ + 0x84C3, 0xB2D1, 0x84C4, 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x84C9, /* 0x70 */ + 0xB2D2, 0x84CA, 0x84CB, 0x84CC, 0xB2D3, 0x84CD, 0x84CE, 0x84CF, /* 0x80 */ + 0xB2D4, 0x84D0, 0x84D1, 0x84D2, 0x84D3, 0x84D4, 0x84D5, 0x84D6, /* 0x80 */ + 0xB2D5, 0xB2D6, 0x84D7, 0x84D8, 0x84D9, 0xB2D7, 0x84DA, 0x84DB, /* 0x90 */ + 0x84DC, 0x84DD, 0x84DE, 0x84DF, 0xB2D8, 0x84E0, 0x84E1, 0x84E2, /* 0x90 */ + 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9, 0x84EA, /* 0xA0 */ + 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x84F0, 0x84F1, 0x84F2, /* 0xA0 */ + 0x84F3, 0x84F4, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0x84F9, 0x84FA, /* 0xB0 */ + 0xB2D9, 0xB2DA, 0x84FB, 0x84FC, 0xB2DB, 0x84FD, 0x84FE, 0x8541, /* 0xB0 */ + 0xB2DC, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0xB2DD, /* 0xC0 */ + 0xB2DE, 0xB2DF, 0x8548, 0xB2E0, 0x8549, 0xB2E1, 0xB2E2, 0x854A, /* 0xC0 */ + 0x854B, 0x854C, 0x854D, 0x854E, 0xB2E3, 0x854F, 0x8550, 0x8551, /* 0xD0 */ + 0x8552, 0x8553, 0x8554, 0x8555, 0xB2E4, 0x8556, 0x8557, 0x8558, /* 0xD0 */ + 0x8559, 0x855A, 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, /* 0xE0 */ + 0xB2E5, 0xB2E6, 0x8567, 0x8568, 0x8569, 0x856A, 0x856B, 0x856C, /* 0xE0 */ + 0xB2E7, 0xB2E8, 0x856D, 0x856E, 0xB2E9, 0x856F, 0x8570, 0x8571, /* 0xF0 */ + 0xB2EA, 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB2EB, 0xB2EC, 0x8579, 0x857A, 0xB2ED, 0x8581, 0x8582, 0x8583, /* 0x00 */ + 0x8584, 0x8585, 0x8586, 0x8587, 0xB2EE, 0x8588, 0x8589, 0x858A, /* 0x00 */ + 0xB2EF, 0x858B, 0x858C, 0x858D, 0xB2F0, 0x858E, 0x858F, 0x8590, /* 0x10 */ + 0x8591, 0x8592, 0x8593, 0x8594, 0xB2F1, 0xB2F2, 0x8595, 0x8596, /* 0x10 */ + 0x8597, 0x8598, 0x8599, 0x859A, 0x859B, 0x859C, 0x859D, 0x859E, /* 0x20 */ + 0xB2F3, 0x859F, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A4, 0x85A5, /* 0x20 */ + 0x85A6, 0x85A7, 0x85A8, 0x85A9, 0x85AA, 0x85AB, 0x85AC, 0x85AD, /* 0x30 */ + 0x85AE, 0x85AF, 0x85B0, 0x85B1, 0x85B2, 0x85B3, 0x85B4, 0x85B5, /* 0x30 */ + 0x85B6, 0x85B7, 0x85B8, 0x85B9, 0xB2F4, 0xB2F5, 0x85BA, 0x85BB, /* 0x40 */ + 0xB2F6, 0x85BC, 0xB2F7, 0x85BD, 0xB2F8, 0x85BE, 0xB2F9, 0x85BF, /* 0x40 */ + 0x85C0, 0x85C1, 0x85C2, 0xB2FA, 0xB2FB, 0xB2FC, 0x85C3, 0xB2FD, /* 0x50 */ + 0x85C4, 0xB2FE, 0x85C5, 0x85C6, 0x85C7, 0xB3A1, 0x85C8, 0x85C9, /* 0x50 */ + 0x85CA, 0x85CB, 0x85CC, 0x85CD, 0x85CE, 0x85CF, 0x85D0, 0x85D1, /* 0x60 */ + 0x85D2, 0x85D3, 0x85D4, 0x85D5, 0x85D6, 0x85D7, 0x85D8, 0x85D9, /* 0x60 */ + 0x85DA, 0x85DB, 0x85DC, 0x85DD, 0x85DE, 0x85DF, 0x85E0, 0x85E1, /* 0x70 */ + 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0xB3A2, 0xB3A3, 0x85E6, 0x85E7, /* 0x70 */ + 0xB3A4, 0x85E8, 0x85E9, 0x85EA, 0xB3A5, 0x85EB, 0x85EC, 0x85ED, /* 0x80 */ + 0x85EE, 0x85EF, 0x85F0, 0x85F1, 0xB3A6, 0xB3A7, 0x85F2, 0xB3A8, /* 0x80 */ + 0x85F3, 0xB3A9, 0x85F4, 0x85F5, 0x85F6, 0x85F7, 0x85F8, 0x85F9, /* 0x90 */ + 0xB3AA, 0xB3AB, 0xB3AC, 0x85FA, 0xB3AD, 0x85FB, 0x85FC, 0xB3AE, /* 0x90 */ + 0xB3AF, 0xB3B0, 0xB3B1, 0x85FD, 0x85FE, 0x8641, 0x8642, 0x8643, /* 0xA0 */ + 0xB3B2, 0xB3B3, 0x8644, 0xB3B4, 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, /* 0xA0 */ + 0x8645, 0xB3B9, 0x8646, 0xB3BA, 0xB3BB, 0xB3BC, 0x8647, 0x8648, /* 0xB0 */ + 0xB3BD, 0x8649, 0x864A, 0x864B, 0xB3BE, 0x864C, 0x864D, 0x864E, /* 0xB0 */ + 0x864F, 0x8650, 0x8651, 0x8652, 0xB3BF, 0xB3C0, 0x8653, 0xB3C1, /* 0xC0 */ + 0xB3C2, 0xB3C3, 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, /* 0xC0 */ + 0xB3C4, 0xB3C5, 0x865A, 0x8661, 0xB3C6, 0x8662, 0x8663, 0x8664, /* 0xD0 */ + 0xB3C7, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866A, 0x866B, /* 0xD0 */ + 0xB3C8, 0x866C, 0x866D, 0x866E, 0x866F, 0xB3C9, 0x8670, 0x8671, /* 0xE0 */ + 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, /* 0xE0 */ + 0x867A, 0x8681, 0x8682, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, /* 0xF0 */ + 0x8688, 0x8689, 0x868A, 0x868B, 0x868C, 0x868D, 0x868E, 0x868F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8690, 0x8691, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, 0x8697, /* 0x00 */ + 0xB3CA, 0xB3CB, 0x8698, 0xB3CC, 0xB3CD, 0x8699, 0x869A, 0x869B, /* 0x00 */ + 0xB3CE, 0x869C, 0xB3CF, 0xB3D0, 0x869D, 0x869E, 0x869F, 0x86A0, /* 0x10 */ + 0xB3D1, 0xB3D2, 0x86A1, 0xB3D3, 0xB3D4, 0xB3D5, 0x86A2, 0x86A3, /* 0x10 */ + 0x86A4, 0x86A5, 0x86A6, 0xB3D6, 0xB3D7, 0xB3D8, 0x86A7, 0x86A8, /* 0x20 */ + 0xB3D9, 0x86A9, 0x86AA, 0x86AB, 0xB3DA, 0x86AC, 0x86AD, 0x86AE, /* 0x20 */ + 0x86AF, 0x86B0, 0x86B1, 0x86B2, 0xB3DB, 0xB3DC, 0x86B3, 0xB3DD, /* 0x30 */ + 0xB3DE, 0xB3DF, 0x86B4, 0x86B5, 0x86B6, 0x86B7, 0x86B8, 0x86B9, /* 0x30 */ + 0xB3E0, 0xB3E1, 0x86BA, 0x86BB, 0xB3E2, 0x86BC, 0x86BD, 0x86BE, /* 0x40 */ + 0xB3E3, 0x86BF, 0x86C0, 0x86C1, 0x86C2, 0x86C3, 0x86C4, 0x86C5, /* 0x40 */ + 0xB3E4, 0xB3E5, 0x86C6, 0x86C7, 0xB3E6, 0xB3E7, 0x86C8, 0x86C9, /* 0x50 */ + 0xB3E8, 0x86CA, 0x86CB, 0x86CC, 0xB3E9, 0x86CD, 0x86CE, 0x86CF, /* 0x50 */ + 0xB3EA, 0x86D0, 0x86D1, 0x86D2, 0x86D3, 0x86D4, 0x86D5, 0x86D6, /* 0x60 */ + 0x86D7, 0x86D8, 0x86D9, 0x86DA, 0x86DB, 0x86DC, 0x86DD, 0x86DE, /* 0x60 */ + 0x86DF, 0x86E0, 0x86E1, 0x86E2, 0x86E3, 0x86E4, 0x86E5, 0x86E6, /* 0x70 */ + 0xB3EB, 0xB3EC, 0x86E7, 0x86E8, 0xB3ED, 0x86E9, 0x86EA, 0x86EB, /* 0x70 */ + 0xB3EE, 0x86EC, 0xB3EF, 0x86ED, 0x86EE, 0x86EF, 0x86F0, 0x86F1, /* 0x80 */ + 0xB3F0, 0xB3F1, 0x86F2, 0xB3F2, 0x86F3, 0xB3F3, 0x86F4, 0x86F5, /* 0x80 */ + 0x86F6, 0x86F7, 0xB3F4, 0xB3F5, 0xB3F6, 0x86F8, 0x86F9, 0x86FA, /* 0x90 */ + 0xB3F7, 0x86FB, 0x86FC, 0x86FD, 0xB3F8, 0x86FE, 0x8741, 0x8742, /* 0x90 */ + 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, /* 0xA0 */ + 0xB3F9, 0x874B, 0x874C, 0x874D, 0x874E, 0x874F, 0x8750, 0x8751, /* 0xA0 */ + 0x8752, 0x8753, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, /* 0xB0 */ + 0x875A, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, 0x8766, 0x8767, /* 0xB0 */ + 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D, 0x876E, 0x876F, /* 0xC0 */ + 0x8770, 0x8771, 0x8772, 0x8773, 0xB3FA, 0x8774, 0x8775, 0x8776, /* 0xC0 */ + 0xB3FB, 0x8777, 0x8778, 0x8779, 0xB3FC, 0x877A, 0x8781, 0x8782, /* 0xD0 */ + 0x8783, 0x8784, 0x8785, 0x8786, 0xB3FD, 0xB3FE, 0x8787, 0xB4A1, /* 0xD0 */ + 0x8788, 0x8789, 0x878A, 0x878B, 0x878C, 0x878D, 0x878E, 0x878F, /* 0xE0 */ + 0xB4A2, 0xB4A3, 0x8790, 0x8791, 0xB4A4, 0x8792, 0x8793, 0x8794, /* 0xE0 */ + 0xB4A5, 0x8795, 0x8796, 0x8797, 0x8798, 0x8799, 0x879A, 0x879B, /* 0xF0 */ + 0x879C, 0xB4A6, 0x879D, 0xB4A7, 0x879E, 0xB4A8, 0x879F, 0x87A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x87A1, 0x87A2, 0x87A3, 0x87A4, 0xB4A9, 0xB4AA, 0x87A5, 0x87A6, /* 0x00 */ + 0xB4AB, 0x87A7, 0x87A8, 0xB4AC, 0xB4AD, 0x87A9, 0x87AA, 0x87AB, /* 0x00 */ + 0x87AC, 0x87AD, 0x87AE, 0x87AF, 0xB4AE, 0xB4AF, 0x87B0, 0xB4B0, /* 0x10 */ + 0x87B1, 0xB4B1, 0x87B2, 0x87B3, 0x87B4, 0x87B5, 0x87B6, 0x87B7, /* 0x10 */ + 0xB4B2, 0x87B8, 0x87B9, 0x87BA, 0x87BB, 0x87BC, 0x87BD, 0x87BE, /* 0x20 */ + 0x87BF, 0x87C0, 0x87C1, 0x87C2, 0x87C3, 0x87C4, 0x87C5, 0x87C6, /* 0x20 */ + 0x87C7, 0x87C8, 0x87C9, 0x87CA, 0xB4B3, 0x87CB, 0x87CC, 0x87CD, /* 0x30 */ + 0x87CE, 0x87CF, 0x87D0, 0x87D1, 0xB4B4, 0x87D2, 0x87D3, 0x87D4, /* 0x30 */ + 0x87D5, 0x87D6, 0x87D7, 0x87D8, 0x87D9, 0x87DA, 0x87DB, 0x87DC, /* 0x40 */ + 0x87DD, 0x87DE, 0x87DF, 0x87E0, 0x87E1, 0x87E2, 0x87E3, 0x87E4, /* 0x40 */ + 0x87E5, 0x87E6, 0x87E7, 0x87E8, 0x87E9, 0x87EA, 0x87EB, 0x87EC, /* 0x50 */ + 0xB4B5, 0x87ED, 0x87EE, 0x87EF, 0xB4B6, 0x87F0, 0x87F1, 0x87F2, /* 0x50 */ + 0xB4B7, 0x87F3, 0x87F4, 0x87F5, 0x87F6, 0x87F7, 0x87F8, 0x87F9, /* 0x60 */ + 0xB4B8, 0xB4B9, 0x87FA, 0x87FB, 0x87FC, 0x87FD, 0x87FE, 0x8841, /* 0x60 */ + 0x8842, 0x8843, 0x8844, 0x8845, 0xB4BA, 0xB4BB, 0x8846, 0x8847, /* 0x70 */ + 0x8848, 0x8849, 0x884A, 0x884B, 0xB4BC, 0x884C, 0x884D, 0x884E, /* 0x70 */ + 0x884F, 0x8850, 0x8851, 0x8852, 0xB4BD, 0xB4BE, 0x8853, 0x8854, /* 0x80 */ + 0x8855, 0xB4BF, 0x8856, 0x8857, 0x8858, 0x8859, 0x885A, 0x8861, /* 0x80 */ + 0xB4C0, 0xB4C1, 0x8862, 0x8863, 0xB4C2, 0x8864, 0x8865, 0x8866, /* 0x90 */ + 0xB4C3, 0xB4C4, 0xB4C5, 0x8867, 0x8868, 0x8869, 0x886A, 0x886B, /* 0x90 */ + 0xB4C6, 0xB4C7, 0x886C, 0xB4C8, 0x886D, 0xB4C9, 0xB4CA, 0x886E, /* 0xA0 */ + 0x886F, 0x8870, 0xB4CB, 0x8871, 0xB4CC, 0x8872, 0x8873, 0x8874, /* 0xA0 */ + 0xB4CD, 0x8875, 0x8876, 0x8877, 0xB4CE, 0x8878, 0x8879, 0x887A, /* 0xB0 */ + 0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, 0x8888, /* 0xB0 */ + 0x8889, 0x888A, 0x888B, 0x888C, 0x888D, 0x888E, 0x888F, 0x8890, /* 0xC0 */ + 0xB4CF, 0xB4D0, 0x8891, 0x8892, 0xB4D1, 0x8893, 0x8894, 0x8895, /* 0xC0 */ + 0xB4D2, 0x8896, 0xB4D3, 0x8897, 0x8898, 0x8899, 0x889A, 0x889B, /* 0xD0 */ + 0xB4D4, 0xB4D5, 0x889C, 0xB4D6, 0x889D, 0xB4D7, 0x889E, 0x889F, /* 0xD0 */ + 0x88A0, 0x88A1, 0xB4D8, 0x88A2, 0xB4D9, 0xB4DA, 0xB4DB, 0x88A3, /* 0xE0 */ + 0xB4DC, 0x88A4, 0x88A5, 0xB4DD, 0xB4DE, 0xB4DF, 0xB4E0, 0xB4E1, /* 0xE0 */ + 0x88A6, 0x88A7, 0x88A8, 0xB4E2, 0xB4E3, 0xB4E4, 0x88A9, 0xB4E5, /* 0xF0 */ + 0xB4E6, 0xB4E7, 0xB4E8, 0xB4E9, 0x88AA, 0x88AB, 0x88AC, 0xB4EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB4EB, 0xB4EC, 0x88AD, 0x88AE, 0xB4ED, 0x88AF, 0x88B0, 0x88B1, /* 0x00 */ + 0xB4EE, 0x88B2, 0x88B3, 0x88B4, 0x88B5, 0x88B6, 0x88B7, 0x88B8, /* 0x00 */ + 0xB4EF, 0xB4F0, 0x88B9, 0xB4F1, 0xB4F2, 0xB4F3, 0x88BA, 0x88BB, /* 0x10 */ + 0x88BC, 0x88BD, 0x88BE, 0x88BF, 0xB4F4, 0x88C0, 0x88C1, 0x88C2, /* 0x10 */ + 0x88C3, 0x88C4, 0x88C5, 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0x88CA, /* 0x20 */ + 0x88CB, 0x88CC, 0x88CD, 0x88CE, 0x88CF, 0x88D0, 0x88D1, 0x88D2, /* 0x20 */ + 0x88D3, 0x88D4, 0x88D5, 0x88D6, 0x88D7, 0x88D8, 0x88D9, 0x88DA, /* 0x30 */ + 0x88DB, 0x88DC, 0x88DD, 0x88DE, 0x88DF, 0x88E0, 0x88E1, 0x88E2, /* 0x30 */ + 0x88E3, 0x88E4, 0x88E5, 0x88E6, 0x88E7, 0x88E8, 0x88E9, 0x88EA, /* 0x40 */ + 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF, 0x88F0, 0x88F1, 0x88F2, /* 0x40 */ + 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0xB4F5, 0xB4F6, 0xB4F7, 0x88F7, /* 0x50 */ + 0xB4F8, 0x88F8, 0x88F9, 0xB4F9, 0xB4FA, 0x88FA, 0xB4FB, 0xB4FC, /* 0x50 */ + 0x88FB, 0x88FC, 0x88FD, 0x88FE, 0xB4FD, 0xB4FE, 0x8941, 0xB5A1, /* 0x60 */ + 0x8942, 0xB5A2, 0x8943, 0xB5A3, 0x8944, 0x8945, 0xB5A4, 0x8946, /* 0x60 */ + 0xB5A5, 0xB5A6, 0x8947, 0x8948, 0xB5A7, 0x8949, 0x894A, 0x894B, /* 0x70 */ + 0xB5A8, 0x894C, 0x894D, 0x894E, 0x894F, 0x8950, 0x8951, 0x8952, /* 0x70 */ + 0xB5A9, 0xB5AA, 0x8953, 0xB5AB, 0xB5AC, 0xB5AD, 0x8954, 0x8955, /* 0x80 */ + 0x8956, 0x8957, 0x8958, 0x8959, 0xB5AE, 0x895A, 0x8961, 0x8962, /* 0x80 */ + 0xB5AF, 0x8963, 0x8964, 0x8965, 0xB5B0, 0x8966, 0x8967, 0x8968, /* 0x90 */ + 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, 0x8970, /* 0x90 */ + 0xB5B1, 0xB5B2, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, /* 0xA0 */ + 0xB5B3, 0x8977, 0x8978, 0x8979, 0xB5B4, 0x897A, 0x8981, 0x8982, /* 0xA0 */ + 0x8983, 0x8984, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898A, /* 0xB0 */ + 0x898B, 0x898C, 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8992, /* 0xB0 */ + 0x8993, 0x8994, 0x8995, 0x8996, 0xB5B5, 0xB5B6, 0x8997, 0x8998, /* 0xC0 */ + 0xB5B7, 0x8999, 0x899A, 0xB5B8, 0xB5B9, 0x899B, 0xB5BA, 0x899C, /* 0xC0 */ + 0xB5BB, 0x899D, 0x899E, 0x899F, 0xB5BC, 0xB5BD, 0x89A0, 0xB5BE, /* 0xD0 */ + 0x89A1, 0xB5BF, 0x89A2, 0xB5C0, 0x89A3, 0xB5C1, 0x89A4, 0x89A5, /* 0xD0 */ + 0xB5C2, 0x89A6, 0x89A7, 0x89A8, 0xB5C3, 0x89A9, 0x89AA, 0x89AB, /* 0xE0 */ + 0xB5C4, 0x89AC, 0x89AD, 0x89AE, 0x89AF, 0x89B0, 0x89B1, 0x89B2, /* 0xE0 */ + 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0x89B9, 0x89BA, /* 0xF0 */ + 0x89BB, 0x89BC, 0x89BD, 0x89BE, 0xB5C5, 0x89BF, 0x89C0, 0x89C1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x89C2, 0x89C3, 0x89C4, 0x89C5, 0x89C6, 0x89C7, 0x89C8, 0x89C9, /* 0x00 */ + 0x89CA, 0x89CB, 0x89CC, 0x89CD, 0x89CE, 0x89CF, 0x89D0, 0x89D1, /* 0x00 */ + 0xB5C6, 0x89D2, 0x89D3, 0x89D4, 0x89D5, 0x89D6, 0x89D7, 0x89D8, /* 0x10 */ + 0xB5C7, 0x89D9, 0x89DA, 0x89DB, 0xB5C8, 0x89DC, 0x89DD, 0x89DE, /* 0x10 */ + 0xB5C9, 0x89DF, 0x89E0, 0x89E1, 0x89E2, 0x89E3, 0x89E4, 0x89E5, /* 0x20 */ + 0xB5CA, 0xB5CB, 0x89E6, 0xB5CC, 0x89E7, 0x89E8, 0x89E9, 0x89EA, /* 0x20 */ + 0x89EB, 0x89EC, 0x89ED, 0x89EE, 0xB5CD, 0x89EF, 0x89F0, 0x89F1, /* 0x30 */ + 0x89F2, 0x89F3, 0x89F4, 0x89F5, 0x89F6, 0x89F7, 0x89F8, 0x89F9, /* 0x30 */ + 0x89FA, 0x89FB, 0x89FC, 0x89FD, 0x89FE, 0x8A41, 0x8A42, 0x8A43, /* 0x40 */ + 0x8A44, 0x8A45, 0x8A46, 0x8A47, 0x8A48, 0x8A49, 0x8A4A, 0x8A4B, /* 0x40 */ + 0xB5CE, 0xB5CF, 0x8A4C, 0x8A4D, 0xB5D0, 0x8A4E, 0x8A4F, 0x8A50, /* 0x50 */ + 0xB5D1, 0x8A51, 0x8A52, 0x8A53, 0x8A54, 0x8A55, 0x8A56, 0x8A57, /* 0x50 */ + 0xB5D2, 0xB5D3, 0x8A58, 0xB5D4, 0x8A59, 0xB5D5, 0x8A5A, 0x8A61, /* 0x60 */ + 0x8A62, 0x8A63, 0x8A64, 0x8A65, 0xB5D6, 0x8A66, 0x8A67, 0x8A68, /* 0x60 */ + 0x8A69, 0x8A6A, 0x8A6B, 0x8A6C, 0x8A6D, 0x8A6E, 0x8A6F, 0x8A70, /* 0x70 */ + 0x8A71, 0x8A72, 0x8A73, 0x8A74, 0x8A75, 0x8A76, 0x8A77, 0x8A78, /* 0x70 */ + 0xB5D7, 0x8A79, 0x8A7A, 0x8A81, 0x8A82, 0x8A83, 0x8A84, 0x8A85, /* 0x80 */ + 0xB5D8, 0x8A86, 0x8A87, 0x8A88, 0x8A89, 0x8A8A, 0x8A8B, 0x8A8C, /* 0x80 */ + 0x8A8D, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A92, 0x8A93, 0x8A94, /* 0x90 */ + 0x8A95, 0x8A96, 0x8A97, 0x8A98, 0x8A99, 0xB5D9, 0x8A9A, 0x8A9B, /* 0x90 */ + 0x8A9C, 0x8A9D, 0x8A9E, 0x8A9F, 0xB5DA, 0x8AA0, 0x8AA1, 0x8AA2, /* 0xA0 */ + 0xB5DB, 0x8AA3, 0x8AA4, 0x8AA5, 0xB5DC, 0x8AA6, 0x8AA7, 0x8AA8, /* 0xA0 */ + 0x8AA9, 0x8AAA, 0x8AAB, 0x8AAC, 0x8AAD, 0xB5DD, 0x8AAE, 0xB5DE, /* 0xB0 */ + 0x8AAF, 0xB5DF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, 0x8AB4, 0x8AB5, /* 0xB0 */ + 0xB5E0, 0x8AB6, 0x8AB7, 0x8AB8, 0xB5E1, 0x8AB9, 0x8ABA, 0x8ABB, /* 0xC0 */ + 0xB5E2, 0x8ABC, 0x8ABD, 0x8ABE, 0x8ABF, 0x8AC0, 0x8AC1, 0x8AC2, /* 0xC0 */ + 0xB5E3, 0x8AC3, 0x8AC4, 0x8AC5, 0x8AC6, 0xB5E4, 0x8AC7, 0x8AC8, /* 0xD0 */ + 0x8AC9, 0x8ACA, 0x8ACB, 0x8ACC, 0xB5E5, 0xB5E6, 0x8ACD, 0x8ACE, /* 0xD0 */ + 0xB5E7, 0x8ACF, 0x8AD0, 0xB5E8, 0xB5E9, 0x8AD1, 0xB5EA, 0x8AD2, /* 0xE0 */ + 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0xB5EB, 0xB5EC, 0x8AD7, 0xB5ED, /* 0xE0 */ + 0x8AD8, 0xB5EE, 0x8AD9, 0x8ADA, 0x8ADB, 0x8ADC, 0x8ADD, 0x8ADE, /* 0xF0 */ + 0xB5EF, 0x8ADF, 0x8AE0, 0x8AE1, 0x8AE2, 0x8AE3, 0x8AE4, 0x8AE5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8AE6, 0x8AE7, 0x8AE8, 0x8AE9, 0x8AEA, 0x8AEB, 0x8AEC, 0x8AED, /* 0x00 */ + 0x8AEE, 0x8AEF, 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, 0x8AF4, 0x8AF5, /* 0x00 */ + 0x8AF6, 0x8AF7, 0x8AF8, 0x8AF9, 0xB5F0, 0xB5F1, 0x8AFA, 0x8AFB, /* 0x10 */ + 0xB5F2, 0x8AFC, 0x8AFD, 0xB5F3, 0xB5F4, 0x8AFE, 0x8B41, 0x8B42, /* 0x10 */ + 0x8B43, 0x8B44, 0x8B45, 0x8B46, 0xB5F5, 0xB5F6, 0x8B47, 0xB5F7, /* 0x20 */ + 0xB5F8, 0xB5F9, 0xB5FA, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, /* 0x20 */ + 0xB5FB, 0xB5FC, 0x8B4D, 0x8B4E, 0xB5FD, 0x8B4F, 0x8B50, 0x8B51, /* 0x30 */ + 0xB5FE, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0x8B56, 0x8B57, 0x8B58, /* 0x30 */ + 0xB6A1, 0xB6A2, 0x8B59, 0xB6A3, 0xB6A4, 0xB6A5, 0x8B5A, 0x8B61, /* 0x40 */ + 0x8B62, 0x8B63, 0x8B64, 0xB6A6, 0xB6A7, 0xB6A8, 0x8B65, 0x8B66, /* 0x40 */ + 0xB6A9, 0x8B67, 0x8B68, 0x8B69, 0xB6AA, 0x8B6A, 0x8B6B, 0x8B6C, /* 0x50 */ + 0x8B6D, 0x8B6E, 0x8B6F, 0x8B70, 0xB6AB, 0xB6AC, 0x8B71, 0xB6AD, /* 0x50 */ + 0xB6AE, 0xB6AF, 0x8B72, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, /* 0x60 */ + 0x8B78, 0x8B79, 0x8B7A, 0x8B81, 0x8B82, 0x8B83, 0x8B84, 0x8B85, /* 0x60 */ + 0x8B86, 0x8B87, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0x8B8D, /* 0x70 */ + 0x8B8E, 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, 0x8B94, 0x8B95, /* 0x70 */ + 0x8B96, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0x8B9C, 0x8B9D, /* 0x80 */ + 0x8B9E, 0x8B9F, 0x8BA0, 0x8BA1, 0x8BA2, 0x8BA3, 0x8BA4, 0x8BA5, /* 0x80 */ + 0x8BA6, 0x8BA7, 0x8BA8, 0x8BA9, 0x8BAA, 0x8BAB, 0x8BAC, 0x8BAD, /* 0x90 */ + 0x8BAE, 0x8BAF, 0x8BB0, 0x8BB1, 0x8BB2, 0x8BB3, 0x8BB4, 0x8BB5, /* 0x90 */ + 0xB6B0, 0xB6B1, 0x8BB6, 0x8BB7, 0xB6B2, 0x8BB8, 0x8BB9, 0x8BBA, /* 0xA0 */ + 0xB6B3, 0x8BBB, 0xB6B4, 0xB6B5, 0x8BBC, 0x8BBD, 0x8BBE, 0x8BBF, /* 0xA0 */ + 0xB6B6, 0xB6B7, 0x8BC0, 0xB6B8, 0xB6B9, 0xB6BA, 0x8BC1, 0x8BC2, /* 0xB0 */ + 0x8BC3, 0x8BC4, 0x8BC5, 0xB6BB, 0xB6BC, 0xB6BD, 0x8BC6, 0x8BC7, /* 0xB0 */ + 0xB6BE, 0x8BC8, 0x8BC9, 0x8BCA, 0xB6BF, 0x8BCB, 0x8BCC, 0x8BCD, /* 0xC0 */ + 0x8BCE, 0x8BCF, 0x8BD0, 0x8BD1, 0xB6C0, 0xB6C1, 0x8BD2, 0xB6C2, /* 0xC0 */ + 0xB6C3, 0xB6C4, 0x8BD3, 0x8BD4, 0x8BD5, 0x8BD6, 0x8BD7, 0x8BD8, /* 0xD0 */ + 0xB6C5, 0x8BD9, 0x8BDA, 0x8BDB, 0x8BDC, 0x8BDD, 0x8BDE, 0x8BDF, /* 0xD0 */ + 0x8BE0, 0x8BE1, 0x8BE2, 0x8BE3, 0x8BE4, 0x8BE5, 0x8BE6, 0x8BE7, /* 0xE0 */ + 0x8BE8, 0x8BE9, 0x8BEA, 0x8BEB, 0xB6C6, 0x8BEC, 0x8BED, 0x8BEE, /* 0xE0 */ + 0x8BEF, 0x8BF0, 0x8BF1, 0x8BF2, 0x8BF3, 0x8BF4, 0x8BF5, 0x8BF6, /* 0xF0 */ + 0x8BF7, 0x8BF8, 0x8BF9, 0x8BFA, 0x8BFB, 0x8BFC, 0x8BFD, 0x8BFE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8C41, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C46, 0x8C47, 0x8C48, /* 0x00 */ + 0x8C49, 0x8C4A, 0x8C4B, 0x8C4C, 0x8C4D, 0x8C4E, 0x8C4F, 0x8C50, /* 0x00 */ + 0xB6C7, 0xB6C8, 0x8C51, 0x8C52, 0xB6C9, 0x8C53, 0x8C54, 0x8C55, /* 0x10 */ + 0xB6CA, 0x8C56, 0x8C57, 0x8C58, 0x8C59, 0x8C5A, 0x8C61, 0x8C62, /* 0x10 */ + 0x8C63, 0x8C64, 0x8C65, 0x8C66, 0x8C67, 0xB6CB, 0x8C68, 0x8C69, /* 0x20 */ + 0x8C6A, 0x8C6B, 0x8C6C, 0x8C6D, 0xB6CC, 0x8C6E, 0x8C6F, 0x8C70, /* 0x20 */ + 0x8C71, 0x8C72, 0x8C73, 0x8C74, 0xB6CD, 0x8C75, 0x8C76, 0x8C77, /* 0x30 */ + 0x8C78, 0x8C79, 0x8C7A, 0x8C81, 0x8C82, 0x8C83, 0x8C84, 0x8C85, /* 0x30 */ + 0x8C86, 0x8C87, 0x8C88, 0x8C89, 0x8C8A, 0x8C8B, 0x8C8C, 0x8C8D, /* 0x40 */ + 0xB6CE, 0x8C8E, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, 0x8C93, 0x8C94, /* 0x40 */ + 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, 0x8C9A, 0x8C9B, 0x8C9C, /* 0x50 */ + 0x8C9D, 0x8C9E, 0x8C9F, 0x8CA0, 0x8CA1, 0x8CA2, 0x8CA3, 0x8CA4, /* 0x50 */ + 0x8CA5, 0x8CA6, 0x8CA7, 0x8CA8, 0xB6CF, 0x8CA9, 0x8CAA, 0x8CAB, /* 0x60 */ + 0xB6D0, 0x8CAC, 0x8CAD, 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0x8CB2, /* 0x60 */ + 0x8CB3, 0x8CB4, 0x8CB5, 0x8CB6, 0x8CB7, 0x8CB8, 0x8CB9, 0x8CBA, /* 0x70 */ + 0x8CBB, 0x8CBC, 0x8CBD, 0x8CBE, 0x8CBF, 0x8CC0, 0x8CC1, 0x8CC2, /* 0x70 */ + 0x8CC3, 0x8CC4, 0x8CC5, 0x8CC6, 0x8CC7, 0x8CC8, 0x8CC9, 0x8CCA, /* 0x80 */ + 0x8CCB, 0x8CCC, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0x8CD1, 0x8CD2, /* 0x80 */ + 0x8CD3, 0x8CD4, 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, /* 0x90 */ + 0x8CDB, 0x8CDC, 0x8CDD, 0x8CDE, 0xB6D1, 0xB6D2, 0x8CDF, 0x8CE0, /* 0x90 */ + 0xB6D3, 0x8CE1, 0x8CE2, 0x8CE3, 0xB6D4, 0x8CE4, 0x8CE5, 0x8CE6, /* 0xA0 */ + 0x8CE7, 0x8CE8, 0x8CE9, 0xB6D5, 0xB6D6, 0x8CEA, 0x8CEB, 0x8CEC, /* 0xA0 */ + 0x8CED, 0xB6D7, 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF2, 0x8CF3, /* 0xB0 */ + 0x8CF4, 0x8CF5, 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x8CFB, /* 0xB0 */ + 0x8CFC, 0x8CFD, 0x8CFE, 0x8D41, 0x8D42, 0x8D43, 0x8D44, 0x8D45, /* 0xC0 */ + 0x8D46, 0x8D47, 0x8D48, 0x8D49, 0x8D4A, 0x8D4B, 0x8D4C, 0x8D4D, /* 0xC0 */ + 0x8D4E, 0x8D4F, 0x8D50, 0x8D51, 0xB6D8, 0x8D52, 0x8D53, 0x8D54, /* 0xD0 */ + 0x8D55, 0x8D56, 0x8D57, 0x8D58, 0x8D59, 0x8D5A, 0x8D61, 0x8D62, /* 0xD0 */ + 0x8D63, 0x8D64, 0x8D65, 0x8D66, 0x8D67, 0x8D68, 0x8D69, 0x8D6A, /* 0xE0 */ + 0x8D6B, 0x8D6C, 0x8D6D, 0x8D6E, 0x8D6F, 0x8D70, 0x8D71, 0x8D72, /* 0xE0 */ + 0xB6D9, 0x8D73, 0x8D74, 0x8D75, 0xB6DA, 0x8D76, 0x8D77, 0x8D78, /* 0xF0 */ + 0xB6DB, 0x8D79, 0x8D7A, 0x8D81, 0x8D82, 0x8D83, 0x8D84, 0x8D85 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB6DC, 0xB6DD, 0x8D86, 0x8D87, 0x8D88, 0xB6DE, 0x8D89, 0x8D8A, /* 0x00 */ + 0x8D8B, 0x8D8C, 0x8D8D, 0x8D8E, 0x8D8F, 0x8D90, 0x8D91, 0x8D92, /* 0x00 */ + 0x8D93, 0x8D94, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, 0x8D9A, /* 0x10 */ + 0x8D9B, 0x8D9C, 0x8D9D, 0x8D9E, 0x8D9F, 0x8DA0, 0x8DA1, 0x8DA2, /* 0x10 */ + 0x8DA3, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, /* 0x20 */ + 0xB6DF, 0xB6E0, 0x8DAB, 0x8DAC, 0xB6E1, 0x8DAD, 0x8DAE, 0xB6E2, /* 0x20 */ + 0xB6E3, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB2, 0x8DB3, 0x8DB4, 0x8DB5, /* 0x30 */ + 0xB6E4, 0xB6E5, 0x8DB6, 0xB6E6, 0x8DB7, 0x8DB8, 0x8DB9, 0x8DBA, /* 0x30 */ + 0x8DBB, 0x8DBC, 0x8DBD, 0x8DBE, 0xB6E7, 0x8DBF, 0x8DC0, 0x8DC1, /* 0x40 */ + 0xB6E8, 0x8DC2, 0x8DC3, 0x8DC4, 0xB6E9, 0x8DC5, 0x8DC6, 0x8DC7, /* 0x40 */ + 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCB, 0xB6EA, 0xB6EB, 0x8DCC, 0x8DCD, /* 0x50 */ + 0x8DCE, 0x8DCF, 0x8DD0, 0x8DD1, 0x8DD2, 0x8DD3, 0x8DD4, 0x8DD5, /* 0x50 */ + 0xB6EC, 0x8DD6, 0x8DD7, 0x8DD8, 0xB6ED, 0x8DD9, 0x8DDA, 0x8DDB, /* 0x60 */ + 0xB6EE, 0x8DDC, 0x8DDD, 0x8DDE, 0x8DDF, 0x8DE0, 0x8DE1, 0x8DE2, /* 0x60 */ + 0xB6EF, 0xB6F0, 0x8DE3, 0xB6F1, 0x8DE4, 0xB6F2, 0x8DE5, 0x8DE6, /* 0x70 */ + 0x8DE7, 0x8DE8, 0x8DE9, 0x8DEA, 0xB6F3, 0xB6F4, 0x8DEB, 0x8DEC, /* 0x70 */ + 0xB6F5, 0x8DED, 0x8DEE, 0x8DEF, 0xB6F6, 0x8DF0, 0x8DF1, 0x8DF2, /* 0x80 */ + 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6, 0xB6F7, 0xB6F8, 0x8DF7, 0xB6F9, /* 0x80 */ + 0xB6FA, 0xB6FB, 0xB6FC, 0x8DF8, 0x8DF9, 0x8DFA, 0xB6FD, 0xB6FE, /* 0x90 */ + 0xB7A1, 0xB7A2, 0x8DFB, 0x8DFC, 0xB7A3, 0x8DFD, 0x8DFE, 0x8E41, /* 0x90 */ + 0xB7A4, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, 0x8E47, 0x8E48, /* 0xA0 */ + 0xB7A5, 0xB7A6, 0x8E49, 0xB7A7, 0xB7A8, 0xB7A9, 0x8E4A, 0x8E4B, /* 0xA0 */ + 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, 0xB7AA, 0xB7AB, 0x8E50, 0x8E51, /* 0xB0 */ + 0xB7AC, 0x8E52, 0x8E53, 0x8E54, 0x8E55, 0x8E56, 0x8E57, 0x8E58, /* 0xB0 */ + 0x8E59, 0x8E5A, 0x8E61, 0x8E62, 0x8E63, 0x8E64, 0x8E65, 0xB7AD, /* 0xC0 */ + 0x8E66, 0xB7AE, 0x8E67, 0x8E68, 0x8E69, 0x8E6A, 0x8E6B, 0x8E6C, /* 0xC0 */ + 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E72, 0x8E73, 0x8E74, /* 0xD0 */ + 0x8E75, 0x8E76, 0x8E77, 0x8E78, 0x8E79, 0x8E7A, 0x8E81, 0x8E82, /* 0xD0 */ + 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0x8E88, 0x8E89, 0x8E8A, /* 0xE0 */ + 0x8E8B, 0x8E8C, 0x8E8D, 0x8E8E, 0xB7AF, 0xB7B0, 0x8E8F, 0x8E90, /* 0xE0 */ + 0xB7B1, 0x8E91, 0x8E92, 0x8E93, 0xB7B2, 0x8E94, 0x8E95, 0x8E96, /* 0xF0 */ + 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0xB7B3, 0xB7B4, 0x8E9B, 0xB7B5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB7B6, 0xB7B7, 0x8E9C, 0x8E9D, 0x8E9E, 0x8E9F, 0x8EA0, 0xB7B8, /* 0x00 */ + 0xB7B9, 0xB7BA, 0x8EA1, 0x8EA2, 0xB7BB, 0x8EA3, 0x8EA4, 0x8EA5, /* 0x00 */ + 0xB7BC, 0x8EA6, 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAA, 0x8EAB, 0x8EAC, /* 0x10 */ + 0xB7BD, 0xB7BE, 0x8EAD, 0xB7BF, 0x8EAE, 0xB7C0, 0x8EAF, 0x8EB0, /* 0x10 */ + 0x8EB1, 0x8EB2, 0x8EB3, 0x8EB4, 0xB7C1, 0xB7C2, 0x8EB5, 0x8EB6, /* 0x20 */ + 0xB7C3, 0x8EB7, 0x8EB8, 0x8EB9, 0xB7C4, 0x8EBA, 0x8EBB, 0x8EBC, /* 0x20 */ + 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC0, 0xB7C5, 0xB7C6, 0x8EC1, 0xB7C7, /* 0x30 */ + 0xB7C8, 0xB7C9, 0x8EC2, 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7, /* 0x30 */ + 0xB7CA, 0x8EC8, 0x8EC9, 0x8ECA, 0xB7CB, 0x8ECB, 0x8ECC, 0x8ECD, /* 0x40 */ + 0x8ECE, 0x8ECF, 0x8ED0, 0x8ED1, 0x8ED2, 0x8ED3, 0x8ED4, 0x8ED5, /* 0x40 */ + 0x8ED6, 0xB7CC, 0x8ED7, 0xB7CD, 0x8ED8, 0x8ED9, 0x8EDA, 0x8EDB, /* 0x50 */ + 0x8EDC, 0x8EDD, 0x8EDE, 0x8EDF, 0xB7CE, 0xB7CF, 0x8EE0, 0x8EE1, /* 0x50 */ + 0xB7D0, 0x8EE2, 0x8EE3, 0x8EE4, 0xB7D1, 0x8EE5, 0x8EE6, 0x8EE7, /* 0x60 */ + 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEB, 0xB7D2, 0xB7D3, 0x8EEC, 0xB7D4, /* 0x60 */ + 0x8EED, 0xB7D5, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF2, 0x8EF3, /* 0x70 */ + 0xB7D6, 0x8EF4, 0x8EF5, 0x8EF6, 0xB7D7, 0x8EF7, 0x8EF8, 0x8EF9, /* 0x70 */ + 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, 0x8EFE, 0x8F41, 0x8F42, 0x8F43, /* 0x80 */ + 0x8F44, 0x8F45, 0x8F46, 0x8F47, 0x8F48, 0xB7D8, 0x8F49, 0x8F4A, /* 0x80 */ + 0x8F4B, 0x8F4C, 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, /* 0x90 */ + 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, /* 0x90 */ + 0x8F61, 0x8F62, 0x8F63, 0x8F64, 0x8F65, 0x8F66, 0x8F67, 0x8F68, /* 0xA0 */ + 0xB7D9, 0x8F69, 0x8F6A, 0x8F6B, 0x8F6C, 0x8F6D, 0x8F6E, 0x8F6F, /* 0xA0 */ + 0xB7DA, 0x8F70, 0x8F71, 0x8F72, 0xB7DB, 0x8F73, 0x8F74, 0x8F75, /* 0xB0 */ + 0xB7DC, 0x8F76, 0x8F77, 0x8F78, 0x8F79, 0x8F7A, 0x8F81, 0x8F82, /* 0xB0 */ + 0xB7DD, 0xB7DE, 0x8F83, 0xB7DF, 0x8F84, 0xB7E0, 0x8F85, 0x8F86, /* 0xC0 */ + 0x8F87, 0x8F88, 0x8F89, 0x8F8A, 0xB7E1, 0x8F8B, 0x8F8C, 0x8F8D, /* 0xC0 */ + 0xB7E2, 0x8F8E, 0x8F8F, 0x8F90, 0xB7E3, 0x8F91, 0x8F92, 0x8F93, /* 0xD0 */ + 0x8F94, 0x8F95, 0x8F96, 0x8F97, 0x8F98, 0xB7E4, 0x8F99, 0xB7E5, /* 0xD0 */ + 0x8F9A, 0xB7E6, 0x8F9B, 0x8F9C, 0x8F9D, 0x8F9E, 0x8F9F, 0x8FA0, /* 0xE0 */ + 0xB7E7, 0xB7E8, 0x8FA1, 0x8FA2, 0xB7E9, 0x8FA3, 0x8FA4, 0x8FA5, /* 0xE0 */ + 0xB7EA, 0x8FA6, 0x8FA7, 0x8FA8, 0x8FA9, 0x8FAA, 0x8FAB, 0x8FAC, /* 0xF0 */ + 0xB7EB, 0xB7EC, 0x8FAD, 0xB7ED, 0x8FAE, 0xB7EE, 0x8FAF, 0x8FB0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8FB1, 0x8FB2, 0x8FB3, 0x8FB4, 0xB7EF, 0x8FB5, 0x8FB6, 0x8FB7, /* 0x00 */ + 0x8FB8, 0x8FB9, 0x8FBA, 0x8FBB, 0x8FBC, 0x8FBD, 0x8FBE, 0x8FBF, /* 0x00 */ + 0x8FC0, 0x8FC1, 0x8FC2, 0x8FC3, 0x8FC4, 0x8FC5, 0x8FC6, 0x8FC7, /* 0x10 */ + 0xB7F0, 0x8FC8, 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, 0x8FCD, 0x8FCE, /* 0x10 */ + 0xB7F1, 0x8FCF, 0x8FD0, 0x8FD1, 0x8FD2, 0x8FD3, 0x8FD4, 0x8FD5, /* 0x20 */ + 0x8FD6, 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA, 0x8FDB, 0x8FDC, 0x8FDD, /* 0x20 */ + 0x8FDE, 0x8FDF, 0x8FE0, 0x8FE1, 0x8FE2, 0x8FE3, 0x8FE4, 0x8FE5, /* 0x30 */ + 0x8FE6, 0x8FE7, 0x8FE8, 0x8FE9, 0xB7F2, 0xB7F3, 0x8FEA, 0x8FEB, /* 0x30 */ + 0xB7F4, 0x8FEC, 0x8FED, 0x8FEE, 0xB7F5, 0x8FEF, 0x8FF0, 0x8FF1, /* 0x40 */ + 0x8FF2, 0x8FF3, 0x8FF4, 0x8FF5, 0xB7F6, 0x8FF6, 0x8FF7, 0xB7F7, /* 0x40 */ + 0x8FF8, 0xB7F8, 0x8FF9, 0x8FFA, 0x8FFB, 0x8FFC, 0x8FFD, 0x8FFE, /* 0x50 */ + 0xB7F9, 0xB7FA, 0x9041, 0x9042, 0xB7FB, 0x9043, 0x9044, 0x9045, /* 0x50 */ + 0xB7FC, 0x9046, 0x9047, 0x9048, 0x9049, 0x904A, 0x904B, 0x904C, /* 0x60 */ + 0xB7FD, 0xB7FE, 0x904D, 0xB8A1, 0x904E, 0xB8A2, 0x904F, 0x9050, /* 0x60 */ + 0x9051, 0x9052, 0x9053, 0x9054, 0xB8A3, 0xB8A4, 0x9055, 0x9056, /* 0x70 */ + 0xB8A5, 0x9057, 0x9058, 0x9059, 0xB8A6, 0x905A, 0x9061, 0x9062, /* 0x70 */ + 0x9063, 0x9064, 0x9065, 0x9066, 0xB8A7, 0xB8A8, 0x9067, 0xB8A9, /* 0x80 */ + 0x9068, 0xB8AA, 0xB8AB, 0x9069, 0x906A, 0xB8AC, 0xB8AD, 0x906B, /* 0x80 */ + 0x906C, 0x906D, 0x906E, 0x906F, 0x9070, 0x9071, 0x9072, 0x9073, /* 0x90 */ + 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079, 0x907A, 0x9081, /* 0x90 */ + 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, 0x9088, 0x9089, /* 0xA0 */ + 0x908A, 0x908B, 0x908C, 0x908D, 0xB8AE, 0xB8AF, 0x908E, 0x908F, /* 0xA0 */ + 0xB8B0, 0x9090, 0x9091, 0x9092, 0xB8B1, 0x9093, 0x9094, 0x9095, /* 0xB0 */ + 0x9096, 0x9097, 0x9098, 0x9099, 0xB8B2, 0xB8B3, 0x909A, 0xB8B4, /* 0xB0 */ + 0x909B, 0xB8B5, 0x909C, 0x909D, 0x909E, 0x909F, 0x90A0, 0x90A1, /* 0xC0 */ + 0xB8B6, 0xB8B7, 0x90A2, 0x90A3, 0xB8B8, 0x90A4, 0xB8B9, 0xB8BA, /* 0xC0 */ + 0xB8BB, 0xB8BC, 0xB8BD, 0x90A5, 0x90A6, 0x90A7, 0x90A8, 0x90A9, /* 0xD0 */ + 0xB8BE, 0xB8BF, 0x90AA, 0xB8C0, 0x90AB, 0xB8C1, 0xB8C2, 0x90AC, /* 0xD0 */ + 0x90AD, 0xB8C3, 0x90AE, 0xB8C4, 0xB8C5, 0xB8C6, 0x90AF, 0x90B0, /* 0xE0 */ + 0xB8C7, 0x90B1, 0x90B2, 0x90B3, 0xB8C8, 0x90B4, 0x90B5, 0x90B6, /* 0xE0 */ + 0x90B7, 0x90B8, 0x90B9, 0x90BA, 0xB8C9, 0xB8CA, 0x90BB, 0xB8CB, /* 0xF0 */ + 0xB8CC, 0xB8CD, 0xB8CE, 0x90BC, 0x90BD, 0x90BE, 0x90BF, 0x90C0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB8CF, 0xB8D0, 0x90C1, 0x90C2, 0x90C3, 0x90C4, 0x90C5, 0x90C6, /* 0x00 */ + 0xB8D1, 0x90C7, 0x90C8, 0x90C9, 0x90CA, 0x90CB, 0x90CC, 0x90CD, /* 0x00 */ + 0x90CE, 0x90CF, 0x90D0, 0x90D1, 0x90D2, 0xB8D2, 0x90D3, 0x90D4, /* 0x10 */ + 0x90D5, 0x90D6, 0x90D7, 0x90D8, 0x90D9, 0x90DA, 0x90DB, 0x90DC, /* 0x10 */ + 0x90DD, 0x90DE, 0x90DF, 0x90E0, 0x90E1, 0x90E2, 0x90E3, 0x90E4, /* 0x20 */ + 0x90E5, 0x90E6, 0x90E7, 0x90E8, 0x90E9, 0x90EA, 0x90EB, 0x90EC, /* 0x20 */ + 0x90ED, 0x90EE, 0x90EF, 0x90F0, 0x90F1, 0x90F2, 0x90F3, 0x90F4, /* 0x30 */ + 0xB8D3, 0xB8D4, 0x90F5, 0x90F6, 0xB8D5, 0x90F7, 0x90F8, 0x90F9, /* 0x30 */ + 0xB8D6, 0x90FA, 0xB8D7, 0x90FB, 0x90FC, 0x90FD, 0x90FE, 0x9141, /* 0x40 */ + 0xB8D8, 0xB8D9, 0x9142, 0xB8DA, 0x9143, 0xB8DB, 0xB8DC, 0x9144, /* 0x40 */ + 0x9145, 0x9146, 0x9147, 0xB8DD, 0xB8DE, 0xB8DF, 0x9148, 0x9149, /* 0x50 */ + 0xB8E0, 0x914A, 0x914B, 0x914C, 0xB8E1, 0x914D, 0x914E, 0x914F, /* 0x50 */ + 0x9150, 0x9151, 0x9152, 0x9153, 0xB8E2, 0xB8E3, 0x9154, 0xB8E4, /* 0x60 */ + 0xB8E5, 0xB8E6, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159, 0x915A, /* 0x60 */ + 0xB8E7, 0xB8E8, 0x9161, 0x9162, 0xB8E9, 0x9163, 0x9164, 0x9165, /* 0x70 */ + 0xB8EA, 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, 0x916C, /* 0x70 */ + 0x916D, 0x916E, 0x916F, 0xB8EB, 0xB8EC, 0xB8ED, 0x9170, 0xB8EE, /* 0x80 */ + 0x9171, 0x9172, 0x9173, 0x9174, 0xB8EF, 0x9175, 0x9176, 0x9177, /* 0x80 */ + 0x9178, 0x9179, 0x917A, 0x9181, 0x9182, 0x9183, 0x9184, 0x9185, /* 0x90 */ + 0x9186, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, 0x918D, /* 0x90 */ + 0x918E, 0x918F, 0x9190, 0x9191, 0x9192, 0x9193, 0x9194, 0x9195, /* 0xA0 */ + 0xB8F0, 0xB8F1, 0x9196, 0xB8F2, 0xB8F3, 0x9197, 0x9198, 0x9199, /* 0xA0 */ + 0xB8F4, 0x919A, 0xB8F5, 0x919B, 0x919C, 0x919D, 0x919E, 0x919F, /* 0xB0 */ + 0xB8F6, 0xB8F7, 0x91A0, 0xB8F8, 0x91A1, 0xB8F9, 0x91A2, 0x91A3, /* 0xB0 */ + 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0xB8FA, 0x91A8, 0x91A9, 0x91AA, /* 0xC0 */ + 0xB8FB, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0x91B0, 0x91B1, /* 0xC0 */ + 0x91B2, 0x91B3, 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, /* 0xD0 */ + 0xB8FC, 0xB8FD, 0x91BA, 0x91BB, 0x91BC, 0x91BD, 0x91BE, 0x91BF, /* 0xD0 */ + 0x91C0, 0x91C1, 0x91C2, 0x91C3, 0x91C4, 0x91C5, 0x91C6, 0x91C7, /* 0xE0 */ + 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, 0x91CD, 0x91CE, 0x91CF, /* 0xE0 */ + 0x91D0, 0x91D1, 0x91D2, 0x91D3, 0x91D4, 0x91D5, 0x91D6, 0x91D7, /* 0xF0 */ + 0x91D8, 0x91D9, 0x91DA, 0x91DB, 0xB8FE, 0x91DC, 0x91DD, 0x91DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB9A1, 0x91DF, 0x91E0, 0x91E1, 0xB9A2, 0x91E2, 0x91E3, 0x91E4, /* 0x00 */ + 0x91E5, 0x91E6, 0x91E7, 0x91E8, 0x91E9, 0xB9A3, 0x91EA, 0xB9A4, /* 0x00 */ + 0x91EB, 0xB9A5, 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, 0x91F1, /* 0x10 */ + 0xB9A6, 0x91F2, 0x91F3, 0x91F4, 0xB9A7, 0x91F5, 0x91F6, 0x91F7, /* 0x10 */ + 0xB9A8, 0x91F8, 0x91F9, 0x91FA, 0x91FB, 0x91FC, 0x91FD, 0x91FE, /* 0x20 */ + 0x9241, 0xB9A9, 0x9242, 0xB9AA, 0x9243, 0x9244, 0x9245, 0x9246, /* 0x20 */ + 0x9247, 0x9248, 0x9249, 0x924A, 0xB9AB, 0xB9AC, 0xB9AD, 0x924B, /* 0x30 */ + 0xB9AE, 0x924C, 0x924D, 0xB9AF, 0xB9B0, 0xB9B1, 0xB9B2, 0x924E, /* 0x30 */ + 0x924F, 0x9250, 0x9251, 0x9252, 0xB9B3, 0xB9B4, 0x9253, 0xB9B5, /* 0x40 */ + 0x9254, 0xB9B6, 0x9255, 0x9256, 0x9257, 0xB9B7, 0x9258, 0xB9B8, /* 0x40 */ + 0xB9B9, 0x9259, 0x925A, 0x9261, 0xB9BA, 0x9262, 0x9263, 0x9264, /* 0x50 */ + 0xB9BB, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926A, 0x926B, /* 0x50 */ + 0x926C, 0xB9BC, 0x926D, 0xB9BD, 0x926E, 0x926F, 0x9270, 0x9271, /* 0x60 */ + 0x9272, 0x9273, 0x9274, 0x9275, 0xB9BE, 0x9276, 0x9277, 0x9278, /* 0x60 */ + 0x9279, 0x927A, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286, /* 0x70 */ + 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C, 0x928D, 0x928E, /* 0x70 */ + 0x928F, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, /* 0x80 */ + 0xB9BF, 0x9297, 0x9298, 0x9299, 0xB9C0, 0x929A, 0x929B, 0x929C, /* 0x80 */ + 0xB9C1, 0x929D, 0x929E, 0x929F, 0x92A0, 0x92A1, 0x92A2, 0x92A3, /* 0x90 */ + 0x92A4, 0x92A5, 0x92A6, 0x92A7, 0x92A8, 0x92A9, 0x92AA, 0x92AB, /* 0x90 */ + 0x92AC, 0x92AD, 0x92AE, 0x92AF, 0xB9C2, 0x92B0, 0x92B1, 0x92B2, /* 0xA0 */ + 0xB9C3, 0x92B3, 0x92B4, 0x92B5, 0xB9C4, 0x92B6, 0x92B7, 0x92B8, /* 0xA0 */ + 0x92B9, 0x92BA, 0x92BB, 0x92BC, 0xB9C5, 0x92BD, 0x92BE, 0xB9C6, /* 0xB0 */ + 0x92BF, 0x92C0, 0x92C1, 0x92C2, 0x92C3, 0x92C4, 0x92C5, 0x92C6, /* 0xB0 */ + 0xB9C7, 0x92C7, 0x92C8, 0x92C9, 0xB9C8, 0x92CA, 0x92CB, 0x92CC, /* 0xC0 */ + 0xB9C9, 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, 0x92D2, 0x92D3, /* 0xC0 */ + 0xB9CA, 0x92D4, 0x92D5, 0xB9CB, 0x92D6, 0x92D7, 0x92D8, 0x92D9, /* 0xD0 */ + 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0x92DE, 0x92DF, 0x92E0, 0x92E1, /* 0xD0 */ + 0x92E2, 0x92E3, 0x92E4, 0x92E5, 0x92E6, 0x92E7, 0x92E8, 0x92E9, /* 0xE0 */ + 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, 0x92F1, /* 0xE0 */ + 0x92F2, 0x92F3, 0x92F4, 0x92F5, 0x92F6, 0x92F7, 0x92F8, 0x92F9, /* 0xF0 */ + 0xB9CC, 0xB9CD, 0x92FA, 0x92FB, 0xB9CE, 0x92FC, 0x92FD, 0xB9CF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB9D0, 0x92FE, 0xB9D1, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, /* 0x00 */ + 0xB9D2, 0xB9D3, 0x9346, 0xB9D4, 0xB9D5, 0xB9D6, 0x9347, 0xB9D7, /* 0x00 */ + 0x9348, 0xB9D8, 0x9349, 0x934A, 0xB9D9, 0xB9DA, 0xB9DB, 0xB9DC, /* 0x10 */ + 0xB9DD, 0x934B, 0x934C, 0xB9DE, 0xB9DF, 0xB9E0, 0xB9E1, 0xB9E2, /* 0x10 */ + 0x934D, 0x934E, 0x934F, 0x9350, 0xB9E3, 0xB9E4, 0x9351, 0xB9E5, /* 0x20 */ + 0x9352, 0xB9E6, 0x9353, 0x9354, 0x9355, 0xB9E7, 0x9356, 0x9357, /* 0x20 */ + 0xB9E8, 0xB9E9, 0x9358, 0x9359, 0xB9EA, 0x935A, 0x9361, 0x9362, /* 0x30 */ + 0xB9EB, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, /* 0x30 */ + 0xB9EC, 0xB9ED, 0x936A, 0xB9EE, 0xB9EF, 0xB9F0, 0x936B, 0x936C, /* 0x40 */ + 0x936D, 0xB9F1, 0x936E, 0x936F, 0xB9F2, 0xB9F3, 0x9370, 0x9371, /* 0x40 */ + 0xB9F4, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, /* 0x50 */ + 0x9379, 0x937A, 0x9381, 0x9382, 0x9383, 0xB9F5, 0x9384, 0x9385, /* 0x50 */ + 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0x938B, 0x938C, 0x938D, /* 0x60 */ + 0x938E, 0x938F, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, /* 0x60 */ + 0x9396, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, /* 0x70 */ + 0x939E, 0x939F, 0x93A0, 0x93A1, 0x93A2, 0x93A3, 0x93A4, 0x93A5, /* 0x70 */ + 0x93A6, 0x93A7, 0x93A8, 0x93A9, 0xB9F6, 0xB9F7, 0x93AA, 0x93AB, /* 0x80 */ + 0xB9F8, 0x93AC, 0x93AD, 0xB9F9, 0xB9FA, 0x93AE, 0xB9FB, 0x93AF, /* 0x80 */ + 0x93B0, 0x93B1, 0x93B2, 0x93B3, 0xB9FC, 0xB9FD, 0x93B4, 0xB9FE, /* 0x90 */ + 0x93B5, 0xBAA1, 0xBAA2, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, /* 0x90 */ + 0xBAA3, 0xBAA4, 0x93BB, 0x93BC, 0xBAA5, 0x93BD, 0x93BE, 0xBAA6, /* 0xA0 */ + 0xBAA7, 0x93BF, 0x93C0, 0x93C1, 0x93C2, 0x93C3, 0x93C4, 0x93C5, /* 0xA0 */ + 0xBAA8, 0xBAA9, 0x93C6, 0xBAAA, 0xBAAB, 0xBAAC, 0x93C7, 0x93C8, /* 0xB0 */ + 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0xBAAD, 0xBAAE, 0x93CD, 0x93CE, /* 0xB0 */ + 0xBAAF, 0x93CF, 0x93D0, 0x93D1, 0xBAB0, 0x93D2, 0x93D3, 0x93D4, /* 0xC0 */ + 0x93D5, 0x93D6, 0x93D7, 0x93D8, 0x93D9, 0xBAB1, 0x93DA, 0xBAB2, /* 0xC0 */ + 0xBAB3, 0xBAB4, 0x93DB, 0x93DC, 0x93DD, 0xBAB5, 0x93DE, 0x93DF, /* 0xD0 */ + 0xBAB6, 0x93E0, 0x93E1, 0x93E2, 0xBAB7, 0x93E3, 0x93E4, 0x93E5, /* 0xD0 */ + 0x93E6, 0x93E7, 0x93E8, 0x93E9, 0x93EA, 0x93EB, 0x93EC, 0x93ED, /* 0xE0 */ + 0x93EE, 0x93EF, 0x93F0, 0x93F1, 0x93F2, 0x93F3, 0x93F4, 0x93F5, /* 0xE0 */ + 0x93F6, 0x93F7, 0x93F8, 0x93F9, 0xBAB8, 0xBAB9, 0xBABA, 0x93FA, /* 0xF0 */ + 0xBABB, 0x93FB, 0x93FC, 0x93FD, 0xBABC, 0x93FE, 0x9441, 0x9442 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9443, 0x9444, 0x9445, 0x9446, 0xBABD, 0xBABE, 0x9447, 0xBABF, /* 0x00 */ + 0x9448, 0xBAC0, 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, /* 0x00 */ + 0xBAC1, 0x944F, 0x9450, 0x9451, 0xBAC2, 0x9452, 0x9453, 0x9454, /* 0x10 */ + 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945A, 0x9461, 0x9462, /* 0x10 */ + 0x9463, 0x9464, 0x9465, 0x9466, 0xBAC3, 0x9467, 0x9468, 0x9469, /* 0x20 */ + 0x946A, 0x946B, 0x946C, 0x946D, 0xBAC4, 0x946E, 0x946F, 0x9470, /* 0x20 */ + 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478, /* 0x30 */ + 0x9479, 0x947A, 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, /* 0x30 */ + 0xBAC5, 0x9487, 0x9488, 0x9489, 0x948A, 0x948B, 0x948C, 0x948D, /* 0x40 */ + 0xBAC6, 0xBAC7, 0x948E, 0x948F, 0xBAC8, 0x9490, 0x9491, 0x9492, /* 0x40 */ + 0xBAC9, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499, /* 0x50 */ + 0xBACA, 0xBACB, 0x949A, 0x949B, 0x949C, 0x949D, 0x949E, 0x949F, /* 0x50 */ + 0x94A0, 0x94A1, 0x94A2, 0x94A3, 0xBACC, 0x94A4, 0x94A5, 0x94A6, /* 0x60 */ + 0xBACD, 0x94A7, 0x94A8, 0x94A9, 0x94AA, 0x94AB, 0x94AC, 0x94AD, /* 0x60 */ + 0x94AE, 0x94AF, 0x94B0, 0x94B1, 0x94B2, 0x94B3, 0x94B4, 0x94B5, /* 0x70 */ + 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD, /* 0x70 */ + 0xBACE, 0xBACF, 0x94BE, 0x94BF, 0xBAD0, 0x94C0, 0x94C1, 0xBAD1, /* 0x80 */ + 0xBAD2, 0xBAD3, 0xBAD4, 0x94C2, 0x94C3, 0x94C4, 0x94C5, 0x94C6, /* 0x80 */ + 0xBAD5, 0xBAD6, 0x94C7, 0xBAD7, 0x94C8, 0xBAD8, 0x94C9, 0x94CA, /* 0x90 */ + 0x94CB, 0xBAD9, 0xBADA, 0x94CC, 0xBADB, 0x94CD, 0x94CE, 0x94CF, /* 0x90 */ + 0x94D0, 0x94D1, 0x94D2, 0x94D3, 0xBADC, 0x94D4, 0x94D5, 0x94D6, /* 0xA0 */ + 0x94D7, 0x94D8, 0x94D9, 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94DE, /* 0xA0 */ + 0xBADD, 0x94DF, 0x94E0, 0x94E1, 0x94E2, 0x94E3, 0x94E4, 0x94E5, /* 0xB0 */ + 0xBADE, 0x94E6, 0x94E7, 0x94E8, 0x94E9, 0x94EA, 0x94EB, 0x94EC, /* 0xB0 */ + 0x94ED, 0x94EE, 0x94EF, 0x94F0, 0x94F1, 0x94F2, 0x94F3, 0x94F4, /* 0xC0 */ + 0x94F5, 0x94F6, 0x94F7, 0x94F8, 0x94F9, 0x94FA, 0x94FB, 0x94FC, /* 0xC0 */ + 0x94FD, 0x94FE, 0x9541, 0x9542, 0xBADF, 0xBAE0, 0x9543, 0x9544, /* 0xD0 */ + 0xBAE1, 0x9545, 0x9546, 0x9547, 0xBAE2, 0x9548, 0x9549, 0x954A, /* 0xD0 */ + 0x954B, 0x954C, 0x954D, 0x954E, 0x954F, 0x9550, 0x9551, 0x9552, /* 0xE0 */ + 0x9553, 0xBAE3, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, /* 0xE0 */ + 0xBAE4, 0x955A, 0x9561, 0x9562, 0xBAE5, 0x9563, 0x9564, 0x9565, /* 0xF0 */ + 0xBAE6, 0x9566, 0x9567, 0x9568, 0x9569, 0x956A, 0x956B, 0x956C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBAE7, 0x956D, 0x956E, 0xBAE8, 0x956F, 0xBAE9, 0x9570, 0x9571, /* 0x00 */ + 0x9572, 0x9573, 0x9574, 0x9575, 0xBAEA, 0xBAEB, 0x9576, 0x9577, /* 0x00 */ + 0xBAEC, 0x9578, 0x9579, 0x957A, 0xBAED, 0x9581, 0x9582, 0x9583, /* 0x10 */ + 0x9584, 0x9585, 0x9586, 0x9587, 0xBAEE, 0xBAEF, 0x9588, 0xBAF0, /* 0x10 */ + 0x9589, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0x958F, 0x9590, /* 0x20 */ + 0x9591, 0x9592, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, /* 0x20 */ + 0x9599, 0x959A, 0x959B, 0x959C, 0x959D, 0x959E, 0x959F, 0x95A0, /* 0x30 */ + 0x95A1, 0x95A2, 0x95A3, 0x95A4, 0x95A5, 0x95A6, 0x95A7, 0x95A8, /* 0x30 */ + 0x95A9, 0x95AA, 0x95AB, 0x95AC, 0xBAF1, 0xBAF2, 0x95AD, 0x95AE, /* 0x40 */ + 0xBAF3, 0x95AF, 0x95B0, 0x95B1, 0xBAF4, 0x95B2, 0xBAF5, 0x95B3, /* 0x40 */ + 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0xBAF6, 0xBAF7, 0x95B8, 0xBAF8, /* 0x50 */ + 0x95B9, 0xBAF9, 0xBAFA, 0xBAFB, 0x95BA, 0x95BB, 0x95BC, 0x95BD, /* 0x50 */ + 0xBAFC, 0xBAFD, 0x95BE, 0x95BF, 0xBAFE, 0x95C0, 0x95C1, 0x95C2, /* 0x60 */ + 0xBBA1, 0x95C3, 0xBBA2, 0x95C4, 0x95C5, 0x95C6, 0x95C7, 0x95C8, /* 0x60 */ + 0xBBA3, 0xBBA4, 0x95C9, 0xBBA5, 0xBBA6, 0xBBA7, 0x95CA, 0x95CB, /* 0x70 */ + 0x95CC, 0x95CD, 0x95CE, 0xBBA8, 0xBBA9, 0xBBAA, 0x95CF, 0x95D0, /* 0x70 */ + 0xBBAB, 0x95D1, 0x95D2, 0x95D3, 0xBBAC, 0x95D4, 0x95D5, 0x95D6, /* 0x80 */ + 0x95D7, 0x95D8, 0x95D9, 0x95DA, 0xBBAD, 0xBBAE, 0x95DB, 0xBBAF, /* 0x80 */ + 0xBBB0, 0xBBB1, 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, /* 0x90 */ + 0xBBB2, 0xBBB3, 0x95E2, 0x95E3, 0x95E4, 0x95E5, 0x95E6, 0x95E7, /* 0x90 */ + 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0x95ED, 0x95EE, 0x95EF, /* 0xA0 */ + 0xBBB4, 0x95F0, 0x95F1, 0x95F2, 0x95F3, 0x95F4, 0x95F5, 0x95F6, /* 0xA0 */ + 0x95F7, 0x95F8, 0x95F9, 0x95FA, 0x95FB, 0x95FC, 0x95FD, 0x95FE, /* 0xB0 */ + 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, /* 0xB0 */ + 0x9649, 0x964A, 0x964B, 0x964C, 0x964D, 0x964E, 0x964F, 0x9650, /* 0xC0 */ + 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, /* 0xC0 */ + 0xBBB5, 0xBBB6, 0x9659, 0x965A, 0xBBB7, 0x9661, 0x9662, 0xBBB8, /* 0xD0 */ + 0xBBB9, 0x9663, 0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, /* 0xD0 */ + 0xBBBA, 0x966A, 0x966B, 0xBBBB, 0xBBBC, 0xBBBD, 0x966C, 0x966D, /* 0xE0 */ + 0x966E, 0x966F, 0x9670, 0x9671, 0xBBBE, 0x9672, 0x9673, 0x9674, /* 0xE0 */ + 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967A, 0x9681, 0x9682, /* 0xF0 */ + 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, 0x9688, 0x9689, 0x968A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x968B, 0xBBBF, 0x968C, 0x968D, 0x968E, 0x968F, 0x9690, 0x9691, /* 0x00 */ + 0xBBC0, 0xBBC1, 0x9692, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697, /* 0x00 */ + 0x9698, 0x9699, 0x969A, 0x969B, 0x969C, 0x969D, 0x969E, 0x969F, /* 0x10 */ + 0xBBC2, 0xBBC3, 0x96A0, 0xBBC4, 0xBBC5, 0xBBC6, 0x96A1, 0x96A2, /* 0x10 */ + 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A7, 0x96A8, 0x96A9, 0x96AA, /* 0x20 */ + 0x96AB, 0x96AC, 0x96AD, 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B2, /* 0x20 */ + 0x96B3, 0x96B4, 0x96B5, 0x96B6, 0x96B7, 0x96B8, 0x96B9, 0x96BA, /* 0x30 */ + 0x96BB, 0x96BC, 0x96BD, 0x96BE, 0x96BF, 0x96C0, 0x96C1, 0x96C2, /* 0x30 */ + 0xBBC7, 0xBBC8, 0x96C3, 0x96C4, 0xBBC9, 0x96C5, 0x96C6, 0x96C7, /* 0x40 */ + 0xBBCA, 0x96C8, 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0x96CD, 0x96CE, /* 0x40 */ + 0xBBCB, 0xBBCC, 0x96CF, 0x96D0, 0x96D1, 0xBBCD, 0x96D2, 0x96D3, /* 0x50 */ + 0x96D4, 0x96D5, 0x96D6, 0x96D7, 0x96D8, 0x96D9, 0x96DA, 0x96DB, /* 0x50 */ + 0x96DC, 0x96DD, 0x96DE, 0x96DF, 0x96E0, 0x96E1, 0x96E2, 0x96E3, /* 0x60 */ + 0x96E4, 0x96E5, 0x96E6, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, /* 0x60 */ + 0x96EC, 0x96ED, 0x96EE, 0x96EF, 0x96F0, 0x96F1, 0x96F2, 0x96F3, /* 0x70 */ + 0x96F4, 0x96F5, 0x96F6, 0x96F7, 0x96F8, 0x96F9, 0x96FA, 0x96FB, /* 0x70 */ + 0x96FC, 0x96FD, 0x96FE, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, /* 0x80 */ + 0x9746, 0x9747, 0x9748, 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, /* 0x80 */ + 0x974E, 0x974F, 0x9750, 0x9751, 0xBBCE, 0x9752, 0x9753, 0x9754, /* 0x90 */ + 0x9755, 0x9756, 0x9757, 0x9758, 0x9759, 0x975A, 0x9761, 0x9762, /* 0x90 */ + 0x9763, 0x9764, 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976A, /* 0xA0 */ + 0x976B, 0x976C, 0x976D, 0x976E, 0x976F, 0x9770, 0x9771, 0x9772, /* 0xA0 */ + 0xBBCF, 0x9773, 0x9774, 0x9775, 0x9776, 0x9777, 0x9778, 0x9779, /* 0xB0 */ + 0x977A, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, /* 0xB0 */ + 0x9788, 0x9789, 0x978A, 0x978B, 0x978C, 0xBBD0, 0x978D, 0x978E, /* 0xC0 */ + 0x978F, 0x9790, 0x9791, 0x9792, 0xBBD1, 0xBBD2, 0x9793, 0x9794, /* 0xC0 */ + 0xBBD3, 0x9795, 0x9796, 0x9797, 0xBBD4, 0x9798, 0x9799, 0x979A, /* 0xD0 */ + 0x979B, 0x979C, 0x979D, 0x979E, 0xBBD5, 0x979F, 0x97A0, 0xBBD6, /* 0xD0 */ + 0x97A1, 0xBBD7, 0x97A2, 0x97A3, 0x97A4, 0x97A5, 0x97A6, 0x97A7, /* 0xE0 */ + 0x97A8, 0x97A9, 0x97AA, 0x97AB, 0x97AC, 0x97AD, 0x97AE, 0x97AF, /* 0xE0 */ + 0x97B0, 0x97B1, 0x97B2, 0x97B3, 0x97B4, 0x97B5, 0x97B6, 0x97B7, /* 0xF0 */ + 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BD, 0x97BE, 0x97BF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x97C0, 0x97C1, 0x97C2, 0x97C3, 0x97C4, 0x97C5, 0x97C6, 0x97C7, /* 0x00 */ + 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, 0x97CD, 0x97CE, 0x97CF, /* 0x00 */ + 0x97D0, 0x97D1, 0x97D2, 0x97D3, 0x97D4, 0x97D5, 0x97D6, 0x97D7, /* 0x10 */ + 0x97D8, 0x97D9, 0x97DA, 0x97DB, 0x97DC, 0x97DD, 0x97DE, 0x97DF, /* 0x10 */ + 0x97E0, 0x97E1, 0x97E2, 0x97E3, 0x97E4, 0x97E5, 0x97E6, 0x97E7, /* 0x20 */ + 0x97E8, 0x97E9, 0x97EA, 0x97EB, 0x97EC, 0x97ED, 0x97EE, 0x97EF, /* 0x20 */ + 0x97F0, 0x97F1, 0x97F2, 0x97F3, 0x97F4, 0x97F5, 0x97F6, 0x97F7, /* 0x30 */ + 0x97F8, 0x97F9, 0x97FA, 0x97FB, 0xBBD8, 0x97FC, 0x97FD, 0x97FE, /* 0x30 */ + 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, 0x9848, /* 0x40 */ + 0x9849, 0x984A, 0x984B, 0x984C, 0x984D, 0x984E, 0x984F, 0x9850, /* 0x40 */ + 0x9851, 0xBBD9, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, /* 0x50 */ + 0xBBDA, 0x9858, 0x9859, 0x985A, 0xBBDB, 0x9861, 0x9862, 0x9863, /* 0x50 */ + 0xBBDC, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, 0x986A, /* 0x60 */ + 0xBBDD, 0xBBDE, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0x9870, /* 0x60 */ + 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, /* 0x70 */ + 0x9879, 0x987A, 0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, /* 0x70 */ + 0x9887, 0x9888, 0x9889, 0x988A, 0x988B, 0x988C, 0x988D, 0x988E, /* 0x80 */ + 0x988F, 0x9890, 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, /* 0x80 */ + 0xBBDF, 0xBBE0, 0x9897, 0x9898, 0xBBE1, 0x9899, 0x989A, 0x989B, /* 0x90 */ + 0xBBE2, 0x989C, 0x989D, 0x989E, 0x989F, 0x98A0, 0x98A1, 0x98A2, /* 0x90 */ + 0xBBE3, 0xBBE4, 0x98A3, 0xBBE5, 0x98A4, 0xBBE6, 0x98A5, 0x98A6, /* 0xA0 */ + 0x98A7, 0x98A8, 0x98A9, 0x98AA, 0xBBE7, 0xBBE8, 0x98AB, 0xBBE9, /* 0xA0 */ + 0xBBEA, 0x98AC, 0x98AD, 0xBBEB, 0xBBEC, 0xBBED, 0xBBEE, 0x98AE, /* 0xB0 */ + 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0xBBEF, 0xBBF0, 0x98B3, 0xBBF1, /* 0xB0 */ + 0xBBF2, 0xBBF3, 0x98B4, 0x98B5, 0x98B6, 0xBBF4, 0x98B7, 0x98B8, /* 0xC0 */ + 0xBBF5, 0xBBF6, 0x98B9, 0x98BA, 0xBBF7, 0x98BB, 0x98BC, 0x98BD, /* 0xC0 */ + 0xBBF8, 0x98BE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, 0x98C4, /* 0xD0 */ + 0xBBF9, 0xBBFA, 0x98C5, 0xBBFB, 0xBBFC, 0xBBFD, 0x98C6, 0x98C7, /* 0xD0 */ + 0x98C8, 0x98C9, 0x98CA, 0x98CB, 0xBBFE, 0xBCA1, 0x98CC, 0x98CD, /* 0xE0 */ + 0xBCA2, 0x98CE, 0x98CF, 0x98D0, 0xBCA3, 0x98D1, 0x98D2, 0x98D3, /* 0xE0 */ + 0x98D4, 0x98D5, 0x98D6, 0x98D7, 0xBCA4, 0xBCA5, 0x98D8, 0xBCA6, /* 0xF0 */ + 0x98D9, 0xBCA7, 0x98DA, 0x98DB, 0x98DC, 0x98DD, 0x98DE, 0x98DF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBCA8, 0x98E0, 0x98E1, 0x98E2, 0xBCA9, 0x98E3, 0x98E4, 0x98E5, /* 0x00 */ + 0xBCAA, 0x98E6, 0x98E7, 0x98E8, 0x98E9, 0x98EA, 0x98EB, 0x98EC, /* 0x00 */ + 0xBCAB, 0x98ED, 0x98EE, 0x98EF, 0x98F0, 0xBCAC, 0x98F1, 0x98F2, /* 0x10 */ + 0x98F3, 0x98F4, 0x98F5, 0x98F6, 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB0, /* 0x10 */ + 0xBCB1, 0x98F7, 0x98F8, 0xBCB2, 0xBCB3, 0x98F9, 0xBCB4, 0xBCB5, /* 0x20 */ + 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0xBCB6, 0xBCB7, 0x98FE, 0xBCB8, /* 0x20 */ + 0xBCB9, 0xBCBA, 0x9941, 0x9942, 0x9943, 0x9944, 0xBCBB, 0x9945, /* 0x30 */ + 0xBCBC, 0xBCBD, 0x9946, 0x9947, 0xBCBE, 0x9948, 0x9949, 0x994A, /* 0x30 */ + 0xBCBF, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, /* 0x40 */ + 0xBCC0, 0xBCC1, 0x9952, 0xBCC2, 0xBCC3, 0xBCC4, 0x9953, 0x9954, /* 0x40 */ + 0x9955, 0x9956, 0x9957, 0x9958, 0xBCC5, 0xBCC6, 0x9959, 0x995A, /* 0x50 */ + 0xBCC7, 0x9961, 0x9962, 0x9963, 0xBCC8, 0x9964, 0x9965, 0x9966, /* 0x50 */ + 0x9967, 0x9968, 0x9969, 0x996A, 0xBCC9, 0xBCCA, 0x996B, 0xBCCB, /* 0x60 */ + 0xBCCC, 0xBCCD, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, 0x9971, /* 0x60 */ + 0xBCCE, 0x9972, 0x9973, 0x9974, 0xBCCF, 0x9975, 0x9976, 0x9977, /* 0x70 */ + 0xBCD0, 0x9978, 0x9979, 0x997A, 0x9981, 0x9982, 0x9983, 0x9984, /* 0x70 */ + 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0xBCD1, 0x998A, 0x998B, /* 0x80 */ + 0x998C, 0x998D, 0x998E, 0x998F, 0xBCD2, 0xBCD3, 0xBCD4, 0x9990, /* 0x80 */ + 0xBCD5, 0x9991, 0x9992, 0x9993, 0xBCD6, 0x9994, 0xBCD7, 0x9995, /* 0x90 */ + 0x9996, 0x9997, 0x9998, 0x9999, 0xBCD8, 0xBCD9, 0x999A, 0xBCDA, /* 0x90 */ + 0x999B, 0xBCDB, 0x999C, 0x999D, 0x999E, 0xBCDC, 0x999F, 0x99A0, /* 0xA0 */ + 0xBCDD, 0xBCDE, 0x99A1, 0x99A2, 0xBCDF, 0x99A3, 0x99A4, 0x99A5, /* 0xA0 */ + 0xBCE0, 0x99A6, 0x99A7, 0x99A8, 0x99A9, 0x99AA, 0x99AB, 0x99AC, /* 0xB0 */ + 0x99AD, 0x99AE, 0x99AF, 0x99B0, 0x99B1, 0xBCE1, 0x99B2, 0x99B3, /* 0xB0 */ + 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0xBCE2, 0x99B8, 0x99B9, 0x99BA, /* 0xC0 */ + 0xBCE3, 0x99BB, 0x99BC, 0x99BD, 0xBCE4, 0x99BE, 0x99BF, 0x99C0, /* 0xC0 */ + 0x99C1, 0x99C2, 0x99C3, 0x99C4, 0xBCE5, 0x99C5, 0x99C6, 0xBCE6, /* 0xD0 */ + 0xBCE7, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, 0x99CD, /* 0xD0 */ + 0xBCE8, 0x99CE, 0x99CF, 0x99D0, 0xBCE9, 0x99D1, 0x99D2, 0x99D3, /* 0xE0 */ + 0xBCEA, 0x99D4, 0x99D5, 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, /* 0xE0 */ + 0xBCEB, 0xBCEC, 0x99DB, 0xBCED, 0x99DC, 0x99DD, 0x99DE, 0x99DF, /* 0xF0 */ + 0x99E0, 0x99E1, 0x99E2, 0x99E3, 0xBCEE, 0xBCEF, 0x99E4, 0x99E5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBCF0, 0x99E6, 0x99E7, 0x99E8, 0xBCF1, 0x99E9, 0x99EA, 0x99EB, /* 0x00 */ + 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0xBCF2, 0xBCF3, 0x99F0, 0xBCF4, /* 0x00 */ + 0x99F1, 0xBCF5, 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, /* 0x10 */ + 0xBCF6, 0xBCF7, 0x99F8, 0x99F9, 0xBCF8, 0x99FA, 0x99FB, 0xBCF9, /* 0x10 */ + 0xBCFA, 0x99FC, 0x99FD, 0x99FE, 0x9A41, 0x9A42, 0x9A43, 0x9A44, /* 0x20 */ + 0xBCFB, 0xBCFC, 0x9A45, 0xBCFD, 0x9A46, 0xBCFE, 0x9A47, 0xBDA1, /* 0x20 */ + 0x9A48, 0xBDA2, 0xBDA3, 0x9A49, 0xBDA4, 0x9A4A, 0x9A4B, 0x9A4C, /* 0x30 */ + 0x9A4D, 0x9A4E, 0x9A4F, 0x9A50, 0x9A51, 0x9A52, 0x9A53, 0x9A54, /* 0x30 */ + 0x9A55, 0x9A56, 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A61, 0x9A62, /* 0x40 */ + 0xBDA5, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0x9A68, 0x9A69, /* 0x40 */ + 0xBDA6, 0xBDA7, 0x9A6A, 0x9A6B, 0xBDA8, 0x9A6C, 0x9A6D, 0x9A6E, /* 0x50 */ + 0xBDA9, 0x9A6F, 0x9A70, 0x9A71, 0x9A72, 0x9A73, 0x9A74, 0x9A75, /* 0x50 */ + 0xBDAA, 0x9A76, 0x9A77, 0x9A78, 0x9A79, 0xBDAB, 0x9A7A, 0x9A81, /* 0x60 */ + 0x9A82, 0x9A83, 0x9A84, 0x9A85, 0xBDAC, 0xBDAD, 0x9A86, 0x9A87, /* 0x60 */ + 0xBDAE, 0x9A88, 0x9A89, 0x9A8A, 0xBDAF, 0x9A8B, 0x9A8C, 0x9A8D, /* 0x70 */ + 0x9A8E, 0x9A8F, 0x9A90, 0x9A91, 0xBDB0, 0xBDB1, 0x9A92, 0xBDB2, /* 0x70 */ + 0x9A93, 0xBDB3, 0x9A94, 0x9A95, 0x9A96, 0x9A97, 0x9A98, 0x9A99, /* 0x80 */ + 0xBDB4, 0xBDB5, 0x9A9A, 0x9A9B, 0x9A9C, 0x9A9D, 0x9A9E, 0x9A9F, /* 0x80 */ + 0xBDB6, 0x9AA0, 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, /* 0x90 */ + 0xBDB7, 0x9AA7, 0x9AA8, 0xBDB8, 0x9AA9, 0xBDB9, 0x9AAA, 0x9AAB, /* 0x90 */ + 0x9AAC, 0x9AAD, 0x9AAE, 0x9AAF, 0xBDBA, 0xBDBB, 0x9AB0, 0x9AB1, /* 0xA0 */ + 0xBDBC, 0x9AB2, 0x9AB3, 0x9AB4, 0xBDBD, 0xBDBE, 0x9AB5, 0x9AB6, /* 0xA0 */ + 0x9AB7, 0x9AB8, 0x9AB9, 0x9ABA, 0xBDBF, 0xBDC0, 0x9ABB, 0xBDC1, /* 0xB0 */ + 0x9ABC, 0xBDC2, 0x9ABD, 0x9ABE, 0x9ABF, 0x9AC0, 0x9AC1, 0x9AC2, /* 0xB0 */ + 0x9AC3, 0x9AC4, 0x9AC5, 0x9AC6, 0x9AC7, 0x9AC8, 0x9AC9, 0x9ACA, /* 0xC0 */ + 0x9ACB, 0x9ACC, 0x9ACD, 0x9ACE, 0x9ACF, 0x9AD0, 0x9AD1, 0x9AD2, /* 0xC0 */ + 0x9AD3, 0x9AD4, 0x9AD5, 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, /* 0xD0 */ + 0x9ADB, 0x9ADC, 0x9ADD, 0x9ADE, 0xBDC3, 0xBDC4, 0x9ADF, 0x9AE0, /* 0xD0 */ + 0xBDC5, 0x9AE1, 0x9AE2, 0xBDC6, 0xBDC7, 0x9AE3, 0x9AE4, 0x9AE5, /* 0xE0 */ + 0x9AE6, 0x9AE7, 0x9AE8, 0xBDC8, 0xBDC9, 0xBDCA, 0x9AE9, 0xBDCB, /* 0xE0 */ + 0x9AEA, 0xBDCC, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0xBDCD, 0x9AEF, /* 0xF0 */ + 0xBDCE, 0xBDCF, 0x9AF0, 0xBDD0, 0xBDD1, 0x9AF1, 0x9AF2, 0x9AF3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDD2, 0x9AF4, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, 0x9AFA, /* 0x00 */ + 0xBDD3, 0xBDD4, 0x9AFB, 0x9AFC, 0xBDD5, 0xBDD6, 0x9AFD, 0x9AFE, /* 0x00 */ + 0x9B41, 0x9B42, 0x9B43, 0xBDD7, 0xBDD8, 0xBDD9, 0x9B44, 0x9B45, /* 0x10 */ + 0xBDDA, 0x9B46, 0x9B47, 0x9B48, 0xBDDB, 0x9B49, 0x9B4A, 0x9B4B, /* 0x10 */ + 0x9B4C, 0x9B4D, 0x9B4E, 0x9B4F, 0xBDDC, 0xBDDD, 0x9B50, 0x9B51, /* 0x20 */ + 0xBDDE, 0xBDDF, 0x9B52, 0x9B53, 0x9B54, 0x9B55, 0x9B56, 0x9B57, /* 0x20 */ + 0x9B58, 0x9B59, 0x9B5A, 0x9B61, 0x9B62, 0x9B63, 0x9B64, 0x9B65, /* 0x30 */ + 0x9B66, 0x9B67, 0x9B68, 0x9B69, 0x9B6A, 0x9B6B, 0x9B6C, 0x9B6D, /* 0x30 */ + 0x9B6E, 0x9B6F, 0x9B70, 0x9B71, 0x9B72, 0xBDE0, 0x9B73, 0x9B74, /* 0x40 */ + 0x9B75, 0x9B76, 0x9B77, 0x9B78, 0x9B79, 0x9B7A, 0x9B81, 0x9B82, /* 0x40 */ + 0x9B83, 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, /* 0x50 */ + 0x9B8B, 0x9B8C, 0x9B8D, 0x9B8E, 0x9B8F, 0x9B90, 0x9B91, 0x9B92, /* 0x50 */ + 0x9B93, 0x9B94, 0x9B95, 0x9B96, 0x9B97, 0x9B98, 0x9B99, 0x9B9A, /* 0x60 */ + 0xBDE1, 0xBDE2, 0x9B9B, 0x9B9C, 0xBDE3, 0x9B9D, 0x9B9E, 0x9B9F, /* 0x60 */ + 0xBDE4, 0x9BA0, 0xBDE5, 0x9BA1, 0x9BA2, 0x9BA3, 0x9BA4, 0x9BA5, /* 0x70 */ + 0xBDE6, 0xBDE7, 0x9BA6, 0x9BA7, 0xBDE8, 0xBDE9, 0x9BA8, 0x9BA9, /* 0x70 */ + 0x9BAA, 0x9BAB, 0x9BAC, 0x9BAD, 0xBDEA, 0x9BAE, 0x9BAF, 0x9BB0, /* 0x80 */ + 0xBDEB, 0x9BB1, 0x9BB2, 0x9BB3, 0xBDEC, 0x9BB4, 0x9BB5, 0x9BB6, /* 0x80 */ + 0x9BB7, 0x9BB8, 0x9BB9, 0x9BBA, 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, /* 0x90 */ + 0x9BBF, 0x9BC0, 0x9BC1, 0x9BC2, 0x9BC3, 0x9BC4, 0x9BC5, 0x9BC6, /* 0x90 */ + 0x9BC7, 0x9BC8, 0x9BC9, 0x9BCA, 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, /* 0xA0 */ + 0x9BCF, 0x9BD0, 0x9BD1, 0x9BD2, 0x9BD3, 0x9BD4, 0x9BD5, 0x9BD6, /* 0xA0 */ + 0x9BD7, 0x9BD8, 0x9BD9, 0x9BDA, 0x9BDB, 0x9BDC, 0x9BDD, 0x9BDE, /* 0xB0 */ + 0x9BDF, 0x9BE0, 0x9BE1, 0x9BE2, 0x9BE3, 0x9BE4, 0x9BE5, 0x9BE6, /* 0xB0 */ + 0xBDED, 0x9BE7, 0x9BE8, 0x9BE9, 0x9BEA, 0x9BEB, 0x9BEC, 0x9BED, /* 0xC0 */ + 0x9BEE, 0x9BEF, 0x9BF0, 0x9BF1, 0x9BF2, 0x9BF3, 0x9BF4, 0x9BF5, /* 0xC0 */ + 0x9BF6, 0x9BF7, 0x9BF8, 0x9BF9, 0x9BFA, 0x9BFB, 0x9BFC, 0x9BFD, /* 0xD0 */ + 0xBDEE, 0xBDEF, 0x9BFE, 0x9C41, 0xBDF0, 0x9C42, 0x9C43, 0xBDF1, /* 0xD0 */ + 0xBDF2, 0x9C44, 0xBDF3, 0x9C45, 0x9C46, 0x9C47, 0x9C48, 0x9C49, /* 0xE0 */ + 0xBDF4, 0xBDF5, 0x9C4A, 0x9C4B, 0x9C4C, 0xBDF6, 0x9C4D, 0x9C4E, /* 0xE0 */ + 0x9C4F, 0x9C50, 0x9C51, 0x9C52, 0xBDF7, 0xBDF8, 0x9C53, 0x9C54, /* 0xF0 */ + 0xBDF9, 0x9C55, 0x9C56, 0x9C57, 0x9C58, 0x9C59, 0x9C5A, 0x9C61 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9C62, 0x9C63, 0x9C64, 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0x9C69, /* 0x00 */ + 0xBDFA, 0x9C6A, 0x9C6B, 0x9C6C, 0x9C6D, 0x9C6E, 0x9C6F, 0x9C70, /* 0x00 */ + 0xBDFB, 0x9C71, 0x9C72, 0x9C73, 0x9C74, 0x9C75, 0x9C76, 0x9C77, /* 0x10 */ + 0x9C78, 0x9C79, 0x9C7A, 0x9C81, 0x9C82, 0x9C83, 0x9C84, 0x9C85, /* 0x10 */ + 0x9C86, 0x9C87, 0x9C88, 0x9C89, 0xBDFC, 0x9C8A, 0x9C8B, 0x9C8C, /* 0x20 */ + 0x9C8D, 0x9C8E, 0x9C8F, 0x9C90, 0xBDFD, 0x9C91, 0x9C92, 0x9C93, /* 0x20 */ + 0xBDFE, 0x9C94, 0x9C95, 0x9C96, 0xBEA1, 0x9C97, 0x9C98, 0x9C99, /* 0x30 */ + 0x9C9A, 0x9C9B, 0x9C9C, 0x9C9D, 0xBEA2, 0xBEA3, 0x9C9E, 0x9C9F, /* 0x30 */ + 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, 0x9CA5, 0x9CA6, 0x9CA7, /* 0x40 */ + 0xBEA4, 0x9CA8, 0x9CA9, 0x9CAA, 0x9CAB, 0x9CAC, 0x9CAD, 0x9CAE, /* 0x40 */ + 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB2, 0x9CB3, 0x9CB4, 0x9CB5, 0x9CB6, /* 0x50 */ + 0x9CB7, 0x9CB8, 0x9CB9, 0x9CBA, 0x9CBB, 0x9CBC, 0x9CBD, 0x9CBE, /* 0x50 */ + 0x9CBF, 0x9CC0, 0x9CC1, 0x9CC2, 0xBEA5, 0xBEA6, 0x9CC3, 0x9CC4, /* 0x60 */ + 0xBEA7, 0x9CC5, 0x9CC6, 0x9CC7, 0xBEA8, 0x9CC8, 0x9CC9, 0x9CCA, /* 0x60 */ + 0x9CCB, 0x9CCC, 0x9CCD, 0x9CCE, 0xBEA9, 0xBEAA, 0x9CCF, 0x9CD0, /* 0x70 */ + 0x9CD1, 0xBEAB, 0x9CD2, 0x9CD3, 0x9CD4, 0x9CD5, 0x9CD6, 0x9CD7, /* 0x70 */ + 0xBEAC, 0x9CD8, 0x9CD9, 0x9CDA, 0x9CDB, 0x9CDC, 0x9CDD, 0x9CDE, /* 0x80 */ + 0x9CDF, 0x9CE0, 0x9CE1, 0x9CE2, 0x9CE3, 0x9CE4, 0x9CE5, 0x9CE6, /* 0x80 */ + 0x9CE7, 0x9CE8, 0x9CE9, 0x9CEA, 0xBEAD, 0x9CEB, 0x9CEC, 0x9CED, /* 0x90 */ + 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0xBEAE, 0x9CF2, 0x9CF3, 0x9CF4, /* 0x90 */ + 0x9CF5, 0x9CF6, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, /* 0xA0 */ + 0x9CFD, 0x9CFE, 0x9D41, 0x9D42, 0x9D43, 0x9D44, 0x9D45, 0x9D46, /* 0xA0 */ + 0x9D47, 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, /* 0xB0 */ + 0xBEAF, 0x9D4F, 0x9D50, 0x9D51, 0xBEB0, 0x9D52, 0x9D53, 0x9D54, /* 0xB0 */ + 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0x9D5A, 0x9D61, 0x9D62, /* 0xC0 */ + 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69, 0x9D6A, /* 0xC0 */ + 0x9D6B, 0x9D6C, 0x9D6D, 0x9D6E, 0x9D6F, 0x9D70, 0x9D71, 0x9D72, /* 0xD0 */ + 0x9D73, 0x9D74, 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, /* 0xD0 */ + 0x9D81, 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D87, 0x9D88, /* 0xE0 */ + 0x9D89, 0xBEB1, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, /* 0xE0 */ + 0xBEB2, 0xBEB3, 0x9D90, 0x9D91, 0xBEB4, 0x9D92, 0x9D93, 0x9D94, /* 0xF0 */ + 0xBEB5, 0x9D95, 0xBEB6, 0x9D96, 0x9D97, 0x9D98, 0x9D99, 0xBEB7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBEB8, 0xBEB9, 0x9D9A, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, /* 0x00 */ + 0x9DA0, 0x9DA1, 0x9DA2, 0x9DA3, 0xBEBA, 0x9DA4, 0x9DA5, 0x9DA6, /* 0x00 */ + 0xBEBB, 0x9DA7, 0x9DA8, 0x9DA9, 0xBEBC, 0x9DAA, 0x9DAB, 0x9DAC, /* 0x10 */ + 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0xBEBD, 0x9DB1, 0x9DB2, 0x9DB3, /* 0x10 */ + 0x9DB4, 0x9DB5, 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, /* 0x20 */ + 0xBEBE, 0xBEBF, 0x9DBC, 0x9DBD, 0xBEC0, 0x9DBE, 0x9DBF, 0x9DC0, /* 0x20 */ + 0xBEC1, 0x9DC1, 0x9DC2, 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0x9DC7, /* 0x30 */ + 0xBEC2, 0xBEC3, 0x9DC8, 0xBEC4, 0x9DC9, 0xBEC5, 0x9DCA, 0x9DCB, /* 0x30 */ + 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0xBEC6, 0xBEC7, 0x9DD0, 0x9DD1, /* 0x40 */ + 0xBEC8, 0xBEC9, 0xBECA, 0x9DD2, 0xBECB, 0xBECC, 0xBECD, 0x9DD3, /* 0x40 */ + 0x9DD4, 0x9DD5, 0x9DD6, 0xBECE, 0xBECF, 0xBED0, 0x9DD7, 0xBED1, /* 0x50 */ + 0xBED2, 0xBED3, 0x9DD8, 0x9DD9, 0x9DDA, 0xBED4, 0xBED5, 0x9DDB, /* 0x50 */ + 0xBED6, 0xBED7, 0x9DDC, 0x9DDD, 0xBED8, 0x9DDE, 0x9DDF, 0x9DE0, /* 0x60 */ + 0xBED9, 0x9DE1, 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, 0x9DE7, /* 0x60 */ + 0xBEDA, 0xBEDB, 0x9DE8, 0xBEDC, 0xBEDD, 0xBEDE, 0x9DE9, 0x9DEA, /* 0x70 */ + 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0xBEDF, 0xBEE0, 0x9DEF, 0x9DF0, /* 0x70 */ + 0xBEE1, 0x9DF1, 0x9DF2, 0x9DF3, 0xBEE2, 0x9DF4, 0x9DF5, 0xBEE3, /* 0x80 */ + 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0xBEE4, 0xBEE5, 0x9DFA, 0xBEE6, /* 0x80 */ + 0x9DFB, 0xBEE7, 0x9DFC, 0x9DFD, 0x9DFE, 0xBEE8, 0x9E41, 0xBEE9, /* 0x90 */ + 0xBEEA, 0x9E42, 0x9E43, 0x9E44, 0xBEEB, 0x9E45, 0x9E46, 0x9E47, /* 0x90 */ + 0xBEEC, 0x9E48, 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, /* 0xA0 */ + 0x9E4F, 0xBEED, 0x9E50, 0x9E51, 0x9E52, 0x9E53, 0x9E54, 0x9E55, /* 0xA0 */ + 0x9E56, 0x9E57, 0x9E58, 0x9E59, 0xBEEE, 0xBEEF, 0x9E5A, 0x9E61, /* 0xB0 */ + 0xBEF0, 0xBEF1, 0x9E62, 0xBEF2, 0xBEF3, 0xBEF4, 0xBEF5, 0x9E63, /* 0xB0 */ + 0x9E64, 0x9E65, 0x9E66, 0x9E67, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, /* 0xC0 */ + 0xBEFA, 0xBEFB, 0xBEFC, 0x9E68, 0xBEFD, 0x9E69, 0xBEFE, 0x9E6A, /* 0xC0 */ + 0xBFA1, 0xBFA2, 0x9E6B, 0x9E6C, 0xBFA3, 0x9E6D, 0x9E6E, 0x9E6F, /* 0xD0 */ + 0xBFA4, 0x9E70, 0x9E71, 0x9E72, 0x9E73, 0x9E74, 0x9E75, 0x9E76, /* 0xD0 */ + 0xBFA5, 0xBFA6, 0x9E77, 0xBFA7, 0x9E78, 0xBFA8, 0x9E79, 0x9E7A, /* 0xE0 */ + 0x9E81, 0x9E82, 0x9E83, 0x9E84, 0xBFA9, 0xBFAA, 0xBFAB, 0x9E85, /* 0xE0 */ + 0xBFAC, 0x9E86, 0x9E87, 0x9E88, 0xBFAD, 0x9E89, 0xBFAE, 0xBFAF, /* 0xF0 */ + 0x9E8A, 0x9E8B, 0x9E8C, 0x9E8D, 0xBFB0, 0xBFB1, 0xBFB2, 0xBFB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBFB4, 0xBFB5, 0x9E8E, 0x9E8F, 0x9E90, 0xBFB6, 0xBFB7, 0xBFB8, /* 0x00 */ + 0xBFB9, 0x9E91, 0x9E92, 0x9E93, 0xBFBA, 0x9E94, 0x9E95, 0x9E96, /* 0x00 */ + 0xBFBB, 0x9E97, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9D, /* 0x10 */ + 0xBFBC, 0xBFBD, 0x9E9E, 0xBFBE, 0xBFBF, 0x9E9F, 0x9EA0, 0x9EA1, /* 0x10 */ + 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0xBFC0, 0xBFC1, 0x9EA6, 0x9EA7, /* 0x20 */ + 0xBFC2, 0x9EA8, 0x9EA9, 0x9EAA, 0xBFC3, 0xBFC4, 0xBFC5, 0x9EAB, /* 0x20 */ + 0xBFC6, 0x9EAC, 0x9EAD, 0xBFC7, 0xBFC8, 0xBFC9, 0x9EAE, 0xBFCA, /* 0x30 */ + 0x9EAF, 0xBFCB, 0x9EB0, 0xBFCC, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB4, /* 0x30 */ + 0xBFCD, 0xBFCE, 0x9EB5, 0x9EB6, 0xBFCF, 0x9EB7, 0x9EB8, 0x9EB9, /* 0x40 */ + 0xBFD0, 0x9EBA, 0x9EBB, 0x9EBC, 0x9EBD, 0x9EBE, 0x9EBF, 0x9EC0, /* 0x40 */ + 0xBFD1, 0xBFD2, 0x9EC1, 0xBFD3, 0xBFD4, 0xBFD5, 0x9EC2, 0x9EC3, /* 0x50 */ + 0x9EC4, 0x9EC5, 0x9EC6, 0x9EC7, 0xBFD6, 0xBFD7, 0x9EC8, 0x9EC9, /* 0x50 */ + 0xBFD8, 0x9ECA, 0x9ECB, 0x9ECC, 0x9ECD, 0x9ECE, 0x9ECF, 0x9ED0, /* 0x60 */ + 0x9ED1, 0x9ED2, 0x9ED3, 0x9ED4, 0xBFD9, 0x9ED5, 0x9ED6, 0xBFDA, /* 0x60 */ + 0x9ED7, 0xBFDB, 0x9ED8, 0x9ED9, 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, /* 0x70 */ + 0xBFDC, 0xBFDD, 0x9EDE, 0x9EDF, 0xBFDE, 0x9EE0, 0x9EE1, 0x9EE2, /* 0x70 */ + 0xBFDF, 0x9EE3, 0x9EE4, 0x9EE5, 0x9EE6, 0x9EE7, 0x9EE8, 0x9EE9, /* 0x80 */ + 0xBFE0, 0xBFE1, 0x9EEA, 0xBFE2, 0x9EEB, 0xBFE3, 0x9EEC, 0x9EED, /* 0x80 */ + 0x9EEE, 0x9EEF, 0x9EF0, 0x9EF1, 0xBFE4, 0xBFE5, 0x9EF2, 0x9EF3, /* 0x90 */ + 0xBFE6, 0x9EF4, 0x9EF5, 0x9EF6, 0xBFE7, 0x9EF7, 0x9EF8, 0x9EF9, /* 0x90 */ + 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, 0xBFE8, 0xBFE9, 0x9EFE, 0xBFEA, /* 0xA0 */ + 0x9F41, 0xBFEB, 0x9F42, 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, /* 0xA0 */ + 0xBFEC, 0xBFED, 0x9F48, 0x9F49, 0xBFEE, 0x9F4A, 0x9F4B, 0x9F4C, /* 0xB0 */ + 0xBFEF, 0xBFF0, 0xBFF1, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, 0x9F51, /* 0xB0 */ + 0xBFF2, 0xBFF3, 0x9F52, 0xBFF4, 0x9F53, 0xBFF5, 0x9F54, 0x9F55, /* 0xC0 */ + 0x9F56, 0x9F57, 0x9F58, 0x9F59, 0xBFF6, 0xBFF7, 0x9F5A, 0x9F61, /* 0xC0 */ + 0xBFF8, 0x9F62, 0x9F63, 0x9F64, 0xBFF9, 0x9F65, 0x9F66, 0x9F67, /* 0xD0 */ + 0x9F68, 0x9F69, 0x9F6A, 0x9F6B, 0xBFFA, 0xBFFB, 0x9F6C, 0x9F6D, /* 0xD0 */ + 0xBFFC, 0xBFFD, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F72, 0x9F73, /* 0xE0 */ + 0xBFFE, 0xC0A1, 0x9F74, 0x9F75, 0xC0A2, 0x9F76, 0x9F77, 0x9F78, /* 0xE0 */ + 0xC0A3, 0x9F79, 0x9F7A, 0x9F81, 0x9F82, 0x9F83, 0x9F84, 0x9F85, /* 0xF0 */ + 0xC0A4, 0xC0A5, 0x9F86, 0x9F87, 0x9F88, 0xC0A6, 0x9F89, 0x9F8A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0xC0A7, 0xC0A8, 0x9F8F, 0x9F90, /* 0x00 */ + 0xC0A9, 0x9F91, 0x9F92, 0x9F93, 0xC0AA, 0x9F94, 0x9F95, 0x9F96, /* 0x00 */ + 0x9F97, 0x9F98, 0x9F99, 0x9F9A, 0xC0AB, 0xC0AC, 0x9F9B, 0xC0AD, /* 0x10 */ + 0x9F9C, 0xC0AE, 0x9F9D, 0x9F9E, 0x9F9F, 0x9FA0, 0x9FA1, 0x9FA2, /* 0x10 */ + 0xC0AF, 0xC0B0, 0x9FA3, 0x9FA4, 0xC0B1, 0x9FA5, 0x9FA6, 0x9FA7, /* 0x20 */ + 0xC0B2, 0x9FA8, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, 0x9FAD, 0x9FAE, /* 0x20 */ + 0xC0B3, 0xC0B4, 0x9FAF, 0xC0B5, 0x9FB0, 0xC0B6, 0x9FB1, 0xC0B7, /* 0x30 */ + 0x9FB2, 0x9FB3, 0x9FB4, 0x9FB5, 0xC0B8, 0xC0B9, 0x9FB6, 0x9FB7, /* 0x30 */ + 0xC0BA, 0x9FB8, 0x9FB9, 0x9FBA, 0xC0BB, 0x9FBB, 0x9FBC, 0x9FBD, /* 0x40 */ + 0x9FBE, 0x9FBF, 0xC0BC, 0x9FC0, 0xC0BD, 0xC0BE, 0x9FC1, 0xC0BF, /* 0x40 */ + 0x9FC2, 0xC0C0, 0xC0C1, 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C5, 0xC0C6, /* 0x50 */ + 0xC0C7, 0x9FC3, 0x9FC4, 0x9FC5, 0xC0C8, 0x9FC6, 0x9FC7, 0x9FC8, /* 0x50 */ + 0xC0C9, 0x9FC9, 0x9FCA, 0x9FCB, 0x9FCC, 0x9FCD, 0x9FCE, 0x9FCF, /* 0x60 */ + 0xC0CA, 0x9FD0, 0x9FD1, 0xC0CB, 0x9FD2, 0x9FD3, 0x9FD4, 0x9FD5, /* 0x60 */ + 0x9FD6, 0x9FD7, 0x9FD8, 0x9FD9, 0xC0CC, 0xC0CD, 0x9FDA, 0x9FDB, /* 0x70 */ + 0xC0CE, 0x9FDC, 0x9FDD, 0x9FDE, 0xC0CF, 0xC0D0, 0xC0D1, 0x9FDF, /* 0x70 */ + 0x9FE0, 0x9FE1, 0x9FE2, 0xC0D2, 0xC0D3, 0xC0D4, 0x9FE3, 0xC0D5, /* 0x80 */ + 0xC0D6, 0xC0D7, 0xC0D8, 0x9FE4, 0x9FE5, 0x9FE6, 0xC0D9, 0x9FE7, /* 0x80 */ + 0xC0DA, 0xC0DB, 0x9FE8, 0x9FE9, 0xC0DC, 0x9FEA, 0xC0DD, 0xC0DE, /* 0x90 */ + 0xC0DF, 0x9FEB, 0xC0E0, 0x9FEC, 0x9FED, 0x9FEE, 0x9FEF, 0x9FF0, /* 0x90 */ + 0xC0E1, 0xC0E2, 0x9FF1, 0xC0E3, 0xC0E4, 0xC0E5, 0xC0E6, 0x9FF2, /* 0xA0 */ + 0x9FF3, 0x9FF4, 0x9FF5, 0x9FF6, 0xC0E7, 0xC0E8, 0x9FF7, 0x9FF8, /* 0xA0 */ + 0xC0E9, 0x9FF9, 0x9FFA, 0x9FFB, 0xC0EA, 0x9FFC, 0x9FFD, 0x9FFE, /* 0xB0 */ + 0xA041, 0xA042, 0xA043, 0xA044, 0xC0EB, 0xC0EC, 0xA045, 0xC0ED, /* 0xB0 */ + 0xC0EE, 0xC0EF, 0xA046, 0xA047, 0xA048, 0xA049, 0xA04A, 0xA04B, /* 0xC0 */ + 0xC0F0, 0xC0F1, 0xA04C, 0xA04D, 0xC0F2, 0xA04E, 0xC0F3, 0xA04F, /* 0xC0 */ + 0xC0F4, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xA055, 0xA056, /* 0xD0 */ + 0xC0F5, 0xA057, 0xA058, 0xA059, 0xA05A, 0xC0F6, 0xA061, 0xA062, /* 0xD0 */ + 0xA063, 0xA064, 0xA065, 0xA066, 0xC0F7, 0xA067, 0xA068, 0xA069, /* 0xE0 */ + 0xC0F8, 0xA06A, 0xA06B, 0xA06C, 0xC0F9, 0xA06D, 0xA06E, 0xA06F, /* 0xE0 */ + 0xA070, 0xA071, 0xA072, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077, /* 0xF0 */ + 0xA078, 0xA079, 0xA07A, 0xA081, 0xA082, 0xA083, 0xA084, 0xA085 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC0FA, 0xC0FB, 0xA086, 0xA087, 0xC0FC, 0xA088, 0xA089, 0xA08A, /* 0x00 */ + 0xC0FD, 0xA08B, 0xC0FE, 0xA08C, 0xA08D, 0xA08E, 0xA08F, 0xA090, /* 0x00 */ + 0xC1A1, 0xC1A2, 0xA091, 0xC1A3, 0xA092, 0xC1A4, 0xC1A5, 0xA093, /* 0x10 */ + 0xA094, 0xA095, 0xA096, 0xA097, 0xC1A6, 0xC1A7, 0xA098, 0xA099, /* 0x10 */ + 0xC1A8, 0xA09A, 0xA09B, 0xA09C, 0xC1A9, 0xA09D, 0xA09E, 0xA09F, /* 0x20 */ + 0xA0A0, 0xA0A1, 0xA0A2, 0xA0A3, 0xC1AA, 0xC1AB, 0xA0A4, 0xC1AC, /* 0x20 */ + 0xA0A5, 0xC1AD, 0xA0A6, 0xA0A7, 0xA0A8, 0xA0A9, 0xA0AA, 0xA0AB, /* 0x30 */ + 0xC1AE, 0xA0AC, 0xA0AD, 0xA0AE, 0xC1AF, 0xA0AF, 0xA0B0, 0xA0B1, /* 0x30 */ + 0xC1B0, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xA0B6, 0xA0B7, 0xA0B8, /* 0x40 */ + 0xC1B1, 0xC1B2, 0xA0B9, 0xA0BA, 0xC1B3, 0xC1B4, 0xA0BB, 0xA0BC, /* 0x40 */ + 0xA0BD, 0xA0BE, 0xA0BF, 0xA0C0, 0xC1B5, 0xA0C1, 0xA0C2, 0xA0C3, /* 0x50 */ + 0xA0C4, 0xA0C5, 0xA0C6, 0xA0C7, 0xA0C8, 0xA0C9, 0xA0CA, 0xA0CB, /* 0x50 */ + 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, /* 0x60 */ + 0xA0D4, 0xA0D5, 0xA0D6, 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, /* 0x60 */ + 0xC1B6, 0xC1B7, 0xA0DC, 0xA0DD, 0xC1B8, 0xA0DE, 0xA0DF, 0xA0E0, /* 0x70 */ + 0xC1B9, 0xA0E1, 0xC1BA, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0E6, /* 0x70 */ + 0xC1BB, 0xC1BC, 0xA0E7, 0xC1BD, 0xA0E8, 0xC1BE, 0xC1BF, 0xC1C0, /* 0x80 */ + 0xA0E9, 0xA0EA, 0xA0EB, 0xC1C1, 0xC1C2, 0xC1C3, 0xA0EC, 0xA0ED, /* 0x80 */ + 0xA0EE, 0xA0EF, 0xA0F0, 0xA0F1, 0xC1C4, 0xA0F2, 0xA0F3, 0xA0F4, /* 0x90 */ + 0xA0F5, 0xA0F6, 0xA0F7, 0xA0F8, 0xA0F9, 0xC1C5, 0xA0FA, 0xC1C6, /* 0x90 */ + 0xA0FB, 0xC1C7, 0xA0FC, 0xA0FD, 0xA0FE, 0xA141, 0xA142, 0xA143, /* 0xA0 */ + 0xC1C8, 0xA144, 0xA145, 0xA146, 0xA147, 0xA148, 0xA149, 0xA14A, /* 0xA0 */ + 0xA14B, 0xA14C, 0xA14D, 0xA14E, 0xA14F, 0xA150, 0xA151, 0xA152, /* 0xB0 */ + 0xA153, 0xA154, 0xA155, 0xA156, 0xC1C9, 0xC1CA, 0xA157, 0xA158, /* 0xB0 */ + 0xA159, 0xA15A, 0xA161, 0xA162, 0xC1CB, 0xA163, 0xA164, 0xA165, /* 0xC0 */ + 0xC1CC, 0xA166, 0xA167, 0xA168, 0xC1CD, 0xA169, 0xA16A, 0xA16B, /* 0xC0 */ + 0xA16C, 0xA16D, 0xA16E, 0xA16F, 0xC1CE, 0xC1CF, 0xA170, 0xC1D0, /* 0xD0 */ + 0xA171, 0xC1D1, 0xA172, 0xA173, 0xA174, 0xA175, 0xA176, 0xA177, /* 0xD0 */ + 0xC1D2, 0xC1D3, 0xA178, 0xA179, 0xC1D4, 0xA17A, 0xA181, 0xA182, /* 0xE0 */ + 0xA183, 0xA184, 0xA185, 0xA186, 0xA187, 0xA188, 0xA189, 0xA18A, /* 0xE0 */ + 0xA18B, 0xA18C, 0xA18D, 0xA18E, 0xA18F, 0xC1D5, 0xA190, 0xA191, /* 0xF0 */ + 0xA192, 0xA193, 0xA194, 0xA195, 0xC1D6, 0xC1D7, 0xA196, 0xA197 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_C9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC1D8, 0xA198, 0xA199, 0xA19A, 0xC1D9, 0xC1DA, 0xC1DB, 0xA19B, /* 0x00 */ + 0xA19C, 0xA19D, 0xA19E, 0xA19F, 0xC1DC, 0xC1DD, 0xA1A0, 0xC1DE, /* 0x00 */ + 0xA241, 0xC1DF, 0xA242, 0xA243, 0xA244, 0xA245, 0xA246, 0xA247, /* 0x10 */ + 0xC1E0, 0xA248, 0xA249, 0xA24A, 0xA24B, 0xA24C, 0xA24D, 0xA24E, /* 0x10 */ + 0xA24F, 0xA250, 0xA251, 0xA252, 0xA253, 0xA254, 0xA255, 0xA256, /* 0x20 */ + 0xA257, 0xA258, 0xA259, 0xA25A, 0xC1E1, 0xA261, 0xA262, 0xA263, /* 0x20 */ + 0xA264, 0xA265, 0xA266, 0xA267, 0xC1E2, 0xA268, 0xA269, 0xA26A, /* 0x30 */ + 0xA26B, 0xA26C, 0xA26D, 0xA26E, 0xA26F, 0xA270, 0xA271, 0xA272, /* 0x30 */ + 0xA273, 0xA274, 0xA275, 0xA276, 0xA277, 0xA278, 0xA279, 0xA27A, /* 0x40 */ + 0xA281, 0xA282, 0xA283, 0xA284, 0xA285, 0xA286, 0xA287, 0xA288, /* 0x40 */ + 0xC1E3, 0xC1E4, 0xA289, 0xA28A, 0xC1E5, 0xA28B, 0xA28C, 0xA28D, /* 0x50 */ + 0xC1E6, 0xA28E, 0xA28F, 0xA290, 0xA291, 0xA292, 0xA293, 0xA294, /* 0x50 */ + 0xC1E7, 0xC1E8, 0xA295, 0xC1E9, 0xA296, 0xA297, 0xA298, 0xA299, /* 0x60 */ + 0xA29A, 0xA29B, 0xA29C, 0xA29D, 0xC1EA, 0xA29E, 0xA29F, 0xA2A0, /* 0x60 */ + 0xC1EB, 0xA341, 0xA342, 0xA343, 0xC1EC, 0xA344, 0xA345, 0xA346, /* 0x70 */ + 0xA347, 0xA348, 0xA349, 0xA34A, 0xC1ED, 0xA34B, 0xA34C, 0xA34D, /* 0x70 */ + 0xA34E, 0xA34F, 0xA350, 0xA351, 0xA352, 0xA353, 0xA354, 0xA355, /* 0x80 */ + 0xC1EE, 0xC1EF, 0xA356, 0xA357, 0xC1F0, 0xA358, 0xA359, 0xA35A, /* 0x80 */ + 0xC1F1, 0xA361, 0xA362, 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, /* 0x90 */ + 0xC1F2, 0xC1F3, 0xA368, 0xC1F4, 0xA369, 0xC1F5, 0xA36A, 0xA36B, /* 0x90 */ + 0xA36C, 0xA36D, 0xA36E, 0xA36F, 0xA370, 0xA371, 0xA372, 0xA373, /* 0xA0 */ + 0xA374, 0xA375, 0xA376, 0xA377, 0xA378, 0xA379, 0xA37A, 0xA381, /* 0xA0 */ + 0xA382, 0xA383, 0xA384, 0xA385, 0xA386, 0xA387, 0xA388, 0xA389, /* 0xB0 */ + 0xA38A, 0xA38B, 0xA38C, 0xA38D, 0xA38E, 0xA38F, 0xA390, 0xA391, /* 0xB0 */ + 0xC1F6, 0xC1F7, 0xA392, 0xA393, 0xC1F8, 0xA394, 0xA395, 0xC1F9, /* 0xC0 */ + 0xC1FA, 0xA396, 0xC1FB, 0xA397, 0xA398, 0xA399, 0xA39A, 0xA39B, /* 0xC0 */ + 0xC1FC, 0xC1FD, 0xA39C, 0xC1FE, 0xA39D, 0xC2A1, 0xC2A2, 0xA39E, /* 0xD0 */ + 0xA39F, 0xC2A3, 0xC2A4, 0xA3A0, 0xC2A5, 0xC2A6, 0xA441, 0xA442, /* 0xD0 */ + 0xC2A7, 0xA443, 0xC2A8, 0xA444, 0xC2A9, 0xA445, 0xA446, 0xC2AA, /* 0xE0 */ + 0xA447, 0xA448, 0xA449, 0xA44A, 0xC2AB, 0xC2AC, 0xA44B, 0xC2AD, /* 0xE0 */ + 0xC2AE, 0xC2AF, 0xA44C, 0xA44D, 0xA44E, 0xA44F, 0xA450, 0xA451, /* 0xF0 */ + 0xC2B0, 0xC2B1, 0xA452, 0xA453, 0xC2B2, 0xA454, 0xA455, 0xA456 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC2B3, 0xA457, 0xA458, 0xA459, 0xA45A, 0xA461, 0xA462, 0xA463, /* 0x00 */ + 0xC2B4, 0xC2B5, 0xA464, 0xC2B6, 0xC2B7, 0xC2B8, 0xA465, 0xA466, /* 0x00 */ + 0xA467, 0xA468, 0xA469, 0xA46A, 0xC2B9, 0xA46B, 0xA46C, 0xA46D, /* 0x10 */ + 0xC2BA, 0xA46E, 0xA46F, 0xA470, 0xA471, 0xA472, 0xA473, 0xA474, /* 0x10 */ + 0xA475, 0xA476, 0xA477, 0xA478, 0xA479, 0xA47A, 0xA481, 0xA482, /* 0x20 */ + 0xA483, 0xC2BB, 0xA484, 0xA485, 0xA486, 0xA487, 0xA488, 0xA489, /* 0x20 */ + 0xA48A, 0xA48B, 0xA48C, 0xA48D, 0xA48E, 0xA48F, 0xA490, 0xA491, /* 0x30 */ + 0xA492, 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, 0xA499, /* 0x30 */ + 0xA49A, 0xA49B, 0xA49C, 0xA49D, 0xA49E, 0xA49F, 0xA4A0, 0xA541, /* 0x40 */ + 0xA542, 0xA543, 0xA544, 0xA545, 0xC2BC, 0xC2BD, 0xA546, 0xA547, /* 0x40 */ + 0xC2BE, 0xA548, 0xA549, 0xA54A, 0xC2BF, 0xA54B, 0xA54C, 0xA54D, /* 0x50 */ + 0xA54E, 0xA54F, 0xA550, 0xA551, 0xC2C0, 0xC2C1, 0xA552, 0xC2C2, /* 0x50 */ + 0xC2C3, 0xC2C4, 0xA553, 0xA554, 0xA555, 0xA556, 0xA557, 0xA558, /* 0x60 */ + 0xC2C5, 0xA559, 0xA55A, 0xA561, 0xA562, 0xA563, 0xA564, 0xA565, /* 0x60 */ + 0xA566, 0xA567, 0xA568, 0xA569, 0xA56A, 0xA56B, 0xA56C, 0xA56D, /* 0x70 */ + 0xA56E, 0xA56F, 0xA570, 0xA571, 0xA572, 0xC2C6, 0xA573, 0xA574, /* 0x70 */ + 0xA575, 0xA576, 0xA577, 0xA578, 0xC2C7, 0xA579, 0xA57A, 0xA581, /* 0x80 */ + 0xA582, 0xA583, 0xA584, 0xA585, 0xA586, 0xA587, 0xA588, 0xA589, /* 0x80 */ + 0xA58A, 0xA58B, 0xA58C, 0xA58D, 0xA58E, 0xA58F, 0xA590, 0xA591, /* 0x90 */ + 0xC2C8, 0xA592, 0xA593, 0xA594, 0xA595, 0xA596, 0xA597, 0xA598, /* 0x90 */ + 0xA599, 0xA59A, 0xA59B, 0xA59C, 0xA59D, 0xA59E, 0xA59F, 0xA5A0, /* 0xA0 */ + 0xA641, 0xA642, 0xA643, 0xA644, 0xA645, 0xA646, 0xA647, 0xA648, /* 0xA0 */ + 0xA649, 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F, 0xA650, /* 0xB0 */ + 0xA651, 0xA652, 0xA653, 0xA654, 0xC2C9, 0xC2CA, 0xA655, 0xA656, /* 0xB0 */ + 0xC2CB, 0xA657, 0xA658, 0xA659, 0xC2CC, 0xA65A, 0xA661, 0xA662, /* 0xC0 */ + 0xA663, 0xA664, 0xA665, 0xA666, 0xC2CD, 0xC2CE, 0xA667, 0xC2CF, /* 0xC0 */ + 0xA668, 0xC2D0, 0xA669, 0xC2D1, 0xA66A, 0xA66B, 0xA66C, 0xA66D, /* 0xD0 */ + 0xC2D2, 0xC2D3, 0xA66E, 0xA66F, 0xA670, 0xA671, 0xA672, 0xA673, /* 0xD0 */ + 0xC2D4, 0xA674, 0xA675, 0xA676, 0xA677, 0xA678, 0xA679, 0xA67A, /* 0xE0 */ + 0xA681, 0xA682, 0xA683, 0xA684, 0xC2D5, 0xA685, 0xA686, 0xA687, /* 0xE0 */ + 0xA688, 0xA689, 0xA68A, 0xA68B, 0xC2D6, 0xA68C, 0xA68D, 0xA68E, /* 0xF0 */ + 0xA68F, 0xA690, 0xA691, 0xA692, 0xA693, 0xA694, 0xA695, 0xA696 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA697, 0xA698, 0xA699, 0xA69A, 0xA69B, 0xA69C, 0xA69D, 0xA69E, /* 0x00 */ + 0xC2D7, 0xA69F, 0xA6A0, 0xA741, 0xA742, 0xA743, 0xA744, 0xA745, /* 0x00 */ + 0xC2D8, 0xA746, 0xA747, 0xA748, 0xC2D9, 0xA749, 0xA74A, 0xA74B, /* 0x10 */ + 0xC2DA, 0xA74C, 0xA74D, 0xA74E, 0xA74F, 0xA750, 0xA751, 0xA752, /* 0x10 */ + 0xC2DB, 0xC2DC, 0xA753, 0xA754, 0xA755, 0xA756, 0xA757, 0xA758, /* 0x20 */ + 0xA759, 0xA75A, 0xA761, 0xA762, 0xA763, 0xA764, 0xA765, 0xA766, /* 0x20 */ + 0xA767, 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, 0xA76D, 0xA76E, /* 0x30 */ + 0xA76F, 0xA770, 0xA771, 0xA772, 0xA773, 0xA774, 0xA775, 0xA776, /* 0x30 */ + 0xA777, 0xC2DD, 0xA778, 0xA779, 0xA77A, 0xA781, 0xA782, 0xA783, /* 0x40 */ + 0xC2DE, 0xC2DF, 0xA784, 0xA785, 0xC2E0, 0xA786, 0xA787, 0xA788, /* 0x40 */ + 0xC2E1, 0xA789, 0xA78A, 0xA78B, 0xA78C, 0xA78D, 0xA78E, 0xA78F, /* 0x50 */ + 0xC2E2, 0xC2E3, 0xA790, 0xA791, 0xA792, 0xC2E4, 0xA793, 0xA794, /* 0x50 */ + 0xA795, 0xA796, 0xA797, 0xA798, 0xC2E5, 0xA799, 0xA79A, 0xA79B, /* 0x60 */ + 0xA79C, 0xA79D, 0xA79E, 0xA79F, 0xA7A0, 0xA841, 0xA842, 0xA843, /* 0x60 */ + 0xA844, 0xA845, 0xA846, 0xA847, 0xA848, 0xA849, 0xA84A, 0xA84B, /* 0x70 */ + 0xC2E6, 0xC2E7, 0xA84C, 0xA84D, 0xA84E, 0xA84F, 0xA850, 0xA851, /* 0x70 */ + 0xA852, 0xA853, 0xA854, 0xA855, 0xA856, 0xA857, 0xA858, 0xA859, /* 0x80 */ + 0xA85A, 0xA861, 0xA862, 0xA863, 0xA864, 0xA865, 0xA866, 0xA867, /* 0x80 */ + 0xA868, 0xA869, 0xA86A, 0xA86B, 0xA86C, 0xA86D, 0xA86E, 0xA86F, /* 0x90 */ + 0xA870, 0xA871, 0xA872, 0xA873, 0xC2E8, 0xA874, 0xA875, 0xA876, /* 0x90 */ + 0xA877, 0xA878, 0xA879, 0xA87A, 0xA881, 0xA882, 0xA883, 0xA884, /* 0xA0 */ + 0xA885, 0xA886, 0xA887, 0xA888, 0xA889, 0xA88A, 0xA88B, 0xA88C, /* 0xA0 */ + 0xA88D, 0xA88E, 0xA88F, 0xA890, 0xA891, 0xA892, 0xA893, 0xA894, /* 0xB0 */ + 0xC2E9, 0xA895, 0xA896, 0xA897, 0xA898, 0xA899, 0xA89A, 0xA89B, /* 0xB0 */ + 0xA89C, 0xA89D, 0xA89E, 0xA89F, 0xA8A0, 0xA941, 0xA942, 0xA943, /* 0xC0 */ + 0xA944, 0xA945, 0xA946, 0xA947, 0xA948, 0xA949, 0xA94A, 0xA94B, /* 0xC0 */ + 0xA94C, 0xA94D, 0xA94E, 0xA94F, 0xC2EA, 0xA950, 0xA951, 0xA952, /* 0xD0 */ + 0xA953, 0xA954, 0xA955, 0xA956, 0xA957, 0xA958, 0xA959, 0xA95A, /* 0xD0 */ + 0xA961, 0xA962, 0xA963, 0xA964, 0xC2EB, 0xA965, 0xA966, 0xC2EC, /* 0xE0 */ + 0xA967, 0xC2ED, 0xA968, 0xA969, 0xA96A, 0xA96B, 0xA96C, 0xA96D, /* 0xE0 */ + 0xA96E, 0xA96F, 0xA970, 0xA971, 0xA972, 0xA973, 0xA974, 0xA975, /* 0xF0 */ + 0xA976, 0xA977, 0xA978, 0xA979, 0xA97A, 0xA981, 0xA982, 0xA983 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA984, 0xA985, 0xA986, 0xA987, 0xA988, 0xA989, 0xA98A, 0xA98B, /* 0x00 */ + 0xA98C, 0xA98D, 0xA98E, 0xA98F, 0xC2EE, 0xC2EF, 0xA990, 0xA991, /* 0x00 */ + 0xC2F0, 0xA992, 0xA993, 0xA994, 0xC2F1, 0xA995, 0xA996, 0xA997, /* 0x10 */ + 0xA998, 0xA999, 0xA99A, 0xA99B, 0xC2F2, 0xC2F3, 0xA99C, 0xA99D, /* 0x10 */ + 0xA99E, 0xC2F4, 0xC2F5, 0xA99F, 0xA9A0, 0xAA41, 0xAA42, 0xC2F6, /* 0x20 */ + 0xC2F7, 0xC2F8, 0xAA43, 0xAA44, 0xC2F9, 0xAA45, 0xC2FA, 0xAA46, /* 0x20 */ + 0xC2FB, 0xAA47, 0xAA48, 0xAA49, 0xAA4A, 0xAA4B, 0xAA4C, 0xAA4D, /* 0x30 */ + 0xC2FC, 0xC2FD, 0xAA4E, 0xC2FE, 0xC3A1, 0xC3A2, 0xC3A3, 0xAA4F, /* 0x30 */ + 0xAA50, 0xAA51, 0xAA52, 0xAA53, 0xC3A4, 0xC3A5, 0xAA54, 0xAA55, /* 0x40 */ + 0xC3A6, 0xAA56, 0xAA57, 0xAA58, 0xC3A7, 0xAA59, 0xAA5A, 0xAA61, /* 0x40 */ + 0xAA62, 0xAA63, 0xAA64, 0xAA65, 0xC3A8, 0xC3A9, 0xAA66, 0xC3AA, /* 0x50 */ + 0xC3AB, 0xC3AC, 0xAA67, 0xAA68, 0xAA69, 0xAA6A, 0xAA6B, 0xAA6C, /* 0x50 */ + 0xC3AD, 0xAA6D, 0xAA6E, 0xAA6F, 0xC3AE, 0xAA70, 0xC3AF, 0xAA71, /* 0x60 */ + 0xC3B0, 0xAA72, 0xAA73, 0xAA74, 0xAA75, 0xAA76, 0xAA77, 0xAA78, /* 0x60 */ + 0xC3B1, 0xAA79, 0xAA7A, 0xAA81, 0xAA82, 0xC3B2, 0xAA83, 0xAA84, /* 0x70 */ + 0xAA85, 0xAA86, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xAA8B, 0xAA8C, /* 0x70 */ + 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA92, 0xAA93, 0xAA94, /* 0x80 */ + 0xAA95, 0xAA96, 0xAA97, 0xAA98, 0xAA99, 0xAA9A, 0xAA9B, 0xAA9C, /* 0x80 */ + 0xAA9D, 0xAA9E, 0xAA9F, 0xAAA0, 0xAB41, 0xAB42, 0xAB43, 0xAB44, /* 0x90 */ + 0xC3B3, 0xC3B4, 0xAB45, 0xAB46, 0xC3B5, 0xAB47, 0xAB48, 0xAB49, /* 0x90 */ + 0xC3B6, 0xAB4A, 0xAB4B, 0xAB4C, 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, /* 0xA0 */ + 0xC3B7, 0xC3B8, 0xAB51, 0xC3B9, 0xC3BA, 0xC3BB, 0xAB52, 0xAB53, /* 0xA0 */ + 0xAB54, 0xAB55, 0xAB56, 0xAB57, 0xC3BC, 0xC3BD, 0xAB58, 0xAB59, /* 0xB0 */ + 0xC3BE, 0xAB5A, 0xAB61, 0xAB62, 0xC3BF, 0xAB63, 0xAB64, 0xAB65, /* 0xB0 */ + 0xAB66, 0xAB67, 0xAB68, 0xAB69, 0xC3C0, 0xC3C1, 0xAB6A, 0xC3C2, /* 0xC0 */ + 0xAB6B, 0xC3C3, 0xAB6C, 0xAB6D, 0xAB6E, 0xAB6F, 0xAB70, 0xAB71, /* 0xC0 */ + 0xC3C4, 0xAB72, 0xAB73, 0xAB74, 0xC3C5, 0xAB75, 0xAB76, 0xAB77, /* 0xD0 */ + 0xAB78, 0xAB79, 0xAB7A, 0xAB81, 0xAB82, 0xAB83, 0xAB84, 0xAB85, /* 0xD0 */ + 0xAB86, 0xAB87, 0xAB88, 0xAB89, 0xC3C6, 0xAB8A, 0xAB8B, 0xAB8C, /* 0xE0 */ + 0xAB8D, 0xAB8E, 0xAB8F, 0xAB90, 0xC3C7, 0xAB91, 0xAB92, 0xAB93, /* 0xE0 */ + 0xC3C8, 0xAB94, 0xAB95, 0xAB96, 0xAB97, 0xAB98, 0xAB99, 0xAB9A, /* 0xF0 */ + 0xAB9B, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, 0xAC41, 0xAC42 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAC43, 0xC3C9, 0xAC44, 0xAC45, 0xAC46, 0xAC47, 0xAC48, 0xAC49, /* 0x00 */ + 0xC3CA, 0xC3CB, 0xAC4A, 0xAC4B, 0xC3CC, 0xAC4C, 0xAC4D, 0xAC4E, /* 0x00 */ + 0xC3CD, 0xAC4F, 0xAC50, 0xAC51, 0xAC52, 0xAC53, 0xAC54, 0xAC55, /* 0x10 */ + 0xC3CE, 0xC3CF, 0xAC56, 0xC3D0, 0xAC57, 0xC3D1, 0xAC58, 0xAC59, /* 0x10 */ + 0xAC5A, 0xAC61, 0xAC62, 0xAC63, 0xC3D2, 0xAC64, 0xAC65, 0xAC66, /* 0x20 */ + 0xC3D3, 0xAC67, 0xAC68, 0xAC69, 0xC3D4, 0xAC6A, 0xAC6B, 0xAC6C, /* 0x20 */ + 0xAC6D, 0xAC6E, 0xAC6F, 0xAC70, 0xAC71, 0xAC72, 0xAC73, 0xAC74, /* 0x30 */ + 0xAC75, 0xC3D5, 0xAC76, 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC81, /* 0x30 */ + 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xAC87, 0xAC88, 0xAC89, /* 0x40 */ + 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, /* 0x40 */ + 0xAC92, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, /* 0x50 */ + 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xC3D6, 0xAC9E, 0xAC9F, 0xACA0, /* 0x50 */ + 0xC3D7, 0xAD41, 0xAD42, 0xAD43, 0xC3D8, 0xAD44, 0xAD45, 0xAD46, /* 0x60 */ + 0xAD47, 0xAD48, 0xAD49, 0xAD4A, 0xC3D9, 0xC3DA, 0xAD4B, 0xC3DB, /* 0x60 */ + 0xAD4C, 0xC3DC, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD50, 0xAD51, 0xAD52, /* 0x70 */ + 0xC3DD, 0xAD53, 0xAD54, 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xAD59, /* 0x70 */ + 0xAD5A, 0xAD61, 0xAD62, 0xAD63, 0xAD64, 0xAD65, 0xAD66, 0xAD67, /* 0x80 */ + 0xC3DE, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, 0xAD6D, 0xAD6E, /* 0x80 */ + 0xAD6F, 0xAD70, 0xAD71, 0xAD72, 0xC3DF, 0xC3E0, 0xAD73, 0xAD74, /* 0x90 */ + 0xC3E1, 0xAD75, 0xAD76, 0xAD77, 0xC3E2, 0xAD78, 0xAD79, 0xAD7A, /* 0x90 */ + 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xC3E3, 0xC3E4, 0xAD85, 0xC3E5, /* 0xA0 */ + 0xAD86, 0xC3E6, 0xAD87, 0xAD88, 0xAD89, 0xAD8A, 0xAD8B, 0xAD8C, /* 0xA0 */ + 0xC3E7, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xAD93, /* 0xB0 */ + 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, /* 0xB0 */ + 0xAD9C, 0xAD9D, 0xAD9E, 0xAD9F, 0xC3E8, 0xADA0, 0xAE41, 0xAE42, /* 0xC0 */ + 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xC3E9, 0xAE47, 0xAE48, 0xAE49, /* 0xC0 */ + 0xC3EA, 0xAE4A, 0xAE4B, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, /* 0xD0 */ + 0xAE51, 0xAE52, 0xAE53, 0xAE54, 0xAE55, 0xAE56, 0xAE57, 0xAE58, /* 0xD0 */ + 0xAE59, 0xAE5A, 0xAE61, 0xAE62, 0xAE63, 0xAE64, 0xAE65, 0xAE66, /* 0xE0 */ + 0xC3EB, 0xAE67, 0xAE68, 0xAE69, 0xC3EC, 0xAE6A, 0xAE6B, 0xAE6C, /* 0xE0 */ + 0xC3ED, 0xAE6D, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xAE72, 0xAE73, /* 0xF0 */ + 0xC3EE, 0xC3EF, 0xAE74, 0xC3F0, 0xAE75, 0xC3F1, 0xAE76, 0xAE77 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAE78, 0xAE79, 0xAE7A, 0xAE81, 0xC3F2, 0xAE82, 0xAE83, 0xAE84, /* 0x00 */ + 0xC3F3, 0xAE85, 0xAE86, 0xAE87, 0xC3F4, 0xAE88, 0xAE89, 0xAE8A, /* 0x00 */ + 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xC3F5, 0xAE8F, 0xAE90, 0xAE91, /* 0x10 */ + 0xAE92, 0xC3F6, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, 0xAE98, /* 0x10 */ + 0xC3F7, 0xC3F8, 0xAE99, 0xAE9A, 0xC3F9, 0xAE9B, 0xAE9C, 0xAE9D, /* 0x20 */ + 0xC3FA, 0xAE9E, 0xAE9F, 0xAEA0, 0xAF41, 0xAF42, 0xAF43, 0xAF44, /* 0x20 */ + 0xC3FB, 0xC3FC, 0xAF45, 0xC3FD, 0xAF46, 0xC3FE, 0xAF47, 0xAF48, /* 0x30 */ + 0xAF49, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF50, /* 0x30 */ + 0xAF51, 0xAF52, 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, /* 0x40 */ + 0xAF59, 0xAF5A, 0xAF61, 0xAF62, 0xAF63, 0xAF64, 0xAF65, 0xAF66, /* 0x40 */ + 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E, /* 0x50 */ + 0xC4A1, 0xC4A2, 0xAF6F, 0xAF70, 0xC4A3, 0xAF71, 0xAF72, 0xC4A4, /* 0x50 */ + 0xC4A5, 0xC4A6, 0xAF73, 0xAF74, 0xAF75, 0xAF76, 0xAF77, 0xAF78, /* 0x60 */ + 0xC4A7, 0xC4A8, 0xAF79, 0xC4A9, 0xAF7A, 0xC4AA, 0xAF81, 0xAF82, /* 0x60 */ + 0xAF83, 0xAF84, 0xAF85, 0xAF86, 0xC4AB, 0xC4AC, 0xAF87, 0xAF88, /* 0x70 */ + 0xC4AD, 0xAF89, 0xAF8A, 0xAF8B, 0xC4AE, 0xAF8C, 0xAF8D, 0xAF8E, /* 0x70 */ + 0xAF8F, 0xAF90, 0xAF91, 0xAF92, 0xC4AF, 0xC4B0, 0xAF93, 0xC4B1, /* 0x80 */ + 0xAF94, 0xC4B2, 0xAF95, 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, /* 0x80 */ + 0xC4B3, 0xC4B4, 0xAF9B, 0xAF9C, 0xC4B5, 0xAF9D, 0xAF9E, 0xAF9F, /* 0x90 */ + 0xC4B6, 0xAFA0, 0xB041, 0xB042, 0xB043, 0xB044, 0xB045, 0xB046, /* 0x90 */ + 0xC4B7, 0xC4B8, 0xB047, 0xC4B9, 0xC4BA, 0xC4BB, 0xB048, 0xB049, /* 0xA0 */ + 0xB04A, 0xB04B, 0xB04C, 0xB04D, 0xC4BC, 0xC4BD, 0xB04E, 0xB04F, /* 0xA0 */ + 0xB050, 0xB051, 0xB052, 0xB053, 0xB054, 0xB055, 0xB056, 0xB057, /* 0xB0 */ + 0xB058, 0xB059, 0xB05A, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, /* 0xB0 */ + 0xB066, 0xC4BE, 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, /* 0xC0 */ + 0xB06D, 0xB06E, 0xB06F, 0xB070, 0xB071, 0xB072, 0xB073, 0xB074, /* 0xC0 */ + 0xB075, 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB081, 0xB082, /* 0xD0 */ + 0xB083, 0xB084, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, /* 0xD0 */ + 0xB08B, 0xB08C, 0xB08D, 0xB08E, 0xC4BF, 0xC4C0, 0xB08F, 0xB090, /* 0xE0 */ + 0xC4C1, 0xB091, 0xB092, 0xC4C2, 0xC4C3, 0xB093, 0xB094, 0xB095, /* 0xE0 */ + 0xB096, 0xB097, 0xB098, 0xB099, 0xC4C4, 0xC4C5, 0xB09A, 0xC4C6, /* 0xF0 */ + 0xC4C7, 0xC4C8, 0xB09B, 0xB09C, 0xB09D, 0xB09E, 0xB09F, 0xB0A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC4C9, 0xC4CA, 0xB141, 0xB142, 0xC4CB, 0xB143, 0xB144, 0xB145, /* 0x00 */ + 0xC4CC, 0xB146, 0xB147, 0xB148, 0xB149, 0xB14A, 0xB14B, 0xB14C, /* 0x00 */ + 0xC4CD, 0xC4CE, 0xB14D, 0xC4CF, 0xB14E, 0xC4D0, 0xB14F, 0xB150, /* 0x10 */ + 0xB151, 0xB152, 0xB153, 0xB154, 0xC4D1, 0xB155, 0xB156, 0xB157, /* 0x10 */ + 0xC4D2, 0xB158, 0xB159, 0xB15A, 0xC4D3, 0xB161, 0xB162, 0xB163, /* 0x20 */ + 0xB164, 0xB165, 0xB166, 0xB167, 0xC4D4, 0xC4D5, 0xB168, 0xC4D6, /* 0x20 */ + 0xC4D7, 0xC4D8, 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, /* 0x30 */ + 0xC4D9, 0xB16F, 0xB170, 0xB171, 0xB172, 0xB173, 0xB174, 0xB175, /* 0x30 */ + 0xB176, 0xB177, 0xB178, 0xB179, 0xB17A, 0xB181, 0xB182, 0xB183, /* 0x40 */ + 0xB184, 0xB185, 0xB186, 0xB187, 0xB188, 0xB189, 0xB18A, 0xB18B, /* 0x40 */ + 0xB18C, 0xB18D, 0xB18E, 0xB18F, 0xC4DA, 0xC4DB, 0xB190, 0xB191, /* 0x50 */ + 0xC4DC, 0xB192, 0xB193, 0xB194, 0xC4DD, 0xB195, 0xB196, 0xB197, /* 0x50 */ + 0xB198, 0xB199, 0xB19A, 0xB19B, 0xC4DE, 0xC4DF, 0xB19C, 0xC4E0, /* 0x60 */ + 0xB19D, 0xC4E1, 0xB19E, 0xB19F, 0xB1A0, 0xB241, 0xB242, 0xB243, /* 0x60 */ + 0xC4E2, 0xC4E3, 0xB244, 0xB245, 0xC4E4, 0xB246, 0xB247, 0xB248, /* 0x70 */ + 0xC4E5, 0xB249, 0xB24A, 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, /* 0x70 */ + 0xC4E6, 0xB250, 0xB251, 0xB252, 0xB253, 0xC4E7, 0xB254, 0xB255, /* 0x80 */ + 0xB256, 0xB257, 0xB258, 0xB259, 0xC4E8, 0xB25A, 0xB261, 0xB262, /* 0x80 */ + 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB268, 0xB269, 0xB26A, /* 0x90 */ + 0xB26B, 0xB26C, 0xB26D, 0xB26E, 0xB26F, 0xB270, 0xB271, 0xB272, /* 0x90 */ + 0xB273, 0xC4E9, 0xB274, 0xB275, 0xB276, 0xB277, 0xB278, 0xB279, /* 0xA0 */ + 0xC4EA, 0xB27A, 0xB281, 0xB282, 0xB283, 0xB284, 0xB285, 0xB286, /* 0xA0 */ + 0xC4EB, 0xB287, 0xB288, 0xB289, 0xB28A, 0xB28B, 0xB28C, 0xB28D, /* 0xB0 */ + 0xB28E, 0xB28F, 0xB290, 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, /* 0xB0 */ + 0xB296, 0xB297, 0xB298, 0xB299, 0xC4EC, 0xB29A, 0xB29B, 0xB29C, /* 0xC0 */ + 0xB29D, 0xB29E, 0xB29F, 0xB2A0, 0xB341, 0xB342, 0xB343, 0xB344, /* 0xC0 */ + 0xB345, 0xB346, 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, /* 0xD0 */ + 0xB34D, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0xB354, /* 0xD0 */ + 0xC4ED, 0xC4EE, 0xB355, 0xB356, 0xC4EF, 0xB357, 0xB358, 0xB359, /* 0xE0 */ + 0xC4F0, 0xB35A, 0xB361, 0xB362, 0xB363, 0xB364, 0xB365, 0xB366, /* 0xE0 */ + 0xC4F1, 0xC4F2, 0xB367, 0xC4F3, 0xB368, 0xC4F4, 0xB369, 0xB36A, /* 0xF0 */ + 0xB36B, 0xB36C, 0xB36D, 0xB36E, 0xC4F5, 0xB36F, 0xB370, 0xB371 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC4F6, 0xB372, 0xB373, 0xB374, 0xC4F7, 0xB375, 0xB376, 0xB377, /* 0x00 */ + 0xB378, 0xB379, 0xB37A, 0xB381, 0xB382, 0xB383, 0xB384, 0xB385, /* 0x00 */ + 0xB386, 0xC4F8, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38C, /* 0x10 */ + 0xC4F9, 0xB38D, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB392, 0xB393, /* 0x10 */ + 0xB394, 0xB395, 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, /* 0x20 */ + 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xC4FA, 0xB441, 0xB442, /* 0x20 */ + 0xB443, 0xB444, 0xB445, 0xB446, 0xC4FB, 0xC4FC, 0xB447, 0xB448, /* 0x30 */ + 0xC4FD, 0xB449, 0xB44A, 0xB44B, 0xC4FE, 0xB44C, 0xB44D, 0xB44E, /* 0x30 */ + 0xB44F, 0xB450, 0xB451, 0xB452, 0xC5A1, 0xC5A2, 0xB453, 0xC5A3, /* 0x40 */ + 0xB454, 0xC5A4, 0xB455, 0xB456, 0xB457, 0xB458, 0xB459, 0xB45A, /* 0x40 */ + 0xC5A5, 0xB461, 0xB462, 0xB463, 0xC5A6, 0xB464, 0xB465, 0xB466, /* 0x50 */ + 0xC5A7, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46C, 0xB46D, /* 0x50 */ + 0xC5A8, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB472, 0xB473, 0xB474, /* 0x60 */ + 0xB475, 0xB476, 0xB477, 0xB478, 0xC5A9, 0xC5AA, 0xB479, 0xB47A, /* 0x60 */ + 0xC5AB, 0xB481, 0xB482, 0xB483, 0xC5AC, 0xB484, 0xB485, 0xB486, /* 0x70 */ + 0xB487, 0xB488, 0xB489, 0xB48A, 0xC5AD, 0xC5AE, 0xB48B, 0xB48C, /* 0x70 */ + 0xB48D, 0xC5AF, 0xB48E, 0xB48F, 0xB490, 0xB491, 0xB492, 0xB493, /* 0x80 */ + 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, 0xB49A, 0xB49B, /* 0x80 */ + 0xB49C, 0xB49D, 0xB49E, 0xB49F, 0xB4A0, 0xB541, 0xB542, 0xB543, /* 0x90 */ + 0xB544, 0xB545, 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54B, /* 0x90 */ + 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xC5B0, 0xC5B1, 0xB550, 0xB551, /* 0xA0 */ + 0xC5B2, 0xB552, 0xB553, 0xB554, 0xC5B3, 0xB555, 0xB556, 0xB557, /* 0xA0 */ + 0xB558, 0xB559, 0xB55A, 0xB561, 0xC5B4, 0xC5B5, 0xB562, 0xC5B6, /* 0xB0 */ + 0xB563, 0xC5B7, 0xB564, 0xB565, 0xB566, 0xB567, 0xB568, 0xB569, /* 0xB0 */ + 0xC5B8, 0xC5B9, 0xB56A, 0xB56B, 0xC5BA, 0xB56C, 0xB56D, 0xB56E, /* 0xC0 */ + 0xC5BB, 0xC5BC, 0xB56F, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, /* 0xC0 */ + 0xC5BD, 0xC5BE, 0xB575, 0xC5BF, 0xC5C0, 0xC5C1, 0xB576, 0xB577, /* 0xD0 */ + 0xB578, 0xB579, 0xB57A, 0xB581, 0xC5C2, 0xC5C3, 0xB582, 0xB583, /* 0xD0 */ + 0xC5C4, 0xB584, 0xB585, 0xB586, 0xC5C5, 0xB587, 0xB588, 0xB589, /* 0xE0 */ + 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xC5C6, 0xC5C7, 0xB58E, 0xC5C8, /* 0xE0 */ + 0xC5C9, 0xC5CA, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, 0xB594, /* 0xF0 */ + 0xC5CB, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, 0xB59A, 0xB59B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0xB5A0, 0xB641, 0xB642, 0xB643, /* 0x00 */ + 0xB644, 0xB645, 0xB646, 0xB647, 0xB648, 0xC5CC, 0xB649, 0xB64A, /* 0x00 */ + 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, /* 0x10 */ + 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, /* 0x10 */ + 0xB661, 0xB662, 0xB663, 0xB664, 0xB665, 0xB666, 0xB667, 0xB668, /* 0x20 */ + 0xB669, 0xB66A, 0xB66B, 0xB66C, 0xB66D, 0xB66E, 0xB66F, 0xB670, /* 0x20 */ + 0xC5CD, 0xC5CE, 0xB671, 0xB672, 0xC5CF, 0xB673, 0xB674, 0xB675, /* 0x30 */ + 0xC5D0, 0xB676, 0xC5D1, 0xB677, 0xB678, 0xB679, 0xB67A, 0xB681, /* 0x30 */ + 0xC5D2, 0xC5D3, 0xB682, 0xC5D4, 0xC5D5, 0xC5D6, 0xB683, 0xB684, /* 0x40 */ + 0xB685, 0xB686, 0xB687, 0xB688, 0xC5D7, 0xC5D8, 0xB689, 0xB68A, /* 0x40 */ + 0xC5D9, 0xB68B, 0xB68C, 0xB68D, 0xC5DA, 0xB68E, 0xB68F, 0xB690, /* 0x50 */ + 0xB691, 0xB692, 0xB693, 0xB694, 0xC5DB, 0xC5DC, 0xB695, 0xC5DD, /* 0x50 */ + 0xB696, 0xC5DE, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69C, /* 0x60 */ + 0xC5DF, 0xB69D, 0xB69E, 0xB69F, 0xC5E0, 0xB6A0, 0xB741, 0xB742, /* 0x60 */ + 0xB743, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, 0xB749, 0xB74A, /* 0x70 */ + 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xC5E1, 0xB74F, 0xB750, 0xB751, /* 0x70 */ + 0xB752, 0xB753, 0xB754, 0xB755, 0xC5E2, 0xB756, 0xB757, 0xB758, /* 0x80 */ + 0xC5E3, 0xB759, 0xB75A, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, /* 0x80 */ + 0xB766, 0xB767, 0xB768, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, /* 0x90 */ + 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, /* 0x90 */ + 0xC5E4, 0xC5E5, 0xB776, 0xB777, 0xC5E6, 0xB778, 0xB779, 0xB77A, /* 0xA0 */ + 0xC5E7, 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, 0xB787, /* 0xA0 */ + 0xC5E8, 0xC5E9, 0xB788, 0xC5EA, 0xB789, 0xC5EB, 0xB78A, 0xB78B, /* 0xB0 */ + 0xB78C, 0xB78D, 0xC5EC, 0xB78E, 0xC5ED, 0xB78F, 0xB790, 0xB791, /* 0xB0 */ + 0xC5EE, 0xB792, 0xB793, 0xB794, 0xB795, 0xB796, 0xB797, 0xB798, /* 0xC0 */ + 0xB799, 0xB79A, 0xB79B, 0xB79C, 0xB79D, 0xB79E, 0xB79F, 0xB7A0, /* 0xC0 */ + 0xB841, 0xB842, 0xB843, 0xB844, 0xB845, 0xB846, 0xB847, 0xB848, /* 0xD0 */ + 0xC5EF, 0xB849, 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F, /* 0xD0 */ + 0xB850, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, 0xB856, 0xB857, /* 0xE0 */ + 0xB858, 0xB859, 0xB85A, 0xB861, 0xB862, 0xB863, 0xB864, 0xB865, /* 0xE0 */ + 0xB866, 0xB867, 0xB868, 0xB869, 0xC5F0, 0xB86A, 0xB86B, 0xB86C, /* 0xF0 */ + 0xC5F1, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xB871, 0xB872, 0xB873 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB874, 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, 0xB87A, 0xC5F2, /* 0x00 */ + 0xB881, 0xC5F3, 0xB882, 0xB883, 0xB884, 0xB885, 0xB886, 0xB887, /* 0x00 */ + 0xC5F4, 0xB888, 0xB889, 0xB88A, 0xB88B, 0xB88C, 0xB88D, 0xB88E, /* 0x10 */ + 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0xB894, 0xB895, 0xB896, /* 0x10 */ + 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, 0xB89D, 0xB89E, /* 0x20 */ + 0xB89F, 0xB8A0, 0xB941, 0xB942, 0xC5F5, 0xC5F6, 0xB943, 0xB944, /* 0x20 */ + 0xC5F7, 0xB945, 0xB946, 0xB947, 0xC5F8, 0xB948, 0xB949, 0xB94A, /* 0x30 */ + 0xB94B, 0xB94C, 0xB94D, 0xB94E, 0xC5F9, 0xC5FA, 0xB94F, 0xC5FB, /* 0x30 */ + 0xB950, 0xC5FC, 0xB951, 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, /* 0x40 */ + 0xC5FD, 0xB957, 0xB958, 0xB959, 0xB95A, 0xB961, 0xB962, 0xB963, /* 0x40 */ + 0xB964, 0xB965, 0xB966, 0xB967, 0xB968, 0xB969, 0xB96A, 0xB96B, /* 0x50 */ + 0xB96C, 0xB96D, 0xB96E, 0xB96F, 0xC5FE, 0xB970, 0xB971, 0xB972, /* 0x50 */ + 0xB973, 0xB974, 0xB975, 0xB976, 0xC6A1, 0xB977, 0xB978, 0xB979, /* 0x60 */ + 0xB97A, 0xB981, 0xB982, 0xB983, 0xB984, 0xB985, 0xB986, 0xB987, /* 0x60 */ + 0xB988, 0xB989, 0xB98A, 0xB98B, 0xB98C, 0xB98D, 0xB98E, 0xB98F, /* 0x70 */ + 0xB990, 0xB991, 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, 0xB997, /* 0x70 */ + 0xC6A2, 0xC6A3, 0xB998, 0xB999, 0xC6A4, 0xB99A, 0xB99B, 0xB99C, /* 0x80 */ + 0xC6A5, 0xB99D, 0xB99E, 0xB99F, 0xB9A0, 0xBA41, 0xBA42, 0xBA43, /* 0x80 */ + 0xC6A6, 0xC6A7, 0xBA44, 0xBA45, 0xBA46, 0xC6A8, 0xBA47, 0xBA48, /* 0x90 */ + 0xBA49, 0xBA4A, 0xBA4B, 0xBA4C, 0xC6A9, 0xBA4D, 0xBA4E, 0xBA4F, /* 0x90 */ + 0xC6AA, 0xBA50, 0xBA51, 0xBA52, 0xC6AB, 0xBA53, 0xBA54, 0xBA55, /* 0xA0 */ + 0xBA56, 0xBA57, 0xBA58, 0xBA59, 0xC6AC, 0xBA5A, 0xBA61, 0xBA62, /* 0xA0 */ + 0xBA63, 0xC6AD, 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xBA68, 0xBA69, /* 0xB0 */ + 0xC6AE, 0xC6AF, 0xBA6A, 0xBA6B, 0xC6B0, 0xBA6C, 0xBA6D, 0xC6B1, /* 0xB0 */ + 0xC6B2, 0xBA6E, 0xC6B3, 0xBA6F, 0xBA70, 0xBA71, 0xBA72, 0xBA73, /* 0xC0 */ + 0xC6B4, 0xC6B5, 0xBA74, 0xC6B6, 0xBA75, 0xBA76, 0xBA77, 0xBA78, /* 0xC0 */ + 0xBA79, 0xBA7A, 0xBA81, 0xBA82, 0xC6B7, 0xBA83, 0xBA84, 0xBA85, /* 0xD0 */ + 0xC6B8, 0xBA86, 0xBA87, 0xBA88, 0xC6B9, 0xBA89, 0xBA8A, 0xBA8B, /* 0xD0 */ + 0xBA8C, 0xBA8D, 0xBA8E, 0xBA8F, 0xC6BA, 0xC6BB, 0xBA90, 0xBA91, /* 0xE0 */ + 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, /* 0xE0 */ + 0xC6BC, 0xC6BD, 0xBA9A, 0xBA9B, 0xC6BE, 0xBA9C, 0xBA9D, 0xBA9E, /* 0xF0 */ + 0xC6BF, 0xBA9F, 0xBAA0, 0xBB41, 0xBB42, 0xBB43, 0xBB44, 0xBB45 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6C0, 0xC6C1, 0xBB46, 0xC6C2, 0xBB47, 0xC6C3, 0xBB48, 0xBB49, /* 0x00 */ + 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4D, 0xC6C4, 0xC6C5, 0xC6C6, 0xBB4E, /* 0x00 */ + 0xC6C7, 0xBB4F, 0xBB50, 0xBB51, 0xC6C8, 0xBB52, 0xC6C9, 0xBB53, /* 0x10 */ + 0xBB54, 0xBB55, 0xBB56, 0xBB57, 0xC6CA, 0xC6CB, 0xBB58, 0xC6CC, /* 0x10 */ + 0xC6CD, 0xC6CE, 0xBB59, 0xBB5A, 0xBB61, 0xC6CF, 0xBB62, 0xBB63, /* 0x20 */ + 0xC6D0, 0xC6D1, 0xBB64, 0xBB65, 0xC6D2, 0xBB66, 0xBB67, 0xBB68, /* 0x20 */ + 0xC6D3, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6C, 0xBB6D, 0xBB6E, 0xBB6F, /* 0x30 */ + 0xC6D4, 0xC6D5, 0xBB70, 0xC6D6, 0xC6D7, 0xC6D8, 0xBB71, 0xBB72, /* 0x30 */ + 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xC6D9, 0xC6DA, 0xBB77, 0xBB78, /* 0x40 */ + 0xBB79, 0xBB7A, 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, /* 0x40 */ + 0xBB87, 0xBB88, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8C, 0xBB8D, 0xBB8E, /* 0x50 */ + 0xBB8F, 0xBB90, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, /* 0x50 */ + 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, 0xBB9E, /* 0x60 */ + 0xBB9F, 0xBBA0, 0xBC41, 0xBC42, 0xBC43, 0xBC44, 0xBC45, 0xBC46, /* 0x60 */ + 0xBC47, 0xBC48, 0xBC49, 0xBC4A, 0xBC4B, 0xBC4C, 0xBC4D, 0xBC4E, /* 0x70 */ + 0xBC4F, 0xBC50, 0xBC51, 0xBC52, 0xC6DB, 0xC6DC, 0xBC53, 0xBC54, /* 0x70 */ + 0xC6DD, 0xBC55, 0xBC56, 0xBC57, 0xC6DE, 0xBC58, 0xBC59, 0xBC5A, /* 0x80 */ + 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xC6DF, 0xC6E0, 0xBC65, 0xC6E1, /* 0x80 */ + 0xC6E2, 0xC6E3, 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, /* 0x90 */ + 0xC6E4, 0xC6E5, 0xBC6C, 0xBC6D, 0xC6E6, 0xBC6E, 0xBC6F, 0xBC70, /* 0x90 */ + 0xC6E7, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77, /* 0xA0 */ + 0xC6E8, 0xC6E9, 0xBC78, 0xC6EA, 0xBC79, 0xC6EB, 0xBC7A, 0xBC81, /* 0xA0 */ + 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xC6EC, 0xBC86, 0xBC87, 0xBC88, /* 0xB0 */ + 0xC6ED, 0xBC89, 0xBC8A, 0xBC8B, 0xC6EE, 0xBC8C, 0xBC8D, 0xBC8E, /* 0xB0 */ + 0xBC8F, 0xBC90, 0xBC91, 0xBC92, 0xC6EF, 0xC6F0, 0xBC93, 0xBC94, /* 0xC0 */ + 0xC6F1, 0xC6F2, 0xBC95, 0xBC96, 0xBC97, 0xBC98, 0xBC99, 0xBC9A, /* 0xC0 */ + 0xC6F3, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA0, 0xBD41, /* 0xD0 */ + 0xC6F4, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, /* 0xD0 */ + 0xBD49, 0xC6F5, 0xBD4A, 0xC6F6, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, /* 0xE0 */ + 0xBD4F, 0xBD50, 0xBD51, 0xBD52, 0xC6F7, 0xC6F8, 0xBD53, 0xBD54, /* 0xE0 */ + 0xC6F9, 0xBD55, 0xBD56, 0xBD57, 0xC6FA, 0xBD58, 0xBD59, 0xBD5A, /* 0xF0 */ + 0xBD61, 0xBD62, 0xBD63, 0xBD64, 0xC6FB, 0xC6FC, 0xBD65, 0xC6FD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBD66, 0xC6FE, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, /* 0x00 */ + 0xC7A1, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, 0xBD73, /* 0x00 */ + 0xBD74, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD81, /* 0x10 */ + 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xC7A2, 0xBD87, 0xBD88, /* 0x10 */ + 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD90, /* 0x20 */ + 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, 0xBD98, /* 0x20 */ + 0xBD99, 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, /* 0x30 */ + 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, /* 0x30 */ + 0xC7A3, 0xBE49, 0xBE4A, 0xBE4B, 0xC7A4, 0xBE4C, 0xBE4D, 0xBE4E, /* 0x40 */ + 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, 0xBE54, 0xBE55, 0xBE56, /* 0x40 */ + 0xBE57, 0xBE58, 0xBE59, 0xBE5A, 0xBE61, 0xBE62, 0xBE63, 0xBE64, /* 0x50 */ + 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xC7A5, 0xBE69, 0xBE6A, 0xBE6B, /* 0x50 */ + 0xC7A6, 0xBE6C, 0xBE6D, 0xBE6E, 0xC7A7, 0xBE6F, 0xBE70, 0xBE71, /* 0x60 */ + 0xBE72, 0xBE73, 0xBE74, 0xBE75, 0xBE76, 0xC7A8, 0xBE77, 0xC7A9, /* 0x60 */ + 0xBE78, 0xBE79, 0xBE7A, 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, /* 0x70 */ + 0xC7AA, 0xC7AB, 0xBE86, 0xBE87, 0xC7AC, 0xBE88, 0xBE89, 0xC7AD, /* 0x70 */ + 0xC7AE, 0xBE8A, 0xC7AF, 0xBE8B, 0xBE8C, 0xBE8D, 0xBE8E, 0xBE8F, /* 0x80 */ + 0xC7B0, 0xC7B1, 0xBE90, 0xC7B2, 0xBE91, 0xC7B3, 0xBE92, 0xBE93, /* 0x80 */ + 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0xC7B4, 0xBE98, 0xBE99, 0xBE9A, /* 0x90 */ + 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, 0xBEA0, 0xBF41, 0xBF42, /* 0x90 */ + 0xBF43, 0xBF44, 0xBF45, 0xBF46, 0xBF47, 0xBF48, 0xBF49, 0xBF4A, /* 0xA0 */ + 0xBF4B, 0xC7B5, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, 0xBF51, /* 0xA0 */ + 0xBF52, 0xBF53, 0xBF54, 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, /* 0xB0 */ + 0xBF5A, 0xBF61, 0xBF62, 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, /* 0xB0 */ + 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F, /* 0xC0 */ + 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xC7B6, 0xBF74, 0xBF75, 0xBF76, /* 0xC0 */ + 0xC7B7, 0xBF77, 0xBF78, 0xBF79, 0xC7B8, 0xBF7A, 0xBF81, 0xBF82, /* 0xD0 */ + 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xC7B9, 0xBF87, 0xBF88, 0xC7BA, /* 0xD0 */ + 0xBF89, 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, /* 0xE0 */ + 0xC7BB, 0xBF91, 0xBF92, 0xBF93, 0xC7BC, 0xBF94, 0xBF95, 0xBF96, /* 0xE0 */ + 0xC7BD, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D, /* 0xF0 */ + 0xC7BE, 0xBF9E, 0xBF9F, 0xC7BF, 0xBFA0, 0xC7C0, 0xC041, 0xC042 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC043, 0xC044, 0xC045, 0xC046, 0xC7C1, 0xC047, 0xC048, 0xC049, /* 0x00 */ + 0xC7C2, 0xC04A, 0xC04B, 0xC04C, 0xC7C3, 0xC04D, 0xC04E, 0xC04F, /* 0x00 */ + 0xC050, 0xC051, 0xC052, 0xC053, 0xC7C4, 0xC7C5, 0xC054, 0xC7C6, /* 0x10 */ + 0xC055, 0xC056, 0xC057, 0xC058, 0xC059, 0xC05A, 0xC061, 0xC062, /* 0x10 */ + 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, 0xC069, 0xC06A, /* 0x20 */ + 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, /* 0x20 */ + 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A, /* 0x30 */ + 0xC081, 0xC082, 0xC083, 0xC084, 0xC7C7, 0xC7C8, 0xC085, 0xC086, /* 0x30 */ + 0xC7C9, 0xC087, 0xC088, 0xC089, 0xC7CA, 0xC08A, 0xC08B, 0xC08C, /* 0x40 */ + 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC7CB, 0xC7CC, 0xC091, 0xC7CD, /* 0x40 */ + 0xC092, 0xC7CE, 0xC093, 0xC094, 0xC095, 0xC096, 0xC097, 0xC098, /* 0x50 */ + 0xC7CF, 0xC7D0, 0xC099, 0xC09A, 0xC7D1, 0xC09B, 0xC09C, 0xC09D, /* 0x50 */ + 0xC7D2, 0xC09E, 0xC09F, 0xC0A0, 0xC141, 0xC7D3, 0xC142, 0xC143, /* 0x60 */ + 0xC7D4, 0xC7D5, 0xC144, 0xC7D6, 0xC145, 0xC7D7, 0xC146, 0xC147, /* 0x60 */ + 0xC148, 0xC149, 0xC14A, 0xC14B, 0xC7D8, 0xC7D9, 0xC14C, 0xC14D, /* 0x70 */ + 0xC7DA, 0xC14E, 0xC14F, 0xC150, 0xC7DB, 0xC151, 0xC152, 0xC153, /* 0x70 */ + 0xC154, 0xC155, 0xC156, 0xC157, 0xC7DC, 0xC7DD, 0xC158, 0xC7DE, /* 0x80 */ + 0xC7DF, 0xC7E0, 0xC159, 0xC15A, 0xC161, 0xC162, 0xC163, 0xC164, /* 0x80 */ + 0xC7E1, 0xC165, 0xC166, 0xC167, 0xC168, 0xC169, 0xC16A, 0xC16B, /* 0x90 */ + 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC170, 0xC171, 0xC172, 0xC173, /* 0x90 */ + 0xC174, 0xC175, 0xC176, 0xC177, 0xC178, 0xC7E2, 0xC179, 0xC17A, /* 0xA0 */ + 0xC181, 0xC182, 0xC183, 0xC184, 0xC185, 0xC186, 0xC187, 0xC188, /* 0xA0 */ + 0xC189, 0xC18A, 0xC18B, 0xC18C, 0xC18D, 0xC18E, 0xC18F, 0xC190, /* 0xB0 */ + 0xC191, 0xC192, 0xC193, 0xC194, 0xC195, 0xC196, 0xC197, 0xC198, /* 0xB0 */ + 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, 0xC19E, 0xC19F, 0xC1A0, /* 0xC0 */ + 0xC7E3, 0xC7E4, 0xC241, 0xC242, 0xC7E5, 0xC243, 0xC244, 0xC245, /* 0xC0 */ + 0xC7E6, 0xC246, 0xC7E7, 0xC247, 0xC248, 0xC249, 0xC24A, 0xC24B, /* 0xD0 */ + 0xC7E8, 0xC7E9, 0xC24C, 0xC7EA, 0xC24D, 0xC7EB, 0xC24E, 0xC24F, /* 0xD0 */ + 0xC250, 0xC251, 0xC252, 0xC253, 0xC7EC, 0xC7ED, 0xC254, 0xC255, /* 0xE0 */ + 0xC7EE, 0xC256, 0xC257, 0xC258, 0xC7EF, 0xC259, 0xC25A, 0xC261, /* 0xE0 */ + 0xC262, 0xC263, 0xC264, 0xC265, 0xC7F0, 0xC7F1, 0xC266, 0xC7F2, /* 0xF0 */ + 0xC267, 0xC7F3, 0xC268, 0xC269, 0xC26A, 0xC26B, 0xC26C, 0xC26D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7F4, 0xC7F5, 0xC26E, 0xC26F, 0xC7F6, 0xC270, 0xC271, 0xC272, /* 0x00 */ + 0xC7F7, 0xC273, 0xC274, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, /* 0x00 */ + 0xC7F8, 0xC7F9, 0xC27A, 0xC7FA, 0xC7FB, 0xC7FC, 0xC281, 0xC282, /* 0x10 */ + 0xC283, 0xC284, 0xC285, 0xC286, 0xC7FD, 0xC287, 0xC288, 0xC289, /* 0x10 */ + 0xC7FE, 0xC28A, 0xC28B, 0xC28C, 0xC8A1, 0xC28D, 0xC28E, 0xC28F, /* 0x20 */ + 0xC290, 0xC291, 0xC292, 0xC293, 0xC294, 0xC8A2, 0xC295, 0xC296, /* 0x20 */ + 0xC297, 0xC298, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, 0xC29E, /* 0x30 */ + 0xC8A3, 0xC8A4, 0xC29F, 0xC2A0, 0xC8A5, 0xC341, 0xC342, 0xC343, /* 0x30 */ + 0xC8A6, 0xC344, 0xC345, 0xC346, 0xC347, 0xC8A7, 0xC348, 0xC349, /* 0x40 */ + 0xC8A8, 0xC8A9, 0xC34A, 0xC8AA, 0xC34B, 0xC8AB, 0xC34C, 0xC34D, /* 0x40 */ + 0xC34E, 0xC8AC, 0xC34F, 0xC350, 0xC8AD, 0xC8AE, 0xC351, 0xC352, /* 0x50 */ + 0xC8AF, 0xC353, 0xC354, 0xC355, 0xC8B0, 0xC356, 0xC357, 0xC358, /* 0x50 */ + 0xC359, 0xC35A, 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC8B1, /* 0x60 */ + 0xC366, 0xC8B2, 0xC367, 0xC368, 0xC369, 0xC36A, 0xC36B, 0xC36C, /* 0x60 */ + 0xC8B3, 0xC8B4, 0xC36D, 0xC36E, 0xC8B5, 0xC36F, 0xC370, 0xC371, /* 0x70 */ + 0xC372, 0xC373, 0xC374, 0xC375, 0xC376, 0xC377, 0xC378, 0xC379, /* 0x70 */ + 0xC37A, 0xC381, 0xC382, 0xC8B6, 0xC383, 0xC8B7, 0xC384, 0xC385, /* 0x80 */ + 0xC386, 0xC387, 0xC388, 0xC389, 0xC8B8, 0xC8B9, 0xC38A, 0xC38B, /* 0x80 */ + 0xC8BA, 0xC38C, 0xC38D, 0xC38E, 0xC8BB, 0xC38F, 0xC390, 0xC391, /* 0x90 */ + 0xC392, 0xC393, 0xC394, 0xC395, 0xC396, 0xC8BC, 0xC397, 0xC8BD, /* 0x90 */ + 0xC398, 0xC8BE, 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, /* 0xA0 */ + 0xC8BF, 0xC39F, 0xC3A0, 0xC441, 0xC8C0, 0xC442, 0xC443, 0xC444, /* 0xA0 */ + 0xC8C1, 0xC445, 0xC446, 0xC447, 0xC448, 0xC449, 0xC44A, 0xC44B, /* 0xB0 */ + 0xC44C, 0xC8C2, 0xC44D, 0xC8C3, 0xC44E, 0xC44F, 0xC450, 0xC451, /* 0xB0 */ + 0xC452, 0xC453, 0xC454, 0xC455, 0xC8C4, 0xC8C5, 0xC456, 0xC457, /* 0xC0 */ + 0xC8C6, 0xC458, 0xC459, 0xC45A, 0xC8C7, 0xC461, 0xC462, 0xC463, /* 0xC0 */ + 0xC464, 0xC8C8, 0xC465, 0xC466, 0xC8C9, 0xC467, 0xC468, 0xC8CA, /* 0xD0 */ + 0xC469, 0xC8CB, 0xC46A, 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xC46F, /* 0xD0 */ + 0xC8CC, 0xC470, 0xC471, 0xC472, 0xC8CD, 0xC473, 0xC474, 0xC475, /* 0xE0 */ + 0xC8CE, 0xC476, 0xC477, 0xC478, 0xC479, 0xC47A, 0xC481, 0xC482, /* 0xE0 */ + 0xC8CF, 0xC483, 0xC484, 0xC485, 0xC486, 0xC8D0, 0xC487, 0xC488, /* 0xF0 */ + 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC8D1, 0xC8D2, 0xC48D, 0xC48E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_D7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC8D3, 0xC48F, 0xC490, 0xC491, 0xC8D4, 0xC492, 0xC493, 0xC494, /* 0x00 */ + 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, 0xC49A, 0xC49B, 0xC49C, /* 0x00 */ + 0xC49D, 0xC8D5, 0xC49E, 0xC49F, 0xC4A0, 0xC541, 0xC542, 0xC543, /* 0x10 */ + 0xC8D6, 0xC8D7, 0xC544, 0xC545, 0xC8D8, 0xC546, 0xC547, 0xC548, /* 0x10 */ + 0xC8D9, 0xC549, 0xC54A, 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xC54F, /* 0x20 */ + 0xC8DA, 0xC8DB, 0xC550, 0xC8DC, 0xC551, 0xC8DD, 0xC552, 0xC553, /* 0x20 */ + 0xC554, 0xC555, 0xC556, 0xC557, 0xC8DE, 0xC8DF, 0xC558, 0xC559, /* 0x30 */ + 0xC8E0, 0xC55A, 0xC561, 0xC562, 0xC8E1, 0xC563, 0xC564, 0xC565, /* 0x30 */ + 0xC566, 0xC567, 0xC568, 0xC569, 0xC8E2, 0xC56A, 0xC56B, 0xC8E3, /* 0x40 */ + 0xC56C, 0xC8E4, 0xC56D, 0xC56E, 0xC56F, 0xC570, 0xC571, 0xC572, /* 0x40 */ + 0xC8E5, 0xC8E6, 0xC573, 0xC574, 0xC8E7, 0xC575, 0xC8E8, 0xC8E9, /* 0x50 */ + 0xC8EA, 0xC8EB, 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC581, /* 0x50 */ + 0xC8EC, 0xC8ED, 0xC582, 0xC8EE, 0xC583, 0xC8EF, 0xC584, 0xC585, /* 0x60 */ + 0xC586, 0xC8F0, 0xC587, 0xC588, 0xC8F1, 0xC589, 0xC58A, 0xC58B, /* 0x60 */ + 0xC8F2, 0xC58C, 0xC58D, 0xC58E, 0xC8F3, 0xC58F, 0xC590, 0xC591, /* 0x70 */ + 0xC592, 0xC593, 0xC594, 0xC595, 0xC8F4, 0xC8F5, 0xC596, 0xC597, /* 0x70 */ + 0xC598, 0xC8F6, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, /* 0x80 */ + 0xC8F7, 0xC8F8, 0xC59F, 0xC5A0, 0xC8F9, 0xC641, 0xC642, 0xC643, /* 0x80 */ + 0xC8FA, 0xC644, 0xC645, 0xC646, 0xC647, 0xC648, 0xC649, 0xC64A, /* 0x90 */ + 0xC8FB, 0xC8FC, 0xC64B, 0xC8FD, 0xC64C, 0xC8FE, 0xC64D, 0xC64E, /* 0x90 */ + 0xC64F, 0xC650, 0xC651, 0xC652 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCBD0, 0xCBD6, 0xCBE7, 0xCDCF, 0xCDE8, 0xCEAD, 0xCFFB, 0xD0A2, /* 0x00 */ + 0xD0B8, 0xD0D0, 0xD0DD, 0xD1D4, 0xD1D5, 0xD1D8, 0xD1DB, 0xD1DC, /* 0x00 */ + 0xD1DD, 0xD1DE, 0xD1DF, 0xD1E0, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, /* 0x10 */ + 0xD1E6, 0xD1E8, 0xD1E9, 0xD1EA, 0xD1EB, 0xD1ED, 0xD1EF, 0xD1F0, /* 0x10 */ + 0xD1F2, 0xD1F6, 0xD1FA, 0xD1FC, 0xD1FD, 0xD1FE, 0xD2A2, 0xD2A3, /* 0x20 */ + 0xD2A7, 0xD2A8, 0xD2A9, 0xD2AA, 0xD2AB, 0xD2AD, 0xD2B2, 0xD2BE, /* 0x20 */ + 0xD2C2, 0xD2C3, 0xD2C4, 0xD2C6, 0xD2C7, 0xD2C8, 0xD2C9, 0xD2CA, /* 0x30 */ + 0xD2CB, 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D2, 0xD2D3, /* 0x30 */ + 0xD2D4, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, 0xD2DE, 0xD2DF, /* 0x40 */ + 0xD2E1, 0xD2E2, 0xD2E4, 0xD2E5, 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9, /* 0x40 */ + 0xD2EA, 0xD2EB, 0xD2F0, 0xD2F1, 0xD2F2, 0xD2F3, 0xD2F4, 0xD2F5, /* 0x50 */ + 0xD2F7, 0xD2F8, 0xD4E6, 0xD4FC, 0xD5A5, 0xD5AB, 0xD5AE, 0xD6B8, /* 0x50 */ + 0xD6CD, 0xD7CB, 0xD7E4, 0xDBC5, 0xDBE4, 0xDCA5, 0xDDA5, 0xDDD5, /* 0x60 */ + 0xDDF4, 0xDEFC, 0xDEFE, 0xDFB3, 0xDFE1, 0xDFE8, 0xE0F1, 0xE1AD, /* 0x60 */ + 0xE1ED, 0xE3F5, 0xE4A1, 0xE4A9, 0xE5AE, 0xE5B1, 0xE5B2, 0xE5B9, /* 0x70 */ + 0xE5BB, 0xE5BC, 0xE5C4, 0xE5CE, 0xE5D0, 0xE5D2, 0xE5D6, 0xE5FA, /* 0x70 */ + 0xE5FB, 0xE5FC, 0xE5FE, 0xE6A1, 0xE6A4, 0xE6A7, 0xE6AD, 0xE6AF, /* 0x80 */ + 0xE6B0, 0xE6B1, 0xE6B3, 0xE6B7, 0xE6B8, 0xE6BC, 0xE6C4, 0xE6C6, /* 0x80 */ + 0xE6C7, 0xE6CA, 0xE6D2, 0xE6D6, 0xE6D9, 0xE6DC, 0xE6DF, 0xE6E1, /* 0x90 */ + 0xE6E4, 0xE6E5, 0xE6E6, 0xE6E8, 0xE6EA, 0xE6EB, 0xE6EC, 0xE6EF, /* 0x90 */ + 0xE6F1, 0xE6F2, 0xE6F5, 0xE6F6, 0xE6F7, 0xE6F9, 0xE7A1, 0xE7A6, /* 0xA0 */ + 0xE7A9, 0xE7AA, 0xE7AC, 0xE7AD, 0xE7B0, 0xE7BF, 0xE7C1, 0xE7C6, /* 0xA0 */ + 0xE7C7, 0xE7CB, 0xE7CD, 0xE7CF, 0xE7D0, 0xE7D3, 0xE7DF, 0xE7E4, /* 0xB0 */ + 0xE7E6, 0xE7F7, 0xE8E7, 0xE8E8, 0xE8F0, 0xE8F1, 0xE8F7, 0xE8F9, /* 0xB0 */ + 0xE8FB, 0xE8FE, 0xE9A7, 0xE9AC, 0xE9CC, 0xE9F7, 0xEAC1, 0xEAE5, /* 0xC0 */ + 0xEAF4, 0xEAF7, 0xEAFC, 0xEAFE, 0xEBA4, 0xEBA7, 0xEBA9, 0xEBAA, /* 0xC0 */ + 0xEBBA, 0xEBBB, 0xEBBD, 0xEBC1, 0xEBC2, 0xEBC6, 0xEBC7, 0xEBCC, /* 0xD0 */ + 0xEBCF, 0xEBD0, 0xEBD1, 0xEBD2, 0xEBD8, 0xECA6, 0xECA7, 0xECAA, /* 0xD0 */ + 0xECAF, 0xECB0, 0xECB1, 0xECB2, 0xECB5, 0xECB8, 0xECBA, 0xECC0, /* 0xE0 */ + 0xECC1, 0xECC5, 0xECC6, 0xECC9, 0xECCA, 0xECD5, 0xECDD, 0xECDE, /* 0xE0 */ + 0xECE1, 0xECE4, 0xECE7, 0xECE8, 0xECF7, 0xECF8, 0xECFA, 0xEDA1, /* 0xF0 */ + 0xEDA2, 0xEDA3, 0xEDEE, 0xEEDB, 0xF2BD, 0xF2FA, 0xF3B1, 0xF4A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF4EE, 0xF6F4, 0xF6F6, 0xF7B8, 0xF7C8, 0xF7D3, 0xF8DB, 0xF8F0, /* 0x00 */ + 0xFAA1, 0xFAA2, 0xFAE6, 0xFCA9 /* 0x00 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_KSC5601_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7, /* 0x00 */ + 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, /* 0x00 */ + 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, /* 0x10 */ + 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF, /* 0x10 */ + 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, /* 0x20 */ + 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, /* 0x20 */ + 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, /* 0x30 */ + 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA1AC, 0xA3DD, 0xA3DE, 0xA3DF, /* 0x30 */ + 0xA3E0, 0xA3E1, 0xA3E2, 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, /* 0x40 */ + 0xA3E8, 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, 0xA3EF, /* 0x40 */ + 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6, 0xA3F7, /* 0x50 */ + 0xA3F8, 0xA3F9, 0xA3FA, 0xA3FB, 0xA3FC, 0xA3FD, 0xA2A6, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA1CB, 0xA1CC, 0xA1FE, 0xA3FE, 0, 0xA1CD, 0xA3DC /* 0xE0 */ +}; + diff --git a/sal/textenc/tcvtkr4.tab b/sal/textenc/tcvtkr4.tab new file mode 100644 index 000000000..0bea24e74 --- /dev/null +++ b/sal/textenc/tcvtkr4.tab @@ -0,0 +1,3494 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* korean charsets: */ +/* JOHAB */ + +/* ======================================================================= */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3133, 0, 0x3135, 0x3136, /* 0x40 */ + 0, 0, 0x313A, 0x313B, 0x313C, 0x313D, 0x313E, 0x313F, /* 0x40 */ + 0x3140, 0, 0, 0, 0x3144, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x314F, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3150, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x3151, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x3152, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x3153 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3154, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3155, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3156, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x3157, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x3158, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x3159 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x315A, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x315B, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x315C, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x315D, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x315E, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x315F /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3160, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0x3161, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0x3162, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x3163 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3131, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAC00, 0xAC01, 0xAC02, 0xAC03, 0xAC04, 0xAC05, 0xAC06, /* 0x60 */ + 0xAC07, 0xAC08, 0xAC09, 0xAC0A, 0xAC0B, 0xAC0C, 0xAC0D, 0xAC0E, /* 0x60 */ + 0xAC0F, 0xAC10, 0, 0xAC11, 0xAC12, 0xAC13, 0xAC14, 0xAC15, /* 0x70 */ + 0xAC16, 0xAC17, 0xAC18, 0xAC19, 0xAC1A, 0xAC1B, 0, 0, /* 0x70 */ + 0, 0xAC1C, 0xAC1D, 0xAC1E, 0xAC1F, 0xAC20, 0xAC21, 0xAC22, /* 0x80 */ + 0xAC23, 0xAC24, 0xAC25, 0xAC26, 0xAC27, 0xAC28, 0xAC29, 0xAC2A, /* 0x80 */ + 0xAC2B, 0xAC2C, 0, 0xAC2D, 0xAC2E, 0xAC2F, 0xAC30, 0xAC31, /* 0x90 */ + 0xAC32, 0xAC33, 0xAC34, 0xAC35, 0xAC36, 0xAC37, 0, 0, /* 0x90 */ + 0, 0xAC38, 0xAC39, 0xAC3A, 0xAC3B, 0xAC3C, 0xAC3D, 0xAC3E, /* 0xA0 */ + 0xAC3F, 0xAC40, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, /* 0xA0 */ + 0xAC47, 0xAC48, 0, 0xAC49, 0xAC4A, 0xAC4B, 0xAC4C, 0xAC4D, /* 0xB0 */ + 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xAC52, 0xAC53, 0, 0, /* 0xB0 */ + 0, 0xAC54, 0xAC55, 0xAC56, 0xAC57, 0xAC58, 0xAC59, 0xAC5A, /* 0xC0 */ + 0xAC5B, 0xAC5C, 0xAC5D, 0xAC5E, 0xAC5F, 0xAC60, 0xAC61, 0xAC62, /* 0xC0 */ + 0xAC63, 0xAC64, 0, 0xAC65, 0xAC66, 0xAC67, 0xAC68, 0xAC69, /* 0xD0 */ + 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, 0xAC6F, 0, 0, /* 0xD0 */ + 0, 0xAC70, 0xAC71, 0xAC72, 0xAC73, 0xAC74, 0xAC75, 0xAC76, /* 0xE0 */ + 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, /* 0xE0 */ + 0xAC7F, 0xAC80, 0, 0xAC81, 0xAC82, 0xAC83, 0xAC84, 0xAC85, /* 0xF0 */ + 0xAC86, 0xAC87, 0xAC88, 0xAC89, 0xAC8A, 0xAC8B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, 0xAC92, /* 0x40 */ + 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, 0xAC9A, /* 0x40 */ + 0xAC9B, 0xAC9C, 0, 0xAC9D, 0xAC9E, 0xAC9F, 0xACA0, 0xACA1, /* 0x50 */ + 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6, 0xACA7, 0, 0, /* 0x50 */ + 0, 0xACA8, 0xACA9, 0xACAA, 0xACAB, 0xACAC, 0xACAD, 0xACAE, /* 0x60 */ + 0xACAF, 0xACB0, 0xACB1, 0xACB2, 0xACB3, 0xACB4, 0xACB5, 0xACB6, /* 0x60 */ + 0xACB7, 0xACB8, 0, 0xACB9, 0xACBA, 0xACBB, 0xACBC, 0xACBD, /* 0x70 */ + 0xACBE, 0xACBF, 0xACC0, 0xACC1, 0xACC2, 0xACC3, 0, 0, /* 0x70 */ + 0, 0xACC4, 0xACC5, 0xACC6, 0xACC7, 0xACC8, 0xACC9, 0xACCA, /* 0x80 */ + 0xACCB, 0xACCC, 0xACCD, 0xACCE, 0xACCF, 0xACD0, 0xACD1, 0xACD2, /* 0x80 */ + 0xACD3, 0xACD4, 0, 0xACD5, 0xACD6, 0xACD7, 0xACD8, 0xACD9, /* 0x90 */ + 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, 0xACDF, 0, 0, /* 0x90 */ + 0, 0xACE0, 0xACE1, 0xACE2, 0xACE3, 0xACE4, 0xACE5, 0xACE6, /* 0xA0 */ + 0xACE7, 0xACE8, 0xACE9, 0xACEA, 0xACEB, 0xACEC, 0xACED, 0xACEE, /* 0xA0 */ + 0xACEF, 0xACF0, 0, 0xACF1, 0xACF2, 0xACF3, 0xACF4, 0xACF5, /* 0xB0 */ + 0xACF6, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, 0, 0, /* 0xB0 */ + 0, 0xACFC, 0xACFD, 0xACFE, 0xACFF, 0xAD00, 0xAD01, 0xAD02, /* 0xC0 */ + 0xAD03, 0xAD04, 0xAD05, 0xAD06, 0xAD07, 0xAD08, 0xAD09, 0xAD0A, /* 0xC0 */ + 0xAD0B, 0xAD0C, 0, 0xAD0D, 0xAD0E, 0xAD0F, 0xAD10, 0xAD11, /* 0xD0 */ + 0xAD12, 0xAD13, 0xAD14, 0xAD15, 0xAD16, 0xAD17, 0, 0, /* 0xD0 */ + 0, 0xAD18, 0xAD19, 0xAD1A, 0xAD1B, 0xAD1C, 0xAD1D, 0xAD1E, /* 0xE0 */ + 0xAD1F, 0xAD20, 0xAD21, 0xAD22, 0xAD23, 0xAD24, 0xAD25, 0xAD26, /* 0xE0 */ + 0xAD27, 0xAD28, 0, 0xAD29, 0xAD2A, 0xAD2B, 0xAD2C, 0xAD2D, /* 0xF0 */ + 0xAD2E, 0xAD2F, 0xAD30, 0xAD31, 0xAD32, 0xAD33 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAD34, 0xAD35, 0xAD36, 0xAD37, 0xAD38, 0xAD39, 0xAD3A, /* 0x40 */ + 0xAD3B, 0xAD3C, 0xAD3D, 0xAD3E, 0xAD3F, 0xAD40, 0xAD41, 0xAD42, /* 0x40 */ + 0xAD43, 0xAD44, 0, 0xAD45, 0xAD46, 0xAD47, 0xAD48, 0xAD49, /* 0x50 */ + 0xAD4A, 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0, 0, /* 0x50 */ + 0, 0xAD50, 0xAD51, 0xAD52, 0xAD53, 0xAD54, 0xAD55, 0xAD56, /* 0x60 */ + 0xAD57, 0xAD58, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, /* 0x60 */ + 0xAD5F, 0xAD60, 0, 0xAD61, 0xAD62, 0xAD63, 0xAD64, 0xAD65, /* 0x70 */ + 0xAD66, 0xAD67, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0, 0, /* 0x70 */ + 0, 0xAD6C, 0xAD6D, 0xAD6E, 0xAD6F, 0xAD70, 0xAD71, 0xAD72, /* 0x80 */ + 0xAD73, 0xAD74, 0xAD75, 0xAD76, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, /* 0x80 */ + 0xAD7B, 0xAD7C, 0, 0xAD7D, 0xAD7E, 0xAD7F, 0xAD80, 0xAD81, /* 0x90 */ + 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, 0, 0, /* 0x90 */ + 0, 0xAD88, 0xAD89, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, /* 0xA0 */ + 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xAD93, 0xAD94, 0xAD95, 0xAD96, /* 0xA0 */ + 0xAD97, 0xAD98, 0, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, /* 0xB0 */ + 0xAD9E, 0xAD9F, 0xADA0, 0xADA1, 0xADA2, 0xADA3, 0, 0, /* 0xB0 */ + 0, 0xADA4, 0xADA5, 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, /* 0xC0 */ + 0xADAB, 0xADAC, 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB2, /* 0xC0 */ + 0xADB3, 0xADB4, 0, 0xADB5, 0xADB6, 0xADB7, 0xADB8, 0xADB9, /* 0xD0 */ + 0xADBA, 0xADBB, 0xADBC, 0xADBD, 0xADBE, 0xADBF, 0, 0, /* 0xD0 */ + 0, 0xADC0, 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6, /* 0xE0 */ + 0xADC7, 0xADC8, 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, /* 0xE0 */ + 0xADCF, 0xADD0, 0, 0xADD1, 0xADD2, 0xADD3, 0xADD4, 0xADD5, /* 0xF0 */ + 0xADD6, 0xADD7, 0xADD8, 0xADD9, 0xADDA, 0xADDB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xADDC, 0xADDD, 0xADDE, 0xADDF, 0xADE0, 0xADE1, 0xADE2, /* 0x40 */ + 0xADE3, 0xADE4, 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA, /* 0x40 */ + 0xADEB, 0xADEC, 0, 0xADED, 0xADEE, 0xADEF, 0xADF0, 0xADF1, /* 0x50 */ + 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6, 0xADF7, 0, 0, /* 0x50 */ + 0, 0xADF8, 0xADF9, 0xADFA, 0xADFB, 0xADFC, 0xADFD, 0xADFE, /* 0x60 */ + 0xADFF, 0xAE00, 0xAE01, 0xAE02, 0xAE03, 0xAE04, 0xAE05, 0xAE06, /* 0x60 */ + 0xAE07, 0xAE08, 0, 0xAE09, 0xAE0A, 0xAE0B, 0xAE0C, 0xAE0D, /* 0x70 */ + 0xAE0E, 0xAE0F, 0xAE10, 0xAE11, 0xAE12, 0xAE13, 0, 0, /* 0x70 */ + 0, 0xAE14, 0xAE15, 0xAE16, 0xAE17, 0xAE18, 0xAE19, 0xAE1A, /* 0x80 */ + 0xAE1B, 0xAE1C, 0xAE1D, 0xAE1E, 0xAE1F, 0xAE20, 0xAE21, 0xAE22, /* 0x80 */ + 0xAE23, 0xAE24, 0, 0xAE25, 0xAE26, 0xAE27, 0xAE28, 0xAE29, /* 0x90 */ + 0xAE2A, 0xAE2B, 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0, 0, /* 0x90 */ + 0, 0xAE30, 0xAE31, 0xAE32, 0xAE33, 0xAE34, 0xAE35, 0xAE36, /* 0xA0 */ + 0xAE37, 0xAE38, 0xAE39, 0xAE3A, 0xAE3B, 0xAE3C, 0xAE3D, 0xAE3E, /* 0xA0 */ + 0xAE3F, 0xAE40, 0, 0xAE41, 0xAE42, 0xAE43, 0xAE44, 0xAE45, /* 0xB0 */ + 0xAE46, 0xAE47, 0xAE48, 0xAE49, 0xAE4A, 0xAE4B /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3132, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, 0xAE51, 0xAE52, /* 0x60 */ + 0xAE53, 0xAE54, 0xAE55, 0xAE56, 0xAE57, 0xAE58, 0xAE59, 0xAE5A, /* 0x60 */ + 0xAE5B, 0xAE5C, 0, 0xAE5D, 0xAE5E, 0xAE5F, 0xAE60, 0xAE61, /* 0x70 */ + 0xAE62, 0xAE63, 0xAE64, 0xAE65, 0xAE66, 0xAE67, 0, 0, /* 0x70 */ + 0, 0xAE68, 0xAE69, 0xAE6A, 0xAE6B, 0xAE6C, 0xAE6D, 0xAE6E, /* 0x80 */ + 0xAE6F, 0xAE70, 0xAE71, 0xAE72, 0xAE73, 0xAE74, 0xAE75, 0xAE76, /* 0x80 */ + 0xAE77, 0xAE78, 0, 0xAE79, 0xAE7A, 0xAE7B, 0xAE7C, 0xAE7D, /* 0x90 */ + 0xAE7E, 0xAE7F, 0xAE80, 0xAE81, 0xAE82, 0xAE83, 0, 0, /* 0x90 */ + 0, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xAE88, 0xAE89, 0xAE8A, /* 0xA0 */ + 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, 0xAE92, /* 0xA0 */ + 0xAE93, 0xAE94, 0, 0xAE95, 0xAE96, 0xAE97, 0xAE98, 0xAE99, /* 0xB0 */ + 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAE9E, 0xAE9F, 0, 0, /* 0xB0 */ + 0, 0xAEA0, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5, 0xAEA6, /* 0xC0 */ + 0xAEA7, 0xAEA8, 0xAEA9, 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, /* 0xC0 */ + 0xAEAF, 0xAEB0, 0, 0xAEB1, 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5, /* 0xD0 */ + 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, 0, 0, /* 0xD0 */ + 0, 0xAEBC, 0xAEBD, 0xAEBE, 0xAEBF, 0xAEC0, 0xAEC1, 0xAEC2, /* 0xE0 */ + 0xAEC3, 0xAEC4, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, 0xAEC9, 0xAECA, /* 0xE0 */ + 0xAECB, 0xAECC, 0, 0xAECD, 0xAECE, 0xAECF, 0xAED0, 0xAED1, /* 0xF0 */ + 0xAED2, 0xAED3, 0xAED4, 0xAED5, 0xAED6, 0xAED7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAED8, 0xAED9, 0xAEDA, 0xAEDB, 0xAEDC, 0xAEDD, 0xAEDE, /* 0x40 */ + 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, 0xAEE5, 0xAEE6, /* 0x40 */ + 0xAEE7, 0xAEE8, 0, 0xAEE9, 0xAEEA, 0xAEEB, 0xAEEC, 0xAEED, /* 0x50 */ + 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF2, 0xAEF3, 0, 0, /* 0x50 */ + 0, 0xAEF4, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF8, 0xAEF9, 0xAEFA, /* 0x60 */ + 0xAEFB, 0xAEFC, 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00, 0xAF01, 0xAF02, /* 0x60 */ + 0xAF03, 0xAF04, 0, 0xAF05, 0xAF06, 0xAF07, 0xAF08, 0xAF09, /* 0x70 */ + 0xAF0A, 0xAF0B, 0xAF0C, 0xAF0D, 0xAF0E, 0xAF0F, 0, 0, /* 0x70 */ + 0, 0xAF10, 0xAF11, 0xAF12, 0xAF13, 0xAF14, 0xAF15, 0xAF16, /* 0x80 */ + 0xAF17, 0xAF18, 0xAF19, 0xAF1A, 0xAF1B, 0xAF1C, 0xAF1D, 0xAF1E, /* 0x80 */ + 0xAF1F, 0xAF20, 0, 0xAF21, 0xAF22, 0xAF23, 0xAF24, 0xAF25, /* 0x90 */ + 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, 0xAF2B, 0, 0, /* 0x90 */ + 0, 0xAF2C, 0xAF2D, 0xAF2E, 0xAF2F, 0xAF30, 0xAF31, 0xAF32, /* 0xA0 */ + 0xAF33, 0xAF34, 0xAF35, 0xAF36, 0xAF37, 0xAF38, 0xAF39, 0xAF3A, /* 0xA0 */ + 0xAF3B, 0xAF3C, 0, 0xAF3D, 0xAF3E, 0xAF3F, 0xAF40, 0xAF41, /* 0xB0 */ + 0xAF42, 0xAF43, 0xAF44, 0xAF45, 0xAF46, 0xAF47, 0, 0, /* 0xB0 */ + 0, 0xAF48, 0xAF49, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, /* 0xC0 */ + 0xAF4F, 0xAF50, 0xAF51, 0xAF52, 0xAF53, 0xAF54, 0xAF55, 0xAF56, /* 0xC0 */ + 0xAF57, 0xAF58, 0, 0xAF59, 0xAF5A, 0xAF5B, 0xAF5C, 0xAF5D, /* 0xD0 */ + 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, 0xAF62, 0xAF63, 0, 0, /* 0xD0 */ + 0, 0xAF64, 0xAF65, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A, /* 0xE0 */ + 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF72, /* 0xE0 */ + 0xAF73, 0xAF74, 0, 0xAF75, 0xAF76, 0xAF77, 0xAF78, 0xAF79, /* 0xF0 */ + 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, 0xAF7E, 0xAF7F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAF80, 0xAF81, 0xAF82, 0xAF83, 0xAF84, 0xAF85, 0xAF86, /* 0x40 */ + 0xAF87, 0xAF88, 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, /* 0x40 */ + 0xAF8F, 0xAF90, 0, 0xAF91, 0xAF92, 0xAF93, 0xAF94, 0xAF95, /* 0x50 */ + 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, 0, 0, /* 0x50 */ + 0, 0xAF9C, 0xAF9D, 0xAF9E, 0xAF9F, 0xAFA0, 0xAFA1, 0xAFA2, /* 0x60 */ + 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, /* 0x60 */ + 0xAFAB, 0xAFAC, 0, 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, /* 0x70 */ + 0xAFB2, 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6, 0xAFB7, 0, 0, /* 0x70 */ + 0, 0xAFB8, 0xAFB9, 0xAFBA, 0xAFBB, 0xAFBC, 0xAFBD, 0xAFBE, /* 0x80 */ + 0xAFBF, 0xAFC0, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, /* 0x80 */ + 0xAFC7, 0xAFC8, 0, 0xAFC9, 0xAFCA, 0xAFCB, 0xAFCC, 0xAFCD, /* 0x90 */ + 0xAFCE, 0xAFCF, 0xAFD0, 0xAFD1, 0xAFD2, 0xAFD3, 0, 0, /* 0x90 */ + 0, 0xAFD4, 0xAFD5, 0xAFD6, 0xAFD7, 0xAFD8, 0xAFD9, 0xAFDA, /* 0xA0 */ + 0xAFDB, 0xAFDC, 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1, 0xAFE2, /* 0xA0 */ + 0xAFE3, 0xAFE4, 0, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFE8, 0xAFE9, /* 0xB0 */ + 0xAFEA, 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE, 0xAFEF, 0, 0, /* 0xB0 */ + 0, 0xAFF0, 0xAFF1, 0xAFF2, 0xAFF3, 0xAFF4, 0xAFF5, 0xAFF6, /* 0xC0 */ + 0xAFF7, 0xAFF8, 0xAFF9, 0xAFFA, 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, /* 0xC0 */ + 0xAFFF, 0xB000, 0, 0xB001, 0xB002, 0xB003, 0xB004, 0xB005, /* 0xD0 */ + 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B, 0, 0, /* 0xD0 */ + 0, 0xB00C, 0xB00D, 0xB00E, 0xB00F, 0xB010, 0xB011, 0xB012, /* 0xE0 */ + 0xB013, 0xB014, 0xB015, 0xB016, 0xB017, 0xB018, 0xB019, 0xB01A, /* 0xE0 */ + 0xB01B, 0xB01C, 0, 0xB01D, 0xB01E, 0xB01F, 0xB020, 0xB021, /* 0xF0 */ + 0xB022, 0xB023, 0xB024, 0xB025, 0xB026, 0xB027 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB028, 0xB029, 0xB02A, 0xB02B, 0xB02C, 0xB02D, 0xB02E, /* 0x40 */ + 0xB02F, 0xB030, 0xB031, 0xB032, 0xB033, 0xB034, 0xB035, 0xB036, /* 0x40 */ + 0xB037, 0xB038, 0, 0xB039, 0xB03A, 0xB03B, 0xB03C, 0xB03D, /* 0x50 */ + 0xB03E, 0xB03F, 0xB040, 0xB041, 0xB042, 0xB043, 0, 0, /* 0x50 */ + 0, 0xB044, 0xB045, 0xB046, 0xB047, 0xB048, 0xB049, 0xB04A, /* 0x60 */ + 0xB04B, 0xB04C, 0xB04D, 0xB04E, 0xB04F, 0xB050, 0xB051, 0xB052, /* 0x60 */ + 0xB053, 0xB054, 0, 0xB055, 0xB056, 0xB057, 0xB058, 0xB059, /* 0x70 */ + 0xB05A, 0xB05B, 0xB05C, 0xB05D, 0xB05E, 0xB05F, 0, 0, /* 0x70 */ + 0, 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, /* 0x80 */ + 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, 0xB06E, /* 0x80 */ + 0xB06F, 0xB070, 0, 0xB071, 0xB072, 0xB073, 0xB074, 0xB075, /* 0x90 */ + 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB07B, 0, 0, /* 0x90 */ + 0, 0xB07C, 0xB07D, 0xB07E, 0xB07F, 0xB080, 0xB081, 0xB082, /* 0xA0 */ + 0xB083, 0xB084, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, /* 0xA0 */ + 0xB08B, 0xB08C, 0, 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xB091, /* 0xB0 */ + 0xB092, 0xB093, 0xB094, 0xB095, 0xB096, 0xB097 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3134, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, 0xB09E, /* 0x60 */ + 0xB09F, 0xB0A0, 0xB0A1, 0xB0A2, 0xB0A3, 0xB0A4, 0xB0A5, 0xB0A6, /* 0x60 */ + 0xB0A7, 0xB0A8, 0, 0xB0A9, 0xB0AA, 0xB0AB, 0xB0AC, 0xB0AD, /* 0x70 */ + 0xB0AE, 0xB0AF, 0xB0B0, 0xB0B1, 0xB0B2, 0xB0B3, 0, 0, /* 0x70 */ + 0, 0xB0B4, 0xB0B5, 0xB0B6, 0xB0B7, 0xB0B8, 0xB0B9, 0xB0BA, /* 0x80 */ + 0xB0BB, 0xB0BC, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, 0xB0C1, 0xB0C2, /* 0x80 */ + 0xB0C3, 0xB0C4, 0, 0xB0C5, 0xB0C6, 0xB0C7, 0xB0C8, 0xB0C9, /* 0x90 */ + 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, 0xB0CE, 0xB0CF, 0, 0, /* 0x90 */ + 0, 0xB0D0, 0xB0D1, 0xB0D2, 0xB0D3, 0xB0D4, 0xB0D5, 0xB0D6, /* 0xA0 */ + 0xB0D7, 0xB0D8, 0xB0D9, 0xB0DA, 0xB0DB, 0xB0DC, 0xB0DD, 0xB0DE, /* 0xA0 */ + 0xB0DF, 0xB0E0, 0, 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, 0xB0E5, /* 0xB0 */ + 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA, 0xB0EB, 0, 0, /* 0xB0 */ + 0, 0xB0EC, 0xB0ED, 0xB0EE, 0xB0EF, 0xB0F0, 0xB0F1, 0xB0F2, /* 0xC0 */ + 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, 0xB0F8, 0xB0F9, 0xB0FA, /* 0xC0 */ + 0xB0FB, 0xB0FC, 0, 0xB0FD, 0xB0FE, 0xB0FF, 0xB100, 0xB101, /* 0xD0 */ + 0xB102, 0xB103, 0xB104, 0xB105, 0xB106, 0xB107, 0, 0, /* 0xD0 */ + 0, 0xB108, 0xB109, 0xB10A, 0xB10B, 0xB10C, 0xB10D, 0xB10E, /* 0xE0 */ + 0xB10F, 0xB110, 0xB111, 0xB112, 0xB113, 0xB114, 0xB115, 0xB116, /* 0xE0 */ + 0xB117, 0xB118, 0, 0xB119, 0xB11A, 0xB11B, 0xB11C, 0xB11D, /* 0xF0 */ + 0xB11E, 0xB11F, 0xB120, 0xB121, 0xB122, 0xB123 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB124, 0xB125, 0xB126, 0xB127, 0xB128, 0xB129, 0xB12A, /* 0x40 */ + 0xB12B, 0xB12C, 0xB12D, 0xB12E, 0xB12F, 0xB130, 0xB131, 0xB132, /* 0x40 */ + 0xB133, 0xB134, 0, 0xB135, 0xB136, 0xB137, 0xB138, 0xB139, /* 0x50 */ + 0xB13A, 0xB13B, 0xB13C, 0xB13D, 0xB13E, 0xB13F, 0, 0, /* 0x50 */ + 0, 0xB140, 0xB141, 0xB142, 0xB143, 0xB144, 0xB145, 0xB146, /* 0x60 */ + 0xB147, 0xB148, 0xB149, 0xB14A, 0xB14B, 0xB14C, 0xB14D, 0xB14E, /* 0x60 */ + 0xB14F, 0xB150, 0, 0xB151, 0xB152, 0xB153, 0xB154, 0xB155, /* 0x70 */ + 0xB156, 0xB157, 0xB158, 0xB159, 0xB15A, 0xB15B, 0, 0, /* 0x70 */ + 0, 0xB15C, 0xB15D, 0xB15E, 0xB15F, 0xB160, 0xB161, 0xB162, /* 0x80 */ + 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, 0xB169, 0xB16A, /* 0x80 */ + 0xB16B, 0xB16C, 0, 0xB16D, 0xB16E, 0xB16F, 0xB170, 0xB171, /* 0x90 */ + 0xB172, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0, 0, /* 0x90 */ + 0, 0xB178, 0xB179, 0xB17A, 0xB17B, 0xB17C, 0xB17D, 0xB17E, /* 0xA0 */ + 0xB17F, 0xB180, 0xB181, 0xB182, 0xB183, 0xB184, 0xB185, 0xB186, /* 0xA0 */ + 0xB187, 0xB188, 0, 0xB189, 0xB18A, 0xB18B, 0xB18C, 0xB18D, /* 0xB0 */ + 0xB18E, 0xB18F, 0xB190, 0xB191, 0xB192, 0xB193, 0, 0, /* 0xB0 */ + 0, 0xB194, 0xB195, 0xB196, 0xB197, 0xB198, 0xB199, 0xB19A, /* 0xC0 */ + 0xB19B, 0xB19C, 0xB19D, 0xB19E, 0xB19F, 0xB1A0, 0xB1A1, 0xB1A2, /* 0xC0 */ + 0xB1A3, 0xB1A4, 0, 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A8, 0xB1A9, /* 0xD0 */ + 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, 0xB1AE, 0xB1AF, 0, 0, /* 0xD0 */ + 0, 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3, 0xB1B4, 0xB1B5, 0xB1B6, /* 0xE0 */ + 0xB1B7, 0xB1B8, 0xB1B9, 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1BE, /* 0xE0 */ + 0xB1BF, 0xB1C0, 0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, 0xB1C5, /* 0xF0 */ + 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB1CC, 0xB1CD, 0xB1CE, 0xB1CF, 0xB1D0, 0xB1D1, 0xB1D2, /* 0x40 */ + 0xB1D3, 0xB1D4, 0xB1D5, 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, /* 0x40 */ + 0xB1DB, 0xB1DC, 0, 0xB1DD, 0xB1DE, 0xB1DF, 0xB1E0, 0xB1E1, /* 0x50 */ + 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, 0, 0, /* 0x50 */ + 0, 0xB1E8, 0xB1E9, 0xB1EA, 0xB1EB, 0xB1EC, 0xB1ED, 0xB1EE, /* 0x60 */ + 0xB1EF, 0xB1F0, 0xB1F1, 0xB1F2, 0xB1F3, 0xB1F4, 0xB1F5, 0xB1F6, /* 0x60 */ + 0xB1F7, 0xB1F8, 0, 0xB1F9, 0xB1FA, 0xB1FB, 0xB1FC, 0xB1FD, /* 0x70 */ + 0xB1FE, 0xB1FF, 0xB200, 0xB201, 0xB202, 0xB203, 0, 0, /* 0x70 */ + 0, 0xB204, 0xB205, 0xB206, 0xB207, 0xB208, 0xB209, 0xB20A, /* 0x80 */ + 0xB20B, 0xB20C, 0xB20D, 0xB20E, 0xB20F, 0xB210, 0xB211, 0xB212, /* 0x80 */ + 0xB213, 0xB214, 0, 0xB215, 0xB216, 0xB217, 0xB218, 0xB219, /* 0x90 */ + 0xB21A, 0xB21B, 0xB21C, 0xB21D, 0xB21E, 0xB21F, 0, 0, /* 0x90 */ + 0, 0xB220, 0xB221, 0xB222, 0xB223, 0xB224, 0xB225, 0xB226, /* 0xA0 */ + 0xB227, 0xB228, 0xB229, 0xB22A, 0xB22B, 0xB22C, 0xB22D, 0xB22E, /* 0xA0 */ + 0xB22F, 0xB230, 0, 0xB231, 0xB232, 0xB233, 0xB234, 0xB235, /* 0xB0 */ + 0xB236, 0xB237, 0xB238, 0xB239, 0xB23A, 0xB23B, 0, 0, /* 0xB0 */ + 0, 0xB23C, 0xB23D, 0xB23E, 0xB23F, 0xB240, 0xB241, 0xB242, /* 0xC0 */ + 0xB243, 0xB244, 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, /* 0xC0 */ + 0xB24B, 0xB24C, 0, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, /* 0xD0 */ + 0xB252, 0xB253, 0xB254, 0xB255, 0xB256, 0xB257, 0, 0, /* 0xD0 */ + 0, 0xB258, 0xB259, 0xB25A, 0xB25B, 0xB25C, 0xB25D, 0xB25E, /* 0xE0 */ + 0xB25F, 0xB260, 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, /* 0xE0 */ + 0xB267, 0xB268, 0, 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, /* 0xF0 */ + 0xB26E, 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB274, 0xB275, 0xB276, 0xB277, 0xB278, 0xB279, 0xB27A, /* 0x40 */ + 0xB27B, 0xB27C, 0xB27D, 0xB27E, 0xB27F, 0xB280, 0xB281, 0xB282, /* 0x40 */ + 0xB283, 0xB284, 0, 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, /* 0x50 */ + 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, 0xB28F, 0, 0, /* 0x50 */ + 0, 0xB290, 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, 0xB296, /* 0x60 */ + 0xB297, 0xB298, 0xB299, 0xB29A, 0xB29B, 0xB29C, 0xB29D, 0xB29E, /* 0x60 */ + 0xB29F, 0xB2A0, 0, 0xB2A1, 0xB2A2, 0xB2A3, 0xB2A4, 0xB2A5, /* 0x70 */ + 0xB2A6, 0xB2A7, 0xB2A8, 0xB2A9, 0xB2AA, 0xB2AB, 0, 0, /* 0x70 */ + 0, 0xB2AC, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B0, 0xB2B1, 0xB2B2, /* 0x80 */ + 0xB2B3, 0xB2B4, 0xB2B5, 0xB2B6, 0xB2B7, 0xB2B8, 0xB2B9, 0xB2BA, /* 0x80 */ + 0xB2BB, 0xB2BC, 0, 0xB2BD, 0xB2BE, 0xB2BF, 0xB2C0, 0xB2C1, /* 0x90 */ + 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, 0xB2C7, 0, 0, /* 0x90 */ + 0, 0xB2C8, 0xB2C9, 0xB2CA, 0xB2CB, 0xB2CC, 0xB2CD, 0xB2CE, /* 0xA0 */ + 0xB2CF, 0xB2D0, 0xB2D1, 0xB2D2, 0xB2D3, 0xB2D4, 0xB2D5, 0xB2D6, /* 0xA0 */ + 0xB2D7, 0xB2D8, 0, 0xB2D9, 0xB2DA, 0xB2DB, 0xB2DC, 0xB2DD, /* 0xB0 */ + 0xB2DE, 0xB2DF, 0xB2E0, 0xB2E1, 0xB2E2, 0xB2E3 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3137, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E7, 0xB2E8, 0xB2E9, 0xB2EA, /* 0x60 */ + 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, 0xB2F0, 0xB2F1, 0xB2F2, /* 0x60 */ + 0xB2F3, 0xB2F4, 0, 0xB2F5, 0xB2F6, 0xB2F7, 0xB2F8, 0xB2F9, /* 0x70 */ + 0xB2FA, 0xB2FB, 0xB2FC, 0xB2FD, 0xB2FE, 0xB2FF, 0, 0, /* 0x70 */ + 0, 0xB300, 0xB301, 0xB302, 0xB303, 0xB304, 0xB305, 0xB306, /* 0x80 */ + 0xB307, 0xB308, 0xB309, 0xB30A, 0xB30B, 0xB30C, 0xB30D, 0xB30E, /* 0x80 */ + 0xB30F, 0xB310, 0, 0xB311, 0xB312, 0xB313, 0xB314, 0xB315, /* 0x90 */ + 0xB316, 0xB317, 0xB318, 0xB319, 0xB31A, 0xB31B, 0, 0, /* 0x90 */ + 0, 0xB31C, 0xB31D, 0xB31E, 0xB31F, 0xB320, 0xB321, 0xB322, /* 0xA0 */ + 0xB323, 0xB324, 0xB325, 0xB326, 0xB327, 0xB328, 0xB329, 0xB32A, /* 0xA0 */ + 0xB32B, 0xB32C, 0, 0xB32D, 0xB32E, 0xB32F, 0xB330, 0xB331, /* 0xB0 */ + 0xB332, 0xB333, 0xB334, 0xB335, 0xB336, 0xB337, 0, 0, /* 0xB0 */ + 0, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, 0xB33D, 0xB33E, /* 0xC0 */ + 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, 0xB345, 0xB346, /* 0xC0 */ + 0xB347, 0xB348, 0, 0xB349, 0xB34A, 0xB34B, 0xB34C, 0xB34D, /* 0xD0 */ + 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0, 0, /* 0xD0 */ + 0, 0xB354, 0xB355, 0xB356, 0xB357, 0xB358, 0xB359, 0xB35A, /* 0xE0 */ + 0xB35B, 0xB35C, 0xB35D, 0xB35E, 0xB35F, 0xB360, 0xB361, 0xB362, /* 0xE0 */ + 0xB363, 0xB364, 0, 0xB365, 0xB366, 0xB367, 0xB368, 0xB369, /* 0xF0 */ + 0xB36A, 0xB36B, 0xB36C, 0xB36D, 0xB36E, 0xB36F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB370, 0xB371, 0xB372, 0xB373, 0xB374, 0xB375, 0xB376, /* 0x40 */ + 0xB377, 0xB378, 0xB379, 0xB37A, 0xB37B, 0xB37C, 0xB37D, 0xB37E, /* 0x40 */ + 0xB37F, 0xB380, 0, 0xB381, 0xB382, 0xB383, 0xB384, 0xB385, /* 0x50 */ + 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0, 0, /* 0x50 */ + 0, 0xB38C, 0xB38D, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB392, /* 0x60 */ + 0xB393, 0xB394, 0xB395, 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, /* 0x60 */ + 0xB39B, 0xB39C, 0, 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xB3A1, /* 0x70 */ + 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0, 0, /* 0x70 */ + 0, 0xB3A8, 0xB3A9, 0xB3AA, 0xB3AB, 0xB3AC, 0xB3AD, 0xB3AE, /* 0x80 */ + 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4, 0xB3B5, 0xB3B6, /* 0x80 */ + 0xB3B7, 0xB3B8, 0, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC, 0xB3BD, /* 0x90 */ + 0xB3BE, 0xB3BF, 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0, 0, /* 0x90 */ + 0, 0xB3C4, 0xB3C5, 0xB3C6, 0xB3C7, 0xB3C8, 0xB3C9, 0xB3CA, /* 0xA0 */ + 0xB3CB, 0xB3CC, 0xB3CD, 0xB3CE, 0xB3CF, 0xB3D0, 0xB3D1, 0xB3D2, /* 0xA0 */ + 0xB3D3, 0xB3D4, 0, 0xB3D5, 0xB3D6, 0xB3D7, 0xB3D8, 0xB3D9, /* 0xB0 */ + 0xB3DA, 0xB3DB, 0xB3DC, 0xB3DD, 0xB3DE, 0xB3DF, 0, 0, /* 0xB0 */ + 0, 0xB3E0, 0xB3E1, 0xB3E2, 0xB3E3, 0xB3E4, 0xB3E5, 0xB3E6, /* 0xC0 */ + 0xB3E7, 0xB3E8, 0xB3E9, 0xB3EA, 0xB3EB, 0xB3EC, 0xB3ED, 0xB3EE, /* 0xC0 */ + 0xB3EF, 0xB3F0, 0, 0xB3F1, 0xB3F2, 0xB3F3, 0xB3F4, 0xB3F5, /* 0xD0 */ + 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, 0xB3FB, 0, 0, /* 0xD0 */ + 0, 0xB3FC, 0xB3FD, 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, /* 0xE0 */ + 0xB403, 0xB404, 0xB405, 0xB406, 0xB407, 0xB408, 0xB409, 0xB40A, /* 0xE0 */ + 0xB40B, 0xB40C, 0, 0xB40D, 0xB40E, 0xB40F, 0xB410, 0xB411, /* 0xF0 */ + 0xB412, 0xB413, 0xB414, 0xB415, 0xB416, 0xB417 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB418, 0xB419, 0xB41A, 0xB41B, 0xB41C, 0xB41D, 0xB41E, /* 0x40 */ + 0xB41F, 0xB420, 0xB421, 0xB422, 0xB423, 0xB424, 0xB425, 0xB426, /* 0x40 */ + 0xB427, 0xB428, 0, 0xB429, 0xB42A, 0xB42B, 0xB42C, 0xB42D, /* 0x50 */ + 0xB42E, 0xB42F, 0xB430, 0xB431, 0xB432, 0xB433, 0, 0, /* 0x50 */ + 0, 0xB434, 0xB435, 0xB436, 0xB437, 0xB438, 0xB439, 0xB43A, /* 0x60 */ + 0xB43B, 0xB43C, 0xB43D, 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, /* 0x60 */ + 0xB443, 0xB444, 0, 0xB445, 0xB446, 0xB447, 0xB448, 0xB449, /* 0x70 */ + 0xB44A, 0xB44B, 0xB44C, 0xB44D, 0xB44E, 0xB44F, 0, 0, /* 0x70 */ + 0, 0xB450, 0xB451, 0xB452, 0xB453, 0xB454, 0xB455, 0xB456, /* 0x80 */ + 0xB457, 0xB458, 0xB459, 0xB45A, 0xB45B, 0xB45C, 0xB45D, 0xB45E, /* 0x80 */ + 0xB45F, 0xB460, 0, 0xB461, 0xB462, 0xB463, 0xB464, 0xB465, /* 0x90 */ + 0xB466, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0, 0, /* 0x90 */ + 0, 0xB46C, 0xB46D, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB472, /* 0xA0 */ + 0xB473, 0xB474, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, /* 0xA0 */ + 0xB47B, 0xB47C, 0, 0xB47D, 0xB47E, 0xB47F, 0xB480, 0xB481, /* 0xB0 */ + 0xB482, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0, 0, /* 0xB0 */ + 0, 0xB488, 0xB489, 0xB48A, 0xB48B, 0xB48C, 0xB48D, 0xB48E, /* 0xC0 */ + 0xB48F, 0xB490, 0xB491, 0xB492, 0xB493, 0xB494, 0xB495, 0xB496, /* 0xC0 */ + 0xB497, 0xB498, 0, 0xB499, 0xB49A, 0xB49B, 0xB49C, 0xB49D, /* 0xD0 */ + 0xB49E, 0xB49F, 0xB4A0, 0xB4A1, 0xB4A2, 0xB4A3, 0, 0, /* 0xD0 */ + 0, 0xB4A4, 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A8, 0xB4A9, 0xB4AA, /* 0xE0 */ + 0xB4AB, 0xB4AC, 0xB4AD, 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, /* 0xE0 */ + 0xB4B3, 0xB4B4, 0, 0xB4B5, 0xB4B6, 0xB4B7, 0xB4B8, 0xB4B9, /* 0xF0 */ + 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, 0xB4BF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB4C0, 0xB4C1, 0xB4C2, 0xB4C3, 0xB4C4, 0xB4C5, 0xB4C6, /* 0x40 */ + 0xB4C7, 0xB4C8, 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE, /* 0x40 */ + 0xB4CF, 0xB4D0, 0, 0xB4D1, 0xB4D2, 0xB4D3, 0xB4D4, 0xB4D5, /* 0x50 */ + 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9, 0xB4DA, 0xB4DB, 0, 0, /* 0x50 */ + 0, 0xB4DC, 0xB4DD, 0xB4DE, 0xB4DF, 0xB4E0, 0xB4E1, 0xB4E2, /* 0x60 */ + 0xB4E3, 0xB4E4, 0xB4E5, 0xB4E6, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, /* 0x60 */ + 0xB4EB, 0xB4EC, 0, 0xB4ED, 0xB4EE, 0xB4EF, 0xB4F0, 0xB4F1, /* 0x70 */ + 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5, 0xB4F6, 0xB4F7, 0, 0, /* 0x70 */ + 0, 0xB4F8, 0xB4F9, 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, 0xB4FE, /* 0x80 */ + 0xB4FF, 0xB500, 0xB501, 0xB502, 0xB503, 0xB504, 0xB505, 0xB506, /* 0x80 */ + 0xB507, 0xB508, 0, 0xB509, 0xB50A, 0xB50B, 0xB50C, 0xB50D, /* 0x90 */ + 0xB50E, 0xB50F, 0xB510, 0xB511, 0xB512, 0xB513, 0, 0, /* 0x90 */ + 0, 0xB514, 0xB515, 0xB516, 0xB517, 0xB518, 0xB519, 0xB51A, /* 0xA0 */ + 0xB51B, 0xB51C, 0xB51D, 0xB51E, 0xB51F, 0xB520, 0xB521, 0xB522, /* 0xA0 */ + 0xB523, 0xB524, 0, 0xB525, 0xB526, 0xB527, 0xB528, 0xB529, /* 0xB0 */ + 0xB52A, 0xB52B, 0xB52C, 0xB52D, 0xB52E, 0xB52F /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3138, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB530, 0xB531, 0xB532, 0xB533, 0xB534, 0xB535, 0xB536, /* 0x60 */ + 0xB537, 0xB538, 0xB539, 0xB53A, 0xB53B, 0xB53C, 0xB53D, 0xB53E, /* 0x60 */ + 0xB53F, 0xB540, 0, 0xB541, 0xB542, 0xB543, 0xB544, 0xB545, /* 0x70 */ + 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54B, 0, 0, /* 0x70 */ + 0, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xB550, 0xB551, 0xB552, /* 0x80 */ + 0xB553, 0xB554, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, 0xB55A, /* 0x80 */ + 0xB55B, 0xB55C, 0, 0xB55D, 0xB55E, 0xB55F, 0xB560, 0xB561, /* 0x90 */ + 0xB562, 0xB563, 0xB564, 0xB565, 0xB566, 0xB567, 0, 0, /* 0x90 */ + 0, 0xB568, 0xB569, 0xB56A, 0xB56B, 0xB56C, 0xB56D, 0xB56E, /* 0xA0 */ + 0xB56F, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, /* 0xA0 */ + 0xB577, 0xB578, 0, 0xB579, 0xB57A, 0xB57B, 0xB57C, 0xB57D, /* 0xB0 */ + 0xB57E, 0xB57F, 0xB580, 0xB581, 0xB582, 0xB583, 0, 0, /* 0xB0 */ + 0, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, 0xB589, 0xB58A, /* 0xC0 */ + 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, 0xB591, 0xB592, /* 0xC0 */ + 0xB593, 0xB594, 0, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, /* 0xD0 */ + 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0, 0, /* 0xD0 */ + 0, 0xB5A0, 0xB5A1, 0xB5A2, 0xB5A3, 0xB5A4, 0xB5A5, 0xB5A6, /* 0xE0 */ + 0xB5A7, 0xB5A8, 0xB5A9, 0xB5AA, 0xB5AB, 0xB5AC, 0xB5AD, 0xB5AE, /* 0xE0 */ + 0xB5AF, 0xB5B0, 0, 0xB5B1, 0xB5B2, 0xB5B3, 0xB5B4, 0xB5B5, /* 0xF0 */ + 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB5BC, 0xB5BD, 0xB5BE, 0xB5BF, 0xB5C0, 0xB5C1, 0xB5C2, /* 0x40 */ + 0xB5C3, 0xB5C4, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, 0xB5C9, 0xB5CA, /* 0x40 */ + 0xB5CB, 0xB5CC, 0, 0xB5CD, 0xB5CE, 0xB5CF, 0xB5D0, 0xB5D1, /* 0x50 */ + 0xB5D2, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, 0xB5D7, 0, 0, /* 0x50 */ + 0, 0xB5D8, 0xB5D9, 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5DE, /* 0x60 */ + 0xB5DF, 0xB5E0, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, 0xB5E5, 0xB5E6, /* 0x60 */ + 0xB5E7, 0xB5E8, 0, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5EC, 0xB5ED, /* 0x70 */ + 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1, 0xB5F2, 0xB5F3, 0, 0, /* 0x70 */ + 0, 0xB5F4, 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA, /* 0x80 */ + 0xB5FB, 0xB5FC, 0xB5FD, 0xB5FE, 0xB5FF, 0xB600, 0xB601, 0xB602, /* 0x80 */ + 0xB603, 0xB604, 0, 0xB605, 0xB606, 0xB607, 0xB608, 0xB609, /* 0x90 */ + 0xB60A, 0xB60B, 0xB60C, 0xB60D, 0xB60E, 0xB60F, 0, 0, /* 0x90 */ + 0, 0xB610, 0xB611, 0xB612, 0xB613, 0xB614, 0xB615, 0xB616, /* 0xA0 */ + 0xB617, 0xB618, 0xB619, 0xB61A, 0xB61B, 0xB61C, 0xB61D, 0xB61E, /* 0xA0 */ + 0xB61F, 0xB620, 0, 0xB621, 0xB622, 0xB623, 0xB624, 0xB625, /* 0xB0 */ + 0xB626, 0xB627, 0xB628, 0xB629, 0xB62A, 0xB62B, 0, 0, /* 0xB0 */ + 0, 0xB62C, 0xB62D, 0xB62E, 0xB62F, 0xB630, 0xB631, 0xB632, /* 0xC0 */ + 0xB633, 0xB634, 0xB635, 0xB636, 0xB637, 0xB638, 0xB639, 0xB63A, /* 0xC0 */ + 0xB63B, 0xB63C, 0, 0xB63D, 0xB63E, 0xB63F, 0xB640, 0xB641, /* 0xD0 */ + 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0, 0, /* 0xD0 */ + 0, 0xB648, 0xB649, 0xB64A, 0xB64B, 0xB64C, 0xB64D, 0xB64E, /* 0xE0 */ + 0xB64F, 0xB650, 0xB651, 0xB652, 0xB653, 0xB654, 0xB655, 0xB656, /* 0xE0 */ + 0xB657, 0xB658, 0, 0xB659, 0xB65A, 0xB65B, 0xB65C, 0xB65D, /* 0xF0 */ + 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, 0xB663 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB664, 0xB665, 0xB666, 0xB667, 0xB668, 0xB669, 0xB66A, /* 0x40 */ + 0xB66B, 0xB66C, 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, 0xB672, /* 0x40 */ + 0xB673, 0xB674, 0, 0xB675, 0xB676, 0xB677, 0xB678, 0xB679, /* 0x50 */ + 0xB67A, 0xB67B, 0xB67C, 0xB67D, 0xB67E, 0xB67F, 0, 0, /* 0x50 */ + 0, 0xB680, 0xB681, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, /* 0x60 */ + 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B, 0xB68C, 0xB68D, 0xB68E, /* 0x60 */ + 0xB68F, 0xB690, 0, 0xB691, 0xB692, 0xB693, 0xB694, 0xB695, /* 0x70 */ + 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0, 0, /* 0x70 */ + 0, 0xB69C, 0xB69D, 0xB69E, 0xB69F, 0xB6A0, 0xB6A1, 0xB6A2, /* 0x80 */ + 0xB6A3, 0xB6A4, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA, /* 0x80 */ + 0xB6AB, 0xB6AC, 0, 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B1, /* 0x90 */ + 0xB6B2, 0xB6B3, 0xB6B4, 0xB6B5, 0xB6B6, 0xB6B7, 0, 0, /* 0x90 */ + 0, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD, 0xB6BE, /* 0xA0 */ + 0xB6BF, 0xB6C0, 0xB6C1, 0xB6C2, 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, /* 0xA0 */ + 0xB6C7, 0xB6C8, 0, 0xB6C9, 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, /* 0xB0 */ + 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1, 0xB6D2, 0xB6D3, 0, 0, /* 0xB0 */ + 0, 0xB6D4, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, /* 0xC0 */ + 0xB6DB, 0xB6DC, 0xB6DD, 0xB6DE, 0xB6DF, 0xB6E0, 0xB6E1, 0xB6E2, /* 0xC0 */ + 0xB6E3, 0xB6E4, 0, 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, /* 0xD0 */ + 0xB6EA, 0xB6EB, 0xB6EC, 0xB6ED, 0xB6EE, 0xB6EF, 0, 0, /* 0xD0 */ + 0, 0xB6F0, 0xB6F1, 0xB6F2, 0xB6F3, 0xB6F4, 0xB6F5, 0xB6F6, /* 0xE0 */ + 0xB6F7, 0xB6F8, 0xB6F9, 0xB6FA, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, /* 0xE0 */ + 0xB6FF, 0xB700, 0, 0xB701, 0xB702, 0xB703, 0xB704, 0xB705, /* 0xF0 */ + 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB70C, 0xB70D, 0xB70E, 0xB70F, 0xB710, 0xB711, 0xB712, /* 0x40 */ + 0xB713, 0xB714, 0xB715, 0xB716, 0xB717, 0xB718, 0xB719, 0xB71A, /* 0x40 */ + 0xB71B, 0xB71C, 0, 0xB71D, 0xB71E, 0xB71F, 0xB720, 0xB721, /* 0x50 */ + 0xB722, 0xB723, 0xB724, 0xB725, 0xB726, 0xB727, 0, 0, /* 0x50 */ + 0, 0xB728, 0xB729, 0xB72A, 0xB72B, 0xB72C, 0xB72D, 0xB72E, /* 0x60 */ + 0xB72F, 0xB730, 0xB731, 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, /* 0x60 */ + 0xB737, 0xB738, 0, 0xB739, 0xB73A, 0xB73B, 0xB73C, 0xB73D, /* 0x70 */ + 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, 0xB743, 0, 0, /* 0x70 */ + 0, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, 0xB749, 0xB74A, /* 0x80 */ + 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, 0xB750, 0xB751, 0xB752, /* 0x80 */ + 0xB753, 0xB754, 0, 0xB755, 0xB756, 0xB757, 0xB758, 0xB759, /* 0x90 */ + 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0, 0, /* 0x90 */ + 0, 0xB760, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, 0xB766, /* 0xA0 */ + 0xB767, 0xB768, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xB76E, /* 0xA0 */ + 0xB76F, 0xB770, 0, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, /* 0xB0 */ + 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3139, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB77C, 0xB77D, 0xB77E, 0xB77F, 0xB780, 0xB781, 0xB782, /* 0x60 */ + 0xB783, 0xB784, 0xB785, 0xB786, 0xB787, 0xB788, 0xB789, 0xB78A, /* 0x60 */ + 0xB78B, 0xB78C, 0, 0xB78D, 0xB78E, 0xB78F, 0xB790, 0xB791, /* 0x70 */ + 0xB792, 0xB793, 0xB794, 0xB795, 0xB796, 0xB797, 0, 0, /* 0x70 */ + 0, 0xB798, 0xB799, 0xB79A, 0xB79B, 0xB79C, 0xB79D, 0xB79E, /* 0x80 */ + 0xB79F, 0xB7A0, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, /* 0x80 */ + 0xB7A7, 0xB7A8, 0, 0xB7A9, 0xB7AA, 0xB7AB, 0xB7AC, 0xB7AD, /* 0x90 */ + 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, 0, 0, /* 0x90 */ + 0, 0xB7B4, 0xB7B5, 0xB7B6, 0xB7B7, 0xB7B8, 0xB7B9, 0xB7BA, /* 0xA0 */ + 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, 0xB7BF, 0xB7C0, 0xB7C1, 0xB7C2, /* 0xA0 */ + 0xB7C3, 0xB7C4, 0, 0xB7C5, 0xB7C6, 0xB7C7, 0xB7C8, 0xB7C9, /* 0xB0 */ + 0xB7CA, 0xB7CB, 0xB7CC, 0xB7CD, 0xB7CE, 0xB7CF, 0, 0, /* 0xB0 */ + 0, 0xB7D0, 0xB7D1, 0xB7D2, 0xB7D3, 0xB7D4, 0xB7D5, 0xB7D6, /* 0xC0 */ + 0xB7D7, 0xB7D8, 0xB7D9, 0xB7DA, 0xB7DB, 0xB7DC, 0xB7DD, 0xB7DE, /* 0xC0 */ + 0xB7DF, 0xB7E0, 0, 0xB7E1, 0xB7E2, 0xB7E3, 0xB7E4, 0xB7E5, /* 0xD0 */ + 0xB7E6, 0xB7E7, 0xB7E8, 0xB7E9, 0xB7EA, 0xB7EB, 0, 0, /* 0xD0 */ + 0, 0xB7EC, 0xB7ED, 0xB7EE, 0xB7EF, 0xB7F0, 0xB7F1, 0xB7F2, /* 0xE0 */ + 0xB7F3, 0xB7F4, 0xB7F5, 0xB7F6, 0xB7F7, 0xB7F8, 0xB7F9, 0xB7FA, /* 0xE0 */ + 0xB7FB, 0xB7FC, 0, 0xB7FD, 0xB7FE, 0xB7FF, 0xB800, 0xB801, /* 0xF0 */ + 0xB802, 0xB803, 0xB804, 0xB805, 0xB806, 0xB807 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB808, 0xB809, 0xB80A, 0xB80B, 0xB80C, 0xB80D, 0xB80E, /* 0x40 */ + 0xB80F, 0xB810, 0xB811, 0xB812, 0xB813, 0xB814, 0xB815, 0xB816, /* 0x40 */ + 0xB817, 0xB818, 0, 0xB819, 0xB81A, 0xB81B, 0xB81C, 0xB81D, /* 0x50 */ + 0xB81E, 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, 0, 0, /* 0x50 */ + 0, 0xB824, 0xB825, 0xB826, 0xB827, 0xB828, 0xB829, 0xB82A, /* 0x60 */ + 0xB82B, 0xB82C, 0xB82D, 0xB82E, 0xB82F, 0xB830, 0xB831, 0xB832, /* 0x60 */ + 0xB833, 0xB834, 0, 0xB835, 0xB836, 0xB837, 0xB838, 0xB839, /* 0x70 */ + 0xB83A, 0xB83B, 0xB83C, 0xB83D, 0xB83E, 0xB83F, 0, 0, /* 0x70 */ + 0, 0xB840, 0xB841, 0xB842, 0xB843, 0xB844, 0xB845, 0xB846, /* 0x80 */ + 0xB847, 0xB848, 0xB849, 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, /* 0x80 */ + 0xB84F, 0xB850, 0, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, /* 0x90 */ + 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, 0, 0, /* 0x90 */ + 0, 0xB85C, 0xB85D, 0xB85E, 0xB85F, 0xB860, 0xB861, 0xB862, /* 0xA0 */ + 0xB863, 0xB864, 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, /* 0xA0 */ + 0xB86B, 0xB86C, 0, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xB871, /* 0xB0 */ + 0xB872, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, 0, 0, /* 0xB0 */ + 0, 0xB878, 0xB879, 0xB87A, 0xB87B, 0xB87C, 0xB87D, 0xB87E, /* 0xC0 */ + 0xB87F, 0xB880, 0xB881, 0xB882, 0xB883, 0xB884, 0xB885, 0xB886, /* 0xC0 */ + 0xB887, 0xB888, 0, 0xB889, 0xB88A, 0xB88B, 0xB88C, 0xB88D, /* 0xD0 */ + 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0, 0, /* 0xD0 */ + 0, 0xB894, 0xB895, 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, /* 0xE0 */ + 0xB89B, 0xB89C, 0xB89D, 0xB89E, 0xB89F, 0xB8A0, 0xB8A1, 0xB8A2, /* 0xE0 */ + 0xB8A3, 0xB8A4, 0, 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A8, 0xB8A9, /* 0xF0 */ + 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB8B0, 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B4, 0xB8B5, 0xB8B6, /* 0x40 */ + 0xB8B7, 0xB8B8, 0xB8B9, 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, 0xB8BE, /* 0x40 */ + 0xB8BF, 0xB8C0, 0, 0xB8C1, 0xB8C2, 0xB8C3, 0xB8C4, 0xB8C5, /* 0x50 */ + 0xB8C6, 0xB8C7, 0xB8C8, 0xB8C9, 0xB8CA, 0xB8CB, 0, 0, /* 0x50 */ + 0, 0xB8CC, 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D0, 0xB8D1, 0xB8D2, /* 0x60 */ + 0xB8D3, 0xB8D4, 0xB8D5, 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, /* 0x60 */ + 0xB8DB, 0xB8DC, 0, 0xB8DD, 0xB8DE, 0xB8DF, 0xB8E0, 0xB8E1, /* 0x70 */ + 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, 0xB8E7, 0, 0, /* 0x70 */ + 0, 0xB8E8, 0xB8E9, 0xB8EA, 0xB8EB, 0xB8EC, 0xB8ED, 0xB8EE, /* 0x80 */ + 0xB8EF, 0xB8F0, 0xB8F1, 0xB8F2, 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, /* 0x80 */ + 0xB8F7, 0xB8F8, 0, 0xB8F9, 0xB8FA, 0xB8FB, 0xB8FC, 0xB8FD, /* 0x90 */ + 0xB8FE, 0xB8FF, 0xB900, 0xB901, 0xB902, 0xB903, 0, 0, /* 0x90 */ + 0, 0xB904, 0xB905, 0xB906, 0xB907, 0xB908, 0xB909, 0xB90A, /* 0xA0 */ + 0xB90B, 0xB90C, 0xB90D, 0xB90E, 0xB90F, 0xB910, 0xB911, 0xB912, /* 0xA0 */ + 0xB913, 0xB914, 0, 0xB915, 0xB916, 0xB917, 0xB918, 0xB919, /* 0xB0 */ + 0xB91A, 0xB91B, 0xB91C, 0xB91D, 0xB91E, 0xB91F, 0, 0, /* 0xB0 */ + 0, 0xB920, 0xB921, 0xB922, 0xB923, 0xB924, 0xB925, 0xB926, /* 0xC0 */ + 0xB927, 0xB928, 0xB929, 0xB92A, 0xB92B, 0xB92C, 0xB92D, 0xB92E, /* 0xC0 */ + 0xB92F, 0xB930, 0, 0xB931, 0xB932, 0xB933, 0xB934, 0xB935, /* 0xD0 */ + 0xB936, 0xB937, 0xB938, 0xB939, 0xB93A, 0xB93B, 0, 0, /* 0xD0 */ + 0, 0xB93C, 0xB93D, 0xB93E, 0xB93F, 0xB940, 0xB941, 0xB942, /* 0xE0 */ + 0xB943, 0xB944, 0xB945, 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, /* 0xE0 */ + 0xB94B, 0xB94C, 0, 0xB94D, 0xB94E, 0xB94F, 0xB950, 0xB951, /* 0xF0 */ + 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, 0xB957 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB958, 0xB959, 0xB95A, 0xB95B, 0xB95C, 0xB95D, 0xB95E, /* 0x40 */ + 0xB95F, 0xB960, 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, /* 0x40 */ + 0xB967, 0xB968, 0, 0xB969, 0xB96A, 0xB96B, 0xB96C, 0xB96D, /* 0x50 */ + 0xB96E, 0xB96F, 0xB970, 0xB971, 0xB972, 0xB973, 0, 0, /* 0x50 */ + 0, 0xB974, 0xB975, 0xB976, 0xB977, 0xB978, 0xB979, 0xB97A, /* 0x60 */ + 0xB97B, 0xB97C, 0xB97D, 0xB97E, 0xB97F, 0xB980, 0xB981, 0xB982, /* 0x60 */ + 0xB983, 0xB984, 0, 0xB985, 0xB986, 0xB987, 0xB988, 0xB989, /* 0x70 */ + 0xB98A, 0xB98B, 0xB98C, 0xB98D, 0xB98E, 0xB98F, 0, 0, /* 0x70 */ + 0, 0xB990, 0xB991, 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, /* 0x80 */ + 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, 0xB99D, 0xB99E, /* 0x80 */ + 0xB99F, 0xB9A0, 0, 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, /* 0x90 */ + 0xB9A6, 0xB9A7, 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0, 0, /* 0x90 */ + 0, 0xB9AC, 0xB9AD, 0xB9AE, 0xB9AF, 0xB9B0, 0xB9B1, 0xB9B2, /* 0xA0 */ + 0xB9B3, 0xB9B4, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, 0xB9BA, /* 0xA0 */ + 0xB9BB, 0xB9BC, 0, 0xB9BD, 0xB9BE, 0xB9BF, 0xB9C0, 0xB9C1, /* 0xB0 */ + 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, 0xB9C6, 0xB9C7 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3141, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xB9C8, 0xB9C9, 0xB9CA, 0xB9CB, 0xB9CC, 0xB9CD, 0xB9CE, /* 0x60 */ + 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D2, 0xB9D3, 0xB9D4, 0xB9D5, 0xB9D6, /* 0x60 */ + 0xB9D7, 0xB9D8, 0, 0xB9D9, 0xB9DA, 0xB9DB, 0xB9DC, 0xB9DD, /* 0x70 */ + 0xB9DE, 0xB9DF, 0xB9E0, 0xB9E1, 0xB9E2, 0xB9E3, 0, 0, /* 0x70 */ + 0, 0xB9E4, 0xB9E5, 0xB9E6, 0xB9E7, 0xB9E8, 0xB9E9, 0xB9EA, /* 0x80 */ + 0xB9EB, 0xB9EC, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, 0xB9F1, 0xB9F2, /* 0x80 */ + 0xB9F3, 0xB9F4, 0, 0xB9F5, 0xB9F6, 0xB9F7, 0xB9F8, 0xB9F9, /* 0x90 */ + 0xB9FA, 0xB9FB, 0xB9FC, 0xB9FD, 0xB9FE, 0xB9FF, 0, 0, /* 0x90 */ + 0, 0xBA00, 0xBA01, 0xBA02, 0xBA03, 0xBA04, 0xBA05, 0xBA06, /* 0xA0 */ + 0xBA07, 0xBA08, 0xBA09, 0xBA0A, 0xBA0B, 0xBA0C, 0xBA0D, 0xBA0E, /* 0xA0 */ + 0xBA0F, 0xBA10, 0, 0xBA11, 0xBA12, 0xBA13, 0xBA14, 0xBA15, /* 0xB0 */ + 0xBA16, 0xBA17, 0xBA18, 0xBA19, 0xBA1A, 0xBA1B, 0, 0, /* 0xB0 */ + 0, 0xBA1C, 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22, /* 0xC0 */ + 0xBA23, 0xBA24, 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, /* 0xC0 */ + 0xBA2B, 0xBA2C, 0, 0xBA2D, 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, /* 0xD0 */ + 0xBA32, 0xBA33, 0xBA34, 0xBA35, 0xBA36, 0xBA37, 0, 0, /* 0xD0 */ + 0, 0xBA38, 0xBA39, 0xBA3A, 0xBA3B, 0xBA3C, 0xBA3D, 0xBA3E, /* 0xE0 */ + 0xBA3F, 0xBA40, 0xBA41, 0xBA42, 0xBA43, 0xBA44, 0xBA45, 0xBA46, /* 0xE0 */ + 0xBA47, 0xBA48, 0, 0xBA49, 0xBA4A, 0xBA4B, 0xBA4C, 0xBA4D, /* 0xF0 */ + 0xBA4E, 0xBA4F, 0xBA50, 0xBA51, 0xBA52, 0xBA53 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBA54, 0xBA55, 0xBA56, 0xBA57, 0xBA58, 0xBA59, 0xBA5A, /* 0x40 */ + 0xBA5B, 0xBA5C, 0xBA5D, 0xBA5E, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, /* 0x40 */ + 0xBA63, 0xBA64, 0, 0xBA65, 0xBA66, 0xBA67, 0xBA68, 0xBA69, /* 0x50 */ + 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0, 0, /* 0x50 */ + 0, 0xBA70, 0xBA71, 0xBA72, 0xBA73, 0xBA74, 0xBA75, 0xBA76, /* 0x60 */ + 0xBA77, 0xBA78, 0xBA79, 0xBA7A, 0xBA7B, 0xBA7C, 0xBA7D, 0xBA7E, /* 0x60 */ + 0xBA7F, 0xBA80, 0, 0xBA81, 0xBA82, 0xBA83, 0xBA84, 0xBA85, /* 0x70 */ + 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0, 0, /* 0x70 */ + 0, 0xBA8C, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA92, /* 0x80 */ + 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, 0xBA9A, /* 0x80 */ + 0xBA9B, 0xBA9C, 0, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1, /* 0x90 */ + 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0, 0, /* 0x90 */ + 0, 0xBAA8, 0xBAA9, 0xBAAA, 0xBAAB, 0xBAAC, 0xBAAD, 0xBAAE, /* 0xA0 */ + 0xBAAF, 0xBAB0, 0xBAB1, 0xBAB2, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, /* 0xA0 */ + 0xBAB7, 0xBAB8, 0, 0xBAB9, 0xBABA, 0xBABB, 0xBABC, 0xBABD, /* 0xB0 */ + 0xBABE, 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3, 0, 0, /* 0xB0 */ + 0, 0xBAC4, 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC8, 0xBAC9, 0xBACA, /* 0xC0 */ + 0xBACB, 0xBACC, 0xBACD, 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2, /* 0xC0 */ + 0xBAD3, 0xBAD4, 0, 0xBAD5, 0xBAD6, 0xBAD7, 0xBAD8, 0xBAD9, /* 0xD0 */ + 0xBADA, 0xBADB, 0xBADC, 0xBADD, 0xBADE, 0xBADF, 0, 0, /* 0xD0 */ + 0, 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, /* 0xE0 */ + 0xBAE7, 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, /* 0xE0 */ + 0xBAEF, 0xBAF0, 0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, /* 0xF0 */ + 0xBAF6, 0xBAF7, 0xBAF8, 0xBAF9, 0xBAFA, 0xBAFB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBAFC, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB00, 0xBB01, 0xBB02, /* 0x40 */ + 0xBB03, 0xBB04, 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A, /* 0x40 */ + 0xBB0B, 0xBB0C, 0, 0xBB0D, 0xBB0E, 0xBB0F, 0xBB10, 0xBB11, /* 0x50 */ + 0xBB12, 0xBB13, 0xBB14, 0xBB15, 0xBB16, 0xBB17, 0, 0, /* 0x50 */ + 0, 0xBB18, 0xBB19, 0xBB1A, 0xBB1B, 0xBB1C, 0xBB1D, 0xBB1E, /* 0x60 */ + 0xBB1F, 0xBB20, 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25, 0xBB26, /* 0x60 */ + 0xBB27, 0xBB28, 0, 0xBB29, 0xBB2A, 0xBB2B, 0xBB2C, 0xBB2D, /* 0x70 */ + 0xBB2E, 0xBB2F, 0xBB30, 0xBB31, 0xBB32, 0xBB33, 0, 0, /* 0x70 */ + 0, 0xBB34, 0xBB35, 0xBB36, 0xBB37, 0xBB38, 0xBB39, 0xBB3A, /* 0x80 */ + 0xBB3B, 0xBB3C, 0xBB3D, 0xBB3E, 0xBB3F, 0xBB40, 0xBB41, 0xBB42, /* 0x80 */ + 0xBB43, 0xBB44, 0, 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, /* 0x90 */ + 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4D, 0xBB4E, 0xBB4F, 0, 0, /* 0x90 */ + 0, 0xBB50, 0xBB51, 0xBB52, 0xBB53, 0xBB54, 0xBB55, 0xBB56, /* 0xA0 */ + 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, 0xBB5E, /* 0xA0 */ + 0xBB5F, 0xBB60, 0, 0xBB61, 0xBB62, 0xBB63, 0xBB64, 0xBB65, /* 0xB0 */ + 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0, 0, /* 0xB0 */ + 0, 0xBB6C, 0xBB6D, 0xBB6E, 0xBB6F, 0xBB70, 0xBB71, 0xBB72, /* 0xC0 */ + 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, 0xBB79, 0xBB7A, /* 0xC0 */ + 0xBB7B, 0xBB7C, 0, 0xBB7D, 0xBB7E, 0xBB7F, 0xBB80, 0xBB81, /* 0xD0 */ + 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0, 0, /* 0xD0 */ + 0, 0xBB88, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8C, 0xBB8D, 0xBB8E, /* 0xE0 */ + 0xBB8F, 0xBB90, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, /* 0xE0 */ + 0xBB97, 0xBB98, 0, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, /* 0xF0 */ + 0xBB9E, 0xBB9F, 0xBBA0, 0xBBA1, 0xBBA2, 0xBBA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBBA4, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA8, 0xBBA9, 0xBBAA, /* 0x40 */ + 0xBBAB, 0xBBAC, 0xBBAD, 0xBBAE, 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, /* 0x40 */ + 0xBBB3, 0xBBB4, 0, 0xBBB5, 0xBBB6, 0xBBB7, 0xBBB8, 0xBBB9, /* 0x50 */ + 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE, 0xBBBF, 0, 0, /* 0x50 */ + 0, 0xBBC0, 0xBBC1, 0xBBC2, 0xBBC3, 0xBBC4, 0xBBC5, 0xBBC6, /* 0x60 */ + 0xBBC7, 0xBBC8, 0xBBC9, 0xBBCA, 0xBBCB, 0xBBCC, 0xBBCD, 0xBBCE, /* 0x60 */ + 0xBBCF, 0xBBD0, 0, 0xBBD1, 0xBBD2, 0xBBD3, 0xBBD4, 0xBBD5, /* 0x70 */ + 0xBBD6, 0xBBD7, 0xBBD8, 0xBBD9, 0xBBDA, 0xBBDB, 0, 0, /* 0x70 */ + 0, 0xBBDC, 0xBBDD, 0xBBDE, 0xBBDF, 0xBBE0, 0xBBE1, 0xBBE2, /* 0x80 */ + 0xBBE3, 0xBBE4, 0xBBE5, 0xBBE6, 0xBBE7, 0xBBE8, 0xBBE9, 0xBBEA, /* 0x80 */ + 0xBBEB, 0xBBEC, 0, 0xBBED, 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, /* 0x90 */ + 0xBBF2, 0xBBF3, 0xBBF4, 0xBBF5, 0xBBF6, 0xBBF7, 0, 0, /* 0x90 */ + 0, 0xBBF8, 0xBBF9, 0xBBFA, 0xBBFB, 0xBBFC, 0xBBFD, 0xBBFE, /* 0xA0 */ + 0xBBFF, 0xBC00, 0xBC01, 0xBC02, 0xBC03, 0xBC04, 0xBC05, 0xBC06, /* 0xA0 */ + 0xBC07, 0xBC08, 0, 0xBC09, 0xBC0A, 0xBC0B, 0xBC0C, 0xBC0D, /* 0xB0 */ + 0xBC0E, 0xBC0F, 0xBC10, 0xBC11, 0xBC12, 0xBC13 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3142, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBC14, 0xBC15, 0xBC16, 0xBC17, 0xBC18, 0xBC19, 0xBC1A, /* 0x60 */ + 0xBC1B, 0xBC1C, 0xBC1D, 0xBC1E, 0xBC1F, 0xBC20, 0xBC21, 0xBC22, /* 0x60 */ + 0xBC23, 0xBC24, 0, 0xBC25, 0xBC26, 0xBC27, 0xBC28, 0xBC29, /* 0x70 */ + 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2D, 0xBC2E, 0xBC2F, 0, 0, /* 0x70 */ + 0, 0xBC30, 0xBC31, 0xBC32, 0xBC33, 0xBC34, 0xBC35, 0xBC36, /* 0x80 */ + 0xBC37, 0xBC38, 0xBC39, 0xBC3A, 0xBC3B, 0xBC3C, 0xBC3D, 0xBC3E, /* 0x80 */ + 0xBC3F, 0xBC40, 0, 0xBC41, 0xBC42, 0xBC43, 0xBC44, 0xBC45, /* 0x90 */ + 0xBC46, 0xBC47, 0xBC48, 0xBC49, 0xBC4A, 0xBC4B, 0, 0, /* 0x90 */ + 0, 0xBC4C, 0xBC4D, 0xBC4E, 0xBC4F, 0xBC50, 0xBC51, 0xBC52, /* 0xA0 */ + 0xBC53, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, /* 0xA0 */ + 0xBC5B, 0xBC5C, 0, 0xBC5D, 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, /* 0xB0 */ + 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0, 0, /* 0xB0 */ + 0, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E, /* 0xC0 */ + 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, /* 0xC0 */ + 0xBC77, 0xBC78, 0, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, /* 0xD0 */ + 0xBC7E, 0xBC7F, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0, 0, /* 0xD0 */ + 0, 0xBC84, 0xBC85, 0xBC86, 0xBC87, 0xBC88, 0xBC89, 0xBC8A, /* 0xE0 */ + 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, 0xBC8F, 0xBC90, 0xBC91, 0xBC92, /* 0xE0 */ + 0xBC93, 0xBC94, 0, 0xBC95, 0xBC96, 0xBC97, 0xBC98, 0xBC99, /* 0xF0 */ + 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBCA0, 0xBCA1, 0xBCA2, 0xBCA3, 0xBCA4, 0xBCA5, 0xBCA6, /* 0x40 */ + 0xBCA7, 0xBCA8, 0xBCA9, 0xBCAA, 0xBCAB, 0xBCAC, 0xBCAD, 0xBCAE, /* 0x40 */ + 0xBCAF, 0xBCB0, 0, 0xBCB1, 0xBCB2, 0xBCB3, 0xBCB4, 0xBCB5, /* 0x50 */ + 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0, 0, /* 0x50 */ + 0, 0xBCBC, 0xBCBD, 0xBCBE, 0xBCBF, 0xBCC0, 0xBCC1, 0xBCC2, /* 0x60 */ + 0xBCC3, 0xBCC4, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, /* 0x60 */ + 0xBCCB, 0xBCCC, 0, 0xBCCD, 0xBCCE, 0xBCCF, 0xBCD0, 0xBCD1, /* 0x70 */ + 0xBCD2, 0xBCD3, 0xBCD4, 0xBCD5, 0xBCD6, 0xBCD7, 0, 0, /* 0x70 */ + 0, 0xBCD8, 0xBCD9, 0xBCDA, 0xBCDB, 0xBCDC, 0xBCDD, 0xBCDE, /* 0x80 */ + 0xBCDF, 0xBCE0, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, 0xBCE5, 0xBCE6, /* 0x80 */ + 0xBCE7, 0xBCE8, 0, 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED, /* 0x90 */ + 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, 0xBCF2, 0xBCF3, 0, 0, /* 0x90 */ + 0, 0xBCF4, 0xBCF5, 0xBCF6, 0xBCF7, 0xBCF8, 0xBCF9, 0xBCFA, /* 0xA0 */ + 0xBCFB, 0xBCFC, 0xBCFD, 0xBCFE, 0xBCFF, 0xBD00, 0xBD01, 0xBD02, /* 0xA0 */ + 0xBD03, 0xBD04, 0, 0xBD05, 0xBD06, 0xBD07, 0xBD08, 0xBD09, /* 0xB0 */ + 0xBD0A, 0xBD0B, 0xBD0C, 0xBD0D, 0xBD0E, 0xBD0F, 0, 0, /* 0xB0 */ + 0, 0xBD10, 0xBD11, 0xBD12, 0xBD13, 0xBD14, 0xBD15, 0xBD16, /* 0xC0 */ + 0xBD17, 0xBD18, 0xBD19, 0xBD1A, 0xBD1B, 0xBD1C, 0xBD1D, 0xBD1E, /* 0xC0 */ + 0xBD1F, 0xBD20, 0, 0xBD21, 0xBD22, 0xBD23, 0xBD24, 0xBD25, /* 0xD0 */ + 0xBD26, 0xBD27, 0xBD28, 0xBD29, 0xBD2A, 0xBD2B, 0, 0, /* 0xD0 */ + 0, 0xBD2C, 0xBD2D, 0xBD2E, 0xBD2F, 0xBD30, 0xBD31, 0xBD32, /* 0xE0 */ + 0xBD33, 0xBD34, 0xBD35, 0xBD36, 0xBD37, 0xBD38, 0xBD39, 0xBD3A, /* 0xE0 */ + 0xBD3B, 0xBD3C, 0, 0xBD3D, 0xBD3E, 0xBD3F, 0xBD40, 0xBD41, /* 0xF0 */ + 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBD48, 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, /* 0x40 */ + 0xBD4F, 0xBD50, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, /* 0x40 */ + 0xBD57, 0xBD58, 0, 0xBD59, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, /* 0x50 */ + 0xBD5E, 0xBD5F, 0xBD60, 0xBD61, 0xBD62, 0xBD63, 0, 0, /* 0x50 */ + 0, 0xBD64, 0xBD65, 0xBD66, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, /* 0x60 */ + 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, /* 0x60 */ + 0xBD73, 0xBD74, 0, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, /* 0x70 */ + 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xBD7F, 0, 0, /* 0x70 */ + 0, 0xBD80, 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, /* 0x80 */ + 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, /* 0x80 */ + 0xBD8F, 0xBD90, 0, 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, /* 0x90 */ + 0xBD96, 0xBD97, 0xBD98, 0xBD99, 0xBD9A, 0xBD9B, 0, 0, /* 0x90 */ + 0, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, 0xBDA1, 0xBDA2, /* 0xA0 */ + 0xBDA3, 0xBDA4, 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, 0xBDA9, 0xBDAA, /* 0xA0 */ + 0xBDAB, 0xBDAC, 0, 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB0, 0xBDB1, /* 0xB0 */ + 0xBDB2, 0xBDB3, 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0, 0, /* 0xB0 */ + 0, 0xBDB8, 0xBDB9, 0xBDBA, 0xBDBB, 0xBDBC, 0xBDBD, 0xBDBE, /* 0xC0 */ + 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, /* 0xC0 */ + 0xBDC7, 0xBDC8, 0, 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC, 0xBDCD, /* 0xD0 */ + 0xBDCE, 0xBDCF, 0xBDD0, 0xBDD1, 0xBDD2, 0xBDD3, 0, 0, /* 0xD0 */ + 0, 0xBDD4, 0xBDD5, 0xBDD6, 0xBDD7, 0xBDD8, 0xBDD9, 0xBDDA, /* 0xE0 */ + 0xBDDB, 0xBDDC, 0xBDDD, 0xBDDE, 0xBDDF, 0xBDE0, 0xBDE1, 0xBDE2, /* 0xE0 */ + 0xBDE3, 0xBDE4, 0, 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDE9, /* 0xF0 */ + 0xBDEA, 0xBDEB, 0xBDEC, 0xBDED, 0xBDEE, 0xBDEF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDF0, 0xBDF1, 0xBDF2, 0xBDF3, 0xBDF4, 0xBDF5, 0xBDF6, /* 0x40 */ + 0xBDF7, 0xBDF8, 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC, 0xBDFD, 0xBDFE, /* 0x40 */ + 0xBDFF, 0xBE00, 0, 0xBE01, 0xBE02, 0xBE03, 0xBE04, 0xBE05, /* 0x50 */ + 0xBE06, 0xBE07, 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, 0, 0, /* 0x50 */ + 0, 0xBE0C, 0xBE0D, 0xBE0E, 0xBE0F, 0xBE10, 0xBE11, 0xBE12, /* 0x60 */ + 0xBE13, 0xBE14, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A, /* 0x60 */ + 0xBE1B, 0xBE1C, 0, 0xBE1D, 0xBE1E, 0xBE1F, 0xBE20, 0xBE21, /* 0x70 */ + 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26, 0xBE27, 0, 0, /* 0x70 */ + 0, 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E, /* 0x80 */ + 0xBE2F, 0xBE30, 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36, /* 0x80 */ + 0xBE37, 0xBE38, 0, 0xBE39, 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, /* 0x90 */ + 0xBE3E, 0xBE3F, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0, 0, /* 0x90 */ + 0, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, 0xBE49, 0xBE4A, /* 0xA0 */ + 0xBE4B, 0xBE4C, 0xBE4D, 0xBE4E, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, /* 0xA0 */ + 0xBE53, 0xBE54, 0, 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, /* 0xB0 */ + 0xBE5A, 0xBE5B, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3143, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBE60, 0xBE61, 0xBE62, 0xBE63, 0xBE64, 0xBE65, 0xBE66, /* 0x60 */ + 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E, /* 0x60 */ + 0xBE6F, 0xBE70, 0, 0xBE71, 0xBE72, 0xBE73, 0xBE74, 0xBE75, /* 0x70 */ + 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0, 0, /* 0x70 */ + 0, 0xBE7C, 0xBE7D, 0xBE7E, 0xBE7F, 0xBE80, 0xBE81, 0xBE82, /* 0x80 */ + 0xBE83, 0xBE84, 0xBE85, 0xBE86, 0xBE87, 0xBE88, 0xBE89, 0xBE8A, /* 0x80 */ + 0xBE8B, 0xBE8C, 0, 0xBE8D, 0xBE8E, 0xBE8F, 0xBE90, 0xBE91, /* 0x90 */ + 0xBE92, 0xBE93, 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0, 0, /* 0x90 */ + 0, 0xBE98, 0xBE99, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, /* 0xA0 */ + 0xBE9F, 0xBEA0, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, /* 0xA0 */ + 0xBEA7, 0xBEA8, 0, 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, 0xBEAD, /* 0xB0 */ + 0xBEAE, 0xBEAF, 0xBEB0, 0xBEB1, 0xBEB2, 0xBEB3, 0, 0, /* 0xB0 */ + 0, 0xBEB4, 0xBEB5, 0xBEB6, 0xBEB7, 0xBEB8, 0xBEB9, 0xBEBA, /* 0xC0 */ + 0xBEBB, 0xBEBC, 0xBEBD, 0xBEBE, 0xBEBF, 0xBEC0, 0xBEC1, 0xBEC2, /* 0xC0 */ + 0xBEC3, 0xBEC4, 0, 0xBEC5, 0xBEC6, 0xBEC7, 0xBEC8, 0xBEC9, /* 0xD0 */ + 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF, 0, 0, /* 0xD0 */ + 0, 0xBED0, 0xBED1, 0xBED2, 0xBED3, 0xBED4, 0xBED5, 0xBED6, /* 0xE0 */ + 0xBED7, 0xBED8, 0xBED9, 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, 0xBEDE, /* 0xE0 */ + 0xBEDF, 0xBEE0, 0, 0xBEE1, 0xBEE2, 0xBEE3, 0xBEE4, 0xBEE5, /* 0xF0 */ + 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, 0xBEEA, 0xBEEB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_A9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBEEC, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF2, /* 0x40 */ + 0xBEF3, 0xBEF4, 0xBEF5, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, /* 0x40 */ + 0xBEFB, 0xBEFC, 0, 0xBEFD, 0xBEFE, 0xBEFF, 0xBF00, 0xBF01, /* 0x50 */ + 0xBF02, 0xBF03, 0xBF04, 0xBF05, 0xBF06, 0xBF07, 0, 0, /* 0x50 */ + 0, 0xBF08, 0xBF09, 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D, 0xBF0E, /* 0x60 */ + 0xBF0F, 0xBF10, 0xBF11, 0xBF12, 0xBF13, 0xBF14, 0xBF15, 0xBF16, /* 0x60 */ + 0xBF17, 0xBF18, 0, 0xBF19, 0xBF1A, 0xBF1B, 0xBF1C, 0xBF1D, /* 0x70 */ + 0xBF1E, 0xBF1F, 0xBF20, 0xBF21, 0xBF22, 0xBF23, 0, 0, /* 0x70 */ + 0, 0xBF24, 0xBF25, 0xBF26, 0xBF27, 0xBF28, 0xBF29, 0xBF2A, /* 0x80 */ + 0xBF2B, 0xBF2C, 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, 0xBF32, /* 0x80 */ + 0xBF33, 0xBF34, 0, 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, /* 0x90 */ + 0xBF3A, 0xBF3B, 0xBF3C, 0xBF3D, 0xBF3E, 0xBF3F, 0, 0, /* 0x90 */ + 0, 0xBF40, 0xBF41, 0xBF42, 0xBF43, 0xBF44, 0xBF45, 0xBF46, /* 0xA0 */ + 0xBF47, 0xBF48, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, /* 0xA0 */ + 0xBF4F, 0xBF50, 0, 0xBF51, 0xBF52, 0xBF53, 0xBF54, 0xBF55, /* 0xB0 */ + 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0, 0, /* 0xB0 */ + 0, 0xBF5C, 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, /* 0xC0 */ + 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, /* 0xC0 */ + 0xBF6B, 0xBF6C, 0, 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, /* 0xD0 */ + 0xBF72, 0xBF73, 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0, 0, /* 0xD0 */ + 0, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, /* 0xE0 */ + 0xBF7F, 0xBF80, 0xBF81, 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xBF86, /* 0xE0 */ + 0xBF87, 0xBF88, 0, 0xBF89, 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, /* 0xF0 */ + 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, 0xBF93 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_AA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, /* 0x40 */ + 0xBF9B, 0xBF9C, 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xBFA1, 0xBFA2, /* 0x40 */ + 0xBFA3, 0xBFA4, 0, 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, /* 0x50 */ + 0xBFAA, 0xBFAB, 0xBFAC, 0xBFAD, 0xBFAE, 0xBFAF, 0, 0, /* 0x50 */ + 0, 0xBFB0, 0xBFB1, 0xBFB2, 0xBFB3, 0xBFB4, 0xBFB5, 0xBFB6, /* 0x60 */ + 0xBFB7, 0xBFB8, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, 0xBFBE, /* 0x60 */ + 0xBFBF, 0xBFC0, 0, 0xBFC1, 0xBFC2, 0xBFC3, 0xBFC4, 0xBFC5, /* 0x70 */ + 0xBFC6, 0xBFC7, 0xBFC8, 0xBFC9, 0xBFCA, 0xBFCB, 0, 0, /* 0x70 */ + 0, 0xBFCC, 0xBFCD, 0xBFCE, 0xBFCF, 0xBFD0, 0xBFD1, 0xBFD2, /* 0x80 */ + 0xBFD3, 0xBFD4, 0xBFD5, 0xBFD6, 0xBFD7, 0xBFD8, 0xBFD9, 0xBFDA, /* 0x80 */ + 0xBFDB, 0xBFDC, 0, 0xBFDD, 0xBFDE, 0xBFDF, 0xBFE0, 0xBFE1, /* 0x90 */ + 0xBFE2, 0xBFE3, 0xBFE4, 0xBFE5, 0xBFE6, 0xBFE7, 0, 0, /* 0x90 */ + 0, 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB, 0xBFEC, 0xBFED, 0xBFEE, /* 0xA0 */ + 0xBFEF, 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3, 0xBFF4, 0xBFF5, 0xBFF6, /* 0xA0 */ + 0xBFF7, 0xBFF8, 0, 0xBFF9, 0xBFFA, 0xBFFB, 0xBFFC, 0xBFFD, /* 0xB0 */ + 0xBFFE, 0xBFFF, 0xC000, 0xC001, 0xC002, 0xC003, 0, 0, /* 0xB0 */ + 0, 0xC004, 0xC005, 0xC006, 0xC007, 0xC008, 0xC009, 0xC00A, /* 0xC0 */ + 0xC00B, 0xC00C, 0xC00D, 0xC00E, 0xC00F, 0xC010, 0xC011, 0xC012, /* 0xC0 */ + 0xC013, 0xC014, 0, 0xC015, 0xC016, 0xC017, 0xC018, 0xC019, /* 0xD0 */ + 0xC01A, 0xC01B, 0xC01C, 0xC01D, 0xC01E, 0xC01F, 0, 0, /* 0xD0 */ + 0, 0xC020, 0xC021, 0xC022, 0xC023, 0xC024, 0xC025, 0xC026, /* 0xE0 */ + 0xC027, 0xC028, 0xC029, 0xC02A, 0xC02B, 0xC02C, 0xC02D, 0xC02E, /* 0xE0 */ + 0xC02F, 0xC030, 0, 0xC031, 0xC032, 0xC033, 0xC034, 0xC035, /* 0xF0 */ + 0xC036, 0xC037, 0xC038, 0xC039, 0xC03A, 0xC03B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_AB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC03C, 0xC03D, 0xC03E, 0xC03F, 0xC040, 0xC041, 0xC042, /* 0x40 */ + 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, 0xC048, 0xC049, 0xC04A, /* 0x40 */ + 0xC04B, 0xC04C, 0, 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC051, /* 0x50 */ + 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, 0, 0, /* 0x50 */ + 0, 0xC058, 0xC059, 0xC05A, 0xC05B, 0xC05C, 0xC05D, 0xC05E, /* 0x60 */ + 0xC05F, 0xC060, 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, /* 0x60 */ + 0xC067, 0xC068, 0, 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, /* 0x70 */ + 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073, 0, 0, /* 0x70 */ + 0, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A, /* 0x80 */ + 0xC07B, 0xC07C, 0xC07D, 0xC07E, 0xC07F, 0xC080, 0xC081, 0xC082, /* 0x80 */ + 0xC083, 0xC084, 0, 0xC085, 0xC086, 0xC087, 0xC088, 0xC089, /* 0x90 */ + 0xC08A, 0xC08B, 0xC08C, 0xC08D, 0xC08E, 0xC08F, 0, 0, /* 0x90 */ + 0, 0xC090, 0xC091, 0xC092, 0xC093, 0xC094, 0xC095, 0xC096, /* 0xA0 */ + 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, /* 0xA0 */ + 0xC09F, 0xC0A0, 0, 0xC0A1, 0xC0A2, 0xC0A3, 0xC0A4, 0xC0A5, /* 0xB0 */ + 0xC0A6, 0xC0A7, 0xC0A8, 0xC0A9, 0xC0AA, 0xC0AB /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_AC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3145, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC0AC, 0xC0AD, 0xC0AE, 0xC0AF, 0xC0B0, 0xC0B1, 0xC0B2, /* 0x60 */ + 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0B7, 0xC0B8, 0xC0B9, 0xC0BA, /* 0x60 */ + 0xC0BB, 0xC0BC, 0, 0xC0BD, 0xC0BE, 0xC0BF, 0xC0C0, 0xC0C1, /* 0x70 */ + 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C5, 0xC0C6, 0xC0C7, 0, 0, /* 0x70 */ + 0, 0xC0C8, 0xC0C9, 0xC0CA, 0xC0CB, 0xC0CC, 0xC0CD, 0xC0CE, /* 0x80 */ + 0xC0CF, 0xC0D0, 0xC0D1, 0xC0D2, 0xC0D3, 0xC0D4, 0xC0D5, 0xC0D6, /* 0x80 */ + 0xC0D7, 0xC0D8, 0, 0xC0D9, 0xC0DA, 0xC0DB, 0xC0DC, 0xC0DD, /* 0x90 */ + 0xC0DE, 0xC0DF, 0xC0E0, 0xC0E1, 0xC0E2, 0xC0E3, 0, 0, /* 0x90 */ + 0, 0xC0E4, 0xC0E5, 0xC0E6, 0xC0E7, 0xC0E8, 0xC0E9, 0xC0EA, /* 0xA0 */ + 0xC0EB, 0xC0EC, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, 0xC0F1, 0xC0F2, /* 0xA0 */ + 0xC0F3, 0xC0F4, 0, 0xC0F5, 0xC0F6, 0xC0F7, 0xC0F8, 0xC0F9, /* 0xB0 */ + 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC0FE, 0xC0FF, 0, 0, /* 0xB0 */ + 0, 0xC100, 0xC101, 0xC102, 0xC103, 0xC104, 0xC105, 0xC106, /* 0xC0 */ + 0xC107, 0xC108, 0xC109, 0xC10A, 0xC10B, 0xC10C, 0xC10D, 0xC10E, /* 0xC0 */ + 0xC10F, 0xC110, 0, 0xC111, 0xC112, 0xC113, 0xC114, 0xC115, /* 0xD0 */ + 0xC116, 0xC117, 0xC118, 0xC119, 0xC11A, 0xC11B, 0, 0, /* 0xD0 */ + 0, 0xC11C, 0xC11D, 0xC11E, 0xC11F, 0xC120, 0xC121, 0xC122, /* 0xE0 */ + 0xC123, 0xC124, 0xC125, 0xC126, 0xC127, 0xC128, 0xC129, 0xC12A, /* 0xE0 */ + 0xC12B, 0xC12C, 0, 0xC12D, 0xC12E, 0xC12F, 0xC130, 0xC131, /* 0xF0 */ + 0xC132, 0xC133, 0xC134, 0xC135, 0xC136, 0xC137 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_AD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC138, 0xC139, 0xC13A, 0xC13B, 0xC13C, 0xC13D, 0xC13E, /* 0x40 */ + 0xC13F, 0xC140, 0xC141, 0xC142, 0xC143, 0xC144, 0xC145, 0xC146, /* 0x40 */ + 0xC147, 0xC148, 0, 0xC149, 0xC14A, 0xC14B, 0xC14C, 0xC14D, /* 0x50 */ + 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC152, 0xC153, 0, 0, /* 0x50 */ + 0, 0xC154, 0xC155, 0xC156, 0xC157, 0xC158, 0xC159, 0xC15A, /* 0x60 */ + 0xC15B, 0xC15C, 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, 0xC162, /* 0x60 */ + 0xC163, 0xC164, 0, 0xC165, 0xC166, 0xC167, 0xC168, 0xC169, /* 0x70 */ + 0xC16A, 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0, 0, /* 0x70 */ + 0, 0xC170, 0xC171, 0xC172, 0xC173, 0xC174, 0xC175, 0xC176, /* 0x80 */ + 0xC177, 0xC178, 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xC17E, /* 0x80 */ + 0xC17F, 0xC180, 0, 0xC181, 0xC182, 0xC183, 0xC184, 0xC185, /* 0x90 */ + 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, 0, 0, /* 0x90 */ + 0, 0xC18C, 0xC18D, 0xC18E, 0xC18F, 0xC190, 0xC191, 0xC192, /* 0xA0 */ + 0xC193, 0xC194, 0xC195, 0xC196, 0xC197, 0xC198, 0xC199, 0xC19A, /* 0xA0 */ + 0xC19B, 0xC19C, 0, 0xC19D, 0xC19E, 0xC19F, 0xC1A0, 0xC1A1, /* 0xB0 */ + 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A5, 0xC1A6, 0xC1A7, 0, 0, /* 0xB0 */ + 0, 0xC1A8, 0xC1A9, 0xC1AA, 0xC1AB, 0xC1AC, 0xC1AD, 0xC1AE, /* 0xC0 */ + 0xC1AF, 0xC1B0, 0xC1B1, 0xC1B2, 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, /* 0xC0 */ + 0xC1B7, 0xC1B8, 0, 0xC1B9, 0xC1BA, 0xC1BB, 0xC1BC, 0xC1BD, /* 0xD0 */ + 0xC1BE, 0xC1BF, 0xC1C0, 0xC1C1, 0xC1C2, 0xC1C3, 0, 0, /* 0xD0 */ + 0, 0xC1C4, 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C8, 0xC1C9, 0xC1CA, /* 0xE0 */ + 0xC1CB, 0xC1CC, 0xC1CD, 0xC1CE, 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, /* 0xE0 */ + 0xC1D3, 0xC1D4, 0, 0xC1D5, 0xC1D6, 0xC1D7, 0xC1D8, 0xC1D9, /* 0xF0 */ + 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_AE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC1E0, 0xC1E1, 0xC1E2, 0xC1E3, 0xC1E4, 0xC1E5, 0xC1E6, /* 0x40 */ + 0xC1E7, 0xC1E8, 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, 0xC1ED, 0xC1EE, /* 0x40 */ + 0xC1EF, 0xC1F0, 0, 0xC1F1, 0xC1F2, 0xC1F3, 0xC1F4, 0xC1F5, /* 0x50 */ + 0xC1F6, 0xC1F7, 0xC1F8, 0xC1F9, 0xC1FA, 0xC1FB, 0, 0, /* 0x50 */ + 0, 0xC1FC, 0xC1FD, 0xC1FE, 0xC1FF, 0xC200, 0xC201, 0xC202, /* 0x60 */ + 0xC203, 0xC204, 0xC205, 0xC206, 0xC207, 0xC208, 0xC209, 0xC20A, /* 0x60 */ + 0xC20B, 0xC20C, 0, 0xC20D, 0xC20E, 0xC20F, 0xC210, 0xC211, /* 0x70 */ + 0xC212, 0xC213, 0xC214, 0xC215, 0xC216, 0xC217, 0, 0, /* 0x70 */ + 0, 0xC218, 0xC219, 0xC21A, 0xC21B, 0xC21C, 0xC21D, 0xC21E, /* 0x80 */ + 0xC21F, 0xC220, 0xC221, 0xC222, 0xC223, 0xC224, 0xC225, 0xC226, /* 0x80 */ + 0xC227, 0xC228, 0, 0xC229, 0xC22A, 0xC22B, 0xC22C, 0xC22D, /* 0x90 */ + 0xC22E, 0xC22F, 0xC230, 0xC231, 0xC232, 0xC233, 0, 0, /* 0x90 */ + 0, 0xC234, 0xC235, 0xC236, 0xC237, 0xC238, 0xC239, 0xC23A, /* 0xA0 */ + 0xC23B, 0xC23C, 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242, /* 0xA0 */ + 0xC243, 0xC244, 0, 0xC245, 0xC246, 0xC247, 0xC248, 0xC249, /* 0xB0 */ + 0xC24A, 0xC24B, 0xC24C, 0xC24D, 0xC24E, 0xC24F, 0, 0, /* 0xB0 */ + 0, 0xC250, 0xC251, 0xC252, 0xC253, 0xC254, 0xC255, 0xC256, /* 0xC0 */ + 0xC257, 0xC258, 0xC259, 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, /* 0xC0 */ + 0xC25F, 0xC260, 0, 0xC261, 0xC262, 0xC263, 0xC264, 0xC265, /* 0xD0 */ + 0xC266, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B, 0, 0, /* 0xD0 */ + 0, 0xC26C, 0xC26D, 0xC26E, 0xC26F, 0xC270, 0xC271, 0xC272, /* 0xE0 */ + 0xC273, 0xC274, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, 0xC27A, /* 0xE0 */ + 0xC27B, 0xC27C, 0, 0xC27D, 0xC27E, 0xC27F, 0xC280, 0xC281, /* 0xF0 */ + 0xC282, 0xC283, 0xC284, 0xC285, 0xC286, 0xC287 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_AF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, /* 0x40 */ + 0xC28F, 0xC290, 0xC291, 0xC292, 0xC293, 0xC294, 0xC295, 0xC296, /* 0x40 */ + 0xC297, 0xC298, 0, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, /* 0x50 */ + 0xC29E, 0xC29F, 0xC2A0, 0xC2A1, 0xC2A2, 0xC2A3, 0, 0, /* 0x50 */ + 0, 0xC2A4, 0xC2A5, 0xC2A6, 0xC2A7, 0xC2A8, 0xC2A9, 0xC2AA, /* 0x60 */ + 0xC2AB, 0xC2AC, 0xC2AD, 0xC2AE, 0xC2AF, 0xC2B0, 0xC2B1, 0xC2B2, /* 0x60 */ + 0xC2B3, 0xC2B4, 0, 0xC2B5, 0xC2B6, 0xC2B7, 0xC2B8, 0xC2B9, /* 0x70 */ + 0xC2BA, 0xC2BB, 0xC2BC, 0xC2BD, 0xC2BE, 0xC2BF, 0, 0, /* 0x70 */ + 0, 0xC2C0, 0xC2C1, 0xC2C2, 0xC2C3, 0xC2C4, 0xC2C5, 0xC2C6, /* 0x80 */ + 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, 0xC2CD, 0xC2CE, /* 0x80 */ + 0xC2CF, 0xC2D0, 0, 0xC2D1, 0xC2D2, 0xC2D3, 0xC2D4, 0xC2D5, /* 0x90 */ + 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0, 0, /* 0x90 */ + 0, 0xC2DC, 0xC2DD, 0xC2DE, 0xC2DF, 0xC2E0, 0xC2E1, 0xC2E2, /* 0xA0 */ + 0xC2E3, 0xC2E4, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, 0xC2E9, 0xC2EA, /* 0xA0 */ + 0xC2EB, 0xC2EC, 0, 0xC2ED, 0xC2EE, 0xC2EF, 0xC2F0, 0xC2F1, /* 0xB0 */ + 0xC2F2, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F6, 0xC2F7 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3146, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC2F8, 0xC2F9, 0xC2FA, 0xC2FB, 0xC2FC, 0xC2FD, 0xC2FE, /* 0x60 */ + 0xC2FF, 0xC300, 0xC301, 0xC302, 0xC303, 0xC304, 0xC305, 0xC306, /* 0x60 */ + 0xC307, 0xC308, 0, 0xC309, 0xC30A, 0xC30B, 0xC30C, 0xC30D, /* 0x70 */ + 0xC30E, 0xC30F, 0xC310, 0xC311, 0xC312, 0xC313, 0, 0, /* 0x70 */ + 0, 0xC314, 0xC315, 0xC316, 0xC317, 0xC318, 0xC319, 0xC31A, /* 0x80 */ + 0xC31B, 0xC31C, 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, /* 0x80 */ + 0xC323, 0xC324, 0, 0xC325, 0xC326, 0xC327, 0xC328, 0xC329, /* 0x90 */ + 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F, 0, 0, /* 0x90 */ + 0, 0xC330, 0xC331, 0xC332, 0xC333, 0xC334, 0xC335, 0xC336, /* 0xA0 */ + 0xC337, 0xC338, 0xC339, 0xC33A, 0xC33B, 0xC33C, 0xC33D, 0xC33E, /* 0xA0 */ + 0xC33F, 0xC340, 0, 0xC341, 0xC342, 0xC343, 0xC344, 0xC345, /* 0xB0 */ + 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0, 0, /* 0xB0 */ + 0, 0xC34C, 0xC34D, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC352, /* 0xC0 */ + 0xC353, 0xC354, 0xC355, 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, /* 0xC0 */ + 0xC35B, 0xC35C, 0, 0xC35D, 0xC35E, 0xC35F, 0xC360, 0xC361, /* 0xD0 */ + 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0, 0, /* 0xD0 */ + 0, 0xC368, 0xC369, 0xC36A, 0xC36B, 0xC36C, 0xC36D, 0xC36E, /* 0xE0 */ + 0xC36F, 0xC370, 0xC371, 0xC372, 0xC373, 0xC374, 0xC375, 0xC376, /* 0xE0 */ + 0xC377, 0xC378, 0, 0xC379, 0xC37A, 0xC37B, 0xC37C, 0xC37D, /* 0xF0 */ + 0xC37E, 0xC37F, 0xC380, 0xC381, 0xC382, 0xC383 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC384, 0xC385, 0xC386, 0xC387, 0xC388, 0xC389, 0xC38A, /* 0x40 */ + 0xC38B, 0xC38C, 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC392, /* 0x40 */ + 0xC393, 0xC394, 0, 0xC395, 0xC396, 0xC397, 0xC398, 0xC399, /* 0x50 */ + 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0, 0, /* 0x50 */ + 0, 0xC3A0, 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, /* 0x60 */ + 0xC3A7, 0xC3A8, 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, /* 0x60 */ + 0xC3AF, 0xC3B0, 0, 0xC3B1, 0xC3B2, 0xC3B3, 0xC3B4, 0xC3B5, /* 0x70 */ + 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, 0xC3BA, 0xC3BB, 0, 0, /* 0x70 */ + 0, 0xC3BC, 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C0, 0xC3C1, 0xC3C2, /* 0x80 */ + 0xC3C3, 0xC3C4, 0xC3C5, 0xC3C6, 0xC3C7, 0xC3C8, 0xC3C9, 0xC3CA, /* 0x80 */ + 0xC3CB, 0xC3CC, 0, 0xC3CD, 0xC3CE, 0xC3CF, 0xC3D0, 0xC3D1, /* 0x90 */ + 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5, 0xC3D6, 0xC3D7, 0, 0, /* 0x90 */ + 0, 0xC3D8, 0xC3D9, 0xC3DA, 0xC3DB, 0xC3DC, 0xC3DD, 0xC3DE, /* 0xA0 */ + 0xC3DF, 0xC3E0, 0xC3E1, 0xC3E2, 0xC3E3, 0xC3E4, 0xC3E5, 0xC3E6, /* 0xA0 */ + 0xC3E7, 0xC3E8, 0, 0xC3E9, 0xC3EA, 0xC3EB, 0xC3EC, 0xC3ED, /* 0xB0 */ + 0xC3EE, 0xC3EF, 0xC3F0, 0xC3F1, 0xC3F2, 0xC3F3, 0, 0, /* 0xB0 */ + 0, 0xC3F4, 0xC3F5, 0xC3F6, 0xC3F7, 0xC3F8, 0xC3F9, 0xC3FA, /* 0xC0 */ + 0xC3FB, 0xC3FC, 0xC3FD, 0xC3FE, 0xC3FF, 0xC400, 0xC401, 0xC402, /* 0xC0 */ + 0xC403, 0xC404, 0, 0xC405, 0xC406, 0xC407, 0xC408, 0xC409, /* 0xD0 */ + 0xC40A, 0xC40B, 0xC40C, 0xC40D, 0xC40E, 0xC40F, 0, 0, /* 0xD0 */ + 0, 0xC410, 0xC411, 0xC412, 0xC413, 0xC414, 0xC415, 0xC416, /* 0xE0 */ + 0xC417, 0xC418, 0xC419, 0xC41A, 0xC41B, 0xC41C, 0xC41D, 0xC41E, /* 0xE0 */ + 0xC41F, 0xC420, 0, 0xC421, 0xC422, 0xC423, 0xC424, 0xC425, /* 0xF0 */ + 0xC426, 0xC427, 0xC428, 0xC429, 0xC42A, 0xC42B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC42C, 0xC42D, 0xC42E, 0xC42F, 0xC430, 0xC431, 0xC432, /* 0x40 */ + 0xC433, 0xC434, 0xC435, 0xC436, 0xC437, 0xC438, 0xC439, 0xC43A, /* 0x40 */ + 0xC43B, 0xC43C, 0, 0xC43D, 0xC43E, 0xC43F, 0xC440, 0xC441, /* 0x50 */ + 0xC442, 0xC443, 0xC444, 0xC445, 0xC446, 0xC447, 0, 0, /* 0x50 */ + 0, 0xC448, 0xC449, 0xC44A, 0xC44B, 0xC44C, 0xC44D, 0xC44E, /* 0x60 */ + 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, 0xC454, 0xC455, 0xC456, /* 0x60 */ + 0xC457, 0xC458, 0, 0xC459, 0xC45A, 0xC45B, 0xC45C, 0xC45D, /* 0x70 */ + 0xC45E, 0xC45F, 0xC460, 0xC461, 0xC462, 0xC463, 0, 0, /* 0x70 */ + 0, 0xC464, 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, 0xC46A, /* 0x80 */ + 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC472, /* 0x80 */ + 0xC473, 0xC474, 0, 0xC475, 0xC476, 0xC477, 0xC478, 0xC479, /* 0x90 */ + 0xC47A, 0xC47B, 0xC47C, 0xC47D, 0xC47E, 0xC47F, 0, 0, /* 0x90 */ + 0, 0xC480, 0xC481, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, /* 0xA0 */ + 0xC487, 0xC488, 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, /* 0xA0 */ + 0xC48F, 0xC490, 0, 0xC491, 0xC492, 0xC493, 0xC494, 0xC495, /* 0xB0 */ + 0xC496, 0xC497, 0xC498, 0xC499, 0xC49A, 0xC49B, 0, 0, /* 0xB0 */ + 0, 0xC49C, 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2, /* 0xC0 */ + 0xC4A3, 0xC4A4, 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9, 0xC4AA, /* 0xC0 */ + 0xC4AB, 0xC4AC, 0, 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, /* 0xD0 */ + 0xC4B2, 0xC4B3, 0xC4B4, 0xC4B5, 0xC4B6, 0xC4B7, 0, 0, /* 0xD0 */ + 0, 0xC4B8, 0xC4B9, 0xC4BA, 0xC4BB, 0xC4BC, 0xC4BD, 0xC4BE, /* 0xE0 */ + 0xC4BF, 0xC4C0, 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, 0xC4C6, /* 0xE0 */ + 0xC4C7, 0xC4C8, 0, 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, /* 0xF0 */ + 0xC4CE, 0xC4CF, 0xC4D0, 0xC4D1, 0xC4D2, 0xC4D3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC4D4, 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA, /* 0x40 */ + 0xC4DB, 0xC4DC, 0xC4DD, 0xC4DE, 0xC4DF, 0xC4E0, 0xC4E1, 0xC4E2, /* 0x40 */ + 0xC4E3, 0xC4E4, 0, 0xC4E5, 0xC4E6, 0xC4E7, 0xC4E8, 0xC4E9, /* 0x50 */ + 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED, 0xC4EE, 0xC4EF, 0, 0, /* 0x50 */ + 0, 0xC4F0, 0xC4F1, 0xC4F2, 0xC4F3, 0xC4F4, 0xC4F5, 0xC4F6, /* 0x60 */ + 0xC4F7, 0xC4F8, 0xC4F9, 0xC4FA, 0xC4FB, 0xC4FC, 0xC4FD, 0xC4FE, /* 0x60 */ + 0xC4FF, 0xC500, 0, 0xC501, 0xC502, 0xC503, 0xC504, 0xC505, /* 0x70 */ + 0xC506, 0xC507, 0xC508, 0xC509, 0xC50A, 0xC50B, 0, 0, /* 0x70 */ + 0, 0xC50C, 0xC50D, 0xC50E, 0xC50F, 0xC510, 0xC511, 0xC512, /* 0x80 */ + 0xC513, 0xC514, 0xC515, 0xC516, 0xC517, 0xC518, 0xC519, 0xC51A, /* 0x80 */ + 0xC51B, 0xC51C, 0, 0xC51D, 0xC51E, 0xC51F, 0xC520, 0xC521, /* 0x90 */ + 0xC522, 0xC523, 0xC524, 0xC525, 0xC526, 0xC527, 0, 0, /* 0x90 */ + 0, 0xC528, 0xC529, 0xC52A, 0xC52B, 0xC52C, 0xC52D, 0xC52E, /* 0xA0 */ + 0xC52F, 0xC530, 0xC531, 0xC532, 0xC533, 0xC534, 0xC535, 0xC536, /* 0xA0 */ + 0xC537, 0xC538, 0, 0xC539, 0xC53A, 0xC53B, 0xC53C, 0xC53D, /* 0xB0 */ + 0xC53E, 0xC53F, 0xC540, 0xC541, 0xC542, 0xC543 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3147, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, 0xC549, 0xC54A, /* 0x60 */ + 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xC54F, 0xC550, 0xC551, 0xC552, /* 0x60 */ + 0xC553, 0xC554, 0, 0xC555, 0xC556, 0xC557, 0xC558, 0xC559, /* 0x70 */ + 0xC55A, 0xC55B, 0xC55C, 0xC55D, 0xC55E, 0xC55F, 0, 0, /* 0x70 */ + 0, 0xC560, 0xC561, 0xC562, 0xC563, 0xC564, 0xC565, 0xC566, /* 0x80 */ + 0xC567, 0xC568, 0xC569, 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, /* 0x80 */ + 0xC56F, 0xC570, 0, 0xC571, 0xC572, 0xC573, 0xC574, 0xC575, /* 0x90 */ + 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0, 0, /* 0x90 */ + 0, 0xC57C, 0xC57D, 0xC57E, 0xC57F, 0xC580, 0xC581, 0xC582, /* 0xA0 */ + 0xC583, 0xC584, 0xC585, 0xC586, 0xC587, 0xC588, 0xC589, 0xC58A, /* 0xA0 */ + 0xC58B, 0xC58C, 0, 0xC58D, 0xC58E, 0xC58F, 0xC590, 0xC591, /* 0xB0 */ + 0xC592, 0xC593, 0xC594, 0xC595, 0xC596, 0xC597, 0, 0, /* 0xB0 */ + 0, 0xC598, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, /* 0xC0 */ + 0xC59F, 0xC5A0, 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6, /* 0xC0 */ + 0xC5A7, 0xC5A8, 0, 0xC5A9, 0xC5AA, 0xC5AB, 0xC5AC, 0xC5AD, /* 0xD0 */ + 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, 0xC5B2, 0xC5B3, 0, 0, /* 0xD0 */ + 0, 0xC5B4, 0xC5B5, 0xC5B6, 0xC5B7, 0xC5B8, 0xC5B9, 0xC5BA, /* 0xE0 */ + 0xC5BB, 0xC5BC, 0xC5BD, 0xC5BE, 0xC5BF, 0xC5C0, 0xC5C1, 0xC5C2, /* 0xE0 */ + 0xC5C3, 0xC5C4, 0, 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9, /* 0xF0 */ + 0xC5CA, 0xC5CB, 0xC5CC, 0xC5CD, 0xC5CE, 0xC5CF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC5D0, 0xC5D1, 0xC5D2, 0xC5D3, 0xC5D4, 0xC5D5, 0xC5D6, /* 0x40 */ + 0xC5D7, 0xC5D8, 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, /* 0x40 */ + 0xC5DF, 0xC5E0, 0, 0xC5E1, 0xC5E2, 0xC5E3, 0xC5E4, 0xC5E5, /* 0x50 */ + 0xC5E6, 0xC5E7, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0, 0, /* 0x50 */ + 0, 0xC5EC, 0xC5ED, 0xC5EE, 0xC5EF, 0xC5F0, 0xC5F1, 0xC5F2, /* 0x60 */ + 0xC5F3, 0xC5F4, 0xC5F5, 0xC5F6, 0xC5F7, 0xC5F8, 0xC5F9, 0xC5FA, /* 0x60 */ + 0xC5FB, 0xC5FC, 0, 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, 0xC601, /* 0x70 */ + 0xC602, 0xC603, 0xC604, 0xC605, 0xC606, 0xC607, 0, 0, /* 0x70 */ + 0, 0xC608, 0xC609, 0xC60A, 0xC60B, 0xC60C, 0xC60D, 0xC60E, /* 0x80 */ + 0xC60F, 0xC610, 0xC611, 0xC612, 0xC613, 0xC614, 0xC615, 0xC616, /* 0x80 */ + 0xC617, 0xC618, 0, 0xC619, 0xC61A, 0xC61B, 0xC61C, 0xC61D, /* 0x90 */ + 0xC61E, 0xC61F, 0xC620, 0xC621, 0xC622, 0xC623, 0, 0, /* 0x90 */ + 0, 0xC624, 0xC625, 0xC626, 0xC627, 0xC628, 0xC629, 0xC62A, /* 0xA0 */ + 0xC62B, 0xC62C, 0xC62D, 0xC62E, 0xC62F, 0xC630, 0xC631, 0xC632, /* 0xA0 */ + 0xC633, 0xC634, 0, 0xC635, 0xC636, 0xC637, 0xC638, 0xC639, /* 0xB0 */ + 0xC63A, 0xC63B, 0xC63C, 0xC63D, 0xC63E, 0xC63F, 0, 0, /* 0xB0 */ + 0, 0xC640, 0xC641, 0xC642, 0xC643, 0xC644, 0xC645, 0xC646, /* 0xC0 */ + 0xC647, 0xC648, 0xC649, 0xC64A, 0xC64B, 0xC64C, 0xC64D, 0xC64E, /* 0xC0 */ + 0xC64F, 0xC650, 0, 0xC651, 0xC652, 0xC653, 0xC654, 0xC655, /* 0xD0 */ + 0xC656, 0xC657, 0xC658, 0xC659, 0xC65A, 0xC65B, 0, 0, /* 0xD0 */ + 0, 0xC65C, 0xC65D, 0xC65E, 0xC65F, 0xC660, 0xC661, 0xC662, /* 0xE0 */ + 0xC663, 0xC664, 0xC665, 0xC666, 0xC667, 0xC668, 0xC669, 0xC66A, /* 0xE0 */ + 0xC66B, 0xC66C, 0, 0xC66D, 0xC66E, 0xC66F, 0xC670, 0xC671, /* 0xF0 */ + 0xC672, 0xC673, 0xC674, 0xC675, 0xC676, 0xC677 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC678, 0xC679, 0xC67A, 0xC67B, 0xC67C, 0xC67D, 0xC67E, /* 0x40 */ + 0xC67F, 0xC680, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xC686, /* 0x40 */ + 0xC687, 0xC688, 0, 0xC689, 0xC68A, 0xC68B, 0xC68C, 0xC68D, /* 0x50 */ + 0xC68E, 0xC68F, 0xC690, 0xC691, 0xC692, 0xC693, 0, 0, /* 0x50 */ + 0, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xC699, 0xC69A, /* 0x60 */ + 0xC69B, 0xC69C, 0xC69D, 0xC69E, 0xC69F, 0xC6A0, 0xC6A1, 0xC6A2, /* 0x60 */ + 0xC6A3, 0xC6A4, 0, 0xC6A5, 0xC6A6, 0xC6A7, 0xC6A8, 0xC6A9, /* 0x70 */ + 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, 0, 0, /* 0x70 */ + 0, 0xC6B0, 0xC6B1, 0xC6B2, 0xC6B3, 0xC6B4, 0xC6B5, 0xC6B6, /* 0x80 */ + 0xC6B7, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6BB, 0xC6BC, 0xC6BD, 0xC6BE, /* 0x80 */ + 0xC6BF, 0xC6C0, 0, 0xC6C1, 0xC6C2, 0xC6C3, 0xC6C4, 0xC6C5, /* 0x90 */ + 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, 0xC6CA, 0xC6CB, 0, 0, /* 0x90 */ + 0, 0xC6CC, 0xC6CD, 0xC6CE, 0xC6CF, 0xC6D0, 0xC6D1, 0xC6D2, /* 0xA0 */ + 0xC6D3, 0xC6D4, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, 0xC6DA, /* 0xA0 */ + 0xC6DB, 0xC6DC, 0, 0xC6DD, 0xC6DE, 0xC6DF, 0xC6E0, 0xC6E1, /* 0xB0 */ + 0xC6E2, 0xC6E3, 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0, 0, /* 0xB0 */ + 0, 0xC6E8, 0xC6E9, 0xC6EA, 0xC6EB, 0xC6EC, 0xC6ED, 0xC6EE, /* 0xC0 */ + 0xC6EF, 0xC6F0, 0xC6F1, 0xC6F2, 0xC6F3, 0xC6F4, 0xC6F5, 0xC6F6, /* 0xC0 */ + 0xC6F7, 0xC6F8, 0, 0xC6F9, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FD, /* 0xD0 */ + 0xC6FE, 0xC6FF, 0xC700, 0xC701, 0xC702, 0xC703, 0, 0, /* 0xD0 */ + 0, 0xC704, 0xC705, 0xC706, 0xC707, 0xC708, 0xC709, 0xC70A, /* 0xE0 */ + 0xC70B, 0xC70C, 0xC70D, 0xC70E, 0xC70F, 0xC710, 0xC711, 0xC712, /* 0xE0 */ + 0xC713, 0xC714, 0, 0xC715, 0xC716, 0xC717, 0xC718, 0xC719, /* 0xF0 */ + 0xC71A, 0xC71B, 0xC71C, 0xC71D, 0xC71E, 0xC71F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC720, 0xC721, 0xC722, 0xC723, 0xC724, 0xC725, 0xC726, /* 0x40 */ + 0xC727, 0xC728, 0xC729, 0xC72A, 0xC72B, 0xC72C, 0xC72D, 0xC72E, /* 0x40 */ + 0xC72F, 0xC730, 0, 0xC731, 0xC732, 0xC733, 0xC734, 0xC735, /* 0x50 */ + 0xC736, 0xC737, 0xC738, 0xC739, 0xC73A, 0xC73B, 0, 0, /* 0x50 */ + 0, 0xC73C, 0xC73D, 0xC73E, 0xC73F, 0xC740, 0xC741, 0xC742, /* 0x60 */ + 0xC743, 0xC744, 0xC745, 0xC746, 0xC747, 0xC748, 0xC749, 0xC74A, /* 0x60 */ + 0xC74B, 0xC74C, 0, 0xC74D, 0xC74E, 0xC74F, 0xC750, 0xC751, /* 0x70 */ + 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, 0, 0, /* 0x70 */ + 0, 0xC758, 0xC759, 0xC75A, 0xC75B, 0xC75C, 0xC75D, 0xC75E, /* 0x80 */ + 0xC75F, 0xC760, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, /* 0x80 */ + 0xC767, 0xC768, 0, 0xC769, 0xC76A, 0xC76B, 0xC76C, 0xC76D, /* 0x90 */ + 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC772, 0xC773, 0, 0, /* 0x90 */ + 0, 0xC774, 0xC775, 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, /* 0xA0 */ + 0xC77B, 0xC77C, 0xC77D, 0xC77E, 0xC77F, 0xC780, 0xC781, 0xC782, /* 0xA0 */ + 0xC783, 0xC784, 0, 0xC785, 0xC786, 0xC787, 0xC788, 0xC789, /* 0xB0 */ + 0xC78A, 0xC78B, 0xC78C, 0xC78D, 0xC78E, 0xC78F /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3148, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC790, 0xC791, 0xC792, 0xC793, 0xC794, 0xC795, 0xC796, /* 0x60 */ + 0xC797, 0xC798, 0xC799, 0xC79A, 0xC79B, 0xC79C, 0xC79D, 0xC79E, /* 0x60 */ + 0xC79F, 0xC7A0, 0, 0xC7A1, 0xC7A2, 0xC7A3, 0xC7A4, 0xC7A5, /* 0x70 */ + 0xC7A6, 0xC7A7, 0xC7A8, 0xC7A9, 0xC7AA, 0xC7AB, 0, 0, /* 0x70 */ + 0, 0xC7AC, 0xC7AD, 0xC7AE, 0xC7AF, 0xC7B0, 0xC7B1, 0xC7B2, /* 0x80 */ + 0xC7B3, 0xC7B4, 0xC7B5, 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, /* 0x80 */ + 0xC7BB, 0xC7BC, 0, 0xC7BD, 0xC7BE, 0xC7BF, 0xC7C0, 0xC7C1, /* 0x90 */ + 0xC7C2, 0xC7C3, 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, 0, 0, /* 0x90 */ + 0, 0xC7C8, 0xC7C9, 0xC7CA, 0xC7CB, 0xC7CC, 0xC7CD, 0xC7CE, /* 0xA0 */ + 0xC7CF, 0xC7D0, 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, /* 0xA0 */ + 0xC7D7, 0xC7D8, 0, 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC, 0xC7DD, /* 0xB0 */ + 0xC7DE, 0xC7DF, 0xC7E0, 0xC7E1, 0xC7E2, 0xC7E3, 0, 0, /* 0xB0 */ + 0, 0xC7E4, 0xC7E5, 0xC7E6, 0xC7E7, 0xC7E8, 0xC7E9, 0xC7EA, /* 0xC0 */ + 0xC7EB, 0xC7EC, 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, 0xC7F1, 0xC7F2, /* 0xC0 */ + 0xC7F3, 0xC7F4, 0, 0xC7F5, 0xC7F6, 0xC7F7, 0xC7F8, 0xC7F9, /* 0xD0 */ + 0xC7FA, 0xC7FB, 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0, 0, /* 0xD0 */ + 0, 0xC800, 0xC801, 0xC802, 0xC803, 0xC804, 0xC805, 0xC806, /* 0xE0 */ + 0xC807, 0xC808, 0xC809, 0xC80A, 0xC80B, 0xC80C, 0xC80D, 0xC80E, /* 0xE0 */ + 0xC80F, 0xC810, 0, 0xC811, 0xC812, 0xC813, 0xC814, 0xC815, /* 0xF0 */ + 0xC816, 0xC817, 0xC818, 0xC819, 0xC81A, 0xC81B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC81C, 0xC81D, 0xC81E, 0xC81F, 0xC820, 0xC821, 0xC822, /* 0x40 */ + 0xC823, 0xC824, 0xC825, 0xC826, 0xC827, 0xC828, 0xC829, 0xC82A, /* 0x40 */ + 0xC82B, 0xC82C, 0, 0xC82D, 0xC82E, 0xC82F, 0xC830, 0xC831, /* 0x50 */ + 0xC832, 0xC833, 0xC834, 0xC835, 0xC836, 0xC837, 0, 0, /* 0x50 */ + 0, 0xC838, 0xC839, 0xC83A, 0xC83B, 0xC83C, 0xC83D, 0xC83E, /* 0x60 */ + 0xC83F, 0xC840, 0xC841, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, /* 0x60 */ + 0xC847, 0xC848, 0, 0xC849, 0xC84A, 0xC84B, 0xC84C, 0xC84D, /* 0x70 */ + 0xC84E, 0xC84F, 0xC850, 0xC851, 0xC852, 0xC853, 0, 0, /* 0x70 */ + 0, 0xC854, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, /* 0x80 */ + 0xC85B, 0xC85C, 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, /* 0x80 */ + 0xC863, 0xC864, 0, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, /* 0x90 */ + 0xC86A, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0, 0, /* 0x90 */ + 0, 0xC870, 0xC871, 0xC872, 0xC873, 0xC874, 0xC875, 0xC876, /* 0xA0 */ + 0xC877, 0xC878, 0xC879, 0xC87A, 0xC87B, 0xC87C, 0xC87D, 0xC87E, /* 0xA0 */ + 0xC87F, 0xC880, 0, 0xC881, 0xC882, 0xC883, 0xC884, 0xC885, /* 0xB0 */ + 0xC886, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0, 0, /* 0xB0 */ + 0, 0xC88C, 0xC88D, 0xC88E, 0xC88F, 0xC890, 0xC891, 0xC892, /* 0xC0 */ + 0xC893, 0xC894, 0xC895, 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, /* 0xC0 */ + 0xC89B, 0xC89C, 0, 0xC89D, 0xC89E, 0xC89F, 0xC8A0, 0xC8A1, /* 0xD0 */ + 0xC8A2, 0xC8A3, 0xC8A4, 0xC8A5, 0xC8A6, 0xC8A7, 0, 0, /* 0xD0 */ + 0, 0xC8A8, 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, 0xC8AE, /* 0xE0 */ + 0xC8AF, 0xC8B0, 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, /* 0xE0 */ + 0xC8B7, 0xC8B8, 0, 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BC, 0xC8BD, /* 0xF0 */ + 0xC8BE, 0xC8BF, 0xC8C0, 0xC8C1, 0xC8C2, 0xC8C3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC8C4, 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C8, 0xC8C9, 0xC8CA, /* 0x40 */ + 0xC8CB, 0xC8CC, 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D2, /* 0x40 */ + 0xC8D3, 0xC8D4, 0, 0xC8D5, 0xC8D6, 0xC8D7, 0xC8D8, 0xC8D9, /* 0x50 */ + 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, 0xC8DE, 0xC8DF, 0, 0, /* 0x50 */ + 0, 0xC8E0, 0xC8E1, 0xC8E2, 0xC8E3, 0xC8E4, 0xC8E5, 0xC8E6, /* 0x60 */ + 0xC8E7, 0xC8E8, 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, 0xC8ED, 0xC8EE, /* 0x60 */ + 0xC8EF, 0xC8F0, 0, 0xC8F1, 0xC8F2, 0xC8F3, 0xC8F4, 0xC8F5, /* 0x70 */ + 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB, 0, 0, /* 0x70 */ + 0, 0xC8FC, 0xC8FD, 0xC8FE, 0xC8FF, 0xC900, 0xC901, 0xC902, /* 0x80 */ + 0xC903, 0xC904, 0xC905, 0xC906, 0xC907, 0xC908, 0xC909, 0xC90A, /* 0x80 */ + 0xC90B, 0xC90C, 0, 0xC90D, 0xC90E, 0xC90F, 0xC910, 0xC911, /* 0x90 */ + 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917, 0, 0, /* 0x90 */ + 0, 0xC918, 0xC919, 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, /* 0xA0 */ + 0xC91F, 0xC920, 0xC921, 0xC922, 0xC923, 0xC924, 0xC925, 0xC926, /* 0xA0 */ + 0xC927, 0xC928, 0, 0xC929, 0xC92A, 0xC92B, 0xC92C, 0xC92D, /* 0xB0 */ + 0xC92E, 0xC92F, 0xC930, 0xC931, 0xC932, 0xC933, 0, 0, /* 0xB0 */ + 0, 0xC934, 0xC935, 0xC936, 0xC937, 0xC938, 0xC939, 0xC93A, /* 0xC0 */ + 0xC93B, 0xC93C, 0xC93D, 0xC93E, 0xC93F, 0xC940, 0xC941, 0xC942, /* 0xC0 */ + 0xC943, 0xC944, 0, 0xC945, 0xC946, 0xC947, 0xC948, 0xC949, /* 0xD0 */ + 0xC94A, 0xC94B, 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0, 0, /* 0xD0 */ + 0, 0xC950, 0xC951, 0xC952, 0xC953, 0xC954, 0xC955, 0xC956, /* 0xE0 */ + 0xC957, 0xC958, 0xC959, 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E, /* 0xE0 */ + 0xC95F, 0xC960, 0, 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, /* 0xF0 */ + 0xC966, 0xC967, 0xC968, 0xC969, 0xC96A, 0xC96B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC96C, 0xC96D, 0xC96E, 0xC96F, 0xC970, 0xC971, 0xC972, /* 0x40 */ + 0xC973, 0xC974, 0xC975, 0xC976, 0xC977, 0xC978, 0xC979, 0xC97A, /* 0x40 */ + 0xC97B, 0xC97C, 0, 0xC97D, 0xC97E, 0xC97F, 0xC980, 0xC981, /* 0x50 */ + 0xC982, 0xC983, 0xC984, 0xC985, 0xC986, 0xC987, 0, 0, /* 0x50 */ + 0, 0xC988, 0xC989, 0xC98A, 0xC98B, 0xC98C, 0xC98D, 0xC98E, /* 0x60 */ + 0xC98F, 0xC990, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, /* 0x60 */ + 0xC997, 0xC998, 0, 0xC999, 0xC99A, 0xC99B, 0xC99C, 0xC99D, /* 0x70 */ + 0xC99E, 0xC99F, 0xC9A0, 0xC9A1, 0xC9A2, 0xC9A3, 0, 0, /* 0x70 */ + 0, 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, 0xC9AA, /* 0x80 */ + 0xC9AB, 0xC9AC, 0xC9AD, 0xC9AE, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, /* 0x80 */ + 0xC9B3, 0xC9B4, 0, 0xC9B5, 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, /* 0x90 */ + 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, 0xC9BE, 0xC9BF, 0, 0, /* 0x90 */ + 0, 0xC9C0, 0xC9C1, 0xC9C2, 0xC9C3, 0xC9C4, 0xC9C5, 0xC9C6, /* 0xA0 */ + 0xC9C7, 0xC9C8, 0xC9C9, 0xC9CA, 0xC9CB, 0xC9CC, 0xC9CD, 0xC9CE, /* 0xA0 */ + 0xC9CF, 0xC9D0, 0, 0xC9D1, 0xC9D2, 0xC9D3, 0xC9D4, 0xC9D5, /* 0xB0 */ + 0xC9D6, 0xC9D7, 0xC9D8, 0xC9D9, 0xC9DA, 0xC9DB /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3149, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC9DC, 0xC9DD, 0xC9DE, 0xC9DF, 0xC9E0, 0xC9E1, 0xC9E2, /* 0x60 */ + 0xC9E3, 0xC9E4, 0xC9E5, 0xC9E6, 0xC9E7, 0xC9E8, 0xC9E9, 0xC9EA, /* 0x60 */ + 0xC9EB, 0xC9EC, 0, 0xC9ED, 0xC9EE, 0xC9EF, 0xC9F0, 0xC9F1, /* 0x70 */ + 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5, 0xC9F6, 0xC9F7, 0, 0, /* 0x70 */ + 0, 0xC9F8, 0xC9F9, 0xC9FA, 0xC9FB, 0xC9FC, 0xC9FD, 0xC9FE, /* 0x80 */ + 0xC9FF, 0xCA00, 0xCA01, 0xCA02, 0xCA03, 0xCA04, 0xCA05, 0xCA06, /* 0x80 */ + 0xCA07, 0xCA08, 0, 0xCA09, 0xCA0A, 0xCA0B, 0xCA0C, 0xCA0D, /* 0x90 */ + 0xCA0E, 0xCA0F, 0xCA10, 0xCA11, 0xCA12, 0xCA13, 0, 0, /* 0x90 */ + 0, 0xCA14, 0xCA15, 0xCA16, 0xCA17, 0xCA18, 0xCA19, 0xCA1A, /* 0xA0 */ + 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F, 0xCA20, 0xCA21, 0xCA22, /* 0xA0 */ + 0xCA23, 0xCA24, 0, 0xCA25, 0xCA26, 0xCA27, 0xCA28, 0xCA29, /* 0xB0 */ + 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, 0xCA2E, 0xCA2F, 0, 0, /* 0xB0 */ + 0, 0xCA30, 0xCA31, 0xCA32, 0xCA33, 0xCA34, 0xCA35, 0xCA36, /* 0xC0 */ + 0xCA37, 0xCA38, 0xCA39, 0xCA3A, 0xCA3B, 0xCA3C, 0xCA3D, 0xCA3E, /* 0xC0 */ + 0xCA3F, 0xCA40, 0, 0xCA41, 0xCA42, 0xCA43, 0xCA44, 0xCA45, /* 0xD0 */ + 0xCA46, 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0, 0, /* 0xD0 */ + 0, 0xCA4C, 0xCA4D, 0xCA4E, 0xCA4F, 0xCA50, 0xCA51, 0xCA52, /* 0xE0 */ + 0xCA53, 0xCA54, 0xCA55, 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A, /* 0xE0 */ + 0xCA5B, 0xCA5C, 0, 0xCA5D, 0xCA5E, 0xCA5F, 0xCA60, 0xCA61, /* 0xF0 */ + 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA68, 0xCA69, 0xCA6A, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, /* 0x40 */ + 0xCA6F, 0xCA70, 0xCA71, 0xCA72, 0xCA73, 0xCA74, 0xCA75, 0xCA76, /* 0x40 */ + 0xCA77, 0xCA78, 0, 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, /* 0x50 */ + 0xCA7E, 0xCA7F, 0xCA80, 0xCA81, 0xCA82, 0xCA83, 0, 0, /* 0x50 */ + 0, 0xCA84, 0xCA85, 0xCA86, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, /* 0x60 */ + 0xCA8B, 0xCA8C, 0xCA8D, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, /* 0x60 */ + 0xCA93, 0xCA94, 0, 0xCA95, 0xCA96, 0xCA97, 0xCA98, 0xCA99, /* 0x70 */ + 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E, 0xCA9F, 0, 0, /* 0x70 */ + 0, 0xCAA0, 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, /* 0x80 */ + 0xCAA7, 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, /* 0x80 */ + 0xCAAF, 0xCAB0, 0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, /* 0x90 */ + 0xCAB6, 0xCAB7, 0xCAB8, 0xCAB9, 0xCABA, 0xCABB, 0, 0, /* 0x90 */ + 0, 0xCABC, 0xCABD, 0xCABE, 0xCABF, 0xCAC0, 0xCAC1, 0xCAC2, /* 0xA0 */ + 0xCAC3, 0xCAC4, 0xCAC5, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA, /* 0xA0 */ + 0xCACB, 0xCACC, 0, 0xCACD, 0xCACE, 0xCACF, 0xCAD0, 0xCAD1, /* 0xB0 */ + 0xCAD2, 0xCAD3, 0xCAD4, 0xCAD5, 0xCAD6, 0xCAD7, 0, 0, /* 0xB0 */ + 0, 0xCAD8, 0xCAD9, 0xCADA, 0xCADB, 0xCADC, 0xCADD, 0xCADE, /* 0xC0 */ + 0xCADF, 0xCAE0, 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4, 0xCAE5, 0xCAE6, /* 0xC0 */ + 0xCAE7, 0xCAE8, 0, 0xCAE9, 0xCAEA, 0xCAEB, 0xCAEC, 0xCAED, /* 0xD0 */ + 0xCAEE, 0xCAEF, 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3, 0, 0, /* 0xD0 */ + 0, 0xCAF4, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, 0xCAF9, 0xCAFA, /* 0xE0 */ + 0xCAFB, 0xCAFC, 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, 0xCB01, 0xCB02, /* 0xE0 */ + 0xCB03, 0xCB04, 0, 0xCB05, 0xCB06, 0xCB07, 0xCB08, 0xCB09, /* 0xF0 */ + 0xCB0A, 0xCB0B, 0xCB0C, 0xCB0D, 0xCB0E, 0xCB0F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCB10, 0xCB11, 0xCB12, 0xCB13, 0xCB14, 0xCB15, 0xCB16, /* 0x40 */ + 0xCB17, 0xCB18, 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, 0xCB1D, 0xCB1E, /* 0x40 */ + 0xCB1F, 0xCB20, 0, 0xCB21, 0xCB22, 0xCB23, 0xCB24, 0xCB25, /* 0x50 */ + 0xCB26, 0xCB27, 0xCB28, 0xCB29, 0xCB2A, 0xCB2B, 0, 0, /* 0x50 */ + 0, 0xCB2C, 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, 0xCB31, 0xCB32, /* 0x60 */ + 0xCB33, 0xCB34, 0xCB35, 0xCB36, 0xCB37, 0xCB38, 0xCB39, 0xCB3A, /* 0x60 */ + 0xCB3B, 0xCB3C, 0, 0xCB3D, 0xCB3E, 0xCB3F, 0xCB40, 0xCB41, /* 0x70 */ + 0xCB42, 0xCB43, 0xCB44, 0xCB45, 0xCB46, 0xCB47, 0, 0, /* 0x70 */ + 0, 0xCB48, 0xCB49, 0xCB4A, 0xCB4B, 0xCB4C, 0xCB4D, 0xCB4E, /* 0x80 */ + 0xCB4F, 0xCB50, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xCB55, 0xCB56, /* 0x80 */ + 0xCB57, 0xCB58, 0, 0xCB59, 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5D, /* 0x90 */ + 0xCB5E, 0xCB5F, 0xCB60, 0xCB61, 0xCB62, 0xCB63, 0, 0, /* 0x90 */ + 0, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A, /* 0xA0 */ + 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, /* 0xA0 */ + 0xCB73, 0xCB74, 0, 0xCB75, 0xCB76, 0xCB77, 0xCB78, 0xCB79, /* 0xB0 */ + 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, 0xCB7E, 0xCB7F, 0, 0, /* 0xB0 */ + 0, 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, 0xCB86, /* 0xC0 */ + 0xCB87, 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCB8E, /* 0xC0 */ + 0xCB8F, 0xCB90, 0, 0xCB91, 0xCB92, 0xCB93, 0xCB94, 0xCB95, /* 0xD0 */ + 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0, 0, /* 0xD0 */ + 0, 0xCB9C, 0xCB9D, 0xCB9E, 0xCB9F, 0xCBA0, 0xCBA1, 0xCBA2, /* 0xE0 */ + 0xCBA3, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, /* 0xE0 */ + 0xCBAB, 0xCBAC, 0, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0, 0xCBB1, /* 0xF0 */ + 0xCBB2, 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCBB8, 0xCBB9, 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, 0xCBBE, /* 0x40 */ + 0xCBBF, 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, 0xCBC4, 0xCBC5, 0xCBC6, /* 0x40 */ + 0xCBC7, 0xCBC8, 0, 0xCBC9, 0xCBCA, 0xCBCB, 0xCBCC, 0xCBCD, /* 0x50 */ + 0xCBCE, 0xCBCF, 0xCBD0, 0xCBD1, 0xCBD2, 0xCBD3, 0, 0, /* 0x50 */ + 0, 0xCBD4, 0xCBD5, 0xCBD6, 0xCBD7, 0xCBD8, 0xCBD9, 0xCBDA, /* 0x60 */ + 0xCBDB, 0xCBDC, 0xCBDD, 0xCBDE, 0xCBDF, 0xCBE0, 0xCBE1, 0xCBE2, /* 0x60 */ + 0xCBE3, 0xCBE4, 0, 0xCBE5, 0xCBE6, 0xCBE7, 0xCBE8, 0xCBE9, /* 0x70 */ + 0xCBEA, 0xCBEB, 0xCBEC, 0xCBED, 0xCBEE, 0xCBEF, 0, 0, /* 0x70 */ + 0, 0xCBF0, 0xCBF1, 0xCBF2, 0xCBF3, 0xCBF4, 0xCBF5, 0xCBF6, /* 0x80 */ + 0xCBF7, 0xCBF8, 0xCBF9, 0xCBFA, 0xCBFB, 0xCBFC, 0xCBFD, 0xCBFE, /* 0x80 */ + 0xCBFF, 0xCC00, 0, 0xCC01, 0xCC02, 0xCC03, 0xCC04, 0xCC05, /* 0x90 */ + 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B, 0, 0, /* 0x90 */ + 0, 0xCC0C, 0xCC0D, 0xCC0E, 0xCC0F, 0xCC10, 0xCC11, 0xCC12, /* 0xA0 */ + 0xCC13, 0xCC14, 0xCC15, 0xCC16, 0xCC17, 0xCC18, 0xCC19, 0xCC1A, /* 0xA0 */ + 0xCC1B, 0xCC1C, 0, 0xCC1D, 0xCC1E, 0xCC1F, 0xCC20, 0xCC21, /* 0xB0 */ + 0xCC22, 0xCC23, 0xCC24, 0xCC25, 0xCC26, 0xCC27 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x314A, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCC28, 0xCC29, 0xCC2A, 0xCC2B, 0xCC2C, 0xCC2D, 0xCC2E, /* 0x60 */ + 0xCC2F, 0xCC30, 0xCC31, 0xCC32, 0xCC33, 0xCC34, 0xCC35, 0xCC36, /* 0x60 */ + 0xCC37, 0xCC38, 0, 0xCC39, 0xCC3A, 0xCC3B, 0xCC3C, 0xCC3D, /* 0x70 */ + 0xCC3E, 0xCC3F, 0xCC40, 0xCC41, 0xCC42, 0xCC43, 0, 0, /* 0x70 */ + 0, 0xCC44, 0xCC45, 0xCC46, 0xCC47, 0xCC48, 0xCC49, 0xCC4A, /* 0x80 */ + 0xCC4B, 0xCC4C, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, /* 0x80 */ + 0xCC53, 0xCC54, 0, 0xCC55, 0xCC56, 0xCC57, 0xCC58, 0xCC59, /* 0x90 */ + 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0, 0, /* 0x90 */ + 0, 0xCC60, 0xCC61, 0xCC62, 0xCC63, 0xCC64, 0xCC65, 0xCC66, /* 0xA0 */ + 0xCC67, 0xCC68, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, /* 0xA0 */ + 0xCC6F, 0xCC70, 0, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC75, /* 0xB0 */ + 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, 0xCC7B, 0, 0, /* 0xB0 */ + 0, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC7F, 0xCC80, 0xCC81, 0xCC82, /* 0xC0 */ + 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, /* 0xC0 */ + 0xCC8B, 0xCC8C, 0, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91, /* 0xD0 */ + 0xCC92, 0xCC93, 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0, 0, /* 0xD0 */ + 0, 0xCC98, 0xCC99, 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, 0xCC9E, /* 0xE0 */ + 0xCC9F, 0xCCA0, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, /* 0xE0 */ + 0xCCA7, 0xCCA8, 0, 0xCCA9, 0xCCAA, 0xCCAB, 0xCCAC, 0xCCAD, /* 0xF0 */ + 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCCB4, 0xCCB5, 0xCCB6, 0xCCB7, 0xCCB8, 0xCCB9, 0xCCBA, /* 0x40 */ + 0xCCBB, 0xCCBC, 0xCCBD, 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, 0xCCC2, /* 0x40 */ + 0xCCC3, 0xCCC4, 0, 0xCCC5, 0xCCC6, 0xCCC7, 0xCCC8, 0xCCC9, /* 0x50 */ + 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF, 0, 0, /* 0x50 */ + 0, 0xCCD0, 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD4, 0xCCD5, 0xCCD6, /* 0x60 */ + 0xCCD7, 0xCCD8, 0xCCD9, 0xCCDA, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, /* 0x60 */ + 0xCCDF, 0xCCE0, 0, 0xCCE1, 0xCCE2, 0xCCE3, 0xCCE4, 0xCCE5, /* 0x70 */ + 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, 0xCCEB, 0, 0, /* 0x70 */ + 0, 0xCCEC, 0xCCED, 0xCCEE, 0xCCEF, 0xCCF0, 0xCCF1, 0xCCF2, /* 0x80 */ + 0xCCF3, 0xCCF4, 0xCCF5, 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, /* 0x80 */ + 0xCCFB, 0xCCFC, 0, 0xCCFD, 0xCCFE, 0xCCFF, 0xCD00, 0xCD01, /* 0x90 */ + 0xCD02, 0xCD03, 0xCD04, 0xCD05, 0xCD06, 0xCD07, 0, 0, /* 0x90 */ + 0, 0xCD08, 0xCD09, 0xCD0A, 0xCD0B, 0xCD0C, 0xCD0D, 0xCD0E, /* 0xA0 */ + 0xCD0F, 0xCD10, 0xCD11, 0xCD12, 0xCD13, 0xCD14, 0xCD15, 0xCD16, /* 0xA0 */ + 0xCD17, 0xCD18, 0, 0xCD19, 0xCD1A, 0xCD1B, 0xCD1C, 0xCD1D, /* 0xB0 */ + 0xCD1E, 0xCD1F, 0xCD20, 0xCD21, 0xCD22, 0xCD23, 0, 0, /* 0xB0 */ + 0, 0xCD24, 0xCD25, 0xCD26, 0xCD27, 0xCD28, 0xCD29, 0xCD2A, /* 0xC0 */ + 0xCD2B, 0xCD2C, 0xCD2D, 0xCD2E, 0xCD2F, 0xCD30, 0xCD31, 0xCD32, /* 0xC0 */ + 0xCD33, 0xCD34, 0, 0xCD35, 0xCD36, 0xCD37, 0xCD38, 0xCD39, /* 0xD0 */ + 0xCD3A, 0xCD3B, 0xCD3C, 0xCD3D, 0xCD3E, 0xCD3F, 0, 0, /* 0xD0 */ + 0, 0xCD40, 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, 0xCD46, /* 0xE0 */ + 0xCD47, 0xCD48, 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, /* 0xE0 */ + 0xCD4F, 0xCD50, 0, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, /* 0xF0 */ + 0xCD56, 0xCD57, 0xCD58, 0xCD59, 0xCD5A, 0xCD5B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCD5C, 0xCD5D, 0xCD5E, 0xCD5F, 0xCD60, 0xCD61, 0xCD62, /* 0x40 */ + 0xCD63, 0xCD64, 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, 0xCD6A, /* 0x40 */ + 0xCD6B, 0xCD6C, 0, 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, 0xCD71, /* 0x50 */ + 0xCD72, 0xCD73, 0xCD74, 0xCD75, 0xCD76, 0xCD77, 0, 0, /* 0x50 */ + 0, 0xCD78, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, 0xCD7E, /* 0x60 */ + 0xCD7F, 0xCD80, 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, /* 0x60 */ + 0xCD87, 0xCD88, 0, 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, /* 0x70 */ + 0xCD8E, 0xCD8F, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0, 0, /* 0x70 */ + 0, 0xCD94, 0xCD95, 0xCD96, 0xCD97, 0xCD98, 0xCD99, 0xCD9A, /* 0x80 */ + 0xCD9B, 0xCD9C, 0xCD9D, 0xCD9E, 0xCD9F, 0xCDA0, 0xCDA1, 0xCDA2, /* 0x80 */ + 0xCDA3, 0xCDA4, 0, 0xCDA5, 0xCDA6, 0xCDA7, 0xCDA8, 0xCDA9, /* 0x90 */ + 0xCDAA, 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF, 0, 0, /* 0x90 */ + 0, 0xCDB0, 0xCDB1, 0xCDB2, 0xCDB3, 0xCDB4, 0xCDB5, 0xCDB6, /* 0xA0 */ + 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, 0xCDBC, 0xCDBD, 0xCDBE, /* 0xA0 */ + 0xCDBF, 0xCDC0, 0, 0xCDC1, 0xCDC2, 0xCDC3, 0xCDC4, 0xCDC5, /* 0xB0 */ + 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0, 0, /* 0xB0 */ + 0, 0xCDCC, 0xCDCD, 0xCDCE, 0xCDCF, 0xCDD0, 0xCDD1, 0xCDD2, /* 0xC0 */ + 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, 0xCDD7, 0xCDD8, 0xCDD9, 0xCDDA, /* 0xC0 */ + 0xCDDB, 0xCDDC, 0, 0xCDDD, 0xCDDE, 0xCDDF, 0xCDE0, 0xCDE1, /* 0xD0 */ + 0xCDE2, 0xCDE3, 0xCDE4, 0xCDE5, 0xCDE6, 0xCDE7, 0, 0, /* 0xD0 */ + 0, 0xCDE8, 0xCDE9, 0xCDEA, 0xCDEB, 0xCDEC, 0xCDED, 0xCDEE, /* 0xE0 */ + 0xCDEF, 0xCDF0, 0xCDF1, 0xCDF2, 0xCDF3, 0xCDF4, 0xCDF5, 0xCDF6, /* 0xE0 */ + 0xCDF7, 0xCDF8, 0, 0xCDF9, 0xCDFA, 0xCDFB, 0xCDFC, 0xCDFD, /* 0xF0 */ + 0xCDFE, 0xCDFF, 0xCE00, 0xCE01, 0xCE02, 0xCE03 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCE04, 0xCE05, 0xCE06, 0xCE07, 0xCE08, 0xCE09, 0xCE0A, /* 0x40 */ + 0xCE0B, 0xCE0C, 0xCE0D, 0xCE0E, 0xCE0F, 0xCE10, 0xCE11, 0xCE12, /* 0x40 */ + 0xCE13, 0xCE14, 0, 0xCE15, 0xCE16, 0xCE17, 0xCE18, 0xCE19, /* 0x50 */ + 0xCE1A, 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, 0xCE1F, 0, 0, /* 0x50 */ + 0, 0xCE20, 0xCE21, 0xCE22, 0xCE23, 0xCE24, 0xCE25, 0xCE26, /* 0x60 */ + 0xCE27, 0xCE28, 0xCE29, 0xCE2A, 0xCE2B, 0xCE2C, 0xCE2D, 0xCE2E, /* 0x60 */ + 0xCE2F, 0xCE30, 0, 0xCE31, 0xCE32, 0xCE33, 0xCE34, 0xCE35, /* 0x70 */ + 0xCE36, 0xCE37, 0xCE38, 0xCE39, 0xCE3A, 0xCE3B, 0, 0, /* 0x70 */ + 0, 0xCE3C, 0xCE3D, 0xCE3E, 0xCE3F, 0xCE40, 0xCE41, 0xCE42, /* 0x80 */ + 0xCE43, 0xCE44, 0xCE45, 0xCE46, 0xCE47, 0xCE48, 0xCE49, 0xCE4A, /* 0x80 */ + 0xCE4B, 0xCE4C, 0, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, 0xCE51, /* 0x90 */ + 0xCE52, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0, 0, /* 0x90 */ + 0, 0xCE58, 0xCE59, 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE5E, /* 0xA0 */ + 0xCE5F, 0xCE60, 0xCE61, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xCE66, /* 0xA0 */ + 0xCE67, 0xCE68, 0, 0xCE69, 0xCE6A, 0xCE6B, 0xCE6C, 0xCE6D, /* 0xB0 */ + 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x314B, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCE74, 0xCE75, 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xCE7A, /* 0x60 */ + 0xCE7B, 0xCE7C, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80, 0xCE81, 0xCE82, /* 0x60 */ + 0xCE83, 0xCE84, 0, 0xCE85, 0xCE86, 0xCE87, 0xCE88, 0xCE89, /* 0x70 */ + 0xCE8A, 0xCE8B, 0xCE8C, 0xCE8D, 0xCE8E, 0xCE8F, 0, 0, /* 0x70 */ + 0, 0xCE90, 0xCE91, 0xCE92, 0xCE93, 0xCE94, 0xCE95, 0xCE96, /* 0x80 */ + 0xCE97, 0xCE98, 0xCE99, 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, /* 0x80 */ + 0xCE9F, 0xCEA0, 0, 0xCEA1, 0xCEA2, 0xCEA3, 0xCEA4, 0xCEA5, /* 0x90 */ + 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0, 0, /* 0x90 */ + 0, 0xCEAC, 0xCEAD, 0xCEAE, 0xCEAF, 0xCEB0, 0xCEB1, 0xCEB2, /* 0xA0 */ + 0xCEB3, 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7, 0xCEB8, 0xCEB9, 0xCEBA, /* 0xA0 */ + 0xCEBB, 0xCEBC, 0, 0xCEBD, 0xCEBE, 0xCEBF, 0xCEC0, 0xCEC1, /* 0xB0 */ + 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0, 0, /* 0xB0 */ + 0, 0xCEC8, 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, /* 0xC0 */ + 0xCECF, 0xCED0, 0xCED1, 0xCED2, 0xCED3, 0xCED4, 0xCED5, 0xCED6, /* 0xC0 */ + 0xCED7, 0xCED8, 0, 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, 0xCEDD, /* 0xD0 */ + 0xCEDE, 0xCEDF, 0xCEE0, 0xCEE1, 0xCEE2, 0xCEE3, 0, 0, /* 0xD0 */ + 0, 0xCEE4, 0xCEE5, 0xCEE6, 0xCEE7, 0xCEE8, 0xCEE9, 0xCEEA, /* 0xE0 */ + 0xCEEB, 0xCEEC, 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, 0xCEF2, /* 0xE0 */ + 0xCEF3, 0xCEF4, 0, 0xCEF5, 0xCEF6, 0xCEF7, 0xCEF8, 0xCEF9, /* 0xF0 */ + 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, 0xCEFE, 0xCEFF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCF00, 0xCF01, 0xCF02, 0xCF03, 0xCF04, 0xCF05, 0xCF06, /* 0x40 */ + 0xCF07, 0xCF08, 0xCF09, 0xCF0A, 0xCF0B, 0xCF0C, 0xCF0D, 0xCF0E, /* 0x40 */ + 0xCF0F, 0xCF10, 0, 0xCF11, 0xCF12, 0xCF13, 0xCF14, 0xCF15, /* 0x50 */ + 0xCF16, 0xCF17, 0xCF18, 0xCF19, 0xCF1A, 0xCF1B, 0, 0, /* 0x50 */ + 0, 0xCF1C, 0xCF1D, 0xCF1E, 0xCF1F, 0xCF20, 0xCF21, 0xCF22, /* 0x60 */ + 0xCF23, 0xCF24, 0xCF25, 0xCF26, 0xCF27, 0xCF28, 0xCF29, 0xCF2A, /* 0x60 */ + 0xCF2B, 0xCF2C, 0, 0xCF2D, 0xCF2E, 0xCF2F, 0xCF30, 0xCF31, /* 0x70 */ + 0xCF32, 0xCF33, 0xCF34, 0xCF35, 0xCF36, 0xCF37, 0, 0, /* 0x70 */ + 0, 0xCF38, 0xCF39, 0xCF3A, 0xCF3B, 0xCF3C, 0xCF3D, 0xCF3E, /* 0x80 */ + 0xCF3F, 0xCF40, 0xCF41, 0xCF42, 0xCF43, 0xCF44, 0xCF45, 0xCF46, /* 0x80 */ + 0xCF47, 0xCF48, 0, 0xCF49, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D, /* 0x90 */ + 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53, 0, 0, /* 0x90 */ + 0, 0xCF54, 0xCF55, 0xCF56, 0xCF57, 0xCF58, 0xCF59, 0xCF5A, /* 0xA0 */ + 0xCF5B, 0xCF5C, 0xCF5D, 0xCF5E, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, /* 0xA0 */ + 0xCF63, 0xCF64, 0, 0xCF65, 0xCF66, 0xCF67, 0xCF68, 0xCF69, /* 0xB0 */ + 0xCF6A, 0xCF6B, 0xCF6C, 0xCF6D, 0xCF6E, 0xCF6F, 0, 0, /* 0xB0 */ + 0, 0xCF70, 0xCF71, 0xCF72, 0xCF73, 0xCF74, 0xCF75, 0xCF76, /* 0xC0 */ + 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, /* 0xC0 */ + 0xCF7F, 0xCF80, 0, 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF85, /* 0xD0 */ + 0xCF86, 0xCF87, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, 0, 0, /* 0xD0 */ + 0, 0xCF8C, 0xCF8D, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, /* 0xE0 */ + 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, 0xCF9A, /* 0xE0 */ + 0xCF9B, 0xCF9C, 0, 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA1, /* 0xF0 */ + 0xCFA2, 0xCFA3, 0xCFA4, 0xCFA5, 0xCFA6, 0xCFA7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFA8, 0xCFA9, 0xCFAA, 0xCFAB, 0xCFAC, 0xCFAD, 0xCFAE, /* 0x40 */ + 0xCFAF, 0xCFB0, 0xCFB1, 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5, 0xCFB6, /* 0x40 */ + 0xCFB7, 0xCFB8, 0, 0xCFB9, 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, /* 0x50 */ + 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, 0xCFC2, 0xCFC3, 0, 0, /* 0x50 */ + 0, 0xCFC4, 0xCFC5, 0xCFC6, 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, /* 0x60 */ + 0xCFCB, 0xCFCC, 0xCFCD, 0xCFCE, 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, /* 0x60 */ + 0xCFD3, 0xCFD4, 0, 0xCFD5, 0xCFD6, 0xCFD7, 0xCFD8, 0xCFD9, /* 0x70 */ + 0xCFDA, 0xCFDB, 0xCFDC, 0xCFDD, 0xCFDE, 0xCFDF, 0, 0, /* 0x70 */ + 0, 0xCFE0, 0xCFE1, 0xCFE2, 0xCFE3, 0xCFE4, 0xCFE5, 0xCFE6, /* 0x80 */ + 0xCFE7, 0xCFE8, 0xCFE9, 0xCFEA, 0xCFEB, 0xCFEC, 0xCFED, 0xCFEE, /* 0x80 */ + 0xCFEF, 0xCFF0, 0, 0xCFF1, 0xCFF2, 0xCFF3, 0xCFF4, 0xCFF5, /* 0x90 */ + 0xCFF6, 0xCFF7, 0xCFF8, 0xCFF9, 0xCFFA, 0xCFFB, 0, 0, /* 0x90 */ + 0, 0xCFFC, 0xCFFD, 0xCFFE, 0xCFFF, 0xD000, 0xD001, 0xD002, /* 0xA0 */ + 0xD003, 0xD004, 0xD005, 0xD006, 0xD007, 0xD008, 0xD009, 0xD00A, /* 0xA0 */ + 0xD00B, 0xD00C, 0, 0xD00D, 0xD00E, 0xD00F, 0xD010, 0xD011, /* 0xB0 */ + 0xD012, 0xD013, 0xD014, 0xD015, 0xD016, 0xD017, 0, 0, /* 0xB0 */ + 0, 0xD018, 0xD019, 0xD01A, 0xD01B, 0xD01C, 0xD01D, 0xD01E, /* 0xC0 */ + 0xD01F, 0xD020, 0xD021, 0xD022, 0xD023, 0xD024, 0xD025, 0xD026, /* 0xC0 */ + 0xD027, 0xD028, 0, 0xD029, 0xD02A, 0xD02B, 0xD02C, 0xD02D, /* 0xD0 */ + 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0, 0, /* 0xD0 */ + 0, 0xD034, 0xD035, 0xD036, 0xD037, 0xD038, 0xD039, 0xD03A, /* 0xE0 */ + 0xD03B, 0xD03C, 0xD03D, 0xD03E, 0xD03F, 0xD040, 0xD041, 0xD042, /* 0xE0 */ + 0xD043, 0xD044, 0, 0xD045, 0xD046, 0xD047, 0xD048, 0xD049, /* 0xF0 */ + 0xD04A, 0xD04B, 0xD04C, 0xD04D, 0xD04E, 0xD04F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD050, 0xD051, 0xD052, 0xD053, 0xD054, 0xD055, 0xD056, /* 0x40 */ + 0xD057, 0xD058, 0xD059, 0xD05A, 0xD05B, 0xD05C, 0xD05D, 0xD05E, /* 0x40 */ + 0xD05F, 0xD060, 0, 0xD061, 0xD062, 0xD063, 0xD064, 0xD065, /* 0x50 */ + 0xD066, 0xD067, 0xD068, 0xD069, 0xD06A, 0xD06B, 0, 0, /* 0x50 */ + 0, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, 0xD071, 0xD072, /* 0x60 */ + 0xD073, 0xD074, 0xD075, 0xD076, 0xD077, 0xD078, 0xD079, 0xD07A, /* 0x60 */ + 0xD07B, 0xD07C, 0, 0xD07D, 0xD07E, 0xD07F, 0xD080, 0xD081, /* 0x70 */ + 0xD082, 0xD083, 0xD084, 0xD085, 0xD086, 0xD087, 0, 0, /* 0x70 */ + 0, 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, 0xD08D, 0xD08E, /* 0x80 */ + 0xD08F, 0xD090, 0xD091, 0xD092, 0xD093, 0xD094, 0xD095, 0xD096, /* 0x80 */ + 0xD097, 0xD098, 0, 0xD099, 0xD09A, 0xD09B, 0xD09C, 0xD09D, /* 0x90 */ + 0xD09E, 0xD09F, 0xD0A0, 0xD0A1, 0xD0A2, 0xD0A3, 0, 0, /* 0x90 */ + 0, 0xD0A4, 0xD0A5, 0xD0A6, 0xD0A7, 0xD0A8, 0xD0A9, 0xD0AA, /* 0xA0 */ + 0xD0AB, 0xD0AC, 0xD0AD, 0xD0AE, 0xD0AF, 0xD0B0, 0xD0B1, 0xD0B2, /* 0xA0 */ + 0xD0B3, 0xD0B4, 0, 0xD0B5, 0xD0B6, 0xD0B7, 0xD0B8, 0xD0B9, /* 0xB0 */ + 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, 0xD0BE, 0xD0BF /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x314C, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD0C0, 0xD0C1, 0xD0C2, 0xD0C3, 0xD0C4, 0xD0C5, 0xD0C6, /* 0x60 */ + 0xD0C7, 0xD0C8, 0xD0C9, 0xD0CA, 0xD0CB, 0xD0CC, 0xD0CD, 0xD0CE, /* 0x60 */ + 0xD0CF, 0xD0D0, 0, 0xD0D1, 0xD0D2, 0xD0D3, 0xD0D4, 0xD0D5, /* 0x70 */ + 0xD0D6, 0xD0D7, 0xD0D8, 0xD0D9, 0xD0DA, 0xD0DB, 0, 0, /* 0x70 */ + 0, 0xD0DC, 0xD0DD, 0xD0DE, 0xD0DF, 0xD0E0, 0xD0E1, 0xD0E2, /* 0x80 */ + 0xD0E3, 0xD0E4, 0xD0E5, 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, /* 0x80 */ + 0xD0EB, 0xD0EC, 0, 0xD0ED, 0xD0EE, 0xD0EF, 0xD0F0, 0xD0F1, /* 0x90 */ + 0xD0F2, 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0, 0, /* 0x90 */ + 0, 0xD0F8, 0xD0F9, 0xD0FA, 0xD0FB, 0xD0FC, 0xD0FD, 0xD0FE, /* 0xA0 */ + 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103, 0xD104, 0xD105, 0xD106, /* 0xA0 */ + 0xD107, 0xD108, 0, 0xD109, 0xD10A, 0xD10B, 0xD10C, 0xD10D, /* 0xB0 */ + 0xD10E, 0xD10F, 0xD110, 0xD111, 0xD112, 0xD113, 0, 0, /* 0xB0 */ + 0, 0xD114, 0xD115, 0xD116, 0xD117, 0xD118, 0xD119, 0xD11A, /* 0xC0 */ + 0xD11B, 0xD11C, 0xD11D, 0xD11E, 0xD11F, 0xD120, 0xD121, 0xD122, /* 0xC0 */ + 0xD123, 0xD124, 0, 0xD125, 0xD126, 0xD127, 0xD128, 0xD129, /* 0xD0 */ + 0xD12A, 0xD12B, 0xD12C, 0xD12D, 0xD12E, 0xD12F, 0, 0, /* 0xD0 */ + 0, 0xD130, 0xD131, 0xD132, 0xD133, 0xD134, 0xD135, 0xD136, /* 0xE0 */ + 0xD137, 0xD138, 0xD139, 0xD13A, 0xD13B, 0xD13C, 0xD13D, 0xD13E, /* 0xE0 */ + 0xD13F, 0xD140, 0, 0xD141, 0xD142, 0xD143, 0xD144, 0xD145, /* 0xF0 */ + 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, 0xD14B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_C9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD14C, 0xD14D, 0xD14E, 0xD14F, 0xD150, 0xD151, 0xD152, /* 0x40 */ + 0xD153, 0xD154, 0xD155, 0xD156, 0xD157, 0xD158, 0xD159, 0xD15A, /* 0x40 */ + 0xD15B, 0xD15C, 0, 0xD15D, 0xD15E, 0xD15F, 0xD160, 0xD161, /* 0x50 */ + 0xD162, 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0, 0, /* 0x50 */ + 0, 0xD168, 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, /* 0x60 */ + 0xD16F, 0xD170, 0xD171, 0xD172, 0xD173, 0xD174, 0xD175, 0xD176, /* 0x60 */ + 0xD177, 0xD178, 0, 0xD179, 0xD17A, 0xD17B, 0xD17C, 0xD17D, /* 0x70 */ + 0xD17E, 0xD17F, 0xD180, 0xD181, 0xD182, 0xD183, 0, 0, /* 0x70 */ + 0, 0xD184, 0xD185, 0xD186, 0xD187, 0xD188, 0xD189, 0xD18A, /* 0x80 */ + 0xD18B, 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD192, /* 0x80 */ + 0xD193, 0xD194, 0, 0xD195, 0xD196, 0xD197, 0xD198, 0xD199, /* 0x90 */ + 0xD19A, 0xD19B, 0xD19C, 0xD19D, 0xD19E, 0xD19F, 0, 0, /* 0x90 */ + 0, 0xD1A0, 0xD1A1, 0xD1A2, 0xD1A3, 0xD1A4, 0xD1A5, 0xD1A6, /* 0xA0 */ + 0xD1A7, 0xD1A8, 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, /* 0xA0 */ + 0xD1AF, 0xD1B0, 0, 0xD1B1, 0xD1B2, 0xD1B3, 0xD1B4, 0xD1B5, /* 0xB0 */ + 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BA, 0xD1BB, 0, 0, /* 0xB0 */ + 0, 0xD1BC, 0xD1BD, 0xD1BE, 0xD1BF, 0xD1C0, 0xD1C1, 0xD1C2, /* 0xC0 */ + 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6, 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, /* 0xC0 */ + 0xD1CB, 0xD1CC, 0, 0xD1CD, 0xD1CE, 0xD1CF, 0xD1D0, 0xD1D1, /* 0xD0 */ + 0xD1D2, 0xD1D3, 0xD1D4, 0xD1D5, 0xD1D6, 0xD1D7, 0, 0, /* 0xD0 */ + 0, 0xD1D8, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, 0xD1DE, /* 0xE0 */ + 0xD1DF, 0xD1E0, 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, /* 0xE0 */ + 0xD1E7, 0xD1E8, 0, 0xD1E9, 0xD1EA, 0xD1EB, 0xD1EC, 0xD1ED, /* 0xF0 */ + 0xD1EE, 0xD1EF, 0xD1F0, 0xD1F1, 0xD1F2, 0xD1F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1F4, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F8, 0xD1F9, 0xD1FA, /* 0x40 */ + 0xD1FB, 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201, 0xD202, /* 0x40 */ + 0xD203, 0xD204, 0, 0xD205, 0xD206, 0xD207, 0xD208, 0xD209, /* 0x50 */ + 0xD20A, 0xD20B, 0xD20C, 0xD20D, 0xD20E, 0xD20F, 0, 0, /* 0x50 */ + 0, 0xD210, 0xD211, 0xD212, 0xD213, 0xD214, 0xD215, 0xD216, /* 0x60 */ + 0xD217, 0xD218, 0xD219, 0xD21A, 0xD21B, 0xD21C, 0xD21D, 0xD21E, /* 0x60 */ + 0xD21F, 0xD220, 0, 0xD221, 0xD222, 0xD223, 0xD224, 0xD225, /* 0x70 */ + 0xD226, 0xD227, 0xD228, 0xD229, 0xD22A, 0xD22B, 0, 0, /* 0x70 */ + 0, 0xD22C, 0xD22D, 0xD22E, 0xD22F, 0xD230, 0xD231, 0xD232, /* 0x80 */ + 0xD233, 0xD234, 0xD235, 0xD236, 0xD237, 0xD238, 0xD239, 0xD23A, /* 0x80 */ + 0xD23B, 0xD23C, 0, 0xD23D, 0xD23E, 0xD23F, 0xD240, 0xD241, /* 0x90 */ + 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, 0, 0, /* 0x90 */ + 0, 0xD248, 0xD249, 0xD24A, 0xD24B, 0xD24C, 0xD24D, 0xD24E, /* 0xA0 */ + 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, 0xD256, /* 0xA0 */ + 0xD257, 0xD258, 0, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, /* 0xB0 */ + 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0, 0, /* 0xB0 */ + 0, 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, 0xD269, 0xD26A, /* 0xC0 */ + 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, /* 0xC0 */ + 0xD273, 0xD274, 0, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, /* 0xD0 */ + 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0xD27F, 0, 0, /* 0xD0 */ + 0, 0xD280, 0xD281, 0xD282, 0xD283, 0xD284, 0xD285, 0xD286, /* 0xE0 */ + 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, 0xD28D, 0xD28E, /* 0xE0 */ + 0xD28F, 0xD290, 0, 0xD291, 0xD292, 0xD293, 0xD294, 0xD295, /* 0xF0 */ + 0xD296, 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD29C, 0xD29D, 0xD29E, 0xD29F, 0xD2A0, 0xD2A1, 0xD2A2, /* 0x40 */ + 0xD2A3, 0xD2A4, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9, 0xD2AA, /* 0x40 */ + 0xD2AB, 0xD2AC, 0, 0xD2AD, 0xD2AE, 0xD2AF, 0xD2B0, 0xD2B1, /* 0x50 */ + 0xD2B2, 0xD2B3, 0xD2B4, 0xD2B5, 0xD2B6, 0xD2B7, 0, 0, /* 0x50 */ + 0, 0xD2B8, 0xD2B9, 0xD2BA, 0xD2BB, 0xD2BC, 0xD2BD, 0xD2BE, /* 0x60 */ + 0xD2BF, 0xD2C0, 0xD2C1, 0xD2C2, 0xD2C3, 0xD2C4, 0xD2C5, 0xD2C6, /* 0x60 */ + 0xD2C7, 0xD2C8, 0, 0xD2C9, 0xD2CA, 0xD2CB, 0xD2CC, 0xD2CD, /* 0x70 */ + 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D2, 0xD2D3, 0, 0, /* 0x70 */ + 0, 0xD2D4, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D8, 0xD2D9, 0xD2DA, /* 0x80 */ + 0xD2DB, 0xD2DC, 0xD2DD, 0xD2DE, 0xD2DF, 0xD2E0, 0xD2E1, 0xD2E2, /* 0x80 */ + 0xD2E3, 0xD2E4, 0, 0xD2E5, 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9, /* 0x90 */ + 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, 0, 0, /* 0x90 */ + 0, 0xD2F0, 0xD2F1, 0xD2F2, 0xD2F3, 0xD2F4, 0xD2F5, 0xD2F6, /* 0xA0 */ + 0xD2F7, 0xD2F8, 0xD2F9, 0xD2FA, 0xD2FB, 0xD2FC, 0xD2FD, 0xD2FE, /* 0xA0 */ + 0xD2FF, 0xD300, 0, 0xD301, 0xD302, 0xD303, 0xD304, 0xD305, /* 0xB0 */ + 0xD306, 0xD307, 0xD308, 0xD309, 0xD30A, 0xD30B /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x314D, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD30C, 0xD30D, 0xD30E, 0xD30F, 0xD310, 0xD311, 0xD312, /* 0x60 */ + 0xD313, 0xD314, 0xD315, 0xD316, 0xD317, 0xD318, 0xD319, 0xD31A, /* 0x60 */ + 0xD31B, 0xD31C, 0, 0xD31D, 0xD31E, 0xD31F, 0xD320, 0xD321, /* 0x70 */ + 0xD322, 0xD323, 0xD324, 0xD325, 0xD326, 0xD327, 0, 0, /* 0x70 */ + 0, 0xD328, 0xD329, 0xD32A, 0xD32B, 0xD32C, 0xD32D, 0xD32E, /* 0x80 */ + 0xD32F, 0xD330, 0xD331, 0xD332, 0xD333, 0xD334, 0xD335, 0xD336, /* 0x80 */ + 0xD337, 0xD338, 0, 0xD339, 0xD33A, 0xD33B, 0xD33C, 0xD33D, /* 0x90 */ + 0xD33E, 0xD33F, 0xD340, 0xD341, 0xD342, 0xD343, 0, 0, /* 0x90 */ + 0, 0xD344, 0xD345, 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, /* 0xA0 */ + 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD352, /* 0xA0 */ + 0xD353, 0xD354, 0, 0xD355, 0xD356, 0xD357, 0xD358, 0xD359, /* 0xB0 */ + 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0, 0, /* 0xB0 */ + 0, 0xD360, 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, /* 0xC0 */ + 0xD367, 0xD368, 0xD369, 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, /* 0xC0 */ + 0xD36F, 0xD370, 0, 0xD371, 0xD372, 0xD373, 0xD374, 0xD375, /* 0xD0 */ + 0xD376, 0xD377, 0xD378, 0xD379, 0xD37A, 0xD37B, 0, 0, /* 0xD0 */ + 0, 0xD37C, 0xD37D, 0xD37E, 0xD37F, 0xD380, 0xD381, 0xD382, /* 0xE0 */ + 0xD383, 0xD384, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, /* 0xE0 */ + 0xD38B, 0xD38C, 0, 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, /* 0xF0 */ + 0xD392, 0xD393, 0xD394, 0xD395, 0xD396, 0xD397 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD398, 0xD399, 0xD39A, 0xD39B, 0xD39C, 0xD39D, 0xD39E, /* 0x40 */ + 0xD39F, 0xD3A0, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, 0xD3A6, /* 0x40 */ + 0xD3A7, 0xD3A8, 0, 0xD3A9, 0xD3AA, 0xD3AB, 0xD3AC, 0xD3AD, /* 0x50 */ + 0xD3AE, 0xD3AF, 0xD3B0, 0xD3B1, 0xD3B2, 0xD3B3, 0, 0, /* 0x50 */ + 0, 0xD3B4, 0xD3B5, 0xD3B6, 0xD3B7, 0xD3B8, 0xD3B9, 0xD3BA, /* 0x60 */ + 0xD3BB, 0xD3BC, 0xD3BD, 0xD3BE, 0xD3BF, 0xD3C0, 0xD3C1, 0xD3C2, /* 0x60 */ + 0xD3C3, 0xD3C4, 0, 0xD3C5, 0xD3C6, 0xD3C7, 0xD3C8, 0xD3C9, /* 0x70 */ + 0xD3CA, 0xD3CB, 0xD3CC, 0xD3CD, 0xD3CE, 0xD3CF, 0, 0, /* 0x70 */ + 0, 0xD3D0, 0xD3D1, 0xD3D2, 0xD3D3, 0xD3D4, 0xD3D5, 0xD3D6, /* 0x80 */ + 0xD3D7, 0xD3D8, 0xD3D9, 0xD3DA, 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE, /* 0x80 */ + 0xD3DF, 0xD3E0, 0, 0xD3E1, 0xD3E2, 0xD3E3, 0xD3E4, 0xD3E5, /* 0x90 */ + 0xD3E6, 0xD3E7, 0xD3E8, 0xD3E9, 0xD3EA, 0xD3EB, 0, 0, /* 0x90 */ + 0, 0xD3EC, 0xD3ED, 0xD3EE, 0xD3EF, 0xD3F0, 0xD3F1, 0xD3F2, /* 0xA0 */ + 0xD3F3, 0xD3F4, 0xD3F5, 0xD3F6, 0xD3F7, 0xD3F8, 0xD3F9, 0xD3FA, /* 0xA0 */ + 0xD3FB, 0xD3FC, 0, 0xD3FD, 0xD3FE, 0xD3FF, 0xD400, 0xD401, /* 0xB0 */ + 0xD402, 0xD403, 0xD404, 0xD405, 0xD406, 0xD407, 0, 0, /* 0xB0 */ + 0, 0xD408, 0xD409, 0xD40A, 0xD40B, 0xD40C, 0xD40D, 0xD40E, /* 0xC0 */ + 0xD40F, 0xD410, 0xD411, 0xD412, 0xD413, 0xD414, 0xD415, 0xD416, /* 0xC0 */ + 0xD417, 0xD418, 0, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41D, /* 0xD0 */ + 0xD41E, 0xD41F, 0xD420, 0xD421, 0xD422, 0xD423, 0, 0, /* 0xD0 */ + 0, 0xD424, 0xD425, 0xD426, 0xD427, 0xD428, 0xD429, 0xD42A, /* 0xE0 */ + 0xD42B, 0xD42C, 0xD42D, 0xD42E, 0xD42F, 0xD430, 0xD431, 0xD432, /* 0xE0 */ + 0xD433, 0xD434, 0, 0xD435, 0xD436, 0xD437, 0xD438, 0xD439, /* 0xF0 */ + 0xD43A, 0xD43B, 0xD43C, 0xD43D, 0xD43E, 0xD43F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD440, 0xD441, 0xD442, 0xD443, 0xD444, 0xD445, 0xD446, /* 0x40 */ + 0xD447, 0xD448, 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, /* 0x40 */ + 0xD44F, 0xD450, 0, 0xD451, 0xD452, 0xD453, 0xD454, 0xD455, /* 0x50 */ + 0xD456, 0xD457, 0xD458, 0xD459, 0xD45A, 0xD45B, 0, 0, /* 0x50 */ + 0, 0xD45C, 0xD45D, 0xD45E, 0xD45F, 0xD460, 0xD461, 0xD462, /* 0x60 */ + 0xD463, 0xD464, 0xD465, 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, /* 0x60 */ + 0xD46B, 0xD46C, 0, 0xD46D, 0xD46E, 0xD46F, 0xD470, 0xD471, /* 0x70 */ + 0xD472, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0, 0, /* 0x70 */ + 0, 0xD478, 0xD479, 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0xD47E, /* 0x80 */ + 0xD47F, 0xD480, 0xD481, 0xD482, 0xD483, 0xD484, 0xD485, 0xD486, /* 0x80 */ + 0xD487, 0xD488, 0, 0xD489, 0xD48A, 0xD48B, 0xD48C, 0xD48D, /* 0x90 */ + 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, 0, 0, /* 0x90 */ + 0, 0xD494, 0xD495, 0xD496, 0xD497, 0xD498, 0xD499, 0xD49A, /* 0xA0 */ + 0xD49B, 0xD49C, 0xD49D, 0xD49E, 0xD49F, 0xD4A0, 0xD4A1, 0xD4A2, /* 0xA0 */ + 0xD4A3, 0xD4A4, 0, 0xD4A5, 0xD4A6, 0xD4A7, 0xD4A8, 0xD4A9, /* 0xB0 */ + 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, 0xD4AE, 0xD4AF, 0, 0, /* 0xB0 */ + 0, 0xD4B0, 0xD4B1, 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, 0xD4B6, /* 0xC0 */ + 0xD4B7, 0xD4B8, 0xD4B9, 0xD4BA, 0xD4BB, 0xD4BC, 0xD4BD, 0xD4BE, /* 0xC0 */ + 0xD4BF, 0xD4C0, 0, 0xD4C1, 0xD4C2, 0xD4C3, 0xD4C4, 0xD4C5, /* 0xD0 */ + 0xD4C6, 0xD4C7, 0xD4C8, 0xD4C9, 0xD4CA, 0xD4CB, 0, 0, /* 0xD0 */ + 0, 0xD4CC, 0xD4CD, 0xD4CE, 0xD4CF, 0xD4D0, 0xD4D1, 0xD4D2, /* 0xE0 */ + 0xD4D3, 0xD4D4, 0xD4D5, 0xD4D6, 0xD4D7, 0xD4D8, 0xD4D9, 0xD4DA, /* 0xE0 */ + 0xD4DB, 0xD4DC, 0, 0xD4DD, 0xD4DE, 0xD4DF, 0xD4E0, 0xD4E1, /* 0xF0 */ + 0xD4E2, 0xD4E3, 0xD4E4, 0xD4E5, 0xD4E6, 0xD4E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4E8, 0xD4E9, 0xD4EA, 0xD4EB, 0xD4EC, 0xD4ED, 0xD4EE, /* 0x40 */ + 0xD4EF, 0xD4F0, 0xD4F1, 0xD4F2, 0xD4F3, 0xD4F4, 0xD4F5, 0xD4F6, /* 0x40 */ + 0xD4F7, 0xD4F8, 0, 0xD4F9, 0xD4FA, 0xD4FB, 0xD4FC, 0xD4FD, /* 0x50 */ + 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0, 0, /* 0x50 */ + 0, 0xD504, 0xD505, 0xD506, 0xD507, 0xD508, 0xD509, 0xD50A, /* 0x60 */ + 0xD50B, 0xD50C, 0xD50D, 0xD50E, 0xD50F, 0xD510, 0xD511, 0xD512, /* 0x60 */ + 0xD513, 0xD514, 0, 0xD515, 0xD516, 0xD517, 0xD518, 0xD519, /* 0x70 */ + 0xD51A, 0xD51B, 0xD51C, 0xD51D, 0xD51E, 0xD51F, 0, 0, /* 0x70 */ + 0, 0xD520, 0xD521, 0xD522, 0xD523, 0xD524, 0xD525, 0xD526, /* 0x80 */ + 0xD527, 0xD528, 0xD529, 0xD52A, 0xD52B, 0xD52C, 0xD52D, 0xD52E, /* 0x80 */ + 0xD52F, 0xD530, 0, 0xD531, 0xD532, 0xD533, 0xD534, 0xD535, /* 0x90 */ + 0xD536, 0xD537, 0xD538, 0xD539, 0xD53A, 0xD53B, 0, 0, /* 0x90 */ + 0, 0xD53C, 0xD53D, 0xD53E, 0xD53F, 0xD540, 0xD541, 0xD542, /* 0xA0 */ + 0xD543, 0xD544, 0xD545, 0xD546, 0xD547, 0xD548, 0xD549, 0xD54A, /* 0xA0 */ + 0xD54B, 0xD54C, 0, 0xD54D, 0xD54E, 0xD54F, 0xD550, 0xD551, /* 0xB0 */ + 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, 0xD557 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x314E, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD558, 0xD559, 0xD55A, 0xD55B, 0xD55C, 0xD55D, 0xD55E, /* 0x60 */ + 0xD55F, 0xD560, 0xD561, 0xD562, 0xD563, 0xD564, 0xD565, 0xD566, /* 0x60 */ + 0xD567, 0xD568, 0, 0xD569, 0xD56A, 0xD56B, 0xD56C, 0xD56D, /* 0x70 */ + 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573, 0, 0, /* 0x70 */ + 0, 0xD574, 0xD575, 0xD576, 0xD577, 0xD578, 0xD579, 0xD57A, /* 0x80 */ + 0xD57B, 0xD57C, 0xD57D, 0xD57E, 0xD57F, 0xD580, 0xD581, 0xD582, /* 0x80 */ + 0xD583, 0xD584, 0, 0xD585, 0xD586, 0xD587, 0xD588, 0xD589, /* 0x90 */ + 0xD58A, 0xD58B, 0xD58C, 0xD58D, 0xD58E, 0xD58F, 0, 0, /* 0x90 */ + 0, 0xD590, 0xD591, 0xD592, 0xD593, 0xD594, 0xD595, 0xD596, /* 0xA0 */ + 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, 0xD59C, 0xD59D, 0xD59E, /* 0xA0 */ + 0xD59F, 0xD5A0, 0, 0xD5A1, 0xD5A2, 0xD5A3, 0xD5A4, 0xD5A5, /* 0xB0 */ + 0xD5A6, 0xD5A7, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0, 0, /* 0xB0 */ + 0, 0xD5AC, 0xD5AD, 0xD5AE, 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, /* 0xC0 */ + 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6, 0xD5B7, 0xD5B8, 0xD5B9, 0xD5BA, /* 0xC0 */ + 0xD5BB, 0xD5BC, 0, 0xD5BD, 0xD5BE, 0xD5BF, 0xD5C0, 0xD5C1, /* 0xD0 */ + 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6, 0xD5C7, 0, 0, /* 0xD0 */ + 0, 0xD5C8, 0xD5C9, 0xD5CA, 0xD5CB, 0xD5CC, 0xD5CD, 0xD5CE, /* 0xE0 */ + 0xD5CF, 0xD5D0, 0xD5D1, 0xD5D2, 0xD5D3, 0xD5D4, 0xD5D5, 0xD5D6, /* 0xE0 */ + 0xD5D7, 0xD5D8, 0, 0xD5D9, 0xD5DA, 0xD5DB, 0xD5DC, 0xD5DD, /* 0xF0 */ + 0xD5DE, 0xD5DF, 0xD5E0, 0xD5E1, 0xD5E2, 0xD5E3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5E4, 0xD5E5, 0xD5E6, 0xD5E7, 0xD5E8, 0xD5E9, 0xD5EA, /* 0x40 */ + 0xD5EB, 0xD5EC, 0xD5ED, 0xD5EE, 0xD5EF, 0xD5F0, 0xD5F1, 0xD5F2, /* 0x40 */ + 0xD5F3, 0xD5F4, 0, 0xD5F5, 0xD5F6, 0xD5F7, 0xD5F8, 0xD5F9, /* 0x50 */ + 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD, 0xD5FE, 0xD5FF, 0, 0, /* 0x50 */ + 0, 0xD600, 0xD601, 0xD602, 0xD603, 0xD604, 0xD605, 0xD606, /* 0x60 */ + 0xD607, 0xD608, 0xD609, 0xD60A, 0xD60B, 0xD60C, 0xD60D, 0xD60E, /* 0x60 */ + 0xD60F, 0xD610, 0, 0xD611, 0xD612, 0xD613, 0xD614, 0xD615, /* 0x70 */ + 0xD616, 0xD617, 0xD618, 0xD619, 0xD61A, 0xD61B, 0, 0, /* 0x70 */ + 0, 0xD61C, 0xD61D, 0xD61E, 0xD61F, 0xD620, 0xD621, 0xD622, /* 0x80 */ + 0xD623, 0xD624, 0xD625, 0xD626, 0xD627, 0xD628, 0xD629, 0xD62A, /* 0x80 */ + 0xD62B, 0xD62C, 0, 0xD62D, 0xD62E, 0xD62F, 0xD630, 0xD631, /* 0x90 */ + 0xD632, 0xD633, 0xD634, 0xD635, 0xD636, 0xD637, 0, 0, /* 0x90 */ + 0, 0xD638, 0xD639, 0xD63A, 0xD63B, 0xD63C, 0xD63D, 0xD63E, /* 0xA0 */ + 0xD63F, 0xD640, 0xD641, 0xD642, 0xD643, 0xD644, 0xD645, 0xD646, /* 0xA0 */ + 0xD647, 0xD648, 0, 0xD649, 0xD64A, 0xD64B, 0xD64C, 0xD64D, /* 0xB0 */ + 0xD64E, 0xD64F, 0xD650, 0xD651, 0xD652, 0xD653, 0, 0, /* 0xB0 */ + 0, 0xD654, 0xD655, 0xD656, 0xD657, 0xD658, 0xD659, 0xD65A, /* 0xC0 */ + 0xD65B, 0xD65C, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662, /* 0xC0 */ + 0xD663, 0xD664, 0, 0xD665, 0xD666, 0xD667, 0xD668, 0xD669, /* 0xD0 */ + 0xD66A, 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0, 0, /* 0xD0 */ + 0, 0xD670, 0xD671, 0xD672, 0xD673, 0xD674, 0xD675, 0xD676, /* 0xE0 */ + 0xD677, 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, 0xD67E, /* 0xE0 */ + 0xD67F, 0xD680, 0, 0xD681, 0xD682, 0xD683, 0xD684, 0xD685, /* 0xF0 */ + 0xD686, 0xD687, 0xD688, 0xD689, 0xD68A, 0xD68B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD68C, 0xD68D, 0xD68E, 0xD68F, 0xD690, 0xD691, 0xD692, /* 0x40 */ + 0xD693, 0xD694, 0xD695, 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, /* 0x40 */ + 0xD69B, 0xD69C, 0, 0xD69D, 0xD69E, 0xD69F, 0xD6A0, 0xD6A1, /* 0x50 */ + 0xD6A2, 0xD6A3, 0xD6A4, 0xD6A5, 0xD6A6, 0xD6A7, 0, 0, /* 0x50 */ + 0, 0xD6A8, 0xD6A9, 0xD6AA, 0xD6AB, 0xD6AC, 0xD6AD, 0xD6AE, /* 0x60 */ + 0xD6AF, 0xD6B0, 0xD6B1, 0xD6B2, 0xD6B3, 0xD6B4, 0xD6B5, 0xD6B6, /* 0x60 */ + 0xD6B7, 0xD6B8, 0, 0xD6B9, 0xD6BA, 0xD6BB, 0xD6BC, 0xD6BD, /* 0x70 */ + 0xD6BE, 0xD6BF, 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0, 0, /* 0x70 */ + 0, 0xD6C4, 0xD6C5, 0xD6C6, 0xD6C7, 0xD6C8, 0xD6C9, 0xD6CA, /* 0x80 */ + 0xD6CB, 0xD6CC, 0xD6CD, 0xD6CE, 0xD6CF, 0xD6D0, 0xD6D1, 0xD6D2, /* 0x80 */ + 0xD6D3, 0xD6D4, 0, 0xD6D5, 0xD6D6, 0xD6D7, 0xD6D8, 0xD6D9, /* 0x90 */ + 0xD6DA, 0xD6DB, 0xD6DC, 0xD6DD, 0xD6DE, 0xD6DF, 0, 0, /* 0x90 */ + 0, 0xD6E0, 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E4, 0xD6E5, 0xD6E6, /* 0xA0 */ + 0xD6E7, 0xD6E8, 0xD6E9, 0xD6EA, 0xD6EB, 0xD6EC, 0xD6ED, 0xD6EE, /* 0xA0 */ + 0xD6EF, 0xD6F0, 0, 0xD6F1, 0xD6F2, 0xD6F3, 0xD6F4, 0xD6F5, /* 0xB0 */ + 0xD6F6, 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA, 0xD6FB, 0, 0, /* 0xB0 */ + 0, 0xD6FC, 0xD6FD, 0xD6FE, 0xD6FF, 0xD700, 0xD701, 0xD702, /* 0xC0 */ + 0xD703, 0xD704, 0xD705, 0xD706, 0xD707, 0xD708, 0xD709, 0xD70A, /* 0xC0 */ + 0xD70B, 0xD70C, 0, 0xD70D, 0xD70E, 0xD70F, 0xD710, 0xD711, /* 0xD0 */ + 0xD712, 0xD713, 0xD714, 0xD715, 0xD716, 0xD717, 0, 0, /* 0xD0 */ + 0, 0xD718, 0xD719, 0xD71A, 0xD71B, 0xD71C, 0xD71D, 0xD71E, /* 0xE0 */ + 0xD71F, 0xD720, 0xD721, 0xD722, 0xD723, 0xD724, 0xD725, 0xD726, /* 0xE0 */ + 0xD727, 0xD728, 0, 0xD729, 0xD72A, 0xD72B, 0xD72C, 0xD72D, /* 0xF0 */ + 0xD72E, 0xD72F, 0xD730, 0xD731, 0xD732, 0xD733 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD734, 0xD735, 0xD736, 0xD737, 0xD738, 0xD739, 0xD73A, /* 0x40 */ + 0xD73B, 0xD73C, 0xD73D, 0xD73E, 0xD73F, 0xD740, 0xD741, 0xD742, /* 0x40 */ + 0xD743, 0xD744, 0, 0xD745, 0xD746, 0xD747, 0xD748, 0xD749, /* 0x50 */ + 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0, 0, /* 0x50 */ + 0, 0xD750, 0xD751, 0xD752, 0xD753, 0xD754, 0xD755, 0xD756, /* 0x60 */ + 0xD757, 0xD758, 0xD759, 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, /* 0x60 */ + 0xD75F, 0xD760, 0, 0xD761, 0xD762, 0xD763, 0xD764, 0xD765, /* 0x70 */ + 0xD766, 0xD767, 0xD768, 0xD769, 0xD76A, 0xD76B, 0, 0, /* 0x70 */ + 0, 0xD76C, 0xD76D, 0xD76E, 0xD76F, 0xD770, 0xD771, 0xD772, /* 0x80 */ + 0xD773, 0xD774, 0xD775, 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, /* 0x80 */ + 0xD77B, 0xD77C, 0, 0xD77D, 0xD77E, 0xD77F, 0xD780, 0xD781, /* 0x90 */ + 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0, 0, /* 0x90 */ + 0, 0xD788, 0xD789, 0xD78A, 0xD78B, 0xD78C, 0xD78D, 0xD78E, /* 0xA0 */ + 0xD78F, 0xD790, 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, 0xD796, /* 0xA0 */ + 0xD797, 0xD798, 0, 0xD799, 0xD79A, 0xD79B, 0xD79C, 0xD79D, /* 0xB0 */ + 0xD79E, 0xD79F, 0xD7A0, 0xD7A1, 0xD7A2, 0xD7A3 /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_D9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3000, 0x3001, 0x3002, 0x00B7, 0x2025, 0x2026, 0x00A8, /* 0x30 */ + 0x3003, 0x00AD, 0x2015, 0x2225, 0xFF3C, 0x223C, 0x2018, 0x2019, /* 0x30 */ + 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, /* 0x40 */ + 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0x00B1, 0x00D7, /* 0x40 */ + 0x00F7, 0x2260, 0x2264, 0x2265, 0x221E, 0x2234, 0x00B0, 0x2032, /* 0x50 */ + 0x2033, 0x2103, 0x212B, 0xFFE0, 0xFFE1, 0xFFE5, 0x2642, 0x2640, /* 0x50 */ + 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00A7, /* 0x60 */ + 0x203B, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, /* 0x60 */ + 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x2192, 0x2190, /* 0x70 */ + 0x2191, 0x2193, 0x2194, 0x3013, 0x226A, 0x226B, 0x221A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, 0x2208, 0x220B, /* 0x90 */ + 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, 0x2227, 0x2228, /* 0x90 */ + 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x00B4, 0xFF5E, 0x02C7, /* 0xA0 */ + 0x02D8, 0x02DD, 0x02DA, 0x02D9, 0x00B8, 0x02DB, 0x00A1, 0x00BF, /* 0xA0 */ + 0x02D0, 0x222E, 0x2211, 0x220F, 0x00A4, 0x2109, 0x2030, 0x25C1, /* 0xB0 */ + 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, /* 0xB0 */ + 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1, 0x2592, 0x25A4, /* 0xC0 */ + 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668, 0x260F, 0x260E, /* 0xC0 */ + 0x261C, 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, /* 0xD0 */ + 0x2196, 0x2198, 0x266D, 0x2669, 0x266A, 0x266C, 0x327F, 0x321C, /* 0xD0 */ + 0x2116, 0x33C7, 0x2122, 0x33C2, 0x33D8, 0x2121 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* Add some additional characters, which are different defined on Solaris */ +/* DAA1-DAD3 --> 3131-3163 */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_DA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, /* 0x30 */ + 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, /* 0x30 */ + 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0x40 */ + 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, /* 0x40 */ + 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0x50 */ + 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0x50 */ + 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0x60 */ + 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6, 0xFF3D, 0xFF3E, 0xFF3F, /* 0x60 */ + 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0x70 */ + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, /* 0x90 */ + 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, /* 0x90 */ + 0xFFE3, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, /* 0xA0 */ + 0x3138, 0x3139, 0x313A, 0x313B, 0x313C, 0x313D, 0x313E, 0x313F, /* 0xA0 */ + 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, /* 0xB0 */ + 0x3148, 0x3149, 0x314A, 0x314B, 0x314C, 0x314D, 0x314E, 0x314F, /* 0xB0 */ + 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, /* 0xC0 */ + 0x3158, 0x3159, 0x315A, 0x315B, 0x315C, 0x315D, 0x315E, 0x315F, /* 0xC0 */ + 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, /* 0xD0 */ + 0x3168, 0x3169, 0x316A, 0x316B, 0x316C, 0x316D, 0x316E, 0x316F, /* 0xD0 */ + 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, /* 0xE0 */ + 0x3178, 0x3179, 0x317A, 0x317B, 0x317C, 0x317D, 0x317E, 0x317F, /* 0xE0 */ + 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, /* 0xF0 */ + 0x3188, 0x3189, 0x318A, 0x318B, 0x318C, 0x318D, 0x318E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_DB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, /* 0x30 */ + 0x2177, 0x2178, 0x2179, 0, 0, 0, 0, 0, /* 0x30 */ + 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, /* 0x40 */ + 0x2168, 0x2169, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x50 */ + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0x50 */ + 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0x60 */ + 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0x70 */ + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, /* 0x90 */ + 0x03C7, 0x03C8, 0x03C9, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, /* 0xA0 */ + 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, /* 0xA0 */ + 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, /* 0xB0 */ + 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, /* 0xB0 */ + 0x2542, 0x2512, 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, 0x250E, /* 0xC0 */ + 0x250D, 0x251E, 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, /* 0xC0 */ + 0x252A, 0x252D, 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, /* 0xD0 */ + 0x253A, 0x253D, 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, /* 0xD0 */ + 0x2546, 0x2547, 0x2548, 0x2549, 0x254A /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_DC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33C4, 0x33A3, /* 0x30 */ + 0x33A4, 0x33A5, 0x33A6, 0x3399, 0x339A, 0x339B, 0x339C, 0x339D, /* 0x30 */ + 0x339E, 0x339F, 0x33A0, 0x33A1, 0x33A2, 0x33CA, 0x338D, 0x338E, /* 0x40 */ + 0x338F, 0x33CF, 0x3388, 0x3389, 0x33C8, 0x33A7, 0x33A8, 0x33B0, /* 0x40 */ + 0x33B1, 0x33B2, 0x33B3, 0x33B4, 0x33B5, 0x33B6, 0x33B7, 0x33B8, /* 0x50 */ + 0x33B9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33BA, 0x33BB, /* 0x50 */ + 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390, 0x3391, 0x3392, 0x3393, /* 0x60 */ + 0x3394, 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B, 0x338C, 0x33D6, /* 0x60 */ + 0x33C5, 0x33AD, 0x33AE, 0x33AF, 0x33DB, 0x33A9, 0x33AA, 0x33AB, /* 0x70 */ + 0x33AC, 0x33DD, 0x33D0, 0x33D3, 0x33C3, 0x33C9, 0x33DC, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x33C6, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x00C6, 0x00D0, 0x00AA, 0x0126, 0, 0x0132, 0, /* 0xA0 */ + 0x013F, 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00DE, 0x0166, 0x014A, /* 0xA0 */ + 0, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, /* 0xB0 */ + 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, 0x326D, 0x326E, /* 0xB0 */ + 0x326F, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, /* 0xC0 */ + 0x3277, 0x3278, 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, /* 0xC0 */ + 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, /* 0xD0 */ + 0x24DB, 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, /* 0xD0 */ + 0x24E3, 0x24E4, 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, /* 0xE0 */ + 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, /* 0xE0 */ + 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x00BD, 0x2153, /* 0xF0 */ + 0x2154, 0x00BC, 0x00BE, 0x215B, 0x215C, 0x215D, 0x215E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_DD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, /* 0x30 */ + 0x0140, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x0167, 0x014B, /* 0x30 */ + 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, /* 0x40 */ + 0x3207, 0x3208, 0x3209, 0x320A, 0x320B, 0x320C, 0x320D, 0x320E, /* 0x40 */ + 0x320F, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, /* 0x50 */ + 0x3217, 0x3218, 0x3219, 0x321A, 0x321B, 0x249C, 0x249D, 0x249E, /* 0x50 */ + 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, /* 0x60 */ + 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, /* 0x60 */ + 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x2474, /* 0x70 */ + 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x247C, 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, /* 0x90 */ + 0x00B9, 0x00B2, 0x00B3, 0x2074, 0x207F, 0x2081, 0x2082, 0x2083, /* 0x90 */ + 0x2084, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0xA0 */ + 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0xA0 */ + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0xB0 */ + 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0xB0 */ + 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0xC0 */ + 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0xC0 */ + 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0xD0 */ + 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0xD0 */ + 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0xE0 */ + 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0xE0 */ + 0x3090, 0x3091, 0x3092, 0x3093 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_DE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0x30 */ + 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0x30 */ + 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0x40 */ + 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0x40 */ + 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0x50 */ + 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0x50 */ + 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0x60 */ + 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0x60 */ + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0x70 */ + 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, /* 0x90 */ + 0x30F6, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0xA0 */ + 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0xA0 */ + 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0xB0 */ + 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0xB0 */ + 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0xD0 */ + 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0xD0 */ + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0xE0 */ + 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0xE0 */ + 0x044E, 0x044F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F3D, 0x4F73, 0x5047, 0x50F9, 0x52A0, 0x53EF, 0x5475, /* 0x30 */ + 0x54E5, 0x5609, 0x5AC1, 0x5BB6, 0x6687, 0x67B6, 0x67B7, 0x67EF, /* 0x30 */ + 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB, 0x8304, 0x8857, 0x8888, /* 0x40 */ + 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6, 0x99D5, 0x523B, 0x5374, /* 0x40 */ + 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF, 0x811A, 0x89BA, 0x89D2, /* 0x50 */ + 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978, 0x59E6, 0x5E72, 0x5E79, /* 0x50 */ + 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F, 0x6F97, 0x764E, 0x770B, /* 0x60 */ + 0x78F5, 0x7A08, 0x7AFF, 0x7C21, 0x809D, 0x826E, 0x8271, 0x8AEB, /* 0x60 */ + 0x9593, 0x4E6B, 0x559D, 0x66F7, 0x6E34, 0x78A3, 0x7AED, 0x845B, /* 0x70 */ + 0x8910, 0x874E, 0x97A8, 0x52D8, 0x574E, 0x582A, 0x5D4C, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x611F, 0x61BE, 0x6221, 0x6562, 0x67D1, 0x6A44, 0x6E1B, /* 0x90 */ + 0x7518, 0x75B3, 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451, 0x9452, /* 0x90 */ + 0x9F95, 0x5323, 0x5CAC, 0x7532, 0x80DB, 0x9240, 0x9598, 0x525B, /* 0xA0 */ + 0x5808, 0x59DC, 0x5CA1, 0x5D17, 0x5EB7, 0x5F3A, 0x5F4A, 0x6177, /* 0xA0 */ + 0x6C5F, 0x757A, 0x7586, 0x7CE0, 0x7D73, 0x7DB1, 0x7F8C, 0x8154, /* 0xB0 */ + 0x8221, 0x8591, 0x8941, 0x8B1B, 0x92FC, 0x964D, 0x9C47, 0x4ECB, /* 0xB0 */ + 0x4EF7, 0x500B, 0x51F1, 0x584F, 0x6137, 0x613E, 0x6168, 0x6539, /* 0xC0 */ + 0x69EA, 0x6F11, 0x75A5, 0x7686, 0x76D6, 0x7B87, 0x82A5, 0x84CB, /* 0xC0 */ + 0xF900, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751, 0xF901, 0x7CB3, /* 0xD0 */ + 0x7FB9, 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E, /* 0xD0 */ + 0x64DA, 0x64E7, 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0xF902, /* 0xE0 */ + 0x907D, 0x9245, 0x92F8, 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, /* 0xE0 */ + 0x6106, 0x6957, 0x8171, 0x8654, 0x8E47, 0x9375, 0x9A2B, 0x4E5E, /* 0xF0 */ + 0x5091, 0x6770, 0x6840, 0x5109, 0x528D, 0x5292, 0x6AA2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x77BC, 0x9210, 0x9ED4, 0x52AB, 0x602F, 0x8FF2, 0x5048, /* 0x30 */ + 0x61A9, 0x63ED, 0x64CA, 0x683C, 0x6A84, 0x6FC0, 0x8188, 0x89A1, /* 0x30 */ + 0x9694, 0x5805, 0x727D, 0x72AC, 0x7504, 0x7D79, 0x7E6D, 0x80A9, /* 0x40 */ + 0x898B, 0x8B74, 0x9063, 0x9D51, 0x6289, 0x6C7A, 0x6F54, 0x7D50, /* 0x40 */ + 0x7F3A, 0x8A23, 0x517C, 0x614A, 0x7B9D, 0x8B19, 0x9257, 0x938C, /* 0x50 */ + 0x4EAC, 0x4FD3, 0x501E, 0x50BE, 0x5106, 0x52C1, 0x52CD, 0x537F, /* 0x50 */ + 0x5770, 0x5883, 0x5E9A, 0x5F91, 0x6176, 0x61AC, 0x64CE, 0x656C, /* 0x60 */ + 0x666F, 0x66BB, 0x66F4, 0x6897, 0x6D87, 0x7085, 0x70F1, 0x749F, /* 0x60 */ + 0x74A5, 0x74CA, 0x75D9, 0x786C, 0x78EC, 0x7ADF, 0x7AF6, 0x7D45, /* 0x70 */ + 0x7D93, 0x8015, 0x803F, 0x811B, 0x8396, 0x8B66, 0x8F15, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x9015, 0x93E1, 0x9803, 0x9838, 0x9A5A, 0x9BE8, 0x4FC2, /* 0x90 */ + 0x5553, 0x583A, 0x5951, 0x5B63, 0x5C46, 0x60B8, 0x6212, 0x6842, /* 0x90 */ + 0x68B0, 0x68E8, 0x6EAA, 0x754C, 0x7678, 0x78CE, 0x7A3D, 0x7CFB, /* 0xA0 */ + 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1, 0x8C3F, 0x968E, 0x9DC4, 0x53E4, /* 0xA0 */ + 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1, 0x5B64, 0x5C3B, 0x5EAB, /* 0xB0 */ + 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF, 0x69C1, 0x6CBD, /* 0xB0 */ + 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003, 0x80A1, 0x818F, /* 0xC0 */ + 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4, 0x8AA5, 0xF903, /* 0xC0 */ + 0x8F9C, 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED, 0x659B, /* 0xD0 */ + 0x66F2, 0x688F, 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764, 0x5D11, /* 0xD0 */ + 0x6606, 0x68B1, 0x68CD, 0x6EFE, 0x7428, 0x889E, 0x9BE4, 0x6C68, /* 0xE0 */ + 0xF904, 0x9AA8, 0x4F9B, 0x516C, 0x5171, 0x529F, 0x5B54, 0x5DE5, /* 0xE0 */ + 0x6050, 0x606D, 0x62F1, 0x63A7, 0x653B, 0x73D9, 0x7A7A, 0x86A3, /* 0xF0 */ + 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, 0x679C, 0x74DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x79D1, 0x83D3, 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, /* 0x30 */ + 0x9846, 0x5ED3, 0x69E8, 0x85FF, 0x90ED, 0xF905, 0x51A0, 0x5B98, /* 0x30 */ + 0x5BEC, 0x6163, 0x68FA, 0x6B3E, 0x704C, 0x742F, 0x74D8, 0x7BA1, /* 0x40 */ + 0x7F50, 0x83C5, 0x89C0, 0x8CAB, 0x95DC, 0x9928, 0x522E, 0x605D, /* 0x40 */ + 0x62EC, 0x9002, 0x4F8A, 0x5149, 0x5321, 0x58D9, 0x5EE3, 0x66E0, /* 0x50 */ + 0x6D38, 0x709A, 0x72C2, 0x73D6, 0x7B50, 0x80F1, 0x945B, 0x5366, /* 0x50 */ + 0x639B, 0x7F6B, 0x4E56, 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127, /* 0x60 */ + 0x62D0, 0x69D0, 0x9B41, 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, /* 0x60 */ + 0x50D1, 0x54AC, 0x55AC, 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, /* 0x70 */ + 0x6821, 0x6A4B, 0x72E1, 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x81A0, 0x854E, 0x86DF, 0x8F03, 0x8F4E, 0x90CA, 0x9903, /* 0x90 */ + 0x9A55, 0x9BAB, 0x4E18, 0x4E45, 0x4E5D, 0x4EC7, 0x4FF1, 0x5177, /* 0x90 */ + 0x52FE, 0x5340, 0x53E3, 0x53E5, 0x548E, 0x5614, 0x5775, 0x57A2, /* 0xA0 */ + 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, 0x62D8, 0x6551, 0x67B8, 0x67E9, /* 0xA0 */ + 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42, 0x6E9D, 0x7078, 0x72D7, /* 0xB0 */ + 0x7396, 0x7403, 0x77BF, 0x77E9, 0x7A76, 0x7D7F, 0x8009, 0x81FC, /* 0xB0 */ + 0x8205, 0x820A, 0x82DF, 0x8862, 0x8B33, 0x8CFC, 0x8EC0, 0x9011, /* 0xC0 */ + 0x90B1, 0x9264, 0x92B6, 0x99D2, 0x9A45, 0x9CE9, 0x9DD7, 0x9F9C, /* 0xC0 */ + 0x570B, 0x5C40, 0x83CA, 0x97A0, 0x97AB, 0x9EB4, 0x541B, 0x7A98, /* 0xD0 */ + 0x7FA4, 0x88D9, 0x8ECD, 0x90E1, 0x5800, 0x5C48, 0x6398, 0x7A9F, /* 0xD0 */ + 0x5BAE, 0x5F13, 0x7A79, 0x7AAE, 0x828E, 0x8EAC, 0x5026, 0x5238, /* 0xE0 */ + 0x52F8, 0x5377, 0x5708, 0x62F3, 0x6372, 0x6B0A, 0x6DC3, 0x7737, /* 0xE0 */ + 0x53A5, 0x7357, 0x8568, 0x8E76, 0x95D5, 0x673A, 0x6AC3, 0x6F70, /* 0xF0 */ + 0x8A6D, 0x8ECC, 0x994B, 0xF906, 0x6677, 0x6B78, 0x8CB4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B3C, 0xF907, 0x53EB, 0x572D, 0x594E, 0x63C6, 0x69FB, /* 0x30 */ + 0x73EA, 0x7845, 0x7ABA, 0x7AC5, 0x7CFE, 0x8475, 0x898F, 0x8D73, /* 0x30 */ + 0x9035, 0x95A8, 0x52FB, 0x5747, 0x7547, 0x7B60, 0x83CC, 0x921E, /* 0x40 */ + 0xF908, 0x6A58, 0x514B, 0x524B, 0x5287, 0x621F, 0x68D8, 0x6975, /* 0x40 */ + 0x9699, 0x50C5, 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, 0x69FF, /* 0x50 */ + 0x747E, 0x7B4B, 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, /* 0x50 */ + 0xF909, 0x4ECA, 0x5997, 0x64D2, 0x6611, 0x6A8E, 0x7434, 0x7981, /* 0x60 */ + 0x79BD, 0x82A9, 0x887E, 0x887F, 0x895F, 0xF90A, 0x9326, 0x4F0B, /* 0x60 */ + 0x53CA, 0x6025, 0x6271, 0x6C72, 0x7D1A, 0x7D66, 0x4E98, 0x5162, /* 0x70 */ + 0x77DC, 0x80AF, 0x4F01, 0x4F0E, 0x5176, 0x5180, 0x55DC, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x5668, 0x573B, 0x57FA, 0x57FC, 0x5914, 0x5947, 0x5993, /* 0x90 */ + 0x5BC4, 0x5C90, 0x5D0E, 0x5DF1, 0x5E7E, 0x5FCC, 0x6280, 0x65D7, /* 0x90 */ + 0x65E3, 0x671E, 0x671F, 0x675E, 0x68CB, 0x68C4, 0x6A5F, 0x6B3A, /* 0xA0 */ + 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, 0x7398, 0x7426, 0x742A, 0x7482, /* 0xA0 */ + 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, 0x7941, 0x7947, 0x7948, /* 0xB0 */ + 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006, 0x802D, 0x808C, /* 0xB0 */ + 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324, 0x98E2, 0x9951, /* 0xC0 */ + 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76, 0x5409, 0x62EE, /* 0xC0 */ + 0x6854, 0x91D1, 0x55AB, 0x513A, 0xF90B, 0xF90C, 0x5A1C, 0x61E6, /* 0xD0 */ + 0xF90D, 0x62CF, 0x62FF, 0xF90E, 0xF90F, 0xF910, 0xF911, 0xF912, /* 0xD0 */ + 0xF913, 0x90A3, 0xF914, 0xF915, 0xF916, 0xF917, 0xF918, 0x8AFE, /* 0xE0 */ + 0xF919, 0xF91A, 0xF91B, 0xF91C, 0x6696, 0xF91D, 0x7156, 0xF91E, /* 0xE0 */ + 0xF91F, 0x96E3, 0xF920, 0x634F, 0x637A, 0x5357, 0xF921, 0x678F, /* 0xF0 */ + 0x6960, 0x6E73, 0xF922, 0x7537, 0xF923, 0xF924, 0xF925 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D0D, 0xF926, 0xF927, 0x8872, 0x56CA, 0x5A18, 0xF928, /* 0x30 */ + 0xF929, 0xF92A, 0xF92B, 0xF92C, 0x4E43, 0xF92D, 0x5167, 0x5948, /* 0x30 */ + 0x67F0, 0x8010, 0xF92E, 0x5973, 0x5E74, 0x649A, 0x79CA, 0x5FF5, /* 0x40 */ + 0x606C, 0x62C8, 0x637B, 0x5BE7, 0x5BD7, 0x52AA, 0xF92F, 0x5974, /* 0x40 */ + 0x5F29, 0x6012, 0xF930, 0xF931, 0xF932, 0x7459, 0xF933, 0xF934, /* 0x50 */ + 0xF935, 0xF936, 0xF937, 0xF938, 0x99D1, 0xF939, 0xF93A, 0xF93B, /* 0x50 */ + 0xF93C, 0xF93D, 0xF93E, 0xF93F, 0xF940, 0xF941, 0xF942, 0xF943, /* 0x60 */ + 0x6FC3, 0xF944, 0xF945, 0x81BF, 0x8FB2, 0x60F1, 0xF946, 0xF947, /* 0x60 */ + 0x8166, 0xF948, 0xF949, 0x5C3F, 0xF94A, 0xF94B, 0xF94C, 0xF94D, /* 0x70 */ + 0xF94E, 0xF94F, 0xF950, 0xF951, 0x5AE9, 0x8A25, 0x677B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x7D10, 0xF952, 0xF953, 0xF954, 0xF955, 0xF956, 0xF957, /* 0x90 */ + 0x80FD, 0xF958, 0xF959, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, 0x591A, /* 0x90 */ + 0x8336, 0x4E39, 0x4EB6, 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, /* 0xA0 */ + 0x65B7, 0x65E6, 0x6A80, 0x6BB5, 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, /* 0xA0 */ + 0x7DDE, 0x86CB, 0x8892, 0x9132, 0x935B, 0x64BB, 0x6FBE, 0x737A, /* 0xB0 */ + 0x75B8, 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4, 0x66C7, 0x6DE1, /* 0xB0 */ + 0x6E5B, 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541, 0x8983, /* 0xC0 */ + 0x8AC7, 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D, /* 0xC0 */ + 0x5510, 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, /* 0xD0 */ + 0x7CD6, 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, /* 0xD0 */ + 0x5CB1, 0x5E36, 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, /* 0xE0 */ + 0x8CB8, 0x968A, 0x9EDB, 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, /* 0xE0 */ + 0x5230, 0x5716, 0x5835, 0x5857, 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, /* 0xF0 */ + 0x5EA6, 0x5F92, 0x60BC, 0x6311, 0x6389, 0x6417, 0x6843 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x68F9, 0x6AC2, 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE, /* 0x30 */ + 0x76DC, 0x7779, 0x79B1, 0x7A3B, 0x8404, 0x89A9, 0x8CED, 0x8DF3, /* 0x30 */ + 0x8E48, 0x9003, 0x9014, 0x9053, 0x90FD, 0x934D, 0x9676, 0x97DC, /* 0x40 */ + 0x6BD2, 0x7006, 0x7258, 0x72A2, 0x7368, 0x7763, 0x79BF, 0x7BE4, /* 0x40 */ + 0x7E9B, 0x8B80, 0x58A9, 0x60C7, 0x6566, 0x65FD, 0x66BE, 0x6C8C, /* 0x50 */ + 0x711E, 0x71C9, 0x8C5A, 0x9813, 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, /* 0x50 */ + 0x51CD, 0x52D5, 0x540C, 0x61A7, 0x6771, 0x6850, 0x68DF, 0x6D1E, /* 0x60 */ + 0x6F7C, 0x75BC, 0x77B3, 0x7AE5, 0x80F4, 0x8463, 0x9285, 0x515C, /* 0x60 */ + 0x6597, 0x675C, 0x6793, 0x75D8, 0x7AC7, 0x8373, 0xF95A, 0x8C46, /* 0x70 */ + 0x9017, 0x982D, 0x5C6F, 0x81C0, 0x829A, 0x9041, 0x906F, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x920D, 0x5F97, 0x5D9D, 0x6A59, 0x71C8, 0x767B, 0x7B49, /* 0x90 */ + 0x85E4, 0x8B04, 0x9127, 0x9A30, 0x5587, 0x61F6, 0xF95B, 0x7669, /* 0x90 */ + 0x7F85, 0x863F, 0x87BA, 0x88F8, 0x908F, 0xF95C, 0x6D1B, 0x70D9, /* 0xA0 */ + 0x73DE, 0x7D61, 0x843D, 0xF95D, 0x916A, 0x99F1, 0xF95E, 0x4E82, /* 0xA0 */ + 0x5375, 0x6B04, 0x6B12, 0x703E, 0x721B, 0x862D, 0x9E1E, 0x524C, /* 0xB0 */ + 0x8FA3, 0x5D50, 0x64E5, 0x652C, 0x6B16, 0x6FEB, 0x7C43, 0x7E9C, /* 0xB0 */ + 0x85CD, 0x8964, 0x89BD, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, /* 0xC0 */ + 0x6D6A, 0x72FC, 0x7405, 0x746F, 0x8782, 0x90DE, 0x4F86, 0x5D0D, /* 0xC0 */ + 0x5FA0, 0x840A, 0x51B7, 0x63A0, 0x7565, 0x4EAE, 0x5006, 0x5169, /* 0xD0 */ + 0x51C9, 0x6881, 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F, 0x8AD2, /* 0xD0 */ + 0x8F1B, 0x91CF, 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E, /* 0xE0 */ + 0x623E, 0x65C5, 0x6ADA, 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, /* 0xE0 */ + 0x9A62, 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x701D, /* 0xF0 */ + 0x792B, 0x8F62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6F23 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7149, 0x7489, 0x7DF4, 0x806F, 0x84EE, 0x8F26, 0x9023, /* 0x30 */ + 0x934A, 0x51BD, 0x5217, 0x52A3, 0x6D0C, 0x70C8, 0x88C2, 0x5EC9, /* 0x30 */ + 0x6582, 0x6BAE, 0x6FC2, 0x7C3E, 0x7375, 0x4EE4, 0x4F36, 0x56F9, /* 0x40 */ + 0xF95F, 0x5CBA, 0x5DBA, 0x601C, 0x73B2, 0x7B2D, 0x7F9A, 0x7FCE, /* 0x40 */ + 0x8046, 0x901E, 0x9234, 0x96F6, 0x9748, 0x9818, 0x9F61, 0x4F8B, /* 0x50 */ + 0x6FA7, 0x79AE, 0x91B4, 0x96B7, 0x52DE, 0xF960, 0x6488, 0x64C4, /* 0x50 */ + 0x6AD3, 0x6F5E, 0x7018, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C, /* 0x60 */ + 0x8DEF, 0x8F05, 0x9732, 0x9B6F, 0x9DFA, 0x9E75, 0x788C, 0x797F, /* 0x60 */ + 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x9E93, 0x8AD6, 0x58DF, 0x5F04, /* 0x70 */ + 0x6727, 0x7027, 0x74CF, 0x7C60, 0x807E, 0x5121, 0x7028, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x7262, 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, 0x96F7, 0x4E86, /* 0x90 */ + 0x50DA, 0x5BEE, 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, 0x804A, /* 0x90 */ + 0x84FC, 0x907C, 0x9B27, 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13, /* 0xA0 */ + 0x6DDA, 0x6F0F, 0x763B, 0x7D2F, 0x7E37, 0x851E, 0x8938, 0x93E4, /* 0xA0 */ + 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4, 0x6D41, 0x6E9C, 0x700F, /* 0xB0 */ + 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C, 0x985E, 0x516D, /* 0xB0 */ + 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8, 0x8F2A, /* 0xC0 */ + 0x5F8B, 0x6144, 0x6817, 0xF961, 0x9686, 0x52D2, 0x808B, 0x51DC, /* 0xC0 */ + 0x51CC, 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, /* 0xD0 */ + 0x5398, 0x540F, 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, /* 0xD0 */ + 0x7281, 0x72F8, 0x7406, 0x7483, 0xF962, 0x75E2, 0x7C6C, 0x7F79, /* 0xE0 */ + 0x7FB8, 0x8389, 0x88CF, 0x88E1, 0x91CC, 0x91D0, 0x96E2, 0x9BC9, /* 0xE0 */ + 0x541D, 0x6F7E, 0x71D0, 0x7498, 0x85FA, 0x8EAA, 0x96A3, 0x9C57, /* 0xF0 */ + 0x9E9F, 0x6797, 0x6DCB, 0x7433, 0x81E8, 0x9716, 0x782C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7ACB, 0x7B20, 0x7C92, 0x6469, 0x746A, 0x75F2, 0x78BC, /* 0x30 */ + 0x78E8, 0x99AC, 0x9B54, 0x9EBB, 0x5BDE, 0x5E55, 0x6F20, 0x819C, /* 0x30 */ + 0x83AB, 0x9088, 0x4E07, 0x534D, 0x5A29, 0x5DD2, 0x5F4E, 0x6162, /* 0x40 */ + 0x633D, 0x6669, 0x66FC, 0x6EFF, 0x6F2B, 0x7063, 0x779E, 0x842C, /* 0x40 */ + 0x8513, 0x883B, 0x8F13, 0x9945, 0x9C3B, 0x551C, 0x62B9, 0x672B, /* 0x50 */ + 0x6CAB, 0x8309, 0x896A, 0x977A, 0x4EA1, 0x5984, 0x5FD8, 0x5FD9, /* 0x50 */ + 0x671B, 0x7DB2, 0x7F54, 0x8292, 0x832B, 0x83BD, 0x8F1E, 0x9099, /* 0x60 */ + 0x57CB, 0x59B9, 0x5A92, 0x5BD0, 0x6627, 0x679A, 0x6885, 0x6BCF, /* 0x60 */ + 0x7164, 0x7F75, 0x8CB7, 0x8CE3, 0x9081, 0x9B45, 0x8108, 0x8C8A, /* 0x70 */ + 0x964C, 0x9A40, 0x9EA5, 0x5B5F, 0x6C13, 0x731B, 0x76F2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x76DF, 0x840C, 0x51AA, 0x8993, 0x514D, 0x5195, 0x52C9, /* 0x90 */ + 0x68C9, 0x6C94, 0x7704, 0x7720, 0x7DBF, 0x7DEC, 0x9762, 0x9EB5, /* 0x90 */ + 0x6EC5, 0x8511, 0x51A5, 0x540D, 0x547D, 0x660E, 0x669D, 0x6927, /* 0xA0 */ + 0x6E9F, 0x76BF, 0x7791, 0x8317, 0x84C2, 0x879F, 0x9169, 0x9298, /* 0xA0 */ + 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, 0x59C6, 0x5E3D, 0x6155, /* 0xB0 */ + 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD, 0x6BDB, 0x725F, /* 0xB0 */ + 0x7261, 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC, 0x8305, 0x8B00, /* 0xC0 */ + 0x8B28, 0x8C8C, 0x6728, 0x6C90, 0x7267, 0x76EE, 0x7766, 0x7A46, /* 0xC0 */ + 0x9DA9, 0x6B7F, 0x6C92, 0x5922, 0x6726, 0x8499, 0x536F, 0x5893, /* 0xD0 */ + 0x5999, 0x5EDF, 0x63CF, 0x6634, 0x6773, 0x6E3A, 0x732B, 0x7AD7, /* 0xD0 */ + 0x82D7, 0x9328, 0x52D9, 0x5DEB, 0x61AE, 0x61CB, 0x620A, 0x62C7, /* 0xE0 */ + 0x64AB, 0x65E0, 0x6959, 0x6B66, 0x6BCB, 0x7121, 0x73F7, 0x755D, /* 0xE0 */ + 0x7E46, 0x821E, 0x8302, 0x856A, 0x8AA3, 0x8CBF, 0x9727, 0x9D61, /* 0xF0 */ + 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, 0x554F, 0x6587 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C76, 0x7D0A, 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF, /* 0x30 */ + 0x52FF, 0x6C95, 0x7269, 0x5473, 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C, /* 0x30 */ + 0x5FAE, 0x672A, 0x68B6, 0x6963, 0x6E3C, 0x6E44, 0x7709, 0x7C73, /* 0x40 */ + 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761, 0x9EF4, 0x5CB7, 0x60B6, /* 0x40 */ + 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11, 0x6CEF, 0x739F, /* 0x50 */ + 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D, 0x535A, /* 0x50 */ + 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E, /* 0x60 */ + 0x7B94, 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9, /* 0x60 */ + 0x99C1, 0x4F34, 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500, /* 0x70 */ + 0x6591, 0x69C3, 0x6CEE, 0x6F58, 0x73ED, 0x7554, 0x7622, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x76E4, 0x76FC, 0x78D0, 0x78FB, 0x792C, 0x7D46, 0x822C, /* 0x90 */ + 0x87E0, 0x8FD4, 0x9812, 0x98EF, 0x52C3, 0x62D4, 0x64A5, 0x6E24, /* 0x90 */ + 0x6F51, 0x767C, 0x8DCB, 0x91B1, 0x9262, 0x9AEE, 0x9B43, 0x5023, /* 0xA0 */ + 0x508D, 0x574A, 0x59A8, 0x5C28, 0x5E47, 0x5F77, 0x623F, 0x653E, /* 0xA0 */ + 0x65B9, 0x65C1, 0x6609, 0x678B, 0x699C, 0x6EC2, 0x78C5, 0x7D21, /* 0xB0 */ + 0x80AA, 0x8180, 0x822B, 0x82B3, 0x84A1, 0x868C, 0x8A2A, 0x8B17, /* 0xB0 */ + 0x90A6, 0x9632, 0x9F90, 0x500D, 0x4FF3, 0xF963, 0x57F9, 0x5F98, /* 0xC0 */ + 0x62DC, 0x6392, 0x676F, 0x6E43, 0x7119, 0x76C3, 0x80CC, 0x80DA, /* 0xC0 */ + 0x88F4, 0x88F5, 0x8919, 0x8CE0, 0x8F29, 0x914D, 0x966A, 0x4F2F, /* 0xD0 */ + 0x4F70, 0x5E1B, 0x67CF, 0x6822, 0x767D, 0x767E, 0x9B44, 0x5E61, /* 0xD0 */ + 0x6A0A, 0x7169, 0x71D4, 0x756A, 0xF964, 0x7E41, 0x8543, 0x85E9, /* 0xE0 */ + 0x98DC, 0x4F10, 0x7B4F, 0x7F70, 0x95A5, 0x51E1, 0x5E06, 0x68B5, /* 0xE0 */ + 0x6C3E, 0x6C4E, 0x6CDB, 0x72AF, 0x7BC4, 0x8303, 0x6CD5, 0x743A, /* 0xF0 */ + 0x50FB, 0x5288, 0x58C1, 0x64D8, 0x6A97, 0x74A7, 0x7656 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_E9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x78A7, 0x8617, 0x95E2, 0x9739, 0xF965, 0x535E, 0x5F01, /* 0x30 */ + 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, 0x5225, 0x77A5, 0x9C49, 0x9F08, /* 0x30 */ + 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, 0x661E, 0x663A, 0x67C4, /* 0x40 */ + 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, 0x8F27, 0x9920, /* 0x40 */ + 0x9A08, 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65, 0x6D11, /* 0x50 */ + 0x6E7A, 0x6F7D, 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913, 0x8B5C, /* 0x50 */ + 0x8F14, 0x4F0F, 0x50D5, 0x5310, 0x535C, 0x5B93, 0x5FA9, 0x670D, /* 0x60 */ + 0x798F, 0x8179, 0x832F, 0x8514, 0x8907, 0x8986, 0x8F39, 0x8F3B, /* 0x60 */ + 0x99A5, 0x9C12, 0x672C, 0x4E76, 0x4FF8, 0x5949, 0x5C01, 0x5CEF, /* 0x70 */ + 0x5CF0, 0x6367, 0x68D2, 0x70FD, 0x71A2, 0x742B, 0x7E2B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x84EC, 0x8702, 0x9022, 0x92D2, 0x9CF3, 0x4E0D, 0x4ED8, /* 0x90 */ + 0x4FEF, 0x5085, 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, 0x592B, /* 0x90 */ + 0x5A66, 0x5B5A, 0x5B75, 0x5BCC, 0x5E9C, 0xF966, 0x6276, 0x6577, /* 0xA0 */ + 0x65A7, 0x6D6E, 0x6EA5, 0x7236, 0x7B26, 0x7C3F, 0x7F36, 0x8150, /* 0xA0 */ + 0x8151, 0x819A, 0x8240, 0x8299, 0x83A9, 0x8A03, 0x8CA0, 0x8CE6, /* 0xB0 */ + 0x8CFB, 0x8D74, 0x8DBA, 0x90E8, 0x91DC, 0x961C, 0x9644, 0x99D9, /* 0xB0 */ + 0x9CE7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954, 0x596E, /* 0xC0 */ + 0x5FFF, 0x61A4, 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89, /* 0xC0 */ + 0x7CDE, 0x7D1B, 0x82AC, 0x8CC1, 0x96F0, 0xF967, 0x4F5B, 0x5F17, /* 0xD0 */ + 0x5F7F, 0x62C2, 0x5D29, 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, /* 0xD0 */ + 0x4E15, 0x5099, 0x5315, 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, /* 0xE0 */ + 0x60B2, 0x618A, 0x6249, 0x6279, 0x6590, 0x6787, 0x69A7, 0x6BD4, /* 0xE0 */ + 0x6BD6, 0x6BD7, 0x6BD8, 0x6CB8, 0xF968, 0x7435, 0x75FA, 0x7812, /* 0xF0 */ + 0x7891, 0x79D5, 0x79D8, 0x7C83, 0x7DCB, 0x7FE1, 0x80A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_EA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x813E, 0x81C2, 0x83F2, 0x871A, 0x88E8, 0x8AB9, 0x8B6C, /* 0x30 */ + 0x8CBB, 0x9119, 0x975E, 0x98DB, 0x9F3B, 0x56AC, 0x5B2A, 0x5F6C, /* 0x30 */ + 0x658C, 0x6AB3, 0x6BAF, 0x6D5C, 0x6FF1, 0x7015, 0x725D, 0x73AD, /* 0x40 */ + 0x8CA7, 0x8CD3, 0x983B, 0x6191, 0x6C37, 0x8058, 0x9A01, 0x4E4D, /* 0x40 */ + 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C, 0x4F7F, 0x4FDF, 0x50FF, /* 0x50 */ + 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB, 0x5962, 0x5A11, /* 0x50 */ + 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99, 0x601D, 0x6368, /* 0x60 */ + 0x659C, 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B, 0x6C99, 0x6CD7, /* 0x60 */ + 0x6E23, 0x7009, 0x7345, 0x7802, 0x793E, 0x7940, 0x7960, 0x79C1, /* 0x70 */ + 0x7BE9, 0x7D17, 0x7D72, 0x8086, 0x820D, 0x838E, 0x84D1, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x86C7, 0x88DF, 0x8A50, 0x8A5E, 0x8B1D, 0x8CDC, 0x8D66, /* 0x90 */ + 0x8FAD, 0x90AA, 0x98FC, 0x99DF, 0x9E9D, 0x524A, 0xF969, 0x6714, /* 0x90 */ + 0xF96A, 0x5098, 0x522A, 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523, /* 0xA0 */ + 0x759D, 0x7B97, 0x849C, 0x9178, 0x9730, 0x4E77, 0x6492, 0x6BBA, /* 0xA0 */ + 0x715E, 0x85A9, 0x4E09, 0xF96B, 0x6749, 0x68EE, 0x6E17, 0x829F, /* 0xB0 */ + 0x8518, 0x886B, 0x63F7, 0x6F81, 0x9212, 0x98AF, 0x4E0A, 0x50B7, /* 0xB0 */ + 0x50CF, 0x511F, 0x5546, 0x55AA, 0x5617, 0x5B40, 0x5C19, 0x5CE0, /* 0xC0 */ + 0x5E38, 0x5E8A, 0x5EA0, 0x5EC2, 0x60F3, 0x6851, 0x6A61, 0x6E58, /* 0xC0 */ + 0x723D, 0x7240, 0x72C0, 0x76F8, 0x7965, 0x7BB1, 0x7FD4, 0x88F3, /* 0xD0 */ + 0x89F4, 0x8A73, 0x8C61, 0x8CDE, 0x971C, 0x585E, 0x74BD, 0x8CFD, /* 0xD0 */ + 0x55C7, 0xF96C, 0x7A61, 0x7D22, 0x8272, 0x7272, 0x751F, 0x7525, /* 0xE0 */ + 0xF96D, 0x7B19, 0x5885, 0x58FB, 0x5DBC, 0x5E8F, 0x5EB6, 0x5F90, /* 0xE0 */ + 0x6055, 0x6292, 0x637F, 0x654D, 0x6691, 0x66D9, 0x66F8, 0x6816, /* 0xF0 */ + 0x68F2, 0x7280, 0x745E, 0x7B6E, 0x7D6E, 0x7DD6, 0x7F72 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_EB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x80E5, 0x8212, 0x85AF, 0x897F, 0x8A93, 0x901D, 0x92E4, /* 0x30 */ + 0x9ECD, 0x9F20, 0x5915, 0x596D, 0x5E2D, 0x60DC, 0x6614, 0x6673, /* 0x30 */ + 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, 0x78A9, 0x84C6, 0x91CB, /* 0x40 */ + 0x932B, 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, 0x5BA3, 0x6247, /* 0x40 */ + 0x657E, 0x65CB, 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487, 0x74BF, /* 0x50 */ + 0x766C, 0x79AA, 0x7DDA, 0x7E55, 0x7FA8, 0x817A, 0x81B3, 0x8239, /* 0x50 */ + 0x861A, 0x87EC, 0x8A75, 0x8DE3, 0x9078, 0x9291, 0x9425, 0x994D, /* 0x60 */ + 0x9BAE, 0x5368, 0x5C51, 0x6954, 0x6CC4, 0x6D29, 0x6E2B, 0x820C, /* 0x60 */ + 0x859B, 0x893B, 0x8A2D, 0x8AAA, 0x96EA, 0x9F67, 0x5261, 0x66B9, /* 0x70 */ + 0x6BB2, 0x7E96, 0x87FE, 0x8D0D, 0x9583, 0x965D, 0x651D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x6D89, 0x71EE, 0xF96E, 0x57CE, 0x59D3, 0x5BAC, 0x6027, /* 0x90 */ + 0x60FA, 0x6210, 0x661F, 0x665F, 0x7329, 0x73F9, 0x76DB, 0x7701, /* 0x90 */ + 0x7B6C, 0x8056, 0x8072, 0x8165, 0x8AA0, 0x9192, 0x4E16, 0x52E2, /* 0xA0 */ + 0x6B72, 0x6D17, 0x7A05, 0x7B39, 0x7D30, 0xF96F, 0x8CB0, 0x53EC, /* 0xA0 */ + 0x562F, 0x5851, 0x5BB5, 0x5C0F, 0x5C11, 0x5DE2, 0x6240, 0x6383, /* 0xB0 */ + 0x6414, 0x662D, 0x68B3, 0x6CBC, 0x6D88, 0x6EAF, 0x701F, 0x70A4, /* 0xB0 */ + 0x71D2, 0x7526, 0x758F, 0x758E, 0x7619, 0x7B11, 0x7BE0, 0x7C2B, /* 0xC0 */ + 0x7D20, 0x7D39, 0x852C, 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, /* 0xC0 */ + 0x90B5, 0x92B7, 0x97F6, 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, /* 0xD0 */ + 0x7C9F, 0x7E8C, 0x8B16, 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, /* 0xD0 */ + 0x84C0, 0x905C, 0x98E1, 0x7387, 0x5B8B, 0x609A, 0x677E, 0x6DDE, /* 0xE0 */ + 0x8A1F, 0x8AA6, 0x9001, 0x980C, 0x5237, 0xF970, 0x7051, 0x788E, /* 0xE0 */ + 0x9396, 0x8870, 0x91D7, 0x4FEE, 0x53D7, 0x55FD, 0x56DA, 0x5782, /* 0xF0 */ + 0x58FD, 0x5AC2, 0x5B88, 0x5CAB, 0x5CC0, 0x5E25, 0x6101 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_EC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x620D, 0x624B, 0x6388, 0x641C, 0x6536, 0x6578, 0x6A39, /* 0x30 */ + 0x6B8A, 0x6C34, 0x6D19, 0x6F31, 0x71E7, 0x72E9, 0x7378, 0x7407, /* 0x30 */ + 0x74B2, 0x7626, 0x7761, 0x79C0, 0x7A57, 0x7AEA, 0x7CB9, 0x7D8F, /* 0x40 */ + 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331, 0x8490, 0x84DA, 0x85EA, /* 0x40 */ + 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083, 0x916C, 0x9296, /* 0x50 */ + 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700, 0x9808, 0x9996, /* 0x50 */ + 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70, 0x5BBF, 0x6DD1, /* 0x60 */ + 0x6F5A, 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD, 0x5DE1, 0x5F87, /* 0x60 */ + 0x5FAA, 0x6042, 0x65EC, 0x6812, 0x696F, 0x6A53, 0x6B89, 0x6D35, /* 0x70 */ + 0x6DF3, 0x73E3, 0x76FE, 0x77AC, 0x7B4D, 0x7D14, 0x8123, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x821C, 0x8340, 0x84F4, 0x8563, 0x8A62, 0x8AC4, 0x9187, /* 0x90 */ + 0x931E, 0x9806, 0x99B4, 0x620C, 0x8853, 0x8FF0, 0x9265, 0x5D07, /* 0x90 */ + 0x5D27, 0x5D69, 0x745F, 0x819D, 0x8768, 0x6FD5, 0x62FE, 0x7FD2, /* 0xA0 */ + 0x8936, 0x8972, 0x4E1E, 0x4E58, 0x50E7, 0x52DD, 0x5347, 0x627F, /* 0xA0 */ + 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, 0x5319, 0x5636, 0x59CB, /* 0xB0 */ + 0x5AA4, 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, 0x6043, 0x65BD, /* 0xB0 */ + 0x662F, 0x6642, 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, 0x7FC5, /* 0xC0 */ + 0x8494, 0x84CD, 0x8996, 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A, /* 0xC0 */ + 0x57F4, 0x5BD4, 0x5F0F, 0x606F, 0x62ED, 0x690D, 0x6B96, 0x6E5C, /* 0xD0 */ + 0x7184, 0x7BD2, 0x8755, 0x8B58, 0x8EFE, 0x98DF, 0x98FE, 0x4F38, /* 0xD0 */ + 0x4F81, 0x4FE1, 0x547B, 0x5A20, 0x5BB8, 0x613C, 0x65B0, 0x6668, /* 0xE0 */ + 0x71FC, 0x7533, 0x795E, 0x7D33, 0x814E, 0x81E3, 0x8398, 0x85AA, /* 0xE0 */ + 0x85CE, 0x8703, 0x8A0A, 0x8EAB, 0x8F9B, 0xF971, 0x8FC5, 0x5931, /* 0xF0 */ + 0x5BA4, 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, 0x5FC3, 0x6C81 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_ED[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF972, 0x6DF1, 0x700B, 0x751A, 0x82AF, 0x8AF6, 0x4EC0, /* 0x30 */ + 0x5341, 0xF973, 0x96D9, 0x6C0F, 0x4E9E, 0x4FC4, 0x5152, 0x555E, /* 0x30 */ + 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD, 0x83AA, 0x86FE, 0x8859, /* 0x40 */ + 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09, 0x9D5D, 0x580A, 0x5CB3, /* 0x40 */ + 0x5DBD, 0x5E44, 0x60E1, 0x6115, 0x63E1, 0x6A02, 0x6E25, 0x9102, /* 0x50 */ + 0x9354, 0x984E, 0x9C10, 0x9F77, 0x5B89, 0x5CB8, 0x6309, 0x664F, /* 0x50 */ + 0x6848, 0x773C, 0x96C1, 0x978D, 0x9854, 0x9B9F, 0x65A1, 0x8B01, /* 0x60 */ + 0x8ECB, 0x95BC, 0x5535, 0x5CA9, 0x5DD6, 0x5EB5, 0x6697, 0x764C, /* 0x60 */ + 0x83F4, 0x95C7, 0x58D3, 0x62BC, 0x72CE, 0x9D28, 0x4EF0, 0x592E, /* 0x70 */ + 0x600F, 0x663B, 0x6B83, 0x79E7, 0x9D26, 0x5393, 0x54C0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x57C3, 0x5D16, 0x611B, 0x66D6, 0x6DAF, 0x788D, 0x827E, /* 0x90 */ + 0x9698, 0x9744, 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A, 0x814B, /* 0x90 */ + 0x984D, 0x6AFB, 0x7F4C, 0x9DAF, 0x9E1A, 0x4E5F, 0x503B, 0x51B6, /* 0xA0 */ + 0x591C, 0x60F9, 0x63F6, 0x6930, 0x723A, 0x8036, 0xF974, 0x91CE, /* 0xA0 */ + 0x5F31, 0xF975, 0xF976, 0x7D04, 0x82E5, 0x846F, 0x84BB, 0x85E5, /* 0xB0 */ + 0x8E8D, 0xF977, 0x4F6F, 0xF978, 0xF979, 0x58E4, 0x5B43, 0x6059, /* 0xB0 */ + 0x63DA, 0x6518, 0x656D, 0x6698, 0xF97A, 0x694A, 0x6A23, 0x6D0B, /* 0xC0 */ + 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3, 0x7A70, 0xF97B, 0x7F8A, /* 0xC0 */ + 0xF97C, 0x8944, 0xF97D, 0x8B93, 0x91C0, 0x967D, 0xF97E, 0x990A, /* 0xD0 */ + 0x5704, 0x5FA1, 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, /* 0xD0 */ + 0x9B5A, 0x9F6C, 0x5104, 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, /* 0xE0 */ + 0x5830, 0x5F66, 0x7109, 0x8A00, 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, /* 0xE0 */ + 0x513C, 0x56B4, 0x5944, 0x63A9, 0x6DF9, 0x5DAA, 0x696D, 0x5186, /* 0xF0 */ + 0x4E88, 0x4F59, 0xF97F, 0xF980, 0xF981, 0x5982, 0xF982 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_EE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF983, 0x6B5F, 0x6C5D, 0xF984, 0x74B5, 0x7916, 0xF985, /* 0x30 */ + 0x8207, 0x8245, 0x8339, 0x8F3F, 0x8F5D, 0xF986, 0x9918, 0xF987, /* 0x30 */ + 0xF988, 0xF989, 0x4EA6, 0xF98A, 0x57DF, 0x5F79, 0x6613, 0xF98B, /* 0x40 */ + 0xF98C, 0x75AB, 0x7E79, 0x8B6F, 0xF98D, 0x9006, 0x9A5B, 0x56A5, /* 0x40 */ + 0x5827, 0x59F8, 0x5A1F, 0x5BB4, 0xF98E, 0x5EF6, 0xF98F, 0xF990, /* 0x50 */ + 0x6350, 0x633B, 0xF991, 0x693D, 0x6C87, 0x6CBF, 0x6D8E, 0x6D93, /* 0x50 */ + 0x6DF5, 0x6F14, 0xF992, 0x70DF, 0x7136, 0x7159, 0xF993, 0x71C3, /* 0x60 */ + 0x71D5, 0xF994, 0x784F, 0x786F, 0xF995, 0x7B75, 0x7DE3, 0xF996, /* 0x60 */ + 0x7E2F, 0xF997, 0x884D, 0x8EDF, 0xF998, 0xF999, 0xF99A, 0x925B, /* 0x70 */ + 0xF99B, 0x9CF6, 0xF99C, 0xF99D, 0xF99E, 0x6085, 0x6D85, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF99F, 0x71B1, 0xF9A0, 0xF9A1, 0x95B1, 0x53AD, 0xF9A2, /* 0x90 */ + 0xF9A3, 0xF9A4, 0x67D3, 0xF9A5, 0x708E, 0x7130, 0x7430, 0x8276, /* 0x90 */ + 0x82D2, 0xF9A6, 0x95BB, 0x9AE5, 0x9E7D, 0x66C4, 0xF9A7, 0x71C1, /* 0xA0 */ + 0x8449, 0xF9A8, 0xF9A9, 0x584B, 0xF9AA, 0xF9AB, 0x5DB8, 0x5F71, /* 0xA0 */ + 0xF9AC, 0x6620, 0x668E, 0x6979, 0x69AE, 0x6C38, 0x6CF3, 0x6E36, /* 0xB0 */ + 0x6F41, 0x6FDA, 0x701B, 0x702F, 0x7150, 0x71DF, 0x7370, 0xF9AD, /* 0xB0 */ + 0x745B, 0xF9AE, 0x74D4, 0x76C8, 0x7A4E, 0x7E93, 0xF9AF, 0xF9B0, /* 0xC0 */ + 0x82F1, 0x8A60, 0x8FCE, 0xF9B1, 0x9348, 0xF9B2, 0x9719, 0xF9B3, /* 0xC0 */ + 0xF9B4, 0x4E42, 0x502A, 0xF9B5, 0x5208, 0x53E1, 0x66F3, 0x6C6D, /* 0xD0 */ + 0x6FCA, 0x730A, 0x777F, 0x7A62, 0x82AE, 0x85DD, 0x8602, 0xF9B6, /* 0xD0 */ + 0x88D4, 0x8A63, 0x8B7D, 0x8C6B, 0xF9B7, 0x92B3, 0xF9B8, 0x9713, /* 0xE0 */ + 0x9810, 0x4E94, 0x4F0D, 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433, /* 0xE0 */ + 0x55DA, 0x5862, 0x58BA, 0x5967, 0x5A1B, 0x5BE4, 0x609F, 0xF9B9, /* 0xF0 */ + 0x61CA, 0x6556, 0x65FF, 0x6664, 0x68A7, 0x6C5A, 0x6FB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_EF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x70CF, 0x71AC, 0x7352, 0x7B7D, 0x8708, 0x8AA4, 0x9C32, /* 0x30 */ + 0x9F07, 0x5C4B, 0x6C83, 0x7344, 0x7389, 0x923A, 0x6EAB, 0x7465, /* 0x30 */ + 0x761F, 0x7A69, 0x7E15, 0x860A, 0x5140, 0x58C5, 0x64C1, 0x74EE, /* 0x40 */ + 0x7515, 0x7670, 0x7FC1, 0x9095, 0x96CD, 0x9954, 0x6E26, 0x74E6, /* 0x40 */ + 0x7AA9, 0x7AAA, 0x81E5, 0x86D9, 0x8778, 0x8A1B, 0x5A49, 0x5B8C, /* 0x50 */ + 0x5B9B, 0x68A1, 0x6900, 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, /* 0x50 */ + 0x7DE9, 0x7FEB, 0x8118, 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, /* 0x60 */ + 0x66F0, 0x5F80, 0x65FA, 0x6789, 0x6C6A, 0x738B, 0x502D, 0x5A03, /* 0x60 */ + 0x6B6A, 0x77EE, 0x5916, 0x5D6C, 0x5DCD, 0x7325, 0x754F, 0xF9BA, /* 0x70 */ + 0xF9BB, 0x50E5, 0x51F9, 0x582F, 0x592D, 0x5996, 0x59DA, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x5BE5, 0xF9BC, 0xF9BD, 0x5DA2, 0x62D7, 0x6416, 0x6493, /* 0x90 */ + 0x64FE, 0xF9BE, 0x66DC, 0xF9BF, 0x6A48, 0xF9C0, 0x71FF, 0x7464, /* 0x90 */ + 0xF9C1, 0x7A88, 0x7AAF, 0x7E47, 0x7E5E, 0x8000, 0x8170, 0xF9C2, /* 0xA0 */ + 0x87EF, 0x8981, 0x8B20, 0x9059, 0xF9C3, 0x9080, 0x9952, 0x617E, /* 0xA0 */ + 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1, 0x4FD1, 0x50AD, 0x5197, /* 0xB0 */ + 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142, 0x6995, 0x6D8C, /* 0xB0 */ + 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073, 0x8338, /* 0xC0 */ + 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0xF9C4, 0x4E8E, 0x4F51, 0x5076, /* 0xC0 */ + 0x512A, 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A, /* 0xD0 */ + 0x6182, 0x65F4, 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991, /* 0xD0 */ + 0x79B9, 0x7D06, 0x7FBD, 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047, /* 0xE0 */ + 0x90F5, 0x91EA, 0x9685, 0x96E8, 0x96E9, 0x52D6, 0x5F67, 0x65ED, /* 0xE0 */ + 0x6631, 0x682F, 0x715C, 0x7A36, 0x90C1, 0x980A, 0x4E91, 0xF9C5, /* 0xF0 */ + 0x6A52, 0x6B9E, 0x6F90, 0x7189, 0x8018, 0x82B8, 0x8553 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x904B, 0x9695, 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, /* 0x30 */ + 0x718A, 0x96C4, 0x5143, 0x539F, 0x54E1, 0x5713, 0x5712, 0x57A3, /* 0x30 */ + 0x5A9B, 0x5AC4, 0x5BC3, 0x6028, 0x613F, 0x63F4, 0x6C85, 0x6D39, /* 0x40 */ + 0x6E72, 0x6E90, 0x7230, 0x733F, 0x7457, 0x82D1, 0x8881, 0x8F45, /* 0x40 */ + 0x9060, 0xF9C6, 0x9662, 0x9858, 0x9D1B, 0x6708, 0x8D8A, 0x925E, /* 0x50 */ + 0x4F4D, 0x5049, 0x50DE, 0x5371, 0x570D, 0x59D4, 0x5A01, 0x5C09, /* 0x50 */ + 0x6170, 0x6690, 0x6E2D, 0x7232, 0x744B, 0x7DEF, 0x80C3, 0x840E, /* 0x60 */ + 0x8466, 0x853F, 0x875F, 0x885B, 0x8918, 0x8B02, 0x9055, 0x97CB, /* 0x60 */ + 0x9B4F, 0x4E73, 0x4F91, 0x5112, 0x516A, 0xF9C7, 0x552F, 0x55A9, /* 0x70 */ + 0x5B7A, 0x5BA5, 0x5E7C, 0x5E7D, 0x5EBE, 0x60A0, 0x60DF, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x6108, 0x6109, 0x63C4, 0x6538, 0x6709, 0xF9C8, 0x67D4, /* 0x90 */ + 0x67DA, 0xF9C9, 0x6961, 0x6962, 0x6CB9, 0x6D27, 0xF9CA, 0x6E38, /* 0x90 */ + 0xF9CB, 0x6FE1, 0x7336, 0x7337, 0xF9CC, 0x745C, 0x7531, 0xF9CD, /* 0xA0 */ + 0x7652, 0xF9CE, 0xF9CF, 0x7DAD, 0x81FE, 0x8438, 0x88D5, 0x8A98, /* 0xA0 */ + 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, 0x903E, 0x907A, 0x9149, /* 0xB0 */ + 0x91C9, 0x936E, 0xF9D0, 0xF9D1, 0x5809, 0xF9D2, 0x6BD3, 0x8089, /* 0xB0 */ + 0x80B2, 0xF9D3, 0xF9D4, 0x5141, 0x596B, 0x5C39, 0xF9D5, 0xF9D6, /* 0xC0 */ + 0x6F64, 0x73A7, 0x80E4, 0x8D07, 0xF9D7, 0x9217, 0x958F, 0xF9D8, /* 0xC0 */ + 0xF9D9, 0xF9DA, 0xF9DB, 0x807F, 0x620E, 0x701C, 0x7D68, 0x878D, /* 0xD0 */ + 0xF9DC, 0x57A0, 0x6069, 0x6147, 0x6BB7, 0x8ABE, 0x9280, 0x96B1, /* 0xD0 */ + 0x4E59, 0x541F, 0x6DEB, 0x852D, 0x9670, 0x97F3, 0x98EE, 0x63D6, /* 0xE0 */ + 0x6CE3, 0x9091, 0x51DD, 0x61C9, 0x81BA, 0x9DF9, 0x4F9D, 0x501A, /* 0xE0 */ + 0x5100, 0x5B9C, 0x610F, 0x61FF, 0x64EC, 0x6905, 0x6BC5, 0x7591, /* 0xF0 */ + 0x77E3, 0x7FA9, 0x8264, 0x858F, 0x87FB, 0x8863, 0x8ABC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B70, 0x91AB, 0x4E8C, 0x4EE5, 0x4F0A, 0xF9DD, 0xF9DE, /* 0x30 */ + 0x5937, 0x59E8, 0xF9DF, 0x5DF2, 0x5F1B, 0x5F5B, 0x6021, 0xF9E0, /* 0x30 */ + 0xF9E1, 0xF9E2, 0xF9E3, 0x723E, 0x73E5, 0xF9E4, 0x7570, 0x75CD, /* 0x40 */ + 0xF9E5, 0x79FB, 0xF9E6, 0x800C, 0x8033, 0x8084, 0x82E1, 0x8351, /* 0x40 */ + 0xF9E7, 0xF9E8, 0x8CBD, 0x8CB3, 0x9087, 0xF9E9, 0xF9EA, 0x98F4, /* 0x50 */ + 0x990C, 0xF9EB, 0xF9EC, 0x7037, 0x76CA, 0x7FCA, 0x7FCC, 0x7FFC, /* 0x50 */ + 0x8B1A, 0x4EBA, 0x4EC1, 0x5203, 0x5370, 0xF9ED, 0x54BD, 0x56E0, /* 0x60 */ + 0x59FB, 0x5BC5, 0x5F15, 0x5FCD, 0x6E6E, 0xF9EE, 0xF9EF, 0x7D6A, /* 0x60 */ + 0x8335, 0xF9F0, 0x8693, 0x8A8D, 0xF9F1, 0x976D, 0x9777, 0xF9F2, /* 0x70 */ + 0xF9F3, 0x4E00, 0x4F5A, 0x4F7E, 0x58F9, 0x65E5, 0x6EA2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x9038, 0x93B0, 0x99B9, 0x4EFB, 0x58EC, 0x598A, 0x59D9, /* 0x90 */ + 0x6041, 0xF9F4, 0xF9F5, 0x7A14, 0xF9F6, 0x834F, 0x8CC3, 0x5165, /* 0x90 */ + 0x5344, 0xF9F7, 0xF9F8, 0xF9F9, 0x4ECD, 0x5269, 0x5B55, 0x82BF, /* 0xA0 */ + 0x4ED4, 0x523A, 0x54A8, 0x59C9, 0x59FF, 0x5B50, 0x5B57, 0x5B5C, /* 0xA0 */ + 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E, 0x7386, 0x74F7, 0x75B5, /* 0xB0 */ + 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328, 0x8517, 0x85C9, 0x8AEE, /* 0xB0 */ + 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC, 0x65AB, 0x6628, 0x707C, /* 0xC0 */ + 0x70B8, 0x7235, 0x7DBD, 0x828D, 0x914C, 0x96C0, 0x9D72, 0x5B71, /* 0xC0 */ + 0x68E7, 0x6B98, 0x6F7A, 0x76DE, 0x5C91, 0x66AB, 0x6F5B, 0x7BB4, /* 0xD0 */ + 0x7C2A, 0x8836, 0x96DC, 0x4E08, 0x4ED7, 0x5320, 0x5834, 0x58BB, /* 0xD0 */ + 0x58EF, 0x596C, 0x5C07, 0x5E33, 0x5E84, 0x5F35, 0x638C, 0x66B2, /* 0xE0 */ + 0x6756, 0x6A1F, 0x6AA3, 0x6B0C, 0x6F3F, 0x7246, 0xF9FA, 0x7350, /* 0xE0 */ + 0x748B, 0x7AE0, 0x7CA7, 0x8178, 0x81DF, 0x81E7, 0x838A, 0x846C, /* 0xF0 */ + 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, 0x91AC, 0x9577 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x969C, 0x518D, 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750, /* 0x30 */ + 0x683D, 0x6893, 0x6E3D, 0x6ED3, 0x707D, 0x7E21, 0x88C1, 0x8CA1, /* 0x30 */ + 0x8F09, 0x9F4B, 0x9F4E, 0x722D, 0x7B8F, 0x8ACD, 0x931A, 0x4F47, /* 0x40 */ + 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95, 0x62B5, 0x6775, 0x696E, /* 0x40 */ + 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD, 0x7BB8, 0x7D35, /* 0x50 */ + 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87, 0x9019, /* 0x50 */ + 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458, /* 0x60 */ + 0x6575, 0x6EF4, 0x72C4, 0xF9FB, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, /* 0x60 */ + 0x7E3E, 0x7FDF, 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, /* 0x70 */ + 0x8FEA, 0x8FF9, 0x9069, 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x5168, 0x5178, 0x524D, 0x526A, 0x5861, 0x587C, 0x5960, /* 0x90 */ + 0x5C08, 0x5C55, 0x5EDB, 0x609B, 0x6230, 0x6813, 0x6BBF, 0x6C08, /* 0x90 */ + 0x6FB1, 0x714E, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C, /* 0xA0 */ + 0x7B8B, 0x7BAD, 0x7BC6, 0x7E8F, 0x8A6E, 0x8F3E, 0x8F49, 0x923F, /* 0xA0 */ + 0x9293, 0x9322, 0x942B, 0x96FB, 0x985A, 0x986B, 0x991E, 0x5207, /* 0xB0 */ + 0x622A, 0x6298, 0x6D59, 0x7664, 0x7ACA, 0x7BC0, 0x7D76, 0x5360, /* 0xB0 */ + 0x5CBE, 0x5E97, 0x6F38, 0x70B9, 0x7C98, 0x9711, 0x9B8E, 0x9EDE, /* 0xC0 */ + 0x63A5, 0x647A, 0x8776, 0x4E01, 0x4E95, 0x4EAD, 0x505C, 0x5075, /* 0xC0 */ + 0x5448, 0x59C3, 0x5B9A, 0x5E40, 0x5EAD, 0x5EF7, 0x5F81, 0x60C5, /* 0xD0 */ + 0x633A, 0x653F, 0x6574, 0x65CC, 0x6676, 0x6678, 0x67FE, 0x6968, /* 0xD0 */ + 0x6A89, 0x6B63, 0x6C40, 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E, 0x701E, /* 0xE0 */ + 0x70A1, 0x738E, 0x73FD, 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B, /* 0xE0 */ + 0x7A7D, 0x7CBE, 0x7D8E, 0x8247, 0x8A02, 0x8AEA, 0x8C9E, 0x912D, /* 0xF0 */ + 0x914A, 0x91D8, 0x9266, 0x92CC, 0x9320, 0x9706, 0x9756 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x975C, 0x9802, 0x9F0E, 0x5236, 0x5291, 0x557C, 0x5824, /* 0x30 */ + 0x5E1D, 0x5F1F, 0x608C, 0x63D0, 0x68AF, 0x6FDF, 0x796D, 0x7B2C, /* 0x30 */ + 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44, 0x918D, 0x9664, 0x969B, /* 0x40 */ + 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146, 0x51CB, 0x52A9, 0x5632, /* 0x40 */ + 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9, 0x6641, 0x66FA, 0x66F9, /* 0x50 */ + 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15, 0x6F6E, 0x7167, 0x71E5, /* 0x50 */ + 0x722A, 0x74AA, 0x773A, 0x7956, 0x795A, 0x79DF, 0x7A20, 0x7A95, /* 0x60 */ + 0x7C97, 0x7CDF, 0x7D44, 0x7E70, 0x8087, 0x85FB, 0x86A4, 0x8A54, /* 0x60 */ + 0x8ABF, 0x8D99, 0x8E81, 0x9020, 0x906D, 0x91E3, 0x963B, 0x96D5, /* 0x70 */ + 0x9CE5, 0x65CF, 0x7C07, 0x8DB3, 0x93C3, 0x5B58, 0x5C0A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x5352, 0x62D9, 0x731D, 0x5027, 0x5B97, 0x5F9E, 0x60B0, /* 0x90 */ + 0x616B, 0x68D5, 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C, 0x7E31, /* 0x90 */ + 0x816B, 0x8E2A, 0x8E35, 0x937E, 0x9418, 0x4F50, 0x5750, 0x5DE6, /* 0xA0 */ + 0x5EA7, 0x632B, 0x7F6A, 0x4E3B, 0x4F4F, 0x4F8F, 0x505A, 0x59DD, /* 0xA0 */ + 0x80C4, 0x546A, 0x5468, 0x55FE, 0x594F, 0x5B99, 0x5DDE, 0x5EDA, /* 0xB0 */ + 0x665D, 0x6731, 0x67F1, 0x682A, 0x6CE8, 0x6D32, 0x6E4A, 0x6F8D, /* 0xB0 */ + 0x70B7, 0x73E0, 0x7587, 0x7C4C, 0x7D02, 0x7D2C, 0x7DA2, 0x821F, /* 0xC0 */ + 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A, 0x8F33, 0x9031, 0x914E, /* 0xC0 */ + 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA, 0x5101, 0x51C6, /* 0xD0 */ + 0x57C8, 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96, 0x6FEC, /* 0xD0 */ + 0x710C, 0x756F, 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB, 0x99FF, /* 0xE0 */ + 0x8301, 0x4E2D, 0x4EF2, 0x8846, 0x91CD, 0x537D, 0x6ADB, 0x696B, /* 0xE0 */ + 0x6C41, 0x847A, 0x589E, 0x618E, 0x66FE, 0x62EF, 0x70DD, 0x7511, /* 0xF0 */ + 0x75C7, 0x7E52, 0x84B8, 0x8B49, 0x8D08, 0x4E4B, 0x53EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54AB, 0x5730, 0x5740, 0x5FD7, 0x6301, 0x6307, 0x646F, /* 0x30 */ + 0x652F, 0x65E8, 0x667A, 0x679D, 0x67B3, 0x6B62, 0x6C60, 0x6C9A, /* 0x30 */ + 0x6F2C, 0x77E5, 0x7825, 0x7949, 0x7957, 0x7D19, 0x80A2, 0x8102, /* 0x40 */ + 0x81F3, 0x829D, 0x82B7, 0x8718, 0x8A8C, 0xF9FC, 0x8D04, 0x8DBE, /* 0x40 */ + 0x9072, 0x76F4, 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, 0x55D4, /* 0x50 */ + 0x5875, 0x632F, 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, /* 0x50 */ + 0x6D25, 0x6EB1, 0x73CD, 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, /* 0x60 */ + 0x771E, 0x778B, 0x79E6, 0x7E09, 0x7E1D, 0x81FB, 0x852F, 0x8897, /* 0x60 */ + 0x8A3A, 0x8CD1, 0x8EEB, 0x8FB0, 0x9032, 0x93AD, 0x9663, 0x9673, /* 0x70 */ + 0x9707, 0x4F84, 0x53F1, 0x59EA, 0x5AC9, 0x5E19, 0x684E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x74C6, 0x75BE, 0x79E9, 0x7A92, 0x81A3, 0x86ED, 0x8CEA, /* 0x90 */ + 0x8DCC, 0x8FED, 0x659F, 0x6715, 0xF9FD, 0x57F7, 0x6F57, 0x7DDD, /* 0x90 */ + 0x8F2F, 0x93F6, 0x96C6, 0x5FB5, 0x61F2, 0x6F84, 0x4E14, 0x4F98, /* 0xA0 */ + 0x501F, 0x53C9, 0x55DF, 0x5D6F, 0x5DEE, 0x6B21, 0x6B64, 0x78CB, /* 0xA0 */ + 0x7B9A, 0xF9FE, 0x8E49, 0x8ECA, 0x906E, 0x6349, 0x643E, 0x7740, /* 0xB0 */ + 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF, 0x71E6, 0x74A8, /* 0xB0 */ + 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98, 0x8B9A, 0x8D0A, /* 0xC0 */ + 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6, 0x672D, 0x7D2E, /* 0xC0 */ + 0x50ED, 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA, 0x65AC, 0x7AD9, /* 0xD0 */ + 0x8B92, 0x8B96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5A3C, 0x5EE0, /* 0xD0 */ + 0x5F70, 0x6134, 0x655E, 0x660C, 0x6636, 0x66A2, 0x69CD, 0x6EC4, /* 0xE0 */ + 0x6F32, 0x7316, 0x7621, 0x7A93, 0x8139, 0x8259, 0x83D6, 0x84BC, /* 0xE0 */ + 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, 0x5F69, 0x63A1, 0x7826, 0x7DB5, /* 0xF0 */ + 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, 0x67F5, 0x7B56 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8CAC, 0x51C4, 0x59BB, 0x60BD, 0x8655, 0x501C, 0xF9FF, /* 0x30 */ + 0x5254, 0x5C3A, 0x617D, 0x621A, 0x62D3, 0x64F2, 0x65A5, 0x6ECC, /* 0x30 */ + 0x7620, 0x810A, 0x8E60, 0x965F, 0x96BB, 0x4EDF, 0x5343, 0x5598, /* 0x40 */ + 0x5929, 0x5DDD, 0x64C5, 0x6CC9, 0x6DFA, 0x7394, 0x7A7F, 0x821B, /* 0x40 */ + 0x85A6, 0x8CE4, 0x8E10, 0x9077, 0x91E7, 0x95E1, 0x9621, 0x97C6, /* 0x50 */ + 0x51F8, 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88, 0x7DB4, 0x8F1F, /* 0x50 */ + 0x8F4D, 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B, 0x77BB, /* 0x60 */ + 0x7C3D, 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377, /* 0x60 */ + 0x7252, 0x758A, 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, /* 0x70 */ + 0x6DF8, 0x807D, 0x83C1, 0x8ACB, 0x9751, 0x9BD6, 0xFA00, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x5243, 0x66FF, 0x6D95, 0x6EEF, 0x7DE0, 0x8AE6, 0x902E, /* 0x90 */ + 0x905E, 0x9AD4, 0x521D, 0x527F, 0x54E8, 0x6194, 0x6284, 0x62DB, /* 0x90 */ + 0x68A2, 0x6912, 0x695A, 0x6A35, 0x7092, 0x7126, 0x785D, 0x7901, /* 0xA0 */ + 0x790E, 0x79D2, 0x7A0D, 0x8096, 0x8278, 0x82D5, 0x8349, 0x8549, /* 0xA0 */ + 0x8C82, 0x8D85, 0x9162, 0x918B, 0x91AE, 0x4FC3, 0x56D1, 0x71ED, /* 0xB0 */ + 0x77D7, 0x8700, 0x89F8, 0x5BF8, 0x5FD6, 0x6751, 0x90A8, 0x53E2, /* 0xB0 */ + 0x585A, 0x5BF5, 0x60A4, 0x6181, 0x6460, 0x7E3D, 0x8070, 0x8525, /* 0xC0 */ + 0x9283, 0x64AE, 0x50AC, 0x5D14, 0x6700, 0x589C, 0x62BD, 0x63A8, /* 0xC0 */ + 0x690E, 0x6978, 0x6A1E, 0x6E6B, 0x76BA, 0x79CB, 0x82BB, 0x8429, /* 0xD0 */ + 0x8ACF, 0x8DA8, 0x8FFD, 0x9112, 0x914B, 0x919C, 0x9310, 0x9318, /* 0xD0 */ + 0x939A, 0x96DB, 0x9A36, 0x9C0D, 0x4E11, 0x755C, 0x795D, 0x7AFA, /* 0xE0 */ + 0x7B51, 0x7BC9, 0x7E2E, 0x84C4, 0x8E59, 0x8E74, 0x8EF8, 0x9010, /* 0xE0 */ + 0x6625, 0x693F, 0x7443, 0x51FA, 0x672E, 0x9EDC, 0x5145, 0x5FE0, /* 0xF0 */ + 0x6C96, 0x87F2, 0x885D, 0x8877, 0x60B4, 0x81B5, 0x8403 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8D05, 0x53D6, 0x5439, 0x5634, 0x5A36, 0x5C31, 0x708A, /* 0x30 */ + 0x7FE0, 0x805A, 0x8106, 0x81ED, 0x8DA3, 0x9189, 0x9A5F, 0x9DF2, /* 0x30 */ + 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C, 0x5C64, 0x4F88, 0x5024, /* 0x40 */ + 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB, 0x6DC4, 0x71BE, /* 0x40 */ + 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7, 0x7DFB, 0x7F6E, /* 0x50 */ + 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52, 0x5247, 0x52C5, /* 0x50 */ + 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5, 0x5BE2, 0x6795, /* 0x60 */ + 0x6C88, 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C, 0x87C4, 0x79E4, /* 0x60 */ + 0x7A31, 0x5FEB, 0x4ED6, 0x54A4, 0x553E, 0x58AE, 0x59A5, 0x60F0, /* 0x70 */ + 0x6253, 0x62D6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99B1, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x99DD, 0x502C, 0x5353, 0x5544, 0x577C, 0xFA01, 0x6258, /* 0x90 */ + 0xFA02, 0x64E2, 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, 0x7438, /* 0x90 */ + 0x8A17, 0x9438, 0x5451, 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, /* 0xA0 */ + 0x7058, 0x70AD, 0x7DBB, 0x8A95, 0x596A, 0x812B, 0x63A2, 0x7708, /* 0xA0 */ + 0x803D, 0x8CAA, 0x5854, 0x642D, 0x69BB, 0x5B95, 0x5E11, 0x6E6F, /* 0xB0 */ + 0xFA03, 0x8569, 0x514C, 0x53F0, 0x592A, 0x6020, 0x614B, 0x6B86, /* 0xB0 */ + 0x6C70, 0x6CF0, 0x7B1E, 0x80CE, 0x82D4, 0x8DC6, 0x90B0, 0x98B1, /* 0xC0 */ + 0xFA04, 0x64C7, 0x6FA4, 0x6491, 0x6504, 0x514E, 0x5410, 0x571F, /* 0xC0 */ + 0x8A0E, 0x615F, 0x6876, 0xFA05, 0x75DB, 0x7B52, 0x7D71, 0x901A, /* 0xD0 */ + 0x5806, 0x69CC, 0x817F, 0x892A, 0x9000, 0x9839, 0x5078, 0x5957, /* 0xD0 */ + 0x59AC, 0x6295, 0x900F, 0x9B2A, 0x615D, 0x7279, 0x95D6, 0x5761, /* 0xE0 */ + 0x5A46, 0x5DF4, 0x628A, 0x64AD, 0x64FA, 0x6777, 0x6CE2, 0x6D3E, /* 0xE0 */ + 0x722C, 0x7436, 0x7834, 0x7F77, 0x82AD, 0x8DDB, 0x9817, 0x5224, /* 0xF0 */ + 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9, 0x8FA6, 0x9211 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x962A, 0x516B, 0x53ED, 0x634C, 0x4F69, 0x5504, 0x6096, /* 0x30 */ + 0x6557, 0x6C9B, 0x6D7F, 0x724C, 0x72FD, 0x7A17, 0x8987, 0x8C9D, /* 0x30 */ + 0x5F6D, 0x6F8E, 0x70F9, 0x81A8, 0x610E, 0x4FBF, 0x504F, 0x6241, /* 0x40 */ + 0x7247, 0x7BC7, 0x7DE8, 0x7FE9, 0x904D, 0x97AD, 0x9A19, 0x8CB6, /* 0x40 */ + 0x576A, 0x5E73, 0x67B0, 0x840D, 0x8A55, 0x5420, 0x5B16, 0x5E63, /* 0x50 */ + 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D, 0x9589, 0x965B, 0x4F48, /* 0x50 */ + 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703, 0x5E03, 0x6016, /* 0x60 */ + 0x629B, 0x62B1, 0x6355, 0xFA06, 0x6CE1, 0x6D66, 0x75B1, 0x7832, /* 0x60 */ + 0x80DE, 0x812F, 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B, /* 0x70 */ + 0x92EA, 0x98FD, 0x9B91, 0x5E45, 0x66B4, 0x66DD, 0x7011, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x7206, 0xFA07, 0x4FF5, 0x527D, 0x5F6A, 0x6153, 0x6753, /* 0x90 */ + 0x6A19, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8C79, 0x98C7, 0x98C4, /* 0x90 */ + 0x9A43, 0x54C1, 0x7A1F, 0x6953, 0x8AF7, 0x8C4A, 0x98A8, 0x99AE, /* 0xA0 */ + 0x5F7C, 0x62AB, 0x75B2, 0x76AE, 0x88AB, 0x907F, 0x9642, 0x5339, /* 0xA0 */ + 0x5F3C, 0x5FC5, 0x6CCC, 0x73CC, 0x7562, 0x758B, 0x7B46, 0x82FE, /* 0xB0 */ + 0x999D, 0x4E4F, 0x903C, 0x4E0B, 0x4F55, 0x53A6, 0x590F, 0x5EC8, /* 0xB0 */ + 0x6630, 0x6CB3, 0x7455, 0x8377, 0x8766, 0x8CC0, 0x9050, 0x971E, /* 0xC0 */ + 0x9C15, 0x58D1, 0x5B78, 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, /* 0xC0 */ + 0x608D, 0x65F1, 0x6C57, 0x6F22, 0x6FA3, 0x701A, 0x7F55, 0x7FF0, /* 0xD0 */ + 0x9591, 0x9592, 0x9650, 0x97D3, 0x5272, 0x8F44, 0x51FD, 0x542B, /* 0xD0 */ + 0x54B8, 0x5563, 0x558A, 0x6ABB, 0x6DB5, 0x7DD8, 0x8266, 0x929C, /* 0xE0 */ + 0x9677, 0x9E79, 0x5408, 0x54C8, 0x76D2, 0x86E4, 0x95A4, 0x95D4, /* 0xE0 */ + 0x965C, 0x4EA2, 0x4F09, 0x59EE, 0x5AE6, 0x5DF7, 0x6052, 0x6297, /* 0xF0 */ + 0x676D, 0x6841, 0x6C86, 0x6E2F, 0x7F38, 0x809B, 0x822A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFA08, 0xFA09, 0x9805, 0x4EA5, 0x5055, 0x54B3, 0x5793, /* 0x30 */ + 0x595A, 0x5B69, 0x5BB3, 0x61C8, 0x6977, 0x6D77, 0x7023, 0x87F9, /* 0x30 */ + 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, 0x9AB8, 0x52BE, 0x6838, /* 0x40 */ + 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, 0x5411, 0x56AE, /* 0x40 */ + 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653, 0x589F, /* 0x50 */ + 0x865B, 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47, 0x96AA, /* 0x50 */ + 0x9A57, 0x5955, 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4, 0x5F26, /* 0x60 */ + 0x61F8, 0x665B, 0x6CEB, 0x70AB, 0x7384, 0x73B9, 0x73FE, 0x7729, /* 0x60 */ + 0x774D, 0x7D43, 0x7D62, 0x7E23, 0x8237, 0x8852, 0xFA0A, 0x8CE2, /* 0x70 */ + 0x9249, 0x986F, 0x5B51, 0x7A74, 0x8840, 0x9801, 0x5ACC, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x4FE0, 0x5354, 0x593E, 0x5CFD, 0x633E, 0x6D79, 0x72F9, /* 0x90 */ + 0x8105, 0x8107, 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, 0x5211, /* 0x90 */ + 0x578B, 0x5F62, 0x6CC2, 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, /* 0xA0 */ + 0x73E9, 0x7469, 0x834A, 0x87A2, 0x8861, 0x9008, 0x90A2, 0x93A3, /* 0xA0 */ + 0x99A8, 0x516E, 0x5F57, 0x60E0, 0x6167, 0x66B3, 0x8559, 0x8E4A, /* 0xB0 */ + 0x91AF, 0x978B, 0x4E4E, 0x4E92, 0x547C, 0x58D5, 0x58FA, 0x597D, /* 0xB0 */ + 0x5CB5, 0x5F27, 0x6236, 0x6248, 0x660A, 0x6667, 0x6BEB, 0x6D69, /* 0xC0 */ + 0x6DCF, 0x6E56, 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D, 0x72D0, /* 0xC0 */ + 0x7425, 0x745A, 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1, /* 0xD0 */ + 0x82A6, 0x846B, 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, /* 0xD0 */ + 0x93AC, 0x9800, 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, /* 0xE0 */ + 0x6DF7, 0x6E3E, 0x743F, 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, /* 0xE0 */ + 0x5F18, 0x6C5E, 0x6CD3, 0x6D2A, 0x70D8, 0x7D05, 0x8679, 0x8A0C, /* 0xF0 */ + 0x9D3B, 0x5316, 0x548C, 0x5B05, 0x6A3A, 0x706B, 0x7575 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_JOHAB_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x798D, 0x79BE, 0x82B1, 0x83EF, 0x8A71, 0x8B41, 0x8CA8, /* 0x30 */ + 0x9774, 0xFA0B, 0x64F4, 0x652B, 0x78BA, 0x78BB, 0x7A6B, 0x4E38, /* 0x30 */ + 0x559A, 0x5950, 0x5BA6, 0x5E7B, 0x60A3, 0x63DB, 0x6B61, 0x6665, /* 0x40 */ + 0x6853, 0x6E19, 0x7165, 0x74B0, 0x7D08, 0x9084, 0x9A69, 0x9C25, /* 0x40 */ + 0x6D3B, 0x6ED1, 0x733E, 0x8C41, 0x95CA, 0x51F0, 0x5E4C, 0x5FA8, /* 0x50 */ + 0x604D, 0x60F6, 0x6130, 0x614C, 0x6643, 0x6644, 0x69A5, 0x6CC1, /* 0x50 */ + 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C, 0x7687, 0x7BC1, 0x7C27, /* 0x60 */ + 0x8352, 0x8757, 0x9051, 0x968D, 0x9EC3, 0x532F, 0x56DE, 0x5EFB, /* 0x60 */ + 0x5F8A, 0x6062, 0x6094, 0x61F7, 0x6666, 0x6703, 0x6A9C, 0x6DEE, /* 0x70 */ + 0x6FAE, 0x7070, 0x736A, 0x7E6A, 0x81BE, 0x8334, 0x86D4, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0x8AA8, 0x8CC4, 0x5283, 0x7372, 0x5B96, 0x6A6B, 0x9404, /* 0x90 */ + 0x54EE, 0x5686, 0x5B5D, 0x6548, 0x6585, 0x66C9, 0x689F, 0x6D8D, /* 0x90 */ + 0x6DC6, 0x723B, 0x80B4, 0x9175, 0x9A4D, 0x4FAF, 0x5019, 0x539A, /* 0xA0 */ + 0x540E, 0x543C, 0x5589, 0x55C5, 0x5E3F, 0x5F8C, 0x673D, 0x7166, /* 0xA0 */ + 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, 0x58CE, 0x7104, 0x718F, /* 0xB0 */ + 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, 0x6684, 0x714A, /* 0xB0 */ + 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE, 0x6689, /* 0xC0 */ + 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB, 0x7566, /* 0xC0 */ + 0x8667, 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308, 0x6D36, /* 0xD0 */ + 0x80F8, 0x9ED1, 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403, 0x5C79, /* 0xD0 */ + 0x7D07, 0x8A16, 0x6B20, 0x6B3D, 0x6B46, 0x5438, 0x6070, 0x6D3D, /* 0xE0 */ + 0x7FD5, 0x8208, 0x50D6, 0x51DE, 0x559C, 0x566B, 0x56CD, 0x59EC, /* 0xE0 */ + 0x5B09, 0x5E0C, 0x6199, 0x6198, 0x6231, 0x665E, 0x66E6, 0x7199, /* 0xF0 */ + 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, 0x7FB2, 0x8A70 /* 0xF0 */ +}; diff --git a/sal/textenc/tcvtkr5.tab b/sal/textenc/tcvtkr5.tab new file mode 100644 index 000000000..c0f0ddcfc --- /dev/null +++ b/sal/textenc/tcvtkr5.tab @@ -0,0 +1,5406 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* korean charsets: */ +/* JOHAB */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xD9AE, 0, 0, 0xD9B4, 0, 0, 0xD967, /* 0xA0 */ + 0xD937, 0, 0xDCA3, 0, 0, 0xD939, 0, 0, /* 0xA0 */ + 0xD956, 0xD94E, 0xDD99, 0xDD9A, 0xD9A5, 0, 0xD9D2, 0xD934, /* 0xB0 */ + 0xD9AC, 0xDD98, 0xDCAC, 0, 0xDCF9, 0xDCF6, 0xDCFA, 0xD9AF, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xDCA1, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xDCA2, 0, 0, 0, 0, 0, 0, 0xD94F, /* 0xD0 */ + 0xDCAA, 0, 0, 0, 0, 0, 0xDCAD, 0xDD3C, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xDD31, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xDD33, 0, 0, 0, 0, 0, 0, 0xD950, /* 0xF0 */ + 0xDD3A, 0, 0, 0, 0, 0, 0xDD3D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_01[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDD32, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xDCA4, 0xDD34, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xDD35, 0xDCA6, 0xDD36, 0, 0, 0, 0, /* 0x30 */ + 0xDD37, 0, 0, 0, 0, 0, 0, 0xDCA8, /* 0x30 */ + 0xDD38, 0xDCA9, 0xDD39, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xDD40, 0xDCAF, 0xDD3F, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xDCAB, 0xDD3B, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xDCAE, 0xDD3E /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_02[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9A7, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xD9B0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD9A8, 0xD9AB, 0xD9AA, 0xD9AD, 0, 0xD9A9 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDB51, 0xDB52, 0xDB53, 0xDB54, 0xDB55, 0xDB56, 0xDB57, /* 0x90 */ + 0xDB58, 0xDB59, 0xDB5A, 0xDB5B, 0xDB5C, 0xDB5D, 0xDB5E, 0xDB5F, /* 0x90 */ + 0xDB60, 0xDB61, 0, 0xDB62, 0xDB63, 0xDB64, 0xDB65, 0xDB66, /* 0xA0 */ + 0xDB67, 0xDB68, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xDB71, 0xDB72, 0xDB73, 0xDB74, 0xDB75, 0xDB76, 0xDB77, /* 0xB0 */ + 0xDB78, 0xDB79, 0xDB7A, 0xDB7B, 0xDB7C, 0xDB7D, 0xDB7E, 0xDB91, /* 0xB0 */ + 0xDB92, 0xDB93, 0, 0xDB94, 0xDB95, 0xDB96, 0xDB97, 0xDB98, /* 0xC0 */ + 0xDB99, 0xDB9A /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDEA7, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xDEA1, 0xDEA2, 0xDEA3, 0xDEA4, 0xDEA5, 0xDEA6, 0xDEA8, 0xDEA9, /* 0x10 */ + 0xDEAA, 0xDEAB, 0xDEAC, 0xDEAD, 0xDEAE, 0xDEAF, 0xDEB0, 0xDEB1, /* 0x10 */ + 0xDEB2, 0xDEB3, 0xDEB4, 0xDEB5, 0xDEB6, 0xDEB7, 0xDEB8, 0xDEB9, /* 0x20 */ + 0xDEBA, 0xDEBB, 0xDEBC, 0xDEBD, 0xDEBE, 0xDEBF, 0xDEC0, 0xDEC1, /* 0x20 */ + 0xDED1, 0xDED2, 0xDED3, 0xDED4, 0xDED5, 0xDED6, 0xDED8, 0xDED9, /* 0x30 */ + 0xDEDA, 0xDEDB, 0xDEDC, 0xDEDD, 0xDEDE, 0xDEDF, 0xDEE0, 0xDEE1, /* 0x30 */ + 0xDEE2, 0xDEE3, 0xDEE4, 0xDEE5, 0xDEE6, 0xDEE7, 0xDEE8, 0xDEE9, /* 0x40 */ + 0xDEEA, 0xDEEB, 0xDEEC, 0xDEED, 0xDEEE, 0xDEEF, 0xDEF0, 0xDEF1, /* 0x40 */ + 0, 0xDED7 /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD93A, 0, 0, /* 0x10 */ + 0xD93E, 0xD93F, 0, 0, 0xD940, 0xD941, 0, 0, /* 0x10 */ + 0xD9D3, 0xD9D4, 0, 0, 0, 0xD935, 0xD936, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD9B6, 0, 0xD957, 0xD958, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD968, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xDD9B, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xDD9C, /* 0x70 */ + 0, 0xDD9D, 0xDD9E, 0xDD9F, 0xDDA0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x005C /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD959, 0, 0, 0, 0, /* 0x00 */ + 0, 0xD9B5, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xDC34, 0, 0, 0xD9E0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xD9E5, 0xD9E2, 0, 0, 0, 0xDC69, 0, /* 0x20 */ + 0, 0, 0, 0xD95A, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xDCF7, 0xDCF8, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xDCFB, 0xDCFC, 0xDCFD, 0xDCFE, 0, /* 0x50 */ + 0xDB40, 0xDB41, 0xDB42, 0xDB43, 0xDB44, 0xDB45, 0xDB46, 0xDB47, /* 0x60 */ + 0xDB48, 0xDB49, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xDB31, 0xDB32, 0xDB33, 0xDB34, 0xDB35, 0xDB36, 0xDB37, 0xDB38, /* 0x70 */ + 0xDB39, 0xDB3A, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xD977, 0xD978, 0xD976, 0xD979, 0xD97A, 0xD9D5, 0xD9D8, 0xD9D6, /* 0x90 */ + 0xD9D9, 0xD9D7, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xD9A1, 0, 0xD9A2 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9A3, 0, 0xD963, 0xD9A4, 0, 0, 0, 0xD964, /* 0x00 */ + 0xD996, 0, 0, 0xD997, 0, 0, 0, 0xD9B3, /* 0x00 */ + 0, 0xD9B2, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xD97E, 0, 0, 0xD992, 0xD954, 0, /* 0x10 */ + 0xD960, 0, 0, 0, 0, 0xD93B, 0, 0xD99E, /* 0x20 */ + 0xD99F, 0xD99D, 0xD99C, 0xD994, 0xD995, 0, 0xD9B1, 0, /* 0x20 */ + 0, 0, 0, 0, 0xD955, 0xD993, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xD93D, 0xD991, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xD966, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xD951, 0xD965, 0, 0, 0xD952, 0xD953, 0, 0, /* 0x60 */ + 0, 0, 0xD97C, 0xD97D, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xD99A, 0xD99B, 0, 0, 0xD998, 0xD999, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xD9C1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xD961 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_23[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD962 /* 0x10 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCE7, 0xDCE8, 0xDCE9, 0xDCEA, 0xDCEB, 0xDCEC, 0xDCED, 0xDCEE, /* 0x60 */ + 0xDCEF, 0xDCF0, 0xDCF1, 0xDCF2, 0xDCF3, 0xDCF4, 0xDCF5, 0, /* 0x60 */ + 0, 0, 0, 0, 0xDD77, 0xDD78, 0xDD79, 0xDD7A, /* 0x70 */ + 0xDD7B, 0xDD7C, 0xDD7D, 0xDD7E, 0xDD91, 0xDD92, 0xDD93, 0xDD94, /* 0x70 */ + 0xDD95, 0xDD96, 0xDD97, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xDD5D, 0xDD5E, 0xDD5F, 0xDD60, /* 0x90 */ + 0xDD61, 0xDD62, 0xDD63, 0xDD64, 0xDD65, 0xDD66, 0xDD67, 0xDD68, /* 0xA0 */ + 0xDD69, 0xDD6A, 0xDD6B, 0xDD6C, 0xDD6D, 0xDD6E, 0xDD6F, 0xDD70, /* 0xA0 */ + 0xDD71, 0xDD72, 0xDD73, 0xDD74, 0xDD75, 0xDD76, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xDCCD, 0xDCCE, 0xDCCF, 0xDCD0, 0xDCD1, 0xDCD2, 0xDCD3, 0xDCD4, /* 0xD0 */ + 0xDCD5, 0xDCD6, 0xDCD7, 0xDCD8, 0xDCD9, 0xDCDA, 0xDCDB, 0xDCDC, /* 0xD0 */ + 0xDCDD, 0xDCDE, 0xDCDF, 0xDCE0, 0xDCE1, 0xDCE2, 0xDCE3, 0xDCE4, /* 0xE0 */ + 0xDCE5, 0xDCE6 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDBA1, 0xDBAC, 0xDBA2, 0xDBAD, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xDBA3, 0xDBC8, 0xDBC7, 0xDBAE, /* 0x00 */ + 0xDBA4, 0xDBC2, 0xDBC1, 0xDBAF, 0xDBA6, 0xDBC6, 0xDBC5, 0xDBB1, /* 0x10 */ + 0xDBA5, 0xDBC4, 0xDBC3, 0xDBB0, 0xDBA7, 0xDBBC, 0xDBC9, 0xDBCA, /* 0x10 */ + 0xDBB7, 0xDBCB, 0xDBCC, 0xDBB2, 0xDBA9, 0xDBBE, 0xDBCD, 0xDBCE, /* 0x20 */ + 0xDBB9, 0xDBCF, 0xDBD0, 0xDBB4, 0xDBA8, 0xDBD1, 0xDBD2, 0xDBB8, /* 0x20 */ + 0xDBBD, 0xDBD3, 0xDBD4, 0xDBB3, 0xDBAA, 0xDBD5, 0xDBD6, 0xDBBA, /* 0x30 */ + 0xDBBF, 0xDBD7, 0xDBD8, 0xDBB5, 0xDBAB, 0xDBD9, 0xDBDA, 0xDBBB, /* 0x30 */ + 0xDBDB, 0xDBDC, 0xDBC0, 0xDBDD, 0xDBDE, 0xDBDF, 0xDBE0, 0xDBE1, /* 0x40 */ + 0xDBE2, 0xDBE3, 0xDBE4, 0xDBB6, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD9C6, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xD971, 0xD970, 0, 0xD9C3, 0xD9C7, 0xD9C8, 0xD9CB, 0xD9CA, /* 0xA0 */ + 0xD9C9, 0xD9CC, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xD973, 0xD972, 0, 0, 0xD9BA, 0xD9B9, /* 0xB0 */ + 0, 0, 0, 0, 0xD975, 0xD974, 0, 0, /* 0xB0 */ + 0xD9B8, 0xD9B7, 0, 0, 0, 0, 0xD96F, 0xD96E, /* 0xC0 */ + 0xD9C2, 0, 0, 0xD96B, 0, 0, 0xD96D, 0xD96C, /* 0xC0 */ + 0xD9C4, 0xD9C5 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD96A, 0xD969, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xD9CF, 0xD9CE, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xD9D0, 0, 0xD9D1, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xD95F, 0, 0xD95E, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xD9BC, 0xD9BD, 0, 0xD9C0, 0xD9BB, 0xD9BE, 0, 0xD9BF, /* 0x60 */ + 0xD9CD, 0xD9DB, 0xD9DC, 0, 0xD9DD, 0xD9DA /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD931, 0xD932, 0xD933, 0xD938, 0, 0, 0, 0, /* 0x00 */ + 0xD944, 0xD945, 0xD946, 0xD947, 0xD948, 0xD949, 0xD94A, 0xD94B, /* 0x00 */ + 0xD94C, 0xD94D, 0, 0xD97B, 0xD942, 0xD943, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDDA1, 0xDDA2, 0xDDA3, 0xDDA4, 0xDDA5, 0xDDA6, 0xDDA7, /* 0x40 */ + 0xDDA8, 0xDDA9, 0xDDAA, 0xDDAB, 0xDDAC, 0xDDAD, 0xDDAE, 0xDDAF, /* 0x40 */ + 0xDDB0, 0xDDB1, 0xDDB2, 0xDDB3, 0xDDB4, 0xDDB5, 0xDDB6, 0xDDB7, /* 0x50 */ + 0xDDB8, 0xDDB9, 0xDDBA, 0xDDBB, 0xDDBC, 0xDDBD, 0xDDBE, 0xDDBF, /* 0x50 */ + 0xDDC0, 0xDDC1, 0xDDC2, 0xDDC3, 0xDDC4, 0xDDC5, 0xDDC6, 0xDDC7, /* 0x60 */ + 0xDDC8, 0xDDC9, 0xDDCA, 0xDDCB, 0xDDCC, 0xDDCD, 0xDDCE, 0xDDCF, /* 0x60 */ + 0xDDD0, 0xDDD1, 0xDDD2, 0xDDD3, 0xDDD4, 0xDDD5, 0xDDD6, 0xDDD7, /* 0x70 */ + 0xDDD8, 0xDDD9, 0xDDDA, 0xDDDB, 0xDDDC, 0xDDDD, 0xDDDE, 0xDDDF, /* 0x70 */ + 0xDDE0, 0xDDE1, 0xDDE2, 0xDDE3, 0xDDE4, 0xDDE5, 0xDDE6, 0xDDE7, /* 0x80 */ + 0xDDE8, 0xDDE9, 0xDDEA, 0xDDEB, 0xDDEC, 0xDDED, 0xDDEE, 0xDDEF, /* 0x80 */ + 0xDDF0, 0xDDF1, 0xDDF2, 0xDDF3, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xDE31, 0xDE32, 0xDE33, 0xDE34, 0xDE35, 0xDE36, 0xDE37, /* 0xA0 */ + 0xDE38, 0xDE39, 0xDE3A, 0xDE3B, 0xDE3C, 0xDE3D, 0xDE3E, 0xDE3F, /* 0xA0 */ + 0xDE40, 0xDE41, 0xDE42, 0xDE43, 0xDE44, 0xDE45, 0xDE46, 0xDE47, /* 0xB0 */ + 0xDE48, 0xDE49, 0xDE4A, 0xDE4B, 0xDE4C, 0xDE4D, 0xDE4E, 0xDE4F, /* 0xB0 */ + 0xDE50, 0xDE51, 0xDE52, 0xDE53, 0xDE54, 0xDE55, 0xDE56, 0xDE57, /* 0xC0 */ + 0xDE58, 0xDE59, 0xDE5A, 0xDE5B, 0xDE5C, 0xDE5D, 0xDE5E, 0xDE5F, /* 0xC0 */ + 0xDE60, 0xDE61, 0xDE62, 0xDE63, 0xDE64, 0xDE65, 0xDE66, 0xDE67, /* 0xD0 */ + 0xDE68, 0xDE69, 0xDE6A, 0xDE6B, 0xDE6C, 0xDE6D, 0xDE6E, 0xDE6F, /* 0xD0 */ + 0xDE70, 0xDE71, 0xDE72, 0xDE73, 0xDE74, 0xDE75, 0xDE76, 0xDE77, /* 0xE0 */ + 0xDE78, 0xDE79, 0xDE7A, 0xDE7B, 0xDE7C, 0xDE7D, 0xDE7E, 0xDE91, /* 0xE0 */ + 0xDE92, 0xDE93, 0xDE94, 0xDE95, 0xDE96, 0xDE97, 0xDE98 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_31[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8841, 0x8C41, 0x8444, 0x9041, 0x8446, 0x8447, 0x9441, /* 0x30 */ + 0x9841, 0x9C41, 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, /* 0x30 */ + 0x8450, 0xA041, 0xA441, 0xA841, 0x8454, 0xAC41, 0xB041, 0xB441, /* 0x40 */ + 0xB841, 0xBC41, 0xC041, 0xC441, 0xC841, 0xCC41, 0xD041, 0x8461, /* 0x40 */ + 0x8481, 0x84A1, 0x84C1, 0x84E1, 0x8541, 0x8561, 0x8581, 0x85A1, /* 0x50 */ + 0x85C1, 0x85E1, 0x8641, 0x8661, 0x8681, 0x86A1, 0x86C1, 0x86E1, /* 0x50 */ + 0x8741, 0x8761, 0x8781, 0x87A1, 0xDAD4, 0xDAD5, 0xDAD6, 0xDAD7, /* 0x60 */ + 0xDAD8, 0xDAD9, 0xDADA, 0xDADB, 0xDADC, 0xDADD, 0xDADE, 0xDADF, /* 0x60 */ + 0xDAE0, 0xDAE1, 0xDAE2, 0xDAE3, 0xDAE4, 0xDAE5, 0xDAE6, 0xDAE7, /* 0x70 */ + 0xDAE8, 0xDAE9, 0xDAEA, 0xDAEB, 0xDAEC, 0xDAED, 0xDAEE, 0xDAEF, /* 0x70 */ + 0xDAF0, 0xDAF1, 0xDAF2, 0xDAF3, 0xDAF4, 0xDAF5, 0xDAF6, 0xDAF7, /* 0x80 */ + 0xDAF8, 0xDAF9, 0xDAFA, 0xDAFB, 0xDAFC, 0xDAFD, 0xDAFE /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDD41, 0xDD42, 0xDD43, 0xDD44, 0xDD45, 0xDD46, 0xDD47, 0xDD48, /* 0x00 */ + 0xDD49, 0xDD4A, 0xDD4B, 0xDD4C, 0xDD4D, 0xDD4E, 0xDD4F, 0xDD50, /* 0x00 */ + 0xDD51, 0xDD52, 0xDD53, 0xDD54, 0xDD55, 0xDD56, 0xDD57, 0xDD58, /* 0x10 */ + 0xDD59, 0xDD5A, 0xDD5B, 0xDD5C, 0xD9DF, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xDCB1, 0xDCB2, 0xDCB3, 0xDCB4, 0xDCB5, 0xDCB6, 0xDCB7, 0xDCB8, /* 0x60 */ + 0xDCB9, 0xDCBA, 0xDCBB, 0xDCBC, 0xDCBD, 0xDCBE, 0xDCBF, 0xDCC0, /* 0x60 */ + 0xDCC1, 0xDCC2, 0xDCC3, 0xDCC4, 0xDCC5, 0xDCC6, 0xDCC7, 0xDCC8, /* 0x70 */ + 0xDCC9, 0xDCCA, 0xDCCB, 0xDCCC, 0, 0, 0, 0xD9DE /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDC59, 0xDC5A, 0xDC5B, 0xDC5C, 0xDC5D, 0, 0, 0, /* 0x80 */ + 0xDC4A, 0xDC4B, 0xDC6C, 0xDC6D, 0xDC6E, 0xDC46, 0xDC47, 0xDC48, /* 0x80 */ + 0xDC64, 0xDC65, 0xDC66, 0xDC67, 0xDC68, 0xDC31, 0xDC32, 0xDC33, /* 0x90 */ + 0xDC35, 0xDC3B, 0xDC3C, 0xDC3D, 0xDC3E, 0xDC3F, 0xDC40, 0xDC41, /* 0x90 */ + 0xDC42, 0xDC43, 0xDC44, 0xDC37, 0xDC38, 0xDC39, 0xDC3A, 0xDC4D, /* 0xA0 */ + 0xDC4E, 0xDC75, 0xDC76, 0xDC77, 0xDC78, 0xDC71, 0xDC72, 0xDC73, /* 0xA0 */ + 0xDC4F, 0xDC50, 0xDC51, 0xDC52, 0xDC53, 0xDC54, 0xDC55, 0xDC56, /* 0xB0 */ + 0xDC57, 0xDC58, 0xDC5E, 0xDC5F, 0xDC60, 0xDC61, 0xDC62, 0xDC63, /* 0xB0 */ + 0xDC6A, 0xDC6B, 0xD9E3, 0xDC7C, 0xDC36, 0xDC70, 0xDC91, 0xD9E1, /* 0xC0 */ + 0xDC4C, 0xDC7D, 0xDC45, 0, 0, 0, 0, 0xDC49, /* 0xC0 */ + 0xDC7A, 0, 0, 0xDC7B, 0, 0, 0xDC6F, 0, /* 0xD0 */ + 0xD9E4, 0, 0, 0xDC74, 0xDC7E, 0xDC79 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF179, 0xF2CB, 0, 0xF662, 0, 0, 0, 0xE742, /* 0x00 */ + 0xF1DB, 0xEAB2, 0xEABE, 0xF7BB, 0, 0xE996, 0, 0, /* 0x00 */ + 0, 0xF5E4, 0, 0, 0xF4A6, 0xE9E0, 0xEBA6, 0, /* 0x10 */ + 0xE29A, 0xE940, 0, 0, 0, 0, 0xECAA, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF3E9, 0, 0, /* 0x20 */ + 0, 0, 0xE1FA, 0, 0, 0, 0, 0, /* 0x30 */ + 0xF93F, 0xE4A1, 0, 0xF3AB, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xEED1, 0xE43C, 0, 0xE29B, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF3FD, 0, 0xEA4F, 0xF8BA, 0xF7B9, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE262, 0, /* 0x50 */ + 0xECAB, 0xF0E0, 0, 0, 0, 0xE29C, 0xE0F7, 0xEDA5, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE071, 0, 0xE55C, 0, 0, /* 0x60 */ + 0, 0, 0, 0xF071, 0, 0, 0xE973, 0xEAAD, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE0EB, 0, /* 0x70 */ + 0, 0, 0xE5AF, 0, 0, 0, 0xE697, 0, /* 0x80 */ + 0xEDF8, 0, 0, 0xEA50, 0xF133, 0, 0xEFCD, 0, /* 0x80 */ + 0xF037, 0xEFF6, 0xF8BB, 0, 0xEEE9, 0xF2CC, 0, 0, /* 0x90 */ + 0xE376, 0, 0, 0xEA51, 0, 0, 0xED3C, 0, /* 0x90 */ + 0, 0xE75C, 0xF7F1, 0, 0xE26F, 0xF834, 0xEE42, 0, /* 0xA0 */ + 0xF89D, 0, 0, 0xF84D, 0xE158, 0xF2CD, 0xE5D5, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xE4A2, 0, /* 0xB0 */ + 0, 0, 0xF161, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xED37, 0xF162, 0, 0, 0xF641, 0, 0, 0xE29D, /* 0xC0 */ + 0, 0, 0xE361, 0xE0BF, 0, 0xF1A4, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF1A8, 0xEA52, 0xF672, 0xF1DC, /* 0xD0 */ + 0xE997, 0xEB49, 0, 0, 0, 0xE55E, 0, 0xF545, /* 0xD0 */ + 0, 0, 0, 0xE4DB, 0xE645, 0xF134, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xED76, 0, 0xF3EA, 0, 0, 0, 0xE0EC, 0xE0C0, /* 0xF0 */ + 0, 0, 0, 0xF194 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE37A, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xF7F2, 0xF135, 0xE36F, 0, 0xEEEA, 0xE37B, 0xE961, /* 0x00 */ + 0xE8E9, 0xF9CC, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8D7, /* 0x20 */ + 0, 0, 0, 0, 0xE871, 0, 0xE646, 0, /* 0x30 */ + 0xECDF, 0, 0xEA53, 0, 0xEA54, 0xE031, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF27C, 0, 0, 0xE4A3, 0xF247, /* 0x40 */ + 0xF75F, 0, 0, 0, 0, 0xF058, 0xF248, 0xF3AC, /* 0x40 */ + 0xF3A5, 0xEFCE, 0, 0, 0, 0xF7BC, 0, 0, /* 0x50 */ + 0, 0xEDF9, 0xF17A, 0xE9D6, 0xF1C2, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF735, 0, 0, 0, 0, 0, 0xEDBA, /* 0x60 */ + 0xE8D8, 0, 0, 0xE032, 0, 0, 0xE3CD, 0, /* 0x70 */ + 0, 0, 0xF27D, 0, 0, 0, 0xF17B, 0xEA55, /* 0x70 */ + 0, 0xECE0, 0, 0xE059, 0xF479, 0, 0xE5CE, 0, /* 0x80 */ + 0xF646, 0, 0xE252, 0xE657, 0, 0xECB4, 0, 0xF3AD, /* 0x80 */ + 0, 0xF072, 0, 0, 0, 0, 0xE6C2, 0, /* 0x90 */ + 0xF4A7, 0, 0, 0xE1EA, 0, 0xF0EE, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xE7B2, 0xF9A5, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xF665, 0xE5E2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF745, /* 0xB0 */ + 0, 0, 0xE197, 0xF5B5, 0xED3D, 0, 0, 0, /* 0xC0 */ + 0, 0xEEEB, 0xF3D5, 0, 0, 0, 0xF34B, 0, /* 0xC0 */ + 0, 0xEFB5, 0, 0xE159, 0xF865, 0, 0, 0xEBD4, /* 0xD0 */ + 0, 0, 0xE6D6, 0, 0, 0xE951, 0, 0xEA56, /* 0xD0 */ + 0xF891, 0xECE1, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xEBF3, 0xE998, /* 0xE0 */ + 0, 0xE29E, 0, 0xE8C4, 0, 0xF793, 0, 0, /* 0xF0 */ + 0xE974, 0, 0xEDEF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE941, 0, 0, 0, 0xE5D6, 0, /* 0x00 */ + 0, 0xF4DA, 0, 0xE0C1, 0, 0xE8C3, 0, 0, /* 0x00 */ + 0, 0xE7FA, 0xE4EE, 0, 0, 0, 0xF848, 0, /* 0x10 */ + 0, 0xF9A6, 0xF0EF, 0, 0xF536, 0, 0xE15A, 0xF4A8, /* 0x10 */ + 0, 0xF4DB, 0, 0xE8A7, 0xF647, 0, 0xE2E6, 0xF394, /* 0x20 */ + 0xE0DA, 0, 0xEED2, 0xE6C3, 0xF692, 0xEF6E, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xEDA6, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xEDE7, 0, 0, 0, 0xE033, /* 0x40 */ + 0xE137, 0xF059, 0, 0, 0, 0, 0, 0xF746, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF835, 0, 0, /* 0x50 */ + 0, 0, 0xF3AE, 0, 0xF2CE, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE0ED, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xF640, 0xF2CF, 0xEFCF, 0, /* 0x70 */ + 0xF6DE, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE263, 0, 0, 0, 0, 0xE999, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xE8A8, 0, 0, /* 0x80 */ + 0, 0xE0F8, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xEAA1, 0xE9E1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xF5CA, 0xEFB6, 0, 0, /* 0xA0 */ + 0, 0, 0xEEEC, 0xF27E, 0, 0xF4F0, 0, 0xEABF, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xE15B, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE351, 0, 0, /* 0xC0 */ + 0, 0xF562, 0xEB4A, 0, 0, 0, 0, 0xEAC0, /* 0xC0 */ + 0, 0xE270, 0, 0, 0, 0xE962, 0xF9EA, 0, /* 0xD0 */ + 0, 0, 0xE698, 0, 0, 0, 0xF05A, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xEF79, 0, 0xECAC, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF4D0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE034, 0, 0xE8F8, 0, 0, 0, 0xEA57 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0F0, 0xF3D6, 0, 0, 0xEDE2, 0, 0xE15C, 0, /* 0x00 */ + 0, 0xE0FB, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF073, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAC1, /* 0x10 */ + 0, 0xE67D, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEFD0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF249, 0, 0, 0, 0, 0xE5E3, /* 0x30 */ + 0, 0, 0xE3D3, 0, 0xEDF0, 0, 0, 0, /* 0x30 */ + 0xEF44, 0xF0C3, 0, 0xF03A, 0xF89E, 0xF5F6, 0xF34C, 0xF9D4, /* 0x40 */ + 0xEB4B, 0xE253, 0, 0xE34A, 0xF6BA, 0xE795, 0xF6CD, 0, /* 0x40 */ + 0, 0, 0xED3E, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xE56F, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE377, 0, 0, 0xF19F, 0, 0xE43E, /* 0x60 */ + 0xF291, 0xE5D7, 0xF074, 0xF732, 0xE1EB, 0xE6BF, 0xF8B1, 0, /* 0x60 */ + 0, 0xE1EC, 0, 0, 0, 0xE942, 0xE37C, 0xE29F, /* 0x70 */ + 0xF292, 0, 0, 0, 0xE152, 0, 0, 0, /* 0x70 */ + 0xE37D, 0, 0, 0, 0, 0, 0xEDF7, 0, /* 0x80 */ + 0, 0, 0xF4FC, 0, 0, 0xF232, 0, 0, /* 0x80 */ + 0, 0, 0xE7B3, 0, 0, 0xE796, 0, 0xEFB7, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE23E, 0, 0, 0, 0, 0xE7A2, 0, 0, /* 0xA0 */ + 0, 0, 0xE793, 0, 0xE55F, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xEDA7, 0xE5D2, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE639, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF532, 0, 0xF3D7, 0, /* 0xC0 */ + 0, 0xE5D8, 0, 0xF34D, 0xE6D0, 0xE560, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE6CF, 0xF0EA, 0xF9EB, 0, /* 0xD0 */ + 0, 0xE8ED, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF955, 0xE0C2, 0, 0, 0, 0, 0xF9D5, 0, /* 0xF0 */ + 0xF558, 0xEF7A, 0xF5F3, 0, 0, 0xF7DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4EF, 0, 0, 0xF163, 0, 0, 0xE9C2, 0xF2B7, /* 0x00 */ + 0xEED4, 0, 0xE05A, 0, 0, 0, 0xE7FB, 0, /* 0x00 */ + 0, 0xF89F, 0, 0, 0, 0, 0, 0xE63A, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF59A, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xF6F7, 0xE93C, 0, 0, /* 0x20 */ + 0, 0xE6D7, 0xEAA2, 0, 0, 0, 0xE24E, 0, /* 0x20 */ + 0xE4F0, 0, 0, 0, 0, 0, 0xF334, 0xEBEC, /* 0x30 */ + 0xE2E7, 0xF4CB, 0xF1A9, 0xE04E, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF591, 0, 0, 0, 0xF65E, /* 0x40 */ + 0, 0, 0xEA9D, 0xE34B, 0xE5B7, 0xF293, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF538, 0, 0xE99A, 0, /* 0x50 */ + 0, 0, 0, 0xE0A7, 0, 0xE85E, 0, 0, /* 0x50 */ + 0, 0xEB76, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF1A5, 0xF294, 0, 0, 0, 0, 0xE99B, /* 0x60 */ + 0, 0, 0xF7DC, 0, 0, 0xF4DC, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF794, 0, 0xF59B, /* 0x70 */ + 0, 0, 0, 0xF993, 0, 0, 0, 0xE34C, /* 0x80 */ + 0xE8F9, 0xE6B1, 0, 0, 0, 0xE0FC, 0, 0, /* 0x80 */ + 0, 0xF335, 0xE0FD, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE5F4, 0, 0, 0, 0xE1ED, /* 0x90 */ + 0xE035, 0, 0, 0xE63B, 0xE352, 0, 0, 0, /* 0xA0 */ + 0, 0xF34E, 0xE44D, 0xE134, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF846, 0, /* 0xB0 */ + 0, 0xE15D, 0, 0xE89C, 0, 0xF65F, 0, 0xEFB8, /* 0xC0 */ + 0, 0xE797, 0, 0, 0, 0xE15E, 0, 0, /* 0xC0 */ + 0, 0, 0xE6CD, 0, 0, 0xE561, 0xEFED, 0, /* 0xD0 */ + 0xE07B, 0xE7E2, 0, 0xF9B2, 0, 0xECAD, 0xE65C, 0xE7B4, /* 0xD0 */ + 0, 0, 0xEBA7, 0xF263, 0xE353, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF9B3, 0, 0xE5E4, 0, 0, /* 0xF0 */ + 0xE2E8, 0, 0xF1C3, 0xE342, 0, 0, 0xE2A0, 0xE838 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF760, 0, 0, /* 0x00 */ + 0xF9D6, 0, 0, 0, 0, 0xF761, 0, 0xF762, /* 0x00 */ + 0xE963, 0, 0, 0, 0, 0xE9E2, 0xF8F9, 0xE9C1, /* 0x10 */ + 0, 0xECB5, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF1DD, 0xE254, 0, 0xE0A1, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE9E3, 0, 0, 0, 0, 0xF96D, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF7AF, 0, 0, 0, 0, 0, 0xE49D, /* 0x30 */ + 0xE2A1, 0xED38, 0, 0xF546, 0xF1A0, 0, 0, 0xECAE, /* 0x40 */ + 0xEEED, 0xF9C1, 0xE872, 0, 0, 0xE743, 0, 0, /* 0x40 */ + 0, 0xE9E4, 0xF391, 0xF693, 0xF892, 0, 0, 0xE3F5, /* 0x50 */ + 0, 0, 0xE85F, 0, 0xE964, 0, 0xE936, 0, /* 0x50 */ + 0xF2BF, 0, 0, 0, 0, 0, 0xE25F, 0, /* 0x60 */ + 0xEB69, 0, 0, 0, 0, 0, 0, 0xE7D6, /* 0x60 */ + 0xF164, 0xF05B, 0, 0, 0xE04F, 0xE5B0, 0, 0xE2E9, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF3ED, 0, 0xE15F, /* 0x70 */ + 0, 0, 0, 0, 0xED9A, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xED7D, 0, 0, 0, 0, /* 0x90 */ + 0xE6D8, 0, 0xF9A7, 0, 0, 0, 0, 0xF03B, /* 0x90 */ + 0xF642, 0, 0, 0, 0, 0xE2F0, 0xF7BD, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xEE96, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE0DB, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF4D1, 0, 0, 0, 0, /* 0xC0 */ + 0xEFD1, 0xF4A9, 0xE370, 0xEFD2, 0, 0xE873, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xEC62, 0, 0xF632, 0xEBF4, /* 0xD0 */ + 0, 0, 0, 0xE874, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xEED5, 0xF5BF, 0xE2A2, 0xE1AF, 0xE2A3, 0, 0, /* 0xE0 */ + 0, 0xE1B0, 0xF3FE, 0xE333, 0xEBAF, 0xF733, 0, 0xE036, /* 0xE0 */ + 0xF6BB, 0xF47A, 0xEA58, 0xEFD3, 0, 0, 0, 0, /* 0xF0 */ + 0xEA59 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF9DE, 0xE050, 0, 0, 0, /* 0x00 */ + 0xF7EA, 0xE3CE, 0xF264, 0, 0xE562, 0xE7A3, 0xF9A8, 0xE6D9, /* 0x00 */ + 0xF6CE, 0xF84E, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE2D6, 0, 0xE6F0, 0, 0xF0E1, /* 0x10 */ + 0xF755, 0, 0, 0, 0, 0, 0xE99C, 0, /* 0x20 */ + 0, 0xE9C3, 0, 0xF7DF, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xEEEF, 0, 0, 0, 0, /* 0x30 */ + 0xF9E5, 0xF633, 0, 0xE7FC, 0xF9A9, 0, 0xEEEE, 0, /* 0x30 */ + 0, 0, 0xE5E5, 0, 0, 0, 0, 0, /* 0x40 */ + 0xF2D0, 0, 0xE1B1, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF6A2, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xF3B2, 0, 0xF3B1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE1B2, 0, 0xE83B, 0, 0xE037, 0, 0, /* 0x70 */ + 0, 0, 0, 0xECE2, 0xF8BC, 0xE7A4, 0, 0, /* 0x70 */ + 0xF24A, 0, 0, 0, 0, 0, 0xF763, 0, /* 0x80 */ + 0, 0, 0, 0, 0xF8FA, 0, 0xE2A4, 0, /* 0x80 */ + 0xE99D, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF673, 0, 0, 0, /* 0xA0 */ + 0xF1AA, 0, 0, 0xF431, 0xE271, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF836, 0, 0, 0, 0, /* 0xB0 */ + 0xF7E0, 0, 0, 0, 0, 0xF166, 0, 0, /* 0xB0 */ + 0xED7E, 0xF7A1, 0, 0, 0xF8EF, 0, 0, 0, /* 0xC0 */ + 0xF7EB, 0xF233, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF03C, 0, 0, 0, 0xE038, 0, 0, /* 0xE0 */ + 0xF59C, 0, 0, 0, 0, 0xE1D6, 0xF998, 0, /* 0xE0 */ + 0, 0, 0xF559, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xF764 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF736, 0, 0xEA5A, 0xF456, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE6DA, 0, /* 0x00 */ + 0xE4D0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xE755, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xF076, /* 0x20 */ + 0, 0xF4DD, 0, 0, 0, 0xED6A, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF674, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF694, 0, 0xEAC2, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7FD, /* 0x40 */ + 0, 0, 0, 0xE198, 0, 0, 0xE4BA, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xED3F, 0, /* 0x50 */ + 0, 0, 0, 0xF7E1, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF336, 0, 0, 0, /* 0x70 */ + 0xE0D3, 0, 0, 0, 0xEB4C, 0, 0xF55A, 0xE59C, /* 0x80 */ + 0, 0xF9AA, 0xF7E2, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xF547, 0xF9C2, 0xF940, 0, 0xF9EC, 0xE072, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xF9BD, /* 0xA0 */ + 0, 0xF077, 0xEAC3, 0xE3D2, 0xE272, 0, 0xE4A4, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xF9AB, 0, 0xEAE0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF457, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xEEF0, 0, 0xE37E, 0, 0, 0xF4AA, /* 0xD0 */ + 0, 0, 0, 0xEA5B, 0xF648, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xEBF5, 0xF3B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF6A3, 0, /* 0x00 */ + 0, 0xE039, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xE2A5, 0, 0, 0xEAC4, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xEBB0, /* 0x20 */ + 0, 0, 0xF34F, 0, 0xF634, 0, 0xECB6, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF856, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE391, 0, 0, 0xF9ED, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE9C4, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xF999, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEE4F, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xEA3D, 0, 0xF84F, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xEDF1, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF1C4, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE435, 0, 0, 0xF9EE, 0, 0, /* 0xC0 */ + 0, 0xF5B6, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xEBF6, 0xEA5C, 0, 0, 0xF96E, 0, /* 0xD0 */ + 0xF167, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE1DD, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE647, 0xE1B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF765, 0xEDD8, 0, 0, 0, /* 0x00 */ + 0xE2EA, 0, 0, 0xE2D0, 0, 0xF05C, 0, 0, /* 0x00 */ + 0, 0, 0xF03E, 0xF03D, 0, 0, 0xE4F1, 0, /* 0x10 */ + 0xE4A5, 0, 0, 0, 0, 0, 0, 0xF6CF, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF234, 0, 0, 0, 0, 0xE334, 0, 0, /* 0x20 */ + 0xF432, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE392, 0, 0, 0, 0, /* 0x30 */ + 0xF433, 0, 0xF6F8, 0, 0, 0, 0, 0xE343, /* 0x40 */ + 0, 0, 0xE8A9, 0, 0, 0xE4BB, 0xE07C, 0, /* 0x40 */ + 0xF3A6, 0xE0D5, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF6E7, 0, 0, 0xE1DE, 0, 0xF6A4, 0, /* 0x60 */ + 0, 0, 0xF750, 0, 0, 0, 0xE4DD, 0, /* 0x60 */ + 0xE160, 0, 0, 0, 0, 0xE2A6, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF695, 0, 0, 0, /* 0x70 */ + 0, 0, 0xEBF7, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE4DC, 0, 0, 0xF8A0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF837, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xF0D9, 0, 0xE2A7, 0xF03F, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xED91, 0, 0, 0, 0xEFB9, /* 0xC0 */ + 0xF3D8, 0, 0, 0xE768, 0, 0, 0xEB94, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEE44, /* 0xD0 */ + 0xE99E, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF4F1, 0, 0, 0, 0xECD0, 0, 0, 0xF49D, /* 0xF0 */ + 0, 0xE8C6, 0xE393, 0, 0xE394 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2DC, 0, 0xE4D1, 0, 0, 0xE141, 0xF6D8, 0, /* 0x00 */ + 0xE0A8, 0xF0BC, 0xED4E, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF56C, 0, /* 0x10 */ + 0, 0xE952, 0, 0, 0xF337, 0, 0, 0xEE50, /* 0x20 */ + 0, 0, 0xE07D, 0, 0, 0, 0, 0xEF7B, /* 0x20 */ + 0xEDE8, 0xE953, 0, 0, 0xF1DE, 0xE4F2, 0, 0, /* 0x30 */ + 0, 0, 0xE199, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xE264, 0xEEAB, 0, 0, 0, 0xE0C3, /* 0x40 */ + 0, 0xEBB1, 0, 0, 0xF6B2, 0, 0, 0xE4F3, /* 0x50 */ + 0xE4D2, 0, 0xF5C0, 0, 0, 0, 0xEADD, 0, /* 0x50 */ + 0, 0xF295, 0xEEF1, 0, 0xF9B4, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF458, 0, 0, /* 0x70 */ + 0, 0xF4D2, 0, 0, 0xF296, 0, 0xEC63, 0, /* 0x70 */ + 0, 0, 0, 0xE161, 0, 0xEAEA, 0, 0, /* 0x80 */ + 0, 0xEFBA, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE7D7, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF5CD, 0, 0xF3F2, 0xF857, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE7F8, 0xE552, 0, 0, 0, 0, 0xF675, 0, /* 0xA0 */ + 0, 0, 0, 0xE9C5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xEEF2, 0xF1DF, 0, 0, 0xE05B, 0, /* 0xB0 */ + 0, 0xE8FA, 0, 0, 0, 0xEF45, 0, 0xE4A6, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xF9B5, 0, /* 0xC0 */ + 0, 0xF7C9, 0, 0xED72, 0, 0xF8BD, 0, 0, /* 0xD0 */ + 0xE6A4, 0xE255, 0, 0, 0, 0, 0xE265, 0xE676, /* 0xD0 */ + 0, 0, 0, 0, 0xEDBD, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xEA5D, 0xF195, 0, 0, 0xF1E0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xF17C, 0xF8BE, 0xEAEB, 0, 0xEBF8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF7BE, /* 0x00 */ + 0, 0, 0, 0, 0xE395, 0xEB3A, 0xEF72, 0, /* 0x10 */ + 0, 0xEC64, 0xE49F, 0, 0xEDA8, 0, 0, 0, /* 0x10 */ + 0, 0, 0xE7D3, 0, 0, 0, 0, 0xE4DE, /* 0x20 */ + 0, 0xF548, 0xF6BC, 0xE99F, 0, 0xEF7C, 0xED77, 0, /* 0x20 */ + 0, 0xECF7, 0, 0, 0, 0, 0, 0xF138, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF893, 0, /* 0x30 */ + 0, 0, 0, 0, 0xEDF2, 0, 0, 0xE396, /* 0x40 */ + 0xE43F, 0xE975, 0, 0, 0, 0, 0xE335, 0xF3B4, /* 0x40 */ + 0xF941, 0xE19A, 0, 0, 0xE9C6, 0xF861, 0, 0xF6DF, /* 0x50 */ + 0, 0, 0xF838, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF297, 0, 0xEA5E, 0, 0, 0, 0, 0xEEF3, /* 0x60 */ + 0, 0, 0xF6AC, 0xF0C4, 0xF1E1, 0xEB3B, 0xE9C7, 0, /* 0x60 */ + 0, 0, 0, 0xE443, 0xE44F, 0, 0, 0, /* 0x70 */ + 0xE05C, 0, 0, 0, 0, 0xF8BF, 0, 0, /* 0x70 */ + 0, 0, 0xEDFD, 0xE9E5, 0xE75D, 0, 0, 0, /* 0x80 */ + 0, 0, 0xF196, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xE397, 0, 0, 0xEF7D, 0xE362, /* 0x90 */ + 0, 0xE7D8, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF676, 0, 0, /* 0xA0 */ + 0xE8AA, 0, 0, 0, 0xF6E0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE769, 0, 0xF533, 0, 0, 0xF56D, 0, /* 0xB0 */ + 0, 0, 0, 0xF2D1, 0, 0, 0xE7B5, 0, /* 0xC0 */ + 0, 0xF1AB, 0, 0xECB7, 0, 0, 0, 0, /* 0xC0 */ + 0xF24B, 0xE1B4, 0, 0xEB95, 0xF05D, 0, 0, 0, /* 0xD0 */ + 0, 0xF197, 0xEF7E, 0, 0xE0A9, 0xF3AF, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE05D, 0, /* 0xE0 */ + 0xF139, 0, 0xF47B, 0, 0xF9EF, 0, 0xF7F3, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xEE51, 0, 0, 0xF168, 0, 0, 0, 0xF1AC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF05E, 0, 0xEF6F, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xEA5F, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE436, 0, 0, 0xEEF4, 0xE3D6, 0, 0, 0xEE52, /* 0x10 */ + 0xECE3, 0, 0, 0, 0, 0xED40, 0, 0, /* 0x20 */ + 0, 0xE744, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF635, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF4DE, 0, 0, 0, /* 0x30 */ + 0, 0xE6A5, 0, 0, 0, 0, 0xF6E8, 0, /* 0x40 */ + 0, 0xEF56, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xF8E6, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE9E6, 0, 0, 0, 0xE9A0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE76A, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE83C, 0xF040, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xECB8, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE03A, 0xEBF9, 0, 0xF041, 0, 0, 0, /* 0xC0 */ + 0, 0xF47C, 0, 0, 0xF87E, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF265, 0, 0, 0, 0, 0xF7F4, 0, /* 0xE0 */ + 0, 0xE47C /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8FB, 0, 0, /* 0x00 */ + 0, 0xF9F0, 0, 0xEB4D, 0xE273, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF756, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEA3E, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xEAC5, 0, 0, 0xEDBE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xF1AD, 0xF87A, 0, 0, 0xE1EE, 0xF1A6, 0, 0xF1AE, /* 0x50 */ + 0xF37D, 0, 0xE9A1, 0, 0xF1AF, 0xF99A, 0, 0xE77B, /* 0x50 */ + 0, 0, 0, 0xE19B, 0xE1B5, 0, 0, 0, /* 0x60 */ + 0, 0xF839, 0, 0xEBDD, 0, 0, 0, 0, /* 0x60 */ + 0xEC65, 0xF1CF, 0, 0, 0, 0xE9A2, 0, 0, /* 0x70 */ + 0xF7CA, 0, 0xF078, 0, 0xEDED, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE4EB, 0, 0xEFD4, /* 0x80 */ + 0xEBFA, 0xED5C, 0, 0xEBE4, 0xEF57, 0, 0, 0xE26B, /* 0x80 */ + 0, 0, 0, 0xE965, 0, 0xF6B5, 0xF995, 0xF395, /* 0x90 */ + 0xE23F, 0xF3B5, 0xF2D2, 0xEF58, 0xF0F1, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE0D4, 0xEB4E, 0xECF8, 0xF079, 0xF942, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xEB96, 0, 0xE2E0, 0, /* 0xA0 */ + 0xF235, 0, 0, 0xF83A, 0xEE53, 0xEBB2, 0xE03B, 0, /* 0xB0 */ + 0xECE4, 0xEFBB, 0, 0, 0, 0, 0, 0xEC66, /* 0xB0 */ + 0xF4F2, 0, 0xF266, 0xF042, 0xE398, 0xF169, 0xE85B, 0xE2A8, /* 0xC0 */ + 0, 0, 0, 0, 0xE9A3, 0, 0, 0, /* 0xC0 */ + 0xE76B, 0, 0xF7CE, 0xEFD5, 0xECD1, 0, 0, 0xE44C, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE73C, 0xF4CC, /* 0xD0 */ + 0, 0xE1FB, 0xF666, 0, 0xEEF5, 0xEF91, 0xECF9, 0xE44B, /* 0xE0 */ + 0xF4F3, 0xECFB, 0, 0xEA60, 0xE240, 0, 0xE699, 0xF3D9, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF5C1, 0xE954, 0, /* 0xF0 */ + 0xF5BB, 0, 0xEA61 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE976, 0, 0, 0xEA62, 0, 0, 0xF1E2, /* 0x00 */ + 0xF298, 0xF05F, 0xF37E, 0xECFC, 0, 0xE4DF, 0xE4F4, 0xEBB3, /* 0x00 */ + 0, 0xEBB4, 0, 0, 0, 0, 0xF563, 0, /* 0x10 */ + 0, 0xEAC6, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xEFD6, 0, 0, 0, /* 0x20 */ + 0xE8AB, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF636, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xECB9, 0xF0C5, 0xF539, 0xE1B6, 0xE49B, 0, 0xE83D, 0xE473, /* 0x30 */ + 0xE2D1, 0, 0, 0, 0, 0xE0DC, 0xE19C, 0, /* 0x40 */ + 0xE2DD, 0, 0, 0xEF39, 0, 0xECBB, 0xECBA, 0, /* 0x40 */ + 0, 0xEB6A, 0, 0, 0, 0xF299, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE943, 0, 0, 0, 0, /* 0x50 */ + 0xE4F5, 0, 0xE6A6, 0, 0xF645, 0xE6DB, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xEBD5, 0, 0, 0xE57A, /* 0x60 */ + 0, 0xEAA3, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF9DF, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE399, 0xF1D4, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE0AA, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xED6B, 0, 0xEBFB, 0xE0A2, 0, 0, 0, /* 0xA0 */ + 0, 0xE4E0, 0, 0xED4F, 0, 0xF8C0, 0, 0xE84E, /* 0xB0 */ + 0xED5D, 0, 0xE649, 0, 0, 0, 0xF2C0, 0, /* 0xB0 */ + 0xEBFC, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF649, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xEAC7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xED41, 0, 0, 0, 0, 0, 0, 0xE977, /* 0xE0 */ + 0xE978, 0, 0, 0, 0xF866, 0, 0xE4F6, 0, /* 0xF0 */ + 0, 0, 0, 0xF3DA, 0, 0xF894 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEC9F, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE5CF, 0xE39A, 0, /* 0x00 */ + 0, 0xE1DF, 0, 0, 0xF5CB, 0, 0xED92, 0xE0AB, /* 0x10 */ + 0, 0xE6C4, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xECA0, /* 0x20 */ + 0, 0xE9DA, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xE83E, 0xE07E, 0, 0, 0, /* 0x40 */ + 0xE5B9, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xECA1, 0, 0, 0xEF73, 0, 0, 0xF4AB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2A9, /* 0x80 */ + 0, 0, 0, 0xE4F7, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE593, 0, 0, /* 0x90 */ + 0xE274, 0, 0xEF94, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xEDF5, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xEEAE, 0, 0xE64A, 0, 0xEAEC, 0xED50, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xEF74, 0, 0, /* 0xC0 */ + 0, 0, 0xE745, 0, 0, 0, 0xED6C, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF549, 0xF3B6, 0, /* 0xD0 */ + 0, 0xEC6E, 0xEBB5, 0, 0, 0xE1EF, 0xF3A7, 0xE275, /* 0xE0 */ + 0xE0DD, 0, 0, 0xE7E3, 0, 0, 0xF4AC, 0, /* 0xE0 */ + 0, 0xE39B, 0xF13B, 0xEA63, 0xF6E9, 0, 0, 0xF7F5, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xEBDE, 0xE0EE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xECBC, 0xF766, 0, 0, 0xE8EE, 0, /* 0x00 */ + 0, 0, 0, 0, 0xF9F1, 0, 0, 0, /* 0x00 */ + 0, 0xF6B6, 0, 0, 0, 0, 0xF56E, 0, /* 0x10 */ + 0, 0xF47D, 0, 0xE8D9, 0, 0xF338, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xEBFD, 0, 0, /* 0x20 */ + 0, 0, 0, 0xEA64, 0, 0xEB3C, 0, 0, /* 0x20 */ + 0, 0, 0, 0xF1E3, 0, 0, 0xE4E1, 0, /* 0x30 */ + 0xEAC8, 0, 0, 0, 0, 0xE7B6, 0, 0xF9AC, /* 0x30 */ + 0xF2D3, 0, 0, 0, 0xED51, 0xF77B, 0, 0xE8AC, /* 0x40 */ + 0, 0, 0, 0, 0xF956, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE73D, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xF64A, /* 0x50 */ + 0, 0xE8DF, 0xE4D3, 0xF757, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE05E, 0xF751, 0xE444, 0, 0, 0xE944, /* 0x70 */ + 0xF849, 0xE05F, 0, 0xF943, 0xF07A, 0xF07B, 0xE39C, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF1E4, 0, 0, 0xE9E7, /* 0x80 */ + 0, 0, 0xEAC9, 0, 0, 0, 0, 0xEAED, /* 0x80 */ + 0, 0, 0, 0, 0, 0xF24C, 0, 0xF2C1, /* 0x90 */ + 0, 0, 0xE162, 0, 0xE9A4, 0, 0, 0, /* 0x90 */ + 0xEACA, 0, 0, 0, 0, 0, 0xE4F8, 0xF3A8, /* 0xA0 */ + 0, 0, 0, 0xE1B7, 0, 0xF2D4, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xED6D, 0xEAEE, 0xE0AC, /* 0xB0 */ + 0xEFBC, 0, 0, 0, 0, 0, 0xF07C, 0, /* 0xB0 */ + 0, 0, 0xEACB, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xF7BF, 0xE63F, 0xE5C6, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xE2AA, 0, 0, 0xE239, 0, 0, 0xE69A, 0, /* 0xD0 */ + 0, 0, 0xF3B7, 0xF29A, 0, 0, 0, 0xE7D9, /* 0xD0 */ + 0xF4DF, 0, 0xF758, 0xE256, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE5E6, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF576, 0, 0, 0xEE55, 0xF2D5, /* 0xF0 */ + 0, 0, 0xE0EF, 0xF96F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE937, 0, 0, 0xE677, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF759, 0, 0, 0, 0, 0xECD2, /* 0x00 */ + 0, 0xECBD, 0, 0xE2E1, 0xF350, 0xF16A, 0, 0xE9D7, /* 0x10 */ + 0xF8F0, 0, 0, 0xF13C, 0, 0, 0, 0xF339, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF867, 0xF8C1, /* 0x20 */ + 0, 0xE450, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xEDB0, 0, 0, 0, 0xF1E5, 0, 0, /* 0x30 */ + 0, 0, 0xE0AD, 0, 0xF7B0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xF6A5, 0, 0xE0AE, 0, 0xE83F, 0, 0xE746, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE4A7, 0xF8B2, /* 0x50 */ + 0, 0xF9C4, 0, 0xF13D, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xF8A1, 0, 0, 0, 0xEDE9, 0xEFEE, /* 0x60 */ + 0, 0xF4F4, 0xF795, 0xF351, 0xEA3F, 0xF740, 0, 0, /* 0x60 */ + 0xF4E0, 0xEEAF, 0, 0, 0, 0, 0, 0xE8AD, /* 0x70 */ + 0, 0xEE45, 0, 0, 0xF7A8, 0, 0, 0xE9D8, /* 0x70 */ + 0xEF69, 0xF2D6, 0, 0, 0, 0xE4E2, 0, 0xEC6F, /* 0x80 */ + 0, 0, 0xF970, 0xE6C8, 0xF9AD, 0, 0, 0, /* 0x80 */ + 0xEAEF, 0xE163, 0xE4F9, 0, 0, 0, 0, 0xE592, /* 0x90 */ + 0xE8C7, 0xEA65, 0, 0, 0, 0, 0xF396, 0, /* 0x90 */ + 0xE5D0, 0xEDD9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF957, 0xE966, 0xEC70, 0, 0, 0, 0xE840, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xF4A3, 0, 0xE4EC, /* 0xB0 */ + 0, 0xF55B, 0, 0, 0, 0xF9C5, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xECFD, 0, 0xF7B1, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE39D, 0xF16B, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xF5BC, 0xF434, /* 0xD0 */ + 0xE75E, 0xE75F, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xF5F7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF671, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE447, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xF8EC, 0, 0xE9C8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xED78, /* 0x00 */ + 0, 0, 0xE451, 0, 0, 0, 0xF767, 0, /* 0x10 */ + 0, 0, 0, 0, 0xE64B, 0xEA66, 0, 0, /* 0x10 */ + 0xF6BD, 0xF13E, 0, 0, 0, 0xE371, 0, 0xEB97, /* 0x20 */ + 0xF043, 0, 0xE266, 0, 0, 0, 0, 0xE135, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF198, 0xEC71, 0xECBE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF958, 0, 0, /* 0x40 */ + 0xE1F0, 0, 0xF7F6, 0, 0, 0xEAF0, 0, 0, /* 0x50 */ + 0, 0xEDBF, 0, 0, 0, 0xE24F, 0, 0, /* 0x50 */ + 0, 0, 0xF971, 0xF1B0, 0xF9D1, 0xF64B, 0, 0, /* 0x60 */ + 0xF7CF, 0xF0DA, 0xE051, 0, 0xE448, 0xE1F1, 0, 0xECD3, /* 0x60 */ + 0xF9E6, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEE7D, 0, 0, /* 0x80 */ + 0, 0xECFA, 0, 0, 0xF33A, 0xF7D0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xF972, 0, 0xF737, 0, /* 0x90 */ + 0, 0, 0xEBE5, 0xF29B, 0, 0, 0, 0xEEF6, /* 0x90 */ + 0xF07D, 0, 0, 0xF944, 0xF5C2, 0, 0, 0xE6DC, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF397, 0, 0xE9E8, 0xE4ED, 0xF5FC, 0, 0xE84F, 0, /* 0xB0 */ + 0xE19D, 0, 0, 0, 0xE4FA, 0xF534, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xF2D7, 0, 0xE553, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF8E3, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xF8ED, 0, 0xEB3D, 0, 0, 0xF07E, /* 0xD0 */ + 0xF8B3, 0xED52, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF677, 0xE46D, 0, 0xEACC, 0, 0, 0xF959, 0, /* 0xF0 */ + 0, 0xEDA9, 0xEB98, 0xF643 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEBFE, 0, 0, 0, 0, 0xE0F0, 0, /* 0x00 */ + 0xF091, 0xF092, 0, 0, 0, 0xE850, 0xF744, 0xF0F2, /* 0x00 */ + 0, 0, 0, 0, 0, 0xED53, 0, 0, /* 0x10 */ + 0, 0, 0xEFD7, 0xED93, 0, 0, 0, 0xE091, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE267, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF95A, 0, 0, 0, 0xF4E1, 0, 0, 0xE0C4, /* 0x30 */ + 0, 0, 0, 0, 0xECE5, 0, 0xE0C5, 0xF044, /* 0x30 */ + 0, 0, 0xEFBD, 0, 0xE6C9, 0, 0, 0xF0DB, /* 0x40 */ + 0xF1B1, 0, 0xE153, 0xF6BE, 0xF95B, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF796, 0, 0xE7B7, 0, 0, /* 0x50 */ + 0xF4D3, 0xF4D4, 0, 0, 0, 0xF6E4, 0, 0xF6D1, /* 0x50 */ + 0, 0, 0xE747, 0xE241, 0xE052, 0, 0, 0xF8B4, /* 0x60 */ + 0xE0C6, 0, 0, 0xF398, 0, 0, 0xE5E7, 0, /* 0x60 */ + 0xF060, 0, 0, 0, 0, 0, 0xE164, 0xE0AF, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF53A, 0xEFAF, 0, /* 0x70 */ + 0, 0xF5C3, 0xEFD8, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE9E9, 0, 0, 0, 0xF3F3, 0, /* 0x80 */ + 0xE5FB, 0xEA4B, 0, 0, 0xF59D, 0, 0, 0, /* 0x90 */ + 0xF9F3, 0xF9F2, 0xF6A6, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE9C9, 0, 0, 0xE563, /* 0xA0 */ + 0, 0xE138, 0, 0xE851, 0xE165, 0, 0xE7E4, 0, /* 0xA0 */ + 0, 0, 0xF85A, 0, 0, 0, 0xEDE3, 0, /* 0xB0 */ + 0, 0, 0xE4BC, 0, 0, 0, 0xE092, 0, /* 0xB0 */ + 0, 0, 0, 0xE354, 0, 0, 0, 0xE060, /* 0xC0 */ + 0xF83B, 0xF0EB, 0xEEF8, 0xE7E5, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE3D7, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF4A4, 0, 0, 0, 0xE59D, 0xF973, /* 0xF0 */ + 0xF868, 0, 0xF4D5, 0, 0xE2AB, 0, 0, 0xF0F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5FC, 0, 0, 0, 0, 0, 0, 0xE4D4, /* 0x00 */ + 0xE1FC, 0, 0xE7E6, 0, 0xEC9B, 0xEC31, 0xF0D4, 0, /* 0x00 */ + 0xEB99, 0xED42, 0xE19E, 0, 0, 0, 0xF8E4, 0, /* 0x10 */ + 0, 0, 0xF53B, 0, 0, 0, 0, 0xE34D, /* 0x10 */ + 0, 0xE093, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF2B8, 0, 0, 0, 0xE6C0, 0, /* 0x20 */ + 0xF29C, 0xF9F4, 0, 0, 0xE4E3, 0, 0xF8C2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE5E8, 0xE8AE, /* 0x30 */ + 0xEBB6, 0xF747, 0, 0, 0, 0, 0, 0xEB4F, /* 0x40 */ + 0xF8C3, 0xE9EA, 0, 0xEC32, 0, 0xF236, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF678, 0, 0, 0, 0, /* 0x50 */ + 0xF697, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xE9CA, 0, /* 0x60 */ + 0, 0xE372, 0, 0, 0, 0, 0xE9A6, 0, /* 0x70 */ + 0, 0xE9EB, 0, 0, 0xED9B, 0, 0, 0xECAF, /* 0x70 */ + 0xE39E, 0, 0, 0, 0xF59E, 0, 0, 0, /* 0x80 */ + 0, 0xE14C, 0xF6EA, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xEDE4, 0xEAF1, 0, 0, 0xF6E1, 0, 0xF7F7, /* 0x90 */ + 0xF2B9, 0, 0, 0xF768, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF7A9, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xF769, 0, 0, 0, 0xF24D, 0, 0, /* 0xB0 */ + 0, 0xE756, 0, 0, 0xED73, 0xF5CE, 0, 0, /* 0xB0 */ + 0, 0, 0xE9D9, 0, 0, 0, 0, 0xE7E7, /* 0xC0 */ + 0xE449, 0xE5C3, 0, 0, 0xE875, 0xE860, 0, 0xE3D9, /* 0xC0 */ + 0xE268, 0, 0xE0DE, 0xF53C, 0xE89D, 0, 0xF679, 0xEF95, /* 0xD0 */ + 0xE2AC, 0xF392, 0, 0xF59F, 0xE8C8, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE250, 0xECD4, 0xE3CF, 0xF3F5, /* 0xE0 */ + 0, 0xE1F2, 0, 0xE2EB, 0, 0, 0, 0xE1B8, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xECA6, 0xE3DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF435, 0, 0, 0, 0, 0, 0xF436, /* 0x00 */ + 0, 0xED5E, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xE4FB, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xF3A9, 0, 0, 0, 0xF459, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xF2D8, 0xEE59, 0, 0xE748, 0xF895, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF4B5, 0, 0, 0xF734, 0, 0, 0xE3F3, /* 0x40 */ + 0xEE58, 0, 0, 0, 0, 0xF76A, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xE979, /* 0x60 */ + 0xEA67, 0, 0, 0, 0, 0, 0xE0DF, 0, /* 0x60 */ + 0, 0, 0xE2EC, 0, 0, 0, 0, 0xF56F, /* 0x70 */ + 0, 0, 0xE3F4, 0xE44A, 0, 0, 0, 0xEAF2, /* 0x70 */ + 0, 0, 0, 0xEBB7, 0, 0, 0, 0, /* 0x80 */ + 0xEC33, 0xE4FC, 0, 0, 0xF1E6, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE8C9, 0, 0, 0, 0xED9C, 0, /* 0x90 */ + 0xE2DE, 0, 0, 0xE260, 0, 0, 0, 0, /* 0x90 */ + 0xE5D3, 0xF4F5, 0xF6AE, 0, 0, 0xF2C8, 0, 0xE1F3, /* 0xA0 */ + 0xF5CF, 0xEDF3, 0xF352, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE061, 0, 0, 0, 0xF093, 0, 0xE336, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7DA, /* 0xC0 */ + 0xF33B, 0, 0, 0, 0, 0, 0xF0E7, 0, /* 0xD0 */ + 0, 0, 0xEDC0, 0xF945, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xED54, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE139, 0xF9C6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xF045, 0, 0xEDAA, 0xEABA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEBDF, 0, 0xE861, /* 0x00 */ + 0, 0, 0, 0, 0xEBB8, 0, 0xEF96, 0xE4FD, /* 0x10 */ + 0, 0, 0, 0, 0xEC34, 0, 0, 0, /* 0x10 */ + 0, 0, 0xF45A, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE876, 0xF6B3, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xF9CD, 0, 0, 0, 0xF4B6, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF267, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF5C4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE734, 0, 0, 0, 0, 0, 0xF437, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE7B8, 0xE7B9, 0xF2C9, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE65E, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF6CB, 0xEAAE, 0xEF97, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE445, 0, 0, 0, 0xE4D5, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF55C, 0xE89E, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE7E8, 0, 0xF6EB, 0xF5C9, 0, /* 0xA0 */ + 0xF4BC, 0, 0xE862, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE4B5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEF46, 0, 0, 0xE65F, 0xF54A, 0, 0xF6C9, /* 0xC0 */ + 0, 0, 0xE13A, 0, 0, 0xF353, 0xE166, 0, /* 0xC0 */ + 0, 0, 0xE363, 0, 0xE4BD, 0, 0, 0, /* 0xD0 */ + 0xE8FB, 0, 0xE0E0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE4E4, 0xF699, 0, 0, 0xE5BA, 0xF4CD, 0xE0E1, /* 0xE0 */ + 0, 0, 0, 0, 0xF0F4, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF53D, 0, 0xF93A, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xF6EC, 0, 0, 0, 0xEF98 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE877, 0, 0, 0, 0xF6CC, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xEDC1, 0, 0, 0, 0, 0xEB7E, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE5FD, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE276, 0xF93B, 0xE5BB, 0, 0, 0xF438, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xEC35, 0xE1B9, /* 0x30 */ + 0xF094, 0xE0C7, 0, 0xE1F4, 0, 0, 0xE8AF, 0xF2D9, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE1BA, 0, 0, /* 0x40 */ + 0xF99B, 0, 0, 0, 0, 0xEAF3, 0xE277, 0xE852, /* 0x40 */ + 0, 0xE2AD, 0, 0, 0, 0, 0xEEF9, 0xF738, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xF4E2, 0, /* 0x50 */ + 0, 0, 0xE094, 0xEAA4, 0, 0, 0xE554, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE167, 0xEDC2, 0, 0, /* 0x60 */ + 0, 0, 0xE1BB, 0, 0xF2DA, 0xF268, 0, 0xE9A7, /* 0x70 */ + 0xEC36, 0, 0, 0, 0, 0, 0xEB50, 0, /* 0x70 */ + 0, 0, 0xE640, 0xF75A, 0, 0xF99C, 0, 0xE7FE, /* 0x80 */ + 0, 0, 0, 0, 0xEA40, 0, 0, 0, /* 0x80 */ + 0xE9EC, 0xE878, 0, 0, 0, 0, 0, 0xE570, /* 0x90 */ + 0, 0xE69B, 0, 0xE1D7, 0xEA68, 0, 0, 0xF49A, /* 0x90 */ + 0, 0xED66, 0, 0, 0xE355, 0xF53E, 0, 0xE9A8, /* 0xA0 */ + 0, 0, 0, 0xF1C5, 0xF4D6, 0, 0, 0xEA69, /* 0xA0 */ + 0xECE6, 0, 0, 0, 0, 0, 0, 0xE4A8, /* 0xB0 */ + 0, 0xE8B0, 0, 0, 0xEDDA, 0xECBF, 0, 0, /* 0xB0 */ + 0, 0xE8B1, 0, 0, 0, 0xE5E9, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xEB51, 0xF2DB, 0, 0, 0xF379, /* 0xC0 */ + 0, 0, 0xE6B2, 0, 0, 0, 0, 0xE39F, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xE7E9, 0, 0, 0xE3A0, 0, 0xF17D, 0xE4A9, 0, /* 0xE0 */ + 0xF439, 0xF354, 0, 0, 0xEC72, 0xEFEF, 0, 0, /* 0xE0 */ + 0, 0xF7D1, 0, 0, 0xEFD9, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xEF6A, 0xE853, 0xE854, 0xE555, 0, 0xEEFA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1E0, 0xECB0, /* 0x00 */ + 0, 0xE8B2, 0xF8C4, 0, 0xF4E3, 0, 0xE7A5, 0xF8E7, /* 0x00 */ + 0xE9CB, 0xE364, 0, 0xEE46, 0xEB3E, 0xF9DA, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE945, 0xEB9A, /* 0x10 */ + 0xEEB1, 0, 0, 0, 0, 0xF5F0, 0, 0xE76C, /* 0x20 */ + 0xF1C6, 0, 0, 0, 0, 0xEBB9, 0, 0xECC0, /* 0x20 */ + 0xF7C0, 0xEFF0, 0, 0, 0xE7DB, 0, 0xF4E4, 0, /* 0x30 */ + 0, 0, 0xE946, 0xED79, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF355, 0xECC1, 0xF95C, 0xF95D, 0, 0, 0, /* 0x40 */ + 0, 0xF45B, 0, 0xF45C, 0, 0, 0, 0xED5F, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF3DB, 0, 0xF869, 0, 0xF3B8, 0xF9F5, 0xEB9B, /* 0x50 */ + 0, 0, 0, 0, 0xEEFB, 0xF947, 0xF974, 0xF8C5, /* 0x60 */ + 0xECE7, 0xE749, 0, 0xF69A, 0, 0, 0xE955, 0xE168, /* 0x60 */ + 0, 0, 0, 0xEB3F, 0xF577, 0, 0xF2DC, 0xE2FC, /* 0x70 */ + 0xF2DD, 0, 0xF43A, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF9BE, 0, 0, 0xE03C, /* 0x80 */ + 0xF9BB, 0xF9C7, 0, 0, 0, 0, 0xEEB2, 0, /* 0x80 */ + 0xF061, 0xEAF4, 0, 0, 0, 0, 0xE3EC, 0xED6E, /* 0x90 */ + 0xEDC3, 0, 0, 0, 0, 0xE7A6, 0, 0, /* 0x90 */ + 0xE1BC, 0, 0xF4E5, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF1D5, 0, 0, 0xE7BA, 0, /* 0xA0 */ + 0, 0, 0xF1E7, 0xF8B5, 0xF77C, 0, 0, 0, /* 0xB0 */ + 0, 0xEB77, 0, 0xE169, 0, 0, 0xE556, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xEEA5, 0, 0xE5F5, 0xE4BE, /* 0xC0 */ + 0, 0xF99D, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xED94, 0, /* 0xD0 */ + 0, 0xEAF5, 0, 0, 0xEF9A, 0xF77D, 0, 0, /* 0xD0 */ + 0xE257, 0, 0, 0, 0, 0, 0xF9F6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xEF68, 0, 0xE1D8, 0xEED6, 0xE16A, 0, 0, 0xE073, /* 0xF0 */ + 0xEAF6, 0xF357, 0xF356, 0, 0xE74A, 0, 0xF3F4, 0xF592 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5CC, 0, 0, 0xF975, 0, 0, 0, 0, /* 0x00 */ + 0xF055, 0xF095, 0, 0xE9DB, 0, 0xE967, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xEA9F, 0xF49B, 0, 0xE5C7, /* 0x10 */ + 0, 0, 0, 0xE760, 0, 0xF358, 0xE3A1, 0xE3A2, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE7D4, 0xE678, /* 0x20 */ + 0xE7CA, 0, 0xE841, 0xE757, 0xE972, 0xF4CE, 0xF5F4, 0, /* 0x20 */ + 0, 0xF3B9, 0, 0, 0xE863, 0, 0xF67A, 0, /* 0x30 */ + 0, 0, 0xE2F5, 0, 0, 0xF9AE, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE062, 0, /* 0x40 */ + 0, 0xEAB4, 0, 0, 0, 0, 0xE6DD, 0xF84A, /* 0x40 */ + 0xF237, 0xF5BD, 0, 0xF797, 0, 0, 0xF1E8, 0, /* 0x50 */ + 0, 0, 0, 0, 0xE571, 0, 0xE3A3, 0xEBD6, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF7F8, 0, 0xE8CA, /* 0x60 */ + 0xE0F9, 0xE564, 0, 0xE7DC, 0, 0xF24E, 0, 0xF6ED, /* 0x70 */ + 0, 0, 0, 0xE47E, 0, 0, 0xEBE6, 0xF6F9, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9ED, /* 0x80 */ + 0, 0xEF6B, 0, 0xE8B3, 0, 0, 0, 0xE3F7, /* 0x80 */ + 0xEB40, 0, 0, 0xE572, 0, 0xF667, 0, 0xE6F9, /* 0x90 */ + 0, 0, 0xE76D, 0, 0xE1FD, 0xF43B, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1BD, /* 0xA0 */ + 0xF752, 0, 0, 0xF43C, 0, 0, 0xE03D, 0xE03E, /* 0xB0 */ + 0xE2AE, 0, 0, 0, 0, 0, 0xECC2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE947, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8DA, /* 0xC0 */ + 0xE7BB, 0xE095, 0xF663, 0xEE9A, 0xF097, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xF098, 0, 0, 0xF69B, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE2AF, 0, 0, 0xE063, 0, 0, 0xE03F, /* 0xE0 */ + 0xE440, 0xF3BA, 0, 0xE6B3, 0xECC3, 0xF4FD, 0xEA6A, 0, /* 0xF0 */ + 0, 0, 0, 0xEA6B, 0, 0, 0xF2DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEC73, 0xF29D, 0, 0, 0xEAF7, 0xE6CA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE278, 0xE8DB, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF3BB, 0, 0, 0, 0, 0xEFF1, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xF847, 0xE356, 0, 0, 0xE13B, 0xF238, 0, 0, /* 0x30 */ + 0xE0FA, 0xF7F9, 0xE19F, 0xE4FE, 0, 0, 0, 0, /* 0x40 */ + 0xED60, 0, 0, 0, 0, 0, 0xF47E, 0, /* 0x40 */ + 0xE565, 0xEACD, 0, 0xF948, 0xE3D0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF45D, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF6D2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE064, /* 0x70 */ + 0, 0xE5D9, 0, 0, 0, 0xE76E, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1D9, /* 0x80 */ + 0, 0, 0, 0xF239, 0xF64C, 0, 0, 0xE16B, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF359, 0, 0xF99E, /* 0x90 */ + 0, 0xEF59, 0xF5A0, 0, 0, 0, 0, 0xEEFC, /* 0xA0 */ + 0xE6DE, 0, 0, 0, 0, 0xEA6C, 0, 0xF33C, /* 0xA0 */ + 0xE1A0, 0xE1E1, 0, 0xEBBA, 0, 0xE8EF, 0xE842, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE3A5, 0xE948, 0, 0, /* 0xC0 */ + 0, 0xE798, 0, 0xE3A4, 0, 0xE1E2, 0, 0, /* 0xC0 */ + 0, 0, 0xE97A, 0, 0, 0xF399, 0, 0xF35A, /* 0xD0 */ + 0xE34E, 0, 0xE9DC, 0, 0, 0, 0, 0xE566, /* 0xD0 */ + 0xE4D6, 0, 0, 0, 0, 0, 0, 0xF1D0, /* 0xE0 */ + 0xE1A1, 0, 0, 0, 0, 0, 0xEAB5, 0, /* 0xE0 */ + 0, 0, 0xEAF8, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE531, 0xE242 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEF5A, 0, 0, 0, 0, 0xF0F5, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xECD5, 0xF5D0, 0, /* 0x00 */ + 0, 0, 0xF5A1, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7A7, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xEDAB, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xEE5B, 0, 0xF5F1, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xEDC5, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF7A3, 0xEB6B, 0xF67B, 0, 0xE0F1, /* 0x50 */ + 0, 0xE7EA, 0xF5A2, 0, 0, 0, 0xE6D1, 0, /* 0x50 */ + 0xE3F8, 0xF09A, 0xF09B, 0xE843, 0, 0, 0, 0, /* 0x60 */ + 0xF2DF, 0, 0, 0xF3EF, 0, 0xEDF6, 0xF24F, 0xEC74, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE34F, 0, 0xF83C, /* 0x70 */ + 0xF5D1, 0xEEB3, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xEFBE, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF45E, 0xE8B4, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF95E, 0, 0xE9EE, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xEEB4, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE6B4, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF6B4, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE1BE, 0, 0xE879, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE2B0, 0xF6D9, 0xF4E6, 0, 0, /* 0xC0 */ + 0xE269, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE23A, 0, 0xE0C8, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xE337, 0, 0xF35B, 0, 0xE357 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xED55, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE8E0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xE5DA, 0, 0xE6A7, 0, 0, 0, 0xF250, /* 0x10 */ + 0, 0xF798, 0, 0, 0, 0, 0xF5D2, 0xF1E9, /* 0x10 */ + 0, 0xE7BC, 0, 0xEDC6, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF5A3, 0, 0, /* 0x30 */ + 0xE864, 0xEC37, 0xF8FC, 0, 0, 0xF3DC, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE096, 0, 0, 0, /* 0x40 */ + 0xEF9C, 0, 0, 0xE279, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xEFF8, 0xEC75, 0, 0, 0, 0, /* 0x50 */ + 0xE349, 0xE594, 0, 0, 0, 0, 0, 0xE3A6, /* 0x50 */ + 0, 0xEACE, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xF996, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE4AA, 0, 0, 0, 0xE13C, 0, 0, 0, /* 0x80 */ + 0, 0xF2E0, 0, 0, 0, 0xEDE5, 0xE365, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8FC, /* 0x90 */ + 0, 0, 0, 0, 0xF976, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE0FE, 0xF1EA, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xEA41, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF7E3, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE532, 0xE2F6, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE660, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE5EA, 0xF3EE, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xF85B, 0, /* 0xF0 */ + 0, 0, 0, 0xEDA1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5B1, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE2ED, 0, 0xF1EB, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE5B2, 0, 0, 0, 0xE5BC, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF9E2, 0xF4AD, 0, 0xF9DB, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEFB0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xE3A7, 0, 0, 0xF9E3, 0xE243, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF9E4, 0xF85E, /* 0x40 */ + 0, 0, 0, 0, 0xE040, 0, 0xF6A7, 0, /* 0x40 */ + 0xE2B1, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xEE32, /* 0x50 */ + 0, 0xF946, 0xF43D, 0xF2E1, 0xF4AE, 0xE956, 0xE7EB, 0, /* 0x60 */ + 0, 0, 0xEF70, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEBA8, 0, 0, 0, 0, 0xE5F6, /* 0x70 */ + 0xE2FD, 0, 0, 0xEA6D, 0, 0, 0, 0xE7D1, /* 0x70 */ + 0, 0, 0, 0xED7A, 0xF45F, 0, 0xF6BF, 0, /* 0x80 */ + 0, 0xEC76, 0xEC38, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xECD6, 0, /* 0x90 */ + 0xF1D1, 0, 0, 0, 0, 0, 0xEFF9, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xE641, 0xEA42, /* 0xA0 */ + 0, 0, 0xEB78, 0, 0, 0xE4AB, 0, 0xF0DC, /* 0xB0 */ + 0, 0, 0xEAAF, 0, 0xE053, 0, 0, 0xF29E, /* 0xB0 */ + 0, 0xF9C3, 0, 0, 0, 0xF0F6, 0xE2B2, 0, /* 0xC0 */ + 0, 0, 0, 0xE7EC, 0, 0xE7BD, 0, 0xE76F, /* 0xC0 */ + 0, 0, 0xE548, 0xF0BE, 0xE9EF, 0, 0xE9F0, 0xE9F1, /* 0xD0 */ + 0xE9F2, 0, 0, 0xE7BE, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF8C6, 0xE2B3 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF29F, 0, 0, 0, 0, 0, 0, 0xED3B, /* 0x00 */ + 0, 0xE855, 0, 0xE77C, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE3A8, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xEC39, 0, 0, 0xEA4C, /* 0x30 */ + 0xEEB5, 0, 0, 0, 0, 0, 0xE8F0, 0, /* 0x30 */ + 0xF2E2, 0xF3F0, 0xE2B4, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE8F1, 0, /* 0x40 */ + 0xEB41, 0, 0, 0, 0, 0xEAA5, 0, 0xF7D2, /* 0x50 */ + 0, 0, 0xEEFD, 0, 0, 0xEE33, 0xF8F1, 0xE0B0, /* 0x50 */ + 0xF43E, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE1E7, 0, 0xEF6C, 0, 0, 0xEED7, 0, 0, /* 0x60 */ + 0xF6C0, 0, 0xE373, 0, 0, 0, 0xE831, 0, /* 0x70 */ + 0, 0, 0xE14D, 0, 0, 0xE3A9, 0xE9CC, 0, /* 0x70 */ + 0, 0xECFE, 0xE3AA, 0xEF3A, 0, 0xF046, 0xF7FA, 0xEE5C, /* 0x80 */ + 0xF668, 0, 0, 0, 0xE557, 0, 0, 0, /* 0x80 */ + 0xE7CB, 0, 0xE7D2, 0xE4CB, 0xE799, 0xE839, 0xF5F8, 0, /* 0x90 */ + 0, 0xEA6E, 0xF43F, 0xF739, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE758, 0, 0, 0xF251, 0, /* 0xA0 */ + 0, 0, 0, 0xF7C1, 0, 0, 0, 0, /* 0xB0 */ + 0xE9F3, 0xF09C, 0, 0xF64D, 0xEBBB, 0xE1BF, 0xF564, 0xEE5D, /* 0xB0 */ + 0, 0xF95F, 0xF8A2, 0, 0xEB6C, 0, 0, 0, /* 0xC0 */ + 0, 0xF54B, 0xE865, 0, 0xF7B2, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xF8F2, 0, 0xE8F6, 0, 0xEA6F, /* 0xD0 */ + 0, 0, 0, 0xE8F2, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF76C, 0xF6EE, 0xF0E8, 0, 0xE49C, 0, 0, /* 0xE0 */ + 0xF3BC, 0, 0, 0xF86A, 0, 0, 0xE87A, 0xE856, /* 0xE0 */ + 0xF6C1, 0, 0, 0xEEB6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDC7, 0xE63C, 0, 0, 0, /* 0x00 */ + 0, 0xE957, 0, 0, 0, 0, 0, 0xEBA9, /* 0x10 */ + 0, 0xEC3A, 0, 0xE5A6, 0, 0, 0xE567, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF460, 0, 0xF09D, /* 0x20 */ + 0, 0xEB6D, 0xF8F3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF3BD, 0, 0, 0xEC77, 0xF9D7, 0, /* 0x30 */ + 0xE258, 0xF047, 0, 0xF950, 0, 0xF9E7, 0xF6EF, 0, /* 0x30 */ + 0, 0xE6B5, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF2BA, 0xF3DD, 0, 0xEA43, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xEF5B, 0, 0, 0xF76D, 0, /* 0x60 */ + 0, 0xF8C7, 0xE5C8, 0, 0xE6DF, 0, 0xE9A9, 0, /* 0x60 */ + 0, 0, 0, 0, 0xEFB1, 0, 0, 0xF83D, /* 0x70 */ + 0xF669, 0xF896, 0, 0, 0, 0, 0, 0xF73A, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEE7E, 0, 0xE16C, /* 0x80 */ + 0xEBBC, 0xEB91, 0, 0, 0xEFBF, 0xF99F, 0xEE5E, 0, /* 0x80 */ + 0, 0xEBD7, 0, 0xEE5F, 0, 0xF593, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xED95, /* 0xA0 */ + 0, 0, 0xED9D, 0, 0, 0xF7E4, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF2E3, 0, 0, 0xE2EE, 0xF64E, 0xEB42, 0xF9A0, 0xE3AB, /* 0xC0 */ + 0, 0, 0, 0xE6FA, 0, 0, 0, 0xF8C8, /* 0xC0 */ + 0, 0xEC67, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xE533, 0xF39A, 0xE6A8, 0, 0, 0, 0xEBE7, 0, /* 0xD0 */ + 0, 0xE4BF, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF2E4, 0, 0xE6C5, 0xF0E2, 0, 0, 0xF977, 0, /* 0xE0 */ + 0, 0xED32, 0, 0xEC78, 0, 0xEE60, 0, 0xF8E8, /* 0xF0 */ + 0xF578, 0xEDF4, 0xF54C, 0xF565 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEAB6, /* 0x10 */ + 0, 0xF949, 0xF252, 0xE097, 0, 0, 0, 0xF2E5, /* 0x10 */ + 0xE0E2, 0xE534, 0, 0xEA70, 0xE89F, 0xED56, 0xEF4E, 0, /* 0x20 */ + 0, 0, 0, 0xEB6E, 0xF644, 0xF062, 0, 0xF7FB, /* 0x20 */ + 0, 0, 0xEB52, 0, 0xE074, 0, 0xEEB7, 0, /* 0x30 */ + 0xF09F, 0, 0xE7DD, 0, 0xE844, 0xF23A, 0xF8E9, 0, /* 0x30 */ + 0, 0, 0, 0xE8CB, 0xE845, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF3BE, 0, 0, 0xE4AC, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xF8C9, 0, /* 0x50 */ + 0xEACF, 0, 0, 0xE4C0, 0xECD7, 0, 0xF2E6, 0xF960, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xEFC0, /* 0x60 */ + 0, 0, 0, 0xF5D3, 0, 0, 0xF16C, 0xF6B7, /* 0x60 */ + 0, 0, 0xF048, 0xE3F9, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE958, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xF049, 0, 0, 0, 0, 0, 0xF3DE, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE6B6, 0xE2B5, 0, 0xE7A8, /* 0x90 */ + 0, 0, 0xF17E, 0, 0, 0xE9AA, 0, 0, /* 0xA0 */ + 0, 0, 0xE1A2, 0xEF3E, 0, 0, 0, 0xEBBD, /* 0xA0 */ + 0, 0xF461, 0, 0, 0, 0, 0xEFC1, 0, /* 0xB0 */ + 0, 0, 0xE49E, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE8B5, 0, 0xF4E7, 0xE7A0, 0, 0, /* 0xC0 */ + 0, 0xF961, 0, 0xF1B2, 0xF53F, 0, 0xF8A3, 0, /* 0xC0 */ + 0, 0xF951, 0, 0xF23B, 0xE535, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF594, /* 0xE0 */ + 0, 0, 0, 0, 0xF269, 0, 0, 0, /* 0xF0 */ + 0xF8CA, 0, 0, 0, 0, 0, 0xE1E3, 0xE74B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDDB, 0xF799, 0, 0, 0, 0xF664, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6A9, /* 0x00 */ + 0, 0xE0C9, 0, 0, 0xEE61, 0xF35C, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xE73E, 0, 0xF7D3, 0xE5FE, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE74C, 0xF440, 0, 0, 0, /* 0x20 */ + 0, 0xEC3B, 0xF4E8, 0, 0, 0, 0, 0, /* 0x30 */ + 0xF2C2, 0, 0, 0, 0, 0, 0, 0xF1EC, /* 0x30 */ + 0, 0xEEB8, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xE8A0, 0, 0, 0xE14E, 0, 0, 0xF49E, /* 0x50 */ + 0xE87B, 0, 0xEC68, 0xF1D6, 0, 0, 0xE661, 0xEB43, /* 0x50 */ + 0, 0, 0xF962, 0, 0xF0C8, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE4C1, 0xF35D, 0, /* 0x60 */ + 0xE2F7, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF1D2, 0, 0xE568, 0xE959, 0xE6F1, 0, /* 0x70 */ + 0, 0xEABB, 0, 0, 0xF4A5, 0, 0, 0, /* 0x80 */ + 0xF55D, 0, 0, 0, 0, 0xF3BF, 0xF741, 0, /* 0x80 */ + 0xEFFA, 0, 0, 0, 0xF8CB, 0, 0, 0xE065, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF7D4, 0xF6CA, 0, 0, 0xE658, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xF978, 0xF4BD, /* 0xA0 */ + 0, 0xF2A0, 0, 0xEEFE, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE4C2, 0, 0, 0, 0, 0xE4B6, 0, /* 0xB0 */ + 0xE13D, 0xF69C, 0xE642, 0xE468, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xEED8, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xECA5, 0, 0, /* 0xD0 */ + 0, 0, 0xEEB9, 0, 0, 0, 0, 0xF33D, /* 0xD0 */ + 0xF8CC, 0xF0A1, 0, 0, 0xE536, 0, 0, 0, /* 0xE0 */ + 0, 0xF8CD, 0, 0xE5BD, 0xF3DF, 0, 0, 0xF69D, /* 0xE0 */ + 0, 0xEA44, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xE5EB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDC8, 0, 0, 0, 0xF8A4, 0xE549, 0, /* 0x00 */ + 0, 0xEA71, 0, 0xED33, 0, 0, 0, 0xE6B7, /* 0x00 */ + 0, 0xF77E, 0, 0, 0, 0xEA45, 0, 0, /* 0x10 */ + 0xE662, 0, 0xF7D5, 0xEEBA, 0xF0D5, 0xE5F7, 0xF2E7, 0xEBBE, /* 0x10 */ + 0, 0, 0, 0xF83E, 0, 0, 0, 0xE679, /* 0x20 */ + 0xE67E, 0, 0, 0, 0, 0, 0, 0xEEBB, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xF15B, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE5B3, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE244, 0, 0, 0, /* 0x40 */ + 0xF8A5, 0xEBEE, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF6A8, 0, 0, 0, 0, 0xF8CE, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE74D, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xF8FD, 0, 0, 0, 0, /* 0x60 */ + 0xF979, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE2B6, 0, 0, 0, 0xF1C7, 0xF23C, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE16D, 0, 0, /* 0x80 */ + 0, 0, 0xF637, 0, 0, 0, 0xEE9C, 0, /* 0x80 */ + 0, 0, 0xF5A4, 0, 0, 0, 0, 0, /* 0x90 */ + 0xF9DC, 0xF1B3, 0xE259, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xF2E8, 0, 0, 0xEBBF, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF86B, 0xE0E3, 0xF6A9, 0, 0xF8A6, /* 0xA0 */ + 0, 0, 0, 0xE949, 0, 0, 0, 0xF3C0, /* 0xB0 */ + 0xF1C8, 0xF2C3, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xE63D, 0, 0, 0xF9CE, 0, 0, 0, 0xEF31, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xF8F4, 0xE5A7, 0, 0, 0, 0xF3F6, 0, 0xEE63, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE16E, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xF742, 0, 0, 0, 0xE97B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF9B6, 0, 0, 0, /* 0x00 */ + 0, 0xEDEA, 0, 0, 0xF3E0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE8CC, 0xE9CD, 0, 0, 0, 0xE558, 0, /* 0x10 */ + 0, 0xE7ED, 0, 0, 0, 0, 0xF5A5, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xEE9D, 0, 0, 0, 0, 0, 0xEE64, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xF9C8, /* 0x40 */ + 0, 0xE631, 0xF9BF, 0, 0xF963, 0, 0xF2A1, 0, /* 0x40 */ + 0xEEBC, 0, 0, 0, 0, 0, 0xE3EE, 0, /* 0x50 */ + 0, 0xEE65, 0, 0, 0xEFF2, 0, 0xEAB0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xE770, 0xF94A, 0xF9AF, 0xF35E, /* 0x60 */ + 0, 0xE8E1, 0, 0, 0xEDC9, 0, 0xF1B4, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEB53, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xECD8, 0, 0, 0, /* 0x80 */ + 0, 0xEFFB, 0xF038, 0, 0, 0, 0, 0xF9B7, /* 0x80 */ + 0, 0, 0xF8A7, 0, 0xEFC2, 0, 0, 0, /* 0x90 */ + 0, 0xF9F7, 0, 0, 0, 0, 0, 0xEC69, /* 0x90 */ + 0, 0, 0xE97C, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xEF32, 0, 0, 0, /* 0xA0 */ + 0, 0xEE92, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xF9F8, 0xF9F9, 0, 0, 0, 0xF64F, 0, /* 0xB0 */ + 0, 0xEEA7, 0, 0xEE67, 0, 0, 0, 0, /* 0xC0 */ + 0xE595, 0xE559, 0, 0, 0, 0, 0xE69C, 0, /* 0xC0 */ + 0xE6F2, 0, 0xEBC0, 0, 0xE8E2, 0xEE68, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEEBD, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF35F, 0xF4BE, 0xEC3C, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF5B7, 0xEB92, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xF9B8, 0xECE8, 0, 0xE537, 0xEF9E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF862, 0, 0, 0, 0, 0, 0xF791, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE663, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE5B4, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF360, 0, 0xF6F0, 0xF243, 0, 0, /* 0x20 */ + 0xF04A, 0, 0xF063, 0, 0, 0xF1C9, 0xE9AB, 0, /* 0x30 */ + 0, 0, 0xEDAC, 0xF9A1, 0, 0xEAD0, 0xF143, 0, /* 0x30 */ + 0xEAD1, 0, 0, 0, 0, 0, 0xF1ED, 0xF748, /* 0x40 */ + 0xF6FA, 0, 0, 0, 0xF73B, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF570, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE54A, 0xED43, 0, 0xEFDA, 0, 0xEA46, 0, 0xE7BF, /* 0x50 */ + 0, 0xE7C0, 0xE691, 0, 0, 0, 0, 0xE7CC, /* 0x60 */ + 0, 0xE83A, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEAE5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF6E5, 0, 0, 0, 0xE142, 0, 0, /* 0x70 */ + 0xEAF9, 0xE6E0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE54B, 0, 0, 0, 0, 0xF9FA, /* 0xA0 */ + 0, 0, 0, 0, 0xE143, 0, 0, 0xE8F3, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xEAD2, 0, 0xE25A, 0, 0xF26A, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xED74, 0, /* 0xC0 */ + 0xF8CF, 0, 0, 0, 0, 0, 0, 0xE2B7, /* 0xD0 */ + 0, 0xF253, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE27A, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xEC3D, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xE6E1, 0xF897, 0, 0, 0xE5C9, 0xF73C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEED9, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF4E9, 0, /* 0x10 */ + 0, 0, 0, 0xE77D, 0xECC4, 0xF393, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xEF75, 0, 0, /* 0x20 */ + 0, 0xEB9C, 0xF254, 0xE7DE, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF0A2, 0xF0A3, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF952, 0xF04B, /* 0x30 */ + 0, 0, 0, 0, 0xEF3B, 0xEA72, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xF1EF, 0, 0xEF33, 0, 0, 0, 0, 0xE2F1, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE54C, 0, 0xF97A, 0, 0, 0, 0, 0, /* 0x60 */ + 0xEEBE, 0, 0xF994, 0, 0, 0xE644, 0, 0, /* 0x70 */ + 0xEC3E, 0, 0xE4B7, 0xF85C, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF86C, 0, 0xF1B5, 0xEBE3, /* 0x80 */ + 0, 0xEF3C, 0, 0xEF6D, 0, 0, 0xF2E9, 0, /* 0x80 */ + 0, 0, 0, 0, 0xF54D, 0, 0xE2B8, 0xEFDB, /* 0x90 */ + 0xE3AC, 0, 0, 0, 0, 0, 0, 0xE857, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xF0C9, /* 0xA0 */ + 0, 0xEF5C, 0, 0, 0, 0xEA47, 0, 0, /* 0xA0 */ + 0, 0, 0xE64C, 0xE4E5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xF86D, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE866, 0, 0xE041, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE858, 0xEAA6, 0, 0xF7B3, 0xF462, 0, 0xE054, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE25B, 0, /* 0xD0 */ + 0, 0xE1F5, 0, 0, 0, 0xF9B0, 0xE5A8, 0, /* 0xD0 */ + 0xF3C1, 0, 0, 0xEC79, 0xE95A, 0xF144, 0xF850, 0, /* 0xE0 */ + 0, 0xF8A8, 0xE338, 0, 0, 0xE87C, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7EE, /* 0xF0 */ + 0, 0xEB9D, 0, 0, 0, 0xF2EA, 0xF86E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEB54, 0, 0xE2B9, 0, 0xE5CA, 0xE6E2, 0xEC3F, /* 0x00 */ + 0, 0xE6B8, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xEF5D, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xF66A, 0, 0, 0, 0, /* 0x10 */ + 0xF2A2, 0xEC6A, 0xF69E, 0, 0, 0xF8D0, 0xE3AD, 0, /* 0x20 */ + 0xE1E4, 0, 0xE3AE, 0xE97D, 0xEF5E, 0, 0xF39B, 0xE245, /* 0x20 */ + 0xEE9E, 0, 0, 0xE6FB, 0xE366, 0xE9F5, 0xF6F1, 0, /* 0x30 */ + 0xF69F, 0, 0xE8F7, 0, 0, 0, 0, 0xF8EA, /* 0x30 */ + 0xEFDC, 0xE7C1, 0, 0xF5F2, 0xEB55, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xF064, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF7C2, 0, 0xF04C, /* 0x50 */ + 0, 0xE455, 0xF8D1, 0xEEC0, 0xF0A5, 0, 0xEAFA, 0xECA2, /* 0x50 */ + 0xE6B9, 0, 0xEFC3, 0, 0xEF9F, 0xEF3F, 0, 0, /* 0x60 */ + 0xF463, 0xF8A9, 0xE735, 0, 0, 0, 0, 0xE5CB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE358, 0, /* 0x70 */ + 0, 0, 0xE3AF, 0xE6E3, 0, 0, 0, 0xEB56, /* 0x80 */ + 0, 0xE632, 0, 0xF1F0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE6F3, 0, 0, 0, 0xF964, 0, 0xE867, 0xE16F, /* 0x90 */ + 0, 0xF464, 0, 0xE3B0, 0, 0xE170, 0, 0xE8FD, /* 0xA0 */ + 0xF4BF, 0, 0xF361, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF94B, 0, 0xEC40, 0, 0, 0xEE35, 0, 0, /* 0xB0 */ + 0, 0xEC6B, 0, 0, 0, 0xEADE, 0, 0xEB57, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF491, 0, /* 0xC0 */ + 0, 0, 0xE171, 0, 0, 0, 0, 0xE67A, /* 0xC0 */ + 0, 0, 0, 0, 0xEEC2, 0, 0, 0, /* 0xD0 */ + 0xE246, 0, 0xF4C0, 0, 0xE1FE, 0, 0, 0, /* 0xD0 */ + 0xF8D2, 0, 0xF79A, 0xF6FB, 0, 0, 0xEF4F, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xEF47, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF1B6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE94A, 0, 0, 0xE144, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xF3F7, 0, 0, 0, 0xEF48, 0, 0, /* 0x10 */ + 0xE098, 0, 0xED34, 0xF566, 0, 0, 0, 0xEAE6, /* 0x10 */ + 0, 0, 0, 0xEAA7, 0, 0xEAE7, 0xEBC1, 0, /* 0x20 */ + 0xEFC4, 0, 0, 0xE95B, 0xEFC5, 0, 0, 0, /* 0x20 */ + 0xF2A3, 0xF0A6, 0xE0A3, 0xECE9, 0, 0, 0, 0xE3FB, /* 0x30 */ + 0xF2A4, 0, 0xF2EB, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xE344, /* 0x40 */ + 0, 0, 0, 0, 0xE1A3, 0, 0, 0xEF76, /* 0x40 */ + 0, 0xF2A5, 0, 0xE4CC, 0xE87D, 0, 0, 0, /* 0x50 */ + 0, 0xE6BA, 0, 0xF465, 0xF5E5, 0xE7EF, 0, 0, /* 0x50 */ + 0, 0, 0xF7B4, 0, 0, 0xE5D4, 0xF9CF, 0, /* 0x60 */ + 0, 0, 0xE8E3, 0, 0, 0, 0, 0xF3E1, /* 0x60 */ + 0xF146, 0, 0, 0, 0, 0xF8FE, 0xE4D7, 0, /* 0x70 */ + 0xE3B1, 0, 0xE0B1, 0, 0, 0, 0, 0xE3B2, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE0B2, 0xF3C2, /* 0x80 */ + 0, 0, 0xF571, 0xF7B5, 0, 0, 0xEBC3, 0xEBC2, /* 0x80 */ + 0, 0xF0F7, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEAA8, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE0CA, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xEE49, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xF76E, 0xF7AA, 0xE099, 0, 0xF1B7, 0, 0, /* 0xB0 */ + 0xE4B8, 0xF466, 0, 0, 0xE569, 0xF255, 0xF492, 0, /* 0xB0 */ + 0, 0, 0xE042, 0, 0, 0xE94B, 0, 0xF3F8, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xF147, 0, 0, /* 0xC0 */ + 0, 0, 0xEDCA, 0, 0xF650, 0xF9DD, 0, 0, /* 0xD0 */ + 0xE573, 0xE172, 0, 0xF6D4, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE6E5, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE4C3, 0, 0xE736, 0, 0xF651, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xE9F6, 0, 0xE1C0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDDC, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xEDCB, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xEBC4, 0, 0, 0, 0, 0, 0xEF40, /* 0x10 */ + 0xF540, 0xF4EA, 0xE87E, 0, 0xE6BB, 0, 0xEC41, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE6AA, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xE69D, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xED6F, 0, 0xE066, 0, /* 0x40 */ + 0, 0, 0xF0A8, 0, 0, 0, 0xE8FE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF652, 0, 0, 0xF2BB, 0, 0, 0, /* 0x60 */ + 0, 0xE59F, 0, 0, 0xEB58, 0, 0, 0, /* 0x60 */ + 0xEF49, 0, 0xF2A6, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE1A4, 0, 0, 0xE596, 0xE8A1, 0xE8DC, 0xE8DD, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF26C, 0, 0xE0CB, 0xF965, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xE27B, 0, /* 0x80 */ + 0xE1C1, 0, 0, 0xF8D3, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xF7AB, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF5D4, 0, 0, 0, 0, 0xE7A9, /* 0xB0 */ + 0, 0, 0xEFDD, 0xE8CD, 0, 0, 0xE9CE, 0, /* 0xC0 */ + 0xEEC3, 0, 0xF15C, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xF7EC, 0, 0, 0, 0xE0CC, 0, /* 0xD0 */ + 0, 0, 0, 0xEB9E, 0xE538, 0, 0xF1D3, 0xE791, /* 0xD0 */ + 0, 0xF467, 0, 0xE09A, 0xE891, 0, 0, 0xE664, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xE7CD, 0, /* 0xE0 */ + 0, 0, 0xE77E, 0, 0xF451, 0, 0, 0, /* 0xF0 */ + 0xEAD3, 0, 0, 0, 0xE892, 0, 0xEC7A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEB9F, 0, 0, 0xE79A, 0, 0, 0, /* 0x00 */ + 0xF6AF, 0xE846, 0, 0xE067, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF468, 0, /* 0x10 */ + 0xE79B, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF86F, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2EF, /* 0x30 */ + 0xE7C2, 0, 0xF362, 0, 0xED61, 0, 0, 0, /* 0x30 */ + 0xF4B7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF870, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xF2EC, 0, 0, 0, 0, /* 0x50 */ + 0, 0xEC42, 0, 0xE54D, 0, 0, 0xE7CE, 0, /* 0x60 */ + 0, 0, 0, 0xF572, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE539, 0, 0, 0, 0, 0xE1C2, 0xEEDA, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF469, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE7AA, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xE74E, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE93D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xEC7B, 0xE69E, 0, 0, /* 0xA0 */ + 0xE09B, 0, 0, 0xE56A, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF567, 0xE131, 0, 0, 0xE2BA, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF5B8, /* 0xD0 */ + 0, 0, 0, 0xE7C3, 0xE378, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xECC5, 0xF0F8, 0, 0xF441, 0, 0, /* 0xE0 */ + 0, 0xE2BB, 0, 0, 0, 0xE4AD, 0xEF71, 0xE27C, /* 0xE0 */ + 0, 0, 0, 0xEB44 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEA73, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE9F7, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF442, 0xF4F6, 0xF66B, /* 0x20 */ + 0, 0, 0, 0, 0xE6FE, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF76F, 0, 0xF6F2, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE339, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xEE6A, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xF5A6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE6BC, 0xE173, 0, 0, 0xEE6B, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xE9DD, 0, 0, 0, /* 0x70 */ + 0, 0xE3B3, 0, 0, 0, 0, 0, 0xF2ED, /* 0x80 */ + 0, 0, 0, 0, 0xE66E, 0xED96, 0xEBEF, 0, /* 0x80 */ + 0, 0xE9F8, 0, 0, 0, 0, 0, 0xEF5F, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE075, 0, 0, 0, 0xE931, /* 0xA0 */ + 0, 0xEB45, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF93C, 0xF93D, 0xE737, 0, 0, 0, /* 0xB0 */ + 0, 0xF1B8, 0, 0, 0, 0xE8B6, 0, 0, /* 0xC0 */ + 0, 0, 0xE692, 0xF4AF, 0, 0, 0xE1A5, 0, /* 0xC0 */ + 0xE893, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE738, 0, 0, 0, 0xE174, 0, 0, 0xE3B4, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE068, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xE894 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5A7, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF5A8, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xEE36, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE5EC, 0xE5F8, 0xE895, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xECC6, 0, 0, 0, 0xEA74, 0, /* 0x30 */ + 0xEA75, 0xE3B5, 0, 0, 0, 0, 0, 0xE3B6, /* 0x40 */ + 0xE3B7, 0xF443, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEFDE, 0, 0, 0, 0, 0, 0xF363, 0xF444, /* 0x50 */ + 0, 0, 0xF364, 0xE0E4, 0xF8D4, 0xF5E6, 0xECEA, 0, /* 0x50 */ + 0xEA76, 0, 0, 0, 0, 0xEAD4, 0, 0, /* 0x60 */ + 0xF79B, 0, 0, 0, 0, 0xF33E, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE3B8, 0, 0, 0, 0, 0xE66F, /* 0x70 */ + 0, 0xE367, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xF931, 0xF2EE, 0xE968, /* 0x80 */ + 0, 0xEFDF, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xEDDD, 0xF9FB, /* 0xA0 */ + 0, 0, 0xEB59, 0, 0, 0, 0xE659, 0, /* 0xA0 */ + 0, 0xE53A, 0, 0xEDCC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEFE0, 0, 0, 0, 0xE368, 0xF932, 0xE54E, /* 0xB0 */ + 0xEC43, 0xEA77, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE94C, 0xE446, 0xF5D5, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE231, 0xF5A9, 0, 0, 0xE9F9, 0, 0, /* 0xD0 */ + 0xE9FA, 0, 0, 0, 0, 0, 0, 0xF365, /* 0xD0 */ + 0, 0, 0, 0, 0xF66F, 0, 0xF46A, 0xED7B, /* 0xE0 */ + 0, 0xF493, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xF149 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF9FC, 0, 0, 0, 0, 0xEBAA, 0, 0, /* 0x00 */ + 0xE069, 0, 0, 0xF2EF, 0, 0xF5AA, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xF19B, 0, 0, 0xF73D, /* 0x10 */ + 0, 0xF452, 0xF653, 0, 0xE6D2, 0, 0, 0xF7A2, /* 0x10 */ + 0xF366, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF39C, 0, /* 0x20 */ + 0, 0xF670, 0, 0, 0, 0, 0xEFF3, 0xF453, /* 0x30 */ + 0, 0, 0, 0xE53B, 0xE043, 0xE1A6, 0, 0xE1C3, /* 0x30 */ + 0xE1DA, 0, 0, 0, 0, 0, 0xE7CF, 0, /* 0x40 */ + 0, 0xF654, 0, 0, 0, 0xF26D, 0xEEC4, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xEC44, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xEAE2, 0xEEDB, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xEF41, 0, 0xF93E, 0, 0, 0, 0, /* 0x60 */ + 0xEDCD, 0, 0, 0, 0xF87B, 0, 0xE2BC, 0, /* 0x70 */ + 0, 0xE2E2, 0xE1F6, 0, 0, 0xF2F0, 0, 0xF54E, /* 0x70 */ + 0, 0xE55D, 0, 0, 0xF4B8, 0, 0, 0, /* 0x80 */ + 0xEFA1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xF494, 0xF4EB, 0, 0xF367, 0, 0, /* 0x90 */ + 0xE2D7, 0, 0, 0, 0, 0, 0, 0xE2DF, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xEF50, 0xEF51, 0, 0, 0, 0xE2E3, 0xEFA2, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE33A, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF4C1, 0xE33B, 0, 0xE574, /* 0xC0 */ + 0, 0, 0xF2BC, 0xE731, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7DF, /* 0xD0 */ + 0, 0xF4D7, 0, 0, 0, 0xE94D, 0, 0xE175, /* 0xD0 */ + 0xF1F1, 0, 0, 0xF3E2, 0, 0xE56B, 0, 0, /* 0xE0 */ + 0, 0, 0xEC45, 0, 0, 0xE076, 0, 0xE4AE, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xE176, 0, /* 0xF0 */ + 0, 0xF3D3, 0xF5E7, 0, 0, 0, 0, 0xE06A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8EE, /* 0x00 */ + 0, 0xEBC5, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xEAE9, 0, 0xF26E, 0, 0, 0xF6C2, 0, /* 0x10 */ + 0xE732, 0, 0, 0, 0, 0, 0xE9AC, 0, /* 0x20 */ + 0, 0, 0, 0, 0xF33F, 0xE64D, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xEBAB, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF7B6, 0, /* 0x40 */ + 0, 0xE597, 0, 0xE359, 0xF2A7, 0xEC7C, 0, 0xE8EA, /* 0x40 */ + 0xE25C, 0xF5E8, 0xF6D5, 0, 0xE4CD, 0, 0xF4FE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE345, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xEBA0, 0, 0xEAFB, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xEE6D, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEF34, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE0CD, /* 0x80 */ + 0, 0, 0, 0xF2A8, 0, 0, 0, 0xF244, /* 0x80 */ + 0, 0, 0, 0, 0xE868, 0xE3B9, 0, 0xEAA9, /* 0x90 */ + 0, 0, 0xF4B0, 0, 0, 0xE154, 0, 0, /* 0x90 */ + 0, 0xE247, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xF2A9, 0, 0, /* 0xA0 */ + 0, 0xEAD5, 0, 0, 0xF1D7, 0, 0, 0, /* 0xB0 */ + 0xF256, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF2BD, 0xF966, 0, 0, 0xE8F4, 0, 0xF2AA, 0xF749, /* 0xC0 */ + 0, 0xF5E9, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xECD9, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xEBC6, 0, 0, 0, 0xE54F, 0, 0, 0, /* 0xE0 */ + 0, 0xEA78 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF37A, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF4C2, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE4AF, 0, /* 0x10 */ + 0, 0xE06B, 0, 0, 0, 0, 0, 0xF967, /* 0x20 */ + 0, 0, 0xF1D8, 0xEBC7, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF568, 0xE643, 0xE9AD, /* 0x30 */ + 0, 0, 0, 0xE5BE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF3C3, 0xF26F, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE67B, 0, 0, 0, 0xF569, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE6E6, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE847, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0xE9FB, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE9CF, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE733, 0, 0, 0xE869, 0, 0xF368, /* 0x90 */ + 0xF2C4, 0, 0, 0, 0, 0, 0, 0xEBD8, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF3D4, 0, 0xF1F2, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xE5DB, 0, /* 0xA0 */ + 0, 0xE5DC, 0xF4C4, 0xE0D7, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEC46, 0, 0, 0, 0, 0xF2F1, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xF8D5, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE4D8, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE9D0, 0xF369, /* 0xD0 */ + 0xE0B3, 0, 0, 0, 0, 0, 0, 0xE5DD, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xE1A7, 0, 0, 0xE33C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE3BA, 0, 0xF3C4, 0, 0xEDB3, 0xF8F5, 0xEFE1, 0xF9E0, /* 0x00 */ + 0xF94C, 0, 0xE832, 0xE833, 0, 0xE431, 0, 0, /* 0x00 */ + 0xE491, 0, 0, 0, 0xEC7D, 0, 0, 0xEA79, /* 0x10 */ + 0xE26C, 0xF445, 0xE374, 0xE9D1, 0, 0, 0, 0, /* 0x10 */ + 0xEBC8, 0xE8B7, 0xEAE3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xF1B9, 0xF3C5, 0, 0xF4CF, 0xE6AB, /* 0x20 */ + 0xEBAC, 0, 0, 0xECEB, 0, 0xF257, 0, 0, /* 0x30 */ + 0, 0xEBC9, 0xE09C, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xF39D, 0xF871, 0xF36A, 0xE177, 0xE896, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xE14F, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE27D, 0, /* 0x50 */ + 0, 0xE5A9, 0xF872, 0, 0, 0, 0xE375, 0, /* 0x60 */ + 0xF0D6, 0, 0xF16F, 0, 0, 0, 0xEAFC, 0, /* 0x60 */ + 0, 0xF6D6, 0xEA7A, 0xE0B4, 0, 0, 0xF2BE, 0, /* 0x70 */ + 0, 0xE145, 0, 0, 0, 0, 0, 0xE2BD, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF2F2, 0xEC47, /* 0x80 */ + 0, 0, 0, 0xE178, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF39E, 0, 0, 0, /* 0x90 */ + 0xE670, 0, 0xF3C6, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xEC48, 0xF0AB, 0, 0, /* 0xA0 */ + 0, 0xE0B5, 0xE761, 0, 0xF55E, 0xF4F7, 0, 0, /* 0xB0 */ + 0xE6C6, 0, 0xE3BB, 0xF6AA, 0, 0xF1CA, 0xE6D3, 0xE79C, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF655, /* 0xC0 */ + 0, 0, 0xE3CC, 0xE9FC, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xEAFD, 0, /* 0xD0 */ + 0xF7E5, 0, 0xEB5A, 0, 0, 0xF49F, 0xE4B0, 0, /* 0xD0 */ + 0xF595, 0xE859, 0, 0xEE6E, 0, 0, 0, 0, /* 0xE0 */ + 0xF74A, 0xEF60, 0, 0, 0xE79D, 0, 0, 0xF065, /* 0xE0 */ + 0, 0, 0, 0, 0xE633, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xF656 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF46B, 0xED9E, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xEF42, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE86A, 0, 0xF46C, 0xF8D6, 0xEFB2, /* 0x10 */ + 0, 0xF23D, 0, 0xF873, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE97E, 0, 0, 0xF5EA, 0xEE70, /* 0x20 */ + 0, 0xF39F, 0, 0, 0, 0, 0, 0xE6AC, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF5C5, 0xF270, 0, /* 0x30 */ + 0, 0xE8E5, 0, 0xE9DE, 0, 0, 0xE7F0, 0xEFA3, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF3F9, 0, 0xF454, 0xEB5B, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xEFA4, 0, /* 0x50 */ + 0, 0xEC49, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xECB1, 0xF97B, 0xE1A8, 0, 0xE146, 0, 0, /* 0x60 */ + 0xF36B, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xEE4A, 0, 0, 0xE1A9, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF4C3, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xEBD9, 0, 0, 0xF2AB, /* 0x80 */ + 0, 0, 0, 0xEEC5, 0, 0, 0xEB79, 0, /* 0x90 */ + 0xF4C5, 0, 0, 0xE550, 0xE5BF /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9AE, 0, /* 0x30 */ + 0xF7FC, 0, 0xE150, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xEDA2, 0, 0, 0, /* 0x40 */ + 0xE248, 0, 0, 0, 0xE762, 0xF7D6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF3AA, 0xE261, 0, 0, 0xF657, 0, /* 0x60 */ + 0xE8EB, 0, 0xEAFE, 0, 0, 0xE771, 0, 0xF6F3, /* 0x70 */ + 0, 0xE6E7, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE5A0, 0, 0, /* 0x80 */ + 0xE3BC, 0, 0xEDCF, 0, 0xE0B6, 0, 0xE848, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE1C4, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE64E, 0, 0, 0, 0xEC4A, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE2D8, 0, 0, 0, /* 0xA0 */ + 0xEB5C, 0xF0F9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF9FD, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE6E8, 0xE0D8, 0, 0, 0, 0xEFE2, 0, 0, /* 0xB0 */ + 0, 0xEF4A, 0, 0, 0, 0xECC7, 0, 0, /* 0xC0 */ + 0, 0, 0xF15D, 0, 0xF15E, 0, 0xE64F, 0, /* 0xC0 */ + 0, 0, 0xECA7, 0, 0xEAD6, 0xF9E8, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF271, /* 0xD0 */ + 0xF638, 0xE9FD, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xF74B, 0, 0xEF61, 0, 0, 0, 0, /* 0xE0 */ + 0xF7D7, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE27E, 0, 0, 0xF15F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEFA5, 0xE665, 0, 0xE1C5, 0, 0xF1BA, 0xE3BD, 0, /* 0x00 */ + 0, 0xE2BE, 0, 0, 0xF14B, 0, 0, 0, /* 0x00 */ + 0xE441, 0, 0, 0, 0, 0xE179, 0, 0xE7C4, /* 0x10 */ + 0xEFFC, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE3BE, 0, 0, /* 0x20 */ + 0, 0, 0, 0xF14C, 0, 0, 0xEDAD, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF6B0, 0, 0xE17A, /* 0x30 */ + 0, 0, 0, 0xE4C4, 0, 0, 0xE650, 0, /* 0x40 */ + 0, 0, 0xE69F, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xEBA1, 0, /* 0x50 */ + 0xEA4D, 0, 0xF639, 0, 0, 0, 0xE834, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xE634, /* 0x60 */ + 0xF5C6, 0, 0xEBA2, 0xEFC6, 0, 0, 0, 0xF455, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF579, 0xE67C, 0xF0D3, /* 0x70 */ + 0, 0, 0, 0, 0xF14D, 0xEC6C, 0xEA7B, 0xF36C, /* 0x80 */ + 0, 0xF0BF, 0, 0xE6CE, 0xE3BF, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF5AB, 0, /* 0x90 */ + 0, 0, 0, 0xF7FD, 0, 0xE06C, 0, 0, /* 0x90 */ + 0, 0xE1C6, 0xF446, 0, 0, 0xE9FE, 0, 0, /* 0xA0 */ + 0, 0xE147, 0xE8B8, 0, 0, 0, 0, 0xE379, /* 0xA0 */ + 0, 0xE26D, 0xF0C0, 0, 0xF9A2, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF75B, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF066, 0xF3B0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE8CE, 0, 0xF6C3, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE8CF, 0xE0A4, 0, 0, 0xF770, 0, /* 0xD0 */ + 0, 0xF8D7, 0, 0, 0xF0CA, 0xEB31, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE25D, 0, 0, 0xE56C, 0, 0, 0, /* 0xF0 */ + 0xF9D8, 0, 0, 0, 0, 0xE498 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF447, 0, 0, 0xF898, 0xF63A, 0xF899, /* 0x00 */ + 0xE776, 0, 0xF541, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xEF62, 0, 0xE055, 0xE17B, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xEC7E, 0, 0, 0, 0, /* 0x20 */ + 0, 0xEC4B, 0, 0xF6AD, 0, 0, 0, 0xF771, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF4EC, 0, 0, 0, 0, 0xEA31, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xED9F, 0, 0, 0xECEC, 0, /* 0x40 */ + 0xE9AF, 0xE9B0, 0, 0, 0xE0B7, 0xEF63, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xEBA3, 0xE470, 0, /* 0x60 */ + 0, 0, 0, 0xF3A0, 0, 0, 0, 0, /* 0x60 */ + 0xEFA6, 0xE0F2, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xF1F3, 0xE969, 0xEB5D, 0, 0, 0, 0, 0xF6DA, /* 0x70 */ + 0xE8B9, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE13E, 0, 0xE86B, 0, 0, 0, 0, 0xE1C7, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE9B1, 0, 0xE73F, 0xECA3, 0, 0, /* 0x90 */ + 0xE291, 0, 0, 0xF495, 0, 0, 0, 0, /* 0xA0 */ + 0xF743, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xEB5E, 0, 0xF5FD, 0, 0, /* 0xB0 */ + 0, 0, 0xF0EC, 0, 0, 0xE4C5, 0xF97C, 0xE46B, /* 0xB0 */ + 0xE57B, 0, 0xEA32, 0, 0, 0, 0xEDE6, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xF340, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xE5C4, 0, 0, 0, 0, 0, 0, 0xF1F4, /* 0xD0 */ + 0, 0, 0, 0xECED, 0, 0xEF52, 0, 0xF1F5, /* 0xE0 */ + 0xE6FC, 0, 0xF1BB, 0, 0, 0xF63B, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF448, 0xF658, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xE4E6, 0xF46D, 0xE2BF, 0, 0xF0AC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2C0, 0, 0xEE38, /* 0x00 */ + 0xF9E9, 0, 0xE2C1, 0, 0xEB6F, 0xEA7C, 0, 0, /* 0x00 */ + 0, 0, 0xEB32, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xF54F, 0xEC91, 0, 0xE7F1, 0xF3C7, /* 0x10 */ + 0, 0xE0B8, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF7FE, 0xE8BA, 0xE897, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF67C, 0xE86C, 0xF874, /* 0x30 */ + 0, 0xEB5F, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE9B2, 0, 0, 0, 0, 0xEE39, 0, 0xF2F3, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF4ED, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF0FA, 0, 0xF7E6, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xE06D, 0xE5DE, /* 0x60 */ + 0, 0xE06E, 0xEAE4, 0, 0, 0, 0xEE9F, 0, /* 0x70 */ + 0xF5AC, 0, 0, 0, 0, 0, 0xED97, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xEFE3, 0, 0xF1CB, 0xE2E4, 0, /* 0x80 */ + 0, 0, 0xE763, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE9B3, 0xE57C, 0, 0, 0xF449, 0, 0xEAB7, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE0CE, 0xF8D8, 0, /* 0xA0 */ + 0, 0xE369, 0, 0, 0xE9D2, 0xF6F4, 0xEEDC, 0xED35, /* 0xA0 */ + 0, 0xF933, 0, 0xE8BB, 0, 0, 0, 0xF44A, /* 0xB0 */ + 0xEFFD, 0xE35A, 0, 0xF5D6, 0xE7C5, 0xED44, 0, 0xF1A7, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF04D, 0xEEA0, 0, 0xF6C4, 0xF5AD, 0, 0xE7E0, /* 0xD0 */ + 0, 0, 0, 0xE044, 0, 0, 0xF772, 0xE2C2, /* 0xD0 */ + 0, 0xF14E, 0, 0, 0, 0xEDB4, 0xE1C8, 0xF258, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xEEC8, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xE1C9, 0xF7B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF3E8, 0xE7F2, 0xE8F5, 0xE045, 0xE7C6, 0, 0, /* 0x00 */ + 0, 0xE759, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7AB, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF1BC, 0, 0, 0xE764, 0, 0, 0, 0xE96A, /* 0x20 */ + 0, 0xEC4C, 0, 0, 0xF97D, 0xF170, 0xE4A0, 0, /* 0x30 */ + 0xEFC7, 0xEE3A, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xEC92, 0, 0, 0, 0, 0, 0, 0xF84B, /* 0x40 */ + 0, 0xF5AE, 0xF8AA, 0, 0, 0, 0, 0xF19D, /* 0x40 */ + 0, 0xF14F, 0xF968, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE575, 0, 0, 0, 0xF7C3, /* 0x70 */ + 0, 0, 0, 0xF272, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE6E9, 0xF1F6, 0, 0, 0, 0xEA7D, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xE17C, 0, /* 0x90 */ + 0xECEE, 0, 0, 0, 0, 0, 0xEF64, 0, /* 0x90 */ + 0, 0, 0xF89A, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE9B4, 0xED45, 0xE740, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE765, 0, 0, /* 0xB0 */ + 0, 0xF57A, 0, 0, 0, 0xE249, 0, 0, /* 0xC0 */ + 0, 0xE671, 0xE2D2, 0, 0xE346, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE232, 0, 0, 0xF4EE, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xF4F8, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE95C, 0, 0xE35B, 0, 0, 0, 0xF934, /* 0xE0 */ + 0xE1CA, 0xE6D4, 0xEA33, 0, 0xED70, 0, 0, 0, /* 0xF0 */ + 0, 0xF259, 0, 0, 0, 0xEC6D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5FE, 0xE53C, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE5D1, 0, 0xE792, 0xF753, 0xF067, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF5D7, 0, 0, 0xE74F, 0, 0, 0, /* 0x20 */ + 0, 0xF9C0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xF0AD, 0, 0, 0, 0, 0xE5AA, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xEEA8, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xF25A, /* 0x50 */ + 0, 0, 0, 0xE077, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF773, 0, 0xE56D, 0, 0, 0xF068, 0, /* 0x60 */ + 0, 0, 0, 0xF8D9, 0xF1F7, 0, 0, 0xEDB5, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE33D, 0, 0, /* 0x70 */ + 0, 0, 0xF3F1, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEC4D, 0, 0, 0, 0xECC8, 0, 0, 0, /* 0x90 */ + 0, 0xE7D5, 0, 0, 0xEAAA, 0, 0, 0, /* 0x90 */ + 0, 0xE8BC, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF774, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF3FA, 0, 0, 0xEDB6, 0xF4EF, 0, 0, 0xF8DA, /* 0xB0 */ + 0xEBE0, 0, 0xE7AC, 0, 0xF5EB, 0, 0xEB46, 0, /* 0xC0 */ + 0, 0xEFC8, 0, 0xE0CF, 0, 0xECC9, 0, 0, /* 0xC0 */ + 0, 0xEA7E, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xEC4E, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE991, 0, 0xE635, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xEC93, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xE6A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE7A1, 0, 0xE750, 0xE96B, 0, 0, 0xF1BD, /* 0x10 */ + 0xEAB8, 0, 0xF035, 0, 0, 0, 0xE6AD, 0, /* 0x10 */ + 0, 0xF4F9, 0, 0xF1F8, 0, 0xF5C7, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xEBCA, 0xF0E3, 0, 0xF46E, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF75C, 0, 0xF069, /* 0x30 */ + 0, 0xE4C6, 0, 0xE8E6, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF5AF, 0, 0, 0, 0, 0xE292, 0, /* 0x40 */ + 0, 0, 0, 0xEFFE, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF8B6, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xEC94, 0, 0, 0, 0, /* 0x60 */ + 0xE2F2, 0xF6B9, 0xE7F3, 0, 0, 0xEBCB, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xE86D, 0, 0, 0xE849, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xF0FB, /* 0x80 */ + 0, 0xE0B9, 0, 0, 0xF1F9, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xEB70, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xF550, 0, /* 0xA0 */ + 0xF9BC, 0xEAB1, 0xECEF, 0, 0, 0, 0, 0xEB33, /* 0xA0 */ + 0xF9B9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xF341, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE1CB, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF1BE, 0, 0, 0, 0xE5C0, 0xECF0, 0xF1FA, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xEFE4, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE5ED, 0xEEDD, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE598, 0xEDB7, 0, 0, /* 0xE0 */ + 0, 0xE8E7, 0xEC4F, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF25B, /* 0xF0 */ + 0, 0, 0xE6F4, 0xF36D, 0, 0, 0, 0xE23B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEEDE, 0, 0, 0, 0xE666, 0xEBCC, /* 0x00 */ + 0, 0, 0xEF43, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xEDEE, 0xE932, /* 0x10 */ + 0, 0, 0xEB60, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE5B5, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xE5A1, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xF8DB, 0, /* 0x40 */ + 0xF7CB, 0, 0, 0, 0xE0F3, 0xF535, 0, 0, /* 0x50 */ + 0, 0, 0, 0xF858, 0xE667, 0, 0xEFE5, 0xF8DC, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xF9D0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF8F6, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE835, 0, 0xE8BD, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF172, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE1F7, 0xF36E, 0, 0, 0, /* 0xA0 */ + 0, 0xF659, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEA91, /* 0xC0 */ + 0, 0, 0, 0xE4B1, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF97E, 0, 0, 0, /* 0xD0 */ + 0, 0xEF53, 0, 0xF3C8, 0, 0, 0, 0xE293, /* 0xD0 */ + 0, 0, 0, 0, 0xF7ED, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF496, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xED46 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5B9, 0, 0xE992, 0xECF1, 0, 0, 0, 0, /* 0x00 */ + 0xEF35, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF44B, 0, 0xEA34, 0, 0xE85C, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE079, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xECDA, 0, 0xF969, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xF06A, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xF7C4, 0, /* 0x60 */ + 0xECA4, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xF8DD, 0, 0xF2CA, 0, /* 0x70 */ + 0xEF54, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE5CC, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xF0D7, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7AD, /* 0x90 */ + 0, 0, 0xF8AB, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE4D9, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE5A2, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF66E, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xE898, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xEB61, 0, 0, 0xEFA8, /* 0xE0 */ + 0, 0, 0xF5F9, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xF83F, 0, 0xF0FC, 0, 0, 0xEB7A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xECB2, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE5C5, /* 0x10 */ + 0, 0, 0xF3E3, 0xE5EE, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE1CC, 0, 0, 0, 0, 0xF1D9, 0, /* 0x30 */ + 0, 0, 0, 0xE751, 0, 0, 0, 0, /* 0x30 */ + 0xF87C, 0, 0, 0, 0, 0, 0xF3EB, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF84C, 0xEE72, 0, 0, /* 0x40 */ + 0, 0, 0xF875, 0xEC9C, 0, 0, 0, 0xE046, /* 0x50 */ + 0, 0xED47, 0, 0xF06B, 0, 0xF5FA, 0, 0, /* 0x50 */ + 0, 0xF8AC, 0xE2C3, 0xF0FD, 0, 0, 0, 0, /* 0x60 */ + 0xF79C, 0, 0, 0xEAB9, 0, 0, 0, 0, /* 0x60 */ + 0xEBF1, 0, 0xE434, 0, 0, 0, 0, 0xF5FB, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE36A, 0xE36B, /* 0x70 */ + 0, 0xF04E, 0xE7B1, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE047, 0, 0, 0xE4E7, 0, 0xF775, 0, 0, /* 0x80 */ + 0, 0, 0xE4B2, 0, 0, 0, 0xEC50, 0xF46F, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xE1E5, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF7AC, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE1CD, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xF23E, 0xE63E, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6EA, /* 0xC0 */ + 0, 0, 0, 0, 0xEEE0, 0xF0AE, 0, 0, /* 0xD0 */ + 0, 0xE2D9, 0, 0, 0xE95D, 0xF1FB, 0, 0xEA92, /* 0xD0 */ + 0, 0xE6EB, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xEA35, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xEAD7, 0xE8D0, 0xE8D1, 0, 0, /* 0xF0 */ + 0xE5A3, 0, 0, 0, 0, 0xF342 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE96C, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE078, 0, 0xF776, 0xE95E, 0, 0, 0, 0, /* 0x10 */ + 0xF06C, 0xE8D2, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xEFB3, 0, 0, /* 0x20 */ + 0, 0, 0xF6DB, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xECA8, 0, /* 0x30 */ + 0xE6AE, 0, 0, 0xEB71, 0, 0, 0, 0, /* 0x30 */ + 0, 0xE0BA, 0, 0, 0xEDD1, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xE36C, /* 0x50 */ + 0, 0, 0, 0, 0xE5C1, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE75A, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xECA9, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xEB34, /* 0x70 */ + 0, 0xEFA9, 0, 0xE4C7, 0, 0, 0xE96D, 0xF73E, /* 0x80 */ + 0, 0, 0, 0xE148, 0, 0, 0, 0xE33E, /* 0x80 */ + 0, 0, 0, 0xE794, 0, 0, 0xECCA, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE13F, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE53D, 0xF661, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE35C, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE056, 0, 0, 0xE5C2, 0, 0, /* 0xB0 */ + 0xE24A, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE057, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF840, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xEAD8, 0, 0, 0, /* 0xF0 */ + 0xF5BA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDEB, 0, 0xF2F4, 0xE9B5, 0, 0, 0, 0, /* 0x00 */ + 0xE1AA, 0, 0xECF2, 0, 0xF8F7, 0, 0xF6D0, 0, /* 0x00 */ + 0, 0, 0, 0xF9BA, 0, 0, 0xF9E1, 0xF6A0, /* 0x10 */ + 0xE3C0, 0, 0, 0xEF55, 0, 0xED48, 0, 0xEBE8, /* 0x10 */ + 0, 0, 0, 0xE151, 0, 0xE47D, 0, 0, /* 0x20 */ + 0, 0, 0xE8BE, 0, 0, 0xEB72, 0, 0, /* 0x20 */ + 0, 0xF859, 0, 0, 0xEBCD, 0, 0xE048, 0, /* 0x30 */ + 0, 0, 0xF470, 0xF3C9, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEA93, 0, 0, 0, 0xF36F, 0xF754, 0, 0, /* 0x50 */ + 0, 0, 0, 0xF25C, 0, 0, 0xEA94, 0, /* 0x50 */ + 0xEEC9, 0, 0xEC95, 0xEEE1, 0, 0, 0xECCB, 0, /* 0x60 */ + 0, 0xECCC, 0, 0, 0, 0xE2F8, 0xF2AC, 0, /* 0x60 */ + 0xF9FE, 0xF935, 0xF841, 0xEAD9, 0, 0xEB62, 0, 0, /* 0x70 */ + 0, 0xF56A, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF3CA, 0, 0xE233, /* 0x80 */ + 0, 0, 0, 0, 0xF44C, 0xF173, 0, 0, /* 0x80 */ + 0, 0, 0, 0xEB35, 0, 0xF6AB, 0, 0, /* 0x90 */ + 0xF0AF, 0, 0, 0, 0, 0, 0xEDDE, 0, /* 0x90 */ + 0xEBA4, 0xE1AB, 0, 0xE7F4, 0xEF36, 0xE1CE, 0xEBE9, 0, /* 0xA0 */ + 0xF991, 0, 0xEB73, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xEC51, 0, 0xE234, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEA36, 0, 0, 0xF0FE, 0, 0xF0DD, 0xF370, /* 0xB0 */ + 0, 0, 0xF56B, 0, 0xEC96, 0, 0, 0xE4C8, /* 0xC0 */ + 0, 0, 0, 0xF57B, 0, 0xF245, 0, 0xF5D8, /* 0xC0 */ + 0, 0, 0xE5DF, 0, 0, 0, 0xE675, 0, /* 0xD0 */ + 0, 0, 0, 0xF0B0, 0xF573, 0, 0, 0, /* 0xD0 */ + 0, 0xECCD, 0, 0, 0, 0, 0xF596, 0xF842, /* 0xE0 */ + 0, 0, 0xF2F5, 0xE06F, 0, 0xF0B1, 0xF1BF, 0, /* 0xE0 */ + 0, 0xF9C9, 0, 0, 0, 0, 0xED36, 0xF7A4, /* 0xF0 */ + 0xF343, 0, 0xEDEC, 0, 0, 0, 0xE3E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE7C7, 0xED67, 0xF06D, 0, 0xE599, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE84A, 0, /* 0x00 */ + 0xE85D, 0, 0, 0, 0xF7CC, 0, 0xEBDA, 0xE8BF, /* 0x10 */ + 0, 0xE155, 0xF160, 0xE0BB, 0, 0xEA95, 0, 0, /* 0x10 */ + 0xEFAA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE7C8, 0, 0, 0xF273, 0xE6BD, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE2C4, 0, 0, 0, 0, /* 0x30 */ + 0, 0xE35D, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF936, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF3FB, 0, 0, 0, 0, 0xF9D2, 0xE3C1, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xECDB, 0, 0xE4C9, 0, 0xE95F, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE17D, 0, /* 0x60 */ + 0, 0, 0, 0, 0xEA37, 0, 0, 0xEE4B, /* 0x60 */ + 0xF131, 0, 0, 0, 0xE149, 0, 0, 0xF8DE, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEEE2, 0, 0, /* 0x70 */ + 0xE551, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE938, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEC52, 0, 0xF4D8, 0xEDD3, 0, 0, 0xF4D9, 0, /* 0x90 */ + 0, 0, 0xF4C6 /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1DB, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1AC, /* 0x30 */ + 0, 0xF953, 0, 0, 0, 0, 0xE577, 0, /* 0x40 */ + 0xE3C2, 0, 0xF7A5, 0, 0xEF65, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xECCE, 0, 0, /* 0x50 */ + 0, 0, 0xE55A, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xEADA, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF8DF, 0xEEE3, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF79D, 0xECCF, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF5B0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE777, 0, 0xE7C9, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF73F, 0xF2F6, 0, /* 0x90 */ + 0xE9B6, 0xF23F, 0xE1F8, 0, 0, 0, 0, 0xEA48, /* 0xA0 */ + 0xF937, 0xF6FC, 0xF6B1, 0xE24B, 0xF531, 0, 0, 0xF25D, /* 0xA0 */ + 0xEBAE, 0, 0, 0xF153, 0xE2FE, 0, 0xF74F, 0xE772, /* 0xB0 */ + 0xE4E8, 0, 0, 0xEA38, 0xF574, 0xF152, 0, 0xE7F5, /* 0xB0 */ + 0xF7C5, 0xE9D3, 0xE693, 0xF19E, 0xF992, 0, 0, 0xF1C0, /* 0xC0 */ + 0xE049, 0, 0xF274, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF471, 0, 0xEA49, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE694, 0, 0xEA96, 0, 0xEADB, 0, /* 0xD0 */ + 0xE8D3, 0, 0xF877, 0xE773, 0xF551, 0, 0xE9B7, 0, /* 0xE0 */ + 0, 0, 0xF497, 0, 0, 0xE53E, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE695, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xE9B8, 0xE2C5, 0xEADF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF44E, 0xF631, 0, 0xF0CB, /* 0x00 */ + 0xF3FC, 0, 0xF4C7, 0, 0, 0xEB7B, 0, 0, /* 0x00 */ + 0, 0, 0, 0xF1FC, 0, 0, 0xEBDB, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF275, 0, 0xEA97, 0, /* 0x60 */ + 0, 0, 0, 0xF863, 0, 0, 0, 0, /* 0x60 */ + 0xF3CB, 0, 0, 0xE33F, 0xE9B9, 0, 0, 0xE3C3, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF5B1, 0, 0, /* 0x80 */ + 0, 0, 0xF056, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xF371, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF63C, 0, 0, 0, 0, /* 0xA0 */ + 0xF5D9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF37B, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE9BA, 0, 0, 0, 0xF44F, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF6C5, 0, /* 0xC0 */ + 0, 0, 0, 0xE8A2, 0xF498, 0, 0, 0xE04A, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF6F5, 0, 0xE0E5, 0, 0, /* 0xD0 */ + 0, 0xF276, 0, 0xEB63, 0, 0, 0, 0, /* 0xE0 */ + 0xE235, 0, 0, 0, 0, 0, 0, 0xE668, /* 0xE0 */ + 0, 0, 0, 0xE53F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEFC9, 0, 0, 0, 0, 0xE4CE, /* 0x00 */ + 0xF552, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE0E6, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF3A1, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF0B2, 0, 0, 0, 0, 0xF3A2, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xF0B3, 0, 0xF344, 0, 0, 0xE0F4, /* 0x40 */ + 0xE540, 0xF4B2, 0xF8B7, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF5EC, 0, 0, 0, 0, 0, 0xF277, /* 0x50 */ + 0xF542, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xF5ED, 0, 0xE2F3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF372, 0, 0, 0, 0, 0, 0xF25E, /* 0x80 */ + 0, 0, 0xF3CC, 0, 0, 0xEDB8, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE6F5, 0xECF3, 0xE2E5, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xE2C6, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xF4B3, 0xED68, 0xE2F9, 0xE2DA, 0, 0, /* 0xC0 */ + 0, 0, 0xF85D, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEE73, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF472, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xF5EE, 0, 0, 0xE04B, 0, 0, 0xECDC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE294, 0, 0xE669, 0, 0, /* 0x00 */ + 0, 0xF240, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF575, 0xE752, 0xE960, 0xE17E, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE5E0, 0xF65A, 0xF9CA, 0xE766, 0xF55F, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE636, 0xE94E, /* 0x20 */ + 0, 0xE8D4, 0xE6C7, 0, 0, 0, 0, 0xF4A0, /* 0x20 */ + 0, 0, 0, 0xF3CD, 0, 0, 0, 0, /* 0x30 */ + 0xEC53, 0xE96E, 0, 0xE96F, 0, 0, 0xF2AD, 0xEE3B, /* 0x30 */ + 0, 0, 0, 0, 0xF7DD, 0xF04F, 0, 0, /* 0x40 */ + 0, 0xF2AE, 0, 0, 0, 0xF560, 0xE295, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xEE3C, 0, 0xE26E, /* 0x50 */ + 0, 0, 0xE5F9, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xECF4, 0xE1D0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE5B8, 0, 0, 0xF6FD, 0, /* 0xA0 */ + 0xE939, 0, 0, 0, 0, 0xEA98, 0, 0xE93A, /* 0xA0 */ + 0xF473, 0xEFB4, 0xE46C, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xEFE6, 0, 0, 0xECF6, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xEECA, 0, /* 0xC0 */ + 0, 0xE35E, 0, 0, 0xE899, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE04C, 0, /* 0xE0 */ + 0, 0, 0xF278, 0xE86E, 0, 0xF499, 0, 0, /* 0xE0 */ + 0xEC9D, 0, 0xE136, 0, 0, 0, 0, 0xE84B, /* 0xF0 */ + 0, 0xF279, 0, 0, 0, 0xF5DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF6DC, 0xEBEA, 0xE251, 0xE541, 0, 0xF9B1, 0xEE4D, 0, /* 0x00 */ + 0xF8AD, 0, 0, 0xF777, 0, 0xEBCE, 0, 0xF6E2, /* 0x00 */ + 0xF5EF, 0xE2C7, 0, 0, 0xE542, 0xE191, 0, 0xE578, /* 0x10 */ + 0, 0xF25F, 0xF6D7, 0, 0, 0xEB36, 0xE651, 0xEBDC, /* 0x10 */ + 0xF373, 0xF3E4, 0xE993, 0xE637, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF597, 0, /* 0x20 */ + 0, 0xF3CE, 0xF474, 0, 0, 0xE340, 0, 0, /* 0x30 */ + 0xF191, 0, 0, 0, 0xF7BA, 0, 0xF0B5, 0, /* 0x30 */ + 0, 0xE57D, 0xEC54, 0, 0, 0, 0, 0xEFE7, /* 0x40 */ + 0, 0, 0xF0B4, 0xF031, 0, 0xF74C, 0xE236, 0, /* 0x40 */ + 0xF7C6, 0xF96A, 0, 0xE543, 0xE4B9, 0xF06E, 0, 0, /* 0x50 */ + 0, 0xEFAB, 0, 0, 0xEBE1, 0xE4CF, 0xF598, 0, /* 0x50 */ + 0xF050, 0xEBCF, 0, 0xE14A, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF27A, 0, 0, 0, 0xF374, 0xF4B4, 0xE57E, /* 0x60 */ + 0, 0, 0xF450, 0, 0, 0xF3E5, 0, 0xF553, /* 0x70 */ + 0xEB64, 0, 0xF0B6, 0, 0xE6A1, 0xE0E8, 0, 0xF7AD, /* 0x70 */ + 0xEFAD, 0xE774, 0xF843, 0xEC55, 0xF94D, 0, 0, 0xF154, /* 0x80 */ + 0xE741, 0, 0xE93B, 0, 0, 0, 0, 0xE5A4, /* 0x80 */ + 0, 0xF0E9, 0, 0, 0, 0xEF4B, 0, 0, /* 0x90 */ + 0, 0xE767, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF8AE, 0xE3E1, 0, 0, 0xE8C0, 0, /* 0xA0 */ + 0xF5BE, 0, 0xEA99, 0, 0, 0, 0, 0xE09D, /* 0xA0 */ + 0xF6C6, 0xE2C8, 0, 0, 0, 0xEBD0, 0, 0, /* 0xB0 */ + 0xF260, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xEFF4, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE296, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE5CD, 0, /* 0xD0 */ + 0, 0xE2DB, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE9BB, 0, 0, 0, 0, 0xE23C, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xEFE8, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xE544 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xED57, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF5DB, 0, 0, 0xF851, 0, 0, /* 0x10 */ + 0, 0xEA39, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE59A, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF2F7, 0, 0, /* 0x20 */ + 0, 0, 0xE4B3, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF0B7, 0xF2F8, 0xF5DC, 0xF1CC, 0xE8D5, 0xF3CF, 0, /* 0x40 */ + 0, 0, 0xF3D0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xF5B2, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE7AE, 0xE5AC, 0, 0xEC56, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF9A3, 0, 0xF8E5, /* 0x70 */ + 0xEAAB, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xEC97, /* 0x80 */ + 0, 0xF63D, 0, 0xF5B3, 0, 0xF345, 0, 0, /* 0x80 */ + 0, 0, 0xEBA5, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF5DD, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF132, 0xF1FD, 0, 0xF5B4, 0xF8B8, /* 0xA0 */ + 0, 0xE8A3, 0, 0, 0xE65A, 0xE0D9, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xEDD4, 0, 0, 0, 0, 0, 0, 0xF4FA, /* 0xC0 */ + 0, 0xF0B8, 0, 0xEB47, 0xE6EC, 0xF3EC, 0xEDAF, 0xE5E1, /* 0xC0 */ + 0xE6ED, 0xE3D1, 0, 0, 0, 0, 0, 0xEBF2, /* 0xD0 */ + 0xF2F9, 0, 0, 0, 0xE9BC, 0xF66C, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF375, 0, 0, 0, 0xF554, /* 0xE0 */ + 0, 0, 0xEFE9, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF4FB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE591, 0, 0, /* 0x00 */ + 0xE132, 0xF6FE, 0xEABC, 0, 0, 0, 0, 0xF0CD, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE347, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE652, 0, 0, 0, /* 0x30 */ + 0, 0, 0xEF3D, 0, 0, 0, 0, 0xF2AF, /* 0x30 */ + 0xE0A5, 0, 0, 0, 0, 0xE0E9, 0, 0, /* 0x40 */ + 0, 0xF878, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE156, /* 0x50 */ + 0, 0, 0, 0xEE77, 0, 0, 0xF057, 0, /* 0x50 */ + 0, 0, 0xE8A4, 0, 0xE2C9, 0xEC9E, 0xF2FA, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xF0DE, 0, 0, 0xF5C8, 0, 0xE56E, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xEB65, 0, 0xF2B0, 0, 0, 0xEC57, 0, /* 0x90 */ + 0xE7AF, 0, 0, 0, 0xF7E7, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xEEE5, 0, 0, 0xE2CA, 0xEBD1, /* 0xB0 */ + 0, 0xEC58, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF2FB, 0, 0, 0xF89B, /* 0xC0 */ + 0, 0, 0xE994, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xEB37, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF778, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xE0EA, 0, 0, 0, 0xE0BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE672, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xF5DE, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF5DF, 0, 0xF246, 0, 0, 0, 0xEC98, 0xE4CA, /* 0x10 */ + 0xF2FC, 0xE3C4, 0xF2B1, 0, 0xE3C5, 0, 0xE36E, 0, /* 0x20 */ + 0xE7E1, 0, 0, 0xEB48, 0, 0, 0xE1D1, 0xF4B9, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEECC, 0, 0xE638, 0xE237, 0, 0xE545, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xED58, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE4B4, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF0B9, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE0F5, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF66D, 0, 0xF3A3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE157, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xEFCA, 0, 0xEBF0, 0, /* 0x90 */ + 0, 0, 0xF5E0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF8AF, 0, 0, 0, 0xE0D1, /* 0xA0 */ + 0, 0, 0, 0, 0xF8E0, 0xF475, 0, 0, /* 0xA0 */ + 0xF192, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF37C, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF27B, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xEFCB, 0, /* 0xD0 */ + 0, 0xE192, 0, 0, 0xE6AF, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xF4A1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF997, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF3A4, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xEB66, 0, 0, /* 0x20 */ + 0, 0, 0, 0xF2B2, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xF561, 0, 0, /* 0x30 */ + 0xF6A1, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF3D1, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xE09E, 0xE09F, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE25E, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF4C8, 0, 0xF4BA /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF1FE, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE836, 0, 0, 0xEB7C, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF75D, 0, 0xE0D2, 0, 0, 0, 0xF0CE, /* 0x80 */ + 0, 0xF7D8, 0xF7D9, 0xE070, 0xE85A, 0, 0, 0, /* 0x90 */ + 0xE0A6, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE058, 0xF7EE, 0xE8EC, 0, 0, /* 0xA0 */ + 0xE341, 0, 0, 0, 0, 0xE5EF, 0, 0, /* 0xA0 */ + 0, 0xEE95, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xEEA2, 0xED69, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xED71, /* 0xC0 */ + 0, 0, 0xF954, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF7EF, 0xE2F4, 0xF6E6, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE24C, 0, 0, 0, /* 0xD0 */ + 0, 0xF555, 0xE933 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9BD, 0, 0, 0, /* 0x10 */ + 0, 0xF556, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF731, 0, 0, 0, 0xEF66, 0, /* 0x20 */ + 0, 0, 0xE8C1, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF376, 0, 0, 0, 0xED49, /* 0x30 */ + 0xF67D, 0, 0xF7AE, 0, 0xE9BE, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xE6B0, 0xE778, 0xE0BD, 0, 0, /* 0x40 */ + 0xF7DA, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xF75E, 0xF7F0, 0xEB7D, 0xECB3, 0xF543, /* 0x50 */ + 0, 0, 0xF052, 0xF476, 0xF346, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE8D6, 0, 0, 0, 0, 0, /* 0x60 */ + 0xF0E4, 0, 0, 0xF477, 0, 0xE6D5, 0xE546, 0xF7E8, /* 0x70 */ + 0xE6C1, 0, 0, 0, 0, 0xEDD5, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEFEA, 0xE6CC, 0, /* 0x80 */ + 0, 0, 0xE4E9, 0xEC59, 0, 0xF96B, 0xE1AD, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE140, 0xF032, 0, 0, /* 0x90 */ + 0xED98, 0xE350, 0, 0xF347, 0xF231, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xE6F6, 0, 0, 0, 0xEC5A, /* 0xA0 */ + 0xEC5B, 0, 0xF85F, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xF0DF, 0, 0, 0, 0, 0, 0xE65B, /* 0xB0 */ + 0, 0, 0, 0xF544, 0, 0, 0, 0, /* 0xB0 */ + 0xF1CD, 0xED62, 0, 0, 0xF039, 0xED4A, 0xF4A2, 0xE1D2, /* 0xC0 */ + 0, 0xF65B, 0, 0xF3E6, 0xF1C1, 0xEF4C, 0xF261, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xF377, 0xEC5C, 0, /* 0xD0 */ + 0, 0xED3A, 0, 0xF5E1, 0xF1DA, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE6EE, 0xE3F1, 0, 0, 0, 0, /* 0xE0 */ + 0xEFEB, 0xEFEC, 0xEB74, 0, 0, 0, 0, 0xE837, /* 0xE0 */ + 0xE9D4, 0, 0xF033, 0, 0, 0, 0xE653, 0xE696, /* 0xF0 */ + 0, 0xE86F, 0, 0xF2B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEC5D, 0, 0, 0, 0, 0, 0xF2FD, 0xF478, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xF2C5, 0, 0xEEE7, 0, 0, 0xE6FD, 0, /* 0x10 */ + 0, 0xEECE, 0, 0, 0xEADC, 0, 0xF7C7, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7F6, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xEAAC, 0, 0xE66A, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xE934, 0, 0, 0, 0xF348, 0, 0, /* 0x30 */ + 0, 0, 0xE5FA, 0, 0xED99, 0, 0, 0, /* 0x40 */ + 0xE654, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF57C, 0, 0, 0, 0, 0xF2FE, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF331, 0, 0xEA3A, 0, /* 0x50 */ + 0, 0xE84C, 0xE79E, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF864, 0, 0, 0, 0xF175, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xF938, 0, 0, 0xF176, /* 0x70 */ + 0, 0, 0xE75B, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF8B9, 0, 0xED63, 0, 0xE1F9, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE2D3, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE07A, 0, 0, 0xE2D4, 0, 0xF74D, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF557, 0, /* 0xC0 */ + 0, 0, 0, 0xF06F, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xF7DB, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE547, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF0E5, 0, 0, 0xEBD2, 0, /* 0xF0 */ + 0, 0, 0, 0xF034, 0, 0, 0, 0xF852 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8E1, 0xF87D, 0xF332, 0xE193, 0, 0xF833, 0xEC99, 0, /* 0x00 */ + 0xEC5E, 0, 0xEFF5, 0, 0xEBEB, 0, 0, 0, /* 0x00 */ + 0xEEE8, 0xEF67, 0xE89A, 0xE55B, 0, 0, 0, 0xF6F6, /* 0x10 */ + 0xE655, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE579, 0, 0, /* 0x20 */ + 0xF89C, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE194, 0xF6DD, 0, 0xEA4A, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE238, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF349, 0xEDA0, 0xED59, 0, /* 0x40 */ + 0, 0, 0, 0, 0xED64, 0, 0, 0, /* 0x50 */ + 0xF053, 0, 0xF2B4, 0, 0, 0, 0xE6BE, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xF8E2, 0, 0xE1D3, /* 0x60 */ + 0, 0, 0, 0xF2B5, 0, 0, 0, 0xF879, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF7A6, 0, 0, 0, 0, 0, 0, 0xEABD, /* 0xA0 */ + 0, 0xF6C7, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xF79F, 0, 0, 0xF79E, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xEA3B, 0xE8E8, 0, 0, 0xECDD, /* 0xD0 */ + 0, 0xEBE2, 0xE3C6, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF660, 0xF0E6, 0xE89B, /* 0xE0 */ + 0, 0, 0, 0, 0xF157, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xEA9A, 0xF779, 0xECDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE297, 0, 0, 0, 0, /* 0x00 */ + 0, 0xF853, 0xEDD7, 0, 0xF158, 0, 0, 0, /* 0x00 */ + 0xF4C9, 0, 0, 0xED4B, 0, 0, 0, 0, /* 0x10 */ + 0xEE3E, 0, 0, 0, 0, 0, 0xF2B6, 0, /* 0x10 */ + 0xE94F, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE24D, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE753, 0, 0, /* 0x40 */ + 0, 0xE35F, 0, 0xE2FA, 0xF4CA, 0xEB67, 0, 0, /* 0x40 */ + 0, 0xE3C7, 0xEFAE, 0, 0xEF4D, 0, 0, 0xF854, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xEC5F, 0, /* 0x90 */ + 0, 0xF855, 0, 0, 0, 0xF7B8, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE970, 0, 0, /* 0xA0 */ + 0xF8B0, 0, 0, 0, 0xE739, 0xEDDF, 0xF7A7, 0, /* 0xA0 */ + 0, 0xF67E, 0, 0xF65C, 0xEC9A, 0, 0, 0, /* 0xB0 */ + 0, 0xF193, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE870, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xF3D2, 0xE45C, 0xE2CB, 0, 0, 0xE04D, 0, 0, /* 0xD0 */ + 0, 0xE9BF, 0, 0, 0, 0xF691, 0, 0xEA9B, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF844, 0, 0, /* 0xE0 */ + 0, 0xE5AD, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF3E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEA4E, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE950, 0, 0, 0, 0, 0, 0xE3C8, 0xE3C9, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF74E, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE0F6, 0, 0, 0, 0, /* 0x20 */ + 0xE59B, 0, 0, 0, 0, 0, 0xF5E2, 0xEBD3, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE779, 0, 0, 0xF7A0, 0, 0xE2CC, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF9A4, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE298, 0, 0xF860, /* 0x50 */ + 0, 0, 0xE195, 0xEE4E, 0, 0, 0, 0xF63E, /* 0x50 */ + 0, 0, 0xE5F0, 0, 0, 0xE3CA, 0, 0, /* 0x60 */ + 0, 0xF94E, 0xE5F1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE1E9, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF845, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xEC60, 0xF599, 0, 0, 0, /* 0xD0 */ + 0xE1D4, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xEEA3, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xE8A5 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEC61, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6A2, /* 0x20 */ + 0, 0, 0xF6E3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF036, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE331, 0, 0, 0, /* 0x30 */ + 0, 0xE26A, 0xF8EB, 0xE8A6, 0xE8DE, 0xE775, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xF070, /* 0x40 */ + 0, 0, 0, 0, 0xE73A, 0, 0, 0, /* 0x50 */ + 0, 0, 0xEDE0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xE66B, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF2C6, 0, /* 0x80 */ + 0, 0xF77A, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xED65, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE299, 0, 0, 0xEB68, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE6EF, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xF57D, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xE1E6, 0, 0, 0, /* 0xE0 */ + 0xE196 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5E3, 0, 0, /* 0x00 */ + 0xED5A, 0, 0xE971, 0, 0, 0xF7C8, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF94F, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEF37, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE754, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xE0BE, /* 0x40 */ + 0, 0xE93E, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6F7, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF378, 0, 0xE9C0, /* 0xE0 */ + 0, 0xE2CD, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE995, 0xE7B0, 0, 0xEE79 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xED4C, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xF054, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xED7C, 0, /* 0x20 */ + 0xED75, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF8F8, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xE14B, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xED4D, 0, 0, /* 0x50 */ + 0xE1DC, 0xE7F7, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE9DF, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF1CE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE7D0, 0, 0, 0, 0, 0, 0xEDA3, /* 0xA0 */ + 0, 0, 0, 0, 0xF7CD, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE1AE, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2CE, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xF63F, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xF9D3, 0xF0ED, 0xE66C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDA4, 0, 0, 0, 0xE5B6, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE66D, 0, 0, /* 0x70 */ + 0, 0xF7E9, 0, 0, 0, 0xEEA4, 0, 0xE673, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xE3CB, 0xE674, 0, 0, 0, 0xE5F2, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEA9C, 0, 0xE6F8, /* 0x90 */ + 0, 0, 0, 0, 0, 0xE77A, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE2D5, 0xE79F, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xE73B, 0, 0, 0xF9CB, 0, /* 0xB0 */ + 0, 0, 0, 0xF96C, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xEB38, 0xE5F3, 0, /* 0xC0 */ + 0, 0xF9D9, 0, 0, 0xE133, 0, 0, 0, /* 0xD0 */ + 0xE7F9, 0, 0, 0xE4EA, 0xF5F5, 0, 0xF2C7, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE4DA, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xE84D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEF38, /* 0x00 */ + 0xE93F, 0, 0, 0, 0, 0, 0xF333, 0, /* 0x00 */ + 0, 0, 0, 0xE1D5, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xEB39, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xEA3C, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF34A, 0xF241, 0, 0, 0xF242, 0, /* 0x40 */ + 0, 0, 0xF65D, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xF262, /* 0x50 */ + 0, 0xE656, 0, 0, 0, 0, 0, 0xEB75, /* 0x60 */ + 0, 0, 0xF4BB, 0, 0xEDE1, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xED5B, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xE6A3, 0, 0, /* 0x80 */ + 0xE8C2, 0, 0, 0, 0, 0xE0A0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE2CF /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_AC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867, 0x8868, /* 0x00 */ + 0x8869, 0x886A, 0x886B, 0x886C, 0x886D, 0x886E, 0x886F, 0x8870, /* 0x00 */ + 0x8871, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877, 0x8878, 0x8879, /* 0x10 */ + 0x887A, 0x887B, 0x887C, 0x887D, 0x8881, 0x8882, 0x8883, 0x8884, /* 0x10 */ + 0x8885, 0x8886, 0x8887, 0x8888, 0x8889, 0x888A, 0x888B, 0x888C, /* 0x20 */ + 0x888D, 0x888E, 0x888F, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, /* 0x20 */ + 0x8896, 0x8897, 0x8898, 0x8899, 0x889A, 0x889B, 0x889C, 0x889D, /* 0x30 */ + 0x88A1, 0x88A2, 0x88A3, 0x88A4, 0x88A5, 0x88A6, 0x88A7, 0x88A8, /* 0x30 */ + 0x88A9, 0x88AA, 0x88AB, 0x88AC, 0x88AD, 0x88AE, 0x88AF, 0x88B0, /* 0x40 */ + 0x88B1, 0x88B3, 0x88B4, 0x88B5, 0x88B6, 0x88B7, 0x88B8, 0x88B9, /* 0x40 */ + 0x88BA, 0x88BB, 0x88BC, 0x88BD, 0x88C1, 0x88C2, 0x88C3, 0x88C4, /* 0x50 */ + 0x88C5, 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0x88CA, 0x88CB, 0x88CC, /* 0x50 */ + 0x88CD, 0x88CE, 0x88CF, 0x88D0, 0x88D1, 0x88D3, 0x88D4, 0x88D5, /* 0x60 */ + 0x88D6, 0x88D7, 0x88D8, 0x88D9, 0x88DA, 0x88DB, 0x88DC, 0x88DD, /* 0x60 */ + 0x88E1, 0x88E2, 0x88E3, 0x88E4, 0x88E5, 0x88E6, 0x88E7, 0x88E8, /* 0x70 */ + 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF, 0x88F0, /* 0x70 */ + 0x88F1, 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0x88F7, 0x88F8, 0x88F9, /* 0x80 */ + 0x88FA, 0x88FB, 0x88FC, 0x88FD, 0x8941, 0x8942, 0x8943, 0x8944, /* 0x80 */ + 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, 0x894A, 0x894B, 0x894C, /* 0x90 */ + 0x894D, 0x894E, 0x894F, 0x8950, 0x8951, 0x8953, 0x8954, 0x8955, /* 0x90 */ + 0x8956, 0x8957, 0x8958, 0x8959, 0x895A, 0x895B, 0x895C, 0x895D, /* 0xA0 */ + 0x8961, 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968, /* 0xA0 */ + 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, 0x8970, /* 0xB0 */ + 0x8971, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, /* 0xB0 */ + 0x897A, 0x897B, 0x897C, 0x897D, 0x8981, 0x8982, 0x8983, 0x8984, /* 0xC0 */ + 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, 0x898A, 0x898B, 0x898C, /* 0xC0 */ + 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8993, 0x8994, 0x8995, /* 0xD0 */ + 0x8996, 0x8997, 0x8998, 0x8999, 0x899A, 0x899B, 0x899C, 0x899D, /* 0xD0 */ + 0x89A1, 0x89A2, 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0x89A7, 0x89A8, /* 0xE0 */ + 0x89A9, 0x89AA, 0x89AB, 0x89AC, 0x89AD, 0x89AE, 0x89AF, 0x89B0, /* 0xE0 */ + 0x89B1, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0x89B9, /* 0xF0 */ + 0x89BA, 0x89BB, 0x89BC, 0x89BD, 0x89C1, 0x89C2, 0x89C3, 0x89C4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_AD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x89C5, 0x89C6, 0x89C7, 0x89C8, 0x89C9, 0x89CA, 0x89CB, 0x89CC, /* 0x00 */ + 0x89CD, 0x89CE, 0x89CF, 0x89D0, 0x89D1, 0x89D3, 0x89D4, 0x89D5, /* 0x00 */ + 0x89D6, 0x89D7, 0x89D8, 0x89D9, 0x89DA, 0x89DB, 0x89DC, 0x89DD, /* 0x10 */ + 0x89E1, 0x89E2, 0x89E3, 0x89E4, 0x89E5, 0x89E6, 0x89E7, 0x89E8, /* 0x10 */ + 0x89E9, 0x89EA, 0x89EB, 0x89EC, 0x89ED, 0x89EE, 0x89EF, 0x89F0, /* 0x20 */ + 0x89F1, 0x89F3, 0x89F4, 0x89F5, 0x89F6, 0x89F7, 0x89F8, 0x89F9, /* 0x20 */ + 0x89FA, 0x89FB, 0x89FC, 0x89FD, 0x8A41, 0x8A42, 0x8A43, 0x8A44, /* 0x30 */ + 0x8A45, 0x8A46, 0x8A47, 0x8A48, 0x8A49, 0x8A4A, 0x8A4B, 0x8A4C, /* 0x30 */ + 0x8A4D, 0x8A4E, 0x8A4F, 0x8A50, 0x8A51, 0x8A53, 0x8A54, 0x8A55, /* 0x40 */ + 0x8A56, 0x8A57, 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, /* 0x40 */ + 0x8A61, 0x8A62, 0x8A63, 0x8A64, 0x8A65, 0x8A66, 0x8A67, 0x8A68, /* 0x50 */ + 0x8A69, 0x8A6A, 0x8A6B, 0x8A6C, 0x8A6D, 0x8A6E, 0x8A6F, 0x8A70, /* 0x50 */ + 0x8A71, 0x8A73, 0x8A74, 0x8A75, 0x8A76, 0x8A77, 0x8A78, 0x8A79, /* 0x60 */ + 0x8A7A, 0x8A7B, 0x8A7C, 0x8A7D, 0x8A81, 0x8A82, 0x8A83, 0x8A84, /* 0x60 */ + 0x8A85, 0x8A86, 0x8A87, 0x8A88, 0x8A89, 0x8A8A, 0x8A8B, 0x8A8C, /* 0x70 */ + 0x8A8D, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A93, 0x8A94, 0x8A95, /* 0x70 */ + 0x8A96, 0x8A97, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, 0x8A9C, 0x8A9D, /* 0x80 */ + 0x8AA1, 0x8AA2, 0x8AA3, 0x8AA4, 0x8AA5, 0x8AA6, 0x8AA7, 0x8AA8, /* 0x80 */ + 0x8AA9, 0x8AAA, 0x8AAB, 0x8AAC, 0x8AAD, 0x8AAE, 0x8AAF, 0x8AB0, /* 0x90 */ + 0x8AB1, 0x8AB3, 0x8AB4, 0x8AB5, 0x8AB6, 0x8AB7, 0x8AB8, 0x8AB9, /* 0x90 */ + 0x8ABA, 0x8ABB, 0x8ABC, 0x8ABD, 0x8AC1, 0x8AC2, 0x8AC3, 0x8AC4, /* 0xA0 */ + 0x8AC5, 0x8AC6, 0x8AC7, 0x8AC8, 0x8AC9, 0x8ACA, 0x8ACB, 0x8ACC, /* 0xA0 */ + 0x8ACD, 0x8ACE, 0x8ACF, 0x8AD0, 0x8AD1, 0x8AD3, 0x8AD4, 0x8AD5, /* 0xB0 */ + 0x8AD6, 0x8AD7, 0x8AD8, 0x8AD9, 0x8ADA, 0x8ADB, 0x8ADC, 0x8ADD, /* 0xB0 */ + 0x8AE1, 0x8AE2, 0x8AE3, 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, /* 0xC0 */ + 0x8AE9, 0x8AEA, 0x8AEB, 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, 0x8AF0, /* 0xC0 */ + 0x8AF1, 0x8AF3, 0x8AF4, 0x8AF5, 0x8AF6, 0x8AF7, 0x8AF8, 0x8AF9, /* 0xD0 */ + 0x8AFA, 0x8AFB, 0x8AFC, 0x8AFD, 0x8B41, 0x8B42, 0x8B43, 0x8B44, /* 0xD0 */ + 0x8B45, 0x8B46, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, /* 0xE0 */ + 0x8B4D, 0x8B4E, 0x8B4F, 0x8B50, 0x8B51, 0x8B53, 0x8B54, 0x8B55, /* 0xE0 */ + 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, /* 0xF0 */ + 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, 0x8B66, 0x8B67, 0x8B68 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_AE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B69, 0x8B6A, 0x8B6B, 0x8B6C, 0x8B6D, 0x8B6E, 0x8B6F, 0x8B70, /* 0x00 */ + 0x8B71, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, 0x8B78, 0x8B79, /* 0x00 */ + 0x8B7A, 0x8B7B, 0x8B7C, 0x8B7D, 0x8B81, 0x8B82, 0x8B83, 0x8B84, /* 0x10 */ + 0x8B85, 0x8B86, 0x8B87, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, /* 0x10 */ + 0x8B8D, 0x8B8E, 0x8B8F, 0x8B90, 0x8B91, 0x8B93, 0x8B94, 0x8B95, /* 0x20 */ + 0x8B96, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0x8B9C, 0x8B9D, /* 0x20 */ + 0x8BA1, 0x8BA2, 0x8BA3, 0x8BA4, 0x8BA5, 0x8BA6, 0x8BA7, 0x8BA8, /* 0x30 */ + 0x8BA9, 0x8BAA, 0x8BAB, 0x8BAC, 0x8BAD, 0x8BAE, 0x8BAF, 0x8BB0, /* 0x30 */ + 0x8BB1, 0x8BB3, 0x8BB4, 0x8BB5, 0x8BB6, 0x8BB7, 0x8BB8, 0x8BB9, /* 0x40 */ + 0x8BBA, 0x8BBB, 0x8BBC, 0x8BBD, 0x8C61, 0x8C62, 0x8C63, 0x8C64, /* 0x40 */ + 0x8C65, 0x8C66, 0x8C67, 0x8C68, 0x8C69, 0x8C6A, 0x8C6B, 0x8C6C, /* 0x50 */ + 0x8C6D, 0x8C6E, 0x8C6F, 0x8C70, 0x8C71, 0x8C73, 0x8C74, 0x8C75, /* 0x50 */ + 0x8C76, 0x8C77, 0x8C78, 0x8C79, 0x8C7A, 0x8C7B, 0x8C7C, 0x8C7D, /* 0x60 */ + 0x8C81, 0x8C82, 0x8C83, 0x8C84, 0x8C85, 0x8C86, 0x8C87, 0x8C88, /* 0x60 */ + 0x8C89, 0x8C8A, 0x8C8B, 0x8C8C, 0x8C8D, 0x8C8E, 0x8C8F, 0x8C90, /* 0x70 */ + 0x8C91, 0x8C93, 0x8C94, 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, /* 0x70 */ + 0x8C9A, 0x8C9B, 0x8C9C, 0x8C9D, 0x8CA1, 0x8CA2, 0x8CA3, 0x8CA4, /* 0x80 */ + 0x8CA5, 0x8CA6, 0x8CA7, 0x8CA8, 0x8CA9, 0x8CAA, 0x8CAB, 0x8CAC, /* 0x80 */ + 0x8CAD, 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0x8CB3, 0x8CB4, 0x8CB5, /* 0x90 */ + 0x8CB6, 0x8CB7, 0x8CB8, 0x8CB9, 0x8CBA, 0x8CBB, 0x8CBC, 0x8CBD, /* 0x90 */ + 0x8CC1, 0x8CC2, 0x8CC3, 0x8CC4, 0x8CC5, 0x8CC6, 0x8CC7, 0x8CC8, /* 0xA0 */ + 0x8CC9, 0x8CCA, 0x8CCB, 0x8CCC, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, /* 0xA0 */ + 0x8CD1, 0x8CD3, 0x8CD4, 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, /* 0xB0 */ + 0x8CDA, 0x8CDB, 0x8CDC, 0x8CDD, 0x8CE1, 0x8CE2, 0x8CE3, 0x8CE4, /* 0xB0 */ + 0x8CE5, 0x8CE6, 0x8CE7, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, /* 0xC0 */ + 0x8CED, 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF3, 0x8CF4, 0x8CF5, /* 0xC0 */ + 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x8CFB, 0x8CFC, 0x8CFD, /* 0xD0 */ + 0x8D41, 0x8D42, 0x8D43, 0x8D44, 0x8D45, 0x8D46, 0x8D47, 0x8D48, /* 0xD0 */ + 0x8D49, 0x8D4A, 0x8D4B, 0x8D4C, 0x8D4D, 0x8D4E, 0x8D4F, 0x8D50, /* 0xE0 */ + 0x8D51, 0x8D53, 0x8D54, 0x8D55, 0x8D56, 0x8D57, 0x8D58, 0x8D59, /* 0xE0 */ + 0x8D5A, 0x8D5B, 0x8D5C, 0x8D5D, 0x8D61, 0x8D62, 0x8D63, 0x8D64, /* 0xF0 */ + 0x8D65, 0x8D66, 0x8D67, 0x8D68, 0x8D69, 0x8D6A, 0x8D6B, 0x8D6C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_AF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8D6D, 0x8D6E, 0x8D6F, 0x8D70, 0x8D71, 0x8D73, 0x8D74, 0x8D75, /* 0x00 */ + 0x8D76, 0x8D77, 0x8D78, 0x8D79, 0x8D7A, 0x8D7B, 0x8D7C, 0x8D7D, /* 0x00 */ + 0x8D81, 0x8D82, 0x8D83, 0x8D84, 0x8D85, 0x8D86, 0x8D87, 0x8D88, /* 0x10 */ + 0x8D89, 0x8D8A, 0x8D8B, 0x8D8C, 0x8D8D, 0x8D8E, 0x8D8F, 0x8D90, /* 0x10 */ + 0x8D91, 0x8D93, 0x8D94, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, /* 0x20 */ + 0x8D9A, 0x8D9B, 0x8D9C, 0x8D9D, 0x8DA1, 0x8DA2, 0x8DA3, 0x8DA4, /* 0x20 */ + 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, 0x8DAB, 0x8DAC, /* 0x30 */ + 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB3, 0x8DB4, 0x8DB5, /* 0x30 */ + 0x8DB6, 0x8DB7, 0x8DB8, 0x8DB9, 0x8DBA, 0x8DBB, 0x8DBC, 0x8DBD, /* 0x40 */ + 0x8DC1, 0x8DC2, 0x8DC3, 0x8DC4, 0x8DC5, 0x8DC6, 0x8DC7, 0x8DC8, /* 0x40 */ + 0x8DC9, 0x8DCA, 0x8DCB, 0x8DCC, 0x8DCD, 0x8DCE, 0x8DCF, 0x8DD0, /* 0x50 */ + 0x8DD1, 0x8DD3, 0x8DD4, 0x8DD5, 0x8DD6, 0x8DD7, 0x8DD8, 0x8DD9, /* 0x50 */ + 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x8DE1, 0x8DE2, 0x8DE3, 0x8DE4, /* 0x60 */ + 0x8DE5, 0x8DE6, 0x8DE7, 0x8DE8, 0x8DE9, 0x8DEA, 0x8DEB, 0x8DEC, /* 0x60 */ + 0x8DED, 0x8DEE, 0x8DEF, 0x8DF0, 0x8DF1, 0x8DF3, 0x8DF4, 0x8DF5, /* 0x70 */ + 0x8DF6, 0x8DF7, 0x8DF8, 0x8DF9, 0x8DFA, 0x8DFB, 0x8DFC, 0x8DFD, /* 0x70 */ + 0x8E41, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, 0x8E47, 0x8E48, /* 0x80 */ + 0x8E49, 0x8E4A, 0x8E4B, 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, 0x8E50, /* 0x80 */ + 0x8E51, 0x8E53, 0x8E54, 0x8E55, 0x8E56, 0x8E57, 0x8E58, 0x8E59, /* 0x90 */ + 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E61, 0x8E62, 0x8E63, 0x8E64, /* 0x90 */ + 0x8E65, 0x8E66, 0x8E67, 0x8E68, 0x8E69, 0x8E6A, 0x8E6B, 0x8E6C, /* 0xA0 */ + 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E73, 0x8E74, 0x8E75, /* 0xA0 */ + 0x8E76, 0x8E77, 0x8E78, 0x8E79, 0x8E7A, 0x8E7B, 0x8E7C, 0x8E7D, /* 0xB0 */ + 0x8E81, 0x8E82, 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0x8E88, /* 0xB0 */ + 0x8E89, 0x8E8A, 0x8E8B, 0x8E8C, 0x8E8D, 0x8E8E, 0x8E8F, 0x8E90, /* 0xC0 */ + 0x8E91, 0x8E93, 0x8E94, 0x8E95, 0x8E96, 0x8E97, 0x8E98, 0x8E99, /* 0xC0 */ + 0x8E9A, 0x8E9B, 0x8E9C, 0x8E9D, 0x8EA1, 0x8EA2, 0x8EA3, 0x8EA4, /* 0xD0 */ + 0x8EA5, 0x8EA6, 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAA, 0x8EAB, 0x8EAC, /* 0xD0 */ + 0x8EAD, 0x8EAE, 0x8EAF, 0x8EB0, 0x8EB1, 0x8EB3, 0x8EB4, 0x8EB5, /* 0xE0 */ + 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBA, 0x8EBB, 0x8EBC, 0x8EBD, /* 0xE0 */ + 0x8EC1, 0x8EC2, 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, /* 0xF0 */ + 0x8EC9, 0x8ECA, 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECE, 0x8ECF, 0x8ED0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8ED1, 0x8ED3, 0x8ED4, 0x8ED5, 0x8ED6, 0x8ED7, 0x8ED8, 0x8ED9, /* 0x00 */ + 0x8EDA, 0x8EDB, 0x8EDC, 0x8EDD, 0x8EE1, 0x8EE2, 0x8EE3, 0x8EE4, /* 0x00 */ + 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, /* 0x10 */ + 0x8EED, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF3, 0x8EF4, 0x8EF5, /* 0x10 */ + 0x8EF6, 0x8EF7, 0x8EF8, 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, /* 0x20 */ + 0x8F41, 0x8F42, 0x8F43, 0x8F44, 0x8F45, 0x8F46, 0x8F47, 0x8F48, /* 0x20 */ + 0x8F49, 0x8F4A, 0x8F4B, 0x8F4C, 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, /* 0x30 */ + 0x8F51, 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, /* 0x30 */ + 0x8F5A, 0x8F5B, 0x8F5C, 0x8F5D, 0x8F61, 0x8F62, 0x8F63, 0x8F64, /* 0x40 */ + 0x8F65, 0x8F66, 0x8F67, 0x8F68, 0x8F69, 0x8F6A, 0x8F6B, 0x8F6C, /* 0x40 */ + 0x8F6D, 0x8F6E, 0x8F6F, 0x8F70, 0x8F71, 0x8F73, 0x8F74, 0x8F75, /* 0x50 */ + 0x8F76, 0x8F77, 0x8F78, 0x8F79, 0x8F7A, 0x8F7B, 0x8F7C, 0x8F7D, /* 0x50 */ + 0x8F81, 0x8F82, 0x8F83, 0x8F84, 0x8F85, 0x8F86, 0x8F87, 0x8F88, /* 0x60 */ + 0x8F89, 0x8F8A, 0x8F8B, 0x8F8C, 0x8F8D, 0x8F8E, 0x8F8F, 0x8F90, /* 0x60 */ + 0x8F91, 0x8F93, 0x8F94, 0x8F95, 0x8F96, 0x8F97, 0x8F98, 0x8F99, /* 0x70 */ + 0x8F9A, 0x8F9B, 0x8F9C, 0x8F9D, 0x8FA1, 0x8FA2, 0x8FA3, 0x8FA4, /* 0x70 */ + 0x8FA5, 0x8FA6, 0x8FA7, 0x8FA8, 0x8FA9, 0x8FAA, 0x8FAB, 0x8FAC, /* 0x80 */ + 0x8FAD, 0x8FAE, 0x8FAF, 0x8FB0, 0x8FB1, 0x8FB3, 0x8FB4, 0x8FB5, /* 0x80 */ + 0x8FB6, 0x8FB7, 0x8FB8, 0x8FB9, 0x8FBA, 0x8FBB, 0x8FBC, 0x8FBD, /* 0x90 */ + 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067, 0x9068, /* 0x90 */ + 0x9069, 0x906A, 0x906B, 0x906C, 0x906D, 0x906E, 0x906F, 0x9070, /* 0xA0 */ + 0x9071, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079, /* 0xA0 */ + 0x907A, 0x907B, 0x907C, 0x907D, 0x9081, 0x9082, 0x9083, 0x9084, /* 0xB0 */ + 0x9085, 0x9086, 0x9087, 0x9088, 0x9089, 0x908A, 0x908B, 0x908C, /* 0xB0 */ + 0x908D, 0x908E, 0x908F, 0x9090, 0x9091, 0x9093, 0x9094, 0x9095, /* 0xC0 */ + 0x9096, 0x9097, 0x9098, 0x9099, 0x909A, 0x909B, 0x909C, 0x909D, /* 0xC0 */ + 0x90A1, 0x90A2, 0x90A3, 0x90A4, 0x90A5, 0x90A6, 0x90A7, 0x90A8, /* 0xD0 */ + 0x90A9, 0x90AA, 0x90AB, 0x90AC, 0x90AD, 0x90AE, 0x90AF, 0x90B0, /* 0xD0 */ + 0x90B1, 0x90B3, 0x90B4, 0x90B5, 0x90B6, 0x90B7, 0x90B8, 0x90B9, /* 0xE0 */ + 0x90BA, 0x90BB, 0x90BC, 0x90BD, 0x90C1, 0x90C2, 0x90C3, 0x90C4, /* 0xE0 */ + 0x90C5, 0x90C6, 0x90C7, 0x90C8, 0x90C9, 0x90CA, 0x90CB, 0x90CC, /* 0xF0 */ + 0x90CD, 0x90CE, 0x90CF, 0x90D0, 0x90D1, 0x90D3, 0x90D4, 0x90D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90D6, 0x90D7, 0x90D8, 0x90D9, 0x90DA, 0x90DB, 0x90DC, 0x90DD, /* 0x00 */ + 0x90E1, 0x90E2, 0x90E3, 0x90E4, 0x90E5, 0x90E6, 0x90E7, 0x90E8, /* 0x00 */ + 0x90E9, 0x90EA, 0x90EB, 0x90EC, 0x90ED, 0x90EE, 0x90EF, 0x90F0, /* 0x10 */ + 0x90F1, 0x90F3, 0x90F4, 0x90F5, 0x90F6, 0x90F7, 0x90F8, 0x90F9, /* 0x10 */ + 0x90FA, 0x90FB, 0x90FC, 0x90FD, 0x9141, 0x9142, 0x9143, 0x9144, /* 0x20 */ + 0x9145, 0x9146, 0x9147, 0x9148, 0x9149, 0x914A, 0x914B, 0x914C, /* 0x20 */ + 0x914D, 0x914E, 0x914F, 0x9150, 0x9151, 0x9153, 0x9154, 0x9155, /* 0x30 */ + 0x9156, 0x9157, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, /* 0x30 */ + 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, /* 0x40 */ + 0x9169, 0x916A, 0x916B, 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, /* 0x40 */ + 0x9171, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, /* 0x50 */ + 0x917A, 0x917B, 0x917C, 0x917D, 0x9181, 0x9182, 0x9183, 0x9184, /* 0x50 */ + 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, /* 0x60 */ + 0x918D, 0x918E, 0x918F, 0x9190, 0x9191, 0x9193, 0x9194, 0x9195, /* 0x60 */ + 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0x919C, 0x919D, /* 0x70 */ + 0x91A1, 0x91A2, 0x91A3, 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0x91A8, /* 0x70 */ + 0x91A9, 0x91AA, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0x91B0, /* 0x80 */ + 0x91B1, 0x91B3, 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, /* 0x80 */ + 0x91BA, 0x91BB, 0x91BC, 0x91BD, 0x91C1, 0x91C2, 0x91C3, 0x91C4, /* 0x90 */ + 0x91C5, 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, /* 0x90 */ + 0x91CD, 0x91CE, 0x91CF, 0x91D0, 0x91D1, 0x91D3, 0x91D4, 0x91D5, /* 0xA0 */ + 0x91D6, 0x91D7, 0x91D8, 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, /* 0xA0 */ + 0x91E1, 0x91E2, 0x91E3, 0x91E4, 0x91E5, 0x91E6, 0x91E7, 0x91E8, /* 0xB0 */ + 0x91E9, 0x91EA, 0x91EB, 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, /* 0xB0 */ + 0x91F1, 0x91F3, 0x91F4, 0x91F5, 0x91F6, 0x91F7, 0x91F8, 0x91F9, /* 0xC0 */ + 0x91FA, 0x91FB, 0x91FC, 0x91FD, 0x9241, 0x9242, 0x9243, 0x9244, /* 0xC0 */ + 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924A, 0x924B, 0x924C, /* 0xD0 */ + 0x924D, 0x924E, 0x924F, 0x9250, 0x9251, 0x9253, 0x9254, 0x9255, /* 0xD0 */ + 0x9256, 0x9257, 0x9258, 0x9259, 0x925A, 0x925B, 0x925C, 0x925D, /* 0xE0 */ + 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0x9267, 0x9268, /* 0xE0 */ + 0x9269, 0x926A, 0x926B, 0x926C, 0x926D, 0x926E, 0x926F, 0x9270, /* 0xF0 */ + 0x9271, 0x9273, 0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x927A, 0x927B, 0x927C, 0x927D, 0x9281, 0x9282, 0x9283, 0x9284, /* 0x00 */ + 0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C, /* 0x00 */ + 0x928D, 0x928E, 0x928F, 0x9290, 0x9291, 0x9293, 0x9294, 0x9295, /* 0x10 */ + 0x9296, 0x9297, 0x9298, 0x9299, 0x929A, 0x929B, 0x929C, 0x929D, /* 0x10 */ + 0x92A1, 0x92A2, 0x92A3, 0x92A4, 0x92A5, 0x92A6, 0x92A7, 0x92A8, /* 0x20 */ + 0x92A9, 0x92AA, 0x92AB, 0x92AC, 0x92AD, 0x92AE, 0x92AF, 0x92B0, /* 0x20 */ + 0x92B1, 0x92B3, 0x92B4, 0x92B5, 0x92B6, 0x92B7, 0x92B8, 0x92B9, /* 0x30 */ + 0x92BA, 0x92BB, 0x92BC, 0x92BD, 0x92C1, 0x92C2, 0x92C3, 0x92C4, /* 0x30 */ + 0x92C5, 0x92C6, 0x92C7, 0x92C8, 0x92C9, 0x92CA, 0x92CB, 0x92CC, /* 0x40 */ + 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, 0x92D3, 0x92D4, 0x92D5, /* 0x40 */ + 0x92D6, 0x92D7, 0x92D8, 0x92D9, 0x92DA, 0x92DB, 0x92DC, 0x92DD, /* 0x50 */ + 0x92E1, 0x92E2, 0x92E3, 0x92E4, 0x92E5, 0x92E6, 0x92E7, 0x92E8, /* 0x50 */ + 0x92E9, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, /* 0x60 */ + 0x92F1, 0x92F3, 0x92F4, 0x92F5, 0x92F6, 0x92F7, 0x92F8, 0x92F9, /* 0x60 */ + 0x92FA, 0x92FB, 0x92FC, 0x92FD, 0x9341, 0x9342, 0x9343, 0x9344, /* 0x70 */ + 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934A, 0x934B, 0x934C, /* 0x70 */ + 0x934D, 0x934E, 0x934F, 0x9350, 0x9351, 0x9353, 0x9354, 0x9355, /* 0x80 */ + 0x9356, 0x9357, 0x9358, 0x9359, 0x935A, 0x935B, 0x935C, 0x935D, /* 0x80 */ + 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, /* 0x90 */ + 0x9369, 0x936A, 0x936B, 0x936C, 0x936D, 0x936E, 0x936F, 0x9370, /* 0x90 */ + 0x9371, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, /* 0xA0 */ + 0x937A, 0x937B, 0x937C, 0x937D, 0x9381, 0x9382, 0x9383, 0x9384, /* 0xA0 */ + 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0x938B, 0x938C, /* 0xB0 */ + 0x938D, 0x938E, 0x938F, 0x9390, 0x9391, 0x9393, 0x9394, 0x9395, /* 0xB0 */ + 0x9396, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, /* 0xC0 */ + 0x93A1, 0x93A2, 0x93A3, 0x93A4, 0x93A5, 0x93A6, 0x93A7, 0x93A8, /* 0xC0 */ + 0x93A9, 0x93AA, 0x93AB, 0x93AC, 0x93AD, 0x93AE, 0x93AF, 0x93B0, /* 0xD0 */ + 0x93B1, 0x93B3, 0x93B4, 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, /* 0xD0 */ + 0x93BA, 0x93BB, 0x93BC, 0x93BD, 0x9461, 0x9462, 0x9463, 0x9464, /* 0xE0 */ + 0x9465, 0x9466, 0x9467, 0x9468, 0x9469, 0x946A, 0x946B, 0x946C, /* 0xE0 */ + 0x946D, 0x946E, 0x946F, 0x9470, 0x9471, 0x9473, 0x9474, 0x9475, /* 0xF0 */ + 0x9476, 0x9477, 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, 0x947D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, 0x9488, /* 0x00 */ + 0x9489, 0x948A, 0x948B, 0x948C, 0x948D, 0x948E, 0x948F, 0x9490, /* 0x00 */ + 0x9491, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499, /* 0x10 */ + 0x949A, 0x949B, 0x949C, 0x949D, 0x94A1, 0x94A2, 0x94A3, 0x94A4, /* 0x10 */ + 0x94A5, 0x94A6, 0x94A7, 0x94A8, 0x94A9, 0x94AA, 0x94AB, 0x94AC, /* 0x20 */ + 0x94AD, 0x94AE, 0x94AF, 0x94B0, 0x94B1, 0x94B3, 0x94B4, 0x94B5, /* 0x20 */ + 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD, /* 0x30 */ + 0x94C1, 0x94C2, 0x94C3, 0x94C4, 0x94C5, 0x94C6, 0x94C7, 0x94C8, /* 0x30 */ + 0x94C9, 0x94CA, 0x94CB, 0x94CC, 0x94CD, 0x94CE, 0x94CF, 0x94D0, /* 0x40 */ + 0x94D1, 0x94D3, 0x94D4, 0x94D5, 0x94D6, 0x94D7, 0x94D8, 0x94D9, /* 0x40 */ + 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94E1, 0x94E2, 0x94E3, 0x94E4, /* 0x50 */ + 0x94E5, 0x94E6, 0x94E7, 0x94E8, 0x94E9, 0x94EA, 0x94EB, 0x94EC, /* 0x50 */ + 0x94ED, 0x94EE, 0x94EF, 0x94F0, 0x94F1, 0x94F3, 0x94F4, 0x94F5, /* 0x60 */ + 0x94F6, 0x94F7, 0x94F8, 0x94F9, 0x94FA, 0x94FB, 0x94FC, 0x94FD, /* 0x60 */ + 0x9541, 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548, /* 0x70 */ + 0x9549, 0x954A, 0x954B, 0x954C, 0x954D, 0x954E, 0x954F, 0x9550, /* 0x70 */ + 0x9551, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, /* 0x80 */ + 0x955A, 0x955B, 0x955C, 0x955D, 0x9561, 0x9562, 0x9563, 0x9564, /* 0x80 */ + 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956A, 0x956B, 0x956C, /* 0x90 */ + 0x956D, 0x956E, 0x956F, 0x9570, 0x9571, 0x9573, 0x9574, 0x9575, /* 0x90 */ + 0x9576, 0x9577, 0x9578, 0x9579, 0x957A, 0x957B, 0x957C, 0x957D, /* 0xA0 */ + 0x9581, 0x9582, 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, /* 0xA0 */ + 0x9589, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0x958F, 0x9590, /* 0xB0 */ + 0x9591, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, /* 0xB0 */ + 0x959A, 0x959B, 0x959C, 0x959D, 0x95A1, 0x95A2, 0x95A3, 0x95A4, /* 0xC0 */ + 0x95A5, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0x95AA, 0x95AB, 0x95AC, /* 0xC0 */ + 0x95AD, 0x95AE, 0x95AF, 0x95B0, 0x95B1, 0x95B3, 0x95B4, 0x95B5, /* 0xD0 */ + 0x95B6, 0x95B7, 0x95B8, 0x95B9, 0x95BA, 0x95BB, 0x95BC, 0x95BD, /* 0xD0 */ + 0x95C1, 0x95C2, 0x95C3, 0x95C4, 0x95C5, 0x95C6, 0x95C7, 0x95C8, /* 0xE0 */ + 0x95C9, 0x95CA, 0x95CB, 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, /* 0xE0 */ + 0x95D1, 0x95D3, 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, /* 0xF0 */ + 0x95DA, 0x95DB, 0x95DC, 0x95DD, 0x95E1, 0x95E2, 0x95E3, 0x95E4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x95E5, 0x95E6, 0x95E7, 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, /* 0x00 */ + 0x95ED, 0x95EE, 0x95EF, 0x95F0, 0x95F1, 0x95F3, 0x95F4, 0x95F5, /* 0x00 */ + 0x95F6, 0x95F7, 0x95F8, 0x95F9, 0x95FA, 0x95FB, 0x95FC, 0x95FD, /* 0x10 */ + 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, 0x9648, /* 0x10 */ + 0x9649, 0x964A, 0x964B, 0x964C, 0x964D, 0x964E, 0x964F, 0x9650, /* 0x20 */ + 0x9651, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659, /* 0x20 */ + 0x965A, 0x965B, 0x965C, 0x965D, 0x9661, 0x9662, 0x9663, 0x9664, /* 0x30 */ + 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966A, 0x966B, 0x966C, /* 0x30 */ + 0x966D, 0x966E, 0x966F, 0x9670, 0x9671, 0x9673, 0x9674, 0x9675, /* 0x40 */ + 0x9676, 0x9677, 0x9678, 0x9679, 0x967A, 0x967B, 0x967C, 0x967D, /* 0x40 */ + 0x9681, 0x9682, 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, 0x9688, /* 0x50 */ + 0x9689, 0x968A, 0x968B, 0x968C, 0x968D, 0x968E, 0x968F, 0x9690, /* 0x50 */ + 0x9691, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697, 0x9698, 0x9699, /* 0x60 */ + 0x969A, 0x969B, 0x969C, 0x969D, 0x96A1, 0x96A2, 0x96A3, 0x96A4, /* 0x60 */ + 0x96A5, 0x96A6, 0x96A7, 0x96A8, 0x96A9, 0x96AA, 0x96AB, 0x96AC, /* 0x70 */ + 0x96AD, 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B3, 0x96B4, 0x96B5, /* 0x70 */ + 0x96B6, 0x96B7, 0x96B8, 0x96B9, 0x96BA, 0x96BB, 0x96BC, 0x96BD, /* 0x80 */ + 0x96C1, 0x96C2, 0x96C3, 0x96C4, 0x96C5, 0x96C6, 0x96C7, 0x96C8, /* 0x80 */ + 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0x96CD, 0x96CE, 0x96CF, 0x96D0, /* 0x90 */ + 0x96D1, 0x96D3, 0x96D4, 0x96D5, 0x96D6, 0x96D7, 0x96D8, 0x96D9, /* 0x90 */ + 0x96DA, 0x96DB, 0x96DC, 0x96DD, 0x96E1, 0x96E2, 0x96E3, 0x96E4, /* 0xA0 */ + 0x96E5, 0x96E6, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, 0x96EC, /* 0xA0 */ + 0x96ED, 0x96EE, 0x96EF, 0x96F0, 0x96F1, 0x96F3, 0x96F4, 0x96F5, /* 0xB0 */ + 0x96F6, 0x96F7, 0x96F8, 0x96F9, 0x96FA, 0x96FB, 0x96FC, 0x96FD, /* 0xB0 */ + 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, 0x9748, /* 0xC0 */ + 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, 0x974E, 0x974F, 0x9750, /* 0xC0 */ + 0x9751, 0x9753, 0x9754, 0x9755, 0x9756, 0x9757, 0x9758, 0x9759, /* 0xD0 */ + 0x975A, 0x975B, 0x975C, 0x975D, 0x9761, 0x9762, 0x9763, 0x9764, /* 0xD0 */ + 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976A, 0x976B, 0x976C, /* 0xE0 */ + 0x976D, 0x976E, 0x976F, 0x9770, 0x9771, 0x9773, 0x9774, 0x9775, /* 0xE0 */ + 0x9776, 0x9777, 0x9778, 0x9779, 0x977A, 0x977B, 0x977C, 0x977D, /* 0xF0 */ + 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, 0x9788 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9789, 0x978A, 0x978B, 0x978C, 0x978D, 0x978E, 0x978F, 0x9790, /* 0x00 */ + 0x9791, 0x9793, 0x9794, 0x9795, 0x9796, 0x9797, 0x9798, 0x9799, /* 0x00 */ + 0x979A, 0x979B, 0x979C, 0x979D, 0x97A1, 0x97A2, 0x97A3, 0x97A4, /* 0x10 */ + 0x97A5, 0x97A6, 0x97A7, 0x97A8, 0x97A9, 0x97AA, 0x97AB, 0x97AC, /* 0x10 */ + 0x97AD, 0x97AE, 0x97AF, 0x97B0, 0x97B1, 0x97B3, 0x97B4, 0x97B5, /* 0x20 */ + 0x97B6, 0x97B7, 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BD, /* 0x20 */ + 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, /* 0x30 */ + 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0x9870, /* 0x30 */ + 0x9871, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, 0x9879, /* 0x40 */ + 0x987A, 0x987B, 0x987C, 0x987D, 0x9881, 0x9882, 0x9883, 0x9884, /* 0x40 */ + 0x9885, 0x9886, 0x9887, 0x9888, 0x9889, 0x988A, 0x988B, 0x988C, /* 0x50 */ + 0x988D, 0x988E, 0x988F, 0x9890, 0x9891, 0x9893, 0x9894, 0x9895, /* 0x50 */ + 0x9896, 0x9897, 0x9898, 0x9899, 0x989A, 0x989B, 0x989C, 0x989D, /* 0x60 */ + 0x98A1, 0x98A2, 0x98A3, 0x98A4, 0x98A5, 0x98A6, 0x98A7, 0x98A8, /* 0x60 */ + 0x98A9, 0x98AA, 0x98AB, 0x98AC, 0x98AD, 0x98AE, 0x98AF, 0x98B0, /* 0x70 */ + 0x98B1, 0x98B3, 0x98B4, 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, /* 0x70 */ + 0x98BA, 0x98BB, 0x98BC, 0x98BD, 0x98C1, 0x98C2, 0x98C3, 0x98C4, /* 0x80 */ + 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0x98CB, 0x98CC, /* 0x80 */ + 0x98CD, 0x98CE, 0x98CF, 0x98D0, 0x98D1, 0x98D3, 0x98D4, 0x98D5, /* 0x90 */ + 0x98D6, 0x98D7, 0x98D8, 0x98D9, 0x98DA, 0x98DB, 0x98DC, 0x98DD, /* 0x90 */ + 0x98E1, 0x98E2, 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98E7, 0x98E8, /* 0xA0 */ + 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0x98ED, 0x98EE, 0x98EF, 0x98F0, /* 0xA0 */ + 0x98F1, 0x98F3, 0x98F4, 0x98F5, 0x98F6, 0x98F7, 0x98F8, 0x98F9, /* 0xB0 */ + 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0x9941, 0x9942, 0x9943, 0x9944, /* 0xB0 */ + 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994A, 0x994B, 0x994C, /* 0xC0 */ + 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, 0x9953, 0x9954, 0x9955, /* 0xC0 */ + 0x9956, 0x9957, 0x9958, 0x9959, 0x995A, 0x995B, 0x995C, 0x995D, /* 0xD0 */ + 0x9961, 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, /* 0xD0 */ + 0x9969, 0x996A, 0x996B, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, /* 0xE0 */ + 0x9971, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979, /* 0xE0 */ + 0x997A, 0x997B, 0x997C, 0x997D, 0x9981, 0x9982, 0x9983, 0x9984, /* 0xF0 */ + 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, 0x998A, 0x998B, 0x998C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x998D, 0x998E, 0x998F, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, /* 0x00 */ + 0x9996, 0x9997, 0x9998, 0x9999, 0x999A, 0x999B, 0x999C, 0x999D, /* 0x00 */ + 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A5, 0x99A6, 0x99A7, 0x99A8, /* 0x10 */ + 0x99A9, 0x99AA, 0x99AB, 0x99AC, 0x99AD, 0x99AE, 0x99AF, 0x99B0, /* 0x10 */ + 0x99B1, 0x99B3, 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0x99B8, 0x99B9, /* 0x20 */ + 0x99BA, 0x99BB, 0x99BC, 0x99BD, 0x99C1, 0x99C2, 0x99C3, 0x99C4, /* 0x20 */ + 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, /* 0x30 */ + 0x99CD, 0x99CE, 0x99CF, 0x99D0, 0x99D1, 0x99D3, 0x99D4, 0x99D5, /* 0x30 */ + 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, /* 0x40 */ + 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7, 0x99E8, /* 0x40 */ + 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0x99F0, /* 0x50 */ + 0x99F1, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, 0x99F8, 0x99F9, /* 0x50 */ + 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x9A41, 0x9A42, 0x9A43, 0x9A44, /* 0x60 */ + 0x9A45, 0x9A46, 0x9A47, 0x9A48, 0x9A49, 0x9A4A, 0x9A4B, 0x9A4C, /* 0x60 */ + 0x9A4D, 0x9A4E, 0x9A4F, 0x9A50, 0x9A51, 0x9A53, 0x9A54, 0x9A55, /* 0x70 */ + 0x9A56, 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, /* 0x70 */ + 0x9A61, 0x9A62, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0x9A68, /* 0x80 */ + 0x9A69, 0x9A6A, 0x9A6B, 0x9A6C, 0x9A6D, 0x9A6E, 0x9A6F, 0x9A70, /* 0x80 */ + 0x9A71, 0x9A73, 0x9A74, 0x9A75, 0x9A76, 0x9A77, 0x9A78, 0x9A79, /* 0x90 */ + 0x9A7A, 0x9A7B, 0x9A7C, 0x9A7D, 0x9A81, 0x9A82, 0x9A83, 0x9A84, /* 0x90 */ + 0x9A85, 0x9A86, 0x9A87, 0x9A88, 0x9A89, 0x9A8A, 0x9A8B, 0x9A8C, /* 0xA0 */ + 0x9A8D, 0x9A8E, 0x9A8F, 0x9A90, 0x9A91, 0x9A93, 0x9A94, 0x9A95, /* 0xA0 */ + 0x9A96, 0x9A97, 0x9A98, 0x9A99, 0x9A9A, 0x9A9B, 0x9A9C, 0x9A9D, /* 0xB0 */ + 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, 0x9AA7, 0x9AA8, /* 0xB0 */ + 0x9AA9, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, 0x9AAE, 0x9AAF, 0x9AB0, /* 0xC0 */ + 0x9AB1, 0x9AB3, 0x9AB4, 0x9AB5, 0x9AB6, 0x9AB7, 0x9AB8, 0x9AB9, /* 0xC0 */ + 0x9ABA, 0x9ABB, 0x9ABC, 0x9ABD, 0x9AC1, 0x9AC2, 0x9AC3, 0x9AC4, /* 0xD0 */ + 0x9AC5, 0x9AC6, 0x9AC7, 0x9AC8, 0x9AC9, 0x9ACA, 0x9ACB, 0x9ACC, /* 0xD0 */ + 0x9ACD, 0x9ACE, 0x9ACF, 0x9AD0, 0x9AD1, 0x9AD3, 0x9AD4, 0x9AD5, /* 0xE0 */ + 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, 0x9ADB, 0x9ADC, 0x9ADD, /* 0xE0 */ + 0x9AE1, 0x9AE2, 0x9AE3, 0x9AE4, 0x9AE5, 0x9AE6, 0x9AE7, 0x9AE8, /* 0xF0 */ + 0x9AE9, 0x9AEA, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0x9AEF, 0x9AF0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9AF1, 0x9AF3, 0x9AF4, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, /* 0x00 */ + 0x9AFA, 0x9AFB, 0x9AFC, 0x9AFD, 0x9B41, 0x9B42, 0x9B43, 0x9B44, /* 0x00 */ + 0x9B45, 0x9B46, 0x9B47, 0x9B48, 0x9B49, 0x9B4A, 0x9B4B, 0x9B4C, /* 0x10 */ + 0x9B4D, 0x9B4E, 0x9B4F, 0x9B50, 0x9B51, 0x9B53, 0x9B54, 0x9B55, /* 0x10 */ + 0x9B56, 0x9B57, 0x9B58, 0x9B59, 0x9B5A, 0x9B5B, 0x9B5C, 0x9B5D, /* 0x20 */ + 0x9B61, 0x9B62, 0x9B63, 0x9B64, 0x9B65, 0x9B66, 0x9B67, 0x9B68, /* 0x20 */ + 0x9B69, 0x9B6A, 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, 0x9B70, /* 0x30 */ + 0x9B71, 0x9B73, 0x9B74, 0x9B75, 0x9B76, 0x9B77, 0x9B78, 0x9B79, /* 0x30 */ + 0x9B7A, 0x9B7B, 0x9B7C, 0x9B7D, 0x9B81, 0x9B82, 0x9B83, 0x9B84, /* 0x40 */ + 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, 0x9B8B, 0x9B8C, /* 0x40 */ + 0x9B8D, 0x9B8E, 0x9B8F, 0x9B90, 0x9B91, 0x9B93, 0x9B94, 0x9B95, /* 0x50 */ + 0x9B96, 0x9B97, 0x9B98, 0x9B99, 0x9B9A, 0x9B9B, 0x9B9C, 0x9B9D, /* 0x50 */ + 0x9BA1, 0x9BA2, 0x9BA3, 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0x9BA8, /* 0x60 */ + 0x9BA9, 0x9BAA, 0x9BAB, 0x9BAC, 0x9BAD, 0x9BAE, 0x9BAF, 0x9BB0, /* 0x60 */ + 0x9BB1, 0x9BB3, 0x9BB4, 0x9BB5, 0x9BB6, 0x9BB7, 0x9BB8, 0x9BB9, /* 0x70 */ + 0x9BBA, 0x9BBB, 0x9BBC, 0x9BBD, 0x9C61, 0x9C62, 0x9C63, 0x9C64, /* 0x70 */ + 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0x9C69, 0x9C6A, 0x9C6B, 0x9C6C, /* 0x80 */ + 0x9C6D, 0x9C6E, 0x9C6F, 0x9C70, 0x9C71, 0x9C73, 0x9C74, 0x9C75, /* 0x80 */ + 0x9C76, 0x9C77, 0x9C78, 0x9C79, 0x9C7A, 0x9C7B, 0x9C7C, 0x9C7D, /* 0x90 */ + 0x9C81, 0x9C82, 0x9C83, 0x9C84, 0x9C85, 0x9C86, 0x9C87, 0x9C88, /* 0x90 */ + 0x9C89, 0x9C8A, 0x9C8B, 0x9C8C, 0x9C8D, 0x9C8E, 0x9C8F, 0x9C90, /* 0xA0 */ + 0x9C91, 0x9C93, 0x9C94, 0x9C95, 0x9C96, 0x9C97, 0x9C98, 0x9C99, /* 0xA0 */ + 0x9C9A, 0x9C9B, 0x9C9C, 0x9C9D, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, /* 0xB0 */ + 0x9CA5, 0x9CA6, 0x9CA7, 0x9CA8, 0x9CA9, 0x9CAA, 0x9CAB, 0x9CAC, /* 0xB0 */ + 0x9CAD, 0x9CAE, 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB3, 0x9CB4, 0x9CB5, /* 0xC0 */ + 0x9CB6, 0x9CB7, 0x9CB8, 0x9CB9, 0x9CBA, 0x9CBB, 0x9CBC, 0x9CBD, /* 0xC0 */ + 0x9CC1, 0x9CC2, 0x9CC3, 0x9CC4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CC8, /* 0xD0 */ + 0x9CC9, 0x9CCA, 0x9CCB, 0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, /* 0xD0 */ + 0x9CD1, 0x9CD3, 0x9CD4, 0x9CD5, 0x9CD6, 0x9CD7, 0x9CD8, 0x9CD9, /* 0xE0 */ + 0x9CDA, 0x9CDB, 0x9CDC, 0x9CDD, 0x9CE1, 0x9CE2, 0x9CE3, 0x9CE4, /* 0xE0 */ + 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0x9CE9, 0x9CEA, 0x9CEB, 0x9CEC, /* 0xF0 */ + 0x9CED, 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0x9CF3, 0x9CF4, 0x9CF5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9CF6, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, 0x9CFD, /* 0x00 */ + 0x9D41, 0x9D42, 0x9D43, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0x9D48, /* 0x00 */ + 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0x9D50, /* 0x10 */ + 0x9D51, 0x9D53, 0x9D54, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, /* 0x10 */ + 0x9D5A, 0x9D5B, 0x9D5C, 0x9D5D, 0x9D61, 0x9D62, 0x9D63, 0x9D64, /* 0x20 */ + 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69, 0x9D6A, 0x9D6B, 0x9D6C, /* 0x20 */ + 0x9D6D, 0x9D6E, 0x9D6F, 0x9D70, 0x9D71, 0x9D73, 0x9D74, 0x9D75, /* 0x30 */ + 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0x9D7B, 0x9D7C, 0x9D7D, /* 0x30 */ + 0x9D81, 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D87, 0x9D88, /* 0x40 */ + 0x9D89, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, /* 0x40 */ + 0x9D91, 0x9D93, 0x9D94, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9D99, /* 0x50 */ + 0x9D9A, 0x9D9B, 0x9D9C, 0x9D9D, 0x9DA1, 0x9DA2, 0x9DA3, 0x9DA4, /* 0x50 */ + 0x9DA5, 0x9DA6, 0x9DA7, 0x9DA8, 0x9DA9, 0x9DAA, 0x9DAB, 0x9DAC, /* 0x60 */ + 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0x9DB1, 0x9DB3, 0x9DB4, 0x9DB5, /* 0x60 */ + 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, 0x9DBC, 0x9DBD, /* 0x70 */ + 0x9DC1, 0x9DC2, 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0x9DC7, 0x9DC8, /* 0x70 */ + 0x9DC9, 0x9DCA, 0x9DCB, 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, /* 0x80 */ + 0x9DD1, 0x9DD3, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, 0x9DD8, 0x9DD9, /* 0x80 */ + 0x9DDA, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DE1, 0x9DE2, 0x9DE3, 0x9DE4, /* 0x90 */ + 0x9DE5, 0x9DE6, 0x9DE7, 0x9DE8, 0x9DE9, 0x9DEA, 0x9DEB, 0x9DEC, /* 0x90 */ + 0x9DED, 0x9DEE, 0x9DEF, 0x9DF0, 0x9DF1, 0x9DF3, 0x9DF4, 0x9DF5, /* 0xA0 */ + 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0x9DFA, 0x9DFB, 0x9DFC, 0x9DFD, /* 0xA0 */ + 0x9E41, 0x9E42, 0x9E43, 0x9E44, 0x9E45, 0x9E46, 0x9E47, 0x9E48, /* 0xB0 */ + 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, 0x9E4F, 0x9E50, /* 0xB0 */ + 0x9E51, 0x9E53, 0x9E54, 0x9E55, 0x9E56, 0x9E57, 0x9E58, 0x9E59, /* 0xC0 */ + 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5D, 0x9E61, 0x9E62, 0x9E63, 0x9E64, /* 0xC0 */ + 0x9E65, 0x9E66, 0x9E67, 0x9E68, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, /* 0xD0 */ + 0x9E6D, 0x9E6E, 0x9E6F, 0x9E70, 0x9E71, 0x9E73, 0x9E74, 0x9E75, /* 0xD0 */ + 0x9E76, 0x9E77, 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E7D, /* 0xE0 */ + 0x9E81, 0x9E82, 0x9E83, 0x9E84, 0x9E85, 0x9E86, 0x9E87, 0x9E88, /* 0xE0 */ + 0x9E89, 0x9E8A, 0x9E8B, 0x9E8C, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, /* 0xF0 */ + 0x9E91, 0x9E93, 0x9E94, 0x9E95, 0x9E96, 0x9E97, 0x9E98, 0x9E99 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9D, 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, /* 0x00 */ + 0x9EA5, 0x9EA6, 0x9EA7, 0x9EA8, 0x9EA9, 0x9EAA, 0x9EAB, 0x9EAC, /* 0x00 */ + 0x9EAD, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB1, 0x9EB3, 0x9EB4, 0x9EB5, /* 0x10 */ + 0x9EB6, 0x9EB7, 0x9EB8, 0x9EB9, 0x9EBA, 0x9EBB, 0x9EBC, 0x9EBD, /* 0x10 */ + 0x9EC1, 0x9EC2, 0x9EC3, 0x9EC4, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, /* 0x20 */ + 0x9EC9, 0x9ECA, 0x9ECB, 0x9ECC, 0x9ECD, 0x9ECE, 0x9ECF, 0x9ED0, /* 0x20 */ + 0x9ED1, 0x9ED3, 0x9ED4, 0x9ED5, 0x9ED6, 0x9ED7, 0x9ED8, 0x9ED9, /* 0x30 */ + 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE1, 0x9EE2, 0x9EE3, 0x9EE4, /* 0x30 */ + 0x9EE5, 0x9EE6, 0x9EE7, 0x9EE8, 0x9EE9, 0x9EEA, 0x9EEB, 0x9EEC, /* 0x40 */ + 0x9EED, 0x9EEE, 0x9EEF, 0x9EF0, 0x9EF1, 0x9EF3, 0x9EF4, 0x9EF5, /* 0x40 */ + 0x9EF6, 0x9EF7, 0x9EF8, 0x9EF9, 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, /* 0x50 */ + 0x9F41, 0x9F42, 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, 0x9F48, /* 0x50 */ + 0x9F49, 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, /* 0x60 */ + 0x9F51, 0x9F53, 0x9F54, 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F59, /* 0x60 */ + 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F61, 0x9F62, 0x9F63, 0x9F64, /* 0x70 */ + 0x9F65, 0x9F66, 0x9F67, 0x9F68, 0x9F69, 0x9F6A, 0x9F6B, 0x9F6C, /* 0x70 */ + 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F74, 0x9F75, /* 0x80 */ + 0x9F76, 0x9F77, 0x9F78, 0x9F79, 0x9F7A, 0x9F7B, 0x9F7C, 0x9F7D, /* 0x80 */ + 0x9F81, 0x9F82, 0x9F83, 0x9F84, 0x9F85, 0x9F86, 0x9F87, 0x9F88, /* 0x90 */ + 0x9F89, 0x9F8A, 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0x9F8F, 0x9F90, /* 0x90 */ + 0x9F91, 0x9F93, 0x9F94, 0x9F95, 0x9F96, 0x9F97, 0x9F98, 0x9F99, /* 0xA0 */ + 0x9F9A, 0x9F9B, 0x9F9C, 0x9F9D, 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA4, /* 0xA0 */ + 0x9FA5, 0x9FA6, 0x9FA7, 0x9FA8, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, /* 0xB0 */ + 0x9FAD, 0x9FAE, 0x9FAF, 0x9FB0, 0x9FB1, 0x9FB3, 0x9FB4, 0x9FB5, /* 0xB0 */ + 0x9FB6, 0x9FB7, 0x9FB8, 0x9FB9, 0x9FBA, 0x9FBB, 0x9FBC, 0x9FBD, /* 0xC0 */ + 0xA061, 0xA062, 0xA063, 0xA064, 0xA065, 0xA066, 0xA067, 0xA068, /* 0xC0 */ + 0xA069, 0xA06A, 0xA06B, 0xA06C, 0xA06D, 0xA06E, 0xA06F, 0xA070, /* 0xD0 */ + 0xA071, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077, 0xA078, 0xA079, /* 0xD0 */ + 0xA07A, 0xA07B, 0xA07C, 0xA07D, 0xA081, 0xA082, 0xA083, 0xA084, /* 0xE0 */ + 0xA085, 0xA086, 0xA087, 0xA088, 0xA089, 0xA08A, 0xA08B, 0xA08C, /* 0xE0 */ + 0xA08D, 0xA08E, 0xA08F, 0xA090, 0xA091, 0xA093, 0xA094, 0xA095, /* 0xF0 */ + 0xA096, 0xA097, 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA0A1, 0xA0A2, 0xA0A3, 0xA0A4, 0xA0A5, 0xA0A6, 0xA0A7, 0xA0A8, /* 0x00 */ + 0xA0A9, 0xA0AA, 0xA0AB, 0xA0AC, 0xA0AD, 0xA0AE, 0xA0AF, 0xA0B0, /* 0x00 */ + 0xA0B1, 0xA0B3, 0xA0B4, 0xA0B5, 0xA0B6, 0xA0B7, 0xA0B8, 0xA0B9, /* 0x10 */ + 0xA0BA, 0xA0BB, 0xA0BC, 0xA0BD, 0xA0C1, 0xA0C2, 0xA0C3, 0xA0C4, /* 0x10 */ + 0xA0C5, 0xA0C6, 0xA0C7, 0xA0C8, 0xA0C9, 0xA0CA, 0xA0CB, 0xA0CC, /* 0x20 */ + 0xA0CD, 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D3, 0xA0D4, 0xA0D5, /* 0x20 */ + 0xA0D6, 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, /* 0x30 */ + 0xA0E1, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0E6, 0xA0E7, 0xA0E8, /* 0x30 */ + 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, 0xA0EE, 0xA0EF, 0xA0F0, /* 0x40 */ + 0xA0F1, 0xA0F3, 0xA0F4, 0xA0F5, 0xA0F6, 0xA0F7, 0xA0F8, 0xA0F9, /* 0x40 */ + 0xA0FA, 0xA0FB, 0xA0FC, 0xA0FD, 0xA141, 0xA142, 0xA143, 0xA144, /* 0x50 */ + 0xA145, 0xA146, 0xA147, 0xA148, 0xA149, 0xA14A, 0xA14B, 0xA14C, /* 0x50 */ + 0xA14D, 0xA14E, 0xA14F, 0xA150, 0xA151, 0xA153, 0xA154, 0xA155, /* 0x60 */ + 0xA156, 0xA157, 0xA158, 0xA159, 0xA15A, 0xA15B, 0xA15C, 0xA15D, /* 0x60 */ + 0xA161, 0xA162, 0xA163, 0xA164, 0xA165, 0xA166, 0xA167, 0xA168, /* 0x70 */ + 0xA169, 0xA16A, 0xA16B, 0xA16C, 0xA16D, 0xA16E, 0xA16F, 0xA170, /* 0x70 */ + 0xA171, 0xA173, 0xA174, 0xA175, 0xA176, 0xA177, 0xA178, 0xA179, /* 0x80 */ + 0xA17A, 0xA17B, 0xA17C, 0xA17D, 0xA181, 0xA182, 0xA183, 0xA184, /* 0x80 */ + 0xA185, 0xA186, 0xA187, 0xA188, 0xA189, 0xA18A, 0xA18B, 0xA18C, /* 0x90 */ + 0xA18D, 0xA18E, 0xA18F, 0xA190, 0xA191, 0xA193, 0xA194, 0xA195, /* 0x90 */ + 0xA196, 0xA197, 0xA198, 0xA199, 0xA19A, 0xA19B, 0xA19C, 0xA19D, /* 0xA0 */ + 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A4, 0xA1A5, 0xA1A6, 0xA1A7, 0xA1A8, /* 0xA0 */ + 0xA1A9, 0xA1AA, 0xA1AB, 0xA1AC, 0xA1AD, 0xA1AE, 0xA1AF, 0xA1B0, /* 0xB0 */ + 0xA1B1, 0xA1B3, 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, /* 0xB0 */ + 0xA1BA, 0xA1BB, 0xA1BC, 0xA1BD, 0xA1C1, 0xA1C2, 0xA1C3, 0xA1C4, /* 0xC0 */ + 0xA1C5, 0xA1C6, 0xA1C7, 0xA1C8, 0xA1C9, 0xA1CA, 0xA1CB, 0xA1CC, /* 0xC0 */ + 0xA1CD, 0xA1CE, 0xA1CF, 0xA1D0, 0xA1D1, 0xA1D3, 0xA1D4, 0xA1D5, /* 0xD0 */ + 0xA1D6, 0xA1D7, 0xA1D8, 0xA1D9, 0xA1DA, 0xA1DB, 0xA1DC, 0xA1DD, /* 0xD0 */ + 0xA1E1, 0xA1E2, 0xA1E3, 0xA1E4, 0xA1E5, 0xA1E6, 0xA1E7, 0xA1E8, /* 0xE0 */ + 0xA1E9, 0xA1EA, 0xA1EB, 0xA1EC, 0xA1ED, 0xA1EE, 0xA1EF, 0xA1F0, /* 0xE0 */ + 0xA1F1, 0xA1F3, 0xA1F4, 0xA1F5, 0xA1F6, 0xA1F7, 0xA1F8, 0xA1F9, /* 0xF0 */ + 0xA1FA, 0xA1FB, 0xA1FC, 0xA1FD, 0xA241, 0xA242, 0xA243, 0xA244 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA245, 0xA246, 0xA247, 0xA248, 0xA249, 0xA24A, 0xA24B, 0xA24C, /* 0x00 */ + 0xA24D, 0xA24E, 0xA24F, 0xA250, 0xA251, 0xA253, 0xA254, 0xA255, /* 0x00 */ + 0xA256, 0xA257, 0xA258, 0xA259, 0xA25A, 0xA25B, 0xA25C, 0xA25D, /* 0x10 */ + 0xA261, 0xA262, 0xA263, 0xA264, 0xA265, 0xA266, 0xA267, 0xA268, /* 0x10 */ + 0xA269, 0xA26A, 0xA26B, 0xA26C, 0xA26D, 0xA26E, 0xA26F, 0xA270, /* 0x20 */ + 0xA271, 0xA273, 0xA274, 0xA275, 0xA276, 0xA277, 0xA278, 0xA279, /* 0x20 */ + 0xA27A, 0xA27B, 0xA27C, 0xA27D, 0xA281, 0xA282, 0xA283, 0xA284, /* 0x30 */ + 0xA285, 0xA286, 0xA287, 0xA288, 0xA289, 0xA28A, 0xA28B, 0xA28C, /* 0x30 */ + 0xA28D, 0xA28E, 0xA28F, 0xA290, 0xA291, 0xA293, 0xA294, 0xA295, /* 0x40 */ + 0xA296, 0xA297, 0xA298, 0xA299, 0xA29A, 0xA29B, 0xA29C, 0xA29D, /* 0x40 */ + 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x50 */ + 0xA2A9, 0xA2AA, 0xA2AB, 0xA2AC, 0xA2AD, 0xA2AE, 0xA2AF, 0xA2B0, /* 0x50 */ + 0xA2B1, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7, 0xA2B8, 0xA2B9, /* 0x60 */ + 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2C1, 0xA2C2, 0xA2C3, 0xA2C4, /* 0x60 */ + 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC, /* 0x70 */ + 0xA2CD, 0xA2CE, 0xA2CF, 0xA2D0, 0xA2D1, 0xA2D3, 0xA2D4, 0xA2D5, /* 0x70 */ + 0xA2D6, 0xA2D7, 0xA2D8, 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, /* 0x80 */ + 0xA2E1, 0xA2E2, 0xA2E3, 0xA2E4, 0xA2E5, 0xA2E6, 0xA2E7, 0xA2E8, /* 0x80 */ + 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE, 0xA2EF, 0xA2F0, /* 0x90 */ + 0xA2F1, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, 0xA2F9, /* 0x90 */ + 0xA2FA, 0xA2FB, 0xA2FC, 0xA2FD, 0xA341, 0xA342, 0xA343, 0xA344, /* 0xA0 */ + 0xA345, 0xA346, 0xA347, 0xA348, 0xA349, 0xA34A, 0xA34B, 0xA34C, /* 0xA0 */ + 0xA34D, 0xA34E, 0xA34F, 0xA350, 0xA351, 0xA353, 0xA354, 0xA355, /* 0xB0 */ + 0xA356, 0xA357, 0xA358, 0xA359, 0xA35A, 0xA35B, 0xA35C, 0xA35D, /* 0xB0 */ + 0xA361, 0xA362, 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, 0xA368, /* 0xC0 */ + 0xA369, 0xA36A, 0xA36B, 0xA36C, 0xA36D, 0xA36E, 0xA36F, 0xA370, /* 0xC0 */ + 0xA371, 0xA373, 0xA374, 0xA375, 0xA376, 0xA377, 0xA378, 0xA379, /* 0xD0 */ + 0xA37A, 0xA37B, 0xA37C, 0xA37D, 0xA381, 0xA382, 0xA383, 0xA384, /* 0xD0 */ + 0xA385, 0xA386, 0xA387, 0xA388, 0xA389, 0xA38A, 0xA38B, 0xA38C, /* 0xE0 */ + 0xA38D, 0xA38E, 0xA38F, 0xA390, 0xA391, 0xA393, 0xA394, 0xA395, /* 0xE0 */ + 0xA396, 0xA397, 0xA398, 0xA399, 0xA39A, 0xA39B, 0xA39C, 0xA39D, /* 0xF0 */ + 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7, 0xA3A8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, 0xA3B0, /* 0x00 */ + 0xA3B1, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, 0xA3B8, 0xA3B9, /* 0x00 */ + 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA461, 0xA462, 0xA463, 0xA464, /* 0x10 */ + 0xA465, 0xA466, 0xA467, 0xA468, 0xA469, 0xA46A, 0xA46B, 0xA46C, /* 0x10 */ + 0xA46D, 0xA46E, 0xA46F, 0xA470, 0xA471, 0xA473, 0xA474, 0xA475, /* 0x20 */ + 0xA476, 0xA477, 0xA478, 0xA479, 0xA47A, 0xA47B, 0xA47C, 0xA47D, /* 0x20 */ + 0xA481, 0xA482, 0xA483, 0xA484, 0xA485, 0xA486, 0xA487, 0xA488, /* 0x30 */ + 0xA489, 0xA48A, 0xA48B, 0xA48C, 0xA48D, 0xA48E, 0xA48F, 0xA490, /* 0x30 */ + 0xA491, 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, 0xA499, /* 0x40 */ + 0xA49A, 0xA49B, 0xA49C, 0xA49D, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, /* 0x40 */ + 0xA4A5, 0xA4A6, 0xA4A7, 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, /* 0x50 */ + 0xA4AD, 0xA4AE, 0xA4AF, 0xA4B0, 0xA4B1, 0xA4B3, 0xA4B4, 0xA4B5, /* 0x50 */ + 0xA4B6, 0xA4B7, 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, /* 0x60 */ + 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, 0xA4C8, /* 0x60 */ + 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, 0xA4D0, /* 0x70 */ + 0xA4D1, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, 0xA4D8, 0xA4D9, /* 0x70 */ + 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, /* 0x80 */ + 0xA4E5, 0xA4E6, 0xA4E7, 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, /* 0x80 */ + 0xA4ED, 0xA4EE, 0xA4EF, 0xA4F0, 0xA4F1, 0xA4F3, 0xA4F4, 0xA4F5, /* 0x90 */ + 0xA4F6, 0xA4F7, 0xA4F8, 0xA4F9, 0xA4FA, 0xA4FB, 0xA4FC, 0xA4FD, /* 0x90 */ + 0xA541, 0xA542, 0xA543, 0xA544, 0xA545, 0xA546, 0xA547, 0xA548, /* 0xA0 */ + 0xA549, 0xA54A, 0xA54B, 0xA54C, 0xA54D, 0xA54E, 0xA54F, 0xA550, /* 0xA0 */ + 0xA551, 0xA553, 0xA554, 0xA555, 0xA556, 0xA557, 0xA558, 0xA559, /* 0xB0 */ + 0xA55A, 0xA55B, 0xA55C, 0xA55D, 0xA561, 0xA562, 0xA563, 0xA564, /* 0xB0 */ + 0xA565, 0xA566, 0xA567, 0xA568, 0xA569, 0xA56A, 0xA56B, 0xA56C, /* 0xC0 */ + 0xA56D, 0xA56E, 0xA56F, 0xA570, 0xA571, 0xA573, 0xA574, 0xA575, /* 0xC0 */ + 0xA576, 0xA577, 0xA578, 0xA579, 0xA57A, 0xA57B, 0xA57C, 0xA57D, /* 0xD0 */ + 0xA581, 0xA582, 0xA583, 0xA584, 0xA585, 0xA586, 0xA587, 0xA588, /* 0xD0 */ + 0xA589, 0xA58A, 0xA58B, 0xA58C, 0xA58D, 0xA58E, 0xA58F, 0xA590, /* 0xE0 */ + 0xA591, 0xA593, 0xA594, 0xA595, 0xA596, 0xA597, 0xA598, 0xA599, /* 0xE0 */ + 0xA59A, 0xA59B, 0xA59C, 0xA59D, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, /* 0xF0 */ + 0xA5A5, 0xA5A6, 0xA5A7, 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, 0xA5AC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA5AD, 0xA5AE, 0xA5AF, 0xA5B0, 0xA5B1, 0xA5B3, 0xA5B4, 0xA5B5, /* 0x00 */ + 0xA5B6, 0xA5B7, 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, /* 0x00 */ + 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, 0xA5C8, /* 0x10 */ + 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, 0xA5D0, /* 0x10 */ + 0xA5D1, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, 0xA5D7, 0xA5D8, 0xA5D9, /* 0x20 */ + 0xA5DA, 0xA5DB, 0xA5DC, 0xA5DD, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, /* 0x20 */ + 0xA5E5, 0xA5E6, 0xA5E7, 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, /* 0x30 */ + 0xA5ED, 0xA5EE, 0xA5EF, 0xA5F0, 0xA5F1, 0xA5F3, 0xA5F4, 0xA5F5, /* 0x30 */ + 0xA5F6, 0xA5F7, 0xA5F8, 0xA5F9, 0xA5FA, 0xA5FB, 0xA5FC, 0xA5FD, /* 0x40 */ + 0xA641, 0xA642, 0xA643, 0xA644, 0xA645, 0xA646, 0xA647, 0xA648, /* 0x40 */ + 0xA649, 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F, 0xA650, /* 0x50 */ + 0xA651, 0xA653, 0xA654, 0xA655, 0xA656, 0xA657, 0xA658, 0xA659, /* 0x50 */ + 0xA65A, 0xA65B, 0xA65C, 0xA65D, 0xA661, 0xA662, 0xA663, 0xA664, /* 0x60 */ + 0xA665, 0xA666, 0xA667, 0xA668, 0xA669, 0xA66A, 0xA66B, 0xA66C, /* 0x60 */ + 0xA66D, 0xA66E, 0xA66F, 0xA670, 0xA671, 0xA673, 0xA674, 0xA675, /* 0x70 */ + 0xA676, 0xA677, 0xA678, 0xA679, 0xA67A, 0xA67B, 0xA67C, 0xA67D, /* 0x70 */ + 0xA681, 0xA682, 0xA683, 0xA684, 0xA685, 0xA686, 0xA687, 0xA688, /* 0x80 */ + 0xA689, 0xA68A, 0xA68B, 0xA68C, 0xA68D, 0xA68E, 0xA68F, 0xA690, /* 0x80 */ + 0xA691, 0xA693, 0xA694, 0xA695, 0xA696, 0xA697, 0xA698, 0xA699, /* 0x90 */ + 0xA69A, 0xA69B, 0xA69C, 0xA69D, 0xA6A1, 0xA6A2, 0xA6A3, 0xA6A4, /* 0x90 */ + 0xA6A5, 0xA6A6, 0xA6A7, 0xA6A8, 0xA6A9, 0xA6AA, 0xA6AB, 0xA6AC, /* 0xA0 */ + 0xA6AD, 0xA6AE, 0xA6AF, 0xA6B0, 0xA6B1, 0xA6B3, 0xA6B4, 0xA6B5, /* 0xA0 */ + 0xA6B6, 0xA6B7, 0xA6B8, 0xA6B9, 0xA6BA, 0xA6BB, 0xA6BC, 0xA6BD, /* 0xB0 */ + 0xA6C1, 0xA6C2, 0xA6C3, 0xA6C4, 0xA6C5, 0xA6C6, 0xA6C7, 0xA6C8, /* 0xB0 */ + 0xA6C9, 0xA6CA, 0xA6CB, 0xA6CC, 0xA6CD, 0xA6CE, 0xA6CF, 0xA6D0, /* 0xC0 */ + 0xA6D1, 0xA6D3, 0xA6D4, 0xA6D5, 0xA6D6, 0xA6D7, 0xA6D8, 0xA6D9, /* 0xC0 */ + 0xA6DA, 0xA6DB, 0xA6DC, 0xA6DD, 0xA6E1, 0xA6E2, 0xA6E3, 0xA6E4, /* 0xD0 */ + 0xA6E5, 0xA6E6, 0xA6E7, 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB, 0xA6EC, /* 0xD0 */ + 0xA6ED, 0xA6EE, 0xA6EF, 0xA6F0, 0xA6F1, 0xA6F3, 0xA6F4, 0xA6F5, /* 0xE0 */ + 0xA6F6, 0xA6F7, 0xA6F8, 0xA6F9, 0xA6FA, 0xA6FB, 0xA6FC, 0xA6FD, /* 0xE0 */ + 0xA741, 0xA742, 0xA743, 0xA744, 0xA745, 0xA746, 0xA747, 0xA748, /* 0xF0 */ + 0xA749, 0xA74A, 0xA74B, 0xA74C, 0xA74D, 0xA74E, 0xA74F, 0xA750 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA751, 0xA753, 0xA754, 0xA755, 0xA756, 0xA757, 0xA758, 0xA759, /* 0x00 */ + 0xA75A, 0xA75B, 0xA75C, 0xA75D, 0xA761, 0xA762, 0xA763, 0xA764, /* 0x00 */ + 0xA765, 0xA766, 0xA767, 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, /* 0x10 */ + 0xA76D, 0xA76E, 0xA76F, 0xA770, 0xA771, 0xA773, 0xA774, 0xA775, /* 0x10 */ + 0xA776, 0xA777, 0xA778, 0xA779, 0xA77A, 0xA77B, 0xA77C, 0xA77D, /* 0x20 */ + 0xA781, 0xA782, 0xA783, 0xA784, 0xA785, 0xA786, 0xA787, 0xA788, /* 0x20 */ + 0xA789, 0xA78A, 0xA78B, 0xA78C, 0xA78D, 0xA78E, 0xA78F, 0xA790, /* 0x30 */ + 0xA791, 0xA793, 0xA794, 0xA795, 0xA796, 0xA797, 0xA798, 0xA799, /* 0x30 */ + 0xA79A, 0xA79B, 0xA79C, 0xA79D, 0xA7A1, 0xA7A2, 0xA7A3, 0xA7A4, /* 0x40 */ + 0xA7A5, 0xA7A6, 0xA7A7, 0xA7A8, 0xA7A9, 0xA7AA, 0xA7AB, 0xA7AC, /* 0x40 */ + 0xA7AD, 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, 0xA7B3, 0xA7B4, 0xA7B5, /* 0x50 */ + 0xA7B6, 0xA7B7, 0xA7B8, 0xA7B9, 0xA7BA, 0xA7BB, 0xA7BC, 0xA7BD, /* 0x50 */ + 0xA861, 0xA862, 0xA863, 0xA864, 0xA865, 0xA866, 0xA867, 0xA868, /* 0x60 */ + 0xA869, 0xA86A, 0xA86B, 0xA86C, 0xA86D, 0xA86E, 0xA86F, 0xA870, /* 0x60 */ + 0xA871, 0xA873, 0xA874, 0xA875, 0xA876, 0xA877, 0xA878, 0xA879, /* 0x70 */ + 0xA87A, 0xA87B, 0xA87C, 0xA87D, 0xA881, 0xA882, 0xA883, 0xA884, /* 0x70 */ + 0xA885, 0xA886, 0xA887, 0xA888, 0xA889, 0xA88A, 0xA88B, 0xA88C, /* 0x80 */ + 0xA88D, 0xA88E, 0xA88F, 0xA890, 0xA891, 0xA893, 0xA894, 0xA895, /* 0x80 */ + 0xA896, 0xA897, 0xA898, 0xA899, 0xA89A, 0xA89B, 0xA89C, 0xA89D, /* 0x90 */ + 0xA8A1, 0xA8A2, 0xA8A3, 0xA8A4, 0xA8A5, 0xA8A6, 0xA8A7, 0xA8A8, /* 0x90 */ + 0xA8A9, 0xA8AA, 0xA8AB, 0xA8AC, 0xA8AD, 0xA8AE, 0xA8AF, 0xA8B0, /* 0xA0 */ + 0xA8B1, 0xA8B3, 0xA8B4, 0xA8B5, 0xA8B6, 0xA8B7, 0xA8B8, 0xA8B9, /* 0xA0 */ + 0xA8BA, 0xA8BB, 0xA8BC, 0xA8BD, 0xA8C1, 0xA8C2, 0xA8C3, 0xA8C4, /* 0xB0 */ + 0xA8C5, 0xA8C6, 0xA8C7, 0xA8C8, 0xA8C9, 0xA8CA, 0xA8CB, 0xA8CC, /* 0xB0 */ + 0xA8CD, 0xA8CE, 0xA8CF, 0xA8D0, 0xA8D1, 0xA8D3, 0xA8D4, 0xA8D5, /* 0xC0 */ + 0xA8D6, 0xA8D7, 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, 0xA8DD, /* 0xC0 */ + 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, 0xA8E5, 0xA8E6, 0xA8E7, 0xA8E8, /* 0xD0 */ + 0xA8E9, 0xA8EA, 0xA8EB, 0xA8EC, 0xA8ED, 0xA8EE, 0xA8EF, 0xA8F0, /* 0xD0 */ + 0xA8F1, 0xA8F3, 0xA8F4, 0xA8F5, 0xA8F6, 0xA8F7, 0xA8F8, 0xA8F9, /* 0xE0 */ + 0xA8FA, 0xA8FB, 0xA8FC, 0xA8FD, 0xA941, 0xA942, 0xA943, 0xA944, /* 0xE0 */ + 0xA945, 0xA946, 0xA947, 0xA948, 0xA949, 0xA94A, 0xA94B, 0xA94C, /* 0xF0 */ + 0xA94D, 0xA94E, 0xA94F, 0xA950, 0xA951, 0xA953, 0xA954, 0xA955 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA956, 0xA957, 0xA958, 0xA959, 0xA95A, 0xA95B, 0xA95C, 0xA95D, /* 0x00 */ + 0xA961, 0xA962, 0xA963, 0xA964, 0xA965, 0xA966, 0xA967, 0xA968, /* 0x00 */ + 0xA969, 0xA96A, 0xA96B, 0xA96C, 0xA96D, 0xA96E, 0xA96F, 0xA970, /* 0x10 */ + 0xA971, 0xA973, 0xA974, 0xA975, 0xA976, 0xA977, 0xA978, 0xA979, /* 0x10 */ + 0xA97A, 0xA97B, 0xA97C, 0xA97D, 0xA981, 0xA982, 0xA983, 0xA984, /* 0x20 */ + 0xA985, 0xA986, 0xA987, 0xA988, 0xA989, 0xA98A, 0xA98B, 0xA98C, /* 0x20 */ + 0xA98D, 0xA98E, 0xA98F, 0xA990, 0xA991, 0xA993, 0xA994, 0xA995, /* 0x30 */ + 0xA996, 0xA997, 0xA998, 0xA999, 0xA99A, 0xA99B, 0xA99C, 0xA99D, /* 0x30 */ + 0xA9A1, 0xA9A2, 0xA9A3, 0xA9A4, 0xA9A5, 0xA9A6, 0xA9A7, 0xA9A8, /* 0x40 */ + 0xA9A9, 0xA9AA, 0xA9AB, 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, /* 0x40 */ + 0xA9B1, 0xA9B3, 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, /* 0x50 */ + 0xA9BA, 0xA9BB, 0xA9BC, 0xA9BD, 0xA9C1, 0xA9C2, 0xA9C3, 0xA9C4, /* 0x50 */ + 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, 0xA9CA, 0xA9CB, 0xA9CC, /* 0x60 */ + 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, 0xA9D1, 0xA9D3, 0xA9D4, 0xA9D5, /* 0x60 */ + 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, 0xA9DC, 0xA9DD, /* 0x70 */ + 0xA9E1, 0xA9E2, 0xA9E3, 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, 0xA9E8, /* 0x70 */ + 0xA9E9, 0xA9EA, 0xA9EB, 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0xA9F0, /* 0x80 */ + 0xA9F1, 0xA9F3, 0xA9F4, 0xA9F5, 0xA9F6, 0xA9F7, 0xA9F8, 0xA9F9, /* 0x80 */ + 0xA9FA, 0xA9FB, 0xA9FC, 0xA9FD, 0xAA41, 0xAA42, 0xAA43, 0xAA44, /* 0x90 */ + 0xAA45, 0xAA46, 0xAA47, 0xAA48, 0xAA49, 0xAA4A, 0xAA4B, 0xAA4C, /* 0x90 */ + 0xAA4D, 0xAA4E, 0xAA4F, 0xAA50, 0xAA51, 0xAA53, 0xAA54, 0xAA55, /* 0xA0 */ + 0xAA56, 0xAA57, 0xAA58, 0xAA59, 0xAA5A, 0xAA5B, 0xAA5C, 0xAA5D, /* 0xA0 */ + 0xAA61, 0xAA62, 0xAA63, 0xAA64, 0xAA65, 0xAA66, 0xAA67, 0xAA68, /* 0xB0 */ + 0xAA69, 0xAA6A, 0xAA6B, 0xAA6C, 0xAA6D, 0xAA6E, 0xAA6F, 0xAA70, /* 0xB0 */ + 0xAA71, 0xAA73, 0xAA74, 0xAA75, 0xAA76, 0xAA77, 0xAA78, 0xAA79, /* 0xC0 */ + 0xAA7A, 0xAA7B, 0xAA7C, 0xAA7D, 0xAA81, 0xAA82, 0xAA83, 0xAA84, /* 0xC0 */ + 0xAA85, 0xAA86, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xAA8B, 0xAA8C, /* 0xD0 */ + 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA93, 0xAA94, 0xAA95, /* 0xD0 */ + 0xAA96, 0xAA97, 0xAA98, 0xAA99, 0xAA9A, 0xAA9B, 0xAA9C, 0xAA9D, /* 0xE0 */ + 0xAAA1, 0xAAA2, 0xAAA3, 0xAAA4, 0xAAA5, 0xAAA6, 0xAAA7, 0xAAA8, /* 0xE0 */ + 0xAAA9, 0xAAAA, 0xAAAB, 0xAAAC, 0xAAAD, 0xAAAE, 0xAAAF, 0xAAB0, /* 0xF0 */ + 0xAAB1, 0xAAB3, 0xAAB4, 0xAAB5, 0xAAB6, 0xAAB7, 0xAAB8, 0xAAB9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAABA, 0xAABB, 0xAABC, 0xAABD, 0xAAC1, 0xAAC2, 0xAAC3, 0xAAC4, /* 0x00 */ + 0xAAC5, 0xAAC6, 0xAAC7, 0xAAC8, 0xAAC9, 0xAACA, 0xAACB, 0xAACC, /* 0x00 */ + 0xAACD, 0xAACE, 0xAACF, 0xAAD0, 0xAAD1, 0xAAD3, 0xAAD4, 0xAAD5, /* 0x10 */ + 0xAAD6, 0xAAD7, 0xAAD8, 0xAAD9, 0xAADA, 0xAADB, 0xAADC, 0xAADD, /* 0x10 */ + 0xAAE1, 0xAAE2, 0xAAE3, 0xAAE4, 0xAAE5, 0xAAE6, 0xAAE7, 0xAAE8, /* 0x20 */ + 0xAAE9, 0xAAEA, 0xAAEB, 0xAAEC, 0xAAED, 0xAAEE, 0xAAEF, 0xAAF0, /* 0x20 */ + 0xAAF1, 0xAAF3, 0xAAF4, 0xAAF5, 0xAAF6, 0xAAF7, 0xAAF8, 0xAAF9, /* 0x30 */ + 0xAAFA, 0xAAFB, 0xAAFC, 0xAAFD, 0xAB41, 0xAB42, 0xAB43, 0xAB44, /* 0x30 */ + 0xAB45, 0xAB46, 0xAB47, 0xAB48, 0xAB49, 0xAB4A, 0xAB4B, 0xAB4C, /* 0x40 */ + 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, 0xAB51, 0xAB53, 0xAB54, 0xAB55, /* 0x40 */ + 0xAB56, 0xAB57, 0xAB58, 0xAB59, 0xAB5A, 0xAB5B, 0xAB5C, 0xAB5D, /* 0x50 */ + 0xAB61, 0xAB62, 0xAB63, 0xAB64, 0xAB65, 0xAB66, 0xAB67, 0xAB68, /* 0x50 */ + 0xAB69, 0xAB6A, 0xAB6B, 0xAB6C, 0xAB6D, 0xAB6E, 0xAB6F, 0xAB70, /* 0x60 */ + 0xAB71, 0xAB73, 0xAB74, 0xAB75, 0xAB76, 0xAB77, 0xAB78, 0xAB79, /* 0x60 */ + 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB81, 0xAB82, 0xAB83, 0xAB84, /* 0x70 */ + 0xAB85, 0xAB86, 0xAB87, 0xAB88, 0xAB89, 0xAB8A, 0xAB8B, 0xAB8C, /* 0x70 */ + 0xAB8D, 0xAB8E, 0xAB8F, 0xAB90, 0xAB91, 0xAB93, 0xAB94, 0xAB95, /* 0x80 */ + 0xAB96, 0xAB97, 0xAB98, 0xAB99, 0xAB9A, 0xAB9B, 0xAB9C, 0xAB9D, /* 0x80 */ + 0xABA1, 0xABA2, 0xABA3, 0xABA4, 0xABA5, 0xABA6, 0xABA7, 0xABA8, /* 0x90 */ + 0xABA9, 0xABAA, 0xABAB, 0xABAC, 0xABAD, 0xABAE, 0xABAF, 0xABB0, /* 0x90 */ + 0xABB1, 0xABB3, 0xABB4, 0xABB5, 0xABB6, 0xABB7, 0xABB8, 0xABB9, /* 0xA0 */ + 0xABBA, 0xABBB, 0xABBC, 0xABBD, 0xAC61, 0xAC62, 0xAC63, 0xAC64, /* 0xA0 */ + 0xAC65, 0xAC66, 0xAC67, 0xAC68, 0xAC69, 0xAC6A, 0xAC6B, 0xAC6C, /* 0xB0 */ + 0xAC6D, 0xAC6E, 0xAC6F, 0xAC70, 0xAC71, 0xAC73, 0xAC74, 0xAC75, /* 0xB0 */ + 0xAC76, 0xAC77, 0xAC78, 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, /* 0xC0 */ + 0xAC81, 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xAC87, 0xAC88, /* 0xC0 */ + 0xAC89, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, /* 0xD0 */ + 0xAC91, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, /* 0xD0 */ + 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xACA1, 0xACA2, 0xACA3, 0xACA4, /* 0xE0 */ + 0xACA5, 0xACA6, 0xACA7, 0xACA8, 0xACA9, 0xACAA, 0xACAB, 0xACAC, /* 0xE0 */ + 0xACAD, 0xACAE, 0xACAF, 0xACB0, 0xACB1, 0xACB3, 0xACB4, 0xACB5, /* 0xF0 */ + 0xACB6, 0xACB7, 0xACB8, 0xACB9, 0xACBA, 0xACBB, 0xACBC, 0xACBD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xACC1, 0xACC2, 0xACC3, 0xACC4, 0xACC5, 0xACC6, 0xACC7, 0xACC8, /* 0x00 */ + 0xACC9, 0xACCA, 0xACCB, 0xACCC, 0xACCD, 0xACCE, 0xACCF, 0xACD0, /* 0x00 */ + 0xACD1, 0xACD3, 0xACD4, 0xACD5, 0xACD6, 0xACD7, 0xACD8, 0xACD9, /* 0x10 */ + 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACE1, 0xACE2, 0xACE3, 0xACE4, /* 0x10 */ + 0xACE5, 0xACE6, 0xACE7, 0xACE8, 0xACE9, 0xACEA, 0xACEB, 0xACEC, /* 0x20 */ + 0xACED, 0xACEE, 0xACEF, 0xACF0, 0xACF1, 0xACF3, 0xACF4, 0xACF5, /* 0x20 */ + 0xACF6, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, 0xACFC, 0xACFD, /* 0x30 */ + 0xAD41, 0xAD42, 0xAD43, 0xAD44, 0xAD45, 0xAD46, 0xAD47, 0xAD48, /* 0x30 */ + 0xAD49, 0xAD4A, 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD50, /* 0x40 */ + 0xAD51, 0xAD53, 0xAD54, 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xAD59, /* 0x40 */ + 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD61, 0xAD62, 0xAD63, 0xAD64, /* 0x50 */ + 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, /* 0x50 */ + 0xAD6D, 0xAD6E, 0xAD6F, 0xAD70, 0xAD71, 0xAD73, 0xAD74, 0xAD75, /* 0x60 */ + 0xAD76, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, 0xAD7B, 0xAD7C, 0xAD7D, /* 0x60 */ + 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, 0xAD88, /* 0x70 */ + 0xAD89, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD90, /* 0x70 */ + 0xAD91, 0xAD93, 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, /* 0x80 */ + 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, 0xADA1, 0xADA2, 0xADA3, 0xADA4, /* 0x80 */ + 0xADA5, 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, 0xADAB, 0xADAC, /* 0x90 */ + 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB3, 0xADB4, 0xADB5, /* 0x90 */ + 0xADB6, 0xADB7, 0xADB8, 0xADB9, 0xADBA, 0xADBB, 0xADBC, 0xADBD, /* 0xA0 */ + 0xADC1, 0xADC2, 0xADC3, 0xADC4, 0xADC5, 0xADC6, 0xADC7, 0xADC8, /* 0xA0 */ + 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD0, /* 0xB0 */ + 0xADD1, 0xADD3, 0xADD4, 0xADD5, 0xADD6, 0xADD7, 0xADD8, 0xADD9, /* 0xB0 */ + 0xADDA, 0xADDB, 0xADDC, 0xADDD, 0xADE1, 0xADE2, 0xADE3, 0xADE4, /* 0xC0 */ + 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA, 0xADEB, 0xADEC, /* 0xC0 */ + 0xADED, 0xADEE, 0xADEF, 0xADF0, 0xADF1, 0xADF3, 0xADF4, 0xADF5, /* 0xD0 */ + 0xADF6, 0xADF7, 0xADF8, 0xADF9, 0xADFA, 0xADFB, 0xADFC, 0xADFD, /* 0xD0 */ + 0xAE41, 0xAE42, 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xAE47, 0xAE48, /* 0xE0 */ + 0xAE49, 0xAE4A, 0xAE4B, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE4F, 0xAE50, /* 0xE0 */ + 0xAE51, 0xAE53, 0xAE54, 0xAE55, 0xAE56, 0xAE57, 0xAE58, 0xAE59, /* 0xF0 */ + 0xAE5A, 0xAE5B, 0xAE5C, 0xAE5D, 0xAE61, 0xAE62, 0xAE63, 0xAE64 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAE65, 0xAE66, 0xAE67, 0xAE68, 0xAE69, 0xAE6A, 0xAE6B, 0xAE6C, /* 0x00 */ + 0xAE6D, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xAE73, 0xAE74, 0xAE75, /* 0x00 */ + 0xAE76, 0xAE77, 0xAE78, 0xAE79, 0xAE7A, 0xAE7B, 0xAE7C, 0xAE7D, /* 0x10 */ + 0xAE81, 0xAE82, 0xAE83, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xAE88, /* 0x10 */ + 0xAE89, 0xAE8A, 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, 0xAE90, /* 0x20 */ + 0xAE91, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, 0xAE98, 0xAE99, /* 0x20 */ + 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, /* 0x30 */ + 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, 0xAEAA, 0xAEAB, 0xAEAC, /* 0x30 */ + 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1, 0xAEB3, 0xAEB4, 0xAEB5, /* 0x40 */ + 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, 0xAEBC, 0xAEBD, /* 0x40 */ + 0xAEC1, 0xAEC2, 0xAEC3, 0xAEC4, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, /* 0x50 */ + 0xAEC9, 0xAECA, 0xAECB, 0xAECC, 0xAECD, 0xAECE, 0xAECF, 0xAED0, /* 0x50 */ + 0xAED1, 0xAED3, 0xAED4, 0xAED5, 0xAED6, 0xAED7, 0xAED8, 0xAED9, /* 0x60 */ + 0xAEDA, 0xAEDB, 0xAEDC, 0xAEDD, 0xAEE1, 0xAEE2, 0xAEE3, 0xAEE4, /* 0x60 */ + 0xAEE5, 0xAEE6, 0xAEE7, 0xAEE8, 0xAEE9, 0xAEEA, 0xAEEB, 0xAEEC, /* 0x70 */ + 0xAEED, 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF3, 0xAEF4, 0xAEF5, /* 0x70 */ + 0xAEF6, 0xAEF7, 0xAEF8, 0xAEF9, 0xAEFA, 0xAEFB, 0xAEFC, 0xAEFD, /* 0x80 */ + 0xAF41, 0xAF42, 0xAF43, 0xAF44, 0xAF45, 0xAF46, 0xAF47, 0xAF48, /* 0x80 */ + 0xAF49, 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF50, /* 0x90 */ + 0xAF51, 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, 0xAF59, /* 0x90 */ + 0xAF5A, 0xAF5B, 0xAF5C, 0xAF5D, 0xAF61, 0xAF62, 0xAF63, 0xAF64, /* 0xA0 */ + 0xAF65, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, /* 0xA0 */ + 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF73, 0xAF74, 0xAF75, /* 0xB0 */ + 0xAF76, 0xAF77, 0xAF78, 0xAF79, 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, /* 0xB0 */ + 0xAF81, 0xAF82, 0xAF83, 0xAF84, 0xAF85, 0xAF86, 0xAF87, 0xAF88, /* 0xC0 */ + 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF90, /* 0xC0 */ + 0xAF91, 0xAF93, 0xAF94, 0xAF95, 0xAF96, 0xAF97, 0xAF98, 0xAF99, /* 0xD0 */ + 0xAF9A, 0xAF9B, 0xAF9C, 0xAF9D, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, /* 0xD0 */ + 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, /* 0xE0 */ + 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB3, 0xAFB4, 0xAFB5, /* 0xE0 */ + 0xAFB6, 0xAFB7, 0xAFB8, 0xAFB9, 0xAFBA, 0xAFBB, 0xAFBC, 0xAFBD, /* 0xF0 */ + 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, 0xB067, 0xB068 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, 0xB06E, 0xB06F, 0xB070, /* 0x00 */ + 0xB071, 0xB073, 0xB074, 0xB075, 0xB076, 0xB077, 0xB078, 0xB079, /* 0x00 */ + 0xB07A, 0xB07B, 0xB07C, 0xB07D, 0xB081, 0xB082, 0xB083, 0xB084, /* 0x10 */ + 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, 0xB08B, 0xB08C, /* 0x10 */ + 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xB091, 0xB093, 0xB094, 0xB095, /* 0x20 */ + 0xB096, 0xB097, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, /* 0x20 */ + 0xB0A1, 0xB0A2, 0xB0A3, 0xB0A4, 0xB0A5, 0xB0A6, 0xB0A7, 0xB0A8, /* 0x30 */ + 0xB0A9, 0xB0AA, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF, 0xB0B0, /* 0x30 */ + 0xB0B1, 0xB0B3, 0xB0B4, 0xB0B5, 0xB0B6, 0xB0B7, 0xB0B8, 0xB0B9, /* 0x40 */ + 0xB0BA, 0xB0BB, 0xB0BC, 0xB0BD, 0xB0C1, 0xB0C2, 0xB0C3, 0xB0C4, /* 0x40 */ + 0xB0C5, 0xB0C6, 0xB0C7, 0xB0C8, 0xB0C9, 0xB0CA, 0xB0CB, 0xB0CC, /* 0x50 */ + 0xB0CD, 0xB0CE, 0xB0CF, 0xB0D0, 0xB0D1, 0xB0D3, 0xB0D4, 0xB0D5, /* 0x50 */ + 0xB0D6, 0xB0D7, 0xB0D8, 0xB0D9, 0xB0DA, 0xB0DB, 0xB0DC, 0xB0DD, /* 0x60 */ + 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, 0xB0E5, 0xB0E6, 0xB0E7, 0xB0E8, /* 0x60 */ + 0xB0E9, 0xB0EA, 0xB0EB, 0xB0EC, 0xB0ED, 0xB0EE, 0xB0EF, 0xB0F0, /* 0x70 */ + 0xB0F1, 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, 0xB0F8, 0xB0F9, /* 0x70 */ + 0xB0FA, 0xB0FB, 0xB0FC, 0xB0FD, 0xB141, 0xB142, 0xB143, 0xB144, /* 0x80 */ + 0xB145, 0xB146, 0xB147, 0xB148, 0xB149, 0xB14A, 0xB14B, 0xB14C, /* 0x80 */ + 0xB14D, 0xB14E, 0xB14F, 0xB150, 0xB151, 0xB153, 0xB154, 0xB155, /* 0x90 */ + 0xB156, 0xB157, 0xB158, 0xB159, 0xB15A, 0xB15B, 0xB15C, 0xB15D, /* 0x90 */ + 0xB161, 0xB162, 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, /* 0xA0 */ + 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, /* 0xA0 */ + 0xB171, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0xB178, 0xB179, /* 0xB0 */ + 0xB17A, 0xB17B, 0xB17C, 0xB17D, 0xB181, 0xB182, 0xB183, 0xB184, /* 0xB0 */ + 0xB185, 0xB186, 0xB187, 0xB188, 0xB189, 0xB18A, 0xB18B, 0xB18C, /* 0xC0 */ + 0xB18D, 0xB18E, 0xB18F, 0xB190, 0xB191, 0xB193, 0xB194, 0xB195, /* 0xC0 */ + 0xB196, 0xB197, 0xB198, 0xB199, 0xB19A, 0xB19B, 0xB19C, 0xB19D, /* 0xD0 */ + 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4, 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A8, /* 0xD0 */ + 0xB1A9, 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, 0xB1AE, 0xB1AF, 0xB1B0, /* 0xE0 */ + 0xB1B1, 0xB1B3, 0xB1B4, 0xB1B5, 0xB1B6, 0xB1B7, 0xB1B8, 0xB1B9, /* 0xE0 */ + 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, /* 0xF0 */ + 0xB1C5, 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB1CD, 0xB1CE, 0xB1CF, 0xB1D0, 0xB1D1, 0xB1D3, 0xB1D4, 0xB1D5, /* 0x00 */ + 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, 0xB1DB, 0xB1DC, 0xB1DD, /* 0x00 */ + 0xB1E1, 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, 0xB1E8, /* 0x10 */ + 0xB1E9, 0xB1EA, 0xB1EB, 0xB1EC, 0xB1ED, 0xB1EE, 0xB1EF, 0xB1F0, /* 0x10 */ + 0xB1F1, 0xB1F3, 0xB1F4, 0xB1F5, 0xB1F6, 0xB1F7, 0xB1F8, 0xB1F9, /* 0x20 */ + 0xB1FA, 0xB1FB, 0xB1FC, 0xB1FD, 0xB241, 0xB242, 0xB243, 0xB244, /* 0x20 */ + 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, 0xB24B, 0xB24C, /* 0x30 */ + 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB253, 0xB254, 0xB255, /* 0x30 */ + 0xB256, 0xB257, 0xB258, 0xB259, 0xB25A, 0xB25B, 0xB25C, 0xB25D, /* 0x40 */ + 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB268, /* 0x40 */ + 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xB26E, 0xB26F, 0xB270, /* 0x50 */ + 0xB271, 0xB273, 0xB274, 0xB275, 0xB276, 0xB277, 0xB278, 0xB279, /* 0x50 */ + 0xB27A, 0xB27B, 0xB27C, 0xB27D, 0xB281, 0xB282, 0xB283, 0xB284, /* 0x60 */ + 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, 0xB28A, 0xB28B, 0xB28C, /* 0x60 */ + 0xB28D, 0xB28E, 0xB28F, 0xB290, 0xB291, 0xB293, 0xB294, 0xB295, /* 0x70 */ + 0xB296, 0xB297, 0xB298, 0xB299, 0xB29A, 0xB29B, 0xB29C, 0xB29D, /* 0x70 */ + 0xB2A1, 0xB2A2, 0xB2A3, 0xB2A4, 0xB2A5, 0xB2A6, 0xB2A7, 0xB2A8, /* 0x80 */ + 0xB2A9, 0xB2AA, 0xB2AB, 0xB2AC, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B0, /* 0x80 */ + 0xB2B1, 0xB2B3, 0xB2B4, 0xB2B5, 0xB2B6, 0xB2B7, 0xB2B8, 0xB2B9, /* 0x90 */ + 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, /* 0x90 */ + 0xB2C5, 0xB2C6, 0xB2C7, 0xB2C8, 0xB2C9, 0xB2CA, 0xB2CB, 0xB2CC, /* 0xA0 */ + 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D0, 0xB2D1, 0xB2D3, 0xB2D4, 0xB2D5, /* 0xA0 */ + 0xB2D6, 0xB2D7, 0xB2D8, 0xB2D9, 0xB2DA, 0xB2DB, 0xB2DC, 0xB2DD, /* 0xB0 */ + 0xB2E1, 0xB2E2, 0xB2E3, 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E7, 0xB2E8, /* 0xB0 */ + 0xB2E9, 0xB2EA, 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, 0xB2F0, /* 0xC0 */ + 0xB2F1, 0xB2F3, 0xB2F4, 0xB2F5, 0xB2F6, 0xB2F7, 0xB2F8, 0xB2F9, /* 0xC0 */ + 0xB2FA, 0xB2FB, 0xB2FC, 0xB2FD, 0xB341, 0xB342, 0xB343, 0xB344, /* 0xD0 */ + 0xB345, 0xB346, 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, /* 0xD0 */ + 0xB34D, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB353, 0xB354, 0xB355, /* 0xE0 */ + 0xB356, 0xB357, 0xB358, 0xB359, 0xB35A, 0xB35B, 0xB35C, 0xB35D, /* 0xE0 */ + 0xB361, 0xB362, 0xB363, 0xB364, 0xB365, 0xB366, 0xB367, 0xB368, /* 0xF0 */ + 0xB369, 0xB36A, 0xB36B, 0xB36C, 0xB36D, 0xB36E, 0xB36F, 0xB370 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB371, 0xB373, 0xB374, 0xB375, 0xB376, 0xB377, 0xB378, 0xB379, /* 0x00 */ + 0xB37A, 0xB37B, 0xB37C, 0xB37D, 0xB381, 0xB382, 0xB383, 0xB384, /* 0x00 */ + 0xB385, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38C, /* 0x10 */ + 0xB38D, 0xB38E, 0xB38F, 0xB390, 0xB391, 0xB393, 0xB394, 0xB395, /* 0x10 */ + 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, 0xB39C, 0xB39D, /* 0x20 */ + 0xB3A1, 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0xB3A8, /* 0x20 */ + 0xB3A9, 0xB3AA, 0xB3AB, 0xB3AC, 0xB3AD, 0xB3AE, 0xB3AF, 0xB3B0, /* 0x30 */ + 0xB3B1, 0xB3B3, 0xB3B4, 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, 0xB3B9, /* 0x30 */ + 0xB3BA, 0xB3BB, 0xB3BC, 0xB3BD, 0xB461, 0xB462, 0xB463, 0xB464, /* 0x40 */ + 0xB465, 0xB466, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46C, /* 0x40 */ + 0xB46D, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB473, 0xB474, 0xB475, /* 0x50 */ + 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, /* 0x50 */ + 0xB481, 0xB482, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0xB488, /* 0x60 */ + 0xB489, 0xB48A, 0xB48B, 0xB48C, 0xB48D, 0xB48E, 0xB48F, 0xB490, /* 0x60 */ + 0xB491, 0xB493, 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, /* 0x70 */ + 0xB49A, 0xB49B, 0xB49C, 0xB49D, 0xB4A1, 0xB4A2, 0xB4A3, 0xB4A4, /* 0x70 */ + 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A8, 0xB4A9, 0xB4AA, 0xB4AB, 0xB4AC, /* 0x80 */ + 0xB4AD, 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B3, 0xB4B4, 0xB4B5, /* 0x80 */ + 0xB4B6, 0xB4B7, 0xB4B8, 0xB4B9, 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, /* 0x90 */ + 0xB4C1, 0xB4C2, 0xB4C3, 0xB4C4, 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C8, /* 0x90 */ + 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE, 0xB4CF, 0xB4D0, /* 0xA0 */ + 0xB4D1, 0xB4D3, 0xB4D4, 0xB4D5, 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9, /* 0xA0 */ + 0xB4DA, 0xB4DB, 0xB4DC, 0xB4DD, 0xB4E1, 0xB4E2, 0xB4E3, 0xB4E4, /* 0xB0 */ + 0xB4E5, 0xB4E6, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, 0xB4EB, 0xB4EC, /* 0xB0 */ + 0xB4ED, 0xB4EE, 0xB4EF, 0xB4F0, 0xB4F1, 0xB4F3, 0xB4F4, 0xB4F5, /* 0xC0 */ + 0xB4F6, 0xB4F7, 0xB4F8, 0xB4F9, 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, /* 0xC0 */ + 0xB541, 0xB542, 0xB543, 0xB544, 0xB545, 0xB546, 0xB547, 0xB548, /* 0xD0 */ + 0xB549, 0xB54A, 0xB54B, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xB550, /* 0xD0 */ + 0xB551, 0xB553, 0xB554, 0xB555, 0xB556, 0xB557, 0xB558, 0xB559, /* 0xE0 */ + 0xB55A, 0xB55B, 0xB55C, 0xB55D, 0xB561, 0xB562, 0xB563, 0xB564, /* 0xE0 */ + 0xB565, 0xB566, 0xB567, 0xB568, 0xB569, 0xB56A, 0xB56B, 0xB56C, /* 0xF0 */ + 0xB56D, 0xB56E, 0xB56F, 0xB570, 0xB571, 0xB573, 0xB574, 0xB575 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB576, 0xB577, 0xB578, 0xB579, 0xB57A, 0xB57B, 0xB57C, 0xB57D, /* 0x00 */ + 0xB581, 0xB582, 0xB583, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, /* 0x00 */ + 0xB589, 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, /* 0x10 */ + 0xB591, 0xB593, 0xB594, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, /* 0x10 */ + 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB5A1, 0xB5A2, 0xB5A3, 0xB5A4, /* 0x20 */ + 0xB5A5, 0xB5A6, 0xB5A7, 0xB5A8, 0xB5A9, 0xB5AA, 0xB5AB, 0xB5AC, /* 0x20 */ + 0xB5AD, 0xB5AE, 0xB5AF, 0xB5B0, 0xB5B1, 0xB5B3, 0xB5B4, 0xB5B5, /* 0x30 */ + 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BB, 0xB5BC, 0xB5BD, /* 0x30 */ + 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C4, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, /* 0x40 */ + 0xB5C9, 0xB5CA, 0xB5CB, 0xB5CC, 0xB5CD, 0xB5CE, 0xB5CF, 0xB5D0, /* 0x40 */ + 0xB5D1, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, 0xB5D7, 0xB5D8, 0xB5D9, /* 0x50 */ + 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, /* 0x50 */ + 0xB5E5, 0xB5E6, 0xB5E7, 0xB5E8, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5EC, /* 0x60 */ + 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1, 0xB5F3, 0xB5F4, 0xB5F5, /* 0x60 */ + 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA, 0xB5FB, 0xB5FC, 0xB5FD, /* 0x70 */ + 0xB641, 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0xB648, /* 0x70 */ + 0xB649, 0xB64A, 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, /* 0x80 */ + 0xB651, 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, /* 0x80 */ + 0xB65A, 0xB65B, 0xB65C, 0xB65D, 0xB661, 0xB662, 0xB663, 0xB664, /* 0x90 */ + 0xB665, 0xB666, 0xB667, 0xB668, 0xB669, 0xB66A, 0xB66B, 0xB66C, /* 0x90 */ + 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, 0xB673, 0xB674, 0xB675, /* 0xA0 */ + 0xB676, 0xB677, 0xB678, 0xB679, 0xB67A, 0xB67B, 0xB67C, 0xB67D, /* 0xA0 */ + 0xB681, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, /* 0xB0 */ + 0xB689, 0xB68A, 0xB68B, 0xB68C, 0xB68D, 0xB68E, 0xB68F, 0xB690, /* 0xB0 */ + 0xB691, 0xB693, 0xB694, 0xB695, 0xB696, 0xB697, 0xB698, 0xB699, /* 0xC0 */ + 0xB69A, 0xB69B, 0xB69C, 0xB69D, 0xB6A1, 0xB6A2, 0xB6A3, 0xB6A4, /* 0xC0 */ + 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA, 0xB6AB, 0xB6AC, /* 0xD0 */ + 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B1, 0xB6B3, 0xB6B4, 0xB6B5, /* 0xD0 */ + 0xB6B6, 0xB6B7, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD, /* 0xE0 */ + 0xB6C1, 0xB6C2, 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, 0xB6C7, 0xB6C8, /* 0xE0 */ + 0xB6C9, 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, 0xB6CE, 0xB6CF, 0xB6D0, /* 0xF0 */ + 0xB6D1, 0xB6D3, 0xB6D4, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB6DA, 0xB6DB, 0xB6DC, 0xB6DD, 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4, /* 0x00 */ + 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, 0xB6EA, 0xB6EB, 0xB6EC, /* 0x00 */ + 0xB6ED, 0xB6EE, 0xB6EF, 0xB6F0, 0xB6F1, 0xB6F3, 0xB6F4, 0xB6F5, /* 0x10 */ + 0xB6F6, 0xB6F7, 0xB6F8, 0xB6F9, 0xB6FA, 0xB6FB, 0xB6FC, 0xB6FD, /* 0x10 */ + 0xB741, 0xB742, 0xB743, 0xB744, 0xB745, 0xB746, 0xB747, 0xB748, /* 0x20 */ + 0xB749, 0xB74A, 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, 0xB750, /* 0x20 */ + 0xB751, 0xB753, 0xB754, 0xB755, 0xB756, 0xB757, 0xB758, 0xB759, /* 0x30 */ + 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB761, 0xB762, 0xB763, 0xB764, /* 0x30 */ + 0xB765, 0xB766, 0xB767, 0xB768, 0xB769, 0xB76A, 0xB76B, 0xB76C, /* 0x40 */ + 0xB76D, 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB773, 0xB774, 0xB775, /* 0x40 */ + 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, 0xB77C, 0xB77D, /* 0x50 */ + 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, 0xB787, 0xB788, /* 0x50 */ + 0xB789, 0xB78A, 0xB78B, 0xB78C, 0xB78D, 0xB78E, 0xB78F, 0xB790, /* 0x60 */ + 0xB791, 0xB793, 0xB794, 0xB795, 0xB796, 0xB797, 0xB798, 0xB799, /* 0x60 */ + 0xB79A, 0xB79B, 0xB79C, 0xB79D, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, /* 0x70 */ + 0xB7A5, 0xB7A6, 0xB7A7, 0xB7A8, 0xB7A9, 0xB7AA, 0xB7AB, 0xB7AC, /* 0x70 */ + 0xB7AD, 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B3, 0xB7B4, 0xB7B5, /* 0x80 */ + 0xB7B6, 0xB7B7, 0xB7B8, 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, /* 0x80 */ + 0xB861, 0xB862, 0xB863, 0xB864, 0xB865, 0xB866, 0xB867, 0xB868, /* 0x90 */ + 0xB869, 0xB86A, 0xB86B, 0xB86C, 0xB86D, 0xB86E, 0xB86F, 0xB870, /* 0x90 */ + 0xB871, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, /* 0xA0 */ + 0xB87A, 0xB87B, 0xB87C, 0xB87D, 0xB881, 0xB882, 0xB883, 0xB884, /* 0xA0 */ + 0xB885, 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B, 0xB88C, /* 0xB0 */ + 0xB88D, 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB893, 0xB894, 0xB895, /* 0xB0 */ + 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, 0xB89D, /* 0xC0 */ + 0xB8A1, 0xB8A2, 0xB8A3, 0xB8A4, 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A8, /* 0xC0 */ + 0xB8A9, 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF, 0xB8B0, /* 0xD0 */ + 0xB8B1, 0xB8B3, 0xB8B4, 0xB8B5, 0xB8B6, 0xB8B7, 0xB8B8, 0xB8B9, /* 0xD0 */ + 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, 0xB8C1, 0xB8C2, 0xB8C3, 0xB8C4, /* 0xE0 */ + 0xB8C5, 0xB8C6, 0xB8C7, 0xB8C8, 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CC, /* 0xE0 */ + 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D0, 0xB8D1, 0xB8D3, 0xB8D4, 0xB8D5, /* 0xF0 */ + 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, 0xB8DB, 0xB8DC, 0xB8DD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB8E1, 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, 0xB8E7, 0xB8E8, /* 0x00 */ + 0xB8E9, 0xB8EA, 0xB8EB, 0xB8EC, 0xB8ED, 0xB8EE, 0xB8EF, 0xB8F0, /* 0x00 */ + 0xB8F1, 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, 0xB8F7, 0xB8F8, 0xB8F9, /* 0x10 */ + 0xB8FA, 0xB8FB, 0xB8FC, 0xB8FD, 0xB941, 0xB942, 0xB943, 0xB944, /* 0x10 */ + 0xB945, 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, 0xB94B, 0xB94C, /* 0x20 */ + 0xB94D, 0xB94E, 0xB94F, 0xB950, 0xB951, 0xB953, 0xB954, 0xB955, /* 0x20 */ + 0xB956, 0xB957, 0xB958, 0xB959, 0xB95A, 0xB95B, 0xB95C, 0xB95D, /* 0x30 */ + 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xB968, /* 0x30 */ + 0xB969, 0xB96A, 0xB96B, 0xB96C, 0xB96D, 0xB96E, 0xB96F, 0xB970, /* 0x40 */ + 0xB971, 0xB973, 0xB974, 0xB975, 0xB976, 0xB977, 0xB978, 0xB979, /* 0x40 */ + 0xB97A, 0xB97B, 0xB97C, 0xB97D, 0xB981, 0xB982, 0xB983, 0xB984, /* 0x50 */ + 0xB985, 0xB986, 0xB987, 0xB988, 0xB989, 0xB98A, 0xB98B, 0xB98C, /* 0x50 */ + 0xB98D, 0xB98E, 0xB98F, 0xB990, 0xB991, 0xB993, 0xB994, 0xB995, /* 0x60 */ + 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, 0xB99D, /* 0x60 */ + 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, 0xB9A6, 0xB9A7, 0xB9A8, /* 0x70 */ + 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AC, 0xB9AD, 0xB9AE, 0xB9AF, 0xB9B0, /* 0x70 */ + 0xB9B1, 0xB9B3, 0xB9B4, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, /* 0x80 */ + 0xB9BA, 0xB9BB, 0xB9BC, 0xB9BD, 0xB9C1, 0xB9C2, 0xB9C3, 0xB9C4, /* 0x80 */ + 0xB9C5, 0xB9C6, 0xB9C7, 0xB9C8, 0xB9C9, 0xB9CA, 0xB9CB, 0xB9CC, /* 0x90 */ + 0xB9CD, 0xB9CE, 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D3, 0xB9D4, 0xB9D5, /* 0x90 */ + 0xB9D6, 0xB9D7, 0xB9D8, 0xB9D9, 0xB9DA, 0xB9DB, 0xB9DC, 0xB9DD, /* 0xA0 */ + 0xB9E1, 0xB9E2, 0xB9E3, 0xB9E4, 0xB9E5, 0xB9E6, 0xB9E7, 0xB9E8, /* 0xA0 */ + 0xB9E9, 0xB9EA, 0xB9EB, 0xB9EC, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, /* 0xB0 */ + 0xB9F1, 0xB9F3, 0xB9F4, 0xB9F5, 0xB9F6, 0xB9F7, 0xB9F8, 0xB9F9, /* 0xB0 */ + 0xB9FA, 0xB9FB, 0xB9FC, 0xB9FD, 0xBA41, 0xBA42, 0xBA43, 0xBA44, /* 0xC0 */ + 0xBA45, 0xBA46, 0xBA47, 0xBA48, 0xBA49, 0xBA4A, 0xBA4B, 0xBA4C, /* 0xC0 */ + 0xBA4D, 0xBA4E, 0xBA4F, 0xBA50, 0xBA51, 0xBA53, 0xBA54, 0xBA55, /* 0xD0 */ + 0xBA56, 0xBA57, 0xBA58, 0xBA59, 0xBA5A, 0xBA5B, 0xBA5C, 0xBA5D, /* 0xD0 */ + 0xBA61, 0xBA62, 0xBA63, 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xBA68, /* 0xE0 */ + 0xBA69, 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA70, /* 0xE0 */ + 0xBA71, 0xBA73, 0xBA74, 0xBA75, 0xBA76, 0xBA77, 0xBA78, 0xBA79, /* 0xF0 */ + 0xBA7A, 0xBA7B, 0xBA7C, 0xBA7D, 0xBA81, 0xBA82, 0xBA83, 0xBA84 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_C9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBA85, 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0xBA8C, /* 0x00 */ + 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA93, 0xBA94, 0xBA95, /* 0x00 */ + 0xBA96, 0xBA97, 0xBA98, 0xBA99, 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, /* 0x10 */ + 0xBAA1, 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAA8, /* 0x10 */ + 0xBAA9, 0xBAAA, 0xBAAB, 0xBAAC, 0xBAAD, 0xBAAE, 0xBAAF, 0xBAB0, /* 0x20 */ + 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7, 0xBAB8, 0xBAB9, /* 0x20 */ + 0xBABA, 0xBABB, 0xBABC, 0xBABD, 0xBAC1, 0xBAC2, 0xBAC3, 0xBAC4, /* 0x30 */ + 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC8, 0xBAC9, 0xBACA, 0xBACB, 0xBACC, /* 0x30 */ + 0xBACD, 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD3, 0xBAD4, 0xBAD5, /* 0x40 */ + 0xBAD6, 0xBAD7, 0xBAD8, 0xBAD9, 0xBADA, 0xBADB, 0xBADC, 0xBADD, /* 0x40 */ + 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, 0xBAE7, 0xBAE8, /* 0x50 */ + 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF, 0xBAF0, /* 0x50 */ + 0xBAF1, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7, 0xBAF8, 0xBAF9, /* 0x60 */ + 0xBAFA, 0xBAFB, 0xBAFC, 0xBAFD, 0xBB41, 0xBB42, 0xBB43, 0xBB44, /* 0x60 */ + 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, 0xBB4A, 0xBB4B, 0xBB4C, /* 0x70 */ + 0xBB4D, 0xBB4E, 0xBB4F, 0xBB50, 0xBB51, 0xBB53, 0xBB54, 0xBB55, /* 0x70 */ + 0xBB56, 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, /* 0x80 */ + 0xBB61, 0xBB62, 0xBB63, 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, /* 0x80 */ + 0xBB69, 0xBB6A, 0xBB6B, 0xBB6C, 0xBB6D, 0xBB6E, 0xBB6F, 0xBB70, /* 0x90 */ + 0xBB71, 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, 0xBB79, /* 0x90 */ + 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB81, 0xBB82, 0xBB83, 0xBB84, /* 0xA0 */ + 0xBB85, 0xBB86, 0xBB87, 0xBB88, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8C, /* 0xA0 */ + 0xBB8D, 0xBB8E, 0xBB8F, 0xBB90, 0xBB91, 0xBB93, 0xBB94, 0xBB95, /* 0xB0 */ + 0xBB96, 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, /* 0xB0 */ + 0xBBA1, 0xBBA2, 0xBBA3, 0xBBA4, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA8, /* 0xC0 */ + 0xBBA9, 0xBBAA, 0xBBAB, 0xBBAC, 0xBBAD, 0xBBAE, 0xBBAF, 0xBBB0, /* 0xC0 */ + 0xBBB1, 0xBBB3, 0xBBB4, 0xBBB5, 0xBBB6, 0xBBB7, 0xBBB8, 0xBBB9, /* 0xD0 */ + 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBC61, 0xBC62, 0xBC63, 0xBC64, /* 0xD0 */ + 0xBC65, 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, 0xBC6C, /* 0xE0 */ + 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, 0xBC73, 0xBC74, 0xBC75, /* 0xE0 */ + 0xBC76, 0xBC77, 0xBC78, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, /* 0xF0 */ + 0xBC81, 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xBC86, 0xBC87, 0xBC88 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBC89, 0xBC8A, 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, 0xBC8F, 0xBC90, /* 0x00 */ + 0xBC91, 0xBC93, 0xBC94, 0xBC95, 0xBC96, 0xBC97, 0xBC98, 0xBC99, /* 0x00 */ + 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBCA1, 0xBCA2, 0xBCA3, 0xBCA4, /* 0x10 */ + 0xBCA5, 0xBCA6, 0xBCA7, 0xBCA8, 0xBCA9, 0xBCAA, 0xBCAB, 0xBCAC, /* 0x10 */ + 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB0, 0xBCB1, 0xBCB3, 0xBCB4, 0xBCB5, /* 0x20 */ + 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0xBCBC, 0xBCBD, /* 0x20 */ + 0xBCC1, 0xBCC2, 0xBCC3, 0xBCC4, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, /* 0x30 */ + 0xBCC9, 0xBCCA, 0xBCCB, 0xBCCC, 0xBCCD, 0xBCCE, 0xBCCF, 0xBCD0, /* 0x30 */ + 0xBCD1, 0xBCD3, 0xBCD4, 0xBCD5, 0xBCD6, 0xBCD7, 0xBCD8, 0xBCD9, /* 0x40 */ + 0xBCDA, 0xBCDB, 0xBCDC, 0xBCDD, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, /* 0x40 */ + 0xBCE5, 0xBCE6, 0xBCE7, 0xBCE8, 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, /* 0x50 */ + 0xBCED, 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, 0xBCF3, 0xBCF4, 0xBCF5, /* 0x50 */ + 0xBCF6, 0xBCF7, 0xBCF8, 0xBCF9, 0xBCFA, 0xBCFB, 0xBCFC, 0xBCFD, /* 0x60 */ + 0xBD41, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, /* 0x60 */ + 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, 0xBD4F, 0xBD50, /* 0x70 */ + 0xBD51, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57, 0xBD58, 0xBD59, /* 0x70 */ + 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD61, 0xBD62, 0xBD63, 0xBD64, /* 0x80 */ + 0xBD65, 0xBD66, 0xBD67, 0xBD68, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, /* 0x80 */ + 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD73, 0xBD74, 0xBD75, /* 0x90 */ + 0xBD76, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, /* 0x90 */ + 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xBD87, 0xBD88, /* 0xA0 */ + 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD90, /* 0xA0 */ + 0xBD91, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, 0xBD98, 0xBD99, /* 0xB0 */ + 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBDA1, 0xBDA2, 0xBDA3, 0xBDA4, /* 0xB0 */ + 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, 0xBDA9, 0xBDAA, 0xBDAB, 0xBDAC, /* 0xC0 */ + 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB0, 0xBDB1, 0xBDB3, 0xBDB4, 0xBDB5, /* 0xC0 */ + 0xBDB6, 0xBDB7, 0xBDB8, 0xBDB9, 0xBDBA, 0xBDBB, 0xBDBC, 0xBDBD, /* 0xD0 */ + 0xBDC1, 0xBDC2, 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, 0xBDC7, 0xBDC8, /* 0xD0 */ + 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC, 0xBDCD, 0xBDCE, 0xBDCF, 0xBDD0, /* 0xE0 */ + 0xBDD1, 0xBDD3, 0xBDD4, 0xBDD5, 0xBDD6, 0xBDD7, 0xBDD8, 0xBDD9, /* 0xE0 */ + 0xBDDA, 0xBDDB, 0xBDDC, 0xBDDD, 0xBDE1, 0xBDE2, 0xBDE3, 0xBDE4, /* 0xF0 */ + 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDE9, 0xBDEA, 0xBDEB, 0xBDEC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDED, 0xBDEE, 0xBDEF, 0xBDF0, 0xBDF1, 0xBDF3, 0xBDF4, 0xBDF5, /* 0x00 */ + 0xBDF6, 0xBDF7, 0xBDF8, 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC, 0xBDFD, /* 0x00 */ + 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, 0xBE47, 0xBE48, /* 0x10 */ + 0xBE49, 0xBE4A, 0xBE4B, 0xBE4C, 0xBE4D, 0xBE4E, 0xBE4F, 0xBE50, /* 0x10 */ + 0xBE51, 0xBE53, 0xBE54, 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, /* 0x20 */ + 0xBE5A, 0xBE5B, 0xBE5C, 0xBE5D, 0xBE61, 0xBE62, 0xBE63, 0xBE64, /* 0x20 */ + 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, /* 0x30 */ + 0xBE6D, 0xBE6E, 0xBE6F, 0xBE70, 0xBE71, 0xBE73, 0xBE74, 0xBE75, /* 0x30 */ + 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0xBE7C, 0xBE7D, /* 0x40 */ + 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, 0xBE86, 0xBE87, 0xBE88, /* 0x40 */ + 0xBE89, 0xBE8A, 0xBE8B, 0xBE8C, 0xBE8D, 0xBE8E, 0xBE8F, 0xBE90, /* 0x50 */ + 0xBE91, 0xBE93, 0xBE94, 0xBE95, 0xBE96, 0xBE97, 0xBE98, 0xBE99, /* 0x50 */ + 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, /* 0x60 */ + 0xBEA5, 0xBEA6, 0xBEA7, 0xBEA8, 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, /* 0x60 */ + 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0, 0xBEB1, 0xBEB3, 0xBEB4, 0xBEB5, /* 0x70 */ + 0xBEB6, 0xBEB7, 0xBEB8, 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD, /* 0x70 */ + 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6, 0xBEC7, 0xBEC8, /* 0x80 */ + 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF, 0xBED0, /* 0x80 */ + 0xBED1, 0xBED3, 0xBED4, 0xBED5, 0xBED6, 0xBED7, 0xBED8, 0xBED9, /* 0x90 */ + 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, 0xBEE1, 0xBEE2, 0xBEE3, 0xBEE4, /* 0x90 */ + 0xBEE5, 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, 0xBEEA, 0xBEEB, 0xBEEC, /* 0xA0 */ + 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF3, 0xBEF4, 0xBEF5, /* 0xA0 */ + 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, 0xBEFB, 0xBEFC, 0xBEFD, /* 0xB0 */ + 0xBF41, 0xBF42, 0xBF43, 0xBF44, 0xBF45, 0xBF46, 0xBF47, 0xBF48, /* 0xB0 */ + 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, /* 0xC0 */ + 0xBF51, 0xBF53, 0xBF54, 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, /* 0xC0 */ + 0xBF5A, 0xBF5B, 0xBF5C, 0xBF5D, 0xBF61, 0xBF62, 0xBF63, 0xBF64, /* 0xD0 */ + 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, /* 0xD0 */ + 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF73, 0xBF74, 0xBF75, /* 0xE0 */ + 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, /* 0xE0 */ + 0xBF81, 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, /* 0xF0 */ + 0xBF89, 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBF91, 0xBF93, 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, /* 0x00 */ + 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D, 0xBFA1, 0xBFA2, 0xBFA3, 0xBFA4, /* 0x00 */ + 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, 0xBFAA, 0xBFAB, 0xBFAC, /* 0x10 */ + 0xBFAD, 0xBFAE, 0xBFAF, 0xBFB0, 0xBFB1, 0xBFB3, 0xBFB4, 0xBFB5, /* 0x10 */ + 0xBFB6, 0xBFB7, 0xBFB8, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, /* 0x20 */ + 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, /* 0x20 */ + 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, /* 0x30 */ + 0xC071, 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, /* 0x30 */ + 0xC07A, 0xC07B, 0xC07C, 0xC07D, 0xC081, 0xC082, 0xC083, 0xC084, /* 0x40 */ + 0xC085, 0xC086, 0xC087, 0xC088, 0xC089, 0xC08A, 0xC08B, 0xC08C, /* 0x40 */ + 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC091, 0xC093, 0xC094, 0xC095, /* 0x50 */ + 0xC096, 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, /* 0x50 */ + 0xC0A1, 0xC0A2, 0xC0A3, 0xC0A4, 0xC0A5, 0xC0A6, 0xC0A7, 0xC0A8, /* 0x60 */ + 0xC0A9, 0xC0AA, 0xC0AB, 0xC0AC, 0xC0AD, 0xC0AE, 0xC0AF, 0xC0B0, /* 0x60 */ + 0xC0B1, 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0B7, 0xC0B8, 0xC0B9, /* 0x70 */ + 0xC0BA, 0xC0BB, 0xC0BC, 0xC0BD, 0xC0C1, 0xC0C2, 0xC0C3, 0xC0C4, /* 0x70 */ + 0xC0C5, 0xC0C6, 0xC0C7, 0xC0C8, 0xC0C9, 0xC0CA, 0xC0CB, 0xC0CC, /* 0x80 */ + 0xC0CD, 0xC0CE, 0xC0CF, 0xC0D0, 0xC0D1, 0xC0D3, 0xC0D4, 0xC0D5, /* 0x80 */ + 0xC0D6, 0xC0D7, 0xC0D8, 0xC0D9, 0xC0DA, 0xC0DB, 0xC0DC, 0xC0DD, /* 0x90 */ + 0xC0E1, 0xC0E2, 0xC0E3, 0xC0E4, 0xC0E5, 0xC0E6, 0xC0E7, 0xC0E8, /* 0x90 */ + 0xC0E9, 0xC0EA, 0xC0EB, 0xC0EC, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, /* 0xA0 */ + 0xC0F1, 0xC0F3, 0xC0F4, 0xC0F5, 0xC0F6, 0xC0F7, 0xC0F8, 0xC0F9, /* 0xA0 */ + 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC141, 0xC142, 0xC143, 0xC144, /* 0xB0 */ + 0xC145, 0xC146, 0xC147, 0xC148, 0xC149, 0xC14A, 0xC14B, 0xC14C, /* 0xB0 */ + 0xC14D, 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC153, 0xC154, 0xC155, /* 0xC0 */ + 0xC156, 0xC157, 0xC158, 0xC159, 0xC15A, 0xC15B, 0xC15C, 0xC15D, /* 0xC0 */ + 0xC161, 0xC162, 0xC163, 0xC164, 0xC165, 0xC166, 0xC167, 0xC168, /* 0xD0 */ + 0xC169, 0xC16A, 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC170, /* 0xD0 */ + 0xC171, 0xC173, 0xC174, 0xC175, 0xC176, 0xC177, 0xC178, 0xC179, /* 0xE0 */ + 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xC181, 0xC182, 0xC183, 0xC184, /* 0xE0 */ + 0xC185, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, 0xC18C, /* 0xF0 */ + 0xC18D, 0xC18E, 0xC18F, 0xC190, 0xC191, 0xC193, 0xC194, 0xC195 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC196, 0xC197, 0xC198, 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, /* 0x00 */ + 0xC1A1, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A5, 0xC1A6, 0xC1A7, 0xC1A8, /* 0x00 */ + 0xC1A9, 0xC1AA, 0xC1AB, 0xC1AC, 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B0, /* 0x10 */ + 0xC1B1, 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, 0xC1B7, 0xC1B8, 0xC1B9, /* 0x10 */ + 0xC1BA, 0xC1BB, 0xC1BC, 0xC1BD, 0xC1C1, 0xC1C2, 0xC1C3, 0xC1C4, /* 0x20 */ + 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C8, 0xC1C9, 0xC1CA, 0xC1CB, 0xC1CC, /* 0x20 */ + 0xC1CD, 0xC1CE, 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D3, 0xC1D4, 0xC1D5, /* 0x30 */ + 0xC1D6, 0xC1D7, 0xC1D8, 0xC1D9, 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, /* 0x30 */ + 0xC1E1, 0xC1E2, 0xC1E3, 0xC1E4, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E8, /* 0x40 */ + 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, 0xC1ED, 0xC1EE, 0xC1EF, 0xC1F0, /* 0x40 */ + 0xC1F1, 0xC1F3, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7, 0xC1F8, 0xC1F9, /* 0x50 */ + 0xC1FA, 0xC1FB, 0xC1FC, 0xC1FD, 0xC241, 0xC242, 0xC243, 0xC244, /* 0x50 */ + 0xC245, 0xC246, 0xC247, 0xC248, 0xC249, 0xC24A, 0xC24B, 0xC24C, /* 0x60 */ + 0xC24D, 0xC24E, 0xC24F, 0xC250, 0xC251, 0xC253, 0xC254, 0xC255, /* 0x60 */ + 0xC256, 0xC257, 0xC258, 0xC259, 0xC25A, 0xC25B, 0xC25C, 0xC25D, /* 0x70 */ + 0xC261, 0xC262, 0xC263, 0xC264, 0xC265, 0xC266, 0xC267, 0xC268, /* 0x70 */ + 0xC269, 0xC26A, 0xC26B, 0xC26C, 0xC26D, 0xC26E, 0xC26F, 0xC270, /* 0x80 */ + 0xC271, 0xC273, 0xC274, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, /* 0x80 */ + 0xC27A, 0xC27B, 0xC27C, 0xC27D, 0xC281, 0xC282, 0xC283, 0xC284, /* 0x90 */ + 0xC285, 0xC286, 0xC287, 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, /* 0x90 */ + 0xC28D, 0xC28E, 0xC28F, 0xC290, 0xC291, 0xC293, 0xC294, 0xC295, /* 0xA0 */ + 0xC296, 0xC297, 0xC298, 0xC299, 0xC29A, 0xC29B, 0xC29C, 0xC29D, /* 0xA0 */ + 0xC2A1, 0xC2A2, 0xC2A3, 0xC2A4, 0xC2A5, 0xC2A6, 0xC2A7, 0xC2A8, /* 0xB0 */ + 0xC2A9, 0xC2AA, 0xC2AB, 0xC2AC, 0xC2AD, 0xC2AE, 0xC2AF, 0xC2B0, /* 0xB0 */ + 0xC2B1, 0xC2B3, 0xC2B4, 0xC2B5, 0xC2B6, 0xC2B7, 0xC2B8, 0xC2B9, /* 0xC0 */ + 0xC2BA, 0xC2BB, 0xC2BC, 0xC2BD, 0xC2C1, 0xC2C2, 0xC2C3, 0xC2C4, /* 0xC0 */ + 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, /* 0xD0 */ + 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D3, 0xC2D4, 0xC2D5, /* 0xD0 */ + 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0xC2DC, 0xC2DD, /* 0xE0 */ + 0xC2E1, 0xC2E2, 0xC2E3, 0xC2E4, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, /* 0xE0 */ + 0xC2E9, 0xC2EA, 0xC2EB, 0xC2EC, 0xC2ED, 0xC2EE, 0xC2EF, 0xC2F0, /* 0xF0 */ + 0xC2F1, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F6, 0xC2F7, 0xC2F8, 0xC2F9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC2FA, 0xC2FB, 0xC2FC, 0xC2FD, 0xC341, 0xC342, 0xC343, 0xC344, /* 0x00 */ + 0xC345, 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0xC34C, /* 0x00 */ + 0xC34D, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC353, 0xC354, 0xC355, /* 0x10 */ + 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, 0xC35B, 0xC35C, 0xC35D, /* 0x10 */ + 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0xC368, /* 0x20 */ + 0xC369, 0xC36A, 0xC36B, 0xC36C, 0xC36D, 0xC36E, 0xC36F, 0xC370, /* 0x20 */ + 0xC371, 0xC373, 0xC374, 0xC375, 0xC376, 0xC377, 0xC378, 0xC379, /* 0x30 */ + 0xC37A, 0xC37B, 0xC37C, 0xC37D, 0xC381, 0xC382, 0xC383, 0xC384, /* 0x30 */ + 0xC385, 0xC386, 0xC387, 0xC388, 0xC389, 0xC38A, 0xC38B, 0xC38C, /* 0x40 */ + 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC393, 0xC394, 0xC395, /* 0x40 */ + 0xC396, 0xC397, 0xC398, 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, /* 0x50 */ + 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, /* 0x50 */ + 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, /* 0x60 */ + 0xC3B1, 0xC3B3, 0xC3B4, 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, /* 0x60 */ + 0xC3BA, 0xC3BB, 0xC3BC, 0xC3BD, 0xC461, 0xC462, 0xC463, 0xC464, /* 0x70 */ + 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, 0xC46A, 0xC46B, 0xC46C, /* 0x70 */ + 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC473, 0xC474, 0xC475, /* 0x80 */ + 0xC476, 0xC477, 0xC478, 0xC479, 0xC47A, 0xC47B, 0xC47C, 0xC47D, /* 0x80 */ + 0xC481, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, /* 0x90 */ + 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xC490, /* 0x90 */ + 0xC491, 0xC493, 0xC494, 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, /* 0xA0 */ + 0xC49A, 0xC49B, 0xC49C, 0xC49D, 0xC4A1, 0xC4A2, 0xC4A3, 0xC4A4, /* 0xA0 */ + 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9, 0xC4AA, 0xC4AB, 0xC4AC, /* 0xB0 */ + 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, 0xC4B3, 0xC4B4, 0xC4B5, /* 0xB0 */ + 0xC4B6, 0xC4B7, 0xC4B8, 0xC4B9, 0xC4BA, 0xC4BB, 0xC4BC, 0xC4BD, /* 0xC0 */ + 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, 0xC4C6, 0xC4C7, 0xC4C8, /* 0xC0 */ + 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, 0xC4CE, 0xC4CF, 0xC4D0, /* 0xD0 */ + 0xC4D1, 0xC4D3, 0xC4D4, 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, /* 0xD0 */ + 0xC4DA, 0xC4DB, 0xC4DC, 0xC4DD, 0xC4E1, 0xC4E2, 0xC4E3, 0xC4E4, /* 0xE0 */ + 0xC4E5, 0xC4E6, 0xC4E7, 0xC4E8, 0xC4E9, 0xC4EA, 0xC4EB, 0xC4EC, /* 0xE0 */ + 0xC4ED, 0xC4EE, 0xC4EF, 0xC4F0, 0xC4F1, 0xC4F3, 0xC4F4, 0xC4F5, /* 0xF0 */ + 0xC4F6, 0xC4F7, 0xC4F8, 0xC4F9, 0xC4FA, 0xC4FB, 0xC4FC, 0xC4FD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC541, 0xC542, 0xC543, 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, /* 0x00 */ + 0xC549, 0xC54A, 0xC54B, 0xC54C, 0xC54D, 0xC54E, 0xC54F, 0xC550, /* 0x00 */ + 0xC551, 0xC553, 0xC554, 0xC555, 0xC556, 0xC557, 0xC558, 0xC559, /* 0x10 */ + 0xC55A, 0xC55B, 0xC55C, 0xC55D, 0xC561, 0xC562, 0xC563, 0xC564, /* 0x10 */ + 0xC565, 0xC566, 0xC567, 0xC568, 0xC569, 0xC56A, 0xC56B, 0xC56C, /* 0x20 */ + 0xC56D, 0xC56E, 0xC56F, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575, /* 0x20 */ + 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57C, 0xC57D, /* 0x30 */ + 0xC581, 0xC582, 0xC583, 0xC584, 0xC585, 0xC586, 0xC587, 0xC588, /* 0x30 */ + 0xC589, 0xC58A, 0xC58B, 0xC58C, 0xC58D, 0xC58E, 0xC58F, 0xC590, /* 0x40 */ + 0xC591, 0xC593, 0xC594, 0xC595, 0xC596, 0xC597, 0xC598, 0xC599, /* 0x40 */ + 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, /* 0x50 */ + 0xC5A5, 0xC5A6, 0xC5A7, 0xC5A8, 0xC5A9, 0xC5AA, 0xC5AB, 0xC5AC, /* 0x50 */ + 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, 0xC5B3, 0xC5B4, 0xC5B5, /* 0x60 */ + 0xC5B6, 0xC5B7, 0xC5B8, 0xC5B9, 0xC5BA, 0xC5BB, 0xC5BC, 0xC5BD, /* 0x60 */ + 0xC5C1, 0xC5C2, 0xC5C3, 0xC5C4, 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, /* 0x70 */ + 0xC5C9, 0xC5CA, 0xC5CB, 0xC5CC, 0xC5CD, 0xC5CE, 0xC5CF, 0xC5D0, /* 0x70 */ + 0xC5D1, 0xC5D3, 0xC5D4, 0xC5D5, 0xC5D6, 0xC5D7, 0xC5D8, 0xC5D9, /* 0x80 */ + 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5E1, 0xC5E2, 0xC5E3, 0xC5E4, /* 0x80 */ + 0xC5E5, 0xC5E6, 0xC5E7, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EC, /* 0x90 */ + 0xC5ED, 0xC5EE, 0xC5EF, 0xC5F0, 0xC5F1, 0xC5F3, 0xC5F4, 0xC5F5, /* 0x90 */ + 0xC5F6, 0xC5F7, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB, 0xC5FC, 0xC5FD, /* 0xA0 */ + 0xC641, 0xC642, 0xC643, 0xC644, 0xC645, 0xC646, 0xC647, 0xC648, /* 0xA0 */ + 0xC649, 0xC64A, 0xC64B, 0xC64C, 0xC64D, 0xC64E, 0xC64F, 0xC650, /* 0xB0 */ + 0xC651, 0xC653, 0xC654, 0xC655, 0xC656, 0xC657, 0xC658, 0xC659, /* 0xB0 */ + 0xC65A, 0xC65B, 0xC65C, 0xC65D, 0xC661, 0xC662, 0xC663, 0xC664, /* 0xC0 */ + 0xC665, 0xC666, 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66C, /* 0xC0 */ + 0xC66D, 0xC66E, 0xC66F, 0xC670, 0xC671, 0xC673, 0xC674, 0xC675, /* 0xD0 */ + 0xC676, 0xC677, 0xC678, 0xC679, 0xC67A, 0xC67B, 0xC67C, 0xC67D, /* 0xD0 */ + 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xC686, 0xC687, 0xC688, /* 0xE0 */ + 0xC689, 0xC68A, 0xC68B, 0xC68C, 0xC68D, 0xC68E, 0xC68F, 0xC690, /* 0xE0 */ + 0xC691, 0xC693, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xC699, /* 0xF0 */ + 0xC69A, 0xC69B, 0xC69C, 0xC69D, 0xC6A1, 0xC6A2, 0xC6A3, 0xC6A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6A5, 0xC6A6, 0xC6A7, 0xC6A8, 0xC6A9, 0xC6AA, 0xC6AB, 0xC6AC, /* 0x00 */ + 0xC6AD, 0xC6AE, 0xC6AF, 0xC6B0, 0xC6B1, 0xC6B3, 0xC6B4, 0xC6B5, /* 0x00 */ + 0xC6B6, 0xC6B7, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6BB, 0xC6BC, 0xC6BD, /* 0x10 */ + 0xC6C1, 0xC6C2, 0xC6C3, 0xC6C4, 0xC6C5, 0xC6C6, 0xC6C7, 0xC6C8, /* 0x10 */ + 0xC6C9, 0xC6CA, 0xC6CB, 0xC6CC, 0xC6CD, 0xC6CE, 0xC6CF, 0xC6D0, /* 0x20 */ + 0xC6D1, 0xC6D3, 0xC6D4, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, /* 0x20 */ + 0xC6DA, 0xC6DB, 0xC6DC, 0xC6DD, 0xC6E1, 0xC6E2, 0xC6E3, 0xC6E4, /* 0x30 */ + 0xC6E5, 0xC6E6, 0xC6E7, 0xC6E8, 0xC6E9, 0xC6EA, 0xC6EB, 0xC6EC, /* 0x30 */ + 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F0, 0xC6F1, 0xC6F3, 0xC6F4, 0xC6F5, /* 0x40 */ + 0xC6F6, 0xC6F7, 0xC6F8, 0xC6F9, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FD, /* 0x40 */ + 0xC741, 0xC742, 0xC743, 0xC744, 0xC745, 0xC746, 0xC747, 0xC748, /* 0x50 */ + 0xC749, 0xC74A, 0xC74B, 0xC74C, 0xC74D, 0xC74E, 0xC74F, 0xC750, /* 0x50 */ + 0xC751, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC759, /* 0x60 */ + 0xC75A, 0xC75B, 0xC75C, 0xC75D, 0xC761, 0xC762, 0xC763, 0xC764, /* 0x60 */ + 0xC765, 0xC766, 0xC767, 0xC768, 0xC769, 0xC76A, 0xC76B, 0xC76C, /* 0x70 */ + 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC773, 0xC774, 0xC775, /* 0x70 */ + 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, 0xC77B, 0xC77C, 0xC77D, /* 0x80 */ + 0xC781, 0xC782, 0xC783, 0xC784, 0xC785, 0xC786, 0xC787, 0xC788, /* 0x80 */ + 0xC789, 0xC78A, 0xC78B, 0xC78C, 0xC78D, 0xC78E, 0xC78F, 0xC790, /* 0x90 */ + 0xC791, 0xC793, 0xC794, 0xC795, 0xC796, 0xC797, 0xC798, 0xC799, /* 0x90 */ + 0xC79A, 0xC79B, 0xC79C, 0xC79D, 0xC7A1, 0xC7A2, 0xC7A3, 0xC7A4, /* 0xA0 */ + 0xC7A5, 0xC7A6, 0xC7A7, 0xC7A8, 0xC7A9, 0xC7AA, 0xC7AB, 0xC7AC, /* 0xA0 */ + 0xC7AD, 0xC7AE, 0xC7AF, 0xC7B0, 0xC7B1, 0xC7B3, 0xC7B4, 0xC7B5, /* 0xB0 */ + 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BC, 0xC7BD, /* 0xB0 */ + 0xC861, 0xC862, 0xC863, 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, /* 0xC0 */ + 0xC869, 0xC86A, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC870, /* 0xC0 */ + 0xC871, 0xC873, 0xC874, 0xC875, 0xC876, 0xC877, 0xC878, 0xC879, /* 0xD0 */ + 0xC87A, 0xC87B, 0xC87C, 0xC87D, 0xC881, 0xC882, 0xC883, 0xC884, /* 0xD0 */ + 0xC885, 0xC886, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0xC88C, /* 0xE0 */ + 0xC88D, 0xC88E, 0xC88F, 0xC890, 0xC891, 0xC893, 0xC894, 0xC895, /* 0xE0 */ + 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, 0xC89B, 0xC89C, 0xC89D, /* 0xF0 */ + 0xC8A1, 0xC8A2, 0xC8A3, 0xC8A4, 0xC8A5, 0xC8A6, 0xC8A7, 0xC8A8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, 0xC8AE, 0xC8AF, 0xC8B0, /* 0x00 */ + 0xC8B1, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, 0xC8B7, 0xC8B8, 0xC8B9, /* 0x00 */ + 0xC8BA, 0xC8BB, 0xC8BC, 0xC8BD, 0xC8C1, 0xC8C2, 0xC8C3, 0xC8C4, /* 0x10 */ + 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C8, 0xC8C9, 0xC8CA, 0xC8CB, 0xC8CC, /* 0x10 */ + 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D3, 0xC8D4, 0xC8D5, /* 0x20 */ + 0xC8D6, 0xC8D7, 0xC8D8, 0xC8D9, 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, /* 0x20 */ + 0xC8E1, 0xC8E2, 0xC8E3, 0xC8E4, 0xC8E5, 0xC8E6, 0xC8E7, 0xC8E8, /* 0x30 */ + 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, /* 0x30 */ + 0xC8F1, 0xC8F3, 0xC8F4, 0xC8F5, 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, /* 0x40 */ + 0xC8FA, 0xC8FB, 0xC8FC, 0xC8FD, 0xC941, 0xC942, 0xC943, 0xC944, /* 0x40 */ + 0xC945, 0xC946, 0xC947, 0xC948, 0xC949, 0xC94A, 0xC94B, 0xC94C, /* 0x50 */ + 0xC94D, 0xC94E, 0xC94F, 0xC950, 0xC951, 0xC953, 0xC954, 0xC955, /* 0x50 */ + 0xC956, 0xC957, 0xC958, 0xC959, 0xC95A, 0xC95B, 0xC95C, 0xC95D, /* 0x60 */ + 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, 0xC966, 0xC967, 0xC968, /* 0x60 */ + 0xC969, 0xC96A, 0xC96B, 0xC96C, 0xC96D, 0xC96E, 0xC96F, 0xC970, /* 0x70 */ + 0xC971, 0xC973, 0xC974, 0xC975, 0xC976, 0xC977, 0xC978, 0xC979, /* 0x70 */ + 0xC97A, 0xC97B, 0xC97C, 0xC97D, 0xC981, 0xC982, 0xC983, 0xC984, /* 0x80 */ + 0xC985, 0xC986, 0xC987, 0xC988, 0xC989, 0xC98A, 0xC98B, 0xC98C, /* 0x80 */ + 0xC98D, 0xC98E, 0xC98F, 0xC990, 0xC991, 0xC993, 0xC994, 0xC995, /* 0x90 */ + 0xC996, 0xC997, 0xC998, 0xC999, 0xC99A, 0xC99B, 0xC99C, 0xC99D, /* 0x90 */ + 0xC9A1, 0xC9A2, 0xC9A3, 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, /* 0xA0 */ + 0xC9A9, 0xC9AA, 0xC9AB, 0xC9AC, 0xC9AD, 0xC9AE, 0xC9AF, 0xC9B0, /* 0xA0 */ + 0xC9B1, 0xC9B3, 0xC9B4, 0xC9B5, 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, /* 0xB0 */ + 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, 0xC9C1, 0xC9C2, 0xC9C3, 0xC9C4, /* 0xB0 */ + 0xC9C5, 0xC9C6, 0xC9C7, 0xC9C8, 0xC9C9, 0xC9CA, 0xC9CB, 0xC9CC, /* 0xC0 */ + 0xC9CD, 0xC9CE, 0xC9CF, 0xC9D0, 0xC9D1, 0xC9D3, 0xC9D4, 0xC9D5, /* 0xC0 */ + 0xC9D6, 0xC9D7, 0xC9D8, 0xC9D9, 0xC9DA, 0xC9DB, 0xC9DC, 0xC9DD, /* 0xD0 */ + 0xC9E1, 0xC9E2, 0xC9E3, 0xC9E4, 0xC9E5, 0xC9E6, 0xC9E7, 0xC9E8, /* 0xD0 */ + 0xC9E9, 0xC9EA, 0xC9EB, 0xC9EC, 0xC9ED, 0xC9EE, 0xC9EF, 0xC9F0, /* 0xE0 */ + 0xC9F1, 0xC9F3, 0xC9F4, 0xC9F5, 0xC9F6, 0xC9F7, 0xC9F8, 0xC9F9, /* 0xE0 */ + 0xC9FA, 0xC9FB, 0xC9FC, 0xC9FD, 0xCA41, 0xCA42, 0xCA43, 0xCA44, /* 0xF0 */ + 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA4D, 0xCA4E, 0xCA4F, 0xCA50, 0xCA51, 0xCA53, 0xCA54, 0xCA55, /* 0x00 */ + 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, 0xCA5C, 0xCA5D, /* 0x00 */ + 0xCA61, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA68, /* 0x10 */ + 0xCA69, 0xCA6A, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xCA70, /* 0x10 */ + 0xCA71, 0xCA73, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, /* 0x20 */ + 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, 0xCA81, 0xCA82, 0xCA83, 0xCA84, /* 0x20 */ + 0xCA85, 0xCA86, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, /* 0x30 */ + 0xCA8D, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA93, 0xCA94, 0xCA95, /* 0x30 */ + 0xCA96, 0xCA97, 0xCA98, 0xCA99, 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, /* 0x40 */ + 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, 0xCAA7, 0xCAA8, /* 0x40 */ + 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, 0xCAAF, 0xCAB0, /* 0x50 */ + 0xCAB1, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, 0xCAB7, 0xCAB8, 0xCAB9, /* 0x50 */ + 0xCABA, 0xCABB, 0xCABC, 0xCABD, 0xCAC1, 0xCAC2, 0xCAC3, 0xCAC4, /* 0x60 */ + 0xCAC5, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA, 0xCACB, 0xCACC, /* 0x60 */ + 0xCACD, 0xCACE, 0xCACF, 0xCAD0, 0xCAD1, 0xCAD3, 0xCAD4, 0xCAD5, /* 0x70 */ + 0xCAD6, 0xCAD7, 0xCAD8, 0xCAD9, 0xCADA, 0xCADB, 0xCADC, 0xCADD, /* 0x70 */ + 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4, 0xCAE5, 0xCAE6, 0xCAE7, 0xCAE8, /* 0x80 */ + 0xCAE9, 0xCAEA, 0xCAEB, 0xCAEC, 0xCAED, 0xCAEE, 0xCAEF, 0xCAF0, /* 0x80 */ + 0xCAF1, 0xCAF3, 0xCAF4, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, 0xCAF9, /* 0x90 */ + 0xCAFA, 0xCAFB, 0xCAFC, 0xCAFD, 0xCB41, 0xCB42, 0xCB43, 0xCB44, /* 0x90 */ + 0xCB45, 0xCB46, 0xCB47, 0xCB48, 0xCB49, 0xCB4A, 0xCB4B, 0xCB4C, /* 0xA0 */ + 0xCB4D, 0xCB4E, 0xCB4F, 0xCB50, 0xCB51, 0xCB53, 0xCB54, 0xCB55, /* 0xA0 */ + 0xCB56, 0xCB57, 0xCB58, 0xCB59, 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5D, /* 0xB0 */ + 0xCB61, 0xCB62, 0xCB63, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, /* 0xB0 */ + 0xCB69, 0xCB6A, 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, /* 0xC0 */ + 0xCB71, 0xCB73, 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xCB78, 0xCB79, /* 0xC0 */ + 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, 0xCB81, 0xCB82, 0xCB83, 0xCB84, /* 0xD0 */ + 0xCB85, 0xCB86, 0xCB87, 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, /* 0xD0 */ + 0xCB8D, 0xCB8E, 0xCB8F, 0xCB90, 0xCB91, 0xCB93, 0xCB94, 0xCB95, /* 0xE0 */ + 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9C, 0xCB9D, /* 0xE0 */ + 0xCBA1, 0xCBA2, 0xCBA3, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, /* 0xF0 */ + 0xCBA9, 0xCBAA, 0xCBAB, 0xCBAC, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCBB1, 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7, 0xCBB8, 0xCBB9, /* 0x00 */ + 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, 0xCC61, 0xCC62, 0xCC63, 0xCC64, /* 0x00 */ + 0xCC65, 0xCC66, 0xCC67, 0xCC68, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, /* 0x10 */ + 0xCC6D, 0xCC6E, 0xCC6F, 0xCC70, 0xCC71, 0xCC73, 0xCC74, 0xCC75, /* 0x10 */ + 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, 0xCC7B, 0xCC7C, 0xCC7D, /* 0x20 */ + 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, /* 0x20 */ + 0xCC89, 0xCC8A, 0xCC8B, 0xCC8C, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, /* 0x30 */ + 0xCC91, 0xCC93, 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0xCC98, 0xCC99, /* 0x30 */ + 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, /* 0x40 */ + 0xCCA5, 0xCCA6, 0xCCA7, 0xCCA8, 0xCCA9, 0xCCAA, 0xCCAB, 0xCCAC, /* 0x40 */ + 0xCCAD, 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB3, 0xCCB4, 0xCCB5, /* 0x50 */ + 0xCCB6, 0xCCB7, 0xCCB8, 0xCCB9, 0xCCBA, 0xCCBB, 0xCCBC, 0xCCBD, /* 0x50 */ + 0xCCC1, 0xCCC2, 0xCCC3, 0xCCC4, 0xCCC5, 0xCCC6, 0xCCC7, 0xCCC8, /* 0x60 */ + 0xCCC9, 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF, 0xCCD0, /* 0x60 */ + 0xCCD1, 0xCCD3, 0xCCD4, 0xCCD5, 0xCCD6, 0xCCD7, 0xCCD8, 0xCCD9, /* 0x70 */ + 0xCCDA, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCE1, 0xCCE2, 0xCCE3, 0xCCE4, /* 0x70 */ + 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, 0xCCEB, 0xCCEC, /* 0x80 */ + 0xCCED, 0xCCEE, 0xCCEF, 0xCCF0, 0xCCF1, 0xCCF3, 0xCCF4, 0xCCF5, /* 0x80 */ + 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC, 0xCCFD, /* 0x90 */ + 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, 0xCD46, 0xCD47, 0xCD48, /* 0x90 */ + 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, 0xCD4F, 0xCD50, /* 0xA0 */ + 0xCD51, 0xCD53, 0xCD54, 0xCD55, 0xCD56, 0xCD57, 0xCD58, 0xCD59, /* 0xA0 */ + 0xCD5A, 0xCD5B, 0xCD5C, 0xCD5D, 0xCD61, 0xCD62, 0xCD63, 0xCD64, /* 0xB0 */ + 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, 0xCD6A, 0xCD6B, 0xCD6C, /* 0xB0 */ + 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, 0xCD71, 0xCD73, 0xCD74, 0xCD75, /* 0xC0 */ + 0xCD76, 0xCD77, 0xCD78, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, /* 0xC0 */ + 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, 0xCD87, 0xCD88, /* 0xD0 */ + 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, 0xCD8E, 0xCD8F, 0xCD90, /* 0xD0 */ + 0xCD91, 0xCD93, 0xCD94, 0xCD95, 0xCD96, 0xCD97, 0xCD98, 0xCD99, /* 0xE0 */ + 0xCD9A, 0xCD9B, 0xCD9C, 0xCD9D, 0xCDA1, 0xCDA2, 0xCDA3, 0xCDA4, /* 0xE0 */ + 0xCDA5, 0xCDA6, 0xCDA7, 0xCDA8, 0xCDA9, 0xCDAA, 0xCDAB, 0xCDAC, /* 0xF0 */ + 0xCDAD, 0xCDAE, 0xCDAF, 0xCDB0, 0xCDB1, 0xCDB3, 0xCDB4, 0xCDB5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, 0xCDBC, 0xCDBD, /* 0x00 */ + 0xCDC1, 0xCDC2, 0xCDC3, 0xCDC4, 0xCDC5, 0xCDC6, 0xCDC7, 0xCDC8, /* 0x00 */ + 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCC, 0xCDCD, 0xCDCE, 0xCDCF, 0xCDD0, /* 0x10 */ + 0xCDD1, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, 0xCDD7, 0xCDD8, 0xCDD9, /* 0x10 */ + 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDE1, 0xCDE2, 0xCDE3, 0xCDE4, /* 0x20 */ + 0xCDE5, 0xCDE6, 0xCDE7, 0xCDE8, 0xCDE9, 0xCDEA, 0xCDEB, 0xCDEC, /* 0x20 */ + 0xCDED, 0xCDEE, 0xCDEF, 0xCDF0, 0xCDF1, 0xCDF3, 0xCDF4, 0xCDF5, /* 0x30 */ + 0xCDF6, 0xCDF7, 0xCDF8, 0xCDF9, 0xCDFA, 0xCDFB, 0xCDFC, 0xCDFD, /* 0x30 */ + 0xCE41, 0xCE42, 0xCE43, 0xCE44, 0xCE45, 0xCE46, 0xCE47, 0xCE48, /* 0x40 */ + 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, /* 0x40 */ + 0xCE51, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0xCE58, 0xCE59, /* 0x50 */ + 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE61, 0xCE62, 0xCE63, 0xCE64, /* 0x50 */ + 0xCE65, 0xCE66, 0xCE67, 0xCE68, 0xCE69, 0xCE6A, 0xCE6B, 0xCE6C, /* 0x60 */ + 0xCE6D, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE73, 0xCE74, 0xCE75, /* 0x60 */ + 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7C, 0xCE7D, /* 0x70 */ + 0xCE81, 0xCE82, 0xCE83, 0xCE84, 0xCE85, 0xCE86, 0xCE87, 0xCE88, /* 0x70 */ + 0xCE89, 0xCE8A, 0xCE8B, 0xCE8C, 0xCE8D, 0xCE8E, 0xCE8F, 0xCE90, /* 0x80 */ + 0xCE91, 0xCE93, 0xCE94, 0xCE95, 0xCE96, 0xCE97, 0xCE98, 0xCE99, /* 0x80 */ + 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCEA1, 0xCEA2, 0xCEA3, 0xCEA4, /* 0x90 */ + 0xCEA5, 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAC, /* 0x90 */ + 0xCEAD, 0xCEAE, 0xCEAF, 0xCEB0, 0xCEB1, 0xCEB3, 0xCEB4, 0xCEB5, /* 0xA0 */ + 0xCEB6, 0xCEB7, 0xCEB8, 0xCEB9, 0xCEBA, 0xCEBB, 0xCEBC, 0xCEBD, /* 0xA0 */ + 0xCEC1, 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0xCEC8, /* 0xB0 */ + 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF, 0xCED0, /* 0xB0 */ + 0xCED1, 0xCED3, 0xCED4, 0xCED5, 0xCED6, 0xCED7, 0xCED8, 0xCED9, /* 0xC0 */ + 0xCEDA, 0xCEDB, 0xCEDC, 0xCEDD, 0xCEE1, 0xCEE2, 0xCEE3, 0xCEE4, /* 0xC0 */ + 0xCEE5, 0xCEE6, 0xCEE7, 0xCEE8, 0xCEE9, 0xCEEA, 0xCEEB, 0xCEEC, /* 0xD0 */ + 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, 0xCEF3, 0xCEF4, 0xCEF5, /* 0xD0 */ + 0xCEF6, 0xCEF7, 0xCEF8, 0xCEF9, 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, /* 0xE0 */ + 0xCF41, 0xCF42, 0xCF43, 0xCF44, 0xCF45, 0xCF46, 0xCF47, 0xCF48, /* 0xE0 */ + 0xCF49, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D, 0xCF4E, 0xCF4F, 0xCF50, /* 0xF0 */ + 0xCF51, 0xCF53, 0xCF54, 0xCF55, 0xCF56, 0xCF57, 0xCF58, 0xCF59 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCF5A, 0xCF5B, 0xCF5C, 0xCF5D, 0xCF61, 0xCF62, 0xCF63, 0xCF64, /* 0x00 */ + 0xCF65, 0xCF66, 0xCF67, 0xCF68, 0xCF69, 0xCF6A, 0xCF6B, 0xCF6C, /* 0x00 */ + 0xCF6D, 0xCF6E, 0xCF6F, 0xCF70, 0xCF71, 0xCF73, 0xCF74, 0xCF75, /* 0x10 */ + 0xCF76, 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, /* 0x10 */ + 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF85, 0xCF86, 0xCF87, 0xCF88, /* 0x20 */ + 0xCF89, 0xCF8A, 0xCF8B, 0xCF8C, 0xCF8D, 0xCF8E, 0xCF8F, 0xCF90, /* 0x20 */ + 0xCF91, 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, /* 0x30 */ + 0xCF9A, 0xCF9B, 0xCF9C, 0xCF9D, 0xCFA1, 0xCFA2, 0xCFA3, 0xCFA4, /* 0x30 */ + 0xCFA5, 0xCFA6, 0xCFA7, 0xCFA8, 0xCFA9, 0xCFAA, 0xCFAB, 0xCFAC, /* 0x40 */ + 0xCFAD, 0xCFAE, 0xCFAF, 0xCFB0, 0xCFB1, 0xCFB3, 0xCFB4, 0xCFB5, /* 0x40 */ + 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9, 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, /* 0x50 */ + 0xD061, 0xD062, 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xD068, /* 0x50 */ + 0xD069, 0xD06A, 0xD06B, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, /* 0x60 */ + 0xD071, 0xD073, 0xD074, 0xD075, 0xD076, 0xD077, 0xD078, 0xD079, /* 0x60 */ + 0xD07A, 0xD07B, 0xD07C, 0xD07D, 0xD081, 0xD082, 0xD083, 0xD084, /* 0x70 */ + 0xD085, 0xD086, 0xD087, 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, /* 0x70 */ + 0xD08D, 0xD08E, 0xD08F, 0xD090, 0xD091, 0xD093, 0xD094, 0xD095, /* 0x80 */ + 0xD096, 0xD097, 0xD098, 0xD099, 0xD09A, 0xD09B, 0xD09C, 0xD09D, /* 0x80 */ + 0xD0A1, 0xD0A2, 0xD0A3, 0xD0A4, 0xD0A5, 0xD0A6, 0xD0A7, 0xD0A8, /* 0x90 */ + 0xD0A9, 0xD0AA, 0xD0AB, 0xD0AC, 0xD0AD, 0xD0AE, 0xD0AF, 0xD0B0, /* 0x90 */ + 0xD0B1, 0xD0B3, 0xD0B4, 0xD0B5, 0xD0B6, 0xD0B7, 0xD0B8, 0xD0B9, /* 0xA0 */ + 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, 0xD0C1, 0xD0C2, 0xD0C3, 0xD0C4, /* 0xA0 */ + 0xD0C5, 0xD0C6, 0xD0C7, 0xD0C8, 0xD0C9, 0xD0CA, 0xD0CB, 0xD0CC, /* 0xB0 */ + 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D0, 0xD0D1, 0xD0D3, 0xD0D4, 0xD0D5, /* 0xB0 */ + 0xD0D6, 0xD0D7, 0xD0D8, 0xD0D9, 0xD0DA, 0xD0DB, 0xD0DC, 0xD0DD, /* 0xC0 */ + 0xD0E1, 0xD0E2, 0xD0E3, 0xD0E4, 0xD0E5, 0xD0E6, 0xD0E7, 0xD0E8, /* 0xC0 */ + 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EC, 0xD0ED, 0xD0EE, 0xD0EF, 0xD0F0, /* 0xD0 */ + 0xD0F1, 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F8, 0xD0F9, /* 0xD0 */ + 0xD0FA, 0xD0FB, 0xD0FC, 0xD0FD, 0xD141, 0xD142, 0xD143, 0xD144, /* 0xE0 */ + 0xD145, 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, 0xD14B, 0xD14C, /* 0xE0 */ + 0xD14D, 0xD14E, 0xD14F, 0xD150, 0xD151, 0xD153, 0xD154, 0xD155, /* 0xF0 */ + 0xD156, 0xD157, 0xD158, 0xD159, 0xD15A, 0xD15B, 0xD15C, 0xD15D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD161, 0xD162, 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0xD168, /* 0x00 */ + 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, 0xD16F, 0xD170, /* 0x00 */ + 0xD171, 0xD173, 0xD174, 0xD175, 0xD176, 0xD177, 0xD178, 0xD179, /* 0x10 */ + 0xD17A, 0xD17B, 0xD17C, 0xD17D, 0xD181, 0xD182, 0xD183, 0xD184, /* 0x10 */ + 0xD185, 0xD186, 0xD187, 0xD188, 0xD189, 0xD18A, 0xD18B, 0xD18C, /* 0x20 */ + 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD193, 0xD194, 0xD195, /* 0x20 */ + 0xD196, 0xD197, 0xD198, 0xD199, 0xD19A, 0xD19B, 0xD19C, 0xD19D, /* 0x30 */ + 0xD1A1, 0xD1A2, 0xD1A3, 0xD1A4, 0xD1A5, 0xD1A6, 0xD1A7, 0xD1A8, /* 0x30 */ + 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF, 0xD1B0, /* 0x40 */ + 0xD1B1, 0xD1B3, 0xD1B4, 0xD1B5, 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, /* 0x40 */ + 0xD1BA, 0xD1BB, 0xD1BC, 0xD1BD, 0xD1C1, 0xD1C2, 0xD1C3, 0xD1C4, /* 0x50 */ + 0xD1C5, 0xD1C6, 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, 0xD1CB, 0xD1CC, /* 0x50 */ + 0xD1CD, 0xD1CE, 0xD1CF, 0xD1D0, 0xD1D1, 0xD1D3, 0xD1D4, 0xD1D5, /* 0x60 */ + 0xD1D6, 0xD1D7, 0xD1D8, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, /* 0x60 */ + 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, 0xD1E7, 0xD1E8, /* 0x70 */ + 0xD1E9, 0xD1EA, 0xD1EB, 0xD1EC, 0xD1ED, 0xD1EE, 0xD1EF, 0xD1F0, /* 0x70 */ + 0xD1F1, 0xD1F3, 0xD1F4, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F8, 0xD1F9, /* 0x80 */ + 0xD1FA, 0xD1FB, 0xD1FC, 0xD1FD, 0xD241, 0xD242, 0xD243, 0xD244, /* 0x80 */ + 0xD245, 0xD246, 0xD247, 0xD248, 0xD249, 0xD24A, 0xD24B, 0xD24C, /* 0x90 */ + 0xD24D, 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD253, 0xD254, 0xD255, /* 0x90 */ + 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, /* 0xA0 */ + 0xD261, 0xD262, 0xD263, 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, /* 0xA0 */ + 0xD269, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, /* 0xB0 */ + 0xD271, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, /* 0xB0 */ + 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD281, 0xD282, 0xD283, 0xD284, /* 0xC0 */ + 0xD285, 0xD286, 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, /* 0xC0 */ + 0xD28D, 0xD28E, 0xD28F, 0xD290, 0xD291, 0xD293, 0xD294, 0xD295, /* 0xD0 */ + 0xD296, 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29C, 0xD29D, /* 0xD0 */ + 0xD2A1, 0xD2A2, 0xD2A3, 0xD2A4, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, /* 0xE0 */ + 0xD2A9, 0xD2AA, 0xD2AB, 0xD2AC, 0xD2AD, 0xD2AE, 0xD2AF, 0xD2B0, /* 0xE0 */ + 0xD2B1, 0xD2B3, 0xD2B4, 0xD2B5, 0xD2B6, 0xD2B7, 0xD2B8, 0xD2B9, /* 0xF0 */ + 0xD2BA, 0xD2BB, 0xD2BC, 0xD2BD, 0xD2C1, 0xD2C2, 0xD2C3, 0xD2C4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_D7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2C5, 0xD2C6, 0xD2C7, 0xD2C8, 0xD2C9, 0xD2CA, 0xD2CB, 0xD2CC, /* 0x00 */ + 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D3, 0xD2D4, 0xD2D5, /* 0x00 */ + 0xD2D6, 0xD2D7, 0xD2D8, 0xD2D9, 0xD2DA, 0xD2DB, 0xD2DC, 0xD2DD, /* 0x10 */ + 0xD2E1, 0xD2E2, 0xD2E3, 0xD2E4, 0xD2E5, 0xD2E6, 0xD2E7, 0xD2E8, /* 0x10 */ + 0xD2E9, 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, 0xD2F0, /* 0x20 */ + 0xD2F1, 0xD2F3, 0xD2F4, 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F8, 0xD2F9, /* 0x20 */ + 0xD2FA, 0xD2FB, 0xD2FC, 0xD2FD, 0xD341, 0xD342, 0xD343, 0xD344, /* 0x30 */ + 0xD345, 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, 0xD34B, 0xD34C, /* 0x30 */ + 0xD34D, 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD353, 0xD354, 0xD355, /* 0x40 */ + 0xD356, 0xD357, 0xD358, 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, /* 0x40 */ + 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368, /* 0x50 */ + 0xD369, 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370, /* 0x50 */ + 0xD371, 0xD373, 0xD374, 0xD375, 0xD376, 0xD377, 0xD378, 0xD379, /* 0x60 */ + 0xD37A, 0xD37B, 0xD37C, 0xD37D, 0xD381, 0xD382, 0xD383, 0xD384, /* 0x60 */ + 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, 0xD38B, 0xD38C, /* 0x70 */ + 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, 0xD393, 0xD394, 0xD395, /* 0x70 */ + 0xD396, 0xD397, 0xD398, 0xD399, 0xD39A, 0xD39B, 0xD39C, 0xD39D, /* 0x80 */ + 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, 0xD3A6, 0xD3A7, 0xD3A8, /* 0x80 */ + 0xD3A9, 0xD3AA, 0xD3AB, 0xD3AC, 0xD3AD, 0xD3AE, 0xD3AF, 0xD3B0, /* 0x90 */ + 0xD3B1, 0xD3B3, 0xD3B4, 0xD3B5, 0xD3B6, 0xD3B7, 0xD3B8, 0xD3B9, /* 0x90 */ + 0xD3BA, 0xD3BB, 0xD3BC, 0xD3BD /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0D0, 0xE0D6, 0xE0E7, 0xE1CF, 0xE1E8, 0xE23D, 0xE2FB, 0xE332, /* 0x00 */ + 0xE348, 0xE360, 0xE36D, 0xE3D4, 0xE3D5, 0xE3D8, 0xE3DB, 0xE3DC, /* 0x00 */ + 0xE3DD, 0xE3DE, 0xE3DF, 0xE3E0, 0xE3E2, 0xE3E3, 0xE3E4, 0xE3E5, /* 0x10 */ + 0xE3E6, 0xE3E8, 0xE3E9, 0xE3EA, 0xE3EB, 0xE3ED, 0xE3EF, 0xE3F0, /* 0x10 */ + 0xE3F2, 0xE3F6, 0xE3FA, 0xE3FC, 0xE3FD, 0xE3FE, 0xE432, 0xE433, /* 0x20 */ + 0xE437, 0xE438, 0xE439, 0xE43A, 0xE43B, 0xE43D, 0xE442, 0xE44E, /* 0x20 */ + 0xE452, 0xE453, 0xE454, 0xE456, 0xE457, 0xE458, 0xE459, 0xE45A, /* 0x30 */ + 0xE45B, 0xE45D, 0xE45E, 0xE45F, 0xE460, 0xE461, 0xE462, 0xE463, /* 0x30 */ + 0xE464, 0xE465, 0xE466, 0xE467, 0xE469, 0xE46A, 0xE46E, 0xE46F, /* 0x40 */ + 0xE471, 0xE472, 0xE474, 0xE475, 0xE476, 0xE477, 0xE478, 0xE479, /* 0x40 */ + 0xE47A, 0xE47B, 0xE492, 0xE493, 0xE494, 0xE495, 0xE496, 0xE497, /* 0x50 */ + 0xE499, 0xE49A, 0xE576, 0xE59E, 0xE5A5, 0xE5AB, 0xE5AE, 0xE648, /* 0x50 */ + 0xE65D, 0xE6CB, 0xE6E4, 0xE8C5, 0xE8E4, 0xE935, 0xE9A5, 0xE9D5, /* 0x60 */ + 0xE9F4, 0xEA9E, 0xEAA0, 0xEAB3, 0xEAE1, 0xEAE8, 0xEB93, 0xEBAD, /* 0x60 */ + 0xEBED, 0xECF5, 0xED31, 0xED39, 0xEDAE, 0xEDB1, 0xEDB2, 0xEDB9, /* 0x70 */ + 0xEDBB, 0xEDBC, 0xEDC4, 0xEDCE, 0xEDD0, 0xEDD2, 0xEDD6, 0xEDFA, /* 0x70 */ + 0xEDFB, 0xEDFC, 0xEDFE, 0xEE31, 0xEE34, 0xEE37, 0xEE3D, 0xEE3F, /* 0x80 */ + 0xEE40, 0xEE41, 0xEE43, 0xEE47, 0xEE48, 0xEE4C, 0xEE54, 0xEE56, /* 0x80 */ + 0xEE57, 0xEE5A, 0xEE62, 0xEE66, 0xEE69, 0xEE6C, 0xEE6F, 0xEE71, /* 0x90 */ + 0xEE74, 0xEE75, 0xEE76, 0xEE78, 0xEE7A, 0xEE7B, 0xEE7C, 0xEE91, /* 0x90 */ + 0xEE93, 0xEE94, 0xEE97, 0xEE98, 0xEE99, 0xEE9B, 0xEEA1, 0xEEA6, /* 0xA0 */ + 0xEEA9, 0xEEAA, 0xEEAC, 0xEEAD, 0xEEB0, 0xEEBF, 0xEEC1, 0xEEC6, /* 0xA0 */ + 0xEEC7, 0xEECB, 0xEECD, 0xEECF, 0xEED0, 0xEED3, 0xEEDF, 0xEEE4, /* 0xB0 */ + 0xEEE6, 0xEEF7, 0xEF77, 0xEF78, 0xEF92, 0xEF93, 0xEF99, 0xEF9B, /* 0xB0 */ + 0xEF9D, 0xEFA0, 0xEFA7, 0xEFAC, 0xEFCC, 0xEFF7, 0xF051, 0xF075, /* 0xC0 */ + 0xF096, 0xF099, 0xF09E, 0xF0A0, 0xF0A4, 0xF0A7, 0xF0A9, 0xF0AA, /* 0xC0 */ + 0xF0BA, 0xF0BB, 0xF0BD, 0xF0C1, 0xF0C2, 0xF0C6, 0xF0C7, 0xF0CC, /* 0xD0 */ + 0xF0CF, 0xF0D0, 0xF0D1, 0xF0D2, 0xF0D8, 0xF136, 0xF137, 0xF13A, /* 0xD0 */ + 0xF13F, 0xF140, 0xF141, 0xF142, 0xF145, 0xF148, 0xF14A, 0xF150, /* 0xE0 */ + 0xF151, 0xF155, 0xF156, 0xF159, 0xF15A, 0xF165, 0xF16D, 0xF16E, /* 0xE0 */ + 0xF171, 0xF174, 0xF177, 0xF178, 0xF199, 0xF19A, 0xF19C, 0xF1A1, /* 0xF0 */ + 0xF1A2, 0xF1A3, 0xF1EE, 0xF26B, 0xF44D, 0xF49C, 0xF4B1, 0xF537 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF57E, 0xF696, 0xF698, 0xF6B8, 0xF6C8, 0xF6D3, 0xF76B, 0xF792, /* 0x00 */ + 0xF831, 0xF832, 0xF876, 0xF939 /* 0x00 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_JOHAB_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDA31, 0xDA32, 0xDA33, 0xDA34, 0xDA35, 0xDA36, 0xDA37, /* 0x00 */ + 0xDA38, 0xDA39, 0xDA3A, 0xDA3B, 0xDA3C, 0xDA3D, 0xDA3E, 0xDA3F, /* 0x00 */ + 0xDA40, 0xDA41, 0xDA42, 0xDA43, 0xDA44, 0xDA45, 0xDA46, 0xDA47, /* 0x10 */ + 0xDA48, 0xDA49, 0xDA4A, 0xDA4B, 0xDA4C, 0xDA4D, 0xDA4E, 0xDA4F, /* 0x10 */ + 0xDA50, 0xDA51, 0xDA52, 0xDA53, 0xDA54, 0xDA55, 0xDA56, 0xDA57, /* 0x20 */ + 0xDA58, 0xDA59, 0xDA5A, 0xDA5B, 0xDA5C, 0xDA5D, 0xDA5E, 0xDA5F, /* 0x20 */ + 0xDA60, 0xDA61, 0xDA62, 0xDA63, 0xDA64, 0xDA65, 0xDA66, 0xDA67, /* 0x30 */ + 0xDA68, 0xDA69, 0xDA6A, 0xDA6B, 0xD93C, 0xDA6D, 0xDA6E, 0xDA6F, /* 0x30 */ + 0xDA70, 0xDA71, 0xDA72, 0xDA73, 0xDA74, 0xDA75, 0xDA76, 0xDA77, /* 0x40 */ + 0xDA78, 0xDA79, 0xDA7A, 0xDA7B, 0xDA7C, 0xDA7D, 0xDA7E, 0xDA91, /* 0x40 */ + 0xDA92, 0xDA93, 0xDA94, 0xDA95, 0xDA96, 0xDA97, 0xDA98, 0xDA99, /* 0x50 */ + 0xDA9A, 0xDA9B, 0xDA9C, 0xDA9D, 0xDA9E, 0xDA9F, 0xD9A6, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD95B, 0xD95C, 0xD9A0, 0xDAA0, 0, 0xD95D, 0xDA6C /* 0xE0 */ +}; + diff --git a/sal/textenc/tcvtkr6.tab b/sal/textenc/tcvtkr6.tab new file mode 100644 index 000000000..441e11332 --- /dev/null +++ b/sal/textenc/tcvtkr6.tab @@ -0,0 +1,1233 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the information tables for all */ +/* korean charsets: */ +/* CP949, JOHAB */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aKSC5601UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0, 1, 0, nullptr }, /* 0x80 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_81 }, /* 0x81 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_82 }, /* 0x82 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_83 }, /* 0x83 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_84 }, /* 0x84 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_85 }, /* 0x85 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_86 }, /* 0x86 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_87 }, /* 0x87 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_88 }, /* 0x88 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_89 }, /* 0x89 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8A }, /* 0x8A */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8B }, /* 0x8B */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8C }, /* 0x8C */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8D }, /* 0x8D */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8E }, /* 0x8E */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_8F }, /* 0x8F */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_90 }, /* 0x90 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_91 }, /* 0x91 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_92 }, /* 0x92 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_93 }, /* 0x93 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_94 }, /* 0x94 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_95 }, /* 0x95 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_96 }, /* 0x96 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_97 }, /* 0x97 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_98 }, /* 0x98 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_99 }, /* 0x99 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9A }, /* 0x9A */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9B }, /* 0x9B */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9C }, /* 0x9C */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9D }, /* 0x9D */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9E }, /* 0x9E */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_9F }, /* 0x9F */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A0 }, /* 0xA0 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A1 }, /* 0xA1 */ + { 0, 0x41, 0xE7, aImplDBCSToUniTab_KSC5601_A2 }, /* 0xA2 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A3 }, /* 0xA3 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A4 }, /* 0xA4 */ + { 0, 0x41, 0xF8, aImplDBCSToUniTab_KSC5601_A5 }, /* 0xA5 */ + { 0, 0x41, 0xE4, aImplDBCSToUniTab_KSC5601_A6 }, /* 0xA6 */ + { 0, 0x41, 0xEF, aImplDBCSToUniTab_KSC5601_A7 }, /* 0xA7 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A8 }, /* 0xA8 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_A9 }, /* 0xA9 */ + { 0, 0x41, 0xF3, aImplDBCSToUniTab_KSC5601_AA }, /* 0xAA */ + { 0, 0x41, 0xF6, aImplDBCSToUniTab_KSC5601_AB }, /* 0xAB */ + { 0, 0x41, 0xF1, aImplDBCSToUniTab_KSC5601_AC }, /* 0xAC */ + { 0, 0x41, 0xA0, aImplDBCSToUniTab_KSC5601_AD }, /* 0xAD */ + { 0, 0x41, 0xA0, aImplDBCSToUniTab_KSC5601_AE }, /* 0xAE */ + { 0, 0x41, 0xA0, aImplDBCSToUniTab_KSC5601_AF }, /* 0xAF */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B0 }, /* 0xB0 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B1 }, /* 0xB1 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B2 }, /* 0xB2 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B3 }, /* 0xB3 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B4 }, /* 0xB4 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B5 }, /* 0xB5 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B6 }, /* 0xB6 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B7 }, /* 0xB7 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B8 }, /* 0xB8 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_B9 }, /* 0xB9 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BA }, /* 0xBA */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BB }, /* 0xBB */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BC }, /* 0xBC */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BD }, /* 0xBD */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BE }, /* 0xBE */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_BF }, /* 0xBF */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C0 }, /* 0xC0 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C1 }, /* 0xC1 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C2 }, /* 0xC2 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C3 }, /* 0xC3 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C4 }, /* 0xC4 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C5 }, /* 0xC5 */ + { 0, 0x41, 0xFE, aImplDBCSToUniTab_KSC5601_C6 }, /* 0xC6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_C7 }, /* 0xC7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_C8 }, /* 0xC8 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CA }, /* 0xCA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CB }, /* 0xCB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CC }, /* 0xCC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CD }, /* 0xCD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CE }, /* 0xCE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_CF }, /* 0xCF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D0 }, /* 0xD0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D1 }, /* 0xD1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D2 }, /* 0xD2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D3 }, /* 0xD3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D4 }, /* 0xD4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D5 }, /* 0xD5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D6 }, /* 0xD6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D7 }, /* 0xD7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D8 }, /* 0xD8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_D9 }, /* 0xD9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DA }, /* 0xDA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DB }, /* 0xDB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DC }, /* 0xDC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DD }, /* 0xDD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DE }, /* 0xDE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_DF }, /* 0xDF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E0 }, /* 0xE0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E1 }, /* 0xE1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E2 }, /* 0xE2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E3 }, /* 0xE3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E4 }, /* 0xE4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E5 }, /* 0xE5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E6 }, /* 0xE6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E7 }, /* 0xE7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E8 }, /* 0xE8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_E9 }, /* 0xE9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EA }, /* 0xEA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EB }, /* 0xEB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EC }, /* 0xEC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_ED }, /* 0xED */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EE }, /* 0xEE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_EF }, /* 0xEF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F0 }, /* 0xF0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F1 }, /* 0xF1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F2 }, /* 0xF2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F3 }, /* 0xF3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F4 }, /* 0xF4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F5 }, /* 0xF5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F6 }, /* 0xF6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F7 }, /* 0xF7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F8 }, /* 0xF8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_F9 }, /* 0xF9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FA }, /* 0xFA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FB }, /* 0xFB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FC }, /* 0xFC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_KSC5601_FD }, /* 0xFD */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aKSC5601DBCSHighTab[256] = +{ + { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_00 }, /* 0x00 */ + { 0x11, 0x67, aImplUniToDBCSTab_KSC5601_01 }, /* 0x01 */ + { 0xC7, 0xDD, aImplUniToDBCSTab_KSC5601_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_KSC5601_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_KSC5601_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x15, 0xAC, aImplUniToDBCSTab_KSC5601_20 }, /* 0x20 */ + { 0x03, 0xD4, aImplUniToDBCSTab_KSC5601_21 }, /* 0x21 */ + { 0x00, 0xA5, aImplUniToDBCSTab_KSC5601_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_KSC5601_23 }, /* 0x23 */ + { 0x60, 0xE9, aImplUniToDBCSTab_KSC5601_24 }, /* 0x24 */ + { 0x00, 0xD1, aImplUniToDBCSTab_KSC5601_25 }, /* 0x25 */ + { 0x05, 0x6D, aImplUniToDBCSTab_KSC5601_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xF6, aImplUniToDBCSTab_KSC5601_30 }, /* 0x30 */ + { 0x31, 0x8E, aImplUniToDBCSTab_KSC5601_31 }, /* 0x31 */ + { 0x00, 0x7F, aImplUniToDBCSTab_KSC5601_32 }, /* 0x32 */ + { 0x80, 0xDD, aImplUniToDBCSTab_KSC5601_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFB, aImplUniToDBCSTab_KSC5601_4E }, /* 0x4E */ + { 0x01, 0xFA, aImplUniToDBCSTab_KSC5601_4F }, /* 0x4F */ + { 0x02, 0xFF, aImplUniToDBCSTab_KSC5601_50 }, /* 0x50 */ + { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_52 }, /* 0x52 */ + { 0x05, 0xF8, aImplUniToDBCSTab_KSC5601_53 }, /* 0x53 */ + { 0x03, 0xFA, aImplUniToDBCSTab_KSC5601_54 }, /* 0x54 */ + { 0x04, 0xFE, aImplUniToDBCSTab_KSC5601_55 }, /* 0x55 */ + { 0x06, 0xFA, aImplUniToDBCSTab_KSC5601_56 }, /* 0x56 */ + { 0x03, 0xFC, aImplUniToDBCSTab_KSC5601_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_58 }, /* 0x58 */ + { 0x0F, 0xFF, aImplUniToDBCSTab_KSC5601_59 }, /* 0x59 */ + { 0x01, 0xE9, aImplUniToDBCSTab_KSC5601_5A }, /* 0x5A */ + { 0x05, 0xFA, aImplUniToDBCSTab_KSC5601_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_KSC5601_5C }, /* 0x5C */ + { 0x07, 0xFE, aImplUniToDBCSTab_KSC5601_5D }, /* 0x5D */ + { 0x02, 0xFB, aImplUniToDBCSTab_KSC5601_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_KSC5601_5F }, /* 0x5F */ + { 0x0F, 0xFB, aImplUniToDBCSTab_KSC5601_60 }, /* 0x60 */ + { 0x01, 0xFF, aImplUniToDBCSTab_KSC5601_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_62 }, /* 0x62 */ + { 0x01, 0xF7, aImplUniToDBCSTab_KSC5601_63 }, /* 0x63 */ + { 0x0D, 0xFE, aImplUniToDBCSTab_KSC5601_64 }, /* 0x64 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_65 }, /* 0x65 */ + { 0x06, 0xFF, aImplUniToDBCSTab_KSC5601_66 }, /* 0x66 */ + { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_67 }, /* 0x67 */ + { 0x12, 0xFA, aImplUniToDBCSTab_KSC5601_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_69 }, /* 0x69 */ + { 0x02, 0xFB, aImplUniToDBCSTab_KSC5601_6A }, /* 0x6A */ + { 0x04, 0xEC, aImplUniToDBCSTab_KSC5601_6B }, /* 0x6B */ + { 0x08, 0xF3, aImplUniToDBCSTab_KSC5601_6C }, /* 0x6C */ + { 0x0B, 0xFB, aImplUniToDBCSTab_KSC5601_6D }, /* 0x6D */ + { 0x17, 0xFF, aImplUniToDBCSTab_KSC5601_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_KSC5601_6F }, /* 0x6F */ + { 0x01, 0xFD, aImplUniToDBCSTab_KSC5601_70 }, /* 0x70 */ + { 0x04, 0xFF, aImplUniToDBCSTab_KSC5601_71 }, /* 0x71 */ + { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_72 }, /* 0x72 */ + { 0x0A, 0xFE, aImplUniToDBCSTab_KSC5601_73 }, /* 0x73 */ + { 0x01, 0xF7, aImplUniToDBCSTab_KSC5601_74 }, /* 0x74 */ + { 0x01, 0xFC, aImplUniToDBCSTab_KSC5601_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_76 }, /* 0x76 */ + { 0x01, 0xFB, aImplUniToDBCSTab_KSC5601_77 }, /* 0x77 */ + { 0x02, 0xFB, aImplUniToDBCSTab_KSC5601_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_KSC5601_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_7A }, /* 0x7A */ + { 0x0F, 0xE9, aImplUniToDBCSTab_KSC5601_7B }, /* 0x7B */ + { 0x07, 0xFE, aImplUniToDBCSTab_KSC5601_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_KSC5601_7D }, /* 0x7D */ + { 0x09, 0x9C, aImplUniToDBCSTab_KSC5601_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_KSC5601_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_KSC5601_81 }, /* 0x81 */ + { 0x05, 0xFE, aImplUniToDBCSTab_KSC5601_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_KSC5601_83 }, /* 0x83 */ + { 0x03, 0xFC, aImplUniToDBCSTab_KSC5601_84 }, /* 0x84 */ + { 0x11, 0xFF, aImplUniToDBCSTab_KSC5601_85 }, /* 0x85 */ + { 0x02, 0xFE, aImplUniToDBCSTab_KSC5601_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_87 }, /* 0x87 */ + { 0x05, 0xFD, aImplUniToDBCSTab_KSC5601_88 }, /* 0x88 */ + { 0x07, 0xF8, aImplUniToDBCSTab_KSC5601_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_8A }, /* 0x8A */ + { 0x00, 0x9A, aImplUniToDBCSTab_KSC5601_8B }, /* 0x8B */ + { 0x37, 0xFD, aImplUniToDBCSTab_KSC5601_8C }, /* 0x8C */ + { 0x04, 0xFB, aImplUniToDBCSTab_KSC5601_8D }, /* 0x8D */ + { 0x0A, 0xFE, aImplUniToDBCSTab_KSC5601_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_KSC5601_8F }, /* 0x8F */ + { 0x00, 0xFD, aImplUniToDBCSTab_KSC5601_90 }, /* 0x90 */ + { 0x02, 0xF5, aImplUniToDBCSTab_KSC5601_91 }, /* 0x91 */ + { 0x0D, 0xFC, aImplUniToDBCSTab_KSC5601_92 }, /* 0x92 */ + { 0x04, 0xF6, aImplUniToDBCSTab_KSC5601_93 }, /* 0x93 */ + { 0x04, 0x7F, aImplUniToDBCSTab_KSC5601_94 }, /* 0x94 */ + { 0x77, 0xE2, aImplUniToDBCSTab_KSC5601_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_KSC5601_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_97 }, /* 0x97 */ + { 0x00, 0xFE, aImplUniToDBCSTab_KSC5601_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_KSC5601_99 }, /* 0x99 */ + { 0x01, 0xEE, aImplUniToDBCSTab_KSC5601_9A }, /* 0x9A */ + { 0x1A, 0xE8, aImplUniToDBCSTab_KSC5601_9B }, /* 0x9B */ + { 0x0D, 0xF6, aImplUniToDBCSTab_KSC5601_9C }, /* 0x9C */ + { 0x09, 0xFA, aImplUniToDBCSTab_KSC5601_9D }, /* 0x9D */ + { 0x1A, 0xF4, aImplUniToDBCSTab_KSC5601_9E }, /* 0x9E */ + { 0x07, 0x9C, aImplUniToDBCSTab_KSC5601_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AC }, /* 0xAC */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AD }, /* 0xAD */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AE }, /* 0xAE */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_AF }, /* 0xAF */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B0 }, /* 0xB0 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B1 }, /* 0xB1 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B2 }, /* 0xB2 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B3 }, /* 0xB3 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B4 }, /* 0xB4 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B5 }, /* 0xB5 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B6 }, /* 0xB6 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B7 }, /* 0xB7 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B8 }, /* 0xB8 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_B9 }, /* 0xB9 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BA }, /* 0xBA */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BB }, /* 0xBB */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BC }, /* 0xBC */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BD }, /* 0xBD */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BE }, /* 0xBE */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_BF }, /* 0xBF */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C0 }, /* 0xC0 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C1 }, /* 0xC1 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C2 }, /* 0xC2 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C3 }, /* 0xC3 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C4 }, /* 0xC4 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C5 }, /* 0xC5 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C6 }, /* 0xC6 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C7 }, /* 0xC7 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C8 }, /* 0xC8 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_C9 }, /* 0xC9 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CA }, /* 0xCA */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CB }, /* 0xCB */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CC }, /* 0xCC */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CD }, /* 0xCD */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CE }, /* 0xCE */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_CF }, /* 0xCF */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D0 }, /* 0xD0 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D1 }, /* 0xD1 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D2 }, /* 0xD2 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D3 }, /* 0xD3 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D4 }, /* 0xD4 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D5 }, /* 0xD5 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_D6 }, /* 0xD6 */ + { 0x00, 0xA3, aImplUniToDBCSTab_KSC5601_D7 }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x00, 0xFF, aImplUniToDBCSTab_KSC5601_F9 }, /* 0xF9 */ + { 0x00, 0x0B, aImplUniToDBCSTab_KSC5601_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 1, 0, nullptr }, /* 0xFE */ + { 0x01, 0xE6, aImplUniToDBCSTab_KSC5601_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +/* C9A1-C9FE -> E000-E05D */ +/* FEA1-FEFE -> E05E-E0BB */ + +#define DBCS_EUDC_MS949_COUNT 2 +ImplDBCSEUDCData const aImplMS949DBCSEUDCTab[DBCS_EUDC_MS949_COUNT] = +{ + /* EUDC-Range */ + /* Lead: C9-C9 */ + /* Trail: A1-FE */ + { 0xC9, 0xC9, 0xA1, 0xFE, 0, 0, 0, 0, 1, 0x5E, 0xE000, 0xE05D }, + /* Lead: FE-FE */ + /* Trail: A1-FE */ + { 0xFE, 0xFE, 0xA1, 0xFE, 0, 0, 0, 0, 1, 0x5E, 0xE05E, 0xE0BB } +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplKSC5601DBCSCvtData = +{ + aKSC5601UniLeadTab, + aKSC5601DBCSHighTab, + aImplMS949DBCSEUDCTab, + DBCS_EUDC_MS949_COUNT, + 0xA1, 0xFE, + 0xA1, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplMS949DBCSCvtData = +{ + aKSC5601UniLeadTab, + aKSC5601DBCSHighTab, + aImplMS949DBCSEUDCTab, + DBCS_EUDC_MS949_COUNT, + 0x00, 0xFF, + 0x41, 0xFE, +}; + +/* ======================================================================= */ + +ImplTextEncodingData const aImplEUCKRTextEncodingData + = { { &aImplKSC5601DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-kr", + "euc-kr", + 1, + 2, + 2, + 129, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_KOREAN, pc code page 934, mac encoding 3 */ + +/* ======================================================================= */ + +ImplTextEncodingData const aImplMS949TextEncodingData + = { { &aImplMS949DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-kr", + "euc-kr", + 1, + 2, + 2, + 129, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* WIN/DOS/OS2, SCRIPT_KOREAN, pc code page 934, mac encoding 3 */ + +/* ======================================================================= */ + +/* Apple has some extension, which we don't support */ + +ImplTextEncodingData const aImplAPPLEKOREANTextEncodingData + = { { &aImplMS949DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-kr", + "euc-kr", + 1, + 2, + 2, + 129, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* MAC, SCRIPT_KOREAN, pc code page 934, mac encoding 3 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aJOHABUniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x0080, 0, 0, nullptr }, /* 0x80 */ + { 0x0081, 0, 0, nullptr }, /* 0x81 */ + { 0x0082, 0, 0, nullptr }, /* 0x82 */ + { 0x0083, 0, 0, nullptr }, /* 0x83 */ + { 0, 0x44, 0xE1, aImplDBCSToUniTab_JOHAB_84 }, /* 0x84 */ + { 0, 0x41, 0xE1, aImplDBCSToUniTab_JOHAB_85 }, /* 0x85 */ + { 0, 0x41, 0xE1, aImplDBCSToUniTab_JOHAB_86 }, /* 0x86 */ + { 0, 0x41, 0xA1, aImplDBCSToUniTab_JOHAB_87 }, /* 0x87 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_88 }, /* 0x88 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_89 }, /* 0x89 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8A }, /* 0x8A */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_8B }, /* 0x8B */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8C }, /* 0x8C */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8D }, /* 0x8D */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_8E }, /* 0x8E */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_8F }, /* 0x8F */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_90 }, /* 0x90 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_91 }, /* 0x91 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_92 }, /* 0x92 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_93 }, /* 0x93 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_94 }, /* 0x94 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_95 }, /* 0x95 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_96 }, /* 0x96 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_97 }, /* 0x97 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_98 }, /* 0x98 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_99 }, /* 0x99 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9A }, /* 0x9A */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_9B }, /* 0x9B */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9C }, /* 0x9C */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9D }, /* 0x9D */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_9E }, /* 0x9E */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_9F }, /* 0x9F */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A0 }, /* 0xA0 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A1 }, /* 0xA1 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A2 }, /* 0xA2 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_A3 }, /* 0xA3 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A4 }, /* 0xA4 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A5 }, /* 0xA5 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A6 }, /* 0xA6 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_A7 }, /* 0xA7 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A8 }, /* 0xA8 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_A9 }, /* 0xA9 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AA }, /* 0xAA */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_AB }, /* 0xAB */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AC }, /* 0xAC */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AD }, /* 0xAD */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_AE }, /* 0xAE */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_AF }, /* 0xAF */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B0 }, /* 0xB0 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B1 }, /* 0xB1 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B2 }, /* 0xB2 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_B3 }, /* 0xB3 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B4 }, /* 0xB4 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B5 }, /* 0xB5 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B6 }, /* 0xB6 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_B7 }, /* 0xB7 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B8 }, /* 0xB8 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_B9 }, /* 0xB9 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BA }, /* 0xBA */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_BB }, /* 0xBB */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BC }, /* 0xBC */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BD }, /* 0xBD */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_BE }, /* 0xBE */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_BF }, /* 0xBF */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C0 }, /* 0xC0 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C1 }, /* 0xC1 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C2 }, /* 0xC2 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_C3 }, /* 0xC3 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C4 }, /* 0xC4 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C5 }, /* 0xC5 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C6 }, /* 0xC6 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_C7 }, /* 0xC7 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C8 }, /* 0xC8 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_C9 }, /* 0xC9 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CA }, /* 0xCA */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_CB }, /* 0xCB */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CC }, /* 0xCC */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CD }, /* 0xCD */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_CE }, /* 0xCE */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_CF }, /* 0xCF */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_D0 }, /* 0xD0 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_D1 }, /* 0xD1 */ + { 0, 0x41, 0xFD, aImplDBCSToUniTab_JOHAB_D2 }, /* 0xD2 */ + { 0, 0x41, 0xBD, aImplDBCSToUniTab_JOHAB_D3 }, /* 0xD3 */ + { 0, 1, 0, nullptr }, /* 0xD4 */ + { 0, 1, 0, nullptr }, /* 0xD5 */ + { 0, 1, 0, nullptr }, /* 0xD6 */ + { 0, 1, 0, nullptr }, /* 0xD7 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xD8 */ /* We convert this as double byte */ + { 0, 0x31, 0xE5, aImplDBCSToUniTab_JOHAB_D9 }, /* 0xD9 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_DA }, /* 0xDA */ + { 0, 0x31, 0xE4, aImplDBCSToUniTab_JOHAB_DB }, /* 0xDB */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_DC }, /* 0xDC */ + { 0, 0x31, 0xF3, aImplDBCSToUniTab_JOHAB_DD }, /* 0xDD */ + { 0, 0x31, 0xF1, aImplDBCSToUniTab_JOHAB_DE }, /* 0xDE */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xDF */ /* We convert this as double byte */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E0 }, /* 0xE0 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E1 }, /* 0xE1 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E2 }, /* 0xE2 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E3 }, /* 0xE3 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E4 }, /* 0xE4 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E5 }, /* 0xE5 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E6 }, /* 0xE6 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E7 }, /* 0xE7 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E8 }, /* 0xE8 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_E9 }, /* 0xE9 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EA }, /* 0xEA */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EB }, /* 0xEB */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EC }, /* 0xEC */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_ED }, /* 0xED */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EE }, /* 0xEE */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_EF }, /* 0xEF */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F0 }, /* 0xF0 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F1 }, /* 0xF1 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F2 }, /* 0xF2 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F3 }, /* 0xF3 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F4 }, /* 0xF4 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F5 }, /* 0xF5 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F6 }, /* 0xF6 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F7 }, /* 0xF7 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F8 }, /* 0xF8 */ + { 0, 0x31, 0xFE, aImplDBCSToUniTab_JOHAB_F9 }, /* 0xF9 */ + { 0, 1, 0, nullptr }, /* 0xFA */ + { 0, 1, 0, nullptr }, /* 0xFB */ + { 0, 1, 0, nullptr }, /* 0xFC */ + { 0, 1, 0, nullptr }, /* 0xFD */ + { 0, 1, 0, nullptr }, /* 0xFE */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aJOHABDBCSHighTab[256] = +{ + { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_00 }, /* 0x00 */ + { 0x11, 0x67, aImplUniToDBCSTab_JOHAB_01 }, /* 0x01 */ + { 0xC7, 0xDD, aImplUniToDBCSTab_JOHAB_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_JOHAB_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_JOHAB_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x15, 0xA9, aImplUniToDBCSTab_JOHAB_20 }, /* 0x20 */ + { 0x03, 0xD4, aImplUniToDBCSTab_JOHAB_21 }, /* 0x21 */ + { 0x00, 0xA5, aImplUniToDBCSTab_JOHAB_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_JOHAB_23 }, /* 0x23 */ + { 0x60, 0xE9, aImplUniToDBCSTab_JOHAB_24 }, /* 0x24 */ + { 0x00, 0xD1, aImplUniToDBCSTab_JOHAB_25 }, /* 0x25 */ + { 0x05, 0x6D, aImplUniToDBCSTab_JOHAB_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xF6, aImplUniToDBCSTab_JOHAB_30 }, /* 0x30 */ + { 0x31, 0x8E, aImplUniToDBCSTab_JOHAB_31 }, /* 0x31 */ + { 0x00, 0x7F, aImplUniToDBCSTab_JOHAB_32 }, /* 0x32 */ + { 0x80, 0xDD, aImplUniToDBCSTab_JOHAB_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFB, aImplUniToDBCSTab_JOHAB_4E }, /* 0x4E */ + { 0x01, 0xFA, aImplUniToDBCSTab_JOHAB_4F }, /* 0x4F */ + { 0x02, 0xFF, aImplUniToDBCSTab_JOHAB_50 }, /* 0x50 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_52 }, /* 0x52 */ + { 0x05, 0xF8, aImplUniToDBCSTab_JOHAB_53 }, /* 0x53 */ + { 0x03, 0xFA, aImplUniToDBCSTab_JOHAB_54 }, /* 0x54 */ + { 0x04, 0xFE, aImplUniToDBCSTab_JOHAB_55 }, /* 0x55 */ + { 0x06, 0xFA, aImplUniToDBCSTab_JOHAB_56 }, /* 0x56 */ + { 0x03, 0xFC, aImplUniToDBCSTab_JOHAB_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_58 }, /* 0x58 */ + { 0x0F, 0xFF, aImplUniToDBCSTab_JOHAB_59 }, /* 0x59 */ + { 0x01, 0xE9, aImplUniToDBCSTab_JOHAB_5A }, /* 0x5A */ + { 0x05, 0xFA, aImplUniToDBCSTab_JOHAB_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_JOHAB_5C }, /* 0x5C */ + { 0x07, 0xFE, aImplUniToDBCSTab_JOHAB_5D }, /* 0x5D */ + { 0x02, 0xFB, aImplUniToDBCSTab_JOHAB_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_JOHAB_5F }, /* 0x5F */ + { 0x0F, 0xFB, aImplUniToDBCSTab_JOHAB_60 }, /* 0x60 */ + { 0x01, 0xFF, aImplUniToDBCSTab_JOHAB_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_62 }, /* 0x62 */ + { 0x01, 0xF7, aImplUniToDBCSTab_JOHAB_63 }, /* 0x63 */ + { 0x0D, 0xFE, aImplUniToDBCSTab_JOHAB_64 }, /* 0x64 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_65 }, /* 0x65 */ + { 0x06, 0xFF, aImplUniToDBCSTab_JOHAB_66 }, /* 0x66 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_67 }, /* 0x67 */ + { 0x12, 0xFA, aImplUniToDBCSTab_JOHAB_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_69 }, /* 0x69 */ + { 0x02, 0xFB, aImplUniToDBCSTab_JOHAB_6A }, /* 0x6A */ + { 0x04, 0xEC, aImplUniToDBCSTab_JOHAB_6B }, /* 0x6B */ + { 0x08, 0xF3, aImplUniToDBCSTab_JOHAB_6C }, /* 0x6C */ + { 0x0B, 0xFB, aImplUniToDBCSTab_JOHAB_6D }, /* 0x6D */ + { 0x17, 0xFF, aImplUniToDBCSTab_JOHAB_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_JOHAB_6F }, /* 0x6F */ + { 0x01, 0xFD, aImplUniToDBCSTab_JOHAB_70 }, /* 0x70 */ + { 0x04, 0xFF, aImplUniToDBCSTab_JOHAB_71 }, /* 0x71 */ + { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_72 }, /* 0x72 */ + { 0x0A, 0xFE, aImplUniToDBCSTab_JOHAB_73 }, /* 0x73 */ + { 0x01, 0xF7, aImplUniToDBCSTab_JOHAB_74 }, /* 0x74 */ + { 0x01, 0xFC, aImplUniToDBCSTab_JOHAB_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_76 }, /* 0x76 */ + { 0x01, 0xFB, aImplUniToDBCSTab_JOHAB_77 }, /* 0x77 */ + { 0x02, 0xFB, aImplUniToDBCSTab_JOHAB_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_JOHAB_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_7A }, /* 0x7A */ + { 0x0F, 0xE9, aImplUniToDBCSTab_JOHAB_7B }, /* 0x7B */ + { 0x07, 0xFE, aImplUniToDBCSTab_JOHAB_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_JOHAB_7D }, /* 0x7D */ + { 0x09, 0x9C, aImplUniToDBCSTab_JOHAB_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_JOHAB_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_JOHAB_81 }, /* 0x81 */ + { 0x05, 0xFE, aImplUniToDBCSTab_JOHAB_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_JOHAB_83 }, /* 0x83 */ + { 0x03, 0xFC, aImplUniToDBCSTab_JOHAB_84 }, /* 0x84 */ + { 0x11, 0xFF, aImplUniToDBCSTab_JOHAB_85 }, /* 0x85 */ + { 0x02, 0xFE, aImplUniToDBCSTab_JOHAB_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_87 }, /* 0x87 */ + { 0x05, 0xFD, aImplUniToDBCSTab_JOHAB_88 }, /* 0x88 */ + { 0x07, 0xF8, aImplUniToDBCSTab_JOHAB_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_8A }, /* 0x8A */ + { 0x00, 0x9A, aImplUniToDBCSTab_JOHAB_8B }, /* 0x8B */ + { 0x37, 0xFD, aImplUniToDBCSTab_JOHAB_8C }, /* 0x8C */ + { 0x04, 0xFB, aImplUniToDBCSTab_JOHAB_8D }, /* 0x8D */ + { 0x0A, 0xFE, aImplUniToDBCSTab_JOHAB_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_JOHAB_8F }, /* 0x8F */ + { 0x00, 0xFD, aImplUniToDBCSTab_JOHAB_90 }, /* 0x90 */ + { 0x02, 0xF5, aImplUniToDBCSTab_JOHAB_91 }, /* 0x91 */ + { 0x0D, 0xFC, aImplUniToDBCSTab_JOHAB_92 }, /* 0x92 */ + { 0x04, 0xF6, aImplUniToDBCSTab_JOHAB_93 }, /* 0x93 */ + { 0x04, 0x7F, aImplUniToDBCSTab_JOHAB_94 }, /* 0x94 */ + { 0x77, 0xE2, aImplUniToDBCSTab_JOHAB_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_JOHAB_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_97 }, /* 0x97 */ + { 0x00, 0xFE, aImplUniToDBCSTab_JOHAB_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_JOHAB_99 }, /* 0x99 */ + { 0x01, 0xEE, aImplUniToDBCSTab_JOHAB_9A }, /* 0x9A */ + { 0x1A, 0xE8, aImplUniToDBCSTab_JOHAB_9B }, /* 0x9B */ + { 0x0D, 0xF6, aImplUniToDBCSTab_JOHAB_9C }, /* 0x9C */ + { 0x09, 0xFA, aImplUniToDBCSTab_JOHAB_9D }, /* 0x9D */ + { 0x1A, 0xF4, aImplUniToDBCSTab_JOHAB_9E }, /* 0x9E */ + { 0x07, 0x9C, aImplUniToDBCSTab_JOHAB_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AC }, /* 0xAC */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AD }, /* 0xAD */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AE }, /* 0xAE */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_AF }, /* 0xAF */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B0 }, /* 0xB0 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B1 }, /* 0xB1 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B2 }, /* 0xB2 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B3 }, /* 0xB3 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B4 }, /* 0xB4 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B5 }, /* 0xB5 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B6 }, /* 0xB6 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B7 }, /* 0xB7 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B8 }, /* 0xB8 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_B9 }, /* 0xB9 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BA }, /* 0xBA */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BB }, /* 0xBB */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BC }, /* 0xBC */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BD }, /* 0xBD */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BE }, /* 0xBE */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_BF }, /* 0xBF */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C0 }, /* 0xC0 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C1 }, /* 0xC1 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C2 }, /* 0xC2 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C3 }, /* 0xC3 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C4 }, /* 0xC4 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C5 }, /* 0xC5 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C6 }, /* 0xC6 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C7 }, /* 0xC7 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C8 }, /* 0xC8 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_C9 }, /* 0xC9 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CA }, /* 0xCA */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CB }, /* 0xCB */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CC }, /* 0xCC */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CD }, /* 0xCD */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CE }, /* 0xCE */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_CF }, /* 0xCF */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D0 }, /* 0xD0 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D1 }, /* 0xD1 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D2 }, /* 0xD2 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D3 }, /* 0xD3 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D4 }, /* 0xD4 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D5 }, /* 0xD5 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_D6 }, /* 0xD6 */ + { 0x00, 0xA3, aImplUniToDBCSTab_JOHAB_D7 }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x00, 0xFF, aImplUniToDBCSTab_JOHAB_F9 }, /* 0xF9 */ + { 0x00, 0x0B, aImplUniToDBCSTab_JOHAB_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 1, 0, nullptr }, /* 0xFE */ + { 0x01, 0xE6, aImplUniToDBCSTab_JOHAB_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +/* D831-D87E -> E000-E05D */ +/* D891-D8FE -> E05E-E0BB */ + +#define DBCS_EUDC_MS1361_COUNT 2 +ImplDBCSEUDCData const aImplMS1361DBCSEUDCTab[DBCS_EUDC_MS1361_COUNT] = +{ + /* EUDC-Range */ + /* Lead: D8-D8 */ + /* Trail: 31-7E */ + { 0xD8, 0xD8, 0x31, 0x7E, 0, 0, 0, 0, 1, 0x5D, 0xE000, 0xE05D }, + /* Lead: D8-D8 */ + /* Trail: 91-FE */ + { 0xD8, 0xD8, 0x91, 0xFE, 0, 0, 0, 0, 1, 0x5D, 0xE05E, 0xE0BB } +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplJOHABDBCSCvtData = +{ + aJOHABUniLeadTab, + aJOHABDBCSHighTab, + aImplMS1361DBCSEUDCTab, + DBCS_EUDC_MS1361_COUNT, + 0x00, 0xFF, + 0x31, 0xFE, +}; + +/* ======================================================================= */ + +ImplTextEncodingData const aImplMS1361TextEncodingData + = { { &aImplJOHABDBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-kr", + "euc-kr", + 1, + 2, + 2, + 130, + RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_KOREAN, pc code page 1361, mac encoding 3 */ diff --git a/sal/textenc/tcvtlat1.tab b/sal/textenc/tcvtlat1.tab new file mode 100644 index 000000000..0bfcb1dd9 --- /dev/null +++ b/sal/textenc/tcvtlat1.tab @@ -0,0 +1,1552 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "convertsimple.hxx" +#include "tcvtbyte.hxx" +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the tables for all 1 byte charsets, for the */ +/* following scripts: latin, iceland, nordic */ + +/* ======================================================================= */ + +/* IBM-437 */ +/* Dos Latin US - Standard CharSet for Western Script */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp437.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM437UNI_START 0x80 +#define IBM437UNI_END 0xFF +sal_uInt16 const aImplIBM437ToUniTab[IBM437UNI_END - IBM437UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */ + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, /* 0x80 */ + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */ + 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */ + 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */ + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */ + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM437CHAR_START 0x00A0 +#define IBM437CHAR_END 0x00FF +unsigned char const aImplIBM437ToCharTab[IBM437CHAR_END - IBM437CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0xAD, 0x9B, 0x9C, 0, 0x9D, 0, 0, /* 0x00A0 */ + 0, 0, 0xA6, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */ + 0, 0, 0xA7, 0xAF, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */ + 0, 0, 0, 0, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */ + 0, 0x90, 0, 0, 0, 0, 0, 0, /* 0x00C0 */ + 0, 0xA5, 0, 0, 0, 0, 0x99, 0, /* 0x00D0 */ + 0, 0, 0, 0, 0x9A, 0, 0, 0xE1, /* 0x00D0 */ + 0x85, 0xA0, 0x83, 0, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* 0x00E0 */ + 0, 0xA4, 0x95, 0xA2, 0x93, 0, 0x94, 0xF6, /* 0x00F0 */ + 0, 0x97, 0xA3, 0x96, 0x81, 0, 0, 0x98 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM437TOCHARTABEX_COUNT 75 +ImplUniCharTabData const aImplIBM437ToCharTabEx[IBM437TOCHARTABEX_COUNT] = +{ + { 0x0192, 0x9F, 0 }, + { 0x0393, 0xE2, 0 }, + { 0x0398, 0xE9, 0 }, + { 0x03A3, 0xE4, 0 }, + { 0x03A6, 0xE8, 0 }, + { 0x03A9, 0xEA, 0 }, + { 0x03B1, 0xE0, 0 }, + { 0x03B4, 0xEB, 0 }, + { 0x03B5, 0xEE, 0 }, + { 0x03C0, 0xE3, 0 }, + { 0x03C3, 0xE5, 0 }, + { 0x03C4, 0xE7, 0 }, + { 0x03C6, 0xED, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x20A7, 0x9E, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x221E, 0xEC, 0 }, + { 0x2229, 0xEF, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2261, 0xF0, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2310, 0xA9, 0 }, + { 0x2320, 0xF4, 0 }, + { 0x2321, 0xF5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM437ByteCvtData = +{ + aImplIBM437ToUniTab, + nullptr, + aImplIBM437ToCharTab, + nullptr, + aImplIBM437ToCharTabEx, + IBM437UNI_START, IBM437UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM437CHAR_START, IBM437CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM437TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM437TextEncodingData + = { { &aImplIBM437ByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "ibm437", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 437 */ + +/* ======================================================================= */ + +/* IBM-850 */ +/* Dos Standard CharSet for Western/Europe */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp850.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ +/* D5 - changed to EURO SIGN and 0x20AC added to D5 */ + +/* ----------------------------------------------------------------------- */ + +#define IBM850UNI_START 0x80 +#define IBM850UNI_END 0xFF +sal_uInt16 const aImplIBM850ToUniTab[IBM850UNI_END - IBM850UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */ + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, /* 0x80 */ + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */ + 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */ + 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, /* 0xB0 */ + 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, /* 0xC0 */ + 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x20AC, 0x00CD, 0x00CE, /* 0xD0 */ + 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, /* 0xD0 */ + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, /* 0xE0 */ + 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, /* 0xE0 */ + 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, /* 0xF0 */ + 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM850CHAR_START 0x00A0 +#define IBM850CHAR_END 0x00FF +unsigned char const aImplIBM850ToCharTab[IBM850CHAR_END - IBM850CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* 0x00A0 */ + 0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* 0x00B0 */ + 0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* 0x00B0 */ + 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */ + 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* 0x00C0 */ + 0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, /* 0x00D0 */ + 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1, /* 0x00D0 */ + 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* 0x00E0 */ + 0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* 0x00F0 */ + 0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM850TOCHARTABEX_COUNT 33 +ImplUniCharTabData const aImplIBM850ToCharTabEx[IBM850TOCHARTABEX_COUNT] = +{ + { 0x0131, 0xD5, 0 }, + { 0x0192, 0x9F, 0 }, + { 0x2017, 0xF2, 0 }, + { 0x20AC, 0xD5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM850ByteCvtData = +{ + aImplIBM850ToUniTab, + nullptr, + aImplIBM850ToCharTab, + nullptr, + aImplIBM850ToCharTabEx, + IBM850UNI_START, IBM850UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM850CHAR_START, IBM850CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM850TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM850TextEncodingData + = { { &aImplIBM850ByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "ibm850", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 850 */ + +/* ======================================================================= */ + +/* IBM-860 */ +/* Dos Standard CharSet for Portuguese */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp860.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM860UNI_START 0x80 +#define IBM860UNI_END 0xFF +sal_uInt16 const aImplIBM860ToUniTab[IBM860UNI_END - IBM860UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, /* 0x80 */ + 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2, /* 0x80 */ + 0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, /* 0x90 */ + 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */ + 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */ + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */ + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM860CHAR_START 0x00A0 +#define IBM860CHAR_END 0x00FC +unsigned char const aImplIBM860ToCharTab[IBM860CHAR_END - IBM860CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0xAD, 0x9B, 0x9C, 0 , 0, 0, 0, /* 0x00A0 */ + 0, 0, 0xA6, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */ + 0, 0, 0xA7, 0xAF, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */ + 0x91, 0x86, 0x8F, 0x8E, 0, 0, 0, 0x80, /* 0x00C0 */ + 0x92, 0x90, 0x89, 0, 0x98, 0x8B, 0, 0, /* 0x00C0 */ + 0, 0xA5, 0xA9, 0x9F, 0x8C, 0x99, 0, 0, /* 0x00D0 */ + 0, 0x9D, 0x96, 0, 0x9A, 0, 0, 0xE1, /* 0x00D0 */ + 0x85, 0xA0, 0x83, 0x84, 0, 0, 0, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0, 0x8D, 0xA1, 0, 0, /* 0x00E0 */ + 0, 0xA4, 0x95, 0xA2, 0x93, 0x94, 0, 0xF6, /* 0x00F0 */ + 0, 0x97, 0xA3, 0, 0x81 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM860TOCHARTABEX_COUNT 73 +ImplUniCharTabData const aImplIBM860ToCharTabEx[IBM860TOCHARTABEX_COUNT] = +{ + { 0x0393, 0xE2, 0 }, + { 0x0398, 0xE9, 0 }, + { 0x03A3, 0xE4, 0 }, + { 0x03A6, 0xE8, 0 }, + { 0x03A9, 0xEA, 0 }, + { 0x03B1, 0xE0, 0 }, + { 0x03B4, 0xEB, 0 }, + { 0x03B5, 0xEE, 0 }, + { 0x03C0, 0xE3, 0 }, + { 0x03C3, 0xE5, 0 }, + { 0x03C4, 0xE7, 0 }, + { 0x03C6, 0xED, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x20A7, 0x9E, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x221E, 0xEC, 0 }, + { 0x2229, 0xEF, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2261, 0xF0, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2320, 0xF4, 0 }, + { 0x2321, 0xF5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM860ByteCvtData = +{ + aImplIBM860ToUniTab, + nullptr, + aImplIBM860ToCharTab, + nullptr, + aImplIBM860ToCharTabEx, + IBM860UNI_START, IBM860UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM860CHAR_START, IBM860CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM860TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM860TextEncodingData + = { { &aImplIBM860ByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "IBM860", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 860 */ + +/* ======================================================================= */ + +/* IBM-861 */ +/* Dos Standard CharSet for Icelandic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp861.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM861UNI_START 0x80 +#define IBM861UNI_END 0xFF +sal_uInt16 const aImplIBM861ToUniTab[IBM861UNI_END - IBM861UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */ + 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5, /* 0x80 */ + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, /* 0x90 */ + 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, /* 0xA0 */ + 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */ + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */ + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM861CHAR_START 0x00A0 +#define IBM861CHAR_END 0x00FE +unsigned char const aImplIBM861ToCharTab[IBM861CHAR_END - IBM861CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0xAD, 0, 0x9C, 0, 0, 0, 0, /* 0x00A0 */ + 0, 0, 0, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */ + 0, 0, 0, 0xAF, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */ + 0, 0xA4, 0, 0, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */ + 0, 0x90, 0, 0, 0, 0xA5, 0, 0, /* 0x00C0 */ + 0x8B, 0, 0, 0xA6, 0, 0, 0x99, 0, /* 0x00D0 */ + 0x9D, 0, 0xA7, 0, 0x9A, 0x97, 0x8D, 0xE1, /* 0x00D0 */ + 0x85, 0xA0, 0x83, 0, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0x89, 0, 0xA1, 0, 0, /* 0x00E0 */ + 0x8C, 0, 0, 0xA2, 0x93, 0, 0x94, 0xF6, /* 0x00F0 */ + 0x9B, 0, 0xA3, 0x96, 0x81, 0x98, 0x95 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM861TOCHARTABEX_COUNT 75 +ImplUniCharTabData const aImplIBM861ToCharTabEx[IBM861TOCHARTABEX_COUNT] = +{ + { 0x0192, 0x9F, 0 }, + { 0x0393, 0xE2, 0 }, + { 0x0398, 0xE9, 0 }, + { 0x03A3, 0xE4, 0 }, + { 0x03A6, 0xE8, 0 }, + { 0x03A9, 0xEA, 0 }, + { 0x03B1, 0xE0, 0 }, + { 0x03B4, 0xEB, 0 }, + { 0x03B5, 0xEE, 0 }, + { 0x03C0, 0xE3, 0 }, + { 0x03C3, 0xE5, 0 }, + { 0x03C4, 0xE7, 0 }, + { 0x03C6, 0xED, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x20A7, 0x9E, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x221E, 0xEC, 0 }, + { 0x2229, 0xEF, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2261, 0xF0, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2310, 0xA9, 0 }, + { 0x2320, 0xF4, 0 }, + { 0x2321, 0xF5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM861ByteCvtData = +{ + aImplIBM861ToUniTab, + nullptr, + aImplIBM861ToCharTab, + nullptr, + aImplIBM861ToCharTabEx, + IBM861UNI_START, IBM861UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM861CHAR_START, IBM861CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM861TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM861TextEncodingData + = { { &aImplIBM861ByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "IBM861", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 861, mac encoding 37 */ + +/* ======================================================================= */ + +/* IBM-863 */ +/* Dos Standard CharSet for Canada-France */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp863.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM863UNI_START 0x80 +#define IBM863UNI_END 0xFF +sal_uInt16 const aImplIBM863ToUniTab[IBM863UNI_END - IBM863UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, /* 0x80 */ + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x2017, 0x00C0, 0x00A7, /* 0x80 */ + 0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, /* 0x90 */ + 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192, /* 0x90 */ + 0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00B8, 0x00B3, 0x00AF, /* 0xA0 */ + 0x00CE, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */ + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */ + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM863CHAR_START 0x00A0 +#define IBM863CHAR_END 0x00FC +unsigned char const aImplIBM863ToCharTab[IBM863CHAR_END - IBM863CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0, 0x9B, 0x9C, 0x98, 0, 0xA0, 0x8F, /* 0x00A0 */ + 0xA4, 0, 0, 0xAE, 0xAA, 0, 0, 0xA7, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0xA6, 0xA1, 0xE6, 0x86, 0xFA, /* 0x00B0 */ + 0xA5, 0, 0, 0xAF, 0xAC, 0xAB, 0xAD, 0, /* 0x00B0 */ + 0x8E, 0, 0x84, 0, 0, 0, 0, 0x80, /* 0x00C0 */ + 0x91, 0x90, 0x92, 0x94, 0, 0, 0xA8, 0x95, /* 0x00C0 */ + 0, 0, 0, 0, 0x99, 0, 0, 0, /* 0x00D0 */ + 0, 0x9D, 0, 0x9E, 0x9A, 0, 0, 0xE1, /* 0x00D0 */ + 0x85, 0, 0x83, 0, 0, 0, 0, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0x89, 0, 0, 0x8C, 0x8B, /* 0x00E0 */ + 0, 0, 0, 0xA2, 0x93, 0, 0, 0xF6, /* 0x00F0 */ + 0, 0x97, 0xA3, 0x96, 0x81 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM863TOCHARTABEX_COUNT 75 +ImplUniCharTabData const aImplIBM863ToCharTabEx[IBM863TOCHARTABEX_COUNT] = +{ + { 0x0192, 0x9F, 0 }, + { 0x0393, 0xE2, 0 }, + { 0x0398, 0xE9, 0 }, + { 0x03A3, 0xE4, 0 }, + { 0x03A6, 0xE8, 0 }, + { 0x03A9, 0xEA, 0 }, + { 0x03B1, 0xE0, 0 }, + { 0x03B4, 0xEB, 0 }, + { 0x03B5, 0xEE, 0 }, + { 0x03C0, 0xE3, 0 }, + { 0x03C3, 0xE5, 0 }, + { 0x03C4, 0xE7, 0 }, + { 0x03C6, 0xED, 0 }, + { 0x2017, 0x8D, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x221E, 0xEC, 0 }, + { 0x2229, 0xEF, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2261, 0xF0, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2310, 0xA9, 0 }, + { 0x2320, 0xF4, 0 }, + { 0x2321, 0xF5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM863ByteCvtData = +{ + aImplIBM863ToUniTab, + nullptr, + aImplIBM863ToCharTab, + nullptr, + aImplIBM863ToCharTabEx, + IBM863UNI_START, IBM863UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM863CHAR_START, IBM863CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM863TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM863TextEncodingData + = { { &aImplIBM863ByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "IBM863", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 863 */ + +/* ======================================================================= */ + +/* IBM-865 */ +/* Dos Standard CharSet for Nordic */ +/* 1-byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/pc/cp865.txt from 04/24/96 Version 2.00 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define IBM865UNI_START 0x80 +#define IBM865UNI_END 0xFF +sal_uInt16 const aImplIBM865ToUniTab[IBM865UNI_END - IBM865UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, /* 0x80 */ + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, /* 0x80 */ + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, /* 0x90 */ + 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, /* 0x90 */ + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, /* 0xA0 */ + 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4, /* 0xA0 */ + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, /* 0xB0 */ + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, /* 0xB0 */ + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, /* 0xC0 */ + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, /* 0xC0 */ + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, /* 0xD0 */ + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, /* 0xD0 */ + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, /* 0xE0 */ + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, /* 0xE0 */ + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, /* 0xF0 */ + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM865CHAR_START 0x00A0 +#define IBM865CHAR_END 0x00FF +unsigned char const aImplIBM865ToCharTab[IBM865CHAR_END - IBM865CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF, 0xAD, 0, 0x9C, 0xAF, 0, 0, 0, /* 0x00A0 */ + 0, 0, 0xA6, 0xAE, 0xAA, 0, 0, 0, /* 0x00A0 */ + 0xF8, 0xF1, 0xFD, 0, 0, 0xE6, 0, 0xFA, /* 0x00B0 */ + 0, 0, 0xA7, 0, 0xAC, 0xAB, 0, 0xA8, /* 0x00B0 */ + 0, 0, 0, 0, 0x8E, 0x8F, 0x92, 0x80, /* 0x00C0 */ + 0, 0x90, 0, 0, 0, 0, 0, 0, /* 0x00C0 */ + 0, 0xA5, 0, 0, 0, 0, 0x99, 0, /* 0x00D0 */ + 0x9D, 0, 0, 0, 0x9A, 0, 0, 0xE1, /* 0x00D0 */ + 0x85, 0xA0, 0x83, 0, 0x84, 0x86, 0x91, 0x87, /* 0x00E0 */ + 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* 0x00E0 */ + 0, 0xA4, 0x95, 0xA2, 0x93, 0, 0x94, 0xF6, /* 0x00F0 */ + 0x9B, 0x97, 0xA3, 0x96, 0x81, 0, 0, 0x98 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define IBM865TOCHARTABEX_COUNT 75 +ImplUniCharTabData const aImplIBM865ToCharTabEx[IBM865TOCHARTABEX_COUNT] = +{ + { 0x0192, 0x9F, 0 }, + { 0x0393, 0xE2, 0 }, + { 0x0398, 0xE9, 0 }, + { 0x03A3, 0xE4, 0 }, + { 0x03A6, 0xE8, 0 }, + { 0x03A9, 0xEA, 0 }, + { 0x03B1, 0xE0, 0 }, + { 0x03B4, 0xEB, 0 }, + { 0x03B5, 0xEE, 0 }, + { 0x03C0, 0xE3, 0 }, + { 0x03C3, 0xE5, 0 }, + { 0x03C4, 0xE7, 0 }, + { 0x03C6, 0xED, 0 }, + { 0x207F, 0xFC, 0 }, + { 0x20A7, 0x9E, 0 }, + { 0x2219, 0xF9, 0 }, + { 0x221A, 0xFB, 0 }, + { 0x221E, 0xEC, 0 }, + { 0x2229, 0xEF, 0 }, + { 0x2248, 0xF7, 0 }, + { 0x2261, 0xF0, 0 }, + { 0x2264, 0xF3, 0 }, + { 0x2265, 0xF2, 0 }, + { 0x2310, 0xA9, 0 }, + { 0x2320, 0xF4, 0 }, + { 0x2321, 0xF5, 0 }, + { 0x2500, 0xC4, 0 }, + { 0x2502, 0xB3, 0 }, + { 0x250C, 0xDA, 0 }, + { 0x2510, 0xBF, 0 }, + { 0x2514, 0xC0, 0 }, + { 0x2518, 0xD9, 0 }, + { 0x251C, 0xC3, 0 }, + { 0x2524, 0xB4, 0 }, + { 0x252C, 0xC2, 0 }, + { 0x2534, 0xC1, 0 }, + { 0x253C, 0xC5, 0 }, + { 0x2550, 0xCD, 0 }, + { 0x2551, 0xBA, 0 }, + { 0x2552, 0xD5, 0 }, + { 0x2553, 0xD6, 0 }, + { 0x2554, 0xC9, 0 }, + { 0x2555, 0xB8, 0 }, + { 0x2556, 0xB7, 0 }, + { 0x2557, 0xBB, 0 }, + { 0x2558, 0xD4, 0 }, + { 0x2559, 0xD3, 0 }, + { 0x255A, 0xC8, 0 }, + { 0x255B, 0xBE, 0 }, + { 0x255C, 0xBD, 0 }, + { 0x255D, 0xBC, 0 }, + { 0x255E, 0xC6, 0 }, + { 0x255F, 0xC7, 0 }, + { 0x2560, 0xCC, 0 }, + { 0x2561, 0xB5, 0 }, + { 0x2562, 0xB6, 0 }, + { 0x2563, 0xB9, 0 }, + { 0x2564, 0xD1, 0 }, + { 0x2565, 0xD2, 0 }, + { 0x2566, 0xCB, 0 }, + { 0x2567, 0xCF, 0 }, + { 0x2568, 0xD0, 0 }, + { 0x2569, 0xCA, 0 }, + { 0x256A, 0xD8, 0 }, + { 0x256B, 0xD7, 0 }, + { 0x256C, 0xCE, 0 }, + { 0x2580, 0xDF, 0 }, + { 0x2584, 0xDC, 0 }, + { 0x2588, 0xDB, 0 }, + { 0x258C, 0xDD, 0 }, + { 0x2590, 0xDE, 0 }, + { 0x2591, 0xB0, 0 }, + { 0x2592, 0xB1, 0 }, + { 0x2593, 0xB2, 0 }, + { 0x25A0, 0xFE, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplIBM865ByteCvtData = +{ + aImplIBM865ToUniTab, + nullptr, + aImplIBM865ToCharTab, + nullptr, + aImplIBM865ToCharTabEx, + IBM865UNI_START, IBM865UNI_END, + NOTABUNI_START, NOTABUNI_END, + IBM865CHAR_START, IBM865CHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + IBM865TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplIBM865TextEncodingData + = { { &aImplIBM865ByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "IBM865", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* DOS/OS2, SCRIPT_LATIN, pc code page 865 */ + +/* ======================================================================= */ + +/* ISO-8859-14 */ +/* approximately like Latin1 */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-14.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO885914UNI_START 0xA0 +#define ISO885914UNI_END 0xFF +sal_uInt16 const aImplISO885914ToUniTab[ISO885914UNI_END - ISO885914UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7, /* 0xA0 */ + 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178, /* 0xA0 */ + 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56, /* 0xB0 */ + 0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885914CHAR_START 0x00C0 +#define ISO885914CHAR_END 0x00FF +unsigned char const aImplISO885914ToCharTab[ISO885914CHAR_END - ISO885914CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */ + 0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0, /* 0x00D0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0, 0xDF, /* 0x00D0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */ + 0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0, /* 0x00F0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0, 0xFF /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885914TOCHARTABEX_COUNT 38 +ImplUniCharTabData const aImplISO885914ToCharTabEx[ISO885914TOCHARTABEX_COUNT] = +{ + { 0x00A0, 0xA0, 0 }, + { 0x00A3, 0xA3, 0 }, + { 0x00A7, 0xA7, 0 }, + { 0x00A9, 0xA9, 0 }, + { 0x00AD, 0xAD, 0 }, + { 0x00AE, 0xAE, 0 }, + { 0x00B6, 0xB6, 0 }, + { 0x010A, 0xA4, 0 }, + { 0x010B, 0xA5, 0 }, + { 0x0120, 0xB2, 0 }, + { 0x0121, 0xB3, 0 }, + { 0x0174, 0xD0, 0 }, + { 0x0175, 0xF0, 0 }, + { 0x0176, 0xDE, 0 }, + { 0x0177, 0xFE, 0 }, + { 0x0178, 0xAF, 0 }, + { 0x1E02, 0xA1, 0 }, + { 0x1E03, 0xA2, 0 }, + { 0x1E0A, 0xA6, 0 }, + { 0x1E0B, 0xAB, 0 }, + { 0x1E1E, 0xB0, 0 }, + { 0x1E1F, 0xB1, 0 }, + { 0x1E40, 0xB4, 0 }, + { 0x1E41, 0xB5, 0 }, + { 0x1E56, 0xB7, 0 }, + { 0x1E57, 0xB9, 0 }, + { 0x1E60, 0xBB, 0 }, + { 0x1E61, 0xBF, 0 }, + { 0x1E6A, 0xD7, 0 }, + { 0x1E6B, 0xF7, 0 }, + { 0x1E80, 0xA8, 0 }, + { 0x1E81, 0xB8, 0 }, + { 0x1E82, 0xAA, 0 }, + { 0x1E83, 0xBA, 0 }, + { 0x1E84, 0xBD, 0 }, + { 0x1E85, 0xBE, 0 }, + { 0x1EF2, 0xAC, 0 }, + { 0x1EF3, 0xBC, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO885914ByteCvtData = +{ + aImplISO885914ToUniTab, + aImpl8090SameToUniTab, + aImplISO885914ToCharTab, + aImpl8090SameToCharTab, + aImplISO885914ToCharTabEx, + ISO885914UNI_START, ISO885914UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO885914CHAR_START, ISO885914CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO885914TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO885914TextEncodingData + = { { &aImplISO885914ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-14", + "iso-8859-14", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_LATIN, pc code page 850 */ + +/* ======================================================================= */ + +/* ISO-8859-15 */ +/* approximately like Latin1, but with Euro (former CURRENCY symbol to A4) */ +/* 1-byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-15.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO885915UNI_START 0xA0 +#define ISO885915UNI_END 0xFF +sal_uInt16 const aImplISO885915ToUniTab[ISO885915UNI_END - ISO885915UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, /* 0xA0 */ + 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885915CHAR_START 0x00A0 +#define ISO885915CHAR_END 0x00FF +unsigned char const aImplISO885915ToCharTab[ISO885915CHAR_END - ISO885915CHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA0, 0xA1, 0xA2, 0xA3, 0, 0xA5, 0, 0xA7, /* 0x00A0 */ + 0, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */ + 0xB0, 0xB1, 0xB2, 0xB3, 0, 0xB5, 0xB6, 0xB7, /* 0x00B0 */ + 0, 0xB9, 0xBA, 0xBB, 0, 0, 0, 0xBF, /* 0x00B0 */ + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x00C0 */ + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, /* 0x00D0 */ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x00E0 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define ISO885915TOCHARTABEX_COUNT 8 +ImplUniCharTabData const aImplISO885915ToCharTabEx[ISO885915TOCHARTABEX_COUNT] = +{ + { 0x0152, 0xBC, 0 }, + { 0x0153, 0xBD, 0 }, + { 0x0160, 0xA6, 0 }, + { 0x0161, 0xA8, 0 }, + { 0x0178, 0xBE, 0 }, + { 0x017D, 0xB4, 0 }, + { 0x017E, 0xB8, 0 }, + { 0x20AC, 0xA4, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO885915ByteCvtData = +{ + aImplISO885915ToUniTab, + aImpl8090SameToUniTab, + aImplISO885915ToCharTab, + aImpl8090SameToCharTab, + aImplISO885915ToCharTabEx, + ISO885915UNI_START, ISO885915UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + ISO885915CHAR_START, ISO885915CHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + ISO885915TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO885915TextEncodingData + = { { &aImplISO885915ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-15", + "iso-8859-15", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_LATIN, pc code page 850 */ + +/* ======================================================================= */ + +/* APPLE-Iceland */ +/* Apple CharSet for Iceland */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/iceland.txt from 02/05/98 */ +/* Last-Changes from us: */ + +#define APPLEICELANDUNI_START 0x80 +#define APPLEICELANDUNI_END 0xFF +sal_uInt16 const aImplAPPLEICELANDToUniTab[APPLEICELANDUNI_END - APPLEICELANDUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */ + 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */ + 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */ + 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */ + 0x00DD, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */ + 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, /* 0xB0 */ + 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */ + 0x00FF, 0x0178, 0x2044, 0x00A4, 0x00D0, 0x00F0, 0x00DE, 0x00FE, /* 0xD0 */ + 0x00FD, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */ + 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */ + 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */ + 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEICELANDCHAR_START 0x00A0 +#define APPLEICELANDCHAR_END 0x00FF +unsigned char const aImplAPPLEICELANDToCharTab[APPLEICELANDCHAR_END - APPLEICELANDCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA, 0xC1, 0xA2, 0xA3, 0xDB, 0xB4, 0, 0xA4, /* 0x00A0 */ + 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */ + 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */ + 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */ + 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82, /* 0x00C0 */ + 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */ + 0xDC, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */ + 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0xA0, 0xDE, 0xA7, /* 0x00D0 */ + 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D, /* 0x00E0 */ + 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */ + 0xDD, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */ + 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0xE0, 0xDF, 0xD8 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEICELANDTOCHARTABEX_COUNT 41 +ImplUniCharTabData const aImplAPPLEICELANDToCharTabEx[APPLEICELANDTOCHARTABEX_COUNT] = +{ + { 0x0131, 0xF5, 0 }, + { 0x0152, 0xCE, 0 }, + { 0x0153, 0xCF, 0 }, + { 0x0178, 0xD9, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x02C6, 0xF6, 0 }, + { 0x02C7, 0xFF, 0 }, + { 0x02D8, 0xF9, 0 }, + { 0x02D9, 0xFA, 0 }, + { 0x02DA, 0xFB, 0 }, + { 0x02DB, 0xFE, 0 }, + { 0x02DC, 0xF7, 0 }, + { 0x02DD, 0xFD, 0 }, + { 0x03A9, 0xBD, 0 }, + { 0x03C0, 0xB9, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201A, 0xE2, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xE3, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2030, 0xE4, 0 }, + { 0x2044, 0xDA, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x220F, 0xB8, 0 }, + { 0x2211, 0xB7, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x222B, 0xBA, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0x25CA, 0xD7, 0 }, + { 0xF8FF, 0xF0, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLEICELANDByteCvtData = +{ + aImplAPPLEICELANDToUniTab, + nullptr, + aImplAPPLEICELANDToCharTab, + nullptr, + aImplAPPLEICELANDToCharTabEx, + APPLEICELANDUNI_START, APPLEICELANDUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLEICELANDCHAR_START, APPLEICELANDCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLEICELANDTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLEICELANDTextEncodingData + = { { &aImplAPPLEICELANDByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "iso-8859-1", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII }; + /* MAC, SCRIPT_LATIN, pc code page 861, mac encoding 37 */ + +/* ======================================================================= */ + +/* APPLE-Roman */ +/* Standard Apple CharSet for Western */ +/* 1-byte, 0x00-0x7F ASCII, but actually special characters between 0x00-0x1F */ +/* which we don't consider, though */ +/* Convert-Tables: mappings/vendors/apple/roman.txt from 08/18/98 */ +/* Last-Changes from us: */ + +#define APPLEROMANUNI_START 0x80 +#define APPLEROMANUNI_END 0xFF +sal_uInt16 const aImplAPPLEROMANToUniTab[APPLEROMANUNI_END - APPLEROMANUNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, /* 0x80 */ + 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, /* 0x80 */ + 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, /* 0x90 */ + 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, /* 0x90 */ + 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, /* 0xA0 */ + 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, /* 0xA0 */ + 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, /* 0xB0 */ + 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, /* 0xB0 */ + 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, /* 0xC0 */ + 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, /* 0xC0 */ + 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, /* 0xD0 */ + 0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0xFB01, 0xFB02, /* 0xD0 */ + 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, /* 0xE0 */ + 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, /* 0xE0 */ + 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, /* 0xF0 */ + 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEROMANCHAR_START 0x00A0 +#define APPLEROMANCHAR_END 0x00FF +unsigned char const aImplAPPLEROMANToCharTab[APPLEROMANCHAR_END - APPLEROMANCHAR_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCA, 0xC1, 0xA2, 0xA3, 0, 0xB4, 0, 0xA4, /* 0x00A0 */ + 0xAC, 0xA9, 0xBB, 0xC7, 0xC2, 0, 0xA8, 0xF8, /* 0x00A0 */ + 0xA1, 0xB1, 0, 0, 0xAB, 0xB5, 0xA6, 0xE1, /* 0x00B0 */ + 0xFC, 0, 0xBC, 0xC8, 0, 0, 0, 0xC0, /* 0x00B0 */ + 0xCB, 0xE7, 0xE5, 0xCC, 0x80, 0x81, 0xAE, 0x82, /* 0x00C0 */ + 0xE9, 0x83, 0xE6, 0xE8, 0xED, 0xEA, 0xEB, 0xEC, /* 0x00C0 */ + 0, 0x84, 0xF1, 0xEE, 0xEF, 0xCD, 0x85, 0, /* 0x00D0 */ + 0xAF, 0xF4, 0xF2, 0xF3, 0x86, 0, 0, 0xA7, /* 0x00D0 */ + 0x88, 0x87, 0x89, 0x8B, 0x8A, 0x8C, 0xBE, 0x8D, /* 0x00E0 */ + 0x8F, 0x8E, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, /* 0x00E0 */ + 0, 0x96, 0x98, 0x97, 0x99, 0x9B, 0x9A, 0xD6, /* 0x00F0 */ + 0xBF, 0x9D, 0x9C, 0x9E, 0x9F, 0, 0, 0xD8 /* 0x00F0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define APPLEROMANTOCHARTABEX_COUNT 48 +ImplUniCharTabData const aImplAPPLEROMANToCharTabEx[APPLEROMANTOCHARTABEX_COUNT] = +{ + { 0x0131, 0xF5, 0 }, + { 0x0152, 0xCE, 0 }, + { 0x0153, 0xCF, 0 }, + { 0x0178, 0xD9, 0 }, + { 0x0192, 0xC4, 0 }, + { 0x02C6, 0xF6, 0 }, + { 0x02C7, 0xFF, 0 }, + { 0x02D8, 0xF9, 0 }, + { 0x02D9, 0xFA, 0 }, + { 0x02DA, 0xFB, 0 }, + { 0x02DB, 0xFE, 0 }, + { 0x02DC, 0xF7, 0 }, + { 0x02DD, 0xFD, 0 }, + { 0x03A9, 0xBD, 0 }, + { 0x03C0, 0xB9, 0 }, + { 0x2013, 0xD0, 0 }, + { 0x2014, 0xD1, 0 }, + { 0x2018, 0xD4, 0 }, + { 0x2019, 0xD5, 0 }, + { 0x201A, 0xE2, 0 }, + { 0x201C, 0xD2, 0 }, + { 0x201D, 0xD3, 0 }, + { 0x201E, 0xE3, 0 }, + { 0x2020, 0xA0, 0 }, + { 0x2021, 0xE0, 0 }, + { 0x2022, 0xA5, 0 }, + { 0x2026, 0xC9, 0 }, + { 0x2030, 0xE4, 0 }, + { 0x2039, 0xDC, 0 }, + { 0x203A, 0xDD, 0 }, + { 0x2044, 0xDA, 0 }, + { 0x20AC, 0xDB, 0 }, + { 0x2122, 0xAA, 0 }, + { 0x2202, 0xB6, 0 }, + { 0x2206, 0xC6, 0 }, + { 0x220F, 0xB8, 0 }, + { 0x2211, 0xB7, 0 }, + { 0x221A, 0xC3, 0 }, + { 0x221E, 0xB0, 0 }, + { 0x222B, 0xBA, 0 }, + { 0x2248, 0xC5, 0 }, + { 0x2260, 0xAD, 0 }, + { 0x2264, 0xB2, 0 }, + { 0x2265, 0xB3, 0 }, + { 0x25CA, 0xD7, 0 }, + { 0xF8FF, 0xF0, 0 }, + { 0xFB01, 0xDE, 0 }, + { 0xFB02, 0xDF, 0 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplAPPLEROMANByteCvtData = +{ + aImplAPPLEROMANToUniTab, + nullptr, + aImplAPPLEROMANToCharTab, + nullptr, + aImplAPPLEROMANToCharTabEx, + APPLEROMANUNI_START, APPLEROMANUNI_END, + NOTABUNI_START, NOTABUNI_END, + APPLEROMANCHAR_START, APPLEROMANCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + APPLEROMANTOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLEROMANTextEncodingData + = { { &aImplAPPLEROMANByteCvtData, + ImplUpperCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "macintosh", + 1, + 1, + 1, + 77, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* MAC, SCRIPT_LATIN, pc code page 850 */ diff --git a/sal/textenc/tcvtmb.cxx b/sal/textenc/tcvtmb.cxx new file mode 100644 index 000000000..89e89c56c --- /dev/null +++ b/sal/textenc/tcvtmb.cxx @@ -0,0 +1,682 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "handleundefinedunicodetotextchar.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +/* DBCS to Unicode conversion routine use a lead table for the first byte, */ +/* where we determine the trail table or for single byte chars the unicode */ +/* value. We have for all lead byte a separate table, because we can */ +/* then share many tables for different charset encodings. */ + +sal_Size ImplDBCSToUnicode( const void* pData, SAL_UNUSED_PARAMETER void*, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ) +{ + unsigned char cTrail; + sal_Unicode cConv; + const ImplDBCSToUniLeadTab* pLeadEntry; + const ImplDBCSConvertData* pConvertData = static_cast(pData); + const ImplDBCSToUniLeadTab* pLeadTab = pConvertData->mpToUniLeadTab; + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + char const * startOfCurrentChar = pSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + while ( pSrcBuf < pEndSrcBuf ) + { + unsigned char cLead = static_cast(*pSrcBuf); + + /* get entry for the lead byte */ + pLeadEntry = pLeadTab+cLead; + + /* SingleByte char? */ + if (pLeadEntry->mpToUniTrailTab == nullptr + || cLead < pConvertData->mnLeadStart + || cLead > pConvertData->mnLeadEnd) + { + cConv = pLeadEntry->mnUniChar; + if ( !cConv && (cLead != 0) ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_UNDEFINED; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } else { + pSrcBuf = startOfCurrentChar; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE ) + { + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + continue; + } + cConv = ImplGetUndefinedUnicodeChar(cLead, nFlags); + } + } + else + { + /* Source buffer too small */ + if ( pSrcBuf +1 == pEndSrcBuf ) + { + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0 ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + break; + } + cConv = 0; + } + else + { + pSrcBuf++; + cTrail = static_cast(*pSrcBuf); + if ( (cTrail >= pLeadEntry->mnTrailStart) && (cTrail <= pLeadEntry->mnTrailEnd) ) + cConv = pLeadEntry->mpToUniTrailTab[cTrail-pLeadEntry->mnTrailStart]; + else + cConv = 0; + + if ( !cConv ) + { + /* EUDC Ranges */ + sal_uInt16 i; + const ImplDBCSEUDCData* pEUDCTab = pConvertData->mpEUDCTab; + for ( i = 0; i < pConvertData->mnEUDCCount; i++ ) + { + if ( (cLead >= pEUDCTab->mnLeadStart) && + (cLead <= pEUDCTab->mnLeadEnd) ) + { + if ( (cTrail >= pEUDCTab->mnTrail1Start) && + (cTrail <= pEUDCTab->mnTrail1End) ) + { + cConv = pEUDCTab->mnUniStart+ + ((cLead-pEUDCTab->mnLeadStart)*pEUDCTab->mnTrailRangeCount)+ + (cTrail-pEUDCTab->mnTrail1Start); + break; + } + sal_uInt16 nTrailCount = pEUDCTab->mnTrail1End-pEUDCTab->mnTrail1Start+1; + if ( (pEUDCTab->mnTrailCount >= 2) && + (cTrail >= pEUDCTab->mnTrail2Start) && + (cTrail <= pEUDCTab->mnTrail2End) ) + { + cConv = pEUDCTab->mnUniStart+ + ((cLead-pEUDCTab->mnLeadStart)*pEUDCTab->mnTrailRangeCount)+ + nTrailCount+ + (cTrail-pEUDCTab->mnTrail2Start); + break; + } + nTrailCount = pEUDCTab->mnTrail2End-pEUDCTab->mnTrail2Start+1; + if ( (pEUDCTab->mnTrailCount >= 3) && + (cTrail >= pEUDCTab->mnTrail3Start) && + (cTrail <= pEUDCTab->mnTrail3End) ) + { + cConv = pEUDCTab->mnUniStart+ + ((cLead-pEUDCTab->mnLeadStart)*pEUDCTab->mnTrailRangeCount)+ + nTrailCount+ + (cTrail-pEUDCTab->mnTrail3Start); + break; + } + } + + pEUDCTab++; + } + + if ( !cConv ) + { + /* We compare the full range of the trail we defined, */ + /* which can often be greater than the limit. We do this */ + /* so that extensions that don't consider encodings */ + /* correctly treat double-byte characters as a single */ + /* character as much as possible. */ + + if (cLead < pConvertData->mnLeadStart + || cLead > pConvertData->mnLeadEnd + || cTrail < pConvertData->mnTrailStart + || cTrail > pConvertData->mnTrailEnd) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } else { + pSrcBuf = startOfCurrentChar; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE ) + { + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + continue; + } + cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + } + } + } + } + if ( !cConv ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_MBUNDEFINED; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } else { + pSrcBuf = startOfCurrentChar; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE ) + { + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + continue; + } + cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + } + } + + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + *pDestBuf = cConv; + pDestBuf++; + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +sal_Size ImplUnicodeToDBCS( const void* pData, SAL_UNUSED_PARAMETER void*, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ) +{ + sal_uInt16 cConv; + sal_Unicode c; + const ImplUniToDBCSHighTab* pHighEntry; + const ImplDBCSConvertData* pConvertData = static_cast(pData); + const ImplUniToDBCSHighTab* pHighTab = pConvertData->mpToDBCSHighTab; + char* pEndDestBuf; + const sal_Unicode* pEndSrcBuf; + + bool bCheckRange = + pConvertData->mnLeadStart != 0 || pConvertData->mnLeadEnd != 0xFF; + /* this statement has the effect that this extra check is only done for + EUC-KR, which uses the MS-949 tables, but does not support the full + range of MS-949 */ + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestBytes; + pEndSrcBuf = pSrcBuf+nSrcChars; + while ( pSrcBuf < pEndSrcBuf ) + { + c = *pSrcBuf; + unsigned char nHighChar = static_cast((c >> 8) & 0xFF); + unsigned char nLowChar = static_cast(c & 0xFF); + + /* get entry for the high byte */ + pHighEntry = pHighTab+nHighChar; + + /* is low byte in the table range */ + if ( (nLowChar >= pHighEntry->mnLowStart) && (nLowChar <= pHighEntry->mnLowEnd) ) + { + cConv = pHighEntry->mpToUniTrailTab[nLowChar-pHighEntry->mnLowStart]; + if (bCheckRange && cConv > 0x7F + && ((cConv >> 8) < pConvertData->mnLeadStart + || (cConv >> 8) > pConvertData->mnLeadEnd + || (cConv & 0xFF) < pConvertData->mnTrailStart + || (cConv & 0xFF) > pConvertData->mnTrailEnd)) + cConv = 0; + } + else + cConv = 0; + + if (cConv == 0 && c != 0) + { + /* Map to EUDC ranges: */ + ImplDBCSEUDCData const * pEUDCTab = pConvertData->mpEUDCTab; + sal_uInt32 i; + for (i = 0; i < pConvertData->mnEUDCCount; ++i) + { + if (c >= pEUDCTab->mnUniStart && c <= pEUDCTab->mnUniEnd) + { + sal_uInt32 nIndex = c - pEUDCTab->mnUniStart; + sal_uInt32 nLeadOff + = nIndex / pEUDCTab->mnTrailRangeCount; + sal_uInt32 nTrailOff + = nIndex % pEUDCTab->mnTrailRangeCount; + sal_uInt32 nSize; + cConv = static_cast((pEUDCTab->mnLeadStart + nLeadOff) << 8); + nSize + = pEUDCTab->mnTrail1End - pEUDCTab->mnTrail1Start + 1; + if (nTrailOff < nSize) + { + cConv |= pEUDCTab->mnTrail1Start + nTrailOff; + break; + } + nTrailOff -= nSize; + nSize + = pEUDCTab->mnTrail2End - pEUDCTab->mnTrail2Start + 1; + if (nTrailOff < nSize) + { + cConv |= pEUDCTab->mnTrail2Start + nTrailOff; + break; + } + nTrailOff -= nSize; + cConv |= pEUDCTab->mnTrail3Start + nTrailOff; + break; + } + pEUDCTab++; + } + + /* FIXME + * SB: Not sure why this is in here. Plus, it does not work as + * intended when (c & 0xFF) == 0, because the next !cConv check + * will then think c has not yet been converted... + */ + if (c >= RTL_TEXTCVT_BYTE_PRIVATE_START + && c <= RTL_TEXTCVT_BYTE_PRIVATE_END) + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 ) + cConv = static_cast< char >(static_cast< unsigned char >(c & 0xFF)); + } + } + + if (cConv == 0 && c != 0) + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE ) + { + /* !!! */ + } + + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR ) + { + /* !!! */ + } + + /* Handle undefined and surrogates characters */ + /* (all surrogates characters are undefined) */ + if (sal::detail::textenc::handleUndefinedUnicodeToTextChar( + &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf, nFlags, + pInfo)) + continue; + break; + } + + /* SingleByte */ + if ( !(cConv & 0xFF00) ) + { + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF)); + pDestBuf++; + } + else + { + if ( pDestBuf+1 >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 8) & 0xFF)); + pDestBuf++; + *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF)); + pDestBuf++; + } + + pSrcBuf++; + } + + *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf); + return (nDestBytes - (pEndDestBuf-pDestBuf)); +} + +#define JIS_EUC_LEAD_OFF 0x80 +#define JIS_EUC_TRAIL_OFF 0x80 + +sal_Size ImplEUCJPToUnicode( const void* pData, + SAL_UNUSED_PARAMETER void*, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ) +{ + unsigned char cLead = '\0'; + unsigned char cTrail = '\0'; + sal_Unicode cConv; + const ImplDBCSToUniLeadTab* pLeadEntry; + const ImplDBCSToUniLeadTab* pLeadTab; + const ImplEUCJPConvertData* pConvertData = static_cast(pData); + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + char const * startOfCurrentChar = pSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + while ( pSrcBuf < pEndSrcBuf ) + { + unsigned char c = static_cast(*pSrcBuf); + + /* ASCII */ + if ( c <= 0x7F ) + cConv = c; + else + { + /* SS2 - Half-width katakana */ + /* 8E + A1-DF */ + if ( c == 0x8E ) + { + /* Source buffer too small */ + if ( pSrcBuf + 1 == pEndSrcBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + break; + } + + pSrcBuf++; + c = static_cast(*pSrcBuf); + if ( (c >= 0xA1) && (c <= 0xDF) ) + cConv = 0xFF61+(c-0xA1); + else + { + cConv = 0; + cLead = 0x8E; + cTrail = c; + } + } + else + { + /* SS3 - JIS 0212-1990 */ + /* 8F + A1-FE + A1-FE */ + if ( c == 0x8F ) + { + /* Source buffer too small */ + if (pEndSrcBuf - pSrcBuf < 3) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + break; + } + + pSrcBuf++; + cLead = static_cast(*pSrcBuf); + pSrcBuf++; + cTrail = static_cast(*pSrcBuf); + pLeadTab = pConvertData->mpJIS0212ToUniLeadTab; + } + /* CodeSet 2 JIS 0208-1997 */ + /* A1-FE + A1-FE */ + else + { + /* Source buffer too small */ + if ( pSrcBuf + 1 == pEndSrcBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + break; + } + + cLead = c; + pSrcBuf++; + cTrail = static_cast(*pSrcBuf); + pLeadTab = pConvertData->mpJIS0208ToUniLeadTab; + } + + /* Undefined Range */ + if ( (cLead < JIS_EUC_LEAD_OFF) || (cTrail < JIS_EUC_TRAIL_OFF) ) + cConv = 0; + else + { + cLead -= JIS_EUC_LEAD_OFF; + cTrail -= JIS_EUC_TRAIL_OFF; + pLeadEntry = pLeadTab+cLead; + if ( (cTrail >= pLeadEntry->mnTrailStart) && (cTrail <= pLeadEntry->mnTrailEnd) ) + cConv = pLeadEntry->mpToUniTrailTab[cTrail-pLeadEntry->mnTrailStart]; + else + cConv = 0; + } + } + + if ( !cConv ) + { + /* We compare the full range of the trail we defined, */ + /* which can often be greater than the limit. We do this */ + /* so that extensions that don't consider encodings */ + /* correctly treat double-byte characters as a single */ + /* character as much as possible. */ + + if ( (cLead < JIS_EUC_LEAD_OFF) || (cTrail < JIS_EUC_TRAIL_OFF) ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } else { + pSrcBuf = startOfCurrentChar; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE ) + { + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + continue; + } + cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + } + else + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } else { + pSrcBuf = startOfCurrentChar; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_MBUNDEFINED; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_IGNORE ) + { + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + continue; + } + cConv = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + } + } + } + + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + *pDestBuf = cConv; + pDestBuf++; + pSrcBuf++; + startOfCurrentChar = pSrcBuf; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +sal_Size ImplUnicodeToEUCJP( const void* pData, + SAL_UNUSED_PARAMETER void*, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ) +{ + sal_uInt32 cConv; + sal_Unicode c; + unsigned char nHighChar; + unsigned char nLowChar; + const ImplUniToDBCSHighTab* pHighEntry; + const ImplUniToDBCSHighTab* pHighTab; + const ImplEUCJPConvertData* pConvertData = static_cast(pData); + char* pEndDestBuf; + const sal_Unicode* pEndSrcBuf; + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestBytes; + pEndSrcBuf = pSrcBuf+nSrcChars; + while ( pSrcBuf < pEndSrcBuf ) + { + c = *pSrcBuf; + + /* ASCII */ + if ( c <= 0x7F ) + cConv = c; + /* Half-width katakana */ + else if ( (c >= 0xFF61) && (c <= 0xFF9F) ) + cConv = 0x8E00+0xA1+(c-0xFF61); + else + { + nHighChar = static_cast((c >> 8) & 0xFF); + nLowChar = static_cast(c & 0xFF); + + /* JIS 0208 */ + pHighTab = pConvertData->mpUniToJIS0208HighTab; + pHighEntry = pHighTab+nHighChar; + if ( (nLowChar >= pHighEntry->mnLowStart) && (nLowChar <= pHighEntry->mnLowEnd) ) + { + cConv = pHighEntry->mpToUniTrailTab[nLowChar-pHighEntry->mnLowStart]; + if (cConv != 0) + cConv |= 0x8080; + } + else + cConv = 0; + + /* JIS 0212 */ + if ( !cConv ) + { + pHighTab = pConvertData->mpUniToJIS0212HighTab; + pHighEntry = pHighTab+nHighChar; + if ( (nLowChar >= pHighEntry->mnLowStart) && (nLowChar <= pHighEntry->mnLowEnd) ) + { + cConv = pHighEntry->mpToUniTrailTab[nLowChar-pHighEntry->mnLowStart]; + if (cConv != 0) + cConv |= 0x8F8080; + } + + if ( !cConv ) + { + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE ) + { + /* !!! */ + } + + if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR ) + { + /* !!! */ + } + + /* Handle undefined and surrogates characters */ + /* (all surrogates characters are undefined) */ + if (sal::detail::textenc::handleUndefinedUnicodeToTextChar( + &pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf, + nFlags, pInfo)) + continue; + break; + } + } + } + + /* SingleByte */ + if ( !(cConv & 0xFFFF00) ) + { + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF)); + pDestBuf++; + } + /* DoubleByte */ + else if ( !(cConv & 0xFF0000) ) + { + if ( pDestBuf+1 >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 8) & 0xFF)); + pDestBuf++; + *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF)); + pDestBuf++; + } + else + { + if ( pDestBuf+2 >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 16) & 0xFF)); + pDestBuf++; + *pDestBuf = static_cast< char >(static_cast< unsigned char >((cConv >> 8) & 0xFF)); + pDestBuf++; + *pDestBuf = static_cast< char >(static_cast< unsigned char >(cConv & 0xFF)); + pDestBuf++; + } + + pSrcBuf++; + } + + *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf); + return (nDestBytes - (pEndDestBuf-pDestBuf)); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tcvtscn1.tab b/sal/textenc/tcvtscn1.tab new file mode 100644 index 000000000..20e412c93 --- /dev/null +++ b/sal/textenc/tcvtscn1.tab @@ -0,0 +1,3851 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* chinese simplified (China) charsets: */ +/* GB (GB2312), GBK, MS936, APPLE_CHINSIMP */ + +/* GBK is a superset of GB2312, so we have only GBK tables. The offset is */ +/* added in the lead byte tables. */ + +/* ======================================================================= */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E02, 0x4E04, 0x4E05, 0x4E06, 0x4E0F, 0x4E12, 0x4E17, 0x4E1F, /* 0x40 */ + 0x4E20, 0x4E21, 0x4E23, 0x4E26, 0x4E29, 0x4E2E, 0x4E2F, 0x4E31, /* 0x40 */ + 0x4E33, 0x4E35, 0x4E37, 0x4E3C, 0x4E40, 0x4E41, 0x4E42, 0x4E44, /* 0x50 */ + 0x4E46, 0x4E4A, 0x4E51, 0x4E55, 0x4E57, 0x4E5A, 0x4E5B, 0x4E62, /* 0x50 */ + 0x4E63, 0x4E64, 0x4E65, 0x4E67, 0x4E68, 0x4E6A, 0x4E6B, 0x4E6C, /* 0x60 */ + 0x4E6D, 0x4E6E, 0x4E6F, 0x4E72, 0x4E74, 0x4E75, 0x4E76, 0x4E77, /* 0x60 */ + 0x4E78, 0x4E79, 0x4E7A, 0x4E7B, 0x4E7C, 0x4E7D, 0x4E7F, 0x4E80, /* 0x70 */ + 0x4E81, 0x4E82, 0x4E83, 0x4E84, 0x4E85, 0x4E87, 0x4E8A, 0, /* 0x70 */ + 0x4E90, 0x4E96, 0x4E97, 0x4E99, 0x4E9C, 0x4E9D, 0x4E9E, 0x4EA3, /* 0x80 */ + 0x4EAA, 0x4EAF, 0x4EB0, 0x4EB1, 0x4EB4, 0x4EB6, 0x4EB7, 0x4EB8, /* 0x80 */ + 0x4EB9, 0x4EBC, 0x4EBD, 0x4EBE, 0x4EC8, 0x4ECC, 0x4ECF, 0x4ED0, /* 0x90 */ + 0x4ED2, 0x4EDA, 0x4EDB, 0x4EDC, 0x4EE0, 0x4EE2, 0x4EE6, 0x4EE7, /* 0x90 */ + 0x4EE9, 0x4EED, 0x4EEE, 0x4EEF, 0x4EF1, 0x4EF4, 0x4EF8, 0x4EF9, /* 0xA0 */ + 0x4EFA, 0x4EFC, 0x4EFE, 0x4F00, 0x4F02, 0x4F03, 0x4F04, 0x4F05, /* 0xA0 */ + 0x4F06, 0x4F07, 0x4F08, 0x4F0B, 0x4F0C, 0x4F12, 0x4F13, 0x4F14, /* 0xB0 */ + 0x4F15, 0x4F16, 0x4F1C, 0x4F1D, 0x4F21, 0x4F23, 0x4F28, 0x4F29, /* 0xB0 */ + 0x4F2C, 0x4F2D, 0x4F2E, 0x4F31, 0x4F33, 0x4F35, 0x4F37, 0x4F39, /* 0xC0 */ + 0x4F3B, 0x4F3E, 0x4F3F, 0x4F40, 0x4F41, 0x4F42, 0x4F44, 0x4F45, /* 0xC0 */ + 0x4F47, 0x4F48, 0x4F49, 0x4F4A, 0x4F4B, 0x4F4C, 0x4F52, 0x4F54, /* 0xD0 */ + 0x4F56, 0x4F61, 0x4F62, 0x4F66, 0x4F68, 0x4F6A, 0x4F6B, 0x4F6D, /* 0xD0 */ + 0x4F6E, 0x4F71, 0x4F72, 0x4F75, 0x4F77, 0x4F78, 0x4F79, 0x4F7A, /* 0xE0 */ + 0x4F7D, 0x4F80, 0x4F81, 0x4F82, 0x4F85, 0x4F86, 0x4F87, 0x4F8A, /* 0xE0 */ + 0x4F8C, 0x4F8E, 0x4F90, 0x4F92, 0x4F93, 0x4F95, 0x4F96, 0x4F98, /* 0xF0 */ + 0x4F99, 0x4F9A, 0x4F9C, 0x4F9E, 0x4F9F, 0x4FA1, 0x4FA2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4FA4, 0x4FAB, 0x4FAD, 0x4FB0, 0x4FB1, 0x4FB2, 0x4FB3, 0x4FB4, /* 0x40 */ + 0x4FB6, 0x4FB7, 0x4FB8, 0x4FB9, 0x4FBA, 0x4FBB, 0x4FBC, 0x4FBD, /* 0x40 */ + 0x4FBE, 0x4FC0, 0x4FC1, 0x4FC2, 0x4FC6, 0x4FC7, 0x4FC8, 0x4FC9, /* 0x50 */ + 0x4FCB, 0x4FCC, 0x4FCD, 0x4FD2, 0x4FD3, 0x4FD4, 0x4FD5, 0x4FD6, /* 0x50 */ + 0x4FD9, 0x4FDB, 0x4FE0, 0x4FE2, 0x4FE4, 0x4FE5, 0x4FE7, 0x4FEB, /* 0x60 */ + 0x4FEC, 0x4FF0, 0x4FF2, 0x4FF4, 0x4FF5, 0x4FF6, 0x4FF7, 0x4FF9, /* 0x60 */ + 0x4FFB, 0x4FFC, 0x4FFD, 0x4FFF, 0x5000, 0x5001, 0x5002, 0x5003, /* 0x70 */ + 0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500A, 0, /* 0x70 */ + 0x500B, 0x500E, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, /* 0x80 */ + 0x501B, 0x501D, 0x501E, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, /* 0x80 */ + 0x502B, 0x502F, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, /* 0x90 */ + 0x5036, 0x5037, 0x5038, 0x5039, 0x503B, 0x503D, 0x503F, 0x5040, /* 0x90 */ + 0x5041, 0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504A, 0x504B, /* 0xA0 */ + 0x504D, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, /* 0xA0 */ + 0x5058, 0x5059, 0x505B, 0x505D, 0x505E, 0x505F, 0x5060, 0x5061, /* 0xB0 */ + 0x5062, 0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506A, /* 0xB0 */ + 0x506B, 0x506D, 0x506E, 0x506F, 0x5070, 0x5071, 0x5072, 0x5073, /* 0xC0 */ + 0x5074, 0x5075, 0x5078, 0x5079, 0x507A, 0x507C, 0x507D, 0x5081, /* 0xC0 */ + 0x5082, 0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508A, 0x508B, /* 0xD0 */ + 0x508C, 0x508E, 0x508F, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, /* 0xD0 */ + 0x5095, 0x5096, 0x5097, 0x5098, 0x5099, 0x509A, 0x509B, 0x509C, /* 0xE0 */ + 0x509D, 0x509E, 0x509F, 0x50A0, 0x50A1, 0x50A2, 0x50A4, 0x50A6, /* 0xE0 */ + 0x50AA, 0x50AB, 0x50AD, 0x50AE, 0x50AF, 0x50B0, 0x50B1, 0x50B3, /* 0xF0 */ + 0x50B4, 0x50B5, 0x50B6, 0x50B7, 0x50B8, 0x50B9, 0x50BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x50BD, 0x50BE, 0x50BF, 0x50C0, 0x50C1, 0x50C2, 0x50C3, 0x50C4, /* 0x40 */ + 0x50C5, 0x50C6, 0x50C7, 0x50C8, 0x50C9, 0x50CA, 0x50CB, 0x50CC, /* 0x40 */ + 0x50CD, 0x50CE, 0x50D0, 0x50D1, 0x50D2, 0x50D3, 0x50D4, 0x50D5, /* 0x50 */ + 0x50D7, 0x50D8, 0x50D9, 0x50DB, 0x50DC, 0x50DD, 0x50DE, 0x50DF, /* 0x50 */ + 0x50E0, 0x50E1, 0x50E2, 0x50E3, 0x50E4, 0x50E5, 0x50E8, 0x50E9, /* 0x60 */ + 0x50EA, 0x50EB, 0x50EF, 0x50F0, 0x50F1, 0x50F2, 0x50F4, 0x50F6, /* 0x60 */ + 0x50F7, 0x50F8, 0x50F9, 0x50FA, 0x50FC, 0x50FD, 0x50FE, 0x50FF, /* 0x70 */ + 0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0, /* 0x70 */ + 0x5109, 0x510A, 0x510C, 0x510D, 0x510E, 0x510F, 0x5110, 0x5111, /* 0x80 */ + 0x5113, 0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511A, /* 0x80 */ + 0x511B, 0x511C, 0x511D, 0x511E, 0x511F, 0x5120, 0x5122, 0x5123, /* 0x90 */ + 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512A, 0x512B, /* 0x90 */ + 0x512C, 0x512D, 0x512E, 0x512F, 0x5130, 0x5131, 0x5132, 0x5133, /* 0xA0 */ + 0x5134, 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513A, 0x513B, /* 0xA0 */ + 0x513C, 0x513D, 0x513E, 0x5142, 0x5147, 0x514A, 0x514C, 0x514E, /* 0xB0 */ + 0x514F, 0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515B, /* 0xB0 */ + 0x515D, 0x515E, 0x515F, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, /* 0xC0 */ + 0x5167, 0x5169, 0x516A, 0x516F, 0x5172, 0x517A, 0x517E, 0x517F, /* 0xC0 */ + 0x5183, 0x5184, 0x5186, 0x5187, 0x518A, 0x518B, 0x518E, 0x518F, /* 0xD0 */ + 0x5190, 0x5191, 0x5193, 0x5194, 0x5198, 0x519A, 0x519D, 0x519E, /* 0xD0 */ + 0x519F, 0x51A1, 0x51A3, 0x51A6, 0x51A7, 0x51A8, 0x51A9, 0x51AA, /* 0xE0 */ + 0x51AD, 0x51AE, 0x51B4, 0x51B8, 0x51B9, 0x51BA, 0x51BE, 0x51BF, /* 0xE0 */ + 0x51C1, 0x51C2, 0x51C3, 0x51C5, 0x51C8, 0x51CA, 0x51CD, 0x51CE, /* 0xF0 */ + 0x51D0, 0x51D2, 0x51D3, 0x51D4, 0x51D5, 0x51D6, 0x51D7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x51D8, 0x51D9, 0x51DA, 0x51DC, 0x51DE, 0x51DF, 0x51E2, 0x51E3, /* 0x40 */ + 0x51E5, 0x51E6, 0x51E7, 0x51E8, 0x51E9, 0x51EA, 0x51EC, 0x51EE, /* 0x40 */ + 0x51F1, 0x51F2, 0x51F4, 0x51F7, 0x51FE, 0x5204, 0x5205, 0x5209, /* 0x50 */ + 0x520B, 0x520C, 0x520F, 0x5210, 0x5213, 0x5214, 0x5215, 0x521C, /* 0x50 */ + 0x521E, 0x521F, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227, /* 0x60 */ + 0x522A, 0x522C, 0x522F, 0x5231, 0x5232, 0x5234, 0x5235, 0x523C, /* 0x60 */ + 0x523E, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524B, /* 0x70 */ + 0x524E, 0x524F, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0, /* 0x70 */ + 0x5259, 0x525A, 0x525B, 0x525D, 0x525F, 0x5260, 0x5262, 0x5263, /* 0x80 */ + 0x5264, 0x5266, 0x5268, 0x526B, 0x526C, 0x526D, 0x526E, 0x5270, /* 0x80 */ + 0x5271, 0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, /* 0x90 */ + 0x527A, 0x527B, 0x527C, 0x527E, 0x5280, 0x5283, 0x5284, 0x5285, /* 0x90 */ + 0x5286, 0x5287, 0x5289, 0x528A, 0x528B, 0x528C, 0x528D, 0x528E, /* 0xA0 */ + 0x528F, 0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, /* 0xA0 */ + 0x5299, 0x529A, 0x529C, 0x52A4, 0x52A5, 0x52A6, 0x52A7, 0x52AE, /* 0xB0 */ + 0x52AF, 0x52B0, 0x52B4, 0x52B5, 0x52B6, 0x52B7, 0x52B8, 0x52B9, /* 0xB0 */ + 0x52BA, 0x52BB, 0x52BC, 0x52BD, 0x52C0, 0x52C1, 0x52C2, 0x52C4, /* 0xC0 */ + 0x52C5, 0x52C6, 0x52C8, 0x52CA, 0x52CC, 0x52CD, 0x52CE, 0x52CF, /* 0xC0 */ + 0x52D1, 0x52D3, 0x52D4, 0x52D5, 0x52D7, 0x52D9, 0x52DA, 0x52DB, /* 0xD0 */ + 0x52DC, 0x52DD, 0x52DE, 0x52E0, 0x52E1, 0x52E2, 0x52E3, 0x52E5, /* 0xD0 */ + 0x52E6, 0x52E7, 0x52E8, 0x52E9, 0x52EA, 0x52EB, 0x52EC, 0x52ED, /* 0xE0 */ + 0x52EE, 0x52EF, 0x52F1, 0x52F2, 0x52F3, 0x52F4, 0x52F5, 0x52F6, /* 0xE0 */ + 0x52F7, 0x52F8, 0x52FB, 0x52FC, 0x52FD, 0x5301, 0x5302, 0x5303, /* 0xF0 */ + 0x5304, 0x5307, 0x5309, 0x530A, 0x530B, 0x530C, 0x530E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531B, 0x531C, 0x531E, /* 0x40 */ + 0x531F, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532B, /* 0x40 */ + 0x532C, 0x532D, 0x532F, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, /* 0x50 */ + 0x5335, 0x5336, 0x5337, 0x5338, 0x533C, 0x533D, 0x5340, 0x5342, /* 0x50 */ + 0x5344, 0x5346, 0x534B, 0x534C, 0x534D, 0x5350, 0x5354, 0x5358, /* 0x60 */ + 0x5359, 0x535B, 0x535D, 0x5365, 0x5368, 0x536A, 0x536C, 0x536D, /* 0x60 */ + 0x5372, 0x5376, 0x5379, 0x537B, 0x537C, 0x537D, 0x537E, 0x5380, /* 0x70 */ + 0x5381, 0x5383, 0x5387, 0x5388, 0x538A, 0x538E, 0x538F, 0, /* 0x70 */ + 0x5390, 0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, /* 0x80 */ + 0x539B, 0x539C, 0x539E, 0x53A0, 0x53A1, 0x53A4, 0x53A7, 0x53AA, /* 0x80 */ + 0x53AB, 0x53AC, 0x53AD, 0x53AF, 0x53B0, 0x53B1, 0x53B2, 0x53B3, /* 0x90 */ + 0x53B4, 0x53B5, 0x53B7, 0x53B8, 0x53B9, 0x53BA, 0x53BC, 0x53BD, /* 0x90 */ + 0x53BE, 0x53C0, 0x53C3, 0x53C4, 0x53C5, 0x53C6, 0x53C7, 0x53CE, /* 0xA0 */ + 0x53CF, 0x53D0, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DC, 0x53DD, /* 0xA0 */ + 0x53DE, 0x53E1, 0x53E2, 0x53E7, 0x53F4, 0x53FA, 0x53FE, 0x53FF, /* 0xB0 */ + 0x5400, 0x5402, 0x5405, 0x5407, 0x540B, 0x5414, 0x5418, 0x5419, /* 0xB0 */ + 0x541A, 0x541C, 0x5422, 0x5424, 0x5425, 0x542A, 0x5430, 0x5433, /* 0xC0 */ + 0x5436, 0x5437, 0x543A, 0x543D, 0x543F, 0x5441, 0x5442, 0x5444, /* 0xC0 */ + 0x5445, 0x5447, 0x5449, 0x544C, 0x544D, 0x544E, 0x544F, 0x5451, /* 0xD0 */ + 0x545A, 0x545D, 0x545E, 0x545F, 0x5460, 0x5461, 0x5463, 0x5465, /* 0xD0 */ + 0x5467, 0x5469, 0x546A, 0x546B, 0x546C, 0x546D, 0x546E, 0x546F, /* 0xE0 */ + 0x5470, 0x5474, 0x5479, 0x547A, 0x547E, 0x547F, 0x5481, 0x5483, /* 0xE0 */ + 0x5485, 0x5487, 0x5488, 0x5489, 0x548A, 0x548D, 0x5491, 0x5493, /* 0xF0 */ + 0x5497, 0x5498, 0x549C, 0x549E, 0x549F, 0x54A0, 0x54A1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54A2, 0x54A5, 0x54AE, 0x54B0, 0x54B2, 0x54B5, 0x54B6, 0x54B7, /* 0x40 */ + 0x54B9, 0x54BA, 0x54BC, 0x54BE, 0x54C3, 0x54C5, 0x54CA, 0x54CB, /* 0x40 */ + 0x54D6, 0x54D8, 0x54DB, 0x54E0, 0x54E1, 0x54E2, 0x54E3, 0x54E4, /* 0x50 */ + 0x54EB, 0x54EC, 0x54EF, 0x54F0, 0x54F1, 0x54F4, 0x54F5, 0x54F6, /* 0x50 */ + 0x54F7, 0x54F8, 0x54F9, 0x54FB, 0x54FE, 0x5500, 0x5502, 0x5503, /* 0x60 */ + 0x5504, 0x5505, 0x5508, 0x550A, 0x550B, 0x550C, 0x550D, 0x550E, /* 0x60 */ + 0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551A, /* 0x70 */ + 0x551C, 0x551D, 0x551E, 0x551F, 0x5521, 0x5525, 0x5526, 0, /* 0x70 */ + 0x5528, 0x5529, 0x552B, 0x552D, 0x5532, 0x5534, 0x5535, 0x5536, /* 0x80 */ + 0x5538, 0x5539, 0x553A, 0x553B, 0x553D, 0x5540, 0x5542, 0x5545, /* 0x80 */ + 0x5547, 0x5548, 0x554B, 0x554C, 0x554D, 0x554E, 0x554F, 0x5551, /* 0x90 */ + 0x5552, 0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555A, 0x555B, /* 0x90 */ + 0x555D, 0x555E, 0x555F, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, /* 0xA0 */ + 0x556B, 0x556F, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, /* 0xA0 */ + 0x557A, 0x557D, 0x557F, 0x5585, 0x5586, 0x558C, 0x558D, 0x558E, /* 0xB0 */ + 0x5590, 0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559A, 0x559B, /* 0xB0 */ + 0x559E, 0x55A0, 0x55A1, 0x55A2, 0x55A3, 0x55A4, 0x55A5, 0x55A6, /* 0xC0 */ + 0x55A8, 0x55A9, 0x55AA, 0x55AB, 0x55AC, 0x55AD, 0x55AE, 0x55AF, /* 0xC0 */ + 0x55B0, 0x55B2, 0x55B4, 0x55B6, 0x55B8, 0x55BA, 0x55BC, 0x55BF, /* 0xD0 */ + 0x55C0, 0x55C1, 0x55C2, 0x55C3, 0x55C6, 0x55C7, 0x55C8, 0x55CA, /* 0xD0 */ + 0x55CB, 0x55CE, 0x55CF, 0x55D0, 0x55D5, 0x55D7, 0x55D8, 0x55D9, /* 0xE0 */ + 0x55DA, 0x55DB, 0x55DE, 0x55E0, 0x55E2, 0x55E7, 0x55E9, 0x55ED, /* 0xE0 */ + 0x55EE, 0x55F0, 0x55F1, 0x55F4, 0x55F6, 0x55F8, 0x55F9, 0x55FA, /* 0xF0 */ + 0x55FB, 0x55FC, 0x55FF, 0x5602, 0x5603, 0x5604, 0x5605 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5606, 0x5607, 0x560A, 0x560B, 0x560D, 0x5610, 0x5611, 0x5612, /* 0x40 */ + 0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561A, 0x561C, /* 0x40 */ + 0x561D, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629, /* 0x50 */ + 0x562A, 0x562B, 0x562E, 0x562F, 0x5630, 0x5633, 0x5635, 0x5637, /* 0x50 */ + 0x5638, 0x563A, 0x563C, 0x563D, 0x563E, 0x5640, 0x5641, 0x5642, /* 0x60 */ + 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564A, /* 0x60 */ + 0x564B, 0x564F, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, /* 0x70 */ + 0x565A, 0x565B, 0x565D, 0x565E, 0x565F, 0x5660, 0x5661, 0, /* 0x70 */ + 0x5663, 0x5665, 0x5666, 0x5667, 0x566D, 0x566E, 0x566F, 0x5670, /* 0x80 */ + 0x5672, 0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567A, /* 0x80 */ + 0x567D, 0x567E, 0x567F, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, /* 0x90 */ + 0x5687, 0x5688, 0x5689, 0x568A, 0x568B, 0x568C, 0x568D, 0x5690, /* 0x90 */ + 0x5691, 0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, /* 0xA0 */ + 0x569A, 0x569B, 0x569C, 0x569D, 0x569E, 0x569F, 0x56A0, 0x56A1, /* 0xA0 */ + 0x56A2, 0x56A4, 0x56A5, 0x56A6, 0x56A7, 0x56A8, 0x56A9, 0x56AA, /* 0xB0 */ + 0x56AB, 0x56AC, 0x56AD, 0x56AE, 0x56B0, 0x56B1, 0x56B2, 0x56B3, /* 0xB0 */ + 0x56B4, 0x56B5, 0x56B6, 0x56B8, 0x56B9, 0x56BA, 0x56BB, 0x56BD, /* 0xC0 */ + 0x56BE, 0x56BF, 0x56C0, 0x56C1, 0x56C2, 0x56C3, 0x56C4, 0x56C5, /* 0xC0 */ + 0x56C6, 0x56C7, 0x56C8, 0x56C9, 0x56CB, 0x56CC, 0x56CD, 0x56CE, /* 0xD0 */ + 0x56CF, 0x56D0, 0x56D1, 0x56D2, 0x56D3, 0x56D5, 0x56D6, 0x56D8, /* 0xD0 */ + 0x56D9, 0x56DC, 0x56E3, 0x56E5, 0x56E6, 0x56E7, 0x56E8, 0x56E9, /* 0xE0 */ + 0x56EA, 0x56EC, 0x56EE, 0x56EF, 0x56F2, 0x56F3, 0x56F6, 0x56F7, /* 0xE0 */ + 0x56F8, 0x56FB, 0x56FC, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, /* 0xF0 */ + 0x570B, 0x570C, 0x570D, 0x570E, 0x570F, 0x5710, 0x5711 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719, /* 0x40 */ + 0x571A, 0x571B, 0x571D, 0x571E, 0x5720, 0x5721, 0x5722, 0x5724, /* 0x40 */ + 0x5725, 0x5726, 0x5727, 0x572B, 0x5731, 0x5732, 0x5734, 0x5735, /* 0x50 */ + 0x5736, 0x5737, 0x5738, 0x573C, 0x573D, 0x573F, 0x5741, 0x5743, /* 0x50 */ + 0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574B, 0x5752, 0x5753, /* 0x60 */ + 0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765, /* 0x60 */ + 0x5767, 0x576C, 0x576E, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775, /* 0x70 */ + 0x5778, 0x5779, 0x577A, 0x577D, 0x577E, 0x577F, 0x5780, 0, /* 0x70 */ + 0x5781, 0x5787, 0x5788, 0x5789, 0x578A, 0x578D, 0x578E, 0x578F, /* 0x80 */ + 0x5790, 0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, /* 0x80 */ + 0x579A, 0x579C, 0x579D, 0x579E, 0x579F, 0x57A5, 0x57A8, 0x57AA, /* 0x90 */ + 0x57AC, 0x57AF, 0x57B0, 0x57B1, 0x57B3, 0x57B5, 0x57B6, 0x57B7, /* 0x90 */ + 0x57B9, 0x57BA, 0x57BB, 0x57BC, 0x57BD, 0x57BE, 0x57BF, 0x57C0, /* 0xA0 */ + 0x57C1, 0x57C4, 0x57C5, 0x57C6, 0x57C7, 0x57C8, 0x57C9, 0x57CA, /* 0xA0 */ + 0x57CC, 0x57CD, 0x57D0, 0x57D1, 0x57D3, 0x57D6, 0x57D7, 0x57DB, /* 0xB0 */ + 0x57DC, 0x57DE, 0x57E1, 0x57E2, 0x57E3, 0x57E5, 0x57E6, 0x57E7, /* 0xB0 */ + 0x57E8, 0x57E9, 0x57EA, 0x57EB, 0x57EC, 0x57EE, 0x57F0, 0x57F1, /* 0xC0 */ + 0x57F2, 0x57F3, 0x57F5, 0x57F6, 0x57F7, 0x57FB, 0x57FC, 0x57FE, /* 0xC0 */ + 0x57FF, 0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580A, /* 0xD0 */ + 0x580C, 0x580E, 0x580F, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, /* 0xD0 */ + 0x5817, 0x5818, 0x581A, 0x581B, 0x581C, 0x581D, 0x581F, 0x5822, /* 0xE0 */ + 0x5823, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582B, 0x582C, /* 0xE0 */ + 0x582D, 0x582E, 0x582F, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, /* 0xF0 */ + 0x5837, 0x5838, 0x5839, 0x583A, 0x583B, 0x583C, 0x583D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x583E, 0x583F, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, /* 0x40 */ + 0x5847, 0x5848, 0x5849, 0x584A, 0x584B, 0x584E, 0x584F, 0x5850, /* 0x40 */ + 0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585A, 0x585B, /* 0x50 */ + 0x585C, 0x585D, 0x585F, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, /* 0x50 */ + 0x5866, 0x5867, 0x5868, 0x5869, 0x586A, 0x586D, 0x586E, 0x586F, /* 0x60 */ + 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, /* 0x60 */ + 0x5878, 0x5879, 0x587A, 0x587B, 0x587C, 0x587D, 0x587F, 0x5882, /* 0x70 */ + 0x5884, 0x5886, 0x5887, 0x5888, 0x588A, 0x588B, 0x588C, 0, /* 0x70 */ + 0x588D, 0x588E, 0x588F, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, /* 0x80 */ + 0x5897, 0x5898, 0x589B, 0x589C, 0x589D, 0x58A0, 0x58A1, 0x58A2, /* 0x80 */ + 0x58A3, 0x58A4, 0x58A5, 0x58A6, 0x58A7, 0x58AA, 0x58AB, 0x58AC, /* 0x90 */ + 0x58AD, 0x58AE, 0x58AF, 0x58B0, 0x58B1, 0x58B2, 0x58B3, 0x58B4, /* 0x90 */ + 0x58B5, 0x58B6, 0x58B7, 0x58B8, 0x58B9, 0x58BA, 0x58BB, 0x58BD, /* 0xA0 */ + 0x58BE, 0x58BF, 0x58C0, 0x58C2, 0x58C3, 0x58C4, 0x58C6, 0x58C7, /* 0xA0 */ + 0x58C8, 0x58C9, 0x58CA, 0x58CB, 0x58CC, 0x58CD, 0x58CE, 0x58CF, /* 0xB0 */ + 0x58D0, 0x58D2, 0x58D3, 0x58D4, 0x58D6, 0x58D7, 0x58D8, 0x58D9, /* 0xB0 */ + 0x58DA, 0x58DB, 0x58DC, 0x58DD, 0x58DE, 0x58DF, 0x58E0, 0x58E1, /* 0xC0 */ + 0x58E2, 0x58E3, 0x58E5, 0x58E6, 0x58E7, 0x58E8, 0x58E9, 0x58EA, /* 0xC0 */ + 0x58ED, 0x58EF, 0x58F1, 0x58F2, 0x58F4, 0x58F5, 0x58F7, 0x58F8, /* 0xD0 */ + 0x58FA, 0x58FB, 0x58FC, 0x58FD, 0x58FE, 0x58FF, 0x5900, 0x5901, /* 0xD0 */ + 0x5903, 0x5905, 0x5906, 0x5908, 0x5909, 0x590A, 0x590B, 0x590C, /* 0xE0 */ + 0x590E, 0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591B, /* 0xE0 */ + 0x591D, 0x591E, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, /* 0xF0 */ + 0x592C, 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x593D, 0x593E, 0x593F, 0x5940, 0x5943, 0x5945, 0x5946, 0x594A, /* 0x40 */ + 0x594C, 0x594D, 0x5950, 0x5952, 0x5953, 0x5959, 0x595B, 0x595C, /* 0x40 */ + 0x595D, 0x595E, 0x595F, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967, /* 0x50 */ + 0x5968, 0x5969, 0x596A, 0x596B, 0x596C, 0x596D, 0x596E, 0x596F, /* 0x50 */ + 0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597A, 0x597B, 0x597C, /* 0x60 */ + 0x597E, 0x597F, 0x5980, 0x5985, 0x5989, 0x598B, 0x598C, 0x598E, /* 0x60 */ + 0x598F, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599A, 0x599B, /* 0x70 */ + 0x599C, 0x599D, 0x599F, 0x59A0, 0x59A1, 0x59A2, 0x59A6, 0, /* 0x70 */ + 0x59A7, 0x59AC, 0x59AD, 0x59B0, 0x59B1, 0x59B3, 0x59B4, 0x59B5, /* 0x80 */ + 0x59B6, 0x59B7, 0x59B8, 0x59BA, 0x59BC, 0x59BD, 0x59BF, 0x59C0, /* 0x80 */ + 0x59C1, 0x59C2, 0x59C3, 0x59C4, 0x59C5, 0x59C7, 0x59C8, 0x59C9, /* 0x90 */ + 0x59CC, 0x59CD, 0x59CE, 0x59CF, 0x59D5, 0x59D6, 0x59D9, 0x59DB, /* 0x90 */ + 0x59DE, 0x59DF, 0x59E0, 0x59E1, 0x59E2, 0x59E4, 0x59E6, 0x59E7, /* 0xA0 */ + 0x59E9, 0x59EA, 0x59EB, 0x59ED, 0x59EE, 0x59EF, 0x59F0, 0x59F1, /* 0xA0 */ + 0x59F2, 0x59F3, 0x59F4, 0x59F5, 0x59F6, 0x59F7, 0x59F8, 0x59FA, /* 0xB0 */ + 0x59FC, 0x59FD, 0x59FE, 0x5A00, 0x5A02, 0x5A0A, 0x5A0B, 0x5A0D, /* 0xB0 */ + 0x5A0E, 0x5A0F, 0x5A10, 0x5A12, 0x5A14, 0x5A15, 0x5A16, 0x5A17, /* 0xC0 */ + 0x5A19, 0x5A1A, 0x5A1B, 0x5A1D, 0x5A1E, 0x5A21, 0x5A22, 0x5A24, /* 0xC0 */ + 0x5A26, 0x5A27, 0x5A28, 0x5A2A, 0x5A2B, 0x5A2C, 0x5A2D, 0x5A2E, /* 0xD0 */ + 0x5A2F, 0x5A30, 0x5A33, 0x5A35, 0x5A37, 0x5A38, 0x5A39, 0x5A3A, /* 0xD0 */ + 0x5A3B, 0x5A3D, 0x5A3E, 0x5A3F, 0x5A41, 0x5A42, 0x5A43, 0x5A44, /* 0xE0 */ + 0x5A45, 0x5A47, 0x5A48, 0x5A4B, 0x5A4C, 0x5A4D, 0x5A4E, 0x5A4F, /* 0xE0 */ + 0x5A50, 0x5A51, 0x5A52, 0x5A53, 0x5A54, 0x5A56, 0x5A57, 0x5A58, /* 0xF0 */ + 0x5A59, 0x5A5B, 0x5A5C, 0x5A5D, 0x5A5E, 0x5A5F, 0x5A60 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5A61, 0x5A63, 0x5A64, 0x5A65, 0x5A66, 0x5A68, 0x5A69, 0x5A6B, /* 0x40 */ + 0x5A6C, 0x5A6D, 0x5A6E, 0x5A6F, 0x5A70, 0x5A71, 0x5A72, 0x5A73, /* 0x40 */ + 0x5A78, 0x5A79, 0x5A7B, 0x5A7C, 0x5A7D, 0x5A7E, 0x5A80, 0x5A81, /* 0x50 */ + 0x5A82, 0x5A83, 0x5A84, 0x5A85, 0x5A86, 0x5A87, 0x5A88, 0x5A89, /* 0x50 */ + 0x5A8A, 0x5A8B, 0x5A8C, 0x5A8D, 0x5A8E, 0x5A8F, 0x5A90, 0x5A91, /* 0x60 */ + 0x5A93, 0x5A94, 0x5A95, 0x5A96, 0x5A97, 0x5A98, 0x5A99, 0x5A9C, /* 0x60 */ + 0x5A9D, 0x5A9E, 0x5A9F, 0x5AA0, 0x5AA1, 0x5AA2, 0x5AA3, 0x5AA4, /* 0x70 */ + 0x5AA5, 0x5AA6, 0x5AA7, 0x5AA8, 0x5AA9, 0x5AAB, 0x5AAC, 0, /* 0x70 */ + 0x5AAD, 0x5AAE, 0x5AAF, 0x5AB0, 0x5AB1, 0x5AB4, 0x5AB6, 0x5AB7, /* 0x80 */ + 0x5AB9, 0x5ABA, 0x5ABB, 0x5ABC, 0x5ABD, 0x5ABF, 0x5AC0, 0x5AC3, /* 0x80 */ + 0x5AC4, 0x5AC5, 0x5AC6, 0x5AC7, 0x5AC8, 0x5ACA, 0x5ACB, 0x5ACD, /* 0x90 */ + 0x5ACE, 0x5ACF, 0x5AD0, 0x5AD1, 0x5AD3, 0x5AD5, 0x5AD7, 0x5AD9, /* 0x90 */ + 0x5ADA, 0x5ADB, 0x5ADD, 0x5ADE, 0x5ADF, 0x5AE2, 0x5AE4, 0x5AE5, /* 0xA0 */ + 0x5AE7, 0x5AE8, 0x5AEA, 0x5AEC, 0x5AED, 0x5AEE, 0x5AEF, 0x5AF0, /* 0xA0 */ + 0x5AF2, 0x5AF3, 0x5AF4, 0x5AF5, 0x5AF6, 0x5AF7, 0x5AF8, 0x5AF9, /* 0xB0 */ + 0x5AFA, 0x5AFB, 0x5AFC, 0x5AFD, 0x5AFE, 0x5AFF, 0x5B00, 0x5B01, /* 0xB0 */ + 0x5B02, 0x5B03, 0x5B04, 0x5B05, 0x5B06, 0x5B07, 0x5B08, 0x5B0A, /* 0xC0 */ + 0x5B0B, 0x5B0C, 0x5B0D, 0x5B0E, 0x5B0F, 0x5B10, 0x5B11, 0x5B12, /* 0xC0 */ + 0x5B13, 0x5B14, 0x5B15, 0x5B18, 0x5B19, 0x5B1A, 0x5B1B, 0x5B1C, /* 0xD0 */ + 0x5B1D, 0x5B1E, 0x5B1F, 0x5B20, 0x5B21, 0x5B22, 0x5B23, 0x5B24, /* 0xD0 */ + 0x5B25, 0x5B26, 0x5B27, 0x5B28, 0x5B29, 0x5B2A, 0x5B2B, 0x5B2C, /* 0xE0 */ + 0x5B2D, 0x5B2E, 0x5B2F, 0x5B30, 0x5B31, 0x5B33, 0x5B35, 0x5B36, /* 0xE0 */ + 0x5B38, 0x5B39, 0x5B3A, 0x5B3B, 0x5B3C, 0x5B3D, 0x5B3E, 0x5B3F, /* 0xF0 */ + 0x5B41, 0x5B42, 0x5B43, 0x5B44, 0x5B45, 0x5B46, 0x5B47 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5B48, 0x5B49, 0x5B4A, 0x5B4B, 0x5B4C, 0x5B4D, 0x5B4E, 0x5B4F, /* 0x40 */ + 0x5B52, 0x5B56, 0x5B5E, 0x5B60, 0x5B61, 0x5B67, 0x5B68, 0x5B6B, /* 0x40 */ + 0x5B6D, 0x5B6E, 0x5B6F, 0x5B72, 0x5B74, 0x5B76, 0x5B77, 0x5B78, /* 0x50 */ + 0x5B79, 0x5B7B, 0x5B7C, 0x5B7E, 0x5B7F, 0x5B82, 0x5B86, 0x5B8A, /* 0x50 */ + 0x5B8D, 0x5B8E, 0x5B90, 0x5B91, 0x5B92, 0x5B94, 0x5B96, 0x5B9F, /* 0x60 */ + 0x5BA7, 0x5BA8, 0x5BA9, 0x5BAC, 0x5BAD, 0x5BAE, 0x5BAF, 0x5BB1, /* 0x60 */ + 0x5BB2, 0x5BB7, 0x5BBA, 0x5BBB, 0x5BBC, 0x5BC0, 0x5BC1, 0x5BC3, /* 0x70 */ + 0x5BC8, 0x5BC9, 0x5BCA, 0x5BCB, 0x5BCD, 0x5BCE, 0x5BCF, 0, /* 0x70 */ + 0x5BD1, 0x5BD4, 0x5BD5, 0x5BD6, 0x5BD7, 0x5BD8, 0x5BD9, 0x5BDA, /* 0x80 */ + 0x5BDB, 0x5BDC, 0x5BE0, 0x5BE2, 0x5BE3, 0x5BE6, 0x5BE7, 0x5BE9, /* 0x80 */ + 0x5BEA, 0x5BEB, 0x5BEC, 0x5BED, 0x5BEF, 0x5BF1, 0x5BF2, 0x5BF3, /* 0x90 */ + 0x5BF4, 0x5BF5, 0x5BF6, 0x5BF7, 0x5BFD, 0x5BFE, 0x5C00, 0x5C02, /* 0x90 */ + 0x5C03, 0x5C05, 0x5C07, 0x5C08, 0x5C0B, 0x5C0C, 0x5C0D, 0x5C0E, /* 0xA0 */ + 0x5C10, 0x5C12, 0x5C13, 0x5C17, 0x5C19, 0x5C1B, 0x5C1E, 0x5C1F, /* 0xA0 */ + 0x5C20, 0x5C21, 0x5C23, 0x5C26, 0x5C28, 0x5C29, 0x5C2A, 0x5C2B, /* 0xB0 */ + 0x5C2D, 0x5C2E, 0x5C2F, 0x5C30, 0x5C32, 0x5C33, 0x5C35, 0x5C36, /* 0xB0 */ + 0x5C37, 0x5C43, 0x5C44, 0x5C46, 0x5C47, 0x5C4C, 0x5C4D, 0x5C52, /* 0xC0 */ + 0x5C53, 0x5C54, 0x5C56, 0x5C57, 0x5C58, 0x5C5A, 0x5C5B, 0x5C5C, /* 0xC0 */ + 0x5C5D, 0x5C5F, 0x5C62, 0x5C64, 0x5C67, 0x5C68, 0x5C69, 0x5C6A, /* 0xD0 */ + 0x5C6B, 0x5C6C, 0x5C6D, 0x5C70, 0x5C72, 0x5C73, 0x5C74, 0x5C75, /* 0xD0 */ + 0x5C76, 0x5C77, 0x5C78, 0x5C7B, 0x5C7C, 0x5C7D, 0x5C7E, 0x5C80, /* 0xE0 */ + 0x5C83, 0x5C84, 0x5C85, 0x5C86, 0x5C87, 0x5C89, 0x5C8A, 0x5C8B, /* 0xE0 */ + 0x5C8E, 0x5C8F, 0x5C92, 0x5C93, 0x5C95, 0x5C9D, 0x5C9E, 0x5C9F, /* 0xF0 */ + 0x5CA0, 0x5CA1, 0x5CA4, 0x5CA5, 0x5CA6, 0x5CA7, 0x5CA8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5CAA, 0x5CAE, 0x5CAF, 0x5CB0, 0x5CB2, 0x5CB4, 0x5CB6, 0x5CB9, /* 0x40 */ + 0x5CBA, 0x5CBB, 0x5CBC, 0x5CBE, 0x5CC0, 0x5CC2, 0x5CC3, 0x5CC5, /* 0x40 */ + 0x5CC6, 0x5CC7, 0x5CC8, 0x5CC9, 0x5CCA, 0x5CCC, 0x5CCD, 0x5CCE, /* 0x50 */ + 0x5CCF, 0x5CD0, 0x5CD1, 0x5CD3, 0x5CD4, 0x5CD5, 0x5CD6, 0x5CD7, /* 0x50 */ + 0x5CD8, 0x5CDA, 0x5CDB, 0x5CDC, 0x5CDD, 0x5CDE, 0x5CDF, 0x5CE0, /* 0x60 */ + 0x5CE2, 0x5CE3, 0x5CE7, 0x5CE9, 0x5CEB, 0x5CEC, 0x5CEE, 0x5CEF, /* 0x60 */ + 0x5CF1, 0x5CF2, 0x5CF3, 0x5CF4, 0x5CF5, 0x5CF6, 0x5CF7, 0x5CF8, /* 0x70 */ + 0x5CF9, 0x5CFA, 0x5CFC, 0x5CFD, 0x5CFE, 0x5CFF, 0x5D00, 0, /* 0x70 */ + 0x5D01, 0x5D04, 0x5D05, 0x5D08, 0x5D09, 0x5D0A, 0x5D0B, 0x5D0C, /* 0x80 */ + 0x5D0D, 0x5D0F, 0x5D10, 0x5D11, 0x5D12, 0x5D13, 0x5D15, 0x5D17, /* 0x80 */ + 0x5D18, 0x5D19, 0x5D1A, 0x5D1C, 0x5D1D, 0x5D1F, 0x5D20, 0x5D21, /* 0x90 */ + 0x5D22, 0x5D23, 0x5D25, 0x5D28, 0x5D2A, 0x5D2B, 0x5D2C, 0x5D2F, /* 0x90 */ + 0x5D30, 0x5D31, 0x5D32, 0x5D33, 0x5D35, 0x5D36, 0x5D37, 0x5D38, /* 0xA0 */ + 0x5D39, 0x5D3A, 0x5D3B, 0x5D3C, 0x5D3F, 0x5D40, 0x5D41, 0x5D42, /* 0xA0 */ + 0x5D43, 0x5D44, 0x5D45, 0x5D46, 0x5D48, 0x5D49, 0x5D4D, 0x5D4E, /* 0xB0 */ + 0x5D4F, 0x5D50, 0x5D51, 0x5D52, 0x5D53, 0x5D54, 0x5D55, 0x5D56, /* 0xB0 */ + 0x5D57, 0x5D59, 0x5D5A, 0x5D5C, 0x5D5E, 0x5D5F, 0x5D60, 0x5D61, /* 0xC0 */ + 0x5D62, 0x5D63, 0x5D64, 0x5D65, 0x5D66, 0x5D67, 0x5D68, 0x5D6A, /* 0xC0 */ + 0x5D6D, 0x5D6E, 0x5D70, 0x5D71, 0x5D72, 0x5D73, 0x5D75, 0x5D76, /* 0xD0 */ + 0x5D77, 0x5D78, 0x5D79, 0x5D7A, 0x5D7B, 0x5D7C, 0x5D7D, 0x5D7E, /* 0xD0 */ + 0x5D7F, 0x5D80, 0x5D81, 0x5D83, 0x5D84, 0x5D85, 0x5D86, 0x5D87, /* 0xE0 */ + 0x5D88, 0x5D89, 0x5D8A, 0x5D8B, 0x5D8C, 0x5D8D, 0x5D8E, 0x5D8F, /* 0xE0 */ + 0x5D90, 0x5D91, 0x5D92, 0x5D93, 0x5D94, 0x5D95, 0x5D96, 0x5D97, /* 0xF0 */ + 0x5D98, 0x5D9A, 0x5D9B, 0x5D9C, 0x5D9E, 0x5D9F, 0x5DA0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5DA1, 0x5DA2, 0x5DA3, 0x5DA4, 0x5DA5, 0x5DA6, 0x5DA7, 0x5DA8, /* 0x40 */ + 0x5DA9, 0x5DAA, 0x5DAB, 0x5DAC, 0x5DAD, 0x5DAE, 0x5DAF, 0x5DB0, /* 0x40 */ + 0x5DB1, 0x5DB2, 0x5DB3, 0x5DB4, 0x5DB5, 0x5DB6, 0x5DB8, 0x5DB9, /* 0x50 */ + 0x5DBA, 0x5DBB, 0x5DBC, 0x5DBD, 0x5DBE, 0x5DBF, 0x5DC0, 0x5DC1, /* 0x50 */ + 0x5DC2, 0x5DC3, 0x5DC4, 0x5DC6, 0x5DC7, 0x5DC8, 0x5DC9, 0x5DCA, /* 0x60 */ + 0x5DCB, 0x5DCC, 0x5DCE, 0x5DCF, 0x5DD0, 0x5DD1, 0x5DD2, 0x5DD3, /* 0x60 */ + 0x5DD4, 0x5DD5, 0x5DD6, 0x5DD7, 0x5DD8, 0x5DD9, 0x5DDA, 0x5DDC, /* 0x70 */ + 0x5DDF, 0x5DE0, 0x5DE3, 0x5DE4, 0x5DEA, 0x5DEC, 0x5DED, 0, /* 0x70 */ + 0x5DF0, 0x5DF5, 0x5DF6, 0x5DF8, 0x5DF9, 0x5DFA, 0x5DFB, 0x5DFC, /* 0x80 */ + 0x5DFF, 0x5E00, 0x5E04, 0x5E07, 0x5E09, 0x5E0A, 0x5E0B, 0x5E0D, /* 0x80 */ + 0x5E0E, 0x5E12, 0x5E13, 0x5E17, 0x5E1E, 0x5E1F, 0x5E20, 0x5E21, /* 0x90 */ + 0x5E22, 0x5E23, 0x5E24, 0x5E25, 0x5E28, 0x5E29, 0x5E2A, 0x5E2B, /* 0x90 */ + 0x5E2C, 0x5E2F, 0x5E30, 0x5E32, 0x5E33, 0x5E34, 0x5E35, 0x5E36, /* 0xA0 */ + 0x5E39, 0x5E3A, 0x5E3E, 0x5E3F, 0x5E40, 0x5E41, 0x5E43, 0x5E46, /* 0xA0 */ + 0x5E47, 0x5E48, 0x5E49, 0x5E4A, 0x5E4B, 0x5E4D, 0x5E4E, 0x5E4F, /* 0xB0 */ + 0x5E50, 0x5E51, 0x5E52, 0x5E53, 0x5E56, 0x5E57, 0x5E58, 0x5E59, /* 0xB0 */ + 0x5E5A, 0x5E5C, 0x5E5D, 0x5E5F, 0x5E60, 0x5E63, 0x5E64, 0x5E65, /* 0xC0 */ + 0x5E66, 0x5E67, 0x5E68, 0x5E69, 0x5E6A, 0x5E6B, 0x5E6C, 0x5E6D, /* 0xC0 */ + 0x5E6E, 0x5E6F, 0x5E70, 0x5E71, 0x5E75, 0x5E77, 0x5E79, 0x5E7E, /* 0xD0 */ + 0x5E81, 0x5E82, 0x5E83, 0x5E85, 0x5E88, 0x5E89, 0x5E8C, 0x5E8D, /* 0xD0 */ + 0x5E8E, 0x5E92, 0x5E98, 0x5E9B, 0x5E9D, 0x5EA1, 0x5EA2, 0x5EA3, /* 0xE0 */ + 0x5EA4, 0x5EA8, 0x5EA9, 0x5EAA, 0x5EAB, 0x5EAC, 0x5EAE, 0x5EAF, /* 0xE0 */ + 0x5EB0, 0x5EB1, 0x5EB2, 0x5EB4, 0x5EBA, 0x5EBB, 0x5EBC, 0x5EBD, /* 0xF0 */ + 0x5EBF, 0x5EC0, 0x5EC1, 0x5EC2, 0x5EC3, 0x5EC4, 0x5EC5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5EC6, 0x5EC7, 0x5EC8, 0x5ECB, 0x5ECC, 0x5ECD, 0x5ECE, 0x5ECF, /* 0x40 */ + 0x5ED0, 0x5ED4, 0x5ED5, 0x5ED7, 0x5ED8, 0x5ED9, 0x5EDA, 0x5EDC, /* 0x40 */ + 0x5EDD, 0x5EDE, 0x5EDF, 0x5EE0, 0x5EE1, 0x5EE2, 0x5EE3, 0x5EE4, /* 0x50 */ + 0x5EE5, 0x5EE6, 0x5EE7, 0x5EE9, 0x5EEB, 0x5EEC, 0x5EED, 0x5EEE, /* 0x50 */ + 0x5EEF, 0x5EF0, 0x5EF1, 0x5EF2, 0x5EF3, 0x5EF5, 0x5EF8, 0x5EF9, /* 0x60 */ + 0x5EFB, 0x5EFC, 0x5EFD, 0x5F05, 0x5F06, 0x5F07, 0x5F09, 0x5F0C, /* 0x60 */ + 0x5F0D, 0x5F0E, 0x5F10, 0x5F12, 0x5F14, 0x5F16, 0x5F19, 0x5F1A, /* 0x70 */ + 0x5F1C, 0x5F1D, 0x5F1E, 0x5F21, 0x5F22, 0x5F23, 0x5F24, 0, /* 0x70 */ + 0x5F28, 0x5F2B, 0x5F2C, 0x5F2E, 0x5F30, 0x5F32, 0x5F33, 0x5F34, /* 0x80 */ + 0x5F35, 0x5F36, 0x5F37, 0x5F38, 0x5F3B, 0x5F3D, 0x5F3E, 0x5F3F, /* 0x80 */ + 0x5F41, 0x5F42, 0x5F43, 0x5F44, 0x5F45, 0x5F46, 0x5F47, 0x5F48, /* 0x90 */ + 0x5F49, 0x5F4A, 0x5F4B, 0x5F4C, 0x5F4D, 0x5F4E, 0x5F4F, 0x5F51, /* 0x90 */ + 0x5F54, 0x5F59, 0x5F5A, 0x5F5B, 0x5F5C, 0x5F5E, 0x5F5F, 0x5F60, /* 0xA0 */ + 0x5F63, 0x5F65, 0x5F67, 0x5F68, 0x5F6B, 0x5F6E, 0x5F6F, 0x5F72, /* 0xA0 */ + 0x5F74, 0x5F75, 0x5F76, 0x5F78, 0x5F7A, 0x5F7D, 0x5F7E, 0x5F7F, /* 0xB0 */ + 0x5F83, 0x5F86, 0x5F8D, 0x5F8E, 0x5F8F, 0x5F91, 0x5F93, 0x5F94, /* 0xB0 */ + 0x5F96, 0x5F9A, 0x5F9B, 0x5F9D, 0x5F9E, 0x5F9F, 0x5FA0, 0x5FA2, /* 0xC0 */ + 0x5FA3, 0x5FA4, 0x5FA5, 0x5FA6, 0x5FA7, 0x5FA9, 0x5FAB, 0x5FAC, /* 0xC0 */ + 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB2, 0x5FB3, 0x5FB4, 0x5FB6, 0x5FB8, /* 0xD0 */ + 0x5FB9, 0x5FBA, 0x5FBB, 0x5FBE, 0x5FBF, 0x5FC0, 0x5FC1, 0x5FC2, /* 0xD0 */ + 0x5FC7, 0x5FC8, 0x5FCA, 0x5FCB, 0x5FCE, 0x5FD3, 0x5FD4, 0x5FD5, /* 0xE0 */ + 0x5FDA, 0x5FDB, 0x5FDC, 0x5FDE, 0x5FDF, 0x5FE2, 0x5FE3, 0x5FE5, /* 0xE0 */ + 0x5FE6, 0x5FE8, 0x5FE9, 0x5FEC, 0x5FEF, 0x5FF0, 0x5FF2, 0x5FF3, /* 0xF0 */ + 0x5FF4, 0x5FF6, 0x5FF7, 0x5FF9, 0x5FFA, 0x5FFC, 0x6007 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6008, 0x6009, 0x600B, 0x600C, 0x6010, 0x6011, 0x6013, 0x6017, /* 0x40 */ + 0x6018, 0x601A, 0x601E, 0x601F, 0x6022, 0x6023, 0x6024, 0x602C, /* 0x40 */ + 0x602D, 0x602E, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036, /* 0x50 */ + 0x6037, 0x6038, 0x6039, 0x603A, 0x603D, 0x603E, 0x6040, 0x6044, /* 0x50 */ + 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604A, 0x604C, 0x604E, /* 0x60 */ + 0x604F, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605B, /* 0x60 */ + 0x605C, 0x605E, 0x605F, 0x6060, 0x6061, 0x6065, 0x6066, 0x606E, /* 0x70 */ + 0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607E, 0x6080, 0, /* 0x70 */ + 0x6081, 0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608A, 0x608B, /* 0x80 */ + 0x608E, 0x608F, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, /* 0x80 */ + 0x6099, 0x609C, 0x609E, 0x60A1, 0x60A2, 0x60A4, 0x60A5, 0x60A7, /* 0x90 */ + 0x60A9, 0x60AA, 0x60AE, 0x60B0, 0x60B3, 0x60B5, 0x60B6, 0x60B7, /* 0x90 */ + 0x60B9, 0x60BA, 0x60BD, 0x60BE, 0x60BF, 0x60C0, 0x60C1, 0x60C2, /* 0xA0 */ + 0x60C3, 0x60C4, 0x60C7, 0x60C8, 0x60C9, 0x60CC, 0x60CD, 0x60CE, /* 0xA0 */ + 0x60CF, 0x60D0, 0x60D2, 0x60D3, 0x60D4, 0x60D6, 0x60D7, 0x60D9, /* 0xB0 */ + 0x60DB, 0x60DE, 0x60E1, 0x60E2, 0x60E3, 0x60E4, 0x60E5, 0x60EA, /* 0xB0 */ + 0x60F1, 0x60F2, 0x60F5, 0x60F7, 0x60F8, 0x60FB, 0x60FC, 0x60FD, /* 0xC0 */ + 0x60FE, 0x60FF, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610A, /* 0xC0 */ + 0x610B, 0x610C, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, /* 0xD0 */ + 0x6117, 0x6118, 0x6119, 0x611B, 0x611C, 0x611D, 0x611E, 0x6121, /* 0xD0 */ + 0x6122, 0x6125, 0x6128, 0x6129, 0x612A, 0x612C, 0x612D, 0x612E, /* 0xE0 */ + 0x612F, 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, /* 0xE0 */ + 0x6137, 0x6138, 0x6139, 0x613A, 0x613B, 0x613C, 0x613D, 0x613E, /* 0xF0 */ + 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6147, 0x6149, 0x614B, 0x614D, 0x614F, 0x6150, 0x6152, 0x6153, /* 0x40 */ + 0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615A, 0x615B, 0x615C, /* 0x40 */ + 0x615E, 0x615F, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166, /* 0x50 */ + 0x6169, 0x616A, 0x616B, 0x616C, 0x616D, 0x616E, 0x616F, 0x6171, /* 0x50 */ + 0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617A, 0x617B, /* 0x60 */ + 0x617C, 0x617D, 0x617E, 0x617F, 0x6180, 0x6181, 0x6182, 0x6183, /* 0x60 */ + 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618A, 0x618C, /* 0x70 */ + 0x618D, 0x618F, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0, /* 0x70 */ + 0x6196, 0x6197, 0x6198, 0x6199, 0x619A, 0x619B, 0x619C, 0x619E, /* 0x80 */ + 0x619F, 0x61A0, 0x61A1, 0x61A2, 0x61A3, 0x61A4, 0x61A5, 0x61A6, /* 0x80 */ + 0x61AA, 0x61AB, 0x61AD, 0x61AE, 0x61AF, 0x61B0, 0x61B1, 0x61B2, /* 0x90 */ + 0x61B3, 0x61B4, 0x61B5, 0x61B6, 0x61B8, 0x61B9, 0x61BA, 0x61BB, /* 0x90 */ + 0x61BC, 0x61BD, 0x61BF, 0x61C0, 0x61C1, 0x61C3, 0x61C4, 0x61C5, /* 0xA0 */ + 0x61C6, 0x61C7, 0x61C9, 0x61CC, 0x61CD, 0x61CE, 0x61CF, 0x61D0, /* 0xA0 */ + 0x61D3, 0x61D5, 0x61D6, 0x61D7, 0x61D8, 0x61D9, 0x61DA, 0x61DB, /* 0xB0 */ + 0x61DC, 0x61DD, 0x61DE, 0x61DF, 0x61E0, 0x61E1, 0x61E2, 0x61E3, /* 0xB0 */ + 0x61E4, 0x61E5, 0x61E7, 0x61E8, 0x61E9, 0x61EA, 0x61EB, 0x61EC, /* 0xC0 */ + 0x61ED, 0x61EE, 0x61EF, 0x61F0, 0x61F1, 0x61F2, 0x61F3, 0x61F4, /* 0xC0 */ + 0x61F6, 0x61F7, 0x61F8, 0x61F9, 0x61FA, 0x61FB, 0x61FC, 0x61FD, /* 0xD0 */ + 0x61FE, 0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, /* 0xD0 */ + 0x6209, 0x6213, 0x6214, 0x6219, 0x621C, 0x621D, 0x621E, 0x6220, /* 0xE0 */ + 0x6223, 0x6226, 0x6227, 0x6228, 0x6229, 0x622B, 0x622D, 0x622F, /* 0xE0 */ + 0x6230, 0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623A, /* 0xF0 */ + 0x623B, 0x623C, 0x6242, 0x6244, 0x6245, 0x6246, 0x624A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x624F, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625A, 0x625C, /* 0x40 */ + 0x625D, 0x625E, 0x625F, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265, /* 0x40 */ + 0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627A, /* 0x50 */ + 0x627B, 0x627D, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287, /* 0x50 */ + 0x6288, 0x628B, 0x628C, 0x628D, 0x628E, 0x628F, 0x6290, 0x6294, /* 0x60 */ + 0x6299, 0x629C, 0x629D, 0x629E, 0x62A3, 0x62A6, 0x62A7, 0x62A9, /* 0x60 */ + 0x62AA, 0x62AD, 0x62AE, 0x62AF, 0x62B0, 0x62B2, 0x62B3, 0x62B4, /* 0x70 */ + 0x62B6, 0x62B7, 0x62B8, 0x62BA, 0x62BE, 0x62C0, 0x62C1, 0, /* 0x70 */ + 0x62C3, 0x62CB, 0x62CF, 0x62D1, 0x62D5, 0x62DD, 0x62DE, 0x62E0, /* 0x80 */ + 0x62E1, 0x62E4, 0x62EA, 0x62EB, 0x62F0, 0x62F2, 0x62F5, 0x62F8, /* 0x80 */ + 0x62F9, 0x62FA, 0x62FB, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, /* 0x90 */ + 0x630A, 0x630B, 0x630C, 0x630D, 0x630F, 0x6310, 0x6312, 0x6313, /* 0x90 */ + 0x6314, 0x6315, 0x6317, 0x6318, 0x6319, 0x631C, 0x6326, 0x6327, /* 0xA0 */ + 0x6329, 0x632C, 0x632D, 0x632E, 0x6330, 0x6331, 0x6333, 0x6334, /* 0xA0 */ + 0x6335, 0x6336, 0x6337, 0x6338, 0x633B, 0x633C, 0x633E, 0x633F, /* 0xB0 */ + 0x6340, 0x6341, 0x6344, 0x6347, 0x6348, 0x634A, 0x6351, 0x6352, /* 0xB0 */ + 0x6353, 0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635A, 0x635B, /* 0xC0 */ + 0x635C, 0x635D, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636A, /* 0xC0 */ + 0x636B, 0x636C, 0x636F, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, /* 0xD0 */ + 0x6378, 0x6379, 0x637C, 0x637D, 0x637E, 0x637F, 0x6381, 0x6383, /* 0xD0 */ + 0x6384, 0x6385, 0x6386, 0x638B, 0x638D, 0x6391, 0x6393, 0x6394, /* 0xE0 */ + 0x6395, 0x6397, 0x6399, 0x639A, 0x639B, 0x639C, 0x639D, 0x639E, /* 0xE0 */ + 0x639F, 0x63A1, 0x63A4, 0x63A6, 0x63AB, 0x63AF, 0x63B1, 0x63B2, /* 0xF0 */ + 0x63B5, 0x63B6, 0x63B9, 0x63BB, 0x63BD, 0x63BF, 0x63C0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x63C1, 0x63C2, 0x63C3, 0x63C5, 0x63C7, 0x63C8, 0x63CA, 0x63CB, /* 0x40 */ + 0x63CC, 0x63D1, 0x63D3, 0x63D4, 0x63D5, 0x63D7, 0x63D8, 0x63D9, /* 0x40 */ + 0x63DA, 0x63DB, 0x63DC, 0x63DD, 0x63DF, 0x63E2, 0x63E4, 0x63E5, /* 0x50 */ + 0x63E6, 0x63E7, 0x63E8, 0x63EB, 0x63EC, 0x63EE, 0x63EF, 0x63F0, /* 0x50 */ + 0x63F1, 0x63F3, 0x63F5, 0x63F7, 0x63F9, 0x63FA, 0x63FB, 0x63FC, /* 0x60 */ + 0x63FE, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640A, /* 0x60 */ + 0x640D, 0x640E, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418, /* 0x70 */ + 0x6419, 0x641A, 0x641D, 0x641F, 0x6422, 0x6423, 0x6424, 0, /* 0x70 */ + 0x6425, 0x6427, 0x6428, 0x6429, 0x642B, 0x642E, 0x642F, 0x6430, /* 0x80 */ + 0x6431, 0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, /* 0x80 */ + 0x643B, 0x643C, 0x643E, 0x6440, 0x6442, 0x6443, 0x6449, 0x644B, /* 0x90 */ + 0x644C, 0x644D, 0x644E, 0x644F, 0x6450, 0x6451, 0x6453, 0x6455, /* 0x90 */ + 0x6456, 0x6457, 0x6459, 0x645A, 0x645B, 0x645C, 0x645D, 0x645F, /* 0xA0 */ + 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, /* 0xA0 */ + 0x646A, 0x646B, 0x646C, 0x646E, 0x646F, 0x6470, 0x6471, 0x6472, /* 0xB0 */ + 0x6473, 0x6474, 0x6475, 0x6476, 0x6477, 0x647B, 0x647C, 0x647D, /* 0xB0 */ + 0x647E, 0x647F, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, /* 0xC0 */ + 0x648A, 0x648B, 0x648C, 0x648D, 0x648E, 0x648F, 0x6490, 0x6493, /* 0xC0 */ + 0x6494, 0x6497, 0x6498, 0x649A, 0x649B, 0x649C, 0x649D, 0x649F, /* 0xD0 */ + 0x64A0, 0x64A1, 0x64A2, 0x64A3, 0x64A5, 0x64A6, 0x64A7, 0x64A8, /* 0xD0 */ + 0x64AA, 0x64AB, 0x64AF, 0x64B1, 0x64B2, 0x64B3, 0x64B4, 0x64B6, /* 0xE0 */ + 0x64B9, 0x64BB, 0x64BD, 0x64BE, 0x64BF, 0x64C1, 0x64C3, 0x64C4, /* 0xE0 */ + 0x64C6, 0x64C7, 0x64C8, 0x64C9, 0x64CA, 0x64CB, 0x64CC, 0x64CF, /* 0xF0 */ + 0x64D1, 0x64D3, 0x64D4, 0x64D5, 0x64D6, 0x64D9, 0x64DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x64DB, 0x64DC, 0x64DD, 0x64DF, 0x64E0, 0x64E1, 0x64E3, 0x64E5, /* 0x40 */ + 0x64E7, 0x64E8, 0x64E9, 0x64EA, 0x64EB, 0x64EC, 0x64ED, 0x64EE, /* 0x40 */ + 0x64EF, 0x64F0, 0x64F1, 0x64F2, 0x64F3, 0x64F4, 0x64F5, 0x64F6, /* 0x50 */ + 0x64F7, 0x64F8, 0x64F9, 0x64FA, 0x64FB, 0x64FC, 0x64FD, 0x64FE, /* 0x50 */ + 0x64FF, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, /* 0x60 */ + 0x6508, 0x650A, 0x650B, 0x650C, 0x650D, 0x650E, 0x650F, 0x6510, /* 0x60 */ + 0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651A, /* 0x70 */ + 0x651B, 0x651C, 0x651D, 0x651E, 0x651F, 0x6520, 0x6521, 0, /* 0x70 */ + 0x6522, 0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652A, /* 0x80 */ + 0x652C, 0x652D, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653A, /* 0x80 */ + 0x653C, 0x653D, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, /* 0x90 */ + 0x6547, 0x654A, 0x654B, 0x654D, 0x654E, 0x6550, 0x6552, 0x6553, /* 0x90 */ + 0x6554, 0x6557, 0x6558, 0x655A, 0x655C, 0x655F, 0x6560, 0x6561, /* 0xA0 */ + 0x6564, 0x6565, 0x6567, 0x6568, 0x6569, 0x656A, 0x656D, 0x656E, /* 0xA0 */ + 0x656F, 0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657A, /* 0xB0 */ + 0x657B, 0x657C, 0x657D, 0x657E, 0x657F, 0x6580, 0x6581, 0x6582, /* 0xB0 */ + 0x6583, 0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658A, 0x658D, /* 0xC0 */ + 0x658E, 0x658F, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659A, /* 0xC0 */ + 0x659D, 0x659E, 0x65A0, 0x65A2, 0x65A3, 0x65A6, 0x65A8, 0x65AA, /* 0xD0 */ + 0x65AC, 0x65AE, 0x65B1, 0x65B2, 0x65B3, 0x65B4, 0x65B5, 0x65B6, /* 0xD0 */ + 0x65B7, 0x65B8, 0x65BA, 0x65BB, 0x65BE, 0x65BF, 0x65C0, 0x65C2, /* 0xE0 */ + 0x65C7, 0x65C8, 0x65C9, 0x65CA, 0x65CD, 0x65D0, 0x65D1, 0x65D3, /* 0xE0 */ + 0x65D4, 0x65D5, 0x65D8, 0x65D9, 0x65DA, 0x65DB, 0x65DC, 0x65DD, /* 0xF0 */ + 0x65DE, 0x65DF, 0x65E1, 0x65E3, 0x65E4, 0x65EA, 0x65EB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x65F2, 0x65F3, 0x65F4, 0x65F5, 0x65F8, 0x65F9, 0x65FB, 0x65FC, /* 0x40 */ + 0x65FD, 0x65FE, 0x65FF, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608, /* 0x40 */ + 0x6609, 0x660B, 0x660D, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617, /* 0x50 */ + 0x6618, 0x661A, 0x661B, 0x661C, 0x661E, 0x6621, 0x6622, 0x6623, /* 0x50 */ + 0x6624, 0x6626, 0x6629, 0x662A, 0x662B, 0x662C, 0x662E, 0x6630, /* 0x60 */ + 0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663A, 0x663B, 0x663D, /* 0x60 */ + 0x663F, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, /* 0x70 */ + 0x6649, 0x664A, 0x664D, 0x664E, 0x6650, 0x6651, 0x6658, 0, /* 0x70 */ + 0x6659, 0x665B, 0x665C, 0x665D, 0x665E, 0x6660, 0x6662, 0x6663, /* 0x80 */ + 0x6665, 0x6667, 0x6669, 0x666A, 0x666B, 0x666C, 0x666D, 0x6671, /* 0x80 */ + 0x6672, 0x6673, 0x6675, 0x6678, 0x6679, 0x667B, 0x667C, 0x667D, /* 0x90 */ + 0x667F, 0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, /* 0x90 */ + 0x668A, 0x668B, 0x668D, 0x668E, 0x668F, 0x6690, 0x6692, 0x6693, /* 0xA0 */ + 0x6694, 0x6695, 0x6698, 0x6699, 0x669A, 0x669B, 0x669C, 0x669E, /* 0xA0 */ + 0x669F, 0x66A0, 0x66A1, 0x66A2, 0x66A3, 0x66A4, 0x66A5, 0x66A6, /* 0xB0 */ + 0x66A9, 0x66AA, 0x66AB, 0x66AC, 0x66AD, 0x66AF, 0x66B0, 0x66B1, /* 0xB0 */ + 0x66B2, 0x66B3, 0x66B5, 0x66B6, 0x66B7, 0x66B8, 0x66BA, 0x66BB, /* 0xC0 */ + 0x66BC, 0x66BD, 0x66BF, 0x66C0, 0x66C1, 0x66C2, 0x66C3, 0x66C4, /* 0xC0 */ + 0x66C5, 0x66C6, 0x66C7, 0x66C8, 0x66C9, 0x66CA, 0x66CB, 0x66CC, /* 0xD0 */ + 0x66CD, 0x66CE, 0x66CF, 0x66D0, 0x66D1, 0x66D2, 0x66D3, 0x66D4, /* 0xD0 */ + 0x66D5, 0x66D6, 0x66D7, 0x66D8, 0x66DA, 0x66DE, 0x66DF, 0x66E0, /* 0xE0 */ + 0x66E1, 0x66E2, 0x66E3, 0x66E4, 0x66E5, 0x66E7, 0x66E8, 0x66EA, /* 0xE0 */ + 0x66EB, 0x66EC, 0x66ED, 0x66EE, 0x66EF, 0x66F1, 0x66F5, 0x66F6, /* 0xF0 */ + 0x66F8, 0x66FA, 0x66FB, 0x66FD, 0x6701, 0x6702, 0x6703 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6704, 0x6705, 0x6706, 0x6707, 0x670C, 0x670E, 0x670F, 0x6711, /* 0x40 */ + 0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671A, 0x671C, 0x671E, /* 0x40 */ + 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729, /* 0x50 */ + 0x672E, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739, /* 0x50 */ + 0x673B, 0x673C, 0x673E, 0x673F, 0x6741, 0x6744, 0x6745, 0x6747, /* 0x60 */ + 0x674A, 0x674B, 0x674D, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758, /* 0x60 */ + 0x6759, 0x675A, 0x675B, 0x675D, 0x6762, 0x6763, 0x6764, 0x6766, /* 0x70 */ + 0x6767, 0x676B, 0x676C, 0x676E, 0x6771, 0x6774, 0x6776, 0, /* 0x70 */ + 0x6778, 0x6779, 0x677A, 0x677B, 0x677D, 0x6780, 0x6782, 0x6783, /* 0x80 */ + 0x6785, 0x6786, 0x6788, 0x678A, 0x678C, 0x678D, 0x678E, 0x678F, /* 0x80 */ + 0x6791, 0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679B, 0x679F, /* 0x90 */ + 0x67A0, 0x67A1, 0x67A4, 0x67A6, 0x67A9, 0x67AC, 0x67AE, 0x67B1, /* 0x90 */ + 0x67B2, 0x67B4, 0x67B9, 0x67BA, 0x67BB, 0x67BC, 0x67BD, 0x67BE, /* 0xA0 */ + 0x67BF, 0x67C0, 0x67C2, 0x67C5, 0x67C6, 0x67C7, 0x67C8, 0x67C9, /* 0xA0 */ + 0x67CA, 0x67CB, 0x67CC, 0x67CD, 0x67CE, 0x67D5, 0x67D6, 0x67D7, /* 0xB0 */ + 0x67DB, 0x67DF, 0x67E1, 0x67E3, 0x67E4, 0x67E6, 0x67E7, 0x67E8, /* 0xB0 */ + 0x67EA, 0x67EB, 0x67ED, 0x67EE, 0x67F2, 0x67F5, 0x67F6, 0x67F7, /* 0xC0 */ + 0x67F8, 0x67F9, 0x67FA, 0x67FB, 0x67FC, 0x67FE, 0x6801, 0x6802, /* 0xC0 */ + 0x6803, 0x6804, 0x6806, 0x680D, 0x6810, 0x6812, 0x6814, 0x6815, /* 0xD0 */ + 0x6818, 0x6819, 0x681A, 0x681B, 0x681C, 0x681E, 0x681F, 0x6820, /* 0xD0 */ + 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682B, /* 0xE0 */ + 0x682C, 0x682D, 0x682E, 0x682F, 0x6830, 0x6831, 0x6834, 0x6835, /* 0xE0 */ + 0x6836, 0x683A, 0x683B, 0x683F, 0x6847, 0x684B, 0x684D, 0x684F, /* 0xF0 */ + 0x6852, 0x6856, 0x6857, 0x6858, 0x6859, 0x685A, 0x685B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x685C, 0x685D, 0x685E, 0x685F, 0x686A, 0x686C, 0x686D, 0x686E, /* 0x40 */ + 0x686F, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879, /* 0x40 */ + 0x687A, 0x687B, 0x687C, 0x687D, 0x687E, 0x687F, 0x6880, 0x6882, /* 0x50 */ + 0x6884, 0x6887, 0x6888, 0x6889, 0x688A, 0x688B, 0x688C, 0x688D, /* 0x50 */ + 0x688E, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898, /* 0x60 */ + 0x6899, 0x689A, 0x689B, 0x689C, 0x689D, 0x689E, 0x689F, 0x68A0, /* 0x60 */ + 0x68A1, 0x68A3, 0x68A4, 0x68A5, 0x68A9, 0x68AA, 0x68AB, 0x68AC, /* 0x70 */ + 0x68AE, 0x68B1, 0x68B2, 0x68B4, 0x68B6, 0x68B7, 0x68B8, 0, /* 0x70 */ + 0x68B9, 0x68BA, 0x68BB, 0x68BC, 0x68BD, 0x68BE, 0x68BF, 0x68C1, /* 0x80 */ + 0x68C3, 0x68C4, 0x68C5, 0x68C6, 0x68C7, 0x68C8, 0x68CA, 0x68CC, /* 0x80 */ + 0x68CE, 0x68CF, 0x68D0, 0x68D1, 0x68D3, 0x68D4, 0x68D6, 0x68D7, /* 0x90 */ + 0x68D9, 0x68DB, 0x68DC, 0x68DD, 0x68DE, 0x68DF, 0x68E1, 0x68E2, /* 0x90 */ + 0x68E4, 0x68E5, 0x68E6, 0x68E7, 0x68E8, 0x68E9, 0x68EA, 0x68EB, /* 0xA0 */ + 0x68EC, 0x68ED, 0x68EF, 0x68F2, 0x68F3, 0x68F4, 0x68F6, 0x68F7, /* 0xA0 */ + 0x68F8, 0x68FB, 0x68FD, 0x68FE, 0x68FF, 0x6900, 0x6902, 0x6903, /* 0xB0 */ + 0x6904, 0x6906, 0x6907, 0x6908, 0x6909, 0x690A, 0x690C, 0x690F, /* 0xB0 */ + 0x6911, 0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, /* 0xC0 */ + 0x691A, 0x691B, 0x691C, 0x691D, 0x691E, 0x6921, 0x6922, 0x6923, /* 0xC0 */ + 0x6925, 0x6926, 0x6927, 0x6928, 0x6929, 0x692A, 0x692B, 0x692C, /* 0xD0 */ + 0x692E, 0x692F, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, /* 0xD0 */ + 0x6938, 0x693A, 0x693B, 0x693C, 0x693E, 0x6940, 0x6941, 0x6943, /* 0xE0 */ + 0x6944, 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694A, 0x694B, /* 0xE0 */ + 0x694C, 0x694D, 0x694E, 0x694F, 0x6950, 0x6951, 0x6952, 0x6953, /* 0xF0 */ + 0x6955, 0x6956, 0x6958, 0x6959, 0x695B, 0x695C, 0x695F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696A, /* 0x40 */ + 0x696C, 0x696D, 0x696F, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975, /* 0x40 */ + 0x6976, 0x697A, 0x697B, 0x697D, 0x697E, 0x697F, 0x6981, 0x6983, /* 0x50 */ + 0x6985, 0x698A, 0x698B, 0x698C, 0x698E, 0x698F, 0x6990, 0x6991, /* 0x50 */ + 0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699A, 0x699D, 0x699E, /* 0x60 */ + 0x699F, 0x69A0, 0x69A1, 0x69A2, 0x69A3, 0x69A4, 0x69A5, 0x69A6, /* 0x60 */ + 0x69A9, 0x69AA, 0x69AC, 0x69AE, 0x69AF, 0x69B0, 0x69B2, 0x69B3, /* 0x70 */ + 0x69B5, 0x69B6, 0x69B8, 0x69B9, 0x69BA, 0x69BC, 0x69BD, 0, /* 0x70 */ + 0x69BE, 0x69BF, 0x69C0, 0x69C2, 0x69C3, 0x69C4, 0x69C5, 0x69C6, /* 0x80 */ + 0x69C7, 0x69C8, 0x69C9, 0x69CB, 0x69CD, 0x69CF, 0x69D1, 0x69D2, /* 0x80 */ + 0x69D3, 0x69D5, 0x69D6, 0x69D7, 0x69D8, 0x69D9, 0x69DA, 0x69DC, /* 0x90 */ + 0x69DD, 0x69DE, 0x69E1, 0x69E2, 0x69E3, 0x69E4, 0x69E5, 0x69E6, /* 0x90 */ + 0x69E7, 0x69E8, 0x69E9, 0x69EA, 0x69EB, 0x69EC, 0x69EE, 0x69EF, /* 0xA0 */ + 0x69F0, 0x69F1, 0x69F3, 0x69F4, 0x69F5, 0x69F6, 0x69F7, 0x69F8, /* 0xA0 */ + 0x69F9, 0x69FA, 0x69FB, 0x69FC, 0x69FE, 0x6A00, 0x6A01, 0x6A02, /* 0xB0 */ + 0x6A03, 0x6A04, 0x6A05, 0x6A06, 0x6A07, 0x6A08, 0x6A09, 0x6A0B, /* 0xB0 */ + 0x6A0C, 0x6A0D, 0x6A0E, 0x6A0F, 0x6A10, 0x6A11, 0x6A12, 0x6A13, /* 0xC0 */ + 0x6A14, 0x6A15, 0x6A16, 0x6A19, 0x6A1A, 0x6A1B, 0x6A1C, 0x6A1D, /* 0xC0 */ + 0x6A1E, 0x6A20, 0x6A22, 0x6A23, 0x6A24, 0x6A25, 0x6A26, 0x6A27, /* 0xD0 */ + 0x6A29, 0x6A2B, 0x6A2C, 0x6A2D, 0x6A2E, 0x6A30, 0x6A32, 0x6A33, /* 0xD0 */ + 0x6A34, 0x6A36, 0x6A37, 0x6A38, 0x6A39, 0x6A3A, 0x6A3B, 0x6A3C, /* 0xE0 */ + 0x6A3F, 0x6A40, 0x6A41, 0x6A42, 0x6A43, 0x6A45, 0x6A46, 0x6A48, /* 0xE0 */ + 0x6A49, 0x6A4A, 0x6A4B, 0x6A4C, 0x6A4D, 0x6A4E, 0x6A4F, 0x6A51, /* 0xF0 */ + 0x6A52, 0x6A53, 0x6A54, 0x6A55, 0x6A56, 0x6A57, 0x6A5A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A5C, 0x6A5D, 0x6A5E, 0x6A5F, 0x6A60, 0x6A62, 0x6A63, 0x6A64, /* 0x40 */ + 0x6A66, 0x6A67, 0x6A68, 0x6A69, 0x6A6A, 0x6A6B, 0x6A6C, 0x6A6D, /* 0x40 */ + 0x6A6E, 0x6A6F, 0x6A70, 0x6A72, 0x6A73, 0x6A74, 0x6A75, 0x6A76, /* 0x50 */ + 0x6A77, 0x6A78, 0x6A7A, 0x6A7B, 0x6A7D, 0x6A7E, 0x6A7F, 0x6A81, /* 0x50 */ + 0x6A82, 0x6A83, 0x6A85, 0x6A86, 0x6A87, 0x6A88, 0x6A89, 0x6A8A, /* 0x60 */ + 0x6A8B, 0x6A8C, 0x6A8D, 0x6A8F, 0x6A92, 0x6A93, 0x6A94, 0x6A95, /* 0x60 */ + 0x6A96, 0x6A98, 0x6A99, 0x6A9A, 0x6A9B, 0x6A9C, 0x6A9D, 0x6A9E, /* 0x70 */ + 0x6A9F, 0x6AA1, 0x6AA2, 0x6AA3, 0x6AA4, 0x6AA5, 0x6AA6, 0, /* 0x70 */ + 0x6AA7, 0x6AA8, 0x6AAA, 0x6AAD, 0x6AAE, 0x6AAF, 0x6AB0, 0x6AB1, /* 0x80 */ + 0x6AB2, 0x6AB3, 0x6AB4, 0x6AB5, 0x6AB6, 0x6AB7, 0x6AB8, 0x6AB9, /* 0x80 */ + 0x6ABA, 0x6ABB, 0x6ABC, 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC0, 0x6AC1, /* 0x90 */ + 0x6AC2, 0x6AC3, 0x6AC4, 0x6AC5, 0x6AC6, 0x6AC7, 0x6AC8, 0x6AC9, /* 0x90 */ + 0x6ACA, 0x6ACB, 0x6ACC, 0x6ACD, 0x6ACE, 0x6ACF, 0x6AD0, 0x6AD1, /* 0xA0 */ + 0x6AD2, 0x6AD3, 0x6AD4, 0x6AD5, 0x6AD6, 0x6AD7, 0x6AD8, 0x6AD9, /* 0xA0 */ + 0x6ADA, 0x6ADB, 0x6ADC, 0x6ADD, 0x6ADE, 0x6ADF, 0x6AE0, 0x6AE1, /* 0xB0 */ + 0x6AE2, 0x6AE3, 0x6AE4, 0x6AE5, 0x6AE6, 0x6AE7, 0x6AE8, 0x6AE9, /* 0xB0 */ + 0x6AEA, 0x6AEB, 0x6AEC, 0x6AED, 0x6AEE, 0x6AEF, 0x6AF0, 0x6AF1, /* 0xC0 */ + 0x6AF2, 0x6AF3, 0x6AF4, 0x6AF5, 0x6AF6, 0x6AF7, 0x6AF8, 0x6AF9, /* 0xC0 */ + 0x6AFA, 0x6AFB, 0x6AFC, 0x6AFD, 0x6AFE, 0x6AFF, 0x6B00, 0x6B01, /* 0xD0 */ + 0x6B02, 0x6B03, 0x6B04, 0x6B05, 0x6B06, 0x6B07, 0x6B08, 0x6B09, /* 0xD0 */ + 0x6B0A, 0x6B0B, 0x6B0C, 0x6B0D, 0x6B0E, 0x6B0F, 0x6B10, 0x6B11, /* 0xE0 */ + 0x6B12, 0x6B13, 0x6B14, 0x6B15, 0x6B16, 0x6B17, 0x6B18, 0x6B19, /* 0xE0 */ + 0x6B1A, 0x6B1B, 0x6B1C, 0x6B1D, 0x6B1E, 0x6B1F, 0x6B25, 0x6B26, /* 0xF0 */ + 0x6B28, 0x6B29, 0x6B2A, 0x6B2B, 0x6B2C, 0x6B2D, 0x6B2E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B2F, 0x6B30, 0x6B31, 0x6B33, 0x6B34, 0x6B35, 0x6B36, 0x6B38, /* 0x40 */ + 0x6B3B, 0x6B3C, 0x6B3D, 0x6B3F, 0x6B40, 0x6B41, 0x6B42, 0x6B44, /* 0x40 */ + 0x6B45, 0x6B48, 0x6B4A, 0x6B4B, 0x6B4D, 0x6B4E, 0x6B4F, 0x6B50, /* 0x50 */ + 0x6B51, 0x6B52, 0x6B53, 0x6B54, 0x6B55, 0x6B56, 0x6B57, 0x6B58, /* 0x50 */ + 0x6B5A, 0x6B5B, 0x6B5C, 0x6B5D, 0x6B5E, 0x6B5F, 0x6B60, 0x6B61, /* 0x60 */ + 0x6B68, 0x6B69, 0x6B6B, 0x6B6C, 0x6B6D, 0x6B6E, 0x6B6F, 0x6B70, /* 0x60 */ + 0x6B71, 0x6B72, 0x6B73, 0x6B74, 0x6B75, 0x6B76, 0x6B77, 0x6B78, /* 0x70 */ + 0x6B7A, 0x6B7D, 0x6B7E, 0x6B7F, 0x6B80, 0x6B85, 0x6B88, 0, /* 0x70 */ + 0x6B8C, 0x6B8E, 0x6B8F, 0x6B90, 0x6B91, 0x6B94, 0x6B95, 0x6B97, /* 0x80 */ + 0x6B98, 0x6B99, 0x6B9C, 0x6B9D, 0x6B9E, 0x6B9F, 0x6BA0, 0x6BA2, /* 0x80 */ + 0x6BA3, 0x6BA4, 0x6BA5, 0x6BA6, 0x6BA7, 0x6BA8, 0x6BA9, 0x6BAB, /* 0x90 */ + 0x6BAC, 0x6BAD, 0x6BAE, 0x6BAF, 0x6BB0, 0x6BB1, 0x6BB2, 0x6BB6, /* 0x90 */ + 0x6BB8, 0x6BB9, 0x6BBA, 0x6BBB, 0x6BBC, 0x6BBD, 0x6BBE, 0x6BC0, /* 0xA0 */ + 0x6BC3, 0x6BC4, 0x6BC6, 0x6BC7, 0x6BC8, 0x6BC9, 0x6BCA, 0x6BCC, /* 0xA0 */ + 0x6BCE, 0x6BD0, 0x6BD1, 0x6BD8, 0x6BDA, 0x6BDC, 0x6BDD, 0x6BDE, /* 0xB0 */ + 0x6BDF, 0x6BE0, 0x6BE2, 0x6BE3, 0x6BE4, 0x6BE5, 0x6BE6, 0x6BE7, /* 0xB0 */ + 0x6BE8, 0x6BE9, 0x6BEC, 0x6BED, 0x6BEE, 0x6BF0, 0x6BF1, 0x6BF2, /* 0xC0 */ + 0x6BF4, 0x6BF6, 0x6BF7, 0x6BF8, 0x6BFA, 0x6BFB, 0x6BFC, 0x6BFE, /* 0xC0 */ + 0x6BFF, 0x6C00, 0x6C01, 0x6C02, 0x6C03, 0x6C04, 0x6C08, 0x6C09, /* 0xD0 */ + 0x6C0A, 0x6C0B, 0x6C0C, 0x6C0E, 0x6C12, 0x6C17, 0x6C1C, 0x6C1D, /* 0xD0 */ + 0x6C1E, 0x6C20, 0x6C23, 0x6C25, 0x6C2B, 0x6C2C, 0x6C2D, 0x6C31, /* 0xE0 */ + 0x6C33, 0x6C36, 0x6C37, 0x6C39, 0x6C3A, 0x6C3B, 0x6C3C, 0x6C3E, /* 0xE0 */ + 0x6C3F, 0x6C43, 0x6C44, 0x6C45, 0x6C48, 0x6C4B, 0x6C4C, 0x6C4D, /* 0xF0 */ + 0x6C4E, 0x6C4F, 0x6C51, 0x6C52, 0x6C53, 0x6C56, 0x6C58 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C59, 0x6C5A, 0x6C62, 0x6C63, 0x6C65, 0x6C66, 0x6C67, 0x6C6B, /* 0x40 */ + 0x6C6C, 0x6C6D, 0x6C6E, 0x6C6F, 0x6C71, 0x6C73, 0x6C75, 0x6C77, /* 0x40 */ + 0x6C78, 0x6C7A, 0x6C7B, 0x6C7C, 0x6C7F, 0x6C80, 0x6C84, 0x6C87, /* 0x50 */ + 0x6C8A, 0x6C8B, 0x6C8D, 0x6C8E, 0x6C91, 0x6C92, 0x6C95, 0x6C96, /* 0x50 */ + 0x6C97, 0x6C98, 0x6C9A, 0x6C9C, 0x6C9D, 0x6C9E, 0x6CA0, 0x6CA2, /* 0x60 */ + 0x6CA8, 0x6CAC, 0x6CAF, 0x6CB0, 0x6CB4, 0x6CB5, 0x6CB6, 0x6CB7, /* 0x60 */ + 0x6CBA, 0x6CC0, 0x6CC1, 0x6CC2, 0x6CC3, 0x6CC6, 0x6CC7, 0x6CC8, /* 0x70 */ + 0x6CCB, 0x6CCD, 0x6CCE, 0x6CCF, 0x6CD1, 0x6CD2, 0x6CD8, 0, /* 0x70 */ + 0x6CD9, 0x6CDA, 0x6CDC, 0x6CDD, 0x6CDF, 0x6CE4, 0x6CE6, 0x6CE7, /* 0x80 */ + 0x6CE9, 0x6CEC, 0x6CED, 0x6CF2, 0x6CF4, 0x6CF9, 0x6CFF, 0x6D00, /* 0x80 */ + 0x6D02, 0x6D03, 0x6D05, 0x6D06, 0x6D08, 0x6D09, 0x6D0A, 0x6D0D, /* 0x90 */ + 0x6D0F, 0x6D10, 0x6D11, 0x6D13, 0x6D14, 0x6D15, 0x6D16, 0x6D18, /* 0x90 */ + 0x6D1C, 0x6D1D, 0x6D1F, 0x6D20, 0x6D21, 0x6D22, 0x6D23, 0x6D24, /* 0xA0 */ + 0x6D26, 0x6D28, 0x6D29, 0x6D2C, 0x6D2D, 0x6D2F, 0x6D30, 0x6D34, /* 0xA0 */ + 0x6D36, 0x6D37, 0x6D38, 0x6D3A, 0x6D3F, 0x6D40, 0x6D42, 0x6D44, /* 0xB0 */ + 0x6D49, 0x6D4C, 0x6D50, 0x6D55, 0x6D56, 0x6D57, 0x6D58, 0x6D5B, /* 0xB0 */ + 0x6D5D, 0x6D5F, 0x6D61, 0x6D62, 0x6D64, 0x6D65, 0x6D67, 0x6D68, /* 0xC0 */ + 0x6D6B, 0x6D6C, 0x6D6D, 0x6D70, 0x6D71, 0x6D72, 0x6D73, 0x6D75, /* 0xC0 */ + 0x6D76, 0x6D79, 0x6D7A, 0x6D7B, 0x6D7D, 0x6D7E, 0x6D7F, 0x6D80, /* 0xD0 */ + 0x6D81, 0x6D83, 0x6D84, 0x6D86, 0x6D87, 0x6D8A, 0x6D8B, 0x6D8D, /* 0xD0 */ + 0x6D8F, 0x6D90, 0x6D92, 0x6D96, 0x6D97, 0x6D98, 0x6D99, 0x6D9A, /* 0xE0 */ + 0x6D9C, 0x6DA2, 0x6DA5, 0x6DAC, 0x6DAD, 0x6DB0, 0x6DB1, 0x6DB3, /* 0xE0 */ + 0x6DB4, 0x6DB6, 0x6DB7, 0x6DB9, 0x6DBA, 0x6DBB, 0x6DBC, 0x6DBD, /* 0xF0 */ + 0x6DBE, 0x6DC1, 0x6DC2, 0x6DC3, 0x6DC8, 0x6DC9, 0x6DCA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6DCD, 0x6DCE, 0x6DCF, 0x6DD0, 0x6DD2, 0x6DD3, 0x6DD4, 0x6DD5, /* 0x40 */ + 0x6DD7, 0x6DDA, 0x6DDB, 0x6DDC, 0x6DDF, 0x6DE2, 0x6DE3, 0x6DE5, /* 0x40 */ + 0x6DE7, 0x6DE8, 0x6DE9, 0x6DEA, 0x6DED, 0x6DEF, 0x6DF0, 0x6DF2, /* 0x50 */ + 0x6DF4, 0x6DF5, 0x6DF6, 0x6DF8, 0x6DFA, 0x6DFD, 0x6DFE, 0x6DFF, /* 0x50 */ + 0x6E00, 0x6E01, 0x6E02, 0x6E03, 0x6E04, 0x6E06, 0x6E07, 0x6E08, /* 0x60 */ + 0x6E09, 0x6E0B, 0x6E0F, 0x6E12, 0x6E13, 0x6E15, 0x6E18, 0x6E19, /* 0x60 */ + 0x6E1B, 0x6E1C, 0x6E1E, 0x6E1F, 0x6E22, 0x6E26, 0x6E27, 0x6E28, /* 0x70 */ + 0x6E2A, 0x6E2C, 0x6E2E, 0x6E30, 0x6E31, 0x6E33, 0x6E35, 0, /* 0x70 */ + 0x6E36, 0x6E37, 0x6E39, 0x6E3B, 0x6E3C, 0x6E3D, 0x6E3E, 0x6E3F, /* 0x80 */ + 0x6E40, 0x6E41, 0x6E42, 0x6E45, 0x6E46, 0x6E47, 0x6E48, 0x6E49, /* 0x80 */ + 0x6E4A, 0x6E4B, 0x6E4C, 0x6E4F, 0x6E50, 0x6E51, 0x6E52, 0x6E55, /* 0x90 */ + 0x6E57, 0x6E59, 0x6E5A, 0x6E5C, 0x6E5D, 0x6E5E, 0x6E60, 0x6E61, /* 0x90 */ + 0x6E62, 0x6E63, 0x6E64, 0x6E65, 0x6E66, 0x6E67, 0x6E68, 0x6E69, /* 0xA0 */ + 0x6E6A, 0x6E6C, 0x6E6D, 0x6E6F, 0x6E70, 0x6E71, 0x6E72, 0x6E73, /* 0xA0 */ + 0x6E74, 0x6E75, 0x6E76, 0x6E77, 0x6E78, 0x6E79, 0x6E7A, 0x6E7B, /* 0xB0 */ + 0x6E7C, 0x6E7D, 0x6E80, 0x6E81, 0x6E82, 0x6E84, 0x6E87, 0x6E88, /* 0xB0 */ + 0x6E8A, 0x6E8B, 0x6E8C, 0x6E8D, 0x6E8E, 0x6E91, 0x6E92, 0x6E93, /* 0xC0 */ + 0x6E94, 0x6E95, 0x6E96, 0x6E97, 0x6E99, 0x6E9A, 0x6E9B, 0x6E9D, /* 0xC0 */ + 0x6E9E, 0x6EA0, 0x6EA1, 0x6EA3, 0x6EA4, 0x6EA6, 0x6EA8, 0x6EA9, /* 0xD0 */ + 0x6EAB, 0x6EAC, 0x6EAD, 0x6EAE, 0x6EB0, 0x6EB3, 0x6EB5, 0x6EB8, /* 0xD0 */ + 0x6EB9, 0x6EBC, 0x6EBE, 0x6EBF, 0x6EC0, 0x6EC3, 0x6EC4, 0x6EC5, /* 0xE0 */ + 0x6EC6, 0x6EC8, 0x6EC9, 0x6ECA, 0x6ECC, 0x6ECD, 0x6ECE, 0x6ED0, /* 0xE0 */ + 0x6ED2, 0x6ED6, 0x6ED8, 0x6ED9, 0x6EDB, 0x6EDC, 0x6EDD, 0x6EE3, /* 0xF0 */ + 0x6EE7, 0x6EEA, 0x6EEB, 0x6EEC, 0x6EED, 0x6EEE, 0x6EEF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6EF0, 0x6EF1, 0x6EF2, 0x6EF3, 0x6EF5, 0x6EF6, 0x6EF7, 0x6EF8, /* 0x40 */ + 0x6EFA, 0x6EFB, 0x6EFC, 0x6EFD, 0x6EFE, 0x6EFF, 0x6F00, 0x6F01, /* 0x40 */ + 0x6F03, 0x6F04, 0x6F05, 0x6F07, 0x6F08, 0x6F0A, 0x6F0B, 0x6F0C, /* 0x50 */ + 0x6F0D, 0x6F0E, 0x6F10, 0x6F11, 0x6F12, 0x6F16, 0x6F17, 0x6F18, /* 0x50 */ + 0x6F19, 0x6F1A, 0x6F1B, 0x6F1C, 0x6F1D, 0x6F1E, 0x6F1F, 0x6F21, /* 0x60 */ + 0x6F22, 0x6F23, 0x6F25, 0x6F26, 0x6F27, 0x6F28, 0x6F2C, 0x6F2E, /* 0x60 */ + 0x6F30, 0x6F32, 0x6F34, 0x6F35, 0x6F37, 0x6F38, 0x6F39, 0x6F3A, /* 0x70 */ + 0x6F3B, 0x6F3C, 0x6F3D, 0x6F3F, 0x6F40, 0x6F41, 0x6F42, 0, /* 0x70 */ + 0x6F43, 0x6F44, 0x6F45, 0x6F48, 0x6F49, 0x6F4A, 0x6F4C, 0x6F4E, /* 0x80 */ + 0x6F4F, 0x6F50, 0x6F51, 0x6F52, 0x6F53, 0x6F54, 0x6F55, 0x6F56, /* 0x80 */ + 0x6F57, 0x6F59, 0x6F5A, 0x6F5B, 0x6F5D, 0x6F5F, 0x6F60, 0x6F61, /* 0x90 */ + 0x6F63, 0x6F64, 0x6F65, 0x6F67, 0x6F68, 0x6F69, 0x6F6A, 0x6F6B, /* 0x90 */ + 0x6F6C, 0x6F6F, 0x6F70, 0x6F71, 0x6F73, 0x6F75, 0x6F76, 0x6F77, /* 0xA0 */ + 0x6F79, 0x6F7B, 0x6F7D, 0x6F7E, 0x6F7F, 0x6F80, 0x6F81, 0x6F82, /* 0xA0 */ + 0x6F83, 0x6F85, 0x6F86, 0x6F87, 0x6F8A, 0x6F8B, 0x6F8F, 0x6F90, /* 0xB0 */ + 0x6F91, 0x6F92, 0x6F93, 0x6F94, 0x6F95, 0x6F96, 0x6F97, 0x6F98, /* 0xB0 */ + 0x6F99, 0x6F9A, 0x6F9B, 0x6F9D, 0x6F9E, 0x6F9F, 0x6FA0, 0x6FA2, /* 0xC0 */ + 0x6FA3, 0x6FA4, 0x6FA5, 0x6FA6, 0x6FA8, 0x6FA9, 0x6FAA, 0x6FAB, /* 0xC0 */ + 0x6FAC, 0x6FAD, 0x6FAE, 0x6FAF, 0x6FB0, 0x6FB1, 0x6FB2, 0x6FB4, /* 0xD0 */ + 0x6FB5, 0x6FB7, 0x6FB8, 0x6FBA, 0x6FBB, 0x6FBC, 0x6FBD, 0x6FBE, /* 0xD0 */ + 0x6FBF, 0x6FC1, 0x6FC3, 0x6FC4, 0x6FC5, 0x6FC6, 0x6FC7, 0x6FC8, /* 0xE0 */ + 0x6FCA, 0x6FCB, 0x6FCC, 0x6FCD, 0x6FCE, 0x6FCF, 0x6FD0, 0x6FD3, /* 0xE0 */ + 0x6FD4, 0x6FD5, 0x6FD6, 0x6FD7, 0x6FD8, 0x6FD9, 0x6FDA, 0x6FDB, /* 0xF0 */ + 0x6FDC, 0x6FDD, 0x6FDF, 0x6FE2, 0x6FE3, 0x6FE4, 0x6FE5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6FE6, 0x6FE7, 0x6FE8, 0x6FE9, 0x6FEA, 0x6FEB, 0x6FEC, 0x6FED, /* 0x40 */ + 0x6FF0, 0x6FF1, 0x6FF2, 0x6FF3, 0x6FF4, 0x6FF5, 0x6FF6, 0x6FF7, /* 0x40 */ + 0x6FF8, 0x6FF9, 0x6FFA, 0x6FFB, 0x6FFC, 0x6FFD, 0x6FFE, 0x6FFF, /* 0x50 */ + 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007, /* 0x50 */ + 0x7008, 0x7009, 0x700A, 0x700B, 0x700C, 0x700D, 0x700E, 0x700F, /* 0x60 */ + 0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018, /* 0x60 */ + 0x7019, 0x701C, 0x701D, 0x701E, 0x701F, 0x7020, 0x7021, 0x7022, /* 0x70 */ + 0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702A, 0, /* 0x70 */ + 0x702B, 0x702C, 0x702D, 0x702E, 0x702F, 0x7030, 0x7031, 0x7032, /* 0x80 */ + 0x7033, 0x7034, 0x7036, 0x7037, 0x7038, 0x703A, 0x703B, 0x703C, /* 0x80 */ + 0x703D, 0x703E, 0x703F, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, /* 0x90 */ + 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, 0x704A, 0x704B, 0x704D, /* 0x90 */ + 0x704E, 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, /* 0xA0 */ + 0x7057, 0x7058, 0x7059, 0x705A, 0x705B, 0x705C, 0x705D, 0x705F, /* 0xA0 */ + 0x7060, 0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, /* 0xB0 */ + 0x7068, 0x7069, 0x706A, 0x706E, 0x7071, 0x7072, 0x7073, 0x7074, /* 0xB0 */ + 0x7077, 0x7079, 0x707A, 0x707B, 0x707D, 0x7081, 0x7082, 0x7083, /* 0xC0 */ + 0x7084, 0x7086, 0x7087, 0x7088, 0x708B, 0x708C, 0x708D, 0x708F, /* 0xC0 */ + 0x7090, 0x7091, 0x7093, 0x7097, 0x7098, 0x709A, 0x709B, 0x709E, /* 0xD0 */ + 0x709F, 0x70A0, 0x70A1, 0x70A2, 0x70A3, 0x70A4, 0x70A5, 0x70A6, /* 0xD0 */ + 0x70A7, 0x70A8, 0x70A9, 0x70AA, 0x70B0, 0x70B2, 0x70B4, 0x70B5, /* 0xE0 */ + 0x70B6, 0x70BA, 0x70BE, 0x70BF, 0x70C4, 0x70C5, 0x70C6, 0x70C7, /* 0xE0 */ + 0x70C9, 0x70CB, 0x70CC, 0x70CD, 0x70CE, 0x70CF, 0x70D0, 0x70D1, /* 0xF0 */ + 0x70D2, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D7, 0x70DA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x70DC, 0x70DD, 0x70DE, 0x70E0, 0x70E1, 0x70E2, 0x70E3, 0x70E5, /* 0x40 */ + 0x70EA, 0x70EE, 0x70F0, 0x70F1, 0x70F2, 0x70F3, 0x70F4, 0x70F5, /* 0x40 */ + 0x70F6, 0x70F8, 0x70FA, 0x70FB, 0x70FC, 0x70FE, 0x70FF, 0x7100, /* 0x50 */ + 0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108, /* 0x50 */ + 0x710B, 0x710C, 0x710D, 0x710E, 0x710F, 0x7111, 0x7112, 0x7114, /* 0x60 */ + 0x7117, 0x711B, 0x711C, 0x711D, 0x711E, 0x711F, 0x7120, 0x7121, /* 0x60 */ + 0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712A, /* 0x70 */ + 0x712B, 0x712C, 0x712D, 0x712E, 0x7132, 0x7133, 0x7134, 0, /* 0x70 */ + 0x7135, 0x7137, 0x7138, 0x7139, 0x713A, 0x713B, 0x713C, 0x713D, /* 0x80 */ + 0x713E, 0x713F, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, /* 0x80 */ + 0x7147, 0x7148, 0x7149, 0x714B, 0x714D, 0x714F, 0x7150, 0x7151, /* 0x90 */ + 0x7152, 0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, /* 0x90 */ + 0x715A, 0x715B, 0x715D, 0x715F, 0x7160, 0x7161, 0x7162, 0x7163, /* 0xA0 */ + 0x7165, 0x7169, 0x716A, 0x716B, 0x716C, 0x716D, 0x716F, 0x7170, /* 0xA0 */ + 0x7171, 0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717B, 0x717C, /* 0xB0 */ + 0x717E, 0x717F, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, /* 0xB0 */ + 0x7187, 0x7188, 0x7189, 0x718B, 0x718C, 0x718D, 0x718E, 0x7190, /* 0xC0 */ + 0x7191, 0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719A, 0x719B, /* 0xC0 */ + 0x719C, 0x719D, 0x719E, 0x71A1, 0x71A2, 0x71A3, 0x71A4, 0x71A5, /* 0xD0 */ + 0x71A6, 0x71A7, 0x71A9, 0x71AA, 0x71AB, 0x71AD, 0x71AE, 0x71AF, /* 0xD0 */ + 0x71B0, 0x71B1, 0x71B2, 0x71B4, 0x71B6, 0x71B7, 0x71B8, 0x71BA, /* 0xE0 */ + 0x71BB, 0x71BC, 0x71BD, 0x71BE, 0x71BF, 0x71C0, 0x71C1, 0x71C2, /* 0xE0 */ + 0x71C4, 0x71C5, 0x71C6, 0x71C7, 0x71C8, 0x71C9, 0x71CA, 0x71CB, /* 0xF0 */ + 0x71CC, 0x71CD, 0x71CF, 0x71D0, 0x71D1, 0x71D2, 0x71D3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_A0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x71D6, 0x71D7, 0x71D8, 0x71D9, 0x71DA, 0x71DB, 0x71DC, 0x71DD, /* 0x40 */ + 0x71DE, 0x71DF, 0x71E1, 0x71E2, 0x71E3, 0x71E4, 0x71E6, 0x71E8, /* 0x40 */ + 0x71E9, 0x71EA, 0x71EB, 0x71EC, 0x71ED, 0x71EF, 0x71F0, 0x71F1, /* 0x50 */ + 0x71F2, 0x71F3, 0x71F4, 0x71F5, 0x71F6, 0x71F7, 0x71F8, 0x71FA, /* 0x50 */ + 0x71FB, 0x71FC, 0x71FD, 0x71FE, 0x71FF, 0x7200, 0x7201, 0x7202, /* 0x60 */ + 0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720A, 0x720B, /* 0x60 */ + 0x720C, 0x720D, 0x720E, 0x720F, 0x7210, 0x7211, 0x7212, 0x7213, /* 0x70 */ + 0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721A, 0, /* 0x70 */ + 0x721B, 0x721C, 0x721E, 0x721F, 0x7220, 0x7221, 0x7222, 0x7223, /* 0x80 */ + 0x7224, 0x7225, 0x7226, 0x7227, 0x7229, 0x722B, 0x722D, 0x722E, /* 0x80 */ + 0x722F, 0x7232, 0x7233, 0x7234, 0x723A, 0x723C, 0x723E, 0x7240, /* 0x90 */ + 0x7241, 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724A, /* 0x90 */ + 0x724B, 0x724E, 0x724F, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, /* 0xA0 */ + 0x7257, 0x7258, 0x725A, 0x725C, 0x725E, 0x7260, 0x7263, 0x7264, /* 0xA0 */ + 0x7265, 0x7268, 0x726A, 0x726B, 0x726C, 0x726D, 0x7270, 0x7271, /* 0xB0 */ + 0x7273, 0x7274, 0x7276, 0x7277, 0x7278, 0x727B, 0x727C, 0x727D, /* 0xB0 */ + 0x7282, 0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728C, /* 0xC0 */ + 0x728E, 0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, /* 0xC0 */ + 0x7298, 0x7299, 0x729A, 0x729B, 0x729C, 0x729D, 0x729E, 0x72A0, /* 0xD0 */ + 0x72A1, 0x72A2, 0x72A3, 0x72A4, 0x72A5, 0x72A6, 0x72A7, 0x72A8, /* 0xD0 */ + 0x72A9, 0x72AA, 0x72AB, 0x72AE, 0x72B1, 0x72B2, 0x72B3, 0x72B5, /* 0xE0 */ + 0x72BA, 0x72BB, 0x72BC, 0x72BD, 0x72BE, 0x72BF, 0x72C0, 0x72C5, /* 0xE0 */ + 0x72C6, 0x72C7, 0x72C9, 0x72CA, 0x72CB, 0x72CC, 0x72CF, 0x72D1, /* 0xF0 */ + 0x72D3, 0x72D4, 0x72D5, 0x72D6, 0x72D8, 0x72DA, 0x72DB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* Changes: */ +/* A1_A4: GB == 0x30FB, MS936 == 0x00B7, APPLE_CHINSIMP == 0x00B7 - we use in all systems 0x00B7 for better MS compatibility */ +/* A1_AA: GB == 0x2015, MS936 == 0x2014, APPLE_CHINSIMP == 0x2014 - we use in all systems 0x2014 for better MS compatibility */ +/* A1_AB: GB == 0xFF5E, MS936 == 0xFF5E, APPLE_CHINSIMP == 0x301C - we use in all systems 0xFF5E for better MS compatibility */ +/* A1_AD: GB == 0x2026, MS936 == 0x2026, APPLE_CHINSIMP == 0x22EF - we use in all systems 0x2026 for better MS compatibility */ +/* A1_E9: GB == 0xFFE0, MS936 == 0xFFE0, APPLE_CHINSIMP == 0x00A2 - we use in all systems 0xFFE0 for better MS compatibility */ +/* A1_EA: GB == 0xFFE1, MS936 == 0xFFE1, APPLE_CHINSIMP == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3000, 0x3001, 0x3002, 0x00B7, 0x02C9, 0x02C7, 0x00A8, /* 0xA0 */ + 0x3003, 0x3005, 0x2014, 0xFF5E, 0x2016, 0x2026, 0x2018, 0x2019, /* 0xA0 */ + 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, /* 0xB0 */ + 0x300C, 0x300D, 0x300E, 0x300F, 0x3016, 0x3017, 0x3010, 0x3011, /* 0xB0 */ + 0x00B1, 0x00D7, 0x00F7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220F, /* 0xC0 */ + 0x222A, 0x2229, 0x2208, 0x2237, 0x221A, 0x22A5, 0x2225, 0x2220, /* 0xC0 */ + 0x2312, 0x2299, 0x222B, 0x222E, 0x2261, 0x224C, 0x2248, 0x223D, /* 0xD0 */ + 0x221D, 0x2260, 0x226E, 0x226F, 0x2264, 0x2265, 0x221E, 0x2235, /* 0xD0 */ + 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFF04, /* 0xE0 */ + 0x00A4, 0xFFE0, 0xFFE1, 0x2030, 0x00A7, 0x2116, 0x2606, 0x2605, /* 0xE0 */ + 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25B3, /* 0xF0 */ + 0x25B2, 0x203B, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* A2_A1-A2_AA is a MS 936 extension, but we use this on all systems for better MS compatibility */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, /* 0xA0 */ + 0x2177, 0x2178, 0x2179, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, /* 0xB0 */ + 0x248F, 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, /* 0xB0 */ + 0x2497, 0x2498, 0x2499, 0x249A, 0x249B, 0x2474, 0x2475, 0x2476, /* 0xC0 */ + 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, /* 0xC0 */ + 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, /* 0xD0 */ + 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, /* 0xD0 */ + 0x2467, 0x2468, 0x2469, 0, 0, 0x3220, 0x3221, 0x3222, /* 0xE0 */ + 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0, /* 0xE0 */ + 0, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, /* 0xF0 */ + 0x2167, 0x2168, 0x2169, 0x216A, 0x216B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* Changes: */ +/* A3_A4: GB == 0xFFE5, MS936 == 0xFFE5, APPLE_CHINSIMP == 0x00A5 - we use in all systems 0xFFE5 for better MS compatibility */ +/* A3_FE: GB == 0xFFE3, MS936 == 0xFFE3, APPLE_CHINSIMP == 0x203E - we use in all systems 0xFFE3 for better MS compatibility */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF01, 0xFF02, 0xFF03, 0xFFE5, 0xFF05, 0xFF06, 0xFF07, /* 0xA0 */ + 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, /* 0xA0 */ + 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, /* 0xB0 */ + 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, /* 0xB0 */ + 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, /* 0xC0 */ + 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, /* 0xC0 */ + 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, /* 0xD0 */ + 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF3E, 0xFF3F, /* 0xD0 */ + 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0xE0 */ + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0xE0 */ + 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, /* 0xF0 */ + 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0xA0 */ + 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, /* 0xA0 */ + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, /* 0xB0 */ + 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, /* 0xB0 */ + 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, /* 0xC0 */ + 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, /* 0xC0 */ + 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, /* 0xD0 */ + 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, /* 0xD0 */ + 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0xE0 */ + 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, /* 0xE0 */ + 0x3090, 0x3091, 0x3092, 0x3093 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, /* 0xA0 */ + 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0xA0 */ + 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0xB0 */ + 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0xB0 */ + 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0xC0 */ + 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0xC0 */ + 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0xD0 */ + 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0xD0 */ + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, /* 0xE0 */ + 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, /* 0xE0 */ + 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0xA0 */ + 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, /* 0xA0 */ + 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, /* 0xB0 */ + 0x03A9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, /* 0xC0 */ + 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, /* 0xC0 */ + 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, /* 0xD0 */ + 0x03C9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, /* 0xE0 */ + 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0, 0, 0xFE3B, 0xFE3C, /* 0xE0 */ + 0xFE37, 0xFE38, 0xFE31, 0, 0xFE33, 0xFE34 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GB_A7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, /* 0xA0 */ + 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, /* 0xA0 */ + 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, /* 0xB0 */ + 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, /* 0xB0 */ + 0x042E, 0x042F, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, /* 0xD0 */ + 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, /* 0xD0 */ + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, /* 0xE0 */ + 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, /* 0xE0 */ + 0x044E, 0x044F /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* A8_BC come from APPLE_CHINSIMP */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_A8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x02CA, 0x02CB, 0x02D9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105, /* 0x40 */ + 0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221F, 0x2223, /* 0x40 */ + 0x2252, 0x2266, 0x2267, 0x22BF, 0x2550, 0x2551, 0x2552, 0x2553, /* 0x50 */ + 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, /* 0x50 */ + 0x255C, 0x255D, 0x255E, 0x255F, 0x2560, 0x2561, 0x2562, 0x2563, /* 0x60 */ + 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, /* 0x60 */ + 0x256C, 0x256D, 0x256E, 0x256F, 0x2570, 0x2571, 0x2572, 0x2573, /* 0x70 */ + 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0, /* 0x70 */ + 0x2588, 0x2589, 0x258A, 0x258B, 0x258C, 0x258D, 0x258E, 0x258F, /* 0x80 */ + 0x2593, 0x2594, 0x2595, 0x25BC, 0x25BD, 0x25E2, 0x25E3, 0x25E4, /* 0x80 */ + 0x25E5, 0x2609, 0x2295, 0x3012, 0x301D, 0x301E, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x0101, 0x00E1, 0x01CE, 0x00E0, 0x0113, 0x00E9, 0x011B, /* 0xA0 */ + 0x00E8, 0x012B, 0x00ED, 0x01D0, 0x00EC, 0x014D, 0x00F3, 0x01D2, /* 0xA0 */ + 0x00F2, 0x016B, 0x00FA, 0x01D4, 0x00F9, 0x01D6, 0x01D8, 0x01DA, /* 0xB0 */ + 0x01DC, 0x00FC, 0x00EA, 0x0251, 0x1E3F, 0x0144, 0x0148, 0, /* 0xB0 */ + 0x0261, 0, 0, 0, 0, 0x3105, 0x3106, 0x3107, /* 0xC0 */ + 0x3108, 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, 0x310E, 0x310F, /* 0xC0 */ + 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, /* 0xD0 */ + 0x3118, 0x3119, 0x311A, 0x311B, 0x311C, 0x311D, 0x311E, 0x311F, /* 0xD0 */ + 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, /* 0xE0 */ + 0x3128, 0x3129 /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_A9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, /* 0x40 */ + 0x3029, 0x32A3, 0x338E, 0x338F, 0x339C, 0x339D, 0x339E, 0x33A1, /* 0x40 */ + 0x33C4, 0x33CE, 0x33D1, 0x33D2, 0x33D5, 0xFE30, 0xFFE2, 0xFFE4, /* 0x50 */ + 0, 0x2121, 0x3231, 0, 0x2010, 0, 0, 0, /* 0x50 */ + 0x30FC, 0x309B, 0x309C, 0x30FD, 0x30FE, 0x3006, 0x309D, 0x309E, /* 0x60 */ + 0xFE49, 0xFE4A, 0xFE4B, 0xFE4C, 0xFE4D, 0xFE4E, 0xFE4F, 0xFE50, /* 0x60 */ + 0xFE51, 0xFE52, 0xFE54, 0xFE55, 0xFE56, 0xFE57, 0xFE59, 0xFE5A, /* 0x70 */ + 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0xFE5F, 0xFE60, 0xFE61, 0, /* 0x70 */ + 0xFE62, 0xFE63, 0xFE64, 0xFE65, 0xFE66, 0xFE68, 0xFE69, 0xFE6A, /* 0x80 */ + 0xFE6B, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0x3007, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0x2500, 0x2501, 0x2502, 0x2503, /* 0xA0 */ + 0x2504, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250A, 0x250B, /* 0xA0 */ + 0x250C, 0x250D, 0x250E, 0x250F, 0x2510, 0x2511, 0x2512, 0x2513, /* 0xB0 */ + 0x2514, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251A, 0x251B, /* 0xB0 */ + 0x251C, 0x251D, 0x251E, 0x251F, 0x2520, 0x2521, 0x2522, 0x2523, /* 0xC0 */ + 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252A, 0x252B, /* 0xC0 */ + 0x252C, 0x252D, 0x252E, 0x252F, 0x2530, 0x2531, 0x2532, 0x2533, /* 0xD0 */ + 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253A, 0x253B, /* 0xD0 */ + 0x253C, 0x253D, 0x253E, 0x253F, 0x2540, 0x2541, 0x2542, 0x2543, /* 0xE0 */ + 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254A, 0x254B /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_AA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x72DC, 0x72DD, 0x72DF, 0x72E2, 0x72E3, 0x72E4, 0x72E5, 0x72E6, /* 0x40 */ + 0x72E7, 0x72EA, 0x72EB, 0x72F5, 0x72F6, 0x72F9, 0x72FD, 0x72FE, /* 0x40 */ + 0x72FF, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308, /* 0x50 */ + 0x7309, 0x730B, 0x730C, 0x730D, 0x730F, 0x7310, 0x7311, 0x7312, /* 0x50 */ + 0x7314, 0x7318, 0x7319, 0x731A, 0x731F, 0x7320, 0x7323, 0x7324, /* 0x60 */ + 0x7326, 0x7327, 0x7328, 0x732D, 0x732F, 0x7330, 0x7332, 0x7333, /* 0x60 */ + 0x7335, 0x7336, 0x733A, 0x733B, 0x733C, 0x733D, 0x7340, 0x7341, /* 0x70 */ + 0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0, /* 0x70 */ + 0x7349, 0x734A, 0x734B, 0x734C, 0x734E, 0x734F, 0x7351, 0x7353, /* 0x80 */ + 0x7354, 0x7355, 0x7356, 0x7358, 0x7359, 0x735A, 0x735B, 0x735C, /* 0x80 */ + 0x735D, 0x735E, 0x735F, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, /* 0x90 */ + 0x7366, 0x7367, 0x7368, 0x7369, 0x736A, 0x736B, 0x736E, 0x7370, /* 0x90 */ + 0x7371 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_AB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379, /* 0x40 */ + 0x737A, 0x737B, 0x737C, 0x737D, 0x737F, 0x7380, 0x7381, 0x7382, /* 0x40 */ + 0x7383, 0x7385, 0x7386, 0x7388, 0x738A, 0x738C, 0x738D, 0x738F, /* 0x50 */ + 0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399, /* 0x50 */ + 0x739A, 0x739C, 0x739D, 0x739E, 0x73A0, 0x73A1, 0x73A3, 0x73A4, /* 0x60 */ + 0x73A5, 0x73A6, 0x73A7, 0x73A8, 0x73AA, 0x73AC, 0x73AD, 0x73B1, /* 0x60 */ + 0x73B4, 0x73B5, 0x73B6, 0x73B8, 0x73B9, 0x73BC, 0x73BD, 0x73BE, /* 0x70 */ + 0x73BF, 0x73C1, 0x73C3, 0x73C4, 0x73C5, 0x73C6, 0x73C7, 0, /* 0x70 */ + 0x73CB, 0x73CC, 0x73CE, 0x73D2, 0x73D3, 0x73D4, 0x73D5, 0x73D6, /* 0x80 */ + 0x73D7, 0x73D8, 0x73DA, 0x73DB, 0x73DC, 0x73DD, 0x73DF, 0x73E1, /* 0x80 */ + 0x73E2, 0x73E3, 0x73E4, 0x73E6, 0x73E8, 0x73EA, 0x73EB, 0x73EC, /* 0x90 */ + 0x73EE, 0x73EF, 0x73F0, 0x73F1, 0x73F3, 0x73F4, 0x73F5, 0x73F6, /* 0x90 */ + 0x73F7 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_AC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x73F8, 0x73F9, 0x73FA, 0x73FB, 0x73FC, 0x73FD, 0x73FE, 0x73FF, /* 0x40 */ + 0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740B, 0x740C, /* 0x40 */ + 0x740D, 0x740E, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416, /* 0x50 */ + 0x7417, 0x7418, 0x7419, 0x741C, 0x741D, 0x741E, 0x741F, 0x7420, /* 0x50 */ + 0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742B, 0x742D, 0x742F, /* 0x60 */ + 0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743A, 0x743B, 0x743D, /* 0x60 */ + 0x743E, 0x743F, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, /* 0x70 */ + 0x7447, 0x7448, 0x7449, 0x744A, 0x744B, 0x744C, 0x744D, 0, /* 0x70 */ + 0x744E, 0x744F, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, /* 0x80 */ + 0x7458, 0x745D, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, /* 0x80 */ + 0x7466, 0x7467, 0x7468, 0x7469, 0x746A, 0x746B, 0x746C, 0x746E, /* 0x90 */ + 0x746F, 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, /* 0x90 */ + 0x747A /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_AD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x747B, 0x747C, 0x747D, 0x747F, 0x7482, 0x7484, 0x7485, 0x7486, /* 0x40 */ + 0x7488, 0x7489, 0x748A, 0x748C, 0x748D, 0x748F, 0x7491, 0x7492, /* 0x40 */ + 0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749A, /* 0x50 */ + 0x749B, 0x749D, 0x749F, 0x74A0, 0x74A1, 0x74A2, 0x74A3, 0x74A4, /* 0x50 */ + 0x74A5, 0x74A6, 0x74AA, 0x74AB, 0x74AC, 0x74AD, 0x74AE, 0x74AF, /* 0x60 */ + 0x74B0, 0x74B1, 0x74B2, 0x74B3, 0x74B4, 0x74B5, 0x74B6, 0x74B7, /* 0x60 */ + 0x74B8, 0x74B9, 0x74BB, 0x74BC, 0x74BD, 0x74BE, 0x74BF, 0x74C0, /* 0x70 */ + 0x74C1, 0x74C2, 0x74C3, 0x74C4, 0x74C5, 0x74C6, 0x74C7, 0, /* 0x70 */ + 0x74C8, 0x74C9, 0x74CA, 0x74CB, 0x74CC, 0x74CD, 0x74CE, 0x74CF, /* 0x80 */ + 0x74D0, 0x74D1, 0x74D3, 0x74D4, 0x74D5, 0x74D6, 0x74D7, 0x74D8, /* 0x80 */ + 0x74D9, 0x74DA, 0x74DB, 0x74DD, 0x74DF, 0x74E1, 0x74E5, 0x74E7, /* 0x90 */ + 0x74E8, 0x74E9, 0x74EA, 0x74EB, 0x74EC, 0x74ED, 0x74F0, 0x74F1, /* 0x90 */ + 0x74F2 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_AE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x74F3, 0x74F5, 0x74F8, 0x74F9, 0x74FA, 0x74FB, 0x74FC, 0x74FD, /* 0x40 */ + 0x74FE, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507, /* 0x40 */ + 0x7508, 0x7509, 0x750A, 0x750B, 0x750C, 0x750E, 0x7510, 0x7512, /* 0x50 */ + 0x7514, 0x7515, 0x7516, 0x7517, 0x751B, 0x751D, 0x751E, 0x7520, /* 0x50 */ + 0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752A, 0x752E, /* 0x60 */ + 0x7534, 0x7536, 0x7539, 0x753C, 0x753D, 0x753F, 0x7541, 0x7542, /* 0x60 */ + 0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754A, 0x754D, 0x7550, /* 0x70 */ + 0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0, /* 0x70 */ + 0x755D, 0x755E, 0x755F, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, /* 0x80 */ + 0x7567, 0x7568, 0x7569, 0x756B, 0x756C, 0x756D, 0x756E, 0x756F, /* 0x80 */ + 0x7570, 0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757A, 0x757B, /* 0x90 */ + 0x757C, 0x757D, 0x757E, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, /* 0x90 */ + 0x7587 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_AF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7588, 0x7589, 0x758A, 0x758C, 0x758D, 0x758E, 0x7590, 0x7593, /* 0x40 */ + 0x7595, 0x7598, 0x759B, 0x759C, 0x759E, 0x75A2, 0x75A6, 0x75A7, /* 0x40 */ + 0x75A8, 0x75A9, 0x75AA, 0x75AD, 0x75B6, 0x75B7, 0x75BA, 0x75BB, /* 0x50 */ + 0x75BF, 0x75C0, 0x75C1, 0x75C6, 0x75CB, 0x75CC, 0x75CE, 0x75CF, /* 0x50 */ + 0x75D0, 0x75D1, 0x75D3, 0x75D7, 0x75D9, 0x75DA, 0x75DC, 0x75DD, /* 0x60 */ + 0x75DF, 0x75E0, 0x75E1, 0x75E5, 0x75E9, 0x75EC, 0x75ED, 0x75EE, /* 0x60 */ + 0x75EF, 0x75F2, 0x75F3, 0x75F5, 0x75F6, 0x75F7, 0x75F8, 0x75FA, /* 0x70 */ + 0x75FB, 0x75FD, 0x75FE, 0x7602, 0x7604, 0x7606, 0x7607, 0, /* 0x70 */ + 0x7608, 0x7609, 0x760B, 0x760D, 0x760E, 0x760F, 0x7611, 0x7612, /* 0x80 */ + 0x7613, 0x7614, 0x7616, 0x761A, 0x761C, 0x761D, 0x761E, 0x7621, /* 0x80 */ + 0x7623, 0x7627, 0x7628, 0x762C, 0x762E, 0x762F, 0x7631, 0x7632, /* 0x90 */ + 0x7636, 0x7637, 0x7639, 0x763A, 0x763B, 0x763D, 0x7641, 0x7642, /* 0x90 */ + 0x7644 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764A, 0x764B, 0x764E, /* 0x40 */ + 0x764F, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658, /* 0x40 */ + 0x7659, 0x765A, 0x765B, 0x765D, 0x765F, 0x7660, 0x7661, 0x7662, /* 0x50 */ + 0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766A, 0x766C, /* 0x50 */ + 0x766D, 0x766E, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675, /* 0x60 */ + 0x7676, 0x7677, 0x7679, 0x767A, 0x767C, 0x767F, 0x7680, 0x7681, /* 0x60 */ + 0x7683, 0x7685, 0x7689, 0x768A, 0x768C, 0x768D, 0x768F, 0x7690, /* 0x70 */ + 0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769A, 0x769B, 0, /* 0x70 */ + 0x769C, 0x769D, 0x769E, 0x769F, 0x76A0, 0x76A1, 0x76A2, 0x76A3, /* 0x80 */ + 0x76A5, 0x76A6, 0x76A7, 0x76A8, 0x76A9, 0x76AA, 0x76AB, 0x76AC, /* 0x80 */ + 0x76AD, 0x76AF, 0x76B0, 0x76B3, 0x76B5, 0x76B6, 0x76B7, 0x76B8, /* 0x90 */ + 0x76B9, 0x76BA, 0x76BB, 0x76BC, 0x76BD, 0x76BE, 0x76C0, 0x76C1, /* 0x90 */ + 0x76C3, 0x554A, 0x963F, 0x57C3, 0x6328, 0x54CE, 0x5509, 0x54C0, /* 0xA0 */ + 0x7691, 0x764C, 0x853C, 0x77EE, 0x827E, 0x788D, 0x7231, 0x9698, /* 0xA0 */ + 0x978D, 0x6C28, 0x5B89, 0x4FFA, 0x6309, 0x6697, 0x5CB8, 0x80FA, /* 0xB0 */ + 0x6848, 0x80AE, 0x6602, 0x76CE, 0x51F9, 0x6556, 0x71AC, 0x7FF1, /* 0xB0 */ + 0x8884, 0x50B2, 0x5965, 0x61CA, 0x6FB3, 0x82AD, 0x634C, 0x6252, /* 0xC0 */ + 0x53ED, 0x5427, 0x7B06, 0x516B, 0x75A4, 0x5DF4, 0x62D4, 0x8DCB, /* 0xC0 */ + 0x9776, 0x628A, 0x8019, 0x575D, 0x9738, 0x7F62, 0x7238, 0x767D, /* 0xD0 */ + 0x67CF, 0x767E, 0x6446, 0x4F70, 0x8D25, 0x62DC, 0x7A17, 0x6591, /* 0xD0 */ + 0x73ED, 0x642C, 0x6273, 0x822C, 0x9881, 0x677F, 0x7248, 0x626E, /* 0xE0 */ + 0x62CC, 0x4F34, 0x74E3, 0x534A, 0x529E, 0x7ECA, 0x90A6, 0x5E2E, /* 0xE0 */ + 0x6886, 0x699C, 0x8180, 0x7ED1, 0x68D2, 0x78C5, 0x868C, 0x9551, /* 0xF0 */ + 0x508D, 0x8C24, 0x82DE, 0x80DE, 0x5305, 0x8912, 0x5265 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x76C4, 0x76C7, 0x76C9, 0x76CB, 0x76CC, 0x76D3, 0x76D5, 0x76D9, /* 0x40 */ + 0x76DA, 0x76DC, 0x76DD, 0x76DE, 0x76E0, 0x76E1, 0x76E2, 0x76E3, /* 0x40 */ + 0x76E4, 0x76E6, 0x76E7, 0x76E8, 0x76E9, 0x76EA, 0x76EB, 0x76EC, /* 0x50 */ + 0x76ED, 0x76F0, 0x76F3, 0x76F5, 0x76F6, 0x76F7, 0x76FA, 0x76FB, /* 0x50 */ + 0x76FD, 0x76FF, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770A, /* 0x60 */ + 0x770C, 0x770E, 0x770F, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714, /* 0x60 */ + 0x7715, 0x7716, 0x7717, 0x7718, 0x771B, 0x771C, 0x771D, 0x771E, /* 0x70 */ + 0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772A, 0x772B, 0, /* 0x70 */ + 0x772C, 0x772E, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, /* 0x80 */ + 0x773B, 0x773D, 0x773E, 0x773F, 0x7742, 0x7744, 0x7745, 0x7746, /* 0x80 */ + 0x7748, 0x7749, 0x774A, 0x774B, 0x774C, 0x774D, 0x774E, 0x774F, /* 0x90 */ + 0x7752, 0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, /* 0x90 */ + 0x775C, 0x8584, 0x96F9, 0x4FDD, 0x5821, 0x9971, 0x5B9D, 0x62B1, /* 0xA0 */ + 0x62A5, 0x66B4, 0x8C79, 0x9C8D, 0x7206, 0x676F, 0x7891, 0x60B2, /* 0xA0 */ + 0x5351, 0x5317, 0x8F88, 0x80CC, 0x8D1D, 0x94A1, 0x500D, 0x72C8, /* 0xB0 */ + 0x5907, 0x60EB, 0x7119, 0x88AB, 0x5954, 0x82EF, 0x672C, 0x7B28, /* 0xB0 */ + 0x5D29, 0x7EF7, 0x752D, 0x6CF5, 0x8E66, 0x8FF8, 0x903C, 0x9F3B, /* 0xC0 */ + 0x6BD4, 0x9119, 0x7B14, 0x5F7C, 0x78A7, 0x84D6, 0x853D, 0x6BD5, /* 0xC0 */ + 0x6BD9, 0x6BD6, 0x5E01, 0x5E87, 0x75F9, 0x95ED, 0x655D, 0x5F0A, /* 0xD0 */ + 0x5FC5, 0x8F9F, 0x58C1, 0x81C2, 0x907F, 0x965B, 0x97AD, 0x8FB9, /* 0xD0 */ + 0x7F16, 0x8D2C, 0x6241, 0x4FBF, 0x53D8, 0x535E, 0x8FA8, 0x8FA9, /* 0xE0 */ + 0x8FAB, 0x904D, 0x6807, 0x5F6A, 0x8198, 0x8868, 0x9CD6, 0x618B, /* 0xE0 */ + 0x522B, 0x762A, 0x5F6C, 0x658C, 0x6FD2, 0x6EE8, 0x5BBE, 0x6448, /* 0xF0 */ + 0x5175, 0x51B0, 0x67C4, 0x4E19, 0x79C9, 0x997C, 0x70B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x775D, 0x775E, 0x775F, 0x7760, 0x7764, 0x7767, 0x7769, 0x776A, /* 0x40 */ + 0x776D, 0x776E, 0x776F, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774, /* 0x40 */ + 0x7775, 0x7776, 0x7777, 0x7778, 0x777A, 0x777B, 0x777C, 0x7781, /* 0x50 */ + 0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778A, 0x778B, /* 0x50 */ + 0x778F, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798, /* 0x60 */ + 0x7799, 0x779A, 0x779B, 0x779C, 0x779D, 0x779E, 0x77A1, 0x77A3, /* 0x60 */ + 0x77A4, 0x77A6, 0x77A8, 0x77AB, 0x77AD, 0x77AE, 0x77AF, 0x77B1, /* 0x70 */ + 0x77B2, 0x77B4, 0x77B6, 0x77B7, 0x77B8, 0x77B9, 0x77BA, 0, /* 0x70 */ + 0x77BC, 0x77BE, 0x77C0, 0x77C1, 0x77C2, 0x77C3, 0x77C4, 0x77C5, /* 0x80 */ + 0x77C6, 0x77C7, 0x77C8, 0x77C9, 0x77CA, 0x77CB, 0x77CC, 0x77CE, /* 0x80 */ + 0x77CF, 0x77D0, 0x77D1, 0x77D2, 0x77D3, 0x77D4, 0x77D5, 0x77D6, /* 0x90 */ + 0x77D8, 0x77D9, 0x77DA, 0x77DD, 0x77DE, 0x77DF, 0x77E0, 0x77E1, /* 0x90 */ + 0x77E4, 0x75C5, 0x5E76, 0x73BB, 0x83E0, 0x64AD, 0x62E8, 0x94B5, /* 0xA0 */ + 0x6CE2, 0x535A, 0x52C3, 0x640F, 0x94C2, 0x7B94, 0x4F2F, 0x5E1B, /* 0xA0 */ + 0x8236, 0x8116, 0x818A, 0x6E24, 0x6CCA, 0x9A73, 0x6355, 0x535C, /* 0xB0 */ + 0x54FA, 0x8865, 0x57E0, 0x4E0D, 0x5E03, 0x6B65, 0x7C3F, 0x90E8, /* 0xB0 */ + 0x6016, 0x64E6, 0x731C, 0x88C1, 0x6750, 0x624D, 0x8D22, 0x776C, /* 0xC0 */ + 0x8E29, 0x91C7, 0x5F69, 0x83DC, 0x8521, 0x9910, 0x53C2, 0x8695, /* 0xC0 */ + 0x6B8B, 0x60ED, 0x60E8, 0x707F, 0x82CD, 0x8231, 0x4ED3, 0x6CA7, /* 0xD0 */ + 0x85CF, 0x64CD, 0x7CD9, 0x69FD, 0x66F9, 0x8349, 0x5395, 0x7B56, /* 0xD0 */ + 0x4FA7, 0x518C, 0x6D4B, 0x5C42, 0x8E6D, 0x63D2, 0x53C9, 0x832C, /* 0xE0 */ + 0x8336, 0x67E5, 0x78B4, 0x643D, 0x5BDF, 0x5C94, 0x5DEE, 0x8BE7, /* 0xE0 */ + 0x62C6, 0x67F4, 0x8C7A, 0x6400, 0x63BA, 0x8749, 0x998B, 0x8C17, /* 0xF0 */ + 0x7F20, 0x94F2, 0x4EA7, 0x9610, 0x98A4, 0x660C, 0x7316 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x77E6, 0x77E8, 0x77EA, 0x77EF, 0x77F0, 0x77F1, 0x77F2, 0x77F4, /* 0x40 */ + 0x77F5, 0x77F7, 0x77F9, 0x77FA, 0x77FB, 0x77FC, 0x7803, 0x7804, /* 0x40 */ + 0x7805, 0x7806, 0x7807, 0x7808, 0x780A, 0x780B, 0x780E, 0x780F, /* 0x50 */ + 0x7810, 0x7813, 0x7815, 0x7819, 0x781B, 0x781E, 0x7820, 0x7821, /* 0x50 */ + 0x7822, 0x7824, 0x7828, 0x782A, 0x782B, 0x782E, 0x782F, 0x7831, /* 0x60 */ + 0x7832, 0x7833, 0x7835, 0x7836, 0x783D, 0x783F, 0x7841, 0x7842, /* 0x60 */ + 0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784A, 0x784B, 0x784D, /* 0x70 */ + 0x784F, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785A, 0, /* 0x70 */ + 0x785B, 0x785C, 0x785E, 0x785F, 0x7860, 0x7861, 0x7862, 0x7863, /* 0x80 */ + 0x7864, 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786F, 0x7870, /* 0x80 */ + 0x7871, 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, /* 0x90 */ + 0x787A, 0x787B, 0x787D, 0x787E, 0x787F, 0x7880, 0x7881, 0x7882, /* 0x90 */ + 0x7883, 0x573A, 0x5C1D, 0x5E38, 0x957F, 0x507F, 0x80A0, 0x5382, /* 0xA0 */ + 0x655E, 0x7545, 0x5531, 0x5021, 0x8D85, 0x6284, 0x949E, 0x671D, /* 0xA0 */ + 0x5632, 0x6F6E, 0x5DE2, 0x5435, 0x7092, 0x8F66, 0x626F, 0x64A4, /* 0xB0 */ + 0x63A3, 0x5F7B, 0x6F88, 0x90F4, 0x81E3, 0x8FB0, 0x5C18, 0x6668, /* 0xB0 */ + 0x5FF1, 0x6C89, 0x9648, 0x8D81, 0x886C, 0x6491, 0x79F0, 0x57CE, /* 0xC0 */ + 0x6A59, 0x6210, 0x5448, 0x4E58, 0x7A0B, 0x60E9, 0x6F84, 0x8BDA, /* 0xC0 */ + 0x627F, 0x901E, 0x9A8B, 0x79E4, 0x5403, 0x75F4, 0x6301, 0x5319, /* 0xD0 */ + 0x6C60, 0x8FDF, 0x5F1B, 0x9A70, 0x803B, 0x9F7F, 0x4F88, 0x5C3A, /* 0xD0 */ + 0x8D64, 0x7FC5, 0x65A5, 0x70BD, 0x5145, 0x51B2, 0x866B, 0x5D07, /* 0xE0 */ + 0x5BA0, 0x62BD, 0x916C, 0x7574, 0x8E0C, 0x7A20, 0x6101, 0x7B79, /* 0xE0 */ + 0x4EC7, 0x7EF8, 0x7785, 0x4E11, 0x81ED, 0x521D, 0x51FA, 0x6A71, /* 0xF0 */ + 0x53A8, 0x8E87, 0x9504, 0x96CF, 0x6EC1, 0x9664, 0x695A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7884, 0x7885, 0x7886, 0x7888, 0x788A, 0x788B, 0x788F, 0x7890, /* 0x40 */ + 0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789D, 0x789E, 0x78A0, /* 0x40 */ + 0x78A2, 0x78A4, 0x78A6, 0x78A8, 0x78A9, 0x78AA, 0x78AB, 0x78AC, /* 0x50 */ + 0x78AD, 0x78AE, 0x78AF, 0x78B5, 0x78B6, 0x78B7, 0x78B8, 0x78BA, /* 0x50 */ + 0x78BB, 0x78BC, 0x78BD, 0x78BF, 0x78C0, 0x78C2, 0x78C3, 0x78C4, /* 0x60 */ + 0x78C6, 0x78C7, 0x78C8, 0x78CC, 0x78CD, 0x78CE, 0x78CF, 0x78D1, /* 0x60 */ + 0x78D2, 0x78D3, 0x78D6, 0x78D7, 0x78D8, 0x78DA, 0x78DB, 0x78DC, /* 0x70 */ + 0x78DD, 0x78DE, 0x78DF, 0x78E0, 0x78E1, 0x78E2, 0x78E3, 0, /* 0x70 */ + 0x78E4, 0x78E5, 0x78E6, 0x78E7, 0x78E9, 0x78EA, 0x78EB, 0x78ED, /* 0x80 */ + 0x78EE, 0x78EF, 0x78F0, 0x78F1, 0x78F3, 0x78F5, 0x78F6, 0x78F8, /* 0x80 */ + 0x78F9, 0x78FB, 0x78FC, 0x78FD, 0x78FE, 0x78FF, 0x7900, 0x7902, /* 0x90 */ + 0x7903, 0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790A, 0x790B, /* 0x90 */ + 0x790C, 0x7840, 0x50A8, 0x77D7, 0x6410, 0x89E6, 0x5904, 0x63E3, /* 0xA0 */ + 0x5DDD, 0x7A7F, 0x693D, 0x4F20, 0x8239, 0x5598, 0x4E32, 0x75AE, /* 0xA0 */ + 0x7A97, 0x5E62, 0x5E8A, 0x95EF, 0x521B, 0x5439, 0x708A, 0x6376, /* 0xB0 */ + 0x9524, 0x5782, 0x6625, 0x693F, 0x9187, 0x5507, 0x6DF3, 0x7EAF, /* 0xB0 */ + 0x8822, 0x6233, 0x7EF0, 0x75B5, 0x8328, 0x78C1, 0x96CC, 0x8F9E, /* 0xC0 */ + 0x6148, 0x74F7, 0x8BCD, 0x6B64, 0x523A, 0x8D50, 0x6B21, 0x806A, /* 0xC0 */ + 0x8471, 0x56F1, 0x5306, 0x4ECE, 0x4E1B, 0x51D1, 0x7C97, 0x918B, /* 0xD0 */ + 0x7C07, 0x4FC3, 0x8E7F, 0x7BE1, 0x7A9C, 0x6467, 0x5D14, 0x50AC, /* 0xD0 */ + 0x8106, 0x7601, 0x7CB9, 0x6DEC, 0x7FE0, 0x6751, 0x5B58, 0x5BF8, /* 0xE0 */ + 0x78CB, 0x64AE, 0x6413, 0x63AA, 0x632B, 0x9519, 0x642D, 0x8FBE, /* 0xE0 */ + 0x7B54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6B79, 0x50A3, 0x6234, /* 0xF0 */ + 0x5E26, 0x6B86, 0x4EE3, 0x8D37, 0x888B, 0x5F85, 0x902E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x790D, 0x790E, 0x790F, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, /* 0x40 */ + 0x7916, 0x7917, 0x7918, 0x7919, 0x791A, 0x791B, 0x791C, 0x791D, /* 0x40 */ + 0x791F, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927, /* 0x50 */ + 0x7928, 0x7929, 0x792A, 0x792B, 0x792C, 0x792D, 0x792E, 0x792F, /* 0x50 */ + 0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938, /* 0x60 */ + 0x7939, 0x793D, 0x793F, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947, /* 0x60 */ + 0x794A, 0x794B, 0x794C, 0x794D, 0x794E, 0x794F, 0x7950, 0x7951, /* 0x70 */ + 0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0, /* 0x70 */ + 0x7964, 0x7966, 0x7969, 0x796A, 0x796B, 0x796C, 0x796E, 0x7970, /* 0x80 */ + 0x7971, 0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797B, /* 0x80 */ + 0x797C, 0x797D, 0x797E, 0x797F, 0x7982, 0x7983, 0x7986, 0x7987, /* 0x90 */ + 0x7988, 0x7989, 0x798B, 0x798C, 0x798D, 0x798E, 0x7990, 0x7991, /* 0x90 */ + 0x7992, 0x6020, 0x803D, 0x62C5, 0x4E39, 0x5355, 0x90F8, 0x63B8, /* 0xA0 */ + 0x80C6, 0x65E6, 0x6C2E, 0x4F46, 0x60EE, 0x6DE1, 0x8BDE, 0x5F39, /* 0xA0 */ + 0x86CB, 0x5F53, 0x6321, 0x515A, 0x8361, 0x6863, 0x5200, 0x6363, /* 0xB0 */ + 0x8E48, 0x5012, 0x5C9B, 0x7977, 0x5BFC, 0x5230, 0x7A3B, 0x60BC, /* 0xB0 */ + 0x9053, 0x76D7, 0x5FB7, 0x5F97, 0x7684, 0x8E6C, 0x706F, 0x767B, /* 0xC0 */ + 0x7B49, 0x77AA, 0x51F3, 0x9093, 0x5824, 0x4F4E, 0x6EF4, 0x8FEA, /* 0xC0 */ + 0x654C, 0x7B1B, 0x72C4, 0x6DA4, 0x7FDF, 0x5AE1, 0x62B5, 0x5E95, /* 0xD0 */ + 0x5730, 0x8482, 0x7B2C, 0x5E1D, 0x5F1F, 0x9012, 0x7F14, 0x98A0, /* 0xD0 */ + 0x6382, 0x6EC7, 0x7898, 0x70B9, 0x5178, 0x975B, 0x57AB, 0x7535, /* 0xE0 */ + 0x4F43, 0x7538, 0x5E97, 0x60E6, 0x5960, 0x6DC0, 0x6BBF, 0x7889, /* 0xE0 */ + 0x53FC, 0x96D5, 0x51CB, 0x5201, 0x6389, 0x540A, 0x9493, 0x8C03, /* 0xF0 */ + 0x8DCC, 0x7239, 0x789F, 0x8776, 0x8FED, 0x8C0D, 0x53E0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799B, /* 0x40 */ + 0x799C, 0x799D, 0x799E, 0x799F, 0x79A0, 0x79A1, 0x79A2, 0x79A3, /* 0x40 */ + 0x79A4, 0x79A5, 0x79A6, 0x79A8, 0x79A9, 0x79AA, 0x79AB, 0x79AC, /* 0x50 */ + 0x79AD, 0x79AE, 0x79AF, 0x79B0, 0x79B1, 0x79B2, 0x79B4, 0x79B5, /* 0x50 */ + 0x79B6, 0x79B7, 0x79B8, 0x79BC, 0x79BF, 0x79C2, 0x79C4, 0x79C5, /* 0x60 */ + 0x79C7, 0x79C8, 0x79CA, 0x79CC, 0x79CE, 0x79CF, 0x79D0, 0x79D3, /* 0x60 */ + 0x79D4, 0x79D6, 0x79D7, 0x79D9, 0x79DA, 0x79DB, 0x79DC, 0x79DD, /* 0x70 */ + 0x79DE, 0x79E0, 0x79E1, 0x79E2, 0x79E5, 0x79E8, 0x79EA, 0, /* 0x70 */ + 0x79EC, 0x79EE, 0x79F1, 0x79F2, 0x79F3, 0x79F4, 0x79F5, 0x79F6, /* 0x80 */ + 0x79F7, 0x79F9, 0x79FA, 0x79FC, 0x79FE, 0x79FF, 0x7A01, 0x7A04, /* 0x80 */ + 0x7A05, 0x7A07, 0x7A08, 0x7A09, 0x7A0A, 0x7A0C, 0x7A0F, 0x7A10, /* 0x90 */ + 0x7A11, 0x7A12, 0x7A13, 0x7A15, 0x7A16, 0x7A18, 0x7A19, 0x7A1B, /* 0x90 */ + 0x7A1C, 0x4E01, 0x76EF, 0x53EE, 0x9489, 0x9876, 0x9F0E, 0x952D, /* 0xA0 */ + 0x5B9A, 0x8BA2, 0x4E22, 0x4E1C, 0x51AC, 0x8463, 0x61C2, 0x52A8, /* 0xA0 */ + 0x680B, 0x4F97, 0x606B, 0x51BB, 0x6D1E, 0x515C, 0x6296, 0x6597, /* 0xB0 */ + 0x9661, 0x8C46, 0x9017, 0x75D8, 0x90FD, 0x7763, 0x6BD2, 0x728A, /* 0xB0 */ + 0x72EC, 0x8BFB, 0x5835, 0x7779, 0x8D4C, 0x675C, 0x9540, 0x809A, /* 0xC0 */ + 0x5EA6, 0x6E21, 0x5992, 0x7AEF, 0x77ED, 0x953B, 0x6BB5, 0x65AD, /* 0xC0 */ + 0x7F0E, 0x5806, 0x5151, 0x961F, 0x5BF9, 0x58A9, 0x5428, 0x8E72, /* 0xD0 */ + 0x6566, 0x987F, 0x56E4, 0x949D, 0x76FE, 0x9041, 0x6387, 0x54C6, /* 0xD0 */ + 0x591A, 0x593A, 0x579B, 0x8EB2, 0x6735, 0x8DFA, 0x8235, 0x5241, /* 0xE0 */ + 0x60F0, 0x5815, 0x86FE, 0x5CE8, 0x9E45, 0x4FC4, 0x989D, 0x8BB9, /* 0xE0 */ + 0x5A25, 0x6076, 0x5384, 0x627C, 0x904F, 0x9102, 0x997F, 0x6069, /* 0xF0 */ + 0x800C, 0x513F, 0x8033, 0x5C14, 0x9975, 0x6D31, 0x4E8C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7A1D, 0x7A1F, 0x7A21, 0x7A22, 0x7A24, 0x7A25, 0x7A26, 0x7A27, /* 0x40 */ + 0x7A28, 0x7A29, 0x7A2A, 0x7A2B, 0x7A2C, 0x7A2D, 0x7A2E, 0x7A2F, /* 0x40 */ + 0x7A30, 0x7A31, 0x7A32, 0x7A34, 0x7A35, 0x7A36, 0x7A38, 0x7A3A, /* 0x50 */ + 0x7A3E, 0x7A40, 0x7A41, 0x7A42, 0x7A43, 0x7A44, 0x7A45, 0x7A47, /* 0x50 */ + 0x7A48, 0x7A49, 0x7A4A, 0x7A4B, 0x7A4C, 0x7A4D, 0x7A4E, 0x7A4F, /* 0x60 */ + 0x7A50, 0x7A52, 0x7A53, 0x7A54, 0x7A55, 0x7A56, 0x7A58, 0x7A59, /* 0x60 */ + 0x7A5A, 0x7A5B, 0x7A5C, 0x7A5D, 0x7A5E, 0x7A5F, 0x7A60, 0x7A61, /* 0x70 */ + 0x7A62, 0x7A63, 0x7A64, 0x7A65, 0x7A66, 0x7A67, 0x7A68, 0, /* 0x70 */ + 0x7A69, 0x7A6A, 0x7A6B, 0x7A6C, 0x7A6D, 0x7A6E, 0x7A6F, 0x7A71, /* 0x80 */ + 0x7A72, 0x7A73, 0x7A75, 0x7A7B, 0x7A7C, 0x7A7D, 0x7A7E, 0x7A82, /* 0x80 */ + 0x7A85, 0x7A87, 0x7A89, 0x7A8A, 0x7A8B, 0x7A8C, 0x7A8E, 0x7A8F, /* 0x90 */ + 0x7A90, 0x7A93, 0x7A94, 0x7A99, 0x7A9A, 0x7A9B, 0x7A9E, 0x7AA1, /* 0x90 */ + 0x7AA2, 0x8D30, 0x53D1, 0x7F5A, 0x7B4F, 0x4F10, 0x4E4F, 0x9600, /* 0xA0 */ + 0x6CD5, 0x73D0, 0x85E9, 0x5E06, 0x756A, 0x7FFB, 0x6A0A, 0x77FE, /* 0xA0 */ + 0x9492, 0x7E41, 0x51E1, 0x70E6, 0x53CD, 0x8FD4, 0x8303, 0x8D29, /* 0xB0 */ + 0x72AF, 0x996D, 0x6CDB, 0x574A, 0x82B3, 0x65B9, 0x80AA, 0x623F, /* 0xB0 */ + 0x9632, 0x59A8, 0x4EFF, 0x8BBF, 0x7EBA, 0x653E, 0x83F2, 0x975E, /* 0xC0 */ + 0x5561, 0x98DE, 0x80A5, 0x532A, 0x8BFD, 0x5420, 0x80BA, 0x5E9F, /* 0xC0 */ + 0x6CB8, 0x8D39, 0x82AC, 0x915A, 0x5429, 0x6C1B, 0x5206, 0x7EB7, /* 0xD0 */ + 0x575F, 0x711A, 0x6C7E, 0x7C89, 0x594B, 0x4EFD, 0x5FFF, 0x6124, /* 0xD0 */ + 0x7CAA, 0x4E30, 0x5C01, 0x67AB, 0x8702, 0x5CF0, 0x950B, 0x98CE, /* 0xE0 */ + 0x75AF, 0x70FD, 0x9022, 0x51AF, 0x7F1D, 0x8BBD, 0x5949, 0x51E4, /* 0xE0 */ + 0x4F5B, 0x5426, 0x592B, 0x6577, 0x80A4, 0x5B75, 0x6276, 0x62C2, /* 0xF0 */ + 0x8F90, 0x5E45, 0x6C1F, 0x7B26, 0x4F0F, 0x4FD8, 0x670D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7AA3, 0x7AA4, 0x7AA7, 0x7AA9, 0x7AAA, 0x7AAB, 0x7AAE, 0x7AAF, /* 0x40 */ + 0x7AB0, 0x7AB1, 0x7AB2, 0x7AB4, 0x7AB5, 0x7AB6, 0x7AB7, 0x7AB8, /* 0x40 */ + 0x7AB9, 0x7ABA, 0x7ABB, 0x7ABC, 0x7ABD, 0x7ABE, 0x7AC0, 0x7AC1, /* 0x50 */ + 0x7AC2, 0x7AC3, 0x7AC4, 0x7AC5, 0x7AC6, 0x7AC7, 0x7AC8, 0x7AC9, /* 0x50 */ + 0x7ACA, 0x7ACC, 0x7ACD, 0x7ACE, 0x7ACF, 0x7AD0, 0x7AD1, 0x7AD2, /* 0x60 */ + 0x7AD3, 0x7AD4, 0x7AD5, 0x7AD7, 0x7AD8, 0x7ADA, 0x7ADB, 0x7ADC, /* 0x60 */ + 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE4, 0x7AE7, 0x7AE8, 0x7AE9, 0x7AEA, /* 0x70 */ + 0x7AEB, 0x7AEC, 0x7AEE, 0x7AF0, 0x7AF1, 0x7AF2, 0x7AF3, 0, /* 0x70 */ + 0x7AF4, 0x7AF5, 0x7AF6, 0x7AF7, 0x7AF8, 0x7AFB, 0x7AFC, 0x7AFE, /* 0x80 */ + 0x7B00, 0x7B01, 0x7B02, 0x7B05, 0x7B07, 0x7B09, 0x7B0C, 0x7B0D, /* 0x80 */ + 0x7B0E, 0x7B10, 0x7B12, 0x7B13, 0x7B16, 0x7B17, 0x7B18, 0x7B1A, /* 0x90 */ + 0x7B1C, 0x7B1D, 0x7B1F, 0x7B21, 0x7B22, 0x7B23, 0x7B27, 0x7B29, /* 0x90 */ + 0x7B2D, 0x6D6E, 0x6DAA, 0x798F, 0x88B1, 0x5F17, 0x752B, 0x629A, /* 0xA0 */ + 0x8F85, 0x4FEF, 0x91DC, 0x65A7, 0x812F, 0x8151, 0x5E9C, 0x8150, /* 0xA0 */ + 0x8D74, 0x526F, 0x8986, 0x8D4B, 0x590D, 0x5085, 0x4ED8, 0x961C, /* 0xB0 */ + 0x7236, 0x8179, 0x8D1F, 0x5BCC, 0x8BA3, 0x9644, 0x5987, 0x7F1A, /* 0xB0 */ + 0x5490, 0x5676, 0x560E, 0x8BE5, 0x6539, 0x6982, 0x9499, 0x76D6, /* 0xC0 */ + 0x6E89, 0x5E72, 0x7518, 0x6746, 0x67D1, 0x7AFF, 0x809D, 0x8D76, /* 0xC0 */ + 0x611F, 0x79C6, 0x6562, 0x8D63, 0x5188, 0x521A, 0x94A2, 0x7F38, /* 0xD0 */ + 0x809B, 0x7EB2, 0x5C97, 0x6E2F, 0x6760, 0x7BD9, 0x768B, 0x9AD8, /* 0xD0 */ + 0x818F, 0x7F94, 0x7CD5, 0x641E, 0x9550, 0x7A3F, 0x544A, 0x54E5, /* 0xE0 */ + 0x6B4C, 0x6401, 0x6208, 0x9E3D, 0x80F3, 0x7599, 0x5272, 0x9769, /* 0xE0 */ + 0x845B, 0x683C, 0x86E4, 0x9601, 0x9694, 0x94EC, 0x4E2A, 0x5404, /* 0xF0 */ + 0x7ED9, 0x6839, 0x8DDF, 0x8015, 0x66F4, 0x5E9A, 0x7FB9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7B2F, 0x7B30, 0x7B32, 0x7B34, 0x7B35, 0x7B36, 0x7B37, 0x7B39, /* 0x40 */ + 0x7B3B, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41, 0x7B42, 0x7B43, 0x7B44, /* 0x40 */ + 0x7B46, 0x7B48, 0x7B4A, 0x7B4D, 0x7B4E, 0x7B53, 0x7B55, 0x7B57, /* 0x50 */ + 0x7B59, 0x7B5C, 0x7B5E, 0x7B5F, 0x7B61, 0x7B63, 0x7B64, 0x7B65, /* 0x50 */ + 0x7B66, 0x7B67, 0x7B68, 0x7B69, 0x7B6A, 0x7B6B, 0x7B6C, 0x7B6D, /* 0x60 */ + 0x7B6F, 0x7B70, 0x7B73, 0x7B74, 0x7B76, 0x7B78, 0x7B7A, 0x7B7C, /* 0x60 */ + 0x7B7D, 0x7B7F, 0x7B81, 0x7B82, 0x7B83, 0x7B84, 0x7B86, 0x7B87, /* 0x70 */ + 0x7B88, 0x7B89, 0x7B8A, 0x7B8B, 0x7B8C, 0x7B8E, 0x7B8F, 0, /* 0x70 */ + 0x7B91, 0x7B92, 0x7B93, 0x7B96, 0x7B98, 0x7B99, 0x7B9A, 0x7B9B, /* 0x80 */ + 0x7B9E, 0x7B9F, 0x7BA0, 0x7BA3, 0x7BA4, 0x7BA5, 0x7BAE, 0x7BAF, /* 0x80 */ + 0x7BB0, 0x7BB2, 0x7BB3, 0x7BB5, 0x7BB6, 0x7BB7, 0x7BB9, 0x7BBA, /* 0x90 */ + 0x7BBB, 0x7BBC, 0x7BBD, 0x7BBE, 0x7BBF, 0x7BC0, 0x7BC2, 0x7BC3, /* 0x90 */ + 0x7BC4, 0x57C2, 0x803F, 0x6897, 0x5DE5, 0x653B, 0x529F, 0x606D, /* 0xA0 */ + 0x9F9A, 0x4F9B, 0x8EAC, 0x516C, 0x5BAB, 0x5F13, 0x5DE9, 0x6C5E, /* 0xA0 */ + 0x62F1, 0x8D21, 0x5171, 0x94A9, 0x52FE, 0x6C9F, 0x82DF, 0x72D7, /* 0xB0 */ + 0x57A2, 0x6784, 0x8D2D, 0x591F, 0x8F9C, 0x83C7, 0x5495, 0x7B8D, /* 0xB0 */ + 0x4F30, 0x6CBD, 0x5B64, 0x59D1, 0x9F13, 0x53E4, 0x86CA, 0x9AA8, /* 0xC0 */ + 0x8C37, 0x80A1, 0x6545, 0x987E, 0x56FA, 0x96C7, 0x522E, 0x74DC, /* 0xC0 */ + 0x5250, 0x5BE1, 0x6302, 0x8902, 0x4E56, 0x62D0, 0x602A, 0x68FA, /* 0xD0 */ + 0x5173, 0x5B98, 0x51A0, 0x89C2, 0x7BA1, 0x9986, 0x7F50, 0x60EF, /* 0xD0 */ + 0x704C, 0x8D2F, 0x5149, 0x5E7F, 0x901B, 0x7470, 0x89C4, 0x572D, /* 0xE0 */ + 0x7845, 0x5F52, 0x9F9F, 0x95FA, 0x8F68, 0x9B3C, 0x8BE1, 0x7678, /* 0xE0 */ + 0x6842, 0x67DC, 0x8DEA, 0x8D35, 0x523D, 0x8F8A, 0x6EDA, 0x68CD, /* 0xF0 */ + 0x9505, 0x90ED, 0x56FD, 0x679C, 0x88F9, 0x8FC7, 0x54C8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7BC5, 0x7BC8, 0x7BC9, 0x7BCA, 0x7BCB, 0x7BCD, 0x7BCE, 0x7BCF, /* 0x40 */ + 0x7BD0, 0x7BD2, 0x7BD4, 0x7BD5, 0x7BD6, 0x7BD7, 0x7BD8, 0x7BDB, /* 0x40 */ + 0x7BDC, 0x7BDE, 0x7BDF, 0x7BE0, 0x7BE2, 0x7BE3, 0x7BE4, 0x7BE7, /* 0x50 */ + 0x7BE8, 0x7BE9, 0x7BEB, 0x7BEC, 0x7BED, 0x7BEF, 0x7BF0, 0x7BF2, /* 0x50 */ + 0x7BF3, 0x7BF4, 0x7BF5, 0x7BF6, 0x7BF8, 0x7BF9, 0x7BFA, 0x7BFB, /* 0x60 */ + 0x7BFD, 0x7BFF, 0x7C00, 0x7C01, 0x7C02, 0x7C03, 0x7C04, 0x7C05, /* 0x60 */ + 0x7C06, 0x7C08, 0x7C09, 0x7C0A, 0x7C0D, 0x7C0E, 0x7C10, 0x7C11, /* 0x70 */ + 0x7C12, 0x7C13, 0x7C14, 0x7C15, 0x7C17, 0x7C18, 0x7C19, 0, /* 0x70 */ + 0x7C1A, 0x7C1B, 0x7C1C, 0x7C1D, 0x7C1E, 0x7C20, 0x7C21, 0x7C22, /* 0x80 */ + 0x7C23, 0x7C24, 0x7C25, 0x7C28, 0x7C29, 0x7C2B, 0x7C2C, 0x7C2D, /* 0x80 */ + 0x7C2E, 0x7C2F, 0x7C30, 0x7C31, 0x7C32, 0x7C33, 0x7C34, 0x7C35, /* 0x90 */ + 0x7C36, 0x7C37, 0x7C39, 0x7C3A, 0x7C3B, 0x7C3C, 0x7C3D, 0x7C3E, /* 0x90 */ + 0x7C42, 0x9AB8, 0x5B69, 0x6D77, 0x6C26, 0x4EA5, 0x5BB3, 0x9A87, /* 0xA0 */ + 0x9163, 0x61A8, 0x90AF, 0x97E9, 0x542B, 0x6DB5, 0x5BD2, 0x51FD, /* 0xA0 */ + 0x558A, 0x7F55, 0x7FF0, 0x64BC, 0x634D, 0x65F1, 0x61BE, 0x608D, /* 0xB0 */ + 0x710A, 0x6C57, 0x6C49, 0x592F, 0x676D, 0x822A, 0x58D5, 0x568E, /* 0xB0 */ + 0x8C6A, 0x6BEB, 0x90DD, 0x597D, 0x8017, 0x53F7, 0x6D69, 0x5475, /* 0xC0 */ + 0x559D, 0x8377, 0x83CF, 0x6838, 0x79BE, 0x548C, 0x4F55, 0x5408, /* 0xC0 */ + 0x76D2, 0x8C89, 0x9602, 0x6CB3, 0x6DB8, 0x8D6B, 0x8910, 0x9E64, /* 0xD0 */ + 0x8D3A, 0x563F, 0x9ED1, 0x75D5, 0x5F88, 0x72E0, 0x6068, 0x54FC, /* 0xD0 */ + 0x4EA8, 0x6A2A, 0x8861, 0x6052, 0x8F70, 0x54C4, 0x70D8, 0x8679, /* 0xE0 */ + 0x9E3F, 0x6D2A, 0x5B8F, 0x5F18, 0x7EA2, 0x5589, 0x4FAF, 0x7334, /* 0xE0 */ + 0x543C, 0x539A, 0x5019, 0x540E, 0x547C, 0x4E4E, 0x5FFD, 0x745A, /* 0xF0 */ + 0x58F6, 0x846B, 0x80E1, 0x8774, 0x72D0, 0x7CCA, 0x6E56 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7C43, 0x7C44, 0x7C45, 0x7C46, 0x7C47, 0x7C48, 0x7C49, 0x7C4A, /* 0x40 */ + 0x7C4B, 0x7C4C, 0x7C4E, 0x7C4F, 0x7C50, 0x7C51, 0x7C52, 0x7C53, /* 0x40 */ + 0x7C54, 0x7C55, 0x7C56, 0x7C57, 0x7C58, 0x7C59, 0x7C5A, 0x7C5B, /* 0x50 */ + 0x7C5C, 0x7C5D, 0x7C5E, 0x7C5F, 0x7C60, 0x7C61, 0x7C62, 0x7C63, /* 0x50 */ + 0x7C64, 0x7C65, 0x7C66, 0x7C67, 0x7C68, 0x7C69, 0x7C6A, 0x7C6B, /* 0x60 */ + 0x7C6C, 0x7C6D, 0x7C6E, 0x7C6F, 0x7C70, 0x7C71, 0x7C72, 0x7C75, /* 0x60 */ + 0x7C76, 0x7C77, 0x7C78, 0x7C79, 0x7C7A, 0x7C7E, 0x7C7F, 0x7C80, /* 0x70 */ + 0x7C81, 0x7C82, 0x7C83, 0x7C84, 0x7C85, 0x7C86, 0x7C87, 0, /* 0x70 */ + 0x7C88, 0x7C8A, 0x7C8B, 0x7C8C, 0x7C8D, 0x7C8E, 0x7C8F, 0x7C90, /* 0x80 */ + 0x7C93, 0x7C94, 0x7C96, 0x7C99, 0x7C9A, 0x7C9B, 0x7CA0, 0x7CA1, /* 0x80 */ + 0x7CA3, 0x7CA6, 0x7CA7, 0x7CA8, 0x7CA9, 0x7CAB, 0x7CAC, 0x7CAD, /* 0x90 */ + 0x7CAF, 0x7CB0, 0x7CB4, 0x7CB5, 0x7CB6, 0x7CB7, 0x7CB8, 0x7CBA, /* 0x90 */ + 0x7CBB, 0x5F27, 0x864E, 0x552C, 0x62A4, 0x4E92, 0x6CAA, 0x6237, /* 0xA0 */ + 0x82B1, 0x54D7, 0x534E, 0x733E, 0x6ED1, 0x753B, 0x5212, 0x5316, /* 0xA0 */ + 0x8BDD, 0x69D0, 0x5F8A, 0x6000, 0x6DEE, 0x574F, 0x6B22, 0x73AF, /* 0xB0 */ + 0x6853, 0x8FD8, 0x7F13, 0x6362, 0x60A3, 0x5524, 0x75EA, 0x8C62, /* 0xB0 */ + 0x7115, 0x6DA3, 0x5BA6, 0x5E7B, 0x8352, 0x614C, 0x9EC4, 0x78FA, /* 0xC0 */ + 0x8757, 0x7C27, 0x7687, 0x51F0, 0x60F6, 0x714C, 0x6643, 0x5E4C, /* 0xC0 */ + 0x604D, 0x8C0E, 0x7070, 0x6325, 0x8F89, 0x5FBD, 0x6062, 0x86D4, /* 0xD0 */ + 0x56DE, 0x6BC1, 0x6094, 0x6167, 0x5349, 0x60E0, 0x6666, 0x8D3F, /* 0xD0 */ + 0x79FD, 0x4F1A, 0x70E9, 0x6C47, 0x8BB3, 0x8BF2, 0x7ED8, 0x8364, /* 0xE0 */ + 0x660F, 0x5A5A, 0x9B42, 0x6D51, 0x6DF7, 0x8C41, 0x6D3B, 0x4F19, /* 0xE0 */ + 0x706B, 0x83B7, 0x6216, 0x60D1, 0x970D, 0x8D27, 0x7978, 0x51FB, /* 0xF0 */ + 0x573E, 0x57FA, 0x673A, 0x7578, 0x7A3D, 0x79EF, 0x7B95 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7CBF, 0x7CC0, 0x7CC2, 0x7CC3, 0x7CC4, 0x7CC6, 0x7CC9, 0x7CCB, /* 0x40 */ + 0x7CCE, 0x7CCF, 0x7CD0, 0x7CD1, 0x7CD2, 0x7CD3, 0x7CD4, 0x7CD8, /* 0x40 */ + 0x7CDA, 0x7CDB, 0x7CDD, 0x7CDE, 0x7CE1, 0x7CE2, 0x7CE3, 0x7CE4, /* 0x50 */ + 0x7CE5, 0x7CE6, 0x7CE7, 0x7CE9, 0x7CEA, 0x7CEB, 0x7CEC, 0x7CED, /* 0x50 */ + 0x7CEE, 0x7CF0, 0x7CF1, 0x7CF2, 0x7CF3, 0x7CF4, 0x7CF5, 0x7CF6, /* 0x60 */ + 0x7CF7, 0x7CF9, 0x7CFA, 0x7CFC, 0x7CFD, 0x7CFE, 0x7CFF, 0x7D00, /* 0x60 */ + 0x7D01, 0x7D02, 0x7D03, 0x7D04, 0x7D05, 0x7D06, 0x7D07, 0x7D08, /* 0x70 */ + 0x7D09, 0x7D0B, 0x7D0C, 0x7D0D, 0x7D0E, 0x7D0F, 0x7D10, 0, /* 0x70 */ + 0x7D11, 0x7D12, 0x7D13, 0x7D14, 0x7D15, 0x7D16, 0x7D17, 0x7D18, /* 0x80 */ + 0x7D19, 0x7D1A, 0x7D1B, 0x7D1C, 0x7D1D, 0x7D1E, 0x7D1F, 0x7D21, /* 0x80 */ + 0x7D23, 0x7D24, 0x7D25, 0x7D26, 0x7D28, 0x7D29, 0x7D2A, 0x7D2C, /* 0x90 */ + 0x7D2D, 0x7D2E, 0x7D30, 0x7D31, 0x7D32, 0x7D33, 0x7D34, 0x7D35, /* 0x90 */ + 0x7D36, 0x808C, 0x9965, 0x8FF9, 0x6FC0, 0x8BA5, 0x9E21, 0x59EC, /* 0xA0 */ + 0x7EE9, 0x7F09, 0x5409, 0x6781, 0x68D8, 0x8F91, 0x7C4D, 0x96C6, /* 0xA0 */ + 0x53CA, 0x6025, 0x75BE, 0x6C72, 0x5373, 0x5AC9, 0x7EA7, 0x6324, /* 0xB0 */ + 0x51E0, 0x810A, 0x5DF1, 0x84DF, 0x6280, 0x5180, 0x5B63, 0x4F0E, /* 0xB0 */ + 0x796D, 0x5242, 0x60B8, 0x6D4E, 0x5BC4, 0x5BC2, 0x8BA1, 0x8BB0, /* 0xC0 */ + 0x65E2, 0x5FCC, 0x9645, 0x5993, 0x7EE7, 0x7EAA, 0x5609, 0x67B7, /* 0xC0 */ + 0x5939, 0x4F73, 0x5BB6, 0x52A0, 0x835A, 0x988A, 0x8D3E, 0x7532, /* 0xD0 */ + 0x94BE, 0x5047, 0x7A3C, 0x4EF7, 0x67B6, 0x9A7E, 0x5AC1, 0x6B7C, /* 0xD0 */ + 0x76D1, 0x575A, 0x5C16, 0x7B3A, 0x95F4, 0x714E, 0x517C, 0x80A9, /* 0xE0 */ + 0x8270, 0x5978, 0x7F04, 0x8327, 0x68C0, 0x67EC, 0x78B1, 0x7877, /* 0xE0 */ + 0x62E3, 0x6361, 0x7B80, 0x4FED, 0x526A, 0x51CF, 0x8350, 0x69DB, /* 0xF0 */ + 0x9274, 0x8DF5, 0x8D31, 0x89C1, 0x952E, 0x7BAD, 0x4EF6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D37, 0x7D38, 0x7D39, 0x7D3A, 0x7D3B, 0x7D3C, 0x7D3D, 0x7D3E, /* 0x40 */ + 0x7D3F, 0x7D40, 0x7D41, 0x7D42, 0x7D43, 0x7D44, 0x7D45, 0x7D46, /* 0x40 */ + 0x7D47, 0x7D48, 0x7D49, 0x7D4A, 0x7D4B, 0x7D4C, 0x7D4D, 0x7D4E, /* 0x50 */ + 0x7D4F, 0x7D50, 0x7D51, 0x7D52, 0x7D53, 0x7D54, 0x7D55, 0x7D56, /* 0x50 */ + 0x7D57, 0x7D58, 0x7D59, 0x7D5A, 0x7D5B, 0x7D5C, 0x7D5D, 0x7D5E, /* 0x60 */ + 0x7D5F, 0x7D60, 0x7D61, 0x7D62, 0x7D63, 0x7D64, 0x7D65, 0x7D66, /* 0x60 */ + 0x7D67, 0x7D68, 0x7D69, 0x7D6A, 0x7D6B, 0x7D6C, 0x7D6D, 0x7D6F, /* 0x70 */ + 0x7D70, 0x7D71, 0x7D72, 0x7D73, 0x7D74, 0x7D75, 0x7D76, 0, /* 0x70 */ + 0x7D78, 0x7D79, 0x7D7A, 0x7D7B, 0x7D7C, 0x7D7D, 0x7D7E, 0x7D7F, /* 0x80 */ + 0x7D80, 0x7D81, 0x7D82, 0x7D83, 0x7D84, 0x7D85, 0x7D86, 0x7D87, /* 0x80 */ + 0x7D88, 0x7D89, 0x7D8A, 0x7D8B, 0x7D8C, 0x7D8D, 0x7D8E, 0x7D8F, /* 0x90 */ + 0x7D90, 0x7D91, 0x7D92, 0x7D93, 0x7D94, 0x7D95, 0x7D96, 0x7D97, /* 0x90 */ + 0x7D98, 0x5065, 0x8230, 0x5251, 0x996F, 0x6E10, 0x6E85, 0x6DA7, /* 0xA0 */ + 0x5EFA, 0x50F5, 0x59DC, 0x5C06, 0x6D46, 0x6C5F, 0x7586, 0x848B, /* 0xA0 */ + 0x6868, 0x5956, 0x8BB2, 0x5320, 0x9171, 0x964D, 0x8549, 0x6912, /* 0xB0 */ + 0x7901, 0x7126, 0x80F6, 0x4EA4, 0x90CA, 0x6D47, 0x9A84, 0x5A07, /* 0xB0 */ + 0x56BC, 0x6405, 0x94F0, 0x77EB, 0x4FA5, 0x811A, 0x72E1, 0x89D2, /* 0xC0 */ + 0x997A, 0x7F34, 0x7EDE, 0x527F, 0x6559, 0x9175, 0x8F7F, 0x8F83, /* 0xC0 */ + 0x53EB, 0x7A96, 0x63ED, 0x63A5, 0x7686, 0x79F8, 0x8857, 0x9636, /* 0xD0 */ + 0x622A, 0x52AB, 0x8282, 0x6854, 0x6770, 0x6377, 0x776B, 0x7AED, /* 0xD0 */ + 0x6D01, 0x7ED3, 0x89E3, 0x59D0, 0x6212, 0x85C9, 0x82A5, 0x754C, /* 0xE0 */ + 0x501F, 0x4ECB, 0x75A5, 0x8BEB, 0x5C4A, 0x5DFE, 0x7B4B, 0x65A4, /* 0xE0 */ + 0x91D1, 0x4ECA, 0x6D25, 0x895F, 0x7D27, 0x9526, 0x4EC5, 0x8C28, /* 0xF0 */ + 0x8FDB, 0x9773, 0x664B, 0x7981, 0x8FD1, 0x70EC, 0x6D78 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D99, 0x7D9A, 0x7D9B, 0x7D9C, 0x7D9D, 0x7D9E, 0x7D9F, 0x7DA0, /* 0x40 */ + 0x7DA1, 0x7DA2, 0x7DA3, 0x7DA4, 0x7DA5, 0x7DA7, 0x7DA8, 0x7DA9, /* 0x40 */ + 0x7DAA, 0x7DAB, 0x7DAC, 0x7DAD, 0x7DAF, 0x7DB0, 0x7DB1, 0x7DB2, /* 0x50 */ + 0x7DB3, 0x7DB4, 0x7DB5, 0x7DB6, 0x7DB7, 0x7DB8, 0x7DB9, 0x7DBA, /* 0x50 */ + 0x7DBB, 0x7DBC, 0x7DBD, 0x7DBE, 0x7DBF, 0x7DC0, 0x7DC1, 0x7DC2, /* 0x60 */ + 0x7DC3, 0x7DC4, 0x7DC5, 0x7DC6, 0x7DC7, 0x7DC8, 0x7DC9, 0x7DCA, /* 0x60 */ + 0x7DCB, 0x7DCC, 0x7DCD, 0x7DCE, 0x7DCF, 0x7DD0, 0x7DD1, 0x7DD2, /* 0x70 */ + 0x7DD3, 0x7DD4, 0x7DD5, 0x7DD6, 0x7DD7, 0x7DD8, 0x7DD9, 0, /* 0x70 */ + 0x7DDA, 0x7DDB, 0x7DDC, 0x7DDD, 0x7DDE, 0x7DDF, 0x7DE0, 0x7DE1, /* 0x80 */ + 0x7DE2, 0x7DE3, 0x7DE4, 0x7DE5, 0x7DE6, 0x7DE7, 0x7DE8, 0x7DE9, /* 0x80 */ + 0x7DEA, 0x7DEB, 0x7DEC, 0x7DED, 0x7DEE, 0x7DEF, 0x7DF0, 0x7DF1, /* 0x90 */ + 0x7DF2, 0x7DF3, 0x7DF4, 0x7DF5, 0x7DF6, 0x7DF7, 0x7DF8, 0x7DF9, /* 0x90 */ + 0x7DFA, 0x5C3D, 0x52B2, 0x8346, 0x5162, 0x830E, 0x775B, 0x6676, /* 0xA0 */ + 0x9CB8, 0x4EAC, 0x60CA, 0x7CBE, 0x7CB3, 0x7ECF, 0x4E95, 0x8B66, /* 0xA0 */ + 0x666F, 0x9888, 0x9759, 0x5883, 0x656C, 0x955C, 0x5F84, 0x75C9, /* 0xB0 */ + 0x9756, 0x7ADF, 0x7ADE, 0x51C0, 0x70AF, 0x7A98, 0x63EA, 0x7A76, /* 0xB0 */ + 0x7EA0, 0x7396, 0x97ED, 0x4E45, 0x7078, 0x4E5D, 0x9152, 0x53A9, /* 0xC0 */ + 0x6551, 0x65E7, 0x81FC, 0x8205, 0x548E, 0x5C31, 0x759A, 0x97A0, /* 0xC0 */ + 0x62D8, 0x72D9, 0x75BD, 0x5C45, 0x9A79, 0x83CA, 0x5C40, 0x5480, /* 0xD0 */ + 0x77E9, 0x4E3E, 0x6CAE, 0x805A, 0x62D2, 0x636E, 0x5DE8, 0x5177, /* 0xD0 */ + 0x8DDD, 0x8E1E, 0x952F, 0x4FF1, 0x53E5, 0x60E7, 0x70AC, 0x5267, /* 0xE0 */ + 0x6350, 0x9E43, 0x5A1F, 0x5026, 0x7737, 0x5377, 0x7EE2, 0x6485, /* 0xE0 */ + 0x652B, 0x6289, 0x6398, 0x5014, 0x7235, 0x89C9, 0x51B3, 0x8BC0, /* 0xF0 */ + 0x7EDD, 0x5747, 0x83CC, 0x94A7, 0x519B, 0x541B, 0x5CFB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7DFB, 0x7DFC, 0x7DFD, 0x7DFE, 0x7DFF, 0x7E00, 0x7E01, 0x7E02, /* 0x40 */ + 0x7E03, 0x7E04, 0x7E05, 0x7E06, 0x7E07, 0x7E08, 0x7E09, 0x7E0A, /* 0x40 */ + 0x7E0B, 0x7E0C, 0x7E0D, 0x7E0E, 0x7E0F, 0x7E10, 0x7E11, 0x7E12, /* 0x50 */ + 0x7E13, 0x7E14, 0x7E15, 0x7E16, 0x7E17, 0x7E18, 0x7E19, 0x7E1A, /* 0x50 */ + 0x7E1B, 0x7E1C, 0x7E1D, 0x7E1E, 0x7E1F, 0x7E20, 0x7E21, 0x7E22, /* 0x60 */ + 0x7E23, 0x7E24, 0x7E25, 0x7E26, 0x7E27, 0x7E28, 0x7E29, 0x7E2A, /* 0x60 */ + 0x7E2B, 0x7E2C, 0x7E2D, 0x7E2E, 0x7E2F, 0x7E30, 0x7E31, 0x7E32, /* 0x70 */ + 0x7E33, 0x7E34, 0x7E35, 0x7E36, 0x7E37, 0x7E38, 0x7E39, 0, /* 0x70 */ + 0x7E3A, 0x7E3C, 0x7E3D, 0x7E3E, 0x7E3F, 0x7E40, 0x7E42, 0x7E43, /* 0x80 */ + 0x7E44, 0x7E45, 0x7E46, 0x7E48, 0x7E49, 0x7E4A, 0x7E4B, 0x7E4C, /* 0x80 */ + 0x7E4D, 0x7E4E, 0x7E4F, 0x7E50, 0x7E51, 0x7E52, 0x7E53, 0x7E54, /* 0x90 */ + 0x7E55, 0x7E56, 0x7E57, 0x7E58, 0x7E59, 0x7E5A, 0x7E5B, 0x7E5C, /* 0x90 */ + 0x7E5D, 0x4FCA, 0x7AE3, 0x6D5A, 0x90E1, 0x9A8F, 0x5580, 0x5496, /* 0xA0 */ + 0x5361, 0x54AF, 0x5F00, 0x63E9, 0x6977, 0x51EF, 0x6168, 0x520A, /* 0xA0 */ + 0x582A, 0x52D8, 0x574E, 0x780D, 0x770B, 0x5EB7, 0x6177, 0x7CE0, /* 0xB0 */ + 0x625B, 0x6297, 0x4EA2, 0x7095, 0x8003, 0x62F7, 0x70E4, 0x9760, /* 0xB0 */ + 0x5777, 0x82DB, 0x67EF, 0x68F5, 0x78D5, 0x9897, 0x79D1, 0x58F3, /* 0xC0 */ + 0x54B3, 0x53EF, 0x6E34, 0x514B, 0x523B, 0x5BA2, 0x8BFE, 0x80AF, /* 0xC0 */ + 0x5543, 0x57A6, 0x6073, 0x5751, 0x542D, 0x7A7A, 0x6050, 0x5B54, /* 0xD0 */ + 0x63A7, 0x62A0, 0x53E3, 0x6263, 0x5BC7, 0x67AF, 0x54ED, 0x7A9F, /* 0xD0 */ + 0x82E6, 0x9177, 0x5E93, 0x88E4, 0x5938, 0x57AE, 0x630E, 0x8DE8, /* 0xE0 */ + 0x80EF, 0x5757, 0x7B77, 0x4FA9, 0x5FEB, 0x5BBD, 0x6B3E, 0x5321, /* 0xE0 */ + 0x7B50, 0x72C2, 0x6846, 0x77FF, 0x7736, 0x65F7, 0x51B5, 0x4E8F, /* 0xF0 */ + 0x76D4, 0x5CBF, 0x7AA5, 0x8475, 0x594E, 0x9B41, 0x5080 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7E5E, 0x7E5F, 0x7E60, 0x7E61, 0x7E62, 0x7E63, 0x7E64, 0x7E65, /* 0x40 */ + 0x7E66, 0x7E67, 0x7E68, 0x7E69, 0x7E6A, 0x7E6B, 0x7E6C, 0x7E6D, /* 0x40 */ + 0x7E6E, 0x7E6F, 0x7E70, 0x7E71, 0x7E72, 0x7E73, 0x7E74, 0x7E75, /* 0x50 */ + 0x7E76, 0x7E77, 0x7E78, 0x7E79, 0x7E7A, 0x7E7B, 0x7E7C, 0x7E7D, /* 0x50 */ + 0x7E7E, 0x7E7F, 0x7E80, 0x7E81, 0x7E83, 0x7E84, 0x7E85, 0x7E86, /* 0x60 */ + 0x7E87, 0x7E88, 0x7E89, 0x7E8A, 0x7E8B, 0x7E8C, 0x7E8D, 0x7E8E, /* 0x60 */ + 0x7E8F, 0x7E90, 0x7E91, 0x7E92, 0x7E93, 0x7E94, 0x7E95, 0x7E96, /* 0x70 */ + 0x7E97, 0x7E98, 0x7E99, 0x7E9A, 0x7E9C, 0x7E9D, 0x7E9E, 0, /* 0x70 */ + 0x7EAE, 0x7EB4, 0x7EBB, 0x7EBC, 0x7ED6, 0x7EE4, 0x7EEC, 0x7EF9, /* 0x80 */ + 0x7F0A, 0x7F10, 0x7F1E, 0x7F37, 0x7F39, 0x7F3B, 0x7F3C, 0x7F3D, /* 0x80 */ + 0x7F3E, 0x7F3F, 0x7F40, 0x7F41, 0x7F43, 0x7F46, 0x7F47, 0x7F48, /* 0x90 */ + 0x7F49, 0x7F4A, 0x7F4B, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F4F, 0x7F52, /* 0x90 */ + 0x7F53, 0x9988, 0x6127, 0x6E83, 0x5764, 0x6606, 0x6346, 0x56F0, /* 0xA0 */ + 0x62EC, 0x6269, 0x5ED3, 0x9614, 0x5783, 0x62C9, 0x5587, 0x8721, /* 0xA0 */ + 0x814A, 0x8FA3, 0x5566, 0x83B1, 0x6765, 0x8D56, 0x84DD, 0x5A6A, /* 0xB0 */ + 0x680F, 0x62E6, 0x7BEE, 0x9611, 0x5170, 0x6F9C, 0x8C30, 0x63FD, /* 0xB0 */ + 0x89C8, 0x61D2, 0x7F06, 0x70C2, 0x6EE5, 0x7405, 0x6994, 0x72FC, /* 0xC0 */ + 0x5ECA, 0x90CE, 0x6717, 0x6D6A, 0x635E, 0x52B3, 0x7262, 0x8001, /* 0xC0 */ + 0x4F6C, 0x59E5, 0x916A, 0x70D9, 0x6D9D, 0x52D2, 0x4E50, 0x96F7, /* 0xD0 */ + 0x956D, 0x857E, 0x78CA, 0x7D2F, 0x5121, 0x5792, 0x64C2, 0x808B, /* 0xD0 */ + 0x7C7B, 0x6CEA, 0x68F1, 0x695E, 0x51B7, 0x5398, 0x68A8, 0x7281, /* 0xE0 */ + 0x9ECE, 0x7BF1, 0x72F8, 0x79BB, 0x6F13, 0x7406, 0x674E, 0x91CC, /* 0xE0 */ + 0x9CA4, 0x793C, 0x8389, 0x8354, 0x540F, 0x6817, 0x4E3D, 0x5389, /* 0xF0 */ + 0x52B1, 0x783E, 0x5386, 0x5229, 0x5088, 0x4F8B, 0x4FD0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7F56, 0x7F59, 0x7F5B, 0x7F5C, 0x7F5D, 0x7F5E, 0x7F60, 0x7F63, /* 0x40 */ + 0x7F64, 0x7F65, 0x7F66, 0x7F67, 0x7F6B, 0x7F6C, 0x7F6D, 0x7F6F, /* 0x40 */ + 0x7F70, 0x7F73, 0x7F75, 0x7F76, 0x7F77, 0x7F78, 0x7F7A, 0x7F7B, /* 0x50 */ + 0x7F7C, 0x7F7D, 0x7F7F, 0x7F80, 0x7F82, 0x7F83, 0x7F84, 0x7F85, /* 0x50 */ + 0x7F86, 0x7F87, 0x7F88, 0x7F89, 0x7F8B, 0x7F8D, 0x7F8F, 0x7F90, /* 0x60 */ + 0x7F91, 0x7F92, 0x7F93, 0x7F95, 0x7F96, 0x7F97, 0x7F98, 0x7F99, /* 0x60 */ + 0x7F9B, 0x7F9C, 0x7FA0, 0x7FA2, 0x7FA3, 0x7FA5, 0x7FA6, 0x7FA8, /* 0x70 */ + 0x7FA9, 0x7FAA, 0x7FAB, 0x7FAC, 0x7FAD, 0x7FAE, 0x7FB1, 0, /* 0x70 */ + 0x7FB3, 0x7FB4, 0x7FB5, 0x7FB6, 0x7FB7, 0x7FBA, 0x7FBB, 0x7FBE, /* 0x80 */ + 0x7FC0, 0x7FC2, 0x7FC3, 0x7FC4, 0x7FC6, 0x7FC7, 0x7FC8, 0x7FC9, /* 0x80 */ + 0x7FCB, 0x7FCD, 0x7FCF, 0x7FD0, 0x7FD1, 0x7FD2, 0x7FD3, 0x7FD6, /* 0x90 */ + 0x7FD7, 0x7FD9, 0x7FDA, 0x7FDB, 0x7FDC, 0x7FDD, 0x7FDE, 0x7FE2, /* 0x90 */ + 0x7FE3, 0x75E2, 0x7ACB, 0x7C92, 0x6CA5, 0x96B6, 0x529B, 0x7483, /* 0xA0 */ + 0x54E9, 0x4FE9, 0x8054, 0x83B2, 0x8FDE, 0x9570, 0x5EC9, 0x601C, /* 0xA0 */ + 0x6D9F, 0x5E18, 0x655B, 0x8138, 0x94FE, 0x604B, 0x70BC, 0x7EC3, /* 0xB0 */ + 0x7CAE, 0x51C9, 0x6881, 0x7CB1, 0x826F, 0x4E24, 0x8F86, 0x91CF, /* 0xB0 */ + 0x667E, 0x4EAE, 0x8C05, 0x64A9, 0x804A, 0x50DA, 0x7597, 0x71CE, /* 0xC0 */ + 0x5BE5, 0x8FBD, 0x6F66, 0x4E86, 0x6482, 0x9563, 0x5ED6, 0x6599, /* 0xC0 */ + 0x5217, 0x88C2, 0x70C8, 0x52A3, 0x730E, 0x7433, 0x6797, 0x78F7, /* 0xD0 */ + 0x9716, 0x4E34, 0x90BB, 0x9CDE, 0x6DCB, 0x51DB, 0x8D41, 0x541D, /* 0xD0 */ + 0x62CE, 0x73B2, 0x83F1, 0x96F6, 0x9F84, 0x94C3, 0x4F36, 0x7F9A, /* 0xE0 */ + 0x51CC, 0x7075, 0x9675, 0x5CAD, 0x9886, 0x53E6, 0x4EE4, 0x6E9C, /* 0xE0 */ + 0x7409, 0x69B4, 0x786B, 0x998F, 0x7559, 0x5218, 0x7624, 0x6D41, /* 0xF0 */ + 0x67F3, 0x516D, 0x9F99, 0x804B, 0x5499, 0x7B3C, 0x7ABF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7FE4, 0x7FE7, 0x7FE8, 0x7FEA, 0x7FEB, 0x7FEC, 0x7FED, 0x7FEF, /* 0x40 */ + 0x7FF2, 0x7FF4, 0x7FF5, 0x7FF6, 0x7FF7, 0x7FF8, 0x7FF9, 0x7FFA, /* 0x40 */ + 0x7FFD, 0x7FFE, 0x7FFF, 0x8002, 0x8007, 0x8008, 0x8009, 0x800A, /* 0x50 */ + 0x800E, 0x800F, 0x8011, 0x8013, 0x801A, 0x801B, 0x801D, 0x801E, /* 0x50 */ + 0x801F, 0x8021, 0x8023, 0x8024, 0x802B, 0x802C, 0x802D, 0x802E, /* 0x60 */ + 0x802F, 0x8030, 0x8032, 0x8034, 0x8039, 0x803A, 0x803C, 0x803E, /* 0x60 */ + 0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804E, /* 0x70 */ + 0x804F, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0, /* 0x70 */ + 0x8059, 0x805B, 0x805C, 0x805D, 0x805E, 0x805F, 0x8060, 0x8061, /* 0x80 */ + 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806B, /* 0x80 */ + 0x806C, 0x806D, 0x806E, 0x806F, 0x8070, 0x8072, 0x8073, 0x8074, /* 0x90 */ + 0x8075, 0x8076, 0x8077, 0x8078, 0x8079, 0x807A, 0x807B, 0x807C, /* 0x90 */ + 0x807D, 0x9686, 0x5784, 0x62E2, 0x9647, 0x697C, 0x5A04, 0x6402, /* 0xA0 */ + 0x7BD3, 0x6F0F, 0x964B, 0x82A6, 0x5362, 0x9885, 0x5E90, 0x7089, /* 0xA0 */ + 0x63B3, 0x5364, 0x864F, 0x9C81, 0x9E93, 0x788C, 0x9732, 0x8DEF, /* 0xB0 */ + 0x8D42, 0x9E7F, 0x6F5E, 0x7984, 0x5F55, 0x9646, 0x622E, 0x9A74, /* 0xB0 */ + 0x5415, 0x94DD, 0x4FA3, 0x65C5, 0x5C65, 0x5C61, 0x7F15, 0x8651, /* 0xC0 */ + 0x6C2F, 0x5F8B, 0x7387, 0x6EE4, 0x7EFF, 0x5CE6, 0x631B, 0x5B6A, /* 0xC0 */ + 0x6EE6, 0x5375, 0x4E71, 0x63A0, 0x7565, 0x62A1, 0x8F6E, 0x4F26, /* 0xD0 */ + 0x4ED1, 0x6CA6, 0x7EB6, 0x8BBA, 0x841D, 0x87BA, 0x7F57, 0x903B, /* 0xD0 */ + 0x9523, 0x7BA9, 0x9AA1, 0x88F8, 0x843D, 0x6D1B, 0x9A86, 0x7EDC, /* 0xE0 */ + 0x5988, 0x9EBB, 0x739B, 0x7801, 0x8682, 0x9A6C, 0x9A82, 0x561B, /* 0xE0 */ + 0x5417, 0x57CB, 0x4E70, 0x9EA6, 0x5356, 0x8FC8, 0x8109, 0x7792, /* 0xF0 */ + 0x9992, 0x86EE, 0x6EE1, 0x8513, 0x66FC, 0x6162, 0x6F2B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x807E, 0x8081, 0x8082, 0x8085, 0x8088, 0x808A, 0x808D, 0x808E, /* 0x40 */ + 0x808F, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099, /* 0x40 */ + 0x809E, 0x80A3, 0x80A6, 0x80A7, 0x80A8, 0x80AC, 0x80B0, 0x80B3, /* 0x50 */ + 0x80B5, 0x80B6, 0x80B8, 0x80B9, 0x80BB, 0x80C5, 0x80C7, 0x80C8, /* 0x50 */ + 0x80C9, 0x80CA, 0x80CB, 0x80CF, 0x80D0, 0x80D1, 0x80D2, 0x80D3, /* 0x60 */ + 0x80D4, 0x80D5, 0x80D8, 0x80DF, 0x80E0, 0x80E2, 0x80E3, 0x80E6, /* 0x60 */ + 0x80EE, 0x80F5, 0x80F7, 0x80F9, 0x80FB, 0x80FE, 0x80FF, 0x8100, /* 0x70 */ + 0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810B, 0, /* 0x70 */ + 0x810C, 0x8115, 0x8117, 0x8119, 0x811B, 0x811C, 0x811D, 0x811F, /* 0x80 */ + 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, /* 0x80 */ + 0x8128, 0x8129, 0x812A, 0x812B, 0x812D, 0x812E, 0x8130, 0x8133, /* 0x90 */ + 0x8134, 0x8135, 0x8137, 0x8139, 0x813A, 0x813B, 0x813C, 0x813D, /* 0x90 */ + 0x813F, 0x8C29, 0x8292, 0x832B, 0x76F2, 0x6C13, 0x5FD9, 0x83BD, /* 0xA0 */ + 0x732B, 0x8305, 0x951A, 0x6BDB, 0x77DB, 0x94C6, 0x536F, 0x8302, /* 0xA0 */ + 0x5192, 0x5E3D, 0x8C8C, 0x8D38, 0x4E48, 0x73AB, 0x679A, 0x6885, /* 0xB0 */ + 0x9176, 0x9709, 0x7164, 0x6CA1, 0x7709, 0x5A92, 0x9541, 0x6BCF, /* 0xB0 */ + 0x7F8E, 0x6627, 0x5BD0, 0x59B9, 0x5A9A, 0x95E8, 0x95F7, 0x4EEC, /* 0xC0 */ + 0x840C, 0x8499, 0x6AAC, 0x76DF, 0x9530, 0x731B, 0x68A6, 0x5B5F, /* 0xC0 */ + 0x772F, 0x919A, 0x9761, 0x7CDC, 0x8FF7, 0x8C1C, 0x5F25, 0x7C73, /* 0xD0 */ + 0x79D8, 0x89C5, 0x6CCC, 0x871C, 0x5BC6, 0x5E42, 0x68C9, 0x7720, /* 0xD0 */ + 0x7EF5, 0x5195, 0x514D, 0x52C9, 0x5A29, 0x7F05, 0x9762, 0x82D7, /* 0xE0 */ + 0x63CF, 0x7784, 0x85D0, 0x79D2, 0x6E3A, 0x5E99, 0x5999, 0x8511, /* 0xE0 */ + 0x706D, 0x6C11, 0x62BF, 0x76BF, 0x654F, 0x60AF, 0x95FD, 0x660E, /* 0xF0 */ + 0x879F, 0x9E23, 0x94ED, 0x540D, 0x547D, 0x8C2C, 0x6478 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149, /* 0x40 */ + 0x814D, 0x814E, 0x814F, 0x8152, 0x8156, 0x8157, 0x8158, 0x815B, /* 0x40 */ + 0x815C, 0x815D, 0x815E, 0x815F, 0x8161, 0x8162, 0x8163, 0x8164, /* 0x50 */ + 0x8166, 0x8168, 0x816A, 0x816B, 0x816C, 0x816F, 0x8172, 0x8173, /* 0x50 */ + 0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185, /* 0x60 */ + 0x8186, 0x8187, 0x8189, 0x818B, 0x818C, 0x818D, 0x818E, 0x8190, /* 0x60 */ + 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819A, /* 0x70 */ + 0x819E, 0x819F, 0x81A0, 0x81A1, 0x81A2, 0x81A4, 0x81A5, 0, /* 0x70 */ + 0x81A7, 0x81A9, 0x81AB, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, /* 0x80 */ + 0x81B1, 0x81B2, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, /* 0x80 */ + 0x81BC, 0x81BD, 0x81BE, 0x81BF, 0x81C4, 0x81C5, 0x81C7, 0x81C8, /* 0x90 */ + 0x81C9, 0x81CB, 0x81CD, 0x81CE, 0x81CF, 0x81D0, 0x81D1, 0x81D2, /* 0x90 */ + 0x81D3, 0x6479, 0x8611, 0x6A21, 0x819C, 0x78E8, 0x6469, 0x9B54, /* 0xA0 */ + 0x62B9, 0x672B, 0x83AB, 0x58A8, 0x9ED8, 0x6CAB, 0x6F20, 0x5BDE, /* 0xA0 */ + 0x964C, 0x8C0B, 0x725F, 0x67D0, 0x62C7, 0x7261, 0x4EA9, 0x59C6, /* 0xB0 */ + 0x6BCD, 0x5893, 0x66AE, 0x5E55, 0x52DF, 0x6155, 0x6728, 0x76EE, /* 0xB0 */ + 0x7766, 0x7267, 0x7A46, 0x62FF, 0x54EA, 0x5450, 0x94A0, 0x90A3, /* 0xC0 */ + 0x5A1C, 0x7EB3, 0x6C16, 0x4E43, 0x5976, 0x8010, 0x5948, 0x5357, /* 0xC0 */ + 0x7537, 0x96BE, 0x56CA, 0x6320, 0x8111, 0x607C, 0x95F9, 0x6DD6, /* 0xD0 */ + 0x5462, 0x9981, 0x5185, 0x5AE9, 0x80FD, 0x59AE, 0x9713, 0x502A, /* 0xD0 */ + 0x6CE5, 0x5C3C, 0x62DF, 0x4F60, 0x533F, 0x817B, 0x9006, 0x6EBA, /* 0xE0 */ + 0x852B, 0x62C8, 0x5E74, 0x78BE, 0x64B5, 0x637B, 0x5FF5, 0x5A18, /* 0xE0 */ + 0x917F, 0x9E1F, 0x5C3F, 0x634F, 0x8042, 0x5B7D, 0x556E, 0x954A, /* 0xF0 */ + 0x954D, 0x6D85, 0x60A8, 0x67E0, 0x72DE, 0x51DD, 0x5B81 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81D4, 0x81D5, 0x81D6, 0x81D7, 0x81D8, 0x81D9, 0x81DA, 0x81DB, /* 0x40 */ + 0x81DC, 0x81DD, 0x81DE, 0x81DF, 0x81E0, 0x81E1, 0x81E2, 0x81E4, /* 0x40 */ + 0x81E5, 0x81E6, 0x81E8, 0x81E9, 0x81EB, 0x81EE, 0x81EF, 0x81F0, /* 0x50 */ + 0x81F1, 0x81F2, 0x81F5, 0x81F6, 0x81F7, 0x81F8, 0x81F9, 0x81FA, /* 0x50 */ + 0x81FD, 0x81FF, 0x8203, 0x8207, 0x8208, 0x8209, 0x820A, 0x820B, /* 0x60 */ + 0x820E, 0x820F, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218, /* 0x60 */ + 0x8219, 0x821A, 0x821D, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227, /* 0x70 */ + 0x8229, 0x822E, 0x8232, 0x823A, 0x823C, 0x823D, 0x823F, 0, /* 0x70 */ + 0x8240, 0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824A, /* 0x80 */ + 0x824C, 0x824D, 0x824E, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, /* 0x80 */ + 0x8255, 0x8256, 0x8257, 0x8259, 0x825B, 0x825C, 0x825D, 0x825E, /* 0x90 */ + 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, /* 0x90 */ + 0x8269, 0x62E7, 0x6CDE, 0x725B, 0x626D, 0x94AE, 0x7EBD, 0x8113, /* 0xA0 */ + 0x6D53, 0x519C, 0x5F04, 0x5974, 0x52AA, 0x6012, 0x5973, 0x6696, /* 0xA0 */ + 0x8650, 0x759F, 0x632A, 0x61E6, 0x7CEF, 0x8BFA, 0x54E6, 0x6B27, /* 0xB0 */ + 0x9E25, 0x6BB4, 0x85D5, 0x5455, 0x5076, 0x6CA4, 0x556A, 0x8DB4, /* 0xB0 */ + 0x722C, 0x5E15, 0x6015, 0x7436, 0x62CD, 0x6392, 0x724C, 0x5F98, /* 0xC0 */ + 0x6E43, 0x6D3E, 0x6500, 0x6F58, 0x76D8, 0x78D0, 0x76FC, 0x7554, /* 0xC0 */ + 0x5224, 0x53DB, 0x4E53, 0x5E9E, 0x65C1, 0x802A, 0x80D6, 0x629B, /* 0xD0 */ + 0x5486, 0x5228, 0x70AE, 0x888D, 0x8DD1, 0x6CE1, 0x5478, 0x80DA, /* 0xD0 */ + 0x57F9, 0x88F4, 0x8D54, 0x966A, 0x914D, 0x4F69, 0x6C9B, 0x55B7, /* 0xE0 */ + 0x76C6, 0x7830, 0x62A8, 0x70F9, 0x6F8E, 0x5F6D, 0x84EC, 0x68DA, /* 0xE0 */ + 0x787C, 0x7BF7, 0x81A8, 0x670B, 0x9E4F, 0x6367, 0x78B0, 0x576F, /* 0xF0 */ + 0x7812, 0x9739, 0x6279, 0x62AB, 0x5288, 0x7435, 0x6BD7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x826A, 0x826B, 0x826C, 0x826D, 0x8271, 0x8275, 0x8276, 0x8277, /* 0x40 */ + 0x8278, 0x827B, 0x827C, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286, /* 0x40 */ + 0x8287, 0x8289, 0x828C, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296, /* 0x50 */ + 0x829A, 0x829B, 0x829E, 0x82A0, 0x82A2, 0x82A3, 0x82A7, 0x82B2, /* 0x50 */ + 0x82B5, 0x82B6, 0x82BA, 0x82BB, 0x82BC, 0x82BF, 0x82C0, 0x82C2, /* 0x60 */ + 0x82C3, 0x82C5, 0x82C6, 0x82C9, 0x82D0, 0x82D6, 0x82D9, 0x82DA, /* 0x60 */ + 0x82DD, 0x82E2, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EC, 0x82ED, /* 0x70 */ + 0x82EE, 0x82F0, 0x82F2, 0x82F3, 0x82F5, 0x82F6, 0x82F8, 0, /* 0x70 */ + 0x82FA, 0x82FC, 0x82FD, 0x82FE, 0x82FF, 0x8300, 0x830A, 0x830B, /* 0x80 */ + 0x830D, 0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831D, /* 0x80 */ + 0x831E, 0x831F, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, /* 0x90 */ + 0x8326, 0x8329, 0x832A, 0x832E, 0x8330, 0x8332, 0x8337, 0x833B, /* 0x90 */ + 0x833D, 0x5564, 0x813E, 0x75B2, 0x76AE, 0x5339, 0x75DE, 0x50FB, /* 0xA0 */ + 0x5C41, 0x8B6C, 0x7BC7, 0x504F, 0x7247, 0x9A97, 0x98D8, 0x6F02, /* 0xA0 */ + 0x74E2, 0x7968, 0x6487, 0x77A5, 0x62FC, 0x9891, 0x8D2B, 0x54C1, /* 0xB0 */ + 0x8058, 0x4E52, 0x576A, 0x82F9, 0x840D, 0x5E73, 0x51ED, 0x74F6, /* 0xB0 */ + 0x8BC4, 0x5C4F, 0x5761, 0x6CFC, 0x9887, 0x5A46, 0x7834, 0x9B44, /* 0xC0 */ + 0x8FEB, 0x7C95, 0x5256, 0x6251, 0x94FA, 0x4EC6, 0x8386, 0x8461, /* 0xC0 */ + 0x83E9, 0x84B2, 0x57D4, 0x6734, 0x5703, 0x666E, 0x6D66, 0x8C31, /* 0xD0 */ + 0x66DD, 0x7011, 0x671F, 0x6B3A, 0x6816, 0x621A, 0x59BB, 0x4E03, /* 0xD0 */ + 0x51C4, 0x6F06, 0x67D2, 0x6C8F, 0x5176, 0x68CB, 0x5947, 0x6B67, /* 0xE0 */ + 0x7566, 0x5D0E, 0x8110, 0x9F50, 0x65D7, 0x7948, 0x7941, 0x9A91, /* 0xE0 */ + 0x8D77, 0x5C82, 0x4E5E, 0x4F01, 0x542F, 0x5951, 0x780C, 0x5668, /* 0xF0 */ + 0x6C14, 0x8FC4, 0x5F03, 0x6C7D, 0x6CE3, 0x8BAB, 0x6390 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x833E, 0x833F, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834A, /* 0x40 */ + 0x834B, 0x834C, 0x834D, 0x834E, 0x8353, 0x8355, 0x8356, 0x8357, /* 0x40 */ + 0x8358, 0x8359, 0x835D, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373, /* 0x50 */ + 0x8374, 0x8375, 0x8376, 0x8379, 0x837A, 0x837E, 0x837F, 0x8380, /* 0x50 */ + 0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838A, 0x838B, /* 0x60 */ + 0x838C, 0x838D, 0x838F, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396, /* 0x60 */ + 0x8397, 0x8399, 0x839A, 0x839D, 0x839F, 0x83A1, 0x83A2, 0x83A3, /* 0x70 */ + 0x83A4, 0x83A5, 0x83A6, 0x83A7, 0x83AC, 0x83AD, 0x83AE, 0, /* 0x70 */ + 0x83AF, 0x83B5, 0x83BB, 0x83BE, 0x83BF, 0x83C2, 0x83C3, 0x83C4, /* 0x80 */ + 0x83C6, 0x83C8, 0x83C9, 0x83CB, 0x83CD, 0x83CE, 0x83D0, 0x83D1, /* 0x80 */ + 0x83D2, 0x83D3, 0x83D5, 0x83D7, 0x83D9, 0x83DA, 0x83DB, 0x83DE, /* 0x90 */ + 0x83E2, 0x83E3, 0x83E4, 0x83E6, 0x83E7, 0x83E8, 0x83EB, 0x83EC, /* 0x90 */ + 0x83ED, 0x6070, 0x6D3D, 0x7275, 0x6266, 0x948E, 0x94C5, 0x5343, /* 0xA0 */ + 0x8FC1, 0x7B7E, 0x4EDF, 0x8C26, 0x4E7E, 0x9ED4, 0x94B1, 0x94B3, /* 0xA0 */ + 0x524D, 0x6F5C, 0x9063, 0x6D45, 0x8C34, 0x5811, 0x5D4C, 0x6B20, /* 0xB0 */ + 0x6B49, 0x67AA, 0x545B, 0x8154, 0x7F8C, 0x5899, 0x8537, 0x5F3A, /* 0xB0 */ + 0x62A2, 0x6A47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77A7, 0x4E54, /* 0xC0 */ + 0x4FA8, 0x5DE7, 0x9798, 0x64AC, 0x7FD8, 0x5CED, 0x4FCF, 0x7A8D, /* 0xC0 */ + 0x5207, 0x8304, 0x4E14, 0x602F, 0x7A83, 0x94A6, 0x4FB5, 0x4EB2, /* 0xD0 */ + 0x79E6, 0x7434, 0x52E4, 0x82B9, 0x64D2, 0x79BD, 0x5BDD, 0x6C81, /* 0xD0 */ + 0x9752, 0x8F7B, 0x6C22, 0x503E, 0x537F, 0x6E05, 0x64CE, 0x6674, /* 0xE0 */ + 0x6C30, 0x60C5, 0x9877, 0x8BF7, 0x5E86, 0x743C, 0x7A77, 0x79CB, /* 0xE0 */ + 0x4E18, 0x90B1, 0x7403, 0x6C42, 0x56DA, 0x914B, 0x6CC5, 0x8D8B, /* 0xF0 */ + 0x533A, 0x86C6, 0x66F2, 0x8EAF, 0x5C48, 0x9A71, 0x6E20 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x83EE, 0x83EF, 0x83F3, 0x83F4, 0x83F5, 0x83F6, 0x83F7, 0x83FA, /* 0x40 */ + 0x83FB, 0x83FC, 0x83FE, 0x83FF, 0x8400, 0x8402, 0x8405, 0x8407, /* 0x40 */ + 0x8408, 0x8409, 0x840A, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415, /* 0x50 */ + 0x8416, 0x8417, 0x8419, 0x841A, 0x841B, 0x841E, 0x841F, 0x8420, /* 0x50 */ + 0x8421, 0x8422, 0x8423, 0x8429, 0x842A, 0x842B, 0x842C, 0x842D, /* 0x60 */ + 0x842E, 0x842F, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436, /* 0x60 */ + 0x8437, 0x8439, 0x843A, 0x843B, 0x843E, 0x843F, 0x8440, 0x8441, /* 0x70 */ + 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0, /* 0x70 */ + 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, 0x8450, 0x8452, /* 0x80 */ + 0x8453, 0x8454, 0x8455, 0x8456, 0x8458, 0x845D, 0x845E, 0x845F, /* 0x80 */ + 0x8460, 0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846A, /* 0x90 */ + 0x846E, 0x846F, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847B, /* 0x90 */ + 0x847C, 0x53D6, 0x5A36, 0x9F8B, 0x8DA3, 0x53BB, 0x5708, 0x98A7, /* 0xA0 */ + 0x6743, 0x919B, 0x6CC9, 0x5168, 0x75CA, 0x62F3, 0x72AC, 0x5238, /* 0xA0 */ + 0x529D, 0x7F3A, 0x7094, 0x7638, 0x5374, 0x9E4A, 0x69B7, 0x786E, /* 0xB0 */ + 0x96C0, 0x88D9, 0x7FA4, 0x7136, 0x71C3, 0x5189, 0x67D3, 0x74E4, /* 0xB0 */ + 0x58E4, 0x6518, 0x56B7, 0x8BA9, 0x9976, 0x6270, 0x7ED5, 0x60F9, /* 0xC0 */ + 0x70ED, 0x58EC, 0x4EC1, 0x4EBA, 0x5FCD, 0x97E7, 0x4EFB, 0x8BA4, /* 0xC0 */ + 0x5203, 0x598A, 0x7EAB, 0x6254, 0x4ECD, 0x65E5, 0x620E, 0x8338, /* 0xD0 */ + 0x84C9, 0x8363, 0x878D, 0x7194, 0x6EB6, 0x5BB9, 0x7ED2, 0x5197, /* 0xD0 */ + 0x63C9, 0x67D4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5B7A, 0x5982, /* 0xE0 */ + 0x8FB1, 0x4E73, 0x6C5D, 0x5165, 0x8925, 0x8F6F, 0x962E, 0x854A, /* 0xE0 */ + 0x745E, 0x9510, 0x95F0, 0x6DA6, 0x82E5, 0x5F31, 0x6492, 0x6D12, /* 0xF0 */ + 0x8428, 0x816E, 0x9CC3, 0x585E, 0x8D5B, 0x4E09, 0x53C1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_C9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x847D, 0x847E, 0x847F, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485, /* 0x40 */ + 0x8486, 0x848A, 0x848D, 0x848F, 0x8490, 0x8491, 0x8492, 0x8493, /* 0x40 */ + 0x8494, 0x8495, 0x8496, 0x8498, 0x849A, 0x849B, 0x849D, 0x849E, /* 0x50 */ + 0x849F, 0x84A0, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, 0x84A7, /* 0x50 */ + 0x84A8, 0x84A9, 0x84AA, 0x84AB, 0x84AC, 0x84AD, 0x84AE, 0x84B0, /* 0x60 */ + 0x84B1, 0x84B3, 0x84B5, 0x84B6, 0x84B7, 0x84BB, 0x84BC, 0x84BE, /* 0x60 */ + 0x84C0, 0x84C2, 0x84C3, 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x84CB, /* 0x70 */ + 0x84CC, 0x84CE, 0x84CF, 0x84D2, 0x84D4, 0x84D5, 0x84D7, 0, /* 0x70 */ + 0x84D8, 0x84D9, 0x84DA, 0x84DB, 0x84DC, 0x84DE, 0x84E1, 0x84E2, /* 0x80 */ + 0x84E4, 0x84E7, 0x84E8, 0x84E9, 0x84EA, 0x84EB, 0x84ED, 0x84EE, /* 0x80 */ + 0x84EF, 0x84F1, 0x84F2, 0x84F3, 0x84F4, 0x84F5, 0x84F6, 0x84F7, /* 0x90 */ + 0x84F8, 0x84F9, 0x84FA, 0x84FB, 0x84FD, 0x84FE, 0x8500, 0x8501, /* 0x90 */ + 0x8502, 0x4F1E, 0x6563, 0x6851, 0x55D3, 0x4E27, 0x6414, 0x9A9A, /* 0xA0 */ + 0x626B, 0x5AC2, 0x745F, 0x8272, 0x6DA9, 0x68EE, 0x50E7, 0x838E, /* 0xA0 */ + 0x7802, 0x6740, 0x5239, 0x6C99, 0x7EB1, 0x50BB, 0x5565, 0x715E, /* 0xB0 */ + 0x7B5B, 0x6652, 0x73CA, 0x82EB, 0x6749, 0x5C71, 0x5220, 0x717D, /* 0xB0 */ + 0x886B, 0x95EA, 0x9655, 0x64C5, 0x8D61, 0x81B3, 0x5584, 0x6C55, /* 0xC0 */ + 0x6247, 0x7F2E, 0x5892, 0x4F24, 0x5546, 0x8D4F, 0x664C, 0x4E0A, /* 0xC0 */ + 0x5C1A, 0x88F3, 0x68A2, 0x634E, 0x7A0D, 0x70E7, 0x828D, 0x52FA, /* 0xD0 */ + 0x97F6, 0x5C11, 0x54E8, 0x90B5, 0x7ECD, 0x5962, 0x8D4A, 0x86C7, /* 0xD0 */ + 0x820C, 0x820D, 0x8D66, 0x6444, 0x5C04, 0x6151, 0x6D89, 0x793E, /* 0xE0 */ + 0x8BBE, 0x7837, 0x7533, 0x547B, 0x4F38, 0x8EAB, 0x6DF1, 0x5A20, /* 0xE0 */ + 0x7EC5, 0x795E, 0x6C88, 0x5BA1, 0x5A76, 0x751A, 0x80BE, 0x614E, /* 0xF0 */ + 0x6E17, 0x58F0, 0x751F, 0x7525, 0x7272, 0x5347, 0x7EF3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850A, /* 0x40 */ + 0x850B, 0x850D, 0x850E, 0x850F, 0x8510, 0x8512, 0x8514, 0x8515, /* 0x40 */ + 0x8516, 0x8518, 0x8519, 0x851B, 0x851C, 0x851D, 0x851E, 0x8520, /* 0x50 */ + 0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529, /* 0x50 */ + 0x852A, 0x852D, 0x852E, 0x852F, 0x8530, 0x8531, 0x8532, 0x8533, /* 0x60 */ + 0x8534, 0x8535, 0x8536, 0x853E, 0x853F, 0x8540, 0x8541, 0x8542, /* 0x60 */ + 0x8544, 0x8545, 0x8546, 0x8547, 0x854B, 0x854C, 0x854D, 0x854E, /* 0x70 */ + 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0, /* 0x70 */ + 0x8557, 0x8558, 0x855A, 0x855B, 0x855C, 0x855D, 0x855F, 0x8560, /* 0x80 */ + 0x8561, 0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856A, /* 0x80 */ + 0x856B, 0x856C, 0x856D, 0x856E, 0x856F, 0x8570, 0x8571, 0x8573, /* 0x90 */ + 0x8575, 0x8576, 0x8577, 0x8578, 0x857C, 0x857D, 0x857F, 0x8580, /* 0x90 */ + 0x8581, 0x7701, 0x76DB, 0x5269, 0x80DC, 0x5723, 0x5E08, 0x5931, /* 0xA0 */ + 0x72EE, 0x65BD, 0x6E7F, 0x8BD7, 0x5C38, 0x8671, 0x5341, 0x77F3, /* 0xA0 */ + 0x62FE, 0x65F6, 0x4EC0, 0x98DF, 0x8680, 0x5B9E, 0x8BC6, 0x53F2, /* 0xB0 */ + 0x77E2, 0x4F7F, 0x5C4E, 0x9A76, 0x59CB, 0x5F0F, 0x793A, 0x58EB, /* 0xB0 */ + 0x4E16, 0x67FF, 0x4E8B, 0x62ED, 0x8A93, 0x901D, 0x52BF, 0x662F, /* 0xC0 */ + 0x55DC, 0x566C, 0x9002, 0x4ED5, 0x4F8D, 0x91CA, 0x9970, 0x6C0F, /* 0xC0 */ + 0x5E02, 0x6043, 0x5BA4, 0x89C6, 0x8BD5, 0x6536, 0x624B, 0x9996, /* 0xD0 */ + 0x5B88, 0x5BFF, 0x6388, 0x552E, 0x53D7, 0x7626, 0x517D, 0x852C, /* 0xD0 */ + 0x67A2, 0x68B3, 0x6B8A, 0x6292, 0x8F93, 0x53D4, 0x8212, 0x6DD1, /* 0xE0 */ + 0x758F, 0x4E66, 0x8D4E, 0x5B70, 0x719F, 0x85AF, 0x6691, 0x66D9, /* 0xE0 */ + 0x7F72, 0x8700, 0x9ECD, 0x9F20, 0x5C5E, 0x672F, 0x8FF0, 0x6811, /* 0xF0 */ + 0x675F, 0x620D, 0x7AD6, 0x5885, 0x5EB6, 0x6570, 0x6F31 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858A, 0x858B, 0x858C, /* 0x40 */ + 0x858D, 0x858E, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595, /* 0x40 */ + 0x8596, 0x8597, 0x8598, 0x8599, 0x859A, 0x859D, 0x859E, 0x859F, /* 0x50 */ + 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A5, 0x85A6, 0x85A7, 0x85A9, /* 0x50 */ + 0x85AB, 0x85AC, 0x85AD, 0x85B1, 0x85B2, 0x85B3, 0x85B4, 0x85B5, /* 0x60 */ + 0x85B6, 0x85B8, 0x85BA, 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0x85BF, /* 0x60 */ + 0x85C0, 0x85C2, 0x85C3, 0x85C4, 0x85C5, 0x85C6, 0x85C7, 0x85C8, /* 0x70 */ + 0x85CA, 0x85CB, 0x85CC, 0x85CD, 0x85CE, 0x85D1, 0x85D2, 0, /* 0x70 */ + 0x85D4, 0x85D6, 0x85D7, 0x85D8, 0x85D9, 0x85DA, 0x85DB, 0x85DD, /* 0x80 */ + 0x85DE, 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E5, 0x85E6, /* 0x80 */ + 0x85E7, 0x85E8, 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, 0x85EF, /* 0x90 */ + 0x85F0, 0x85F1, 0x85F2, 0x85F3, 0x85F4, 0x85F5, 0x85F6, 0x85F7, /* 0x90 */ + 0x85F8, 0x6055, 0x5237, 0x800D, 0x6454, 0x8870, 0x7529, 0x5E05, /* 0xA0 */ + 0x6813, 0x62F4, 0x971C, 0x53CC, 0x723D, 0x8C01, 0x6C34, 0x7761, /* 0xA0 */ + 0x7A0E, 0x542E, 0x77AC, 0x987A, 0x821C, 0x8BF4, 0x7855, 0x6714, /* 0xB0 */ + 0x70C1, 0x65AF, 0x6495, 0x5636, 0x601D, 0x79C1, 0x53F8, 0x4E1D, /* 0xB0 */ + 0x6B7B, 0x8086, 0x5BFA, 0x55E3, 0x56DB, 0x4F3A, 0x4F3C, 0x9972, /* 0xC0 */ + 0x5DF3, 0x677E, 0x8038, 0x6002, 0x9882, 0x9001, 0x5B8B, 0x8BBC, /* 0xC0 */ + 0x8BF5, 0x641C, 0x8258, 0x64DE, 0x55FD, 0x82CF, 0x9165, 0x4FD7, /* 0xD0 */ + 0x7D20, 0x901F, 0x7C9F, 0x50F3, 0x5851, 0x6EAF, 0x5BBF, 0x8BC9, /* 0xD0 */ + 0x8083, 0x9178, 0x849C, 0x7B97, 0x867D, 0x968B, 0x968F, 0x7EE5, /* 0xE0 */ + 0x9AD3, 0x788E, 0x5C81, 0x7A57, 0x9042, 0x96A7, 0x795F, 0x5B59, /* 0xE0 */ + 0x635F, 0x7B0B, 0x84D1, 0x68AD, 0x5506, 0x7F29, 0x7410, 0x7D22, /* 0xF0 */ + 0x9501, 0x6240, 0x584C, 0x4ED6, 0x5B83, 0x5979, 0x5854 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x85F9, 0x85FA, 0x85FC, 0x85FD, 0x85FE, 0x8600, 0x8601, 0x8602, /* 0x40 */ + 0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860A, 0x860B, /* 0x40 */ + 0x860C, 0x860D, 0x860E, 0x860F, 0x8610, 0x8612, 0x8613, 0x8614, /* 0x50 */ + 0x8615, 0x8617, 0x8618, 0x8619, 0x861A, 0x861B, 0x861C, 0x861D, /* 0x50 */ + 0x861E, 0x861F, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, /* 0x60 */ + 0x8626, 0x8628, 0x862A, 0x862B, 0x862C, 0x862D, 0x862E, 0x862F, /* 0x60 */ + 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, /* 0x70 */ + 0x8639, 0x863A, 0x863B, 0x863D, 0x863E, 0x863F, 0x8640, 0, /* 0x70 */ + 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, /* 0x80 */ + 0x8649, 0x864A, 0x864B, 0x864C, 0x8652, 0x8653, 0x8655, 0x8656, /* 0x80 */ + 0x8657, 0x8658, 0x8659, 0x865B, 0x865C, 0x865D, 0x865F, 0x8660, /* 0x90 */ + 0x8661, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, /* 0x90 */ + 0x866A, 0x736D, 0x631E, 0x8E4B, 0x8E0F, 0x80CE, 0x82D4, 0x62AC, /* 0xA0 */ + 0x53F0, 0x6CF0, 0x915E, 0x592A, 0x6001, 0x6C70, 0x574D, 0x644A, /* 0xA0 */ + 0x8D2A, 0x762B, 0x6EE9, 0x575B, 0x6A80, 0x75F0, 0x6F6D, 0x8C2D, /* 0xB0 */ + 0x8C08, 0x5766, 0x6BEF, 0x8892, 0x78B3, 0x63A2, 0x53F9, 0x70AD, /* 0xB0 */ + 0x6C64, 0x5858, 0x642A, 0x5802, 0x68E0, 0x819B, 0x5510, 0x7CD6, /* 0xC0 */ + 0x5018, 0x8EBA, 0x6DCC, 0x8D9F, 0x70EB, 0x638F, 0x6D9B, 0x6ED4, /* 0xC0 */ + 0x7EE6, 0x8404, 0x6843, 0x9003, 0x6DD8, 0x9676, 0x8BA8, 0x5957, /* 0xD0 */ + 0x7279, 0x85E4, 0x817E, 0x75BC, 0x8A8A, 0x68AF, 0x5254, 0x8E22, /* 0xD0 */ + 0x9511, 0x63D0, 0x9898, 0x8E44, 0x557C, 0x4F53, 0x66FF, 0x568F, /* 0xE0 */ + 0x60D5, 0x6D95, 0x5243, 0x5C49, 0x5929, 0x6DFB, 0x586B, 0x7530, /* 0xE0 */ + 0x751C, 0x606C, 0x8214, 0x8146, 0x6311, 0x6761, 0x8FE2, 0x773A, /* 0xF0 */ + 0x8DF3, 0x8D34, 0x94C1, 0x5E16, 0x5385, 0x542C, 0x70C3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x866D, 0x866F, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, /* 0x40 */ + 0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, /* 0x40 */ + 0x8689, 0x868E, 0x868F, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696, /* 0x50 */ + 0x8697, 0x8698, 0x8699, 0x869A, 0x869B, 0x869E, 0x869F, 0x86A0, /* 0x50 */ + 0x86A1, 0x86A2, 0x86A5, 0x86A6, 0x86AB, 0x86AD, 0x86AE, 0x86B2, /* 0x60 */ + 0x86B3, 0x86B7, 0x86B8, 0x86B9, 0x86BB, 0x86BC, 0x86BD, 0x86BE, /* 0x60 */ + 0x86BF, 0x86C1, 0x86C2, 0x86C3, 0x86C5, 0x86C8, 0x86CC, 0x86CD, /* 0x70 */ + 0x86D2, 0x86D3, 0x86D5, 0x86D6, 0x86D7, 0x86DA, 0x86DC, 0, /* 0x70 */ + 0x86DD, 0x86E0, 0x86E1, 0x86E2, 0x86E3, 0x86E5, 0x86E6, 0x86E7, /* 0x80 */ + 0x86E8, 0x86EA, 0x86EB, 0x86EC, 0x86EF, 0x86F5, 0x86F6, 0x86F7, /* 0x80 */ + 0x86FA, 0x86FB, 0x86FC, 0x86FD, 0x86FF, 0x8701, 0x8704, 0x8705, /* 0x90 */ + 0x8706, 0x870B, 0x870C, 0x870E, 0x870F, 0x8710, 0x8711, 0x8714, /* 0x90 */ + 0x8716, 0x6C40, 0x5EF7, 0x505C, 0x4EAD, 0x5EAD, 0x633A, 0x8247, /* 0xA0 */ + 0x901A, 0x6850, 0x916E, 0x77B3, 0x540C, 0x94DC, 0x5F64, 0x7AE5, /* 0xA0 */ + 0x6876, 0x6345, 0x7B52, 0x7EDF, 0x75DB, 0x5077, 0x6295, 0x5934, /* 0xB0 */ + 0x900F, 0x51F8, 0x79C3, 0x7A81, 0x56FE, 0x5F92, 0x9014, 0x6D82, /* 0xB0 */ + 0x5C60, 0x571F, 0x5410, 0x5154, 0x6E4D, 0x56E2, 0x63A8, 0x9893, /* 0xC0 */ + 0x817F, 0x8715, 0x892A, 0x9000, 0x541E, 0x5C6F, 0x81C0, 0x62D6, /* 0xC0 */ + 0x6258, 0x8131, 0x9E35, 0x9640, 0x9A6E, 0x9A7C, 0x692D, 0x59A5, /* 0xD0 */ + 0x62D3, 0x553E, 0x6316, 0x54C7, 0x86D9, 0x6D3C, 0x5A03, 0x74E6, /* 0xD0 */ + 0x889C, 0x6B6A, 0x5916, 0x8C4C, 0x5F2F, 0x6E7E, 0x73A9, 0x987D, /* 0xE0 */ + 0x4E38, 0x70F7, 0x5B8C, 0x7897, 0x633D, 0x665A, 0x7696, 0x60CB, /* 0xE0 */ + 0x5B9B, 0x5A49, 0x4E07, 0x8155, 0x6C6A, 0x738B, 0x4EA1, 0x6789, /* 0xF0 */ + 0x7F51, 0x5F80, 0x65FA, 0x671B, 0x5FD8, 0x5984, 0x5A01 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8719, 0x871B, 0x871D, 0x871F, 0x8720, 0x8724, 0x8726, 0x8727, /* 0x40 */ + 0x8728, 0x872A, 0x872B, 0x872C, 0x872D, 0x872F, 0x8730, 0x8732, /* 0x40 */ + 0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873A, 0x873C, 0x873D, /* 0x50 */ + 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874A, /* 0x50 */ + 0x874B, 0x874D, 0x874F, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755, /* 0x60 */ + 0x8756, 0x8758, 0x875A, 0x875B, 0x875C, 0x875D, 0x875E, 0x875F, /* 0x60 */ + 0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, /* 0x70 */ + 0x876C, 0x876D, 0x876F, 0x8771, 0x8772, 0x8773, 0x8775, 0, /* 0x70 */ + 0x8777, 0x8778, 0x8779, 0x877A, 0x877F, 0x8780, 0x8781, 0x8784, /* 0x80 */ + 0x8786, 0x8787, 0x8789, 0x878A, 0x878C, 0x878E, 0x878F, 0x8790, /* 0x80 */ + 0x8791, 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879A, /* 0x90 */ + 0x879B, 0x879C, 0x879D, 0x879E, 0x87A0, 0x87A1, 0x87A2, 0x87A3, /* 0x90 */ + 0x87A4, 0x5DCD, 0x5FAE, 0x5371, 0x97E6, 0x8FDD, 0x6845, 0x56F4, /* 0xA0 */ + 0x552F, 0x60DF, 0x4E3A, 0x6F4D, 0x7EF4, 0x82C7, 0x840E, 0x59D4, /* 0xA0 */ + 0x4F1F, 0x4F2A, 0x5C3E, 0x7EAC, 0x672A, 0x851A, 0x5473, 0x754F, /* 0xB0 */ + 0x80C3, 0x5582, 0x9B4F, 0x4F4D, 0x6E2D, 0x8C13, 0x5C09, 0x6170, /* 0xB0 */ + 0x536B, 0x761F, 0x6E29, 0x868A, 0x6587, 0x95FB, 0x7EB9, 0x543B, /* 0xC0 */ + 0x7A33, 0x7D0A, 0x95EE, 0x55E1, 0x7FC1, 0x74EE, 0x631D, 0x8717, /* 0xC0 */ + 0x6DA1, 0x7A9D, 0x6211, 0x65A1, 0x5367, 0x63E1, 0x6C83, 0x5DEB, /* 0xD0 */ + 0x545C, 0x94A8, 0x4E4C, 0x6C61, 0x8BEC, 0x5C4B, 0x65E0, 0x829C, /* 0xD0 */ + 0x68A7, 0x543E, 0x5434, 0x6BCB, 0x6B66, 0x4E94, 0x6342, 0x5348, /* 0xE0 */ + 0x821E, 0x4F0D, 0x4FAE, 0x575E, 0x620A, 0x96FE, 0x6664, 0x7269, /* 0xE0 */ + 0x52FF, 0x52A1, 0x609F, 0x8BEF, 0x6614, 0x7199, 0x6790, 0x897F, /* 0xF0 */ + 0x7852, 0x77FD, 0x6670, 0x563B, 0x5438, 0x9521, 0x727A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x87A5, 0x87A6, 0x87A7, 0x87A9, 0x87AA, 0x87AE, 0x87B0, 0x87B1, /* 0x40 */ + 0x87B2, 0x87B4, 0x87B6, 0x87B7, 0x87B8, 0x87B9, 0x87BB, 0x87BC, /* 0x40 */ + 0x87BE, 0x87BF, 0x87C1, 0x87C2, 0x87C3, 0x87C4, 0x87C5, 0x87C7, /* 0x50 */ + 0x87C8, 0x87C9, 0x87CC, 0x87CD, 0x87CE, 0x87CF, 0x87D0, 0x87D4, /* 0x50 */ + 0x87D5, 0x87D6, 0x87D7, 0x87D8, 0x87D9, 0x87DA, 0x87DC, 0x87DD, /* 0x60 */ + 0x87DE, 0x87DF, 0x87E1, 0x87E2, 0x87E3, 0x87E4, 0x87E6, 0x87E7, /* 0x60 */ + 0x87E8, 0x87E9, 0x87EB, 0x87EC, 0x87ED, 0x87EF, 0x87F0, 0x87F1, /* 0x70 */ + 0x87F2, 0x87F3, 0x87F4, 0x87F5, 0x87F6, 0x87F7, 0x87F8, 0, /* 0x70 */ + 0x87FA, 0x87FB, 0x87FC, 0x87FD, 0x87FF, 0x8800, 0x8801, 0x8802, /* 0x80 */ + 0x8804, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880B, 0x880C, /* 0x80 */ + 0x880D, 0x880E, 0x880F, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, /* 0x90 */ + 0x8818, 0x8819, 0x881A, 0x881C, 0x881D, 0x881E, 0x881F, 0x8820, /* 0x90 */ + 0x8823, 0x7A00, 0x606F, 0x5E0C, 0x6089, 0x819D, 0x5915, 0x60DC, /* 0xA0 */ + 0x7184, 0x70EF, 0x6EAA, 0x6C50, 0x7280, 0x6A84, 0x88AD, 0x5E2D, /* 0xA0 */ + 0x4E60, 0x5AB3, 0x559C, 0x94E3, 0x6D17, 0x7CFB, 0x9699, 0x620F, /* 0xB0 */ + 0x7EC6, 0x778E, 0x867E, 0x5323, 0x971E, 0x8F96, 0x6687, 0x5CE1, /* 0xB0 */ + 0x4FA0, 0x72ED, 0x4E0B, 0x53A6, 0x590F, 0x5413, 0x6380, 0x9528, /* 0xC0 */ + 0x5148, 0x4ED9, 0x9C9C, 0x7EA4, 0x54B8, 0x8D24, 0x8854, 0x8237, /* 0xC0 */ + 0x95F2, 0x6D8E, 0x5F26, 0x5ACC, 0x663E, 0x9669, 0x73B0, 0x732E, /* 0xD0 */ + 0x53BF, 0x817A, 0x9985, 0x7FA1, 0x5BAA, 0x9677, 0x9650, 0x7EBF, /* 0xD0 */ + 0x76F8, 0x53A2, 0x9576, 0x9999, 0x7BB1, 0x8944, 0x6E58, 0x4E61, /* 0xE0 */ + 0x7FD4, 0x7965, 0x8BE6, 0x60F3, 0x54CD, 0x4EAB, 0x9879, 0x5DF7, /* 0xE0 */ + 0x6A61, 0x50CF, 0x5411, 0x8C61, 0x8427, 0x785D, 0x9704, 0x524A, /* 0xF0 */ + 0x54EE, 0x56A3, 0x9500, 0x6D88, 0x5BB5, 0x6DC6, 0x6653 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882A, 0x882B, /* 0x40 */ + 0x882C, 0x882D, 0x882E, 0x882F, 0x8830, 0x8831, 0x8833, 0x8834, /* 0x40 */ + 0x8835, 0x8836, 0x8837, 0x8838, 0x883A, 0x883B, 0x883D, 0x883E, /* 0x50 */ + 0x883F, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849, /* 0x50 */ + 0x884A, 0x884B, 0x884E, 0x884F, 0x8850, 0x8851, 0x8852, 0x8853, /* 0x60 */ + 0x8855, 0x8856, 0x8858, 0x885A, 0x885B, 0x885C, 0x885D, 0x885E, /* 0x60 */ + 0x885F, 0x8860, 0x8866, 0x8867, 0x886A, 0x886D, 0x886F, 0x8871, /* 0x70 */ + 0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887A, 0, /* 0x70 */ + 0x887B, 0x887C, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888A, /* 0x80 */ + 0x888C, 0x888E, 0x888F, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, /* 0x80 */ + 0x8897, 0x8898, 0x8899, 0x889A, 0x889B, 0x889D, 0x889E, 0x889F, /* 0x90 */ + 0x88A0, 0x88A1, 0x88A3, 0x88A5, 0x88A6, 0x88A7, 0x88A8, 0x88A9, /* 0x90 */ + 0x88AA, 0x5C0F, 0x5B5D, 0x6821, 0x8096, 0x5578, 0x7B11, 0x6548, /* 0xA0 */ + 0x6954, 0x4E9B, 0x6B47, 0x874E, 0x978B, 0x534F, 0x631F, 0x643A, /* 0xA0 */ + 0x90AA, 0x659C, 0x80C1, 0x8C10, 0x5199, 0x68B0, 0x5378, 0x87F9, /* 0xB0 */ + 0x61C8, 0x6CC4, 0x6CFB, 0x8C22, 0x5C51, 0x85AA, 0x82AF, 0x950C, /* 0xB0 */ + 0x6B23, 0x8F9B, 0x65B0, 0x5FFB, 0x5FC3, 0x4FE1, 0x8845, 0x661F, /* 0xC0 */ + 0x8165, 0x7329, 0x60FA, 0x5174, 0x5211, 0x578B, 0x5F62, 0x90A2, /* 0xC0 */ + 0x884C, 0x9192, 0x5E78, 0x674F, 0x6027, 0x59D3, 0x5144, 0x51F6, /* 0xD0 */ + 0x80F8, 0x5308, 0x6C79, 0x96C4, 0x718A, 0x4F11, 0x4FEE, 0x7F9E, /* 0xD0 */ + 0x673D, 0x55C5, 0x9508, 0x79C0, 0x8896, 0x7EE3, 0x589F, 0x620C, /* 0xE0 */ + 0x9700, 0x865A, 0x5618, 0x987B, 0x5F90, 0x8BB8, 0x84C4, 0x9157, /* 0xE0 */ + 0x53D9, 0x65ED, 0x5E8F, 0x755C, 0x6064, 0x7D6E, 0x5A7F, 0x7EEA, /* 0xF0 */ + 0x7EED, 0x8F69, 0x55A7, 0x5BA3, 0x60AC, 0x65CB, 0x7384 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x88AC, 0x88AE, 0x88AF, 0x88B0, 0x88B2, 0x88B3, 0x88B4, 0x88B5, /* 0x40 */ + 0x88B6, 0x88B8, 0x88B9, 0x88BA, 0x88BB, 0x88BD, 0x88BE, 0x88BF, /* 0x40 */ + 0x88C0, 0x88C3, 0x88C4, 0x88C7, 0x88C8, 0x88CA, 0x88CB, 0x88CC, /* 0x50 */ + 0x88CD, 0x88CF, 0x88D0, 0x88D1, 0x88D3, 0x88D6, 0x88D7, 0x88DA, /* 0x50 */ + 0x88DB, 0x88DC, 0x88DD, 0x88DE, 0x88E0, 0x88E1, 0x88E6, 0x88E7, /* 0x60 */ + 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF, 0x88F2, /* 0x60 */ + 0x88F5, 0x88F6, 0x88F7, 0x88FA, 0x88FB, 0x88FD, 0x88FF, 0x8900, /* 0x70 */ + 0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0, /* 0x70 */ + 0x8909, 0x890B, 0x890C, 0x890D, 0x890E, 0x890F, 0x8911, 0x8914, /* 0x80 */ + 0x8915, 0x8916, 0x8917, 0x8918, 0x891C, 0x891D, 0x891E, 0x891F, /* 0x80 */ + 0x8920, 0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, /* 0x90 */ + 0x892C, 0x892D, 0x892E, 0x892F, 0x8931, 0x8932, 0x8933, 0x8935, /* 0x90 */ + 0x8937, 0x9009, 0x7663, 0x7729, 0x7EDA, 0x9774, 0x859B, 0x5B66, /* 0xA0 */ + 0x7A74, 0x96EA, 0x8840, 0x52CB, 0x718F, 0x5FAA, 0x65EC, 0x8BE2, /* 0xA0 */ + 0x5BFB, 0x9A6F, 0x5DE1, 0x6B89, 0x6C5B, 0x8BAD, 0x8BAF, 0x900A, /* 0xB0 */ + 0x8FC5, 0x538B, 0x62BC, 0x9E26, 0x9E2D, 0x5440, 0x4E2B, 0x82BD, /* 0xB0 */ + 0x7259, 0x869C, 0x5D16, 0x8859, 0x6DAF, 0x96C5, 0x54D1, 0x4E9A, /* 0xC0 */ + 0x8BB6, 0x7109, 0x54BD, 0x9609, 0x70DF, 0x6DF9, 0x76D0, 0x4E25, /* 0xC0 */ + 0x7814, 0x8712, 0x5CA9, 0x5EF6, 0x8A00, 0x989C, 0x960E, 0x708E, /* 0xD0 */ + 0x6CBF, 0x5944, 0x63A9, 0x773C, 0x884D, 0x6F14, 0x8273, 0x5830, /* 0xD0 */ + 0x71D5, 0x538C, 0x781A, 0x96C1, 0x5501, 0x5F66, 0x7130, 0x5BB4, /* 0xE0 */ + 0x8C1A, 0x9A8C, 0x6B83, 0x592E, 0x9E2F, 0x79E7, 0x6768, 0x626C, /* 0xE0 */ + 0x4F6F, 0x75A1, 0x7F8A, 0x6D0B, 0x9633, 0x6C27, 0x4EF0, 0x75D2, /* 0xF0 */ + 0x517B, 0x6837, 0x6F3E, 0x9080, 0x8170, 0x5996, 0x7476 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8938, 0x8939, 0x893A, 0x893B, 0x893C, 0x893D, 0x893E, 0x893F, /* 0x40 */ + 0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, /* 0x40 */ + 0x894A, 0x894B, 0x894C, 0x894D, 0x894E, 0x894F, 0x8950, 0x8951, /* 0x50 */ + 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, /* 0x50 */ + 0x895A, 0x895B, 0x895C, 0x895D, 0x8960, 0x8961, 0x8962, 0x8963, /* 0x60 */ + 0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896A, 0x896B, 0x896C, /* 0x60 */ + 0x896D, 0x896E, 0x896F, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, /* 0x70 */ + 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897A, 0x897C, 0, /* 0x70 */ + 0x897D, 0x897E, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, /* 0x80 */ + 0x8989, 0x898A, 0x898B, 0x898C, 0x898D, 0x898E, 0x898F, 0x8990, /* 0x80 */ + 0x8991, 0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, /* 0x90 */ + 0x8999, 0x899A, 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, /* 0x90 */ + 0x89A1, 0x6447, 0x5C27, 0x9065, 0x7A91, 0x8C23, 0x59DA, 0x54AC, /* 0xA0 */ + 0x8200, 0x836F, 0x8981, 0x8000, 0x6930, 0x564E, 0x8036, 0x7237, /* 0xA0 */ + 0x91CE, 0x51B6, 0x4E5F, 0x9875, 0x6396, 0x4E1A, 0x53F6, 0x66F3, /* 0xB0 */ + 0x814B, 0x591C, 0x6DB2, 0x4E00, 0x58F9, 0x533B, 0x63D6, 0x94F1, /* 0xB0 */ + 0x4F9D, 0x4F0A, 0x8863, 0x9890, 0x5937, 0x9057, 0x79FB, 0x4EEA, /* 0xC0 */ + 0x80F0, 0x7591, 0x6C82, 0x5B9C, 0x59E8, 0x5F5D, 0x6905, 0x8681, /* 0xC0 */ + 0x501A, 0x5DF2, 0x4E59, 0x77E3, 0x4EE5, 0x827A, 0x6291, 0x6613, /* 0xD0 */ + 0x9091, 0x5C79, 0x4EBF, 0x5F79, 0x81C6, 0x9038, 0x8084, 0x75AB, /* 0xD0 */ + 0x4EA6, 0x88D4, 0x610F, 0x6BC5, 0x5FC6, 0x4E49, 0x76CA, 0x6EA2, /* 0xE0 */ + 0x8BE3, 0x8BAE, 0x8C0A, 0x8BD1, 0x5F02, 0x7FFC, 0x7FCC, 0x7ECE, /* 0xE0 */ + 0x8335, 0x836B, 0x56E0, 0x6BB7, 0x97F3, 0x9634, 0x59FB, 0x541F, /* 0xF0 */ + 0x94F6, 0x6DEB, 0x5BC5, 0x996E, 0x5C39, 0x5F15, 0x9690 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x89A2, 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0x89A7, 0x89A8, 0x89A9, /* 0x40 */ + 0x89AA, 0x89AB, 0x89AC, 0x89AD, 0x89AE, 0x89AF, 0x89B0, 0x89B1, /* 0x40 */ + 0x89B2, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, 0x89B8, 0x89B9, /* 0x50 */ + 0x89BA, 0x89BB, 0x89BC, 0x89BD, 0x89BE, 0x89BF, 0x89C0, 0x89C3, /* 0x50 */ + 0x89CD, 0x89D3, 0x89D4, 0x89D5, 0x89D7, 0x89D8, 0x89D9, 0x89DB, /* 0x60 */ + 0x89DD, 0x89DF, 0x89E0, 0x89E1, 0x89E2, 0x89E4, 0x89E7, 0x89E8, /* 0x60 */ + 0x89E9, 0x89EA, 0x89EC, 0x89ED, 0x89EE, 0x89F0, 0x89F1, 0x89F2, /* 0x70 */ + 0x89F4, 0x89F5, 0x89F6, 0x89F7, 0x89F8, 0x89F9, 0x89FA, 0, /* 0x70 */ + 0x89FB, 0x89FC, 0x89FD, 0x89FE, 0x89FF, 0x8A01, 0x8A02, 0x8A03, /* 0x80 */ + 0x8A04, 0x8A05, 0x8A06, 0x8A08, 0x8A09, 0x8A0A, 0x8A0B, 0x8A0C, /* 0x80 */ + 0x8A0D, 0x8A0E, 0x8A0F, 0x8A10, 0x8A11, 0x8A12, 0x8A13, 0x8A14, /* 0x90 */ + 0x8A15, 0x8A16, 0x8A17, 0x8A18, 0x8A19, 0x8A1A, 0x8A1B, 0x8A1C, /* 0x90 */ + 0x8A1D, 0x5370, 0x82F1, 0x6A31, 0x5A74, 0x9E70, 0x5E94, 0x7F28, /* 0xA0 */ + 0x83B9, 0x8424, 0x8425, 0x8367, 0x8747, 0x8FCE, 0x8D62, 0x76C8, /* 0xA0 */ + 0x5F71, 0x9896, 0x786C, 0x6620, 0x54DF, 0x62E5, 0x4F63, 0x81C3, /* 0xB0 */ + 0x75C8, 0x5EB8, 0x96CD, 0x8E0A, 0x86F9, 0x548F, 0x6CF3, 0x6D8C, /* 0xB0 */ + 0x6C38, 0x607F, 0x52C7, 0x7528, 0x5E7D, 0x4F18, 0x60A0, 0x5FE7, /* 0xC0 */ + 0x5C24, 0x7531, 0x90AE, 0x94C0, 0x72B9, 0x6CB9, 0x6E38, 0x9149, /* 0xC0 */ + 0x6709, 0x53CB, 0x53F3, 0x4F51, 0x91C9, 0x8BF1, 0x53C8, 0x5E7C, /* 0xD0 */ + 0x8FC2, 0x6DE4, 0x4E8E, 0x76C2, 0x6986, 0x865E, 0x611A, 0x8206, /* 0xD0 */ + 0x4F59, 0x4FDE, 0x903E, 0x9C7C, 0x6109, 0x6E1D, 0x6E14, 0x9685, /* 0xE0 */ + 0x4E88, 0x5A31, 0x96E8, 0x4E0E, 0x5C7F, 0x79B9, 0x5B87, 0x8BED, /* 0xE0 */ + 0x7FBD, 0x7389, 0x57DF, 0x828B, 0x90C1, 0x5401, 0x9047, 0x55BB, /* 0xF0 */ + 0x5CEA, 0x5FA1, 0x6108, 0x6B32, 0x72F1, 0x80B2, 0x8A89 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8A1E, 0x8A1F, 0x8A20, 0x8A21, 0x8A22, 0x8A23, 0x8A24, 0x8A25, /* 0x40 */ + 0x8A26, 0x8A27, 0x8A28, 0x8A29, 0x8A2A, 0x8A2B, 0x8A2C, 0x8A2D, /* 0x40 */ + 0x8A2E, 0x8A2F, 0x8A30, 0x8A31, 0x8A32, 0x8A33, 0x8A34, 0x8A35, /* 0x50 */ + 0x8A36, 0x8A37, 0x8A38, 0x8A39, 0x8A3A, 0x8A3B, 0x8A3C, 0x8A3D, /* 0x50 */ + 0x8A3F, 0x8A40, 0x8A41, 0x8A42, 0x8A43, 0x8A44, 0x8A45, 0x8A46, /* 0x60 */ + 0x8A47, 0x8A49, 0x8A4A, 0x8A4B, 0x8A4C, 0x8A4D, 0x8A4E, 0x8A4F, /* 0x60 */ + 0x8A50, 0x8A51, 0x8A52, 0x8A53, 0x8A54, 0x8A55, 0x8A56, 0x8A57, /* 0x70 */ + 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, 0x8A5E, 0, /* 0x70 */ + 0x8A5F, 0x8A60, 0x8A61, 0x8A62, 0x8A63, 0x8A64, 0x8A65, 0x8A66, /* 0x80 */ + 0x8A67, 0x8A68, 0x8A69, 0x8A6A, 0x8A6B, 0x8A6C, 0x8A6D, 0x8A6E, /* 0x80 */ + 0x8A6F, 0x8A70, 0x8A71, 0x8A72, 0x8A73, 0x8A74, 0x8A75, 0x8A76, /* 0x90 */ + 0x8A77, 0x8A78, 0x8A7A, 0x8A7B, 0x8A7C, 0x8A7D, 0x8A7E, 0x8A7F, /* 0x90 */ + 0x8A80, 0x6D74, 0x5BD3, 0x88D5, 0x9884, 0x8C6B, 0x9A6D, 0x9E33, /* 0xA0 */ + 0x6E0A, 0x51A4, 0x5143, 0x57A3, 0x8881, 0x539F, 0x63F4, 0x8F95, /* 0xA0 */ + 0x56ED, 0x5458, 0x5706, 0x733F, 0x6E90, 0x7F18, 0x8FDC, 0x82D1, /* 0xB0 */ + 0x613F, 0x6028, 0x9662, 0x66F0, 0x7EA6, 0x8D8A, 0x8DC3, 0x94A5, /* 0xB0 */ + 0x5CB3, 0x7CA4, 0x6708, 0x60A6, 0x9605, 0x8018, 0x4E91, 0x90E7, /* 0xC0 */ + 0x5300, 0x9668, 0x5141, 0x8FD0, 0x8574, 0x915D, 0x6655, 0x97F5, /* 0xC0 */ + 0x5B55, 0x531D, 0x7838, 0x6742, 0x683D, 0x54C9, 0x707E, 0x5BB0, /* 0xD0 */ + 0x8F7D, 0x518D, 0x5728, 0x54B1, 0x6512, 0x6682, 0x8D5E, 0x8D43, /* 0xD0 */ + 0x810F, 0x846C, 0x906D, 0x7CDF, 0x51FF, 0x85FB, 0x67A3, 0x65E9, /* 0xE0 */ + 0x6FA1, 0x86A4, 0x8E81, 0x566A, 0x9020, 0x7682, 0x7076, 0x71E5, /* 0xE0 */ + 0x8D23, 0x62E9, 0x5219, 0x6CFD, 0x8D3C, 0x600E, 0x589E, 0x618E, /* 0xF0 */ + 0x66FE, 0x8D60, 0x624E, 0x55B3, 0x6E23, 0x672D, 0x8F67 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8A81, 0x8A82, 0x8A83, 0x8A84, 0x8A85, 0x8A86, 0x8A87, 0x8A88, /* 0x40 */ + 0x8A8B, 0x8A8C, 0x8A8D, 0x8A8E, 0x8A8F, 0x8A90, 0x8A91, 0x8A92, /* 0x40 */ + 0x8A94, 0x8A95, 0x8A96, 0x8A97, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, /* 0x50 */ + 0x8A9C, 0x8A9D, 0x8A9E, 0x8A9F, 0x8AA0, 0x8AA1, 0x8AA2, 0x8AA3, /* 0x50 */ + 0x8AA4, 0x8AA5, 0x8AA6, 0x8AA7, 0x8AA8, 0x8AA9, 0x8AAA, 0x8AAB, /* 0x60 */ + 0x8AAC, 0x8AAD, 0x8AAE, 0x8AAF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, /* 0x60 */ + 0x8AB4, 0x8AB5, 0x8AB6, 0x8AB7, 0x8AB8, 0x8AB9, 0x8ABA, 0x8ABB, /* 0x70 */ + 0x8ABC, 0x8ABD, 0x8ABE, 0x8ABF, 0x8AC0, 0x8AC1, 0x8AC2, 0, /* 0x70 */ + 0x8AC3, 0x8AC4, 0x8AC5, 0x8AC6, 0x8AC7, 0x8AC8, 0x8AC9, 0x8ACA, /* 0x80 */ + 0x8ACB, 0x8ACC, 0x8ACD, 0x8ACE, 0x8ACF, 0x8AD0, 0x8AD1, 0x8AD2, /* 0x80 */ + 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0x8AD7, 0x8AD8, 0x8AD9, 0x8ADA, /* 0x90 */ + 0x8ADB, 0x8ADC, 0x8ADD, 0x8ADE, 0x8ADF, 0x8AE0, 0x8AE1, 0x8AE2, /* 0x90 */ + 0x8AE3, 0x94E1, 0x95F8, 0x7728, 0x6805, 0x69A8, 0x548B, 0x4E4D, /* 0xA0 */ + 0x70B8, 0x8BC8, 0x6458, 0x658B, 0x5B85, 0x7A84, 0x503A, 0x5BE8, /* 0xA0 */ + 0x77BB, 0x6BE1, 0x8A79, 0x7C98, 0x6CBE, 0x76CF, 0x65A9, 0x8F97, /* 0xB0 */ + 0x5D2D, 0x5C55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7AD9, 0x6E5B, /* 0xB0 */ + 0x7EFD, 0x6A1F, 0x7AE0, 0x5F70, 0x6F33, 0x5F20, 0x638C, 0x6DA8, /* 0xC0 */ + 0x6756, 0x4E08, 0x5E10, 0x8D26, 0x4ED7, 0x80C0, 0x7634, 0x969C, /* 0xC0 */ + 0x62DB, 0x662D, 0x627E, 0x6CBC, 0x8D75, 0x7167, 0x7F69, 0x5146, /* 0xD0 */ + 0x8087, 0x53EC, 0x906E, 0x6298, 0x54F2, 0x86F0, 0x8F99, 0x8005, /* 0xD0 */ + 0x9517, 0x8517, 0x8FD9, 0x6D59, 0x73CD, 0x659F, 0x771F, 0x7504, /* 0xE0 */ + 0x7827, 0x81FB, 0x8D1E, 0x9488, 0x4FA6, 0x6795, 0x75B9, 0x8BCA, /* 0xE0 */ + 0x9707, 0x632F, 0x9547, 0x9635, 0x84B8, 0x6323, 0x7741, 0x5F81, /* 0xF0 */ + 0x72F0, 0x4E89, 0x6014, 0x6574, 0x62EF, 0x6B63, 0x653F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, 0x8AE9, 0x8AEA, 0x8AEB, /* 0x40 */ + 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, /* 0x40 */ + 0x8AF4, 0x8AF5, 0x8AF6, 0x8AF7, 0x8AF8, 0x8AF9, 0x8AFA, 0x8AFB, /* 0x50 */ + 0x8AFC, 0x8AFD, 0x8AFE, 0x8AFF, 0x8B00, 0x8B01, 0x8B02, 0x8B03, /* 0x50 */ + 0x8B04, 0x8B05, 0x8B06, 0x8B08, 0x8B09, 0x8B0A, 0x8B0B, 0x8B0C, /* 0x60 */ + 0x8B0D, 0x8B0E, 0x8B0F, 0x8B10, 0x8B11, 0x8B12, 0x8B13, 0x8B14, /* 0x60 */ + 0x8B15, 0x8B16, 0x8B17, 0x8B18, 0x8B19, 0x8B1A, 0x8B1B, 0x8B1C, /* 0x70 */ + 0x8B1D, 0x8B1E, 0x8B1F, 0x8B20, 0x8B21, 0x8B22, 0x8B23, 0, /* 0x70 */ + 0x8B24, 0x8B25, 0x8B27, 0x8B28, 0x8B29, 0x8B2A, 0x8B2B, 0x8B2C, /* 0x80 */ + 0x8B2D, 0x8B2E, 0x8B2F, 0x8B30, 0x8B31, 0x8B32, 0x8B33, 0x8B34, /* 0x80 */ + 0x8B35, 0x8B36, 0x8B37, 0x8B38, 0x8B39, 0x8B3A, 0x8B3B, 0x8B3C, /* 0x90 */ + 0x8B3D, 0x8B3E, 0x8B3F, 0x8B40, 0x8B41, 0x8B42, 0x8B43, 0x8B44, /* 0x90 */ + 0x8B45, 0x5E27, 0x75C7, 0x90D1, 0x8BC1, 0x829D, 0x679D, 0x652F, /* 0xA0 */ + 0x5431, 0x8718, 0x77E5, 0x80A2, 0x8102, 0x6C41, 0x4E4B, 0x7EC7, /* 0xA0 */ + 0x804C, 0x76F4, 0x690D, 0x6B96, 0x6267, 0x503C, 0x4F84, 0x5740, /* 0xB0 */ + 0x6307, 0x6B62, 0x8DBE, 0x53EA, 0x65E8, 0x7EB8, 0x5FD7, 0x631A, /* 0xB0 */ + 0x63B7, 0x81F3, 0x81F4, 0x7F6E, 0x5E1C, 0x5CD9, 0x5236, 0x667A, /* 0xC0 */ + 0x79E9, 0x7A1A, 0x8D28, 0x7099, 0x75D4, 0x6EDE, 0x6CBB, 0x7A92, /* 0xC0 */ + 0x4E2D, 0x76C5, 0x5FE0, 0x949F, 0x8877, 0x7EC8, 0x79CD, 0x80BF, /* 0xD0 */ + 0x91CD, 0x4EF2, 0x4F17, 0x821F, 0x5468, 0x5DDE, 0x6D32, 0x8BCC, /* 0xD0 */ + 0x7CA5, 0x8F74, 0x8098, 0x5E1A, 0x5492, 0x76B1, 0x5B99, 0x663C, /* 0xE0 */ + 0x9AA4, 0x73E0, 0x682A, 0x86DB, 0x6731, 0x732A, 0x8BF8, 0x8BDB, /* 0xE0 */ + 0x9010, 0x7AF9, 0x70DB, 0x716E, 0x62C4, 0x77A9, 0x5631, 0x4E3B, /* 0xF0 */ + 0x8457, 0x67F1, 0x52A9, 0x86C0, 0x8D2E, 0x94F8, 0x7B51 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B46, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, 0x8B4C, 0x8B4D, /* 0x40 */ + 0x8B4E, 0x8B4F, 0x8B50, 0x8B51, 0x8B52, 0x8B53, 0x8B54, 0x8B55, /* 0x40 */ + 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, /* 0x50 */ + 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, /* 0x50 */ + 0x8B67, 0x8B68, 0x8B69, 0x8B6A, 0x8B6B, 0x8B6D, 0x8B6E, 0x8B6F, /* 0x60 */ + 0x8B70, 0x8B71, 0x8B72, 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, /* 0x60 */ + 0x8B78, 0x8B79, 0x8B7A, 0x8B7B, 0x8B7C, 0x8B7D, 0x8B7E, 0x8B7F, /* 0x70 */ + 0x8B80, 0x8B81, 0x8B82, 0x8B83, 0x8B84, 0x8B85, 0x8B86, 0, /* 0x70 */ + 0x8B87, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0x8B8D, 0x8B8E, /* 0x80 */ + 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, 0x8B94, 0x8B95, 0x8B96, /* 0x80 */ + 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B, 0x8B9C, 0x8B9D, 0x8B9E, /* 0x90 */ + 0x8B9F, 0x8BAC, 0x8BB1, 0x8BBB, 0x8BC7, 0x8BD0, 0x8BEA, 0x8C09, /* 0x90 */ + 0x8C1E, 0x4F4F, 0x6CE8, 0x795D, 0x9A7B, 0x6293, 0x722A, 0x62FD, /* 0xA0 */ + 0x4E13, 0x7816, 0x8F6C, 0x64B0, 0x8D5A, 0x7BC6, 0x6869, 0x5E84, /* 0xA0 */ + 0x88C5, 0x5986, 0x649E, 0x58EE, 0x72B6, 0x690E, 0x9525, 0x8FFD, /* 0xB0 */ + 0x8D58, 0x5760, 0x7F00, 0x8C06, 0x51C6, 0x6349, 0x62D9, 0x5353, /* 0xB0 */ + 0x684C, 0x7422, 0x8301, 0x914C, 0x5544, 0x7740, 0x707C, 0x6D4A, /* 0xC0 */ + 0x5179, 0x54A8, 0x8D44, 0x59FF, 0x6ECB, 0x6DC4, 0x5B5C, 0x7D2B, /* 0xC0 */ + 0x4ED4, 0x7C7D, 0x6ED3, 0x5B50, 0x81EA, 0x6E0D, 0x5B57, 0x9B03, /* 0xD0 */ + 0x68D5, 0x8E2A, 0x5B97, 0x7EFC, 0x603B, 0x7EB5, 0x90B9, 0x8D70, /* 0xD0 */ + 0x594F, 0x63CD, 0x79DF, 0x8DB3, 0x5352, 0x65CF, 0x7956, 0x8BC5, /* 0xE0 */ + 0x963B, 0x7EC4, 0x94BB, 0x7E82, 0x5634, 0x9189, 0x6700, 0x7F6A, /* 0xE0 */ + 0x5C0A, 0x9075, 0x6628, 0x5DE6, 0x4F50, 0x67DE, 0x505A, 0x4F5C, /* 0xF0 */ + 0x5750, 0x5EA7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8C38, 0x8C39, 0x8C3A, 0x8C3B, 0x8C3C, 0x8C3D, 0x8C3E, 0x8C3F, /* 0x40 */ + 0x8C40, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C48, 0x8C4A, 0x8C4B, /* 0x40 */ + 0x8C4D, 0x8C4E, 0x8C4F, 0x8C50, 0x8C51, 0x8C52, 0x8C53, 0x8C54, /* 0x50 */ + 0x8C56, 0x8C57, 0x8C58, 0x8C59, 0x8C5B, 0x8C5C, 0x8C5D, 0x8C5E, /* 0x50 */ + 0x8C5F, 0x8C60, 0x8C63, 0x8C64, 0x8C65, 0x8C66, 0x8C67, 0x8C68, /* 0x60 */ + 0x8C69, 0x8C6C, 0x8C6D, 0x8C6E, 0x8C6F, 0x8C70, 0x8C71, 0x8C72, /* 0x60 */ + 0x8C74, 0x8C75, 0x8C76, 0x8C77, 0x8C7B, 0x8C7C, 0x8C7D, 0x8C7E, /* 0x70 */ + 0x8C7F, 0x8C80, 0x8C81, 0x8C83, 0x8C84, 0x8C86, 0x8C87, 0, /* 0x70 */ + 0x8C88, 0x8C8B, 0x8C8D, 0x8C8E, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, /* 0x80 */ + 0x8C93, 0x8C95, 0x8C96, 0x8C97, 0x8C99, 0x8C9A, 0x8C9B, 0x8C9C, /* 0x80 */ + 0x8C9D, 0x8C9E, 0x8C9F, 0x8CA0, 0x8CA1, 0x8CA2, 0x8CA3, 0x8CA4, /* 0x90 */ + 0x8CA5, 0x8CA6, 0x8CA7, 0x8CA8, 0x8CA9, 0x8CAA, 0x8CAB, 0x8CAC, /* 0x90 */ + 0x8CAD, 0x4E8D, 0x4E0C, 0x5140, 0x4E10, 0x5EFF, 0x5345, 0x4E15, /* 0xA0 */ + 0x4E98, 0x4E1E, 0x9B32, 0x5B6C, 0x5669, 0x4E28, 0x79BA, 0x4E3F, /* 0xA0 */ + 0x5315, 0x4E47, 0x592D, 0x723B, 0x536E, 0x6C10, 0x56DF, 0x80E4, /* 0xB0 */ + 0x9997, 0x6BD3, 0x777E, 0x9F17, 0x4E36, 0x4E9F, 0x9F10, 0x4E5C, /* 0xB0 */ + 0x4E69, 0x4E93, 0x8288, 0x5B5B, 0x556C, 0x560F, 0x4EC4, 0x538D, /* 0xC0 */ + 0x539D, 0x53A3, 0x53A5, 0x53AE, 0x9765, 0x8D5D, 0x531A, 0x53F5, /* 0xC0 */ + 0x5326, 0x532E, 0x533E, 0x8D5C, 0x5366, 0x5363, 0x5202, 0x5208, /* 0xD0 */ + 0x520E, 0x522D, 0x5233, 0x523F, 0x5240, 0x524C, 0x525E, 0x5261, /* 0xD0 */ + 0x525C, 0x84AF, 0x527D, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, /* 0xE0 */ + 0x7F54, 0x4EBB, 0x4EC3, 0x4EC9, 0x4EC2, 0x4EE8, 0x4EE1, 0x4EEB, /* 0xE0 */ + 0x4EDE, 0x4F1B, 0x4EF3, 0x4F22, 0x4F64, 0x4EF5, 0x4F25, 0x4F27, /* 0xF0 */ + 0x4F09, 0x4F2B, 0x4F5E, 0x4F67, 0x6538, 0x4F5A, 0x4F5D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_D9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8CAE, 0x8CAF, 0x8CB0, 0x8CB1, 0x8CB2, 0x8CB3, 0x8CB4, 0x8CB5, /* 0x40 */ + 0x8CB6, 0x8CB7, 0x8CB8, 0x8CB9, 0x8CBA, 0x8CBB, 0x8CBC, 0x8CBD, /* 0x40 */ + 0x8CBE, 0x8CBF, 0x8CC0, 0x8CC1, 0x8CC2, 0x8CC3, 0x8CC4, 0x8CC5, /* 0x50 */ + 0x8CC6, 0x8CC7, 0x8CC8, 0x8CC9, 0x8CCA, 0x8CCB, 0x8CCC, 0x8CCD, /* 0x50 */ + 0x8CCE, 0x8CCF, 0x8CD0, 0x8CD1, 0x8CD2, 0x8CD3, 0x8CD4, 0x8CD5, /* 0x60 */ + 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, 0x8CDB, 0x8CDC, 0x8CDD, /* 0x60 */ + 0x8CDE, 0x8CDF, 0x8CE0, 0x8CE1, 0x8CE2, 0x8CE3, 0x8CE4, 0x8CE5, /* 0x70 */ + 0x8CE6, 0x8CE7, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, 0, /* 0x70 */ + 0x8CED, 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF2, 0x8CF3, 0x8CF4, /* 0x80 */ + 0x8CF5, 0x8CF6, 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x8CFB, 0x8CFC, /* 0x80 */ + 0x8CFD, 0x8CFE, 0x8CFF, 0x8D00, 0x8D01, 0x8D02, 0x8D03, 0x8D04, /* 0x90 */ + 0x8D05, 0x8D06, 0x8D07, 0x8D08, 0x8D09, 0x8D0A, 0x8D0B, 0x8D0C, /* 0x90 */ + 0x8D0D, 0x4F5F, 0x4F57, 0x4F32, 0x4F3D, 0x4F76, 0x4F74, 0x4F91, /* 0xA0 */ + 0x4F89, 0x4F83, 0x4F8F, 0x4F7E, 0x4F7B, 0x4FAA, 0x4F7C, 0x4FAC, /* 0xA0 */ + 0x4F94, 0x4FE6, 0x4FE8, 0x4FEA, 0x4FC5, 0x4FDA, 0x4FE3, 0x4FDC, /* 0xB0 */ + 0x4FD1, 0x4FDF, 0x4FF8, 0x5029, 0x504C, 0x4FF3, 0x502C, 0x500F, /* 0xB0 */ + 0x502E, 0x502D, 0x4FFE, 0x501C, 0x500C, 0x5025, 0x5028, 0x507E, /* 0xC0 */ + 0x5043, 0x5055, 0x5048, 0x504E, 0x506C, 0x507B, 0x50A5, 0x50A7, /* 0xC0 */ + 0x50A9, 0x50BA, 0x50D6, 0x5106, 0x50ED, 0x50EC, 0x50E6, 0x50EE, /* 0xD0 */ + 0x5107, 0x510B, 0x4EDD, 0x6C3D, 0x4F58, 0x4F65, 0x4FCE, 0x9FA0, /* 0xD0 */ + 0x6C46, 0x7C74, 0x516E, 0x5DFD, 0x9EC9, 0x9998, 0x5181, 0x5914, /* 0xE0 */ + 0x52F9, 0x530D, 0x8A07, 0x5310, 0x51EB, 0x5919, 0x5155, 0x4EA0, /* 0xE0 */ + 0x5156, 0x4EB3, 0x886E, 0x88A4, 0x4EB5, 0x8114, 0x88D2, 0x7980, /* 0xF0 */ + 0x5B34, 0x8803, 0x7FB8, 0x51AB, 0x51B1, 0x51BD, 0x51BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_DA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8D0E, 0x8D0F, 0x8D10, 0x8D11, 0x8D12, 0x8D13, 0x8D14, 0x8D15, /* 0x40 */ + 0x8D16, 0x8D17, 0x8D18, 0x8D19, 0x8D1A, 0x8D1B, 0x8D1C, 0x8D20, /* 0x40 */ + 0x8D51, 0x8D52, 0x8D57, 0x8D5F, 0x8D65, 0x8D68, 0x8D69, 0x8D6A, /* 0x50 */ + 0x8D6C, 0x8D6E, 0x8D6F, 0x8D71, 0x8D72, 0x8D78, 0x8D79, 0x8D7A, /* 0x50 */ + 0x8D7B, 0x8D7C, 0x8D7D, 0x8D7E, 0x8D7F, 0x8D80, 0x8D82, 0x8D83, /* 0x60 */ + 0x8D86, 0x8D87, 0x8D88, 0x8D89, 0x8D8C, 0x8D8D, 0x8D8E, 0x8D8F, /* 0x60 */ + 0x8D90, 0x8D92, 0x8D93, 0x8D95, 0x8D96, 0x8D97, 0x8D98, 0x8D99, /* 0x70 */ + 0x8D9A, 0x8D9B, 0x8D9C, 0x8D9D, 0x8D9E, 0x8DA0, 0x8DA1, 0, /* 0x70 */ + 0x8DA2, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, /* 0x80 */ + 0x8DAB, 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB2, 0x8DB6, /* 0x80 */ + 0x8DB7, 0x8DB9, 0x8DBB, 0x8DBD, 0x8DC0, 0x8DC1, 0x8DC2, 0x8DC5, /* 0x90 */ + 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCD, 0x8DD0, 0x8DD2, 0x8DD3, /* 0x90 */ + 0x8DD4, 0x51C7, 0x5196, 0x51A2, 0x51A5, 0x8BA0, 0x8BA6, 0x8BA7, /* 0xA0 */ + 0x8BAA, 0x8BB4, 0x8BB5, 0x8BB7, 0x8BC2, 0x8BC3, 0x8BCB, 0x8BCF, /* 0xA0 */ + 0x8BCE, 0x8BD2, 0x8BD3, 0x8BD4, 0x8BD6, 0x8BD8, 0x8BD9, 0x8BDC, /* 0xB0 */ + 0x8BDF, 0x8BE0, 0x8BE4, 0x8BE8, 0x8BE9, 0x8BEE, 0x8BF0, 0x8BF3, /* 0xB0 */ + 0x8BF6, 0x8BF9, 0x8BFC, 0x8BFF, 0x8C00, 0x8C02, 0x8C04, 0x8C07, /* 0xC0 */ + 0x8C0C, 0x8C0F, 0x8C11, 0x8C12, 0x8C14, 0x8C15, 0x8C16, 0x8C19, /* 0xC0 */ + 0x8C1B, 0x8C18, 0x8C1D, 0x8C1F, 0x8C20, 0x8C21, 0x8C25, 0x8C27, /* 0xD0 */ + 0x8C2A, 0x8C2B, 0x8C2E, 0x8C2F, 0x8C32, 0x8C33, 0x8C35, 0x8C36, /* 0xD0 */ + 0x5369, 0x537A, 0x961D, 0x9622, 0x9621, 0x9631, 0x962A, 0x963D, /* 0xE0 */ + 0x963C, 0x9642, 0x9649, 0x9654, 0x965F, 0x9667, 0x966C, 0x9672, /* 0xE0 */ + 0x9674, 0x9688, 0x968D, 0x9697, 0x96B0, 0x9097, 0x909B, 0x909D, /* 0xF0 */ + 0x9099, 0x90AC, 0x90A1, 0x90B4, 0x90B3, 0x90B6, 0x90BA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_DB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8DD5, 0x8DD8, 0x8DD9, 0x8DDC, 0x8DE0, 0x8DE1, 0x8DE2, 0x8DE5, /* 0x40 */ + 0x8DE6, 0x8DE7, 0x8DE9, 0x8DED, 0x8DEE, 0x8DF0, 0x8DF1, 0x8DF2, /* 0x40 */ + 0x8DF4, 0x8DF6, 0x8DFC, 0x8DFE, 0x8DFF, 0x8E00, 0x8E01, 0x8E02, /* 0x50 */ + 0x8E03, 0x8E04, 0x8E06, 0x8E07, 0x8E08, 0x8E0B, 0x8E0D, 0x8E0E, /* 0x50 */ + 0x8E10, 0x8E11, 0x8E12, 0x8E13, 0x8E15, 0x8E16, 0x8E17, 0x8E18, /* 0x60 */ + 0x8E19, 0x8E1A, 0x8E1B, 0x8E1C, 0x8E20, 0x8E21, 0x8E24, 0x8E25, /* 0x60 */ + 0x8E26, 0x8E27, 0x8E28, 0x8E2B, 0x8E2D, 0x8E30, 0x8E32, 0x8E33, /* 0x70 */ + 0x8E34, 0x8E36, 0x8E37, 0x8E38, 0x8E3B, 0x8E3C, 0x8E3E, 0, /* 0x70 */ + 0x8E3F, 0x8E43, 0x8E45, 0x8E46, 0x8E4C, 0x8E4D, 0x8E4E, 0x8E4F, /* 0x80 */ + 0x8E50, 0x8E53, 0x8E54, 0x8E55, 0x8E56, 0x8E57, 0x8E58, 0x8E5A, /* 0x80 */ + 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, /* 0x90 */ + 0x8E63, 0x8E64, 0x8E65, 0x8E67, 0x8E68, 0x8E6A, 0x8E6B, 0x8E6E, /* 0x90 */ + 0x8E71, 0x90B8, 0x90B0, 0x90CF, 0x90C5, 0x90BE, 0x90D0, 0x90C4, /* 0xA0 */ + 0x90C7, 0x90D3, 0x90E6, 0x90E2, 0x90DC, 0x90D7, 0x90DB, 0x90EB, /* 0xA0 */ + 0x90EF, 0x90FE, 0x9104, 0x9122, 0x911E, 0x9123, 0x9131, 0x912F, /* 0xB0 */ + 0x9139, 0x9143, 0x9146, 0x520D, 0x5942, 0x52A2, 0x52AC, 0x52AD, /* 0xB0 */ + 0x52BE, 0x54FF, 0x52D0, 0x52D6, 0x52F0, 0x53DF, 0x71EE, 0x77CD, /* 0xC0 */ + 0x5EF4, 0x51F5, 0x51FC, 0x9B2F, 0x53B6, 0x5F01, 0x755A, 0x5DEF, /* 0xC0 */ + 0x574C, 0x57A9, 0x57A1, 0x587E, 0x58BC, 0x58C5, 0x58D1, 0x5729, /* 0xD0 */ + 0x572C, 0x572A, 0x5733, 0x5739, 0x572E, 0x572F, 0x575C, 0x573B, /* 0xD0 */ + 0x5742, 0x5769, 0x5785, 0x576B, 0x5786, 0x577C, 0x577B, 0x5768, /* 0xE0 */ + 0x576D, 0x5776, 0x5773, 0x57AD, 0x57A4, 0x578C, 0x57B2, 0x57CF, /* 0xE0 */ + 0x57A7, 0x57B4, 0x5793, 0x57A0, 0x57D5, 0x57D8, 0x57DA, 0x57D9, /* 0xF0 */ + 0x57D2, 0x57B8, 0x57F4, 0x57EF, 0x57F8, 0x57E4, 0x57DD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_DC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E73, 0x8E75, 0x8E77, 0x8E78, 0x8E79, 0x8E7A, 0x8E7B, 0x8E7D, /* 0x40 */ + 0x8E7E, 0x8E80, 0x8E82, 0x8E83, 0x8E84, 0x8E86, 0x8E88, 0x8E89, /* 0x40 */ + 0x8E8A, 0x8E8B, 0x8E8C, 0x8E8D, 0x8E8E, 0x8E91, 0x8E92, 0x8E93, /* 0x50 */ + 0x8E95, 0x8E96, 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0x8E9B, 0x8E9D, /* 0x50 */ + 0x8E9F, 0x8EA0, 0x8EA1, 0x8EA2, 0x8EA3, 0x8EA4, 0x8EA5, 0x8EA6, /* 0x60 */ + 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAA, 0x8EAD, 0x8EAE, 0x8EB0, 0x8EB1, /* 0x60 */ + 0x8EB3, 0x8EB4, 0x8EB5, 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBB, /* 0x70 */ + 0x8EBC, 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC0, 0x8EC1, 0x8EC2, 0, /* 0x70 */ + 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, 0x8ECA, /* 0x80 */ + 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECF, 0x8ED0, 0x8ED1, 0x8ED2, 0x8ED3, /* 0x80 */ + 0x8ED4, 0x8ED5, 0x8ED6, 0x8ED7, 0x8ED8, 0x8ED9, 0x8EDA, 0x8EDB, /* 0x90 */ + 0x8EDC, 0x8EDD, 0x8EDE, 0x8EDF, 0x8EE0, 0x8EE1, 0x8EE2, 0x8EE3, /* 0x90 */ + 0x8EE4, 0x580B, 0x580D, 0x57FD, 0x57ED, 0x5800, 0x581E, 0x5819, /* 0xA0 */ + 0x5844, 0x5820, 0x5865, 0x586C, 0x5881, 0x5889, 0x589A, 0x5880, /* 0xA0 */ + 0x99A8, 0x9F19, 0x61FF, 0x8279, 0x827D, 0x827F, 0x828F, 0x828A, /* 0xB0 */ + 0x82A8, 0x8284, 0x828E, 0x8291, 0x8297, 0x8299, 0x82AB, 0x82B8, /* 0xB0 */ + 0x82BE, 0x82B0, 0x82C8, 0x82CA, 0x82E3, 0x8298, 0x82B7, 0x82AE, /* 0xC0 */ + 0x82CB, 0x82CC, 0x82C1, 0x82A9, 0x82B4, 0x82A1, 0x82AA, 0x829F, /* 0xC0 */ + 0x82C4, 0x82CE, 0x82A4, 0x82E1, 0x8309, 0x82F7, 0x82E4, 0x830F, /* 0xD0 */ + 0x8307, 0x82DC, 0x82F4, 0x82D2, 0x82D8, 0x830C, 0x82FB, 0x82D3, /* 0xD0 */ + 0x8311, 0x831A, 0x8306, 0x8314, 0x8315, 0x82E0, 0x82D5, 0x831C, /* 0xE0 */ + 0x8351, 0x835B, 0x835C, 0x8308, 0x8392, 0x833C, 0x8334, 0x8331, /* 0xE0 */ + 0x839B, 0x835E, 0x832F, 0x834F, 0x8347, 0x8343, 0x835F, 0x8340, /* 0xF0 */ + 0x8317, 0x8360, 0x832D, 0x833A, 0x8333, 0x8366, 0x8365 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_DD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, /* 0x40 */ + 0x8EED, 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF2, 0x8EF3, 0x8EF4, /* 0x40 */ + 0x8EF5, 0x8EF6, 0x8EF7, 0x8EF8, 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, /* 0x50 */ + 0x8EFD, 0x8EFE, 0x8EFF, 0x8F00, 0x8F01, 0x8F02, 0x8F03, 0x8F04, /* 0x50 */ + 0x8F05, 0x8F06, 0x8F07, 0x8F08, 0x8F09, 0x8F0A, 0x8F0B, 0x8F0C, /* 0x60 */ + 0x8F0D, 0x8F0E, 0x8F0F, 0x8F10, 0x8F11, 0x8F12, 0x8F13, 0x8F14, /* 0x60 */ + 0x8F15, 0x8F16, 0x8F17, 0x8F18, 0x8F19, 0x8F1A, 0x8F1B, 0x8F1C, /* 0x70 */ + 0x8F1D, 0x8F1E, 0x8F1F, 0x8F20, 0x8F21, 0x8F22, 0x8F23, 0, /* 0x70 */ + 0x8F24, 0x8F25, 0x8F26, 0x8F27, 0x8F28, 0x8F29, 0x8F2A, 0x8F2B, /* 0x80 */ + 0x8F2C, 0x8F2D, 0x8F2E, 0x8F2F, 0x8F30, 0x8F31, 0x8F32, 0x8F33, /* 0x80 */ + 0x8F34, 0x8F35, 0x8F36, 0x8F37, 0x8F38, 0x8F39, 0x8F3A, 0x8F3B, /* 0x90 */ + 0x8F3C, 0x8F3D, 0x8F3E, 0x8F3F, 0x8F40, 0x8F41, 0x8F42, 0x8F43, /* 0x90 */ + 0x8F44, 0x8368, 0x831B, 0x8369, 0x836C, 0x836A, 0x836D, 0x836E, /* 0xA0 */ + 0x83B0, 0x8378, 0x83B3, 0x83B4, 0x83A0, 0x83AA, 0x8393, 0x839C, /* 0xA0 */ + 0x8385, 0x837C, 0x83B6, 0x83A9, 0x837D, 0x83B8, 0x837B, 0x8398, /* 0xB0 */ + 0x839E, 0x83A8, 0x83BA, 0x83BC, 0x83C1, 0x8401, 0x83E5, 0x83D8, /* 0xB0 */ + 0x5807, 0x8418, 0x840B, 0x83DD, 0x83FD, 0x83D6, 0x841C, 0x8438, /* 0xC0 */ + 0x8411, 0x8406, 0x83D4, 0x83DF, 0x840F, 0x8403, 0x83F8, 0x83F9, /* 0xC0 */ + 0x83EA, 0x83C5, 0x83C0, 0x8426, 0x83F0, 0x83E1, 0x845C, 0x8451, /* 0xD0 */ + 0x845A, 0x8459, 0x8473, 0x8487, 0x8488, 0x847A, 0x8489, 0x8478, /* 0xD0 */ + 0x843C, 0x8446, 0x8469, 0x8476, 0x848C, 0x848E, 0x8431, 0x846D, /* 0xE0 */ + 0x84C1, 0x84CD, 0x84D0, 0x84E6, 0x84BD, 0x84D3, 0x84CA, 0x84BF, /* 0xE0 */ + 0x84BA, 0x84E0, 0x84A1, 0x84B9, 0x84B4, 0x8497, 0x84E5, 0x84E3, /* 0xF0 */ + 0x850C, 0x750D, 0x8538, 0x84F0, 0x8539, 0x851F, 0x853A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_DE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8F45, 0x8F46, 0x8F47, 0x8F48, 0x8F49, 0x8F4A, 0x8F4B, 0x8F4C, /* 0x40 */ + 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, 0x8F53, 0x8F54, /* 0x40 */ + 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, 0x8F5B, 0x8F5C, /* 0x50 */ + 0x8F5D, 0x8F5E, 0x8F5F, 0x8F60, 0x8F61, 0x8F62, 0x8F63, 0x8F64, /* 0x50 */ + 0x8F65, 0x8F6A, 0x8F80, 0x8F8C, 0x8F92, 0x8F9D, 0x8FA0, 0x8FA1, /* 0x60 */ + 0x8FA2, 0x8FA4, 0x8FA5, 0x8FA6, 0x8FA7, 0x8FAA, 0x8FAC, 0x8FAD, /* 0x60 */ + 0x8FAE, 0x8FAF, 0x8FB2, 0x8FB3, 0x8FB4, 0x8FB5, 0x8FB7, 0x8FB8, /* 0x70 */ + 0x8FBA, 0x8FBB, 0x8FBC, 0x8FBF, 0x8FC0, 0x8FC3, 0x8FC6, 0, /* 0x70 */ + 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, 0x8FCD, 0x8FCF, 0x8FD2, 0x8FD6, /* 0x80 */ + 0x8FD7, 0x8FDA, 0x8FE0, 0x8FE1, 0x8FE3, 0x8FE7, 0x8FEC, 0x8FEF, /* 0x80 */ + 0x8FF1, 0x8FF2, 0x8FF4, 0x8FF5, 0x8FF6, 0x8FFA, 0x8FFB, 0x8FFC, /* 0x90 */ + 0x8FFE, 0x8FFF, 0x9007, 0x9008, 0x900C, 0x900E, 0x9013, 0x9015, /* 0x90 */ + 0x9018, 0x8556, 0x853B, 0x84FF, 0x84FC, 0x8559, 0x8548, 0x8568, /* 0xA0 */ + 0x8564, 0x855E, 0x857A, 0x77A2, 0x8543, 0x8572, 0x857B, 0x85A4, /* 0xA0 */ + 0x85A8, 0x8587, 0x858F, 0x8579, 0x85AE, 0x859C, 0x8585, 0x85B9, /* 0xB0 */ + 0x85B7, 0x85B0, 0x85D3, 0x85C1, 0x85DC, 0x85FF, 0x8627, 0x8605, /* 0xB0 */ + 0x8629, 0x8616, 0x863C, 0x5EFE, 0x5F08, 0x593C, 0x5941, 0x8037, /* 0xC0 */ + 0x5955, 0x595A, 0x5958, 0x530F, 0x5C22, 0x5C25, 0x5C2C, 0x5C34, /* 0xC0 */ + 0x624C, 0x626A, 0x629F, 0x62BB, 0x62CA, 0x62DA, 0x62D7, 0x62EE, /* 0xD0 */ + 0x6322, 0x62F6, 0x6339, 0x634B, 0x6343, 0x63AD, 0x63F6, 0x6371, /* 0xD0 */ + 0x637A, 0x638E, 0x63B4, 0x636D, 0x63AC, 0x638A, 0x6369, 0x63AE, /* 0xE0 */ + 0x63BC, 0x63F2, 0x63F8, 0x63E0, 0x63FF, 0x63C4, 0x63DE, 0x63CE, /* 0xE0 */ + 0x6452, 0x63C6, 0x63BE, 0x6445, 0x6441, 0x640B, 0x641B, 0x6420, /* 0xF0 */ + 0x640C, 0x6426, 0x6421, 0x645E, 0x6484, 0x646D, 0x6496 /* 0xF0 */ +}; +sal_uInt16 const aImplDBCSToUniTab_GBK_DF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9019, 0x901C, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029, /* 0x40 */ + 0x902A, 0x902B, 0x902C, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034, /* 0x40 */ + 0x9037, 0x9039, 0x903A, 0x903D, 0x903F, 0x9040, 0x9043, 0x9045, /* 0x50 */ + 0x9046, 0x9048, 0x9049, 0x904A, 0x904B, 0x904C, 0x904E, 0x9054, /* 0x50 */ + 0x9055, 0x9056, 0x9059, 0x905A, 0x905C, 0x905D, 0x905E, 0x905F, /* 0x60 */ + 0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906A, 0x906B, /* 0x60 */ + 0x906C, 0x906F, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077, /* 0x70 */ + 0x9078, 0x9079, 0x907A, 0x907B, 0x907C, 0x907E, 0x9081, 0, /* 0x70 */ + 0x9084, 0x9085, 0x9086, 0x9087, 0x9089, 0x908A, 0x908C, 0x908D, /* 0x80 */ + 0x908E, 0x908F, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909A, /* 0x80 */ + 0x909C, 0x909E, 0x909F, 0x90A0, 0x90A4, 0x90A5, 0x90A7, 0x90A8, /* 0x90 */ + 0x90A9, 0x90AB, 0x90AD, 0x90B2, 0x90B7, 0x90BC, 0x90BD, 0x90BF, /* 0x90 */ + 0x90C0, 0x647A, 0x64B7, 0x64B8, 0x6499, 0x64BA, 0x64C0, 0x64D0, /* 0xA0 */ + 0x64D7, 0x64E4, 0x64E2, 0x6509, 0x6525, 0x652E, 0x5F0B, 0x5FD2, /* 0xA0 */ + 0x7519, 0x5F11, 0x535F, 0x53F1, 0x53FD, 0x53E9, 0x53E8, 0x53FB, /* 0xB0 */ + 0x5412, 0x5416, 0x5406, 0x544B, 0x5452, 0x5453, 0x5454, 0x5456, /* 0xB0 */ + 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, /* 0xC0 */ + 0x5477, 0x5471, 0x5464, 0x549A, 0x549B, 0x5484, 0x5476, 0x5466, /* 0xC0 */ + 0x549D, 0x54D0, 0x54AD, 0x54C2, 0x54B4, 0x54D2, 0x54A7, 0x54A6, /* 0xD0 */ + 0x54D3, 0x54D4, 0x5472, 0x54A3, 0x54D5, 0x54BB, 0x54BF, 0x54CC, /* 0xD0 */ + 0x54D9, 0x54DA, 0x54DC, 0x54A9, 0x54AA, 0x54A4, 0x54DD, 0x54CF, /* 0xE0 */ + 0x54DE, 0x551B, 0x54E7, 0x5520, 0x54FD, 0x5514, 0x54F3, 0x5522, /* 0xE0 */ + 0x5523, 0x550F, 0x5511, 0x5527, 0x552A, 0x5567, 0x558F, 0x55B5, /* 0xF0 */ + 0x5549, 0x556D, 0x5541, 0x5555, 0x553F, 0x5550, 0x553C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90C2, 0x90C3, 0x90C6, 0x90C8, 0x90C9, 0x90CB, 0x90CC, 0x90CD, /* 0x40 */ + 0x90D2, 0x90D4, 0x90D5, 0x90D6, 0x90D8, 0x90D9, 0x90DA, 0x90DE, /* 0x40 */ + 0x90DF, 0x90E0, 0x90E3, 0x90E4, 0x90E5, 0x90E9, 0x90EA, 0x90EC, /* 0x50 */ + 0x90EE, 0x90F0, 0x90F1, 0x90F2, 0x90F3, 0x90F5, 0x90F6, 0x90F7, /* 0x50 */ + 0x90F9, 0x90FA, 0x90FB, 0x90FC, 0x90FF, 0x9100, 0x9101, 0x9103, /* 0x60 */ + 0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910A, 0x910B, 0x910C, /* 0x60 */ + 0x910D, 0x910E, 0x910F, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114, /* 0x70 */ + 0x9115, 0x9116, 0x9117, 0x9118, 0x911A, 0x911B, 0x911C, 0, /* 0x70 */ + 0x911D, 0x911F, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, /* 0x80 */ + 0x9128, 0x9129, 0x912A, 0x912B, 0x912C, 0x912D, 0x912E, 0x9130, /* 0x80 */ + 0x9132, 0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913A, /* 0x90 */ + 0x913B, 0x913C, 0x913D, 0x913E, 0x913F, 0x9140, 0x9141, 0x9142, /* 0x90 */ + 0x9144, 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, /* 0xA0 */ + 0x555C, 0x558B, 0x55D2, 0x5583, 0x55B1, 0x55B9, 0x5588, 0x5581, /* 0xA0 */ + 0x559F, 0x557E, 0x55D6, 0x5591, 0x557B, 0x55DF, 0x55BD, 0x55BE, /* 0xB0 */ + 0x5594, 0x5599, 0x55EA, 0x55F7, 0x55C9, 0x561F, 0x55D1, 0x55EB, /* 0xB0 */ + 0x55EC, 0x55D4, 0x55E6, 0x55DD, 0x55C4, 0x55EF, 0x55E5, 0x55F2, /* 0xC0 */ + 0x55F3, 0x55CC, 0x55CD, 0x55E8, 0x55F5, 0x55E4, 0x8F94, 0x561E, /* 0xC0 */ + 0x5608, 0x560C, 0x5601, 0x5624, 0x5623, 0x55FE, 0x5600, 0x5627, /* 0xD0 */ + 0x562D, 0x5658, 0x5639, 0x5657, 0x562C, 0x564D, 0x5662, 0x5659, /* 0xD0 */ + 0x565C, 0x564C, 0x5654, 0x5686, 0x5664, 0x5671, 0x566B, 0x567B, /* 0xE0 */ + 0x567C, 0x5685, 0x5693, 0x56AF, 0x56D4, 0x56D7, 0x56DD, 0x56E1, /* 0xE0 */ + 0x56F5, 0x56EB, 0x56F9, 0x56FF, 0x5704, 0x570A, 0x5709, 0x571C, /* 0xF0 */ + 0x5E0F, 0x5E19, 0x5E14, 0x5E11, 0x5E31, 0x5E3B, 0x5E3C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156, /* 0x40 */ + 0x9158, 0x9159, 0x915B, 0x915C, 0x915F, 0x9160, 0x9166, 0x9167, /* 0x40 */ + 0x9168, 0x916B, 0x916D, 0x9173, 0x917A, 0x917B, 0x917C, 0x9180, /* 0x50 */ + 0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918A, 0x918E, /* 0x50 */ + 0x918F, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, /* 0x60 */ + 0x919C, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1, 0x91A4, 0x91A5, /* 0x60 */ + 0x91A6, 0x91A7, 0x91A8, 0x91A9, 0x91AB, 0x91AC, 0x91B0, 0x91B1, /* 0x70 */ + 0x91B2, 0x91B3, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BB, 0, /* 0x70 */ + 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0x91C2, 0x91C3, /* 0x80 */ + 0x91C4, 0x91C5, 0x91C6, 0x91C8, 0x91CB, 0x91D0, 0x91D2, 0x91D3, /* 0x80 */ + 0x91D4, 0x91D5, 0x91D6, 0x91D7, 0x91D8, 0x91D9, 0x91DA, 0x91DB, /* 0x90 */ + 0x91DD, 0x91DE, 0x91DF, 0x91E0, 0x91E1, 0x91E2, 0x91E3, 0x91E4, /* 0x90 */ + 0x91E5, 0x5E37, 0x5E44, 0x5E54, 0x5E5B, 0x5E5E, 0x5E61, 0x5C8C, /* 0xA0 */ + 0x5C7A, 0x5C8D, 0x5C90, 0x5C96, 0x5C88, 0x5C98, 0x5C99, 0x5C91, /* 0xA0 */ + 0x5C9A, 0x5C9C, 0x5CB5, 0x5CA2, 0x5CBD, 0x5CAC, 0x5CAB, 0x5CB1, /* 0xB0 */ + 0x5CA3, 0x5CC1, 0x5CB7, 0x5CC4, 0x5CD2, 0x5CE4, 0x5CCB, 0x5CE5, /* 0xB0 */ + 0x5D02, 0x5D03, 0x5D27, 0x5D26, 0x5D2E, 0x5D24, 0x5D1E, 0x5D06, /* 0xC0 */ + 0x5D1B, 0x5D58, 0x5D3E, 0x5D34, 0x5D3D, 0x5D6C, 0x5D5B, 0x5D6F, /* 0xC0 */ + 0x5D5D, 0x5D6B, 0x5D4B, 0x5D4A, 0x5D69, 0x5D74, 0x5D82, 0x5D99, /* 0xD0 */ + 0x5D9D, 0x8C73, 0x5DB7, 0x5DC5, 0x5F73, 0x5F77, 0x5F82, 0x5F87, /* 0xD0 */ + 0x5F89, 0x5F8C, 0x5F95, 0x5F99, 0x5F9C, 0x5FA8, 0x5FAD, 0x5FB5, /* 0xE0 */ + 0x5FBC, 0x8862, 0x5F61, 0x72AD, 0x72B0, 0x72B4, 0x72B7, 0x72B8, /* 0xE0 */ + 0x72C3, 0x72C1, 0x72CE, 0x72CD, 0x72D2, 0x72E8, 0x72EF, 0x72E9, /* 0xF0 */ + 0x72F2, 0x72F4, 0x72F7, 0x7301, 0x72F3, 0x7303, 0x72FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x91E6, 0x91E7, 0x91E8, 0x91E9, 0x91EA, 0x91EB, 0x91EC, 0x91ED, /* 0x40 */ + 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F2, 0x91F3, 0x91F4, 0x91F5, /* 0x40 */ + 0x91F6, 0x91F7, 0x91F8, 0x91F9, 0x91FA, 0x91FB, 0x91FC, 0x91FD, /* 0x50 */ + 0x91FE, 0x91FF, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, /* 0x50 */ + 0x9206, 0x9207, 0x9208, 0x9209, 0x920A, 0x920B, 0x920C, 0x920D, /* 0x60 */ + 0x920E, 0x920F, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215, /* 0x60 */ + 0x9216, 0x9217, 0x9218, 0x9219, 0x921A, 0x921B, 0x921C, 0x921D, /* 0x70 */ + 0x921E, 0x921F, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0, /* 0x70 */ + 0x9225, 0x9226, 0x9227, 0x9228, 0x9229, 0x922A, 0x922B, 0x922C, /* 0x80 */ + 0x922D, 0x922E, 0x922F, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, /* 0x80 */ + 0x9235, 0x9236, 0x9237, 0x9238, 0x9239, 0x923A, 0x923B, 0x923C, /* 0x90 */ + 0x923D, 0x923E, 0x923F, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, /* 0x90 */ + 0x9245, 0x72FB, 0x7317, 0x7313, 0x7321, 0x730A, 0x731E, 0x731D, /* 0xA0 */ + 0x7315, 0x7322, 0x7339, 0x7325, 0x732C, 0x7338, 0x7331, 0x7350, /* 0xA0 */ + 0x734D, 0x7357, 0x7360, 0x736C, 0x736F, 0x737E, 0x821B, 0x5925, /* 0xB0 */ + 0x98E7, 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996A, /* 0xB0 */ + 0x996B, 0x996C, 0x9974, 0x9977, 0x997D, 0x9980, 0x9984, 0x9987, /* 0xC0 */ + 0x998A, 0x998D, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5E80, /* 0xC0 */ + 0x5E91, 0x5E8B, 0x5E96, 0x5EA5, 0x5EA0, 0x5EB9, 0x5EB5, 0x5EBE, /* 0xD0 */ + 0x5EB3, 0x8D53, 0x5ED2, 0x5ED1, 0x5EDB, 0x5EE8, 0x5EEA, 0x81BA, /* 0xD0 */ + 0x5FC4, 0x5FC9, 0x5FD6, 0x5FCF, 0x6003, 0x5FEE, 0x6004, 0x5FE1, /* 0xE0 */ + 0x5FE4, 0x5FFE, 0x6005, 0x6006, 0x5FEA, 0x5FED, 0x5FF8, 0x6019, /* 0xE0 */ + 0x6035, 0x6026, 0x601B, 0x600F, 0x600D, 0x6029, 0x602B, 0x600A, /* 0xF0 */ + 0x603F, 0x6021, 0x6078, 0x6079, 0x607B, 0x607A, 0x6042 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9246, 0x9247, 0x9248, 0x9249, 0x924A, 0x924B, 0x924C, 0x924D, /* 0x40 */ + 0x924E, 0x924F, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, /* 0x40 */ + 0x9256, 0x9257, 0x9258, 0x9259, 0x925A, 0x925B, 0x925C, 0x925D, /* 0x50 */ + 0x925E, 0x925F, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /* 0x50 */ + 0x9266, 0x9267, 0x9268, 0x9269, 0x926A, 0x926B, 0x926C, 0x926D, /* 0x60 */ + 0x926E, 0x926F, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276, /* 0x60 */ + 0x9277, 0x9278, 0x9279, 0x927A, 0x927B, 0x927C, 0x927D, 0x927E, /* 0x70 */ + 0x927F, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0, /* 0x70 */ + 0x9286, 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C, 0x928D, /* 0x80 */ + 0x928F, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, /* 0x80 */ + 0x9297, 0x9298, 0x9299, 0x929A, 0x929B, 0x929C, 0x929D, 0x929E, /* 0x90 */ + 0x929F, 0x92A0, 0x92A1, 0x92A2, 0x92A3, 0x92A4, 0x92A5, 0x92A6, /* 0x90 */ + 0x92A7, 0x606A, 0x607D, 0x6096, 0x609A, 0x60AD, 0x609D, 0x6083, /* 0xA0 */ + 0x6092, 0x608C, 0x609B, 0x60EC, 0x60BB, 0x60B1, 0x60DD, 0x60D8, /* 0xA0 */ + 0x60C6, 0x60DA, 0x60B4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60F4, /* 0xB0 */ + 0x6100, 0x610E, 0x612B, 0x614A, 0x6175, 0x61AC, 0x6194, 0x61A7, /* 0xB0 */ + 0x61B7, 0x61D4, 0x61F5, 0x5FDD, 0x96B3, 0x95E9, 0x95EB, 0x95F1, /* 0xC0 */ + 0x95F3, 0x95F5, 0x95F6, 0x95FC, 0x95FE, 0x9603, 0x9604, 0x9606, /* 0xC0 */ + 0x9608, 0x960A, 0x960B, 0x960C, 0x960D, 0x960F, 0x9612, 0x9615, /* 0xD0 */ + 0x9616, 0x9617, 0x9619, 0x961A, 0x4E2C, 0x723F, 0x6215, 0x6C35, /* 0xD0 */ + 0x6C54, 0x6C5C, 0x6C4A, 0x6CA3, 0x6C85, 0x6C90, 0x6C94, 0x6C8C, /* 0xE0 */ + 0x6C68, 0x6C69, 0x6C74, 0x6C76, 0x6C86, 0x6CA9, 0x6CD0, 0x6CD4, /* 0xE0 */ + 0x6CAD, 0x6CF7, 0x6CF8, 0x6CF1, 0x6CD7, 0x6CB2, 0x6CE0, 0x6CD6, /* 0xF0 */ + 0x6CFA, 0x6CEB, 0x6CEE, 0x6CB1, 0x6CD3, 0x6CEF, 0x6CFE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x92A8, 0x92A9, 0x92AA, 0x92AB, 0x92AC, 0x92AD, 0x92AF, 0x92B0, /* 0x40 */ + 0x92B1, 0x92B2, 0x92B3, 0x92B4, 0x92B5, 0x92B6, 0x92B7, 0x92B8, /* 0x40 */ + 0x92B9, 0x92BA, 0x92BB, 0x92BC, 0x92BD, 0x92BE, 0x92BF, 0x92C0, /* 0x50 */ + 0x92C1, 0x92C2, 0x92C3, 0x92C4, 0x92C5, 0x92C6, 0x92C7, 0x92C9, /* 0x50 */ + 0x92CA, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, /* 0x60 */ + 0x92D2, 0x92D3, 0x92D4, 0x92D5, 0x92D6, 0x92D7, 0x92D8, 0x92D9, /* 0x60 */ + 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0x92DE, 0x92DF, 0x92E0, 0x92E1, /* 0x70 */ + 0x92E2, 0x92E3, 0x92E4, 0x92E5, 0x92E6, 0x92E7, 0x92E8, 0, /* 0x70 */ + 0x92E9, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, /* 0x80 */ + 0x92F1, 0x92F2, 0x92F3, 0x92F4, 0x92F5, 0x92F6, 0x92F7, 0x92F8, /* 0x80 */ + 0x92F9, 0x92FA, 0x92FB, 0x92FC, 0x92FD, 0x92FE, 0x92FF, 0x9300, /* 0x90 */ + 0x9301, 0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, /* 0x90 */ + 0x9309, 0x6D39, 0x6D27, 0x6D0C, 0x6D43, 0x6D48, 0x6D07, 0x6D04, /* 0xA0 */ + 0x6D19, 0x6D0E, 0x6D2B, 0x6D4D, 0x6D2E, 0x6D35, 0x6D1A, 0x6D4F, /* 0xA0 */ + 0x6D52, 0x6D54, 0x6D33, 0x6D91, 0x6D6F, 0x6D9E, 0x6DA0, 0x6D5E, /* 0xB0 */ + 0x6D93, 0x6D94, 0x6D5C, 0x6D60, 0x6D7C, 0x6D63, 0x6E1A, 0x6DC7, /* 0xB0 */ + 0x6DC5, 0x6DDE, 0x6E0E, 0x6DBF, 0x6DE0, 0x6E11, 0x6DE6, 0x6DDD, /* 0xC0 */ + 0x6DD9, 0x6E16, 0x6DAB, 0x6E0C, 0x6DAE, 0x6E2B, 0x6E6E, 0x6E4E, /* 0xC0 */ + 0x6E6B, 0x6EB2, 0x6E5F, 0x6E86, 0x6E53, 0x6E54, 0x6E32, 0x6E25, /* 0xD0 */ + 0x6E44, 0x6EDF, 0x6EB1, 0x6E98, 0x6EE0, 0x6F2D, 0x6EE2, 0x6EA5, /* 0xD0 */ + 0x6EA7, 0x6EBD, 0x6EBB, 0x6EB7, 0x6ED7, 0x6EB4, 0x6ECF, 0x6E8F, /* 0xE0 */ + 0x6EC2, 0x6E9F, 0x6F62, 0x6F46, 0x6F47, 0x6F24, 0x6F15, 0x6EF9, /* 0xE0 */ + 0x6F2F, 0x6F36, 0x6F4B, 0x6F74, 0x6F2A, 0x6F09, 0x6F29, 0x6F89, /* 0xF0 */ + 0x6F8D, 0x6F8C, 0x6F78, 0x6F72, 0x6F7C, 0x6F7A, 0x6FD1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x930A, 0x930B, 0x930C, 0x930D, 0x930E, 0x930F, 0x9310, 0x9311, /* 0x40 */ + 0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319, /* 0x40 */ + 0x931A, 0x931B, 0x931C, 0x931D, 0x931E, 0x931F, 0x9320, 0x9321, /* 0x50 */ + 0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329, /* 0x50 */ + 0x932A, 0x932B, 0x932C, 0x932D, 0x932E, 0x932F, 0x9330, 0x9331, /* 0x60 */ + 0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339, /* 0x60 */ + 0x933A, 0x933B, 0x933C, 0x933D, 0x933F, 0x9340, 0x9341, 0x9342, /* 0x70 */ + 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0, /* 0x70 */ + 0x934A, 0x934B, 0x934C, 0x934D, 0x934E, 0x934F, 0x9350, 0x9351, /* 0x80 */ + 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, /* 0x80 */ + 0x935A, 0x935B, 0x935C, 0x935D, 0x935E, 0x935F, 0x9360, 0x9361, /* 0x90 */ + 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, /* 0x90 */ + 0x936B, 0x6FC9, 0x6FA7, 0x6FB9, 0x6FB6, 0x6FC2, 0x6FE1, 0x6FEE, /* 0xA0 */ + 0x6FDE, 0x6FE0, 0x6FEF, 0x701A, 0x7023, 0x701B, 0x7039, 0x7035, /* 0xA0 */ + 0x704F, 0x705E, 0x5B80, 0x5B84, 0x5B95, 0x5B93, 0x5BA5, 0x5BB8, /* 0xB0 */ + 0x752F, 0x9A9E, 0x6434, 0x5BE4, 0x5BEE, 0x8930, 0x5BF0, 0x8E47, /* 0xB0 */ + 0x8B07, 0x8FB6, 0x8FD3, 0x8FD5, 0x8FE5, 0x8FEE, 0x8FE4, 0x8FE9, /* 0xC0 */ + 0x8FE6, 0x8FF3, 0x8FE8, 0x9005, 0x9004, 0x900B, 0x9026, 0x9011, /* 0xC0 */ + 0x900D, 0x9016, 0x9021, 0x9035, 0x9036, 0x902D, 0x902F, 0x9044, /* 0xD0 */ + 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905B, 0x66B9, /* 0xD0 */ + 0x9074, 0x907D, 0x9082, 0x9088, 0x9083, 0x908B, 0x5F50, 0x5F57, /* 0xE0 */ + 0x5F56, 0x5F58, 0x5C3B, 0x54AB, 0x5C50, 0x5C59, 0x5B71, 0x5C63, /* 0xE0 */ + 0x5C66, 0x7FBC, 0x5F2A, 0x5F29, 0x5F2D, 0x8274, 0x5F3C, 0x9B3B, /* 0xF0 */ + 0x5C6E, 0x5981, 0x5983, 0x598D, 0x59A9, 0x59AA, 0x59A3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x936C, 0x936D, 0x936E, 0x936F, 0x9370, 0x9371, 0x9372, 0x9373, /* 0x40 */ + 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937A, 0x937B, /* 0x40 */ + 0x937C, 0x937D, 0x937E, 0x937F, 0x9380, 0x9381, 0x9382, 0x9383, /* 0x50 */ + 0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938A, 0x938B, /* 0x50 */ + 0x938C, 0x938D, 0x938E, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, /* 0x60 */ + 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, /* 0x60 */ + 0x939D, 0x939E, 0x939F, 0x93A0, 0x93A1, 0x93A2, 0x93A3, 0x93A4, /* 0x70 */ + 0x93A5, 0x93A6, 0x93A7, 0x93A8, 0x93A9, 0x93AA, 0x93AB, 0, /* 0x70 */ + 0x93AC, 0x93AD, 0x93AE, 0x93AF, 0x93B0, 0x93B1, 0x93B2, 0x93B3, /* 0x80 */ + 0x93B4, 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, 0x93BB, /* 0x80 */ + 0x93BC, 0x93BD, 0x93BE, 0x93BF, 0x93C0, 0x93C1, 0x93C2, 0x93C3, /* 0x90 */ + 0x93C4, 0x93C5, 0x93C6, 0x93C7, 0x93C8, 0x93C9, 0x93CB, 0x93CC, /* 0x90 */ + 0x93CD, 0x5997, 0x59CA, 0x59AB, 0x599E, 0x59A4, 0x59D2, 0x59B2, /* 0xA0 */ + 0x59AF, 0x59D7, 0x59BE, 0x5A05, 0x5A06, 0x59DD, 0x5A08, 0x59E3, /* 0xA0 */ + 0x59D8, 0x59F9, 0x5A0C, 0x5A09, 0x5A32, 0x5A34, 0x5A11, 0x5A23, /* 0xB0 */ + 0x5A13, 0x5A40, 0x5A67, 0x5A4A, 0x5A55, 0x5A3C, 0x5A62, 0x5A75, /* 0xB0 */ + 0x80EC, 0x5AAA, 0x5A9B, 0x5A77, 0x5A7A, 0x5ABE, 0x5AEB, 0x5AB2, /* 0xC0 */ + 0x5AD2, 0x5AD4, 0x5AB8, 0x5AE0, 0x5AE3, 0x5AF1, 0x5AD6, 0x5AE6, /* 0xC0 */ + 0x5AD8, 0x5ADC, 0x5B09, 0x5B17, 0x5B16, 0x5B32, 0x5B37, 0x5B40, /* 0xD0 */ + 0x5C15, 0x5C1C, 0x5B5A, 0x5B65, 0x5B73, 0x5B51, 0x5B53, 0x5B62, /* 0xD0 */ + 0x9A75, 0x9A77, 0x9A78, 0x9A7A, 0x9A7F, 0x9A7D, 0x9A80, 0x9A81, /* 0xE0 */ + 0x9A85, 0x9A88, 0x9A8A, 0x9A90, 0x9A92, 0x9A93, 0x9A96, 0x9A98, /* 0xE0 */ + 0x9A9B, 0x9A9C, 0x9A9D, 0x9A9F, 0x9AA0, 0x9AA2, 0x9AA3, 0x9AA5, /* 0xF0 */ + 0x9AA7, 0x7E9F, 0x7EA1, 0x7EA3, 0x7EA5, 0x7EA8, 0x7EA9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x93CE, 0x93CF, 0x93D0, 0x93D1, 0x93D2, 0x93D3, 0x93D4, 0x93D5, /* 0x40 */ + 0x93D7, 0x93D8, 0x93D9, 0x93DA, 0x93DB, 0x93DC, 0x93DD, 0x93DE, /* 0x40 */ + 0x93DF, 0x93E0, 0x93E1, 0x93E2, 0x93E3, 0x93E4, 0x93E5, 0x93E6, /* 0x50 */ + 0x93E7, 0x93E8, 0x93E9, 0x93EA, 0x93EB, 0x93EC, 0x93ED, 0x93EE, /* 0x50 */ + 0x93EF, 0x93F0, 0x93F1, 0x93F2, 0x93F3, 0x93F4, 0x93F5, 0x93F6, /* 0x60 */ + 0x93F7, 0x93F8, 0x93F9, 0x93FA, 0x93FB, 0x93FC, 0x93FD, 0x93FE, /* 0x60 */ + 0x93FF, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406, /* 0x70 */ + 0x9407, 0x9408, 0x9409, 0x940A, 0x940B, 0x940C, 0x940D, 0, /* 0x70 */ + 0x940E, 0x940F, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, /* 0x80 */ + 0x9416, 0x9417, 0x9418, 0x9419, 0x941A, 0x941B, 0x941C, 0x941D, /* 0x80 */ + 0x941E, 0x941F, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, /* 0x90 */ + 0x9426, 0x9427, 0x9428, 0x9429, 0x942A, 0x942B, 0x942C, 0x942D, /* 0x90 */ + 0x942E, 0x7EAD, 0x7EB0, 0x7EBE, 0x7EC0, 0x7EC1, 0x7EC2, 0x7EC9, /* 0xA0 */ + 0x7ECB, 0x7ECC, 0x7ED0, 0x7ED4, 0x7ED7, 0x7EDB, 0x7EE0, 0x7EE1, /* 0xA0 */ + 0x7EE8, 0x7EEB, 0x7EEE, 0x7EEF, 0x7EF1, 0x7EF2, 0x7F0D, 0x7EF6, /* 0xB0 */ + 0x7EFA, 0x7EFB, 0x7EFE, 0x7F01, 0x7F02, 0x7F03, 0x7F07, 0x7F08, /* 0xB0 */ + 0x7F0B, 0x7F0C, 0x7F0F, 0x7F11, 0x7F12, 0x7F17, 0x7F19, 0x7F1C, /* 0xC0 */ + 0x7F1B, 0x7F1F, 0x7F21, 0x7F22, 0x7F23, 0x7F24, 0x7F25, 0x7F26, /* 0xC0 */ + 0x7F27, 0x7F2A, 0x7F2B, 0x7F2C, 0x7F2D, 0x7F2F, 0x7F30, 0x7F31, /* 0xD0 */ + 0x7F32, 0x7F33, 0x7F35, 0x5E7A, 0x757F, 0x5DDB, 0x753E, 0x9095, /* 0xD0 */ + 0x738E, 0x7391, 0x73AE, 0x73A2, 0x739F, 0x73CF, 0x73C2, 0x73D1, /* 0xE0 */ + 0x73B7, 0x73B3, 0x73C0, 0x73C9, 0x73C8, 0x73E5, 0x73D9, 0x987C, /* 0xE0 */ + 0x740A, 0x73E9, 0x73E7, 0x73DE, 0x73BA, 0x73F2, 0x740F, 0x742A, /* 0xF0 */ + 0x745B, 0x7426, 0x7425, 0x7428, 0x7430, 0x742E, 0x742C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x942F, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, /* 0x40 */ + 0x9437, 0x9438, 0x9439, 0x943A, 0x943B, 0x943C, 0x943D, 0x943F, /* 0x40 */ + 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, /* 0x50 */ + 0x9448, 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, 0x944F, /* 0x50 */ + 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, /* 0x60 */ + 0x9458, 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E, 0x945F, /* 0x60 */ + 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /* 0x70 */ + 0x9468, 0x9469, 0x946A, 0x946C, 0x946D, 0x946E, 0x946F, 0, /* 0x70 */ + 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, /* 0x80 */ + 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, 0x947D, 0x947E, 0x947F, /* 0x80 */ + 0x9480, 0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, /* 0x90 */ + 0x94C7, 0x94CF, 0x94D3, 0x94D4, 0x94DA, 0x94E6, 0x94FB, 0x951C, /* 0x90 */ + 0x9520, 0x741B, 0x741A, 0x7441, 0x745C, 0x7457, 0x7455, 0x7459, /* 0xA0 */ + 0x7477, 0x746D, 0x747E, 0x749C, 0x748E, 0x7480, 0x7481, 0x7487, /* 0xA0 */ + 0x748B, 0x749E, 0x74A8, 0x74A9, 0x7490, 0x74A7, 0x74D2, 0x74BA, /* 0xB0 */ + 0x97EA, 0x97EB, 0x97EC, 0x674C, 0x6753, 0x675E, 0x6748, 0x6769, /* 0xB0 */ + 0x67A5, 0x6787, 0x676A, 0x6773, 0x6798, 0x67A7, 0x6775, 0x67A8, /* 0xC0 */ + 0x679E, 0x67AD, 0x678B, 0x6777, 0x677C, 0x67F0, 0x6809, 0x67D8, /* 0xC0 */ + 0x680A, 0x67E9, 0x67B0, 0x680C, 0x67D9, 0x67B5, 0x67DA, 0x67B3, /* 0xD0 */ + 0x67DD, 0x6800, 0x67C3, 0x67B8, 0x67E2, 0x680E, 0x67C1, 0x67FD, /* 0xD0 */ + 0x6832, 0x6833, 0x6860, 0x6861, 0x684E, 0x6862, 0x6844, 0x6864, /* 0xE0 */ + 0x6883, 0x681D, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683E, /* 0xE0 */ + 0x684A, 0x6849, 0x6829, 0x68B5, 0x688F, 0x6874, 0x6877, 0x6893, /* 0xF0 */ + 0x686B, 0x68C2, 0x696E, 0x68FC, 0x691F, 0x6920, 0x68F9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_E9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9527, 0x9533, 0x953D, 0x9543, 0x9548, 0x954B, 0x9555, 0x955A, /* 0x40 */ + 0x9560, 0x956E, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957A, /* 0x40 */ + 0x957B, 0x957C, 0x957D, 0x957E, 0x9580, 0x9581, 0x9582, 0x9583, /* 0x50 */ + 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958A, 0x958B, /* 0x50 */ + 0x958C, 0x958D, 0x958E, 0x958F, 0x9590, 0x9591, 0x9592, 0x9593, /* 0x60 */ + 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959A, 0x959B, /* 0x60 */ + 0x959C, 0x959D, 0x959E, 0x959F, 0x95A0, 0x95A1, 0x95A2, 0x95A3, /* 0x70 */ + 0x95A4, 0x95A5, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0x95AA, 0, /* 0x70 */ + 0x95AB, 0x95AC, 0x95AD, 0x95AE, 0x95AF, 0x95B0, 0x95B1, 0x95B2, /* 0x80 */ + 0x95B3, 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0x95B8, 0x95B9, 0x95BA, /* 0x80 */ + 0x95BB, 0x95BC, 0x95BD, 0x95BE, 0x95BF, 0x95C0, 0x95C1, 0x95C2, /* 0x90 */ + 0x95C3, 0x95C4, 0x95C5, 0x95C6, 0x95C7, 0x95C8, 0x95C9, 0x95CA, /* 0x90 */ + 0x95CB, 0x6924, 0x68F0, 0x690B, 0x6901, 0x6957, 0x68E3, 0x6910, /* 0xA0 */ + 0x6971, 0x6939, 0x6960, 0x6942, 0x695D, 0x6984, 0x696B, 0x6980, /* 0xA0 */ + 0x6998, 0x6978, 0x6934, 0x69CC, 0x6987, 0x6988, 0x69CE, 0x6989, /* 0xB0 */ + 0x6966, 0x6963, 0x6979, 0x699B, 0x69A7, 0x69BB, 0x69AB, 0x69AD, /* 0xB0 */ + 0x69D4, 0x69B1, 0x69C1, 0x69CA, 0x69DF, 0x6995, 0x69E0, 0x698D, /* 0xC0 */ + 0x69FF, 0x6A2F, 0x69ED, 0x6A17, 0x6A18, 0x6A65, 0x69F2, 0x6A44, /* 0xC0 */ + 0x6A3E, 0x6AA0, 0x6A50, 0x6A5B, 0x6A35, 0x6A8E, 0x6A79, 0x6A3D, /* 0xD0 */ + 0x6A28, 0x6A58, 0x6A7C, 0x6A91, 0x6A90, 0x6AA9, 0x6A97, 0x6AAB, /* 0xD0 */ + 0x7337, 0x7352, 0x6B81, 0x6B82, 0x6B87, 0x6B84, 0x6B92, 0x6B93, /* 0xE0 */ + 0x6B8D, 0x6B9A, 0x6B9B, 0x6BA1, 0x6BAA, 0x8F6B, 0x8F6D, 0x8F71, /* 0xE0 */ + 0x8F72, 0x8F73, 0x8F75, 0x8F76, 0x8F78, 0x8F77, 0x8F79, 0x8F7A, /* 0xF0 */ + 0x8F7C, 0x8F7E, 0x8F81, 0x8F82, 0x8F84, 0x8F87, 0x8F8B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_EA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, 0x95D1, 0x95D2, 0x95D3, /* 0x40 */ + 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, 0x95DA, 0x95DB, /* 0x40 */ + 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, 0x95E2, 0x95E3, /* 0x50 */ + 0x95E4, 0x95E5, 0x95E6, 0x95E7, 0x95EC, 0x95FF, 0x9607, 0x9613, /* 0x50 */ + 0x9618, 0x961B, 0x961E, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626, /* 0x60 */ + 0x9627, 0x9628, 0x9629, 0x962B, 0x962C, 0x962D, 0x962F, 0x9630, /* 0x60 */ + 0x9637, 0x9638, 0x9639, 0x963A, 0x963E, 0x9641, 0x9643, 0x964A, /* 0x70 */ + 0x964E, 0x964F, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0, /* 0x70 */ + 0x9658, 0x9659, 0x965A, 0x965C, 0x965D, 0x965E, 0x9660, 0x9663, /* 0x80 */ + 0x9665, 0x9666, 0x966B, 0x966D, 0x966E, 0x966F, 0x9670, 0x9671, /* 0x80 */ + 0x9673, 0x9678, 0x9679, 0x967A, 0x967B, 0x967C, 0x967D, 0x967E, /* 0x90 */ + 0x967F, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, /* 0x90 */ + 0x968A, 0x8F8D, 0x8F8E, 0x8F8F, 0x8F98, 0x8F9A, 0x8ECE, 0x620B, /* 0xA0 */ + 0x6217, 0x621B, 0x621F, 0x6222, 0x6221, 0x6225, 0x6224, 0x622C, /* 0xA0 */ + 0x81E7, 0x74EF, 0x74F4, 0x74FF, 0x750F, 0x7511, 0x7513, 0x6534, /* 0xB0 */ + 0x65EE, 0x65EF, 0x65F0, 0x660A, 0x6619, 0x6772, 0x6603, 0x6615, /* 0xB0 */ + 0x6600, 0x7085, 0x66F7, 0x661D, 0x6634, 0x6631, 0x6636, 0x6635, /* 0xC0 */ + 0x8006, 0x665F, 0x6654, 0x6641, 0x664F, 0x6656, 0x6661, 0x6657, /* 0xC0 */ + 0x6677, 0x6684, 0x668C, 0x66A7, 0x669D, 0x66BE, 0x66DB, 0x66DC, /* 0xD0 */ + 0x66E6, 0x66E9, 0x8D32, 0x8D33, 0x8D36, 0x8D3B, 0x8D3D, 0x8D40, /* 0xD0 */ + 0x8D45, 0x8D46, 0x8D48, 0x8D49, 0x8D47, 0x8D4D, 0x8D55, 0x8D59, /* 0xE0 */ + 0x89C7, 0x89CA, 0x89CB, 0x89CC, 0x89CE, 0x89CF, 0x89D0, 0x89D1, /* 0xE0 */ + 0x726E, 0x729F, 0x725D, 0x7266, 0x726F, 0x727E, 0x727F, 0x7284, /* 0xF0 */ + 0x728B, 0x728D, 0x728F, 0x7292, 0x6308, 0x6332, 0x63B0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_EB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x968C, 0x968E, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969A, /* 0x40 */ + 0x969B, 0x969D, 0x969E, 0x969F, 0x96A0, 0x96A1, 0x96A2, 0x96A3, /* 0x40 */ + 0x96A4, 0x96A5, 0x96A6, 0x96A8, 0x96A9, 0x96AA, 0x96AB, 0x96AC, /* 0x50 */ + 0x96AD, 0x96AE, 0x96AF, 0x96B1, 0x96B2, 0x96B4, 0x96B5, 0x96B7, /* 0x50 */ + 0x96B8, 0x96BA, 0x96BB, 0x96BF, 0x96C2, 0x96C3, 0x96C8, 0x96CA, /* 0x60 */ + 0x96CB, 0x96D0, 0x96D1, 0x96D3, 0x96D4, 0x96D6, 0x96D7, 0x96D8, /* 0x60 */ + 0x96D9, 0x96DA, 0x96DB, 0x96DC, 0x96DD, 0x96DE, 0x96DF, 0x96E1, /* 0x70 */ + 0x96E2, 0x96E3, 0x96E4, 0x96E5, 0x96E6, 0x96E7, 0x96EB, 0, /* 0x70 */ + 0x96EC, 0x96ED, 0x96EE, 0x96F0, 0x96F1, 0x96F2, 0x96F4, 0x96F5, /* 0x80 */ + 0x96F8, 0x96FA, 0x96FB, 0x96FC, 0x96FD, 0x96FF, 0x9702, 0x9703, /* 0x80 */ + 0x9705, 0x970A, 0x970B, 0x970C, 0x9710, 0x9711, 0x9712, 0x9714, /* 0x90 */ + 0x9715, 0x9717, 0x9718, 0x9719, 0x971A, 0x971B, 0x971D, 0x971F, /* 0x90 */ + 0x9720, 0x643F, 0x64D8, 0x8004, 0x6BEA, 0x6BF3, 0x6BFD, 0x6BF5, /* 0xA0 */ + 0x6BF9, 0x6C05, 0x6C07, 0x6C06, 0x6C0D, 0x6C15, 0x6C18, 0x6C19, /* 0xA0 */ + 0x6C1A, 0x6C21, 0x6C29, 0x6C24, 0x6C2A, 0x6C32, 0x6535, 0x6555, /* 0xB0 */ + 0x656B, 0x724D, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809F, /* 0xB0 */ + 0x809C, 0x8093, 0x80BC, 0x670A, 0x80BD, 0x80B1, 0x80AB, 0x80AD, /* 0xC0 */ + 0x80B4, 0x80B7, 0x80E7, 0x80E8, 0x80E9, 0x80EA, 0x80DB, 0x80C2, /* 0xC0 */ + 0x80C4, 0x80D9, 0x80CD, 0x80D7, 0x6710, 0x80DD, 0x80EB, 0x80F1, /* 0xD0 */ + 0x80F4, 0x80ED, 0x810D, 0x810E, 0x80F2, 0x80FC, 0x6715, 0x8112, /* 0xD0 */ + 0x8C5A, 0x8136, 0x811E, 0x812C, 0x8118, 0x8132, 0x8148, 0x814C, /* 0xE0 */ + 0x8153, 0x8174, 0x8159, 0x815A, 0x8171, 0x8160, 0x8169, 0x817C, /* 0xE0 */ + 0x817D, 0x816D, 0x8167, 0x584D, 0x5AB5, 0x8188, 0x8182, 0x8191, /* 0xF0 */ + 0x6ED5, 0x81A3, 0x81AA, 0x81CC, 0x6726, 0x81CA, 0x81BB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_EC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728, /* 0x40 */ + 0x9729, 0x972B, 0x972C, 0x972E, 0x972F, 0x9731, 0x9733, 0x9734, /* 0x40 */ + 0x9735, 0x9736, 0x9737, 0x973A, 0x973B, 0x973C, 0x973D, 0x973F, /* 0x50 */ + 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, /* 0x50 */ + 0x9748, 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, 0x974E, 0x974F, /* 0x60 */ + 0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975A, 0x975C, /* 0x60 */ + 0x975D, 0x975F, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976A, /* 0x70 */ + 0x976B, 0x976C, 0x976D, 0x976E, 0x976F, 0x9770, 0x9771, 0, /* 0x70 */ + 0x9772, 0x9775, 0x9777, 0x9778, 0x9779, 0x977A, 0x977B, 0x977D, /* 0x80 */ + 0x977E, 0x977F, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, /* 0x80 */ + 0x9787, 0x9788, 0x9789, 0x978A, 0x978C, 0x978E, 0x978F, 0x9790, /* 0x90 */ + 0x9793, 0x9795, 0x9796, 0x9797, 0x9799, 0x979A, 0x979B, 0x979C, /* 0x90 */ + 0x979D, 0x81C1, 0x81A6, 0x6B24, 0x6B37, 0x6B39, 0x6B43, 0x6B46, /* 0xA0 */ + 0x6B59, 0x98D1, 0x98D2, 0x98D3, 0x98D5, 0x98D9, 0x98DA, 0x6BB3, /* 0xA0 */ + 0x5F40, 0x6BC2, 0x89F3, 0x6590, 0x9F51, 0x6593, 0x65BC, 0x65C6, /* 0xB0 */ + 0x65C4, 0x65C3, 0x65CC, 0x65CE, 0x65D2, 0x65D6, 0x7080, 0x709C, /* 0xB0 */ + 0x7096, 0x709D, 0x70BB, 0x70C0, 0x70B7, 0x70AB, 0x70B1, 0x70E8, /* 0xC0 */ + 0x70CA, 0x7110, 0x7113, 0x7116, 0x712F, 0x7131, 0x7173, 0x715C, /* 0xC0 */ + 0x7168, 0x7145, 0x7172, 0x714A, 0x7178, 0x717A, 0x7198, 0x71B3, /* 0xD0 */ + 0x71B5, 0x71A8, 0x71A0, 0x71E0, 0x71D4, 0x71E7, 0x71F9, 0x721D, /* 0xD0 */ + 0x7228, 0x706C, 0x7118, 0x7166, 0x71B9, 0x623E, 0x623D, 0x6243, /* 0xE0 */ + 0x6248, 0x6249, 0x793B, 0x7940, 0x7946, 0x7949, 0x795B, 0x795C, /* 0xE0 */ + 0x7953, 0x795A, 0x7962, 0x7957, 0x7960, 0x796F, 0x7967, 0x797A, /* 0xF0 */ + 0x7985, 0x798A, 0x799A, 0x79A7, 0x79B3, 0x5FD1, 0x5FD0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_ED[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x979E, 0x979F, 0x97A1, 0x97A2, 0x97A4, 0x97A5, 0x97A6, 0x97A7, /* 0x40 */ + 0x97A8, 0x97A9, 0x97AA, 0x97AC, 0x97AE, 0x97B0, 0x97B1, 0x97B3, /* 0x40 */ + 0x97B5, 0x97B6, 0x97B7, 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, /* 0x50 */ + 0x97BD, 0x97BE, 0x97BF, 0x97C0, 0x97C1, 0x97C2, 0x97C3, 0x97C4, /* 0x50 */ + 0x97C5, 0x97C6, 0x97C7, 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, /* 0x60 */ + 0x97CD, 0x97CE, 0x97CF, 0x97D0, 0x97D1, 0x97D2, 0x97D3, 0x97D4, /* 0x60 */ + 0x97D5, 0x97D6, 0x97D7, 0x97D8, 0x97D9, 0x97DA, 0x97DB, 0x97DC, /* 0x70 */ + 0x97DD, 0x97DE, 0x97DF, 0x97E0, 0x97E1, 0x97E2, 0x97E3, 0, /* 0x70 */ + 0x97E4, 0x97E5, 0x97E8, 0x97EE, 0x97EF, 0x97F0, 0x97F1, 0x97F2, /* 0x80 */ + 0x97F4, 0x97F7, 0x97F8, 0x97F9, 0x97FA, 0x97FB, 0x97FC, 0x97FD, /* 0x80 */ + 0x97FE, 0x97FF, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, /* 0x90 */ + 0x9806, 0x9807, 0x9808, 0x9809, 0x980A, 0x980B, 0x980C, 0x980D, /* 0x90 */ + 0x980E, 0x603C, 0x605D, 0x605A, 0x6067, 0x6041, 0x6059, 0x6063, /* 0xA0 */ + 0x60AB, 0x6106, 0x610D, 0x615D, 0x61A9, 0x619D, 0x61CB, 0x61D1, /* 0xA0 */ + 0x6206, 0x8080, 0x807F, 0x6C93, 0x6CF6, 0x6DFC, 0x77F6, 0x77F8, /* 0xB0 */ + 0x7800, 0x7809, 0x7817, 0x7818, 0x7811, 0x65AB, 0x782D, 0x781C, /* 0xB0 */ + 0x781D, 0x7839, 0x783A, 0x783B, 0x781F, 0x783C, 0x7825, 0x782C, /* 0xC0 */ + 0x7823, 0x7829, 0x784E, 0x786D, 0x7856, 0x7857, 0x7826, 0x7850, /* 0xC0 */ + 0x7847, 0x784C, 0x786A, 0x789B, 0x7893, 0x789A, 0x7887, 0x789C, /* 0xD0 */ + 0x78A1, 0x78A3, 0x78B2, 0x78B9, 0x78A5, 0x78D4, 0x78D9, 0x78C9, /* 0xD0 */ + 0x78EC, 0x78F2, 0x7905, 0x78F4, 0x7913, 0x7924, 0x791E, 0x7934, /* 0xE0 */ + 0x9F9B, 0x9EF9, 0x9EFB, 0x9EFC, 0x76F1, 0x7704, 0x770D, 0x76F9, /* 0xE0 */ + 0x7707, 0x7708, 0x771A, 0x7722, 0x7719, 0x772D, 0x7726, 0x7735, /* 0xF0 */ + 0x7738, 0x7750, 0x7751, 0x7747, 0x7743, 0x775A, 0x7768 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_EE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x980F, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816, /* 0x40 */ + 0x9817, 0x9818, 0x9819, 0x981A, 0x981B, 0x981C, 0x981D, 0x981E, /* 0x40 */ + 0x981F, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826, /* 0x50 */ + 0x9827, 0x9828, 0x9829, 0x982A, 0x982B, 0x982C, 0x982D, 0x982E, /* 0x50 */ + 0x982F, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, /* 0x60 */ + 0x9837, 0x9838, 0x9839, 0x983A, 0x983B, 0x983C, 0x983D, 0x983E, /* 0x60 */ + 0x983F, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, /* 0x70 */ + 0x9847, 0x9848, 0x9849, 0x984A, 0x984B, 0x984C, 0x984D, 0, /* 0x70 */ + 0x984E, 0x984F, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, /* 0x80 */ + 0x9856, 0x9857, 0x9858, 0x9859, 0x985A, 0x985B, 0x985C, 0x985D, /* 0x80 */ + 0x985E, 0x985F, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, /* 0x90 */ + 0x9866, 0x9867, 0x9868, 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, /* 0x90 */ + 0x986E, 0x7762, 0x7765, 0x777F, 0x778D, 0x777D, 0x7780, 0x778C, /* 0xA0 */ + 0x7791, 0x779F, 0x77A0, 0x77B0, 0x77B5, 0x77BD, 0x753A, 0x7540, /* 0xA0 */ + 0x754E, 0x754B, 0x7548, 0x755B, 0x7572, 0x7579, 0x7583, 0x7F58, /* 0xB0 */ + 0x7F61, 0x7F5F, 0x8A48, 0x7F68, 0x7F74, 0x7F71, 0x7F79, 0x7F81, /* 0xB0 */ + 0x7F7E, 0x76CD, 0x76E5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948B, /* 0xC0 */ + 0x948A, 0x948C, 0x948D, 0x948F, 0x9490, 0x9494, 0x9497, 0x9495, /* 0xC0 */ + 0x949A, 0x949B, 0x949C, 0x94A3, 0x94A4, 0x94AB, 0x94AA, 0x94AD, /* 0xD0 */ + 0x94AC, 0x94AF, 0x94B0, 0x94B2, 0x94B4, 0x94B6, 0x94B7, 0x94B8, /* 0xD0 */ + 0x94B9, 0x94BA, 0x94BC, 0x94BD, 0x94BF, 0x94C4, 0x94C8, 0x94C9, /* 0xE0 */ + 0x94CA, 0x94CB, 0x94CC, 0x94CD, 0x94CE, 0x94D0, 0x94D1, 0x94D2, /* 0xE0 */ + 0x94D5, 0x94D6, 0x94D7, 0x94D9, 0x94D8, 0x94DB, 0x94DE, 0x94DF, /* 0xF0 */ + 0x94E0, 0x94E2, 0x94E4, 0x94E5, 0x94E7, 0x94E8, 0x94EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_EF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x986F, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988B, 0x988E, /* 0x40 */ + 0x9892, 0x9895, 0x9899, 0x98A3, 0x98A8, 0x98A9, 0x98AA, 0x98AB, /* 0x40 */ + 0x98AC, 0x98AD, 0x98AE, 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0x98B3, /* 0x50 */ + 0x98B4, 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, /* 0x50 */ + 0x98BC, 0x98BD, 0x98BE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, /* 0x60 */ + 0x98C4, 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0x98CB, /* 0x60 */ + 0x98CC, 0x98CD, 0x98CF, 0x98D0, 0x98D4, 0x98D6, 0x98D7, 0x98DB, /* 0x70 */ + 0x98DC, 0x98DD, 0x98E0, 0x98E1, 0x98E2, 0x98E3, 0x98E4, 0, /* 0x70 */ + 0x98E5, 0x98E6, 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0x98ED, 0x98EE, /* 0x80 */ + 0x98EF, 0x98F0, 0x98F1, 0x98F2, 0x98F3, 0x98F4, 0x98F5, 0x98F6, /* 0x80 */ + 0x98F7, 0x98F8, 0x98F9, 0x98FA, 0x98FB, 0x98FC, 0x98FD, 0x98FE, /* 0x90 */ + 0x98FF, 0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, /* 0x90 */ + 0x9907, 0x94E9, 0x94EB, 0x94EE, 0x94EF, 0x94F3, 0x94F4, 0x94F5, /* 0xA0 */ + 0x94F7, 0x94F9, 0x94FC, 0x94FD, 0x94FF, 0x9503, 0x9502, 0x9506, /* 0xA0 */ + 0x9507, 0x9509, 0x950A, 0x950D, 0x950E, 0x950F, 0x9512, 0x9513, /* 0xB0 */ + 0x9514, 0x9515, 0x9516, 0x9518, 0x951B, 0x951D, 0x951E, 0x951F, /* 0xB0 */ + 0x9522, 0x952A, 0x952B, 0x9529, 0x952C, 0x9531, 0x9532, 0x9534, /* 0xC0 */ + 0x9536, 0x9537, 0x9538, 0x953C, 0x953E, 0x953F, 0x9542, 0x9535, /* 0xC0 */ + 0x9544, 0x9545, 0x9546, 0x9549, 0x954C, 0x954E, 0x954F, 0x9552, /* 0xD0 */ + 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955B, 0x955E, /* 0xD0 */ + 0x955F, 0x955D, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, /* 0xE0 */ + 0x9568, 0x9569, 0x956A, 0x956B, 0x956C, 0x956F, 0x9571, 0x9572, /* 0xE0 */ + 0x9573, 0x953A, 0x77E7, 0x77EC, 0x96C9, 0x79D5, 0x79ED, 0x79E3, /* 0xF0 */ + 0x79EB, 0x7A06, 0x5D47, 0x7A03, 0x7A02, 0x7A1E, 0x7A14 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9908, 0x9909, 0x990A, 0x990B, 0x990C, 0x990E, 0x990F, 0x9911, /* 0x40 */ + 0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919, /* 0x40 */ + 0x991A, 0x991B, 0x991C, 0x991D, 0x991E, 0x991F, 0x9920, 0x9921, /* 0x50 */ + 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929, /* 0x50 */ + 0x992A, 0x992B, 0x992C, 0x992D, 0x992F, 0x9930, 0x9931, 0x9932, /* 0x60 */ + 0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993A, /* 0x60 */ + 0x993B, 0x993C, 0x993D, 0x993E, 0x993F, 0x9940, 0x9941, 0x9942, /* 0x70 */ + 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0, /* 0x70 */ + 0x994A, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, /* 0x80 */ + 0x9952, 0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995A, 0x995B, /* 0x80 */ + 0x995C, 0x995D, 0x995E, 0x995F, 0x9960, 0x9961, 0x9962, 0x9964, /* 0x90 */ + 0x9966, 0x9973, 0x9978, 0x9979, 0x997B, 0x997E, 0x9982, 0x9983, /* 0x90 */ + 0x9989, 0x7A39, 0x7A37, 0x7A51, 0x9ECF, 0x99A5, 0x7A70, 0x7688, /* 0xA0 */ + 0x768E, 0x7693, 0x7699, 0x76A4, 0x74DE, 0x74E0, 0x752C, 0x9E20, /* 0xA0 */ + 0x9E22, 0x9E28, 0x9E29, 0x9E2A, 0x9E2B, 0x9E2C, 0x9E32, 0x9E31, /* 0xB0 */ + 0x9E36, 0x9E38, 0x9E37, 0x9E39, 0x9E3A, 0x9E3E, 0x9E41, 0x9E42, /* 0xB0 */ + 0x9E44, 0x9E46, 0x9E47, 0x9E48, 0x9E49, 0x9E4B, 0x9E4C, 0x9E4E, /* 0xC0 */ + 0x9E51, 0x9E55, 0x9E57, 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5E, 0x9E63, /* 0xC0 */ + 0x9E66, 0x9E67, 0x9E68, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, 0x9E71, /* 0xD0 */ + 0x9E6D, 0x9E73, 0x7592, 0x7594, 0x7596, 0x75A0, 0x759D, 0x75AC, /* 0xD0 */ + 0x75A3, 0x75B3, 0x75B4, 0x75B8, 0x75C4, 0x75B1, 0x75B0, 0x75C3, /* 0xE0 */ + 0x75C2, 0x75D6, 0x75CD, 0x75E3, 0x75E8, 0x75E6, 0x75E4, 0x75EB, /* 0xE0 */ + 0x75E7, 0x7603, 0x75F1, 0x75FC, 0x75FF, 0x7610, 0x7600, 0x7605, /* 0xF0 */ + 0x760C, 0x7617, 0x760A, 0x7625, 0x7618, 0x7615, 0x7619 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x998C, 0x998E, 0x999A, 0x999B, 0x999C, 0x999D, 0x999E, 0x999F, /* 0x40 */ + 0x99A0, 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A6, 0x99A7, 0x99A9, /* 0x40 */ + 0x99AA, 0x99AB, 0x99AC, 0x99AD, 0x99AE, 0x99AF, 0x99B0, 0x99B1, /* 0x50 */ + 0x99B2, 0x99B3, 0x99B4, 0x99B5, 0x99B6, 0x99B7, 0x99B8, 0x99B9, /* 0x50 */ + 0x99BA, 0x99BB, 0x99BC, 0x99BD, 0x99BE, 0x99BF, 0x99C0, 0x99C1, /* 0x60 */ + 0x99C2, 0x99C3, 0x99C4, 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9, /* 0x60 */ + 0x99CA, 0x99CB, 0x99CC, 0x99CD, 0x99CE, 0x99CF, 0x99D0, 0x99D1, /* 0x70 */ + 0x99D2, 0x99D3, 0x99D4, 0x99D5, 0x99D6, 0x99D7, 0x99D8, 0, /* 0x70 */ + 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, 0x99DE, 0x99DF, 0x99E0, /* 0x80 */ + 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7, 0x99E8, /* 0x80 */ + 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, 0x99EE, 0x99EF, 0x99F0, /* 0x90 */ + 0x99F1, 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, 0x99F8, /* 0x90 */ + 0x99F9, 0x761B, 0x763C, 0x7622, 0x7620, 0x7640, 0x762D, 0x7630, /* 0xA0 */ + 0x763F, 0x7635, 0x7643, 0x763E, 0x7633, 0x764D, 0x765E, 0x7654, /* 0xA0 */ + 0x765C, 0x7656, 0x766B, 0x766F, 0x7FCA, 0x7AE6, 0x7A78, 0x7A79, /* 0xB0 */ + 0x7A80, 0x7A86, 0x7A88, 0x7A95, 0x7AA6, 0x7AA0, 0x7AAC, 0x7AA8, /* 0xB0 */ + 0x7AAD, 0x7AB3, 0x8864, 0x8869, 0x8872, 0x887D, 0x887F, 0x8882, /* 0xC0 */ + 0x88A2, 0x88C6, 0x88B7, 0x88BC, 0x88C9, 0x88E2, 0x88CE, 0x88E3, /* 0xC0 */ + 0x88E5, 0x88F1, 0x891A, 0x88FC, 0x88E8, 0x88FE, 0x88F0, 0x8921, /* 0xD0 */ + 0x8919, 0x8913, 0x891B, 0x890A, 0x8934, 0x892B, 0x8936, 0x8941, /* 0xD0 */ + 0x8966, 0x897B, 0x758B, 0x80E5, 0x76B2, 0x76B4, 0x77DC, 0x8012, /* 0xE0 */ + 0x8014, 0x8016, 0x801C, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, /* 0xE0 */ + 0x8029, 0x8028, 0x8031, 0x800B, 0x8035, 0x8043, 0x8046, 0x804D, /* 0xF0 */ + 0x8052, 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x99FE, 0x99FF, 0x9A00, 0x9A01, /* 0x40 */ + 0x9A02, 0x9A03, 0x9A04, 0x9A05, 0x9A06, 0x9A07, 0x9A08, 0x9A09, /* 0x40 */ + 0x9A0A, 0x9A0B, 0x9A0C, 0x9A0D, 0x9A0E, 0x9A0F, 0x9A10, 0x9A11, /* 0x50 */ + 0x9A12, 0x9A13, 0x9A14, 0x9A15, 0x9A16, 0x9A17, 0x9A18, 0x9A19, /* 0x50 */ + 0x9A1A, 0x9A1B, 0x9A1C, 0x9A1D, 0x9A1E, 0x9A1F, 0x9A20, 0x9A21, /* 0x60 */ + 0x9A22, 0x9A23, 0x9A24, 0x9A25, 0x9A26, 0x9A27, 0x9A28, 0x9A29, /* 0x60 */ + 0x9A2A, 0x9A2B, 0x9A2C, 0x9A2D, 0x9A2E, 0x9A2F, 0x9A30, 0x9A31, /* 0x70 */ + 0x9A32, 0x9A33, 0x9A34, 0x9A35, 0x9A36, 0x9A37, 0x9A38, 0, /* 0x70 */ + 0x9A39, 0x9A3A, 0x9A3B, 0x9A3C, 0x9A3D, 0x9A3E, 0x9A3F, 0x9A40, /* 0x80 */ + 0x9A41, 0x9A42, 0x9A43, 0x9A44, 0x9A45, 0x9A46, 0x9A47, 0x9A48, /* 0x80 */ + 0x9A49, 0x9A4A, 0x9A4B, 0x9A4C, 0x9A4D, 0x9A4E, 0x9A4F, 0x9A50, /* 0x90 */ + 0x9A51, 0x9A52, 0x9A53, 0x9A54, 0x9A55, 0x9A56, 0x9A57, 0x9A58, /* 0x90 */ + 0x9A59, 0x9889, 0x988C, 0x988D, 0x988F, 0x9894, 0x989A, 0x989B, /* 0xA0 */ + 0x989E, 0x989F, 0x98A1, 0x98A2, 0x98A5, 0x98A6, 0x864D, 0x8654, /* 0xA0 */ + 0x866C, 0x866E, 0x867F, 0x867A, 0x867C, 0x867B, 0x86A8, 0x868D, /* 0xB0 */ + 0x868B, 0x86AC, 0x869D, 0x86A7, 0x86A3, 0x86AA, 0x8693, 0x86A9, /* 0xB0 */ + 0x86B6, 0x86C4, 0x86B5, 0x86CE, 0x86B0, 0x86BA, 0x86B1, 0x86AF, /* 0xC0 */ + 0x86C9, 0x86CF, 0x86B4, 0x86E9, 0x86F1, 0x86F2, 0x86ED, 0x86F3, /* 0xC0 */ + 0x86D0, 0x8713, 0x86DE, 0x86F4, 0x86DF, 0x86D8, 0x86D1, 0x8703, /* 0xD0 */ + 0x8707, 0x86F8, 0x8708, 0x870A, 0x870D, 0x8709, 0x8723, 0x873B, /* 0xD0 */ + 0x871E, 0x8725, 0x872E, 0x871A, 0x873E, 0x8748, 0x8734, 0x8731, /* 0xE0 */ + 0x8729, 0x8737, 0x873F, 0x8782, 0x8722, 0x877D, 0x877E, 0x877B, /* 0xE0 */ + 0x8760, 0x8770, 0x874C, 0x876E, 0x878B, 0x8753, 0x8763, 0x877C, /* 0xF0 */ + 0x8764, 0x8759, 0x8765, 0x8793, 0x87AF, 0x87A8, 0x87D2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, 0x9A5E, 0x9A5F, 0x9A60, 0x9A61, /* 0x40 */ + 0x9A62, 0x9A63, 0x9A64, 0x9A65, 0x9A66, 0x9A67, 0x9A68, 0x9A69, /* 0x40 */ + 0x9A6A, 0x9A6B, 0x9A72, 0x9A83, 0x9A89, 0x9A8D, 0x9A8E, 0x9A94, /* 0x50 */ + 0x9A95, 0x9A99, 0x9AA6, 0x9AA9, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, /* 0x50 */ + 0x9AAE, 0x9AAF, 0x9AB2, 0x9AB3, 0x9AB4, 0x9AB5, 0x9AB9, 0x9ABB, /* 0x60 */ + 0x9ABD, 0x9ABE, 0x9ABF, 0x9AC3, 0x9AC4, 0x9AC6, 0x9AC7, 0x9AC8, /* 0x60 */ + 0x9AC9, 0x9ACA, 0x9ACD, 0x9ACE, 0x9ACF, 0x9AD0, 0x9AD2, 0x9AD4, /* 0x70 */ + 0x9AD5, 0x9AD6, 0x9AD7, 0x9AD9, 0x9ADA, 0x9ADB, 0x9ADC, 0, /* 0x70 */ + 0x9ADD, 0x9ADE, 0x9AE0, 0x9AE2, 0x9AE3, 0x9AE4, 0x9AE5, 0x9AE7, /* 0x80 */ + 0x9AE8, 0x9AE9, 0x9AEA, 0x9AEC, 0x9AEE, 0x9AF0, 0x9AF1, 0x9AF2, /* 0x80 */ + 0x9AF3, 0x9AF4, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AFA, 0x9AFC, /* 0x90 */ + 0x9AFD, 0x9AFE, 0x9AFF, 0x9B00, 0x9B01, 0x9B02, 0x9B04, 0x9B05, /* 0x90 */ + 0x9B06, 0x87C6, 0x8788, 0x8785, 0x87AD, 0x8797, 0x8783, 0x87AB, /* 0xA0 */ + 0x87E5, 0x87AC, 0x87B5, 0x87B3, 0x87CB, 0x87D3, 0x87BD, 0x87D1, /* 0xA0 */ + 0x87C0, 0x87CA, 0x87DB, 0x87EA, 0x87E0, 0x87EE, 0x8816, 0x8813, /* 0xB0 */ + 0x87FE, 0x880A, 0x881B, 0x8821, 0x8839, 0x883C, 0x7F36, 0x7F42, /* 0xB0 */ + 0x7F44, 0x7F45, 0x8210, 0x7AFA, 0x7AFD, 0x7B08, 0x7B03, 0x7B04, /* 0xC0 */ + 0x7B15, 0x7B0A, 0x7B2B, 0x7B0F, 0x7B47, 0x7B38, 0x7B2A, 0x7B19, /* 0xC0 */ + 0x7B2E, 0x7B31, 0x7B20, 0x7B25, 0x7B24, 0x7B33, 0x7B3E, 0x7B1E, /* 0xD0 */ + 0x7B58, 0x7B5A, 0x7B45, 0x7B75, 0x7B4C, 0x7B5D, 0x7B60, 0x7B6E, /* 0xD0 */ + 0x7B7B, 0x7B62, 0x7B72, 0x7B71, 0x7B90, 0x7BA6, 0x7BA7, 0x7BB8, /* 0xE0 */ + 0x7BAC, 0x7B9D, 0x7BA8, 0x7B85, 0x7BAA, 0x7B9C, 0x7BA2, 0x7BAB, /* 0xE0 */ + 0x7BB4, 0x7BD1, 0x7BC1, 0x7BCC, 0x7BDD, 0x7BDA, 0x7BE5, 0x7BE6, /* 0xF0 */ + 0x7BEA, 0x7C0C, 0x7BFE, 0x7BFC, 0x7C0F, 0x7C16, 0x7C0B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B07, 0x9B09, 0x9B0A, 0x9B0B, 0x9B0C, 0x9B0D, 0x9B0E, 0x9B10, /* 0x40 */ + 0x9B11, 0x9B12, 0x9B14, 0x9B15, 0x9B16, 0x9B17, 0x9B18, 0x9B19, /* 0x40 */ + 0x9B1A, 0x9B1B, 0x9B1C, 0x9B1D, 0x9B1E, 0x9B20, 0x9B21, 0x9B22, /* 0x50 */ + 0x9B24, 0x9B25, 0x9B26, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2B, /* 0x50 */ + 0x9B2C, 0x9B2D, 0x9B2E, 0x9B30, 0x9B31, 0x9B33, 0x9B34, 0x9B35, /* 0x60 */ + 0x9B36, 0x9B37, 0x9B38, 0x9B39, 0x9B3A, 0x9B3D, 0x9B3E, 0x9B3F, /* 0x60 */ + 0x9B40, 0x9B46, 0x9B4A, 0x9B4B, 0x9B4C, 0x9B4E, 0x9B50, 0x9B52, /* 0x70 */ + 0x9B53, 0x9B55, 0x9B56, 0x9B57, 0x9B58, 0x9B59, 0x9B5A, 0, /* 0x70 */ + 0x9B5B, 0x9B5C, 0x9B5D, 0x9B5E, 0x9B5F, 0x9B60, 0x9B61, 0x9B62, /* 0x80 */ + 0x9B63, 0x9B64, 0x9B65, 0x9B66, 0x9B67, 0x9B68, 0x9B69, 0x9B6A, /* 0x80 */ + 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, 0x9B70, 0x9B71, 0x9B72, /* 0x90 */ + 0x9B73, 0x9B74, 0x9B75, 0x9B76, 0x9B77, 0x9B78, 0x9B79, 0x9B7A, /* 0x90 */ + 0x9B7B, 0x7C1F, 0x7C2A, 0x7C26, 0x7C38, 0x7C41, 0x7C40, 0x81FE, /* 0xA0 */ + 0x8201, 0x8202, 0x8204, 0x81EC, 0x8844, 0x8221, 0x8222, 0x8223, /* 0xA0 */ + 0x822D, 0x822F, 0x8228, 0x822B, 0x8238, 0x823B, 0x8233, 0x8234, /* 0xB0 */ + 0x823E, 0x8244, 0x8249, 0x824B, 0x824F, 0x825A, 0x825F, 0x8268, /* 0xB0 */ + 0x887E, 0x8885, 0x8888, 0x88D8, 0x88DF, 0x895E, 0x7F9D, 0x7F9F, /* 0xC0 */ + 0x7FA7, 0x7FAF, 0x7FB0, 0x7FB2, 0x7C7C, 0x6549, 0x7C91, 0x7C9D, /* 0xC0 */ + 0x7C9C, 0x7C9E, 0x7CA2, 0x7CB2, 0x7CBC, 0x7CBD, 0x7CC1, 0x7CC7, /* 0xD0 */ + 0x7CCC, 0x7CCD, 0x7CC8, 0x7CC5, 0x7CD7, 0x7CE8, 0x826E, 0x66A8, /* 0xD0 */ + 0x7FBF, 0x7FCE, 0x7FD5, 0x7FE5, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FEE, /* 0xE0 */ + 0x7FF3, 0x7CF8, 0x7D77, 0x7DA6, 0x7DAE, 0x7E47, 0x7E9B, 0x9EB8, /* 0xE0 */ + 0x9EB4, 0x8D73, 0x8D84, 0x8D94, 0x8D91, 0x8DB1, 0x8D67, 0x8D6D, /* 0xF0 */ + 0x8C47, 0x8C49, 0x914A, 0x9150, 0x914E, 0x914F, 0x9164 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B7C, 0x9B7D, 0x9B7E, 0x9B7F, 0x9B80, 0x9B81, 0x9B82, 0x9B83, /* 0x40 */ + 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, 0x9B8B, /* 0x40 */ + 0x9B8C, 0x9B8D, 0x9B8E, 0x9B8F, 0x9B90, 0x9B91, 0x9B92, 0x9B93, /* 0x50 */ + 0x9B94, 0x9B95, 0x9B96, 0x9B97, 0x9B98, 0x9B99, 0x9B9A, 0x9B9B, /* 0x50 */ + 0x9B9C, 0x9B9D, 0x9B9E, 0x9B9F, 0x9BA0, 0x9BA1, 0x9BA2, 0x9BA3, /* 0x60 */ + 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0x9BA8, 0x9BA9, 0x9BAA, 0x9BAB, /* 0x60 */ + 0x9BAC, 0x9BAD, 0x9BAE, 0x9BAF, 0x9BB0, 0x9BB1, 0x9BB2, 0x9BB3, /* 0x70 */ + 0x9BB4, 0x9BB5, 0x9BB6, 0x9BB7, 0x9BB8, 0x9BB9, 0x9BBA, 0, /* 0x70 */ + 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, 0x9BBF, 0x9BC0, 0x9BC1, 0x9BC2, /* 0x80 */ + 0x9BC3, 0x9BC4, 0x9BC5, 0x9BC6, 0x9BC7, 0x9BC8, 0x9BC9, 0x9BCA, /* 0x80 */ + 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, 0x9BCF, 0x9BD0, 0x9BD1, 0x9BD2, /* 0x90 */ + 0x9BD3, 0x9BD4, 0x9BD5, 0x9BD6, 0x9BD7, 0x9BD8, 0x9BD9, 0x9BDA, /* 0x90 */ + 0x9BDB, 0x9162, 0x9161, 0x9170, 0x9169, 0x916F, 0x917D, 0x917E, /* 0xA0 */ + 0x9172, 0x9174, 0x9179, 0x918C, 0x9185, 0x9190, 0x918D, 0x9191, /* 0xA0 */ + 0x91A2, 0x91A3, 0x91AA, 0x91AD, 0x91AE, 0x91AF, 0x91B5, 0x91B4, /* 0xB0 */ + 0x91BA, 0x8C55, 0x9E7E, 0x8DB8, 0x8DEB, 0x8E05, 0x8E59, 0x8E69, /* 0xB0 */ + 0x8DB5, 0x8DBF, 0x8DBC, 0x8DBA, 0x8DC4, 0x8DD6, 0x8DD7, 0x8DDA, /* 0xC0 */ + 0x8DDE, 0x8DCE, 0x8DCF, 0x8DDB, 0x8DC6, 0x8DEC, 0x8DF7, 0x8DF8, /* 0xC0 */ + 0x8DE3, 0x8DF9, 0x8DFB, 0x8DE4, 0x8E09, 0x8DFD, 0x8E14, 0x8E1D, /* 0xD0 */ + 0x8E1F, 0x8E2C, 0x8E2E, 0x8E23, 0x8E2F, 0x8E3A, 0x8E40, 0x8E39, /* 0xD0 */ + 0x8E35, 0x8E3D, 0x8E31, 0x8E49, 0x8E41, 0x8E42, 0x8E51, 0x8E52, /* 0xE0 */ + 0x8E4A, 0x8E70, 0x8E76, 0x8E7C, 0x8E6F, 0x8E74, 0x8E85, 0x8E8F, /* 0xE0 */ + 0x8E94, 0x8E90, 0x8E9C, 0x8E9E, 0x8C78, 0x8C82, 0x8C8A, 0x8C85, /* 0xF0 */ + 0x8C98, 0x8C94, 0x659B, 0x89D6, 0x89DE, 0x89DA, 0x89DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9BDC, 0x9BDD, 0x9BDE, 0x9BDF, 0x9BE0, 0x9BE1, 0x9BE2, 0x9BE3, /* 0x40 */ + 0x9BE4, 0x9BE5, 0x9BE6, 0x9BE7, 0x9BE8, 0x9BE9, 0x9BEA, 0x9BEB, /* 0x40 */ + 0x9BEC, 0x9BED, 0x9BEE, 0x9BEF, 0x9BF0, 0x9BF1, 0x9BF2, 0x9BF3, /* 0x50 */ + 0x9BF4, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8, 0x9BF9, 0x9BFA, 0x9BFB, /* 0x50 */ + 0x9BFC, 0x9BFD, 0x9BFE, 0x9BFF, 0x9C00, 0x9C01, 0x9C02, 0x9C03, /* 0x60 */ + 0x9C04, 0x9C05, 0x9C06, 0x9C07, 0x9C08, 0x9C09, 0x9C0A, 0x9C0B, /* 0x60 */ + 0x9C0C, 0x9C0D, 0x9C0E, 0x9C0F, 0x9C10, 0x9C11, 0x9C12, 0x9C13, /* 0x70 */ + 0x9C14, 0x9C15, 0x9C16, 0x9C17, 0x9C18, 0x9C19, 0x9C1A, 0, /* 0x70 */ + 0x9C1B, 0x9C1C, 0x9C1D, 0x9C1E, 0x9C1F, 0x9C20, 0x9C21, 0x9C22, /* 0x80 */ + 0x9C23, 0x9C24, 0x9C25, 0x9C26, 0x9C27, 0x9C28, 0x9C29, 0x9C2A, /* 0x80 */ + 0x9C2B, 0x9C2C, 0x9C2D, 0x9C2E, 0x9C2F, 0x9C30, 0x9C31, 0x9C32, /* 0x90 */ + 0x9C33, 0x9C34, 0x9C35, 0x9C36, 0x9C37, 0x9C38, 0x9C39, 0x9C3A, /* 0x90 */ + 0x9C3B, 0x89E5, 0x89EB, 0x89EF, 0x8A3E, 0x8B26, 0x9753, 0x96E9, /* 0xA0 */ + 0x96F3, 0x96EF, 0x9706, 0x9701, 0x9708, 0x970F, 0x970E, 0x972A, /* 0xA0 */ + 0x972D, 0x9730, 0x973E, 0x9F80, 0x9F83, 0x9F85, 0x9F86, 0x9F87, /* 0xB0 */ + 0x9F88, 0x9F89, 0x9F8A, 0x9F8C, 0x9EFE, 0x9F0B, 0x9F0D, 0x96B9, /* 0xB0 */ + 0x96BC, 0x96BD, 0x96CE, 0x96D2, 0x77BF, 0x96E0, 0x928E, 0x92AE, /* 0xC0 */ + 0x92C8, 0x933E, 0x936A, 0x93CA, 0x938F, 0x943E, 0x946B, 0x9C7F, /* 0xC0 */ + 0x9C82, 0x9C85, 0x9C86, 0x9C87, 0x9C88, 0x7A23, 0x9C8B, 0x9C8E, /* 0xD0 */ + 0x9C90, 0x9C91, 0x9C92, 0x9C94, 0x9C95, 0x9C9A, 0x9C9B, 0x9C9E, /* 0xD0 */ + 0x9C9F, 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA5, 0x9CA6, 0x9CA7, /* 0xE0 */ + 0x9CA8, 0x9CA9, 0x9CAB, 0x9CAD, 0x9CAE, 0x9CB0, 0x9CB1, 0x9CB2, /* 0xE0 */ + 0x9CB3, 0x9CB4, 0x9CB5, 0x9CB6, 0x9CB7, 0x9CBA, 0x9CBB, 0x9CBC, /* 0xF0 */ + 0x9CBD, 0x9CC4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CCA, 0x9CCB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9C3C, 0x9C3D, 0x9C3E, 0x9C3F, 0x9C40, 0x9C41, 0x9C42, 0x9C43, /* 0x40 */ + 0x9C44, 0x9C45, 0x9C46, 0x9C47, 0x9C48, 0x9C49, 0x9C4A, 0x9C4B, /* 0x40 */ + 0x9C4C, 0x9C4D, 0x9C4E, 0x9C4F, 0x9C50, 0x9C51, 0x9C52, 0x9C53, /* 0x50 */ + 0x9C54, 0x9C55, 0x9C56, 0x9C57, 0x9C58, 0x9C59, 0x9C5A, 0x9C5B, /* 0x50 */ + 0x9C5C, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C60, 0x9C61, 0x9C62, 0x9C63, /* 0x60 */ + 0x9C64, 0x9C65, 0x9C66, 0x9C67, 0x9C68, 0x9C69, 0x9C6A, 0x9C6B, /* 0x60 */ + 0x9C6C, 0x9C6D, 0x9C6E, 0x9C6F, 0x9C70, 0x9C71, 0x9C72, 0x9C73, /* 0x70 */ + 0x9C74, 0x9C75, 0x9C76, 0x9C77, 0x9C78, 0x9C79, 0x9C7A, 0, /* 0x70 */ + 0x9C7B, 0x9C7D, 0x9C7E, 0x9C80, 0x9C83, 0x9C84, 0x9C89, 0x9C8A, /* 0x80 */ + 0x9C8C, 0x9C8F, 0x9C93, 0x9C96, 0x9C97, 0x9C98, 0x9C99, 0x9C9D, /* 0x80 */ + 0x9CAA, 0x9CAC, 0x9CAF, 0x9CB9, 0x9CBE, 0x9CBF, 0x9CC0, 0x9CC1, /* 0x90 */ + 0x9CC2, 0x9CC8, 0x9CC9, 0x9CD1, 0x9CD2, 0x9CDA, 0x9CDB, 0x9CE0, /* 0x90 */ + 0x9CE1, 0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, 0x9CD3, 0x9CD4, /* 0xA0 */ + 0x9CD5, 0x9CD7, 0x9CD8, 0x9CD9, 0x9CDC, 0x9CDD, 0x9CDF, 0x9CE2, /* 0xA0 */ + 0x977C, 0x9785, 0x9791, 0x9792, 0x9794, 0x97AF, 0x97AB, 0x97A3, /* 0xB0 */ + 0x97B2, 0x97B4, 0x9AB1, 0x9AB0, 0x9AB7, 0x9E58, 0x9AB6, 0x9ABA, /* 0xB0 */ + 0x9ABC, 0x9AC1, 0x9AC0, 0x9AC5, 0x9AC2, 0x9ACB, 0x9ACC, 0x9AD1, /* 0xC0 */ + 0x9B45, 0x9B43, 0x9B47, 0x9B49, 0x9B48, 0x9B4D, 0x9B51, 0x98E8, /* 0xC0 */ + 0x990D, 0x992E, 0x9955, 0x9954, 0x9ADF, 0x9AE1, 0x9AE6, 0x9AEF, /* 0xD0 */ + 0x9AEB, 0x9AFB, 0x9AED, 0x9AF9, 0x9B08, 0x9B0F, 0x9B13, 0x9B1F, /* 0xD0 */ + 0x9B23, 0x9EBD, 0x9EBE, 0x7E3B, 0x9E82, 0x9E87, 0x9E88, 0x9E8B, /* 0xE0 */ + 0x9E92, 0x93D6, 0x9E9D, 0x9E9F, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE0, /* 0xE0 */ + 0x9EDF, 0x9EE2, 0x9EE9, 0x9EE7, 0x9EE5, 0x9EEA, 0x9EEF, 0x9F22, /* 0xF0 */ + 0x9F2C, 0x9F2F, 0x9F39, 0x9F37, 0x9F3D, 0x9F3E, 0x9F44 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9CE3, 0x9CE4, 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0x9CE9, 0x9CEA, /* 0x40 */ + 0x9CEB, 0x9CEC, 0x9CED, 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0x9CF2, /* 0x40 */ + 0x9CF3, 0x9CF4, 0x9CF5, 0x9CF6, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, /* 0x50 */ + 0x9CFB, 0x9CFC, 0x9CFD, 0x9CFE, 0x9CFF, 0x9D00, 0x9D01, 0x9D02, /* 0x50 */ + 0x9D03, 0x9D04, 0x9D05, 0x9D06, 0x9D07, 0x9D08, 0x9D09, 0x9D0A, /* 0x60 */ + 0x9D0B, 0x9D0C, 0x9D0D, 0x9D0E, 0x9D0F, 0x9D10, 0x9D11, 0x9D12, /* 0x60 */ + 0x9D13, 0x9D14, 0x9D15, 0x9D16, 0x9D17, 0x9D18, 0x9D19, 0x9D1A, /* 0x70 */ + 0x9D1B, 0x9D1C, 0x9D1D, 0x9D1E, 0x9D1F, 0x9D20, 0x9D21, 0, /* 0x70 */ + 0x9D22, 0x9D23, 0x9D24, 0x9D25, 0x9D26, 0x9D27, 0x9D28, 0x9D29, /* 0x80 */ + 0x9D2A, 0x9D2B, 0x9D2C, 0x9D2D, 0x9D2E, 0x9D2F, 0x9D30, 0x9D31, /* 0x80 */ + 0x9D32, 0x9D33, 0x9D34, 0x9D35, 0x9D36, 0x9D37, 0x9D38, 0x9D39, /* 0x90 */ + 0x9D3A, 0x9D3B, 0x9D3C, 0x9D3D, 0x9D3E, 0x9D3F, 0x9D40, 0x9D41, /* 0x90 */ + 0x9D42 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9D43, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0x9D48, 0x9D49, 0x9D4A, /* 0x40 */ + 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0x9D50, 0x9D51, 0x9D52, /* 0x40 */ + 0x9D53, 0x9D54, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0x9D5A, /* 0x50 */ + 0x9D5B, 0x9D5C, 0x9D5D, 0x9D5E, 0x9D5F, 0x9D60, 0x9D61, 0x9D62, /* 0x50 */ + 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69, 0x9D6A, /* 0x60 */ + 0x9D6B, 0x9D6C, 0x9D6D, 0x9D6E, 0x9D6F, 0x9D70, 0x9D71, 0x9D72, /* 0x60 */ + 0x9D73, 0x9D74, 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, /* 0x70 */ + 0x9D7B, 0x9D7C, 0x9D7D, 0x9D7E, 0x9D7F, 0x9D80, 0x9D81, 0, /* 0x70 */ + 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D87, 0x9D88, 0x9D89, /* 0x80 */ + 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, 0x9D91, /* 0x80 */ + 0x9D92, 0x9D93, 0x9D94, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9D99, /* 0x90 */ + 0x9D9A, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, 0x9DA0, 0x9DA1, /* 0x90 */ + 0x9DA2 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9DA3, 0x9DA4, 0x9DA5, 0x9DA6, 0x9DA7, 0x9DA8, 0x9DA9, 0x9DAA, /* 0x40 */ + 0x9DAB, 0x9DAC, 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0x9DB1, 0x9DB2, /* 0x40 */ + 0x9DB3, 0x9DB4, 0x9DB5, 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, /* 0x50 */ + 0x9DBB, 0x9DBC, 0x9DBD, 0x9DBE, 0x9DBF, 0x9DC0, 0x9DC1, 0x9DC2, /* 0x50 */ + 0x9DC3, 0x9DC4, 0x9DC5, 0x9DC6, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, /* 0x60 */ + 0x9DCB, 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, /* 0x60 */ + 0x9DD3, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, 0x9DD8, 0x9DD9, 0x9DDA, /* 0x70 */ + 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE1, 0, /* 0x70 */ + 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, 0x9DE7, 0x9DE8, 0x9DE9, /* 0x80 */ + 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0x9DEF, 0x9DF0, 0x9DF1, /* 0x80 */ + 0x9DF2, 0x9DF3, 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, /* 0x90 */ + 0x9DFA, 0x9DFB, 0x9DFC, 0x9DFD, 0x9DFE, 0x9DFF, 0x9E00, 0x9E01, /* 0x90 */ + 0x9E02 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_FB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9E03, 0x9E04, 0x9E05, 0x9E06, 0x9E07, 0x9E08, 0x9E09, 0x9E0A, /* 0x40 */ + 0x9E0B, 0x9E0C, 0x9E0D, 0x9E0E, 0x9E0F, 0x9E10, 0x9E11, 0x9E12, /* 0x40 */ + 0x9E13, 0x9E14, 0x9E15, 0x9E16, 0x9E17, 0x9E18, 0x9E19, 0x9E1A, /* 0x50 */ + 0x9E1B, 0x9E1C, 0x9E1D, 0x9E1E, 0x9E24, 0x9E27, 0x9E2E, 0x9E30, /* 0x50 */ + 0x9E34, 0x9E3B, 0x9E3C, 0x9E40, 0x9E4D, 0x9E50, 0x9E52, 0x9E53, /* 0x60 */ + 0x9E54, 0x9E56, 0x9E59, 0x9E5D, 0x9E5F, 0x9E60, 0x9E61, 0x9E62, /* 0x60 */ + 0x9E65, 0x9E6E, 0x9E6F, 0x9E72, 0x9E74, 0x9E75, 0x9E76, 0x9E77, /* 0x70 */ + 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E7D, 0x9E80, 0, /* 0x70 */ + 0x9E81, 0x9E83, 0x9E84, 0x9E85, 0x9E86, 0x9E89, 0x9E8A, 0x9E8C, /* 0x80 */ + 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E94, 0x9E95, 0x9E96, /* 0x80 */ + 0x9E97, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9E, 0x9EA0, /* 0x90 */ + 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0x9EA7, 0x9EA8, 0x9EA9, /* 0x90 */ + 0x9EAA /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_FC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9EAB, 0x9EAC, 0x9EAD, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB1, 0x9EB2, /* 0x40 */ + 0x9EB3, 0x9EB5, 0x9EB6, 0x9EB7, 0x9EB9, 0x9EBA, 0x9EBC, 0x9EBF, /* 0x40 */ + 0x9EC0, 0x9EC1, 0x9EC2, 0x9EC3, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, /* 0x50 */ + 0x9ECA, 0x9ECB, 0x9ECC, 0x9ED0, 0x9ED2, 0x9ED3, 0x9ED5, 0x9ED6, /* 0x50 */ + 0x9ED7, 0x9ED9, 0x9EDA, 0x9EDE, 0x9EE1, 0x9EE3, 0x9EE4, 0x9EE6, /* 0x60 */ + 0x9EE8, 0x9EEB, 0x9EEC, 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF2, /* 0x60 */ + 0x9EF3, 0x9EF4, 0x9EF5, 0x9EF6, 0x9EF7, 0x9EF8, 0x9EFA, 0x9EFD, /* 0x70 */ + 0x9EFF, 0x9F00, 0x9F01, 0x9F02, 0x9F03, 0x9F04, 0x9F05, 0, /* 0x70 */ + 0x9F06, 0x9F07, 0x9F08, 0x9F09, 0x9F0A, 0x9F0C, 0x9F0F, 0x9F11, /* 0x80 */ + 0x9F12, 0x9F14, 0x9F15, 0x9F16, 0x9F18, 0x9F1A, 0x9F1B, 0x9F1C, /* 0x80 */ + 0x9F1D, 0x9F1E, 0x9F1F, 0x9F21, 0x9F23, 0x9F24, 0x9F25, 0x9F26, /* 0x90 */ + 0x9F27, 0x9F28, 0x9F29, 0x9F2A, 0x9F2B, 0x9F2D, 0x9F2E, 0x9F30, /* 0x90 */ + 0x9F31 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_FD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9F32, 0x9F33, 0x9F34, 0x9F35, 0x9F36, 0x9F38, 0x9F3A, 0x9F3C, /* 0x40 */ + 0x9F3F, 0x9F40, 0x9F41, 0x9F42, 0x9F43, 0x9F45, 0x9F46, 0x9F47, /* 0x40 */ + 0x9F48, 0x9F49, 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, /* 0x50 */ + 0x9F52, 0x9F53, 0x9F54, 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F59, /* 0x50 */ + 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F5E, 0x9F5F, 0x9F60, 0x9F61, /* 0x60 */ + 0x9F62, 0x9F63, 0x9F64, 0x9F65, 0x9F66, 0x9F67, 0x9F68, 0x9F69, /* 0x60 */ + 0x9F6A, 0x9F6B, 0x9F6C, 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, /* 0x70 */ + 0x9F72, 0x9F73, 0x9F74, 0x9F75, 0x9F76, 0x9F77, 0x9F78, 0, /* 0x70 */ + 0x9F79, 0x9F7A, 0x9F7B, 0x9F7C, 0x9F7D, 0x9F7E, 0x9F81, 0x9F82, /* 0x80 */ + 0x9F8D, 0x9F8E, 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0x9F93, 0x9F94, /* 0x80 */ + 0x9F95, 0x9F96, 0x9F97, 0x9F98, 0x9F9C, 0x9F9D, 0x9F9E, 0x9FA1, /* 0x90 */ + 0x9FA2, 0x9FA3, 0x9FA4, 0x9FA5, 0xF92C, 0xF979, 0xF995, 0xF9E7, /* 0x90 */ + 0xF9F1 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBK_FE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFA0C, 0xFA0D, 0xFA0E, 0xFA0F, 0xFA11, 0xFA13, 0xFA14, 0xFA18, /* 0x40 */ + 0xFA1F, 0xFA20, 0xFA21, 0xFA23, 0xFA24, 0xFA27, 0xFA28, 0xFA29, /* 0x40 */ + 0x2E81, 0, 0, 0, 0x2E84, 0x3473, 0x3447, 0x2E88, /* 0x50 */ + 0x2E8B, 0, 0x359E, 0x361A, 0x360E, 0x2E8C, 0x2E97, 0x396E, /* 0x50 */ + 0x3918, 0, 0x39CF, 0x39DF, 0x3A73, 0x39D0, 0, 0, /* 0x60 */ + 0x3B4E, 0x3C6E, 0x3CE0, 0x2EA7, 0, 0, 0x2EAA, 0x4056, /* 0x60 */ + 0x415F, 0x2EAE, 0x4337, 0x2EB3, 0x2EB6, 0x2EB7, 0, 0x43B1, /* 0x70 */ + 0x43AC, 0x2EBB, 0x43DD, 0x44D6, 0x4661, 0x464C, 0, 0, /* 0x70 */ + 0x4723, 0x4729, 0x477C, 0x478D, 0x2ECA, 0x4947, 0x497A, 0x497D, /* 0x80 */ + 0x4982, 0x4983, 0x4985, 0x4986, 0x499F, 0x499B, 0x49B7, 0x49B6, /* 0x80 */ + 0, 0, 0x4CA3, 0x4C9F, 0x4CA0, 0x4CA1, 0x4C77, 0x4CA2, /* 0x90 */ + 0x4D13, 0x4D14, 0x4D15, 0x4D16, 0x4D17, 0x4D18, 0x4D19, 0x4DAE /* 0x90 */ +}; diff --git a/sal/textenc/tcvtscn2.tab b/sal/textenc/tcvtscn2.tab new file mode 100644 index 000000000..30fc485a7 --- /dev/null +++ b/sal/textenc/tcvtscn2.tab @@ -0,0 +1,4454 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* chinese simplified (China) charsets: */ +/* GB (GB2312), GBK, MS936, APPLE_CHINSIMP */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_GB_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xA1E8, 0, 0, 0xA1EC, /* 0xA0 */ + 0xA1A7, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xA1E3, 0xA1C0, 0, 0, 0, 0, 0, 0xA1A4, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1C1, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA8A4, 0xA8A2, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xA8A8, 0xA8A6, 0xA8BA, 0, 0xA8AC, 0xA8AA, 0, 0, /* 0xE0 */ + 0, 0, 0xA8B0, 0xA8AE, 0, 0, 0, 0xA1C2, /* 0xF0 */ + 0, 0xA8B4, 0xA8B2, 0, 0xA8B9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x00A0, 0, 0xA1E9, 0xA1EA, 0xA1E8, 0xA3A4, 0, 0xA1EC, /* 0xA0 */ + 0xA1A7, 0x00FD, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xA1E3, 0xA1C0, 0, 0, 0, 0, 0, 0xA1A4, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1C1, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA8A4, 0xA8A2, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xA8A8, 0xA8A6, 0xA8BA, 0, 0xA8AC, 0xA8AA, 0, 0, /* 0xE0 */ + 0, 0, 0xA8B0, 0xA8AE, 0, 0, 0, 0xA1C2, /* 0xF0 */ + 0, 0xA8B4, 0xA8B2, 0, 0xA8B9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_01[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8A1, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xA8A5, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xA8A7, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xA8A9, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xA8BD, 0, 0, 0, /* 0x40 */ + 0xA8BE, 0, 0, 0, 0, 0xA8AD, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xA8B1, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xA8A3, 0, /* 0xC0 */ + 0xA8AB, 0, 0xA8AF, 0, 0xA8B3, 0, 0xA8B5, 0, /* 0xD0 */ + 0xA8B6, 0, 0xA8B7, 0, 0xA8B8 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_02[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8BB, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xA8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1A6, /* 0xC0 */ + 0, 0xA1A5, 0xA840, 0xA841, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xA842 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_02[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8BB, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xA8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1A6, /* 0xC0 */ + 0, 0xA1A5 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA6A1, 0xA6A2, 0xA6A3, 0xA6A4, 0xA6A5, 0xA6A6, 0xA6A7, /* 0x90 */ + 0xA6A8, 0xA6A9, 0xA6AA, 0xA6AB, 0xA6AC, 0xA6AD, 0xA6AE, 0xA6AF, /* 0x90 */ + 0xA6B0, 0xA6B1, 0, 0xA6B2, 0xA6B3, 0xA6B4, 0xA6B5, 0xA6B6, /* 0xA0 */ + 0xA6B7, 0xA6B8, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xA6C1, 0xA6C2, 0xA6C3, 0xA6C4, 0xA6C5, 0xA6C6, 0xA6C7, /* 0xB0 */ + 0xA6C8, 0xA6C9, 0xA6CA, 0xA6CB, 0xA6CC, 0xA6CD, 0xA6CE, 0xA6CF, /* 0xB0 */ + 0xA6D0, 0xA6D1, 0, 0xA6D2, 0xA6D3, 0xA6D4, 0xA6D5, 0xA6D6, /* 0xC0 */ + 0xA6D7, 0xA6D8 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA7A7, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xA7A1, 0xA7A2, 0xA7A3, 0xA7A4, 0xA7A5, 0xA7A6, 0xA7A8, 0xA7A9, /* 0x10 */ + 0xA7AA, 0xA7AB, 0xA7AC, 0xA7AD, 0xA7AE, 0xA7AF, 0xA7B0, 0xA7B1, /* 0x10 */ + 0xA7B2, 0xA7B3, 0xA7B4, 0xA7B5, 0xA7B6, 0xA7B7, 0xA7B8, 0xA7B9, /* 0x20 */ + 0xA7BA, 0xA7BB, 0xA7BC, 0xA7BD, 0xA7BE, 0xA7BF, 0xA7C0, 0xA7C1, /* 0x20 */ + 0xA7D1, 0xA7D2, 0xA7D3, 0xA7D4, 0xA7D5, 0xA7D6, 0xA7D8, 0xA7D9, /* 0x30 */ + 0xA7DA, 0xA7DB, 0xA7DC, 0xA7DD, 0xA7DE, 0xA7DF, 0xA7E0, 0xA7E1, /* 0x30 */ + 0xA7E2, 0xA7E3, 0xA7E4, 0xA7E5, 0xA7E6, 0xA7E7, 0xA7E8, 0xA7E9, /* 0x40 */ + 0xA7EA, 0xA7EB, 0xA7EC, 0xA7ED, 0xA7EE, 0xA7EF, 0xA7F0, 0xA7F1, /* 0x40 */ + 0, 0xA7D7 /* 0x50 */ + /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_1E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x30 */ + 0xA8BC, /* 0x30 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA95C, 0, 0, 0xA843, 0xA1AA, 0xA844, 0xA1AC, 0, /* 0x10 */ + 0xA1AE, 0xA1AF, 0, 0, 0xA1B0, 0xA1B1, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xA845, 0xA1AD, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xA1EB, 0, 0xA1E4, 0xA1E5, 0, 0xA846, 0, 0, /* 0x30 */ + 0, 0, 0, 0xA1F9, 0, 0, 0xA3FE, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x0080 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1AA, 0xA1AA, 0xA1AC, 0, /* 0x10 */ + 0xA1AE, 0xA1AF, 0, 0, 0xA1B0, 0xA1B1, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xA1AD, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xA1EB, 0, 0xA1E4, 0xA1E5, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xA1F9, 0, 0, 0xA3FE, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0x0080 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1E6, 0, 0xA847, 0, 0, /* 0x00 */ + 0, 0xA848, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xA1ED, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xA959, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, /* 0x60 */ + 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0, 0, 0, 0, /* 0x60 */ + 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x70 */ + 0xA2A9, 0xA2AA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD, 0, 0, 0xA849, 0xA84A, /* 0x90 */ + 0xA84B, 0xA84C /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1E6, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xA1ED, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, /* 0x60 */ + 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0, 0, 0, 0, /* 0x60 */ + 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x70 */ + 0xA2A9, 0xA2AA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD /* 0x90 */ + /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1E6, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xA1ED, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x00FE, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, /* 0x60 */ + 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0, 0, 0, 0, /* 0x60 */ + 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8, /* 0x70 */ + 0xA2A9, 0xA2AA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xA1FB, 0xA1FC, 0xA1FA, 0xA1FD /* 0x90 */ + /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xA1CA, 0, 0, 0, 0, 0, 0, 0xA1C7, /* 0x00 */ + 0, 0xA1C6, 0, 0, 0, 0xA84D, 0, 0, /* 0x10 */ + 0, 0, 0xA1CC, 0, 0, 0xA1D8, 0xA1DE, 0xA84E, /* 0x10 */ + 0xA1CF, 0, 0, 0xA84F, 0, 0xA1CE, 0, 0xA1C4, /* 0x20 */ + 0xA1C5, 0xA1C9, 0xA1C8, 0xA1D2, 0, 0, 0xA1D3, 0, /* 0x20 */ + 0, 0, 0, 0, 0xA1E0, 0xA1DF, 0xA1C3, 0xA1CB, /* 0x30 */ + 0, 0, 0, 0, 0, 0xA1D7, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xA1D6, 0, 0, 0, 0xA1D5, 0, 0, 0, /* 0x40 */ + 0, 0, 0xA850, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA1D9, 0xA1D4, 0, 0, 0xA1DC, 0xA1DD, 0xA851, 0xA852, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xA1DA, 0xA1DB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xA892, 0, 0, /* 0x90 */ + 0, 0xA1D1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xA1CD, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA853, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1AD /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xA1CA, 0, 0, 0, 0, 0, 0, 0xA1C7, /* 0x00 */ + 0, 0xA1C6, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xA1CC, 0, 0, 0xA1D8, 0xA1DE, 0, /* 0x10 */ + 0xA1CF, 0, 0, 0, 0, 0xA1CE, 0, 0xA1C4, /* 0x20 */ + 0xA1C5, 0xA1C9, 0xA1C8, 0xA1D2, 0, 0, 0xA1D3, 0, /* 0x20 */ + 0, 0, 0, 0, 0xA1E0, 0xA1DF, 0xA1C3, 0xA1CB, /* 0x30 */ + 0, 0, 0, 0, 0, 0xA1D7, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xA1D6, 0, 0, 0, 0xA1D5, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA1D9, 0xA1D4, 0, 0, 0xA1DC, 0xA1DD, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xA1DA, 0xA1DB, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xA1D1, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xA1CD, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1AD /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_23[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1D0 /* 0x10 */ + /* 0x10 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, 0xA2DE, 0xA2DF, 0xA2E0, /* 0x60 */ + 0xA2E1, 0xA2E2, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, /* 0x70 */ + 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC, 0xA2CD, 0xA2CE, 0xA2CF, 0xA2D0, /* 0x70 */ + 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, 0xA2D5, 0xA2D6, 0xA2D7, 0xA2D8, /* 0x80 */ + 0xA2B1, 0xA2B2, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7, 0xA2B8, /* 0x80 */ + 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, /* 0x90 */ + 0xA2C1, 0xA2C2, 0xA2C3, 0xA2C4 /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA9A4, 0xA9A5, 0xA9A6, 0xA9A7, 0xA9A8, 0xA9A9, 0xA9AA, 0xA9AB, /* 0x00 */ + 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, 0xA9B1, 0xA9B2, 0xA9B3, /* 0x00 */ + 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, 0xA9BA, 0xA9BB, /* 0x10 */ + 0xA9BC, 0xA9BD, 0xA9BE, 0xA9BF, 0xA9C0, 0xA9C1, 0xA9C2, 0xA9C3, /* 0x10 */ + 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, 0xA9CA, 0xA9CB, /* 0x20 */ + 0xA9CC, 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, 0xA9D1, 0xA9D2, 0xA9D3, /* 0x20 */ + 0xA9D4, 0xA9D5, 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, /* 0x30 */ + 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, 0xA9E1, 0xA9E2, 0xA9E3, /* 0x30 */ + 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, 0xA9E8, 0xA9E9, 0xA9EA, 0xA9EB, /* 0x40 */ + 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0, 0, 0, 0, /* 0x40 */ + 0xA854, 0xA855, 0xA856, 0xA857, 0xA858, 0xA859, 0xA85A, 0xA85B, /* 0x50 */ + 0xA85C, 0xA85D, 0xA85E, 0xA85F, 0xA860, 0xA861, 0xA862, 0xA863, /* 0x50 */ + 0xA864, 0xA865, 0xA866, 0xA867, 0xA868, 0xA869, 0xA86A, 0xA86B, /* 0x60 */ + 0xA86C, 0xA86D, 0xA86E, 0xA86F, 0xA870, 0xA871, 0xA872, 0xA873, /* 0x60 */ + 0xA874, 0xA875, 0xA876, 0xA877, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xA878, 0xA879, 0xA87A, 0xA87B, 0xA87C, 0xA87D, 0xA87E, /* 0x80 */ + 0xA880, 0xA881, 0xA882, 0xA883, 0xA884, 0xA885, 0xA886, 0xA887, /* 0x80 */ + 0, 0, 0, 0xA888, 0xA889, 0xA88A, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xA1F6, 0xA1F5, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xA1F8, 0xA1F7, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xA88B, 0xA88C, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xA1F4, 0xA1F3, /* 0xC0 */ + 0, 0, 0, 0xA1F0, 0, 0, 0xA1F2, 0xA1F1, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xA88D, 0xA88E, 0xA88F, 0xA890 /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA9A4, 0xA9A5, 0xA9A6, 0xA9A7, 0xA9A8, 0xA9A9, 0xA9AA, 0xA9AB, /* 0x00 */ + 0xA9AC, 0xA9AD, 0xA9AE, 0xA9AF, 0xA9B0, 0xA9B1, 0xA9B2, 0xA9B3, /* 0x00 */ + 0xA9B4, 0xA9B5, 0xA9B6, 0xA9B7, 0xA9B8, 0xA9B9, 0xA9BA, 0xA9BB, /* 0x10 */ + 0xA9BC, 0xA9BD, 0xA9BE, 0xA9BF, 0xA9C0, 0xA9C1, 0xA9C2, 0xA9C3, /* 0x10 */ + 0xA9C4, 0xA9C5, 0xA9C6, 0xA9C7, 0xA9C8, 0xA9C9, 0xA9CA, 0xA9CB, /* 0x20 */ + 0xA9CC, 0xA9CD, 0xA9CE, 0xA9CF, 0xA9D0, 0xA9D1, 0xA9D2, 0xA9D3, /* 0x20 */ + 0xA9D4, 0xA9D5, 0xA9D6, 0xA9D7, 0xA9D8, 0xA9D9, 0xA9DA, 0xA9DB, /* 0x30 */ + 0xA9DC, 0xA9DD, 0xA9DE, 0xA9DF, 0xA9E0, 0xA9E1, 0xA9E2, 0xA9E3, /* 0x30 */ + 0xA9E4, 0xA9E5, 0xA9E6, 0xA9E7, 0xA9E8, 0xA9E9, 0xA9EA, 0xA9EB, /* 0x40 */ + 0xA9EC, 0xA9ED, 0xA9EE, 0xA9EF, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xA1F6, 0xA1F5, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xA1F8, 0xA1F7, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xA1F4, 0xA1F3, /* 0xC0 */ + 0, 0, 0, 0xA1F0, 0, 0, 0xA1F2, 0xA1F1 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1EF, 0xA1EE, 0, /* 0x00 */ + 0, 0xA891, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xA1E2, 0, 0xA1E1 /* 0x40 */ + /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1EF, 0xA1EE, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xA1E2, 0, 0xA1E1 /* 0x40 */ + /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_2E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE50, 0, 0, 0xFE54, 0, 0, 0, /* 0x80 */ + 0xFE57, 0, 0, 0xFE58, 0xFE5D, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xFE5E, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xFE6B, /* 0xA0 */ + 0, 0, 0xFE6E, 0, 0, 0, 0xFE71, 0, /* 0xA0 */ + 0, 0, 0, 0xFE73, 0, 0, 0xFE74, 0xFE75, /* 0xB0 */ + 0, 0, 0, 0xFE79, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xFE84 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, 0, 0xA1A9, 0xA965, 0xA996, /* 0x00 */ + 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, /* 0x00 */ + 0xA1BE, 0xA1BF, 0xA893, 0xA1FE, 0xA1B2, 0xA1B3, 0xA1BC, 0xA1BD, /* 0x10 */ + 0, 0, 0, 0, 0xA1AB, 0xA894, 0xA895, 0, /* 0x10 */ + 0, 0xA940, 0xA941, 0xA942, 0xA943, 0xA944, 0xA945, 0xA946, /* 0x20 */ + 0xA947, 0xA948, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, 0xA4A6, 0xA4A7, /* 0x40 */ + 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, /* 0x40 */ + 0xA4B0, 0xA4B1, 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, /* 0x50 */ + 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE, 0xA4BF, /* 0x50 */ + 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, /* 0x60 */ + 0xA4C8, 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, /* 0x60 */ + 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, /* 0x70 */ + 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, /* 0x70 */ + 0xA4E0, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, /* 0x80 */ + 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, 0xA4EE, 0xA4EF, /* 0x80 */ + 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xA961, 0xA962, 0xA966, 0xA967, 0, /* 0x90 */ + 0, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, 0xA5A6, 0xA5A7, /* 0xA0 */ + 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, 0xA5AC, 0xA5AD, 0xA5AE, 0xA5AF, /* 0xA0 */ + 0xA5B0, 0xA5B1, 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, /* 0xB0 */ + 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, 0xA5BE, 0xA5BF, /* 0xB0 */ + 0xA5C0, 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, /* 0xC0 */ + 0xA5C8, 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, /* 0xC0 */ + 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, 0xA5D7, /* 0xD0 */ + 0xA5D8, 0xA5D9, 0xA5DA, 0xA5DB, 0xA5DC, 0xA5DD, 0xA5DE, 0xA5DF, /* 0xD0 */ + 0xA5E0, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, /* 0xE0 */ + 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, 0xA5EE, 0xA5EF, /* 0xE0 */ + 0xA5F0, 0xA5F1, 0xA5F2, 0xA5F3, 0xA5F4, 0xA5F5, 0xA5F6, 0, /* 0xF0 */ + 0, 0, 0, 0xA1A4, 0xA960, 0xA963, 0xA964 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A8, 0, 0xA1A9, 0, 0, /* 0x00 */ + 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, /* 0x00 */ + 0xA1BE, 0xA1BF, 0, 0xA1FE, 0xA1B2, 0xA1B3, 0xA1BC, 0xA1BD, /* 0x10 */ + 0, 0, 0, 0, 0xA1AB, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xA4A1, 0xA4A2, 0xA4A3, 0xA4A4, 0xA4A5, 0xA4A6, 0xA4A7, /* 0x40 */ + 0xA4A8, 0xA4A9, 0xA4AA, 0xA4AB, 0xA4AC, 0xA4AD, 0xA4AE, 0xA4AF, /* 0x40 */ + 0xA4B0, 0xA4B1, 0xA4B2, 0xA4B3, 0xA4B4, 0xA4B5, 0xA4B6, 0xA4B7, /* 0x50 */ + 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE, 0xA4BF, /* 0x50 */ + 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6, 0xA4C7, /* 0x60 */ + 0xA4C8, 0xA4C9, 0xA4CA, 0xA4CB, 0xA4CC, 0xA4CD, 0xA4CE, 0xA4CF, /* 0x60 */ + 0xA4D0, 0xA4D1, 0xA4D2, 0xA4D3, 0xA4D4, 0xA4D5, 0xA4D6, 0xA4D7, /* 0x70 */ + 0xA4D8, 0xA4D9, 0xA4DA, 0xA4DB, 0xA4DC, 0xA4DD, 0xA4DE, 0xA4DF, /* 0x70 */ + 0xA4E0, 0xA4E1, 0xA4E2, 0xA4E3, 0xA4E4, 0xA4E5, 0xA4E6, 0xA4E7, /* 0x80 */ + 0xA4E8, 0xA4E9, 0xA4EA, 0xA4EB, 0xA4EC, 0xA4ED, 0xA4EE, 0xA4EF, /* 0x80 */ + 0xA4F0, 0xA4F1, 0xA4F2, 0xA4F3, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xA5A1, 0xA5A2, 0xA5A3, 0xA5A4, 0xA5A5, 0xA5A6, 0xA5A7, /* 0xA0 */ + 0xA5A8, 0xA5A9, 0xA5AA, 0xA5AB, 0xA5AC, 0xA5AD, 0xA5AE, 0xA5AF, /* 0xA0 */ + 0xA5B0, 0xA5B1, 0xA5B2, 0xA5B3, 0xA5B4, 0xA5B5, 0xA5B6, 0xA5B7, /* 0xB0 */ + 0xA5B8, 0xA5B9, 0xA5BA, 0xA5BB, 0xA5BC, 0xA5BD, 0xA5BE, 0xA5BF, /* 0xB0 */ + 0xA5C0, 0xA5C1, 0xA5C2, 0xA5C3, 0xA5C4, 0xA5C5, 0xA5C6, 0xA5C7, /* 0xC0 */ + 0xA5C8, 0xA5C9, 0xA5CA, 0xA5CB, 0xA5CC, 0xA5CD, 0xA5CE, 0xA5CF, /* 0xC0 */ + 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0xA5D4, 0xA5D5, 0xA5D6, 0xA5D7, /* 0xD0 */ + 0xA5D8, 0xA5D9, 0xA5DA, 0xA5DB, 0xA5DC, 0xA5DD, 0xA5DE, 0xA5DF, /* 0xD0 */ + 0xA5E0, 0xA5E1, 0xA5E2, 0xA5E3, 0xA5E4, 0xA5E5, 0xA5E6, 0xA5E7, /* 0xE0 */ + 0xA5E8, 0xA5E9, 0xA5EA, 0xA5EB, 0xA5EC, 0xA5ED, 0xA5EE, 0xA5EF, /* 0xE0 */ + 0xA5F0, 0xA5F1, 0xA5F2, 0xA5F3, 0xA5F4, 0xA5F5, 0xA5F6, 0, /* 0xF0 */ + 0, 0, 0, 0xA1A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_31[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8C5, 0xA8C6, 0xA8C7, /* 0x00 */ + 0xA8C8, 0xA8C9, 0xA8CA, 0xA8CB, 0xA8CC, 0xA8CD, 0xA8CE, 0xA8CF, /* 0x00 */ + 0xA8D0, 0xA8D1, 0xA8D2, 0xA8D3, 0xA8D4, 0xA8D5, 0xA8D6, 0xA8D7, /* 0x10 */ + 0xA8D8, 0xA8D9, 0xA8DA, 0xA8DB, 0xA8DC, 0xA8DD, 0xA8DE, 0xA8DF, /* 0x10 */ + 0xA8E0, 0xA8E1, 0xA8E2, 0xA8E3, 0xA8E4, 0xA8E5, 0xA8E6, 0xA8E7, /* 0x20 */ + 0xA8E8, 0xA8E9 /* 0x20 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* GB only from 32_20 to 32_29 */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA2E5, 0xA2E6, 0xA2E7, 0xA2E8, 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, /* 0x20 */ + 0xA2ED, 0xA2EE, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xA95A, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xA949 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x80 */ + 0xA94A, 0xA94B, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xA94C, 0xA94D, 0xA94E, 0, /* 0x90 */ + 0, 0xA94F, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xA950, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xA951, 0, /* 0xC0 */ + 0, 0xA952, 0xA953, 0, 0, 0xA954 /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_34[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE56, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xFE55 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_35[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x90 */ + 0xFE5A /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_36[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xFE5C, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xFE5B /* 0x10 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_39[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0xFE60, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xFE5F, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xFE62, /* 0xC0 */ + 0xFE65, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xFE63 /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_3A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE64 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_3B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x40 */ + 0xFE68 /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_3C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x60 */ + 0xFE69, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xFE6A /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_40[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE6F /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_41[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x50 */ + 0xFE70 /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_43[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE72, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xFE78, 0, 0, 0, /* 0xA0 */ + 0, 0xFE77, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xFE7A /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_44[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE7B /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_46[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x40 */ + 0xFE7D, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xFE7C /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_47[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE80, 0, 0, 0, 0, /* 0x20 */ + 0, 0xFE81, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xFE82, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xFE83 /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_49[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE85, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xFE86, 0, 0, 0xFE87, 0, 0, /* 0x70 */ + 0, 0, 0xFE88, 0xFE89, 0, 0xFE8A, 0xFE8B, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xFE8D, 0, 0, 0, 0xFE8C, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xFE8F, 0xFE8E /* 0xB0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_4C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE96, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xFE93, /* 0x90 */ + 0xFE94, 0xFE95, 0xFE97, 0xFE92 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_4D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFE98, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, /* 0x10 */ + 0xFE9D, 0xFE9E, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xFE9F /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2BB, 0xB6A1, 0x8140, 0xC6DF, 0x8141, 0x8142, 0x8143, 0xCDF2, /* 0x00 */ + 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0xD3EB, 0x8144, /* 0x00 */ + 0xD8A4, 0xB3F3, 0x8145, 0xD7A8, 0xC7D2, 0xD8A7, 0xCAC0, 0x8146, /* 0x10 */ + 0xC7F0, 0xB1FB, 0xD2B5, 0xB4D4, 0xB6AB, 0xCBBF, 0xD8A9, 0x8147, /* 0x10 */ + 0x8148, 0x8149, 0xB6AA, 0x814A, 0xC1BD, 0xD1CF, 0x814B, 0xC9A5, /* 0x20 */ + 0xD8AD, 0x814C, 0xB8F6, 0xD1BE, 0xE3DC, 0xD6D0, 0x814D, 0x814E, /* 0x20 */ + 0xB7E1, 0x814F, 0xB4AE, 0x8150, 0xC1D9, 0x8151, 0xD8BC, 0x8152, /* 0x30 */ + 0xCDE8, 0xB5A4, 0xCEAA, 0xD6F7, 0x8153, 0xC0F6, 0xBED9, 0xD8AF, /* 0x30 */ + 0x8154, 0x8155, 0x8156, 0xC4CB, 0x8157, 0xBEC3, 0x8158, 0xD8B1, /* 0x40 */ + 0xC3B4, 0xD2E5, 0x8159, 0xD6AE, 0xCEDA, 0xD5A7, 0xBAF5, 0xB7A6, /* 0x40 */ + 0xC0D6, 0x815A, 0xC6B9, 0xC5D2, 0xC7C7, 0x815B, 0xB9D4, 0x815C, /* 0x50 */ + 0xB3CB, 0xD2D2, 0x815D, 0x815E, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, /* 0x50 */ + 0xCFB0, 0xCFE7, 0x815F, 0x8160, 0x8161, 0x8162, 0xCAE9, 0x8163, /* 0x60 */ + 0x8164, 0xD8C0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816A, /* 0x60 */ + 0xC2F2, 0xC2D2, 0x816B, 0xC8E9, 0x816C, 0x816D, 0x816E, 0x816F, /* 0x70 */ + 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xC7AC, 0x8176, /* 0x70 */ + 0x8177, 0x8178, 0x8179, 0x817A, 0x817B, 0x817C, 0xC1CB, 0x817D, /* 0x80 */ + 0xD3E8, 0xD5F9, 0x817E, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0xBFF7, /* 0x80 */ + 0x8180, 0xD4C6, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0x8181, 0x8182, /* 0x90 */ + 0xD8A8, 0x8183, 0xD1C7, 0xD0A9, 0x8184, 0x8185, 0x8186, 0xD8BD, /* 0x90 */ + 0xD9EF, 0xCDF6, 0xBFBA, 0x8187, 0xBDBB, 0xBAA5, 0xD2E0, 0xB2FA, /* 0xA0 */ + 0xBAE0, 0xC4B6, 0x8188, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0x8189, /* 0xA0 */ + 0x818A, 0x818B, 0xC7D7, 0xD9F1, 0x818C, 0xD9F4, 0x818D, 0x818E, /* 0xB0 */ + 0x818F, 0x8190, 0xC8CB, 0xD8E9, 0x8191, 0x8192, 0x8193, 0xD2DA, /* 0xB0 */ + 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0xBDF6, 0xC6CD, 0xB3F0, /* 0xC0 */ + 0x8194, 0xD8EB, 0xBDF1, 0xBDE9, 0x8195, 0xC8D4, 0xB4D3, 0x8196, /* 0xC0 */ + 0x8197, 0xC2D8, 0x8198, 0xB2D6, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, /* 0xD0 */ + 0xB8B6, 0xCFC9, 0x8199, 0x819A, 0x819B, 0xD9DA, 0xD8F0, 0xC7AA, /* 0xD0 */ + 0x819C, 0xD8EE, 0x819D, 0xB4FA, 0xC1EE, 0xD2D4, 0x819E, 0x819F, /* 0xE0 */ + 0xD8ED, 0x81A0, 0xD2C7, 0xD8EF, 0xC3C7, 0x81A1, 0x81A2, 0x81A3, /* 0xE0 */ + 0xD1F6, 0x81A4, 0xD6D9, 0xD8F2, 0x81A5, 0xD8F5, 0xBCFE, 0xBCDB, /* 0xF0 */ + 0x81A6, 0x81A7, 0x81A8, 0xC8CE, 0x81A9, 0xB7DD, 0x81AA, 0xB7C2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81AB, 0xC6F3, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, 0x81B1, /* 0x00 */ + 0x81B2, 0xD8F8, 0xD2C1, 0x81B3, 0x81B4, 0xCEE9, 0xBCBF, 0xB7FC, /* 0x00 */ + 0xB7A5, 0xD0DD, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, 0xD6DA, /* 0x10 */ + 0xD3C5, 0xBBEF, 0xBBE1, 0xD8F1, 0x81BA, 0x81BB, 0xC9A1, 0xCEB0, /* 0x10 */ + 0xB4AB, 0x81BC, 0xD8F3, 0x81BD, 0xC9CB, 0xD8F6, 0xC2D7, 0xD8F7, /* 0x20 */ + 0x81BE, 0x81BF, 0xCEB1, 0xD8F9, 0x81C0, 0x81C1, 0x81C2, 0xB2AE, /* 0x20 */ + 0xB9C0, 0x81C3, 0xD9A3, 0x81C4, 0xB0E9, 0x81C5, 0xC1E6, 0x81C6, /* 0x30 */ + 0xC9EC, 0x81C7, 0xCBC5, 0x81C8, 0xCBC6, 0xD9A4, 0x81C9, 0x81CA, /* 0x30 */ + 0x81CB, 0x81CC, 0x81CD, 0xB5E8, 0x81CE, 0x81CF, 0xB5AB, 0x81D0, /* 0x40 */ + 0x81D1, 0x81D2, 0x81D3, 0x81D4, 0x81D5, 0xCEBB, 0xB5CD, 0xD7A1, /* 0x40 */ + 0xD7F4, 0xD3D3, 0x81D6, 0xCCE5, 0x81D7, 0xBACE, 0x81D8, 0xD9A2, /* 0x50 */ + 0xD9DC, 0xD3E0, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, /* 0x50 */ + 0xC4E3, 0x81D9, 0x81DA, 0xD3B6, 0xD8F4, 0xD9DD, 0x81DB, 0xD8FB, /* 0x60 */ + 0x81DC, 0xC5E5, 0x81DD, 0x81DE, 0xC0D0, 0x81DF, 0x81E0, 0xD1F0, /* 0x60 */ + 0xB0DB, 0x81E1, 0x81E2, 0xBCD1, 0xD9A6, 0x81E3, 0xD9A5, 0x81E4, /* 0x70 */ + 0x81E5, 0x81E6, 0x81E7, 0xD9AC, 0xD9AE, 0x81E8, 0xD9AB, 0xCAB9, /* 0x70 */ + 0x81E9, 0x81EA, 0x81EB, 0xD9A9, 0xD6B6, 0x81EC, 0x81ED, 0x81EE, /* 0x80 */ + 0xB3DE, 0xD9A8, 0x81EF, 0xC0FD, 0x81F0, 0xCACC, 0x81F1, 0xD9AA, /* 0x80 */ + 0x81F2, 0xD9A7, 0x81F3, 0x81F4, 0xD9B0, 0x81F5, 0x81F6, 0xB6B1, /* 0x90 */ + 0x81F7, 0x81F8, 0x81F9, 0xB9A9, 0x81FA, 0xD2C0, 0x81FB, 0x81FC, /* 0x90 */ + 0xCFC0, 0x81FD, 0x81FE, 0xC2C2, 0x8240, 0xBDC4, 0xD5EC, 0xB2E0, /* 0xA0 */ + 0xC7C8, 0xBFEB, 0xD9AD, 0x8241, 0xD9AF, 0x8242, 0xCEEA, 0xBAEE, /* 0xA0 */ + 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xC7D6, 0x8248, 0x8249, /* 0xB0 */ + 0x824A, 0x824B, 0x824C, 0x824D, 0x824E, 0x824F, 0x8250, 0xB1E3, /* 0xB0 */ + 0x8251, 0x8252, 0x8253, 0xB4D9, 0xB6ED, 0xD9B4, 0x8254, 0x8255, /* 0xC0 */ + 0x8256, 0x8257, 0xBFA1, 0x8258, 0x8259, 0x825A, 0xD9DE, 0xC7CE, /* 0xC0 */ + 0xC0FE, 0xD9B8, 0x825B, 0x825C, 0x825D, 0x825E, 0x825F, 0xCBD7, /* 0xD0 */ + 0xB7FD, 0x8260, 0xD9B5, 0x8261, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, /* 0xD0 */ + 0x8262, 0xD0C5, 0x8263, 0xD9B6, 0x8264, 0x8265, 0xD9B1, 0x8266, /* 0xE0 */ + 0xD9B2, 0xC1A9, 0xD9B3, 0x8267, 0x8268, 0xBCF3, 0xD0DE, 0xB8A9, /* 0xE0 */ + 0x8269, 0xBEE3, 0x826A, 0xD9BD, 0x826B, 0x826C, 0x826D, 0x826E, /* 0xF0 */ + 0xD9BA, 0x826F, 0xB0B3, 0x8270, 0x8271, 0x8272, 0xD9C2, 0x8273 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827A, 0x827B, /* 0x00 */ + 0x827C, 0x827D, 0x827E, 0x8280, 0xD9C4, 0xB1B6, 0x8281, 0xD9BF, /* 0x00 */ + 0x8282, 0x8283, 0xB5B9, 0x8284, 0xBEF3, 0x8285, 0x8286, 0x8287, /* 0x10 */ + 0xCCC8, 0xBAF2, 0xD2D0, 0x8288, 0xD9C3, 0x8289, 0x828A, 0xBDE8, /* 0x10 */ + 0x828B, 0xB3AB, 0x828C, 0x828D, 0x828E, 0xD9C5, 0xBEEB, 0x828F, /* 0x20 */ + 0xD9C6, 0xD9BB, 0xC4DF, 0x8290, 0xD9BE, 0xD9C1, 0xD9C0, 0x8291, /* 0x20 */ + 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, /* 0x30 */ + 0x829A, 0x829B, 0xD5AE, 0x829C, 0xD6B5, 0x829D, 0xC7E3, 0x829E, /* 0x30 */ + 0x829F, 0x82A0, 0x82A1, 0xD9C8, 0x82A2, 0x82A3, 0x82A4, 0xBCD9, /* 0x40 */ + 0xD9CA, 0x82A5, 0x82A6, 0x82A7, 0xD9BC, 0x82A8, 0xD9CB, 0xC6AB, /* 0x40 */ + 0x82A9, 0x82AA, 0x82AB, 0x82AC, 0x82AD, 0xD9C9, 0x82AE, 0x82AF, /* 0x50 */ + 0x82B0, 0x82B1, 0xD7F6, 0x82B2, 0xCDA3, 0x82B3, 0x82B4, 0x82B5, /* 0x50 */ + 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0xBDA1, 0x82BB, 0x82BC, /* 0x60 */ + 0x82BD, 0x82BE, 0x82BF, 0x82C0, 0xD9CC, 0x82C1, 0x82C2, 0x82C3, /* 0x60 */ + 0x82C4, 0x82C5, 0x82C6, 0x82C7, 0x82C8, 0x82C9, 0xC5BC, 0xCDB5, /* 0x70 */ + 0x82CA, 0x82CB, 0x82CC, 0xD9CD, 0x82CD, 0x82CE, 0xD9C7, 0xB3A5, /* 0x70 */ + 0xBFFE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0xB8B5, 0x82D3, 0x82D4, /* 0x80 */ + 0xC0FC, 0x82D5, 0x82D6, 0x82D7, 0x82D8, 0xB0F8, 0x82D9, 0x82DA, /* 0x80 */ + 0x82DB, 0x82DC, 0x82DD, 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, /* 0x90 */ + 0x82E3, 0x82E4, 0x82E5, 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, /* 0x90 */ + 0x82EB, 0x82EC, 0x82ED, 0xB4F6, 0x82EE, 0xD9CE, 0x82EF, 0xD9CF, /* 0xA0 */ + 0xB4A2, 0xD9D0, 0x82F0, 0x82F1, 0xB4DF, 0x82F2, 0x82F3, 0x82F4, /* 0xA0 */ + 0x82F5, 0x82F6, 0xB0C1, 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, /* 0xB0 */ + 0x82FC, 0x82FD, 0xD9D1, 0xC9B5, 0x82FE, 0x8340, 0x8341, 0x8342, /* 0xB0 */ + 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, /* 0xC0 */ + 0x834B, 0x834C, 0x834D, 0x834E, 0x834F, 0x8350, 0x8351, 0xCFF1, /* 0xC0 */ + 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xD9D2, 0x8358, /* 0xD0 */ + 0x8359, 0x835A, 0xC1C5, 0x835B, 0x835C, 0x835D, 0x835E, 0x835F, /* 0xD0 */ + 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xD9D6, 0xC9AE, /* 0xE0 */ + 0x8366, 0x8367, 0x8368, 0x8369, 0xD9D5, 0xD9D4, 0xD9D7, 0x836A, /* 0xE0 */ + 0x836B, 0x836C, 0x836D, 0xCBDB, 0x836E, 0xBDA9, 0x836F, 0x8370, /* 0xF0 */ + 0x8371, 0x8372, 0x8373, 0xC6A7, 0x8374, 0x8375, 0x8376, 0x8377 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8378, 0x8379, 0x837A, 0x837B, 0x837C, 0x837D, 0xD9D3, 0xD9D8, /* 0x00 */ + 0x837E, 0x8380, 0x8381, 0xD9D9, 0x8382, 0x8383, 0x8384, 0x8385, /* 0x00 */ + 0x8386, 0x8387, 0xC8E5, 0x8388, 0x8389, 0x838A, 0x838B, 0x838C, /* 0x10 */ + 0x838D, 0x838E, 0x838F, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, /* 0x10 */ + 0x8395, 0xC0DC, 0x8396, 0x8397, 0x8398, 0x8399, 0x839A, 0x839B, /* 0x20 */ + 0x839C, 0x839D, 0x839E, 0x839F, 0x83A0, 0x83A1, 0x83A2, 0x83A3, /* 0x20 */ + 0x83A4, 0x83A5, 0x83A6, 0x83A7, 0x83A8, 0x83A9, 0x83AA, 0x83AB, /* 0x30 */ + 0x83AC, 0x83AD, 0x83AE, 0x83AF, 0x83B0, 0x83B1, 0x83B2, 0xB6F9, /* 0x30 */ + 0xD8A3, 0xD4CA, 0x83B3, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0x83B4, /* 0x40 */ + 0xCFC8, 0xB9E2, 0x83B5, 0xBFCB, 0x83B6, 0xC3E2, 0x83B7, 0x83B8, /* 0x40 */ + 0x83B9, 0xB6D2, 0x83BA, 0x83BB, 0xCDC3, 0xD9EE, 0xD9F0, 0x83BC, /* 0x50 */ + 0x83BD, 0x83BE, 0xB5B3, 0x83BF, 0xB6B5, 0x83C0, 0x83C1, 0x83C2, /* 0x50 */ + 0x83C3, 0x83C4, 0xBEA4, 0x83C5, 0x83C6, 0xC8EB, 0x83C7, 0x83C8, /* 0x60 */ + 0xC8AB, 0x83C9, 0x83CA, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0x83CB, /* 0x60 */ + 0xC0BC, 0xB9B2, 0x83CC, 0xB9D8, 0xD0CB, 0xB1F8, 0xC6E4, 0xBEDF, /* 0x70 */ + 0xB5E4, 0xD7C8, 0x83CD, 0xD1F8, 0xBCE6, 0xCADE, 0x83CE, 0x83CF, /* 0x70 */ + 0xBCBD, 0xD9E6, 0xD8E7, 0x83D0, 0x83D1, 0xC4DA, 0x83D2, 0x83D3, /* 0x80 */ + 0xB8D4, 0xC8BD, 0x83D4, 0x83D5, 0xB2E1, 0xD4D9, 0x83D6, 0x83D7, /* 0x80 */ + 0x83D8, 0x83D9, 0xC3B0, 0x83DA, 0x83DB, 0xC3E1, 0xDAA2, 0xC8DF, /* 0x90 */ + 0x83DC, 0xD0B4, 0x83DD, 0xBEFC, 0xC5A9, 0x83DE, 0x83DF, 0x83E0, /* 0x90 */ + 0xB9DA, 0x83E1, 0xDAA3, 0x83E2, 0xD4A9, 0xDAA4, 0x83E3, 0x83E4, /* 0xA0 */ + 0x83E5, 0x83E6, 0x83E7, 0xD9FB, 0xB6AC, 0x83E8, 0x83E9, 0xB7EB, /* 0xA0 */ + 0xB1F9, 0xD9FC, 0xB3E5, 0xBEF6, 0x83EA, 0xBFF6, 0xD2B1, 0xC0E4, /* 0xB0 */ + 0x83EB, 0x83EC, 0x83ED, 0xB6B3, 0xD9FE, 0xD9FD, 0x83EE, 0x83EF, /* 0xB0 */ + 0xBEBB, 0x83F0, 0x83F1, 0x83F2, 0xC6E0, 0x83F3, 0xD7BC, 0xDAA1, /* 0xC0 */ + 0x83F4, 0xC1B9, 0x83F5, 0xB5F2, 0xC1E8, 0x83F6, 0x83F7, 0xBCF5, /* 0xC0 */ + 0x83F8, 0xB4D5, 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, /* 0xD0 */ + 0x8440, 0x8441, 0x8442, 0xC1DD, 0x8443, 0xC4FD, 0x8444, 0x8445, /* 0xD0 */ + 0xBCB8, 0xB7B2, 0x8446, 0x8447, 0xB7EF, 0x8448, 0x8449, 0x844A, /* 0xE0 */ + 0x844B, 0x844C, 0x844D, 0xD9EC, 0x844E, 0xC6BE, 0x844F, 0xBFAD, /* 0xE0 */ + 0xBBCB, 0x8450, 0x8451, 0xB5CA, 0x8452, 0xDBC9, 0xD0D7, 0x8453, /* 0xF0 */ + 0xCDB9, 0xB0BC, 0xB3F6, 0xBBF7, 0xDBCA, 0xBAAF, 0x8454, 0xD4E4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0x8455, 0x8456, 0xB7D6, 0xC7D0, /* 0x00 */ + 0xD8D7, 0x8457, 0xBFAF, 0x8458, 0x8459, 0xDBBB, 0xD8D8, 0x845A, /* 0x00 */ + 0x845B, 0xD0CC, 0xBBAE, 0x845C, 0x845D, 0x845E, 0xEBBE, 0xC1D0, /* 0x10 */ + 0xC1F5, 0xD4F2, 0xB8D5, 0xB4B4, 0x845F, 0xB3F5, 0x8460, 0x8461, /* 0x10 */ + 0xC9BE, 0x8462, 0x8463, 0x8464, 0xC5D0, 0x8465, 0x8466, 0x8467, /* 0x20 */ + 0xC5D9, 0xC0FB, 0x8468, 0xB1F0, 0x8469, 0xD8D9, 0xB9CE, 0x846A, /* 0x20 */ + 0xB5BD, 0x846B, 0x846C, 0xD8DA, 0x846D, 0x846E, 0xD6C6, 0xCBA2, /* 0x30 */ + 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0x846F, 0xB9F4, 0x8470, 0xD8DB, /* 0x30 */ + 0xD8DC, 0xB6E7, 0xBCC1, 0xCCEA, 0x8471, 0x8472, 0x8473, 0x8474, /* 0x40 */ + 0x8475, 0x8476, 0xCFF7, 0x8477, 0xD8DD, 0xC7B0, 0x8478, 0x8479, /* 0x40 */ + 0xB9D0, 0xBDA3, 0x847A, 0x847B, 0xCCDE, 0x847C, 0xC6CA, 0x847D, /* 0x50 */ + 0x847E, 0x8480, 0x8481, 0x8482, 0xD8E0, 0x8483, 0xD8DE, 0x8484, /* 0x50 */ + 0x8485, 0xD8DF, 0x8486, 0x8487, 0x8488, 0xB0FE, 0x8489, 0xBEE7, /* 0x60 */ + 0x848A, 0xCAA3, 0xBCF4, 0x848B, 0x848C, 0x848D, 0x848E, 0xB8B1, /* 0x60 */ + 0x848F, 0x8490, 0xB8EE, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, /* 0x70 */ + 0x8496, 0x8497, 0x8498, 0x8499, 0x849A, 0xD8E2, 0x849B, 0xBDCB, /* 0x70 */ + 0x849C, 0xD8E4, 0xD8E3, 0x849D, 0x849E, 0x849F, 0x84A0, 0x84A1, /* 0x80 */ + 0xC5FC, 0x84A2, 0x84A3, 0x84A4, 0x84A5, 0x84A6, 0x84A7, 0x84A8, /* 0x80 */ + 0xD8E5, 0x84A9, 0x84AA, 0xD8E6, 0x84AB, 0x84AC, 0x84AD, 0x84AE, /* 0x90 */ + 0x84AF, 0x84B0, 0x84B1, 0xC1A6, 0x84B2, 0xC8B0, 0xB0EC, 0xB9A6, /* 0x90 */ + 0xBCD3, 0xCEF1, 0xDBBD, 0xC1D3, 0x84B3, 0x84B4, 0x84B5, 0x84B6, /* 0xA0 */ + 0xB6AF, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0x84B7, 0x84B8, /* 0xA0 */ + 0x84B9, 0xC0F8, 0xBEA2, 0xC0CD, 0x84BA, 0x84BB, 0x84BC, 0x84BD, /* 0xB0 */ + 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, 0x84C3, 0xDBC0, 0xCAC6, /* 0xB0 */ + 0x84C4, 0x84C5, 0x84C6, 0xB2AA, 0x84C7, 0x84C8, 0x84C9, 0xD3C2, /* 0xC0 */ + 0x84CA, 0xC3E3, 0x84CB, 0xD1AB, 0x84CC, 0x84CD, 0x84CE, 0x84CF, /* 0xC0 */ + 0xDBC2, 0x84D0, 0xC0D5, 0x84D1, 0x84D2, 0x84D3, 0xDBC3, 0x84D4, /* 0xD0 */ + 0xBFB1, 0x84D5, 0x84D6, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0xC4BC, /* 0xD0 */ + 0x84DB, 0x84DC, 0x84DD, 0x84DE, 0xC7DA, 0x84DF, 0x84E0, 0x84E1, /* 0xE0 */ + 0x84E2, 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9, /* 0xE0 */ + 0xDBC4, 0x84EA, 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x84F0, /* 0xF0 */ + 0x84F1, 0xD9E8, 0xC9D7, 0x84F2, 0x84F3, 0x84F4, 0xB9B4, 0xCEF0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4C8, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0xB0FC, 0xB4D2, 0x84F9, /* 0x00 */ + 0xD0D9, 0x84FA, 0x84FB, 0x84FC, 0x84FD, 0xD9E9, 0x84FE, 0xDECB, /* 0x00 */ + 0xD9EB, 0x8540, 0x8541, 0x8542, 0x8543, 0xD8B0, 0xBBAF, 0xB1B1, /* 0x10 */ + 0x8544, 0xB3D7, 0xD8CE, 0x8545, 0x8546, 0xD4D1, 0x8547, 0x8548, /* 0x10 */ + 0xBDB3, 0xBFEF, 0x8549, 0xCFBB, 0x854A, 0x854B, 0xD8D0, 0x854C, /* 0x20 */ + 0x854D, 0x854E, 0xB7CB, 0x854F, 0x8550, 0x8551, 0xD8D1, 0x8552, /* 0x20 */ + 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855A, /* 0x30 */ + 0x855B, 0xC6A5, 0xC7F8, 0xD2BD, 0x855C, 0x855D, 0xD8D2, 0xC4E4, /* 0x30 */ + 0x855E, 0xCAAE, 0x855F, 0xC7A7, 0x8560, 0xD8A6, 0x8561, 0xC9FD, /* 0x40 */ + 0xCEE7, 0xBBDC, 0xB0EB, 0x8562, 0x8563, 0x8564, 0xBBAA, 0xD0AD, /* 0x40 */ + 0x8565, 0xB1B0, 0xD7E4, 0xD7BF, 0x8566, 0xB5A5, 0xC2F4, 0xC4CF, /* 0x50 */ + 0x8567, 0x8568, 0xB2A9, 0x8569, 0xB2B7, 0x856A, 0xB1E5, 0xDFB2, /* 0x50 */ + 0xD5BC, 0xBFA8, 0xC2AC, 0xD8D5, 0xC2B1, 0x856B, 0xD8D4, 0xCED4, /* 0x60 */ + 0x856C, 0xDAE0, 0x856D, 0xCEC0, 0x856E, 0x856F, 0xD8B4, 0xC3AE, /* 0x60 */ + 0xD3A1, 0xCEA3, 0x8570, 0xBCB4, 0xC8B4, 0xC2D1, 0x8571, 0xBEED, /* 0x70 */ + 0xD0B6, 0x8572, 0xDAE1, 0x8573, 0x8574, 0x8575, 0x8576, 0xC7E4, /* 0x70 */ + 0x8577, 0x8578, 0xB3A7, 0x8579, 0xB6F2, 0xCCFC, 0xC0FA, 0x857A, /* 0x80 */ + 0x857B, 0xC0F7, 0x857C, 0xD1B9, 0xD1E1, 0xD8C7, 0x857D, 0x857E, /* 0x80 */ + 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xB2DE, 0x8585, 0x8586, /* 0x90 */ + 0xC0E5, 0x8587, 0xBAF1, 0x8588, 0x8589, 0xD8C8, 0x858A, 0xD4AD, /* 0x90 */ + 0x858B, 0x858C, 0xCFE1, 0xD8C9, 0x858D, 0xD8CA, 0xCFC3, 0x858E, /* 0xA0 */ + 0xB3F8, 0xBEC7, 0x858F, 0x8590, 0x8591, 0x8592, 0xD8CB, 0x8593, /* 0xA0 */ + 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xDBCC, 0x859A, /* 0xB0 */ + 0x859B, 0x859C, 0x859D, 0xC8A5, 0x859E, 0x859F, 0x85A0, 0xCFD8, /* 0xB0 */ + 0x85A1, 0xC8FE, 0xB2CE, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x85A6, /* 0xC0 */ + 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0xCBAB, 0xB7B4, 0x85A7, 0x85A8, /* 0xC0 */ + 0x85A9, 0xB7A2, 0x85AA, 0x85AB, 0xCAE5, 0x85AC, 0xC8A1, 0xCADC, /* 0xD0 */ + 0xB1E4, 0xD0F0, 0x85AD, 0xC5D1, 0x85AE, 0x85AF, 0x85B0, 0xDBC5, /* 0xD0 */ + 0xB5FE, 0x85B1, 0x85B2, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0x85B3, /* 0xE0 */ + 0xDFB6, 0xDFB5, 0xD6BB, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, /* 0xE0 */ + 0xCCA8, 0xDFB3, 0xCAB7, 0xD3D2, 0x85B4, 0xD8CF, 0xD2B6, 0xBAC5, /* 0xF0 */ + 0xCBBE, 0xCCBE, 0x85B5, 0xDFB7, 0xB5F0, 0xDFB4, 0x85B6, 0x85B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x85B8, 0xD3F5, 0x85B9, 0xB3D4, 0xB8F7, 0x85BA, 0xDFBA, 0x85BB, /* 0x00 */ + 0xBACF, 0xBCAA, 0xB5F5, 0x85BC, 0xCDAC, 0xC3FB, 0xBAF3, 0xC0F4, /* 0x00 */ + 0xCDC2, 0xCFF2, 0xDFB8, 0xCFC5, 0x85BD, 0xC2C0, 0xDFB9, 0xC2F0, /* 0x10 */ + 0x85BE, 0x85BF, 0x85C0, 0xBEFD, 0x85C1, 0xC1DF, 0xCDCC, 0xD2F7, /* 0x10 */ + 0xB7CD, 0xDFC1, 0x85C2, 0xDFC4, 0x85C3, 0x85C4, 0xB7F1, 0xB0C9, /* 0x20 */ + 0xB6D6, 0xB7D4, 0x85C5, 0xBAAC, 0xCCFD, 0xBFD4, 0xCBB1, 0xC6F4, /* 0x20 */ + 0x85C6, 0xD6A8, 0xDFC5, 0x85C7, 0xCEE2, 0xB3B3, 0x85C8, 0x85C9, /* 0x30 */ + 0xCEFC, 0xB4B5, 0x85CA, 0xCEC7, 0xBAF0, 0x85CB, 0xCEE1, 0x85CC, /* 0x30 */ + 0xD1BD, 0x85CD, 0x85CE, 0xDFC0, 0x85CF, 0x85D0, 0xB4F4, 0x85D1, /* 0x40 */ + 0xB3CA, 0x85D2, 0xB8E6, 0xDFBB, 0x85D3, 0x85D4, 0x85D5, 0x85D6, /* 0x40 */ + 0xC4C5, 0x85D7, 0xDFBC, 0xDFBD, 0xDFBE, 0xC5BB, 0xDFBF, 0xDFC2, /* 0x50 */ + 0xD4B1, 0xDFC3, 0x85D8, 0xC7BA, 0xCED8, 0x85D9, 0x85DA, 0x85DB, /* 0x50 */ + 0x85DC, 0x85DD, 0xC4D8, 0x85DE, 0xDFCA, 0x85DF, 0xDFCF, 0x85E0, /* 0x60 */ + 0xD6DC, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, 0x85E7, /* 0x60 */ + 0x85E8, 0xDFC9, 0xDFDA, 0xCEB6, 0x85E9, 0xBAC7, 0xDFCE, 0xDFC8, /* 0x70 */ + 0xC5DE, 0x85EA, 0x85EB, 0xC9EB, 0xBAF4, 0xC3FC, 0x85EC, 0x85ED, /* 0x70 */ + 0xBED7, 0x85EE, 0xDFC6, 0x85EF, 0xDFCD, 0x85F0, 0xC5D8, 0x85F1, /* 0x80 */ + 0x85F2, 0x85F3, 0x85F4, 0xD5A6, 0xBACD, 0x85F5, 0xBECC, 0xD3BD, /* 0x80 */ + 0xB8C0, 0x85F6, 0xD6E4, 0x85F7, 0xDFC7, 0xB9BE, 0xBFA7, 0x85F8, /* 0x90 */ + 0x85F9, 0xC1FC, 0xDFCB, 0xDFCC, 0x85FA, 0xDFD0, 0x85FB, 0x85FC, /* 0x90 */ + 0x85FD, 0x85FE, 0x8640, 0xDFDB, 0xDFE5, 0x8641, 0xDFD7, 0xDFD6, /* 0xA0 */ + 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0x8642, 0xBFA9, /* 0xA0 */ + 0x8643, 0xD4DB, 0x8644, 0xBFC8, 0xDFD4, 0x8645, 0x8646, 0x8647, /* 0xB0 */ + 0xCFCC, 0x8648, 0x8649, 0xDFDD, 0x864A, 0xD1CA, 0x864B, 0xDFDE, /* 0xB0 */ + 0xB0A7, 0xC6B7, 0xDFD3, 0x864C, 0xBAE5, 0x864D, 0xB6DF, 0xCDDB, /* 0xC0 */ + 0xB9FE, 0xD4D5, 0x864E, 0x864F, 0xDFDF, 0xCFEC, 0xB0A5, 0xDFE7, /* 0xC0 */ + 0xDFD1, 0xD1C6, 0xDFD5, 0xDFD8, 0xDFD9, 0xDFDC, 0x8650, 0xBBA9, /* 0xD0 */ + 0x8651, 0xDFE0, 0xDFE1, 0x8652, 0xDFE2, 0xDFE6, 0xDFE8, 0xD3B4, /* 0xD0 */ + 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xB8E7, 0xC5B6, 0xDFEA, /* 0xE0 */ + 0xC9DA, 0xC1A8, 0xC4C4, 0x8658, 0x8659, 0xBFDE, 0xCFF8, 0x865A, /* 0xE0 */ + 0x865B, 0x865C, 0xD5DC, 0xDFEE, 0x865D, 0x865E, 0x865F, 0x8660, /* 0xF0 */ + 0x8661, 0x8662, 0xB2B8, 0x8663, 0xBADF, 0xDFEC, 0x8664, 0xDBC1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8665, 0xD1E4, 0x8666, 0x8667, 0x8668, 0x8669, 0xCBF4, 0xB4BD, /* 0x00 */ + 0x866A, 0xB0A6, 0x866B, 0x866C, 0x866D, 0x866E, 0x866F, 0xDFF1, /* 0x00 */ + 0xCCC6, 0xDFF2, 0x8670, 0x8671, 0xDFED, 0x8672, 0x8673, 0x8674, /* 0x10 */ + 0x8675, 0x8676, 0x8677, 0xDFE9, 0x8678, 0x8679, 0x867A, 0x867B, /* 0x10 */ + 0xDFEB, 0x867C, 0xDFEF, 0xDFF0, 0xBBBD, 0x867D, 0x867E, 0xDFF3, /* 0x20 */ + 0x8680, 0x8681, 0xDFF4, 0x8682, 0xBBA3, 0x8683, 0xCADB, 0xCEA8, /* 0x20 */ + 0xE0A7, 0xB3AA, 0x8684, 0xE0A6, 0x8685, 0x8686, 0x8687, 0xE0A1, /* 0x30 */ + 0x8688, 0x8689, 0x868A, 0x868B, 0xDFFE, 0x868C, 0xCDD9, 0xDFFC, /* 0x30 */ + 0x868D, 0xDFFA, 0x868E, 0xBFD0, 0xD7C4, 0x868F, 0xC9CC, 0x8690, /* 0x40 */ + 0x8691, 0xDFF8, 0xB0A1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, /* 0x40 */ + 0xDFFD, 0x8697, 0x8698, 0x8699, 0x869A, 0xDFFB, 0xE0A2, 0x869B, /* 0x50 */ + 0x869C, 0x869D, 0x869E, 0x869F, 0xE0A8, 0x86A0, 0x86A1, 0x86A2, /* 0x50 */ + 0x86A3, 0xB7C8, 0x86A4, 0x86A5, 0xC6A1, 0xC9B6, 0xC0B2, 0xDFF5, /* 0x60 */ + 0x86A6, 0x86A7, 0xC5BE, 0x86A8, 0xD8C4, 0xDFF9, 0xC4F6, 0x86A9, /* 0x60 */ + 0x86AA, 0x86AB, 0x86AC, 0x86AD, 0x86AE, 0xE0A3, 0xE0A4, 0xE0A5, /* 0x70 */ + 0xD0A5, 0x86AF, 0x86B0, 0xE0B4, 0xCCE4, 0x86B1, 0xE0B1, 0x86B2, /* 0x70 */ + 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0x86B3, 0x86B4, 0xC0AE, /* 0x80 */ + 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0x86B5, 0x86B6, 0x86B7, 0xDFF6, /* 0x80 */ + 0x86B8, 0xE0B3, 0x86B9, 0x86BA, 0xE0B8, 0x86BB, 0x86BC, 0x86BD, /* 0x90 */ + 0xB4AD, 0xE0B9, 0x86BE, 0x86BF, 0xCFB2, 0xBAC8, 0x86C0, 0xE0B0, /* 0x90 */ + 0x86C1, 0x86C2, 0x86C3, 0x86C4, 0x86C5, 0x86C6, 0x86C7, 0xD0FA, /* 0xA0 */ + 0x86C8, 0x86C9, 0x86CA, 0x86CB, 0x86CC, 0x86CD, 0x86CE, 0x86CF, /* 0xA0 */ + 0x86D0, 0xE0AC, 0x86D1, 0xD4FB, 0x86D2, 0xDFF7, 0x86D3, 0xC5E7, /* 0xB0 */ + 0x86D4, 0xE0AD, 0x86D5, 0xD3F7, 0x86D6, 0xE0B6, 0xE0B7, 0x86D7, /* 0xB0 */ + 0x86D8, 0x86D9, 0x86DA, 0x86DB, 0xE0C4, 0xD0E1, 0x86DC, 0x86DD, /* 0xC0 */ + 0x86DE, 0xE0BC, 0x86DF, 0x86E0, 0xE0C9, 0xE0CA, 0x86E1, 0x86E2, /* 0xC0 */ + 0x86E3, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0x86E4, 0xE0B2, 0x86E5, /* 0xD0 */ + 0x86E6, 0x86E7, 0x86E8, 0x86E9, 0xCAC8, 0xE0C3, 0x86EA, 0xE0B5, /* 0xD0 */ + 0x86EB, 0xCECB, 0x86EC, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0x86ED, /* 0xE0 */ + 0xE0CB, 0x86EE, 0xE0BA, 0xE0BF, 0xE0C0, 0x86EF, 0x86F0, 0xE0C5, /* 0xE0 */ + 0x86F1, 0x86F2, 0xE0C7, 0xE0C8, 0x86F3, 0xE0CC, 0x86F4, 0xE0BB, /* 0xF0 */ + 0x86F5, 0x86F6, 0x86F7, 0x86F8, 0x86F9, 0xCBD4, 0xE0D5, 0x86FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0D6, 0xE0D2, 0x86FB, 0x86FC, 0x86FD, 0x86FE, 0x8740, 0x8741, /* 0x00 */ + 0xE0D0, 0xBCCE, 0x8742, 0x8743, 0xE0D1, 0x8744, 0xB8C2, 0xD8C5, /* 0x00 */ + 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, 0x874B, 0x874C, /* 0x10 */ + 0xD0EA, 0x874D, 0x874E, 0xC2EF, 0x874F, 0x8750, 0xE0CF, 0xE0BD, /* 0x10 */ + 0x8751, 0x8752, 0x8753, 0xE0D4, 0xE0D3, 0x8754, 0x8755, 0xE0D7, /* 0x20 */ + 0x8756, 0x8757, 0x8758, 0x8759, 0xE0DC, 0xE0D8, 0x875A, 0x875B, /* 0x20 */ + 0x875C, 0xD6F6, 0xB3B0, 0x875D, 0xD7EC, 0x875E, 0xCBBB, 0x875F, /* 0x30 */ + 0x8760, 0xE0DA, 0x8761, 0xCEFB, 0x8762, 0x8763, 0x8764, 0xBAD9, /* 0x30 */ + 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, /* 0x40 */ + 0x876D, 0x876E, 0x876F, 0x8770, 0xE0E1, 0xE0DD, 0xD2AD, 0x8771, /* 0x40 */ + 0x8772, 0x8773, 0x8774, 0x8775, 0xE0E2, 0x8776, 0x8777, 0xE0DB, /* 0x50 */ + 0xE0D9, 0xE0DF, 0x8778, 0x8779, 0xE0E0, 0x877A, 0x877B, 0x877C, /* 0x50 */ + 0x877D, 0x877E, 0xE0DE, 0x8780, 0xE0E4, 0x8781, 0x8782, 0x8783, /* 0x60 */ + 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0x8784, 0x8785, 0x8786, /* 0x60 */ + 0x8787, 0xE0E5, 0x8788, 0x8789, 0x878A, 0x878B, 0xB8C1, 0x878C, /* 0x70 */ + 0x878D, 0x878E, 0x878F, 0xE0E7, 0xE0E8, 0x8790, 0x8791, 0x8792, /* 0x70 */ + 0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xE0E9, 0xE0E3, 0x8798, /* 0x80 */ + 0x8799, 0x879A, 0x879B, 0x879C, 0x879D, 0x879E, 0xBABF, 0xCCE7, /* 0x80 */ + 0x879F, 0x87A0, 0x87A1, 0xE0EA, 0x87A2, 0x87A3, 0x87A4, 0x87A5, /* 0x90 */ + 0x87A6, 0x87A7, 0x87A8, 0x87A9, 0x87AA, 0x87AB, 0x87AC, 0x87AD, /* 0x90 */ + 0x87AE, 0x87AF, 0x87B0, 0xCFF9, 0x87B1, 0x87B2, 0x87B3, 0x87B4, /* 0xA0 */ + 0x87B5, 0x87B6, 0x87B7, 0x87B8, 0x87B9, 0x87BA, 0x87BB, 0xE0EB, /* 0xA0 */ + 0x87BC, 0x87BD, 0x87BE, 0x87BF, 0x87C0, 0x87C1, 0x87C2, 0xC8C2, /* 0xB0 */ + 0x87C3, 0x87C4, 0x87C5, 0x87C6, 0xBDC0, 0x87C7, 0x87C8, 0x87C9, /* 0xB0 */ + 0x87CA, 0x87CB, 0x87CC, 0x87CD, 0x87CE, 0x87CF, 0x87D0, 0x87D1, /* 0xC0 */ + 0x87D2, 0x87D3, 0xC4D2, 0x87D4, 0x87D5, 0x87D6, 0x87D7, 0x87D8, /* 0xC0 */ + 0x87D9, 0x87DA, 0x87DB, 0x87DC, 0xE0EC, 0x87DD, 0x87DE, 0xE0ED, /* 0xD0 */ + 0x87DF, 0x87E0, 0xC7F4, 0xCBC4, 0x87E1, 0xE0EE, 0xBBD8, 0xD8B6, /* 0xD0 */ + 0xD2F2, 0xE0EF, 0xCDC5, 0x87E2, 0xB6DA, 0x87E3, 0x87E4, 0x87E5, /* 0xE0 */ + 0x87E6, 0x87E7, 0x87E8, 0xE0F1, 0x87E9, 0xD4B0, 0x87EA, 0x87EB, /* 0xE0 */ + 0xC0A7, 0xB4D1, 0x87EC, 0x87ED, 0xCEA7, 0xE0F0, 0x87EE, 0x87EF, /* 0xF0 */ + 0x87F0, 0xE0F2, 0xB9CC, 0x87F1, 0x87F2, 0xB9FA, 0xCDBC, 0xE0F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x87F3, 0x87F4, 0x87F5, 0xC6D4, 0xE0F4, 0x87F6, 0xD4B2, 0x87F7, /* 0x00 */ + 0xC8A6, 0xE0F6, 0xE0F5, 0x87F8, 0x87F9, 0x87FA, 0x87FB, 0x87FC, /* 0x00 */ + 0x87FD, 0x87FE, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, /* 0x10 */ + 0x8846, 0x8847, 0x8848, 0x8849, 0xE0F7, 0x884A, 0x884B, 0xCDC1, /* 0x10 */ + 0x884C, 0x884D, 0x884E, 0xCAA5, 0x884F, 0x8850, 0x8851, 0x8852, /* 0x20 */ + 0xD4DA, 0xDBD7, 0xDBD9, 0x8853, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, /* 0x20 */ + 0xB5D8, 0x8854, 0x8855, 0xDBDA, 0x8856, 0x8857, 0x8858, 0x8859, /* 0x30 */ + 0x885A, 0xDBDB, 0xB3A1, 0xDBDF, 0x885B, 0x885C, 0xBBF8, 0x885D, /* 0x30 */ + 0xD6B7, 0x885E, 0xDBE0, 0x885F, 0x8860, 0x8861, 0x8862, 0xBEF9, /* 0x40 */ + 0x8863, 0x8864, 0xB7BB, 0x8865, 0xDBD0, 0xCCAE, 0xBFB2, 0xBBB5, /* 0x40 */ + 0xD7F8, 0xBFD3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886A, 0xBFE9, /* 0x50 */ + 0x886B, 0x886C, 0xBCE1, 0xCCB3, 0xDBDE, 0xB0D3, 0xCEEB, 0xB7D8, /* 0x50 */ + 0xD7B9, 0xC6C2, 0x886D, 0x886E, 0xC0A4, 0x886F, 0xCCB9, 0x8870, /* 0x60 */ + 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0x8871, 0xDBE8, 0x8872, 0xC5F7, /* 0x60 */ + 0x8873, 0x8874, 0x8875, 0xDBEA, 0x8876, 0x8877, 0xDBE9, 0xBFC0, /* 0x70 */ + 0x8878, 0x8879, 0x887A, 0xDBE6, 0xDBE5, 0x887B, 0x887C, 0x887D, /* 0x70 */ + 0x887E, 0x8880, 0xB4B9, 0xC0AC, 0xC2A2, 0xDBE2, 0xDBE4, 0x8881, /* 0x80 */ + 0x8882, 0x8883, 0x8884, 0xD0CD, 0xDBED, 0x8885, 0x8886, 0x8887, /* 0x80 */ + 0x8888, 0x8889, 0xC0DD, 0xDBF2, 0x888A, 0x888B, 0x888C, 0x888D, /* 0x90 */ + 0x888E, 0x888F, 0x8890, 0xB6E2, 0x8891, 0x8892, 0x8893, 0x8894, /* 0x90 */ + 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0x8895, 0xBFD1, 0xDBF0, /* 0xA0 */ + 0x8896, 0xDBD1, 0x8897, 0xB5E6, 0x8898, 0xDBEB, 0xBFE5, 0x8899, /* 0xA0 */ + 0x889A, 0x889B, 0xDBEE, 0x889C, 0xDBF1, 0x889D, 0x889E, 0x889F, /* 0xB0 */ + 0xDBF9, 0x88A0, 0x88A1, 0x88A2, 0x88A3, 0x88A4, 0x88A5, 0x88A6, /* 0xB0 */ + 0x88A7, 0x88A8, 0xB9A1, 0xB0A3, 0x88A9, 0x88AA, 0x88AB, 0x88AC, /* 0xC0 */ + 0x88AD, 0x88AE, 0x88AF, 0xC2F1, 0x88B0, 0x88B1, 0xB3C7, 0xDBEF, /* 0xC0 */ + 0x88B2, 0x88B3, 0xDBF8, 0x88B4, 0xC6D2, 0xDBF4, 0x88B5, 0x88B6, /* 0xD0 */ + 0xDBF5, 0xDBF7, 0xDBF6, 0x88B7, 0x88B8, 0xDBFE, 0x88B9, 0xD3F2, /* 0xD0 */ + 0xB2BA, 0x88BA, 0x88BB, 0x88BC, 0xDBFD, 0x88BD, 0x88BE, 0x88BF, /* 0xE0 */ + 0x88C0, 0x88C1, 0x88C2, 0x88C3, 0x88C4, 0xDCA4, 0x88C5, 0xDBFB, /* 0xE0 */ + 0x88C6, 0x88C7, 0x88C8, 0x88C9, 0xDBFA, 0x88CA, 0x88CB, 0x88CC, /* 0xF0 */ + 0xDBFC, 0xC5E0, 0xBBF9, 0x88CD, 0x88CE, 0xDCA3, 0x88CF, 0x88D0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCA5, 0x88D1, 0xCCC3, 0x88D2, 0x88D3, 0x88D4, 0xB6D1, 0xDDC0, /* 0x00 */ + 0x88D5, 0x88D6, 0x88D7, 0xDCA1, 0x88D8, 0xDCA2, 0x88D9, 0x88DA, /* 0x00 */ + 0x88DB, 0xC7B5, 0x88DC, 0x88DD, 0x88DE, 0xB6E9, 0x88DF, 0x88E0, /* 0x10 */ + 0x88E1, 0xDCA7, 0x88E2, 0x88E3, 0x88E4, 0x88E5, 0xDCA6, 0x88E6, /* 0x10 */ + 0xDCA9, 0xB1A4, 0x88E7, 0x88E8, 0xB5CC, 0x88E9, 0x88EA, 0x88EB, /* 0x20 */ + 0x88EC, 0x88ED, 0xBFB0, 0x88EE, 0x88EF, 0x88F0, 0x88F1, 0x88F2, /* 0x20 */ + 0xD1DF, 0x88F3, 0x88F4, 0x88F5, 0x88F6, 0xB6C2, 0x88F7, 0x88F8, /* 0x30 */ + 0x88F9, 0x88FA, 0x88FB, 0x88FC, 0x88FD, 0x88FE, 0x8940, 0x8941, /* 0x30 */ + 0x8942, 0x8943, 0x8944, 0x8945, 0xDCA8, 0x8946, 0x8947, 0x8948, /* 0x40 */ + 0x8949, 0x894A, 0x894B, 0x894C, 0xCBFA, 0xEBF3, 0x894D, 0x894E, /* 0x40 */ + 0x894F, 0xCBDC, 0x8950, 0x8951, 0xCBFE, 0x8952, 0x8953, 0x8954, /* 0x50 */ + 0xCCC1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xC8FB, 0x895A, /* 0x50 */ + 0x895B, 0x895C, 0x895D, 0x895E, 0x895F, 0xDCAA, 0x8960, 0x8961, /* 0x60 */ + 0x8962, 0x8963, 0x8964, 0xCCEE, 0xDCAB, 0x8965, 0x8966, 0x8967, /* 0x60 */ + 0x8968, 0x8969, 0x896A, 0x896B, 0x896C, 0x896D, 0x896E, 0x896F, /* 0x70 */ + 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xDBD3, 0x8976, /* 0x70 */ + 0xDCAF, 0xDCAC, 0x8977, 0xBEB3, 0x8978, 0xCAFB, 0x8979, 0x897A, /* 0x80 */ + 0x897B, 0xDCAD, 0x897C, 0x897D, 0x897E, 0x8980, 0x8981, 0x8982, /* 0x80 */ + 0x8983, 0x8984, 0xC9CA, 0xC4B9, 0x8985, 0x8986, 0x8987, 0x8988, /* 0x90 */ + 0x8989, 0xC7BD, 0xDCAE, 0x898A, 0x898B, 0x898C, 0xD4F6, 0xD0E6, /* 0x90 */ + 0x898D, 0x898E, 0x898F, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, /* 0xA0 */ + 0xC4AB, 0xB6D5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899A, /* 0xA0 */ + 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, 0x89A1, 0x89A2, /* 0xB0 */ + 0x89A3, 0x89A4, 0x89A5, 0x89A6, 0xDBD4, 0x89A7, 0x89A8, 0x89A9, /* 0xB0 */ + 0x89AA, 0xB1DA, 0x89AB, 0x89AC, 0x89AD, 0xDBD5, 0x89AE, 0x89AF, /* 0xC0 */ + 0x89B0, 0x89B1, 0x89B2, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B7, /* 0xC0 */ + 0x89B8, 0xDBD6, 0x89B9, 0x89BA, 0x89BB, 0xBABE, 0x89BC, 0x89BD, /* 0xD0 */ + 0x89BE, 0x89BF, 0x89C0, 0x89C1, 0x89C2, 0x89C3, 0x89C4, 0x89C5, /* 0xD0 */ + 0x89C6, 0x89C7, 0x89C8, 0x89C9, 0xC8C0, 0x89CA, 0x89CB, 0x89CC, /* 0xE0 */ + 0x89CD, 0x89CE, 0x89CF, 0xCABF, 0xC8C9, 0x89D0, 0xD7B3, 0x89D1, /* 0xE0 */ + 0xC9F9, 0x89D2, 0x89D3, 0xBFC7, 0x89D4, 0x89D5, 0xBAF8, 0x89D6, /* 0xF0 */ + 0x89D7, 0xD2BC, 0x89D8, 0x89D9, 0x89DA, 0x89DB, 0x89DC, 0x89DD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x89DE, 0x89DF, 0xE2BA, 0x89E0, 0xB4A6, 0x89E1, 0x89E2, 0xB1B8, /* 0x00 */ + 0x89E3, 0x89E4, 0x89E5, 0x89E6, 0x89E7, 0xB8B4, 0x89E8, 0xCFC4, /* 0x00 */ + 0x89E9, 0x89EA, 0x89EB, 0x89EC, 0xD9E7, 0xCFA6, 0xCDE2, 0x89ED, /* 0x10 */ + 0x89EE, 0xD9ED, 0xB6E0, 0x89EF, 0xD2B9, 0x89F0, 0x89F1, 0xB9BB, /* 0x10 */ + 0x89F2, 0x89F3, 0x89F4, 0x89F5, 0xE2B9, 0xE2B7, 0x89F6, 0xB4F3, /* 0x20 */ + 0x89F7, 0xCCEC, 0xCCAB, 0xB7F2, 0x89F8, 0xD8B2, 0xD1EB, 0xBABB, /* 0x20 */ + 0x89F9, 0xCAA7, 0x89FA, 0x89FB, 0xCDB7, 0x89FC, 0x89FD, 0xD2C4, /* 0x30 */ + 0xBFE4, 0xBCD0, 0xB6E1, 0x89FE, 0xDEC5, 0x8A40, 0x8A41, 0x8A42, /* 0x30 */ + 0x8A43, 0xDEC6, 0xDBBC, 0x8A44, 0xD1D9, 0x8A45, 0x8A46, 0xC6E6, /* 0x40 */ + 0xC4CE, 0xB7EE, 0x8A47, 0xB7DC, 0x8A48, 0x8A49, 0xBFFC, 0xD7E0, /* 0x40 */ + 0x8A4A, 0xC6F5, 0x8A4B, 0x8A4C, 0xB1BC, 0xDEC8, 0xBDB1, 0xCCD7, /* 0x50 */ + 0xDECA, 0x8A4D, 0xDEC9, 0x8A4E, 0x8A4F, 0x8A50, 0x8A51, 0x8A52, /* 0x50 */ + 0xB5EC, 0x8A53, 0xC9DD, 0x8A54, 0x8A55, 0xB0C2, 0x8A56, 0x8A57, /* 0x60 */ + 0x8A58, 0x8A59, 0x8A5A, 0x8A5B, 0x8A5C, 0x8A5D, 0x8A5E, 0x8A5F, /* 0x60 */ + 0x8A60, 0x8A61, 0x8A62, 0xC5AE, 0xC5AB, 0x8A63, 0xC4CC, 0x8A64, /* 0x70 */ + 0xBCE9, 0xCBFD, 0x8A65, 0x8A66, 0x8A67, 0xBAC3, 0x8A68, 0x8A69, /* 0x70 */ + 0x8A6A, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0x8A6B, 0xD7B1, 0xB8BE, /* 0x80 */ + 0xC2E8, 0x8A6C, 0xC8D1, 0x8A6D, 0x8A6E, 0xE5FB, 0x8A6F, 0x8A70, /* 0x80 */ + 0x8A71, 0x8A72, 0xB6CA, 0xBCCB, 0x8A73, 0x8A74, 0xD1FD, 0xE6A1, /* 0x90 */ + 0x8A75, 0xC3EE, 0x8A76, 0x8A77, 0x8A78, 0x8A79, 0xE6A4, 0x8A7A, /* 0x90 */ + 0x8A7B, 0x8A7C, 0x8A7D, 0xE5FE, 0xE6A5, 0xCDD7, 0x8A7E, 0x8A80, /* 0xA0 */ + 0xB7C1, 0xE5FC, 0xE5FD, 0xE6A3, 0x8A81, 0x8A82, 0xC4DD, 0xE6A8, /* 0xA0 */ + 0x8A83, 0x8A84, 0xE6A7, 0x8A85, 0x8A86, 0x8A87, 0x8A88, 0x8A89, /* 0xB0 */ + 0x8A8A, 0xC3C3, 0x8A8B, 0xC6DE, 0x8A8C, 0x8A8D, 0xE6AA, 0x8A8E, /* 0xB0 */ + 0x8A8F, 0x8A90, 0x8A91, 0x8A92, 0x8A93, 0x8A94, 0xC4B7, 0x8A95, /* 0xC0 */ + 0x8A96, 0x8A97, 0xE6A2, 0xCABC, 0x8A98, 0x8A99, 0x8A9A, 0x8A9B, /* 0xC0 */ + 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0x8A9C, 0x8A9D, 0xE6A9, /* 0xD0 */ + 0xE6B0, 0x8A9E, 0xD2A6, 0x8A9F, 0xBDAA, 0xE6AD, 0x8AA0, 0x8AA1, /* 0xD0 */ + 0x8AA2, 0x8AA3, 0x8AA4, 0xE6AF, 0x8AA5, 0xC0D1, 0x8AA6, 0x8AA7, /* 0xE0 */ + 0xD2CC, 0x8AA8, 0x8AA9, 0x8AAA, 0xBCA7, 0x8AAB, 0x8AAC, 0x8AAD, /* 0xE0 */ + 0x8AAE, 0x8AAF, 0x8AB0, 0x8AB1, 0x8AB2, 0x8AB3, 0x8AB4, 0x8AB5, /* 0xF0 */ + 0x8AB6, 0xE6B1, 0x8AB7, 0xD2F6, 0x8AB8, 0x8AB9, 0x8ABA, 0xD7CB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8ABB, 0xCDFE, 0x8ABC, 0xCDDE, 0xC2A6, 0xE6AB, 0xE6AC, 0xBDBF, /* 0x00 */ + 0xE6AE, 0xE6B3, 0x8ABD, 0x8ABE, 0xE6B2, 0x8ABF, 0x8AC0, 0x8AC1, /* 0x00 */ + 0x8AC2, 0xE6B6, 0x8AC3, 0xE6B8, 0x8AC4, 0x8AC5, 0x8AC6, 0x8AC7, /* 0x10 */ + 0xC4EF, 0x8AC8, 0x8AC9, 0x8ACA, 0xC4C8, 0x8ACB, 0x8ACC, 0xBEEA, /* 0x10 */ + 0xC9EF, 0x8ACD, 0x8ACE, 0xE6B7, 0x8ACF, 0xB6F0, 0x8AD0, 0x8AD1, /* 0x20 */ + 0x8AD2, 0xC3E4, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD6, 0x8AD7, 0x8AD8, /* 0x20 */ + 0x8AD9, 0xD3E9, 0xE6B4, 0x8ADA, 0xE6B5, 0x8ADB, 0xC8A2, 0x8ADC, /* 0x30 */ + 0x8ADD, 0x8ADE, 0x8ADF, 0x8AE0, 0xE6BD, 0x8AE1, 0x8AE2, 0x8AE3, /* 0x30 */ + 0xE6B9, 0x8AE4, 0x8AE5, 0x8AE6, 0x8AE7, 0x8AE8, 0xC6C5, 0x8AE9, /* 0x40 */ + 0x8AEA, 0xCDF1, 0xE6BB, 0x8AEB, 0x8AEC, 0x8AED, 0x8AEE, 0x8AEF, /* 0x40 */ + 0x8AF0, 0x8AF1, 0x8AF2, 0x8AF3, 0x8AF4, 0xE6BC, 0x8AF5, 0x8AF6, /* 0x50 */ + 0x8AF7, 0x8AF8, 0xBBE9, 0x8AF9, 0x8AFA, 0x8AFB, 0x8AFC, 0x8AFD, /* 0x50 */ + 0x8AFE, 0x8B40, 0xE6BE, 0x8B41, 0x8B42, 0x8B43, 0x8B44, 0xE6BA, /* 0x60 */ + 0x8B45, 0x8B46, 0xC0B7, 0x8B47, 0x8B48, 0x8B49, 0x8B4A, 0x8B4B, /* 0x60 */ + 0x8B4C, 0x8B4D, 0x8B4E, 0x8B4F, 0xD3A4, 0xE6BF, 0xC9F4, 0xE6C3, /* 0x70 */ + 0x8B50, 0x8B51, 0xE6C4, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0xD0F6, /* 0x70 */ + 0x8B56, 0x8B57, 0x8B58, 0x8B59, 0x8B5A, 0x8B5B, 0x8B5C, 0x8B5D, /* 0x80 */ + 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, /* 0x80 */ + 0x8B66, 0x8B67, 0xC3BD, 0x8B68, 0x8B69, 0x8B6A, 0x8B6B, 0x8B6C, /* 0x90 */ + 0x8B6D, 0x8B6E, 0xC3C4, 0xE6C2, 0x8B6F, 0x8B70, 0x8B71, 0x8B72, /* 0x90 */ + 0x8B73, 0x8B74, 0x8B75, 0x8B76, 0x8B77, 0x8B78, 0x8B79, 0x8B7A, /* 0xA0 */ + 0x8B7B, 0x8B7C, 0xE6C1, 0x8B7D, 0x8B7E, 0x8B80, 0x8B81, 0x8B82, /* 0xA0 */ + 0x8B83, 0x8B84, 0xE6C7, 0xCFB1, 0x8B85, 0xEBF4, 0x8B86, 0x8B87, /* 0xB0 */ + 0xE6CA, 0x8B88, 0x8B89, 0x8B8A, 0x8B8B, 0x8B8C, 0xE6C5, 0x8B8D, /* 0xB0 */ + 0x8B8E, 0xBCDE, 0xC9A9, 0x8B8F, 0x8B90, 0x8B91, 0x8B92, 0x8B93, /* 0xC0 */ + 0x8B94, 0xBCB5, 0x8B95, 0x8B96, 0xCFD3, 0x8B97, 0x8B98, 0x8B99, /* 0xC0 */ + 0x8B9A, 0x8B9B, 0xE6C8, 0x8B9C, 0xE6C9, 0x8B9D, 0xE6CE, 0x8B9E, /* 0xD0 */ + 0xE6D0, 0x8B9F, 0x8BA0, 0x8BA1, 0xE6D1, 0x8BA2, 0x8BA3, 0x8BA4, /* 0xD0 */ + 0xE6CB, 0xB5D5, 0x8BA5, 0xE6CC, 0x8BA6, 0x8BA7, 0xE6CF, 0x8BA8, /* 0xE0 */ + 0x8BA9, 0xC4DB, 0x8BAA, 0xE6C6, 0x8BAB, 0x8BAC, 0x8BAD, 0x8BAE, /* 0xE0 */ + 0x8BAF, 0xE6CD, 0x8BB0, 0x8BB1, 0x8BB2, 0x8BB3, 0x8BB4, 0x8BB5, /* 0xF0 */ + 0x8BB6, 0x8BB7, 0x8BB8, 0x8BB9, 0x8BBA, 0x8BBB, 0x8BBC, 0x8BBD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8BBE, 0x8BBF, 0x8BC0, 0x8BC1, 0x8BC2, 0x8BC3, 0x8BC4, 0x8BC5, /* 0x00 */ + 0x8BC6, 0xE6D2, 0x8BC7, 0x8BC8, 0x8BC9, 0x8BCA, 0x8BCB, 0x8BCC, /* 0x00 */ + 0x8BCD, 0x8BCE, 0x8BCF, 0x8BD0, 0x8BD1, 0x8BD2, 0xE6D4, 0xE6D3, /* 0x10 */ + 0x8BD3, 0x8BD4, 0x8BD5, 0x8BD6, 0x8BD7, 0x8BD8, 0x8BD9, 0x8BDA, /* 0x10 */ + 0x8BDB, 0x8BDC, 0x8BDD, 0x8BDE, 0x8BDF, 0x8BE0, 0x8BE1, 0x8BE2, /* 0x20 */ + 0x8BE3, 0x8BE4, 0x8BE5, 0x8BE6, 0x8BE7, 0x8BE8, 0x8BE9, 0x8BEA, /* 0x20 */ + 0x8BEB, 0x8BEC, 0xE6D5, 0x8BED, 0xD9F8, 0x8BEE, 0x8BEF, 0xE6D6, /* 0x30 */ + 0x8BF0, 0x8BF1, 0x8BF2, 0x8BF3, 0x8BF4, 0x8BF5, 0x8BF6, 0x8BF7, /* 0x30 */ + 0xE6D7, 0x8BF8, 0x8BF9, 0x8BFA, 0x8BFB, 0x8BFC, 0x8BFD, 0x8BFE, /* 0x40 */ + 0x8C40, 0x8C41, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C46, 0x8C47, /* 0x40 */ + 0xD7D3, 0xE6DD, 0x8C48, 0xE6DE, 0xBFD7, 0xD4D0, 0x8C49, 0xD7D6, /* 0x50 */ + 0xB4E6, 0xCBEF, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0x8C4A, 0xC3CF, /* 0x50 */ + 0x8C4B, 0x8C4C, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0xD1A7, 0x8C4D, /* 0x60 */ + 0x8C4E, 0xBAA2, 0xC2CF, 0x8C4F, 0xD8AB, 0x8C50, 0x8C51, 0x8C52, /* 0x60 */ + 0xCAEB, 0xE5EE, 0x8C53, 0xE6DC, 0x8C54, 0xB7F5, 0x8C55, 0x8C56, /* 0x70 */ + 0x8C57, 0x8C58, 0xC8E6, 0x8C59, 0x8C5A, 0xC4F5, 0x8C5B, 0x8C5C, /* 0x70 */ + 0xE5B2, 0xC4FE, 0x8C5D, 0xCBFC, 0xE5B3, 0xD5AC, 0x8C5E, 0xD3EE, /* 0x80 */ + 0xCAD8, 0xB0B2, 0x8C5F, 0xCBCE, 0xCDEA, 0x8C60, 0x8C61, 0xBAEA, /* 0x80 */ + 0x8C62, 0x8C63, 0x8C64, 0xE5B5, 0x8C65, 0xE5B4, 0x8C66, 0xD7DA, /* 0x90 */ + 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0xB1A6, 0xCAB5, 0x8C67, /* 0x90 */ + 0xB3E8, 0xC9F3, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0x8C68, /* 0xA0 */ + 0x8C69, 0x8C6A, 0xCFDC, 0xB9AC, 0x8C6B, 0x8C6C, 0x8C6D, 0x8C6E, /* 0xA0 */ + 0xD4D7, 0x8C6F, 0x8C70, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0x8C71, /* 0xB0 */ + 0xE5B7, 0xC8DD, 0x8C72, 0x8C73, 0x8C74, 0xBFED, 0xB1F6, 0xCBDE, /* 0xB0 */ + 0x8C75, 0x8C76, 0xBCC5, 0x8C77, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, /* 0xC0 */ + 0x8C78, 0x8C79, 0x8C7A, 0x8C7B, 0xB8BB, 0x8C7C, 0x8C7D, 0x8C7E, /* 0xC0 */ + 0xC3C2, 0x8C80, 0xBAAE, 0xD4A2, 0x8C81, 0x8C82, 0x8C83, 0x8C84, /* 0xD0 */ + 0x8C85, 0x8C86, 0x8C87, 0x8C88, 0x8C89, 0xC7DE, 0xC4AF, 0xB2EC, /* 0xD0 */ + 0x8C8A, 0xB9D1, 0x8C8B, 0x8C8C, 0xE5BB, 0xC1C8, 0x8C8D, 0x8C8E, /* 0xE0 */ + 0xD5AF, 0x8C8F, 0x8C90, 0x8C91, 0x8C92, 0x8C93, 0xE5BC, 0x8C94, /* 0xE0 */ + 0xE5BE, 0x8C95, 0x8C96, 0x8C97, 0x8C98, 0x8C99, 0x8C9A, 0x8C9B, /* 0xF0 */ + 0xB4E7, 0xB6D4, 0xCBC2, 0xD1B0, 0xB5BC, 0x8C9C, 0x8C9D, 0xCAD9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8C9E, 0xB7E2, 0x8C9F, 0x8CA0, 0xC9E4, 0x8CA1, 0xBDAB, 0x8CA2, /* 0x00 */ + 0x8CA3, 0xCEBE, 0xD7F0, 0x8CA4, 0x8CA5, 0x8CA6, 0x8CA7, 0xD0A1, /* 0x00 */ + 0x8CA8, 0xC9D9, 0x8CA9, 0x8CAA, 0xB6FB, 0xE6D8, 0xBCE2, 0x8CAB, /* 0x10 */ + 0xB3BE, 0x8CAC, 0xC9D0, 0x8CAD, 0xE6D9, 0xB3A2, 0x8CAE, 0x8CAF, /* 0x10 */ + 0x8CB0, 0x8CB1, 0xDECC, 0x8CB2, 0xD3C8, 0xDECD, 0x8CB3, 0xD2A2, /* 0x20 */ + 0x8CB4, 0x8CB5, 0x8CB6, 0x8CB7, 0xDECE, 0x8CB8, 0x8CB9, 0x8CBA, /* 0x20 */ + 0x8CBB, 0xBECD, 0x8CBC, 0x8CBD, 0xDECF, 0x8CBE, 0x8CBF, 0x8CC0, /* 0x30 */ + 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0xBEA1, 0xCEB2, 0xC4F2, /* 0x30 */ + 0xBED6, 0xC6A8, 0xB2E3, 0x8CC1, 0x8CC2, 0xBED3, 0x8CC3, 0x8CC4, /* 0x40 */ + 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0x8CC5, 0x8CC6, 0xCABA, 0xC6C1, /* 0x40 */ + 0xE5EC, 0xD0BC, 0x8CC7, 0x8CC8, 0x8CC9, 0xD5B9, 0x8CCA, 0x8CCB, /* 0x50 */ + 0x8CCC, 0xE5ED, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0xCAF4, 0x8CD1, /* 0x50 */ + 0xCDC0, 0xC2C5, 0x8CD2, 0xE5EF, 0x8CD3, 0xC2C4, 0xE5F0, 0x8CD4, /* 0x60 */ + 0x8CD5, 0x8CD6, 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDA, 0xE5F8, 0xCDCD, /* 0x60 */ + 0x8CDB, 0xC9BD, 0x8CDC, 0x8CDD, 0x8CDE, 0x8CDF, 0x8CE0, 0x8CE1, /* 0x70 */ + 0x8CE2, 0xD2D9, 0xE1A8, 0x8CE3, 0x8CE4, 0x8CE5, 0x8CE6, 0xD3EC, /* 0x70 */ + 0x8CE7, 0xCBEA, 0xC6F1, 0x8CE8, 0x8CE9, 0x8CEA, 0x8CEB, 0x8CEC, /* 0x80 */ + 0xE1AC, 0x8CED, 0x8CEE, 0x8CEF, 0xE1A7, 0xE1A9, 0x8CF0, 0x8CF1, /* 0x80 */ + 0xE1AA, 0xE1AF, 0x8CF2, 0x8CF3, 0xB2ED, 0x8CF4, 0xE1AB, 0xB8DA, /* 0x90 */ + 0xE1AD, 0xE1AE, 0xE1B0, 0xB5BA, 0xE1B1, 0x8CF5, 0x8CF6, 0x8CF7, /* 0x90 */ + 0x8CF8, 0x8CF9, 0xE1B3, 0xE1B8, 0x8CFA, 0x8CFB, 0x8CFC, 0x8CFD, /* 0xA0 */ + 0x8CFE, 0xD1D2, 0x8D40, 0xE1B6, 0xE1B5, 0xC1EB, 0x8D41, 0x8D42, /* 0xA0 */ + 0x8D43, 0xE1B7, 0x8D44, 0xD4C0, 0x8D45, 0xE1B2, 0x8D46, 0xE1BA, /* 0xB0 */ + 0xB0B6, 0x8D47, 0x8D48, 0x8D49, 0x8D4A, 0xE1B4, 0x8D4B, 0xBFF9, /* 0xB0 */ + 0x8D4C, 0xE1B9, 0x8D4D, 0x8D4E, 0xE1BB, 0x8D4F, 0x8D50, 0x8D51, /* 0xC0 */ + 0x8D52, 0x8D53, 0x8D54, 0xE1BE, 0x8D55, 0x8D56, 0x8D57, 0x8D58, /* 0xC0 */ + 0x8D59, 0x8D5A, 0xE1BC, 0x8D5B, 0x8D5C, 0x8D5D, 0x8D5E, 0x8D5F, /* 0xD0 */ + 0x8D60, 0xD6C5, 0x8D61, 0x8D62, 0x8D63, 0x8D64, 0x8D65, 0x8D66, /* 0xD0 */ + 0x8D67, 0xCFBF, 0x8D68, 0x8D69, 0xE1BD, 0xE1BF, 0xC2CD, 0x8D6A, /* 0xE0 */ + 0xB6EB, 0x8D6B, 0xD3F8, 0x8D6C, 0x8D6D, 0xC7CD, 0x8D6E, 0x8D6F, /* 0xE0 */ + 0xB7E5, 0x8D70, 0x8D71, 0x8D72, 0x8D73, 0x8D74, 0x8D75, 0x8D76, /* 0xF0 */ + 0x8D77, 0x8D78, 0x8D79, 0xBEFE, 0x8D7A, 0x8D7B, 0x8D7C, 0x8D7D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8D7E, 0x8D80, 0xE1C0, 0xE1C1, 0x8D81, 0x8D82, 0xE1C7, 0xB3E7, /* 0x00 */ + 0x8D83, 0x8D84, 0x8D85, 0x8D86, 0x8D87, 0x8D88, 0xC6E9, 0x8D89, /* 0x00 */ + 0x8D8A, 0x8D8B, 0x8D8C, 0x8D8D, 0xB4DE, 0x8D8E, 0xD1C2, 0x8D8F, /* 0x10 */ + 0x8D90, 0x8D91, 0x8D92, 0xE1C8, 0x8D93, 0x8D94, 0xE1C6, 0x8D95, /* 0x10 */ + 0x8D96, 0x8D97, 0x8D98, 0x8D99, 0xE1C5, 0x8D9A, 0xE1C3, 0xE1C2, /* 0x20 */ + 0x8D9B, 0xB1C0, 0x8D9C, 0x8D9D, 0x8D9E, 0xD5B8, 0xE1C4, 0x8D9F, /* 0x20 */ + 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA3, 0xE1CB, 0x8DA4, 0x8DA5, 0x8DA6, /* 0x30 */ + 0x8DA7, 0x8DA8, 0x8DA9, 0x8DAA, 0x8DAB, 0xE1CC, 0xE1CA, 0x8DAC, /* 0x30 */ + 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB1, 0x8DB2, 0x8DB3, 0xEFFA, /* 0x40 */ + 0x8DB4, 0x8DB5, 0xE1D3, 0xE1D2, 0xC7B6, 0x8DB6, 0x8DB7, 0x8DB8, /* 0x40 */ + 0x8DB9, 0x8DBA, 0x8DBB, 0x8DBC, 0x8DBD, 0x8DBE, 0x8DBF, 0x8DC0, /* 0x50 */ + 0xE1C9, 0x8DC1, 0x8DC2, 0xE1CE, 0x8DC3, 0xE1D0, 0x8DC4, 0x8DC5, /* 0x50 */ + 0x8DC6, 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCB, 0x8DCC, 0x8DCD, /* 0x60 */ + 0x8DCE, 0xE1D4, 0x8DCF, 0xE1D1, 0xE1CD, 0x8DD0, 0x8DD1, 0xE1CF, /* 0x60 */ + 0x8DD2, 0x8DD3, 0x8DD4, 0x8DD5, 0xE1D5, 0x8DD6, 0x8DD7, 0x8DD8, /* 0x70 */ + 0x8DD9, 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x8DDE, 0x8DDF, 0x8DE0, /* 0x70 */ + 0x8DE1, 0x8DE2, 0xE1D6, 0x8DE3, 0x8DE4, 0x8DE5, 0x8DE6, 0x8DE7, /* 0x80 */ + 0x8DE8, 0x8DE9, 0x8DEA, 0x8DEB, 0x8DEC, 0x8DED, 0x8DEE, 0x8DEF, /* 0x80 */ + 0x8DF0, 0x8DF1, 0x8DF2, 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6, 0x8DF7, /* 0x90 */ + 0x8DF8, 0xE1D7, 0x8DF9, 0x8DFA, 0x8DFB, 0xE1D8, 0x8DFC, 0x8DFD, /* 0x90 */ + 0x8DFE, 0x8E40, 0x8E41, 0x8E42, 0x8E43, 0x8E44, 0x8E45, 0x8E46, /* 0xA0 */ + 0x8E47, 0x8E48, 0x8E49, 0x8E4A, 0x8E4B, 0x8E4C, 0x8E4D, 0x8E4E, /* 0xA0 */ + 0x8E4F, 0x8E50, 0x8E51, 0x8E52, 0x8E53, 0x8E54, 0x8E55, 0xE1DA, /* 0xB0 */ + 0x8E56, 0x8E57, 0x8E58, 0x8E59, 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, /* 0xB0 */ + 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, 0xE1DB, 0x8E63, 0x8E64, /* 0xC0 */ + 0x8E65, 0x8E66, 0x8E67, 0x8E68, 0x8E69, 0xCEA1, 0x8E6A, 0x8E6B, /* 0xC0 */ + 0x8E6C, 0x8E6D, 0x8E6E, 0x8E6F, 0x8E70, 0x8E71, 0x8E72, 0x8E73, /* 0xD0 */ + 0x8E74, 0x8E75, 0x8E76, 0xE7DD, 0x8E77, 0xB4A8, 0xD6DD, 0x8E78, /* 0xD0 */ + 0x8E79, 0xD1B2, 0xB3B2, 0x8E7A, 0x8E7B, 0xB9A4, 0xD7F3, 0xC7C9, /* 0xE0 */ + 0xBEDE, 0xB9AE, 0x8E7C, 0xCED7, 0x8E7D, 0x8E7E, 0xB2EE, 0xDBCF, /* 0xE0 */ + 0x8E80, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0x8E81, 0x8E82, 0xCFEF, /* 0xF0 */ + 0x8E83, 0x8E84, 0x8E85, 0x8E86, 0x8E87, 0xD9E3, 0xBDED, 0x8E88 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E89, 0xB1D2, 0xCAD0, 0xB2BC, 0x8E8A, 0xCBA7, 0xB7AB, 0x8E8B, /* 0x00 */ + 0xCAA6, 0x8E8C, 0x8E8D, 0x8E8E, 0xCFA3, 0x8E8F, 0x8E90, 0xE0F8, /* 0x00 */ + 0xD5CA, 0xE0FB, 0x8E91, 0x8E92, 0xE0FA, 0xC5C1, 0xCCFB, 0x8E93, /* 0x10 */ + 0xC1B1, 0xE0F9, 0xD6E3, 0xB2AF, 0xD6C4, 0xB5DB, 0x8E94, 0x8E95, /* 0x10 */ + 0x8E96, 0x8E97, 0x8E98, 0x8E99, 0x8E9A, 0x8E9B, 0xB4F8, 0xD6A1, /* 0x20 */ + 0x8E9C, 0x8E9D, 0x8E9E, 0x8E9F, 0x8EA0, 0xCFAF, 0xB0EF, 0x8EA1, /* 0x20 */ + 0x8EA2, 0xE0FC, 0x8EA3, 0x8EA4, 0x8EA5, 0x8EA6, 0x8EA7, 0xE1A1, /* 0x30 */ + 0xB3A3, 0x8EA8, 0x8EA9, 0xE0FD, 0xE0FE, 0xC3B1, 0x8EAA, 0x8EAB, /* 0x30 */ + 0x8EAC, 0x8EAD, 0xC3DD, 0x8EAE, 0xE1A2, 0xB7F9, 0x8EAF, 0x8EB0, /* 0x40 */ + 0x8EB1, 0x8EB2, 0x8EB3, 0x8EB4, 0xBBCF, 0x8EB5, 0x8EB6, 0x8EB7, /* 0x40 */ + 0x8EB8, 0x8EB9, 0x8EBA, 0x8EBB, 0xE1A3, 0xC4BB, 0x8EBC, 0x8EBD, /* 0x50 */ + 0x8EBE, 0x8EBF, 0x8EC0, 0xE1A4, 0x8EC1, 0x8EC2, 0xE1A5, 0x8EC3, /* 0x50 */ + 0x8EC4, 0xE1A6, 0xB4B1, 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, /* 0x60 */ + 0x8ECA, 0x8ECB, 0x8ECC, 0x8ECD, 0x8ECE, 0x8ECF, 0x8ED0, 0x8ED1, /* 0x60 */ + 0x8ED2, 0x8ED3, 0xB8C9, 0xC6BD, 0xC4EA, 0x8ED4, 0xB2A2, 0x8ED5, /* 0x70 */ + 0xD0D2, 0x8ED6, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0x8ED7, 0xB9E3, /* 0x70 */ + 0xE2CF, 0x8ED8, 0x8ED9, 0x8EDA, 0xD7AF, 0x8EDB, 0xC7EC, 0xB1D3, /* 0x80 */ + 0x8EDC, 0x8EDD, 0xB4B2, 0xE2D1, 0x8EDE, 0x8EDF, 0x8EE0, 0xD0F2, /* 0x80 */ + 0xC2AE, 0xE2D0, 0x8EE1, 0xBFE2, 0xD3A6, 0xB5D7, 0xE2D2, 0xB5EA, /* 0x90 */ + 0x8EE2, 0xC3ED, 0xB8FD, 0x8EE3, 0xB8AE, 0x8EE4, 0xC5D3, 0xB7CF, /* 0x90 */ + 0xE2D4, 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0xE2D3, 0xB6C8, 0xD7F9, /* 0xA0 */ + 0x8EE9, 0x8EEA, 0x8EEB, 0x8EEC, 0x8EED, 0xCDA5, 0x8EEE, 0x8EEF, /* 0xA0 */ + 0x8EF0, 0x8EF1, 0x8EF2, 0xE2D8, 0x8EF3, 0xE2D6, 0xCAFC, 0xBFB5, /* 0xB0 */ + 0xD3B9, 0xE2D5, 0x8EF4, 0x8EF5, 0x8EF6, 0x8EF7, 0xE2D7, 0x8EF8, /* 0xB0 */ + 0x8EF9, 0x8EFA, 0x8EFB, 0x8EFC, 0x8EFD, 0x8EFE, 0x8F40, 0x8F41, /* 0xC0 */ + 0x8F42, 0xC1AE, 0xC0C8, 0x8F43, 0x8F44, 0x8F45, 0x8F46, 0x8F47, /* 0xC0 */ + 0x8F48, 0xE2DB, 0xE2DA, 0xC0AA, 0x8F49, 0x8F4A, 0xC1CE, 0x8F4B, /* 0xD0 */ + 0x8F4C, 0x8F4D, 0x8F4E, 0xE2DC, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, /* 0xD0 */ + 0x8F53, 0x8F54, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, /* 0xE0 */ + 0xE2DD, 0x8F5B, 0xE2DE, 0x8F5C, 0x8F5D, 0x8F5E, 0x8F5F, 0x8F60, /* 0xE0 */ + 0x8F61, 0x8F62, 0x8F63, 0x8F64, 0xDBC8, 0x8F65, 0xD1D3, 0xCDA2, /* 0xF0 */ + 0x8F66, 0x8F67, 0xBDA8, 0x8F68, 0x8F69, 0x8F6A, 0xDEC3, 0xD8A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBFAA, 0xDBCD, 0xD2EC, 0xC6FA, 0xC5AA, 0x8F6B, 0x8F6C, 0x8F6D, /* 0x00 */ + 0xDEC4, 0x8F6E, 0xB1D7, 0xDFAE, 0x8F6F, 0x8F70, 0x8F71, 0xCABD, /* 0x00 */ + 0x8F72, 0xDFB1, 0x8F73, 0xB9AD, 0x8F74, 0xD2FD, 0x8F75, 0xB8A5, /* 0x10 */ + 0xBAEB, 0x8F76, 0x8F77, 0xB3DA, 0x8F78, 0x8F79, 0x8F7A, 0xB5DC, /* 0x10 */ + 0xD5C5, 0x8F7B, 0x8F7C, 0x8F7D, 0x8F7E, 0xC3D6, 0xCFD2, 0xBBA1, /* 0x20 */ + 0x8F80, 0xE5F3, 0xE5F2, 0x8F81, 0x8F82, 0xE5F4, 0x8F83, 0xCDE4, /* 0x20 */ + 0x8F84, 0xC8F5, 0x8F85, 0x8F86, 0x8F87, 0x8F88, 0x8F89, 0x8F8A, /* 0x30 */ + 0x8F8B, 0xB5AF, 0xC7BF, 0x8F8C, 0xE5F6, 0x8F8D, 0x8F8E, 0x8F8F, /* 0x30 */ + 0xECB0, 0x8F90, 0x8F91, 0x8F92, 0x8F93, 0x8F94, 0x8F95, 0x8F96, /* 0x40 */ + 0x8F97, 0x8F98, 0x8F99, 0x8F9A, 0x8F9B, 0x8F9C, 0x8F9D, 0x8F9E, /* 0x40 */ + 0xE5E6, 0x8F9F, 0xB9E9, 0xB5B1, 0x8FA0, 0xC2BC, 0xE5E8, 0xE5E7, /* 0x50 */ + 0xE5E9, 0x8FA1, 0x8FA2, 0x8FA3, 0x8FA4, 0xD2CD, 0x8FA5, 0x8FA6, /* 0x50 */ + 0x8FA7, 0xE1EA, 0xD0CE, 0x8FA8, 0xCDAE, 0x8FA9, 0xD1E5, 0x8FAA, /* 0x60 */ + 0x8FAB, 0xB2CA, 0xB1EB, 0x8FAC, 0xB1F2, 0xC5ED, 0x8FAD, 0x8FAE, /* 0x60 */ + 0xD5C3, 0xD3B0, 0x8FAF, 0xE1DC, 0x8FB0, 0x8FB1, 0x8FB2, 0xE1DD, /* 0x70 */ + 0x8FB3, 0xD2DB, 0x8FB4, 0xB3B9, 0xB1CB, 0x8FB5, 0x8FB6, 0x8FB7, /* 0x70 */ + 0xCDF9, 0xD5F7, 0xE1DE, 0x8FB8, 0xBEB6, 0xB4FD, 0x8FB9, 0xE1DF, /* 0x80 */ + 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xE1E1, 0x8FBA, 0x8FBB, 0x8FBC, /* 0x80 */ + 0xD0EC, 0x8FBD, 0xCDBD, 0x8FBE, 0x8FBF, 0xE1E2, 0x8FC0, 0xB5C3, /* 0x90 */ + 0xC5C7, 0xE1E3, 0x8FC1, 0x8FC2, 0xE1E4, 0x8FC3, 0x8FC4, 0x8FC5, /* 0x90 */ + 0x8FC6, 0xD3F9, 0x8FC7, 0x8FC8, 0x8FC9, 0x8FCA, 0x8FCB, 0x8FCC, /* 0xA0 */ + 0xE1E5, 0x8FCD, 0xD1AD, 0x8FCE, 0x8FCF, 0xE1E6, 0xCEA2, 0x8FD0, /* 0xA0 */ + 0x8FD1, 0x8FD2, 0x8FD3, 0x8FD4, 0x8FD5, 0xE1E7, 0x8FD6, 0xB5C2, /* 0xB0 */ + 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA, 0xE1E8, 0xBBD5, 0x8FDB, 0x8FDC, /* 0xB0 */ + 0x8FDD, 0x8FDE, 0x8FDF, 0xD0C4, 0xE2E0, 0xB1D8, 0xD2E4, 0x8FE0, /* 0xC0 */ + 0x8FE1, 0xE2E1, 0x8FE2, 0x8FE3, 0xBCC9, 0xC8CC, 0x8FE4, 0xE2E3, /* 0xC0 */ + 0xECFE, 0xECFD, 0xDFAF, 0x8FE5, 0x8FE6, 0x8FE7, 0xE2E2, 0xD6BE, /* 0xD0 */ + 0xCDFC, 0xC3A6, 0x8FE8, 0x8FE9, 0x8FEA, 0xE3C3, 0x8FEB, 0x8FEC, /* 0xD0 */ + 0xD6D2, 0xE2E7, 0x8FED, 0x8FEE, 0xE2E8, 0x8FEF, 0x8FF0, 0xD3C7, /* 0xE0 */ + 0x8FF1, 0x8FF2, 0xE2EC, 0xBFEC, 0x8FF3, 0xE2ED, 0xE2E5, 0x8FF4, /* 0xE0 */ + 0x8FF5, 0xB3C0, 0x8FF6, 0x8FF7, 0x8FF8, 0xC4EE, 0x8FF9, 0x8FFA, /* 0xF0 */ + 0xE2EE, 0x8FFB, 0x8FFC, 0xD0C3, 0x8FFD, 0xBAF6, 0xE2E9, 0xB7DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBBB3, 0xCCAC, 0xCBCB, 0xE2E4, 0xE2E6, 0xE2EA, 0xE2EB, 0x8FFE, /* 0x00 */ + 0x9040, 0x9041, 0xE2F7, 0x9042, 0x9043, 0xE2F4, 0xD4F5, 0xE2F3, /* 0x00 */ + 0x9044, 0x9045, 0xC5AD, 0x9046, 0xD5FA, 0xC5C2, 0xB2C0, 0x9047, /* 0x10 */ + 0x9048, 0xE2EF, 0x9049, 0xE2F2, 0xC1AF, 0xCBBC, 0x904A, 0x904B, /* 0x10 */ + 0xB5A1, 0xE2F9, 0x904C, 0x904D, 0x904E, 0xBCB1, 0xE2F1, 0xD0D4, /* 0x20 */ + 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0x904F, 0x9050, 0x9051, 0xC7D3, /* 0x20 */ + 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xE2F0, 0x9057, 0x9058, /* 0x30 */ + 0x9059, 0x905A, 0x905B, 0xD7DC, 0xEDA1, 0x905C, 0x905D, 0xE2F8, /* 0x30 */ + 0x905E, 0xEDA5, 0xE2FE, 0xCAD1, 0x905F, 0x9060, 0x9061, 0x9062, /* 0x40 */ + 0x9063, 0x9064, 0x9065, 0xC1B5, 0x9066, 0xBBD0, 0x9067, 0x9068, /* 0x40 */ + 0xBFD6, 0x9069, 0xBAE3, 0x906A, 0x906B, 0xCBA1, 0x906C, 0x906D, /* 0x50 */ + 0x906E, 0xEDA6, 0xEDA3, 0x906F, 0x9070, 0xEDA2, 0x9071, 0x9072, /* 0x50 */ + 0x9073, 0x9074, 0xBBD6, 0xEDA7, 0xD0F4, 0x9075, 0x9076, 0xEDA4, /* 0x60 */ + 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0x9077, 0xCFA2, /* 0x60 */ + 0xC7A1, 0x9078, 0x9079, 0xBFD2, 0x907A, 0x907B, 0xB6F1, 0x907C, /* 0x70 */ + 0xE2FA, 0xE2FB, 0xE2FD, 0xE2FC, 0xC4D5, 0xE3A2, 0x907D, 0xD3C1, /* 0x70 */ + 0x907E, 0x9080, 0x9081, 0xE3A7, 0xC7C4, 0x9082, 0x9083, 0x9084, /* 0x80 */ + 0x9085, 0xCFA4, 0x9086, 0x9087, 0xE3A9, 0xBAB7, 0x9088, 0x9089, /* 0x80 */ + 0x908A, 0x908B, 0xE3A8, 0x908C, 0xBBDA, 0x908D, 0xE3A3, 0x908E, /* 0x90 */ + 0x908F, 0x9090, 0xE3A4, 0xE3AA, 0x9091, 0xE3A6, 0x9092, 0xCEF2, /* 0x90 */ + 0xD3C6, 0x9093, 0x9094, 0xBBBC, 0x9095, 0x9096, 0xD4C3, 0x9097, /* 0xA0 */ + 0xC4FA, 0x9098, 0x9099, 0xEDA8, 0xD0FC, 0xE3A5, 0x909A, 0xC3F5, /* 0xA0 */ + 0x909B, 0xE3AD, 0xB1AF, 0x909C, 0xE3B2, 0x909D, 0x909E, 0x909F, /* 0xB0 */ + 0xBCC2, 0x90A0, 0x90A1, 0xE3AC, 0xB5BF, 0x90A2, 0x90A3, 0x90A4, /* 0xB0 */ + 0x90A5, 0x90A6, 0x90A7, 0x90A8, 0x90A9, 0xC7E9, 0xE3B0, 0x90AA, /* 0xC0 */ + 0x90AB, 0x90AC, 0xBEAA, 0xCDEF, 0x90AD, 0x90AE, 0x90AF, 0x90B0, /* 0xC0 */ + 0x90B1, 0xBBF3, 0x90B2, 0x90B3, 0x90B4, 0xCCE8, 0x90B5, 0x90B6, /* 0xD0 */ + 0xE3AF, 0x90B7, 0xE3B1, 0x90B8, 0xCFA7, 0xE3AE, 0x90B9, 0xCEA9, /* 0xD0 */ + 0xBBDD, 0x90BA, 0x90BB, 0x90BC, 0x90BD, 0x90BE, 0xB5EB, 0xBEE5, /* 0xE0 */ + 0xB2D2, 0xB3CD, 0x90BF, 0xB1B9, 0xE3AB, 0xB2D1, 0xB5AC, 0xB9DF, /* 0xE0 */ + 0xB6E8, 0x90C0, 0x90C1, 0xCFEB, 0xE3B7, 0x90C2, 0xBBCC, 0x90C3, /* 0xF0 */ + 0x90C4, 0xC8C7, 0xD0CA, 0x90C5, 0x90C6, 0x90C7, 0x90C8, 0x90C9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE3B8, 0xB3EE, 0x90CA, 0x90CB, 0x90CC, 0x90CD, 0xEDA9, 0x90CE, /* 0x00 */ + 0xD3FA, 0xD3E4, 0x90CF, 0x90D0, 0x90D1, 0xEDAA, 0xE3B9, 0xD2E2, /* 0x00 */ + 0x90D2, 0x90D3, 0x90D4, 0x90D5, 0x90D6, 0xE3B5, 0x90D7, 0x90D8, /* 0x10 */ + 0x90D9, 0x90DA, 0xD3DE, 0x90DB, 0x90DC, 0x90DD, 0x90DE, 0xB8D0, /* 0x10 */ + 0xE3B3, 0x90DF, 0x90E0, 0xE3B6, 0xB7DF, 0x90E1, 0xE3B4, 0xC0A2, /* 0x20 */ + 0x90E2, 0x90E3, 0x90E4, 0xE3BA, 0x90E5, 0x90E6, 0x90E7, 0x90E8, /* 0x20 */ + 0x90E9, 0x90EA, 0x90EB, 0x90EC, 0x90ED, 0x90EE, 0x90EF, 0x90F0, /* 0x30 */ + 0x90F1, 0x90F2, 0x90F3, 0x90F4, 0x90F5, 0x90F6, 0x90F7, 0xD4B8, /* 0x30 */ + 0x90F8, 0x90F9, 0x90FA, 0x90FB, 0x90FC, 0x90FD, 0x90FE, 0x9140, /* 0x40 */ + 0xB4C8, 0x9141, 0xE3BB, 0x9142, 0xBBC5, 0x9143, 0xC9F7, 0x9144, /* 0x40 */ + 0x9145, 0xC9E5, 0x9146, 0x9147, 0x9148, 0xC4BD, 0x9149, 0x914A, /* 0x50 */ + 0x914B, 0x914C, 0x914D, 0x914E, 0x914F, 0xEDAB, 0x9150, 0x9151, /* 0x50 */ + 0x9152, 0x9153, 0xC2FD, 0x9154, 0x9155, 0x9156, 0x9157, 0xBBDB, /* 0x60 */ + 0xBFAE, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, 0x915E, /* 0x60 */ + 0xCEBF, 0x915F, 0x9160, 0x9161, 0x9162, 0xE3BC, 0x9163, 0xBFB6, /* 0x70 */ + 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, /* 0x70 */ + 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, 0x9171, 0x9172, 0x9173, /* 0x80 */ + 0x9174, 0x9175, 0x9176, 0xB1EF, 0x9177, 0x9178, 0xD4F7, 0x9179, /* 0x80 */ + 0x917A, 0x917B, 0x917C, 0x917D, 0xE3BE, 0x917E, 0x9180, 0x9181, /* 0x90 */ + 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xEDAD, 0x9187, 0x9188, /* 0x90 */ + 0x9189, 0x918A, 0x918B, 0x918C, 0x918D, 0x918E, 0x918F, 0xE3BF, /* 0xA0 */ + 0xBAA9, 0xEDAC, 0x9190, 0x9191, 0xE3BD, 0x9192, 0x9193, 0x9194, /* 0xA0 */ + 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0xE3C0, /* 0xB0 */ + 0x919C, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1, 0xBAB6, 0x91A2, /* 0xB0 */ + 0x91A3, 0x91A4, 0xB6AE, 0x91A5, 0x91A6, 0x91A7, 0x91A8, 0x91A9, /* 0xC0 */ + 0xD0B8, 0x91AA, 0xB0C3, 0xEDAE, 0x91AB, 0x91AC, 0x91AD, 0x91AE, /* 0xC0 */ + 0x91AF, 0xEDAF, 0xC0C1, 0x91B0, 0xE3C1, 0x91B1, 0x91B2, 0x91B3, /* 0xD0 */ + 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BA, 0x91BB, /* 0xD0 */ + 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0xC5B3, 0x91C2, /* 0xE0 */ + 0x91C3, 0x91C4, 0x91C5, 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, /* 0xE0 */ + 0x91CB, 0x91CC, 0x91CD, 0x91CE, 0x91CF, 0xE3C2, 0x91D0, 0x91D1, /* 0xF0 */ + 0x91D2, 0x91D3, 0x91D4, 0x91D5, 0x91D6, 0x91D7, 0x91D8, 0xDCB2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, 0x91DE, 0xEDB0, 0x91DF, /* 0x00 */ + 0xB8EA, 0x91E0, 0xCEEC, 0xEAA7, 0xD0E7, 0xCAF9, 0xC8D6, 0xCFB7, /* 0x00 */ + 0xB3C9, 0xCED2, 0xBDE4, 0x91E1, 0x91E2, 0xE3DE, 0xBBF2, 0xEAA8, /* 0x10 */ + 0xD5BD, 0x91E3, 0xC6DD, 0xEAA9, 0x91E4, 0x91E5, 0x91E6, 0xEAAA, /* 0x10 */ + 0x91E7, 0xEAAC, 0xEAAB, 0x91E8, 0xEAAE, 0xEAAD, 0x91E9, 0x91EA, /* 0x20 */ + 0x91EB, 0x91EC, 0xBDD8, 0x91ED, 0xEAAF, 0x91EE, 0xC2BE, 0x91EF, /* 0x20 */ + 0x91F0, 0x91F1, 0x91F2, 0xB4C1, 0xB4F7, 0x91F3, 0x91F4, 0xBBA7, /* 0x30 */ + 0x91F5, 0x91F6, 0x91F7, 0x91F8, 0x91F9, 0xECE6, 0xECE5, 0xB7BF, /* 0x30 */ + 0xCBF9, 0xB1E2, 0x91FA, 0xECE7, 0x91FB, 0x91FC, 0x91FD, 0xC9C8, /* 0x40 */ + 0xECE8, 0xECE9, 0x91FE, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0x9240, /* 0x40 */ + 0x9241, 0xC6CB, 0xB0C7, 0xB4F2, 0xC8D3, 0x9242, 0x9243, 0x9244, /* 0x50 */ + 0xCDD0, 0x9245, 0x9246, 0xBFB8, 0x9247, 0x9248, 0x9249, 0x924A, /* 0x50 */ + 0x924B, 0x924C, 0x924D, 0xBFDB, 0x924E, 0x924F, 0xC7A4, 0xD6B4, /* 0x60 */ + 0x9250, 0xC0A9, 0xDED1, 0xC9A8, 0xD1EF, 0xC5A4, 0xB0E7, 0xB3B6, /* 0x60 */ + 0xC8C5, 0x9251, 0x9252, 0xB0E2, 0x9253, 0x9254, 0xB7F6, 0x9255, /* 0x70 */ + 0x9256, 0xC5FA, 0x9257, 0x9258, 0xB6F3, 0x9259, 0xD5D2, 0xB3D0, /* 0x70 */ + 0xBCBC, 0x925A, 0x925B, 0x925C, 0xB3AD, 0x925D, 0x925E, 0x925F, /* 0x80 */ + 0x9260, 0xBEF1, 0xB0D1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /* 0x80 */ + 0x9266, 0xD2D6, 0xCAE3, 0xD7A5, 0x9267, 0xCDB6, 0xB6B6, 0xBFB9, /* 0x90 */ + 0xD5DB, 0x9268, 0xB8A7, 0xC5D7, 0x9269, 0x926A, 0x926B, 0xDED2, /* 0x90 */ + 0xBFD9, 0xC2D5, 0xC7C0, 0x926C, 0xBBA4, 0xB1A8, 0x926D, 0x926E, /* 0xA0 */ + 0xC5EA, 0x926F, 0x9270, 0xC5FB, 0xCCA7, 0x9271, 0x9272, 0x9273, /* 0xA0 */ + 0x9274, 0xB1A7, 0x9275, 0x9276, 0x9277, 0xB5D6, 0x9278, 0x9279, /* 0xB0 */ + 0x927A, 0xC4A8, 0x927B, 0xDED3, 0xD1BA, 0xB3E9, 0x927C, 0xC3F2, /* 0xB0 */ + 0x927D, 0x927E, 0xB7F7, 0x9280, 0xD6F4, 0xB5A3, 0xB2F0, 0xC4B4, /* 0xC0 */ + 0xC4E9, 0xC0AD, 0xDED4, 0x9281, 0xB0E8, 0xC5C4, 0xC1E0, 0x9282, /* 0xC0 */ + 0xB9D5, 0x9283, 0xBEDC, 0xCDD8, 0xB0CE, 0x9284, 0xCDCF, 0xDED6, /* 0xD0 */ + 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0x9285, 0x9286, 0xC4E2, /* 0xD0 */ + 0x9287, 0x9288, 0xC2A3, 0xBCF0, 0x9289, 0xD3B5, 0xC0B9, 0xC5A1, /* 0xE0 */ + 0xB2A6, 0xD4F1, 0x928A, 0x928B, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, /* 0xE0 */ + 0x928C, 0xB9B0, 0x928D, 0xC8AD, 0xCBA9, 0x928E, 0xDED9, 0xBFBD, /* 0xF0 */ + 0x928F, 0x9290, 0x9291, 0x9292, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9293, 0xB3D6, 0xB9D2, 0x9294, 0x9295, 0x9296, 0x9297, 0xD6B8, /* 0x00 */ + 0xEAFC, 0xB0B4, 0x9298, 0x9299, 0x929A, 0x929B, 0xBFE6, 0x929C, /* 0x00 */ + 0x929D, 0xCCF4, 0x929E, 0x929F, 0x92A0, 0x92A1, 0xCDDA, 0x92A2, /* 0x10 */ + 0x92A3, 0x92A4, 0xD6BF, 0xC2CE, 0x92A5, 0xCECE, 0xCCA2, 0xD0AE, /* 0x10 */ + 0xC4D3, 0xB5B2, 0xDED8, 0xD5F5, 0xBCB7, 0xBBD3, 0x92A6, 0x92A7, /* 0x20 */ + 0xB0A4, 0x92A8, 0xC5B2, 0xB4EC, 0x92A9, 0x92AA, 0x92AB, 0xD5F1, /* 0x20 */ + 0x92AC, 0x92AD, 0xEAFD, 0x92AE, 0x92AF, 0x92B0, 0x92B1, 0x92B2, /* 0x30 */ + 0x92B3, 0xDEDA, 0xCDA6, 0x92B4, 0x92B5, 0xCDEC, 0x92B6, 0x92B7, /* 0x30 */ + 0x92B8, 0x92B9, 0xCEE6, 0xDEDC, 0x92BA, 0xCDB1, 0xC0A6, 0x92BB, /* 0x40 */ + 0x92BC, 0xD7BD, 0x92BD, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, /* 0x40 */ + 0xBEE8, 0x92BE, 0x92BF, 0x92C0, 0x92C1, 0xB2B6, 0x92C2, 0x92C3, /* 0x50 */ + 0x92C4, 0x92C5, 0x92C6, 0x92C7, 0x92C8, 0x92C9, 0xC0CC, 0xCBF0, /* 0x50 */ + 0x92CA, 0xBCF1, 0xBBBB, 0xB5B7, 0x92CB, 0x92CC, 0x92CD, 0xC5F5, /* 0x60 */ + 0x92CE, 0xDEE6, 0x92CF, 0x92D0, 0x92D1, 0xDEE3, 0xBEDD, 0x92D2, /* 0x60 */ + 0x92D3, 0xDEDF, 0x92D4, 0x92D5, 0x92D6, 0x92D7, 0xB4B7, 0xBDDD, /* 0x70 */ + 0x92D8, 0x92D9, 0xDEE0, 0xC4ED, 0x92DA, 0x92DB, 0x92DC, 0x92DD, /* 0x70 */ + 0xCFC6, 0x92DE, 0xB5E0, 0x92DF, 0x92E0, 0x92E1, 0x92E2, 0xB6DE, /* 0x80 */ + 0xCADA, 0xB5F4, 0xDEE5, 0x92E3, 0xD5C6, 0x92E4, 0xDEE1, 0xCCCD, /* 0x80 */ + 0xC6FE, 0x92E5, 0xC5C5, 0x92E6, 0x92E7, 0x92E8, 0xD2B4, 0x92E9, /* 0x90 */ + 0xBEF2, 0x92EA, 0x92EB, 0x92EC, 0x92ED, 0x92EE, 0x92EF, 0x92F0, /* 0x90 */ + 0xC2D3, 0x92F1, 0xCCBD, 0xB3B8, 0x92F2, 0xBDD3, 0x92F3, 0xBFD8, /* 0xA0 */ + 0xCDC6, 0xD1DA, 0xB4EB, 0x92F4, 0xDEE4, 0xDEDD, 0xDEE7, 0x92F5, /* 0xA0 */ + 0xEAFE, 0x92F6, 0x92F7, 0xC2B0, 0xDEE2, 0x92F8, 0x92F9, 0xD6C0, /* 0xB0 */ + 0xB5A7, 0x92FA, 0xB2F4, 0x92FB, 0xDEE8, 0x92FC, 0xDEF2, 0x92FD, /* 0xB0 */ + 0x92FE, 0x9340, 0x9341, 0x9342, 0xDEED, 0x9343, 0xDEF1, 0x9344, /* 0xC0 */ + 0x9345, 0xC8E0, 0x9346, 0x9347, 0x9348, 0xD7E1, 0xDEEF, 0xC3E8, /* 0xC0 */ + 0xCCE1, 0x9349, 0xB2E5, 0x934A, 0x934B, 0x934C, 0xD2BE, 0x934D, /* 0xD0 */ + 0x934E, 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, 0xDEEE, 0x9354, /* 0xD0 */ + 0xDEEB, 0xCED5, 0x9355, 0xB4A7, 0x9356, 0x9357, 0x9358, 0x9359, /* 0xE0 */ + 0x935A, 0xBFAB, 0xBEBE, 0x935B, 0x935C, 0xBDD2, 0x935D, 0x935E, /* 0xE0 */ + 0x935F, 0x9360, 0xDEE9, 0x9361, 0xD4AE, 0x9362, 0xDEDE, 0x9363, /* 0xF0 */ + 0xDEEA, 0x9364, 0x9365, 0x9366, 0x9367, 0xC0BF, 0x9368, 0xDEEC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB2F3, 0xB8E9, 0xC2A7, 0x9369, 0x936A, 0xBDC1, 0x936B, 0x936C, /* 0x00 */ + 0x936D, 0x936E, 0x936F, 0xDEF5, 0xDEF8, 0x9370, 0x9371, 0xB2AB, /* 0x00 */ + 0xB4A4, 0x9372, 0x9373, 0xB4EA, 0xC9A6, 0x9374, 0x9375, 0x9376, /* 0x10 */ + 0x9377, 0x9378, 0x9379, 0xDEF6, 0xCBD1, 0x937A, 0xB8E3, 0x937B, /* 0x10 */ + 0xDEF7, 0xDEFA, 0x937C, 0x937D, 0x937E, 0x9380, 0xDEF9, 0x9381, /* 0x20 */ + 0x9382, 0x9383, 0xCCC2, 0x9384, 0xB0E1, 0xB4EE, 0x9385, 0x9386, /* 0x20 */ + 0x9387, 0x9388, 0x9389, 0x938A, 0xE5BA, 0x938B, 0x938C, 0x938D, /* 0x30 */ + 0x938E, 0x938F, 0xD0AF, 0x9390, 0x9391, 0xB2EB, 0x9392, 0xEBA1, /* 0x30 */ + 0x9393, 0xDEF4, 0x9394, 0x9395, 0xC9E3, 0xDEF3, 0xB0DA, 0xD2A1, /* 0x40 */ + 0xB1F7, 0x9396, 0xCCAF, 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, /* 0x40 */ + 0x939C, 0x939D, 0xDEF0, 0x939E, 0xCBA4, 0x939F, 0x93A0, 0x93A1, /* 0x50 */ + 0xD5AA, 0x93A2, 0x93A3, 0x93A4, 0x93A5, 0x93A6, 0xDEFB, 0x93A7, /* 0x50 */ + 0x93A8, 0x93A9, 0x93AA, 0x93AB, 0x93AC, 0x93AD, 0x93AE, 0xB4DD, /* 0x60 */ + 0x93AF, 0xC4A6, 0x93B0, 0x93B1, 0x93B2, 0xDEFD, 0x93B3, 0x93B4, /* 0x60 */ + 0x93B5, 0x93B6, 0x93B7, 0x93B8, 0x93B9, 0x93BA, 0x93BB, 0x93BC, /* 0x70 */ + 0xC3FE, 0xC4A1, 0xDFA1, 0x93BD, 0x93BE, 0x93BF, 0x93C0, 0x93C1, /* 0x70 */ + 0x93C2, 0x93C3, 0xC1CC, 0x93C4, 0xDEFC, 0xBEEF, 0x93C5, 0xC6B2, /* 0x80 */ + 0x93C6, 0x93C7, 0x93C8, 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0x93CD, /* 0x80 */ + 0x93CE, 0xB3C5, 0xC8F6, 0x93CF, 0x93D0, 0xCBBA, 0xDEFE, 0x93D1, /* 0x90 */ + 0x93D2, 0xDFA4, 0x93D3, 0x93D4, 0x93D5, 0x93D6, 0xD7B2, 0x93D7, /* 0x90 */ + 0x93D8, 0x93D9, 0x93DA, 0x93DB, 0xB3B7, 0x93DC, 0x93DD, 0x93DE, /* 0xA0 */ + 0x93DF, 0xC1C3, 0x93E0, 0x93E1, 0xC7CB, 0xB2A5, 0xB4E9, 0x93E2, /* 0xA0 */ + 0xD7AB, 0x93E3, 0x93E4, 0x93E5, 0x93E6, 0xC4EC, 0x93E7, 0xDFA2, /* 0xB0 */ + 0xDFA3, 0x93E8, 0xDFA5, 0x93E9, 0xBAB3, 0x93EA, 0x93EB, 0x93EC, /* 0xB0 */ + 0xDFA6, 0x93ED, 0xC0DE, 0x93EE, 0x93EF, 0xC9C3, 0x93F0, 0x93F1, /* 0xC0 */ + 0x93F2, 0x93F3, 0x93F4, 0x93F5, 0x93F6, 0xB2D9, 0xC7E6, 0x93F7, /* 0xC0 */ + 0xDFA7, 0x93F8, 0xC7DC, 0x93F9, 0x93FA, 0x93FB, 0x93FC, 0xDFA8, /* 0xD0 */ + 0xEBA2, 0x93FD, 0x93FE, 0x9440, 0x9441, 0x9442, 0xCBD3, 0x9443, /* 0xD0 */ + 0x9444, 0x9445, 0xDFAA, 0x9446, 0xDFA9, 0x9447, 0xB2C1, 0x9448, /* 0xE0 */ + 0x9449, 0x944A, 0x944B, 0x944C, 0x944D, 0x944E, 0x944F, 0x9450, /* 0xE0 */ + 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, /* 0xF0 */ + 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E, 0x945F, 0x9460 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC5CA, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /* 0x00 */ + 0x9468, 0xDFAB, 0x9469, 0x946A, 0x946B, 0x946C, 0x946D, 0x946E, /* 0x00 */ + 0x946F, 0x9470, 0xD4DC, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, /* 0x10 */ + 0xC8C1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947A, 0x947B, 0x947C, /* 0x10 */ + 0x947D, 0x947E, 0x9480, 0x9481, 0x9482, 0xDFAC, 0x9483, 0x9484, /* 0x20 */ + 0x9485, 0x9486, 0x9487, 0xBEF0, 0x9488, 0x9489, 0xDFAD, 0xD6A7, /* 0x20 */ + 0x948A, 0x948B, 0x948C, 0x948D, 0xEAB7, 0xEBB6, 0xCAD5, 0x948E, /* 0x30 */ + 0xD8FC, 0xB8C4, 0x948F, 0xB9A5, 0x9490, 0x9491, 0xB7C5, 0xD5FE, /* 0x30 */ + 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xB9CA, 0x9497, 0x9498, /* 0x40 */ + 0xD0A7, 0xF4CD, 0x9499, 0x949A, 0xB5D0, 0x949B, 0x949C, 0xC3F4, /* 0x40 */ + 0x949D, 0xBEC8, 0x949E, 0x949F, 0x94A0, 0xEBB7, 0xB0BD, 0x94A1, /* 0x50 */ + 0x94A2, 0xBDCC, 0x94A3, 0xC1B2, 0x94A4, 0xB1D6, 0xB3A8, 0x94A5, /* 0x50 */ + 0x94A6, 0x94A7, 0xB8D2, 0xC9A2, 0x94A8, 0x94A9, 0xB6D8, 0x94AA, /* 0x60 */ + 0x94AB, 0x94AC, 0x94AD, 0xEBB8, 0xBEB4, 0x94AE, 0x94AF, 0x94B0, /* 0x60 */ + 0xCAFD, 0x94B1, 0xC7C3, 0x94B2, 0xD5FB, 0x94B3, 0x94B4, 0xB7F3, /* 0x70 */ + 0x94B5, 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, /* 0x70 */ + 0x94BD, 0x94BE, 0x94BF, 0x94C0, 0x94C1, 0x94C2, 0x94C3, 0xCEC4, /* 0x80 */ + 0x94C4, 0x94C5, 0x94C6, 0xD5AB, 0xB1F3, 0x94C7, 0x94C8, 0x94C9, /* 0x80 */ + 0xECB3, 0xB0DF, 0x94CA, 0xECB5, 0x94CB, 0x94CC, 0x94CD, 0xB6B7, /* 0x90 */ + 0x94CE, 0xC1CF, 0x94CF, 0xF5FA, 0xD0B1, 0x94D0, 0x94D1, 0xD5E5, /* 0x90 */ + 0x94D2, 0xCED3, 0x94D3, 0x94D4, 0xBDEF, 0xB3E2, 0x94D5, 0xB8AB, /* 0xA0 */ + 0x94D6, 0xD5B6, 0x94D7, 0xEDBD, 0x94D8, 0xB6CF, 0x94D9, 0xCBB9, /* 0xA0 */ + 0xD0C2, 0x94DA, 0x94DB, 0x94DC, 0x94DD, 0x94DE, 0x94DF, 0x94E0, /* 0xB0 */ + 0x94E1, 0xB7BD, 0x94E2, 0x94E3, 0xECB6, 0xCAA9, 0x94E4, 0x94E5, /* 0xB0 */ + 0x94E6, 0xC5D4, 0x94E7, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0x94E8, /* 0xC0 */ + 0x94E9, 0x94EA, 0x94EB, 0xD0FD, 0xECBA, 0x94EC, 0xECBB, 0xD7E5, /* 0xC0 */ + 0x94ED, 0x94EE, 0xECBC, 0x94EF, 0x94F0, 0x94F1, 0xECBD, 0xC6EC, /* 0xD0 */ + 0x94F2, 0x94F3, 0x94F4, 0x94F5, 0x94F6, 0x94F7, 0x94F8, 0x94F9, /* 0xD0 */ + 0xCEDE, 0x94FA, 0xBCC8, 0x94FB, 0x94FC, 0xC8D5, 0xB5A9, 0xBEC9, /* 0xE0 */ + 0xD6BC, 0xD4E7, 0x94FD, 0x94FE, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, /* 0xE0 */ + 0xEABA, 0xBAB5, 0x9540, 0x9541, 0x9542, 0x9543, 0xCAB1, 0xBFF5, /* 0xF0 */ + 0x9544, 0x9545, 0xCDFA, 0x9546, 0x9547, 0x9548, 0x9549, 0x954A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEAC0, 0x954B, 0xB0BA, 0xEABE, 0x954C, 0x954D, 0xC0A5, 0x954E, /* 0x00 */ + 0x954F, 0x9550, 0xEABB, 0x9551, 0xB2FD, 0x9552, 0xC3F7, 0xBBE8, /* 0x00 */ + 0x9553, 0x9554, 0x9555, 0xD2D7, 0xCEF4, 0xEABF, 0x9556, 0x9557, /* 0x10 */ + 0x9558, 0xEABC, 0x9559, 0x955A, 0x955B, 0xEAC3, 0x955C, 0xD0C7, /* 0x10 */ + 0xD3B3, 0x955D, 0x955E, 0x955F, 0x9560, 0xB4BA, 0x9561, 0xC3C1, /* 0x20 */ + 0xD7F2, 0x9562, 0x9563, 0x9564, 0x9565, 0xD5D1, 0x9566, 0xCAC7, /* 0x20 */ + 0x9567, 0xEAC5, 0x9568, 0x9569, 0xEAC4, 0xEAC7, 0xEAC6, 0x956A, /* 0x30 */ + 0x956B, 0x956C, 0x956D, 0x956E, 0xD6E7, 0x956F, 0xCFD4, 0x9570, /* 0x30 */ + 0x9571, 0xEACB, 0x9572, 0xBBCE, 0x9573, 0x9574, 0x9575, 0x9576, /* 0x40 */ + 0x9577, 0x9578, 0x9579, 0xBDFA, 0xC9CE, 0x957A, 0x957B, 0xEACC, /* 0x40 */ + 0x957C, 0x957D, 0xC9B9, 0xCFFE, 0xEACA, 0xD4CE, 0xEACD, 0xEACF, /* 0x50 */ + 0x957E, 0x9580, 0xCDED, 0x9581, 0x9582, 0x9583, 0x9584, 0xEAC9, /* 0x50 */ + 0x9585, 0xEACE, 0x9586, 0x9587, 0xCEEE, 0x9588, 0xBBDE, 0x9589, /* 0x60 */ + 0xB3BF, 0x958A, 0x958B, 0x958C, 0x958D, 0x958E, 0xC6D5, 0xBEB0, /* 0x60 */ + 0xCEFA, 0x958F, 0x9590, 0x9591, 0xC7E7, 0x9592, 0xBEA7, 0xEAD0, /* 0x70 */ + 0x9593, 0x9594, 0xD6C7, 0x9595, 0x9596, 0x9597, 0xC1C0, 0x9598, /* 0x70 */ + 0x9599, 0x959A, 0xD4DD, 0x959B, 0xEAD1, 0x959C, 0x959D, 0xCFBE, /* 0x80 */ + 0x959E, 0x959F, 0x95A0, 0x95A1, 0xEAD2, 0x95A2, 0x95A3, 0x95A4, /* 0x80 */ + 0x95A5, 0xCAEE, 0x95A6, 0x95A7, 0x95A8, 0x95A9, 0xC5AF, 0xB0B5, /* 0x90 */ + 0x95AA, 0x95AB, 0x95AC, 0x95AD, 0x95AE, 0xEAD4, 0x95AF, 0x95B0, /* 0x90 */ + 0x95B1, 0x95B2, 0x95B3, 0x95B4, 0x95B5, 0x95B6, 0x95B7, 0xEAD3, /* 0xA0 */ + 0xF4DF, 0x95B8, 0x95B9, 0x95BA, 0x95BB, 0x95BC, 0xC4BA, 0x95BD, /* 0xA0 */ + 0x95BE, 0x95BF, 0x95C0, 0x95C1, 0xB1A9, 0x95C2, 0x95C3, 0x95C4, /* 0xB0 */ + 0x95C5, 0xE5DF, 0x95C6, 0x95C7, 0x95C8, 0x95C9, 0xEAD5, 0x95CA, /* 0xB0 */ + 0x95CB, 0x95CC, 0x95CD, 0x95CE, 0x95CF, 0x95D0, 0x95D1, 0x95D2, /* 0xC0 */ + 0x95D3, 0x95D4, 0x95D5, 0x95D6, 0x95D7, 0x95D8, 0x95D9, 0x95DA, /* 0xC0 */ + 0x95DB, 0x95DC, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E1, 0x95E2, /* 0xD0 */ + 0x95E3, 0xCAEF, 0x95E4, 0xEAD6, 0xEAD7, 0xC6D8, 0x95E5, 0x95E6, /* 0xD0 */ + 0x95E7, 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0xEAD8, 0x95ED, /* 0xE0 */ + 0x95EE, 0xEAD9, 0x95EF, 0x95F0, 0x95F1, 0x95F2, 0x95F3, 0x95F4, /* 0xE0 */ + 0xD4BB, 0x95F5, 0xC7FA, 0xD2B7, 0xB8FC, 0x95F6, 0x95F7, 0xEAC2, /* 0xF0 */ + 0x95F8, 0xB2DC, 0x95F9, 0x95FA, 0xC2FC, 0x95FB, 0xD4F8, 0xCCE6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7EE, 0x95FC, 0x95FD, 0x95FE, 0x9640, 0x9641, 0x9642, 0x9643, /* 0x00 */ + 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0x9644, 0xB7FE, 0x9645, 0x9646, /* 0x00 */ + 0xEBD4, 0x9647, 0x9648, 0x9649, 0xCBB7, 0xEBDE, 0x964A, 0xC0CA, /* 0x10 */ + 0x964B, 0x964C, 0x964D, 0xCDFB, 0x964E, 0xB3AF, 0x964F, 0xC6DA, /* 0x10 */ + 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xEBFC, 0x9656, /* 0x20 */ + 0xC4BE, 0x9657, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0x9658, 0xCAF5, /* 0x20 */ + 0x9659, 0xD6EC, 0x965A, 0x965B, 0xC6D3, 0xB6E4, 0x965C, 0x965D, /* 0x30 */ + 0x965E, 0x965F, 0xBBFA, 0x9660, 0x9661, 0xD0E0, 0x9662, 0x9663, /* 0x30 */ + 0xC9B1, 0x9664, 0xD4D3, 0xC8A8, 0x9665, 0x9666, 0xB8CB, 0x9667, /* 0x40 */ + 0xE8BE, 0xC9BC, 0x9668, 0x9669, 0xE8BB, 0x966A, 0xC0EE, 0xD0D3, /* 0x40 */ + 0xB2C4, 0xB4E5, 0x966B, 0xE8BC, 0x966C, 0x966D, 0xD5C8, 0x966E, /* 0x50 */ + 0x966F, 0x9670, 0x9671, 0x9672, 0xB6C5, 0x9673, 0xE8BD, 0xCAF8, /* 0x50 */ + 0xB8DC, 0xCCF5, 0x9674, 0x9675, 0x9676, 0xC0B4, 0x9677, 0x9678, /* 0x60 */ + 0xD1EE, 0xE8BF, 0xE8C2, 0x9679, 0x967A, 0xBABC, 0x967B, 0xB1AD, /* 0x60 */ + 0xBDDC, 0x967C, 0xEABD, 0xE8C3, 0x967D, 0xE8C6, 0x967E, 0xE8CB, /* 0x70 */ + 0x9680, 0x9681, 0x9682, 0x9683, 0xE8CC, 0x9684, 0xCBC9, 0xB0E5, /* 0x70 */ + 0x9685, 0xBCAB, 0x9686, 0x9687, 0xB9B9, 0x9688, 0x9689, 0xE8C1, /* 0x80 */ + 0x968A, 0xCDF7, 0x968B, 0xE8CA, 0x968C, 0x968D, 0x968E, 0x968F, /* 0x80 */ + 0xCEF6, 0x9690, 0x9691, 0x9692, 0x9693, 0xD5ED, 0x9694, 0xC1D6, /* 0x90 */ + 0xE8C4, 0x9695, 0xC3B6, 0x9696, 0xB9FB, 0xD6A6, 0xE8C8, 0x9697, /* 0x90 */ + 0x9698, 0x9699, 0xCAE0, 0xD4E6, 0x969A, 0xE8C0, 0x969B, 0xE8C5, /* 0xA0 */ + 0xE8C7, 0x969C, 0xC7B9, 0xB7E3, 0x969D, 0xE8C9, 0x969E, 0xBFDD, /* 0xA0 */ + 0xE8D2, 0x969F, 0x96A0, 0xE8D7, 0x96A1, 0xE8D5, 0xBCDC, 0xBCCF, /* 0xB0 */ + 0xE8DB, 0x96A2, 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A7, 0x96A8, /* 0xB0 */ + 0x96A9, 0xE8DE, 0x96AA, 0xE8DA, 0xB1FA, 0x96AB, 0x96AC, 0x96AD, /* 0xC0 */ + 0x96AE, 0x96AF, 0x96B0, 0x96B1, 0x96B2, 0x96B3, 0x96B4, 0xB0D8, /* 0xC0 */ + 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0x96B5, 0x96B6, 0x96B7, /* 0xD0 */ + 0xE8CF, 0xE8D4, 0xE8D6, 0x96B8, 0xB9F1, 0xE8D8, 0xD7F5, 0x96B9, /* 0xD0 */ + 0xC4FB, 0x96BA, 0xE8DC, 0x96BB, 0x96BC, 0xB2E9, 0x96BD, 0x96BE, /* 0xE0 */ + 0x96BF, 0xE8D1, 0x96C0, 0x96C1, 0xBCED, 0x96C2, 0x96C3, 0xBFC2, /* 0xE0 */ + 0xE8CD, 0xD6F9, 0x96C4, 0xC1F8, 0xB2F1, 0x96C5, 0x96C6, 0x96C7, /* 0xF0 */ + 0x96C8, 0x96C9, 0x96CA, 0x96CB, 0x96CC, 0xE8DF, 0x96CD, 0xCAC1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE8D9, 0x96CE, 0x96CF, 0x96D0, 0x96D1, 0xD5A4, 0x96D2, 0xB1EA, /* 0x00 */ + 0xD5BB, 0xE8CE, 0xE8D0, 0xB6B0, 0xE8D3, 0x96D3, 0xE8DD, 0xC0B8, /* 0x00 */ + 0x96D4, 0xCAF7, 0x96D5, 0xCBA8, 0x96D6, 0x96D7, 0xC6DC, 0xC0F5, /* 0x10 */ + 0x96D8, 0x96D9, 0x96DA, 0x96DB, 0x96DC, 0xE8E9, 0x96DD, 0x96DE, /* 0x10 */ + 0x96DF, 0xD0A3, 0x96E0, 0x96E1, 0x96E2, 0x96E3, 0x96E4, 0x96E5, /* 0x20 */ + 0x96E6, 0xE8F2, 0xD6EA, 0x96E7, 0x96E8, 0x96E9, 0x96EA, 0x96EB, /* 0x20 */ + 0x96EC, 0x96ED, 0xE8E0, 0xE8E1, 0x96EE, 0x96EF, 0x96F0, 0xD1F9, /* 0x30 */ + 0xBACB, 0xB8F9, 0x96F1, 0x96F2, 0xB8F1, 0xD4D4, 0xE8EF, 0x96F3, /* 0x30 */ + 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0x96F4, /* 0x40 */ + 0xB0B8, 0xE8F1, 0xE8F0, 0x96F5, 0xD7C0, 0x96F6, 0xE8E4, 0x96F7, /* 0x40 */ + 0xCDA9, 0xC9A3, 0x96F8, 0xBBB8, 0xBDDB, 0xE8EA, 0x96F9, 0x96FA, /* 0x50 */ + 0x96FB, 0x96FC, 0x96FD, 0x96FE, 0x9740, 0x9741, 0x9742, 0x9743, /* 0x50 */ + 0xE8E2, 0xE8E3, 0xE8E5, 0xB5B5, 0xE8E7, 0xC7C5, 0xE8EB, 0xE8ED, /* 0x60 */ + 0xBDB0, 0xD7AE, 0x9744, 0xE8F8, 0x9745, 0x9746, 0x9747, 0x9748, /* 0x60 */ + 0x9749, 0x974A, 0x974B, 0x974C, 0xE8F5, 0x974D, 0xCDB0, 0xE8F6, /* 0x70 */ + 0x974E, 0x974F, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, /* 0x70 */ + 0x9756, 0xC1BA, 0x9757, 0xE8E8, 0x9758, 0xC3B7, 0xB0F0, 0x9759, /* 0x80 */ + 0x975A, 0x975B, 0x975C, 0x975D, 0x975E, 0x975F, 0x9760, 0xE8F4, /* 0x80 */ + 0x9761, 0x9762, 0x9763, 0xE8F7, 0x9764, 0x9765, 0x9766, 0xB9A3, /* 0x90 */ + 0x9767, 0x9768, 0x9769, 0x976A, 0x976B, 0x976C, 0x976D, 0x976E, /* 0x90 */ + 0x976F, 0x9770, 0xC9D2, 0x9771, 0x9772, 0x9773, 0xC3CE, 0xCEE0, /* 0xA0 */ + 0xC0E6, 0x9774, 0x9775, 0x9776, 0x9777, 0xCBF3, 0x9778, 0xCCDD, /* 0xA0 */ + 0xD0B5, 0x9779, 0x977A, 0xCAE1, 0x977B, 0xE8F3, 0x977C, 0x977D, /* 0xB0 */ + 0x977E, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, /* 0xB0 */ + 0xBCEC, 0x9787, 0xE8F9, 0x9788, 0x9789, 0x978A, 0x978B, 0x978C, /* 0xC0 */ + 0x978D, 0xC3DE, 0x978E, 0xC6E5, 0x978F, 0xB9F7, 0x9790, 0x9791, /* 0xC0 */ + 0x9792, 0x9793, 0xB0F4, 0x9794, 0x9795, 0xD7D8, 0x9796, 0x9797, /* 0xD0 */ + 0xBCAC, 0x9798, 0xC5EF, 0x9799, 0x979A, 0x979B, 0x979C, 0x979D, /* 0xD0 */ + 0xCCC4, 0x979E, 0x979F, 0xE9A6, 0x97A0, 0x97A1, 0x97A2, 0x97A3, /* 0xE0 */ + 0x97A4, 0x97A5, 0x97A6, 0x97A7, 0x97A8, 0x97A9, 0xC9AD, 0x97AA, /* 0xE0 */ + 0xE9A2, 0xC0E2, 0x97AB, 0x97AC, 0x97AD, 0xBFC3, 0x97AE, 0x97AF, /* 0xF0 */ + 0x97B0, 0xE8FE, 0xB9D7, 0x97B1, 0xE8FB, 0x97B2, 0x97B3, 0x97B4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x97B5, 0xE9A4, 0x97B6, 0x97B7, 0x97B8, 0xD2CE, 0x97B9, 0x97BA, /* 0x00 */ + 0x97BB, 0x97BC, 0x97BD, 0xE9A3, 0x97BE, 0xD6B2, 0xD7B5, 0x97BF, /* 0x00 */ + 0xE9A7, 0x97C0, 0xBDB7, 0x97C1, 0x97C2, 0x97C3, 0x97C4, 0x97C5, /* 0x10 */ + 0x97C6, 0x97C7, 0x97C8, 0x97C9, 0x97CA, 0x97CB, 0x97CC, 0xE8FC, /* 0x10 */ + 0xE8FD, 0x97CD, 0x97CE, 0x97CF, 0xE9A1, 0x97D0, 0x97D1, 0x97D2, /* 0x20 */ + 0x97D3, 0x97D4, 0x97D5, 0x97D6, 0x97D7, 0xCDD6, 0x97D8, 0x97D9, /* 0x20 */ + 0xD2AC, 0x97DA, 0x97DB, 0x97DC, 0xE9B2, 0x97DD, 0x97DE, 0x97DF, /* 0x30 */ + 0x97E0, 0xE9A9, 0x97E1, 0x97E2, 0x97E3, 0xB4AA, 0x97E4, 0xB4BB, /* 0x30 */ + 0x97E5, 0x97E6, 0xE9AB, 0x97E7, 0x97E8, 0x97E9, 0x97EA, 0x97EB, /* 0x40 */ + 0x97EC, 0x97ED, 0x97EE, 0x97EF, 0x97F0, 0x97F1, 0x97F2, 0x97F3, /* 0x40 */ + 0x97F4, 0x97F5, 0x97F6, 0x97F7, 0xD0A8, 0x97F8, 0x97F9, 0xE9A5, /* 0x50 */ + 0x97FA, 0x97FB, 0xB3FE, 0x97FC, 0x97FD, 0xE9AC, 0xC0E3, 0x97FE, /* 0x50 */ + 0xE9AA, 0x9840, 0x9841, 0xE9B9, 0x9842, 0x9843, 0xE9B8, 0x9844, /* 0x60 */ + 0x9845, 0x9846, 0x9847, 0xE9AE, 0x9848, 0x9849, 0xE8FA, 0x984A, /* 0x60 */ + 0x984B, 0xE9A8, 0x984C, 0x984D, 0x984E, 0x984F, 0x9850, 0xBFAC, /* 0x70 */ + 0xE9B1, 0xE9BA, 0x9851, 0x9852, 0xC2A5, 0x9853, 0x9854, 0x9855, /* 0x70 */ + 0xE9AF, 0x9856, 0xB8C5, 0x9857, 0xE9AD, 0x9858, 0xD3DC, 0xE9B4, /* 0x80 */ + 0xE9B5, 0xE9B7, 0x9859, 0x985A, 0x985B, 0xE9C7, 0x985C, 0x985D, /* 0x80 */ + 0x985E, 0x985F, 0x9860, 0x9861, 0xC0C6, 0xE9C5, 0x9862, 0x9863, /* 0x90 */ + 0xE9B0, 0x9864, 0x9865, 0xE9BB, 0xB0F1, 0x9866, 0x9867, 0x9868, /* 0x90 */ + 0x9869, 0x986A, 0x986B, 0x986C, 0x986D, 0x986E, 0x986F, 0xE9BC, /* 0xA0 */ + 0xD5A5, 0x9870, 0x9871, 0xE9BE, 0x9872, 0xE9BF, 0x9873, 0x9874, /* 0xA0 */ + 0x9875, 0xE9C1, 0x9876, 0x9877, 0xC1F1, 0x9878, 0x9879, 0xC8B6, /* 0xB0 */ + 0x987A, 0x987B, 0x987C, 0xE9BD, 0x987D, 0x987E, 0x9880, 0x9881, /* 0xB0 */ + 0x9882, 0xE9C2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, /* 0xC0 */ + 0x9889, 0x988A, 0xE9C3, 0x988B, 0xE9B3, 0x988C, 0xE9B6, 0x988D, /* 0xC0 */ + 0xBBB1, 0x988E, 0x988F, 0x9890, 0xE9C0, 0x9891, 0x9892, 0x9893, /* 0xD0 */ + 0x9894, 0x9895, 0x9896, 0xBCF7, 0x9897, 0x9898, 0x9899, 0xE9C4, /* 0xD0 */ + 0xE9C6, 0x989A, 0x989B, 0x989C, 0x989D, 0x989E, 0x989F, 0x98A0, /* 0xE0 */ + 0x98A1, 0x98A2, 0x98A3, 0x98A4, 0x98A5, 0xE9CA, 0x98A6, 0x98A7, /* 0xE0 */ + 0x98A8, 0x98A9, 0xE9CE, 0x98AA, 0x98AB, 0x98AC, 0x98AD, 0x98AE, /* 0xF0 */ + 0x98AF, 0x98B0, 0x98B1, 0x98B2, 0x98B3, 0xB2DB, 0x98B4, 0xE9C8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x98B5, 0x98B6, 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, 0x98BC, /* 0x00 */ + 0x98BD, 0x98BE, 0xB7AE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, /* 0x00 */ + 0x98C4, 0x98C5, 0x98C6, 0x98C7, 0x98C8, 0x98C9, 0x98CA, 0xE9CB, /* 0x10 */ + 0xE9CC, 0x98CB, 0x98CC, 0x98CD, 0x98CE, 0x98CF, 0x98D0, 0xD5C1, /* 0x10 */ + 0x98D1, 0xC4A3, 0x98D2, 0x98D3, 0x98D4, 0x98D5, 0x98D6, 0x98D7, /* 0x20 */ + 0xE9D8, 0x98D8, 0xBAE1, 0x98D9, 0x98DA, 0x98DB, 0x98DC, 0xE9C9, /* 0x20 */ + 0x98DD, 0xD3A3, 0x98DE, 0x98DF, 0x98E0, 0xE9D4, 0x98E1, 0x98E2, /* 0x30 */ + 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98E7, 0xE9D7, 0xE9D0, 0x98E8, /* 0x30 */ + 0x98E9, 0x98EA, 0x98EB, 0x98EC, 0xE9CF, 0x98ED, 0x98EE, 0xC7C1, /* 0x40 */ + 0x98EF, 0x98F0, 0x98F1, 0x98F2, 0x98F3, 0x98F4, 0x98F5, 0x98F6, /* 0x40 */ + 0xE9D2, 0x98F7, 0x98F8, 0x98F9, 0x98FA, 0x98FB, 0x98FC, 0x98FD, /* 0x50 */ + 0xE9D9, 0xB3C8, 0x98FE, 0xE9D3, 0x9940, 0x9941, 0x9942, 0x9943, /* 0x50 */ + 0x9944, 0xCFF0, 0x9945, 0x9946, 0x9947, 0xE9CD, 0x9948, 0x9949, /* 0x60 */ + 0x994A, 0x994B, 0x994C, 0x994D, 0x994E, 0x994F, 0x9950, 0x9951, /* 0x60 */ + 0x9952, 0xB3F7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, /* 0x70 */ + 0x9959, 0xE9D6, 0x995A, 0x995B, 0xE9DA, 0x995C, 0x995D, 0x995E, /* 0x70 */ + 0xCCB4, 0x995F, 0x9960, 0x9961, 0xCFAD, 0x9962, 0x9963, 0x9964, /* 0x80 */ + 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996A, 0xE9D5, 0x996B, /* 0x80 */ + 0xE9DC, 0xE9DB, 0x996C, 0x996D, 0x996E, 0x996F, 0x9970, 0xE9DE, /* 0x90 */ + 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, /* 0x90 */ + 0xE9D1, 0x9979, 0x997A, 0x997B, 0x997C, 0x997D, 0x997E, 0x9980, /* 0xA0 */ + 0x9981, 0xE9DD, 0x9982, 0xE9DF, 0xC3CA, 0x9983, 0x9984, 0x9985, /* 0xA0 */ + 0x9986, 0x9987, 0x9988, 0x9989, 0x998A, 0x998B, 0x998C, 0x998D, /* 0xB0 */ + 0x998E, 0x998F, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, /* 0xB0 */ + 0x9996, 0x9997, 0x9998, 0x9999, 0x999A, 0x999B, 0x999C, 0x999D, /* 0xC0 */ + 0x999E, 0x999F, 0x99A0, 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A5, /* 0xC0 */ + 0x99A6, 0x99A7, 0x99A8, 0x99A9, 0x99AA, 0x99AB, 0x99AC, 0x99AD, /* 0xD0 */ + 0x99AE, 0x99AF, 0x99B0, 0x99B1, 0x99B2, 0x99B3, 0x99B4, 0x99B5, /* 0xD0 */ + 0x99B6, 0x99B7, 0x99B8, 0x99B9, 0x99BA, 0x99BB, 0x99BC, 0x99BD, /* 0xE0 */ + 0x99BE, 0x99BF, 0x99C0, 0x99C1, 0x99C2, 0x99C3, 0x99C4, 0x99C5, /* 0xE0 */ + 0x99C6, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB, 0x99CC, 0x99CD, /* 0xF0 */ + 0x99CE, 0x99CF, 0x99D0, 0x99D1, 0x99D2, 0x99D3, 0x99D4, 0x99D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x99D6, 0x99D7, 0x99D8, 0x99D9, 0x99DA, 0x99DB, 0x99DC, 0x99DD, /* 0x00 */ + 0x99DE, 0x99DF, 0x99E0, 0x99E1, 0x99E2, 0x99E3, 0x99E4, 0x99E5, /* 0x00 */ + 0x99E6, 0x99E7, 0x99E8, 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99ED, /* 0x10 */ + 0x99EE, 0x99EF, 0x99F0, 0x99F1, 0x99F2, 0x99F3, 0x99F4, 0x99F5, /* 0x10 */ + 0xC7B7, 0xB4CE, 0xBBB6, 0xD0C0, 0xECA3, 0x99F6, 0x99F7, 0xC5B7, /* 0x20 */ + 0x99F8, 0x99F9, 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x99FE, 0x9A40, /* 0x20 */ + 0x9A41, 0x9A42, 0xD3FB, 0x9A43, 0x9A44, 0x9A45, 0x9A46, 0xECA4, /* 0x30 */ + 0x9A47, 0xECA5, 0xC6DB, 0x9A48, 0x9A49, 0x9A4A, 0xBFEE, 0x9A4B, /* 0x30 */ + 0x9A4C, 0x9A4D, 0x9A4E, 0xECA6, 0x9A4F, 0x9A50, 0xECA7, 0xD0AA, /* 0x40 */ + 0x9A51, 0xC7B8, 0x9A52, 0x9A53, 0xB8E8, 0x9A54, 0x9A55, 0x9A56, /* 0x40 */ + 0x9A57, 0x9A58, 0x9A59, 0x9A5A, 0x9A5B, 0x9A5C, 0x9A5D, 0x9A5E, /* 0x50 */ + 0x9A5F, 0xECA8, 0x9A60, 0x9A61, 0x9A62, 0x9A63, 0x9A64, 0x9A65, /* 0x50 */ + 0x9A66, 0x9A67, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, /* 0x60 */ + 0x9A68, 0x9A69, 0xCDE1, 0x9A6A, 0x9A6B, 0x9A6C, 0x9A6D, 0x9A6E, /* 0x60 */ + 0x9A6F, 0x9A70, 0x9A71, 0x9A72, 0x9A73, 0x9A74, 0x9A75, 0x9A76, /* 0x70 */ + 0x9A77, 0xB4F5, 0x9A78, 0xCBC0, 0xBCDF, 0x9A79, 0x9A7A, 0x9A7B, /* 0x70 */ + 0x9A7C, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0x9A7D, 0xB4F9, 0xE9E4, /* 0x80 */ + 0x9A7E, 0xD1B3, 0xCAE2, 0xB2D0, 0x9A80, 0xE9E8, 0x9A81, 0x9A82, /* 0x80 */ + 0x9A83, 0x9A84, 0xE9E6, 0xE9E7, 0x9A85, 0x9A86, 0xD6B3, 0x9A87, /* 0x90 */ + 0x9A88, 0x9A89, 0xE9E9, 0xE9EA, 0x9A8A, 0x9A8B, 0x9A8C, 0x9A8D, /* 0x90 */ + 0x9A8E, 0xE9EB, 0x9A8F, 0x9A90, 0x9A91, 0x9A92, 0x9A93, 0x9A94, /* 0xA0 */ + 0x9A95, 0x9A96, 0xE9EC, 0x9A97, 0x9A98, 0x9A99, 0x9A9A, 0x9A9B, /* 0xA0 */ + 0x9A9C, 0x9A9D, 0x9A9E, 0xECAF, 0xC5B9, 0xB6CE, 0x9A9F, 0xD2F3, /* 0xB0 */ + 0x9AA0, 0x9AA1, 0x9AA2, 0x9AA3, 0x9AA4, 0x9AA5, 0x9AA6, 0xB5EE, /* 0xB0 */ + 0x9AA7, 0xBBD9, 0xECB1, 0x9AA8, 0x9AA9, 0xD2E3, 0x9AAA, 0x9AAB, /* 0xC0 */ + 0x9AAC, 0x9AAD, 0x9AAE, 0xCEE3, 0x9AAF, 0xC4B8, 0x9AB0, 0xC3BF, /* 0xC0 */ + 0x9AB1, 0x9AB2, 0xB6BE, 0xD8B9, 0xB1C8, 0xB1CF, 0xB1D1, 0xC5FE, /* 0xD0 */ + 0x9AB3, 0xB1D0, 0x9AB4, 0xC3AB, 0x9AB5, 0x9AB6, 0x9AB7, 0x9AB8, /* 0xD0 */ + 0x9AB9, 0xD5B1, 0x9ABA, 0x9ABB, 0x9ABC, 0x9ABD, 0x9ABE, 0x9ABF, /* 0xE0 */ + 0x9AC0, 0x9AC1, 0xEBA4, 0xBAC1, 0x9AC2, 0x9AC3, 0x9AC4, 0xCCBA, /* 0xE0 */ + 0x9AC5, 0x9AC6, 0x9AC7, 0xEBA5, 0x9AC8, 0xEBA7, 0x9AC9, 0x9ACA, /* 0xF0 */ + 0x9ACB, 0xEBA8, 0x9ACC, 0x9ACD, 0x9ACE, 0xEBA6, 0x9ACF, 0x9AD0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9AD1, 0x9AD2, 0x9AD3, 0x9AD4, 0x9AD5, 0xEBA9, 0xEBAB, 0xEBAA, /* 0x00 */ + 0x9AD6, 0x9AD7, 0x9AD8, 0x9AD9, 0x9ADA, 0xEBAC, 0x9ADB, 0xCACF, /* 0x00 */ + 0xD8B5, 0xC3F1, 0x9ADC, 0xC3A5, 0xC6F8, 0xEBAD, 0xC4CA, 0x9ADD, /* 0x10 */ + 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0x9ADE, 0x9ADF, 0x9AE0, 0xB7FA, /* 0x10 */ + 0x9AE1, 0xEBB1, 0xC7E2, 0x9AE2, 0xEBB3, 0x9AE3, 0xBAA4, 0xD1F5, /* 0x20 */ + 0xB0B1, 0xEBB2, 0xEBB4, 0x9AE4, 0x9AE5, 0x9AE6, 0xB5AA, 0xC2C8, /* 0x20 */ + 0xC7E8, 0x9AE7, 0xEBB5, 0x9AE8, 0xCBAE, 0xE3DF, 0x9AE9, 0x9AEA, /* 0x30 */ + 0xD3C0, 0x9AEB, 0x9AEC, 0x9AED, 0x9AEE, 0xD9DB, 0x9AEF, 0x9AF0, /* 0x30 */ + 0xCDA1, 0xD6AD, 0xC7F3, 0x9AF1, 0x9AF2, 0x9AF3, 0xD9E0, 0xBBE3, /* 0x40 */ + 0x9AF4, 0xBABA, 0xE3E2, 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AF9, /* 0x40 */ + 0xCFAB, 0x9AFA, 0x9AFB, 0x9AFC, 0xE3E0, 0xC9C7, 0x9AFD, 0xBAB9, /* 0x50 */ + 0x9AFE, 0x9B40, 0x9B41, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, /* 0x50 */ + 0xB3D8, 0xCEDB, 0x9B42, 0x9B43, 0xCCC0, 0x9B44, 0x9B45, 0x9B46, /* 0x60 */ + 0xE3E8, 0xE3E9, 0xCDF4, 0x9B47, 0x9B48, 0x9B49, 0x9B4A, 0x9B4B, /* 0x60 */ + 0xCCAD, 0x9B4C, 0xBCB3, 0x9B4D, 0xE3EA, 0x9B4E, 0xE3EB, 0x9B4F, /* 0x70 */ + 0x9B50, 0xD0DA, 0x9B51, 0x9B52, 0x9B53, 0xC6FB, 0xB7DA, 0x9B54, /* 0x70 */ + 0x9B55, 0xC7DF, 0xD2CA, 0xCED6, 0x9B56, 0xE3E4, 0xE3EC, 0x9B57, /* 0x80 */ + 0xC9F2, 0xB3C1, 0x9B58, 0x9B59, 0xE3E7, 0x9B5A, 0x9B5B, 0xC6E3, /* 0x80 */ + 0xE3E5, 0x9B5C, 0x9B5D, 0xEDB3, 0xE3E6, 0x9B5E, 0x9B5F, 0x9B60, /* 0x90 */ + 0x9B61, 0xC9B3, 0x9B62, 0xC5E6, 0x9B63, 0x9B64, 0x9B65, 0xB9B5, /* 0x90 */ + 0x9B66, 0xC3BB, 0x9B67, 0xE3E3, 0xC5BD, 0xC1A4, 0xC2D9, 0xB2D7, /* 0xA0 */ + 0x9B68, 0xE3ED, 0xBBA6, 0xC4AD, 0x9B69, 0xE3F0, 0xBEDA, 0x9B6A, /* 0xA0 */ + 0x9B6B, 0xE3FB, 0xE3F5, 0xBAD3, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B6F, /* 0xB0 */ + 0xB7D0, 0xD3CD, 0x9B70, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, /* 0xB0 */ + 0x9B71, 0x9B72, 0x9B73, 0x9B74, 0xD0B9, 0xC7F6, 0x9B75, 0x9B76, /* 0xC0 */ + 0x9B77, 0xC8AA, 0xB2B4, 0x9B78, 0xC3DA, 0x9B79, 0x9B7A, 0x9B7B, /* 0xC0 */ + 0xE3EE, 0x9B7C, 0x9B7D, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, /* 0xD0 */ + 0x9B7E, 0x9B80, 0x9B81, 0xB7BA, 0x9B82, 0x9B83, 0xC5A2, 0x9B84, /* 0xD0 */ + 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0x9B85, 0xC4E0, 0x9B86, 0x9B87, /* 0xE0 */ + 0xD7A2, 0x9B88, 0xC0E1, 0xE3F9, 0x9B89, 0x9B8A, 0xE3FA, 0xE3FD, /* 0xE0 */ + 0xCCA9, 0xE3F3, 0x9B8B, 0xD3BE, 0x9B8C, 0xB1C3, 0xEDB4, 0xE3F1, /* 0xF0 */ + 0xE3F2, 0x9B8D, 0xE3F8, 0xD0BA, 0xC6C3, 0xD4F3, 0xE3FE, 0x9B8E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9B8F, 0xBDE0, 0x9B90, 0x9B91, 0xE4A7, 0x9B92, 0x9B93, 0xE4A6, /* 0x00 */ + 0x9B94, 0x9B95, 0x9B96, 0xD1F3, 0xE4A3, 0x9B97, 0xE4A9, 0x9B98, /* 0x00 */ + 0x9B99, 0x9B9A, 0xC8F7, 0x9B9B, 0x9B9C, 0x9B9D, 0x9B9E, 0xCFB4, /* 0x10 */ + 0x9B9F, 0xE4A8, 0xE4AE, 0xC2E5, 0x9BA0, 0x9BA1, 0xB6B4, 0x9BA2, /* 0x10 */ + 0x9BA3, 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0xBDF2, 0x9BA8, 0xE4A2, /* 0x20 */ + 0x9BA9, 0x9BAA, 0xBAE9, 0xE4AA, 0x9BAB, 0x9BAC, 0xE4AC, 0x9BAD, /* 0x20 */ + 0x9BAE, 0xB6FD, 0xD6DE, 0xE4B2, 0x9BAF, 0xE4AD, 0x9BB0, 0x9BB1, /* 0x30 */ + 0x9BB2, 0xE4A1, 0x9BB3, 0xBBEE, 0xCDDD, 0xC7A2, 0xC5C9, 0x9BB4, /* 0x30 */ + 0x9BB5, 0xC1F7, 0x9BB6, 0xE4A4, 0x9BB7, 0xC7B3, 0xBDAC, 0xBDBD, /* 0x40 */ + 0xE4A5, 0x9BB8, 0xD7C7, 0xB2E2, 0x9BB9, 0xE4AB, 0xBCC3, 0xE4AF, /* 0x40 */ + 0x9BBA, 0xBBEB, 0xE4B0, 0xC5A8, 0xE4B1, 0x9BBB, 0x9BBC, 0x9BBD, /* 0x50 */ + 0x9BBE, 0xD5E3, 0xBFA3, 0x9BBF, 0xE4BA, 0x9BC0, 0xE4B7, 0x9BC1, /* 0x50 */ + 0xE4BB, 0x9BC2, 0x9BC3, 0xE4BD, 0x9BC4, 0x9BC5, 0xC6D6, 0x9BC6, /* 0x60 */ + 0x9BC7, 0xBAC6, 0xC0CB, 0x9BC8, 0x9BC9, 0x9BCA, 0xB8A1, 0xE4B4, /* 0x60 */ + 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, 0xD4A1, 0x9BCF, 0x9BD0, 0xBAA3, /* 0x70 */ + 0xBDFE, 0x9BD1, 0x9BD2, 0x9BD3, 0xE4BC, 0x9BD4, 0x9BD5, 0x9BD6, /* 0x70 */ + 0x9BD7, 0x9BD8, 0xCDBF, 0x9BD9, 0x9BDA, 0xC4F9, 0x9BDB, 0x9BDC, /* 0x80 */ + 0xCFFB, 0xC9E6, 0x9BDD, 0x9BDE, 0xD3BF, 0x9BDF, 0xCFD1, 0x9BE0, /* 0x80 */ + 0x9BE1, 0xE4B3, 0x9BE2, 0xE4B8, 0xE4B9, 0xCCE9, 0x9BE3, 0x9BE4, /* 0x90 */ + 0x9BE5, 0x9BE6, 0x9BE7, 0xCCCE, 0x9BE8, 0xC0D4, 0xE4B5, 0xC1B0, /* 0x90 */ + 0xE4B6, 0xCED0, 0x9BE9, 0xBBC1, 0xB5D3, 0x9BEA, 0xC8F3, 0xBDA7, /* 0xA0 */ + 0xD5C7, 0xC9AC, 0xB8A2, 0xE4CA, 0x9BEB, 0x9BEC, 0xE4CC, 0xD1C4, /* 0xA0 */ + 0x9BED, 0x9BEE, 0xD2BA, 0x9BEF, 0x9BF0, 0xBAAD, 0x9BF1, 0x9BF2, /* 0xB0 */ + 0xBAD4, 0x9BF3, 0x9BF4, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8, 0xE4C3, /* 0xB0 */ + 0xB5ED, 0x9BF9, 0x9BFA, 0x9BFB, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, /* 0xC0 */ + 0x9BFC, 0x9BFD, 0x9BFE, 0xC1DC, 0xCCCA, 0x9C40, 0x9C41, 0x9C42, /* 0xC0 */ + 0x9C43, 0xCAE7, 0x9C44, 0x9C45, 0x9C46, 0x9C47, 0xC4D7, 0x9C48, /* 0xD0 */ + 0xCCD4, 0xE4C8, 0x9C49, 0x9C4A, 0x9C4B, 0xE4C7, 0xE4C1, 0x9C4C, /* 0xD0 */ + 0xE4C4, 0xB5AD, 0x9C4D, 0x9C4E, 0xD3D9, 0x9C4F, 0xE4C6, 0x9C50, /* 0xE0 */ + 0x9C51, 0x9C52, 0x9C53, 0xD2F9, 0xB4E3, 0x9C54, 0xBBB4, 0x9C55, /* 0xE0 */ + 0x9C56, 0xC9EE, 0x9C57, 0xB4BE, 0x9C58, 0x9C59, 0x9C5A, 0xBBEC, /* 0xF0 */ + 0x9C5B, 0xD1CD, 0x9C5C, 0xCCED, 0xEDB5, 0x9C5D, 0x9C5E, 0x9C5F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9C60, 0x9C61, 0x9C62, 0x9C63, 0x9C64, 0xC7E5, 0x9C65, 0x9C66, /* 0x00 */ + 0x9C67, 0x9C68, 0xD4A8, 0x9C69, 0xE4CB, 0xD7D5, 0xE4C2, 0x9C6A, /* 0x00 */ + 0xBDA5, 0xE4C5, 0x9C6B, 0x9C6C, 0xD3E6, 0x9C6D, 0xE4C9, 0xC9F8, /* 0x10 */ + 0x9C6E, 0x9C6F, 0xE4BE, 0x9C70, 0x9C71, 0xD3E5, 0x9C72, 0x9C73, /* 0x10 */ + 0xC7FE, 0xB6C9, 0x9C74, 0xD4FC, 0xB2B3, 0xE4D7, 0x9C75, 0x9C76, /* 0x20 */ + 0x9C77, 0xCEC2, 0x9C78, 0xE4CD, 0x9C79, 0xCEBC, 0x9C7A, 0xB8DB, /* 0x20 */ + 0x9C7B, 0x9C7C, 0xE4D6, 0x9C7D, 0xBFCA, 0x9C7E, 0x9C80, 0x9C81, /* 0x30 */ + 0xD3CE, 0x9C82, 0xC3EC, 0x9C83, 0x9C84, 0x9C85, 0x9C86, 0x9C87, /* 0x30 */ + 0x9C88, 0x9C89, 0x9C8A, 0xC5C8, 0xE4D8, 0x9C8B, 0x9C8C, 0x9C8D, /* 0x40 */ + 0x9C8E, 0x9C8F, 0x9C90, 0x9C91, 0x9C92, 0xCDC4, 0xE4CF, 0x9C93, /* 0x40 */ + 0x9C94, 0x9C95, 0x9C96, 0xE4D4, 0xE4D5, 0x9C97, 0xBAFE, 0x9C98, /* 0x50 */ + 0xCFE6, 0x9C99, 0x9C9A, 0xD5BF, 0x9C9B, 0x9C9C, 0x9C9D, 0xE4D2, /* 0x50 */ + 0x9C9E, 0x9C9F, 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA4, 0x9CA5, /* 0x60 */ + 0x9CA6, 0x9CA7, 0x9CA8, 0xE4D0, 0x9CA9, 0x9CAA, 0xE4CE, 0x9CAB, /* 0x60 */ + 0x9CAC, 0x9CAD, 0x9CAE, 0x9CAF, 0x9CB0, 0x9CB1, 0x9CB2, 0x9CB3, /* 0x70 */ + 0x9CB4, 0x9CB5, 0x9CB6, 0x9CB7, 0x9CB8, 0x9CB9, 0xCDE5, 0xCAAA, /* 0x70 */ + 0x9CBA, 0x9CBB, 0x9CBC, 0xC0A3, 0x9CBD, 0xBDA6, 0xE4D3, 0x9CBE, /* 0x80 */ + 0x9CBF, 0xB8C8, 0x9CC0, 0x9CC1, 0x9CC2, 0x9CC3, 0x9CC4, 0xE4E7, /* 0x80 */ + 0xD4B4, 0x9CC5, 0x9CC6, 0x9CC7, 0x9CC8, 0x9CC9, 0x9CCA, 0x9CCB, /* 0x90 */ + 0xE4DB, 0x9CCC, 0x9CCD, 0x9CCE, 0xC1EF, 0x9CCF, 0x9CD0, 0xE4E9, /* 0x90 */ + 0x9CD1, 0x9CD2, 0xD2E7, 0x9CD3, 0x9CD4, 0xE4DF, 0x9CD5, 0xE4E0, /* 0xA0 */ + 0x9CD6, 0x9CD7, 0xCFAA, 0x9CD8, 0x9CD9, 0x9CDA, 0x9CDB, 0xCBDD, /* 0xA0 */ + 0x9CDC, 0xE4DA, 0xE4D1, 0x9CDD, 0xE4E5, 0x9CDE, 0xC8DC, 0xE4E3, /* 0xB0 */ + 0x9CDF, 0x9CE0, 0xC4E7, 0xE4E2, 0x9CE1, 0xE4E1, 0x9CE2, 0x9CE3, /* 0xB0 */ + 0x9CE4, 0xB3FC, 0xE4E8, 0x9CE5, 0x9CE6, 0x9CE7, 0x9CE8, 0xB5E1, /* 0xC0 */ + 0x9CE9, 0x9CEA, 0x9CEB, 0xD7CC, 0x9CEC, 0x9CED, 0x9CEE, 0xE4E6, /* 0xC0 */ + 0x9CEF, 0xBBAC, 0x9CF0, 0xD7D2, 0xCCCF, 0xEBF8, 0x9CF1, 0xE4E4, /* 0xD0 */ + 0x9CF2, 0x9CF3, 0xB9F6, 0x9CF4, 0x9CF5, 0x9CF6, 0xD6CD, 0xE4D9, /* 0xD0 */ + 0xE4DC, 0xC2FA, 0xE4DE, 0x9CF7, 0xC2CB, 0xC0C4, 0xC2D0, 0x9CF8, /* 0xE0 */ + 0xB1F5, 0xCCB2, 0x9CF9, 0x9CFA, 0x9CFB, 0x9CFC, 0x9CFD, 0x9CFE, /* 0xE0 */ + 0x9D40, 0x9D41, 0x9D42, 0x9D43, 0xB5CE, 0x9D44, 0x9D45, 0x9D46, /* 0xF0 */ + 0x9D47, 0xE4EF, 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9D4E, 0x9D4F, 0xC6AF, 0x9D50, 0x9D51, 0x9D52, 0xC6E1, 0x9D53, /* 0x00 */ + 0x9D54, 0xE4F5, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0xC2A9, /* 0x00 */ + 0x9D5A, 0x9D5B, 0x9D5C, 0xC0EC, 0xD1DD, 0xE4EE, 0x9D5D, 0x9D5E, /* 0x10 */ + 0x9D5F, 0x9D60, 0x9D61, 0x9D62, 0x9D63, 0x9D64, 0x9D65, 0x9D66, /* 0x10 */ + 0xC4AE, 0x9D67, 0x9D68, 0x9D69, 0xE4ED, 0x9D6A, 0x9D6B, 0x9D6C, /* 0x20 */ + 0x9D6D, 0xE4F6, 0xE4F4, 0xC2FE, 0x9D6E, 0xE4DD, 0x9D6F, 0xE4F0, /* 0x20 */ + 0x9D70, 0xCAFE, 0x9D71, 0xD5C4, 0x9D72, 0x9D73, 0xE4F1, 0x9D74, /* 0x30 */ + 0x9D75, 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0xD1FA, 0x9D7B, /* 0x30 */ + 0x9D7C, 0x9D7D, 0x9D7E, 0x9D80, 0x9D81, 0x9D82, 0xE4EB, 0xE4EC, /* 0x40 */ + 0x9D83, 0x9D84, 0x9D85, 0xE4F2, 0x9D86, 0xCEAB, 0x9D87, 0x9D88, /* 0x40 */ + 0x9D89, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, /* 0x50 */ + 0xC5CB, 0x9D91, 0x9D92, 0x9D93, 0xC7B1, 0x9D94, 0xC2BA, 0x9D95, /* 0x50 */ + 0x9D96, 0x9D97, 0xE4EA, 0x9D98, 0x9D99, 0x9D9A, 0xC1CA, 0x9D9B, /* 0x60 */ + 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, 0x9DA0, 0xCCB6, 0xB3B1, 0x9DA1, /* 0x60 */ + 0x9DA2, 0x9DA3, 0xE4FB, 0x9DA4, 0xE4F3, 0x9DA5, 0x9DA6, 0x9DA7, /* 0x70 */ + 0xE4FA, 0x9DA8, 0xE4FD, 0x9DA9, 0xE4FC, 0x9DAA, 0x9DAB, 0x9DAC, /* 0x70 */ + 0x9DAD, 0x9DAE, 0x9DAF, 0x9DB0, 0xB3CE, 0x9DB1, 0x9DB2, 0x9DB3, /* 0x80 */ + 0xB3BA, 0xE4F7, 0x9DB4, 0x9DB5, 0xE4F9, 0xE4F8, 0xC5EC, 0x9DB6, /* 0x80 */ + 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBB, 0x9DBC, 0x9DBD, 0x9DBE, /* 0x90 */ + 0x9DBF, 0x9DC0, 0x9DC1, 0x9DC2, 0xC0BD, 0x9DC3, 0x9DC4, 0x9DC5, /* 0x90 */ + 0x9DC6, 0xD4E8, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, 0x9DCB, 0xE5A2, /* 0xA0 */ + 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, 0x9DD3, /* 0xA0 */ + 0x9DD4, 0x9DD5, 0x9DD6, 0xB0C4, 0x9DD7, 0x9DD8, 0xE5A4, 0x9DD9, /* 0xB0 */ + 0x9DDA, 0xE5A3, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, /* 0xB0 */ + 0xBCA4, 0x9DE1, 0xE5A5, 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE5, 0x9DE6, /* 0xC0 */ + 0x9DE7, 0xE5A1, 0x9DE8, 0x9DE9, 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, /* 0xC0 */ + 0x9DEE, 0xE4FE, 0xB1F4, 0x9DEF, 0x9DF0, 0x9DF1, 0x9DF2, 0x9DF3, /* 0xD0 */ + 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DF8, 0x9DF9, 0xE5A8, 0x9DFA, /* 0xD0 */ + 0xE5A9, 0xE5A6, 0x9DFB, 0x9DFC, 0x9DFD, 0x9DFE, 0x9E40, 0x9E41, /* 0xE0 */ + 0x9E42, 0x9E43, 0x9E44, 0x9E45, 0x9E46, 0x9E47, 0xE5A7, 0xE5AA, /* 0xE0 */ + 0x9E48, 0x9E49, 0x9E4A, 0x9E4B, 0x9E4C, 0x9E4D, 0x9E4E, 0x9E4F, /* 0xF0 */ + 0x9E50, 0x9E51, 0x9E52, 0x9E53, 0x9E54, 0x9E55, 0x9E56, 0x9E57 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9E58, 0x9E59, 0x9E5A, 0x9E5B, 0x9E5C, 0x9E5D, 0x9E5E, 0x9E5F, /* 0x00 */ + 0x9E60, 0x9E61, 0x9E62, 0x9E63, 0x9E64, 0x9E65, 0x9E66, 0x9E67, /* 0x00 */ + 0x9E68, 0xC6D9, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, 0x9E6D, 0x9E6E, /* 0x10 */ + 0x9E6F, 0x9E70, 0xE5AB, 0xE5AD, 0x9E71, 0x9E72, 0x9E73, 0x9E74, /* 0x10 */ + 0x9E75, 0x9E76, 0x9E77, 0xE5AC, 0x9E78, 0x9E79, 0x9E7A, 0x9E7B, /* 0x20 */ + 0x9E7C, 0x9E7D, 0x9E7E, 0x9E80, 0x9E81, 0x9E82, 0x9E83, 0x9E84, /* 0x20 */ + 0x9E85, 0x9E86, 0x9E87, 0x9E88, 0x9E89, 0xE5AF, 0x9E8A, 0x9E8B, /* 0x30 */ + 0x9E8C, 0xE5AE, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E92, /* 0x30 */ + 0x9E93, 0x9E94, 0x9E95, 0x9E96, 0x9E97, 0x9E98, 0x9E99, 0x9E9A, /* 0x40 */ + 0x9E9B, 0x9E9C, 0x9E9D, 0x9E9E, 0xB9E0, 0x9E9F, 0x9EA0, 0xE5B0, /* 0x40 */ + 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA5, 0x9EA6, 0x9EA7, 0x9EA8, /* 0x50 */ + 0x9EA9, 0x9EAA, 0x9EAB, 0x9EAC, 0x9EAD, 0x9EAE, 0xE5B1, 0x9EAF, /* 0x50 */ + 0x9EB0, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB4, 0x9EB5, 0x9EB6, 0x9EB7, /* 0x60 */ + 0x9EB8, 0x9EB9, 0x9EBA, 0xBBF0, 0xECE1, 0xC3F0, 0x9EBB, 0xB5C6, /* 0x60 */ + 0xBBD2, 0x9EBC, 0x9EBD, 0x9EBE, 0x9EBF, 0xC1E9, 0xD4EE, 0x9EC0, /* 0x70 */ + 0xBEC4, 0x9EC1, 0x9EC2, 0x9EC3, 0xD7C6, 0x9EC4, 0xD4D6, 0xB2D3, /* 0x70 */ + 0xECBE, 0x9EC5, 0x9EC6, 0x9EC7, 0x9EC8, 0xEAC1, 0x9EC9, 0x9ECA, /* 0x80 */ + 0x9ECB, 0xC2AF, 0xB4B6, 0x9ECC, 0x9ECD, 0x9ECE, 0xD1D7, 0x9ECF, /* 0x80 */ + 0x9ED0, 0x9ED1, 0xB3B4, 0x9ED2, 0xC8B2, 0xBFBB, 0xECC0, 0x9ED3, /* 0x90 */ + 0x9ED4, 0xD6CB, 0x9ED5, 0x9ED6, 0xECBF, 0xECC1, 0x9ED7, 0x9ED8, /* 0x90 */ + 0x9ED9, 0x9EDA, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EDE, 0x9EDF, 0x9EE0, /* 0xA0 */ + 0x9EE1, 0x9EE2, 0x9EE3, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, /* 0xA0 */ + 0x9EE4, 0xECC6, 0x9EE5, 0xB1FE, 0x9EE6, 0x9EE7, 0x9EE8, 0xECC4, /* 0xB0 */ + 0xD5A8, 0xB5E3, 0x9EE9, 0xECC2, 0xC1B6, 0xB3E3, 0x9EEA, 0x9EEB, /* 0xB0 */ + 0xECC3, 0xCBB8, 0xC0C3, 0xCCFE, 0x9EEC, 0x9EED, 0x9EEE, 0x9EEF, /* 0xC0 */ + 0xC1D2, 0x9EF0, 0xECC8, 0x9EF1, 0x9EF2, 0x9EF3, 0x9EF4, 0x9EF5, /* 0xC0 */ + 0x9EF6, 0x9EF7, 0x9EF8, 0x9EF9, 0x9EFA, 0x9EFB, 0x9EFC, 0x9EFD, /* 0xD0 */ + 0xBAE6, 0xC0D3, 0x9EFE, 0xD6F2, 0x9F40, 0x9F41, 0x9F42, 0xD1CC, /* 0xD0 */ + 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0xBFBE, 0x9F47, 0xB7B3, 0xC9D5, /* 0xE0 */ + 0xECC7, 0xBBE2, 0x9F48, 0xCCCC, 0xBDFD, 0xC8C8, 0x9F49, 0xCFA9, /* 0xE0 */ + 0x9F4A, 0x9F4B, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F4F, 0x9F50, 0xCDE9, /* 0xF0 */ + 0x9F51, 0xC5EB, 0x9F52, 0x9F53, 0x9F54, 0xB7E9, 0x9F55, 0x9F56 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9F57, 0x9F58, 0x9F59, 0x9F5A, 0x9F5B, 0x9F5C, 0x9F5D, 0x9F5E, /* 0x00 */ + 0x9F5F, 0xD1C9, 0xBAB8, 0x9F60, 0x9F61, 0x9F62, 0x9F63, 0x9F64, /* 0x00 */ + 0xECC9, 0x9F65, 0x9F66, 0xECCA, 0x9F67, 0xBBC0, 0xECCB, 0x9F68, /* 0x10 */ + 0xECE2, 0xB1BA, 0xB7D9, 0x9F69, 0x9F6A, 0x9F6B, 0x9F6C, 0x9F6D, /* 0x10 */ + 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F72, 0x9F73, 0xBDB9, 0x9F74, /* 0x20 */ + 0x9F75, 0x9F76, 0x9F77, 0x9F78, 0x9F79, 0x9F7A, 0x9F7B, 0xECCC, /* 0x20 */ + 0xD1E6, 0xECCD, 0x9F7C, 0x9F7D, 0x9F7E, 0x9F80, 0xC8BB, 0x9F81, /* 0x30 */ + 0x9F82, 0x9F83, 0x9F84, 0x9F85, 0x9F86, 0x9F87, 0x9F88, 0x9F89, /* 0x30 */ + 0x9F8A, 0x9F8B, 0x9F8C, 0x9F8D, 0x9F8E, 0xECD1, 0x9F8F, 0x9F90, /* 0x40 */ + 0x9F91, 0x9F92, 0xECD3, 0x9F93, 0xBBCD, 0x9F94, 0xBCE5, 0x9F95, /* 0x40 */ + 0x9F96, 0x9F97, 0x9F98, 0x9F99, 0x9F9A, 0x9F9B, 0x9F9C, 0x9F9D, /* 0x50 */ + 0x9F9E, 0x9F9F, 0x9FA0, 0x9FA1, 0xECCF, 0x9FA2, 0xC9B7, 0x9FA3, /* 0x50 */ + 0x9FA4, 0x9FA5, 0x9FA6, 0x9FA7, 0xC3BA, 0x9FA8, 0xECE3, 0xD5D5, /* 0x60 */ + 0xECD0, 0x9FA9, 0x9FAA, 0x9FAB, 0x9FAC, 0x9FAD, 0xD6F3, 0x9FAE, /* 0x60 */ + 0x9FAF, 0x9FB0, 0xECD2, 0xECCE, 0x9FB1, 0x9FB2, 0x9FB3, 0x9FB4, /* 0x70 */ + 0xECD4, 0x9FB5, 0xECD5, 0x9FB6, 0x9FB7, 0xC9BF, 0x9FB8, 0x9FB9, /* 0x70 */ + 0x9FBA, 0x9FBB, 0x9FBC, 0x9FBD, 0xCFA8, 0x9FBE, 0x9FBF, 0x9FC0, /* 0x80 */ + 0x9FC1, 0x9FC2, 0xD0DC, 0x9FC3, 0x9FC4, 0x9FC5, 0x9FC6, 0xD1AC, /* 0x80 */ + 0x9FC7, 0x9FC8, 0x9FC9, 0x9FCA, 0xC8DB, 0x9FCB, 0x9FCC, 0x9FCD, /* 0x90 */ + 0xECD6, 0xCEF5, 0x9FCE, 0x9FCF, 0x9FD0, 0x9FD1, 0x9FD2, 0xCAEC, /* 0x90 */ + 0xECDA, 0x9FD3, 0x9FD4, 0x9FD5, 0x9FD6, 0x9FD7, 0x9FD8, 0x9FD9, /* 0xA0 */ + 0xECD9, 0x9FDA, 0x9FDB, 0x9FDC, 0xB0BE, 0x9FDD, 0x9FDE, 0x9FDF, /* 0xA0 */ + 0x9FE0, 0x9FE1, 0x9FE2, 0xECD7, 0x9FE3, 0xECD8, 0x9FE4, 0x9FE5, /* 0xB0 */ + 0x9FE6, 0xECE4, 0x9FE7, 0x9FE8, 0x9FE9, 0x9FEA, 0x9FEB, 0x9FEC, /* 0xB0 */ + 0x9FED, 0x9FEE, 0x9FEF, 0xC8BC, 0x9FF0, 0x9FF1, 0x9FF2, 0x9FF3, /* 0xC0 */ + 0x9FF4, 0x9FF5, 0x9FF6, 0x9FF7, 0x9FF8, 0x9FF9, 0xC1C7, 0x9FFA, /* 0xC0 */ + 0x9FFB, 0x9FFC, 0x9FFD, 0x9FFE, 0xECDC, 0xD1E0, 0xA040, 0xA041, /* 0xD0 */ + 0xA042, 0xA043, 0xA044, 0xA045, 0xA046, 0xA047, 0xA048, 0xA049, /* 0xD0 */ + 0xECDB, 0xA04A, 0xA04B, 0xA04C, 0xA04D, 0xD4EF, 0xA04E, 0xECDD, /* 0xE0 */ + 0xA04F, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xDBC6, 0xA055, /* 0xE0 */ + 0xA056, 0xA057, 0xA058, 0xA059, 0xA05A, 0xA05B, 0xA05C, 0xA05D, /* 0xF0 */ + 0xA05E, 0xECDE, 0xA05F, 0xA060, 0xA061, 0xA062, 0xA063, 0xA064 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA065, 0xA066, 0xA067, 0xA068, 0xA069, 0xA06A, 0xB1AC, 0xA06B, /* 0x00 */ + 0xA06C, 0xA06D, 0xA06E, 0xA06F, 0xA070, 0xA071, 0xA072, 0xA073, /* 0x00 */ + 0xA074, 0xA075, 0xA076, 0xA077, 0xA078, 0xA079, 0xA07A, 0xA07B, /* 0x10 */ + 0xA07C, 0xA07D, 0xA07E, 0xA080, 0xA081, 0xECDF, 0xA082, 0xA083, /* 0x10 */ + 0xA084, 0xA085, 0xA086, 0xA087, 0xA088, 0xA089, 0xA08A, 0xA08B, /* 0x20 */ + 0xECE0, 0xA08C, 0xD7A6, 0xA08D, 0xC5C0, 0xA08E, 0xA08F, 0xA090, /* 0x20 */ + 0xEBBC, 0xB0AE, 0xA091, 0xA092, 0xA093, 0xBEF4, 0xB8B8, 0xD2AF, /* 0x30 */ + 0xB0D6, 0xB5F9, 0xA094, 0xD8B3, 0xA095, 0xCBAC, 0xA096, 0xE3DD, /* 0x30 */ + 0xA097, 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D, 0xC6AC, /* 0x40 */ + 0xB0E6, 0xA09E, 0xA09F, 0xA0A0, 0xC5C6, 0xEBB9, 0xA0A1, 0xA0A2, /* 0x40 */ + 0xA0A3, 0xA0A4, 0xEBBA, 0xA0A5, 0xA0A6, 0xA0A7, 0xEBBB, 0xA0A8, /* 0x50 */ + 0xA0A9, 0xD1C0, 0xA0AA, 0xC5A3, 0xA0AB, 0xEAF2, 0xA0AC, 0xC4B2, /* 0x50 */ + 0xA0AD, 0xC4B5, 0xC0CE, 0xA0AE, 0xA0AF, 0xA0B0, 0xEAF3, 0xC4C1, /* 0x60 */ + 0xA0B1, 0xCEEF, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xEAF0, 0xEAF4, /* 0x60 */ + 0xA0B6, 0xA0B7, 0xC9FC, 0xA0B8, 0xA0B9, 0xC7A3, 0xA0BA, 0xA0BB, /* 0x70 */ + 0xA0BC, 0xCCD8, 0xCEFE, 0xA0BD, 0xA0BE, 0xA0BF, 0xEAF5, 0xEAF6, /* 0x70 */ + 0xCFAC, 0xC0E7, 0xA0C0, 0xA0C1, 0xEAF7, 0xA0C2, 0xA0C3, 0xA0C4, /* 0x80 */ + 0xA0C5, 0xA0C6, 0xB6BF, 0xEAF8, 0xA0C7, 0xEAF9, 0xA0C8, 0xEAFA, /* 0x80 */ + 0xA0C9, 0xA0CA, 0xEAFB, 0xA0CB, 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF, /* 0x90 */ + 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, 0xA0D4, 0xA0D5, 0xA0D6, 0xEAF1, /* 0x90 */ + 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, 0xA0DE, /* 0xA0 */ + 0xA0DF, 0xA0E0, 0xA0E1, 0xA0E2, 0xC8AE, 0xE1EB, 0xA0E3, 0xB7B8, /* 0xA0 */ + 0xE1EC, 0xA0E4, 0xA0E5, 0xA0E6, 0xE1ED, 0xA0E7, 0xD7B4, 0xE1EE, /* 0xB0 */ + 0xE1EF, 0xD3CC, 0xA0E8, 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, /* 0xB0 */ + 0xA0EE, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0xA0EF, 0xA0F0, 0xA0F1, /* 0xC0 */ + 0xB1B7, 0xA0F2, 0xA0F3, 0xA0F4, 0xA0F5, 0xE1F3, 0xE1F2, 0xA0F6, /* 0xC0 */ + 0xBAFC, 0xA0F7, 0xE1F4, 0xA0F8, 0xA0F9, 0xA0FA, 0xA0FB, 0xB9B7, /* 0xD0 */ + 0xA0FC, 0xBED1, 0xA0FD, 0xA0FE, 0xAA40, 0xAA41, 0xC4FC, 0xAA42, /* 0xD0 */ + 0xBADD, 0xBDC6, 0xAA43, 0xAA44, 0xAA45, 0xAA46, 0xAA47, 0xAA48, /* 0xE0 */ + 0xE1F5, 0xE1F7, 0xAA49, 0xAA4A, 0xB6C0, 0xCFC1, 0xCAA8, 0xE1F6, /* 0xE0 */ + 0xD5F8, 0xD3FC, 0xE1F8, 0xE1FC, 0xE1F9, 0xAA4B, 0xAA4C, 0xE1FA, /* 0xF0 */ + 0xC0EA, 0xAA4D, 0xE1FE, 0xE2A1, 0xC0C7, 0xAA4E, 0xAA4F, 0xAA50 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAA51, 0xE1FB, 0xAA52, 0xE1FD, 0xAA53, 0xAA54, 0xAA55, 0xAA56, /* 0x00 */ + 0xAA57, 0xAA58, 0xE2A5, 0xAA59, 0xAA5A, 0xAA5B, 0xC1D4, 0xAA5C, /* 0x00 */ + 0xAA5D, 0xAA5E, 0xAA5F, 0xE2A3, 0xAA60, 0xE2A8, 0xB2FE, 0xE2A2, /* 0x10 */ + 0xAA61, 0xAA62, 0xAA63, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0xAA64, /* 0x10 */ + 0xAA65, 0xE2A4, 0xE2A9, 0xAA66, 0xAA67, 0xE2AB, 0xAA68, 0xAA69, /* 0x20 */ + 0xAA6A, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0xAA6B, 0xCFD7, 0xAA6C, /* 0x20 */ + 0xAA6D, 0xE2AE, 0xAA6E, 0xAA6F, 0xBAEF, 0xAA70, 0xAA71, 0xE9E0, /* 0x30 */ + 0xE2AD, 0xE2AA, 0xAA72, 0xAA73, 0xAA74, 0xAA75, 0xBBAB, 0xD4B3, /* 0x30 */ + 0xAA76, 0xAA77, 0xAA78, 0xAA79, 0xAA7A, 0xAA7B, 0xAA7C, 0xAA7D, /* 0x40 */ + 0xAA7E, 0xAA80, 0xAA81, 0xAA82, 0xAA83, 0xE2B0, 0xAA84, 0xAA85, /* 0x40 */ + 0xE2AF, 0xAA86, 0xE9E1, 0xAA87, 0xAA88, 0xAA89, 0xAA8A, 0xE2B1, /* 0x50 */ + 0xAA8B, 0xAA8C, 0xAA8D, 0xAA8E, 0xAA8F, 0xAA90, 0xAA91, 0xAA92, /* 0x50 */ + 0xE2B2, 0xAA93, 0xAA94, 0xAA95, 0xAA96, 0xAA97, 0xAA98, 0xAA99, /* 0x60 */ + 0xAA9A, 0xAA9B, 0xAA9C, 0xAA9D, 0xE2B3, 0xCCA1, 0xAA9E, 0xE2B4, /* 0x60 */ + 0xAA9F, 0xAAA0, 0xAB40, 0xAB41, 0xAB42, 0xAB43, 0xAB44, 0xAB45, /* 0x70 */ + 0xAB46, 0xAB47, 0xAB48, 0xAB49, 0xAB4A, 0xAB4B, 0xE2B5, 0xAB4C, /* 0x70 */ + 0xAB4D, 0xAB4E, 0xAB4F, 0xAB50, 0xD0FE, 0xAB51, 0xAB52, 0xC2CA, /* 0x80 */ + 0xAB53, 0xD3F1, 0xAB54, 0xCDF5, 0xAB55, 0xAB56, 0xE7E0, 0xAB57, /* 0x80 */ + 0xAB58, 0xE7E1, 0xAB59, 0xAB5A, 0xAB5B, 0xAB5C, 0xBEC1, 0xAB5D, /* 0x90 */ + 0xAB5E, 0xAB5F, 0xAB60, 0xC2EA, 0xAB61, 0xAB62, 0xAB63, 0xE7E4, /* 0x90 */ + 0xAB64, 0xAB65, 0xE7E3, 0xAB66, 0xAB67, 0xAB68, 0xAB69, 0xAB6A, /* 0xA0 */ + 0xAB6B, 0xCDE6, 0xAB6C, 0xC3B5, 0xAB6D, 0xAB6E, 0xE7E2, 0xBBB7, /* 0xA0 */ + 0xCFD6, 0xAB6F, 0xC1E1, 0xE7E9, 0xAB70, 0xAB71, 0xAB72, 0xE7E8, /* 0xB0 */ + 0xAB73, 0xAB74, 0xE7F4, 0xB2A3, 0xAB75, 0xAB76, 0xAB77, 0xAB78, /* 0xB0 */ + 0xE7EA, 0xAB79, 0xE7E6, 0xAB7A, 0xAB7B, 0xAB7C, 0xAB7D, 0xAB7E, /* 0xC0 */ + 0xE7EC, 0xE7EB, 0xC9BA, 0xAB80, 0xAB81, 0xD5E4, 0xAB82, 0xE7E5, /* 0xC0 */ + 0xB7A9, 0xE7E7, 0xAB83, 0xAB84, 0xAB85, 0xAB86, 0xAB87, 0xAB88, /* 0xD0 */ + 0xAB89, 0xE7EE, 0xAB8A, 0xAB8B, 0xAB8C, 0xAB8D, 0xE7F3, 0xAB8E, /* 0xD0 */ + 0xD6E9, 0xAB8F, 0xAB90, 0xAB91, 0xAB92, 0xE7ED, 0xAB93, 0xE7F2, /* 0xE0 */ + 0xAB94, 0xE7F1, 0xAB95, 0xAB96, 0xAB97, 0xB0E0, 0xAB98, 0xAB99, /* 0xE0 */ + 0xAB9A, 0xAB9B, 0xE7F5, 0xAB9C, 0xAB9D, 0xAB9E, 0xAB9F, 0xABA0, /* 0xF0 */ + 0xAC40, 0xAC41, 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAC48, 0xAC49, 0xAC4A, 0xC7F2, 0xAC4B, 0xC0C5, 0xC0ED, 0xAC4C, /* 0x00 */ + 0xAC4D, 0xC1F0, 0xE7F0, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xE7F6, /* 0x00 */ + 0xCBF6, 0xAC52, 0xAC53, 0xAC54, 0xAC55, 0xAC56, 0xAC57, 0xAC58, /* 0x10 */ + 0xAC59, 0xAC5A, 0xE8A2, 0xE8A1, 0xAC5B, 0xAC5C, 0xAC5D, 0xAC5E, /* 0x10 */ + 0xAC5F, 0xAC60, 0xD7C1, 0xAC61, 0xAC62, 0xE7FA, 0xE7F9, 0xAC63, /* 0x20 */ + 0xE7FB, 0xAC64, 0xE7F7, 0xAC65, 0xE7FE, 0xAC66, 0xE7FD, 0xAC67, /* 0x20 */ + 0xE7FC, 0xAC68, 0xAC69, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0xAC6A, /* 0x30 */ + 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, 0xC7ED, 0xAC6F, 0xAC70, 0xAC71, /* 0x30 */ + 0xAC72, 0xE8A3, 0xAC73, 0xAC74, 0xAC75, 0xAC76, 0xAC77, 0xAC78, /* 0x40 */ + 0xAC79, 0xAC7A, 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, 0xAC80, 0xAC81, /* 0x40 */ + 0xAC82, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xE8A6, 0xAC87, 0xE8A5, /* 0x50 */ + 0xAC88, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0xAC89, 0xC8F0, 0xC9AA, /* 0x50 */ + 0xAC8A, 0xAC8B, 0xAC8C, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC90, 0xAC91, /* 0x60 */ + 0xAC92, 0xAC93, 0xAC94, 0xAC95, 0xAC96, 0xE8A9, 0xAC97, 0xAC98, /* 0x60 */ + 0xB9E5, 0xAC99, 0xAC9A, 0xAC9B, 0xAC9C, 0xAC9D, 0xD1FE, 0xE8A8, /* 0x70 */ + 0xAC9E, 0xAC9F, 0xACA0, 0xAD40, 0xAD41, 0xAD42, 0xE8AA, 0xAD43, /* 0x70 */ + 0xE8AD, 0xE8AE, 0xAD44, 0xC1A7, 0xAD45, 0xAD46, 0xAD47, 0xE8AF, /* 0x80 */ + 0xAD48, 0xAD49, 0xAD4A, 0xE8B0, 0xAD4B, 0xAD4C, 0xE8AC, 0xAD4D, /* 0x80 */ + 0xE8B4, 0xAD4E, 0xAD4F, 0xAD50, 0xAD51, 0xAD52, 0xAD53, 0xAD54, /* 0x90 */ + 0xAD55, 0xAD56, 0xAD57, 0xAD58, 0xE8AB, 0xAD59, 0xE8B1, 0xAD5A, /* 0x90 */ + 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, 0xAD60, 0xAD61, 0xE8B5, /* 0xA0 */ + 0xE8B2, 0xE8B3, 0xAD62, 0xAD63, 0xAD64, 0xAD65, 0xAD66, 0xAD67, /* 0xA0 */ + 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6C, 0xAD6D, 0xAD6E, 0xAD6F, /* 0xB0 */ + 0xAD70, 0xAD71, 0xE8B7, 0xAD72, 0xAD73, 0xAD74, 0xAD75, 0xAD76, /* 0xB0 */ + 0xAD77, 0xAD78, 0xAD79, 0xAD7A, 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7E, /* 0xC0 */ + 0xAD80, 0xAD81, 0xAD82, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, /* 0xC0 */ + 0xAD88, 0xAD89, 0xE8B6, 0xAD8A, 0xAD8B, 0xAD8C, 0xAD8D, 0xAD8E, /* 0xD0 */ + 0xAD8F, 0xAD90, 0xAD91, 0xAD92, 0xB9CF, 0xAD93, 0xF0AC, 0xAD94, /* 0xD0 */ + 0xF0AD, 0xAD95, 0xC6B0, 0xB0EA, 0xC8BF, 0xAD96, 0xCDDF, 0xAD97, /* 0xE0 */ + 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9C, 0xAD9D, 0xCECD, 0xEAB1, /* 0xE0 */ + 0xAD9E, 0xAD9F, 0xADA0, 0xAE40, 0xEAB2, 0xAE41, 0xC6BF, 0xB4C9, /* 0xF0 */ + 0xAE42, 0xAE43, 0xAE44, 0xAE45, 0xAE46, 0xAE47, 0xAE48, 0xEAB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAE49, 0xAE4A, 0xAE4B, 0xAE4C, 0xD5E7, 0xAE4D, 0xAE4E, 0xAE4F, /* 0x00 */ + 0xAE50, 0xAE51, 0xAE52, 0xAE53, 0xAE54, 0xDDF9, 0xAE55, 0xEAB4, /* 0x00 */ + 0xAE56, 0xEAB5, 0xAE57, 0xEAB6, 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, /* 0x10 */ + 0xB8CA, 0xDFB0, 0xC9F5, 0xAE5C, 0xCCF0, 0xAE5D, 0xAE5E, 0xC9FA, /* 0x10 */ + 0xAE5F, 0xAE60, 0xAE61, 0xAE62, 0xAE63, 0xC9FB, 0xAE64, 0xAE65, /* 0x20 */ + 0xD3C3, 0xCBA6, 0xAE66, 0xB8A6, 0xF0AE, 0xB1C2, 0xAE67, 0xE5B8, /* 0x20 */ + 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0xAE68, 0xB5E7, 0xAE69, 0xC4D0, /* 0x30 */ + 0xB5E9, 0xAE6A, 0xEEAE, 0xBBAD, 0xAE6B, 0xAE6C, 0xE7DE, 0xAE6D, /* 0x30 */ + 0xEEAF, 0xAE6E, 0xAE6F, 0xAE70, 0xAE71, 0xB3A9, 0xAE72, 0xAE73, /* 0x40 */ + 0xEEB2, 0xAE74, 0xAE75, 0xEEB1, 0xBDE7, 0xAE76, 0xEEB0, 0xCEB7, /* 0x40 */ + 0xAE77, 0xAE78, 0xAE79, 0xAE7A, 0xC5CF, 0xAE7B, 0xAE7C, 0xAE7D, /* 0x50 */ + 0xAE7E, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0xAE80, 0xAE81, 0xAE82, /* 0x50 */ + 0xAE83, 0xAE84, 0xAE85, 0xAE86, 0xAE87, 0xC2D4, 0xC6E8, 0xAE88, /* 0x60 */ + 0xAE89, 0xAE8A, 0xB7AC, 0xAE8B, 0xAE8C, 0xAE8D, 0xAE8E, 0xAE8F, /* 0x60 */ + 0xAE90, 0xAE91, 0xEEB4, 0xAE92, 0xB3EB, 0xAE93, 0xAE94, 0xAE95, /* 0x70 */ + 0xBBFB, 0xEEB5, 0xAE96, 0xAE97, 0xAE98, 0xAE99, 0xAE9A, 0xE7DC, /* 0x70 */ + 0xAE9B, 0xAE9C, 0xAE9D, 0xEEB6, 0xAE9E, 0xAE9F, 0xBDAE, 0xAEA0, /* 0x80 */ + 0xAF40, 0xAF41, 0xAF42, 0xF1E2, 0xAF43, 0xAF44, 0xAF45, 0xCAE8, /* 0x80 */ + 0xAF46, 0xD2C9, 0xF0DA, 0xAF47, 0xF0DB, 0xAF48, 0xF0DC, 0xC1C6, /* 0x90 */ + 0xAF49, 0xB8ED, 0xBECE, 0xAF4A, 0xAF4B, 0xF0DE, 0xAF4C, 0xC5B1, /* 0x90 */ + 0xF0DD, 0xD1F1, 0xAF4D, 0xF0E0, 0xB0CC, 0xBDEA, 0xAF4E, 0xAF4F, /* 0xA0 */ + 0xAF50, 0xAF51, 0xAF52, 0xD2DF, 0xF0DF, 0xAF53, 0xB4AF, 0xB7E8, /* 0xA0 */ + 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0xAF54, 0xAF55, /* 0xB0 */ + 0xF0E3, 0xD5EE, 0xAF56, 0xAF57, 0xCCDB, 0xBED2, 0xBCB2, 0xAF58, /* 0xB0 */ + 0xAF59, 0xAF5A, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0xAF5B, 0xD6A2, /* 0xC0 */ + 0xD3B8, 0xBEB7, 0xC8AC, 0xAF5C, 0xAF5D, 0xF0EA, 0xAF5E, 0xAF5F, /* 0xC0 */ + 0xAF60, 0xAF61, 0xD1F7, 0xAF62, 0xD6CC, 0xBADB, 0xF0E9, 0xAF63, /* 0xD0 */ + 0xB6BB, 0xAF64, 0xAF65, 0xCDB4, 0xAF66, 0xAF67, 0xC6A6, 0xAF68, /* 0xD0 */ + 0xAF69, 0xAF6A, 0xC1A1, 0xF0EB, 0xF0EE, 0xAF6B, 0xF0ED, 0xF0F0, /* 0xE0 */ + 0xF0EC, 0xAF6C, 0xBBBE, 0xF0EF, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, /* 0xE0 */ + 0xCCB5, 0xF0F2, 0xAF71, 0xAF72, 0xB3D5, 0xAF73, 0xAF74, 0xAF75, /* 0xF0 */ + 0xAF76, 0xB1D4, 0xAF77, 0xAF78, 0xF0F3, 0xAF79, 0xAF7A, 0xF0F4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0F6, 0xB4E1, 0xAF7B, 0xF0F1, 0xAF7C, 0xF0F7, 0xAF7D, 0xAF7E, /* 0x00 */ + 0xAF80, 0xAF81, 0xF0FA, 0xAF82, 0xF0F8, 0xAF83, 0xAF84, 0xAF85, /* 0x00 */ + 0xF0F5, 0xAF86, 0xAF87, 0xAF88, 0xAF89, 0xF0FD, 0xAF8A, 0xF0F9, /* 0x10 */ + 0xF0FC, 0xF0FE, 0xAF8B, 0xF1A1, 0xAF8C, 0xAF8D, 0xAF8E, 0xCEC1, /* 0x10 */ + 0xF1A4, 0xAF8F, 0xF1A3, 0xAF90, 0xC1F6, 0xF0FB, 0xCADD, 0xAF91, /* 0x20 */ + 0xAF92, 0xB4F1, 0xB1F1, 0xCCB1, 0xAF93, 0xF1A6, 0xAF94, 0xAF95, /* 0x20 */ + 0xF1A7, 0xAF96, 0xAF97, 0xF1AC, 0xD5CE, 0xF1A9, 0xAF98, 0xAF99, /* 0x30 */ + 0xC8B3, 0xAF9A, 0xAF9B, 0xAF9C, 0xF1A2, 0xAF9D, 0xF1AB, 0xF1A8, /* 0x30 */ + 0xF1A5, 0xAF9E, 0xAF9F, 0xF1AA, 0xAFA0, 0xB040, 0xB041, 0xB042, /* 0x40 */ + 0xB043, 0xB044, 0xB045, 0xB046, 0xB0A9, 0xF1AD, 0xB047, 0xB048, /* 0x40 */ + 0xB049, 0xB04A, 0xB04B, 0xB04C, 0xF1AF, 0xB04D, 0xF1B1, 0xB04E, /* 0x50 */ + 0xB04F, 0xB050, 0xB051, 0xB052, 0xF1B0, 0xB053, 0xF1AE, 0xB054, /* 0x50 */ + 0xB055, 0xB056, 0xB057, 0xD1A2, 0xB058, 0xB059, 0xB05A, 0xB05B, /* 0x60 */ + 0xB05C, 0xB05D, 0xB05E, 0xF1B2, 0xB05F, 0xB060, 0xB061, 0xF1B3, /* 0x60 */ + 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, 0xB067, 0xB068, 0xB069, /* 0x70 */ + 0xB9EF, 0xB06A, 0xB06B, 0xB5C7, 0xB06C, 0xB0D7, 0xB0D9, 0xB06D, /* 0x70 */ + 0xB06E, 0xB06F, 0xD4ED, 0xB070, 0xB5C4, 0xB071, 0xBDD4, 0xBBCA, /* 0x80 */ + 0xF0A7, 0xB072, 0xB073, 0xB8DE, 0xB074, 0xB075, 0xF0A8, 0xB076, /* 0x80 */ + 0xB077, 0xB0A8, 0xB078, 0xF0A9, 0xB079, 0xB07A, 0xCDEE, 0xB07B, /* 0x90 */ + 0xB07C, 0xF0AA, 0xB07D, 0xB07E, 0xB080, 0xB081, 0xB082, 0xB083, /* 0x90 */ + 0xB084, 0xB085, 0xB086, 0xB087, 0xF0AB, 0xB088, 0xB089, 0xB08A, /* 0xA0 */ + 0xB08B, 0xB08C, 0xB08D, 0xB08E, 0xB08F, 0xB090, 0xC6A4, 0xB091, /* 0xA0 */ + 0xB092, 0xD6E5, 0xF1E4, 0xB093, 0xF1E5, 0xB094, 0xB095, 0xB096, /* 0xB0 */ + 0xB097, 0xB098, 0xB099, 0xB09A, 0xB09B, 0xB09C, 0xB09D, 0xC3F3, /* 0xB0 */ + 0xB09E, 0xB09F, 0xD3DB, 0xB0A0, 0xB140, 0xD6D1, 0xC5E8, 0xB141, /* 0xC0 */ + 0xD3AF, 0xB142, 0xD2E6, 0xB143, 0xB144, 0xEEC1, 0xB0BB, 0xD5B5, /* 0xC0 */ + 0xD1CE, 0xBCE0, 0xBAD0, 0xB145, 0xBFF8, 0xB146, 0xB8C7, 0xB5C1, /* 0xD0 */ + 0xC5CC, 0xB147, 0xB148, 0xCAA2, 0xB149, 0xB14A, 0xB14B, 0xC3CB, /* 0xD0 */ + 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB150, 0xEEC2, 0xB151, 0xB152, /* 0xE0 */ + 0xB153, 0xB154, 0xB155, 0xB156, 0xB157, 0xB158, 0xC4BF, 0xB6A2, /* 0xE0 */ + 0xB159, 0xEDEC, 0xC3A4, 0xB15A, 0xD6B1, 0xB15B, 0xB15C, 0xB15D, /* 0xF0 */ + 0xCFE0, 0xEDEF, 0xB15E, 0xB15F, 0xC5CE, 0xB160, 0xB6DC, 0xB161 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB162, 0xCAA1, 0xB163, 0xB164, 0xEDED, 0xB165, 0xB166, 0xEDF0, /* 0x00 */ + 0xEDF1, 0xC3BC, 0xB167, 0xBFB4, 0xB168, 0xEDEE, 0xB169, 0xB16A, /* 0x00 */ + 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, 0xB171, 0xB172, /* 0x10 */ + 0xB173, 0xEDF4, 0xEDF2, 0xB174, 0xB175, 0xB176, 0xB177, 0xD5E6, /* 0x10 */ + 0xC3DF, 0xB178, 0xEDF3, 0xB179, 0xB17A, 0xB17B, 0xEDF6, 0xB17C, /* 0x20 */ + 0xD5A3, 0xD1A3, 0xB17D, 0xB17E, 0xB180, 0xEDF5, 0xB181, 0xC3D0, /* 0x20 */ + 0xB182, 0xB183, 0xB184, 0xB185, 0xB186, 0xEDF7, 0xBFF4, 0xBEEC, /* 0x30 */ + 0xEDF8, 0xB187, 0xCCF7, 0xB188, 0xD1DB, 0xB189, 0xB18A, 0xB18B, /* 0x30 */ + 0xD7C5, 0xD5F6, 0xB18C, 0xEDFC, 0xB18D, 0xB18E, 0xB18F, 0xEDFB, /* 0x40 */ + 0xB190, 0xB191, 0xB192, 0xB193, 0xB194, 0xB195, 0xB196, 0xB197, /* 0x40 */ + 0xEDF9, 0xEDFA, 0xB198, 0xB199, 0xB19A, 0xB19B, 0xB19C, 0xB19D, /* 0x50 */ + 0xB19E, 0xB19F, 0xEDFD, 0xBEA6, 0xB1A0, 0xB240, 0xB241, 0xB242, /* 0x50 */ + 0xB243, 0xCBAF, 0xEEA1, 0xB6BD, 0xB244, 0xEEA2, 0xC4C0, 0xB245, /* 0x60 */ + 0xEDFE, 0xB246, 0xB247, 0xBDDE, 0xB2C7, 0xB248, 0xB249, 0xB24A, /* 0x60 */ + 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, /* 0x70 */ + 0xB253, 0xB6C3, 0xB254, 0xB255, 0xB256, 0xEEA5, 0xD8BA, 0xEEA3, /* 0x70 */ + 0xEEA6, 0xB257, 0xB258, 0xB259, 0xC3E9, 0xB3F2, 0xB25A, 0xB25B, /* 0x80 */ + 0xB25C, 0xB25D, 0xB25E, 0xB25F, 0xEEA7, 0xEEA4, 0xCFB9, 0xB260, /* 0x80 */ + 0xB261, 0xEEA8, 0xC2F7, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, /* 0x90 */ + 0xB267, 0xB268, 0xB269, 0xB26A, 0xB26B, 0xB26C, 0xB26D, 0xEEA9, /* 0x90 */ + 0xEEAA, 0xB26E, 0xDEAB, 0xB26F, 0xB270, 0xC6B3, 0xB271, 0xC7C6, /* 0xA0 */ + 0xB272, 0xD6F5, 0xB5C9, 0xB273, 0xCBB2, 0xB274, 0xB275, 0xB276, /* 0xA0 */ + 0xEEAB, 0xB277, 0xB278, 0xCDAB, 0xB279, 0xEEAC, 0xB27A, 0xB27B, /* 0xB0 */ + 0xB27C, 0xB27D, 0xB27E, 0xD5B0, 0xB280, 0xEEAD, 0xB281, 0xF6C4, /* 0xB0 */ + 0xB282, 0xB283, 0xB284, 0xB285, 0xB286, 0xB287, 0xB288, 0xB289, /* 0xC0 */ + 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, 0xDBC7, 0xB28F, 0xB290, /* 0xC0 */ + 0xB291, 0xB292, 0xB293, 0xB294, 0xB295, 0xB296, 0xB297, 0xB4A3, /* 0xD0 */ + 0xB298, 0xB299, 0xB29A, 0xC3AC, 0xF1E6, 0xB29B, 0xB29C, 0xB29D, /* 0xD0 */ + 0xB29E, 0xB29F, 0xCAB8, 0xD2D3, 0xB2A0, 0xD6AA, 0xB340, 0xEFF2, /* 0xE0 */ + 0xB341, 0xBED8, 0xB342, 0xBDC3, 0xEFF3, 0xB6CC, 0xB0AB, 0xB343, /* 0xE0 */ + 0xB344, 0xB345, 0xB346, 0xCAAF, 0xB347, 0xB348, 0xEDB6, 0xB349, /* 0xF0 */ + 0xEDB7, 0xB34A, 0xB34B, 0xB34C, 0xB34D, 0xCEF9, 0xB7AF, 0xBFF3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDB8, 0xC2EB, 0xC9B0, 0xB34E, 0xB34F, 0xB350, 0xB351, 0xB352, /* 0x00 */ + 0xB353, 0xEDB9, 0xB354, 0xB355, 0xC6F6, 0xBFB3, 0xB356, 0xB357, /* 0x00 */ + 0xB358, 0xEDBC, 0xC5F8, 0xB359, 0xD1D0, 0xB35A, 0xD7A9, 0xEDBA, /* 0x10 */ + 0xEDBB, 0xB35B, 0xD1E2, 0xB35C, 0xEDBF, 0xEDC0, 0xB35D, 0xEDC4, /* 0x10 */ + 0xB35E, 0xB35F, 0xB360, 0xEDC8, 0xB361, 0xEDC6, 0xEDCE, 0xD5E8, /* 0x20 */ + 0xB362, 0xEDC9, 0xB363, 0xB364, 0xEDC7, 0xEDBE, 0xB365, 0xB366, /* 0x20 */ + 0xC5E9, 0xB367, 0xB368, 0xB369, 0xC6C6, 0xB36A, 0xB36B, 0xC9E9, /* 0x30 */ + 0xD4D2, 0xEDC1, 0xEDC2, 0xEDC3, 0xEDC5, 0xB36C, 0xC0F9, 0xB36D, /* 0x30 */ + 0xB4A1, 0xB36E, 0xB36F, 0xB370, 0xB371, 0xB9E8, 0xB372, 0xEDD0, /* 0x40 */ + 0xB373, 0xB374, 0xB375, 0xB376, 0xEDD1, 0xB377, 0xEDCA, 0xB378, /* 0x40 */ + 0xEDCF, 0xB379, 0xCEF8, 0xB37A, 0xB37B, 0xCBB6, 0xEDCC, 0xEDCD, /* 0x50 */ + 0xB37C, 0xB37D, 0xB37E, 0xB380, 0xB381, 0xCFF5, 0xB382, 0xB383, /* 0x50 */ + 0xB384, 0xB385, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, /* 0x60 */ + 0xB38C, 0xB38D, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xC8B7, 0xB38E, /* 0x60 */ + 0xB38F, 0xB390, 0xB391, 0xB392, 0xB393, 0xB394, 0xB395, 0xBCEF, /* 0x70 */ + 0xB396, 0xB397, 0xB398, 0xB399, 0xC5F0, 0xB39A, 0xB39B, 0xB39C, /* 0x70 */ + 0xB39D, 0xB39E, 0xB39F, 0xB3A0, 0xB440, 0xB441, 0xB442, 0xEDD6, /* 0x80 */ + 0xB443, 0xB5EF, 0xB444, 0xB445, 0xC2B5, 0xB0AD, 0xCBE9, 0xB446, /* 0x80 */ + 0xB447, 0xB1AE, 0xB448, 0xEDD4, 0xB449, 0xB44A, 0xB44B, 0xCDEB, /* 0x90 */ + 0xB5E2, 0xB44C, 0xEDD5, 0xEDD3, 0xEDD7, 0xB44D, 0xB44E, 0xB5FA, /* 0x90 */ + 0xB44F, 0xEDD8, 0xB450, 0xEDD9, 0xB451, 0xEDDC, 0xB452, 0xB1CC, /* 0xA0 */ + 0xB453, 0xB454, 0xB455, 0xB456, 0xB457, 0xB458, 0xB459, 0xB45A, /* 0xA0 */ + 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0xB45B, 0xB45C, 0xB45D, /* 0xB0 */ + 0xB45E, 0xEDDB, 0xB45F, 0xB460, 0xB461, 0xB462, 0xC4EB, 0xB463, /* 0xB0 */ + 0xB464, 0xB4C5, 0xB465, 0xB466, 0xB467, 0xB0F5, 0xB468, 0xB469, /* 0xC0 */ + 0xB46A, 0xEDDF, 0xC0DA, 0xB4E8, 0xB46B, 0xB46C, 0xB46D, 0xB46E, /* 0xC0 */ + 0xC5CD, 0xB46F, 0xB470, 0xB471, 0xEDDD, 0xBFC4, 0xB472, 0xB473, /* 0xD0 */ + 0xB474, 0xEDDE, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, /* 0xD0 */ + 0xB47B, 0xB47C, 0xB47D, 0xB47E, 0xB480, 0xB481, 0xB482, 0xB483, /* 0xE0 */ + 0xC4A5, 0xB484, 0xB485, 0xB486, 0xEDE0, 0xB487, 0xB488, 0xB489, /* 0xE0 */ + 0xB48A, 0xB48B, 0xEDE1, 0xB48C, 0xEDE3, 0xB48D, 0xB48E, 0xC1D7, /* 0xF0 */ + 0xB48F, 0xB490, 0xBBC7, 0xB491, 0xB492, 0xB493, 0xB494, 0xB495 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB496, 0xBDB8, 0xB497, 0xB498, 0xB499, 0xEDE2, 0xB49A, 0xB49B, /* 0x00 */ + 0xB49C, 0xB49D, 0xB49E, 0xB49F, 0xB4A0, 0xB540, 0xB541, 0xB542, /* 0x00 */ + 0xB543, 0xB544, 0xB545, 0xEDE4, 0xB546, 0xB547, 0xB548, 0xB549, /* 0x10 */ + 0xB54A, 0xB54B, 0xB54C, 0xB54D, 0xB54E, 0xB54F, 0xEDE6, 0xB550, /* 0x10 */ + 0xB551, 0xB552, 0xB553, 0xB554, 0xEDE5, 0xB555, 0xB556, 0xB557, /* 0x20 */ + 0xB558, 0xB559, 0xB55A, 0xB55B, 0xB55C, 0xB55D, 0xB55E, 0xB55F, /* 0x20 */ + 0xB560, 0xB561, 0xB562, 0xB563, 0xEDE7, 0xB564, 0xB565, 0xB566, /* 0x30 */ + 0xB567, 0xB568, 0xCABE, 0xECEA, 0xC0F1, 0xB569, 0xC9E7, 0xB56A, /* 0x30 */ + 0xECEB, 0xC6EE, 0xB56B, 0xB56C, 0xB56D, 0xB56E, 0xECEC, 0xB56F, /* 0x40 */ + 0xC6ED, 0xECED, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, /* 0x40 */ + 0xB576, 0xB577, 0xB578, 0xECF0, 0xB579, 0xB57A, 0xD7E6, 0xECF3, /* 0x50 */ + 0xB57B, 0xB57C, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, /* 0x50 */ + 0xECF4, 0xB57D, 0xECF2, 0xB57E, 0xB580, 0xCFE9, 0xB581, 0xECF6, /* 0x60 */ + 0xC6B1, 0xB582, 0xB583, 0xB584, 0xB585, 0xBCC0, 0xB586, 0xECF5, /* 0x60 */ + 0xB587, 0xB588, 0xB589, 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB5BB, /* 0x70 */ + 0xBBF6, 0xB58E, 0xECF7, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, /* 0x70 */ + 0xD9F7, 0xBDFB, 0xB594, 0xB595, 0xC2BB, 0xECF8, 0xB596, 0xB597, /* 0x80 */ + 0xB598, 0xB599, 0xECF9, 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB8A3, /* 0x80 */ + 0xB59E, 0xB59F, 0xB5A0, 0xB640, 0xB641, 0xB642, 0xB643, 0xB644, /* 0x90 */ + 0xB645, 0xB646, 0xECFA, 0xB647, 0xB648, 0xB649, 0xB64A, 0xB64B, /* 0x90 */ + 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, 0xECFB, /* 0xA0 */ + 0xB653, 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, /* 0xA0 */ + 0xB65B, 0xB65C, 0xB65D, 0xECFC, 0xB65E, 0xB65F, 0xB660, 0xB661, /* 0xB0 */ + 0xB662, 0xD3ED, 0xD8AE, 0xC0EB, 0xB663, 0xC7DD, 0xBACC, 0xB664, /* 0xB0 */ + 0xD0E3, 0xCBBD, 0xB665, 0xCDBA, 0xB666, 0xB667, 0xB8D1, 0xB668, /* 0xC0 */ + 0xB669, 0xB1FC, 0xB66A, 0xC7EF, 0xB66B, 0xD6D6, 0xB66C, 0xB66D, /* 0xC0 */ + 0xB66E, 0xBFC6, 0xC3EB, 0xB66F, 0xB670, 0xEFF5, 0xB671, 0xB672, /* 0xD0 */ + 0xC3D8, 0xB673, 0xB674, 0xB675, 0xB676, 0xB677, 0xB678, 0xD7E2, /* 0xD0 */ + 0xB679, 0xB67A, 0xB67B, 0xEFF7, 0xB3D3, 0xB67C, 0xC7D8, 0xD1ED, /* 0xE0 */ + 0xB67D, 0xD6C8, 0xB67E, 0xEFF8, 0xB680, 0xEFF6, 0xB681, 0xBBFD, /* 0xE0 */ + 0xB3C6, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, /* 0xF0 */ + 0xBDD5, 0xB689, 0xB68A, 0xD2C6, 0xB68B, 0xBBE0, 0xB68C, 0xB68D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFA1, 0xB68E, 0xEFFC, 0xEFFB, 0xB68F, 0xB690, 0xEFF9, 0xB691, /* 0x00 */ + 0xB692, 0xB693, 0xB694, 0xB3CC, 0xB695, 0xC9D4, 0xCBB0, 0xB696, /* 0x00 */ + 0xB697, 0xB698, 0xB699, 0xB69A, 0xEFFE, 0xB69B, 0xB69C, 0xB0DE, /* 0x10 */ + 0xB69D, 0xB69E, 0xD6C9, 0xB69F, 0xB6A0, 0xB740, 0xEFFD, 0xB741, /* 0x10 */ + 0xB3ED, 0xB742, 0xB743, 0xF6D5, 0xB744, 0xB745, 0xB746, 0xB747, /* 0x20 */ + 0xB748, 0xB749, 0xB74A, 0xB74B, 0xB74C, 0xB74D, 0xB74E, 0xB74F, /* 0x20 */ + 0xB750, 0xB751, 0xB752, 0xCEC8, 0xB753, 0xB754, 0xB755, 0xF0A2, /* 0x30 */ + 0xB756, 0xF0A1, 0xB757, 0xB5BE, 0xBCDA, 0xBBFC, 0xB758, 0xB8E5, /* 0x30 */ + 0xB759, 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xC4C2, 0xB75F, /* 0x40 */ + 0xB760, 0xB761, 0xB762, 0xB763, 0xB764, 0xB765, 0xB766, 0xB767, /* 0x40 */ + 0xB768, 0xF0A3, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xCBEB, /* 0x50 */ + 0xB76E, 0xB76F, 0xB770, 0xB771, 0xB772, 0xB773, 0xB774, 0xB775, /* 0x50 */ + 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, 0xB77C, 0xB77D, /* 0x60 */ + 0xB77E, 0xB780, 0xB781, 0xB782, 0xB783, 0xB784, 0xB785, 0xB786, /* 0x60 */ + 0xF0A6, 0xB787, 0xB788, 0xB789, 0xD1A8, 0xB78A, 0xBEBF, 0xC7EE, /* 0x70 */ + 0xF1B6, 0xF1B7, 0xBFD5, 0xB78B, 0xB78C, 0xB78D, 0xB78E, 0xB4A9, /* 0x70 */ + 0xF1B8, 0xCDBB, 0xB78F, 0xC7D4, 0xD5AD, 0xB790, 0xF1B9, 0xB791, /* 0x80 */ + 0xF1BA, 0xB792, 0xB793, 0xB794, 0xB795, 0xC7CF, 0xB796, 0xB797, /* 0x80 */ + 0xB798, 0xD2A4, 0xD6CF, 0xB799, 0xB79A, 0xF1BB, 0xBDD1, 0xB4B0, /* 0x90 */ + 0xBEBD, 0xB79B, 0xB79C, 0xB79D, 0xB4DC, 0xCED1, 0xB79E, 0xBFDF, /* 0x90 */ + 0xF1BD, 0xB79F, 0xB7A0, 0xB840, 0xB841, 0xBFFA, 0xF1BC, 0xB842, /* 0xA0 */ + 0xF1BF, 0xB843, 0xB844, 0xB845, 0xF1BE, 0xF1C0, 0xB846, 0xB847, /* 0xA0 */ + 0xB848, 0xB849, 0xB84A, 0xF1C1, 0xB84B, 0xB84C, 0xB84D, 0xB84E, /* 0xB0 */ + 0xB84F, 0xB850, 0xB851, 0xB852, 0xB853, 0xB854, 0xB855, 0xC1FE, /* 0xB0 */ + 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, 0xB85C, 0xB85D, /* 0xC0 */ + 0xB85E, 0xB85F, 0xB860, 0xC1A2, 0xB861, 0xB862, 0xB863, 0xB864, /* 0xC0 */ + 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, 0xCAFA, 0xB86B, /* 0xD0 */ + 0xB86C, 0xD5BE, 0xB86D, 0xB86E, 0xB86F, 0xB870, 0xBEBA, 0xBEB9, /* 0xD0 */ + 0xD5C2, 0xB871, 0xB872, 0xBFA2, 0xB873, 0xCDAF, 0xF1B5, 0xB874, /* 0xE0 */ + 0xB875, 0xB876, 0xB877, 0xB878, 0xB879, 0xBDDF, 0xB87A, 0xB6CB, /* 0xE0 */ + 0xB87B, 0xB87C, 0xB87D, 0xB87E, 0xB880, 0xB881, 0xB882, 0xB883, /* 0xF0 */ + 0xB884, 0xD6F1, 0xF3C3, 0xB885, 0xB886, 0xF3C4, 0xB887, 0xB8CD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB888, 0xB889, 0xB88A, 0xF3C6, 0xF3C7, 0xB88B, 0xB0CA, 0xB88C, /* 0x00 */ + 0xF3C5, 0xB88D, 0xF3C9, 0xCBF1, 0xB88E, 0xB88F, 0xB890, 0xF3CB, /* 0x00 */ + 0xB891, 0xD0A6, 0xB892, 0xB893, 0xB1CA, 0xF3C8, 0xB894, 0xB895, /* 0x10 */ + 0xB896, 0xF3CF, 0xB897, 0xB5D1, 0xB898, 0xB899, 0xF3D7, 0xB89A, /* 0x10 */ + 0xF3D2, 0xB89B, 0xB89C, 0xB89D, 0xF3D4, 0xF3D3, 0xB7FB, 0xB89E, /* 0x20 */ + 0xB1BF, 0xB89F, 0xF3CE, 0xF3CA, 0xB5DA, 0xB8A0, 0xF3D0, 0xB940, /* 0x20 */ + 0xB941, 0xF3D1, 0xB942, 0xF3D5, 0xB943, 0xB944, 0xB945, 0xB946, /* 0x30 */ + 0xF3CD, 0xB947, 0xBCE3, 0xB948, 0xC1FD, 0xB949, 0xF3D6, 0xB94A, /* 0x30 */ + 0xB94B, 0xB94C, 0xB94D, 0xB94E, 0xB94F, 0xF3DA, 0xB950, 0xF3CC, /* 0x40 */ + 0xB951, 0xB5C8, 0xB952, 0xBDEE, 0xF3DC, 0xB953, 0xB954, 0xB7A4, /* 0x40 */ + 0xBFF0, 0xD6FE, 0xCDB2, 0xB955, 0xB4F0, 0xB956, 0xB2DF, 0xB957, /* 0x50 */ + 0xF3D8, 0xB958, 0xF3D9, 0xC9B8, 0xB959, 0xF3DD, 0xB95A, 0xB95B, /* 0x50 */ + 0xF3DE, 0xB95C, 0xF3E1, 0xB95D, 0xB95E, 0xB95F, 0xB960, 0xB961, /* 0x60 */ + 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xF3DF, 0xB968, /* 0x60 */ + 0xB969, 0xF3E3, 0xF3E2, 0xB96A, 0xB96B, 0xF3DB, 0xB96C, 0xBFEA, /* 0x70 */ + 0xB96D, 0xB3EF, 0xB96E, 0xF3E0, 0xB96F, 0xB970, 0xC7A9, 0xB971, /* 0x70 */ + 0xBCF2, 0xB972, 0xB973, 0xB974, 0xB975, 0xF3EB, 0xB976, 0xB977, /* 0x80 */ + 0xB978, 0xB979, 0xB97A, 0xB97B, 0xB97C, 0xB9BF, 0xB97D, 0xB97E, /* 0x80 */ + 0xF3E4, 0xB980, 0xB981, 0xB982, 0xB2AD, 0xBBFE, 0xB983, 0xCBE3, /* 0x90 */ + 0xB984, 0xB985, 0xB986, 0xB987, 0xF3ED, 0xF3E9, 0xB988, 0xB989, /* 0x90 */ + 0xB98A, 0xB9DC, 0xF3EE, 0xB98B, 0xB98C, 0xB98D, 0xF3E5, 0xF3E6, /* 0xA0 */ + 0xF3EA, 0xC2E1, 0xF3EC, 0xF3EF, 0xF3E8, 0xBCFD, 0xB98E, 0xB98F, /* 0xA0 */ + 0xB990, 0xCFE4, 0xB991, 0xB992, 0xF3F0, 0xB993, 0xB994, 0xB995, /* 0xB0 */ + 0xF3E7, 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, /* 0xB0 */ + 0xB99D, 0xF3F2, 0xB99E, 0xB99F, 0xB9A0, 0xBA40, 0xD7AD, 0xC6AA, /* 0xC0 */ + 0xBA41, 0xBA42, 0xBA43, 0xBA44, 0xF3F3, 0xBA45, 0xBA46, 0xBA47, /* 0xC0 */ + 0xBA48, 0xF3F1, 0xBA49, 0xC2A8, 0xBA4A, 0xBA4B, 0xBA4C, 0xBA4D, /* 0xD0 */ + 0xBA4E, 0xB8DD, 0xF3F5, 0xBA4F, 0xBA50, 0xF3F4, 0xBA51, 0xBA52, /* 0xD0 */ + 0xBA53, 0xB4DB, 0xBA54, 0xBA55, 0xBA56, 0xF3F6, 0xF3F7, 0xBA57, /* 0xE0 */ + 0xBA58, 0xBA59, 0xF3F8, 0xBA5A, 0xBA5B, 0xBA5C, 0xC0BA, 0xBA5D, /* 0xE0 */ + 0xBA5E, 0xC0E9, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, 0xBA63, 0xC5F1, /* 0xF0 */ + 0xBA64, 0xBA65, 0xBA66, 0xBA67, 0xF3FB, 0xBA68, 0xF3FA, 0xBA69 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA70, 0xB4D8, /* 0x00 */ + 0xBA71, 0xBA72, 0xBA73, 0xF3FE, 0xF3F9, 0xBA74, 0xBA75, 0xF3FC, /* 0x00 */ + 0xBA76, 0xBA77, 0xBA78, 0xBA79, 0xBA7A, 0xBA7B, 0xF3FD, 0xBA7C, /* 0x10 */ + 0xBA7D, 0xBA7E, 0xBA80, 0xBA81, 0xBA82, 0xBA83, 0xBA84, 0xF4A1, /* 0x10 */ + 0xBA85, 0xBA86, 0xBA87, 0xBA88, 0xBA89, 0xBA8A, 0xF4A3, 0xBBC9, /* 0x20 */ + 0xBA8B, 0xBA8C, 0xF4A2, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, /* 0x20 */ + 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, /* 0x30 */ + 0xF4A4, 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xB2BE, /* 0x30 */ + 0xF4A6, 0xF4A5, 0xBAA0, 0xBB40, 0xBB41, 0xBB42, 0xBB43, 0xBB44, /* 0x40 */ + 0xBB45, 0xBB46, 0xBB47, 0xBB48, 0xBB49, 0xBCAE, 0xBB4A, 0xBB4B, /* 0x40 */ + 0xBB4C, 0xBB4D, 0xBB4E, 0xBB4F, 0xBB50, 0xBB51, 0xBB52, 0xBB53, /* 0x50 */ + 0xBB54, 0xBB55, 0xBB56, 0xBB57, 0xBB58, 0xBB59, 0xBB5A, 0xBB5B, /* 0x50 */ + 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB61, 0xBB62, 0xBB63, /* 0x60 */ + 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, /* 0x60 */ + 0xBB6C, 0xBB6D, 0xBB6E, 0xC3D7, 0xD9E1, 0xBB6F, 0xBB70, 0xBB71, /* 0x70 */ + 0xBB72, 0xBB73, 0xBB74, 0xC0E0, 0xF4CC, 0xD7D1, 0xBB75, 0xBB76, /* 0x70 */ + 0xBB77, 0xBB78, 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, /* 0x80 */ + 0xBB80, 0xB7DB, 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, /* 0x80 */ + 0xBB87, 0xF4CE, 0xC1A3, 0xBB88, 0xBB89, 0xC6C9, 0xBB8A, 0xB4D6, /* 0x90 */ + 0xD5B3, 0xBB8B, 0xBB8C, 0xBB8D, 0xF4D0, 0xF4CF, 0xF4D1, 0xCBDA, /* 0x90 */ + 0xBB8E, 0xBB8F, 0xF4D2, 0xBB90, 0xD4C1, 0xD6E0, 0xBB91, 0xBB92, /* 0xA0 */ + 0xBB93, 0xBB94, 0xB7E0, 0xBB95, 0xBB96, 0xBB97, 0xC1B8, 0xBB98, /* 0xA0 */ + 0xBB99, 0xC1BB, 0xF4D3, 0xBEAC, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, /* 0xB0 */ + 0xBB9E, 0xB4E2, 0xBB9F, 0xBBA0, 0xF4D4, 0xF4D5, 0xBEAB, 0xBC40, /* 0xB0 */ + 0xBC41, 0xF4D6, 0xBC42, 0xBC43, 0xBC44, 0xF4DB, 0xBC45, 0xF4D7, /* 0xC0 */ + 0xF4DA, 0xBC46, 0xBAFD, 0xBC47, 0xF4D8, 0xF4D9, 0xBC48, 0xBC49, /* 0xC0 */ + 0xBC4A, 0xBC4B, 0xBC4C, 0xBC4D, 0xBC4E, 0xB8E2, 0xCCC7, 0xF4DC, /* 0xD0 */ + 0xBC4F, 0xB2DA, 0xBC50, 0xBC51, 0xC3D3, 0xBC52, 0xBC53, 0xD4E3, /* 0xD0 */ + 0xBFB7, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, /* 0xE0 */ + 0xF4DD, 0xBC5B, 0xBC5C, 0xBC5D, 0xBC5E, 0xBC5F, 0xBC60, 0xC5B4, /* 0xE0 */ + 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, /* 0xF0 */ + 0xF4E9, 0xBC69, 0xBC6A, 0xCFB5, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, /* 0x00 */ + 0xBC77, 0xBC78, 0xCEC9, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, /* 0x00 */ + 0xBC7E, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0xBC84, 0xBC85, 0xBC86, /* 0x10 */ + 0xBC87, 0xBC88, 0xBC89, 0xBC8A, 0xBC8B, 0xBC8C, 0xBC8D, 0xBC8E, /* 0x10 */ + 0xCBD8, 0xBC8F, 0xCBF7, 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBDF4, /* 0x20 */ + 0xBC94, 0xBC95, 0xBC96, 0xD7CF, 0xBC97, 0xBC98, 0xBC99, 0xC0DB, /* 0x20 */ + 0xBC9A, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA0, 0xBD40, /* 0x30 */ + 0xBD41, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD48, /* 0x30 */ + 0xBD49, 0xBD4A, 0xBD4B, 0xBD4C, 0xBD4D, 0xBD4E, 0xBD4F, 0xBD50, /* 0x40 */ + 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57, 0xBD58, /* 0x40 */ + 0xBD59, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, 0xBD60, /* 0x50 */ + 0xBD61, 0xBD62, 0xBD63, 0xBD64, 0xBD65, 0xBD66, 0xBD67, 0xBD68, /* 0x50 */ + 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, /* 0x60 */ + 0xBD71, 0xBD72, 0xBD73, 0xBD74, 0xBD75, 0xBD76, 0xD0F5, 0xBD77, /* 0x60 */ + 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xF4EA, /* 0x70 */ + 0xBD80, 0xBD81, 0xBD82, 0xBD83, 0xBD84, 0xBD85, 0xBD86, 0xBD87, /* 0x70 */ + 0xBD88, 0xBD89, 0xBD8A, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, /* 0x80 */ + 0xBD90, 0xBD91, 0xBD92, 0xBD93, 0xBD94, 0xBD95, 0xBD96, 0xBD97, /* 0x80 */ + 0xBD98, 0xBD99, 0xBD9A, 0xBD9B, 0xBD9C, 0xBD9D, 0xBD9E, 0xBD9F, /* 0x90 */ + 0xBDA0, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0xBE44, 0xBE45, 0xBE46, /* 0x90 */ + 0xBE47, 0xBE48, 0xBE49, 0xBE4A, 0xBE4B, 0xBE4C, 0xF4EB, 0xBE4D, /* 0xA0 */ + 0xBE4E, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53, 0xF4EC, 0xBE54, /* 0xA0 */ + 0xBE55, 0xBE56, 0xBE57, 0xBE58, 0xBE59, 0xBE5A, 0xBE5B, 0xBE5C, /* 0xB0 */ + 0xBE5D, 0xBE5E, 0xBE5F, 0xBE60, 0xBE61, 0xBE62, 0xBE63, 0xBE64, /* 0xB0 */ + 0xBE65, 0xBE66, 0xBE67, 0xBE68, 0xBE69, 0xBE6A, 0xBE6B, 0xBE6C, /* 0xC0 */ + 0xBE6D, 0xBE6E, 0xBE6F, 0xBE70, 0xBE71, 0xBE72, 0xBE73, 0xBE74, /* 0xC0 */ + 0xBE75, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7B, 0xBE7C, /* 0xD0 */ + 0xBE7D, 0xBE7E, 0xBE80, 0xBE81, 0xBE82, 0xBE83, 0xBE84, 0xBE85, /* 0xD0 */ + 0xBE86, 0xBE87, 0xBE88, 0xBE89, 0xBE8A, 0xBE8B, 0xBE8C, 0xBE8D, /* 0xE0 */ + 0xBE8E, 0xBE8F, 0xBE90, 0xBE91, 0xBE92, 0xBE93, 0xBE94, 0xBE95, /* 0xE0 */ + 0xBE96, 0xBE97, 0xBE98, 0xBE99, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, /* 0xF0 */ + 0xBE9E, 0xBE9F, 0xBEA0, 0xBF40, 0xBF41, 0xBF42, 0xBF43, 0xBF44 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBF45, 0xBF46, 0xBF47, 0xBF48, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, /* 0x00 */ + 0xBF4D, 0xBF4E, 0xBF4F, 0xBF50, 0xBF51, 0xBF52, 0xBF53, 0xBF54, /* 0x00 */ + 0xBF55, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0xBF5C, /* 0x10 */ + 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, 0xBF64, /* 0x10 */ + 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, /* 0x20 */ + 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xBF74, /* 0x20 */ + 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, /* 0x30 */ + 0xBF7D, 0xBF7E, 0xBF80, 0xF7E3, 0xBF81, 0xBF82, 0xBF83, 0xBF84, /* 0x30 */ + 0xBF85, 0xB7B1, 0xBF86, 0xBF87, 0xBF88, 0xBF89, 0xBF8A, 0xF4ED, /* 0x40 */ + 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, /* 0x40 */ + 0xBF93, 0xBF94, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, /* 0x50 */ + 0xBF9B, 0xBF9C, 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xC040, 0xC041, /* 0x50 */ + 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, 0xC048, 0xC049, /* 0x60 */ + 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC051, /* 0x60 */ + 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, 0xC058, 0xC059, /* 0x70 */ + 0xC05A, 0xC05B, 0xC05C, 0xC05D, 0xC05E, 0xC05F, 0xC060, 0xC061, /* 0x70 */ + 0xC062, 0xC063, 0xD7EB, 0xC064, 0xC065, 0xC066, 0xC067, 0xC068, /* 0x80 */ + 0xC069, 0xC06A, 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, /* 0x80 */ + 0xC071, 0xC072, 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, /* 0x90 */ + 0xC079, 0xC07A, 0xC07B, 0xF4EE, 0xC07C, 0xC07D, 0xC07E, 0xE6F9, /* 0x90 */ + 0xBEC0, 0xE6FA, 0xBAEC, 0xE6FB, 0xCFCB, 0xE6FC, 0xD4BC, 0xBCB6, /* 0xA0 */ + 0xE6FD, 0xE6FE, 0xBCCD, 0xC8D2, 0xCEB3, 0xE7A1, 0xC080, 0xB4BF, /* 0xA0 */ + 0xE7A2, 0xC9B4, 0xB8D9, 0xC4C9, 0xC081, 0xD7DD, 0xC2DA, 0xB7D7, /* 0xB0 */ + 0xD6BD, 0xCEC6, 0xB7C4, 0xC082, 0xC083, 0xC5A6, 0xE7A3, 0xCFDF, /* 0xB0 */ + 0xE7A4, 0xE7A5, 0xE7A6, 0xC1B7, 0xD7E9, 0xC9F0, 0xCFB8, 0xD6AF, /* 0xC0 */ + 0xD6D5, 0xE7A7, 0xB0ED, 0xE7A8, 0xE7A9, 0xC9DC, 0xD2EF, 0xBEAD, /* 0xC0 */ + 0xE7AA, 0xB0F3, 0xC8DE, 0xBDE1, 0xE7AB, 0xC8C6, 0xC084, 0xE7AC, /* 0xD0 */ + 0xBBE6, 0xB8F8, 0xD1A4, 0xE7AD, 0xC2E7, 0xBEF8, 0xBDCA, 0xCDB3, /* 0xD0 */ + 0xE7AE, 0xE7AF, 0xBEEE, 0xD0E5, 0xC085, 0xCBE7, 0xCCD0, 0xBCCC, /* 0xE0 */ + 0xE7B0, 0xBCA8, 0xD0F7, 0xE7B1, 0xC086, 0xD0F8, 0xE7B2, 0xE7B3, /* 0xE0 */ + 0xB4C2, 0xE7B4, 0xE7B5, 0xC9FE, 0xCEAC, 0xC3E0, 0xE7B7, 0xB1C1, /* 0xF0 */ + 0xB3F1, 0xC087, 0xE7B8, 0xE7B9, 0xD7DB, 0xD5C0, 0xE7BA, 0xC2CC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7BA, 0xE7BB, 0xE7BC, 0xE7BD, 0xBCEA, 0xC3E5, 0xC0C2, 0xE7BE, /* 0x00 */ + 0xE7BF, 0xBCA9, 0xC088, 0xE7C0, 0xE7C1, 0xE7B6, 0xB6D0, 0xE7C2, /* 0x00 */ + 0xC089, 0xE7C3, 0xE7C4, 0xBBBA, 0xB5DE, 0xC2C6, 0xB1E0, 0xE7C5, /* 0x10 */ + 0xD4B5, 0xE7C6, 0xB8BF, 0xE7C8, 0xE7C7, 0xB7EC, 0xC08A, 0xE7C9, /* 0x10 */ + 0xB2F8, 0xE7CA, 0xE7CB, 0xE7CC, 0xE7CD, 0xE7CE, 0xE7CF, 0xE7D0, /* 0x20 */ + 0xD3A7, 0xCBF5, 0xE7D1, 0xE7D2, 0xE7D3, 0xE7D4, 0xC9C9, 0xE7D5, /* 0x20 */ + 0xE7D6, 0xE7D7, 0xE7D8, 0xE7D9, 0xBDC9, 0xE7DA, 0xF3BE, 0xC08B, /* 0x30 */ + 0xB8D7, 0xC08C, 0xC8B1, 0xC08D, 0xC08E, 0xC08F, 0xC090, 0xC091, /* 0x30 */ + 0xC092, 0xC093, 0xF3BF, 0xC094, 0xF3C0, 0xF3C1, 0xC095, 0xC096, /* 0x40 */ + 0xC097, 0xC098, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, /* 0x40 */ + 0xB9DE, 0xCDF8, 0xC09F, 0xC0A0, 0xD8E8, 0xBAB1, 0xC140, 0xC2DE, /* 0x50 */ + 0xEEB7, 0xC141, 0xB7A3, 0xC142, 0xC143, 0xC144, 0xC145, 0xEEB9, /* 0x50 */ + 0xC146, 0xEEB8, 0xB0D5, 0xC147, 0xC148, 0xC149, 0xC14A, 0xC14B, /* 0x60 */ + 0xEEBB, 0xD5D6, 0xD7EF, 0xC14C, 0xC14D, 0xC14E, 0xD6C3, 0xC14F, /* 0x60 */ + 0xC150, 0xEEBD, 0xCAF0, 0xC151, 0xEEBC, 0xC152, 0xC153, 0xC154, /* 0x70 */ + 0xC155, 0xEEBE, 0xC156, 0xC157, 0xC158, 0xC159, 0xEEC0, 0xC15A, /* 0x70 */ + 0xC15B, 0xEEBF, 0xC15C, 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, /* 0x80 */ + 0xC162, 0xC163, 0xD1F2, 0xC164, 0xC7BC, 0xC165, 0xC3C0, 0xC166, /* 0x80 */ + 0xC167, 0xC168, 0xC169, 0xC16A, 0xB8E1, 0xC16B, 0xC16C, 0xC16D, /* 0x90 */ + 0xC16E, 0xC16F, 0xC1E7, 0xC170, 0xC171, 0xF4C6, 0xD0DF, 0xF4C7, /* 0x90 */ + 0xC172, 0xCFDB, 0xC173, 0xC174, 0xC8BA, 0xC175, 0xC176, 0xF4C8, /* 0xA0 */ + 0xC177, 0xC178, 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xF4C9, /* 0xA0 */ + 0xF4CA, 0xC17E, 0xF4CB, 0xC180, 0xC181, 0xC182, 0xC183, 0xC184, /* 0xB0 */ + 0xD9FA, 0xB8FE, 0xC185, 0xC186, 0xE5F1, 0xD3F0, 0xC187, 0xF4E0, /* 0xB0 */ + 0xC188, 0xCECC, 0xC189, 0xC18A, 0xC18B, 0xB3E1, 0xC18C, 0xC18D, /* 0xC0 */ + 0xC18E, 0xC18F, 0xF1B4, 0xC190, 0xD2EE, 0xC191, 0xF4E1, 0xC192, /* 0xC0 */ + 0xC193, 0xC194, 0xC195, 0xC196, 0xCFE8, 0xF4E2, 0xC197, 0xC198, /* 0xD0 */ + 0xC7CC, 0xC199, 0xC19A, 0xC19B, 0xC19C, 0xC19D, 0xC19E, 0xB5D4, /* 0xD0 */ + 0xB4E4, 0xF4E4, 0xC19F, 0xC1A0, 0xC240, 0xF4E3, 0xF4E5, 0xC241, /* 0xE0 */ + 0xC242, 0xF4E6, 0xC243, 0xC244, 0xC245, 0xC246, 0xF4E7, 0xC247, /* 0xE0 */ + 0xBAB2, 0xB0BF, 0xC248, 0xF4E8, 0xC249, 0xC24A, 0xC24B, 0xC24C, /* 0xF0 */ + 0xC24D, 0xC24E, 0xC24F, 0xB7AD, 0xD2ED, 0xC250, 0xC251, 0xC252 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2AB, 0xC0CF, 0xC253, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0xC254, /* 0x00 */ + 0xC255, 0xC256, 0xC257, 0xF1F3, 0xB6F8, 0xCBA3, 0xC258, 0xC259, /* 0x00 */ + 0xC4CD, 0xC25A, 0xF1E7, 0xC25B, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, /* 0x10 */ + 0xD4C5, 0xB0D2, 0xC25C, 0xC25D, 0xF1EA, 0xC25E, 0xC25F, 0xC260, /* 0x10 */ + 0xF1EB, 0xC261, 0xF1EC, 0xC262, 0xC263, 0xF1ED, 0xF1EE, 0xF1EF, /* 0x20 */ + 0xF1F1, 0xF1F0, 0xC5D5, 0xC264, 0xC265, 0xC266, 0xC267, 0xC268, /* 0x20 */ + 0xC269, 0xF1F2, 0xC26A, 0xB6FA, 0xC26B, 0xF1F4, 0xD2AE, 0xDEC7, /* 0x30 */ + 0xCBCA, 0xC26C, 0xC26D, 0xB3DC, 0xC26E, 0xB5A2, 0xC26F, 0xB9A2, /* 0x30 */ + 0xC270, 0xC271, 0xC4F4, 0xF1F5, 0xC272, 0xC273, 0xF1F6, 0xC274, /* 0x40 */ + 0xC275, 0xC276, 0xC1C4, 0xC1FB, 0xD6B0, 0xF1F7, 0xC277, 0xC278, /* 0x40 */ + 0xC279, 0xC27A, 0xF1F8, 0xC27B, 0xC1AA, 0xC27C, 0xC27D, 0xC27E, /* 0x50 */ + 0xC6B8, 0xC280, 0xBEDB, 0xC281, 0xC282, 0xC283, 0xC284, 0xC285, /* 0x50 */ + 0xC286, 0xC287, 0xC288, 0xC289, 0xC28A, 0xC28B, 0xC28C, 0xC28D, /* 0x60 */ + 0xC28E, 0xF1F9, 0xB4CF, 0xC28F, 0xC290, 0xC291, 0xC292, 0xC293, /* 0x60 */ + 0xC294, 0xF1FA, 0xC295, 0xC296, 0xC297, 0xC298, 0xC299, 0xC29A, /* 0x70 */ + 0xC29B, 0xC29C, 0xC29D, 0xC29E, 0xC29F, 0xC2A0, 0xC340, 0xEDB2, /* 0x70 */ + 0xEDB1, 0xC341, 0xC342, 0xCBE0, 0xD2DE, 0xC343, 0xCBC1, 0xD5D8, /* 0x80 */ + 0xC344, 0xC8E2, 0xC345, 0xC0DF, 0xBCA1, 0xC346, 0xC347, 0xC348, /* 0x80 */ + 0xC349, 0xC34A, 0xC34B, 0xEBC1, 0xC34C, 0xC34D, 0xD0A4, 0xC34E, /* 0x90 */ + 0xD6E2, 0xC34F, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0xC350, 0xEBBF, /* 0x90 */ + 0xB3A6, 0xB9C9, 0xD6AB, 0xC351, 0xB7F4, 0xB7CA, 0xC352, 0xC353, /* 0xA0 */ + 0xC354, 0xBCE7, 0xB7BE, 0xEBC6, 0xC355, 0xEBC7, 0xB0B9, 0xBFCF, /* 0xA0 */ + 0xC356, 0xEBC5, 0xD3FD, 0xC357, 0xEBC8, 0xC358, 0xC359, 0xEBC9, /* 0xB0 */ + 0xC35A, 0xC35B, 0xB7CE, 0xC35C, 0xEBC2, 0xEBC4, 0xC9F6, 0xD6D7, /* 0xB0 */ + 0xD5CD, 0xD0B2, 0xEBCF, 0xCEB8, 0xEBD0, 0xC35D, 0xB5A8, 0xC35E, /* 0xC0 */ + 0xC35F, 0xC360, 0xC361, 0xC362, 0xB1B3, 0xEBD2, 0xCCA5, 0xC363, /* 0xC0 */ + 0xC364, 0xC365, 0xC366, 0xC367, 0xC368, 0xC369, 0xC5D6, 0xEBD3, /* 0xD0 */ + 0xC36A, 0xEBD1, 0xC5DF, 0xEBCE, 0xCAA4, 0xEBD5, 0xB0FB, 0xC36B, /* 0xD0 */ + 0xC36C, 0xBAFA, 0xC36D, 0xC36E, 0xD8B7, 0xF1E3, 0xC36F, 0xEBCA, /* 0xE0 */ + 0xEBCB, 0xEBCC, 0xEBCD, 0xEBD6, 0xE6C0, 0xEBD9, 0xC370, 0xBFE8, /* 0xE0 */ + 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0xC371, 0xBDBA, 0xC372, /* 0xF0 */ + 0xD0D8, 0xC373, 0xB0B7, 0xC374, 0xEBDD, 0xC4DC, 0xC375, 0xC376 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC377, 0xC378, 0xD6AC, 0xC379, 0xC37A, 0xC37B, 0xB4E0, 0xC37C, /* 0x00 */ + 0xC37D, 0xC2F6, 0xBCB9, 0xC37E, 0xC380, 0xEBDA, 0xEBDB, 0xD4E0, /* 0x00 */ + 0xC6EA, 0xC4D4, 0xEBDF, 0xC5A7, 0xD9F5, 0xC381, 0xB2B1, 0xC382, /* 0x10 */ + 0xEBE4, 0xC383, 0xBDC5, 0xC384, 0xC385, 0xC386, 0xEBE2, 0xC387, /* 0x10 */ + 0xC388, 0xC389, 0xC38A, 0xC38B, 0xC38C, 0xC38D, 0xC38E, 0xC38F, /* 0x20 */ + 0xC390, 0xC391, 0xC392, 0xC393, 0xEBE3, 0xC394, 0xC395, 0xB8AC, /* 0x20 */ + 0xC396, 0xCDD1, 0xEBE5, 0xC397, 0xC398, 0xC399, 0xEBE1, 0xC39A, /* 0x30 */ + 0xC1B3, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0xC6A2, 0xC3A0, /* 0x30 */ + 0xC440, 0xC441, 0xC442, 0xC443, 0xC444, 0xC445, 0xCCF3, 0xC446, /* 0x40 */ + 0xEBE6, 0xC447, 0xC0B0, 0xD2B8, 0xEBE7, 0xC448, 0xC449, 0xC44A, /* 0x40 */ + 0xB8AF, 0xB8AD, 0xC44B, 0xEBE8, 0xC7BB, 0xCDF3, 0xC44C, 0xC44D, /* 0x50 */ + 0xC44E, 0xEBEA, 0xEBEB, 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, /* 0x50 */ + 0xEBED, 0xC454, 0xC455, 0xC456, 0xC457, 0xD0C8, 0xC458, 0xEBF2, /* 0x60 */ + 0xC459, 0xEBEE, 0xC45A, 0xC45B, 0xC45C, 0xEBF1, 0xC8F9, 0xC45D, /* 0x60 */ + 0xD1FC, 0xEBEC, 0xC45E, 0xC45F, 0xEBE9, 0xC460, 0xC461, 0xC462, /* 0x70 */ + 0xC463, 0xB8B9, 0xCFD9, 0xC4E5, 0xEBEF, 0xEBF0, 0xCCDA, 0xCDC8, /* 0x70 */ + 0xB0F2, 0xC464, 0xEBF6, 0xC465, 0xC466, 0xC467, 0xC468, 0xC469, /* 0x80 */ + 0xEBF5, 0xC46A, 0xB2B2, 0xC46B, 0xC46C, 0xC46D, 0xC46E, 0xB8E0, /* 0x80 */ + 0xC46F, 0xEBF7, 0xC470, 0xC471, 0xC472, 0xC473, 0xC474, 0xC475, /* 0x90 */ + 0xB1EC, 0xC476, 0xC477, 0xCCC5, 0xC4A4, 0xCFA5, 0xC478, 0xC479, /* 0x90 */ + 0xC47A, 0xC47B, 0xC47C, 0xEBF9, 0xC47D, 0xC47E, 0xECA2, 0xC480, /* 0xA0 */ + 0xC5F2, 0xC481, 0xEBFA, 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, /* 0xA0 */ + 0xC487, 0xC488, 0xC489, 0xC9C5, 0xC48A, 0xC48B, 0xC48C, 0xC48D, /* 0xB0 */ + 0xC48E, 0xC48F, 0xE2DF, 0xEBFE, 0xC490, 0xC491, 0xC492, 0xC493, /* 0xB0 */ + 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0xC494, 0xC495, 0xD2DC, 0xC496, /* 0xC0 */ + 0xC497, 0xC498, 0xEBFD, 0xC499, 0xEBFB, 0xC49A, 0xC49B, 0xC49C, /* 0xC0 */ + 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC540, 0xC541, 0xC542, 0xC543, /* 0xD0 */ + 0xC544, 0xC545, 0xC546, 0xC547, 0xC548, 0xC549, 0xC54A, 0xC54B, /* 0xD0 */ + 0xC54C, 0xC54D, 0xC54E, 0xB3BC, 0xC54F, 0xC550, 0xC551, 0xEAB0, /* 0xE0 */ + 0xC552, 0xC553, 0xD7D4, 0xC554, 0xF4AB, 0xB3F4, 0xC555, 0xC556, /* 0xE0 */ + 0xC557, 0xC558, 0xC559, 0xD6C1, 0xD6C2, 0xC55A, 0xC55B, 0xC55C, /* 0xF0 */ + 0xC55D, 0xC55E, 0xC55F, 0xD5E9, 0xBECA, 0xC560, 0xF4A7, 0xC561 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2A8, 0xF4A8, 0xF4A9, 0xC562, 0xF4AA, 0xBECB, 0xD3DF, 0xC563, /* 0x00 */ + 0xC564, 0xC565, 0xC566, 0xC567, 0xC9E0, 0xC9E1, 0xC568, 0xC569, /* 0x00 */ + 0xF3C2, 0xC56A, 0xCAE6, 0xC56B, 0xCCF2, 0xC56C, 0xC56D, 0xC56E, /* 0x10 */ + 0xC56F, 0xC570, 0xC571, 0xE2B6, 0xCBB4, 0xC572, 0xCEE8, 0xD6DB, /* 0x10 */ + 0xC573, 0xF4AD, 0xF4AE, 0xF4AF, 0xC574, 0xC575, 0xC576, 0xC577, /* 0x20 */ + 0xF4B2, 0xC578, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0xC579, 0xF4B1, /* 0x20 */ + 0xBDA2, 0xB2D5, 0xC57A, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, /* 0x30 */ + 0xF4B4, 0xB4AC, 0xC57B, 0xF4B5, 0xC57C, 0xC57D, 0xF4B8, 0xC57E, /* 0x30 */ + 0xC580, 0xC581, 0xC582, 0xC583, 0xF4B9, 0xC584, 0xC585, 0xCDA7, /* 0x40 */ + 0xC586, 0xF4BA, 0xC587, 0xF4BB, 0xC588, 0xC589, 0xC58A, 0xF4BC, /* 0x40 */ + 0xC58B, 0xC58C, 0xC58D, 0xC58E, 0xC58F, 0xC590, 0xC591, 0xC592, /* 0x50 */ + 0xCBD2, 0xC593, 0xF4BD, 0xC594, 0xC595, 0xC596, 0xC597, 0xF4BE, /* 0x50 */ + 0xC598, 0xC599, 0xC59A, 0xC59B, 0xC59C, 0xC59D, 0xC59E, 0xC59F, /* 0x60 */ + 0xF4BF, 0xC5A0, 0xC640, 0xC641, 0xC642, 0xC643, 0xF4DE, 0xC1BC, /* 0x60 */ + 0xBCE8, 0xC644, 0xC9AB, 0xD1DE, 0xE5F5, 0xC645, 0xC646, 0xC647, /* 0x70 */ + 0xC648, 0xDCB3, 0xD2D5, 0xC649, 0xC64A, 0xDCB4, 0xB0AC, 0xDCB5, /* 0x70 */ + 0xC64B, 0xC64C, 0xBDDA, 0xC64D, 0xDCB9, 0xC64E, 0xC64F, 0xC650, /* 0x80 */ + 0xD8C2, 0xC651, 0xDCB7, 0xD3F3, 0xC652, 0xC9D6, 0xDCBA, 0xDCB6, /* 0x80 */ + 0xC653, 0xDCBB, 0xC3A2, 0xC654, 0xC655, 0xC656, 0xC657, 0xDCBC, /* 0x90 */ + 0xDCC5, 0xDCBD, 0xC658, 0xC659, 0xCEDF, 0xD6A5, 0xC65A, 0xDCCF, /* 0x90 */ + 0xC65B, 0xDCCD, 0xC65C, 0xC65D, 0xDCD2, 0xBDE6, 0xC2AB, 0xC65E, /* 0xA0 */ + 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, /* 0xA0 */ + 0xDCC1, 0xBBA8, 0xC65F, 0xB7BC, 0xDCCC, 0xC660, 0xC661, 0xDCC6, /* 0xB0 */ + 0xDCBF, 0xC7DB, 0xC662, 0xC663, 0xC664, 0xD1BF, 0xDCC0, 0xC665, /* 0xB0 */ + 0xC666, 0xDCCA, 0xC667, 0xC668, 0xDCD0, 0xC669, 0xC66A, 0xCEAD, /* 0xC0 */ + 0xDCC2, 0xC66B, 0xDCC3, 0xDCC8, 0xDCC9, 0xB2D4, 0xDCD1, 0xCBD5, /* 0xC0 */ + 0xC66C, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0xC66D, 0xC3E7, /* 0xD0 */ + 0xDCDC, 0xC66E, 0xC66F, 0xBFC1, 0xDCD9, 0xC670, 0xB0FA, 0xB9B6, /* 0xD0 */ + 0xDCE5, 0xDCD3, 0xC671, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0xC672, /* 0xE0 */ + 0xC673, 0xC674, 0xC675, 0xC9BB, 0xC676, 0xC677, 0xC678, 0xB1BD, /* 0xE0 */ + 0xC679, 0xD3A2, 0xC67A, 0xC67B, 0xDCDA, 0xC67C, 0xC67D, 0xDCD5, /* 0xF0 */ + 0xC67E, 0xC6BB, 0xC680, 0xDCDE, 0xC681, 0xC682, 0xC683, 0xC684 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC685, 0xD7C2, 0xC3AF, 0xB7B6, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, /* 0x00 */ + 0xDCEB, 0xDCD4, 0xC686, 0xC687, 0xDCDD, 0xC688, 0xBEA5, 0xDCD7, /* 0x00 */ + 0xC689, 0xDCE0, 0xC68A, 0xC68B, 0xDCE3, 0xDCE4, 0xC68C, 0xDCF8, /* 0x10 */ + 0xC68D, 0xC68E, 0xDCE1, 0xDDA2, 0xDCE7, 0xC68F, 0xC690, 0xC691, /* 0x10 */ + 0xC692, 0xC693, 0xC694, 0xC695, 0xC696, 0xC697, 0xC698, 0xBCEB, /* 0x20 */ + 0xB4C4, 0xC699, 0xC69A, 0xC3A3, 0xB2E7, 0xDCFA, 0xC69B, 0xDCF2, /* 0x20 */ + 0xC69C, 0xDCEF, 0xC69D, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0xC69E, /* 0x30 */ + 0xC8D7, 0xC8E3, 0xDCFB, 0xC69F, 0xDCED, 0xC6A0, 0xC740, 0xC741, /* 0x30 */ + 0xDCF7, 0xC742, 0xC743, 0xDCF5, 0xC744, 0xC745, 0xBEA3, 0xDCF4, /* 0x40 */ + 0xC746, 0xB2DD, 0xC747, 0xC748, 0xC749, 0xC74A, 0xC74B, 0xDCF3, /* 0x40 */ + 0xBCF6, 0xDCE8, 0xBBC4, 0xC74C, 0xC0F3, 0xC74D, 0xC74E, 0xC74F, /* 0x50 */ + 0xC750, 0xC751, 0xBCD4, 0xDCE9, 0xDCEA, 0xC752, 0xDCF1, 0xDCF6, /* 0x50 */ + 0xDCF9, 0xB5B4, 0xC753, 0xC8D9, 0xBBE7, 0xDCFE, 0xDCFD, 0xD3AB, /* 0x60 */ + 0xDDA1, 0xDDA3, 0xDDA5, 0xD2F1, 0xDDA4, 0xDDA6, 0xDDA7, 0xD2A9, /* 0x60 */ + 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC759, 0xC75A, 0xBAC9, /* 0x70 */ + 0xDDA9, 0xC75B, 0xC75C, 0xDDB6, 0xDDB1, 0xDDB4, 0xC75D, 0xC75E, /* 0x70 */ + 0xC75F, 0xC760, 0xC761, 0xC762, 0xC763, 0xDDB0, 0xC6CE, 0xC764, /* 0x80 */ + 0xC765, 0xC0F2, 0xC766, 0xC767, 0xC768, 0xC769, 0xC9AF, 0xC76A, /* 0x80 */ + 0xC76B, 0xC76C, 0xDCEC, 0xDDAE, 0xC76D, 0xC76E, 0xC76F, 0xC770, /* 0x90 */ + 0xDDB7, 0xC771, 0xC772, 0xDCF0, 0xDDAF, 0xC773, 0xDDB8, 0xC774, /* 0x90 */ + 0xDDAC, 0xC775, 0xC776, 0xC777, 0xC778, 0xC779, 0xC77A, 0xC77B, /* 0xA0 */ + 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0xC77C, 0xC77D, 0xC77E, 0xC780, /* 0xA0 */ + 0xDDA8, 0xC0B3, 0xC1AB, 0xDDAA, 0xDDAB, 0xC781, 0xDDB2, 0xBBF1, /* 0xB0 */ + 0xDDB5, 0xD3A8, 0xDDBA, 0xC782, 0xDDBB, 0xC3A7, 0xC783, 0xC784, /* 0xB0 */ + 0xDDD2, 0xDDBC, 0xC785, 0xC786, 0xC787, 0xDDD1, 0xC788, 0xB9BD, /* 0xC0 */ + 0xC789, 0xC78A, 0xBED5, 0xC78B, 0xBEFA, 0xC78C, 0xC78D, 0xBACA, /* 0xC0 */ + 0xC78E, 0xC78F, 0xC790, 0xC791, 0xDDCA, 0xC792, 0xDDC5, 0xC793, /* 0xD0 */ + 0xDDBF, 0xC794, 0xC795, 0xC796, 0xB2CB, 0xDDC3, 0xC797, 0xDDCB, /* 0xD0 */ + 0xB2A4, 0xDDD5, 0xC798, 0xC799, 0xC79A, 0xDDBE, 0xC79B, 0xC79C, /* 0xE0 */ + 0xC79D, 0xC6D0, 0xDDD0, 0xC79E, 0xC79F, 0xC7A0, 0xC840, 0xC841, /* 0xE0 */ + 0xDDD4, 0xC1E2, 0xB7C6, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, /* 0xF0 */ + 0xDDCE, 0xDDCF, 0xC847, 0xC848, 0xC849, 0xDDC4, 0xC84A, 0xC84B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC84C, 0xDDBD, 0xC84D, 0xDDCD, 0xCCD1, 0xC84E, 0xDDC9, 0xC84F, /* 0x00 */ + 0xC850, 0xC851, 0xC852, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, /* 0x00 */ + 0xC853, 0xDDC8, 0xC854, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, /* 0x10 */ + 0xDDC1, 0xC85A, 0xC85B, 0xC85C, 0xDDC6, 0xC2DC, 0xC85D, 0xC85E, /* 0x10 */ + 0xC85F, 0xC860, 0xC861, 0xC862, 0xD3A9, 0xD3AA, 0xDDD3, 0xCFF4, /* 0x20 */ + 0xC8F8, 0xC863, 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, /* 0x20 */ + 0xC86A, 0xDDE6, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F, 0xC870, /* 0x30 */ + 0xDDC7, 0xC871, 0xC872, 0xC873, 0xDDE0, 0xC2E4, 0xC874, 0xC875, /* 0x30 */ + 0xC876, 0xC877, 0xC878, 0xC879, 0xC87A, 0xC87B, 0xDDE1, 0xC87C, /* 0x40 */ + 0xC87D, 0xC87E, 0xC880, 0xC881, 0xC882, 0xC883, 0xC884, 0xC885, /* 0x40 */ + 0xC886, 0xDDD7, 0xC887, 0xC888, 0xC889, 0xC88A, 0xC88B, 0xD6F8, /* 0x50 */ + 0xC88C, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0xC88D, 0xC88E, 0xC88F, /* 0x50 */ + 0xC890, 0xC6CF, 0xC891, 0xB6AD, 0xC892, 0xC893, 0xC894, 0xC895, /* 0x60 */ + 0xC896, 0xDDE2, 0xC897, 0xBAF9, 0xD4E1, 0xDDE7, 0xC898, 0xC899, /* 0x60 */ + 0xC89A, 0xB4D0, 0xC89B, 0xDDDA, 0xC89C, 0xBFFB, 0xDDE3, 0xC89D, /* 0x70 */ + 0xDDDF, 0xC89E, 0xDDDD, 0xC89F, 0xC8A0, 0xC940, 0xC941, 0xC942, /* 0x70 */ + 0xC943, 0xC944, 0xB5D9, 0xC945, 0xC946, 0xC947, 0xC948, 0xDDDB, /* 0x80 */ + 0xDDDC, 0xDDDE, 0xC949, 0xBDAF, 0xDDE4, 0xC94A, 0xDDE5, 0xC94B, /* 0x80 */ + 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0xC950, 0xC951, 0xC952, 0xDDF5, /* 0x90 */ + 0xC953, 0xC3C9, 0xC954, 0xC955, 0xCBE2, 0xC956, 0xC957, 0xC958, /* 0x90 */ + 0xC959, 0xDDF2, 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E, 0xC95F, /* 0xA0 */ + 0xC960, 0xC961, 0xC962, 0xC963, 0xC964, 0xC965, 0xC966, 0xD8E1, /* 0xA0 */ + 0xC967, 0xC968, 0xC6D1, 0xC969, 0xDDF4, 0xC96A, 0xC96B, 0xC96C, /* 0xB0 */ + 0xD5F4, 0xDDF3, 0xDDF0, 0xC96D, 0xC96E, 0xDDEC, 0xC96F, 0xDDEF, /* 0xB0 */ + 0xC970, 0xDDE8, 0xC971, 0xC972, 0xD0EE, 0xC973, 0xC974, 0xC975, /* 0xC0 */ + 0xC976, 0xC8D8, 0xDDEE, 0xC977, 0xC978, 0xDDE9, 0xC979, 0xC97A, /* 0xC0 */ + 0xDDEA, 0xCBF2, 0xC97B, 0xDDED, 0xC97C, 0xC97D, 0xB1CD, 0xC97E, /* 0xD0 */ + 0xC980, 0xC981, 0xC982, 0xC983, 0xC984, 0xC0B6, 0xC985, 0xBCBB, /* 0xD0 */ + 0xDDF1, 0xC986, 0xC987, 0xDDF7, 0xC988, 0xDDF6, 0xDDEB, 0xC989, /* 0xE0 */ + 0xC98A, 0xC98B, 0xC98C, 0xC98D, 0xC5EE, 0xC98E, 0xC98F, 0xC990, /* 0xE0 */ + 0xDDFB, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, 0xC997, /* 0xF0 */ + 0xC998, 0xC999, 0xC99A, 0xC99B, 0xDEA4, 0xC99C, 0xC99D, 0xDEA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC99E, 0xC99F, 0xC9A0, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, /* 0x00 */ + 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xDDF8, 0xCA49, 0xCA4A, 0xCA4B, /* 0x00 */ + 0xCA4C, 0xC3EF, 0xCA4D, 0xC2FB, 0xCA4E, 0xCA4F, 0xCA50, 0xD5E1, /* 0x10 */ + 0xCA51, 0xCA52, 0xCEB5, 0xCA53, 0xCA54, 0xCA55, 0xCA56, 0xDDFD, /* 0x10 */ + 0xCA57, 0xB2CC, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, 0xCA5C, 0xCA5D, /* 0x20 */ + 0xCA5E, 0xCA5F, 0xCA60, 0xC4E8, 0xCADF, 0xCA61, 0xCA62, 0xCA63, /* 0x20 */ + 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA68, 0xCA69, 0xCA6A, 0xC7BE, /* 0x30 */ + 0xDDFA, 0xDDFC, 0xDDFE, 0xDEA2, 0xB0AA, 0xB1CE, 0xCA6B, 0xCA6C, /* 0x30 */ + 0xCA6D, 0xCA6E, 0xCA6F, 0xDEAC, 0xCA70, 0xCA71, 0xCA72, 0xCA73, /* 0x40 */ + 0xDEA6, 0xBDB6, 0xC8EF, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, /* 0x40 */ + 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7D, 0xCA7E, 0xDEA1, 0xCA80, /* 0x50 */ + 0xCA81, 0xDEA5, 0xCA82, 0xCA83, 0xCA84, 0xCA85, 0xDEA9, 0xCA86, /* 0x50 */ + 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xDEA8, 0xCA8B, 0xCA8C, 0xCA8D, /* 0x60 */ + 0xDEA7, 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, /* 0x60 */ + 0xCA95, 0xCA96, 0xDEAD, 0xCA97, 0xD4CC, 0xCA98, 0xCA99, 0xCA9A, /* 0x70 */ + 0xCA9B, 0xDEB3, 0xDEAA, 0xDEAE, 0xCA9C, 0xCA9D, 0xC0D9, 0xCA9E, /* 0x70 */ + 0xCA9F, 0xCAA0, 0xCB40, 0xCB41, 0xB1A1, 0xDEB6, 0xCB42, 0xDEB1, /* 0x80 */ + 0xCB43, 0xCB44, 0xCB45, 0xCB46, 0xCB47, 0xCB48, 0xCB49, 0xDEB2, /* 0x80 */ + 0xCB4A, 0xCB4B, 0xCB4C, 0xCB4D, 0xCB4E, 0xCB4F, 0xCB50, 0xCB51, /* 0x90 */ + 0xCB52, 0xCB53, 0xCB54, 0xD1A6, 0xDEB5, 0xCB55, 0xCB56, 0xCB57, /* 0x90 */ + 0xCB58, 0xCB59, 0xCB5A, 0xCB5B, 0xDEAF, 0xCB5C, 0xCB5D, 0xCB5E, /* 0xA0 */ + 0xDEB0, 0xCB5F, 0xD0BD, 0xCB60, 0xCB61, 0xCB62, 0xDEB4, 0xCAED, /* 0xA0 */ + 0xDEB9, 0xCB63, 0xCB64, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xDEB8, /* 0xB0 */ + 0xCB69, 0xDEB7, 0xCB6A, 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, /* 0xB0 */ + 0xCB70, 0xDEBB, 0xCB71, 0xCB72, 0xCB73, 0xCB74, 0xCB75, 0xCB76, /* 0xC0 */ + 0xCB77, 0xBDE5, 0xCB78, 0xCB79, 0xCB7A, 0xCB7B, 0xCB7C, 0xB2D8, /* 0xC0 */ + 0xC3EA, 0xCB7D, 0xCB7E, 0xDEBA, 0xCB80, 0xC5BA, 0xCB81, 0xCB82, /* 0xD0 */ + 0xCB83, 0xCB84, 0xCB85, 0xCB86, 0xDEBC, 0xCB87, 0xCB88, 0xCB89, /* 0xD0 */ + 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCCD9, 0xCB8E, 0xCB8F, 0xCB90, /* 0xE0 */ + 0xCB91, 0xB7AA, 0xCB92, 0xCB93, 0xCB94, 0xCB95, 0xCB96, 0xCB97, /* 0xE0 */ + 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9C, 0xCB9D, 0xCB9E, 0xCB9F, /* 0xF0 */ + 0xCBA0, 0xCC40, 0xCC41, 0xD4E5, 0xCC42, 0xCC43, 0xCC44, 0xDEBD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCC45, 0xCC46, 0xCC47, 0xCC48, 0xCC49, 0xDEBF, 0xCC4A, 0xCC4B, /* 0x00 */ + 0xCC4C, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53, /* 0x00 */ + 0xCC54, 0xC4A2, 0xCC55, 0xCC56, 0xCC57, 0xCC58, 0xDEC1, 0xCC59, /* 0x10 */ + 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0xCC60, 0xCC61, /* 0x10 */ + 0xCC62, 0xCC63, 0xCC64, 0xCC65, 0xCC66, 0xCC67, 0xCC68, 0xDEBE, /* 0x20 */ + 0xCC69, 0xDEC0, 0xCC6A, 0xCC6B, 0xCC6C, 0xCC6D, 0xCC6E, 0xCC6F, /* 0x20 */ + 0xCC70, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC75, 0xCC76, 0xCC77, /* 0x30 */ + 0xD5BA, 0xCC78, 0xCC79, 0xCC7A, 0xDEC2, 0xCC7B, 0xCC7C, 0xCC7D, /* 0x30 */ + 0xCC7E, 0xCC80, 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86, /* 0x40 */ + 0xCC87, 0xCC88, 0xCC89, 0xCC8A, 0xCC8B, 0xF2AE, 0xBBA2, 0xC2B2, /* 0x40 */ + 0xC5B0, 0xC2C7, 0xCC8C, 0xCC8D, 0xF2AF, 0xCC8E, 0xCC8F, 0xCC90, /* 0x50 */ + 0xCC91, 0xCC92, 0xD0E9, 0xCC93, 0xCC94, 0xCC95, 0xD3DD, 0xCC96, /* 0x50 */ + 0xCC97, 0xCC98, 0xEBBD, 0xCC99, 0xCC9A, 0xCC9B, 0xCC9C, 0xCC9D, /* 0x60 */ + 0xCC9E, 0xCC9F, 0xCCA0, 0xB3E6, 0xF2B0, 0xCD40, 0xF2B1, 0xCD41, /* 0x60 */ + 0xCD42, 0xCAAD, 0xCD43, 0xCD44, 0xCD45, 0xCD46, 0xCD47, 0xCD48, /* 0x70 */ + 0xCD49, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0xCBE4, 0xCFBA, 0xF2B2, /* 0x70 */ + 0xCAB4, 0xD2CF, 0xC2EC, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, /* 0x80 */ + 0xCD4F, 0xCD50, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0xCD51, 0xCD52, /* 0x80 */ + 0xCD53, 0xCD54, 0xCD55, 0xF2BE, 0xCD56, 0xB2CF, 0xCD57, 0xCD58, /* 0x90 */ + 0xCD59, 0xCD5A, 0xCD5B, 0xCD5C, 0xD1C1, 0xF2BA, 0xCD5D, 0xCD5E, /* 0x90 */ + 0xCD5F, 0xCD60, 0xCD61, 0xF2BC, 0xD4E9, 0xCD62, 0xCD63, 0xF2BB, /* 0xA0 */ + 0xF2B6, 0xF2BF, 0xF2BD, 0xCD64, 0xF2B9, 0xCD65, 0xCD66, 0xF2C7, /* 0xA0 */ + 0xF2C4, 0xF2C6, 0xCD67, 0xCD68, 0xF2CA, 0xF2C2, 0xF2C0, 0xCD69, /* 0xB0 */ + 0xCD6A, 0xCD6B, 0xF2C5, 0xCD6C, 0xCD6D, 0xCD6E, 0xCD6F, 0xCD70, /* 0xB0 */ + 0xD6FB, 0xCD71, 0xCD72, 0xCD73, 0xF2C1, 0xCD74, 0xC7F9, 0xC9DF, /* 0xC0 */ + 0xCD75, 0xF2C8, 0xB9C6, 0xB5B0, 0xCD76, 0xCD77, 0xF2C3, 0xF2C9, /* 0xC0 */ + 0xF2D0, 0xF2D6, 0xCD78, 0xCD79, 0xBBD7, 0xCD7A, 0xCD7B, 0xCD7C, /* 0xD0 */ + 0xF2D5, 0xCDDC, 0xCD7D, 0xD6EB, 0xCD7E, 0xCD80, 0xF2D2, 0xF2D4, /* 0xD0 */ + 0xCD81, 0xCD82, 0xCD83, 0xCD84, 0xB8F2, 0xCD85, 0xCD86, 0xCD87, /* 0xE0 */ + 0xCD88, 0xF2CB, 0xCD89, 0xCD8A, 0xCD8B, 0xF2CE, 0xC2F9, 0xCD8C, /* 0xE0 */ + 0xD5DD, 0xF2CC, 0xF2CD, 0xF2CF, 0xF2D3, 0xCD8D, 0xCD8E, 0xCD8F, /* 0xF0 */ + 0xF2D9, 0xD3BC, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0xB6EA, 0xCD94 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAF1, 0xCD95, 0xB7E4, 0xF2D7, 0xCD96, 0xCD97, 0xCD98, 0xF2D8, /* 0x00 */ + 0xF2DA, 0xF2DD, 0xF2DB, 0xCD99, 0xCD9A, 0xF2DC, 0xCD9B, 0xCD9C, /* 0x00 */ + 0xCD9D, 0xCD9E, 0xD1D1, 0xF2D1, 0xCD9F, 0xCDC9, 0xCDA0, 0xCECF, /* 0x10 */ + 0xD6A9, 0xCE40, 0xF2E3, 0xCE41, 0xC3DB, 0xCE42, 0xF2E0, 0xCE43, /* 0x10 */ + 0xCE44, 0xC0AF, 0xF2EC, 0xF2DE, 0xCE45, 0xF2E1, 0xCE46, 0xCE47, /* 0x20 */ + 0xCE48, 0xF2E8, 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xF2E2, 0xCE4D, /* 0x20 */ + 0xCE4E, 0xF2E7, 0xCE4F, 0xCE50, 0xF2E6, 0xCE51, 0xCE52, 0xF2E9, /* 0x30 */ + 0xCE53, 0xCE54, 0xCE55, 0xF2DF, 0xCE56, 0xCE57, 0xF2E4, 0xF2EA, /* 0x30 */ + 0xCE58, 0xCE59, 0xCE5A, 0xCE5B, 0xCE5C, 0xCE5D, 0xCE5E, 0xD3AC, /* 0x40 */ + 0xF2E5, 0xB2F5, 0xCE5F, 0xCE60, 0xF2F2, 0xCE61, 0xD0AB, 0xCE62, /* 0x40 */ + 0xCE63, 0xCE64, 0xCE65, 0xF2F5, 0xCE66, 0xCE67, 0xCE68, 0xBBC8, /* 0x50 */ + 0xCE69, 0xF2F9, 0xCE6A, 0xCE6B, 0xCE6C, 0xCE6D, 0xCE6E, 0xCE6F, /* 0x50 */ + 0xF2F0, 0xCE70, 0xCE71, 0xF2F6, 0xF2F8, 0xF2FA, 0xCE72, 0xCE73, /* 0x60 */ + 0xCE74, 0xCE75, 0xCE76, 0xCE77, 0xCE78, 0xCE79, 0xF2F3, 0xCE7A, /* 0x60 */ + 0xF2F1, 0xCE7B, 0xCE7C, 0xCE7D, 0xBAFB, 0xCE7E, 0xB5FB, 0xCE80, /* 0x70 */ + 0xCE81, 0xCE82, 0xCE83, 0xF2EF, 0xF2F7, 0xF2ED, 0xF2EE, 0xCE84, /* 0x70 */ + 0xCE85, 0xCE86, 0xF2EB, 0xF3A6, 0xCE87, 0xF3A3, 0xCE88, 0xCE89, /* 0x80 */ + 0xF3A2, 0xCE8A, 0xCE8B, 0xF2F4, 0xCE8C, 0xC8DA, 0xCE8D, 0xCE8E, /* 0x80 */ + 0xCE8F, 0xCE90, 0xCE91, 0xF2FB, 0xCE92, 0xCE93, 0xCE94, 0xF3A5, /* 0x90 */ + 0xCE95, 0xCE96, 0xCE97, 0xCE98, 0xCE99, 0xCE9A, 0xCE9B, 0xC3F8, /* 0x90 */ + 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA0, 0xCF40, 0xCF41, 0xCF42, /* 0xA0 */ + 0xF2FD, 0xCF43, 0xCF44, 0xF3A7, 0xF3A9, 0xF3A4, 0xCF45, 0xF2FC, /* 0xA0 */ + 0xCF46, 0xCF47, 0xCF48, 0xF3AB, 0xCF49, 0xF3AA, 0xCF4A, 0xCF4B, /* 0xB0 */ + 0xCF4C, 0xCF4D, 0xC2DD, 0xCF4E, 0xCF4F, 0xF3AE, 0xCF50, 0xCF51, /* 0xB0 */ + 0xF3B0, 0xCF52, 0xCF53, 0xCF54, 0xCF55, 0xCF56, 0xF3A1, 0xCF57, /* 0xC0 */ + 0xCF58, 0xCF59, 0xF3B1, 0xF3AC, 0xCF5A, 0xCF5B, 0xCF5C, 0xCF5D, /* 0xC0 */ + 0xCF5E, 0xF3AF, 0xF2FE, 0xF3AD, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, /* 0xD0 */ + 0xCF63, 0xCF64, 0xCF65, 0xF3B2, 0xCF66, 0xCF67, 0xCF68, 0xCF69, /* 0xD0 */ + 0xF3B4, 0xCF6A, 0xCF6B, 0xCF6C, 0xCF6D, 0xF3A8, 0xCF6E, 0xCF6F, /* 0xE0 */ + 0xCF70, 0xCF71, 0xF3B3, 0xCF72, 0xCF73, 0xCF74, 0xF3B5, 0xCF75, /* 0xE0 */ + 0xCF76, 0xCF77, 0xCF78, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, /* 0xF0 */ + 0xCF7E, 0xD0B7, 0xCF80, 0xCF81, 0xCF82, 0xCF83, 0xF3B8, 0xCF84 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCF85, 0xCF86, 0xCF87, 0xD9F9, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, /* 0x00 */ + 0xCF8C, 0xCF8D, 0xF3B9, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92, /* 0x00 */ + 0xCF93, 0xCF94, 0xCF95, 0xF3B7, 0xCF96, 0xC8E4, 0xF3B6, 0xCF97, /* 0x10 */ + 0xCF98, 0xCF99, 0xCF9A, 0xF3BA, 0xCF9B, 0xCF9C, 0xCF9D, 0xCF9E, /* 0x10 */ + 0xCF9F, 0xF3BB, 0xB4C0, 0xCFA0, 0xD040, 0xD041, 0xD042, 0xD043, /* 0x20 */ + 0xD044, 0xD045, 0xD046, 0xD047, 0xD048, 0xD049, 0xD04A, 0xD04B, /* 0x20 */ + 0xD04C, 0xD04D, 0xEEC3, 0xD04E, 0xD04F, 0xD050, 0xD051, 0xD052, /* 0x30 */ + 0xD053, 0xF3BC, 0xD054, 0xD055, 0xF3BD, 0xD056, 0xD057, 0xD058, /* 0x30 */ + 0xD1AA, 0xD059, 0xD05A, 0xD05B, 0xF4AC, 0xD0C6, 0xD05C, 0xD05D, /* 0x40 */ + 0xD05E, 0xD05F, 0xD060, 0xD061, 0xD0D0, 0xD1DC, 0xD062, 0xD063, /* 0x40 */ + 0xD064, 0xD065, 0xD066, 0xD067, 0xCFCE, 0xD068, 0xD069, 0xBDD6, /* 0x50 */ + 0xD06A, 0xD1C3, 0xD06B, 0xD06C, 0xD06D, 0xD06E, 0xD06F, 0xD070, /* 0x50 */ + 0xD071, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0xB2B9, 0xD072, 0xD073, /* 0x60 */ + 0xB1ED, 0xF1C3, 0xD074, 0xC9C0, 0xB3C4, 0xD075, 0xD9F2, 0xD076, /* 0x60 */ + 0xCBA5, 0xD077, 0xF1C4, 0xD078, 0xD079, 0xD07A, 0xD07B, 0xD6D4, /* 0x70 */ + 0xD07C, 0xD07D, 0xD07E, 0xD080, 0xD081, 0xF1C5, 0xF4C0, 0xF1C6, /* 0x70 */ + 0xD082, 0xD4AC, 0xF1C7, 0xD083, 0xB0C0, 0xF4C1, 0xD084, 0xD085, /* 0x80 */ + 0xF4C2, 0xD086, 0xD087, 0xB4FC, 0xD088, 0xC5DB, 0xD089, 0xD08A, /* 0x80 */ + 0xD08B, 0xD08C, 0xCCBB, 0xD08D, 0xD08E, 0xD08F, 0xD0E4, 0xD090, /* 0x90 */ + 0xD091, 0xD092, 0xD093, 0xD094, 0xCDE0, 0xD095, 0xD096, 0xD097, /* 0x90 */ + 0xD098, 0xD099, 0xF1C8, 0xD09A, 0xD9F3, 0xD09B, 0xD09C, 0xD09D, /* 0xA0 */ + 0xD09E, 0xD09F, 0xD0A0, 0xB1BB, 0xD140, 0xCFAE, 0xD141, 0xD142, /* 0xA0 */ + 0xD143, 0xB8A4, 0xD144, 0xD145, 0xD146, 0xD147, 0xD148, 0xF1CA, /* 0xB0 */ + 0xD149, 0xD14A, 0xD14B, 0xD14C, 0xF1CB, 0xD14D, 0xD14E, 0xD14F, /* 0xB0 */ + 0xD150, 0xB2C3, 0xC1D1, 0xD151, 0xD152, 0xD7B0, 0xF1C9, 0xD153, /* 0xC0 */ + 0xD154, 0xF1CC, 0xD155, 0xD156, 0xD157, 0xD158, 0xF1CE, 0xD159, /* 0xC0 */ + 0xD15A, 0xD15B, 0xD9F6, 0xD15C, 0xD2E1, 0xD4A3, 0xD15D, 0xD15E, /* 0xD0 */ + 0xF4C3, 0xC8B9, 0xD15F, 0xD160, 0xD161, 0xD162, 0xD163, 0xF4C4, /* 0xD0 */ + 0xD164, 0xD165, 0xF1CD, 0xF1CF, 0xBFE3, 0xF1D0, 0xD166, 0xD167, /* 0xE0 */ + 0xF1D4, 0xD168, 0xD169, 0xD16A, 0xD16B, 0xD16C, 0xD16D, 0xD16E, /* 0xE0 */ + 0xF1D6, 0xF1D1, 0xD16F, 0xC9D1, 0xC5E1, 0xD170, 0xD171, 0xD172, /* 0xF0 */ + 0xC2E3, 0xB9FC, 0xD173, 0xD174, 0xF1D3, 0xD175, 0xF1D5, 0xD176 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD177, 0xD178, 0xB9D3, 0xD179, 0xD17A, 0xD17B, 0xD17C, 0xD17D, /* 0x00 */ + 0xD17E, 0xD180, 0xF1DB, 0xD181, 0xD182, 0xD183, 0xD184, 0xD185, /* 0x00 */ + 0xBAD6, 0xD186, 0xB0FD, 0xF1D9, 0xD187, 0xD188, 0xD189, 0xD18A, /* 0x10 */ + 0xD18B, 0xF1D8, 0xF1D2, 0xF1DA, 0xD18C, 0xD18D, 0xD18E, 0xD18F, /* 0x10 */ + 0xD190, 0xF1D7, 0xD191, 0xD192, 0xD193, 0xC8EC, 0xD194, 0xD195, /* 0x20 */ + 0xD196, 0xD197, 0xCDCA, 0xF1DD, 0xD198, 0xD199, 0xD19A, 0xD19B, /* 0x20 */ + 0xE5BD, 0xD19C, 0xD19D, 0xD19E, 0xF1DC, 0xD19F, 0xF1DE, 0xD1A0, /* 0x30 */ + 0xD240, 0xD241, 0xD242, 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, /* 0x30 */ + 0xD248, 0xF1DF, 0xD249, 0xD24A, 0xCFE5, 0xD24B, 0xD24C, 0xD24D, /* 0x40 */ + 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, /* 0x40 */ + 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25C, 0xD25D, /* 0x50 */ + 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0xF4C5, 0xBDF3, /* 0x50 */ + 0xD264, 0xD265, 0xD266, 0xD267, 0xD268, 0xD269, 0xF1E0, 0xD26A, /* 0x60 */ + 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, /* 0x60 */ + 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, 0xD27A, /* 0x70 */ + 0xD27B, 0xD27C, 0xD27D, 0xF1E1, 0xD27E, 0xD280, 0xD281, 0xCEF7, /* 0x70 */ + 0xD282, 0xD2AA, 0xD283, 0xF1FB, 0xD284, 0xD285, 0xB8B2, 0xD286, /* 0x80 */ + 0xD287, 0xD288, 0xD289, 0xD28A, 0xD28B, 0xD28C, 0xD28D, 0xD28E, /* 0x80 */ + 0xD28F, 0xD290, 0xD291, 0xD292, 0xD293, 0xD294, 0xD295, 0xD296, /* 0x90 */ + 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29C, 0xD29D, 0xD29E, /* 0x90 */ + 0xD29F, 0xD2A0, 0xD340, 0xD341, 0xD342, 0xD343, 0xD344, 0xD345, /* 0xA0 */ + 0xD346, 0xD347, 0xD348, 0xD349, 0xD34A, 0xD34B, 0xD34C, 0xD34D, /* 0xA0 */ + 0xD34E, 0xD34F, 0xD350, 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, /* 0xB0 */ + 0xD356, 0xD357, 0xD358, 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, /* 0xB0 */ + 0xD35E, 0xBCFB, 0xB9DB, 0xD35F, 0xB9E6, 0xC3D9, 0xCAD3, 0xEAE8, /* 0xC0 */ + 0xC0C0, 0xBEF5, 0xEAE9, 0xEAEA, 0xEAEB, 0xD360, 0xEAEC, 0xEAED, /* 0xC0 */ + 0xEAEE, 0xEAEF, 0xBDC7, 0xD361, 0xD362, 0xD363, 0xF5FB, 0xD364, /* 0xD0 */ + 0xD365, 0xD366, 0xF5FD, 0xD367, 0xF5FE, 0xD368, 0xF5FC, 0xD369, /* 0xD0 */ + 0xD36A, 0xD36B, 0xD36C, 0xBDE2, 0xD36D, 0xF6A1, 0xB4A5, 0xD36E, /* 0xE0 */ + 0xD36F, 0xD370, 0xD371, 0xF6A2, 0xD372, 0xD373, 0xD374, 0xF6A3, /* 0xE0 */ + 0xD375, 0xD376, 0xD377, 0xECB2, 0xD378, 0xD379, 0xD37A, 0xD37B, /* 0xF0 */ + 0xD37C, 0xD37D, 0xD37E, 0xD380, 0xD381, 0xD382, 0xD383, 0xD384 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1D4, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, 0xD9EA, /* 0x00 */ + 0xD38B, 0xD38C, 0xD38D, 0xD38E, 0xD38F, 0xD390, 0xD391, 0xD392, /* 0x00 */ + 0xD393, 0xD394, 0xD395, 0xD396, 0xD397, 0xD398, 0xD399, 0xD39A, /* 0x10 */ + 0xD39B, 0xD39C, 0xD39D, 0xD39E, 0xD39F, 0xD3A0, 0xD440, 0xD441, /* 0x10 */ + 0xD442, 0xD443, 0xD444, 0xD445, 0xD446, 0xD447, 0xD448, 0xD449, /* 0x20 */ + 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, 0xD451, /* 0x20 */ + 0xD452, 0xD453, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458, 0xD459, /* 0x30 */ + 0xD45A, 0xD45B, 0xD45C, 0xD45D, 0xD45E, 0xD45F, 0xF6A4, 0xD460, /* 0x30 */ + 0xD461, 0xD462, 0xD463, 0xD464, 0xD465, 0xD466, 0xD467, 0xD468, /* 0x40 */ + 0xEEBA, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46D, 0xD46E, 0xD46F, /* 0x40 */ + 0xD470, 0xD471, 0xD472, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, /* 0x50 */ + 0xD478, 0xD479, 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0xD47E, 0xD480, /* 0x50 */ + 0xD481, 0xD482, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487, 0xD488, /* 0x60 */ + 0xD489, 0xD48A, 0xD48B, 0xD48C, 0xD48D, 0xD48E, 0xD48F, 0xD490, /* 0x60 */ + 0xD491, 0xD492, 0xD493, 0xD494, 0xD495, 0xD496, 0xD497, 0xD498, /* 0x70 */ + 0xD499, 0xD5B2, 0xD49A, 0xD49B, 0xD49C, 0xD49D, 0xD49E, 0xD49F, /* 0x70 */ + 0xD4A0, 0xD540, 0xD541, 0xD542, 0xD543, 0xD544, 0xD545, 0xD546, /* 0x80 */ + 0xD547, 0xD3FE, 0xCCDC, 0xD548, 0xD549, 0xD54A, 0xD54B, 0xD54C, /* 0x80 */ + 0xD54D, 0xD54E, 0xD54F, 0xCAC4, 0xD550, 0xD551, 0xD552, 0xD553, /* 0x90 */ + 0xD554, 0xD555, 0xD556, 0xD557, 0xD558, 0xD559, 0xD55A, 0xD55B, /* 0x90 */ + 0xD55C, 0xD55D, 0xD55E, 0xD55F, 0xD560, 0xD561, 0xD562, 0xD563, /* 0xA0 */ + 0xD564, 0xD565, 0xD566, 0xD567, 0xD568, 0xD569, 0xD56A, 0xD56B, /* 0xA0 */ + 0xD56C, 0xD56D, 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573, /* 0xB0 */ + 0xD574, 0xD575, 0xD576, 0xD577, 0xD578, 0xD579, 0xD57A, 0xD57B, /* 0xB0 */ + 0xD57C, 0xD57D, 0xD57E, 0xD580, 0xD581, 0xD582, 0xD583, 0xD584, /* 0xC0 */ + 0xD585, 0xD586, 0xD587, 0xD588, 0xD589, 0xD58A, 0xD58B, 0xD58C, /* 0xC0 */ + 0xD58D, 0xD58E, 0xD58F, 0xD590, 0xD591, 0xD592, 0xD593, 0xD594, /* 0xD0 */ + 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, 0xD59C, /* 0xD0 */ + 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD640, 0xD641, 0xD642, 0xD643, /* 0xE0 */ + 0xD644, 0xD645, 0xD646, 0xD647, 0xD648, 0xD649, 0xD64A, 0xD64B, /* 0xE0 */ + 0xD64C, 0xD64D, 0xD64E, 0xD64F, 0xD650, 0xD651, 0xD652, 0xD653, /* 0xF0 */ + 0xD654, 0xD655, 0xD656, 0xD657, 0xD658, 0xD659, 0xD65A, 0xD65B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD65C, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662, 0xE5C0, /* 0x00 */ + 0xD663, 0xD664, 0xD665, 0xD666, 0xD667, 0xD668, 0xD669, 0xD66A, /* 0x00 */ + 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0xD670, 0xD671, 0xD672, /* 0x10 */ + 0xD673, 0xD674, 0xD675, 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, /* 0x10 */ + 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0xD680, 0xD681, 0xF6A5, 0xD682, /* 0x20 */ + 0xD683, 0xD684, 0xD685, 0xD686, 0xD687, 0xD688, 0xD689, 0xD68A, /* 0x20 */ + 0xD68B, 0xD68C, 0xD68D, 0xD68E, 0xD68F, 0xD690, 0xD691, 0xD692, /* 0x30 */ + 0xD693, 0xD694, 0xD695, 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, /* 0x30 */ + 0xD69B, 0xD69C, 0xD69D, 0xD69E, 0xD69F, 0xD6A0, 0xD740, 0xD741, /* 0x40 */ + 0xD742, 0xD743, 0xD744, 0xD745, 0xD746, 0xD747, 0xD748, 0xD749, /* 0x40 */ + 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0xD750, 0xD751, /* 0x50 */ + 0xD752, 0xD753, 0xD754, 0xD755, 0xD756, 0xD757, 0xD758, 0xD759, /* 0x50 */ + 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, 0xD75F, 0xBEAF, 0xD760, /* 0x60 */ + 0xD761, 0xD762, 0xD763, 0xD764, 0xC6A9, 0xD765, 0xD766, 0xD767, /* 0x60 */ + 0xD768, 0xD769, 0xD76A, 0xD76B, 0xD76C, 0xD76D, 0xD76E, 0xD76F, /* 0x70 */ + 0xD770, 0xD771, 0xD772, 0xD773, 0xD774, 0xD775, 0xD776, 0xD777, /* 0x70 */ + 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77C, 0xD77D, 0xD77E, 0xD780, /* 0x80 */ + 0xD781, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD788, /* 0x80 */ + 0xD789, 0xD78A, 0xD78B, 0xD78C, 0xD78D, 0xD78E, 0xD78F, 0xD790, /* 0x90 */ + 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, 0xD796, 0xD797, 0xD798, /* 0x90 */ + 0xDAA5, 0xBCC6, 0xB6A9, 0xB8BC, 0xC8CF, 0xBCA5, 0xDAA6, 0xDAA7, /* 0xA0 */ + 0xCCD6, 0xC8C3, 0xDAA8, 0xC6FD, 0xD799, 0xD1B5, 0xD2E9, 0xD1B6, /* 0xA0 */ + 0xBCC7, 0xD79A, 0xBDB2, 0xBBE4, 0xDAA9, 0xDAAA, 0xD1C8, 0xDAAB, /* 0xB0 */ + 0xD0ED, 0xB6EF, 0xC2DB, 0xD79B, 0xCBCF, 0xB7ED, 0xC9E8, 0xB7C3, /* 0xB0 */ + 0xBEF7, 0xD6A4, 0xDAAC, 0xDAAD, 0xC6C0, 0xD7E7, 0xCAB6, 0xD79C, /* 0xC0 */ + 0xD5A9, 0xCBDF, 0xD5EF, 0xDAAE, 0xD6DF, 0xB4CA, 0xDAB0, 0xDAAF, /* 0xC0 */ + 0xD79D, 0xD2EB, 0xDAB1, 0xDAB2, 0xDAB3, 0xCAD4, 0xDAB4, 0xCAAB, /* 0xD0 */ + 0xDAB5, 0xDAB6, 0xB3CF, 0xD6EF, 0xDAB7, 0xBBB0, 0xB5AE, 0xDAB8, /* 0xD0 */ + 0xDAB9, 0xB9EE, 0xD1AF, 0xD2E8, 0xDABA, 0xB8C3, 0xCFEA, 0xB2EF, /* 0xE0 */ + 0xDABB, 0xDABC, 0xD79E, 0xBDEB, 0xCEDC, 0xD3EF, 0xDABD, 0xCEF3, /* 0xE0 */ + 0xDABE, 0xD3D5, 0xBBE5, 0xDABF, 0xCBB5, 0xCBD0, 0xDAC0, 0xC7EB, /* 0xF0 */ + 0xD6EE, 0xDAC1, 0xC5B5, 0xB6C1, 0xDAC2, 0xB7CC, 0xBFCE, 0xDAC3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDAC4, 0xCBAD, 0xDAC5, 0xB5F7, 0xDAC6, 0xC1C2, 0xD7BB, 0xDAC7, /* 0x00 */ + 0xCCB8, 0xD79F, 0xD2EA, 0xC4B1, 0xDAC8, 0xB5FD, 0xBBD1, 0xDAC9, /* 0x00 */ + 0xD0B3, 0xDACA, 0xDACB, 0xCEBD, 0xDACC, 0xDACD, 0xDACE, 0xB2F7, /* 0x10 */ + 0xDAD1, 0xDACF, 0xD1E8, 0xDAD0, 0xC3D5, 0xDAD2, 0xD7A0, 0xDAD3, /* 0x10 */ + 0xDAD4, 0xDAD5, 0xD0BB, 0xD2A5, 0xB0F9, 0xDAD6, 0xC7AB, 0xDAD7, /* 0x20 */ + 0xBDF7, 0xC3A1, 0xDAD8, 0xDAD9, 0xC3FD, 0xCCB7, 0xDADA, 0xDADB, /* 0x20 */ + 0xC0BE, 0xC6D7, 0xDADC, 0xDADD, 0xC7B4, 0xDADE, 0xDADF, 0xB9C8, /* 0x30 */ + 0xD840, 0xD841, 0xD842, 0xD843, 0xD844, 0xD845, 0xD846, 0xD847, /* 0x30 */ + 0xD848, 0xBBED, 0xD849, 0xD84A, 0xD84B, 0xD84C, 0xB6B9, 0xF4F8, /* 0x40 */ + 0xD84D, 0xF4F9, 0xD84E, 0xD84F, 0xCDE3, 0xD850, 0xD851, 0xD852, /* 0x40 */ + 0xD853, 0xD854, 0xD855, 0xD856, 0xD857, 0xF5B9, 0xD858, 0xD859, /* 0x50 */ + 0xD85A, 0xD85B, 0xEBE0, 0xD85C, 0xD85D, 0xD85E, 0xD85F, 0xD860, /* 0x50 */ + 0xD861, 0xCFF3, 0xBBBF, 0xD862, 0xD863, 0xD864, 0xD865, 0xD866, /* 0x60 */ + 0xD867, 0xD868, 0xBAC0, 0xD4A5, 0xD869, 0xD86A, 0xD86B, 0xD86C, /* 0x60 */ + 0xD86D, 0xD86E, 0xD86F, 0xE1D9, 0xD870, 0xD871, 0xD872, 0xD873, /* 0x70 */ + 0xF5F4, 0xB1AA, 0xB2F2, 0xD874, 0xD875, 0xD876, 0xD877, 0xD878, /* 0x70 */ + 0xD879, 0xD87A, 0xF5F5, 0xD87B, 0xD87C, 0xF5F7, 0xD87D, 0xD87E, /* 0x80 */ + 0xD880, 0xBAD1, 0xF5F6, 0xD881, 0xC3B2, 0xD882, 0xD883, 0xD884, /* 0x80 */ + 0xD885, 0xD886, 0xD887, 0xD888, 0xF5F9, 0xD889, 0xD88A, 0xD88B, /* 0x90 */ + 0xF5F8, 0xD88C, 0xD88D, 0xD88E, 0xD88F, 0xD890, 0xD891, 0xD892, /* 0x90 */ + 0xD893, 0xD894, 0xD895, 0xD896, 0xD897, 0xD898, 0xD899, 0xD89A, /* 0xA0 */ + 0xD89B, 0xD89C, 0xD89D, 0xD89E, 0xD89F, 0xD8A0, 0xD940, 0xD941, /* 0xA0 */ + 0xD942, 0xD943, 0xD944, 0xD945, 0xD946, 0xD947, 0xD948, 0xD949, /* 0xB0 */ + 0xD94A, 0xD94B, 0xD94C, 0xD94D, 0xD94E, 0xD94F, 0xD950, 0xD951, /* 0xB0 */ + 0xD952, 0xD953, 0xD954, 0xD955, 0xD956, 0xD957, 0xD958, 0xD959, /* 0xC0 */ + 0xD95A, 0xD95B, 0xD95C, 0xD95D, 0xD95E, 0xD95F, 0xD960, 0xD961, /* 0xC0 */ + 0xD962, 0xD963, 0xD964, 0xD965, 0xD966, 0xD967, 0xD968, 0xD969, /* 0xD0 */ + 0xD96A, 0xD96B, 0xD96C, 0xD96D, 0xD96E, 0xD96F, 0xD970, 0xD971, /* 0xD0 */ + 0xD972, 0xD973, 0xD974, 0xD975, 0xD976, 0xD977, 0xD978, 0xD979, /* 0xE0 */ + 0xD97A, 0xD97B, 0xD97C, 0xD97D, 0xD97E, 0xD980, 0xD981, 0xD982, /* 0xE0 */ + 0xD983, 0xD984, 0xD985, 0xD986, 0xD987, 0xD988, 0xD989, 0xD98A, /* 0xF0 */ + 0xD98B, 0xD98C, 0xD98D, 0xD98E, 0xD98F, 0xD990, 0xD991, 0xD992 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD993, 0xD994, 0xD995, 0xD996, 0xD997, 0xD998, 0xD999, 0xD99A, /* 0x00 */ + 0xD99B, 0xD99C, 0xD99D, 0xD99E, 0xD99F, 0xD9A0, 0xDA40, 0xDA41, /* 0x00 */ + 0xDA42, 0xDA43, 0xDA44, 0xDA45, 0xDA46, 0xDA47, 0xDA48, 0xDA49, /* 0x10 */ + 0xDA4A, 0xDA4B, 0xDA4C, 0xDA4D, 0xDA4E, 0xB1B4, 0xD5EA, 0xB8BA, /* 0x10 */ + 0xDA4F, 0xB9B1, 0xB2C6, 0xD4F0, 0xCFCD, 0xB0DC, 0xD5CB, 0xBBF5, /* 0x20 */ + 0xD6CA, 0xB7B7, 0xCCB0, 0xC6B6, 0xB1E1, 0xB9BA, 0xD6FC, 0xB9E1, /* 0x20 */ + 0xB7A1, 0xBCFA, 0xEADA, 0xEADB, 0xCCF9, 0xB9F3, 0xEADC, 0xB4FB, /* 0x30 */ + 0xC3B3, 0xB7D1, 0xBAD8, 0xEADD, 0xD4F4, 0xEADE, 0xBCD6, 0xBBDF, /* 0x30 */ + 0xEADF, 0xC1DE, 0xC2B8, 0xD4DF, 0xD7CA, 0xEAE0, 0xEAE1, 0xEAE4, /* 0x40 */ + 0xEAE2, 0xEAE3, 0xC9DE, 0xB8B3, 0xB6C4, 0xEAE5, 0xCAEA, 0xC9CD, /* 0x40 */ + 0xB4CD, 0xDA50, 0xDA51, 0xE2D9, 0xC5E2, 0xEAE6, 0xC0B5, 0xDA52, /* 0x50 */ + 0xD7B8, 0xEAE7, 0xD7AC, 0xC8FC, 0xD8D3, 0xD8CD, 0xD4DE, 0xDA53, /* 0x50 */ + 0xD4F9, 0xC9C4, 0xD3AE, 0xB8D3, 0xB3E0, 0xDA54, 0xC9E2, 0xF4F6, /* 0x60 */ + 0xDA55, 0xDA56, 0xDA57, 0xBAD5, 0xDA58, 0xF4F7, 0xDA59, 0xDA5A, /* 0x60 */ + 0xD7DF, 0xDA5B, 0xDA5C, 0xF4F1, 0xB8B0, 0xD5D4, 0xB8CF, 0xC6F0, /* 0x70 */ + 0xDA5D, 0xDA5E, 0xDA5F, 0xDA60, 0xDA61, 0xDA62, 0xDA63, 0xDA64, /* 0x70 */ + 0xDA65, 0xB3C3, 0xDA66, 0xDA67, 0xF4F2, 0xB3AC, 0xDA68, 0xDA69, /* 0x80 */ + 0xDA6A, 0xDA6B, 0xD4BD, 0xC7F7, 0xDA6C, 0xDA6D, 0xDA6E, 0xDA6F, /* 0x80 */ + 0xDA70, 0xF4F4, 0xDA71, 0xDA72, 0xF4F3, 0xDA73, 0xDA74, 0xDA75, /* 0x90 */ + 0xDA76, 0xDA77, 0xDA78, 0xDA79, 0xDA7A, 0xDA7B, 0xDA7C, 0xCCCB, /* 0x90 */ + 0xDA7D, 0xDA7E, 0xDA80, 0xC8A4, 0xDA81, 0xDA82, 0xDA83, 0xDA84, /* 0xA0 */ + 0xDA85, 0xDA86, 0xDA87, 0xDA88, 0xDA89, 0xDA8A, 0xDA8B, 0xDA8C, /* 0xA0 */ + 0xDA8D, 0xF4F5, 0xDA8E, 0xD7E3, 0xC5BF, 0xF5C0, 0xDA8F, 0xDA90, /* 0xB0 */ + 0xF5BB, 0xDA91, 0xF5C3, 0xDA92, 0xF5C2, 0xDA93, 0xD6BA, 0xF5C1, /* 0xB0 */ + 0xDA94, 0xDA95, 0xDA96, 0xD4BE, 0xF5C4, 0xDA97, 0xF5CC, 0xDA98, /* 0xC0 */ + 0xDA99, 0xDA9A, 0xDA9B, 0xB0CF, 0xB5F8, 0xDA9C, 0xF5C9, 0xF5CA, /* 0xC0 */ + 0xDA9D, 0xC5DC, 0xDA9E, 0xDA9F, 0xDAA0, 0xDB40, 0xF5C5, 0xF5C6, /* 0xD0 */ + 0xDB41, 0xDB42, 0xF5C7, 0xF5CB, 0xDB43, 0xBEE0, 0xF5C8, 0xB8FA, /* 0xD0 */ + 0xDB44, 0xDB45, 0xDB46, 0xF5D0, 0xF5D3, 0xDB47, 0xDB48, 0xDB49, /* 0xE0 */ + 0xBFE7, 0xDB4A, 0xB9F2, 0xF5BC, 0xF5CD, 0xDB4B, 0xDB4C, 0xC2B7, /* 0xE0 */ + 0xDB4D, 0xDB4E, 0xDB4F, 0xCCF8, 0xDB50, 0xBCF9, 0xDB51, 0xF5CE, /* 0xF0 */ + 0xF5CF, 0xF5D1, 0xB6E5, 0xF5D2, 0xDB52, 0xF5D5, 0xDB53, 0xDB54 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDB55, 0xDB56, 0xDB57, 0xDB58, 0xDB59, 0xF5BD, 0xDB5A, 0xDB5B, /* 0x00 */ + 0xDB5C, 0xF5D4, 0xD3BB, 0xDB5D, 0xB3EC, 0xDB5E, 0xDB5F, 0xCCA4, /* 0x00 */ + 0xDB60, 0xDB61, 0xDB62, 0xDB63, 0xF5D6, 0xDB64, 0xDB65, 0xDB66, /* 0x10 */ + 0xDB67, 0xDB68, 0xDB69, 0xDB6A, 0xDB6B, 0xF5D7, 0xBEE1, 0xF5D8, /* 0x10 */ + 0xDB6C, 0xDB6D, 0xCCDF, 0xF5DB, 0xDB6E, 0xDB6F, 0xDB70, 0xDB71, /* 0x20 */ + 0xDB72, 0xB2C8, 0xD7D9, 0xDB73, 0xF5D9, 0xDB74, 0xF5DA, 0xF5DC, /* 0x20 */ + 0xDB75, 0xF5E2, 0xDB76, 0xDB77, 0xDB78, 0xF5E0, 0xDB79, 0xDB7A, /* 0x30 */ + 0xDB7B, 0xF5DF, 0xF5DD, 0xDB7C, 0xDB7D, 0xF5E1, 0xDB7E, 0xDB80, /* 0x30 */ + 0xF5DE, 0xF5E4, 0xF5E5, 0xDB81, 0xCCE3, 0xDB82, 0xDB83, 0xE5BF, /* 0x40 */ + 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0xDB84, 0xDB85, 0xDB86, 0xDB87, /* 0x40 */ + 0xDB88, 0xF5E6, 0xF5E7, 0xDB89, 0xDB8A, 0xDB8B, 0xDB8C, 0xDB8D, /* 0x50 */ + 0xDB8E, 0xF5BE, 0xDB8F, 0xDB90, 0xDB91, 0xDB92, 0xDB93, 0xDB94, /* 0x50 */ + 0xDB95, 0xDB96, 0xDB97, 0xDB98, 0xDB99, 0xDB9A, 0xB1C4, 0xDB9B, /* 0x60 */ + 0xDB9C, 0xF5BF, 0xDB9D, 0xDB9E, 0xB5C5, 0xB2E4, 0xDB9F, 0xF5EC, /* 0x60 */ + 0xF5E9, 0xDBA0, 0xB6D7, 0xDC40, 0xF5ED, 0xDC41, 0xF5EA, 0xDC42, /* 0x70 */ + 0xDC43, 0xDC44, 0xDC45, 0xDC46, 0xF5EB, 0xDC47, 0xDC48, 0xB4DA, /* 0x70 */ + 0xDC49, 0xD4EA, 0xDC4A, 0xDC4B, 0xDC4C, 0xF5EE, 0xDC4D, 0xB3F9, /* 0x80 */ + 0xDC4E, 0xDC4F, 0xDC50, 0xDC51, 0xDC52, 0xDC53, 0xDC54, 0xF5EF, /* 0x80 */ + 0xF5F1, 0xDC55, 0xDC56, 0xDC57, 0xF5F0, 0xDC58, 0xDC59, 0xDC5A, /* 0x90 */ + 0xDC5B, 0xDC5C, 0xDC5D, 0xDC5E, 0xF5F2, 0xDC5F, 0xF5F3, 0xDC60, /* 0x90 */ + 0xDC61, 0xDC62, 0xDC63, 0xDC64, 0xDC65, 0xDC66, 0xDC67, 0xDC68, /* 0xA0 */ + 0xDC69, 0xDC6A, 0xDC6B, 0xC9ED, 0xB9AA, 0xDC6C, 0xDC6D, 0xC7FB, /* 0xA0 */ + 0xDC6E, 0xDC6F, 0xB6E3, 0xDC70, 0xDC71, 0xDC72, 0xDC73, 0xDC74, /* 0xB0 */ + 0xDC75, 0xDC76, 0xCCC9, 0xDC77, 0xDC78, 0xDC79, 0xDC7A, 0xDC7B, /* 0xB0 */ + 0xDC7C, 0xDC7D, 0xDC7E, 0xDC80, 0xDC81, 0xDC82, 0xDC83, 0xDC84, /* 0xC0 */ + 0xDC85, 0xDC86, 0xDC87, 0xDC88, 0xDC89, 0xDC8A, 0xEAA6, 0xDC8B, /* 0xC0 */ + 0xDC8C, 0xDC8D, 0xDC8E, 0xDC8F, 0xDC90, 0xDC91, 0xDC92, 0xDC93, /* 0xD0 */ + 0xDC94, 0xDC95, 0xDC96, 0xDC97, 0xDC98, 0xDC99, 0xDC9A, 0xDC9B, /* 0xD0 */ + 0xDC9C, 0xDC9D, 0xDC9E, 0xDC9F, 0xDCA0, 0xDD40, 0xDD41, 0xDD42, /* 0xE0 */ + 0xDD43, 0xDD44, 0xDD45, 0xDD46, 0xDD47, 0xDD48, 0xDD49, 0xDD4A, /* 0xE0 */ + 0xDD4B, 0xDD4C, 0xDD4D, 0xDD4E, 0xDD4F, 0xDD50, 0xDD51, 0xDD52, /* 0xF0 */ + 0xDD53, 0xDD54, 0xDD55, 0xDD56, 0xDD57, 0xDD58, 0xDD59, 0xDD5A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDD5B, 0xDD5C, 0xDD5D, 0xDD5E, 0xDD5F, 0xDD60, 0xDD61, 0xDD62, /* 0x00 */ + 0xDD63, 0xDD64, 0xDD65, 0xDD66, 0xDD67, 0xDD68, 0xDD69, 0xDD6A, /* 0x00 */ + 0xDD6B, 0xDD6C, 0xDD6D, 0xDD6E, 0xDD6F, 0xDD70, 0xDD71, 0xDD72, /* 0x10 */ + 0xDD73, 0xDD74, 0xDD75, 0xDD76, 0xDD77, 0xDD78, 0xDD79, 0xDD7A, /* 0x10 */ + 0xDD7B, 0xDD7C, 0xDD7D, 0xDD7E, 0xDD80, 0xDD81, 0xDD82, 0xDD83, /* 0x20 */ + 0xDD84, 0xDD85, 0xDD86, 0xDD87, 0xDD88, 0xDD89, 0xDD8A, 0xDD8B, /* 0x20 */ + 0xDD8C, 0xDD8D, 0xDD8E, 0xDD8F, 0xDD90, 0xDD91, 0xDD92, 0xDD93, /* 0x30 */ + 0xDD94, 0xDD95, 0xDD96, 0xDD97, 0xDD98, 0xDD99, 0xDD9A, 0xDD9B, /* 0x30 */ + 0xDD9C, 0xDD9D, 0xDD9E, 0xDD9F, 0xDDA0, 0xDE40, 0xDE41, 0xDE42, /* 0x40 */ + 0xDE43, 0xDE44, 0xDE45, 0xDE46, 0xDE47, 0xDE48, 0xDE49, 0xDE4A, /* 0x40 */ + 0xDE4B, 0xDE4C, 0xDE4D, 0xDE4E, 0xDE4F, 0xDE50, 0xDE51, 0xDE52, /* 0x50 */ + 0xDE53, 0xDE54, 0xDE55, 0xDE56, 0xDE57, 0xDE58, 0xDE59, 0xDE5A, /* 0x50 */ + 0xDE5B, 0xDE5C, 0xDE5D, 0xDE5E, 0xDE5F, 0xDE60, 0xB3B5, 0xD4FE, /* 0x60 */ + 0xB9EC, 0xD0F9, 0xDE61, 0xE9ED, 0xD7AA, 0xE9EE, 0xC2D6, 0xC8ED, /* 0x60 */ + 0xBAE4, 0xE9EF, 0xE9F0, 0xE9F1, 0xD6E1, 0xE9F2, 0xE9F3, 0xE9F5, /* 0x70 */ + 0xE9F4, 0xE9F6, 0xE9F7, 0xC7E1, 0xE9F8, 0xD4D8, 0xE9F9, 0xBDCE, /* 0x70 */ + 0xDE62, 0xE9FA, 0xE9FB, 0xBDCF, 0xE9FC, 0xB8A8, 0xC1BE, 0xE9FD, /* 0x80 */ + 0xB1B2, 0xBBD4, 0xB9F5, 0xE9FE, 0xDE63, 0xEAA1, 0xEAA2, 0xEAA3, /* 0x80 */ + 0xB7F8, 0xBCAD, 0xDE64, 0xCAE4, 0xE0CE, 0xD4AF, 0xCFBD, 0xD5B7, /* 0x90 */ + 0xEAA4, 0xD5DE, 0xEAA5, 0xD0C1, 0xB9BC, 0xDE65, 0xB4C7, 0xB1D9, /* 0x90 */ + 0xDE66, 0xDE67, 0xDE68, 0xC0B1, 0xDE69, 0xDE6A, 0xDE6B, 0xDE6C, /* 0xA0 */ + 0xB1E6, 0xB1E7, 0xDE6D, 0xB1E8, 0xDE6E, 0xDE6F, 0xDE70, 0xDE71, /* 0xA0 */ + 0xB3BD, 0xC8E8, 0xDE72, 0xDE73, 0xDE74, 0xDE75, 0xE5C1, 0xDE76, /* 0xB0 */ + 0xDE77, 0xB1DF, 0xDE78, 0xDE79, 0xDE7A, 0xC1C9, 0xB4EF, 0xDE7B, /* 0xB0 */ + 0xDE7C, 0xC7A8, 0xD3D8, 0xDE7D, 0xC6F9, 0xD1B8, 0xDE7E, 0xB9FD, /* 0xC0 */ + 0xC2F5, 0xDE80, 0xDE81, 0xDE82, 0xDE83, 0xDE84, 0xD3AD, 0xDE85, /* 0xC0 */ + 0xD4CB, 0xBDFC, 0xDE86, 0xE5C2, 0xB7B5, 0xE5C3, 0xDE87, 0xDE88, /* 0xD0 */ + 0xBBB9, 0xD5E2, 0xDE89, 0xBDF8, 0xD4B6, 0xCEA5, 0xC1AC, 0xB3D9, /* 0xD0 */ + 0xDE8A, 0xDE8B, 0xCCF6, 0xDE8C, 0xE5C6, 0xE5C4, 0xE5C8, 0xDE8D, /* 0xE0 */ + 0xE5CA, 0xE5C7, 0xB5CF, 0xC6C8, 0xDE8E, 0xB5FC, 0xE5C5, 0xDE8F, /* 0xE0 */ + 0xCAF6, 0xDE90, 0xDE91, 0xE5C9, 0xDE92, 0xDE93, 0xDE94, 0xC3D4, /* 0xF0 */ + 0xB1C5, 0xBCA3, 0xDE95, 0xDE96, 0xDE97, 0xD7B7, 0xDE98, 0xDE99 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDCB, 0xCBCD, 0xCACA, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0xDE9A, /* 0x00 */ + 0xDE9B, 0xD1A1, 0xD1B7, 0xE5CD, 0xDE9C, 0xE5D0, 0xDE9D, 0xCDB8, /* 0x00 */ + 0xD6F0, 0xE5CF, 0xB5DD, 0xDE9E, 0xCDBE, 0xDE9F, 0xE5D1, 0xB6BA, /* 0x10 */ + 0xDEA0, 0xDF40, 0xCDA8, 0xB9E4, 0xDF41, 0xCAC5, 0xB3D1, 0xCBD9, /* 0x10 */ + 0xD4EC, 0xE5D2, 0xB7EA, 0xDF42, 0xDF43, 0xDF44, 0xE5CE, 0xDF45, /* 0x20 */ + 0xDF46, 0xDF47, 0xDF48, 0xDF49, 0xDF4A, 0xE5D5, 0xB4FE, 0xE5D6, /* 0x20 */ + 0xDF4B, 0xDF4C, 0xDF4D, 0xDF4E, 0xDF4F, 0xE5D3, 0xE5D4, 0xDF50, /* 0x30 */ + 0xD2DD, 0xDF51, 0xDF52, 0xC2DF, 0xB1C6, 0xDF53, 0xD3E2, 0xDF54, /* 0x30 */ + 0xDF55, 0xB6DD, 0xCBEC, 0xDF56, 0xE5D7, 0xDF57, 0xDF58, 0xD3F6, /* 0x40 */ + 0xDF59, 0xDF5A, 0xDF5B, 0xDF5C, 0xDF5D, 0xB1E9, 0xDF5E, 0xB6F4, /* 0x40 */ + 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0xDF5F, 0xDF60, 0xDF61, 0xD2C5, /* 0x50 */ + 0xE5DC, 0xDF62, 0xDF63, 0xE5DE, 0xDF64, 0xDF65, 0xDF66, 0xDF67, /* 0x50 */ + 0xDF68, 0xDF69, 0xE5DD, 0xC7B2, 0xDF6A, 0xD2A3, 0xDF6B, 0xDF6C, /* 0x60 */ + 0xE5DB, 0xDF6D, 0xDF6E, 0xDF6F, 0xDF70, 0xD4E2, 0xD5DA, 0xDF71, /* 0x60 */ + 0xDF72, 0xDF73, 0xDF74, 0xDF75, 0xE5E0, 0xD7F1, 0xDF76, 0xDF77, /* 0x70 */ + 0xDF78, 0xDF79, 0xDF7A, 0xDF7B, 0xDF7C, 0xE5E1, 0xDF7D, 0xB1DC, /* 0x70 */ + 0xD1FB, 0xDF7E, 0xE5E2, 0xE5E4, 0xDF80, 0xDF81, 0xDF82, 0xDF83, /* 0x80 */ + 0xE5E3, 0xDF84, 0xDF85, 0xE5E5, 0xDF86, 0xDF87, 0xDF88, 0xDF89, /* 0x80 */ + 0xDF8A, 0xD2D8, 0xDF8B, 0xB5CB, 0xDF8C, 0xE7DF, 0xDF8D, 0xDAF5, /* 0x90 */ + 0xDF8E, 0xDAF8, 0xDF8F, 0xDAF6, 0xDF90, 0xDAF7, 0xDF91, 0xDF92, /* 0x90 */ + 0xDF93, 0xDAFA, 0xD0CF, 0xC4C7, 0xDF94, 0xDF95, 0xB0EE, 0xDF96, /* 0xA0 */ + 0xDF97, 0xDF98, 0xD0B0, 0xDF99, 0xDAF9, 0xDF9A, 0xD3CA, 0xBAAA, /* 0xA0 */ + 0xDBA2, 0xC7F1, 0xDF9B, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0xDF9C, /* 0xB0 */ + 0xDBA1, 0xD7DE, 0xDAFE, 0xC1DA, 0xDF9D, 0xDF9E, 0xDBA5, 0xDF9F, /* 0xB0 */ + 0xDFA0, 0xD3F4, 0xE040, 0xE041, 0xDBA7, 0xDBA4, 0xE042, 0xDBA8, /* 0xC0 */ + 0xE043, 0xE044, 0xBDBC, 0xE045, 0xE046, 0xE047, 0xC0C9, 0xDBA3, /* 0xC0 */ + 0xDBA6, 0xD6A3, 0xE048, 0xDBA9, 0xE049, 0xE04A, 0xE04B, 0xDBAD, /* 0xD0 */ + 0xE04C, 0xE04D, 0xE04E, 0xDBAE, 0xDBAC, 0xBAC2, 0xE04F, 0xE050, /* 0xD0 */ + 0xE051, 0xBFA4, 0xDBAB, 0xE052, 0xE053, 0xE054, 0xDBAA, 0xD4C7, /* 0xE0 */ + 0xB2BF, 0xE055, 0xE056, 0xDBAF, 0xE057, 0xB9F9, 0xE058, 0xDBB0, /* 0xE0 */ + 0xE059, 0xE05A, 0xE05B, 0xE05C, 0xB3BB, 0xE05D, 0xE05E, 0xE05F, /* 0xF0 */ + 0xB5A6, 0xE060, 0xE061, 0xE062, 0xE063, 0xB6BC, 0xDBB1, 0xE064 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE065, 0xE066, 0xB6F5, 0xE067, 0xDBB2, 0xE068, 0xE069, 0xE06A, /* 0x00 */ + 0xE06B, 0xE06C, 0xE06D, 0xE06E, 0xE06F, 0xE070, 0xE071, 0xE072, /* 0x00 */ + 0xE073, 0xE074, 0xE075, 0xE076, 0xE077, 0xE078, 0xE079, 0xE07A, /* 0x10 */ + 0xE07B, 0xB1C9, 0xE07C, 0xE07D, 0xE07E, 0xE080, 0xDBB4, 0xE081, /* 0x10 */ + 0xE082, 0xE083, 0xDBB3, 0xDBB5, 0xE084, 0xE085, 0xE086, 0xE087, /* 0x20 */ + 0xE088, 0xE089, 0xE08A, 0xE08B, 0xE08C, 0xE08D, 0xE08E, 0xDBB7, /* 0x20 */ + 0xE08F, 0xDBB6, 0xE090, 0xE091, 0xE092, 0xE093, 0xE094, 0xE095, /* 0x30 */ + 0xE096, 0xDBB8, 0xE097, 0xE098, 0xE099, 0xE09A, 0xE09B, 0xE09C, /* 0x30 */ + 0xE09D, 0xE09E, 0xE09F, 0xDBB9, 0xE0A0, 0xE140, 0xDBBA, 0xE141, /* 0x40 */ + 0xE142, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, /* 0x40 */ + 0xF4FB, 0xE143, 0xBEC6, 0xE144, 0xE145, 0xE146, 0xE147, 0xD0EF, /* 0x50 */ + 0xE148, 0xE149, 0xB7D3, 0xE14A, 0xE14B, 0xD4CD, 0xCCAA, 0xE14C, /* 0x50 */ + 0xE14D, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0xE14E, 0xE14F, /* 0x60 */ + 0xE150, 0xF5A4, 0xC0D2, 0xE151, 0xB3EA, 0xE152, 0xCDAA, 0xF5A5, /* 0x60 */ + 0xF5A3, 0xBDB4, 0xF5A8, 0xE153, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, /* 0x70 */ + 0xCBE1, 0xF5AA, 0xE154, 0xE155, 0xE156, 0xF5A6, 0xF5A7, 0xC4F0, /* 0x70 */ + 0xE157, 0xE158, 0xE159, 0xE15A, 0xE15B, 0xF5AC, 0xE15C, 0xB4BC, /* 0x80 */ + 0xE15D, 0xD7ED, 0xE15E, 0xB4D7, 0xF5AB, 0xF5AE, 0xE15F, 0xE160, /* 0x80 */ + 0xF5AD, 0xF5AF, 0xD0D1, 0xE161, 0xE162, 0xE163, 0xE164, 0xE165, /* 0x90 */ + 0xE166, 0xE167, 0xC3D1, 0xC8A9, 0xE168, 0xE169, 0xE16A, 0xE16B, /* 0x90 */ + 0xE16C, 0xE16D, 0xF5B0, 0xF5B1, 0xE16E, 0xE16F, 0xE170, 0xE171, /* 0xA0 */ + 0xE172, 0xE173, 0xF5B2, 0xE174, 0xE175, 0xF5B3, 0xF5B4, 0xF5B5, /* 0xA0 */ + 0xE176, 0xE177, 0xE178, 0xE179, 0xF5B7, 0xF5B6, 0xE17A, 0xE17B, /* 0xB0 */ + 0xE17C, 0xE17D, 0xF5B8, 0xE17E, 0xE180, 0xE181, 0xE182, 0xE183, /* 0xB0 */ + 0xE184, 0xE185, 0xE186, 0xE187, 0xE188, 0xE189, 0xE18A, 0xB2C9, /* 0xC0 */ + 0xE18B, 0xD3D4, 0xCACD, 0xE18C, 0xC0EF, 0xD6D8, 0xD2B0, 0xC1BF, /* 0xC0 */ + 0xE18D, 0xBDF0, 0xE18E, 0xE18F, 0xE190, 0xE191, 0xE192, 0xE193, /* 0xD0 */ + 0xE194, 0xE195, 0xE196, 0xE197, 0xB8AA, 0xE198, 0xE199, 0xE19A, /* 0xD0 */ + 0xE19B, 0xE19C, 0xE19D, 0xE19E, 0xE19F, 0xE1A0, 0xE240, 0xE241, /* 0xE0 */ + 0xE242, 0xE243, 0xE244, 0xE245, 0xE246, 0xE247, 0xE248, 0xE249, /* 0xE0 */ + 0xE24A, 0xE24B, 0xE24C, 0xE24D, 0xE24E, 0xE24F, 0xE250, 0xE251, /* 0xF0 */ + 0xE252, 0xE253, 0xE254, 0xE255, 0xE256, 0xE257, 0xE258, 0xE259 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE25A, 0xE25B, 0xE25C, 0xE25D, 0xE25E, 0xE25F, 0xE260, 0xE261, /* 0x00 */ + 0xE262, 0xE263, 0xE264, 0xE265, 0xE266, 0xE267, 0xE268, 0xE269, /* 0x00 */ + 0xE26A, 0xE26B, 0xE26C, 0xE26D, 0xE26E, 0xE26F, 0xE270, 0xE271, /* 0x10 */ + 0xE272, 0xE273, 0xE274, 0xE275, 0xE276, 0xE277, 0xE278, 0xE279, /* 0x10 */ + 0xE27A, 0xE27B, 0xE27C, 0xE27D, 0xE27E, 0xE280, 0xE281, 0xE282, /* 0x20 */ + 0xE283, 0xE284, 0xE285, 0xE286, 0xE287, 0xE288, 0xE289, 0xE28A, /* 0x20 */ + 0xE28B, 0xE28C, 0xE28D, 0xE28E, 0xE28F, 0xE290, 0xE291, 0xE292, /* 0x30 */ + 0xE293, 0xE294, 0xE295, 0xE296, 0xE297, 0xE298, 0xE299, 0xE29A, /* 0x30 */ + 0xE29B, 0xE29C, 0xE29D, 0xE29E, 0xE29F, 0xE2A0, 0xE340, 0xE341, /* 0x40 */ + 0xE342, 0xE343, 0xE344, 0xE345, 0xE346, 0xE347, 0xE348, 0xE349, /* 0x40 */ + 0xE34A, 0xE34B, 0xE34C, 0xE34D, 0xE34E, 0xE34F, 0xE350, 0xE351, /* 0x50 */ + 0xE352, 0xE353, 0xE354, 0xE355, 0xE356, 0xE357, 0xE358, 0xE359, /* 0x50 */ + 0xE35A, 0xE35B, 0xE35C, 0xE35D, 0xE35E, 0xE35F, 0xE360, 0xE361, /* 0x60 */ + 0xE362, 0xE363, 0xE364, 0xE365, 0xE366, 0xE367, 0xE368, 0xE369, /* 0x60 */ + 0xE36A, 0xE36B, 0xE36C, 0xE36D, 0xBCF8, 0xE36E, 0xE36F, 0xE370, /* 0x70 */ + 0xE371, 0xE372, 0xE373, 0xE374, 0xE375, 0xE376, 0xE377, 0xE378, /* 0x70 */ + 0xE379, 0xE37A, 0xE37B, 0xE37C, 0xE37D, 0xE37E, 0xE380, 0xE381, /* 0x80 */ + 0xE382, 0xE383, 0xE384, 0xE385, 0xE386, 0xE387, 0xF6C6, 0xE388, /* 0x80 */ + 0xE389, 0xE38A, 0xE38B, 0xE38C, 0xE38D, 0xE38E, 0xE38F, 0xE390, /* 0x90 */ + 0xE391, 0xE392, 0xE393, 0xE394, 0xE395, 0xE396, 0xE397, 0xE398, /* 0x90 */ + 0xE399, 0xE39A, 0xE39B, 0xE39C, 0xE39D, 0xE39E, 0xE39F, 0xE3A0, /* 0xA0 */ + 0xE440, 0xE441, 0xE442, 0xE443, 0xE444, 0xE445, 0xF6C7, 0xE446, /* 0xA0 */ + 0xE447, 0xE448, 0xE449, 0xE44A, 0xE44B, 0xE44C, 0xE44D, 0xE44E, /* 0xB0 */ + 0xE44F, 0xE450, 0xE451, 0xE452, 0xE453, 0xE454, 0xE455, 0xE456, /* 0xB0 */ + 0xE457, 0xE458, 0xE459, 0xE45A, 0xE45B, 0xE45C, 0xE45D, 0xE45E, /* 0xC0 */ + 0xF6C8, 0xE45F, 0xE460, 0xE461, 0xE462, 0xE463, 0xE464, 0xE465, /* 0xC0 */ + 0xE466, 0xE467, 0xE468, 0xE469, 0xE46A, 0xE46B, 0xE46C, 0xE46D, /* 0xD0 */ + 0xE46E, 0xE46F, 0xE470, 0xE471, 0xE472, 0xE473, 0xE474, 0xE475, /* 0xD0 */ + 0xE476, 0xE477, 0xE478, 0xE479, 0xE47A, 0xE47B, 0xE47C, 0xE47D, /* 0xE0 */ + 0xE47E, 0xE480, 0xE481, 0xE482, 0xE483, 0xE484, 0xE485, 0xE486, /* 0xE0 */ + 0xE487, 0xE488, 0xE489, 0xE48A, 0xE48B, 0xE48C, 0xE48D, 0xE48E, /* 0xF0 */ + 0xE48F, 0xE490, 0xE491, 0xE492, 0xE493, 0xE494, 0xE495, 0xE496 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE497, 0xE498, 0xE499, 0xE49A, 0xE49B, 0xE49C, 0xE49D, 0xE49E, /* 0x00 */ + 0xE49F, 0xE4A0, 0xE540, 0xE541, 0xE542, 0xE543, 0xE544, 0xE545, /* 0x00 */ + 0xE546, 0xE547, 0xE548, 0xE549, 0xE54A, 0xE54B, 0xE54C, 0xE54D, /* 0x10 */ + 0xE54E, 0xE54F, 0xE550, 0xE551, 0xE552, 0xE553, 0xE554, 0xE555, /* 0x10 */ + 0xE556, 0xE557, 0xE558, 0xE559, 0xE55A, 0xE55B, 0xE55C, 0xE55D, /* 0x20 */ + 0xE55E, 0xE55F, 0xE560, 0xE561, 0xE562, 0xE563, 0xE564, 0xE565, /* 0x20 */ + 0xE566, 0xE567, 0xE568, 0xE569, 0xE56A, 0xE56B, 0xE56C, 0xE56D, /* 0x30 */ + 0xE56E, 0xE56F, 0xE570, 0xE571, 0xE572, 0xE573, 0xF6C9, 0xE574, /* 0x30 */ + 0xE575, 0xE576, 0xE577, 0xE578, 0xE579, 0xE57A, 0xE57B, 0xE57C, /* 0x40 */ + 0xE57D, 0xE57E, 0xE580, 0xE581, 0xE582, 0xE583, 0xE584, 0xE585, /* 0x40 */ + 0xE586, 0xE587, 0xE588, 0xE589, 0xE58A, 0xE58B, 0xE58C, 0xE58D, /* 0x50 */ + 0xE58E, 0xE58F, 0xE590, 0xE591, 0xE592, 0xE593, 0xE594, 0xE595, /* 0x50 */ + 0xE596, 0xE597, 0xE598, 0xE599, 0xE59A, 0xE59B, 0xE59C, 0xE59D, /* 0x60 */ + 0xE59E, 0xE59F, 0xF6CA, 0xE5A0, 0xE640, 0xE641, 0xE642, 0xE643, /* 0x60 */ + 0xE644, 0xE645, 0xE646, 0xE647, 0xE648, 0xE649, 0xE64A, 0xE64B, /* 0x70 */ + 0xE64C, 0xE64D, 0xE64E, 0xE64F, 0xE650, 0xE651, 0xE652, 0xE653, /* 0x70 */ + 0xE654, 0xE655, 0xE656, 0xE657, 0xE658, 0xE659, 0xE65A, 0xE65B, /* 0x80 */ + 0xE65C, 0xE65D, 0xE65E, 0xE65F, 0xE660, 0xE661, 0xE662, 0xF6CC, /* 0x80 */ + 0xE663, 0xE664, 0xE665, 0xE666, 0xE667, 0xE668, 0xE669, 0xE66A, /* 0x90 */ + 0xE66B, 0xE66C, 0xE66D, 0xE66E, 0xE66F, 0xE670, 0xE671, 0xE672, /* 0x90 */ + 0xE673, 0xE674, 0xE675, 0xE676, 0xE677, 0xE678, 0xE679, 0xE67A, /* 0xA0 */ + 0xE67B, 0xE67C, 0xE67D, 0xE67E, 0xE680, 0xE681, 0xE682, 0xE683, /* 0xA0 */ + 0xE684, 0xE685, 0xE686, 0xE687, 0xE688, 0xE689, 0xE68A, 0xE68B, /* 0xB0 */ + 0xE68C, 0xE68D, 0xE68E, 0xE68F, 0xE690, 0xE691, 0xE692, 0xE693, /* 0xB0 */ + 0xE694, 0xE695, 0xE696, 0xE697, 0xE698, 0xE699, 0xE69A, 0xE69B, /* 0xC0 */ + 0xE69C, 0xE69D, 0xF6CB, 0xE69E, 0xE69F, 0xE6A0, 0xE740, 0xE741, /* 0xC0 */ + 0xE742, 0xE743, 0xE744, 0xE745, 0xE746, 0xE747, 0xF7E9, 0xE748, /* 0xD0 */ + 0xE749, 0xE74A, 0xE74B, 0xE74C, 0xE74D, 0xE74E, 0xE74F, 0xE750, /* 0xD0 */ + 0xE751, 0xE752, 0xE753, 0xE754, 0xE755, 0xE756, 0xE757, 0xE758, /* 0xE0 */ + 0xE759, 0xE75A, 0xE75B, 0xE75C, 0xE75D, 0xE75E, 0xE75F, 0xE760, /* 0xE0 */ + 0xE761, 0xE762, 0xE763, 0xE764, 0xE765, 0xE766, 0xE767, 0xE768, /* 0xF0 */ + 0xE769, 0xE76A, 0xE76B, 0xE76C, 0xE76D, 0xE76E, 0xE76F, 0xE770 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE771, 0xE772, 0xE773, 0xE774, 0xE775, 0xE776, 0xE777, 0xE778, /* 0x00 */ + 0xE779, 0xE77A, 0xE77B, 0xE77C, 0xE77D, 0xE77E, 0xE780, 0xE781, /* 0x00 */ + 0xE782, 0xE783, 0xE784, 0xE785, 0xE786, 0xE787, 0xE788, 0xE789, /* 0x10 */ + 0xE78A, 0xE78B, 0xE78C, 0xE78D, 0xE78E, 0xE78F, 0xE790, 0xE791, /* 0x10 */ + 0xE792, 0xE793, 0xE794, 0xE795, 0xE796, 0xE797, 0xE798, 0xE799, /* 0x20 */ + 0xE79A, 0xE79B, 0xE79C, 0xE79D, 0xE79E, 0xE79F, 0xE7A0, 0xE840, /* 0x20 */ + 0xE841, 0xE842, 0xE843, 0xE844, 0xE845, 0xE846, 0xE847, 0xE848, /* 0x30 */ + 0xE849, 0xE84A, 0xE84B, 0xE84C, 0xE84D, 0xE84E, 0xF6CD, 0xE84F, /* 0x30 */ + 0xE850, 0xE851, 0xE852, 0xE853, 0xE854, 0xE855, 0xE856, 0xE857, /* 0x40 */ + 0xE858, 0xE859, 0xE85A, 0xE85B, 0xE85C, 0xE85D, 0xE85E, 0xE85F, /* 0x40 */ + 0xE860, 0xE861, 0xE862, 0xE863, 0xE864, 0xE865, 0xE866, 0xE867, /* 0x50 */ + 0xE868, 0xE869, 0xE86A, 0xE86B, 0xE86C, 0xE86D, 0xE86E, 0xE86F, /* 0x50 */ + 0xE870, 0xE871, 0xE872, 0xE873, 0xE874, 0xE875, 0xE876, 0xE877, /* 0x60 */ + 0xE878, 0xE879, 0xE87A, 0xF6CE, 0xE87B, 0xE87C, 0xE87D, 0xE87E, /* 0x60 */ + 0xE880, 0xE881, 0xE882, 0xE883, 0xE884, 0xE885, 0xE886, 0xE887, /* 0x70 */ + 0xE888, 0xE889, 0xE88A, 0xE88B, 0xE88C, 0xE88D, 0xE88E, 0xE88F, /* 0x70 */ + 0xE890, 0xE891, 0xE892, 0xE893, 0xE894, 0xEEC4, 0xEEC5, 0xEEC6, /* 0x80 */ + 0xD5EB, 0xB6A4, 0xEEC8, 0xEEC7, 0xEEC9, 0xEECA, 0xC7A5, 0xEECB, /* 0x80 */ + 0xEECC, 0xE895, 0xB7B0, 0xB5F6, 0xEECD, 0xEECF, 0xE896, 0xEECE, /* 0x90 */ + 0xE897, 0xB8C6, 0xEED0, 0xEED1, 0xEED2, 0xB6DB, 0xB3AE, 0xD6D3, /* 0x90 */ + 0xC4C6, 0xB1B5, 0xB8D6, 0xEED3, 0xEED4, 0xD4BF, 0xC7D5, 0xBEFB, /* 0xA0 */ + 0xCED9, 0xB9B3, 0xEED6, 0xEED5, 0xEED8, 0xEED7, 0xC5A5, 0xEED9, /* 0xA0 */ + 0xEEDA, 0xC7AE, 0xEEDB, 0xC7AF, 0xEEDC, 0xB2A7, 0xEEDD, 0xEEDE, /* 0xB0 */ + 0xEEDF, 0xEEE0, 0xEEE1, 0xD7EA, 0xEEE2, 0xEEE3, 0xBCD8, 0xEEE4, /* 0xB0 */ + 0xD3CB, 0xCCFA, 0xB2AC, 0xC1E5, 0xEEE5, 0xC7A6, 0xC3AD, 0xE898, /* 0xC0 */ + 0xEEE6, 0xEEE7, 0xEEE8, 0xEEE9, 0xEEEA, 0xEEEB, 0xEEEC, 0xE899, /* 0xC0 */ + 0xEEED, 0xEEEE, 0xEEEF, 0xE89A, 0xE89B, 0xEEF0, 0xEEF1, 0xEEF2, /* 0xD0 */ + 0xEEF4, 0xEEF3, 0xE89C, 0xEEF5, 0xCDAD, 0xC2C1, 0xEEF6, 0xEEF7, /* 0xD0 */ + 0xEEF8, 0xD5A1, 0xEEF9, 0xCFB3, 0xEEFA, 0xEEFB, 0xE89D, 0xEEFC, /* 0xE0 */ + 0xEEFD, 0xEFA1, 0xEEFE, 0xEFA2, 0xB8F5, 0xC3FA, 0xEFA3, 0xEFA4, /* 0xE0 */ + 0xBDC2, 0xD2BF, 0xB2F9, 0xEFA5, 0xEFA6, 0xEFA7, 0xD2F8, 0xEFA8, /* 0xF0 */ + 0xD6FD, 0xEFA9, 0xC6CC, 0xE89E, 0xEFAA, 0xEFAB, 0xC1B4, 0xEFAC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFFA, 0xCBF8, 0xEFAE, 0xEFAD, 0xB3FA, 0xB9F8, 0xEFAF, 0xEFB0, /* 0x00 */ + 0xD0E2, 0xEFB1, 0xEFB2, 0xB7E6, 0xD0BF, 0xEFB3, 0xEFB4, 0xEFB5, /* 0x00 */ + 0xC8F1, 0xCCE0, 0xEFB6, 0xEFB7, 0xEFB8, 0xEFB9, 0xEFBA, 0xD5E0, /* 0x10 */ + 0xEFBB, 0xB4ED, 0xC3AA, 0xEFBC, 0xE89F, 0xEFBD, 0xEFBE, 0xEFBF, /* 0x10 */ + 0xE8A0, 0xCEFD, 0xEFC0, 0xC2E0, 0xB4B8, 0xD7B6, 0xBDF5, 0xE940, /* 0x20 */ + 0xCFC7, 0xEFC3, 0xEFC1, 0xEFC2, 0xEFC4, 0xB6A7, 0xBCFC, 0xBEE2, /* 0x20 */ + 0xC3CC, 0xEFC5, 0xEFC6, 0xE941, 0xEFC7, 0xEFCF, 0xEFC8, 0xEFC9, /* 0x30 */ + 0xEFCA, 0xC7C2, 0xEFF1, 0xB6CD, 0xEFCB, 0xE942, 0xEFCC, 0xEFCD, /* 0x30 */ + 0xB6C6, 0xC3BE, 0xEFCE, 0xE943, 0xEFD0, 0xEFD1, 0xEFD2, 0xD5F2, /* 0x40 */ + 0xE944, 0xEFD3, 0xC4F7, 0xE945, 0xEFD4, 0xC4F8, 0xEFD5, 0xEFD6, /* 0x40 */ + 0xB8E4, 0xB0F7, 0xEFD7, 0xEFD8, 0xEFD9, 0xE946, 0xEFDA, 0xEFDB, /* 0x50 */ + 0xEFDC, 0xEFDD, 0xE947, 0xEFDE, 0xBEB5, 0xEFE1, 0xEFDF, 0xEFE0, /* 0x50 */ + 0xE948, 0xEFE2, 0xEFE3, 0xC1CD, 0xEFE4, 0xEFE5, 0xEFE6, 0xEFE7, /* 0x60 */ + 0xEFE8, 0xEFE9, 0xEFEA, 0xEFEB, 0xEFEC, 0xC0D8, 0xE949, 0xEFED, /* 0x60 */ + 0xC1AD, 0xEFEE, 0xEFEF, 0xEFF0, 0xE94A, 0xE94B, 0xCFE2, 0xE94C, /* 0x70 */ + 0xE94D, 0xE94E, 0xE94F, 0xE950, 0xE951, 0xE952, 0xE953, 0xB3A4, /* 0x70 */ + 0xE954, 0xE955, 0xE956, 0xE957, 0xE958, 0xE959, 0xE95A, 0xE95B, /* 0x80 */ + 0xE95C, 0xE95D, 0xE95E, 0xE95F, 0xE960, 0xE961, 0xE962, 0xE963, /* 0x80 */ + 0xE964, 0xE965, 0xE966, 0xE967, 0xE968, 0xE969, 0xE96A, 0xE96B, /* 0x90 */ + 0xE96C, 0xE96D, 0xE96E, 0xE96F, 0xE970, 0xE971, 0xE972, 0xE973, /* 0x90 */ + 0xE974, 0xE975, 0xE976, 0xE977, 0xE978, 0xE979, 0xE97A, 0xE97B, /* 0xA0 */ + 0xE97C, 0xE97D, 0xE97E, 0xE980, 0xE981, 0xE982, 0xE983, 0xE984, /* 0xA0 */ + 0xE985, 0xE986, 0xE987, 0xE988, 0xE989, 0xE98A, 0xE98B, 0xE98C, /* 0xB0 */ + 0xE98D, 0xE98E, 0xE98F, 0xE990, 0xE991, 0xE992, 0xE993, 0xE994, /* 0xB0 */ + 0xE995, 0xE996, 0xE997, 0xE998, 0xE999, 0xE99A, 0xE99B, 0xE99C, /* 0xC0 */ + 0xE99D, 0xE99E, 0xE99F, 0xE9A0, 0xEA40, 0xEA41, 0xEA42, 0xEA43, /* 0xC0 */ + 0xEA44, 0xEA45, 0xEA46, 0xEA47, 0xEA48, 0xEA49, 0xEA4A, 0xEA4B, /* 0xD0 */ + 0xEA4C, 0xEA4D, 0xEA4E, 0xEA4F, 0xEA50, 0xEA51, 0xEA52, 0xEA53, /* 0xD0 */ + 0xEA54, 0xEA55, 0xEA56, 0xEA57, 0xEA58, 0xEA59, 0xEA5A, 0xEA5B, /* 0xE0 */ + 0xC3C5, 0xE3C5, 0xC9C1, 0xE3C6, 0xEA5C, 0xB1D5, 0xCECA, 0xB4B3, /* 0xE0 */ + 0xC8F2, 0xE3C7, 0xCFD0, 0xE3C8, 0xBCE4, 0xE3C9, 0xE3CA, 0xC3C6, /* 0xF0 */ + 0xD5A2, 0xC4D6, 0xB9EB, 0xCEC5, 0xE3CB, 0xC3F6, 0xE3CC, 0xEA5D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB7A7, 0xB8F3, 0xBAD2, 0xE3CD, 0xE3CE, 0xD4C4, 0xE3CF, 0xEA5E, /* 0x00 */ + 0xE3D0, 0xD1CB, 0xE3D1, 0xE3D2, 0xE3D3, 0xE3D4, 0xD1D6, 0xE3D5, /* 0x00 */ + 0xB2FB, 0xC0BB, 0xE3D6, 0xEA5F, 0xC0AB, 0xE3D7, 0xE3D8, 0xE3D9, /* 0x10 */ + 0xEA60, 0xE3DA, 0xE3DB, 0xEA61, 0xB8B7, 0xDAE2, 0xEA62, 0xB6D3, /* 0x10 */ + 0xEA63, 0xDAE4, 0xDAE3, 0xEA64, 0xEA65, 0xEA66, 0xEA67, 0xEA68, /* 0x20 */ + 0xEA69, 0xEA6A, 0xDAE6, 0xEA6B, 0xEA6C, 0xEA6D, 0xC8EE, 0xEA6E, /* 0x20 */ + 0xEA6F, 0xDAE5, 0xB7C0, 0xD1F4, 0xD2F5, 0xD5F3, 0xBDD7, 0xEA70, /* 0x30 */ + 0xEA71, 0xEA72, 0xEA73, 0xD7E8, 0xDAE8, 0xDAE7, 0xEA74, 0xB0A2, /* 0x30 */ + 0xCDD3, 0xEA75, 0xDAE9, 0xEA76, 0xB8BD, 0xBCCA, 0xC2BD, 0xC2A4, /* 0x40 */ + 0xB3C2, 0xDAEA, 0xEA77, 0xC2AA, 0xC4B0, 0xBDB5, 0xEA78, 0xEA79, /* 0x40 */ + 0xCFDE, 0xEA7A, 0xEA7B, 0xEA7C, 0xDAEB, 0xC9C2, 0xEA7D, 0xEA7E, /* 0x50 */ + 0xEA80, 0xEA81, 0xEA82, 0xB1DD, 0xEA83, 0xEA84, 0xEA85, 0xDAEC, /* 0x50 */ + 0xEA86, 0xB6B8, 0xD4BA, 0xEA87, 0xB3FD, 0xEA88, 0xEA89, 0xDAED, /* 0x60 */ + 0xD4C9, 0xCFD5, 0xC5E3, 0xEA8A, 0xDAEE, 0xEA8B, 0xEA8C, 0xEA8D, /* 0x60 */ + 0xEA8E, 0xEA8F, 0xDAEF, 0xEA90, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, /* 0x70 */ + 0xEA91, 0xEA92, 0xEA93, 0xEA94, 0xEA95, 0xEA96, 0xEA97, 0xEA98, /* 0x70 */ + 0xEA99, 0xEA9A, 0xEA9B, 0xEA9C, 0xEA9D, 0xD3E7, 0xC2A1, 0xEA9E, /* 0x80 */ + 0xDAF1, 0xEA9F, 0xEAA0, 0xCBE5, 0xEB40, 0xDAF2, 0xEB41, 0xCBE6, /* 0x80 */ + 0xD2FE, 0xEB42, 0xEB43, 0xEB44, 0xB8F4, 0xEB45, 0xEB46, 0xDAF3, /* 0x90 */ + 0xB0AF, 0xCFB6, 0xEB47, 0xEB48, 0xD5CF, 0xEB49, 0xEB4A, 0xEB4B, /* 0x90 */ + 0xEB4C, 0xEB4D, 0xEB4E, 0xEB4F, 0xEB50, 0xEB51, 0xEB52, 0xCBED, /* 0xA0 */ + 0xEB53, 0xEB54, 0xEB55, 0xEB56, 0xEB57, 0xEB58, 0xEB59, 0xEB5A, /* 0xA0 */ + 0xDAF4, 0xEB5B, 0xEB5C, 0xE3C4, 0xEB5D, 0xEB5E, 0xC1A5, 0xEB5F, /* 0xB0 */ + 0xEB60, 0xF6BF, 0xEB61, 0xEB62, 0xF6C0, 0xF6C1, 0xC4D1, 0xEB63, /* 0xB0 */ + 0xC8B8, 0xD1E3, 0xEB64, 0xEB65, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, /* 0xC0 */ + 0xEB66, 0xEFF4, 0xEB67, 0xEB68, 0xB4C6, 0xD3BA, 0xF6C2, 0xB3FB, /* 0xC0 */ + 0xEB69, 0xEB6A, 0xF6C3, 0xEB6B, 0xEB6C, 0xB5F1, 0xEB6D, 0xEB6E, /* 0xD0 */ + 0xEB6F, 0xEB70, 0xEB71, 0xEB72, 0xEB73, 0xEB74, 0xEB75, 0xEB76, /* 0xD0 */ + 0xF6C5, 0xEB77, 0xEB78, 0xEB79, 0xEB7A, 0xEB7B, 0xEB7C, 0xEB7D, /* 0xE0 */ + 0xD3EA, 0xF6A7, 0xD1A9, 0xEB7E, 0xEB80, 0xEB81, 0xEB82, 0xF6A9, /* 0xE0 */ + 0xEB83, 0xEB84, 0xEB85, 0xF6A8, 0xEB86, 0xEB87, 0xC1E3, 0xC0D7, /* 0xF0 */ + 0xEB88, 0xB1A2, 0xEB89, 0xEB8A, 0xEB8B, 0xEB8C, 0xCEED, 0xEB8D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD0E8, 0xF6AB, 0xEB8E, 0xEB8F, 0xCFF6, 0xEB90, 0xF6AA, 0xD5F0, /* 0x00 */ + 0xF6AC, 0xC3B9, 0xEB91, 0xEB92, 0xEB93, 0xBBF4, 0xF6AE, 0xF6AD, /* 0x00 */ + 0xEB94, 0xEB95, 0xEB96, 0xC4DE, 0xEB97, 0xEB98, 0xC1D8, 0xEB99, /* 0x10 */ + 0xEB9A, 0xEB9B, 0xEB9C, 0xEB9D, 0xCBAA, 0xEB9E, 0xCFBC, 0xEB9F, /* 0x10 */ + 0xEBA0, 0xEC40, 0xEC41, 0xEC42, 0xEC43, 0xEC44, 0xEC45, 0xEC46, /* 0x20 */ + 0xEC47, 0xEC48, 0xF6AF, 0xEC49, 0xEC4A, 0xF6B0, 0xEC4B, 0xEC4C, /* 0x20 */ + 0xF6B1, 0xEC4D, 0xC2B6, 0xEC4E, 0xEC4F, 0xEC50, 0xEC51, 0xEC52, /* 0x30 */ + 0xB0D4, 0xC5F9, 0xEC53, 0xEC54, 0xEC55, 0xEC56, 0xF6B2, 0xEC57, /* 0x30 */ + 0xEC58, 0xEC59, 0xEC5A, 0xEC5B, 0xEC5C, 0xEC5D, 0xEC5E, 0xEC5F, /* 0x40 */ + 0xEC60, 0xEC61, 0xEC62, 0xEC63, 0xEC64, 0xEC65, 0xEC66, 0xEC67, /* 0x40 */ + 0xEC68, 0xEC69, 0xC7E0, 0xF6A6, 0xEC6A, 0xEC6B, 0xBEB8, 0xEC6C, /* 0x50 */ + 0xEC6D, 0xBEB2, 0xEC6E, 0xB5E5, 0xEC6F, 0xEC70, 0xB7C7, 0xEC71, /* 0x50 */ + 0xBFBF, 0xC3D2, 0xC3E6, 0xEC72, 0xEC73, 0xD8CC, 0xEC74, 0xEC75, /* 0x60 */ + 0xEC76, 0xB8EF, 0xEC77, 0xEC78, 0xEC79, 0xEC7A, 0xEC7B, 0xEC7C, /* 0x60 */ + 0xEC7D, 0xEC7E, 0xEC80, 0xBDF9, 0xD1A5, 0xEC81, 0xB0D0, 0xEC82, /* 0x70 */ + 0xEC83, 0xEC84, 0xEC85, 0xEC86, 0xF7B0, 0xEC87, 0xEC88, 0xEC89, /* 0x70 */ + 0xEC8A, 0xEC8B, 0xEC8C, 0xEC8D, 0xEC8E, 0xF7B1, 0xEC8F, 0xEC90, /* 0x80 */ + 0xEC91, 0xEC92, 0xEC93, 0xD0AC, 0xEC94, 0xB0B0, 0xEC95, 0xEC96, /* 0x80 */ + 0xEC97, 0xF7B2, 0xF7B3, 0xEC98, 0xF7B4, 0xEC99, 0xEC9A, 0xEC9B, /* 0x90 */ + 0xC7CA, 0xEC9C, 0xEC9D, 0xEC9E, 0xEC9F, 0xECA0, 0xED40, 0xED41, /* 0x90 */ + 0xBECF, 0xED42, 0xED43, 0xF7B7, 0xED44, 0xED45, 0xED46, 0xED47, /* 0xA0 */ + 0xED48, 0xED49, 0xED4A, 0xF7B6, 0xED4B, 0xB1DE, 0xED4C, 0xF7B5, /* 0xA0 */ + 0xED4D, 0xED4E, 0xF7B8, 0xED4F, 0xF7B9, 0xED50, 0xED51, 0xED52, /* 0xB0 */ + 0xED53, 0xED54, 0xED55, 0xED56, 0xED57, 0xED58, 0xED59, 0xED5A, /* 0xB0 */ + 0xED5B, 0xED5C, 0xED5D, 0xED5E, 0xED5F, 0xED60, 0xED61, 0xED62, /* 0xC0 */ + 0xED63, 0xED64, 0xED65, 0xED66, 0xED67, 0xED68, 0xED69, 0xED6A, /* 0xC0 */ + 0xED6B, 0xED6C, 0xED6D, 0xED6E, 0xED6F, 0xED70, 0xED71, 0xED72, /* 0xD0 */ + 0xED73, 0xED74, 0xED75, 0xED76, 0xED77, 0xED78, 0xED79, 0xED7A, /* 0xD0 */ + 0xED7B, 0xED7C, 0xED7D, 0xED7E, 0xED80, 0xED81, 0xCEA4, 0xC8CD, /* 0xE0 */ + 0xED82, 0xBAAB, 0xE8B8, 0xE8B9, 0xE8BA, 0xBEC2, 0xED83, 0xED84, /* 0xE0 */ + 0xED85, 0xED86, 0xED87, 0xD2F4, 0xED88, 0xD4CF, 0xC9D8, 0xED89, /* 0xF0 */ + 0xED8A, 0xED8B, 0xED8C, 0xED8D, 0xED8E, 0xED8F, 0xED90, 0xED91 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xED92, 0xED93, 0xED94, 0xED95, 0xED96, 0xED97, 0xED98, 0xED99, /* 0x00 */ + 0xED9A, 0xED9B, 0xED9C, 0xED9D, 0xED9E, 0xED9F, 0xEDA0, 0xEE40, /* 0x00 */ + 0xEE41, 0xEE42, 0xEE43, 0xEE44, 0xEE45, 0xEE46, 0xEE47, 0xEE48, /* 0x10 */ + 0xEE49, 0xEE4A, 0xEE4B, 0xEE4C, 0xEE4D, 0xEE4E, 0xEE4F, 0xEE50, /* 0x10 */ + 0xEE51, 0xEE52, 0xEE53, 0xEE54, 0xEE55, 0xEE56, 0xEE57, 0xEE58, /* 0x20 */ + 0xEE59, 0xEE5A, 0xEE5B, 0xEE5C, 0xEE5D, 0xEE5E, 0xEE5F, 0xEE60, /* 0x20 */ + 0xEE61, 0xEE62, 0xEE63, 0xEE64, 0xEE65, 0xEE66, 0xEE67, 0xEE68, /* 0x30 */ + 0xEE69, 0xEE6A, 0xEE6B, 0xEE6C, 0xEE6D, 0xEE6E, 0xEE6F, 0xEE70, /* 0x30 */ + 0xEE71, 0xEE72, 0xEE73, 0xEE74, 0xEE75, 0xEE76, 0xEE77, 0xEE78, /* 0x40 */ + 0xEE79, 0xEE7A, 0xEE7B, 0xEE7C, 0xEE7D, 0xEE7E, 0xEE80, 0xEE81, /* 0x40 */ + 0xEE82, 0xEE83, 0xEE84, 0xEE85, 0xEE86, 0xEE87, 0xEE88, 0xEE89, /* 0x50 */ + 0xEE8A, 0xEE8B, 0xEE8C, 0xEE8D, 0xEE8E, 0xEE8F, 0xEE90, 0xEE91, /* 0x50 */ + 0xEE92, 0xEE93, 0xEE94, 0xEE95, 0xEE96, 0xEE97, 0xEE98, 0xEE99, /* 0x60 */ + 0xEE9A, 0xEE9B, 0xEE9C, 0xEE9D, 0xEE9E, 0xEE9F, 0xEEA0, 0xEF40, /* 0x60 */ + 0xEF41, 0xEF42, 0xEF43, 0xEF44, 0xEF45, 0xD2B3, 0xB6A5, 0xC7EA, /* 0x70 */ + 0xF1FC, 0xCFEE, 0xCBB3, 0xD0EB, 0xE7EF, 0xCDE7, 0xB9CB, 0xB6D9, /* 0x70 */ + 0xF1FD, 0xB0E4, 0xCBCC, 0xF1FE, 0xD4A4, 0xC2AD, 0xC1EC, 0xC6C4, /* 0x80 */ + 0xBEB1, 0xF2A1, 0xBCD5, 0xEF46, 0xF2A2, 0xF2A3, 0xEF47, 0xF2A4, /* 0x80 */ + 0xD2C3, 0xC6B5, 0xEF48, 0xCDC7, 0xF2A5, 0xEF49, 0xD3B1, 0xBFC5, /* 0x90 */ + 0xCCE2, 0xEF4A, 0xF2A6, 0xF2A7, 0xD1D5, 0xB6EE, 0xF2A8, 0xF2A9, /* 0x90 */ + 0xB5DF, 0xF2AA, 0xF2AB, 0xEF4B, 0xB2FC, 0xF2AC, 0xF2AD, 0xC8A7, /* 0xA0 */ + 0xEF4C, 0xEF4D, 0xEF4E, 0xEF4F, 0xEF50, 0xEF51, 0xEF52, 0xEF53, /* 0xA0 */ + 0xEF54, 0xEF55, 0xEF56, 0xEF57, 0xEF58, 0xEF59, 0xEF5A, 0xEF5B, /* 0xB0 */ + 0xEF5C, 0xEF5D, 0xEF5E, 0xEF5F, 0xEF60, 0xEF61, 0xEF62, 0xEF63, /* 0xB0 */ + 0xEF64, 0xEF65, 0xEF66, 0xEF67, 0xEF68, 0xEF69, 0xEF6A, 0xEF6B, /* 0xC0 */ + 0xEF6C, 0xEF6D, 0xEF6E, 0xEF6F, 0xEF70, 0xEF71, 0xB7E7, 0xEF72, /* 0xC0 */ + 0xEF73, 0xECA9, 0xECAA, 0xECAB, 0xEF74, 0xECAC, 0xEF75, 0xEF76, /* 0xD0 */ + 0xC6AE, 0xECAD, 0xECAE, 0xEF77, 0xEF78, 0xEF79, 0xB7C9, 0xCAB3, /* 0xD0 */ + 0xEF7A, 0xEF7B, 0xEF7C, 0xEF7D, 0xEF7E, 0xEF80, 0xEF81, 0xE2B8, /* 0xE0 */ + 0xF7CF, 0xEF82, 0xEF83, 0xEF84, 0xEF85, 0xEF86, 0xEF87, 0xEF88, /* 0xE0 */ + 0xEF89, 0xEF8A, 0xEF8B, 0xEF8C, 0xEF8D, 0xEF8E, 0xEF8F, 0xEF90, /* 0xF0 */ + 0xEF91, 0xEF92, 0xEF93, 0xEF94, 0xEF95, 0xEF96, 0xEF97, 0xEF98 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEF99, 0xEF9A, 0xEF9B, 0xEF9C, 0xEF9D, 0xEF9E, 0xEF9F, 0xEFA0, /* 0x00 */ + 0xF040, 0xF041, 0xF042, 0xF043, 0xF044, 0xF7D0, 0xF045, 0xF046, /* 0x00 */ + 0xB2CD, 0xF047, 0xF048, 0xF049, 0xF04A, 0xF04B, 0xF04C, 0xF04D, /* 0x10 */ + 0xF04E, 0xF04F, 0xF050, 0xF051, 0xF052, 0xF053, 0xF054, 0xF055, /* 0x10 */ + 0xF056, 0xF057, 0xF058, 0xF059, 0xF05A, 0xF05B, 0xF05C, 0xF05D, /* 0x20 */ + 0xF05E, 0xF05F, 0xF060, 0xF061, 0xF062, 0xF063, 0xF7D1, 0xF064, /* 0x20 */ + 0xF065, 0xF066, 0xF067, 0xF068, 0xF069, 0xF06A, 0xF06B, 0xF06C, /* 0x30 */ + 0xF06D, 0xF06E, 0xF06F, 0xF070, 0xF071, 0xF072, 0xF073, 0xF074, /* 0x30 */ + 0xF075, 0xF076, 0xF077, 0xF078, 0xF079, 0xF07A, 0xF07B, 0xF07C, /* 0x40 */ + 0xF07D, 0xF07E, 0xF080, 0xF081, 0xF082, 0xF083, 0xF084, 0xF085, /* 0x40 */ + 0xF086, 0xF087, 0xF088, 0xF089, 0xF7D3, 0xF7D2, 0xF08A, 0xF08B, /* 0x50 */ + 0xF08C, 0xF08D, 0xF08E, 0xF08F, 0xF090, 0xF091, 0xF092, 0xF093, /* 0x50 */ + 0xF094, 0xF095, 0xF096, 0xE2BB, 0xF097, 0xBCA2, 0xF098, 0xE2BC, /* 0x60 */ + 0xE2BD, 0xE2BE, 0xE2BF, 0xE2C0, 0xE2C1, 0xB7B9, 0xD2FB, 0xBDA4, /* 0x60 */ + 0xCACE, 0xB1A5, 0xCBC7, 0xF099, 0xE2C2, 0xB6FC, 0xC8C4, 0xE2C3, /* 0x70 */ + 0xF09A, 0xF09B, 0xBDC8, 0xF09C, 0xB1FD, 0xE2C4, 0xF09D, 0xB6F6, /* 0x70 */ + 0xE2C5, 0xC4D9, 0xF09E, 0xF09F, 0xE2C6, 0xCFDA, 0xB9DD, 0xE2C7, /* 0x80 */ + 0xC0A1, 0xF0A0, 0xE2C8, 0xB2F6, 0xF140, 0xE2C9, 0xF141, 0xC1F3, /* 0x80 */ + 0xE2CA, 0xE2CB, 0xC2F8, 0xE2CC, 0xE2CD, 0xE2CE, 0xCAD7, 0xD8B8, /* 0x90 */ + 0xD9E5, 0xCFE3, 0xF142, 0xF143, 0xF144, 0xF145, 0xF146, 0xF147, /* 0x90 */ + 0xF148, 0xF149, 0xF14A, 0xF14B, 0xF14C, 0xF0A5, 0xF14D, 0xF14E, /* 0xA0 */ + 0xDCB0, 0xF14F, 0xF150, 0xF151, 0xF152, 0xF153, 0xF154, 0xF155, /* 0xA0 */ + 0xF156, 0xF157, 0xF158, 0xF159, 0xF15A, 0xF15B, 0xF15C, 0xF15D, /* 0xB0 */ + 0xF15E, 0xF15F, 0xF160, 0xF161, 0xF162, 0xF163, 0xF164, 0xF165, /* 0xB0 */ + 0xF166, 0xF167, 0xF168, 0xF169, 0xF16A, 0xF16B, 0xF16C, 0xF16D, /* 0xC0 */ + 0xF16E, 0xF16F, 0xF170, 0xF171, 0xF172, 0xF173, 0xF174, 0xF175, /* 0xC0 */ + 0xF176, 0xF177, 0xF178, 0xF179, 0xF17A, 0xF17B, 0xF17C, 0xF17D, /* 0xD0 */ + 0xF17E, 0xF180, 0xF181, 0xF182, 0xF183, 0xF184, 0xF185, 0xF186, /* 0xD0 */ + 0xF187, 0xF188, 0xF189, 0xF18A, 0xF18B, 0xF18C, 0xF18D, 0xF18E, /* 0xE0 */ + 0xF18F, 0xF190, 0xF191, 0xF192, 0xF193, 0xF194, 0xF195, 0xF196, /* 0xE0 */ + 0xF197, 0xF198, 0xF199, 0xF19A, 0xF19B, 0xF19C, 0xF19D, 0xF19E, /* 0xF0 */ + 0xF19F, 0xF1A0, 0xF240, 0xF241, 0xF242, 0xF243, 0xF244, 0xF245 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF246, 0xF247, 0xF248, 0xF249, 0xF24A, 0xF24B, 0xF24C, 0xF24D, /* 0x00 */ + 0xF24E, 0xF24F, 0xF250, 0xF251, 0xF252, 0xF253, 0xF254, 0xF255, /* 0x00 */ + 0xF256, 0xF257, 0xF258, 0xF259, 0xF25A, 0xF25B, 0xF25C, 0xF25D, /* 0x10 */ + 0xF25E, 0xF25F, 0xF260, 0xF261, 0xF262, 0xF263, 0xF264, 0xF265, /* 0x10 */ + 0xF266, 0xF267, 0xF268, 0xF269, 0xF26A, 0xF26B, 0xF26C, 0xF26D, /* 0x20 */ + 0xF26E, 0xF26F, 0xF270, 0xF271, 0xF272, 0xF273, 0xF274, 0xF275, /* 0x20 */ + 0xF276, 0xF277, 0xF278, 0xF279, 0xF27A, 0xF27B, 0xF27C, 0xF27D, /* 0x30 */ + 0xF27E, 0xF280, 0xF281, 0xF282, 0xF283, 0xF284, 0xF285, 0xF286, /* 0x30 */ + 0xF287, 0xF288, 0xF289, 0xF28A, 0xF28B, 0xF28C, 0xF28D, 0xF28E, /* 0x40 */ + 0xF28F, 0xF290, 0xF291, 0xF292, 0xF293, 0xF294, 0xF295, 0xF296, /* 0x40 */ + 0xF297, 0xF298, 0xF299, 0xF29A, 0xF29B, 0xF29C, 0xF29D, 0xF29E, /* 0x50 */ + 0xF29F, 0xF2A0, 0xF340, 0xF341, 0xF342, 0xF343, 0xF344, 0xF345, /* 0x50 */ + 0xF346, 0xF347, 0xF348, 0xF349, 0xF34A, 0xF34B, 0xF34C, 0xF34D, /* 0x60 */ + 0xF34E, 0xF34F, 0xF350, 0xF351, 0xC2ED, 0xD4A6, 0xCDD4, 0xD1B1, /* 0x60 */ + 0xB3DB, 0xC7FD, 0xF352, 0xB2B5, 0xC2BF, 0xE6E0, 0xCABB, 0xE6E1, /* 0x70 */ + 0xE6E2, 0xBED4, 0xE6E3, 0xD7A4, 0xCDD5, 0xE6E5, 0xBCDD, 0xE6E4, /* 0x70 */ + 0xE6E6, 0xE6E7, 0xC2EE, 0xF353, 0xBDBE, 0xE6E8, 0xC2E6, 0xBAA7, /* 0x80 */ + 0xE6E9, 0xF354, 0xE6EA, 0xB3D2, 0xD1E9, 0xF355, 0xF356, 0xBFA5, /* 0x80 */ + 0xE6EB, 0xC6EF, 0xE6EC, 0xE6ED, 0xF357, 0xF358, 0xE6EE, 0xC6AD, /* 0x90 */ + 0xE6EF, 0xF359, 0xC9A7, 0xE6F0, 0xE6F1, 0xE6F2, 0xE5B9, 0xE6F3, /* 0x90 */ + 0xE6F4, 0xC2E2, 0xE6F5, 0xE6F6, 0xD6E8, 0xE6F7, 0xF35A, 0xE6F8, /* 0xA0 */ + 0xB9C7, 0xF35B, 0xF35C, 0xF35D, 0xF35E, 0xF35F, 0xF360, 0xF361, /* 0xA0 */ + 0xF7BB, 0xF7BA, 0xF362, 0xF363, 0xF364, 0xF365, 0xF7BE, 0xF7BC, /* 0xB0 */ + 0xBAA1, 0xF366, 0xF7BF, 0xF367, 0xF7C0, 0xF368, 0xF369, 0xF36A, /* 0xB0 */ + 0xF7C2, 0xF7C1, 0xF7C4, 0xF36B, 0xF36C, 0xF7C3, 0xF36D, 0xF36E, /* 0xC0 */ + 0xF36F, 0xF370, 0xF371, 0xF7C5, 0xF7C6, 0xF372, 0xF373, 0xF374, /* 0xC0 */ + 0xF375, 0xF7C7, 0xF376, 0xCBE8, 0xF377, 0xF378, 0xF379, 0xF37A, /* 0xD0 */ + 0xB8DF, 0xF37B, 0xF37C, 0xF37D, 0xF37E, 0xF380, 0xF381, 0xF7D4, /* 0xD0 */ + 0xF382, 0xF7D5, 0xF383, 0xF384, 0xF385, 0xF386, 0xF7D6, 0xF387, /* 0xE0 */ + 0xF388, 0xF389, 0xF38A, 0xF7D8, 0xF38B, 0xF7DA, 0xF38C, 0xF7D7, /* 0xE0 */ + 0xF38D, 0xF38E, 0xF38F, 0xF390, 0xF391, 0xF392, 0xF393, 0xF394, /* 0xF0 */ + 0xF395, 0xF7DB, 0xF396, 0xF7D9, 0xF397, 0xF398, 0xF399, 0xF39A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF39B, 0xF39C, 0xF39D, 0xD7D7, 0xF39E, 0xF39F, 0xF3A0, 0xF440, /* 0x00 */ + 0xF7DC, 0xF441, 0xF442, 0xF443, 0xF444, 0xF445, 0xF446, 0xF7DD, /* 0x00 */ + 0xF447, 0xF448, 0xF449, 0xF7DE, 0xF44A, 0xF44B, 0xF44C, 0xF44D, /* 0x10 */ + 0xF44E, 0xF44F, 0xF450, 0xF451, 0xF452, 0xF453, 0xF454, 0xF7DF, /* 0x10 */ + 0xF455, 0xF456, 0xF457, 0xF7E0, 0xF458, 0xF459, 0xF45A, 0xF45B, /* 0x20 */ + 0xF45C, 0xF45D, 0xF45E, 0xF45F, 0xF460, 0xF461, 0xF462, 0xDBCB, /* 0x20 */ + 0xF463, 0xF464, 0xD8AA, 0xF465, 0xF466, 0xF467, 0xF468, 0xF469, /* 0x30 */ + 0xF46A, 0xF46B, 0xF46C, 0xE5F7, 0xB9ED, 0xF46D, 0xF46E, 0xF46F, /* 0x30 */ + 0xF470, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0xF471, 0xF7CA, /* 0x40 */ + 0xF7CC, 0xF7CB, 0xF472, 0xF473, 0xF474, 0xF7CD, 0xF475, 0xCEBA, /* 0x40 */ + 0xF476, 0xF7CE, 0xF477, 0xF478, 0xC4A7, 0xF479, 0xF47A, 0xF47B, /* 0x50 */ + 0xF47C, 0xF47D, 0xF47E, 0xF480, 0xF481, 0xF482, 0xF483, 0xF484, /* 0x50 */ + 0xF485, 0xF486, 0xF487, 0xF488, 0xF489, 0xF48A, 0xF48B, 0xF48C, /* 0x60 */ + 0xF48D, 0xF48E, 0xF48F, 0xF490, 0xF491, 0xF492, 0xF493, 0xF494, /* 0x60 */ + 0xF495, 0xF496, 0xF497, 0xF498, 0xF499, 0xF49A, 0xF49B, 0xF49C, /* 0x70 */ + 0xF49D, 0xF49E, 0xF49F, 0xF4A0, 0xF540, 0xF541, 0xF542, 0xF543, /* 0x70 */ + 0xF544, 0xF545, 0xF546, 0xF547, 0xF548, 0xF549, 0xF54A, 0xF54B, /* 0x80 */ + 0xF54C, 0xF54D, 0xF54E, 0xF54F, 0xF550, 0xF551, 0xF552, 0xF553, /* 0x80 */ + 0xF554, 0xF555, 0xF556, 0xF557, 0xF558, 0xF559, 0xF55A, 0xF55B, /* 0x90 */ + 0xF55C, 0xF55D, 0xF55E, 0xF55F, 0xF560, 0xF561, 0xF562, 0xF563, /* 0x90 */ + 0xF564, 0xF565, 0xF566, 0xF567, 0xF568, 0xF569, 0xF56A, 0xF56B, /* 0xA0 */ + 0xF56C, 0xF56D, 0xF56E, 0xF56F, 0xF570, 0xF571, 0xF572, 0xF573, /* 0xA0 */ + 0xF574, 0xF575, 0xF576, 0xF577, 0xF578, 0xF579, 0xF57A, 0xF57B, /* 0xB0 */ + 0xF57C, 0xF57D, 0xF57E, 0xF580, 0xF581, 0xF582, 0xF583, 0xF584, /* 0xB0 */ + 0xF585, 0xF586, 0xF587, 0xF588, 0xF589, 0xF58A, 0xF58B, 0xF58C, /* 0xC0 */ + 0xF58D, 0xF58E, 0xF58F, 0xF590, 0xF591, 0xF592, 0xF593, 0xF594, /* 0xC0 */ + 0xF595, 0xF596, 0xF597, 0xF598, 0xF599, 0xF59A, 0xF59B, 0xF59C, /* 0xD0 */ + 0xF59D, 0xF59E, 0xF59F, 0xF5A0, 0xF640, 0xF641, 0xF642, 0xF643, /* 0xD0 */ + 0xF644, 0xF645, 0xF646, 0xF647, 0xF648, 0xF649, 0xF64A, 0xF64B, /* 0xE0 */ + 0xF64C, 0xF64D, 0xF64E, 0xF64F, 0xF650, 0xF651, 0xF652, 0xF653, /* 0xE0 */ + 0xF654, 0xF655, 0xF656, 0xF657, 0xF658, 0xF659, 0xF65A, 0xF65B, /* 0xF0 */ + 0xF65C, 0xF65D, 0xF65E, 0xF65F, 0xF660, 0xF661, 0xF662, 0xF663 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF664, 0xF665, 0xF666, 0xF667, 0xF668, 0xF669, 0xF66A, 0xF66B, /* 0x00 */ + 0xF66C, 0xF66D, 0xF66E, 0xF66F, 0xF670, 0xF671, 0xF672, 0xF673, /* 0x00 */ + 0xF674, 0xF675, 0xF676, 0xF677, 0xF678, 0xF679, 0xF67A, 0xF67B, /* 0x10 */ + 0xF67C, 0xF67D, 0xF67E, 0xF680, 0xF681, 0xF682, 0xF683, 0xF684, /* 0x10 */ + 0xF685, 0xF686, 0xF687, 0xF688, 0xF689, 0xF68A, 0xF68B, 0xF68C, /* 0x20 */ + 0xF68D, 0xF68E, 0xF68F, 0xF690, 0xF691, 0xF692, 0xF693, 0xF694, /* 0x20 */ + 0xF695, 0xF696, 0xF697, 0xF698, 0xF699, 0xF69A, 0xF69B, 0xF69C, /* 0x30 */ + 0xF69D, 0xF69E, 0xF69F, 0xF6A0, 0xF740, 0xF741, 0xF742, 0xF743, /* 0x30 */ + 0xF744, 0xF745, 0xF746, 0xF747, 0xF748, 0xF749, 0xF74A, 0xF74B, /* 0x40 */ + 0xF74C, 0xF74D, 0xF74E, 0xF74F, 0xF750, 0xF751, 0xF752, 0xF753, /* 0x40 */ + 0xF754, 0xF755, 0xF756, 0xF757, 0xF758, 0xF759, 0xF75A, 0xF75B, /* 0x50 */ + 0xF75C, 0xF75D, 0xF75E, 0xF75F, 0xF760, 0xF761, 0xF762, 0xF763, /* 0x50 */ + 0xF764, 0xF765, 0xF766, 0xF767, 0xF768, 0xF769, 0xF76A, 0xF76B, /* 0x60 */ + 0xF76C, 0xF76D, 0xF76E, 0xF76F, 0xF770, 0xF771, 0xF772, 0xF773, /* 0x60 */ + 0xF774, 0xF775, 0xF776, 0xF777, 0xF778, 0xF779, 0xF77A, 0xF77B, /* 0x70 */ + 0xF77C, 0xF77D, 0xF77E, 0xF780, 0xD3E3, 0xF781, 0xF782, 0xF6CF, /* 0x70 */ + 0xF783, 0xC2B3, 0xF6D0, 0xF784, 0xF785, 0xF6D1, 0xF6D2, 0xF6D3, /* 0x80 */ + 0xF6D4, 0xF786, 0xF787, 0xF6D6, 0xF788, 0xB1AB, 0xF6D7, 0xF789, /* 0x80 */ + 0xF6D8, 0xF6D9, 0xF6DA, 0xF78A, 0xF6DB, 0xF6DC, 0xF78B, 0xF78C, /* 0x90 */ + 0xF78D, 0xF78E, 0xF6DD, 0xF6DE, 0xCFCA, 0xF78F, 0xF6DF, 0xF6E0, /* 0x90 */ + 0xF6E1, 0xF6E2, 0xF6E3, 0xF6E4, 0xC0F0, 0xF6E5, 0xF6E6, 0xF6E7, /* 0xA0 */ + 0xF6E8, 0xF6E9, 0xF790, 0xF6EA, 0xF791, 0xF6EB, 0xF6EC, 0xF792, /* 0xA0 */ + 0xF6ED, 0xF6EE, 0xF6EF, 0xF6F0, 0xF6F1, 0xF6F2, 0xF6F3, 0xF6F4, /* 0xB0 */ + 0xBEA8, 0xF793, 0xF6F5, 0xF6F6, 0xF6F7, 0xF6F8, 0xF794, 0xF795, /* 0xB0 */ + 0xF796, 0xF797, 0xF798, 0xC8FA, 0xF6F9, 0xF6FA, 0xF6FB, 0xF6FC, /* 0xC0 */ + 0xF799, 0xF79A, 0xF6FD, 0xF6FE, 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4, /* 0xC0 */ + 0xF7A5, 0xF79B, 0xF79C, 0xF7A6, 0xF7A7, 0xF7A8, 0xB1EE, 0xF7A9, /* 0xD0 */ + 0xF7AA, 0xF7AB, 0xF79D, 0xF79E, 0xF7AC, 0xF7AD, 0xC1DB, 0xF7AE, /* 0xD0 */ + 0xF79F, 0xF7A0, 0xF7AF, 0xF840, 0xF841, 0xF842, 0xF843, 0xF844, /* 0xE0 */ + 0xF845, 0xF846, 0xF847, 0xF848, 0xF849, 0xF84A, 0xF84B, 0xF84C, /* 0xE0 */ + 0xF84D, 0xF84E, 0xF84F, 0xF850, 0xF851, 0xF852, 0xF853, 0xF854, /* 0xF0 */ + 0xF855, 0xF856, 0xF857, 0xF858, 0xF859, 0xF85A, 0xF85B, 0xF85C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF85D, 0xF85E, 0xF85F, 0xF860, 0xF861, 0xF862, 0xF863, 0xF864, /* 0x00 */ + 0xF865, 0xF866, 0xF867, 0xF868, 0xF869, 0xF86A, 0xF86B, 0xF86C, /* 0x00 */ + 0xF86D, 0xF86E, 0xF86F, 0xF870, 0xF871, 0xF872, 0xF873, 0xF874, /* 0x10 */ + 0xF875, 0xF876, 0xF877, 0xF878, 0xF879, 0xF87A, 0xF87B, 0xF87C, /* 0x10 */ + 0xF87D, 0xF87E, 0xF880, 0xF881, 0xF882, 0xF883, 0xF884, 0xF885, /* 0x20 */ + 0xF886, 0xF887, 0xF888, 0xF889, 0xF88A, 0xF88B, 0xF88C, 0xF88D, /* 0x20 */ + 0xF88E, 0xF88F, 0xF890, 0xF891, 0xF892, 0xF893, 0xF894, 0xF895, /* 0x30 */ + 0xF896, 0xF897, 0xF898, 0xF899, 0xF89A, 0xF89B, 0xF89C, 0xF89D, /* 0x30 */ + 0xF89E, 0xF89F, 0xF8A0, 0xF940, 0xF941, 0xF942, 0xF943, 0xF944, /* 0x40 */ + 0xF945, 0xF946, 0xF947, 0xF948, 0xF949, 0xF94A, 0xF94B, 0xF94C, /* 0x40 */ + 0xF94D, 0xF94E, 0xF94F, 0xF950, 0xF951, 0xF952, 0xF953, 0xF954, /* 0x50 */ + 0xF955, 0xF956, 0xF957, 0xF958, 0xF959, 0xF95A, 0xF95B, 0xF95C, /* 0x50 */ + 0xF95D, 0xF95E, 0xF95F, 0xF960, 0xF961, 0xF962, 0xF963, 0xF964, /* 0x60 */ + 0xF965, 0xF966, 0xF967, 0xF968, 0xF969, 0xF96A, 0xF96B, 0xF96C, /* 0x60 */ + 0xF96D, 0xF96E, 0xF96F, 0xF970, 0xF971, 0xF972, 0xF973, 0xF974, /* 0x70 */ + 0xF975, 0xF976, 0xF977, 0xF978, 0xF979, 0xF97A, 0xF97B, 0xF97C, /* 0x70 */ + 0xF97D, 0xF97E, 0xF980, 0xF981, 0xF982, 0xF983, 0xF984, 0xF985, /* 0x80 */ + 0xF986, 0xF987, 0xF988, 0xF989, 0xF98A, 0xF98B, 0xF98C, 0xF98D, /* 0x80 */ + 0xF98E, 0xF98F, 0xF990, 0xF991, 0xF992, 0xF993, 0xF994, 0xF995, /* 0x90 */ + 0xF996, 0xF997, 0xF998, 0xF999, 0xF99A, 0xF99B, 0xF99C, 0xF99D, /* 0x90 */ + 0xF99E, 0xF99F, 0xF9A0, 0xFA40, 0xFA41, 0xFA42, 0xFA43, 0xFA44, /* 0xA0 */ + 0xFA45, 0xFA46, 0xFA47, 0xFA48, 0xFA49, 0xFA4A, 0xFA4B, 0xFA4C, /* 0xA0 */ + 0xFA4D, 0xFA4E, 0xFA4F, 0xFA50, 0xFA51, 0xFA52, 0xFA53, 0xFA54, /* 0xB0 */ + 0xFA55, 0xFA56, 0xFA57, 0xFA58, 0xFA59, 0xFA5A, 0xFA5B, 0xFA5C, /* 0xB0 */ + 0xFA5D, 0xFA5E, 0xFA5F, 0xFA60, 0xFA61, 0xFA62, 0xFA63, 0xFA64, /* 0xC0 */ + 0xFA65, 0xFA66, 0xFA67, 0xFA68, 0xFA69, 0xFA6A, 0xFA6B, 0xFA6C, /* 0xC0 */ + 0xFA6D, 0xFA6E, 0xFA6F, 0xFA70, 0xFA71, 0xFA72, 0xFA73, 0xFA74, /* 0xD0 */ + 0xFA75, 0xFA76, 0xFA77, 0xFA78, 0xFA79, 0xFA7A, 0xFA7B, 0xFA7C, /* 0xD0 */ + 0xFA7D, 0xFA7E, 0xFA80, 0xFA81, 0xFA82, 0xFA83, 0xFA84, 0xFA85, /* 0xE0 */ + 0xFA86, 0xFA87, 0xFA88, 0xFA89, 0xFA8A, 0xFA8B, 0xFA8C, 0xFA8D, /* 0xE0 */ + 0xFA8E, 0xFA8F, 0xFA90, 0xFA91, 0xFA92, 0xFA93, 0xFA94, 0xFA95, /* 0xF0 */ + 0xFA96, 0xFA97, 0xFA98, 0xFA99, 0xFA9A, 0xFA9B, 0xFA9C, 0xFA9D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFA9E, 0xFA9F, 0xFAA0, 0xFB40, 0xFB41, 0xFB42, 0xFB43, 0xFB44, /* 0x00 */ + 0xFB45, 0xFB46, 0xFB47, 0xFB48, 0xFB49, 0xFB4A, 0xFB4B, 0xFB4C, /* 0x00 */ + 0xFB4D, 0xFB4E, 0xFB4F, 0xFB50, 0xFB51, 0xFB52, 0xFB53, 0xFB54, /* 0x10 */ + 0xFB55, 0xFB56, 0xFB57, 0xFB58, 0xFB59, 0xFB5A, 0xFB5B, 0xC4F1, /* 0x10 */ + 0xF0AF, 0xBCA6, 0xF0B0, 0xC3F9, 0xFB5C, 0xC5B8, 0xD1BB, 0xFB5D, /* 0x20 */ + 0xF0B1, 0xF0B2, 0xF0B3, 0xF0B4, 0xF0B5, 0xD1BC, 0xFB5E, 0xD1EC, /* 0x20 */ + 0xFB5F, 0xF0B7, 0xF0B6, 0xD4A7, 0xFB60, 0xCDD2, 0xF0B8, 0xF0BA, /* 0x30 */ + 0xF0B9, 0xF0BB, 0xF0BC, 0xFB61, 0xFB62, 0xB8EB, 0xF0BD, 0xBAE8, /* 0x30 */ + 0xFB63, 0xF0BE, 0xF0BF, 0xBEE9, 0xF0C0, 0xB6EC, 0xF0C1, 0xF0C2, /* 0x40 */ + 0xF0C3, 0xF0C4, 0xC8B5, 0xF0C5, 0xF0C6, 0xFB64, 0xF0C7, 0xC5F4, /* 0x40 */ + 0xFB65, 0xF0C8, 0xFB66, 0xFB67, 0xFB68, 0xF0C9, 0xFB69, 0xF0CA, /* 0x50 */ + 0xF7BD, 0xFB6A, 0xF0CB, 0xF0CC, 0xF0CD, 0xFB6B, 0xF0CE, 0xFB6C, /* 0x50 */ + 0xFB6D, 0xFB6E, 0xFB6F, 0xF0CF, 0xBAD7, 0xFB70, 0xF0D0, 0xF0D1, /* 0x60 */ + 0xF0D2, 0xF0D3, 0xF0D4, 0xF0D5, 0xF0D6, 0xF0D8, 0xFB71, 0xFB72, /* 0x60 */ + 0xD3A5, 0xF0D7, 0xFB73, 0xF0D9, 0xFB74, 0xFB75, 0xFB76, 0xFB77, /* 0x70 */ + 0xFB78, 0xFB79, 0xFB7A, 0xFB7B, 0xFB7C, 0xFB7D, 0xF5BA, 0xC2B9, /* 0x70 */ + 0xFB7E, 0xFB80, 0xF7E4, 0xFB81, 0xFB82, 0xFB83, 0xFB84, 0xF7E5, /* 0x80 */ + 0xF7E6, 0xFB85, 0xFB86, 0xF7E7, 0xFB87, 0xFB88, 0xFB89, 0xFB8A, /* 0x80 */ + 0xFB8B, 0xFB8C, 0xF7E8, 0xC2B4, 0xFB8D, 0xFB8E, 0xFB8F, 0xFB90, /* 0x90 */ + 0xFB91, 0xFB92, 0xFB93, 0xFB94, 0xFB95, 0xF7EA, 0xFB96, 0xF7EB, /* 0x90 */ + 0xFB97, 0xFB98, 0xFB99, 0xFB9A, 0xFB9B, 0xFB9C, 0xC2F3, 0xFB9D, /* 0xA0 */ + 0xFB9E, 0xFB9F, 0xFBA0, 0xFC40, 0xFC41, 0xFC42, 0xFC43, 0xFC44, /* 0xA0 */ + 0xFC45, 0xFC46, 0xFC47, 0xFC48, 0xF4F0, 0xFC49, 0xFC4A, 0xFC4B, /* 0xB0 */ + 0xF4EF, 0xFC4C, 0xFC4D, 0xC2E9, 0xFC4E, 0xF7E1, 0xF7E2, 0xFC4F, /* 0xB0 */ + 0xFC50, 0xFC51, 0xFC52, 0xFC53, 0xBBC6, 0xFC54, 0xFC55, 0xFC56, /* 0xC0 */ + 0xFC57, 0xD9E4, 0xFC58, 0xFC59, 0xFC5A, 0xCAF2, 0xC0E8, 0xF0A4, /* 0xC0 */ + 0xFC5B, 0xBADA, 0xFC5C, 0xFC5D, 0xC7AD, 0xFC5E, 0xFC5F, 0xFC60, /* 0xD0 */ + 0xC4AC, 0xFC61, 0xFC62, 0xF7EC, 0xF7ED, 0xF7EE, 0xFC63, 0xF7F0, /* 0xD0 */ + 0xF7EF, 0xFC64, 0xF7F1, 0xFC65, 0xFC66, 0xF7F4, 0xFC67, 0xF7F3, /* 0xE0 */ + 0xFC68, 0xF7F2, 0xF7F5, 0xFC69, 0xFC6A, 0xFC6B, 0xFC6C, 0xF7F6, /* 0xE0 */ + 0xFC6D, 0xFC6E, 0xFC6F, 0xFC70, 0xFC71, 0xFC72, 0xFC73, 0xFC74, /* 0xF0 */ + 0xFC75, 0xEDE9, 0xFC76, 0xEDEA, 0xEDEB, 0xFC77, 0xF6BC, 0xFC78 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFC79, 0xFC7A, 0xFC7B, 0xFC7C, 0xFC7D, 0xFC7E, 0xFC80, 0xFC81, /* 0x00 */ + 0xFC82, 0xFC83, 0xFC84, 0xF6BD, 0xFC85, 0xF6BE, 0xB6A6, 0xFC86, /* 0x00 */ + 0xD8BE, 0xFC87, 0xFC88, 0xB9C4, 0xFC89, 0xFC8A, 0xFC8B, 0xD8BB, /* 0x10 */ + 0xFC8C, 0xDCB1, 0xFC8D, 0xFC8E, 0xFC8F, 0xFC90, 0xFC91, 0xFC92, /* 0x10 */ + 0xCAF3, 0xFC93, 0xF7F7, 0xFC94, 0xFC95, 0xFC96, 0xFC97, 0xFC98, /* 0x20 */ + 0xFC99, 0xFC9A, 0xFC9B, 0xFC9C, 0xF7F8, 0xFC9D, 0xFC9E, 0xF7F9, /* 0x20 */ + 0xFC9F, 0xFCA0, 0xFD40, 0xFD41, 0xFD42, 0xFD43, 0xFD44, 0xF7FB, /* 0x30 */ + 0xFD45, 0xF7FA, 0xFD46, 0xB1C7, 0xFD47, 0xF7FC, 0xF7FD, 0xFD48, /* 0x30 */ + 0xFD49, 0xFD4A, 0xFD4B, 0xFD4C, 0xF7FE, 0xFD4D, 0xFD4E, 0xFD4F, /* 0x40 */ + 0xFD50, 0xFD51, 0xFD52, 0xFD53, 0xFD54, 0xFD55, 0xFD56, 0xFD57, /* 0x40 */ + 0xC6EB, 0xECB4, 0xFD58, 0xFD59, 0xFD5A, 0xFD5B, 0xFD5C, 0xFD5D, /* 0x50 */ + 0xFD5E, 0xFD5F, 0xFD60, 0xFD61, 0xFD62, 0xFD63, 0xFD64, 0xFD65, /* 0x50 */ + 0xFD66, 0xFD67, 0xFD68, 0xFD69, 0xFD6A, 0xFD6B, 0xFD6C, 0xFD6D, /* 0x60 */ + 0xFD6E, 0xFD6F, 0xFD70, 0xFD71, 0xFD72, 0xFD73, 0xFD74, 0xFD75, /* 0x60 */ + 0xFD76, 0xFD77, 0xFD78, 0xFD79, 0xFD7A, 0xFD7B, 0xFD7C, 0xFD7D, /* 0x70 */ + 0xFD7E, 0xFD80, 0xFD81, 0xFD82, 0xFD83, 0xFD84, 0xFD85, 0xB3DD, /* 0x70 */ + 0xF6B3, 0xFD86, 0xFD87, 0xF6B4, 0xC1E4, 0xF6B5, 0xF6B6, 0xF6B7, /* 0x80 */ + 0xF6B8, 0xF6B9, 0xF6BA, 0xC8A3, 0xF6BB, 0xFD88, 0xFD89, 0xFD8A, /* 0x80 */ + 0xFD8B, 0xFD8C, 0xFD8D, 0xFD8E, 0xFD8F, 0xFD90, 0xFD91, 0xFD92, /* 0x90 */ + 0xFD93, 0xC1FA, 0xB9A8, 0xEDE8, 0xFD94, 0xFD95, 0xFD96, 0xB9EA, /* 0x90 */ + 0xD9DF, 0xFD97, 0xFD98, 0xFD99, 0xFD9A, 0xFD9B /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINSIMP_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0081, 0x0082 /* 0x80 */ + /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x20 */ + 0xFD9C, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xFD9D, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xFD9E, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xFD9F, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xFDA0 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xFE40, 0xFE41, 0xFE42, 0xFE43, /* 0x00 */ + 0, 0xFE44, 0, 0xFE45, 0xFE46, 0, 0, 0, /* 0x10 */ + 0xFE47, 0, 0, 0, 0, 0, 0, 0xFE48, /* 0x10 */ + 0xFE49, 0xFE4A, 0, 0xFE4B, 0xFE4C, 0, 0, 0xFE4D, /* 0x20 */ + 0xFE4E, 0xFE4F /* 0x20 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_FE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA955, 0xA6F2, 0, 0xA6F4, 0xA6F5, 0xA6E0, 0xA6E1, 0xA6F0, /* 0x30 */ + 0xA6F1, 0xA6E2, 0xA6E3, 0xA6EE, 0xA6EF, 0xA6E6, 0xA6E7, 0xA6E4, /* 0x30 */ + 0xA6E5, 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB, 0, 0, 0, /* 0x40 */ + 0, 0xA968, 0xA969, 0xA96A, 0xA96B, 0xA96C, 0xA96D, 0xA96E, /* 0x40 */ + 0xA96F, 0xA970, 0xA971, 0, 0xA972, 0xA973, 0xA974, 0xA975, /* 0x50 */ + 0, 0xA976, 0xA977, 0xA978, 0xA979, 0xA97A, 0xA97B, 0xA97C, /* 0x50 */ + 0xA97D, 0xA97E, 0xA980, 0xA981, 0xA982, 0xA983, 0xA984, 0, /* 0x60 */ + 0xA985, 0xA986, 0xA987, 0xA988 /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_FE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA6F2, 0, 0xA6F4, 0xA6F5, 0xA6E0, 0xA6E1, 0xA6F0, /* 0x30 */ + 0xA6F1, 0xA6E2, 0xA6E3, 0xA6EE, 0xA6EF, 0xA6E6, 0xA6E7, 0xA6E4, /* 0x30 */ + 0xA6E5, 0xA6E8, 0xA6E9, 0xA6EA, 0xA6EB /* 0x40 */ + /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBK_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA3A1, 0xA3A2, 0xA3A3, 0xA1E7, 0xA3A5, 0xA3A6, 0xA3A7, /* 0x00 */ + 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, /* 0x00 */ + 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, /* 0x10 */ + 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF, /* 0x10 */ + 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, /* 0x20 */ + 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, /* 0x20 */ + 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, /* 0x30 */ + 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA3DC, 0xA3DD, 0xA3DE, 0xA3DF, /* 0x30 */ + 0xA3E0, 0xA3E1, 0xA3E2, 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, /* 0x40 */ + 0xA3E8, 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, 0xA3EF, /* 0x40 */ + 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6, 0xA3F7, /* 0x50 */ + 0xA3F8, 0xA3F9, 0xA3FA, 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AB, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA1E9, 0xA1EA, 0xA956, 0xA3FE, 0xA957, 0xA3A4 /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA3A1, 0xA3A2, 0xA3A3, 0xA1E7, 0xA3A5, 0xA3A6, 0xA3A7, /* 0x00 */ + 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, /* 0x00 */ + 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, /* 0x10 */ + 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF, /* 0x10 */ + 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, /* 0x20 */ + 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, /* 0x20 */ + 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, /* 0x30 */ + 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 0xA3DC, 0xA3DD, 0xA3DE, 0xA3DF, /* 0x30 */ + 0xA3E0, 0xA3E1, 0xA3E2, 0xA3E3, 0xA3E4, 0xA3E5, 0xA3E6, 0xA3E7, /* 0x40 */ + 0xA3E8, 0xA3E9, 0xA3EA, 0xA3EB, 0xA3EC, 0xA3ED, 0xA3EE, 0xA3EF, /* 0x40 */ + 0xA3F0, 0xA3F1, 0xA3F2, 0xA3F3, 0xA3F4, 0xA3F5, 0xA3F6, 0xA3F7, /* 0x50 */ + 0xA3F8, 0xA3F9, 0xA3FA, 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AB, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA1E9, 0xA1EA, 0, 0xA3FE, 0, 0xA3A4, /* 0xE0 */ + /* 0xE0 */ +}; + diff --git a/sal/textenc/tcvtscn3.tab b/sal/textenc/tcvtscn3.tab new file mode 100644 index 000000000..fe1ee73ec --- /dev/null +++ b/sal/textenc/tcvtscn3.tab @@ -0,0 +1,1493 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* chinese simplified (China) charsets: */ +/* GBT (GB12345) */ + +/* ======================================================================= */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x554A, 0x963F, 0x57C3, 0x6328, 0x54CE, 0x5509, 0x54C0, /* 0xA0 */ + 0x769A, 0x764C, 0x85F9, 0x77EE, 0x827E, 0x7919, 0x611B, 0x9698, /* 0xA0 */ + 0x978D, 0x6C28, 0x5B89, 0x4FFA, 0x6309, 0x6697, 0x5CB8, 0x80FA, /* 0xB0 */ + 0x6848, 0x9AAF, 0x6602, 0x76CE, 0x51F9, 0x6556, 0x71AC, 0x7FF1, /* 0xB0 */ + 0x8956, 0x50B2, 0x5965, 0x61CA, 0x6FB3, 0x82AD, 0x634C, 0x6252, /* 0xC0 */ + 0x53ED, 0x5427, 0x7B06, 0x516B, 0x75A4, 0x5DF4, 0x62D4, 0x8DCB, /* 0xC0 */ + 0x9776, 0x628A, 0x8019, 0x58E9, 0x9738, 0x7F77, 0x7238, 0x767D, /* 0xD0 */ + 0x67CF, 0x767E, 0x64FA, 0x4F70, 0x6557, 0x62DC, 0x7A17, 0x6591, /* 0xD0 */ + 0x73ED, 0x642C, 0x6273, 0x822C, 0x9812, 0x677F, 0x7248, 0x626E, /* 0xE0 */ + 0x62CC, 0x4F34, 0x74E3, 0x534A, 0x8FA6, 0x7D46, 0x90A6, 0x5E6B, /* 0xE0 */ + 0x6886, 0x699C, 0x8180, 0x7D81, 0x68D2, 0x78C5, 0x868C, 0x938A, /* 0xF0 */ + 0x508D, 0x8B17, 0x82DE, 0x80DE, 0x5305, 0x8912, 0x5265 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8584, 0x96F9, 0x4FDD, 0x5821, 0x98FD, 0x5BF6, 0x62B1, /* 0xA0 */ + 0x5831, 0x66B4, 0x8C79, 0x9B91, 0x7206, 0x676F, 0x7891, 0x60B2, /* 0xA0 */ + 0x5351, 0x5317, 0x8F29, 0x80CC, 0x8C9D, 0x92C7, 0x500D, 0x72FD, /* 0xB0 */ + 0x5099, 0x618A, 0x7119, 0x88AB, 0x5954, 0x82EF, 0x672C, 0x7B28, /* 0xB0 */ + 0x5D29, 0x7DB3, 0x752D, 0x6CF5, 0x8E66, 0x8FF8, 0x903C, 0x9F3B, /* 0xC0 */ + 0x6BD4, 0x9119, 0x7B46, 0x5F7C, 0x78A7, 0x84D6, 0x853D, 0x7562, /* 0xC0 */ + 0x6583, 0x6BD6, 0x5E63, 0x5E87, 0x75F9, 0x9589, 0x655D, 0x5F0A, /* 0xD0 */ + 0x5FC5, 0x8F9F, 0x58C1, 0x81C2, 0x907F, 0x965B, 0x97AD, 0x908A, /* 0xD0 */ + 0x7DE8, 0x8CB6, 0x6241, 0x4FBF, 0x8B8A, 0x535E, 0x8FA8, 0x8FAF, /* 0xE0 */ + 0x8FAE, 0x904D, 0x6A19, 0x5F6A, 0x8198, 0x8868, 0x9C49, 0x618B, /* 0xE0 */ + 0x522B, 0x765F, 0x5F6C, 0x658C, 0x7015, 0x6FF1, 0x8CD3, 0x64EF, /* 0xF0 */ + 0x5175, 0x51B0, 0x67C4, 0x4E19, 0x79C9, 0x9905, 0x70B3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x75C5, 0x5E76, 0x73BB, 0x83E0, 0x64AD, 0x64A5, 0x9262, /* 0xA0 */ + 0x6CE2, 0x535A, 0x52C3, 0x640F, 0x9251, 0x7B94, 0x4F2F, 0x5E1B, /* 0xA0 */ + 0x8236, 0x8116, 0x818A, 0x6E24, 0x6CCA, 0x99C1, 0x6355, 0x535C, /* 0xB0 */ + 0x54FA, 0x88DC, 0x57E0, 0x4E0D, 0x5E03, 0x6B65, 0x7C3F, 0x90E8, /* 0xB0 */ + 0x6016, 0x64E6, 0x731C, 0x88C1, 0x6750, 0x624D, 0x8CA1, 0x776C, /* 0xC0 */ + 0x8E29, 0x91C7, 0x5F69, 0x83DC, 0x8521, 0x9910, 0x53C3, 0x8836, /* 0xC0 */ + 0x6B98, 0x615A, 0x6158, 0x71E6, 0x84BC, 0x8259, 0x5009, 0x6EC4, /* 0xD0 */ + 0x85CF, 0x64CD, 0x7CD9, 0x69FD, 0x66F9, 0x8349, 0x53A0, 0x7B56, /* 0xD0 */ + 0x5074, 0x518C, 0x6E2C, 0x5C64, 0x8E6D, 0x63D2, 0x53C9, 0x832C, /* 0xE0 */ + 0x8336, 0x67E5, 0x78B4, 0x643D, 0x5BDF, 0x5C94, 0x5DEE, 0x8A6B, /* 0xE0 */ + 0x62C6, 0x67F4, 0x8C7A, 0x6519, 0x647B, 0x87EC, 0x995E, 0x8B92, /* 0xF0 */ + 0x7E8F, 0x93DF, 0x7523, 0x95E1, 0x986B, 0x660C, 0x7316 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5834, 0x5617, 0x5E38, 0x9577, 0x511F, 0x8178, 0x5EE0, /* 0xA0 */ + 0x655E, 0x66A2, 0x5531, 0x5021, 0x8D85, 0x6284, 0x9214, 0x671D, /* 0xA0 */ + 0x5632, 0x6F6E, 0x5DE2, 0x5435, 0x7092, 0x8ECA, 0x626F, 0x64A4, /* 0xB0 */ + 0x63A3, 0x5FB9, 0x6F88, 0x90F4, 0x81E3, 0x8FB0, 0x5875, 0x6668, /* 0xB0 */ + 0x5FF1, 0x6C89, 0x9673, 0x8D81, 0x896F, 0x6491, 0x7A31, 0x57CE, /* 0xC0 */ + 0x6A59, 0x6210, 0x5448, 0x4E58, 0x7A0B, 0x61F2, 0x6F84, 0x8AA0, /* 0xC0 */ + 0x627F, 0x901E, 0x9A01, 0x79E4, 0x5403, 0x75F4, 0x6301, 0x5319, /* 0xD0 */ + 0x6C60, 0x9072, 0x5F1B, 0x99B3, 0x803B, 0x9F52, 0x4F88, 0x5C3A, /* 0xD0 */ + 0x8D64, 0x7FC5, 0x65A5, 0x71BE, 0x5145, 0x885D, 0x87F2, 0x5D07, /* 0xE0 */ + 0x5BF5, 0x62BD, 0x916C, 0x7587, 0x8E8A, 0x7A20, 0x6101, 0x7C4C, /* 0xE0 */ + 0x4EC7, 0x7DA2, 0x7785, 0x919C, 0x81ED, 0x521D, 0x51FA, 0x6A71, /* 0xF0 */ + 0x53A8, 0x8E87, 0x92E4, 0x96DB, 0x6EC1, 0x9664, 0x695A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x790E, 0x5132, 0x77D7, 0x6410, 0x89F8, 0x8655, 0x63E3, /* 0xA0 */ + 0x5DDD, 0x7A7F, 0x693D, 0x50B3, 0x8239, 0x5598, 0x4E32, 0x7621, /* 0xA0 */ + 0x7A97, 0x5E62, 0x5E8A, 0x95D6, 0x5275, 0x5439, 0x708A, 0x6376, /* 0xB0 */ + 0x9318, 0x5782, 0x6625, 0x693F, 0x9187, 0x5507, 0x6DF3, 0x7D14, /* 0xB0 */ + 0x8822, 0x6233, 0x7DBD, 0x75B5, 0x8328, 0x78C1, 0x96CC, 0x8FAD, /* 0xC0 */ + 0x6148, 0x74F7, 0x8A5E, 0x6B64, 0x523A, 0x8CDC, 0x6B21, 0x8070, /* 0xC0 */ + 0x8471, 0x56F1, 0x5306, 0x5F9E, 0x53E2, 0x51D1, 0x7C97, 0x918B, /* 0xD0 */ + 0x7C07, 0x4FC3, 0x8EA5, 0x7BE1, 0x7AC4, 0x6467, 0x5D14, 0x50AC, /* 0xD0 */ + 0x8106, 0x7601, 0x7CB9, 0x6DEC, 0x7FE0, 0x6751, 0x5B58, 0x5BF8, /* 0xE0 */ + 0x78CB, 0x64AE, 0x6413, 0x63AA, 0x632B, 0x932F, 0x642D, 0x9054, /* 0xE0 */ + 0x7B54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6B79, 0x50A3, 0x6234, /* 0xF0 */ + 0x5E36, 0x6B86, 0x4EE3, 0x8CB8, 0x888B, 0x5F85, 0x902E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6020, 0x803D, 0x64D4, 0x4E39, 0x55AE, 0x9132, 0x64A3, /* 0xA0 */ + 0x81BD, 0x65E6, 0x6C2E, 0x4F46, 0x619A, 0x6DE1, 0x8A95, 0x5F48, /* 0xA0 */ + 0x86CB, 0x7576, 0x64CB, 0x9EE8, 0x8569, 0x6A94, 0x5200, 0x6417, /* 0xB0 */ + 0x8E48, 0x5012, 0x5CF6, 0x79B1, 0x5C0E, 0x5230, 0x7A3B, 0x60BC, /* 0xB0 */ + 0x9053, 0x76D7, 0x5FB7, 0x5F97, 0x7684, 0x8E6C, 0x71C8, 0x767B, /* 0xC0 */ + 0x7B49, 0x77AA, 0x51F3, 0x9127, 0x5824, 0x4F4E, 0x6EF4, 0x8FEA, /* 0xC0 */ + 0x6575, 0x7B1B, 0x72C4, 0x6ECC, 0x7FDF, 0x5AE1, 0x62B5, 0x5E95, /* 0xD0 */ + 0x5730, 0x8482, 0x7B2C, 0x5E1D, 0x5F1F, 0x905E, 0x7DE0, 0x985B, /* 0xD0 */ + 0x6382, 0x6EC7, 0x7898, 0x9EDE, 0x5178, 0x975B, 0x588A, 0x96FB, /* 0xE0 */ + 0x4F43, 0x7538, 0x5E97, 0x60E6, 0x5960, 0x6FB1, 0x6BBF, 0x7889, /* 0xE0 */ + 0x53FC, 0x96D5, 0x51CB, 0x5201, 0x6389, 0x540A, 0x91E3, 0x8ABF, /* 0xF0 */ + 0x8DCC, 0x7239, 0x789F, 0x8776, 0x8FED, 0x8ADC, 0x758A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E01, 0x76EF, 0x53EE, 0x91D8, 0x9802, 0x9F0E, 0x9320, /* 0xA0 */ + 0x5B9A, 0x8A02, 0x4E22, 0x6771, 0x51AC, 0x8463, 0x61C2, 0x52D5, /* 0xA0 */ + 0x68DF, 0x4F97, 0x606B, 0x51CD, 0x6D1E, 0x515C, 0x6296, 0x9B25, /* 0xB0 */ + 0x9661, 0x8C46, 0x9017, 0x75D8, 0x90FD, 0x7763, 0x6BD2, 0x72A2, /* 0xB0 */ + 0x7368, 0x8B80, 0x5835, 0x7779, 0x8CED, 0x675C, 0x934D, 0x809A, /* 0xC0 */ + 0x5EA6, 0x6E21, 0x5992, 0x7AEF, 0x77ED, 0x935B, 0x6BB5, 0x65B7, /* 0xC0 */ + 0x7DDE, 0x5806, 0x5151, 0x968A, 0x5C0D, 0x58A9, 0x5678, 0x8E72, /* 0xD0 */ + 0x6566, 0x9813, 0x56E4, 0x920D, 0x76FE, 0x9041, 0x6387, 0x54C6, /* 0xD0 */ + 0x591A, 0x596A, 0x579B, 0x8EB2, 0x6735, 0x8DFA, 0x8235, 0x5241, /* 0xE0 */ + 0x60F0, 0x58AE, 0x86FE, 0x5CE8, 0x9D5D, 0x4FC4, 0x984D, 0x8A1B, /* 0xE0 */ + 0x5A25, 0x60E1, 0x5384, 0x627C, 0x904F, 0x9102, 0x9913, 0x6069, /* 0xF0 */ + 0x800C, 0x5152, 0x8033, 0x723E, 0x990C, 0x6D31, 0x4E8C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8CB3, 0x767C, 0x7F70, 0x7B4F, 0x4F10, 0x4E4F, 0x95A5, /* 0xA0 */ + 0x6CD5, 0x73D0, 0x85E9, 0x5E06, 0x756A, 0x7FFB, 0x6A0A, 0x792C, /* 0xA0 */ + 0x91E9, 0x7E41, 0x51E1, 0x7169, 0x53CD, 0x8FD4, 0x7BC4, 0x8CA9, /* 0xB0 */ + 0x72AF, 0x98EF, 0x6CDB, 0x574A, 0x82B3, 0x65B9, 0x80AA, 0x623F, /* 0xB0 */ + 0x9632, 0x59A8, 0x4EFF, 0x8A2A, 0x7D21, 0x653E, 0x83F2, 0x975E, /* 0xC0 */ + 0x5561, 0x98DB, 0x80A5, 0x532A, 0x8AB9, 0x5420, 0x80BA, 0x5EE2, /* 0xC0 */ + 0x6CB8, 0x8CBB, 0x82AC, 0x915A, 0x5429, 0x6C1B, 0x5206, 0x7D1B, /* 0xD0 */ + 0x58B3, 0x711A, 0x6C7E, 0x7C89, 0x596E, 0x4EFD, 0x5FFF, 0x61A4, /* 0xD0 */ + 0x7CDE, 0x8C50, 0x5C01, 0x6953, 0x8702, 0x5CF0, 0x92D2, 0x98A8, /* 0xE0 */ + 0x760B, 0x70FD, 0x9022, 0x99AE, 0x7E2B, 0x8AF7, 0x5949, 0x9CF3, /* 0xE0 */ + 0x4F5B, 0x5426, 0x592B, 0x6577, 0x819A, 0x5B75, 0x6276, 0x62C2, /* 0xF0 */ + 0x8F3B, 0x5E45, 0x6C1F, 0x7B26, 0x4F0F, 0x4FD8, 0x670D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6D6E, 0x6DAA, 0x798F, 0x88B1, 0x5F17, 0x752B, 0x64AB, /* 0xA0 */ + 0x8F14, 0x4FEF, 0x91DC, 0x65A7, 0x812F, 0x8151, 0x5E9C, 0x8150, /* 0xA0 */ + 0x8D74, 0x526F, 0x8986, 0x8CE6, 0x5FA9, 0x5085, 0x4ED8, 0x961C, /* 0xB0 */ + 0x7236, 0x8179, 0x8CA0, 0x5BCC, 0x8A03, 0x9644, 0x5A66, 0x7E1B, /* 0xB0 */ + 0x5490, 0x5676, 0x560E, 0x8A72, 0x6539, 0x6982, 0x9223, 0x84CB, /* 0xC0 */ + 0x6E89, 0x5E79, 0x7518, 0x6746, 0x67D1, 0x7AFF, 0x809D, 0x8D95, /* 0xC0 */ + 0x611F, 0x79C6, 0x6562, 0x8D1B, 0x5CA1, 0x525B, 0x92FC, 0x7F38, /* 0xD0 */ + 0x809B, 0x7DB1, 0x5D17, 0x6E2F, 0x6760, 0x7BD9, 0x768B, 0x9AD8, /* 0xD0 */ + 0x818F, 0x7F94, 0x7CD5, 0x641E, 0x93AC, 0x7A3F, 0x544A, 0x54E5, /* 0xE0 */ + 0x6B4C, 0x64F1, 0x6208, 0x9D3F, 0x80F3, 0x7599, 0x5272, 0x9769, /* 0xE0 */ + 0x845B, 0x683C, 0x86E4, 0x95A3, 0x9694, 0x927B, 0x500B, 0x5404, /* 0xF0 */ + 0x7D66, 0x6839, 0x8DDF, 0x8015, 0x66F4, 0x5E9A, 0x7FB9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x57C2, 0x803F, 0x6897, 0x5DE5, 0x653B, 0x529F, 0x606D, /* 0xA0 */ + 0x9F94, 0x4F9B, 0x8EAC, 0x516C, 0x5BAB, 0x5F13, 0x978F, 0x6C5E, /* 0xA0 */ + 0x62F1, 0x8CA2, 0x5171, 0x920E, 0x52FE, 0x6E9D, 0x82DF, 0x72D7, /* 0xB0 */ + 0x57A2, 0x69CB, 0x8CFC, 0x591F, 0x8F9C, 0x83C7, 0x5495, 0x7B8D, /* 0xB0 */ + 0x4F30, 0x6CBD, 0x5B64, 0x59D1, 0x9F13, 0x53E4, 0x8831, 0x9AA8, /* 0xC0 */ + 0x8C37, 0x80A1, 0x6545, 0x9867, 0x56FA, 0x96C7, 0x522E, 0x74DC, /* 0xC0 */ + 0x526E, 0x5BE1, 0x6302, 0x8902, 0x4E56, 0x62D0, 0x602A, 0x68FA, /* 0xD0 */ + 0x95DC, 0x5B98, 0x51A0, 0x89C0, 0x7BA1, 0x9928, 0x7F50, 0x6163, /* 0xD0 */ + 0x704C, 0x8CAB, 0x5149, 0x5EE3, 0x901B, 0x7470, 0x898F, 0x572D, /* 0xE0 */ + 0x7845, 0x6B78, 0x9F9C, 0x95A8, 0x8ECC, 0x9B3C, 0x8A6D, 0x7678, /* 0xE0 */ + 0x6842, 0x6AC3, 0x8DEA, 0x8CB4, 0x528A, 0x8F25, 0x6EDA, 0x68CD, /* 0xF0 */ + 0x934B, 0x90ED, 0x570B, 0x679C, 0x88F9, 0x904E, 0x54C8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9AB8, 0x5B69, 0x6D77, 0x6C26, 0x4EA5, 0x5BB3, 0x99ED, /* 0xA0 */ + 0x9163, 0x61A8, 0x90AF, 0x97D3, 0x542B, 0x6DB5, 0x5BD2, 0x51FD, /* 0xA0 */ + 0x558A, 0x7F55, 0x7FF0, 0x64BC, 0x634D, 0x65F1, 0x61BE, 0x608D, /* 0xB0 */ + 0x710A, 0x6C57, 0x6F22, 0x592F, 0x676D, 0x822A, 0x58D5, 0x568E, /* 0xB0 */ + 0x8C6A, 0x6BEB, 0x90DD, 0x597D, 0x8017, 0x865F, 0x6D69, 0x5475, /* 0xC0 */ + 0x559D, 0x8377, 0x83CF, 0x6838, 0x79BE, 0x548C, 0x4F55, 0x5408, /* 0xC0 */ + 0x76D2, 0x8C89, 0x95A1, 0x6CB3, 0x6DB8, 0x8D6B, 0x8910, 0x9DB4, /* 0xD0 */ + 0x8CC0, 0x563F, 0x9ED1, 0x75D5, 0x5F88, 0x72E0, 0x6068, 0x54FC, /* 0xD0 */ + 0x4EA8, 0x6A2A, 0x8861, 0x6052, 0x8F5F, 0x54C4, 0x70D8, 0x8679, /* 0xE0 */ + 0x9D3B, 0x6D2A, 0x5B8F, 0x5F18, 0x7D05, 0x5589, 0x4FAF, 0x7334, /* 0xE0 */ + 0x543C, 0x539A, 0x5019, 0x5F8C, 0x547C, 0x4E4E, 0x5FFD, 0x745A, /* 0xF0 */ + 0x58FA, 0x846B, 0x80E1, 0x8774, 0x72D0, 0x7CCA, 0x6E56 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5F27, 0x864E, 0x552C, 0x8B77, 0x4E92, 0x6EEC, 0x6237, /* 0xA0 */ + 0x82B1, 0x5629, 0x83EF, 0x733E, 0x6ED1, 0x756B, 0x5283, 0x5316, /* 0xA0 */ + 0x8A71, 0x69D0, 0x5F8A, 0x61F7, 0x6DEE, 0x58DE, 0x6B61, 0x74B0, /* 0xB0 */ + 0x6853, 0x9084, 0x7DE9, 0x63DB, 0x60A3, 0x559A, 0x7613, 0x8C62, /* 0xB0 */ + 0x7165, 0x6E19, 0x5BA6, 0x5E7B, 0x8352, 0x614C, 0x9EC4, 0x78FA, /* 0xC0 */ + 0x8757, 0x7C27, 0x7687, 0x51F0, 0x60F6, 0x714C, 0x6643, 0x5E4C, /* 0xC0 */ + 0x604D, 0x8B0A, 0x7070, 0x63EE, 0x8F1D, 0x5FBD, 0x6062, 0x86D4, /* 0xD0 */ + 0x56DE, 0x6BC1, 0x6094, 0x6167, 0x5349, 0x60E0, 0x6666, 0x8CC4, /* 0xD0 */ + 0x7A62, 0x6703, 0x71F4, 0x532F, 0x8AF1, 0x8AA8, 0x7E6A, 0x8477, /* 0xE0 */ + 0x660F, 0x5A5A, 0x9B42, 0x6E3E, 0x6DF7, 0x8C41, 0x6D3B, 0x4F19, /* 0xE0 */ + 0x706B, 0x7372, 0x6216, 0x60D1, 0x970D, 0x8CA8, 0x798D, 0x64CA, /* 0xF0 */ + 0x573E, 0x57FA, 0x6A5F, 0x7578, 0x7A3D, 0x7A4D, 0x7B95 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x808C, 0x9951, 0x8FF9, 0x6FC0, 0x8B4F, 0x9DC4, 0x59EC, /* 0xA0 */ + 0x7E3E, 0x7DDD, 0x5409, 0x6975, 0x68D8, 0x8F2F, 0x7C4D, 0x96C6, /* 0xA0 */ + 0x53CA, 0x6025, 0x75BE, 0x6C72, 0x5373, 0x5AC9, 0x7D1A, 0x64E0, /* 0xB0 */ + 0x5E7E, 0x810A, 0x5DF1, 0x858A, 0x6280, 0x5180, 0x5B63, 0x4F0E, /* 0xB0 */ + 0x796D, 0x5291, 0x60B8, 0x6FDF, 0x5BC4, 0x5BC2, 0x8A08, 0x8A18, /* 0xC0 */ + 0x65E2, 0x5FCC, 0x969B, 0x5993, 0x7E7C, 0x7D00, 0x5609, 0x67B7, /* 0xC0 */ + 0x593E, 0x4F73, 0x5BB6, 0x52A0, 0x83A2, 0x9830, 0x8CC8, 0x7532, /* 0xD0 */ + 0x9240, 0x5047, 0x7A3C, 0x50F9, 0x67B6, 0x99D5, 0x5AC1, 0x6BB2, /* 0xD0 */ + 0x76E3, 0x5805, 0x5C16, 0x7B8B, 0x9593, 0x714E, 0x517C, 0x80A9, /* 0xE0 */ + 0x8271, 0x5978, 0x7DD8, 0x7E6D, 0x6AA2, 0x67EC, 0x78B1, 0x9E7C, /* 0xE0 */ + 0x63C0, 0x64BF, 0x7C21, 0x5109, 0x526A, 0x51CF, 0x85A6, 0x6ABB, /* 0xF0 */ + 0x9452, 0x8E10, 0x8CE4, 0x898B, 0x9375, 0x7BAD, 0x4EF6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5065, 0x8266, 0x528D, 0x991E, 0x6F38, 0x6FFA, 0x6F97, /* 0xA0 */ + 0x5EFA, 0x50F5, 0x59DC, 0x5C07, 0x6F3F, 0x6C5F, 0x7586, 0x8523, /* 0xA0 */ + 0x69F3, 0x596C, 0x8B1B, 0x5320, 0x91AC, 0x964D, 0x8549, 0x6912, /* 0xB0 */ + 0x7901, 0x7126, 0x81A0, 0x4EA4, 0x90CA, 0x6F86, 0x9A55, 0x5B0C, /* 0xB0 */ + 0x56BC, 0x652A, 0x9278, 0x77EF, 0x50E5, 0x811A, 0x72E1, 0x89D2, /* 0xC0 */ + 0x9903, 0x7E73, 0x7D5E, 0x527F, 0x6559, 0x9175, 0x8F4E, 0x8F03, /* 0xC0 */ + 0x53EB, 0x7A96, 0x63ED, 0x63A5, 0x7686, 0x79F8, 0x8857, 0x968E, /* 0xD0 */ + 0x622A, 0x52AB, 0x7BC0, 0x6854, 0x6770, 0x6377, 0x776B, 0x7AED, /* 0xD0 */ + 0x6F54, 0x7D50, 0x89E3, 0x59D0, 0x6212, 0x85C9, 0x82A5, 0x754C, /* 0xE0 */ + 0x501F, 0x4ECB, 0x75A5, 0x8AA1, 0x5C4A, 0x5DFE, 0x7B4B, 0x65A4, /* 0xE0 */ + 0x91D1, 0x4ECA, 0x6D25, 0x895F, 0x7DCA, 0x9326, 0x50C5, 0x8B39, /* 0xF0 */ + 0x9032, 0x9773, 0x6649, 0x7981, 0x8FD1, 0x71FC, 0x6D78 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x76E1, 0x52C1, 0x8346, 0x5162, 0x8396, 0x775B, 0x6676, /* 0xA0 */ + 0x9BE8, 0x4EAC, 0x9A5A, 0x7CBE, 0x7CB3, 0x7D93, 0x4E95, 0x8B66, /* 0xA0 */ + 0x666F, 0x9838, 0x975C, 0x5883, 0x656C, 0x93E1, 0x5F91, 0x75D9, /* 0xB0 */ + 0x9756, 0x7ADF, 0x7AF6, 0x51C8, 0x70AF, 0x7A98, 0x63EA, 0x7A76, /* 0xB0 */ + 0x7CFE, 0x7396, 0x97ED, 0x4E45, 0x7078, 0x4E5D, 0x9152, 0x53A9, /* 0xC0 */ + 0x6551, 0x820A, 0x81FC, 0x8205, 0x548E, 0x5C31, 0x759A, 0x97A0, /* 0xC0 */ + 0x62D8, 0x72D9, 0x75BD, 0x5C45, 0x99D2, 0x83CA, 0x5C40, 0x5480, /* 0xD0 */ + 0x77E9, 0x8209, 0x6CAE, 0x805A, 0x62D2, 0x64DA, 0x5DE8, 0x5177, /* 0xD0 */ + 0x8DDD, 0x8E1E, 0x92F8, 0x4FF1, 0x53E5, 0x61FC, 0x70AC, 0x5287, /* 0xE0 */ + 0x6350, 0x9D51, 0x5A1F, 0x5026, 0x7737, 0x5377, 0x7D79, 0x6485, /* 0xE0 */ + 0x652B, 0x6289, 0x6398, 0x5014, 0x7235, 0x89BA, 0x51B3, 0x8A23, /* 0xF0 */ + 0x7D76, 0x5747, 0x83CC, 0x921E, 0x8ECD, 0x541B, 0x5CFB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4FCA, 0x7AE3, 0x6D5A, 0x90E1, 0x99FF, 0x5580, 0x5496, /* 0xA0 */ + 0x5361, 0x54AF, 0x958B, 0x63E9, 0x6977, 0x51F1, 0x6168, 0x520A, /* 0xA0 */ + 0x582A, 0x52D8, 0x574E, 0x780D, 0x770B, 0x5EB7, 0x6177, 0x7CE0, /* 0xB0 */ + 0x625B, 0x6297, 0x4EA2, 0x7095, 0x8003, 0x62F7, 0x70E4, 0x9760, /* 0xB0 */ + 0x5777, 0x82DB, 0x67EF, 0x68F5, 0x78D5, 0x9846, 0x79D1, 0x6BBB, /* 0xC0 */ + 0x54B3, 0x53EF, 0x6E34, 0x514B, 0x523B, 0x5BA2, 0x8AB2, 0x80AF, /* 0xC0 */ + 0x5543, 0x58BE, 0x61C7, 0x5751, 0x542D, 0x7A7A, 0x6050, 0x5B54, /* 0xD0 */ + 0x63A7, 0x6473, 0x53E3, 0x6263, 0x5BC7, 0x67AF, 0x54ED, 0x7A9F, /* 0xD0 */ + 0x82E6, 0x9177, 0x5EAB, 0x8932, 0x8A87, 0x57AE, 0x630E, 0x8DE8, /* 0xE0 */ + 0x80EF, 0x584A, 0x7B77, 0x5108, 0x5FEB, 0x5BEC, 0x6B3E, 0x5321, /* 0xE0 */ + 0x7B50, 0x72C2, 0x6846, 0x7926, 0x7736, 0x66E0, 0x51B5, 0x8667, /* 0xF0 */ + 0x76D4, 0x5DCB, 0x7ABA, 0x8475, 0x594E, 0x9B41, 0x5080 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x994B, 0x6127, 0x6F70, 0x5764, 0x6606, 0x6346, 0x56F0, /* 0xA0 */ + 0x62EC, 0x64F4, 0x5ED3, 0x95CA, 0x5783, 0x62C9, 0x5587, 0x881F, /* 0xA0 */ + 0x81D8, 0x8FA3, 0x5566, 0x840A, 0x4F86, 0x8CF4, 0x85CD, 0x5A6A, /* 0xB0 */ + 0x6B04, 0x6514, 0x7C43, 0x95CC, 0x862D, 0x703E, 0x8B95, 0x652C, /* 0xB0 */ + 0x89BD, 0x61F6, 0x7E9C, 0x721B, 0x6FEB, 0x7405, 0x6994, 0x72FC, /* 0xC0 */ + 0x5ECA, 0x90CE, 0x6717, 0x6D6A, 0x6488, 0x52DE, 0x7262, 0x8001, /* 0xC0 */ + 0x4F6C, 0x59E5, 0x916A, 0x70D9, 0x6F87, 0x52D2, 0x6A02, 0x96F7, /* 0xD0 */ + 0x9433, 0x857E, 0x78CA, 0x7D2F, 0x5121, 0x58D8, 0x64C2, 0x808B, /* 0xD0 */ + 0x985E, 0x6CEA, 0x68F1, 0x695E, 0x51B7, 0x5398, 0x68A8, 0x7281, /* 0xE0 */ + 0x9ECE, 0x7C6C, 0x72F8, 0x96E2, 0x7055, 0x7406, 0x674E, 0x88CF, /* 0xE0 */ + 0x9BC9, 0x79AE, 0x8389, 0x8354, 0x540F, 0x6817, 0x9E97, 0x53B2, /* 0xF0 */ + 0x52F5, 0x792B, 0x6B77, 0x5229, 0x5088, 0x4F8B, 0x4FD0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x75E2, 0x7ACB, 0x7C92, 0x701D, 0x96B8, 0x529B, 0x7483, /* 0xA0 */ + 0x54E9, 0x5006, 0x806F, 0x84EE, 0x9023, 0x942E, 0x5EC9, 0x6190, /* 0xA0 */ + 0x6F23, 0x7C3E, 0x6582, 0x81C9, 0x93C8, 0x6200, 0x7149, 0x7DF4, /* 0xB0 */ + 0x7CE7, 0x51C9, 0x6881, 0x7CB1, 0x826F, 0x5169, 0x8F1B, 0x91CF, /* 0xB0 */ + 0x667E, 0x4EAE, 0x8AD2, 0x64A9, 0x804A, 0x50DA, 0x7642, 0x71CE, /* 0xC0 */ + 0x5BE5, 0x907C, 0x6F66, 0x4E86, 0x6482, 0x9410, 0x5ED6, 0x6599, /* 0xC0 */ + 0x5217, 0x88C2, 0x70C8, 0x52A3, 0x7375, 0x7433, 0x6797, 0x78F7, /* 0xD0 */ + 0x9716, 0x81E8, 0x9130, 0x9C57, 0x6DCB, 0x51DB, 0x8CC3, 0x541D, /* 0xD0 */ + 0x62CE, 0x73B2, 0x83F1, 0x96F6, 0x9F61, 0x9234, 0x4F36, 0x7F9A, /* 0xE0 */ + 0x51CC, 0x9748, 0x9675, 0x5DBA, 0x9818, 0x53E6, 0x4EE4, 0x6E9C, /* 0xE0 */ + 0x7409, 0x69B4, 0x786B, 0x993E, 0x7559, 0x5289, 0x7624, 0x6D41, /* 0xF0 */ + 0x67F3, 0x516D, 0x9F8D, 0x807E, 0x56A8, 0x7C60, 0x7ABF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9686, 0x58DF, 0x650F, 0x96B4, 0x6A13, 0x5A41, 0x645F, /* 0xA0 */ + 0x7C0D, 0x6F0F, 0x964B, 0x8606, 0x76E7, 0x9871, 0x5EEC, 0x7210, /* 0xA0 */ + 0x64C4, 0x6EF7, 0x865C, 0x9B6F, 0x9E93, 0x788C, 0x9732, 0x8DEF, /* 0xB0 */ + 0x8CC2, 0x9E7F, 0x6F5E, 0x7984, 0x9332, 0x9678, 0x622E, 0x9A62, /* 0xB0 */ + 0x5415, 0x92C1, 0x4FA3, 0x65C5, 0x5C65, 0x5C62, 0x7E37, 0x616E, /* 0xC0 */ + 0x6C2F, 0x5F8B, 0x7387, 0x6FFE, 0x7DD1, 0x5DD2, 0x6523, 0x5B7F, /* 0xC0 */ + 0x7064, 0x5375, 0x4E82, 0x63A0, 0x7565, 0x6384, 0x8F2A, 0x502B, /* 0xD0 */ + 0x4F96, 0x6DEA, 0x7DB8, 0x8AD6, 0x863F, 0x87BA, 0x7F85, 0x908F, /* 0xD0 */ + 0x947C, 0x7C6E, 0x9A3E, 0x88F8, 0x843D, 0x6D1B, 0x99F1, 0x7D61, /* 0xE0 */ + 0x5ABD, 0x9EBB, 0x746A, 0x78BC, 0x879E, 0x99AC, 0x99E1, 0x561B, /* 0xE0 */ + 0x55CE, 0x57CB, 0x8CB7, 0x9EA5, 0x8CE3, 0x9081, 0x8109, 0x779E, /* 0xF0 */ + 0x9945, 0x883B, 0x6EFF, 0x8513, 0x66FC, 0x6162, 0x6F2B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B3E, 0x8292, 0x832B, 0x76F2, 0x6C13, 0x5FD9, 0x83BD, /* 0xA0 */ + 0x732B, 0x8305, 0x9328, 0x6BDB, 0x77DB, 0x925A, 0x536F, 0x8302, /* 0xA0 */ + 0x5192, 0x5E3D, 0x8C8C, 0x8CBF, 0x9EBD, 0x73AB, 0x679A, 0x6885, /* 0xB0 */ + 0x9176, 0x9709, 0x7164, 0x6CA1, 0x7709, 0x5A92, 0x9382, 0x6BCF, /* 0xB0 */ + 0x7F8E, 0x6627, 0x5BD0, 0x59B9, 0x5A9A, 0x9580, 0x60B6, 0x5011, /* 0xC0 */ + 0x840C, 0x8499, 0x6AAC, 0x76DF, 0x9333, 0x731B, 0x5922, 0x5B5F, /* 0xC0 */ + 0x772F, 0x919A, 0x9761, 0x7CDC, 0x8FF7, 0x8B0E, 0x5F4C, 0x7C73, /* 0xD0 */ + 0x79D8, 0x8993, 0x6CCC, 0x871C, 0x5BC6, 0x5E42, 0x68C9, 0x7720, /* 0xD0 */ + 0x7DBF, 0x5195, 0x514D, 0x52C9, 0x5A29, 0x7DEC, 0x9762, 0x82D7, /* 0xE0 */ + 0x63CF, 0x7784, 0x85D0, 0x79D2, 0x6E3A, 0x5EDF, 0x5999, 0x8511, /* 0xE0 */ + 0x6EC5, 0x6C11, 0x62BF, 0x76BF, 0x654F, 0x61AB, 0x95A9, 0x660E, /* 0xF0 */ + 0x879F, 0x9CF4, 0x9298, 0x540D, 0x547D, 0x8B2C, 0x6478 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6479, 0x8611, 0x6A21, 0x819C, 0x78E8, 0x6469, 0x9B54, /* 0xA0 */ + 0x62B9, 0x672B, 0x83AB, 0x58A8, 0x9ED8, 0x6CAB, 0x6F20, 0x5BDE, /* 0xA0 */ + 0x964C, 0x8B00, 0x725F, 0x67D0, 0x62C7, 0x7261, 0x755D, 0x59C6, /* 0xB0 */ + 0x6BCD, 0x5893, 0x66AE, 0x5E55, 0x52DF, 0x6155, 0x6728, 0x76EE, /* 0xB0 */ + 0x7766, 0x7267, 0x7A46, 0x62FF, 0x54EA, 0x5450, 0x9209, 0x90A3, /* 0xC0 */ + 0x5A1C, 0x7D0D, 0x6C16, 0x4E43, 0x5976, 0x8010, 0x5948, 0x5357, /* 0xC0 */ + 0x7537, 0x96E3, 0x56CA, 0x6493, 0x8166, 0x60F1, 0x9B27, 0x6DD6, /* 0xD0 */ + 0x5462, 0x9912, 0x5185, 0x5AE9, 0x80FD, 0x59AE, 0x9713, 0x502A, /* 0xD0 */ + 0x6CE5, 0x5C3C, 0x64EC, 0x4F60, 0x533F, 0x81A9, 0x9006, 0x6EBA, /* 0xE0 */ + 0x852B, 0x62C8, 0x5E74, 0x78BE, 0x6506, 0x637B, 0x5FF5, 0x5A18, /* 0xE0 */ + 0x91C0, 0x9CE5, 0x5C3F, 0x634F, 0x8076, 0x5B7D, 0x5699, 0x9477, /* 0xF0 */ + 0x93B3, 0x6D85, 0x60A8, 0x6AB8, 0x7370, 0x51DD, 0x5BE7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x64F0, 0x6FD8, 0x725B, 0x626D, 0x9215, 0x7D10, 0x81BF, /* 0xA0 */ + 0x6FC3, 0x8FB2, 0x5F04, 0x5974, 0x52AA, 0x6012, 0x5973, 0x6696, /* 0xA0 */ + 0x8650, 0x7627, 0x632A, 0x61E6, 0x7CEF, 0x8AFE, 0x54E6, 0x6B50, /* 0xB0 */ + 0x9DD7, 0x6BC6, 0x85D5, 0x5614, 0x5076, 0x6F1A, 0x556A, 0x8DB4, /* 0xB0 */ + 0x722C, 0x5E15, 0x6015, 0x7436, 0x62CD, 0x6392, 0x724C, 0x5F98, /* 0xC0 */ + 0x6E43, 0x6D3E, 0x6500, 0x6F58, 0x76E4, 0x78D0, 0x76FC, 0x7554, /* 0xC0 */ + 0x5224, 0x53DB, 0x4E53, 0x9F90, 0x65C1, 0x802A, 0x80D6, 0x629B, /* 0xD0 */ + 0x5486, 0x5228, 0x70AE, 0x888D, 0x8DD1, 0x6CE1, 0x5478, 0x80DA, /* 0xD0 */ + 0x57F9, 0x88F4, 0x8CE0, 0x966A, 0x914D, 0x4F69, 0x6C9B, 0x5674, /* 0xE0 */ + 0x76C6, 0x7830, 0x62A8, 0x70F9, 0x6F8E, 0x5F6D, 0x84EC, 0x68DA, /* 0xE0 */ + 0x787C, 0x7BF7, 0x81A8, 0x670B, 0x9D6C, 0x6367, 0x78B0, 0x576F, /* 0xF0 */ + 0x7812, 0x9739, 0x6279, 0x62AB, 0x5288, 0x7435, 0x6BD7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5564, 0x813E, 0x75B2, 0x76AE, 0x5339, 0x75DE, 0x50FB, /* 0xA0 */ + 0x5C41, 0x8B6C, 0x7BC7, 0x504F, 0x7247, 0x9A19, 0x98C4, 0x6F02, /* 0xA0 */ + 0x74E2, 0x7968, 0x6487, 0x77A5, 0x62FC, 0x983B, 0x8CA7, 0x54C1, /* 0xB0 */ + 0x8058, 0x4E52, 0x576A, 0x860B, 0x840D, 0x5E73, 0x6191, 0x74F6, /* 0xB0 */ + 0x8A55, 0x5C4F, 0x5761, 0x6F51, 0x9817, 0x5A46, 0x7834, 0x9B44, /* 0xC0 */ + 0x8FEB, 0x7C95, 0x5256, 0x64B2, 0x92EA, 0x50D5, 0x8386, 0x8461, /* 0xC0 */ + 0x83E9, 0x84B2, 0x57D4, 0x6A38, 0x5703, 0x666E, 0x6D66, 0x8B5C, /* 0xD0 */ + 0x66DD, 0x7011, 0x671F, 0x6B3A, 0x68F2, 0x621A, 0x59BB, 0x4E03, /* 0xD0 */ + 0x51C4, 0x6F06, 0x67D2, 0x6C8F, 0x5176, 0x68CB, 0x5947, 0x6B67, /* 0xE0 */ + 0x7566, 0x5D0E, 0x81CD, 0x9F4A, 0x65D7, 0x7948, 0x7941, 0x9A0E, /* 0xE0 */ + 0x8D77, 0x8C48, 0x4E5E, 0x4F01, 0x5553, 0x5951, 0x780C, 0x5668, /* 0xF0 */ + 0x6C23, 0x8FC4, 0x68C4, 0x6C7D, 0x6CE3, 0x8A16, 0x6390 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6070, 0x6D3D, 0x727D, 0x6266, 0x91FA, 0x925B, 0x5343, /* 0xA0 */ + 0x9077, 0x7C3D, 0x4EDF, 0x8B19, 0x4E7E, 0x9ED4, 0x9322, 0x9257, /* 0xA0 */ + 0x524D, 0x6F5B, 0x9063, 0x6DFA, 0x8B74, 0x5879, 0x5D4C, 0x6B20, /* 0xB0 */ + 0x6B49, 0x69CD, 0x55C6, 0x8154, 0x7F8C, 0x58BB, 0x8594, 0x5F3A, /* 0xB0 */ + 0x6436, 0x6A47, 0x936C, 0x6572, 0x6084, 0x6A4B, 0x77A7, 0x55AC, /* 0xC0 */ + 0x50D1, 0x5DE7, 0x9798, 0x64AC, 0x7FF9, 0x5CED, 0x4FCF, 0x7AC5, /* 0xC0 */ + 0x5207, 0x8304, 0x4E14, 0x602F, 0x7ACA, 0x6B3D, 0x4FB5, 0x89AA, /* 0xD0 */ + 0x79E6, 0x7434, 0x52E4, 0x82B9, 0x64D2, 0x79BD, 0x5BE2, 0x6C81, /* 0xD0 */ + 0x9752, 0x8F15, 0x6C2B, 0x50BE, 0x537F, 0x6E05, 0x64CE, 0x6674, /* 0xE0 */ + 0x6C30, 0x60C5, 0x9803, 0x8ACB, 0x6176, 0x74CA, 0x7AAE, 0x79CB, /* 0xE0 */ + 0x4E18, 0x90B1, 0x7403, 0x6C42, 0x56DA, 0x914B, 0x6CC5, 0x8DA8, /* 0xF0 */ + 0x5340, 0x86C6, 0x66F2, 0x8EC0, 0x5C48, 0x9A45, 0x6E20 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x53D6, 0x5A36, 0x9F72, 0x8DA3, 0x53BB, 0x5708, 0x9874, /* 0xA0 */ + 0x6B0A, 0x919B, 0x6CC9, 0x5168, 0x75CA, 0x62F3, 0x72AC, 0x5238, /* 0xA0 */ + 0x52F8, 0x7F3A, 0x7094, 0x7638, 0x5374, 0x9D72, 0x69B7, 0x78BA, /* 0xB0 */ + 0x96C0, 0x88D9, 0x7FA4, 0x7136, 0x71C3, 0x5189, 0x67D3, 0x74E4, /* 0xB0 */ + 0x58E4, 0x6518, 0x56B7, 0x8B93, 0x9952, 0x64FE, 0x7E5E, 0x60F9, /* 0xC0 */ + 0x71B1, 0x58EC, 0x4EC1, 0x4EBA, 0x5FCD, 0x97CC, 0x4EFB, 0x8A8D, /* 0xC0 */ + 0x5203, 0x598A, 0x7D09, 0x6254, 0x4ECD, 0x65E5, 0x620E, 0x8338, /* 0xD0 */ + 0x84C9, 0x69AE, 0x878D, 0x7194, 0x6EB6, 0x5BB9, 0x7D68, 0x5197, /* 0xD0 */ + 0x63C9, 0x67D4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5B7A, 0x5982, /* 0xE0 */ + 0x8FB1, 0x4E73, 0x6C5D, 0x5165, 0x8925, 0x8EDF, 0x962E, 0x854A, /* 0xE0 */ + 0x745E, 0x92ED, 0x958F, 0x6F64, 0x82E5, 0x5F31, 0x6492, 0x7051, /* 0xF0 */ + 0x85A9, 0x816E, 0x9C13, 0x585E, 0x8CFD, 0x4E09, 0x53C1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_C9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5098, 0x6563, 0x6851, 0x55D3, 0x55AA, 0x6414, 0x9A37, /* 0xA0 */ + 0x6383, 0x5AC2, 0x745F, 0x8272, 0x6F80, 0x68EE, 0x50E7, 0x838E, /* 0xA0 */ + 0x7802, 0x6BBA, 0x5239, 0x6C99, 0x7D17, 0x50BB, 0x5565, 0x715E, /* 0xB0 */ + 0x7BE9, 0x66EC, 0x73CA, 0x82EB, 0x6749, 0x5C71, 0x5220, 0x717D, /* 0xB0 */ + 0x886B, 0x9583, 0x965D, 0x64C5, 0x8D0D, 0x81B3, 0x5584, 0x6C55, /* 0xC0 */ + 0x6247, 0x7E55, 0x5892, 0x50B7, 0x5546, 0x8CDE, 0x664C, 0x4E0A, /* 0xC0 */ + 0x5C1A, 0x88F3, 0x68A2, 0x634E, 0x7A0D, 0x71D2, 0x828D, 0x52FA, /* 0xD0 */ + 0x97F6, 0x5C11, 0x54E8, 0x90B5, 0x7D39, 0x5962, 0x8CD2, 0x86C7, /* 0xD0 */ + 0x820C, 0x6368, 0x8D66, 0x651D, 0x5C04, 0x61FE, 0x6D89, 0x793E, /* 0xE0 */ + 0x8A2D, 0x7837, 0x7533, 0x547B, 0x4F38, 0x8EAB, 0x6DF1, 0x5A20, /* 0xE0 */ + 0x7D33, 0x795E, 0x6C88, 0x5BE9, 0x5B38, 0x751A, 0x814E, 0x614E, /* 0xF0 */ + 0x6EF2, 0x8072, 0x751F, 0x7525, 0x7272, 0x5347, 0x7E69 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7701, 0x76DB, 0x5269, 0x52DD, 0x8056, 0x5E2B, 0x5931, /* 0xA0 */ + 0x7345, 0x65BD, 0x6FD5, 0x8A69, 0x5C38, 0x8671, 0x5341, 0x77F3, /* 0xA0 */ + 0x62FE, 0x6642, 0x4EC0, 0x98DF, 0x8755, 0x5BE6, 0x8B58, 0x53F2, /* 0xB0 */ + 0x77E2, 0x4F7F, 0x5C4E, 0x99DB, 0x59CB, 0x5F0F, 0x793A, 0x58EB, /* 0xB0 */ + 0x4E16, 0x67FF, 0x4E8B, 0x62ED, 0x8A93, 0x901D, 0x52E2, 0x662F, /* 0xC0 */ + 0x55DC, 0x566C, 0x9069, 0x4ED5, 0x4F8D, 0x91CB, 0x98FE, 0x6C0F, /* 0xC0 */ + 0x5E02, 0x6043, 0x5BA4, 0x8996, 0x8A66, 0x6536, 0x624B, 0x9996, /* 0xD0 */ + 0x5B88, 0x58FD, 0x6388, 0x552E, 0x53D7, 0x7626, 0x7378, 0x852C, /* 0xD0 */ + 0x6A1E, 0x68B3, 0x6B8A, 0x6292, 0x8F38, 0x53D4, 0x8212, 0x6DD1, /* 0xE0 */ + 0x758F, 0x66F8, 0x8D16, 0x5B70, 0x719F, 0x85AF, 0x6691, 0x66D9, /* 0xE0 */ + 0x7F72, 0x8700, 0x9ECD, 0x9F20, 0x5C6C, 0x8853, 0x8FF0, 0x6A39, /* 0xF0 */ + 0x675F, 0x620D, 0x7AEA, 0x5885, 0x5EB6, 0x6578, 0x6F31 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6055, 0x5237, 0x800D, 0x6454, 0x8870, 0x7529, 0x5E25, /* 0xA0 */ + 0x6813, 0x62F4, 0x971C, 0x96D9, 0x723D, 0x8AB0, 0x6C34, 0x7761, /* 0xA0 */ + 0x7A0E, 0x542E, 0x77AC, 0x9806, 0x821C, 0x8AAC, 0x78A9, 0x6714, /* 0xB0 */ + 0x720D, 0x65AF, 0x6495, 0x5636, 0x601D, 0x79C1, 0x53F8, 0x7D72, /* 0xB0 */ + 0x6B7B, 0x8086, 0x5BFA, 0x55E3, 0x56DB, 0x4F3A, 0x4F3C, 0x98FC, /* 0xC0 */ + 0x5DF3, 0x9B06, 0x8073, 0x616B, 0x980C, 0x9001, 0x5B8B, 0x8A1F, /* 0xC0 */ + 0x8AA6, 0x641C, 0x8258, 0x64FB, 0x55FD, 0x8607, 0x9165, 0x4FD7, /* 0xD0 */ + 0x7D20, 0x901F, 0x7C9F, 0x50F3, 0x5851, 0x6EAF, 0x5BBF, 0x8A34, /* 0xD0 */ + 0x8085, 0x9178, 0x849C, 0x7B97, 0x96D6, 0x968B, 0x96A8, 0x7D8F, /* 0xE0 */ + 0x9AD3, 0x788E, 0x6B72, 0x7A57, 0x9042, 0x96A7, 0x795F, 0x5B6B, /* 0xE0 */ + 0x640D, 0x7B0B, 0x84D1, 0x68AD, 0x5506, 0x7E2E, 0x7463, 0x7D22, /* 0xF0 */ + 0x9396, 0x6240, 0x584C, 0x4ED6, 0x5B83, 0x5979, 0x5854 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x737A, 0x64BB, 0x8E4B, 0x8E0F, 0x80CE, 0x82D4, 0x62AC, /* 0xA0 */ + 0x81FA, 0x6CF0, 0x915E, 0x592A, 0x614B, 0x6C70, 0x574D, 0x6524, /* 0xA0 */ + 0x8CAA, 0x7671, 0x7058, 0x58C7, 0x6A80, 0x75F0, 0x6F6D, 0x8B5A, /* 0xB0 */ + 0x8AC7, 0x5766, 0x6BEF, 0x8892, 0x78B3, 0x63A2, 0x5606, 0x70AD, /* 0xB0 */ + 0x6E6F, 0x5858, 0x642A, 0x5802, 0x68E0, 0x819B, 0x5510, 0x7CD6, /* 0xC0 */ + 0x5018, 0x8EBA, 0x6DCC, 0x8D9F, 0x71D9, 0x638F, 0x6FE4, 0x6ED4, /* 0xC0 */ + 0x7E27, 0x8404, 0x6843, 0x9003, 0x6DD8, 0x9676, 0x8A0E, 0x5957, /* 0xD0 */ + 0x7279, 0x85E4, 0x9A30, 0x75BC, 0x8B04, 0x68AF, 0x5254, 0x8E22, /* 0xD0 */ + 0x92BB, 0x63D0, 0x984C, 0x8E44, 0x557C, 0x9AD4, 0x66FF, 0x568F, /* 0xE0 */ + 0x60D5, 0x6D95, 0x5243, 0x5C49, 0x5929, 0x6DFB, 0x586B, 0x7530, /* 0xE0 */ + 0x751C, 0x606C, 0x8214, 0x8146, 0x6311, 0x689D, 0x8FE2, 0x773A, /* 0xF0 */ + 0x8DF3, 0x8CBC, 0x9435, 0x5E16, 0x5EF3, 0x807D, 0x70F4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C40, 0x5EF7, 0x505C, 0x4EAD, 0x5EAD, 0x633A, 0x8247, /* 0xA0 */ + 0x901A, 0x6850, 0x916E, 0x77B3, 0x540C, 0x9285, 0x5F64, 0x7AE5, /* 0xA0 */ + 0x6876, 0x6345, 0x7B52, 0x7D71, 0x75DB, 0x5077, 0x6295, 0x982D, /* 0xB0 */ + 0x900F, 0x51F8, 0x79C3, 0x7A81, 0x5716, 0x5F92, 0x9014, 0x5857, /* 0xB0 */ + 0x5C60, 0x571F, 0x5410, 0x5154, 0x6E4D, 0x5718, 0x63A8, 0x983D, /* 0xC0 */ + 0x817F, 0x8715, 0x892A, 0x9000, 0x541E, 0x5C6F, 0x81C0, 0x62D6, /* 0xC0 */ + 0x6258, 0x8131, 0x9D15, 0x9640, 0x99B1, 0x99DD, 0x6A62, 0x59A5, /* 0xD0 */ + 0x62D3, 0x553E, 0x6316, 0x54C7, 0x86D9, 0x7AAA, 0x5A03, 0x74E6, /* 0xD0 */ + 0x896A, 0x6B6A, 0x5916, 0x8C4C, 0x5F4E, 0x7063, 0x73A9, 0x9811, /* 0xE0 */ + 0x4E38, 0x70F7, 0x5B8C, 0x7897, 0x633D, 0x665A, 0x7696, 0x60CB, /* 0xE0 */ + 0x5B9B, 0x5A49, 0x842C, 0x8155, 0x6C6A, 0x738B, 0x4EA1, 0x6789, /* 0xF0 */ + 0x7DB2, 0x5F80, 0x65FA, 0x671B, 0x5FD8, 0x5984, 0x5A01 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5DCD, 0x5FAE, 0x5371, 0x97CB, 0x9055, 0x6845, 0x570D, /* 0xA0 */ + 0x552F, 0x60DF, 0x7232, 0x6FF0, 0x7DAD, 0x8466, 0x840E, 0x59D4, /* 0xA0 */ + 0x5049, 0x50DE, 0x5C3E, 0x7DEF, 0x672A, 0x851A, 0x5473, 0x754F, /* 0xB0 */ + 0x80C3, 0x5582, 0x9B4F, 0x4F4D, 0x6E2D, 0x8B02, 0x5C09, 0x6170, /* 0xB0 */ + 0x885B, 0x761F, 0x6E29, 0x868A, 0x6587, 0x805E, 0x7D0B, 0x543B, /* 0xC0 */ + 0x7A69, 0x7D0A, 0x554F, 0x55E1, 0x7FC1, 0x74EE, 0x64BE, 0x8778, /* 0xC0 */ + 0x6E26, 0x7AA9, 0x6211, 0x65A1, 0x5367, 0x63E1, 0x6C83, 0x5DEB, /* 0xD0 */ + 0x55DA, 0x93A2, 0x70CF, 0x6C61, 0x8AA3, 0x5C4B, 0x7121, 0x856A, /* 0xD0 */ + 0x68A7, 0x543E, 0x5434, 0x6BCB, 0x6B66, 0x4E94, 0x6342, 0x5348, /* 0xE0 */ + 0x821E, 0x4F0D, 0x4FAE, 0x5862, 0x620A, 0x9727, 0x6664, 0x7269, /* 0xE0 */ + 0x52FF, 0x52D9, 0x609F, 0x8AA4, 0x6614, 0x7199, 0x6790, 0x897F, /* 0xF0 */ + 0x7852, 0x77FD, 0x6670, 0x563B, 0x5438, 0x932B, 0x72A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7A00, 0x606F, 0x5E0C, 0x6089, 0x819D, 0x5915, 0x60DC, /* 0xA0 */ + 0x7184, 0x70EF, 0x6EAA, 0x6C50, 0x7280, 0x6A84, 0x8972, 0x5E2D, /* 0xA0 */ + 0x7FD2, 0x5AB3, 0x559C, 0x9291, 0x6D17, 0x7CFB, 0x9699, 0x6232, /* 0xB0 */ + 0x7D30, 0x778E, 0x8766, 0x5323, 0x971E, 0x8F44, 0x6687, 0x5CFD, /* 0xB0 */ + 0x4FE0, 0x72F9, 0x4E0B, 0x53A6, 0x590F, 0x5687, 0x6380, 0x9341, /* 0xC0 */ + 0x5148, 0x4ED9, 0x9BAE, 0x7E96, 0x54B8, 0x8CE2, 0x929C, 0x8237, /* 0xC0 */ + 0x9591, 0x6D8E, 0x5F26, 0x5ACC, 0x986F, 0x96AA, 0x73FE, 0x737B, /* 0xD0 */ + 0x7E23, 0x817A, 0x9921, 0x7FA1, 0x61B2, 0x9677, 0x9650, 0x7DAB, /* 0xD0 */ + 0x76F8, 0x53A2, 0x9472, 0x9999, 0x7BB1, 0x8944, 0x6E58, 0x9109, /* 0xE0 */ + 0x7FD4, 0x7965, 0x8A73, 0x60F3, 0x97FF, 0x4EAB, 0x9805, 0x5DF7, /* 0xE0 */ + 0x6A61, 0x50CF, 0x5411, 0x8C61, 0x856D, 0x785D, 0x9704, 0x524A, /* 0xF0 */ + 0x54EE, 0x56C2, 0x92B7, 0x6D88, 0x5BB5, 0x6DC6, 0x66C9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5C0F, 0x5B5D, 0x6821, 0x8096, 0x562F, 0x7B11, 0x6548, /* 0xA0 */ + 0x6954, 0x4E9B, 0x6B47, 0x874E, 0x978B, 0x5354, 0x633E, 0x643A, /* 0xA0 */ + 0x90AA, 0x659C, 0x8105, 0x8AE7, 0x5BEB, 0x68B0, 0x5378, 0x87F9, /* 0xB0 */ + 0x61C8, 0x6CC4, 0x7009, 0x8B1D, 0x5C51, 0x85AA, 0x82AF, 0x92C5, /* 0xB0 */ + 0x6B23, 0x8F9B, 0x65B0, 0x5FFB, 0x5FC3, 0x4FE1, 0x91C1, 0x661F, /* 0xC0 */ + 0x8165, 0x7329, 0x60FA, 0x8208, 0x5211, 0x578B, 0x5F62, 0x90A2, /* 0xC0 */ + 0x884C, 0x9192, 0x5E78, 0x674F, 0x6027, 0x59D3, 0x5144, 0x51F6, /* 0xD0 */ + 0x80F8, 0x5308, 0x6C79, 0x96C4, 0x718A, 0x4F11, 0x4FEE, 0x7F9E, /* 0xD0 */ + 0x673D, 0x55C5, 0x92B9, 0x79C0, 0x8896, 0x7D89, 0x589F, 0x620C, /* 0xE0 */ + 0x9700, 0x865A, 0x5618, 0x9808, 0x5F90, 0x8A31, 0x84C4, 0x9157, /* 0xE0 */ + 0x53D9, 0x65ED, 0x5E8F, 0x755C, 0x6064, 0x7D6E, 0x5A7F, 0x7DD2, /* 0xF0 */ + 0x7E8C, 0x8ED2, 0x55A7, 0x5BA3, 0x61F8, 0x65CB, 0x7384 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9078, 0x766C, 0x7729, 0x7D62, 0x9774, 0x859B, 0x5B78, /* 0xA0 */ + 0x7A74, 0x96EA, 0x8840, 0x52DB, 0x718F, 0x5FAA, 0x65EC, 0x8A62, /* 0xA0 */ + 0x5C0B, 0x99B4, 0x5DE1, 0x6B89, 0x6C5B, 0x8A13, 0x8A0A, 0x905C, /* 0xB0 */ + 0x8FC5, 0x58D3, 0x62BC, 0x9D09, 0x9D28, 0x5440, 0x4E2B, 0x82BD, /* 0xB0 */ + 0x7259, 0x869C, 0x5D16, 0x8859, 0x6DAF, 0x96C5, 0x555E, 0x4E9E, /* 0xC0 */ + 0x8A1D, 0x7109, 0x54BD, 0x95B9, 0x70DF, 0x6DF9, 0x9E7D, 0x56B4, /* 0xC0 */ + 0x7814, 0x8712, 0x5CA9, 0x5EF6, 0x8A00, 0x9854, 0x95BB, 0x708E, /* 0xD0 */ + 0x6CBF, 0x5944, 0x63A9, 0x773C, 0x884D, 0x6F14, 0x8277, 0x5830, /* 0xD0 */ + 0x71D5, 0x53AD, 0x786F, 0x96C1, 0x5501, 0x5F66, 0x7130, 0x5BB4, /* 0xE0 */ + 0x8AFA, 0x9A57, 0x6B83, 0x592E, 0x9D26, 0x79E7, 0x694A, 0x63DA, /* 0xE0 */ + 0x4F6F, 0x760D, 0x7F8A, 0x6D0B, 0x967D, 0x6C27, 0x4EF0, 0x7662, /* 0xF0 */ + 0x990A, 0x6A23, 0x6F3E, 0x9080, 0x8170, 0x5996, 0x7476 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6447, 0x582F, 0x9065, 0x7A91, 0x8B21, 0x59DA, 0x54AC, /* 0xA0 */ + 0x8200, 0x85E5, 0x8981, 0x8000, 0x6930, 0x564E, 0x8036, 0x723A, /* 0xA0 */ + 0x91CE, 0x51B6, 0x4E5F, 0x9801, 0x6396, 0x696D, 0x8449, 0x66F3, /* 0xB0 */ + 0x814B, 0x591C, 0x6DB2, 0x4E00, 0x58F9, 0x91AB, 0x63D6, 0x92A5, /* 0xB0 */ + 0x4F9D, 0x4F0A, 0x8863, 0x9824, 0x5937, 0x907A, 0x79FB, 0x5100, /* 0xC0 */ + 0x80F0, 0x7591, 0x6C82, 0x5B9C, 0x59E8, 0x5F5D, 0x6905, 0x87FB, /* 0xC0 */ + 0x501A, 0x5DF2, 0x4E59, 0x77E3, 0x4EE5, 0x85DD, 0x6291, 0x6613, /* 0xD0 */ + 0x9091, 0x5C79, 0x5104, 0x5F79, 0x81C6, 0x9038, 0x8084, 0x75AB, /* 0xD0 */ + 0x4EA6, 0x88D4, 0x610F, 0x6BC5, 0x61B6, 0x7FA9, 0x76CA, 0x6EA2, /* 0xE0 */ + 0x8A63, 0x8B70, 0x8ABC, 0x8B6F, 0x5F02, 0x7FFC, 0x7FCC, 0x7E79, /* 0xE0 */ + 0x8335, 0x852D, 0x56E0, 0x6BB7, 0x97F3, 0x9670, 0x59FB, 0x541F, /* 0xF0 */ + 0x9280, 0x6DEB, 0x5BC5, 0x98F2, 0x5C39, 0x5F15, 0x96B1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5370, 0x82F1, 0x6AFB, 0x5B30, 0x9DF9, 0x61C9, 0x7E93, /* 0xA0 */ + 0x7469, 0x87A2, 0x71DF, 0x7192, 0x8805, 0x8FCE, 0x8D0F, 0x76C8, /* 0xA0 */ + 0x5F71, 0x7A4E, 0x786C, 0x6620, 0x55B2, 0x64C1, 0x50AD, 0x81C3, /* 0xB0 */ + 0x7670, 0x5EB8, 0x96CD, 0x8E34, 0x86F9, 0x548F, 0x6CF3, 0x6D8C, /* 0xB0 */ + 0x6C38, 0x607F, 0x52C7, 0x7528, 0x5E7D, 0x512A, 0x60A0, 0x6182, /* 0xC0 */ + 0x5C24, 0x7531, 0x90F5, 0x923E, 0x7336, 0x6CB9, 0x6E38, 0x9149, /* 0xC0 */ + 0x6709, 0x53CB, 0x53F3, 0x4F51, 0x91C9, 0x8A98, 0x53C8, 0x5E7C, /* 0xD0 */ + 0x8FC2, 0x6DE4, 0x4E8E, 0x76C2, 0x6986, 0x865E, 0x611A, 0x8F3F, /* 0xD0 */ + 0x9918, 0x4FDE, 0x903E, 0x9B5A, 0x6109, 0x6E1D, 0x6F01, 0x9685, /* 0xE0 */ + 0x4E88, 0x5A31, 0x96E8, 0x8207, 0x5DBC, 0x79B9, 0x5B87, 0x8A9E, /* 0xE0 */ + 0x7FBD, 0x7389, 0x57DF, 0x828B, 0x9B31, 0x5401, 0x9047, 0x55BB, /* 0xF0 */ + 0x5CEA, 0x5FA1, 0x6108, 0x6B32, 0x7344, 0x80B2, 0x8B7D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6D74, 0x5BD3, 0x88D5, 0x9810, 0x8C6B, 0x99AD, 0x9D1B, /* 0xA0 */ + 0x6DF5, 0x51A4, 0x5143, 0x57A3, 0x8881, 0x539F, 0x63F4, 0x8F45, /* 0xA0 */ + 0x5712, 0x54E1, 0x5713, 0x733F, 0x6E90, 0x7DE3, 0x9060, 0x82D1, /* 0xB0 */ + 0x9858, 0x6028, 0x9662, 0x66F0, 0x7D04, 0x8D8A, 0x8E8D, 0x9470, /* 0xB0 */ + 0x5CB3, 0x7CA4, 0x6708, 0x60A6, 0x95B2, 0x8018, 0x96F2, 0x9116, /* 0xC0 */ + 0x5300, 0x9695, 0x5141, 0x904B, 0x85F4, 0x9196, 0x6688, 0x97F5, /* 0xC0 */ + 0x5B55, 0x531D, 0x7838, 0x96DC, 0x683D, 0x54C9, 0x707E, 0x5BB0, /* 0xD0 */ + 0x8F09, 0x518D, 0x5728, 0x54B1, 0x6522, 0x66AB, 0x8D0A, 0x8D1C, /* 0xD0 */ + 0x81DF, 0x846C, 0x906D, 0x7CDF, 0x947F, 0x85FB, 0x68D7, 0x65E9, /* 0xE0 */ + 0x6FA1, 0x86A4, 0x8E81, 0x566A, 0x9020, 0x7682, 0x7AC8, 0x71E5, /* 0xE0 */ + 0x8CAC, 0x64C7, 0x5247, 0x6FA4, 0x8CCA, 0x600E, 0x589E, 0x618E, /* 0xF0 */ + 0x66FE, 0x8D08, 0x624E, 0x55B3, 0x6E23, 0x672D, 0x8ECB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9358, 0x9598, 0x7728, 0x6805, 0x69A8, 0x548B, 0x4E4D, /* 0xA0 */ + 0x70B8, 0x8A50, 0x6458, 0x9F4B, 0x5B85, 0x7A84, 0x50B5, 0x5BE8, /* 0xA0 */ + 0x77BB, 0x6C08, 0x8A79, 0x7C98, 0x6CBE, 0x76DE, 0x65AC, 0x8F3E, /* 0xB0 */ + 0x5D84, 0x5C55, 0x8638, 0x68E7, 0x5360, 0x6230, 0x7AD9, 0x6E5B, /* 0xB0 */ + 0x7DBB, 0x6A1F, 0x7AE0, 0x5F70, 0x6F33, 0x5F35, 0x638C, 0x6F32, /* 0xC0 */ + 0x6756, 0x4E08, 0x5E33, 0x8CEC, 0x4ED7, 0x8139, 0x7634, 0x969C, /* 0xC0 */ + 0x62DB, 0x662D, 0x627E, 0x6CBC, 0x8D99, 0x7167, 0x7F69, 0x5146, /* 0xD0 */ + 0x8087, 0x53EC, 0x906E, 0x6298, 0x54F2, 0x87C4, 0x8F4D, 0x8005, /* 0xD0 */ + 0x937A, 0x8517, 0x9019, 0x6D59, 0x73CD, 0x659F, 0x771F, 0x7504, /* 0xE0 */ + 0x7827, 0x81FB, 0x8C9E, 0x91DD, 0x5075, 0x6795, 0x75B9, 0x8A3A, /* 0xE0 */ + 0x9707, 0x632F, 0x93AE, 0x9663, 0x84B8, 0x6399, 0x775C, 0x5F81, /* 0xF0 */ + 0x7319, 0x722D, 0x6014, 0x6574, 0x62EF, 0x6B63, 0x653F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5E40, 0x7665, 0x912D, 0x8B49, 0x829D, 0x679D, 0x652F, /* 0xA0 */ + 0x5431, 0x8718, 0x77E5, 0x80A2, 0x8102, 0x6C41, 0x4E4B, 0x7E54, /* 0xA0 */ + 0x8077, 0x76F4, 0x690D, 0x6B96, 0x57F7, 0x503C, 0x4F84, 0x5740, /* 0xB0 */ + 0x6307, 0x6B62, 0x8DBE, 0x8879, 0x65E8, 0x7D19, 0x5FD7, 0x646F, /* 0xB0 */ + 0x64F2, 0x81F3, 0x81F4, 0x7F6E, 0x5E5F, 0x5CD9, 0x5236, 0x667A, /* 0xC0 */ + 0x79E9, 0x7A1A, 0x8CEA, 0x7099, 0x75D4, 0x6EEF, 0x6CBB, 0x7A92, /* 0xC0 */ + 0x4E2D, 0x76C5, 0x5FE0, 0x9418, 0x8877, 0x7D42, 0x7A2E, 0x816B, /* 0xD0 */ + 0x91CD, 0x4EF2, 0x8846, 0x821F, 0x5468, 0x5DDE, 0x6D32, 0x8B05, /* 0xD0 */ + 0x7CA5, 0x8EF8, 0x8098, 0x5E1A, 0x5492, 0x76BA, 0x5B99, 0x665D, /* 0xE0 */ + 0x9A5F, 0x73E0, 0x682A, 0x86DB, 0x6731, 0x732A, 0x8AF8, 0x8A85, /* 0xE0 */ + 0x9010, 0x7AF9, 0x71ED, 0x716E, 0x62C4, 0x77DA, 0x56D1, 0x4E3B, /* 0xF0 */ + 0x8457, 0x67F1, 0x52A9, 0x86C0, 0x8CAF, 0x9444, 0x7BC9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F4F, 0x6CE8, 0x795D, 0x99D0, 0x6293, 0x722A, 0x62FD, /* 0xA0 */ + 0x5C08, 0x78DA, 0x8F49, 0x64B0, 0x8CFA, 0x7BC6, 0x6A01, 0x838A, /* 0xA0 */ + 0x88DD, 0x599D, 0x649E, 0x58EF, 0x72C0, 0x690E, 0x9310, 0x8FFD, /* 0xB0 */ + 0x8D05, 0x589C, 0x7DB4, 0x8AC4, 0x6E96, 0x6349, 0x62D9, 0x5353, /* 0xB0 */ + 0x684C, 0x7422, 0x8301, 0x914C, 0x5544, 0x7740, 0x707C, 0x6FC1, /* 0xC0 */ + 0x5179, 0x54A8, 0x8CC7, 0x59FF, 0x6ECB, 0x6DC4, 0x5B5C, 0x7D2B, /* 0xC0 */ + 0x4ED4, 0x7C7D, 0x6ED3, 0x5B50, 0x81EA, 0x6F2C, 0x5B57, 0x9B03, /* 0xD0 */ + 0x68D5, 0x8E2A, 0x5B97, 0x7D9C, 0x7E3D, 0x7E31, 0x9112, 0x8D70, /* 0xD0 */ + 0x594F, 0x63CD, 0x79DF, 0x8DB3, 0x5352, 0x65CF, 0x7956, 0x8A5B, /* 0xE0 */ + 0x963B, 0x7D44, 0x947D, 0x7E82, 0x5634, 0x9189, 0x6700, 0x7F6A, /* 0xE0 */ + 0x5C0A, 0x9075, 0x6628, 0x5DE6, 0x4F50, 0x67DE, 0x505A, 0x4F5C, /* 0xF0 */ + 0x5750, 0x5EA7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E8D, 0x4E0C, 0x5140, 0x4E10, 0x5EFF, 0x5345, 0x4E15, /* 0xA0 */ + 0x4E98, 0x4E1E, 0x9B32, 0x5B6C, 0x5669, 0x4E28, 0x79BA, 0x4E3F, /* 0xA0 */ + 0x5315, 0x4E47, 0x592D, 0x723B, 0x536E, 0x6C10, 0x56DF, 0x80E4, /* 0xB0 */ + 0x9997, 0x6BD3, 0x777E, 0x9F17, 0x4E36, 0x4E9F, 0x9F10, 0x4E5C, /* 0xB0 */ + 0x4E69, 0x4E93, 0x8288, 0x5B5B, 0x55C7, 0x560F, 0x4EC4, 0x5399, /* 0xC0 */ + 0x539D, 0x53B4, 0x53A5, 0x53AE, 0x9768, 0x8D0B, 0x531A, 0x53F5, /* 0xC0 */ + 0x532D, 0x5331, 0x533E, 0x8CFE, 0x5366, 0x5363, 0x5202, 0x5208, /* 0xD0 */ + 0x520E, 0x5244, 0x5233, 0x528C, 0x5274, 0x524C, 0x525E, 0x5261, /* 0xD0 */ + 0x525C, 0x84AF, 0x527D, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, /* 0xE0 */ + 0x7F54, 0x4EBB, 0x4EC3, 0x4EC9, 0x4EC2, 0x4EE8, 0x4EE1, 0x4EEB, /* 0xE0 */ + 0x4EDE, 0x50B4, 0x4EF3, 0x4F22, 0x4F64, 0x4EF5, 0x5000, 0x5096, /* 0xF0 */ + 0x4F09, 0x4F47, 0x4F5E, 0x4F67, 0x6538, 0x4F5A, 0x4F5D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_D9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F5F, 0x4F57, 0x4F32, 0x4F3D, 0x4F76, 0x4F74, 0x4F91, /* 0xA0 */ + 0x4F89, 0x4F83, 0x4F8F, 0x4F7E, 0x4F7B, 0x5115, 0x4F7C, 0x5102, /* 0xA0 */ + 0x4F94, 0x5114, 0x513C, 0x5137, 0x4FC5, 0x4FDA, 0x4FE3, 0x4FDC, /* 0xB0 */ + 0x4FD1, 0x4FDF, 0x4FF8, 0x5029, 0x504C, 0x4FF3, 0x502C, 0x500F, /* 0xB0 */ + 0x502E, 0x502D, 0x4FFE, 0x501C, 0x500C, 0x5025, 0x5028, 0x50E8, /* 0xC0 */ + 0x5043, 0x5055, 0x5048, 0x504E, 0x506C, 0x50C2, 0x513B, 0x5110, /* 0xC0 */ + 0x513A, 0x50BA, 0x50D6, 0x5106, 0x50ED, 0x50EC, 0x50E6, 0x50EE, /* 0xD0 */ + 0x5107, 0x510B, 0x4EDD, 0x6C3D, 0x4F58, 0x50C9, 0x4FCE, 0x9FA0, /* 0xD0 */ + 0x6C46, 0x7CF4, 0x516E, 0x5DFD, 0x9ECC, 0x9998, 0x56C5, 0x5914, /* 0xE0 */ + 0x52F9, 0x530D, 0x8A07, 0x5310, 0x9CEC, 0x5919, 0x5155, 0x4EA0, /* 0xE0 */ + 0x5156, 0x4EB3, 0x886E, 0x88A4, 0x893B, 0x81E0, 0x88D2, 0x7980, /* 0xF0 */ + 0x5B34, 0x8803, 0x7FB8, 0x51AB, 0x51B1, 0x51BD, 0x51BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_DA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x51C7, 0x5196, 0x51A2, 0x51A5, 0x8A01, 0x8A10, 0x8A0C, /* 0xA0 */ + 0x8A15, 0x8B33, 0x8A4E, 0x8A25, 0x8A41, 0x8A36, 0x8A46, 0x8A54, /* 0xA0 */ + 0x8A58, 0x8A52, 0x8A86, 0x8A84, 0x8A7F, 0x8A70, 0x8A7C, 0x8A75, /* 0xB0 */ + 0x8A6C, 0x8A6E, 0x8ACD, 0x8AE2, 0x8A61, 0x8A9A, 0x8AA5, 0x8A91, /* 0xB0 */ + 0x8A92, 0x8ACF, 0x8AD1, 0x8AC9, 0x8ADB, 0x8AD7, 0x8AC2, 0x8AB6, /* 0xC0 */ + 0x8AF6, 0x8AEB, 0x8B14, 0x8B01, 0x8AE4, 0x8AED, 0x8AFC, 0x8AF3, /* 0xC0 */ + 0x8AE6, 0x8AEE, 0x8ADE, 0x8B28, 0x8B9C, 0x8B16, 0x8B1A, 0x8B10, /* 0xD0 */ + 0x8B2B, 0x8B2D, 0x8B56, 0x8B59, 0x8B4E, 0x8B9E, 0x8B6B, 0x8B96, /* 0xD0 */ + 0x5369, 0x537A, 0x961D, 0x9622, 0x9621, 0x9631, 0x962A, 0x963D, /* 0xE0 */ + 0x963C, 0x9642, 0x9658, 0x9654, 0x965F, 0x9689, 0x966C, 0x9672, /* 0xE0 */ + 0x9674, 0x9688, 0x968D, 0x9697, 0x96B0, 0x9097, 0x909B, 0x913A, /* 0xF0 */ + 0x9099, 0x9114, 0x90A1, 0x90B4, 0x90B3, 0x90B6, 0x9134 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_DB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x90B8, 0x90B0, 0x90DF, 0x90C5, 0x90BE, 0x9136, 0x90C4, /* 0xA0 */ + 0x90C7, 0x9106, 0x9148, 0x90E2, 0x90DC, 0x90D7, 0x90DB, 0x90EB, /* 0xA0 */ + 0x90EF, 0x90FE, 0x9104, 0x9122, 0x911E, 0x9123, 0x9131, 0x912F, /* 0xB0 */ + 0x9139, 0x9143, 0x9146, 0x82BB, 0x5950, 0x52F1, 0x52AC, 0x52AD, /* 0xB0 */ + 0x52BE, 0x54FF, 0x52D0, 0x52D6, 0x52F0, 0x53DF, 0x71EE, 0x77CD, /* 0xC0 */ + 0x5EF4, 0x51F5, 0x51FC, 0x9B2F, 0x53B6, 0x5F01, 0x755A, 0x5DF0, /* 0xC0 */ + 0x574C, 0x580A, 0x57A1, 0x587E, 0x58BC, 0x58C5, 0x58D1, 0x5729, /* 0xD0 */ + 0x572C, 0x572A, 0x5733, 0x58D9, 0x572E, 0x572F, 0x58E2, 0x573B, /* 0xD0 */ + 0x5742, 0x5769, 0x58E0, 0x576B, 0x58DA, 0x577C, 0x577B, 0x5768, /* 0xE0 */ + 0x576D, 0x5776, 0x5773, 0x57E1, 0x57A4, 0x578C, 0x584F, 0x57CF, /* 0xE0 */ + 0x57A7, 0x5816, 0x5793, 0x57A0, 0x57D5, 0x5852, 0x581D, 0x5864, /* 0xF0 */ + 0x57D2, 0x57B8, 0x57F4, 0x57EF, 0x57F8, 0x57E4, 0x57DD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_DC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x580B, 0x580D, 0x57FD, 0x57ED, 0x5800, 0x581E, 0x5819, /* 0xA0 */ + 0x5844, 0x5820, 0x5865, 0x586C, 0x5881, 0x5889, 0x589A, 0x5880, /* 0xA0 */ + 0x99A8, 0x9F19, 0x61FF, 0x8279, 0x827D, 0x827F, 0x828F, 0x828A, /* 0xB0 */ + 0x82A8, 0x8284, 0x828E, 0x8291, 0x858C, 0x8299, 0x82AB, 0x8553, /* 0xB0 */ + 0x82BE, 0x82B0, 0x85F6, 0x82CA, 0x82E3, 0x8298, 0x82B7, 0x82AE, /* 0xC0 */ + 0x83A7, 0x8407, 0x84EF, 0x82A9, 0x82B4, 0x82A1, 0x82AA, 0x829F, /* 0xC0 */ + 0x82C4, 0x82E7, 0x82A4, 0x82E1, 0x8309, 0x82F7, 0x82E4, 0x8622, /* 0xD0 */ + 0x8307, 0x82DC, 0x82F4, 0x82D2, 0x82D8, 0x830C, 0x82FB, 0x82D3, /* 0xD0 */ + 0x8526, 0x831A, 0x8306, 0x584B, 0x7162, 0x82E0, 0x82D5, 0x831C, /* 0xE0 */ + 0x8351, 0x8558, 0x84FD, 0x8308, 0x8392, 0x833C, 0x8334, 0x8331, /* 0xE0 */ + 0x839B, 0x854E, 0x832F, 0x834F, 0x8347, 0x8343, 0x8588, 0x8340, /* 0xF0 */ + 0x8317, 0x85BA, 0x832D, 0x833A, 0x8333, 0x7296, 0x6ECE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_DD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8541, 0x831B, 0x85CE, 0x8552, 0x84C0, 0x8452, 0x8464, /* 0xA0 */ + 0x83B0, 0x8378, 0x8494, 0x8435, 0x83A0, 0x83AA, 0x8393, 0x839C, /* 0xA0 */ + 0x8385, 0x837C, 0x859F, 0x83A9, 0x837D, 0x8555, 0x837B, 0x8398, /* 0xB0 */ + 0x839E, 0x83A8, 0x9DAF, 0x8493, 0x83C1, 0x8401, 0x83E5, 0x83D8, /* 0xB0 */ + 0x5807, 0x8418, 0x840B, 0x83DD, 0x83FD, 0x83D6, 0x841C, 0x8438, /* 0xC0 */ + 0x8411, 0x8406, 0x83D4, 0x83DF, 0x840F, 0x8403, 0x83F8, 0x83F9, /* 0xC0 */ + 0x83EA, 0x83C5, 0x83C0, 0x7E08, 0x83F0, 0x83E1, 0x845C, 0x8451, /* 0xD0 */ + 0x845A, 0x8459, 0x8473, 0x8546, 0x8488, 0x847A, 0x8562, 0x8478, /* 0xD0 */ + 0x843C, 0x8446, 0x8469, 0x8476, 0x851E, 0x848E, 0x8431, 0x846D, /* 0xE0 */ + 0x84C1, 0x84CD, 0x84D0, 0x9A40, 0x84BD, 0x84D3, 0x84CA, 0x84BF, /* 0xE0 */ + 0x84BA, 0x863A, 0x84A1, 0x84B9, 0x84B4, 0x8497, 0x93A3, 0x8577, /* 0xF0 */ + 0x850C, 0x750D, 0x8538, 0x84F0, 0x861E, 0x851F, 0x85FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_DE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8556, 0x853B, 0x84FF, 0x84FC, 0x8559, 0x8548, 0x8568, /* 0xA0 */ + 0x8564, 0x855E, 0x857A, 0x77A2, 0x8543, 0x8604, 0x857B, 0x85A4, /* 0xA0 */ + 0x85A8, 0x8587, 0x858F, 0x8579, 0x85EA, 0x859C, 0x8585, 0x85B9, /* 0xB0 */ + 0x85B7, 0x85B0, 0x861A, 0x85C1, 0x85DC, 0x85FF, 0x8627, 0x8605, /* 0xB0 */ + 0x8629, 0x8616, 0x863C, 0x5EFE, 0x5F08, 0x593C, 0x5969, 0x8037, /* 0xC0 */ + 0x5955, 0x595A, 0x5958, 0x530F, 0x5C22, 0x5C25, 0x5C2C, 0x5C37, /* 0xC0 */ + 0x624C, 0x636B, 0x6476, 0x62BB, 0x62CA, 0x62DA, 0x62D7, 0x62EE, /* 0xD0 */ + 0x649F, 0x62F6, 0x6339, 0x634B, 0x6343, 0x63AD, 0x63F6, 0x6371, /* 0xD0 */ + 0x637A, 0x638E, 0x6451, 0x636D, 0x63AC, 0x638A, 0x6369, 0x63AE, /* 0xE0 */ + 0x645C, 0x63F2, 0x63F8, 0x63E0, 0x64B3, 0x63C4, 0x63DE, 0x63CE, /* 0xE0 */ + 0x6452, 0x63C6, 0x63BE, 0x6504, 0x6441, 0x640B, 0x641B, 0x6420, /* 0xF0 */ + 0x640C, 0x6426, 0x6421, 0x645E, 0x6516, 0x646D, 0x6496 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_DF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x647A, 0x64F7, 0x64FC, 0x6499, 0x651B, 0x64C0, 0x64D0, /* 0xA0 */ + 0x64D7, 0x64E4, 0x64E2, 0x6509, 0x6525, 0x652E, 0x5F0B, 0x5FD2, /* 0xA0 */ + 0x7519, 0x5F11, 0x535F, 0x53F1, 0x5630, 0x53E9, 0x53E8, 0x53FB, /* 0xB0 */ + 0x5412, 0x5416, 0x5406, 0x544B, 0x5638, 0x56C8, 0x5454, 0x56A6, /* 0xB0 */ + 0x5443, 0x5421, 0x5504, 0x54BC, 0x5423, 0x5432, 0x5482, 0x5494, /* 0xC0 */ + 0x5477, 0x5471, 0x5464, 0x549A, 0x5680, 0x5484, 0x5476, 0x5466, /* 0xC0 */ + 0x565D, 0x54D0, 0x54AD, 0x54C2, 0x54B4, 0x5660, 0x54A7, 0x54A6, /* 0xD0 */ + 0x5635, 0x55F6, 0x5472, 0x54A3, 0x5666, 0x54BB, 0x54BF, 0x54CC, /* 0xD0 */ + 0x5672, 0x54DA, 0x568C, 0x54A9, 0x54AA, 0x54A4, 0x5665, 0x54CF, /* 0xE0 */ + 0x54DE, 0x561C, 0x54E7, 0x562E, 0x54FD, 0x5514, 0x54F3, 0x55E9, /* 0xE0 */ + 0x5523, 0x550F, 0x5511, 0x5527, 0x552A, 0x5616, 0x558F, 0x55B5, /* 0xF0 */ + 0x5549, 0x56C0, 0x5541, 0x5555, 0x553F, 0x5550, 0x553C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, /* 0xA0 */ + 0x555C, 0x558B, 0x55D2, 0x5583, 0x55B1, 0x55B9, 0x5588, 0x5581, /* 0xA0 */ + 0x559F, 0x557E, 0x55D6, 0x5591, 0x557B, 0x55DF, 0x560D, 0x56B3, /* 0xB0 */ + 0x5594, 0x5599, 0x55EA, 0x55F7, 0x55C9, 0x561F, 0x55D1, 0x56C1, /* 0xB0 */ + 0x55EC, 0x55D4, 0x55E6, 0x55DD, 0x55C4, 0x55EF, 0x55E5, 0x55F2, /* 0xC0 */ + 0x566F, 0x55CC, 0x55CD, 0x55E8, 0x55F5, 0x55E4, 0x8F61, 0x561E, /* 0xC0 */ + 0x5608, 0x560C, 0x5601, 0x56B6, 0x5623, 0x55FE, 0x5600, 0x5627, /* 0xD0 */ + 0x562D, 0x5658, 0x5639, 0x5657, 0x562C, 0x564D, 0x5662, 0x5659, /* 0xD0 */ + 0x5695, 0x564C, 0x5654, 0x5686, 0x5664, 0x5671, 0x566B, 0x567B, /* 0xE0 */ + 0x567C, 0x5685, 0x5693, 0x56AF, 0x56D4, 0x56D7, 0x56DD, 0x56E1, /* 0xE0 */ + 0x5707, 0x56EB, 0x56F9, 0x56FF, 0x5704, 0x570A, 0x5709, 0x571C, /* 0xF0 */ + 0x5E43, 0x5E19, 0x5E14, 0x5E11, 0x5E6C, 0x5E58, 0x5E57 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5E37, 0x5E44, 0x5E54, 0x5E5B, 0x5E5E, 0x5E61, 0x5C8C, /* 0xA0 */ + 0x5C7A, 0x5C8D, 0x5C90, 0x5D87, 0x5C88, 0x5CF4, 0x5C99, 0x5C91, /* 0xA0 */ + 0x5D50, 0x5C9C, 0x5CB5, 0x5CA2, 0x5D2C, 0x5CAC, 0x5CAB, 0x5CB1, /* 0xB0 */ + 0x5CA3, 0x5CC1, 0x5CB7, 0x5DA7, 0x5CD2, 0x5DA0, 0x5CCB, 0x5D22, /* 0xB0 */ + 0x5D97, 0x5D0D, 0x5D27, 0x5D26, 0x5D2E, 0x5D24, 0x5D1E, 0x5D06, /* 0xC0 */ + 0x5D1B, 0x5DB8, 0x5D3E, 0x5D34, 0x5D3D, 0x5D6C, 0x5D5B, 0x5D6F, /* 0xC0 */ + 0x5D81, 0x5D6B, 0x5D4B, 0x5D4A, 0x5D69, 0x5D74, 0x5D82, 0x5D99, /* 0xD0 */ + 0x5D9D, 0x8C73, 0x5DB7, 0x5DD4, 0x5F73, 0x5F77, 0x5F82, 0x5F87, /* 0xD0 */ + 0x5F89, 0x540E, 0x5FA0, 0x5F99, 0x5F9C, 0x5FA8, 0x5FAD, 0x5FB5, /* 0xE0 */ + 0x5FBC, 0x8862, 0x5F61, 0x72AD, 0x72B0, 0x72B4, 0x7377, 0x7341, /* 0xE0 */ + 0x72C3, 0x72C1, 0x72CE, 0x72CD, 0x72D2, 0x72E8, 0x736A, 0x72E9, /* 0xF0 */ + 0x733B, 0x72F4, 0x72F7, 0x7301, 0x72F3, 0x736B, 0x72FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x72FB, 0x7317, 0x7313, 0x7380, 0x730A, 0x731E, 0x731D, /* 0xA0 */ + 0x737C, 0x7322, 0x7339, 0x7325, 0x732C, 0x7338, 0x7331, 0x7350, /* 0xA0 */ + 0x734D, 0x7357, 0x7360, 0x736C, 0x736F, 0x737E, 0x821B, 0x5925, /* 0xB0 */ + 0x98E7, 0x5924, 0x5902, 0x98E0, 0x9933, 0x98E9, 0x993C, 0x98EA, /* 0xB0 */ + 0x98EB, 0x98ED, 0x98F4, 0x9909, 0x9911, 0x4F59, 0x991B, 0x9937, /* 0xC0 */ + 0x993F, 0x9943, 0x9948, 0x9949, 0x994A, 0x994C, 0x9962, 0x5E80, /* 0xC0 */ + 0x5EE1, 0x5E8B, 0x5E96, 0x5EA5, 0x5EA0, 0x5EB9, 0x5EB5, 0x5EBE, /* 0xD0 */ + 0x5EB3, 0x8CE1, 0x5ED2, 0x5ED1, 0x5EDB, 0x5EE8, 0x5EEA, 0x81BA, /* 0xD0 */ + 0x5FC4, 0x5FC9, 0x5FD6, 0x61FA, 0x61AE, 0x5FEE, 0x616A, 0x5FE1, /* 0xE0 */ + 0x5FE4, 0x613E, 0x60B5, 0x6134, 0x5FEA, 0x5FED, 0x5FF8, 0x6019, /* 0xE0 */ + 0x6035, 0x6026, 0x601B, 0x600F, 0x600D, 0x6029, 0x602B, 0x600A, /* 0xF0 */ + 0x61CC, 0x6021, 0x615F, 0x61E8, 0x60FB, 0x6137, 0x6042 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x606A, 0x60F2, 0x6096, 0x609A, 0x6173, 0x609D, 0x6083, /* 0xA0 */ + 0x6092, 0x608C, 0x609B, 0x611C, 0x60BB, 0x60B1, 0x60DD, 0x60D8, /* 0xA0 */ + 0x60C6, 0x60DA, 0x60B4, 0x6120, 0x6192, 0x6115, 0x6123, 0x60F4, /* 0xB0 */ + 0x6100, 0x610E, 0x612B, 0x614A, 0x6175, 0x61AC, 0x6194, 0x61A7, /* 0xB0 */ + 0x61B7, 0x61D4, 0x61F5, 0x5FDD, 0x96B3, 0x9582, 0x9586, 0x95C8, /* 0xC0 */ + 0x958E, 0x9594, 0x958C, 0x95E5, 0x95AD, 0x95AB, 0x9B2E, 0x95AC, /* 0xC0 */ + 0x95BE, 0x95B6, 0x9B29, 0x95BF, 0x95BD, 0x95BC, 0x95C3, 0x95CB, /* 0xD0 */ + 0x95D4, 0x95D0, 0x95D5, 0x95DE, 0x4E2C, 0x723F, 0x6215, 0x6C35, /* 0xD0 */ + 0x6C54, 0x6C5C, 0x6C4A, 0x7043, 0x6C85, 0x6C90, 0x6C94, 0x6C8C, /* 0xE0 */ + 0x6C68, 0x6C69, 0x6C74, 0x6C76, 0x6C86, 0x6F59, 0x6CD0, 0x6CD4, /* 0xE0 */ + 0x6CAD, 0x7027, 0x7018, 0x6CF1, 0x6CD7, 0x6CB2, 0x6CE0, 0x6CD6, /* 0xF0 */ + 0x6FFC, 0x6CEB, 0x6CEE, 0x6CB1, 0x6CD3, 0x6CEF, 0x6D87 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6D39, 0x6D27, 0x6D0C, 0x6D79, 0x6E5E, 0x6D07, 0x6D04, /* 0xA0 */ + 0x6D19, 0x6D0E, 0x6D2B, 0x6FAE, 0x6D2E, 0x6D35, 0x6D1A, 0x700F, /* 0xA0 */ + 0x6EF8, 0x6F6F, 0x6D33, 0x6D91, 0x6D6F, 0x6DF6, 0x6F7F, 0x6D5E, /* 0xB0 */ + 0x6D93, 0x6D94, 0x6D5C, 0x6D60, 0x6D7C, 0x6D63, 0x6E1A, 0x6DC7, /* 0xB0 */ + 0x6DC5, 0x6DDE, 0x7006, 0x6DBF, 0x6DE0, 0x6FA0, 0x6DE6, 0x6DDD, /* 0xC0 */ + 0x6DD9, 0x700B, 0x6DAB, 0x6E0C, 0x6DAE, 0x6E2B, 0x6E6E, 0x6E4E, /* 0xC0 */ + 0x6E6B, 0x6EB2, 0x6E5F, 0x6E86, 0x6E53, 0x6E54, 0x6E32, 0x6E25, /* 0xD0 */ + 0x6E44, 0x7067, 0x6EB1, 0x6E98, 0x7044, 0x6F2D, 0x7005, 0x6EA5, /* 0xD0 */ + 0x6EA7, 0x6EBD, 0x6EBB, 0x6EB7, 0x6F77, 0x6EB4, 0x6ECF, 0x6E8F, /* 0xE0 */ + 0x6EC2, 0x6E9F, 0x6F62, 0x7020, 0x701F, 0x6F24, 0x6F15, 0x6EF9, /* 0xE0 */ + 0x6F2F, 0x6F36, 0x7032, 0x6F74, 0x6F2A, 0x6F09, 0x6F29, 0x6F89, /* 0xF0 */ + 0x6F8D, 0x6F8C, 0x6F78, 0x6F72, 0x6F7C, 0x6F7A, 0x7028 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6FC9, 0x6FA7, 0x6FB9, 0x6FB6, 0x6FC2, 0x6FE1, 0x6FEE, /* 0xA0 */ + 0x6FDE, 0x6FE0, 0x6FEF, 0x701A, 0x7023, 0x701B, 0x7039, 0x7035, /* 0xA0 */ + 0x705D, 0x705E, 0x5B80, 0x5B84, 0x5B95, 0x5B93, 0x5BA5, 0x5BB8, /* 0xB0 */ + 0x752F, 0x9A2B, 0x6434, 0x5BE4, 0x5BEE, 0x8930, 0x5BF0, 0x8E47, /* 0xB0 */ + 0x8B07, 0x8FB6, 0x8FD3, 0x8FD5, 0x8FE5, 0x8FEE, 0x8FE4, 0x9087, /* 0xC0 */ + 0x8FE6, 0x9015, 0x8FE8, 0x9005, 0x9004, 0x900B, 0x9090, 0x9011, /* 0xC0 */ + 0x900D, 0x9016, 0x9021, 0x9035, 0x9036, 0x902D, 0x902F, 0x9044, /* 0xD0 */ + 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905B, 0x66B9, /* 0xD0 */ + 0x9074, 0x907D, 0x9082, 0x9088, 0x9083, 0x908B, 0x5F50, 0x5F57, /* 0xE0 */ + 0x5F56, 0x5F58, 0x5C3B, 0x54AB, 0x5C50, 0x5C59, 0x5B71, 0x5C63, /* 0xE0 */ + 0x5C68, 0x7FBC, 0x5F33, 0x5F29, 0x5F2D, 0x8274, 0x5F3C, 0x9B3B, /* 0xF0 */ + 0x5C6E, 0x5981, 0x5983, 0x598D, 0x5AF5, 0x5AD7, 0x59A3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5997, 0x59CA, 0x5B00, 0x599E, 0x59A4, 0x59D2, 0x59B2, /* 0xA0 */ + 0x59AF, 0x59D7, 0x59BE, 0x5A6D, 0x5B08, 0x59DD, 0x5B4C, 0x59E3, /* 0xA0 */ + 0x59D8, 0x59F9, 0x5A0C, 0x5A09, 0x5AA7, 0x5AFB, 0x5A11, 0x5A23, /* 0xB0 */ + 0x5A13, 0x5A40, 0x5A67, 0x5A4A, 0x5A55, 0x5A3C, 0x5A62, 0x5B0B, /* 0xB0 */ + 0x80EC, 0x5AAA, 0x5A9B, 0x5A77, 0x5A7A, 0x5ABE, 0x5AEB, 0x5AB2, /* 0xC0 */ + 0x5B21, 0x5B2A, 0x5AB8, 0x5AE0, 0x5AE3, 0x5B19, 0x5AD6, 0x5AE6, /* 0xC0 */ + 0x5AD8, 0x5ADC, 0x5B09, 0x5B17, 0x5B16, 0x5B32, 0x5B37, 0x5B40, /* 0xD0 */ + 0x5C15, 0x5C1C, 0x5B5A, 0x5B65, 0x5B73, 0x5B51, 0x5B53, 0x5B62, /* 0xD0 */ + 0x99D4, 0x99DF, 0x99D9, 0x9A36, 0x9A5B, 0x99D1, 0x99D8, 0x9A4D, /* 0xE0 */ + 0x9A4A, 0x99E2, 0x9A6A, 0x9A0F, 0x9A0D, 0x9A05, 0x9A42, 0x9A2D, /* 0xE0 */ + 0x9A16, 0x9A41, 0x9A2E, 0x9A38, 0x9A43, 0x9A44, 0x9A4F, 0x9A65, /* 0xF0 */ + 0x9A64, 0x7CF9, 0x7D06, 0x7D02, 0x7D07, 0x7D08, 0x7E8A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7D1C, 0x7D15, 0x7D13, 0x7D3A, 0x7D32, 0x7D31, 0x7E10, /* 0xA0 */ + 0x7D3C, 0x7D40, 0x7D3F, 0x7D5D, 0x7D4E, 0x7D73, 0x7D86, 0x7D83, /* 0xA0 */ + 0x7D88, 0x7DBE, 0x7DBA, 0x7DCB, 0x7DD4, 0x7DC4, 0x7D9E, 0x7DAC, /* 0xB0 */ + 0x7DB9, 0x7DA3, 0x7DB0, 0x7DC7, 0x7DD9, 0x7DD7, 0x7DF9, 0x7DF2, /* 0xB0 */ + 0x7E62, 0x7DE6, 0x7DF6, 0x7DF1, 0x7E0B, 0x7DE1, 0x7E09, 0x7E1D, /* 0xC0 */ + 0x7E1F, 0x7E1E, 0x7E2D, 0x7E0A, 0x7E11, 0x7E7D, 0x7E39, 0x7E35, /* 0xC0 */ + 0x7E32, 0x7E46, 0x7E45, 0x7E88, 0x7E5A, 0x7E52, 0x7E6E, 0x7E7E, /* 0xD0 */ + 0x7E70, 0x7E6F, 0x7E98, 0x5E7A, 0x757F, 0x5DDB, 0x753E, 0x9095, /* 0xD0 */ + 0x738E, 0x74A3, 0x744B, 0x73A2, 0x739F, 0x73CF, 0x73C2, 0x74CF, /* 0xE0 */ + 0x73B7, 0x73B3, 0x73C0, 0x73C9, 0x73C8, 0x73E5, 0x73D9, 0x980A, /* 0xE0 */ + 0x740A, 0x73E9, 0x73E7, 0x73DE, 0x74BD, 0x743F, 0x7489, 0x742A, /* 0xF0 */ + 0x745B, 0x7426, 0x7425, 0x7428, 0x7430, 0x742E, 0x742C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x741B, 0x741A, 0x7441, 0x745C, 0x7457, 0x7455, 0x7459, /* 0xA0 */ + 0x74A6, 0x746D, 0x747E, 0x749C, 0x74D4, 0x7480, 0x7481, 0x7487, /* 0xA0 */ + 0x748B, 0x749E, 0x74A8, 0x74A9, 0x7490, 0x74A7, 0x74DA, 0x74BA, /* 0xB0 */ + 0x97D9, 0x97DE, 0x97DC, 0x674C, 0x6753, 0x675E, 0x6748, 0x69AA, /* 0xB0 */ + 0x6AEA, 0x6787, 0x676A, 0x6773, 0x6798, 0x6898, 0x6775, 0x68D6, /* 0xC0 */ + 0x6A05, 0x689F, 0x678B, 0x6777, 0x677C, 0x67F0, 0x6ADB, 0x67D8, /* 0xC0 */ + 0x6AF3, 0x67E9, 0x67B0, 0x6AE8, 0x67D9, 0x67B5, 0x67DA, 0x67B3, /* 0xD0 */ + 0x67DD, 0x6800, 0x67C3, 0x67B8, 0x67E2, 0x6ADF, 0x67C1, 0x6A89, /* 0xD0 */ + 0x6832, 0x6833, 0x690F, 0x6A48, 0x684E, 0x6968, 0x6844, 0x69BF, /* 0xE0 */ + 0x6883, 0x681D, 0x6855, 0x6A3A, 0x6841, 0x6A9C, 0x6840, 0x6B12, /* 0xE0 */ + 0x684A, 0x6849, 0x6829, 0x68B5, 0x688F, 0x6874, 0x6877, 0x6893, /* 0xF0 */ + 0x686B, 0x6B1E, 0x696E, 0x68FC, 0x6ADD, 0x69E7, 0x68F9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_E9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6B0F, 0x68F0, 0x690B, 0x6901, 0x6957, 0x68E3, 0x6910, /* 0xA0 */ + 0x6971, 0x6939, 0x6960, 0x6942, 0x695D, 0x6B16, 0x696B, 0x6980, /* 0xA0 */ + 0x6998, 0x6978, 0x6934, 0x69CC, 0x6AEC, 0x6ADA, 0x69CE, 0x6AF8, /* 0xB0 */ + 0x6966, 0x6963, 0x6979, 0x699B, 0x69A7, 0x69BB, 0x69AB, 0x69AD, /* 0xB0 */ + 0x69D4, 0x69B1, 0x69C1, 0x69CA, 0x6AB3, 0x6995, 0x6AE7, 0x698D, /* 0xC0 */ + 0x69FF, 0x6AA3, 0x69ED, 0x6A17, 0x6A18, 0x6A65, 0x69F2, 0x6A44, /* 0xC0 */ + 0x6A3E, 0x6AA0, 0x6A50, 0x6A5B, 0x6A35, 0x6A8E, 0x6AD3, 0x6A3D, /* 0xD0 */ + 0x6A28, 0x6A58, 0x6ADE, 0x6A91, 0x6A90, 0x6AA9, 0x6A97, 0x6AAB, /* 0xD0 */ + 0x7337, 0x7352, 0x6B81, 0x6B82, 0x6BA4, 0x6B84, 0x6B9E, 0x6BAE, /* 0xE0 */ + 0x6B8D, 0x6BAB, 0x6B9B, 0x6BAF, 0x6BAA, 0x8ED4, 0x8EDB, 0x8EF2, /* 0xE0 */ + 0x8EFB, 0x8F64, 0x8EF9, 0x8EFC, 0x8EEB, 0x8EE4, 0x8F62, 0x8EFA, /* 0xF0 */ + 0x8EFE, 0x8F0A, 0x8F07, 0x8F05, 0x8F12, 0x8F26, 0x8F1E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_EA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8F1F, 0x8F1C, 0x8F33, 0x8F46, 0x8F54, 0x8ECE, 0x6214, /* 0xA0 */ + 0x6227, 0x621B, 0x621F, 0x6222, 0x6221, 0x6225, 0x6224, 0x6229, /* 0xA0 */ + 0x81E7, 0x750C, 0x74F4, 0x74FF, 0x750F, 0x7511, 0x7513, 0x6534, /* 0xB0 */ + 0x65EE, 0x65EF, 0x65F0, 0x660A, 0x66C7, 0x6772, 0x6603, 0x6615, /* 0xB0 */ + 0x6600, 0x7085, 0x66F7, 0x661D, 0x6634, 0x6631, 0x6636, 0x6635, /* 0xC0 */ + 0x8006, 0x665F, 0x66C4, 0x6641, 0x664F, 0x6689, 0x6661, 0x6657, /* 0xC0 */ + 0x6677, 0x6684, 0x668C, 0x66D6, 0x669D, 0x66BE, 0x66DB, 0x66DC, /* 0xD0 */ + 0x66E6, 0x66E9, 0x8CC1, 0x8CB0, 0x8CBA, 0x8CBD, 0x8D04, 0x8CB2, /* 0xD0 */ + 0x8CC5, 0x8D10, 0x8CD1, 0x8CDA, 0x8CD5, 0x8CEB, 0x8CE7, 0x8CFB, /* 0xE0 */ + 0x8998, 0x89AC, 0x89A1, 0x89BF, 0x89A6, 0x89AF, 0x89B2, 0x89B7, /* 0xE0 */ + 0x726E, 0x729F, 0x725D, 0x7266, 0x726F, 0x727E, 0x727F, 0x7284, /* 0xF0 */ + 0x728B, 0x728D, 0x728F, 0x7292, 0x6308, 0x6332, 0x63B0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_EB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x643F, 0x64D8, 0x8004, 0x6BEA, 0x6BF3, 0x6BFD, 0x6BFF, /* 0xA0 */ + 0x6BF9, 0x6C05, 0x6C0C, 0x6C06, 0x6C0D, 0x6C15, 0x6C18, 0x6C19, /* 0xA0 */ + 0x6C1A, 0x6C21, 0x6C2C, 0x6C24, 0x6C2A, 0x6C32, 0x6535, 0x6555, /* 0xB0 */ + 0x656B, 0x7258, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809F, /* 0xB0 */ + 0x809C, 0x8093, 0x80BC, 0x670A, 0x80BD, 0x80B1, 0x80AB, 0x80AD, /* 0xC0 */ + 0x80B4, 0x80B7, 0x6727, 0x8156, 0x80E9, 0x81DA, 0x80DB, 0x80C2, /* 0xC0 */ + 0x80C4, 0x80D9, 0x80CD, 0x80D7, 0x6710, 0x80DD, 0x811B, 0x80F1, /* 0xD0 */ + 0x80F4, 0x80ED, 0x81BE, 0x810E, 0x80F2, 0x80FC, 0x6715, 0x8112, /* 0xD0 */ + 0x8C5A, 0x8161, 0x811E, 0x812C, 0x8118, 0x8132, 0x8148, 0x814C, /* 0xE0 */ + 0x8153, 0x8174, 0x8159, 0x815A, 0x8171, 0x8160, 0x8169, 0x817C, /* 0xE0 */ + 0x817D, 0x816D, 0x8167, 0x584D, 0x5AB5, 0x8188, 0x8182, 0x81CF, /* 0xF0 */ + 0x6ED5, 0x81A3, 0x81AA, 0x81CC, 0x6726, 0x81CA, 0x81BB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_EC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x81C1, 0x81A6, 0x6B5F, 0x6B37, 0x6B39, 0x6B43, 0x6B46, /* 0xA0 */ + 0x6B59, 0x98AE, 0x98AF, 0x98B6, 0x98BC, 0x98C6, 0x98C8, 0x6BB3, /* 0xA0 */ + 0x5F40, 0x8F42, 0x89F3, 0x6590, 0x9F4F, 0x6595, 0x65BC, 0x65C6, /* 0xB0 */ + 0x65C4, 0x65C3, 0x65CC, 0x65CE, 0x65D2, 0x65D6, 0x716C, 0x7152, /* 0xB0 */ + 0x7096, 0x7197, 0x70BB, 0x70C0, 0x70B7, 0x70AB, 0x70B1, 0x71C1, /* 0xC0 */ + 0x70CA, 0x7110, 0x7113, 0x71DC, 0x712F, 0x7131, 0x7173, 0x715C, /* 0xC0 */ + 0x7168, 0x7145, 0x7172, 0x714A, 0x7178, 0x717A, 0x7198, 0x71B3, /* 0xD0 */ + 0x71B5, 0x71A8, 0x71A0, 0x71E0, 0x71D4, 0x71E7, 0x71F9, 0x721D, /* 0xD0 */ + 0x7228, 0x706C, 0x71FE, 0x7166, 0x71B9, 0x623E, 0x623D, 0x6243, /* 0xE0 */ + 0x6248, 0x6249, 0x793B, 0x7940, 0x7946, 0x7949, 0x795B, 0x795C, /* 0xE0 */ + 0x7953, 0x795A, 0x79B0, 0x7957, 0x7960, 0x798E, 0x7967, 0x797A, /* 0xF0 */ + 0x79AA, 0x798A, 0x799A, 0x79A7, 0x79B3, 0x5FD1, 0x5FD0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_ED[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x61DF, 0x605D, 0x605A, 0x6067, 0x6041, 0x6059, 0x6063, /* 0xA0 */ + 0x6164, 0x6106, 0x610D, 0x615D, 0x61A9, 0x619D, 0x61CB, 0x61E3, /* 0xA0 */ + 0x6207, 0x8080, 0x807F, 0x6C93, 0x6FA9, 0x6DFC, 0x78EF, 0x77F8, /* 0xB0 */ + 0x78AD, 0x7809, 0x7868, 0x7818, 0x7811, 0x65AB, 0x782D, 0x78B8, /* 0xB0 */ + 0x781D, 0x7839, 0x792A, 0x7931, 0x781F, 0x783C, 0x7825, 0x782C, /* 0xC0 */ + 0x7823, 0x7829, 0x784E, 0x786D, 0x7864, 0x78FD, 0x7826, 0x7850, /* 0xC0 */ + 0x7847, 0x784C, 0x786A, 0x78E7, 0x7893, 0x789A, 0x7887, 0x78E3, /* 0xD0 */ + 0x78A1, 0x78A3, 0x78B2, 0x78B9, 0x78A5, 0x78D4, 0x78D9, 0x78C9, /* 0xD0 */ + 0x78EC, 0x78F2, 0x7905, 0x78F4, 0x7913, 0x7924, 0x791E, 0x7934, /* 0xE0 */ + 0x9F95, 0x9EF9, 0x9EFB, 0x9EFC, 0x76F1, 0x7704, 0x7798, 0x76F9, /* 0xE0 */ + 0x7707, 0x7708, 0x771A, 0x7722, 0x7719, 0x772D, 0x7726, 0x7735, /* 0xF0 */ + 0x7738, 0x775E, 0x77BC, 0x7747, 0x7743, 0x775A, 0x7768 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_EE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7762, 0x7765, 0x777F, 0x778D, 0x777D, 0x7780, 0x778C, /* 0xA0 */ + 0x7791, 0x779F, 0x77A0, 0x77B0, 0x77B5, 0x77BD, 0x753A, 0x7540, /* 0xA0 */ + 0x754E, 0x754B, 0x7548, 0x755B, 0x7572, 0x7579, 0x7583, 0x7F58, /* 0xB0 */ + 0x7F61, 0x7F5F, 0x8A48, 0x7F68, 0x7F86, 0x7F71, 0x7F79, 0x7F88, /* 0xB0 */ + 0x7F7E, 0x76CD, 0x76E5, 0x8832, 0x91D2, 0x91D3, 0x91D4, 0x91D9, /* 0xC0 */ + 0x91D7, 0x91D5, 0x91F7, 0x91E7, 0x91E4, 0x9346, 0x91F5, 0x91F9, /* 0xC0 */ + 0x9208, 0x9226, 0x9245, 0x9211, 0x9210, 0x9201, 0x9227, 0x9204, /* 0xD0 */ + 0x9225, 0x9200, 0x923A, 0x9266, 0x9237, 0x9233, 0x9255, 0x923D, /* 0xD0 */ + 0x9238, 0x925E, 0x926C, 0x926D, 0x923F, 0x9460, 0x9230, 0x9249, /* 0xE0 */ + 0x9248, 0x924D, 0x922E, 0x9239, 0x9438, 0x92AC, 0x92A0, 0x927A, /* 0xE0 */ + 0x92AA, 0x92EE, 0x92CF, 0x9403, 0x92E3, 0x943A, 0x92B1, 0x92A6, /* 0xF0 */ + 0x93A7, 0x9296, 0x92CC, 0x92A9, 0x93F5, 0x9293, 0x927F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_EF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x93A9, 0x929A, 0x931A, 0x92AB, 0x9283, 0x940B, 0x92A8, /* 0xA0 */ + 0x92A3, 0x9412, 0x9338, 0x92F1, 0x93D7, 0x92E5, 0x92F0, 0x92EF, /* 0xA0 */ + 0x92E8, 0x92BC, 0x92DD, 0x92F6, 0x9426, 0x9427, 0x92C3, 0x92DF, /* 0xB0 */ + 0x92E6, 0x9312, 0x9306, 0x9369, 0x931B, 0x9340, 0x9301, 0x9315, /* 0xB0 */ + 0x932E, 0x9343, 0x9307, 0x9308, 0x931F, 0x9319, 0x9365, 0x9347, /* 0xC0 */ + 0x9376, 0x9354, 0x9364, 0x93AA, 0x9370, 0x9384, 0x93E4, 0x93D8, /* 0xC0 */ + 0x9428, 0x9387, 0x93CC, 0x9398, 0x93B8, 0x93BF, 0x93A6, 0x93B0, /* 0xD0 */ + 0x93B5, 0x944C, 0x93E2, 0x93DC, 0x93DD, 0x93CD, 0x93DE, 0x93C3, /* 0xD0 */ + 0x93C7, 0x93D1, 0x9414, 0x941D, 0x93F7, 0x9465, 0x9413, 0x946D, /* 0xE0 */ + 0x9420, 0x9479, 0x93F9, 0x9419, 0x944A, 0x9432, 0x943F, 0x9454, /* 0xE0 */ + 0x9463, 0x937E, 0x77E7, 0x77EC, 0x96C9, 0x79D5, 0x79ED, 0x79E3, /* 0xF0 */ + 0x79EB, 0x7A06, 0x5D47, 0x7A03, 0x7A02, 0x7A1E, 0x7A14 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7A39, 0x7A37, 0x7A61, 0x9ECF, 0x99A5, 0x7A70, 0x7688, /* 0xA0 */ + 0x768E, 0x7693, 0x7699, 0x76A4, 0x74DE, 0x74E0, 0x752C, 0x9CE9, /* 0xA0 */ + 0x9CF6, 0x9D07, 0x9D06, 0x9D23, 0x9D87, 0x9E15, 0x9D1D, 0x9D1F, /* 0xB0 */ + 0x9DE5, 0x9D2F, 0x9DD9, 0x9D30, 0x9D42, 0x9E1E, 0x9D53, 0x9E1D, /* 0xB0 */ + 0x9D60, 0x9D52, 0x9DF3, 0x9D5C, 0x9D61, 0x9D93, 0x9D6A, 0x9D6F, /* 0xC0 */ + 0x9D89, 0x9D98, 0x9D9A, 0x9DC0, 0x9DA5, 0x9DA9, 0x9DC2, 0x9DBC, /* 0xC0 */ + 0x9E1A, 0x9DD3, 0x9DDA, 0x9DEF, 0x9DE6, 0x9DF2, 0x9DF8, 0x9E0C, /* 0xD0 */ + 0x9DFA, 0x9E1B, 0x7592, 0x7594, 0x7664, 0x7658, 0x759D, 0x7667, /* 0xD0 */ + 0x75A3, 0x75B3, 0x75B4, 0x75B8, 0x75C4, 0x75B1, 0x75B0, 0x75C3, /* 0xE0 */ + 0x75C2, 0x7602, 0x75CD, 0x75E3, 0x7646, 0x75E6, 0x75E4, 0x7647, /* 0xE0 */ + 0x75E7, 0x7603, 0x75F1, 0x75FC, 0x75FF, 0x7610, 0x7600, 0x7649, /* 0xF0 */ + 0x760C, 0x761E, 0x760A, 0x7625, 0x763B, 0x7615, 0x7619 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x761B, 0x763C, 0x7622, 0x7620, 0x7640, 0x762D, 0x7630, /* 0xA0 */ + 0x766D, 0x7635, 0x7643, 0x766E, 0x7633, 0x764D, 0x7669, 0x7654, /* 0xA0 */ + 0x765C, 0x7656, 0x7672, 0x766F, 0x7FCA, 0x7AE6, 0x7A78, 0x7A79, /* 0xB0 */ + 0x7A80, 0x7A86, 0x7A88, 0x7A95, 0x7AC7, 0x7AA0, 0x7AAC, 0x7AA8, /* 0xB0 */ + 0x7AB6, 0x7AB3, 0x8864, 0x8869, 0x8872, 0x887D, 0x887F, 0x8882, /* 0xC0 */ + 0x88A2, 0x8960, 0x88B7, 0x88BC, 0x88C9, 0x8933, 0x88CE, 0x895D, /* 0xC0 */ + 0x8947, 0x88F1, 0x891A, 0x88FC, 0x88E8, 0x88FE, 0x88F0, 0x8921, /* 0xD0 */ + 0x8919, 0x8913, 0x8938, 0x890A, 0x8964, 0x892B, 0x8936, 0x8941, /* 0xD0 */ + 0x8966, 0x897B, 0x758B, 0x80E5, 0x76B8, 0x76B4, 0x77DC, 0x8012, /* 0xE0 */ + 0x8014, 0x8016, 0x801C, 0x8020, 0x802E, 0x8025, 0x8026, 0x802C, /* 0xE0 */ + 0x8029, 0x8028, 0x8031, 0x800B, 0x8035, 0x8043, 0x8046, 0x8079, /* 0xF0 */ + 0x8052, 0x8075, 0x8071, 0x8983, 0x9807, 0x980E, 0x980F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9821, 0x981C, 0x6F41, 0x9826, 0x9837, 0x984E, 0x9853, /* 0xA0 */ + 0x9873, 0x9862, 0x9859, 0x9865, 0x986C, 0x9870, 0x864D, 0x8654, /* 0xA0 */ + 0x866C, 0x87E3, 0x8806, 0x867A, 0x867C, 0x867B, 0x86A8, 0x868D, /* 0xB0 */ + 0x868B, 0x8706, 0x869D, 0x86A7, 0x86A3, 0x86AA, 0x8693, 0x86A9, /* 0xB0 */ + 0x86B6, 0x86C4, 0x86B5, 0x8823, 0x86B0, 0x86BA, 0x86B1, 0x86AF, /* 0xC0 */ + 0x86C9, 0x87F6, 0x86B4, 0x86E9, 0x86FA, 0x87EF, 0x86ED, 0x8784, /* 0xC0 */ + 0x86D0, 0x8713, 0x86DE, 0x8810, 0x86DF, 0x86D8, 0x86D1, 0x8703, /* 0xD0 */ + 0x8707, 0x86F8, 0x8708, 0x870A, 0x870D, 0x8709, 0x8723, 0x873B, /* 0xD0 */ + 0x871E, 0x8725, 0x872E, 0x871A, 0x873E, 0x87C8, 0x8734, 0x8731, /* 0xE0 */ + 0x8729, 0x8737, 0x873F, 0x8782, 0x8722, 0x877D, 0x8811, 0x877B, /* 0xE0 */ + 0x8760, 0x8770, 0x874C, 0x876E, 0x878B, 0x8753, 0x8763, 0x87BB, /* 0xF0 */ + 0x8764, 0x8759, 0x8765, 0x8793, 0x87AF, 0x87CE, 0x87D2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x87C6, 0x8788, 0x8785, 0x87AD, 0x8797, 0x8783, 0x87AB, /* 0xA0 */ + 0x87E5, 0x87AC, 0x87B5, 0x87B3, 0x87CB, 0x87D3, 0x87BD, 0x87D1, /* 0xA0 */ + 0x87C0, 0x87CA, 0x87DB, 0x87EA, 0x87E0, 0x87EE, 0x8816, 0x8813, /* 0xB0 */ + 0x87FE, 0x880A, 0x881B, 0x8821, 0x8839, 0x883C, 0x7F36, 0x7F4C, /* 0xB0 */ + 0x7F44, 0x7F45, 0x8210, 0x7AFA, 0x7AFD, 0x7B08, 0x7BE4, 0x7B04, /* 0xC0 */ + 0x7B67, 0x7B0A, 0x7B2B, 0x7B0F, 0x7B47, 0x7B38, 0x7B2A, 0x7B19, /* 0xC0 */ + 0x7B2E, 0x7B31, 0x7B20, 0x7B25, 0x7B24, 0x7B33, 0x7C69, 0x7B1E, /* 0xD0 */ + 0x7B58, 0x7BF3, 0x7B45, 0x7B75, 0x7B4C, 0x7B8F, 0x7B60, 0x7B6E, /* 0xD0 */ + 0x7B7B, 0x7B62, 0x7B72, 0x7B71, 0x7B90, 0x7C00, 0x7BCB, 0x7BB8, /* 0xE0 */ + 0x7BAC, 0x7B9D, 0x7C5C, 0x7B85, 0x7C1E, 0x7B9C, 0x7BA2, 0x7C2B, /* 0xE0 */ + 0x7BB4, 0x7C23, 0x7BC1, 0x7BCC, 0x7BDD, 0x7BDA, 0x7BE5, 0x7BE6, /* 0xF0 */ + 0x7BEA, 0x7C0C, 0x7BFE, 0x7BFC, 0x7C0F, 0x7C6A, 0x7C0B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7C1F, 0x7C2A, 0x7C26, 0x7C38, 0x7C5F, 0x7C40, 0x81FE, /* 0xA0 */ + 0x8201, 0x8202, 0x8204, 0x81EC, 0x8844, 0x8221, 0x8222, 0x8264, /* 0xA0 */ + 0x822D, 0x822F, 0x8228, 0x822B, 0x8238, 0x826B, 0x8233, 0x8234, /* 0xB0 */ + 0x823E, 0x8244, 0x8249, 0x824B, 0x824F, 0x825A, 0x825F, 0x8268, /* 0xB0 */ + 0x887E, 0x88CA, 0x8888, 0x88D8, 0x88DF, 0x895E, 0x7F9D, 0x7FA5, /* 0xC0 */ + 0x7FA7, 0x7FAF, 0x7FB0, 0x7FB2, 0x7C7C, 0x6549, 0x7C91, 0x7CF2, /* 0xC0 */ + 0x7CF6, 0x7C9E, 0x7CA2, 0x7CB2, 0x7CBC, 0x7CBD, 0x7CDD, 0x7CC7, /* 0xD0 */ + 0x7CCC, 0x7CCD, 0x7CC8, 0x7CC5, 0x7CD7, 0x7CE8, 0x826E, 0x66A8, /* 0xD0 */ + 0x7FBF, 0x7FCE, 0x7FD5, 0x7FE5, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FEE, /* 0xE0 */ + 0x7FF3, 0x7CF8, 0x7E36, 0x7DA6, 0x7DAE, 0x7E47, 0x7E9B, 0x9EA9, /* 0xE0 */ + 0x9EB4, 0x8D73, 0x8D84, 0x8D94, 0x8D91, 0x8DB2, 0x8D67, 0x8D6D, /* 0xF0 */ + 0x8C47, 0x8C49, 0x914A, 0x9150, 0x914E, 0x914F, 0x9164 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9162, 0x9161, 0x9170, 0x9169, 0x916F, 0x91C5, 0x91C3, /* 0xA0 */ + 0x9172, 0x9174, 0x9179, 0x918C, 0x9185, 0x9190, 0x918D, 0x9191, /* 0xA0 */ + 0x91A2, 0x91A3, 0x91AA, 0x91AD, 0x91AE, 0x91AF, 0x91B5, 0x91B4, /* 0xB0 */ + 0x91BA, 0x8C55, 0x9E7A, 0x8E89, 0x8DEB, 0x8E05, 0x8E59, 0x8E69, /* 0xB0 */ + 0x8DB5, 0x8DBF, 0x8DBC, 0x8DBA, 0x8E4C, 0x8DD6, 0x8DD7, 0x8DDA, /* 0xC0 */ + 0x8E92, 0x8DCE, 0x8DCF, 0x8DDB, 0x8DC6, 0x8DEC, 0x8E7A, 0x8E55, /* 0xC0 */ + 0x8DE3, 0x8E9A, 0x8E8B, 0x8DE4, 0x8E09, 0x8DFD, 0x8E14, 0x8E1D, /* 0xD0 */ + 0x8E1F, 0x8E93, 0x8E2E, 0x8E23, 0x8E91, 0x8E3A, 0x8E40, 0x8E39, /* 0xD0 */ + 0x8E35, 0x8E3D, 0x8E31, 0x8E49, 0x8E41, 0x8E42, 0x8EA1, 0x8E63, /* 0xE0 */ + 0x8E4A, 0x8E70, 0x8E76, 0x8E7C, 0x8E6F, 0x8E74, 0x8E85, 0x8EAA, /* 0xE0 */ + 0x8E94, 0x8E90, 0x8EA6, 0x8E9E, 0x8C78, 0x8C82, 0x8C8A, 0x8C85, /* 0xF0 */ + 0x8C98, 0x8C94, 0x659B, 0x89D6, 0x89F4, 0x89DA, 0x89DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x89E5, 0x89EB, 0x89F6, 0x8A3E, 0x8B26, 0x975A, 0x96E9, /* 0xA0 */ + 0x9742, 0x96EF, 0x9706, 0x973D, 0x9708, 0x970F, 0x970E, 0x972A, /* 0xA0 */ + 0x9744, 0x9730, 0x973E, 0x9F54, 0x9F5F, 0x9F59, 0x9F60, 0x9F5C, /* 0xB0 */ + 0x9F66, 0x9F6C, 0x9F6A, 0x9F77, 0x9EFD, 0x9EFF, 0x9F09, 0x96B9, /* 0xB0 */ + 0x96BC, 0x96BD, 0x96CE, 0x96D2, 0x77BF, 0x8B8E, 0x928E, 0x947E, /* 0xC0 */ + 0x92C8, 0x93E8, 0x936A, 0x93CA, 0x938F, 0x943E, 0x946B, 0x9B77, /* 0xC0 */ + 0x9B74, 0x9B81, 0x9B83, 0x9B8E, 0x9C78, 0x7A4C, 0x9B92, 0x9C5F, /* 0xD0 */ + 0x9B90, 0x9BAD, 0x9B9A, 0x9BAA, 0x9B9E, 0x9C6D, 0x9BAB, 0x9B9D, /* 0xD0 */ + 0x9C58, 0x9BC1, 0x9C7A, 0x9C31, 0x9C39, 0x9C23, 0x9C37, 0x9BC0, /* 0xE0 */ + 0x9BCA, 0x9BC7, 0x9BFD, 0x9BD6, 0x9BEA, 0x9BEB, 0x9BE1, 0x9BE4, /* 0xE0 */ + 0x9BE7, 0x9BDD, 0x9BE2, 0x9BF0, 0x9BDB, 0x9BF4, 0x9BD4, 0x9C5D, /* 0xF0 */ + 0x9C08, 0x9C10, 0x9C0D, 0x9C12, 0x9C09, 0x9BFF, 0x9C20 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9C32, 0x9C2D, 0x9C28, 0x9C25, 0x9C29, 0x9C33, 0x9C3E, /* 0xA0 */ + 0x9C48, 0x9C3B, 0x9C35, 0x9C45, 0x9C56, 0x9C54, 0x9C52, 0x9C67, /* 0xA0 */ + 0x977C, 0x9785, 0x97C3, 0x97BD, 0x9794, 0x97C9, 0x97AB, 0x97A3, /* 0xB0 */ + 0x97B2, 0x97B4, 0x9AB1, 0x9AB0, 0x9AB7, 0x9DBB, 0x9AB6, 0x9ABA, /* 0xB0 */ + 0x9ABC, 0x9AC1, 0x9AC0, 0x9ACF, 0x9AC2, 0x9AD6, 0x9AD5, 0x9AD1, /* 0xC0 */ + 0x9B45, 0x9B43, 0x9B58, 0x9B4E, 0x9B48, 0x9B4D, 0x9B51, 0x9957, /* 0xC0 */ + 0x995C, 0x992E, 0x9955, 0x9954, 0x9ADF, 0x9AE1, 0x9AE6, 0x9AEF, /* 0xD0 */ + 0x9AEB, 0x9AFB, 0x9AED, 0x9AF9, 0x9B08, 0x9B0F, 0x9B22, 0x9B1F, /* 0xD0 */ + 0x9B23, 0x4E48, 0x9EBE, 0x7E3B, 0x9E82, 0x9E87, 0x9E88, 0x9E8B, /* 0xE0 */ + 0x9E92, 0x93D6, 0x9E9D, 0x9E9F, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE0, /* 0xE0 */ + 0x9EDF, 0x9EE2, 0x9EF7, 0x9EE7, 0x9EE5, 0x9EF2, 0x9EEF, 0x9F22, /* 0xF0 */ + 0x9F2C, 0x9F2F, 0x9F39, 0x9F37, 0x9F3D, 0x9F3E, 0x9F44 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x896C, 0x95C6, 0x9336, 0x5F46, 0x8514, 0x7E94, 0x5382, /* 0xA0 */ + 0x51B2, 0x4E11, 0x9F63, 0x5679, 0x515A, 0x6DC0, 0x9F15, 0x6597, /* 0xA0 */ + 0x5641, 0x9AEE, 0x8303, 0x4E30, 0x8907, 0x5E72, 0x7A40, 0x98B3, /* 0xB0 */ + 0x5E7F, 0x95A4, 0x9B0D, 0x5212, 0x8FF4, 0x5F59, 0x7A6B, 0x98E2, /* 0xB0 */ + 0x51E0, 0x50A2, 0x4EF7, 0x8350, 0x8591, 0x5118, 0x636E, 0x6372, /* 0xC0 */ + 0x524B, 0x5938, 0x774F, 0x8721, 0x814A, 0x7E8D, 0x91CC, 0x66C6, /* 0xC0 */ + 0x5E18, 0x77AD, 0x9E75, 0x56C9, 0x9EF4, 0x6FDB, 0x61DE, 0x77C7, /* 0xD0 */ + 0x7030, 0x9EB5, 0x884A, 0x95E2, 0x82F9, 0x51ED, 0x6251, 0x4EC6, /* 0xD0 */ + 0x6734, 0x97C6, 0x7C64, 0x7E34, 0x97A6, 0x9EAF, 0x786E, 0x820D, /* 0xE0 */ + 0x672F, 0x677E, 0x56CC, 0x53F0, 0x98B1, 0x6AAF, 0x7F4E, 0x6D82, /* 0xE0 */ + 0x7CF0, 0x4E07, 0x4FC2, 0x7E6B, 0x9E79, 0x56AE, 0x9B1A, 0x846F, /* 0xF0 */ + 0x53F6, 0x90C1, 0x79A6, 0x7C72, 0x613F, 0x4E91, 0x9AD2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_GBT_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x75C7, 0x96BB, 0x53EA, 0x7DFB, 0x88FD, 0x79CD, 0x7843, /* 0xA0 */ + 0x7B51, 0x51C6 /* 0xA0 */ +}; diff --git a/sal/textenc/tcvtscn4.tab b/sal/textenc/tcvtscn4.tab new file mode 100644 index 000000000..653f3d816 --- /dev/null +++ b/sal/textenc/tcvtscn4.tab @@ -0,0 +1,3061 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* chinese simplified (China) charsets: */ +/* GB (GB2312) */ + +/* In this file we have only the GB tables for the kanji characters, */ +/* because these tables can't shared with the GBK tables. */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_GB_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2BB, 0xB6A1, 0, 0xC6DF, 0, 0, 0, 0xCDF2, /* 0x00 */ + 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0xD3EB, 0, /* 0x00 */ + 0xD8A4, 0xB3F3, 0, 0xD7A8, 0xC7D2, 0xD8A7, 0xCAC0, 0, /* 0x10 */ + 0xC7F0, 0xB1FB, 0xD2B5, 0xB4D4, 0xB6AB, 0xCBBF, 0xD8A9, 0, /* 0x10 */ + 0, 0, 0xB6AA, 0, 0xC1BD, 0xD1CF, 0, 0xC9A5, /* 0x20 */ + 0xD8AD, 0, 0xB8F6, 0xD1BE, 0xE3DC, 0xD6D0, 0, 0, /* 0x20 */ + 0xB7E1, 0, 0xB4AE, 0, 0xC1D9, 0, 0xD8BC, 0, /* 0x30 */ + 0xCDE8, 0xB5A4, 0xCEAA, 0xD6F7, 0, 0xC0F6, 0xBED9, 0xD8AF, /* 0x30 */ + 0, 0, 0, 0xC4CB, 0, 0xBEC3, 0, 0xD8B1, /* 0x40 */ + 0xC3B4, 0xD2E5, 0, 0xD6AE, 0xCEDA, 0xD5A7, 0xBAF5, 0xB7A6, /* 0x40 */ + 0xC0D6, 0, 0xC6B9, 0xC5D2, 0xC7C7, 0, 0xB9D4, 0, /* 0x50 */ + 0xB3CB, 0xD2D2, 0, 0, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, /* 0x50 */ + 0xCFB0, 0xCFE7, 0, 0, 0, 0, 0xCAE9, 0, /* 0x60 */ + 0, 0xD8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xC2F2, 0xC2D2, 0, 0xC8E9, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xC7AC, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xC1CB, 0, /* 0x80 */ + 0xD3E8, 0xD5F9, 0, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0xBFF7, /* 0x80 */ + 0, 0xD4C6, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0, 0, /* 0x90 */ + 0xD8A8, 0, 0xD1C7, 0xD0A9, 0, 0, 0, 0xD8BD, /* 0x90 */ + 0xD9EF, 0xCDF6, 0xBFBA, 0, 0xBDBB, 0xBAA5, 0xD2E0, 0xB2FA, /* 0xA0 */ + 0xBAE0, 0xC4B6, 0, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0, /* 0xA0 */ + 0, 0, 0xC7D7, 0xD9F1, 0, 0xD9F4, 0, 0, /* 0xB0 */ + 0, 0, 0xC8CB, 0xD8E9, 0, 0, 0, 0xD2DA, /* 0xB0 */ + 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0xBDF6, 0xC6CD, 0xB3F0, /* 0xC0 */ + 0, 0xD8EB, 0xBDF1, 0xBDE9, 0, 0xC8D4, 0xB4D3, 0, /* 0xC0 */ + 0, 0xC2D8, 0, 0xB2D6, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, /* 0xD0 */ + 0xB8B6, 0xCFC9, 0, 0, 0, 0xD9DA, 0xD8F0, 0xC7AA, /* 0xD0 */ + 0, 0xD8EE, 0, 0xB4FA, 0xC1EE, 0xD2D4, 0, 0, /* 0xE0 */ + 0xD8ED, 0, 0xD2C7, 0xD8EF, 0xC3C7, 0, 0, 0, /* 0xE0 */ + 0xD1F6, 0, 0xD6D9, 0xD8F2, 0, 0xD8F5, 0xBCFE, 0xBCDB, /* 0xF0 */ + 0, 0, 0, 0xC8CE, 0, 0xB7DD, 0, 0xB7C2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6F3, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xD8F8, 0xD2C1, 0, 0, 0xCEE9, 0xBCBF, 0xB7FC, /* 0x00 */ + 0xB7A5, 0xD0DD, 0, 0, 0, 0, 0, 0xD6DA, /* 0x10 */ + 0xD3C5, 0xBBEF, 0xBBE1, 0xD8F1, 0, 0, 0xC9A1, 0xCEB0, /* 0x10 */ + 0xB4AB, 0, 0xD8F3, 0, 0xC9CB, 0xD8F6, 0xC2D7, 0xD8F7, /* 0x20 */ + 0, 0, 0xCEB1, 0xD8F9, 0, 0, 0, 0xB2AE, /* 0x20 */ + 0xB9C0, 0, 0xD9A3, 0, 0xB0E9, 0, 0xC1E6, 0, /* 0x30 */ + 0xC9EC, 0, 0xCBC5, 0, 0xCBC6, 0xD9A4, 0, 0, /* 0x30 */ + 0, 0, 0, 0xB5E8, 0, 0, 0xB5AB, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xCEBB, 0xB5CD, 0xD7A1, /* 0x40 */ + 0xD7F4, 0xD3D3, 0, 0xCCE5, 0, 0xBACE, 0, 0xD9A2, /* 0x50 */ + 0xD9DC, 0xD3E0, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, /* 0x50 */ + 0xC4E3, 0, 0, 0xD3B6, 0xD8F4, 0xD9DD, 0, 0xD8FB, /* 0x60 */ + 0, 0xC5E5, 0, 0, 0xC0D0, 0, 0, 0xD1F0, /* 0x60 */ + 0xB0DB, 0, 0, 0xBCD1, 0xD9A6, 0, 0xD9A5, 0, /* 0x70 */ + 0, 0, 0, 0xD9AC, 0xD9AE, 0, 0xD9AB, 0xCAB9, /* 0x70 */ + 0, 0, 0, 0xD9A9, 0xD6B6, 0, 0, 0, /* 0x80 */ + 0xB3DE, 0xD9A8, 0, 0xC0FD, 0, 0xCACC, 0, 0xD9AA, /* 0x80 */ + 0, 0xD9A7, 0, 0, 0xD9B0, 0, 0, 0xB6B1, /* 0x90 */ + 0, 0, 0, 0xB9A9, 0, 0xD2C0, 0, 0, /* 0x90 */ + 0xCFC0, 0, 0, 0xC2C2, 0, 0xBDC4, 0xD5EC, 0xB2E0, /* 0xA0 */ + 0xC7C8, 0xBFEB, 0xD9AD, 0, 0xD9AF, 0, 0xCEEA, 0xBAEE, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xC7D6, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB1E3, /* 0xB0 */ + 0, 0, 0, 0xB4D9, 0xB6ED, 0xD9B4, 0, 0, /* 0xC0 */ + 0, 0, 0xBFA1, 0, 0, 0, 0xD9DE, 0xC7CE, /* 0xC0 */ + 0xC0FE, 0xD9B8, 0, 0, 0, 0, 0, 0xCBD7, /* 0xD0 */ + 0xB7FD, 0, 0xD9B5, 0, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, /* 0xD0 */ + 0, 0xD0C5, 0, 0xD9B6, 0, 0, 0xD9B1, 0, /* 0xE0 */ + 0xD9B2, 0xC1A9, 0xD9B3, 0, 0, 0xBCF3, 0xD0DE, 0xB8A9, /* 0xE0 */ + 0, 0xBEE3, 0, 0xD9BD, 0, 0, 0, 0, /* 0xF0 */ + 0xD9BA, 0, 0xB0B3, 0, 0, 0, 0xD9C2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xD9C4, 0xB1B6, 0, 0xD9BF, /* 0x00 */ + 0, 0, 0xB5B9, 0, 0xBEF3, 0, 0, 0, /* 0x10 */ + 0xCCC8, 0xBAF2, 0xD2D0, 0, 0xD9C3, 0, 0, 0xBDE8, /* 0x10 */ + 0, 0xB3AB, 0, 0, 0, 0xD9C5, 0xBEEB, 0, /* 0x20 */ + 0xD9C6, 0xD9BB, 0xC4DF, 0, 0xD9BE, 0xD9C1, 0xD9C0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xD5AE, 0, 0xD6B5, 0, 0xC7E3, 0, /* 0x30 */ + 0, 0, 0, 0xD9C8, 0, 0, 0, 0xBCD9, /* 0x40 */ + 0xD9CA, 0, 0, 0, 0xD9BC, 0, 0xD9CB, 0xC6AB, /* 0x40 */ + 0, 0, 0, 0, 0, 0xD9C9, 0, 0, /* 0x50 */ + 0, 0, 0xD7F6, 0, 0xCDA3, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xBDA1, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xD9CC, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xC5BC, 0xCDB5, /* 0x70 */ + 0, 0, 0, 0xD9CD, 0, 0, 0xD9C7, 0xB3A5, /* 0x70 */ + 0xBFFE, 0, 0, 0, 0, 0xB8B5, 0, 0, /* 0x80 */ + 0xC0FC, 0, 0, 0, 0, 0xB0F8, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xB4F6, 0, 0xD9CE, 0, 0xD9CF, /* 0xA0 */ + 0xB4A2, 0xD9D0, 0, 0, 0xB4DF, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xB0C1, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xD9D1, 0xC9B5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFF1, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xD9D2, 0, /* 0xD0 */ + 0, 0, 0xC1C5, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xD9D6, 0xC9AE, /* 0xE0 */ + 0, 0, 0, 0, 0xD9D5, 0xD9D4, 0xD9D7, 0, /* 0xE0 */ + 0, 0, 0, 0xCBDB, 0, 0xBDA9, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xC6A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9D3, 0xD9D8, /* 0x00 */ + 0, 0, 0, 0xD9D9, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xC8E5, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xC0DC, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xB6F9, /* 0x30 */ + 0xD8A3, 0xD4CA, 0, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0, /* 0x40 */ + 0xCFC8, 0xB9E2, 0, 0xBFCB, 0, 0xC3E2, 0, 0, /* 0x40 */ + 0, 0xB6D2, 0, 0, 0xCDC3, 0xD9EE, 0xD9F0, 0, /* 0x50 */ + 0, 0, 0xB5B3, 0, 0xB6B5, 0, 0, 0, /* 0x50 */ + 0, 0, 0xBEA4, 0, 0, 0xC8EB, 0, 0, /* 0x60 */ + 0xC8AB, 0, 0, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0, /* 0x60 */ + 0xC0BC, 0xB9B2, 0, 0xB9D8, 0xD0CB, 0xB1F8, 0xC6E4, 0xBEDF, /* 0x70 */ + 0xB5E4, 0xD7C8, 0, 0xD1F8, 0xBCE6, 0xCADE, 0, 0, /* 0x70 */ + 0xBCBD, 0xD9E6, 0xD8E7, 0, 0, 0xC4DA, 0, 0, /* 0x80 */ + 0xB8D4, 0xC8BD, 0, 0, 0xB2E1, 0xD4D9, 0, 0, /* 0x80 */ + 0, 0, 0xC3B0, 0, 0, 0xC3E1, 0xDAA2, 0xC8DF, /* 0x90 */ + 0, 0xD0B4, 0, 0xBEFC, 0xC5A9, 0, 0, 0, /* 0x90 */ + 0xB9DA, 0, 0xDAA3, 0, 0xD4A9, 0xDAA4, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD9FB, 0xB6AC, 0, 0, 0xB7EB, /* 0xA0 */ + 0xB1F9, 0xD9FC, 0xB3E5, 0xBEF6, 0, 0xBFF6, 0xD2B1, 0xC0E4, /* 0xB0 */ + 0, 0, 0, 0xB6B3, 0xD9FE, 0xD9FD, 0, 0, /* 0xB0 */ + 0xBEBB, 0, 0, 0, 0xC6E0, 0, 0xD7BC, 0xDAA1, /* 0xC0 */ + 0, 0xC1B9, 0, 0xB5F2, 0xC1E8, 0, 0, 0xBCF5, /* 0xC0 */ + 0, 0xB4D5, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xC1DD, 0, 0xC4FD, 0, 0, /* 0xD0 */ + 0xBCB8, 0xB7B2, 0, 0, 0xB7EF, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xD9EC, 0, 0xC6BE, 0, 0xBFAD, /* 0xE0 */ + 0xBBCB, 0, 0, 0xB5CA, 0, 0xDBC9, 0xD0D7, 0, /* 0xF0 */ + 0xCDB9, 0xB0BC, 0xB3F6, 0xBBF7, 0xDBCA, 0xBAAF, 0, 0xD4E4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0, 0, 0xB7D6, 0xC7D0, /* 0x00 */ + 0xD8D7, 0, 0xBFAF, 0, 0, 0xDBBB, 0xD8D8, 0, /* 0x00 */ + 0, 0xD0CC, 0xBBAE, 0, 0, 0, 0xEBBE, 0xC1D0, /* 0x10 */ + 0xC1F5, 0xD4F2, 0xB8D5, 0xB4B4, 0, 0xB3F5, 0, 0, /* 0x10 */ + 0xC9BE, 0, 0, 0, 0xC5D0, 0, 0, 0, /* 0x20 */ + 0xC5D9, 0xC0FB, 0, 0xB1F0, 0, 0xD8D9, 0xB9CE, 0, /* 0x20 */ + 0xB5BD, 0, 0, 0xD8DA, 0, 0, 0xD6C6, 0xCBA2, /* 0x30 */ + 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0, 0xB9F4, 0, 0xD8DB, /* 0x30 */ + 0xD8DC, 0xB6E7, 0xBCC1, 0xCCEA, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xCFF7, 0, 0xD8DD, 0xC7B0, 0, 0, /* 0x40 */ + 0xB9D0, 0xBDA3, 0, 0, 0xCCDE, 0, 0xC6CA, 0, /* 0x50 */ + 0, 0, 0, 0, 0xD8E0, 0, 0xD8DE, 0, /* 0x50 */ + 0, 0xD8DF, 0, 0, 0, 0xB0FE, 0, 0xBEE7, /* 0x60 */ + 0, 0xCAA3, 0xBCF4, 0, 0, 0, 0, 0xB8B1, /* 0x60 */ + 0, 0, 0xB8EE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD8E2, 0, 0xBDCB, /* 0x70 */ + 0, 0xD8E4, 0xD8E3, 0, 0, 0, 0, 0, /* 0x80 */ + 0xC5FC, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xD8E5, 0, 0, 0xD8E6, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xC1A6, 0, 0xC8B0, 0xB0EC, 0xB9A6, /* 0x90 */ + 0xBCD3, 0xCEF1, 0xDBBD, 0xC1D3, 0, 0, 0, 0, /* 0xA0 */ + 0xB6AF, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0, 0, /* 0xA0 */ + 0, 0xC0F8, 0xBEA2, 0xC0CD, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xDBC0, 0xCAC6, /* 0xB0 */ + 0, 0, 0, 0xB2AA, 0, 0, 0, 0xD3C2, /* 0xC0 */ + 0, 0xC3E3, 0, 0xD1AB, 0, 0, 0, 0, /* 0xC0 */ + 0xDBC2, 0, 0xC0D5, 0, 0, 0, 0xDBC3, 0, /* 0xD0 */ + 0xBFB1, 0, 0, 0, 0, 0, 0, 0xC4BC, /* 0xD0 */ + 0, 0, 0, 0, 0xC7DA, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xDBC4, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xD9E8, 0xC9D7, 0, 0, 0, 0xB9B4, 0xCEF0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4C8, 0, 0, 0, 0, 0xB0FC, 0xB4D2, 0, /* 0x00 */ + 0xD0D9, 0, 0, 0, 0, 0xD9E9, 0, 0xDECB, /* 0x00 */ + 0xD9EB, 0, 0, 0, 0, 0xD8B0, 0xBBAF, 0xB1B1, /* 0x10 */ + 0, 0xB3D7, 0xD8CE, 0, 0, 0xD4D1, 0, 0, /* 0x10 */ + 0xBDB3, 0xBFEF, 0, 0xCFBB, 0, 0, 0xD8D0, 0, /* 0x20 */ + 0, 0, 0xB7CB, 0, 0, 0, 0xD8D1, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xC6A5, 0xC7F8, 0xD2BD, 0, 0, 0xD8D2, 0xC4E4, /* 0x30 */ + 0, 0xCAAE, 0, 0xC7A7, 0, 0xD8A6, 0, 0xC9FD, /* 0x40 */ + 0xCEE7, 0xBBDC, 0xB0EB, 0, 0, 0, 0xBBAA, 0xD0AD, /* 0x40 */ + 0, 0xB1B0, 0xD7E4, 0xD7BF, 0, 0xB5A5, 0xC2F4, 0xC4CF, /* 0x50 */ + 0, 0, 0xB2A9, 0, 0xB2B7, 0, 0xB1E5, 0xDFB2, /* 0x50 */ + 0xD5BC, 0xBFA8, 0xC2AC, 0xD8D5, 0xC2B1, 0, 0xD8D4, 0xCED4, /* 0x60 */ + 0, 0xDAE0, 0, 0xCEC0, 0, 0, 0xD8B4, 0xC3AE, /* 0x60 */ + 0xD3A1, 0xCEA3, 0, 0xBCB4, 0xC8B4, 0xC2D1, 0, 0xBEED, /* 0x70 */ + 0xD0B6, 0, 0xDAE1, 0, 0, 0, 0, 0xC7E4, /* 0x70 */ + 0, 0, 0xB3A7, 0, 0xB6F2, 0xCCFC, 0xC0FA, 0, /* 0x80 */ + 0, 0xC0F7, 0, 0xD1B9, 0xD1E1, 0xD8C7, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xB2DE, 0, 0, /* 0x90 */ + 0xC0E5, 0, 0xBAF1, 0, 0, 0xD8C8, 0, 0xD4AD, /* 0x90 */ + 0, 0, 0xCFE1, 0xD8C9, 0, 0xD8CA, 0xCFC3, 0, /* 0xA0 */ + 0xB3F8, 0xBEC7, 0, 0, 0, 0, 0xD8CB, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xDBCC, 0, /* 0xB0 */ + 0, 0, 0, 0xC8A5, 0, 0, 0, 0xCFD8, /* 0xB0 */ + 0, 0xC8FE, 0xB2CE, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0xCBAB, 0xB7B4, 0, 0, /* 0xC0 */ + 0, 0xB7A2, 0, 0, 0xCAE5, 0, 0xC8A1, 0xCADC, /* 0xD0 */ + 0xB1E4, 0xD0F0, 0, 0xC5D1, 0, 0, 0, 0xDBC5, /* 0xD0 */ + 0xB5FE, 0, 0, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0, /* 0xE0 */ + 0xDFB6, 0xDFB5, 0xD6BB, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, /* 0xE0 */ + 0xCCA8, 0xDFB3, 0xCAB7, 0xD3D2, 0, 0xD8CF, 0xD2B6, 0xBAC5, /* 0xF0 */ + 0xCBBE, 0xCCBE, 0, 0xDFB7, 0xB5F0, 0xDFB4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD3F5, 0, 0xB3D4, 0xB8F7, 0, 0xDFBA, 0, /* 0x00 */ + 0xBACF, 0xBCAA, 0xB5F5, 0, 0xCDAC, 0xC3FB, 0xBAF3, 0xC0F4, /* 0x00 */ + 0xCDC2, 0xCFF2, 0xDFB8, 0xCFC5, 0, 0xC2C0, 0xDFB9, 0xC2F0, /* 0x10 */ + 0, 0, 0, 0xBEFD, 0, 0xC1DF, 0xCDCC, 0xD2F7, /* 0x10 */ + 0xB7CD, 0xDFC1, 0, 0xDFC4, 0, 0, 0xB7F1, 0xB0C9, /* 0x20 */ + 0xB6D6, 0xB7D4, 0, 0xBAAC, 0xCCFD, 0xBFD4, 0xCBB1, 0xC6F4, /* 0x20 */ + 0, 0xD6A8, 0xDFC5, 0, 0xCEE2, 0xB3B3, 0, 0, /* 0x30 */ + 0xCEFC, 0xB4B5, 0, 0xCEC7, 0xBAF0, 0, 0xCEE1, 0, /* 0x30 */ + 0xD1BD, 0, 0, 0xDFC0, 0, 0, 0xB4F4, 0, /* 0x40 */ + 0xB3CA, 0, 0xB8E6, 0xDFBB, 0, 0, 0, 0, /* 0x40 */ + 0xC4C5, 0, 0xDFBC, 0xDFBD, 0xDFBE, 0xC5BB, 0xDFBF, 0xDFC2, /* 0x50 */ + 0xD4B1, 0xDFC3, 0, 0xC7BA, 0xCED8, 0, 0, 0, /* 0x50 */ + 0, 0, 0xC4D8, 0, 0xDFCA, 0, 0xDFCF, 0, /* 0x60 */ + 0xD6DC, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xDFC9, 0xDFDA, 0xCEB6, 0, 0xBAC7, 0xDFCE, 0xDFC8, /* 0x70 */ + 0xC5DE, 0, 0, 0xC9EB, 0xBAF4, 0xC3FC, 0, 0, /* 0x70 */ + 0xBED7, 0, 0xDFC6, 0, 0xDFCD, 0, 0xC5D8, 0, /* 0x80 */ + 0, 0, 0, 0xD5A6, 0xBACD, 0, 0xBECC, 0xD3BD, /* 0x80 */ + 0xB8C0, 0, 0xD6E4, 0, 0xDFC7, 0xB9BE, 0xBFA7, 0, /* 0x90 */ + 0, 0xC1FC, 0xDFCB, 0xDFCC, 0, 0xDFD0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xDFDB, 0xDFE5, 0, 0xDFD7, 0xDFD6, /* 0xA0 */ + 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0, 0xBFA9, /* 0xA0 */ + 0, 0xD4DB, 0, 0xBFC8, 0xDFD4, 0, 0, 0, /* 0xB0 */ + 0xCFCC, 0, 0, 0xDFDD, 0, 0xD1CA, 0, 0xDFDE, /* 0xB0 */ + 0xB0A7, 0xC6B7, 0xDFD3, 0, 0xBAE5, 0, 0xB6DF, 0xCDDB, /* 0xC0 */ + 0xB9FE, 0xD4D5, 0, 0, 0xDFDF, 0xCFEC, 0xB0A5, 0xDFE7, /* 0xC0 */ + 0xDFD1, 0xD1C6, 0xDFD5, 0xDFD8, 0xDFD9, 0xDFDC, 0, 0xBBA9, /* 0xD0 */ + 0, 0xDFE0, 0xDFE1, 0, 0xDFE2, 0xDFE6, 0xDFE8, 0xD3B4, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xB8E7, 0xC5B6, 0xDFEA, /* 0xE0 */ + 0xC9DA, 0xC1A8, 0xC4C4, 0, 0, 0xBFDE, 0xCFF8, 0, /* 0xE0 */ + 0, 0, 0xD5DC, 0xDFEE, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xB2B8, 0, 0xBADF, 0xDFEC, 0, 0xDBC1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1E4, 0, 0, 0, 0, 0xCBF4, 0xB4BD, /* 0x00 */ + 0, 0xB0A6, 0, 0, 0, 0, 0, 0xDFF1, /* 0x00 */ + 0xCCC6, 0xDFF2, 0, 0, 0xDFED, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xDFE9, 0, 0, 0, 0, /* 0x10 */ + 0xDFEB, 0, 0xDFEF, 0xDFF0, 0xBBBD, 0, 0, 0xDFF3, /* 0x20 */ + 0, 0, 0xDFF4, 0, 0xBBA3, 0, 0xCADB, 0xCEA8, /* 0x20 */ + 0xE0A7, 0xB3AA, 0, 0xE0A6, 0, 0, 0, 0xE0A1, /* 0x30 */ + 0, 0, 0, 0, 0xDFFE, 0, 0xCDD9, 0xDFFC, /* 0x30 */ + 0, 0xDFFA, 0, 0xBFD0, 0xD7C4, 0, 0xC9CC, 0, /* 0x40 */ + 0, 0xDFF8, 0xB0A1, 0, 0, 0, 0, 0, /* 0x40 */ + 0xDFFD, 0, 0, 0, 0, 0xDFFB, 0xE0A2, 0, /* 0x50 */ + 0, 0, 0, 0, 0xE0A8, 0, 0, 0, /* 0x50 */ + 0, 0xB7C8, 0, 0, 0xC6A1, 0xC9B6, 0xC0B2, 0xDFF5, /* 0x60 */ + 0, 0, 0xC5BE, 0, 0xD8C4, 0xDFF9, 0xC4F6, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE0A3, 0xE0A4, 0xE0A5, /* 0x70 */ + 0xD0A5, 0, 0, 0xE0B4, 0xCCE4, 0, 0xE0B1, 0, /* 0x70 */ + 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0, 0, 0xC0AE, /* 0x80 */ + 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0, 0, 0, 0xDFF6, /* 0x80 */ + 0, 0xE0B3, 0, 0, 0xE0B8, 0, 0, 0, /* 0x90 */ + 0xB4AD, 0xE0B9, 0, 0, 0xCFB2, 0xBAC8, 0, 0xE0B0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xD0FA, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE0AC, 0, 0xD4FB, 0, 0xDFF7, 0, 0xC5E7, /* 0xB0 */ + 0, 0xE0AD, 0, 0xD3F7, 0, 0xE0B6, 0xE0B7, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE0C4, 0xD0E1, 0, 0, /* 0xC0 */ + 0, 0xE0BC, 0, 0, 0xE0C9, 0xE0CA, 0, 0, /* 0xC0 */ + 0, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0, 0xE0B2, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xCAC8, 0xE0C3, 0, 0xE0B5, /* 0xD0 */ + 0, 0xCECB, 0, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0, /* 0xE0 */ + 0xE0CB, 0, 0xE0BA, 0xE0BF, 0xE0C0, 0, 0, 0xE0C5, /* 0xE0 */ + 0, 0, 0xE0C7, 0xE0C8, 0, 0xE0CC, 0, 0xE0BB, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xCBD4, 0xE0D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0D6, 0xE0D2, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE0D0, 0xBCCE, 0, 0, 0xE0D1, 0, 0xB8C2, 0xD8C5, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xD0EA, 0, 0, 0xC2EF, 0, 0, 0xE0CF, 0xE0BD, /* 0x10 */ + 0, 0, 0, 0xE0D4, 0xE0D3, 0, 0, 0xE0D7, /* 0x20 */ + 0, 0, 0, 0, 0xE0DC, 0xE0D8, 0, 0, /* 0x20 */ + 0, 0xD6F6, 0xB3B0, 0, 0xD7EC, 0, 0xCBBB, 0, /* 0x30 */ + 0, 0xE0DA, 0, 0xCEFB, 0, 0, 0, 0xBAD9, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE0E1, 0xE0DD, 0xD2AD, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE0E2, 0, 0, 0xE0DB, /* 0x50 */ + 0xE0D9, 0xE0DF, 0, 0, 0xE0E0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE0DE, 0, 0xE0E4, 0, 0, 0, /* 0x60 */ + 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0, 0, 0, /* 0x60 */ + 0, 0xE0E5, 0, 0, 0, 0, 0xB8C1, 0, /* 0x70 */ + 0, 0, 0, 0xE0E7, 0xE0E8, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE0E9, 0xE0E3, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xBABF, 0xCCE7, /* 0x80 */ + 0, 0, 0, 0xE0EA, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xCFF9, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE0EB, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xC8C2, /* 0xB0 */ + 0, 0, 0, 0, 0xBDC0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xC4D2, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE0EC, 0, 0, 0xE0ED, /* 0xD0 */ + 0, 0, 0xC7F4, 0xCBC4, 0, 0xE0EE, 0xBBD8, 0xD8B6, /* 0xD0 */ + 0xD2F2, 0xE0EF, 0xCDC5, 0, 0xB6DA, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE0F1, 0, 0xD4B0, 0, 0, /* 0xE0 */ + 0xC0A7, 0xB4D1, 0, 0, 0xCEA7, 0xE0F0, 0, 0, /* 0xF0 */ + 0, 0xE0F2, 0xB9CC, 0, 0, 0xB9FA, 0xCDBC, 0xE0F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6D4, 0xE0F4, 0, 0xD4B2, 0, /* 0x00 */ + 0xC8A6, 0xE0F6, 0xE0F5, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xE0F7, 0, 0, 0xCDC1, /* 0x10 */ + 0, 0, 0, 0xCAA5, 0, 0, 0, 0, /* 0x20 */ + 0xD4DA, 0xDBD7, 0xDBD9, 0, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, /* 0x20 */ + 0xB5D8, 0, 0, 0xDBDA, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDBDB, 0xB3A1, 0xDBDF, 0, 0, 0xBBF8, 0, /* 0x30 */ + 0xD6B7, 0, 0xDBE0, 0, 0, 0, 0, 0xBEF9, /* 0x40 */ + 0, 0, 0xB7BB, 0, 0xDBD0, 0xCCAE, 0xBFB2, 0xBBB5, /* 0x40 */ + 0xD7F8, 0xBFD3, 0, 0, 0, 0, 0, 0xBFE9, /* 0x50 */ + 0, 0, 0xBCE1, 0xCCB3, 0xDBDE, 0xB0D3, 0xCEEB, 0xB7D8, /* 0x50 */ + 0xD7B9, 0xC6C2, 0, 0, 0xC0A4, 0, 0xCCB9, 0, /* 0x60 */ + 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0, 0xDBE8, 0, 0xC5F7, /* 0x60 */ + 0, 0, 0, 0xDBEA, 0, 0, 0xDBE9, 0xBFC0, /* 0x70 */ + 0, 0, 0, 0xDBE6, 0xDBE5, 0, 0, 0, /* 0x70 */ + 0, 0, 0xB4B9, 0xC0AC, 0xC2A2, 0xDBE2, 0xDBE4, 0, /* 0x80 */ + 0, 0, 0, 0xD0CD, 0xDBED, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC0DD, 0xDBF2, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xB6E2, 0, 0, 0, 0, /* 0x90 */ + 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0, 0xBFD1, 0xDBF0, /* 0xA0 */ + 0, 0xDBD1, 0, 0xB5E6, 0, 0xDBEB, 0xBFE5, 0, /* 0xA0 */ + 0, 0, 0xDBEE, 0, 0xDBF1, 0, 0, 0, /* 0xB0 */ + 0xDBF9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xB9A1, 0xB0A3, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xC2F1, 0, 0, 0xB3C7, 0xDBEF, /* 0xC0 */ + 0, 0, 0xDBF8, 0, 0xC6D2, 0xDBF4, 0, 0, /* 0xD0 */ + 0xDBF5, 0xDBF7, 0xDBF6, 0, 0, 0xDBFE, 0, 0xD3F2, /* 0xD0 */ + 0xB2BA, 0, 0, 0, 0xDBFD, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xDCA4, 0, 0xDBFB, /* 0xE0 */ + 0, 0, 0, 0, 0xDBFA, 0, 0, 0, /* 0xF0 */ + 0xDBFC, 0xC5E0, 0xBBF9, 0, 0, 0xDCA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCA5, 0, 0xCCC3, 0, 0, 0, 0xB6D1, 0xDDC0, /* 0x00 */ + 0, 0, 0, 0xDCA1, 0, 0xDCA2, 0, 0, /* 0x00 */ + 0, 0xC7B5, 0, 0, 0, 0xB6E9, 0, 0, /* 0x10 */ + 0, 0xDCA7, 0, 0, 0, 0, 0xDCA6, 0, /* 0x10 */ + 0xDCA9, 0xB1A4, 0, 0, 0xB5CC, 0, 0, 0, /* 0x20 */ + 0, 0, 0xBFB0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD1DF, 0, 0, 0, 0, 0xB6C2, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xDCA8, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xCBFA, 0xEBF3, 0, 0, /* 0x40 */ + 0, 0xCBDC, 0, 0, 0xCBFE, 0, 0, 0, /* 0x50 */ + 0xCCC1, 0, 0, 0, 0, 0, 0xC8FB, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xDCAA, 0, 0, /* 0x60 */ + 0, 0, 0, 0xCCEE, 0xDCAB, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xDBD3, 0, /* 0x70 */ + 0xDCAF, 0xDCAC, 0, 0xBEB3, 0, 0xCAFB, 0, 0, /* 0x80 */ + 0, 0xDCAD, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC9CA, 0xC4B9, 0, 0, 0, 0, /* 0x90 */ + 0, 0xC7BD, 0xDCAE, 0, 0, 0, 0xD4F6, 0xD0E6, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xC4AB, 0xB6D5, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xDBD4, 0, 0, 0, /* 0xB0 */ + 0, 0xB1DA, 0, 0, 0, 0xDBD5, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xDBD6, 0, 0, 0, 0xBABE, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xC8C0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xCABF, 0xC8C9, 0, 0xD7B3, 0, /* 0xE0 */ + 0xC9F9, 0, 0, 0xBFC7, 0, 0, 0xBAF8, 0, /* 0xF0 */ + 0, 0xD2BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2BA, 0, 0xB4A6, 0, 0, 0xB1B8, /* 0x00 */ + 0, 0, 0, 0, 0, 0xB8B4, 0, 0xCFC4, /* 0x00 */ + 0, 0, 0, 0, 0xD9E7, 0xCFA6, 0xCDE2, 0, /* 0x10 */ + 0, 0xD9ED, 0xB6E0, 0, 0xD2B9, 0, 0, 0xB9BB, /* 0x10 */ + 0, 0, 0, 0, 0xE2B9, 0xE2B7, 0, 0xB4F3, /* 0x20 */ + 0, 0xCCEC, 0xCCAB, 0xB7F2, 0, 0xD8B2, 0xD1EB, 0xBABB, /* 0x20 */ + 0, 0xCAA7, 0, 0, 0xCDB7, 0, 0, 0xD2C4, /* 0x30 */ + 0xBFE4, 0xBCD0, 0xB6E1, 0, 0xDEC5, 0, 0, 0, /* 0x30 */ + 0, 0xDEC6, 0xDBBC, 0, 0xD1D9, 0, 0, 0xC6E6, /* 0x40 */ + 0xC4CE, 0xB7EE, 0, 0xB7DC, 0, 0, 0xBFFC, 0xD7E0, /* 0x40 */ + 0, 0xC6F5, 0, 0, 0xB1BC, 0xDEC8, 0xBDB1, 0xCCD7, /* 0x50 */ + 0xDECA, 0, 0xDEC9, 0, 0, 0, 0, 0, /* 0x50 */ + 0xB5EC, 0, 0xC9DD, 0, 0, 0xB0C2, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xC5AE, 0xC5AB, 0, 0xC4CC, 0, /* 0x70 */ + 0xBCE9, 0xCBFD, 0, 0, 0, 0xBAC3, 0, 0, /* 0x70 */ + 0, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0, 0xD7B1, 0xB8BE, /* 0x80 */ + 0xC2E8, 0, 0xC8D1, 0, 0, 0xE5FB, 0, 0, /* 0x80 */ + 0, 0, 0xB6CA, 0xBCCB, 0, 0, 0xD1FD, 0xE6A1, /* 0x90 */ + 0, 0xC3EE, 0, 0, 0, 0, 0xE6A4, 0, /* 0x90 */ + 0, 0, 0, 0xE5FE, 0xE6A5, 0xCDD7, 0, 0, /* 0xA0 */ + 0xB7C1, 0xE5FC, 0xE5FD, 0xE6A3, 0, 0, 0xC4DD, 0xE6A8, /* 0xA0 */ + 0, 0, 0xE6A7, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xC3C3, 0, 0xC6DE, 0, 0, 0xE6AA, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xC4B7, 0, /* 0xC0 */ + 0, 0, 0xE6A2, 0xCABC, 0, 0, 0, 0, /* 0xC0 */ + 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0, 0, 0xE6A9, /* 0xD0 */ + 0xE6B0, 0, 0xD2A6, 0, 0xBDAA, 0xE6AD, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE6AF, 0, 0xC0D1, 0, 0, /* 0xE0 */ + 0xD2CC, 0, 0, 0, 0xBCA7, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE6B1, 0, 0xD2F6, 0, 0, 0, 0xD7CB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDFE, 0, 0xCDDE, 0xC2A6, 0xE6AB, 0xE6AC, 0xBDBF, /* 0x00 */ + 0xE6AE, 0xE6B3, 0, 0, 0xE6B2, 0, 0, 0, /* 0x00 */ + 0, 0xE6B6, 0, 0xE6B8, 0, 0, 0, 0, /* 0x10 */ + 0xC4EF, 0, 0, 0, 0xC4C8, 0, 0, 0xBEEA, /* 0x10 */ + 0xC9EF, 0, 0, 0xE6B7, 0, 0xB6F0, 0, 0, /* 0x20 */ + 0, 0xC3E4, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xD3E9, 0xE6B4, 0, 0xE6B5, 0, 0xC8A2, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE6BD, 0, 0, 0, /* 0x30 */ + 0xE6B9, 0, 0, 0, 0, 0, 0xC6C5, 0, /* 0x40 */ + 0, 0xCDF1, 0xE6BB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE6BC, 0, 0, /* 0x50 */ + 0, 0, 0xBBE9, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE6BE, 0, 0, 0, 0, 0xE6BA, /* 0x60 */ + 0, 0, 0xC0B7, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xD3A4, 0xE6BF, 0xC9F4, 0xE6C3, /* 0x70 */ + 0, 0, 0xE6C4, 0, 0, 0, 0, 0xD0F6, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC3BD, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xC3C4, 0xE6C2, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE6C1, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE6C7, 0xCFB1, 0, 0xEBF4, 0, 0, /* 0xB0 */ + 0xE6CA, 0, 0, 0, 0, 0, 0xE6C5, 0, /* 0xB0 */ + 0, 0xBCDE, 0xC9A9, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xBCB5, 0, 0, 0xCFD3, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE6C8, 0, 0xE6C9, 0, 0xE6CE, 0, /* 0xD0 */ + 0xE6D0, 0, 0, 0, 0xE6D1, 0, 0, 0, /* 0xD0 */ + 0xE6CB, 0xB5D5, 0, 0xE6CC, 0, 0, 0xE6CF, 0, /* 0xE0 */ + 0, 0xC4DB, 0, 0xE6C6, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xE6CD /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xE6D2, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE6D4, 0xE6D3, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE6D5, 0, 0xD9F8, 0, 0, 0xE6D6, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE6D7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xD7D3, 0xE6DD, 0, 0xE6DE, 0xBFD7, 0xD4D0, 0, 0xD7D6, /* 0x50 */ + 0xB4E6, 0xCBEF, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0, 0xC3CF, /* 0x50 */ + 0, 0, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0xD1A7, 0, /* 0x60 */ + 0, 0xBAA2, 0xC2CF, 0, 0xD8AB, 0, 0, 0, /* 0x60 */ + 0xCAEB, 0xE5EE, 0, 0xE6DC, 0, 0xB7F5, 0, 0, /* 0x70 */ + 0, 0, 0xC8E6, 0, 0, 0xC4F5, 0, 0, /* 0x70 */ + 0xE5B2, 0xC4FE, 0, 0xCBFC, 0xE5B3, 0xD5AC, 0, 0xD3EE, /* 0x80 */ + 0xCAD8, 0xB0B2, 0, 0xCBCE, 0xCDEA, 0, 0, 0xBAEA, /* 0x80 */ + 0, 0, 0, 0xE5B5, 0, 0xE5B4, 0, 0xD7DA, /* 0x90 */ + 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0xB1A6, 0xCAB5, 0, /* 0x90 */ + 0xB3E8, 0xC9F3, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0, /* 0xA0 */ + 0, 0, 0xCFDC, 0xB9AC, 0, 0, 0, 0, /* 0xA0 */ + 0xD4D7, 0, 0, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0, /* 0xB0 */ + 0xE5B7, 0xC8DD, 0, 0, 0, 0xBFED, 0xB1F6, 0xCBDE, /* 0xB0 */ + 0, 0, 0xBCC5, 0, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, /* 0xC0 */ + 0, 0, 0, 0, 0xB8BB, 0, 0, 0, /* 0xC0 */ + 0xC3C2, 0, 0xBAAE, 0xD4A2, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xC7DE, 0xC4AF, 0xB2EC, /* 0xD0 */ + 0, 0xB9D1, 0, 0, 0xE5BB, 0xC1C8, 0, 0, /* 0xE0 */ + 0xD5AF, 0, 0, 0, 0, 0, 0xE5BC, 0, /* 0xE0 */ + 0xE5BE, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xB4E7, 0xB6D4, 0xCBC2, 0xD1B0, 0xB5BC, 0, 0, 0xCAD9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB7E2, 0, 0, 0xC9E4, 0, 0xBDAB, 0, /* 0x00 */ + 0, 0xCEBE, 0xD7F0, 0, 0, 0, 0, 0xD0A1, /* 0x00 */ + 0, 0xC9D9, 0, 0, 0xB6FB, 0xE6D8, 0xBCE2, 0, /* 0x10 */ + 0xB3BE, 0, 0xC9D0, 0, 0xE6D9, 0xB3A2, 0, 0, /* 0x10 */ + 0, 0, 0xDECC, 0, 0xD3C8, 0xDECD, 0, 0xD2A2, /* 0x20 */ + 0, 0, 0, 0, 0xDECE, 0, 0, 0, /* 0x20 */ + 0, 0xBECD, 0, 0, 0xDECF, 0, 0, 0, /* 0x30 */ + 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0xBEA1, 0xCEB2, 0xC4F2, /* 0x30 */ + 0xBED6, 0xC6A8, 0xB2E3, 0, 0, 0xBED3, 0, 0, /* 0x40 */ + 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0, 0, 0xCABA, 0xC6C1, /* 0x40 */ + 0xE5EC, 0xD0BC, 0, 0, 0, 0xD5B9, 0, 0, /* 0x50 */ + 0, 0xE5ED, 0, 0, 0, 0, 0xCAF4, 0, /* 0x50 */ + 0xCDC0, 0xC2C5, 0, 0xE5EF, 0, 0xC2C4, 0xE5F0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xE5F8, 0xCDCD, /* 0x60 */ + 0, 0xC9BD, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD2D9, 0xE1A8, 0, 0, 0, 0, 0xD3EC, /* 0x70 */ + 0, 0xCBEA, 0xC6F1, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE1AC, 0, 0, 0, 0xE1A7, 0xE1A9, 0, 0, /* 0x80 */ + 0xE1AA, 0xE1AF, 0, 0, 0xB2ED, 0, 0xE1AB, 0xB8DA, /* 0x90 */ + 0xE1AD, 0xE1AE, 0xE1B0, 0xB5BA, 0xE1B1, 0, 0, 0, /* 0x90 */ + 0, 0, 0xE1B3, 0xE1B8, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xD1D2, 0, 0xE1B6, 0xE1B5, 0xC1EB, 0, 0, /* 0xA0 */ + 0, 0xE1B7, 0, 0xD4C0, 0, 0xE1B2, 0, 0xE1BA, /* 0xB0 */ + 0xB0B6, 0, 0, 0, 0, 0xE1B4, 0, 0xBFF9, /* 0xB0 */ + 0, 0xE1B9, 0, 0, 0xE1BB, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE1BE, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE1BC, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xD6C5, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xCFBF, 0, 0, 0xE1BD, 0xE1BF, 0xC2CD, 0, /* 0xE0 */ + 0xB6EB, 0, 0xD3F8, 0, 0, 0xC7CD, 0, 0, /* 0xE0 */ + 0xB7E5, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xBEFE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1C0, 0xE1C1, 0, 0, 0xE1C7, 0xB3E7, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xC6E9, 0, /* 0x00 */ + 0, 0, 0, 0, 0xB4DE, 0, 0xD1C2, 0, /* 0x10 */ + 0, 0, 0, 0xE1C8, 0, 0, 0xE1C6, 0, /* 0x10 */ + 0, 0, 0, 0, 0xE1C5, 0, 0xE1C3, 0xE1C2, /* 0x20 */ + 0, 0xB1C0, 0, 0, 0, 0xD5B8, 0xE1C4, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE1CB, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE1CC, 0xE1CA, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xEFFA, /* 0x40 */ + 0, 0, 0xE1D3, 0xE1D2, 0xC7B6, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE1C9, 0, 0, 0xE1CE, 0, 0xE1D0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE1D4, 0, 0xE1D1, 0xE1CD, 0, 0, 0xE1CF, /* 0x60 */ + 0, 0, 0, 0, 0xE1D5, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE1D6, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE1D7, 0, 0, 0, 0xE1D8, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1DA, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE1DB, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xCEA1, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE7DD, 0, 0xB4A8, 0xD6DD, 0, /* 0xD0 */ + 0, 0xD1B2, 0xB3B2, 0, 0, 0xB9A4, 0xD7F3, 0xC7C9, /* 0xE0 */ + 0xBEDE, 0xB9AE, 0, 0xCED7, 0, 0, 0xB2EE, 0xDBCF, /* 0xE0 */ + 0, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0, 0, 0xCFEF, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xD9E3, 0xBDED /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB1D2, 0xCAD0, 0xB2BC, 0, 0xCBA7, 0xB7AB, 0, /* 0x00 */ + 0xCAA6, 0, 0, 0, 0xCFA3, 0, 0, 0xE0F8, /* 0x00 */ + 0xD5CA, 0xE0FB, 0, 0, 0xE0FA, 0xC5C1, 0xCCFB, 0, /* 0x10 */ + 0xC1B1, 0xE0F9, 0xD6E3, 0xB2AF, 0xD6C4, 0xB5DB, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xB4F8, 0xD6A1, /* 0x20 */ + 0, 0, 0, 0, 0, 0xCFAF, 0xB0EF, 0, /* 0x20 */ + 0, 0xE0FC, 0, 0, 0, 0, 0, 0xE1A1, /* 0x30 */ + 0xB3A3, 0, 0, 0xE0FD, 0xE0FE, 0xC3B1, 0, 0, /* 0x30 */ + 0, 0, 0xC3DD, 0, 0xE1A2, 0xB7F9, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xBBCF, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE1A3, 0xC4BB, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE1A4, 0, 0, 0xE1A5, 0, /* 0x50 */ + 0, 0xE1A6, 0xB4B1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xB8C9, 0xC6BD, 0xC4EA, 0, 0xB2A2, 0, /* 0x70 */ + 0xD0D2, 0, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0, 0xB9E3, /* 0x70 */ + 0xE2CF, 0, 0, 0, 0xD7AF, 0, 0xC7EC, 0xB1D3, /* 0x80 */ + 0, 0, 0xB4B2, 0xE2D1, 0, 0, 0, 0xD0F2, /* 0x80 */ + 0xC2AE, 0xE2D0, 0, 0xBFE2, 0xD3A6, 0xB5D7, 0xE2D2, 0xB5EA, /* 0x90 */ + 0, 0xC3ED, 0xB8FD, 0, 0xB8AE, 0, 0xC5D3, 0xB7CF, /* 0x90 */ + 0xE2D4, 0, 0, 0, 0, 0xE2D3, 0xB6C8, 0xD7F9, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xCDA5, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE2D8, 0, 0xE2D6, 0xCAFC, 0xBFB5, /* 0xB0 */ + 0xD3B9, 0xE2D5, 0, 0, 0, 0, 0xE2D7, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xC1AE, 0xC0C8, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE2DB, 0xE2DA, 0xC0AA, 0, 0, 0xC1CE, 0, /* 0xD0 */ + 0, 0, 0, 0xE2DC, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE2DD, 0, 0xE2DE, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xDBC8, 0, 0xD1D3, 0xCDA2, /* 0xF0 */ + 0, 0, 0xBDA8, 0, 0, 0, 0xDEC3, 0xD8A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBFAA, 0xDBCD, 0xD2EC, 0xC6FA, 0xC5AA, 0, 0, 0, /* 0x00 */ + 0xDEC4, 0, 0xB1D7, 0xDFAE, 0, 0, 0, 0xCABD, /* 0x00 */ + 0, 0xDFB1, 0, 0xB9AD, 0, 0xD2FD, 0, 0xB8A5, /* 0x10 */ + 0xBAEB, 0, 0, 0xB3DA, 0, 0, 0, 0xB5DC, /* 0x10 */ + 0xD5C5, 0, 0, 0, 0, 0xC3D6, 0xCFD2, 0xBBA1, /* 0x20 */ + 0, 0xE5F3, 0xE5F2, 0, 0, 0xE5F4, 0, 0xCDE4, /* 0x20 */ + 0, 0xC8F5, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xB5AF, 0xC7BF, 0, 0xE5F6, 0, 0, 0, /* 0x30 */ + 0xECB0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xE5E6, 0, 0xB9E9, 0xB5B1, 0, 0xC2BC, 0xE5E8, 0xE5E7, /* 0x50 */ + 0xE5E9, 0, 0, 0, 0, 0xD2CD, 0, 0, /* 0x50 */ + 0, 0xE1EA, 0xD0CE, 0, 0xCDAE, 0, 0xD1E5, 0, /* 0x60 */ + 0, 0xB2CA, 0xB1EB, 0, 0xB1F2, 0xC5ED, 0, 0, /* 0x60 */ + 0xD5C3, 0xD3B0, 0, 0xE1DC, 0, 0, 0, 0xE1DD, /* 0x70 */ + 0, 0xD2DB, 0, 0xB3B9, 0xB1CB, 0, 0, 0, /* 0x70 */ + 0xCDF9, 0xD5F7, 0xE1DE, 0, 0xBEB6, 0xB4FD, 0, 0xE1DF, /* 0x80 */ + 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xE1E1, 0, 0, 0, /* 0x80 */ + 0xD0EC, 0, 0xCDBD, 0, 0, 0xE1E2, 0, 0xB5C3, /* 0x90 */ + 0xC5C7, 0xE1E3, 0, 0, 0xE1E4, 0, 0, 0, /* 0x90 */ + 0, 0xD3F9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE1E5, 0, 0xD1AD, 0, 0, 0xE1E6, 0xCEA2, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xE1E7, 0, 0xB5C2, /* 0xB0 */ + 0, 0, 0, 0, 0xE1E8, 0xBBD5, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xD0C4, 0xE2E0, 0xB1D8, 0xD2E4, 0, /* 0xC0 */ + 0, 0xE2E1, 0, 0, 0xBCC9, 0xC8CC, 0, 0xE2E3, /* 0xC0 */ + 0xECFE, 0xECFD, 0xDFAF, 0, 0, 0, 0xE2E2, 0xD6BE, /* 0xD0 */ + 0xCDFC, 0xC3A6, 0, 0, 0, 0xE3C3, 0, 0, /* 0xD0 */ + 0xD6D2, 0xE2E7, 0, 0, 0xE2E8, 0, 0, 0xD3C7, /* 0xE0 */ + 0, 0, 0xE2EC, 0xBFEC, 0, 0xE2ED, 0xE2E5, 0, /* 0xE0 */ + 0, 0xB3C0, 0, 0, 0, 0xC4EE, 0, 0, /* 0xF0 */ + 0xE2EE, 0, 0, 0xD0C3, 0, 0xBAF6, 0xE2E9, 0xB7DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBBB3, 0xCCAC, 0xCBCB, 0xE2E4, 0xE2E6, 0xE2EA, 0xE2EB, 0, /* 0x00 */ + 0, 0, 0xE2F7, 0, 0, 0xE2F4, 0xD4F5, 0xE2F3, /* 0x00 */ + 0, 0, 0xC5AD, 0, 0xD5FA, 0xC5C2, 0xB2C0, 0, /* 0x10 */ + 0, 0xE2EF, 0, 0xE2F2, 0xC1AF, 0xCBBC, 0, 0, /* 0x10 */ + 0xB5A1, 0xE2F9, 0, 0, 0, 0xBCB1, 0xE2F1, 0xD0D4, /* 0x20 */ + 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0, 0, 0, 0xC7D3, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE2F0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD7DC, 0xEDA1, 0, 0, 0xE2F8, /* 0x30 */ + 0, 0xEDA5, 0xE2FE, 0xCAD1, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xC1B5, 0, 0xBBD0, 0, 0, /* 0x40 */ + 0xBFD6, 0, 0xBAE3, 0, 0, 0xCBA1, 0, 0, /* 0x50 */ + 0, 0xEDA6, 0xEDA3, 0, 0, 0xEDA2, 0, 0, /* 0x50 */ + 0, 0, 0xBBD6, 0xEDA7, 0xD0F4, 0, 0, 0xEDA4, /* 0x60 */ + 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0, 0xCFA2, /* 0x60 */ + 0xC7A1, 0, 0, 0xBFD2, 0, 0, 0xB6F1, 0, /* 0x70 */ + 0xE2FA, 0xE2FB, 0xE2FD, 0xE2FC, 0xC4D5, 0xE3A2, 0, 0xD3C1, /* 0x70 */ + 0, 0, 0, 0xE3A7, 0xC7C4, 0, 0, 0, /* 0x80 */ + 0, 0xCFA4, 0, 0, 0xE3A9, 0xBAB7, 0, 0, /* 0x80 */ + 0, 0, 0xE3A8, 0, 0xBBDA, 0, 0xE3A3, 0, /* 0x90 */ + 0, 0, 0xE3A4, 0xE3AA, 0, 0xE3A6, 0, 0xCEF2, /* 0x90 */ + 0xD3C6, 0, 0, 0xBBBC, 0, 0, 0xD4C3, 0, /* 0xA0 */ + 0xC4FA, 0, 0, 0xEDA8, 0xD0FC, 0xE3A5, 0, 0xC3F5, /* 0xA0 */ + 0, 0xE3AD, 0xB1AF, 0, 0xE3B2, 0, 0, 0, /* 0xB0 */ + 0xBCC2, 0, 0, 0xE3AC, 0xB5BF, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xC7E9, 0xE3B0, 0, /* 0xC0 */ + 0, 0, 0xBEAA, 0xCDEF, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xBBF3, 0, 0, 0, 0xCCE8, 0, 0, /* 0xD0 */ + 0xE3AF, 0, 0xE3B1, 0, 0xCFA7, 0xE3AE, 0, 0xCEA9, /* 0xD0 */ + 0xBBDD, 0, 0, 0, 0, 0, 0xB5EB, 0xBEE5, /* 0xE0 */ + 0xB2D2, 0xB3CD, 0, 0xB1B9, 0xE3AB, 0xB2D1, 0xB5AC, 0xB9DF, /* 0xE0 */ + 0xB6E8, 0, 0, 0xCFEB, 0xE3B7, 0, 0xBBCC, 0, /* 0xF0 */ + 0, 0xC8C7, 0xD0CA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE3B8, 0xB3EE, 0, 0, 0, 0, 0xEDA9, 0, /* 0x00 */ + 0xD3FA, 0xD3E4, 0, 0, 0, 0xEDAA, 0xE3B9, 0xD2E2, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE3B5, 0, 0, /* 0x10 */ + 0, 0, 0xD3DE, 0, 0, 0, 0, 0xB8D0, /* 0x10 */ + 0xE3B3, 0, 0, 0xE3B6, 0xB7DF, 0, 0xE3B4, 0xC0A2, /* 0x20 */ + 0, 0, 0, 0xE3BA, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xD4B8, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xB4C8, 0, 0xE3BB, 0, 0xBBC5, 0, 0xC9F7, 0, /* 0x40 */ + 0, 0xC9E5, 0, 0, 0, 0xC4BD, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xEDAB, 0, 0, /* 0x50 */ + 0, 0, 0xC2FD, 0, 0, 0, 0, 0xBBDB, /* 0x60 */ + 0xBFAE, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xCEBF, 0, 0, 0, 0, 0xE3BC, 0, 0xBFB6, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xB1EF, 0, 0, 0xD4F7, 0, /* 0x80 */ + 0, 0, 0, 0, 0xE3BE, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEDAD, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE3BF, /* 0xA0 */ + 0xBAA9, 0xEDAC, 0, 0, 0xE3BD, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE3C0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xBAB6, 0, /* 0xB0 */ + 0, 0, 0xB6AE, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xD0B8, 0, 0xB0C3, 0xEDAE, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xEDAF, 0xC0C1, 0, 0xE3C1, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xC5B3, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE3C2, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xDCB2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDB0, 0, /* 0x00 */ + 0xB8EA, 0, 0xCEEC, 0xEAA7, 0xD0E7, 0xCAF9, 0xC8D6, 0xCFB7, /* 0x00 */ + 0xB3C9, 0xCED2, 0xBDE4, 0, 0, 0xE3DE, 0xBBF2, 0xEAA8, /* 0x10 */ + 0xD5BD, 0, 0xC6DD, 0xEAA9, 0, 0, 0, 0xEAAA, /* 0x10 */ + 0, 0xEAAC, 0xEAAB, 0, 0xEAAE, 0xEAAD, 0, 0, /* 0x20 */ + 0, 0, 0xBDD8, 0, 0xEAAF, 0, 0xC2BE, 0, /* 0x20 */ + 0, 0, 0, 0xB4C1, 0xB4F7, 0, 0, 0xBBA7, /* 0x30 */ + 0, 0, 0, 0, 0, 0xECE6, 0xECE5, 0xB7BF, /* 0x30 */ + 0xCBF9, 0xB1E2, 0, 0xECE7, 0, 0, 0, 0xC9C8, /* 0x40 */ + 0xECE8, 0xECE9, 0, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0, /* 0x40 */ + 0, 0xC6CB, 0xB0C7, 0xB4F2, 0xC8D3, 0, 0, 0, /* 0x50 */ + 0xCDD0, 0, 0, 0xBFB8, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xBFDB, 0, 0, 0xC7A4, 0xD6B4, /* 0x60 */ + 0, 0xC0A9, 0xDED1, 0xC9A8, 0xD1EF, 0xC5A4, 0xB0E7, 0xB3B6, /* 0x60 */ + 0xC8C5, 0, 0, 0xB0E2, 0, 0, 0xB7F6, 0, /* 0x70 */ + 0, 0xC5FA, 0, 0, 0xB6F3, 0, 0xD5D2, 0xB3D0, /* 0x70 */ + 0xBCBC, 0, 0, 0, 0xB3AD, 0, 0, 0, /* 0x80 */ + 0, 0xBEF1, 0xB0D1, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD2D6, 0xCAE3, 0xD7A5, 0, 0xCDB6, 0xB6B6, 0xBFB9, /* 0x90 */ + 0xD5DB, 0, 0xB8A7, 0xC5D7, 0, 0, 0, 0xDED2, /* 0x90 */ + 0xBFD9, 0xC2D5, 0xC7C0, 0, 0xBBA4, 0xB1A8, 0, 0, /* 0xA0 */ + 0xC5EA, 0, 0, 0xC5FB, 0xCCA7, 0, 0, 0, /* 0xA0 */ + 0, 0xB1A7, 0, 0, 0, 0xB5D6, 0, 0, /* 0xB0 */ + 0, 0xC4A8, 0, 0xDED3, 0xD1BA, 0xB3E9, 0, 0xC3F2, /* 0xB0 */ + 0, 0, 0xB7F7, 0, 0xD6F4, 0xB5A3, 0xB2F0, 0xC4B4, /* 0xC0 */ + 0xC4E9, 0xC0AD, 0xDED4, 0, 0xB0E8, 0xC5C4, 0xC1E0, 0, /* 0xC0 */ + 0xB9D5, 0, 0xBEDC, 0xCDD8, 0xB0CE, 0, 0xCDCF, 0xDED6, /* 0xD0 */ + 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0, 0, 0xC4E2, /* 0xD0 */ + 0, 0, 0xC2A3, 0xBCF0, 0, 0xD3B5, 0xC0B9, 0xC5A1, /* 0xE0 */ + 0xB2A6, 0xD4F1, 0, 0, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, /* 0xE0 */ + 0, 0xB9B0, 0, 0xC8AD, 0xCBA9, 0, 0xDED9, 0xBFBD, /* 0xF0 */ + 0, 0, 0, 0, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB3D6, 0xB9D2, 0, 0, 0, 0, 0xD6B8, /* 0x00 */ + 0xEAFC, 0xB0B4, 0, 0, 0, 0, 0xBFE6, 0, /* 0x00 */ + 0, 0xCCF4, 0, 0, 0, 0, 0xCDDA, 0, /* 0x10 */ + 0, 0, 0xD6BF, 0xC2CE, 0, 0xCECE, 0xCCA2, 0xD0AE, /* 0x10 */ + 0xC4D3, 0xB5B2, 0xDED8, 0xD5F5, 0xBCB7, 0xBBD3, 0, 0, /* 0x20 */ + 0xB0A4, 0, 0xC5B2, 0xB4EC, 0, 0, 0, 0xD5F1, /* 0x20 */ + 0, 0, 0xEAFD, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDEDA, 0xCDA6, 0, 0, 0xCDEC, 0, 0, /* 0x30 */ + 0, 0, 0xCEE6, 0xDEDC, 0, 0xCDB1, 0xC0A6, 0, /* 0x40 */ + 0, 0xD7BD, 0, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, /* 0x40 */ + 0xBEE8, 0, 0, 0, 0, 0xB2B6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xC0CC, 0xCBF0, /* 0x50 */ + 0, 0xBCF1, 0xBBBB, 0xB5B7, 0, 0, 0, 0xC5F5, /* 0x60 */ + 0, 0xDEE6, 0, 0, 0, 0xDEE3, 0xBEDD, 0, /* 0x60 */ + 0, 0xDEDF, 0, 0, 0, 0, 0xB4B7, 0xBDDD, /* 0x70 */ + 0, 0, 0xDEE0, 0xC4ED, 0, 0, 0, 0, /* 0x70 */ + 0xCFC6, 0, 0xB5E0, 0, 0, 0, 0, 0xB6DE, /* 0x80 */ + 0xCADA, 0xB5F4, 0xDEE5, 0, 0xD5C6, 0, 0xDEE1, 0xCCCD, /* 0x80 */ + 0xC6FE, 0, 0xC5C5, 0, 0, 0, 0xD2B4, 0, /* 0x90 */ + 0xBEF2, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xC2D3, 0, 0xCCBD, 0xB3B8, 0, 0xBDD3, 0, 0xBFD8, /* 0xA0 */ + 0xCDC6, 0xD1DA, 0xB4EB, 0, 0xDEE4, 0xDEDD, 0xDEE7, 0, /* 0xA0 */ + 0xEAFE, 0, 0, 0xC2B0, 0xDEE2, 0, 0, 0xD6C0, /* 0xB0 */ + 0xB5A7, 0, 0xB2F4, 0, 0xDEE8, 0, 0xDEF2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xDEED, 0, 0xDEF1, 0, /* 0xC0 */ + 0, 0xC8E0, 0, 0, 0, 0xD7E1, 0xDEEF, 0xC3E8, /* 0xC0 */ + 0xCCE1, 0, 0xB2E5, 0, 0, 0, 0xD2BE, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xDEEE, 0, /* 0xD0 */ + 0xDEEB, 0xCED5, 0, 0xB4A7, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xBFAB, 0xBEBE, 0, 0, 0xBDD2, 0, 0, /* 0xE0 */ + 0, 0, 0xDEE9, 0, 0xD4AE, 0, 0xDEDE, 0, /* 0xF0 */ + 0xDEEA, 0, 0, 0, 0, 0xC0BF, 0, 0xDEEC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB2F3, 0xB8E9, 0xC2A7, 0, 0, 0xBDC1, 0, 0, /* 0x00 */ + 0, 0, 0, 0xDEF5, 0xDEF8, 0, 0, 0xB2AB, /* 0x00 */ + 0xB4A4, 0, 0, 0xB4EA, 0xC9A6, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xDEF6, 0xCBD1, 0, 0xB8E3, 0, /* 0x10 */ + 0xDEF7, 0xDEFA, 0, 0, 0, 0, 0xDEF9, 0, /* 0x20 */ + 0, 0, 0xCCC2, 0, 0xB0E1, 0xB4EE, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE5BA, 0, 0, 0, /* 0x30 */ + 0, 0, 0xD0AF, 0, 0, 0xB2EB, 0, 0xEBA1, /* 0x30 */ + 0, 0xDEF4, 0, 0, 0xC9E3, 0xDEF3, 0xB0DA, 0xD2A1, /* 0x40 */ + 0xB1F7, 0, 0xCCAF, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xDEF0, 0, 0xCBA4, 0, 0, 0, /* 0x50 */ + 0xD5AA, 0, 0, 0, 0, 0, 0xDEFB, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xB4DD, /* 0x60 */ + 0, 0xC4A6, 0, 0, 0, 0xDEFD, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xC3FE, 0xC4A1, 0xDFA1, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xC1CC, 0, 0xDEFC, 0xBEEF, 0, 0xC6B2, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xB3C5, 0xC8F6, 0, 0, 0xCBBA, 0xDEFE, 0, /* 0x90 */ + 0, 0xDFA4, 0, 0, 0, 0, 0xD7B2, 0, /* 0x90 */ + 0, 0, 0, 0, 0xB3B7, 0, 0, 0, /* 0xA0 */ + 0, 0xC1C3, 0, 0, 0xC7CB, 0xB2A5, 0xB4E9, 0, /* 0xA0 */ + 0xD7AB, 0, 0, 0, 0, 0xC4EC, 0, 0xDFA2, /* 0xB0 */ + 0xDFA3, 0, 0xDFA5, 0, 0xBAB3, 0, 0, 0, /* 0xB0 */ + 0xDFA6, 0, 0xC0DE, 0, 0, 0xC9C3, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xB2D9, 0xC7E6, 0, /* 0xC0 */ + 0xDFA7, 0, 0xC7DC, 0, 0, 0, 0, 0xDFA8, /* 0xD0 */ + 0xEBA2, 0, 0, 0, 0, 0, 0xCBD3, 0, /* 0xD0 */ + 0, 0, 0xDFAA, 0, 0xDFA9, 0, 0xB2C1 /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC5CA, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xDFAB, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xD4DC, 0, 0, 0, 0, 0, /* 0x10 */ + 0xC8C1, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xDFAC, 0, 0, /* 0x20 */ + 0, 0, 0, 0xBEF0, 0, 0, 0xDFAD, 0xD6A7, /* 0x20 */ + 0, 0, 0, 0, 0xEAB7, 0xEBB6, 0xCAD5, 0, /* 0x30 */ + 0xD8FC, 0xB8C4, 0, 0xB9A5, 0, 0, 0xB7C5, 0xD5FE, /* 0x30 */ + 0, 0, 0, 0, 0, 0xB9CA, 0, 0, /* 0x40 */ + 0xD0A7, 0xF4CD, 0, 0, 0xB5D0, 0, 0, 0xC3F4, /* 0x40 */ + 0, 0xBEC8, 0, 0, 0, 0xEBB7, 0xB0BD, 0, /* 0x50 */ + 0, 0xBDCC, 0, 0xC1B2, 0, 0xB1D6, 0xB3A8, 0, /* 0x50 */ + 0, 0, 0xB8D2, 0xC9A2, 0, 0, 0xB6D8, 0, /* 0x60 */ + 0, 0, 0, 0xEBB8, 0xBEB4, 0, 0, 0, /* 0x60 */ + 0xCAFD, 0, 0xC7C3, 0, 0xD5FB, 0, 0, 0xB7F3, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xCEC4, /* 0x80 */ + 0, 0, 0, 0xD5AB, 0xB1F3, 0, 0, 0, /* 0x80 */ + 0xECB3, 0xB0DF, 0, 0xECB5, 0, 0, 0, 0xB6B7, /* 0x90 */ + 0, 0xC1CF, 0, 0xF5FA, 0xD0B1, 0, 0, 0xD5E5, /* 0x90 */ + 0, 0xCED3, 0, 0, 0xBDEF, 0xB3E2, 0, 0xB8AB, /* 0xA0 */ + 0, 0xD5B6, 0, 0xEDBD, 0, 0xB6CF, 0, 0xCBB9, /* 0xA0 */ + 0xD0C2, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xB7BD, 0, 0, 0xECB6, 0xCAA9, 0, 0, /* 0xB0 */ + 0, 0xC5D4, 0, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0, /* 0xC0 */ + 0, 0, 0, 0xD0FD, 0xECBA, 0, 0xECBB, 0xD7E5, /* 0xC0 */ + 0, 0, 0xECBC, 0, 0, 0, 0xECBD, 0xC6EC, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xCEDE, 0, 0xBCC8, 0, 0, 0xC8D5, 0xB5A9, 0xBEC9, /* 0xE0 */ + 0xD6BC, 0xD4E7, 0, 0, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, /* 0xE0 */ + 0xEABA, 0xBAB5, 0, 0, 0, 0, 0xCAB1, 0xBFF5, /* 0xF0 */ + 0, 0, 0xCDFA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEAC0, 0, 0xB0BA, 0xEABE, 0, 0, 0xC0A5, 0, /* 0x00 */ + 0, 0, 0xEABB, 0, 0xB2FD, 0, 0xC3F7, 0xBBE8, /* 0x00 */ + 0, 0, 0, 0xD2D7, 0xCEF4, 0xEABF, 0, 0, /* 0x10 */ + 0, 0xEABC, 0, 0, 0, 0xEAC3, 0, 0xD0C7, /* 0x10 */ + 0xD3B3, 0, 0, 0, 0, 0xB4BA, 0, 0xC3C1, /* 0x20 */ + 0xD7F2, 0, 0, 0, 0, 0xD5D1, 0, 0xCAC7, /* 0x20 */ + 0, 0xEAC5, 0, 0, 0xEAC4, 0xEAC7, 0xEAC6, 0, /* 0x30 */ + 0, 0, 0, 0, 0xD6E7, 0, 0xCFD4, 0, /* 0x30 */ + 0, 0xEACB, 0, 0xBBCE, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xBDFA, 0xC9CE, 0, 0, 0xEACC, /* 0x40 */ + 0, 0, 0xC9B9, 0xCFFE, 0xEACA, 0xD4CE, 0xEACD, 0xEACF, /* 0x50 */ + 0, 0, 0xCDED, 0, 0, 0, 0, 0xEAC9, /* 0x50 */ + 0, 0xEACE, 0, 0, 0xCEEE, 0, 0xBBDE, 0, /* 0x60 */ + 0xB3BF, 0, 0, 0, 0, 0, 0xC6D5, 0xBEB0, /* 0x60 */ + 0xCEFA, 0, 0, 0, 0xC7E7, 0, 0xBEA7, 0xEAD0, /* 0x70 */ + 0, 0, 0xD6C7, 0, 0, 0, 0xC1C0, 0, /* 0x70 */ + 0, 0, 0xD4DD, 0, 0xEAD1, 0, 0, 0xCFBE, /* 0x80 */ + 0, 0, 0, 0, 0xEAD2, 0, 0, 0, /* 0x80 */ + 0, 0xCAEE, 0, 0, 0, 0, 0xC5AF, 0xB0B5, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEAD4, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAD3, /* 0xA0 */ + 0xF4DF, 0, 0, 0, 0, 0, 0xC4BA, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xB1A9, 0, 0, 0, /* 0xB0 */ + 0, 0xE5DF, 0, 0, 0, 0, 0xEAD5, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xCAEF, 0, 0xEAD6, 0xEAD7, 0xC6D8, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xEAD8, 0, /* 0xE0 */ + 0, 0xEAD9, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xD4BB, 0, 0xC7FA, 0xD2B7, 0xB8FC, 0, 0, 0xEAC2, /* 0xF0 */ + 0, 0xB2DC, 0, 0, 0xC2FC, 0, 0xD4F8, 0xCCE6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7EE, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0, 0xB7FE, 0, 0, /* 0x00 */ + 0xEBD4, 0, 0, 0, 0xCBB7, 0xEBDE, 0, 0xC0CA, /* 0x10 */ + 0, 0, 0, 0xCDFB, 0, 0xB3AF, 0, 0xC6DA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xEBFC, 0, /* 0x20 */ + 0xC4BE, 0, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0, 0xCAF5, /* 0x20 */ + 0, 0xD6EC, 0, 0, 0xC6D3, 0xB6E4, 0, 0, /* 0x30 */ + 0, 0, 0xBBFA, 0, 0, 0xD0E0, 0, 0, /* 0x30 */ + 0xC9B1, 0, 0xD4D3, 0xC8A8, 0, 0, 0xB8CB, 0, /* 0x40 */ + 0xE8BE, 0xC9BC, 0, 0, 0xE8BB, 0, 0xC0EE, 0xD0D3, /* 0x40 */ + 0xB2C4, 0xB4E5, 0, 0xE8BC, 0, 0, 0xD5C8, 0, /* 0x50 */ + 0, 0, 0, 0, 0xB6C5, 0, 0xE8BD, 0xCAF8, /* 0x50 */ + 0xB8DC, 0xCCF5, 0, 0, 0, 0xC0B4, 0, 0, /* 0x60 */ + 0xD1EE, 0xE8BF, 0xE8C2, 0, 0, 0xBABC, 0, 0xB1AD, /* 0x60 */ + 0xBDDC, 0, 0xEABD, 0xE8C3, 0, 0xE8C6, 0, 0xE8CB, /* 0x70 */ + 0, 0, 0, 0, 0xE8CC, 0, 0xCBC9, 0xB0E5, /* 0x70 */ + 0, 0xBCAB, 0, 0, 0xB9B9, 0, 0, 0xE8C1, /* 0x80 */ + 0, 0xCDF7, 0, 0xE8CA, 0, 0, 0, 0, /* 0x80 */ + 0xCEF6, 0, 0, 0, 0, 0xD5ED, 0, 0xC1D6, /* 0x90 */ + 0xE8C4, 0, 0xC3B6, 0, 0xB9FB, 0xD6A6, 0xE8C8, 0, /* 0x90 */ + 0, 0, 0xCAE0, 0xD4E6, 0, 0xE8C0, 0, 0xE8C5, /* 0xA0 */ + 0xE8C7, 0, 0xC7B9, 0xB7E3, 0, 0xE8C9, 0, 0xBFDD, /* 0xA0 */ + 0xE8D2, 0, 0, 0xE8D7, 0, 0xE8D5, 0xBCDC, 0xBCCF, /* 0xB0 */ + 0xE8DB, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE8DE, 0, 0xE8DA, 0xB1FA, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB0D8, /* 0xC0 */ + 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0, 0, 0, /* 0xD0 */ + 0xE8CF, 0xE8D4, 0xE8D6, 0, 0xB9F1, 0xE8D8, 0xD7F5, 0, /* 0xD0 */ + 0xC4FB, 0, 0xE8DC, 0, 0, 0xB2E9, 0, 0, /* 0xE0 */ + 0, 0xE8D1, 0, 0, 0xBCED, 0, 0, 0xBFC2, /* 0xE0 */ + 0xE8CD, 0xD6F9, 0, 0xC1F8, 0xB2F1, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xE8DF, 0, 0xCAC1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE8D9, 0, 0, 0, 0, 0xD5A4, 0, 0xB1EA, /* 0x00 */ + 0xD5BB, 0xE8CE, 0xE8D0, 0xB6B0, 0xE8D3, 0, 0xE8DD, 0xC0B8, /* 0x00 */ + 0, 0xCAF7, 0, 0xCBA8, 0, 0, 0xC6DC, 0xC0F5, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE8E9, 0, 0, /* 0x10 */ + 0, 0xD0A3, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE8F2, 0xD6EA, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE8E0, 0xE8E1, 0, 0, 0, 0xD1F9, /* 0x30 */ + 0xBACB, 0xB8F9, 0, 0, 0xB8F1, 0xD4D4, 0xE8EF, 0, /* 0x30 */ + 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0, /* 0x40 */ + 0xB0B8, 0xE8F1, 0xE8F0, 0, 0xD7C0, 0, 0xE8E4, 0, /* 0x40 */ + 0xCDA9, 0xC9A3, 0, 0xBBB8, 0xBDDB, 0xE8EA, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE8E2, 0xE8E3, 0xE8E5, 0xB5B5, 0xE8E7, 0xC7C5, 0xE8EB, 0xE8ED, /* 0x60 */ + 0xBDB0, 0xD7AE, 0, 0xE8F8, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE8F5, 0, 0xCDB0, 0xE8F6, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC1BA, 0, 0xE8E8, 0, 0xC3B7, 0xB0F0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8F4, /* 0x80 */ + 0, 0, 0, 0xE8F7, 0, 0, 0, 0xB9A3, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xC9D2, 0, 0, 0, 0xC3CE, 0xCEE0, /* 0xA0 */ + 0xC0E6, 0, 0, 0, 0, 0xCBF3, 0, 0xCCDD, /* 0xA0 */ + 0xD0B5, 0, 0, 0xCAE1, 0, 0xE8F3, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xBCEC, 0, 0xE8F9, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xC3DE, 0, 0xC6E5, 0, 0xB9F7, 0, 0, /* 0xC0 */ + 0, 0, 0xB0F4, 0, 0, 0xD7D8, 0, 0, /* 0xD0 */ + 0xBCAC, 0, 0xC5EF, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xCCC4, 0, 0, 0xE9A6, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xC9AD, 0, /* 0xE0 */ + 0xE9A2, 0xC0E2, 0, 0, 0, 0xBFC3, 0, 0, /* 0xF0 */ + 0, 0xE8FE, 0xB9D7, 0, 0xE8FB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9A4, 0, 0, 0, 0xD2CE, 0, 0, /* 0x00 */ + 0, 0, 0, 0xE9A3, 0, 0xD6B2, 0xD7B5, 0, /* 0x00 */ + 0xE9A7, 0, 0xBDB7, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8FC, /* 0x10 */ + 0xE8FD, 0, 0, 0, 0xE9A1, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xCDD6, 0, 0, /* 0x20 */ + 0xD2AC, 0, 0, 0, 0xE9B2, 0, 0, 0, /* 0x30 */ + 0, 0xE9A9, 0, 0, 0, 0xB4AA, 0, 0xB4BB, /* 0x30 */ + 0, 0, 0xE9AB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xD0A8, 0, 0, 0xE9A5, /* 0x50 */ + 0, 0, 0xB3FE, 0, 0, 0xE9AC, 0xC0E3, 0, /* 0x50 */ + 0xE9AA, 0, 0, 0xE9B9, 0, 0, 0xE9B8, 0, /* 0x60 */ + 0, 0, 0, 0xE9AE, 0, 0, 0xE8FA, 0, /* 0x60 */ + 0, 0xE9A8, 0, 0, 0, 0, 0, 0xBFAC, /* 0x70 */ + 0xE9B1, 0xE9BA, 0, 0, 0xC2A5, 0, 0, 0, /* 0x70 */ + 0xE9AF, 0, 0xB8C5, 0, 0xE9AD, 0, 0xD3DC, 0xE9B4, /* 0x80 */ + 0xE9B5, 0xE9B7, 0, 0, 0, 0xE9C7, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xC0C6, 0xE9C5, 0, 0, /* 0x90 */ + 0xE9B0, 0, 0, 0xE9BB, 0xB0F1, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9BC, /* 0xA0 */ + 0xD5A5, 0, 0, 0xE9BE, 0, 0xE9BF, 0, 0, /* 0xA0 */ + 0, 0xE9C1, 0, 0, 0xC1F1, 0, 0, 0xC8B6, /* 0xB0 */ + 0, 0, 0, 0xE9BD, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE9C2, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE9C3, 0, 0xE9B3, 0, 0xE9B6, 0, /* 0xC0 */ + 0xBBB1, 0, 0, 0, 0xE9C0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xBCF7, 0, 0, 0, 0xE9C4, /* 0xD0 */ + 0xE9C6, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE9CA, 0, 0, /* 0xE0 */ + 0, 0, 0xE9CE, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xB2DB, 0, 0xE9C8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xB7AE, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9CB, /* 0x10 */ + 0xE9CC, 0, 0, 0, 0, 0, 0, 0xD5C1, /* 0x10 */ + 0, 0xC4A3, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xE9D8, 0, 0xBAE1, 0, 0, 0, 0, 0xE9C9, /* 0x20 */ + 0, 0xD3A3, 0, 0, 0, 0xE9D4, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE9D7, 0xE9D0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE9CF, 0, 0, 0xC7C1, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xE9D2, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE9D9, 0xB3C8, 0, 0xE9D3, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCFF0, 0, 0, 0, 0xE9CD, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xB3F7, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE9D6, 0, 0, 0xE9DA, 0, 0, 0, /* 0x70 */ + 0xCCB4, 0, 0, 0, 0xCFAD, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xE9D5, 0, /* 0x80 */ + 0xE9DC, 0xE9DB, 0, 0, 0, 0, 0, 0xE9DE, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE9D1, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE9DD, 0, 0xE9DF, 0xC3CA /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7B7, 0xB4CE, 0xBBB6, 0xD0C0, 0xECA3, 0, 0, 0xC5B7, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xD3FB, 0, 0, 0, 0, 0xECA4, /* 0x30 */ + 0, 0xECA5, 0xC6DB, 0, 0, 0, 0xBFEE, 0, /* 0x30 */ + 0, 0, 0, 0xECA6, 0, 0, 0xECA7, 0xD0AA, /* 0x40 */ + 0, 0xC7B8, 0, 0, 0xB8E8, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xECA8, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, /* 0x60 */ + 0, 0, 0xCDE1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB4F5, 0, 0xCBC0, 0xBCDF, 0, 0, 0, /* 0x70 */ + 0, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0, 0xB4F9, 0xE9E4, /* 0x80 */ + 0, 0xD1B3, 0xCAE2, 0xB2D0, 0, 0xE9E8, 0, 0, /* 0x80 */ + 0, 0, 0xE9E6, 0xE9E7, 0, 0, 0xD6B3, 0, /* 0x90 */ + 0, 0, 0xE9E9, 0xE9EA, 0, 0, 0, 0, /* 0x90 */ + 0, 0xE9EB, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE9EC, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xECAF, 0xC5B9, 0xB6CE, 0, 0xD2F3, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB5EE, /* 0xB0 */ + 0, 0xBBD9, 0xECB1, 0, 0, 0xD2E3, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xCEE3, 0, 0xC4B8, 0, 0xC3BF, /* 0xC0 */ + 0, 0, 0xB6BE, 0xD8B9, 0xB1C8, 0xB1CF, 0xB1D1, 0xC5FE, /* 0xD0 */ + 0, 0xB1D0, 0, 0xC3AB, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xD5B1, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xEBA4, 0xBAC1, 0, 0, 0, 0xCCBA, /* 0xE0 */ + 0, 0, 0, 0xEBA5, 0, 0xEBA7, 0, 0, /* 0xF0 */ + 0, 0xEBA8, 0, 0, 0, 0xEBA6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEBA9, 0xEBAB, 0xEBAA, /* 0x00 */ + 0, 0, 0, 0, 0, 0xEBAC, 0, 0xCACF, /* 0x00 */ + 0xD8B5, 0xC3F1, 0, 0xC3A5, 0xC6F8, 0xEBAD, 0xC4CA, 0, /* 0x10 */ + 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0, 0, 0, 0xB7FA, /* 0x10 */ + 0, 0xEBB1, 0xC7E2, 0, 0xEBB3, 0, 0xBAA4, 0xD1F5, /* 0x20 */ + 0xB0B1, 0xEBB2, 0xEBB4, 0, 0, 0, 0xB5AA, 0xC2C8, /* 0x20 */ + 0xC7E8, 0, 0xEBB5, 0, 0xCBAE, 0xE3DF, 0, 0, /* 0x30 */ + 0xD3C0, 0, 0, 0, 0, 0xD9DB, 0, 0, /* 0x30 */ + 0xCDA1, 0xD6AD, 0xC7F3, 0, 0, 0, 0xD9E0, 0xBBE3, /* 0x40 */ + 0, 0xBABA, 0xE3E2, 0, 0, 0, 0, 0, /* 0x40 */ + 0xCFAB, 0, 0, 0, 0xE3E0, 0xC9C7, 0, 0xBAB9, /* 0x50 */ + 0, 0, 0, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, /* 0x50 */ + 0xB3D8, 0xCEDB, 0, 0, 0xCCC0, 0, 0, 0, /* 0x60 */ + 0xE3E8, 0xE3E9, 0xCDF4, 0, 0, 0, 0, 0, /* 0x60 */ + 0xCCAD, 0, 0xBCB3, 0, 0xE3EA, 0, 0xE3EB, 0, /* 0x70 */ + 0, 0xD0DA, 0, 0, 0, 0xC6FB, 0xB7DA, 0, /* 0x70 */ + 0, 0xC7DF, 0xD2CA, 0xCED6, 0, 0xE3E4, 0xE3EC, 0, /* 0x80 */ + 0xC9F2, 0xB3C1, 0, 0, 0xE3E7, 0, 0, 0xC6E3, /* 0x80 */ + 0xE3E5, 0, 0, 0xEDB3, 0xE3E6, 0, 0, 0, /* 0x90 */ + 0, 0xC9B3, 0, 0xC5E6, 0, 0, 0, 0xB9B5, /* 0x90 */ + 0, 0xC3BB, 0, 0xE3E3, 0xC5BD, 0xC1A4, 0xC2D9, 0xB2D7, /* 0xA0 */ + 0, 0xE3ED, 0xBBA6, 0xC4AD, 0, 0xE3F0, 0xBEDA, 0, /* 0xA0 */ + 0, 0xE3FB, 0xE3F5, 0xBAD3, 0, 0, 0, 0, /* 0xB0 */ + 0xB7D0, 0xD3CD, 0, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, /* 0xB0 */ + 0, 0, 0, 0, 0xD0B9, 0xC7F6, 0, 0, /* 0xC0 */ + 0, 0xC8AA, 0xB2B4, 0, 0xC3DA, 0, 0, 0, /* 0xC0 */ + 0xE3EE, 0, 0, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, /* 0xD0 */ + 0, 0, 0, 0xB7BA, 0, 0, 0xC5A2, 0, /* 0xD0 */ + 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0, 0xC4E0, 0, 0, /* 0xE0 */ + 0xD7A2, 0, 0xC0E1, 0xE3F9, 0, 0, 0xE3FA, 0xE3FD, /* 0xE0 */ + 0xCCA9, 0xE3F3, 0, 0xD3BE, 0, 0xB1C3, 0xEDB4, 0xE3F1, /* 0xF0 */ + 0xE3F2, 0, 0xE3F8, 0xD0BA, 0xC6C3, 0xD4F3, 0xE3FE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDE0, 0, 0, 0xE4A7, 0, 0, 0xE4A6, /* 0x00 */ + 0, 0, 0, 0xD1F3, 0xE4A3, 0, 0xE4A9, 0, /* 0x00 */ + 0, 0, 0xC8F7, 0, 0, 0, 0, 0xCFB4, /* 0x10 */ + 0, 0xE4A8, 0xE4AE, 0xC2E5, 0, 0, 0xB6B4, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xBDF2, 0, 0xE4A2, /* 0x20 */ + 0, 0, 0xBAE9, 0xE4AA, 0, 0, 0xE4AC, 0, /* 0x20 */ + 0, 0xB6FD, 0xD6DE, 0xE4B2, 0, 0xE4AD, 0, 0, /* 0x30 */ + 0, 0xE4A1, 0, 0xBBEE, 0xCDDD, 0xC7A2, 0xC5C9, 0, /* 0x30 */ + 0, 0xC1F7, 0, 0xE4A4, 0, 0xC7B3, 0xBDAC, 0xBDBD, /* 0x40 */ + 0xE4A5, 0, 0xD7C7, 0xB2E2, 0, 0xE4AB, 0xBCC3, 0xE4AF, /* 0x40 */ + 0, 0xBBEB, 0xE4B0, 0xC5A8, 0xE4B1, 0, 0, 0, /* 0x50 */ + 0, 0xD5E3, 0xBFA3, 0, 0xE4BA, 0, 0xE4B7, 0, /* 0x50 */ + 0xE4BB, 0, 0, 0xE4BD, 0, 0, 0xC6D6, 0, /* 0x60 */ + 0, 0xBAC6, 0xC0CB, 0, 0, 0, 0xB8A1, 0xE4B4, /* 0x60 */ + 0, 0, 0, 0, 0xD4A1, 0, 0, 0xBAA3, /* 0x70 */ + 0xBDFE, 0, 0, 0, 0xE4BC, 0, 0, 0, /* 0x70 */ + 0, 0, 0xCDBF, 0, 0, 0xC4F9, 0, 0, /* 0x80 */ + 0xCFFB, 0xC9E6, 0, 0, 0xD3BF, 0, 0xCFD1, 0, /* 0x80 */ + 0, 0xE4B3, 0, 0xE4B8, 0xE4B9, 0xCCE9, 0, 0, /* 0x90 */ + 0, 0, 0, 0xCCCE, 0, 0xC0D4, 0xE4B5, 0xC1B0, /* 0x90 */ + 0xE4B6, 0xCED0, 0, 0xBBC1, 0xB5D3, 0, 0xC8F3, 0xBDA7, /* 0xA0 */ + 0xD5C7, 0xC9AC, 0xB8A2, 0xE4CA, 0, 0, 0xE4CC, 0xD1C4, /* 0xA0 */ + 0, 0, 0xD2BA, 0, 0, 0xBAAD, 0, 0, /* 0xB0 */ + 0xBAD4, 0, 0, 0, 0, 0, 0, 0xE4C3, /* 0xB0 */ + 0xB5ED, 0, 0, 0, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, /* 0xC0 */ + 0, 0, 0, 0xC1DC, 0xCCCA, 0, 0, 0, /* 0xC0 */ + 0, 0xCAE7, 0, 0, 0, 0, 0xC4D7, 0, /* 0xD0 */ + 0xCCD4, 0xE4C8, 0, 0, 0, 0xE4C7, 0xE4C1, 0, /* 0xD0 */ + 0xE4C4, 0xB5AD, 0, 0, 0xD3D9, 0, 0xE4C6, 0, /* 0xE0 */ + 0, 0, 0, 0xD2F9, 0xB4E3, 0, 0xBBB4, 0, /* 0xE0 */ + 0, 0xC9EE, 0, 0xB4BE, 0, 0, 0, 0xBBEC, /* 0xF0 */ + 0, 0xD1CD, 0, 0xCCED, 0xEDB5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7E5, 0, 0, /* 0x00 */ + 0, 0, 0xD4A8, 0, 0xE4CB, 0xD7D5, 0xE4C2, 0, /* 0x00 */ + 0xBDA5, 0xE4C5, 0, 0, 0xD3E6, 0, 0xE4C9, 0xC9F8, /* 0x10 */ + 0, 0, 0xE4BE, 0, 0, 0xD3E5, 0, 0, /* 0x10 */ + 0xC7FE, 0xB6C9, 0, 0xD4FC, 0xB2B3, 0xE4D7, 0, 0, /* 0x20 */ + 0, 0xCEC2, 0, 0xE4CD, 0, 0xCEBC, 0, 0xB8DB, /* 0x20 */ + 0, 0, 0xE4D6, 0, 0xBFCA, 0, 0, 0, /* 0x30 */ + 0xD3CE, 0, 0xC3EC, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xC5C8, 0xE4D8, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xCDC4, 0xE4CF, 0, /* 0x40 */ + 0, 0, 0, 0xE4D4, 0xE4D5, 0, 0xBAFE, 0, /* 0x50 */ + 0xCFE6, 0, 0, 0xD5BF, 0, 0, 0, 0xE4D2, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE4D0, 0, 0, 0xE4CE, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xCDE5, 0xCAAA, /* 0x70 */ + 0, 0, 0, 0xC0A3, 0, 0xBDA6, 0xE4D3, 0, /* 0x80 */ + 0, 0xB8C8, 0, 0, 0, 0, 0, 0xE4E7, /* 0x80 */ + 0xD4B4, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE4DB, 0, 0, 0, 0xC1EF, 0, 0, 0xE4E9, /* 0x90 */ + 0, 0, 0xD2E7, 0, 0, 0xE4DF, 0, 0xE4E0, /* 0xA0 */ + 0, 0, 0xCFAA, 0, 0, 0, 0, 0xCBDD, /* 0xA0 */ + 0, 0xE4DA, 0xE4D1, 0, 0xE4E5, 0, 0xC8DC, 0xE4E3, /* 0xB0 */ + 0, 0, 0xC4E7, 0xE4E2, 0, 0xE4E1, 0, 0, /* 0xB0 */ + 0, 0xB3FC, 0xE4E8, 0, 0, 0, 0, 0xB5E1, /* 0xC0 */ + 0, 0, 0, 0xD7CC, 0, 0, 0, 0xE4E6, /* 0xC0 */ + 0, 0xBBAC, 0, 0xD7D2, 0xCCCF, 0xEBF8, 0, 0xE4E4, /* 0xD0 */ + 0, 0, 0xB9F6, 0, 0, 0, 0xD6CD, 0xE4D9, /* 0xD0 */ + 0xE4DC, 0xC2FA, 0xE4DE, 0, 0xC2CB, 0xC0C4, 0xC2D0, 0, /* 0xE0 */ + 0xB1F5, 0xCCB2, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xB5CE, 0, 0, 0, /* 0xF0 */ + 0, 0xE4EF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6AF, 0, 0, 0, 0xC6E1, 0, /* 0x00 */ + 0, 0xE4F5, 0, 0, 0, 0, 0, 0xC2A9, /* 0x00 */ + 0, 0, 0, 0xC0EC, 0xD1DD, 0xE4EE, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xC4AE, 0, 0, 0, 0xE4ED, 0, 0, 0, /* 0x20 */ + 0, 0xE4F6, 0xE4F4, 0xC2FE, 0, 0xE4DD, 0, 0xE4F0, /* 0x20 */ + 0, 0xCAFE, 0, 0xD5C4, 0, 0, 0xE4F1, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xD1FA, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE4EB, 0xE4EC, /* 0x40 */ + 0, 0, 0, 0xE4F2, 0, 0xCEAB, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xC5CB, 0, 0, 0, 0xC7B1, 0, 0xC2BA, 0, /* 0x50 */ + 0, 0, 0xE4EA, 0, 0, 0, 0xC1CA, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xCCB6, 0xB3B1, 0, /* 0x60 */ + 0, 0, 0xE4FB, 0, 0xE4F3, 0, 0, 0, /* 0x70 */ + 0xE4FA, 0, 0xE4FD, 0, 0xE4FC, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xB3CE, 0, 0, 0, /* 0x80 */ + 0xB3BA, 0xE4F7, 0, 0, 0xE4F9, 0xE4F8, 0xC5EC, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xC0BD, 0, 0, 0, /* 0x90 */ + 0, 0xD4E8, 0, 0, 0, 0, 0, 0xE5A2, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xB0C4, 0, 0, 0xE5A4, 0, /* 0xB0 */ + 0, 0xE5A3, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xBCA4, 0, 0xE5A5, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE5A1, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE4FE, 0xB1F4, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xE5A8, 0, /* 0xD0 */ + 0xE5A9, 0xE5A6, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xE5A7, 0xE5AA /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6D9, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xE5AB, 0xE5AD, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE5AC, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE5AF, 0, 0, /* 0x30 */ + 0, 0xE5AE, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xB9E0, 0, 0, 0xE5B0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xE5B1, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xBBF0, 0xECE1, 0xC3F0, 0, 0xB5C6, /* 0x60 */ + 0xBBD2, 0, 0, 0, 0, 0xC1E9, 0xD4EE, 0, /* 0x70 */ + 0xBEC4, 0, 0, 0, 0xD7C6, 0, 0xD4D6, 0xB2D3, /* 0x70 */ + 0xECBE, 0, 0, 0, 0, 0xEAC1, 0, 0, /* 0x80 */ + 0, 0xC2AF, 0xB4B6, 0, 0, 0, 0xD1D7, 0, /* 0x80 */ + 0, 0, 0xB3B4, 0, 0xC8B2, 0xBFBB, 0xECC0, 0, /* 0x90 */ + 0, 0xD6CB, 0, 0, 0xECBF, 0xECC1, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, /* 0xA0 */ + 0, 0xECC6, 0, 0xB1FE, 0, 0, 0, 0xECC4, /* 0xB0 */ + 0xD5A8, 0xB5E3, 0, 0xECC2, 0xC1B6, 0xB3E3, 0, 0, /* 0xB0 */ + 0xECC3, 0xCBB8, 0xC0C3, 0xCCFE, 0, 0, 0, 0, /* 0xC0 */ + 0xC1D2, 0, 0xECC8, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xBAE6, 0xC0D3, 0, 0xD6F2, 0, 0, 0, 0xD1CC, /* 0xD0 */ + 0, 0, 0, 0, 0xBFBE, 0, 0xB7B3, 0xC9D5, /* 0xE0 */ + 0xECC7, 0xBBE2, 0, 0xCCCC, 0xBDFD, 0xC8C8, 0, 0xCFA9, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCDE9, /* 0xF0 */ + 0, 0xC5EB, 0, 0, 0, 0xB7E9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xD1C9, 0xBAB8, 0, 0, 0, 0, 0, /* 0x00 */ + 0xECC9, 0, 0, 0xECCA, 0, 0xBBC0, 0xECCB, 0, /* 0x10 */ + 0xECE2, 0xB1BA, 0xB7D9, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xBDB9, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xECCC, /* 0x20 */ + 0xD1E6, 0xECCD, 0, 0, 0, 0, 0xC8BB, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xECD1, 0, 0, /* 0x40 */ + 0, 0, 0xECD3, 0, 0xBBCD, 0, 0xBCE5, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xECCF, 0, 0xC9B7, 0, /* 0x50 */ + 0, 0, 0, 0, 0xC3BA, 0, 0xECE3, 0xD5D5, /* 0x60 */ + 0xECD0, 0, 0, 0, 0, 0, 0xD6F3, 0, /* 0x60 */ + 0, 0, 0xECD2, 0xECCE, 0, 0, 0, 0, /* 0x70 */ + 0xECD4, 0, 0xECD5, 0, 0, 0xC9BF, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xCFA8, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD0DC, 0, 0, 0, 0, 0xD1AC, /* 0x80 */ + 0, 0, 0, 0, 0xC8DB, 0, 0, 0, /* 0x90 */ + 0xECD6, 0xCEF5, 0, 0, 0, 0, 0, 0xCAEC, /* 0x90 */ + 0xECDA, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xECD9, 0, 0, 0, 0xB0BE, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xECD7, 0, 0xECD8, 0, 0, /* 0xB0 */ + 0, 0xECE4, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xC8BC, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xC1C7, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xECDC, 0xD1E0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xECDB, 0, 0, 0, 0, 0xD4EF, 0, 0xECDD, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xDBC6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xECDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB1AC, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xECDF, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xECE0, 0, 0xD7A6, 0, 0xC5C0, 0, 0, 0, /* 0x20 */ + 0xEBBC, 0xB0AE, 0, 0, 0, 0xBEF4, 0xB8B8, 0xD2AF, /* 0x30 */ + 0xB0D6, 0xB5F9, 0, 0xD8B3, 0, 0xCBAC, 0, 0xE3DD, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xC6AC, /* 0x40 */ + 0xB0E6, 0, 0, 0, 0xC5C6, 0xEBB9, 0, 0, /* 0x40 */ + 0, 0, 0xEBBA, 0, 0, 0, 0xEBBB, 0, /* 0x50 */ + 0, 0xD1C0, 0, 0xC5A3, 0, 0xEAF2, 0, 0xC4B2, /* 0x50 */ + 0, 0xC4B5, 0xC0CE, 0, 0, 0, 0xEAF3, 0xC4C1, /* 0x60 */ + 0, 0xCEEF, 0, 0, 0, 0, 0xEAF0, 0xEAF4, /* 0x60 */ + 0, 0, 0xC9FC, 0, 0, 0xC7A3, 0, 0, /* 0x70 */ + 0, 0xCCD8, 0xCEFE, 0, 0, 0, 0xEAF5, 0xEAF6, /* 0x70 */ + 0xCFAC, 0xC0E7, 0, 0, 0xEAF7, 0, 0, 0, /* 0x80 */ + 0, 0, 0xB6BF, 0xEAF8, 0, 0xEAF9, 0, 0xEAFA, /* 0x80 */ + 0, 0, 0xEAFB, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAF1, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xC8AE, 0xE1EB, 0, 0xB7B8, /* 0xA0 */ + 0xE1EC, 0, 0, 0, 0xE1ED, 0, 0xD7B4, 0xE1EE, /* 0xB0 */ + 0xE1EF, 0xD3CC, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0, 0, 0, /* 0xC0 */ + 0xB1B7, 0, 0, 0, 0, 0xE1F3, 0xE1F2, 0, /* 0xC0 */ + 0xBAFC, 0, 0xE1F4, 0, 0, 0, 0, 0xB9B7, /* 0xD0 */ + 0, 0xBED1, 0, 0, 0, 0, 0xC4FC, 0, /* 0xD0 */ + 0xBADD, 0xBDC6, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE1F5, 0xE1F7, 0, 0, 0xB6C0, 0xCFC1, 0xCAA8, 0xE1F6, /* 0xE0 */ + 0xD5F8, 0xD3FC, 0xE1F8, 0xE1FC, 0xE1F9, 0, 0, 0xE1FA, /* 0xF0 */ + 0xC0EA, 0, 0xE1FE, 0xE2A1, 0xC0C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1FB, 0, 0xE1FD, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE2A5, 0, 0, 0, 0xC1D4, 0, /* 0x00 */ + 0, 0, 0, 0xE2A3, 0, 0xE2A8, 0xB2FE, 0xE2A2, /* 0x10 */ + 0, 0, 0, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0, /* 0x10 */ + 0, 0xE2A4, 0xE2A9, 0, 0, 0xE2AB, 0, 0, /* 0x20 */ + 0, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0, 0xCFD7, 0, /* 0x20 */ + 0, 0xE2AE, 0, 0, 0xBAEF, 0, 0, 0xE9E0, /* 0x30 */ + 0xE2AD, 0xE2AA, 0, 0, 0, 0, 0xBBAB, 0xD4B3, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE2B0, 0, 0, /* 0x40 */ + 0xE2AF, 0, 0xE9E1, 0, 0, 0, 0, 0xE2B1, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE2B2, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE2B3, 0xCCA1, 0, 0xE2B4, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE2B5, 0, /* 0x70 */ + 0, 0, 0, 0, 0xD0FE, 0, 0, 0xC2CA, /* 0x80 */ + 0, 0xD3F1, 0, 0xCDF5, 0, 0, 0xE7E0, 0, /* 0x80 */ + 0, 0xE7E1, 0, 0, 0, 0, 0xBEC1, 0, /* 0x90 */ + 0, 0, 0, 0xC2EA, 0, 0, 0, 0xE7E4, /* 0x90 */ + 0, 0, 0xE7E3, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xCDE6, 0, 0xC3B5, 0, 0, 0xE7E2, 0xBBB7, /* 0xA0 */ + 0xCFD6, 0, 0xC1E1, 0xE7E9, 0, 0, 0, 0xE7E8, /* 0xB0 */ + 0, 0, 0xE7F4, 0xB2A3, 0, 0, 0, 0, /* 0xB0 */ + 0xE7EA, 0, 0xE7E6, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xE7EC, 0xE7EB, 0xC9BA, 0, 0, 0xD5E4, 0, 0xE7E5, /* 0xC0 */ + 0xB7A9, 0xE7E7, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE7EE, 0, 0, 0, 0, 0xE7F3, 0, /* 0xD0 */ + 0xD6E9, 0, 0, 0, 0, 0xE7ED, 0, 0xE7F2, /* 0xE0 */ + 0, 0xE7F1, 0, 0, 0, 0xB0E0, 0, 0, /* 0xE0 */ + 0, 0, 0xE7F5 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7F2, 0, 0xC0C5, 0xC0ED, 0, /* 0x00 */ + 0, 0xC1F0, 0xE7F0, 0, 0, 0, 0, 0xE7F6, /* 0x00 */ + 0xCBF6, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xE8A2, 0xE8A1, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xD7C1, 0, 0, 0xE7FA, 0xE7F9, 0, /* 0x20 */ + 0xE7FB, 0, 0xE7F7, 0, 0xE7FE, 0, 0xE7FD, 0, /* 0x20 */ + 0xE7FC, 0, 0, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0, /* 0x30 */ + 0, 0, 0, 0, 0xC7ED, 0, 0, 0, /* 0x30 */ + 0, 0xE8A3, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE8A6, 0, 0xE8A5, /* 0x50 */ + 0, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0, 0xC8F0, 0xC9AA, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE8A9, 0, 0, /* 0x60 */ + 0xB9E5, 0, 0, 0, 0, 0, 0xD1FE, 0xE8A8, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE8AA, 0, /* 0x70 */ + 0xE8AD, 0xE8AE, 0, 0xC1A7, 0, 0, 0, 0xE8AF, /* 0x80 */ + 0, 0, 0, 0xE8B0, 0, 0, 0xE8AC, 0, /* 0x80 */ + 0xE8B4, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE8AB, 0, 0xE8B1, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8B5, /* 0xA0 */ + 0xE8B2, 0xE8B3, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE8B7, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE8B6, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xB9CF, 0, 0xF0AC, 0, /* 0xD0 */ + 0xF0AD, 0, 0xC6B0, 0xB0EA, 0xC8BF, 0, 0xCDDF, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xCECD, 0xEAB1, /* 0xE0 */ + 0, 0, 0, 0, 0xEAB2, 0, 0xC6BF, 0xB4C9, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5E7, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xDDF9, 0, 0xEAB4, /* 0x00 */ + 0, 0xEAB5, 0, 0xEAB6, 0, 0, 0, 0, /* 0x10 */ + 0xB8CA, 0xDFB0, 0xC9F5, 0, 0xCCF0, 0, 0, 0xC9FA, /* 0x10 */ + 0, 0, 0, 0, 0, 0xC9FB, 0, 0, /* 0x20 */ + 0xD3C3, 0xCBA6, 0, 0xB8A6, 0xF0AE, 0xB1C2, 0, 0xE5B8, /* 0x20 */ + 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0, 0xB5E7, 0, 0xC4D0, /* 0x30 */ + 0xB5E9, 0, 0xEEAE, 0xBBAD, 0, 0, 0xE7DE, 0, /* 0x30 */ + 0xEEAF, 0, 0, 0, 0, 0xB3A9, 0, 0, /* 0x40 */ + 0xEEB2, 0, 0, 0xEEB1, 0xBDE7, 0, 0xEEB0, 0xCEB7, /* 0x40 */ + 0, 0, 0, 0, 0xC5CF, 0, 0, 0, /* 0x50 */ + 0, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xC2D4, 0xC6E8, 0, /* 0x60 */ + 0, 0, 0xB7AC, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEEB4, 0, 0xB3EB, 0, 0, 0, /* 0x70 */ + 0xBBFB, 0xEEB5, 0, 0, 0, 0, 0, 0xE7DC, /* 0x70 */ + 0, 0, 0, 0xEEB6, 0, 0, 0xBDAE, 0, /* 0x80 */ + 0, 0, 0, 0xF1E2, 0, 0, 0, 0xCAE8, /* 0x80 */ + 0, 0xD2C9, 0xF0DA, 0, 0xF0DB, 0, 0xF0DC, 0xC1C6, /* 0x90 */ + 0, 0xB8ED, 0xBECE, 0, 0, 0xF0DE, 0, 0xC5B1, /* 0x90 */ + 0xF0DD, 0xD1F1, 0, 0xF0E0, 0xB0CC, 0xBDEA, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD2DF, 0xF0DF, 0, 0xB4AF, 0xB7E8, /* 0xA0 */ + 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0, 0, /* 0xB0 */ + 0xF0E3, 0xD5EE, 0, 0, 0xCCDB, 0xBED2, 0xBCB2, 0, /* 0xB0 */ + 0, 0, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0, 0xD6A2, /* 0xC0 */ + 0xD3B8, 0xBEB7, 0xC8AC, 0, 0, 0xF0EA, 0, 0, /* 0xC0 */ + 0, 0, 0xD1F7, 0, 0xD6CC, 0xBADB, 0xF0E9, 0, /* 0xD0 */ + 0xB6BB, 0, 0, 0xCDB4, 0, 0, 0xC6A6, 0, /* 0xD0 */ + 0, 0, 0xC1A1, 0xF0EB, 0xF0EE, 0, 0xF0ED, 0xF0F0, /* 0xE0 */ + 0xF0EC, 0, 0xBBBE, 0xF0EF, 0, 0, 0, 0, /* 0xE0 */ + 0xCCB5, 0xF0F2, 0, 0, 0xB3D5, 0, 0, 0, /* 0xF0 */ + 0, 0xB1D4, 0, 0, 0xF0F3, 0, 0, 0xF0F4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0F6, 0xB4E1, 0, 0xF0F1, 0, 0xF0F7, 0, 0, /* 0x00 */ + 0, 0, 0xF0FA, 0, 0xF0F8, 0, 0, 0, /* 0x00 */ + 0xF0F5, 0, 0, 0, 0, 0xF0FD, 0, 0xF0F9, /* 0x10 */ + 0xF0FC, 0xF0FE, 0, 0xF1A1, 0, 0, 0, 0xCEC1, /* 0x10 */ + 0xF1A4, 0, 0xF1A3, 0, 0xC1F6, 0xF0FB, 0xCADD, 0, /* 0x20 */ + 0, 0xB4F1, 0xB1F1, 0xCCB1, 0, 0xF1A6, 0, 0, /* 0x20 */ + 0xF1A7, 0, 0, 0xF1AC, 0xD5CE, 0xF1A9, 0, 0, /* 0x30 */ + 0xC8B3, 0, 0, 0, 0xF1A2, 0, 0xF1AB, 0xF1A8, /* 0x30 */ + 0xF1A5, 0, 0, 0xF1AA, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xB0A9, 0xF1AD, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF1AF, 0, 0xF1B1, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF1B0, 0, 0xF1AE, 0, /* 0x50 */ + 0, 0, 0, 0xD1A2, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xF1B2, 0, 0, 0, 0xF1B3, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xB9EF, 0, 0, 0xB5C7, 0, 0xB0D7, 0xB0D9, 0, /* 0x70 */ + 0, 0, 0xD4ED, 0, 0xB5C4, 0, 0xBDD4, 0xBBCA, /* 0x80 */ + 0xF0A7, 0, 0, 0xB8DE, 0, 0, 0xF0A8, 0, /* 0x80 */ + 0, 0xB0A8, 0, 0xF0A9, 0, 0, 0xCDEE, 0, /* 0x90 */ + 0, 0xF0AA, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF0AB, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xC6A4, 0, /* 0xA0 */ + 0, 0xD6E5, 0xF1E4, 0, 0xF1E5, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xC3F3, /* 0xB0 */ + 0, 0, 0xD3DB, 0, 0, 0xD6D1, 0xC5E8, 0, /* 0xC0 */ + 0xD3AF, 0, 0xD2E6, 0, 0, 0xEEC1, 0xB0BB, 0xD5B5, /* 0xC0 */ + 0xD1CE, 0xBCE0, 0xBAD0, 0, 0xBFF8, 0, 0xB8C7, 0xB5C1, /* 0xD0 */ + 0xC5CC, 0, 0, 0xCAA2, 0, 0, 0, 0xC3CB, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xEEC2, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xC4BF, 0xB6A2, /* 0xE0 */ + 0, 0xEDEC, 0xC3A4, 0, 0xD6B1, 0, 0, 0, /* 0xF0 */ + 0xCFE0, 0xEDEF, 0, 0, 0xC5CE, 0, 0xB6DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAA1, 0, 0, 0xEDED, 0, 0, 0xEDF0, /* 0x00 */ + 0xEDF1, 0xC3BC, 0, 0xBFB4, 0, 0xEDEE, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xEDF4, 0xEDF2, 0, 0, 0, 0, 0xD5E6, /* 0x10 */ + 0xC3DF, 0, 0xEDF3, 0, 0, 0, 0xEDF6, 0, /* 0x20 */ + 0xD5A3, 0xD1A3, 0, 0, 0, 0xEDF5, 0, 0xC3D0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xEDF7, 0xBFF4, 0xBEEC, /* 0x30 */ + 0xEDF8, 0, 0xCCF7, 0, 0xD1DB, 0, 0, 0, /* 0x30 */ + 0xD7C5, 0xD5F6, 0, 0xEDFC, 0, 0, 0, 0xEDFB, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEDF9, 0xEDFA, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xEDFD, 0xBEA6, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCBAF, 0xEEA1, 0xB6BD, 0, 0xEEA2, 0xC4C0, 0, /* 0x60 */ + 0xEDFE, 0, 0, 0xBDDE, 0xB2C7, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB6C3, 0, 0, 0, 0xEEA5, 0xD8BA, 0xEEA3, /* 0x70 */ + 0xEEA6, 0, 0, 0, 0xC3E9, 0xB3F2, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xEEA7, 0xEEA4, 0xCFB9, 0, /* 0x80 */ + 0, 0xEEA8, 0xC2F7, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xEEA9, /* 0x90 */ + 0xEEAA, 0, 0xDEAB, 0, 0, 0xC6B3, 0, 0xC7C6, /* 0xA0 */ + 0, 0xD6F5, 0xB5C9, 0, 0xCBB2, 0, 0, 0, /* 0xA0 */ + 0xEEAB, 0, 0, 0xCDAB, 0, 0xEEAC, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xD5B0, 0, 0xEEAD, 0, 0xF6C4, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xDBC7, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB4A3, /* 0xD0 */ + 0, 0, 0, 0xC3AC, 0xF1E6, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xCAB8, 0xD2D3, 0, 0xD6AA, 0, 0xEFF2, /* 0xE0 */ + 0, 0xBED8, 0, 0xBDC3, 0xEFF3, 0xB6CC, 0xB0AB, 0, /* 0xE0 */ + 0, 0, 0, 0xCAAF, 0, 0, 0xEDB6, 0, /* 0xF0 */ + 0xEDB7, 0, 0, 0, 0, 0xCEF9, 0xB7AF, 0xBFF3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDB8, 0xC2EB, 0xC9B0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xEDB9, 0, 0, 0xC6F6, 0xBFB3, 0, 0, /* 0x00 */ + 0, 0xEDBC, 0xC5F8, 0, 0xD1D0, 0, 0xD7A9, 0xEDBA, /* 0x10 */ + 0xEDBB, 0, 0xD1E2, 0, 0xEDBF, 0xEDC0, 0, 0xEDC4, /* 0x10 */ + 0, 0, 0, 0xEDC8, 0, 0xEDC6, 0xEDCE, 0xD5E8, /* 0x20 */ + 0, 0xEDC9, 0, 0, 0xEDC7, 0xEDBE, 0, 0, /* 0x20 */ + 0xC5E9, 0, 0, 0, 0xC6C6, 0, 0, 0xC9E9, /* 0x30 */ + 0xD4D2, 0xEDC1, 0xEDC2, 0xEDC3, 0xEDC5, 0, 0xC0F9, 0, /* 0x30 */ + 0xB4A1, 0, 0, 0, 0, 0xB9E8, 0, 0xEDD0, /* 0x40 */ + 0, 0, 0, 0, 0xEDD1, 0, 0xEDCA, 0, /* 0x40 */ + 0xEDCF, 0, 0xCEF8, 0, 0, 0xCBB6, 0xEDCC, 0xEDCD, /* 0x50 */ + 0, 0, 0, 0, 0, 0xCFF5, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xC8B7, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xBCEF, /* 0x70 */ + 0, 0, 0, 0, 0xC5F0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xEDD6, /* 0x80 */ + 0, 0xB5EF, 0, 0, 0xC2B5, 0xB0AD, 0xCBE9, 0, /* 0x80 */ + 0, 0xB1AE, 0, 0xEDD4, 0, 0, 0, 0xCDEB, /* 0x90 */ + 0xB5E2, 0, 0xEDD5, 0xEDD3, 0xEDD7, 0, 0, 0xB5FA, /* 0x90 */ + 0, 0xEDD8, 0, 0xEDD9, 0, 0xEDDC, 0, 0xB1CC, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0, 0, 0, /* 0xB0 */ + 0, 0xEDDB, 0, 0, 0, 0, 0xC4EB, 0, /* 0xB0 */ + 0, 0xB4C5, 0, 0, 0, 0xB0F5, 0, 0, /* 0xC0 */ + 0, 0xEDDF, 0xC0DA, 0xB4E8, 0, 0, 0, 0, /* 0xC0 */ + 0xC5CD, 0, 0, 0, 0xEDDD, 0xBFC4, 0, 0, /* 0xD0 */ + 0, 0xEDDE, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xC4A5, 0, 0, 0, 0xEDE0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xEDE1, 0, 0xEDE3, 0, 0, 0xC1D7, /* 0xF0 */ + 0, 0, 0xBBC7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDB8, 0, 0, 0, 0xEDE2, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xEDE4, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xEDE6, 0, /* 0x10 */ + 0, 0, 0, 0, 0xEDE5, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xEDE7, 0, 0, 0, /* 0x30 */ + 0, 0, 0xCABE, 0xECEA, 0xC0F1, 0, 0xC9E7, 0, /* 0x30 */ + 0xECEB, 0xC6EE, 0, 0, 0, 0, 0xECEC, 0, /* 0x40 */ + 0xC6ED, 0xECED, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xECF0, 0, 0, 0xD7E6, 0xECF3, /* 0x50 */ + 0, 0, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, /* 0x50 */ + 0xECF4, 0, 0xECF2, 0, 0, 0xCFE9, 0, 0xECF6, /* 0x60 */ + 0xC6B1, 0, 0, 0, 0, 0xBCC0, 0, 0xECF5, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xB5BB, /* 0x70 */ + 0xBBF6, 0, 0xECF7, 0, 0, 0, 0, 0, /* 0x70 */ + 0xD9F7, 0xBDFB, 0, 0, 0xC2BB, 0xECF8, 0, 0, /* 0x80 */ + 0, 0, 0xECF9, 0, 0, 0, 0, 0xB8A3, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xECFA, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xECFB, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xECFC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xD3ED, 0xD8AE, 0xC0EB, 0, 0xC7DD, 0xBACC, 0, /* 0xB0 */ + 0xD0E3, 0xCBBD, 0, 0xCDBA, 0, 0, 0xB8D1, 0, /* 0xC0 */ + 0, 0xB1FC, 0, 0xC7EF, 0, 0xD6D6, 0, 0, /* 0xC0 */ + 0, 0xBFC6, 0xC3EB, 0, 0, 0xEFF5, 0, 0, /* 0xD0 */ + 0xC3D8, 0, 0, 0, 0, 0, 0, 0xD7E2, /* 0xD0 */ + 0, 0, 0, 0xEFF7, 0xB3D3, 0, 0xC7D8, 0xD1ED, /* 0xE0 */ + 0, 0xD6C8, 0, 0xEFF8, 0, 0xEFF6, 0, 0xBBFD, /* 0xE0 */ + 0xB3C6, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xBDD5, 0, 0, 0xD2C6, 0, 0xBBE0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFA1, 0, 0xEFFC, 0xEFFB, 0, 0, 0xEFF9, 0, /* 0x00 */ + 0, 0, 0, 0xB3CC, 0, 0xC9D4, 0xCBB0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xEFFE, 0, 0, 0xB0DE, /* 0x10 */ + 0, 0, 0xD6C9, 0, 0, 0, 0xEFFD, 0, /* 0x10 */ + 0xB3ED, 0, 0, 0xF6D5, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xCEC8, 0, 0, 0, 0xF0A2, /* 0x30 */ + 0, 0xF0A1, 0, 0xB5BE, 0xBCDA, 0xBBFC, 0, 0xB8E5, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xC4C2, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF0A3, 0, 0, 0, 0, 0, 0xCBEB, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xF0A6, 0, 0, 0, 0xD1A8, 0, 0xBEBF, 0xC7EE, /* 0x70 */ + 0xF1B6, 0xF1B7, 0xBFD5, 0, 0, 0, 0, 0xB4A9, /* 0x70 */ + 0xF1B8, 0xCDBB, 0, 0xC7D4, 0xD5AD, 0, 0xF1B9, 0, /* 0x80 */ + 0xF1BA, 0, 0, 0, 0, 0xC7CF, 0, 0, /* 0x80 */ + 0, 0xD2A4, 0xD6CF, 0, 0, 0xF1BB, 0xBDD1, 0xB4B0, /* 0x90 */ + 0xBEBD, 0, 0, 0, 0xB4DC, 0xCED1, 0, 0xBFDF, /* 0x90 */ + 0xF1BD, 0, 0, 0, 0, 0xBFFA, 0xF1BC, 0, /* 0xA0 */ + 0xF1BF, 0, 0, 0, 0xF1BE, 0xF1C0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF1C1, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xC1FE, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xC1A2, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xCAFA, 0, /* 0xD0 */ + 0, 0xD5BE, 0, 0, 0, 0, 0xBEBA, 0xBEB9, /* 0xD0 */ + 0xD5C2, 0, 0, 0xBFA2, 0, 0xCDAF, 0xF1B5, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xBDDF, 0, 0xB6CB, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xD6F1, 0xF3C3, 0, 0, 0xF3C4, 0, 0xB8CD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF3C6, 0xF3C7, 0, 0xB0CA, 0, /* 0x00 */ + 0xF3C5, 0, 0xF3C9, 0xCBF1, 0, 0, 0, 0xF3CB, /* 0x00 */ + 0, 0xD0A6, 0, 0, 0xB1CA, 0xF3C8, 0, 0, /* 0x10 */ + 0, 0xF3CF, 0, 0xB5D1, 0, 0, 0xF3D7, 0, /* 0x10 */ + 0xF3D2, 0, 0, 0, 0xF3D4, 0xF3D3, 0xB7FB, 0, /* 0x20 */ + 0xB1BF, 0, 0xF3CE, 0xF3CA, 0xB5DA, 0, 0xF3D0, 0, /* 0x20 */ + 0, 0xF3D1, 0, 0xF3D5, 0, 0, 0, 0, /* 0x30 */ + 0xF3CD, 0, 0xBCE3, 0, 0xC1FD, 0, 0xF3D6, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF3DA, 0, 0xF3CC, /* 0x40 */ + 0, 0xB5C8, 0, 0xBDEE, 0xF3DC, 0, 0, 0xB7A4, /* 0x40 */ + 0xBFF0, 0xD6FE, 0xCDB2, 0, 0xB4F0, 0, 0xB2DF, 0, /* 0x50 */ + 0xF3D8, 0, 0xF3D9, 0xC9B8, 0, 0xF3DD, 0, 0, /* 0x50 */ + 0xF3DE, 0, 0xF3E1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF3DF, 0, /* 0x60 */ + 0, 0xF3E3, 0xF3E2, 0, 0, 0xF3DB, 0, 0xBFEA, /* 0x70 */ + 0, 0xB3EF, 0, 0xF3E0, 0, 0, 0xC7A9, 0, /* 0x70 */ + 0xBCF2, 0, 0, 0, 0, 0xF3EB, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xB9BF, 0, 0, /* 0x80 */ + 0xF3E4, 0, 0, 0, 0xB2AD, 0xBBFE, 0, 0xCBE3, /* 0x90 */ + 0, 0, 0, 0, 0xF3ED, 0xF3E9, 0, 0, /* 0x90 */ + 0, 0xB9DC, 0xF3EE, 0, 0, 0, 0xF3E5, 0xF3E6, /* 0xA0 */ + 0xF3EA, 0xC2E1, 0xF3EC, 0xF3EF, 0xF3E8, 0xBCFD, 0, 0, /* 0xA0 */ + 0, 0xCFE4, 0, 0, 0xF3F0, 0, 0, 0, /* 0xB0 */ + 0xF3E7, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xF3F2, 0, 0, 0, 0, 0xD7AD, 0xC6AA, /* 0xC0 */ + 0, 0, 0, 0, 0xF3F3, 0, 0, 0, /* 0xC0 */ + 0, 0xF3F1, 0, 0xC2A8, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xB8DD, 0xF3F5, 0, 0, 0xF3F4, 0, 0, /* 0xD0 */ + 0, 0xB4DB, 0, 0, 0, 0xF3F6, 0xF3F7, 0, /* 0xE0 */ + 0, 0, 0xF3F8, 0, 0, 0, 0xC0BA, 0, /* 0xE0 */ + 0, 0xC0E9, 0, 0, 0, 0, 0, 0xC5F1, /* 0xF0 */ + 0, 0, 0, 0, 0xF3FB, 0, 0xF3FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB4D8, /* 0x00 */ + 0, 0, 0, 0xF3FE, 0xF3F9, 0, 0, 0xF3FC, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xF3FD, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xF4A1, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF4A3, 0xBBC9, /* 0x20 */ + 0, 0, 0xF4A2, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xF4A4, 0, 0, 0, 0, 0, 0, 0xB2BE, /* 0x30 */ + 0xF4A6, 0xF4A5, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xBCAE, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xC3D7, 0xD9E1, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0xC0E0, 0xF4CC, 0xD7D1, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xB7DB, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF4CE, 0xC1A3, 0, 0, 0xC6C9, 0, 0xB4D6, /* 0x90 */ + 0xD5B3, 0, 0, 0, 0xF4D0, 0xF4CF, 0xF4D1, 0xCBDA, /* 0x90 */ + 0, 0, 0xF4D2, 0, 0xD4C1, 0xD6E0, 0, 0, /* 0xA0 */ + 0, 0, 0xB7E0, 0, 0, 0, 0xC1B8, 0, /* 0xA0 */ + 0, 0xC1BB, 0xF4D3, 0xBEAC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xB4E2, 0, 0, 0xF4D4, 0xF4D5, 0xBEAB, 0, /* 0xB0 */ + 0, 0xF4D6, 0, 0, 0, 0xF4DB, 0, 0xF4D7, /* 0xC0 */ + 0xF4DA, 0, 0xBAFD, 0, 0xF4D8, 0xF4D9, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xB8E2, 0xCCC7, 0xF4DC, /* 0xD0 */ + 0, 0xB2DA, 0, 0, 0xC3D3, 0, 0, 0xD4E3, /* 0xD0 */ + 0xBFB7, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF4DD, 0, 0, 0, 0, 0, 0, 0xC5B4, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xF4E9, 0, 0, 0xCFB5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xCEC9, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xCBD8, 0, 0xCBF7, 0, 0, 0, 0, 0xBDF4, /* 0x20 */ + 0, 0, 0, 0xD7CF, 0, 0, 0, 0xC0DB, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xD0F5, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xF4EA, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xF4EB, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xF4EC /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x30 */ + 0xF7E3, 0, 0, 0, 0, /* 0x30 */ + 0, 0xB7B1, 0, 0, 0, 0, 0, 0xF4ED, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xD7EB, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF4EE, 0, 0, 0, 0xE6F9, /* 0x90 */ + 0xBEC0, 0xE6FA, 0xBAEC, 0xE6FB, 0xCFCB, 0xE6FC, 0xD4BC, 0xBCB6, /* 0xA0 */ + 0xE6FD, 0xE6FE, 0xBCCD, 0xC8D2, 0xCEB3, 0xE7A1, 0, 0xB4BF, /* 0xA0 */ + 0xE7A2, 0xC9B4, 0xB8D9, 0xC4C9, 0, 0xD7DD, 0xC2DA, 0xB7D7, /* 0xB0 */ + 0xD6BD, 0xCEC6, 0xB7C4, 0, 0, 0xC5A6, 0xE7A3, 0xCFDF, /* 0xB0 */ + 0xE7A4, 0xE7A5, 0xE7A6, 0xC1B7, 0xD7E9, 0xC9F0, 0xCFB8, 0xD6AF, /* 0xC0 */ + 0xD6D5, 0xE7A7, 0xB0ED, 0xE7A8, 0xE7A9, 0xC9DC, 0xD2EF, 0xBEAD, /* 0xC0 */ + 0xE7AA, 0xB0F3, 0xC8DE, 0xBDE1, 0xE7AB, 0xC8C6, 0, 0xE7AC, /* 0xD0 */ + 0xBBE6, 0xB8F8, 0xD1A4, 0xE7AD, 0xC2E7, 0xBEF8, 0xBDCA, 0xCDB3, /* 0xD0 */ + 0xE7AE, 0xE7AF, 0xBEEE, 0xD0E5, 0, 0xCBE7, 0xCCD0, 0xBCCC, /* 0xE0 */ + 0xE7B0, 0xBCA8, 0xD0F7, 0xE7B1, 0, 0xD0F8, 0xE7B2, 0xE7B3, /* 0xE0 */ + 0xB4C2, 0xE7B4, 0xE7B5, 0xC9FE, 0xCEAC, 0xC3E0, 0xE7B7, 0xB1C1, /* 0xF0 */ + 0xB3F1, 0, 0xE7B8, 0xE7B9, 0xD7DB, 0xD5C0, 0xE7BA, 0xC2CC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7BA, 0xE7BB, 0xE7BC, 0xE7BD, 0xBCEA, 0xC3E5, 0xC0C2, 0xE7BE, /* 0x00 */ + 0xE7BF, 0xBCA9, 0, 0xE7C0, 0xE7C1, 0xE7B6, 0xB6D0, 0xE7C2, /* 0x00 */ + 0, 0xE7C3, 0xE7C4, 0xBBBA, 0xB5DE, 0xC2C6, 0xB1E0, 0xE7C5, /* 0x10 */ + 0xD4B5, 0xE7C6, 0xB8BF, 0xE7C8, 0xE7C7, 0xB7EC, 0, 0xE7C9, /* 0x10 */ + 0xB2F8, 0xE7CA, 0xE7CB, 0xE7CC, 0xE7CD, 0xE7CE, 0xE7CF, 0xE7D0, /* 0x20 */ + 0xD3A7, 0xCBF5, 0xE7D1, 0xE7D2, 0xE7D3, 0xE7D4, 0xC9C9, 0xE7D5, /* 0x20 */ + 0xE7D6, 0xE7D7, 0xE7D8, 0xE7D9, 0xBDC9, 0xE7DA, 0xF3BE, 0, /* 0x30 */ + 0xB8D7, 0, 0xC8B1, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0xF3BF, 0, 0xF3C0, 0xF3C1, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xB9DE, 0xCDF8, 0, 0, 0xD8E8, 0xBAB1, 0, 0xC2DE, /* 0x50 */ + 0xEEB7, 0, 0xB7A3, 0, 0, 0, 0, 0xEEB9, /* 0x50 */ + 0, 0xEEB8, 0xB0D5, 0, 0, 0, 0, 0, /* 0x60 */ + 0xEEBB, 0xD5D6, 0xD7EF, 0, 0, 0, 0xD6C3, 0, /* 0x60 */ + 0, 0xEEBD, 0xCAF0, 0, 0xEEBC, 0, 0, 0, /* 0x70 */ + 0, 0xEEBE, 0, 0, 0, 0, 0xEEC0, 0, /* 0x70 */ + 0, 0xEEBF, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD1F2, 0, 0xC7BC, 0, 0xC3C0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xB8E1, 0, 0, 0, /* 0x90 */ + 0, 0, 0xC1E7, 0, 0, 0xF4C6, 0xD0DF, 0xF4C7, /* 0x90 */ + 0, 0xCFDB, 0, 0, 0xC8BA, 0, 0, 0xF4C8, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF4C9, /* 0xA0 */ + 0xF4CA, 0, 0xF4CB, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xD9FA, 0xB8FE, 0, 0, 0xE5F1, 0xD3F0, 0, 0xF4E0, /* 0xB0 */ + 0, 0xCECC, 0, 0, 0, 0xB3E1, 0, 0, /* 0xC0 */ + 0, 0, 0xF1B4, 0, 0xD2EE, 0, 0xF4E1, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xCFE8, 0xF4E2, 0, 0, /* 0xD0 */ + 0xC7CC, 0, 0, 0, 0, 0, 0, 0xB5D4, /* 0xD0 */ + 0xB4E4, 0xF4E4, 0, 0, 0, 0xF4E3, 0xF4E5, 0, /* 0xE0 */ + 0, 0xF4E6, 0, 0, 0, 0, 0xF4E7, 0, /* 0xE0 */ + 0xBAB2, 0xB0BF, 0, 0xF4E8, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xB7AD, 0xD2ED /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2AB, 0xC0CF, 0, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0, /* 0x00 */ + 0, 0, 0, 0xF1F3, 0xB6F8, 0xCBA3, 0, 0, /* 0x00 */ + 0xC4CD, 0, 0xF1E7, 0, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, /* 0x10 */ + 0xD4C5, 0xB0D2, 0, 0, 0xF1EA, 0, 0, 0, /* 0x10 */ + 0xF1EB, 0, 0xF1EC, 0, 0, 0xF1ED, 0xF1EE, 0xF1EF, /* 0x20 */ + 0xF1F1, 0xF1F0, 0xC5D5, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xF1F2, 0, 0xB6FA, 0, 0xF1F4, 0xD2AE, 0xDEC7, /* 0x30 */ + 0xCBCA, 0, 0, 0xB3DC, 0, 0xB5A2, 0, 0xB9A2, /* 0x30 */ + 0, 0, 0xC4F4, 0xF1F5, 0, 0, 0xF1F6, 0, /* 0x40 */ + 0, 0, 0xC1C4, 0xC1FB, 0xD6B0, 0xF1F7, 0, 0, /* 0x40 */ + 0, 0, 0xF1F8, 0, 0xC1AA, 0, 0, 0, /* 0x50 */ + 0xC6B8, 0, 0xBEDB, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF1F9, 0xB4CF, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xF1FA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xEDB2, /* 0x70 */ + 0xEDB1, 0, 0, 0xCBE0, 0xD2DE, 0, 0xCBC1, 0xD5D8, /* 0x80 */ + 0, 0xC8E2, 0, 0xC0DF, 0xBCA1, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xEBC1, 0, 0, 0xD0A4, 0, /* 0x90 */ + 0xD6E2, 0, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0, 0xEBBF, /* 0x90 */ + 0xB3A6, 0xB9C9, 0xD6AB, 0, 0xB7F4, 0xB7CA, 0, 0, /* 0xA0 */ + 0, 0xBCE7, 0xB7BE, 0xEBC6, 0, 0xEBC7, 0xB0B9, 0xBFCF, /* 0xA0 */ + 0, 0xEBC5, 0xD3FD, 0, 0xEBC8, 0, 0, 0xEBC9, /* 0xB0 */ + 0, 0, 0xB7CE, 0, 0xEBC2, 0xEBC4, 0xC9F6, 0xD6D7, /* 0xB0 */ + 0xD5CD, 0xD0B2, 0xEBCF, 0xCEB8, 0xEBD0, 0, 0xB5A8, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xB1B3, 0xEBD2, 0xCCA5, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xC5D6, 0xEBD3, /* 0xD0 */ + 0, 0xEBD1, 0xC5DF, 0xEBCE, 0xCAA4, 0xEBD5, 0xB0FB, 0, /* 0xD0 */ + 0, 0xBAFA, 0, 0, 0xD8B7, 0xF1E3, 0, 0xEBCA, /* 0xE0 */ + 0xEBCB, 0xEBCC, 0xEBCD, 0xEBD6, 0xE6C0, 0xEBD9, 0, 0xBFE8, /* 0xE0 */ + 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0, 0xBDBA, 0, /* 0xF0 */ + 0xD0D8, 0, 0xB0B7, 0, 0xEBDD, 0xC4DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD6AC, 0, 0, 0, 0xB4E0, 0, /* 0x00 */ + 0, 0xC2F6, 0xBCB9, 0, 0, 0xEBDA, 0xEBDB, 0xD4E0, /* 0x00 */ + 0xC6EA, 0xC4D4, 0xEBDF, 0xC5A7, 0xD9F5, 0, 0xB2B1, 0, /* 0x10 */ + 0xEBE4, 0, 0xBDC5, 0, 0, 0, 0xEBE2, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xEBE3, 0, 0, 0xB8AC, /* 0x20 */ + 0, 0xCDD1, 0xEBE5, 0, 0, 0, 0xEBE1, 0, /* 0x30 */ + 0xC1B3, 0, 0, 0, 0, 0, 0xC6A2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xCCF3, 0, /* 0x40 */ + 0xEBE6, 0, 0xC0B0, 0xD2B8, 0xEBE7, 0, 0, 0, /* 0x40 */ + 0xB8AF, 0xB8AD, 0, 0xEBE8, 0xC7BB, 0xCDF3, 0, 0, /* 0x50 */ + 0, 0xEBEA, 0xEBEB, 0, 0, 0, 0, 0, /* 0x50 */ + 0xEBED, 0, 0, 0, 0, 0xD0C8, 0, 0xEBF2, /* 0x60 */ + 0, 0xEBEE, 0, 0, 0, 0xEBF1, 0xC8F9, 0, /* 0x60 */ + 0xD1FC, 0xEBEC, 0, 0, 0xEBE9, 0, 0, 0, /* 0x70 */ + 0, 0xB8B9, 0xCFD9, 0xC4E5, 0xEBEF, 0xEBF0, 0xCCDA, 0xCDC8, /* 0x70 */ + 0xB0F2, 0, 0xEBF6, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEBF5, 0, 0xB2B2, 0, 0, 0, 0, 0xB8E0, /* 0x80 */ + 0, 0xEBF7, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xB1EC, 0, 0, 0xCCC5, 0xC4A4, 0xCFA5, 0, 0, /* 0x90 */ + 0, 0, 0, 0xEBF9, 0, 0, 0xECA2, 0, /* 0xA0 */ + 0xC5F2, 0, 0xEBFA, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xC9C5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE2DF, 0xEBFE, 0, 0, 0, 0, /* 0xB0 */ + 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0, 0, 0xD2DC, 0, /* 0xC0 */ + 0, 0, 0xEBFD, 0, 0xEBFB, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xB3BC, 0, 0, 0, 0xEAB0, /* 0xE0 */ + 0, 0, 0xD7D4, 0, 0xF4AB, 0xB3F4, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xD6C1, 0xD6C2, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xD5E9, 0xBECA, 0, 0xF4A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2A8, 0xF4A8, 0xF4A9, 0, 0xF4AA, 0xBECB, 0xD3DF, 0, /* 0x00 */ + 0, 0, 0, 0, 0xC9E0, 0xC9E1, 0, 0, /* 0x00 */ + 0xF3C2, 0, 0xCAE6, 0, 0xCCF2, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE2B6, 0xCBB4, 0, 0xCEE8, 0xD6DB, /* 0x10 */ + 0, 0xF4AD, 0xF4AE, 0xF4AF, 0, 0, 0, 0, /* 0x20 */ + 0xF4B2, 0, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0, 0xF4B1, /* 0x20 */ + 0xBDA2, 0xB2D5, 0, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, /* 0x30 */ + 0xF4B4, 0xB4AC, 0, 0xF4B5, 0, 0, 0xF4B8, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF4B9, 0, 0, 0xCDA7, /* 0x40 */ + 0, 0xF4BA, 0, 0xF4BB, 0, 0, 0, 0xF4BC, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xCBD2, 0, 0xF4BD, 0, 0, 0, 0, 0xF4BE, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xF4BF, 0, 0, 0, 0, 0, 0xF4DE, 0xC1BC, /* 0x60 */ + 0xBCE8, 0, 0xC9AB, 0xD1DE, 0xE5F5, 0, 0, 0, /* 0x70 */ + 0, 0xDCB3, 0xD2D5, 0, 0, 0xDCB4, 0xB0AC, 0xDCB5, /* 0x70 */ + 0, 0, 0xBDDA, 0, 0xDCB9, 0, 0, 0, /* 0x80 */ + 0xD8C2, 0, 0xDCB7, 0xD3F3, 0, 0xC9D6, 0xDCBA, 0xDCB6, /* 0x80 */ + 0, 0xDCBB, 0xC3A2, 0, 0, 0, 0, 0xDCBC, /* 0x90 */ + 0xDCC5, 0xDCBD, 0, 0, 0xCEDF, 0xD6A5, 0, 0xDCCF, /* 0x90 */ + 0, 0xDCCD, 0, 0, 0xDCD2, 0xBDE6, 0xC2AB, 0, /* 0xA0 */ + 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, /* 0xA0 */ + 0xDCC1, 0xBBA8, 0, 0xB7BC, 0xDCCC, 0, 0, 0xDCC6, /* 0xB0 */ + 0xDCBF, 0xC7DB, 0, 0, 0, 0xD1BF, 0xDCC0, 0, /* 0xB0 */ + 0, 0xDCCA, 0, 0, 0xDCD0, 0, 0, 0xCEAD, /* 0xC0 */ + 0xDCC2, 0, 0xDCC3, 0xDCC8, 0xDCC9, 0xB2D4, 0xDCD1, 0xCBD5, /* 0xC0 */ + 0, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0, 0xC3E7, /* 0xD0 */ + 0xDCDC, 0, 0, 0xBFC1, 0xDCD9, 0, 0xB0FA, 0xB9B6, /* 0xD0 */ + 0xDCE5, 0xDCD3, 0, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0, /* 0xE0 */ + 0, 0, 0, 0xC9BB, 0, 0, 0, 0xB1BD, /* 0xE0 */ + 0, 0xD3A2, 0, 0, 0xDCDA, 0, 0, 0xDCD5, /* 0xF0 */ + 0, 0xC6BB, 0, 0xDCDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7C2, 0xC3AF, 0xB7B6, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, /* 0x00 */ + 0xDCEB, 0xDCD4, 0, 0, 0xDCDD, 0, 0xBEA5, 0xDCD7, /* 0x00 */ + 0, 0xDCE0, 0, 0, 0xDCE3, 0xDCE4, 0, 0xDCF8, /* 0x10 */ + 0, 0, 0xDCE1, 0xDDA2, 0xDCE7, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xBCEB, /* 0x20 */ + 0xB4C4, 0, 0, 0xC3A3, 0xB2E7, 0xDCFA, 0, 0xDCF2, /* 0x20 */ + 0, 0xDCEF, 0, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0, /* 0x30 */ + 0xC8D7, 0xC8E3, 0xDCFB, 0, 0xDCED, 0, 0, 0, /* 0x30 */ + 0xDCF7, 0, 0, 0xDCF5, 0, 0, 0xBEA3, 0xDCF4, /* 0x40 */ + 0, 0xB2DD, 0, 0, 0, 0, 0, 0xDCF3, /* 0x40 */ + 0xBCF6, 0xDCE8, 0xBBC4, 0, 0xC0F3, 0, 0, 0, /* 0x50 */ + 0, 0, 0xBCD4, 0xDCE9, 0xDCEA, 0, 0xDCF1, 0xDCF6, /* 0x50 */ + 0xDCF9, 0xB5B4, 0, 0xC8D9, 0xBBE7, 0xDCFE, 0xDCFD, 0xD3AB, /* 0x60 */ + 0xDDA1, 0xDDA3, 0xDDA5, 0xD2F1, 0xDDA4, 0xDDA6, 0xDDA7, 0xD2A9, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xBAC9, /* 0x70 */ + 0xDDA9, 0, 0, 0xDDB6, 0xDDB1, 0xDDB4, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xDDB0, 0xC6CE, 0, /* 0x80 */ + 0, 0xC0F2, 0, 0, 0, 0, 0xC9AF, 0, /* 0x80 */ + 0, 0, 0xDCEC, 0xDDAE, 0, 0, 0, 0, /* 0x90 */ + 0xDDB7, 0, 0, 0xDCF0, 0xDDAF, 0, 0xDDB8, 0, /* 0x90 */ + 0xDDAC, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0, 0, 0, 0, /* 0xA0 */ + 0xDDA8, 0xC0B3, 0xC1AB, 0xDDAA, 0xDDAB, 0, 0xDDB2, 0xBBF1, /* 0xB0 */ + 0xDDB5, 0xD3A8, 0xDDBA, 0, 0xDDBB, 0xC3A7, 0, 0, /* 0xB0 */ + 0xDDD2, 0xDDBC, 0, 0, 0, 0xDDD1, 0, 0xB9BD, /* 0xC0 */ + 0, 0, 0xBED5, 0, 0xBEFA, 0, 0, 0xBACA, /* 0xC0 */ + 0, 0, 0, 0, 0xDDCA, 0, 0xDDC5, 0, /* 0xD0 */ + 0xDDBF, 0, 0, 0, 0xB2CB, 0xDDC3, 0, 0xDDCB, /* 0xD0 */ + 0xB2A4, 0xDDD5, 0, 0, 0, 0xDDBE, 0, 0, /* 0xE0 */ + 0, 0xC6D0, 0xDDD0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xDDD4, 0xC1E2, 0xB7C6, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xDDCE, 0xDDCF, 0, 0, 0, 0xDDC4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDDBD, 0, 0xDDCD, 0xCCD1, 0, 0xDDC9, 0, /* 0x00 */ + 0, 0, 0, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, /* 0x00 */ + 0, 0xDDC8, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xDDC1, 0, 0, 0, 0xDDC6, 0xC2DC, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xD3A9, 0xD3AA, 0xDDD3, 0xCFF4, /* 0x20 */ + 0xC8F8, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xDDE6, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xDDC7, 0, 0, 0, 0xDDE0, 0xC2E4, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xDDE1, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xDDD7, 0, 0, 0, 0, 0, 0xD6F8, /* 0x50 */ + 0, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0, 0, 0, /* 0x50 */ + 0, 0xC6CF, 0, 0xB6AD, 0, 0, 0, 0, /* 0x60 */ + 0, 0xDDE2, 0, 0xBAF9, 0xD4E1, 0xDDE7, 0, 0, /* 0x60 */ + 0, 0xB4D0, 0, 0xDDDA, 0, 0xBFFB, 0xDDE3, 0, /* 0x70 */ + 0xDDDF, 0, 0xDDDD, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xB5D9, 0, 0, 0, 0, 0xDDDB, /* 0x80 */ + 0xDDDC, 0xDDDE, 0, 0xBDAF, 0xDDE4, 0, 0xDDE5, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xDDF5, /* 0x90 */ + 0, 0xC3C9, 0, 0, 0xCBE2, 0, 0, 0, /* 0x90 */ + 0, 0xDDF2, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xD8E1, /* 0xA0 */ + 0, 0, 0xC6D1, 0, 0xDDF4, 0, 0, 0, /* 0xB0 */ + 0xD5F4, 0xDDF3, 0xDDF0, 0, 0, 0xDDEC, 0, 0xDDEF, /* 0xB0 */ + 0, 0xDDE8, 0, 0, 0xD0EE, 0, 0, 0, /* 0xC0 */ + 0, 0xC8D8, 0xDDEE, 0, 0, 0xDDE9, 0, 0, /* 0xC0 */ + 0xDDEA, 0xCBF2, 0, 0xDDED, 0, 0, 0xB1CD, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xC0B6, 0, 0xBCBB, /* 0xD0 */ + 0xDDF1, 0, 0, 0xDDF7, 0, 0xDDF6, 0xDDEB, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xC5EE, 0, 0, 0, /* 0xE0 */ + 0xDDFB, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xDEA4, 0, 0, 0xDEA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xDDF8, 0, 0, 0, /* 0x00 */ + 0, 0xC3EF, 0, 0xC2FB, 0, 0, 0, 0xD5E1, /* 0x10 */ + 0, 0, 0xCEB5, 0, 0, 0, 0, 0xDDFD, /* 0x10 */ + 0, 0xB2CC, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xC4E8, 0xCADF, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xC7BE, /* 0x30 */ + 0xDDFA, 0xDDFC, 0xDDFE, 0xDEA2, 0xB0AA, 0xB1CE, 0, 0, /* 0x30 */ + 0, 0, 0, 0xDEAC, 0, 0, 0, 0, /* 0x40 */ + 0xDEA6, 0xBDB6, 0xC8EF, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xDEA1, 0, /* 0x50 */ + 0, 0xDEA5, 0, 0, 0, 0, 0xDEA9, 0, /* 0x50 */ + 0, 0, 0, 0, 0xDEA8, 0, 0, 0, /* 0x60 */ + 0xDEA7, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xDEAD, 0, 0xD4CC, 0, 0, 0, /* 0x70 */ + 0, 0xDEB3, 0xDEAA, 0xDEAE, 0, 0, 0xC0D9, 0, /* 0x70 */ + 0, 0, 0, 0, 0xB1A1, 0xDEB6, 0, 0xDEB1, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xDEB2, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xD1A6, 0xDEB5, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xDEAF, 0, 0, 0, /* 0xA0 */ + 0xDEB0, 0, 0xD0BD, 0, 0, 0, 0xDEB4, 0xCAED, /* 0xA0 */ + 0xDEB9, 0, 0, 0, 0, 0, 0, 0xDEB8, /* 0xB0 */ + 0, 0xDEB7, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xDEBB, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xBDE5, 0, 0, 0, 0, 0, 0xB2D8, /* 0xC0 */ + 0xC3EA, 0, 0, 0xDEBA, 0, 0xC5BA, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xDEBC, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xCCD9, 0, 0, 0, /* 0xE0 */ + 0, 0xB7AA, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xD4E5, 0, 0, 0, 0xDEBD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDEBF, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xC4A2, 0, 0, 0, 0, 0xDEC1, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xDEBE, /* 0x20 */ + 0, 0xDEC0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xD5BA, 0, 0, 0, 0xDEC2, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF2AE, 0xBBA2, 0xC2B2, /* 0x40 */ + 0xC5B0, 0xC2C7, 0, 0, 0xF2AF, 0, 0, 0, /* 0x50 */ + 0, 0, 0xD0E9, 0, 0, 0, 0xD3DD, 0, /* 0x50 */ + 0, 0, 0xEBBD, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xB3E6, 0xF2B0, 0, 0xF2B1, 0, /* 0x60 */ + 0, 0xCAAD, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0xCBE4, 0xCFBA, 0xF2B2, /* 0x70 */ + 0xCAB4, 0xD2CF, 0xC2EC, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF2BE, 0, 0xB2CF, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xD1C1, 0xF2BA, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF2BC, 0xD4E9, 0, 0, 0xF2BB, /* 0xA0 */ + 0xF2B6, 0xF2BF, 0xF2BD, 0, 0xF2B9, 0, 0, 0xF2C7, /* 0xA0 */ + 0xF2C4, 0xF2C6, 0, 0, 0xF2CA, 0xF2C2, 0xF2C0, 0, /* 0xB0 */ + 0, 0, 0xF2C5, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xD6FB, 0, 0, 0, 0xF2C1, 0, 0xC7F9, 0xC9DF, /* 0xC0 */ + 0, 0xF2C8, 0xB9C6, 0xB5B0, 0, 0, 0xF2C3, 0xF2C9, /* 0xC0 */ + 0xF2D0, 0xF2D6, 0, 0, 0xBBD7, 0, 0, 0, /* 0xD0 */ + 0xF2D5, 0xCDDC, 0, 0xD6EB, 0, 0, 0xF2D2, 0xF2D4, /* 0xD0 */ + 0, 0, 0, 0, 0xB8F2, 0, 0, 0, /* 0xE0 */ + 0, 0xF2CB, 0, 0, 0, 0xF2CE, 0xC2F9, 0, /* 0xE0 */ + 0xD5DD, 0xF2CC, 0xF2CD, 0xF2CF, 0xF2D3, 0, 0, 0, /* 0xF0 */ + 0xF2D9, 0xD3BC, 0, 0, 0, 0, 0xB6EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAF1, 0, 0xB7E4, 0xF2D7, 0, 0, 0, 0xF2D8, /* 0x00 */ + 0xF2DA, 0xF2DD, 0xF2DB, 0, 0, 0xF2DC, 0, 0, /* 0x00 */ + 0, 0, 0xD1D1, 0xF2D1, 0, 0xCDC9, 0, 0xCECF, /* 0x10 */ + 0xD6A9, 0, 0xF2E3, 0, 0xC3DB, 0, 0xF2E0, 0, /* 0x10 */ + 0, 0xC0AF, 0xF2EC, 0xF2DE, 0, 0xF2E1, 0, 0, /* 0x20 */ + 0, 0xF2E8, 0, 0, 0, 0, 0xF2E2, 0, /* 0x20 */ + 0, 0xF2E7, 0, 0, 0xF2E6, 0, 0, 0xF2E9, /* 0x30 */ + 0, 0, 0, 0xF2DF, 0, 0, 0xF2E4, 0xF2EA, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xD3AC, /* 0x40 */ + 0xF2E5, 0xB2F5, 0, 0, 0xF2F2, 0, 0xD0AB, 0, /* 0x40 */ + 0, 0, 0, 0xF2F5, 0, 0, 0, 0xBBC8, /* 0x50 */ + 0, 0xF2F9, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF2F0, 0, 0, 0xF2F6, 0xF2F8, 0xF2FA, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF2F3, 0, /* 0x60 */ + 0xF2F1, 0, 0, 0, 0xBAFB, 0, 0xB5FB, 0, /* 0x70 */ + 0, 0, 0, 0xF2EF, 0xF2F7, 0xF2ED, 0xF2EE, 0, /* 0x70 */ + 0, 0, 0xF2EB, 0xF3A6, 0, 0xF3A3, 0, 0, /* 0x80 */ + 0xF3A2, 0, 0, 0xF2F4, 0, 0xC8DA, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF2FB, 0, 0, 0, 0xF3A5, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xC3F8, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF2FD, 0, 0, 0xF3A7, 0xF3A9, 0xF3A4, 0, 0xF2FC, /* 0xA0 */ + 0, 0, 0, 0xF3AB, 0, 0xF3AA, 0, 0, /* 0xB0 */ + 0, 0, 0xC2DD, 0, 0, 0xF3AE, 0, 0, /* 0xB0 */ + 0xF3B0, 0, 0, 0, 0, 0, 0xF3A1, 0, /* 0xC0 */ + 0, 0, 0xF3B1, 0xF3AC, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF3AF, 0xF2FE, 0xF3AD, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF3B2, 0, 0, 0, 0, /* 0xD0 */ + 0xF3B4, 0, 0, 0, 0, 0xF3A8, 0, 0, /* 0xE0 */ + 0, 0, 0xF3B3, 0, 0, 0, 0xF3B5, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xD0B7, 0, 0, 0, 0, 0xF3B8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9F9, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF3B9, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xF3B7, 0, 0xC8E4, 0xF3B6, 0, /* 0x10 */ + 0, 0, 0, 0xF3BA, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF3BB, 0xB4C0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xEEC3, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF3BC, 0, 0, 0xF3BD, 0, 0, 0, /* 0x30 */ + 0xD1AA, 0, 0, 0, 0xF4AC, 0xD0C6, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xD0D0, 0xD1DC, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xCFCE, 0, 0, 0xBDD6, /* 0x50 */ + 0, 0xD1C3, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0xB2B9, 0, 0, /* 0x60 */ + 0xB1ED, 0xF1C3, 0, 0xC9C0, 0xB3C4, 0, 0xD9F2, 0, /* 0x60 */ + 0xCBA5, 0, 0xF1C4, 0, 0, 0, 0, 0xD6D4, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF1C5, 0xF4C0, 0xF1C6, /* 0x70 */ + 0, 0xD4AC, 0xF1C7, 0, 0xB0C0, 0xF4C1, 0, 0, /* 0x80 */ + 0xF4C2, 0, 0, 0xB4FC, 0, 0xC5DB, 0, 0, /* 0x80 */ + 0, 0, 0xCCBB, 0, 0, 0, 0xD0E4, 0, /* 0x90 */ + 0, 0, 0, 0, 0xCDE0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF1C8, 0, 0xD9F3, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xB1BB, 0, 0xCFAE, 0, 0, /* 0xA0 */ + 0, 0xB8A4, 0, 0, 0, 0, 0, 0xF1CA, /* 0xB0 */ + 0, 0, 0, 0, 0xF1CB, 0, 0, 0, /* 0xB0 */ + 0, 0xB2C3, 0xC1D1, 0, 0, 0xD7B0, 0xF1C9, 0, /* 0xC0 */ + 0, 0xF1CC, 0, 0, 0, 0, 0xF1CE, 0, /* 0xC0 */ + 0, 0, 0xD9F6, 0, 0xD2E1, 0xD4A3, 0, 0, /* 0xD0 */ + 0xF4C3, 0xC8B9, 0, 0, 0, 0, 0, 0xF4C4, /* 0xD0 */ + 0, 0, 0xF1CD, 0xF1CF, 0xBFE3, 0xF1D0, 0, 0, /* 0xE0 */ + 0xF1D4, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF1D6, 0xF1D1, 0, 0xC9D1, 0xC5E1, 0, 0, 0, /* 0xF0 */ + 0xC2E3, 0xB9FC, 0, 0, 0xF1D3, 0, 0xF1D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB9D3, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF1DB, 0, 0, 0, 0, 0, /* 0x00 */ + 0xBAD6, 0, 0xB0FD, 0xF1D9, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF1D8, 0xF1D2, 0xF1DA, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF1D7, 0, 0, 0, 0xC8EC, 0, 0, /* 0x20 */ + 0, 0, 0xCDCA, 0xF1DD, 0, 0, 0, 0, /* 0x20 */ + 0xE5BD, 0, 0, 0, 0xF1DC, 0, 0xF1DE, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF1DF, 0, 0, 0xCFE5, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xF4C5, 0xBDF3, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xF1E0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0xF1E1, 0, 0, 0, 0xCEF7, /* 0x70 */ + 0, 0xD2AA, 0, 0xF1FB, 0, 0, 0xB8B2, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xBCFB, 0xB9DB, 0, 0xB9E6, 0xC3D9, 0xCAD3, 0xEAE8, /* 0xC0 */ + 0xC0C0, 0xBEF5, 0xEAE9, 0xEAEA, 0xEAEB, 0, 0xEAEC, 0xEAED, /* 0xC0 */ + 0xEAEE, 0xEAEF, 0xBDC7, 0, 0, 0, 0xF5FB, 0, /* 0xD0 */ + 0, 0, 0xF5FD, 0, 0xF5FE, 0, 0xF5FC, 0, /* 0xD0 */ + 0, 0, 0, 0xBDE2, 0, 0xF6A1, 0xB4A5, 0, /* 0xE0 */ + 0, 0, 0, 0xF6A2, 0, 0, 0, 0xF6A3, /* 0xE0 */ + 0, 0, 0, 0xECB2 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1D4, 0, 0, 0, 0, 0, 0, 0xD9EA, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xF6A4, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEEBA, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD5B2, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD3FE, 0xCCDC, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xCAC4 /* 0x90 */ + /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5C0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF6A5, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xBEAF, 0, /* 0x60 */ + 0, 0, 0, 0, 0xC6A9, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xDAA5, 0xBCC6, 0xB6A9, 0xB8BC, 0xC8CF, 0xBCA5, 0xDAA6, 0xDAA7, /* 0xA0 */ + 0xCCD6, 0xC8C3, 0xDAA8, 0xC6FD, 0, 0xD1B5, 0xD2E9, 0xD1B6, /* 0xA0 */ + 0xBCC7, 0, 0xBDB2, 0xBBE4, 0xDAA9, 0xDAAA, 0xD1C8, 0xDAAB, /* 0xB0 */ + 0xD0ED, 0xB6EF, 0xC2DB, 0, 0xCBCF, 0xB7ED, 0xC9E8, 0xB7C3, /* 0xB0 */ + 0xBEF7, 0xD6A4, 0xDAAC, 0xDAAD, 0xC6C0, 0xD7E7, 0xCAB6, 0, /* 0xC0 */ + 0xD5A9, 0xCBDF, 0xD5EF, 0xDAAE, 0xD6DF, 0xB4CA, 0xDAB0, 0xDAAF, /* 0xC0 */ + 0, 0xD2EB, 0xDAB1, 0xDAB2, 0xDAB3, 0xCAD4, 0xDAB4, 0xCAAB, /* 0xD0 */ + 0xDAB5, 0xDAB6, 0xB3CF, 0xD6EF, 0xDAB7, 0xBBB0, 0xB5AE, 0xDAB8, /* 0xD0 */ + 0xDAB9, 0xB9EE, 0xD1AF, 0xD2E8, 0xDABA, 0xB8C3, 0xCFEA, 0xB2EF, /* 0xE0 */ + 0xDABB, 0xDABC, 0, 0xBDEB, 0xCEDC, 0xD3EF, 0xDABD, 0xCEF3, /* 0xE0 */ + 0xDABE, 0xD3D5, 0xBBE5, 0xDABF, 0xCBB5, 0xCBD0, 0xDAC0, 0xC7EB, /* 0xF0 */ + 0xD6EE, 0xDAC1, 0xC5B5, 0xB6C1, 0xDAC2, 0xB7CC, 0xBFCE, 0xDAC3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDAC4, 0xCBAD, 0xDAC5, 0xB5F7, 0xDAC6, 0xC1C2, 0xD7BB, 0xDAC7, /* 0x00 */ + 0xCCB8, 0, 0xD2EA, 0xC4B1, 0xDAC8, 0xB5FD, 0xBBD1, 0xDAC9, /* 0x00 */ + 0xD0B3, 0xDACA, 0xDACB, 0xCEBD, 0xDACC, 0xDACD, 0xDACE, 0xB2F7, /* 0x10 */ + 0xDAD1, 0xDACF, 0xD1E8, 0xDAD0, 0xC3D5, 0xDAD2, 0, 0xDAD3, /* 0x10 */ + 0xDAD4, 0xDAD5, 0xD0BB, 0xD2A5, 0xB0F9, 0xDAD6, 0xC7AB, 0xDAD7, /* 0x20 */ + 0xBDF7, 0xC3A1, 0xDAD8, 0xDAD9, 0xC3FD, 0xCCB7, 0xDADA, 0xDADB, /* 0x20 */ + 0xC0BE, 0xC6D7, 0xDADC, 0xDADD, 0xC7B4, 0xDADE, 0xDADF, 0xB9C8, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xBBED, 0, 0, 0, 0, 0xB6B9, 0xF4F8, /* 0x40 */ + 0, 0xF4F9, 0, 0, 0xCDE3, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF5B9, 0, 0, /* 0x50 */ + 0, 0, 0xEBE0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCFF3, 0xBBBF, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xBAC0, 0xD4A5, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE1D9, 0, 0, 0, 0, /* 0x70 */ + 0xF5F4, 0xB1AA, 0xB2F2, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF5F5, 0, 0, 0xF5F7, 0, 0, /* 0x80 */ + 0, 0xBAD1, 0xF5F6, 0, 0xC3B2, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xF5F9, 0, 0, 0, /* 0x90 */ + 0xF5F8 /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0xB1B4, 0xD5EA, 0xB8BA, /* 0x10 */ + 0, 0xB9B1, 0xB2C6, 0xD4F0, 0xCFCD, 0xB0DC, 0xD5CB, 0xBBF5, /* 0x20 */ + 0xD6CA, 0xB7B7, 0xCCB0, 0xC6B6, 0xB1E1, 0xB9BA, 0xD6FC, 0xB9E1, /* 0x20 */ + 0xB7A1, 0xBCFA, 0xEADA, 0xEADB, 0xCCF9, 0xB9F3, 0xEADC, 0xB4FB, /* 0x30 */ + 0xC3B3, 0xB7D1, 0xBAD8, 0xEADD, 0xD4F4, 0xEADE, 0xBCD6, 0xBBDF, /* 0x30 */ + 0xEADF, 0xC1DE, 0xC2B8, 0xD4DF, 0xD7CA, 0xEAE0, 0xEAE1, 0xEAE4, /* 0x40 */ + 0xEAE2, 0xEAE3, 0xC9DE, 0xB8B3, 0xB6C4, 0xEAE5, 0xCAEA, 0xC9CD, /* 0x40 */ + 0xB4CD, 0, 0, 0xE2D9, 0xC5E2, 0xEAE6, 0xC0B5, 0, /* 0x50 */ + 0xD7B8, 0xEAE7, 0xD7AC, 0xC8FC, 0xD8D3, 0xD8CD, 0xD4DE, 0, /* 0x50 */ + 0xD4F9, 0xC9C4, 0xD3AE, 0xB8D3, 0xB3E0, 0, 0xC9E2, 0xF4F6, /* 0x60 */ + 0, 0, 0, 0xBAD5, 0, 0xF4F7, 0, 0, /* 0x60 */ + 0xD7DF, 0, 0, 0xF4F1, 0xB8B0, 0xD5D4, 0xB8CF, 0xC6F0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB3C3, 0, 0, 0xF4F2, 0xB3AC, 0, 0, /* 0x80 */ + 0, 0, 0xD4BD, 0xC7F7, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF4F4, 0, 0, 0xF4F3, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xCCCB, /* 0x90 */ + 0, 0, 0, 0xC8A4, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xF4F5, 0, 0xD7E3, 0xC5BF, 0xF5C0, 0, 0, /* 0xB0 */ + 0xF5BB, 0, 0xF5C3, 0, 0xF5C2, 0, 0xD6BA, 0xF5C1, /* 0xB0 */ + 0, 0, 0, 0xD4BE, 0xF5C4, 0, 0xF5CC, 0, /* 0xC0 */ + 0, 0, 0, 0xB0CF, 0xB5F8, 0, 0xF5C9, 0xF5CA, /* 0xC0 */ + 0, 0xC5DC, 0, 0, 0, 0, 0xF5C5, 0xF5C6, /* 0xD0 */ + 0, 0, 0xF5C7, 0xF5CB, 0, 0xBEE0, 0xF5C8, 0xB8FA, /* 0xD0 */ + 0, 0, 0, 0xF5D0, 0xF5D3, 0, 0, 0, /* 0xE0 */ + 0xBFE7, 0, 0xB9F2, 0xF5BC, 0xF5CD, 0, 0, 0xC2B7, /* 0xE0 */ + 0, 0, 0, 0xCCF8, 0, 0xBCF9, 0, 0xF5CE, /* 0xF0 */ + 0xF5CF, 0xF5D1, 0xB6E5, 0xF5D2, 0, 0xF5D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5BD, 0, 0, /* 0x00 */ + 0, 0xF5D4, 0xD3BB, 0, 0xB3EC, 0, 0, 0xCCA4, /* 0x00 */ + 0, 0, 0, 0, 0xF5D6, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF5D7, 0xBEE1, 0xF5D8, /* 0x10 */ + 0, 0, 0xCCDF, 0xF5DB, 0, 0, 0, 0, /* 0x20 */ + 0, 0xB2C8, 0xD7D9, 0, 0xF5D9, 0, 0xF5DA, 0xF5DC, /* 0x20 */ + 0, 0xF5E2, 0, 0, 0, 0xF5E0, 0, 0, /* 0x30 */ + 0, 0xF5DF, 0xF5DD, 0, 0, 0xF5E1, 0, 0, /* 0x30 */ + 0xF5DE, 0xF5E4, 0xF5E5, 0, 0xCCE3, 0, 0, 0xE5BF, /* 0x40 */ + 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0, 0, 0, 0, /* 0x40 */ + 0, 0xF5E6, 0xF5E7, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF5BE, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xB1C4, 0, /* 0x60 */ + 0, 0xF5BF, 0, 0, 0xB5C5, 0xB2E4, 0, 0xF5EC, /* 0x60 */ + 0xF5E9, 0, 0xB6D7, 0, 0xF5ED, 0, 0xF5EA, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF5EB, 0, 0, 0xB4DA, /* 0x70 */ + 0, 0xD4EA, 0, 0, 0, 0xF5EE, 0, 0xB3F9, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xF5EF, /* 0x80 */ + 0xF5F1, 0, 0, 0, 0xF5F0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF5F2, 0, 0xF5F3, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xC9ED, 0xB9AA, 0, 0, 0xC7FB, /* 0xA0 */ + 0, 0, 0xB6E3, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xCCC9, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xEAA6 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB3B5, 0xD4FE, /* 0x60 */ + 0xB9EC, 0xD0F9, 0, 0xE9ED, 0xD7AA, 0xE9EE, 0xC2D6, 0xC8ED, /* 0x60 */ + 0xBAE4, 0xE9EF, 0xE9F0, 0xE9F1, 0xD6E1, 0xE9F2, 0xE9F3, 0xE9F5, /* 0x70 */ + 0xE9F4, 0xE9F6, 0xE9F7, 0xC7E1, 0xE9F8, 0xD4D8, 0xE9F9, 0xBDCE, /* 0x70 */ + 0, 0xE9FA, 0xE9FB, 0xBDCF, 0xE9FC, 0xB8A8, 0xC1BE, 0xE9FD, /* 0x80 */ + 0xB1B2, 0xBBD4, 0xB9F5, 0xE9FE, 0, 0xEAA1, 0xEAA2, 0xEAA3, /* 0x80 */ + 0xB7F8, 0xBCAD, 0, 0xCAE4, 0xE0CE, 0xD4AF, 0xCFBD, 0xD5B7, /* 0x90 */ + 0xEAA4, 0xD5DE, 0xEAA5, 0xD0C1, 0xB9BC, 0, 0xB4C7, 0xB1D9, /* 0x90 */ + 0, 0, 0, 0xC0B1, 0, 0, 0, 0, /* 0xA0 */ + 0xB1E6, 0xB1E7, 0, 0xB1E8, 0, 0, 0, 0, /* 0xA0 */ + 0xB3BD, 0xC8E8, 0, 0, 0, 0, 0xE5C1, 0, /* 0xB0 */ + 0, 0xB1DF, 0, 0, 0, 0xC1C9, 0xB4EF, 0, /* 0xB0 */ + 0, 0xC7A8, 0xD3D8, 0, 0xC6F9, 0xD1B8, 0, 0xB9FD, /* 0xC0 */ + 0xC2F5, 0, 0, 0, 0, 0, 0xD3AD, 0, /* 0xC0 */ + 0xD4CB, 0xBDFC, 0, 0xE5C2, 0xB7B5, 0xE5C3, 0, 0, /* 0xD0 */ + 0xBBB9, 0xD5E2, 0, 0xBDF8, 0xD4B6, 0xCEA5, 0xC1AC, 0xB3D9, /* 0xD0 */ + 0, 0, 0xCCF6, 0, 0xE5C6, 0xE5C4, 0xE5C8, 0, /* 0xE0 */ + 0xE5CA, 0xE5C7, 0xB5CF, 0xC6C8, 0, 0xB5FC, 0xE5C5, 0, /* 0xE0 */ + 0xCAF6, 0, 0, 0xE5C9, 0, 0, 0, 0xC3D4, /* 0xF0 */ + 0xB1C5, 0xBCA3, 0, 0, 0, 0xD7B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDCB, 0xCBCD, 0xCACA, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0, /* 0x00 */ + 0, 0xD1A1, 0xD1B7, 0xE5CD, 0, 0xE5D0, 0, 0xCDB8, /* 0x00 */ + 0xD6F0, 0xE5CF, 0xB5DD, 0, 0xCDBE, 0, 0xE5D1, 0xB6BA, /* 0x10 */ + 0, 0, 0xCDA8, 0xB9E4, 0, 0xCAC5, 0xB3D1, 0xCBD9, /* 0x10 */ + 0xD4EC, 0xE5D2, 0xB7EA, 0, 0, 0, 0xE5CE, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE5D5, 0xB4FE, 0xE5D6, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE5D3, 0xE5D4, 0, /* 0x30 */ + 0xD2DD, 0, 0, 0xC2DF, 0xB1C6, 0, 0xD3E2, 0, /* 0x30 */ + 0, 0xB6DD, 0xCBEC, 0, 0xE5D7, 0, 0, 0xD3F6, /* 0x40 */ + 0, 0, 0, 0, 0, 0xB1E9, 0, 0xB6F4, /* 0x40 */ + 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0, 0, 0, 0xD2C5, /* 0x50 */ + 0xE5DC, 0, 0, 0xE5DE, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE5DD, 0xC7B2, 0, 0xD2A3, 0, 0, /* 0x60 */ + 0xE5DB, 0, 0, 0, 0, 0xD4E2, 0xD5DA, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE5E0, 0xD7F1, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xE5E1, 0, 0xB1DC, /* 0x70 */ + 0xD1FB, 0, 0xE5E2, 0xE5E4, 0, 0, 0, 0, /* 0x80 */ + 0xE5E3, 0, 0, 0xE5E5, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD2D8, 0, 0xB5CB, 0, 0xE7DF, 0, 0xDAF5, /* 0x90 */ + 0, 0xDAF8, 0, 0xDAF6, 0, 0xDAF7, 0, 0, /* 0x90 */ + 0, 0xDAFA, 0xD0CF, 0xC4C7, 0, 0, 0xB0EE, 0, /* 0xA0 */ + 0, 0, 0xD0B0, 0, 0xDAF9, 0, 0xD3CA, 0xBAAA, /* 0xA0 */ + 0xDBA2, 0xC7F1, 0, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0, /* 0xB0 */ + 0xDBA1, 0xD7DE, 0xDAFE, 0xC1DA, 0, 0, 0xDBA5, 0, /* 0xB0 */ + 0, 0xD3F4, 0, 0, 0xDBA7, 0xDBA4, 0, 0xDBA8, /* 0xC0 */ + 0, 0, 0xBDBC, 0, 0, 0, 0xC0C9, 0xDBA3, /* 0xC0 */ + 0xDBA6, 0xD6A3, 0, 0xDBA9, 0, 0, 0, 0xDBAD, /* 0xD0 */ + 0, 0, 0, 0xDBAE, 0xDBAC, 0xBAC2, 0, 0, /* 0xD0 */ + 0, 0xBFA4, 0xDBAB, 0, 0, 0, 0xDBAA, 0xD4C7, /* 0xE0 */ + 0xB2BF, 0, 0, 0xDBAF, 0, 0xB9F9, 0, 0xDBB0, /* 0xE0 */ + 0, 0, 0, 0, 0xB3BB, 0, 0, 0, /* 0xF0 */ + 0xB5A6, 0, 0, 0, 0, 0xB6BC, 0xDBB1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB6F5, 0, 0xDBB2, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xB1C9, 0, 0, 0, 0, 0xDBB4, 0, /* 0x10 */ + 0, 0, 0xDBB3, 0xDBB5, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xDBB7, /* 0x20 */ + 0, 0xDBB6, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDBB8, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xDBB9, 0, 0, 0xDBBA, 0, /* 0x40 */ + 0, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, /* 0x40 */ + 0xF4FB, 0, 0xBEC6, 0, 0, 0, 0, 0xD0EF, /* 0x50 */ + 0, 0, 0xB7D3, 0, 0, 0xD4CD, 0xCCAA, 0, /* 0x50 */ + 0, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0, 0, /* 0x60 */ + 0, 0xF5A4, 0xC0D2, 0, 0xB3EA, 0, 0xCDAA, 0xF5A5, /* 0x60 */ + 0xF5A3, 0xBDB4, 0xF5A8, 0, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, /* 0x70 */ + 0xCBE1, 0xF5AA, 0, 0, 0, 0xF5A6, 0xF5A7, 0xC4F0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF5AC, 0, 0xB4BC, /* 0x80 */ + 0, 0xD7ED, 0, 0xB4D7, 0xF5AB, 0xF5AE, 0, 0, /* 0x80 */ + 0xF5AD, 0xF5AF, 0xD0D1, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xC3D1, 0xC8A9, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF5B0, 0xF5B1, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF5B2, 0, 0, 0xF5B3, 0xF5B4, 0xF5B5, /* 0xA0 */ + 0, 0, 0, 0, 0xF5B7, 0xF5B6, 0, 0, /* 0xB0 */ + 0, 0, 0xF5B8, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB2C9, /* 0xC0 */ + 0, 0xD3D4, 0xCACD, 0, 0xC0EF, 0xD6D8, 0xD2B0, 0xC1BF, /* 0xC0 */ + 0, 0xBDF0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xB8AA /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBCF8, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF6C6, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xF6C7, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xF6C8 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x30 */ + 0xF6C9, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF6CA, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xF6CC, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xF6CB, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xF7E9 /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x30 */ + 0xF6CD, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xF6CE, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEEC4, 0xEEC5, 0xEEC6, /* 0x80 */ + 0xD5EB, 0xB6A4, 0xEEC8, 0xEEC7, 0xEEC9, 0xEECA, 0xC7A5, 0xEECB, /* 0x80 */ + 0xEECC, 0, 0xB7B0, 0xB5F6, 0xEECD, 0xEECF, 0, 0xEECE, /* 0x90 */ + 0, 0xB8C6, 0xEED0, 0xEED1, 0xEED2, 0xB6DB, 0xB3AE, 0xD6D3, /* 0x90 */ + 0xC4C6, 0xB1B5, 0xB8D6, 0xEED3, 0xEED4, 0xD4BF, 0xC7D5, 0xBEFB, /* 0xA0 */ + 0xCED9, 0xB9B3, 0xEED6, 0xEED5, 0xEED8, 0xEED7, 0xC5A5, 0xEED9, /* 0xA0 */ + 0xEEDA, 0xC7AE, 0xEEDB, 0xC7AF, 0xEEDC, 0xB2A7, 0xEEDD, 0xEEDE, /* 0xB0 */ + 0xEEDF, 0xEEE0, 0xEEE1, 0xD7EA, 0xEEE2, 0xEEE3, 0xBCD8, 0xEEE4, /* 0xB0 */ + 0xD3CB, 0xCCFA, 0xB2AC, 0xC1E5, 0xEEE5, 0xC7A6, 0xC3AD, 0, /* 0xC0 */ + 0xEEE6, 0xEEE7, 0xEEE8, 0xEEE9, 0xEEEA, 0xEEEB, 0xEEEC, 0, /* 0xC0 */ + 0xEEED, 0xEEEE, 0xEEEF, 0, 0, 0xEEF0, 0xEEF1, 0xEEF2, /* 0xD0 */ + 0xEEF4, 0xEEF3, 0, 0xEEF5, 0xCDAD, 0xC2C1, 0xEEF6, 0xEEF7, /* 0xD0 */ + 0xEEF8, 0xD5A1, 0xEEF9, 0xCFB3, 0xEEFA, 0xEEFB, 0, 0xEEFC, /* 0xE0 */ + 0xEEFD, 0xEFA1, 0xEEFE, 0xEFA2, 0xB8F5, 0xC3FA, 0xEFA3, 0xEFA4, /* 0xE0 */ + 0xBDC2, 0xD2BF, 0xB2F9, 0xEFA5, 0xEFA6, 0xEFA7, 0xD2F8, 0xEFA8, /* 0xF0 */ + 0xD6FD, 0xEFA9, 0xC6CC, 0, 0xEFAA, 0xEFAB, 0xC1B4, 0xEFAC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFFA, 0xCBF8, 0xEFAE, 0xEFAD, 0xB3FA, 0xB9F8, 0xEFAF, 0xEFB0, /* 0x00 */ + 0xD0E2, 0xEFB1, 0xEFB2, 0xB7E6, 0xD0BF, 0xEFB3, 0xEFB4, 0xEFB5, /* 0x00 */ + 0xC8F1, 0xCCE0, 0xEFB6, 0xEFB7, 0xEFB8, 0xEFB9, 0xEFBA, 0xD5E0, /* 0x10 */ + 0xEFBB, 0xB4ED, 0xC3AA, 0xEFBC, 0, 0xEFBD, 0xEFBE, 0xEFBF, /* 0x10 */ + 0, 0xCEFD, 0xEFC0, 0xC2E0, 0xB4B8, 0xD7B6, 0xBDF5, 0, /* 0x20 */ + 0xCFC7, 0xEFC3, 0xEFC1, 0xEFC2, 0xEFC4, 0xB6A7, 0xBCFC, 0xBEE2, /* 0x20 */ + 0xC3CC, 0xEFC5, 0xEFC6, 0, 0xEFC7, 0xEFCF, 0xEFC8, 0xEFC9, /* 0x30 */ + 0xEFCA, 0xC7C2, 0xEFF1, 0xB6CD, 0xEFCB, 0, 0xEFCC, 0xEFCD, /* 0x30 */ + 0xB6C6, 0xC3BE, 0xEFCE, 0, 0xEFD0, 0xEFD1, 0xEFD2, 0xD5F2, /* 0x40 */ + 0, 0xEFD3, 0xC4F7, 0, 0xEFD4, 0xC4F8, 0xEFD5, 0xEFD6, /* 0x40 */ + 0xB8E4, 0xB0F7, 0xEFD7, 0xEFD8, 0xEFD9, 0, 0xEFDA, 0xEFDB, /* 0x50 */ + 0xEFDC, 0xEFDD, 0, 0xEFDE, 0xBEB5, 0xEFE1, 0xEFDF, 0xEFE0, /* 0x50 */ + 0, 0xEFE2, 0xEFE3, 0xC1CD, 0xEFE4, 0xEFE5, 0xEFE6, 0xEFE7, /* 0x60 */ + 0xEFE8, 0xEFE9, 0xEFEA, 0xEFEB, 0xEFEC, 0xC0D8, 0, 0xEFED, /* 0x60 */ + 0xC1AD, 0xEFEE, 0xEFEF, 0xEFF0, 0, 0, 0xCFE2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xB3A4, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xC3C5, 0xE3C5, 0xC9C1, 0xE3C6, 0, 0xB1D5, 0xCECA, 0xB4B3, /* 0xE0 */ + 0xC8F2, 0xE3C7, 0xCFD0, 0xE3C8, 0xBCE4, 0xE3C9, 0xE3CA, 0xC3C6, /* 0xF0 */ + 0xD5A2, 0xC4D6, 0xB9EB, 0xCEC5, 0xE3CB, 0xC3F6, 0xE3CC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB7A7, 0xB8F3, 0xBAD2, 0xE3CD, 0xE3CE, 0xD4C4, 0xE3CF, 0, /* 0x00 */ + 0xE3D0, 0xD1CB, 0xE3D1, 0xE3D2, 0xE3D3, 0xE3D4, 0xD1D6, 0xE3D5, /* 0x00 */ + 0xB2FB, 0xC0BB, 0xE3D6, 0, 0xC0AB, 0xE3D7, 0xE3D8, 0xE3D9, /* 0x10 */ + 0, 0xE3DA, 0xE3DB, 0, 0xB8B7, 0xDAE2, 0, 0xB6D3, /* 0x10 */ + 0, 0xDAE4, 0xDAE3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xDAE6, 0, 0, 0, 0xC8EE, 0, /* 0x20 */ + 0, 0xDAE5, 0xB7C0, 0xD1F4, 0xD2F5, 0xD5F3, 0xBDD7, 0, /* 0x30 */ + 0, 0, 0, 0xD7E8, 0xDAE8, 0xDAE7, 0, 0xB0A2, /* 0x30 */ + 0xCDD3, 0, 0xDAE9, 0, 0xB8BD, 0xBCCA, 0xC2BD, 0xC2A4, /* 0x40 */ + 0xB3C2, 0xDAEA, 0, 0xC2AA, 0xC4B0, 0xBDB5, 0, 0, /* 0x40 */ + 0xCFDE, 0, 0, 0, 0xDAEB, 0xC9C2, 0, 0, /* 0x50 */ + 0, 0, 0, 0xB1DD, 0, 0, 0, 0xDAEC, /* 0x50 */ + 0, 0xB6B8, 0xD4BA, 0, 0xB3FD, 0, 0, 0xDAED, /* 0x60 */ + 0xD4C9, 0xCFD5, 0xC5E3, 0, 0xDAEE, 0, 0, 0, /* 0x60 */ + 0, 0, 0xDAEF, 0, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD3E7, 0xC2A1, 0, /* 0x80 */ + 0xDAF1, 0, 0, 0xCBE5, 0, 0xDAF2, 0, 0xCBE6, /* 0x80 */ + 0xD2FE, 0, 0, 0, 0xB8F4, 0, 0, 0xDAF3, /* 0x90 */ + 0xB0AF, 0xCFB6, 0, 0, 0xD5CF, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xCBED, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xDAF4, 0, 0, 0xE3C4, 0, 0, 0xC1A5, 0, /* 0xB0 */ + 0, 0xF6BF, 0, 0, 0xF6C0, 0xF6C1, 0xC4D1, 0, /* 0xB0 */ + 0xC8B8, 0xD1E3, 0, 0, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, /* 0xC0 */ + 0, 0xEFF4, 0, 0, 0xB4C6, 0xD3BA, 0xF6C2, 0xB3FB, /* 0xC0 */ + 0, 0, 0xF6C3, 0, 0, 0xB5F1, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xF6C5, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xD3EA, 0xF6A7, 0xD1A9, 0, 0, 0, 0, 0xF6A9, /* 0xE0 */ + 0, 0, 0, 0xF6A8, 0, 0, 0xC1E3, 0xC0D7, /* 0xF0 */ + 0, 0xB1A2, 0, 0, 0, 0, 0xCEED /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD0E8, 0xF6AB, 0, 0, 0xCFF6, 0, 0xF6AA, 0xD5F0, /* 0x00 */ + 0xF6AC, 0xC3B9, 0, 0, 0, 0xBBF4, 0xF6AE, 0xF6AD, /* 0x00 */ + 0, 0, 0, 0xC4DE, 0, 0, 0xC1D8, 0, /* 0x10 */ + 0, 0, 0, 0, 0xCBAA, 0, 0xCFBC, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xF6AF, 0, 0, 0xF6B0, 0, 0, /* 0x20 */ + 0xF6B1, 0, 0xC2B6, 0, 0, 0, 0, 0, /* 0x30 */ + 0xB0D4, 0xC5F9, 0, 0, 0, 0, 0xF6B2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xC7E0, 0xF6A6, 0, 0, 0xBEB8, 0, /* 0x50 */ + 0, 0xBEB2, 0, 0xB5E5, 0, 0, 0xB7C7, 0, /* 0x50 */ + 0xBFBF, 0xC3D2, 0xC3E6, 0, 0, 0xD8CC, 0, 0, /* 0x60 */ + 0, 0xB8EF, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xBDF9, 0xD1A5, 0, 0xB0D0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF7B0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF7B1, 0, 0, /* 0x80 */ + 0, 0, 0, 0xD0AC, 0, 0xB0B0, 0, 0, /* 0x80 */ + 0, 0xF7B2, 0xF7B3, 0, 0xF7B4, 0, 0, 0, /* 0x90 */ + 0xC7CA, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xBECF, 0, 0, 0xF7B7, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF7B6, 0, 0xB1DE, 0, 0xF7B5, /* 0xA0 */ + 0, 0, 0xF7B8, 0, 0xF7B9, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xCEA4, 0xC8CD, /* 0xE0 */ + 0, 0xBAAB, 0xE8B8, 0xE8B9, 0xE8BA, 0xBEC2, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xD2F4, 0, 0xD4CF, 0xC9D8 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2B3, 0xB6A5, 0xC7EA, /* 0x70 */ + 0xF1FC, 0xCFEE, 0xCBB3, 0xD0EB, 0xE7EF, 0xCDE7, 0xB9CB, 0xB6D9, /* 0x70 */ + 0xF1FD, 0xB0E4, 0xCBCC, 0xF1FE, 0xD4A4, 0xC2AD, 0xC1EC, 0xC6C4, /* 0x80 */ + 0xBEB1, 0xF2A1, 0xBCD5, 0, 0xF2A2, 0xF2A3, 0, 0xF2A4, /* 0x80 */ + 0xD2C3, 0xC6B5, 0, 0xCDC7, 0xF2A5, 0, 0xD3B1, 0xBFC5, /* 0x90 */ + 0xCCE2, 0, 0xF2A6, 0xF2A7, 0xD1D5, 0xB6EE, 0xF2A8, 0xF2A9, /* 0x90 */ + 0xB5DF, 0xF2AA, 0xF2AB, 0, 0xB2FC, 0xF2AC, 0xF2AD, 0xC8A7, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xB7E7, 0, /* 0xC0 */ + 0, 0xECA9, 0xECAA, 0xECAB, 0, 0xECAC, 0, 0, /* 0xD0 */ + 0xC6AE, 0xECAD, 0xECAE, 0, 0, 0, 0xB7C9, 0xCAB3, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE2B8, /* 0xE0 */ + 0xF7CF /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xF7D0, 0, 0, /* 0x00 */ + 0xB2CD, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xF7D1, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF7D3, 0xF7D2, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE2BB, 0, 0xBCA2, 0, 0xE2BC, /* 0x60 */ + 0xE2BD, 0xE2BE, 0xE2BF, 0xE2C0, 0xE2C1, 0xB7B9, 0xD2FB, 0xBDA4, /* 0x60 */ + 0xCACE, 0xB1A5, 0xCBC7, 0, 0xE2C2, 0xB6FC, 0xC8C4, 0xE2C3, /* 0x70 */ + 0, 0, 0xBDC8, 0, 0xB1FD, 0xE2C4, 0, 0xB6F6, /* 0x70 */ + 0xE2C5, 0xC4D9, 0, 0, 0xE2C6, 0xCFDA, 0xB9DD, 0xE2C7, /* 0x80 */ + 0xC0A1, 0, 0xE2C8, 0xB2F6, 0, 0xE2C9, 0, 0xC1F3, /* 0x80 */ + 0xE2CA, 0xE2CB, 0xC2F8, 0xE2CC, 0xE2CD, 0xE2CE, 0xCAD7, 0xD8B8, /* 0x90 */ + 0xD9E5, 0xCFE3, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF0A5, 0, 0, /* 0xA0 */ + 0xDCB0 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x60 */ + 0xC2ED, 0xD4A6, 0xCDD4, 0xD1B1, /* 0x60 */ + 0xB3DB, 0xC7FD, 0, 0xB2B5, 0xC2BF, 0xE6E0, 0xCABB, 0xE6E1, /* 0x70 */ + 0xE6E2, 0xBED4, 0xE6E3, 0xD7A4, 0xCDD5, 0xE6E5, 0xBCDD, 0xE6E4, /* 0x70 */ + 0xE6E6, 0xE6E7, 0xC2EE, 0, 0xBDBE, 0xE6E8, 0xC2E6, 0xBAA7, /* 0x80 */ + 0xE6E9, 0, 0xE6EA, 0xB3D2, 0xD1E9, 0, 0, 0xBFA5, /* 0x80 */ + 0xE6EB, 0xC6EF, 0xE6EC, 0xE6ED, 0, 0, 0xE6EE, 0xC6AD, /* 0x90 */ + 0xE6EF, 0, 0xC9A7, 0xE6F0, 0xE6F1, 0xE6F2, 0xE5B9, 0xE6F3, /* 0x90 */ + 0xE6F4, 0xC2E2, 0xE6F5, 0xE6F6, 0xD6E8, 0xE6F7, 0, 0xE6F8, /* 0xA0 */ + 0xB9C7, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF7BB, 0xF7BA, 0, 0, 0, 0, 0xF7BE, 0xF7BC, /* 0xB0 */ + 0xBAA1, 0, 0xF7BF, 0, 0xF7C0, 0, 0, 0, /* 0xB0 */ + 0xF7C2, 0xF7C1, 0xF7C4, 0, 0, 0xF7C3, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xF7C5, 0xF7C6, 0, 0, 0, /* 0xC0 */ + 0, 0xF7C7, 0, 0xCBE8, 0, 0, 0, 0, /* 0xD0 */ + 0xB8DF, 0, 0, 0, 0, 0, 0, 0xF7D4, /* 0xD0 */ + 0, 0xF7D5, 0, 0, 0, 0, 0xF7D6, 0, /* 0xE0 */ + 0, 0, 0, 0xF7D8, 0, 0xF7DA, 0, 0xF7D7, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xF7DB, 0, 0xF7D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7D7, 0, 0, 0, 0, /* 0x00 */ + 0xF7DC, 0, 0, 0, 0, 0, 0, 0xF7DD, /* 0x00 */ + 0, 0, 0, 0xF7DE, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xF7DF, /* 0x10 */ + 0, 0, 0, 0xF7E0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xDBCB, /* 0x20 */ + 0, 0, 0xD8AA, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE5F7, 0xB9ED, 0, 0, 0, /* 0x30 */ + 0, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0, 0xF7CA, /* 0x40 */ + 0xF7CC, 0xF7CB, 0, 0, 0, 0xF7CD, 0, 0xCEBA, /* 0x40 */ + 0, 0xF7CE, 0, 0, 0xC4A7 /* 0x50 */ + /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x70 */ + 0xD3E3, 0, 0, 0xF6CF, /* 0x70 */ + 0, 0xC2B3, 0xF6D0, 0, 0, 0xF6D1, 0xF6D2, 0xF6D3, /* 0x80 */ + 0xF6D4, 0, 0, 0xF6D6, 0, 0xB1AB, 0xF6D7, 0, /* 0x80 */ + 0xF6D8, 0xF6D9, 0xF6DA, 0, 0xF6DB, 0xF6DC, 0, 0, /* 0x90 */ + 0, 0, 0xF6DD, 0xF6DE, 0xCFCA, 0, 0xF6DF, 0xF6E0, /* 0x90 */ + 0xF6E1, 0xF6E2, 0xF6E3, 0xF6E4, 0xC0F0, 0xF6E5, 0xF6E6, 0xF6E7, /* 0xA0 */ + 0xF6E8, 0xF6E9, 0, 0xF6EA, 0, 0xF6EB, 0xF6EC, 0, /* 0xA0 */ + 0xF6ED, 0xF6EE, 0xF6EF, 0xF6F0, 0xF6F1, 0xF6F2, 0xF6F3, 0xF6F4, /* 0xB0 */ + 0xBEA8, 0, 0xF6F5, 0xF6F6, 0xF6F7, 0xF6F8, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xC8FA, 0xF6F9, 0xF6FA, 0xF6FB, 0xF6FC, /* 0xC0 */ + 0, 0, 0xF6FD, 0xF6FE, 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4, /* 0xC0 */ + 0xF7A5, 0, 0, 0xF7A6, 0xF7A7, 0xF7A8, 0xB1EE, 0xF7A9, /* 0xD0 */ + 0xF7AA, 0xF7AB, 0, 0, 0xF7AC, 0xF7AD, 0xC1DB, 0xF7AE, /* 0xD0 */ + 0, 0, 0xF7AF /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0xC4F1, /* 0x10 */ + 0xF0AF, 0xBCA6, 0xF0B0, 0xC3F9, 0, 0xC5B8, 0xD1BB, 0, /* 0x20 */ + 0xF0B1, 0xF0B2, 0xF0B3, 0xF0B4, 0xF0B5, 0xD1BC, 0, 0xD1EC, /* 0x20 */ + 0, 0xF0B7, 0xF0B6, 0xD4A7, 0, 0xCDD2, 0xF0B8, 0xF0BA, /* 0x30 */ + 0xF0B9, 0xF0BB, 0xF0BC, 0, 0, 0xB8EB, 0xF0BD, 0xBAE8, /* 0x30 */ + 0, 0xF0BE, 0xF0BF, 0xBEE9, 0xF0C0, 0xB6EC, 0xF0C1, 0xF0C2, /* 0x40 */ + 0xF0C3, 0xF0C4, 0xC8B5, 0xF0C5, 0xF0C6, 0, 0xF0C7, 0xC5F4, /* 0x40 */ + 0, 0xF0C8, 0, 0, 0, 0xF0C9, 0, 0xF0CA, /* 0x50 */ + 0xF7BD, 0, 0xF0CB, 0xF0CC, 0xF0CD, 0, 0xF0CE, 0, /* 0x50 */ + 0, 0, 0, 0xF0CF, 0xBAD7, 0, 0xF0D0, 0xF0D1, /* 0x60 */ + 0xF0D2, 0xF0D3, 0xF0D4, 0xF0D5, 0xF0D6, 0xF0D8, 0, 0, /* 0x60 */ + 0xD3A5, 0xF0D7, 0, 0xF0D9, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xF5BA, 0xC2B9, /* 0x70 */ + 0, 0, 0xF7E4, 0, 0, 0, 0, 0xF7E5, /* 0x80 */ + 0xF7E6, 0, 0, 0xF7E7, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xF7E8, 0xC2B4, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF7EA, 0, 0xF7EB, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xC2F3, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xF4F0, 0, 0, 0, /* 0xB0 */ + 0xF4EF, 0, 0, 0xC2E9, 0, 0xF7E1, 0xF7E2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xBBC6, 0, 0, 0, /* 0xC0 */ + 0, 0xD9E4, 0, 0, 0, 0xCAF2, 0xC0E8, 0xF0A4, /* 0xC0 */ + 0, 0xBADA, 0, 0, 0xC7AD, 0, 0, 0, /* 0xD0 */ + 0xC4AC, 0, 0, 0xF7EC, 0xF7ED, 0xF7EE, 0, 0xF7F0, /* 0xD0 */ + 0xF7EF, 0, 0xF7F1, 0, 0, 0xF7F4, 0, 0xF7F3, /* 0xE0 */ + 0, 0xF7F2, 0xF7F5, 0, 0, 0, 0, 0xF7F6, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xEDE9, 0, 0xEDEA, 0xEDEB, 0, 0xF6BC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GB_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xF6BD, 0, 0xF6BE, 0xB6A6, 0, /* 0x00 */ + 0xD8BE, 0, 0, 0xB9C4, 0, 0, 0, 0xD8BB, /* 0x10 */ + 0, 0xDCB1, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xCAF3, 0, 0xF7F7, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xF7F8, 0, 0, 0xF7F9, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xF7FB, /* 0x30 */ + 0, 0xF7FA, 0, 0xB1C7, 0, 0xF7FC, 0xF7FD, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF7FE, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xC6EB, 0xECB4, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xB3DD, /* 0x70 */ + 0xF6B3, 0, 0, 0xF6B4, 0xC1E4, 0xF6B5, 0xF6B6, 0xF6B7, /* 0x80 */ + 0xF6B8, 0xF6B9, 0xF6BA, 0xC8A3, 0xF6BB, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xC1FA, 0xB9A8, 0xEDE8, 0, 0, 0, 0xB9EA, /* 0x90 */ + 0xD9DF /* 0xA0 */ + /* 0xA0 */ +}; + diff --git a/sal/textenc/tcvtscn5.tab b/sal/textenc/tcvtscn5.tab new file mode 100644 index 000000000..18dc95f8b --- /dev/null +++ b/sal/textenc/tcvtscn5.tab @@ -0,0 +1,3226 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* chinese simplified (China) charsets: */ +/* GBT (GB12345) */ + +/* Some tables are in ctabscn2.cxx, because these tables are shared with */ +/* GB or GBK. */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2BB, 0xB6A1, 0, 0xC6DF, 0, 0, 0, 0xF8F1, /* 0x00 */ + 0xD5C9, 0xC8FD, 0xC9CF, 0xCFC2, 0xD8A2, 0xB2BB, 0, 0, /* 0x00 */ + 0xD8A4, 0xF8A9, 0, 0, 0xC7D2, 0xD8A7, 0xCAC0, 0, /* 0x10 */ + 0xC7F0, 0xB1FB, 0, 0, 0, 0, 0xD8A9, 0, /* 0x10 */ + 0, 0, 0xB6AA, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD8AD, 0, 0, 0xD1BE, 0xE3DC, 0xD6D0, 0, 0, /* 0x20 */ + 0xF8B3, 0, 0xB4AE, 0, 0, 0, 0xD8BC, 0, /* 0x30 */ + 0xCDE8, 0xB5A4, 0, 0xD6F7, 0, 0, 0, 0xD8AF, /* 0x30 */ + 0, 0, 0, 0xC4CB, 0, 0xBEC3, 0, 0xD8B1, /* 0x40 */ + 0xF7E1, 0, 0, 0xD6AE, 0, 0xD5A7, 0xBAF5, 0xB7A6, /* 0x40 */ + 0, 0, 0xC6B9, 0xC5D2, 0, 0, 0xB9D4, 0, /* 0x50 */ + 0xB3CB, 0xD2D2, 0, 0, 0xD8BF, 0xBEC5, 0xC6F2, 0xD2B2, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xD8C0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xC8E9, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xC7AC, 0, /* 0x70 */ + 0, 0, 0xC2D2, 0, 0, 0, 0xC1CB, 0, /* 0x80 */ + 0xD3E8, 0, 0, 0xCAC2, 0xB6FE, 0xD8A1, 0xD3DA, 0, /* 0x80 */ + 0, 0xF8FD, 0xBBA5, 0xD8C1, 0xCEE5, 0xBEAE, 0, 0, /* 0x90 */ + 0xD8A8, 0, 0, 0xD0A9, 0, 0, 0xD1C7, 0xD8BD, /* 0x90 */ + 0xD9EF, 0xCDF6, 0xBFBA, 0, 0xBDBB, 0xBAA5, 0xD2E0, 0, /* 0xA0 */ + 0xBAE0, 0, 0, 0xCFED, 0xBEA9, 0xCDA4, 0xC1C1, 0, /* 0xA0 */ + 0, 0, 0, 0xD9F1, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xC8CB, 0xD8E9, 0, 0, 0, 0, /* 0xB0 */ + 0xCAB2, 0xC8CA, 0xD8EC, 0xD8EA, 0xD8C6, 0, 0xF8DF, 0xB3F0, /* 0xC0 */ + 0, 0xD8EB, 0xBDF1, 0xBDE9, 0, 0xC8D4, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xD7D0, 0xCACB, 0xCBFB, 0xD5CC, /* 0xD0 */ + 0xB8B6, 0xCFC9, 0, 0, 0, 0xD9DA, 0xD8F0, 0xC7AA, /* 0xD0 */ + 0, 0xD8EE, 0, 0xB4FA, 0xC1EE, 0xD2D4, 0, 0, /* 0xE0 */ + 0xD8ED, 0, 0, 0xD8EF, 0, 0, 0, 0, /* 0xE0 */ + 0xD1F6, 0, 0xD6D9, 0xD8F2, 0, 0xD8F5, 0xBCFE, 0xF8C2, /* 0xF0 */ + 0, 0, 0, 0xC8CE, 0, 0xB7DD, 0, 0xB7C2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6F3, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xD8F8, 0xD2C1, 0, 0, 0xCEE9, 0xBCBF, 0xB7FC, /* 0x00 */ + 0xB7A5, 0xD0DD, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xBBEF, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xD8F3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xB2AE, /* 0x20 */ + 0xB9C0, 0, 0xD9A3, 0, 0xB0E9, 0, 0xC1E6, 0, /* 0x30 */ + 0xC9EC, 0, 0xCBC5, 0, 0xCBC6, 0xD9A4, 0, 0, /* 0x30 */ + 0, 0, 0, 0xB5E8, 0, 0, 0xB5AB, 0xD8F9, /* 0x40 */ + 0, 0, 0, 0, 0, 0xCEBB, 0xB5CD, 0xD7A1, /* 0x40 */ + 0xD7F4, 0xD3D3, 0, 0, 0, 0xBACE, 0, 0xD9A2, /* 0x50 */ + 0xD9DC, 0xE2C5, 0xD8FD, 0xB7F0, 0xD7F7, 0xD8FE, 0xD8FA, 0xD9A1, /* 0x50 */ + 0xC4E3, 0, 0, 0, 0xD8F4, 0, 0, 0xD8FB, /* 0x60 */ + 0, 0xC5E5, 0, 0, 0xC0D0, 0, 0, 0xD1F0, /* 0x60 */ + 0xB0DB, 0, 0, 0xBCD1, 0xD9A6, 0, 0xD9A5, 0, /* 0x70 */ + 0, 0, 0, 0xD9AC, 0xD9AE, 0, 0xD9AB, 0xCAB9, /* 0x70 */ + 0, 0, 0, 0xD9A9, 0xD6B6, 0, 0xC0B4, 0, /* 0x80 */ + 0xB3DE, 0xD9A8, 0, 0xC0FD, 0, 0xCACC, 0, 0xD9AA, /* 0x80 */ + 0, 0xD9A7, 0, 0, 0xD9B0, 0, 0xC2D8, 0xB6B1, /* 0x90 */ + 0, 0, 0, 0xB9A9, 0, 0xD2C0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xC2C2, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xCEEA, 0xBAEE, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xC7D6, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB1E3, /* 0xB0 */ + 0, 0, 0xF8F2, 0xB4D9, 0xB6ED, 0xD9B4, 0, 0, /* 0xC0 */ + 0, 0, 0xBFA1, 0, 0, 0, 0xD9DE, 0xC7CE, /* 0xC0 */ + 0xC0FE, 0xD9B8, 0, 0, 0, 0, 0, 0xCBD7, /* 0xD0 */ + 0xB7FD, 0, 0xD9B5, 0, 0xD9B7, 0xB1A3, 0xD3E1, 0xD9B9, /* 0xD0 */ + 0xCFC0, 0xD0C5, 0, 0xD9B6, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xD0DE, 0xB8A9, /* 0xE0 */ + 0, 0xBEE3, 0, 0xD9BD, 0, 0, 0, 0, /* 0xF0 */ + 0xD9BA, 0, 0xB0B3, 0, 0, 0, 0xD9C2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD8F6, 0, 0, 0, 0, 0, 0xC1A9, 0, /* 0x00 */ + 0, 0xB2D6, 0, 0xB8F6, 0xD9C4, 0xB1B6, 0, 0xD9BF, /* 0x00 */ + 0, 0xC3C7, 0xB5B9, 0, 0xBEF3, 0, 0, 0, /* 0x10 */ + 0xCCC8, 0xBAF2, 0xD2D0, 0, 0xD9C3, 0, 0, 0xBDE8, /* 0x10 */ + 0, 0xB3AB, 0, 0, 0, 0xD9C5, 0xBEEB, 0, /* 0x20 */ + 0xD9C6, 0xD9BB, 0xC4DF, 0xC2D7, 0xD9BE, 0xD9C1, 0xD9C0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xD6B5, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD9C8, 0, 0, 0, 0xBCD9, /* 0x40 */ + 0xD9CA, 0xCEB0, 0, 0, 0xD9BC, 0, 0xD9CB, 0xC6AB, /* 0x40 */ + 0, 0, 0, 0, 0, 0xD9C9, 0, 0, /* 0x50 */ + 0, 0, 0xD7F6, 0, 0xCDA3, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xBDA1, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xD9CC, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xB2E0, 0xD5EC, 0xC5BC, 0xCDB5, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xBFFE, 0, 0, 0, 0, 0xB8B5, 0, 0, /* 0x80 */ + 0xC0FC, 0, 0, 0, 0, 0xB0F8, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xD8F7, 0, /* 0x90 */ + 0xC9A1, 0xB1B8, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF8C1, 0xB4F6, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xB4DF, 0xD3B6, 0, 0, /* 0xA0 */ + 0, 0, 0xB0C1, 0xB4AB, 0xD8F1, 0xD5AE, 0, 0xC9CB, /* 0xB0 */ + 0, 0, 0xD9D1, 0xC9B5, 0, 0, 0xC7E3, 0, /* 0xB0 */ + 0, 0, 0xD9CD, 0, 0, 0xBDF6, 0, 0, /* 0xC0 */ + 0, 0xD9DD, 0, 0, 0, 0, 0, 0xCFF1, /* 0xC0 */ + 0, 0xC7C8, 0, 0, 0, 0xC6CD, 0xD9D2, 0, /* 0xD0 */ + 0, 0, 0xC1C5, 0, 0, 0, 0xCEB1, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xBDC4, 0xD9D6, 0xC9AE, /* 0xE0 */ + 0xD9C7, 0, 0, 0, 0xD9D5, 0xD9D4, 0xD9D7, 0, /* 0xE0 */ + 0, 0, 0, 0xCBDB, 0, 0xBDA9, 0, 0, /* 0xF0 */ + 0, 0xBCDB, 0, 0xC6A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2C7, 0, 0xD9AF, 0, 0xD2DA, 0, 0xD9D3, 0xD9D8, /* 0x00 */ + 0xBFEB, 0xBCF3, 0, 0xD9D9, 0, 0, 0, 0, /* 0x00 */ + 0xD9CF, 0, 0xC8E5, 0, 0xD9B1, 0xD9AD, 0, 0, /* 0x10 */ + 0xF8C5, 0, 0, 0, 0, 0, 0, 0xB3A5, /* 0x10 */ + 0, 0xC0DC, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xD3C5, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xB4A2, 0, 0, 0, 0, 0xD9B3, /* 0x30 */ + 0, 0, 0xD9D0, 0xD9CE, 0xD9B2, 0, 0, 0, /* 0x30 */ + 0xD8A3, 0xD4CA, 0, 0xD4AA, 0xD0D6, 0xB3E4, 0xD5D7, 0, /* 0x40 */ + 0xCFC8, 0xB9E2, 0, 0xBFCB, 0, 0xC3E2, 0, 0, /* 0x40 */ + 0, 0xB6D2, 0xB6F9, 0, 0xCDC3, 0xD9EE, 0xD9F0, 0, /* 0x50 */ + 0, 0, 0xF8AC, 0, 0xB6B5, 0, 0, 0, /* 0x50 */ + 0, 0, 0xBEA4, 0, 0, 0xC8EB, 0, 0, /* 0x60 */ + 0xC8AB, 0xC1BD, 0, 0xB0CB, 0xB9AB, 0xC1F9, 0xD9E2, 0, /* 0x60 */ + 0, 0xB9B2, 0, 0, 0, 0xB1F8, 0xC6E4, 0xBEDF, /* 0x70 */ + 0xB5E4, 0xD7C8, 0, 0, 0xBCE6, 0, 0, 0, /* 0x70 */ + 0xBCBD, 0, 0xD8E7, 0, 0, 0xC4DA, 0, 0, /* 0x80 */ + 0, 0xC8BD, 0, 0, 0xB2E1, 0xD4D9, 0, 0, /* 0x80 */ + 0, 0, 0xC3B0, 0, 0, 0xC3E1, 0xDAA2, 0xC8DF, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xB9DA, 0, 0xDAA3, 0, 0xD4A9, 0xDAA4, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD9FB, 0xB6AC, 0, 0, 0, /* 0xA0 */ + 0xB1F9, 0xD9FC, 0xF8A8, 0xBEF6, 0, 0xBFF6, 0xD2B1, 0xC0E4, /* 0xB0 */ + 0, 0, 0, 0, 0xD9FE, 0xD9FD, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xC6E0, 0, 0xF9A9, 0xDAA1, /* 0xC0 */ + 0xBEBB, 0xC1B9, 0, 0xB5F2, 0xC1E8, 0xB6B3, 0, 0xBCF5, /* 0xC0 */ + 0, 0xB4D5, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xC1DD, 0, 0xC4FD, 0, 0, /* 0xD0 */ + 0xF8C0, 0xB7B2, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF8DD, 0, 0, /* 0xE0 */ + 0xBBCB, 0xBFAD, 0, 0xB5CA, 0, 0xDBC9, 0xD0D7, 0, /* 0xF0 */ + 0xCDB9, 0xB0BC, 0xB3F6, 0, 0xDBCA, 0xBAAF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB5B6, 0xB5F3, 0xD8D6, 0xC8D0, 0, 0, 0xB7D6, 0xC7D0, /* 0x00 */ + 0xD8D7, 0, 0xBFAF, 0, 0, 0, 0xD8D8, 0, /* 0x00 */ + 0, 0xD0CC, 0xF8BB, 0, 0, 0, 0xEBBE, 0xC1D0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xB3F5, 0, 0, /* 0x10 */ + 0xC9BE, 0, 0, 0, 0xC5D0, 0, 0, 0, /* 0x20 */ + 0xC5D9, 0xC0FB, 0, 0xB1F0, 0, 0, 0xB9CE, 0, /* 0x20 */ + 0xB5BD, 0, 0, 0xD8DA, 0, 0, 0xD6C6, 0xCBA2, /* 0x30 */ + 0xC8AF, 0xC9B2, 0xB4CC, 0xBFCC, 0, 0, 0, 0, /* 0x30 */ + 0, 0xB6E7, 0, 0xCCEA, 0xD8D9, 0, 0, 0xD4F2, /* 0x40 */ + 0, 0, 0xCFF7, 0xF8C8, 0xD8DD, 0xC7B0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xCCDE, 0, 0xC6CA, 0, /* 0x50 */ + 0, 0, 0, 0xB8D5, 0xD8E0, 0, 0xD8DE, 0, /* 0x50 */ + 0, 0xD8DF, 0, 0, 0, 0xB0FE, 0, 0, /* 0x60 */ + 0, 0xCAA3, 0xBCF4, 0, 0, 0, 0xB9D0, 0xB8B1, /* 0x60 */ + 0, 0, 0xB8EE, 0, 0xD8DC, 0xB4B4, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD8E2, 0, 0xBDCB, /* 0x70 */ + 0, 0xD8E4, 0xD8E3, 0xBBAE, 0, 0, 0, 0xBEE7, /* 0x80 */ + 0xC5FC, 0xC1F5, 0xB9F4, 0, 0xD8DB, 0xBDA3, 0, 0, /* 0x80 */ + 0xD8E5, 0xBCC1, 0, 0xD8E6, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xC1A6, 0, 0, 0, 0xB9A6, /* 0x90 */ + 0xBCD3, 0, 0, 0xC1D3, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xD6FA, 0xC5AC, 0xBDD9, 0xDBBE, 0xDBBF, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xDBC0, 0, /* 0xB0 */ + 0, 0xBEA2, 0, 0xB2AA, 0, 0, 0, 0xD3C2, /* 0xC0 */ + 0, 0xC3E3, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xDBC2, 0, 0xC0D5, 0, 0, 0xB6AF, 0xDBC3, 0, /* 0xD0 */ + 0xBFB1, 0xCEF1, 0, 0xD1AB, 0, 0xCAA4, 0xC0CD, 0xC4BC, /* 0xD0 */ + 0, 0, 0xCAC6, 0, 0xC7DA, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xDBC4, 0xDBBD, 0, 0, 0, 0xC0F8, 0, 0, /* 0xF0 */ + 0xC8B0, 0xD9E8, 0xC9D7, 0, 0, 0, 0xB9B4, 0xCEF0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4C8, 0, 0, 0, 0, 0xB0FC, 0xB4D2, 0, /* 0x00 */ + 0xD0D9, 0, 0, 0, 0, 0xD9E9, 0, 0xDECB, /* 0x00 */ + 0xD9EB, 0, 0, 0, 0, 0xD8B0, 0xBBAF, 0xB1B1, /* 0x10 */ + 0, 0xB3D7, 0xD8CE, 0, 0, 0xD4D1, 0, 0, /* 0x10 */ + 0xBDB3, 0xBFEF, 0, 0xCFBB, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xB7CB, 0, 0, 0xD8D0, 0, 0xBBE3, /* 0x20 */ + 0, 0xD8D1, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xC6A5, 0, 0, 0, 0, 0xD8D2, 0xC4E4, /* 0x30 */ + 0xC7F8, 0xCAAE, 0, 0xC7A7, 0, 0xD8A6, 0, 0xC9FD, /* 0x40 */ + 0xCEE7, 0xBBDC, 0xB0EB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xB1B0, 0xD7E4, 0xD7BF, 0xD0AD, 0, 0, 0xC4CF, /* 0x50 */ + 0, 0, 0xB2A9, 0, 0xB2B7, 0, 0xB1E5, 0xDFB2, /* 0x50 */ + 0xD5BC, 0xBFA8, 0, 0xD8D5, 0, 0, 0xD8D4, 0xCED4, /* 0x60 */ + 0, 0xDAE0, 0, 0, 0, 0, 0xD8B4, 0xC3AE, /* 0x60 */ + 0xD3A1, 0xCEA3, 0, 0xBCB4, 0xC8B4, 0xC2D1, 0, 0xBEED, /* 0x70 */ + 0xD0B6, 0, 0xDAE1, 0, 0, 0, 0, 0xC7E4, /* 0x70 */ + 0, 0, 0xF8A7, 0, 0xB6F2, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xC0E5, 0xD8C7, 0xBAF1, 0, 0, 0xD8C8, 0, 0xD4AD, /* 0x90 */ + 0xB2DE, 0, 0xCFE1, 0, 0, 0xD8CA, 0xCFC3, 0, /* 0xA0 */ + 0xB3F8, 0xBEC7, 0, 0, 0, 0xD1E1, 0xD8CB, 0, /* 0xA0 */ + 0, 0, 0xC0F7, 0, 0xD8C9, 0, 0xDBCC, 0, /* 0xB0 */ + 0, 0, 0, 0xC8A5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xC8FE, 0, 0xB2CE, 0, 0, 0, 0, /* 0xC0 */ + 0xD3D6, 0xB2E6, 0xBCB0, 0xD3D1, 0, 0xB7B4, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xCAE5, 0, 0xC8A1, 0xCADC, /* 0xD0 */ + 0, 0xD0F0, 0, 0xC5D1, 0, 0, 0, 0xDBC5, /* 0xD0 */ + 0, 0, 0xB4D4, 0xBFDA, 0xB9C5, 0xBEE4, 0xC1ED, 0, /* 0xE0 */ + 0xDFB6, 0xDFB5, 0xF9A3, 0xBDD0, 0xD5D9, 0xB0C8, 0xB6A3, 0xBFC9, /* 0xE0 */ + 0xF8EB, 0xDFB3, 0xCAB7, 0xD3D2, 0, 0xD8CF, 0xF8F8, 0, /* 0xF0 */ + 0xCBBE, 0, 0, 0xDFB7, 0xB5F0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD3F5, 0, 0xB3D4, 0xB8F7, 0, 0xDFBA, 0, /* 0x00 */ + 0xBACF, 0xBCAA, 0xB5F5, 0, 0xCDAC, 0xC3FB, 0xE1E1, 0xC0F4, /* 0x00 */ + 0xCDC2, 0xCFF2, 0xDFB8, 0, 0, 0xC2C0, 0xDFB9, 0, /* 0x10 */ + 0, 0, 0, 0xBEFD, 0, 0xC1DF, 0xCDCC, 0xD2F7, /* 0x10 */ + 0xB7CD, 0xDFC1, 0, 0xDFC4, 0, 0, 0xB7F1, 0xB0C9, /* 0x20 */ + 0, 0xB7D4, 0, 0xBAAC, 0, 0xBFD4, 0xCBB1, 0, /* 0x20 */ + 0, 0xD6A8, 0xDFC5, 0, 0xCEE2, 0xB3B3, 0, 0, /* 0x30 */ + 0xCEFC, 0xB4B5, 0, 0xCEC7, 0xBAF0, 0, 0xCEE1, 0, /* 0x30 */ + 0xD1BD, 0, 0, 0xDFC0, 0, 0, 0xB4F4, 0, /* 0x40 */ + 0xB3CA, 0, 0xB8E6, 0xDFBB, 0, 0, 0, 0, /* 0x40 */ + 0xC4C5, 0, 0, 0, 0xDFBE, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xC4D8, 0, 0xDFCA, 0, 0xDFCF, 0, /* 0x60 */ + 0xD6DC, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xDFC9, 0xDFDA, 0xCEB6, 0, 0xBAC7, 0xDFCE, 0xDFC8, /* 0x70 */ + 0xC5DE, 0, 0, 0xC9EB, 0xBAF4, 0xC3FC, 0, 0, /* 0x70 */ + 0xBED7, 0, 0xDFC6, 0, 0xDFCD, 0, 0xC5D8, 0, /* 0x80 */ + 0, 0, 0, 0xD5A6, 0xBACD, 0, 0xBECC, 0xD3BD, /* 0x80 */ + 0xB8C0, 0, 0xD6E4, 0, 0xDFC7, 0xB9BE, 0xBFA7, 0, /* 0x90 */ + 0, 0, 0xDFCB, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xDFDB, 0xDFE5, 0, 0xDFD7, 0xDFD6, /* 0xA0 */ + 0xD7C9, 0xDFE3, 0xDFE4, 0xE5EB, 0xD2A7, 0xDFD2, 0, 0xBFA9, /* 0xA0 */ + 0, 0xD4DB, 0, 0xBFC8, 0xDFD4, 0, 0, 0, /* 0xB0 */ + 0xCFCC, 0, 0, 0xDFDD, 0xDFC3, 0xD1CA, 0, 0xDFDE, /* 0xB0 */ + 0xB0A7, 0xC6B7, 0xDFD3, 0, 0xBAE5, 0, 0xB6DF, 0xCDDB, /* 0xC0 */ + 0xB9FE, 0xD4D5, 0, 0, 0xDFDF, 0, 0xB0A5, 0xDFE7, /* 0xC0 */ + 0xDFD1, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xDFE1, 0, 0, 0, 0xDFE8, 0, /* 0xD0 */ + 0, 0xD4B1, 0, 0, 0, 0xB8E7, 0xC5B6, 0xDFEA, /* 0xE0 */ + 0xC9DA, 0xC1A8, 0xC4C4, 0, 0, 0xBFDE, 0xCFF8, 0, /* 0xE0 */ + 0, 0, 0xD5DC, 0xDFEE, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xB2B8, 0, 0xBADF, 0xDFEC, 0, 0xDBC1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1E4, 0, 0, 0xDFC2, 0, 0xCBF4, 0xB4BD, /* 0x00 */ + 0, 0xB0A6, 0, 0, 0, 0, 0, 0xDFF1, /* 0x00 */ + 0xCCC6, 0xDFF2, 0, 0, 0xDFED, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xDFF0, 0, 0, 0, 0xDFF3, /* 0x20 */ + 0, 0, 0xDFF4, 0, 0xBBA3, 0, 0xCADB, 0xCEA8, /* 0x20 */ + 0xE0A7, 0xB3AA, 0, 0xE0A6, 0, 0, 0, 0xE0A1, /* 0x30 */ + 0, 0, 0, 0, 0xDFFE, 0, 0xCDD9, 0xDFFC, /* 0x30 */ + 0, 0xDFFA, 0, 0xBFD0, 0xD7C4, 0, 0xC9CC, 0, /* 0x40 */ + 0, 0xDFF8, 0xB0A1, 0, 0, 0, 0, 0xCECA, /* 0x40 */ + 0xDFFD, 0, 0, 0xC6F4, 0, 0xDFFB, 0xE0A2, 0, /* 0x50 */ + 0, 0, 0, 0, 0xE0A8, 0, 0xD1C6, 0, /* 0x50 */ + 0, 0xB7C8, 0, 0, 0xC6A1, 0xC9B6, 0xC0B2, 0, /* 0x60 */ + 0, 0, 0xC5BE, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xE0A3, 0xE0A4, 0xE0A5, /* 0x70 */ + 0, 0, 0, 0xE0B4, 0xCCE4, 0, 0xE0B1, 0, /* 0x70 */ + 0xBFA6, 0xE0AF, 0xCEB9, 0xE0AB, 0xC9C6, 0, 0, 0xC0AE, /* 0x80 */ + 0xE0AE, 0xBAED, 0xBAB0, 0xE0A9, 0, 0, 0, 0xDFF6, /* 0x80 */ + 0, 0xE0B3, 0, 0, 0xE0B8, 0, 0, 0, /* 0x90 */ + 0xB4AD, 0xE0B9, 0xBBBD, 0, 0xCFB2, 0xBAC8, 0, 0xE0B0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xD0FA, /* 0xA0 */ + 0, 0, 0xC9A5, 0, 0xC7C7, 0, 0xB5A5, 0, /* 0xA0 */ + 0, 0xE0AC, 0xD3B4, 0xD4FB, 0, 0xDFF7, 0, 0, /* 0xB0 */ + 0, 0xE0AD, 0, 0xD3F7, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xE0C4, 0xD0E1, 0xC7BA, 0xD8C4, /* 0xC0 */ + 0, 0xE0BC, 0, 0, 0xE0C9, 0xE0CA, 0xC2F0, 0, /* 0xC0 */ + 0, 0xE0BE, 0xE0AA, 0xC9A4, 0xE0C1, 0, 0xE0B2, 0, /* 0xD0 */ + 0, 0, 0xCED8, 0, 0xCAC8, 0xE0C3, 0, 0xE0B5, /* 0xD0 */ + 0, 0xCECB, 0, 0xCBC3, 0xE0CD, 0xE0C6, 0xE0C2, 0, /* 0xE0 */ + 0xE0CB, 0xDFEF, 0xE0BA, 0, 0xE0C0, 0, 0, 0xE0C5, /* 0xE0 */ + 0, 0, 0xE0C7, 0, 0, 0xE0CC, 0xDFD9, 0xE0BB, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xCBD4, 0xE0D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE0D6, 0xE0D2, 0, 0, 0, 0, 0xCCBE, 0, /* 0x00 */ + 0xE0D0, 0xBCCE, 0, 0, 0xE0D1, 0xE0B6, 0xB8C2, 0xD8C5, /* 0x00 */ + 0, 0, 0, 0, 0xC5BB, 0, 0xDFF5, 0xB3A2, /* 0x10 */ + 0xD0EA, 0, 0, 0xC2EF, 0xDFE9, 0, 0xE0CF, 0xE0BD, /* 0x10 */ + 0, 0, 0, 0xE0D4, 0, 0, 0, 0xE0D7, /* 0x20 */ + 0, 0xBBA9, 0, 0, 0xE0DC, 0xE0D8, 0xDFEB, 0xD0A5, /* 0x20 */ + 0xDFB4, 0, 0xB3B0, 0, 0xD7EC, 0xDFD8, 0xCBBB, 0, /* 0x30 */ + 0xDFBC, 0xE0DA, 0, 0xCEFB, 0, 0, 0, 0xBAD9, /* 0x30 */ + 0, 0xF8B0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE0E1, 0xE0DD, 0xD2AD, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE0E2, 0, 0, 0xE0DB, /* 0x50 */ + 0xE0D9, 0xE0DF, 0, 0, 0, 0xDFD0, 0, 0, /* 0x50 */ + 0xDFD5, 0, 0xE0DE, 0, 0xE0E4, 0xDFE6, 0xDFDC, 0, /* 0x60 */ + 0xC6F7, 0xD8AC, 0xD4EB, 0xE0E6, 0xCAC9, 0, 0, 0xE0C8, /* 0x60 */ + 0, 0xE0E5, 0xDFE0, 0, 0xC5E7, 0, 0xB8C1, 0, /* 0x70 */ + 0xB6D6, 0xF8AB, 0, 0xE0E7, 0xE0E8, 0, 0, 0, /* 0x70 */ + 0xDFCC, 0, 0, 0, 0, 0xE0E9, 0xE0E3, 0xCFC5, /* 0x80 */ + 0, 0, 0, 0, 0xDFE2, 0, 0xBABF, 0xCCE7, /* 0x80 */ + 0, 0, 0, 0xE0EA, 0, 0xE0E0, 0, 0, /* 0x90 */ + 0, 0xC4F6, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xDFBF, 0, /* 0xA0 */ + 0xC1FC, 0, 0, 0, 0, 0, 0xF8F5, 0xE0EB, /* 0xA0 */ + 0, 0, 0, 0xE0B7, 0xD1CF, 0, 0xE0D3, 0xC8C2, /* 0xB0 */ + 0, 0, 0, 0, 0xBDC0, 0, 0, 0, /* 0xB0 */ + 0xDFF9, 0xE0BF, 0xCFF9, 0, 0, 0xD9E6, 0, 0, /* 0xC0 */ + 0xDFBD, 0xF8D3, 0xC4D2, 0, 0xF8EA, 0, 0, 0, /* 0xC0 */ + 0, 0xD6F6, 0, 0, 0xE0EC, 0, 0, 0xE0ED, /* 0xD0 */ + 0, 0, 0xC7F4, 0xCBC4, 0, 0xE0EE, 0xBBD8, 0xD8B6, /* 0xD0 */ + 0xD2F2, 0xE0EF, 0, 0, 0xB6DA, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE0F1, 0, 0, 0, 0, /* 0xE0 */ + 0xC0A7, 0xB4D1, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE0F2, 0xB9CC, 0, 0, 0, 0, 0xE0F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC6D4, 0xE0F4, 0, 0, 0xE0F0, /* 0x00 */ + 0xC8A6, 0xE0F6, 0xE0F5, 0xB9FA, 0, 0xCEA7, 0, 0, /* 0x00 */ + 0, 0, 0xD4B0, 0xD4B2, 0, 0, 0xCDBC, 0, /* 0x10 */ + 0xCDC5, 0, 0, 0, 0xE0F7, 0, 0, 0xCDC1, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD4DA, 0xDBD7, 0xDBD9, 0, 0xDBD8, 0xB9E7, 0xDBDC, 0xDBDD, /* 0x20 */ + 0xB5D8, 0, 0, 0xDBDA, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xDBDF, 0, 0, 0xBBF8, 0, /* 0x30 */ + 0xD6B7, 0, 0xDBE0, 0, 0, 0, 0, 0xBEF9, /* 0x40 */ + 0, 0, 0xB7BB, 0, 0xDBD0, 0xCCAE, 0xBFB2, 0, /* 0x40 */ + 0xD7F8, 0xBFD3, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xC6C2, 0, 0, 0xC0A4, 0, 0xCCB9, 0, /* 0x60 */ + 0xDBE7, 0xDBE1, 0xC6BA, 0xDBE3, 0, 0xDBE8, 0, 0xC5F7, /* 0x60 */ + 0, 0, 0, 0xDBEA, 0, 0, 0xDBE9, 0xBFC0, /* 0x70 */ + 0, 0, 0, 0xDBE6, 0xDBE5, 0, 0, 0, /* 0x70 */ + 0, 0, 0xB4B9, 0xC0AC, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xD0CD, 0xDBED, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xDBF2, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xB6E2, 0, 0, 0, 0, /* 0x90 */ + 0xDBF3, 0xDBD2, 0xB9B8, 0xD4AB, 0xDBEC, 0, 0, 0xDBF0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xBFE5, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xDBF9, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xB9A1, 0xB0A3, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xC2F1, 0, 0, 0xB3C7, 0xDBEF, /* 0xC0 */ + 0, 0, 0xDBF8, 0, 0xC6D2, 0xDBF4, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xDBFE, 0, 0xD3F2, /* 0xD0 */ + 0xB2BA, 0xDBEB, 0, 0, 0xDBFD, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xDCA4, 0, 0xDBFB, /* 0xE0 */ + 0, 0, 0, 0, 0xDBFA, 0, 0, 0xD6B4, /* 0xF0 */ + 0xDBFC, 0xC5E0, 0xBBF9, 0, 0, 0xDCA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDCA5, 0, 0xCCC3, 0, 0, 0xBCE1, 0xB6D1, 0xDDC0, /* 0x00 */ + 0, 0, 0xDBD1, 0xDCA1, 0, 0xDCA2, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xDBF1, 0, /* 0x10 */ + 0, 0xDCA7, 0, 0, 0, 0xDBF6, 0xDCA6, 0, /* 0x10 */ + 0xDCA9, 0xB1A4, 0, 0, 0xB5CC, 0, 0, 0, /* 0x20 */ + 0, 0, 0xBFB0, 0, 0, 0, 0, 0xD2A2, /* 0x20 */ + 0xD1DF, 0xB1A8, 0, 0, 0xB3A1, 0xB6C2, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xDCA8, 0, 0, 0, /* 0x40 */ + 0, 0, 0xBFE9, 0xDCE3, 0xCBFA, 0xEBF3, 0, 0xDBEE, /* 0x40 */ + 0, 0xCBDC, 0xDBF5, 0, 0xCBFE, 0, 0, 0xCDBF, /* 0x50 */ + 0xCCC1, 0, 0, 0, 0, 0, 0xC8FB, 0, /* 0x50 */ + 0, 0, 0xCEEB, 0, 0xDBF7, 0xDCAA, 0, 0, /* 0x60 */ + 0, 0, 0, 0xCCEE, 0xDCAB, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xB3BE, 0, 0, /* 0x70 */ + 0, 0xC7B5, 0, 0, 0, 0, 0xDBD3, 0, /* 0x70 */ + 0xDCAF, 0xDCAC, 0, 0xBEB3, 0, 0xCAFB, 0, 0, /* 0x80 */ + 0, 0xDCAD, 0xB5E6, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC9CA, 0xC4B9, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xDCAE, 0, 0xD7B9, 0, 0xD4F6, 0xD0E6, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xC4AB, 0xB6D5, 0, 0, 0, 0, 0xB6E9, 0, /* 0xA0 */ + 0, 0, 0, 0xB7D8, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xC7BD, 0xDBD4, 0, 0xBFD1, 0, /* 0xB0 */ + 0, 0xB1DA, 0, 0, 0, 0xDBD5, 0, 0xCCB3, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xDBD6, 0, 0xD1B9, 0, 0xBABE, 0, 0, /* 0xD0 */ + 0xC0DD, 0xDBDB, 0xDBE4, 0, 0, 0, 0xBBB5, 0xC2A2, /* 0xD0 */ + 0xDBE2, 0, 0xDBDE, 0, 0xC8C0, 0, 0, 0, /* 0xE0 */ + 0, 0xB0D3, 0, 0xCABF, 0xC8C9, 0, 0, 0xD7B3, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xD2BC, 0xBAF8, 0, 0, 0xCAD9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2BA, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFC4, /* 0x00 */ + 0, 0, 0, 0, 0xD9E7, 0xCFA6, 0xCDE2, 0, /* 0x10 */ + 0, 0xD9ED, 0xB6E0, 0, 0xD2B9, 0, 0, 0xB9BB, /* 0x10 */ + 0, 0, 0xC3CE, 0, 0xE2B9, 0xE2B7, 0, 0xB4F3, /* 0x20 */ + 0, 0xCCEC, 0xCCAB, 0xB7F2, 0, 0xD8B2, 0xD1EB, 0xBABB, /* 0x20 */ + 0, 0xCAA7, 0, 0, 0, 0, 0, 0xD2C4, /* 0x30 */ + 0xF8C9, 0, 0, 0, 0xDEC5, 0, 0xBCD0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xD1D9, 0, 0, 0xC6E6, /* 0x40 */ + 0xC4CE, 0xB7EE, 0, 0, 0, 0, 0xBFFC, 0xD7E0, /* 0x40 */ + 0xDBBC, 0xC6F5, 0, 0, 0xB1BC, 0xDEC8, 0, 0xCCD7, /* 0x50 */ + 0xDECA, 0, 0xDEC9, 0, 0, 0, 0, 0, /* 0x50 */ + 0xB5EC, 0, 0xC9DD, 0, 0, 0xB0C2, 0, 0, /* 0x60 */ + 0, 0xDEC6, 0xB6E1, 0, 0xBDB1, 0, 0xB7DC, 0, /* 0x60 */ + 0, 0, 0, 0xC5AE, 0xC5AB, 0, 0xC4CC, 0, /* 0x70 */ + 0xBCE9, 0xCBFD, 0, 0, 0, 0xBAC3, 0, 0, /* 0x70 */ + 0, 0xE5F9, 0xC8E7, 0xE5FA, 0xCDFD, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC8D1, 0, 0, 0xE5FB, 0, 0, /* 0x80 */ + 0, 0, 0xB6CA, 0xBCCB, 0, 0, 0xD1FD, 0xE6A1, /* 0x90 */ + 0, 0xC3EE, 0, 0, 0, 0xD7B1, 0xE6A4, 0, /* 0x90 */ + 0, 0, 0, 0xE5FE, 0xE6A5, 0xCDD7, 0, 0, /* 0xA0 */ + 0xB7C1, 0, 0, 0, 0, 0, 0xC4DD, 0xE6A8, /* 0xA0 */ + 0, 0, 0xE6A7, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xC3C3, 0, 0xC6DE, 0, 0, 0xE6AA, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xC4B7, 0, /* 0xC0 */ + 0, 0, 0xE6A2, 0xCABC, 0, 0, 0, 0, /* 0xC0 */ + 0xBDE3, 0xB9C3, 0xE6A6, 0xD0D5, 0xCEAF, 0, 0, 0xE6A9, /* 0xD0 */ + 0xE6B0, 0, 0xD2A6, 0, 0xBDAA, 0xE6AD, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE6AF, 0, 0xC0D1, 0, 0, /* 0xE0 */ + 0xD2CC, 0, 0, 0, 0xBCA7, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xE6B1, 0, 0xD2F6, 0, 0, 0, 0xD7CB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDFE, 0, 0xCDDE, 0, 0, 0, 0, /* 0x00 */ + 0, 0xE6B3, 0, 0, 0xE6B2, 0, 0, 0, /* 0x00 */ + 0, 0xE6B6, 0, 0xE6B8, 0, 0, 0, 0, /* 0x10 */ + 0xC4EF, 0, 0, 0, 0xC4C8, 0, 0, 0xBEEA, /* 0x10 */ + 0xC9EF, 0, 0, 0xE6B7, 0, 0xB6F0, 0, 0, /* 0x20 */ + 0, 0xC3E4, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xD3E9, 0, 0, 0, 0, 0xC8A2, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE6BD, 0, 0, 0, /* 0x30 */ + 0xE6B9, 0xC2A6, 0, 0, 0, 0, 0xC6C5, 0, /* 0x40 */ + 0, 0xCDF1, 0xE6BB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE6BC, 0, 0, /* 0x50 */ + 0, 0, 0xBBE9, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xE6BE, 0, 0, 0, 0xB8BE, 0xE6BA, /* 0x60 */ + 0, 0, 0xC0B7, 0, 0, 0xE6AB, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6C3, /* 0x70 */ + 0, 0, 0xE6C4, 0, 0, 0, 0, 0xD0F6, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC3BD, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xC3C4, 0xE6C2, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE6B4, /* 0xA0 */ + 0, 0, 0xE6C1, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE6C7, 0xCFB1, 0, 0xEBF4, 0, 0, /* 0xB0 */ + 0xE6CA, 0, 0, 0, 0, 0xC2E8, 0xE6C5, 0, /* 0xB0 */ + 0, 0xBCDE, 0xC9A9, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xBCB5, 0, 0, 0xCFD3, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xE6CE, 0xE5FD, /* 0xD0 */ + 0xE6D0, 0, 0, 0, 0xE6D1, 0, 0, 0, /* 0xD0 */ + 0xE6CB, 0xB5D5, 0, 0xE6CC, 0, 0, 0xE6CF, 0, /* 0xE0 */ + 0, 0xC4DB, 0, 0xE6C6, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE5FC, 0, 0, /* 0xF0 */ + 0, 0, 0, 0xE6B5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE6A3, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xE6AC, 0xE6D2, 0, 0xE6BF, 0xBDBF, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE6D4, 0xE6D3, /* 0x10 */ + 0, 0xE6CD, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xE6C8, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE6C9, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD3A4, 0, 0xE6D5, 0, 0xD9F8, 0, 0, 0xE6D6, /* 0x30 */ + 0xC9F4, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xE6D7, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE6AE, 0, 0, 0, /* 0x40 */ + 0xD7D3, 0xE6DD, 0, 0xE6DE, 0xBFD7, 0xD4D0, 0, 0xD7D6, /* 0x50 */ + 0xB4E6, 0, 0xE6DA, 0xD8C3, 0xD7CE, 0xD0A2, 0, 0xC3CF, /* 0x50 */ + 0, 0, 0xE6DF, 0xBCBE, 0xB9C2, 0xE6DB, 0, 0, /* 0x60 */ + 0, 0xBAA2, 0, 0xCBEF, 0xD8AB, 0, 0, 0, /* 0x60 */ + 0xCAEB, 0xE5EE, 0, 0xE6DC, 0, 0xB7F5, 0, 0, /* 0x70 */ + 0xD1A7, 0, 0xC8E6, 0, 0, 0xC4F5, 0, 0xC2CF, /* 0x70 */ + 0xE5B2, 0, 0, 0xCBFC, 0xE5B3, 0xD5AC, 0, 0xD3EE, /* 0x80 */ + 0xCAD8, 0xB0B2, 0, 0xCBCE, 0xCDEA, 0, 0, 0xBAEA, /* 0x80 */ + 0, 0, 0, 0xE5B5, 0, 0xE5B4, 0, 0xD7DA, /* 0x90 */ + 0xB9D9, 0xD6E6, 0xB6A8, 0xCDF0, 0xD2CB, 0, 0, 0, /* 0x90 */ + 0, 0, 0xBFCD, 0xD0FB, 0xCAD2, 0xE5B6, 0xBBC2, 0, /* 0xA0 */ + 0, 0, 0, 0xB9AC, 0, 0, 0, 0, /* 0xA0 */ + 0xD4D7, 0, 0, 0xBAA6, 0xD1E7, 0xCFFC, 0xBCD2, 0, /* 0xB0 */ + 0xE5B7, 0xC8DD, 0, 0, 0, 0, 0, 0xCBDE, /* 0xB0 */ + 0, 0, 0xBCC5, 0, 0xBCC4, 0xD2FA, 0xC3DC, 0xBFDC, /* 0xC0 */ + 0, 0, 0, 0, 0xB8BB, 0, 0, 0, /* 0xC0 */ + 0xC3C2, 0, 0xBAAE, 0xD4A2, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xC4AF, 0xB2EC, /* 0xD0 */ + 0, 0xB9D1, 0xC7DE, 0, 0xE5BB, 0xC1C8, 0xCAB5, 0xC4FE, /* 0xE0 */ + 0xD5AF, 0xC9F3, 0, 0xD0B4, 0xBFED, 0, 0xE5BC, 0, /* 0xE0 */ + 0xE5BE, 0, 0, 0, 0, 0xB3E8, 0xB1A6, 0, /* 0xF0 */ + 0xB4E7, 0, 0xCBC2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB7E2, 0, 0, 0xC9E4, 0, 0, 0xBDAB, /* 0x00 */ + 0xD7A8, 0xCEBE, 0xD7F0, 0xD1B0, 0, 0xB6D4, 0xB5BC, 0xD0A1, /* 0x00 */ + 0, 0xC9D9, 0, 0, 0, 0xE6D8, 0xBCE2, 0, /* 0x10 */ + 0, 0, 0xC9D0, 0, 0xE6D9, 0, 0, 0, /* 0x10 */ + 0, 0, 0xDECC, 0, 0xD3C8, 0xDECD, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xDECE, 0, 0, 0, /* 0x20 */ + 0, 0xBECD, 0, 0, 0, 0, 0, 0xDECF, /* 0x30 */ + 0xCAAC, 0xD2FC, 0xB3DF, 0xE5EA, 0xC4E1, 0, 0xCEB2, 0xC4F2, /* 0x30 */ + 0xBED6, 0xC6A8, 0, 0, 0, 0xBED3, 0, 0, /* 0x40 */ + 0xC7FC, 0xCCEB, 0xBDEC, 0xCEDD, 0, 0, 0xCABA, 0xC6C1, /* 0x40 */ + 0xE5EC, 0xD0BC, 0, 0, 0, 0xD5B9, 0, 0, /* 0x50 */ + 0, 0xE5ED, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xCDC0, 0, 0xC2C5, 0xE5EF, 0xB2E3, 0xC2C4, 0, 0, /* 0x60 */ + 0xE5F0, 0, 0, 0, 0xCAF4, 0, 0xE5F8, 0xCDCD, /* 0x60 */ + 0, 0xC9BD, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD2D9, 0xE1A8, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE1AC, 0, 0, 0, 0xE1A7, 0xE1A9, 0, 0, /* 0x80 */ + 0xE1AA, 0xE1AF, 0, 0, 0xB2ED, 0, 0, 0, /* 0x90 */ + 0, 0xE1AE, 0, 0, 0xE1B1, 0, 0, 0, /* 0x90 */ + 0, 0xB8D4, 0xE1B3, 0xE1B8, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xD1D2, 0, 0xE1B6, 0xE1B5, 0, 0, 0, /* 0xA0 */ + 0, 0xE1B7, 0, 0xD4C0, 0, 0xE1B2, 0, 0xE1BA, /* 0xB0 */ + 0xB0B6, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE1B9, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE1BE, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE1BC, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xD6C5, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xB6EB, 0, 0xD3F8, 0, 0, 0xC7CD, 0, 0, /* 0xE0 */ + 0xB7E5, 0, 0, 0, 0xE1AD, 0, 0xB5BA, 0, /* 0xF0 */ + 0, 0, 0, 0xBEFE, 0, 0xCFBF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1C7, 0xB3E7, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE1C1, 0xC6E9, 0, /* 0x00 */ + 0, 0, 0, 0, 0xB4DE, 0, 0xD1C2, 0xB8DA, /* 0x10 */ + 0, 0, 0, 0xE1C8, 0, 0, 0xE1C6, 0, /* 0x10 */ + 0, 0, 0xE1BF, 0, 0xE1C5, 0, 0xE1C3, 0xE1C2, /* 0x20 */ + 0, 0xB1C0, 0, 0, 0xE1B4, 0, 0xE1C4, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE1CB, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xE1CC, 0xE1CA, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xEFFA, /* 0x40 */ + 0, 0, 0xE1D3, 0xE1D2, 0xC7B6, 0, 0, 0, /* 0x40 */ + 0xE1B0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xE1CE, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xE1D4, 0, 0xE1D1, 0xE1CD, 0, 0, 0xE1CF, /* 0x60 */ + 0, 0, 0, 0, 0xE1D5, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE1D0, 0xE1D6, 0, 0xD5B8, 0, 0, 0xE1AB, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1C0, /* 0x90 */ + 0, 0xE1D7, 0, 0, 0, 0xE1D8, 0, 0, /* 0x90 */ + 0xE1BD, 0, 0, 0, 0, 0, 0, 0xE1BB, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE1DA, /* 0xB0 */ + 0xE1C9, 0, 0xC1EB, 0, 0xD3EC, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xBFF9, 0, 0xCEA1, 0, 0, /* 0xC0 */ + 0, 0, 0xC2CD, 0, 0xE1DB, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE7DD, 0, 0xB4A8, 0xD6DD, 0, /* 0xD0 */ + 0, 0xD1B2, 0xB3B2, 0, 0, 0xB9A4, 0xD7F3, 0xC7C9, /* 0xE0 */ + 0xBEDE, 0, 0, 0xCED7, 0, 0, 0xB2EE, 0, /* 0xE0 */ + 0xDBCF, 0xBCBA, 0xD2D1, 0xCBC8, 0xB0CD, 0, 0, 0xCFEF, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xD9E3, 0xBDED /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAD0, 0xB2BC, 0, 0, 0xB7AB, 0, /* 0x00 */ + 0, 0, 0, 0, 0xCFA3, 0, 0, 0, /* 0x00 */ + 0, 0xE0FB, 0, 0, 0xE0FA, 0xC5C1, 0xCCFB, 0, /* 0x10 */ + 0xF8D0, 0xE0F9, 0xD6E3, 0xB2AF, 0, 0xB5DB, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xCBA7, 0, 0, /* 0x20 */ + 0, 0, 0, 0xCAA6, 0, 0xCFAF, 0, 0, /* 0x20 */ + 0, 0, 0, 0xD5CA, 0, 0, 0xB4F8, 0xE1A1, /* 0x30 */ + 0xB3A3, 0, 0, 0, 0, 0xC3B1, 0, 0, /* 0x30 */ + 0xD6A1, 0, 0xC3DD, 0xE0F8, 0xE1A2, 0xB7F9, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xBBCF, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xE1A3, 0xC4BB, 0, 0xE0FE, /* 0x50 */ + 0xE0FD, 0, 0, 0xE1A4, 0, 0, 0xE1A5, 0xD6C4, /* 0x50 */ + 0, 0xE1A6, 0xB4B1, 0xB1D2, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xB0EF, 0xE0FC, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF8B5, 0xC6BD, 0xC4EA, 0, 0xB2A2, 0, /* 0x70 */ + 0xD0D2, 0xB8C9, 0xE7DB, 0xBBC3, 0xD3D7, 0xD3C4, 0xBCB8, 0xF8B8, /* 0x70 */ + 0xE2CF, 0, 0, 0, 0, 0, 0, 0xB1D3, /* 0x80 */ + 0, 0, 0xB4B2, 0xE2D1, 0, 0, 0, 0xD0F2, /* 0x80 */ + 0, 0, 0, 0, 0, 0xB5D7, 0xE2D2, 0xB5EA, /* 0x90 */ + 0, 0, 0xB8FD, 0, 0xB8AE, 0, 0, 0, /* 0x90 */ + 0xE2D4, 0, 0, 0, 0, 0xE2D3, 0xB6C8, 0xD7F9, /* 0xA0 */ + 0, 0, 0, 0xBFE2, 0, 0xCDA5, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xE2D8, 0, 0xE2D6, 0xCAFC, 0xBFB5, /* 0xB0 */ + 0xD3B9, 0xE2D5, 0, 0, 0, 0, 0xE2D7, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xC1AE, 0xC0C8, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE2DB, 0xE2DA, 0xC0AA, 0, 0, 0xC1CE, 0, /* 0xD0 */ + 0, 0, 0, 0xE2DC, 0, 0, 0, 0xC3ED, /* 0xD0 */ + 0xB3A7, 0xE2D0, 0xB7CF, 0xB9E3, 0, 0, 0, 0, /* 0xE0 */ + 0xE2DD, 0, 0xE2DE, 0, 0xC2AE, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xCCFC, 0xDBC8, 0, 0xD1D3, 0xCDA2, /* 0xF0 */ + 0, 0, 0xBDA8, 0, 0, 0, 0xDEC3, 0xD8A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDBCD, 0xD2EC, 0, 0xC5AA, 0, 0, 0, /* 0x00 */ + 0xDEC4, 0, 0xB1D7, 0xDFAE, 0, 0, 0, 0xCABD, /* 0x00 */ + 0, 0xDFB1, 0, 0xB9AD, 0, 0xD2FD, 0, 0xB8A5, /* 0x10 */ + 0xBAEB, 0, 0, 0xB3DA, 0, 0, 0, 0xB5DC, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xCFD2, 0xBBA1, /* 0x20 */ + 0, 0xE5F3, 0, 0, 0, 0xE5F4, 0, 0, /* 0x20 */ + 0, 0xC8F5, 0, 0xE5F2, 0, 0xD5C5, 0, 0, /* 0x30 */ + 0, 0, 0xC7BF, 0, 0xE5F6, 0, 0, 0, /* 0x30 */ + 0xECB0, 0, 0, 0, 0, 0, 0xF8A4, 0, /* 0x40 */ + 0xB5AF, 0, 0, 0, 0xC3D6, 0, 0xCDE4, 0, /* 0x40 */ + 0xE5E6, 0, 0, 0, 0, 0, 0xE5E8, 0xE5E7, /* 0x50 */ + 0xE5E9, 0xF8BD, 0, 0, 0, 0xD2CD, 0, 0, /* 0x50 */ + 0, 0xE1EA, 0xD0CE, 0, 0xCDAE, 0, 0xD1E5, 0, /* 0x60 */ + 0, 0xB2CA, 0xB1EB, 0, 0xB1F2, 0xC5ED, 0, 0, /* 0x60 */ + 0xD5C3, 0xD3B0, 0, 0xE1DC, 0, 0, 0, 0xE1DD, /* 0x70 */ + 0, 0xD2DB, 0, 0, 0xB1CB, 0, 0, 0, /* 0x70 */ + 0xCDF9, 0xD5F7, 0xE1DE, 0, 0, 0xB4FD, 0, 0xE1DF, /* 0x80 */ + 0xBADC, 0xE1E0, 0xBBB2, 0xC2C9, 0xBAF3, 0, 0, 0, /* 0x80 */ + 0xD0EC, 0xBEB6, 0xCDBD, 0, 0, 0, 0, 0xB5C3, /* 0x90 */ + 0xC5C7, 0xE1E3, 0, 0, 0xE1E4, 0, 0xB4D3, 0, /* 0x90 */ + 0xE1E2, 0xD3F9, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xE1E5, 0xB8B4, 0xD1AD, 0, 0, 0xE1E6, 0xCEA2, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xE1E7, 0, 0xB5C2, /* 0xB0 */ + 0, 0xB3B9, 0, 0, 0xE1E8, 0xBBD5, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xD0C4, 0xE2E0, 0xB1D8, 0, 0, /* 0xC0 */ + 0, 0xE2E1, 0, 0, 0xBCC9, 0xC8CC, 0, 0, /* 0xC0 */ + 0xECFE, 0xECFD, 0xDFAF, 0, 0, 0, 0xE2E2, 0xD6BE, /* 0xD0 */ + 0xCDFC, 0xC3A6, 0, 0, 0, 0xE3C3, 0, 0, /* 0xD0 */ + 0xD6D2, 0xE2E7, 0, 0, 0xE2E8, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xE2EC, 0xBFEC, 0, 0xE2ED, 0xE2E5, 0, /* 0xE0 */ + 0, 0xB3C0, 0, 0, 0, 0xC4EE, 0, 0, /* 0xF0 */ + 0xE2EE, 0, 0, 0xD0C3, 0, 0xBAF6, 0, 0xB7DE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xE2F7, 0, 0, 0xE2F4, 0xD4F5, 0xE2F3, /* 0x00 */ + 0, 0, 0xC5AD, 0, 0xD5FA, 0xC5C2, 0xB2C0, 0, /* 0x10 */ + 0, 0xE2EF, 0, 0xE2F2, 0, 0xCBBC, 0, 0, /* 0x10 */ + 0xB5A1, 0xE2F9, 0, 0, 0, 0xBCB1, 0xE2F1, 0xD0D4, /* 0x20 */ + 0xD4B9, 0xE2F5, 0xB9D6, 0xE2F6, 0, 0, 0, 0xC7D3, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE2F0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xEDA5, 0xE2FE, 0xCAD1, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xBBD0, 0, 0, /* 0x40 */ + 0xBFD6, 0, 0xBAE3, 0, 0, 0xCBA1, 0, 0, /* 0x50 */ + 0, 0xEDA6, 0xEDA3, 0, 0, 0xEDA2, 0, 0, /* 0x50 */ + 0, 0, 0xBBD6, 0xEDA7, 0xD0F4, 0, 0, 0xEDA4, /* 0x60 */ + 0xBADE, 0xB6F7, 0xE3A1, 0xB6B2, 0xCCF1, 0xB9A7, 0, 0xCFA2, /* 0x60 */ + 0xC7A1, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xD3C1, /* 0x70 */ + 0, 0, 0, 0xE3A7, 0xC7C4, 0, 0, 0, /* 0x80 */ + 0, 0xCFA4, 0, 0, 0xE3A9, 0xBAB7, 0, 0, /* 0x80 */ + 0, 0, 0xE3A8, 0, 0xBBDA, 0, 0xE3A3, 0, /* 0x90 */ + 0, 0, 0xE3A4, 0xE3AA, 0, 0xE3A6, 0, 0xCEF2, /* 0x90 */ + 0xD3C6, 0, 0, 0xBBBC, 0, 0, 0xD4C3, 0, /* 0xA0 */ + 0xC4FA, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE3AD, 0xB1AF, 0, 0xE3B2, 0xE2EA, 0xC3C6, 0, /* 0xB0 */ + 0xBCC2, 0, 0, 0xE3AC, 0xB5BF, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xC7E9, 0xE3B0, 0, /* 0xC0 */ + 0, 0, 0, 0xCDEF, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xBBF3, 0, 0, 0, 0xCCE8, 0, 0, /* 0xD0 */ + 0xE3AF, 0, 0xE3B1, 0, 0xCFA7, 0xE3AE, 0, 0xCEA9, /* 0xD0 */ + 0xBBDD, 0xB6F1, 0, 0, 0, 0, 0xB5EB, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xB6E8, 0xC4D5, 0xE3A2, 0xCFEB, 0xE3B7, 0, 0xBBCC, 0, /* 0xF0 */ + 0, 0xC8C7, 0xD0CA, 0xE2FC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE3B8, 0xB3EE, 0, 0, 0, 0, 0xEDA9, 0, /* 0x00 */ + 0xD3FA, 0xD3E4, 0, 0, 0, 0xEDAA, 0xE3B9, 0xD2E2, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE3B5, 0, 0, /* 0x10 */ + 0, 0, 0xD3DE, 0xB0AE, 0xE3AB, 0, 0, 0xB8D0, /* 0x10 */ + 0xE3B3, 0, 0, 0xE3B6, 0, 0, 0, 0xC0A2, /* 0x20 */ + 0, 0, 0, 0xE3BA, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE2EB, 0, 0, 0xE2FD, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xE2E9, 0xF8FC, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xB4C8, 0, 0xE3BB, 0xCCAC, 0xBBC5, 0, 0xC9F7, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xC4BD, 0, 0, /* 0x50 */ + 0xB2D2, 0, 0xB2D1, 0, 0, 0xEDAB, 0, 0xE2FA, /* 0x50 */ + 0, 0, 0xC2FD, 0xB9DF, 0xEDA8, 0, 0, 0xBBDB, /* 0x60 */ + 0xBFAE, 0, 0xE2E6, 0xCBCB, 0, 0, 0xC2C7, 0, /* 0x60 */ + 0xCEBF, 0, 0, 0xE3A5, 0, 0xE3BC, 0xC7EC, 0xBFB6, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xD3C7, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xB1B9, 0xB1EF, 0, 0, 0xD4F7, 0, /* 0x80 */ + 0xC1AF, 0xC6BE, 0xE3B4, 0, 0xE3BE, 0, 0, 0, /* 0x90 */ + 0, 0, 0xB5AC, 0, 0, 0xEDAD, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xB7DF, 0, 0, 0xE3BF, /* 0xA0 */ + 0xBAA9, 0xEDAC, 0, 0xC3F5, 0xE3BD, 0, 0xE2E4, 0, /* 0xA0 */ + 0, 0, 0xCFDC, 0, 0, 0, 0xD2E4, 0xE3C0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xBAB6, 0, /* 0xB0 */ + 0, 0, 0xB6AE, 0, 0, 0, 0, 0xBFD2, /* 0xC0 */ + 0xD0B8, 0xD3A6, 0xB0C3, 0xEDAE, 0xE2F8, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xE3C1, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xF8D6, 0xEDA1, /* 0xD0 */ + 0, 0, 0, 0xEDAF, 0, 0, 0xC5B3, 0, /* 0xE0 */ + 0xE2FB, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xB3CD, 0, 0, 0xE3C2, 0xC0C1, 0xBBB3, /* 0xF0 */ + 0xD0FC, 0, 0xE2E3, 0, 0xBEE5, 0, 0xC9E5, 0xDCB2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC1B5, 0, 0, 0, 0, 0, 0, 0xEDB0, /* 0x00 */ + 0xB8EA, 0, 0xCEEC, 0, 0xD0E7, 0xCAF9, 0xC8D6, 0, /* 0x00 */ + 0xB3C9, 0xCED2, 0xBDE4, 0, 0xEAA7, 0xE3DE, 0xBBF2, 0, /* 0x10 */ + 0, 0, 0xC6DD, 0xEAA9, 0, 0, 0, 0xEAAA, /* 0x10 */ + 0, 0xEAAC, 0xEAAB, 0, 0xEAAE, 0xEAAD, 0, 0xEAA8, /* 0x20 */ + 0, 0xEAAF, 0xBDD8, 0, 0, 0, 0xC2BE, 0, /* 0x20 */ + 0xD5BD, 0, 0xCFB7, 0xB4C1, 0xB4F7, 0, 0, 0xBBA7, /* 0x30 */ + 0, 0, 0, 0, 0, 0xECE6, 0xECE5, 0xB7BF, /* 0x30 */ + 0xCBF9, 0xB1E2, 0, 0xECE7, 0, 0, 0, 0xC9C8, /* 0x40 */ + 0xECE8, 0xECE9, 0, 0xCAD6, 0xDED0, 0xB2C5, 0xD4FA, 0, /* 0x40 */ + 0, 0xF8DE, 0xB0C7, 0xB4F2, 0xC8D3, 0, 0, 0, /* 0x50 */ + 0xCDD0, 0, 0, 0xBFB8, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xBFDB, 0, 0, 0xC7A4, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xC5A4, 0xB0E7, 0xB3B6, /* 0x60 */ + 0, 0, 0, 0xB0E2, 0, 0, 0xB7F6, 0, /* 0x70 */ + 0, 0xC5FA, 0, 0, 0xB6F3, 0, 0xD5D2, 0xB3D0, /* 0x70 */ + 0xBCBC, 0, 0, 0, 0xB3AD, 0, 0, 0, /* 0x80 */ + 0, 0xBEF1, 0xB0D1, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD2D6, 0xCAE3, 0xD7A5, 0, 0xCDB6, 0xB6B6, 0xBFB9, /* 0x90 */ + 0xD5DB, 0, 0, 0xC5D7, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xC5EA, 0, 0, 0xC5FB, 0xCCA7, 0, 0, 0, /* 0xA0 */ + 0, 0xB1A7, 0, 0, 0, 0xB5D6, 0, 0, /* 0xB0 */ + 0, 0xC4A8, 0, 0xDED3, 0xD1BA, 0xB3E9, 0, 0xC3F2, /* 0xB0 */ + 0, 0, 0xB7F7, 0, 0xD6F4, 0, 0xB2F0, 0xC4B4, /* 0xC0 */ + 0xC4E9, 0xC0AD, 0xDED4, 0, 0xB0E8, 0xC5C4, 0xC1E0, 0, /* 0xC0 */ + 0xB9D5, 0, 0xBEDC, 0xCDD8, 0xB0CE, 0, 0xCDCF, 0xDED6, /* 0xD0 */ + 0xBED0, 0xD7BE, 0xDED5, 0xD5D0, 0xB0DD, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xC0A8, 0xCAC3, 0xDED7, 0xD5FC, /* 0xE0 */ + 0, 0xB9B0, 0, 0xC8AD, 0xCBA9, 0, 0xDED9, 0xBFBD, /* 0xF0 */ + 0, 0, 0, 0, 0xC6B4, 0xD7A7, 0xCAB0, 0xC4C3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB3D6, 0xB9D2, 0, 0, 0, 0, 0xD6B8, /* 0x00 */ + 0xEAFC, 0xB0B4, 0, 0, 0, 0, 0xBFE6, 0, /* 0x00 */ + 0, 0xCCF4, 0, 0, 0, 0, 0xCDDA, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xB0A4, 0, 0xC5B2, 0xB4EC, 0, 0, 0, 0xD5F1, /* 0x20 */ + 0, 0, 0xEAFD, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDEDA, 0xCDA6, 0, 0, 0xCDEC, 0xD0AE, 0, /* 0x30 */ + 0, 0, 0xCEE6, 0xDEDC, 0, 0xCDB1, 0xC0A6, 0, /* 0x40 */ + 0, 0xD7BD, 0, 0xDEDB, 0xB0C6, 0xBAB4, 0xC9D3, 0xC4F3, /* 0x40 */ + 0xBEE8, 0, 0, 0, 0, 0xB2B6, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xC5F5, /* 0x60 */ + 0xC9E1, 0xDEE6, 0, 0xDED1, 0, 0xDEE3, 0xF8C6, 0, /* 0x60 */ + 0, 0xDEDF, 0xF8C7, 0, 0, 0, 0xB4B7, 0xBDDD, /* 0x70 */ + 0, 0, 0xDEE0, 0xC4ED, 0, 0, 0, 0, /* 0x70 */ + 0xCFC6, 0, 0xB5E0, 0xC9A8, 0xC2D5, 0, 0, 0xB6DE, /* 0x80 */ + 0xCADA, 0xB5F4, 0xDEE5, 0, 0xD5C6, 0, 0xDEE1, 0xCCCD, /* 0x80 */ + 0xC6FE, 0, 0xC5C5, 0, 0, 0, 0xD2B4, 0, /* 0x90 */ + 0xBEF2, 0xD5F5, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xC2D3, 0, 0xCCBD, 0xB3B8, 0, 0xBDD3, 0, 0xBFD8, /* 0xA0 */ + 0xCDC6, 0xD1DA, 0xB4EB, 0, 0xDEE4, 0xDEDD, 0xDEE7, 0, /* 0xA0 */ + 0xEAFE, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xDEF2, 0, /* 0xB0 */ + 0xBCF0, 0, 0, 0, 0xDEED, 0, 0xDEF1, 0, /* 0xC0 */ + 0, 0xC8E0, 0, 0, 0, 0xD7E1, 0xDEEF, 0xC3E8, /* 0xC0 */ + 0xCCE1, 0, 0xB2E5, 0, 0, 0, 0xD2BE, 0, /* 0xD0 */ + 0, 0, 0xD1EF, 0xBBBB, 0, 0, 0xDEEE, 0, /* 0xD0 */ + 0xDEEB, 0xCED5, 0, 0xB4A7, 0, 0, 0, 0, /* 0xE0 */ + 0, 0xBFAB, 0xBEBE, 0, 0, 0xBDD2, 0xBBD3, 0, /* 0xE0 */ + 0, 0, 0xDEE9, 0, 0xD4AE, 0, 0xDEDE, 0, /* 0xF0 */ + 0xDEEA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xDEF5, 0xDEF8, 0xCBF0, 0, 0xB2AB, /* 0x00 */ + 0xB4A4, 0, 0, 0xB4EA, 0xC9A6, 0, 0, 0xB5B7, /* 0x10 */ + 0, 0, 0, 0xDEF6, 0xCBD1, 0, 0xB8E3, 0, /* 0x10 */ + 0xDEF7, 0xDEFA, 0, 0, 0, 0, 0xDEF9, 0, /* 0x20 */ + 0, 0, 0xCCC2, 0, 0xB0E1, 0xB4EE, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xE5BA, 0, 0xC7C0, 0, /* 0x30 */ + 0, 0, 0xD0AF, 0, 0, 0xB2EB, 0, 0xEBA1, /* 0x30 */ + 0, 0xDEF4, 0, 0, 0, 0, 0, 0xD2A1, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xDEE2, 0xDEF0, 0, 0xCBA4, 0, 0, 0, /* 0x50 */ + 0xD5AA, 0, 0, 0, 0xDEE8, 0, 0xDEFB, 0xC2A7, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xB4DD, /* 0x60 */ + 0, 0xC4A6, 0, 0, 0, 0xDEFD, 0, 0xD6BF, /* 0x60 */ + 0, 0, 0, 0xBFD9, 0, 0, 0xDED2, 0, /* 0x70 */ + 0xC3FE, 0xC4A1, 0xDFA1, 0xB2F4, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xC1CC, 0, 0, 0xBEEF, 0, 0xC6B2, /* 0x80 */ + 0xC0CC, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xB3C5, 0xC8F6, 0xC4D3, 0, 0xCBBA, 0xDEFE, 0, /* 0x90 */ + 0, 0xDFA4, 0, 0, 0, 0, 0xD7B2, 0xDED8, /* 0x90 */ + 0, 0, 0, 0xB5A7, 0xB3B7, 0xB2A6, 0, 0, /* 0xA0 */ + 0, 0xC1C3, 0, 0xB8A7, 0xC7CB, 0xB2A5, 0xB4E9, 0, /* 0xA0 */ + 0xD7AB, 0, 0xC6CB, 0xDEEC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xCCA2, 0xBAB3, 0, 0xCECE, 0xBCF1, /* 0xB0 */ + 0xDFA6, 0xD3B5, 0xC0DE, 0, 0xC2B0, 0xC9C3, 0, 0xD4F1, /* 0xC0 */ + 0, 0, 0xBBF7, 0xB5B2, 0, 0xB2D9, 0xC7E6, 0, /* 0xC0 */ + 0xDFA7, 0, 0xC7DC, 0, 0xB5A3, 0, 0, 0xDFA8, /* 0xD0 */ + 0xEBA2, 0, 0xBEDD, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xBCB7, 0, 0xDFAA, 0, 0xDFA9, 0, 0xB2C1, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xC4E2, 0, 0, 0xB1F7, /* 0xE0 */ + 0xC5A1, 0xB8E9, 0xD6C0, 0, 0xC0A9, 0, 0, 0xDFA2, /* 0xF0 */ + 0, 0, 0xB0DA, 0xCBD3, 0xDFA3, 0, 0xC8C5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC5CA, 0, 0, 0, 0xDEF3, 0, 0xC4EC, 0, /* 0x00 */ + 0, 0xDFAB, 0, 0, 0, 0, 0, 0xC2A3, /* 0x00 */ + 0, 0, 0, 0, 0xC0B9, 0, 0xDEFC, 0, /* 0x10 */ + 0xC8C1, 0xB2F3, 0, 0xDFA5, 0, 0xC9E3, 0, 0, /* 0x10 */ + 0, 0, 0xD4DC, 0xC2CE, 0xCCAF, 0xDFAC, 0, 0, /* 0x20 */ + 0, 0, 0xBDC1, 0xBEF0, 0xC0BF, 0, 0xDFAD, 0xD6A7, /* 0x20 */ + 0, 0, 0, 0, 0xEAB7, 0xEBB6, 0xCAD5, 0, /* 0x30 */ + 0xD8FC, 0xB8C4, 0, 0xB9A5, 0, 0, 0xB7C5, 0xD5FE, /* 0x30 */ + 0, 0, 0, 0, 0, 0xB9CA, 0, 0, /* 0x40 */ + 0xD0A7, 0xF4CD, 0, 0, 0, 0, 0, 0xC3F4, /* 0x40 */ + 0, 0xBEC8, 0, 0, 0, 0xEBB7, 0xB0BD, 0xB0DC, /* 0x50 */ + 0, 0xBDCC, 0, 0, 0, 0xB1D6, 0xB3A8, 0, /* 0x50 */ + 0, 0, 0xB8D2, 0xC9A2, 0, 0, 0xB6D8, 0, /* 0x60 */ + 0, 0, 0, 0xEBB8, 0xBEB4, 0, 0, 0, /* 0x60 */ + 0, 0, 0xC7C3, 0, 0xD5FB, 0xB5D0, 0, 0xB7F3, /* 0x70 */ + 0xCAFD, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xC1B2, 0xB1D0, 0, 0, 0, 0xCEC4, /* 0x80 */ + 0, 0, 0, 0, 0xB1F3, 0, 0, 0, /* 0x80 */ + 0xECB3, 0xB0DF, 0, 0, 0, 0xECB5, 0, 0xF8AF, /* 0x90 */ + 0, 0xC1CF, 0, 0xF5FA, 0xD0B1, 0, 0, 0xD5E5, /* 0x90 */ + 0, 0xCED3, 0, 0, 0xBDEF, 0xB3E2, 0, 0xB8AB, /* 0xA0 */ + 0, 0, 0, 0xEDBD, 0xD5B6, 0, 0, 0xCBB9, /* 0xA0 */ + 0xD0C2, 0, 0, 0, 0, 0, 0, 0xB6CF, /* 0xB0 */ + 0, 0xB7BD, 0, 0, 0xECB6, 0xCAA9, 0, 0, /* 0xB0 */ + 0, 0xC5D4, 0, 0xECB9, 0xECB8, 0xC2C3, 0xECB7, 0, /* 0xC0 */ + 0, 0, 0, 0xD0FD, 0xECBA, 0, 0xECBB, 0xD7E5, /* 0xC0 */ + 0, 0, 0xECBC, 0, 0, 0, 0xECBD, 0xC6EC, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xBCC8, 0, 0, 0xC8D5, 0xB5A9, 0, /* 0xE0 */ + 0xD6BC, 0xD4E7, 0, 0, 0xD1AE, 0xD0F1, 0xEAB8, 0xEAB9, /* 0xE0 */ + 0xEABA, 0xBAB5, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xCDFA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEAC0, 0, 0xB0BA, 0xEABE, 0, 0, 0xC0A5, 0, /* 0x00 */ + 0, 0, 0xEABB, 0, 0xB2FD, 0, 0xC3F7, 0xBBE8, /* 0x00 */ + 0, 0, 0, 0xD2D7, 0xCEF4, 0xEABF, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xEAC3, 0, 0xD0C7, /* 0x10 */ + 0xD3B3, 0, 0, 0, 0, 0xB4BA, 0, 0xC3C1, /* 0x20 */ + 0xD7F2, 0, 0, 0, 0, 0xD5D1, 0, 0xCAC7, /* 0x20 */ + 0, 0xEAC5, 0, 0, 0xEAC4, 0xEAC7, 0xEAC6, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xEACB, 0xCAB1, 0xBBCE, 0, 0, 0, 0, /* 0x40 */ + 0, 0xBDFA, 0, 0, 0xC9CE, 0, 0, 0xEACC, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xEACF, /* 0x50 */ + 0, 0, 0xCDED, 0, 0, 0xD6E7, 0, 0xEAC9, /* 0x50 */ + 0, 0xEACE, 0, 0, 0xCEEE, 0, 0xBBDE, 0, /* 0x60 */ + 0xB3BF, 0, 0, 0, 0, 0, 0xC6D5, 0xBEB0, /* 0x60 */ + 0xCEFA, 0, 0, 0, 0xC7E7, 0, 0xBEA7, 0xEAD0, /* 0x70 */ + 0, 0, 0xD6C7, 0, 0, 0, 0xC1C0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xEAD1, 0, 0, 0xCFBE, /* 0x80 */ + 0xD4CE, 0xEACD, 0, 0, 0xEAD2, 0, 0, 0, /* 0x80 */ + 0, 0xCAEE, 0, 0, 0, 0, 0xC5AF, 0xB0B5, /* 0x90 */ + 0, 0, 0, 0, 0, 0xEAD4, 0, 0, /* 0x90 */ + 0, 0, 0xB3A9, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF4DF, 0, 0, 0xD4DD, 0, 0, 0xC4BA, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xB1A9, 0, 0, 0, /* 0xB0 */ + 0, 0xE5DF, 0, 0, 0, 0, 0xEAD5, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xEACA, 0, 0xF8CF, 0xEABC, /* 0xC0 */ + 0, 0xCFFE, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xEAD3, 0, /* 0xD0 */ + 0, 0xCAEF, 0, 0xEAD6, 0xEAD7, 0xC6D8, 0, 0, /* 0xD0 */ + 0xBFF5, 0, 0, 0, 0, 0, 0xEAD8, 0, /* 0xE0 */ + 0, 0xEAD9, 0, 0, 0xC9B9, 0, 0, 0, /* 0xE0 */ + 0xD4BB, 0, 0xC7FA, 0xD2B7, 0xB8FC, 0, 0, 0xEAC2, /* 0xF0 */ + 0xCAE9, 0xB2DC, 0, 0, 0xC2FC, 0, 0xD4F8, 0xCCE6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7EE, 0, 0, 0xBBE1, 0, 0, 0, 0, /* 0x00 */ + 0xD4C2, 0xD3D0, 0xEBC3, 0xC5F3, 0, 0xB7FE, 0, 0, /* 0x00 */ + 0xEBD4, 0, 0, 0, 0xCBB7, 0xEBDE, 0, 0xC0CA, /* 0x10 */ + 0, 0, 0, 0xCDFB, 0, 0xB3AF, 0, 0xC6DA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xEBFC, 0xEBCA, /* 0x20 */ + 0xC4BE, 0, 0xCEB4, 0xC4A9, 0xB1BE, 0xD4FD, 0, 0xF8E8, /* 0x20 */ + 0, 0xD6EC, 0, 0, 0xF8E0, 0xB6E4, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xD0E0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xB8CB, 0, /* 0x40 */ + 0xE8BE, 0xC9BC, 0, 0, 0xE8BB, 0, 0xC0EE, 0xD0D3, /* 0x40 */ + 0xB2C4, 0xB4E5, 0, 0xE8BC, 0, 0, 0xD5C8, 0, /* 0x50 */ + 0, 0, 0, 0, 0xB6C5, 0, 0xE8BD, 0xCAF8, /* 0x50 */ + 0xB8DC, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xE8C2, 0, 0, 0xBABC, 0, 0xB1AD, /* 0x60 */ + 0xBDDC, 0xB6AB, 0xEABD, 0xE8C3, 0, 0xE8C6, 0, 0xE8CB, /* 0x70 */ + 0, 0, 0, 0, 0xE8CC, 0, 0xF8E9, 0xB0E5, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8C1, /* 0x80 */ + 0, 0xCDF7, 0, 0xE8CA, 0, 0, 0, 0, /* 0x80 */ + 0xCEF6, 0, 0, 0, 0, 0xD5ED, 0, 0xC1D6, /* 0x90 */ + 0xE8C4, 0, 0xC3B6, 0, 0xB9FB, 0xD6A6, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xBFDD, /* 0xA0 */ + 0xE8D2, 0, 0, 0xE8D7, 0, 0xE8D5, 0xBCDC, 0xBCCF, /* 0xB0 */ + 0xE8DB, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xE8DE, 0, 0xE8DA, 0xB1FA, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB0D8, /* 0xC0 */ + 0xC4B3, 0xB8CC, 0xC6E2, 0xC8BE, 0xC8E1, 0, 0, 0, /* 0xD0 */ + 0xE8CF, 0xE8D4, 0xE8D6, 0, 0, 0xE8D8, 0xD7F5, 0, /* 0xD0 */ + 0, 0, 0xE8DC, 0, 0, 0xB2E9, 0, 0, /* 0xE0 */ + 0, 0xE8D1, 0, 0, 0xBCED, 0, 0, 0xBFC2, /* 0xE0 */ + 0xE8CD, 0xD6F9, 0, 0xC1F8, 0xB2F1, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCAC1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE8D9, 0, 0, 0, 0, 0xD5A4, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xCBA8, 0, 0, 0, 0xC0F5, /* 0x10 */ + 0, 0, 0, 0, 0, 0xE8E9, 0, 0, /* 0x10 */ + 0, 0xD0A3, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xE8F2, 0xD6EA, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE8E0, 0xE8E1, 0, 0, 0, 0, /* 0x30 */ + 0xBACB, 0xB8F9, 0, 0, 0xB8F1, 0xD4D4, 0, 0, /* 0x30 */ + 0xE8EE, 0xE8EC, 0xB9F0, 0xCCD2, 0xE8E6, 0xCEA6, 0xBFF2, 0, /* 0x40 */ + 0xB0B8, 0xE8F1, 0xE8F0, 0, 0xD7C0, 0, 0xE8E4, 0, /* 0x40 */ + 0xCDA9, 0xC9A3, 0, 0xBBB8, 0xBDDB, 0xE8EA, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE8F8, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xE8F5, 0, 0xCDB0, 0xE8F6, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xC1BA, 0, 0xE8E8, 0, 0xC3B7, 0xB0F0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8F4, /* 0x80 */ + 0, 0, 0, 0xE8F7, 0, 0, 0, 0xB9A3, /* 0x90 */ + 0xE8C5, 0, 0, 0, 0, 0xCCF5, 0, 0xE8C9, /* 0x90 */ + 0, 0, 0xC9D2, 0, 0, 0, 0, 0xCEE0, /* 0xA0 */ + 0xC0E6, 0, 0, 0, 0, 0xCBF3, 0, 0xCCDD, /* 0xA0 */ + 0xD0B5, 0, 0, 0xCAE1, 0, 0xE8F3, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xC6FA, 0, 0, 0, /* 0xC0 */ + 0, 0xC3DE, 0, 0xC6E5, 0, 0xB9F7, 0, 0, /* 0xC0 */ + 0, 0, 0xB0F4, 0, 0, 0xD7D8, 0xE8C7, 0xD4E6, /* 0xD0 */ + 0xBCAC, 0, 0xC5EF, 0, 0, 0, 0, 0xB6B0, /* 0xD0 */ + 0xCCC4, 0, 0, 0xE9A6, 0, 0, 0, 0xD5BB, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xC9AD, 0, /* 0xE0 */ + 0xE9A2, 0xC0E2, 0xC6DC, 0, 0, 0xBFC3, 0, 0, /* 0xF0 */ + 0, 0xE8FE, 0xB9D7, 0, 0xE8FB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE9A4, 0, 0, 0, 0xD2CE, 0, 0, /* 0x00 */ + 0, 0, 0, 0xE9A3, 0, 0xD6B2, 0xD7B5, 0xE8E2, /* 0x00 */ + 0xE9A7, 0, 0xBDB7, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD2AC, 0, 0, 0, 0xE9B2, 0, 0, 0, /* 0x30 */ + 0, 0xE9A9, 0, 0, 0, 0xB4AA, 0, 0xB4BB, /* 0x30 */ + 0, 0, 0xE9AB, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xD1EE, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xB7E3, 0xD0A8, 0, 0, 0xE9A5, /* 0x50 */ + 0, 0, 0xB3FE, 0, 0, 0xE9AC, 0xC0E3, 0, /* 0x50 */ + 0xE9AA, 0, 0, 0xE9B9, 0, 0, 0xE9B8, 0, /* 0x60 */ + 0xE8E5, 0, 0, 0xE9AE, 0, 0xD2B5, 0xE8FA, 0, /* 0x60 */ + 0, 0xE9A8, 0, 0, 0, 0xBCAB, 0, 0xBFAC, /* 0x70 */ + 0xE9B1, 0xE9BA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE9AF, 0, 0xB8C5, 0, 0, 0, 0xD3DC, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xE9C7, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xC0C6, 0xE9C5, 0, 0, /* 0x90 */ + 0xE9B0, 0, 0, 0xE9BB, 0xB0F1, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9BC, /* 0xA0 */ + 0xD5A5, 0, 0xE8BF, 0xE9BE, 0, 0xE9BF, 0xC8D9, 0, /* 0xA0 */ + 0, 0xE9C1, 0, 0, 0xC1F1, 0, 0, 0xC8B6, /* 0xB0 */ + 0, 0, 0, 0xE9BD, 0, 0, 0, 0xE8E7, /* 0xB0 */ + 0, 0xE9C2, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xE9C3, 0xB9B9, 0xE9B3, 0xC7B9, 0xE9B6, 0, /* 0xC0 */ + 0xBBB1, 0, 0, 0, 0xE9C0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE8FD, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xE9CA, 0, 0, /* 0xE0 */ + 0, 0, 0xE9CE, 0xBDB0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xB2DB, 0, 0xE9C8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7AE, 0xC0D6, 0, 0, 0xE8C8, 0, 0, /* 0x00 */ + 0, 0, 0xB7AE, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xC2A5, 0, 0, 0, 0xE9CB, /* 0x10 */ + 0xE9CC, 0xB1EA, 0, 0, 0, 0, 0xCAE0, 0xD5C1, /* 0x10 */ + 0, 0xC4A3, 0, 0xD1F9, 0, 0, 0, 0, /* 0x20 */ + 0xE9D8, 0, 0xBAE1, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE9D4, 0, 0, /* 0x30 */ + 0xC6D3, 0xCAF7, 0xE8EB, 0, 0, 0xE9D7, 0xE9D0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xE9CF, 0, 0, 0xC7C1, /* 0x40 */ + 0xE8E3, 0, 0, 0xC7C5, 0, 0, 0, 0, /* 0x40 */ + 0xE9D2, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE9D9, 0xB3C8, 0, 0xE9D3, 0, 0, 0, 0xBBFA, /* 0x50 */ + 0, 0xCFF0, 0xCDD6, 0, 0, 0xE9CD, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xB3F7, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xCCB4, 0, 0, 0, 0xCFAD, 0, 0, 0, /* 0x80 */ + 0, 0xE8DF, 0, 0, 0, 0, 0xE9D5, 0, /* 0x80 */ + 0xE9DC, 0xE9DB, 0, 0, 0xB5B5, 0, 0, 0xE9DE, /* 0x90 */ + 0, 0, 0, 0, 0xE8ED, 0, 0, 0, /* 0x90 */ + 0xE9D1, 0, 0xBCEC, 0xE9C9, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xE9DD, 0, 0xE9DF, 0xC3CA, 0, 0, 0xF8ED, /* 0xA0 */ + 0, 0, 0, 0xE9C4, 0, 0, 0, 0, /* 0xB0 */ + 0xC4FB, 0, 0, 0xBCF7, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xB9F1, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xE9D6, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE9B5, 0xE8CE, 0, 0xE8FC, 0xE9DA, 0xE8DD, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE9C6, /* 0xE0 */ + 0xE8D3, 0, 0xE8C0, 0, 0xE9B4, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE8D0, 0, 0, 0, 0, /* 0xF0 */ + 0xE9B7, 0, 0, 0xD3A3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC0B8, 0, 0, 0, /* 0x00 */ + 0, 0, 0xC8A8, 0, 0, 0, 0, 0xE9A1, /* 0x00 */ + 0, 0, 0xE8EF, 0, 0, 0, 0xE9AD, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xE8F9, 0, /* 0x10 */ + 0xC7B7, 0xB4CE, 0, 0xD0C0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xD3FB, 0, 0, 0, 0, 0xECA4, /* 0x30 */ + 0, 0xECA5, 0xC6DB, 0, 0, 0xC7D5, 0xBFEE, 0, /* 0x30 */ + 0, 0, 0, 0xECA6, 0, 0, 0xECA7, 0xD0AA, /* 0x40 */ + 0, 0xC7B8, 0, 0, 0xB8E8, 0, 0, 0, /* 0x40 */ + 0xC5B7, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xECA8, 0, 0, 0, 0, 0, 0xECA3, /* 0x50 */ + 0, 0xBBB6, 0xD6B9, 0xD5FD, 0xB4CB, 0xB2BD, 0xCEE4, 0xC6E7, /* 0x60 */ + 0, 0, 0xCDE1, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xCBEA, 0, 0, 0, 0, 0xC0FA, /* 0x70 */ + 0xB9E9, 0xB4F5, 0, 0xCBC0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xE9E2, 0xE9E3, 0xD1EA, 0xE9E5, 0, 0xB4F9, 0, /* 0x80 */ + 0, 0xD1B3, 0xCAE2, 0, 0, 0xE9E8, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xD6B3, 0, /* 0x90 */ + 0xB2D0, 0, 0, 0xE9EA, 0, 0, 0xE9E6, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE9E4, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xE9EC, 0xE9E9, 0, 0, 0xE9E7, 0xE9EB, /* 0xA0 */ + 0, 0, 0xBCDF, 0xECAF, 0, 0xB6CE, 0, 0xD2F3, /* 0xB0 */ + 0, 0, 0xC9B1, 0xBFC7, 0, 0, 0, 0xB5EE, /* 0xB0 */ + 0, 0xBBD9, 0, 0, 0, 0xD2E3, 0xC5B9, 0, /* 0xC0 */ + 0, 0, 0, 0xCEE3, 0, 0xC4B8, 0, 0xC3BF, /* 0xC0 */ + 0, 0, 0xB6BE, 0xD8B9, 0xB1C8, 0, 0xB1D1, 0xC5FE, /* 0xD0 */ + 0, 0, 0, 0xC3AB, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xEBA4, 0xBAC1, 0, 0, 0, 0xCCBA, /* 0xE0 */ + 0, 0, 0, 0xEBA5, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xEBA8, 0, 0, 0, 0xEBA6, 0, 0xEBA7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEBA9, 0xEBAB, 0, /* 0x00 */ + 0xD5B1, 0, 0, 0, 0xEBAA, 0xEBAC, 0, 0xCACF, /* 0x00 */ + 0xD8B5, 0xC3F1, 0, 0xC3A5, 0, 0xEBAD, 0xC4CA, 0, /* 0x10 */ + 0xEBAE, 0xEBAF, 0xEBB0, 0xB7D5, 0, 0, 0, 0xB7FA, /* 0x10 */ + 0, 0xEBB1, 0, 0xC6F8, 0xEBB3, 0, 0xBAA4, 0xD1F5, /* 0x20 */ + 0xB0B1, 0, 0xEBB4, 0xC7E2, 0xEBB2, 0, 0xB5AA, 0xC2C8, /* 0x20 */ + 0xC7E8, 0, 0xEBB5, 0, 0xCBAE, 0xE3DF, 0, 0, /* 0x30 */ + 0xD3C0, 0, 0, 0, 0, 0xD9DB, 0, 0, /* 0x30 */ + 0xCDA1, 0xD6AD, 0xC7F3, 0, 0, 0, 0xD9E0, 0, /* 0x40 */ + 0, 0, 0xE3E2, 0, 0, 0, 0, 0, /* 0x40 */ + 0xCFAB, 0, 0, 0, 0xE3E0, 0xC9C7, 0, 0xBAB9, /* 0x50 */ + 0, 0, 0, 0xD1B4, 0xE3E1, 0xC8EA, 0xB9AF, 0xBDAD, /* 0x50 */ + 0xB3D8, 0xCEDB, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xE3E8, 0xE3E9, 0xCDF4, 0, 0, 0, 0, 0, /* 0x60 */ + 0xCCAD, 0, 0xBCB3, 0, 0xE3EA, 0, 0xE3EB, 0, /* 0x70 */ + 0, 0xD0DA, 0, 0, 0, 0xC6FB, 0xB7DA, 0, /* 0x70 */ + 0, 0xC7DF, 0xD2CA, 0xCED6, 0, 0xE3E4, 0xE3EC, 0, /* 0x80 */ + 0xC9F2, 0xB3C1, 0, 0, 0xE3E7, 0, 0, 0xC6E3, /* 0x80 */ + 0xE3E5, 0, 0, 0xEDB3, 0xE3E6, 0, 0, 0, /* 0x90 */ + 0, 0xC9B3, 0, 0xC5E6, 0, 0, 0, 0, /* 0x90 */ + 0, 0xC3BB, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xC4AD, 0, 0xE3F0, 0xBEDA, 0, /* 0xA0 */ + 0, 0xE3FB, 0xE3F5, 0xBAD3, 0, 0, 0, 0, /* 0xB0 */ + 0xB7D0, 0xD3CD, 0, 0xD6CE, 0xD5D3, 0xB9C1, 0xD5B4, 0xD1D8, /* 0xB0 */ + 0, 0, 0, 0, 0xD0B9, 0xC7F6, 0, 0, /* 0xC0 */ + 0, 0xC8AA, 0xB2B4, 0, 0xC3DA, 0, 0, 0, /* 0xC0 */ + 0xE3EE, 0, 0, 0xE3FC, 0xE3EF, 0xB7A8, 0xE3F7, 0xE3F4, /* 0xD0 */ + 0, 0, 0, 0xB7BA, 0, 0, 0, 0, /* 0xD0 */ + 0xE3F6, 0xC5DD, 0xB2A8, 0xC6FC, 0, 0xC4E0, 0, 0, /* 0xE0 */ + 0xD7A2, 0, 0xC0E1, 0xE3F9, 0, 0, 0xE3FA, 0xE3FD, /* 0xE0 */ + 0xCCA9, 0xE3F3, 0, 0xD3BE, 0, 0xB1C3 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4A7, 0, 0, 0xE4A6, /* 0x00 */ + 0, 0, 0, 0xD1F3, 0xE4A3, 0, 0xE4A9, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFB4, /* 0x10 */ + 0, 0xE4A8, 0xE4AE, 0xC2E5, 0, 0, 0xB6B4, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xBDF2, 0, 0xE4A2, /* 0x20 */ + 0, 0, 0xBAE9, 0xE4AA, 0, 0, 0xE4AC, 0, /* 0x20 */ + 0, 0xB6FD, 0xD6DE, 0xE4B2, 0, 0xE4AD, 0, 0, /* 0x30 */ + 0, 0xE4A1, 0, 0xBBEE, 0, 0xC7A2, 0xC5C9, 0, /* 0x30 */ + 0, 0xC1F7, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD5E3, 0xBFA3, 0, 0xE4BA, 0, 0xE4B7, 0, /* 0x50 */ + 0xE4BB, 0, 0, 0xE4BD, 0, 0, 0xC6D6, 0, /* 0x60 */ + 0, 0xBAC6, 0xC0CB, 0, 0, 0, 0xB8A1, 0xE4B4, /* 0x60 */ + 0, 0, 0, 0, 0xD4A1, 0, 0, 0xBAA3, /* 0x70 */ + 0xBDFE, 0xE4A4, 0, 0, 0xE4BC, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF8EF, 0, 0, 0xC4F9, 0, 0xE3FE, /* 0x80 */ + 0xCFFB, 0xC9E6, 0, 0, 0xD3BF, 0, 0xCFD1, 0, /* 0x80 */ + 0, 0xE4B3, 0, 0xE4B8, 0xE4B9, 0xCCE9, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xB8A2, 0xE4CA, 0, 0, 0xE4CC, 0xD1C4, /* 0xA0 */ + 0, 0, 0xD2BA, 0, 0, 0xBAAD, 0, 0, /* 0xB0 */ + 0xBAD4, 0, 0, 0, 0, 0, 0, 0xE4C3, /* 0xB0 */ + 0xF8AD, 0, 0, 0, 0xD7CD, 0xE4C0, 0xCFFD, 0xE4BF, /* 0xC0 */ + 0, 0, 0, 0xC1DC, 0xCCCA, 0, 0, 0, /* 0xC0 */ + 0, 0xCAE7, 0, 0, 0, 0, 0xC4D7, 0, /* 0xD0 */ + 0xCCD4, 0xE4C8, 0, 0, 0, 0xE4C7, 0xE4C1, 0, /* 0xD0 */ + 0xE4C4, 0xB5AD, 0, 0, 0xD3D9, 0, 0xE4C6, 0, /* 0xE0 */ + 0, 0, 0xC2D9, 0xD2F9, 0xB4E3, 0, 0xBBB4, 0, /* 0xE0 */ + 0, 0xC9EE, 0, 0xB4BE, 0, 0xD4A8, 0xE4B5, 0xBBEC, /* 0xF0 */ + 0, 0xD1CD, 0xC7B3, 0xCCED, 0xEDB5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7E5, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xE4CB, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xBBC1, 0xE4BE, 0, 0, 0xD3E5, 0, 0, /* 0x10 */ + 0xC7FE, 0xB6C9, 0, 0xD4FC, 0xB2B3, 0xE4D7, 0xCED0, 0, /* 0x20 */ + 0, 0xCEC2, 0, 0xE4CD, 0xB2E2, 0xCEBC, 0, 0xB8DB, /* 0x20 */ + 0, 0, 0xE4D6, 0, 0xBFCA, 0, 0, 0, /* 0x30 */ + 0xD3CE, 0, 0xC3EC, 0, 0, 0, 0xBBEB, 0, /* 0x30 */ + 0, 0, 0, 0xC5C8, 0xE4D8, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xCDC4, 0xE4CF, 0, /* 0x40 */ + 0, 0, 0, 0xE4D4, 0xE4D5, 0, 0xBAFE, 0, /* 0x50 */ + 0xCFE6, 0, 0, 0xD5BF, 0, 0, 0xE4A5, 0xE4D2, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE4D0, 0, 0, 0xE4CE, 0xCCC0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE4D3, 0, /* 0x80 */ + 0, 0xB8C8, 0, 0, 0, 0, 0, 0xE4E7, /* 0x80 */ + 0xD4B4, 0, 0, 0, 0, 0, 0xD7BC, 0, /* 0x90 */ + 0xE4DB, 0, 0, 0, 0xC1EF, 0xB9B5, 0, 0xE4E9, /* 0x90 */ + 0, 0, 0xD2E7, 0, 0, 0xE4DF, 0, 0xE4E0, /* 0xA0 */ + 0, 0, 0xCFAA, 0, 0, 0, 0, 0xCBDD, /* 0xA0 */ + 0, 0xE4DA, 0xE4D1, 0, 0xE4E5, 0, 0xC8DC, 0xE4E3, /* 0xB0 */ + 0, 0, 0xC4E7, 0xE4E2, 0, 0xE4E1, 0, 0, /* 0xB0 */ + 0, 0xB3FC, 0xE4E8, 0, 0xB2D7, 0xC3F0, 0, 0xB5E1, /* 0xC0 */ + 0, 0, 0, 0xD7CC, 0xB5D3, 0, 0xDCFE, 0xE4E6, /* 0xC0 */ + 0, 0xBBAC, 0, 0xD7D2, 0xCCCF, 0xEBF8, 0, 0, /* 0xD0 */ + 0, 0, 0xB9F6, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xBBA6, 0, 0, 0xD6CD, /* 0xE0 */ + 0, 0, 0xC9F8, 0, 0xB5CE, 0, 0, 0xC2B1, /* 0xF0 */ + 0xE4B0, 0xE4EF, 0, 0, 0, 0, 0, 0xC2FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD3E6, 0xC6AF, 0, 0, 0, 0xC6E1, 0, /* 0x00 */ + 0, 0xE4F5, 0, 0, 0, 0, 0, 0xC2A9, /* 0x00 */ + 0, 0, 0, 0, 0xD1DD, 0xE4EE, 0, 0, /* 0x10 */ + 0, 0, 0xC5BD, 0, 0, 0, 0, 0, /* 0x10 */ + 0xC4AE, 0, 0xBABA, 0xC1B0, 0xE4ED, 0, 0, 0, /* 0x20 */ + 0, 0xE4F6, 0xE4F4, 0xC2FE, 0xD7D5, 0xE4DD, 0, 0xE4F0, /* 0x20 */ + 0, 0xCAFE, 0xD5C7, 0xD5C4, 0, 0, 0xE4F1, 0, /* 0x30 */ + 0xBDA5, 0, 0, 0, 0, 0, 0xD1FA, 0xBDAC, /* 0x30 */ + 0, 0xF2A3, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xC6C3, 0, 0, 0xBDE0, 0, 0, 0, /* 0x50 */ + 0xC5CB, 0xE3ED, 0, 0xC7B1, 0, 0, 0xC2BA, 0, /* 0x50 */ + 0, 0, 0xE4EA, 0, 0xC8F3, 0, 0xC1CA, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xCCB6, 0xB3B1, 0xE4B1, /* 0x60 */ + 0xC0A3, 0, 0xE4FB, 0, 0xE4F3, 0, 0, 0xE4E4, /* 0x70 */ + 0xE4FA, 0, 0xE4FD, 0, 0xE4FC, 0, 0, 0xE4B6, /* 0x70 */ + 0xC9AC, 0, 0, 0, 0xB3CE, 0, 0xBDBD, 0xC0D4, /* 0x80 */ + 0xB3BA, 0xE4F7, 0, 0, 0xE4F9, 0xE4F8, 0xC5EC, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0xBDA7, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xE4C5, 0xD4E8, 0, 0, 0xD4F3, 0, 0, 0xE5A2, /* 0xA0 */ + 0, 0xEDB4, 0, 0, 0, 0, 0xE4AB, 0, /* 0xA0 */ + 0, 0xB5ED, 0, 0xB0C4, 0, 0, 0xE5A4, 0, /* 0xB0 */ + 0, 0xE5A3, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xBCA4, 0xD7C7, 0xE5A5, 0xC5A8, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xE5A1, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xCAAA, 0, 0, /* 0xD0 */ + 0xC5A2, 0, 0, 0xF8D5, 0, 0, 0xE5A8, 0xBCC3, /* 0xD0 */ + 0xE5A9, 0xE5A6, 0, 0, 0xCCCE, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xC0C4, 0, 0, 0xE5A7, 0xE5AA, /* 0xE0 */ + 0xCEAB, 0xB1F5, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xBDA6, 0, 0xE3F8, 0, 0xC2CB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4DE, 0xE4C2, 0, /* 0x00 */ + 0, 0xD0BA, 0, 0xE4C9, 0, 0, 0, 0xE4AF, /* 0x00 */ + 0, 0xC6D9, 0, 0, 0, 0xB1F4, 0, 0, /* 0x10 */ + 0xE3F2, 0, 0xE5AB, 0xE5AD, 0, 0xC1A4, 0, 0xE4EC, /* 0x10 */ + 0xE4EB, 0, 0, 0xE5AC, 0, 0, 0, 0xE3F1, /* 0x20 */ + 0xE4FE, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF8D8, 0, 0xE4F2, 0, 0, 0xE5AF, 0, 0, /* 0x30 */ + 0, 0xE5AE, 0, 0, 0, 0, 0xC0BD, 0, /* 0x30 */ + 0, 0, 0, 0xE3E3, 0xE4DC, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xB9E0, 0, 0, 0, /* 0x40 */ + 0, 0xC8F7, 0, 0, 0, 0xC0EC, 0, 0, /* 0x50 */ + 0xCCB2, 0, 0, 0, 0, 0xE5B0, 0xE5B1, 0, /* 0x50 */ + 0, 0, 0, 0xCDE5, 0xC2D0, 0, 0, 0xE4D9, /* 0x60 */ + 0, 0, 0, 0xBBF0, 0xECE1, 0, 0, 0, /* 0x60 */ + 0xBBD2, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xBEC4, 0, 0, 0, 0xD7C6, 0, 0xD4D6, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xEAC1, 0, 0, /* 0x80 */ + 0, 0, 0xB4B6, 0, 0, 0, 0xD1D7, 0, /* 0x80 */ + 0, 0, 0xB3B4, 0, 0xC8B2, 0xBFBB, 0xECC0, 0, /* 0x90 */ + 0, 0xD6CB, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xECC5, 0xBEE6, 0xCCBF, 0xC5DA, 0xBEBC, /* 0xA0 */ + 0, 0xECC6, 0, 0xB1FE, 0, 0, 0, 0xECC4, /* 0xB0 */ + 0xD5A8, 0, 0, 0xECC2, 0, 0, 0, 0, /* 0xB0 */ + 0xECC3, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xC1D2, 0, 0xECC8, 0, 0, 0, 0, 0xCEDA, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xBAE6, 0xC0D3, 0, 0, 0, 0, 0, 0xD1CC, /* 0xD0 */ + 0, 0, 0, 0, 0xBFBE, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFA9, /* 0xE0 */ + 0, 0, 0, 0, 0xCCFE, 0, 0, 0xCDE9, /* 0xF0 */ + 0, 0xC5EB, 0, 0, 0, 0xB7E9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xD1C9, 0xBAB8, 0, 0, 0, 0, 0, /* 0x00 */ + 0xECC9, 0, 0, 0xECCA, 0, 0, 0, 0, /* 0x10 */ + 0, 0xB1BA, 0xB7D9, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xCEDE, 0, 0, 0, 0, 0xBDB9, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xECCC, /* 0x20 */ + 0xD1E6, 0xECCD, 0, 0, 0, 0, 0xC8BB, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xECD1, 0, 0, /* 0x40 */ + 0, 0xC1B6, 0xECD3, 0, 0xBBCD, 0, 0xBCE5, 0, /* 0x40 */ + 0, 0, 0xECBF, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xECCF, 0, 0xC9B7, 0, /* 0x50 */ + 0, 0, 0xDCE4, 0, 0xC3BA, 0xBBC0, 0xECE3, 0xD5D5, /* 0x60 */ + 0xECD0, 0xB7B3, 0, 0, 0xECBE, 0, 0xD6F3, 0, /* 0x60 */ + 0, 0, 0xECD2, 0xECCE, 0, 0, 0, 0, /* 0x70 */ + 0xECD4, 0, 0xECD5, 0, 0, 0xC9BF, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xCFA8, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD0DC, 0, 0, 0, 0, 0xD1AC, /* 0x80 */ + 0, 0, 0xD3AB, 0, 0xC8DB, 0, 0, 0xECC1, /* 0x90 */ + 0xECD6, 0xCEF5, 0, 0, 0, 0, 0, 0xCAEC, /* 0x90 */ + 0xECDA, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xECD9, 0, 0, 0, 0xB0BE, 0, 0, 0, /* 0xA0 */ + 0, 0xC8C8, 0, 0xECD7, 0, 0xECD8, 0, 0, /* 0xB0 */ + 0, 0xECE4, 0, 0, 0, 0, 0xB3E3, 0, /* 0xB0 */ + 0, 0xECC7, 0, 0xC8BC, 0, 0, 0, 0, /* 0xC0 */ + 0xB5C6, 0, 0, 0, 0, 0, 0xC1C7, 0, /* 0xC0 */ + 0, 0, 0xC9D5, 0, 0xECDC, 0xD1E0, 0, 0, /* 0xD0 */ + 0, 0xCCCC, 0, 0, 0xECCB, 0, 0, 0xD3AA, /* 0xD0 */ + 0xECDB, 0, 0, 0, 0, 0xD4EF, 0xB2D3, 0xECDD, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xD6F2, 0xDBC6, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xBBE2, 0, 0, 0, /* 0xF0 */ + 0, 0xECDE, 0, 0, 0xBDFD, 0, 0xECE2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB1AC, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xCBB8, 0, 0, /* 0x00 */ + 0xC2AF, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xC0C3, 0, 0xECDF, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xECE0, 0, 0xD7A6, 0, 0xC5C0, 0xD5F9, 0, 0, /* 0x20 */ + 0xEBBC, 0, 0xCEAA, 0, 0, 0xBEF4, 0xB8B8, 0, /* 0x30 */ + 0xB0D6, 0xB5F9, 0xD2AF, 0xD8B3, 0, 0xCBAC, 0xB6FB, 0xE3DD, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xC6AC, /* 0x40 */ + 0xB0E6, 0, 0, 0, 0xC5C6, 0, 0, 0, /* 0x40 */ + 0, 0, 0xEBBA, 0, 0, 0, 0xEBBB, 0, /* 0x50 */ + 0xEBB9, 0xD1C0, 0, 0xC5A3, 0, 0xEAF2, 0, 0xC4B2, /* 0x50 */ + 0, 0xC4B5, 0xC0CE, 0, 0, 0, 0xEAF3, 0xC4C1, /* 0x60 */ + 0, 0xCEEF, 0, 0, 0, 0, 0xEAF0, 0xEAF4, /* 0x60 */ + 0, 0, 0xC9FC, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xCCD8, 0, 0, 0, 0xC7A3, 0xEAF5, 0xEAF6, /* 0x70 */ + 0xCFAC, 0xC0E7, 0, 0, 0xEAF7, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xEAF8, 0, 0xEAF9, 0, 0xEAFA, /* 0x80 */ + 0, 0, 0xEAFB, 0, 0, 0, 0xDCFD, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAF1, /* 0x90 */ + 0, 0, 0xB6BF, 0, 0, 0, 0, 0xCEFE, /* 0xA0 */ + 0, 0, 0, 0, 0xC8AE, 0xE1EB, 0, 0xB7B8, /* 0xA0 */ + 0xE1EC, 0, 0, 0, 0xE1ED, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xD7B4, 0xE1F1, 0xBFF1, 0xE1F0, 0xB5D2, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE1F3, 0xE1F2, 0, /* 0xC0 */ + 0xBAFC, 0, 0xE1F4, 0, 0, 0, 0, 0xB9B7, /* 0xD0 */ + 0, 0xBED1, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xBADD, 0xBDC6, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xE1F5, 0xE1F7, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE1FC, 0xE1F9, 0, 0, 0xE1FA, /* 0xF0 */ + 0xC0EA, 0xCFC1, 0xE1FE, 0xE2A1, 0xC0C7, 0xB1B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE1FB, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE2A5, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xE2A3, 0, 0, 0xB2FE, 0xE2A2, /* 0x10 */ + 0, 0xD5F8, 0, 0xC3CD, 0xB2C2, 0xE2A7, 0xE2A6, 0, /* 0x10 */ + 0, 0, 0xE2A9, 0, 0, 0xE2AB, 0, 0, /* 0x20 */ + 0, 0xD0C9, 0xD6ED, 0xC3A8, 0xE2AC, 0, 0, 0, /* 0x20 */ + 0, 0xE2AE, 0, 0, 0xBAEF, 0, 0xD3CC, 0xE9E0, /* 0x30 */ + 0xE2AD, 0xE2AA, 0, 0xE1F8, 0, 0, 0xBBAB, 0xD4B3, /* 0x30 */ + 0, 0xE1EF, 0, 0, 0xD3FC, 0xCAA8, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE2B0, 0, 0, /* 0x40 */ + 0xE2AF, 0, 0xE9E1, 0, 0, 0, 0, 0xE2B1, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xE2B2, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xB6C0, 0, 0xE1F6, 0xE1FD, 0xE2B3, 0, 0, 0xE2B4, /* 0x60 */ + 0xC4FC, 0, 0xBBF1, 0, 0, 0xC1D4, 0, 0xE1EE, /* 0x70 */ + 0xCADE, 0, 0xCCA1, 0xCFD7, 0xE2A8, 0, 0xE2B5, 0, /* 0x70 */ + 0xE2A4, 0, 0, 0, 0xD0FE, 0, 0, 0xC2CA, /* 0x80 */ + 0, 0xD3F1, 0, 0xCDF5, 0, 0, 0xE7E0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xBEC1, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7E4, /* 0x90 */ + 0, 0, 0xE7E3, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xCDE6, 0, 0xC3B5, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xC1E1, 0xE7E9, 0, 0, 0, 0xE7E8, /* 0xB0 */ + 0, 0, 0, 0xB2A3, 0, 0, 0, 0, /* 0xB0 */ + 0xE7EA, 0, 0xE7E6, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xE7EC, 0xE7EB, 0xC9BA, 0, 0, 0xD5E4, 0, 0xE7E5, /* 0xC0 */ + 0xB7A9, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE7EE, 0, 0, 0, 0, 0xE7F3, 0, /* 0xD0 */ + 0xD6E9, 0, 0, 0, 0, 0xE7ED, 0, 0xE7F2, /* 0xE0 */ + 0, 0xE7F1, 0, 0, 0, 0xB0E0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xCFD6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7F2, 0, 0xC0C5, 0xC0ED, 0, /* 0x00 */ + 0, 0xC1F0, 0xE7F0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xE8A2, 0xE8A1, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xD7C1, 0, 0, 0xE7FA, 0xE7F9, 0, /* 0x20 */ + 0xE7FB, 0, 0xE7F7, 0, 0xE7FE, 0, 0xE7FD, 0, /* 0x20 */ + 0xE7FC, 0, 0, 0xC1D5, 0xC7D9, 0xC5FD, 0xC5C3, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0xE7F5, /* 0x30 */ + 0, 0xE8A3, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xE7E2, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xE8A6, 0, 0xE8A5, /* 0x50 */ + 0, 0xE8A7, 0xBAF7, 0xE7F8, 0xE8A4, 0, 0xC8F0, 0xC9AA, /* 0x50 */ + 0, 0, 0, 0xCBF6, 0, 0, 0, 0, /* 0x60 */ + 0, 0xD3A8, 0xC2EA, 0, 0, 0xE8A9, 0, 0, /* 0x60 */ + 0xB9E5, 0, 0, 0, 0, 0, 0xD1FE, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xE8AA, 0, /* 0x70 */ + 0xE8AD, 0xE8AE, 0, 0xC1A7, 0, 0, 0, 0xE8AF, /* 0x80 */ + 0, 0xE7F6, 0, 0xE8B0, 0, 0, 0, 0, /* 0x80 */ + 0xE8B4, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xE8AB, 0, 0xE8B1, 0, /* 0x90 */ + 0, 0, 0, 0xE7E1, 0, 0, 0xE8A8, 0xE8B5, /* 0xA0 */ + 0xE8B2, 0xE8B3, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xBBB7, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE8B7, 0, 0, 0xE7F4, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xC7ED, 0, 0, 0, 0, 0xE7E7, /* 0xC0 */ + 0, 0, 0, 0, 0xE8AC, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE8B6, 0, 0xB9CF, 0, 0xF0AC, 0, /* 0xD0 */ + 0xF0AD, 0, 0xC6B0, 0xB0EA, 0xC8BF, 0, 0xCDDF, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xCECD, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xEAB2, 0, 0xC6BF, 0xB4C9, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xEAB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5E7, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xEAB1, 0xDDF9, 0, 0xEAB4, /* 0x00 */ + 0, 0xEAB5, 0, 0xEAB6, 0, 0, 0, 0, /* 0x10 */ + 0xB8CA, 0xDFB0, 0xC9F5, 0, 0xCCF0, 0, 0, 0xC9FA, /* 0x10 */ + 0, 0, 0, 0xB2FA, 0, 0xC9FB, 0, 0, /* 0x20 */ + 0xD3C3, 0xCBA6, 0, 0xB8A6, 0xF0AE, 0xB1C2, 0, 0xE5B8, /* 0x20 */ + 0xCCEF, 0xD3C9, 0xBCD7, 0xC9EA, 0, 0, 0, 0xC4D0, /* 0x30 */ + 0xB5E9, 0, 0xEEAE, 0, 0, 0, 0xE7DE, 0, /* 0x30 */ + 0xEEAF, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xEEB2, 0, 0, 0xEEB1, 0xBDE7, 0, 0xEEB0, 0xCEB7, /* 0x40 */ + 0, 0, 0, 0, 0xC5CF, 0, 0, 0, /* 0x50 */ + 0, 0xC1F4, 0xDBCE, 0xEEB3, 0xD0F3, 0xC4B6, 0, 0, /* 0x50 */ + 0, 0, 0xB1CF, 0, 0, 0xC2D4, 0xC6E8, 0, /* 0x60 */ + 0, 0, 0xB7AC, 0xBBAD, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xEEB4, 0, 0, 0, 0xB5B1, 0, /* 0x70 */ + 0xBBFB, 0xEEB5, 0, 0, 0, 0, 0, 0xE7DC, /* 0x70 */ + 0, 0, 0, 0xEEB6, 0, 0, 0xBDAE, 0xB3EB, /* 0x80 */ + 0, 0, 0xB5FE, 0xF1E2, 0, 0, 0, 0xCAE8, /* 0x80 */ + 0, 0xD2C9, 0xF0DA, 0, 0xF0DB, 0, 0, 0, /* 0x90 */ + 0, 0xB8ED, 0xBECE, 0, 0, 0xF0DE, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF0E0, 0xB0CC, 0xBDEA, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xD2DF, 0, 0, 0, 0, /* 0xA0 */ + 0xF0E6, 0xF0E5, 0xC6A3, 0xF0E1, 0xF0E2, 0xB4C3, 0, 0, /* 0xB0 */ + 0xF0E3, 0xD5EE, 0, 0, 0xCCDB, 0xBED2, 0xBCB2, 0, /* 0xB0 */ + 0, 0, 0xF0E8, 0xF0E7, 0xF0E4, 0xB2A1, 0, 0xF9A1, /* 0xC0 */ + 0, 0, 0xC8AC, 0, 0, 0xF0EA, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xD6CC, 0xBADB, 0, 0, /* 0xD0 */ + 0xB6BB, 0xBEB7, 0, 0xCDB4, 0, 0, 0xC6A6, 0, /* 0xD0 */ + 0, 0, 0xC1A1, 0xF0EB, 0xF0EE, 0, 0xF0ED, 0xF0F0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xCCB5, 0xF0F2, 0, 0, 0xB3D5, 0, 0, 0, /* 0xF0 */ + 0, 0xB1D4, 0, 0, 0xF0F3, 0, 0, 0xF0F4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0F6, 0xB4E1, 0xF0E9, 0xF0F1, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xF0FA, 0xB7E8, 0xF0F8, 0xD1F1, 0, 0, /* 0x00 */ + 0xF0F5, 0, 0, 0xBBBE, 0, 0xF0FD, 0, 0, /* 0x10 */ + 0, 0xF0FE, 0, 0xF1A1, 0, 0, 0xF0F9, 0xCEC1, /* 0x10 */ + 0xF1A4, 0xB4AF, 0xF1A3, 0, 0xC1F6, 0xF0FB, 0xCADD, 0xC5B1, /* 0x20 */ + 0, 0xB4F1, 0, 0, 0, 0xF1A6, 0, 0, /* 0x20 */ + 0xF1A7, 0, 0, 0xF1AC, 0xD5CE, 0xF1A9, 0, 0, /* 0x30 */ + 0xC8B3, 0, 0, 0xF0FC, 0xF1A2, 0, 0, 0, /* 0x30 */ + 0xF1A5, 0, 0xC1C6, 0xF1AA, 0, 0, 0xF0EC, 0xF0EF, /* 0x40 */ + 0, 0xF0F7, 0, 0, 0xB0A9, 0xF1AD, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF1AF, 0, 0xF1B1, 0, /* 0x50 */ + 0xF0DD, 0, 0, 0, 0xF1B0, 0, 0, 0xB1F1, /* 0x50 */ + 0, 0, 0xD1F7, 0, 0xF0DC, 0xD6A2, 0, 0xF0DF, /* 0x60 */ + 0, 0xF1AE, 0, 0, 0xD1A2, 0xF1A8, 0xF1AB, 0xF1B3, /* 0x60 */ + 0xD3B8, 0xCCB1, 0xF1B2, 0, 0, 0, 0, 0, /* 0x70 */ + 0xB9EF, 0, 0, 0xB5C7, 0xB7A2, 0xB0D7, 0xB0D9, 0, /* 0x70 */ + 0, 0, 0xD4ED, 0, 0xB5C4, 0, 0xBDD4, 0xBBCA, /* 0x80 */ + 0xF0A7, 0, 0, 0xB8DE, 0, 0, 0xF0A8, 0, /* 0x80 */ + 0, 0, 0, 0xF0A9, 0, 0, 0xCDEE, 0, /* 0x90 */ + 0, 0xF0AA, 0xB0A8, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xF0AB, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xC6A4, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xF1E5, 0, 0, 0, /* 0xB0 */ + 0xF1E4, 0, 0xD6E5, 0, 0, 0, 0, 0xC3F3, /* 0xB0 */ + 0, 0, 0xD3DB, 0, 0, 0xD6D1, 0xC5E8, 0, /* 0xC0 */ + 0xD3AF, 0, 0xD2E6, 0, 0, 0xEEC1, 0xB0BB, 0, /* 0xC0 */ + 0, 0, 0xBAD0, 0, 0xBFF8, 0, 0, 0xB5C1, /* 0xD0 */ + 0, 0, 0, 0xCAA2, 0, 0, 0xD5B5, 0xC3CB, /* 0xD0 */ + 0, 0xBEA1, 0, 0xBCE0, 0xC5CC, 0xEEC2, 0, 0xC2AC, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xC4BF, 0xB6A2, /* 0xE0 */ + 0, 0xEDEC, 0xC3A4, 0, 0xD6B1, 0, 0, 0, /* 0xF0 */ + 0xCFE0, 0xEDEF, 0, 0, 0xC5CE, 0, 0xB6DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAA1, 0, 0, 0xEDED, 0, 0, 0xEDF0, /* 0x00 */ + 0xEDF1, 0xC3BC, 0, 0xBFB4, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xEDF4, 0xEDF2, 0, 0, 0, 0, 0xD5E6, /* 0x10 */ + 0xC3DF, 0, 0xEDF3, 0, 0, 0, 0xEDF6, 0, /* 0x20 */ + 0xD5A3, 0xD1A3, 0, 0, 0, 0xEDF5, 0, 0xC3D0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xEDF7, 0xBFF4, 0xBEEC, /* 0x30 */ + 0xEDF8, 0, 0xCCF7, 0, 0xD1DB, 0, 0, 0, /* 0x30 */ + 0xD7C5, 0, 0, 0xEDFC, 0, 0, 0, 0xEDFB, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xF8CA, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0xEDFD, 0xBEA6, 0xD5F6, 0, 0xEDF9, 0, /* 0x50 */ + 0, 0xCBAF, 0xEEA1, 0xB6BD, 0, 0xEEA2, 0xC4C0, 0, /* 0x60 */ + 0xEDFE, 0, 0, 0xBDDE, 0xB2C7, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB6C3, 0, 0, 0, 0xEEA5, 0xD8BA, 0xEEA3, /* 0x70 */ + 0xEEA6, 0, 0, 0, 0xC3E9, 0xB3F2, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xEEA7, 0xEEA4, 0xCFB9, 0, /* 0x80 */ + 0, 0xEEA8, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xEDEE, 0, 0, 0, 0, 0, 0xC2F7, 0xEEA9, /* 0x90 */ + 0xEEAA, 0, 0xDEAB, 0, 0, 0xC6B3, 0, 0xC7C6, /* 0xA0 */ + 0, 0, 0xB5C9, 0, 0xCBB2, 0xF8D1, 0, 0, /* 0xA0 */ + 0xEEAB, 0, 0, 0xCDAB, 0, 0xEEAC, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xD5B0, 0xEDFA, 0xEEAD, 0, 0xF6C4, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF8D7, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xDBC7, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB4A3, /* 0xD0 */ + 0, 0, 0xD6F5, 0xC3AC, 0xF1E6, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xCAB8, 0xD2D3, 0, 0xD6AA, 0, 0xEFF2, /* 0xE0 */ + 0, 0xBED8, 0, 0, 0xEFF3, 0xB6CC, 0xB0AB, 0xBDC3, /* 0xE0 */ + 0, 0, 0, 0xCAAF, 0, 0, 0, 0, /* 0xF0 */ + 0xEDB7, 0, 0, 0, 0, 0xCEF9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC9B0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xEDB9, 0, 0, 0xC6F6, 0xBFB3, 0, 0, /* 0x00 */ + 0, 0xEDBC, 0xC5F8, 0, 0xD1D0, 0, 0, 0, /* 0x10 */ + 0xEDBB, 0, 0, 0, 0, 0xEDC0, 0, 0xEDC4, /* 0x10 */ + 0, 0, 0, 0xEDC8, 0, 0xEDC6, 0xEDCE, 0xD5E8, /* 0x20 */ + 0, 0xEDC9, 0, 0, 0xEDC7, 0xEDBE, 0, 0, /* 0x20 */ + 0xC5E9, 0, 0, 0, 0xC6C6, 0, 0, 0xC9E9, /* 0x30 */ + 0xD4D2, 0xEDC1, 0, 0, 0xEDC5, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xF9A7, 0, 0xB9E8, 0, 0xEDD0, /* 0x40 */ + 0, 0, 0, 0, 0xEDD1, 0, 0xEDCA, 0, /* 0x40 */ + 0xEDCF, 0, 0xCEF8, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xCFF5, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xEDCC, 0, 0, 0, /* 0x60 */ + 0xEDBA, 0, 0xEDD2, 0xC1F2, 0xD3B2, 0xEDCB, 0xF8E6, 0xD1E2, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xC5F0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xEDD6, /* 0x80 */ + 0, 0xB5EF, 0, 0, 0xC2B5, 0, 0xCBE9, 0, /* 0x80 */ + 0, 0xB1AE, 0, 0xEDD4, 0, 0, 0, 0xCDEB, /* 0x90 */ + 0xB5E2, 0, 0xEDD5, 0, 0, 0, 0, 0xB5FA, /* 0x90 */ + 0, 0xEDD8, 0, 0xEDD9, 0, 0xEDDC, 0, 0xB1CC, /* 0xA0 */ + 0, 0xCBB6, 0, 0, 0, 0xEDB8, 0, 0, /* 0xA0 */ + 0xC5F6, 0xBCEE, 0xEDDA, 0xCCBC, 0xB2EA, 0, 0, 0, /* 0xB0 */ + 0xEDBF, 0xEDDB, 0xC8B7, 0, 0xC2EB, 0, 0xC4EB, 0, /* 0xB0 */ + 0, 0xB4C5, 0, 0, 0, 0xB0F5, 0, 0, /* 0xC0 */ + 0, 0xEDDF, 0xC0DA, 0xB4E8, 0, 0, 0, 0, /* 0xC0 */ + 0xC5CD, 0, 0, 0, 0xEDDD, 0xBFC4, 0, 0, /* 0xD0 */ + 0, 0xEDDE, 0xD7A9, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xEDD7, 0, 0, 0, 0xEDD3, /* 0xE0 */ + 0xC4A5, 0, 0, 0, 0xEDE0, 0, 0, 0xEDB6, /* 0xE0 */ + 0, 0, 0xEDE1, 0, 0xEDE3, 0, 0, 0xC1D7, /* 0xF0 */ + 0, 0, 0xBBC7, 0, 0, 0xEDCD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDB8, 0, 0, 0, 0xEDE2, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xB4A1, 0, /* 0x00 */ + 0, 0, 0, 0xEDE4, 0, 0, 0, 0, /* 0x10 */ + 0, 0xB0AD, 0, 0, 0, 0, 0xEDE6, 0, /* 0x10 */ + 0, 0, 0, 0, 0xEDE5, 0, 0xBFF3, 0, /* 0x20 */ + 0, 0, 0xEDC2, 0xC0F9, 0xB7AF, 0, 0, 0, /* 0x20 */ + 0, 0xEDC3, 0, 0, 0xEDE7, 0, 0, 0, /* 0x30 */ + 0, 0, 0xCABE, 0xECEA, 0, 0, 0xC9E7, 0, /* 0x30 */ + 0xECEB, 0xC6EE, 0, 0, 0, 0, 0xECEC, 0, /* 0x40 */ + 0xC6ED, 0xECED, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xECF0, 0, 0, 0xD7E6, 0xECF3, /* 0x50 */ + 0, 0, 0xECF1, 0xECEE, 0xECEF, 0xD7A3, 0xC9F1, 0xCBEE, /* 0x50 */ + 0xECF4, 0, 0, 0, 0, 0xCFE9, 0, 0xECF6, /* 0x60 */ + 0xC6B1, 0, 0, 0, 0, 0xBCC0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xECF7, 0, 0, 0, 0, 0, /* 0x70 */ + 0xD9F7, 0xBDFB, 0, 0, 0xC2BB, 0, 0, 0, /* 0x80 */ + 0, 0, 0xECF9, 0, 0, 0xBBF6, 0xECF5, 0xB8A3, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xECFA, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xF8FA, 0xECFB, /* 0xA0 */ + 0, 0, 0xECF8, 0, 0, 0, 0xC0F1, 0, /* 0xA0 */ + 0xECF2, 0xB5BB, 0, 0xECFC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xD3ED, 0xD8AE, 0, 0, 0xC7DD, 0xBACC, 0, /* 0xB0 */ + 0xD0E3, 0xCBBD, 0, 0xCDBA, 0, 0, 0xB8D1, 0, /* 0xC0 */ + 0, 0xB1FC, 0, 0xC7EF, 0, 0xF9A6, 0, 0, /* 0xC0 */ + 0, 0xBFC6, 0xC3EB, 0, 0, 0xEFF5, 0, 0, /* 0xD0 */ + 0xC3D8, 0, 0, 0, 0, 0, 0, 0xD7E2, /* 0xD0 */ + 0, 0, 0, 0xEFF7, 0xB3D3, 0, 0xC7D8, 0xD1ED, /* 0xE0 */ + 0, 0xD6C8, 0, 0xEFF8, 0, 0xEFF6, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xBDD5, 0, 0, 0xD2C6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCFA1, 0, 0xEFFC, 0xEFFB, 0, 0, 0xEFF9, 0, /* 0x00 */ + 0, 0, 0, 0xB3CC, 0, 0xC9D4, 0xCBB0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xEFFE, 0, 0, 0xB0DE, /* 0x10 */ + 0, 0, 0xD6C9, 0, 0, 0, 0xEFFD, 0, /* 0x10 */ + 0xB3ED, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xD6D6, 0, /* 0x20 */ + 0, 0xB3C6, 0, 0, 0, 0, 0, 0xF0A2, /* 0x30 */ + 0, 0xF0A1, 0, 0xB5BE, 0xBCDA, 0xBBFC, 0, 0xB8E5, /* 0x30 */ + 0xF8B6, 0, 0, 0, 0, 0, 0xC4C2, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF6D5, 0xBBFD, 0xD3B1, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0xCBEB, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xF0A3, 0xBBE0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xCEC8, 0, 0xF8BE, 0, 0, 0, 0, /* 0x60 */ + 0xF0A6, 0, 0, 0, 0xD1A8, 0, 0xBEBF, 0, /* 0x70 */ + 0xF1B6, 0xF1B7, 0xBFD5, 0, 0, 0, 0, 0xB4A9, /* 0x70 */ + 0xF1B8, 0xCDBB, 0, 0, 0xD5AD, 0, 0xF1B9, 0, /* 0x80 */ + 0xF1BA, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xD2A4, 0xD6CF, 0, 0, 0xF1BB, 0xBDD1, 0xB4B0, /* 0x90 */ + 0xBEBD, 0, 0, 0, 0, 0, 0, 0xBFDF, /* 0x90 */ + 0xF1BD, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xF1BF, 0xCED1, 0xCDDD, 0, 0xF1BE, 0, 0xC7EE, 0, /* 0xA0 */ + 0, 0, 0, 0xF1C1, 0, 0, 0xF1C0, 0, /* 0xB0 */ + 0, 0, 0xBFFA, 0, 0, 0, 0, 0xC1FE, /* 0xB0 */ + 0, 0, 0, 0, 0xB4DC, 0xC7CF, 0, 0xF1BC, /* 0xC0 */ + 0xD4EE, 0, 0xC7D4, 0xC1A2, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xD5BE, 0, 0, 0, 0, 0, 0xBEB9, /* 0xD0 */ + 0xD5C2, 0, 0, 0xBFA2, 0, 0xCDAF, 0xF1B5, 0, /* 0xE0 */ + 0, 0, 0xCAFA, 0, 0, 0xBDDF, 0, 0xB6CB, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xBEBA, 0, /* 0xF0 */ + 0, 0xD6F1, 0xF3C3, 0, 0, 0xF3C4, 0, 0xB8CD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF3C7, 0, 0xB0CA, 0, /* 0x00 */ + 0xF3C5, 0, 0xF3C9, 0xCBF1, 0, 0, 0, 0xF3CB, /* 0x00 */ + 0, 0xD0A6, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF3CF, 0, 0xB5D1, 0, 0, 0xF3D7, 0, /* 0x10 */ + 0xF3D2, 0, 0, 0, 0xF3D4, 0xF3D3, 0xB7FB, 0, /* 0x20 */ + 0xB1BF, 0, 0xF3CE, 0xF3CA, 0xB5DA, 0, 0xF3D0, 0, /* 0x20 */ + 0, 0xF3D1, 0, 0xF3D5, 0, 0, 0, 0, /* 0x30 */ + 0xF3CD, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF3DA, 0xB1CA, 0xF3CC, /* 0x40 */ + 0, 0xB5C8, 0, 0xBDEE, 0xF3DC, 0, 0, 0xB7A4, /* 0x40 */ + 0xBFF0, 0xF9A8, 0xCDB2, 0, 0xB4F0, 0, 0xB2DF, 0, /* 0x50 */ + 0xF3D8, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF3DE, 0, 0xF3E1, 0, 0, 0, 0, 0xF3C8, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF3DF, 0, /* 0x60 */ + 0, 0xF3E3, 0xF3E2, 0, 0, 0xF3DB, 0, 0xBFEA, /* 0x70 */ + 0, 0, 0, 0xF3E0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF3EB, 0, 0, /* 0x80 */ + 0, 0, 0, 0xBCE3, 0, 0xB9BF, 0, 0xF3DD, /* 0x80 */ + 0xF3E4, 0, 0, 0, 0xB2AD, 0xBBFE, 0, 0xCBE3, /* 0x90 */ + 0, 0, 0, 0, 0xF3ED, 0xF3E9, 0, 0, /* 0x90 */ + 0, 0xB9DC, 0xF3EE, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xF3E8, 0xBCFD, 0, 0, /* 0xA0 */ + 0, 0xCFE4, 0, 0, 0xF3F0, 0, 0, 0, /* 0xB0 */ + 0xF3E7, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xBDDA, 0xF3F2, 0, 0, 0xB7B6, 0, 0xD7AD, 0xC6AA, /* 0xC0 */ + 0, 0xD6FE, 0, 0xF3E6, 0xF3F3, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xB8DD, 0xF3F5, 0, 0, 0xF3F4, 0, 0, /* 0xD0 */ + 0, 0xB4DB, 0, 0, 0xF3C6, 0xF3F6, 0xF3F7, 0, /* 0xE0 */ + 0, 0xC9B8, 0xF3F8, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF3D9, 0, 0, 0, 0xC5F1, /* 0xF0 */ + 0, 0, 0, 0, 0xF3FB, 0, 0xF3FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF3E5, 0, 0, 0, 0, 0, 0, 0xB4D8, /* 0x00 */ + 0, 0, 0, 0xF3FE, 0xF3F9, 0xC2A8, 0, 0xF3FC, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xF3EC, 0xF4A1, /* 0x10 */ + 0, 0xBCF2, 0, 0xF3F1, 0, 0, 0xF4A3, 0xBBC9, /* 0x20 */ + 0, 0, 0xF4A2, 0xF3EF, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xF4A4, 0, 0, 0, 0, 0xC7A9, 0xC1B1, 0xB2BE, /* 0x30 */ + 0xF4A6, 0, 0, 0xC0BA, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xB3EF, 0xBCAE, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF3EA, 0, 0, 0xF4A5, /* 0x50 */ + 0xC1FD, 0, 0, 0, 0xF8E2, 0, 0, 0, /* 0x60 */ + 0, 0xF3D6, 0xF3FD, 0, 0xC0E9, 0, 0xC2E1, 0, /* 0x60 */ + 0, 0, 0xF8FB, 0xC3D7, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF4CC, 0xD7D1, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xB7DB, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF4CE, 0xC1A3, 0, 0, 0xC6C9, 0, 0xB4D6, /* 0x90 */ + 0xD5B3, 0, 0, 0, 0, 0, 0xF4D1, 0xCBDA, /* 0x90 */ + 0, 0, 0xF4D2, 0, 0xD4C1, 0xD6E0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xC1BB, 0xF4D3, 0xBEAC, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xB4E2, 0, 0, 0xF4D4, 0xF4D5, 0xBEAB, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xF4DB, 0, 0xF4D7, /* 0xC0 */ + 0xF4DA, 0, 0xBAFD, 0, 0xF4D8, 0xF4D9, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xB8E2, 0xCCC7, 0xF4DC, /* 0xD0 */ + 0, 0xB2DA, 0, 0, 0xC3D3, 0xF4D6, 0xB7E0, 0xD4E3, /* 0xD0 */ + 0xBFB7, 0, 0, 0, 0, 0, 0, 0xC1B8, /* 0xE0 */ + 0xF4DD, 0, 0, 0, 0, 0, 0, 0xC5B4, /* 0xE0 */ + 0xF8F0, 0, 0xF4CF, 0, 0xD9E1, 0, 0xF4D0, 0, /* 0xF0 */ + 0xF4E9, 0xE6F9, 0, 0xCFB5, 0, 0, 0xBEC0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBCCD, 0, 0xE6FB, 0, 0xD4BC, 0xBAEC, 0xE6FA, 0xE6FC, /* 0x00 */ + 0xE6FD, 0xC8D2, 0xCEC9, 0xCEC6, 0, 0xC4C9, 0, 0, /* 0x00 */ + 0xC5A6, 0, 0, 0xE7A3, 0xB4BF, 0xE7A2, 0, 0xC9B4, /* 0x10 */ + 0, 0xD6BD, 0xBCB6, 0xB7D7, 0xE7A1, 0, 0, 0, /* 0x10 */ + 0xCBD8, 0xB7C4, 0xCBF7, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xD7CF, 0, 0, 0, 0xC0DB, /* 0x20 */ + 0xCFB8, 0xE7A6, 0xE7A5, 0xC9F0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xC9DC, 0xE7A4, 0, 0xE7A8, 0, 0, 0xE7AA, /* 0x30 */ + 0xE7A9, 0, 0xD6D5, 0, 0xD7E9, 0, 0xB0ED, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE7AC, 0, /* 0x40 */ + 0xBDE1, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xE7AB, 0xBDCA, 0, /* 0x50 */ + 0, 0xC2E7, 0xD1A4, 0, 0, 0, 0xB8F8, 0, /* 0x60 */ + 0xC8DE, 0, 0, 0, 0, 0, 0xD0F5, 0, /* 0x60 */ + 0, 0xCDB3, 0xCBBF, 0xE7AD, 0, 0, 0xBEF8, 0, /* 0x70 */ + 0, 0xBEEE, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB0F3, 0, 0xE7AF, 0, 0, 0xE7AE, 0, /* 0x80 */ + 0xE7B0, 0xD0E5, 0, 0, 0, 0, 0, 0xCBE7, /* 0x80 */ + 0, 0, 0, 0xBEAD, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xD7DB, 0, 0xE7B6, 0, /* 0x90 */ + 0, 0, 0xB3F1, 0xE7B9, 0, 0, 0xF4EB, 0, /* 0xA0 */ + 0, 0, 0, 0xCFDF, 0xE7B7, 0xCEAC, 0xF4EC, 0, /* 0xA0 */ + 0xE7BA, 0xB8D9, 0xCDF8, 0xB1C1, 0xD7BA, 0, 0, 0, /* 0xB0 */ + 0xC2DA, 0xE7B8, 0xE7B2, 0xD5C0, 0, 0xB4C2, 0xE7B1, 0xC3E0, /* 0xB0 */ + 0, 0, 0, 0, 0xE7B5, 0, 0, 0xE7BB, /* 0xC0 */ + 0, 0, 0xBDF4, 0xE7B3, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xC2CC, 0xD0F7, 0, 0xE7B4, 0, 0, 0xE7BD, /* 0xD0 */ + 0xBCEA, 0xE7BC, 0, 0, 0, 0xBCA9, 0xB6D0, 0, /* 0xD0 */ + 0xB5DE, 0xE7C5, 0, 0xD4B5, 0, 0, 0xE7C1, 0, /* 0xE0 */ + 0xB1E0, 0xBBBA, 0, 0, 0xC3E5, 0, 0, 0xCEB3, /* 0xE0 */ + 0, 0xE7C3, 0xE7BF, 0, 0xC1B7, 0, 0xE7C2, 0, /* 0xF0 */ + 0, 0xE7BE, 0, 0xF9A4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xDDD3, 0xE7C6, 0xE7CB, 0xE7C4, 0, 0, 0, 0, /* 0x00 */ + 0xE7A7, 0xE7CC, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xB8BF, 0, 0xE7C7, 0xE7C9, 0xE7C8, /* 0x10 */ + 0, 0, 0, 0xCFD8, 0, 0, 0, 0xCCD0, /* 0x20 */ + 0, 0, 0, 0xB7EC, 0, 0xE7CA, 0xCBF5, 0, /* 0x20 */ + 0, 0xD7DD, 0xE7D0, 0, 0xF8E3, 0xE7CF, 0xF4EA, 0xC2C6, /* 0x30 */ + 0, 0xE7CE, 0, 0xF7E3, 0, 0xD7DC, 0xBCA8, 0, /* 0x30 */ + 0, 0xB7B1, 0, 0, 0, 0xE7D2, 0xE7D1, 0xF4ED, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xE7D5, 0, 0xD6AF, 0xC9C9, 0, 0, /* 0x50 */ + 0, 0, 0xE7D4, 0, 0, 0, 0xC8C6, 0, /* 0x50 */ + 0, 0, 0xE7C0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xC9FE, 0xBBE6, 0xF8F3, 0, 0xBCEB, 0xE7D6, 0xE7D9, /* 0x60 */ + 0xE7D8, 0, 0, 0xBDC9, 0, 0, 0, 0, /* 0x70 */ + 0, 0xD2EF, 0, 0, 0xBCCC, 0xE7CD, 0xE7D7, 0, /* 0x70 */ + 0, 0, 0xD7EB, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE7D3, 0, 0xE6FE, 0, 0xD0F8, 0xF8CD, 0, 0xB2F8, /* 0x80 */ + 0, 0, 0, 0xD3A7, 0xF8A6, 0, 0xCFCB, 0, /* 0x90 */ + 0xE7DA, 0, 0, 0xF4EE, 0xC0C2 /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF3BE, 0, /* 0x30 */ + 0xB8D7, 0, 0xC8B1, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF3C0, 0xF3C1, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF3BF, 0, 0xF8EE, 0, /* 0x40 */ + 0xB9DE, 0, 0, 0, 0xD8E8, 0xBAB1, 0, 0, /* 0x50 */ + 0xEEB7, 0, 0, 0, 0, 0, 0, 0xEEB9, /* 0x50 */ + 0, 0xEEB8, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0xEEBB, 0xD5D6, 0xD7EF, 0, 0, 0, 0xD6C3, 0, /* 0x60 */ + 0xB7A3, 0xEEBD, 0xCAF0, 0, 0, 0, 0, 0xB0D5, /* 0x70 */ + 0, 0xEEBE, 0, 0, 0, 0, 0xEEC0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xC2DE, 0xEEBC, 0, /* 0x80 */ + 0xEEBF, 0, 0xD1F2, 0, 0xC7BC, 0, 0xC3C0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xB8E1, 0, 0, 0, /* 0x90 */ + 0, 0, 0xC1E7, 0, 0, 0xF4C6, 0xD0DF, 0, /* 0x90 */ + 0, 0xCFDB, 0, 0, 0xC8BA, 0xF4C7, 0, 0xF4C8, /* 0xA0 */ + 0, 0xD2E5, 0, 0, 0, 0, 0, 0xF4C9, /* 0xA0 */ + 0xF4CA, 0, 0xF4CB, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xD9FA, 0xB8FE, 0, 0, 0xE5F1, 0xD3F0, 0, 0xF4E0, /* 0xB0 */ + 0, 0xCECC, 0, 0, 0, 0xB3E1, 0, 0, /* 0xC0 */ + 0, 0, 0xF1B4, 0, 0xD2EE, 0, 0xF4E1, 0, /* 0xC0 */ + 0, 0, 0xCFB0, 0, 0xCFE8, 0xF4E2, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB5D4, /* 0xD0 */ + 0xB4E4, 0xF4E4, 0, 0, 0, 0xF4E3, 0xF4E5, 0, /* 0xE0 */ + 0, 0xF4E6, 0, 0, 0, 0, 0xF4E7, 0, /* 0xE0 */ + 0xBAB2, 0xB0BF, 0, 0xF4E8, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xC7CC, 0, 0xB7AD, 0xD2ED /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2AB, 0xC0CF, 0, 0xBFBC, 0xEBA3, 0xD5DF, 0xEAC8, 0, /* 0x00 */ + 0, 0, 0, 0xF1F3, 0xB6F8, 0xCBA3, 0, 0, /* 0x00 */ + 0xC4CD, 0, 0xF1E7, 0, 0xF1E8, 0xB8FB, 0xF1E9, 0xBAC4, /* 0x10 */ + 0xD4C5, 0xB0D2, 0, 0, 0xF1EA, 0, 0, 0, /* 0x10 */ + 0xF1EB, 0, 0, 0, 0, 0xF1ED, 0xF1EE, 0, /* 0x20 */ + 0xF1F1, 0xF1F0, 0xC5D5, 0, 0xF1EF, 0, 0xF1EC, 0, /* 0x20 */ + 0, 0xF1F2, 0, 0xB6FA, 0, 0xF1F4, 0xD2AE, 0xDEC7, /* 0x30 */ + 0, 0, 0, 0xB3DC, 0, 0xB5A2, 0, 0xB9A2, /* 0x30 */ + 0, 0, 0, 0xF1F5, 0, 0, 0xF1F6, 0, /* 0x40 */ + 0, 0, 0xC1C4, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF1F8, 0, 0, 0, 0xCAA5, 0, /* 0x50 */ + 0xC6B8, 0, 0xBEDB, 0, 0, 0, 0xCEC5, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xC1AA, /* 0x60 */ + 0xB4CF, 0xF1FA, 0xC9F9, 0xCBCA, 0, 0xF1F9, 0xC4F4, 0xD6B0, /* 0x70 */ + 0, 0xF1F7, 0, 0, 0, 0xCCFD, 0xC1FB, 0xEDB2, /* 0x70 */ + 0xEDB1, 0, 0, 0, 0xD2DE, 0xCBE0, 0xCBC1, 0xD5D8, /* 0x80 */ + 0, 0xC8E2, 0, 0xC0DF, 0xBCA1, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xEBC1, 0, 0, 0xD0A4, 0, /* 0x90 */ + 0xD6E2, 0, 0xB6C7, 0xB8D8, 0xEBC0, 0xB8CE, 0, 0xEBBF, /* 0x90 */ + 0, 0xB9C9, 0xD6AB, 0, 0, 0xB7CA, 0, 0, /* 0xA0 */ + 0, 0xBCE7, 0xB7BE, 0xEBC6, 0, 0xEBC7, 0, 0xBFCF, /* 0xA0 */ + 0, 0xEBC5, 0xD3FD, 0, 0xEBC8, 0, 0, 0xEBC9, /* 0xB0 */ + 0, 0, 0xB7CE, 0, 0xEBC2, 0xEBC4, 0, 0, /* 0xB0 */ + 0, 0, 0xEBCF, 0xCEB8, 0xEBD0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xB1B3, 0xEBD2, 0xCCA5, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xC5D6, 0xEBD3, /* 0xD0 */ + 0, 0xEBD1, 0xC5DF, 0xEBCE, 0, 0xEBD5, 0xB0FB, 0, /* 0xD0 */ + 0, 0xBAFA, 0, 0, 0xD8B7, 0xF1E3, 0, 0, /* 0xE0 */ + 0, 0xEBCC, 0, 0, 0xE6C0, 0xEBD9, 0, 0xBFE8, /* 0xE0 */ + 0xD2C8, 0xEBD7, 0xEBDC, 0xB8EC, 0xEBD8, 0, 0, 0, /* 0xF0 */ + 0xD0D8, 0, 0xB0B7, 0, 0xEBDD, 0xC4DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD6AC, 0, 0, 0xD0B2, 0xB4E0, 0, /* 0x00 */ + 0, 0xC2F6, 0xBCB9, 0, 0, 0, 0xEBDB, 0, /* 0x00 */ + 0, 0, 0xEBDF, 0, 0, 0, 0xB2B1, 0, /* 0x10 */ + 0xEBE4, 0, 0xBDC5, 0xEBD6, 0, 0, 0xEBE2, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xEBE3, 0, 0, 0xB8AC, /* 0x20 */ + 0, 0xCDD1, 0xEBE5, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xD5CD, 0, 0, 0, 0, 0xC6A2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xCCF3, 0, /* 0x40 */ + 0xEBE6, 0, 0xF8CC, 0xD2B8, 0xEBE7, 0, 0xC9F6, 0, /* 0x40 */ + 0xB8AF, 0xB8AD, 0, 0xEBE8, 0xC7BB, 0xCDF3, 0xEBCB, 0, /* 0x50 */ + 0, 0xEBEA, 0xEBEB, 0, 0, 0, 0, 0, /* 0x50 */ + 0xEBED, 0xEBE1, 0, 0, 0, 0xD0C8, 0xC4D4, 0xEBF2, /* 0x60 */ + 0, 0xEBEE, 0, 0xD6D7, 0, 0xEBF1, 0xC8F9, 0, /* 0x60 */ + 0xD1FC, 0xEBEC, 0, 0, 0xEBE9, 0, 0, 0, /* 0x70 */ + 0xB3A6, 0xB8B9, 0xCFD9, 0, 0xEBEF, 0xEBF0, 0, 0xCDC8, /* 0x70 */ + 0xB0F2, 0, 0xEBF6, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEBF5, 0, 0xB2B2, 0, 0, 0, 0, 0xB8E0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xB1EC, 0, 0xB7F4, 0xCCC5, 0xC4A4, 0xCFA5, 0, 0, /* 0x90 */ + 0xBDBA, 0, 0, 0xEBF9, 0, 0, 0xECA2, 0, /* 0xA0 */ + 0xC5F2, 0xC4E5, 0xEBFA, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xC9C5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE2DF, 0xEBFE, 0, 0xB5A8, 0xEBDA, 0xC5A7, /* 0xB0 */ + 0xCDCE, 0xECA1, 0xB1DB, 0xD3B7, 0, 0, 0xD2DC, 0, /* 0xC0 */ + 0, 0xC1B3, 0xEBFD, 0, 0xEBFB, 0xC6EA, 0, 0xEBF7, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xC0B0, 0, 0xEBCD, 0, 0, 0, 0, 0xD4E0, /* 0xD0 */ + 0xD9F5, 0, 0, 0xB3BC, 0, 0, 0, 0xEAB0, /* 0xE0 */ + 0xC1D9, 0, 0xD7D4, 0, 0xF4AB, 0xB3F4, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xD6C1, 0xD6C2, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xCCA8, 0xD5E9, 0xBECA, 0, 0xF4A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2A8, 0xF4A8, 0xF4A9, 0, 0xF4AA, 0xBECB, 0, 0xD3EB, /* 0x00 */ + 0xD0CB, 0xBED9, 0xBEC9, 0, 0xC9E0, 0xF8E7, 0, 0, /* 0x00 */ + 0xF3C2, 0, 0xCAE6, 0, 0xCCF2, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xE2B6, 0xCBB4, 0, 0xCEE8, 0xD6DB, /* 0x10 */ + 0, 0xF4AD, 0xF4AE, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF4B2, 0, 0xBABD, 0xF4B3, 0xB0E3, 0xF4B0, 0, 0xF4B1, /* 0x20 */ + 0, 0, 0, 0xF4B6, 0xF4B7, 0xB6E6, 0xB2B0, 0xCFCF, /* 0x30 */ + 0xF4B4, 0xB4AC, 0, 0, 0, 0, 0xF4B8, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF4B9, 0, 0, 0xCDA7, /* 0x40 */ + 0, 0xF4BA, 0, 0xF4BB, 0, 0, 0, 0xF4BC, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xCBD2, 0xB2D5, 0xF4BD, 0, 0, 0, 0, 0xF4BE, /* 0x50 */ + 0, 0, 0, 0, 0xF4AF, 0, 0xBDA2, 0, /* 0x60 */ + 0xF4BF, 0, 0, 0xF4B5, 0, 0, 0xF4DE, 0xC1BC, /* 0x60 */ + 0, 0xBCE8, 0xC9AB, 0, 0xE5F5, 0, 0, 0xD1DE, /* 0x70 */ + 0, 0xDCB3, 0, 0, 0, 0xDCB4, 0xB0AC, 0xDCB5, /* 0x70 */ + 0, 0, 0, 0, 0xDCB9, 0, 0, 0, /* 0x80 */ + 0xD8C2, 0, 0xDCB7, 0xD3F3, 0, 0xC9D6, 0xDCBA, 0xDCB6, /* 0x80 */ + 0, 0xDCBB, 0xC3A2, 0, 0, 0, 0, 0, /* 0x90 */ + 0xDCC5, 0xDCBD, 0, 0, 0, 0xD6A5, 0, 0xDCCF, /* 0x90 */ + 0, 0xDCCD, 0, 0, 0xDCD2, 0xBDE6, 0, 0, /* 0xA0 */ + 0xDCB8, 0xDCCB, 0xDCCE, 0xDCBE, 0xB7D2, 0xB0C5, 0xDCC7, 0xD0BE, /* 0xA0 */ + 0xDCC1, 0xBBA8, 0, 0xB7BC, 0xDCCC, 0, 0, 0xDCC6, /* 0xB0 */ + 0, 0xC7DB, 0, 0xDBBB, 0, 0xD1BF, 0xDCC0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xDCD0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xDCC3, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xD4B7, 0xDCDB, 0xDCDF, 0xCCA6, 0xDCE6, 0, 0xC3E7, /* 0xD0 */ + 0xDCDC, 0, 0, 0xBFC1, 0xDCD9, 0, 0xB0FA, 0xB9B6, /* 0xD0 */ + 0xDCE5, 0xDCD3, 0, 0xDCC4, 0xDCD6, 0xC8F4, 0xBFE0, 0xDCD1, /* 0xE0 */ + 0, 0, 0, 0xC9BB, 0, 0, 0, 0xB1BD, /* 0xE0 */ + 0, 0xD3A2, 0, 0, 0xDCDA, 0, 0, 0xDCD5, /* 0xF0 */ + 0, 0xF8DC, 0, 0xDCDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7C2, 0xC3AF, 0xF8B2, 0xC7D1, 0xC3A9, 0xDCE2, 0xDCD8, /* 0x00 */ + 0xDCEB, 0xDCD4, 0, 0, 0xDCDD, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0xDCF8, /* 0x10 */ + 0, 0, 0xDCE1, 0xDDA2, 0xDCE7, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xB4C4, 0, 0, 0xC3A3, 0xB2E7, 0xDCFA, 0, 0xDCF2, /* 0x20 */ + 0, 0xDCEF, 0, 0xDCFC, 0xDCEE, 0xD2F0, 0xB2E8, 0, /* 0x30 */ + 0xC8D7, 0xC8E3, 0xDCFB, 0, 0xDCED, 0, 0, 0, /* 0x30 */ + 0xDCF7, 0, 0, 0xDCF5, 0, 0, 0xBEA3, 0xDCF4, /* 0x40 */ + 0, 0xB2DD, 0, 0, 0, 0, 0, 0xDCF3, /* 0x40 */ + 0xF8C3, 0xDCE8, 0xBBC4, 0, 0xC0F3, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xBAC9, /* 0x70 */ + 0xDDA9, 0, 0, 0xDDB6, 0xDDB1, 0xDDB4, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xDDB0, 0xC6CE, 0, /* 0x80 */ + 0, 0xC0F2, 0xD7AF, 0, 0, 0, 0xC9AF, 0, /* 0x80 */ + 0, 0, 0xDCEC, 0xDDAE, 0, 0, 0xBEA5, 0, /* 0x90 */ + 0xDDB7, 0, 0, 0xDCF0, 0xDDAF, 0, 0xDDB8, 0, /* 0x90 */ + 0xDDAC, 0, 0xBCD4, 0, 0, 0, 0, 0xDCC8, /* 0xA0 */ + 0xDDB9, 0xDDB3, 0xDDAD, 0xC4AA, 0, 0, 0, 0, /* 0xA0 */ + 0xDDA8, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xC3A7, 0, 0, /* 0xB0 */ + 0xDDD2, 0xDDBC, 0, 0, 0, 0xDDD1, 0, 0xB9BD, /* 0xC0 */ + 0, 0, 0xBED5, 0, 0xBEFA, 0, 0, 0xBACA, /* 0xC0 */ + 0, 0, 0, 0, 0xDDCA, 0, 0xDDC5, 0, /* 0xD0 */ + 0xDDBF, 0, 0, 0, 0xB2CB, 0xDDC3, 0, 0xDDCB, /* 0xD0 */ + 0xB2A4, 0xDDD5, 0, 0, 0, 0xDDBE, 0, 0, /* 0xE0 */ + 0, 0xC6D0, 0xDDD0, 0, 0, 0, 0, 0xBBAA, /* 0xE0 */ + 0xDDD4, 0xC1E2, 0xB7C6, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xDDCE, 0xDDCF, 0, 0, 0, 0xDDC4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDDBD, 0, 0xDDCD, 0xCCD1, 0, 0xDDC9, 0xDCC9, /* 0x00 */ + 0, 0, 0xC0B3, 0xDDC2, 0xC3C8, 0xC6BC, 0xCEAE, 0xDDCC, /* 0x00 */ + 0, 0xDDC8, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xDDC1, 0, 0, 0, 0xDDC6, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xCDF2, 0, 0, 0, /* 0x20 */ + 0, 0xDDE6, 0, 0, 0, 0xDDAB, 0, 0, /* 0x30 */ + 0xDDC7, 0, 0, 0, 0xDDE0, 0xC2E4, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xDDE1, 0, /* 0x40 */ + 0, 0xD2B6, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xDDD7, 0xDDA6, 0, 0, 0, 0, 0xD6F8, /* 0x50 */ + 0, 0xDDD9, 0xDDD8, 0xB8F0, 0xDDD6, 0, 0, 0, /* 0x50 */ + 0, 0xC6CF, 0, 0xB6AD, 0xDDA7, 0, 0xCEAD, 0, /* 0x60 */ + 0, 0xDDE2, 0, 0xBAF9, 0xD4E1, 0xDDE7, 0, 0xF8F7, /* 0x60 */ + 0, 0xB4D0, 0, 0xDDDA, 0, 0xBFFB, 0xDDE3, 0xBBE7, /* 0x70 */ + 0xDDDF, 0, 0xDDDD, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xB5D9, 0, 0, 0, 0, 0, /* 0x80 */ + 0xDDDC, 0, 0, 0, 0, 0, 0xDDE5, 0, /* 0x80 */ + 0, 0, 0, 0xDDBB, 0xDDAA, 0, 0, 0xDDF5, /* 0x90 */ + 0, 0xC3C9, 0, 0, 0xCBE2, 0, 0, 0, /* 0x90 */ + 0, 0xDDF2, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xD8E1, /* 0xA0 */ + 0, 0, 0xC6D1, 0, 0xDDF4, 0, 0, 0, /* 0xB0 */ + 0xD5F4, 0xDDF3, 0xDDF0, 0, 0xB2D4, 0xDDEC, 0, 0xDDEF, /* 0xB0 */ + 0xDDA5, 0xDDE8, 0, 0, 0xD0EE, 0, 0, 0, /* 0xC0 */ + 0, 0xC8D8, 0xDDEE, 0xB8C7, 0, 0xDDE9, 0, 0, /* 0xC0 */ + 0xDDEA, 0xCBF2, 0, 0xDDED, 0, 0, 0xB1CD, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xC5EE, 0, 0xC1AB, 0xDCCA, /* 0xE0 */ + 0xDDFB, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xDEA4, 0xDCEA, 0, 0xDEA3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xDDF8, 0, 0, 0, /* 0x00 */ + 0, 0xC3EF, 0, 0xC2FB, 0xF8A5, 0, 0, 0xD5E1, /* 0x10 */ + 0, 0, 0xCEB5, 0, 0, 0, 0xDDE4, 0xDDFD, /* 0x10 */ + 0, 0xB2CC, 0, 0xBDAF, 0, 0, 0xDCE0, 0, /* 0x20 */ + 0, 0, 0, 0xC4E8, 0xCADF, 0xD2F1, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xDDFA, 0, 0, 0xDEA2, 0, 0xB1CE, 0, 0, /* 0x30 */ + 0, 0xDDA1, 0, 0xDEAC, 0, 0, 0xDDDB, 0, /* 0x40 */ + 0xDEA6, 0xBDB6, 0xC8EF, 0, 0, 0, 0xDCF1, 0, /* 0x40 */ + 0, 0, 0xDDA4, 0xDCBF, 0, 0xDDB5, 0xDEA1, 0, /* 0x50 */ + 0xDCE9, 0xDEA5, 0, 0, 0, 0, 0xDEA9, 0, /* 0x50 */ + 0, 0, 0xDDDE, 0, 0xDEA8, 0, 0, 0, /* 0x60 */ + 0xDEA7, 0xB5B4, 0xCEDF, 0, 0, 0xCFF4, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xDDF7, /* 0x70 */ + 0, 0xDEB3, 0xDEAA, 0xDEAE, 0, 0, 0xC0D9, 0, /* 0x70 */ + 0, 0, 0, 0, 0xB1A1, 0xDEB6, 0, 0xDEB1, /* 0x80 */ + 0xDCF6, 0, 0xBCBB, 0, 0xDCBC, 0, 0, 0xDEB2, /* 0x80 */ + 0, 0xF8C4, 0, 0, 0xC7BE, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xD1A6, 0xDEB5, 0, 0, 0xDDB2, /* 0x90 */ + 0, 0, 0, 0, 0xDEAF, 0, 0xBCF6, 0, /* 0xA0 */ + 0xDEB0, 0xC8F8, 0xD0BD, 0, 0, 0, 0, 0xCAED, /* 0xA0 */ + 0xDEB9, 0, 0, 0, 0, 0, 0, 0xDEB8, /* 0xB0 */ + 0, 0xDEB7, 0xDCF9, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xDEBB, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xBDE5, 0, 0, 0, 0xC0B6, 0xDDA3, 0xB2D8, /* 0xC0 */ + 0xC3EA, 0, 0, 0, 0, 0xC5BA, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xDEBC, 0xD2D5, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xCCD9, 0xD2A9, 0, 0, /* 0xE0 */ + 0, 0xB7AA, 0xDEB4, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xD4CC, 0, 0xDCC2, 0, /* 0xF0 */ + 0, 0xB0AA, 0xDDFE, 0xD4E5, 0, 0, 0, 0xDEBD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDEAD, 0xDEBF, 0xC2AB, 0xCBD5, /* 0x00 */ + 0, 0, 0, 0xC6BB, 0, 0, 0, 0, /* 0x00 */ + 0, 0xC4A2, 0, 0, 0, 0, 0xDEC1, 0, /* 0x10 */ + 0, 0, 0xDEBA, 0, 0, 0, 0xDDFC, 0, /* 0x10 */ + 0, 0, 0xDCD7, 0, 0, 0, 0, 0xDEBE, /* 0x20 */ + 0, 0xDEC0, 0, 0, 0, 0xC0BC, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xD5BA, 0, 0xDDF1, 0, 0xDEC2, 0, 0, 0xC2DC, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF2AE, 0xBBA2, 0, /* 0x40 */ + 0xC5B0, 0, 0, 0, 0xF2AF, 0xB4A6, 0, 0, /* 0x50 */ + 0, 0, 0xD0E9, 0, 0xC2B2, 0, 0xD3DD, 0xBAC5, /* 0x50 */ + 0, 0, 0xEBBD, 0, 0, 0, 0, 0xBFF7, /* 0x60 */ + 0, 0, 0, 0, 0xF2B0, 0, 0, 0, /* 0x60 */ + 0, 0xCAAD, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xBAE7, 0xF2B3, 0xF2B5, 0xF2B4, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xCEC3, 0xF2B8, 0xB0F6, 0xF2B7, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF2BE, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xD1C1, 0xF2BA, 0, 0, /* 0x90 */ + 0, 0, 0, 0xF2BC, 0xD4E9, 0, 0, 0xF2BB, /* 0xA0 */ + 0xF2B6, 0xF2BF, 0xF2BD, 0, 0, 0, 0, 0xF2C7, /* 0xA0 */ + 0xF2C4, 0xF2C6, 0, 0, 0xF2CA, 0xF2C2, 0xF2C0, 0, /* 0xB0 */ + 0, 0, 0xF2C5, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xD6FB, 0, 0, 0, 0xF2C1, 0, 0xC7F9, 0xC9DF, /* 0xC0 */ + 0, 0xF2C8, 0, 0xB5B0, 0, 0, 0, 0, /* 0xC0 */ + 0xF2D0, 0xF2D6, 0, 0, 0xBBD7, 0, 0, 0, /* 0xD0 */ + 0xF2D5, 0xCDDC, 0, 0xD6EB, 0, 0, 0xF2D2, 0xF2D4, /* 0xD0 */ + 0, 0, 0, 0, 0xB8F2, 0, 0, 0, /* 0xE0 */ + 0, 0xF2CB, 0, 0, 0, 0xF2CE, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xF2D9, 0xD3BC, 0xF2CC, 0, 0, 0, 0xB6EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAF1, 0, 0xB7E4, 0xF2D7, 0, 0, 0xF2B9, 0xF2D8, /* 0x00 */ + 0xF2DA, 0xF2DD, 0xF2DB, 0, 0, 0xF2DC, 0, 0, /* 0x00 */ + 0, 0, 0xD1D1, 0xF2D1, 0, 0xCDC9, 0, 0, /* 0x10 */ + 0xD6A9, 0, 0xF2E3, 0, 0xC3DB, 0, 0xF2E0, 0, /* 0x10 */ + 0, 0xF8CB, 0xF2EC, 0xF2DE, 0, 0xF2E1, 0, 0, /* 0x20 */ + 0, 0xF2E8, 0, 0, 0, 0, 0xF2E2, 0, /* 0x20 */ + 0, 0xF2E7, 0, 0, 0xF2E6, 0, 0, 0xF2E9, /* 0x30 */ + 0, 0, 0, 0xF2DF, 0, 0, 0xF2E4, 0xF2EA, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xF2F2, 0, 0xD0AB, 0, /* 0x40 */ + 0, 0, 0, 0xF2F5, 0, 0xCAB4, 0, 0xBBC8, /* 0x50 */ + 0, 0xF2F9, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xF2F0, 0, 0, 0xF2F6, 0xF2F8, 0xF2FA, 0xCFBA, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xF2F3, 0, /* 0x60 */ + 0xF2F1, 0, 0, 0, 0xBAFB, 0, 0xB5FB, 0, /* 0x70 */ + 0xCECF, 0, 0, 0xF2EF, 0, 0xF2ED, 0, 0, /* 0x70 */ + 0, 0, 0xF2EB, 0xF3A6, 0xF2CF, 0xF3A3, 0, 0, /* 0x80 */ + 0xF3A2, 0, 0, 0xF2F4, 0, 0xC8DA, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF2FB, 0, 0, 0, 0xF3A5, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xC2EC, 0xC3F8, /* 0x90 */ + 0, 0, 0xD3A9, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xF3A7, 0xF3A9, 0xF3A4, 0, 0xF2FC, /* 0xA0 */ + 0, 0, 0, 0xF3AB, 0, 0xF3AA, 0, 0, /* 0xB0 */ + 0, 0, 0xC2DD, 0xF2F7, 0, 0xF3AE, 0, 0, /* 0xB0 */ + 0xF3B0, 0, 0, 0, 0xD5DD, 0, 0xF3A1, 0, /* 0xC0 */ + 0xF2E5, 0, 0xF3B1, 0xF3AC, 0, 0, 0xF2FD, 0, /* 0xC0 */ + 0, 0xF3AF, 0xF2FE, 0xF3AD, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xF3B2, 0, 0, 0, 0, /* 0xD0 */ + 0xF3B4, 0, 0, 0xF2B1, 0, 0xF3A8, 0, 0, /* 0xE0 */ + 0, 0, 0xF3B3, 0, 0xB2F5, 0, 0xF3B5, 0xF2CD, /* 0xE0 */ + 0, 0, 0xB3E6, 0, 0, 0, 0xF2C9, 0, /* 0xF0 */ + 0, 0xD0B7, 0, 0xD2CF, 0, 0, 0xF3B8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9F9, 0, 0xD3AC, 0xF2B2, 0, /* 0x00 */ + 0, 0, 0xF3B9, 0, 0, 0, 0, 0, /* 0x00 */ + 0xF2D3, 0xF2EE, 0, 0xF3B7, 0, 0xC8E4, 0xF3B6, 0, /* 0x10 */ + 0, 0, 0, 0xF3BA, 0, 0, 0, 0xC0AF, /* 0x10 */ + 0, 0xF3BB, 0xB4C0, 0xF2C3, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0xB9C6, 0xEEC3, 0, 0, 0, 0xB2CF, 0, /* 0x30 */ + 0, 0xF3BC, 0, 0xC2F9, 0xF3BD, 0, 0, 0, /* 0x30 */ + 0xD1AA, 0, 0, 0, 0xF4AC, 0, 0xD6DA, 0, /* 0x40 */ + 0, 0, 0xF8DA, 0, 0xD0D0, 0xD1DC, 0, 0, /* 0x40 */ + 0, 0, 0, 0xCAF5, 0, 0, 0, 0xBDD6, /* 0x50 */ + 0, 0xD1C3, 0, 0xCEC0, 0, 0xB3E5, 0, 0, /* 0x50 */ + 0, 0xBAE2, 0xE1E9, 0xD2C2, 0xF1C2, 0, 0, 0, /* 0x60 */ + 0xB1ED, 0xF1C3, 0, 0xC9C0, 0, 0, 0xD9F2, 0, /* 0x60 */ + 0xCBA5, 0, 0xF1C4, 0, 0, 0, 0, 0xD6D4, /* 0x70 */ + 0, 0xD6BB, 0, 0, 0, 0xF1C5, 0xF4C0, 0xF1C6, /* 0x70 */ + 0, 0xD4AC, 0xF1C7, 0, 0, 0, 0, 0, /* 0x80 */ + 0xF4C2, 0, 0, 0xB4FC, 0, 0xC5DB, 0, 0, /* 0x80 */ + 0, 0, 0xCCBB, 0, 0, 0, 0xD0E4, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF1C8, 0, 0xD9F3, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xB1BB, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xB8A4, 0, 0, 0, 0, 0, 0xF1CA, /* 0xB0 */ + 0, 0, 0, 0, 0xF1CB, 0, 0, 0, /* 0xB0 */ + 0, 0xB2C3, 0xC1D1, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF1CC, 0xF4C1, 0, 0, 0, 0xF1CE, 0xC0EF, /* 0xC0 */ + 0, 0, 0xD9F6, 0, 0xD2E1, 0xD4A3, 0, 0, /* 0xD0 */ + 0xF4C3, 0xC8B9, 0, 0, 0xB2B9, 0xD7B0, 0, 0xF4C4, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF1D4, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xF1D6, 0xF1D1, 0, 0xC9D1, 0xC5E1, 0, 0, 0, /* 0xF0 */ + 0xC2E3, 0xB9FC, 0, 0, 0xF1D3, 0xF9A5, 0xF1D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB9D3, 0, 0, 0, 0, 0xF8B4, /* 0x00 */ + 0, 0, 0xF1DB, 0, 0, 0, 0, 0, /* 0x00 */ + 0xBAD6, 0, 0xB0FD, 0xF1D9, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF1D8, 0xF1D2, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF1D7, 0, 0, 0, 0xC8EC, 0, 0, /* 0x20 */ + 0, 0, 0xCDCA, 0xF1DD, 0, 0, 0, 0, /* 0x20 */ + 0xE5BD, 0, 0xBFE3, 0xF1CD, 0, 0, 0xF1DE, 0, /* 0x30 */ + 0xF1DA, 0, 0, 0xD9F4, 0, 0, 0, 0, /* 0x30 */ + 0, 0xF1DF, 0, 0, 0xCFE5, 0, 0, 0xF1D0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xB0C0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xF1CF, 0xF4C5, 0xBDF3, /* 0x50 */ + 0xF1C9, 0, 0, 0, 0xF1DC, 0, 0xF1E0, 0, /* 0x60 */ + 0, 0, 0xCDE0, 0, 0xF8A1, 0, 0, 0xB3C4, /* 0x60 */ + 0, 0, 0xCFAE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0xF1E1, 0, 0, 0, 0xCEF7, /* 0x70 */ + 0, 0xD2AA, 0, 0xF1FB, 0, 0, 0xB8B2, 0, /* 0x80 */ + 0, 0, 0, 0xBCFB, 0, 0, 0, 0xB9E6, /* 0x80 */ + 0, 0, 0, 0xC3D9, 0, 0, 0xCAD3, 0, /* 0x90 */ + 0xEAE8, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xEAEA, 0, 0, 0, 0, 0xEAEC, 0, /* 0xA0 */ + 0, 0, 0xC7D7, 0, 0xEAE9, 0, 0, 0xEAED, /* 0xA0 */ + 0, 0, 0xEAEE, 0, 0, 0, 0, 0xEAEF, /* 0xB0 */ + 0, 0, 0xBEF5, 0, 0, 0xC0C0, 0, 0xEAEB, /* 0xB0 */ + 0xB9DB, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xBDC7, 0, 0, 0, 0xF5FB, 0, /* 0xD0 */ + 0, 0, 0xF5FD, 0, 0xF5FE, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xBDE2, 0, 0xF6A1, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xF6A2, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xECB2, 0xF5FC, 0, 0xF6A3, 0, /* 0xF0 */ + 0xB4A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1D4, 0xDAA5, 0xB6A9, 0xB8BC, 0, 0, 0, 0xD9EA, /* 0x00 */ + 0xBCC6, 0, 0xD1B6, 0, 0xDAA7, 0, 0xCCD6, 0, /* 0x00 */ + 0xDAA6, 0, 0, 0xD1B5, 0, 0xDAA8, 0xC6FD, 0, /* 0x10 */ + 0xBCC7, 0, 0, 0xB6EF, 0, 0xD1C8, 0, 0xCBCF, /* 0x10 */ + 0, 0, 0, 0xBEF7, 0, 0xDAAB, 0, 0, /* 0x20 */ + 0, 0, 0xB7C3, 0, 0, 0xC9E8, 0, 0, /* 0x20 */ + 0, 0xD0ED, 0, 0, 0xCBDF, 0, 0xDAAD, 0, /* 0x30 */ + 0, 0, 0xD5EF, 0, 0, 0, 0xF6A4, 0, /* 0x30 */ + 0, 0xDAAC, 0, 0, 0, 0, 0xDAAE, 0, /* 0x40 */ + 0xEEBA, 0, 0, 0, 0, 0, 0xDAAA, 0, /* 0x40 */ + 0xD5A9, 0, 0xDAB1, 0, 0xDAAF, 0xC6C0, 0, 0, /* 0x50 */ + 0xDAB0, 0, 0, 0xD7E7, 0, 0, 0xB4CA, 0, /* 0x50 */ + 0, 0xDABC, 0xD1AF, 0xD2E8, 0, 0, 0xCAD4, 0, /* 0x60 */ + 0, 0xCAAB, 0, 0xB2EF, 0xDAB8, 0xB9EE, 0xDAB9, 0, /* 0x60 */ + 0xDAB5, 0xBBB0, 0xB8C3, 0xCFEA, 0, 0xDAB7, 0, 0, /* 0x70 */ + 0, 0xD5B2, 0, 0, 0xDAB6, 0, 0, 0xDAB4, /* 0x70 */ + 0, 0, 0, 0, 0xDAB3, 0xD6EF, 0xDAB2, 0xBFE4, /* 0x80 */ + 0, 0, 0, 0, 0, 0xC8CF, 0, 0, /* 0x80 */ + 0, 0xDABF, 0xDAC0, 0xCAC4, 0, 0xB5AE, 0, 0, /* 0x90 */ + 0xD3D5, 0, 0xDABD, 0, 0, 0, 0xD3EF, 0, /* 0x90 */ + 0xB3CF, 0xBDEB, 0, 0xCEDC, 0xCEF3, 0xDABE, 0xCBD0, 0, /* 0xA0 */ + 0xBBE5, 0, 0, 0, 0xCBB5, 0, 0, 0, /* 0xA0 */ + 0xCBAD, 0, 0xBFCE, 0, 0, 0, 0xDAC7, 0, /* 0xB0 */ + 0, 0xB7CC, 0, 0, 0xD2EA, 0, 0, 0xB5F7, /* 0xB0 */ + 0, 0, 0xDAC6, 0, 0xD7BB, 0, 0, 0xCCB8, /* 0xC0 */ + 0, 0xDAC3, 0, 0xC7EB, 0, 0xDABA, 0, 0xDAC1, /* 0xC0 */ + 0, 0xDAC2, 0xC1C2, 0, 0, 0, 0xC2DB, 0xDAC5, /* 0xD0 */ + 0, 0, 0, 0xDAC4, 0xB5FD, 0, 0xDAD2, 0, /* 0xD0 */ + 0, 0, 0xDABB, 0, 0xDACC, 0, 0xDAD0, 0xD0B3, /* 0xE0 */ + 0, 0, 0, 0xDAC9, 0, 0xDACD, 0xDAD1, 0, /* 0xE0 */ + 0, 0xBBE4, 0, 0xDACF, 0, 0, 0xDAC8, 0xB7ED, /* 0xF0 */ + 0xD6EE, 0, 0xD1E8, 0, 0xDACE, 0, 0xC5B5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC4B1, 0xDACB, 0xCEBD, 0, 0xCCDC, 0xD6DF, 0, 0xE5C0, /* 0x00 */ + 0, 0, 0xBBD1, 0, 0, 0, 0xC3D5, 0, /* 0x00 */ + 0xDAD7, 0, 0, 0, 0xDACA, 0, 0xDAD5, 0xB0F9, /* 0x10 */ + 0, 0xC7AB, 0xDAD6, 0xBDB2, 0, 0xD0BB, 0, 0, /* 0x10 */ + 0, 0xD2A5, 0, 0, 0, 0, 0xF6A5, 0, /* 0x20 */ + 0xDAD3, 0, 0, 0xDAD8, 0xC3FD, 0xDAD9, 0, 0, /* 0x20 */ + 0, 0, 0, 0xDAA9, 0, 0, 0, 0, /* 0x30 */ + 0, 0xBDF7, 0, 0, 0, 0, 0xC3A1, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xD6A4, 0, 0, 0, 0, 0xDADC, 0xBCA5, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xDADA, 0, /* 0x50 */ + 0xCAB6, 0xDADB, 0xCCB7, 0, 0xC6D7, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0xBEAF, 0, /* 0x60 */ + 0, 0, 0, 0xDADE, 0xC6A9, 0, 0, 0xD2EB, /* 0x60 */ + 0xD2E9, 0, 0, 0, 0xC7B4, 0, 0, 0xBBA4, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD3FE, 0, 0, /* 0x70 */ + 0xB6C1, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xB1E4, 0, 0, 0, 0xF6C5, 0, /* 0x80 */ + 0, 0, 0xB2F7, 0xC8C3, 0, 0xC0BE, 0xDADF, 0, /* 0x90 */ + 0, 0, 0, 0, 0xDAD4, 0, 0xDADD /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB9C8, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xBBED, 0, 0, 0, 0, 0xB6B9, 0xF4F8, /* 0x40 */ + 0xC6F1, 0xF4F9, 0, 0, 0xCDE3, 0, 0, 0, /* 0x40 */ + 0xB7E1, 0, 0, 0, 0, 0xF5B9, 0, 0, /* 0x50 */ + 0, 0, 0xEBE0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xCFF3, 0xBBBF, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xBAC0, 0xD4A5, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xE1D9, 0, 0, 0, 0, /* 0x70 */ + 0xF5F4, 0xB1AA, 0xB2F2, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xF5F5, 0, 0, 0xF5F7, 0, 0, /* 0x80 */ + 0, 0xBAD1, 0xF5F6, 0, 0xC3B2, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0xF5F9, 0, 0, 0, /* 0x90 */ + 0xF5F8, 0, 0, 0, 0, 0xB1B4, 0xD5EA, 0, /* 0x90 */ + 0xB8BA, 0xB2C6, 0xB9B1, 0, 0, 0, 0, 0xC6B6, /* 0xA0 */ + 0xBBF5, 0xB7B7, 0xCCB0, 0xB9E1, 0xD4F0, 0, 0, 0xD6FC, /* 0xA0 */ + 0xEADB, 0, 0xEADF, 0xB7A1, 0xB9F3, 0, 0xB1E1, 0xC2F2, /* 0xB0 */ + 0xB4FB, 0, 0xEADC, 0xB7D1, 0xCCF9, 0xEADD, 0, 0xC3B3, /* 0xB0 */ + 0xBAD8, 0xEADA, 0xC2B8, 0xC1DE, 0xBBDF, 0xEAE0, 0, 0xD7CA, /* 0xC0 */ + 0xBCD6, 0, 0xD4F4, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xEAE2, 0xC9DE, 0xB1F6, 0, 0xEAE4, 0, 0, /* 0xD0 */ + 0, 0, 0xEAE3, 0, 0xB4CD, 0, 0xC9CD, 0, /* 0xD0 */ + 0xC5E2, 0xE2D9, 0xCFCD, 0xC2F4, 0xBCFA, 0, 0xB8B3, 0xEAE6, /* 0xE0 */ + 0, 0, 0xD6CA, 0xEAE5, 0xD5CB, 0xB6C4, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xC0B5, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xD7AC, 0xEAE7, 0xB9BA, 0xC8FC, 0xD8D3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEADE, 0xD7B8, 0, 0, /* 0x00 */ + 0xD4F9, 0, 0xD4DE, 0xD8CD, 0, 0xC9C4, 0, 0xD3AE, /* 0x00 */ + 0xEAE1, 0, 0, 0, 0, 0, 0xCAEA, 0, /* 0x10 */ + 0, 0, 0, 0xB8D3, 0xD4DF, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xB3E0, 0, 0xC9E2, 0xF4F6, /* 0x60 */ + 0, 0, 0, 0xBAD5, 0, 0xF4F7, 0, 0, /* 0x60 */ + 0xD7DF, 0, 0, 0xF4F1, 0xB8B0, 0, 0, 0xC6F0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB3C3, 0, 0, 0xF4F2, 0xB3AC, 0, 0, /* 0x80 */ + 0, 0, 0xD4BD, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0xF4F4, 0, 0, 0xF4F3, 0xB8CF, 0, 0, /* 0x90 */ + 0, 0xD5D4, 0, 0, 0, 0, 0, 0xCCCB, /* 0x90 */ + 0, 0, 0, 0xC8A4, 0, 0, 0, 0, /* 0xA0 */ + 0xC7F7, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF4F5, 0xD7E3, 0xC5BF, 0xF5C0, 0, 0, /* 0xB0 */ + 0, 0, 0xF5C3, 0, 0xF5C2, 0, 0xD6BA, 0xF5C1, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xF5CC, 0, /* 0xC0 */ + 0, 0, 0, 0xB0CF, 0xB5F8, 0, 0xF5C9, 0xF5CA, /* 0xC0 */ + 0, 0xC5DC, 0, 0, 0, 0, 0xF5C5, 0xF5C6, /* 0xD0 */ + 0, 0, 0xF5C7, 0xF5CB, 0, 0xBEE0, 0, 0xB8FA, /* 0xD0 */ + 0, 0, 0, 0xF5D0, 0xF5D3, 0, 0, 0, /* 0xE0 */ + 0xBFE7, 0, 0xB9F2, 0xF5BC, 0xF5CD, 0, 0, 0xC2B7, /* 0xE0 */ + 0, 0, 0, 0xCCF8, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xB6E5, 0, 0, 0xF5D5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5BD, 0, 0, /* 0x00 */ + 0, 0xF5D4, 0, 0, 0, 0, 0, 0xCCA4, /* 0x00 */ + 0xBCF9, 0, 0, 0, 0xF5D6, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xF5D7, 0xBEE1, 0xF5D8, /* 0x10 */ + 0, 0, 0xCCDF, 0xF5DB, 0, 0, 0, 0, /* 0x20 */ + 0, 0xB2C8, 0xD7D9, 0, 0, 0, 0xF5DA, 0, /* 0x20 */ + 0, 0xF5E2, 0, 0, 0xD3BB, 0xF5E0, 0, 0, /* 0x30 */ + 0, 0xF5DF, 0xF5DD, 0, 0, 0xF5E1, 0, 0, /* 0x30 */ + 0xF5DE, 0xF5E4, 0xF5E5, 0, 0xCCE3, 0, 0, 0xE5BF, /* 0x40 */ + 0xB5B8, 0xF5E3, 0xF5E8, 0xCCA3, 0xF5C4, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0xF5CF, 0, 0, /* 0x50 */ + 0, 0xF5BE, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0xF5E7, 0, 0, 0xB1C4, 0, /* 0x60 */ + 0, 0xF5BF, 0, 0, 0xB5C5, 0xB2E4, 0, 0xF5EC, /* 0x60 */ + 0xF5E9, 0, 0xB6D7, 0, 0xF5ED, 0, 0xF5EA, 0, /* 0x70 */ + 0, 0, 0xF5CE, 0, 0xF5EB, 0, 0, 0, /* 0x70 */ + 0, 0xD4EA, 0, 0, 0, 0xF5EE, 0, 0xB3F9, /* 0x80 */ + 0, 0xF5BB, 0xB3EC, 0xF5D2, 0, 0xD4BE, 0, 0, /* 0x80 */ + 0xF5F1, 0xF5DC, 0xF5C8, 0xF5D9, 0xF5F0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF5D1, 0, 0, 0, 0xF5F3, 0, /* 0x90 */ + 0, 0xF5E6, 0, 0, 0, 0xB4DA, 0xF5F2, 0, /* 0xA0 */ + 0, 0, 0xF5EF, 0xC9ED, 0xB9AA, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xB6E3, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xCCC9, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xC7FB, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xB3B5, 0xD4FE, 0xB9EC, 0xBEFC, 0xEAA6, 0, /* 0xC0 */ + 0, 0, 0xD0F9, 0, 0xE9ED, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xE9EE, 0, 0, 0, 0xC8ED, /* 0xD0 */ + 0, 0, 0, 0, 0xE9F5, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE9F4, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0xE9EF, 0, 0, 0, 0, 0, /* 0xF0 */ + 0xD6E1, 0xE9F2, 0xE9F7, 0xE9F0, 0xE9F3, 0, 0xE9F8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDCF, 0, 0xE9FB, 0, 0xE9FA, /* 0x00 */ + 0, 0xD4D8, 0xE9F9, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xE9FC, 0, 0xB8A8, 0xC7E1, 0, 0, /* 0x10 */ + 0, 0, 0, 0xC1BE, 0xEAA2, 0xBBD4, 0xE9FE, 0xEAA1, /* 0x10 */ + 0, 0, 0, 0, 0, 0xB9F5, 0xE9FD, 0, /* 0x20 */ + 0, 0xB1B2, 0xC2D6, 0, 0, 0, 0, 0xBCAD, /* 0x20 */ + 0, 0, 0, 0xEAA3, 0, 0, 0, 0, /* 0x30 */ + 0xCAE4, 0, 0, 0xB7F8, 0, 0, 0xD5B7, 0xD3DF, /* 0x30 */ + 0, 0, 0xECB1, 0, 0xCFBD, 0xD4AF, 0xEAA4, 0, /* 0x40 */ + 0, 0xD7AA, 0, 0, 0, 0xD5DE, 0xBDCE, 0, /* 0x40 */ + 0, 0, 0, 0, 0xEAA5, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xBAE4, /* 0x50 */ + 0, 0xE0CE, 0xE9F6, 0, 0xE9F1, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xD0C1, 0xB9BC, 0, 0, 0xB1D9, /* 0x90 */ + 0, 0, 0, 0xC0B1, 0, 0, 0xB0EC, 0, /* 0xA0 */ + 0xB1E6, 0, 0, 0, 0, 0xB4C7, 0xB1E8, 0xB1E7, /* 0xA0 */ + 0xB3BD, 0xC8E8, 0xC5A9, 0, 0, 0, 0xE5C1, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xD3D8, 0, 0xC6F9, 0xD1B8, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xD3AD, 0, /* 0xC0 */ + 0, 0xBDFC, 0, 0xE5C2, 0xB7B5, 0xE5C3, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xCCF6, 0, 0xE5C6, 0xE5C4, 0xE5C8, 0, /* 0xE0 */ + 0xE5CA, 0, 0xB5CF, 0xC6C8, 0, 0xB5FC, 0xE5C5, 0, /* 0xE0 */ + 0xCAF6, 0, 0, 0, 0xF8BC, 0, 0, 0xC3D4, /* 0xF0 */ + 0xB1C5, 0xBCA3, 0, 0, 0, 0xD7B7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCDCB, 0xCBCD, 0, 0xCCD3, 0xE5CC, 0xE5CB, 0xC4E6, 0, /* 0x00 */ + 0, 0, 0, 0xE5CD, 0, 0xE5D0, 0, 0xCDB8, /* 0x00 */ + 0xD6F0, 0xE5CF, 0, 0, 0xCDBE, 0xE5C9, 0xE5D1, 0xB6BA, /* 0x10 */ + 0, 0xD5E2, 0xCDA8, 0xB9E4, 0, 0xCAC5, 0xB3D1, 0xCBD9, /* 0x10 */ + 0xD4EC, 0xE5D2, 0xB7EA, 0xC1AC, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE5D5, 0xB4FE, 0xE5D6, /* 0x20 */ + 0, 0, 0xBDF8, 0, 0, 0xE5D3, 0xE5D4, 0, /* 0x30 */ + 0xD2DD, 0, 0, 0, 0xB1C6, 0, 0xD3E2, 0, /* 0x30 */ + 0, 0xB6DD, 0xCBEC, 0, 0xE5D7, 0, 0, 0xD3F6, /* 0x40 */ + 0, 0, 0, 0xD4CB, 0, 0xB1E9, 0xB9FD, 0xB6F4, /* 0x40 */ + 0xE5DA, 0xE5D8, 0xE5D9, 0xB5C0, 0xB4EF, 0xCEA5, 0, 0, /* 0x50 */ + 0xE5DC, 0, 0, 0xE5DE, 0xD1B7, 0, 0xB5DD, 0, /* 0x50 */ + 0xD4B6, 0, 0xE5DD, 0xC7B2, 0, 0xD2A3, 0, 0, /* 0x60 */ + 0xE5DB, 0xCACA, 0, 0, 0, 0xD4E2, 0xD5DA, 0, /* 0x60 */ + 0, 0, 0xB3D9, 0, 0xE5E0, 0xD7F1, 0, 0xC7A8, /* 0x70 */ + 0xD1A1, 0, 0xD2C5, 0, 0xC1C9, 0xE5E1, 0, 0xB1DC, /* 0x70 */ + 0xD1FB, 0xC2F5, 0xE5E2, 0xE5E4, 0xBBB9, 0, 0, 0xE5C7, /* 0x80 */ + 0xE5E3, 0, 0xB1DF, 0xE5E5, 0, 0, 0, 0xC2DF, /* 0x80 */ + 0xE5CE, 0xD2D8, 0, 0, 0, 0xE7DF, 0, 0xDAF5, /* 0x90 */ + 0, 0xDAF8, 0, 0xDAF6, 0, 0, 0, 0, /* 0x90 */ + 0, 0xDAFA, 0xD0CF, 0xC4C7, 0, 0, 0xB0EE, 0, /* 0xA0 */ + 0, 0, 0xD0B0, 0, 0, 0, 0, 0xBAAA, /* 0xA0 */ + 0xDBA2, 0xC7F1, 0, 0xDAFC, 0xDAFB, 0xC9DB, 0xDAFD, 0, /* 0xB0 */ + 0xDBA1, 0, 0, 0, 0, 0, 0xDBA5, 0, /* 0xB0 */ + 0, 0xF8F9, 0, 0, 0xDBA7, 0xDBA4, 0, 0xDBA8, /* 0xC0 */ + 0, 0, 0xBDBC, 0, 0, 0, 0xC0C9, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xDBAD, /* 0xD0 */ + 0, 0, 0, 0xDBAE, 0xDBAC, 0xBAC2, 0, 0xDBA3, /* 0xD0 */ + 0, 0xBFA4, 0xDBAB, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xB2BF, 0, 0, 0xDBAF, 0, 0xB9F9, 0, 0xDBB0, /* 0xE0 */ + 0, 0, 0, 0, 0xB3BB, 0xD3CA, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xB6BC, 0xDBB1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB6F5, 0, 0xDBB2, 0, 0xDBA9, 0, /* 0x00 */ + 0, 0xCFE7, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0xD7DE, 0, 0xDAF9, 0, 0xD4C7, 0, /* 0x10 */ + 0, 0xB1C9, 0, 0, 0, 0, 0xDBB4, 0, /* 0x10 */ + 0, 0, 0xDBB3, 0xDBB5, 0, 0, 0, 0xB5CB, /* 0x20 */ + 0, 0, 0, 0, 0, 0xD6A3, 0, 0xDBB7, /* 0x20 */ + 0xC1DA, 0xDBB6, 0xB5A6, 0, 0xDAFE, 0, 0xDBA6, 0, /* 0x30 */ + 0, 0xDBB8, 0xDAF7, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xDBB9, 0, 0, 0xDBBA, 0, /* 0x40 */ + 0xDBAA, 0xD3CF, 0xF4FA, 0xC7F5, 0xD7C3, 0xC5E4, 0xF4FC, 0xF4FD, /* 0x40 */ + 0xF4FB, 0, 0xBEC6, 0, 0, 0, 0, 0xD0EF, /* 0x50 */ + 0, 0, 0xB7D3, 0, 0, 0, 0xCCAA, 0, /* 0x50 */ + 0, 0xF5A2, 0xF5A1, 0xBAA8, 0xF4FE, 0xCBD6, 0, 0, /* 0x60 */ + 0, 0xF5A4, 0xC0D2, 0, 0xB3EA, 0, 0xCDAA, 0xF5A5, /* 0x60 */ + 0xF5A3, 0, 0xF5A8, 0, 0xF5A9, 0xBDCD, 0xC3B8, 0xBFE1, /* 0x70 */ + 0xCBE1, 0xF5AA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF5AC, 0, 0xB4BC, /* 0x80 */ + 0, 0xD7ED, 0, 0xB4D7, 0xF5AB, 0xF5AE, 0, 0, /* 0x80 */ + 0xF5AD, 0xF5AF, 0xD0D1, 0, 0, 0, 0xD4CD, 0, /* 0x90 */ + 0, 0, 0xC3D1, 0xC8A9, 0xB3F3, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF5B0, 0xF5B1, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF5B2, 0xD2BD, 0xBDB4, 0xF5B3, 0xF5B4, 0xF5B5, /* 0xA0 */ + 0, 0, 0, 0, 0xF5B7, 0xF5B6, 0, 0, /* 0xB0 */ + 0, 0, 0xF5B8, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xC4F0, 0xD0C6, 0, 0xF5A7, 0, 0xF5A6, 0, 0xB2C9, /* 0xC0 */ + 0, 0xD3D4, 0, 0xCACD, 0xF8CE, 0xD6D8, 0xD2B0, 0xC1BF, /* 0xC0 */ + 0, 0xBDF0, 0xEEC4, 0xEEC5, 0xEEC6, 0xEEC9, 0, 0xEEC8, /* 0xD0 */ + 0xB6A4, 0xEEC7, 0, 0, 0xB8AA, 0xD5EB, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xB5F6, 0xEECC, 0, 0, 0xEECB, /* 0xE0 */ + 0, 0xB7B0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xEECE, 0, 0xEECA, /* 0xF0 */ + 0, 0xEECF, 0xC7A5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEED9, 0xEED5, 0, 0, 0xEED7, 0, 0, 0, /* 0x00 */ + 0xEED0, 0xC4C6, 0, 0, 0, 0xB6DB, 0xB9B3, 0, /* 0x00 */ + 0xEED4, 0xEED3, 0, 0, 0xB3AE, 0xC5A5, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xBEFB, 0, /* 0x10 */ + 0, 0, 0, 0xB8C6, 0, 0xEED8, 0xEED1, 0xEED6, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0xEEEA, 0, /* 0x20 */ + 0xEEE6, 0, 0, 0xEEDD, 0xC1E5, 0, 0, 0xEEDC, /* 0x30 */ + 0xEEE0, 0xEEEB, 0xEEDA, 0, 0, 0xEEDF, 0xD3CB, 0xEEE4, /* 0x30 */ + 0xBCD8, 0, 0, 0, 0, 0xEED2, 0, 0, /* 0x40 */ + 0xEEE8, 0xEEE7, 0, 0, 0, 0xEEE9, 0, 0, /* 0x40 */ + 0, 0xB2AC, 0, 0, 0, 0xEEDE, 0, 0xC7AF, /* 0x50 */ + 0, 0, 0xC3AD, 0xC7A6, 0, 0, 0xEEE1, 0, /* 0x50 */ + 0, 0, 0xB2A7, 0, 0, 0, 0xEEDB, 0, /* 0x60 */ + 0, 0, 0, 0, 0xEEE2, 0xEEE3, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xBDC2, 0, 0xEEEF, 0xB8F5, 0, 0, 0, 0xEEFE, /* 0x70 */ + 0xD2F8, 0, 0, 0xEFA5, 0, 0xCDAD, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF6C6, 0, /* 0x80 */ + 0, 0xCFB3, 0, 0xEEFD, 0, 0, 0xEEF9, 0, /* 0x90 */ + 0xC3FA, 0, 0xEFA2, 0, 0xCFCE, 0, 0, 0, /* 0x90 */ + 0xEEEE, 0, 0, 0xEFA8, 0, 0xD2BF, 0xEEF7, 0, /* 0xA0 */ + 0xEFA7, 0xEEFB, 0xEEF0, 0xEFA4, 0xEEED, 0, 0, 0, /* 0xA0 */ + 0, 0xEEF6, 0, 0, 0, 0, 0, 0xCFFA, /* 0xB0 */ + 0, 0xD0E2, 0, 0xCCE0, 0xEFB1, 0, 0, 0, /* 0xB0 */ + 0, 0xC2C1, 0, 0xEFB6, 0, 0xD0BF, 0, 0xB1B5, /* 0xC0 */ + 0xF6C8, 0, 0, 0, 0xEEFA, 0, 0, 0xEEF2, /* 0xC0 */ + 0, 0, 0xB7E6, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xEFB2, 0, 0xEFB7, /* 0xD0 */ + 0, 0, 0, 0xEEF4, 0xB3FA, 0xEFAD, 0xEFB8, 0, /* 0xE0 */ + 0xEFB0, 0, 0xC6CC, 0, 0, 0xC8F1, 0xEEF1, 0xEFAF, /* 0xE0 */ + 0xEFAE, 0xEFAB, 0, 0, 0, 0, 0xEFB3, 0, /* 0xF0 */ + 0xBEE2, 0, 0, 0, 0xB8D6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEFBE, 0, 0, 0, 0, 0xEFBA, 0xEFC2, /* 0x00 */ + 0xEFC3, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xD7B6, 0, 0xEFB9, 0, 0, 0xEFBF, 0, 0, /* 0x10 */ + 0xB4B8, 0xEFC5, 0xEFA3, 0xEFBC, 0, 0, 0, 0xEFC4, /* 0x10 */ + 0xB6A7, 0, 0xC7AE, 0, 0, 0, 0xBDF5, 0, /* 0x20 */ + 0xC3AA, 0, 0, 0xCEFD, 0, 0, 0xEFC0, 0xB4ED, /* 0x20 */ + 0, 0, 0xC2BC, 0xC3CC, 0, 0, 0xF8A3, 0, /* 0x30 */ + 0xEFAA, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xEFBD, 0xCFC7, 0, 0xEFC1, 0, 0, 0xEECD, 0xEFC7, /* 0x40 */ + 0, 0, 0, 0xB9F8, 0, 0xB6C6, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0xEFC9, 0, 0, 0, /* 0x50 */ + 0xD5A1, 0, 0, 0xB6CD, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xEFCA, 0xEFC6, 0, 0, /* 0x60 */ + 0, 0xEFBB, 0xF6CA, 0, 0xC7C2, 0, 0, 0, /* 0x60 */ + 0xEFCC, 0, 0, 0, 0, 0xBCFC, 0xEFC8, 0, /* 0x70 */ + 0, 0, 0xD5E0, 0, 0, 0, 0xEFF1, 0, /* 0x70 */ + 0, 0, 0xC3BE, 0, 0xEFCD, 0, 0, 0xEFD1, /* 0x80 */ + 0, 0, 0xB0F7, 0, 0, 0, 0, 0xF6CC, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xCBF8, 0, /* 0x90 */ + 0xEFD3, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xCED9, 0xDDF6, 0, 0, 0xEFD6, 0xEEF8, /* 0xA0 */ + 0, 0xEFA1, 0xEFCB, 0, 0xB8E4, 0, 0xD5F2, 0, /* 0xA0 */ + 0xEFD7, 0, 0, 0xC4F8, 0, 0xEFD8, 0, 0, /* 0xB0 */ + 0xEFD4, 0, 0, 0, 0, 0, 0, 0xEFD5, /* 0xB0 */ + 0, 0, 0, 0xEFDF, 0, 0, 0, 0xEFE0, /* 0xC0 */ + 0xC1B4, 0, 0xF6CB, 0, 0xEFD2, 0xEFDD, 0, 0, /* 0xC0 */ + 0, 0xEFE1, 0, 0, 0, 0, 0xF7E9, 0xEFAC, /* 0xD0 */ + 0xEFCF, 0, 0, 0, 0xEFDB, 0xEFDC, 0xEFDE, 0xB2F9, /* 0xD0 */ + 0, 0xBEB5, 0xEFDA, 0, 0xEFCE, 0, 0, 0, /* 0xE0 */ + 0xF6C9, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xEEFC, 0, 0xEFE4, /* 0xF0 */ + 0, 0xEFEA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEEF3, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0xEFA6, 0, 0, 0, 0, /* 0x00 */ + 0xC1CD, 0, 0xEFA9, 0xEFE6, 0xEFE2, 0, 0, 0, /* 0x10 */ + 0xD6D3, 0xEFEB, 0, 0, 0, 0xEFE3, 0, 0, /* 0x10 */ + 0xEFE8, 0, 0, 0, 0, 0, 0xEFB4, 0xEFB5, /* 0x20 */ + 0xEFD0, 0, 0, 0, 0, 0, 0xC1AD, 0, /* 0x20 */ + 0, 0, 0xEFED, 0xC0D8, 0, 0xCCFA, 0, 0, /* 0x30 */ + 0xEEEC, 0, 0xEEF5, 0, 0, 0, 0xF6CD, 0xEFEE, /* 0x30 */ + 0, 0, 0, 0, 0xD6FD, 0, 0, 0, /* 0x40 */ + 0, 0, 0xEFEC, 0, 0xEFD9, 0, 0, 0, /* 0x40 */ + 0, 0, 0xBCF8, 0, 0xEFEF, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xEEE5, 0, 0, 0xEFF0, 0, 0xEFE5, 0, 0, /* 0x60 */ + 0, 0, 0, 0xF6CE, 0, 0xEFE7, 0, 0, /* 0x60 */ + 0xD4BF, 0, 0xCFE2, 0, 0, 0, 0, 0xC4F7, /* 0x70 */ + 0, 0xEFE9, 0, 0, 0xC2E0, 0xD7EA, 0xF6C7, 0xD4E4 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB3A4, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xC3C5, 0, 0xE3C5, 0xC9C1, 0, 0, 0xE3C6, 0, /* 0x80 */ + 0, 0xB1D5, 0, 0xBFAA, 0xE3CA, 0, 0xE3C8, 0xC8F2, /* 0x80 */ + 0, 0xCFD0, 0, 0xBCE4, 0xE3C9, 0, 0, 0, /* 0x90 */ + 0xD5A2, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xBAD2, 0, 0xB8F3, 0xF8B9, 0xB7A7, 0, 0, /* 0xA0 */ + 0xB9EB, 0xC3F6, 0, 0xE3CD, 0xE3CF, 0xE3CC, 0, 0, /* 0xA0 */ + 0, 0, 0xD4C4, 0, 0, 0, 0xE3D1, 0, /* 0xB0 */ + 0, 0xD1CB, 0, 0xD1D6, 0xE3D5, 0xE3D4, 0xE3D0, 0xE3D3, /* 0xB0 */ + 0, 0, 0, 0xE3D6, 0, 0, 0xF8A2, 0, /* 0xC0 */ + 0xE3C7, 0, 0xC0AB, 0xE3D7, 0xC0BB, 0, 0, 0, /* 0xC0 */ + 0xE3D9, 0, 0, 0, 0xE3D8, 0xE3DA, 0xB4B3, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xB9D8, 0, 0xE3DB, 0, /* 0xD0 */ + 0, 0xB2FB, 0xF8DB, 0, 0, 0xE3CB /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0xB8B7, 0xDAE2, 0, 0, /* 0x10 */ + 0, 0xDAE4, 0xDAE3, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xDAE6, 0, 0, 0, 0xC8EE, 0, /* 0x20 */ + 0, 0xDAE5, 0xB7C0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xD7E8, 0xDAE8, 0xDAE7, 0, 0xB0A2, /* 0x30 */ + 0xCDD3, 0, 0xDAE9, 0, 0xB8BD, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xC2AA, 0xC4B0, 0xBDB5, 0, 0, /* 0x40 */ + 0xCFDE, 0, 0, 0, 0xDAEB, 0, 0, 0, /* 0x50 */ + 0xDAEA, 0, 0, 0xB1DD, 0, 0xC9C2, 0, 0xDAEC, /* 0x50 */ + 0, 0xB6B8, 0xD4BA, 0xD5F3, 0xB3FD, 0, 0, 0, /* 0x60 */ + 0, 0, 0xC5E3, 0, 0xDAEE, 0, 0, 0, /* 0x60 */ + 0xD2F5, 0, 0xDAEF, 0xB3C2, 0xDAF0, 0xC1EA, 0xCCD5, 0xCFDD, /* 0x70 */ + 0xC2BD, 0, 0, 0, 0, 0xD1F4, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD3E7, 0xC2A1, 0, /* 0x80 */ + 0xDAF1, 0xDAED, 0xB6D3, 0xCBE5, 0, 0xDAF2, 0xBDD7, 0, /* 0x80 */ + 0, 0, 0, 0, 0xB8F4, 0xD4C9, 0, 0xDAF3, /* 0x90 */ + 0xB0AF, 0xCFB6, 0, 0xBCCA, 0xD5CF, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0xCBED, /* 0xA0 */ + 0xCBE6, 0, 0xCFD5, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xDAF4, 0xD2FE, 0, 0xE3C4, 0xC2A4, 0, 0, 0, /* 0xB0 */ + 0xC1A5, 0xF6BF, 0, 0xF9A2, 0xF6C0, 0xF6C1, 0, 0, /* 0xB0 */ + 0xC8B8, 0xD1E3, 0, 0, 0xD0DB, 0xD1C5, 0xBCAF, 0xB9CD, /* 0xC0 */ + 0, 0xEFF4, 0, 0, 0xB4C6, 0xD3BA, 0xF6C2, 0, /* 0xC0 */ + 0, 0, 0xF6C3, 0, 0, 0xB5F1, 0xCBE4, 0, /* 0xD0 */ + 0, 0xCBAB, 0, 0xB3FB, 0xD4D3, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xC0EB, 0xC4D1, 0, 0, 0, 0, /* 0xE0 */ + 0xD3EA, 0xF6A7, 0xD1A9, 0, 0, 0, 0, 0xF6A9, /* 0xE0 */ + 0, 0, 0xD4C6, 0, 0, 0, 0xC1E3, 0xC0D7, /* 0xF0 */ + 0, 0xB1A2, 0, 0xB5E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD0E8, 0, 0, 0, 0xCFF6, 0, 0xF6AA, 0xD5F0, /* 0x00 */ + 0xF6AC, 0xC3B9, 0, 0, 0, 0xBBF4, 0xF6AE, 0xF6AD, /* 0x00 */ + 0, 0, 0, 0xC4DE, 0, 0, 0xC1D8, 0, /* 0x10 */ + 0, 0, 0, 0, 0xCBAA, 0, 0xCFBC, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xCEED, /* 0x20 */ + 0, 0, 0xF6AF, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF6B1, 0, 0xC2B6, 0, 0, 0, 0, 0, /* 0x30 */ + 0xB0D4, 0xC5F9, 0, 0, 0, 0xF6AB, 0xF6B2, 0, /* 0x30 */ + 0, 0, 0xF6A8, 0, 0xF6B0, 0, 0, 0, /* 0x40 */ + 0xC1E9, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xC7E0, 0, 0, 0, 0xBEB8, 0, /* 0x50 */ + 0, 0, 0xF6A6, 0xB5E5, 0xBEB2, 0, 0xB7C7, 0, /* 0x50 */ + 0xBFBF, 0xC3D2, 0xC3E6, 0, 0, 0, 0, 0, /* 0x60 */ + 0xD8CC, 0xB8EF, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xBDF9, 0xD1A5, 0, 0xB0D0, 0, /* 0x70 */ + 0, 0, 0, 0, 0xF7B0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xF7B1, 0, 0, /* 0x80 */ + 0, 0, 0, 0xD0AC, 0, 0xB0B0, 0, 0xB9AE, /* 0x80 */ + 0, 0, 0, 0, 0xF7B4, 0, 0, 0, /* 0x90 */ + 0xC7CA, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xBECF, 0, 0, 0xF7B7, 0, 0, 0xF8E4, 0, /* 0xA0 */ + 0, 0, 0, 0xF7B6, 0, 0xB1DE, 0, 0, /* 0xA0 */ + 0, 0, 0xF7B8, 0, 0xF7B9, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xF7B3, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF7B2, 0, 0, 0xF8E1, 0, /* 0xC0 */ + 0, 0xF7B5, 0, 0xCEA4, 0xC8CD, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xBAAB, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xE8B8, 0, 0, 0xE8BA, 0, 0xE8B9, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xBEC2, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xD2F4, 0, 0xD4CF, 0xC9D8, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCFEC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2B3, 0xB6A5, 0xC7EA, 0, 0xCFEE, 0xCBB3, 0xF1FC, /* 0x00 */ + 0xD0EB, 0, 0xE7EF, 0, 0xCBCC, 0, 0xF1FD, 0xF1FE, /* 0x00 */ + 0xD4A4, 0xCDE7, 0xB0E4, 0xB6D9, 0, 0, 0, 0xC6C4, /* 0x10 */ + 0xC1EC, 0, 0, 0, 0xF2A2, 0, 0, 0, /* 0x10 */ + 0, 0xF2A1, 0, 0, 0xD2C3, 0, 0xF2A4, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xCDB7, 0, 0, /* 0x20 */ + 0xBCD5, 0, 0, 0, 0, 0, 0, 0xF2A5, /* 0x30 */ + 0xBEB1, 0, 0, 0xC6B5, 0, 0xCDC7, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xBFC5, 0, /* 0x40 */ + 0, 0, 0, 0, 0xCCE2, 0xB6EE, 0xF2A6, 0, /* 0x40 */ + 0, 0, 0, 0xF2A7, 0xD1D5, 0, 0, 0, /* 0x50 */ + 0xD4B8, 0xF2AA, 0, 0xB5DF, 0, 0, 0xC0E0, 0, /* 0x50 */ + 0, 0, 0xF2A9, 0, 0, 0xF2AB, 0, 0xB9CB, /* 0x60 */ + 0, 0, 0, 0xB2FC, 0xF2AC, 0, 0, 0xCFD4, /* 0x60 */ + 0xF2AD, 0xC2AD, 0, 0xF2A8, 0xC8A7, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xB7E7, 0, 0, 0, 0, 0, 0xECA9, 0xECAA, /* 0xA0 */ + 0, 0xF8EC, 0, 0xF8B7, 0, 0, 0xECAB, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xECAC, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xC6AE, 0, 0xECAD, 0, /* 0xC0 */ + 0xECAE, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xB7C9, 0, 0, 0, 0xCAB3, /* 0xD0 */ + 0xE2BB, 0, 0xF8BF, 0, 0, 0, 0, 0xE2B8, /* 0xE0 */ + 0, 0xE2BD, 0xE2BF, 0xE2C0, 0, 0xE2C1, 0, 0xB7B9, /* 0xE0 */ + 0, 0, 0xD2FB, 0, 0xE2C2, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0xCBC7, 0xB1A5, 0xCACE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBDC8, 0, 0xB1FD, 0, 0, /* 0x00 */ + 0, 0xE2C3, 0xD1F8, 0, 0xB6FC, 0, 0, 0, /* 0x00 */ + 0xB2CD, 0xE2C4, 0xC4D9, 0xB6F6, 0, 0, 0, 0, /* 0x10 */ + 0xD3E0, 0, 0, 0xE2C6, 0, 0, 0xBDA4, 0, /* 0x10 */ + 0, 0xCFDA, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xB9DD, 0, 0, 0, 0, 0, 0xF7D1, 0, /* 0x20 */ + 0, 0, 0, 0xE2BC, 0, 0, 0, 0xE2C7, /* 0x30 */ + 0, 0, 0, 0, 0xE2BE, 0, 0xC1F3, 0xE2C8, /* 0x30 */ + 0, 0, 0, 0xE2C9, 0, 0xC2F8, 0, 0, /* 0x40 */ + 0xE2CA, 0xE2CB, 0xE2CC, 0xC0A1, 0xE2CD, 0, 0, 0, /* 0x40 */ + 0, 0xBCA2, 0xC8C4, 0, 0xF7D3, 0xF7D2, 0, 0xF7CF, /* 0x50 */ + 0, 0, 0, 0, 0xF7D0, 0, 0xB2F6, 0, /* 0x50 */ + 0, 0, 0xE2CE, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xCAD7, 0xD8B8, /* 0x90 */ + 0xD9E5, 0xCFE3, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF0A5, 0, 0, /* 0xA0 */ + 0xDCB0, 0, 0, 0, 0xC2ED, 0xD4A6, 0xB7EB, 0, /* 0xA0 */ + 0, 0xCDD4, 0, 0xB3DB, 0xD1B1, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0xB2B5, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0xD7A4, 0xE6E5, 0xBED4, 0, 0xE6E0, 0xBCDD, 0, 0, /* 0xD0 */ + 0xE6E6, 0xE6E2, 0, 0xCABB, 0, 0xCDD5, 0, 0xE6E1, /* 0xD0 */ + 0, 0xC2EE, 0xE6E9, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xBAA7, 0, 0, /* 0xE0 */ + 0, 0xC2E6, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0, 0xBFA5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB3D2, 0, 0, 0, 0xE6ED, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xE6EC, 0xC6EF, 0xE6EB, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xE6F0, 0, /* 0x10 */ + 0, 0xC6AD, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0xE5B9, 0, 0xE6EF, 0xE6F2, 0, /* 0x20 */ + 0xCCDA, 0, 0, 0, 0, 0, 0xE6E3, 0xC9A7, /* 0x30 */ + 0xE6F3, 0, 0, 0, 0, 0, 0xC2E2, 0, /* 0x30 */ + 0xDDEB, 0xE6F1, 0xE6EE, 0xE6F4, 0xE6F5, 0xC7FD, 0, 0, /* 0x40 */ + 0, 0, 0xE6E8, 0, 0, 0xE6E7, 0, 0xE6F6, /* 0x40 */ + 0, 0, 0, 0, 0, 0xBDBE, 0, 0xD1E9, /* 0x50 */ + 0, 0, 0xBEAA, 0xE6E4, 0, 0, 0, 0xD6E8, /* 0x50 */ + 0, 0, 0xC2BF, 0, 0xE6F8, 0xE6F7, 0, 0, /* 0x60 */ + 0, 0, 0xE6EA, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xB9C7, 0, 0, 0, 0, 0, 0, 0xB0B9, /* 0xA0 */ + 0xF7BB, 0xF7BA, 0, 0, 0, 0, 0xF7BE, 0xF7BC, /* 0xB0 */ + 0xBAA1, 0, 0xF7BF, 0, 0xF7C0, 0, 0, 0, /* 0xB0 */ + 0xF7C2, 0xF7C1, 0xF7C4, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF7C3, /* 0xC0 */ + 0, 0xF7C7, 0xF8FE, 0xCBE8, 0xCCE5, 0xF7C6, 0xF7C5, 0, /* 0xD0 */ + 0xB8DF, 0, 0, 0, 0, 0, 0, 0xF7D4, /* 0xD0 */ + 0, 0xF7D5, 0, 0, 0, 0, 0xF7D6, 0, /* 0xE0 */ + 0, 0, 0, 0xF7D8, 0, 0xF7DA, 0xF8B1, 0xF7D7, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0xF7DB, 0, 0xF7D9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD7D7, 0, 0, 0xCBC9, 0, /* 0x00 */ + 0xF7DC, 0, 0, 0, 0, 0xF8BA, 0, 0xF7DD, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0xF8F6, 0, 0, 0, 0, 0xF7DF, /* 0x10 */ + 0, 0, 0xF7DE, 0xF7E0, 0, 0xB6B7, 0, 0xC4D6, /* 0x20 */ + 0, 0xE3D2, 0, 0, 0, 0, 0xE3CE, 0xDBCB, /* 0x20 */ + 0, 0xD3F4, 0xD8AA, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE5F7, 0xB9ED, 0, 0, 0, /* 0x30 */ + 0, 0xBFFD, 0xBBEA, 0xF7C9, 0xC6C7, 0xF7C8, 0, 0, /* 0x40 */ + 0xF7CC, 0, 0, 0, 0, 0xF7CD, 0xF7CB, 0xCEBA, /* 0x40 */ + 0, 0xF7CE, 0, 0, 0xC4A7, 0, 0, 0, /* 0x50 */ + 0xF7CA, 0, 0xD3E3, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0xC2B3, /* 0x60 */ + 0, 0, 0, 0, 0xF6D0, 0, 0, 0xF6CF, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xF6D1, 0, 0xF6D2, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xF6D3, 0, /* 0x80 */ + 0xF6D8, 0xB1AB, 0xF6D6, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xF6DA, 0, 0, 0xF6DF, 0xF6DC, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xF6DB, 0xF6DE, 0, 0xF6D9, 0xCFCA, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF6E7, 0xF6E1, 0, 0, 0, 0, 0, 0xF6E9, /* 0xC0 */ + 0, 0xC0F0, 0xF6E8, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xF6F6, 0, 0xF6EB, 0, /* 0xD0 */ + 0, 0, 0, 0xF6F4, 0, 0xF6F1, 0, 0, /* 0xD0 */ + 0, 0xF6EE, 0xF6F2, 0, 0xF6EF, 0, 0, 0xF6F0, /* 0xE0 */ + 0xBEA8, 0, 0xF6EC, 0xF6ED, 0, 0, 0, 0, /* 0xE0 */ + 0xF6F3, 0, 0, 0, 0xF6F5, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xF6EA, 0, 0xF6FD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xF6F8, 0xF6FC, 0, 0, 0, 0xF6FA, 0, 0, /* 0x00 */ + 0xF6F9, 0, 0xF6FB, 0xC8FA, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF6FE, 0, 0, 0xF6E5, 0, 0xF7A4, 0, 0, /* 0x20 */ + 0xF7A3, 0xF7A5, 0, 0, 0, 0xF7A2, 0, 0, /* 0x20 */ + 0, 0xF6E3, 0xF7A1, 0xF7A6, 0, 0xF7AA, 0, 0xF6E6, /* 0x30 */ + 0, 0xF6E4, 0, 0xF7A9, 0, 0, 0xF7A7, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0xF7AB, 0, 0, /* 0x40 */ + 0xF7A8, 0xB1EE, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xF7AE, 0, 0xF7AD, 0, 0xF7AC, 0xC1DB, /* 0x50 */ + 0xF6E0, 0, 0, 0, 0, 0xF6F7, 0, 0xF6D7, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0xF7AF, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF6DD, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0xF6D4, 0, 0xF6E2, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xC4F1, 0, 0, /* 0xE0 */ + 0, 0xF0AF, 0, 0, 0xD9EC, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xB7EF, 0xC3F9, 0, 0xF0B0 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0B2, 0xF0B1, /* 0x00 */ + 0, 0xD1BB, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xCDD2, 0, 0, /* 0x10 */ + 0, 0, 0, 0xD4A7, 0, 0xF0B6, 0, 0xF0B7, /* 0x10 */ + 0, 0, 0, 0xF0B3, 0, 0, 0xD1EC, 0, /* 0x20 */ + 0xD1BC, 0, 0, 0, 0, 0, 0, 0xF0B9, /* 0x20 */ + 0xF0BB, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xBAE8, 0, 0, 0, 0xB8EB, /* 0x30 */ + 0, 0, 0xF0BC, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0xBEE9, 0xF0C1, 0xF0BE, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xF0C3, 0xB6EC, 0, 0, /* 0x50 */ + 0xF0C0, 0xF0C4, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xF0C6, 0, 0xC5F4, 0, 0, 0xF0C7, /* 0x60 */ + 0, 0, 0xC8B5, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xF0B4, /* 0x80 */ + 0, 0xF0C8, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xF0C5, 0, 0, 0, 0, /* 0x90 */ + 0xF0C9, 0, 0xF0CA, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF0CC, 0, 0, /* 0xA0 */ + 0, 0xF0CD, 0, 0, 0, 0, 0, 0xDDBA, /* 0xA0 */ + 0, 0, 0, 0, 0xBAD7, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xF7BD, 0xF0CF, 0, 0, 0, /* 0xB0 */ + 0xF0CB, 0, 0xF0CE, 0, 0xBCA6, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xF0D1, 0, 0, 0, 0xC5B8, /* 0xD0 */ + 0, 0xF0BA, 0xF0D2, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xF0B8, 0xF0D4, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xF0D3, /* 0xE0 */ + 0, 0, 0xF0D5, 0xF0C2, 0, 0, 0, 0, /* 0xF0 */ + 0xF0D6, 0xD3A5, 0xF0D8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xF0D7, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xF0B5, 0, 0, /* 0x10 */ + 0, 0, 0xF0D0, 0xF0D9, 0, 0xF0BF, 0xF0BD, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xF8D2, 0, 0, /* 0x70 */ + 0, 0xF8F4, 0xF5BA, 0, 0xBCEF, 0xD1CE, 0, 0xC2B9, /* 0x70 */ + 0, 0, 0xF7E4, 0, 0, 0, 0, 0xF7E5, /* 0x80 */ + 0xF7E6, 0, 0, 0xF7E7, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0xF7E8, 0xC2B4, 0, 0, 0, 0xC0F6, /* 0x90 */ + 0, 0, 0, 0, 0, 0xF7EA, 0, 0xF7EB, /* 0x90 */ + 0, 0, 0, 0, 0, 0xC2F3, 0, 0, /* 0xA0 */ + 0, 0xF4EF, 0, 0, 0, 0, 0, 0xF8E5, /* 0xA0 */ + 0, 0, 0, 0, 0xF4F0, 0xF8D9, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xC2E9, 0, 0xC3B4, 0xF7E2, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xBBC6, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xD9E4, 0xCAF2, 0xC0E8, 0xF0A4, /* 0xC0 */ + 0, 0xBADA, 0, 0, 0xC7AD, 0, 0, 0, /* 0xD0 */ + 0xC4AC, 0, 0, 0xF7EC, 0xF7ED, 0xF7EE, 0xB5E3, 0xF7F0, /* 0xD0 */ + 0xF7EF, 0, 0xF7F1, 0, 0, 0xF7F4, 0, 0xF7F3, /* 0xE0 */ + 0xB5B3, 0, 0, 0, 0, 0, 0, 0xF7F6, /* 0xE0 */ + 0, 0, 0xF7F5, 0, 0xF8D4, 0, 0, 0xF7F2, /* 0xF0 */ + 0, 0xEDE9, 0, 0xEDEA, 0xEDEB, 0xF6BC, 0, 0xF6BD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_GBT_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xF6BE, 0, 0, 0, 0, 0xB6A6, 0, /* 0x00 */ + 0xD8BE, 0, 0, 0xB9C4, 0, 0xF8AE, 0, 0xD8BB, /* 0x10 */ + 0, 0xDCB1, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xCAF3, 0, 0xF7F7, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xF7F8, 0, 0, 0xF7F9, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0xF7FB, /* 0x30 */ + 0, 0xF7FA, 0, 0xB1C7, 0, 0xF7FC, 0xF7FD, 0, /* 0x30 */ + 0, 0, 0, 0, 0xF7FE, 0, 0, 0, /* 0x40 */ + 0, 0, 0xC6EB, 0xD5AB, 0, 0, 0, 0xECB4, /* 0x40 */ + 0, 0, 0xB3DD, 0, 0xF6B3, 0, 0, 0, /* 0x50 */ + 0, 0xF6B5, 0, 0, 0xF6B7, 0, 0, 0xF6B4, /* 0x50 */ + 0xF6B6, 0xC1E4, 0, 0xF8AA, 0, 0, 0xF6B8, 0, /* 0x60 */ + 0, 0, 0xF6BA, 0, 0xF6B9, 0, 0, 0, /* 0x60 */ + 0, 0, 0xC8A3, 0, 0, 0, 0, 0xF6BB, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xC1FA, 0, 0, /* 0x80 */ + 0xC5D3, 0, 0, 0, 0xB9A8, 0xEDE8, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xB9EA, 0, 0, 0, /* 0x90 */ + 0xD9DF /* 0xA0 */ + /* 0xA0 */ +}; diff --git a/sal/textenc/tcvtscn6.tab b/sal/textenc/tcvtscn6.tab new file mode 100644 index 000000000..806ec561b --- /dev/null +++ b/sal/textenc/tcvtscn6.tab @@ -0,0 +1,2951 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the information tables for all */ +/* chinese simplified (China) charsets: */ +/* GB2312, GBK, MS936, APPLE_CHINSIMP */ + +/* GBK is MS-CP 936 and a superset of GB-2312-80. In GB-2312-80 the range */ +/* is 0xA1-0xFE for the leading byte and 0xA1-0xFE for the trailing byte. */ +/* In GBK the range is from 0x81-0xFE for the leading byte and 0x40-0xFE */ +/* for the trailing byte. */ + +/* ======================================================================= */ + +#define GBKOFF 0x61 + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aGB2312UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x20AC, 0, 0, nullptr }, /* 0x80 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */ + { 0, 1, 0, nullptr }, /* 0xA0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */ + { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */ + { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */ + { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */ + { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */ + { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */ + { 0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF }, /* 0xA8 */ + { 0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF }, /* 0xA9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAE */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAF */ /* We convert this as double byte */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B0+GBKOFF }, /* 0xB0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B1+GBKOFF }, /* 0xB1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B2+GBKOFF }, /* 0xB2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B3+GBKOFF }, /* 0xB3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B4+GBKOFF }, /* 0xB4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B5+GBKOFF }, /* 0xB5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B6+GBKOFF }, /* 0xB6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B7+GBKOFF }, /* 0xB7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B8+GBKOFF }, /* 0xB8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B9+GBKOFF }, /* 0xB9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BA+GBKOFF }, /* 0xBA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BB+GBKOFF }, /* 0xBB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BC+GBKOFF }, /* 0xBC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BD+GBKOFF }, /* 0xBD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BE+GBKOFF }, /* 0xBE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BF+GBKOFF }, /* 0xBF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C0+GBKOFF }, /* 0xC0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C1+GBKOFF }, /* 0xC1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C2+GBKOFF }, /* 0xC2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C3+GBKOFF }, /* 0xC3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C4+GBKOFF }, /* 0xC4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C5+GBKOFF }, /* 0xC5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C6+GBKOFF }, /* 0xC6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C7+GBKOFF }, /* 0xC7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C8+GBKOFF }, /* 0xC8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C9+GBKOFF }, /* 0xC9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CA+GBKOFF }, /* 0xCA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CB+GBKOFF }, /* 0xCB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CC+GBKOFF }, /* 0xCC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CD+GBKOFF }, /* 0xCD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CE+GBKOFF }, /* 0xCE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CF+GBKOFF }, /* 0xCF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D0+GBKOFF }, /* 0xD0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D1+GBKOFF }, /* 0xD1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D2+GBKOFF }, /* 0xD2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D3+GBKOFF }, /* 0xD3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D4+GBKOFF }, /* 0xD4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D5+GBKOFF }, /* 0xD5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D6+GBKOFF }, /* 0xD6 */ + { 0, 0xA1, 0xF9, aImplDBCSToUniTab_GBK_D7+GBKOFF }, /* 0xD7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D8+GBKOFF }, /* 0xD8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D9+GBKOFF }, /* 0xD9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DA+GBKOFF }, /* 0xDA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DB+GBKOFF }, /* 0xDB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DC+GBKOFF }, /* 0xDC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DD+GBKOFF }, /* 0xDD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DE+GBKOFF }, /* 0xDE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DF+GBKOFF }, /* 0xDF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E0+GBKOFF }, /* 0xE0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E1+GBKOFF }, /* 0xE1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E2+GBKOFF }, /* 0xE2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E3+GBKOFF }, /* 0xE3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E4+GBKOFF }, /* 0xE4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E5+GBKOFF }, /* 0xE5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E6+GBKOFF }, /* 0xE6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E7+GBKOFF }, /* 0xE7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E8+GBKOFF }, /* 0xE8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E9+GBKOFF }, /* 0xE9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EA+GBKOFF }, /* 0xEA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EB+GBKOFF }, /* 0xEB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EC+GBKOFF }, /* 0xEC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_ED+GBKOFF }, /* 0xED */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EE+GBKOFF }, /* 0xEE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EF+GBKOFF }, /* 0xEF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F0+GBKOFF }, /* 0xF0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F1+GBKOFF }, /* 0xF1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F2+GBKOFF }, /* 0xF2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F3+GBKOFF }, /* 0xF3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F4+GBKOFF }, /* 0xF4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F5+GBKOFF }, /* 0xF5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F6+GBKOFF }, /* 0xF6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F7+GBKOFF }, /* 0xF7 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aGB2312DBCSHighTab[256] = +{ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */ + { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */ + { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x14, 0xAC, aImplUniToDBCSTab_GB_20 }, /* 0x20 */ + { 0x03, 0x93, aImplUniToDBCSTab_GB_21 }, /* 0x21 */ + { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */ + { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */ + { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_GB_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */ + { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */ + { 1, 0, nullptr }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_4E }, /* 0x4E */ + { 0x01, 0xFE, aImplUniToDBCSTab_GB_4F }, /* 0x4F */ + { 0x0C, 0xFB, aImplUniToDBCSTab_GB_50 }, /* 0x50 */ + { 0x06, 0xFF, aImplUniToDBCSTab_GB_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_52 }, /* 0x52 */ + { 0x00, 0xFD, aImplUniToDBCSTab_GB_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_54 }, /* 0x54 */ + { 0x01, 0xFE, aImplUniToDBCSTab_GB_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_56 }, /* 0x56 */ + { 0x03, 0xFD, aImplUniToDBCSTab_GB_57 }, /* 0x57 */ + { 0x00, 0xF9, aImplUniToDBCSTab_GB_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_GB_59 }, /* 0x59 */ + { 0x01, 0xF1, aImplUniToDBCSTab_GB_5A }, /* 0x5A */ + { 0x09, 0xFF, aImplUniToDBCSTab_GB_5B }, /* 0x5B */ + { 0x01, 0xFB, aImplUniToDBCSTab_GB_5C }, /* 0x5C */ + { 0x02, 0xFE, aImplUniToDBCSTab_GB_5D }, /* 0x5D */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_5E }, /* 0x5E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_5F }, /* 0x5F */ + { 0x00, 0xFA, aImplUniToDBCSTab_GB_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_61 }, /* 0x61 */ + { 0x06, 0xFF, aImplUniToDBCSTab_GB_62 }, /* 0x62 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_63 }, /* 0x63 */ + { 0x00, 0xE6, aImplUniToDBCSTab_GB_64 }, /* 0x64 */ + { 0x00, 0xFA, aImplUniToDBCSTab_GB_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_67 }, /* 0x67 */ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_68 }, /* 0x68 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_69 }, /* 0x69 */ + { 0x0A, 0xAC, aImplUniToDBCSTab_GB_6A }, /* 0x6A */ + { 0x20, 0xFD, aImplUniToDBCSTab_GB_6B }, /* 0x6B */ + { 0x05, 0xFE, aImplUniToDBCSTab_GB_6C }, /* 0x6C */ + { 0x01, 0xFC, aImplUniToDBCSTab_GB_6D }, /* 0x6D */ + { 0x05, 0xF9, aImplUniToDBCSTab_GB_6E }, /* 0x6E */ + { 0x02, 0xEF, aImplUniToDBCSTab_GB_6F }, /* 0x6F */ + { 0x11, 0xFD, aImplUniToDBCSTab_GB_70 }, /* 0x70 */ + { 0x09, 0xF9, aImplUniToDBCSTab_GB_71 }, /* 0x71 */ + { 0x06, 0xFC, aImplUniToDBCSTab_GB_72 }, /* 0x72 */ + { 0x01, 0xF2, aImplUniToDBCSTab_GB_73 }, /* 0x73 */ + { 0x03, 0xFF, aImplUniToDBCSTab_GB_74 }, /* 0x74 */ + { 0x04, 0xFF, aImplUniToDBCSTab_GB_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_76 }, /* 0x76 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_77 }, /* 0x77 */ + { 0x00, 0xFA, aImplUniToDBCSTab_GB_78 }, /* 0x78 */ + { 0x01, 0xFD, aImplUniToDBCSTab_GB_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_7A }, /* 0x7A */ + { 0x03, 0xFE, aImplUniToDBCSTab_GB_7B }, /* 0x7B */ + { 0x07, 0xFB, aImplUniToDBCSTab_GB_7C }, /* 0x7C */ + { 0x0A, 0xAE, aImplUniToDBCSTab_GB_7D }, /* 0x7D */ + { 0x3B, 0xFF, aImplUniToDBCSTab_GB_7E }, /* 0x7E */ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_GB_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_GB_81 }, /* 0x81 */ + { 0x00, 0xFB, aImplUniToDBCSTab_GB_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_GB_83 }, /* 0x83 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_84 }, /* 0x84 */ + { 0x0C, 0xFF, aImplUniToDBCSTab_GB_85 }, /* 0x85 */ + { 0x05, 0xFE, aImplUniToDBCSTab_GB_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_87 }, /* 0x87 */ + { 0x03, 0xFE, aImplUniToDBCSTab_GB_88 }, /* 0x88 */ + { 0x02, 0xF3, aImplUniToDBCSTab_GB_89 }, /* 0x89 */ + { 0x00, 0x93, aImplUniToDBCSTab_GB_8A }, /* 0x8A */ + { 0x07, 0xFF, aImplUniToDBCSTab_GB_8B }, /* 0x8B */ + { 0x00, 0x98, aImplUniToDBCSTab_GB_8C }, /* 0x8C */ + { 0x1D, 0xFD, aImplUniToDBCSTab_GB_8D }, /* 0x8D */ + { 0x05, 0xCE, aImplUniToDBCSTab_GB_8E }, /* 0x8E */ + { 0x66, 0xFD, aImplUniToDBCSTab_GB_8F }, /* 0x8F */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_90 }, /* 0x90 */ + { 0x02, 0xDC, aImplUniToDBCSTab_GB_91 }, /* 0x91 */ + { 0x74, 0xC8, aImplUniToDBCSTab_GB_92 }, /* 0x92 */ + { 0x3E, 0xD6, aImplUniToDBCSTab_GB_93 }, /* 0x93 */ + { 0x3E, 0xFF, aImplUniToDBCSTab_GB_94 }, /* 0x94 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_95 }, /* 0x95 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_96 }, /* 0x96 */ + { 0x00, 0xF6, aImplUniToDBCSTab_GB_97 }, /* 0x97 */ + { 0x75, 0xE9, aImplUniToDBCSTab_GB_98 }, /* 0x98 */ + { 0x0D, 0xA8, aImplUniToDBCSTab_GB_99 }, /* 0x99 */ + { 0x6C, 0xFB, aImplUniToDBCSTab_GB_9A }, /* 0x9A */ + { 0x03, 0x54, aImplUniToDBCSTab_GB_9B }, /* 0x9B */ + { 0x7C, 0xE2, aImplUniToDBCSTab_GB_9C }, /* 0x9C */ + { 1, 0, nullptr }, /* 0x9D */ + { 0x1F, 0xFE, aImplUniToDBCSTab_GB_9E }, /* 0x9E */ + { 0x0B, 0xA0, aImplUniToDBCSTab_GB_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 1, 0, nullptr }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x31, 0x44, aImplUniToDBCSTab_GB_FE }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +/* F8A1-FEFE --> E000-E29F */ +/* AAA1-AFFE --> E2A0-E4DF */ + +#define DBCS_EUDC_MS936_COUNT 2 +ImplDBCSEUDCData const aImplMS936DBCSEUDCTab[DBCS_EUDC_MS936_COUNT] = +{ + /* EUDC-Range (the mapping defined by MS is A0-FF, because the */ + /* unicode range is E000-E29F and E2A0-E4DF) */ + /* Lead: F8-FE */ + /* Trail: A1-FE */ + { 0xF8, 0xFE, 0xA0, 0xFF, 0, 0, 0, 0, 1, 0x60, 0xE000, 0xE29F }, + /* Lead: AA-AF */ + /* Trail: A1-FE */ + { 0xAA, 0xAF, 0xA0, 0xFF, 0, 0, 0, 0, 1, 0x60, 0xE2A0, 0xE4DF } +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplGB2312DBCSCvtData = +{ + aGB2312UniLeadTab, + aGB2312DBCSHighTab, + aImplMS936DBCSEUDCTab, + DBCS_EUDC_MS936_COUNT, + 0x00, 0xFF, + 0xA1, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplGB2312TextEncodingData + = { { &aImplGB2312DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-cn", + "gb2312", + 1, + 2, + 2, + 134, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */ + +/* ======================================================================= */ + +ImplTextEncodingData const aImplEUCCNTextEncodingData + = { { &aImplGB2312DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-cn", + "gb2312", + 1, + 2, + 2, + 134, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aGBT12345UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x20AC, 0, 0, nullptr }, /* 0x80 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */ + { 0, 1, 0, nullptr }, /* 0xA0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */ + { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */ + { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */ + { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */ + { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */ + { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */ + { 0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF }, /* 0xA8 */ + { 0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF }, /* 0xA9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAE */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAF */ /* We convert this as double byte */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B0 }, /* 0xB0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B1 }, /* 0xB1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B2 }, /* 0xB2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B3 }, /* 0xB3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B4 }, /* 0xB4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B5 }, /* 0xB5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B6 }, /* 0xB6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B7 }, /* 0xB7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B8 }, /* 0xB8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B9 }, /* 0xB9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BA }, /* 0xBA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BB }, /* 0xBB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BC }, /* 0xBC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BD }, /* 0xBD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BE }, /* 0xBE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BF }, /* 0xBF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C0 }, /* 0xC0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C1 }, /* 0xC1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C2 }, /* 0xC2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C3 }, /* 0xC3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C4 }, /* 0xC4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C5 }, /* 0xC5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C6 }, /* 0xC6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C7 }, /* 0xC7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C8 }, /* 0xC8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C9 }, /* 0xC9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CA }, /* 0xCA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CB }, /* 0xCB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CC }, /* 0xCC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CD }, /* 0xCD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CE }, /* 0xCE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CF }, /* 0xCF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D0 }, /* 0xD0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D1 }, /* 0xD1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D2 }, /* 0xD2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D3 }, /* 0xD3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D4 }, /* 0xD4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D5 }, /* 0xD5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D6 }, /* 0xD6 */ + { 0, 0xA1, 0xF9, aImplDBCSToUniTab_GBT_D7 }, /* 0xD7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D8 }, /* 0xD8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D9 }, /* 0xD9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DA }, /* 0xDA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DB }, /* 0xDB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DC }, /* 0xDC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DD }, /* 0xDD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DE }, /* 0xDE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DF }, /* 0xDF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E0 }, /* 0xE0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E1 }, /* 0xE1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E2 }, /* 0xE2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E3 }, /* 0xE3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E4 }, /* 0xE4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E5 }, /* 0xE5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E6 }, /* 0xE6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E7 }, /* 0xE7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E8 }, /* 0xE8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E9 }, /* 0xE9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EA }, /* 0xEA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EB }, /* 0xEB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EC }, /* 0xEC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_ED }, /* 0xED */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EE }, /* 0xEE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EF }, /* 0xEF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F0 }, /* 0xF0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F1 }, /* 0xF1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F2 }, /* 0xF2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F3 }, /* 0xF3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F4 }, /* 0xF4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F5 }, /* 0xF5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F6 }, /* 0xF6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F7 }, /* 0xF7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F8 }, /* 0xF8 */ + { 0, 0xA1, 0xA9, aImplDBCSToUniTab_GBT_F9 }, /* 0xF9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aGBT12345DBCSHighTab[256] = +{ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */ + { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */ + { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x14, 0xAC, aImplUniToDBCSTab_GB_20 }, /* 0x20 */ + { 0x03, 0x93, aImplUniToDBCSTab_GB_21 }, /* 0x21 */ + { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */ + { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */ + { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_GB_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */ + { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */ + { 1, 0, nullptr }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_4E }, /* 0x4E */ + { 0x01, 0xFE, aImplUniToDBCSTab_GBT_4F }, /* 0x4F */ + { 0x00, 0xFB, aImplUniToDBCSTab_GBT_50 }, /* 0x50 */ + { 0x00, 0xFD, aImplUniToDBCSTab_GBT_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_52 }, /* 0x52 */ + { 0x00, 0xFC, aImplUniToDBCSTab_GBT_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GBT_54 }, /* 0x54 */ + { 0x01, 0xFE, aImplUniToDBCSTab_GBT_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_56 }, /* 0x56 */ + { 0x03, 0xFD, aImplUniToDBCSTab_GBT_57 }, /* 0x57 */ + { 0x00, 0xFD, aImplUniToDBCSTab_GBT_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_GBT_59 }, /* 0x59 */ + { 0x01, 0xFB, aImplUniToDBCSTab_GBT_5A }, /* 0x5A */ + { 0x00, 0xFA, aImplUniToDBCSTab_GBT_5B }, /* 0x5B */ + { 0x01, 0xFD, aImplUniToDBCSTab_GBT_5C }, /* 0x5C */ + { 0x06, 0xFE, aImplUniToDBCSTab_GBT_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_GBT_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_GBT_5F }, /* 0x5F */ + { 0x0A, 0xFB, aImplUniToDBCSTab_GBT_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_62 }, /* 0x62 */ + { 0x01, 0xF8, aImplUniToDBCSTab_GBT_63 }, /* 0x63 */ + { 0x0B, 0xFE, aImplUniToDBCSTab_GBT_64 }, /* 0x64 */ + { 0x00, 0xFA, aImplUniToDBCSTab_GBT_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_67 }, /* 0x67 */ + { 0x00, 0xFC, aImplUniToDBCSTab_GBT_68 }, /* 0x68 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GBT_69 }, /* 0x69 */ + { 0x01, 0xFB, aImplUniToDBCSTab_GBT_6A }, /* 0x6A */ + { 0x04, 0xFF, aImplUniToDBCSTab_GBT_6B }, /* 0x6B */ + { 0x05, 0xF5, aImplUniToDBCSTab_GBT_6C }, /* 0x6C */ + { 0x04, 0xFC, aImplUniToDBCSTab_GBT_6D }, /* 0x6D */ + { 0x05, 0xFF, aImplUniToDBCSTab_GBT_6E }, /* 0x6E */ + { 0x01, 0xFE, aImplUniToDBCSTab_GBT_6F }, /* 0x6F */ + { 0x05, 0xFD, aImplUniToDBCSTab_GBT_70 }, /* 0x70 */ + { 0x09, 0xFE, aImplUniToDBCSTab_GBT_71 }, /* 0x71 */ + { 0x06, 0xFD, aImplUniToDBCSTab_GBT_72 }, /* 0x72 */ + { 0x01, 0xFE, aImplUniToDBCSTab_GBT_73 }, /* 0x73 */ + { 0x03, 0xFF, aImplUniToDBCSTab_GBT_74 }, /* 0x74 */ + { 0x04, 0xFF, aImplUniToDBCSTab_GBT_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBT_76 }, /* 0x76 */ + { 0x01, 0xFD, aImplUniToDBCSTab_GBT_77 }, /* 0x77 */ + { 0x02, 0xFD, aImplUniToDBCSTab_GBT_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_GBT_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_7A }, /* 0x7A */ + { 0x04, 0xFE, aImplUniToDBCSTab_GBT_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBT_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_GBT_7D }, /* 0x7D */ + { 0x08, 0x9C, aImplUniToDBCSTab_GBT_7E }, /* 0x7E */ + { 0x36, 0xFC, aImplUniToDBCSTab_GBT_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_GBT_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_GBT_81 }, /* 0x81 */ + { 0x00, 0xFB, aImplUniToDBCSTab_GBT_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_GBT_83 }, /* 0x83 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GBT_84 }, /* 0x84 */ + { 0x0C, 0xFF, aImplUniToDBCSTab_GBT_85 }, /* 0x85 */ + { 0x04, 0xFE, aImplUniToDBCSTab_GBT_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBT_87 }, /* 0x87 */ + { 0x03, 0xFE, aImplUniToDBCSTab_GBT_88 }, /* 0x88 */ + { 0x02, 0xF8, aImplUniToDBCSTab_GBT_89 }, /* 0x89 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBT_8A }, /* 0x8A */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBT_8B }, /* 0x8B */ + { 0x07, 0xFE, aImplUniToDBCSTab_GBT_8C }, /* 0x8C */ + { 0x04, 0xFD, aImplUniToDBCSTab_GBT_8D }, /* 0x8D */ + { 0x05, 0xFE, aImplUniToDBCSTab_GBT_8E }, /* 0x8E */ + { 0x03, 0xFD, aImplUniToDBCSTab_GBT_8F }, /* 0x8F */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBT_90 }, /* 0x90 */ + { 0x02, 0xFA, aImplUniToDBCSTab_GBT_91 }, /* 0x91 */ + { 0x00, 0xFC, aImplUniToDBCSTab_GBT_92 }, /* 0x92 */ + { 0x01, 0xF9, aImplUniToDBCSTab_GBT_93 }, /* 0x93 */ + { 0x03, 0x7F, aImplUniToDBCSTab_GBT_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_GBT_95 }, /* 0x95 */ + { 0x1C, 0xFB, aImplUniToDBCSTab_GBT_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBT_97 }, /* 0x97 */ + { 0x01, 0xFE, aImplUniToDBCSTab_GBT_98 }, /* 0x98 */ + { 0x03, 0xFF, aImplUniToDBCSTab_GBT_99 }, /* 0x99 */ + { 0x01, 0xFB, aImplUniToDBCSTab_GBT_9A }, /* 0x9A */ + { 0x03, 0xFF, aImplUniToDBCSTab_GBT_9B }, /* 0x9B */ + { 0x08, 0xF6, aImplUniToDBCSTab_GBT_9C }, /* 0x9C */ + { 0x06, 0xFA, aImplUniToDBCSTab_GBT_9D }, /* 0x9D */ + { 0x0C, 0xFF, aImplUniToDBCSTab_GBT_9E }, /* 0x9E */ + { 0x09, 0xA0, aImplUniToDBCSTab_GBT_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 1, 0, nullptr }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x31, 0x44, aImplUniToDBCSTab_GB_FE }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplGBT12345DBCSCvtData = +{ + aGBT12345UniLeadTab, + aGBT12345DBCSHighTab, + aImplMS936DBCSEUDCTab, + DBCS_EUDC_MS936_COUNT, + 0x00, 0xFF, + 0xA1, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplGBT12345TextEncodingData + = { { &aImplGBT12345DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-cn", + "cn-gb-12345", + 1, + 2, + 2, + 134, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */ + +/* ======================================================================= */ + +/* #100054# In the GBK range FE50--FEA0, added those mappings (in both + directions) taken from GB-18030 that do not map to Unicode PUA (i.e., those + mappings marked with an * below): + + FE50 -> U+2E81 * + FE51 -> U+E816 + FE52 -> U+E817 + FE53 -> U+E818 + FE54 -> U+2E84 * + FE55 -> U+3473 * + FE56 -> U+3447 * + FE57 -> U+2E88 * + FE58 -> U+2E8B * + FE59 -> U+E81E + FE5A -> U+359E * + FE5B -> U+361A * + FE5C -> U+360E * + FE5D -> U+2E8C * + FE5E -> U+2E97 * + FE5F -> U+396E * + FE60 -> U+3918 * + FE61 -> U+E826 + FE62 -> U+39CF * + FE63 -> U+39DF * + FE64 -> U+3A73 * + FE65 -> U+39D0 * + FE66 -> U+E82B + FE67 -> U+E82C + FE68 -> U+3B4E * + FE69 -> U+3C6E * + FE6A -> U+3CE0 * + FE6B -> U+2EA7 * + FE6C -> U+E831 + FE6D -> U+E832 + FE6E -> U+2EAA * + FE6F -> U+4056 * + FE70 -> U+415F * + FE71 -> U+2EAE * + FE72 -> U+4337 * + FE73 -> U+2EB3 * + FE74 -> U+2EB6 * + FE75 -> U+2EB7 * + FE76 -> U+E83B + FE77 -> U+43B1 * + FE78 -> U+43AC * + FE79 -> U+2EBB * + FE7A -> U+43DD * + FE7B -> U+44D6 * + FE7C -> U+4661 * + FE7D -> U+464C * + FE7E -> U+E843 + FE80 -> U+4723 * + FE81 -> U+4729 * + FE82 -> U+477C * + FE83 -> U+478D * + FE84 -> U+2ECA * + FE85 -> U+4947 * + FE86 -> U+497A * + FE87 -> U+497D * + FE88 -> U+4982 * + FE89 -> U+4983 * + FE8A -> U+4985 * + FE8B -> U+4986 * + FE8C -> U+499F * + FE8D -> U+499B * + FE8E -> U+49B7 * + FE8F -> U+49B6 * + FE90 -> U+E854 + FE91 -> U+E855 + FE92 -> U+4CA3 * + FE93 -> U+4C9F * + FE94 -> U+4CA0 * + FE95 -> U+4CA1 * + FE96 -> U+4C77 * + FE97 -> U+4CA2 * + FE98 -> U+4D13 * + FE99 -> U+4D14 * + FE9A -> U+4D15 * + FE9B -> U+4D16 * + FE9C -> U+4D17 * + FE9D -> U+4D18 * + FE9E -> U+4D19 * + FE9F -> U+4DAE * + FEA0 -> U+E864 +*/ + +ImplDBCSToUniLeadTab const aGBKUniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x20AC, 0, 0, nullptr }, /* 0x80 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_81 }, /* 0x81 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_82 }, /* 0x82 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_83 }, /* 0x83 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_84 }, /* 0x84 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_85 }, /* 0x85 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_86 }, /* 0x86 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_87 }, /* 0x87 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_88 }, /* 0x88 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_89 }, /* 0x89 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8A }, /* 0x8A */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8B }, /* 0x8B */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8C }, /* 0x8C */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8D }, /* 0x8D */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8E }, /* 0x8E */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8F }, /* 0x8F */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_90 }, /* 0x90 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_91 }, /* 0x91 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_92 }, /* 0x92 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_93 }, /* 0x93 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_94 }, /* 0x94 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_95 }, /* 0x95 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_96 }, /* 0x96 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_97 }, /* 0x97 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_98 }, /* 0x98 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_99 }, /* 0x99 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9A }, /* 0x9A */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9B }, /* 0x9B */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9C }, /* 0x9C */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9D }, /* 0x9D */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9E }, /* 0x9E */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9F }, /* 0x9F */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_A0 }, /* 0xA0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */ + { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */ + { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */ + { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */ + { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */ + { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */ + { 0, 0x40, 0xE9, aImplDBCSToUniTab_GBK_A8 }, /* 0xA8 */ + { 0, 0x40, 0xEF, aImplDBCSToUniTab_GBK_A9 }, /* 0xA9 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AA }, /* 0xAA */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AB }, /* 0xAB */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AC }, /* 0xAC */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AD }, /* 0xAD */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AE }, /* 0xAE */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AF }, /* 0xAF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B0 }, /* 0xB0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B1 }, /* 0xB1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B2 }, /* 0xB2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B3 }, /* 0xB3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B4 }, /* 0xB4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B5 }, /* 0xB5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B6 }, /* 0xB6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B7 }, /* 0xB7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B8 }, /* 0xB8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B9 }, /* 0xB9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BA }, /* 0xBA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BB }, /* 0xBB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BC }, /* 0xBC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BD }, /* 0xBD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BE }, /* 0xBE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BF }, /* 0xBF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C0 }, /* 0xC0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C1 }, /* 0xC1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C2 }, /* 0xC2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C3 }, /* 0xC3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C4 }, /* 0xC4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C5 }, /* 0xC5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C6 }, /* 0xC6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C7 }, /* 0xC7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C8 }, /* 0xC8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C9 }, /* 0xC9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CA }, /* 0xCA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CB }, /* 0xCB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CC }, /* 0xCC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CD }, /* 0xCD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CE }, /* 0xCE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CF }, /* 0xCF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D0 }, /* 0xD0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D1 }, /* 0xD1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D2 }, /* 0xD2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D3 }, /* 0xD3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D4 }, /* 0xD4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D5 }, /* 0xD5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D6 }, /* 0xD6 */ + { 0, 0x40, 0xF9, aImplDBCSToUniTab_GBK_D7 }, /* 0xD7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D8 }, /* 0xD8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D9 }, /* 0xD9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DA }, /* 0xDA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DB }, /* 0xDB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DC }, /* 0xDC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DD }, /* 0xDD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DE }, /* 0xDE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DF }, /* 0xDF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E9 }, /* 0xE9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EA }, /* 0xEA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EB }, /* 0xEB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EC }, /* 0xEC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_ED }, /* 0xED */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EE }, /* 0xEE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EF }, /* 0xEF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F0 }, /* 0xF0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F1 }, /* 0xF1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F2 }, /* 0xF2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F3 }, /* 0xF3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F4 }, /* 0xF4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F5 }, /* 0xF5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F6 }, /* 0xF6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F7 }, /* 0xF7 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F8 }, /* 0xF8 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F9 }, /* 0xF9 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FA }, /* 0xFA */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FB }, /* 0xFB */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FC }, /* 0xFC */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FD }, /* 0xFD */ + { 0, 0x40, 0x9F, aImplDBCSToUniTab_GBK_FE }, /* 0xFE */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aGBKDBCSHighTab[256] = +{ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */ + { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */ + { 0x51, 0xD9, aImplUniToDBCSTab_GBK_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x10, 0xAC, aImplUniToDBCSTab_GBK_20 }, /* 0x20 */ + { 0x03, 0x99, aImplUniToDBCSTab_GBK_21 }, /* 0x21 */ + { 0x08, 0xEF, aImplUniToDBCSTab_GBK_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */ + { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */ + { 0x00, 0xE5, aImplUniToDBCSTab_GBK_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_GBK_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 0x81, 0xCA, aImplUniToDBCSTab_GBK_2E }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBK_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */ + { 0x20, 0xA3, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */ + { 0x8E, 0xD5, aImplUniToDBCSTab_GBK_33 }, /* 0x33 */ + { 0x47, 0x73, aImplUniToDBCSTab_GBK_34 }, /* 0x34 */ + { 0x9E, 0x9E, aImplUniToDBCSTab_GBK_35 }, /* 0x35 */ + { 0x0E, 0x1A, aImplUniToDBCSTab_GBK_36 }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 0x18, 0xDF, aImplUniToDBCSTab_GBK_39 }, /* 0x39 */ + { 0x73, 0x73, aImplUniToDBCSTab_GBK_3A }, /* 0x3A */ + { 0x4E, 0x4E, aImplUniToDBCSTab_GBK_3B }, /* 0x3B */ + { 0x6E, 0xE0, aImplUniToDBCSTab_GBK_3C }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 0x56, 0x56, aImplUniToDBCSTab_GBK_40 }, /* 0x40 */ + { 0x5F, 0x5F, aImplUniToDBCSTab_GBK_41 }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 0x37, 0xDD, aImplUniToDBCSTab_GBK_43 }, /* 0x43 */ + { 0xD6, 0xD6, aImplUniToDBCSTab_GBK_44 }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 0x4C, 0x61, aImplUniToDBCSTab_GBK_46 }, /* 0x46 */ + { 0x23, 0x8D, aImplUniToDBCSTab_GBK_47 }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 0x47, 0xB7, aImplUniToDBCSTab_GBK_49 }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 0x77, 0xA3, aImplUniToDBCSTab_GBK_4C }, /* 0x4C */ + { 0x13, 0xAE, aImplUniToDBCSTab_GBK_4D }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4E }, /* 0x4E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4F }, /* 0x4F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_50 }, /* 0x50 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_52 }, /* 0x52 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_53 }, /* 0x53 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_54 }, /* 0x54 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_56 }, /* 0x56 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_57 }, /* 0x57 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_58 }, /* 0x58 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_59 }, /* 0x59 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5A }, /* 0x5A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5B }, /* 0x5B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5C }, /* 0x5C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5D }, /* 0x5D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5E }, /* 0x5E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5F }, /* 0x5F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_62 }, /* 0x62 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_63 }, /* 0x63 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_64 }, /* 0x64 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_67 }, /* 0x67 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_69 }, /* 0x69 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6A }, /* 0x6A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6B }, /* 0x6B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6C }, /* 0x6C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6D }, /* 0x6D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6E }, /* 0x6E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6F }, /* 0x6F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_70 }, /* 0x70 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_71 }, /* 0x71 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_72 }, /* 0x72 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_73 }, /* 0x73 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_74 }, /* 0x74 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_75 }, /* 0x75 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_76 }, /* 0x76 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_77 }, /* 0x77 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_78 }, /* 0x78 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7A }, /* 0x7A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7B }, /* 0x7B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7C }, /* 0x7C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7D }, /* 0x7D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7E }, /* 0x7E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7F }, /* 0x7F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_80 }, /* 0x80 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_81 }, /* 0x81 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_82 }, /* 0x82 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_83 }, /* 0x83 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_84 }, /* 0x84 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_85 }, /* 0x85 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_86 }, /* 0x86 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_87 }, /* 0x87 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_88 }, /* 0x88 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_89 }, /* 0x89 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8A }, /* 0x8A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8B }, /* 0x8B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8C }, /* 0x8C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8D }, /* 0x8D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8E }, /* 0x8E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8F }, /* 0x8F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_90 }, /* 0x90 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_91 }, /* 0x91 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_92 }, /* 0x92 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_93 }, /* 0x93 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_94 }, /* 0x94 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_95 }, /* 0x95 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_97 }, /* 0x97 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_98 }, /* 0x98 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_99 }, /* 0x99 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9A }, /* 0x9A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9B }, /* 0x9B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9C }, /* 0x9C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9D }, /* 0x9D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9E }, /* 0x9E */ + { 0x00, 0xA5, aImplUniToDBCSTab_GBK_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x2C, 0xF1, aImplUniToDBCSTab_GBK_F9 }, /* 0xF9 */ + { 0x0C, 0x29, aImplUniToDBCSTab_GBK_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x30, 0x6B, aImplUniToDBCSTab_GBK_FE }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_GBK_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplGBKDBCSCvtData = +{ + aGBKUniLeadTab, + aGBKDBCSHighTab, + aImplMS936DBCSEUDCTab, + DBCS_EUDC_MS936_COUNT, + 0x00, 0xFF, + 0x40, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplGBKTextEncodingData + = { { &aImplGBKDBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-cn", + "GBK", + 1, + 2, + 2, + 134, + RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aMS936UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0x20AC, 0, 0, nullptr }, /* 0x80 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_81 }, /* 0x81 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_82 }, /* 0x82 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_83 }, /* 0x83 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_84 }, /* 0x84 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_85 }, /* 0x85 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_86 }, /* 0x86 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_87 }, /* 0x87 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_88 }, /* 0x88 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_89 }, /* 0x89 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8A }, /* 0x8A */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8B }, /* 0x8B */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8C }, /* 0x8C */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8D }, /* 0x8D */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8E }, /* 0x8E */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8F }, /* 0x8F */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_90 }, /* 0x90 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_91 }, /* 0x91 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_92 }, /* 0x92 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_93 }, /* 0x93 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_94 }, /* 0x94 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_95 }, /* 0x95 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_96 }, /* 0x96 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_97 }, /* 0x97 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_98 }, /* 0x98 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_99 }, /* 0x99 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9A }, /* 0x9A */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9B }, /* 0x9B */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9C }, /* 0x9C */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9D }, /* 0x9D */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9E }, /* 0x9E */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9F }, /* 0x9F */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_A0 }, /* 0xA0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */ + { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */ + { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */ + { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */ + { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */ + { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */ + { 0, 0x40, 0xE9, aImplDBCSToUniTab_GBK_A8 }, /* 0xA8 */ + { 0, 0x40, 0xEF, aImplDBCSToUniTab_GBK_A9 }, /* 0xA9 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AA }, /* 0xAA */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AB }, /* 0xAB */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AC }, /* 0xAC */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AD }, /* 0xAD */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AE }, /* 0xAE */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AF }, /* 0xAF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B0 }, /* 0xB0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B1 }, /* 0xB1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B2 }, /* 0xB2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B3 }, /* 0xB3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B4 }, /* 0xB4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B5 }, /* 0xB5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B6 }, /* 0xB6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B7 }, /* 0xB7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B8 }, /* 0xB8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B9 }, /* 0xB9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BA }, /* 0xBA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BB }, /* 0xBB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BC }, /* 0xBC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BD }, /* 0xBD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BE }, /* 0xBE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BF }, /* 0xBF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C0 }, /* 0xC0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C1 }, /* 0xC1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C2 }, /* 0xC2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C3 }, /* 0xC3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C4 }, /* 0xC4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C5 }, /* 0xC5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C6 }, /* 0xC6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C7 }, /* 0xC7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C8 }, /* 0xC8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C9 }, /* 0xC9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CA }, /* 0xCA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CB }, /* 0xCB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CC }, /* 0xCC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CD }, /* 0xCD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CE }, /* 0xCE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CF }, /* 0xCF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D0 }, /* 0xD0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D1 }, /* 0xD1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D2 }, /* 0xD2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D3 }, /* 0xD3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D4 }, /* 0xD4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D5 }, /* 0xD5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D6 }, /* 0xD6 */ + { 0, 0x40, 0xF9, aImplDBCSToUniTab_GBK_D7 }, /* 0xD7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D8 }, /* 0xD8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D9 }, /* 0xD9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DA }, /* 0xDA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DB }, /* 0xDB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DC }, /* 0xDC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DD }, /* 0xDD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DE }, /* 0xDE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DF }, /* 0xDF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E9 }, /* 0xE9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EA }, /* 0xEA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EB }, /* 0xEB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EC }, /* 0xEC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_ED }, /* 0xED */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EE }, /* 0xEE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EF }, /* 0xEF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F0 }, /* 0xF0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F1 }, /* 0xF1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F2 }, /* 0xF2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F3 }, /* 0xF3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F4 }, /* 0xF4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F5 }, /* 0xF5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F6 }, /* 0xF6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F7 }, /* 0xF7 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F8 }, /* 0xF8 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F9 }, /* 0xF9 */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FA }, /* 0xFA */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FB }, /* 0xFB */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FC }, /* 0xFC */ + { 0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FD }, /* 0xFD */ + { 0, 0x40, 0x4F, aImplDBCSToUniTab_GBK_FE }, /* 0xFE */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aMS936DBCSHighTab[256] = +{ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 }, /* 0x00 */ + { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */ + { 0x51, 0xD9, aImplUniToDBCSTab_GBK_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ /* we convert this char also to unicode */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x10, 0xAC, aImplUniToDBCSTab_GBK_20 }, /* 0x20 */ + { 0x03, 0x99, aImplUniToDBCSTab_GBK_21 }, /* 0x21 */ + { 0x08, 0xEF, aImplUniToDBCSTab_GBK_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */ + { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */ + { 0x00, 0xE5, aImplUniToDBCSTab_GBK_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_GBK_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_GBK_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */ + { 0x20, 0xA3, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */ + { 0x8E, 0xD5, aImplUniToDBCSTab_GBK_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4E }, /* 0x4E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4F }, /* 0x4F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_50 }, /* 0x50 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_52 }, /* 0x52 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_53 }, /* 0x53 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_54 }, /* 0x54 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_56 }, /* 0x56 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_57 }, /* 0x57 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_58 }, /* 0x58 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_59 }, /* 0x59 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5A }, /* 0x5A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5B }, /* 0x5B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5C }, /* 0x5C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5D }, /* 0x5D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5E }, /* 0x5E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5F }, /* 0x5F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_62 }, /* 0x62 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_63 }, /* 0x63 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_64 }, /* 0x64 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_67 }, /* 0x67 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_68 }, /* 0x68 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_69 }, /* 0x69 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6A }, /* 0x6A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6B }, /* 0x6B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6C }, /* 0x6C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6D }, /* 0x6D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6E }, /* 0x6E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6F }, /* 0x6F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_70 }, /* 0x70 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_71 }, /* 0x71 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_72 }, /* 0x72 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_73 }, /* 0x73 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_74 }, /* 0x74 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_75 }, /* 0x75 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_76 }, /* 0x76 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_77 }, /* 0x77 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_78 }, /* 0x78 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7A }, /* 0x7A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7B }, /* 0x7B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7C }, /* 0x7C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7D }, /* 0x7D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7E }, /* 0x7E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7F }, /* 0x7F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_80 }, /* 0x80 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_81 }, /* 0x81 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_82 }, /* 0x82 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_83 }, /* 0x83 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_84 }, /* 0x84 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_85 }, /* 0x85 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_86 }, /* 0x86 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_87 }, /* 0x87 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_88 }, /* 0x88 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_89 }, /* 0x89 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8A }, /* 0x8A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8B }, /* 0x8B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8C }, /* 0x8C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8D }, /* 0x8D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8E }, /* 0x8E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8F }, /* 0x8F */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_90 }, /* 0x90 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_91 }, /* 0x91 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_92 }, /* 0x92 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_93 }, /* 0x93 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_94 }, /* 0x94 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_95 }, /* 0x95 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_97 }, /* 0x97 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_98 }, /* 0x98 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_99 }, /* 0x99 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9A }, /* 0x9A */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9B }, /* 0x9B */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9C }, /* 0x9C */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9D }, /* 0x9D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9E }, /* 0x9E */ + { 0x00, 0xA5, aImplUniToDBCSTab_GBK_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 0x2C, 0xF1, aImplUniToDBCSTab_GBK_F9 }, /* 0xF9 */ + { 0x0C, 0x29, aImplUniToDBCSTab_GBK_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x30, 0x6B, aImplUniToDBCSTab_GBK_FE }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_GBK_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplMS936DBCSCvtData = +{ + aMS936UniLeadTab, + aMS936DBCSHighTab, + aImplMS936DBCSEUDCTab, + DBCS_EUDC_MS936_COUNT, + 0x00, 0xFF, + 0x40, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS936TextEncodingData + = { { &aImplMS936DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-cn", + "gb2312", + 1, + 2, + 2, + 134, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* WIN/DOS/OS2, SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding + 25 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aAPPLECHINSIMPUniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0, 1, 0, nullptr }, /* 0x80 */ + { 0xF880, 0, 0, nullptr }, /* 0x81 */ + { 0xF881, 0, 0, nullptr }, /* 0x82 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */ + { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 }, /* 0xA1 */ + { 0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 }, /* 0xA2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 }, /* 0xA3 */ + { 0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 }, /* 0xA4 */ + { 0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 }, /* 0xA5 */ + { 0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 }, /* 0xA6 */ + { 0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 }, /* 0xA7 */ + { 0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF }, /* 0xA8 */ + { 0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF }, /* 0xA9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAE */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xAF */ /* We convert this as double byte */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B0+GBKOFF }, /* 0xB0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B1+GBKOFF }, /* 0xB1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B2+GBKOFF }, /* 0xB2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B3+GBKOFF }, /* 0xB3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B4+GBKOFF }, /* 0xB4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B5+GBKOFF }, /* 0xB5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B6+GBKOFF }, /* 0xB6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B7+GBKOFF }, /* 0xB7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B8+GBKOFF }, /* 0xB8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B9+GBKOFF }, /* 0xB9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BA+GBKOFF }, /* 0xBA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BB+GBKOFF }, /* 0xBB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BC+GBKOFF }, /* 0xBC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BD+GBKOFF }, /* 0xBD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BE+GBKOFF }, /* 0xBE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BF+GBKOFF }, /* 0xBF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C0+GBKOFF }, /* 0xC0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C1+GBKOFF }, /* 0xC1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C2+GBKOFF }, /* 0xC2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C3+GBKOFF }, /* 0xC3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C4+GBKOFF }, /* 0xC4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C5+GBKOFF }, /* 0xC5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C6+GBKOFF }, /* 0xC6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C7+GBKOFF }, /* 0xC7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C8+GBKOFF }, /* 0xC8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C9+GBKOFF }, /* 0xC9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CA+GBKOFF }, /* 0xCA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CB+GBKOFF }, /* 0xCB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CC+GBKOFF }, /* 0xCC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CD+GBKOFF }, /* 0xCD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CE+GBKOFF }, /* 0xCE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CF+GBKOFF }, /* 0xCF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D0+GBKOFF }, /* 0xD0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D1+GBKOFF }, /* 0xD1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D2+GBKOFF }, /* 0xD2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D3+GBKOFF }, /* 0xD3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D4+GBKOFF }, /* 0xD4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D5+GBKOFF }, /* 0xD5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D6+GBKOFF }, /* 0xD6 */ + { 0, 0xA1, 0xF9, aImplDBCSToUniTab_GBK_D7+GBKOFF }, /* 0xD7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D8+GBKOFF }, /* 0xD8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D9+GBKOFF }, /* 0xD9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DA+GBKOFF }, /* 0xDA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DB+GBKOFF }, /* 0xDB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DC+GBKOFF }, /* 0xDC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DD+GBKOFF }, /* 0xDD */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DE+GBKOFF }, /* 0xDE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DF+GBKOFF }, /* 0xDF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E0+GBKOFF }, /* 0xE0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E1+GBKOFF }, /* 0xE1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E2+GBKOFF }, /* 0xE2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E3+GBKOFF }, /* 0xE3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E4+GBKOFF }, /* 0xE4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E5+GBKOFF }, /* 0xE5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E6+GBKOFF }, /* 0xE6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E7+GBKOFF }, /* 0xE7 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E8+GBKOFF }, /* 0xE8 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E9+GBKOFF }, /* 0xE9 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EA+GBKOFF }, /* 0xEA */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EB+GBKOFF }, /* 0xEB */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EC+GBKOFF }, /* 0xEC */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_ED+GBKOFF }, /* 0xED */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EE+GBKOFF }, /* 0xEE */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EF+GBKOFF }, /* 0xEF */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F0+GBKOFF }, /* 0xF0 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F1+GBKOFF }, /* 0xF1 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F2+GBKOFF }, /* 0xF2 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F3+GBKOFF }, /* 0xF3 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F4+GBKOFF }, /* 0xF4 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F5+GBKOFF }, /* 0xF5 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F6+GBKOFF }, /* 0xF6 */ + { 0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F7+GBKOFF }, /* 0xF7 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF8 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xF9 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */ + { 0x00A9, 0, 0, nullptr }, /* 0xFD */ + { 0x2122, 0, 0, nullptr }, /* 0xFE */ + { 0x2026, 0, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aAPPLECHINSIMPDBCSHighTab[256] = +{ + { 0x00, 0xFC, aImplUniToDBCSTab_APPLECHINSIMP_00 }, /* 0x00 */ + { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 }, /* 0x01 */ + { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_GB_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x14, 0x3E, aImplUniToDBCSTab_GB_20 }, /* 0x20 */ + { 0x03, 0x93, aImplUniToDBCSTab_APPLECHINSIMP_21 }, /* 0x21 */ + { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 }, /* 0x22 */ + { 0x12, 0x12, aImplUniToDBCSTab_GB_23 }, /* 0x23 */ + { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 }, /* 0x24 */ + { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_GB_26 }, /* 0x26 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_GB_31 }, /* 0x31 */ + { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 }, /* 0x32 */ + { 1, 0, nullptr }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_4E }, /* 0x4E */ + { 0x01, 0xFE, aImplUniToDBCSTab_GB_4F }, /* 0x4F */ + { 0x0C, 0xFB, aImplUniToDBCSTab_GB_50 }, /* 0x50 */ + { 0x06, 0xFF, aImplUniToDBCSTab_GB_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_52 }, /* 0x52 */ + { 0x00, 0xFD, aImplUniToDBCSTab_GB_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_54 }, /* 0x54 */ + { 0x01, 0xFE, aImplUniToDBCSTab_GB_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_56 }, /* 0x56 */ + { 0x03, 0xFD, aImplUniToDBCSTab_GB_57 }, /* 0x57 */ + { 0x00, 0xF9, aImplUniToDBCSTab_GB_58 }, /* 0x58 */ + { 0x02, 0xFF, aImplUniToDBCSTab_GB_59 }, /* 0x59 */ + { 0x01, 0xF1, aImplUniToDBCSTab_GB_5A }, /* 0x5A */ + { 0x09, 0xFF, aImplUniToDBCSTab_GB_5B }, /* 0x5B */ + { 0x01, 0xFB, aImplUniToDBCSTab_GB_5C }, /* 0x5C */ + { 0x02, 0xFE, aImplUniToDBCSTab_GB_5D }, /* 0x5D */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_5E }, /* 0x5E */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_5F }, /* 0x5F */ + { 0x00, 0xFA, aImplUniToDBCSTab_GB_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_61 }, /* 0x61 */ + { 0x06, 0xFF, aImplUniToDBCSTab_GB_62 }, /* 0x62 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_63 }, /* 0x63 */ + { 0x00, 0xE6, aImplUniToDBCSTab_GB_64 }, /* 0x64 */ + { 0x00, 0xFA, aImplUniToDBCSTab_GB_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_67 }, /* 0x67 */ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_68 }, /* 0x68 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_69 }, /* 0x69 */ + { 0x0A, 0xAC, aImplUniToDBCSTab_GB_6A }, /* 0x6A */ + { 0x20, 0xFD, aImplUniToDBCSTab_GB_6B }, /* 0x6B */ + { 0x05, 0xFE, aImplUniToDBCSTab_GB_6C }, /* 0x6C */ + { 0x01, 0xFC, aImplUniToDBCSTab_GB_6D }, /* 0x6D */ + { 0x05, 0xF9, aImplUniToDBCSTab_GB_6E }, /* 0x6E */ + { 0x02, 0xEF, aImplUniToDBCSTab_GB_6F }, /* 0x6F */ + { 0x11, 0xFD, aImplUniToDBCSTab_GB_70 }, /* 0x70 */ + { 0x09, 0xF9, aImplUniToDBCSTab_GB_71 }, /* 0x71 */ + { 0x06, 0xFC, aImplUniToDBCSTab_GB_72 }, /* 0x72 */ + { 0x01, 0xF2, aImplUniToDBCSTab_GB_73 }, /* 0x73 */ + { 0x03, 0xFF, aImplUniToDBCSTab_GB_74 }, /* 0x74 */ + { 0x04, 0xFF, aImplUniToDBCSTab_GB_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_76 }, /* 0x76 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_77 }, /* 0x77 */ + { 0x00, 0xFA, aImplUniToDBCSTab_GB_78 }, /* 0x78 */ + { 0x01, 0xFD, aImplUniToDBCSTab_GB_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_GB_7A }, /* 0x7A */ + { 0x03, 0xFE, aImplUniToDBCSTab_GB_7B }, /* 0x7B */ + { 0x07, 0xFB, aImplUniToDBCSTab_GB_7C }, /* 0x7C */ + { 0x0A, 0xAE, aImplUniToDBCSTab_GB_7D }, /* 0x7D */ + { 0x3B, 0xFF, aImplUniToDBCSTab_GB_7E }, /* 0x7E */ + { 0x00, 0xFC, aImplUniToDBCSTab_GB_7F }, /* 0x7F */ + { 0x00, 0xFD, aImplUniToDBCSTab_GB_80 }, /* 0x80 */ + { 0x02, 0xFE, aImplUniToDBCSTab_GB_81 }, /* 0x81 */ + { 0x00, 0xFB, aImplUniToDBCSTab_GB_82 }, /* 0x82 */ + { 0x01, 0xFD, aImplUniToDBCSTab_GB_83 }, /* 0x83 */ + { 0x01, 0xFF, aImplUniToDBCSTab_GB_84 }, /* 0x84 */ + { 0x0C, 0xFF, aImplUniToDBCSTab_GB_85 }, /* 0x85 */ + { 0x05, 0xFE, aImplUniToDBCSTab_GB_86 }, /* 0x86 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_87 }, /* 0x87 */ + { 0x03, 0xFE, aImplUniToDBCSTab_GB_88 }, /* 0x88 */ + { 0x02, 0xF3, aImplUniToDBCSTab_GB_89 }, /* 0x89 */ + { 0x00, 0x93, aImplUniToDBCSTab_GB_8A }, /* 0x8A */ + { 0x07, 0xFF, aImplUniToDBCSTab_GB_8B }, /* 0x8B */ + { 0x00, 0x98, aImplUniToDBCSTab_GB_8C }, /* 0x8C */ + { 0x1D, 0xFD, aImplUniToDBCSTab_GB_8D }, /* 0x8D */ + { 0x05, 0xCE, aImplUniToDBCSTab_GB_8E }, /* 0x8E */ + { 0x66, 0xFD, aImplUniToDBCSTab_GB_8F }, /* 0x8F */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_90 }, /* 0x90 */ + { 0x02, 0xDC, aImplUniToDBCSTab_GB_91 }, /* 0x91 */ + { 0x74, 0xC8, aImplUniToDBCSTab_GB_92 }, /* 0x92 */ + { 0x3E, 0xD6, aImplUniToDBCSTab_GB_93 }, /* 0x93 */ + { 0x3E, 0xFF, aImplUniToDBCSTab_GB_94 }, /* 0x94 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_95 }, /* 0x95 */ + { 0x00, 0xFE, aImplUniToDBCSTab_GB_96 }, /* 0x96 */ + { 0x00, 0xF6, aImplUniToDBCSTab_GB_97 }, /* 0x97 */ + { 0x75, 0xE9, aImplUniToDBCSTab_GB_98 }, /* 0x98 */ + { 0x0D, 0xA8, aImplUniToDBCSTab_GB_99 }, /* 0x99 */ + { 0x6C, 0xFB, aImplUniToDBCSTab_GB_9A }, /* 0x9A */ + { 0x03, 0x54, aImplUniToDBCSTab_GB_9B }, /* 0x9B */ + { 0x7C, 0xE2, aImplUniToDBCSTab_GB_9C }, /* 0x9C */ + { 1, 0, nullptr }, /* 0x9D */ + { 0x1F, 0xFE, aImplUniToDBCSTab_GB_9E }, /* 0x9E */ + { 0x0B, 0xA0, aImplUniToDBCSTab_GB_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 0x80, 0x81, aImplUniToDBCSTab_APPLECHINSIMP_F8 }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 1, 0, nullptr }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x31, 0x44, aImplUniToDBCSTab_GB_FE }, /* 0xFE */ + { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplAPPLECHINSIMPDBCSCvtData = +{ + aAPPLECHINSIMPUniLeadTab, + aAPPLECHINSIMPDBCSHighTab, + nullptr, + 0, + 0x00, 0xFF, + 0xA1, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLECHINSIMPTextEncodingData + = { { &aImplAPPLECHINSIMPDBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-cn", + "gb2312", + 1, + 2, + 2, + 134, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* MAC, SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */ diff --git a/sal/textenc/tcvtsym1.tab b/sal/textenc/tcvtsym1.tab new file mode 100644 index 000000000..1b4f0f24b --- /dev/null +++ b/sal/textenc/tcvtsym1.tab @@ -0,0 +1,42 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "tcvtbyte.hxx" + +/* Symbol Font Encodings */ + +ImplTextEncodingData const aImplSYMBOLTextEncodingData + = { { nullptr, + ImplSymbolToUnicode, + ImplUnicodeToSymbol, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "adobe-fontspecific", + "invariant", + 1, + 1, + 1, + 2, + RTL_TEXTENCODING_INFO_SYMBOL }; + /* SCRIPT_SYMBOL, pc code page 65400, mac encoding 32 */ diff --git a/sal/textenc/tcvttcn1.tab b/sal/textenc/tcvttcn1.tab new file mode 100644 index 000000000..af78905ab --- /dev/null +++ b/sal/textenc/tcvttcn1.tab @@ -0,0 +1,2885 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the DBCS to UniCode tables for the following */ +/* chinese traditional (Taiwan/HongKong) charsets: */ +/* BIG5, MS950, APPLE_CHINTRAD */ + +/* ======================================================================= */ + +/* Changes: */ +/* A1_45: MS950 == 0x2027, APPLE_CHINTRAD == 0x00B7 - we use in all systems 0x2027 for better MS compatibility */ +/* A1_4B: MS950 == 0x2026, APPLE_CHINTRAD == 0x22EF - we use in all systems 0x2026 for better MS compatibility */ +/* A1_4B: MS950 == 0x2026, APPLE_CHINTRAD == 0x22EF - we use in all systems 0x2026 for better MS compatibility */ +/* A1_C2: MS950 == 0x00AF, APPLE_CHINTRAD == 0x203E - we use in all systems 0x00AF for better MS compatibility */ +/* A1_E3: MS950 == 0xFF5E, APPLE_CHINTRAD == 0x223C - we use in all systems 0xFF5E for better MS compatibility */ +/* A1_F3: MS950 == 0x2299, APPLE_CHINTRAD == 0x2609 - we use in all systems 0x2299 for better MS compatibility */ +/* A1_4D-A1_54, A1_5A, A1_75-A1_76, A1_A1-A1_A4, A1_C3, A1_C5, A1_CB, A1_FE: is MS950 extension */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x3000, 0xFF0C, 0x3001, 0x3002, 0xFF0E, 0x2027, 0xFF1B, 0xFF1A, /* 0x40 */ + 0xFF1F, 0xFF01, 0xFE30, 0x2026, 0x2025, 0xFE50, 0xFE51, 0xFE52, /* 0x40 */ + 0x00B7, 0xFE54, 0xFE55, 0xFE56, 0xFE57, 0xFF5C, 0x2013, 0xFE31, /* 0x50 */ + 0x2014, 0xFE33, 0x2574, 0xFE34, 0xFE4F, 0xFF08, 0xFF09, 0xFE35, /* 0x50 */ + 0xFE36, 0xFF5B, 0xFF5D, 0xFE37, 0xFE38, 0x3014, 0x3015, 0xFE39, /* 0x60 */ + 0xFE3A, 0x3010, 0x3011, 0xFE3B, 0xFE3C, 0x300A, 0x300B, 0xFE3D, /* 0x60 */ + 0xFE3E, 0x3008, 0x3009, 0xFE3F, 0xFE40, 0x300C, 0x300D, 0xFE41, /* 0x70 */ + 0xFE42, 0x300E, 0x300F, 0xFE43, 0xFE44, 0xFE59, 0xFE5A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0x2018, 0x2019, 0x201C, /* 0xA0 */ + 0x201D, 0x301D, 0x301E, 0x2035, 0x2032, 0xFF03, 0xFF06, 0xFF0A, /* 0xA0 */ + 0x203B, 0x00A7, 0x3003, 0x25CB, 0x25CF, 0x25B3, 0x25B2, 0x25CE, /* 0xB0 */ + 0x2606, 0x2605, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25BD, 0x25BC, /* 0xB0 */ + 0x32A3, 0x2105, 0x00AF, 0xFFE3, 0xFF3F, 0x02CD, 0xFE49, 0xFE4A, /* 0xC0 */ + 0xFE4D, 0xFE4E, 0xFE4B, 0xFE4C, 0xFE5F, 0xFE60, 0xFE61, 0xFF0B, /* 0xC0 */ + 0xFF0D, 0x00D7, 0x00F7, 0x00B1, 0x221A, 0xFF1C, 0xFF1E, 0xFF1D, /* 0xD0 */ + 0x2266, 0x2267, 0x2260, 0x221E, 0x2252, 0x2261, 0xFE62, 0xFE63, /* 0xD0 */ + 0xFE64, 0xFE65, 0xFE66, 0xFF5E, 0x2229, 0x222A, 0x22A5, 0x2220, /* 0xE0 */ + 0x221F, 0x22BF, 0x33D2, 0x33D1, 0x222B, 0x222E, 0x2235, 0x2234, /* 0xE0 */ + 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, /* 0xF0 */ + 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xFF0F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* A2_41: MS950 == 0x2215, APPLE_CHINTRAD == 0xFF0F - we use in all systems 0x2215 for better MS compatibility */ +/* A2_42: MS950 == 0xFE68, APPLE_CHINTRAD == 0xFF3C - we use in all systems 0xFE68 for better MS compatibility */ +/* A2_44: MS950 == 0xFFE5, APPLE_CHINTRAD == 0x00A5 - we use in all systems 0xFFE5 for better MS compatibility */ +/* A2_44: MS950 == 0xFFE5, APPLE_CHINTRAD == 0x00A5 - we use in all systems 0xFFE5 for better MS compatibility */ +/* A2_46: MS950 == 0xFFE0, APPLE_CHINTRAD == 0x00A2 - we use in all systems 0xFFE0 for better MS compatibility */ +/* A2_47: MS950 == 0xFFE1, APPLE_CHINTRAD == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */ +/* A2_47: MS950 == 0xFFE1, APPLE_CHINTRAD == 0x00A3 - we use in all systems 0xFFE1 for better MS compatibility */ +/* A2_40, A2_79, A2_CC, A2_CE: is MS950 extension */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF3C, 0x2215, 0xFE68, 0xFF04, 0xFFE5, 0x3012, 0xFFE0, 0xFFE1, /* 0x40 */ + 0xFF05, 0xFF20, 0x2103, 0x2109, 0xFE69, 0xFE6A, 0xFE6B, 0x33D5, /* 0x40 */ + 0x339C, 0x339D, 0x339E, 0x33CE, 0x33A1, 0x338E, 0x338F, 0x33C4, /* 0x50 */ + 0x00B0, 0x5159, 0x515B, 0x515E, 0x515D, 0x5161, 0x5163, 0x55E7, /* 0x50 */ + 0x74E9, 0x7CCE, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, /* 0x60 */ + 0x2587, 0x2588, 0x258F, 0x258E, 0x258D, 0x258C, 0x258B, 0x258A, /* 0x60 */ + 0x2589, 0x253C, 0x2534, 0x252C, 0x2524, 0x251C, 0x2594, 0x2500, /* 0x70 */ + 0x2502, 0x2595, 0x250C, 0x2510, 0x2514, 0x2518, 0x256D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x256E, 0x2570, 0x256F, 0x2550, 0x255E, 0x256A, 0x2561, /* 0xA0 */ + 0x25E2, 0x25E3, 0x25E5, 0x25E4, 0x2571, 0x2572, 0x2573, 0xFF10, /* 0xA0 */ + 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, /* 0xB0 */ + 0xFF19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, /* 0xB0 */ + 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, /* 0xC0 */ + 0x3026, 0x3027, 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xFF21, /* 0xC0 */ + 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, /* 0xD0 */ + 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, /* 0xD0 */ + 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, /* 0xE0 */ + 0xFF3A, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, /* 0xE0 */ + 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, /* 0xF0 */ + 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* Added EURO SIGN from cp950.txt (01/07/2000) at 0xA3E1 */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0x0391, 0x0392, 0x0393, 0x0394, /* 0x40 */ + 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, /* 0x40 */ + 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, /* 0x50 */ + 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, /* 0x50 */ + 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, /* 0x60 */ + 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, /* 0x60 */ + 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x3105, 0x3106, 0x3107, 0x3108, /* 0x70 */ + 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, 0x310E, 0x310F, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, /* 0xA0 */ + 0x3117, 0x3118, 0x3119, 0x311A, 0x311B, 0x311C, 0x311D, 0x311E, /* 0xA0 */ + 0x311F, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, /* 0xB0 */ + 0x3127, 0x3128, 0x3129, 0x02D9, 0x02C9, 0x02CA, 0x02C7, 0x02CB, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0x20AC, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E00, 0x4E59, 0x4E01, 0x4E03, 0x4E43, 0x4E5D, 0x4E86, 0x4E8C, /* 0x40 */ + 0x4EBA, 0x513F, 0x5165, 0x516B, 0x51E0, 0x5200, 0x5201, 0x529B, /* 0x40 */ + 0x5315, 0x5341, 0x535C, 0x53C8, 0x4E09, 0x4E0B, 0x4E08, 0x4E0A, /* 0x50 */ + 0x4E2B, 0x4E38, 0x51E1, 0x4E45, 0x4E48, 0x4E5F, 0x4E5E, 0x4E8E, /* 0x50 */ + 0x4EA1, 0x5140, 0x5203, 0x52FA, 0x5343, 0x53C9, 0x53E3, 0x571F, /* 0x60 */ + 0x58EB, 0x5915, 0x5927, 0x5973, 0x5B50, 0x5B51, 0x5B53, 0x5BF8, /* 0x60 */ + 0x5C0F, 0x5C22, 0x5C38, 0x5C71, 0x5DDD, 0x5DE5, 0x5DF1, 0x5DF2, /* 0x70 */ + 0x5DF3, 0x5DFE, 0x5E72, 0x5EFE, 0x5F0B, 0x5F13, 0x624D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x4E11, 0x4E10, 0x4E0D, 0x4E2D, 0x4E30, 0x4E39, 0x4E4B, /* 0xA0 */ + 0x5C39, 0x4E88, 0x4E91, 0x4E95, 0x4E92, 0x4E94, 0x4EA2, 0x4EC1, /* 0xA0 */ + 0x4EC0, 0x4EC3, 0x4EC6, 0x4EC7, 0x4ECD, 0x4ECA, 0x4ECB, 0x4EC4, /* 0xB0 */ + 0x5143, 0x5141, 0x5167, 0x516D, 0x516E, 0x516C, 0x5197, 0x51F6, /* 0xB0 */ + 0x5206, 0x5207, 0x5208, 0x52FB, 0x52FE, 0x52FF, 0x5316, 0x5339, /* 0xC0 */ + 0x5348, 0x5347, 0x5345, 0x535E, 0x5384, 0x53CB, 0x53CA, 0x53CD, /* 0xC0 */ + 0x58EC, 0x5929, 0x592B, 0x592A, 0x592D, 0x5B54, 0x5C11, 0x5C24, /* 0xD0 */ + 0x5C3A, 0x5C6F, 0x5DF4, 0x5E7B, 0x5EFF, 0x5F14, 0x5F15, 0x5FC3, /* 0xD0 */ + 0x6208, 0x6236, 0x624B, 0x624E, 0x652F, 0x6587, 0x6597, 0x65A4, /* 0xE0 */ + 0x65B9, 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, /* 0xE0 */ + 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, 0x6C34, 0x706B, 0x722A, 0x7236, /* 0xF0 */ + 0x723B, 0x7247, 0x7259, 0x725B, 0x72AC, 0x738B, 0x4E19 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E16, 0x4E15, 0x4E14, 0x4E18, 0x4E3B, 0x4E4D, 0x4E4F, 0x4E4E, /* 0x40 */ + 0x4EE5, 0x4ED8, 0x4ED4, 0x4ED5, 0x4ED6, 0x4ED7, 0x4EE3, 0x4EE4, /* 0x40 */ + 0x4ED9, 0x4EDE, 0x5145, 0x5144, 0x5189, 0x518A, 0x51AC, 0x51F9, /* 0x50 */ + 0x51FA, 0x51F8, 0x520A, 0x52A0, 0x529F, 0x5305, 0x5306, 0x5317, /* 0x50 */ + 0x531D, 0x4EDF, 0x534A, 0x5349, 0x5361, 0x5360, 0x536F, 0x536E, /* 0x60 */ + 0x53BB, 0x53EF, 0x53E4, 0x53F3, 0x53EC, 0x53EE, 0x53E9, 0x53E8, /* 0x60 */ + 0x53FC, 0x53F8, 0x53F5, 0x53EB, 0x53E6, 0x53EA, 0x53F2, 0x53F1, /* 0x70 */ + 0x53F0, 0x53E5, 0x53ED, 0x53FB, 0x56DB, 0x56DA, 0x5916, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x592E, 0x5931, 0x5974, 0x5976, 0x5B55, 0x5B83, 0x5C3C, /* 0xA0 */ + 0x5DE8, 0x5DE7, 0x5DE6, 0x5E02, 0x5E03, 0x5E73, 0x5E7C, 0x5F01, /* 0xA0 */ + 0x5F18, 0x5F17, 0x5FC5, 0x620A, 0x6253, 0x6254, 0x6252, 0x6251, /* 0xB0 */ + 0x65A5, 0x65E6, 0x672E, 0x672C, 0x672A, 0x672B, 0x672D, 0x6B63, /* 0xB0 */ + 0x6BCD, 0x6C11, 0x6C10, 0x6C38, 0x6C41, 0x6C40, 0x6C3E, 0x72AF, /* 0xC0 */ + 0x7384, 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7529, /* 0xC0 */ + 0x7530, 0x7531, 0x7532, 0x7533, 0x758B, 0x767D, 0x76AE, 0x76BF, /* 0xD0 */ + 0x76EE, 0x77DB, 0x77E2, 0x77F3, 0x793A, 0x79BE, 0x7A74, 0x7ACB, /* 0xD0 */ + 0x4E1E, 0x4E1F, 0x4E52, 0x4E53, 0x4E69, 0x4E99, 0x4EA4, 0x4EA6, /* 0xE0 */ + 0x4EA5, 0x4EFF, 0x4F09, 0x4F19, 0x4F0A, 0x4F15, 0x4F0D, 0x4F10, /* 0xE0 */ + 0x4F11, 0x4F0F, 0x4EF2, 0x4EF6, 0x4EFB, 0x4EF0, 0x4EF3, 0x4EFD, /* 0xF0 */ + 0x4F01, 0x4F0B, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5171, 0x518D, 0x51B0, 0x5217, 0x5211, 0x5212, 0x520E, 0x5216, /* 0x40 */ + 0x52A3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540F, /* 0x40 */ + 0x540C, 0x540A, 0x5410, 0x5401, 0x540B, 0x5404, 0x5411, 0x540D, /* 0x50 */ + 0x5408, 0x5403, 0x540E, 0x5406, 0x5412, 0x56E0, 0x56DE, 0x56DD, /* 0x50 */ + 0x5733, 0x5730, 0x5728, 0x572D, 0x572C, 0x572F, 0x5729, 0x5919, /* 0x60 */ + 0x591A, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597D, 0x5979, /* 0x60 */ + 0x5982, 0x5981, 0x5B57, 0x5B58, 0x5B87, 0x5B88, 0x5B85, 0x5B89, /* 0x70 */ + 0x5BFA, 0x5C16, 0x5C79, 0x5DDE, 0x5E06, 0x5E76, 0x5E74, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5F0F, 0x5F1B, 0x5FD9, 0x5FD6, 0x620E, 0x620C, 0x620D, /* 0xA0 */ + 0x6210, 0x6263, 0x625B, 0x6258, 0x6536, 0x65E9, 0x65E8, 0x65EC, /* 0xA0 */ + 0x65ED, 0x66F2, 0x66F3, 0x6709, 0x673D, 0x6734, 0x6731, 0x6735, /* 0xB0 */ + 0x6B21, 0x6B64, 0x6B7B, 0x6C16, 0x6C5D, 0x6C57, 0x6C59, 0x6C5F, /* 0xB0 */ + 0x6C60, 0x6C50, 0x6C55, 0x6C61, 0x6C5B, 0x6C4D, 0x6C4E, 0x7070, /* 0xC0 */ + 0x725F, 0x725D, 0x767E, 0x7AF9, 0x7C73, 0x7CF8, 0x7F36, 0x7F8A, /* 0xC0 */ + 0x7FBD, 0x8001, 0x8003, 0x800C, 0x8012, 0x8033, 0x807F, 0x8089, /* 0xD0 */ + 0x808B, 0x808C, 0x81E3, 0x81EA, 0x81F3, 0x81FC, 0x820C, 0x821B, /* 0xD0 */ + 0x821F, 0x826E, 0x8272, 0x827E, 0x866B, 0x8840, 0x884C, 0x8863, /* 0xE0 */ + 0x897F, 0x9621, 0x4E32, 0x4EA8, 0x4F4D, 0x4F4F, 0x4F47, 0x4F57, /* 0xE0 */ + 0x4F5E, 0x4F34, 0x4F5B, 0x4F55, 0x4F30, 0x4F50, 0x4F51, 0x4F3D, /* 0xF0 */ + 0x4F3A, 0x4F38, 0x4F43, 0x4F54, 0x4F3C, 0x4F46, 0x4F63 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4F5C, 0x4F60, 0x4F2F, 0x4F4E, 0x4F36, 0x4F59, 0x4F5D, 0x4F48, /* 0x40 */ + 0x4F5A, 0x514C, 0x514B, 0x514D, 0x5175, 0x51B6, 0x51B7, 0x5225, /* 0x40 */ + 0x5224, 0x5229, 0x522A, 0x5228, 0x52AB, 0x52A9, 0x52AA, 0x52AC, /* 0x50 */ + 0x5323, 0x5373, 0x5375, 0x541D, 0x542D, 0x541E, 0x543E, 0x5426, /* 0x50 */ + 0x544E, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541B, /* 0x60 */ + 0x5429, 0x544A, 0x5439, 0x543B, 0x5438, 0x542E, 0x5435, 0x5436, /* 0x60 */ + 0x5420, 0x543C, 0x5440, 0x5431, 0x542B, 0x541F, 0x542C, 0x56EA, /* 0x70 */ + 0x56F0, 0x56E4, 0x56EB, 0x574A, 0x5751, 0x5740, 0x574D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5747, 0x574E, 0x573E, 0x5750, 0x574F, 0x573B, 0x58EF, /* 0xA0 */ + 0x593E, 0x599D, 0x5992, 0x59A8, 0x599E, 0x59A3, 0x5999, 0x5996, /* 0xA0 */ + 0x598D, 0x59A4, 0x5993, 0x598A, 0x59A5, 0x5B5D, 0x5B5C, 0x5B5A, /* 0xB0 */ + 0x5B5B, 0x5B8C, 0x5B8B, 0x5B8F, 0x5C2C, 0x5C40, 0x5C41, 0x5C3F, /* 0xB0 */ + 0x5C3E, 0x5C90, 0x5C91, 0x5C94, 0x5C8C, 0x5DEB, 0x5E0C, 0x5E8F, /* 0xC0 */ + 0x5E87, 0x5E8A, 0x5EF7, 0x5F04, 0x5F1F, 0x5F64, 0x5F62, 0x5F77, /* 0xC0 */ + 0x5F79, 0x5FD8, 0x5FCC, 0x5FD7, 0x5FCD, 0x5FF1, 0x5FEB, 0x5FF8, /* 0xD0 */ + 0x5FEA, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, /* 0xD0 */ + 0x6289, 0x626D, 0x628A, 0x627C, 0x627E, 0x6279, 0x6273, 0x6292, /* 0xE0 */ + 0x626F, 0x6298, 0x626E, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, /* 0xE0 */ + 0x653B, 0x6538, 0x65F1, 0x66F4, 0x675F, 0x674E, 0x674F, 0x6750, /* 0xF0 */ + 0x6751, 0x675C, 0x6756, 0x675E, 0x6749, 0x6746, 0x6760 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6753, 0x6757, 0x6B65, 0x6BCF, 0x6C42, 0x6C5E, 0x6C99, 0x6C81, /* 0x40 */ + 0x6C88, 0x6C89, 0x6C85, 0x6C9B, 0x6C6A, 0x6C7A, 0x6C90, 0x6C70, /* 0x40 */ + 0x6C8C, 0x6C68, 0x6C96, 0x6C92, 0x6C7D, 0x6C83, 0x6C72, 0x6C7E, /* 0x50 */ + 0x6C74, 0x6C86, 0x6C76, 0x6C8D, 0x6C94, 0x6C98, 0x6C82, 0x7076, /* 0x50 */ + 0x707C, 0x707D, 0x7078, 0x7262, 0x7261, 0x7260, 0x72C4, 0x72C2, /* 0x60 */ + 0x7396, 0x752C, 0x752B, 0x7537, 0x7538, 0x7682, 0x76EF, 0x77E3, /* 0x60 */ + 0x79C1, 0x79C0, 0x79BF, 0x7A76, 0x7CFB, 0x7F55, 0x8096, 0x8093, /* 0x70 */ + 0x809D, 0x8098, 0x809B, 0x809A, 0x80B2, 0x826F, 0x8292, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x828B, 0x828D, 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, /* 0xA0 */ + 0x8C55, 0x8C9D, 0x8D64, 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, /* 0xA0 */ + 0x8FB0, 0x8FC2, 0x8FC6, 0x8FC5, 0x8FC4, 0x5DE1, 0x9091, 0x90A2, /* 0xB0 */ + 0x90AA, 0x90A6, 0x90A3, 0x9149, 0x91C6, 0x91CC, 0x9632, 0x962E, /* 0xB0 */ + 0x9631, 0x962A, 0x962C, 0x4E26, 0x4E56, 0x4E73, 0x4E8B, 0x4E9B, /* 0xC0 */ + 0x4E9E, 0x4EAB, 0x4EAC, 0x4F6F, 0x4F9D, 0x4F8D, 0x4F73, 0x4F7F, /* 0xC0 */ + 0x4F6C, 0x4F9B, 0x4F8B, 0x4F86, 0x4F83, 0x4F70, 0x4F75, 0x4F88, /* 0xD0 */ + 0x4F69, 0x4F7B, 0x4F96, 0x4F7E, 0x4F8F, 0x4F91, 0x4F7A, 0x5154, /* 0xD0 */ + 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51BD, 0x51FD, /* 0xE0 */ + 0x523B, 0x5238, 0x5237, 0x523A, 0x5230, 0x522E, 0x5236, 0x5241, /* 0xE0 */ + 0x52BE, 0x52BB, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, /* 0xF0 */ + 0x5378, 0x5379, 0x53D6, 0x53D4, 0x53D7, 0x5473, 0x5475 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_A9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5496, 0x5478, 0x5495, 0x5480, 0x547B, 0x5477, 0x5484, 0x5492, /* 0x40 */ + 0x5486, 0x547C, 0x5490, 0x5471, 0x5476, 0x548C, 0x549A, 0x5462, /* 0x40 */ + 0x5468, 0x548B, 0x547D, 0x548E, 0x56FA, 0x5783, 0x5777, 0x576A, /* 0x50 */ + 0x5769, 0x5761, 0x5766, 0x5764, 0x577C, 0x591C, 0x5949, 0x5947, /* 0x50 */ + 0x5948, 0x5944, 0x5954, 0x59BE, 0x59BB, 0x59D4, 0x59B9, 0x59AE, /* 0x60 */ + 0x59D1, 0x59C6, 0x59D0, 0x59CD, 0x59CB, 0x59D3, 0x59CA, 0x59AF, /* 0x60 */ + 0x59B3, 0x59D2, 0x59C5, 0x5B5F, 0x5B64, 0x5B63, 0x5B97, 0x5B9A, /* 0x70 */ + 0x5B98, 0x5B9C, 0x5B99, 0x5B9B, 0x5C1A, 0x5C48, 0x5C45, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5C46, 0x5CB7, 0x5CA1, 0x5CB8, 0x5CA9, 0x5CAB, 0x5CB1, /* 0xA0 */ + 0x5CB3, 0x5E18, 0x5E1A, 0x5E16, 0x5E15, 0x5E1B, 0x5E11, 0x5E78, /* 0xA0 */ + 0x5E9A, 0x5E97, 0x5E9C, 0x5E95, 0x5E96, 0x5EF6, 0x5F26, 0x5F27, /* 0xB0 */ + 0x5F29, 0x5F80, 0x5F81, 0x5F7F, 0x5F7C, 0x5FDD, 0x5FE0, 0x5FFD, /* 0xB0 */ + 0x5FF5, 0x5FFF, 0x600F, 0x6014, 0x602F, 0x6035, 0x6016, 0x602A, /* 0xC0 */ + 0x6015, 0x6021, 0x6027, 0x6029, 0x602B, 0x601B, 0x6216, 0x6215, /* 0xC0 */ + 0x623F, 0x623E, 0x6240, 0x627F, 0x62C9, 0x62CC, 0x62C4, 0x62BF, /* 0xD0 */ + 0x62C2, 0x62B9, 0x62D2, 0x62DB, 0x62AB, 0x62D3, 0x62D4, 0x62CB, /* 0xD0 */ + 0x62C8, 0x62A8, 0x62BD, 0x62BC, 0x62D0, 0x62D9, 0x62C7, 0x62CD, /* 0xE0 */ + 0x62B5, 0x62DA, 0x62B1, 0x62D8, 0x62D6, 0x62D7, 0x62C6, 0x62AC, /* 0xE0 */ + 0x62CE, 0x653E, 0x65A7, 0x65BC, 0x65FA, 0x6614, 0x6613, 0x660C, /* 0xF0 */ + 0x6606, 0x6602, 0x660E, 0x6600, 0x660F, 0x6615, 0x660A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_AA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6607, 0x670D, 0x670B, 0x676D, 0x678B, 0x6795, 0x6771, 0x679C, /* 0x40 */ + 0x6773, 0x6777, 0x6787, 0x679D, 0x6797, 0x676F, 0x6770, 0x677F, /* 0x40 */ + 0x6789, 0x677E, 0x6790, 0x6775, 0x679A, 0x6793, 0x677C, 0x676A, /* 0x50 */ + 0x6772, 0x6B23, 0x6B66, 0x6B67, 0x6B7F, 0x6C13, 0x6C1B, 0x6CE3, /* 0x50 */ + 0x6CE8, 0x6CF3, 0x6CB1, 0x6CCC, 0x6CE5, 0x6CB3, 0x6CBD, 0x6CBE, /* 0x60 */ + 0x6CBC, 0x6CE2, 0x6CAB, 0x6CD5, 0x6CD3, 0x6CB8, 0x6CC4, 0x6CB9, /* 0x60 */ + 0x6CC1, 0x6CAE, 0x6CD7, 0x6CC5, 0x6CF1, 0x6CBF, 0x6CBB, 0x6CE1, /* 0x70 */ + 0x6CDB, 0x6CCA, 0x6CAC, 0x6CEF, 0x6CDC, 0x6CD6, 0x6CE0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7095, 0x708E, 0x7092, 0x708A, 0x7099, 0x722C, 0x722D, /* 0xA0 */ + 0x7238, 0x7248, 0x7267, 0x7269, 0x72C0, 0x72CE, 0x72D9, 0x72D7, /* 0xA0 */ + 0x72D0, 0x73A9, 0x73A8, 0x739F, 0x73AB, 0x73A5, 0x753D, 0x759D, /* 0xB0 */ + 0x7599, 0x759A, 0x7684, 0x76C2, 0x76F2, 0x76F4, 0x77E5, 0x77FD, /* 0xB0 */ + 0x793E, 0x7940, 0x7941, 0x79C9, 0x79C8, 0x7A7A, 0x7A79, 0x7AFA, /* 0xC0 */ + 0x7CFE, 0x7F54, 0x7F8C, 0x7F8B, 0x8005, 0x80BA, 0x80A5, 0x80A2, /* 0xC0 */ + 0x80B1, 0x80A1, 0x80AB, 0x80A9, 0x80B4, 0x80AA, 0x80AF, 0x81E5, /* 0xD0 */ + 0x81FE, 0x820D, 0x82B3, 0x829D, 0x8299, 0x82AD, 0x82BD, 0x829F, /* 0xD0 */ + 0x82B9, 0x82B1, 0x82AC, 0x82A5, 0x82AF, 0x82B8, 0x82A3, 0x82B0, /* 0xE0 */ + 0x82BE, 0x82B7, 0x864E, 0x8671, 0x521D, 0x8868, 0x8ECB, 0x8FCE, /* 0xE0 */ + 0x8FD4, 0x8FD1, 0x90B5, 0x90B8, 0x90B1, 0x90B6, 0x91C7, 0x91D1, /* 0xF0 */ + 0x9577, 0x9580, 0x961C, 0x9640, 0x963F, 0x963B, 0x9644 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_AB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9642, 0x96B9, 0x96E8, 0x9752, 0x975E, 0x4E9F, 0x4EAD, 0x4EAE, /* 0x40 */ + 0x4FE1, 0x4FB5, 0x4FAF, 0x4FBF, 0x4FE0, 0x4FD1, 0x4FCF, 0x4FDD, /* 0x40 */ + 0x4FC3, 0x4FB6, 0x4FD8, 0x4FDF, 0x4FCA, 0x4FD7, 0x4FAE, 0x4FD0, /* 0x50 */ + 0x4FC4, 0x4FC2, 0x4FDA, 0x4FCE, 0x4FDE, 0x4FB7, 0x5157, 0x5192, /* 0x50 */ + 0x5191, 0x51A0, 0x524E, 0x5243, 0x524A, 0x524D, 0x524C, 0x524B, /* 0x60 */ + 0x5247, 0x52C7, 0x52C9, 0x52C3, 0x52C1, 0x530D, 0x5357, 0x537B, /* 0x60 */ + 0x539A, 0x53DB, 0x54AC, 0x54C0, 0x54A8, 0x54CE, 0x54C9, 0x54B8, /* 0x70 */ + 0x54A6, 0x54B3, 0x54C7, 0x54C2, 0x54BD, 0x54AA, 0x54C1, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x54C4, 0x54C8, 0x54AF, 0x54AB, 0x54B1, 0x54BB, 0x54A9, /* 0xA0 */ + 0x54A7, 0x54BF, 0x56FF, 0x5782, 0x578B, 0x57A0, 0x57A3, 0x57A2, /* 0xA0 */ + 0x57CE, 0x57AE, 0x5793, 0x5955, 0x5951, 0x594F, 0x594E, 0x5950, /* 0xB0 */ + 0x59DC, 0x59D8, 0x59FF, 0x59E3, 0x59E8, 0x5A03, 0x59E5, 0x59EA, /* 0xB0 */ + 0x59DA, 0x59E6, 0x5A01, 0x59FB, 0x5B69, 0x5BA3, 0x5BA6, 0x5BA4, /* 0xC0 */ + 0x5BA2, 0x5BA5, 0x5C01, 0x5C4E, 0x5C4F, 0x5C4D, 0x5C4B, 0x5CD9, /* 0xC0 */ + 0x5CD2, 0x5DF7, 0x5E1D, 0x5E25, 0x5E1F, 0x5E7D, 0x5EA0, 0x5EA6, /* 0xD0 */ + 0x5EFA, 0x5F08, 0x5F2D, 0x5F65, 0x5F88, 0x5F85, 0x5F8A, 0x5F8B, /* 0xD0 */ + 0x5F87, 0x5F8C, 0x5F89, 0x6012, 0x601D, 0x6020, 0x6025, 0x600E, /* 0xE0 */ + 0x6028, 0x604D, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606C, /* 0xE0 */ + 0x606B, 0x606A, 0x6064, 0x6241, 0x62DC, 0x6316, 0x6309, 0x62FC, /* 0xF0 */ + 0x62ED, 0x6301, 0x62EE, 0x62FD, 0x6307, 0x62F1, 0x62F7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_AC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x62EF, 0x62EC, 0x62FE, 0x62F4, 0x6311, 0x6302, 0x653F, 0x6545, /* 0x40 */ + 0x65AB, 0x65BD, 0x65E2, 0x6625, 0x662D, 0x6620, 0x6627, 0x662F, /* 0x40 */ + 0x661F, 0x6628, 0x6631, 0x6624, 0x66F7, 0x67FF, 0x67D3, 0x67F1, /* 0x50 */ + 0x67D4, 0x67D0, 0x67EC, 0x67B6, 0x67AF, 0x67F5, 0x67E9, 0x67EF, /* 0x50 */ + 0x67C4, 0x67D1, 0x67B4, 0x67DA, 0x67E5, 0x67B8, 0x67CF, 0x67DE, /* 0x60 */ + 0x67F3, 0x67B0, 0x67D9, 0x67E2, 0x67DD, 0x67D2, 0x6B6A, 0x6B83, /* 0x60 */ + 0x6B86, 0x6BB5, 0x6BD2, 0x6BD7, 0x6C1F, 0x6CC9, 0x6D0B, 0x6D32, /* 0x70 */ + 0x6D2A, 0x6D41, 0x6D25, 0x6D0C, 0x6D31, 0x6D1E, 0x6D17, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6D3B, 0x6D3D, 0x6D3E, 0x6D36, 0x6D1B, 0x6CF5, 0x6D39, /* 0xA0 */ + 0x6D27, 0x6D38, 0x6D29, 0x6D2E, 0x6D35, 0x6D0E, 0x6D2B, 0x70AB, /* 0xA0 */ + 0x70BA, 0x70B3, 0x70AC, 0x70AF, 0x70AD, 0x70B8, 0x70AE, 0x70A4, /* 0xB0 */ + 0x7230, 0x7272, 0x726F, 0x7274, 0x72E9, 0x72E0, 0x72E1, 0x73B7, /* 0xB0 */ + 0x73CA, 0x73BB, 0x73B2, 0x73CD, 0x73C0, 0x73B3, 0x751A, 0x752D, /* 0xC0 */ + 0x754F, 0x754C, 0x754E, 0x754B, 0x75AB, 0x75A4, 0x75A5, 0x75A2, /* 0xC0 */ + 0x75A3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76C8, 0x76C6, 0x76C3, /* 0xD0 */ + 0x76C5, 0x7701, 0x76F9, 0x76F8, 0x7709, 0x770B, 0x76FE, 0x76FC, /* 0xD0 */ + 0x7707, 0x77DC, 0x7802, 0x7814, 0x780C, 0x780D, 0x7946, 0x7949, /* 0xE0 */ + 0x7948, 0x7947, 0x79B9, 0x79BA, 0x79D1, 0x79D2, 0x79CB, 0x7A7F, /* 0xE0 */ + 0x7A81, 0x7AFF, 0x7AFD, 0x7C7D, 0x7D02, 0x7D05, 0x7D00, 0x7D09, /* 0xF0 */ + 0x7D07, 0x7D04, 0x7D06, 0x7F38, 0x7F8E, 0x7FBF, 0x8004 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_AD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8010, 0x800D, 0x8011, 0x8036, 0x80D6, 0x80E5, 0x80DA, 0x80C3, /* 0x40 */ + 0x80C4, 0x80CC, 0x80E1, 0x80DB, 0x80CE, 0x80DE, 0x80E4, 0x80DD, /* 0x40 */ + 0x81F4, 0x8222, 0x82E7, 0x8303, 0x8305, 0x82E3, 0x82DB, 0x82E6, /* 0x50 */ + 0x8304, 0x82E5, 0x8302, 0x8309, 0x82D2, 0x82D7, 0x82F1, 0x8301, /* 0x50 */ + 0x82DC, 0x82D4, 0x82D1, 0x82DE, 0x82D3, 0x82DF, 0x82EF, 0x8306, /* 0x60 */ + 0x8650, 0x8679, 0x867B, 0x867A, 0x884D, 0x886B, 0x8981, 0x89D4, /* 0x60 */ + 0x8A08, 0x8A02, 0x8A03, 0x8C9E, 0x8CA0, 0x8D74, 0x8D73, 0x8DB4, /* 0x70 */ + 0x8ECD, 0x8ECC, 0x8FF0, 0x8FE6, 0x8FE2, 0x8FEA, 0x8FE5, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8FED, 0x8FEB, 0x8FE4, 0x8FE8, 0x90CA, 0x90CE, 0x90C1, /* 0xA0 */ + 0x90C3, 0x914B, 0x914A, 0x91CD, 0x9582, 0x9650, 0x964B, 0x964C, /* 0xA0 */ + 0x964D, 0x9762, 0x9769, 0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8, /* 0xB0 */ + 0x98DB, 0x98DF, 0x9996, 0x9999, 0x4E58, 0x4EB3, 0x500C, 0x500D, /* 0xB0 */ + 0x5023, 0x4FEF, 0x5026, 0x5025, 0x4FF8, 0x5029, 0x5016, 0x5006, /* 0xC0 */ + 0x503C, 0x501F, 0x501A, 0x5012, 0x5011, 0x4FFA, 0x5000, 0x5014, /* 0xC0 */ + 0x5028, 0x4FF1, 0x5021, 0x500B, 0x5019, 0x5018, 0x4FF3, 0x4FEE, /* 0xD0 */ + 0x502D, 0x502A, 0x4FFE, 0x502B, 0x5009, 0x517C, 0x51A4, 0x51A5, /* 0xD0 */ + 0x51A2, 0x51CD, 0x51CC, 0x51C6, 0x51CB, 0x5256, 0x525C, 0x5254, /* 0xE0 */ + 0x525B, 0x525D, 0x532A, 0x537F, 0x539F, 0x539D, 0x53DF, 0x54E8, /* 0xE0 */ + 0x5510, 0x5501, 0x5537, 0x54FC, 0x54E5, 0x54F2, 0x5506, 0x54FA, /* 0xF0 */ + 0x5514, 0x54E9, 0x54ED, 0x54E1, 0x5509, 0x54EE, 0x54EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_AE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54E6, 0x5527, 0x5507, 0x54FD, 0x550F, 0x5703, 0x5704, 0x57C2, /* 0x40 */ + 0x57D4, 0x57CB, 0x57C3, 0x5809, 0x590F, 0x5957, 0x5958, 0x595A, /* 0x40 */ + 0x5A11, 0x5A18, 0x5A1C, 0x5A1F, 0x5A1B, 0x5A13, 0x59EC, 0x5A20, /* 0x50 */ + 0x5A23, 0x5A29, 0x5A25, 0x5A0C, 0x5A09, 0x5B6B, 0x5C58, 0x5BB0, /* 0x50 */ + 0x5BB3, 0x5BB6, 0x5BB4, 0x5BAE, 0x5BB5, 0x5BB9, 0x5BB8, 0x5C04, /* 0x60 */ + 0x5C51, 0x5C55, 0x5C50, 0x5CED, 0x5CFD, 0x5CFB, 0x5CEA, 0x5CE8, /* 0x60 */ + 0x5CF0, 0x5CF6, 0x5D01, 0x5CF4, 0x5DEE, 0x5E2D, 0x5E2B, 0x5EAB, /* 0x70 */ + 0x5EAD, 0x5EA7, 0x5F31, 0x5F92, 0x5F91, 0x5F90, 0x6059, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6063, 0x6065, 0x6050, 0x6055, 0x606D, 0x6069, 0x606F, /* 0xA0 */ + 0x6084, 0x609F, 0x609A, 0x608D, 0x6094, 0x608C, 0x6085, 0x6096, /* 0xA0 */ + 0x6247, 0x62F3, 0x6308, 0x62FF, 0x634E, 0x633E, 0x632F, 0x6355, /* 0xB0 */ + 0x6342, 0x6346, 0x634F, 0x6349, 0x633A, 0x6350, 0x633D, 0x632A, /* 0xB0 */ + 0x632B, 0x6328, 0x634D, 0x634C, 0x6548, 0x6549, 0x6599, 0x65C1, /* 0xC0 */ + 0x65C5, 0x6642, 0x6649, 0x664F, 0x6643, 0x6652, 0x664C, 0x6645, /* 0xC0 */ + 0x6641, 0x66F8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, /* 0xD0 */ + 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68B3, 0x6817, /* 0xD0 */ + 0x684C, 0x6851, 0x683D, 0x67F4, 0x6850, 0x6840, 0x683C, 0x6843, /* 0xE0 */ + 0x682A, 0x6845, 0x6813, 0x6818, 0x6841, 0x6B8A, 0x6B89, 0x6BB7, /* 0xE0 */ + 0x6C23, 0x6C27, 0x6C28, 0x6C26, 0x6C24, 0x6CF0, 0x6D6A, 0x6D95, /* 0xF0 */ + 0x6D88, 0x6D87, 0x6D66, 0x6D78, 0x6D77, 0x6D59, 0x6D93 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_AF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6D6C, 0x6D89, 0x6D6E, 0x6D5A, 0x6D74, 0x6D69, 0x6D8C, 0x6D8A, /* 0x40 */ + 0x6D79, 0x6D85, 0x6D65, 0x6D94, 0x70CA, 0x70D8, 0x70E4, 0x70D9, /* 0x40 */ + 0x70C8, 0x70CF, 0x7239, 0x7279, 0x72FC, 0x72F9, 0x72FD, 0x72F8, /* 0x50 */ + 0x72F7, 0x7386, 0x73ED, 0x7409, 0x73EE, 0x73E0, 0x73EA, 0x73DE, /* 0x50 */ + 0x7554, 0x755D, 0x755C, 0x755A, 0x7559, 0x75BE, 0x75C5, 0x75C7, /* 0x60 */ + 0x75B2, 0x75B3, 0x75BD, 0x75BC, 0x75B9, 0x75C2, 0x75B8, 0x768B, /* 0x60 */ + 0x76B0, 0x76CA, 0x76CD, 0x76CE, 0x7729, 0x771F, 0x7720, 0x7728, /* 0x70 */ + 0x77E9, 0x7830, 0x7827, 0x7838, 0x781D, 0x7834, 0x7837, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7825, 0x782D, 0x7820, 0x781F, 0x7832, 0x7955, 0x7950, /* 0xA0 */ + 0x7960, 0x795F, 0x7956, 0x795E, 0x795D, 0x7957, 0x795A, 0x79E4, /* 0xA0 */ + 0x79E3, 0x79E7, 0x79DF, 0x79E6, 0x79E9, 0x79D8, 0x7A84, 0x7A88, /* 0xB0 */ + 0x7AD9, 0x7B06, 0x7B11, 0x7C89, 0x7D21, 0x7D17, 0x7D0B, 0x7D0A, /* 0xB0 */ + 0x7D20, 0x7D22, 0x7D14, 0x7D10, 0x7D15, 0x7D1A, 0x7D1C, 0x7D0D, /* 0xC0 */ + 0x7D19, 0x7D1B, 0x7F3A, 0x7F5F, 0x7F94, 0x7FC5, 0x7FC1, 0x8006, /* 0xC0 */ + 0x8018, 0x8015, 0x8019, 0x8017, 0x803D, 0x803F, 0x80F1, 0x8102, /* 0xD0 */ + 0x80F0, 0x8105, 0x80ED, 0x80F4, 0x8106, 0x80F8, 0x80F3, 0x8108, /* 0xD0 */ + 0x80FD, 0x810A, 0x80FC, 0x80EF, 0x81ED, 0x81EC, 0x8200, 0x8210, /* 0xE0 */ + 0x822A, 0x822B, 0x8228, 0x822C, 0x82BB, 0x832B, 0x8352, 0x8354, /* 0xE0 */ + 0x834A, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834F, 0x8332, /* 0xF0 */ + 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8654, 0x868A, 0x86AA, 0x8693, 0x86A4, 0x86A9, 0x868C, 0x86A3, /* 0x40 */ + 0x869C, 0x8870, 0x8877, 0x8881, 0x8882, 0x887D, 0x8879, 0x8A18, /* 0x40 */ + 0x8A10, 0x8A0E, 0x8A0C, 0x8A15, 0x8A0A, 0x8A17, 0x8A13, 0x8A16, /* 0x50 */ + 0x8A0F, 0x8A11, 0x8C48, 0x8C7A, 0x8C79, 0x8CA1, 0x8CA2, 0x8D77, /* 0x50 */ + 0x8EAC, 0x8ED2, 0x8ED4, 0x8ECF, 0x8FB1, 0x9001, 0x9006, 0x8FF7, /* 0x60 */ + 0x9000, 0x8FFA, 0x8FF4, 0x9003, 0x8FFD, 0x9005, 0x8FF8, 0x9095, /* 0x60 */ + 0x90E1, 0x90DD, 0x90E2, 0x9152, 0x914D, 0x914C, 0x91D8, 0x91DD, /* 0x70 */ + 0x91D7, 0x91DC, 0x91D9, 0x9583, 0x9662, 0x9663, 0x9661, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x965B, 0x965D, 0x9664, 0x9658, 0x965E, 0x96BB, 0x98E2, /* 0xA0 */ + 0x99AC, 0x9AA8, 0x9AD8, 0x9B25, 0x9B32, 0x9B3C, 0x4E7E, 0x507A, /* 0xA0 */ + 0x507D, 0x505C, 0x5047, 0x5043, 0x504C, 0x505A, 0x5049, 0x5065, /* 0xB0 */ + 0x5076, 0x504E, 0x5055, 0x5075, 0x5074, 0x5077, 0x504F, 0x500F, /* 0xB0 */ + 0x506F, 0x506D, 0x515C, 0x5195, 0x51F0, 0x526A, 0x526F, 0x52D2, /* 0xC0 */ + 0x52D9, 0x52D8, 0x52D5, 0x5310, 0x530F, 0x5319, 0x533F, 0x5340, /* 0xC0 */ + 0x533E, 0x53C3, 0x66FC, 0x5546, 0x556A, 0x5566, 0x5544, 0x555E, /* 0xD0 */ + 0x5561, 0x5543, 0x554A, 0x5531, 0x5556, 0x554F, 0x5555, 0x552F, /* 0xD0 */ + 0x5564, 0x5538, 0x552E, 0x555C, 0x552C, 0x5563, 0x5533, 0x5541, /* 0xE0 */ + 0x5557, 0x5708, 0x570B, 0x5709, 0x57DF, 0x5805, 0x580A, 0x5806, /* 0xE0 */ + 0x57E0, 0x57E4, 0x57FA, 0x5802, 0x5835, 0x57F7, 0x57F9, 0x5920, /* 0xF0 */ + 0x5962, 0x5A36, 0x5A41, 0x5A49, 0x5A66, 0x5A6A, 0x5A40 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5A3C, 0x5A62, 0x5A5A, 0x5A46, 0x5A4A, 0x5B70, 0x5BC7, 0x5BC5, /* 0x40 */ + 0x5BC4, 0x5BC2, 0x5BBF, 0x5BC6, 0x5C09, 0x5C08, 0x5C07, 0x5C60, /* 0x40 */ + 0x5C5C, 0x5C5D, 0x5D07, 0x5D06, 0x5D0E, 0x5D1B, 0x5D16, 0x5D22, /* 0x50 */ + 0x5D11, 0x5D29, 0x5D14, 0x5D19, 0x5D24, 0x5D27, 0x5D17, 0x5DE2, /* 0x50 */ + 0x5E38, 0x5E36, 0x5E33, 0x5E37, 0x5EB7, 0x5EB8, 0x5EB6, 0x5EB5, /* 0x60 */ + 0x5EBE, 0x5F35, 0x5F37, 0x5F57, 0x5F6C, 0x5F69, 0x5F6B, 0x5F97, /* 0x60 */ + 0x5F99, 0x5F9E, 0x5F98, 0x5FA1, 0x5FA0, 0x5F9C, 0x607F, 0x60A3, /* 0x70 */ + 0x6089, 0x60A0, 0x60A8, 0x60CB, 0x60B4, 0x60E6, 0x60BD, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x60C5, 0x60BB, 0x60B5, 0x60DC, 0x60BC, 0x60D8, 0x60D5, /* 0xA0 */ + 0x60C6, 0x60DF, 0x60B8, 0x60DA, 0x60C7, 0x621A, 0x621B, 0x6248, /* 0xA0 */ + 0x63A0, 0x63A7, 0x6372, 0x6396, 0x63A2, 0x63A5, 0x6377, 0x6367, /* 0xB0 */ + 0x6398, 0x63AA, 0x6371, 0x63A9, 0x6389, 0x6383, 0x639B, 0x636B, /* 0xB0 */ + 0x63A8, 0x6384, 0x6388, 0x6399, 0x63A1, 0x63AC, 0x6392, 0x638F, /* 0xC0 */ + 0x6380, 0x637B, 0x6369, 0x6368, 0x637A, 0x655D, 0x6556, 0x6551, /* 0xC0 */ + 0x6559, 0x6557, 0x555F, 0x654F, 0x6558, 0x6555, 0x6554, 0x659C, /* 0xD0 */ + 0x659B, 0x65AC, 0x65CF, 0x65CB, 0x65CC, 0x65CE, 0x665D, 0x665A, /* 0xD0 */ + 0x6664, 0x6668, 0x6666, 0x665E, 0x66F9, 0x52D7, 0x671B, 0x6881, /* 0xE0 */ + 0x68AF, 0x68A2, 0x6893, 0x68B5, 0x687F, 0x6876, 0x68B1, 0x68A7, /* 0xE0 */ + 0x6897, 0x68B0, 0x6883, 0x68C4, 0x68AD, 0x6886, 0x6885, 0x6894, /* 0xF0 */ + 0x689D, 0x68A8, 0x689F, 0x68A1, 0x6882, 0x6B32, 0x6BBA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6BEB, 0x6BEC, 0x6C2B, 0x6D8E, 0x6DBC, 0x6DF3, 0x6DD9, 0x6DB2, /* 0x40 */ + 0x6DE1, 0x6DCC, 0x6DE4, 0x6DFB, 0x6DFA, 0x6E05, 0x6DC7, 0x6DCB, /* 0x40 */ + 0x6DAF, 0x6DD1, 0x6DAE, 0x6DDE, 0x6DF9, 0x6DB8, 0x6DF7, 0x6DF5, /* 0x50 */ + 0x6DC5, 0x6DD2, 0x6E1A, 0x6DB5, 0x6DDA, 0x6DEB, 0x6DD8, 0x6DEA, /* 0x50 */ + 0x6DF1, 0x6DEE, 0x6DE8, 0x6DC6, 0x6DC4, 0x6DAA, 0x6DEC, 0x6DBF, /* 0x60 */ + 0x6DE6, 0x70F9, 0x7109, 0x710A, 0x70FD, 0x70EF, 0x723D, 0x727D, /* 0x60 */ + 0x7281, 0x731C, 0x731B, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, /* 0x70 */ + 0x740A, 0x7403, 0x7406, 0x73FE, 0x740D, 0x74E0, 0x74F6, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x74F7, 0x751C, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, /* 0xA0 */ + 0x758F, 0x75D4, 0x75D5, 0x75B5, 0x75CA, 0x75CD, 0x768E, 0x76D4, /* 0xA0 */ + 0x76D2, 0x76DB, 0x7737, 0x773E, 0x773C, 0x7736, 0x7738, 0x773A, /* 0xB0 */ + 0x786B, 0x7843, 0x784E, 0x7965, 0x7968, 0x796D, 0x79FB, 0x7A92, /* 0xB0 */ + 0x7A95, 0x7B20, 0x7B28, 0x7B1B, 0x7B2C, 0x7B26, 0x7B19, 0x7B1E, /* 0xC0 */ + 0x7B2E, 0x7C92, 0x7C97, 0x7C95, 0x7D46, 0x7D43, 0x7D71, 0x7D2E, /* 0xC0 */ + 0x7D39, 0x7D3C, 0x7D40, 0x7D30, 0x7D33, 0x7D44, 0x7D2F, 0x7D42, /* 0xD0 */ + 0x7D32, 0x7D31, 0x7F3D, 0x7F9E, 0x7F9A, 0x7FCC, 0x7FCE, 0x7FD2, /* 0xD0 */ + 0x801C, 0x804A, 0x8046, 0x812F, 0x8116, 0x8123, 0x812B, 0x8129, /* 0xE0 */ + 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838E, /* 0xE0 */ + 0x839E, 0x8398, 0x8378, 0x83A2, 0x8396, 0x83BD, 0x83AB, 0x8392, /* 0xF0 */ + 0x838A, 0x8393, 0x8389, 0x83A0, 0x8377, 0x837B, 0x837C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8386, 0x83A7, 0x8655, 0x5F6A, 0x86C7, 0x86C0, 0x86B6, 0x86C4, /* 0x40 */ + 0x86B5, 0x86C6, 0x86CB, 0x86B1, 0x86AF, 0x86C9, 0x8853, 0x889E, /* 0x40 */ + 0x8888, 0x88AB, 0x8892, 0x8896, 0x888D, 0x888B, 0x8993, 0x898F, /* 0x50 */ + 0x8A2A, 0x8A1D, 0x8A23, 0x8A25, 0x8A31, 0x8A2D, 0x8A1F, 0x8A1B, /* 0x50 */ + 0x8A22, 0x8C49, 0x8C5A, 0x8CA9, 0x8CAC, 0x8CAB, 0x8CA8, 0x8CAA, /* 0x60 */ + 0x8CA7, 0x8D67, 0x8D66, 0x8DBE, 0x8DBA, 0x8EDB, 0x8EDF, 0x9019, /* 0x60 */ + 0x900D, 0x901A, 0x9017, 0x9023, 0x901F, 0x901D, 0x9010, 0x9015, /* 0x70 */ + 0x901E, 0x9020, 0x900F, 0x9022, 0x9016, 0x901B, 0x9014, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x90E8, 0x90ED, 0x90FD, 0x9157, 0x91CE, 0x91F5, 0x91E6, /* 0xA0 */ + 0x91E3, 0x91E7, 0x91ED, 0x91E9, 0x9589, 0x966A, 0x9675, 0x9673, /* 0xA0 */ + 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966C, 0x96C0, 0x96EA, /* 0xB0 */ + 0x96E9, 0x7AE0, 0x7ADF, 0x9802, 0x9803, 0x9B5A, 0x9CE5, 0x9E75, /* 0xB0 */ + 0x9E7F, 0x9EA5, 0x9EBB, 0x50A2, 0x508D, 0x5085, 0x5099, 0x5091, /* 0xC0 */ + 0x5080, 0x5096, 0x5098, 0x509A, 0x6700, 0x51F1, 0x5272, 0x5274, /* 0xC0 */ + 0x5275, 0x5269, 0x52DE, 0x52DD, 0x52DB, 0x535A, 0x53A5, 0x557B, /* 0xD0 */ + 0x5580, 0x55A7, 0x557C, 0x558A, 0x559D, 0x5598, 0x5582, 0x559C, /* 0xD0 */ + 0x55AA, 0x5594, 0x5587, 0x558B, 0x5583, 0x55B3, 0x55AE, 0x559F, /* 0xE0 */ + 0x553E, 0x55B2, 0x559A, 0x55BB, 0x55AC, 0x55B1, 0x557E, 0x5589, /* 0xE0 */ + 0x55AB, 0x5599, 0x570D, 0x582F, 0x582A, 0x5834, 0x5824, 0x5830, /* 0xF0 */ + 0x5831, 0x5821, 0x581D, 0x5820, 0x58F9, 0x58FA, 0x5960 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5A77, 0x5A9A, 0x5A7F, 0x5A92, 0x5A9B, 0x5AA7, 0x5B73, 0x5B71, /* 0x40 */ + 0x5BD2, 0x5BCC, 0x5BD3, 0x5BD0, 0x5C0A, 0x5C0B, 0x5C31, 0x5D4C, /* 0x40 */ + 0x5D50, 0x5D34, 0x5D47, 0x5DFD, 0x5E45, 0x5E3D, 0x5E40, 0x5E43, /* 0x50 */ + 0x5E7E, 0x5ECA, 0x5EC1, 0x5EC2, 0x5EC4, 0x5F3C, 0x5F6D, 0x5FA9, /* 0x50 */ + 0x5FAA, 0x5FA8, 0x60D1, 0x60E1, 0x60B2, 0x60B6, 0x60E0, 0x611C, /* 0x60 */ + 0x6123, 0x60FA, 0x6115, 0x60F0, 0x60FB, 0x60F4, 0x6168, 0x60F1, /* 0x60 */ + 0x610E, 0x60F6, 0x6109, 0x6100, 0x6112, 0x621F, 0x6249, 0x63A3, /* 0x70 */ + 0x638C, 0x63CF, 0x63C0, 0x63E9, 0x63C9, 0x63C6, 0x63CD, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x63D2, 0x63E3, 0x63D0, 0x63E1, 0x63D6, 0x63ED, 0x63EE, /* 0xA0 */ + 0x6376, 0x63F4, 0x63EA, 0x63DB, 0x6452, 0x63DA, 0x63F9, 0x655E, /* 0xA0 */ + 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65AF, 0x666E, 0x6670, /* 0xB0 */ + 0x6674, 0x6676, 0x666F, 0x6691, 0x667A, 0x667E, 0x6677, 0x66FE, /* 0xB0 */ + 0x66FF, 0x671F, 0x671D, 0x68FA, 0x68D5, 0x68E0, 0x68D8, 0x68D7, /* 0xC0 */ + 0x6905, 0x68DF, 0x68F5, 0x68EE, 0x68E7, 0x68F9, 0x68D2, 0x68F2, /* 0xC0 */ + 0x68E3, 0x68CB, 0x68CD, 0x690D, 0x6912, 0x690E, 0x68C9, 0x68DA, /* 0xD0 */ + 0x696E, 0x68FB, 0x6B3E, 0x6B3A, 0x6B3D, 0x6B98, 0x6B96, 0x6BBC, /* 0xD0 */ + 0x6BEF, 0x6C2E, 0x6C2F, 0x6C2C, 0x6E2F, 0x6E38, 0x6E54, 0x6E21, /* 0xE0 */ + 0x6E32, 0x6E67, 0x6E4A, 0x6E20, 0x6E25, 0x6E23, 0x6E1B, 0x6E5B, /* 0xE0 */ + 0x6E58, 0x6E24, 0x6E56, 0x6E6E, 0x6E2D, 0x6E26, 0x6E6F, 0x6E34, /* 0xF0 */ + 0x6E4D, 0x6E3A, 0x6E2C, 0x6E43, 0x6E1D, 0x6E3E, 0x6ECB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6E89, 0x6E19, 0x6E4E, 0x6E63, 0x6E44, 0x6E72, 0x6E69, 0x6E5F, /* 0x40 */ + 0x7119, 0x711A, 0x7126, 0x7130, 0x7121, 0x7136, 0x716E, 0x711C, /* 0x40 */ + 0x724C, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743A, /* 0x50 */ + 0x742A, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742F, /* 0x50 */ + 0x741B, 0x7426, 0x7428, 0x7525, 0x7526, 0x756B, 0x756A, 0x75E2, /* 0x60 */ + 0x75DB, 0x75E3, 0x75D9, 0x75D8, 0x75DE, 0x75E0, 0x767B, 0x767C, /* 0x60 */ + 0x7696, 0x7693, 0x76B4, 0x76DC, 0x774F, 0x77ED, 0x785D, 0x786C, /* 0x70 */ + 0x786F, 0x7A0D, 0x7A08, 0x7A0B, 0x7A05, 0x7A00, 0x7A98, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7A97, 0x7A96, 0x7AE5, 0x7AE3, 0x7B49, 0x7B56, 0x7B46, /* 0xA0 */ + 0x7B50, 0x7B52, 0x7B54, 0x7B4D, 0x7B4B, 0x7B4F, 0x7B51, 0x7C9F, /* 0xA0 */ + 0x7CA5, 0x7D5E, 0x7D50, 0x7D68, 0x7D55, 0x7D2B, 0x7D6E, 0x7D72, /* 0xB0 */ + 0x7D61, 0x7D66, 0x7D62, 0x7D70, 0x7D73, 0x5584, 0x7FD4, 0x7FD5, /* 0xB0 */ + 0x800B, 0x8052, 0x8085, 0x8155, 0x8154, 0x814B, 0x8151, 0x814E, /* 0xC0 */ + 0x8139, 0x8146, 0x813E, 0x814C, 0x8153, 0x8174, 0x8212, 0x821C, /* 0xC0 */ + 0x83E9, 0x8403, 0x83F8, 0x840D, 0x83E0, 0x83C5, 0x840B, 0x83C1, /* 0xD0 */ + 0x83EF, 0x83F1, 0x83F4, 0x8457, 0x840A, 0x83F0, 0x840C, 0x83CC, /* 0xD0 */ + 0x83FD, 0x83F2, 0x83CA, 0x8438, 0x840E, 0x8404, 0x83DC, 0x8407, /* 0xE0 */ + 0x83D4, 0x83DF, 0x865B, 0x86DF, 0x86D9, 0x86ED, 0x86D4, 0x86DB, /* 0xE0 */ + 0x86E4, 0x86D0, 0x86DE, 0x8857, 0x88C1, 0x88C2, 0x88B1, 0x8983, /* 0xF0 */ + 0x8996, 0x8A3B, 0x8A60, 0x8A55, 0x8A5E, 0x8A3C, 0x8A41 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8A54, 0x8A5B, 0x8A50, 0x8A46, 0x8A34, 0x8A3A, 0x8A36, 0x8A56, /* 0x40 */ + 0x8C61, 0x8C82, 0x8CAF, 0x8CBC, 0x8CB3, 0x8CBD, 0x8CC1, 0x8CBB, /* 0x40 */ + 0x8CC0, 0x8CB4, 0x8CB7, 0x8CB6, 0x8CBF, 0x8CB8, 0x8D8A, 0x8D85, /* 0x50 */ + 0x8D81, 0x8DCE, 0x8DDD, 0x8DCB, 0x8DDA, 0x8DD1, 0x8DCC, 0x8DDB, /* 0x50 */ + 0x8DC6, 0x8EFB, 0x8EF8, 0x8EFC, 0x8F9C, 0x902E, 0x9035, 0x9031, /* 0x60 */ + 0x9038, 0x9032, 0x9036, 0x9102, 0x90F5, 0x9109, 0x90FE, 0x9163, /* 0x60 */ + 0x9165, 0x91CF, 0x9214, 0x9215, 0x9223, 0x9209, 0x921E, 0x920D, /* 0x70 */ + 0x9210, 0x9207, 0x9211, 0x9594, 0x958F, 0x958B, 0x9591, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9593, 0x9592, 0x958E, 0x968A, 0x968E, 0x968B, 0x967D, /* 0xA0 */ + 0x9685, 0x9686, 0x968D, 0x9672, 0x9684, 0x96C1, 0x96C5, 0x96C4, /* 0xA0 */ + 0x96C6, 0x96C7, 0x96EF, 0x96F2, 0x97CC, 0x9805, 0x9806, 0x9808, /* 0xB0 */ + 0x98E7, 0x98EA, 0x98EF, 0x98E9, 0x98F2, 0x98ED, 0x99AE, 0x99AD, /* 0xB0 */ + 0x9EC3, 0x9ECD, 0x9ED1, 0x4E82, 0x50AD, 0x50B5, 0x50B2, 0x50B3, /* 0xC0 */ + 0x50C5, 0x50BE, 0x50AC, 0x50B7, 0x50BB, 0x50AF, 0x50C7, 0x527F, /* 0xC0 */ + 0x5277, 0x527D, 0x52DF, 0x52E6, 0x52E4, 0x52E2, 0x52E3, 0x532F, /* 0xD0 */ + 0x55DF, 0x55E8, 0x55D3, 0x55E6, 0x55CE, 0x55DC, 0x55C7, 0x55D1, /* 0xD0 */ + 0x55E3, 0x55E4, 0x55EF, 0x55DA, 0x55E1, 0x55C5, 0x55C6, 0x55E5, /* 0xE0 */ + 0x55C9, 0x5712, 0x5713, 0x585E, 0x5851, 0x5858, 0x5857, 0x585A, /* 0xE0 */ + 0x5854, 0x586B, 0x584C, 0x586D, 0x584A, 0x5862, 0x5852, 0x584B, /* 0xF0 */ + 0x5967, 0x5AC1, 0x5AC9, 0x5ACC, 0x5ABE, 0x5ABD, 0x5ABC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5AB3, 0x5AC2, 0x5AB2, 0x5D69, 0x5D6F, 0x5E4C, 0x5E79, 0x5EC9, /* 0x40 */ + 0x5EC8, 0x5F12, 0x5F59, 0x5FAC, 0x5FAE, 0x611A, 0x610F, 0x6148, /* 0x40 */ + 0x611F, 0x60F3, 0x611B, 0x60F9, 0x6101, 0x6108, 0x614E, 0x614C, /* 0x50 */ + 0x6144, 0x614D, 0x613E, 0x6134, 0x6127, 0x610D, 0x6106, 0x6137, /* 0x50 */ + 0x6221, 0x6222, 0x6413, 0x643E, 0x641E, 0x642A, 0x642D, 0x643D, /* 0x60 */ + 0x642C, 0x640F, 0x641C, 0x6414, 0x640D, 0x6436, 0x6416, 0x6417, /* 0x60 */ + 0x6406, 0x656C, 0x659F, 0x65B0, 0x6697, 0x6689, 0x6687, 0x6688, /* 0x70 */ + 0x6696, 0x6684, 0x6698, 0x668D, 0x6703, 0x6994, 0x696D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x695A, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, /* 0xA0 */ + 0x694A, 0x6968, 0x696B, 0x695E, 0x6953, 0x6979, 0x6986, 0x695D, /* 0xA0 */ + 0x6963, 0x695B, 0x6B47, 0x6B72, 0x6BC0, 0x6BBF, 0x6BD3, 0x6BFD, /* 0xB0 */ + 0x6EA2, 0x6EAF, 0x6ED3, 0x6EB6, 0x6EC2, 0x6E90, 0x6E9D, 0x6EC7, /* 0xB0 */ + 0x6EC5, 0x6EA5, 0x6E98, 0x6EBC, 0x6EBA, 0x6EAB, 0x6ED1, 0x6E96, /* 0xC0 */ + 0x6E9C, 0x6EC4, 0x6ED4, 0x6EAA, 0x6EA7, 0x6EB4, 0x714E, 0x7159, /* 0xC0 */ + 0x7169, 0x7164, 0x7149, 0x7167, 0x715C, 0x716C, 0x7166, 0x714C, /* 0xD0 */ + 0x7165, 0x715E, 0x7146, 0x7168, 0x7156, 0x723A, 0x7252, 0x7337, /* 0xD0 */ + 0x7345, 0x733F, 0x733E, 0x746F, 0x745A, 0x7455, 0x745F, 0x745E, /* 0xE0 */ + 0x7441, 0x743F, 0x7459, 0x745B, 0x745C, 0x7576, 0x7578, 0x7600, /* 0xE0 */ + 0x75F0, 0x7601, 0x75F2, 0x75F1, 0x75FA, 0x75FF, 0x75F4, 0x75F3, /* 0xF0 */ + 0x76DE, 0x76DF, 0x775B, 0x776B, 0x7766, 0x775E, 0x7763 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7779, 0x776A, 0x776C, 0x775C, 0x7765, 0x7768, 0x7762, 0x77EE, /* 0x40 */ + 0x788E, 0x78B0, 0x7897, 0x7898, 0x788C, 0x7889, 0x787C, 0x7891, /* 0x40 */ + 0x7893, 0x787F, 0x797A, 0x797F, 0x7981, 0x842C, 0x79BD, 0x7A1C, /* 0x50 */ + 0x7A1A, 0x7A20, 0x7A14, 0x7A1F, 0x7A1E, 0x7A9F, 0x7AA0, 0x7B77, /* 0x50 */ + 0x7BC0, 0x7B60, 0x7B6E, 0x7B67, 0x7CB1, 0x7CB3, 0x7CB5, 0x7D93, /* 0x60 */ + 0x7D79, 0x7D91, 0x7D81, 0x7D8F, 0x7D5B, 0x7F6E, 0x7F69, 0x7F6A, /* 0x60 */ + 0x7F72, 0x7FA9, 0x7FA8, 0x7FA4, 0x8056, 0x8058, 0x8086, 0x8084, /* 0x70 */ + 0x8171, 0x8170, 0x8178, 0x8165, 0x816E, 0x8173, 0x816B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8179, 0x817A, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, /* 0xA0 */ + 0x843D, 0x8431, 0x8475, 0x8466, 0x846B, 0x8449, 0x846C, 0x845B, /* 0xA0 */ + 0x843C, 0x8435, 0x8461, 0x8463, 0x8469, 0x846D, 0x8446, 0x865E, /* 0xB0 */ + 0x865C, 0x865F, 0x86F9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86FE, /* 0xB0 */ + 0x86FB, 0x8702, 0x8703, 0x8706, 0x870A, 0x8859, 0x88DF, 0x88D4, /* 0xC0 */ + 0x88D9, 0x88DC, 0x88D8, 0x88DD, 0x88E1, 0x88CA, 0x88D5, 0x88D2, /* 0xC0 */ + 0x899C, 0x89E3, 0x8A6B, 0x8A72, 0x8A73, 0x8A66, 0x8A69, 0x8A70, /* 0xD0 */ + 0x8A87, 0x8A7C, 0x8A63, 0x8AA0, 0x8A71, 0x8A85, 0x8A6D, 0x8A62, /* 0xD0 */ + 0x8A6E, 0x8A6C, 0x8A79, 0x8A7B, 0x8A3E, 0x8A68, 0x8C62, 0x8C8A, /* 0xE0 */ + 0x8C89, 0x8CCA, 0x8CC7, 0x8CC8, 0x8CC4, 0x8CB2, 0x8CC3, 0x8CC2, /* 0xE0 */ + 0x8CC5, 0x8DE1, 0x8DDF, 0x8DE8, 0x8DEF, 0x8DF3, 0x8DFA, 0x8DEA, /* 0xF0 */ + 0x8DE4, 0x8DE6, 0x8EB2, 0x8F03, 0x8F09, 0x8EFE, 0x8F0A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_B9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8F9F, 0x8FB2, 0x904B, 0x904A, 0x9053, 0x9042, 0x9054, 0x903C, /* 0x40 */ + 0x9055, 0x9050, 0x9047, 0x904F, 0x904E, 0x904D, 0x9051, 0x903E, /* 0x40 */ + 0x9041, 0x9112, 0x9117, 0x916C, 0x916A, 0x9169, 0x91C9, 0x9237, /* 0x50 */ + 0x9257, 0x9238, 0x923D, 0x9240, 0x923E, 0x925B, 0x924B, 0x9264, /* 0x50 */ + 0x9251, 0x9234, 0x9249, 0x924D, 0x9245, 0x9239, 0x923F, 0x925A, /* 0x60 */ + 0x9598, 0x9698, 0x9694, 0x9695, 0x96CD, 0x96CB, 0x96C9, 0x96CA, /* 0x60 */ + 0x96F7, 0x96FB, 0x96F9, 0x96F6, 0x9756, 0x9774, 0x9776, 0x9810, /* 0x70 */ + 0x9811, 0x9813, 0x980A, 0x9812, 0x980C, 0x98FC, 0x98F4, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x98FD, 0x98FE, 0x99B3, 0x99B1, 0x99B4, 0x9AE1, 0x9CE9, /* 0xA0 */ + 0x9E82, 0x9F0E, 0x9F13, 0x9F20, 0x50E7, 0x50EE, 0x50E5, 0x50D6, /* 0xA0 */ + 0x50ED, 0x50DA, 0x50D5, 0x50CF, 0x50D1, 0x50F1, 0x50CE, 0x50E9, /* 0xB0 */ + 0x5162, 0x51F3, 0x5283, 0x5282, 0x5331, 0x53AD, 0x55FE, 0x5600, /* 0xB0 */ + 0x561B, 0x5617, 0x55FD, 0x5614, 0x5606, 0x5609, 0x560D, 0x560E, /* 0xC0 */ + 0x55F7, 0x5616, 0x561F, 0x5608, 0x5610, 0x55F6, 0x5718, 0x5716, /* 0xC0 */ + 0x5875, 0x587E, 0x5883, 0x5893, 0x588A, 0x5879, 0x5885, 0x587D, /* 0xD0 */ + 0x58FD, 0x5925, 0x5922, 0x5924, 0x596A, 0x5969, 0x5AE1, 0x5AE6, /* 0xD0 */ + 0x5AE9, 0x5AD7, 0x5AD6, 0x5AD8, 0x5AE3, 0x5B75, 0x5BDE, 0x5BE7, /* 0xE0 */ + 0x5BE1, 0x5BE5, 0x5BE6, 0x5BE8, 0x5BE2, 0x5BE4, 0x5BDF, 0x5C0D, /* 0xE0 */ + 0x5C62, 0x5D84, 0x5D87, 0x5E5B, 0x5E63, 0x5E55, 0x5E57, 0x5E54, /* 0xF0 */ + 0x5ED3, 0x5ED6, 0x5F0A, 0x5F46, 0x5F70, 0x5FB9, 0x6147 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_BA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x613F, 0x614B, 0x6177, 0x6162, 0x6163, 0x615F, 0x615A, 0x6158, /* 0x40 */ + 0x6175, 0x622A, 0x6487, 0x6458, 0x6454, 0x64A4, 0x6478, 0x645F, /* 0x40 */ + 0x647A, 0x6451, 0x6467, 0x6434, 0x646D, 0x647B, 0x6572, 0x65A1, /* 0x50 */ + 0x65D7, 0x65D6, 0x66A2, 0x66A8, 0x669D, 0x699C, 0x69A8, 0x6995, /* 0x50 */ + 0x69C1, 0x69AE, 0x69D3, 0x69CB, 0x699B, 0x69B7, 0x69BB, 0x69AB, /* 0x60 */ + 0x69B4, 0x69D0, 0x69CD, 0x69AD, 0x69CC, 0x69A6, 0x69C3, 0x69A3, /* 0x60 */ + 0x6B49, 0x6B4C, 0x6C33, 0x6F33, 0x6F14, 0x6EFE, 0x6F13, 0x6EF4, /* 0x70 */ + 0x6F29, 0x6F3E, 0x6F20, 0x6F2C, 0x6F0F, 0x6F02, 0x6F22, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6EFF, 0x6EEF, 0x6F06, 0x6F31, 0x6F38, 0x6F32, 0x6F23, /* 0xA0 */ + 0x6F15, 0x6F2B, 0x6F2F, 0x6F88, 0x6F2A, 0x6EEC, 0x6F01, 0x6EF2, /* 0xA0 */ + 0x6ECC, 0x6EF7, 0x7194, 0x7199, 0x717D, 0x718A, 0x7184, 0x7192, /* 0xB0 */ + 0x723E, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746A, /* 0xB0 */ + 0x7470, 0x746D, 0x7504, 0x7591, 0x7627, 0x760D, 0x760B, 0x7609, /* 0xC0 */ + 0x7613, 0x76E1, 0x76E3, 0x7784, 0x777D, 0x777F, 0x7761, 0x78C1, /* 0xC0 */ + 0x789F, 0x78A7, 0x78B3, 0x78A9, 0x78A3, 0x798E, 0x798F, 0x798D, /* 0xD0 */ + 0x7A2E, 0x7A31, 0x7AAA, 0x7AA9, 0x7AED, 0x7AEF, 0x7BA1, 0x7B95, /* 0xD0 */ + 0x7B8B, 0x7B75, 0x7B97, 0x7B9D, 0x7B94, 0x7B8F, 0x7BB8, 0x7B87, /* 0xE0 */ + 0x7B84, 0x7CB9, 0x7CBD, 0x7CBE, 0x7DBB, 0x7DB0, 0x7D9C, 0x7DBD, /* 0xE0 */ + 0x7DBE, 0x7DA0, 0x7DCA, 0x7DB4, 0x7DB2, 0x7DB1, 0x7DBA, 0x7DA2, /* 0xF0 */ + 0x7DBF, 0x7DB5, 0x7DB8, 0x7DAD, 0x7DD2, 0x7DC7, 0x7DAC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_BB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7F70, 0x7FE0, 0x7FE1, 0x7FDF, 0x805E, 0x805A, 0x8087, 0x8150, /* 0x40 */ + 0x8180, 0x818F, 0x8188, 0x818A, 0x817F, 0x8182, 0x81E7, 0x81FA, /* 0x40 */ + 0x8207, 0x8214, 0x821E, 0x824B, 0x84C9, 0x84BF, 0x84C6, 0x84C4, /* 0x50 */ + 0x8499, 0x849E, 0x84B2, 0x849C, 0x84CB, 0x84B8, 0x84C0, 0x84D3, /* 0x50 */ + 0x8490, 0x84BC, 0x84D1, 0x84CA, 0x873F, 0x871C, 0x873B, 0x8722, /* 0x60 */ + 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88F3, 0x8902, /* 0x60 */ + 0x88F4, 0x88F9, 0x88F8, 0x88FD, 0x88E8, 0x891A, 0x88EF, 0x8AA6, /* 0x70 */ + 0x8A8C, 0x8A9E, 0x8AA3, 0x8A8D, 0x8AA1, 0x8A93, 0x8AA4, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8AAA, 0x8AA5, 0x8AA8, 0x8A98, 0x8A91, 0x8A9A, 0x8AA7, /* 0xA0 */ + 0x8C6A, 0x8C8D, 0x8C8C, 0x8CD3, 0x8CD1, 0x8CD2, 0x8D6B, 0x8D99, /* 0xA0 */ + 0x8D95, 0x8DFC, 0x8F14, 0x8F12, 0x8F15, 0x8F13, 0x8FA3, 0x9060, /* 0xB0 */ + 0x9058, 0x905C, 0x9063, 0x9059, 0x905E, 0x9062, 0x905D, 0x905B, /* 0xB0 */ + 0x9119, 0x9118, 0x911E, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, /* 0xC0 */ + 0x9280, 0x9285, 0x9298, 0x9296, 0x927B, 0x9293, 0x929C, 0x92A8, /* 0xC0 */ + 0x927C, 0x9291, 0x95A1, 0x95A8, 0x95A9, 0x95A3, 0x95A5, 0x95A4, /* 0xD0 */ + 0x9699, 0x969C, 0x969B, 0x96CC, 0x96D2, 0x9700, 0x977C, 0x9785, /* 0xD0 */ + 0x97F6, 0x9817, 0x9818, 0x98AF, 0x98B1, 0x9903, 0x9905, 0x990C, /* 0xE0 */ + 0x9909, 0x99C1, 0x9AAF, 0x9AB0, 0x9AE6, 0x9B41, 0x9B42, 0x9CF4, /* 0xE0 */ + 0x9CF6, 0x9CF3, 0x9EBC, 0x9F3B, 0x9F4A, 0x5104, 0x5100, 0x50FB, /* 0xF0 */ + 0x50F5, 0x50F9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_BC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5287, 0x5288, 0x5289, 0x528D, 0x528A, 0x52F0, 0x53B2, 0x562E, /* 0x40 */ + 0x563B, 0x5639, 0x5632, 0x563F, 0x5634, 0x5629, 0x5653, 0x564E, /* 0x40 */ + 0x5657, 0x5674, 0x5636, 0x562F, 0x5630, 0x5880, 0x589F, 0x589E, /* 0x50 */ + 0x58B3, 0x589C, 0x58AE, 0x58A9, 0x58A6, 0x596D, 0x5B09, 0x5AFB, /* 0x50 */ + 0x5B0B, 0x5AF5, 0x5B0C, 0x5B08, 0x5BEE, 0x5BEC, 0x5BE9, 0x5BEB, /* 0x60 */ + 0x5C64, 0x5C65, 0x5D9D, 0x5D94, 0x5E62, 0x5E5F, 0x5E61, 0x5EE2, /* 0x60 */ + 0x5EDA, 0x5EDF, 0x5EDD, 0x5EE3, 0x5EE0, 0x5F48, 0x5F71, 0x5FB7, /* 0x70 */ + 0x5FB5, 0x6176, 0x6167, 0x616E, 0x615D, 0x6155, 0x6182, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x617C, 0x6170, 0x616B, 0x617E, 0x61A7, 0x6190, 0x61AB, /* 0xA0 */ + 0x618E, 0x61AC, 0x619A, 0x61A4, 0x6194, 0x61AE, 0x622E, 0x6469, /* 0xA0 */ + 0x646F, 0x6479, 0x649E, 0x64B2, 0x6488, 0x6490, 0x64B0, 0x64A5, /* 0xB0 */ + 0x6493, 0x6495, 0x64A9, 0x6492, 0x64AE, 0x64AD, 0x64AB, 0x649A, /* 0xB0 */ + 0x64AC, 0x6499, 0x64A2, 0x64B3, 0x6575, 0x6577, 0x6578, 0x66AE, /* 0xC0 */ + 0x66AB, 0x66B4, 0x66B1, 0x6A23, 0x6A1F, 0x69E8, 0x6A01, 0x6A1E, /* 0xC0 */ + 0x6A19, 0x69FD, 0x6A21, 0x6A13, 0x6A0A, 0x69F3, 0x6A02, 0x6A05, /* 0xD0 */ + 0x69ED, 0x6A11, 0x6B50, 0x6B4E, 0x6BA4, 0x6BC5, 0x6BC6, 0x6F3F, /* 0xD0 */ + 0x6F7C, 0x6F84, 0x6F51, 0x6F66, 0x6F54, 0x6F86, 0x6F6D, 0x6F5B, /* 0xE0 */ + 0x6F78, 0x6F6E, 0x6F8E, 0x6F7A, 0x6F70, 0x6F64, 0x6F97, 0x6F58, /* 0xE0 */ + 0x6ED5, 0x6F6F, 0x6F60, 0x6F5F, 0x719F, 0x71AC, 0x71B1, 0x71A8, /* 0xF0 */ + 0x7256, 0x729B, 0x734E, 0x7357, 0x7469, 0x748B, 0x7483 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_BD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x747E, 0x7480, 0x757F, 0x7620, 0x7629, 0x761F, 0x7624, 0x7626, /* 0x40 */ + 0x7621, 0x7622, 0x769A, 0x76BA, 0x76E4, 0x778E, 0x7787, 0x778C, /* 0x40 */ + 0x7791, 0x778B, 0x78CB, 0x78C5, 0x78BA, 0x78CA, 0x78BE, 0x78D5, /* 0x50 */ + 0x78BC, 0x78D0, 0x7A3F, 0x7A3C, 0x7A40, 0x7A3D, 0x7A37, 0x7A3B, /* 0x50 */ + 0x7AAF, 0x7AAE, 0x7BAD, 0x7BB1, 0x7BC4, 0x7BB4, 0x7BC6, 0x7BC7, /* 0x60 */ + 0x7BC1, 0x7BA0, 0x7BCC, 0x7CCA, 0x7DE0, 0x7DF4, 0x7DEF, 0x7DFB, /* 0x60 */ + 0x7DD8, 0x7DEC, 0x7DDD, 0x7DE8, 0x7DE3, 0x7DDA, 0x7DDE, 0x7DE9, /* 0x70 */ + 0x7D9E, 0x7DD9, 0x7DF2, 0x7DF9, 0x7F75, 0x7F77, 0x7FAF, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7FE9, 0x8026, 0x819B, 0x819C, 0x819D, 0x81A0, 0x819A, /* 0xA0 */ + 0x8198, 0x8517, 0x853D, 0x851A, 0x84EE, 0x852C, 0x852D, 0x8513, /* 0xA0 */ + 0x8511, 0x8523, 0x8521, 0x8514, 0x84EC, 0x8525, 0x84FF, 0x8506, /* 0xB0 */ + 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, /* 0xB0 */ + 0x8757, 0x874C, 0x8753, 0x885B, 0x885D, 0x8910, 0x8907, 0x8912, /* 0xC0 */ + 0x8913, 0x8915, 0x890A, 0x8ABC, 0x8AD2, 0x8AC7, 0x8AC4, 0x8A95, /* 0xC0 */ + 0x8ACB, 0x8AF8, 0x8AB2, 0x8AC9, 0x8AC2, 0x8ABF, 0x8AB0, 0x8AD6, /* 0xD0 */ + 0x8ACD, 0x8AB6, 0x8AB9, 0x8ADB, 0x8C4C, 0x8C4E, 0x8C6C, 0x8CE0, /* 0xD0 */ + 0x8CDE, 0x8CE6, 0x8CE4, 0x8CEC, 0x8CED, 0x8CE2, 0x8CE3, 0x8CDC, /* 0xE0 */ + 0x8CEA, 0x8CE1, 0x8D6D, 0x8D9F, 0x8DA3, 0x8E2B, 0x8E10, 0x8E1D, /* 0xE0 */ + 0x8E22, 0x8E0F, 0x8E29, 0x8E1F, 0x8E21, 0x8E1E, 0x8EBA, 0x8F1D, /* 0xF0 */ + 0x8F1B, 0x8F1F, 0x8F29, 0x8F26, 0x8F2A, 0x8F1C, 0x8F1E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_BE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8F25, 0x9069, 0x906E, 0x9068, 0x906D, 0x9077, 0x9130, 0x912D, /* 0x40 */ + 0x9127, 0x9131, 0x9187, 0x9189, 0x918B, 0x9183, 0x92C5, 0x92BB, /* 0x40 */ + 0x92B7, 0x92EA, 0x92AC, 0x92E4, 0x92C1, 0x92B3, 0x92BC, 0x92D2, /* 0x50 */ + 0x92C7, 0x92F0, 0x92B2, 0x95AD, 0x95B1, 0x9704, 0x9706, 0x9707, /* 0x50 */ + 0x9709, 0x9760, 0x978D, 0x978B, 0x978F, 0x9821, 0x982B, 0x981C, /* 0x60 */ + 0x98B3, 0x990A, 0x9913, 0x9912, 0x9918, 0x99DD, 0x99D0, 0x99DF, /* 0x60 */ + 0x99DB, 0x99D1, 0x99D5, 0x99D2, 0x99D9, 0x9AB7, 0x9AEE, 0x9AEF, /* 0x70 */ + 0x9B27, 0x9B45, 0x9B44, 0x9B77, 0x9B6F, 0x9D06, 0x9D09, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9D03, 0x9EA9, 0x9EBE, 0x9ECE, 0x58A8, 0x9F52, 0x5112, /* 0xA0 */ + 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51AA, 0x51DD, 0x5291, /* 0xA0 */ + 0x5293, 0x52F3, 0x5659, 0x566B, 0x5679, 0x5669, 0x5664, 0x5678, /* 0xB0 */ + 0x566A, 0x5668, 0x5665, 0x5671, 0x566F, 0x566C, 0x5662, 0x5676, /* 0xB0 */ + 0x58C1, 0x58BE, 0x58C7, 0x58C5, 0x596E, 0x5B1D, 0x5B34, 0x5B78, /* 0xC0 */ + 0x5BF0, 0x5C0E, 0x5F4A, 0x61B2, 0x6191, 0x61A9, 0x618A, 0x61CD, /* 0xC0 */ + 0x61B6, 0x61BE, 0x61CA, 0x61C8, 0x6230, 0x64C5, 0x64C1, 0x64CB, /* 0xD0 */ + 0x64BB, 0x64BC, 0x64DA, 0x64C4, 0x64C7, 0x64C2, 0x64CD, 0x64BF, /* 0xD0 */ + 0x64D2, 0x64D4, 0x64BE, 0x6574, 0x66C6, 0x66C9, 0x66B9, 0x66C4, /* 0xE0 */ + 0x66C7, 0x66B8, 0x6A3D, 0x6A38, 0x6A3A, 0x6A59, 0x6A6B, 0x6A58, /* 0xE0 */ + 0x6A39, 0x6A44, 0x6A62, 0x6A61, 0x6A4B, 0x6A47, 0x6A35, 0x6A5F, /* 0xF0 */ + 0x6A48, 0x6B59, 0x6B77, 0x6C05, 0x6FC2, 0x6FB1, 0x6FA1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_BF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6FC3, 0x6FA4, 0x6FC1, 0x6FA7, 0x6FB3, 0x6FC0, 0x6FB9, 0x6FB6, /* 0x40 */ + 0x6FA6, 0x6FA0, 0x6FB4, 0x71BE, 0x71C9, 0x71D0, 0x71D2, 0x71C8, /* 0x40 */ + 0x71D5, 0x71B9, 0x71CE, 0x71D9, 0x71DC, 0x71C3, 0x71C4, 0x7368, /* 0x50 */ + 0x749C, 0x74A3, 0x7498, 0x749F, 0x749E, 0x74E2, 0x750C, 0x750D, /* 0x50 */ + 0x7634, 0x7638, 0x763A, 0x76E7, 0x76E5, 0x77A0, 0x779E, 0x779F, /* 0x60 */ + 0x77A5, 0x78E8, 0x78DA, 0x78EC, 0x78E7, 0x79A6, 0x7A4D, 0x7A4E, /* 0x60 */ + 0x7A46, 0x7A4C, 0x7A4B, 0x7ABA, 0x7BD9, 0x7C11, 0x7BC9, 0x7BE4, /* 0x70 */ + 0x7BDB, 0x7BE1, 0x7BE9, 0x7BE6, 0x7CD5, 0x7CD6, 0x7E0A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7E11, 0x7E08, 0x7E1B, 0x7E23, 0x7E1E, 0x7E1D, 0x7E09, /* 0xA0 */ + 0x7E10, 0x7F79, 0x7FB2, 0x7FF0, 0x7FF1, 0x7FEE, 0x8028, 0x81B3, /* 0xA0 */ + 0x81A9, 0x81A8, 0x81FB, 0x8208, 0x8258, 0x8259, 0x854A, 0x8559, /* 0xB0 */ + 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856D, 0x856A, 0x855E, /* 0xB0 */ + 0x8783, 0x879F, 0x879E, 0x87A2, 0x878D, 0x8861, 0x892A, 0x8932, /* 0xC0 */ + 0x8925, 0x892B, 0x8921, 0x89AA, 0x89A6, 0x8AE6, 0x8AFA, 0x8AEB, /* 0xC0 */ + 0x8AF1, 0x8B00, 0x8ADC, 0x8AE7, 0x8AEE, 0x8AFE, 0x8B01, 0x8B02, /* 0xD0 */ + 0x8AF7, 0x8AED, 0x8AF3, 0x8AF6, 0x8AFC, 0x8C6B, 0x8C6D, 0x8C93, /* 0xD0 */ + 0x8CF4, 0x8E44, 0x8E31, 0x8E34, 0x8E42, 0x8E39, 0x8E35, 0x8F3B, /* 0xE0 */ + 0x8F2F, 0x8F38, 0x8F33, 0x8FA8, 0x8FA6, 0x9075, 0x9074, 0x9078, /* 0xE0 */ + 0x9072, 0x907C, 0x907A, 0x9134, 0x9192, 0x9320, 0x9336, 0x92F8, /* 0xF0 */ + 0x9333, 0x932F, 0x9322, 0x92FC, 0x932B, 0x9304, 0x931A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9310, 0x9326, 0x9321, 0x9315, 0x932E, 0x9319, 0x95BB, 0x96A7, /* 0x40 */ + 0x96A8, 0x96AA, 0x96D5, 0x970E, 0x9711, 0x9716, 0x970D, 0x9713, /* 0x40 */ + 0x970F, 0x975B, 0x975C, 0x9766, 0x9798, 0x9830, 0x9838, 0x983B, /* 0x50 */ + 0x9837, 0x982D, 0x9839, 0x9824, 0x9910, 0x9928, 0x991E, 0x991B, /* 0x50 */ + 0x9921, 0x991A, 0x99ED, 0x99E2, 0x99F1, 0x9AB8, 0x9ABC, 0x9AFB, /* 0x60 */ + 0x9AED, 0x9B28, 0x9B91, 0x9D15, 0x9D23, 0x9D26, 0x9D28, 0x9D12, /* 0x60 */ + 0x9D1B, 0x9ED8, 0x9ED4, 0x9F8D, 0x9F9C, 0x512A, 0x511F, 0x5121, /* 0x70 */ + 0x5132, 0x52F5, 0x568E, 0x5680, 0x5690, 0x5685, 0x5687, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x568F, 0x58D5, 0x58D3, 0x58D1, 0x58CE, 0x5B30, 0x5B2A, /* 0xA0 */ + 0x5B24, 0x5B7A, 0x5C37, 0x5C68, 0x5DBC, 0x5DBA, 0x5DBD, 0x5DB8, /* 0xA0 */ + 0x5E6B, 0x5F4C, 0x5FBD, 0x61C9, 0x61C2, 0x61C7, 0x61E6, 0x61CB, /* 0xB0 */ + 0x6232, 0x6234, 0x64CE, 0x64CA, 0x64D8, 0x64E0, 0x64F0, 0x64E6, /* 0xB0 */ + 0x64EC, 0x64F1, 0x64E2, 0x64ED, 0x6582, 0x6583, 0x66D9, 0x66D6, /* 0xC0 */ + 0x6A80, 0x6A94, 0x6A84, 0x6AA2, 0x6A9C, 0x6ADB, 0x6AA3, 0x6A7E, /* 0xC0 */ + 0x6A97, 0x6A90, 0x6AA0, 0x6B5C, 0x6BAE, 0x6BDA, 0x6C08, 0x6FD8, /* 0xD0 */ + 0x6FF1, 0x6FDF, 0x6FE0, 0x6FDB, 0x6FE4, 0x6FEB, 0x6FEF, 0x6F80, /* 0xD0 */ + 0x6FEC, 0x6FE1, 0x6FE9, 0x6FD5, 0x6FEE, 0x6FF0, 0x71E7, 0x71DF, /* 0xE0 */ + 0x71EE, 0x71E6, 0x71E5, 0x71ED, 0x71EC, 0x71F4, 0x71E0, 0x7235, /* 0xE0 */ + 0x7246, 0x7370, 0x7372, 0x74A9, 0x74B0, 0x74A6, 0x74A8, 0x7646, /* 0xF0 */ + 0x7642, 0x764C, 0x76EA, 0x77B3, 0x77AA, 0x77B0, 0x77AC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x77A7, 0x77AD, 0x77EF, 0x78F7, 0x78FA, 0x78F4, 0x78EF, 0x7901, /* 0x40 */ + 0x79A7, 0x79AA, 0x7A57, 0x7ABF, 0x7C07, 0x7C0D, 0x7BFE, 0x7BF7, /* 0x40 */ + 0x7C0C, 0x7BE0, 0x7CE0, 0x7CDC, 0x7CDE, 0x7CE2, 0x7CDF, 0x7CD9, /* 0x50 */ + 0x7CDD, 0x7E2E, 0x7E3E, 0x7E46, 0x7E37, 0x7E32, 0x7E43, 0x7E2B, /* 0x50 */ + 0x7E3D, 0x7E31, 0x7E45, 0x7E41, 0x7E34, 0x7E39, 0x7E48, 0x7E35, /* 0x60 */ + 0x7E3F, 0x7E2F, 0x7F44, 0x7FF3, 0x7FFC, 0x8071, 0x8072, 0x8070, /* 0x60 */ + 0x806F, 0x8073, 0x81C6, 0x81C3, 0x81BA, 0x81C2, 0x81C0, 0x81BF, /* 0x70 */ + 0x81BD, 0x81C9, 0x81BE, 0x81E8, 0x8209, 0x8271, 0x85AA, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8584, 0x857E, 0x859C, 0x8591, 0x8594, 0x85AF, 0x859B, /* 0xA0 */ + 0x8587, 0x85A8, 0x858A, 0x8667, 0x87C0, 0x87D1, 0x87B3, 0x87D2, /* 0xA0 */ + 0x87C6, 0x87AB, 0x87BB, 0x87BA, 0x87C8, 0x87CB, 0x893B, 0x8936, /* 0xB0 */ + 0x8944, 0x8938, 0x893D, 0x89AC, 0x8B0E, 0x8B17, 0x8B19, 0x8B1B, /* 0xB0 */ + 0x8B0A, 0x8B20, 0x8B1D, 0x8B04, 0x8B10, 0x8C41, 0x8C3F, 0x8C73, /* 0xC0 */ + 0x8CFA, 0x8CFD, 0x8CFC, 0x8CF8, 0x8CFB, 0x8DA8, 0x8E49, 0x8E4B, /* 0xC0 */ + 0x8E48, 0x8E4A, 0x8F44, 0x8F3E, 0x8F42, 0x8F45, 0x8F3F, 0x907F, /* 0xD0 */ + 0x907D, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91A3, 0x919E, /* 0xD0 */ + 0x919C, 0x934D, 0x9382, 0x9328, 0x9375, 0x934A, 0x9365, 0x934B, /* 0xE0 */ + 0x9318, 0x937E, 0x936C, 0x935B, 0x9370, 0x935A, 0x9354, 0x95CA, /* 0xE0 */ + 0x95CB, 0x95CC, 0x95C8, 0x95C6, 0x96B1, 0x96B8, 0x96D6, 0x971C, /* 0xF0 */ + 0x971E, 0x97A0, 0x97D3, 0x9846, 0x98B6, 0x9935, 0x9A01 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x99FF, 0x9BAE, 0x9BAB, 0x9BAA, 0x9BAD, 0x9D3B, 0x9D3F, 0x9E8B, /* 0x40 */ + 0x9ECF, 0x9EDE, 0x9EDC, 0x9EDD, 0x9EDB, 0x9F3E, 0x9F4B, 0x53E2, /* 0x40 */ + 0x5695, 0x56AE, 0x58D9, 0x58D8, 0x5B38, 0x5F5D, 0x61E3, 0x6233, /* 0x50 */ + 0x64F4, 0x64F2, 0x64FE, 0x6506, 0x64FA, 0x64FB, 0x64F7, 0x65B7, /* 0x50 */ + 0x66DC, 0x6726, 0x6AB3, 0x6AAC, 0x6AC3, 0x6ABB, 0x6AB8, 0x6AC2, /* 0x60 */ + 0x6AAE, 0x6AAF, 0x6B5F, 0x6B78, 0x6BAF, 0x7009, 0x700B, 0x6FFE, /* 0x60 */ + 0x7006, 0x6FFA, 0x7011, 0x700F, 0x71FB, 0x71FC, 0x71FE, 0x71F8, /* 0x70 */ + 0x7377, 0x7375, 0x74A7, 0x74BF, 0x7515, 0x7656, 0x7658, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7652, 0x77BD, 0x77BF, 0x77BB, 0x77BC, 0x790E, 0x79AE, /* 0xA0 */ + 0x7A61, 0x7A62, 0x7A60, 0x7AC4, 0x7AC5, 0x7C2B, 0x7C27, 0x7C2A, /* 0xA0 */ + 0x7C1E, 0x7C23, 0x7C21, 0x7CE7, 0x7E54, 0x7E55, 0x7E5E, 0x7E5A, /* 0xB0 */ + 0x7E61, 0x7E52, 0x7E59, 0x7F48, 0x7FF9, 0x7FFB, 0x8077, 0x8076, /* 0xB0 */ + 0x81CD, 0x81CF, 0x820A, 0x85CF, 0x85A9, 0x85CD, 0x85D0, 0x85C9, /* 0xC0 */ + 0x85B0, 0x85BA, 0x85B9, 0x85A6, 0x87EF, 0x87EC, 0x87F2, 0x87E0, /* 0xC0 */ + 0x8986, 0x89B2, 0x89F4, 0x8B28, 0x8B39, 0x8B2C, 0x8B2B, 0x8C50, /* 0xD0 */ + 0x8D05, 0x8E59, 0x8E63, 0x8E66, 0x8E64, 0x8E5F, 0x8E55, 0x8EC0, /* 0xD0 */ + 0x8F49, 0x8F4D, 0x9087, 0x9083, 0x9088, 0x91AB, 0x91AC, 0x91D0, /* 0xE0 */ + 0x9394, 0x938A, 0x9396, 0x93A2, 0x93B3, 0x93AE, 0x93AC, 0x93B0, /* 0xE0 */ + 0x9398, 0x939A, 0x9397, 0x95D4, 0x95D6, 0x95D0, 0x95D5, 0x96E2, /* 0xF0 */ + 0x96DC, 0x96D9, 0x96DB, 0x96DE, 0x9724, 0x97A3, 0x97A6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x97AD, 0x97F9, 0x984D, 0x984F, 0x984C, 0x984E, 0x9853, 0x98BA, /* 0x40 */ + 0x993E, 0x993F, 0x993D, 0x992E, 0x99A5, 0x9A0E, 0x9AC1, 0x9B03, /* 0x40 */ + 0x9B06, 0x9B4F, 0x9B4E, 0x9B4D, 0x9BCA, 0x9BC9, 0x9BFD, 0x9BC8, /* 0x50 */ + 0x9BC0, 0x9D51, 0x9D5D, 0x9D60, 0x9EE0, 0x9F15, 0x9F2C, 0x5133, /* 0x50 */ + 0x56A5, 0x58DE, 0x58DF, 0x58E2, 0x5BF5, 0x9F90, 0x5EEC, 0x61F2, /* 0x60 */ + 0x61F7, 0x61F6, 0x61F5, 0x6500, 0x650F, 0x66E0, 0x66DD, 0x6AE5, /* 0x60 */ + 0x6ADD, 0x6ADA, 0x6AD3, 0x701B, 0x701F, 0x7028, 0x701A, 0x701D, /* 0x70 */ + 0x7015, 0x7018, 0x7206, 0x720D, 0x7258, 0x72A2, 0x7378, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x737A, 0x74BD, 0x74CA, 0x74E3, 0x7587, 0x7586, 0x765F, /* 0xA0 */ + 0x7661, 0x77C7, 0x7919, 0x79B1, 0x7A6B, 0x7A69, 0x7C3E, 0x7C3F, /* 0xA0 */ + 0x7C38, 0x7C3D, 0x7C37, 0x7C40, 0x7E6B, 0x7E6D, 0x7E79, 0x7E69, /* 0xB0 */ + 0x7E6A, 0x7F85, 0x7E73, 0x7FB6, 0x7FB9, 0x7FB8, 0x81D8, 0x85E9, /* 0xB0 */ + 0x85DD, 0x85EA, 0x85D5, 0x85E4, 0x85E5, 0x85F7, 0x87FB, 0x8805, /* 0xC0 */ + 0x880D, 0x87F9, 0x87FE, 0x8960, 0x895F, 0x8956, 0x895E, 0x8B41, /* 0xC0 */ + 0x8B5C, 0x8B58, 0x8B49, 0x8B5A, 0x8B4E, 0x8B4F, 0x8B46, 0x8B59, /* 0xD0 */ + 0x8D08, 0x8D0A, 0x8E7C, 0x8E72, 0x8E87, 0x8E76, 0x8E6C, 0x8E7A, /* 0xD0 */ + 0x8E74, 0x8F54, 0x8F4E, 0x8FAD, 0x908A, 0x908B, 0x91B1, 0x91AE, /* 0xE0 */ + 0x93E1, 0x93D1, 0x93DF, 0x93C3, 0x93C8, 0x93DC, 0x93DD, 0x93D6, /* 0xE0 */ + 0x93E2, 0x93CD, 0x93D8, 0x93E4, 0x93D7, 0x93E8, 0x95DC, 0x96B4, /* 0xF0 */ + 0x96E3, 0x972A, 0x9727, 0x9761, 0x97DC, 0x97FB, 0x985E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x9858, 0x985B, 0x98BC, 0x9945, 0x9949, 0x9A16, 0x9A19, 0x9B0D, /* 0x40 */ + 0x9BE8, 0x9BE7, 0x9BD6, 0x9BDB, 0x9D89, 0x9D61, 0x9D72, 0x9D6A, /* 0x40 */ + 0x9D6C, 0x9E92, 0x9E97, 0x9E93, 0x9EB4, 0x52F8, 0x56A8, 0x56B7, /* 0x50 */ + 0x56B6, 0x56B4, 0x56BC, 0x58E4, 0x5B40, 0x5B43, 0x5B7D, 0x5BF6, /* 0x50 */ + 0x5DC9, 0x61F8, 0x61FA, 0x6518, 0x6514, 0x6519, 0x66E6, 0x6727, /* 0x60 */ + 0x6AEC, 0x703E, 0x7030, 0x7032, 0x7210, 0x737B, 0x74CF, 0x7662, /* 0x60 */ + 0x7665, 0x7926, 0x792A, 0x792C, 0x792B, 0x7AC7, 0x7AF6, 0x7C4C, /* 0x70 */ + 0x7C43, 0x7C4D, 0x7CEF, 0x7CF0, 0x8FAE, 0x7E7D, 0x7E7C, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7E82, 0x7F4C, 0x8000, 0x81DA, 0x8266, 0x85FB, 0x85F9, /* 0xA0 */ + 0x8611, 0x85FA, 0x8606, 0x860B, 0x8607, 0x860A, 0x8814, 0x8815, /* 0xA0 */ + 0x8964, 0x89BA, 0x89F8, 0x8B70, 0x8B6C, 0x8B66, 0x8B6F, 0x8B5F, /* 0xB0 */ + 0x8B6B, 0x8D0F, 0x8D0D, 0x8E89, 0x8E81, 0x8E85, 0x8E82, 0x91B4, /* 0xB0 */ + 0x91CB, 0x9418, 0x9403, 0x93FD, 0x95E1, 0x9730, 0x98C4, 0x9952, /* 0xC0 */ + 0x9951, 0x99A8, 0x9A2B, 0x9A30, 0x9A37, 0x9A35, 0x9C13, 0x9C0D, /* 0xC0 */ + 0x9E79, 0x9EB5, 0x9EE8, 0x9F2F, 0x9F5F, 0x9F63, 0x9F61, 0x5137, /* 0xD0 */ + 0x5138, 0x56C1, 0x56C0, 0x56C2, 0x5914, 0x5C6C, 0x5DCD, 0x61FC, /* 0xD0 */ + 0x61FE, 0x651D, 0x651C, 0x6595, 0x66E9, 0x6AFB, 0x6B04, 0x6AFA, /* 0xE0 */ + 0x6BB2, 0x704C, 0x721B, 0x72A7, 0x74D6, 0x74D4, 0x7669, 0x77D3, /* 0xE0 */ + 0x7C50, 0x7E8F, 0x7E8C, 0x7FBC, 0x8617, 0x862D, 0x861A, 0x8823, /* 0xF0 */ + 0x8822, 0x8821, 0x881F, 0x896A, 0x896C, 0x89BD, 0x8B74 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B77, 0x8B7D, 0x8D13, 0x8E8A, 0x8E8D, 0x8E8B, 0x8F5F, 0x8FAF, /* 0x40 */ + 0x91BA, 0x942E, 0x9433, 0x9435, 0x943A, 0x9438, 0x9432, 0x942B, /* 0x40 */ + 0x95E2, 0x9738, 0x9739, 0x9732, 0x97FF, 0x9867, 0x9865, 0x9957, /* 0x50 */ + 0x9A45, 0x9A43, 0x9A40, 0x9A3E, 0x9ACF, 0x9B54, 0x9B51, 0x9C2D, /* 0x50 */ + 0x9C25, 0x9DAF, 0x9DB4, 0x9DC2, 0x9DB8, 0x9E9D, 0x9EEF, 0x9F19, /* 0x60 */ + 0x9F5C, 0x9F66, 0x9F67, 0x513C, 0x513B, 0x56C8, 0x56CA, 0x56C9, /* 0x60 */ + 0x5B7F, 0x5DD4, 0x5DD2, 0x5F4E, 0x61FF, 0x6524, 0x6B0A, 0x6B61, /* 0x70 */ + 0x7051, 0x7058, 0x7380, 0x74E4, 0x758A, 0x766E, 0x766C, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x79B3, 0x7C60, 0x7C5F, 0x807E, 0x807D, 0x81DF, 0x8972, /* 0xA0 */ + 0x896F, 0x89FC, 0x8B80, 0x8D16, 0x8D17, 0x8E91, 0x8E93, 0x8F61, /* 0xA0 */ + 0x9148, 0x9444, 0x9451, 0x9452, 0x973D, 0x973E, 0x97C3, 0x97C1, /* 0xB0 */ + 0x986B, 0x9955, 0x9A55, 0x9A4D, 0x9AD2, 0x9B1A, 0x9C49, 0x9C31, /* 0xB0 */ + 0x9C3E, 0x9C3B, 0x9DD3, 0x9DD7, 0x9F34, 0x9F6C, 0x9F6A, 0x9F94, /* 0xC0 */ + 0x56CC, 0x5DD6, 0x6200, 0x6523, 0x652B, 0x652A, 0x66EC, 0x6B10, /* 0xC0 */ + 0x74DA, 0x7ACA, 0x7C64, 0x7C63, 0x7C65, 0x7E93, 0x7E96, 0x7E94, /* 0xD0 */ + 0x81E2, 0x8638, 0x863F, 0x8831, 0x8B8A, 0x9090, 0x908F, 0x9463, /* 0xD0 */ + 0x9460, 0x9464, 0x9768, 0x986F, 0x995C, 0x9A5A, 0x9A5B, 0x9A57, /* 0xE0 */ + 0x9AD3, 0x9AD4, 0x9AD1, 0x9C54, 0x9C57, 0x9C56, 0x9DE5, 0x9E9F, /* 0xE0 */ + 0x9EF4, 0x56D1, 0x58E9, 0x652C, 0x705E, 0x7671, 0x7672, 0x77D7, /* 0xF0 */ + 0x7F50, 0x7F88, 0x8836, 0x8839, 0x8862, 0x8B93, 0x8B92 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B96, 0x8277, 0x8D1B, 0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, /* 0x40 */ + 0x97C6, 0x9870, 0x9A5F, 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, /* 0x40 */ + 0x9E7C, 0x9E7D, 0x9F07, 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, /* 0x50 */ + 0x7C6C, 0x7C6E, 0x883B, 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, /* 0x50 */ + 0x9871, 0x995E, 0x9AD6, 0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, /* 0x60 */ + 0x9477, 0x97C9, 0x9A62, 0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, /* 0x60 */ + 0x947D, 0x947E, 0x947C, 0x9C77, 0x9C78, 0x9EF7, 0x8C54, 0x947F, /* 0x70 */ + 0x9E1A, 0x7228, 0x9A6A, 0x9B31, 0x9E1B, 0x9E1E, 0x7C72 /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* This table only used for BIG5, because on other systems these */ +/* chars are end user defined characters */ +/* SB: This is nonstandard, and has effects on generate/big5hkscs2001.pl. */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5ONLY_C6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B96, 0x8277, 0x8D1B, 0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, /* 0x40 */ + 0x97C6, 0x9870, 0x9A5F, 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, /* 0x40 */ + 0x9E7C, 0x9E7D, 0x9F07, 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, /* 0x50 */ + 0x7C6C, 0x7C6E, 0x883B, 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, /* 0x50 */ + 0x9871, 0x995E, 0x9AD6, 0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, /* 0x60 */ + 0x9477, 0x97C9, 0x9A62, 0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, /* 0x60 */ + 0x947D, 0x947E, 0x947C, 0x9C77, 0x9C78, 0x9EF7, 0x8C54, 0x947F, /* 0x70 */ + 0x9E1A, 0x7228, 0x9A6A, 0x9B31, 0x9E1B, 0x9E1E, 0x7C72, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x30FE, 0x309D, 0x309E, 0x3005, 0x3041, 0x3042, 0x3043, /* 0xA0 */ + 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, /* 0xA0 */ + 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, /* 0xB0 */ + 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, /* 0xB0 */ + 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063, /* 0xC0 */ + 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, /* 0xC0 */ + 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, /* 0xD0 */ + 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, /* 0xD0 */ + 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083, /* 0xE0 */ + 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, /* 0xE0 */ + 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, /* 0xF0 */ + 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* This table only used for BIG5, because on other systems these */ +/* chars are end user defined characters */ +/* SB: This is nonstandard, and has effects on generate/big5hkscs2001.pl. */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5ONLY_C7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, /* 0x40 */ + 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, /* 0x40 */ + 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, /* 0x50 */ + 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, /* 0x50 */ + 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, /* 0x60 */ + 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, /* 0x60 */ + 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, /* 0x70 */ + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x30E7, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, /* 0xA0 */ + 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, /* 0xA0 */ + 0x30F6, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, /* 0xB0 */ + 0x041A, 0x041B, 0x041C, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, /* 0xB0 */ + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, /* 0xC0 */ + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, /* 0xC0 */ + 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, /* 0xD0 */ + 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, /* 0xD0 */ + 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, /* 0xE0 */ + 0x044F, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, /* 0xE0 */ + 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, /* 0xF0 */ + 0x2479, 0x247A, 0x247B, 0x247C, 0x247D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_C9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x4E42, 0x4E5C, 0x51F5, 0x531A, 0x5382, 0x4E07, 0x4E0C, 0x4E47, /* 0x40 */ + 0x4E8D, 0x56D7, 0xFA0C, 0x5C6E, 0x5F73, 0x4E0F, 0x5187, 0x4E0E, /* 0x40 */ + 0x4E2E, 0x4E93, 0x4EC2, 0x4EC9, 0x4EC8, 0x5198, 0x52FC, 0x536C, /* 0x50 */ + 0x53B9, 0x5720, 0x5903, 0x592C, 0x5C10, 0x5DFF, 0x65E1, 0x6BB3, /* 0x50 */ + 0x6BCC, 0x6C14, 0x723F, 0x4E31, 0x4E3C, 0x4EE8, 0x4EDC, 0x4EE9, /* 0x60 */ + 0x4EE1, 0x4EDD, 0x4EDA, 0x520C, 0x531C, 0x534C, 0x5722, 0x5723, /* 0x60 */ + 0x5917, 0x592F, 0x5B81, 0x5B84, 0x5C12, 0x5C3B, 0x5C74, 0x5C73, /* 0x70 */ + 0x5E04, 0x5E80, 0x5E82, 0x5FC9, 0x6209, 0x6250, 0x6C15, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6C36, 0x6C43, 0x6C3F, 0x6C3B, 0x72AE, 0x72B0, 0x738A, /* 0xA0 */ + 0x79B8, 0x808A, 0x961E, 0x4F0E, 0x4F18, 0x4F2C, 0x4EF5, 0x4F14, /* 0xA0 */ + 0x4EF1, 0x4F00, 0x4EF7, 0x4F08, 0x4F1D, 0x4F02, 0x4F05, 0x4F22, /* 0xB0 */ + 0x4F13, 0x4F04, 0x4EF4, 0x4F12, 0x51B1, 0x5213, 0x5209, 0x5210, /* 0xB0 */ + 0x52A6, 0x5322, 0x531F, 0x534D, 0x538A, 0x5407, 0x56E1, 0x56DF, /* 0xC0 */ + 0x572E, 0x572A, 0x5734, 0x593C, 0x5980, 0x597C, 0x5985, 0x597B, /* 0xC0 */ + 0x597E, 0x5977, 0x597F, 0x5B56, 0x5C15, 0x5C25, 0x5C7C, 0x5C7A, /* 0xD0 */ + 0x5C7B, 0x5C7E, 0x5DDF, 0x5E75, 0x5E84, 0x5F02, 0x5F1A, 0x5F74, /* 0xD0 */ + 0x5FD5, 0x5FD4, 0x5FCF, 0x625C, 0x625E, 0x6264, 0x6261, 0x6266, /* 0xE0 */ + 0x6262, 0x6259, 0x6260, 0x625A, 0x6265, 0x65EF, 0x65EE, 0x673E, /* 0xE0 */ + 0x6739, 0x6738, 0x673B, 0x673A, 0x673F, 0x673C, 0x6733, 0x6C18, /* 0xF0 */ + 0x6C46, 0x6C52, 0x6C5C, 0x6C4F, 0x6C4A, 0x6C54, 0x6C4B /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_CA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6C4C, 0x7071, 0x725E, 0x72B4, 0x72B5, 0x738E, 0x752A, 0x767F, /* 0x40 */ + 0x7A75, 0x7F51, 0x8278, 0x827C, 0x8280, 0x827D, 0x827F, 0x864D, /* 0x40 */ + 0x897E, 0x9099, 0x9097, 0x9098, 0x909B, 0x9094, 0x9622, 0x9624, /* 0x50 */ + 0x9620, 0x9623, 0x4F56, 0x4F3B, 0x4F62, 0x4F49, 0x4F53, 0x4F64, /* 0x50 */ + 0x4F3E, 0x4F67, 0x4F52, 0x4F5F, 0x4F41, 0x4F58, 0x4F2D, 0x4F33, /* 0x60 */ + 0x4F3F, 0x4F61, 0x518F, 0x51B9, 0x521C, 0x521E, 0x5221, 0x52AD, /* 0x60 */ + 0x52AE, 0x5309, 0x5363, 0x5372, 0x538E, 0x538F, 0x5430, 0x5437, /* 0x70 */ + 0x542A, 0x5454, 0x5445, 0x5419, 0x541C, 0x5425, 0x5418, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x543D, 0x544F, 0x5441, 0x5428, 0x5424, 0x5447, 0x56EE, /* 0xA0 */ + 0x56E7, 0x56E5, 0x5741, 0x5745, 0x574C, 0x5749, 0x574B, 0x5752, /* 0xA0 */ + 0x5906, 0x5940, 0x59A6, 0x5998, 0x59A0, 0x5997, 0x598E, 0x59A2, /* 0xB0 */ + 0x5990, 0x598F, 0x59A7, 0x59A1, 0x5B8E, 0x5B92, 0x5C28, 0x5C2A, /* 0xB0 */ + 0x5C8D, 0x5C8F, 0x5C88, 0x5C8B, 0x5C89, 0x5C92, 0x5C8A, 0x5C86, /* 0xC0 */ + 0x5C93, 0x5C95, 0x5DE0, 0x5E0A, 0x5E0E, 0x5E8B, 0x5E89, 0x5E8C, /* 0xC0 */ + 0x5E88, 0x5E8D, 0x5F05, 0x5F1D, 0x5F78, 0x5F76, 0x5FD2, 0x5FD1, /* 0xD0 */ + 0x5FD0, 0x5FED, 0x5FE8, 0x5FEE, 0x5FF3, 0x5FE1, 0x5FE4, 0x5FE3, /* 0xD0 */ + 0x5FFA, 0x5FEF, 0x5FF7, 0x5FFB, 0x6000, 0x5FF4, 0x623A, 0x6283, /* 0xE0 */ + 0x628C, 0x628E, 0x628F, 0x6294, 0x6287, 0x6271, 0x627B, 0x627A, /* 0xE0 */ + 0x6270, 0x6281, 0x6288, 0x6277, 0x627D, 0x6272, 0x6274, 0x6537, /* 0xF0 */ + 0x65F0, 0x65F4, 0x65F3, 0x65F2, 0x65F5, 0x6745, 0x6747 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_CB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6759, 0x6755, 0x674C, 0x6748, 0x675D, 0x674D, 0x675A, 0x674B, /* 0x40 */ + 0x6BD0, 0x6C19, 0x6C1A, 0x6C78, 0x6C67, 0x6C6B, 0x6C84, 0x6C8B, /* 0x40 */ + 0x6C8F, 0x6C71, 0x6C6F, 0x6C69, 0x6C9A, 0x6C6D, 0x6C87, 0x6C95, /* 0x50 */ + 0x6C9C, 0x6C66, 0x6C73, 0x6C65, 0x6C7B, 0x6C8E, 0x7074, 0x707A, /* 0x50 */ + 0x7263, 0x72BF, 0x72BD, 0x72C3, 0x72C6, 0x72C1, 0x72BA, 0x72C5, /* 0x60 */ + 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753A, 0x7539, 0x7594, /* 0x60 */ + 0x7595, 0x7681, 0x793D, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, /* 0x70 */ + 0x809C, 0x8290, 0x828F, 0x8285, 0x828E, 0x8291, 0x8293, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x828A, 0x8283, 0x8284, 0x8C78, 0x8FC9, 0x8FBF, 0x909F, /* 0xA0 */ + 0x90A1, 0x90A5, 0x909E, 0x90A7, 0x90A0, 0x9630, 0x9628, 0x962F, /* 0xA0 */ + 0x962D, 0x4E33, 0x4F98, 0x4F7C, 0x4F85, 0x4F7D, 0x4F80, 0x4F87, /* 0xB0 */ + 0x4F76, 0x4F74, 0x4F89, 0x4F84, 0x4F77, 0x4F4C, 0x4F97, 0x4F6A, /* 0xB0 */ + 0x4F9A, 0x4F79, 0x4F81, 0x4F78, 0x4F90, 0x4F9C, 0x4F94, 0x4F9E, /* 0xC0 */ + 0x4F92, 0x4F82, 0x4F95, 0x4F6B, 0x4F6E, 0x519E, 0x51BC, 0x51BE, /* 0xC0 */ + 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52BC, 0x530A, 0x530B, /* 0xD0 */ + 0x533C, 0x5392, 0x5394, 0x5487, 0x547F, 0x5481, 0x5491, 0x5482, /* 0xD0 */ + 0x5488, 0x546B, 0x547A, 0x547E, 0x5465, 0x546C, 0x5474, 0x5466, /* 0xE0 */ + 0x548D, 0x546F, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, /* 0xE0 */ + 0x56F7, 0x56F9, 0x576F, 0x5772, 0x576D, 0x576B, 0x5771, 0x5770, /* 0xF0 */ + 0x5776, 0x5780, 0x5775, 0x577B, 0x5773, 0x5774, 0x5762 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_CC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5768, 0x577D, 0x590C, 0x5945, 0x59B5, 0x59BA, 0x59CF, 0x59CE, /* 0x40 */ + 0x59B2, 0x59CC, 0x59C1, 0x59B6, 0x59BC, 0x59C3, 0x59D6, 0x59B1, /* 0x40 */ + 0x59BD, 0x59C0, 0x59C8, 0x59B4, 0x59C7, 0x5B62, 0x5B65, 0x5B93, /* 0x50 */ + 0x5B95, 0x5C44, 0x5C47, 0x5CAE, 0x5CA4, 0x5CA0, 0x5CB5, 0x5CAF, /* 0x50 */ + 0x5CA8, 0x5CAC, 0x5C9F, 0x5CA3, 0x5CAD, 0x5CA2, 0x5CAA, 0x5CA7, /* 0x60 */ + 0x5C9D, 0x5CA5, 0x5CB6, 0x5CB0, 0x5CA6, 0x5E17, 0x5E14, 0x5E19, /* 0x60 */ + 0x5F28, 0x5F22, 0x5F23, 0x5F24, 0x5F54, 0x5F82, 0x5F7E, 0x5F7D, /* 0x70 */ + 0x5FDE, 0x5FE5, 0x602D, 0x6026, 0x6019, 0x6032, 0x600B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6034, 0x600A, 0x6017, 0x6033, 0x601A, 0x601E, 0x602C, /* 0xA0 */ + 0x6022, 0x600D, 0x6010, 0x602E, 0x6013, 0x6011, 0x600C, 0x6009, /* 0xA0 */ + 0x601C, 0x6214, 0x623D, 0x62AD, 0x62B4, 0x62D1, 0x62BE, 0x62AA, /* 0xB0 */ + 0x62B6, 0x62CA, 0x62AE, 0x62B3, 0x62AF, 0x62BB, 0x62A9, 0x62B0, /* 0xB0 */ + 0x62B8, 0x653D, 0x65A8, 0x65BB, 0x6609, 0x65FC, 0x6604, 0x6612, /* 0xC0 */ + 0x6608, 0x65FB, 0x6603, 0x660B, 0x660D, 0x6605, 0x65FD, 0x6611, /* 0xC0 */ + 0x6610, 0x66F6, 0x670A, 0x6785, 0x676C, 0x678E, 0x6792, 0x6776, /* 0xD0 */ + 0x677B, 0x6798, 0x6786, 0x6784, 0x6774, 0x678D, 0x678C, 0x677A, /* 0xD0 */ + 0x679F, 0x6791, 0x6799, 0x6783, 0x677D, 0x6781, 0x6778, 0x6779, /* 0xE0 */ + 0x6794, 0x6B25, 0x6B80, 0x6B7E, 0x6BDE, 0x6C1D, 0x6C93, 0x6CEC, /* 0xE0 */ + 0x6CEB, 0x6CEE, 0x6CD9, 0x6CB6, 0x6CD4, 0x6CAD, 0x6CE7, 0x6CB7, /* 0xF0 */ + 0x6CD0, 0x6CC2, 0x6CBA, 0x6CC3, 0x6CC6, 0x6CED, 0x6CF2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_CD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6CD2, 0x6CDD, 0x6CB4, 0x6C8A, 0x6C9D, 0x6C80, 0x6CDE, 0x6CC0, /* 0x40 */ + 0x6D30, 0x6CCD, 0x6CC7, 0x6CB0, 0x6CF9, 0x6CCF, 0x6CE9, 0x6CD1, /* 0x40 */ + 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, /* 0x50 */ + 0x7082, 0x709A, 0x7083, 0x726A, 0x72D6, 0x72CB, 0x72D8, 0x72C9, /* 0x50 */ + 0x72DC, 0x72D2, 0x72D4, 0x72DA, 0x72CC, 0x72D1, 0x73A4, 0x73A1, /* 0x60 */ + 0x73AD, 0x73A6, 0x73A2, 0x73A0, 0x73AC, 0x739D, 0x74DD, 0x74E8, /* 0x60 */ + 0x753F, 0x7540, 0x753E, 0x758C, 0x7598, 0x76AF, 0x76F3, 0x76F1, /* 0x70 */ + 0x76F0, 0x76F5, 0x77F8, 0x77FC, 0x77F9, 0x77FB, 0x77FA, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x77F7, 0x7942, 0x793F, 0x79C5, 0x7A78, 0x7A7B, 0x7AFB, /* 0xA0 */ + 0x7C75, 0x7CFD, 0x8035, 0x808F, 0x80AE, 0x80A3, 0x80B8, 0x80B5, /* 0xA0 */ + 0x80AD, 0x8220, 0x82A0, 0x82C0, 0x82AB, 0x829A, 0x8298, 0x829B, /* 0xB0 */ + 0x82B5, 0x82A7, 0x82AE, 0x82BC, 0x829E, 0x82BA, 0x82B4, 0x82A8, /* 0xB0 */ + 0x82A1, 0x82A9, 0x82C2, 0x82A4, 0x82C3, 0x82B6, 0x82A2, 0x8670, /* 0xC0 */ + 0x866F, 0x866D, 0x866E, 0x8C56, 0x8FD2, 0x8FCB, 0x8FD3, 0x8FCD, /* 0xC0 */ + 0x8FD6, 0x8FD5, 0x8FD7, 0x90B2, 0x90B4, 0x90AF, 0x90B3, 0x90B0, /* 0xD0 */ + 0x9639, 0x963D, 0x963C, 0x963A, 0x9643, 0x4FCD, 0x4FC5, 0x4FD3, /* 0xD0 */ + 0x4FB2, 0x4FC9, 0x4FCB, 0x4FC1, 0x4FD4, 0x4FDC, 0x4FD9, 0x4FBB, /* 0xE0 */ + 0x4FB3, 0x4FDB, 0x4FC7, 0x4FD6, 0x4FBA, 0x4FC0, 0x4FB9, 0x4FEC, /* 0xE0 */ + 0x5244, 0x5249, 0x52C0, 0x52C2, 0x533D, 0x537C, 0x5397, 0x5396, /* 0xF0 */ + 0x5399, 0x5398, 0x54BA, 0x54A1, 0x54AD, 0x54A5, 0x54CF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_CE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x54C3, 0x830D, 0x54B7, 0x54AE, 0x54D6, 0x54B6, 0x54C5, 0x54C6, /* 0x40 */ + 0x54A0, 0x5470, 0x54BC, 0x54A2, 0x54BE, 0x5472, 0x54DE, 0x54B0, /* 0x40 */ + 0x57B5, 0x579E, 0x579F, 0x57A4, 0x578C, 0x5797, 0x579D, 0x579B, /* 0x50 */ + 0x5794, 0x5798, 0x578F, 0x5799, 0x57A5, 0x579A, 0x5795, 0x58F4, /* 0x50 */ + 0x590D, 0x5953, 0x59E1, 0x59DE, 0x59EE, 0x5A00, 0x59F1, 0x59DD, /* 0x60 */ + 0x59FA, 0x59FD, 0x59FC, 0x59F6, 0x59E4, 0x59F2, 0x59F7, 0x59DB, /* 0x60 */ + 0x59E9, 0x59F3, 0x59F5, 0x59E0, 0x59FE, 0x59F4, 0x59ED, 0x5BA8, /* 0x70 */ + 0x5C4C, 0x5CD0, 0x5CD8, 0x5CCC, 0x5CD7, 0x5CCB, 0x5CDB, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5CDE, 0x5CDA, 0x5CC9, 0x5CC7, 0x5CCA, 0x5CD6, 0x5CD3, /* 0xA0 */ + 0x5CD4, 0x5CCF, 0x5CC8, 0x5CC6, 0x5CCE, 0x5CDF, 0x5CF8, 0x5DF9, /* 0xA0 */ + 0x5E21, 0x5E22, 0x5E23, 0x5E20, 0x5E24, 0x5EB0, 0x5EA4, 0x5EA2, /* 0xB0 */ + 0x5E9B, 0x5EA3, 0x5EA5, 0x5F07, 0x5F2E, 0x5F56, 0x5F86, 0x6037, /* 0xB0 */ + 0x6039, 0x6054, 0x6072, 0x605E, 0x6045, 0x6053, 0x6047, 0x6049, /* 0xC0 */ + 0x605B, 0x604C, 0x6040, 0x6042, 0x605F, 0x6024, 0x6044, 0x6058, /* 0xC0 */ + 0x6066, 0x606E, 0x6242, 0x6243, 0x62CF, 0x630D, 0x630B, 0x62F5, /* 0xD0 */ + 0x630E, 0x6303, 0x62EB, 0x62F9, 0x630F, 0x630C, 0x62F8, 0x62F6, /* 0xD0 */ + 0x6300, 0x6313, 0x6314, 0x62FA, 0x6315, 0x62FB, 0x62F0, 0x6541, /* 0xE0 */ + 0x6543, 0x65AA, 0x65BF, 0x6636, 0x6621, 0x6632, 0x6635, 0x661C, /* 0xE0 */ + 0x6626, 0x6622, 0x6633, 0x662B, 0x663A, 0x661D, 0x6634, 0x6639, /* 0xF0 */ + 0x662E, 0x670F, 0x6710, 0x67C1, 0x67F2, 0x67C8, 0x67BA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_CF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x67DC, 0x67BB, 0x67F8, 0x67D8, 0x67C0, 0x67B7, 0x67C5, 0x67EB, /* 0x40 */ + 0x67E4, 0x67DF, 0x67B5, 0x67CD, 0x67B3, 0x67F7, 0x67F6, 0x67EE, /* 0x40 */ + 0x67E3, 0x67C2, 0x67B9, 0x67CE, 0x67E7, 0x67F0, 0x67B2, 0x67FC, /* 0x50 */ + 0x67C6, 0x67ED, 0x67CC, 0x67AE, 0x67E6, 0x67DB, 0x67FA, 0x67C9, /* 0x50 */ + 0x67CA, 0x67C3, 0x67EA, 0x67CB, 0x6B28, 0x6B82, 0x6B84, 0x6BB6, /* 0x60 */ + 0x6BD6, 0x6BD8, 0x6BE0, 0x6C20, 0x6C21, 0x6D28, 0x6D34, 0x6D2D, /* 0x60 */ + 0x6D1F, 0x6D3C, 0x6D3F, 0x6D12, 0x6D0A, 0x6CDA, 0x6D33, 0x6D04, /* 0x70 */ + 0x6D19, 0x6D3A, 0x6D1A, 0x6D11, 0x6D00, 0x6D1D, 0x6D42, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6D01, 0x6D18, 0x6D37, 0x6D03, 0x6D0F, 0x6D40, 0x6D07, /* 0xA0 */ + 0x6D20, 0x6D2C, 0x6D08, 0x6D22, 0x6D09, 0x6D10, 0x70B7, 0x709F, /* 0xA0 */ + 0x70BE, 0x70B1, 0x70B0, 0x70A1, 0x70B4, 0x70B5, 0x70A9, 0x7241, /* 0xB0 */ + 0x7249, 0x724A, 0x726C, 0x7270, 0x7273, 0x726E, 0x72CA, 0x72E4, /* 0xB0 */ + 0x72E8, 0x72EB, 0x72DF, 0x72EA, 0x72E6, 0x72E3, 0x7385, 0x73CC, /* 0xC0 */ + 0x73C2, 0x73C8, 0x73C5, 0x73B9, 0x73B6, 0x73B5, 0x73B4, 0x73EB, /* 0xC0 */ + 0x73BF, 0x73C7, 0x73BE, 0x73C3, 0x73C6, 0x73B8, 0x73CB, 0x74EC, /* 0xD0 */ + 0x74EE, 0x752E, 0x7547, 0x7548, 0x75A7, 0x75AA, 0x7679, 0x76C4, /* 0xD0 */ + 0x7708, 0x7703, 0x7704, 0x7705, 0x770A, 0x76F7, 0x76FB, 0x76FA, /* 0xE0 */ + 0x77E7, 0x77E8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780F, /* 0xE0 */ + 0x780E, 0x7809, 0x7803, 0x7813, 0x794A, 0x794C, 0x794B, 0x7945, /* 0xF0 */ + 0x7944, 0x79D5, 0x79CD, 0x79CF, 0x79D6, 0x79CE, 0x7A80 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7A7E, 0x7AD1, 0x7B00, 0x7B01, 0x7C7A, 0x7C78, 0x7C79, 0x7C7F, /* 0x40 */ + 0x7C80, 0x7C81, 0x7D03, 0x7D08, 0x7D01, 0x7F58, 0x7F91, 0x7F8D, /* 0x40 */ + 0x7FBE, 0x8007, 0x800E, 0x800F, 0x8014, 0x8037, 0x80D8, 0x80C7, /* 0x50 */ + 0x80E0, 0x80D1, 0x80C8, 0x80C2, 0x80D0, 0x80C5, 0x80E3, 0x80D9, /* 0x50 */ + 0x80DC, 0x80CA, 0x80D5, 0x80C9, 0x80CF, 0x80D7, 0x80E6, 0x80CD, /* 0x60 */ + 0x81FF, 0x8221, 0x8294, 0x82D9, 0x82FE, 0x82F9, 0x8307, 0x82E8, /* 0x60 */ + 0x8300, 0x82D5, 0x833A, 0x82EB, 0x82D6, 0x82F4, 0x82EC, 0x82E1, /* 0x70 */ + 0x82F2, 0x82F5, 0x830C, 0x82FB, 0x82F6, 0x82F0, 0x82EA, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x82E4, 0x82E0, 0x82FA, 0x82F3, 0x82ED, 0x8677, 0x8674, /* 0xA0 */ + 0x867C, 0x8673, 0x8841, 0x884E, 0x8867, 0x886A, 0x8869, 0x89D3, /* 0xA0 */ + 0x8A04, 0x8A07, 0x8D72, 0x8FE3, 0x8FE1, 0x8FEE, 0x8FE0, 0x90F1, /* 0xB0 */ + 0x90BD, 0x90BF, 0x90D5, 0x90C5, 0x90BE, 0x90C7, 0x90CB, 0x90C8, /* 0xB0 */ + 0x91D4, 0x91D3, 0x9654, 0x964F, 0x9651, 0x9653, 0x964A, 0x964E, /* 0xC0 */ + 0x501E, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501B, 0x4FF5, /* 0xC0 */ + 0x4FF4, 0x5033, 0x5037, 0x502C, 0x4FF6, 0x4FF7, 0x5017, 0x501C, /* 0xD0 */ + 0x5020, 0x5027, 0x5035, 0x502F, 0x5031, 0x500E, 0x515A, 0x5194, /* 0xD0 */ + 0x5193, 0x51CA, 0x51C4, 0x51C5, 0x51C8, 0x51CE, 0x5261, 0x525A, /* 0xE0 */ + 0x5252, 0x525E, 0x525F, 0x5255, 0x5262, 0x52CD, 0x530E, 0x539E, /* 0xE0 */ + 0x5526, 0x54E2, 0x5517, 0x5512, 0x54E7, 0x54F3, 0x54E4, 0x551A, /* 0xF0 */ + 0x54FF, 0x5504, 0x5508, 0x54EB, 0x5511, 0x5505, 0x54F1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x550A, 0x54FB, 0x54F7, 0x54F8, 0x54E0, 0x550E, 0x5503, 0x550B, /* 0x40 */ + 0x5701, 0x5702, 0x57CC, 0x5832, 0x57D5, 0x57D2, 0x57BA, 0x57C6, /* 0x40 */ + 0x57BD, 0x57BC, 0x57B8, 0x57B6, 0x57BF, 0x57C7, 0x57D0, 0x57B9, /* 0x50 */ + 0x57C1, 0x590E, 0x594A, 0x5A19, 0x5A16, 0x5A2D, 0x5A2E, 0x5A15, /* 0x50 */ + 0x5A0F, 0x5A17, 0x5A0A, 0x5A1E, 0x5A33, 0x5B6C, 0x5BA7, 0x5BAD, /* 0x60 */ + 0x5BAC, 0x5C03, 0x5C56, 0x5C54, 0x5CEC, 0x5CFF, 0x5CEE, 0x5CF1, /* 0x60 */ + 0x5CF7, 0x5D00, 0x5CF9, 0x5E29, 0x5E28, 0x5EA8, 0x5EAE, 0x5EAA, /* 0x70 */ + 0x5EAC, 0x5F33, 0x5F30, 0x5F67, 0x605D, 0x605A, 0x6067, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6041, 0x60A2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609D, /* 0xA0 */ + 0x6083, 0x6095, 0x609B, 0x6097, 0x6087, 0x609C, 0x608E, 0x6219, /* 0xA0 */ + 0x6246, 0x62F2, 0x6310, 0x6356, 0x632C, 0x6344, 0x6345, 0x6336, /* 0xB0 */ + 0x6343, 0x63E4, 0x6339, 0x634B, 0x634A, 0x633C, 0x6329, 0x6341, /* 0xB0 */ + 0x6334, 0x6358, 0x6354, 0x6359, 0x632D, 0x6347, 0x6333, 0x635A, /* 0xC0 */ + 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654A, 0x6546, 0x65C6, /* 0xC0 */ + 0x65C3, 0x65C4, 0x65C2, 0x664A, 0x665F, 0x6647, 0x6651, 0x6712, /* 0xD0 */ + 0x6713, 0x681F, 0x681A, 0x6849, 0x6832, 0x6833, 0x683B, 0x684B, /* 0xD0 */ + 0x684F, 0x6816, 0x6831, 0x681C, 0x6835, 0x682B, 0x682D, 0x682F, /* 0xE0 */ + 0x684E, 0x6844, 0x6834, 0x681D, 0x6812, 0x6814, 0x6826, 0x6828, /* 0xE0 */ + 0x682E, 0x684D, 0x683A, 0x6825, 0x6820, 0x6B2C, 0x6B2F, 0x6B2D, /* 0xF0 */ + 0x6B31, 0x6B34, 0x6B6D, 0x8082, 0x6B88, 0x6BE6, 0x6BE4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6BE8, 0x6BE3, 0x6BE2, 0x6BE7, 0x6C25, 0x6D7A, 0x6D63, 0x6D64, /* 0x40 */ + 0x6D76, 0x6D0D, 0x6D61, 0x6D92, 0x6D58, 0x6D62, 0x6D6D, 0x6D6F, /* 0x40 */ + 0x6D91, 0x6D8D, 0x6DEF, 0x6D7F, 0x6D86, 0x6D5E, 0x6D67, 0x6D60, /* 0x50 */ + 0x6D97, 0x6D70, 0x6D7C, 0x6D5F, 0x6D82, 0x6D98, 0x6D2F, 0x6D68, /* 0x50 */ + 0x6D8B, 0x6D7E, 0x6D80, 0x6D84, 0x6D16, 0x6D83, 0x6D7B, 0x6D7D, /* 0x60 */ + 0x6D75, 0x6D90, 0x70DC, 0x70D3, 0x70D1, 0x70DD, 0x70CB, 0x7F39, /* 0x60 */ + 0x70E2, 0x70D7, 0x70D2, 0x70DE, 0x70E0, 0x70D4, 0x70CD, 0x70C5, /* 0x70 */ + 0x70C6, 0x70C7, 0x70DA, 0x70CE, 0x70E1, 0x7242, 0x7278, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7277, 0x7276, 0x7300, 0x72FA, 0x72F4, 0x72FE, 0x72F6, /* 0xA0 */ + 0x72F3, 0x72FB, 0x7301, 0x73D3, 0x73D9, 0x73E5, 0x73D6, 0x73BC, /* 0xA0 */ + 0x73E7, 0x73E3, 0x73E9, 0x73DC, 0x73D2, 0x73DB, 0x73D4, 0x73DD, /* 0xB0 */ + 0x73DA, 0x73D7, 0x73D8, 0x73E8, 0x74DE, 0x74DF, 0x74F4, 0x74F5, /* 0xB0 */ + 0x7521, 0x755B, 0x755F, 0x75B0, 0x75C1, 0x75BB, 0x75C4, 0x75C0, /* 0xC0 */ + 0x75BF, 0x75B6, 0x75BA, 0x768A, 0x76C9, 0x771D, 0x771B, 0x7710, /* 0xC0 */ + 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771A, 0x7722, /* 0xD0 */ + 0x7727, 0x7823, 0x782C, 0x7822, 0x7835, 0x782F, 0x7828, 0x782E, /* 0xD0 */ + 0x782B, 0x7821, 0x7829, 0x7833, 0x782A, 0x7831, 0x7954, 0x795B, /* 0xE0 */ + 0x794F, 0x795C, 0x7953, 0x7952, 0x7951, 0x79EB, 0x79EC, 0x79E0, /* 0xE0 */ + 0x79EE, 0x79ED, 0x79EA, 0x79DC, 0x79DE, 0x79DD, 0x7A86, 0x7A89, /* 0xF0 */ + 0x7A85, 0x7A8B, 0x7A8C, 0x7A8A, 0x7A87, 0x7AD8, 0x7B10 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7B04, 0x7B13, 0x7B05, 0x7B0F, 0x7B08, 0x7B0A, 0x7B0E, 0x7B09, /* 0x40 */ + 0x7B12, 0x7C84, 0x7C91, 0x7C8A, 0x7C8C, 0x7C88, 0x7C8D, 0x7C85, /* 0x40 */ + 0x7D1E, 0x7D1D, 0x7D11, 0x7D0E, 0x7D18, 0x7D16, 0x7D13, 0x7D1F, /* 0x50 */ + 0x7D12, 0x7D0F, 0x7D0C, 0x7F5C, 0x7F61, 0x7F5E, 0x7F60, 0x7F5D, /* 0x50 */ + 0x7F5B, 0x7F96, 0x7F92, 0x7FC3, 0x7FC2, 0x7FC0, 0x8016, 0x803E, /* 0x60 */ + 0x8039, 0x80FA, 0x80F2, 0x80F9, 0x80F5, 0x8101, 0x80FB, 0x8100, /* 0x60 */ + 0x8201, 0x822F, 0x8225, 0x8333, 0x832D, 0x8344, 0x8319, 0x8351, /* 0x70 */ + 0x8325, 0x8356, 0x833F, 0x8341, 0x8326, 0x831C, 0x8322, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8342, 0x834E, 0x831B, 0x832A, 0x8308, 0x833C, 0x834D, /* 0xA0 */ + 0x8316, 0x8324, 0x8320, 0x8337, 0x832F, 0x8329, 0x8347, 0x8345, /* 0xA0 */ + 0x834C, 0x8353, 0x831E, 0x832C, 0x834B, 0x8327, 0x8348, 0x8653, /* 0xB0 */ + 0x8652, 0x86A2, 0x86A8, 0x8696, 0x868D, 0x8691, 0x869E, 0x8687, /* 0xB0 */ + 0x8697, 0x8686, 0x868B, 0x869A, 0x8685, 0x86A5, 0x8699, 0x86A1, /* 0xC0 */ + 0x86A7, 0x8695, 0x8698, 0x868E, 0x869D, 0x8690, 0x8694, 0x8843, /* 0xC0 */ + 0x8844, 0x886D, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887F, /* 0xD0 */ + 0x886F, 0x8883, 0x887E, 0x8874, 0x887C, 0x8A12, 0x8C47, 0x8C57, /* 0xD0 */ + 0x8C7B, 0x8CA4, 0x8CA3, 0x8D76, 0x8D78, 0x8DB5, 0x8DB7, 0x8DB6, /* 0xE0 */ + 0x8ED1, 0x8ED3, 0x8FFE, 0x8FF5, 0x9002, 0x8FFF, 0x8FFB, 0x9004, /* 0xE0 */ + 0x8FFC, 0x8FF6, 0x90D6, 0x90E0, 0x90D9, 0x90DA, 0x90E3, 0x90DF, /* 0xF0 */ + 0x90E5, 0x90D8, 0x90DB, 0x90D7, 0x90DC, 0x90E4, 0x9150 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x914E, 0x914F, 0x91D5, 0x91E2, 0x91DA, 0x965C, 0x965F, 0x96BC, /* 0x40 */ + 0x98E3, 0x9ADF, 0x9B2F, 0x4E7F, 0x5070, 0x506A, 0x5061, 0x505E, /* 0x40 */ + 0x5060, 0x5053, 0x504B, 0x505D, 0x5072, 0x5048, 0x504D, 0x5041, /* 0x50 */ + 0x505B, 0x504A, 0x5062, 0x5015, 0x5045, 0x505F, 0x5069, 0x506B, /* 0x50 */ + 0x5063, 0x5064, 0x5046, 0x5040, 0x506E, 0x5073, 0x5057, 0x5051, /* 0x60 */ + 0x51D0, 0x526B, 0x526D, 0x526C, 0x526E, 0x52D6, 0x52D3, 0x532D, /* 0x60 */ + 0x539C, 0x5575, 0x5576, 0x553C, 0x554D, 0x5550, 0x5534, 0x552A, /* 0x70 */ + 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x550C, 0x5532, 0x5565, 0x554E, 0x5539, 0x5548, 0x552D, /* 0xA0 */ + 0x553B, 0x5540, 0x554B, 0x570A, 0x5707, 0x57FB, 0x5814, 0x57E2, /* 0xA0 */ + 0x57F6, 0x57DC, 0x57F4, 0x5800, 0x57ED, 0x57FD, 0x5808, 0x57F8, /* 0xB0 */ + 0x580B, 0x57F3, 0x57CF, 0x5807, 0x57EE, 0x57E3, 0x57F2, 0x57E5, /* 0xB0 */ + 0x57EC, 0x57E1, 0x580E, 0x57FC, 0x5810, 0x57E7, 0x5801, 0x580C, /* 0xC0 */ + 0x57F1, 0x57E9, 0x57F0, 0x580D, 0x5804, 0x595C, 0x5A60, 0x5A58, /* 0xC0 */ + 0x5A55, 0x5A67, 0x5A5E, 0x5A38, 0x5A35, 0x5A6D, 0x5A50, 0x5A5F, /* 0xD0 */ + 0x5A65, 0x5A6C, 0x5A53, 0x5A64, 0x5A57, 0x5A43, 0x5A5D, 0x5A52, /* 0xD0 */ + 0x5A44, 0x5A5B, 0x5A48, 0x5A8E, 0x5A3E, 0x5A4D, 0x5A39, 0x5A4C, /* 0xE0 */ + 0x5A70, 0x5A69, 0x5A47, 0x5A51, 0x5A56, 0x5A42, 0x5A5C, 0x5B72, /* 0xE0 */ + 0x5B6E, 0x5BC1, 0x5BC0, 0x5C59, 0x5D1E, 0x5D0B, 0x5D1D, 0x5D1A, /* 0xF0 */ + 0x5D20, 0x5D0C, 0x5D28, 0x5D0D, 0x5D26, 0x5D25, 0x5D0F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5D30, 0x5D12, 0x5D23, 0x5D1F, 0x5D2E, 0x5E3E, 0x5E34, 0x5EB1, /* 0x40 */ + 0x5EB4, 0x5EB9, 0x5EB2, 0x5EB3, 0x5F36, 0x5F38, 0x5F9B, 0x5F96, /* 0x40 */ + 0x5F9F, 0x608A, 0x6090, 0x6086, 0x60BE, 0x60B0, 0x60BA, 0x60D3, /* 0x50 */ + 0x60D4, 0x60CF, 0x60E4, 0x60D9, 0x60DD, 0x60C8, 0x60B1, 0x60DB, /* 0x50 */ + 0x60B7, 0x60CA, 0x60BF, 0x60C3, 0x60CD, 0x60C0, 0x6332, 0x6365, /* 0x60 */ + 0x638A, 0x6382, 0x637D, 0x63BD, 0x639E, 0x63AD, 0x639D, 0x6397, /* 0x60 */ + 0x63AB, 0x638E, 0x636F, 0x6387, 0x6390, 0x636E, 0x63AF, 0x6375, /* 0x70 */ + 0x639C, 0x636D, 0x63AE, 0x637C, 0x63A4, 0x633B, 0x639F, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6378, 0x6385, 0x6381, 0x6391, 0x638D, 0x6370, 0x6553, /* 0xA0 */ + 0x65CD, 0x6665, 0x6661, 0x665B, 0x6659, 0x665C, 0x6662, 0x6718, /* 0xA0 */ + 0x6879, 0x6887, 0x6890, 0x689C, 0x686D, 0x686E, 0x68AE, 0x68AB, /* 0xB0 */ + 0x6956, 0x686F, 0x68A3, 0x68AC, 0x68A9, 0x6875, 0x6874, 0x68B2, /* 0xB0 */ + 0x688F, 0x6877, 0x6892, 0x687C, 0x686B, 0x6872, 0x68AA, 0x6880, /* 0xC0 */ + 0x6871, 0x687E, 0x689B, 0x6896, 0x688B, 0x68A0, 0x6889, 0x68A4, /* 0xC0 */ + 0x6878, 0x687B, 0x6891, 0x688C, 0x688A, 0x687D, 0x6B36, 0x6B33, /* 0xD0 */ + 0x6B37, 0x6B38, 0x6B91, 0x6B8F, 0x6B8D, 0x6B8E, 0x6B8C, 0x6C2A, /* 0xD0 */ + 0x6DC0, 0x6DAB, 0x6DB4, 0x6DB3, 0x6E74, 0x6DAC, 0x6DE9, 0x6DE2, /* 0xE0 */ + 0x6DB7, 0x6DF6, 0x6DD4, 0x6E00, 0x6DC8, 0x6DE0, 0x6DDF, 0x6DD6, /* 0xE0 */ + 0x6DBE, 0x6DE5, 0x6DDC, 0x6DDD, 0x6DDB, 0x6DF4, 0x6DCA, 0x6DBD, /* 0xF0 */ + 0x6DED, 0x6DF0, 0x6DBA, 0x6DD5, 0x6DC2, 0x6DCF, 0x6DC9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6DD0, 0x6DF2, 0x6DD3, 0x6DFD, 0x6DD7, 0x6DCD, 0x6DE3, 0x6DBB, /* 0x40 */ + 0x70FA, 0x710D, 0x70F7, 0x7117, 0x70F4, 0x710C, 0x70F0, 0x7104, /* 0x40 */ + 0x70F3, 0x7110, 0x70FC, 0x70FF, 0x7106, 0x7113, 0x7100, 0x70F8, /* 0x50 */ + 0x70F6, 0x710B, 0x7102, 0x710E, 0x727E, 0x727B, 0x727C, 0x727F, /* 0x50 */ + 0x731D, 0x7317, 0x7307, 0x7311, 0x7318, 0x730A, 0x7308, 0x72FF, /* 0x60 */ + 0x730F, 0x731E, 0x7388, 0x73F6, 0x73F8, 0x73F5, 0x7404, 0x7401, /* 0x60 */ + 0x73FD, 0x7407, 0x7400, 0x73FA, 0x73FC, 0x73FF, 0x740C, 0x740B, /* 0x70 */ + 0x73F4, 0x7408, 0x7564, 0x7563, 0x75CE, 0x75D2, 0x75CF, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x75CB, 0x75CC, 0x75D1, 0x75D0, 0x768F, 0x7689, 0x76D3, /* 0xA0 */ + 0x7739, 0x772F, 0x772D, 0x7731, 0x7732, 0x7734, 0x7733, 0x773D, /* 0xA0 */ + 0x7725, 0x773B, 0x7735, 0x7848, 0x7852, 0x7849, 0x784D, 0x784A, /* 0xB0 */ + 0x784C, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796A, /* 0xB0 */ + 0x7963, 0x796B, 0x7961, 0x79BB, 0x79FA, 0x79F8, 0x79F6, 0x79F7, /* 0xC0 */ + 0x7A8F, 0x7A94, 0x7A90, 0x7B35, 0x7B47, 0x7B34, 0x7B25, 0x7B30, /* 0xC0 */ + 0x7B22, 0x7B24, 0x7B33, 0x7B18, 0x7B2A, 0x7B1D, 0x7B31, 0x7B2B, /* 0xD0 */ + 0x7B2D, 0x7B2F, 0x7B32, 0x7B38, 0x7B1A, 0x7B23, 0x7C94, 0x7C98, /* 0xD0 */ + 0x7C96, 0x7CA3, 0x7D35, 0x7D3D, 0x7D38, 0x7D36, 0x7D3A, 0x7D45, /* 0xE0 */ + 0x7D2C, 0x7D29, 0x7D41, 0x7D47, 0x7D3E, 0x7D3F, 0x7D4A, 0x7D3B, /* 0xE0 */ + 0x7D28, 0x7F63, 0x7F95, 0x7F9C, 0x7F9D, 0x7F9B, 0x7FCA, 0x7FCB, /* 0xF0 */ + 0x7FCD, 0x7FD0, 0x7FD1, 0x7FC7, 0x7FCF, 0x7FC9, 0x801F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x801E, 0x801B, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, /* 0x40 */ + 0x811B, 0x812D, 0x811F, 0x812C, 0x811E, 0x8121, 0x8115, 0x8127, /* 0x40 */ + 0x811D, 0x8122, 0x8211, 0x8238, 0x8233, 0x823A, 0x8234, 0x8232, /* 0x50 */ + 0x8274, 0x8390, 0x83A3, 0x83A8, 0x838D, 0x837A, 0x8373, 0x83A4, /* 0x50 */ + 0x8374, 0x838F, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83A9, /* 0x60 */ + 0x837D, 0x8383, 0x838C, 0x839D, 0x839B, 0x83AA, 0x838B, 0x837E, /* 0x60 */ + 0x83A5, 0x83AF, 0x8388, 0x8397, 0x83B0, 0x837F, 0x83A6, 0x8387, /* 0x70 */ + 0x83AE, 0x8376, 0x839A, 0x8659, 0x8656, 0x86BF, 0x86B7, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x86C2, 0x86C1, 0x86C5, 0x86BA, 0x86B0, 0x86C8, 0x86B9, /* 0xA0 */ + 0x86B3, 0x86B8, 0x86CC, 0x86B4, 0x86BB, 0x86BC, 0x86C3, 0x86BD, /* 0xA0 */ + 0x86BE, 0x8852, 0x8889, 0x8895, 0x88A8, 0x88A2, 0x88AA, 0x889A, /* 0xB0 */ + 0x8891, 0x88A1, 0x889F, 0x8898, 0x88A7, 0x8899, 0x889B, 0x8897, /* 0xB0 */ + 0x88A4, 0x88AC, 0x888C, 0x8893, 0x888E, 0x8982, 0x89D6, 0x89D9, /* 0xC0 */ + 0x89D5, 0x8A30, 0x8A27, 0x8A2C, 0x8A1E, 0x8C39, 0x8C3B, 0x8C5C, /* 0xC0 */ + 0x8C5D, 0x8C7D, 0x8CA5, 0x8D7D, 0x8D7B, 0x8D79, 0x8DBC, 0x8DC2, /* 0xD0 */ + 0x8DB9, 0x8DBF, 0x8DC1, 0x8ED8, 0x8EDE, 0x8EDD, 0x8EDC, 0x8ED7, /* 0xD0 */ + 0x8EE0, 0x8EE1, 0x9024, 0x900B, 0x9011, 0x901C, 0x900C, 0x9021, /* 0xE0 */ + 0x90EF, 0x90EA, 0x90F0, 0x90F4, 0x90F2, 0x90F3, 0x90D4, 0x90EB, /* 0xE0 */ + 0x90EC, 0x90E9, 0x9156, 0x9158, 0x915A, 0x9153, 0x9155, 0x91EC, /* 0xF0 */ + 0x91F4, 0x91F1, 0x91F3, 0x91F8, 0x91E4, 0x91F9, 0x91EA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x91EB, 0x91F7, 0x91E8, 0x91EE, 0x957A, 0x9586, 0x9588, 0x967C, /* 0x40 */ + 0x966D, 0x966B, 0x9671, 0x966F, 0x96BF, 0x976A, 0x9804, 0x98E5, /* 0x40 */ + 0x9997, 0x509B, 0x5095, 0x5094, 0x509E, 0x508B, 0x50A3, 0x5083, /* 0x50 */ + 0x508C, 0x508E, 0x509D, 0x5068, 0x509C, 0x5092, 0x5082, 0x5087, /* 0x50 */ + 0x515F, 0x51D4, 0x5312, 0x5311, 0x53A4, 0x53A7, 0x5591, 0x55A8, /* 0x60 */ + 0x55A5, 0x55AD, 0x5577, 0x5645, 0x55A2, 0x5593, 0x5588, 0x558F, /* 0x60 */ + 0x55B5, 0x5581, 0x55A3, 0x5592, 0x55A4, 0x557D, 0x558C, 0x55A6, /* 0x70 */ + 0x557F, 0x5595, 0x55A1, 0x558E, 0x570C, 0x5829, 0x5837, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5819, 0x581E, 0x5827, 0x5823, 0x5828, 0x57F5, 0x5848, /* 0xA0 */ + 0x5825, 0x581C, 0x581B, 0x5833, 0x583F, 0x5836, 0x582E, 0x5839, /* 0xA0 */ + 0x5838, 0x582D, 0x582C, 0x583B, 0x5961, 0x5AAF, 0x5A94, 0x5A9F, /* 0xB0 */ + 0x5A7A, 0x5AA2, 0x5A9E, 0x5A78, 0x5AA6, 0x5A7C, 0x5AA5, 0x5AAC, /* 0xB0 */ + 0x5A95, 0x5AAE, 0x5A37, 0x5A84, 0x5A8A, 0x5A97, 0x5A83, 0x5A8B, /* 0xC0 */ + 0x5AA9, 0x5A7B, 0x5A7D, 0x5A8C, 0x5A9C, 0x5A8F, 0x5A93, 0x5A9D, /* 0xC0 */ + 0x5BEA, 0x5BCD, 0x5BCB, 0x5BD4, 0x5BD1, 0x5BCA, 0x5BCE, 0x5C0C, /* 0xD0 */ + 0x5C30, 0x5D37, 0x5D43, 0x5D6B, 0x5D41, 0x5D4B, 0x5D3F, 0x5D35, /* 0xD0 */ + 0x5D51, 0x5D4E, 0x5D55, 0x5D33, 0x5D3A, 0x5D52, 0x5D3D, 0x5D31, /* 0xE0 */ + 0x5D59, 0x5D42, 0x5D39, 0x5D49, 0x5D38, 0x5D3C, 0x5D32, 0x5D36, /* 0xE0 */ + 0x5D40, 0x5D45, 0x5E44, 0x5E41, 0x5F58, 0x5FA6, 0x5FA5, 0x5FAB, /* 0xF0 */ + 0x60C9, 0x60B9, 0x60CC, 0x60E2, 0x60CE, 0x60C4, 0x6114 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_D9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x60F2, 0x610A, 0x6116, 0x6105, 0x60F5, 0x6113, 0x60F8, 0x60FC, /* 0x40 */ + 0x60FE, 0x60C1, 0x6103, 0x6118, 0x611D, 0x6110, 0x60FF, 0x6104, /* 0x40 */ + 0x610B, 0x624A, 0x6394, 0x63B1, 0x63B0, 0x63CE, 0x63E5, 0x63E8, /* 0x50 */ + 0x63EF, 0x63C3, 0x649D, 0x63F3, 0x63CA, 0x63E0, 0x63F6, 0x63D5, /* 0x50 */ + 0x63F2, 0x63F5, 0x6461, 0x63DF, 0x63BE, 0x63DD, 0x63DC, 0x63C4, /* 0x60 */ + 0x63D8, 0x63D3, 0x63C2, 0x63C7, 0x63CC, 0x63CB, 0x63C8, 0x63F0, /* 0x60 */ + 0x63D7, 0x63D9, 0x6532, 0x6567, 0x656A, 0x6564, 0x655C, 0x6568, /* 0x70 */ + 0x6565, 0x658C, 0x659D, 0x659E, 0x65AE, 0x65D0, 0x65D2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x667C, 0x666C, 0x667B, 0x6680, 0x6671, 0x6679, 0x666A, /* 0xA0 */ + 0x6672, 0x6701, 0x690C, 0x68D3, 0x6904, 0x68DC, 0x692A, 0x68EC, /* 0xA0 */ + 0x68EA, 0x68F1, 0x690F, 0x68D6, 0x68F7, 0x68EB, 0x68E4, 0x68F6, /* 0xB0 */ + 0x6913, 0x6910, 0x68F3, 0x68E1, 0x6907, 0x68CC, 0x6908, 0x6970, /* 0xB0 */ + 0x68B4, 0x6911, 0x68EF, 0x68C6, 0x6914, 0x68F8, 0x68D0, 0x68FD, /* 0xC0 */ + 0x68FC, 0x68E8, 0x690B, 0x690A, 0x6917, 0x68CE, 0x68C8, 0x68DD, /* 0xC0 */ + 0x68DE, 0x68E6, 0x68F4, 0x68D1, 0x6906, 0x68D4, 0x68E9, 0x6915, /* 0xD0 */ + 0x6925, 0x68C7, 0x6B39, 0x6B3B, 0x6B3F, 0x6B3C, 0x6B94, 0x6B97, /* 0xD0 */ + 0x6B99, 0x6B95, 0x6BBD, 0x6BF0, 0x6BF2, 0x6BF3, 0x6C30, 0x6DFC, /* 0xE0 */ + 0x6E46, 0x6E47, 0x6E1F, 0x6E49, 0x6E88, 0x6E3C, 0x6E3D, 0x6E45, /* 0xE0 */ + 0x6E62, 0x6E2B, 0x6E3F, 0x6E41, 0x6E5D, 0x6E73, 0x6E1C, 0x6E33, /* 0xF0 */ + 0x6E4B, 0x6E40, 0x6E51, 0x6E3B, 0x6E03, 0x6E2E, 0x6E5E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_DA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6E68, 0x6E5C, 0x6E61, 0x6E31, 0x6E28, 0x6E60, 0x6E71, 0x6E6B, /* 0x40 */ + 0x6E39, 0x6E22, 0x6E30, 0x6E53, 0x6E65, 0x6E27, 0x6E78, 0x6E64, /* 0x40 */ + 0x6E77, 0x6E55, 0x6E79, 0x6E52, 0x6E66, 0x6E35, 0x6E36, 0x6E5A, /* 0x50 */ + 0x7120, 0x711E, 0x712F, 0x70FB, 0x712E, 0x7131, 0x7123, 0x7125, /* 0x50 */ + 0x7122, 0x7132, 0x711F, 0x7128, 0x713A, 0x711B, 0x724B, 0x725A, /* 0x60 */ + 0x7288, 0x7289, 0x7286, 0x7285, 0x728B, 0x7312, 0x730B, 0x7330, /* 0x60 */ + 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732D, 0x7326, 0x7323, /* 0x70 */ + 0x7335, 0x730C, 0x742E, 0x742C, 0x7430, 0x742B, 0x7416, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x741A, 0x7421, 0x742D, 0x7431, 0x7424, 0x7423, 0x741D, /* 0xA0 */ + 0x7429, 0x7420, 0x7432, 0x74FB, 0x752F, 0x756F, 0x756C, 0x75E7, /* 0xA0 */ + 0x75DA, 0x75E1, 0x75E6, 0x75DD, 0x75DF, 0x75E4, 0x75D7, 0x7695, /* 0xB0 */ + 0x7692, 0x76DA, 0x7746, 0x7747, 0x7744, 0x774D, 0x7745, 0x774A, /* 0xB0 */ + 0x774E, 0x774B, 0x774C, 0x77DE, 0x77EC, 0x7860, 0x7864, 0x7865, /* 0xC0 */ + 0x785C, 0x786D, 0x7871, 0x786A, 0x786E, 0x7870, 0x7869, 0x7868, /* 0xC0 */ + 0x785E, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7A02, 0x7A0A, /* 0xD0 */ + 0x7A03, 0x7A0C, 0x7A04, 0x7A99, 0x7AE6, 0x7AE4, 0x7B4A, 0x7B3B, /* 0xD0 */ + 0x7B44, 0x7B48, 0x7B4C, 0x7B4E, 0x7B40, 0x7B58, 0x7B45, 0x7CA2, /* 0xE0 */ + 0x7C9E, 0x7CA8, 0x7CA1, 0x7D58, 0x7D6F, 0x7D63, 0x7D53, 0x7D56, /* 0xE0 */ + 0x7D67, 0x7D6A, 0x7D4F, 0x7D6D, 0x7D5C, 0x7D6B, 0x7D52, 0x7D54, /* 0xF0 */ + 0x7D69, 0x7D51, 0x7D5F, 0x7D4E, 0x7F3E, 0x7F3F, 0x7F65 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_DB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7F66, 0x7FA2, 0x7FA0, 0x7FA1, 0x7FD7, 0x8051, 0x804F, 0x8050, /* 0x40 */ + 0x80FE, 0x80D4, 0x8143, 0x814A, 0x8152, 0x814F, 0x8147, 0x813D, /* 0x40 */ + 0x814D, 0x813A, 0x81E6, 0x81EE, 0x81F7, 0x81F8, 0x81F9, 0x8204, /* 0x50 */ + 0x823C, 0x823D, 0x823F, 0x8275, 0x833B, 0x83CF, 0x83F9, 0x8423, /* 0x50 */ + 0x83C0, 0x83E8, 0x8412, 0x83E7, 0x83E4, 0x83FC, 0x83F6, 0x8410, /* 0x60 */ + 0x83C6, 0x83C8, 0x83EB, 0x83E3, 0x83BF, 0x8401, 0x83DD, 0x83E5, /* 0x60 */ + 0x83D8, 0x83FF, 0x83E1, 0x83CB, 0x83CE, 0x83D6, 0x83F5, 0x83C9, /* 0x70 */ + 0x8409, 0x840F, 0x83DE, 0x8411, 0x8406, 0x83C2, 0x83F3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x83D5, 0x83FA, 0x83C7, 0x83D1, 0x83EA, 0x8413, 0x83C3, /* 0xA0 */ + 0x83EC, 0x83EE, 0x83C4, 0x83FB, 0x83D7, 0x83E2, 0x841B, 0x83DB, /* 0xA0 */ + 0x83FE, 0x86D8, 0x86E2, 0x86E6, 0x86D3, 0x86E3, 0x86DA, 0x86EA, /* 0xB0 */ + 0x86DD, 0x86EB, 0x86DC, 0x86EC, 0x86E9, 0x86D7, 0x86E8, 0x86D1, /* 0xB0 */ + 0x8848, 0x8856, 0x8855, 0x88BA, 0x88D7, 0x88B9, 0x88B8, 0x88C0, /* 0xC0 */ + 0x88BE, 0x88B6, 0x88BC, 0x88B7, 0x88BD, 0x88B2, 0x8901, 0x88C9, /* 0xC0 */ + 0x8995, 0x8998, 0x8997, 0x89DD, 0x89DA, 0x89DB, 0x8A4E, 0x8A4D, /* 0xD0 */ + 0x8A39, 0x8A59, 0x8A40, 0x8A57, 0x8A58, 0x8A44, 0x8A45, 0x8A52, /* 0xD0 */ + 0x8A48, 0x8A51, 0x8A4A, 0x8A4C, 0x8A4F, 0x8C5F, 0x8C81, 0x8C80, /* 0xE0 */ + 0x8CBA, 0x8CBE, 0x8CB0, 0x8CB9, 0x8CB5, 0x8D84, 0x8D80, 0x8D89, /* 0xE0 */ + 0x8DD8, 0x8DD3, 0x8DCD, 0x8DC7, 0x8DD6, 0x8DDC, 0x8DCF, 0x8DD5, /* 0xF0 */ + 0x8DD9, 0x8DC8, 0x8DD7, 0x8DC5, 0x8EEF, 0x8EF7, 0x8EFA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_DC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8EF9, 0x8EE6, 0x8EEE, 0x8EE5, 0x8EF5, 0x8EE7, 0x8EE8, 0x8EF6, /* 0x40 */ + 0x8EEB, 0x8EF1, 0x8EEC, 0x8EF4, 0x8EE9, 0x902D, 0x9034, 0x902F, /* 0x40 */ + 0x9106, 0x912C, 0x9104, 0x90FF, 0x90FC, 0x9108, 0x90F9, 0x90FB, /* 0x50 */ + 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915F, /* 0x50 */ + 0x9162, 0x9160, 0x9201, 0x920A, 0x9225, 0x9203, 0x921A, 0x9226, /* 0x60 */ + 0x920F, 0x920C, 0x9200, 0x9212, 0x91FF, 0x91FD, 0x9206, 0x9204, /* 0x60 */ + 0x9227, 0x9202, 0x921C, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, /* 0x70 */ + 0x957B, 0x958D, 0x958C, 0x9590, 0x9687, 0x967E, 0x9688, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9689, 0x9683, 0x9680, 0x96C2, 0x96C8, 0x96C3, 0x96F1, /* 0xA0 */ + 0x96F0, 0x976C, 0x9770, 0x976E, 0x9807, 0x98A9, 0x98EB, 0x9CE6, /* 0xA0 */ + 0x9EF9, 0x4E83, 0x4E84, 0x4EB6, 0x50BD, 0x50BF, 0x50C6, 0x50AE, /* 0xB0 */ + 0x50C4, 0x50CA, 0x50B4, 0x50C8, 0x50C2, 0x50B0, 0x50C1, 0x50BA, /* 0xB0 */ + 0x50B1, 0x50CB, 0x50C9, 0x50B6, 0x50B8, 0x51D7, 0x527A, 0x5278, /* 0xC0 */ + 0x527B, 0x527C, 0x55C3, 0x55DB, 0x55CC, 0x55D0, 0x55CB, 0x55CA, /* 0xC0 */ + 0x55DD, 0x55C0, 0x55D4, 0x55C4, 0x55E9, 0x55BF, 0x55D2, 0x558D, /* 0xD0 */ + 0x55CF, 0x55D5, 0x55E2, 0x55D6, 0x55C8, 0x55F2, 0x55CD, 0x55D9, /* 0xD0 */ + 0x55C2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584F, 0x584D, 0x5849, /* 0xE0 */ + 0x586F, 0x5855, 0x584E, 0x585D, 0x5859, 0x5865, 0x585B, 0x583D, /* 0xE0 */ + 0x5863, 0x5871, 0x58FC, 0x5AC7, 0x5AC4, 0x5ACB, 0x5ABA, 0x5AB8, /* 0xF0 */ + 0x5AB1, 0x5AB5, 0x5AB0, 0x5ABF, 0x5AC8, 0x5ABB, 0x5AC6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_DD[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5AB7, 0x5AC0, 0x5ACA, 0x5AB4, 0x5AB6, 0x5ACD, 0x5AB9, 0x5A90, /* 0x40 */ + 0x5BD6, 0x5BD8, 0x5BD9, 0x5C1F, 0x5C33, 0x5D71, 0x5D63, 0x5D4A, /* 0x40 */ + 0x5D65, 0x5D72, 0x5D6C, 0x5D5E, 0x5D68, 0x5D67, 0x5D62, 0x5DF0, /* 0x50 */ + 0x5E4F, 0x5E4E, 0x5E4A, 0x5E4D, 0x5E4B, 0x5EC5, 0x5ECC, 0x5EC6, /* 0x50 */ + 0x5ECB, 0x5EC7, 0x5F40, 0x5FAF, 0x5FAD, 0x60F7, 0x6149, 0x614A, /* 0x60 */ + 0x612B, 0x6145, 0x6136, 0x6132, 0x612E, 0x6146, 0x612F, 0x614F, /* 0x60 */ + 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63C5, /* 0x70 */ + 0x63F1, 0x63EB, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6433, 0x6443, 0x641F, 0x6415, 0x6418, 0x6439, 0x6437, /* 0xA0 */ + 0x6422, 0x6423, 0x640C, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, /* 0xA0 */ + 0x642F, 0x640A, 0x641A, 0x6440, 0x6425, 0x6427, 0x640B, 0x63E7, /* 0xB0 */ + 0x641B, 0x642E, 0x6421, 0x640E, 0x656F, 0x6592, 0x65D3, 0x6686, /* 0xB0 */ + 0x668C, 0x6695, 0x6690, 0x668B, 0x668A, 0x6699, 0x6694, 0x6678, /* 0xC0 */ + 0x6720, 0x6966, 0x695F, 0x6938, 0x694E, 0x6962, 0x6971, 0x693F, /* 0xC0 */ + 0x6945, 0x696A, 0x6939, 0x6942, 0x6957, 0x6959, 0x697A, 0x6948, /* 0xD0 */ + 0x6949, 0x6935, 0x696C, 0x6933, 0x693D, 0x6965, 0x68F0, 0x6978, /* 0xD0 */ + 0x6934, 0x6969, 0x6940, 0x696F, 0x6944, 0x6976, 0x6958, 0x6941, /* 0xE0 */ + 0x6974, 0x694C, 0x693B, 0x694B, 0x6937, 0x695C, 0x694F, 0x6951, /* 0xE0 */ + 0x6932, 0x6952, 0x692F, 0x697B, 0x693C, 0x6B46, 0x6B45, 0x6B43, /* 0xF0 */ + 0x6B42, 0x6B48, 0x6B41, 0x6B9B, 0xFA0D, 0x6BFB, 0x6BFC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_DE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6BF9, 0x6BF7, 0x6BF8, 0x6E9B, 0x6ED6, 0x6EC8, 0x6E8F, 0x6EC0, /* 0x40 */ + 0x6E9F, 0x6E93, 0x6E94, 0x6EA0, 0x6EB1, 0x6EB9, 0x6EC6, 0x6ED2, /* 0x40 */ + 0x6EBD, 0x6EC1, 0x6E9E, 0x6EC9, 0x6EB7, 0x6EB0, 0x6ECD, 0x6EA6, /* 0x50 */ + 0x6ECF, 0x6EB2, 0x6EBE, 0x6EC3, 0x6EDC, 0x6ED8, 0x6E99, 0x6E92, /* 0x50 */ + 0x6E8E, 0x6E8D, 0x6EA4, 0x6EA1, 0x6EBF, 0x6EB3, 0x6ED0, 0x6ECA, /* 0x60 */ + 0x6E97, 0x6EAE, 0x6EA3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, /* 0x60 */ + 0x7141, 0x715D, 0x7162, 0x7172, 0x7178, 0x716A, 0x7161, 0x7142, /* 0x70 */ + 0x7158, 0x7143, 0x714B, 0x7170, 0x715F, 0x7150, 0x7153, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7144, 0x714D, 0x715A, 0x724F, 0x728D, 0x728C, 0x7291, /* 0xA0 */ + 0x7290, 0x728E, 0x733C, 0x7342, 0x733B, 0x733A, 0x7340, 0x734A, /* 0xA0 */ + 0x7349, 0x7444, 0x744A, 0x744B, 0x7452, 0x7451, 0x7457, 0x7440, /* 0xB0 */ + 0x744F, 0x7450, 0x744E, 0x7442, 0x7446, 0x744D, 0x7454, 0x74E1, /* 0xB0 */ + 0x74FF, 0x74FE, 0x74FD, 0x751D, 0x7579, 0x7577, 0x6983, 0x75EF, /* 0xC0 */ + 0x760F, 0x7603, 0x75F7, 0x75FE, 0x75FC, 0x75F9, 0x75F8, 0x7610, /* 0xC0 */ + 0x75FB, 0x75F6, 0x75ED, 0x75F5, 0x75FD, 0x7699, 0x76B5, 0x76DD, /* 0xD0 */ + 0x7755, 0x775F, 0x7760, 0x7752, 0x7756, 0x775A, 0x7769, 0x7767, /* 0xD0 */ + 0x7754, 0x7759, 0x776D, 0x77E0, 0x7887, 0x789A, 0x7894, 0x788F, /* 0xE0 */ + 0x7884, 0x7895, 0x7885, 0x7886, 0x78A1, 0x7883, 0x7879, 0x7899, /* 0xE0 */ + 0x7880, 0x7896, 0x787B, 0x797C, 0x7982, 0x797D, 0x7979, 0x7A11, /* 0xF0 */ + 0x7A18, 0x7A19, 0x7A12, 0x7A17, 0x7A15, 0x7A22, 0x7A13 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_DF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7A1B, 0x7A10, 0x7AA3, 0x7AA2, 0x7A9E, 0x7AEB, 0x7B66, 0x7B64, /* 0x40 */ + 0x7B6D, 0x7B74, 0x7B69, 0x7B72, 0x7B65, 0x7B73, 0x7B71, 0x7B70, /* 0x40 */ + 0x7B61, 0x7B78, 0x7B76, 0x7B63, 0x7CB2, 0x7CB4, 0x7CAF, 0x7D88, /* 0x50 */ + 0x7D86, 0x7D80, 0x7D8D, 0x7D7F, 0x7D85, 0x7D7A, 0x7D8E, 0x7D7B, /* 0x50 */ + 0x7D83, 0x7D7C, 0x7D8C, 0x7D94, 0x7D84, 0x7D7D, 0x7D92, 0x7F6D, /* 0x60 */ + 0x7F6B, 0x7F67, 0x7F68, 0x7F6C, 0x7FA6, 0x7FA5, 0x7FA7, 0x7FDB, /* 0x60 */ + 0x7FDC, 0x8021, 0x8164, 0x8160, 0x8177, 0x815C, 0x8169, 0x815B, /* 0x70 */ + 0x8162, 0x8172, 0x6721, 0x815E, 0x8176, 0x8167, 0x816F, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8144, 0x8161, 0x821D, 0x8249, 0x8244, 0x8240, 0x8242, /* 0xA0 */ + 0x8245, 0x84F1, 0x843F, 0x8456, 0x8476, 0x8479, 0x848F, 0x848D, /* 0xA0 */ + 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844D, 0x847D, /* 0xB0 */ + 0x845A, 0x8459, 0x8474, 0x8473, 0x845D, 0x8507, 0x845E, 0x8437, /* 0xB0 */ + 0x843A, 0x8434, 0x847A, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, /* 0xC0 */ + 0x83D9, 0x844B, 0x842F, 0x8442, 0x842D, 0x845F, 0x8470, 0x8439, /* 0xC0 */ + 0x844E, 0x844C, 0x8452, 0x846F, 0x84C5, 0x848E, 0x843B, 0x8447, /* 0xD0 */ + 0x8436, 0x8433, 0x8468, 0x847E, 0x8444, 0x842B, 0x8460, 0x8454, /* 0xD0 */ + 0x846E, 0x8450, 0x870B, 0x8704, 0x86F7, 0x870C, 0x86FA, 0x86D6, /* 0xE0 */ + 0x86F5, 0x874D, 0x86F8, 0x870E, 0x8709, 0x8701, 0x86F6, 0x870D, /* 0xE0 */ + 0x8705, 0x88D6, 0x88CB, 0x88CD, 0x88CE, 0x88DE, 0x88DB, 0x88DA, /* 0xF0 */ + 0x88CC, 0x88D0, 0x8985, 0x899B, 0x89DF, 0x89E5, 0x89E4 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x89E1, 0x89E0, 0x89E2, 0x89DC, 0x89E6, 0x8A76, 0x8A86, 0x8A7F, /* 0x40 */ + 0x8A61, 0x8A3F, 0x8A77, 0x8A82, 0x8A84, 0x8A75, 0x8A83, 0x8A81, /* 0x40 */ + 0x8A74, 0x8A7A, 0x8C3C, 0x8C4B, 0x8C4A, 0x8C65, 0x8C64, 0x8C66, /* 0x50 */ + 0x8C86, 0x8C84, 0x8C85, 0x8CCC, 0x8D68, 0x8D69, 0x8D91, 0x8D8C, /* 0x50 */ + 0x8D8E, 0x8D8F, 0x8D8D, 0x8D93, 0x8D94, 0x8D90, 0x8D92, 0x8DF0, /* 0x60 */ + 0x8DE0, 0x8DEC, 0x8DF1, 0x8DEE, 0x8DD0, 0x8DE9, 0x8DE3, 0x8DE2, /* 0x60 */ + 0x8DE7, 0x8DF2, 0x8DEB, 0x8DF4, 0x8F06, 0x8EFF, 0x8F01, 0x8F00, /* 0x70 */ + 0x8F05, 0x8F07, 0x8F08, 0x8F02, 0x8F0B, 0x9052, 0x903F, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9044, 0x9049, 0x903D, 0x9110, 0x910D, 0x910F, 0x9111, /* 0xA0 */ + 0x9116, 0x9114, 0x910B, 0x910E, 0x916E, 0x916F, 0x9248, 0x9252, /* 0xA0 */ + 0x9230, 0x923A, 0x9266, 0x9233, 0x9265, 0x925E, 0x9283, 0x922E, /* 0xB0 */ + 0x924A, 0x9246, 0x926D, 0x926C, 0x924F, 0x9260, 0x9267, 0x926F, /* 0xB0 */ + 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, /* 0xC0 */ + 0x924E, 0x9253, 0x924C, 0x9256, 0x9232, 0x959F, 0x959C, 0x959E, /* 0xC0 */ + 0x959B, 0x9692, 0x9693, 0x9691, 0x9697, 0x96CE, 0x96FA, 0x96FD, /* 0xD0 */ + 0x96F8, 0x96F5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980F, 0x980D, /* 0xD0 */ + 0x980E, 0x98AC, 0x98F6, 0x98F9, 0x99AF, 0x99B2, 0x99B0, 0x99B5, /* 0xE0 */ + 0x9AAD, 0x9AAB, 0x9B5B, 0x9CEA, 0x9CED, 0x9CE7, 0x9E80, 0x9EFD, /* 0xE0 */ + 0x50E6, 0x50D4, 0x50D7, 0x50E8, 0x50F3, 0x50DB, 0x50EA, 0x50DD, /* 0xF0 */ + 0x50E4, 0x50D3, 0x50EC, 0x50F0, 0x50EF, 0x50E3, 0x50E0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x51D8, 0x5280, 0x5281, 0x52E9, 0x52EB, 0x5330, 0x53AC, 0x5627, /* 0x40 */ + 0x5615, 0x560C, 0x5612, 0x55FC, 0x560F, 0x561C, 0x5601, 0x5613, /* 0x40 */ + 0x5602, 0x55FA, 0x561D, 0x5604, 0x55FF, 0x55F9, 0x5889, 0x587C, /* 0x50 */ + 0x5890, 0x5898, 0x5886, 0x5881, 0x587F, 0x5874, 0x588B, 0x587A, /* 0x50 */ + 0x5887, 0x5891, 0x588E, 0x5876, 0x5882, 0x5888, 0x587B, 0x5894, /* 0x60 */ + 0x588F, 0x58FE, 0x596B, 0x5ADC, 0x5AEE, 0x5AE5, 0x5AD5, 0x5AEA, /* 0x60 */ + 0x5ADA, 0x5AED, 0x5AEB, 0x5AF3, 0x5AE2, 0x5AE0, 0x5ADB, 0x5AEC, /* 0x70 */ + 0x5ADE, 0x5ADD, 0x5AD9, 0x5AE8, 0x5ADF, 0x5B77, 0x5BE0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x5BE3, 0x5C63, 0x5D82, 0x5D80, 0x5D7D, 0x5D86, 0x5D7A, /* 0xA0 */ + 0x5D81, 0x5D77, 0x5D8A, 0x5D89, 0x5D88, 0x5D7E, 0x5D7C, 0x5D8D, /* 0xA0 */ + 0x5D79, 0x5D7F, 0x5E58, 0x5E59, 0x5E53, 0x5ED8, 0x5ED1, 0x5ED7, /* 0xB0 */ + 0x5ECE, 0x5EDC, 0x5ED5, 0x5ED9, 0x5ED2, 0x5ED4, 0x5F44, 0x5F43, /* 0xB0 */ + 0x5F6F, 0x5FB6, 0x612C, 0x6128, 0x6141, 0x615E, 0x6171, 0x6173, /* 0xC0 */ + 0x6152, 0x6153, 0x6172, 0x616C, 0x6180, 0x6174, 0x6154, 0x617A, /* 0xC0 */ + 0x615B, 0x6165, 0x613B, 0x616A, 0x6161, 0x6156, 0x6229, 0x6227, /* 0xD0 */ + 0x622B, 0x642B, 0x644D, 0x645B, 0x645D, 0x6474, 0x6476, 0x6472, /* 0xD0 */ + 0x6473, 0x647D, 0x6475, 0x6466, 0x64A6, 0x644E, 0x6482, 0x645E, /* 0xE0 */ + 0x645C, 0x644B, 0x6453, 0x6460, 0x6450, 0x647F, 0x643F, 0x646C, /* 0xE0 */ + 0x646B, 0x6459, 0x6465, 0x6477, 0x6573, 0x65A0, 0x66A1, 0x66A0, /* 0xF0 */ + 0x669F, 0x6705, 0x6704, 0x6722, 0x69B1, 0x69B6, 0x69C9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x69A0, 0x69CE, 0x6996, 0x69B0, 0x69AC, 0x69BC, 0x6991, 0x6999, /* 0x40 */ + 0x698E, 0x69A7, 0x698D, 0x69A9, 0x69BE, 0x69AF, 0x69BF, 0x69C4, /* 0x40 */ + 0x69BD, 0x69A4, 0x69D4, 0x69B9, 0x69CA, 0x699A, 0x69CF, 0x69B3, /* 0x50 */ + 0x6993, 0x69AA, 0x69A1, 0x699E, 0x69D9, 0x6997, 0x6990, 0x69C2, /* 0x50 */ + 0x69B5, 0x69A5, 0x69C6, 0x6B4A, 0x6B4D, 0x6B4B, 0x6B9E, 0x6B9F, /* 0x60 */ + 0x6BA0, 0x6BC3, 0x6BC4, 0x6BFE, 0x6ECE, 0x6EF5, 0x6EF1, 0x6F03, /* 0x60 */ + 0x6F25, 0x6EF8, 0x6F37, 0x6EFB, 0x6F2E, 0x6F09, 0x6F4E, 0x6F19, /* 0x70 */ + 0x6F1A, 0x6F27, 0x6F18, 0x6F3B, 0x6F12, 0x6EED, 0x6F0A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x6F36, 0x6F73, 0x6EF9, 0x6EEE, 0x6F2D, 0x6F40, 0x6F30, /* 0xA0 */ + 0x6F3C, 0x6F35, 0x6EEB, 0x6F07, 0x6F0E, 0x6F43, 0x6F05, 0x6EFD, /* 0xA0 */ + 0x6EF6, 0x6F39, 0x6F1C, 0x6EFC, 0x6F3A, 0x6F1F, 0x6F0D, 0x6F1E, /* 0xB0 */ + 0x6F08, 0x6F21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, /* 0xB0 */ + 0x718F, 0x717B, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, /* 0xC0 */ + 0x7295, 0x7293, 0x7343, 0x734D, 0x7351, 0x734C, 0x7462, 0x7473, /* 0xC0 */ + 0x7471, 0x7475, 0x7472, 0x7467, 0x746E, 0x7500, 0x7502, 0x7503, /* 0xD0 */ + 0x757D, 0x7590, 0x7616, 0x7608, 0x760C, 0x7615, 0x7611, 0x760A, /* 0xD0 */ + 0x7614, 0x76B8, 0x7781, 0x777C, 0x7785, 0x7782, 0x776E, 0x7780, /* 0xE0 */ + 0x776F, 0x777E, 0x7783, 0x78B2, 0x78AA, 0x78B4, 0x78AD, 0x78A8, /* 0xE0 */ + 0x787E, 0x78AB, 0x789E, 0x78A5, 0x78A0, 0x78AC, 0x78A2, 0x78A4, /* 0xF0 */ + 0x7998, 0x798A, 0x798B, 0x7996, 0x7995, 0x7994, 0x7993 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7997, 0x7988, 0x7992, 0x7990, 0x7A2B, 0x7A4A, 0x7A30, 0x7A2F, /* 0x40 */ + 0x7A28, 0x7A26, 0x7AA8, 0x7AAB, 0x7AAC, 0x7AEE, 0x7B88, 0x7B9C, /* 0x40 */ + 0x7B8A, 0x7B91, 0x7B90, 0x7B96, 0x7B8D, 0x7B8C, 0x7B9B, 0x7B8E, /* 0x50 */ + 0x7B85, 0x7B98, 0x5284, 0x7B99, 0x7BA4, 0x7B82, 0x7CBB, 0x7CBF, /* 0x50 */ + 0x7CBC, 0x7CBA, 0x7DA7, 0x7DB7, 0x7DC2, 0x7DA3, 0x7DAA, 0x7DC1, /* 0x60 */ + 0x7DC0, 0x7DC5, 0x7D9D, 0x7DCE, 0x7DC4, 0x7DC6, 0x7DCB, 0x7DCC, /* 0x60 */ + 0x7DAF, 0x7DB9, 0x7D96, 0x7DBC, 0x7D9F, 0x7DA6, 0x7DAE, 0x7DA9, /* 0x70 */ + 0x7DA1, 0x7DC9, 0x7F73, 0x7FE2, 0x7FE3, 0x7FE5, 0x7FDE, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8024, 0x805D, 0x805C, 0x8189, 0x8186, 0x8183, 0x8187, /* 0xA0 */ + 0x818D, 0x818C, 0x818B, 0x8215, 0x8497, 0x84A4, 0x84A1, 0x849F, /* 0xA0 */ + 0x84BA, 0x84CE, 0x84C2, 0x84AC, 0x84AE, 0x84AB, 0x84B9, 0x84B4, /* 0xB0 */ + 0x84C1, 0x84CD, 0x84AA, 0x849A, 0x84B1, 0x84D0, 0x849D, 0x84A7, /* 0xB0 */ + 0x84BB, 0x84A2, 0x8494, 0x84C7, 0x84CC, 0x849B, 0x84A9, 0x84AF, /* 0xC0 */ + 0x84A8, 0x84D6, 0x8498, 0x84B6, 0x84CF, 0x84A0, 0x84D7, 0x84D4, /* 0xC0 */ + 0x84D2, 0x84DB, 0x84B0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, /* 0xD0 */ + 0x876B, 0x8740, 0x872E, 0x871E, 0x8721, 0x8719, 0x871B, 0x8743, /* 0xD0 */ + 0x872C, 0x8741, 0x873E, 0x8746, 0x8720, 0x8732, 0x872A, 0x872D, /* 0xE0 */ + 0x873C, 0x8712, 0x873A, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, /* 0xE0 */ + 0x8738, 0x8724, 0x871A, 0x8730, 0x8711, 0x88F7, 0x88E7, 0x88F1, /* 0xF0 */ + 0x88F2, 0x88FA, 0x88FE, 0x88EE, 0x88FC, 0x88F6, 0x88FB /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x88F0, 0x88EC, 0x88EB, 0x899D, 0x89A1, 0x899F, 0x899E, 0x89E9, /* 0x40 */ + 0x89EB, 0x89E8, 0x8AAB, 0x8A99, 0x8A8B, 0x8A92, 0x8A8F, 0x8A96, /* 0x40 */ + 0x8C3D, 0x8C68, 0x8C69, 0x8CD5, 0x8CCF, 0x8CD7, 0x8D96, 0x8E09, /* 0x50 */ + 0x8E02, 0x8DFF, 0x8E0D, 0x8DFD, 0x8E0A, 0x8E03, 0x8E07, 0x8E06, /* 0x50 */ + 0x8E05, 0x8DFE, 0x8E00, 0x8E04, 0x8F10, 0x8F11, 0x8F0E, 0x8F0D, /* 0x60 */ + 0x9123, 0x911C, 0x9120, 0x9122, 0x911F, 0x911D, 0x911A, 0x9124, /* 0x60 */ + 0x9121, 0x911B, 0x917A, 0x9172, 0x9179, 0x9173, 0x92A5, 0x92A4, /* 0x70 */ + 0x9276, 0x929B, 0x927A, 0x92A0, 0x9294, 0x92AA, 0x928D, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x92A6, 0x929A, 0x92AB, 0x9279, 0x9297, 0x927F, 0x92A3, /* 0xA0 */ + 0x92EE, 0x928E, 0x9282, 0x9295, 0x92A2, 0x927D, 0x9288, 0x92A1, /* 0xA0 */ + 0x928A, 0x9286, 0x928C, 0x9299, 0x92A7, 0x927E, 0x9287, 0x92A9, /* 0xB0 */ + 0x929D, 0x928B, 0x922D, 0x969E, 0x96A1, 0x96FF, 0x9758, 0x977D, /* 0xB0 */ + 0x977A, 0x977E, 0x9783, 0x9780, 0x9782, 0x977B, 0x9784, 0x9781, /* 0xC0 */ + 0x977F, 0x97CE, 0x97CD, 0x9816, 0x98AD, 0x98AE, 0x9902, 0x9900, /* 0xC0 */ + 0x9907, 0x999D, 0x999C, 0x99C3, 0x99B9, 0x99BB, 0x99BA, 0x99C2, /* 0xD0 */ + 0x99BD, 0x99C7, 0x9AB1, 0x9AE3, 0x9AE7, 0x9B3E, 0x9B3F, 0x9B60, /* 0xD0 */ + 0x9B61, 0x9B5F, 0x9CF1, 0x9CF2, 0x9CF5, 0x9EA7, 0x50FF, 0x5103, /* 0xE0 */ + 0x5130, 0x50F8, 0x5106, 0x5107, 0x50F6, 0x50FE, 0x510B, 0x510C, /* 0xE0 */ + 0x50FD, 0x510A, 0x528B, 0x528C, 0x52F1, 0x52EF, 0x5648, 0x5642, /* 0xF0 */ + 0x564C, 0x5635, 0x5641, 0x564A, 0x5649, 0x5646, 0x5658 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x565A, 0x5640, 0x5633, 0x563D, 0x562C, 0x563E, 0x5638, 0x562A, /* 0x40 */ + 0x563A, 0x571A, 0x58AB, 0x589D, 0x58B1, 0x58A0, 0x58A3, 0x58AF, /* 0x40 */ + 0x58AC, 0x58A5, 0x58A1, 0x58FF, 0x5AFF, 0x5AF4, 0x5AFD, 0x5AF7, /* 0x50 */ + 0x5AF6, 0x5B03, 0x5AF8, 0x5B02, 0x5AF9, 0x5B01, 0x5B07, 0x5B05, /* 0x50 */ + 0x5B0F, 0x5C67, 0x5D99, 0x5D97, 0x5D9F, 0x5D92, 0x5DA2, 0x5D93, /* 0x60 */ + 0x5D95, 0x5DA0, 0x5D9C, 0x5DA1, 0x5D9A, 0x5D9E, 0x5E69, 0x5E5D, /* 0x60 */ + 0x5E60, 0x5E5C, 0x7DF3, 0x5EDB, 0x5EDE, 0x5EE1, 0x5F49, 0x5FB2, /* 0x70 */ + 0x618B, 0x6183, 0x6179, 0x61B1, 0x61B0, 0x61A2, 0x6189, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x619B, 0x6193, 0x61AF, 0x61AD, 0x619F, 0x6192, 0x61AA, /* 0xA0 */ + 0x61A1, 0x618D, 0x6166, 0x61B3, 0x622D, 0x646E, 0x6470, 0x6496, /* 0xA0 */ + 0x64A0, 0x6485, 0x6497, 0x649C, 0x648F, 0x648B, 0x648A, 0x648C, /* 0xB0 */ + 0x64A3, 0x649F, 0x6468, 0x64B1, 0x6498, 0x6576, 0x657A, 0x6579, /* 0xB0 */ + 0x657B, 0x65B2, 0x65B3, 0x66B5, 0x66B0, 0x66A9, 0x66B2, 0x66B7, /* 0xC0 */ + 0x66AA, 0x66AF, 0x6A00, 0x6A06, 0x6A17, 0x69E5, 0x69F8, 0x6A15, /* 0xC0 */ + 0x69F1, 0x69E4, 0x6A20, 0x69FF, 0x69EC, 0x69E2, 0x6A1B, 0x6A1D, /* 0xD0 */ + 0x69FE, 0x6A27, 0x69F2, 0x69EE, 0x6A14, 0x69F7, 0x69E7, 0x6A40, /* 0xD0 */ + 0x6A08, 0x69E6, 0x69FB, 0x6A0D, 0x69FC, 0x69EB, 0x6A09, 0x6A04, /* 0xE0 */ + 0x6A18, 0x6A25, 0x6A0F, 0x69F6, 0x6A26, 0x6A07, 0x69F4, 0x6A16, /* 0xE0 */ + 0x6B51, 0x6BA5, 0x6BA3, 0x6BA2, 0x6BA6, 0x6C01, 0x6C00, 0x6BFF, /* 0xF0 */ + 0x6C02, 0x6F41, 0x6F26, 0x6F7E, 0x6F87, 0x6FC6, 0x6F92 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6F8D, 0x6F89, 0x6F8C, 0x6F62, 0x6F4F, 0x6F85, 0x6F5A, 0x6F96, /* 0x40 */ + 0x6F76, 0x6F6C, 0x6F82, 0x6F55, 0x6F72, 0x6F52, 0x6F50, 0x6F57, /* 0x40 */ + 0x6F94, 0x6F93, 0x6F5D, 0x6F00, 0x6F61, 0x6F6B, 0x6F7D, 0x6F67, /* 0x50 */ + 0x6F90, 0x6F53, 0x6F8B, 0x6F69, 0x6F7F, 0x6F95, 0x6F63, 0x6F77, /* 0x50 */ + 0x6F6A, 0x6F7B, 0x71B2, 0x71AF, 0x719B, 0x71B0, 0x71A0, 0x719A, /* 0x60 */ + 0x71A9, 0x71B5, 0x719D, 0x71A5, 0x719E, 0x71A4, 0x71A1, 0x71AA, /* 0x60 */ + 0x719C, 0x71A7, 0x71B3, 0x7298, 0x729A, 0x7358, 0x7352, 0x735E, /* 0x70 */ + 0x735F, 0x7360, 0x735D, 0x735B, 0x7361, 0x735A, 0x7359, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7362, 0x7487, 0x7489, 0x748A, 0x7486, 0x7481, 0x747D, /* 0xA0 */ + 0x7485, 0x7488, 0x747C, 0x7479, 0x7508, 0x7507, 0x757E, 0x7625, /* 0xA0 */ + 0x761E, 0x7619, 0x761D, 0x761C, 0x7623, 0x761A, 0x7628, 0x761B, /* 0xB0 */ + 0x769C, 0x769D, 0x769E, 0x769B, 0x778D, 0x778F, 0x7789, 0x7788, /* 0xB0 */ + 0x78CD, 0x78BB, 0x78CF, 0x78CC, 0x78D1, 0x78CE, 0x78D4, 0x78C8, /* 0xC0 */ + 0x78C3, 0x78C4, 0x78C9, 0x799A, 0x79A1, 0x79A0, 0x799C, 0x79A2, /* 0xC0 */ + 0x799B, 0x6B76, 0x7A39, 0x7AB2, 0x7AB4, 0x7AB3, 0x7BB7, 0x7BCB, /* 0xD0 */ + 0x7BBE, 0x7BAC, 0x7BCE, 0x7BAF, 0x7BB9, 0x7BCA, 0x7BB5, 0x7CC5, /* 0xD0 */ + 0x7CC8, 0x7CCC, 0x7CCB, 0x7DF7, 0x7DDB, 0x7DEA, 0x7DE7, 0x7DD7, /* 0xE0 */ + 0x7DE1, 0x7E03, 0x7DFA, 0x7DE6, 0x7DF6, 0x7DF1, 0x7DF0, 0x7DEE, /* 0xE0 */ + 0x7DDF, 0x7F76, 0x7FAC, 0x7FB0, 0x7FAD, 0x7FED, 0x7FEB, 0x7FEA, /* 0xF0 */ + 0x7FEC, 0x7FE6, 0x7FE8, 0x8064, 0x8067, 0x81A3, 0x819F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x819E, 0x8195, 0x81A2, 0x8199, 0x8197, 0x8216, 0x824F, 0x8253, /* 0x40 */ + 0x8252, 0x8250, 0x824E, 0x8251, 0x8524, 0x853B, 0x850F, 0x8500, /* 0x40 */ + 0x8529, 0x850E, 0x8509, 0x850D, 0x851F, 0x850A, 0x8527, 0x851C, /* 0x50 */ + 0x84FB, 0x852B, 0x84FA, 0x8508, 0x850C, 0x84F4, 0x852A, 0x84F2, /* 0x50 */ + 0x8515, 0x84F7, 0x84EB, 0x84F3, 0x84FC, 0x8512, 0x84EA, 0x84E9, /* 0x60 */ + 0x8516, 0x84FE, 0x8528, 0x851D, 0x852E, 0x8502, 0x84FD, 0x851E, /* 0x60 */ + 0x84F6, 0x8531, 0x8526, 0x84E7, 0x84E8, 0x84F0, 0x84EF, 0x84F9, /* 0x70 */ + 0x8518, 0x8520, 0x8530, 0x850B, 0x8519, 0x852F, 0x8662, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8756, 0x8763, 0x8764, 0x8777, 0x87E1, 0x8773, 0x8758, /* 0xA0 */ + 0x8754, 0x875B, 0x8752, 0x8761, 0x875A, 0x8751, 0x875E, 0x876D, /* 0xA0 */ + 0x876A, 0x8750, 0x874E, 0x875F, 0x875D, 0x876F, 0x876C, 0x877A, /* 0xB0 */ + 0x876E, 0x875C, 0x8765, 0x874F, 0x877B, 0x8775, 0x8762, 0x8767, /* 0xB0 */ + 0x8769, 0x885A, 0x8905, 0x890C, 0x8914, 0x890B, 0x8917, 0x8918, /* 0xC0 */ + 0x8919, 0x8906, 0x8916, 0x8911, 0x890E, 0x8909, 0x89A2, 0x89A4, /* 0xC0 */ + 0x89A3, 0x89ED, 0x89F0, 0x89EC, 0x8ACF, 0x8AC6, 0x8AB8, 0x8AD3, /* 0xD0 */ + 0x8AD1, 0x8AD4, 0x8AD5, 0x8ABB, 0x8AD7, 0x8ABE, 0x8AC0, 0x8AC5, /* 0xD0 */ + 0x8AD8, 0x8AC3, 0x8ABA, 0x8ABD, 0x8AD9, 0x8C3E, 0x8C4D, 0x8C8F, /* 0xE0 */ + 0x8CE5, 0x8CDF, 0x8CD9, 0x8CE8, 0x8CDA, 0x8CDD, 0x8CE7, 0x8DA0, /* 0xE0 */ + 0x8D9C, 0x8DA1, 0x8D9B, 0x8E20, 0x8E23, 0x8E25, 0x8E24, 0x8E2E, /* 0xF0 */ + 0x8E15, 0x8E1B, 0x8E16, 0x8E11, 0x8E19, 0x8E26, 0x8E27 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E14, 0x8E12, 0x8E18, 0x8E13, 0x8E1C, 0x8E17, 0x8E1A, 0x8F2C, /* 0x40 */ + 0x8F24, 0x8F18, 0x8F1A, 0x8F20, 0x8F23, 0x8F16, 0x8F17, 0x9073, /* 0x40 */ + 0x9070, 0x906F, 0x9067, 0x906B, 0x912F, 0x912B, 0x9129, 0x912A, /* 0x50 */ + 0x9132, 0x9126, 0x912E, 0x9185, 0x9186, 0x918A, 0x9181, 0x9182, /* 0x50 */ + 0x9184, 0x9180, 0x92D0, 0x92C3, 0x92C4, 0x92C0, 0x92D9, 0x92B6, /* 0x60 */ + 0x92CF, 0x92F1, 0x92DF, 0x92D8, 0x92E9, 0x92D7, 0x92DD, 0x92CC, /* 0x60 */ + 0x92EF, 0x92C2, 0x92E8, 0x92CA, 0x92C8, 0x92CE, 0x92E6, 0x92CD, /* 0x70 */ + 0x92D5, 0x92C9, 0x92E0, 0x92DE, 0x92E7, 0x92D1, 0x92D3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x92B5, 0x92E1, 0x92C6, 0x92B4, 0x957C, 0x95AC, 0x95AB, /* 0xA0 */ + 0x95AE, 0x95B0, 0x96A4, 0x96A2, 0x96D3, 0x9705, 0x9708, 0x9702, /* 0xA0 */ + 0x975A, 0x978A, 0x978E, 0x9788, 0x97D0, 0x97CF, 0x981E, 0x981D, /* 0xB0 */ + 0x9826, 0x9829, 0x9828, 0x9820, 0x981B, 0x9827, 0x98B2, 0x9908, /* 0xB0 */ + 0x98FA, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99DC, 0x99CD, /* 0xC0 */ + 0x99CF, 0x99D3, 0x99D4, 0x99CE, 0x99C9, 0x99D6, 0x99D8, 0x99CB, /* 0xC0 */ + 0x99D7, 0x99CC, 0x9AB3, 0x9AEC, 0x9AEB, 0x9AF3, 0x9AF2, 0x9AF1, /* 0xD0 */ + 0x9B46, 0x9B43, 0x9B67, 0x9B74, 0x9B71, 0x9B66, 0x9B76, 0x9B75, /* 0xD0 */ + 0x9B70, 0x9B68, 0x9B64, 0x9B6C, 0x9CFC, 0x9CFA, 0x9CFD, 0x9CFF, /* 0xE0 */ + 0x9CF7, 0x9D07, 0x9D00, 0x9CF9, 0x9CFB, 0x9D08, 0x9D05, 0x9D04, /* 0xE0 */ + 0x9E83, 0x9ED3, 0x9F0F, 0x9F10, 0x511C, 0x5113, 0x5117, 0x511A, /* 0xF0 */ + 0x5111, 0x51DE, 0x5334, 0x53E1, 0x5670, 0x5660, 0x566E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_E9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5673, 0x5666, 0x5663, 0x566D, 0x5672, 0x565E, 0x5677, 0x571C, /* 0x40 */ + 0x571B, 0x58C8, 0x58BD, 0x58C9, 0x58BF, 0x58BA, 0x58C2, 0x58BC, /* 0x40 */ + 0x58C6, 0x5B17, 0x5B19, 0x5B1B, 0x5B21, 0x5B14, 0x5B13, 0x5B10, /* 0x50 */ + 0x5B16, 0x5B28, 0x5B1A, 0x5B20, 0x5B1E, 0x5BEF, 0x5DAC, 0x5DB1, /* 0x50 */ + 0x5DA9, 0x5DA7, 0x5DB5, 0x5DB0, 0x5DAE, 0x5DAA, 0x5DA8, 0x5DB2, /* 0x60 */ + 0x5DAD, 0x5DAF, 0x5DB4, 0x5E67, 0x5E68, 0x5E66, 0x5E6F, 0x5EE9, /* 0x60 */ + 0x5EE7, 0x5EE6, 0x5EE8, 0x5EE5, 0x5F4B, 0x5FBC, 0x619D, 0x61A8, /* 0x70 */ + 0x6196, 0x61C5, 0x61B4, 0x61C6, 0x61C1, 0x61CC, 0x61BA, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x61BF, 0x61B8, 0x618C, 0x64D7, 0x64D6, 0x64D0, 0x64CF, /* 0xA0 */ + 0x64C9, 0x64BD, 0x6489, 0x64C3, 0x64DB, 0x64F3, 0x64D9, 0x6533, /* 0xA0 */ + 0x657F, 0x657C, 0x65A2, 0x66C8, 0x66BE, 0x66C0, 0x66CA, 0x66CB, /* 0xB0 */ + 0x66CF, 0x66BD, 0x66BB, 0x66BA, 0x66CC, 0x6723, 0x6A34, 0x6A66, /* 0xB0 */ + 0x6A49, 0x6A67, 0x6A32, 0x6A68, 0x6A3E, 0x6A5D, 0x6A6D, 0x6A76, /* 0xC0 */ + 0x6A5B, 0x6A51, 0x6A28, 0x6A5A, 0x6A3B, 0x6A3F, 0x6A41, 0x6A6A, /* 0xC0 */ + 0x6A64, 0x6A50, 0x6A4F, 0x6A54, 0x6A6F, 0x6A69, 0x6A60, 0x6A3C, /* 0xD0 */ + 0x6A5E, 0x6A56, 0x6A55, 0x6A4D, 0x6A4E, 0x6A46, 0x6B55, 0x6B54, /* 0xD0 */ + 0x6B56, 0x6BA7, 0x6BAA, 0x6BAB, 0x6BC8, 0x6BC7, 0x6C04, 0x6C03, /* 0xE0 */ + 0x6C06, 0x6FAD, 0x6FCB, 0x6FA3, 0x6FC7, 0x6FBC, 0x6FCE, 0x6FC8, /* 0xE0 */ + 0x6F5E, 0x6FC4, 0x6FBD, 0x6F9E, 0x6FCA, 0x6FA8, 0x7004, 0x6FA5, /* 0xF0 */ + 0x6FAE, 0x6FBA, 0x6FAC, 0x6FAA, 0x6FCF, 0x6FBF, 0x6FB8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_EA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6FA2, 0x6FC9, 0x6FAB, 0x6FCD, 0x6FAF, 0x6FB2, 0x6FB0, 0x71C5, /* 0x40 */ + 0x71C2, 0x71BF, 0x71B8, 0x71D6, 0x71C0, 0x71C1, 0x71CB, 0x71D4, /* 0x40 */ + 0x71CA, 0x71C7, 0x71CF, 0x71BD, 0x71D8, 0x71BC, 0x71C6, 0x71DA, /* 0x50 */ + 0x71DB, 0x729D, 0x729E, 0x7369, 0x7366, 0x7367, 0x736C, 0x7365, /* 0x50 */ + 0x736B, 0x736A, 0x747F, 0x749A, 0x74A0, 0x7494, 0x7492, 0x7495, /* 0x60 */ + 0x74A1, 0x750B, 0x7580, 0x762F, 0x762D, 0x7631, 0x763D, 0x7633, /* 0x60 */ + 0x763C, 0x7635, 0x7632, 0x7630, 0x76BB, 0x76E6, 0x779A, 0x779D, /* 0x70 */ + 0x77A1, 0x779C, 0x779B, 0x77A2, 0x77A3, 0x7795, 0x7799, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7797, 0x78DD, 0x78E9, 0x78E5, 0x78EA, 0x78DE, 0x78E3, /* 0xA0 */ + 0x78DB, 0x78E1, 0x78E2, 0x78ED, 0x78DF, 0x78E0, 0x79A4, 0x7A44, /* 0xA0 */ + 0x7A48, 0x7A47, 0x7AB6, 0x7AB8, 0x7AB5, 0x7AB1, 0x7AB7, 0x7BDE, /* 0xB0 */ + 0x7BE3, 0x7BE7, 0x7BDD, 0x7BD5, 0x7BE5, 0x7BDA, 0x7BE8, 0x7BF9, /* 0xB0 */ + 0x7BD4, 0x7BEA, 0x7BE2, 0x7BDC, 0x7BEB, 0x7BD8, 0x7BDF, 0x7CD2, /* 0xC0 */ + 0x7CD4, 0x7CD7, 0x7CD0, 0x7CD1, 0x7E12, 0x7E21, 0x7E17, 0x7E0C, /* 0xC0 */ + 0x7E1F, 0x7E20, 0x7E13, 0x7E0E, 0x7E1C, 0x7E15, 0x7E1A, 0x7E22, /* 0xD0 */ + 0x7E0B, 0x7E0F, 0x7E16, 0x7E0D, 0x7E14, 0x7E25, 0x7E24, 0x7F43, /* 0xD0 */ + 0x7F7B, 0x7F7C, 0x7F7A, 0x7FB1, 0x7FEF, 0x802A, 0x8029, 0x806C, /* 0xE0 */ + 0x81B1, 0x81A6, 0x81AE, 0x81B9, 0x81B5, 0x81AB, 0x81B0, 0x81AC, /* 0xE0 */ + 0x81B4, 0x81B2, 0x81B7, 0x81A7, 0x81F2, 0x8255, 0x8256, 0x8257, /* 0xF0 */ + 0x8556, 0x8545, 0x856B, 0x854D, 0x8553, 0x8561, 0x8558 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_EB[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, /* 0x40 */ + 0x8563, 0x853E, 0x855B, 0x8571, 0x854E, 0x856E, 0x8575, 0x8555, /* 0x40 */ + 0x8567, 0x8560, 0x858C, 0x8566, 0x855D, 0x8554, 0x8565, 0x856C, /* 0x50 */ + 0x8663, 0x8665, 0x8664, 0x879B, 0x878F, 0x8797, 0x8793, 0x8792, /* 0x50 */ + 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87A3, 0x8785, /* 0x60 */ + 0x8790, 0x8791, 0x879D, 0x8784, 0x8794, 0x879C, 0x879A, 0x8789, /* 0x60 */ + 0x891E, 0x8926, 0x8930, 0x892D, 0x892E, 0x8927, 0x8931, 0x8922, /* 0x70 */ + 0x8929, 0x8923, 0x892F, 0x892C, 0x891F, 0x89F1, 0x8AE0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8AE2, 0x8AF2, 0x8AF4, 0x8AF5, 0x8ADD, 0x8B14, 0x8AE4, /* 0xA0 */ + 0x8ADF, 0x8AF0, 0x8AC8, 0x8ADE, 0x8AE1, 0x8AE8, 0x8AFF, 0x8AEF, /* 0xA0 */ + 0x8AFB, 0x8C91, 0x8C92, 0x8C90, 0x8CF5, 0x8CEE, 0x8CF1, 0x8CF0, /* 0xB0 */ + 0x8CF3, 0x8D6C, 0x8D6E, 0x8DA5, 0x8DA7, 0x8E33, 0x8E3E, 0x8E38, /* 0xB0 */ + 0x8E40, 0x8E45, 0x8E36, 0x8E3C, 0x8E3D, 0x8E41, 0x8E30, 0x8E3F, /* 0xC0 */ + 0x8EBD, 0x8F36, 0x8F2E, 0x8F35, 0x8F32, 0x8F39, 0x8F37, 0x8F34, /* 0xC0 */ + 0x9076, 0x9079, 0x907B, 0x9086, 0x90FA, 0x9133, 0x9135, 0x9136, /* 0xD0 */ + 0x9193, 0x9190, 0x9191, 0x918D, 0x918F, 0x9327, 0x931E, 0x9308, /* 0xD0 */ + 0x931F, 0x9306, 0x930F, 0x937A, 0x9338, 0x933C, 0x931B, 0x9323, /* 0xE0 */ + 0x9312, 0x9301, 0x9346, 0x932D, 0x930E, 0x930D, 0x92CB, 0x931D, /* 0xE0 */ + 0x92FA, 0x9325, 0x9313, 0x92F9, 0x92F7, 0x9334, 0x9302, 0x9324, /* 0xF0 */ + 0x92FF, 0x9329, 0x9339, 0x9335, 0x932A, 0x9314, 0x930C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_EC[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x930B, 0x92FE, 0x9309, 0x9300, 0x92FB, 0x9316, 0x95BC, 0x95CD, /* 0x40 */ + 0x95BE, 0x95B9, 0x95BA, 0x95B6, 0x95BF, 0x95B5, 0x95BD, 0x96A9, /* 0x40 */ + 0x96D4, 0x970B, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97F0, /* 0x50 */ + 0x97F8, 0x9835, 0x982F, 0x9832, 0x9924, 0x991F, 0x9927, 0x9929, /* 0x50 */ + 0x999E, 0x99EE, 0x99EC, 0x99E5, 0x99E4, 0x99F0, 0x99E3, 0x99EA, /* 0x60 */ + 0x99E9, 0x99E7, 0x9AB9, 0x9ABF, 0x9AB4, 0x9ABB, 0x9AF6, 0x9AFA, /* 0x60 */ + 0x9AF9, 0x9AF7, 0x9B33, 0x9B80, 0x9B85, 0x9B87, 0x9B7C, 0x9B7E, /* 0x70 */ + 0x9B7B, 0x9B82, 0x9B93, 0x9B92, 0x9B90, 0x9B7A, 0x9B95, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9B7D, 0x9B88, 0x9D25, 0x9D17, 0x9D20, 0x9D1E, 0x9D14, /* 0xA0 */ + 0x9D29, 0x9D1D, 0x9D18, 0x9D22, 0x9D10, 0x9D19, 0x9D1F, 0x9E88, /* 0xA0 */ + 0x9E86, 0x9E87, 0x9EAE, 0x9EAD, 0x9ED5, 0x9ED6, 0x9EFA, 0x9F12, /* 0xB0 */ + 0x9F3D, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52F4, /* 0xB0 */ + 0x5693, 0x568C, 0x568D, 0x5686, 0x5684, 0x5683, 0x567E, 0x5682, /* 0xC0 */ + 0x567F, 0x5681, 0x58D6, 0x58D4, 0x58CF, 0x58D2, 0x5B2D, 0x5B25, /* 0xC0 */ + 0x5B32, 0x5B23, 0x5B2C, 0x5B27, 0x5B26, 0x5B2F, 0x5B2E, 0x5B7B, /* 0xD0 */ + 0x5BF1, 0x5BF2, 0x5DB7, 0x5E6C, 0x5E6A, 0x5FBE, 0x5FBB, 0x61C3, /* 0xD0 */ + 0x61B5, 0x61BC, 0x61E7, 0x61E0, 0x61E5, 0x61E4, 0x61E8, 0x61DE, /* 0xE0 */ + 0x64EF, 0x64E9, 0x64E3, 0x64EB, 0x64E4, 0x64E8, 0x6581, 0x6580, /* 0xE0 */ + 0x65B6, 0x65DA, 0x66D2, 0x6A8D, 0x6A96, 0x6A81, 0x6AA5, 0x6A89, /* 0xF0 */ + 0x6A9F, 0x6A9B, 0x6AA1, 0x6A9E, 0x6A87, 0x6A93, 0x6A8E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_ED[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x6A95, 0x6A83, 0x6AA8, 0x6AA4, 0x6A91, 0x6A7F, 0x6AA6, 0x6A9A, /* 0x40 */ + 0x6A85, 0x6A8C, 0x6A92, 0x6B5B, 0x6BAD, 0x6C09, 0x6FCC, 0x6FA9, /* 0x40 */ + 0x6FF4, 0x6FD4, 0x6FE3, 0x6FDC, 0x6FED, 0x6FE7, 0x6FE6, 0x6FDE, /* 0x50 */ + 0x6FF2, 0x6FDD, 0x6FE2, 0x6FE8, 0x71E1, 0x71F1, 0x71E8, 0x71F2, /* 0x50 */ + 0x71E4, 0x71F0, 0x71E2, 0x7373, 0x736E, 0x736F, 0x7497, 0x74B2, /* 0x60 */ + 0x74AB, 0x7490, 0x74AA, 0x74AD, 0x74B1, 0x74A5, 0x74AF, 0x7510, /* 0x60 */ + 0x7511, 0x7512, 0x750F, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, /* 0x70 */ + 0x76A4, 0x76E9, 0x77B5, 0x77AB, 0x77B2, 0x77B7, 0x77B6, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x77B4, 0x77B1, 0x77A8, 0x77F0, 0x78F3, 0x78FD, 0x7902, /* 0xA0 */ + 0x78FB, 0x78FC, 0x78F2, 0x7905, 0x78F9, 0x78FE, 0x7904, 0x79AB, /* 0xA0 */ + 0x79A8, 0x7A5C, 0x7A5B, 0x7A56, 0x7A58, 0x7A54, 0x7A5A, 0x7ABE, /* 0xB0 */ + 0x7AC0, 0x7AC1, 0x7C05, 0x7C0F, 0x7BF2, 0x7C00, 0x7BFF, 0x7BFB, /* 0xB0 */ + 0x7C0E, 0x7BF4, 0x7C0B, 0x7BF3, 0x7C02, 0x7C09, 0x7C03, 0x7C01, /* 0xC0 */ + 0x7BF8, 0x7BFD, 0x7C06, 0x7BF0, 0x7BF1, 0x7C10, 0x7C0A, 0x7CE8, /* 0xC0 */ + 0x7E2D, 0x7E3C, 0x7E42, 0x7E33, 0x9848, 0x7E38, 0x7E2A, 0x7E49, /* 0xD0 */ + 0x7E40, 0x7E47, 0x7E29, 0x7E4C, 0x7E30, 0x7E3B, 0x7E36, 0x7E44, /* 0xD0 */ + 0x7E3A, 0x7F45, 0x7F7F, 0x7F7E, 0x7F7D, 0x7FF4, 0x7FF2, 0x802C, /* 0xE0 */ + 0x81BB, 0x81C4, 0x81CC, 0x81CA, 0x81C5, 0x81C7, 0x81BC, 0x81E9, /* 0xE0 */ + 0x825B, 0x825A, 0x825C, 0x8583, 0x8580, 0x858F, 0x85A7, 0x8595, /* 0xF0 */ + 0x85A0, 0x858B, 0x85A3, 0x857B, 0x85A4, 0x859A, 0x859E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_EE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8577, 0x857C, 0x8589, 0x85A1, 0x857A, 0x8578, 0x8557, 0x858E, /* 0x40 */ + 0x8596, 0x8586, 0x858D, 0x8599, 0x859D, 0x8581, 0x85A2, 0x8582, /* 0x40 */ + 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859F, 0x8668, /* 0x50 */ + 0x87BE, 0x87AA, 0x87AD, 0x87C5, 0x87B0, 0x87AC, 0x87B9, 0x87B5, /* 0x50 */ + 0x87BC, 0x87AE, 0x87C9, 0x87C3, 0x87C2, 0x87CC, 0x87B7, 0x87AF, /* 0x60 */ + 0x87C4, 0x87CA, 0x87B4, 0x87B6, 0x87BF, 0x87B8, 0x87BD, 0x87DE, /* 0x60 */ + 0x87B2, 0x8935, 0x8933, 0x893C, 0x893E, 0x8941, 0x8952, 0x8937, /* 0x70 */ + 0x8942, 0x89AD, 0x89AF, 0x89AE, 0x89F2, 0x89F3, 0x8B1E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x8B18, 0x8B16, 0x8B11, 0x8B05, 0x8B0B, 0x8B22, 0x8B0F, /* 0xA0 */ + 0x8B12, 0x8B15, 0x8B07, 0x8B0D, 0x8B08, 0x8B06, 0x8B1C, 0x8B13, /* 0xA0 */ + 0x8B1A, 0x8C4F, 0x8C70, 0x8C72, 0x8C71, 0x8C6F, 0x8C95, 0x8C94, /* 0xB0 */ + 0x8CF9, 0x8D6F, 0x8E4E, 0x8E4D, 0x8E53, 0x8E50, 0x8E4C, 0x8E47, /* 0xB0 */ + 0x8F43, 0x8F40, 0x9085, 0x907E, 0x9138, 0x919A, 0x91A2, 0x919B, /* 0xC0 */ + 0x9199, 0x919F, 0x91A1, 0x919D, 0x91A0, 0x93A1, 0x9383, 0x93AF, /* 0xC0 */ + 0x9364, 0x9356, 0x9347, 0x937C, 0x9358, 0x935C, 0x9376, 0x9349, /* 0xD0 */ + 0x9350, 0x9351, 0x9360, 0x936D, 0x938F, 0x934C, 0x936A, 0x9379, /* 0xD0 */ + 0x9357, 0x9355, 0x9352, 0x934F, 0x9371, 0x9377, 0x937B, 0x9361, /* 0xE0 */ + 0x935E, 0x9363, 0x9367, 0x9380, 0x934E, 0x9359, 0x95C7, 0x95C0, /* 0xE0 */ + 0x95C9, 0x95C3, 0x95C5, 0x95B7, 0x96AE, 0x96B0, 0x96AC, 0x9720, /* 0xF0 */ + 0x971F, 0x9718, 0x971D, 0x9719, 0x979A, 0x97A1, 0x979C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_EF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x979E, 0x979D, 0x97D5, 0x97D4, 0x97F1, 0x9841, 0x9844, 0x984A, /* 0x40 */ + 0x9849, 0x9845, 0x9843, 0x9925, 0x992B, 0x992C, 0x992A, 0x9933, /* 0x40 */ + 0x9932, 0x992F, 0x992D, 0x9931, 0x9930, 0x9998, 0x99A3, 0x99A1, /* 0x50 */ + 0x9A02, 0x99FA, 0x99F4, 0x99F7, 0x99F9, 0x99F8, 0x99F6, 0x99FB, /* 0x50 */ + 0x99FD, 0x99FE, 0x99FC, 0x9A03, 0x9ABE, 0x9AFE, 0x9AFD, 0x9B01, /* 0x60 */ + 0x9AFC, 0x9B48, 0x9B9A, 0x9BA8, 0x9B9E, 0x9B9B, 0x9BA6, 0x9BA1, /* 0x60 */ + 0x9BA5, 0x9BA4, 0x9B86, 0x9BA2, 0x9BA0, 0x9BAF, 0x9D33, 0x9D41, /* 0x70 */ + 0x9D67, 0x9D36, 0x9D2E, 0x9D2F, 0x9D31, 0x9D38, 0x9D30, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9D45, 0x9D42, 0x9D43, 0x9D3E, 0x9D37, 0x9D40, 0x9D3D, /* 0xA0 */ + 0x7FF5, 0x9D2D, 0x9E8A, 0x9E89, 0x9E8D, 0x9EB0, 0x9EC8, 0x9EDA, /* 0xA0 */ + 0x9EFB, 0x9EFF, 0x9F24, 0x9F23, 0x9F22, 0x9F54, 0x9FA0, 0x5131, /* 0xB0 */ + 0x512D, 0x512E, 0x5698, 0x569C, 0x5697, 0x569A, 0x569D, 0x5699, /* 0xB0 */ + 0x5970, 0x5B3C, 0x5C69, 0x5C6A, 0x5DC0, 0x5E6D, 0x5E6E, 0x61D8, /* 0xC0 */ + 0x61DF, 0x61ED, 0x61EE, 0x61F1, 0x61EA, 0x61F0, 0x61EB, 0x61D6, /* 0xC0 */ + 0x61E9, 0x64FF, 0x6504, 0x64FD, 0x64F8, 0x6501, 0x6503, 0x64FC, /* 0xD0 */ + 0x6594, 0x65DB, 0x66DA, 0x66DB, 0x66D8, 0x6AC5, 0x6AB9, 0x6ABD, /* 0xD0 */ + 0x6AE1, 0x6AC6, 0x6ABA, 0x6AB6, 0x6AB7, 0x6AC7, 0x6AB4, 0x6AAD, /* 0xE0 */ + 0x6B5E, 0x6BC9, 0x6C0B, 0x7007, 0x700C, 0x700D, 0x7001, 0x7005, /* 0xE0 */ + 0x7014, 0x700E, 0x6FFF, 0x7000, 0x6FFB, 0x7026, 0x6FFC, 0x6FF7, /* 0xF0 */ + 0x700A, 0x7201, 0x71FF, 0x71F9, 0x7203, 0x71FD, 0x7376 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F0[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x74B8, 0x74C0, 0x74B5, 0x74C1, 0x74BE, 0x74B6, 0x74BB, 0x74C2, /* 0x40 */ + 0x7514, 0x7513, 0x765C, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, /* 0x40 */ + 0x765A, 0x76A6, 0x76BD, 0x76EC, 0x77C2, 0x77BA, 0x78FF, 0x790C, /* 0x50 */ + 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79AD, 0x79AC, /* 0x50 */ + 0x7A5F, 0x7C1C, 0x7C29, 0x7C19, 0x7C20, 0x7C1F, 0x7C2D, 0x7C1D, /* 0x60 */ + 0x7C26, 0x7C28, 0x7C22, 0x7C25, 0x7C30, 0x7E5C, 0x7E50, 0x7E56, /* 0x60 */ + 0x7E63, 0x7E58, 0x7E62, 0x7E5F, 0x7E51, 0x7E60, 0x7E57, 0x7E53, /* 0x70 */ + 0x7FB5, 0x7FB3, 0x7FF7, 0x7FF8, 0x8075, 0x81D1, 0x81D2, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x81D0, 0x825F, 0x825E, 0x85B4, 0x85C6, 0x85C0, 0x85C3, /* 0xA0 */ + 0x85C2, 0x85B3, 0x85B5, 0x85BD, 0x85C7, 0x85C4, 0x85BF, 0x85CB, /* 0xA0 */ + 0x85CE, 0x85C8, 0x85C5, 0x85B1, 0x85B6, 0x85D2, 0x8624, 0x85B8, /* 0xB0 */ + 0x85B7, 0x85BE, 0x8669, 0x87E7, 0x87E6, 0x87E2, 0x87DB, 0x87EB, /* 0xB0 */ + 0x87EA, 0x87E5, 0x87DF, 0x87F3, 0x87E4, 0x87D4, 0x87DC, 0x87D3, /* 0xC0 */ + 0x87ED, 0x87D8, 0x87E3, 0x87A4, 0x87D7, 0x87D9, 0x8801, 0x87F4, /* 0xC0 */ + 0x87E8, 0x87DD, 0x8953, 0x894B, 0x894F, 0x894C, 0x8946, 0x8950, /* 0xD0 */ + 0x8951, 0x8949, 0x8B2A, 0x8B27, 0x8B23, 0x8B33, 0x8B30, 0x8B35, /* 0xD0 */ + 0x8B47, 0x8B2F, 0x8B3C, 0x8B3E, 0x8B31, 0x8B25, 0x8B37, 0x8B26, /* 0xE0 */ + 0x8B36, 0x8B2E, 0x8B24, 0x8B3B, 0x8B3D, 0x8B3A, 0x8C42, 0x8C75, /* 0xE0 */ + 0x8C99, 0x8C98, 0x8C97, 0x8CFE, 0x8D04, 0x8D02, 0x8D00, 0x8E5C, /* 0xF0 */ + 0x8E62, 0x8E60, 0x8E57, 0x8E56, 0x8E5E, 0x8E65, 0x8E67 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F1[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8E5B, 0x8E5A, 0x8E61, 0x8E5D, 0x8E69, 0x8E54, 0x8F46, 0x8F47, /* 0x40 */ + 0x8F48, 0x8F4B, 0x9128, 0x913A, 0x913B, 0x913E, 0x91A8, 0x91A5, /* 0x40 */ + 0x91A7, 0x91AF, 0x91AA, 0x93B5, 0x938C, 0x9392, 0x93B7, 0x939B, /* 0x50 */ + 0x939D, 0x9389, 0x93A7, 0x938E, 0x93AA, 0x939E, 0x93A6, 0x9395, /* 0x50 */ + 0x9388, 0x9399, 0x939F, 0x938D, 0x93B1, 0x9391, 0x93B2, 0x93A4, /* 0x60 */ + 0x93A8, 0x93B4, 0x93A3, 0x93A5, 0x95D2, 0x95D3, 0x95D1, 0x96B3, /* 0x60 */ + 0x96D7, 0x96DA, 0x5DC2, 0x96DF, 0x96D8, 0x96DD, 0x9723, 0x9722, /* 0x70 */ + 0x9725, 0x97AC, 0x97AE, 0x97A8, 0x97AB, 0x97A4, 0x97AA, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x97A2, 0x97A5, 0x97D7, 0x97D9, 0x97D6, 0x97D8, 0x97FA, /* 0xA0 */ + 0x9850, 0x9851, 0x9852, 0x98B8, 0x9941, 0x993C, 0x993A, 0x9A0F, /* 0xA0 */ + 0x9A0B, 0x9A09, 0x9A0D, 0x9A04, 0x9A11, 0x9A0A, 0x9A05, 0x9A07, /* 0xB0 */ + 0x9A06, 0x9AC0, 0x9ADC, 0x9B08, 0x9B04, 0x9B05, 0x9B29, 0x9B35, /* 0xB0 */ + 0x9B4A, 0x9B4C, 0x9B4B, 0x9BC7, 0x9BC6, 0x9BC3, 0x9BBF, 0x9BC1, /* 0xC0 */ + 0x9BB5, 0x9BB8, 0x9BD3, 0x9BB6, 0x9BC4, 0x9BB9, 0x9BBD, 0x9D5C, /* 0xC0 */ + 0x9D53, 0x9D4F, 0x9D4A, 0x9D5B, 0x9D4B, 0x9D59, 0x9D56, 0x9D4C, /* 0xD0 */ + 0x9D57, 0x9D52, 0x9D54, 0x9D5F, 0x9D58, 0x9D5A, 0x9E8E, 0x9E8C, /* 0xD0 */ + 0x9EDF, 0x9F01, 0x9F00, 0x9F16, 0x9F25, 0x9F2B, 0x9F2A, 0x9F29, /* 0xE0 */ + 0x9F28, 0x9F4C, 0x9F55, 0x5134, 0x5135, 0x5296, 0x52F7, 0x53B4, /* 0xE0 */ + 0x56AB, 0x56AD, 0x56A6, 0x56A7, 0x56AA, 0x56AC, 0x58DA, 0x58DD, /* 0xF0 */ + 0x58DB, 0x5912, 0x5B3D, 0x5B3E, 0x5B3F, 0x5DC3, 0x5E70 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F2[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x5FBF, 0x61FB, 0x6507, 0x6510, 0x650D, 0x6509, 0x650C, 0x650E, /* 0x40 */ + 0x6584, 0x65DE, 0x65DD, 0x66DE, 0x6AE7, 0x6AE0, 0x6ACC, 0x6AD1, /* 0x40 */ + 0x6AD9, 0x6ACB, 0x6ADF, 0x6ADC, 0x6AD0, 0x6AEB, 0x6ACF, 0x6ACD, /* 0x50 */ + 0x6ADE, 0x6B60, 0x6BB0, 0x6C0C, 0x7019, 0x7027, 0x7020, 0x7016, /* 0x50 */ + 0x702B, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701C, /* 0x60 */ + 0x702A, 0x720C, 0x720A, 0x7207, 0x7202, 0x7205, 0x72A5, 0x72A6, /* 0x60 */ + 0x72A4, 0x72A3, 0x72A1, 0x74CB, 0x74C5, 0x74B7, 0x74C3, 0x7516, /* 0x70 */ + 0x7660, 0x77C9, 0x77CA, 0x77C4, 0x77F1, 0x791D, 0x791B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x7921, 0x791C, 0x7917, 0x791E, 0x79B0, 0x7A67, 0x7A68, /* 0xA0 */ + 0x7C33, 0x7C3C, 0x7C39, 0x7C2C, 0x7C3B, 0x7CEC, 0x7CEA, 0x7E76, /* 0xA0 */ + 0x7E75, 0x7E78, 0x7E70, 0x7E77, 0x7E6F, 0x7E7A, 0x7E72, 0x7E74, /* 0xB0 */ + 0x7E68, 0x7F4B, 0x7F4A, 0x7F83, 0x7F86, 0x7FB7, 0x7FFD, 0x7FFE, /* 0xB0 */ + 0x8078, 0x81D7, 0x81D5, 0x8264, 0x8261, 0x8263, 0x85EB, 0x85F1, /* 0xC0 */ + 0x85ED, 0x85D9, 0x85E1, 0x85E8, 0x85DA, 0x85D7, 0x85EC, 0x85F2, /* 0xC0 */ + 0x85F8, 0x85D8, 0x85DF, 0x85E3, 0x85DC, 0x85D1, 0x85F0, 0x85E6, /* 0xD0 */ + 0x85EF, 0x85DE, 0x85E2, 0x8800, 0x87FA, 0x8803, 0x87F6, 0x87F7, /* 0xD0 */ + 0x8809, 0x880C, 0x880B, 0x8806, 0x87FC, 0x8808, 0x87FF, 0x880A, /* 0xE0 */ + 0x8802, 0x8962, 0x895A, 0x895B, 0x8957, 0x8961, 0x895C, 0x8958, /* 0xE0 */ + 0x895D, 0x8959, 0x8988, 0x89B7, 0x89B6, 0x89F6, 0x8B50, 0x8B48, /* 0xF0 */ + 0x8B4A, 0x8B40, 0x8B53, 0x8B56, 0x8B54, 0x8B4B, 0x8B55 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F3[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B51, 0x8B42, 0x8B52, 0x8B57, 0x8C43, 0x8C77, 0x8C76, 0x8C9A, /* 0x40 */ + 0x8D06, 0x8D07, 0x8D09, 0x8DAC, 0x8DAA, 0x8DAD, 0x8DAB, 0x8E6D, /* 0x40 */ + 0x8E78, 0x8E73, 0x8E6A, 0x8E6F, 0x8E7B, 0x8EC2, 0x8F52, 0x8F51, /* 0x50 */ + 0x8F4F, 0x8F50, 0x8F53, 0x8FB4, 0x9140, 0x913F, 0x91B0, 0x91AD, /* 0x50 */ + 0x93DE, 0x93C7, 0x93CF, 0x93C2, 0x93DA, 0x93D0, 0x93F9, 0x93EC, /* 0x60 */ + 0x93CC, 0x93D9, 0x93A9, 0x93E6, 0x93CA, 0x93D4, 0x93EE, 0x93E3, /* 0x60 */ + 0x93D5, 0x93C4, 0x93CE, 0x93C0, 0x93D2, 0x93E7, 0x957D, 0x95DA, /* 0x70 */ + 0x95DB, 0x96E1, 0x9729, 0x972B, 0x972C, 0x9728, 0x9726, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x97B3, 0x97B7, 0x97B6, 0x97DD, 0x97DE, 0x97DF, 0x985C, /* 0xA0 */ + 0x9859, 0x985D, 0x9857, 0x98BF, 0x98BD, 0x98BB, 0x98BE, 0x9948, /* 0xA0 */ + 0x9947, 0x9943, 0x99A6, 0x99A7, 0x9A1A, 0x9A15, 0x9A25, 0x9A1D, /* 0xB0 */ + 0x9A24, 0x9A1B, 0x9A22, 0x9A20, 0x9A27, 0x9A23, 0x9A1E, 0x9A1C, /* 0xB0 */ + 0x9A14, 0x9AC2, 0x9B0B, 0x9B0A, 0x9B0E, 0x9B0C, 0x9B37, 0x9BEA, /* 0xC0 */ + 0x9BEB, 0x9BE0, 0x9BDE, 0x9BE4, 0x9BE6, 0x9BE2, 0x9BF0, 0x9BD4, /* 0xC0 */ + 0x9BD7, 0x9BEC, 0x9BDC, 0x9BD9, 0x9BE5, 0x9BD5, 0x9BE1, 0x9BDA, /* 0xD0 */ + 0x9D77, 0x9D81, 0x9D8A, 0x9D84, 0x9D88, 0x9D71, 0x9D80, 0x9D78, /* 0xD0 */ + 0x9D86, 0x9D8B, 0x9D8C, 0x9D7D, 0x9D6B, 0x9D74, 0x9D75, 0x9D70, /* 0xE0 */ + 0x9D69, 0x9D85, 0x9D73, 0x9D7B, 0x9D82, 0x9D6F, 0x9D79, 0x9D7F, /* 0xE0 */ + 0x9D87, 0x9D68, 0x9E94, 0x9E91, 0x9EC0, 0x9EFC, 0x9F2D, 0x9F40, /* 0xF0 */ + 0x9F41, 0x9F4D, 0x9F56, 0x9F57, 0x9F58, 0x5337, 0x56B2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F4[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x56B5, 0x56B3, 0x58E3, 0x5B45, 0x5DC6, 0x5DC7, 0x5EEE, 0x5EEF, /* 0x40 */ + 0x5FC0, 0x5FC1, 0x61F9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65DF, /* 0x40 */ + 0x66E8, 0x66E3, 0x66E4, 0x6AF3, 0x6AF0, 0x6AEA, 0x6AE8, 0x6AF9, /* 0x50 */ + 0x6AF1, 0x6AEE, 0x6AEF, 0x703C, 0x7035, 0x702F, 0x7037, 0x7034, /* 0x50 */ + 0x7031, 0x7042, 0x7038, 0x703F, 0x703A, 0x7039, 0x7040, 0x703B, /* 0x60 */ + 0x7033, 0x7041, 0x7213, 0x7214, 0x72A8, 0x737D, 0x737C, 0x74BA, /* 0x60 */ + 0x76AB, 0x76AA, 0x76BE, 0x76ED, 0x77CC, 0x77CE, 0x77CF, 0x77CD, /* 0x70 */ + 0x77F2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x79B2, 0x7A6E, 0x7A6C, 0x7A6D, 0x7AF7, 0x7C49, 0x7C48, /* 0xA0 */ + 0x7C4A, 0x7C47, 0x7C45, 0x7CEE, 0x7E7B, 0x7E7E, 0x7E81, 0x7E80, /* 0xA0 */ + 0x7FBA, 0x7FFF, 0x8079, 0x81DB, 0x81D9, 0x820B, 0x8268, 0x8269, /* 0xB0 */ + 0x8622, 0x85FF, 0x8601, 0x85FE, 0x861B, 0x8600, 0x85F6, 0x8604, /* 0xB0 */ + 0x8609, 0x8605, 0x860C, 0x85FD, 0x8819, 0x8810, 0x8811, 0x8817, /* 0xC0 */ + 0x8813, 0x8816, 0x8963, 0x8966, 0x89B9, 0x89F7, 0x8B60, 0x8B6A, /* 0xC0 */ + 0x8B5D, 0x8B68, 0x8B63, 0x8B65, 0x8B67, 0x8B6D, 0x8DAE, 0x8E86, /* 0xD0 */ + 0x8E88, 0x8E84, 0x8F59, 0x8F56, 0x8F57, 0x8F55, 0x8F58, 0x8F5A, /* 0xD0 */ + 0x908D, 0x9143, 0x9141, 0x91B7, 0x91B5, 0x91B2, 0x91B3, 0x940B, /* 0xE0 */ + 0x9413, 0x93FB, 0x9420, 0x940F, 0x9414, 0x93FE, 0x9415, 0x9410, /* 0xE0 */ + 0x9428, 0x9419, 0x940D, 0x93F5, 0x9400, 0x93F7, 0x9407, 0x940E, /* 0xF0 */ + 0x9416, 0x9412, 0x93FA, 0x9409, 0x93F8, 0x940A, 0x93FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F5[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x93FC, 0x940C, 0x93F6, 0x9411, 0x9406, 0x95DE, 0x95E0, 0x95DF, /* 0x40 */ + 0x972E, 0x972F, 0x97B9, 0x97BB, 0x97FD, 0x97FE, 0x9860, 0x9862, /* 0x40 */ + 0x9863, 0x985F, 0x98C1, 0x98C2, 0x9950, 0x994E, 0x9959, 0x994C, /* 0x50 */ + 0x994B, 0x9953, 0x9A32, 0x9A34, 0x9A31, 0x9A2C, 0x9A2A, 0x9A36, /* 0x50 */ + 0x9A29, 0x9A2E, 0x9A38, 0x9A2D, 0x9AC7, 0x9ACA, 0x9AC6, 0x9B10, /* 0x60 */ + 0x9B12, 0x9B11, 0x9C0B, 0x9C08, 0x9BF7, 0x9C05, 0x9C12, 0x9BF8, /* 0x60 */ + 0x9C40, 0x9C07, 0x9C0E, 0x9C06, 0x9C17, 0x9C14, 0x9C09, 0x9D9F, /* 0x70 */ + 0x9D99, 0x9DA4, 0x9D9D, 0x9D92, 0x9D98, 0x9D90, 0x9D9B, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9DA0, 0x9D94, 0x9D9C, 0x9DAA, 0x9D97, 0x9DA1, 0x9D9A, /* 0xA0 */ + 0x9DA2, 0x9DA8, 0x9D9E, 0x9DA3, 0x9DBF, 0x9DA9, 0x9D96, 0x9DA6, /* 0xA0 */ + 0x9DA7, 0x9E99, 0x9E9B, 0x9E9A, 0x9EE5, 0x9EE4, 0x9EE7, 0x9EE6, /* 0xB0 */ + 0x9F30, 0x9F2E, 0x9F5B, 0x9F60, 0x9F5E, 0x9F5D, 0x9F59, 0x9F91, /* 0xB0 */ + 0x513A, 0x5139, 0x5298, 0x5297, 0x56C3, 0x56BD, 0x56BE, 0x5B48, /* 0xC0 */ + 0x5B47, 0x5DCB, 0x5DCF, 0x5EF1, 0x61FD, 0x651B, 0x6B02, 0x6AFC, /* 0xC0 */ + 0x6B03, 0x6AF8, 0x6B00, 0x7043, 0x7044, 0x704A, 0x7048, 0x7049, /* 0xD0 */ + 0x7045, 0x7046, 0x721D, 0x721A, 0x7219, 0x737E, 0x7517, 0x766A, /* 0xD0 */ + 0x77D0, 0x792D, 0x7931, 0x792F, 0x7C54, 0x7C53, 0x7CF2, 0x7E8A, /* 0xE0 */ + 0x7E87, 0x7E88, 0x7E8B, 0x7E86, 0x7E8D, 0x7F4D, 0x7FBB, 0x8030, /* 0xE0 */ + 0x81DD, 0x8618, 0x862A, 0x8626, 0x861F, 0x8623, 0x861C, 0x8619, /* 0xF0 */ + 0x8627, 0x862E, 0x8621, 0x8620, 0x8629, 0x861E, 0x8625 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F6[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8829, 0x881D, 0x881B, 0x8820, 0x8824, 0x881C, 0x882B, 0x884A, /* 0x40 */ + 0x896D, 0x8969, 0x896E, 0x896B, 0x89FA, 0x8B79, 0x8B78, 0x8B45, /* 0x40 */ + 0x8B7A, 0x8B7B, 0x8D10, 0x8D14, 0x8DAF, 0x8E8E, 0x8E8C, 0x8F5E, /* 0x50 */ + 0x8F5B, 0x8F5D, 0x9146, 0x9144, 0x9145, 0x91B9, 0x943F, 0x943B, /* 0x50 */ + 0x9436, 0x9429, 0x943D, 0x943C, 0x9430, 0x9439, 0x942A, 0x9437, /* 0x60 */ + 0x942C, 0x9440, 0x9431, 0x95E5, 0x95E4, 0x95E3, 0x9735, 0x973A, /* 0x60 */ + 0x97BF, 0x97E1, 0x9864, 0x98C9, 0x98C6, 0x98C0, 0x9958, 0x9956, /* 0x70 */ + 0x9A39, 0x9A3D, 0x9A46, 0x9A44, 0x9A42, 0x9A41, 0x9A3A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9A3F, 0x9ACD, 0x9B15, 0x9B17, 0x9B18, 0x9B16, 0x9B3A, /* 0xA0 */ + 0x9B52, 0x9C2B, 0x9C1D, 0x9C1C, 0x9C2C, 0x9C23, 0x9C28, 0x9C29, /* 0xA0 */ + 0x9C24, 0x9C21, 0x9DB7, 0x9DB6, 0x9DBC, 0x9DC1, 0x9DC7, 0x9DCA, /* 0xB0 */ + 0x9DCF, 0x9DBE, 0x9DC5, 0x9DC3, 0x9DBB, 0x9DB5, 0x9DCE, 0x9DB9, /* 0xB0 */ + 0x9DBA, 0x9DAC, 0x9DC8, 0x9DB1, 0x9DAD, 0x9DCC, 0x9DB3, 0x9DCD, /* 0xC0 */ + 0x9DB2, 0x9E7A, 0x9E9C, 0x9EEB, 0x9EEE, 0x9EED, 0x9F1B, 0x9F18, /* 0xC0 */ + 0x9F1A, 0x9F31, 0x9F4E, 0x9F65, 0x9F64, 0x9F92, 0x4EB9, 0x56C6, /* 0xD0 */ + 0x56C5, 0x56CB, 0x5971, 0x5B4B, 0x5B4C, 0x5DD5, 0x5DD1, 0x5EF2, /* 0xD0 */ + 0x6521, 0x6520, 0x6526, 0x6522, 0x6B0B, 0x6B08, 0x6B09, 0x6C0D, /* 0xE0 */ + 0x7055, 0x7056, 0x7057, 0x7052, 0x721E, 0x721F, 0x72A9, 0x737F, /* 0xE0 */ + 0x74D8, 0x74D5, 0x74D9, 0x74D7, 0x766D, 0x76AD, 0x7935, 0x79B4, /* 0xF0 */ + 0x7A70, 0x7A71, 0x7C57, 0x7C5C, 0x7C59, 0x7C5B, 0x7C5A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F7[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7CF4, 0x7CF1, 0x7E91, 0x7F4F, 0x7F87, 0x81DE, 0x826B, 0x8634, /* 0x40 */ + 0x8635, 0x8633, 0x862C, 0x8632, 0x8636, 0x882C, 0x8828, 0x8826, /* 0x40 */ + 0x882A, 0x8825, 0x8971, 0x89BF, 0x89BE, 0x89FB, 0x8B7E, 0x8B84, /* 0x50 */ + 0x8B82, 0x8B86, 0x8B85, 0x8B7F, 0x8D15, 0x8E95, 0x8E94, 0x8E9A, /* 0x50 */ + 0x8E92, 0x8E90, 0x8E96, 0x8E97, 0x8F60, 0x8F62, 0x9147, 0x944C, /* 0x60 */ + 0x9450, 0x944A, 0x944B, 0x944F, 0x9447, 0x9445, 0x9448, 0x9449, /* 0x60 */ + 0x9446, 0x973F, 0x97E3, 0x986A, 0x9869, 0x98CB, 0x9954, 0x995B, /* 0x70 */ + 0x9A4E, 0x9A53, 0x9A54, 0x9A4C, 0x9A4F, 0x9A48, 0x9A4A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9A49, 0x9A52, 0x9A50, 0x9AD0, 0x9B19, 0x9B2B, 0x9B3B, /* 0xA0 */ + 0x9B56, 0x9B55, 0x9C46, 0x9C48, 0x9C3F, 0x9C44, 0x9C39, 0x9C33, /* 0xA0 */ + 0x9C41, 0x9C3C, 0x9C37, 0x9C34, 0x9C32, 0x9C3D, 0x9C36, 0x9DDB, /* 0xB0 */ + 0x9DD2, 0x9DDE, 0x9DDA, 0x9DCB, 0x9DD0, 0x9DDC, 0x9DD1, 0x9DDF, /* 0xB0 */ + 0x9DE9, 0x9DD9, 0x9DD8, 0x9DD6, 0x9DF5, 0x9DD5, 0x9DDD, 0x9EB6, /* 0xC0 */ + 0x9EF0, 0x9F35, 0x9F33, 0x9F32, 0x9F42, 0x9F6B, 0x9F95, 0x9FA2, /* 0xC0 */ + 0x513D, 0x5299, 0x58E8, 0x58E7, 0x5972, 0x5B4D, 0x5DD8, 0x882F, /* 0xD0 */ + 0x5F4F, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66EB, /* 0xD0 */ + 0x6B11, 0x6B12, 0x6B0F, 0x6BCA, 0x705B, 0x705A, 0x7222, 0x7382, /* 0xE0 */ + 0x7381, 0x7383, 0x7670, 0x77D4, 0x7C67, 0x7C66, 0x7E95, 0x826C, /* 0xE0 */ + 0x863A, 0x8640, 0x8639, 0x863C, 0x8631, 0x863B, 0x863E, 0x8830, /* 0xF0 */ + 0x8832, 0x882E, 0x8833, 0x8976, 0x8974, 0x8973, 0x89FE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x8B8C, 0x8B8E, 0x8B8B, 0x8B88, 0x8C45, 0x8D19, 0x8E98, 0x8F64, /* 0x40 */ + 0x8F63, 0x91BC, 0x9462, 0x9455, 0x945D, 0x9457, 0x945E, 0x97C4, /* 0x40 */ + 0x97C5, 0x9800, 0x9A56, 0x9A59, 0x9B1E, 0x9B1F, 0x9B20, 0x9C52, /* 0x50 */ + 0x9C58, 0x9C50, 0x9C4A, 0x9C4D, 0x9C4B, 0x9C55, 0x9C59, 0x9C4C, /* 0x50 */ + 0x9C4E, 0x9DFB, 0x9DF7, 0x9DEF, 0x9DE3, 0x9DEB, 0x9DF8, 0x9DE4, /* 0x60 */ + 0x9DF6, 0x9DE1, 0x9DEE, 0x9DE6, 0x9DF2, 0x9DF0, 0x9DE2, 0x9DEC, /* 0x60 */ + 0x9DF4, 0x9DF3, 0x9DE8, 0x9DED, 0x9EC2, 0x9ED0, 0x9EF2, 0x9EF3, /* 0x70 */ + 0x9F06, 0x9F1C, 0x9F38, 0x9F37, 0x9F36, 0x9F43, 0x9F4F, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9F71, 0x9F70, 0x9F6E, 0x9F6F, 0x56D3, 0x56CD, 0x5B4E, /* 0xA0 */ + 0x5C6D, 0x652D, 0x66ED, 0x66EE, 0x6B13, 0x705F, 0x7061, 0x705D, /* 0xA0 */ + 0x7060, 0x7223, 0x74DB, 0x74E5, 0x77D5, 0x7938, 0x79B7, 0x79B6, /* 0xB0 */ + 0x7C6A, 0x7E97, 0x7F89, 0x826D, 0x8643, 0x8838, 0x8837, 0x8835, /* 0xB0 */ + 0x884B, 0x8B94, 0x8B95, 0x8E9E, 0x8E9F, 0x8EA0, 0x8E9D, 0x91BE, /* 0xC0 */ + 0x91BD, 0x91C2, 0x946B, 0x9468, 0x9469, 0x96E5, 0x9746, 0x9743, /* 0xC0 */ + 0x9747, 0x97C7, 0x97E5, 0x9A5E, 0x9AD5, 0x9B59, 0x9C63, 0x9C67, /* 0xD0 */ + 0x9C66, 0x9C62, 0x9C5E, 0x9C60, 0x9E02, 0x9DFE, 0x9E07, 0x9E03, /* 0xD0 */ + 0x9E06, 0x9E05, 0x9E00, 0x9E01, 0x9E09, 0x9DFF, 0x9DFD, 0x9E04, /* 0xE0 */ + 0x9EA0, 0x9F1E, 0x9F46, 0x9F74, 0x9F75, 0x9F76, 0x56D4, 0x652E, /* 0xE0 */ + 0x65B8, 0x6B18, 0x6B19, 0x6B17, 0x6B1A, 0x7062, 0x7226, 0x72AA, /* 0xF0 */ + 0x77D8, 0x77D9, 0x7939, 0x7C69, 0x7C6B, 0x7CF6, 0x7E9A /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* F9_D6-F9_FE: is MS950 extension */ + +sal_uInt16 const aImplDBCSToUniTab_BIG5_F9[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x7E98, 0x7E9B, 0x7E99, 0x81E0, 0x81E1, 0x8646, 0x8647, 0x8648, /* 0x40 */ + 0x8979, 0x897A, 0x897C, 0x897B, 0x89FF, 0x8B98, 0x8B99, 0x8EA5, /* 0x40 */ + 0x8EA4, 0x8EA3, 0x946E, 0x946D, 0x946F, 0x9471, 0x9473, 0x9749, /* 0x50 */ + 0x9872, 0x995F, 0x9C68, 0x9C6E, 0x9C6D, 0x9E0B, 0x9E0D, 0x9E10, /* 0x50 */ + 0x9E0F, 0x9E12, 0x9E11, 0x9EA1, 0x9EF5, 0x9F09, 0x9F47, 0x9F78, /* 0x60 */ + 0x9F7B, 0x9F7A, 0x9F79, 0x571E, 0x7066, 0x7C6F, 0x883C, 0x8DB2, /* 0x60 */ + 0x8EA6, 0x91C3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9A60, 0x9C74, /* 0x70 */ + 0x9C73, 0x9C71, 0x9C75, 0x9E14, 0x9E13, 0x9EF6, 0x9F0A, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0x9FA4, 0x7068, 0x7065, 0x7CF7, 0x866A, 0x883E, 0x883D, /* 0xA0 */ + 0x883F, 0x8B9E, 0x8C9C, 0x8EA9, 0x8EC9, 0x974B, 0x9873, 0x9874, /* 0xA0 */ + 0x98CC, 0x9961, 0x99AB, 0x9A64, 0x9A66, 0x9A67, 0x9B24, 0x9E15, /* 0xB0 */ + 0x9E17, 0x9F48, 0x6207, 0x6B1E, 0x7227, 0x864C, 0x8EA8, 0x9482, /* 0xB0 */ + 0x9480, 0x9481, 0x9A69, 0x9A68, 0x9B2E, 0x9E19, 0x7229, 0x864B, /* 0xC0 */ + 0x8B9F, 0x9483, 0x9C79, 0x9EB7, 0x7675, 0x9A6B, 0x9C7A, 0x9E1D, /* 0xC0 */ + 0x7069, 0x706A, 0x9EA4, 0x9F7E, 0x9F49, 0x9F98, 0x7881, 0x92B9, /* 0xD0 */ + 0x88CF, 0x58BB, 0x6052, 0x7CA7, 0x5AFA, 0x2554, 0x2566, 0x2557, /* 0xD0 */ + 0x2560, 0x256C, 0x2563, 0x255A, 0x2569, 0x255D, 0x2552, 0x2564, /* 0xE0 */ + 0x2555, 0x255E, 0x256A, 0x2561, 0x2558, 0x2567, 0x255B, 0x2553, /* 0xE0 */ + 0x2565, 0x2556, 0x255F, 0x256B, 0x2562, 0x2559, 0x2568, 0x255C, /* 0xF0 */ + 0x2551, 0x2550, 0x256D, 0x256E, 0x2570, 0x256F, 0x2593 /* 0xF0 */ +}; diff --git a/sal/textenc/tcvttcn2.tab b/sal/textenc/tcvttcn2.tab new file mode 100644 index 000000000..8fefa230b --- /dev/null +++ b/sal/textenc/tcvttcn2.tab @@ -0,0 +1,3706 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* ======================================================================= */ + +/* This file contain the UniCode to DBCS tables for the following */ +/* chinese traditional (Taiwan/HongKong) charsets: */ +/* BIG5, MS950, APPLE_CHINTRAD */ + +/* ======================================================================= */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0xA246, 0xA247, 0, 0xA244, 0, 0xA1B1, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1C2, /* 0xA0 */ + 0xA258, 0xA1D3, 0, 0, 0, 0, 0, 0xA150, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1D1, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1D2 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINTRAD_00[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x00 */ + 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 0x00 */ + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 0x10 */ + 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, /* 0x10 */ + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, /* 0x20 */ + 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, /* 0x20 */ + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, /* 0x30 */ + 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, /* 0x30 */ + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0x40 */ + 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, /* 0x40 */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, /* 0x50 */ + 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, /* 0x50 */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x60 */ + 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, /* 0x60 */ + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, /* 0x70 */ + 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0x00A0, 0, 0xA246, 0xA247, 0, 0xA244, 0, 0xA1B1, /* 0xA0 */ + 0, 0x00FD, 0, 0, 0, 0, 0, 0xA1C2, /* 0xA0 */ + 0xA258, 0xA1D3, 0, 0, 0, 0, 0, 0xA145, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1D1, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1D2 /* 0xF0 */ + /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_02[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA3BE, /* 0xC0 */ + 0, 0xA3BC, 0xA3BD, 0xA3BF, 0, 0xA1C5, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xA3BB /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_03[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA344, 0xA345, 0xA346, 0xA347, 0xA348, 0xA349, 0xA34A, /* 0x90 */ + 0xA34B, 0xA34C, 0xA34D, 0xA34E, 0xA34F, 0xA350, 0xA351, 0xA352, /* 0x90 */ + 0xA353, 0xA354, 0, 0xA355, 0xA356, 0xA357, 0xA358, 0xA359, /* 0xA0 */ + 0xA35A, 0xA35B, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0xA35C, 0xA35D, 0xA35E, 0xA35F, 0xA360, 0xA361, 0xA362, /* 0xB0 */ + 0xA363, 0xA364, 0xA365, 0xA366, 0xA367, 0xA368, 0xA369, 0xA36A, /* 0xB0 */ + 0xA36B, 0xA36C, 0, 0xA36D, 0xA36E, 0xA36F, 0xA370, 0xA371, /* 0xC0 */ + 0xA372, 0xA373 /* 0xC0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* only defined in BIG5, but we convert back to this codes in all systems */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_04[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7B3, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xC7B1, 0xC7B2, 0xC7B4, 0xC7B5, /* 0x10 */ + 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xC7BB, 0xC7BC, 0xC7BD, 0xC7BE, 0xC7BF, /* 0x20 */ + 0xC7C0, 0xC7C1, 0xC7C2, 0xC7C3, 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, /* 0x20 */ + 0xC7C8, 0xC7C9, 0xC7CA, 0xC7CB, 0xC7CC, 0xC7CD, 0xC7CF, 0xC7D0, /* 0x30 */ + 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, 0xC7D7, 0xC7D8, /* 0x30 */ + 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC, 0xC7DD, 0xC7DE, 0xC7DF, 0xC7E0, /* 0x40 */ + 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E4, 0xC7E5, 0xC7E6, 0xC7E7, 0xC7E8, /* 0x40 */ + 0, 0xC7CE /* 0x50 */ + /* 0x50 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_20[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA156, 0xA158, 0, 0, 0, /* 0x10 */ + 0xA1A5, 0xA1A6, 0, 0, 0xA1A7, 0xA1A8, 0, 0, /* 0x10 */ + 0, 0, 0xA145, 0, 0, 0xA14C, 0xA14B, 0xA145, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xA1AC, 0, 0, 0xA1AB, 0, 0, /* 0x30 */ + 0, 0, 0, 0xA1B0, 0, 0, 0xA1C2, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xA3E1 /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA24A, 0, 0xA1C1, 0, 0, /* 0x00 */ + 0, 0xA24B, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, /* 0x60 */ + 0xA2C1, 0xA2C2, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xA1F6, 0xA1F4, 0xA1F7, 0xA1F5, 0, 0, 0xA1F8, 0xA1F9, /* 0x90 */ + 0xA1FB, 0xA1FA /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINTRAD_21[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA24A, 0, 0xA1C1, 0, 0, /* 0x00 */ + 0, 0xA24B, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0x00FE, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, /* 0x60 */ + 0xA2C1, 0xA2C2, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xA1F6, 0xA1F4, 0xA1F7, 0xA1F5, 0, 0, 0xA1F8, 0xA1F9, /* 0x90 */ + 0xA1FB, 0xA1FA /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_22[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA241, 0, 0, /* 0x10 */ + 0, 0, 0xA1D4, 0, 0, 0, 0xA1DB, 0xA1E8, /* 0x10 */ + 0xA1E7, 0, 0, 0xA1FD, 0, 0xA1FC, 0, 0, /* 0x20 */ + 0, 0xA1E4, 0xA1E5, 0xA1EC, 0, 0, 0xA1ED, 0, /* 0x20 */ + 0, 0, 0, 0, 0xA1EF, 0xA1EE, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xA1E3, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xA1DC, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xA1DA, 0xA1DD, 0, 0, 0, 0, 0xA1D8, 0xA1D9, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xA1F2, 0, 0, /* 0x90 */ + 0, 0xA1F3, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xA1E6, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA1E9, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xA14B /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* only defined in BIG5, but we convert back to this codes in all systems */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_24[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC7E9, 0xC7EA, 0xC7EB, 0xC7EC, 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, /* 0x60 */ + 0xC7F1, 0xC7F2, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0xC7F3, 0xC7F4, 0xC7F5, 0xC7F6, /* 0x70 */ + 0xC7F7, 0xC7F8, 0xC7F9, 0xC7FA, 0xC7FB, 0xC7FC /* 0x70 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_25[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA277, 0, 0xA278, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xA27A, 0, 0, 0, /* 0x00 */ + 0xA27B, 0, 0, 0, 0xA27C, 0, 0, 0, /* 0x10 */ + 0xA27D, 0, 0, 0, 0xA275, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xA274, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xA273, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xA272, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0xA271, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xA2A4, 0xF9F8, 0xF9E6, 0xF9EF, 0xF9DD, 0xF9E8, 0xF9F1, 0xF9DF, /* 0x50 */ + 0xF9EC, 0xF9F5, 0xF9E3, 0xF9EE, 0xF9F7, 0xF9E5, 0xA2A5, 0xF9F2, /* 0x50 */ + 0xF9E0, 0xA2A7, 0xF9F4, 0xF9E2, 0xF9E7, 0xF9F0, 0xF9DE, 0xF9ED, /* 0x60 */ + 0xF9F6, 0xF9E4, 0xA2A6, 0xF9F3, 0xF9E1, 0xA27E, 0xA2A1, 0xA2A3, /* 0x60 */ + 0xA2A2, 0xA2AC, 0xA2AD, 0xA2AE, 0xA15A, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xA262, 0xA263, 0xA264, 0xA265, 0xA266, 0xA267, 0xA268, /* 0x80 */ + 0xA269, 0xA270, 0xA26F, 0xA26E, 0xA26D, 0xA26C, 0xA26B, 0xA26A, /* 0x80 */ + 0, 0, 0, 0xF9FE, 0xA276, 0xA279, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0xA1BD, 0xA1BC, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xA1B6, 0xA1B5, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xA1BF, 0xA1BE, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xA1BB, 0xA1BA, /* 0xC0 */ + 0, 0, 0, 0xA1B3, 0, 0, 0xA1B7, 0xA1B4, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xA2A8, 0xA2A9, 0xA2AB, 0xA2AA /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_26[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1B9, 0xA1B8, 0, /* 0x00 */ + 0, 0xA1F3, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xA1F0, 0xA1F2, 0xA1F1 /* 0x40 */ + /* 0x40 */ +}; + +/* ----------------------------------------------------------------------- */ + +/* all values with 0xC6.. or 0xC7.. only defined in BIG5, but we convert back */ +/* to this codes in all systems */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_30[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA140, 0xA142, 0xA143, 0xA1B2, 0, 0xC6A4, 0, 0, /* 0x00 */ + 0xA171, 0xA172, 0xA16D, 0xA16E, 0xA175, 0xA176, 0xA179, 0xA17A, /* 0x00 */ + 0xA169, 0xA16A, 0xA245, 0, 0xA165, 0xA166, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xA1A9, 0xA1AA, 0, /* 0x10 */ + 0, 0xA2C3, 0xA2C4, 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, 0xA2C9, /* 0x20 */ + 0xA2CA, 0xA2CB, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xC6A5, 0xC6A6, 0xC6A7, 0xC6A8, 0xC6A9, 0xC6AA, 0xC6AB, /* 0x40 */ + 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, 0xC6B0, 0xC6B1, 0xC6B2, 0xC6B3, /* 0x40 */ + 0xC6B4, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6BB, /* 0x50 */ + 0xC6BC, 0xC6BD, 0xC6BE, 0xC6BF, 0xC6C0, 0xC6C1, 0xC6C2, 0xC6C3, /* 0x50 */ + 0xC6C4, 0xC6C5, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, 0xC6CA, 0xC6CB, /* 0x60 */ + 0xC6CC, 0xC6CD, 0xC6CE, 0xC6CF, 0xC6D0, 0xC6D1, 0xC6D2, 0xC6D3, /* 0x60 */ + 0xC6D4, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, /* 0x70 */ + 0xC6DC, 0xC6DD, 0xC6DE, 0xC6DF, 0xC6E0, 0xC6E1, 0xC6E2, 0xC6E3, /* 0x70 */ + 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0xC6E8, 0xC6E9, 0xC6EA, 0xC6EB, /* 0x80 */ + 0xC6EC, 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F0, 0xC6F1, 0xC6F2, 0xC6F3, /* 0x80 */ + 0xC6F4, 0xC6F5, 0xC6F6, 0xC6F7, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xC6A2, 0xC6A3, 0, /* 0x90 */ + 0, 0xC6F8, 0xC6F9, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FD, 0xC6FE, /* 0xA0 */ + 0xC740, 0xC741, 0xC742, 0xC743, 0xC744, 0xC745, 0xC746, 0xC747, /* 0xA0 */ + 0xC748, 0xC749, 0xC74A, 0xC74B, 0xC74C, 0xC74D, 0xC74E, 0xC74F, /* 0xB0 */ + 0xC750, 0xC751, 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, /* 0xB0 */ + 0xC758, 0xC759, 0xC75A, 0xC75B, 0xC75C, 0xC75D, 0xC75E, 0xC75F, /* 0xC0 */ + 0xC760, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, 0xC767, /* 0xC0 */ + 0xC768, 0xC769, 0xC76A, 0xC76B, 0xC76C, 0xC76D, 0xC76E, 0xC76F, /* 0xD0 */ + 0xC770, 0xC771, 0xC772, 0xC773, 0xC774, 0xC775, 0xC776, 0xC777, /* 0xD0 */ + 0xC778, 0xC779, 0xC77A, 0xC77B, 0xC77C, 0xC77D, 0xC77E, 0xC7A1, /* 0xE0 */ + 0xC7A2, 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7A7, 0xC7A8, 0xC7A9, /* 0xE0 */ + 0xC7AA, 0xC7AB, 0xC7AC, 0xC7AD, 0xC7AE, 0xC7AF, 0xC7B0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0, 0xC6A1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_31[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA374, 0xA375, 0xA376, /* 0x00 */ + 0xA377, 0xA378, 0xA379, 0xA37A, 0xA37B, 0xA37C, 0xA37D, 0xA37E, /* 0x00 */ + 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7, 0xA3A8, /* 0x10 */ + 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF, 0xA3B0, /* 0x10 */ + 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7, 0xA3B8, /* 0x20 */ + 0xA3B9, 0xA3BA /* 0x20 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_32[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA1C0 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_33[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x80 */ + 0xA255, 0xA256, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0xA250, 0xA251, 0xA252, 0, /* 0x90 */ + 0, 0xA254, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xA257, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xA253, 0, /* 0xC0 */ + 0, 0xA1EB, 0xA1EA, 0, 0, 0xA24F /* 0xD0 */ + /* 0xD0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_4E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA440, 0xA442, 0, 0xA443, 0, 0, 0, 0xC945, /* 0x00 */ + 0xA456, 0xA454, 0xA457, 0xA455, 0xC946, 0xA4A3, 0xC94F, 0xC94D, /* 0x00 */ + 0xA4A2, 0xA4A1, 0, 0, 0xA542, 0xA541, 0xA540, 0, /* 0x10 */ + 0xA543, 0xA4FE, 0, 0, 0, 0, 0xA5E0, 0xA5E1, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xA8C3, 0, /* 0x20 */ + 0, 0, 0, 0xA458, 0, 0xA4A4, 0xC950, 0, /* 0x20 */ + 0xA4A5, 0xC963, 0xA6EA, 0xCBB1, 0, 0, 0, 0, /* 0x30 */ + 0xA459, 0xA4A6, 0, 0xA544, 0xC964, 0, 0, 0, /* 0x30 */ + 0, 0, 0xC940, 0xA444, 0, 0xA45B, 0, 0xC947, /* 0x40 */ + 0xA45C, 0, 0, 0xA4A7, 0, 0xA545, 0xA547, 0xA546, /* 0x40 */ + 0, 0, 0xA5E2, 0xA5E3, 0, 0, 0xA8C4, 0, /* 0x50 */ + 0xADBC, 0xA441, 0, 0, 0xC941, 0xA445, 0xA45E, 0xA45D, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xA5E4, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xA8C5, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xB0AE, 0xD44B, /* 0x70 */ + 0, 0, 0xB6C3, 0xDCB1, 0xDCB2, 0, 0xA446, 0, /* 0x80 */ + 0xA4A9, 0, 0, 0xA8C6, 0xA447, 0xC948, 0xA45F, 0, /* 0x80 */ + 0, 0xA4AA, 0xA4AC, 0xC951, 0xA4AD, 0xA4AB, 0, 0, /* 0x90 */ + 0, 0xA5E5, 0, 0xA8C7, 0, 0, 0xA8C8, 0xAB45, /* 0x90 */ + 0, 0xA460, 0xA4AE, 0, 0xA5E6, 0xA5E8, 0xA5E7, 0, /* 0xA0 */ + 0xA6EB, 0, 0, 0xA8C9, 0xA8CA, 0xAB46, 0xAB47, 0, /* 0xA0 */ + 0, 0, 0, 0xADBD, 0, 0, 0xDCB3, 0, /* 0xB0 */ + 0, 0xF6D6, 0xA448, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xA4B0, 0xA4AF, 0xC952, 0xA4B1, 0xA4B7, 0, 0xA4B2, 0xA4B3, /* 0xC0 */ + 0xC954, 0xC953, 0xA4B5, 0xA4B6, 0, 0xA4B4, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xA54A, 0xA54B, 0xA54C, 0xA54D, /* 0xD0 */ + 0xA549, 0xA550, 0xC96A, 0, 0xC966, 0xC969, 0xA551, 0xA561, /* 0xD0 */ + 0, 0xC968, 0, 0xA54E, 0xA54F, 0xA548, 0, 0, /* 0xE0 */ + 0xC965, 0xC967, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xA5F5, 0xC9B0, 0xA5F2, 0xA5F6, 0xC9BA, 0xC9AE, 0xA5F3, 0xC9B2, /* 0xF0 */ + 0, 0, 0, 0xA5F4, 0, 0xA5F7, 0, 0xA5E9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_4F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC9B1, 0xA5F8, 0xC9B5, 0, 0xC9B9, 0xC9B6, 0, 0, /* 0x00 */ + 0xC9B3, 0xA5EA, 0xA5EC, 0xA5F9, 0, 0xA5EE, 0xC9AB, 0xA5F1, /* 0x00 */ + 0xA5EF, 0xA5F0, 0xC9BB, 0xC9B8, 0xC9AF, 0xA5ED, 0, 0, /* 0x10 */ + 0xC9AC, 0xA5EB, 0, 0, 0, 0xC9B4, 0, 0, /* 0x10 */ + 0, 0, 0xC9B7, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0xC9AD, 0xCA66, 0, 0xA742, /* 0x20 */ + 0xA6F4, 0, 0, 0xCA67, 0xA6F1, 0, 0xA744, 0, /* 0x30 */ + 0xA6F9, 0, 0xA6F8, 0xCA5B, 0xA6FC, 0xA6F7, 0xCA60, 0xCA68, /* 0x30 */ + 0, 0xCA64, 0, 0xA6FA, 0, 0, 0xA6FD, 0xA6EE, /* 0x40 */ + 0xA747, 0xCA5D, 0, 0, 0xCBBD, 0xA6EC, 0xA743, 0xA6ED, /* 0x40 */ + 0xA6F5, 0xA6F6, 0xCA62, 0xCA5E, 0xA6FB, 0xA6F3, 0xCA5A, 0xA6EF, /* 0x50 */ + 0xCA65, 0xA745, 0xA748, 0xA6F2, 0xA740, 0xA746, 0xA6F0, 0xCA63, /* 0x50 */ + 0xA741, 0xCA69, 0xCA5C, 0xA6FE, 0xCA5F, 0, 0, 0xCA61, /* 0x60 */ + 0, 0xA8D8, 0xCBBF, 0xCBCB, 0xA8D0, 0, 0xCBCC, 0xA8CB, /* 0x60 */ + 0xA8D5, 0, 0, 0xA8CE, 0xCBB9, 0xA8D6, 0xCBB8, 0xCBBC, /* 0x70 */ + 0xCBC3, 0xCBC1, 0xA8DE, 0xA8D9, 0xCBB3, 0xCBB5, 0xA8DB, 0xA8CF, /* 0x70 */ + 0xCBB6, 0xCBC2, 0xCBC9, 0xA8D4, 0xCBBB, 0xCBB4, 0xA8D3, 0xCBB7, /* 0x80 */ + 0xA8D7, 0xCBBA, 0, 0xA8D2, 0, 0xA8CD, 0, 0xA8DC, /* 0x80 */ + 0xCBC4, 0xA8DD, 0xCBC8, 0, 0xCBC6, 0xCBCA, 0xA8DA, 0xCBBE, /* 0x90 */ + 0xCBB2, 0, 0xCBC0, 0xA8D1, 0xCBC5, 0xA8CC, 0xCBC7, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xAB56, 0xAB4A, /* 0xA0 */ + 0, 0, 0xCDE0, 0xCDE8, 0, 0xAB49, 0xAB51, 0xAB5D, /* 0xB0 */ + 0, 0xCDEE, 0xCDEC, 0xCDE7, 0, 0, 0, 0xAB4B, /* 0xB0 */ + 0xCDED, 0xCDE3, 0xAB59, 0xAB50, 0xAB58, 0xCDDE, 0, 0xCDEA, /* 0xC0 */ + 0, 0xCDE1, 0xAB54, 0xCDE2, 0, 0xCDDD, 0xAB5B, 0xAB4E, /* 0xC0 */ + 0xAB57, 0xAB4D, 0, 0xCDDF, 0xCDE4, 0, 0xCDEB, 0xAB55, /* 0xD0 */ + 0xAB52, 0xCDE6, 0xAB5A, 0xCDE9, 0xCDE5, 0xAB4F, 0xAB5C, 0xAB53, /* 0xD0 */ + 0xAB4C, 0xAB48, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xCDEF, 0, 0xADD7, 0xADC1, /* 0xE0 */ + 0, 0xADD1, 0, 0xADD6, 0xD0D0, 0xD0CF, 0xD0D4, 0xD0D5, /* 0xF0 */ + 0xADC4, 0, 0xADCD, 0, 0, 0, 0xADDA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_50[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xADCE, 0, 0, 0, 0, 0xD0C9, 0xADC7, 0xD0CA, /* 0x00 */ + 0, 0xADDC, 0, 0xADD3, 0xADBE, 0xADBF, 0xD0DD, 0xB0BF, /* 0x00 */ + 0, 0xADCC, 0xADCB, 0xD0CB, 0xADCF, 0xD45B, 0xADC6, 0xD0D6, /* 0x10 */ + 0xADD5, 0xADD4, 0xADCA, 0xD0CE, 0xD0D7, 0, 0xD0C8, 0xADC9, /* 0x10 */ + 0xD0D8, 0xADD2, 0xD0CC, 0xADC0, 0, 0xADC3, 0xADC2, 0xD0D9, /* 0x20 */ + 0xADD0, 0xADC5, 0xADD9, 0xADDB, 0xD0D3, 0xADD8, 0, 0xD0DB, /* 0x20 */ + 0xD0CD, 0xD0DC, 0, 0xD0D1, 0, 0xD0DA, 0, 0xD0D2, /* 0x30 */ + 0, 0, 0, 0, 0xADC8, 0, 0, 0, /* 0x30 */ + 0xD463, 0xD457, 0, 0xB0B3, 0, 0xD45C, 0xD462, 0xB0B2, /* 0x40 */ + 0xD455, 0xB0B6, 0xD459, 0xD452, 0xB0B4, 0xD456, 0xB0B9, 0xB0BE, /* 0x40 */ + 0, 0xD467, 0, 0xD451, 0, 0xB0BA, 0, 0xD466, /* 0x50 */ + 0, 0, 0xB0B5, 0xD458, 0xB0B1, 0xD453, 0xD44F, 0xD45D, /* 0x50 */ + 0xD450, 0xD44E, 0xD45A, 0xD460, 0xD461, 0xB0B7, 0, 0, /* 0x60 */ + 0xD85B, 0xD45E, 0xD44D, 0xD45F, 0, 0xB0C1, 0xD464, 0xB0C0, /* 0x60 */ + 0xD44C, 0, 0xD454, 0xD465, 0xB0BC, 0xB0BB, 0xB0B8, 0xB0BD, /* 0x70 */ + 0, 0, 0xB0AF, 0, 0, 0xB0B0, 0, 0, /* 0x70 */ + 0xB3C8, 0, 0xD85E, 0xD857, 0, 0xB3C5, 0, 0xD85F, /* 0x80 */ + 0, 0, 0, 0xD855, 0xD858, 0xB3C4, 0xD859, 0, /* 0x80 */ + 0, 0xB3C7, 0xD85D, 0, 0xD853, 0xD852, 0xB3C9, 0, /* 0x90 */ + 0xB3CA, 0xB3C6, 0xB3CB, 0xD851, 0xD85C, 0xD85A, 0xD854, 0, /* 0x90 */ + 0, 0, 0xB3C3, 0xD856, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xB6CA, 0xB6C4, 0xDCB7, 0xB6CD, /* 0xA0 */ + 0xDCBD, 0xDCC0, 0xB6C6, 0xB6C7, 0xDCBA, 0xB6C5, 0xDCC3, 0xB6CB, /* 0xB0 */ + 0xDCC4, 0, 0xDCBF, 0xB6CC, 0, 0xDCB4, 0xB6C9, 0xDCB5, /* 0xB0 */ + 0, 0xDCBE, 0xDCBC, 0, 0xDCB8, 0xB6C8, 0xDCB6, 0xB6CE, /* 0xC0 */ + 0xDCBB, 0xDCC2, 0xDCB9, 0xDCC1, 0, 0, 0xB9B6, 0xB9B3, /* 0xC0 */ + 0, 0xB9B4, 0, 0xE0F9, 0xE0F1, 0xB9B2, 0xB9AF, 0xE0F2, /* 0xD0 */ + 0, 0, 0xB9B1, 0xE0F5, 0, 0xE0F7, 0, 0, /* 0xD0 */ + 0xE0FE, 0, 0, 0xE0FD, 0xE0F8, 0xB9AE, 0xE0F0, 0xB9AC, /* 0xE0 */ + 0xE0F3, 0xB9B7, 0xE0F6, 0, 0xE0FA, 0xB9B0, 0xB9AD, 0xE0FC, /* 0xE0 */ + 0xE0FB, 0xB9B5, 0, 0xE0F4, 0, 0xBBF8, 0xE4EC, 0, /* 0xF0 */ + 0xE4E9, 0xBBF9, 0, 0xBBF7, 0, 0xE4F0, 0xE4ED, 0xE4E6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_51[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBBF6, 0, 0xBBFA, 0xE4E7, 0xBBF5, 0xBBFD, 0xE4EA, 0xE4EB, /* 0x00 */ + 0xBBFB, 0xBBFC, 0xE4F1, 0xE4EE, 0xE4EF, 0, 0, 0, /* 0x00 */ + 0xBEAA, 0xE8F8, 0xBEA7, 0xE8F5, 0xBEA9, 0xBEAB, 0, 0xE8F6, /* 0x10 */ + 0xBEA8, 0, 0xE8F7, 0, 0xE8F4, 0, 0, 0xC076, /* 0x10 */ + 0xECBD, 0xC077, 0xECBB, 0, 0xECBC, 0xECBA, 0xECB9, 0, /* 0x20 */ + 0, 0xECBE, 0xC075, 0, 0, 0xEFB8, 0xEFB9, 0, /* 0x20 */ + 0xE4E8, 0xEFB7, 0xC078, 0xC35F, 0xF1EB, 0xF1EC, 0, 0xC4D7, /* 0x30 */ + 0xC4D8, 0xF5C1, 0xF5C0, 0xC56C, 0xC56B, 0xF7D0, 0, 0xA449, /* 0x30 */ + 0xA461, 0xA4B9, 0, 0xA4B8, 0xA553, 0xA552, 0xA5FC, 0xA5FB, /* 0x40 */ + 0xA5FD, 0xA5FA, 0, 0xA74A, 0xA749, 0xA74B, 0, 0, /* 0x40 */ + 0, 0, 0xA8E0, 0, 0xA8DF, 0xA8E1, 0, 0xAB5E, /* 0x50 */ + 0, 0xA259, 0xD0DE, 0xA25A, 0xB0C2, 0xA25C, 0xA25B, 0xD860, /* 0x50 */ + 0, 0xA25D, 0xB9B8, 0xA25E, 0, 0xA44A, 0, 0xA4BA, /* 0x60 */ + 0xA5FE, 0xA8E2, 0, 0xA44B, 0xA4BD, 0xA4BB, 0xA4BC, 0, /* 0x60 */ + 0, 0xA640, 0, 0, 0, 0xA74C, 0xA8E4, 0xA8E3, /* 0x70 */ + 0xA8E5, 0, 0, 0, 0xADDD, 0, 0, 0, /* 0x70 */ + 0xBEAC, 0, 0, 0, 0, 0, 0, 0xC94E, /* 0x80 */ + 0, 0xA554, 0xA555, 0, 0, 0xA641, 0, 0xCA6A, /* 0x80 */ + 0, 0xAB60, 0xAB5F, 0xD0E0, 0xD0DF, 0xB0C3, 0, 0xA4BE, /* 0x90 */ + 0xC955, 0, 0, 0, 0, 0, 0xCBCD, 0, /* 0x90 */ + 0xAB61, 0, 0xADE0, 0, 0xADDE, 0xADDF, 0, 0, /* 0xA0 */ + 0, 0, 0xBEAD, 0, 0xA556, 0, 0, 0, /* 0xA0 */ + 0xA642, 0xC9BC, 0, 0, 0, 0, 0xA74D, 0xA74E, /* 0xB0 */ + 0, 0xCA6B, 0, 0, 0xCBCE, 0xA8E6, 0xCBCF, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xD0E2, 0xD0E3, 0xADE3, 0, /* 0xC0 */ + 0xD0E4, 0, 0xD0E1, 0xADE4, 0xADE2, 0xADE1, 0xD0E5, 0, /* 0xC0 */ + 0xD468, 0, 0, 0, 0xD861, 0, 0, 0xDCC5, /* 0xD0 */ + 0xE140, 0, 0, 0, 0xBBFE, 0xBEAE, 0xE8F9, 0, /* 0xD0 */ + 0xA44C, 0xA45A, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xB0C4, 0xB3CD, 0, 0xB9B9, 0, 0xC942, 0xA4BF, 0, /* 0xF0 */ + 0xA559, 0xA557, 0xA558, 0, 0, 0xA8E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_52[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA44D, 0xA44E, 0, 0xA462, 0, 0, 0xA4C0, 0xA4C1, /* 0x00 */ + 0xA4C2, 0xC9BE, 0xA55A, 0, 0xC96B, 0, 0xA646, 0, /* 0x00 */ + 0xC9BF, 0xA644, 0xA645, 0xC9BD, 0, 0, 0xA647, 0xA643, /* 0x10 */ + 0, 0, 0, 0, 0xCA6C, 0xAAEC, 0xCA6D, 0, /* 0x10 */ + 0, 0xCA6E, 0, 0, 0xA750, 0xA74F, 0, 0, /* 0x20 */ + 0xA753, 0xA751, 0xA752, 0, 0, 0, 0xA8ED, 0, /* 0x20 */ + 0xA8EC, 0xCBD4, 0xCBD1, 0xCBD2, 0, 0xCBD0, 0xA8EE, 0xA8EA, /* 0x30 */ + 0xA8E9, 0, 0xA8EB, 0xA8E8, 0, 0, 0, 0, /* 0x30 */ + 0, 0xA8EF, 0, 0xAB63, 0xCDF0, 0, 0xCBD3, 0xAB68, /* 0x40 */ + 0, 0xCDF1, 0xAB64, 0xAB67, 0xAB66, 0xAB65, 0xAB62, 0, /* 0x40 */ + 0, 0, 0xD0E8, 0, 0xADE7, 0xD0EB, 0xADE5, 0, /* 0x50 */ + 0, 0, 0xD0E7, 0xADE8, 0xADE6, 0xADE9, 0xD0E9, 0xD0EA, /* 0x50 */ + 0, 0xD0E6, 0xD0EC, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0xB3D1, 0xB0C5, 0xD469, 0xD46B, 0xD46A, 0xD46C, 0xB0C6, /* 0x60 */ + 0, 0, 0xB3CE, 0, 0xB3CF, 0xB3D0, 0, 0xB6D0, /* 0x70 */ + 0xDCC7, 0, 0xDCC6, 0xDCC8, 0xDCC9, 0xB6D1, 0, 0xB6CF, /* 0x70 */ + 0xE141, 0xE142, 0xB9BB, 0xB9BA, 0xE35A, 0, 0, 0xBC40, /* 0x80 */ + 0xBC41, 0xBC42, 0xBC44, 0xE4F2, 0xE4F3, 0xBC43, 0, 0, /* 0x80 */ + 0, 0xBEAF, 0, 0xBEB0, 0, 0, 0xF1ED, 0xF5C3, /* 0x90 */ + 0xF5C2, 0xF7D1, 0, 0xA44F, 0, 0, 0, 0xA55C, /* 0x90 */ + 0xA55B, 0, 0, 0xA648, 0, 0, 0xC9C0, 0, /* 0xA0 */ + 0, 0xA755, 0xA756, 0xA754, 0xA757, 0xCA6F, 0xCA70, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xA8F1, 0xCBD5, 0, 0xA8F0, 0, /* 0xB0 */ + 0xCDF2, 0xAB6C, 0xCDF3, 0xAB6B, 0, 0, 0, 0xAB69, /* 0xC0 */ + 0, 0xAB6A, 0, 0, 0, 0xD0ED, 0, 0, /* 0xC0 */ + 0, 0, 0xB0C7, 0xD46E, 0, 0xB0CA, 0xD46D, 0xB1E5, /* 0xD0 */ + 0xB0C9, 0xB0C8, 0, 0xB3D4, 0, 0xB3D3, 0xB3D2, 0xB6D2, /* 0xD0 */ + 0, 0, 0xB6D5, 0xB6D6, 0xB6D4, 0, 0xB6D3, 0, /* 0xE0 */ + 0, 0xE143, 0, 0xE144, 0, 0, 0, 0xE4F5, /* 0xE0 */ + 0xBC45, 0xE4F4, 0, 0xBEB1, 0xECBF, 0xC079, 0, 0xF1EE, /* 0xF0 */ + 0xC455, 0, 0xA463, 0xA4C3, 0xC956, 0, 0xA4C4, 0xA4C5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_53[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA55D, 0xA55E, 0, /* 0x00 */ + 0xA649, 0xCA71, 0xCBD6, 0xCBD7, 0, 0xAB6D, 0xD0EE, 0xB0CC, /* 0x00 */ + 0xB0CB, 0xD863, 0xD862, 0, 0, 0xA450, 0xA4C6, 0xA55F, /* 0x10 */ + 0, 0xB0CD, 0xC943, 0, 0xC96C, 0xA560, 0, 0xC9C2, /* 0x10 */ + 0xA64B, 0xA64A, 0xC9C1, 0xA758, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xADEA, 0, 0, 0xD46F, 0, 0xB6D7, /* 0x20 */ + 0xE145, 0xB9BC, 0, 0, 0xE8FA, 0, 0, 0xF3FD, /* 0x30 */ + 0, 0xA4C7, 0, 0, 0xCBD8, 0xCDF4, 0xB0D0, 0xB0CE, /* 0x30 */ + 0xB0CF, 0xA451, 0, 0xA464, 0xA2CD, 0xA4CA, 0, 0xA4C9, /* 0x40 */ + 0xA4C8, 0xA563, 0xA562, 0, 0xC96D, 0xC9C3, 0, 0, /* 0x40 */ + 0, 0xA8F5, 0xA8F2, 0xA8F4, 0xA8F3, 0, 0, 0xAB6E, /* 0x50 */ + 0, 0, 0xB3D5, 0, 0xA452, 0, 0xA4CB, 0, /* 0x50 */ + 0xA565, 0xA564, 0, 0xCA72, 0, 0, 0xA8F6, 0, /* 0x60 */ + 0, 0, 0, 0, 0xC957, 0, 0xA567, 0xA566, /* 0x60 */ + 0xA64C, 0xA64D, 0xCA73, 0xA759, 0, 0xA75A, 0, 0xA8F7, /* 0x70 */ + 0xA8F8, 0xA8F9, 0, 0xAB6F, 0xCDF5, 0, 0, 0xADEB, /* 0x70 */ + 0, 0, 0xC944, 0, 0xA4CC, 0, 0, 0, /* 0x80 */ + 0, 0, 0xC9C4, 0, 0, 0, 0xCA74, 0xCA75, /* 0x80 */ + 0, 0, 0xCBD9, 0, 0xCBDA, 0, 0xCDF7, 0xCDF6, /* 0x90 */ + 0xCDF9, 0xCDF8, 0xAB70, 0, 0xD470, 0xADED, 0xD0EF, 0xADEC, /* 0x90 */ + 0, 0, 0, 0, 0xD864, 0xB3D6, 0, 0xD865, /* 0xA0 */ + 0, 0, 0, 0, 0xE146, 0xB9BD, 0, 0, /* 0xA0 */ + 0, 0, 0xBC46, 0, 0xF1EF, 0, 0, 0, /* 0xB0 */ + 0, 0xC958, 0, 0xA568, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xB0D1, 0, 0, 0, 0, /* 0xC0 */ + 0xA453, 0xA465, 0xA4CE, 0xA4CD, 0, 0xA4CF, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xA8FB, 0, 0xA8FA, 0xA8FC, /* 0xD0 */ + 0, 0, 0, 0xAB71, 0, 0, 0, 0xADEE, /* 0xD0 */ + 0, 0xE8FB, 0xC24F, 0xA466, 0xA56A, 0xA579, 0xA574, 0, /* 0xE0 */ + 0xA56F, 0xA56E, 0xA575, 0xA573, 0xA56C, 0xA57A, 0xA56D, 0xA569, /* 0xE0 */ + 0xA578, 0xA577, 0xA576, 0xA56B, 0, 0xA572, 0, 0, /* 0xF0 */ + 0xA571, 0, 0, 0xA57B, 0xA570 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_54[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA653, 0, 0xA659, 0xA655, 0, 0xA65B, 0xC9C5, /* 0x00 */ + 0xA658, 0xA64E, 0xA651, 0xA654, 0xA650, 0xA657, 0xA65A, 0xA64F, /* 0x00 */ + 0xA652, 0xA656, 0xA65C, 0, 0, 0, 0, 0, /* 0x10 */ + 0xCA7E, 0xCA7B, 0, 0xA767, 0xCA7C, 0xA75B, 0xA75D, 0xA775, /* 0x10 */ + 0xA770, 0, 0, 0, 0xCAA5, 0xCA7D, 0xA75F, 0xA761, /* 0x20 */ + 0xCAA4, 0xA768, 0xCA78, 0xA774, 0xA776, 0xA75C, 0xA76D, 0, /* 0x20 */ + 0xCA76, 0xA773, 0, 0xA764, 0, 0xA76E, 0xA76F, 0xCA77, /* 0x30 */ + 0xA76C, 0xA76A, 0, 0xA76B, 0xA771, 0xCAA1, 0xA75E, 0, /* 0x30 */ + 0xA772, 0xCAA3, 0xA766, 0xA763, 0, 0xCA7A, 0xA762, 0xCAA6, /* 0x40 */ + 0xA765, 0, 0xA769, 0, 0, 0, 0xA760, 0xCAA2, /* 0x40 */ + 0, 0, 0, 0, 0xCA79, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xCBEB, 0xCBEA, 0xA94F, 0xCBED, 0xCBEF, 0xCBE4, 0xCBE7, 0xCBEE, /* 0x60 */ + 0xA950, 0, 0, 0xCBE1, 0xCBE5, 0, 0, 0xCBE9, /* 0x60 */ + 0xCE49, 0xA94B, 0xCE4D, 0xA8FD, 0xCBE6, 0xA8FE, 0xA94C, 0xA945, /* 0x70 */ + 0xA941, 0, 0xCBE2, 0xA944, 0xA949, 0xA952, 0xCBE3, 0xCBDC, /* 0x70 */ + 0xA943, 0xCBDD, 0xCBDF, 0, 0xA946, 0, 0xA948, 0xCBDB, /* 0x80 */ + 0xCBE0, 0, 0, 0xA951, 0xA94D, 0xCBE8, 0xA953, 0, /* 0x80 */ + 0xA94A, 0xCBDE, 0xA947, 0, 0, 0xA942, 0xA940, 0, /* 0x90 */ + 0xCBEC, 0, 0xA94E, 0, 0, 0, 0, 0, /* 0x90 */ + 0xCE48, 0xCDFB, 0xCE4B, 0, 0, 0xCDFD, 0xAB78, 0xABA8, /* 0xA0 */ + 0xAB74, 0xABA7, 0xAB7D, 0xABA4, 0xAB72, 0xCDFC, 0xCE43, 0xABA3, /* 0xA0 */ + 0xCE4F, 0xABA5, 0, 0xAB79, 0, 0, 0xCE45, 0xCE42, /* 0xB0 */ + 0xAB77, 0, 0xCDFA, 0xABA6, 0xCE4A, 0xAB7C, 0xCE4C, 0xABA9, /* 0xB0 */ + 0xAB73, 0xAB7E, 0xAB7B, 0xCE40, 0xABA1, 0xCE46, 0xCE47, 0xAB7A, /* 0xC0 */ + 0xABA2, 0xAB76, 0, 0, 0, 0, 0xAB75, 0xCDFE, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xCE44, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0xCE4E, 0, /* 0xD0 */ + 0xD144, 0xADFB, 0xD0F1, 0, 0xD0F6, 0xADF4, 0xAE40, 0xD0F4, /* 0xE0 */ + 0xADEF, 0xADF9, 0xADFE, 0xD0FB, 0, 0xADFA, 0xADFD, 0, /* 0xE0 */ + 0, 0xD0FE, 0xADF5, 0xD0F5, 0, 0, 0, 0xD142, /* 0xF0 */ + 0xD143, 0, 0xADF7, 0xD141, 0xADF3, 0xAE43, 0, 0xD0F8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_55[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xADF1, 0, 0xD146, 0xD0F9, 0xD0FD, 0xADF6, 0xAE42, /* 0x00 */ + 0xD0FA, 0xADFC, 0xD140, 0xD147, 0xD4A1, 0, 0xD145, 0xAE44, /* 0x00 */ + 0xADF0, 0xD0FC, 0xD0F3, 0, 0xADF8, 0, 0, 0xD0F2, /* 0x10 */ + 0, 0, 0xD0F7, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0xD0F0, 0xAE41, /* 0x20 */ + 0, 0, 0xD477, 0, 0xB0E4, 0xD4A7, 0xB0E2, 0xB0DF, /* 0x20 */ + 0xD47C, 0xB0DB, 0xD4A2, 0xB0E6, 0xD476, 0xD47B, 0xD47A, 0xADF2, /* 0x30 */ + 0xB0E1, 0xD4A5, 0, 0xD4A8, 0xD473, 0, 0xB3E8, 0, /* 0x30 */ + 0xD4A9, 0xB0E7, 0, 0xB0D9, 0xB0D6, 0xD47E, 0xB0D3, 0, /* 0x40 */ + 0xD4A6, 0, 0xB0DA, 0xD4AA, 0, 0xD474, 0xD4A4, 0xB0DD, /* 0x40 */ + 0xD475, 0xD478, 0xD47D, 0, 0, 0xB0DE, 0xB0DC, 0xB0E8, /* 0x50 */ + 0, 0, 0, 0, 0xB0E3, 0, 0xB0D7, 0xB1D2, /* 0x50 */ + 0, 0xB0D8, 0xD479, 0xB0E5, 0xB0E0, 0xD4A3, 0xB0D5, 0, /* 0x60 */ + 0, 0, 0xB0D4, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xD471, 0xD472, 0xD86A, /* 0x70 */ + 0, 0, 0, 0xB3D7, 0xB3DA, 0xD875, 0xB3EE, 0xD878, /* 0x70 */ + 0xB3D8, 0xD871, 0xB3DE, 0xB3E4, 0xB5BD, 0, 0, 0xB3E2, /* 0x80 */ + 0xD86E, 0xB3EF, 0xB3DB, 0xB3E3, 0xD876, 0xDCD7, 0xD87B, 0xD86F, /* 0x80 */ + 0, 0xD866, 0xD873, 0xD86D, 0xB3E1, 0xD879, 0, 0, /* 0x90 */ + 0xB3DD, 0xB3F1, 0xB3EA, 0, 0xB3DF, 0xB3DC, 0, 0xB3E7, /* 0x90 */ + 0, 0xD87A, 0xD86C, 0xD872, 0xD874, 0xD868, 0xD877, 0xB3D9, /* 0xA0 */ + 0xD867, 0, 0xB3E0, 0xB3F0, 0xB3EC, 0xD869, 0xB3E6, 0, /* 0xA0 */ + 0, 0xB3ED, 0xB3E9, 0xB3E5, 0, 0xD870, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xB3EB, 0, 0, 0, 0xDCD5, /* 0xB0 */ + 0xDCD1, 0, 0xDCE0, 0xDCCA, 0xDCD3, 0xB6E5, 0xB6E6, 0xB6DE, /* 0xC0 */ + 0xDCDC, 0xB6E8, 0xDCCF, 0xDCCE, 0xDCCC, 0xDCDE, 0xB6DC, 0xDCD8, /* 0xC0 */ + 0xDCCD, 0xB6DF, 0xDCD6, 0xB6DA, 0xDCD2, 0xDCD9, 0xDCDB, 0, /* 0xD0 */ + 0, 0xDCDF, 0xB6E3, 0xDCCB, 0xB6DD, 0xDCD0, 0, 0xB6D8, /* 0xD0 */ + 0, 0xB6E4, 0xDCDA, 0xB6E0, 0xB6E1, 0xB6E7, 0xB6DB, 0xA25F, /* 0xE0 */ + 0xB6D9, 0xDCD4, 0, 0, 0, 0, 0, 0xB6E2, /* 0xE0 */ + 0, 0, 0xDCDD, 0, 0, 0, 0xB9CD, 0xB9C8, /* 0xF0 */ + 0, 0xE155, 0xE151, 0, 0xE14B, 0xB9C2, 0xB9BE, 0xE154 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_56[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB9BF, 0xE14E, 0xE150, 0, 0xE153, 0, 0xB9C4, 0, /* 0x00 */ + 0xB9CB, 0xB9C5, 0, 0, 0xE149, 0xB9C6, 0xB9C7, 0xE14C, /* 0x00 */ + 0xB9CC, 0, 0xE14A, 0xE14F, 0xB9C3, 0xE148, 0xB9C9, 0xB9C1, /* 0x10 */ + 0, 0, 0, 0xB9C0, 0xE14D, 0xE152, 0, 0xB9CA, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0xE147, /* 0x20 */ + 0, 0xBC4D, 0xE547, 0, 0xE544, 0, 0xBC47, 0xBC53, /* 0x20 */ + 0xBC54, 0, 0xBC4A, 0xE542, 0xBC4C, 0xE4F9, 0xBC52, 0, /* 0x30 */ + 0xE546, 0xBC49, 0xE548, 0xBC48, 0, 0xE543, 0xE545, 0xBC4B, /* 0x30 */ + 0xE541, 0xE4FA, 0xE4F7, 0, 0, 0xD86B, 0xE4FD, 0, /* 0x40 */ + 0xE4F6, 0xE4FC, 0xE4FB, 0, 0xE4F8, 0, 0xBC4F, 0, /* 0x40 */ + 0, 0, 0, 0xBC4E, 0, 0, 0, 0xBC50, /* 0x50 */ + 0xE4FE, 0xBEB2, 0xE540, 0, 0, 0, 0xE945, 0, /* 0x50 */ + 0xE8FD, 0, 0xBEBE, 0xE942, 0xBEB6, 0xBEBA, 0xE941, 0, /* 0x60 */ + 0xBEB9, 0xBEB5, 0xBEB8, 0xBEB3, 0xBEBD, 0xE943, 0xE8FE, 0xBEBC, /* 0x60 */ + 0xE8FC, 0xBEBB, 0xE944, 0xE940, 0xBC51, 0, 0xBEBF, 0xE946, /* 0x70 */ + 0xBEB7, 0xBEB4, 0, 0, 0, 0, 0xECC6, 0xECC8, /* 0x70 */ + 0xC07B, 0xECC9, 0xECC7, 0xECC5, 0xECC4, 0xC07D, 0xECC3, 0xC07E, /* 0x80 */ + 0, 0, 0, 0, 0xECC1, 0xECC2, 0xC07A, 0xC0A1, /* 0x80 */ + 0xC07C, 0, 0, 0xECC0, 0, 0xC250, 0, 0xEFBC, /* 0x90 */ + 0xEFBA, 0xEFBF, 0xEFBD, 0, 0xEFBB, 0xEFBE, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xC360, 0xF1F2, 0xF1F3, /* 0xA0 */ + 0xC456, 0, 0xF1F4, 0xF1F0, 0xF1F5, 0xF1F1, 0xC251, 0, /* 0xA0 */ + 0, 0, 0xF3FE, 0xF441, 0xC459, 0xF440, 0xC458, 0xC457, /* 0xB0 */ + 0, 0, 0, 0, 0xC45A, 0xF5C5, 0xF5C6, 0, /* 0xB0 */ + 0xC4DA, 0xC4D9, 0xC4DB, 0xF5C4, 0, 0xF6D8, 0xF6D7, 0, /* 0xC0 */ + 0xC56D, 0xC56F, 0xC56E, 0xF6D9, 0xC5C8, 0xF8A6, 0, 0, /* 0xC0 */ + 0, 0xC5F1, 0, 0xF8A5, 0xF8EE, 0, 0, 0xC949, /* 0xD0 */ + 0, 0, 0xA57D, 0xA57C, 0, 0xA65F, 0xA65E, 0xC9C7, /* 0xD0 */ + 0xA65D, 0xC9C6, 0, 0, 0xA779, 0xCAA9, 0, 0xCAA8, /* 0xE0 */ + 0, 0, 0xA777, 0xA77A, 0, 0, 0xCAA7, 0, /* 0xE0 */ + 0xA778, 0, 0, 0, 0, 0, 0, 0xCBF0, /* 0xF0 */ + 0, 0xCBF1, 0xA954, 0, 0, 0, 0, 0xABAA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_57[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD148, 0xD149, 0xAE45, 0xAE46, 0, 0, 0xD4AC, /* 0x00 */ + 0xB0E9, 0xB0EB, 0xD4AB, 0xB0EA, 0xD87C, 0xB3F2, 0, 0, /* 0x00 */ + 0, 0, 0xB6E9, 0xB6EA, 0xDCE1, 0, 0xB9CF, 0, /* 0x10 */ + 0xB9CE, 0, 0xE549, 0xE948, 0xE947, 0, 0xF96B, 0xA467, /* 0x10 */ + 0xC959, 0, 0xC96E, 0xC96F, 0, 0, 0, 0, /* 0x20 */ + 0xA662, 0xA666, 0xC9C9, 0, 0xA664, 0xA663, 0xC9C8, 0xA665, /* 0x20 */ + 0xA661, 0, 0, 0xA660, 0xC9CA, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xA7A6, 0, 0, 0xA7A3, 0, /* 0x30 */ + 0xA77D, 0xCAAA, 0, 0, 0, 0xCAAB, 0, 0xA7A1, /* 0x40 */ + 0, 0xCAAD, 0xA77B, 0xCAAE, 0xCAAC, 0xA77E, 0xA7A2, 0xA7A5, /* 0x40 */ + 0xA7A4, 0xA77C, 0xCAAF, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xA959, 0xCBFE, 0, 0xA95B, 0, 0xA95A, 0, /* 0x60 */ + 0xCC40, 0xA958, 0xA957, 0xCBF5, 0, 0xCBF4, 0, 0xCBF2, /* 0x60 */ + 0xCBF7, 0xCBF6, 0xCBF3, 0xCBFC, 0xCBFD, 0xCBFA, 0xCBF8, 0xA956, /* 0x70 */ + 0, 0, 0, 0xCBFB, 0xA95C, 0xCC41, 0, 0, /* 0x70 */ + 0xCBF9, 0, 0xABAB, 0xA955, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0xABAC, 0xCE54, 0, 0, 0xCE5A, /* 0x80 */ + 0, 0, 0, 0xABB2, 0xCE58, 0xCE5E, 0, 0xCE55, /* 0x90 */ + 0xCE59, 0xCE5B, 0xCE5D, 0xCE57, 0, 0xCE56, 0xCE51, 0xCE52, /* 0x90 */ + 0xABAD, 0, 0xABAF, 0xABAE, 0xCE53, 0xCE5C, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xABB1, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xCE50, 0xD153, 0, /* 0xB0 */ + 0xD152, 0xD157, 0xD14E, 0, 0xD151, 0xD150, 0, 0xD154, /* 0xB0 */ + 0, 0xD158, 0xAE47, 0xAE4A, 0, 0, 0xD14F, 0xD155, /* 0xC0 */ + 0, 0, 0, 0xAE49, 0xD14A, 0, 0xABB0, 0xD4BA, /* 0xC0 */ + 0xD156, 0, 0xD14D, 0, 0xAE48, 0xD14C, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0xD4B1, 0, 0, 0xB0EC, /* 0xD0 */ + 0xB0F0, 0xD4C1, 0xD4AF, 0xD4BD, 0xB0F1, 0xD4BF, 0, 0xD4C5, /* 0xE0 */ + 0, 0xD4C9, 0, 0, 0xD4C0, 0xD4B4, 0xD4BC, 0, /* 0xE0 */ + 0xD4CA, 0xD4C8, 0xD4BE, 0xD4B9, 0xD4B2, 0xD8A6, 0xD4B0, 0xB0F5, /* 0xF0 */ + 0xD4B7, 0xB0F6, 0xB0F2, 0xD4AD, 0xD4C3, 0xD4B5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_58[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD4B3, 0xD4C6, 0xB0F3, 0, 0xD4CC, 0xB0ED, 0xB0EF, 0xD4BB, /* 0x00 */ + 0xD4B6, 0xAE4B, 0xB0EE, 0xD4B8, 0xD4C7, 0xD4CB, 0xD4C2, 0, /* 0x00 */ + 0xD4C4, 0, 0, 0, 0xD4AE, 0, 0, 0, /* 0x10 */ + 0, 0xD8A1, 0, 0xD8AA, 0xD8A9, 0xB3FA, 0xD8A2, 0, /* 0x10 */ + 0xB3FB, 0xB3F9, 0, 0xD8A4, 0xB3F6, 0xD8A8, 0, 0xD8A3, /* 0x20 */ + 0xD8A5, 0xD87D, 0xB3F4, 0, 0xD8B2, 0xD8B1, 0xD8AE, 0xB3F3, /* 0x20 */ + 0xB3F7, 0xB3F8, 0xD14B, 0xD8AB, 0xB3F5, 0xB0F4, 0xD8AD, 0xD87E, /* 0x30 */ + 0xD8B0, 0xD8AF, 0, 0xD8B3, 0, 0xDCEF, 0, 0xD8AC, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0xD8A7, 0xDCE7, 0xB6F4, 0xB6F7, 0xB6F2, 0xDCE6, 0xDCEA, 0xDCE5, /* 0x40 */ + 0, 0xB6EC, 0xB6F6, 0xDCE2, 0xB6F0, 0xDCE9, 0, 0xB6EE, /* 0x50 */ + 0xB6ED, 0xDCEC, 0xB6EF, 0xDCEE, 0, 0xDCEB, 0xB6EB, 0, /* 0x50 */ + 0, 0, 0xB6F5, 0xDCF0, 0xDCE4, 0xDCED, 0, 0, /* 0x60 */ + 0xDCE3, 0, 0, 0xB6F1, 0, 0xB6F3, 0, 0xDCE8, /* 0x60 */ + 0, 0xDCF1, 0, 0, 0xE15D, 0xB9D0, 0xE163, 0, /* 0x70 */ + 0, 0xB9D5, 0xE15F, 0xE166, 0xE157, 0xB9D7, 0xB9D1, 0xE15C, /* 0x70 */ + 0xBC55, 0xE15B, 0xE164, 0xB9D2, 0, 0xB9D6, 0xE15A, 0xE160, /* 0x80 */ + 0xE165, 0xE156, 0xB9D4, 0xE15E, 0, 0, 0xE162, 0xE168, /* 0x80 */ + 0xE158, 0xE161, 0, 0xB9D3, 0xE167, 0, 0, 0, /* 0x90 */ + 0xE159, 0, 0, 0, 0xBC59, 0xE54B, 0xBC57, 0xBC56, /* 0x90 */ + 0xE54D, 0xE552, 0, 0xE54E, 0, 0xE551, 0xBC5C, 0, /* 0xA0 */ + 0xBEA5, 0xBC5B, 0, 0xE54A, 0xE550, 0, 0xBC5A, 0xE54F, /* 0xA0 */ + 0, 0xE54C, 0, 0xBC58, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xE94D, 0xF9D9, 0xE94F, 0xE94A, 0xBEC1, 0xE94C, /* 0xB0 */ + 0, 0xBEC0, 0xE94E, 0, 0, 0xBEC3, 0xE950, 0xBEC2, /* 0xC0 */ + 0xE949, 0xE94B, 0, 0, 0, 0, 0xC0A5, 0xECCC, /* 0xC0 */ + 0, 0xC0A4, 0xECCD, 0xC0A3, 0xECCB, 0xC0A2, 0xECCA, 0, /* 0xD0 */ + 0xC253, 0xC252, 0xF1F6, 0xF1F8, 0, 0xF1F7, 0xC361, 0xC362, /* 0xD0 */ + 0, 0, 0xC363, 0xF442, 0xC45B, 0, 0, 0xF7D3, /* 0xE0 */ + 0xF7D2, 0xC5F2, 0, 0xA468, 0xA4D0, 0, 0, 0xA7A7, /* 0xE0 */ + 0, 0, 0, 0, 0xCE5F, 0, 0, 0, /* 0xF0 */ + 0, 0xB3FC, 0xB3FD, 0, 0xDCF2, 0xB9D8, 0xE169, 0xE553 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_59[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC95A, 0, 0, 0xCAB0, 0, /* 0x00 */ + 0, 0, 0, 0, 0xCC42, 0xCE60, 0xD159, 0xAE4C, /* 0x00 */ + 0, 0, 0xF1F9, 0, 0xC4DC, 0xA469, 0xA57E, 0xC970, /* 0x10 */ + 0, 0xA667, 0xA668, 0, 0xA95D, 0, 0, 0, /* 0x10 */ + 0xB0F7, 0, 0xB9DA, 0, 0xB9DB, 0xB9D9, 0, 0xA46A, /* 0x20 */ + 0, 0xA4D1, 0xA4D3, 0xA4D2, 0xC95B, 0xA4D4, 0xA5A1, 0xC971, /* 0x20 */ + 0, 0xA5A2, 0, 0, 0, 0, 0, 0xA669, /* 0x30 */ + 0xA66A, 0, 0, 0, 0xC9CB, 0, 0xA7A8, 0, /* 0x30 */ + 0xCAB1, 0, 0, 0, 0xA961, 0xCC43, 0, 0xA95F, /* 0x40 */ + 0xA960, 0xA95E, 0xD15A, 0, 0, 0, 0xABB6, 0xABB5, /* 0x40 */ + 0xABB7, 0xABB4, 0, 0xCE61, 0xA962, 0xABB3, 0, 0xAE4D, /* 0x50 */ + 0xAE4E, 0, 0xAE4F, 0, 0xD4CD, 0, 0, 0, /* 0x50 */ + 0xB3FE, 0xD8B4, 0xB0F8, 0, 0, 0, 0, 0xB6F8, /* 0x60 */ + 0, 0xB9DD, 0xB9DC, 0xE16A, 0, 0xBC5D, 0xBEC4, 0, /* 0x60 */ + 0xEFC0, 0xF6DA, 0xF7D4, 0xA46B, 0xA5A3, 0, 0xA5A4, 0xC9D1, /* 0x70 */ + 0xA66C, 0xA66F, 0, 0xC9CF, 0xC9CD, 0xA66E, 0xC9D0, 0xC9D2, /* 0x70 */ + 0xC9CC, 0xA671, 0xA670, 0xA66D, 0xA66B, 0xC9CE, 0, 0, /* 0x80 */ + 0, 0, 0xA7B3, 0, 0, 0xA7B0, 0xCAB6, 0xCAB9, /* 0x80 */ + 0xCAB8, 0, 0xA7AA, 0xA7B2, 0, 0, 0xA7AF, 0xCAB5, /* 0x90 */ + 0xCAB3, 0xA7AE, 0, 0, 0, 0xA7A9, 0xA7AC, 0, /* 0x90 */ + 0xCAB4, 0xCABB, 0xCAB7, 0xA7AD, 0xA7B1, 0xA7B4, 0xCAB2, 0xCABA, /* 0xA0 */ + 0xA7AB, 0, 0, 0, 0, 0, 0xA967, 0xA96F, /* 0xA0 */ + 0, 0xCC4F, 0xCC48, 0xA970, 0xCC53, 0xCC44, 0xCC4B, 0, /* 0xB0 */ + 0, 0xA966, 0xCC45, 0xA964, 0xCC4C, 0xCC50, 0xA963, 0, /* 0xB0 */ + 0xCC51, 0xCC4A, 0, 0xCC4D, 0, 0xA972, 0xA969, 0xCC54, /* 0xC0 */ + 0xCC52, 0, 0xA96E, 0xA96C, 0xCC49, 0xA96B, 0xCC47, 0xCC46, /* 0xC0 */ + 0xA96A, 0xA968, 0xA971, 0xA96D, 0xA965, 0, 0xCC4E, 0, /* 0xD0 */ + 0xABB9, 0, 0xABC0, 0xCE6F, 0xABB8, 0xCE67, 0xCE63, 0, /* 0xD0 */ + 0xCE73, 0xCE62, 0, 0xABBB, 0xCE6C, 0xABBE, 0xABC1, 0, /* 0xE0 */ + 0xABBC, 0xCE70, 0xABBF, 0, 0xAE56, 0xCE76, 0xCE64, 0, /* 0xE0 */ + 0, 0xCE66, 0xCE6D, 0xCE71, 0xCE75, 0xCE72, 0xCE6B, 0xCE6E, /* 0xF0 */ + 0, 0, 0xCE68, 0xABC3, 0xCE6A, 0xCE69, 0xCE74, 0xABBA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_5A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCE65, 0xABC2, 0, 0xABBD, 0, 0, 0, 0, /* 0x00 */ + 0, 0xAE5C, 0xD162, 0, 0xAE5B, 0, 0, 0xD160, /* 0x00 */ + 0, 0xAE50, 0, 0xAE55, 0, 0xD15F, 0xD15C, 0xD161, /* 0x10 */ + 0xAE51, 0xD15B, 0, 0xAE54, 0xAE52, 0, 0xD163, 0xAE53, /* 0x10 */ + 0xAE57, 0, 0, 0xAE58, 0, 0xAE5A, 0, 0, /* 0x20 */ + 0, 0xAE59, 0, 0, 0, 0xD15D, 0xD15E, 0, /* 0x20 */ + 0, 0, 0, 0xD164, 0, 0xD4D4, 0xB0F9, 0xD8C2, /* 0x30 */ + 0xD4D3, 0xD4E6, 0, 0, 0xB140, 0, 0xD4E4, 0, /* 0x30 */ + 0xB0FE, 0xB0FA, 0xD4ED, 0xD4DD, 0xD4E0, 0, 0xB143, 0xD4EA, /* 0x40 */ + 0xD4E2, 0xB0FB, 0xB144, 0, 0xD4E7, 0xD4E5, 0, 0, /* 0x40 */ + 0xD4D6, 0xD4EB, 0xD4DF, 0xD4DA, 0, 0xD4D0, 0xD4EC, 0xD4DC, /* 0x50 */ + 0xD4CF, 0, 0xB142, 0xD4E1, 0xD4EE, 0xD4DE, 0xD4D2, 0xD4D7, /* 0x50 */ + 0xD4CE, 0, 0xB141, 0, 0xD4DB, 0xD4D8, 0xB0FC, 0xD4D1, /* 0x60 */ + 0, 0xD4E9, 0xB0FD, 0, 0xD4D9, 0xD4D5, 0, 0, /* 0x60 */ + 0xD4E8, 0, 0, 0, 0, 0, 0, 0xB440, /* 0x70 */ + 0xD8BB, 0, 0xD8B8, 0xD8C9, 0xD8BD, 0xD8CA, 0, 0xB442, /* 0x70 */ + 0, 0, 0, 0xD8C6, 0xD8C3, 0, 0, 0, /* 0x80 */ + 0, 0, 0xD8C4, 0xD8C7, 0xD8CB, 0, 0xD4E3, 0xD8CD, /* 0x80 */ + 0xDD47, 0, 0xB443, 0xD8CE, 0xD8B6, 0xD8C0, 0, 0xD8C5, /* 0x90 */ + 0, 0, 0xB441, 0xB444, 0xD8CC, 0xD8CF, 0xD8BA, 0xD8B7, /* 0x90 */ + 0, 0, 0xD8B9, 0, 0, 0xD8BE, 0xD8BC, 0xB445, /* 0xA0 */ + 0, 0xD8C8, 0, 0, 0xD8BF, 0, 0xD8C1, 0xD8B5, /* 0xA0 */ + 0xDCFA, 0xDCF8, 0xB742, 0xB740, 0xDD43, 0xDCF9, 0xDD44, 0xDD40, /* 0xB0 */ + 0xDCF7, 0xDD46, 0xDCF6, 0xDCFD, 0xB6FE, 0xB6FD, 0xB6FC, 0xDCFB, /* 0xB0 */ + 0xDD41, 0xB6F9, 0xB741, 0, 0xDCF4, 0, 0xDCFE, 0xDCF3, /* 0xC0 */ + 0xDCFC, 0xB6FA, 0xDD42, 0xDCF5, 0xB6FB, 0xDD45, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0xE16E, 0xB9E2, 0xB9E1, /* 0xD0 */ + 0xB9E3, 0xE17A, 0xE170, 0xE176, 0xE16B, 0xE179, 0xE178, 0xE17C, /* 0xD0 */ + 0xE175, 0xB9DE, 0xE174, 0xB9E4, 0, 0xE16D, 0xB9DF, 0, /* 0xE0 */ + 0xE17B, 0xB9E0, 0xE16F, 0xE172, 0xE177, 0xE171, 0xE16C, 0, /* 0xE0 */ + 0, 0, 0, 0xE173, 0xE555, 0xBC61, 0xE558, 0xE557, /* 0xF0 */ + 0xE55A, 0xE55C, 0xF9DC, 0xBC5F, 0, 0xE556, 0, 0xE554 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_5B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE55D, 0xE55B, 0xE559, 0, 0xE55F, 0, 0xE55E, /* 0x00 */ + 0xBC63, 0xBC5E, 0, 0xBC60, 0xBC62, 0, 0, 0xE560, /* 0x00 */ + 0xE957, 0, 0, 0xE956, 0xE955, 0, 0xE958, 0xE951, /* 0x10 */ + 0, 0xE952, 0xE95A, 0xE953, 0, 0xBEC5, 0xE95C, 0, /* 0x10 */ + 0xE95B, 0xE954, 0, 0xECD1, 0xC0A8, 0xECCF, 0xECD4, 0xECD3, /* 0x20 */ + 0xE959, 0, 0xC0A7, 0, 0xECD2, 0xECCE, 0xECD6, 0xECD5, /* 0x20 */ + 0xC0A6, 0, 0xECD0, 0, 0xBEC6, 0, 0, 0, /* 0x30 */ + 0xC254, 0, 0, 0, 0xEFC1, 0xF1FA, 0xF1FB, 0xF1FC, /* 0x30 */ + 0xC45C, 0, 0, 0xC45D, 0, 0xF443, 0, 0xF5C8, /* 0x40 */ + 0xF5C7, 0, 0, 0xF6DB, 0xF6DC, 0xF7D5, 0xF8A7, 0, /* 0x40 */ + 0xA46C, 0xA46D, 0, 0xA46E, 0xA4D5, 0xA5A5, 0xC9D3, 0xA672, /* 0x50 */ + 0xA673, 0, 0xA7B7, 0xA7B8, 0xA7B6, 0xA7B5, 0, 0xA973, /* 0x50 */ + 0, 0, 0xCC55, 0xA975, 0xA974, 0xCC56, 0, 0, /* 0x60 */ + 0, 0xABC4, 0, 0xAE5D, 0xD165, 0, 0xD4F0, 0, /* 0x60 */ + 0xB145, 0xB447, 0xD4EF, 0xB446, 0, 0xB9E5, 0, 0xE17D, /* 0x70 */ + 0xBEC7, 0, 0xC0A9, 0xECD7, 0, 0xC45E, 0, 0xC570, /* 0x70 */ + 0, 0xC972, 0, 0xA5A6, 0xC973, 0xA676, 0, 0xA674, /* 0x80 */ + 0xA675, 0xA677, 0, 0xA7BA, 0xA7B9, 0, 0xCABC, 0xA7BB, /* 0x80 */ + 0, 0, 0xCABD, 0xCC57, 0, 0xCC58, 0, 0xA976, /* 0x90 */ + 0xA978, 0xA97A, 0xA977, 0xA97B, 0xA979, 0, 0, 0, /* 0x90 */ + 0, 0, 0xABC8, 0xABC5, 0xABC7, 0xABC9, 0xABC6, 0xD166, /* 0xA0 */ + 0xCE77, 0, 0, 0, 0xD168, 0xD167, 0xAE63, 0, /* 0xA0 */ + 0xAE5F, 0, 0, 0xAE60, 0xAE62, 0xAE64, 0xAE61, 0, /* 0xB0 */ + 0xAE66, 0xAE65, 0, 0, 0, 0, 0, 0xB14A, /* 0xB0 */ + 0xD4F2, 0xD4F1, 0xB149, 0, 0xB148, 0xB147, 0xB14B, 0xB146, /* 0xC0 */ + 0, 0, 0xD8D5, 0xD8D2, 0xB449, 0xD8D1, 0xD8D6, 0, /* 0xC0 */ + 0xB44B, 0xD8D4, 0xB448, 0xB44A, 0xD8D3, 0, 0xDD48, 0, /* 0xD0 */ + 0xDD49, 0xDD4A, 0, 0, 0, 0, 0xB9E6, 0xB9EE, /* 0xD0 */ + 0xE17E, 0xB9E8, 0xB9EC, 0xE1A1, 0xB9ED, 0xB9E9, 0xB9EA, 0xB9E7, /* 0xE0 */ + 0xB9EB, 0xBC66, 0xD8D0, 0xBC67, 0xBC65, 0, 0xBC64, 0xE95D, /* 0xE0 */ + 0xBEC8, 0xECD8, 0xECD9, 0, 0, 0xC364, 0xC45F, 0, /* 0xF0 */ + 0xA46F, 0, 0xA678 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_5C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xABCA, 0, 0xD169, 0xAE67, 0, 0, 0xB14E, /* 0x00 */ + 0xB14D, 0xB14C, 0xB44C, 0xB44D, 0xD8D7, 0xB9EF, 0xBEC9, 0xA470, /* 0x00 */ + 0xC95C, 0xA4D6, 0xC974, 0, 0, 0xC9D4, 0xA679, 0, /* 0x10 */ + 0, 0, 0xA97C, 0, 0, 0, 0, 0xDD4B, /* 0x10 */ + 0, 0, 0xA471, 0, 0xA4D7, 0xC9D5, 0, 0, /* 0x20 */ + 0xCABE, 0, 0xCABF, 0, 0xA7BC, 0, 0, 0, /* 0x20 */ + 0xD8D8, 0xB44E, 0, 0xDD4C, 0, 0, 0, 0xC0AA, /* 0x30 */ + 0xA472, 0xA4A8, 0xA4D8, 0xC975, 0xA5A7, 0, 0xA7C0, 0xA7BF, /* 0x30 */ + 0xA7BD, 0xA7BE, 0, 0, 0xCC59, 0xA97E, 0xA9A1, 0xCC5A, /* 0x40 */ + 0xA97D, 0, 0, 0xABCE, 0xCE78, 0xABCD, 0xABCB, 0xABCC, /* 0x40 */ + 0xAE6A, 0xAE68, 0, 0, 0xD16B, 0xAE69, 0xD16A, 0, /* 0x50 */ + 0xAE5E, 0xD4F3, 0, 0, 0xB150, 0xB151, 0, 0, /* 0x50 */ + 0xB14F, 0, 0xB9F0, 0xE1A2, 0xBC68, 0xBC69, 0, 0xE561, /* 0x60 */ + 0xC0AB, 0xEFC2, 0xEFC3, 0, 0xC4DD, 0xF8A8, 0xC94B, 0xA4D9, /* 0x60 */ + 0, 0xA473, 0, 0xC977, 0xC976, 0, 0, 0, /* 0x70 */ + 0, 0xA67A, 0xC9D7, 0xC9D8, 0xC9D6, 0, 0xC9D9, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xCAC7, 0, /* 0x80 */ + 0xCAC2, 0xCAC4, 0xCAC6, 0xCAC3, 0xA7C4, 0xCAC0, 0, 0xCAC1, /* 0x80 */ + 0xA7C1, 0xA7C2, 0xCAC5, 0xCAC8, 0xA7C3, 0xCAC9, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0xCC68, 0, 0xCC62, /* 0x90 */ + 0xCC5D, 0xA9A3, 0xCC65, 0xCC63, 0xCC5C, 0xCC69, 0xCC6C, 0xCC67, /* 0xA0 */ + 0xCC60, 0xA9A5, 0xCC66, 0xA9A6, 0xCC61, 0xCC64, 0xCC5B, 0xCC5F, /* 0xA0 */ + 0xCC6B, 0xA9A7, 0, 0xA9A8, 0, 0xCC5E, 0xCC6A, 0xA9A2, /* 0xB0 */ + 0xA9A4, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0xCEAB, 0xCEA4, /* 0xC0 */ + 0xCEAA, 0xCEA3, 0xCEA5, 0xCE7D, 0xCE7B, 0, 0xCEAC, 0xCEA9, /* 0xC0 */ + 0xCE79, 0, 0xABD0, 0xCEA7, 0xCEA8, 0, 0xCEA6, 0xCE7C, /* 0xD0 */ + 0xCE7A, 0xABCF, 0xCEA2, 0xCE7E, 0, 0, 0xCEA1, 0xCEAD, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xAE6F, 0, 0xAE6E, 0, 0xD16C, 0xAE6B, 0xD16E, 0, /* 0xE0 */ + 0xAE70, 0xD16F, 0, 0, 0xAE73, 0, 0xAE71, 0xD170, /* 0xF0 */ + 0xCEAE, 0xD172, 0, 0xAE6D, 0, 0xAE6C, 0, 0xD16D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_5D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD171, 0xAE72, 0, 0, 0, 0, 0xB153, 0xB152, /* 0x00 */ + 0, 0, 0, 0xD4F5, 0xD4F9, 0xD4FB, 0xB154, 0xD4FE, /* 0x00 */ + 0, 0xB158, 0xD541, 0, 0xB15A, 0, 0xB156, 0xB15E, /* 0x10 */ + 0, 0xB15B, 0xD4F7, 0xB155, 0, 0xD4F6, 0xD4F4, 0xD543, /* 0x10 */ + 0xD4F8, 0, 0xB157, 0xD542, 0xB15C, 0xD4FD, 0xD4FC, 0xB15D, /* 0x20 */ + 0xD4FA, 0xB159, 0, 0, 0, 0, 0xD544, 0, /* 0x20 */ + 0xD540, 0xD8E7, 0xD8EE, 0xD8E3, 0xB451, 0xD8DF, 0xD8EF, 0xD8D9, /* 0x30 */ + 0xD8EC, 0xD8EA, 0xD8E4, 0, 0xD8ED, 0xD8E6, 0, 0xD8DE, /* 0x30 */ + 0xD8F0, 0xD8DC, 0xD8E9, 0xD8DA, 0, 0xD8F1, 0, 0xB452, /* 0x40 */ + 0, 0xD8EB, 0xDD4F, 0xD8DD, 0xB44F, 0, 0xD8E1, 0, /* 0x40 */ + 0xB450, 0xD8E0, 0xD8E5, 0, 0, 0xD8E2, 0, 0, /* 0x50 */ + 0, 0xD8E8, 0, 0, 0, 0, 0xDD53, 0, /* 0x50 */ + 0, 0, 0xDD56, 0xDD4E, 0, 0xDD50, 0, 0xDD55, /* 0x60 */ + 0xDD54, 0xB743, 0, 0xD8DB, 0xDD52, 0, 0, 0xB744, /* 0x60 */ + 0, 0xDD4D, 0xDD51, 0, 0, 0, 0, 0xE1A9, /* 0x70 */ + 0, 0xE1B0, 0xE1A7, 0, 0xE1AE, 0xE1A5, 0xE1AD, 0xE1B1, /* 0x70 */ + 0xE1A4, 0xE1A8, 0xE1A3, 0, 0xB9F1, 0, 0xE1A6, 0xB9F2, /* 0x80 */ + 0xE1AC, 0xE1AB, 0xE1AA, 0, 0, 0xE1AF, 0, 0, /* 0x80 */ + 0, 0, 0xE565, 0xE567, 0xBC6B, 0xE568, 0, 0xE563, /* 0x90 */ + 0, 0xE562, 0xE56C, 0, 0xE56A, 0xBC6A, 0xE56D, 0xE564, /* 0x90 */ + 0xE569, 0xE56B, 0xE566, 0, 0, 0, 0, 0xE961, /* 0xA0 */ + 0xE966, 0xE960, 0xE965, 0, 0xE95E, 0xE968, 0xE964, 0xE969, /* 0xA0 */ + 0xE963, 0xE95F, 0xE967, 0, 0xE96A, 0xE962, 0, 0xECDA, /* 0xB0 */ + 0xC0AF, 0, 0xC0AD, 0, 0xC0AC, 0xC0AE, 0, 0, /* 0xB0 */ + 0xEFC4, 0, 0xF172, 0xF1FD, 0, 0, 0xF444, 0xF445, /* 0xC0 */ + 0, 0xC460, 0, 0xF5C9, 0, 0xC4DE, 0, 0xF5CA, /* 0xC0 */ + 0, 0xF6DE, 0xC572, 0, 0xC571, 0xF6DD, 0xC5C9, 0, /* 0xD0 */ + 0xF7D6, 0, 0, 0, 0, 0xA474, 0xA67B, 0xC9DA, /* 0xD0 */ + 0xCACA, 0xA8B5, 0xB15F, 0, 0, 0xA475, 0xA5AA, 0xA5A9, /* 0xE0 */ + 0xA5A8, 0, 0, 0xA7C5, 0, 0, 0xAE74, 0, /* 0xE0 */ + 0xDD57, 0xA476, 0xA477, 0xA478, 0xA4DA, 0, 0, 0xABD1, /* 0xF0 */ + 0, 0xCEAF, 0, 0, 0, 0xB453, 0xA479, 0xC95D /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_5E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA5AB, 0xA5AC, 0xC978, 0, 0xA67C, 0, /* 0x00 */ + 0, 0, 0xCACB, 0, 0xA7C6, 0, 0xCACC, 0, /* 0x00 */ + 0, 0xA9AE, 0, 0, 0xCC6E, 0xA9AC, 0xA9AB, 0xCC6D, /* 0x10 */ + 0xA9A9, 0xCC6F, 0xA9AA, 0xA9AD, 0, 0xABD2, 0, 0xABD4, /* 0x10 */ + 0xCEB3, 0xCEB0, 0xCEB1, 0xCEB2, 0xCEB4, 0xABD3, 0, 0, /* 0x20 */ + 0xD174, 0xD173, 0, 0xAE76, 0, 0xAE75, 0, 0, /* 0x20 */ + 0, 0, 0, 0xB162, 0xD546, 0, 0xB161, 0xB163, /* 0x30 */ + 0xB160, 0, 0, 0, 0, 0xB455, 0xD545, 0, /* 0x30 */ + 0xB456, 0xD8F3, 0, 0xB457, 0xD8F2, 0xB454, 0, 0, /* 0x40 */ + 0, 0, 0xDD5A, 0xDD5C, 0xB745, 0xDD5B, 0xDD59, 0xDD58, /* 0x40 */ + 0, 0, 0, 0xE1B4, 0xB9F7, 0xB9F5, 0, 0xB9F6, /* 0x50 */ + 0xE1B2, 0xE1B3, 0, 0xB9F3, 0xE571, 0xE56F, 0, 0xBC6D, /* 0x50 */ + 0xE570, 0xBC6E, 0xBC6C, 0xB9F4, 0, 0, 0xE96D, 0xE96B, /* 0x60 */ + 0xE96C, 0xE56E, 0xECDC, 0xC0B0, 0xECDB, 0xEFC5, 0xEFC6, 0xE96E, /* 0x60 */ + 0xF1FE, 0, 0xA47A, 0xA5AD, 0xA67E, 0xC9DB, 0xA67D, 0, /* 0x70 */ + 0xA9AF, 0xB746, 0, 0xA4DB, 0xA5AE, 0xABD5, 0xB458, 0, /* 0x70 */ + 0xC979, 0, 0xC97A, 0, 0xC9DC, 0, 0, 0xA7C8, /* 0x80 */ + 0xCAD0, 0xCACE, 0xA7C9, 0xCACD, 0xCACF, 0xCAD1, 0, 0xA7C7, /* 0x80 */ + 0, 0, 0, 0, 0, 0xA9B3, 0xA9B4, 0xA9B1, /* 0x90 */ + 0, 0, 0xA9B0, 0xCEB8, 0xA9B2, 0, 0, 0, /* 0x90 */ + 0xABD6, 0, 0xCEB7, 0xCEB9, 0xCEB6, 0xCEBA, 0xABD7, 0xAE79, /* 0xA0 */ + 0xD175, 0, 0xD177, 0xAE77, 0xD178, 0xAE78, 0xD176, 0, /* 0xA0 */ + 0xCEB5, 0xD547, 0xD54A, 0xD54B, 0xD548, 0xB167, 0xB166, 0xB164, /* 0xB0 */ + 0xB165, 0xD549, 0, 0, 0, 0, 0xB168, 0, /* 0xB0 */ + 0, 0xB45A, 0xB45B, 0, 0xB45C, 0xDD5D, 0xDD5F, 0xDD61, /* 0xC0 */ + 0xB748, 0xB747, 0xB459, 0xDD60, 0xDD5E, 0, 0xE1B8, 0, /* 0xC0 */ + 0, 0xE1B6, 0xE1BC, 0xB9F8, 0xE1BD, 0xE1BA, 0xB9F9, 0xE1B7, /* 0xD0 */ + 0xE1B5, 0xE1BB, 0xBC70, 0xE573, 0xE1B9, 0xBC72, 0xE574, 0xBC71, /* 0xD0 */ + 0xBC74, 0xE575, 0xBC6F, 0xBC73, 0, 0xE973, 0xE971, 0xE970, /* 0xE0 */ + 0xE972, 0xE96F, 0, 0, 0xC366, 0, 0xF446, 0xF447, /* 0xE0 */ + 0, 0xF5CB, 0xF6DF, 0xC655, 0, 0, 0xA9B5, 0xA7CA, /* 0xF0 */ + 0, 0, 0xABD8, 0, 0, 0, 0xA47B, 0xA4DC /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_5F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA5AF, 0xC9DD, 0, 0xA7CB, 0xCAD2, 0, 0xCEBB, /* 0x00 */ + 0xABD9, 0, 0xB9FA, 0xA47C, 0, 0, 0, 0xA6A1, /* 0x00 */ + 0, 0, 0xB749, 0xA47D, 0xA4DD, 0xA4DE, 0, 0xA5B1, /* 0x10 */ + 0xA5B0, 0, 0xC9DE, 0xA6A2, 0, 0xCAD3, 0, 0xA7CC, /* 0x10 */ + 0, 0, 0xCC71, 0xCC72, 0xCC73, 0, 0xA9B6, 0xA9B7, /* 0x20 */ + 0xCC70, 0xA9B8, 0, 0, 0, 0xABDA, 0xCEBC, 0, /* 0x20 */ + 0xD17A, 0xAE7A, 0, 0xD179, 0, 0xB169, 0xD54C, 0xB16A, /* 0x30 */ + 0xD54D, 0, 0, 0, 0xB45D, 0, 0, 0, /* 0x30 */ + 0xDD62, 0, 0, 0xE1BF, 0xE1BE, 0, 0xB9FB, 0, /* 0x40 */ + 0xBC75, 0xE576, 0xBECA, 0xE974, 0xC0B1, 0, 0xC573, 0xF7D8, /* 0x40 */ + 0, 0, 0, 0, 0xCC74, 0, 0xCEBD, 0xB16B, /* 0x50 */ + 0xD8F4, 0xB74A, 0, 0, 0, 0xC255, 0, 0, /* 0x50 */ + 0, 0, 0xA7CE, 0, 0xA7CD, 0xABDB, 0, 0xD17B, /* 0x60 */ + 0, 0xB16D, 0xB343, 0xB16E, 0xB16C, 0xB45E, 0, 0xE1C0, /* 0x60 */ + 0xB9FC, 0xBC76, 0, 0xC94C, 0xC9DF, 0, 0xCAD5, 0xA7CF, /* 0x70 */ + 0xCAD4, 0xA7D0, 0, 0, 0xA9BC, 0xCC77, 0xCC76, 0xA9BB, /* 0x70 */ + 0xA9B9, 0xA9BA, 0xCC75, 0, 0, 0xABDD, 0xCEBE, 0xABE0, /* 0x80 */ + 0xABDC, 0xABE2, 0xABDE, 0xABDF, 0xABE1, 0, 0, 0, /* 0x80 */ + 0xAE7D, 0xAE7C, 0xAE7B, 0, 0, 0, 0xD54F, 0xB16F, /* 0x90 */ + 0xB172, 0xB170, 0, 0xD54E, 0xB175, 0, 0xB171, 0xD550, /* 0x90 */ + 0xB174, 0xB173, 0, 0, 0, 0xD8F6, 0xD8F5, 0, /* 0xA0 */ + 0xB461, 0xB45F, 0xB460, 0xD8F7, 0xB74B, 0xDD64, 0xB74C, 0xDD63, /* 0xA0 */ + 0, 0, 0xE577, 0, 0, 0xBC78, 0xE1C1, 0xBC77, /* 0xB0 */ + 0, 0xB9FD, 0, 0xECDE, 0xE975, 0xC0B2, 0xECDD, 0xF240, /* 0xB0 */ + 0xF448, 0xF449, 0, 0xA4DF, 0, 0xA5B2, 0, 0, /* 0xC0 */ + 0, 0xC97B, 0, 0, 0xA7D2, 0xA7D4, 0, 0xC9E2, /* 0xC0 */ + 0xCAD8, 0xCAD7, 0xCAD6, 0, 0xC9E1, 0xC9E0, 0xA6A4, 0xA7D3, /* 0xD0 */ + 0xA7D1, 0xA6A3, 0, 0, 0, 0xA9BD, 0xCC78, 0, /* 0xD0 */ + 0xA9BE, 0xCADD, 0, 0xCADF, 0xCADE, 0xCC79, 0, 0, /* 0xE0 */ + 0xCADA, 0, 0xA7D8, 0xA7D6, 0, 0xCAD9, 0xCADB, 0xCAE1, /* 0xE0 */ + 0, 0xA7D5, 0, 0xCADC, 0xCAE5, 0xA9C0, 0, 0xCAE2, /* 0xF0 */ + 0xA7D7, 0, 0xCAE0, 0xCAE3, 0, 0xA9BF, 0, 0xA9C1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_60[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCAE4, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0xCCAF, 0xCCA2, 0xCC7E, 0xCCAE, 0xCCA9, 0xABE7, 0xA9C2, /* 0x00 */ + 0xCCAA, 0xCCAD, 0xABE3, 0xCCAC, 0xA9C3, 0xA9C8, 0xA9C6, 0xCCA3, /* 0x10 */ + 0, 0xCC7C, 0xCCA5, 0xA9CD, 0xCCB0, 0xABE4, 0xCCA6, 0, /* 0x10 */ + 0xABE5, 0xA9C9, 0xCCA8, 0, 0xCECD, 0xABE6, 0xCC7B, 0xA9CA, /* 0x20 */ + 0xABE8, 0xA9CB, 0xA9C7, 0xA9CC, 0xCCA7, 0xCC7A, 0xCCAB, 0xA9C4, /* 0x20 */ + 0, 0, 0xCC7D, 0xCCA4, 0xCCA1, 0xA9C5, 0, 0xCEBF, /* 0x30 */ + 0, 0xCEC0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0xCECA, 0xD1A1, 0xCECB, 0xABEE, 0xCECE, 0xCEC4, 0xABED, 0xCEC6, /* 0x40 */ + 0, 0xCEC7, 0, 0, 0xCEC9, 0xABE9, 0, 0, /* 0x40 */ + 0xAEA3, 0, 0xF9DA, 0xCEC5, 0xCEC1, 0xAEA4, 0, 0, /* 0x50 */ + 0xCECF, 0xAE7E, 0xD17D, 0xCEC8, 0, 0xD17C, 0xCEC3, 0xCECC, /* 0x50 */ + 0, 0, 0xABEC, 0xAEA1, 0xABF2, 0xAEA2, 0xCED0, 0xD17E, /* 0x60 */ + 0xABEB, 0xAEA6, 0xABF1, 0xABF0, 0xABEF, 0xAEA5, 0xCED1, 0xAEA7, /* 0x60 */ + 0xABEA, 0, 0xCEC2, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0xB176, /* 0x70 */ + 0xD1A4, 0xD1A6, 0, 0xD1A8, 0xAEA8, 0xAEAE, 0xD553, 0xD1AC, /* 0x80 */ + 0xD1A3, 0xB178, 0xD551, 0, 0xAEAD, 0xAEAB, 0xD1AE, 0, /* 0x80 */ + 0xD552, 0, 0xD1A5, 0, 0xAEAC, 0xD1A9, 0xAEAF, 0xD1AB, /* 0x90 */ + 0, 0, 0xAEAA, 0xD1AA, 0xD1AD, 0xD1A7, 0, 0xAEA9, /* 0x90 */ + 0xB179, 0, 0xD1A2, 0xB177, 0, 0, 0, 0, /* 0xA0 */ + 0xB17A, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xD555, 0xD55E, 0xB464, 0, 0xB17C, 0xB1A3, 0xB465, 0xD560, /* 0xB0 */ + 0xB1AA, 0xD8F9, 0xD556, 0xB1A2, 0xB1A5, 0xB17E, 0xD554, 0xD562, /* 0xB0 */ + 0xD565, 0xD949, 0, 0xD563, 0xD8FD, 0xB1A1, 0xB1A8, 0xB1AC, /* 0xC0 */ + 0xD55D, 0xD8F8, 0xD561, 0xB17B, 0xD8FA, 0xD564, 0xD8FC, 0xD559, /* 0xC0 */ + 0, 0xB462, 0, 0xD557, 0xD558, 0xB1A7, 0, 0, /* 0xD0 */ + 0xB1A6, 0xD55B, 0xB1AB, 0xD55F, 0xB1A4, 0xD55C, 0, 0xB1A9, /* 0xD0 */ + 0xB466, 0xB463, 0xD8FB, 0, 0xD55A, 0, 0xB17D, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0xB46B, 0xB46F, 0xD940, 0xB751, 0xB46D, 0xD944, 0xB471, 0xDD65, /* 0xF0 */ + 0xD946, 0xB753, 0xB469, 0xB46C, 0xD947, 0, 0xD948, 0xD94E /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_61[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB473, 0xB754, 0, 0xD94A, 0xD94F, 0xD943, 0xB75E, 0, /* 0x00 */ + 0xB755, 0xB472, 0xD941, 0xD950, 0, 0xB75D, 0xB470, 0xB74E, /* 0x00 */ + 0xD94D, 0, 0xB474, 0xD945, 0xD8FE, 0xB46A, 0xD942, 0, /* 0x10 */ + 0xD94B, 0, 0xB74D, 0xB752, 0xB467, 0xD94C, 0, 0xB750, /* 0x10 */ + 0, 0, 0, 0xB468, 0, 0, 0, 0xB75C, /* 0x20 */ + 0xE1C3, 0xDD70, 0, 0xDD68, 0xE1C2, 0, 0xDD6C, 0xDD6E, /* 0x20 */ + 0, 0, 0xDD6B, 0, 0xB75B, 0, 0xDD6A, 0xB75F, /* 0x30 */ + 0, 0, 0, 0xE1D2, 0, 0, 0xB75A, 0xBA40, /* 0x30 */ + 0xDD71, 0xE1C4, 0, 0, 0xB758, 0xDD69, 0xDD6D, 0xB9FE, /* 0x40 */ + 0xB74F, 0xDD66, 0xDD67, 0xBA41, 0xB757, 0xB759, 0xB756, 0xDD6F, /* 0x40 */ + 0, 0, 0xE1C8, 0xE1C9, 0xE1CE, 0xBC7D, 0xE1D5, 0, /* 0x50 */ + 0xBA47, 0, 0xBA46, 0xE1D0, 0, 0xBC7C, 0xE1C5, 0xBA45, /* 0x50 */ + 0, 0xE1D4, 0xBA43, 0xBA44, 0, 0xE1D1, 0xE5AA, 0xBC7A, /* 0x60 */ + 0xB46E, 0, 0xE1D3, 0xBCA3, 0xE1CB, 0, 0xBC7B, 0, /* 0x60 */ + 0xBCA2, 0xE1C6, 0xE1CA, 0xE1C7, 0xE1CD, 0xBA48, 0xBC79, 0xBA42, /* 0x70 */ + 0, 0xE57A, 0xE1CF, 0, 0xBCA1, 0, 0xBCA4, 0, /* 0x70 */ + 0xE1CC, 0, 0xBC7E, 0xE579, 0, 0, 0, 0, /* 0x80 */ + 0, 0xE57E, 0xBECE, 0xE578, 0xE9A3, 0xE5A9, 0xBCA8, 0, /* 0x80 */ + 0xBCA6, 0xBECC, 0xE5A6, 0xE5A2, 0xBCAC, 0, 0xE978, 0, /* 0x90 */ + 0, 0, 0xBCAA, 0xE5A1, 0, 0xE976, 0, 0xE5A5, /* 0x90 */ + 0, 0xE5A8, 0xE57D, 0, 0xBCAB, 0, 0, 0xBCA5, /* 0xA0 */ + 0xE977, 0xBECD, 0xE5A7, 0xBCA7, 0xBCA9, 0xE5A4, 0xBCAD, 0xE5A3, /* 0xA0 */ + 0xE57C, 0xE57B, 0xBECB, 0xE5AB, 0xE97A, 0xECE0, 0xBED0, 0, /* 0xB0 */ + 0xE9A2, 0, 0xE97E, 0, 0xECE1, 0, 0xBED1, 0xE9A1, /* 0xB0 */ + 0, 0xE97C, 0xC0B4, 0xECDF, 0, 0xE979, 0xE97B, 0xC0B5, /* 0xC0 */ + 0xBED3, 0xC0B3, 0xBED2, 0xC0B7, 0xE97D, 0xBECF, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0xEFCF, 0, /* 0xD0 */ + 0xEFC7, 0, 0, 0, 0, 0, 0xECE7, 0xEFC8, /* 0xD0 */ + 0xECE3, 0, 0, 0xC256, 0xECE5, 0xECE4, 0xC0B6, 0xECE2, /* 0xE0 */ + 0xECE6, 0xEFD0, 0xEFCC, 0xEFCE, 0, 0xEFC9, 0xEFCA, 0, /* 0xE0 */ + 0xEFCD, 0xEFCB, 0xC367, 0, 0, 0xC36A, 0xC369, 0xC368, /* 0xF0 */ + 0xC461, 0xF44A, 0xC462, 0xF241, 0xC4DF, 0xF5CC, 0xC4E0, 0xC574 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_62[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC5CA, 0xF7D9, 0, 0xF7DA, 0xF7DB, 0, 0, 0xF9BA, /* 0x00 */ + 0xA4E0, 0xC97C, 0xA5B3, 0, 0xA6A6, 0xA6A7, 0xA6A5, 0, /* 0x00 */ + 0xA6A8, 0xA7DA, 0xA7D9, 0, 0xCCB1, 0xA9CF, 0xA9CE, 0, /* 0x10 */ + 0, 0xD1AF, 0xB1AD, 0xB1AE, 0, 0, 0, 0xB475, /* 0x10 */ + 0xDD72, 0xB760, 0xB761, 0xDD74, 0xDD76, 0xDD75, 0, 0xE1D7, /* 0x20 */ + 0, 0xE1D6, 0xBA49, 0xE1D8, 0, 0xE5AC, 0xBCAE, 0, /* 0x20 */ + 0xBED4, 0, 0xC0B8, 0xC257, 0xC0B9, 0, 0xA4E1, 0, /* 0x30 */ + 0, 0, 0xCAE6, 0, 0, 0xCCB2, 0xA9D1, 0xA9D0, /* 0x30 */ + 0xA9D2, 0xABF3, 0xCED2, 0xCED3, 0, 0, 0xD1B0, 0xAEB0, /* 0x40 */ + 0xB1AF, 0xB476, 0xD951, 0xA4E2, 0, 0xA47E, 0xA4E3, 0, /* 0x40 */ + 0xC97D, 0xA5B7, 0xA5B6, 0xA5B4, 0xA5B5, 0, 0, 0, /* 0x50 */ + 0xA6AB, 0xC9E9, 0xC9EB, 0xA6AA, 0xC9E3, 0, 0xC9E4, 0, /* 0x50 */ + 0xC9EA, 0xC9E6, 0xC9E8, 0xA6A9, 0xC9E5, 0xC9EC, 0xC9E7, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xA7E1, 0xA7EA, 0xA7E8, /* 0x60 */ + 0xCAF0, 0xCAED, 0xCAF5, 0xA7E6, 0xCAF6, 0, 0xA7DF, 0xCAF3, /* 0x70 */ + 0, 0xA7E5, 0xCAEF, 0xCAEE, 0xA7E3, 0xCAF4, 0xA7E4, 0xA9D3, /* 0x70 */ + 0xA7DE, 0xCAF1, 0, 0xCAE7, 0xA7DB, 0, 0xA7EE, 0xCAEC, /* 0x80 */ + 0xCAF2, 0xA7E0, 0xA7E2, 0, 0xCAE8, 0, 0xCAE9, 0xCAEA, /* 0x80 */ + 0, 0xA7ED, 0xA7E7, 0xA7EC, 0xCAEB, 0xA7EB, 0xA7DD, 0xA7DC, /* 0x90 */ + 0xA7E9, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xA9E1, 0xCCBE, 0xCCB7, 0xA9DC, 0xA9EF, 0xCCB3, 0xCCBA, 0xCCBC, /* 0xA0 */ + 0xCCBF, 0xA9EA, 0, 0xCCBB, 0xCCB4, 0xA9E8, 0xCCB8, 0, /* 0xB0 */ + 0xCCC0, 0xA9D9, 0, 0xCCBD, 0xA9E3, 0xA9E2, 0xCCB6, 0xA9D7, /* 0xB0 */ + 0, 0, 0xA9D8, 0, 0xA9D6, 0, 0xA9EE, 0xA9E6, /* 0xC0 */ + 0xA9E0, 0xA9D4, 0xCCB9, 0xA9DF, 0xA9D5, 0xA9E7, 0xA9F0, 0xCED4, /* 0xC0 */ + 0xA9E4, 0xCCB5, 0xA9DA, 0xA9DD, 0xA9DE, 0, 0xA9EC, 0xA9ED, /* 0xD0 */ + 0xA9EB, 0xA9E5, 0xA9E9, 0xA9DB, 0xABF4, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xCEDA, 0xAC41, 0xABF8, 0xABFA, 0xAC40, /* 0xE0 */ + 0xCEE6, 0xABFD, 0xD1B1, 0xAEB1, 0xAC43, 0xCED7, 0xCEDF, 0xABFE, /* 0xF0 */ + 0xCEDE, 0xCEDB, 0xCEE3, 0xCEE5, 0xABF7, 0xABFB, 0xAC42, 0xAEB3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_63[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCEE0, 0xABF9, 0xAC45, 0xCED9, 0, 0, 0, 0xABFC, /* 0x00 */ + 0xAEB2, 0xABF6, 0, 0xCED6, 0xCEDD, 0xCED5, 0xCED8, 0xCEDC, /* 0x00 */ + 0xD1B2, 0xAC44, 0, 0xCEE1, 0xCEE2, 0xCEE4, 0xABF5, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xAEC1, 0xD1BE, 0xAEBF, 0xAEC0, 0xD1B4, 0xD1C4, 0, 0xAEB6, /* 0x20 */ + 0, 0, 0xD566, 0xD1C6, 0xD1C0, 0, 0xD1B7, 0, /* 0x30 */ + 0xD1C9, 0xD1BA, 0xAEBC, 0xD57D, 0xD1BD, 0xAEBE, 0xAEB5, 0, /* 0x30 */ + 0xD1CB, 0xD1BF, 0xAEB8, 0xD1B8, 0xD1B5, 0xD1B6, 0xAEB9, 0xD1C5, /* 0x40 */ + 0xD1CC, 0xAEBB, 0xD1BC, 0xD1BB, 0xAEC3, 0xAEC2, 0xAEB4, 0xAEBA, /* 0x40 */ + 0xAEBD, 0xD1C8, 0, 0, 0xD1C2, 0xAEB7, 0xD1B3, 0xD1CA, /* 0x50 */ + 0xD1C1, 0xD1C3, 0xD1C7, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0xD567, 0, 0xB1B7, /* 0x60 */ + 0xB1CB, 0xB1CA, 0, 0xB1BF, 0, 0xD579, 0xD575, 0xD572, /* 0x60 */ + 0xD5A6, 0xB1BA, 0xB1B2, 0, 0, 0xD577, 0xB4A8, 0xB1B6, /* 0x70 */ + 0xD5A1, 0, 0xB1CC, 0xB1C9, 0xD57B, 0xD56A, 0, 0, /* 0x70 */ + 0xB1C8, 0xD5A3, 0xD569, 0xB1BD, 0xB1C1, 0xD5A2, 0, 0xD573, /* 0x80 */ + 0xB1C2, 0xB1BC, 0xD568, 0, 0xB478, 0xD5A5, 0xD571, 0xB1C7, /* 0x80 */ + 0xD574, 0xD5A4, 0xB1C6, 0, 0xD952, 0, 0xB1B3, 0xD56F, /* 0x90 */ + 0xB1B8, 0xB1C3, 0, 0xB1BE, 0xD578, 0xD56E, 0xD56C, 0xD57E, /* 0x90 */ + 0xB1B0, 0xB1C4, 0xB1B4, 0xB477, 0xD57C, 0xB1B5, 0, 0xB1B1, /* 0xA0 */ + 0xB1C0, 0xB1BB, 0xB1B9, 0xD570, 0xB1C5, 0xD56D, 0xD57A, 0xD576, /* 0xA0 */ + 0xD954, 0xD953, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xD56B, 0xD964, 0, /* 0xB0 */ + 0xB47A, 0, 0xD96A, 0xD959, 0xD967, 0xDD77, 0xB47D, 0xD96B, /* 0xC0 */ + 0xD96E, 0xB47C, 0xD95C, 0xD96D, 0xD96C, 0xB47E, 0xD955, 0xB479, /* 0xC0 */ + 0xB4A3, 0, 0xB4A1, 0xD969, 0, 0xD95F, 0xB4A5, 0xD970, /* 0xD0 */ + 0xD968, 0xD971, 0xB4AD, 0xB4AB, 0xD966, 0xD965, 0, 0xD963, /* 0xD0 */ + 0xD95D, 0xB4A4, 0, 0xB4A2, 0xD1B9, 0xD956, 0, 0xDDB7, /* 0xE0 */ + 0xD957, 0xB47B, 0xB4AA, 0xDD79, 0, 0xB4A6, 0xB4A7, 0xD958, /* 0xE0 */ + 0xD96F, 0xDD78, 0xD960, 0xD95B, 0xB4A9, 0xD961, 0xD95E, 0, /* 0xF0 */ + 0, 0xB4AE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_64[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB770, 0, /* 0x00 */ + 0, 0xDD7C, 0xDDB1, 0xDDB6, 0xDDAA, 0xB76C, 0xDDBB, 0xB769, /* 0x00 */ + 0xDD7A, 0, 0xDD7B, 0xB762, 0xB76B, 0xDDA4, 0xB76E, 0xB76F, /* 0x10 */ + 0xDDA5, 0, 0xDDB2, 0xDDB8, 0xB76A, 0, 0xB764, 0xDDA3, /* 0x10 */ + 0xDD7D, 0xDDBA, 0xDDA8, 0xDDA9, 0xDD7E, 0xDDB4, 0xDDAB, 0xDDB5, /* 0x20 */ + 0xDDAD, 0, 0xB765, 0xE1D9, 0xB768, 0xB766, 0xDDB9, 0xDDB0, /* 0x20 */ + 0xDDAC, 0, 0, 0xDDA1, 0xBA53, 0xDDAF, 0xB76D, 0xDDA7, /* 0x30 */ + 0, 0xDDA6, 0, 0, 0, 0xB767, 0xB763, 0xE1EE, /* 0x30 */ + 0xDDB3, 0xDDAE, 0, 0xDDA2, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0xE1E9, 0, 0xE1DA, 0xE1E5, 0, /* 0x40 */ + 0xE1EC, 0xBA51, 0xB4AC, 0xE1EA, 0xBA4C, 0, 0, 0, /* 0x50 */ + 0xBA4B, 0xE1F1, 0, 0xE1DB, 0xE1E8, 0xE1DC, 0xE1E7, 0xBA4F, /* 0x50 */ + 0xE1EB, 0xD962, 0, 0, 0, 0xE1F2, 0xE1E3, 0xBA52, /* 0x60 */ + 0xE5BA, 0xBCAF, 0, 0xE1F0, 0xE1EF, 0xBA54, 0xE5AD, 0xBCB0, /* 0x60 */ + 0xE5AE, 0, 0xE1DF, 0xE1E0, 0xE1DD, 0xE1E2, 0xE1DE, 0xE1F3, /* 0x70 */ + 0xBA4E, 0xBCB1, 0xBA50, 0xBA55, 0, 0xE1E1, 0, 0xE1ED, /* 0x70 */ + 0, 0, 0xE1E6, 0, 0, 0xE5B1, 0, 0xBA4A, /* 0x80 */ + 0xBCB4, 0xE9AA, 0xE5B6, 0xE5B5, 0xE5B7, 0, 0, 0xE5B4, /* 0x80 */ + 0xBCB5, 0, 0xBCBB, 0xBCB8, 0, 0xBCB9, 0xE5AF, 0xE5B2, /* 0x90 */ + 0xE5BC, 0xBCC1, 0xBCBF, 0, 0xE5B3, 0xD95A, 0xBCB2, 0xE5B9, /* 0x90 */ + 0xE5B0, 0, 0xBCC2, 0xE5B8, 0xBA4D, 0xBCB7, 0xE1E4, 0, /* 0xA0 */ + 0, 0xBCBA, 0, 0xBCBE, 0xBCC0, 0xBCBD, 0xBCBC, 0, /* 0xA0 */ + 0xBCB6, 0xE5BB, 0xBCB3, 0xBCC3, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0xBED8, 0xBED9, 0xE9A9, 0xBEE2, 0xBEDF, /* 0xB0 */ + 0, 0xBED6, 0xBEDD, 0xE9AB, 0xBEDB, 0xBED5, 0, 0xBEDC, /* 0xC0 */ + 0, 0xE9A8, 0xC0BB, 0xBED7, 0, 0xBEDE, 0xC0BA, 0xE9A7, /* 0xC0 */ + 0xE9A6, 0, 0xBEE0, 0, 0xBEE1, 0, 0xE9A5, 0xE9A4, /* 0xD0 */ + 0xC0BC, 0xE9AE, 0xBEDA, 0xE9AC, 0, 0, 0, 0, /* 0xD0 */ + 0xC0BD, 0, 0xC0C2, 0xECEA, 0xECEC, 0, 0xC0BF, 0, /* 0xE0 */ + 0xECED, 0xECE9, 0, 0xECEB, 0xC0C0, 0xC0C3, 0, 0xECE8, /* 0xE0 */ + 0xC0BE, 0xC0C1, 0xC259, 0xE9AD, 0xC258, 0, 0, 0xC25E, /* 0xF0 */ + 0xEFD4, 0, 0xC25C, 0xC25D, 0xEFD7, 0xEFD3, 0xC25A, 0xEFD1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_65[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC36B, 0xEFD5, 0, 0xEFD6, 0xEFD2, 0, 0xC25B, 0xF242, /* 0x00 */ + 0, 0xF245, 0, 0, 0xF246, 0xF244, 0xF247, 0xC36C, /* 0x00 */ + 0xF243, 0, 0, 0xF44E, 0xC464, 0xF44D, 0xF44C, 0xF44B, /* 0x10 */ + 0xC463, 0xC465, 0, 0xF5CD, 0xC4E2, 0xC4E1, 0, 0, /* 0x10 */ + 0xF6E1, 0xF6E0, 0xF6E3, 0xC5CB, 0xC575, 0xF7DD, 0xF6E2, 0, /* 0x20 */ + 0, 0xF7DC, 0xC5CD, 0xC5CC, 0xC5F3, 0xF8A9, 0xF8EF, 0xA4E4, /* 0x20 */ + 0, 0, 0xD972, 0xE9AF, 0, 0, 0xA6AC, 0xCAF7, /* 0x30 */ + 0xA7F1, 0xA7EF, 0, 0xA7F0, 0, 0xCCC1, 0xA9F1, 0xAC46, /* 0x30 */ + 0, 0xCEE7, 0, 0xCEE8, 0, 0xAC47, 0xD1CE, 0, /* 0x40 */ + 0xAEC4, 0xAEC5, 0xD1CD, 0, 0, 0, 0, 0xB1D3, /* 0x40 */ + 0, 0xB1CF, 0, 0xD5A7, 0xB1D6, 0xB1D5, 0xB1CE, 0xB1D1, /* 0x50 */ + 0xB1D4, 0xB1D0, 0, 0, 0xD976, 0xB1CD, 0xB4AF, 0, /* 0x50 */ + 0, 0, 0xB4B1, 0xB4B2, 0xD975, 0xD978, 0xB4B0, 0xD973, /* 0x60 */ + 0xD977, 0, 0xD974, 0, 0xB771, 0, 0, 0xDDBC, /* 0x60 */ + 0, 0, 0xBA56, 0xE1F4, 0xBEE3, 0xBCC4, 0xE5BD, 0xBCC5, /* 0x70 */ + 0xBCC6, 0xE5BF, 0xE5BE, 0xE5C0, 0xE9B1, 0, 0, 0xE9B0, /* 0x70 */ + 0xECEF, 0xECEE, 0xC0C4, 0xC0C5, 0xF248, 0, 0, 0xA4E5, /* 0x80 */ + 0, 0, 0, 0, 0xD979, 0, 0, 0, /* 0x80 */ + 0xB4B4, 0xB4B3, 0xDDBD, 0, 0xEFD8, 0xC4E3, 0xF7DE, 0xA4E6, /* 0x90 */ + 0, 0xAEC6, 0, 0xB1D8, 0xB1D7, 0xD97A, 0xD97B, 0xB772, /* 0x90 */ + 0xE1F5, 0xBA57, 0xE9B2, 0, 0xA4E7, 0xA5B8, 0, 0xA9F2, /* 0xA0 */ + 0xCCC2, 0, 0xCEE9, 0xAC48, 0xB1D9, 0, 0xD97C, 0xB4B5, /* 0xA0 */ + 0xB773, 0, 0xE5C1, 0xE5C2, 0, 0, 0xECF0, 0xC25F, /* 0xB0 */ + 0xF8F0, 0xA4E8, 0, 0xCCC3, 0xA9F3, 0xAC49, 0, 0xCEEA, /* 0xB0 */ + 0, 0xAEC7, 0xD1D2, 0xD1D0, 0xD1D1, 0xAEC8, 0xD1CF, 0, /* 0xC0 */ + 0, 0, 0, 0xB1DB, 0xB1DC, 0xD5A8, 0xB1DD, 0xB1DA, /* 0xC0 */ + 0xD97D, 0, 0xD97E, 0xDDBE, 0, 0, 0xBA59, 0xBA58, /* 0xD0 */ + 0, 0, 0xECF1, 0xEFD9, 0, 0xF24A, 0xF249, 0xF44F, /* 0xD0 */ + 0, 0xC95E, 0xAC4A, 0, 0, 0xA4E9, 0xA5B9, 0, /* 0xE0 */ + 0xA6AE, 0xA6AD, 0, 0, 0xA6AF, 0xA6B0, 0xC9EE, 0xC9ED, /* 0xE0 */ + 0xCAF8, 0xA7F2, 0xCAFB, 0xCAFA, 0xCAF9, 0xCAFC, 0, 0, /* 0xF0 */ + 0, 0, 0xA9F4, 0xCCC9, 0xCCC5, 0xCCCE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_66[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA9FB, 0, 0xA9F9, 0xCCCA, 0xCCC6, 0xCCCD, 0xA9F8, 0xAA40, /* 0x00 */ + 0xCCC8, 0xCCC4, 0xA9FE, 0xCCCB, 0xA9F7, 0xCCCC, 0xA9FA, 0xA9FC, /* 0x00 */ + 0xCCD0, 0xCCCF, 0xCCC7, 0xA9F6, 0xA9F5, 0xA9FD, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0xCEEF, 0xCEF5, 0, 0xAC50, /* 0x10 */ + 0xAC4D, 0xCEEC, 0xCEF1, 0, 0xAC53, 0xAC4B, 0xCEF0, 0xAC4E, /* 0x20 */ + 0xAC51, 0, 0, 0xCEF3, 0, 0xAC4C, 0xCEF8, 0xAC4F, /* 0x20 */ + 0, 0xAC52, 0xCEED, 0xCEF2, 0xCEF6, 0xCEEE, 0xCEEB, 0, /* 0x30 */ + 0, 0xCEF7, 0xCEF4, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xAED0, 0xAEC9, 0xAECC, 0, 0xAECF, 0, 0xD1D5, /* 0x40 */ + 0, 0xAECA, 0xD1D3, 0, 0xAECE, 0, 0, 0xAECB, /* 0x40 */ + 0, 0xD1D6, 0xAECD, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xD5AC, 0xB1DF, 0xD5AB, 0xD5AD, 0xB1DE, 0xB1E3, 0xD1D4, /* 0x50 */ + 0, 0xD5AA, 0xD5AE, 0, 0xB1E0, 0xD5A9, 0xB1E2, 0, /* 0x60 */ + 0xB1E1, 0, 0xD9A7, 0, 0xD9A2, 0, 0xB4B6, 0xB4BA, /* 0x60 */ + 0xB4B7, 0xD9A5, 0xD9A8, 0, 0xB4B8, 0, 0xB4B9, 0xB4BE, /* 0x70 */ + 0xDDC7, 0xD9A6, 0xB4BC, 0xD9A3, 0xD9A1, 0, 0xB4BD, 0, /* 0x70 */ + 0xD9A4, 0, 0, 0, 0xB779, 0, 0xDDBF, 0xB776, /* 0x80 */ + 0xB777, 0xB775, 0xDDC4, 0xDDC3, 0xDDC0, 0xB77B, 0, 0, /* 0x80 */ + 0xDDC2, 0xB4BB, 0, 0, 0xDDC6, 0xDDC1, 0xB778, 0xB774, /* 0x90 */ + 0xB77A, 0xDDC5, 0, 0, 0, 0xBA5C, 0, 0xE1F8, /* 0x90 */ + 0xE1F7, 0xE1F6, 0xBA5A, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xBA5B, 0xE5C5, 0xE5C8, 0xBCC8, 0, 0, 0xBCC7, 0xE5C9, /* 0xA0 */ + 0xE5C4, 0xBCCA, 0xE5C6, 0, 0xBCC9, 0xE5C3, 0, 0xE5C7, /* 0xB0 */ + 0xBEE9, 0xBEE6, 0xE9BB, 0xE9BA, 0, 0xE9B9, 0xE9B4, 0, /* 0xB0 */ + 0xE9B5, 0, 0, 0, 0xBEE7, 0, 0xBEE4, 0xBEE8, /* 0xC0 */ + 0xE9B3, 0xBEE5, 0xE9B6, 0xE9B7, 0xE9BC, 0, 0, 0xE9B8, /* 0xC0 */ + 0, 0, 0xECF2, 0, 0, 0, 0xC0C7, 0, /* 0xD0 */ + 0xEFDC, 0xC0C6, 0xEFDA, 0xEFDB, 0xC260, 0xC36E, 0xF24B, 0, /* 0xD0 */ + 0xC36D, 0, 0, 0xF451, 0xF452, 0, 0xC466, 0, /* 0xE0 */ + 0xF450, 0xC4E4, 0, 0xF7DF, 0xC5CE, 0xF8AA, 0xF8AB, 0, /* 0xE0 */ + 0xA4EA, 0, 0xA6B1, 0xA6B2, 0xA7F3, 0, 0xCCD1, 0xAC54, /* 0xF0 */ + 0xAED1, 0xB1E4, 0, 0, 0xB0D2, 0, 0xB4BF, 0xB4C0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_67[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB3CC, 0xD9A9, 0, 0xB77C, 0xE1FA, 0xE1F9, 0, 0, /* 0x00 */ + 0xA4EB, 0xA6B3, 0xCCD2, 0xAA42, 0, 0xAA41, 0, 0xCEF9, /* 0x00 */ + 0xCEFA, 0, 0xD1D7, 0xD1D8, 0xAED2, 0xAED3, 0, 0xAED4, /* 0x10 */ + 0xD5AF, 0, 0, 0xB1E6, 0, 0xB4C2, 0, 0xB4C1, /* 0x10 */ + 0xDDC8, 0xDF7A, 0xE1FB, 0xE9BD, 0, 0, 0xC261, 0xC467, /* 0x20 */ + 0xA4EC, 0, 0xA5BC, 0xA5BD, 0xA5BB, 0xA5BE, 0xA5BA, 0, /* 0x20 */ + 0, 0xA6B6, 0, 0xC9F6, 0xA6B5, 0xA6B7, 0, 0, /* 0x30 */ + 0xC9F1, 0xC9F0, 0xC9F3, 0xC9F2, 0xC9F5, 0xA6B4, 0xC9EF, 0xC9F4, /* 0x30 */ + 0, 0, 0, 0, 0, 0xCAFD, 0xA7FD, 0xCAFE, /* 0x40 */ + 0xCB43, 0xA7FC, 0, 0xCB47, 0xCB42, 0xCB45, 0xA7F5, 0xA7F6, /* 0x40 */ + 0xA7F7, 0xA7F8, 0, 0xA840, 0, 0xCB41, 0xA7FA, 0xA841, /* 0x50 */ + 0, 0xCB40, 0xCB46, 0, 0xA7F9, 0xCB44, 0xA7FB, 0xA7F4, /* 0x50 */ + 0xA7FE, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0xAA57, 0, 0xCCD4, 0xAA43, 0, 0xAA4D, /* 0x60 */ + 0xAA4E, 0xAA46, 0xAA58, 0xAA48, 0xCCDC, 0xAA53, 0xCCD7, 0xAA49, /* 0x70 */ + 0xCCE6, 0xCCE7, 0xCCDF, 0xCCD8, 0xAA56, 0xCCE4, 0xAA51, 0xAA4F, /* 0x70 */ + 0, 0xCCE5, 0, 0xCCE3, 0xCCDB, 0xCCD3, 0xCCDA, 0xAA4A, /* 0x80 */ + 0, 0xAA50, 0, 0xAA44, 0xCCDE, 0xCCDD, 0xCCD5, 0, /* 0x80 */ + 0xAA52, 0xCCE1, 0xCCD6, 0xAA55, 0xCCE8, 0xAA45, 0, 0xAA4C, /* 0x90 */ + 0xCCD9, 0xCCE2, 0xAA54, 0, 0xAA47, 0xAA4B, 0, 0xCCE0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0xCF5B, 0xAC5C, /* 0xA0 */ + 0xAC69, 0, 0xCF56, 0xCF4C, 0xAC62, 0xCF4A, 0xAC5B, 0xCF45, /* 0xB0 */ + 0xAC65, 0xCF52, 0xCEFE, 0xCF41, 0, 0, 0, 0, /* 0xB0 */ + 0xCF44, 0xCEFB, 0xCF51, 0xCF61, 0xAC60, 0xCF46, 0xCF58, 0, /* 0xC0 */ + 0xCEFD, 0xCF5F, 0xCF60, 0xCF63, 0xCF5A, 0xCF4B, 0xCF53, 0xAC66, /* 0xC0 */ + 0xAC59, 0xAC61, 0xAC6D, 0xAC56, 0xAC58, 0, 0, 0, /* 0xD0 */ + 0xCF43, 0xAC6A, 0xAC63, 0xCF5D, 0xCF40, 0xAC6C, 0xAC67, 0xCF49, /* 0xD0 */ + 0, 0, 0xAC6B, 0xCF50, 0xCF48, 0xAC64, 0xCF5C, 0xCF54, /* 0xE0 */ + 0, 0xAC5E, 0xCF62, 0xCF47, 0xAC5A, 0xCF59, 0xCF4F, 0xAC5F, /* 0xE0 */ + 0xCF55, 0xAC57, 0xCEFC, 0xAC68, 0xAEE3, 0xAC5D, 0xCF4E, 0xCF4D, /* 0xF0 */ + 0xCF42, 0, 0xCF5E, 0, 0xCF57, 0, 0, 0xAC55 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_68[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD1EC, 0xAEEA, 0xD1ED, 0, 0xD1E1, 0xAEDF, /* 0x10 */ + 0xAEEB, 0, 0xD1DA, 0, 0xD1E3, 0xD1EB, 0, 0xD1D9, /* 0x10 */ + 0xD1F4, 0xAED5, 0, 0, 0, 0xD1F3, 0xD1EE, 0, /* 0x20 */ + 0xD1EF, 0xAEDD, 0xAEE8, 0xD1E5, 0, 0xD1E6, 0xD1F0, 0xD1E7, /* 0x20 */ + 0, 0xD1E2, 0xD1DC, 0xD1DD, 0xD1EA, 0xD1E4, 0, 0, /* 0x30 */ + 0xAED6, 0xAEDA, 0xD1F2, 0xD1DE, 0xAEE6, 0xAEE2, 0, 0, /* 0x30 */ + 0xAEE5, 0xAEEC, 0xAEDB, 0xAEE7, 0xD1E9, 0xAEE9, 0xAED8, 0, /* 0x40 */ + 0xAED7, 0xD1DB, 0, 0xD1DF, 0xAEE0, 0xD1F1, 0xD1E8, 0xD1E0, /* 0x40 */ + 0xAEE4, 0xAEE1, 0, 0xAED9, 0xAEDC, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xD5C4, 0, 0xD5B4, 0xD5B5, 0xD5B9, /* 0x60 */ + 0, 0xD5C8, 0xD5C5, 0, 0xD5BE, 0xD5BD, 0xB1ED, 0xD5C1, /* 0x70 */ + 0xD5D0, 0xD5B0, 0, 0xD5D1, 0xD5C3, 0xD5D5, 0xD5C9, 0xB1EC, /* 0x70 */ + 0xD5C7, 0xB1E7, 0xB1FC, 0xB1F2, 0, 0xB1F6, 0xB1F5, 0xD5B1, /* 0x80 */ + 0, 0xD5CE, 0xD5D4, 0xD5CC, 0xD5D3, 0, 0, 0xD5C0, /* 0x80 */ + 0xD5B2, 0xD5D2, 0xD5C2, 0xB1EA, 0xB1F7, 0, 0xD5CB, 0xB1F0, /* 0x90 */ + 0, 0, 0, 0xD5CA, 0xD5B3, 0xB1F8, 0, 0xB1FA, /* 0x90 */ + 0xD5CD, 0xB1FB, 0xB1E9, 0xD5BA, 0xD5CF, 0, 0, 0xB1EF, /* 0xA0 */ + 0xB1F9, 0xD5BC, 0xD5C6, 0xD5B7, 0xD5BB, 0xB1F4, 0xD5B6, 0xB1E8, /* 0xA0 */ + 0xB1F1, 0xB1EE, 0xD5BF, 0xAEDE, 0xD9C0, 0xB1EB, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0xB1F3, 0, 0xD9C3, 0xD9D9, /* 0xC0 */ + 0xD9CE, 0xB4D6, 0, 0xB4D1, 0xD9BD, 0xB4D2, 0xD9CD, 0, /* 0xC0 */ + 0xD9C6, 0xD9D3, 0xB4CE, 0xD9AB, 0xD9D5, 0xB4C4, 0xD9B3, 0xB4C7, /* 0xD0 */ + 0xB4C6, 0, 0xB4D7, 0, 0xD9AD, 0xD9CF, 0xD9D0, 0xB4C9, /* 0xD0 */ + 0xB4C5, 0xD9BB, 0, 0xB4D0, 0xD9B6, 0, 0xD9D1, 0xB4CC, /* 0xE0 */ + 0xD9C9, 0xD9D6, 0xD9B0, 0xD9B5, 0xD9AF, 0, 0xB4CB, 0xD9C2, /* 0xE0 */ + 0xDDDE, 0xD9B1, 0xB4CF, 0xD9BA, 0xD9D2, 0xB4CA, 0xD9B7, 0xD9B4, /* 0xF0 */ + 0xD9C5, 0xB4CD, 0xB4C3, 0xB4D9, 0xD9C8, 0xD9C7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_69[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD9AC, 0xB4C8, 0xD9D4, 0xD9BC, /* 0x00 */ + 0xD9BE, 0, 0xD9CB, 0xD9CA, 0xD9AA, 0xB4D3, 0xB4D5, 0xD9B2, /* 0x00 */ + 0xD9B9, 0xD9C1, 0xB4D4, 0xD9B8, 0xD9C4, 0xD9D7, 0, 0xD9CC, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xD9D8, 0, 0, /* 0x20 */ + 0, 0, 0xD9AE, 0, 0, 0, 0, 0xDDF2, /* 0x20 */ + 0xB7A6, 0, 0xDDF0, 0xDDDB, 0xDDE0, 0xDDD9, 0, 0xDDEC, /* 0x30 */ + 0xDDCB, 0xDDD2, 0, 0xDDEA, 0xDDF4, 0xDDDC, 0, 0xDDCF, /* 0x30 */ + 0xDDE2, 0xDDE7, 0xDDD3, 0, 0xDDE4, 0xDDD0, 0, 0, /* 0x40 */ + 0xDDD7, 0xDDD8, 0xB7A8, 0xDDEB, 0xDDE9, 0, 0xDDCC, 0xDDEE, /* 0x40 */ + 0, 0xDDEF, 0xDDF1, 0xB7AC, 0xB7A4, 0, 0xD5B8, 0xDDD4, /* 0x50 */ + 0xDDE6, 0xDDD5, 0xB7A1, 0xB7B1, 0xDDED, 0xB7AF, 0xB7AB, 0xDDCA, /* 0x50 */ + 0xB7A3, 0, 0xDDCD, 0xB7B0, 0, 0xDDDD, 0xDDC9, 0, /* 0x60 */ + 0xB7A9, 0xDDE1, 0xDDD1, 0xB7AA, 0xDDDA, 0xB77E, 0xB4D8, 0xDDE3, /* 0x60 */ + 0xD9BF, 0xDDCE, 0, 0, 0xDDE8, 0xB7A5, 0xDDE5, 0xB7A2, /* 0x70 */ + 0xDDDF, 0xB7AD, 0xDDD6, 0xDDF3, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xB7A7, 0xDEC6, 0, 0, 0xB7AE, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xE24A, 0xE248, 0, /* 0x80 */ + 0xE25E, 0xE246, 0, 0xE258, 0xB77D, 0xBA5F, 0xE242, 0xE25D, /* 0x90 */ + 0, 0xE247, 0xE255, 0xBA64, 0xBA5D, 0, 0xE25B, 0, /* 0x90 */ + 0xE240, 0xE25A, 0, 0xBA6F, 0xE251, 0xE261, 0xBA6D, 0xE249, /* 0xA0 */ + 0xBA5E, 0xE24B, 0xE259, 0xBA67, 0xE244, 0xBA6B, 0xBA61, 0xE24D, /* 0xA0 */ + 0xE243, 0xE1FC, 0, 0xE257, 0xBA68, 0xE260, 0xE1FD, 0xBA65, /* 0xB0 */ + 0, 0xE253, 0, 0xBA66, 0xE245, 0xE250, 0xE24C, 0xE24E, /* 0xB0 */ + 0, 0xBA60, 0xE25F, 0xBA6E, 0xE24F, 0, 0xE262, 0, /* 0xC0 */ + 0, 0xE1FE, 0xE254, 0xBA63, 0xBA6C, 0xBA6A, 0xE241, 0xE256, /* 0xC0 */ + 0xBA69, 0, 0, 0xBA62, 0xE252, 0, 0, 0, /* 0xD0 */ + 0, 0xE25C, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xE5D5, 0, 0xE5D1, 0xE5CD, 0xE5E1, 0xE5DE, /* 0xE0 */ + 0xBCCD, 0, 0, 0xE5E5, 0xE5D4, 0xBCD8, 0xE5DB, 0, /* 0xE0 */ + 0, 0xE5D0, 0xE5DA, 0xBCD5, 0xE5EE, 0, 0xE5EB, 0xE5DD, /* 0xF0 */ + 0xE5CE, 0, 0, 0xE5E2, 0xE5E4, 0xBCD1, 0xE5D8, 0xE5D3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_6A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5CA, 0xBCCE, 0xBCD6, 0, 0xE5E7, 0xBCD7, 0xE5CB, 0xE5ED, /* 0x00 */ + 0xE5E0, 0xE5E6, 0xBCD4, 0, 0, 0xE5E3, 0, 0xE5EA, /* 0x00 */ + 0, 0xBCD9, 0, 0xBCD3, 0xE5DC, 0xE5CF, 0xE5EF, 0xE5CC, /* 0x10 */ + 0xE5E8, 0xBCD0, 0, 0xE5D6, 0, 0xE5D7, 0xBCCF, 0xBCCC, /* 0x10 */ + 0xE5D2, 0xBCD2, 0, 0xBCCB, 0, 0xE5E9, 0xE5EC, 0xE5D9, /* 0x20 */ + 0xE9CA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0xE9C2, 0, 0xE9BE, 0xBEF6, 0, 0, /* 0x30 */ + 0xBEEB, 0xBEF0, 0xBEEC, 0xE9CC, 0xE9D7, 0xBEEA, 0xE9C4, 0xE9CD, /* 0x30 */ + 0xE5DF, 0xE9CE, 0, 0, 0xBEF1, 0, 0xE9DD, 0xBEF5, /* 0x40 */ + 0xBEF8, 0xE9C0, 0, 0xBEF4, 0, 0xE9DB, 0xE9DC, 0xE9D2, /* 0x40 */ + 0xE9D1, 0xE9C9, 0, 0, 0xE9D3, 0xE9DA, 0xE9D9, 0, /* 0x50 */ + 0xBEEF, 0xBEED, 0xE9CB, 0xE9C8, 0, 0xE9C5, 0xE9D8, 0xBEF7, /* 0x50 */ + 0xE9D6, 0xBEF3, 0xBEF2, 0, 0xE9D0, 0, 0xE9BF, 0xE9C1, /* 0x60 */ + 0xE9C3, 0xE9D5, 0xE9CF, 0xBEEE, 0, 0xE9C6, 0, 0xE9D4, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0xE9C7, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0xC0CF, 0xED45, /* 0x70 */ + 0xC0C8, 0xECF5, 0, 0xED41, 0xC0CA, 0xED48, 0, 0xECFC, /* 0x80 */ + 0, 0xECF7, 0, 0, 0xED49, 0xECF3, 0xECFE, 0, /* 0x80 */ + 0xC0D1, 0xED44, 0xED4A, 0xECFD, 0xC0C9, 0xED40, 0xECF4, 0xC0D0, /* 0x90 */ + 0, 0, 0xED47, 0xECF9, 0xC0CC, 0, 0xECFB, 0xECF8, /* 0x90 */ + 0xC0D2, 0xECFA, 0xC0CB, 0xC0CE, 0xED43, 0xECF6, 0xED46, 0, /* 0xA0 */ + 0xED42, 0, 0, 0, 0xC263, 0xEFE7, 0xC268, 0xC269, /* 0xA0 */ + 0, 0, 0, 0xC262, 0xEFE6, 0, 0xEFE3, 0xEFE4, /* 0xB0 */ + 0xC266, 0xEFDE, 0xEFE2, 0xC265, 0, 0xEFDF, 0, 0, /* 0xB0 */ + 0, 0, 0xC267, 0xC264, 0, 0xEFDD, 0xEFE1, 0xEFE5, /* 0xC0 */ + 0, 0, 0, 0xF251, 0xF24E, 0xF257, 0, 0xF256, /* 0xC0 */ + 0xF254, 0xF24F, 0, 0xC372, 0, 0, 0, 0, /* 0xD0 */ + 0, 0xF250, 0xC371, 0xC0CD, 0xF253, 0xC370, 0xF258, 0xF252, /* 0xD0 */ + 0xF24D, 0xEFE0, 0, 0, 0, 0xC36F, 0, 0xF24C, /* 0xE0 */ + 0xF456, 0, 0xF455, 0xF255, 0xC468, 0, 0xF459, 0xF45A, /* 0xE0 */ + 0xF454, 0xF458, 0, 0xF453, 0, 0, 0, 0, /* 0xF0 */ + 0xF5D1, 0xF457, 0xC4E7, 0xC4E5, 0xF5CF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_6B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF5D2, 0, 0xF5CE, 0xF5D0, 0xC4E6, 0, 0, 0, /* 0x00 */ + 0xF6E5, 0xF6E6, 0xC576, 0xF6E4, 0, 0, 0, 0xF7E2, /* 0x00 */ + 0xC5CF, 0xF7E0, 0xF7E1, 0xF8AC, 0, 0, 0xC656, 0xF8F3, /* 0x10 */ + 0xF8F1, 0xF8F2, 0xF8F4, 0, 0, 0, 0xF9BB, 0, /* 0x10 */ + 0xA4ED, 0xA6B8, 0, 0xAA59, 0, 0xCCE9, 0, 0, /* 0x20 */ + 0xCF64, 0, 0, 0, 0xD1F5, 0xD1F7, 0, 0xD1F6, /* 0x20 */ + 0, 0xD1F8, 0xB1FD, 0xD5D7, 0xD1F9, 0, 0xD5D6, 0xD5D8, /* 0x30 */ + 0xD5D9, 0xD9DA, 0xB4DB, 0xD9DB, 0xD9DD, 0xB4DC, 0xB4DA, 0xD9DC, /* 0x30 */ + 0, 0xDDFA, 0xDDF8, 0xDDF7, 0, 0xDDF6, 0xDDF5, 0xB7B2, /* 0x40 */ + 0xDDF9, 0xBA70, 0xE263, 0xE265, 0xBA71, 0xE264, 0xBCDB, 0, /* 0x40 */ + 0xBCDA, 0xE5F0, 0, 0, 0xE9DF, 0xE9DE, 0xE9E0, 0, /* 0x50 */ + 0, 0xBEF9, 0, 0xED4B, 0xC0D3, 0, 0xEFE8, 0xC26A, /* 0x50 */ + 0xF259, 0xC577, 0xA4EE, 0xA5BF, 0xA6B9, 0xA842, 0xAA5A, 0xAA5B, /* 0x60 */ + 0, 0, 0xAC6E, 0, 0, 0xD1FA, 0, 0, /* 0x60 */ + 0, 0, 0xB7B3, 0, 0, 0, 0xE6D1, 0xBEFA, /* 0x70 */ + 0xC26B, 0xA4EF, 0, 0xA6BA, 0, 0, 0xCCEB, 0xAA5C, /* 0x70 */ + 0xCCEA, 0, 0xCF65, 0xAC6F, 0xCF66, 0, 0xAC70, 0, /* 0x80 */ + 0xD1FC, 0xAEEE, 0xAEED, 0, 0xD5DE, 0xD5DC, 0xD5DD, 0xD5DB, /* 0x80 */ + 0, 0xD5DA, 0, 0, 0xD9DE, 0xD9E1, 0xB4DE, 0xD9DF, /* 0x90 */ + 0xB4DD, 0xD9E0, 0, 0xDDFB, 0, 0, 0xE266, 0xE267, /* 0x90 */ + 0xE268, 0, 0xE5F3, 0xE5F2, 0xBCDC, 0xE5F1, 0xE5F4, 0xE9E1, /* 0xA0 */ + 0, 0, 0xE9E2, 0xE9E3, 0, 0xED4C, 0xC0D4, 0xC26C, /* 0xA0 */ + 0xF25A, 0, 0xC4E8, 0xC95F, 0, 0xAC71, 0xCF67, 0xAEEF, /* 0xB0 */ + 0, 0, 0xB1FE, 0, 0xB4DF, 0xD9E2, 0, 0xB7B5, /* 0xB0 */ + 0xB7B4, 0, 0, 0xE269, 0xE26A, 0xBCDD, 0xBCDE, 0xE9E5, /* 0xC0 */ + 0xE9E4, 0xEFE9, 0xF7E3, 0xA4F0, 0xC960, 0xA5C0, 0, 0xA843, /* 0xC0 */ + 0xCB48, 0, 0xAC72, 0xB7B6, 0xA4F1, 0, 0xCF68, 0xAC73, /* 0xD0 */ + 0xCF69, 0, 0xC0D5, 0xA4F2, 0, 0, 0xCCEC, 0, /* 0xD0 */ + 0xCF6A, 0, 0xD242, 0xD241, 0xD1FE, 0, 0xD1FD, 0xD243, /* 0xE0 */ + 0xD240, 0, 0, 0xB240, 0xB241, 0, 0, 0xB4E0, /* 0xE0 */ + 0xD9E3, 0, 0xD9E4, 0xD9E5, 0, 0, 0, 0xDE41, /* 0xF0 */ + 0xDE42, 0xDE40, 0, 0xDDFD, 0xDDFE, 0xB7B7, 0xE26B, 0xE5F7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_6C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE5F6, 0xE5F5, 0xE5F8, 0xE9E7, 0xE9E6, 0xBEFB, 0xE9E8, 0, /* 0x00 */ + 0xC0D6, 0xED4D, 0, 0xEFEA, 0xF25B, 0xF6E7, 0, 0xA4F3, /* 0x00 */ + 0xA5C2, 0xA5C1, 0, 0xAA5D, 0xC961, 0xC97E, 0xA6BB, 0, /* 0x10 */ + 0xC9F7, 0xCB49, 0xCB4A, 0xAA5E, 0, 0xCCED, 0, 0xAC74, /* 0x10 */ + 0xCF6B, 0xCF6C, 0, 0xAEF0, 0xAEF4, 0xD244, 0xAEF3, 0xAEF1, /* 0x20 */ + 0xAEF2, 0, 0xD5DF, 0xB242, 0xB4E3, 0, 0xB4E1, 0xB4E2, /* 0x20 */ + 0xD9E6, 0, 0, 0xBA72, 0xA4F4, 0, 0xC9A1, 0, /* 0x30 */ + 0xA5C3, 0, 0, 0xC9A4, 0, 0, 0xA5C6, 0xC9A3, /* 0x30 */ + 0xA5C5, 0xA5C4, 0xA844, 0xC9A2, 0, 0, 0xC9F8, 0, /* 0x40 */ + 0, 0, 0xC9FC, 0xC9FE, 0xCA40, 0xA6C5, 0xA6C6, 0xC9FB, /* 0x40 */ + 0xA6C1, 0, 0xC9F9, 0, 0xC9FD, 0xA6C2, 0, 0xA6BD, /* 0x50 */ + 0, 0xA6BE, 0, 0xA6C4, 0xC9FA, 0xA6BC, 0xA845, 0xA6BF, /* 0x50 */ + 0xA6C0, 0xA6C3, 0, 0, 0, 0xCB5B, 0xCB59, 0xCB4C, /* 0x60 */ + 0xA851, 0xCB53, 0xA84C, 0xCB4D, 0, 0xCB55, 0, 0xCB52, /* 0x60 */ + 0xA84F, 0xCB51, 0xA856, 0xCB5A, 0xA858, 0, 0xA85A, 0, /* 0x70 */ + 0xCB4B, 0, 0xA84D, 0xCB5C, 0, 0xA854, 0xA857, 0, /* 0x70 */ + 0xCD45, 0xA847, 0xA85E, 0xA855, 0xCB4E, 0xA84A, 0xA859, 0xCB56, /* 0x80 */ + 0xA848, 0xA849, 0xCD43, 0xCB4F, 0xA850, 0xA85B, 0xCB5D, 0xCB50, /* 0x80 */ + 0xA84E, 0, 0xA853, 0xCCEE, 0xA85C, 0xCB57, 0xA852, 0, /* 0x90 */ + 0xA85D, 0xA846, 0xCB54, 0xA84B, 0xCB58, 0xCD44, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0xAA6A, 0xAA7A, 0xCCF5, 0xAA71, 0, /* 0xA0 */ + 0xCD4B, 0xAA62, 0, 0xAA65, 0xCD42, 0, 0xCCF3, 0xCCF7, /* 0xB0 */ + 0xAA6D, 0xAA6F, 0xCCFA, 0xAA76, 0xAA68, 0xAA66, 0xAA67, 0xAA75, /* 0xB0 */ + 0xCD47, 0xAA70, 0xCCF9, 0xCCFB, 0xAA6E, 0xAA73, 0xCCFC, 0xCD4A, /* 0xC0 */ + 0, 0xAC75, 0xAA79, 0, 0xAA63, 0xCD49, 0, 0xCD4D, /* 0xC0 */ + 0xCCF8, 0xCD4F, 0xCD40, 0xAA6C, 0xCCF4, 0xAA6B, 0xAA7D, 0xAA72, /* 0xD0 */ + 0, 0xCCF2, 0xCF75, 0xAA78, 0xAA7C, 0xCD41, 0xCD46, 0, /* 0xD0 */ + 0xAA7E, 0xAA77, 0xAA69, 0xAA5F, 0, 0xAA64, 0, 0xCCF6, /* 0xE0 */ + 0xAA60, 0xCD4E, 0, 0xCCF0, 0xCCEF, 0xCCFD, 0xCCF1, 0xAA7B, /* 0xE0 */ + 0xAEF5, 0xAA74, 0xCCFE, 0xAA61, 0, 0xACA6, 0, 0, /* 0xF0 */ + 0, 0xCD4C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_6D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xCF7C, 0xCFA1, 0, 0xCFA4, 0xCF77, 0, 0, 0xCFA7, /* 0x00 */ + 0xCFAA, 0xCFAC, 0xCF74, 0xAC76, 0xAC7B, 0xD249, 0xACAD, 0xCFA5, /* 0x00 */ + 0xCFAD, 0xCF7B, 0xCF73, 0, 0, 0, 0xD264, 0xAC7E, /* 0x10 */ + 0xCFA2, 0xCF78, 0xCF7A, 0xACA5, 0, 0xCF7D, 0xAC7D, 0xCF70, /* 0x10 */ + 0xCFA8, 0, 0xCFAB, 0, 0, 0xAC7A, 0, 0xACA8, /* 0x20 */ + 0xCF6D, 0xACAA, 0xAC78, 0xACAE, 0xCFA9, 0xCF6F, 0xACAB, 0xD25E, /* 0x20 */ + 0xCD48, 0xAC7C, 0xAC77, 0xCF76, 0xCF6E, 0xACAC, 0xACA4, 0xCFA3, /* 0x30 */ + 0xACA9, 0xACA7, 0xCF79, 0xACA1, 0xCF71, 0xACA2, 0xACA3, 0xCF72, /* 0x30 */ + 0xCFA6, 0xAC79, 0xCF7E, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xD24C, 0xAEFD, 0xAF43, 0, 0, 0, 0xD255, 0xD25B, /* 0x50 */ + 0xD257, 0xD24A, 0xD24D, 0xD246, 0xD247, 0xAF4A, 0xAEFA, 0xD256, /* 0x60 */ + 0xD25F, 0xAF45, 0xAEF6, 0, 0xAF40, 0xD24E, 0xAF42, 0xD24F, /* 0x60 */ + 0xD259, 0, 0, 0, 0xAF44, 0xD268, 0xD248, 0xAEFC, /* 0x70 */ + 0xAEFB, 0xAF48, 0xD245, 0xD266, 0xD25A, 0xD267, 0xD261, 0xD253, /* 0x70 */ + 0xD262, 0, 0xD25C, 0xD265, 0xD263, 0xAF49, 0xD254, 0xAEF9, /* 0x80 */ + 0xAEF8, 0xAF41, 0xAF47, 0xD260, 0xAF46, 0xD251, 0xB243, 0, /* 0x80 */ + 0xD269, 0xD250, 0xD24B, 0xAEFE, 0xAF4B, 0xAEF7, 0, 0xD258, /* 0x90 */ + 0xD25D, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xB265, 0xD5E1, 0xD5E5, 0, 0xB252, 0xB250, /* 0xA0 */ + 0, 0, 0xB247, 0xD5E3, 0xD5E2, 0xB25B, 0, 0xD5E8, /* 0xB0 */ + 0xB255, 0, 0xD5FA, 0xD647, 0xB244, 0xD5F7, 0xD5F0, 0xB267, /* 0xB0 */ + 0xD5E0, 0, 0xD5FC, 0, 0xB264, 0xB258, 0xB263, 0xB24E, /* 0xC0 */ + 0xD5EC, 0xD5FE, 0xD5F6, 0xB24F, 0xB249, 0xD645, 0, 0xD5FD, /* 0xC0 */ + 0xD640, 0xB251, 0xB259, 0xD642, 0xD5EA, 0xD5FB, 0xD5EF, 0xD644, /* 0xD0 */ + 0xB25E, 0xB246, 0xB25C, 0xD5F4, 0xD5F2, 0xD5F3, 0xB253, 0xD5EE, /* 0xD0 */ + 0xD5ED, 0xB248, 0xD5E7, 0xD646, 0xB24A, 0xD5F1, 0xB268, 0, /* 0xE0 */ + 0xB262, 0xD5E6, 0xB25F, 0xB25D, 0xB266, 0xD5F8, 0xB261, 0xD252, /* 0xE0 */ + 0xD5F9, 0xB260, 0xD641, 0xB245, 0xD5F5, 0xB257, 0xD5E9, 0xB256, /* 0xF0 */ + 0, 0xB254, 0xB24C, 0xB24B, 0xD9E7, 0xD643 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_6E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD5EB, 0, 0, 0xD9FC, 0, 0xB24D, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xB541, 0xB25A, 0xB4EE, 0xD9F6, 0xB4FC, 0, 0xD9EA, /* 0x10 */ + 0xB4EB, 0xB4E7, 0xDA49, 0xB4ED, 0xB4F1, 0xB4EC, 0xB4F5, 0xDA4D, /* 0x20 */ + 0xDA44, 0, 0, 0xD9F1, 0xB4FA, 0xB4F4, 0xD9FD, 0xB4E4, /* 0x20 */ + 0xDA4A, 0xDA43, 0xB4E8, 0xD9F7, 0xB4F7, 0xDA55, 0xDA56, 0, /* 0x30 */ + 0xB4E5, 0xDA48, 0xB4F9, 0xD9FB, 0xD9ED, 0xD9EE, 0xB4FD, 0xD9F2, /* 0x30 */ + 0xD9F9, 0xD9F3, 0, 0xB4FB, 0xB544, 0xD9EF, 0xD9E8, 0xD9E9, /* 0x40 */ + 0, 0xD9EB, 0xB4EA, 0xD9F8, 0, 0xB4F8, 0xB542, 0, /* 0x40 */ + 0, 0xD9FA, 0xDA53, 0xDA4B, 0xB4E6, 0xDA51, 0xB4F2, 0, /* 0x50 */ + 0xB4F0, 0, 0xDA57, 0xB4EF, 0xDA41, 0xD9F4, 0xD9FE, 0xB547, /* 0x50 */ + 0xDA45, 0xDA42, 0xD9F0, 0xB543, 0xDA4F, 0xDA4C, 0xDA54, 0xB4E9, /* 0x60 */ + 0xDA40, 0xB546, 0, 0xDA47, 0, 0, 0xB4F3, 0xB4F6, /* 0x60 */ + 0, 0xDA46, 0xB545, 0xD9F5, 0xD5E4, 0, 0, 0xDA50, /* 0x70 */ + 0xDA4E, 0xDA52, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xD9EC, 0xB540, 0, 0, 0, 0xDE61, 0xDE60, 0xDE46, /* 0x80 */ + 0xB7BD, 0, 0xDE5F, 0xDE49, 0xDE4A, 0, 0xB7C7, 0xDE68, /* 0x90 */ + 0xB7C2, 0xDE5E, 0, 0xDE43, 0xB7C8, 0xB7BE, 0xDE52, 0xDE48, /* 0x90 */ + 0xDE4B, 0xDE63, 0xB7B8, 0xDE6A, 0xDE62, 0xB7C1, 0xDE57, 0xB7CC, /* 0xA0 */ + 0, 0, 0xB7CB, 0xB7C5, 0, 0, 0xDE69, 0xB7B9, /* 0xA0 */ + 0xDE55, 0xDE4C, 0xDE59, 0xDE65, 0xB7CD, 0, 0xB7BB, 0xDE54, /* 0xB0 */ + 0, 0xDE4D, 0xB7C4, 0, 0xB7C3, 0xDE50, 0xDE5A, 0xDE64, /* 0xB0 */ + 0xDE47, 0xDE51, 0xB7BC, 0xDE5B, 0xB7C9, 0xB7C0, 0xDE4E, 0xB7BF, /* 0xC0 */ + 0xDE45, 0xDE53, 0xDE67, 0xB4FE, 0xBAB0, 0xDE56, 0xE26C, 0xDE58, /* 0xC0 */ + 0xDE66, 0xB7C6, 0xDE4F, 0xB7BA, 0xB7CA, 0xBCF0, 0xDE44, 0, /* 0xD0 */ + 0xDE5D, 0, 0, 0, 0xDE5C, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xE2AA, 0xBAAD, 0xE27D, 0xE2A4, 0xBAA2, /* 0xE0 */ + 0, 0xE26E, 0xBAAF, 0, 0xBA77, 0xE26D, 0xE2B0, 0xBAB1, /* 0xF0 */ + 0xE271, 0xE2A3, 0, 0xE273, 0xE2B3, 0xE2AF, 0xBA75, 0xBAA1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_6F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE653, 0xBAAE, 0xBA7D, 0xE26F, 0, 0xE2AE, 0xBAA3, 0xE2AB, /* 0x00 */ + 0xE2B8, 0xE275, 0xE27E, 0, 0, 0xE2B6, 0xE2AC, 0xBA7C, /* 0x00 */ + 0, 0, 0xE27C, 0xBA76, 0xBA74, 0xBAA8, 0, 0, /* 0x10 */ + 0xE27A, 0xE277, 0xE278, 0, 0xE2B2, 0, 0xE2B7, 0xE2B5, /* 0x10 */ + 0xBA7A, 0xE2B9, 0xBA7E, 0xBAA7, 0, 0xE270, 0xE5FA, 0xE279, /* 0x20 */ + 0, 0xBA78, 0xBAAC, 0xBAA9, 0xBA7B, 0xE2A5, 0xE274, 0xBAAA, /* 0x20 */ + 0xE2A7, 0xBAA4, 0xBAA6, 0xBA73, 0, 0xE2A9, 0xE2A1, 0xE272, /* 0x30 */ + 0xBAA5, 0xE2B1, 0xE2B4, 0xE27B, 0xE2A8, 0, 0xBA79, 0xBCDF, /* 0x30 */ + 0xE2A6, 0xE5F9, 0, 0xE2AD, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0xE276, 0xE644, /* 0x40 */ + 0xE64E, 0xBCE2, 0xE64D, 0xE659, 0xBCE4, 0xE64B, 0, 0xE64F, /* 0x50 */ + 0xBCEF, 0, 0xE646, 0xBCE7, 0, 0xE652, 0xE9F0, 0xBCF3, /* 0x50 */ + 0xBCF2, 0xE654, 0xE643, 0xE65E, 0xBCED, 0, 0xBCE3, 0xE657, /* 0x60 */ + 0, 0xE65B, 0xE660, 0xE655, 0xE649, 0xBCE6, 0xBCE9, 0xBCF1, /* 0x60 */ + 0xBCEC, 0, 0xE64C, 0xE2A2, 0, 0, 0xE648, 0xE65F, /* 0x70 */ + 0xBCE8, 0, 0xBCEB, 0xE661, 0xBCE0, 0xE656, 0xE5FB, 0xE65C, /* 0x70 */ + 0xC0DF, 0, 0xE64A, 0, 0xBCE1, 0xE645, 0xBCE5, 0xE5FC, /* 0x80 */ + 0xBAAB, 0xE641, 0, 0xE65A, 0xE642, 0xE640, 0xBCEA, 0, /* 0x80 */ + 0xE658, 0, 0xE5FE, 0xE651, 0xE650, 0xE65D, 0xE647, 0xBCEE, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0xE9F3, 0, /* 0x90 */ + 0xBF49, 0xBEFE, 0xEA40, 0xE9EB, 0xBF41, 0xE9F7, 0xBF48, 0xBF43, /* 0xA0 */ + 0xE9F5, 0xED4F, 0xE9FB, 0xEA42, 0xE9FA, 0xE9E9, 0xE9F8, 0xEA44, /* 0xA0 */ + 0xEA46, 0xBEFD, 0xEA45, 0xBF44, 0xBF4A, 0, 0xBF47, 0, /* 0xB0 */ + 0xE9FE, 0xBF46, 0xE9F9, 0, 0xE9ED, 0xE9F2, 0, 0xE9FD, /* 0xB0 */ + 0xBF45, 0xBF42, 0xBEFC, 0xBF40, 0xE9F1, 0, 0xE5FD, 0xE9EC, /* 0xC0 */ + 0xE9EF, 0xEA41, 0xE9F4, 0xE9EA, 0xED4E, 0xEA43, 0xE9EE, 0xE9FC, /* 0xC0 */ + 0, 0, 0, 0, 0xED51, 0xC0E3, 0, 0, /* 0xD0 */ + 0xC0D7, 0, 0, 0xC0DB, 0xED53, 0xED59, 0xED57, 0xC0D9, /* 0xD0 */ + 0xC0DA, 0xC0E1, 0xED5A, 0xED52, 0xC0DC, 0, 0xED56, 0xED55, /* 0xE0 */ + 0xED5B, 0xC0E2, 0, 0xC0DD, 0xC0E0, 0xED54, 0xC0E4, 0xC0DE, /* 0xE0 */ + 0xC0E5, 0xC0D8, 0xED58, 0, 0xED50, 0, 0, 0xEFF7, /* 0xF0 */ + 0, 0, 0xC271, 0xEFF4, 0xEFF6, 0, 0xC26F, 0xEFF2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_70[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEFF3, 0xEFEE, 0, 0, 0xE9F6, 0xEFEF, 0xC270, 0xEFEB, /* 0x00 */ + 0, 0xC26D, 0xEFF8, 0xC26E, 0xEFEC, 0xEFED, 0xEFF1, 0xC273, /* 0x00 */ + 0, 0xC272, 0, 0, 0xEFF0, 0xC378, 0xF25F, 0xF265, /* 0x10 */ + 0xC379, 0xF25C, 0xC376, 0xC373, 0xF267, 0xC377, 0, 0xC374, /* 0x10 */ + 0xF25E, 0xF261, 0xF262, 0xF263, 0xF266, 0, 0xEFF5, 0xF25D, /* 0x20 */ + 0xC375, 0xF264, 0xF268, 0xF260, 0, 0, 0, 0xF45D, /* 0x20 */ + 0xC46A, 0xF460, 0xC46B, 0xF468, 0xF45F, 0xF45C, 0, 0xF45E, /* 0x30 */ + 0xF462, 0xF465, 0xF464, 0xF467, 0xF45B, 0, 0xC469, 0xF463, /* 0x30 */ + 0xF466, 0xF469, 0xF461, 0xF5D3, 0xF5D4, 0xF5D8, 0xF5D9, 0, /* 0x40 */ + 0xF5D6, 0xF5D7, 0xF5D5, 0, 0xC4E9, 0, 0, 0, /* 0x40 */ + 0, 0xC578, 0xF6EB, 0, 0, 0xF6E8, 0xF6E9, 0xF6EA, /* 0x50 */ + 0xC579, 0, 0xF7E5, 0xF7E4, 0, 0xF8AF, 0xC5F4, 0xF8AD, /* 0x50 */ + 0xF8B0, 0xF8AE, 0xF8F5, 0xC657, 0xC665, 0xF9A3, 0xF96C, 0, /* 0x60 */ + 0xF9A2, 0xF9D0, 0xF9D1, 0xA4F5, 0, 0, 0, 0, /* 0x60 */ + 0xA6C7, 0xCA41, 0, 0, 0xCB5E, 0, 0xA85F, 0, /* 0x70 */ + 0xA862, 0, 0xCB5F, 0, 0xA860, 0xA861, 0, 0, /* 0x70 */ + 0, 0, 0xCD58, 0xCD5A, 0xCD55, 0xCD52, 0xCD54, 0, /* 0x80 */ + 0, 0, 0xAAA4, 0, 0, 0, 0xAAA2, 0, /* 0x80 */ + 0, 0xCD56, 0xAAA3, 0xCD53, 0xCD50, 0xAAA1, 0xCD57, 0, /* 0x90 */ + 0xCD51, 0xAAA5, 0xCD59, 0, 0, 0, 0, 0xCFAF, /* 0x90 */ + 0, 0xCFB3, 0, 0, 0xACB7, 0, 0, 0, /* 0xA0 */ + 0, 0xCFB6, 0, 0xACAF, 0xACB2, 0xACB4, 0xACB6, 0xACB3, /* 0xA0 */ + 0xCFB2, 0xCFB1, 0, 0xACB1, 0xCFB4, 0xCFB5, 0, 0xCFAE, /* 0xB0 */ + 0xACB5, 0, 0xACB0, 0, 0, 0, 0xCFB0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xD277, 0xD278, 0xD279, /* 0xC0 */ + 0xAF50, 0, 0xAF4C, 0xD26E, 0, 0xD276, 0xD27B, 0xAF51, /* 0xC0 */ + 0, 0xD26C, 0xD272, 0xD26B, 0xD275, 0, 0, 0xD271, /* 0xD0 */ + 0xAF4D, 0xAF4F, 0xD27A, 0, 0xD26A, 0xD26D, 0xD273, 0, /* 0xD0 */ + 0xD274, 0xD27C, 0xD270, 0, 0xAF4E, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0xB26D, /* 0xE0 */ + 0xD64E, 0, 0, 0xD650, 0xD64C, 0, 0xD658, 0xD64A, /* 0xF0 */ + 0xD657, 0xB269, 0xD648, 0xDA5B, 0xD652, 0xB26C, 0, 0xD653 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_71[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD656, 0, 0xD65A, 0, 0xD64F, 0, 0xD654, 0, /* 0x00 */ + 0, 0xB26A, 0xB26B, 0xD659, 0xD64D, 0xD649, 0xD65B, 0, /* 0x00 */ + 0xD651, 0, 0, 0xD655, 0, 0, 0, 0xD64B, /* 0x10 */ + 0, 0xB548, 0xB549, 0xDA65, 0xB54F, 0, 0xDA59, 0xDA62, /* 0x10 */ + 0xDA58, 0xB54C, 0xDA60, 0xDA5E, 0, 0xDA5F, 0xB54A, 0, /* 0x20 */ + 0xDA63, 0, 0, 0, 0, 0, 0xDA5C, 0xDA5A, /* 0x20 */ + 0xB54B, 0xDA5D, 0xDA61, 0, 0, 0, 0xB54D, 0, /* 0x30 */ + 0, 0, 0xDA64, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xDE70, 0xDE77, 0xDE79, 0xDEA1, 0, 0xB7DA, 0xDE6B, /* 0x40 */ + 0, 0xB7D2, 0, 0xDE7A, 0xB7D7, 0xDEA2, 0xB7CE, 0, /* 0x40 */ + 0xDE7D, 0, 0xDE6D, 0xDE7E, 0xDE6C, 0, 0xB7DC, 0, /* 0x50 */ + 0xDE78, 0xB7CF, 0xDEA3, 0, 0xB7D4, 0xDE71, 0xB7D9, 0xDE7C, /* 0x50 */ + 0xDE6F, 0xDE76, 0xDE72, 0xDE6E, 0xB7D1, 0xB7D8, 0xB7D6, 0xB7D3, /* 0x60 */ + 0xB7DB, 0xB7D0, 0xDE75, 0, 0xB7D5, 0, 0xB54E, 0, /* 0x60 */ + 0xDE7B, 0, 0xDE73, 0, 0, 0, 0, 0, /* 0x70 */ + 0xDE74, 0, 0, 0xE2C1, 0, 0xBAB4, 0, 0, /* 0x70 */ + 0xE2BD, 0xE2C3, 0xE2BF, 0, 0xBAB6, 0xE2BE, 0xE2C2, 0xE2BA, /* 0x80 */ + 0, 0xE2BC, 0xBAB5, 0, 0, 0, 0, 0xE2C0, /* 0x80 */ + 0xE2BB, 0, 0xBAB7, 0, 0xBAB2, 0, 0, 0xE2C4, /* 0x90 */ + 0, 0xBAB3, 0xE667, 0xE664, 0xE670, 0xE66A, 0xE66C, 0xBCF4, /* 0x90 */ + 0xE666, 0xE66E, 0, 0, 0xE66D, 0xE66B, 0, 0xE671, /* 0xA0 */ + 0xBCF7, 0xE668, 0xE66F, 0, 0xBCF5, 0, 0, 0xE663, /* 0xA0 */ + 0xE665, 0xBCF6, 0xE662, 0xE672, 0, 0xE669, 0, 0, /* 0xB0 */ + 0xEA4A, 0xBF51, 0, 0, 0xEA55, 0xEA53, 0xBF4B, 0xEA49, /* 0xB0 */ + 0xEA4C, 0xEA4D, 0xEA48, 0xBF55, 0xBF56, 0xEA47, 0xEA56, 0xEA51, /* 0xC0 */ + 0xBF4F, 0xBF4C, 0xEA50, 0xEA4E, 0, 0, 0xBF52, 0xEA52, /* 0xC0 */ + 0xBF4D, 0, 0xBF4E, 0, 0xEA4F, 0xBF50, 0xEA4B, 0, /* 0xD0 */ + 0xEA54, 0xBF53, 0xEA57, 0xEA58, 0xBF54, 0, 0, 0xC0E7, /* 0xD0 */ + 0xC0EE, 0xED5C, 0xED62, 0, 0xED60, 0xC0EA, 0xC0E9, 0xC0E6, /* 0xE0 */ + 0xED5E, 0, 0, 0, 0xC0EC, 0xC0EB, 0xC0E8, 0, /* 0xE0 */ + 0xED61, 0xED5D, 0xED5F, 0, 0xC0ED, 0, 0, 0, /* 0xF0 */ + 0xC277, 0xEFFB, 0, 0xC274, 0xC275, 0xEFFD, 0xC276, 0xEFFA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_72[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEFF9, 0xF26C, 0xEFFC, 0, 0xF26D, 0xC37A, 0xF26B, /* 0x00 */ + 0, 0, 0xF26A, 0, 0xF269, 0xC37B, 0, 0, /* 0x00 */ + 0xC46C, 0, 0, 0xF46A, 0xF46B, 0, 0, 0, /* 0x10 */ + 0, 0xF5DC, 0xF5DB, 0xC4EA, 0, 0xF5DA, 0xF6EC, 0xF6ED, /* 0x10 */ + 0, 0, 0xF7E6, 0xF8B1, 0, 0, 0xF8F6, 0xF9BC, /* 0x20 */ + 0xC679, 0xF9C6, 0xA4F6, 0, 0xAAA6, 0xAAA7, 0, 0, /* 0x20 */ + 0xACB8, 0, 0, 0, 0, 0xC0EF, 0xA4F7, 0, /* 0x30 */ + 0xAAA8, 0xAF52, 0xB7DD, 0xA4F8, 0, 0xB26E, 0xBAB8, 0xC962, /* 0x30 */ + 0, 0xCFB7, 0xD27D, 0, 0xE2C5, 0, 0xC0F0, 0xA4F9, /* 0x40 */ + 0xAAA9, 0xCFB8, 0xCFB9, 0xDA66, 0xB550, 0, 0, 0xDEA4, /* 0x40 */ + 0, 0, 0xB7DE, 0xE2C6, 0, 0, 0xBCF8, 0, /* 0x50 */ + 0xC37C, 0xA4FA, 0xDA67, 0xA4FB, 0, 0xA6C9, 0xCA42, 0xA6C8, /* 0x50 */ + 0xA865, 0xA864, 0xA863, 0xCB60, 0, 0, 0, 0xAAAA, /* 0x60 */ + 0, 0xAAAB, 0xCD5B, 0, 0xCFBA, 0, 0xCFBD, 0xACBA, /* 0x60 */ + 0xCFBB, 0, 0xACB9, 0xCFBC, 0xACBB, 0, 0xD2A2, 0xD2A1, /* 0x70 */ + 0xD27E, 0xAF53, 0, 0xD65D, 0xD65E, 0xB26F, 0xD65C, 0xD65F, /* 0x70 */ + 0xB552, 0xB270, 0, 0, 0xB551, 0xDA6B, 0xDA6A, 0, /* 0x80 */ + 0xDA68, 0xDA69, 0, 0xDA6C, 0xDEA6, 0xDEA5, 0xDEA9, 0, /* 0x80 */ + 0xDEA8, 0xDEA7, 0xBAB9, 0xE2C9, 0, 0xE2C8, 0xBABA, 0xE2C7, /* 0x90 */ + 0xE673, 0, 0xE674, 0xBCF9, 0, 0xEA59, 0xEA5A, 0, /* 0x90 */ + 0, 0xF272, 0xC37D, 0xF271, 0xF270, 0xF26E, 0xF26F, 0xC4EB, /* 0xA0 */ + 0xF46C, 0xF6EE, 0xF8F7, 0, 0xA4FC, 0, 0xC9A5, 0xA5C7, /* 0xA0 */ + 0xC9A6, 0, 0, 0, 0xCA43, 0xCA44, 0, 0, /* 0xB0 */ + 0, 0, 0xCB66, 0, 0, 0xCB62, 0, 0xCB61, /* 0xB0 */ + 0xAAAC, 0xCB65, 0xA867, 0xCB63, 0xA866, 0xCB67, 0xCB64, 0, /* 0xC0 */ + 0, 0xCD5F, 0xCFBE, 0xCD5D, 0xCD64, 0, 0xAAAD, 0, /* 0xC0 */ + 0xAAB0, 0xCD65, 0xCD61, 0, 0xCD62, 0, 0xCD5C, 0xAAAF, /* 0xD0 */ + 0xCD5E, 0xAAAE, 0xCD63, 0, 0xCD60, 0, 0, 0xCFC2, /* 0xD0 */ + 0xACBD, 0xACBE, 0, 0xCFC5, 0xCFBF, 0, 0xCFC4, 0, /* 0xE0 */ + 0xCFC0, 0xACBC, 0xCFC3, 0xCFC1, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0xD2A8, 0xD2A5, 0, 0xD2A7, 0xAF58, /* 0xF0 */ + 0xAF57, 0xAF55, 0xD2A4, 0xD2A9, 0xAF54, 0xAF56, 0xD2A6, 0xD667 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_73[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD2A3, 0xD2AA, 0, 0, 0, 0, 0, 0xD662, /* 0x00 */ + 0xD666, 0, 0xD665, 0xDA6E, 0xDA79, 0, 0, 0xD668, /* 0x00 */ + 0, 0xD663, 0xDA6D, 0xB274, 0, 0, 0xB273, 0xD661, /* 0x10 */ + 0xD664, 0xB275, 0, 0xB272, 0xB271, 0xD660, 0xD669, 0, /* 0x10 */ + 0, 0, 0xDA70, 0xDA77, 0, 0xB554, 0xDA76, 0xDA73, /* 0x20 */ + 0, 0xB556, 0, 0, 0, 0xDA75, 0, 0, /* 0x20 */ + 0xDA6F, 0xDA71, 0xDA74, 0xDA72, 0xB555, 0xDA78, 0xB553, 0xB7DF, /* 0x30 */ + 0, 0, 0xDEAD, 0xDEAC, 0xDEAA, 0, 0xB7E2, 0xB7E1, /* 0x30 */ + 0xDEAE, 0, 0xDEAB, 0xE2CA, 0xBABB, 0xB7E0, 0, 0, /* 0x40 */ + 0, 0xDEB0, 0xDEAF, 0, 0xE2CD, 0xE2CB, 0xBCFA, 0, /* 0x40 */ + 0xBABC, 0xE2CC, 0xE676, 0, 0, 0, 0, 0xBCFB, /* 0x50 */ + 0xE675, 0xE67E, 0xE67D, 0xE67B, 0, 0xE67A, 0xE677, 0xE678, /* 0x50 */ + 0xE679, 0xE67C, 0xE6A1, 0, 0, 0xEA5F, 0xEA5C, 0xEA5D, /* 0x60 */ + 0xBF57, 0xEA5B, 0xEA61, 0xEA60, 0xEA5E, 0, 0xED64, 0xED65, /* 0x60 */ + 0xC0F1, 0, 0xC0F2, 0xED63, 0, 0xC279, 0xEFFE, 0xC278, /* 0x70 */ + 0xC37E, 0, 0xC3A1, 0xC46D, 0xF46E, 0xF46D, 0xF5DD, 0xF6EF, /* 0x70 */ + 0xC57A, 0xF7E8, 0xF7E7, 0xF7E9, 0xA5C8, 0xCFC6, 0xAF59, 0xB276, /* 0x80 */ + 0xD66A, 0xA5C9, 0xC9A7, 0xA4FD, 0, 0, 0xCA45, 0, /* 0x80 */ + 0, 0, 0xCB6C, 0xCB6A, 0xCB6B, 0xCB68, 0xA868, 0xCB69, /* 0x90 */ + 0, 0, 0, 0, 0, 0xCD6D, 0, 0xAAB3, /* 0x90 */ + 0xCD6B, 0xCD67, 0xCD6A, 0, 0xCD66, 0xAAB5, 0xCD69, 0, /* 0xA0 */ + 0xAAB2, 0xAAB1, 0, 0xAAB4, 0xCD6C, 0xCD68, 0, 0, /* 0xA0 */ + 0, 0, 0xACC2, 0xACC5, 0xCFCE, 0xCFCD, 0xCFCC, 0xACBF, /* 0xB0 */ + 0xCFD5, 0xCFCB, 0, 0xACC1, 0xD2AF, 0, 0xCFD2, 0xCFD0, /* 0xB0 */ + 0xACC4, 0, 0xCFC8, 0xCFD3, 0, 0xCFCA, 0xCFD4, 0xCFD1, /* 0xC0 */ + 0xCFC9, 0, 0xACC0, 0xCFD6, 0xCFC7, 0xACC3, 0, 0, /* 0xC0 */ + 0, 0, 0xD2B4, 0xD2AB, 0xD2B6, 0, 0xD2AE, 0xD2B9, /* 0xD0 */ + 0xD2BA, 0xD2AC, 0xD2B8, 0xD2B5, 0xD2B3, 0xD2B7, 0xAF5F, 0, /* 0xD0 */ + 0xAF5D, 0, 0, 0xD2B1, 0, 0xD2AD, 0, 0xD2B0, /* 0xE0 */ + 0xD2BB, 0xD2B2, 0xAF5E, 0xCFCF, 0, 0xAF5A, 0xAF5C, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xD678, 0xD66D, 0xD66B, 0, /* 0xF0 */ + 0xD66C, 0, 0xD673, 0, 0xD674, 0xD670, 0xB27B, 0xD675 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_74[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD672, 0xD66F, 0, 0xB279, 0xD66E, 0xB277, 0xB27A, 0xD671, /* 0x00 */ + 0xD679, 0xAF5B, 0xB278, 0xD677, 0xD676, 0xB27C, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xDA7E, 0, /* 0x10 */ + 0, 0, 0xDAA1, 0xB560, 0, 0xDAA7, 0, 0, /* 0x10 */ + 0xDAA9, 0xDAA2, 0xB55A, 0xDAA6, 0xDAA5, 0xB55B, 0xB561, 0, /* 0x20 */ + 0xB562, 0xDAA8, 0xB558, 0xDA7D, 0xDA7B, 0xDAA3, 0xDA7A, 0xB55F, /* 0x20 */ + 0xDA7C, 0xDAA4, 0xDAAA, 0xB559, 0xB55E, 0xB55C, 0xB55D, 0, /* 0x30 */ + 0, 0, 0xB557, 0, 0, 0, 0, 0xB7E9, /* 0x30 */ + 0xDEB7, 0xB7E8, 0xDEBB, 0, 0xDEB1, 0, 0xDEBC, 0, /* 0x40 */ + 0, 0, 0xDEB2, 0xDEB3, 0, 0xDEBD, 0xDEBA, 0xDEB8, /* 0x40 */ + 0xDEB9, 0xDEB5, 0xDEB4, 0, 0xDEBE, 0xB7E5, 0, 0xDEB6, /* 0x50 */ + 0, 0xB7EA, 0xB7E4, 0xB7EB, 0xB7EC, 0, 0xB7E7, 0xB7E6, /* 0x50 */ + 0, 0, 0xE2CE, 0xBABE, 0xBABD, 0, 0, 0xE2D3, /* 0x60 */ + 0, 0xBCFC, 0xBABF, 0, 0, 0xBAC1, 0xE2D4, 0xB7E3, /* 0x60 */ + 0xBAC0, 0xE2D0, 0xE2D2, 0xE2CF, 0, 0xE2D1, 0, 0, /* 0x70 */ + 0, 0xE6AB, 0, 0, 0xE6AA, 0xE6A7, 0xBD40, 0xEA62, /* 0x70 */ + 0xBD41, 0xE6A6, 0, 0xBCFE, 0, 0xE6A8, 0xE6A5, 0xE6A2, /* 0x80 */ + 0xE6A9, 0xE6A3, 0xE6A4, 0xBCFD, 0, 0, 0, 0, /* 0x80 */ + 0xED69, 0, 0xEA66, 0, 0xEA65, 0xEA67, 0, 0xED66, /* 0x90 */ + 0xBF5A, 0, 0xEA63, 0, 0xBF58, 0, 0xBF5C, 0xBF5B, /* 0x90 */ + 0xEA64, 0xEA68, 0, 0xBF59, 0, 0xED6D, 0xC0F5, 0xC27A, /* 0xA0 */ + 0xC0F6, 0xC0F3, 0xED6A, 0xED68, 0, 0xED6B, 0, 0xED6E, /* 0xA0 */ + 0xC0F4, 0xED6C, 0xED67, 0, 0, 0xF042, 0xF045, 0xF275, /* 0xB0 */ + 0xF040, 0, 0xF46F, 0xF046, 0, 0xC3A2, 0xF044, 0xC27B, /* 0xB0 */ + 0xF041, 0xF043, 0xF047, 0xF276, 0, 0xF274, 0, 0, /* 0xC0 */ + 0, 0, 0xC3A3, 0xF273, 0, 0, 0, 0xC46E, /* 0xC0 */ + 0, 0, 0, 0, 0xC4ED, 0xF6F1, 0xC4EC, 0xF6F3, /* 0xD0 */ + 0xF6F0, 0xF6F2, 0xC5D0, 0xF8B2, 0xA5CA, 0xCD6E, 0xD2BC, 0xD2BD, /* 0xD0 */ + 0xB27D, 0xDEBF, 0xBF5D, 0xC3A4, 0xC57B, 0xF8B3, 0xA5CB, 0, /* 0xE0 */ + 0xCD6F, 0xA260, 0, 0, 0xCFD7, 0, 0xCFD8, 0, /* 0xE0 */ + 0, 0, 0, 0, 0xD2BE, 0xD2BF, 0xB27E, 0xB2A1, /* 0xF0 */ + 0, 0, 0, 0xDAAB, 0, 0xDEC2, 0xDEC1, 0xDEC0 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_75[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE2D5, 0, 0xE2D6, 0xE2D7, 0xBAC2, 0, 0, 0xE6AD, /* 0x00 */ + 0xE6AC, 0, 0, 0xEA69, 0xBF5E, 0xBF5F, 0, 0xED72, /* 0x00 */ + 0xED6F, 0xED70, 0xED71, 0xF049, 0xF048, 0xC27C, 0xF277, 0xF5DE, /* 0x10 */ + 0xA5CC, 0, 0xACC6, 0, 0xB2A2, 0xDEC3, 0, 0xA5CD, /* 0x10 */ + 0, 0xD2C0, 0xB2A3, 0, 0, 0xB563, 0xB564, 0, /* 0x20 */ + 0xA5CE, 0xA5CF, 0xCA46, 0xA86A, 0xA869, 0xACC7, 0xCFD9, 0xDAAC, /* 0x20 */ + 0xA5D0, 0xA5D1, 0xA5D2, 0xA5D3, 0, 0, 0, 0xA86B, /* 0x30 */ + 0xA86C, 0xCB6E, 0xCB6D, 0, 0, 0xAAB6, 0xCD72, 0xCD70, /* 0x30 */ + 0xCD71, 0, 0, 0, 0, 0, 0, 0xCFDA, /* 0x40 */ + 0xCFDB, 0, 0, 0xACCB, 0xACC9, 0, 0xACCA, 0xACC8, /* 0x40 */ + 0, 0, 0, 0, 0xAF60, 0, 0, 0, /* 0x50 */ + 0, 0xAF64, 0xAF63, 0xD2C1, 0xAF62, 0xAF61, 0, 0xD2C2, /* 0x50 */ + 0, 0, 0xB2A6, 0xD67B, 0xD67A, 0xB2A4, 0xB2A5, 0, /* 0x60 */ + 0, 0, 0xB566, 0xB565, 0xDAAE, 0, 0, 0xDAAD, /* 0x60 */ + 0xB2A7, 0, 0, 0, 0, 0, 0xB7ED, 0xDEC5, /* 0x70 */ + 0xB7EE, 0xDEC4, 0, 0, 0, 0xE2D8, 0xE6AE, 0xBD42, /* 0x70 */ + 0xEA6A, 0, 0, 0, 0xED73, 0, 0xC3A6, 0xC3A5, /* 0x80 */ + 0, 0, 0xC57C, 0xA5D4, 0xCD73, 0, 0, 0xB2A8, /* 0x80 */ + 0xE2D9, 0xBAC3, 0, 0, 0xCB6F, 0xCB70, 0, 0, /* 0x90 */ + 0xCD74, 0xAAB8, 0xAAB9, 0, 0, 0xAAB7, 0, 0, /* 0x90 */ + 0, 0, 0xACCF, 0xACD0, 0xACCD, 0xACCE, 0, 0xCFDC, /* 0xA0 */ + 0, 0, 0xCFDD, 0xACCC, 0, 0, 0, 0, /* 0xA0 */ + 0xD2C3, 0, 0xAF68, 0xAF69, 0, 0xB2AB, 0xD2C9, 0, /* 0xB0 */ + 0xAF6E, 0xAF6C, 0xD2CA, 0xD2C5, 0xAF6B, 0xAF6A, 0xAF65, 0xD2C8, /* 0xB0 */ + 0xD2C7, 0xD2C4, 0xAF6D, 0, 0xD2C6, 0xAF66, 0, 0xAF67, /* 0xC0 */ + 0, 0, 0xB2AC, 0xD6A1, 0xD6A2, 0xB2AD, 0xD67C, 0xD67E, /* 0xC0 */ + 0xD6A4, 0xD6A3, 0xD67D, 0, 0xB2A9, 0xB2AA, 0, 0xDAB6, /* 0xD0 */ + 0xB56B, 0xB56A, 0xDAB0, 0xB568, 0, 0xDAB3, 0xB56C, 0xDAB4, /* 0xD0 */ + 0xB56D, 0xDAB1, 0xB567, 0xB569, 0xDAB5, 0, 0xDAB2, 0xDAAF, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xDED2, 0, 0xDEC7, /* 0xE0 */ + 0xB7F0, 0xB7F3, 0xB7F2, 0xB7F7, 0xB7F6, 0xDED3, 0xDED1, 0xDECA, /* 0xF0 */ + 0xDECE, 0xDECD, 0xB7F4, 0xDED0, 0xDECC, 0xDED4, 0xDECB, 0xB7F5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_76[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB7EF, 0xB7F1, 0, 0xDEC9, 0, 0, 0, 0, /* 0x00 */ + 0xE2DB, 0xBAC7, 0xE2DF, 0xBAC6, 0xE2DC, 0xBAC5, 0, 0xDEC8, /* 0x00 */ + 0xDECF, 0xE2DE, 0, 0xBAC8, 0xE2E0, 0xE2DD, 0xE2DA, 0, /* 0x10 */ + 0, 0xE6B1, 0xE6B5, 0xE6B7, 0xE6B3, 0xE6B2, 0xE6B0, 0xBD45, /* 0x10 */ + 0xBD43, 0xBD48, 0xBD49, 0xE6B4, 0xBD46, 0xE6AF, 0xBD47, 0xBAC4, /* 0x20 */ + 0xE6B6, 0xBD44, 0, 0, 0, 0xEA6C, 0, 0xEA6B, /* 0x20 */ + 0xEA73, 0xEA6D, 0xEA72, 0xEA6F, 0xBF60, 0xEA71, 0, 0, /* 0x30 */ + 0xBF61, 0, 0xBF62, 0, 0xEA70, 0xEA6E, 0, 0, /* 0x30 */ + 0, 0, 0xC0F8, 0xED74, 0, 0, 0xC0F7, 0xED77, /* 0x40 */ + 0xED75, 0xED76, 0, 0, 0xC0F9, 0, 0, 0, /* 0x40 */ + 0xF04D, 0, 0xC2A1, 0xF04E, 0, 0, 0xC27D, 0xF04F, /* 0x50 */ + 0xC27E, 0xF04C, 0xF050, 0, 0xF04A, 0, 0, 0xC3A7, /* 0x50 */ + 0xF278, 0xC3A8, 0xC46F, 0, 0xF04B, 0xC470, 0, 0, /* 0x60 */ + 0, 0xC4EE, 0xF5DF, 0, 0xC57E, 0xF6F4, 0xC57D, 0, /* 0x60 */ + 0xF7EA, 0xC5F5, 0xC5F6, 0, 0, 0xF9CC, 0, 0, /* 0x70 */ + 0xACD1, 0xCFDE, 0, 0xB56E, 0xB56F, 0xA5D5, 0xA6CA, 0xCA47, /* 0x70 */ + 0, 0xCB71, 0xA86D, 0, 0xAABA, 0, 0xACD2, 0xACD3, /* 0x80 */ + 0xACD4, 0xD6A6, 0xD2CB, 0xAF6F, 0, 0, 0xB2AE, 0xD6A5, /* 0x80 */ + 0, 0, 0xDAB8, 0xB571, 0, 0xDAB7, 0xB570, 0, /* 0x90 */ + 0, 0xDED5, 0xBD4A, 0xE6BB, 0xE6B8, 0xE6B9, 0xE6BA, 0, /* 0x90 */ + 0, 0, 0, 0, 0xED78, 0, 0xF051, 0, /* 0xA0 */ + 0, 0, 0xF471, 0xF470, 0, 0xF6F5, 0xA5D6, 0xCD75, /* 0xA0 */ + 0xAF70, 0, 0, 0, 0xB572, 0xDED6, 0, 0, /* 0xB0 */ + 0xE2E1, 0, 0xBD4B, 0xEA74, 0, 0xF052, 0xF472, 0xA5D7, /* 0xB0 */ + 0, 0, 0xAABB, 0xACD7, 0xCFDF, 0xACD8, 0xACD6, 0, /* 0xC0 */ + 0xACD5, 0xD2CC, 0xAF71, 0, 0, 0xAF72, 0xAF73, 0, /* 0xC0 */ + 0, 0, 0xB2B0, 0xD6A7, 0xB2AF, 0, 0, 0, /* 0xD0 */ + 0, 0, 0xDAB9, 0xB2B1, 0xB573, 0xDED7, 0xB7F8, 0xB7F9, /* 0xD0 */ + 0, 0xBAC9, 0, 0xBACA, 0xBD4C, 0xBF64, 0xEA75, 0xBF63, /* 0xE0 */ + 0, 0xED79, 0xC0FA, 0, 0xF053, 0xF473, 0xA5D8, 0xA86E, /* 0xE0 */ + 0xCD78, 0xCD77, 0xAABC, 0xCD76, 0xAABD, 0xCD79, 0, 0xCFE5, /* 0xF0 */ + 0xACDB, 0xACDA, 0xCFE7, 0xCFE6, 0xACDF, 0, 0xACDE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_77[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xACD9, 0, 0xCFE1, 0xCFE2, 0xCFE3, 0, 0xACE0, /* 0x00 */ + 0xCFE0, 0xACDC, 0xCFE4, 0xACDD, 0, 0, 0, 0, /* 0x00 */ + 0xD2CF, 0xD2D3, 0xD2D1, 0xD2D0, 0, 0xD2D4, 0, 0, /* 0x10 */ + 0, 0xD2D5, 0xD2D6, 0xD2CE, 0, 0xD2CD, 0, 0xAF75, /* 0x10 */ + 0xAF76, 0, 0xD2D7, 0xD2D2, 0, 0xD6B0, 0, 0xD2D8, /* 0x20 */ + 0xAF77, 0xAF74, 0, 0, 0, 0xD6AA, 0, 0xD6A9, /* 0x20 */ + 0, 0xD6AB, 0xD6AC, 0xD6AE, 0xD6AD, 0xD6B2, 0xB2B5, 0xB2B2, /* 0x30 */ + 0xB2B6, 0xD6A8, 0xB2B7, 0xD6B1, 0xB2B4, 0xD6AF, 0xB2B3, 0, /* 0x30 */ + 0, 0, 0, 0, 0xDABC, 0xDABE, 0xDABA, 0xDABB, /* 0x40 */ + 0, 0, 0xDABF, 0xDAC1, 0xDAC2, 0xDABD, 0xDAC0, 0xB574, /* 0x40 */ + 0, 0, 0xDEDB, 0, 0xDEE0, 0xDED8, 0xDEDC, 0, /* 0x50 */ + 0, 0xDEE1, 0xDEDD, 0xB7FA, 0xB843, 0, 0xB7FD, 0xDED9, /* 0x50 */ + 0xDEDA, 0xBACE, 0xB846, 0xB7FE, 0, 0xB844, 0xB7FC, 0xDEDF, /* 0x60 */ + 0xB845, 0xDEDE, 0xB841, 0xB7FB, 0xB842, 0xDEE2, 0xE2E6, 0xE2E8, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB840, 0, 0, 0xE2E3, 0xBACC, 0xE2E9, 0xBACD, /* 0x70 */ + 0xE2E7, 0xE2E2, 0xE2E5, 0xE2EA, 0xBACB, 0xE2E4, 0, 0xBD4E, /* 0x80 */ + 0xE6BF, 0xE6BE, 0, 0xBD51, 0xBD4F, 0xE6BC, 0xBD4D, 0xE6BD, /* 0x80 */ + 0, 0xBD50, 0, 0, 0, 0xEA7D, 0, 0xEAA1, /* 0x90 */ + 0, 0xEA7E, 0xEA76, 0xEA7A, 0xEA79, 0xEA77, 0xBF66, 0xBF67, /* 0x90 */ + 0xBF65, 0xEA78, 0xEA7B, 0xEA7C, 0, 0xBF68, 0, 0xC140, /* 0xA0 */ + 0xEDA3, 0, 0xC0FC, 0xED7B, 0xC0FE, 0xC141, 0, 0, /* 0xA0 */ + 0xC0FD, 0xEDA2, 0xED7C, 0xC0FB, 0xEDA1, 0xED7A, 0xED7E, 0xED7D, /* 0xB0 */ + 0, 0, 0xF055, 0xC2A4, 0xC2A5, 0xC2A2, 0, 0xC2A3, /* 0xB0 */ + 0, 0, 0xF054, 0, 0xF27B, 0, 0, 0xC3A9, /* 0xC0 */ + 0, 0xF279, 0xF27A, 0, 0xF474, 0xF477, 0xF475, 0xF476, /* 0xC0 */ + 0xF5E0, 0, 0, 0xC4EF, 0xF7EB, 0xF8B4, 0, 0xC5F7, /* 0xD0 */ + 0xF8F8, 0xF8F9, 0xC666, 0xA5D9, 0xACE1, 0, 0xDAC3, 0, /* 0xD0 */ + 0xDEE3, 0, 0xA5DA, 0xA86F, 0, 0xAABE, 0, 0xCFE8, /* 0xE0 */ + 0xCFE9, 0xAF78, 0, 0, 0xDAC4, 0xB575, 0xB847, 0xC142, /* 0xE0 */ + 0xEDA4, 0xF27C, 0xF478, 0xA5DB, 0, 0, 0, 0xCDA1, /* 0xF0 */ + 0xCD7A, 0xCD7C, 0xCD7E, 0xCD7D, 0xCD7B, 0xAABF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_78[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xACE2, 0xCFF2, 0, 0xCFED, 0xCFEA, 0, /* 0x00 */ + 0, 0xCFF1, 0, 0, 0xACE4, 0xACE5, 0xCFF0, 0xCFEF, /* 0x00 */ + 0xCFEE, 0xCFEB, 0xCFEC, 0xCFF3, 0xACE3, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0xAF7C, 0, 0xAFA4, /* 0x10 */ + 0xAFA3, 0xD2E1, 0xD2DB, 0xD2D9, 0, 0xAFA1, 0xD6B9, 0xAF7A, /* 0x20 */ + 0xD2DE, 0xD2E2, 0xD2E4, 0xD2E0, 0xD2DA, 0xAFA2, 0xD2DF, 0xD2DD, /* 0x20 */ + 0xAF79, 0xD2E5, 0xAFA5, 0xD2E3, 0xAF7D, 0xD2DC, 0, 0xAF7E, /* 0x30 */ + 0xAF7B, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xB2B9, 0, 0xD6BA, 0, 0, /* 0x40 */ + 0xD6B3, 0xD6B5, 0xD6B7, 0, 0xD6B8, 0xD6B6, 0xB2BA, 0, /* 0x40 */ + 0xD6BB, 0, 0xD6B4, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xDAC8, 0xB576, 0xDAD0, 0, /* 0x50 */ + 0xDAC5, 0, 0xDAD1, 0, 0xDAC6, 0xDAC7, 0, 0, /* 0x60 */ + 0xDACF, 0xDACE, 0xDACB, 0xB2B8, 0xB577, 0xDAC9, 0xDACC, 0xB578, /* 0x60 */ + 0xDACD, 0xDACA, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0xDEEE, 0, 0xDEF2, 0xB84E, 0, 0xE2F0, 0xB851, /* 0x70 */ + 0xDEF0, 0xF9D6, 0, 0xDEED, 0xDEE8, 0xDEEA, 0xDEEB, 0xDEE4, /* 0x80 */ + 0, 0xB84D, 0, 0, 0xB84C, 0, 0xB848, 0xDEE7, /* 0x80 */ + 0, 0xB84F, 0, 0xB850, 0xDEE6, 0xDEE9, 0xDEF1, 0xB84A, /* 0x90 */ + 0xB84B, 0xDEEF, 0xDEE5, 0, 0, 0, 0xE2F2, 0xBAD0, /* 0x90 */ + 0xE2F4, 0xDEEC, 0xE2F6, 0xBAD4, 0xE2F7, 0xE2F3, 0, 0xBAD1, /* 0xA0 */ + 0xE2EF, 0xBAD3, 0xE2EC, 0xE2F1, 0xE2F5, 0xE2EE, 0, 0, /* 0xA0 */ + 0xB849, 0, 0xE2EB, 0xBAD2, 0xE2ED, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xBD54, 0xE6C1, 0xBD58, 0, 0xBD56, 0, /* 0xB0 */ + 0, 0xBACF, 0, 0xE6C8, 0xE6C9, 0xBD53, 0, 0, /* 0xC0 */ + 0xE6C7, 0xE6CA, 0xBD55, 0xBD52, 0xE6C3, 0xE6C0, 0xE6C5, 0xE6C2, /* 0xC0 */ + 0xBD59, 0xE6C4, 0, 0, 0xE6C6, 0xBD57, 0, 0, /* 0xD0 */ + 0, 0, 0xBF6A, 0xEAA8, 0, 0xEAA2, 0xEAA6, 0xEAAC, /* 0xD0 */ + 0xEAAD, 0xEAA9, 0xEAAA, 0xEAA7, 0, 0xEAA4, 0, 0xBF6C, /* 0xE0 */ + 0xBF69, 0xEAA3, 0xEAA5, 0, 0xBF6B, 0xEAAB, 0, 0xC146, /* 0xE0 */ + 0, 0, 0xEDAA, 0xEDA5, 0xC145, 0, 0, 0xC143, /* 0xF0 */ + 0, 0xEDAC, 0xC144, 0xEDA8, 0xEDA9, 0xEDA6, 0xEDAD, 0xF056 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_79[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC147, 0xEDA7, 0, 0xEDAE, 0xEDAB, 0, 0, /* 0x00 */ + 0, 0xF05A, 0, 0, 0xF057, 0, 0xC2A6, 0, /* 0x00 */ + 0xF05B, 0xF05D, 0xF05C, 0xF058, 0xF059, 0, 0, 0xF2A3, /* 0x10 */ + 0, 0xC3AA, 0, 0xF27E, 0xF2A2, 0xF27D, 0xF2A4, 0, /* 0x10 */ + 0, 0xF2A1, 0, 0xF47A, 0xF47D, 0xF479, 0xC471, 0xF47B, /* 0x20 */ + 0xF47C, 0xF47E, 0xC472, 0xC474, 0xC473, 0xF5E1, 0, 0xF5E3, /* 0x20 */ + 0, 0xF5E2, 0, 0, 0, 0xF6F6, 0, 0, /* 0x30 */ + 0xF8B5, 0xF8FA, 0xA5DC, 0, 0, 0xCB72, 0xAAC0, 0xCDA3, /* 0x30 */ + 0xAAC1, 0xAAC2, 0xCDA2, 0, 0xCFF8, 0xCFF7, 0xACE6, 0xACE9, /* 0x40 */ + 0xACE8, 0xACE7, 0xCFF4, 0xCFF6, 0xCFF5, 0, 0, 0xD2E8, /* 0x40 */ + 0xAFA7, 0xD2EC, 0xD2EB, 0xD2EA, 0xD2E6, 0xAFA6, 0xAFAA, 0xAFAD, /* 0x50 */ + 0, 0, 0xAFAE, 0xD2E7, 0xD2E9, 0xAFAC, 0xAFAB, 0xAFA9, /* 0x50 */ + 0xAFA8, 0xD6C2, 0, 0xD6C0, 0xD6BC, 0xB2BB, 0, 0xD6BD, /* 0x60 */ + 0xB2BC, 0xD6BE, 0xD6BF, 0xD6C1, 0, 0xB2BD, 0, 0, /* 0x60 */ + 0xDAD5, 0, 0xDAD4, 0xDAD3, 0xDAD2, 0, 0, 0, /* 0x70 */ + 0, 0xDEF6, 0xB852, 0, 0xDEF3, 0xDEF5, 0, 0xB853, /* 0x70 */ + 0, 0xB854, 0xDEF4, 0, 0, 0, 0, 0, /* 0x80 */ + 0xE341, 0, 0xE2F9, 0xE2FA, 0, 0xBAD7, 0xBAD5, 0xBAD6, /* 0x80 */ + 0xE343, 0, 0xE342, 0xE2FE, 0xE2FD, 0xE2FC, 0xE2FB, 0xE340, /* 0x90 */ + 0xE2F8, 0, 0xE6CB, 0xE6D0, 0xE6CE, 0, 0, 0, /* 0x90 */ + 0xE6CD, 0xE6CC, 0xE6CF, 0, 0xEAAE, 0, 0xBF6D, 0xC148, /* 0xA0 */ + 0xEDB0, 0, 0xC149, 0xEDAF, 0xF05F, 0xF05E, 0xC2A7, 0, /* 0xA0 */ + 0xF2A5, 0xC3AB, 0xF4A1, 0xC5A1, 0xF6F7, 0, 0xF8B7, 0xF8B6, /* 0xB0 */ + 0xC9A8, 0xACEA, 0xACEB, 0xD6C3, 0, 0xB856, 0xA5DD, 0xA872, /* 0xB0 */ + 0xA871, 0xA870, 0, 0, 0, 0xCDA4, 0, 0, /* 0xC0 */ + 0xAAC4, 0xAAC3, 0, 0xACEE, 0, 0xCFFA, 0xCFFD, 0xCFFB, /* 0xC0 */ + 0, 0xACEC, 0xACED, 0, 0, 0xCFF9, 0xCFFC, 0, /* 0xD0 */ + 0xAFB5, 0, 0, 0, 0xD2F3, 0xD2F5, 0xD2F4, 0xAFB2, /* 0xD0 */ + 0xD2EF, 0, 0, 0xAFB0, 0xAFAF, 0, 0xAFB3, 0xAFB1, /* 0xE0 */ + 0, 0xAFB4, 0xD2F2, 0xD2ED, 0xD2EE, 0xD2F1, 0xD2F0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xD6C6, 0xD6C7, /* 0xF0 */ + 0xD6C5, 0, 0xD6C4, 0xB2BE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_7A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB57D, 0, 0xDAD6, 0xDAD8, 0xDADA, 0xB57C, 0, 0, /* 0x00 */ + 0xB57A, 0, 0xDAD7, 0xB57B, 0xDAD9, 0xB579, 0, 0, /* 0x00 */ + 0xDF41, 0xDEF7, 0xDEFA, 0xDEFE, 0xB85A, 0xDEFC, 0, 0xDEFB, /* 0x10 */ + 0xDEF8, 0xDEF9, 0xB858, 0xDF40, 0xB857, 0, 0xB85C, 0xB85B, /* 0x10 */ + 0xB859, 0, 0xDEFD, 0, 0, 0, 0xE349, 0, /* 0x20 */ + 0xE348, 0, 0, 0xE344, 0, 0, 0xBAD8, 0xE347, /* 0x20 */ + 0xE346, 0xBAD9, 0, 0, 0, 0, 0, 0xBD5E, /* 0x30 */ + 0, 0xE6D2, 0, 0xBD5F, 0xBD5B, 0xBD5D, 0, 0xBD5A, /* 0x30 */ + 0xBD5C, 0, 0, 0, 0xEAAF, 0, 0xBF70, 0xEAB1, /* 0x40 */ + 0xEAB0, 0, 0xE345, 0xBF72, 0xBF71, 0xBF6E, 0xBF6F, 0, /* 0x40 */ + 0, 0, 0, 0, 0xEDB5, 0, 0xEDB3, 0xC14A, /* 0x50 */ + 0xEDB4, 0, 0xEDB6, 0xEDB2, 0xEDB1, 0, 0, 0xF060, /* 0x50 */ + 0xC2AA, 0xC2A8, 0xC2A9, 0, 0, 0, 0, 0xF2A6, /* 0x60 */ + 0xF2A7, 0xC3AD, 0, 0xC3AC, 0xF4A3, 0xF4A4, 0xF4A2, 0, /* 0x60 */ + 0xF6F8, 0xF6F9, 0, 0, 0xA5DE, 0xCA48, 0xA873, 0, /* 0x70 */ + 0xCDA5, 0xAAC6, 0xAAC5, 0xCDA6, 0, 0, 0xD040, 0xACEF, /* 0x70 */ + 0xCFFE, 0xACF0, 0, 0, 0xAFB6, 0xD2F8, 0xD2F6, 0xD2FC, /* 0x80 */ + 0xAFB7, 0xD2F7, 0xD2FB, 0xD2F9, 0xD2FA, 0, 0, 0xD6C8, /* 0x80 */ + 0xD6CA, 0, 0xB2BF, 0, 0xD6C9, 0xB2C0, 0xB5A2, 0xB5A1, /* 0x90 */ + 0xB57E, 0xDADB, 0, 0, 0, 0, 0xDF44, 0xB85D, /* 0x90 */ + 0xB85E, 0, 0xDF43, 0xDF42, 0, 0, 0, 0, /* 0xA0 */ + 0xE34A, 0xBADB, 0xBADA, 0xE34B, 0xE34C, 0, 0xBD61, 0xBD60, /* 0xA0 */ + 0, 0xEAB5, 0xE6D3, 0xE6D5, 0xE6D4, 0xEAB4, 0xEAB2, 0xEAB6, /* 0xB0 */ + 0xEAB3, 0, 0xBF73, 0, 0, 0, 0xEDB7, 0xC14B, /* 0xB0 */ + 0xEDB8, 0xEDB9, 0, 0, 0xC2AB, 0xC2AC, 0, 0xC475, /* 0xC0 */ + 0, 0, 0xC5D1, 0xA5DF, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xD041, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD2FD, 0xAFB8, 0, 0, 0, 0, 0, 0xB3BA, /* 0xD0 */ + 0xB3B9, 0, 0, 0xB5A4, 0xDADD, 0xB5A3, 0xDADC, 0, /* 0xE0 */ + 0, 0, 0, 0xDF45, 0, 0xBADC, 0xE34D, 0xBADD, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0xC476, 0xF4A5, /* 0xF0 */ + 0, 0xA6CB, 0xAAC7, 0xCDA7, 0, 0xACF2, 0, 0xACF1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_7B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD042, 0xD043, 0, 0, 0xD340, 0xD342, 0xAFB9, 0, /* 0x00 */ + 0xD344, 0xD347, 0xD345, 0, 0, 0, 0xD346, 0xD343, /* 0x00 */ + 0xD2FE, 0xAFBA, 0xD348, 0xD341, 0, 0, 0, 0, /* 0x10 */ + 0xD6D3, 0xB2C6, 0xD6DC, 0xB2C3, 0, 0xD6D5, 0xB2C7, 0, /* 0x10 */ + 0xB2C1, 0, 0xD6D0, 0xD6DD, 0xD6D1, 0xD6CE, 0xB2C5, 0, /* 0x20 */ + 0xB2C2, 0, 0xD6D4, 0xD6D7, 0xB2C4, 0xD6D8, 0xB2C8, 0xD6D9, /* 0x20 */ + 0xD6CF, 0xD6D6, 0xD6DA, 0xD6D2, 0xD6CD, 0xD6CB, 0, 0, /* 0x30 */ + 0xD6DB, 0, 0, 0xDADF, 0, 0, 0, 0, /* 0x30 */ + 0xDAE4, 0, 0, 0, 0xDAE0, 0xDAE6, 0xB5A7, 0xD6CC, /* 0x40 */ + 0xDAE1, 0xB5A5, 0xDADE, 0xB5AC, 0xDAE2, 0xB5AB, 0xDAE3, 0xB5AD, /* 0x40 */ + 0xB5A8, 0xB5AE, 0xB5A9, 0, 0xB5AA, 0, 0xB5A6, 0, /* 0x50 */ + 0xDAE5, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0xB861, 0xDF50, 0, 0xDF53, 0xDF47, 0xDF4C, 0xDF46, 0xB863, /* 0x60 */ + 0, 0xDF4A, 0, 0, 0, 0xDF48, 0xB862, 0, /* 0x60 */ + 0xDF4F, 0xDF4E, 0xDF4B, 0xDF4D, 0xDF49, 0xBAE1, 0xDF52, 0xB85F, /* 0x70 */ + 0xDF51, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0xE35D, 0, 0xBAE8, 0xE358, 0, 0xBAE7, /* 0x80 */ + 0xE34E, 0, 0xE350, 0xBAE0, 0xE355, 0xE354, 0xE357, 0xBAE5, /* 0x80 */ + 0xE352, 0xE351, 0, 0, 0xBAE4, 0xBADF, 0xE353, 0xBAE2, /* 0x90 */ + 0xE359, 0xE35B, 0, 0xE356, 0xE34F, 0xBAE3, 0, 0, /* 0x90 */ + 0xBD69, 0xBADE, 0, 0, 0xE35C, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0xE6D9, 0xBD62, 0, 0xE6DB, /* 0xA0 */ + 0, 0xBD63, 0, 0, 0xBD65, 0xE6DE, 0, 0xE6D6, /* 0xB0 */ + 0xBAE6, 0xE6DC, 0, 0, 0, 0, 0xE6D8, 0, /* 0xB0 */ + 0xB860, 0xBD68, 0, 0, 0xBD64, 0, 0xBD66, 0xBD67, /* 0xC0 */ + 0, 0xBF76, 0xE6DD, 0xE6D7, 0xBD6A, 0, 0xE6DA, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xEAC0, 0xEABB, 0, 0, /* 0xD0 */ + 0xEAC5, 0xBF74, 0xEABD, 0xBF78, 0xEAC3, 0xEABA, 0xEAB7, 0xEAC6, /* 0xD0 */ + 0xC151, 0xBF79, 0xEAC2, 0xEAB8, 0xBF77, 0xEABC, 0xBF7B, 0xEAB9, /* 0xE0 */ + 0xEABE, 0xBF7A, 0xEAC1, 0xEAC4, 0, 0, 0, 0, /* 0xE0 */ + 0xEDCB, 0xEDCC, 0xEDBC, 0xEDC3, 0xEDC1, 0, 0, 0xC14F, /* 0xF0 */ + 0xEDC8, 0xEABF, 0, 0xEDBF, 0, 0xEDC9, 0xC14E, 0xEDBE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_7C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEDBD, 0xEDC7, 0xEDC4, 0xEDC6, 0, 0xEDBA, 0xEDCA, 0xC14C, /* 0x00 */ + 0, 0xEDC5, 0xEDCE, 0xEDC2, 0xC150, 0xC14D, 0xEDC0, 0xEDBB, /* 0x00 */ + 0xEDCD, 0xBF75, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0xF063, 0, 0, 0xF061, 0xF067, 0xC2B0, 0xF065, /* 0x10 */ + 0xF064, 0xC2B2, 0xF06A, 0xC2B1, 0, 0xF06B, 0xF068, 0xC2AE, /* 0x20 */ + 0xF069, 0xF062, 0xC2AF, 0xC2AD, 0xF2AB, 0xF066, 0, 0, /* 0x20 */ + 0xF06C, 0, 0, 0xF2A8, 0, 0, 0, 0xC3B2, /* 0x30 */ + 0xC3B0, 0xF2AA, 0, 0xF2AC, 0xF2A9, 0xC3B1, 0xC3AE, 0xC3AF, /* 0x30 */ + 0xC3B3, 0, 0, 0xC478, 0, 0xF4AA, 0, 0xF4A9, /* 0x40 */ + 0xF4A7, 0xF4A6, 0xF4A8, 0, 0xC477, 0xC479, 0, 0, /* 0x40 */ + 0xC4F0, 0, 0, 0xF5E5, 0xF5E4, 0, 0, 0xF6FA, /* 0x50 */ + 0, 0xF6FC, 0xF6FE, 0xF6FD, 0xF6FB, 0, 0, 0xC5A3, /* 0x50 */ + 0xC5A2, 0, 0, 0xC5D3, 0xC5D2, 0xC5D4, 0xF7ED, 0xF7EC, /* 0x60 */ + 0, 0xF8FB, 0xF8B8, 0xF8FC, 0xC658, 0, 0xC659, 0xF96D, /* 0x60 */ + 0, 0, 0xC67E, 0xA6CC, 0, 0xCDA8, 0, 0, /* 0x70 */ + 0xD045, 0xD046, 0xD044, 0, 0, 0xACF3, 0, 0xD047, /* 0x70 */ + 0xD048, 0xD049, 0, 0, 0xD349, 0xD34F, 0, 0, /* 0x80 */ + 0xD34D, 0xAFBB, 0xD34B, 0, 0xD34C, 0xD34E, 0, 0, /* 0x80 */ + 0, 0xD34A, 0xB2C9, 0, 0xD6DE, 0xB2CB, 0xD6E0, 0xB2CA, /* 0x90 */ + 0xD6DF, 0, 0, 0, 0, 0, 0xDAE8, 0xB5AF, /* 0x90 */ + 0, 0xDAEA, 0xDAE7, 0xD6E1, 0, 0xB5B0, 0, 0xF9DB, /* 0xA0 */ + 0xDAE9, 0, 0, 0, 0, 0, 0, 0xDF56, /* 0xA0 */ + 0, 0xB864, 0xDF54, 0xB865, 0xDF55, 0xB866, 0, 0, /* 0xB0 */ + 0, 0xBAE9, 0xE361, 0xE35E, 0xE360, 0xBAEA, 0xBAEB, 0xE35F, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xE6DF, 0, 0, /* 0xC0 */ + 0xE6E0, 0, 0xBD6B, 0xE6E2, 0xE6E1, 0, 0xA261, 0, /* 0xC0 */ + 0xEACA, 0xEACB, 0xEAC7, 0, 0xEAC8, 0xBF7C, 0xBF7D, 0xEAC9, /* 0xD0 */ + 0, 0xC157, 0, 0, 0xC153, 0xC158, 0xC154, 0xC156, /* 0xD0 */ + 0xC152, 0, 0xC155, 0, 0, 0, 0, 0xC2B3, /* 0xE0 */ + 0xEDCF, 0, 0xF2AE, 0, 0xF2AD, 0, 0xF4AB, 0xC47A, /* 0xE0 */ + 0xC47B, 0xF741, 0xF5E6, 0, 0xF740, 0, 0xF8FD, 0xF9A4, /* 0xF0 */ + 0xA6CD, 0, 0, 0xA874, 0, 0xCDA9, 0xAAC8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_7D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xACF6, 0xD04C, 0xACF4, 0xD04A, 0xACF9, 0xACF5, 0xACFA, 0xACF8, /* 0x00 */ + 0xD04B, 0xACF7, 0xAFBF, 0xAFBE, 0xD35A, 0xAFC7, 0xD353, 0xD359, /* 0x00 */ + 0xAFC3, 0xD352, 0xD358, 0xD356, 0xAFC2, 0xAFC4, 0xD355, 0xAFBD, /* 0x10 */ + 0xD354, 0xAFC8, 0xAFC5, 0xAFC9, 0xAFC6, 0xD351, 0xD350, 0xD357, /* 0x10 */ + 0xAFC0, 0xAFBC, 0xAFC1, 0, 0, 0, 0, 0, /* 0x20 */ + 0xD6F0, 0xD6E9, 0, 0xB5B5, 0xD6E8, 0, 0xB2CF, 0xB2D6, /* 0x20 */ + 0xB2D3, 0xB2D9, 0xB2D8, 0xB2D4, 0, 0xD6E2, 0xD6E5, 0, /* 0x30 */ + 0xD6E4, 0xB2D0, 0xD6E6, 0xD6EF, 0xB2D1, 0xD6E3, 0xD6EC, 0xD6ED, /* 0x30 */ + 0xB2D2, 0xD6EA, 0xB2D7, 0xB2CD, 0xB2D5, 0xD6E7, 0xB2CC, 0xD6EB, /* 0x40 */ + 0, 0, 0xD6EE, 0, 0, 0, 0xDAFB, 0xDAF2, /* 0x40 */ + 0xB5B2, 0xDAF9, 0xDAF6, 0xDAEE, 0xDAF7, 0xB5B4, 0xDAEF, 0, /* 0x50 */ + 0xDAEB, 0, 0, 0xB86C, 0xDAF4, 0, 0xB5B1, 0xDAFA, /* 0x50 */ + 0, 0xB5B8, 0xB5BA, 0xDAED, 0, 0, 0xB5B9, 0xDAF0, /* 0x60 */ + 0xB5B3, 0xDAF8, 0xDAF1, 0xDAF5, 0, 0xDAF3, 0xB5B6, 0xDAEC, /* 0x60 */ + 0xB5BB, 0xB2CE, 0xB5B7, 0xB5BC, 0, 0, 0, 0, /* 0x70 */ + 0, 0xB868, 0xDF5D, 0xDF5F, 0xDF61, 0xDF65, 0, 0xDF5B, /* 0x70 */ + 0xDF59, 0xB86A, 0, 0xDF60, 0xDF64, 0xDF5C, 0xDF58, 0, /* 0x80 */ + 0xDF57, 0, 0, 0, 0xDF62, 0xDF5A, 0xDF5E, 0xB86B, /* 0x80 */ + 0, 0xB869, 0xDF66, 0xB867, 0xDF63, 0, 0xE372, 0, /* 0x90 */ + 0, 0, 0, 0, 0xBAEE, 0xE36A, 0xBD78, 0xE374, /* 0x90 */ + 0xBAF1, 0xE378, 0xBAF7, 0xE365, 0, 0, 0xE375, 0xE362, /* 0xA0 */ + 0, 0xE377, 0xE366, 0, 0xBAFE, 0xBAFB, 0xE376, 0xE370, /* 0xA0 */ + 0xBAED, 0xBAF5, 0xBAF4, 0, 0xBAF3, 0xBAF9, 0, 0xE363, /* 0xB0 */ + 0xBAFA, 0xE371, 0xBAF6, 0xBAEC, 0xE373, 0xBAEF, 0xBAF0, 0xBAF8, /* 0xB0 */ + 0xE368, 0xE367, 0xE364, 0, 0xE36C, 0xE369, 0xE36D, 0xBAFD, /* 0xC0 */ + 0, 0xE379, 0xBAF2, 0xE36E, 0xE36F, 0, 0xE36B, 0, /* 0xC0 */ + 0, 0, 0xBAFC, 0, 0, 0, 0, 0xE6E7, /* 0xD0 */ + 0xBD70, 0xBD79, 0xBD75, 0xE6E4, 0, 0xBD72, 0xBD76, 0xE6F0, /* 0xD0 */ + 0xBD6C, 0xE6E8, 0, 0xBD74, 0, 0, 0xE6EB, 0xE6E6, /* 0xE0 */ + 0xBD73, 0xBD77, 0xE6E5, 0, 0xBD71, 0, 0xE6EF, 0xBD6E, /* 0xE0 */ + 0xE6EE, 0xE6ED, 0xBD7A, 0xE572, 0xBD6D, 0, 0xE6EC, 0xE6E3, /* 0xF0 */ + 0, 0xBD7B, 0xE6EA, 0xBD6F /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_7E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE6E9, 0, 0, 0, 0, /* 0x00 */ + 0xBFA2, 0xBFA7, 0xBF7E, 0xEAD8, 0xEACF, 0xEADB, 0xEAD3, 0xEAD9, /* 0x00 */ + 0xBFA8, 0xBFA1, 0xEACC, 0xEAD2, 0xEADC, 0xEAD5, 0xEADA, 0xEACE, /* 0x10 */ + 0, 0, 0xEAD6, 0xBFA3, 0xEAD4, 0xBFA6, 0xBFA5, 0xEAD0, /* 0x10 */ + 0xEAD1, 0xEACD, 0xEAD7, 0xBFA4, 0xEADE, 0xEADD, 0, 0, /* 0x20 */ + 0, 0xEDDA, 0xEDD6, 0xC15F, 0, 0xEDD0, 0xC159, 0xC169, /* 0x20 */ + 0xEDDC, 0xC161, 0xC15D, 0xEDD3, 0xC164, 0xC167, 0xEDDE, 0xC15C, /* 0x30 */ + 0xEDD5, 0xC165, 0xEDE0, 0xEDDD, 0xEDD1, 0xC160, 0xC15A, 0xC168, /* 0x30 */ + 0xEDD8, 0xC163, 0xEDD2, 0xC15E, 0xEDDF, 0xC162, 0xC15B, 0xEDD9, /* 0x40 */ + 0xC166, 0xEDD7, 0, 0, 0xEDDB, 0, 0, 0, /* 0x40 */ + 0xF06E, 0xF074, 0xC2B9, 0xF077, 0xC2B4, 0xC2B5, 0xF06F, 0xF076, /* 0x50 */ + 0xF071, 0xC2BA, 0xC2B7, 0, 0xF06D, 0, 0xC2B6, 0xF073, /* 0x50 */ + 0xF075, 0xC2B8, 0xF072, 0xF070, 0, 0, 0, 0, /* 0x60 */ + 0xF2B8, 0xC3B7, 0xC3B8, 0xC3B4, 0, 0xC3B5, 0, 0xF2B4, /* 0x60 */ + 0xF2B2, 0, 0xF2B6, 0xC3BA, 0xF2B7, 0xF2B0, 0xF2AF, 0xF2B3, /* 0x70 */ + 0xF2B1, 0xC3B6, 0xF2B5, 0xF4AC, 0xC47E, 0xC47D, 0xF4AD, 0, /* 0x70 */ + 0xF4AF, 0xF4AE, 0xC4A1, 0, 0, 0, 0xF5EB, 0xF5E8, /* 0x80 */ + 0xF5E9, 0, 0xF5E7, 0xF5EA, 0xC4F2, 0xF5EC, 0, 0xC4F1, /* 0x80 */ + 0, 0xF742, 0, 0xC5D5, 0xC5D7, 0xF7EE, 0xC5D6, 0xF8B9, /* 0x90 */ + 0xF940, 0xF942, 0xF8FE, 0xF941, 0xC66C /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_7F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA6CE, 0, /* 0x30 */ + 0xACFB, 0xD26F, 0xAFCA, 0, 0, 0xB2DA, 0xDAFC, 0xDAFD, /* 0x30 */ + 0, 0, 0, 0xEADF, 0xC16A, 0xEDE1, 0, 0, /* 0x40 */ + 0xC2BB, 0, 0xF2BA, 0xF2B9, 0xC4A2, 0xF5ED, 0, 0xF743, /* 0x40 */ + 0xC5F8, 0xCA49, 0, 0, 0xAAC9, 0xA875, 0, 0, /* 0x50 */ + 0xD04D, 0, 0, 0xD360, 0xD35B, 0xD35F, 0xD35D, 0xAFCB, /* 0x50 */ + 0xD35E, 0xD35C, 0, 0xD6F1, 0, 0xDAFE, 0xDB40, 0xDF69, /* 0x60 */ + 0xDF6A, 0xB86E, 0xB86F, 0xDF68, 0xDF6B, 0xDF67, 0xB86D, 0, /* 0x60 */ + 0xBB40, 0, 0xB870, 0xE37A, 0, 0xBD7C, 0xE6F1, 0xBD7D, /* 0x70 */ + 0, 0xBFA9, 0xEAE2, 0xEAE0, 0xEAE1, 0xEDE4, 0xEDE3, 0xEDE2, /* 0x70 */ + 0, 0, 0, 0xF2BB, 0, 0xC3B9, 0xF2BC, 0xF744, /* 0x80 */ + 0xC5F9, 0xF8BA, 0xA6CF, 0xAACB, 0xAACA, 0xD04F, 0xACFC, 0, /* 0x80 */ + 0, 0xD04E, 0xD362, 0, 0xAFCC, 0xD6F2, 0xD361, 0, /* 0x90 */ + 0, 0, 0xB2DC, 0xD6F5, 0xD6F3, 0xD6F4, 0xB2DB, 0, /* 0x90 */ + 0xDB42, 0xDB43, 0xDB41, 0, 0xB873, 0xDF6D, 0xDF6C, 0xDF6E, /* 0xA0 */ + 0xB872, 0xB871, 0, 0, 0xE6F2, 0xE6F4, 0, 0xBD7E, /* 0xA0 */ + 0xE6F3, 0xEAE3, 0xBFAA, 0xF079, 0, 0xF078, 0xC3BB, 0xF2BD, /* 0xB0 */ + 0xC3BD, 0xC3BC, 0xF4B0, 0xF5EE, 0xC4F3, 0xA6D0, 0xD050, 0xACFD, /* 0xB0 */ + 0xD365, 0xAFCE, 0xD364, 0xD363, 0, 0xAFCD, 0, 0xD6FB, /* 0xC0 */ + 0, 0xD6FD, 0xD6F6, 0xD6F7, 0xB2DD, 0xD6F8, 0xB2DE, 0xD6FC, /* 0xC0 */ + 0xD6F9, 0xD6FA, 0xB2DF, 0, 0xB5BE, 0xB5BF, 0, 0xDB44, /* 0xD0 */ + 0, 0, 0, 0xDF6F, 0xDF70, 0, 0xE37E, 0xBB43, /* 0xD0 */ + 0xBB41, 0xBB42, 0xE37B, 0xE37C, 0, 0xE37D, 0xE6F9, 0, /* 0xE0 */ + 0xE6FA, 0xBDA1, 0xE6F7, 0xE6F6, 0xE6F8, 0xE6F5, 0xBFAD, 0xEAE4, /* 0xE0 */ + 0xBFAB, 0xBFAC, 0xEDE6, 0xC16B, 0xEDE5, 0xEFA8, 0, 0xF07A, /* 0xF0 */ + 0xF07B, 0xC2BC, 0, 0xC2BD, 0xC16C, 0xF2BE, 0xF2BF, 0xF4B1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_80[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC4A3, 0xA6D1, 0, 0xA6D2, 0xACFE, 0xAACC, 0xAFCF, 0xD051, /* 0x00 */ + 0, 0, 0, 0xB5C0, 0xA6D3, 0xAD41, 0xD052, 0xD053, /* 0x00 */ + 0xAD40, 0xAD42, 0xA6D4, 0, 0xD054, 0xAFD1, 0xD366, 0xAFD3, /* 0x10 */ + 0xAFD0, 0xAFD2, 0, 0xD741, 0xB2E0, 0, 0xD740, 0xD6FE, /* 0x10 */ + 0, 0xDF71, 0, 0, 0xE3A1, 0, 0xBDA2, 0, /* 0x20 */ + 0xBFAE, 0xEAE6, 0xEAE5, 0, 0xEDE7, 0, 0, 0, /* 0x20 */ + 0xF5EF, 0, 0, 0xA6D5, 0xCB73, 0xCDAA, 0xAD43, 0xD055, /* 0x30 */ + 0, 0xD368, 0, 0, 0, 0xAFD4, 0xD367, 0xAFD5, /* 0x30 */ + 0, 0, 0, 0xD743, 0, 0, 0xB2E2, 0xD742, /* 0x40 */ + 0xD744, 0, 0xB2E1, 0, 0, 0, 0, 0xDB46, /* 0x40 */ + 0xDB47, 0xDB45, 0xB5C1, 0, 0, 0, 0xB874, 0, /* 0x50 */ + 0xB875, 0, 0xBB45, 0, 0xE3A3, 0xE3A2, 0xBB44, 0, /* 0x50 */ + 0, 0, 0, 0, 0xE6FB, 0, 0, 0xE6FC, /* 0x60 */ + 0, 0, 0, 0, 0xEAE7, 0, 0, 0xC170, /* 0x60 */ + 0xC16F, 0xC16D, 0xC16E, 0xC171, 0, 0xF07C, 0xC2BF, 0xC2BE, /* 0x70 */ + 0xF2C0, 0xF4B2, 0, 0, 0, 0xC5A5, 0xC5A4, 0xA6D6, /* 0x70 */ + 0, 0, 0xD1FB, 0, 0xB877, 0xB5C2, 0xB876, 0xBB46, /* 0x80 */ + 0, 0xA6D7, 0xC9A9, 0xA6D8, 0xA6D9, 0, 0, 0xCDAB, /* 0x80 */ + 0xCB76, 0, 0xCB77, 0xA877, 0, 0xCB74, 0xA876, 0, /* 0x90 */ + 0xA879, 0xCB75, 0xA87B, 0xA87A, 0xCB78, 0xA878, 0, 0, /* 0x90 */ + 0, 0xAAD1, 0xAACF, 0xCDAD, 0, 0xAACE, 0, 0, /* 0xA0 */ + 0, 0xAAD3, 0xAAD5, 0xAAD2, 0, 0xCDB0, 0xCDAC, 0xAAD6, /* 0xA0 */ + 0, 0xAAD0, 0xA87C, 0, 0xAAD4, 0xCDAF, 0, 0, /* 0xB0 */ + 0xCDAE, 0, 0xAACD, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xD05B, 0xAD47, 0xAD48, 0xD05D, 0, 0xD057, /* 0xC0 */ + 0xD05A, 0xD063, 0xD061, 0, 0xAD49, 0xD067, 0xAD4C, 0xD064, /* 0xC0 */ + 0xD05C, 0xD059, 0, 0, 0xDB49, 0xD062, 0xAD44, 0xD065, /* 0xD0 */ + 0xD056, 0xD05F, 0xAD46, 0xAD4B, 0xD060, 0xAD4F, 0xAD4D, 0, /* 0xD0 */ + 0xD058, 0xAD4A, 0, 0xD05E, 0xAD4E, 0xAD45, 0xD066, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xAFDA, 0, 0xAFE3, /* 0xE0 */ + 0xAFD8, 0xAFD6, 0xD36A, 0xAFDE, 0xAFDB, 0xD36C, 0, 0, /* 0xF0 */ + 0xAFDD, 0xD36B, 0xD369, 0xD36E, 0xAFE2, 0xAFE0, 0xDB48 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_81[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD36F, 0xD36D, 0xAFD7, 0, 0, 0xAFD9, 0xAFDC, 0, /* 0x00 */ + 0xAFDF, 0, 0xAFE1, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0xD74E, 0xB2E4, 0, /* 0x10 */ + 0xD745, 0xD747, 0, 0xD748, 0, 0xD750, 0xD74C, 0xD74A, /* 0x10 */ + 0, 0xD74D, 0xD751, 0xB2E5, 0xB2E9, 0xD746, 0, 0xD74F, /* 0x20 */ + 0, 0xB2E7, 0, 0xB2E6, 0xD74B, 0xD749, 0, 0xB2E3, /* 0x20 */ + 0xB2E8, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xB5C8, 0xDB51, 0, 0, 0xDB4F, 0xB5CA, 0, /* 0x30 */ + 0, 0, 0, 0xDB4A, 0xDFA1, 0, 0xB5C9, 0xDB4E, /* 0x40 */ + 0, 0, 0xDB4B, 0xB5C5, 0xB5CB, 0xDB50, 0xB5C7, 0xDB4D, /* 0x40 */ + 0xBB47, 0xB5C6, 0xDB4C, 0xB5CC, 0xB5C4, 0xB5C3, 0, 0, /* 0x50 */ + 0, 0, 0, 0xDF77, 0xDF75, 0, 0xDF7B, 0, /* 0x50 */ + 0xDF73, 0xDFA2, 0xDF78, 0, 0xDF72, 0xB87B, 0xB8A3, 0xDF7D, /* 0x60 */ + 0, 0xDF76, 0, 0xB87E, 0, 0, 0xB87C, 0xDF7E, /* 0x60 */ + 0xB879, 0xB878, 0xDF79, 0xB87D, 0xB5CD, 0, 0xDF7C, 0xDF74, /* 0x70 */ + 0xB87A, 0xB8A1, 0xB8A2, 0, 0, 0, 0, 0xBB4C, /* 0x70 */ + 0xBB48, 0, 0xBB4D, 0xE3A6, 0, 0, 0xE3A5, 0xE3A7, /* 0x80 */ + 0xBB4A, 0xE3A4, 0xBB4B, 0xE3AA, 0xE3A9, 0xE3A8, 0, 0xBB49, /* 0x80 */ + 0, 0, 0, 0, 0, 0xE741, 0, 0xE744, /* 0x90 */ + 0xBDA8, 0xE743, 0xBDA7, 0xBDA3, 0xBDA4, 0xBDA5, 0xE740, 0xE6FE, /* 0x90 */ + 0xBDA6, 0, 0xE742, 0xE6FD, 0, 0, 0xEAE9, 0xEAF3, /* 0xA0 */ + 0xBFB1, 0xBFB0, 0, 0xEAED, 0xEAEF, 0, 0xEAEA, 0, /* 0xA0 */ + 0xEAEE, 0xEAE8, 0xEAF1, 0xBFAF, 0xEAF0, 0xEAEC, 0, 0xEAF2, /* 0xB0 */ + 0, 0xEAEB, 0xC174, 0xEDE8, 0xEDEE, 0xC178, 0xC17A, 0xC177, /* 0xB0 */ + 0xC176, 0, 0xC175, 0xC173, 0xEDE9, 0xEDEC, 0xC172, 0xEDED, /* 0xC0 */ + 0, 0xC179, 0xEDEB, 0, 0xEDEA, 0xC2C0, 0, 0xC2C1, /* 0xC0 */ + 0xF0A1, 0xF07D, 0xF07E, 0, 0, 0xF2C2, 0, 0xF2C1, /* 0xD0 */ + 0xC3BE, 0xF4B4, 0xC4A4, 0xF4B3, 0, 0xF5F0, 0xF745, 0xC5A6, /* 0xD0 */ + 0xF943, 0xF944, 0xC5D8, 0xA6DA, 0, 0xAAD7, 0xDB52, 0xBB4E, /* 0xE0 */ + 0xC17B, 0xEDEF, 0xA6DB, 0, 0xAFE5, 0xAFE4, 0xDB53, 0, /* 0xE0 */ + 0, 0, 0xEAF4, 0xA6DC, 0xAD50, 0, 0, 0xDB54, /* 0xF0 */ + 0xDB55, 0xDB56, 0xBB4F, 0xBFB2, 0xA6DD, 0, 0xAAD8, 0xD068 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_82[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAFE6, 0xD370, 0xB2EA, 0, 0xDB57, 0xB8A4, 0, 0xBB50, /* 0x00 */ + 0xBFB3, 0xC17C, 0xC2C2, 0xF4B5, 0xA6DE, 0xAAD9, 0, 0, /* 0x00 */ + 0xAFE7, 0xD752, 0xB5CE, 0, 0xBB51, 0xE3AB, 0xE745, 0, /* 0x10 */ + 0, 0, 0, 0xA6DF, 0xB5CF, 0xDFA3, 0xBB52, 0xA6E0, /* 0x10 */ + 0xCDB1, 0xD069, 0xAD51, 0, 0, 0xD372, 0, 0, /* 0x20 */ + 0xAFEA, 0, 0xAFE8, 0xAFE9, 0xAFEB, 0, 0, 0xD371, /* 0x20 */ + 0, 0, 0xD757, 0xD754, 0xD756, 0xB2EB, 0xB2ED, 0xB2EC, /* 0x30 */ + 0xD753, 0xB2EE, 0xD755, 0, 0xDB58, 0xDB59, 0, 0xDB5A, /* 0x30 */ + 0xDFA6, 0, 0xDFA7, 0, 0xDFA5, 0xDFA8, 0, 0xB8A5, /* 0x40 */ + 0, 0xDFA4, 0, 0xBB53, 0, 0, 0xE74A, 0xE746, /* 0x40 */ + 0xE749, 0xE74B, 0xE748, 0xE747, 0, 0xEAF5, 0xEAF6, 0xEAF7, /* 0x50 */ + 0xBFB4, 0xBFB5, 0xEDF1, 0xEDF0, 0xEDF2, 0, 0xF0A3, 0xF0A2, /* 0x50 */ + 0, 0xF2C4, 0, 0xF2C5, 0xF2C3, 0, 0xC4A5, 0, /* 0x60 */ + 0xF4B6, 0xF4B7, 0, 0xF746, 0xF7EF, 0xF8BB, 0xA6E1, 0xA87D, /* 0x60 */ + 0, 0xC17D, 0xA6E2, 0, 0xD758, 0xDB5B, 0, 0xC641, /* 0x70 */ + 0xCA4A, 0, 0, 0, 0xCA4B, 0xCA4D, 0xA6E3, 0xCA4E, /* 0x70 */ + 0xCA4C, 0, 0, 0xCBA2, 0xCBA3, 0xCB7B, 0, 0, /* 0x80 */ + 0, 0, 0xCBA1, 0xA8A1, 0, 0xA8A2, 0xCB7C, 0xCB7A, /* 0x80 */ + 0xCB79, 0xCB7D, 0xA87E, 0xCB7E, 0xD06A, 0, 0, 0, /* 0x90 */ + 0xCDB6, 0xAADC, 0xCDB5, 0xCDB7, 0, 0xAADB, 0xCDBC, 0xAADF, /* 0x90 */ + 0xCDB2, 0xCDC0, 0xCDC6, 0xAAE6, 0xCDC3, 0xAAE3, 0, 0xCDB9, /* 0xA0 */ + 0xCDBF, 0xCDC1, 0, 0xCDB4, 0xAAE2, 0xAADD, 0xCDBA, 0xAAE4, /* 0xA0 */ + 0xAAE7, 0xAAE1, 0, 0xAADA, 0xCDBE, 0xCDB8, 0xCDC5, 0xAAE9, /* 0xB0 */ + 0xAAE5, 0xAAE0, 0xCDBD, 0xAFEC, 0xCDBB, 0xAADE, 0xAAE8, 0, /* 0xB0 */ + 0xCDB3, 0, 0xCDC2, 0xCDC4, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xAD62, 0xAD5C, 0xAD64, 0xAD61, 0xD071, 0xD074, 0xAD5D, /* 0xD0 */ + 0, 0xD06B, 0, 0xAD56, 0xAD60, 0, 0xAD63, 0xAD65, /* 0xD0 */ + 0xD0A2, 0xD077, 0, 0xAD55, 0xD0A1, 0xAD59, 0xAD57, 0xAD52, /* 0xE0 */ + 0xD06F, 0, 0xD07E, 0xD073, 0xD076, 0xD0A5, 0, 0xAD66, /* 0xE0 */ + 0xD07D, 0xAD5E, 0xD078, 0xD0A4, 0xD075, 0xD079, 0xD07C, 0, /* 0xF0 */ + 0, 0xD06D, 0xD0A3, 0xD07B, 0, 0, 0xD06C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_83[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xD070, 0xAD5F, 0xAD5A, 0xAD53, 0xAD58, 0xAD54, 0xAD67, 0xD06E, /* 0x00 */ + 0xD3A5, 0xAD5B, 0, 0, 0xD07A, 0xCE41, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0xD3A8, 0xAFFA, /* 0x10 */ + 0, 0xD376, 0, 0xD3A3, 0xD37D, 0, 0xD3B2, 0, /* 0x10 */ + 0xD3AA, 0, 0xD37E, 0, 0xD3A9, 0xD378, 0xD37C, 0xD3B5, /* 0x20 */ + 0xAFFD, 0xD3AD, 0xD3A4, 0xAFED, 0xD3B3, 0xD374, 0, 0xD3AC, /* 0x20 */ + 0, 0xAFFC, 0xAFF7, 0xD373, 0xAFF5, 0xAFF4, 0xAFF9, 0xD3AB, /* 0x30 */ + 0xAFF1, 0xAFF8, 0xD072, 0xDB5C, 0xD3A6, 0, 0, 0xD37A, /* 0x30 */ + 0xAFFB, 0xD37B, 0xD3A1, 0xAFFE, 0xD375, 0xD3AF, 0, 0xD3AE, /* 0x40 */ + 0xD3B6, 0xAFF3, 0xAFF0, 0xD3B4, 0xD3B0, 0xD3A7, 0xD3A2, 0xAFF6, /* 0x40 */ + 0xAFF2, 0xD377, 0xAFEE, 0xD3B1, 0xAFEF, 0, 0xD379, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0xD75E, 0xD760, 0xD765, 0xD779, 0xB2FC, /* 0x70 */ + 0xB2F2, 0, 0xD75D, 0xB2FD, 0xB2FE, 0xD768, 0xD76F, 0xD775, /* 0x70 */ + 0, 0xD762, 0, 0xD769, 0, 0, 0xB340, 0xD777, /* 0x80 */ + 0xD772, 0xB2FA, 0xB2F8, 0xD76E, 0xD76A, 0xD75C, 0xB2EF, 0xD761, /* 0x80 */ + 0xD759, 0, 0xB2F7, 0xB2F9, 0xD766, 0xD763, 0xB2F4, 0xD773, /* 0x90 */ + 0xB2F1, 0xD764, 0xD77A, 0xD76C, 0, 0xD76B, 0xB2F0, 0, /* 0x90 */ + 0xB2FB, 0, 0xB2F3, 0xD75A, 0xD75F, 0xD770, 0xD776, 0xB341, /* 0xA0 */ + 0xD75B, 0xD767, 0xD76D, 0xB2F6, 0, 0, 0xD778, 0xD771, /* 0xA0 */ + 0xD774, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0xB2F5, 0, 0xDB6C, /* 0xB0 */ + 0xDB60, 0xB5D7, 0xDB7D, 0xDBA7, 0xDBAA, 0xB5D5, 0xDB68, 0xDBA3, /* 0xC0 */ + 0xDB69, 0xDB77, 0xB5E2, 0xDB73, 0xB5DF, 0, 0xDB74, 0xDB5D, /* 0xC0 */ + 0, 0xDBA4, 0, 0, 0xB5E8, 0xDBA1, 0xDB75, 0xDBAC, /* 0xD0 */ + 0xDB70, 0xDFC8, 0, 0xDBAF, 0xB5E6, 0xDB6E, 0xDB7A, 0xB5E9, /* 0xD0 */ + 0xB5D4, 0xDB72, 0xDBAD, 0xDB6B, 0xDB64, 0xDB6F, 0, 0xDB63, /* 0xE0 */ + 0xDB61, 0xB5D0, 0xDBA5, 0xDB6A, 0xDBA8, 0, 0xDBA9, 0xB5D8, /* 0xE0 */ + 0xB5DD, 0xB5D9, 0xB5E1, 0xDB7E, 0xB5DA, 0xDB76, 0xDB66, 0, /* 0xF0 */ + 0xB5D2, 0xDB5E, 0xDBA2, 0xDBAB, 0xDB65, 0xB5E0, 0xDBB0, 0xDB71 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_84[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDB6D, 0, 0xB5D1, 0xB5E5, 0, 0xDB7C, 0xB5E7, /* 0x00 */ + 0, 0xDB78, 0xB5DC, 0xB5D6, 0xB5DE, 0xB5D3, 0xB5E4, 0xDB79, /* 0x00 */ + 0xDB67, 0xDB7B, 0xDB62, 0xDBA6, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xDBAE, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0xDB5F, 0, 0, 0, 0, /* 0x20 */ + 0, 0xDFC7, 0, 0xDFDD, 0xB855, 0xDFCC, 0, 0xDFCA, /* 0x20 */ + 0xDFB5, 0xB8A9, 0xDFC5, 0xDFD9, 0xDFC1, 0xB8B1, 0xDFD8, 0xDFBF, /* 0x30 */ + 0xB5E3, 0xDFCF, 0xDFC0, 0xDFD6, 0xB8B0, 0xB8A8, 0, 0xDFAA, /* 0x30 */ + 0xDFB2, 0, 0xDFCB, 0xDFC3, 0xDFDC, 0xDFC6, 0xB8B6, 0xDFD7, /* 0x40 */ + 0, 0xB8AD, 0, 0xDFC9, 0xDFD1, 0xDFB6, 0xDFD0, 0, /* 0x40 */ + 0xDFE1, 0xDFB1, 0xDFD2, 0, 0xDFDF, 0, 0xDFAB, 0xB5DB, /* 0x50 */ + 0, 0xDFB9, 0xDFB8, 0xB8AF, 0, 0xDFBC, 0xDFBE, 0xDFCD, /* 0x50 */ + 0xDFDE, 0xB8B2, 0, 0xB8B3, 0, 0xDFB0, 0xB8AB, 0xDFB4, /* 0x60 */ + 0xDFDA, 0xB8B4, 0, 0xB8AC, 0xB8AE, 0xB8B5, 0xDFE0, 0xDFD3, /* 0x60 */ + 0xDFCE, 0, 0, 0xDFBB, 0xDFBA, 0xB8AA, 0xDFAC, 0xB8A7, /* 0x70 */ + 0xDFC4, 0xDFAD, 0xDFC2, 0, 0, 0xDFB7, 0xDFDB, 0, /* 0x70 */ + 0, 0, 0xB8A6, 0, 0, 0, 0xDFB3, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xDFAF, 0xDFD5, 0xDFAE, /* 0x80 */ + 0xBB60, 0xE3D3, 0, 0, 0xE3C2, 0, 0, 0xE3AC, /* 0x90 */ + 0xE3CA, 0xBB58, 0xE3BB, 0xE3C5, 0xBB5B, 0xE3BE, 0xBB59, 0xE3AF, /* 0x90 */ + 0xE3CD, 0xE3AE, 0xE3C1, 0, 0xE3AD, 0, 0, 0xE3BF, /* 0xA0 */ + 0xE3C8, 0xE3C6, 0xE3BA, 0xE3B5, 0xE3B3, 0, 0xE3B4, 0xE3C7, /* 0xA0 */ + 0xE3D2, 0xE3BC, 0xBB5A, 0, 0xE3B7, 0, 0xE3CB, 0, /* 0xB0 */ + 0xBB5D, 0xE3B6, 0xE3B0, 0xE3C0, 0xBB61, 0, 0, 0xBB55, /* 0xB0 */ + 0xBB5E, 0xE3B8, 0xE3B2, 0, 0xBB57, 0xDFD4, 0xBB56, 0xE3C3, /* 0xC0 */ + 0, 0xBB54, 0xBB63, 0xBB5C, 0xE3C4, 0xE3B9, 0xE3B1, 0xE3CC, /* 0xC0 */ + 0xE3BD, 0xBB62, 0xE3D0, 0xBB5F, 0xE3CF, 0, 0xE3C9, 0xE3CE, /* 0xD0 */ + 0, 0, 0, 0xE3D1, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0xE773, /* 0xE0 */ + 0xE774, 0xE767, 0xE766, 0xE762, 0xBDB4, 0, 0xBDAC, 0xE776, /* 0xE0 */ + 0xE775, 0xDFA9, 0xE75F, 0xE763, 0xE75D, 0, 0xE770, 0xE761, /* 0xF0 */ + 0, 0xE777, 0xE75A, 0xE758, 0xE764, 0xE76E, 0xE769, 0xBDB6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_85[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE74F, 0, 0xE76D, 0, 0, 0, 0xBDB7, 0xDFBD, /* 0x00 */ + 0xE75B, 0xE752, 0xE755, 0xE77B, 0xE75C, 0xE753, 0xE751, 0xE74E, /* 0x00 */ + 0, 0xBDB0, 0xE765, 0xBDAF, 0xBDB3, 0xE760, 0xE768, 0xBDA9, /* 0x10 */ + 0xE778, 0xE77C, 0xBDAB, 0, 0xE757, 0xE76B, 0xE76F, 0xE754, /* 0x10 */ + 0xE779, 0xBDB2, 0, 0xBDB1, 0xE74C, 0xBDB5, 0xE772, 0xE756, /* 0x20 */ + 0xE76A, 0xE750, 0xE75E, 0xE759, 0xBDAD, 0xBDAE, 0xE76C, 0xE77D, /* 0x20 */ + 0xE77A, 0xE771, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0xE74D, 0, 0xBDAA, 0xEB49, 0, /* 0x30 */ + 0xEB40, 0xEB43, 0, 0xBFBB, 0xEB45, 0xEAF9, 0xEB41, 0xEB47, /* 0x40 */ + 0xBFB8, 0xBFBC, 0xBFB6, 0, 0, 0xEAFB, 0xEB4C, 0, /* 0x40 */ + 0, 0xEB46, 0, 0xEAFC, 0xEB55, 0xEB4F, 0xEAF8, 0xEE46, /* 0x50 */ + 0xEAFE, 0xBFB7, 0, 0xEB4A, 0, 0xEB54, 0xBFBF, 0, /* 0x50 */ + 0xEB51, 0xEAFD, 0xEB44, 0xEB48, 0xEB42, 0xEB56, 0xEB53, 0xEB50, /* 0x60 */ + 0xBFB9, 0xBFBA, 0xBFBE, 0xEAFA, 0xEB57, 0xBFBD, 0xEB4D, 0, /* 0x60 */ + 0, 0xEB4B, 0, 0, 0, 0xEB4E, 0xEE53, 0xEE40, /* 0x70 */ + 0xEE45, 0xEE52, 0xEE44, 0xEDFB, 0xEE41, 0, 0xC1A2, 0, /* 0x70 */ + 0xEDF4, 0xEE4D, 0xEE4F, 0xEDF3, 0xC1A1, 0xEE51, 0xEE49, 0xC1A8, /* 0x80 */ + 0xEE50, 0xEE42, 0xC1AA, 0xEDF9, 0xEB52, 0xEE4A, 0xEE47, 0xEDF5, /* 0x80 */ + 0xEE55, 0xC1A4, 0, 0, 0xC1A5, 0xEDF7, 0xEE48, 0, /* 0x90 */ + 0xEE54, 0xEE4B, 0xEDFD, 0xC1A7, 0xC1A3, 0xEE4C, 0xEDFE, 0xEE56, /* 0x90 */ + 0xEDF8, 0xEE43, 0xEE4E, 0xEDFA, 0xEDFC, 0, 0xC2CB, 0xEDF6, /* 0xA0 */ + 0xC1A9, 0xC2C4, 0xC17E, 0, 0, 0, 0, 0xC1A6, /* 0xA0 */ + 0xC2C8, 0xF0B3, 0, 0xF0A9, 0xF0A4, 0xF0AA, 0xF0B4, 0xF0B8, /* 0xB0 */ + 0xF0B7, 0xC2CA, 0xC2C9, 0, 0, 0xF0AB, 0xF0B9, 0xF0AE, /* 0xB0 */ + 0xF0A6, 0, 0xF0A8, 0xF0A7, 0xF0AD, 0xF0B2, 0xF0A5, 0xF0AC, /* 0xC0 */ + 0xF0B1, 0xC2C7, 0, 0xF0AF, 0, 0xC2C5, 0xF0B0, 0xC2C3, /* 0xC0 */ + 0xC2C6, 0xF2D5, 0xF0B5, 0, 0, 0xC3C2, 0, 0xF2CD, /* 0xD0 */ + 0xF2D1, 0xF2C9, 0xF2CC, 0, 0xF2D4, 0xC3C0, 0xF2D9, 0xF2D2, /* 0xD0 */ + 0, 0xF2CA, 0xF2DA, 0xF2D3, 0xC3C3, 0xC3C4, 0xF2D7, 0, /* 0xE0 */ + 0xF2CB, 0xC3BF, 0xC3C1, 0xF2C6, 0xF2CE, 0xF2C8, 0, 0xF2D8, /* 0xE0 */ + 0xF2D6, 0xF2C7, 0xF2CF, 0, 0, 0, 0xF4BE, 0xC3C5, /* 0xF0 */ + 0xF2D0, 0xC4A7, 0xC4A9, 0xC4A6, 0, 0xF4C3, 0xF4BB, 0xF4B9 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_86[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF4BD, 0xF4BA, 0, 0, 0xF4BF, 0xF4C1, 0xC4AA, 0xC4AC, /* 0x00 */ + 0, 0xF4C0, 0xC4AD, 0xC4AB, 0xF4C2, 0, 0, 0, /* 0x00 */ + 0, 0xC4A8, 0, 0, 0, 0, 0, 0xC4F4, /* 0x10 */ + 0xF5F1, 0xF5F7, 0xC4F6, 0xF4BC, 0xF5F6, 0, 0xF5FD, 0xF5F4, /* 0x10 */ + 0xF5FB, 0xF5FA, 0xF4B8, 0xF5F5, 0xF0B6, 0xF5FE, 0xF5F3, 0xF5F8, /* 0x20 */ + 0, 0xF5FC, 0xF5F2, 0, 0xF74A, 0xC4F5, 0xF5F9, 0, /* 0x20 */ + 0, 0xF7F4, 0xF74B, 0xF749, 0xF747, 0xF748, 0xF74C, 0, /* 0x30 */ + 0xC5D9, 0xF7F2, 0xF7F0, 0xF7F5, 0xF7F3, 0, 0xF7F6, 0xC5DA, /* 0x30 */ + 0xF7F1, 0, 0, 0xF8BC, 0, 0, 0xF945, 0xF946, /* 0x40 */ + 0xF947, 0, 0, 0xF9C7, 0xF9BD, 0xCA4F, 0xAAEA, 0, /* 0x40 */ + 0xAD68, 0, 0xD3B8, 0xD3B7, 0xB040, 0xB342, 0xD77C, 0, /* 0x50 */ + 0, 0xD77B, 0, 0xB5EA, 0xB8B8, 0, 0xB8B7, 0xB8B9, /* 0x50 */ + 0, 0xE3D4, 0xE77E, 0xEB58, 0xEB5A, 0xEB59, 0, 0xC1AB, /* 0x60 */ + 0xEE57, 0xF0BA, 0xF9A5, 0xA6E4, 0, 0xCDC9, 0xCDCA, 0xCDC8, /* 0x60 */ + 0xCDC7, 0xAAEB, 0, 0xD0A9, 0xD0A7, 0, 0, 0xD0A6, /* 0x70 */ + 0, 0xAD69, 0xAD6B, 0xAD6A, 0xD0A8, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0xD3C4, 0xD3C1, 0xD3BF, /* 0x80 */ + 0, 0, 0xB041, 0xD3C2, 0xB046, 0xD3BC, 0xD3CB, 0, /* 0x80 */ + 0xD3CD, 0xD3BD, 0, 0xB043, 0xD3CE, 0xD3C9, 0xD3BB, 0xD3C0, /* 0x90 */ + 0xD3CA, 0xD3C6, 0xD3C3, 0, 0xB048, 0xD3CC, 0xD3BE, 0, /* 0x90 */ + 0, 0xD3C7, 0xD3B9, 0xB047, 0xB044, 0xD3C5, 0, 0xD3C8, /* 0xA0 */ + 0xD3BA, 0xB045, 0xB042, 0, 0, 0, 0, 0xB34C, /* 0xA0 */ + 0xD7A5, 0xB34B, 0, 0xD7A8, 0xD7AB, 0xB348, 0xB346, 0xD77E, /* 0xB0 */ + 0xD7A9, 0xD7A7, 0xD7A4, 0xD7AC, 0xD7AD, 0xD7AF, 0xD7B0, 0xD77D, /* 0xB0 */ + 0xB345, 0xD7A2, 0xD7A1, 0xD7AE, 0xB347, 0xD7A3, 0xB349, 0xB344, /* 0xC0 */ + 0xD7A6, 0xB34D, 0, 0xB34A, 0xD7AA, 0, 0, 0, /* 0xC0 */ + 0xB5F1, 0xDBBF, 0, 0xDBB4, 0xB5EE, 0, 0xDFE7, 0xDBBD, /* 0xD0 */ + 0xDBB1, 0xB5EC, 0xDBB6, 0xB5EF, 0xDBBA, 0xDBB8, 0xB5F2, 0xB5EB, /* 0xD0 */ + 0, 0, 0xDBB2, 0xDBB5, 0xB5F0, 0, 0xDBB3, 0, /* 0xE0 */ + 0xDBBE, 0xDBBC, 0xDBB7, 0xDBB9, 0xDBBB, 0xB5ED, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xDFE8, 0xDFEE, 0xDFE4, /* 0xF0 */ + 0xDFEA, 0xB8BA, 0xDFE6, 0xB8C0, 0, 0, 0xB8BF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_87[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB8BE, 0xDFED, 0xB8C1, 0xB8C2, 0xDFE3, 0xDFF0, 0xB8C3, 0xB8BD, /* 0x00 */ + 0xB8BC, 0xDFEC, 0xB8C4, 0xDFE2, 0xDFE5, 0xDFEF, 0xDFEB, 0, /* 0x00 */ + 0, 0xE3F4, 0xE3E9, 0xB8BB, 0, 0, 0, 0, /* 0x10 */ + 0xBB6A, 0xE3DD, 0xE3F2, 0xE3DE, 0xBB65, 0, 0xE3DB, 0, /* 0x10 */ + 0xE3E4, 0xE3DC, 0xBB67, 0xE3D6, 0xE3F1, 0xBB68, 0xE3EE, 0xE3EF, /* 0x20 */ + 0xE3D7, 0xBB6D, 0xE3E6, 0, 0xE3E0, 0xE3E7, 0xE3DA, 0, /* 0x20 */ + 0xE3F3, 0xE3EB, 0xE3E5, 0xE3D5, 0xBB69, 0xE3EC, 0, 0xBB6C, /* 0x30 */ + 0xE3F0, 0, 0xE3EA, 0xBB66, 0xE3E8, 0, 0xE3E2, 0xBB64, /* 0x30 */ + 0xE3D9, 0xE3E1, 0xE3ED, 0xE3DF, 0, 0, 0xE3E3, 0, /* 0x40 */ + 0, 0, 0, 0, 0xBDC1, 0xDFE9, 0xE7B2, 0xE7BB, /* 0x40 */ + 0xE7B1, 0xE7AD, 0xE7AA, 0xBDC2, 0xE7A8, 0xBB6B, 0xE7A1, 0xBDC0, /* 0x50 */ + 0xE7A7, 0xBDBF, 0xE7AC, 0xE7A9, 0xE7B9, 0xE7B4, 0xE7AE, 0xE7B3, /* 0x50 */ + 0xBDBB, 0xE7AB, 0xE7BE, 0xE7A2, 0xE7A3, 0xE7BA, 0xBDBC, 0xE7BF, /* 0x60 */ + 0xBDBE, 0xE7C0, 0xE7B0, 0xE3D8, 0xE7B6, 0xE7AF, 0xE7B8, 0xE7B5, /* 0x60 */ + 0, 0, 0, 0xE7A6, 0xBDB9, 0xE7BD, 0xBDBA, 0xE7A4, /* 0x70 */ + 0xBDBD, 0xEB64, 0xE7B7, 0xE7BC, 0, 0, 0, 0, /* 0x70 */ + 0, 0xEB61, 0xBDB8, 0xBFC0, 0xEB6B, 0xEB67, 0, 0xEB65, /* 0x80 */ + 0xEB60, 0xEB6F, 0, 0, 0, 0xBFC4, 0, 0xEB5C, /* 0x80 */ + 0xEB68, 0xEB69, 0xEB5F, 0xEB5E, 0xEB6C, 0, 0xEB62, 0xEB5D, /* 0x90 */ + 0xEB63, 0, 0xEB6E, 0xEB5B, 0xEB6D, 0xEB6A, 0xBFC2, 0xBFC1, /* 0x90 */ + 0, 0, 0xBFC3, 0xEB66, 0xF0CB, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xEE59, 0xC1B1, 0xEE5D, 0xEE5A, 0xEE61, 0xEE67, /* 0xA0 */ + 0xEE5C, 0, 0xEE70, 0xC1AE, 0xEE6A, 0xEE5F, 0xEE6B, 0xEE66, /* 0xB0 */ + 0xEE6D, 0xEE5E, 0xC1B3, 0xC1B2, 0xEE60, 0xEE6E, 0xEE58, 0xEE6C, /* 0xB0 */ + 0xC1AC, 0, 0xEE64, 0xEE63, 0xEE68, 0xEE5B, 0xC1B0, 0, /* 0xC0 */ + 0xC1B4, 0xEE62, 0xEE69, 0xC1B5, 0xEE65, 0, 0, 0, /* 0xC0 */ + 0, 0xC1AD, 0xC1AF, 0xF0C7, 0xF0C5, 0, 0, 0xF0CC, /* 0xD0 */ + 0xF0C9, 0xF0CD, 0, 0xF0BE, 0xF0C6, 0xF0D1, 0xEE6F, 0xF0C2, /* 0xD0 */ + 0xC2CF, 0xE7A5, 0xF0BD, 0xF0CA, 0xF0C4, 0xF0C1, 0xF0BC, 0xF0BB, /* 0xE0 */ + 0xF0D0, 0, 0xF0C0, 0xF0BF, 0xC2CD, 0xF0C8, 0, 0xC2CC, /* 0xE0 */ + 0, 0, 0xC2CE, 0xF0C3, 0xF0CF, 0, 0xF2DE, 0xF2DF, /* 0xF0 */ + 0, 0xC3C9, 0xF2DC, 0xC3C6, 0xF2E4, 0, 0xC3CA, 0xF2E6 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_88[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF2DB, 0xF0CE, 0xF2E8, 0xF2DD, 0, 0xC3C7, 0xF2E3, 0, /* 0x00 */ + 0xF2E5, 0xF2E0, 0xF2E7, 0xF2E2, 0xF2E1, 0xC3C8, 0, 0, /* 0x00 */ + 0xF4C5, 0xF4C6, 0, 0xF4C8, 0xC4AE, 0xC4AF, 0xF4C9, 0xF4C7, /* 0x10 */ + 0, 0xF4C4, 0, 0xF642, 0xF645, 0xF641, 0, 0xC4FA, /* 0x10 */ + 0xF643, 0xC4F9, 0xC4F8, 0xC4F7, 0xF644, 0xF751, 0xF74F, 0, /* 0x20 */ + 0xF74E, 0xF640, 0xF750, 0xF646, 0xF74D, 0, 0xF7F9, 0xF7D7, /* 0x20 */ + 0xF7F7, 0xC5DB, 0xF7F8, 0xF7FA, 0, 0xF8BF, 0xC5FA, 0xF8BE, /* 0x30 */ + 0xF8BD, 0xC5FB, 0, 0xC65A, 0xF96E, 0xF9A7, 0xF9A6, 0xF9A8, /* 0x30 */ + 0xA6E5, 0xD0AA, 0, 0xD3CF, 0xD3D0, 0, 0, 0, /* 0x40 */ + 0xDBC0, 0, 0xF647, 0xF8C0, 0xA6E6, 0xAD6C, 0xD0AB, 0, /* 0x40 */ + 0, 0, 0xD7B1, 0xB34E, 0, 0xDBC2, 0xDBC1, 0xB5F3, /* 0x50 */ + 0, 0xB8C5, 0xE7C1, 0xBDC3, 0, 0xBDC4, 0, 0, /* 0x50 */ + 0, 0xBFC5, 0xC5FC, 0xA6E7, 0, 0, 0, 0xD0AC, /* 0x60 */ + 0xAAED, 0xD0AE, 0xD0AD, 0xAD6D, 0, 0xD3D1, 0, 0xD3D8, /* 0x60 */ + 0xB049, 0xD3D6, 0xD3D4, 0, 0xD3DB, 0xD3D2, 0xD3D3, 0xB04A, /* 0x70 */ + 0, 0xB04E, 0, 0, 0xD3DC, 0xB04D, 0xD3DA, 0xD3D7, /* 0x70 */ + 0xD3D5, 0xB04B, 0xB04C, 0xD3D9, 0, 0, 0, 0, /* 0x80 */ + 0xB350, 0xD7B2, 0, 0xB355, 0xD7C2, 0xB354, 0xD7C4, 0, /* 0x80 */ + 0, 0xD7B8, 0xB352, 0xD7C3, 0, 0xD7B3, 0xB353, 0xD7BF, /* 0x90 */ + 0xD7BB, 0xD7BD, 0xD7B7, 0xD7BE, 0, 0, 0xB34F, 0xD7BA, /* 0x90 */ + 0, 0xD7B9, 0xD7B5, 0, 0xD7C0, 0, 0, 0xD7BC, /* 0xA0 */ + 0xD7B4, 0, 0xD7B6, 0xB351, 0xD7C1, 0, 0, 0, /* 0xA0 */ + 0, 0xB5F6, 0xDBCD, 0, 0, 0, 0xDBC9, 0xDBCB, /* 0xB0 */ + 0xDBC6, 0xDBC5, 0xDBC3, 0, 0xDBCA, 0xDBCC, 0xDBC8, 0, /* 0xB0 */ + 0xDBC7, 0xB5F4, 0xB5F5, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xDBCF, 0xB8CD, 0xDFF2, 0xDFF8, 0xDFF3, 0xDFF4, 0xF9D8, /* 0xC0 */ + 0xDFF9, 0, 0xB8CF, 0, 0xB8C7, 0xB8CE, 0xDFF1, 0xDBC4, /* 0xD0 */ + 0xB8CA, 0xB8C8, 0xDFF7, 0xDFF6, 0xB8C9, 0xB8CB, 0xDFF5, 0xB8C6, /* 0xD0 */ + 0, 0xB8CC, 0, 0, 0, 0, 0, 0xE3F6, /* 0xE0 */ + 0xBB74, 0, 0, 0xE442, 0xE441, 0, 0xE3FB, 0xBB76, /* 0xE0 */ + 0xE440, 0xE3F7, 0xE3F8, 0xBB6E, 0xBB70, 0, 0xE3FD, 0xE3F5, /* 0xF0 */ + 0xBB72, 0xBB71, 0xE3F9, 0xE3FE, 0xE3FC, 0xBB73, 0xE3FA /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_89[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDBCE, 0xBB6F, 0, 0, 0xE7C2, 0xE7C9, 0xBDC6, /* 0x00 */ + 0, 0xE7CD, 0xBDCA, 0xE7C5, 0xE7C3, 0, 0xE7CC, 0, /* 0x00 */ + 0xBDC5, 0xE7CB, 0xBDC7, 0xBDC8, 0xE7C4, 0xBDC9, 0xE7CA, 0xE7C6, /* 0x10 */ + 0xE7C7, 0xE7C8, 0xBB75, 0, 0, 0, 0xEB70, 0xEB7C, /* 0x10 */ + 0, 0xBFCA, 0xEB77, 0xEB79, 0, 0xBFC8, 0xEB71, 0xEB75, /* 0x20 */ + 0, 0xEB78, 0xBFC6, 0xBFC9, 0xEB7B, 0xEB73, 0xEB74, 0xEB7A, /* 0x20 */ + 0xEB72, 0xEB76, 0xBFC7, 0xEE72, 0, 0xEE71, 0xC1B7, 0xEE77, /* 0x30 */ + 0xC1B9, 0, 0, 0xC1B6, 0xEE73, 0xC1BA, 0xEE74, 0, /* 0x30 */ + 0, 0xEE75, 0xEE78, 0, 0xC1B8, 0, 0xF0D6, 0, /* 0x40 */ + 0, 0xF0D9, 0, 0xF0D3, 0xF0D5, 0, 0, 0xF0D4, /* 0x40 */ + 0xF0D7, 0xF0D8, 0xEE76, 0xF0D2, 0, 0, 0xC3CD, 0xF2EC, /* 0x50 */ + 0xF2EF, 0xF2F1, 0xF2EA, 0xF2EB, 0xF2EE, 0xF2F0, 0xC3CE, 0xC3CC, /* 0x50 */ + 0xC3CB, 0xF2ED, 0xF2E9, 0xF4CA, 0xC4B0, 0, 0xF4CB, 0, /* 0x60 */ + 0, 0xF649, 0xC4FB, 0xF64B, 0xC4FC, 0xF648, 0xF64A, 0xC5A8, /* 0x60 */ + 0, 0xF752, 0xC5A7, 0xF7FD, 0xF7FC, 0, 0xF7FB, 0, /* 0x70 */ + 0, 0xF948, 0xF949, 0xF94B, 0xF94A, 0, 0xCA50, 0xA6E8, /* 0x70 */ + 0, 0xAD6E, 0xD7C5, 0xB5F7, 0, 0xDFFA, 0xC2D0, 0, /* 0x80 */ + 0xF2F2, 0, 0, 0xA8A3, 0, 0, 0, 0xB357, /* 0x80 */ + 0, 0, 0, 0xB356, 0, 0xDBD0, 0xB5F8, 0xDBD2, /* 0x90 */ + 0xDBD1, 0, 0, 0xDFFB, 0xB8D0, 0xE443, 0xE446, 0xE445, /* 0x90 */ + 0, 0xE444, 0xE7CE, 0xE7D0, 0xE7CF, 0, 0xBFCC, 0, /* 0xA0 */ + 0, 0, 0xBFCB, 0, 0xC1BB, 0xEE79, 0xEE7B, 0xEE7A, /* 0xA0 */ + 0, 0, 0xC2D1, 0, 0, 0, 0xF2F4, 0xF2F3, /* 0xB0 */ + 0, 0xF4CC, 0xC4B1, 0, 0, 0xC4FD, 0xF754, 0xF753, /* 0xB0 */ + 0xC65B, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0xA8A4, 0xD0AF, 0xAD6F, 0xD7C8, 0xD7C6, 0, /* 0xD0 */ + 0, 0xD7C7, 0xDBD4, 0xDBD5, 0xE043, 0xDBD3, 0, 0xDFFC, /* 0xD0 */ + 0xE041, 0xE040, 0xE042, 0xB8D1, 0xDFFE, 0xDFFD, 0xE044, 0, /* 0xE0 */ + 0xE449, 0xE447, 0, 0xE448, 0xE7D3, 0xE7D1, 0, 0, /* 0xE0 */ + 0xE7D2, 0xEB7D, 0xEE7C, 0xEE7D, 0xC2D2, 0, 0xF2F5, 0xF4CD, /* 0xF0 */ + 0xC4B2, 0, 0xF64C, 0xF755, 0xC5A9, 0, 0xF7FE, 0xF94C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_8A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8A5, 0, 0xAD71, 0xAD72, 0xD0B0, 0, 0, 0xD0B1, /* 0x00 */ + 0xAD70, 0, 0xB054, 0, 0xB052, 0, 0xB051, 0xB058, /* 0x00 */ + 0xB050, 0xB059, 0xD3DD, 0xB056, 0, 0xB053, 0xB057, 0xB055, /* 0x10 */ + 0xB04F, 0, 0, 0xB35F, 0, 0xB359, 0xD7CC, 0xB35E, /* 0x10 */ + 0, 0, 0xB360, 0xB35A, 0, 0xB35B, 0, 0xD7CA, /* 0x20 */ + 0, 0, 0xB358, 0, 0xD7CB, 0xB35D, 0, 0, /* 0x20 */ + 0xD7C9, 0xB35C, 0, 0, 0xB644, 0, 0xB646, 0, /* 0x30 */ + 0, 0xDBD8, 0xB645, 0xB5F9, 0xB5FD, 0, 0xB8E4, 0xE049, /* 0x30 */ + 0xDBDA, 0xB5FE, 0, 0, 0xDBDD, 0xDBDE, 0xB643, 0, /* 0x40 */ + 0xDBE0, 0, 0xDBE2, 0, 0xDBE3, 0xDBD7, 0xDBD6, 0xDBE4, /* 0x40 */ + 0xB642, 0xDBE1, 0xDBDF, 0, 0xB640, 0xB5FB, 0xB647, 0xDBDB, /* 0x50 */ + 0xDBDC, 0xDBD9, 0, 0xB641, 0, 0, 0xB5FC, 0, /* 0x50 */ + 0xB5FA, 0xE048, 0xB8DF, 0xB8DA, 0, 0, 0xB8D5, 0, /* 0x60 */ + 0xB8E5, 0xB8D6, 0, 0xB8D2, 0xB8E1, 0xB8DE, 0xB8E0, 0, /* 0x60 */ + 0xB8D7, 0xB8DC, 0xB8D3, 0xB8D4, 0xE050, 0xE04D, 0xE045, 0xE04A, /* 0x70 */ + 0, 0xB8E2, 0xE051, 0xB8E3, 0xB8D9, 0, 0, 0xE047, /* 0x70 */ + 0, 0xE04F, 0xE04B, 0xE04E, 0xE04C, 0xB8DD, 0xE046, 0xB8D8, /* 0x80 */ + 0, 0, 0, 0xE44C, 0xBB78, 0xBB7B, 0, 0xE44E, /* 0x80 */ + 0, 0xBBA5, 0xE44D, 0xBB7D, 0, 0xBDCF, 0xE44F, 0, /* 0x90 */ + 0xBBA4, 0xE44B, 0xBBA6, 0, 0, 0, 0xBB79, 0, /* 0x90 */ + 0xB8DB, 0xBB7C, 0, 0xBB7A, 0xBB7E, 0xBBA2, 0xBB77, 0xBBA7, /* 0xA0 */ + 0xBBA3, 0, 0xBBA1, 0xE44A, 0, 0, 0, 0, /* 0xA0 */ + 0xBDD6, 0, 0xBDD2, 0, 0, 0, 0xBDD9, 0, /* 0xB0 */ + 0xE7D6, 0xBDDA, 0xE7E2, 0xE7DB, 0xBDCB, 0xE7E3, 0xE7DD, 0xBDD5, /* 0xB0 */ + 0xE7DE, 0, 0xBDD4, 0xE7E1, 0xBDCE, 0xE7DF, 0xE7D5, 0xBDCD, /* 0xC0 */ + 0xEBAA, 0xBDD3, 0, 0xBDD0, 0, 0xBDD8, 0, 0xE7D4, /* 0xC0 */ + 0, 0xE7D8, 0xBDCC, 0xE7D7, 0xE7D9, 0xE7DA, 0xBDD7, 0xE7DC, /* 0xD0 */ + 0xE7E0, 0xE7E4, 0, 0xBDDB, 0xBFD2, 0xEBA5, 0xEBAB, 0xEBA8, /* 0xD0 */ + 0xEB7E, 0xEBAC, 0xEBA1, 0, 0xEBA7, 0, 0xBFCD, 0xBFD3, /* 0xE0 */ + 0xEBAD, 0, 0, 0xBFCF, 0, 0xBFD9, 0xBFD4, 0xEBAF, /* 0xE0 */ + 0xEBA9, 0xBFD0, 0xEBA2, 0xBFDA, 0xEBA3, 0xEBA4, 0xBFDB, 0xBFD8, /* 0xF0 */ + 0xBDD1, 0, 0xBFCE, 0xEBB0, 0xBFDC, 0, 0xBFD5, 0xEBAE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_8B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBFD1, 0xBFD6, 0xBFD7, 0, 0xC1C3, 0xEEA4, 0xEEAD, 0xEEAA, /* 0x00 */ + 0xEEAC, 0, 0xC1C0, 0xEEA5, 0, 0xEEAB, 0xC1BC, 0xEEA7, /* 0x00 */ + 0xC1C4, 0xEEA3, 0xEEA8, 0xEEAF, 0xEBA6, 0xEEA9, 0xEEA2, 0xC1BD, /* 0x10 */ + 0xEEA1, 0xC1BE, 0xEEB0, 0xC1BF, 0xEEAE, 0xC1C2, 0xEE7E, 0, /* 0x10 */ + 0xC1C1, 0, 0xEEA6, 0xF0DC, 0xF0EA, 0xF0E5, 0xF0E7, 0xF0DB, /* 0x20 */ + 0xC2D3, 0, 0xF0DA, 0xC2D6, 0xC2D5, 0, 0xF0E9, 0xF0E1, /* 0x20 */ + 0xF0DE, 0xF0E4, 0, 0xF0DD, 0, 0xF0DF, 0xF0E8, 0xF0E6, /* 0x30 */ + 0, 0xC2D4, 0xF0ED, 0xF0EB, 0xF0E2, 0xF0EC, 0xF0E3, 0, /* 0x30 */ + 0xF2F9, 0xC3CF, 0xF341, 0, 0, 0xF64F, 0xC3D6, 0xF0E0, /* 0x40 */ + 0xF2F7, 0xC3D2, 0xF2F8, 0xF2FD, 0, 0, 0xC3D4, 0xC3D5, /* 0x40 */ + 0xF2F6, 0xF340, 0xF342, 0xF2FA, 0xF2FC, 0xF2FE, 0xF2FB, 0xF343, /* 0x50 */ + 0xC3D1, 0xC3D7, 0xC3D3, 0, 0xC3D0, 0xF4D0, 0, 0xC4B7, /* 0x50 */ + 0xF4CE, 0, 0, 0xF4D2, 0, 0xF4D3, 0xC4B5, 0xF4D4, /* 0x60 */ + 0xF4D1, 0, 0xF4CF, 0xC4B8, 0xC4B4, 0xF4D5, 0, 0xC4B6, /* 0x60 */ + 0xC4B3, 0, 0, 0, 0xC4FE, 0, 0, 0xC540, /* 0x70 */ + 0xF64E, 0xF64D, 0xF650, 0xF651, 0, 0xC541, 0xF756, 0xF75B, /* 0x70 */ + 0xC5AA, 0, 0xF758, 0, 0xF757, 0xF75A, 0xF759, 0, /* 0x80 */ + 0xF843, 0, 0xC5DC, 0xF842, 0xF840, 0, 0xF841, 0, /* 0x80 */ + 0, 0, 0xC5FE, 0xC5FD, 0xF8C1, 0xF8C2, 0xC640, 0, /* 0x90 */ + 0xF94D, 0xF94E, 0xC667, 0, 0xC66D, 0, 0xF9A9, 0xF9C8, /* 0x90 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_8C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA8A6, /* 0x30 */ + 0, 0xD7CD, 0, 0xD7CE, 0xE052, 0xE450, 0xE7E5, 0xC1C6, /* 0x30 */ + 0, 0xC1C5, 0xF0EE, 0xF344, 0, 0xF844, 0xA8A7, 0xD3DE, /* 0x40 */ + 0xB05A, 0xB361, 0xE054, 0xE053, 0xBDDC, 0xE7E6, 0xBDDD, 0xEEB1, /* 0x40 */ + 0xC2D7, 0, 0, 0, 0xC676, 0xA8A8, 0xCDCB, 0xD3DF, /* 0x50 */ + 0, 0, 0xB362, 0, 0xD7CF, 0xD7D0, 0, 0xDBE5, /* 0x50 */ + 0, 0xB648, 0xB8E6, 0, 0xE056, 0xE055, 0xE057, 0, /* 0x60 */ + 0xE451, 0xE452, 0xBBA8, 0xBFDD, 0xBDDE, 0xBFDE, 0, 0xEEB5, /* 0x60 */ + 0xEEB2, 0xEEB4, 0xEEB3, 0xC1C7, 0, 0xF0EF, 0xF346, 0xF345, /* 0x70 */ + 0xCBA4, 0xB05C, 0xB05B, 0xD3E0, 0, 0xD7D1, 0, 0, /* 0x70 */ + 0xDBE7, 0xDBE6, 0xB649, 0, 0xE059, 0xE05A, 0xE058, 0, /* 0x80 */ + 0, 0xB8E8, 0xB8E7, 0, 0xBBAA, 0xBBA9, 0, 0xE7E7, /* 0x80 */ + 0xEBB3, 0xEBB1, 0xEBB2, 0xBFDF, 0xEEB7, 0xEEB6, 0, 0xF0F2, /* 0x90 */ + 0xF0F1, 0xF0F0, 0xF347, 0, 0xF9AA, 0xA8A9, 0xAD73, 0, /* 0x90 */ + 0xAD74, 0xB05D, 0xB05E, 0xD3E2, 0xD3E1, 0xD7D2, 0, 0xB368, /* 0xA0 */ + 0xB366, 0xB363, 0xB367, 0xB365, 0xB364, 0, 0, 0xB64A, /* 0xA0 */ + 0xDBEA, 0, 0xB8ED, 0xB64C, 0xB651, 0xDBEC, 0xB653, 0xB652, /* 0xB0 */ + 0xB655, 0xDBEB, 0xDBE8, 0xB64F, 0xB64B, 0xB64D, 0xDBE9, 0xB654, /* 0xB0 */ + 0xB650, 0xB64E, 0xB8EF, 0xB8EE, 0xB8EC, 0xB8F0, 0, 0xB8EA, /* 0xC0 */ + 0xB8EB, 0, 0xB8E9, 0, 0xE05B, 0, 0, 0xE454, /* 0xC0 */ + 0, 0xBBAC, 0xBBAD, 0xBBAB, 0, 0xE453, 0, 0xE455, /* 0xD0 */ + 0, 0xE7EA, 0xE7EC, 0, 0xBDE7, 0xE7ED, 0xBDE0, 0xE7E9, /* 0xD0 */ + 0xBDDF, 0xBDE9, 0xBDE5, 0xBDE6, 0xBDE2, 0xE7E8, 0xBDE1, 0xE7EE, /* 0xE0 */ + 0xE7EB, 0, 0xBDE8, 0, 0xBDE3, 0xBDE4, 0xEBB5, 0, /* 0xE0 */ + 0xEBB7, 0xEBB6, 0, 0xEBB8, 0xBFE0, 0xEBB4, 0, 0, /* 0xF0 */ + 0xC1CB, 0xEEB8, 0xC1C8, 0xC1CC, 0xC1CA, 0xC1C9, 0xF0F3 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_8D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF0F6, 0, 0xF0F5, 0, 0xF0F4, 0xC2D8, 0xF348, 0xF349, /* 0x00 */ + 0xC3D8, 0xF34A, 0xC3D9, 0, 0, 0xC4BA, 0, 0xC4B9, /* 0x00 */ + 0xF652, 0, 0, 0xC542, 0xF653, 0xF75C, 0xC5AB, 0xC5AC, /* 0x10 */ + 0, 0xF845, 0, 0xC642, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0xA8AA, 0, 0xB36A, 0xB369, /* 0x60 */ + 0xE05C, 0xE05D, 0, 0xBBAE, 0xEBB9, 0xBDEA, 0xEBBA, 0xEEB9, /* 0x60 */ + 0xA8AB, 0, 0xD0B2, 0xAD76, 0xAD75, 0, 0xD3E3, 0xB05F, /* 0x70 */ + 0xD3E4, 0xD7D5, 0, 0xD7D4, 0, 0xD7D3, 0, 0, /* 0x70 */ + 0xDBEE, 0xB658, 0, 0, 0xDBED, 0xB657, 0, 0, /* 0x80 */ + 0, 0xDBEF, 0xB656, 0, 0xE05F, 0xE062, 0xE060, 0xE061, /* 0x80 */ + 0xE065, 0xE05E, 0xE066, 0xE063, 0xE064, 0xBBB0, 0xE456, 0, /* 0x90 */ + 0, 0xBBAF, 0, 0xE7F2, 0xE7F0, 0, 0, 0xBDEB, /* 0x90 */ + 0xE7EF, 0xE7F1, 0, 0xBDEC, 0, 0xEBBB, 0, 0xEBBC, /* 0xA0 */ + 0xC1CD, 0, 0xF34C, 0xF34E, 0xF34B, 0xF34D, 0xF4D6, 0xF654, /* 0xA0 */ + 0, 0, 0xF96F, 0xA8AC, 0xAD77, 0xD3E5, 0xD3E7, 0xD3E6, /* 0xB0 */ + 0, 0xD7D8, 0xB36C, 0, 0xD7D6, 0, 0xB36B, 0xD7D9, /* 0xB0 */ + 0, 0xD7DA, 0xD7D7, 0, 0, 0xDBFB, 0xB660, 0xDBF3, /* 0xC0 */ + 0xDBF9, 0, 0, 0xB65B, 0xB65E, 0xDBF2, 0xB659, 0xDBF6, /* 0xC0 */ + 0xE06C, 0xB65D, 0, 0xDBF1, 0, 0xDBF7, 0xDBF4, 0xDBFA, /* 0xD0 */ + 0xDBF0, 0xDBF8, 0xB65C, 0xB65F, 0xDBF5, 0xB65A, 0, 0xB8F2, /* 0xD0 */ + 0xE068, 0xB8F1, 0xE06F, 0xE06E, 0xB8F8, 0, 0xB8F9, 0xE070, /* 0xE0 */ + 0xB8F3, 0xE06D, 0xB8F7, 0xE072, 0xE069, 0, 0xE06B, 0xB8F4, /* 0xE0 */ + 0xE067, 0xE06A, 0xE071, 0xB8F5, 0xE073, 0, 0, 0, /* 0xF0 */ + 0, 0, 0xB8F6, 0, 0xBBB1, 0xE45B, 0xE461, 0xE459 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_8E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE462, 0, 0xE458, 0xE45D, 0xE463, 0xE460, 0xE45F, 0xE45E, /* 0x00 */ + 0, 0xE457, 0xE45C, 0, 0, 0xE45A, 0, 0xBDF1, /* 0x00 */ + 0xBDEE, 0xE7FB, 0xE841, 0xE843, 0xE840, 0xE7F8, 0xE7FA, 0xE845, /* 0x10 */ + 0xE842, 0xE7FC, 0xE846, 0xE7F9, 0xE844, 0xBDEF, 0xBDF5, 0xBDF3, /* 0x10 */ + 0xE7F3, 0xBDF4, 0xBDF0, 0xE7F4, 0xE7F6, 0xE7F5, 0xE7FD, 0xE7FE, /* 0x20 */ + 0, 0xBDF2, 0, 0xBDED, 0, 0, 0xE7F7, 0, /* 0x20 */ + 0xEBC6, 0xBFE2, 0, 0xEBBD, 0xBFE3, 0xBFE6, 0xEBC2, 0, /* 0x30 */ + 0xEBBF, 0xBFE5, 0, 0, 0xEBC3, 0xEBC4, 0xEBBE, 0xEBC7, /* 0x30 */ + 0xEBC0, 0xEBC5, 0xBFE4, 0, 0xBFE1, 0xEBC1, 0, 0xEEBF, /* 0x40 */ + 0xC1D0, 0xC1CE, 0xC1D1, 0xC1CF, 0xEEBE, 0xEEBB, 0xEEBA, 0, /* 0x40 */ + 0xEEBD, 0, 0, 0xEEBC, 0xF145, 0xC2DE, 0xF0FB, 0xF0FA, /* 0x50 */ + 0, 0xC2D9, 0xF141, 0xF140, 0xF0F7, 0xF143, 0xF0FC, 0xC2DD, /* 0x50 */ + 0xF0F9, 0xF142, 0xF0F8, 0xC2DA, 0xC2DC, 0xF0FD, 0xC2DB, 0xF0FE, /* 0x60 */ + 0, 0xF144, 0xF352, 0, 0xC3DE, 0xF34F, 0, 0xF353, /* 0x60 */ + 0, 0, 0xC3DB, 0xF351, 0xC3E0, 0, 0xC3DD, 0, /* 0x70 */ + 0xF350, 0, 0xC3DF, 0xF354, 0xC3DA, 0, 0, 0, /* 0x70 */ + 0, 0xC4BC, 0xC4BE, 0, 0xF4D9, 0xC4BD, 0xF4D7, 0xC3DC, /* 0x80 */ + 0xF4D8, 0xC4BB, 0xC543, 0xC545, 0xF656, 0xC544, 0xF655, 0, /* 0x80 */ + 0xF761, 0xC5AD, 0xF760, 0xC5AE, 0xF75E, 0xF75D, 0xF762, 0xF763, /* 0x90 */ + 0xF846, 0, 0xF75F, 0, 0, 0xF8C6, 0xF8C3, 0xF8C4, /* 0x90 */ + 0xF8C5, 0xC65C, 0, 0xF951, 0xF950, 0xF94F, 0xF970, 0, /* 0xA0 */ + 0xF9BE, 0xF9AB, 0xC66E, 0xA8AD, 0xB060, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xB8FA, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0xBDF6, 0, 0, 0xEBC8, 0, 0, /* 0xB0 */ + 0xC2DF, 0, 0xF355, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0xF9AC, 0xA8AE, 0xAAEE, 0xAD79, 0xAD78, 0, 0xB063, /* 0xC0 */ + 0, 0xD3E8, 0xB061, 0xD3E9, 0xB062, 0, 0, 0xD7DF, /* 0xD0 */ + 0xD7DB, 0, 0, 0xB36D, 0xD7DE, 0xD7DD, 0xD7DC, 0xB36E, /* 0xD0 */ + 0xD7E0, 0xD7E1, 0, 0, 0, 0xDC43, 0xDC41, 0xDC45, /* 0xE0 */ + 0xDC46, 0xDC4C, 0, 0xDC48, 0xDC4A, 0, 0xDC42, 0xDBFC, /* 0xE0 */ + 0, 0xDC49, 0, 0, 0xDC4B, 0xDC44, 0xDC47, 0xDBFD, /* 0xF0 */ + 0xB662, 0xDC40, 0xDBFE, 0xB661, 0xB663, 0, 0xB8FD, 0xE075 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_8F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE077, 0xE076, 0xE07B, 0xB8FB, 0, 0xE078, 0xE074, 0xE079, /* 0x00 */ + 0xE07A, 0xB8FC, 0xB8FE, 0xE07C, 0, 0xE467, 0xE466, 0, /* 0x00 */ + 0xE464, 0xE465, 0xBBB3, 0xBBB5, 0xBBB2, 0xBBB4, 0xE84D, 0xE84E, /* 0x10 */ + 0xE849, 0, 0xE84A, 0xBDF8, 0xBDFD, 0xBDF7, 0xBDFE, 0xBDF9, /* 0x10 */ + 0xE84B, 0, 0, 0xE84C, 0xE848, 0xBE40, 0xBDFB, 0, /* 0x20 */ + 0, 0xBDFA, 0xBDFC, 0, 0xE847, 0, 0xEBCA, 0xBFE8, /* 0x20 */ + 0, 0, 0xEBCC, 0xBFEA, 0xEBCF, 0xEBCB, 0xEBC9, 0xEBCE, /* 0x30 */ + 0xBFE9, 0xEBCD, 0, 0xBFE7, 0, 0, 0xC1D3, 0xC1D6, /* 0x30 */ + 0xEEC1, 0, 0xC1D4, 0xEEC0, 0xC1D2, 0xC1D5, 0xF146, 0xF147, /* 0x40 */ + 0xF148, 0xC2E0, 0, 0xF149, 0, 0xC2E1, 0xC3E2, 0xF358, /* 0x40 */ + 0xF359, 0xF357, 0xF356, 0xF35A, 0xC3E1, 0xF4DD, 0xF4DB, 0xF4DC, /* 0x50 */ + 0xF4DE, 0xF4DA, 0xF4DF, 0xF658, 0, 0xF659, 0xF657, 0xC546, /* 0x50 */ + 0xF764, 0xC5AF, 0xF765, 0xF848, 0xF847, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0xA8AF, 0xB664, 0, 0, 0xB940, /* 0x90 */ + 0, 0, 0, 0xBBB6, 0, 0, 0xBFEC, 0, /* 0xA0 */ + 0xBFEB, 0, 0, 0, 0, 0xC3E3, 0xC47C, 0xC547, /* 0xA0 */ + 0xA8B0, 0xB064, 0xB941, 0, 0xF35B, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0xCBA6, /* 0xB0 */ + 0, 0, 0xA8B1, 0, 0xA8B4, 0xA8B3, 0xA8B2, 0, /* 0xC0 */ + 0, 0xCBA5, 0, 0xCDCD, 0, 0xCDCF, 0xAAEF, 0, /* 0xC0 */ + 0, 0xAAF1, 0xCDCC, 0xCDCE, 0xAAF0, 0xCDD1, 0xCDD0, 0xCDD2, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xD0B6, 0xD0B4, 0xAD7C, 0xD0B3, 0xADA3, 0xAD7E, 0xAD7B, 0, /* 0xE0 */ + 0xADA4, 0, 0xAD7D, 0xADA2, 0, 0xADA1, 0xD0B5, 0, /* 0xE0 */ + 0xAD7A, 0, 0, 0, 0xB06A, 0xD3EB, 0xD3F1, 0xB067, /* 0xF0 */ + 0xB06E, 0, 0xB069, 0xD3EE, 0xD3F0, 0xB06C, 0xD3EA, 0xD3ED /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_90[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xB068, 0xB065, 0xD3EC, 0xB06B, 0xD3EF, 0xB06D, 0xB066, 0, /* 0x00 */ + 0, 0, 0, 0xD7E3, 0xD7E6, 0xB370, 0, 0xB37A, /* 0x00 */ + 0xB376, 0xD7E4, 0, 0, 0xB37E, 0xB377, 0xB37C, 0xB372, /* 0x10 */ + 0, 0xB36F, 0xB371, 0xB37D, 0xD7E5, 0xB375, 0xB378, 0xB374, /* 0x10 */ + 0xB379, 0xD7E7, 0xB37B, 0xB373, 0xD7E2, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0xDC4D, 0xB665, 0xDC4F, /* 0x20 */ + 0, 0xB667, 0xB669, 0, 0xDC4E, 0xB666, 0xB66A, 0, /* 0x30 */ + 0xB668, 0, 0, 0, 0xB947, 0xE0A3, 0xB94F, 0xE07E, /* 0x30 */ + 0, 0xB950, 0xB945, 0, 0xE0A1, 0, 0, 0xB94A, /* 0x40 */ + 0, 0xE0A2, 0xB943, 0xB942, 0, 0xB94D, 0xB94C, 0xB94B, /* 0x40 */ + 0xB949, 0xB94E, 0xE07D, 0xB944, 0xB946, 0xB948, 0, 0, /* 0x50 */ + 0xBBB8, 0xBBBB, 0, 0xBBBF, 0xBBB9, 0xBBBE, 0xBBBC, 0, /* 0x50 */ + 0xBBB7, 0, 0xBBBD, 0xBBBA, 0, 0, 0, 0xE852, /* 0x60 */ + 0xBE43, 0xBE41, 0, 0xE853, 0, 0xBE44, 0xBE42, 0xE851, /* 0x60 */ + 0xE850, 0, 0xBFF0, 0xE84F, 0xBFEE, 0xBFED, 0xEBD0, 0xBE45, /* 0x70 */ + 0xBFEF, 0xEBD1, 0xBFF2, 0xEBD2, 0xBFF1, 0xC1D8, 0xEEC3, 0xC1D7, /* 0x70 */ + 0xC1DC, 0xC1DA, 0xC1DB, 0xC2E3, 0xC1D9, 0xEEC2, 0xEBD3, 0xC2E2, /* 0x80 */ + 0xC2E4, 0, 0xC3E4, 0xC3E5, 0, 0xF4E0, 0, 0xC5DE, /* 0x80 */ + 0xC5DD, 0xA8B6, 0, 0, 0xCA55, 0xB06F, 0, 0xCA52, /* 0x90 */ + 0xCA53, 0xCA51, 0, 0xCA54, 0, 0, 0xCBAA, 0xCBA7, /* 0x90 */ + 0xCBAC, 0xCBA8, 0xA8B7, 0xA8BA, 0, 0xCBA9, 0xA8B9, 0xCBAB, /* 0xA0 */ + 0, 0, 0xA8B8, 0, 0, 0, 0, 0xCDD5, /* 0xA0 */ + 0xCDD7, 0xAAF4, 0xCDD3, 0xCDD6, 0xCDD4, 0xAAF2, 0xAAF5, 0, /* 0xB0 */ + 0xAAF3, 0, 0, 0, 0, 0xD0B8, 0xD0BC, 0xD0B9, /* 0xB0 */ + 0, 0xADA7, 0, 0xADA8, 0, 0xD0BB, 0, 0xD0BD, /* 0xC0 */ + 0xD0BF, 0, 0xADA5, 0xD0BE, 0, 0, 0xADA6, 0, /* 0xC0 */ + 0, 0, 0, 0, 0xD7EE, 0xD0BA, 0xD3F2, 0xD3FB, /* 0xD0 */ + 0xD3F9, 0xD3F4, 0xD3F5, 0xD3FA, 0xD3FC, 0xB071, 0, 0xD3F7, /* 0xD0 */ + 0xD3F3, 0xB070, 0xB072, 0xD3F6, 0xD3FD, 0xD3F8, 0, 0, /* 0xE0 */ + 0xB3A1, 0xD7F1, 0xD7E9, 0xD7EF, 0xD7F0, 0xB3A2, 0, 0xD7E8, /* 0xE0 */ + 0xD7EA, 0xD0B7, 0xD7EC, 0xD7ED, 0xD7EB, 0xB66C, 0, 0, /* 0xF0 */ + 0, 0xDC56, 0xEBD4, 0xDC57, 0xDC54, 0xB3A3, 0xB66E, 0xDC53 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_91[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDC59, 0xDC58, 0xB66B, 0xDC5C, 0xDC52, 0xDC5B, 0xDC50, 0xDC5A, /* 0x00 */ + 0xDC55, 0xB66D, 0, 0xE0AA, 0, 0xE0A5, 0xE0AB, 0xE0A6, /* 0x00 */ + 0xE0A4, 0xE0A7, 0xB951, 0, 0xE0A9, 0, 0xE0A8, 0xB952, /* 0x10 */ + 0xBBC1, 0xBBC0, 0xE46E, 0xE471, 0xE469, 0xE46D, 0xBBC2, 0xE46C, /* 0x10 */ + 0xE46A, 0xE470, 0xE46B, 0xE468, 0xE46F, 0, 0xE859, 0xBE48, /* 0x20 */ + 0xF14A, 0xE856, 0xE857, 0xE855, 0xDC51, 0xBE47, 0xE85A, 0xE854, /* 0x20 */ + 0xBE46, 0xBE49, 0xE858, 0xEBD5, 0xBFF3, 0xEBD6, 0xEBD7, 0, /* 0x30 */ + 0xEEC4, 0xC1DD, 0xF14B, 0xF14C, 0, 0, 0xF14D, 0xF35D, /* 0x30 */ + 0xF35C, 0xF4E2, 0, 0xF4E1, 0xF65B, 0xF65C, 0xF65A, 0xF766, /* 0x40 */ + 0xC5B0, 0xA8BB, 0xADAA, 0xADA9, 0xB075, 0xB074, 0xD440, 0xD441, /* 0x40 */ + 0xD3FE, 0, 0xB073, 0xD7F5, 0, 0xD7F6, 0xD7F2, 0xB3A4, /* 0x50 */ + 0xD7F3, 0, 0xD7F4, 0, 0, 0, 0, 0xDC5F, /* 0x50 */ + 0xDC61, 0xDC5D, 0xDC60, 0xB66F, 0xDC5E, 0xB670, 0, 0, /* 0x60 */ + 0xDD73, 0xB955, 0xB954, 0, 0xB953, 0, 0xE0AC, 0xE0AD, /* 0x60 */ + 0, 0, 0xE473, 0xE475, 0xBBC6, 0xBBC3, 0, 0xBBC5, /* 0x70 */ + 0xBBC4, 0xE474, 0xE472, 0, 0, 0, 0, 0, /* 0x70 */ + 0xE861, 0xE85E, 0xE85F, 0xBE4D, 0xE860, 0xE85B, 0xE85C, 0xBE4A, /* 0x80 */ + 0, 0xBE4B, 0xE85D, 0xBE4C, 0, 0xEBDB, 0, 0xEBDC, /* 0x80 */ + 0xEBD9, 0xEBDA, 0xBFF4, 0xEBD8, 0, 0, 0, 0, /* 0x90 */ + 0, 0xEEC8, 0xEEC5, 0xEEC7, 0xC1E0, 0xEECB, 0xC1DF, 0xEEC9, /* 0x90 */ + 0xEECC, 0xEECA, 0xEEC6, 0xC1DE, 0, 0xF14F, 0, 0xF150, /* 0xA0 */ + 0xF14E, 0, 0xF152, 0xC2E5, 0xC2E6, 0xF35F, 0xC3E7, 0xF151, /* 0xA0 */ + 0xF35E, 0xC3E6, 0xF4E5, 0xF4E6, 0xC4BF, 0xF4E4, 0, 0xF4E3, /* 0xB0 */ + 0, 0xF65D, 0xC548, 0, 0xF849, 0xF8C8, 0xF8C7, 0, /* 0xB0 */ + 0xC643, 0xC65D, 0xF8C9, 0xF971, 0, 0xC66F, 0xA8BC, 0xAAF6, /* 0xC0 */ + 0, 0xB956, 0, 0xC4C0, 0xA8BD, 0xADAB, 0xB3A5, 0xB671, /* 0xC0 */ + 0xC2E7, 0xAAF7, 0, 0xD0C1, 0xD0C0, 0xD442, 0, 0xB078, /* 0xD0 */ + 0xB076, 0xB07A, 0xD444, 0, 0xB079, 0xB077, 0, 0, /* 0xD0 */ + 0, 0, 0xD443, 0xB3A8, 0xD7FC, 0, 0xB3A7, 0xB3A9, /* 0xE0 */ + 0xD842, 0xB3AB, 0xD7FE, 0xD840, 0xD7F7, 0xB3AA, 0xD843, 0, /* 0xE0 */ + 0, 0xD7F9, 0, 0xD7FA, 0xD7F8, 0xB3A6, 0, 0xD841, /* 0xF0 */ + 0xD7FB, 0xD7FD, 0, 0, 0, 0xDC6D, 0, 0xDC6C /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_92[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xDC6A, 0xDC62, 0xDC71, 0xDC65, 0xDC6F, 0xDC76, 0xDC6E, 0xB679, /* 0x00 */ + 0, 0xB675, 0xDC63, 0, 0xDC69, 0xB677, 0, 0xDC68, /* 0x00 */ + 0xB678, 0xB67A, 0xDC6B, 0, 0xB672, 0xB673, 0xDC77, 0xDC75, /* 0x10 */ + 0, 0xDC74, 0xDC66, 0, 0xDC72, 0, 0xB676, 0, /* 0x10 */ + 0, 0, 0, 0xB674, 0xDC73, 0xDC64, 0xDC67, 0xDC70, /* 0x20 */ + 0, 0, 0, 0, 0, 0xE4BA, 0xE0B7, 0, /* 0x20 */ + 0xE0B0, 0xE0C3, 0xE0CC, 0xE0B3, 0xB961, 0, 0xE0C0, 0xB957, /* 0x30 */ + 0xB959, 0xB965, 0xE0B1, 0, 0, 0xB95A, 0xB95C, 0xB966, /* 0x30 */ + 0xB95B, 0, 0, 0, 0, 0xB964, 0xE0B9, 0, /* 0x40 */ + 0xE0AE, 0xB962, 0xE0B8, 0xB95E, 0xE0CA, 0xB963, 0xE0C8, 0xE0BC, /* 0x40 */ + 0xE0C6, 0xB960, 0xE0AF, 0xE0C9, 0xE0C4, 0, 0xE0CB, 0xB958, /* 0x50 */ + 0, 0, 0xB967, 0xB95D, 0, 0, 0xE0B5, 0, /* 0x50 */ + 0xE0BD, 0xE0C1, 0, 0xE0C5, 0xB95F, 0xE0B4, 0xE0B2, 0xE0BE, /* 0x60 */ + 0, 0, 0, 0, 0xE0BB, 0xE0BA, 0, 0xE0BF, /* 0x60 */ + 0xE0C2, 0, 0xE0C7, 0, 0, 0, 0xE478, 0, /* 0x70 */ + 0xBBC7, 0xE4A4, 0xE47A, 0xBBCC, 0xBBD0, 0xE4AD, 0xE4B5, 0xE4A6, /* 0x70 */ + 0xBBC8, 0, 0xE4AA, 0xE0B6, 0, 0xBBC9, 0xE4B1, 0xE4B6, /* 0x80 */ + 0xE4AE, 0, 0xE4B0, 0xE4B9, 0xE4B2, 0xE47E, 0xE4A9, 0, /* 0x80 */ + 0, 0xBBD1, 0, 0xBBCD, 0xE47C, 0xE4AB, 0xBBCB, 0xE4A5, /* 0x90 */ + 0xBBCA, 0xE4B3, 0xE4A2, 0xE479, 0xBBCE, 0xE4B8, 0, 0, /* 0x90 */ + 0xE47B, 0xE4AF, 0xE4AC, 0xE4A7, 0xE477, 0xE476, 0xE4A1, 0xE4B4, /* 0xA0 */ + 0xBBCF, 0xE4B7, 0xE47D, 0xE4A3, 0xBE52, 0, 0, 0, /* 0xA0 */ + 0, 0, 0xBE5A, 0xBE55, 0xE8A4, 0xE8A1, 0xE867, 0xBE50, /* 0xB0 */ + 0, 0xF9D7, 0, 0xBE4F, 0xBE56, 0, 0, 0, /* 0xB0 */ + 0xE865, 0xBE54, 0xE871, 0xE863, 0xE864, 0xBE4E, 0xE8A3, 0xBE58, /* 0xC0 */ + 0xE874, 0xE879, 0xE873, 0xEBEE, 0xE86F, 0xE877, 0xE875, 0xE868, /* 0xC0 */ + 0xE862, 0xE87D, 0xBE57, 0xE87E, 0, 0xE878, 0, 0xE86D, /* 0xD0 */ + 0xE86B, 0xE866, 0, 0, 0, 0xE86E, 0xE87B, 0xE86A, /* 0xD0 */ + 0xE87A, 0xE8A2, 0, 0, 0xBE53, 0, 0xE876, 0xE87C, /* 0xE0 */ + 0xE872, 0xE86C, 0xBE51, 0, 0, 0, 0xE4A8, 0xE870, /* 0xE0 */ + 0xBE59, 0xE869, 0, 0, 0, 0, 0, 0xEBF4, /* 0xF0 */ + 0xBFF7, 0xEBF3, 0xEBF0, 0xEC44, 0xBFFB, 0, 0xEC41, 0xEBF8 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_93[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEC43, 0xEBE9, 0xEBF6, 0, 0xBFFD, 0, 0xEBE1, 0, /* 0x00 */ + 0xEBDF, 0xEC42, 0, 0xEC40, 0xEBFE, 0xEBED, 0xEBEC, 0xEBE2, /* 0x00 */ + 0xC040, 0, 0xEBE8, 0xEBF2, 0xEBFD, 0xC043, 0xEC45, 0, /* 0x10 */ + 0xC1E8, 0xC045, 0xBFFE, 0xEBE6, 0, 0xEBEF, 0xEBDE, 0xEBE0, /* 0x10 */ + 0xBFF5, 0xC042, 0xBFFA, 0xEBE7, 0xEBF7, 0xEBF1, 0xC041, 0xEBDD, /* 0x20 */ + 0xC1E3, 0xEBF9, 0xEBFC, 0xBFFC, 0, 0xEBEB, 0xC044, 0xBFF9, /* 0x20 */ + 0, 0, 0, 0xBFF8, 0xEBF5, 0xEBFB, 0xBFF6, 0, /* 0x30 */ + 0xEBE4, 0xEBFA, 0, 0, 0xEBE5, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0xEBEA, 0xEED2, /* 0x40 */ + 0, 0xEED7, 0xC1E5, 0xC1E7, 0xEEDD, 0xC1E1, 0xEEEC, 0xEEE3, /* 0x40 */ + 0xEED8, 0xEED9, 0xEEE2, 0, 0xC1EE, 0xEEE1, 0xEED1, 0xEEE0, /* 0x50 */ + 0xEED4, 0xEEED, 0xC1ED, 0xC1EB, 0xEED5, 0, 0xEEE8, 0, /* 0x50 */ + 0xEEDA, 0xEEE7, 0, 0xEEE9, 0xEED0, 0xC1E6, 0, 0xEEEA, /* 0x60 */ + 0, 0, 0xEEDE, 0, 0xC1EA, 0xEEDB, 0, 0, /* 0x60 */ + 0xC1EC, 0xEEE4, 0, 0, 0, 0xC1E4, 0xEED6, 0xEEE5, /* 0x70 */ + 0, 0xEEDF, 0xEBE3, 0xEEE6, 0xEED3, 0, 0xC1E9, 0, /* 0x70 */ + 0xEEEB, 0, 0xC1E2, 0xEECE, 0, 0, 0, 0, /* 0x80 */ + 0xF160, 0xF159, 0xC2E9, 0, 0xF154, 0xF163, 0xF15B, 0xEEDC, /* 0x80 */ + 0, 0xF165, 0xF155, 0, 0xC2E8, 0xF15F, 0xC2EA, 0xC2F2, /* 0x90 */ + 0xC2F0, 0xF161, 0xC2F1, 0xF157, 0, 0xF158, 0xF15D, 0xF162, /* 0x90 */ + 0, 0xEECD, 0xC2EB, 0xF16A, 0xF167, 0xF16B, 0xF15E, 0xF15A, /* 0xA0 */ + 0xF168, 0xF36A, 0xF15C, 0, 0xC2EE, 0, 0xC2ED, 0xEECF, /* 0xA0 */ + 0xC2EF, 0xF164, 0xF166, 0xC2EC, 0xF169, 0xF153, 0, 0xF156, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0xF373, 0, 0xF363, 0xC3EB, 0xF371, 0, 0, 0xF361, /* 0xC0 */ + 0xC3EC, 0, 0xF36C, 0, 0xF368, 0xC3F1, 0xF372, 0xF362, /* 0xC0 */ + 0xF365, 0xC3E9, 0xF374, 0, 0xF36D, 0xF370, 0xC3EF, 0xC3F4, /* 0xD0 */ + 0xC3F2, 0xF369, 0xF364, 0, 0xC3ED, 0xC3EE, 0xF360, 0xC3EA, /* 0xD0 */ + 0, 0xC3E8, 0xC3F0, 0xF36F, 0xC3F3, 0, 0xF36B, 0xF375, /* 0xE0 */ + 0xC3F5, 0, 0, 0, 0xF367, 0, 0xF36E, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xF4F3, 0xF542, 0xF4F5, /* 0xF0 */ + 0xF4FC, 0xF366, 0xF4FA, 0xF4E9, 0xF540, 0xC4C3, 0xF4ED, 0xF4FE /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_94[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF4F4, 0, 0, 0xC4C2, 0, 0, 0xF544, 0xF4F6, /* 0x00 */ + 0, 0xF4FB, 0xF4FD, 0xF4E7, 0xF541, 0xF4F2, 0xF4F7, 0xF4EB, /* 0x00 */ + 0xF4EF, 0xF543, 0xF4F9, 0xF4E8, 0xF4EC, 0xF4EE, 0xF4F8, 0, /* 0x10 */ + 0xC4C1, 0xF4F1, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0xF4EA, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0xF4F0, 0xF661, 0xF666, 0xC54F, 0xF668, 0, 0xC549, 0, /* 0x20 */ + 0xF664, 0xF66A, 0xC54E, 0xC54A, 0, 0xC54B, 0xF660, 0xF667, /* 0x30 */ + 0xC54D, 0xF665, 0xC54C, 0xF65F, 0xF663, 0xF662, 0, 0xF65E, /* 0x30 */ + 0xF669, 0, 0, 0, 0xC5B1, 0xF76D, 0xF770, 0xF76C, /* 0x40 */ + 0xF76E, 0xF76F, 0xF769, 0xF76A, 0xF767, 0, 0, 0xF76B, /* 0x40 */ + 0xF768, 0xC5B2, 0xC5B3, 0, 0, 0xF84B, 0, 0xF84D, /* 0x50 */ + 0, 0, 0, 0, 0, 0xF84C, 0xF84E, 0, /* 0x50 */ + 0xC5E0, 0, 0xF84A, 0xC5DF, 0xC5E1, 0, 0, 0, /* 0x60 */ + 0xF8CB, 0xF8CC, 0xC644, 0xF8CA, 0, 0xF953, 0xF952, 0xF954, /* 0x60 */ + 0xC65F, 0xF955, 0xC65E, 0xF956, 0xF972, 0xF975, 0xF974, 0xC668, /* 0x70 */ + 0xF973, 0, 0, 0, 0xC672, 0xC670, 0xC671, 0xC677, /* 0x70 */ + 0xF9C0, 0xF9C1, 0xF9BF, 0xF9C9 /* 0x80 */ + /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_95[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xAAF8, /* 0x70 */ + 0, 0, 0xD844, 0xDC78, 0xE8A5, 0xF376, 0, 0, /* 0x70 */ + 0xAAF9, 0, 0xADAC, 0xB07B, 0, 0, 0xD845, 0, /* 0x80 */ + 0xD846, 0xB3AC, 0, 0xB67D, 0xDC7A, 0xDC79, 0xB6A3, 0xB67C, /* 0x80 */ + 0xDC7B, 0xB67E, 0xB6A2, 0xB6A1, 0xB67B, 0, 0, 0, /* 0x90 */ + 0xB968, 0, 0, 0xE0D0, 0xE0CE, 0, 0xE0CF, 0xE0CD, /* 0x90 */ + 0, 0xBBD2, 0, 0xBBD5, 0xBBD7, 0xBBD6, 0, 0, /* 0xA0 */ + 0xBBD3, 0xBBD4, 0, 0xE8A7, 0xE8A6, 0xBE5B, 0xE8A8, 0, /* 0xA0 */ + 0xE8A9, 0xBE5C, 0, 0, 0, 0xEC4D, 0xEC4B, 0xEEF3, /* 0xB0 */ + 0, 0xEC49, 0xEC4A, 0xC046, 0xEC46, 0xEC4E, 0xEC48, 0xEC4C, /* 0xB0 */ + 0xEEEF, 0, 0, 0xEEF1, 0, 0xEEF2, 0xC1F3, 0xEEEE, /* 0xC0 */ + 0xC1F2, 0xEEF0, 0xC1EF, 0xC1F0, 0xC1F1, 0xEC47, 0, 0, /* 0xC0 */ + 0xC2F5, 0xF16E, 0xF16C, 0xF16D, 0xC2F3, 0xC2F6, 0xC2F4, 0, /* 0xD0 */ + 0, 0, 0xF377, 0xF378, 0xC3F6, 0, 0xF545, 0xF547, /* 0xD0 */ + 0xF546, 0xC4C4, 0xC550, 0xF66D, 0xF66C, 0xF66B /* 0xE0 */ + /* 0xE0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_96[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x10 */ + 0xAAFA, 0, 0xC9AA, 0, /* 0x10 */ + 0xCA58, 0xA6E9, 0xCA56, 0xCA59, 0xCA57, 0, 0, 0, /* 0x20 */ + 0xCBAE, 0, 0xA8C1, 0, 0xA8C2, 0xCBB0, 0xA8BF, 0xCBAF, /* 0x20 */ + 0xCBAD, 0xA8C0, 0xA8BE, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xCDD8, 0xCDDB, 0xAAFD, 0xCDDA, 0xCDD9, 0, 0xAAFC, /* 0x30 */ + 0xAAFB, 0, 0xAB40, 0xCDDC, 0xAAFE, 0, 0, 0, /* 0x40 */ + 0, 0, 0xD0C6, 0xADAE, 0xADAF, 0xADB0, 0xD0C7, 0xD0C3, /* 0x40 */ + 0xADAD, 0xD0C4, 0, 0xD0C5, 0xD0C2, 0, 0, 0, /* 0x50 */ + 0xB0A4, 0, 0, 0xB0A1, 0xD445, 0xB0A2, 0xB0A5, 0xD446, /* 0x50 */ + 0, 0xB07E, 0xB07C, 0xB07D, 0xB0A3, 0, 0, 0, /* 0x60 */ + 0, 0, 0xB3AD, 0xD849, 0xB3B5, 0xD848, 0, 0xD84B, /* 0x60 */ + 0xB3B1, 0xD84A, 0xB6AB, 0xB3AF, 0xB3B2, 0xB3AE, 0xB3B3, 0xB3B4, /* 0x70 */ + 0xB3B0, 0, 0, 0, 0xD847, 0xB6A7, 0xDC7D, 0, /* 0x70 */ + 0xDCA3, 0, 0, 0xDCA2, 0xB6AC, 0xB6A8, 0xB6A9, 0xDC7C, /* 0x80 */ + 0xDC7E, 0xDCA1, 0xB6A4, 0xB6A6, 0, 0xB6AA, 0xB6A5, 0, /* 0x80 */ + 0, 0xE0D3, 0xE0D1, 0xE0D2, 0xB96A, 0xB96B, 0, 0xE0D4, /* 0x90 */ + 0xB969, 0xBBD8, 0, 0xBBDA, 0xBBD9, 0, 0xE4BB, 0, /* 0x90 */ + 0, 0xE4BC, 0xE8AB, 0, 0xE8AA, 0, 0, 0xC047, /* 0xA0 */ + 0xC048, 0xEC4F, 0xC049, 0, 0xEEF6, 0, 0xEEF4, 0, /* 0xA0 */ + 0xEEF5, 0xC1F4, 0, 0xF16F, 0xC3F7, 0, 0, 0, /* 0xB0 */ + 0xC1F5, 0xAB41, 0, 0xB0A6, 0xD447, 0, 0, 0xD84C, /* 0xB0 */ + 0xB3B6, 0xB6AD, 0xDCA4, 0xDCA6, 0xB6AF, 0xB6AE, 0xB6B0, 0xB6B1, /* 0xC0 */ + 0xDCA5, 0xB96E, 0xB96F, 0xB96D, 0xBBDB, 0xB96C, 0xE0D5, 0, /* 0xC0 */ + 0, 0, 0xBBDC, 0xE8AC, 0xEC50, 0xC04A, 0xC1F6, 0xF170, /* 0xD0 */ + 0xF174, 0xC2F9, 0xF171, 0xC2FA, 0xC2F8, 0xF175, 0xC2FB, 0xF173, /* 0xD0 */ + 0, 0xF379, 0xC2F7, 0xC3F8, 0, 0xF8CD, 0, 0, /* 0xE0 */ + 0xAB42, 0xB3B8, 0xB3B7, 0, 0, 0, 0, 0xB6B2, /* 0xE0 */ + 0xDCA8, 0xDCA7, 0xB6B3, 0, 0, 0xE0D9, 0xB973, 0xB970, /* 0xF0 */ + 0xE0D8, 0xB972, 0xE0D6, 0xB971, 0, 0xE0D7, 0, 0xE4BD /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_97[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xBBDD, 0, 0xE8AF, 0, 0xBE5D, 0xE8AD, 0xBE5E, 0xBE5F, /* 0x00 */ + 0xE8AE, 0xBE60, 0, 0xEC51, 0, 0xC04E, 0xC04B, 0xC050, /* 0x00 */ + 0xEC53, 0xC04C, 0xEC52, 0xC04F, 0, 0, 0xC04D, 0, /* 0x10 */ + 0xEEF9, 0xEEFB, 0, 0, 0xC1F7, 0xEEFA, 0xC1F8, 0xEEF8, /* 0x10 */ + 0xEEF7, 0, 0xF177, 0xF176, 0xC2FC, 0xF178, 0xF37E, 0xC3FA, /* 0x20 */ + 0xF37D, 0xF37A, 0xC3F9, 0xF37B, 0xF37C, 0, 0xF548, 0xF549, /* 0x20 */ + 0xC4C5, 0, 0xC553, 0, 0, 0xF66E, 0, 0, /* 0x30 */ + 0xC551, 0xC552, 0xF66F, 0, 0, 0xC5B4, 0xC5B5, 0xF771, /* 0x30 */ + 0, 0, 0xC645, 0xF8CF, 0xC647, 0, 0xF8CE, 0xF8D0, /* 0x40 */ + 0xC646, 0xF957, 0, 0xF9AD, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0xAB43, 0, 0, 0, 0xB974, 0, /* 0x50 */ + 0xE4BE, 0, 0xE8B0, 0xC051, 0xC052, 0, 0xAB44, 0, /* 0x50 */ + 0xBE61, 0xC3FB, 0xADB1, 0, 0, 0, 0xC053, 0, /* 0x60 */ + 0xC5E2, 0xADB2, 0xD84D, 0, 0xDCA9, 0, 0xDCAB, 0, /* 0x60 */ + 0xDCAA, 0, 0xE0DD, 0xE0DA, 0xB975, 0, 0xB976, 0xE0DB, /* 0x70 */ + 0xE0DC, 0, 0xE4C0, 0xE4C5, 0xBBDE, 0xE4BF, 0xE4C1, 0xE4C8, /* 0x70 */ + 0xE4C3, 0xE4C7, 0xE4C4, 0xE4C2, 0xE4C6, 0xBBDF, 0, 0, /* 0x80 */ + 0xE8B3, 0, 0xE8B1, 0xBE63, 0, 0xBE62, 0xE8B2, 0xBE64, /* 0x80 */ + 0, 0, 0, 0, 0xEC56, 0, 0, 0xEC55, /* 0x90 */ + 0xC054, 0xEC54, 0xEEFC, 0, 0xEEFE, 0xEF41, 0xEF40, 0, /* 0x90 */ + 0xC1F9, 0xEEFD, 0xF1A1, 0xC2FD, 0xF17D, 0xF1A2, 0xC2FE, 0, /* 0xA0 */ + 0xF17B, 0, 0xF17E, 0xF17C, 0xF179, 0xC340, 0xF17A, 0, /* 0xA0 */ + 0, 0, 0, 0xF3A1, 0, 0, 0xF3A3, 0xF3A2, /* 0xB0 */ + 0, 0xF54A, 0, 0xF54B, 0, 0, 0, 0xF670, /* 0xB0 */ + 0, 0xC5B7, 0, 0xC5B6, 0xF84F, 0xF850, 0xC648, 0xF8D1, /* 0xC0 */ + 0, 0xC669, 0, 0xADB3, 0xB6B4, 0xE4CA, 0xE4C9, 0xE8B5, /* 0xC0 */ + 0xE8B4, 0, 0, 0xC1FA, 0xEF43, 0xEF42, 0xF1A5, 0xF1A3, /* 0xD0 */ + 0xF1A6, 0xF1A4, 0, 0, 0xC3FC, 0xF3A4, 0xF3A5, 0xF3A6, /* 0xD0 */ + 0, 0xF671, 0, 0xF772, 0, 0xF8D2, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0xADB4, 0, 0, /* 0xE0 */ + 0xEC57, 0xEF44, 0, 0xADB5, 0, 0, 0xBBE0, 0, /* 0xF0 */ + 0xEC58, 0xC341, 0xF1A7, 0xC3FD, 0, 0xF54C, 0xF54D, 0xC554 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_98[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF851, 0xADB6, 0xB3BB, 0xB3BC, 0xD84E, 0xB6B5, 0xB6B6, 0xDCAC, /* 0x00 */ + 0xB6B7, 0, 0xB97A, 0, 0xB97C, 0xE0DF, 0xE0E0, 0xE0DE, /* 0x00 */ + 0xB977, 0xB978, 0xB97B, 0xB979, 0, 0, 0xE4CB, 0xBBE1, /* 0x10 */ + 0xBBE2, 0, 0, 0xE8BC, 0xBE67, 0xE8B7, 0xE8B6, 0, /* 0x10 */ + 0xE8BB, 0xBE65, 0, 0, 0xC05B, 0, 0xE8B8, 0xE8BD, /* 0x20 */ + 0xE8BA, 0xE8B9, 0, 0xBE66, 0, 0xC059, 0, 0xEC5A, /* 0x20 */ + 0xC055, 0, 0xEC5B, 0, 0, 0xEC59, 0, 0xC058, /* 0x30 */ + 0xC056, 0xC05A, 0, 0xC057, 0, 0, 0, 0, /* 0x30 */ + 0, 0xEF45, 0, 0xEF4A, 0xEF46, 0xEF49, 0xC1FB, 0, /* 0x40 */ + 0xEDD4, 0xEF48, 0xEF47, 0, 0xC344, 0xC342, 0xC345, 0xC343, /* 0x40 */ + 0xF1A8, 0xF1A9, 0xF1AA, 0xC346, 0, 0, 0, 0xF3AA, /* 0x50 */ + 0xC440, 0xF3A8, 0, 0xC441, 0xF3A7, 0xF3A9, 0xC3FE, 0xF551, /* 0x50 */ + 0xF54E, 0, 0xF54F, 0xF550, 0xF672, 0xC556, 0, 0xC555, /* 0x60 */ + 0, 0xF774, 0xF773, 0xC5B8, 0, 0, 0, 0xC5E3, /* 0x60 */ + 0xC649, 0xC660, 0xF958, 0xF9AE, 0xF9AF, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xADB7, 0xDCAD, 0, 0, 0xE0E1, 0xE4CC, 0xE4CD, 0xBBE3, /* 0xA0 */ + 0, 0xBBE4, 0xE8BE, 0xBE68, 0, 0, 0xC1FC, 0, /* 0xB0 */ + 0xF1AB, 0, 0xC347, 0xF3AD, 0xC442, 0xF3AC, 0xF3AE, 0xF3AB, /* 0xB0 */ + 0xF675, 0xF552, 0xF553, 0, 0xC4C6, 0, 0xF674, 0, /* 0xC0 */ + 0, 0xF673, 0, 0xF775, 0xF9B0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0xADB8, 0, 0, 0, 0xADB9, /* 0xD0 */ + 0, 0, 0xB0A7, 0xD448, 0, 0xD84F, 0, 0xB6B8, /* 0xE0 */ + 0, 0xB6BB, 0xB6B9, 0xDCAE, 0, 0xB6BD, 0, 0xB6BA, /* 0xE0 */ + 0, 0, 0xB6BC, 0, 0xB97E, 0, 0xE0E2, 0, /* 0xF0 */ + 0, 0xE0E3, 0xE8C0, 0, 0xB97D, 0xB9A1, 0xB9A2 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_99[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE4CF, 0, 0xE4CE, 0xBBE5, 0, 0xBBE6, 0, 0xE4D0, /* 0x00 */ + 0xE8BF, 0xBBE8, 0xBE69, 0, 0xBBE7, 0, 0, 0, /* 0x00 */ + 0xC05C, 0xE8C1, 0xBE6B, 0xBE6A, 0xE8C2, 0xE8C5, 0xE8C3, 0xE8C4, /* 0x10 */ + 0xBE6C, 0, 0xC061, 0xC05F, 0, 0, 0xC05E, 0xEC5D, /* 0x10 */ + 0, 0xC060, 0, 0, 0xEC5C, 0xEF4B, 0, 0xEC5E, /* 0x20 */ + 0xC05D, 0xEC5F, 0xEF4E, 0xEF4C, 0xEF4D, 0xEF52, 0xC34B, 0xEF51, /* 0x20 */ + 0xEF54, 0xEF53, 0xEF50, 0xEF4F, 0, 0xC1FD, 0, 0, /* 0x30 */ + 0, 0, 0xF1AE, 0, 0xF1AD, 0xC34A, 0xC348, 0xC349, /* 0x30 */ + 0, 0xF1AC, 0, 0xF3B1, 0, 0xC443, 0, 0xF3B0, /* 0x40 */ + 0xF3AF, 0xC444, 0, 0xF558, 0xF557, 0, 0xF555, 0, /* 0x40 */ + 0xF554, 0xC4C8, 0xC4C7, 0xF559, 0xF776, 0xC5B9, 0xF677, 0xC557, /* 0x50 */ + 0xF676, 0xF556, 0, 0xF777, 0xC5E4, 0, 0xC661, 0xF959, /* 0x50 */ + 0, 0xF9B1, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0xADBA, 0xD850, /* 0x90 */ + 0xEF55, 0xADBB, 0, 0, 0xE4D2, 0xE4D1, 0xEC60, 0, /* 0x90 */ + 0, 0xEF57, 0, 0xEF56, 0, 0xC34C, 0xF3B2, 0xF3B3, /* 0xA0 */ + 0xC4C9, 0, 0, 0xF9B2, 0xB0A8, 0xB6BF, 0xB6BE, 0xE0E4, /* 0xA0 */ + 0xE0E6, 0xB9A4, 0xE0E5, 0xB9A3, 0xB9A5, 0xE0E7, 0, 0, /* 0xB0 */ + 0, 0xE4D4, 0xE4D6, 0xE4D5, 0, 0xE4D8, 0, 0, /* 0xB0 */ + 0, 0xBBE9, 0xE4D7, 0xE4D3, 0, 0, 0, 0xE4D9, /* 0xC0 */ + 0, 0xE8CC, 0, 0xE8CF, 0xE8D1, 0xE8C7, 0xE8CB, 0xE8C8, /* 0xC0 */ + 0xBE6E, 0xBE71, 0xBE73, 0xE8C9, 0xE8CA, 0xBE72, 0xE8CD, 0xE8D0, /* 0xD0 */ + 0xE8CE, 0xBE74, 0, 0xBE70, 0xE8C6, 0xBE6D, 0, 0xBE6F, /* 0xD0 */ + 0, 0, 0xC063, 0xEC66, 0xEC64, 0xEC63, 0, 0xEC69, /* 0xE0 */ + 0, 0xEC68, 0xEC67, 0, 0xEC62, 0xC062, 0xEC61, 0, /* 0xE0 */ + 0xEC65, 0xC064, 0, 0, 0xEF5A, 0, 0xEF5E, 0xEF5B, /* 0xF0 */ + 0xEF5D, 0xEF5C, 0xEF59, 0xEF5F, 0xEF62, 0xEF60, 0xEF61, 0xC240 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_9A[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xC1FE, 0xEF58, 0xEF63, 0xF1B3, 0xF1B6, 0xF1B8, 0xF1B7, /* 0x00 */ + 0, 0xF1B1, 0xF1B5, 0xF1B0, 0, 0xF1B2, 0xC34D, 0xF1AF, /* 0x00 */ + 0, 0xF1B4, 0, 0, 0xF3C0, 0xF3B5, 0xC445, 0, /* 0x10 */ + 0, 0xC446, 0xF3B4, 0xF3B9, 0xF3BF, 0xF3B7, 0xF3BE, 0, /* 0x10 */ + 0xF3BB, 0, 0xF3BA, 0xF3BD, 0xF3B8, 0xF3B6, 0, 0xF3BC, /* 0x20 */ + 0, 0xF560, 0xF55E, 0xC4CA, 0xF55D, 0xF563, 0xF561, 0, /* 0x20 */ + 0xC4CB, 0xF55C, 0xF55A, 0, 0xF55B, 0xC4CD, 0xF55F, 0xC4CC, /* 0x30 */ + 0xF562, 0xF678, 0xF67E, 0, 0, 0xF679, 0xC55B, 0xF6A1, /* 0x30 */ + 0xC55A, 0xF67D, 0xF67C, 0xC559, 0xF67B, 0xC558, 0xF67A, 0, /* 0x40 */ + 0xF77D, 0xF7A1, 0xF77E, 0, 0xF77B, 0xC5BB, 0xF778, 0xF77C, /* 0x40 */ + 0xF7A3, 0, 0xF7A2, 0xF779, 0xF77A, 0xC5BA, 0xF852, 0xC5E7, /* 0x50 */ + 0, 0xF853, 0xC5E5, 0xC5E6, 0, 0, 0xF8D3, 0xC64A, /* 0x50 */ + 0xF976, 0, 0xC66A, 0, 0xF9B3, 0xC66B, 0xF9B4, 0xF9B5, /* 0x60 */ + 0xF9C3, 0xF9C2, 0xC67A, 0xF9CD, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0xB0A9, 0, 0, 0xE0E9, 0, 0xE0E8, 0, 0xBBEA, /* 0xA0 */ + 0xBBEB, 0xE4DA, 0, 0xE8D2, 0xEC6C, 0, 0, 0xBE75, /* 0xB0 */ + 0xC065, 0xEC6A, 0, 0xEC6D, 0xC066, 0, 0xEF64, 0xEC6B, /* 0xB0 */ + 0xF1B9, 0xC34E, 0xF3C1, 0, 0, 0, 0xF566, 0xF564, /* 0xC0 */ + 0, 0, 0xF565, 0, 0, 0xF6A2, 0, 0xC55C, /* 0xC0 */ + 0xF7A4, 0xC5EA, 0xC5BC, 0xC5E8, 0xC5E9, 0xF8D4, 0xC662, 0, /* 0xD0 */ + 0xB0AA, 0, 0, 0, 0xF1BA, 0, 0, 0xD449, /* 0xD0 */ + 0, 0xB9A6, 0, 0xE4DB, 0, 0, 0xBBEC, 0xE4DC, /* 0xE0 */ + 0, 0, 0, 0xE8D4, 0xE8D3, 0xC068, 0xBE76, 0xBE77, /* 0xE0 */ + 0, 0xE8D7, 0xE8D6, 0xE8D5, 0, 0, 0xEC6E, 0xEC71, /* 0xF0 */ + 0, 0xEC70, 0xEC6F, 0xC067, 0xEF68, 0xEF66, 0xEF65 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_9B[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xEF67, 0, 0xC34F, 0xF1BC, 0xF1BD, 0xC350, 0, /* 0x00 */ + 0xF1BB, 0, 0xF3C3, 0xF3C2, 0xF3C5, 0xC447, 0xF3C4, 0, /* 0x00 */ + 0xF567, 0xF569, 0xF568, 0, 0, 0xF6A3, 0xF6A6, 0xF6A4, /* 0x10 */ + 0xF6A5, 0xF7A5, 0xC5BD, 0, 0, 0, 0xF854, 0xF855, /* 0x10 */ + 0xF856, 0, 0xC64B, 0xC663, 0xF9B6, 0xB0AB, 0, 0xBE78, /* 0x20 */ + 0xC069, 0xF1BE, 0, 0xF7A6, 0, 0, 0xF9C4, 0xD44A, /* 0x20 */ + 0, 0xC67B, 0xB0AC, 0xEC72, 0, 0xF1BF, 0, 0xF3C6, /* 0x30 */ + 0, 0, 0xF6A7, 0xF7A7, 0xB0AD, 0, 0xE4DD, 0xE4DE, /* 0x30 */ + 0, 0xBBED, 0xBBEE, 0xE8D9, 0xBE7A, 0xBE79, 0xE8D8, 0, /* 0x40 */ + 0xEF69, 0, 0xF1C0, 0xF1C2, 0xF1C1, 0xC353, 0xC352, 0xC351, /* 0x40 */ + 0, 0xC55E, 0xF6A8, 0, 0xC55D, 0xF7A9, 0xF7A8, 0, /* 0x50 */ + 0xC64C, 0xF8D5, 0xB3BD, 0xE0EA, 0, 0, 0, 0xE4E1, /* 0x50 */ + 0xE4DF, 0xE4E0, 0, 0, 0xE8E2, 0, 0xE8DD, 0xE8DA, /* 0x60 */ + 0xE8E1, 0, 0, 0, 0xE8E3, 0, 0, 0xBE7C, /* 0x60 */ + 0xE8E0, 0xE8DC, 0, 0, 0xE8DB, 0xE8DF, 0xE8DE, 0xBE7B, /* 0x70 */ + 0, 0, 0xEC7D, 0xEC78, 0xEC76, 0xECA1, 0xEC77, 0, /* 0x70 */ + 0xEC73, 0, 0xEC79, 0, 0, 0xEC74, 0xEF72, 0xEC75, /* 0x80 */ + 0xECA2, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0xEC7C, 0xC06A, 0xEC7B, 0xEC7A, 0, 0xEC7E, 0, 0, /* 0x90 */ + 0, 0, 0xEF6A, 0xEF6D, 0, 0, 0xEF6C, 0, /* 0x90 */ + 0xEF74, 0xEF6F, 0xEF73, 0, 0xEF71, 0xEF70, 0xEF6E, 0, /* 0xA0 */ + 0xEF6B, 0, 0xC243, 0xC242, 0, 0xC244, 0xC241, 0xEF75, /* 0xA0 */ + 0, 0, 0, 0, 0, 0xF1C8, 0xF1CB, 0, /* 0xB0 */ + 0xF1C9, 0xF1CD, 0, 0, 0, 0xF1CE, 0, 0xF1C6, /* 0xB0 */ + 0xC358, 0xF1C7, 0, 0xF1C5, 0xF1CC, 0, 0xF1C4, 0xF1C3, /* 0xC0 */ + 0xC357, 0xC355, 0xC354, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0xF1CA, 0xF3CF, 0xF3D5, 0xC44A, 0xF3D0, /* 0xD0 */ + 0, 0xF3D3, 0xF3D7, 0xC44B, 0xF3D2, 0, 0xF3CA, 0, /* 0xD0 */ + 0xF3C9, 0xF3D6, 0xF3CD, 0, 0xF3CB, 0xF3D4, 0xF3CC, 0xC449, /* 0xE0 */ + 0xC448, 0, 0xF3C7, 0xF3C8, 0xF3D1, 0, 0, 0, /* 0xE0 */ + 0xF3CE, 0, 0, 0, 0, 0, 0, 0xF56C, /* 0xF0 */ + 0xF56F, 0, 0, 0, 0, 0xC356 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_9C[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF56D, 0xF573, 0xF571, /* 0x00 */ + 0xF56B, 0xF576, 0, 0xF56A, 0, 0xC4CF, 0xF572, 0, /* 0x00 */ + 0, 0, 0xF56E, 0xC4CE, 0xF575, 0, 0, 0xF574, /* 0x10 */ + 0, 0, 0, 0, 0xF6AB, 0xF6AA, 0, 0, /* 0x10 */ + 0, 0xF6B1, 0, 0xF6AD, 0xF6B0, 0xC560, 0, 0, /* 0x20 */ + 0xF6AE, 0xF6AF, 0, 0xF6A9, 0xF6AC, 0xC55F, 0, 0, /* 0x20 */ + 0, 0xC5BF, 0xF7B4, 0xF7AF, 0xF7B3, 0, 0xF7B6, 0xF7B2, /* 0x30 */ + 0, 0xF7AE, 0, 0xC5C1, 0xF7B1, 0xF7B5, 0xC5C0, 0xF7AC, /* 0x30 */ + 0xF570, 0xF7B0, 0, 0, 0xF7AD, 0, 0xF7AA, 0, /* 0x40 */ + 0xF7AB, 0xC5BE, 0xF85A, 0xF85C, 0xF85F, 0xF85B, 0xF860, 0, /* 0x40 */ + 0xF859, 0, 0xF857, 0, 0xC5EB, 0xF85D, 0xC5ED, 0xC5EC, /* 0x50 */ + 0xF858, 0xF85E, 0, 0, 0, 0, 0xF8DA, 0xC64D, /* 0x50 */ + 0xF8DB, 0, 0xF8D9, 0xF8D6, 0, 0, 0xF8D8, 0xF8D7, /* 0x60 */ + 0xF95A, 0, 0, 0, 0, 0xF95C, 0xF95B, 0, /* 0x60 */ + 0, 0xF979, 0, 0xF978, 0xF977, 0xF97A, 0, 0xC673, /* 0x70 */ + 0xC674, 0xF9CA, 0xF9CE, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0xB3BE, 0xDCAF, 0xE0ED, /* 0xE0 */ + 0, 0xB9A7, 0xE0EB, 0, 0, 0xE0EC, 0, 0, /* 0xE0 */ + 0, 0xE4E2, 0xE4E3, 0xBBF1, 0xBBEF, 0xE4E4, 0xBBF0, 0xE8E8, /* 0xF0 */ + 0, 0xE8EB, 0xE8E5, 0xE8EC, 0xE8E4, 0xE8E6, 0, 0xE8E7 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_9D[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xE8EA, 0, 0, 0xBEA1, 0xE8EF, 0xE8EE, 0xBE7D, 0xE8E9, /* 0x00 */ + 0xE8ED, 0xBE7E, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0xECAC, 0, 0xC06F, 0, 0xECA7, 0xC06B, 0, 0xECA4, /* 0x10 */ + 0xECAA, 0xECAD, 0, 0xC070, 0, 0xECA9, 0xECA6, 0xECAE, /* 0x10 */ + 0xECA5, 0, 0xECAB, 0xC06C, 0, 0xECA3, 0xC06D, 0, /* 0x20 */ + 0xC06E, 0xECA8, 0, 0, 0, 0xEFA9, 0xEF7A, 0xEF7B, /* 0x20 */ + 0xEF7E, 0xEF7C, 0, 0xEF76, 0, 0, 0xEF79, 0xEFA5, /* 0x30 */ + 0xEF7D, 0, 0, 0xC245, 0, 0xEFA7, 0xEFA4, 0xC246, /* 0x30 */ + 0xEFA6, 0xEF77, 0xEFA2, 0xEFA3, 0, 0xEFA1, 0, 0, /* 0x40 */ + 0, 0, 0xF1D2, 0xF1D4, 0xF1D7, 0, 0, 0xF1D1, /* 0x40 */ + 0, 0xC359, 0xF1D9, 0xF1D0, 0xF1DA, 0, 0xF1D6, 0xF1D8, /* 0x50 */ + 0xF1DC, 0xF1D5, 0xF1DD, 0xF1D3, 0xF1CF, 0xC35A, 0, 0xF1DB, /* 0x50 */ + 0xC35B, 0xC44D, 0, 0, 0, 0, 0, 0xEF78, /* 0x60 */ + 0xF3F1, 0xF3E8, 0xC44F, 0xF3E4, 0xC450, 0, 0, 0xF3ED, /* 0x60 */ + 0xF3E7, 0xF3DD, 0xC44E, 0xF3EA, 0xF3E5, 0xF3E6, 0, 0xF3D8, /* 0x70 */ + 0xF3DF, 0xF3EE, 0, 0xF3EB, 0, 0xF3E3, 0, 0xF3EF, /* 0x70 */ + 0xF3DE, 0xF3D9, 0xF3EC, 0, 0xF3DB, 0xF3E9, 0xF3E0, 0xF3F0, /* 0x80 */ + 0xF3DC, 0xC44C, 0xF3DA, 0xF3E1, 0xF3E2, 0, 0, 0, /* 0x80 */ + 0xF57D, 0, 0xF57B, 0, 0xF5A2, 0, 0xF5AE, 0xF5A5, /* 0x90 */ + 0xF57C, 0xF578, 0xF5A7, 0xF57E, 0xF5A3, 0xF57A, 0xF5AA, 0xF577, /* 0x90 */ + 0xF5A1, 0xF5A6, 0xF5A8, 0xF5AB, 0xF579, 0, 0xF5AF, 0xF5B0, /* 0xA0 */ + 0xF5A9, 0xF5AD, 0xF5A4, 0, 0xF6C1, 0xF6C4, 0, 0xC561, /* 0xA0 */ + 0, 0xF6C3, 0xF6C8, 0xF6C6, 0xC562, 0xF6BD, 0xF6B3, 0xF6B2, /* 0xB0 */ + 0xC564, 0xF6BF, 0xF6C0, 0xF6BC, 0xF6B4, 0, 0xF6B9, 0xF5AC, /* 0xB0 */ + 0, 0xF6B5, 0xC563, 0xF6BB, 0, 0xF6BA, 0, 0xF6B6, /* 0xC0 */ + 0xF6C2, 0, 0xF6B7, 0xF7BB, 0xF6C5, 0xF6C7, 0xF6BE, 0xF6B8, /* 0xC0 */ + 0xF7BC, 0xF7BE, 0xF7B8, 0xC5C2, 0, 0xF7C5, 0xF7C3, 0xC5C3, /* 0xD0 */ + 0xF7C2, 0xF7C1, 0xF7BA, 0xF7B7, 0xF7BD, 0xF7C6, 0xF7B9, 0xF7BF, /* 0xD0 */ + 0, 0xF869, 0xF86E, 0xF864, 0xF867, 0xC5EE, 0xF86B, 0, /* 0xE0 */ + 0xF872, 0xF7C0, 0, 0xF865, 0xF86F, 0xF873, 0xF86A, 0xF863, /* 0xE0 */ + 0xF86D, 0, 0xF86C, 0xF871, 0xF870, 0xF7C4, 0xF868, 0xF862, /* 0xF0 */ + 0xF866, 0xC64E, 0xC64F, 0xF861, 0, 0xF8E6, 0xF8DD, 0xF8E5 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_9E[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF8E2, 0xF8E3, 0xF8DC, 0xF8DF, 0xF8E7, 0xF8E1, 0xF8E0, 0xF8DE, /* 0x00 */ + 0, 0xF8E4, 0, 0xF95D, 0, 0xF95E, 0, 0xF960, /* 0x00 */ + 0xF95F, 0xF962, 0xF961, 0xF97C, 0xF97B, 0xF9B7, 0, 0xF9B8, /* 0x10 */ + 0, 0xF9C5, 0xC678, 0xC67C, 0, 0xF9CF, 0xC67D, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0xB3BF, 0, 0, /* 0x70 */ + 0, 0xC4D0, 0xF6C9, 0, 0xC650, 0xC651, 0, 0xB3C0, /* 0x70 */ + 0xE0EE, 0, 0xB9A8, 0xE8F0, 0, 0, 0xECB0, 0xECB1, /* 0x80 */ + 0xECAF, 0xEFAB, 0xEFAA, 0xC247, 0xF1DF, 0xEFAC, 0xF1DE, 0, /* 0x80 */ + 0, 0xF3F3, 0xC451, 0xC453, 0xF3F2, 0, 0, 0xC452, /* 0x90 */ + 0, 0xF5B1, 0xF5B3, 0xF5B2, 0xF6CA, 0xC565, 0, 0xC5EF, /* 0x90 */ + 0xF8E8, 0xF963, 0, 0, 0xF9D2, 0xB3C1, 0, 0xE4E5, /* 0xA0 */ + 0, 0xBEA2, 0, 0, 0, 0xECB3, 0xECB2, 0, /* 0xA0 */ + 0xEFAD, 0, 0, 0, 0xC454, 0xC4D1, 0xF7C7, 0xF9CB, /* 0xB0 */ + 0, 0, 0, 0xB3C2, 0xBBF2, 0, 0xBEA3, 0, /* 0xB0 */ + 0xF3F4, 0, 0xF874, 0xB6C0, 0, 0, 0, 0, /* 0xC0 */ + 0xEFAE, 0, 0, 0, 0xC664, 0xB6C1, 0xBEA4, 0xC248, /* 0xC0 */ + 0xF875, 0xB6C2, 0, 0xE8F1, 0xC072, 0xECB4, 0xECB5, 0, /* 0xD0 */ + 0xC071, 0, 0xEFAF, 0xC24C, 0xC24A, 0xC24B, 0xC249, 0xF1E0, /* 0xD0 */ + 0xC35C, 0, 0, 0, 0xF5B5, 0xF5B4, 0xF5B7, 0xF5B6, /* 0xE0 */ + 0xC4D2, 0, 0, 0xF6CB, 0, 0xF6CD, 0xF6CC, 0xC566, /* 0xE0 */ + 0xF7C8, 0, 0xF876, 0xF877, 0xC5F0, 0xF964, 0xF97D, 0xC675, /* 0xF0 */ + 0, 0xDCB0, 0xECB6, 0xEFB0, 0xF3F5, 0xE0EF, 0, 0xEFB1 /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_9F[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xF1E2, 0xF1E1, 0, 0, 0, 0, 0xF878, 0xC652, /* 0x00 */ + 0, 0xF965, 0xF97E, 0, 0, 0, 0xB9A9, 0xE8F2, /* 0x00 */ + 0xE8F3, 0, 0xECB7, 0xB9AA, 0, 0xC35D, 0xF1E3, 0, /* 0x10 */ + 0xF6CF, 0xC567, 0xF6D0, 0xF6CE, 0xF879, 0, 0xF8E9, 0, /* 0x10 */ + 0xB9AB, 0, 0xEFB4, 0xEFB3, 0xEFB2, 0xF1E4, 0, 0, /* 0x20 */ + 0xF1E8, 0xF1E7, 0xF1E6, 0xF1E5, 0xC35E, 0xF3F6, 0xF5B9, 0xC4D3, /* 0x20 */ + 0xF5B8, 0xF6D1, 0xF7CB, 0xF7CA, 0xC5C4, 0xF7C9, 0xF87C, 0xF87B, /* 0x30 */ + 0xF87A, 0, 0, 0xBBF3, 0, 0xECB8, 0xC24D, 0, /* 0x30 */ + 0xF3F7, 0xF3F8, 0xF7CC, 0xF87D, 0, 0, 0xF8EA, 0xF966, /* 0x40 */ + 0xF9B9, 0xF9D4, 0xBBF4, 0xC24E, 0xF1E9, 0xF3F9, 0xF6D2, 0xF87E, /* 0x40 */ + 0, 0, 0xBEA6, 0, 0xEFB5, 0xF1EA, 0xF3FA, 0xF3FB, /* 0x50 */ + 0xF3FC, 0xF5BE, 0, 0xF5BA, 0xC568, 0xF5BD, 0xF5BC, 0xC4D4, /* 0x50 */ + 0xF5BB, 0xC4D6, 0, 0xC4D5, 0xF6D4, 0xF6D3, 0xC569, 0xC56A, /* 0x60 */ + 0, 0, 0xC5C6, 0xF7CD, 0xC5C5, 0, 0xF8A3, 0xF8A4, /* 0x60 */ + 0xF8A2, 0xF8A1, 0xC654, 0, 0xF8EB, 0xF8EC, 0xF8ED, 0xC653, /* 0x70 */ + 0xF967, 0xF96A, 0xF969, 0xF968, 0, 0, 0xF9D3, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0xC073, 0, 0, /* 0x80 */ + 0xC365, 0xF5BF, 0xF6D5, 0, 0xC5C7, 0xF7CE, 0, 0, /* 0x90 */ + 0xF9D5, 0, 0, 0, 0xC074, 0, 0, 0, /* 0x90 */ + 0xEFB6, 0, 0xF7CF, 0, 0xF9A1 /* 0xA0 */ + /* 0xA0 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_APPLECHINTRAD_F8[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x0081, 0x0082 /* 0x80 */ + /* 0x80 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_FA[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + /* 0x00 */ + 0xC94A, 0xDDFC /* 0x00 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_FE[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA14A, 0xA157, 0, 0xA159, 0xA15B, 0xA15F, 0xA160, 0xA163, /* 0x30 */ + 0xA164, 0xA167, 0xA168, 0xA16B, 0xA16C, 0xA16F, 0xA170, 0xA173, /* 0x30 */ + 0xA174, 0xA177, 0xA178, 0xA17B, 0xA17C, 0, 0, 0, /* 0x40 */ + 0, 0xA1C6, 0xA1C7, 0xA1CA, 0xA1CB, 0xA1C8, 0xA1C9, 0xA15C, /* 0x40 */ + 0xA14D, 0xA14E, 0xA14F, 0, 0xA151, 0xA152, 0xA153, 0xA154, /* 0x50 */ + 0, 0xA17D, 0xA17E, 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A4, 0xA1CC, /* 0x50 */ + 0xA1CD, 0xA1CE, 0xA1DE, 0xA1DF, 0xA1E0, 0xA1E1, 0xA1E2, 0, /* 0x60 */ + 0xA242, 0xA24C, 0xA24D, 0xA24E /* 0x60 */ +}; + +/* ----------------------------------------------------------------------- */ + +sal_uInt16 const aImplUniToDBCSTab_BIG5_FF[] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0xA149, 0, 0xA1AD, 0xA243, 0xA248, 0xA1AE, 0, /* 0x00 */ + 0xA15D, 0xA15E, 0xA1AF, 0xA1CF, 0xA141, 0xA1D0, 0xA144, 0xA1FE, /* 0x00 */ + 0xA2AF, 0xA2B0, 0xA2B1, 0xA2B2, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, /* 0x10 */ + 0xA2B7, 0xA2B8, 0xA147, 0xA146, 0xA1D5, 0xA1D7, 0xA1D6, 0xA148, /* 0x10 */ + 0xA249, 0xA2CF, 0xA2D0, 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, 0xA2D5, /* 0x20 */ + 0xA2D6, 0xA2D7, 0xA2D8, 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, /* 0x20 */ + 0xA2DE, 0xA2DF, 0xA2E0, 0xA2E1, 0xA2E2, 0xA2E3, 0xA2E4, 0xA2E5, /* 0x30 */ + 0xA2E6, 0xA2E7, 0xA2E8, 0, 0xA240, 0, 0, 0xA1C4, /* 0x30 */ + 0, 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE, 0xA2EF, /* 0x40 */ + 0xA2F0, 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, /* 0x40 */ + 0xA2F8, 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0xA2FD, 0xA2FE, 0xA340, /* 0x50 */ + 0xA341, 0xA342, 0xA343, 0xA161, 0xA155, 0xA162, 0xA1E3, 0, /* 0x50 */ + 0, 0, 0, 0, 0xA14E, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 */ + 0xA246, 0xA247, 0, 0xA1C3, 0, 0xA244, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 */ + 0, 0, 0, 0, 0, 0xA1C5 /* 0xF0 */ +}; diff --git a/sal/textenc/tcvttcn6.tab b/sal/textenc/tcvttcn6.tab new file mode 100644 index 000000000..7dedf3f4d --- /dev/null +++ b/sal/textenc/tcvttcn6.tab @@ -0,0 +1,1728 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include "tenchelp.hxx" + +/* ======================================================================= */ + +/* This file contain the information tables for all */ +/* chinese traditional (Taiwan/HongKong) charsets: */ +/* BIG5, MS950, APPLE_CHINTRAD */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aBIG5UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0, 1, 0, nullptr }, /* 0x80 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xA0 */ /* We convert this as double byte */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A1 }, /* 0xA1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A2 }, /* 0xA2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A3 }, /* 0xA3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A4 }, /* 0xA4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A5 }, /* 0xA5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A6 }, /* 0xA6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A7 }, /* 0xA7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A8 }, /* 0xA8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A9 }, /* 0xA9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AA }, /* 0xAA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AB }, /* 0xAB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AC }, /* 0xAC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AD }, /* 0xAD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AE }, /* 0xAE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AF }, /* 0xAF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B0 }, /* 0xB0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B1 }, /* 0xB1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B2 }, /* 0xB2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B3 }, /* 0xB3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B4 }, /* 0xB4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B5 }, /* 0xB5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B6 }, /* 0xB6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B7 }, /* 0xB7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B8 }, /* 0xB8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B9 }, /* 0xB9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BA }, /* 0xBA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BB }, /* 0xBB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BC }, /* 0xBC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BD }, /* 0xBD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BE }, /* 0xBE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BF }, /* 0xBF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C0 }, /* 0xC0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C1 }, /* 0xC1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C2 }, /* 0xC2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C3 }, /* 0xC3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C4 }, /* 0xC4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C5 }, /* 0xC5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5ONLY_C6 }, /* 0xC6 */ + { 0, 0x40, 0xFC, aImplDBCSToUniTab_BIG5ONLY_C7 }, /* 0xC7 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC8 */ /* We convert this as double byte */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C9 }, /* 0xC9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CA }, /* 0xCA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CB }, /* 0xCB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CC }, /* 0xCC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CD }, /* 0xCD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CE }, /* 0xCE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CF }, /* 0xCF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D0 }, /* 0xD0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D1 }, /* 0xD1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D2 }, /* 0xD2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D3 }, /* 0xD3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D4 }, /* 0xD4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D5 }, /* 0xD5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D6 }, /* 0xD6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D7 }, /* 0xD7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D8 }, /* 0xD8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D9 }, /* 0xD9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DA }, /* 0xDA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DB }, /* 0xDB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DC }, /* 0xDC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DD }, /* 0xDD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DE }, /* 0xDE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DF }, /* 0xDF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E9 }, /* 0xE9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EA }, /* 0xEA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EB }, /* 0xEB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EC }, /* 0xEC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_ED }, /* 0xED */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EE }, /* 0xEE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EF }, /* 0xEF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F0 }, /* 0xF0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F1 }, /* 0xF1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F2 }, /* 0xF2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F3 }, /* 0xF3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F4 }, /* 0xF4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F5 }, /* 0xF5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F6 }, /* 0xF6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F7 }, /* 0xF7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F8 }, /* 0xF8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F9 }, /* 0xF9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aBIG5DBCSHighTab[256] = +{ + { 0x00, 0xF7, aImplUniToDBCSTab_BIG5_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 0xC7, 0xD9, aImplUniToDBCSTab_BIG5_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_BIG5_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_BIG5_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x13, 0xAC, aImplUniToDBCSTab_BIG5_20 }, /* 0x20 */ + { 0x03, 0x99, aImplUniToDBCSTab_BIG5_21 }, /* 0x21 */ + { 0x15, 0xEF, aImplUniToDBCSTab_BIG5_22 }, /* 0x22 */ + { 1, 0, nullptr }, /* 0x23 */ + { 0x60, 0x7D, aImplUniToDBCSTab_BIG5_24 }, /* 0x24 */ + { 0x00, 0xE5, aImplUniToDBCSTab_BIG5_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_BIG5_26 }, /* 0x25 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_BIG5_31 }, /* 0x31 */ + { 0xA3, 0xA3, aImplUniToDBCSTab_BIG5_32 }, /* 0x32 */ + { 0x8E, 0xD5, aImplUniToDBCSTab_BIG5_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_4E }, /* 0x4E */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_4F }, /* 0x4F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_50 }, /* 0x50 */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_52 }, /* 0x52 */ + { 0x05, 0xFC, aImplUniToDBCSTab_BIG5_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_54 }, /* 0x54 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_56 }, /* 0x56 */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_57 }, /* 0x57 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_58 }, /* 0x58 */ + { 0x03, 0xFF, aImplUniToDBCSTab_BIG5_59 }, /* 0x59 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5A }, /* 0x5A */ + { 0x01, 0xFA, aImplUniToDBCSTab_BIG5_5B }, /* 0x5B */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5C }, /* 0x5C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5F }, /* 0x5F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_62 }, /* 0x62 */ + { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_63 }, /* 0x63 */ + { 0x06, 0xFF, aImplUniToDBCSTab_BIG5_64 }, /* 0x64 */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_67 }, /* 0x67 */ + { 0x12, 0xFD, aImplUniToDBCSTab_BIG5_68 }, /* 0x68 */ + { 0x04, 0xFF, aImplUniToDBCSTab_BIG5_69 }, /* 0x69 */ + { 0x00, 0xFC, aImplUniToDBCSTab_BIG5_6A }, /* 0x6A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6B }, /* 0x6B */ + { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_6C }, /* 0x6C */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_6D }, /* 0x6D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6E }, /* 0x6E */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6F }, /* 0x6F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_70 }, /* 0x70 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_71 }, /* 0x71 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_72 }, /* 0x72 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_73 }, /* 0x73 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_74 }, /* 0x74 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_76 }, /* 0x76 */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_77 }, /* 0x77 */ + { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_BIG5_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7A }, /* 0x7A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_BIG5_7D }, /* 0x7D */ + { 0x03, 0x9C, aImplUniToDBCSTab_BIG5_7E }, /* 0x7E */ + { 0x36, 0xFF, aImplUniToDBCSTab_BIG5_7F }, /* 0x7F */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_80 }, /* 0x80 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_81 }, /* 0x81 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_82 }, /* 0x82 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_83 }, /* 0x83 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_84 }, /* 0x84 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_85 }, /* 0x85 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_86 }, /* 0x86 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_87 }, /* 0x87 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_88 }, /* 0x88 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_89 }, /* 0x89 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8A }, /* 0x8A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8B }, /* 0x8B */ + { 0x37, 0xFE, aImplUniToDBCSTab_BIG5_8C }, /* 0x8C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8D }, /* 0x8D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8E }, /* 0x8E */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8F }, /* 0x8F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_90 }, /* 0x90 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_91 }, /* 0x91 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_92 }, /* 0x92 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_93 }, /* 0x93 */ + { 0x00, 0x83, aImplUniToDBCSTab_BIG5_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_BIG5_95 }, /* 0x95 */ + { 0x1C, 0xFF, aImplUniToDBCSTab_BIG5_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_97 }, /* 0x97 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_98 }, /* 0x98 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_99 }, /* 0x99 */ + { 0x01, 0xFE, aImplUniToDBCSTab_BIG5_9A }, /* 0x9A */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_9B }, /* 0x9B */ + { 0x05, 0xFF, aImplUniToDBCSTab_BIG5_9C }, /* 0x9C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9D }, /* 0x9D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9E }, /* 0x9E */ + { 0x00, 0xA4, aImplUniToDBCSTab_BIG5_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 0x0C, 0x0D, aImplUniToDBCSTab_BIG5_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x30, 0x6B, aImplUniToDBCSTab_BIG5_FE }, /* 0xFE */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +/* FA40-FEFE --> E000-E310 */ +/* 8E40-A0FE --> E311-EEB7 */ +/* 8140-8DFE --> EEB8-F6B0 */ +/* C6A1-C6FE --> F6B1-F70E */ +/* C740-C8FE --> F70F-F848 */ + +#define DBCS_EUDC_MS950_COUNT 5 +ImplDBCSEUDCData const aImplMS950DBCSEUDCTab[DBCS_EUDC_MS950_COUNT] = +{ + /* EUDC-Range */ + /* Lead: FA-FE */ + /* Trail: 40-7E, A1-FE */ + { 0xFA, 0xFE, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xE000, 0xE310 }, + /* Lead: 8E-A0 */ + /* Trail: 40-7E, A1-FE */ + { 0x8E, 0xA0, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xE311, 0xEEB7 }, + /* Lead: 81-8D */ + /* Trail: 40-7E, A1-FE */ + { 0x81, 0x8D, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xEEB8, 0xF6B0 }, + /* Lead: C6-C6 */ + /* Trail: A1-FE */ + { 0xC6, 0xC6, 0xA1, 0xFE, 0, 0, 0, 0, 1, 0x5E, 0xF6B1, 0xF70E }, + /* Lead: C7-C8 */ + /* Trail: 40-7E, A1-FE */ + { 0xC7, 0xC8, 0x40, 0x7E, 0xA1, 0xFE, 0, 0, 2, 0x9D, 0xF70F, 0xF848 } +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplBIG5DBCSCvtData = +{ + aBIG5UniLeadTab, + aBIG5DBCSHighTab, + aImplMS950DBCSEUDCTab, + DBCS_EUDC_MS950_COUNT, + 0x00, 0xFF, + 0x40, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplBIG5TextEncodingData + = { { &aImplBIG5DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-tw", + "big5", + 1, + 2, + 2, + 136, + RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_CHINESE_TRADITIONAL, pc code page 950, mac encoding 2 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aMS950UniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0, 1, 0, nullptr }, /* 0x80 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x81 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x82 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xA0 */ /* We convert this as double byte */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A1 }, /* 0xA1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A2 }, /* 0xA2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A3 }, /* 0xA3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A4 }, /* 0xA4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A5 }, /* 0xA5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A6 }, /* 0xA6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A7 }, /* 0xA7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A8 }, /* 0xA8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A9 }, /* 0xA9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AA }, /* 0xAA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AB }, /* 0xAB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AC }, /* 0xAC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AD }, /* 0xAD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AE }, /* 0xAE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AF }, /* 0xAF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B0 }, /* 0xB0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B1 }, /* 0xB1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B2 }, /* 0xB2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B3 }, /* 0xB3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B4 }, /* 0xB4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B5 }, /* 0xB5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B6 }, /* 0xB6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B7 }, /* 0xB7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B8 }, /* 0xB8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B9 }, /* 0xB9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BA }, /* 0xBA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BB }, /* 0xBB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BC }, /* 0xBC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BD }, /* 0xBD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BE }, /* 0xBE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BF }, /* 0xBF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C0 }, /* 0xC0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C1 }, /* 0xC1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C2 }, /* 0xC2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C3 }, /* 0xC3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C4 }, /* 0xC4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C5 }, /* 0xC5 */ + { 0, 0x40, 0x7E, aImplDBCSToUniTab_BIG5_C6 }, /* 0xC6 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC7 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC8 */ /* We convert this as double byte */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C9 }, /* 0xC9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CA }, /* 0xCA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CB }, /* 0xCB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CC }, /* 0xCC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CD }, /* 0xCD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CE }, /* 0xCE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CF }, /* 0xCF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D0 }, /* 0xD0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D1 }, /* 0xD1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D2 }, /* 0xD2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D3 }, /* 0xD3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D4 }, /* 0xD4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D5 }, /* 0xD5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D6 }, /* 0xD6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D7 }, /* 0xD7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D8 }, /* 0xD8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D9 }, /* 0xD9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DA }, /* 0xDA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DB }, /* 0xDB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DC }, /* 0xDC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DD }, /* 0xDD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DE }, /* 0xDE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DF }, /* 0xDF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E9 }, /* 0xE9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EA }, /* 0xEA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EB }, /* 0xEB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EC }, /* 0xEC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_ED }, /* 0xED */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EE }, /* 0xEE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EF }, /* 0xEF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F0 }, /* 0xF0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F1 }, /* 0xF1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F2 }, /* 0xF2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F3 }, /* 0xF3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F4 }, /* 0xF4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F5 }, /* 0xF5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F6 }, /* 0xF6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F7 }, /* 0xF7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F8 }, /* 0xF8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F9 }, /* 0xF9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFD */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFE */ /* We convert this as double byte */ + { 0, 1, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aMS950DBCSHighTab[256] = +{ + { 0x00, 0xF7, aImplUniToDBCSTab_BIG5_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 0xC7, 0xD9, aImplUniToDBCSTab_BIG5_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_BIG5_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_BIG5_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x13, 0xAC, aImplUniToDBCSTab_BIG5_20 }, /* 0x20 */ + { 0x03, 0x99, aImplUniToDBCSTab_BIG5_21 }, /* 0x21 */ + { 0x15, 0xEF, aImplUniToDBCSTab_BIG5_22 }, /* 0x22 */ + { 1, 0, nullptr }, /* 0x23 */ + { 0x60, 0x7D, aImplUniToDBCSTab_BIG5_24 }, /* 0x24 */ + { 0x00, 0xE5, aImplUniToDBCSTab_BIG5_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_BIG5_26 }, /* 0x25 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_BIG5_31 }, /* 0x31 */ + { 0xA3, 0xA3, aImplUniToDBCSTab_BIG5_32 }, /* 0x32 */ + { 0x8E, 0xD5, aImplUniToDBCSTab_BIG5_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_4E }, /* 0x4E */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_4F }, /* 0x4F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_50 }, /* 0x50 */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_52 }, /* 0x52 */ + { 0x05, 0xFC, aImplUniToDBCSTab_BIG5_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_54 }, /* 0x54 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_56 }, /* 0x56 */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_57 }, /* 0x57 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_58 }, /* 0x58 */ + { 0x03, 0xFF, aImplUniToDBCSTab_BIG5_59 }, /* 0x59 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5A }, /* 0x5A */ + { 0x01, 0xFA, aImplUniToDBCSTab_BIG5_5B }, /* 0x5B */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5C }, /* 0x5C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5F }, /* 0x5F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_62 }, /* 0x62 */ + { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_63 }, /* 0x63 */ + { 0x06, 0xFF, aImplUniToDBCSTab_BIG5_64 }, /* 0x64 */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_67 }, /* 0x67 */ + { 0x12, 0xFD, aImplUniToDBCSTab_BIG5_68 }, /* 0x68 */ + { 0x04, 0xFF, aImplUniToDBCSTab_BIG5_69 }, /* 0x69 */ + { 0x00, 0xFC, aImplUniToDBCSTab_BIG5_6A }, /* 0x6A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6B }, /* 0x6B */ + { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_6C }, /* 0x6C */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_6D }, /* 0x6D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6E }, /* 0x6E */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6F }, /* 0x6F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_70 }, /* 0x70 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_71 }, /* 0x71 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_72 }, /* 0x72 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_73 }, /* 0x73 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_74 }, /* 0x74 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_76 }, /* 0x76 */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_77 }, /* 0x77 */ + { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_BIG5_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7A }, /* 0x7A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_BIG5_7D }, /* 0x7D */ + { 0x03, 0x9C, aImplUniToDBCSTab_BIG5_7E }, /* 0x7E */ + { 0x36, 0xFF, aImplUniToDBCSTab_BIG5_7F }, /* 0x7F */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_80 }, /* 0x80 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_81 }, /* 0x81 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_82 }, /* 0x82 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_83 }, /* 0x83 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_84 }, /* 0x84 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_85 }, /* 0x85 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_86 }, /* 0x86 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_87 }, /* 0x87 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_88 }, /* 0x88 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_89 }, /* 0x89 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8A }, /* 0x8A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8B }, /* 0x8B */ + { 0x37, 0xFE, aImplUniToDBCSTab_BIG5_8C }, /* 0x8C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8D }, /* 0x8D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8E }, /* 0x8E */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8F }, /* 0x8F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_90 }, /* 0x90 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_91 }, /* 0x91 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_92 }, /* 0x92 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_93 }, /* 0x93 */ + { 0x00, 0x83, aImplUniToDBCSTab_BIG5_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_BIG5_95 }, /* 0x95 */ + { 0x1C, 0xFF, aImplUniToDBCSTab_BIG5_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_97 }, /* 0x97 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_98 }, /* 0x98 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_99 }, /* 0x99 */ + { 0x01, 0xFE, aImplUniToDBCSTab_BIG5_9A }, /* 0x9A */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_9B }, /* 0x9B */ + { 0x05, 0xFF, aImplUniToDBCSTab_BIG5_9C }, /* 0x9C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9D }, /* 0x9D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9E }, /* 0x9E */ + { 0x00, 0xA4, aImplUniToDBCSTab_BIG5_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 1, 0, nullptr }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 0x0C, 0x0D, aImplUniToDBCSTab_BIG5_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x30, 0x6B, aImplUniToDBCSTab_BIG5_FE }, /* 0xFE */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplMS950DBCSCvtData = +{ + aMS950UniLeadTab, + aMS950DBCSHighTab, + aImplMS950DBCSEUDCTab, + DBCS_EUDC_MS950_COUNT, + 0x00, 0xFF, + 0x40, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS950TextEncodingData + = { { &aImplMS950DBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-tw", + "big5", + 1, + 2, + 2, + 136, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* WIN/DOS/OS2, SCRIPT_CHINESE_TRADITIONAL, pc code page 950, mac encoding + 2 */ + +/* ======================================================================= */ + +ImplDBCSToUniLeadTab const aAPPLECHINTRADUniLeadTab[256] = +{ + { 0x0000, 0, 0, nullptr }, /* 0x00 */ + { 0x0001, 0, 0, nullptr }, /* 0x01 */ + { 0x0002, 0, 0, nullptr }, /* 0x02 */ + { 0x0003, 0, 0, nullptr }, /* 0x03 */ + { 0x0004, 0, 0, nullptr }, /* 0x04 */ + { 0x0005, 0, 0, nullptr }, /* 0x05 */ + { 0x0006, 0, 0, nullptr }, /* 0x06 */ + { 0x0007, 0, 0, nullptr }, /* 0x07 */ + { 0x0008, 0, 0, nullptr }, /* 0x08 */ + { 0x0009, 0, 0, nullptr }, /* 0x09 */ + { 0x000A, 0, 0, nullptr }, /* 0x0A */ + { 0x000B, 0, 0, nullptr }, /* 0x0B */ + { 0x000C, 0, 0, nullptr }, /* 0x0C */ + { 0x000D, 0, 0, nullptr }, /* 0x0D */ + { 0x000E, 0, 0, nullptr }, /* 0x0E */ + { 0x000F, 0, 0, nullptr }, /* 0x0F */ + { 0x0010, 0, 0, nullptr }, /* 0x10 */ + { 0x0011, 0, 0, nullptr }, /* 0x11 */ + { 0x0012, 0, 0, nullptr }, /* 0x12 */ + { 0x0013, 0, 0, nullptr }, /* 0x13 */ + { 0x0014, 0, 0, nullptr }, /* 0x14 */ + { 0x0015, 0, 0, nullptr }, /* 0x15 */ + { 0x0016, 0, 0, nullptr }, /* 0x16 */ + { 0x0017, 0, 0, nullptr }, /* 0x17 */ + { 0x0018, 0, 0, nullptr }, /* 0x18 */ + { 0x0019, 0, 0, nullptr }, /* 0x19 */ + { 0x001A, 0, 0, nullptr }, /* 0x1A */ + { 0x001B, 0, 0, nullptr }, /* 0x1B */ + { 0x001C, 0, 0, nullptr }, /* 0x1C */ + { 0x001D, 0, 0, nullptr }, /* 0x1D */ + { 0x001E, 0, 0, nullptr }, /* 0x1E */ + { 0x001F, 0, 0, nullptr }, /* 0x1F */ + { 0x0020, 0, 0, nullptr }, /* 0x20 */ + { 0x0021, 0, 0, nullptr }, /* 0x21 */ + { 0x0022, 0, 0, nullptr }, /* 0x22 */ + { 0x0023, 0, 0, nullptr }, /* 0x23 */ + { 0x0024, 0, 0, nullptr }, /* 0x24 */ + { 0x0025, 0, 0, nullptr }, /* 0x25 */ + { 0x0026, 0, 0, nullptr }, /* 0x26 */ + { 0x0027, 0, 0, nullptr }, /* 0x27 */ + { 0x0028, 0, 0, nullptr }, /* 0x28 */ + { 0x0029, 0, 0, nullptr }, /* 0x29 */ + { 0x002A, 0, 0, nullptr }, /* 0x2A */ + { 0x002B, 0, 0, nullptr }, /* 0x2B */ + { 0x002C, 0, 0, nullptr }, /* 0x2C */ + { 0x002D, 0, 0, nullptr }, /* 0x2D */ + { 0x002E, 0, 0, nullptr }, /* 0x2E */ + { 0x002F, 0, 0, nullptr }, /* 0x2F */ + { 0x0030, 0, 0, nullptr }, /* 0x30 */ + { 0x0031, 0, 0, nullptr }, /* 0x31 */ + { 0x0032, 0, 0, nullptr }, /* 0x32 */ + { 0x0033, 0, 0, nullptr }, /* 0x33 */ + { 0x0034, 0, 0, nullptr }, /* 0x34 */ + { 0x0035, 0, 0, nullptr }, /* 0x35 */ + { 0x0036, 0, 0, nullptr }, /* 0x36 */ + { 0x0037, 0, 0, nullptr }, /* 0x37 */ + { 0x0038, 0, 0, nullptr }, /* 0x38 */ + { 0x0039, 0, 0, nullptr }, /* 0x39 */ + { 0x003A, 0, 0, nullptr }, /* 0x3A */ + { 0x003B, 0, 0, nullptr }, /* 0x3B */ + { 0x003C, 0, 0, nullptr }, /* 0x3C */ + { 0x003D, 0, 0, nullptr }, /* 0x3D */ + { 0x003E, 0, 0, nullptr }, /* 0x3E */ + { 0x003F, 0, 0, nullptr }, /* 0x3F */ + { 0x0040, 0, 0, nullptr }, /* 0x40 */ + { 0x0041, 0, 0, nullptr }, /* 0x41 */ + { 0x0042, 0, 0, nullptr }, /* 0x42 */ + { 0x0043, 0, 0, nullptr }, /* 0x43 */ + { 0x0044, 0, 0, nullptr }, /* 0x44 */ + { 0x0045, 0, 0, nullptr }, /* 0x45 */ + { 0x0046, 0, 0, nullptr }, /* 0x46 */ + { 0x0047, 0, 0, nullptr }, /* 0x47 */ + { 0x0048, 0, 0, nullptr }, /* 0x48 */ + { 0x0049, 0, 0, nullptr }, /* 0x49 */ + { 0x004A, 0, 0, nullptr }, /* 0x4A */ + { 0x004B, 0, 0, nullptr }, /* 0x4B */ + { 0x004C, 0, 0, nullptr }, /* 0x4C */ + { 0x004D, 0, 0, nullptr }, /* 0x4D */ + { 0x004E, 0, 0, nullptr }, /* 0x4E */ + { 0x004F, 0, 0, nullptr }, /* 0x4F */ + { 0x0050, 0, 0, nullptr }, /* 0x50 */ + { 0x0051, 0, 0, nullptr }, /* 0x51 */ + { 0x0052, 0, 0, nullptr }, /* 0x52 */ + { 0x0053, 0, 0, nullptr }, /* 0x53 */ + { 0x0054, 0, 0, nullptr }, /* 0x54 */ + { 0x0055, 0, 0, nullptr }, /* 0x55 */ + { 0x0056, 0, 0, nullptr }, /* 0x56 */ + { 0x0057, 0, 0, nullptr }, /* 0x57 */ + { 0x0058, 0, 0, nullptr }, /* 0x58 */ + { 0x0059, 0, 0, nullptr }, /* 0x59 */ + { 0x005A, 0, 0, nullptr }, /* 0x5A */ + { 0x005B, 0, 0, nullptr }, /* 0x5B */ + { 0x005C, 0, 0, nullptr }, /* 0x5C */ + { 0x005D, 0, 0, nullptr }, /* 0x5D */ + { 0x005E, 0, 0, nullptr }, /* 0x5E */ + { 0x005F, 0, 0, nullptr }, /* 0x5F */ + { 0x0060, 0, 0, nullptr }, /* 0x60 */ + { 0x0061, 0, 0, nullptr }, /* 0x61 */ + { 0x0062, 0, 0, nullptr }, /* 0x62 */ + { 0x0063, 0, 0, nullptr }, /* 0x63 */ + { 0x0064, 0, 0, nullptr }, /* 0x64 */ + { 0x0065, 0, 0, nullptr }, /* 0x65 */ + { 0x0066, 0, 0, nullptr }, /* 0x66 */ + { 0x0067, 0, 0, nullptr }, /* 0x67 */ + { 0x0068, 0, 0, nullptr }, /* 0x68 */ + { 0x0069, 0, 0, nullptr }, /* 0x69 */ + { 0x006A, 0, 0, nullptr }, /* 0x6A */ + { 0x006B, 0, 0, nullptr }, /* 0x6B */ + { 0x006C, 0, 0, nullptr }, /* 0x6C */ + { 0x006D, 0, 0, nullptr }, /* 0x6D */ + { 0x006E, 0, 0, nullptr }, /* 0x6E */ + { 0x006F, 0, 0, nullptr }, /* 0x6F */ + { 0x0070, 0, 0, nullptr }, /* 0x70 */ + { 0x0071, 0, 0, nullptr }, /* 0x71 */ + { 0x0072, 0, 0, nullptr }, /* 0x72 */ + { 0x0073, 0, 0, nullptr }, /* 0x73 */ + { 0x0074, 0, 0, nullptr }, /* 0x74 */ + { 0x0075, 0, 0, nullptr }, /* 0x75 */ + { 0x0076, 0, 0, nullptr }, /* 0x76 */ + { 0x0077, 0, 0, nullptr }, /* 0x77 */ + { 0x0078, 0, 0, nullptr }, /* 0x78 */ + { 0x0079, 0, 0, nullptr }, /* 0x79 */ + { 0x007A, 0, 0, nullptr }, /* 0x7A */ + { 0x007B, 0, 0, nullptr }, /* 0x7B */ + { 0x007C, 0, 0, nullptr }, /* 0x7C */ + { 0x007D, 0, 0, nullptr }, /* 0x7D */ + { 0x007E, 0, 0, nullptr }, /* 0x7E */ + { 0x007F, 0, 0, nullptr }, /* 0x7F */ + { 0, 1, 0, nullptr }, /* 0x80 */ + { 0xF880, 0, 0, nullptr }, /* 0x81 */ + { 0xF881, 0, 0, nullptr }, /* 0x82 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x83 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x84 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x85 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x86 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x87 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x88 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x89 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x8F */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x90 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x91 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x92 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x93 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x94 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x95 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x96 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x97 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x98 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x99 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9A */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9B */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9C */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9D */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9E */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0x9F */ /* We convert this as double byte */ + { 0x00A0, 0, 0, nullptr }, /* 0xA0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A1 }, /* 0xA1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A2 }, /* 0xA2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A3 }, /* 0xA3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A4 }, /* 0xA4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A5 }, /* 0xA5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A6 }, /* 0xA6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A7 }, /* 0xA7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A8 }, /* 0xA8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_A9 }, /* 0xA9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AA }, /* 0xAA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AB }, /* 0xAB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AC }, /* 0xAC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AD }, /* 0xAD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AE }, /* 0xAE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_AF }, /* 0xAF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B0 }, /* 0xB0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B1 }, /* 0xB1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B2 }, /* 0xB2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B3 }, /* 0xB3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B4 }, /* 0xB4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B5 }, /* 0xB5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B6 }, /* 0xB6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B7 }, /* 0xB7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B8 }, /* 0xB8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_B9 }, /* 0xB9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BA }, /* 0xBA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BB }, /* 0xBB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BC }, /* 0xBC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BD }, /* 0xBD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BE }, /* 0xBE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_BF }, /* 0xBF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C0 }, /* 0xC0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C1 }, /* 0xC1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C2 }, /* 0xC2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C3 }, /* 0xC3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C4 }, /* 0xC4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C5 }, /* 0xC5 */ + { 0, 0x40, 0x7E, aImplDBCSToUniTab_BIG5_C6 }, /* 0xC6 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC7 */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xC8 */ /* We convert this as double byte */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_C9 }, /* 0xC9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CA }, /* 0xCA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CB }, /* 0xCB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CC }, /* 0xCC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CD }, /* 0xCD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CE }, /* 0xCE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_CF }, /* 0xCF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D0 }, /* 0xD0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D1 }, /* 0xD1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D2 }, /* 0xD2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D3 }, /* 0xD3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D4 }, /* 0xD4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D5 }, /* 0xD5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D6 }, /* 0xD6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D7 }, /* 0xD7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D8 }, /* 0xD8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_D9 }, /* 0xD9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DA }, /* 0xDA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DB }, /* 0xDB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DC }, /* 0xDC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DD }, /* 0xDD */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DE }, /* 0xDE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_DF }, /* 0xDF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E0 }, /* 0xE0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E1 }, /* 0xE1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E2 }, /* 0xE2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E3 }, /* 0xE3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E4 }, /* 0xE4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E5 }, /* 0xE5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E6 }, /* 0xE6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E7 }, /* 0xE7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E8 }, /* 0xE8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_E9 }, /* 0xE9 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EA }, /* 0xEA */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EB }, /* 0xEB */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EC }, /* 0xEC */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_ED }, /* 0xED */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EE }, /* 0xEE */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_EF }, /* 0xEF */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F0 }, /* 0xF0 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F1 }, /* 0xF1 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F2 }, /* 0xF2 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F3 }, /* 0xF3 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F4 }, /* 0xF4 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F5 }, /* 0xF5 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F6 }, /* 0xF6 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F7 }, /* 0xF7 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F8 }, /* 0xF8 */ + { 0, 0x40, 0xFE, aImplDBCSToUniTab_BIG5_F9 }, /* 0xF9 */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFA */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFB */ /* We convert this as double byte */ + { 0, 1, 0, aImplDoubleByteIdentifierTab }, /* 0xFC */ /* We convert this as double byte */ + { 0x00A9, 0, 0, nullptr }, /* 0xFD */ + { 0x2122, 0, 0, nullptr }, /* 0xFE */ + { 0x2026, 0, 0, nullptr } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplUniToDBCSHighTab const aAPPLECHINTRADDBCSHighTab[256] = +{ + { 0x00, 0xF7, aImplUniToDBCSTab_APPLECHINTRAD_00 }, /* 0x00 */ + { 1, 0, nullptr }, /* 0x01 */ + { 0xC7, 0xD9, aImplUniToDBCSTab_BIG5_02 }, /* 0x02 */ + { 0x91, 0xC9, aImplUniToDBCSTab_BIG5_03 }, /* 0x03 */ + { 0x01, 0x51, aImplUniToDBCSTab_BIG5_04 }, /* 0x04 */ + { 1, 0, nullptr }, /* 0x05 */ + { 1, 0, nullptr }, /* 0x06 */ + { 1, 0, nullptr }, /* 0x07 */ + { 1, 0, nullptr }, /* 0x08 */ + { 1, 0, nullptr }, /* 0x09 */ + { 1, 0, nullptr }, /* 0x0A */ + { 1, 0, nullptr }, /* 0x0B */ + { 1, 0, nullptr }, /* 0x0C */ + { 1, 0, nullptr }, /* 0x0D */ + { 1, 0, nullptr }, /* 0x0E */ + { 1, 0, nullptr }, /* 0x0F */ + { 1, 0, nullptr }, /* 0x10 */ + { 1, 0, nullptr }, /* 0x11 */ + { 1, 0, nullptr }, /* 0x12 */ + { 1, 0, nullptr }, /* 0x13 */ + { 1, 0, nullptr }, /* 0x14 */ + { 1, 0, nullptr }, /* 0x15 */ + { 1, 0, nullptr }, /* 0x16 */ + { 1, 0, nullptr }, /* 0x17 */ + { 1, 0, nullptr }, /* 0x18 */ + { 1, 0, nullptr }, /* 0x19 */ + { 1, 0, nullptr }, /* 0x1A */ + { 1, 0, nullptr }, /* 0x1B */ + { 1, 0, nullptr }, /* 0x1C */ + { 1, 0, nullptr }, /* 0x1D */ + { 1, 0, nullptr }, /* 0x1E */ + { 1, 0, nullptr }, /* 0x1F */ + { 0x13, 0xAC, aImplUniToDBCSTab_BIG5_20 }, /* 0x20 */ + { 0x03, 0x99, aImplUniToDBCSTab_APPLECHINTRAD_21 }, /* 0x21 */ + { 0x15, 0xEF, aImplUniToDBCSTab_BIG5_22 }, /* 0x22 */ + { 1, 0, nullptr }, /* 0x23 */ + { 0x60, 0x7D, aImplUniToDBCSTab_BIG5_24 }, /* 0x24 */ + { 0x00, 0xE5, aImplUniToDBCSTab_BIG5_25 }, /* 0x25 */ + { 0x05, 0x42, aImplUniToDBCSTab_BIG5_26 }, /* 0x25 */ + { 1, 0, nullptr }, /* 0x27 */ + { 1, 0, nullptr }, /* 0x28 */ + { 1, 0, nullptr }, /* 0x29 */ + { 1, 0, nullptr }, /* 0x2A */ + { 1, 0, nullptr }, /* 0x2B */ + { 1, 0, nullptr }, /* 0x2C */ + { 1, 0, nullptr }, /* 0x2D */ + { 1, 0, nullptr }, /* 0x2E */ + { 1, 0, nullptr }, /* 0x2F */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_30 }, /* 0x30 */ + { 0x05, 0x29, aImplUniToDBCSTab_BIG5_31 }, /* 0x31 */ + { 0xA3, 0xA3, aImplUniToDBCSTab_BIG5_32 }, /* 0x32 */ + { 0x8E, 0xD5, aImplUniToDBCSTab_BIG5_33 }, /* 0x33 */ + { 1, 0, nullptr }, /* 0x34 */ + { 1, 0, nullptr }, /* 0x35 */ + { 1, 0, nullptr }, /* 0x36 */ + { 1, 0, nullptr }, /* 0x37 */ + { 1, 0, nullptr }, /* 0x38 */ + { 1, 0, nullptr }, /* 0x39 */ + { 1, 0, nullptr }, /* 0x3A */ + { 1, 0, nullptr }, /* 0x3B */ + { 1, 0, nullptr }, /* 0x3C */ + { 1, 0, nullptr }, /* 0x3D */ + { 1, 0, nullptr }, /* 0x3E */ + { 1, 0, nullptr }, /* 0x3F */ + { 1, 0, nullptr }, /* 0x40 */ + { 1, 0, nullptr }, /* 0x41 */ + { 1, 0, nullptr }, /* 0x42 */ + { 1, 0, nullptr }, /* 0x43 */ + { 1, 0, nullptr }, /* 0x44 */ + { 1, 0, nullptr }, /* 0x45 */ + { 1, 0, nullptr }, /* 0x46 */ + { 1, 0, nullptr }, /* 0x47 */ + { 1, 0, nullptr }, /* 0x48 */ + { 1, 0, nullptr }, /* 0x49 */ + { 1, 0, nullptr }, /* 0x4A */ + { 1, 0, nullptr }, /* 0x4B */ + { 1, 0, nullptr }, /* 0x4C */ + { 1, 0, nullptr }, /* 0x4D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_4E }, /* 0x4E */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_4F }, /* 0x4F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_50 }, /* 0x50 */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_51 }, /* 0x51 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_52 }, /* 0x52 */ + { 0x05, 0xFC, aImplUniToDBCSTab_BIG5_53 }, /* 0x53 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_54 }, /* 0x54 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_55 }, /* 0x55 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_56 }, /* 0x56 */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_57 }, /* 0x57 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_58 }, /* 0x58 */ + { 0x03, 0xFF, aImplUniToDBCSTab_BIG5_59 }, /* 0x59 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5A }, /* 0x5A */ + { 0x01, 0xFA, aImplUniToDBCSTab_BIG5_5B }, /* 0x5B */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5C }, /* 0x5C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_5D }, /* 0x5D */ + { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_5E }, /* 0x5E */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_5F }, /* 0x5F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_60 }, /* 0x60 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_61 }, /* 0x61 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_62 }, /* 0x62 */ + { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_63 }, /* 0x63 */ + { 0x06, 0xFF, aImplUniToDBCSTab_BIG5_64 }, /* 0x64 */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_65 }, /* 0x65 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_66 }, /* 0x66 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_67 }, /* 0x67 */ + { 0x12, 0xFD, aImplUniToDBCSTab_BIG5_68 }, /* 0x68 */ + { 0x04, 0xFF, aImplUniToDBCSTab_BIG5_69 }, /* 0x69 */ + { 0x00, 0xFC, aImplUniToDBCSTab_BIG5_6A }, /* 0x6A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6B }, /* 0x6B */ + { 0x00, 0xF9, aImplUniToDBCSTab_BIG5_6C }, /* 0x6C */ + { 0x00, 0xFD, aImplUniToDBCSTab_BIG5_6D }, /* 0x6D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6E }, /* 0x6E */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_6F }, /* 0x6F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_70 }, /* 0x70 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_71 }, /* 0x71 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_72 }, /* 0x72 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_73 }, /* 0x73 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_74 }, /* 0x74 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_75 }, /* 0x75 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_76 }, /* 0x76 */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_77 }, /* 0x77 */ + { 0x02, 0xFF, aImplUniToDBCSTab_BIG5_78 }, /* 0x78 */ + { 0x01, 0xFB, aImplUniToDBCSTab_BIG5_79 }, /* 0x79 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7A }, /* 0x7A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_7B }, /* 0x7B */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_7C }, /* 0x7C */ + { 0x00, 0xFB, aImplUniToDBCSTab_BIG5_7D }, /* 0x7D */ + { 0x03, 0x9C, aImplUniToDBCSTab_BIG5_7E }, /* 0x7E */ + { 0x36, 0xFF, aImplUniToDBCSTab_BIG5_7F }, /* 0x7F */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_80 }, /* 0x80 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_81 }, /* 0x81 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_82 }, /* 0x82 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_83 }, /* 0x83 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_84 }, /* 0x84 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_85 }, /* 0x85 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_86 }, /* 0x86 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_87 }, /* 0x87 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_88 }, /* 0x88 */ + { 0x01, 0xFF, aImplUniToDBCSTab_BIG5_89 }, /* 0x89 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8A }, /* 0x8A */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8B }, /* 0x8B */ + { 0x37, 0xFE, aImplUniToDBCSTab_BIG5_8C }, /* 0x8C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8D }, /* 0x8D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8E }, /* 0x8E */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_8F }, /* 0x8F */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_90 }, /* 0x90 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_91 }, /* 0x91 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_92 }, /* 0x92 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_93 }, /* 0x93 */ + { 0x00, 0x83, aImplUniToDBCSTab_BIG5_94 }, /* 0x94 */ + { 0x77, 0xE5, aImplUniToDBCSTab_BIG5_95 }, /* 0x95 */ + { 0x1C, 0xFF, aImplUniToDBCSTab_BIG5_96 }, /* 0x96 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_97 }, /* 0x97 */ + { 0x00, 0xFE, aImplUniToDBCSTab_BIG5_98 }, /* 0x98 */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_99 }, /* 0x99 */ + { 0x01, 0xFE, aImplUniToDBCSTab_BIG5_9A }, /* 0x9A */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_9B }, /* 0x9B */ + { 0x05, 0xFF, aImplUniToDBCSTab_BIG5_9C }, /* 0x9C */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9D }, /* 0x9D */ + { 0x00, 0xFF, aImplUniToDBCSTab_BIG5_9E }, /* 0x9E */ + { 0x00, 0xA4, aImplUniToDBCSTab_BIG5_9F }, /* 0x9F */ + { 1, 0, nullptr }, /* 0xA0 */ + { 1, 0, nullptr }, /* 0xA1 */ + { 1, 0, nullptr }, /* 0xA2 */ + { 1, 0, nullptr }, /* 0xA3 */ + { 1, 0, nullptr }, /* 0xA4 */ + { 1, 0, nullptr }, /* 0xA5 */ + { 1, 0, nullptr }, /* 0xA6 */ + { 1, 0, nullptr }, /* 0xA7 */ + { 1, 0, nullptr }, /* 0xA8 */ + { 1, 0, nullptr }, /* 0xA9 */ + { 1, 0, nullptr }, /* 0xAA */ + { 1, 0, nullptr }, /* 0xAB */ + { 1, 0, nullptr }, /* 0xAC */ + { 1, 0, nullptr }, /* 0xAD */ + { 1, 0, nullptr }, /* 0xAE */ + { 1, 0, nullptr }, /* 0xAF */ + { 1, 0, nullptr }, /* 0xB0 */ + { 1, 0, nullptr }, /* 0xB1 */ + { 1, 0, nullptr }, /* 0xB2 */ + { 1, 0, nullptr }, /* 0xB3 */ + { 1, 0, nullptr }, /* 0xB4 */ + { 1, 0, nullptr }, /* 0xB5 */ + { 1, 0, nullptr }, /* 0xB6 */ + { 1, 0, nullptr }, /* 0xB7 */ + { 1, 0, nullptr }, /* 0xB8 */ + { 1, 0, nullptr }, /* 0xB9 */ + { 1, 0, nullptr }, /* 0xBA */ + { 1, 0, nullptr }, /* 0xBB */ + { 1, 0, nullptr }, /* 0xBC */ + { 1, 0, nullptr }, /* 0xBD */ + { 1, 0, nullptr }, /* 0xBE */ + { 1, 0, nullptr }, /* 0xBF */ + { 1, 0, nullptr }, /* 0xC0 */ + { 1, 0, nullptr }, /* 0xC1 */ + { 1, 0, nullptr }, /* 0xC2 */ + { 1, 0, nullptr }, /* 0xC3 */ + { 1, 0, nullptr }, /* 0xC4 */ + { 1, 0, nullptr }, /* 0xC5 */ + { 1, 0, nullptr }, /* 0xC6 */ + { 1, 0, nullptr }, /* 0xC7 */ + { 1, 0, nullptr }, /* 0xC8 */ + { 1, 0, nullptr }, /* 0xC9 */ + { 1, 0, nullptr }, /* 0xCA */ + { 1, 0, nullptr }, /* 0xCB */ + { 1, 0, nullptr }, /* 0xCC */ + { 1, 0, nullptr }, /* 0xCD */ + { 1, 0, nullptr }, /* 0xCE */ + { 1, 0, nullptr }, /* 0xCF */ + { 1, 0, nullptr }, /* 0xD0 */ + { 1, 0, nullptr }, /* 0xD1 */ + { 1, 0, nullptr }, /* 0xD2 */ + { 1, 0, nullptr }, /* 0xD3 */ + { 1, 0, nullptr }, /* 0xD4 */ + { 1, 0, nullptr }, /* 0xD5 */ + { 1, 0, nullptr }, /* 0xD6 */ + { 1, 0, nullptr }, /* 0xD7 */ + { 1, 0, nullptr }, /* 0xD8 */ + { 1, 0, nullptr }, /* 0xD9 */ + { 1, 0, nullptr }, /* 0xDA */ + { 1, 0, nullptr }, /* 0xDB */ + { 1, 0, nullptr }, /* 0xDC */ + { 1, 0, nullptr }, /* 0xDD */ + { 1, 0, nullptr }, /* 0xDE */ + { 1, 0, nullptr }, /* 0xDF */ + { 1, 0, nullptr }, /* 0xE0 */ + { 1, 0, nullptr }, /* 0xE1 */ + { 1, 0, nullptr }, /* 0xE2 */ + { 1, 0, nullptr }, /* 0xE3 */ + { 1, 0, nullptr }, /* 0xE4 */ + { 1, 0, nullptr }, /* 0xE5 */ + { 1, 0, nullptr }, /* 0xE6 */ + { 1, 0, nullptr }, /* 0xE7 */ + { 1, 0, nullptr }, /* 0xE8 */ + { 1, 0, nullptr }, /* 0xE9 */ + { 1, 0, nullptr }, /* 0xEA */ + { 1, 0, nullptr }, /* 0xEB */ + { 1, 0, nullptr }, /* 0xEC */ + { 1, 0, nullptr }, /* 0xED */ + { 1, 0, nullptr }, /* 0xEE */ + { 1, 0, nullptr }, /* 0xEF */ + { 1, 0, nullptr }, /* 0xF0 */ + { 1, 0, nullptr }, /* 0xF1 */ + { 1, 0, nullptr }, /* 0xF2 */ + { 1, 0, nullptr }, /* 0xF3 */ + { 1, 0, nullptr }, /* 0xF4 */ + { 1, 0, nullptr }, /* 0xF5 */ + { 1, 0, nullptr }, /* 0xF6 */ + { 1, 0, nullptr }, /* 0xF7 */ + { 0x80, 0x81, aImplUniToDBCSTab_APPLECHINTRAD_F8 }, /* 0xF8 */ + { 1, 0, nullptr }, /* 0xF9 */ + { 0x0C, 0x0D, aImplUniToDBCSTab_BIG5_FA }, /* 0xFA */ + { 1, 0, nullptr }, /* 0xFB */ + { 1, 0, nullptr }, /* 0xFC */ + { 1, 0, nullptr }, /* 0xFD */ + { 0x30, 0x6B, aImplUniToDBCSTab_BIG5_FE }, /* 0xFE */ + { 0x01, 0xFD, aImplUniToDBCSTab_BIG5_FF } /* 0xFF */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplDBCSConvertData const aImplAPPLECHINTRADDBCSCvtData = +{ + aAPPLECHINTRADUniLeadTab, + aAPPLECHINTRADDBCSHighTab, + nullptr, + 0, + 0x00, 0xFF, + 0x40, 0xFE, +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplAPPLECHINTRADTextEncodingData + = { { &aImplAPPLECHINTRADDBCSCvtData, + ImplDBCSToUnicode, + ImplUnicodeToDBCS, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "euc-tw", + "big5", + 1, + 2, + 2, + 136, + RTL_TEXTENCODING_INFO_MULTIBYTE }; + /* MAC, SCRIPT_CHINESE_TRADITIONAL, pc code page 950, mac encoding 2 */ diff --git a/sal/textenc/tcvtuni1.tab b/sal/textenc/tcvtuni1.tab new file mode 100644 index 000000000..e2c781317 --- /dev/null +++ b/sal/textenc/tcvtuni1.tab @@ -0,0 +1,42 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* Unicode Encodings */ + +ImplTextEncodingData const aImplUTF7TextEncodingData + = { { nullptr, + ImplUTF7ToUnicode, + ImplUnicodeToUTF7, + ImplUTF7CreateUTF7TextToUnicodeContext, + ImplUTF7DestroyTextToUnicodeContext, + ImplUTF7ResetTextToUnicodeContext, + ImplUTF7CreateUnicodeToTextContext, + ImplUTF7DestroyUnicodeToTextContext, + ImplUTF7ResetUnicodeToTextContext }, + "iso8859-1", + "utf-7", + 1, + 6, + 1, + 0, + RTL_TEXTENCODING_INFO_CONTEXT + | RTL_TEXTENCODING_INFO_UNICODE + | RTL_TEXTENCODING_INFO_7BIT + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_UNICODE, pc code page 850 */ diff --git a/sal/textenc/tcvtutf7.cxx b/sal/textenc/tcvtutf7.cxx new file mode 100644 index 000000000..0f3ea4e7c --- /dev/null +++ b/sal/textenc/tcvtutf7.cxx @@ -0,0 +1,602 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include "tenchelp.hxx" +#include "unichars.hxx" + +/* ======================================================================= */ + +unsigned char const aImplBase64Tab[64] = +{ + /* A-Z */ + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, + /* a-z */ + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, + /* 0-9,+,/ */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x2B, 0x2F +}; + +/* Index in Base64Tab or 0xFF, when is an invalid character */ +unsigned char const aImplBase64IndexTab[128] = +{ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x00-0x07 */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x08-0x0F */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x10-0x17 */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x18-0x1F */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x20-0x27 !"#$%&' */ + 0xFF, 0xFF, 0xFF, 62, 0xFF, 0xFF, 0xFF, 63, /* 0x28-0x2F ()*+,-./ */ + 52, 53, 54, 55, 56, 57, 58, 59, /* 0x30-0x37 01234567 */ + 60, 61, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x38-0x3F 89:;<=>? */ + 0xFF, 0, 1, 2, 3, 4, 5, 6, /* 0x40-0x47 @ABCDEFG */ + 7, 8, 9, 10, 11, 12, 13, 14, /* 0x48-0x4F HIJKLMNO */ + 15, 16, 17, 18, 19, 20, 21, 22, /* 0x50-0x57 PQRSTUVW */ + 23, 24, 25, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0x58-0x5F XYZ[\]^_ */ + 0xFF, 26, 27, 28, 29, 30, 31, 32, /* 0x60-0x67 `abcdefg */ + 33, 34, 35, 36, 37, 38, 39, 40, /* 0x68-0x6F hijklmno */ + 41, 42, 43, 44, 45, 46, 47, 48, /* 0x70-0x77 pqrstuvw */ + 49, 50, 51, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF /* 0x78-0x7F xyz{|}~ */ +}; + +unsigned char const aImplMustShiftTab[128] = +{ + 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00-0x07 */ + 1, 0, 0, 1, 0, 1, 1, 1, /* 0x08-0x0F 0x09 == HTAB, 0x0A == LF 0x0C == CR */ + 1, 1, 1, 1, 1, 1, 1, 1, /* 0x10-0x17 */ + 1, 1, 1, 1, 1, 1, 1, 1, /* 0x18-0x1F */ + 0, 1, 1, 1, 1, 1, 1, 0, /* 0x20-0x27 !"#$%&' */ + 0, 0, 1, 1, 0, 1, 0, 0, /* 0x28-0x2F ()*+,-./ */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x37 01234567 */ + 0, 0, 0, 1, 1, 1, 1, 0, /* 0x38-0x3F 89:;<=>? */ + 1, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x47 @ABCDEFG */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x48-0x4F HIJKLMNO */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x57 PQRSTUVW */ + 0, 0, 0, 1, 1, 1, 1, 1, /* 0x58-0x5F XYZ[\]^_ */ + 1, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x67 `abcdefg */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x68-0x6F hijklmno */ + 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x77 pqrstuvw */ + 0, 0, 0, 1, 1, 1, 1, 1 /* 0x78-0x7F xyz{|}~ */ +}; + +/* + */ +#define IMPL_SHIFT_IN_CHAR 0x2B +/* - */ +#define IMPL_SHIFT_OUT_CHAR 0x2D + +/* ----------------------------------------------------------------------- */ + +namespace { + +struct ImplUTF7ToUCContextData +{ + bool mbShifted; + bool mbFirst; + bool mbWroteOne; + sal_uInt32 mnBitBuffer; + sal_uInt32 mnBufferBits; +}; + +} + +/* ----------------------------------------------------------------------- */ + +void* ImplUTF7CreateUTF7TextToUnicodeContext() +{ + ImplUTF7ToUCContextData* pContextData = new ImplUTF7ToUCContextData; + pContextData->mbShifted = false; + pContextData->mbFirst = false; + pContextData->mbWroteOne = false; + pContextData->mnBitBuffer = 0; + pContextData->mnBufferBits = 0; + return pContextData; +} + +/* ----------------------------------------------------------------------- */ + +void ImplUTF7DestroyTextToUnicodeContext( void* pContext ) +{ + delete static_cast< ImplUTF7ToUCContextData * >(pContext); +} + +/* ----------------------------------------------------------------------- */ + +void ImplUTF7ResetTextToUnicodeContext( void* pContext ) +{ + ImplUTF7ToUCContextData* pContextData = static_cast(pContext); + pContextData->mbShifted = false; + pContextData->mbFirst = false; + pContextData->mbWroteOne = false; + pContextData->mnBitBuffer = 0; + pContextData->mnBufferBits = 0; +} + +/* ----------------------------------------------------------------------- */ + +sal_Size ImplUTF7ToUnicode( SAL_UNUSED_PARAMETER const void*, void* pContext, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ) +{ + ImplUTF7ToUCContextData* pContextData = static_cast(pContext); + unsigned char c ='\0'; + unsigned char nBase64Value = 0; + bool bEnd = false; + bool bShifted; + bool bFirst; + bool bWroteOne; + bool bBase64End; + sal_uInt32 nBitBuffer; + sal_uInt32 nBitBufferTemp; + sal_uInt32 nBufferBits; + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + +/* !!! Implementation not finished !!! + if ( pContextData ) + { + bShifted = pContextData->mbShifted; + bFirst = pContextData->mbFirst; + bWroteOne = pContextData->mbWroteOne; + nBitBuffer = pContextData->mnBitBuffer; + nBufferBits = pContextData->mnBufferBits; + } + else +*/ + { + bShifted = false; + bFirst = false; + bWroteOne = false; + nBitBuffer = 0; + nBufferBits = 0; + } + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + do + { + if ( pSrcBuf < pEndSrcBuf ) + { + c = static_cast(*pSrcBuf); + + /* End, when not a base64 character */ + bBase64End = false; + if ( c <= 0x7F ) + { + nBase64Value = aImplBase64IndexTab[c]; + if ( nBase64Value == 0xFF ) + bBase64End = true; + } + } + else + { + bEnd = true; + bBase64End = true; + } + + if ( bShifted ) + { + if ( bBase64End ) + { + bShifted = false; + + /* If the character causing us to drop out was SHIFT_IN */ + /* or SHIFT_OUT, it may be a special escape for SHIFT_IN. */ + /* The test for SHIFT_IN is not necessary, but allows */ + /* an alternate form of UTF-7 where SHIFT_IN is escaped */ + /* by SHIFT_IN. This only works for some values of */ + /* SHIFT_IN. It is so implemented, because this comes */ + /* from the official unicode book (The Unicode Standard, */ + /* Version 2.0) and so I think, that someone of the */ + /* world has used this feature. */ + if ( !bEnd ) + { + if ( (c == IMPL_SHIFT_IN_CHAR) || (c == IMPL_SHIFT_OUT_CHAR) ) + { + /* If no base64 character, and the terminating */ + /* character of the shift sequence was the */ + /* SHIFT_OUT_CHAR, then it't a special escape */ + /* for SHIFT_IN_CHAR. */ + if ( bFirst && (c == IMPL_SHIFT_OUT_CHAR) ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + *pDestBuf = IMPL_SHIFT_IN_CHAR; + pDestBuf++; + bWroteOne = true; + } + + /* Skip character */ + pSrcBuf++; + if ( pSrcBuf < pEndSrcBuf ) + c = static_cast(*pSrcBuf); + else + bEnd = true; + } + } + + /* Empty sequence not allowed, so when we don't write one */ + /* valid char, then the sequence is corrupt */ + if ( !bWroteOne ) + { + /* When no more bytes in the source buffer, then */ + /* this buffer may be too small */ + if ( bEnd ) + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + if (!bEnd) { + ++pSrcBuf; + } + } else { + //TODO: move pSrcBuf back to a reasonable starting place + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + /* We insert here no default char, because I think */ + /* this is better to ignore this */ + } + } + } + else + { + /* Add 6 Bits from character to the bit buffer */ + nBufferBits += 6; + nBitBuffer |= static_cast(nBase64Value & 0x3F) << (32-nBufferBits); + bFirst = false; + } + + /* Extract as many full 16 bit characters as possible from the */ + /* bit buffer. */ + while ( (pDestBuf < pEndDestBuf) && (nBufferBits >= 16) ) + { + nBitBufferTemp = nBitBuffer >> (32-16); + *pDestBuf = static_cast(nBitBufferTemp & 0xFFFF); + pDestBuf++; + nBitBuffer <<= 16; + nBufferBits -= 16; + bWroteOne = true; + } + + if ( nBufferBits >= 16 ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if ( bBase64End ) + { + /* Sequence ended and we have some bits, then the */ + /* sequence is corrupted */ + if ( nBufferBits && nBitBuffer ) + { + /* When no more bytes in the source buffer, then */ + /* this buffer may be too small */ + if ( bEnd ) + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + if (!bEnd) { + ++pSrcBuf; + } + } else { + //TODO: move pSrcBuf back to a reasonable starting place + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) != RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + *pDestBuf++ + = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + } + } + + } + + nBitBuffer = 0; + nBufferBits = 0; + } + } + + if ( !bEnd ) + { + if ( !bShifted ) + { + if ( c == IMPL_SHIFT_IN_CHAR ) + { + bShifted = true; + bFirst = true; + bWroteOne = false; + } + else + { + /* No direct encoded character, then the buffer is */ + /* corrupt */ + if ( c > 0x7F ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_INVALID; + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) == RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR ) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + ++pSrcBuf; + } + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR; + break; + } + if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) != RTL_TEXTTOUNICODE_FLAGS_INVALID_IGNORE ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + *pDestBuf++ + = RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; + } + } + else + { + /* Write char to unicode buffer */ + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + *pDestBuf = c; + pDestBuf++; + + } + } + } + + pSrcBuf++; + } + } + while ( !bEnd ); + + if ( pContextData ) + { + pContextData->mbShifted = bShifted; + pContextData->mbFirst = bFirst; + pContextData->mbWroteOne = bWroteOne; + pContextData->mnBitBuffer = nBitBuffer; + pContextData->mnBufferBits = nBufferBits; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +/* ======================================================================= */ + +namespace { + +struct ImplUTF7FromUCContextData +{ + bool mbShifted; + sal_uInt32 mnBitBuffer; + sal_uInt32 mnBufferBits; +}; + +} + +/* ----------------------------------------------------------------------- */ + +void* ImplUTF7CreateUnicodeToTextContext() +{ + ImplUTF7FromUCContextData* pContextData = new ImplUTF7FromUCContextData; + pContextData->mbShifted = false; + pContextData->mnBitBuffer = 0; + pContextData->mnBufferBits = 0; + return pContextData; +} + +/* ----------------------------------------------------------------------- */ + +void ImplUTF7DestroyUnicodeToTextContext( void* pContext ) +{ + delete static_cast< ImplUTF7FromUCContextData * >(pContext); +} + +/* ----------------------------------------------------------------------- */ + +void ImplUTF7ResetUnicodeToTextContext( void* pContext ) +{ + ImplUTF7FromUCContextData* pContextData = static_cast(pContext); + pContextData->mbShifted = false; + pContextData->mnBitBuffer = 0; + pContextData->mnBufferBits = 0; +} + +/* ----------------------------------------------------------------------- */ + +sal_Size ImplUnicodeToUTF7( SAL_UNUSED_PARAMETER const void*, void* pContext, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + SAL_UNUSED_PARAMETER sal_uInt32, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ) +{ + ImplUTF7FromUCContextData* pContextData = static_cast(pContext); + sal_Unicode c = '\0'; + bool bEnd = false; + bool bShifted; + bool bNeedShift; + sal_uInt32 nBitBuffer; + sal_uInt32 nBitBufferTemp; + sal_uInt32 nBufferBits; + char* pEndDestBuf; + const sal_Unicode* pEndSrcBuf; + +/* !!! Implementation not finished !!! + if ( pContextData ) + { + bShifted = pContextData->mbShifted; + nBitBuffer = pContextData->mnBitBuffer; + nBufferBits = pContextData->mnBufferBits; + } + else +*/ + { + bShifted = false; + nBitBuffer = 0; + nBufferBits = 0; + } + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestBytes; + pEndSrcBuf = pSrcBuf+nSrcChars; + do + { + if ( pSrcBuf < pEndSrcBuf ) + { + c = *pSrcBuf; + + bNeedShift = (c > 0x7F) || aImplMustShiftTab[c]; + if ( bNeedShift && !bShifted ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + *pDestBuf = IMPL_SHIFT_IN_CHAR; + pDestBuf++; + /* Special case handling for SHIFT_IN_CHAR */ + if ( c == IMPL_SHIFT_IN_CHAR ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + *pDestBuf = IMPL_SHIFT_OUT_CHAR; + pDestBuf++; + } + else + bShifted = true; + } + } + else + { + bEnd = true; + bNeedShift = false; + } + + if ( bShifted ) + { + /* Write the character to the bit buffer, or pad the bit */ + /* buffer out to a full base64 character */ + if ( bNeedShift ) + { + nBufferBits += 16; + nBitBuffer |= static_cast(c) << (32-nBufferBits); + } + else + nBufferBits += (6-(nBufferBits%6))%6; + + /* Flush out as many full base64 characters as possible */ + while ( (pDestBuf < pEndDestBuf) && (nBufferBits >= 6) ) + { + nBitBufferTemp = nBitBuffer >> (32-6); + *pDestBuf = aImplBase64Tab[nBitBufferTemp]; + pDestBuf++; + nBitBuffer <<= 6; + nBufferBits -= 6; + } + + if ( nBufferBits >= 6 ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + /* Write SHIFT_OUT_CHAR, when needed */ + if ( !bNeedShift ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + *pDestBuf = IMPL_SHIFT_OUT_CHAR; + pDestBuf++; + bShifted = false; + } + } + + if ( !bEnd ) + { + /* Character can be directly encoded */ + if ( !bNeedShift ) + { + if ( pDestBuf >= pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + *pDestBuf = static_cast< char >(static_cast< unsigned char >(c)); + pDestBuf++; + } + + pSrcBuf++; + } + } + while ( !bEnd ); + + if ( pContextData ) + { + pContextData->mbShifted = bShifted; + pContextData->mnBitBuffer = nBitBuffer; + pContextData->mnBufferBits = nBufferBits; + } + + *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf); + return (nDestBytes - (pEndDestBuf-pDestBuf)); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tcvtutf8.cxx b/sal/textenc/tcvtutf8.cxx new file mode 100644 index 000000000..f210b654d --- /dev/null +++ b/sal/textenc/tcvtutf8.cxx @@ -0,0 +1,458 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include +#include + +#include "converter.hxx" +#include "tcvtutf8.hxx" +#include "tenchelp.hxx" +#include "unichars.hxx" + +namespace { + +struct ImplUtf8ToUnicodeContext +{ + sal_uInt32 nUtf32; + int nBytes; + int nShift; + bool bCheckBom; +}; + +struct ImplUnicodeToUtf8Context +{ + sal_Unicode nHighSurrogate; /* 0xFFFF: write BOM */ +}; + +} + +void * ImplCreateUtf8ToUnicodeContext() +{ + ImplUtf8ToUnicodeContext * p = new ImplUtf8ToUnicodeContext; + ImplResetUtf8ToUnicodeContext(p); + return p; +} + +void ImplResetUtf8ToUnicodeContext(void * pContext) +{ + if (pContext != nullptr) + { + static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nShift = -1; + static_cast< ImplUtf8ToUnicodeContext * >(pContext)->bCheckBom = true; + } +} + +void ImplDestroyUtf8ToUnicodeContext(void * pContext) +{ + delete static_cast< ImplUtf8ToUnicodeContext * >(pContext); +} + +sal_Size ImplConvertUtf8ToUnicode( + void const * pData, void * pContext, char const * pSrcBuf, + sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes) +{ + bool bJavaUtf8 = pData != nullptr; + sal_uInt32 nUtf32 = 0; + int nBytes = int(); + int nShift = -1; + bool bCheckBom = true; + sal_uInt32 nInfo = 0; + unsigned char const * pSrcBufPtr = reinterpret_cast(pSrcBuf); + unsigned char const * pSrcBufEnd = pSrcBufPtr + nSrcBytes; + sal_Unicode * pDestBufPtr = pDestBuf; + sal_Unicode * pDestBufEnd = pDestBufPtr + nDestChars; + unsigned char const * startOfCurrentChar = pSrcBufPtr; + + if (pContext != nullptr) + { + nUtf32 = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nUtf32; + nBytes = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nBytes; + nShift = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nShift; + bCheckBom = static_cast< ImplUtf8ToUnicodeContext * >(pContext)->bCheckBom; + } + + while (pSrcBufPtr < pSrcBufEnd) + { + bool bConsume = true; + sal_uInt32 nChar = *pSrcBufPtr++; + if (nShift < 0) + // Allow (illegal) 5 and 6 byte sequences, so they are read as a + // single individual bad character: + if (nChar <= 0x7F) + { + nUtf32 = nChar; + nBytes = 1; + goto transform; + } + else if (nChar <= 0xBF) + goto bad_input; + else if (nChar <= 0xDF) + { + nUtf32 = (nChar & 0x1F) << 6; + nBytes = 2; + nShift = 0; + } + else if (nChar <= 0xEF) + { + nUtf32 = (nChar & 0x0F) << 12; + nBytes = 3; + nShift = 6; + } + else if (nChar <= 0xF7) + { + nUtf32 = (nChar & 0x07) << 18; + nBytes = 4; + nShift = 12; + } + else if (nChar <= 0xFB) + { + nUtf32 = (nChar & 0x03) << 24; + nBytes = 5; + nShift = 18; + } + else if (nChar <= 0xFD) + { + nUtf32 = (nChar & 0x01) << 30; + nBytes = 6; + nShift = 24; + } + else + goto bad_input; + else if ((nChar & 0xC0) == 0x80) + { + nUtf32 |= (nChar & 0x3F) << nShift; + if (nShift == 0) + goto transform; + else + nShift -= 6; + } + else + { + /* + This byte is preceded by a broken UTF-8 sequence; if this byte + is neither in the range [0x80..0xBF] nor in the range + [0xFE..0xFF], assume that this byte does not belong to that + broken sequence, but instead starts a new, legal UTF-8 sequence: + */ + bConsume = nChar >= 0xFE; + goto bad_input; + } + continue; + + transform: + if (!bCheckBom || nUtf32 != 0xFEFF || nBytes != 3 + || (nFlags & RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE) == 0 + || bJavaUtf8) + { + switch (nBytes) { + case 1: + if (bJavaUtf8 && nUtf32 == 0) { + goto bad_input; + } + break; + case 2: + if (nUtf32 < 0x80 && !(bJavaUtf8 && nUtf32 == 0)) { + goto bad_input; + } + break; + case 3: + if (nUtf32 < 0x800 || (!bJavaUtf8 && rtl::isSurrogate(nUtf32))) + { + goto bad_input; + } + break; + case 4: + if (nUtf32 < 0x10000 || !rtl::isUnicodeCodePoint(nUtf32) + || bJavaUtf8) + { + goto bad_input; + } + break; + default: + goto bad_input; + } + if (nUtf32 <= 0xFFFF) + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast(nUtf32); + else + goto no_output; + else if (pDestBufEnd - pDestBufPtr >= 2) + pDestBufPtr += rtl::splitSurrogates(nUtf32, pDestBufPtr); + else + goto no_output; + } + nShift = -1; + bCheckBom = false; + startOfCurrentChar = pSrcBufPtr; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, nBytes != 1, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nShift = -1; + bCheckBom = false; + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) { + if (!bConsume) + --pSrcBufPtr; + } else { + pSrcBufPtr = startOfCurrentChar; + } + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nShift = -1; + bCheckBom = false; + if (!bConsume) + --pSrcBufPtr; + startOfCurrentChar = pSrcBufPtr; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBufPtr; + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + if (nShift >= 0 + && (nInfo & (RTL_TEXTTOUNICODE_INFO_ERROR + | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL)) + == 0) + { + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) + nInfo |= RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL; + else + switch (sal::detail::textenc::handleBadInputTextToUnicodeConversion( + false, true, 0, nFlags, &pDestBufPtr, pDestBufEnd, + &nInfo)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) != 0) { + pSrcBufPtr = startOfCurrentChar; + } + [[fallthrough]]; + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nShift = -1; + bCheckBom = false; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + } + + if (pContext != nullptr) + { + static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nUtf32 = nUtf32; + static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nBytes = nBytes; + static_cast< ImplUtf8ToUnicodeContext * >(pContext)->nShift = nShift; + static_cast< ImplUtf8ToUnicodeContext * >(pContext)->bCheckBom = bCheckBom; + } + if (pInfo != nullptr) + *pInfo = nInfo; + if (pSrcCvtBytes != nullptr) + *pSrcCvtBytes = reinterpret_cast< char const * >(pSrcBufPtr) - pSrcBuf; + return pDestBufPtr - pDestBuf; +} + +void * ImplCreateUnicodeToUtf8Context() +{ + ImplUnicodeToUtf8Context * p = new ImplUnicodeToUtf8Context; + ImplResetUnicodeToUtf8Context(p); + return p; +} + +void ImplResetUnicodeToUtf8Context(void * pContext) +{ + if (pContext != nullptr) + static_cast< ImplUnicodeToUtf8Context * >(pContext)->nHighSurrogate = 0xFFFF; +} + +void ImplDestroyUnicodeToUtf8Context(void * pContext) +{ + delete static_cast< ImplUnicodeToUtf8Context * >(pContext); +} + +sal_Size ImplConvertUnicodeToUtf8( + void const * pData, void * pContext, sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size * pSrcCvtChars) +{ + bool bJavaUtf8 = pData != nullptr; + sal_Unicode nHighSurrogate = 0xFFFF; + sal_uInt32 nInfo = 0; + sal_Unicode const * pSrcBufPtr = pSrcBuf; + sal_Unicode const * pSrcBufEnd = pSrcBufPtr + nSrcChars; + char * pDestBufPtr = pDestBuf; + char * pDestBufEnd = pDestBufPtr + nDestBytes; + + if (pContext != nullptr) + nHighSurrogate + = static_cast< ImplUnicodeToUtf8Context * >(pContext)->nHighSurrogate; + + if (nHighSurrogate == 0xFFFF) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE) != 0 + && !bJavaUtf8) + { + if (pDestBufEnd - pDestBufPtr >= 3) + { + /* Write BOM (U+FEFF) as UTF-8: */ + *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0xEF)); + *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0xBB)); + *pDestBufPtr++ = static_cast< char >(static_cast< unsigned char >(0xBF)); + } + else + { + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + goto done; + } + } + nHighSurrogate = 0; + } + + while (pSrcBufPtr < pSrcBufEnd) + { + sal_uInt32 nChar = *pSrcBufPtr++; + if (nHighSurrogate == 0) + { + if (rtl::isHighSurrogate(nChar) && !bJavaUtf8) + { + nHighSurrogate = static_cast(nChar); + continue; + } + else if (rtl::isLowSurrogate(nChar) && !bJavaUtf8) + { + goto bad_input; + } + } + else if (rtl::isLowSurrogate(nChar) && !bJavaUtf8) + nChar = rtl::combineSurrogates(nHighSurrogate, nChar); + else + goto bad_input; + + assert(bJavaUtf8 ? nChar <= 0xFFFF : rtl::isUnicodeScalarValue(nChar)); + + if (nChar <= 0x7F && (!bJavaUtf8 || nChar != 0)) + if (pDestBufPtr != pDestBufEnd) + *pDestBufPtr++ = static_cast< char >(nChar); + else + goto no_output; + else if (nChar <= 0x7FF) + if (pDestBufEnd - pDestBufPtr >= 2) + { + *pDestBufPtr++ = static_cast< char >(0xC0 | (nChar >> 6)); + *pDestBufPtr++ = static_cast< char >(0x80 | (nChar & 0x3F)); + } + else + goto no_output; + else if (nChar <= 0xFFFF) + if (pDestBufEnd - pDestBufPtr >= 3) + { + *pDestBufPtr++ = static_cast< char >(0xE0 | (nChar >> 12)); + *pDestBufPtr++ = static_cast< char >(0x80 | ((nChar >> 6) & 0x3F)); + *pDestBufPtr++ = static_cast< char >(0x80 | (nChar & 0x3F)); + } + else + goto no_output; + else if (pDestBufEnd - pDestBufPtr >= 4) + { + *pDestBufPtr++ = static_cast< char >(0xF0 | (nChar >> 18)); + *pDestBufPtr++ = static_cast< char >(0x80 | ((nChar >> 12) & 0x3F)); + *pDestBufPtr++ = static_cast< char >(0x80 | ((nChar >> 6) & 0x3F)); + *pDestBufPtr++ = static_cast< char >(0x80 | (nChar & 0x3F)); + } + else + goto no_output; + nHighSurrogate = 0; + continue; + + bad_input: + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, nullptr, + 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + continue; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + goto no_output; + } + break; + + no_output: + --pSrcBufPtr; + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + if (nHighSurrogate != 0 + && (nInfo & (RTL_UNICODETOTEXT_INFO_ERROR + | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL)) + == 0) + { + if ((nFlags & RTL_UNICODETOTEXT_FLAGS_FLUSH) != 0) + nInfo |= RTL_UNICODETOTEXT_INFO_SRCBUFFERTOSMALL; + else + switch (sal::detail::textenc::handleBadInputUnicodeToTextConversion( + false, 0, nFlags, &pDestBufPtr, pDestBufEnd, &nInfo, + nullptr, 0, nullptr)) + { + case sal::detail::textenc::BAD_INPUT_STOP: + case sal::detail::textenc::BAD_INPUT_CONTINUE: + nHighSurrogate = 0; + break; + + case sal::detail::textenc::BAD_INPUT_NO_OUTPUT: + nInfo |= RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + } + + done: + if (pContext != nullptr) + static_cast< ImplUnicodeToUtf8Context * >(pContext)->nHighSurrogate + = nHighSurrogate; + if (pInfo != nullptr) + *pInfo = nInfo; + if (pSrcCvtChars != nullptr) + *pSrcCvtChars = pSrcBufPtr - pSrcBuf; + return pDestBufPtr - pDestBuf; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tcvtutf8.hxx b/sal/textenc/tcvtutf8.hxx new file mode 100644 index 000000000..a64d50044 --- /dev/null +++ b/sal/textenc/tcvtutf8.hxx @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SAL_TEXTENC_TCVTUTF8_HXX +#define INCLUDED_SAL_TEXTENC_TCVTUTF8_HXX + +#include + +#include + +void * ImplCreateUtf8ToUnicodeContext(); + +void ImplResetUtf8ToUnicodeContext(void * pContext); + +void ImplDestroyUtf8ToUnicodeContext(void * pContext); + +sal_Size ImplConvertUtf8ToUnicode( + void const * pData, void * pContext, char const * pSrcBuf, + sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes); + +void * ImplCreateUnicodeToUtf8Context(); + +void ImplResetUnicodeToUtf8Context(void * pContext); + +void ImplDestroyUnicodeToUtf8Context(void * pContext); + +sal_Size ImplConvertUnicodeToUtf8( + void const * pData, void * pContext, sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, char * pDestBuf, sal_Size nDestBytes, sal_uInt32 nFlags, + sal_uInt32 * pInfo, sal_Size* pSrcCvtChars); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tenchelp.hxx b/sal/textenc/tenchelp.hxx new file mode 100644 index 000000000..469ffabb7 --- /dev/null +++ b/sal/textenc/tenchelp.hxx @@ -0,0 +1,250 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_TENCHELP_HXX +#define INCLUDED_SAL_TEXTENC_TENCHELP_HXX + +#include + +#include +#include +#include +#include + +#include "unichars.hxx" + +#define RTL_TEXTCVT_BYTE_PRIVATE_START 0xF100 +#define RTL_TEXTCVT_BYTE_PRIVATE_END 0xF1FF + +/* ----------------- */ +/* - TextConverter - */ +/* ----------------- */ + +typedef +sal_Size (* ImplConvertToUnicodeProc)(void const * pData, + void * pContext, + char const * pSrcBuf, + sal_Size nSrcBytes, + sal_Unicode * pDestBuf, + sal_Size nDestChars, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtBytes); + +typedef +sal_Size (* ImplConvertToTextProc)(void const * pData, + void * pContext, + sal_Unicode const * pSrcBuf, + sal_Size nSrcChars, + char * pDestBuf, + sal_Size nDestBytes, + sal_uInt32 nFlags, + sal_uInt32 * pInfo, + sal_Size * pSrcCvtChars); + +typedef void * (* ImplCreateTextContextProc)(); + +typedef void (* ImplDestroyTextContextProc)(void * pContext); + +typedef void (* ImplResetTextContextProc)(void * pContext); + +typedef void * (* ImplCreateUnicodeContextProc)(); + +typedef void (* ImplDestroyUnicodeContextProc)(void * pContext); + +typedef void (* ImplResetUnicodeContextProc)(void * pContext); + +struct ImplTextConverter +{ + void const * mpConvertData; + ImplConvertToUnicodeProc mpConvertTextToUnicodeProc; + ImplConvertToTextProc mpConvertUnicodeToTextProc; + ImplCreateTextContextProc mpCreateTextToUnicodeContext; + ImplDestroyTextContextProc mpDestroyTextToUnicodeContext; + ImplResetTextContextProc mpResetTextToUnicodeContext; + ImplCreateUnicodeContextProc mpCreateUnicodeToTextContext; + ImplDestroyUnicodeContextProc mpDestroyUnicodeToTextContext; + ImplResetUnicodeContextProc mpResetUnicodeToTextContext; +}; + +/* ----------------------------- */ +/* - TextEncoding - Structures - */ +/* ----------------------------- */ + +struct SAL_DLLPUBLIC_RTTI ImplTextEncodingData +{ + ImplTextConverter maConverter; + char const * mpBestUnixCharset; + char const * mpBestMimeCharset; + sal_uInt8 mnMinCharSize; + sal_uInt8 mnMaxCharSize; + sal_uInt8 mnAveCharSize; + sal_uInt8 mnBestWindowsCharset; + sal_uInt32 mnInfoFlags; +}; + +/* ----------------------------------- */ +/* - TextConverter - Byte-Structures - */ +/* ----------------------------------- */ + +struct ImplUniCharTabData +{ + sal_uInt16 mnUniChar; + unsigned char mnChar; + unsigned char mnChar2; + // to cater for mappings like MS1258 with 1--2 bytes per Unicode char, + // 0 if unused +}; + +struct ImplByteConvertData +{ + const sal_uInt16* mpToUniTab1; + const sal_uInt16* mpToUniTab2; + const unsigned char* mpToCharTab1; + const unsigned char* mpToCharTab2; + const ImplUniCharTabData* mpToCharExTab; + unsigned char mnToUniStart1; + unsigned char mnToUniEnd1; + unsigned char mnToUniStart2; + unsigned char mnToUniEnd2; + sal_uInt16 mnToCharStart1; + sal_uInt16 mnToCharEnd1; + sal_uInt16 mnToCharStart2; + sal_uInt16 mnToCharEnd2; + sal_uInt16 mnToCharExCount; +}; + +/* ----------------------------------- */ +/* - TextConverter - DBCS-Structures - */ +/* ----------------------------------- */ + +struct ImplDBCSEUDCData +{ + unsigned char mnLeadStart; + unsigned char mnLeadEnd; + unsigned char mnTrail1Start; + unsigned char mnTrail1End; + unsigned char mnTrail2Start; + unsigned char mnTrail2End; + unsigned char mnTrail3Start; + unsigned char mnTrail3End; + unsigned char mnTrailCount; + sal_uInt16 mnTrailRangeCount; + sal_uInt16 mnUniStart; + sal_uInt16 mnUniEnd; +}; + +struct ImplDBCSToUniLeadTab +{ + sal_uInt16 mnUniChar; + sal_uInt8 mnTrailStart; + sal_uInt8 mnTrailEnd; + const sal_uInt16* mpToUniTrailTab; +}; + +struct ImplUniToDBCSHighTab +{ + sal_uInt8 mnLowStart; + sal_uInt8 mnLowEnd; + const sal_uInt16* mpToUniTrailTab; +}; + +struct ImplDBCSConvertData +{ + const ImplDBCSToUniLeadTab* mpToUniLeadTab; + const ImplUniToDBCSHighTab* mpToDBCSHighTab; + const ImplDBCSEUDCData* mpEUDCTab; + sal_uInt16 mnEUDCCount; + unsigned char mnLeadStart; + unsigned char mnLeadEnd; + unsigned char mnTrailStart; + unsigned char mnTrailEnd; +}; + +/* ---------------------------------- */ +/* - TextConverter - EUC-Structures - */ +/* ---------------------------------- */ + +struct ImplEUCJPConvertData +{ + const ImplDBCSToUniLeadTab* mpJIS0208ToUniLeadTab; + const ImplDBCSToUniLeadTab* mpJIS0212ToUniLeadTab; + const ImplUniToDBCSHighTab* mpUniToJIS0208HighTab; + const ImplUniToDBCSHighTab* mpUniToJIS0212HighTab; +}; + +/* --------------------------------- */ +/* - TextConverter - HelpFunctions - */ +/* --------------------------------- */ + +inline sal_Unicode ImplGetUndefinedUnicodeChar( + unsigned char cChar, sal_uInt32 nFlags) +{ + return ((nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) + == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE) ? + RTL_TEXTCVT_BYTE_PRIVATE_START + cChar : + RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER; +} + +/* ----------------------------- */ +/* - TextConverter - Functions - */ +/* ----------------------------- */ + +sal_Size ImplDBCSToUnicode( const void* pData, void* pContext, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ); +sal_Size ImplUnicodeToDBCS( const void* pData, void* pContext, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ); +sal_Size ImplEUCJPToUnicode( const void* pData, + void* pContext, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ); +sal_Size ImplUnicodeToEUCJP( const void* pData, + void* pContext, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ); +void* ImplUTF7CreateUTF7TextToUnicodeContext(); +void ImplUTF7DestroyTextToUnicodeContext( void* pContext ); +void ImplUTF7ResetTextToUnicodeContext( void* pContext ); +sal_Size ImplUTF7ToUnicode( const void* pData, void* pContext, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ); +void* ImplUTF7CreateUnicodeToTextContext(); +void ImplUTF7DestroyUnicodeToTextContext( void* pContext ); +void ImplUTF7ResetUnicodeToTextContext( void* pContext ); +sal_Size ImplUnicodeToUTF7( const void* pData, void* pContext, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/tencinfo.cxx b/sal/textenc/tencinfo.cxx new file mode 100644 index 000000000..61439b489 --- /dev/null +++ b/sal/textenc/tencinfo.cxx @@ -0,0 +1,982 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include +#include + +#include + +#include "gettextencodingdata.hxx" +#include "tenchelp.hxx" +#include + +sal_Bool SAL_CALL rtl_isOctetTextEncoding(rtl_TextEncoding nEncoding) +{ + return + nEncoding > RTL_TEXTENCODING_DONTKNOW + && nEncoding != 9 // RTL_TEXTENCODING_SYSTEM + && nEncoding <= RTL_TEXTENCODING_ADOBE_DINGBATS; // always update this! +} + +/* ======================================================================= */ + +static void Impl_toAsciiLower( const char* pName, char* pBuf ) +{ + while ( *pName ) + { + /* A-Z */ + if ( (*pName >= 0x41) && (*pName <= 0x5A) ) + *pBuf = (*pName)+0x20; /* toAsciiLower */ + else + *pBuf = *pName; + + pBuf++; + pName++; + } + + *pBuf = '\0'; +} + +/* ----------------------------------------------------------------------- */ + +static void Impl_toAsciiLowerAndRemoveNonAlphanumeric( const char* pName, char* pBuf ) +{ + while ( *pName ) + { + /* A-Z */ + if ( (*pName >= 0x41) && (*pName <= 0x5A) ) + { + *pBuf = (*pName)+0x20; /* toAsciiLower */ + pBuf++; + } + /* a-z, 0-9 */ + else if ( ((*pName >= 0x61) && (*pName <= 0x7A)) || + ((*pName >= 0x30) && (*pName <= 0x39)) ) + { + *pBuf = *pName; + pBuf++; + } + + pName++; + } + + *pBuf = '\0'; +} + +/* ----------------------------------------------------------------------- */ + +/* pMatchStr must match with all characters in pCompStr */ +static bool Impl_matchString( const char* pCompStr, const char* pMatchStr ) +{ + /* We test only for end in MatchStr, because the last 0 character from */ + /* pCompStr is unequal a character in MatchStr, so the loop terminates */ + while ( *pMatchStr ) + { + if ( *pCompStr != *pMatchStr ) + return false; + + pCompStr++; + pMatchStr++; + } + + return true; +} + +/* ======================================================================= */ + +namespace { + +struct ImplStrCharsetDef +{ + const char* mpCharsetStr; + rtl_TextEncoding meTextEncoding; +}; + +struct ImplStrFirstPartCharsetDef +{ + const char* mpCharsetStr; + const ImplStrCharsetDef* mpSecondPartTab; +}; + +} + +/* ======================================================================= */ + +sal_Bool SAL_CALL rtl_getTextEncodingInfo( rtl_TextEncoding eTextEncoding, rtl_TextEncodingInfo* pEncInfo ) +{ + const ImplTextEncodingData* pData; + + pData = Impl_getTextEncodingData( eTextEncoding ); + if ( !pData ) + { + /* HACK: For not implemented encoding, because not all + calls handle the errors */ + if ( pEncInfo->StructSize < 5 ) + return false; + pEncInfo->MinimumCharSize = 1; + + if ( pEncInfo->StructSize < 6 ) + return true; + pEncInfo->MaximumCharSize = 1; + + if ( pEncInfo->StructSize < 7 ) + return true; + pEncInfo->AverageCharSize = 1; + + if ( pEncInfo->StructSize < 12 ) + return true; + pEncInfo->Flags = 0; + + return false; + } + + if ( pEncInfo->StructSize < 5 ) + return false; + pEncInfo->MinimumCharSize = pData->mnMinCharSize; + + if ( pEncInfo->StructSize < 6 ) + return true; + pEncInfo->MaximumCharSize = pData->mnMaxCharSize; + + if ( pEncInfo->StructSize < 7 ) + return true; + pEncInfo->AverageCharSize = pData->mnAveCharSize; + + if ( pEncInfo->StructSize < 12 ) + return true; + pEncInfo->Flags = pData->mnInfoFlags; + + return true; +} + +/* ======================================================================= */ + +rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromWindowsCharset( sal_uInt8 nWinCharset ) +{ + rtl_TextEncoding eTextEncoding; + + switch ( nWinCharset ) + { + case 0: eTextEncoding = RTL_TEXTENCODING_MS_1252; break; /* ANSI_CHARSET */ + case 2: eTextEncoding = RTL_TEXTENCODING_SYMBOL; break; /* SYMBOL_CHARSET */ + case 77: eTextEncoding = RTL_TEXTENCODING_APPLE_ROMAN; break;/* MAC_CHARSET */ + case 128: eTextEncoding = RTL_TEXTENCODING_MS_932; break; /* SHIFTJIS_CHARSET */ + case 129: eTextEncoding = RTL_TEXTENCODING_MS_949; break; /* HANGEUL_CHARSET */ + case 130: eTextEncoding = RTL_TEXTENCODING_MS_1361; break; /* JOHAB_CHARSET */ + case 134: eTextEncoding = RTL_TEXTENCODING_MS_936; break; /* GB2312_CHARSET */ + case 136: eTextEncoding = RTL_TEXTENCODING_MS_950; break; /* CHINESEBIG5_CHARSET */ + case 161: eTextEncoding = RTL_TEXTENCODING_MS_1253; break; /* GREEK_CHARSET */ + case 162: eTextEncoding = RTL_TEXTENCODING_MS_1254; break; /* TURKISH_CHARSET */ + case 163: eTextEncoding = RTL_TEXTENCODING_MS_1258; break; /* VIETNAMESE_CHARSET !!! */ + case 177: eTextEncoding = RTL_TEXTENCODING_MS_1255; break; /* HEBREW_CHARSET */ + case 178: eTextEncoding = RTL_TEXTENCODING_MS_1256; break; /* ARABIC_CHARSET */ + case 186: eTextEncoding = RTL_TEXTENCODING_MS_1257; break; /* BALTIC_CHARSET */ + case 204: eTextEncoding = RTL_TEXTENCODING_MS_1251; break; /* RUSSIAN_CHARSET */ + case 222: eTextEncoding = RTL_TEXTENCODING_MS_874; break; /* THAI_CHARSET */ + case 238: eTextEncoding = RTL_TEXTENCODING_MS_1250; break; /* EASTEUROPE_CHARSET */ + case 255: eTextEncoding = RTL_TEXTENCODING_IBM_850; break; /* OEM_CHARSET */ + default: eTextEncoding = RTL_TEXTENCODING_DONTKNOW; break; + } + + return eTextEncoding; +} + +/* ----------------------------------------------------------------------- */ + +rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromUnixCharset( const char* pUnixCharset ) +{ + /* See , section 14 ("Font Charset + * (Registry and Encoding) Names"). + */ + + /* All Identifiers in the tables are lower case The function search */ + /* for the first matching string in the tables. */ + /* Sort order: unique (first 14, then 1), important */ + + static ImplStrCharsetDef const aUnixCharsetISOTab[] = + { + { "15", RTL_TEXTENCODING_ISO_8859_15 }, + { "14", RTL_TEXTENCODING_ISO_8859_14 }, + { "13", RTL_TEXTENCODING_ISO_8859_13 }, + { "11", RTL_TEXTENCODING_TIS_620 }, + { "10", RTL_TEXTENCODING_ISO_8859_10 }, + { "1", RTL_TEXTENCODING_ISO_8859_1 }, + { "2", RTL_TEXTENCODING_ISO_8859_2 }, + { "3", RTL_TEXTENCODING_ISO_8859_3 }, + { "4", RTL_TEXTENCODING_ISO_8859_4 }, + { "5", RTL_TEXTENCODING_ISO_8859_5 }, + { "6", RTL_TEXTENCODING_ISO_8859_6 }, + { "7", RTL_TEXTENCODING_ISO_8859_7 }, + { "8", RTL_TEXTENCODING_ISO_8859_8 }, + { "9", RTL_TEXTENCODING_ISO_8859_9 }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + static ImplStrCharsetDef const aUnixCharsetADOBETab[] = + { + { "fontspecific", RTL_TEXTENCODING_SYMBOL }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + static ImplStrCharsetDef const aUnixCharsetMSTab[] = + { + { "1252", RTL_TEXTENCODING_MS_1252 }, + { "1250", RTL_TEXTENCODING_MS_1250 }, + { "1251", RTL_TEXTENCODING_MS_1251 }, + { "1253", RTL_TEXTENCODING_MS_1253 }, + { "1254", RTL_TEXTENCODING_MS_1254 }, + { "1255", RTL_TEXTENCODING_MS_1255 }, + { "1256", RTL_TEXTENCODING_MS_1256 }, + { "1257", RTL_TEXTENCODING_MS_1257 }, + { "1258", RTL_TEXTENCODING_MS_1258 }, + { "932", RTL_TEXTENCODING_MS_932 }, + { "936", RTL_TEXTENCODING_MS_936 }, + { "949", RTL_TEXTENCODING_MS_949 }, + { "950", RTL_TEXTENCODING_MS_950 }, + { "1361", RTL_TEXTENCODING_MS_1361 }, + { "cp1252", RTL_TEXTENCODING_MS_1252 }, + { "cp1250", RTL_TEXTENCODING_MS_1250 }, + { "cp1251", RTL_TEXTENCODING_MS_1251 }, + { "cp1253", RTL_TEXTENCODING_MS_1253 }, + { "cp1254", RTL_TEXTENCODING_MS_1254 }, + { "cp1255", RTL_TEXTENCODING_MS_1255 }, + { "cp1256", RTL_TEXTENCODING_MS_1256 }, + { "cp1257", RTL_TEXTENCODING_MS_1257 }, + { "cp1258", RTL_TEXTENCODING_MS_1258 }, + { "cp932", RTL_TEXTENCODING_MS_932 }, + { "cp936", RTL_TEXTENCODING_MS_936 }, + { "cp949", RTL_TEXTENCODING_MS_949 }, + { "cp950", RTL_TEXTENCODING_MS_950 }, + { "cp1361", RTL_TEXTENCODING_MS_1361 }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + static ImplStrCharsetDef const aUnixCharsetIBMTab[] = + { + { "437", RTL_TEXTENCODING_IBM_437 }, + { "850", RTL_TEXTENCODING_IBM_850 }, + { "860", RTL_TEXTENCODING_IBM_860 }, + { "861", RTL_TEXTENCODING_IBM_861 }, + { "863", RTL_TEXTENCODING_IBM_863 }, + { "865", RTL_TEXTENCODING_IBM_865 }, + { "737", RTL_TEXTENCODING_IBM_737 }, + { "775", RTL_TEXTENCODING_IBM_775 }, + { "852", RTL_TEXTENCODING_IBM_852 }, + { "855", RTL_TEXTENCODING_IBM_855 }, + { "857", RTL_TEXTENCODING_IBM_857 }, + { "862", RTL_TEXTENCODING_IBM_862 }, + { "864", RTL_TEXTENCODING_IBM_864 }, + { "866", RTL_TEXTENCODING_IBM_866 }, + { "869", RTL_TEXTENCODING_IBM_869 }, + { "874", RTL_TEXTENCODING_MS_874 }, + { "1004", RTL_TEXTENCODING_MS_1252 }, + { "65400", RTL_TEXTENCODING_SYMBOL }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + static ImplStrCharsetDef const aUnixCharsetKOI8Tab[] = + { + { "r", RTL_TEXTENCODING_KOI8_R }, + { "u", RTL_TEXTENCODING_KOI8_U }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + static ImplStrCharsetDef const aUnixCharsetJISX0208Tab[] = + { + { nullptr, RTL_TEXTENCODING_JIS_X_0208 } + }; + + static ImplStrCharsetDef const aUnixCharsetJISX0201Tab[] = + { + { nullptr, RTL_TEXTENCODING_JIS_X_0201 } + }; + + static ImplStrCharsetDef const aUnixCharsetJISX0212Tab[] = + { + { nullptr, RTL_TEXTENCODING_JIS_X_0212 } + }; + + static ImplStrCharsetDef const aUnixCharsetGBTab[] = + { + { nullptr, RTL_TEXTENCODING_GB_2312 } + }; + + static ImplStrCharsetDef const aUnixCharsetGBKTab[] = + { + { nullptr, RTL_TEXTENCODING_GBK } + }; + + static ImplStrCharsetDef const aUnixCharsetBIG5Tab[] = + { + { nullptr, RTL_TEXTENCODING_BIG5 } + }; + + static ImplStrCharsetDef const aUnixCharsetKSC56011987Tab[] = + { + { nullptr, RTL_TEXTENCODING_EUC_KR } + }; + + static ImplStrCharsetDef const aUnixCharsetKSC56011992Tab[] = + { + { nullptr, RTL_TEXTENCODING_MS_1361 } + }; + + static ImplStrCharsetDef const aUnixCharsetISO10646Tab[] = + { + { nullptr, RTL_TEXTENCODING_UNICODE } + }; + + static ImplStrCharsetDef const aUnixCharsetUNICODETab[] = + { +/* Currently every Unicode Encoding is for us Unicode */ +/* { "fontspecific", RTL_TEXTENCODING_UNICODE }, */ + { nullptr, RTL_TEXTENCODING_UNICODE } + }; + + static ImplStrCharsetDef const aUnixCharsetSymbolTab[] = + { + { nullptr, RTL_TEXTENCODING_SYMBOL } + }; + + /* See : */ + static ImplStrCharsetDef const aUnixCharsetTIS620Tab[] = + { + { "0", RTL_TEXTENCODING_TIS_620 }, + { "2529", RTL_TEXTENCODING_TIS_620 }, + { "2533", RTL_TEXTENCODING_TIS_620 }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + static ImplStrCharsetDef const aUnixCharsetTIS6202529Tab[] = + { + { "1", RTL_TEXTENCODING_TIS_620 }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + static ImplStrCharsetDef const aUnixCharsetTIS6202533Tab[] = + { + { "0", RTL_TEXTENCODING_TIS_620 }, + { "1", RTL_TEXTENCODING_TIS_620 }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + static ImplStrFirstPartCharsetDef const aUnixCharsetFirstPartTab[] = + { + { "iso8859", aUnixCharsetISOTab }, + { "adobe", aUnixCharsetADOBETab }, + { "ansi", aUnixCharsetMSTab }, + { "microsoft", aUnixCharsetMSTab }, + { "ibm", aUnixCharsetIBMTab }, + { "koi8", aUnixCharsetKOI8Tab }, + { "jisx0208", aUnixCharsetJISX0208Tab }, + { "jisx0208.1983", aUnixCharsetJISX0208Tab }, + { "jisx0201", aUnixCharsetJISX0201Tab }, + { "jisx0201.1976", aUnixCharsetJISX0201Tab }, + { "jisx0212", aUnixCharsetJISX0212Tab }, + { "jisx0212.1990", aUnixCharsetJISX0212Tab }, + { "gb2312", aUnixCharsetGBTab }, + { "gbk", aUnixCharsetGBKTab }, + { "big5", aUnixCharsetBIG5Tab }, + { "iso10646", aUnixCharsetISO10646Tab }, +/* { "unicode", aUnixCharsetUNICODETab }, */ /* fonts contain only default chars */ + { "sunolcursor", aUnixCharsetSymbolTab }, + { "sunolglyph", aUnixCharsetSymbolTab }, + { "iso10646", aUnixCharsetUNICODETab }, + { "ksc5601.1987", aUnixCharsetKSC56011987Tab }, + { "ksc5601.1992", aUnixCharsetKSC56011992Tab }, + { "tis620.2529", aUnixCharsetTIS6202529Tab }, + { "tis620.2533", aUnixCharsetTIS6202533Tab }, + { "tis620", aUnixCharsetTIS620Tab }, +/* { "sunudcja.1997", }, */ +/* { "sunudcko.1997", }, */ +/* { "sunudczh.1997", }, */ +/* { "sunudczhtw.1997", }, */ + { nullptr, nullptr } + }; + + rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW; + char* pTempBuf; + sal_uInt32 nBufLen = strlen( pUnixCharset )+1; + const char* pFirstPart; + const char* pSecondPart; + + /* Alloc Buffer and map to lower case */ + std::unique_ptr pBuf(new char[nBufLen]); + Impl_toAsciiLower( pUnixCharset, pBuf.get() ); + + /* Search FirstPart */ + pFirstPart = pBuf.get(); + pSecondPart = nullptr; + pTempBuf = pBuf.get(); + while ( *pTempBuf ) + { + if ( *pTempBuf == '-' ) + { + *pTempBuf = '\0'; + pSecondPart = pTempBuf+1; + break; + } + + pTempBuf++; + } + + /* found part separator */ + if ( pSecondPart ) + { + /* Search for the part tab */ + const ImplStrFirstPartCharsetDef* pFirstPartData = aUnixCharsetFirstPartTab; + while ( pFirstPartData->mpCharsetStr ) + { + if ( Impl_matchString( pFirstPart, pFirstPartData->mpCharsetStr ) ) + { + /* Search for the charset in the second part tab */ + const ImplStrCharsetDef* pData = pFirstPartData->mpSecondPartTab; + while ( pData->mpCharsetStr ) + { + if ( Impl_matchString( pSecondPart, pData->mpCharsetStr ) ) + { + break; + } + + pData++; + } + + /* use default encoding for first part */ + eEncoding = pData->meTextEncoding; + break; + } + + pFirstPartData++; + } + } + + return eEncoding; +} + +/* ----------------------------------------------------------------------- */ + +rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( const char* pMimeCharset ) +{ + /* All Identifiers are in lower case and contain only alphanumeric */ + /* characters. The function search for the first equal string in */ + /* the table. In this table are only the most used mime types. */ + /* Sort order: important */ + static ImplStrCharsetDef const aVIPMimeCharsetTab[] = + { + { "usascii", RTL_TEXTENCODING_ASCII_US }, + { "utf8", RTL_TEXTENCODING_UTF8 }, + { "utf7", RTL_TEXTENCODING_UTF7 }, + { "iso88591", RTL_TEXTENCODING_ISO_8859_1 }, + { "iso88592", RTL_TEXTENCODING_ISO_8859_2 }, + { "iso88593", RTL_TEXTENCODING_ISO_8859_3 }, + { "iso88594", RTL_TEXTENCODING_ISO_8859_4 }, + { "iso88595", RTL_TEXTENCODING_ISO_8859_5 }, + { "iso88596", RTL_TEXTENCODING_ISO_8859_6 }, + { "iso88597", RTL_TEXTENCODING_ISO_8859_7 }, + { "iso88598", RTL_TEXTENCODING_ISO_8859_8 }, + { "iso88599", RTL_TEXTENCODING_ISO_8859_9 }, + { "iso885910", RTL_TEXTENCODING_ISO_8859_10 }, + { "iso885913", RTL_TEXTENCODING_ISO_8859_13 }, + { "iso885914", RTL_TEXTENCODING_ISO_8859_14 }, + { "iso885915", RTL_TEXTENCODING_ISO_8859_15 }, + { "iso2022jp", RTL_TEXTENCODING_ISO_2022_JP }, + { "iso2022jp2", RTL_TEXTENCODING_ISO_2022_JP }, + { "iso2022cn", RTL_TEXTENCODING_ISO_2022_CN }, + { "iso2022cnext", RTL_TEXTENCODING_ISO_2022_CN }, + { "iso2022kr", RTL_TEXTENCODING_ISO_2022_KR }, + { "eucjp", RTL_TEXTENCODING_EUC_JP }, + { "shiftjis", RTL_TEXTENCODING_SHIFT_JIS }, + { "mskanji", RTL_TEXTENCODING_MS_932 }, + { "gb2312", RTL_TEXTENCODING_GB_2312 }, + { "cngb", RTL_TEXTENCODING_GB_2312 }, + { "big5", RTL_TEXTENCODING_BIG5 }, + { "cnbig5", RTL_TEXTENCODING_BIG5 }, + { "cngb12345", RTL_TEXTENCODING_GBT_12345 }, + { "euckr", RTL_TEXTENCODING_EUC_KR }, + { "koi8r", RTL_TEXTENCODING_KOI8_R }, + { "windows1252", RTL_TEXTENCODING_MS_1252 }, + { "windows1250", RTL_TEXTENCODING_MS_1250 }, + { "windows1251", RTL_TEXTENCODING_MS_1251 }, + { "windows1253", RTL_TEXTENCODING_MS_1253 }, + { "windows1254", RTL_TEXTENCODING_MS_1254 }, + { "windows1255", RTL_TEXTENCODING_MS_1255 }, + { "windows1256", RTL_TEXTENCODING_MS_1256 }, + { "windows1257", RTL_TEXTENCODING_MS_1257 }, + { "windows1258", RTL_TEXTENCODING_MS_1258 }, + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + /* All Identifiers are in lower case and contain only alphanumeric */ + /* characters. The function search for the first matching string in */ + /* the table. */ + /* Sort order: unique (first iso885914, then iso88591), important */ + static ImplStrCharsetDef const aMimeCharsetTab[] = + { + { "unicode11utf7", RTL_TEXTENCODING_UTF7 }, + { "caunicode11utf7", RTL_TEXTENCODING_UTF7 }, + { "iso88591windows30", RTL_TEXTENCODING_ISO_8859_1 }, + { "iso88591win", RTL_TEXTENCODING_MS_1252 }, + { "iso88592win", RTL_TEXTENCODING_MS_1250 }, + { "iso88599win", RTL_TEXTENCODING_MS_1254 }, + { "iso885915", RTL_TEXTENCODING_ISO_8859_15 }, + { "iso885914", RTL_TEXTENCODING_ISO_8859_14 }, + { "iso885913", RTL_TEXTENCODING_ISO_8859_13 }, + { "iso885911", RTL_TEXTENCODING_TIS_620 }, + /* This is no official MIME character set name, but it might be in + use in Thailand. */ + { "iso885910", RTL_TEXTENCODING_ISO_8859_10 }, + { "iso88591", RTL_TEXTENCODING_ISO_8859_1 }, + { "iso88592", RTL_TEXTENCODING_ISO_8859_2 }, + { "iso88593", RTL_TEXTENCODING_ISO_8859_3 }, + { "iso88594", RTL_TEXTENCODING_ISO_8859_4 }, + { "iso88595", RTL_TEXTENCODING_ISO_8859_5 }, + { "iso88596", RTL_TEXTENCODING_ISO_8859_6 }, + { "iso88597", RTL_TEXTENCODING_ISO_8859_7 }, + { "iso88598", RTL_TEXTENCODING_ISO_8859_8 }, + { "iso88599", RTL_TEXTENCODING_ISO_8859_9 }, + { "isoir100", RTL_TEXTENCODING_ISO_8859_1 }, + { "latin1", RTL_TEXTENCODING_ISO_8859_1 }, + { "l1", RTL_TEXTENCODING_ISO_8859_1 }, + { "cp819", RTL_TEXTENCODING_ISO_8859_1 }, + { "ibm819", RTL_TEXTENCODING_ISO_8859_1 }, + { "csisolatin1", RTL_TEXTENCODING_ISO_8859_1 }, + { "isoir101", RTL_TEXTENCODING_ISO_8859_2 }, + { "latin2", RTL_TEXTENCODING_ISO_8859_2 }, + { "l2", RTL_TEXTENCODING_ISO_8859_2 }, + { "csisolatin2", RTL_TEXTENCODING_ISO_8859_2 }, + { "isoir109", RTL_TEXTENCODING_ISO_8859_3 }, + { "latin3", RTL_TEXTENCODING_ISO_8859_3 }, + { "l3", RTL_TEXTENCODING_ISO_8859_3 }, + { "csisolatin3", RTL_TEXTENCODING_ISO_8859_3 }, + { "isoir110", RTL_TEXTENCODING_ISO_8859_4 }, + { "latin4", RTL_TEXTENCODING_ISO_8859_4 }, + { "l4", RTL_TEXTENCODING_ISO_8859_4 }, + { "csisolatin4", RTL_TEXTENCODING_ISO_8859_4 }, + { "isoir144", RTL_TEXTENCODING_ISO_8859_5 }, + { "cyrillicasian", RTL_TEXTENCODING_PT154 }, + { "cyrillic", RTL_TEXTENCODING_ISO_8859_5 }, + { "csisolatincyrillic", RTL_TEXTENCODING_ISO_8859_5 }, + { "isoir127", RTL_TEXTENCODING_ISO_8859_6 }, + { "arabic", RTL_TEXTENCODING_ISO_8859_6 }, + { "csisolatinarabic", RTL_TEXTENCODING_ISO_8859_6 }, + { "ecma114", RTL_TEXTENCODING_ISO_8859_6 }, + { "asmo708", RTL_TEXTENCODING_ISO_8859_6 }, + { "isoir126", RTL_TEXTENCODING_ISO_8859_7 }, + { "greek", RTL_TEXTENCODING_ISO_8859_7 }, + { "csisolatingreek", RTL_TEXTENCODING_ISO_8859_7 }, + { "elot928", RTL_TEXTENCODING_ISO_8859_7 }, + { "ecma118", RTL_TEXTENCODING_ISO_8859_7 }, + { "isoir138", RTL_TEXTENCODING_ISO_8859_8 }, + { "hebrew", RTL_TEXTENCODING_ISO_8859_8 }, + { "csisolatinhebrew", RTL_TEXTENCODING_ISO_8859_8 }, + { "isoir148", RTL_TEXTENCODING_ISO_8859_9 }, + { "latin5", RTL_TEXTENCODING_ISO_8859_9 }, + { "l5", RTL_TEXTENCODING_ISO_8859_9 }, + { "csisolatin5", RTL_TEXTENCODING_ISO_8859_9 }, + { "cswindows30latin1", RTL_TEXTENCODING_ISO_8859_1 }, + { "cswindows30latin1", RTL_TEXTENCODING_ISO_8859_1 }, + { "cswindows31latin1", RTL_TEXTENCODING_MS_1252 }, + { "cswindows31latin2", RTL_TEXTENCODING_MS_1250 }, + { "cswindows31latin5", RTL_TEXTENCODING_MS_1254 }, + { "iso10646us", RTL_TEXTENCODING_ASCII_US }, + { "iso646irv", RTL_TEXTENCODING_ASCII_US }, + { "cskoi8r", RTL_TEXTENCODING_KOI8_R }, + { "ibm437", RTL_TEXTENCODING_IBM_437 }, + { "cp437", RTL_TEXTENCODING_IBM_437 }, + { "437", RTL_TEXTENCODING_IBM_437 }, + { "cspc8codepage437", RTL_TEXTENCODING_IBM_437 }, + { "ansix34", RTL_TEXTENCODING_ASCII_US }, + { "ibm367", RTL_TEXTENCODING_ASCII_US }, + { "cp367", RTL_TEXTENCODING_ASCII_US }, + { "csascii", RTL_TEXTENCODING_ASCII_US }, + { "ibm775", RTL_TEXTENCODING_IBM_775 }, + { "cp775", RTL_TEXTENCODING_IBM_775 }, + { "cspc775baltic", RTL_TEXTENCODING_IBM_775 }, + { "ibm850", RTL_TEXTENCODING_IBM_850 }, + { "cp850", RTL_TEXTENCODING_IBM_850 }, + { "850", RTL_TEXTENCODING_IBM_850 }, + { "cspc850multilingual", RTL_TEXTENCODING_IBM_850 }, +/* { "ibm851", RTL_TEXTENCODING_IBM_851 }, */ +/* { "cp851", RTL_TEXTENCODING_IBM_851 }, */ +/* { "851", RTL_TEXTENCODING_IBM_851 }, */ +/* { "csibm851", RTL_TEXTENCODING_IBM_851 }, */ + { "ibm852", RTL_TEXTENCODING_IBM_852 }, + { "cp852", RTL_TEXTENCODING_IBM_852 }, + { "852", RTL_TEXTENCODING_IBM_852 }, + { "cspcp852", RTL_TEXTENCODING_IBM_852 }, + { "ibm855", RTL_TEXTENCODING_IBM_855 }, + { "cp855", RTL_TEXTENCODING_IBM_855 }, + { "855", RTL_TEXTENCODING_IBM_855 }, + { "csibm855", RTL_TEXTENCODING_IBM_855 }, + { "ibm857", RTL_TEXTENCODING_IBM_857 }, + { "cp857", RTL_TEXTENCODING_IBM_857 }, + { "857", RTL_TEXTENCODING_IBM_857 }, + { "csibm857", RTL_TEXTENCODING_IBM_857 }, + { "ibm860", RTL_TEXTENCODING_IBM_860 }, + { "cp860", RTL_TEXTENCODING_IBM_860 }, + { "860", RTL_TEXTENCODING_IBM_860 }, + { "csibm860", RTL_TEXTENCODING_IBM_860 }, + { "ibm861", RTL_TEXTENCODING_IBM_861 }, + { "cp861", RTL_TEXTENCODING_IBM_861 }, + { "861", RTL_TEXTENCODING_IBM_861 }, + { "csis", RTL_TEXTENCODING_IBM_861 }, + { "csibm861", RTL_TEXTENCODING_IBM_861 }, + { "ibm862", RTL_TEXTENCODING_IBM_862 }, + { "cp862", RTL_TEXTENCODING_IBM_862 }, + { "862", RTL_TEXTENCODING_IBM_862 }, + { "cspc862latinhebrew", RTL_TEXTENCODING_IBM_862 }, + { "ibm863", RTL_TEXTENCODING_IBM_863 }, + { "cp863", RTL_TEXTENCODING_IBM_863 }, + { "863", RTL_TEXTENCODING_IBM_863 }, + { "csibm863", RTL_TEXTENCODING_IBM_863 }, + { "ibm864", RTL_TEXTENCODING_IBM_864 }, + { "cp864", RTL_TEXTENCODING_IBM_864 }, + { "864", RTL_TEXTENCODING_IBM_864 }, + { "csibm864", RTL_TEXTENCODING_IBM_864 }, + { "ibm865", RTL_TEXTENCODING_IBM_865 }, + { "cp865", RTL_TEXTENCODING_IBM_865 }, + { "865", RTL_TEXTENCODING_IBM_865 }, + { "csibm865", RTL_TEXTENCODING_IBM_865 }, + { "ibm866", RTL_TEXTENCODING_IBM_866 }, + { "cp866", RTL_TEXTENCODING_IBM_866 }, + { "866", RTL_TEXTENCODING_IBM_866 }, + { "csibm866", RTL_TEXTENCODING_IBM_866 }, +/* { "ibm868", RTL_TEXTENCODING_IBM_868 }, */ +/* { "cp868", RTL_TEXTENCODING_IBM_868 }, */ +/* { "cpar", RTL_TEXTENCODING_IBM_868 }, */ +/* { "csibm868", RTL_TEXTENCODING_IBM_868 }, */ + { "ibm869", RTL_TEXTENCODING_IBM_869 }, + { "cp869", RTL_TEXTENCODING_IBM_869 }, + { "869", RTL_TEXTENCODING_IBM_869 }, + { "cpgr", RTL_TEXTENCODING_IBM_869 }, + { "csibm869", RTL_TEXTENCODING_IBM_869 }, + { "ibm869", RTL_TEXTENCODING_IBM_869 }, + { "cp869", RTL_TEXTENCODING_IBM_869 }, + { "869", RTL_TEXTENCODING_IBM_869 }, + { "cpgr", RTL_TEXTENCODING_IBM_869 }, + { "csibm869", RTL_TEXTENCODING_IBM_869 }, + { "mac", RTL_TEXTENCODING_APPLE_ROMAN }, + { "csmacintosh", RTL_TEXTENCODING_APPLE_ROMAN }, + { "shiftjis", RTL_TEXTENCODING_SHIFT_JIS }, + { "mskanji", RTL_TEXTENCODING_MS_932 }, + { "csshiftjis", RTL_TEXTENCODING_SHIFT_JIS }, + { "jisx0208", RTL_TEXTENCODING_JIS_X_0208 }, + { "jisc62261983", RTL_TEXTENCODING_JIS_X_0208 }, + { "csiso87jisx0208", RTL_TEXTENCODING_JIS_X_0208 }, + { "isoir86", RTL_TEXTENCODING_JIS_X_0208 }, + { "x0208", RTL_TEXTENCODING_JIS_X_0208 }, + { "jisx0201", RTL_TEXTENCODING_JIS_X_0201 }, + { "cshalfwidthkatakana", RTL_TEXTENCODING_JIS_X_0201 }, + { "x0201", RTL_TEXTENCODING_JIS_X_0201 }, + { "jisx0212", RTL_TEXTENCODING_JIS_X_0212 }, + { "csiso159jisx0212", RTL_TEXTENCODING_JIS_X_0212 }, + { "isoir159", RTL_TEXTENCODING_JIS_X_0208 }, + { "x0212", RTL_TEXTENCODING_JIS_X_0212 }, + { "isoir6", RTL_TEXTENCODING_ASCII_US }, + { "xsjis", RTL_TEXTENCODING_SHIFT_JIS }, + { "sjis", RTL_TEXTENCODING_SHIFT_JIS }, + { "ascii", RTL_TEXTENCODING_ASCII_US }, + { "us", RTL_TEXTENCODING_ASCII_US }, + { "gb180302000", RTL_TEXTENCODING_GB_18030 }, + /* This is no actual MIME character set name, it is only in here + for backwards compatibility (before "GB18030" was officially + registered with IANA, this code contained some guesses of what + would become official names for GB18030). */ + { "gb18030", RTL_TEXTENCODING_GB_18030 }, + { "big5hkscs", RTL_TEXTENCODING_BIG5_HKSCS }, + { "tis620", RTL_TEXTENCODING_TIS_620 }, + { "gbk", RTL_TEXTENCODING_GBK }, + { "cp936", RTL_TEXTENCODING_GBK }, + { "ms936", RTL_TEXTENCODING_GBK }, + { "windows936", RTL_TEXTENCODING_GBK }, + { "cp874", RTL_TEXTENCODING_MS_874 }, + /* This is no official MIME character set name, but it might be in + use in Thailand. */ + { "ms874", RTL_TEXTENCODING_MS_874 }, + /* This is no official MIME character set name, but it might be in + use in Thailand. */ + { "windows874", RTL_TEXTENCODING_MS_874 }, + /* This is no official MIME character set name, but it might be in + use in Thailand. */ + { "koi8u", RTL_TEXTENCODING_KOI8_U }, + { "cpis", RTL_TEXTENCODING_IBM_861 }, + { "ksc56011987", RTL_TEXTENCODING_MS_949 }, + { "isoir149", RTL_TEXTENCODING_MS_949 }, + { "ksc56011989", RTL_TEXTENCODING_MS_949 }, + { "ksc5601", RTL_TEXTENCODING_MS_949 }, + { "korean", RTL_TEXTENCODING_MS_949 }, + { "csksc56011987", RTL_TEXTENCODING_MS_949 }, + /* Map KS_C_5601-1987 and aliases to MS-949 instead of EUC-KR, as + this character set identifier seems to be prominently used by MS + to stand for KS C 5601 plus MS-949 extensions */ + { "latin9", RTL_TEXTENCODING_ISO_8859_15 }, + { "adobestandardencoding", RTL_TEXTENCODING_ADOBE_STANDARD }, + { "csadobestandardencoding", RTL_TEXTENCODING_ADOBE_STANDARD }, + { "adobesymbolencoding", RTL_TEXTENCODING_ADOBE_SYMBOL }, + { "cshppsmath", RTL_TEXTENCODING_ADOBE_SYMBOL }, + { "ptcp154", RTL_TEXTENCODING_PT154 }, + { "csptcp154", RTL_TEXTENCODING_PT154 }, + { "pt154", RTL_TEXTENCODING_PT154 }, + { "cp154", RTL_TEXTENCODING_PT154 }, + { "xisciide", RTL_TEXTENCODING_ISCII_DEVANAGARI }, + /* This is not an official MIME character set name, but is in use by + various windows APIs. */ + { nullptr, RTL_TEXTENCODING_DONTKNOW } + }; + + rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW; + const ImplStrCharsetDef* pData = aVIPMimeCharsetTab; + sal_uInt32 nBufLen = strlen( pMimeCharset )+1; + + /* Alloc Buffer and map to lower case and remove non alphanumeric chars */ + std::unique_ptr pBuf(new char[nBufLen]); + Impl_toAsciiLowerAndRemoveNonAlphanumeric( pMimeCharset, pBuf.get() ); + + /* Search for equal in the VIP table */ + while ( pData->mpCharsetStr ) + { + if ( strcmp( pBuf.get(), pData->mpCharsetStr ) == 0 ) + { + eEncoding = pData->meTextEncoding; + break; + } + + pData++; + } + + /* Search for matching in the mime table */ + if ( eEncoding == RTL_TEXTENCODING_DONTKNOW ) + { + pData = aMimeCharsetTab; + while ( pData->mpCharsetStr ) + { + if ( Impl_matchString( pBuf.get(), pData->mpCharsetStr ) ) + { + eEncoding = pData->meTextEncoding; + break; + } + + pData++; + } + } + + return eEncoding; +} + +/* ======================================================================= */ + +sal_uInt8 SAL_CALL rtl_getBestWindowsCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding ) +{ + const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding ); + if ( pData ) + return pData->mnBestWindowsCharset; + return 1; +} + +/* ----------------------------------------------------------------------- */ + +const char* SAL_CALL rtl_getBestUnixCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding ) +{ + const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding ); + if ( pData ) + return pData->mpBestUnixCharset; + if( eTextEncoding == RTL_TEXTENCODING_UNICODE ) + return "iso10646-1"; + return nullptr; +} + +/* ----------------------------------------------------------------------- */ + +char const * SAL_CALL rtl_getMimeCharsetFromTextEncoding(rtl_TextEncoding + nEncoding) +{ + ImplTextEncodingData const * p = Impl_getTextEncodingData(nEncoding); + return p && (p->mnInfoFlags & RTL_TEXTENCODING_INFO_MIME) != 0 ? + p->mpBestMimeCharset : nullptr; +} + +const char* SAL_CALL rtl_getBestMimeCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding ) +{ + const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding ); + if ( pData ) + return pData->mpBestMimeCharset; + return nullptr; +} + +/* The following two functions are based on , , and . + */ + +rtl_TextEncoding SAL_CALL +rtl_getTextEncodingFromWindowsCodePage(sal_uInt32 nCodePage) +{ + switch (nCodePage) + { + case 42: return RTL_TEXTENCODING_SYMBOL; + case 437: return RTL_TEXTENCODING_IBM_437; + case 708: return RTL_TEXTENCODING_ISO_8859_6; + case 737: return RTL_TEXTENCODING_IBM_737; + case 775: return RTL_TEXTENCODING_IBM_775; + case 850: return RTL_TEXTENCODING_IBM_850; + case 852: return RTL_TEXTENCODING_IBM_852; + case 855: return RTL_TEXTENCODING_IBM_855; + case 857: return RTL_TEXTENCODING_IBM_857; + case 860: return RTL_TEXTENCODING_IBM_860; + case 861: return RTL_TEXTENCODING_IBM_861; + case 862: return RTL_TEXTENCODING_IBM_862; + case 863: return RTL_TEXTENCODING_IBM_863; + case 864: return RTL_TEXTENCODING_IBM_864; + case 865: return RTL_TEXTENCODING_IBM_865; + case 866: return RTL_TEXTENCODING_IBM_866; + case 869: return RTL_TEXTENCODING_IBM_869; + case 874: return RTL_TEXTENCODING_MS_874; + case 932: return RTL_TEXTENCODING_MS_932; + case 936: return RTL_TEXTENCODING_MS_936; + case 949: return RTL_TEXTENCODING_MS_949; + case 950: return RTL_TEXTENCODING_MS_950; + case 1250: return RTL_TEXTENCODING_MS_1250; + case 1251: return RTL_TEXTENCODING_MS_1251; + case 1252: return RTL_TEXTENCODING_MS_1252; + case 1253: return RTL_TEXTENCODING_MS_1253; + case 1254: return RTL_TEXTENCODING_MS_1254; + case 1255: return RTL_TEXTENCODING_MS_1255; + case 1256: return RTL_TEXTENCODING_MS_1256; + case 1257: return RTL_TEXTENCODING_MS_1257; + case 1258: return RTL_TEXTENCODING_MS_1258; + case 1361: return RTL_TEXTENCODING_MS_1361; + case 10000: return RTL_TEXTENCODING_APPLE_ROMAN; + case 10001: return RTL_TEXTENCODING_APPLE_JAPANESE; + case 10002: return RTL_TEXTENCODING_APPLE_CHINTRAD; + case 10003: return RTL_TEXTENCODING_APPLE_KOREAN; + case 10004: return RTL_TEXTENCODING_APPLE_ARABIC; + case 10005: return RTL_TEXTENCODING_APPLE_HEBREW; + case 10006: return RTL_TEXTENCODING_APPLE_GREEK; + case 10007: return RTL_TEXTENCODING_APPLE_CYRILLIC; + case 10008: return RTL_TEXTENCODING_APPLE_CHINSIMP; + case 10010: return RTL_TEXTENCODING_APPLE_ROMANIAN; + case 10017: return RTL_TEXTENCODING_APPLE_UKRAINIAN; + case 10029: return RTL_TEXTENCODING_APPLE_CENTEURO; + case 10079: return RTL_TEXTENCODING_APPLE_ICELAND; + case 10081: return RTL_TEXTENCODING_APPLE_TURKISH; + case 10082: return RTL_TEXTENCODING_APPLE_CROATIAN; + case 20127: return RTL_TEXTENCODING_ASCII_US; + case 20866: return RTL_TEXTENCODING_KOI8_R; + case 21866: return RTL_TEXTENCODING_KOI8_U; + case 28591: return RTL_TEXTENCODING_ISO_8859_1; + case 28592: return RTL_TEXTENCODING_ISO_8859_2; + case 28593: return RTL_TEXTENCODING_ISO_8859_3; + case 28594: return RTL_TEXTENCODING_ISO_8859_4; + case 28595: return RTL_TEXTENCODING_ISO_8859_5; + case 28596: return RTL_TEXTENCODING_ISO_8859_6; + case 28597: return RTL_TEXTENCODING_ISO_8859_7; + case 28598: return RTL_TEXTENCODING_ISO_8859_8; + case 28599: return RTL_TEXTENCODING_ISO_8859_9; + case 28605: return RTL_TEXTENCODING_ISO_8859_15; + case 50220: return RTL_TEXTENCODING_ISO_2022_JP; + case 50225: return RTL_TEXTENCODING_ISO_2022_KR; + case 51932: return RTL_TEXTENCODING_EUC_JP; + case 51936: return RTL_TEXTENCODING_EUC_CN; + case 51949: return RTL_TEXTENCODING_EUC_KR; + case 57002: return RTL_TEXTENCODING_ISCII_DEVANAGARI; + case 65000: return RTL_TEXTENCODING_UTF7; + case 65001: return RTL_TEXTENCODING_UTF8; + default: return RTL_TEXTENCODING_DONTKNOW; + } +} + +sal_uInt32 SAL_CALL +rtl_getWindowsCodePageFromTextEncoding(rtl_TextEncoding nEncoding) +{ + switch (nEncoding) + { + case RTL_TEXTENCODING_SYMBOL: return 42; + case RTL_TEXTENCODING_IBM_437: return 437; + /* case RTL_TEXTENCODING_ISO_8859_6: return 708; */ + case RTL_TEXTENCODING_IBM_737: return 737; + case RTL_TEXTENCODING_IBM_775: return 775; + case RTL_TEXTENCODING_IBM_850: return 850; + case RTL_TEXTENCODING_IBM_852: return 852; + case RTL_TEXTENCODING_IBM_855: return 855; + case RTL_TEXTENCODING_IBM_857: return 857; + case RTL_TEXTENCODING_IBM_860: return 860; + case RTL_TEXTENCODING_IBM_861: return 861; + case RTL_TEXTENCODING_IBM_862: return 862; + case RTL_TEXTENCODING_IBM_863: return 863; + case RTL_TEXTENCODING_IBM_864: return 864; + case RTL_TEXTENCODING_IBM_865: return 865; + case RTL_TEXTENCODING_IBM_866: return 866; + case RTL_TEXTENCODING_IBM_869: return 869; + case RTL_TEXTENCODING_MS_874: return 874; + case RTL_TEXTENCODING_MS_932: return 932; + case RTL_TEXTENCODING_MS_936: return 936; + case RTL_TEXTENCODING_MS_949: return 949; + case RTL_TEXTENCODING_MS_950: return 950; + case RTL_TEXTENCODING_MS_1250: return 1250; + case RTL_TEXTENCODING_MS_1251: return 1251; + case RTL_TEXTENCODING_MS_1252: return 1252; + case RTL_TEXTENCODING_MS_1253: return 1253; + case RTL_TEXTENCODING_MS_1254: return 1254; + case RTL_TEXTENCODING_MS_1255: return 1255; + case RTL_TEXTENCODING_MS_1256: return 1256; + case RTL_TEXTENCODING_MS_1257: return 1257; + case RTL_TEXTENCODING_MS_1258: return 1258; + case RTL_TEXTENCODING_MS_1361: return 1361; + case RTL_TEXTENCODING_APPLE_ROMAN: return 10000; + case RTL_TEXTENCODING_APPLE_JAPANESE: return 10001; + case RTL_TEXTENCODING_APPLE_CHINTRAD: return 10002; + case RTL_TEXTENCODING_APPLE_KOREAN: return 10003; + case RTL_TEXTENCODING_APPLE_ARABIC: return 10004; + case RTL_TEXTENCODING_APPLE_HEBREW: return 10005; + case RTL_TEXTENCODING_APPLE_GREEK: return 10006; + case RTL_TEXTENCODING_APPLE_CYRILLIC: return 10007; + case RTL_TEXTENCODING_APPLE_CHINSIMP: return 10008; + case RTL_TEXTENCODING_APPLE_ROMANIAN: return 10010; + case RTL_TEXTENCODING_APPLE_UKRAINIAN: return 10017; + case RTL_TEXTENCODING_APPLE_CENTEURO: return 10029; + case RTL_TEXTENCODING_APPLE_ICELAND: return 10079; + case RTL_TEXTENCODING_APPLE_TURKISH: return 10081; + case RTL_TEXTENCODING_APPLE_CROATIAN: return 10082; + case RTL_TEXTENCODING_ASCII_US: return 20127; + case RTL_TEXTENCODING_KOI8_R: return 20866; + case RTL_TEXTENCODING_KOI8_U: return 21866; + case RTL_TEXTENCODING_ISO_8859_1: return 28591; + case RTL_TEXTENCODING_ISO_8859_2: return 28592; + case RTL_TEXTENCODING_ISO_8859_3: return 28593; + case RTL_TEXTENCODING_ISO_8859_4: return 28594; + case RTL_TEXTENCODING_ISO_8859_5: return 28595; + case RTL_TEXTENCODING_ISO_8859_6: return 28596; + case RTL_TEXTENCODING_ISO_8859_7: return 28597; + case RTL_TEXTENCODING_ISO_8859_8: return 28598; + case RTL_TEXTENCODING_ISO_8859_9: return 28599; + case RTL_TEXTENCODING_ISO_8859_15: return 28605; + case RTL_TEXTENCODING_ISO_2022_JP: return 50220; + case RTL_TEXTENCODING_ISO_2022_KR: return 50225; + case RTL_TEXTENCODING_EUC_JP: return 51932; + case RTL_TEXTENCODING_EUC_CN: return 51936; + case RTL_TEXTENCODING_EUC_KR: return 51949; + case RTL_TEXTENCODING_ISCII_DEVANAGARI: return 57002; + case RTL_TEXTENCODING_UTF7: return 65000; + case RTL_TEXTENCODING_UTF8: return 65001; + default: return 0; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/textcvt.cxx b/sal/textenc/textcvt.cxx new file mode 100644 index 000000000..2d5add0a8 --- /dev/null +++ b/sal/textenc/textcvt.cxx @@ -0,0 +1,299 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include + +#include + +#include +#include + +#include "gettextencodingdata.hxx" +#include "tenchelp.hxx" + +/* ======================================================================= */ + +static sal_Size ImplDummyToUnicode( const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ) +{ + sal_Unicode* pEndDestBuf; + const char* pEndSrcBuf; + + if ( ((nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR) || + ((nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR) ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | + RTL_TEXTTOUNICODE_INFO_UNDEFINED | + RTL_TEXTTOUNICODE_INFO_MBUNDEFINED; + return 0; + } + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestChars; + pEndSrcBuf = pSrcBuf+nSrcBytes; + while ( pSrcBuf < pEndSrcBuf ) + { + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL; + break; + } + + *pDestBuf = static_cast(static_cast(*pSrcBuf)); + pDestBuf++; + pSrcBuf++; + } + + *pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf); + return (nDestChars - (pEndDestBuf-pDestBuf)); +} + +/* ----------------------------------------------------------------------- */ + +static sal_Size ImplUnicodeToDummy( const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ) +{ + char* pEndDestBuf; + const sal_Unicode* pEndSrcBuf; + + if ( (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) == RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | + RTL_UNICODETOTEXT_INFO_UNDEFINED; + return 0; + } + + *pInfo = 0; + pEndDestBuf = pDestBuf+nDestBytes; + pEndSrcBuf = pSrcBuf+nSrcChars; + while ( pSrcBuf < pEndSrcBuf ) + { + if ( pDestBuf == pEndDestBuf ) + { + *pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL; + break; + } + + *pDestBuf = static_cast(static_cast(*pSrcBuf & 0x00FF)); + pDestBuf++; + pSrcBuf++; + } + + *pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf); + return (nDestBytes - (pEndDestBuf-pDestBuf)); +} + +/* ======================================================================= */ + +rtl_TextToUnicodeConverter SAL_CALL rtl_createTextToUnicodeConverter( rtl_TextEncoding eTextEncoding ) +{ + const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding ); + if ( pData ) + return static_cast(const_cast(&pData->maConverter)); + return nullptr; +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_destroyTextToUnicodeConverter( + SAL_UNUSED_PARAMETER rtl_TextToUnicodeConverter ) +{} + +/* ----------------------------------------------------------------------- */ + +rtl_TextToUnicodeContext SAL_CALL rtl_createTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter ) +{ + const ImplTextConverter* pConverter = static_cast(hConverter); + if ( !pConverter ) + return nullptr; + if ( pConverter->mpCreateTextToUnicodeContext ) + return pConverter->mpCreateTextToUnicodeContext(); + return reinterpret_cast(1); +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_destroyTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter, + rtl_TextToUnicodeContext hContext ) +{ + const ImplTextConverter* pConverter = static_cast(hConverter); + if ( pConverter && hContext && pConverter->mpDestroyTextToUnicodeContext ) + pConverter->mpDestroyTextToUnicodeContext( hContext ); +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_resetTextToUnicodeContext( rtl_TextToUnicodeConverter hConverter, + rtl_TextToUnicodeContext hContext ) +{ + const ImplTextConverter* pConverter = static_cast(hConverter); + if ( pConverter && hContext && pConverter->mpResetTextToUnicodeContext ) + pConverter->mpResetTextToUnicodeContext( hContext ); +} + +/* ----------------------------------------------------------------------- */ + +sal_Size SAL_CALL rtl_convertTextToUnicode( rtl_TextToUnicodeConverter hConverter, + rtl_TextToUnicodeContext hContext, + const char* pSrcBuf, sal_Size nSrcBytes, + sal_Unicode* pDestBuf, sal_Size nDestChars, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtBytes ) +{ + assert( + (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) + <= RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_DEFAULT); + assert( + (nFlags & RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK) + <= RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT); + assert( + (nFlags & RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK) + <= RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT); + assert( + (nFlags + & ~(RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK + | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_MASK + | RTL_TEXTTOUNICODE_FLAGS_INVALID_MASK + | RTL_TEXTTOUNICODE_FLAGS_FLUSH + | RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE)) + == 0); + + const ImplTextConverter* pConverter = static_cast(hConverter); + + /* Only temporary, because we don't want die, if we don't have a + converter, because not all converters are implemented yet */ + if ( !pConverter ) + { + SAL_WARN("sal.textenc", "Missing rtl_TextToUnicodeConverter"); + return ImplDummyToUnicode( pSrcBuf, nSrcBytes, + pDestBuf, nDestChars, + nFlags, pInfo, pSrcCvtBytes ); + } + + return pConverter->mpConvertTextToUnicodeProc( pConverter->mpConvertData, + hContext, + pSrcBuf, nSrcBytes, + pDestBuf, nDestChars, + nFlags, pInfo, + pSrcCvtBytes ); +} + +/* ======================================================================= */ + +rtl_UnicodeToTextConverter SAL_CALL rtl_createUnicodeToTextConverter( rtl_TextEncoding eTextEncoding ) +{ + const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding ); + if ( pData ) + return static_cast(const_cast(&pData->maConverter)); + return nullptr; +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_destroyUnicodeToTextConverter( + SAL_UNUSED_PARAMETER rtl_UnicodeToTextConverter ) +{} + +/* ----------------------------------------------------------------------- */ + +rtl_UnicodeToTextContext SAL_CALL rtl_createUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter ) +{ + const ImplTextConverter* pConverter = static_cast(hConverter); + if ( !pConverter ) + return nullptr; + if ( pConverter->mpCreateUnicodeToTextContext ) + return pConverter->mpCreateUnicodeToTextContext(); + return reinterpret_cast(1); +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_destroyUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter, + rtl_UnicodeToTextContext hContext ) +{ + const ImplTextConverter* pConverter = static_cast(hConverter); + if ( pConverter && hContext && pConverter->mpDestroyUnicodeToTextContext ) + pConverter->mpDestroyUnicodeToTextContext( hContext ); +} + +/* ----------------------------------------------------------------------- */ + +void SAL_CALL rtl_resetUnicodeToTextContext( rtl_UnicodeToTextConverter hConverter, + rtl_UnicodeToTextContext hContext ) +{ + const ImplTextConverter* pConverter = static_cast(hConverter); + if ( pConverter && hContext && pConverter->mpResetUnicodeToTextContext ) + pConverter->mpResetUnicodeToTextContext( hContext ); +} + +/* ----------------------------------------------------------------------- */ + +sal_Size SAL_CALL rtl_convertUnicodeToText( rtl_UnicodeToTextConverter hConverter, + rtl_UnicodeToTextContext hContext, + const sal_Unicode* pSrcBuf, sal_Size nSrcChars, + char* pDestBuf, sal_Size nDestBytes, + sal_uInt32 nFlags, sal_uInt32* pInfo, + sal_Size* pSrcCvtChars ) +{ + assert( + (nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK) + <= RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT); + assert( + (nFlags & RTL_UNICODETOTEXT_FLAGS_INVALID_MASK) + <= RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT); + assert( + (nFlags + & ~(RTL_UNICODETOTEXT_FLAGS_UNDEFINED_MASK + | RTL_UNICODETOTEXT_FLAGS_INVALID_MASK + | RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE + | RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR + | RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 + | RTL_UNICODETOTEXT_FLAGS_NONSPACING_IGNORE + | RTL_UNICODETOTEXT_FLAGS_CONTROL_IGNORE + | RTL_UNICODETOTEXT_FLAGS_PRIVATE_IGNORE + | RTL_UNICODETOTEXT_FLAGS_NOCOMPOSITE + | RTL_UNICODETOTEXT_FLAGS_FLUSH + | RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE)) + == 0); + + const ImplTextConverter* pConverter = static_cast(hConverter); + + /* Only temporary, because we don't want die, if we don't have a + converter, because not all converters are implemented yet */ + if ( !pConverter ) + { + SAL_WARN("sal.textenc", "Missing rtl_UnicodeToTextConverter"); + return ImplUnicodeToDummy( pSrcBuf, nSrcChars, + pDestBuf, nDestBytes, + nFlags, pInfo, pSrcCvtChars ); + } + + return pConverter->mpConvertUnicodeToTextProc( pConverter->mpConvertData, + hContext, + pSrcBuf, nSrcChars, + pDestBuf, nDestBytes, + nFlags, pInfo, + pSrcCvtChars ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/textenc.cxx b/sal/textenc/textenc.cxx new file mode 100644 index 000000000..5765637fd --- /dev/null +++ b/sal/textenc/textenc.cxx @@ -0,0 +1,436 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +/* TODO! This file should not be called textenc.c, because it is not the + implementation of rtl/textenc.h. Rather, it should be called + gettextencodingdata.c. */ + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "convertsimple.hxx" +#include "gettextencodingdata.hxx" +#include "tcvtbyte.hxx" +#include "tcvtutf8.hxx" +#include "tenchelp.hxx" + +#define NOTABUNI_START 0xFF +#define NOTABUNI_END 0x00 + +#define NOTABCHAR_START 0xFFFF +#define NOTABCHAR_END 0x0000 + +#define SAME8090UNI_START 0x80 +#define SAME8090UNI_END 0x9F +sal_uInt16 const aImpl8090SameToUniTab[SAME8090UNI_END + - SAME8090UNI_START + + 1] += { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, /* 0x80 */ + 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, /* 0x90 */ + 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F }; + +#define SAME8090CHAR_START 0x0080 +#define SAME8090CHAR_END 0x009F +unsigned char const aImpl8090SameToCharTab[SAME8090CHAR_END + - SAME8090CHAR_START + + 1] + = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x0080 */ + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x0090 */ + 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F }; + +#define SAMEA0FFCHAR_START 0x00A0 +#define SAMEA0FFCHAR_END 0x00FF +unsigned char const aImplA0FFSameToCharTab[SAMEA0FFCHAR_END + - SAMEA0FFCHAR_START + + 1] + = { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */ + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */ + 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */ + 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x00D0 */ + 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */ + 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x00F0 */ + 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF }; + +/* ======================================================================= */ + +/* MS-1252 */ +/* Windows Standard CharSet (ANSI) for Western Script */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* Convert-Tables: mappings/vendors/micsft/windows/cp1252.txt from 04/15/98 Version 2.01 */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +#define MS1252UNI_START 0x80 +#define MS1252UNI_END 0xFF +sal_uInt16 const aImplMS1252ToUniTab[MS1252UNI_END - MS1252UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */ + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0x017D, 0, /* 0x80 */ + 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */ + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0x017E, 0x0178, /* 0x90 */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +#define MS1252TOCHARTABEX_COUNT 27 +ImplUniCharTabData const aImplMS1252ToCharTabEx[MS1252TOCHARTABEX_COUNT] = +{ + { 0x0152, 0x8C, 0 }, + { 0x0153, 0x9C, 0 }, + { 0x0160, 0x8A, 0 }, + { 0x0161, 0x9A, 0 }, + { 0x0178, 0x9F, 0 }, + { 0x017D, 0x8E, 0 }, + { 0x017E, 0x9E, 0 }, + { 0x0192, 0x83, 0 }, + { 0x02C6, 0x88, 0 }, + { 0x02DC, 0x98, 0 }, + { 0x2013, 0x96, 0 }, + { 0x2014, 0x97, 0 }, + { 0x2018, 0x91, 0 }, + { 0x2019, 0x92, 0 }, + { 0x201A, 0x82, 0 }, + { 0x201C, 0x93, 0 }, + { 0x201D, 0x94, 0 }, + { 0x201E, 0x84, 0 }, + { 0x2020, 0x86, 0 }, + { 0x2021, 0x87, 0 }, + { 0x2022, 0x95, 0 }, + { 0x2026, 0x85, 0 }, + { 0x2030, 0x89, 0 }, + { 0x2039, 0x8B, 0 }, + { 0x203A, 0x9B, 0 }, + { 0x20AC, 0x80, 0 }, + { 0x2122, 0x99, 0 }, +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplMS1252ByteCvtData = +{ + aImplMS1252ToUniTab, + nullptr, + aImplA0FFSameToCharTab, + nullptr, + aImplMS1252ToCharTabEx, + MS1252UNI_START, MS1252UNI_END, + NOTABUNI_START, NOTABUNI_END, + SAMEA0FFCHAR_START, SAMEA0FFCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + MS1252TOCHARTABEX_COUNT +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplMS1252TextEncodingData + = { { &aImplMS1252ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "windows-1252", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* WIN, SCRIPT_LATIN, pc code page 850 */ + +/* ======================================================================= */ + +/* ISO-8859-1 */ +/* Unix Standard CharSet (Latin1) for Western Script */ +/* 1-Byte, 0x00-0x7F ASCII without exception, 0x80-0x9F control character like in Unicode */ +/* Convert-Tables: mappings/iso8859/8859-1.txt from 07/27/99 Version 1.0 (based on Unicode 3.0) */ +/* Last-Changes from us: */ + +#define ISO88591UNI_START 0xA0 +#define ISO88591UNI_END 0xFF +sal_uInt16 const aImplISO88591ToUniTab[ISO88591UNI_END - ISO88591UNI_START + 1] = +{ +/* 0 1 2 3 4 5 6 7 */ +/* 8 9 A B C D E F */ + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */ + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */ + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */ + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */ + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */ + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */ + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, /* 0xD0 */ + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, /* 0xD0 */ + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */ + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */ + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, /* 0xF0 */ + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF /* 0xF0 */ +}; + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplISO88591ByteCvtData = +{ + aImplISO88591ToUniTab, + aImpl8090SameToUniTab, + aImplA0FFSameToCharTab, + aImpl8090SameToCharTab, + nullptr, + ISO88591UNI_START, ISO88591UNI_END, + SAME8090UNI_START, SAME8090UNI_END, + SAMEA0FFCHAR_START, SAMEA0FFCHAR_END, + SAME8090CHAR_START, SAME8090CHAR_END, + 0 +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplISO88591TextEncodingData + = { { &aImplISO88591ByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "iso-8859-1", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_LATIN, pc code page 850 */ + +/* ======================================================================= */ + +/* US-ASCII */ +/* 7-Bit ASCII */ +/* 1-Byte, 0x00-0x7F ASCII without exception */ +/* For the import we use ISO-8859-1 with MS extension (MS-1252), because */ +/* when the 8-Bit is set, the chance, that this is an ISO-8859-1 character */ +/* is the greatest. For the export all chars greater than 127 are not */ +/* converted and are replaced by the replacement character. */ +/* Last-Changes from us: */ + +/* ----------------------------------------------------------------------- */ + +ImplByteConvertData const aImplUSASCIIByteCvtData = +{ + aImplMS1252ToUniTab, + nullptr, + nullptr, + nullptr, + nullptr, + MS1252UNI_START, MS1252UNI_END, + NOTABUNI_START, NOTABUNI_END, + NOTABCHAR_START, NOTABCHAR_END, + NOTABCHAR_START, NOTABCHAR_END, + 0 +}; + +/* ----------------------------------------------------------------------- */ + +ImplTextEncodingData const aImplUSASCIITextEncodingData + = { { &aImplUSASCIIByteCvtData, + sal::detail::textenc::convertCharToUnicode, + sal::detail::textenc::convertUnicodeToChar, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr }, + "iso8859-1", + "us-ascii", + 1, + 1, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_7BIT + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_LATIN, pc code page 437 */ + +ImplTextEncodingData const aImplUTF8TextEncodingData + = { { nullptr, + &ImplConvertUtf8ToUnicode, + &ImplConvertUnicodeToUtf8, + &ImplCreateUtf8ToUnicodeContext, + &ImplDestroyUtf8ToUnicodeContext, + &ImplResetUtf8ToUnicodeContext, + &ImplCreateUnicodeToUtf8Context, + &ImplDestroyUnicodeToUtf8Context, + &ImplResetUnicodeToUtf8Context }, + "iso8859-1", + "utf-8", + 1, + 6, + 1, + 0, + RTL_TEXTENCODING_INFO_ASCII + | RTL_TEXTENCODING_INFO_UNICODE + | RTL_TEXTENCODING_INFO_MULTIBYTE + | RTL_TEXTENCODING_INFO_MIME }; + /* SCRIPT_UNICODE, pc code page 850 */ + +static char aImplJavaUtf8TextConverterTag; + /* The value of this tag is irrelevant. Only its address != NULL is used to + distinguish between RTL_TEXTENCODING_UTF8 and + RTL_TEXTENCODING_JAVA_UTF8. */ + +ImplTextEncodingData const aImplJavaUtf8TextEncodingData + = { { &aImplJavaUtf8TextConverterTag, + &ImplConvertUtf8ToUnicode, + &ImplConvertUnicodeToUtf8, + &ImplCreateUtf8ToUnicodeContext, + &ImplDestroyUtf8ToUnicodeContext, + &ImplResetUtf8ToUnicodeContext, + &ImplCreateUnicodeToUtf8Context, + &ImplDestroyUnicodeToUtf8Context, + &ImplResetUnicodeToUtf8Context }, + nullptr, + nullptr, + 1, + 3, + 1, + 0, + RTL_TEXTENCODING_INFO_UNICODE | RTL_TEXTENCODING_INFO_MULTIBYTE }; + +namespace { + +#ifndef COND_LIB_SAL_TEXTENC + +extern "C" ImplTextEncodingData const * sal_getFullTextEncodingData( + rtl_TextEncoding); // from tables.cxx in sal_textenc library + +class FullTextEncodingData { +public: + ImplTextEncodingData const * get(rtl_TextEncoding encoding) { + (void) this; // loplugin:staticmethods + return sal_getFullTextEncodingData(encoding); + } + FullTextEncodingData() = default; + FullTextEncodingData(const FullTextEncodingData&) = delete; + FullTextEncodingData& operator=(const FullTextEncodingData&) = delete; +}; + +#else + +extern "C" { + +typedef ImplTextEncodingData const * TextEncodingFunction(rtl_TextEncoding); + +void thisModule() {} + +} + +class FullTextEncodingData { +public: + FullTextEncodingData() { + if (!module_.loadRelative(&thisModule, SAL_MODULENAME("sal_textenclo"))) + { + SAL_WARN( "sal.textenc", "Loading sal_textenc library failed" ); + std::abort(); + } + function_ = reinterpret_cast< TextEncodingFunction * >( + module_.getFunctionSymbol("sal_getFullTextEncodingData")); + if (function_ == nullptr) { + SAL_WARN( "sal.textenc", "Obtaining sal_getFullTextEncodingData function from sal_textenc" + " library failed"); + std::abort(); + } + } + + ImplTextEncodingData const * get(rtl_TextEncoding encoding) const { + return (*function_)(encoding); + } + + FullTextEncodingData(const FullTextEncodingData&) = delete; + FullTextEncodingData& operator=(const FullTextEncodingData&) = delete; + +private: + osl::Module module_; + TextEncodingFunction * function_; +}; + +#endif + +} + +ImplTextEncodingData const * +Impl_getTextEncodingData(rtl_TextEncoding nEncoding) +{ + switch(nEncoding) + { + case RTL_TEXTENCODING_ASCII_US: + return &aImplUSASCIITextEncodingData; break; + case RTL_TEXTENCODING_MS_1252: + return &aImplMS1252TextEncodingData; break; + case RTL_TEXTENCODING_UTF8: + return &aImplUTF8TextEncodingData; break; + case RTL_TEXTENCODING_JAVA_UTF8: + return &aImplJavaUtf8TextEncodingData; break; + case RTL_TEXTENCODING_ISO_8859_1: + return &aImplISO88591TextEncodingData; break; + default: + { + static FullTextEncodingData gFullTextEncodingData; + return gFullTextEncodingData.get(nEncoding); + } + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/unichars.cxx b/sal/textenc/unichars.cxx new file mode 100644 index 000000000..abd6945cf --- /dev/null +++ b/sal/textenc/unichars.cxx @@ -0,0 +1,87 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include "unichars.hxx" + +bool ImplIsControlOrFormat(sal_uInt32 nUtf32) +{ + // All code points of + // , Version 3.1.1, + // that have a General Category of Cc (Other, Control) or Cf (Other, + // Format): + return nUtf32 <= 0x001F || (nUtf32 >= 0x007F && nUtf32 <= 0x009F) + || nUtf32 == 0x070F // SYRIAC ABBREVIATION MARK + || nUtf32 == 0x180B // MONGOLIAN FREE VARIATION SELECTOR ONE + || nUtf32 == 0x180C // MONGOLIAN FREE VARIATION SELECTOR TWO + || nUtf32 == 0x180D // MONGOLIAN FREE VARIATION SELECTOR THREE + || nUtf32 == 0x180E // MONGOLIAN VOWEL SEPARATOR + || nUtf32 == 0x200C // ZERO WIDTH NON-JOINER + || nUtf32 == 0x200D // ZERO WIDTH JOINER + || nUtf32 == 0x200E // LEFT-TO-RIGHT MARK + || nUtf32 == 0x200F // RIGHT-TO-LEFT MARK + || nUtf32 == 0x202A // LEFT-TO-RIGHT EMBEDDING + || nUtf32 == 0x202B // RIGHT-TO-LEFT EMBEDDING + || nUtf32 == 0x202C // POP DIRECTIONAL FORMATTING + || nUtf32 == 0x202D // LEFT-TO-RIGHT OVERRIDE + || nUtf32 == 0x202E // RIGHT-TO-LEFT OVERRIDE + || nUtf32 == 0x206A // INHIBIT SYMMETRIC SWAPPING + || nUtf32 == 0x206B // ACTIVATE SYMMETRIC SWAPPING + || nUtf32 == 0x206C // INHIBIT ARABIC FORM SHAPING + || nUtf32 == 0x206D // ACTIVATE ARABIC FORM SHAPING + || nUtf32 == 0x206E // NATIONAL DIGIT SHAPES + || nUtf32 == 0x206F // NOMINAL DIGIT SHAPES + || nUtf32 == 0xFEFF // ZERO WIDTH NO-BREAK SPACE + || nUtf32 == 0xFFF9 // INTERLINEAR ANNOTATION ANCHOR + || nUtf32 == 0xFFFA // INTERLINEAR ANNOTATION SEPARATOR + || nUtf32 == 0xFFFB // INTERLINEAR ANNOTATION TERMINATOR + || nUtf32 == 0x1D173 // MUSICAL SYMBOL BEGIN BEAM + || nUtf32 == 0x1D174 // MUSICAL SYMBOL END BEAM + || nUtf32 == 0x1D175 // MUSICAL SYMBOL BEGIN TIE + || nUtf32 == 0x1D176 // MUSICAL SYMBOL END TIE + || nUtf32 == 0x1D177 // MUSICAL SYMBOL BEGIN SLUR + || nUtf32 == 0x1D178 // MUSICAL SYMBOL END SLUR + || nUtf32 == 0x1D179 // MUSICAL SYMBOL BEGIN PHRASE + || nUtf32 == 0x1D17A // MUSICAL SYMBOL END PHRASE + || nUtf32 == 0xE0001 // LANGUAGE TAG + || (nUtf32 >= 0xE0020 && nUtf32 <= 0xE007F); +} + +bool ImplIsPrivateUse(sal_uInt32 nUtf32) +{ + // All code points of + // , Version 3.1.1, + // that have a General Category of Co (Other, Private Use): + return (nUtf32 >= 0xE000 && nUtf32 <= 0xF8FF) || (nUtf32 >= 0xF0000 && nUtf32 <= 0xFFFFD) + || (nUtf32 >= 0x100000 && nUtf32 <= 0x10FFFD); +} + +bool ImplIsZeroWidth(sal_uInt32 nUtf32) +{ + // All code points of + // , Version 3.1.1, + // that have "ZERO WIDTH" in their Character name: + return nUtf32 == 0x200B // ZERO WIDTH SPACE + || nUtf32 == 0x200C // ZERO WIDTH NON-JOINER + || nUtf32 == 0x200D // ZERO WIDTH JOINER + || nUtf32 == 0xFEFF; // ZERO WIDTH NO-BREAK SPACE +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/textenc/unichars.hxx b/sal/textenc/unichars.hxx new file mode 100644 index 000000000..e627d3c95 --- /dev/null +++ b/sal/textenc/unichars.hxx @@ -0,0 +1,40 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_SAL_TEXTENC_UNICHARS_HXX +#define INCLUDED_SAL_TEXTENC_UNICHARS_HXX + +#include + +#include + +#include +#include + +#define RTL_TEXTENC_UNICODE_REPLACEMENT_CHARACTER 0xFFFD + +bool ImplIsControlOrFormat(sal_uInt32 nUtf32); + +bool ImplIsPrivateUse(sal_uInt32 nUtf32); + +bool ImplIsZeroWidth(sal_uInt32 nUtf32); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sal/util/sal.map b/sal/util/sal.map new file mode 100644 index 000000000..c5c3e4d55 --- /dev/null +++ b/sal/util/sal.map @@ -0,0 +1,778 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +UDK_3_0_0 { + global: + _ZTI*; _ZTS*; # weak RTTI symbols for C++ exceptions + + osl_acceptConnectionOnSocket; + osl_acceptPipe; + osl_acquireSocket; + osl_acquirePipe; + osl_acquireMutex; + osl_acquireSemaphore; + osl_addSignalHandler; + osl_addToSocketSet; + osl_assertFailedLine; + osl_bindAddrToSocket; + osl_breakDebug; + osl_checkCondition; + osl_clearSocketSet; + osl_closeDirectory; + osl_closePipe; + osl_closeProfile; + osl_connectSocketTo; + osl_copyHostAddr; + osl_copySocketAddr; + osl_createCondition; + osl_createEmptySocketAddr; + osl_createHostAddr; + osl_createHostAddrByAddr; + osl_createHostAddrByName; + osl_createInetSocketAddr; + osl_createMutex; + osl_createPipe; + osl_createSemaphore; + osl_createSocket; + osl_createSocketSet; + osl_createSuspendedThread; + osl_createThread; + osl_createThreadKey; + osl_decrementInterlockedCount; + osl_demultiplexSocketEvents; + osl_destroyCondition; + osl_destroyHostAddr; + osl_destroyMutex; + osl_destroySemaphore; + osl_destroySocketAddr; + osl_destroySocketSet; + osl_destroyThread; + osl_destroyThreadKey; + osl_enableNonBlockingMode; + osl_executeProcess; + osl_executeProcess_WithRedirectedIO; + osl_flushProfile; + osl_freeProcessHandle; + osl_freeSecurityHandle; + osl_getAddrOfSocketAddr; + osl_getCommandArg; + osl_getCommandArgCount; + osl_getConfigDir; + osl_getCurrentSecurity; + osl_getDirectoryItem; + osl_getDottedInetAddrOfSocketAddr; + osl_getEnvironment; + osl_getEthernetAddress; + osl_getExecutableFile; + osl_getFamilyOfSocketAddr; + osl_getFileStatus; + osl_getFileURLFromSystemPath; + osl_getGlobalMutex; + osl_getHomeDir; + osl_getHostnameOfHostAddr; + osl_getHostnameOfSocketAddr; + osl_getInetPortOfSocketAddr; + osl_getLastPipeError; + osl_getLastSocketError; + osl_getLastSocketErrorDescription; + osl_getLocalAddrOfSocket; + osl_getLocalHostname; + osl_getModuleURLFromAddress; + osl_getNextDirectoryItem; + osl_getPeerAddrOfSocket; + osl_getProcess; + osl_getProcessInfo; + osl_getProcessWorkingDir; + osl_getProfileSectionEntries; + osl_getProfileSections; + osl_getServicePort; + osl_getSocketAddrOfHostAddr; + osl_getSocketOption; + osl_getSocketType; + osl_getSymbol; + osl_getSystemPathFromFileURL; + osl_getSystemTime; + osl_getThreadIdentifier; + osl_getThreadKeyData; + osl_getThreadPriority; + osl_getThreadTextEncoding; + osl_getUserIdent; + osl_getUserName; + osl_getVolumeInformation; + osl_incrementInterlockedCount; + osl_isAdministrator; + osl_isEndOfFile; + osl_isEqualSocketAddr; + osl_isExceptionPending; + osl_isInSocketSet; + osl_isNonBlockingMode; + osl_isReceiveReady; + osl_isSendReady; + osl_isThreadRunning; + osl_joinProcess; + osl_joinWithThread; + osl_listenOnSocket; + osl_loadModule; + osl_loginUser; + osl_loginUserOnFileServer; + osl_openDirectory; + osl_openProfile; + osl_raiseSignal; + osl_readProfileBool; + osl_readProfileIdent; + osl_readProfileString; + osl_readPipe; + osl_readSocket; + osl_receiveFromSocket; + osl_receivePipe; + osl_receiveSocket; + osl_releaseDirectoryItem; + osl_releaseMutex; + osl_releasePipe; + osl_releaseSemaphore; + osl_releaseSocket; + osl_removeFromSocketSet; + osl_removeProfileEntry; + osl_removeSignalHandler; + osl_reportError; + osl_resetCondition; + osl_resolveHostname; + osl_resumeThread; + osl_scheduleThread; + osl_searchFileURL; + osl_sendPipe; + osl_sendSocket; + osl_sendToSocket; + osl_setCondition; + osl_setFileAttributes; + osl_setFileTime; + osl_setInetPortOfSocketAddr; + osl_setAddrOfSocketAddr; + osl_setSocketOption; + osl_setThreadKeyData; + osl_setThreadPriority; + osl_setThreadTextEncoding; + osl_shutdownSocket; + osl_suspendThread; + osl_terminateProcess; + osl_terminateThread; + osl_trace; + osl_tryToAcquireMutex; + osl_tryToAcquireSemaphore; + osl_unloadModule; + osl_waitCondition; + osl_waitThread; + osl_writePipe; + osl_writeSocket; + osl_writeProfileBool; + osl_writeProfileIdent; + osl_writeProfileString; + osl_yieldThread; + osl_loadUserProfile; + osl_unloadUserProfile; + osl_sendResourcePipe; + osl_receiveResourcePipe; + rtl_allocateMemory; + rtl_compareMemory; + rtl_copyMemory; + rtl_fillMemory; + rtl_freeMemory; + rtl_moveMemory; + rtl_reallocateMemory; + rtl_zeroMemory; + rtl_findInMemory; + rtl_locale_equals; + rtl_locale_getCountry; + rtl_locale_getDefault; + rtl_locale_getLanguage; + rtl_locale_getVariant; + rtl_locale_hashCode; + rtl_locale_register; + rtl_locale_setDefault; + rtl_str_getLength; + rtl_str_compare; + rtl_str_compare_WithLength; + rtl_str_shortenedCompare_WithLength; + rtl_str_reverseCompare_WithLength; + rtl_str_compareIgnoreAsciiCase; + rtl_str_compareIgnoreAsciiCase_WithLength; + rtl_str_shortenedCompareIgnoreAsciiCase_WithLength; + rtl_str_hashCode; + rtl_str_hashCode_WithLength; + rtl_str_indexOfChar; + rtl_str_indexOfChar_WithLength; + rtl_str_indexOfStr; + rtl_str_indexOfStr_WithLength; + rtl_str_lastIndexOfChar; + rtl_str_lastIndexOfChar_WithLength; + rtl_str_lastIndexOfStr; + rtl_str_lastIndexOfStr_WithLength; + rtl_str_replaceChar; + rtl_str_replaceChar_WithLength; + rtl_str_toAsciiLowerCase; + rtl_str_toAsciiLowerCase_WithLength; + rtl_str_toAsciiUpperCase; + rtl_str_toAsciiUpperCase_WithLength; + rtl_str_trim; + rtl_str_trim_WithLength; + rtl_str_valueOfBoolean; + rtl_str_valueOfChar; + rtl_str_valueOfInt32; + rtl_str_valueOfInt64; + rtl_str_valueOfDouble; + rtl_str_valueOfFloat; + rtl_str_toBoolean; + rtl_str_toInt32; + rtl_str_toInt64; + rtl_str_toDouble; + rtl_str_toFloat; + rtl_string_acquire; + rtl_string_assign; + rtl_string_getLength; + rtl_string_getStr; + rtl_string_getToken; + rtl_string_new; + rtl_string_newConcat; + rtl_string_newFromStr; + rtl_string_newFromStr_WithLength; + rtl_string_newFromLiteral; + rtl_string_newFromString; + rtl_string_newReplace; + rtl_string_newReplaceStrAt; + rtl_string_newToAsciiLowerCase; + rtl_string_newToAsciiUpperCase; + rtl_string_newTrim; + rtl_string_new_WithLength; + rtl_string_release; + rtl_stringbuffer_ensureCapacity; + rtl_stringbuffer_insert; + rtl_stringbuffer_newFromStr_WithLength; + rtl_stringbuffer_newFromStringBuffer; + rtl_ustr_compare; + rtl_ustr_compare_WithLength; + rtl_ustr_shortenedCompare_WithLength; + rtl_ustr_reverseCompare_WithLength; + rtl_ustr_compareIgnoreAsciiCase; + rtl_ustr_compareIgnoreAsciiCase_WithLength; + rtl_ustr_shortenedCompareIgnoreAsciiCase_WithLength; + rtl_ustr_ascii_compare; + rtl_ustr_ascii_compare_WithLength; + rtl_ustr_ascii_shortenedCompare_WithLength; + rtl_ustr_asciil_reverseCompare_WithLength; + rtl_ustr_ascii_compareIgnoreAsciiCase; + rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength; + rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength; + rtl_ustr_getLength; + rtl_ustr_hashCode; + rtl_ustr_hashCode_WithLength; + rtl_ustr_indexOfChar; + rtl_ustr_indexOfChar_WithLength; + rtl_ustr_indexOfStr; + rtl_ustr_indexOfStr_WithLength; + rtl_ustr_lastIndexOfChar; + rtl_ustr_lastIndexOfChar_WithLength; + rtl_ustr_lastIndexOfStr; + rtl_ustr_lastIndexOfStr_WithLength; + rtl_ustr_replaceChar; + rtl_ustr_replaceChar_WithLength; + rtl_ustr_toAsciiLowerCase; + rtl_ustr_toAsciiLowerCase_WithLength; + rtl_ustr_toAsciiUpperCase; + rtl_ustr_toAsciiUpperCase_WithLength; + rtl_ustr_trim; + rtl_ustr_trim_WithLength; + rtl_ustr_valueOfBoolean; + rtl_ustr_valueOfChar; + rtl_ustr_valueOfInt32; + rtl_ustr_valueOfInt64; + rtl_ustr_valueOfDouble; + rtl_ustr_valueOfFloat; + rtl_ustr_toBoolean; + rtl_ustr_toInt32; + rtl_ustr_toInt64; + rtl_ustr_toDouble; + rtl_ustr_toFloat; + rtl_uString_acquire; + rtl_uString_assign; + rtl_uString_getLength; + rtl_uString_getStr; + rtl_uString_getToken; + rtl_uString_new; + rtl_uString_newConcat; + rtl_uString_newFromStr; + rtl_uString_newFromStr_WithLength; + rtl_uString_newFromAscii; + rtl_uString_newFromLiteral; + rtl_uString_newFromString; + rtl_uString_newReplace; + rtl_uString_newReplaceStrAt; + rtl_uString_newToAsciiLowerCase; + rtl_uString_newToAsciiUpperCase; + rtl_uString_newTrim; + rtl_uString_new_WithLength; + rtl_uString_release; + rtl_uStringbuffer_ensureCapacity; + rtl_uStringbuffer_insert; + rtl_uStringbuffer_insert_ascii; + rtl_uStringbuffer_newFromStr_WithLength; + rtl_uStringbuffer_newFromStringBuffer; + rtl_string2UString; + rtl_uString2String; + rtl_createTextToUnicodeConverter; + rtl_destroyTextToUnicodeConverter; + rtl_createTextToUnicodeContext; + rtl_destroyTextToUnicodeContext; + rtl_resetTextToUnicodeContext; + rtl_convertTextToUnicode; + rtl_createUnicodeToTextConverter; + rtl_destroyUnicodeToTextConverter; + rtl_createUnicodeToTextContext; + rtl_destroyUnicodeToTextContext; + rtl_resetUnicodeToTextContext; + rtl_convertUnicodeToText; + rtl_isOctetTextEncoding; + rtl_getTextEncodingInfo; + rtl_getTextEncodingFromWindowsCharset; + rtl_getTextEncodingFromUnixCharset; + rtl_getTextEncodingFromMimeCharset; + rtl_getBestWindowsCharsetFromTextEncoding; + rtl_getMimeCharsetFromTextEncoding; + rtl_getBestMimeCharsetFromTextEncoding; + rtl_getBestUnixCharsetFromTextEncoding; + rtl_allocateZeroMemory; + rtl_freeZeroMemory; + rtl_crc32; + rtl_digest_create; + rtl_digest_createMD2; + rtl_digest_createMD5; + rtl_digest_createSHA; + rtl_digest_createSHA1; + rtl_digest_createHMAC_MD5; + rtl_digest_createHMAC_SHA1; + rtl_digest_destroy; + rtl_digest_destroyMD2; + rtl_digest_destroyMD5; + rtl_digest_destroySHA; + rtl_digest_destroySHA1; + rtl_digest_destroyHMAC_MD5; + rtl_digest_destroyHMAC_SHA1; + rtl_digest_get; + rtl_digest_getMD2; + rtl_digest_getMD5; + rtl_digest_getSHA; + rtl_digest_getSHA1; + rtl_digest_getHMAC_MD5; + rtl_digest_getHMAC_SHA1; + rtl_digest_init; + rtl_digest_initHMAC_MD5; + rtl_digest_initHMAC_SHA1; + rtl_digest_queryAlgorithm; + rtl_digest_queryLength; + rtl_digest_update; + rtl_digest_updateMD2; + rtl_digest_updateMD5; + rtl_digest_updateSHA; + rtl_digest_updateSHA1; + rtl_digest_updateHMAC_MD5; + rtl_digest_updateHMAC_SHA1; + rtl_digest_MD2; + rtl_digest_MD5; + rtl_digest_SHA; + rtl_digest_SHA1; + rtl_digest_HMAC_MD5; + rtl_digest_HMAC_SHA1; + rtl_digest_PBKDF2; + + rtl_random_createPool; + rtl_random_destroyPool; + rtl_random_addBytes; + rtl_random_getBytes; + + rtl_createUuid; + rtl_createNamedUuid; + rtl_compareUuid; + rtl_getGlobalProcessId; + + osl_openFile; + osl_setFilePos; + osl_getFilePos; + osl_setFileSize; + osl_readFile; + osl_writeFile; + osl_closeFile; + osl_createDirectory; + osl_removeDirectory; + osl_removeFile; + osl_copyFile; + osl_moveFile; + + osl_closeSocket; + osl_createInetBroadcastAddr; + + rtl_cipher_create; + rtl_cipher_createBF; + rtl_cipher_init; + rtl_cipher_initBF; + rtl_cipher_encode; + rtl_cipher_encodeBF; + rtl_cipher_decode; + rtl_cipher_decodeBF; + rtl_cipher_destroy; + rtl_cipher_destroyBF; + + rtl_byte_sequence_reference2One; + rtl_byte_sequence_realloc; + rtl_byte_sequence_acquire; + rtl_byte_sequence_release; + rtl_byte_sequence_construct; + rtl_byte_sequence_constructNoDefault; + rtl_byte_sequence_constructFromArray; + rtl_byte_sequence_assign; + rtl_byte_sequence_equals; + rtl_byte_sequence_getConstArray; + rtl_byte_sequence_getLength; + + osl_acquireDirectoryItem; + + osl_abbreviateSystemPath; + osl_getDateTimeFromTimeValue; + osl_getTimeValueFromDateTime; + osl_getLocalTimeFromSystemTime; + osl_getSystemTimeFromLocalTime; + osl_getAbsoluteFileURL; + + osl_releaseVolumeDeviceHandle; + osl_getVolumeDeviceMountPath; + osl_acquireVolumeDeviceHandle; + + osl_setDebugMessageFunc; + osl_setDetailedDebugMessageFunc; + osl_readLine; + osl_getGlobalTimer; + osl_getCanonicalName; + osl_getTextEncodingFromLocale; + + rtl_getUriCharClass; + rtl_uriConvertRelToAbs; + rtl_uriEncode; + rtl_uriDecode; + + rtl_bootstrap_get; + rtl_bootstrap_set; + rtl_bootstrap_setIniFileName; + rtl_bootstrap_args_open; + rtl_bootstrap_args_close; + rtl_bootstrap_get_from_handle; + rtl_bootstrap_get_iniName_from_handle; + rtl_bootstrap_expandMacros_from_handle; + rtl_bootstrap_expandMacros; + rtl_getAppCommandArgCount; + rtl_getAppCommandArg; + + rtl_moduleCount_acquire; + rtl_moduleCount_release; + rtl_moduleCount_canUnload; + rtl_registerModuleForUnloading; + rtl_unregisterModuleForUnloading; + rtl_unloadUnusedModules; + rtl_addUnloadingListener; + rtl_removeUnloadingListener; + + rtl_logfile_trace; + osl_getProcessLocale; + osl_setProcessLocale; + local: + *; +}; + +UDK_3.1 { + global: + osl_getTempDirURL; + osl_createTempFile; + + rtl_math_doubleToString; + rtl_math_doubleToUString; + rtl_math_pow10Exp; + rtl_math_round; + rtl_math_stringToDouble; + rtl_math_uStringToDouble; + rtl_convertUStringToString; + + osl_joinProcessWithTimeout; + + rtl_getTextEncodingFromWindowsCodePage; + rtl_getWindowsCodePageFromTextEncoding; +} UDK_3_0_0; + +UDK_3.2 { + global: + osl_syncFile; +} UDK_3.1; + +UDK_3.3 { + global: + osl_createDirectoryPath; + osl_getFunctionSymbol; + osl_getModuleURLFromFunctionAddress; + rtl_cipher_createARCFOUR; + rtl_cipher_initARCFOUR; + rtl_cipher_decodeARCFOUR; + rtl_cipher_encodeARCFOUR; + rtl_cipher_destroyARCFOUR; + rtl_digest_rawMD5; + osl_getFileSize; + osl_setCommandArgs; + rtl_uStringbuffer_insertUtf32; + rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths; + rtl_logfile_longTrace; + rtl_ustr_asciil_reverseEquals_WithLength; +} UDK_3.2; + +UDK_3.4 { + global: + osl_setErrorReporting; +} UDK_3.3; + +UDK_3.5 { + global: + rtl_arena_create; + rtl_arena_destroy; + rtl_arena_alloc; + rtl_arena_free; + + rtl_cache_create; + rtl_cache_destroy; + rtl_cache_alloc; + rtl_cache_free; +} UDK_3.4; + +UDK_3.6 { # OOo 2.3 + global: + osl_loadModuleAscii; + osl_getAsciiFunctionSymbol; + osl_getModuleHandle; + rtl_uString_intern; + rtl_uString_internConvert; + rtl_ustr_indexOfAscii_WithLength; + rtl_ustr_lastIndexOfAscii_WithLength; + rtl_uString_iterateCodePoints; + rtl_uString_newFromCodePoints; +} UDK_3.5; + +UDK_3.7 { # OOo 2.4 + global: + osl_loadModuleRelative; +} UDK_3.6; + +UDK_3.8 { # OOo 3.0 + global: + rtl_bootstrap_encode; + rtl_convertStringToUString; + rtl_math_approxValue; +} UDK_3.7; + +UDK_3.9 { # OOo 3.1 + global: + osl_mapFile; + osl_unmapFile; + + osl_readFileAt; + osl_writeFileAt; + + rtl_math_expm1; + rtl_math_log1p; + rtl_math_atanh; +} UDK_3.8; + +UDK_3.10 { # OOo 3.2 + global: + rtl_logfile_hasLogFile; + rtl_math_erf; + rtl_math_erfc; + rtl_math_asinh; + rtl_math_acosh; +} UDK_3.9; + +UDK_3.11 { # symbols available in >= OOo/LibO 3.4 + global: + osl_setEnvironment; + osl_clearEnvironment; + osl_setThreadName; +} UDK_3.10; + +LIBO_UDK_3.5 { # symbols available in >= LibO 3.5 + global: + rtl_stringbuffer_remove; + rtl_uStringbuffer_remove; +} UDK_3.10; + +LIBO_UDK_3.6 { # symbols available in >= LibO 3.6 + global: + osl_unmapMappedFile; + osl_identicalDirectoryItem; + osl_loadModuleRelativeAscii; + rtl_string_newReplaceAll; + rtl_string_newReplaceFirst; + rtl_uString_newReplaceAll; + rtl_uString_newReplaceAllAsciiL; + rtl_uString_newReplaceAllAsciiLAsciiL; + rtl_uString_newReplaceFirst; + rtl_uString_newReplaceFirstAsciiL; + rtl_uString_newReplaceFirstAsciiLAsciiL; + rtl_uStringBuffer_refReturn; + rtl_uStringBuffer_makeStringAndClear; +} UDK_3.10; + +LIBO_UDK_4.0 { # symbols available in >= LibO 4.0 + global: + rtl_string_newFromSubString; + rtl_uString_newFromSubString; + rtl_uString_newReplaceAllFromIndex; +} LIBO_UDK_3.6; + +LIBO_UDK_4.1 { # symbols available in >= LibO 4.1 + global: + rtl_string_ensureCapacity; + rtl_uString_ensureCapacity; + rtl_string_alloc; + rtl_uString_alloc; + rtl_str_toUInt64; + rtl_str_valueOfUInt64; + rtl_ustr_valueOfUInt64; + rtl_ustr_toUInt64; +} LIBO_UDK_4.0; + +LIBO_UDK_4.2 { # symbols available in >= LibO 4.2 + global: + rtl_str_toUInt32; + rtl_ustr_toUInt32; +} LIBO_UDK_4.1; + +LIBO_UDK_4.3 { # symbols available in >= LibO 4.3 + global: + osl_createDirectoryWithFlags; + rtl_allocateAlignedMemory; + rtl_freeAlignedMemory; + osl_areCommandArgsSet; +} LIBO_UDK_4.2; + +LIBO_UDK_5.0 { # symbols available in >= LibO 5.0 + global: + rtl_secureZeroMemory; +} LIBO_UDK_4.3; + +LIBO_UDK_5.1 { # symbols available in >= LibO 5.1 + global: + rtl_uString_newConcatAsciiL; + rtl_uString_newReplaceAllToAsciiL; + rtl_uString_newReplaceFirstToAsciiL; +} LIBO_UDK_5.0; + +LIBO_UDK_5.2 { # symbols available in >= LibO 5.2 + global: + osl_getShortUserName; +} LIBO_UDK_5.1; + +LIBO_UDK_5.3 { # symbols available in >= LibO 5.3 + global: + rtl_math_approxEqual; + rtl_uString_newConcatUtf16L; + rtl_uString_newReplaceAllAsciiLUtf16L; + rtl_uString_newReplaceAllUtf16LAsciiL; + rtl_uString_newReplaceAllUtf16LUtf16L; + rtl_uString_newReplaceFirstAsciiLUtf16L; + rtl_uString_newReplaceFirstUtf16LAsciiL; + rtl_uString_newReplaceFirstUtf16LUtf16L; +} LIBO_UDK_5.2; + +LIBO_UDK_6.2 { # symbols available in >= LibO 6.2 + global: + osl_replaceFile; +} LIBO_UDK_5.3; + +PRIVATE_1.0 { + global: + osl_detail_ObjectRegistry_storeAddresses; + osl_detail_ObjectRegistry_checkObjectCount; + osl_detail_ObjectRegistry_registerObject; + osl_detail_ObjectRegistry_revokeObject; + osl_detail_ObjectRegistry_getMutex; +}; + +PRIVATE_1.1 { + global: + sal_detail_initialize; + sal_detail_deinitialize; +} PRIVATE_1.0; + +PRIVATE_1.2 { # LibreOffice 3.5 + global: + sal_detail_log; + sal_detail_logFormat; +} PRIVATE_1.1; + +PRIVATE_1.3 { # LibreOffice 5.4 + global: + sal_detail_log_report; +} PRIVATE_1.2; + +PRIVATE_1.4 { # LibreOffice 6.0 + global: + _ZN3sal13backtrace_getEj; + _ZN3sal13backtrace_getEm; + _ZN3sal19backtrace_to_stringEPNS_14BacktraceStateE; +} PRIVATE_1.3; + +PRIVATE_1.5 { # LibreOffice 6.1 + global: + rtl_alloc_preInit; +} PRIVATE_1.4; + +PRIVATE_1.6 { # LibreOffice 6.4 + global: + rtl_str_toInt64_WithLength; + rtl_ustr_toInt64_WithLength; + sal_detail_set_log_selector; +} PRIVATE_1.5; + +PRIVATE_1.7 { # LibreOffice 7.1 + global: + rtl_uString_newReplaceAllFromIndexUtf16LUtf16L; +} PRIVATE_1.5; + +PRIVATE_1.8 { # LibreOffice 7.3 + global: + rtl_string_newReplaceStrAt_WithLength; + rtl_uString_newReplaceStrAtUtf16L; +} PRIVATE_1.7; + +PRIVATE_textenc.1 { # LibreOffice 3.6 + global: + _ZN3sal6detail7textenc20convertCharToUnicode*; + _ZN3sal6detail7textenc20convertUnicodeToChar*; + _ZN3sal6detail7textenc32handleUndefinedUnicodeToTextChar*; + _ZN3sal6detail7textenc37handleBadInputTextToUnicodeConversion*; + _ZN3sal6detail7textenc37handleBadInputUnicodeToTextConversion*; +}; + +# Unique libstdc++ symbols: +GLIBCXX_3.4 { + global: + _ZGVNSt7num_put*; _ZNSt7num_put*; + _ZNSs4_Rep20_S_empty_rep_storageE; +}; -- cgit v1.2.3